From 236d10fc939b5db5e9c11b46b488e4b8dfb44438 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ken=20A=2E=20Rederg=C3=A5rd?= <64542+kenr@users.noreply.github.com> Date: Wed, 12 Dec 2018 10:01:05 +0100 Subject: [PATCH 01/32] Consolidate SoftDevice APIs (#176) Changes: * Consolidate SoftDevice API v2, v3, v5 and v6 We've had feedback from users telling us that it is not easy to know what version of pc-ble-driver to use towards a given SoftDevice API version. We have also experienced that it is time consuming when maintaining the pc-ble-driver project to have separate releases of pc-ble-driver for different major versions. This commit starts a strategy where we release all SoftDevice API versions in every release of pc-ble-driver. It also reuse parts of the codecs from the nRF5 SDK for SoftDevice API v3 and onwards since parts of those are backwards compatible. * Port connectivity firmware build script to cmake (#136, ++) New build system for connectivity firmware The previous way of building the connectivity firmware was a lot of manual steps supported by Windows .bat files and Cygwin/msys bash scripts. The new build system has the following changes: - uses a directory structure convention to automatically determine what and how to build the connectivity firmware - supports Windows, Linux and macOS The build system does the following: - Downloads nRF5 SDK - Applies patches to nRF5 SDK - Searches for connectivity firmware projects - Compiles connectivity firmware for combinations of SoftDevice API version, nRF family and transports (usb, 115k2, 1m) - Merges connectivity with SoftDevice (by invoking mergehex) - Creates DFU packages where relevant (by invoking nrfutil) * Replace boost::asio with ASIO and remove boost dependency (#131) The boost library is large and only the serial port part is used. This commit removes the boost dependency by using ASIO instead of pulling in large portions of the boost library. * Add custom SD RPC error codes (#146) Previously NRF_ERROR_INTERNAL was returned for all errors. Adding a custom range of error codes for SD RPC errors makes it easier to triage bugs. This is a breaking change to the API since NRF_ERROR_INTERNAL is not returned on SD RPC errors. * Add clang tidy and format configuration * Remove union name in structs SWIG has a bug that when using a named union in a struct, see swig/swig#1305. * Automatically setup and run integration tests (#134) This adds the ability to run the integration tests automatically with the use of CMake targets. The CMake targets program the development kits with the correct connectivity firmware and then runs the relevant tests for the development kit type and SoftDevice API version. * Upgrade connectivity to nRF5 SDK 15.2 (#149, ++) * Add non-standard baud-rates on macOS (#152) * Add support for 64-bit architecture on app side Bug fixes: * Fix nRF52840 open close reset issue (#162) * Fix bugs in GAP state when using two or more BLE adapters: - BLE security keys are overwritten - Advertisement data received are blocked (SDv6) - Invoking a different adapter in another adapter's callback make encoding/decoding confused * Fix/SEGGER J-Link-OB hardware flow control detection (#172) * Fix deadlock issue that may happen if open/close is called successively * Fix segfault on reception of ACK packet * Handle packets states without exit criteria (#144) --- .clang-format | 112 + .clang-tidy | 22 + .gitignore | 5 + 3rdparty/catch2/catch.hpp | 13287 -- CMakeLists.txt | 108 +- Installation.md | 257 +- Issues.md | 99 + LICENSE | 2 +- README.md | 523 +- cmake/apple.cmake | 4 - cmake/clang-dev-tools.cmake | 4 +- cmake/clang.cmake | 24 + cmake/gcc.cmake | 6 +- cmake/install-target.cmake | 54 + cmake/msvc.cmake | 1 - cmake/nrf-apply-patches.cmake | 46 + cmake/nrf-download-distfile.cmake | 73 + cmake/pc-ble-driver.cmake | 35 +- doc/segger_ob_logic_analyzer.png | Bin 0 -> 24246 bytes doc/segger_ob_usb_analyzer.png | Bin 0 -> 71350 bytes examples/CMakeLists.txt | 36 + examples/README.md | 29 +- examples/heart_rate_collector/CMakeLists.txt | 49 - examples/heart_rate_collector/main.c | 1062 +- examples/heart_rate_monitor/CMakeLists.txt | 49 - examples/heart_rate_monitor/main.c | 351 +- hex/CMakeLists.txt | 332 + hex/README.md | 9 + hex/bootstrap.sh | 240 - hex/cmake/build_cmd_main.cmake | 27 + hex/cmake/build_cmd_ser_config.cmake | 40 + hex/cmake/util.cmake | 399 + ...tch => nRF5_SDK_11.0.0_connectivity.patch} | 333 +- hex/nRF5_SDK_15.2.0_connectivity.patch | 71323 +++++++++ hex/sd_api_v2/bootstrap_sd_api_v2.sh | 12 - ...nnectivity_2.0.1_115k2_with_s130_2.0.1.hex | 9272 -- .../s130_nrf51_2.0.1_license-agreement.txt | 96 + ....1.hex => s130_nrf51_2.0.1_softdevice.hex} | 2491 - hex/sd_api_v2/sdk_download.sh | 10 - .../s132_nrf52_3.1.0_license-agreement.txt | 96 + hex/sd_api_v3/s132_nrf52_3.1.0_softdevice.hex | 7769 + hex/sd_api_v5/bootstrap_sd_api_v5.sh | 12 - hex/sd_api_v5/build_v5_win.bat | 96 - ...connectivity_0.0.0_115k2_with_s132_5.0.hex | 12108 -- .../connectivity_0.0.0_1m_with_s132_5.0.hex | 12107 -- ...connectivity_2.0.1_115k2_with_s132_5.0.hex | 12108 -- .../connectivity_2.0.1_1m_with_s132_5.0.hex | 12107 -- .../s132_nrf52_5.1.0_license-agreement.txt | 35 + hex/sd_api_v5/s132_nrf52_5.1.0_softdevice.hex | 7843 + hex/sd_api_v6/.gitignore | 5 + hex/sdk150_add_sd_v3v5_support.patch | 111024 --------------- include/common/internal/adapter_internal.h | 42 +- include/common/internal/app_ble_gap.h | 249 + include/common/internal/ble_common.h | 49 +- include/common/internal/log.h | 10 +- .../common/internal/transport/h5_transport.h | 88 +- .../internal/transport/serial_port_enum.h | 4 +- .../transport/serialization_transport.h | 66 +- include/common/internal/transport/transport.h | 25 +- .../common/internal/transport/uart_boost.h | 78 +- .../internal/transport/uart_settings_boost.h | 12 +- include/common/sd_rpc.h | 3 +- include/common/sd_rpc_types.h | 72 +- src/common/adapter_internal.cpp | 101 +- src/common/app_ble_gap.cpp | 570 + src/common/ble_common.cpp | 98 +- .../platform/linux/serial_port_enum.cpp | 105 +- .../platform/macos_osx/serial_port_enum.cpp | 59 +- src/common/platform/win/serial_port_enum.cpp | 20 +- src/common/sd_rpc_impl.cpp | 177 +- src/common/transport/h5.cpp | 111 +- src/common/transport/h5_transport.cpp | 985 +- .../transport/serialization_transport.cpp | 212 +- src/common/transport/slip.cpp | 20 +- src/common/transport/transport.cpp | 46 +- src/common/transport/uart_boost.cpp | 283 +- src/common/transport/uart_settings_boost.cpp | 2 - src/sd_api_common/README.md | 6 + .../sdk/components/libraries/util/app_util.h | 0 .../components/libraries/util/nordic_common.h | 0 .../serialization/common/ble_serialization.c | 2 +- .../serialization/common/ble_serialization.h | 8 +- .../common/cond_field_serialization.c | 2 +- .../common/cond_field_serialization.h | 2 +- .../serialization/common/ser_config.h | 57 +- .../ble/ble_gap_struct_serialization.c | 307 +- .../ble/ble_gap_struct_serialization.h | 54 +- .../ble/ble_gatt_struct_serialization.c | 2 +- .../ble/ble_gatt_struct_serialization.h | 2 +- .../ble/ble_gattc_struct_serialization.c | 2 +- .../ble/ble_gattc_struct_serialization.h | 2 +- .../ble/ble_gatts_struct_serialization.c | 2 +- .../ble/ble_gatts_struct_serialization.h | 2 +- .../ble/ble_l2cap_struct_serialization.c | 2 +- .../ble/ble_l2cap_struct_serialization.h | 7 +- .../struct_ser/ble/ble_struct_serialization.c | 50 +- .../struct_ser/ble/ble_struct_serialization.h | 2 +- src/sd_api_v2/ble_gap_impl.cpp | 725 + src/sd_api_v2/ble_gattc_impl.cpp | 178 + src/sd_api_v2/ble_gatts_impl.cpp | 218 + src/{common => sd_api_v2}/ble_impl.cpp | 74 +- .../s130/serializers/app_ble_gap_sec_keys.h | 127 - .../serializers/ble_gap_evt_auth_status.c | 16 +- .../ble_gap_evt_lesc_dhkey_request.c | 18 +- .../serialization/common/ser_config.h | 4 +- .../components/softdevice/s132/headers/ble.h | 4 +- .../softdevice/s132/headers/ble_gap.h | 2 +- .../softdevice/s132/headers/ble_gattc.h | 4 +- .../softdevice/s132/headers/ble_gatts.h | 6 +- .../softdevice/s132/headers/ble_l2cap.h | 2 +- .../sdk/custom/app_ble_gap_sec_keys.cpp | 146 - src/sd_api_v3/ble_gap_impl.cpp | 807 + src/sd_api_v3/ble_gattc_impl.cpp | 190 + src/sd_api_v3/ble_gatts_impl.cpp | 232 + src/sd_api_v3/ble_impl.cpp | 252 + .../codecs/common/conn_systemreset_app.c | 21 + .../codecs/common/conn_systemreset_app.h | 91 + .../s132/serializers/app_ble_user_mem.c | 74 + .../s132/serializers/app_ble_user_mem.h | 90 + .../codecs/s132/serializers/ble_app.c | 383 + .../codecs/s132/serializers/ble_app.h | 438 + .../codecs/s132/serializers/ble_event.c | 227 + .../codecs/s132/serializers/ble_evt_app.c | 100 + .../codecs/s132/serializers/ble_evt_app.h | 137 + .../codecs/s132/serializers/ble_gap_app.c | 824 + .../codecs/s132/serializers/ble_gap_app.h | 1421 + .../codecs/s132/serializers/ble_gap_evt_app.c | 292 + .../codecs/s132/serializers/ble_gap_evt_app.h | 433 + .../codecs/s132/serializers/ble_gattc_app.c | 259 + .../codecs/s132/serializers/ble_gattc_app.h | 473 + .../s132/serializers/ble_gattc_evt_app.c | 219 + .../s132/serializers/ble_gattc_evt_app.h | 321 + .../codecs/s132/serializers/ble_gatts_app.c | 412 + .../codecs/s132/serializers/ble_gatts_app.h | 659 + .../s132/serializers/ble_gatts_evt_app.c | 148 + .../s132/serializers/ble_gatts_evt_app.h | 206 + .../codecs/s132/serializers/ble_l2cap_app.c | 119 + .../codecs/s132/serializers/ble_l2cap_app.h | 168 + .../s132/serializers/ble_l2cap_evt_app.c | 30 + .../s132/serializers/ble_l2cap_evt_app.h | 68 + .../codecs/s132/serializers/nrf_soc_app.h | 130 + .../components/softdevice/s132/headers/ble.h | 681 + .../softdevice/s132/headers/ble_err.h | 90 + .../softdevice/s132/headers/ble_gap.h | 1917 + .../softdevice/s132/headers/ble_gatt.h | 220 + .../softdevice/s132/headers/ble_gattc.h | 660 + .../softdevice/s132/headers/ble_gatts.h | 778 + .../softdevice/s132/headers/ble_hci.h | 131 + .../softdevice/s132/headers/ble_l2cap.h | 202 + .../softdevice/s132/headers/ble_ranges.h | 138 + .../softdevice/s132/headers/ble_types.h | 205 + .../softdevice/s132/headers/nrf_error.h | 87 + src/{common => sd_api_v5}/ble_gap_impl.cpp | 368 +- src/sd_api_v5/ble_gattc_impl.cpp | 193 + src/sd_api_v5/ble_gatts_impl.cpp | 232 + src/sd_api_v5/ble_impl.cpp | 249 + .../codecs/ble/serializers/ble_gap_evt_app.c | 23 +- .../components/softdevice/s132/headers/ble.h | 6 +- .../softdevice/s132/headers/ble_gap.h | 2 +- .../softdevice/s132/headers/ble_gattc.h | 4 +- .../softdevice/s132/headers/ble_gatts.h | 6 +- .../softdevice/s132/headers/ble_l2cap.h | 2 +- .../sdk/custom/app_ble_gap_sec_keys.cpp | 127 - src/sd_api_v6/ble_gap_impl.cpp | 676 + src/{common => sd_api_v6}/ble_gattc_impl.cpp | 0 src/{common => sd_api_v6}/ble_gatts_impl.cpp | 0 src/sd_api_v6/ble_impl.cpp | 193 + .../codecs/ble/serializers/app_ble_user_mem.c | 101 + .../ble/serializers/app_ble_user_mem.h} | 81 +- .../codecs/ble/serializers/ble_app.c | 513 + .../codecs/ble/serializers/ble_app.h | 523 + .../codecs/ble/serializers/ble_event.c | 326 + .../codecs/ble/serializers/ble_evt_app.c | 129 + .../codecs/ble/serializers/ble_evt_app.h | 157 + .../codecs/ble/serializers/ble_gap_app.c | 1021 + .../codecs/ble/serializers/ble_gap_app.h | 1667 + .../codecs/ble/serializers/ble_gap_evt_app.c | 419 + .../codecs/ble/serializers/ble_gap_evt_app.h | 597 + .../codecs/ble/serializers/ble_gattc_app.c | 286 + .../codecs/ble/serializers/ble_gattc_app.h | 491 + .../ble/serializers/ble_gattc_evt_app.c | 262 + .../ble/serializers/ble_gattc_evt_app.h | 364 + .../codecs/ble/serializers/ble_gatts_app.c | 439 + .../codecs/ble/serializers/ble_gatts_app.h | 677 + .../ble/serializers/ble_gatts_evt_app.c | 190 + .../ble/serializers/ble_gatts_evt_app.h | 249 + .../codecs/ble/serializers/ble_l2cap_app.c | 279 + .../codecs/ble/serializers/ble_l2cap_app.h | 242 + .../ble/serializers/ble_l2cap_evt_app.c | 183 + .../ble/serializers/ble_l2cap_evt_app.h | 126 + .../codecs/ble/serializers/nrf_soc_app.h | 147 + .../codecs/common/conn_systemreset_app.c | 48 + .../codecs/common/conn_systemreset_app.h | 91 + .../components/softdevice/s140/headers/ble.h | 667 + .../softdevice/s140/headers/ble_err.h | 93 + .../softdevice/s140/headers/ble_gap.h | 2691 + .../softdevice/s140/headers/ble_gatt.h | 229 + .../softdevice/s140/headers/ble_gattc.h | 715 + .../softdevice/s140/headers/ble_gatts.h | 845 + .../softdevice/s140/headers/ble_hci.h | 135 + .../softdevice/s140/headers/ble_l2cap.h | 506 + .../softdevice/s140/headers/ble_ranges.h | 156 + .../softdevice/s140/headers/ble_types.h | 215 + .../softdevice/s140/headers/nrf_error.h | 90 + test/CMakeLists.txt | 426 +- test/README.md | 31 +- test/softdevice_api/test_main.cpp | 81 + test/softdevice_api/testcase_advertising.cpp | 331 + .../testcase_driver_open_close.cpp | 149 + test/softdevice_api/testcase_issue_gh_112.cpp | 562 + .../testcase_issue_stuck_in_scan_mode.cpp | 185 + test/softdevice_api/testcase_phy_update.cpp | 308 + test/softdevice_api/testcase_rssi.cpp | 377 + test/softdevice_api/testcase_security.cpp | 314 + test/test_issue_gh_112.cpp | 584 - test/test_pc_ble_driver_open_close.cpp | 287 - test/test_setup.h | 293 - test/test_util.h | 164 - test/test_util_adapter_wrapper.h | 677 - test/test_util_conversion.h | 212 - test/test_util_role.h | 33 - test/{ => transport}/test_h5_transport.cpp | 26 +- test/transport/test_serial_port_enum.cpp | 71 + test/{ => transport}/test_uart_boost.cpp | 165 +- test/{ => transport}/test_virtual_uart.cpp | 22 +- test/util/include/test_setup.h | 137 + test/util/include/test_util.h | 104 + test/util/include/test_util_adapter_wrapper.h | 182 + .../test_util_adapter_wrapper_scratchpad.h | 115 + test/util/include/test_util_conversion.h | 104 + test/util/include/test_util_role.h | 10 + test/util/include/virtual_uart.h | 44 + test/util/src/test_setup.cpp | 229 + test/util/src/test_util.cpp | 314 + test/util/src/test_util_adapter_wrapper.cpp | 1137 + test/util/src/test_util_conversion.cpp | 1092 + test/util/src/test_util_role.cpp | 19 + test/util/src/virtual_uart.cpp | 215 + test/virtual_uart.h | 228 - 239 files changed, 132649 insertions(+), 190597 deletions(-) create mode 100644 .clang-format create mode 100644 .clang-tidy delete mode 100644 3rdparty/catch2/catch.hpp create mode 100644 Issues.md mode change 100755 => 100644 README.md create mode 100644 cmake/clang.cmake create mode 100644 cmake/install-target.cmake create mode 100644 cmake/nrf-apply-patches.cmake create mode 100644 cmake/nrf-download-distfile.cmake create mode 100755 doc/segger_ob_logic_analyzer.png create mode 100755 doc/segger_ob_usb_analyzer.png create mode 100644 examples/CMakeLists.txt delete mode 100644 examples/heart_rate_collector/CMakeLists.txt delete mode 100644 examples/heart_rate_monitor/CMakeLists.txt create mode 100644 hex/CMakeLists.txt create mode 100644 hex/README.md delete mode 100755 hex/bootstrap.sh create mode 100644 hex/cmake/build_cmd_main.cmake create mode 100644 hex/cmake/build_cmd_ser_config.cmake create mode 100644 hex/cmake/util.cmake rename hex/{sd_api_v2/sdk110_connectivity.patch => nRF5_SDK_11.0.0_connectivity.patch} (54%) create mode 100644 hex/nRF5_SDK_15.2.0_connectivity.patch delete mode 100644 hex/sd_api_v2/bootstrap_sd_api_v2.sh delete mode 100644 hex/sd_api_v2/connectivity_2.0.1_115k2_with_s130_2.0.1.hex create mode 100644 hex/sd_api_v2/s130_nrf51_2.0.1_license-agreement.txt rename hex/sd_api_v2/{connectivity_2.0.1_1m_with_s130_2.0.1.hex => s130_nrf51_2.0.1_softdevice.hex} (73%) delete mode 100644 hex/sd_api_v2/sdk_download.sh create mode 100644 hex/sd_api_v3/s132_nrf52_3.1.0_license-agreement.txt create mode 100644 hex/sd_api_v3/s132_nrf52_3.1.0_softdevice.hex delete mode 100644 hex/sd_api_v5/bootstrap_sd_api_v5.sh delete mode 100644 hex/sd_api_v5/build_v5_win.bat delete mode 100644 hex/sd_api_v5/connectivity_0.0.0_115k2_with_s132_5.0.hex delete mode 100644 hex/sd_api_v5/connectivity_0.0.0_1m_with_s132_5.0.hex delete mode 100644 hex/sd_api_v5/connectivity_2.0.1_115k2_with_s132_5.0.hex delete mode 100644 hex/sd_api_v5/connectivity_2.0.1_1m_with_s132_5.0.hex create mode 100644 hex/sd_api_v5/s132_nrf52_5.1.0_license-agreement.txt create mode 100644 hex/sd_api_v5/s132_nrf52_5.1.0_softdevice.hex create mode 100644 hex/sd_api_v6/.gitignore delete mode 100644 hex/sdk150_add_sd_v3v5_support.patch create mode 100644 include/common/internal/app_ble_gap.h create mode 100644 src/common/app_ble_gap.cpp create mode 100644 src/sd_api_common/README.md rename src/{sd_api_v5 => sd_api_common}/sdk/components/libraries/util/app_util.h (100%) rename src/{sd_api_v5 => sd_api_common}/sdk/components/libraries/util/nordic_common.h (100%) rename src/{sd_api_v5 => sd_api_common}/sdk/components/serialization/common/ble_serialization.c (99%) rename src/{sd_api_v5 => sd_api_common}/sdk/components/serialization/common/ble_serialization.h (99%) rename src/{sd_api_v5 => sd_api_common}/sdk/components/serialization/common/cond_field_serialization.c (98%) rename src/{sd_api_v5 => sd_api_common}/sdk/components/serialization/common/cond_field_serialization.h (98%) rename src/{sd_api_v5 => sd_api_common}/sdk/components/serialization/common/ser_config.h (69%) rename src/{sd_api_v5 => sd_api_common}/sdk/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c (83%) rename src/{sd_api_v5 => sd_api_common}/sdk/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.h (91%) rename src/{sd_api_v5 => sd_api_common}/sdk/components/serialization/common/struct_ser/ble/ble_gatt_struct_serialization.c (99%) rename src/{sd_api_v5 => sd_api_common}/sdk/components/serialization/common/struct_ser/ble/ble_gatt_struct_serialization.h (98%) rename src/{sd_api_v5 => sd_api_common}/sdk/components/serialization/common/struct_ser/ble/ble_gattc_struct_serialization.c (99%) rename src/{sd_api_v5 => sd_api_common}/sdk/components/serialization/common/struct_ser/ble/ble_gattc_struct_serialization.h (99%) rename src/{sd_api_v5 => sd_api_common}/sdk/components/serialization/common/struct_ser/ble/ble_gatts_struct_serialization.c (99%) rename src/{sd_api_v5 => sd_api_common}/sdk/components/serialization/common/struct_ser/ble/ble_gatts_struct_serialization.h (99%) rename src/{sd_api_v5 => sd_api_common}/sdk/components/serialization/common/struct_ser/ble/ble_l2cap_struct_serialization.c (99%) rename src/{sd_api_v5 => sd_api_common}/sdk/components/serialization/common/struct_ser/ble/ble_l2cap_struct_serialization.h (98%) rename src/{sd_api_v5 => sd_api_common}/sdk/components/serialization/common/struct_ser/ble/ble_struct_serialization.c (95%) rename src/{sd_api_v5 => sd_api_common}/sdk/components/serialization/common/struct_ser/ble/ble_struct_serialization.h (99%) create mode 100644 src/sd_api_v2/ble_gap_impl.cpp create mode 100644 src/sd_api_v2/ble_gattc_impl.cpp create mode 100644 src/sd_api_v2/ble_gatts_impl.cpp rename src/{common => sd_api_v2}/ble_impl.cpp (70%) mode change 100755 => 100644 delete mode 100755 src/sd_api_v2/sdk/components/serialization/application/codecs/s130/serializers/app_ble_gap_sec_keys.h delete mode 100755 src/sd_api_v2/sdk/custom/app_ble_gap_sec_keys.cpp create mode 100644 src/sd_api_v3/ble_gap_impl.cpp create mode 100644 src/sd_api_v3/ble_gattc_impl.cpp create mode 100644 src/sd_api_v3/ble_gatts_impl.cpp create mode 100644 src/sd_api_v3/ble_impl.cpp create mode 100644 src/sd_api_v3/sdk/components/serialization/application/codecs/common/conn_systemreset_app.c create mode 100644 src/sd_api_v3/sdk/components/serialization/application/codecs/common/conn_systemreset_app.h create mode 100644 src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/app_ble_user_mem.c create mode 100644 src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/app_ble_user_mem.h create mode 100644 src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_app.c create mode 100644 src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_app.h create mode 100644 src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_event.c create mode 100644 src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_evt_app.c create mode 100644 src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_evt_app.h create mode 100644 src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gap_app.c create mode 100644 src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gap_app.h create mode 100644 src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gap_evt_app.c create mode 100644 src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gap_evt_app.h create mode 100644 src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gattc_app.c create mode 100644 src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gattc_app.h create mode 100644 src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gattc_evt_app.c create mode 100644 src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gattc_evt_app.h create mode 100644 src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gatts_app.c create mode 100644 src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gatts_app.h create mode 100644 src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gatts_evt_app.c create mode 100644 src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gatts_evt_app.h create mode 100644 src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_l2cap_app.c create mode 100644 src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_l2cap_app.h create mode 100644 src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_l2cap_evt_app.c create mode 100644 src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_l2cap_evt_app.h create mode 100644 src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/nrf_soc_app.h create mode 100644 src/sd_api_v3/sdk/components/softdevice/s132/headers/ble.h create mode 100644 src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_err.h create mode 100644 src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_gap.h create mode 100644 src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_gatt.h create mode 100644 src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_gattc.h create mode 100644 src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_gatts.h create mode 100644 src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_hci.h create mode 100644 src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_l2cap.h create mode 100644 src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_ranges.h create mode 100644 src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_types.h create mode 100644 src/sd_api_v3/sdk/components/softdevice/s132/headers/nrf_error.h rename src/{common => sd_api_v5}/ble_gap_impl.cpp (55%) mode change 100755 => 100644 create mode 100644 src/sd_api_v5/ble_gattc_impl.cpp create mode 100644 src/sd_api_v5/ble_gatts_impl.cpp create mode 100644 src/sd_api_v5/ble_impl.cpp delete mode 100644 src/sd_api_v5/sdk/custom/app_ble_gap_sec_keys.cpp create mode 100644 src/sd_api_v6/ble_gap_impl.cpp rename src/{common => sd_api_v6}/ble_gattc_impl.cpp (100%) mode change 100755 => 100644 rename src/{common => sd_api_v6}/ble_gatts_impl.cpp (100%) mode change 100755 => 100644 create mode 100644 src/sd_api_v6/ble_impl.cpp create mode 100644 src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/app_ble_user_mem.c rename src/{sd_api_v5/sdk/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.h => sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/app_ble_user_mem.h} (60%) create mode 100644 src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_app.c create mode 100644 src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_app.h create mode 100644 src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_event.c create mode 100644 src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_evt_app.c create mode 100644 src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_evt_app.h create mode 100644 src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gap_app.c create mode 100644 src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gap_app.h create mode 100644 src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gap_evt_app.c create mode 100644 src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gap_evt_app.h create mode 100644 src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gattc_app.c create mode 100644 src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gattc_app.h create mode 100644 src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gattc_evt_app.c create mode 100644 src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gattc_evt_app.h create mode 100644 src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gatts_app.c create mode 100644 src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gatts_app.h create mode 100644 src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gatts_evt_app.c create mode 100644 src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gatts_evt_app.h create mode 100644 src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_l2cap_app.c create mode 100644 src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_l2cap_app.h create mode 100644 src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_l2cap_evt_app.c create mode 100644 src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_l2cap_evt_app.h create mode 100644 src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/nrf_soc_app.h create mode 100644 src/sd_api_v6/sdk/components/serialization/application/codecs/common/conn_systemreset_app.c create mode 100644 src/sd_api_v6/sdk/components/serialization/application/codecs/common/conn_systemreset_app.h create mode 100644 src/sd_api_v6/sdk/components/softdevice/s140/headers/ble.h create mode 100644 src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_err.h create mode 100644 src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_gap.h create mode 100644 src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_gatt.h create mode 100644 src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_gattc.h create mode 100644 src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_gatts.h create mode 100644 src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_hci.h create mode 100644 src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_l2cap.h create mode 100644 src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_ranges.h create mode 100644 src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_types.h create mode 100644 src/sd_api_v6/sdk/components/softdevice/s140/headers/nrf_error.h create mode 100644 test/softdevice_api/test_main.cpp create mode 100644 test/softdevice_api/testcase_advertising.cpp create mode 100644 test/softdevice_api/testcase_driver_open_close.cpp create mode 100644 test/softdevice_api/testcase_issue_gh_112.cpp create mode 100644 test/softdevice_api/testcase_issue_stuck_in_scan_mode.cpp create mode 100644 test/softdevice_api/testcase_phy_update.cpp create mode 100644 test/softdevice_api/testcase_rssi.cpp create mode 100644 test/softdevice_api/testcase_security.cpp delete mode 100644 test/test_issue_gh_112.cpp delete mode 100644 test/test_pc_ble_driver_open_close.cpp delete mode 100644 test/test_setup.h delete mode 100644 test/test_util.h delete mode 100644 test/test_util_adapter_wrapper.h delete mode 100644 test/test_util_conversion.h delete mode 100644 test/test_util_role.h rename test/{ => transport}/test_h5_transport.cpp (94%) create mode 100644 test/transport/test_serial_port_enum.cpp rename test/{ => transport}/test_uart_boost.cpp (65%) rename test/{ => transport}/test_virtual_uart.cpp (80%) create mode 100644 test/util/include/test_setup.h create mode 100644 test/util/include/test_util.h create mode 100644 test/util/include/test_util_adapter_wrapper.h create mode 100644 test/util/include/test_util_adapter_wrapper_scratchpad.h create mode 100644 test/util/include/test_util_conversion.h create mode 100644 test/util/include/test_util_role.h create mode 100644 test/util/include/virtual_uart.h create mode 100644 test/util/src/test_setup.cpp create mode 100644 test/util/src/test_util.cpp create mode 100644 test/util/src/test_util_adapter_wrapper.cpp create mode 100644 test/util/src/test_util_conversion.cpp create mode 100644 test/util/src/test_util_role.cpp create mode 100644 test/util/src/virtual_uart.cpp delete mode 100644 test/virtual_uart.h diff --git a/.clang-format b/.clang-format new file mode 100644 index 000000000..93bc355c3 --- /dev/null +++ b/.clang-format @@ -0,0 +1,112 @@ +--- +Language: Cpp +AccessModifierOffset: -2 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: true +AlignConsecutiveDeclarations: false +AlignEscapedNewlines: Right +AlignOperands: true +AlignTrailingComments: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: None +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: false +BinPackArguments: true +BinPackParameters: true +BraceWrapping: + AfterClass: true + AfterControlStatement: true + AfterEnum: false + AfterFunction: true + AfterNamespace: false + AfterObjCDeclaration: false + AfterStruct: true + AfterUnion: false + AfterExternBlock: false + BeforeCatch: true + BeforeElse: true + IndentBraces: false + SplitEmptyFunction: false + SplitEmptyRecord: false + SplitEmptyNamespace: false +BreakBeforeBinaryOperators: None +BreakBeforeBraces: Custom +BreakBeforeInheritanceComma: false +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: true +BreakConstructorInitializers: BeforeColon +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: true +ColumnLimit: 100 +CommentPragmas: '^ IWYU pragma:' +CompactNamespaces: false +ConstructorInitializerAllOnOneLineOrOnePerLine: false +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: true +DerivePointerAlignment: false +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: true +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +IncludeBlocks: Preserve +IncludeCategories: + - Regex: '^"(llvm|llvm-c|clang|clang-c)/' + Priority: 2 + - Regex: '^(<|"(gtest|gmock|isl|json)/)' + Priority: 3 + - Regex: '.*' + Priority: 1 +IncludeIsMainRegex: '(Test)?$' +IndentCaseLabels: true +IndentPPDirectives: None +IndentWidth: 4 +IndentWrappedFunctionNames: false +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: false +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: None +ObjCBlockIndentWidth: 2 +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: true +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 60 +PointerAlignment: Right +RawStringFormats: + - Delimiter: pb + Language: TextProto + BasedOnStyle: google +ReflowComments: true +SortIncludes: true +SortUsingDeclarations: true +SpaceAfterCStyleCast: false +SpaceAfterTemplateKeyword: true +SpaceBeforeAssignmentOperators: true +SpaceBeforeParens: ControlStatements +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInContainerLiterals: true +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: Cpp11 +TabWidth: 8 +UseTab: Never diff --git a/.clang-tidy b/.clang-tidy new file mode 100644 index 000000000..702e71be7 --- /dev/null +++ b/.clang-tidy @@ -0,0 +1,22 @@ +--- +Checks: "-*,\ +-llvm-header-guard,\ +-llvm-include-order,\ +-llvm-namespace-comment,\ +-readability-else-after-return,\ +-misc-macro-parentheses,\ +-clang-analyzer-alpha.core.CastToStruct,\ +-modernize-raw-string-literal,\ +-cppcoreguidelines-pro-bounds-array-to-pointer-decay,\ +-cppcoreguidelines-pro-bounds-constant-array-index,\ +-cppcoreguidelines-pro-bounds-pointer-arithmetic,\ +-cppcoreguidelines-pro-type-member-init,\ +-cppcoreguidelines-pro-type-reinterpret-cast,\ +-cppcoreguidelines-pro-type-vararg,\ +-google-readability-namespace-comments,\ +-google-readability-braces-around-statements,-readability-braces-around-statements,\ +-google-readability-todo,\ +-google-runtime-int,\ +-google-runtime-references,\ +" +... diff --git a/.gitignore b/.gitignore index b3311fe62..7391b042a 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,11 @@ _build *.pyc **/build /sdk/ +build*/ + +# Temporary files +*.bak +*.TMP # Object files *.o diff --git a/3rdparty/catch2/catch.hpp b/3rdparty/catch2/catch.hpp deleted file mode 100644 index 6fac1e7cb..000000000 --- a/3rdparty/catch2/catch.hpp +++ /dev/null @@ -1,13287 +0,0 @@ -/* - * Catch v2.2.3 - * Generated: 2018-06-11 22:16:30.128800 - * ---------------------------------------------------------- - * This file has been merged from multiple headers. Please don't edit it directly - * Copyright (c) 2018 Two Blue Cubes Ltd. All rights reserved. - * - * Distributed under the Boost Software License, Version 1.0. (See accompanying - * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - */ -#ifndef TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED -#define TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED -// start catch.hpp - - -#define CATCH_VERSION_MAJOR 2 -#define CATCH_VERSION_MINOR 2 -#define CATCH_VERSION_PATCH 3 - -#ifdef __clang__ -# pragma clang system_header -#elif defined __GNUC__ -# pragma GCC system_header -#endif - -// start catch_suppress_warnings.h - -#ifdef __clang__ -# ifdef __ICC // icpc defines the __clang__ macro -# pragma warning(push) -# pragma warning(disable: 161 1682) -# else // __ICC -# pragma clang diagnostic ignored "-Wunused-variable" -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wpadded" -# pragma clang diagnostic ignored "-Wswitch-enum" -# pragma clang diagnostic ignored "-Wcovered-switch-default" -# endif -#elif defined __GNUC__ -# pragma GCC diagnostic ignored "-Wparentheses" -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-variable" -# pragma GCC diagnostic ignored "-Wpadded" -#endif -// end catch_suppress_warnings.h -#if defined(CATCH_CONFIG_MAIN) || defined(CATCH_CONFIG_RUNNER) -# define CATCH_IMPL -# define CATCH_CONFIG_ALL_PARTS -#endif - -// In the impl file, we want to have access to all parts of the headers -// Can also be used to sanely support PCHs -#if defined(CATCH_CONFIG_ALL_PARTS) -# define CATCH_CONFIG_EXTERNAL_INTERFACES -# if defined(CATCH_CONFIG_DISABLE_MATCHERS) -# undef CATCH_CONFIG_DISABLE_MATCHERS -# endif -# define CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER -#endif - -#if !defined(CATCH_CONFIG_IMPL_ONLY) -// start catch_platform.h - -#ifdef __APPLE__ -# include -# if TARGET_OS_OSX == 1 -# define CATCH_PLATFORM_MAC -# elif TARGET_OS_IPHONE == 1 -# define CATCH_PLATFORM_IPHONE -# endif - -#elif defined(linux) || defined(__linux) || defined(__linux__) -# define CATCH_PLATFORM_LINUX - -#elif defined(WIN32) || defined(__WIN32__) || defined(_WIN32) || defined(_MSC_VER) || defined(__MINGW32__) -# define CATCH_PLATFORM_WINDOWS -#endif - -// end catch_platform.h - -#ifdef CATCH_IMPL -# ifndef CLARA_CONFIG_MAIN -# define CLARA_CONFIG_MAIN_NOT_DEFINED -# define CLARA_CONFIG_MAIN -# endif -#endif - -// start catch_user_interfaces.h - -namespace Catch { - unsigned int rngSeed(); -} - -// end catch_user_interfaces.h -// start catch_tag_alias_autoregistrar.h - -// start catch_common.h - -// start catch_compiler_capabilities.h - -// Detect a number of compiler features - by compiler -// The following features are defined: -// -// CATCH_CONFIG_COUNTER : is the __COUNTER__ macro supported? -// CATCH_CONFIG_WINDOWS_SEH : is Windows SEH supported? -// CATCH_CONFIG_POSIX_SIGNALS : are POSIX signals supported? -// **************** -// Note to maintainers: if new toggles are added please document them -// in configuration.md, too -// **************** - -// In general each macro has a _NO_ form -// (e.g. CATCH_CONFIG_NO_POSIX_SIGNALS) which disables the feature. -// Many features, at point of detection, define an _INTERNAL_ macro, so they -// can be combined, en-mass, with the _NO_ forms later. - -#ifdef __cplusplus - -# if __cplusplus >= 201402L -# define CATCH_CPP14_OR_GREATER -# endif - -# if __cplusplus >= 201703L -# define CATCH_CPP17_OR_GREATER -# endif - -#endif - -#if defined(CATCH_CPP17_OR_GREATER) -# define CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS -#endif - -#ifdef __clang__ - -# define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \ - _Pragma( "clang diagnostic push" ) \ - _Pragma( "clang diagnostic ignored \"-Wexit-time-destructors\"" ) \ - _Pragma( "clang diagnostic ignored \"-Wglobal-constructors\"") -# define CATCH_INTERNAL_UNSUPPRESS_GLOBALS_WARNINGS \ - _Pragma( "clang diagnostic pop" ) - -# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS \ - _Pragma( "clang diagnostic push" ) \ - _Pragma( "clang diagnostic ignored \"-Wparentheses\"" ) -# define CATCH_INTERNAL_UNSUPPRESS_PARENTHESES_WARNINGS \ - _Pragma( "clang diagnostic pop" ) - -#endif // __clang__ - -//////////////////////////////////////////////////////////////////////////////// -// Assume that non-Windows platforms support posix signals by default -#if !defined(CATCH_PLATFORM_WINDOWS) - #define CATCH_INTERNAL_CONFIG_POSIX_SIGNALS -#endif - -//////////////////////////////////////////////////////////////////////////////// -// We know some environments not to support full POSIX signals -#if defined(__CYGWIN__) || defined(__QNX__) || defined(__EMSCRIPTEN__) || defined(__DJGPP__) - #define CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS -#endif - -#ifdef __OS400__ -# define CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS -# define CATCH_CONFIG_COLOUR_NONE -#endif - -//////////////////////////////////////////////////////////////////////////////// -// Android somehow still does not support std::to_string -#if defined(__ANDROID__) -# define CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING -#endif - -//////////////////////////////////////////////////////////////////////////////// -// Not all Windows environments support SEH properly -#if defined(__MINGW32__) -# define CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH -#endif - -//////////////////////////////////////////////////////////////////////////////// -// Cygwin -#ifdef __CYGWIN__ - -// Required for some versions of Cygwin to declare gettimeofday -// see: http://stackoverflow.com/questions/36901803/gettimeofday-not-declared-in-this-scope-cygwin -# define _BSD_SOURCE - -#endif // __CYGWIN__ - -//////////////////////////////////////////////////////////////////////////////// -// Visual C++ -#ifdef _MSC_VER - -# if _MSC_VER >= 1900 // Visual Studio 2015 or newer -# define CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS -# endif - -// Universal Windows platform does not support SEH -// Or console colours (or console at all...) -# if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP) -# define CATCH_CONFIG_COLOUR_NONE -# else -# define CATCH_INTERNAL_CONFIG_WINDOWS_SEH -# endif - -#endif // _MSC_VER - -//////////////////////////////////////////////////////////////////////////////// - -// DJGPP -#ifdef __DJGPP__ -# define CATCH_INTERNAL_CONFIG_NO_WCHAR -#endif // __DJGPP__ - -//////////////////////////////////////////////////////////////////////////////// - -// Use of __COUNTER__ is suppressed during code analysis in -// CLion/AppCode 2017.2.x and former, because __COUNTER__ is not properly -// handled by it. -// Otherwise all supported compilers support COUNTER macro, -// but user still might want to turn it off -#if ( !defined(__JETBRAINS_IDE__) || __JETBRAINS_IDE__ >= 20170300L ) - #define CATCH_INTERNAL_CONFIG_COUNTER -#endif - -#if defined(CATCH_INTERNAL_CONFIG_COUNTER) && !defined(CATCH_CONFIG_NO_COUNTER) && !defined(CATCH_CONFIG_COUNTER) -# define CATCH_CONFIG_COUNTER -#endif -#if defined(CATCH_INTERNAL_CONFIG_WINDOWS_SEH) && !defined(CATCH_CONFIG_NO_WINDOWS_SEH) && !defined(CATCH_CONFIG_WINDOWS_SEH) && !defined(CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH) -# define CATCH_CONFIG_WINDOWS_SEH -#endif -// This is set by default, because we assume that unix compilers are posix-signal-compatible by default. -#if defined(CATCH_INTERNAL_CONFIG_POSIX_SIGNALS) && !defined(CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS) && !defined(CATCH_CONFIG_NO_POSIX_SIGNALS) && !defined(CATCH_CONFIG_POSIX_SIGNALS) -# define CATCH_CONFIG_POSIX_SIGNALS -#endif -// This is set by default, because we assume that compilers with no wchar_t support are just rare exceptions. -#if !defined(CATCH_INTERNAL_CONFIG_NO_WCHAR) && !defined(CATCH_CONFIG_NO_WCHAR) && !defined(CATCH_CONFIG_WCHAR) -# define CATCH_CONFIG_WCHAR -#endif - -#if !defined(CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING) && !defined(CATCH_CONFIG_NO_CPP11_TO_STRING) && !defined(CATCH_CONFIG_CPP11_TO_STRING) -# define CATCH_CONFIG_CPP11_TO_STRING -#endif - -#if defined(CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS) && !defined(CATCH_CONFIG_NO_CPP17_UNCAUGHT_EXCEPTIONS) && !defined(CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS) -# define CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS -#endif - -#if !defined(CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS) -# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS -# define CATCH_INTERNAL_UNSUPPRESS_PARENTHESES_WARNINGS -#endif -#if !defined(CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS) -# define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS -# define CATCH_INTERNAL_UNSUPPRESS_GLOBALS_WARNINGS -#endif - -// end catch_compiler_capabilities.h -#define INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) name##line -#define INTERNAL_CATCH_UNIQUE_NAME_LINE( name, line ) INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) -#ifdef CATCH_CONFIG_COUNTER -# define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __COUNTER__ ) -#else -# define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __LINE__ ) -#endif - -#include -#include -#include - -namespace Catch { - - struct CaseSensitive { enum Choice { - Yes, - No - }; }; - - class NonCopyable { - NonCopyable( NonCopyable const& ) = delete; - NonCopyable( NonCopyable && ) = delete; - NonCopyable& operator = ( NonCopyable const& ) = delete; - NonCopyable& operator = ( NonCopyable && ) = delete; - - protected: - NonCopyable(); - virtual ~NonCopyable(); - }; - - struct SourceLineInfo { - - SourceLineInfo() = delete; - SourceLineInfo( char const* _file, std::size_t _line ) noexcept - : file( _file ), - line( _line ) - {} - - SourceLineInfo( SourceLineInfo const& other ) = default; - SourceLineInfo( SourceLineInfo && ) = default; - SourceLineInfo& operator = ( SourceLineInfo const& ) = default; - SourceLineInfo& operator = ( SourceLineInfo && ) = default; - - bool empty() const noexcept; - bool operator == ( SourceLineInfo const& other ) const noexcept; - bool operator < ( SourceLineInfo const& other ) const noexcept; - - char const* file; - std::size_t line; - }; - - std::ostream& operator << ( std::ostream& os, SourceLineInfo const& info ); - - // Use this in variadic streaming macros to allow - // >> +StreamEndStop - // as well as - // >> stuff +StreamEndStop - struct StreamEndStop { - std::string operator+() const; - }; - template - T const& operator + ( T const& value, StreamEndStop ) { - return value; - } -} - -#define CATCH_INTERNAL_LINEINFO \ - ::Catch::SourceLineInfo( __FILE__, static_cast( __LINE__ ) ) - -// end catch_common.h -namespace Catch { - - struct RegistrarForTagAliases { - RegistrarForTagAliases( char const* alias, char const* tag, SourceLineInfo const& lineInfo ); - }; - -} // end namespace Catch - -#define CATCH_REGISTER_TAG_ALIAS( alias, spec ) \ - CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \ - namespace{ Catch::RegistrarForTagAliases INTERNAL_CATCH_UNIQUE_NAME( AutoRegisterTagAlias )( alias, spec, CATCH_INTERNAL_LINEINFO ); } \ - CATCH_INTERNAL_UNSUPPRESS_GLOBALS_WARNINGS - -// end catch_tag_alias_autoregistrar.h -// start catch_test_registry.h - -// start catch_interfaces_testcase.h - -#include -#include - -namespace Catch { - - class TestSpec; - - struct ITestInvoker { - virtual void invoke () const = 0; - virtual ~ITestInvoker(); - }; - - using ITestCasePtr = std::shared_ptr; - - 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; - }; - - 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 ); - -} - -// end catch_interfaces_testcase.h -// start catch_stringref.h - -#include -#include -#include - -namespace Catch { - - class StringData; - - /// A non-owning string class (similar to the forthcoming std::string_view) - /// Note that, because a StringRef may be a substring of another string, - /// it may not be null terminated. c_str() must return a null terminated - /// string, however, and so the StringRef will internally take ownership - /// (taking a copy), if necessary. In theory this ownership is not externally - /// visible - but it does mean (substring) StringRefs should not be shared between - /// threads. - class StringRef { - public: - using size_type = std::size_t; - - private: - friend struct StringRefTestAccess; - - char const* m_start; - size_type m_size; - - char* m_data = nullptr; - - void takeOwnership(); - - static constexpr char const* const s_empty = ""; - - public: // construction/ assignment - StringRef() noexcept - : StringRef( s_empty, 0 ) - {} - - StringRef( StringRef const& other ) noexcept - : m_start( other.m_start ), - m_size( other.m_size ) - {} - - StringRef( StringRef&& other ) noexcept - : m_start( other.m_start ), - m_size( other.m_size ), - m_data( other.m_data ) - { - other.m_data = nullptr; - } - - StringRef( char const* rawChars ) noexcept; - - StringRef( char const* rawChars, size_type size ) noexcept - : m_start( rawChars ), - m_size( size ) - {} - - StringRef( std::string const& stdString ) noexcept - : m_start( stdString.c_str() ), - m_size( stdString.size() ) - {} - - ~StringRef() noexcept { - delete[] m_data; - } - - auto operator = ( StringRef const &other ) noexcept -> StringRef& { - delete[] m_data; - m_data = nullptr; - m_start = other.m_start; - m_size = other.m_size; - return *this; - } - - operator std::string() const; - - void swap( StringRef& other ) noexcept; - - public: // operators - auto operator == ( StringRef const& other ) const noexcept -> bool; - auto operator != ( StringRef const& other ) const noexcept -> bool; - - auto operator[] ( size_type index ) const noexcept -> char; - - public: // named queries - auto empty() const noexcept -> bool { - return m_size == 0; - } - auto size() const noexcept -> size_type { - return m_size; - } - - auto numberOfCharacters() const noexcept -> size_type; - auto c_str() const -> char const*; - - public: // substrings and searches - auto substr( size_type start, size_type size ) const noexcept -> StringRef; - - // Returns the current start pointer. - // Note that the pointer can change when if the StringRef is a substring - auto currentData() const noexcept -> char const*; - - private: // ownership queries - may not be consistent between calls - auto isOwned() const noexcept -> bool; - auto isSubstring() const noexcept -> bool; - }; - - auto operator + ( StringRef const& lhs, StringRef const& rhs ) -> std::string; - auto operator + ( StringRef const& lhs, char const* rhs ) -> std::string; - auto operator + ( char const* lhs, StringRef const& rhs ) -> std::string; - - auto operator += ( std::string& lhs, StringRef const& sr ) -> std::string&; - auto operator << ( std::ostream& os, StringRef const& sr ) -> std::ostream&; - - inline auto operator "" _sr( char const* rawChars, std::size_t size ) noexcept -> StringRef { - return StringRef( rawChars, size ); - } - -} // namespace Catch - -// end catch_stringref.h -namespace Catch { - -template -class TestInvokerAsMethod : public ITestInvoker { - void (C::*m_testAsMethod)(); -public: - TestInvokerAsMethod( void (C::*testAsMethod)() ) noexcept : m_testAsMethod( testAsMethod ) {} - - void invoke() const override { - C obj; - (obj.*m_testAsMethod)(); - } -}; - -auto makeTestInvoker( void(*testAsFunction)() ) noexcept -> ITestInvoker*; - -template -auto makeTestInvoker( void (C::*testAsMethod)() ) noexcept -> ITestInvoker* { - return new(std::nothrow) TestInvokerAsMethod( testAsMethod ); -} - -struct NameAndTags { - NameAndTags( StringRef const& name_ = StringRef(), StringRef const& tags_ = StringRef() ) noexcept; - StringRef name; - StringRef tags; -}; - -struct AutoReg : NonCopyable { - AutoReg( ITestInvoker* invoker, SourceLineInfo const& lineInfo, StringRef const& classOrMethod, NameAndTags const& nameAndTags ) noexcept; - ~AutoReg(); -}; - -} // end namespace Catch - -#define INTERNAL_CATCH_EXPAND1(param) INTERNAL_CATCH_EXPAND2(param) -#define INTERNAL_CATCH_EXPAND2(...) INTERNAL_CATCH_NO## __VA_ARGS__ -#define INTERNAL_CATCH_DEF(...) INTERNAL_CATCH_DEF __VA_ARGS__ -#define INTERNAL_CATCH_NOINTERNAL_CATCH_DEF - -#if defined(CATCH_CONFIG_DISABLE) - #define INTERNAL_CATCH_TESTCASE_NO_REGISTRATION( TestName, ... ) \ - static void TestName() - #define INTERNAL_CATCH_TESTCASE_METHOD_NO_REGISTRATION( TestName, ClassName, ... ) \ - namespace{ \ - struct TestName : INTERNAL_CATCH_EXPAND1(INTERNAL_CATCH_DEF ClassName) { \ - void test(); \ - }; \ - } \ - void TestName::test() - -#endif - - /////////////////////////////////////////////////////////////////////////////// - #define INTERNAL_CATCH_TESTCASE2( TestName, ... ) \ - static void TestName(); \ - CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \ - namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( Catch::makeTestInvoker( &TestName ), CATCH_INTERNAL_LINEINFO, "", Catch::NameAndTags{ __VA_ARGS__ } ); } /* NOLINT */ \ - CATCH_INTERNAL_UNSUPPRESS_GLOBALS_WARNINGS \ - static void TestName() - #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, ... ) \ - CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \ - namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( Catch::makeTestInvoker( &QualifiedMethod ), CATCH_INTERNAL_LINEINFO, "&" #QualifiedMethod, Catch::NameAndTags{ __VA_ARGS__ } ); } /* NOLINT */ \ - CATCH_INTERNAL_UNSUPPRESS_GLOBALS_WARNINGS - - /////////////////////////////////////////////////////////////////////////////// - #define INTERNAL_CATCH_TEST_CASE_METHOD2( TestName, ClassName, ... )\ - CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \ - namespace{ \ - struct TestName : INTERNAL_CATCH_EXPAND1(INTERNAL_CATCH_DEF ClassName) { \ - void test(); \ - }; \ - Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar ) ( Catch::makeTestInvoker( &TestName::test ), CATCH_INTERNAL_LINEINFO, #ClassName, Catch::NameAndTags{ __VA_ARGS__ } ); /* NOLINT */ \ - } \ - CATCH_INTERNAL_UNSUPPRESS_GLOBALS_WARNINGS \ - void TestName::test() - #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, ... ) \ - CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \ - Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( Catch::makeTestInvoker( Function ), CATCH_INTERNAL_LINEINFO, "", Catch::NameAndTags{ __VA_ARGS__ } ); /* NOLINT */ \ - CATCH_INTERNAL_UNSUPPRESS_GLOBALS_WARNINGS - -// end catch_test_registry.h -// start catch_capture.hpp - -// start catch_assertionhandler.h - -// start catch_assertioninfo.h - -// start catch_result_type.h - -namespace Catch { - - // ResultWas::OfType enum - struct ResultWas { enum OfType { - Unknown = -1, - Ok = 0, - Info = 1, - Warning = 2, - - FailureBit = 0x10, - - ExpressionFailed = FailureBit | 1, - ExplicitFailure = FailureBit | 2, - - Exception = 0x100 | FailureBit, - - ThrewException = Exception | 1, - DidntThrowException = Exception | 2, - - FatalErrorCondition = 0x200 | FailureBit - - }; }; - - bool isOk( ResultWas::OfType resultType ); - bool isJustInfo( int 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 - }; }; - - ResultDisposition::Flags operator | ( ResultDisposition::Flags lhs, ResultDisposition::Flags rhs ); - - bool shouldContinueOnFailure( int flags ); - inline bool isFalseTest( int flags ) { return ( flags & ResultDisposition::FalseTest ) != 0; } - bool shouldSuppressFailure( int flags ); - -} // end namespace Catch - -// end catch_result_type.h -namespace Catch { - - struct AssertionInfo - { - StringRef macroName; - SourceLineInfo lineInfo; - StringRef capturedExpression; - ResultDisposition::Flags resultDisposition; - - // We want to delete this constructor but a compiler bug in 4.8 means - // the struct is then treated as non-aggregate - //AssertionInfo() = delete; - }; - -} // end namespace Catch - -// end catch_assertioninfo.h -// start catch_decomposer.h - -// start catch_tostring.h - -#include -#include -#include -#include -// start catch_stream.h - -#include -#include -#include - -namespace Catch { - - std::ostream& cout(); - std::ostream& cerr(); - std::ostream& clog(); - - class StringRef; - - struct IStream { - virtual ~IStream(); - virtual std::ostream& stream() const = 0; - }; - - auto makeStream( StringRef const &filename ) -> IStream const*; - - class ReusableStringStream { - std::size_t m_index; - std::ostream* m_oss; - public: - ReusableStringStream(); - ~ReusableStringStream(); - - auto str() const -> std::string; - - template - auto operator << ( T const& value ) -> ReusableStringStream& { - *m_oss << value; - return *this; - } - auto get() -> std::ostream& { return *m_oss; } - - static void cleanup(); - }; -} - -// end catch_stream.h - -#ifdef __OBJC__ -// start catch_objc_arc.hpp - -#import - -#ifdef __has_feature -#define CATCH_ARC_ENABLED __has_feature(objc_arc) -#else -#define CATCH_ARC_ENABLED 0 -#endif - -void arcSafeRelease( NSObject* obj ); -id performOptionalSelector( id obj, SEL sel ); - -#if !CATCH_ARC_ENABLED -inline void arcSafeRelease( NSObject* obj ) { - [obj release]; -} -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 ) { -#ifdef __clang__ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" -#endif - if( [obj respondsToSelector: sel] ) - return [obj performSelector: sel]; -#ifdef __clang__ -#pragma clang diagnostic pop -#endif - return nil; -} -#define CATCH_UNSAFE_UNRETAINED __unsafe_unretained -#define CATCH_ARC_STRONG __strong -#endif - -// end catch_objc_arc.hpp -#endif - -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable:4180) // We attempt to stream a function (address) by const&, which MSVC complains about but is harmless -#endif - -// We need a dummy global operator<< so we can bring it into Catch namespace later -struct Catch_global_namespace_dummy {}; -std::ostream& operator<<(std::ostream&, Catch_global_namespace_dummy); - -namespace Catch { - // Bring in operator<< from global namespace into Catch namespace - using ::operator<<; - - namespace Detail { - - extern const std::string unprintableString; - - std::string rawMemoryToString( const void *object, std::size_t size ); - - template - std::string rawMemoryToString( const T& object ) { - return rawMemoryToString( &object, sizeof(object) ); - } - - template - class IsStreamInsertable { - template - static auto test(int) - -> decltype(std::declval() << std::declval(), std::true_type()); - - template - static auto test(...)->std::false_type; - - public: - static const bool value = decltype(test(0))::value; - }; - - template - std::string convertUnknownEnumToString( E e ); - - template - typename std::enable_if< - !std::is_enum::value && !std::is_base_of::value, - std::string>::type convertUnstreamable( T const& ) { - return Detail::unprintableString; - } - template - typename std::enable_if< - !std::is_enum::value && std::is_base_of::value, - std::string>::type convertUnstreamable(T const& ex) { - return ex.what(); - } - - template - typename std::enable_if< - std::is_enum::value - , std::string>::type convertUnstreamable( T const& value ) { - return convertUnknownEnumToString( value ); - } - -#if defined(_MANAGED) - //! Convert a CLR string to a utf8 std::string - template - std::string clrReferenceToString( T^ ref ) { - if (ref == nullptr) - return std::string("null"); - auto bytes = System::Text::Encoding::UTF8->GetBytes(ref->ToString()); - cli::pin_ptr p = &bytes[0]; - return std::string(reinterpret_cast(p), bytes->Length); - } -#endif - - } // namespace Detail - - // If we decide for C++14, change these to enable_if_ts - template - struct StringMaker { - template - static - typename std::enable_if<::Catch::Detail::IsStreamInsertable::value, std::string>::type - convert(const Fake& value) { - ReusableStringStream rss; - // NB: call using the function-like syntax to avoid ambiguity with - // user-defined templated operator<< under clang. - rss.operator<<(value); - return rss.str(); - } - - template - static - typename std::enable_if::value, std::string>::type - convert( const Fake& value ) { -#if !defined(CATCH_CONFIG_FALLBACK_STRINGIFIER) - return Detail::convertUnstreamable(value); -#else - return CATCH_CONFIG_FALLBACK_STRINGIFIER(value); -#endif - } - }; - - namespace Detail { - - // This function dispatches all stringification requests inside of Catch. - // Should be preferably called fully qualified, like ::Catch::Detail::stringify - template - std::string stringify(const T& e) { - return ::Catch::StringMaker::type>::type>::convert(e); - } - - template - std::string convertUnknownEnumToString( E e ) { - return ::Catch::Detail::stringify(static_cast::type>(e)); - } - -#if defined(_MANAGED) - template - std::string stringify( T^ e ) { - return ::Catch::StringMaker::convert(e); - } -#endif - - } // namespace Detail - - // Some predefined specializations - - template<> - struct StringMaker { - static std::string convert(const std::string& str); - }; -#ifdef CATCH_CONFIG_WCHAR - template<> - struct StringMaker { - static std::string convert(const std::wstring& wstr); - }; -#endif - - template<> - struct StringMaker { - static std::string convert(char const * str); - }; - template<> - struct StringMaker { - static std::string convert(char * str); - }; - -#ifdef CATCH_CONFIG_WCHAR - template<> - struct StringMaker { - static std::string convert(wchar_t const * str); - }; - template<> - struct StringMaker { - static std::string convert(wchar_t * str); - }; -#endif - - // TBD: Should we use `strnlen` to ensure that we don't go out of the buffer, - // while keeping string semantics? - template - struct StringMaker { - static std::string convert(char const* str) { - return ::Catch::Detail::stringify(std::string{ str }); - } - }; - template - struct StringMaker { - static std::string convert(signed char const* str) { - return ::Catch::Detail::stringify(std::string{ reinterpret_cast(str) }); - } - }; - template - struct StringMaker { - static std::string convert(unsigned char const* str) { - return ::Catch::Detail::stringify(std::string{ reinterpret_cast(str) }); - } - }; - - template<> - struct StringMaker { - static std::string convert(int value); - }; - template<> - struct StringMaker { - static std::string convert(long value); - }; - template<> - struct StringMaker { - static std::string convert(long long value); - }; - template<> - struct StringMaker { - static std::string convert(unsigned int value); - }; - template<> - struct StringMaker { - static std::string convert(unsigned long value); - }; - template<> - struct StringMaker { - static std::string convert(unsigned long long value); - }; - - template<> - struct StringMaker { - static std::string convert(bool b); - }; - - template<> - struct StringMaker { - static std::string convert(char c); - }; - template<> - struct StringMaker { - static std::string convert(signed char c); - }; - template<> - struct StringMaker { - static std::string convert(unsigned char c); - }; - - template<> - struct StringMaker { - static std::string convert(std::nullptr_t); - }; - - template<> - struct StringMaker { - static std::string convert(float value); - }; - template<> - struct StringMaker { - static std::string convert(double value); - }; - - template - struct StringMaker { - template - static std::string convert(U* p) { - if (p) { - return ::Catch::Detail::rawMemoryToString(p); - } else { - return "nullptr"; - } - } - }; - - template - struct StringMaker { - static std::string convert(R C::* p) { - if (p) { - return ::Catch::Detail::rawMemoryToString(p); - } else { - return "nullptr"; - } - } - }; - -#if defined(_MANAGED) - template - struct StringMaker { - static std::string convert( T^ ref ) { - return ::Catch::Detail::clrReferenceToString(ref); - } - }; -#endif - - namespace Detail { - template - std::string rangeToString(InputIterator first, InputIterator last) { - ReusableStringStream rss; - rss << "{ "; - if (first != last) { - rss << ::Catch::Detail::stringify(*first); - for (++first; first != last; ++first) - rss << ", " << ::Catch::Detail::stringify(*first); - } - rss << " }"; - return rss.str(); - } - } - -#ifdef __OBJC__ - template<> - struct StringMaker { - static std::string convert(NSString * nsstring) { - if (!nsstring) - return "nil"; - return std::string("@") + [nsstring UTF8String]; - } - }; - template<> - struct StringMaker { - static std::string convert(NSObject* nsObject) { - return ::Catch::Detail::stringify([nsObject description]); - } - - }; - namespace Detail { - inline std::string stringify( NSString* nsstring ) { - return StringMaker::convert( nsstring ); - } - - } // namespace Detail -#endif // __OBJC__ - -} // namespace Catch - -////////////////////////////////////////////////////// -// Separate std-lib types stringification, so it can be selectively enabled -// This means that we do not bring in - -#if defined(CATCH_CONFIG_ENABLE_ALL_STRINGMAKERS) -# define CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER -# define CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER -# define CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER -#endif - -// Separate std::pair specialization -#if defined(CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER) -#include -namespace Catch { - template - struct StringMaker > { - static std::string convert(const std::pair& pair) { - ReusableStringStream rss; - rss << "{ " - << ::Catch::Detail::stringify(pair.first) - << ", " - << ::Catch::Detail::stringify(pair.second) - << " }"; - return rss.str(); - } - }; -} -#endif // CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER - -// Separate std::tuple specialization -#if defined(CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER) -#include -namespace Catch { - namespace Detail { - template< - typename Tuple, - std::size_t N = 0, - bool = (N < std::tuple_size::value) - > - struct TupleElementPrinter { - static void print(const Tuple& tuple, std::ostream& os) { - os << (N ? ", " : " ") - << ::Catch::Detail::stringify(std::get(tuple)); - TupleElementPrinter::print(tuple, os); - } - }; - - template< - typename Tuple, - std::size_t N - > - struct TupleElementPrinter { - static void print(const Tuple&, std::ostream&) {} - }; - - } - - template - struct StringMaker> { - static std::string convert(const std::tuple& tuple) { - ReusableStringStream rss; - rss << '{'; - Detail::TupleElementPrinter>::print(tuple, rss.get()); - rss << " }"; - return rss.str(); - } - }; -} -#endif // CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER - -namespace Catch { - struct not_this_one {}; // Tag type for detecting which begin/ end are being selected - - // Import begin/ end from std here so they are considered alongside the fallback (...) overloads in this namespace - using std::begin; - using std::end; - - not_this_one begin( ... ); - not_this_one end( ... ); - - template - struct is_range { - static const bool value = - !std::is_same())), not_this_one>::value && - !std::is_same())), not_this_one>::value; - }; - -#if defined(_MANAGED) // Managed types are never ranges - template - struct is_range { - static const bool value = false; - }; -#endif - - template - std::string rangeToString( Range const& range ) { - return ::Catch::Detail::rangeToString( begin( range ), end( range ) ); - } - - // Handle vector specially - template - std::string rangeToString( std::vector const& v ) { - ReusableStringStream rss; - rss << "{ "; - bool first = true; - for( bool b : v ) { - if( first ) - first = false; - else - rss << ", "; - rss << ::Catch::Detail::stringify( b ); - } - rss << " }"; - return rss.str(); - } - - template - struct StringMaker::value && !::Catch::Detail::IsStreamInsertable::value>::type> { - static std::string convert( R const& range ) { - return rangeToString( range ); - } - }; - - template - struct StringMaker { - static std::string convert(T const(&arr)[SZ]) { - return rangeToString(arr); - } - }; - -} // namespace Catch - -// Separate std::chrono::duration specialization -#if defined(CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER) -#include -#include -#include - -namespace Catch { - -template -struct ratio_string { - static std::string symbol(); -}; - -template -std::string ratio_string::symbol() { - Catch::ReusableStringStream rss; - rss << '[' << Ratio::num << '/' - << Ratio::den << ']'; - return rss.str(); -} -template <> -struct ratio_string { - static std::string symbol(); -}; -template <> -struct ratio_string { - static std::string symbol(); -}; -template <> -struct ratio_string { - static std::string symbol(); -}; -template <> -struct ratio_string { - static std::string symbol(); -}; -template <> -struct ratio_string { - static std::string symbol(); -}; -template <> -struct ratio_string { - static std::string symbol(); -}; - - //////////// - // std::chrono::duration specializations - template - struct StringMaker> { - static std::string convert(std::chrono::duration const& duration) { - ReusableStringStream rss; - rss << duration.count() << ' ' << ratio_string::symbol() << 's'; - return rss.str(); - } - }; - template - struct StringMaker>> { - static std::string convert(std::chrono::duration> const& duration) { - ReusableStringStream rss; - rss << duration.count() << " s"; - return rss.str(); - } - }; - template - struct StringMaker>> { - static std::string convert(std::chrono::duration> const& duration) { - ReusableStringStream rss; - rss << duration.count() << " m"; - return rss.str(); - } - }; - template - struct StringMaker>> { - static std::string convert(std::chrono::duration> const& duration) { - ReusableStringStream rss; - rss << duration.count() << " h"; - return rss.str(); - } - }; - - //////////// - // std::chrono::time_point specialization - // Generic time_point cannot be specialized, only std::chrono::time_point - template - struct StringMaker> { - static std::string convert(std::chrono::time_point const& time_point) { - return ::Catch::Detail::stringify(time_point.time_since_epoch()) + " since epoch"; - } - }; - // std::chrono::time_point specialization - template - struct StringMaker> { - static std::string convert(std::chrono::time_point const& time_point) { - auto converted = std::chrono::system_clock::to_time_t(time_point); - -#ifdef _MSC_VER - std::tm timeInfo = {}; - gmtime_s(&timeInfo, &converted); -#else - std::tm* timeInfo = std::gmtime(&converted); -#endif - - auto const timeStampSize = sizeof("2017-01-16T17:06:45Z"); - char timeStamp[timeStampSize]; - const char * const fmt = "%Y-%m-%dT%H:%M:%SZ"; - -#ifdef _MSC_VER - std::strftime(timeStamp, timeStampSize, fmt, &timeInfo); -#else - std::strftime(timeStamp, timeStampSize, fmt, timeInfo); -#endif - return std::string(timeStamp); - } - }; -} -#endif // CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER - -#ifdef _MSC_VER -#pragma warning(pop) -#endif - -// end catch_tostring.h -#include - -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable:4389) // '==' : signed/unsigned mismatch -#pragma warning(disable:4018) // more "signed/unsigned mismatch" -#pragma warning(disable:4312) // Converting int to T* using reinterpret_cast (issue on x64 platform) -#pragma warning(disable:4180) // qualifier applied to function type has no meaning -#endif - -namespace Catch { - - struct ITransientExpression { - auto isBinaryExpression() const -> bool { return m_isBinaryExpression; } - auto getResult() const -> bool { return m_result; } - virtual void streamReconstructedExpression( std::ostream &os ) const = 0; - - ITransientExpression( bool isBinaryExpression, bool result ) - : m_isBinaryExpression( isBinaryExpression ), - m_result( result ) - {} - - // We don't actually need a virtual destructor, but many static analysers - // complain if it's not here :-( - virtual ~ITransientExpression(); - - bool m_isBinaryExpression; - bool m_result; - - }; - - void formatReconstructedExpression( std::ostream &os, std::string const& lhs, StringRef op, std::string const& rhs ); - - template - class BinaryExpr : public ITransientExpression { - LhsT m_lhs; - StringRef m_op; - RhsT m_rhs; - - void streamReconstructedExpression( std::ostream &os ) const override { - formatReconstructedExpression - ( os, Catch::Detail::stringify( m_lhs ), m_op, Catch::Detail::stringify( m_rhs ) ); - } - - public: - BinaryExpr( bool comparisonResult, LhsT lhs, StringRef op, RhsT rhs ) - : ITransientExpression{ true, comparisonResult }, - m_lhs( lhs ), - m_op( op ), - m_rhs( rhs ) - {} - }; - - template - class UnaryExpr : public ITransientExpression { - LhsT m_lhs; - - void streamReconstructedExpression( std::ostream &os ) const override { - os << Catch::Detail::stringify( m_lhs ); - } - - public: - explicit UnaryExpr( LhsT lhs ) - : ITransientExpression{ false, lhs ? true : false }, - m_lhs( lhs ) - {} - }; - - // Specialised comparison functions to handle equality comparisons between ints and pointers (NULL deduces as an int) - template - auto compareEqual( LhsT const& lhs, RhsT const& rhs ) -> bool { return static_cast(lhs == rhs); } - template - auto compareEqual( T* const& lhs, int rhs ) -> bool { return lhs == reinterpret_cast( rhs ); } - template - auto compareEqual( T* const& lhs, long rhs ) -> bool { return lhs == reinterpret_cast( rhs ); } - template - auto compareEqual( int lhs, T* const& rhs ) -> bool { return reinterpret_cast( lhs ) == rhs; } - template - auto compareEqual( long lhs, T* const& rhs ) -> bool { return reinterpret_cast( lhs ) == rhs; } - - template - auto compareNotEqual( LhsT const& lhs, RhsT&& rhs ) -> bool { return static_cast(lhs != rhs); } - template - auto compareNotEqual( T* const& lhs, int rhs ) -> bool { return lhs != reinterpret_cast( rhs ); } - template - auto compareNotEqual( T* const& lhs, long rhs ) -> bool { return lhs != reinterpret_cast( rhs ); } - template - auto compareNotEqual( int lhs, T* const& rhs ) -> bool { return reinterpret_cast( lhs ) != rhs; } - template - auto compareNotEqual( long lhs, T* const& rhs ) -> bool { return reinterpret_cast( lhs ) != rhs; } - - template - class ExprLhs { - LhsT m_lhs; - public: - explicit ExprLhs( LhsT lhs ) : m_lhs( lhs ) {} - - template - auto operator == ( RhsT const& rhs ) -> BinaryExpr const { - return { compareEqual( m_lhs, rhs ), m_lhs, "==", rhs }; - } - auto operator == ( bool rhs ) -> BinaryExpr const { - return { m_lhs == rhs, m_lhs, "==", rhs }; - } - - template - auto operator != ( RhsT const& rhs ) -> BinaryExpr const { - return { compareNotEqual( m_lhs, rhs ), m_lhs, "!=", rhs }; - } - auto operator != ( bool rhs ) -> BinaryExpr const { - return { m_lhs != rhs, m_lhs, "!=", rhs }; - } - - template - auto operator > ( RhsT const& rhs ) -> BinaryExpr const { - return { static_cast(m_lhs > rhs), m_lhs, ">", rhs }; - } - template - auto operator < ( RhsT const& rhs ) -> BinaryExpr const { - return { static_cast(m_lhs < rhs), m_lhs, "<", rhs }; - } - template - auto operator >= ( RhsT const& rhs ) -> BinaryExpr const { - return { static_cast(m_lhs >= rhs), m_lhs, ">=", rhs }; - } - template - auto operator <= ( RhsT const& rhs ) -> BinaryExpr const { - return { static_cast(m_lhs <= rhs), m_lhs, "<=", rhs }; - } - - auto makeUnaryExpr() const -> UnaryExpr { - return UnaryExpr{ m_lhs }; - } - }; - - void handleExpression( ITransientExpression const& expr ); - - template - void handleExpression( ExprLhs const& expr ) { - handleExpression( expr.makeUnaryExpr() ); - } - - struct Decomposer { - template - auto operator <= ( T const& lhs ) -> ExprLhs { - return ExprLhs{ lhs }; - } - - auto operator <=( bool value ) -> ExprLhs { - return ExprLhs{ value }; - } - }; - -} // end namespace Catch - -#ifdef _MSC_VER -#pragma warning(pop) -#endif - -// end catch_decomposer.h -// start catch_interfaces_capture.h - -#include - -namespace Catch { - - class AssertionResult; - struct AssertionInfo; - struct SectionInfo; - struct SectionEndInfo; - struct MessageInfo; - struct Counts; - struct BenchmarkInfo; - struct BenchmarkStats; - struct AssertionReaction; - - struct ITransientExpression; - - struct IResultCapture { - - virtual ~IResultCapture(); - - 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 benchmarkStarting( BenchmarkInfo const& info ) = 0; - virtual void benchmarkEnded( BenchmarkStats const& stats ) = 0; - - virtual void pushScopedMessage( MessageInfo const& message ) = 0; - virtual void popScopedMessage( MessageInfo const& message ) = 0; - - virtual void handleFatalErrorCondition( StringRef message ) = 0; - - virtual void handleExpr - ( AssertionInfo const& info, - ITransientExpression const& expr, - AssertionReaction& reaction ) = 0; - virtual void handleMessage - ( AssertionInfo const& info, - ResultWas::OfType resultType, - StringRef const& message, - AssertionReaction& reaction ) = 0; - virtual void handleUnexpectedExceptionNotThrown - ( AssertionInfo const& info, - AssertionReaction& reaction ) = 0; - virtual void handleUnexpectedInflightException - ( AssertionInfo const& info, - std::string const& message, - AssertionReaction& reaction ) = 0; - virtual void handleIncomplete - ( AssertionInfo const& info ) = 0; - virtual void handleNonExpr - ( AssertionInfo const &info, - ResultWas::OfType resultType, - AssertionReaction &reaction ) = 0; - - virtual bool lastAssertionPassed() = 0; - virtual void assertionPassed() = 0; - - // Deprecated, do not use: - virtual std::string getCurrentTestName() const = 0; - virtual const AssertionResult* getLastResult() const = 0; - virtual void exceptionEarlyReported() = 0; - }; - - IResultCapture& getResultCapture(); -} - -// end catch_interfaces_capture.h -namespace Catch { - - struct TestFailureException{}; - struct AssertionResultData; - struct IResultCapture; - class RunContext; - - class LazyExpression { - friend class AssertionHandler; - friend struct AssertionStats; - friend class RunContext; - - ITransientExpression const* m_transientExpression = nullptr; - bool m_isNegated; - public: - LazyExpression( bool isNegated ); - LazyExpression( LazyExpression const& other ); - LazyExpression& operator = ( LazyExpression const& ) = delete; - - explicit operator bool() const; - - friend auto operator << ( std::ostream& os, LazyExpression const& lazyExpr ) -> std::ostream&; - }; - - struct AssertionReaction { - bool shouldDebugBreak = false; - bool shouldThrow = false; - }; - - class AssertionHandler { - AssertionInfo m_assertionInfo; - AssertionReaction m_reaction; - bool m_completed = false; - IResultCapture& m_resultCapture; - - public: - AssertionHandler - ( StringRef macroName, - SourceLineInfo const& lineInfo, - StringRef capturedExpression, - ResultDisposition::Flags resultDisposition ); - ~AssertionHandler() { - if ( !m_completed ) { - m_resultCapture.handleIncomplete( m_assertionInfo ); - } - } - - template - void handleExpr( ExprLhs const& expr ) { - handleExpr( expr.makeUnaryExpr() ); - } - void handleExpr( ITransientExpression const& expr ); - - void handleMessage(ResultWas::OfType resultType, StringRef const& message); - - void handleExceptionThrownAsExpected(); - void handleUnexpectedExceptionNotThrown(); - void handleExceptionNotThrownAsExpected(); - void handleThrowingCallSkipped(); - void handleUnexpectedInflightException(); - - void complete(); - void setCompleted(); - - // query - auto allowThrows() const -> bool; - }; - - void handleExceptionMatchExpr( AssertionHandler& handler, std::string const& str, StringRef matcherString ); - -} // namespace Catch - -// end catch_assertionhandler.h -// start catch_message.h - -#include - -namespace Catch { - - struct MessageInfo { - MessageInfo( std::string const& _macroName, - SourceLineInfo const& _lineInfo, - ResultWas::OfType _type ); - - std::string macroName; - std::string message; - SourceLineInfo lineInfo; - ResultWas::OfType type; - unsigned int sequence; - - bool operator == ( MessageInfo const& other ) const; - bool operator < ( MessageInfo const& other ) const; - private: - static unsigned int globalCount; - }; - - struct MessageStream { - - template - MessageStream& operator << ( T const& value ) { - m_stream << value; - return *this; - } - - ReusableStringStream m_stream; - }; - - struct MessageBuilder : MessageStream { - MessageBuilder( std::string const& macroName, - SourceLineInfo const& lineInfo, - ResultWas::OfType type ); - - template - MessageBuilder& operator << ( T const& value ) { - m_stream << value; - return *this; - } - - MessageInfo m_info; - }; - - class ScopedMessage { - public: - explicit ScopedMessage( MessageBuilder const& builder ); - ~ScopedMessage(); - - MessageInfo m_info; - }; - -} // end namespace Catch - -// end catch_message.h -#if !defined(CATCH_CONFIG_DISABLE) - -#if !defined(CATCH_CONFIG_DISABLE_STRINGIFICATION) - #define CATCH_INTERNAL_STRINGIFY(...) #__VA_ARGS__ -#else - #define CATCH_INTERNAL_STRINGIFY(...) "Disabled by CATCH_CONFIG_DISABLE_STRINGIFICATION" -#endif - -#if defined(CATCH_CONFIG_FAST_COMPILE) - -/////////////////////////////////////////////////////////////////////////////// -// Another way to speed-up compilation is to omit local try-catch for REQUIRE* -// macros. -#define INTERNAL_CATCH_TRY -#define INTERNAL_CATCH_CATCH( capturer ) - -#else // CATCH_CONFIG_FAST_COMPILE - -#define INTERNAL_CATCH_TRY try -#define INTERNAL_CATCH_CATCH( handler ) catch(...) { handler.handleUnexpectedInflightException(); } - -#endif - -#define INTERNAL_CATCH_REACT( handler ) handler.complete(); - -/////////////////////////////////////////////////////////////////////////////// -#define INTERNAL_CATCH_TEST( macroName, resultDisposition, ... ) \ - do { \ - Catch::AssertionHandler catchAssertionHandler( macroName, CATCH_INTERNAL_LINEINFO, CATCH_INTERNAL_STRINGIFY(__VA_ARGS__), resultDisposition ); \ - INTERNAL_CATCH_TRY { \ - CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS \ - catchAssertionHandler.handleExpr( Catch::Decomposer() <= __VA_ARGS__ ); \ - CATCH_INTERNAL_UNSUPPRESS_PARENTHESES_WARNINGS \ - } INTERNAL_CATCH_CATCH( catchAssertionHandler ) \ - INTERNAL_CATCH_REACT( catchAssertionHandler ) \ - } while( (void)0, false && static_cast( !!(__VA_ARGS__) ) ) // the expression here is never evaluated at runtime but it forces the compiler to give it a look - // The double negation silences MSVC's C4800 warning, the static_cast forces short-circuit evaluation if the type has overloaded &&. - -/////////////////////////////////////////////////////////////////////////////// -#define INTERNAL_CATCH_IF( macroName, resultDisposition, ... ) \ - INTERNAL_CATCH_TEST( macroName, resultDisposition, __VA_ARGS__ ); \ - if( Catch::getResultCapture().lastAssertionPassed() ) - -/////////////////////////////////////////////////////////////////////////////// -#define INTERNAL_CATCH_ELSE( macroName, resultDisposition, ... ) \ - INTERNAL_CATCH_TEST( macroName, resultDisposition, __VA_ARGS__ ); \ - if( !Catch::getResultCapture().lastAssertionPassed() ) - -/////////////////////////////////////////////////////////////////////////////// -#define INTERNAL_CATCH_NO_THROW( macroName, resultDisposition, ... ) \ - do { \ - Catch::AssertionHandler catchAssertionHandler( macroName, CATCH_INTERNAL_LINEINFO, CATCH_INTERNAL_STRINGIFY(__VA_ARGS__), resultDisposition ); \ - try { \ - static_cast(__VA_ARGS__); \ - catchAssertionHandler.handleExceptionNotThrownAsExpected(); \ - } \ - catch( ... ) { \ - catchAssertionHandler.handleUnexpectedInflightException(); \ - } \ - INTERNAL_CATCH_REACT( catchAssertionHandler ) \ - } while( false ) - -/////////////////////////////////////////////////////////////////////////////// -#define INTERNAL_CATCH_THROWS( macroName, resultDisposition, ... ) \ - do { \ - Catch::AssertionHandler catchAssertionHandler( macroName, CATCH_INTERNAL_LINEINFO, CATCH_INTERNAL_STRINGIFY(__VA_ARGS__), resultDisposition); \ - if( catchAssertionHandler.allowThrows() ) \ - try { \ - static_cast(__VA_ARGS__); \ - catchAssertionHandler.handleUnexpectedExceptionNotThrown(); \ - } \ - catch( ... ) { \ - catchAssertionHandler.handleExceptionThrownAsExpected(); \ - } \ - else \ - catchAssertionHandler.handleThrowingCallSkipped(); \ - INTERNAL_CATCH_REACT( catchAssertionHandler ) \ - } while( false ) - -/////////////////////////////////////////////////////////////////////////////// -#define INTERNAL_CATCH_THROWS_AS( macroName, exceptionType, resultDisposition, expr ) \ - do { \ - Catch::AssertionHandler catchAssertionHandler( macroName, CATCH_INTERNAL_LINEINFO, CATCH_INTERNAL_STRINGIFY(expr) ", " CATCH_INTERNAL_STRINGIFY(exceptionType), resultDisposition ); \ - if( catchAssertionHandler.allowThrows() ) \ - try { \ - static_cast(expr); \ - catchAssertionHandler.handleUnexpectedExceptionNotThrown(); \ - } \ - catch( exceptionType const& ) { \ - catchAssertionHandler.handleExceptionThrownAsExpected(); \ - } \ - catch( ... ) { \ - catchAssertionHandler.handleUnexpectedInflightException(); \ - } \ - else \ - catchAssertionHandler.handleThrowingCallSkipped(); \ - INTERNAL_CATCH_REACT( catchAssertionHandler ) \ - } while( false ) - -/////////////////////////////////////////////////////////////////////////////// -#define INTERNAL_CATCH_MSG( macroName, messageType, resultDisposition, ... ) \ - do { \ - Catch::AssertionHandler catchAssertionHandler( macroName, CATCH_INTERNAL_LINEINFO, "", resultDisposition ); \ - catchAssertionHandler.handleMessage( messageType, ( Catch::MessageStream() << __VA_ARGS__ + ::Catch::StreamEndStop() ).m_stream.str() ); \ - INTERNAL_CATCH_REACT( catchAssertionHandler ) \ - } while( false ) - -/////////////////////////////////////////////////////////////////////////////// -#define INTERNAL_CATCH_INFO( macroName, log ) \ - Catch::ScopedMessage INTERNAL_CATCH_UNIQUE_NAME( scopedMessage )( Catch::MessageBuilder( macroName, CATCH_INTERNAL_LINEINFO, Catch::ResultWas::Info ) << log ); - -/////////////////////////////////////////////////////////////////////////////// -// Although this is matcher-based, it can be used with just a string -#define INTERNAL_CATCH_THROWS_STR_MATCHES( macroName, resultDisposition, matcher, ... ) \ - do { \ - Catch::AssertionHandler catchAssertionHandler( macroName, CATCH_INTERNAL_LINEINFO, CATCH_INTERNAL_STRINGIFY(__VA_ARGS__) ", " CATCH_INTERNAL_STRINGIFY(matcher), resultDisposition ); \ - if( catchAssertionHandler.allowThrows() ) \ - try { \ - static_cast(__VA_ARGS__); \ - catchAssertionHandler.handleUnexpectedExceptionNotThrown(); \ - } \ - catch( ... ) { \ - Catch::handleExceptionMatchExpr( catchAssertionHandler, matcher, #matcher ); \ - } \ - else \ - catchAssertionHandler.handleThrowingCallSkipped(); \ - INTERNAL_CATCH_REACT( catchAssertionHandler ) \ - } while( false ) - -#endif // CATCH_CONFIG_DISABLE - -// end catch_capture.hpp -// start catch_section.h - -// start catch_section_info.h - -// start catch_totals.h - -#include - -namespace Catch { - - struct Counts { - Counts operator - ( Counts const& other ) const; - Counts& operator += ( Counts const& other ); - - std::size_t total() const; - bool allPassed() const; - bool allOk() const; - - std::size_t passed = 0; - std::size_t failed = 0; - std::size_t failedButOk = 0; - }; - - struct Totals { - - Totals operator - ( Totals const& other ) const; - Totals& operator += ( Totals const& other ); - - Totals delta( Totals const& prevTotals ) const; - - int error = 0; - Counts assertions; - Counts testCases; - }; -} - -// end catch_totals.h -#include - -namespace Catch { - - struct SectionInfo { - SectionInfo - ( SourceLineInfo const& _lineInfo, - std::string const& _name, - std::string const& _description = std::string() ); - - std::string name; - std::string description; - SourceLineInfo lineInfo; - }; - - struct SectionEndInfo { - SectionEndInfo( SectionInfo const& _sectionInfo, Counts const& _prevAssertions, double _durationInSeconds ); - - SectionInfo sectionInfo; - Counts prevAssertions; - double durationInSeconds; - }; - -} // end namespace Catch - -// end catch_section_info.h -// start catch_timer.h - -#include - -namespace Catch { - - auto getCurrentNanosecondsSinceEpoch() -> uint64_t; - auto getEstimatedClockResolution() -> uint64_t; - - class Timer { - uint64_t m_nanoseconds = 0; - public: - void start(); - auto getElapsedNanoseconds() const -> uint64_t; - auto getElapsedMicroseconds() const -> uint64_t; - auto getElapsedMilliseconds() const -> unsigned int; - auto getElapsedSeconds() const -> double; - }; - -} // namespace Catch - -// end catch_timer.h -#include - -namespace Catch { - - class Section : NonCopyable { - public: - Section( SectionInfo const& info ); - ~Section(); - - // This indicates whether the section should be executed or not - explicit operator bool() const; - - private: - SectionInfo m_info; - - std::string m_name; - Counts m_assertions; - bool m_sectionIncluded; - Timer m_timer; - }; - -} // end namespace Catch - - #define INTERNAL_CATCH_SECTION( ... ) \ - if( Catch::Section const& INTERNAL_CATCH_UNIQUE_NAME( catch_internal_Section ) = Catch::SectionInfo( CATCH_INTERNAL_LINEINFO, __VA_ARGS__ ) ) - -// end catch_section.h -// start catch_benchmark.h - -#include -#include - -namespace Catch { - - class BenchmarkLooper { - - std::string m_name; - std::size_t m_count = 0; - std::size_t m_iterationsToRun = 1; - uint64_t m_resolution; - Timer m_timer; - - static auto getResolution() -> uint64_t; - public: - // Keep most of this inline as it's on the code path that is being timed - BenchmarkLooper( StringRef name ) - : m_name( name ), - m_resolution( getResolution() ) - { - reportStart(); - m_timer.start(); - } - - explicit operator bool() { - if( m_count < m_iterationsToRun ) - return true; - return needsMoreIterations(); - } - - void increment() { - ++m_count; - } - - void reportStart(); - auto needsMoreIterations() -> bool; - }; - -} // end namespace Catch - -#define BENCHMARK( name ) \ - for( Catch::BenchmarkLooper looper( name ); looper; looper.increment() ) - -// end catch_benchmark.h -// start catch_interfaces_exception.h - -// start catch_interfaces_registry_hub.h - -#include -#include - -namespace Catch { - - class TestCase; - struct ITestCaseRegistry; - struct IExceptionTranslatorRegistry; - struct IExceptionTranslator; - struct IReporterRegistry; - struct IReporterFactory; - struct ITagAliasRegistry; - class StartupExceptionRegistry; - - using IReporterFactoryPtr = std::shared_ptr; - - struct IRegistryHub { - virtual ~IRegistryHub(); - - virtual IReporterRegistry const& getReporterRegistry() const = 0; - virtual ITestCaseRegistry const& getTestCaseRegistry() const = 0; - virtual ITagAliasRegistry const& getTagAliasRegistry() const = 0; - - virtual IExceptionTranslatorRegistry& getExceptionTranslatorRegistry() = 0; - - virtual StartupExceptionRegistry const& getStartupExceptionRegistry() const = 0; - }; - - struct IMutableRegistryHub { - virtual ~IMutableRegistryHub(); - virtual void registerReporter( std::string const& name, IReporterFactoryPtr const& factory ) = 0; - virtual void registerListener( IReporterFactoryPtr const& factory ) = 0; - virtual void registerTest( TestCase const& testInfo ) = 0; - virtual void registerTranslator( const IExceptionTranslator* translator ) = 0; - virtual void registerTagAlias( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ) = 0; - virtual void registerStartupException() noexcept = 0; - }; - - IRegistryHub& getRegistryHub(); - IMutableRegistryHub& getMutableRegistryHub(); - void cleanUp(); - std::string translateActiveException(); - -} - -// end catch_interfaces_registry_hub.h -#if defined(CATCH_CONFIG_DISABLE) - #define INTERNAL_CATCH_TRANSLATE_EXCEPTION_NO_REG( translatorName, signature) \ - static std::string translatorName( signature ) -#endif - -#include -#include -#include - -namespace Catch { - using exceptionTranslateFunction = std::string(*)(); - - struct IExceptionTranslator; - using ExceptionTranslators = std::vector>; - - struct IExceptionTranslator { - virtual ~IExceptionTranslator(); - virtual std::string translate( ExceptionTranslators::const_iterator it, ExceptionTranslators::const_iterator itEnd ) const = 0; - }; - - struct IExceptionTranslatorRegistry { - virtual ~IExceptionTranslatorRegistry(); - - virtual std::string translateActiveException() const = 0; - }; - - class ExceptionTranslatorRegistrar { - template - class ExceptionTranslator : public IExceptionTranslator { - public: - - ExceptionTranslator( std::string(*translateFunction)( T& ) ) - : m_translateFunction( translateFunction ) - {} - - std::string translate( ExceptionTranslators::const_iterator it, ExceptionTranslators::const_iterator itEnd ) const override { - try { - if( it == itEnd ) - std::rethrow_exception(std::current_exception()); - 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 ) ); - } - }; -} - -/////////////////////////////////////////////////////////////////////////////// -#define INTERNAL_CATCH_TRANSLATE_EXCEPTION2( translatorName, signature ) \ - static std::string translatorName( signature ); \ - CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \ - namespace{ Catch::ExceptionTranslatorRegistrar INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionRegistrar )( &translatorName ); } \ - CATCH_INTERNAL_UNSUPPRESS_GLOBALS_WARNINGS \ - static std::string translatorName( signature ) - -#define INTERNAL_CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION2( INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionTranslator ), signature ) - -// end catch_interfaces_exception.h -// start catch_approx.h - -#include -#include - -namespace Catch { -namespace Detail { - - class Approx { - private: - bool equalityComparisonImpl(double other) const; - - public: - explicit Approx ( double value ); - - static Approx custom(); - - template ::value>::type> - Approx operator()( T const& value ) { - Approx approx( static_cast(value) ); - approx.epsilon( m_epsilon ); - approx.margin( m_margin ); - approx.scale( m_scale ); - return approx; - } - - template ::value>::type> - explicit Approx( T const& value ): Approx(static_cast(value)) - {} - - template ::value>::type> - friend bool operator == ( const T& lhs, Approx const& rhs ) { - auto lhs_v = static_cast(lhs); - return rhs.equalityComparisonImpl(lhs_v); - } - - template ::value>::type> - friend bool operator == ( Approx const& lhs, const T& rhs ) { - return operator==( rhs, lhs ); - } - - template ::value>::type> - friend bool operator != ( T const& lhs, Approx const& rhs ) { - return !operator==( lhs, rhs ); - } - - template ::value>::type> - friend bool operator != ( Approx const& lhs, T const& rhs ) { - return !operator==( rhs, lhs ); - } - - template ::value>::type> - friend bool operator <= ( T const& lhs, Approx const& rhs ) { - return static_cast(lhs) < rhs.m_value || lhs == rhs; - } - - template ::value>::type> - friend bool operator <= ( Approx const& lhs, T const& rhs ) { - return lhs.m_value < static_cast(rhs) || lhs == rhs; - } - - template ::value>::type> - friend bool operator >= ( T const& lhs, Approx const& rhs ) { - return static_cast(lhs) > rhs.m_value || lhs == rhs; - } - - template ::value>::type> - friend bool operator >= ( Approx const& lhs, T const& rhs ) { - return lhs.m_value > static_cast(rhs) || lhs == rhs; - } - - template ::value>::type> - Approx& epsilon( T const& newEpsilon ) { - double epsilonAsDouble = static_cast(newEpsilon); - if( epsilonAsDouble < 0 || epsilonAsDouble > 1.0 ) { - throw std::domain_error - ( "Invalid Approx::epsilon: " + - Catch::Detail::stringify( epsilonAsDouble ) + - ", Approx::epsilon has to be between 0 and 1" ); - } - m_epsilon = epsilonAsDouble; - return *this; - } - - template ::value>::type> - Approx& margin( T const& newMargin ) { - double marginAsDouble = static_cast(newMargin); - if( marginAsDouble < 0 ) { - throw std::domain_error - ( "Invalid Approx::margin: " + - Catch::Detail::stringify( marginAsDouble ) + - ", Approx::Margin has to be non-negative." ); - - } - m_margin = marginAsDouble; - return *this; - } - - template ::value>::type> - Approx& scale( T const& newScale ) { - m_scale = static_cast(newScale); - return *this; - } - - std::string toString() const; - - private: - double m_epsilon; - double m_margin; - double m_scale; - double m_value; - }; -} - -template<> -struct StringMaker { - static std::string convert(Catch::Detail::Approx const& value); -}; - -} // end namespace Catch - -// end catch_approx.h -// start catch_string_manip.h - -#include -#include - -namespace Catch { - - bool startsWith( std::string const& s, std::string const& prefix ); - bool startsWith( std::string const& s, char prefix ); - bool endsWith( std::string const& s, std::string const& suffix ); - bool endsWith( std::string const& s, char 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 ); - - friend std::ostream& operator << ( std::ostream& os, pluralise const& pluraliser ); - - std::size_t m_count; - std::string m_label; - }; -} - -// end catch_string_manip.h -#ifndef CATCH_CONFIG_DISABLE_MATCHERS -// start catch_capture_matchers.h - -// start catch_matchers.h - -#include -#include - -namespace Catch { -namespace Matchers { - namespace Impl { - - template struct MatchAllOf; - template struct MatchAnyOf; - template struct MatchNotOf; - - class MatcherUntypedBase { - public: - MatcherUntypedBase() = default; - MatcherUntypedBase ( MatcherUntypedBase const& ) = default; - MatcherUntypedBase& operator = ( MatcherUntypedBase const& ) = delete; - std::string toString() const; - - protected: - virtual ~MatcherUntypedBase(); - virtual std::string describe() const = 0; - mutable std::string m_cachedToString; - }; - - template - struct MatcherMethod { - virtual bool match( ObjectT const& arg ) const = 0; - }; - template - struct MatcherMethod { - virtual bool match( PtrT* arg ) const = 0; - }; - - template - struct MatcherBase : MatcherUntypedBase, MatcherMethod { - - MatchAllOf operator && ( MatcherBase const& other ) const; - MatchAnyOf operator || ( MatcherBase const& other ) const; - MatchNotOf operator ! () const; - }; - - template - struct MatchAllOf : MatcherBase { - bool match( ArgT const& arg ) const override { - for( auto matcher : m_matchers ) { - if (!matcher->match(arg)) - return false; - } - return true; - } - std::string describe() const override { - std::string description; - description.reserve( 4 + m_matchers.size()*32 ); - description += "( "; - bool first = true; - for( auto matcher : m_matchers ) { - if( first ) - first = false; - else - description += " and "; - description += matcher->toString(); - } - description += " )"; - return description; - } - - MatchAllOf& operator && ( MatcherBase const& other ) { - m_matchers.push_back( &other ); - return *this; - } - - std::vector const*> m_matchers; - }; - template - struct MatchAnyOf : MatcherBase { - - bool match( ArgT const& arg ) const override { - for( auto matcher : m_matchers ) { - if (matcher->match(arg)) - return true; - } - return false; - } - std::string describe() const override { - std::string description; - description.reserve( 4 + m_matchers.size()*32 ); - description += "( "; - bool first = true; - for( auto matcher : m_matchers ) { - if( first ) - first = false; - else - description += " or "; - description += matcher->toString(); - } - description += " )"; - return description; - } - - MatchAnyOf& operator || ( MatcherBase const& other ) { - m_matchers.push_back( &other ); - return *this; - } - - std::vector const*> m_matchers; - }; - - template - struct MatchNotOf : MatcherBase { - - MatchNotOf( MatcherBase const& underlyingMatcher ) : m_underlyingMatcher( underlyingMatcher ) {} - - bool match( ArgT const& arg ) const override { - return !m_underlyingMatcher.match( arg ); - } - - std::string describe() const override { - return "not " + m_underlyingMatcher.toString(); - } - MatcherBase const& m_underlyingMatcher; - }; - - template - MatchAllOf MatcherBase::operator && ( MatcherBase const& other ) const { - return MatchAllOf() && *this && other; - } - template - MatchAnyOf MatcherBase::operator || ( MatcherBase const& other ) const { - return MatchAnyOf() || *this || other; - } - template - MatchNotOf MatcherBase::operator ! () const { - return MatchNotOf( *this ); - } - - } // namespace Impl - -} // namespace Matchers - -using namespace Matchers; -using Matchers::Impl::MatcherBase; - -} // namespace Catch - -// end catch_matchers.h -// start catch_matchers_floating.h - -#include -#include - -namespace Catch { -namespace Matchers { - - namespace Floating { - - enum class FloatingPointKind : uint8_t; - - struct WithinAbsMatcher : MatcherBase { - WithinAbsMatcher(double target, double margin); - bool match(double const& matchee) const override; - std::string describe() const override; - private: - double m_target; - double m_margin; - }; - - struct WithinUlpsMatcher : MatcherBase { - WithinUlpsMatcher(double target, int ulps, FloatingPointKind baseType); - bool match(double const& matchee) const override; - std::string describe() const override; - private: - double m_target; - int m_ulps; - FloatingPointKind m_type; - }; - - } // namespace Floating - - // The following functions create the actual matcher objects. - // This allows the types to be inferred - Floating::WithinUlpsMatcher WithinULP(double target, int maxUlpDiff); - Floating::WithinUlpsMatcher WithinULP(float target, int maxUlpDiff); - Floating::WithinAbsMatcher WithinAbs(double target, double margin); - -} // namespace Matchers -} // namespace Catch - -// end catch_matchers_floating.h -// start catch_matchers_generic.hpp - -#include -#include - -namespace Catch { -namespace Matchers { -namespace Generic { - -namespace Detail { - std::string finalizeDescription(const std::string& desc); -} - -template -class PredicateMatcher : public MatcherBase { - std::function m_predicate; - std::string m_description; -public: - - PredicateMatcher(std::function const& elem, std::string const& descr) - :m_predicate(std::move(elem)), - m_description(Detail::finalizeDescription(descr)) - {} - - bool match( T const& item ) const override { - return m_predicate(item); - } - - std::string describe() const override { - return m_description; - } -}; - -} // namespace Generic - - // The following functions create the actual matcher objects. - // The user has to explicitly specify type to the function, because - // infering std::function is hard (but possible) and - // requires a lot of TMP. - template - Generic::PredicateMatcher Predicate(std::function const& predicate, std::string const& description = "") { - return Generic::PredicateMatcher(predicate, description); - } - -} // namespace Matchers -} // namespace Catch - -// end catch_matchers_generic.hpp -// start catch_matchers_string.h - -#include - -namespace Catch { -namespace Matchers { - - namespace StdString { - - struct CasedString - { - CasedString( std::string const& str, CaseSensitive::Choice caseSensitivity ); - std::string adjustString( std::string const& str ) const; - std::string caseSensitivitySuffix() const; - - CaseSensitive::Choice m_caseSensitivity; - std::string m_str; - }; - - struct StringMatcherBase : MatcherBase { - StringMatcherBase( std::string const& operation, CasedString const& comparator ); - std::string describe() const override; - - CasedString m_comparator; - std::string m_operation; - }; - - struct EqualsMatcher : StringMatcherBase { - EqualsMatcher( CasedString const& comparator ); - bool match( std::string const& source ) const override; - }; - struct ContainsMatcher : StringMatcherBase { - ContainsMatcher( CasedString const& comparator ); - bool match( std::string const& source ) const override; - }; - struct StartsWithMatcher : StringMatcherBase { - StartsWithMatcher( CasedString const& comparator ); - bool match( std::string const& source ) const override; - }; - struct EndsWithMatcher : StringMatcherBase { - EndsWithMatcher( CasedString const& comparator ); - bool match( std::string const& source ) const override; - }; - - struct RegexMatcher : MatcherBase { - RegexMatcher( std::string regex, CaseSensitive::Choice caseSensitivity ); - bool match( std::string const& matchee ) const override; - std::string describe() const override; - - private: - std::string m_regex; - CaseSensitive::Choice m_caseSensitivity; - }; - - } // namespace StdString - - // The following functions create the actual matcher objects. - // This allows the types to be inferred - - StdString::EqualsMatcher Equals( std::string const& str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ); - StdString::ContainsMatcher Contains( std::string const& str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ); - StdString::EndsWithMatcher EndsWith( std::string const& str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ); - StdString::StartsWithMatcher StartsWith( std::string const& str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ); - StdString::RegexMatcher Matches( std::string const& regex, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ); - -} // namespace Matchers -} // namespace Catch - -// end catch_matchers_string.h -// start catch_matchers_vector.h - -#include - -namespace Catch { -namespace Matchers { - - namespace Vector { - namespace Detail { - template - size_t count(InputIterator first, InputIterator last, T const& item) { - size_t cnt = 0; - for (; first != last; ++first) { - if (*first == item) { - ++cnt; - } - } - return cnt; - } - template - bool contains(InputIterator first, InputIterator last, T const& item) { - for (; first != last; ++first) { - if (*first == item) { - return true; - } - } - return false; - } - } - - template - struct ContainsElementMatcher : MatcherBase> { - - ContainsElementMatcher(T const &comparator) : m_comparator( comparator) {} - - bool match(std::vector const &v) const override { - for (auto const& el : v) { - if (el == m_comparator) { - return true; - } - } - return false; - } - - std::string describe() const override { - return "Contains: " + ::Catch::Detail::stringify( m_comparator ); - } - - T const& m_comparator; - }; - - template - struct ContainsMatcher : MatcherBase> { - - ContainsMatcher(std::vector const &comparator) : m_comparator( comparator ) {} - - bool match(std::vector const &v) const override { - // !TBD: see note in EqualsMatcher - if (m_comparator.size() > v.size()) - return false; - for (auto const& comparator : m_comparator) { - auto present = false; - for (const auto& el : v) { - if (el == comparator) { - present = true; - break; - } - } - if (!present) { - return false; - } - } - return true; - } - std::string describe() const override { - return "Contains: " + ::Catch::Detail::stringify( m_comparator ); - } - - std::vector const& m_comparator; - }; - - template - struct EqualsMatcher : MatcherBase> { - - EqualsMatcher(std::vector const &comparator) : m_comparator( comparator ) {} - - bool match(std::vector const &v) const override { - // !TBD: This currently works if all elements can be compared using != - // - a more general approach would be via a compare template that defaults - // to using !=. but could be specialised for, e.g. std::vector etc - // - then just call that directly - if (m_comparator.size() != v.size()) - return false; - for (std::size_t i = 0; i < v.size(); ++i) - if (m_comparator[i] != v[i]) - return false; - return true; - } - std::string describe() const override { - return "Equals: " + ::Catch::Detail::stringify( m_comparator ); - } - std::vector const& m_comparator; - }; - - template - struct UnorderedEqualsMatcher : MatcherBase> { - UnorderedEqualsMatcher(std::vector const& target) : m_target(target) {} - bool match(std::vector const& vec) const override { - // Note: This is a reimplementation of std::is_permutation, - // because I don't want to include inside the common path - if (m_target.size() != vec.size()) { - return false; - } - auto lfirst = m_target.begin(), llast = m_target.end(); - auto rfirst = vec.begin(), rlast = vec.end(); - // Cut common prefix to optimize checking of permuted parts - while (lfirst != llast && *lfirst != *rfirst) { - ++lfirst; ++rfirst; - } - if (lfirst == llast) { - return true; - } - - for (auto mid = lfirst; mid != llast; ++mid) { - // Skip already counted items - if (Detail::contains(lfirst, mid, *mid)) { - continue; - } - size_t num_vec = Detail::count(rfirst, rlast, *mid); - if (num_vec == 0 || Detail::count(lfirst, llast, *mid) != num_vec) { - return false; - } - } - - return true; - } - - std::string describe() const override { - return "UnorderedEquals: " + ::Catch::Detail::stringify(m_target); - } - private: - std::vector const& m_target; - }; - - } // namespace Vector - - // The following functions create the actual matcher objects. - // This allows the types to be inferred - - template - Vector::ContainsMatcher Contains( std::vector const& comparator ) { - return Vector::ContainsMatcher( comparator ); - } - - template - Vector::ContainsElementMatcher VectorContains( T const& comparator ) { - return Vector::ContainsElementMatcher( comparator ); - } - - template - Vector::EqualsMatcher Equals( std::vector const& comparator ) { - return Vector::EqualsMatcher( comparator ); - } - - template - Vector::UnorderedEqualsMatcher UnorderedEquals(std::vector const& target) { - return Vector::UnorderedEqualsMatcher(target); - } - -} // namespace Matchers -} // namespace Catch - -// end catch_matchers_vector.h -namespace Catch { - - template - class MatchExpr : public ITransientExpression { - ArgT const& m_arg; - MatcherT m_matcher; - StringRef m_matcherString; - public: - MatchExpr( ArgT const& arg, MatcherT const& matcher, StringRef matcherString ) - : ITransientExpression{ true, matcher.match( arg ) }, - m_arg( arg ), - m_matcher( matcher ), - m_matcherString( matcherString ) - {} - - void streamReconstructedExpression( std::ostream &os ) const override { - auto matcherAsString = m_matcher.toString(); - os << Catch::Detail::stringify( m_arg ) << ' '; - if( matcherAsString == Detail::unprintableString ) - os << m_matcherString; - else - os << matcherAsString; - } - }; - - using StringMatcher = Matchers::Impl::MatcherBase; - - void handleExceptionMatchExpr( AssertionHandler& handler, StringMatcher const& matcher, StringRef matcherString ); - - template - auto makeMatchExpr( ArgT const& arg, MatcherT const& matcher, StringRef matcherString ) -> MatchExpr { - return MatchExpr( arg, matcher, matcherString ); - } - -} // namespace Catch - -/////////////////////////////////////////////////////////////////////////////// -#define INTERNAL_CHECK_THAT( macroName, matcher, resultDisposition, arg ) \ - do { \ - Catch::AssertionHandler catchAssertionHandler( macroName, CATCH_INTERNAL_LINEINFO, CATCH_INTERNAL_STRINGIFY(arg) ", " CATCH_INTERNAL_STRINGIFY(matcher), resultDisposition ); \ - INTERNAL_CATCH_TRY { \ - catchAssertionHandler.handleExpr( Catch::makeMatchExpr( arg, matcher, #matcher ) ); \ - } INTERNAL_CATCH_CATCH( catchAssertionHandler ) \ - INTERNAL_CATCH_REACT( catchAssertionHandler ) \ - } while( false ) - -/////////////////////////////////////////////////////////////////////////////// -#define INTERNAL_CATCH_THROWS_MATCHES( macroName, exceptionType, resultDisposition, matcher, ... ) \ - do { \ - Catch::AssertionHandler catchAssertionHandler( macroName, CATCH_INTERNAL_LINEINFO, CATCH_INTERNAL_STRINGIFY(__VA_ARGS__) ", " CATCH_INTERNAL_STRINGIFY(exceptionType) ", " CATCH_INTERNAL_STRINGIFY(matcher), resultDisposition ); \ - if( catchAssertionHandler.allowThrows() ) \ - try { \ - static_cast(__VA_ARGS__ ); \ - catchAssertionHandler.handleUnexpectedExceptionNotThrown(); \ - } \ - catch( exceptionType const& ex ) { \ - catchAssertionHandler.handleExpr( Catch::makeMatchExpr( ex, matcher, #matcher ) ); \ - } \ - catch( ... ) { \ - catchAssertionHandler.handleUnexpectedInflightException(); \ - } \ - else \ - catchAssertionHandler.handleThrowingCallSkipped(); \ - INTERNAL_CATCH_REACT( catchAssertionHandler ) \ - } while( false ) - -// end catch_capture_matchers.h -#endif - -// These files are included here so the single_include script doesn't put them -// in the conditionally compiled sections -// start catch_test_case_info.h - -#include -#include -#include - -#ifdef __clang__ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wpadded" -#endif - -namespace Catch { - - struct ITestInvoker; - - struct TestCaseInfo { - enum SpecialProperties{ - None = 0, - IsHidden = 1 << 1, - ShouldFail = 1 << 2, - MayFail = 1 << 3, - Throws = 1 << 4, - NonPortable = 1 << 5, - Benchmark = 1 << 6 - }; - - TestCaseInfo( std::string const& _name, - std::string const& _className, - std::string const& _description, - std::vector const& _tags, - SourceLineInfo const& _lineInfo ); - - friend void setTags( TestCaseInfo& testCaseInfo, std::vector tags ); - - bool isHidden() const; - bool throws() const; - bool okToFail() const; - bool expectedToFail() const; - - std::string tagsAsString() const; - - std::string name; - std::string className; - std::string description; - std::vector tags; - std::vector lcaseTags; - SourceLineInfo lineInfo; - SpecialProperties properties; - }; - - class TestCase : public TestCaseInfo { - public: - - TestCase( ITestInvoker* testCase, TestCaseInfo&& info ); - - TestCase withName( std::string const& _newName ) const; - - void invoke() const; - - TestCaseInfo const& getTestCaseInfo() const; - - bool operator == ( TestCase const& other ) const; - bool operator < ( TestCase const& other ) const; - - private: - std::shared_ptr test; - }; - - TestCase makeTestCase( ITestInvoker* testCase, - std::string const& className, - NameAndTags const& nameAndTags, - SourceLineInfo const& lineInfo ); -} - -#ifdef __clang__ -#pragma clang diagnostic pop -#endif - -// end catch_test_case_info.h -// start catch_interfaces_runner.h - -namespace Catch { - - struct IRunner { - virtual ~IRunner(); - virtual bool aborting() const = 0; - }; -} - -// end catch_interfaces_runner.h - -#ifdef __OBJC__ -// start catch_objc.hpp - -#import - -#include - -// NB. Any general catch headers included here must be included -// in catch.hpp first to make sure they are included by the single -// header for non obj-usage - -/////////////////////////////////////////////////////////////////////////////// -// This protocol is really only here for (self) documenting purposes, since -// all its methods are optional. -@protocol OcFixture - -@optional - --(void) setUp; --(void) tearDown; - -@end - -namespace Catch { - - class OcMethod : public ITestInvoker { - - public: - OcMethod( Class cls, SEL sel ) : m_cls( cls ), m_sel( sel ) {} - - virtual void invoke() const { - id obj = [[m_cls alloc] init]; - - performOptionalSelector( obj, @selector(setUp) ); - performOptionalSelector( obj, m_sel ); - performOptionalSelector( obj, @selector(tearDown) ); - - arcSafeRelease( obj ); - } - private: - virtual ~OcMethod() {} - - Class m_cls; - SEL m_sel; - }; - - 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::size_t registerTestMethods() { - std::size_t noTestMethods = 0; - int noClasses = objc_getClassList( nullptr, 0 ); - - 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("",0) ) ); - noTestMethods++; - } - } - free(methods); - } - } - return noTestMethods; - } - -#if !defined(CATCH_CONFIG_DISABLE_MATCHERS) - - namespace Matchers { - namespace Impl { - namespace NSStringMatchers { - - struct StringHolder : MatcherBase{ - StringHolder( NSString* substr ) : m_substr( [substr copy] ){} - StringHolder( StringHolder const& other ) : m_substr( [other.m_substr copy] ){} - StringHolder() { - arcSafeRelease( m_substr ); - } - - bool match( NSString* arg ) const override { - return false; - } - - NSString* CATCH_ARC_STRONG m_substr; - }; - - struct Equals : StringHolder { - Equals( NSString* substr ) : StringHolder( substr ){} - - bool match( NSString* str ) const override { - return (str != nil || m_substr == nil ) && - [str isEqualToString:m_substr]; - } - - std::string describe() const override { - return "equals string: " + Catch::Detail::stringify( m_substr ); - } - }; - - struct Contains : StringHolder { - Contains( NSString* substr ) : StringHolder( substr ){} - - bool match( NSString* str ) const { - return (str != nil || m_substr == nil ) && - [str rangeOfString:m_substr].location != NSNotFound; - } - - std::string describe() const override { - return "contains string: " + Catch::Detail::stringify( m_substr ); - } - }; - - struct StartsWith : StringHolder { - StartsWith( NSString* substr ) : StringHolder( substr ){} - - bool match( NSString* str ) const override { - return (str != nil || m_substr == nil ) && - [str rangeOfString:m_substr].location == 0; - } - - std::string describe() const override { - return "starts with: " + Catch::Detail::stringify( m_substr ); - } - }; - struct EndsWith : StringHolder { - EndsWith( NSString* substr ) : StringHolder( substr ){} - - bool match( NSString* str ) const override { - return (str != nil || m_substr == nil ) && - [str rangeOfString:m_substr].location == [str length] - [m_substr length]; - } - - std::string describe() const override { - return "ends with: " + Catch::Detail::stringify( m_substr ); - } - }; - - } // namespace NSStringMatchers - } // namespace Impl - - 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::StartsWith - StartsWith( NSString* substr ){ return Impl::NSStringMatchers::StartsWith( substr ); } - - inline Impl::NSStringMatchers::EndsWith - EndsWith( NSString* substr ){ return Impl::NSStringMatchers::EndsWith( substr ); } - - } // namespace Matchers - - using namespace Matchers; - -#endif // CATCH_CONFIG_DISABLE_MATCHERS - -} // namespace Catch - -/////////////////////////////////////////////////////////////////////////////// -#define OC_MAKE_UNIQUE_NAME( root, uniqueSuffix ) root##uniqueSuffix -#define OC_TEST_CASE2( name, desc, uniqueSuffix ) \ -+(NSString*) OC_MAKE_UNIQUE_NAME( Catch_Name_test_, uniqueSuffix ) \ -{ \ -return @ name; \ -} \ -+(NSString*) OC_MAKE_UNIQUE_NAME( Catch_Description_test_, uniqueSuffix ) \ -{ \ -return @ desc; \ -} \ --(void) OC_MAKE_UNIQUE_NAME( Catch_TestCase_test_, uniqueSuffix ) - -#define OC_TEST_CASE( name, desc ) OC_TEST_CASE2( name, desc, __LINE__ ) - -// end catch_objc.hpp -#endif - -#ifdef CATCH_CONFIG_EXTERNAL_INTERFACES -// start catch_external_interfaces.h - -// start catch_reporter_bases.hpp - -// start catch_interfaces_reporter.h - -// start catch_config.hpp - -// start catch_test_spec_parser.h - -#ifdef __clang__ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wpadded" -#endif - -// start catch_test_spec.h - -#ifdef __clang__ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wpadded" -#endif - -// start catch_wildcard_pattern.h - -namespace Catch -{ - class WildcardPattern { - enum WildcardPosition { - NoWildcard = 0, - WildcardAtStart = 1, - WildcardAtEnd = 2, - WildcardAtBothEnds = WildcardAtStart | WildcardAtEnd - }; - - public: - - WildcardPattern( std::string const& pattern, CaseSensitive::Choice caseSensitivity ); - virtual ~WildcardPattern() = default; - virtual bool matches( std::string const& str ) const; - - private: - std::string adjustCase( std::string const& str ) const; - CaseSensitive::Choice m_caseSensitivity; - WildcardPosition m_wildcard = NoWildcard; - std::string m_pattern; - }; -} - -// end catch_wildcard_pattern.h -#include -#include -#include - -namespace Catch { - - class TestSpec { - struct Pattern { - virtual ~Pattern(); - virtual bool matches( TestCaseInfo const& testCase ) const = 0; - }; - using PatternPtr = std::shared_ptr; - - class NamePattern : public Pattern { - public: - NamePattern( std::string const& name ); - virtual ~NamePattern(); - virtual bool matches( TestCaseInfo const& testCase ) const override; - private: - WildcardPattern m_wildcardPattern; - }; - - class TagPattern : public Pattern { - public: - TagPattern( std::string const& tag ); - virtual ~TagPattern(); - virtual bool matches( TestCaseInfo const& testCase ) const override; - private: - std::string m_tag; - }; - - class ExcludedPattern : public Pattern { - public: - ExcludedPattern( PatternPtr const& underlyingPattern ); - virtual ~ExcludedPattern(); - virtual bool matches( TestCaseInfo const& testCase ) const override; - private: - PatternPtr m_underlyingPattern; - }; - - struct Filter { - std::vector m_patterns; - - bool matches( TestCaseInfo const& testCase ) const; - }; - - public: - bool hasFilters() const; - bool matches( TestCaseInfo const& testCase ) const; - - private: - std::vector m_filters; - - friend class TestSpecParser; - }; -} - -#ifdef __clang__ -#pragma clang diagnostic pop -#endif - -// end catch_test_spec.h -// start catch_interfaces_tag_alias_registry.h - -#include - -namespace Catch { - - struct TagAlias; - - struct ITagAliasRegistry { - virtual ~ITagAliasRegistry(); - // Nullptr if not present - virtual TagAlias const* find( std::string const& alias ) const = 0; - virtual std::string expandAliases( std::string const& unexpandedTestSpec ) const = 0; - - static ITagAliasRegistry const& get(); - }; - -} // end namespace Catch - -// end catch_interfaces_tag_alias_registry.h -namespace Catch { - - class TestSpecParser { - enum Mode{ None, Name, QuotedName, Tag, EscapedName }; - Mode m_mode = None; - bool m_exclusion = false; - std::size_t m_start = std::string::npos, m_pos = 0; - std::string m_arg; - std::vector m_escapeChars; - TestSpec::Filter m_currentFilter; - TestSpec m_testSpec; - ITagAliasRegistry const* m_tagAliases = nullptr; - - public: - TestSpecParser( ITagAliasRegistry const& tagAliases ); - - TestSpecParser& parse( std::string const& arg ); - TestSpec testSpec(); - - private: - void visitChar( char c ); - void startNewMode( Mode mode, std::size_t start ); - void escape(); - std::string subString() const; - - template - void addPattern() { - std::string token = subString(); - for( std::size_t i = 0; i < m_escapeChars.size(); ++i ) - token = token.substr( 0, m_escapeChars[i]-m_start-i ) + token.substr( m_escapeChars[i]-m_start-i+1 ); - m_escapeChars.clear(); - if( startsWith( token, "exclude:" ) ) { - m_exclusion = true; - token = token.substr( 8 ); - } - if( !token.empty() ) { - TestSpec::PatternPtr pattern = std::make_shared( token ); - if( m_exclusion ) - pattern = std::make_shared( pattern ); - m_currentFilter.m_patterns.push_back( pattern ); - } - m_exclusion = false; - m_mode = None; - } - - void addFilter(); - }; - TestSpec parseTestSpec( std::string const& arg ); - -} // namespace Catch - -#ifdef __clang__ -#pragma clang diagnostic pop -#endif - -// end catch_test_spec_parser.h -// start catch_interfaces_config.h - -#include -#include -#include -#include - -namespace Catch { - - enum class Verbosity { - Quiet = 0, - Normal, - High - }; - - struct WarnAbout { enum What { - Nothing = 0x00, - NoAssertions = 0x01, - NoTests = 0x02 - }; }; - - struct ShowDurations { enum OrNot { - DefaultForReporter, - Always, - Never - }; }; - struct RunTests { enum InWhatOrder { - InDeclarationOrder, - InLexicographicalOrder, - InRandomOrder - }; }; - struct UseColour { enum YesOrNo { - Auto, - Yes, - No - }; }; - struct WaitForKeypress { enum When { - Never, - BeforeStart = 1, - BeforeExit = 2, - BeforeStartAndExit = BeforeStart | BeforeExit - }; }; - - class TestSpec; - - struct IConfig : NonCopyable { - - 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 bool warnAboutNoTests() 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 bool hasTestFilters() const = 0; - virtual RunTests::InWhatOrder runOrder() const = 0; - virtual unsigned int rngSeed() const = 0; - virtual int benchmarkResolutionMultiple() const = 0; - virtual UseColour::YesOrNo useColour() const = 0; - virtual std::vector const& getSectionsToRun() const = 0; - virtual Verbosity verbosity() const = 0; - }; - - using IConfigPtr = std::shared_ptr; -} - -// end catch_interfaces_config.h -// Libstdc++ doesn't like incomplete classes for unique_ptr - -#include -#include -#include - -#ifndef CATCH_CONFIG_CONSOLE_WIDTH -#define CATCH_CONFIG_CONSOLE_WIDTH 80 -#endif - -namespace Catch { - - struct IStream; - - struct ConfigData { - bool listTests = false; - bool listTags = false; - bool listReporters = false; - bool listTestNamesOnly = false; - - bool showSuccessfulTests = false; - bool shouldDebugBreak = false; - bool noThrow = false; - bool showHelp = false; - bool showInvisibles = false; - bool filenamesAsTags = false; - bool libIdentify = false; - - int abortAfter = -1; - unsigned int rngSeed = 0; - int benchmarkResolutionMultiple = 100; - - Verbosity verbosity = Verbosity::Normal; - WarnAbout::What warnings = WarnAbout::Nothing; - ShowDurations::OrNot showDurations = ShowDurations::DefaultForReporter; - RunTests::InWhatOrder runOrder = RunTests::InDeclarationOrder; - UseColour::YesOrNo useColour = UseColour::Auto; - WaitForKeypress::When waitForKeypress = WaitForKeypress::Never; - - std::string outputFilename; - std::string name; - std::string processName; -#ifndef CATCH_CONFIG_DEFAULT_REPORTER -#define CATCH_CONFIG_DEFAULT_REPORTER "console" -#endif - std::string reporterName = CATCH_CONFIG_DEFAULT_REPORTER; -#undef CATCH_CONFIG_DEFAULT_REPORTER - - std::vector testsOrTags; - std::vector sectionsToRun; - }; - - class Config : public IConfig { - public: - - Config() = default; - Config( ConfigData const& data ); - virtual ~Config() = default; - - std::string const& getFilename() const; - - bool listTests() const; - bool listTestNamesOnly() const; - bool listTags() const; - bool listReporters() const; - - std::string getProcessName() const; - std::string const& getReporterName() const; - - std::vector const& getTestsOrTags() const; - std::vector const& getSectionsToRun() const override; - - virtual TestSpec const& testSpec() const override; - bool hasTestFilters() const override; - - bool showHelp() const; - - // IConfig interface - bool allowThrows() const override; - std::ostream& stream() const override; - std::string name() const override; - bool includeSuccessfulResults() const override; - bool warnAboutMissingAssertions() const override; - bool warnAboutNoTests() const override; - ShowDurations::OrNot showDurations() const override; - RunTests::InWhatOrder runOrder() const override; - unsigned int rngSeed() const override; - int benchmarkResolutionMultiple() const override; - UseColour::YesOrNo useColour() const override; - bool shouldDebugBreak() const override; - int abortAfter() const override; - bool showInvisibles() const override; - Verbosity verbosity() const override; - - private: - - IStream const* openStream(); - ConfigData m_data; - - std::unique_ptr m_stream; - TestSpec m_testSpec; - bool m_hasTestFilters = false; - }; - -} // end namespace Catch - -// end catch_config.hpp -// start catch_assertionresult.h - -#include - -namespace Catch { - - struct AssertionResultData - { - AssertionResultData() = delete; - - AssertionResultData( ResultWas::OfType _resultType, LazyExpression const& _lazyExpression ); - - std::string message; - mutable std::string reconstructedExpression; - LazyExpression lazyExpression; - ResultWas::OfType resultType; - - std::string reconstructExpression() const; - }; - - class AssertionResult { - public: - AssertionResult() = delete; - AssertionResult( AssertionInfo const& info, AssertionResultData const& data ); - - 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; - StringRef getTestMacroName() const; - - //protected: - AssertionInfo m_info; - AssertionResultData m_resultData; - }; - -} // end namespace Catch - -// end catch_assertionresult.h -// start catch_option.hpp - -namespace Catch { - - // An optional type - template - class Option { - public: - Option() : nullableValue( nullptr ) {} - Option( T const& _value ) - : nullableValue( new( storage ) T( _value ) ) - {} - Option( Option const& _other ) - : nullableValue( _other ? new( storage ) T( *_other ) : nullptr ) - {} - - ~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 ) { - reset(); - nullableValue = new( storage ) T( _value ); - return *this; - } - - void reset() { - if( nullableValue ) - nullableValue->~T(); - nullableValue = nullptr; - } - - 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; - } - - bool some() const { return nullableValue != nullptr; } - bool none() const { return nullableValue == nullptr; } - - bool operator !() const { return nullableValue == nullptr; } - explicit operator bool() const { - return some(); - } - - private: - T *nullableValue; - alignas(alignof(T)) char storage[sizeof(T)]; - }; - -} // end namespace Catch - -// end catch_option.hpp -#include -#include -#include -#include -#include - -namespace Catch { - - struct ReporterConfig { - explicit ReporterConfig( IConfigPtr const& _fullConfig ); - - ReporterConfig( IConfigPtr const& _fullConfig, std::ostream& _stream ); - - std::ostream& stream() const; - IConfigPtr fullConfig() const; - - private: - std::ostream* m_stream; - IConfigPtr m_fullConfig; - }; - - struct ReporterPreferences { - bool shouldRedirectStdOut = false; - }; - - template - struct LazyStat : Option { - LazyStat& operator=( T const& _value ) { - Option::operator=( _value ); - used = false; - return *this; - } - void reset() { - Option::reset(); - used = false; - } - bool used = false; - }; - - struct TestRunInfo { - TestRunInfo( std::string const& _name ); - std::string name; - }; - struct GroupInfo { - GroupInfo( std::string const& _name, - std::size_t _groupIndex, - std::size_t _groupsCount ); - - std::string name; - std::size_t groupIndex; - std::size_t groupsCounts; - }; - - struct AssertionStats { - AssertionStats( AssertionResult const& _assertionResult, - std::vector const& _infoMessages, - Totals const& _totals ); - - AssertionStats( AssertionStats const& ) = default; - AssertionStats( AssertionStats && ) = default; - AssertionStats& operator = ( AssertionStats const& ) = default; - AssertionStats& operator = ( AssertionStats && ) = default; - virtual ~AssertionStats(); - - AssertionResult assertionResult; - std::vector infoMessages; - Totals totals; - }; - - struct SectionStats { - SectionStats( SectionInfo const& _sectionInfo, - Counts const& _assertions, - double _durationInSeconds, - bool _missingAssertions ); - SectionStats( SectionStats const& ) = default; - SectionStats( SectionStats && ) = default; - SectionStats& operator = ( SectionStats const& ) = default; - SectionStats& operator = ( SectionStats && ) = default; - virtual ~SectionStats(); - - 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 ); - - TestCaseStats( TestCaseStats const& ) = default; - TestCaseStats( TestCaseStats && ) = default; - TestCaseStats& operator = ( TestCaseStats const& ) = default; - TestCaseStats& operator = ( TestCaseStats && ) = default; - virtual ~TestCaseStats(); - - TestCaseInfo testInfo; - Totals totals; - std::string stdOut; - std::string stdErr; - bool aborting; - }; - - struct TestGroupStats { - TestGroupStats( GroupInfo const& _groupInfo, - Totals const& _totals, - bool _aborting ); - TestGroupStats( GroupInfo const& _groupInfo ); - - TestGroupStats( TestGroupStats const& ) = default; - TestGroupStats( TestGroupStats && ) = default; - TestGroupStats& operator = ( TestGroupStats const& ) = default; - TestGroupStats& operator = ( TestGroupStats && ) = default; - virtual ~TestGroupStats(); - - GroupInfo groupInfo; - Totals totals; - bool aborting; - }; - - struct TestRunStats { - TestRunStats( TestRunInfo const& _runInfo, - Totals const& _totals, - bool _aborting ); - - TestRunStats( TestRunStats const& ) = default; - TestRunStats( TestRunStats && ) = default; - TestRunStats& operator = ( TestRunStats const& ) = default; - TestRunStats& operator = ( TestRunStats && ) = default; - virtual ~TestRunStats(); - - TestRunInfo runInfo; - Totals totals; - bool aborting; - }; - - struct BenchmarkInfo { - std::string name; - }; - struct BenchmarkStats { - BenchmarkInfo info; - std::size_t iterations; - uint64_t elapsedTimeInNanoseconds; - }; - - struct IStreamingReporter { - virtual ~IStreamingReporter() = default; - - // Implementing class must also provide the following static methods: - // static std::string getDescription(); - // static std::set getSupportedVerbosities() - - virtual ReporterPreferences getPreferences() const = 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 testCaseStarting( TestCaseInfo const& testInfo ) = 0; - virtual void sectionStarting( SectionInfo const& sectionInfo ) = 0; - - // *** experimental *** - virtual void benchmarkStarting( BenchmarkInfo const& ) {} - - 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; - - // *** experimental *** - virtual void benchmarkEnded( BenchmarkStats const& ) {} - - 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 skipTest( TestCaseInfo const& testInfo ) = 0; - - // Default empty implementation provided - virtual void fatalErrorEncountered( StringRef name ); - - virtual bool isMulti() const; - }; - using IStreamingReporterPtr = std::unique_ptr; - - struct IReporterFactory { - virtual ~IReporterFactory(); - virtual IStreamingReporterPtr create( ReporterConfig const& config ) const = 0; - virtual std::string getDescription() const = 0; - }; - using IReporterFactoryPtr = std::shared_ptr; - - struct IReporterRegistry { - using FactoryMap = std::map; - using Listeners = std::vector; - - virtual ~IReporterRegistry(); - virtual IStreamingReporterPtr create( std::string const& name, IConfigPtr const& config ) const = 0; - virtual FactoryMap const& getFactories() const = 0; - virtual Listeners const& getListeners() const = 0; - }; - -} // end namespace Catch - -// end catch_interfaces_reporter.h -#include -#include -#include -#include -#include -#include -#include - -namespace Catch { - void prepareExpandedExpression(AssertionResult& result); - - // Returns double formatted as %.3f (format expected on output) - std::string getFormattedDuration( double duration ); - - template - struct StreamingReporterBase : IStreamingReporter { - - StreamingReporterBase( ReporterConfig const& _config ) - : m_config( _config.fullConfig() ), - stream( _config.stream() ) - { - m_reporterPrefs.shouldRedirectStdOut = false; - if( !DerivedT::getSupportedVerbosities().count( m_config->verbosity() ) ) - throw std::domain_error( "Verbosity level not supported by this reporter" ); - } - - ReporterPreferences getPreferences() const override { - return m_reporterPrefs; - } - - static std::set getSupportedVerbosities() { - return { Verbosity::Normal }; - } - - ~StreamingReporterBase() override = default; - - void noMatchingTestCases(std::string const&) override {} - - void testRunStarting(TestRunInfo const& _testRunInfo) override { - currentTestRunInfo = _testRunInfo; - } - void testGroupStarting(GroupInfo const& _groupInfo) override { - currentGroupInfo = _groupInfo; - } - - void testCaseStarting(TestCaseInfo const& _testInfo) override { - currentTestCaseInfo = _testInfo; - } - void sectionStarting(SectionInfo const& _sectionInfo) override { - m_sectionStack.push_back(_sectionInfo); - } - - void sectionEnded(SectionStats const& /* _sectionStats */) override { - m_sectionStack.pop_back(); - } - void testCaseEnded(TestCaseStats const& /* _testCaseStats */) override { - currentTestCaseInfo.reset(); - } - void testGroupEnded(TestGroupStats const& /* _testGroupStats */) override { - currentGroupInfo.reset(); - } - void testRunEnded(TestRunStats const& /* _testRunStats */) override { - currentTestCaseInfo.reset(); - currentGroupInfo.reset(); - currentTestRunInfo.reset(); - } - - void skipTest(TestCaseInfo const&) override { - // Don't do anything with this by default. - // It can optionally be overridden in the derived class. - } - - IConfigPtr m_config; - std::ostream& stream; - - LazyStat currentTestRunInfo; - LazyStat currentGroupInfo; - LazyStat currentTestCaseInfo; - - std::vector m_sectionStack; - ReporterPreferences m_reporterPrefs; - }; - - template - struct CumulativeReporterBase : IStreamingReporter { - template - struct Node { - explicit Node( T const& _value ) : value( _value ) {} - virtual ~Node() {} - - using ChildNodes = std::vector>; - T value; - ChildNodes children; - }; - struct SectionNode { - explicit SectionNode(SectionStats const& _stats) : stats(_stats) {} - virtual ~SectionNode() = default; - - bool operator == (SectionNode const& other) const { - return stats.sectionInfo.lineInfo == other.stats.sectionInfo.lineInfo; - } - bool operator == (std::shared_ptr const& other) const { - return operator==(*other); - } - - SectionStats stats; - using ChildSections = std::vector>; - using Assertions = std::vector; - 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() (std::shared_ptr const& node) const { - return ((node->stats.sectionInfo.name == m_other.name) && - (node->stats.sectionInfo.lineInfo == m_other.lineInfo)); - } - void operator=(BySectionInfo const&) = delete; - - private: - SectionInfo const& m_other; - }; - - using TestCaseNode = Node; - using TestGroupNode = Node; - using TestRunNode = Node; - - CumulativeReporterBase( ReporterConfig const& _config ) - : m_config( _config.fullConfig() ), - stream( _config.stream() ) - { - m_reporterPrefs.shouldRedirectStdOut = false; - if( !DerivedT::getSupportedVerbosities().count( m_config->verbosity() ) ) - throw std::domain_error( "Verbosity level not supported by this reporter" ); - } - ~CumulativeReporterBase() override = default; - - ReporterPreferences getPreferences() const override { - return m_reporterPrefs; - } - - static std::set getSupportedVerbosities() { - return { Verbosity::Normal }; - } - - void testRunStarting( TestRunInfo const& ) override {} - void testGroupStarting( GroupInfo const& ) override {} - - void testCaseStarting( TestCaseInfo const& ) override {} - - void sectionStarting( SectionInfo const& sectionInfo ) override { - SectionStats incompleteStats( sectionInfo, Counts(), 0, false ); - std::shared_ptr node; - if( m_sectionStack.empty() ) { - if( !m_rootSection ) - m_rootSection = std::make_shared( incompleteStats ); - node = m_rootSection; - } - else { - SectionNode& parentNode = *m_sectionStack.back(); - auto it = - std::find_if( parentNode.childSections.begin(), - parentNode.childSections.end(), - BySectionInfo( sectionInfo ) ); - if( it == parentNode.childSections.end() ) { - node = std::make_shared( incompleteStats ); - parentNode.childSections.push_back( node ); - } - else - node = *it; - } - m_sectionStack.push_back( node ); - m_deepestSection = std::move(node); - } - - void assertionStarting(AssertionInfo const&) override {} - - bool assertionEnded(AssertionStats const& assertionStats) override { - assert(!m_sectionStack.empty()); - // AssertionResult holds a pointer to a temporary DecomposedExpression, - // which getExpandedExpression() calls to build the expression string. - // Our section stack copy of the assertionResult will likely outlive the - // temporary, so it must be expanded or discarded now to avoid calling - // a destroyed object later. - prepareExpandedExpression(const_cast( assertionStats.assertionResult ) ); - SectionNode& sectionNode = *m_sectionStack.back(); - sectionNode.assertions.push_back(assertionStats); - return true; - } - void sectionEnded(SectionStats const& sectionStats) override { - assert(!m_sectionStack.empty()); - SectionNode& node = *m_sectionStack.back(); - node.stats = sectionStats; - m_sectionStack.pop_back(); - } - void testCaseEnded(TestCaseStats const& testCaseStats) override { - auto node = std::make_shared(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; - } - void testGroupEnded(TestGroupStats const& testGroupStats) override { - auto node = std::make_shared(testGroupStats); - node->children.swap(m_testCases); - m_testGroups.push_back(node); - } - void testRunEnded(TestRunStats const& testRunStats) override { - auto node = std::make_shared(testRunStats); - node->children.swap(m_testGroups); - m_testRuns.push_back(node); - testRunEndedCumulative(); - } - virtual void testRunEndedCumulative() = 0; - - void skipTest(TestCaseInfo const&) override {} - - IConfigPtr 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::shared_ptr m_rootSection; - std::shared_ptr m_deepestSection; - std::vector> m_sectionStack; - ReporterPreferences m_reporterPrefs; - }; - - template - char const* getLineOfChars() { - static char line[CATCH_CONFIG_CONSOLE_WIDTH] = {0}; - if( !*line ) { - std::memset( line, C, CATCH_CONFIG_CONSOLE_WIDTH-1 ); - line[CATCH_CONFIG_CONSOLE_WIDTH-1] = 0; - } - return line; - } - - struct TestEventListenerBase : StreamingReporterBase { - TestEventListenerBase( ReporterConfig const& _config ); - - void assertionStarting(AssertionInfo const&) override; - bool assertionEnded(AssertionStats const&) override; - }; - -} // end namespace Catch - -// end catch_reporter_bases.hpp -// start catch_console_colour.h - -namespace Catch { - - struct Colour { - enum Code { - None = 0, - - White, - Red, - Green, - Blue, - Cyan, - Yellow, - Grey, - - Bright = 0x10, - - BrightRed = Bright | Red, - BrightGreen = Bright | Green, - LightGrey = Bright | Grey, - BrightWhite = Bright | White, - BrightYellow = Bright | Yellow, - - // By intention - FileName = LightGrey, - Warning = BrightYellow, - ResultError = BrightRed, - ResultSuccess = BrightGreen, - ResultExpectedFailure = Warning, - - Error = BrightRed, - Success = Green, - - OriginalExpression = Cyan, - ReconstructedExpression = BrightYellow, - - SecondaryText = LightGrey, - Headers = White - }; - - // Use constructed object for RAII guard - Colour( Code _colourCode ); - Colour( Colour&& other ) noexcept; - Colour& operator=( Colour&& other ) noexcept; - ~Colour(); - - // Use static method for one-shot changes - static void use( Code _colourCode ); - - private: - bool m_moved = false; - }; - - std::ostream& operator << ( std::ostream& os, Colour const& ); - -} // end namespace Catch - -// end catch_console_colour.h -// start catch_reporter_registrars.hpp - - -namespace Catch { - - template - class ReporterRegistrar { - - class ReporterFactory : public IReporterFactory { - - virtual IStreamingReporterPtr create( ReporterConfig const& config ) const override { - return std::unique_ptr( new T( config ) ); - } - - virtual std::string getDescription() const override { - return T::getDescription(); - } - }; - - public: - - explicit ReporterRegistrar( std::string const& name ) { - getMutableRegistryHub().registerReporter( name, std::make_shared() ); - } - }; - - template - class ListenerRegistrar { - - class ListenerFactory : public IReporterFactory { - - virtual IStreamingReporterPtr create( ReporterConfig const& config ) const override { - return std::unique_ptr( new T( config ) ); - } - virtual std::string getDescription() const override { - return std::string(); - } - }; - - public: - - ListenerRegistrar() { - getMutableRegistryHub().registerListener( std::make_shared() ); - } - }; -} - -#if !defined(CATCH_CONFIG_DISABLE) - -#define CATCH_REGISTER_REPORTER( name, reporterType ) \ - CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \ - namespace{ Catch::ReporterRegistrar catch_internal_RegistrarFor##reporterType( name ); } \ - CATCH_INTERNAL_UNSUPPRESS_GLOBALS_WARNINGS - -#define CATCH_REGISTER_LISTENER( listenerType ) \ - CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \ - namespace{ Catch::ListenerRegistrar catch_internal_RegistrarFor##listenerType; } \ - CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS -#else // CATCH_CONFIG_DISABLE - -#define CATCH_REGISTER_REPORTER(name, reporterType) -#define CATCH_REGISTER_LISTENER(listenerType) - -#endif // CATCH_CONFIG_DISABLE - -// end catch_reporter_registrars.hpp -// Allow users to base their work off existing reporters -// start catch_reporter_compact.h - -namespace Catch { - - struct CompactReporter : StreamingReporterBase { - - using StreamingReporterBase::StreamingReporterBase; - - ~CompactReporter() override; - - static std::string getDescription(); - - ReporterPreferences getPreferences() const override; - - void noMatchingTestCases(std::string const& spec) override; - - void assertionStarting(AssertionInfo const&) override; - - bool assertionEnded(AssertionStats const& _assertionStats) override; - - void sectionEnded(SectionStats const& _sectionStats) override; - - void testRunEnded(TestRunStats const& _testRunStats) override; - - }; - -} // end namespace Catch - -// end catch_reporter_compact.h -// start catch_reporter_console.h - -#if defined(_MSC_VER) -#pragma warning(push) -#pragma warning(disable:4061) // Not all labels are EXPLICITLY handled in switch - // Note that 4062 (not all labels are handled - // and default is missing) is enabled -#endif - -namespace Catch { - // Fwd decls - struct SummaryColumn; - class TablePrinter; - - struct ConsoleReporter : StreamingReporterBase { - std::unique_ptr m_tablePrinter; - - ConsoleReporter(ReporterConfig const& config); - ~ConsoleReporter() override; - static std::string getDescription(); - - void noMatchingTestCases(std::string const& spec) override; - - void assertionStarting(AssertionInfo const&) override; - - bool assertionEnded(AssertionStats const& _assertionStats) override; - - void sectionStarting(SectionInfo const& _sectionInfo) override; - void sectionEnded(SectionStats const& _sectionStats) override; - - void benchmarkStarting(BenchmarkInfo const& info) override; - void benchmarkEnded(BenchmarkStats const& stats) override; - - void testCaseEnded(TestCaseStats const& _testCaseStats) override; - void testGroupEnded(TestGroupStats const& _testGroupStats) override; - void testRunEnded(TestRunStats const& _testRunStats) override; - - private: - - void lazyPrint(); - - void lazyPrintWithoutClosingBenchmarkTable(); - void lazyPrintRunInfo(); - void lazyPrintGroupInfo(); - void printTestCaseAndSectionHeader(); - - void printClosedHeader(std::string const& _name); - void printOpenHeader(std::string const& _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); - - void printTotals(Totals const& totals); - void printSummaryRow(std::string const& label, std::vector const& cols, std::size_t row); - - void printTotalsDivider(Totals const& totals); - void printSummaryDivider(); - - private: - bool m_headerPrinted = false; - }; - -} // end namespace Catch - -#if defined(_MSC_VER) -#pragma warning(pop) -#endif - -// end catch_reporter_console.h -// start catch_reporter_junit.h - -// start catch_xmlwriter.h - -#include - -namespace Catch { - - class XmlEncode { - public: - enum ForWhat { ForTextNodes, ForAttributes }; - - XmlEncode( std::string const& str, ForWhat forWhat = ForTextNodes ); - - void encodeTo( std::ostream& os ) const; - - friend std::ostream& operator << ( std::ostream& os, XmlEncode const& xmlEncode ); - - private: - std::string m_str; - ForWhat m_forWhat; - }; - - class XmlWriter { - public: - - class ScopedElement { - public: - ScopedElement( XmlWriter* writer ); - - ScopedElement( ScopedElement&& other ) noexcept; - ScopedElement& operator=( ScopedElement&& other ) noexcept; - - ~ScopedElement(); - - ScopedElement& writeText( std::string const& text, bool indent = true ); - - template - ScopedElement& writeAttribute( std::string const& name, T const& attribute ) { - m_writer->writeAttribute( name, attribute ); - return *this; - } - - private: - mutable XmlWriter* m_writer = nullptr; - }; - - XmlWriter( std::ostream& os = Catch::cout() ); - ~XmlWriter(); - - XmlWriter( XmlWriter const& ) = delete; - XmlWriter& operator=( XmlWriter const& ) = delete; - - XmlWriter& startElement( std::string const& name ); - - ScopedElement scopedElement( std::string const& name ); - - XmlWriter& endElement(); - - XmlWriter& writeAttribute( std::string const& name, std::string const& attribute ); - - XmlWriter& writeAttribute( std::string const& name, bool attribute ); - - template - XmlWriter& writeAttribute( std::string const& name, T const& attribute ) { - ReusableStringStream rss; - rss << attribute; - return writeAttribute( name, rss.str() ); - } - - XmlWriter& writeText( std::string const& text, bool indent = true ); - - XmlWriter& writeComment( std::string const& text ); - - void writeStylesheetRef( std::string const& url ); - - XmlWriter& writeBlankLine(); - - void ensureTagClosed(); - - private: - - void writeDeclaration(); - - void newlineIfNecessary(); - - bool m_tagIsOpen = false; - bool m_needsNewline = false; - std::vector m_tags; - std::string m_indent; - std::ostream& m_os; - }; - -} - -// end catch_xmlwriter.h -namespace Catch { - - class JunitReporter : public CumulativeReporterBase { - public: - JunitReporter(ReporterConfig const& _config); - - ~JunitReporter() override; - - static std::string getDescription(); - - void noMatchingTestCases(std::string const& /*spec*/) override; - - void testRunStarting(TestRunInfo const& runInfo) override; - - void testGroupStarting(GroupInfo const& groupInfo) override; - - void testCaseStarting(TestCaseInfo const& testCaseInfo) override; - bool assertionEnded(AssertionStats const& assertionStats) override; - - void testCaseEnded(TestCaseStats const& testCaseStats) override; - - void testGroupEnded(TestGroupStats const& testGroupStats) override; - - void testRunEndedCumulative() override; - - void writeGroup(TestGroupNode const& groupNode, double suiteTime); - - void writeTestCase(TestCaseNode const& testCaseNode); - - void writeSection(std::string const& className, - std::string const& rootName, - SectionNode const& sectionNode); - - void writeAssertions(SectionNode const& sectionNode); - void writeAssertion(AssertionStats const& stats); - - XmlWriter xml; - Timer suiteTimer; - std::string stdOutForSuite; - std::string stdErrForSuite; - unsigned int unexpectedExceptions = 0; - bool m_okToFail = false; - }; - -} // end namespace Catch - -// end catch_reporter_junit.h -// start catch_reporter_xml.h - -namespace Catch { - class XmlReporter : public StreamingReporterBase { - public: - XmlReporter(ReporterConfig const& _config); - - ~XmlReporter() override; - - static std::string getDescription(); - - virtual std::string getStylesheetRef() const; - - void writeSourceInfo(SourceLineInfo const& sourceInfo); - - public: // StreamingReporterBase - - void noMatchingTestCases(std::string const& s) override; - - void testRunStarting(TestRunInfo const& testInfo) override; - - void testGroupStarting(GroupInfo const& groupInfo) override; - - void testCaseStarting(TestCaseInfo const& testInfo) override; - - void sectionStarting(SectionInfo const& sectionInfo) override; - - void assertionStarting(AssertionInfo const&) override; - - bool assertionEnded(AssertionStats const& assertionStats) override; - - void sectionEnded(SectionStats const& sectionStats) override; - - void testCaseEnded(TestCaseStats const& testCaseStats) override; - - void testGroupEnded(TestGroupStats const& testGroupStats) override; - - void testRunEnded(TestRunStats const& testRunStats) override; - - private: - Timer m_testCaseTimer; - XmlWriter m_xml; - int m_sectionDepth = 0; - }; - -} // end namespace Catch - -// end catch_reporter_xml.h - -// end catch_external_interfaces.h -#endif - -#endif // ! CATCH_CONFIG_IMPL_ONLY - -#ifdef CATCH_IMPL -// start catch_impl.hpp - -#ifdef __clang__ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wweak-vtables" -#endif - -// Keep these here for external reporters -// start catch_test_case_tracker.h - -#include -#include -#include - -namespace Catch { -namespace TestCaseTracking { - - struct NameAndLocation { - std::string name; - SourceLineInfo location; - - NameAndLocation( std::string const& _name, SourceLineInfo const& _location ); - }; - - struct ITracker; - - using ITrackerPtr = std::shared_ptr; - - struct ITracker { - virtual ~ITracker(); - - // static queries - virtual NameAndLocation const& nameAndLocation() 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; - - // actions - virtual void close() = 0; // Successfully complete - virtual void fail() = 0; - virtual void markAsNeedingAnotherRun() = 0; - - virtual void addChild( ITrackerPtr const& child ) = 0; - virtual ITrackerPtr findChild( NameAndLocation const& nameAndLocation ) = 0; - virtual void openChild() = 0; - - // Debug/ checking - virtual bool isSectionTracker() const = 0; - virtual bool isIndexTracker() const = 0; - }; - - class TrackerContext { - - enum RunState { - NotStarted, - Executing, - CompletedCycle - }; - - ITrackerPtr m_rootTracker; - ITracker* m_currentTracker = nullptr; - RunState m_runState = NotStarted; - - public: - - static TrackerContext& instance(); - - ITracker& startRun(); - void endRun(); - - void startCycle(); - void completeCycle(); - - bool completedCycle() const; - ITracker& currentTracker(); - void setCurrentTracker( ITracker* tracker ); - }; - - class TrackerBase : public ITracker { - protected: - enum CycleState { - NotStarted, - Executing, - ExecutingChildren, - NeedsAnotherRun, - CompletedSuccessfully, - Failed - }; - - class TrackerHasName { - NameAndLocation m_nameAndLocation; - public: - TrackerHasName( NameAndLocation const& nameAndLocation ); - bool operator ()( ITrackerPtr const& tracker ) const; - }; - - using Children = std::vector; - NameAndLocation m_nameAndLocation; - TrackerContext& m_ctx; - ITracker* m_parent; - Children m_children; - CycleState m_runState = NotStarted; - - public: - TrackerBase( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent ); - - NameAndLocation const& nameAndLocation() const override; - bool isComplete() const override; - bool isSuccessfullyCompleted() const override; - bool isOpen() const override; - bool hasChildren() const override; - - void addChild( ITrackerPtr const& child ) override; - - ITrackerPtr findChild( NameAndLocation const& nameAndLocation ) override; - ITracker& parent() override; - - void openChild() override; - - bool isSectionTracker() const override; - bool isIndexTracker() const override; - - void open(); - - void close() override; - void fail() override; - void markAsNeedingAnotherRun() override; - - private: - void moveToParent(); - void moveToThis(); - }; - - class SectionTracker : public TrackerBase { - std::vector m_filters; - public: - SectionTracker( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent ); - - bool isSectionTracker() const override; - - static SectionTracker& acquire( TrackerContext& ctx, NameAndLocation const& nameAndLocation ); - - void tryOpen(); - - void addInitialFilters( std::vector const& filters ); - void addNextFilters( std::vector const& filters ); - }; - - class IndexTracker : public TrackerBase { - int m_size; - int m_index = -1; - public: - IndexTracker( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent, int size ); - - bool isIndexTracker() const override; - void close() override; - - static IndexTracker& acquire( TrackerContext& ctx, NameAndLocation const& nameAndLocation, int size ); - - int index() const; - - void moveNext(); - }; - -} // namespace TestCaseTracking - -using TestCaseTracking::ITracker; -using TestCaseTracking::TrackerContext; -using TestCaseTracking::SectionTracker; -using TestCaseTracking::IndexTracker; - -} // namespace Catch - -// end catch_test_case_tracker.h - -// start catch_leak_detector.h - -namespace Catch { - - struct LeakDetector { - LeakDetector(); - }; - -} -// end catch_leak_detector.h -// Cpp files will be included in the single-header file here -// start catch_approx.cpp - -#include -#include - -namespace { - -// Performs equivalent check of std::fabs(lhs - rhs) <= margin -// But without the subtraction to allow for INFINITY in comparison -bool marginComparison(double lhs, double rhs, double margin) { - return (lhs + margin >= rhs) && (rhs + margin >= lhs); -} - -} - -namespace Catch { -namespace Detail { - - Approx::Approx ( double value ) - : m_epsilon( std::numeric_limits::epsilon()*100 ), - m_margin( 0.0 ), - m_scale( 0.0 ), - m_value( value ) - {} - - Approx Approx::custom() { - return Approx( 0 ); - } - - std::string Approx::toString() const { - ReusableStringStream rss; - rss << "Approx( " << ::Catch::Detail::stringify( m_value ) << " )"; - return rss.str(); - } - - bool Approx::equalityComparisonImpl(const double other) const { - // First try with fixed margin, then compute margin based on epsilon, scale and Approx's value - // Thanks to Richard Harris for his help refining the scaled margin value - return marginComparison(m_value, other, m_margin) || marginComparison(m_value, other, m_epsilon * (m_scale + std::fabs(m_value))); - } - -} // end namespace Detail - -std::string StringMaker::convert(Catch::Detail::Approx const& value) { - return value.toString(); -} - -} // end namespace Catch -// end catch_approx.cpp -// start catch_assertionhandler.cpp - -// start catch_context.h - -#include - -namespace Catch { - - struct IResultCapture; - struct IRunner; - struct IConfig; - struct IMutableContext; - - using IConfigPtr = std::shared_ptr; - - struct IContext - { - virtual ~IContext(); - - virtual IResultCapture* getResultCapture() = 0; - virtual IRunner* getRunner() = 0; - virtual IConfigPtr const& getConfig() const = 0; - }; - - struct IMutableContext : IContext - { - virtual ~IMutableContext(); - virtual void setResultCapture( IResultCapture* resultCapture ) = 0; - virtual void setRunner( IRunner* runner ) = 0; - virtual void setConfig( IConfigPtr const& config ) = 0; - - private: - static IMutableContext *currentContext; - friend IMutableContext& getCurrentMutableContext(); - friend void cleanUpContext(); - static void createContext(); - }; - - inline IMutableContext& getCurrentMutableContext() - { - if( !IMutableContext::currentContext ) - IMutableContext::createContext(); - return *IMutableContext::currentContext; - } - - inline IContext& getCurrentContext() - { - return getCurrentMutableContext(); - } - - void cleanUpContext(); -} - -// end catch_context.h -// start catch_debugger.h - -namespace Catch { - bool isDebuggerActive(); -} - -#ifdef CATCH_PLATFORM_MAC - - #define CATCH_TRAP() __asm__("int $3\n" : : ) /* NOLINT */ - -#elif defined(CATCH_PLATFORM_LINUX) - // If we can use inline assembler, do it because this allows us to break - // directly at the location of the failing check instead of breaking inside - // raise() called from it, i.e. one stack frame below. - #if defined(__GNUC__) && (defined(__i386) || defined(__x86_64)) - #define CATCH_TRAP() asm volatile ("int $3") /* NOLINT */ - #else // Fall back to the generic way. - #include - - #define CATCH_TRAP() raise(SIGTRAP) - #endif -#elif defined(_MSC_VER) - #define CATCH_TRAP() __debugbreak() -#elif defined(__MINGW32__) - extern "C" __declspec(dllimport) void __stdcall DebugBreak(); - #define CATCH_TRAP() DebugBreak() -#endif - -#ifdef CATCH_TRAP - #define CATCH_BREAK_INTO_DEBUGGER() if( Catch::isDebuggerActive() ) { CATCH_TRAP(); } -#else - namespace Catch { - inline void doNothing() {} - } - #define CATCH_BREAK_INTO_DEBUGGER() Catch::doNothing() -#endif - -// end catch_debugger.h -// start catch_run_context.h - -// start catch_fatal_condition.h - -// start catch_windows_h_proxy.h - - -#if defined(CATCH_PLATFORM_WINDOWS) - -#if !defined(NOMINMAX) && !defined(CATCH_CONFIG_NO_NOMINMAX) -# define CATCH_DEFINED_NOMINMAX -# define NOMINMAX -#endif -#if !defined(WIN32_LEAN_AND_MEAN) && !defined(CATCH_CONFIG_NO_WIN32_LEAN_AND_MEAN) -# define CATCH_DEFINED_WIN32_LEAN_AND_MEAN -# define WIN32_LEAN_AND_MEAN -#endif - -#ifdef __AFXDLL -#include -#else -#include -#endif - -#ifdef CATCH_DEFINED_NOMINMAX -# undef NOMINMAX -#endif -#ifdef CATCH_DEFINED_WIN32_LEAN_AND_MEAN -# undef WIN32_LEAN_AND_MEAN -#endif - -#endif // defined(CATCH_PLATFORM_WINDOWS) - -// end catch_windows_h_proxy.h -#if defined( CATCH_CONFIG_WINDOWS_SEH ) - -namespace Catch { - - struct FatalConditionHandler { - - static LONG CALLBACK handleVectoredException(PEXCEPTION_POINTERS ExceptionInfo); - FatalConditionHandler(); - static void reset(); - ~FatalConditionHandler(); - - private: - static bool isSet; - static ULONG guaranteeSize; - static PVOID exceptionHandlerHandle; - }; - -} // namespace Catch - -#elif defined ( CATCH_CONFIG_POSIX_SIGNALS ) - -#include - -namespace Catch { - - struct FatalConditionHandler { - - static bool isSet; - static struct sigaction oldSigActions[]; - static stack_t oldSigStack; - static char altStackMem[]; - - static void handleSignal( int sig ); - - FatalConditionHandler(); - ~FatalConditionHandler(); - static void reset(); - }; - -} // namespace Catch - -#else - -namespace Catch { - struct FatalConditionHandler { - void reset(); - }; -} - -#endif - -// end catch_fatal_condition.h -#include - -namespace Catch { - - struct IMutableContext; - - /////////////////////////////////////////////////////////////////////////// - - class RunContext : public IResultCapture, public IRunner { - - public: - RunContext( RunContext const& ) = delete; - RunContext& operator =( RunContext const& ) = delete; - - explicit RunContext( IConfigPtr const& _config, IStreamingReporterPtr&& reporter ); - - ~RunContext() override; - - void testGroupStarting( std::string const& testSpec, std::size_t groupIndex, std::size_t groupsCount ); - void testGroupEnded( std::string const& testSpec, Totals const& totals, std::size_t groupIndex, std::size_t groupsCount ); - - Totals runTest(TestCase const& testCase); - - IConfigPtr config() const; - IStreamingReporter& reporter() const; - - public: // IResultCapture - - // Assertion handlers - void handleExpr - ( AssertionInfo const& info, - ITransientExpression const& expr, - AssertionReaction& reaction ) override; - void handleMessage - ( AssertionInfo const& info, - ResultWas::OfType resultType, - StringRef const& message, - AssertionReaction& reaction ) override; - void handleUnexpectedExceptionNotThrown - ( AssertionInfo const& info, - AssertionReaction& reaction ) override; - void handleUnexpectedInflightException - ( AssertionInfo const& info, - std::string const& message, - AssertionReaction& reaction ) override; - void handleIncomplete - ( AssertionInfo const& info ) override; - void handleNonExpr - ( AssertionInfo const &info, - ResultWas::OfType resultType, - AssertionReaction &reaction ) override; - - bool sectionStarted( SectionInfo const& sectionInfo, Counts& assertions ) override; - - void sectionEnded( SectionEndInfo const& endInfo ) override; - void sectionEndedEarly( SectionEndInfo const& endInfo ) override; - - void benchmarkStarting( BenchmarkInfo const& info ) override; - void benchmarkEnded( BenchmarkStats const& stats ) override; - - void pushScopedMessage( MessageInfo const& message ) override; - void popScopedMessage( MessageInfo const& message ) override; - - std::string getCurrentTestName() const override; - - const AssertionResult* getLastResult() const override; - - void exceptionEarlyReported() override; - - void handleFatalErrorCondition( StringRef message ) override; - - bool lastAssertionPassed() override; - - void assertionPassed() override; - - public: - // !TBD We need to do this another way! - bool aborting() const final; - - private: - - void runCurrentTest( std::string& redirectedCout, std::string& redirectedCerr ); - void invokeActiveTestCase(); - - void resetAssertionInfo(); - bool testForMissingAssertions( Counts& assertions ); - - void assertionEnded( AssertionResult const& result ); - void reportExpr - ( AssertionInfo const &info, - ResultWas::OfType resultType, - ITransientExpression const *expr, - bool negated ); - - void populateReaction( AssertionReaction& reaction ); - - private: - - void handleUnfinishedSections(); - - TestRunInfo m_runInfo; - IMutableContext& m_context; - TestCase const* m_activeTestCase = nullptr; - ITracker* m_testCaseTracker; - Option m_lastResult; - - IConfigPtr m_config; - Totals m_totals; - IStreamingReporterPtr m_reporter; - std::vector m_messages; - AssertionInfo m_lastAssertionInfo; - std::vector m_unfinishedSections; - std::vector m_activeSections; - TrackerContext m_trackerContext; - bool m_lastAssertionPassed = false; - bool m_shouldReportUnexpected = true; - bool m_includeSuccessfulResults; - }; - -} // end namespace Catch - -// end catch_run_context.h -namespace Catch { - - auto operator <<( std::ostream& os, ITransientExpression const& expr ) -> std::ostream& { - expr.streamReconstructedExpression( os ); - return os; - } - - LazyExpression::LazyExpression( bool isNegated ) - : m_isNegated( isNegated ) - {} - - LazyExpression::LazyExpression( LazyExpression const& other ) : m_isNegated( other.m_isNegated ) {} - - LazyExpression::operator bool() const { - return m_transientExpression != nullptr; - } - - auto operator << ( std::ostream& os, LazyExpression const& lazyExpr ) -> std::ostream& { - if( lazyExpr.m_isNegated ) - os << "!"; - - if( lazyExpr ) { - if( lazyExpr.m_isNegated && lazyExpr.m_transientExpression->isBinaryExpression() ) - os << "(" << *lazyExpr.m_transientExpression << ")"; - else - os << *lazyExpr.m_transientExpression; - } - else { - os << "{** error - unchecked empty expression requested **}"; - } - return os; - } - - AssertionHandler::AssertionHandler - ( StringRef macroName, - SourceLineInfo const& lineInfo, - StringRef capturedExpression, - ResultDisposition::Flags resultDisposition ) - : m_assertionInfo{ macroName, lineInfo, capturedExpression, resultDisposition }, - m_resultCapture( getResultCapture() ) - {} - - void AssertionHandler::handleExpr( ITransientExpression const& expr ) { - m_resultCapture.handleExpr( m_assertionInfo, expr, m_reaction ); - } - void AssertionHandler::handleMessage(ResultWas::OfType resultType, StringRef const& message) { - m_resultCapture.handleMessage( m_assertionInfo, resultType, message, m_reaction ); - } - - auto AssertionHandler::allowThrows() const -> bool { - return getCurrentContext().getConfig()->allowThrows(); - } - - void AssertionHandler::complete() { - setCompleted(); - if( m_reaction.shouldDebugBreak ) { - - // If you find your debugger stopping you here then go one level up on the - // call-stack for the code that caused it (typically a failed assertion) - - // (To go back to the test and change execution, jump over the throw, next) - CATCH_BREAK_INTO_DEBUGGER(); - } - if( m_reaction.shouldThrow ) - throw Catch::TestFailureException(); - } - void AssertionHandler::setCompleted() { - m_completed = true; - } - - void AssertionHandler::handleUnexpectedInflightException() { - m_resultCapture.handleUnexpectedInflightException( m_assertionInfo, Catch::translateActiveException(), m_reaction ); - } - - void AssertionHandler::handleExceptionThrownAsExpected() { - m_resultCapture.handleNonExpr(m_assertionInfo, ResultWas::Ok, m_reaction); - } - void AssertionHandler::handleExceptionNotThrownAsExpected() { - m_resultCapture.handleNonExpr(m_assertionInfo, ResultWas::Ok, m_reaction); - } - - void AssertionHandler::handleUnexpectedExceptionNotThrown() { - m_resultCapture.handleUnexpectedExceptionNotThrown( m_assertionInfo, m_reaction ); - } - - void AssertionHandler::handleThrowingCallSkipped() { - m_resultCapture.handleNonExpr(m_assertionInfo, ResultWas::Ok, m_reaction); - } - - // This is the overload that takes a string and infers the Equals matcher from it - // The more general overload, that takes any string matcher, is in catch_capture_matchers.cpp - void handleExceptionMatchExpr( AssertionHandler& handler, std::string const& str, StringRef matcherString ) { - handleExceptionMatchExpr( handler, Matchers::Equals( str ), matcherString ); - } - -} // namespace Catch -// end catch_assertionhandler.cpp -// start catch_assertionresult.cpp - -namespace Catch { - AssertionResultData::AssertionResultData(ResultWas::OfType _resultType, LazyExpression const & _lazyExpression): - lazyExpression(_lazyExpression), - resultType(_resultType) {} - - std::string AssertionResultData::reconstructExpression() const { - - if( reconstructedExpression.empty() ) { - if( lazyExpression ) { - ReusableStringStream rss; - rss << lazyExpression; - reconstructedExpression = rss.str(); - } - } - return reconstructedExpression; - } - - AssertionResult::AssertionResult( AssertionInfo const& info, AssertionResultData const& data ) - : m_info( info ), - m_resultData( data ) - {} - - // 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 ); - } - - ResultWas::OfType AssertionResult::getResultType() const { - return m_resultData.resultType; - } - - bool AssertionResult::hasExpression() const { - return m_info.capturedExpression[0] != 0; - } - - 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::getExpressionInMacro() const { - std::string expr; - if( m_info.macroName[0] == 0 ) - expr = m_info.capturedExpression; - else { - expr.reserve( m_info.macroName.size() + m_info.capturedExpression.size() + 4 ); - expr += m_info.macroName; - expr += "( "; - expr += m_info.capturedExpression; - expr += " )"; - } - return expr; - } - - bool AssertionResult::hasExpandedExpression() const { - return hasExpression() && getExpandedExpression() != getExpression(); - } - - std::string AssertionResult::getExpandedExpression() const { - std::string expr = m_resultData.reconstructExpression(); - return expr.empty() - ? getExpression() - : expr; - } - - std::string AssertionResult::getMessage() const { - return m_resultData.message; - } - SourceLineInfo AssertionResult::getSourceInfo() const { - return m_info.lineInfo; - } - - StringRef AssertionResult::getTestMacroName() const { - return m_info.macroName; - } - -} // end namespace Catch -// end catch_assertionresult.cpp -// start catch_benchmark.cpp - -namespace Catch { - - auto BenchmarkLooper::getResolution() -> uint64_t { - return getEstimatedClockResolution() * getCurrentContext().getConfig()->benchmarkResolutionMultiple(); - } - - void BenchmarkLooper::reportStart() { - getResultCapture().benchmarkStarting( { m_name } ); - } - auto BenchmarkLooper::needsMoreIterations() -> bool { - auto elapsed = m_timer.getElapsedNanoseconds(); - - // Exponentially increasing iterations until we're confident in our timer resolution - if( elapsed < m_resolution ) { - m_iterationsToRun *= 10; - return true; - } - - getResultCapture().benchmarkEnded( { { m_name }, m_count, elapsed } ); - return false; - } - -} // end namespace Catch -// end catch_benchmark.cpp -// start catch_capture_matchers.cpp - -namespace Catch { - - using StringMatcher = Matchers::Impl::MatcherBase; - - // This is the general overload that takes a any string matcher - // There is another overload, in catch_assertionhandler.h/.cpp, that only takes a string and infers - // the Equals matcher (so the header does not mention matchers) - void handleExceptionMatchExpr( AssertionHandler& handler, StringMatcher const& matcher, StringRef matcherString ) { - std::string exceptionMessage = Catch::translateActiveException(); - MatchExpr expr( exceptionMessage, matcher, matcherString ); - handler.handleExpr( expr ); - } - -} // namespace Catch -// end catch_capture_matchers.cpp -// start catch_commandline.cpp - -// start catch_commandline.h - -// start catch_clara.h - -// Use Catch's value for console width (store Clara's off to the side, if present) -#ifdef CLARA_CONFIG_CONSOLE_WIDTH -#define CATCH_TEMP_CLARA_CONFIG_CONSOLE_WIDTH CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH -#undef CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH -#endif -#define CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH CATCH_CONFIG_CONSOLE_WIDTH-1 - -#ifdef __clang__ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wweak-vtables" -#pragma clang diagnostic ignored "-Wexit-time-destructors" -#pragma clang diagnostic ignored "-Wshadow" -#endif - -// start clara.hpp -// Copyright 2017 Two Blue Cubes Ltd. All rights reserved. -// -// Distributed under the Boost Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -// -// See https://github.com/philsquared/Clara for more details - -// Clara v1.1.4 - - -#ifndef CATCH_CLARA_CONFIG_CONSOLE_WIDTH -#define CATCH_CLARA_CONFIG_CONSOLE_WIDTH 80 -#endif - -#ifndef CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH -#define CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH CATCH_CLARA_CONFIG_CONSOLE_WIDTH -#endif - -#ifndef CLARA_CONFIG_OPTIONAL_TYPE -#ifdef __has_include -#if __has_include() && __cplusplus >= 201703L -#include -#define CLARA_CONFIG_OPTIONAL_TYPE std::optional -#endif -#endif -#endif - -// ----------- #included from clara_textflow.hpp ----------- - -// TextFlowCpp -// -// A single-header library for wrapping and laying out basic text, by Phil Nash -// -// This work is licensed under the BSD 2-Clause license. -// See the accompanying LICENSE file, or the one at https://opensource.org/licenses/BSD-2-Clause -// -// This project is hosted at https://github.com/philsquared/textflowcpp - - -#include -#include -#include -#include - -#ifndef CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH -#define CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH 80 -#endif - -namespace Catch { namespace clara { namespace TextFlow { - - inline auto isWhitespace( char c ) -> bool { - static std::string chars = " \t\n\r"; - return chars.find( c ) != std::string::npos; - } - inline auto isBreakableBefore( char c ) -> bool { - static std::string chars = "[({<|"; - return chars.find( c ) != std::string::npos; - } - inline auto isBreakableAfter( char c ) -> bool { - static std::string chars = "])}>.,:;*+-=&/\\"; - return chars.find( c ) != std::string::npos; - } - - class Columns; - - class Column { - std::vector m_strings; - size_t m_width = CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH; - size_t m_indent = 0; - size_t m_initialIndent = std::string::npos; - - public: - class iterator { - friend Column; - - Column const& m_column; - size_t m_stringIndex = 0; - size_t m_pos = 0; - - size_t m_len = 0; - size_t m_end = 0; - bool m_suffix = false; - - iterator( Column const& column, size_t stringIndex ) - : m_column( column ), - m_stringIndex( stringIndex ) - {} - - auto line() const -> std::string const& { return m_column.m_strings[m_stringIndex]; } - - auto isBoundary( size_t at ) const -> bool { - assert( at > 0 ); - assert( at <= line().size() ); - - return at == line().size() || - ( isWhitespace( line()[at] ) && !isWhitespace( line()[at-1] ) ) || - isBreakableBefore( line()[at] ) || - isBreakableAfter( line()[at-1] ); - } - - void calcLength() { - assert( m_stringIndex < m_column.m_strings.size() ); - - m_suffix = false; - auto width = m_column.m_width-indent(); - m_end = m_pos; - while( m_end < line().size() && line()[m_end] != '\n' ) - ++m_end; - - if( m_end < m_pos + width ) { - m_len = m_end - m_pos; - } - else { - size_t len = width; - while (len > 0 && !isBoundary(m_pos + len)) - --len; - while (len > 0 && isWhitespace( line()[m_pos + len - 1] )) - --len; - - if (len > 0) { - m_len = len; - } else { - m_suffix = true; - m_len = width - 1; - } - } - } - - auto indent() const -> size_t { - auto initial = m_pos == 0 && m_stringIndex == 0 ? m_column.m_initialIndent : std::string::npos; - return initial == std::string::npos ? m_column.m_indent : initial; - } - - auto addIndentAndSuffix(std::string const &plain) const -> std::string { - return std::string( indent(), ' ' ) + (m_suffix ? plain + "-" : plain); - } - - public: - explicit iterator( Column const& column ) : m_column( column ) { - assert( m_column.m_width > m_column.m_indent ); - assert( m_column.m_initialIndent == std::string::npos || m_column.m_width > m_column.m_initialIndent ); - calcLength(); - if( m_len == 0 ) - m_stringIndex++; // Empty string - } - - auto operator *() const -> std::string { - assert( m_stringIndex < m_column.m_strings.size() ); - assert( m_pos <= m_end ); - if( m_pos + m_column.m_width < m_end ) - return addIndentAndSuffix(line().substr(m_pos, m_len)); - else - return addIndentAndSuffix(line().substr(m_pos, m_end - m_pos)); - } - - auto operator ++() -> iterator& { - m_pos += m_len; - if( m_pos < line().size() && line()[m_pos] == '\n' ) - m_pos += 1; - else - while( m_pos < line().size() && isWhitespace( line()[m_pos] ) ) - ++m_pos; - - if( m_pos == line().size() ) { - m_pos = 0; - ++m_stringIndex; - } - if( m_stringIndex < m_column.m_strings.size() ) - calcLength(); - return *this; - } - auto operator ++(int) -> iterator { - iterator prev( *this ); - operator++(); - return prev; - } - - auto operator ==( iterator const& other ) const -> bool { - return - m_pos == other.m_pos && - m_stringIndex == other.m_stringIndex && - &m_column == &other.m_column; - } - auto operator !=( iterator const& other ) const -> bool { - return !operator==( other ); - } - }; - using const_iterator = iterator; - - explicit Column( std::string const& text ) { m_strings.push_back( text ); } - - auto width( size_t newWidth ) -> Column& { - assert( newWidth > 0 ); - m_width = newWidth; - return *this; - } - auto indent( size_t newIndent ) -> Column& { - m_indent = newIndent; - return *this; - } - auto initialIndent( size_t newIndent ) -> Column& { - m_initialIndent = newIndent; - return *this; - } - - auto width() const -> size_t { return m_width; } - auto begin() const -> iterator { return iterator( *this ); } - auto end() const -> iterator { return { *this, m_strings.size() }; } - - inline friend std::ostream& operator << ( std::ostream& os, Column const& col ) { - bool first = true; - for( auto line : col ) { - if( first ) - first = false; - else - os << "\n"; - os << line; - } - return os; - } - - auto operator + ( Column const& other ) -> Columns; - - auto toString() const -> std::string { - std::ostringstream oss; - oss << *this; - return oss.str(); - } - }; - - class Spacer : public Column { - - public: - explicit Spacer( size_t spaceWidth ) : Column( "" ) { - width( spaceWidth ); - } - }; - - class Columns { - std::vector m_columns; - - public: - - class iterator { - friend Columns; - struct EndTag {}; - - std::vector const& m_columns; - std::vector m_iterators; - size_t m_activeIterators; - - iterator( Columns const& columns, EndTag ) - : m_columns( columns.m_columns ), - m_activeIterators( 0 ) - { - m_iterators.reserve( m_columns.size() ); - - for( auto const& col : m_columns ) - m_iterators.push_back( col.end() ); - } - - public: - explicit iterator( Columns const& columns ) - : m_columns( columns.m_columns ), - m_activeIterators( m_columns.size() ) - { - m_iterators.reserve( m_columns.size() ); - - for( auto const& col : m_columns ) - m_iterators.push_back( col.begin() ); - } - - auto operator ==( iterator const& other ) const -> bool { - return m_iterators == other.m_iterators; - } - auto operator !=( iterator const& other ) const -> bool { - return m_iterators != other.m_iterators; - } - auto operator *() const -> std::string { - std::string row, padding; - - for( size_t i = 0; i < m_columns.size(); ++i ) { - auto width = m_columns[i].width(); - if( m_iterators[i] != m_columns[i].end() ) { - std::string col = *m_iterators[i]; - row += padding + col; - if( col.size() < width ) - padding = std::string( width - col.size(), ' ' ); - else - padding = ""; - } - else { - padding += std::string( width, ' ' ); - } - } - return row; - } - auto operator ++() -> iterator& { - for( size_t i = 0; i < m_columns.size(); ++i ) { - if (m_iterators[i] != m_columns[i].end()) - ++m_iterators[i]; - } - return *this; - } - auto operator ++(int) -> iterator { - iterator prev( *this ); - operator++(); - return prev; - } - }; - using const_iterator = iterator; - - auto begin() const -> iterator { return iterator( *this ); } - auto end() const -> iterator { return { *this, iterator::EndTag() }; } - - auto operator += ( Column const& col ) -> Columns& { - m_columns.push_back( col ); - return *this; - } - auto operator + ( Column const& col ) -> Columns { - Columns combined = *this; - combined += col; - return combined; - } - - inline friend std::ostream& operator << ( std::ostream& os, Columns const& cols ) { - - bool first = true; - for( auto line : cols ) { - if( first ) - first = false; - else - os << "\n"; - os << line; - } - return os; - } - - auto toString() const -> std::string { - std::ostringstream oss; - oss << *this; - return oss.str(); - } - }; - - inline auto Column::operator + ( Column const& other ) -> Columns { - Columns cols; - cols += *this; - cols += other; - return cols; - } -}}} // namespace Catch::clara::TextFlow - -// ----------- end of #include from clara_textflow.hpp ----------- -// ........... back in clara.hpp - -#include -#include -#include - -#if !defined(CATCH_PLATFORM_WINDOWS) && ( defined(WIN32) || defined(__WIN32__) || defined(_WIN32) || defined(_MSC_VER) ) -#define CATCH_PLATFORM_WINDOWS -#endif - -namespace Catch { namespace clara { -namespace detail { - - // Traits for extracting arg and return type of lambdas (for single argument lambdas) - template - struct UnaryLambdaTraits : UnaryLambdaTraits {}; - - template - struct UnaryLambdaTraits { - static const bool isValid = false; - }; - - template - struct UnaryLambdaTraits { - static const bool isValid = true; - using ArgType = typename std::remove_const::type>::type; - using ReturnType = ReturnT; - }; - - class TokenStream; - - // Transport for raw args (copied from main args, or supplied via init list for testing) - class Args { - friend TokenStream; - std::string m_exeName; - std::vector m_args; - - public: - Args( int argc, char const* const* argv ) - : m_exeName(argv[0]), - m_args(argv + 1, argv + argc) {} - - Args( std::initializer_list args ) - : m_exeName( *args.begin() ), - m_args( args.begin()+1, args.end() ) - {} - - auto exeName() const -> std::string { - return m_exeName; - } - }; - - // Wraps a token coming from a token stream. These may not directly correspond to strings as a single string - // may encode an option + its argument if the : or = form is used - enum class TokenType { - Option, Argument - }; - struct Token { - TokenType type; - std::string token; - }; - - inline auto isOptPrefix( char c ) -> bool { - return c == '-' -#ifdef CATCH_PLATFORM_WINDOWS - || c == '/' -#endif - ; - } - - // Abstracts iterators into args as a stream of tokens, with option arguments uniformly handled - class TokenStream { - using Iterator = std::vector::const_iterator; - Iterator it; - Iterator itEnd; - std::vector m_tokenBuffer; - - void loadBuffer() { - m_tokenBuffer.resize( 0 ); - - // Skip any empty strings - while( it != itEnd && it->empty() ) - ++it; - - if( it != itEnd ) { - auto const &next = *it; - if( isOptPrefix( next[0] ) ) { - auto delimiterPos = next.find_first_of( " :=" ); - if( delimiterPos != std::string::npos ) { - m_tokenBuffer.push_back( { TokenType::Option, next.substr( 0, delimiterPos ) } ); - m_tokenBuffer.push_back( { TokenType::Argument, next.substr( delimiterPos + 1 ) } ); - } else { - if( next[1] != '-' && next.size() > 2 ) { - std::string opt = "- "; - for( size_t i = 1; i < next.size(); ++i ) { - opt[1] = next[i]; - m_tokenBuffer.push_back( { TokenType::Option, opt } ); - } - } else { - m_tokenBuffer.push_back( { TokenType::Option, next } ); - } - } - } else { - m_tokenBuffer.push_back( { TokenType::Argument, next } ); - } - } - } - - public: - explicit TokenStream( Args const &args ) : TokenStream( args.m_args.begin(), args.m_args.end() ) {} - - TokenStream( Iterator it, Iterator itEnd ) : it( it ), itEnd( itEnd ) { - loadBuffer(); - } - - explicit operator bool() const { - return !m_tokenBuffer.empty() || it != itEnd; - } - - auto count() const -> size_t { return m_tokenBuffer.size() + (itEnd - it); } - - auto operator*() const -> Token { - assert( !m_tokenBuffer.empty() ); - return m_tokenBuffer.front(); - } - - auto operator->() const -> Token const * { - assert( !m_tokenBuffer.empty() ); - return &m_tokenBuffer.front(); - } - - auto operator++() -> TokenStream & { - if( m_tokenBuffer.size() >= 2 ) { - m_tokenBuffer.erase( m_tokenBuffer.begin() ); - } else { - if( it != itEnd ) - ++it; - loadBuffer(); - } - return *this; - } - }; - - class ResultBase { - public: - enum Type { - Ok, LogicError, RuntimeError - }; - - protected: - ResultBase( Type type ) : m_type( type ) {} - virtual ~ResultBase() = default; - - virtual void enforceOk() const = 0; - - Type m_type; - }; - - template - class ResultValueBase : public ResultBase { - public: - auto value() const -> T const & { - enforceOk(); - return m_value; - } - - protected: - ResultValueBase( Type type ) : ResultBase( type ) {} - - ResultValueBase( ResultValueBase const &other ) : ResultBase( other ) { - if( m_type == ResultBase::Ok ) - new( &m_value ) T( other.m_value ); - } - - ResultValueBase( Type, T const &value ) : ResultBase( Ok ) { - new( &m_value ) T( value ); - } - - auto operator=( ResultValueBase const &other ) -> ResultValueBase & { - if( m_type == ResultBase::Ok ) - m_value.~T(); - ResultBase::operator=(other); - if( m_type == ResultBase::Ok ) - new( &m_value ) T( other.m_value ); - return *this; - } - - ~ResultValueBase() override { - if( m_type == Ok ) - m_value.~T(); - } - - union { - T m_value; - }; - }; - - template<> - class ResultValueBase : public ResultBase { - protected: - using ResultBase::ResultBase; - }; - - template - class BasicResult : public ResultValueBase { - public: - template - explicit BasicResult( BasicResult const &other ) - : ResultValueBase( other.type() ), - m_errorMessage( other.errorMessage() ) - { - assert( type() != ResultBase::Ok ); - } - - template - static auto ok( U const &value ) -> BasicResult { return { ResultBase::Ok, value }; } - static auto ok() -> BasicResult { return { ResultBase::Ok }; } - static auto logicError( std::string const &message ) -> BasicResult { return { ResultBase::LogicError, message }; } - static auto runtimeError( std::string const &message ) -> BasicResult { return { ResultBase::RuntimeError, message }; } - - explicit operator bool() const { return m_type == ResultBase::Ok; } - auto type() const -> ResultBase::Type { return m_type; } - auto errorMessage() const -> std::string { return m_errorMessage; } - - protected: - void enforceOk() const override { - - // Errors shouldn't reach this point, but if they do - // the actual error message will be in m_errorMessage - assert( m_type != ResultBase::LogicError ); - assert( m_type != ResultBase::RuntimeError ); - if( m_type != ResultBase::Ok ) - std::abort(); - } - - std::string m_errorMessage; // Only populated if resultType is an error - - BasicResult( ResultBase::Type type, std::string const &message ) - : ResultValueBase(type), - m_errorMessage(message) - { - assert( m_type != ResultBase::Ok ); - } - - using ResultValueBase::ResultValueBase; - using ResultBase::m_type; - }; - - enum class ParseResultType { - Matched, NoMatch, ShortCircuitAll, ShortCircuitSame - }; - - class ParseState { - public: - - ParseState( ParseResultType type, TokenStream const &remainingTokens ) - : m_type(type), - m_remainingTokens( remainingTokens ) - {} - - auto type() const -> ParseResultType { return m_type; } - auto remainingTokens() const -> TokenStream { return m_remainingTokens; } - - private: - ParseResultType m_type; - TokenStream m_remainingTokens; - }; - - using Result = BasicResult; - using ParserResult = BasicResult; - using InternalParseResult = BasicResult; - - struct HelpColumns { - std::string left; - std::string right; - }; - - template - inline auto convertInto( std::string const &source, T& target ) -> ParserResult { - std::stringstream ss; - ss << source; - ss >> target; - if( ss.fail() ) - return ParserResult::runtimeError( "Unable to convert '" + source + "' to destination type" ); - else - return ParserResult::ok( ParseResultType::Matched ); - } - inline auto convertInto( std::string const &source, std::string& target ) -> ParserResult { - target = source; - return ParserResult::ok( ParseResultType::Matched ); - } - inline auto convertInto( std::string const &source, bool &target ) -> ParserResult { - std::string srcLC = source; - std::transform( srcLC.begin(), srcLC.end(), srcLC.begin(), []( char c ) { return static_cast( ::tolower(c) ); } ); - if (srcLC == "y" || srcLC == "1" || srcLC == "true" || srcLC == "yes" || srcLC == "on") - target = true; - else if (srcLC == "n" || srcLC == "0" || srcLC == "false" || srcLC == "no" || srcLC == "off") - target = false; - else - return ParserResult::runtimeError( "Expected a boolean value but did not recognise: '" + source + "'" ); - return ParserResult::ok( ParseResultType::Matched ); - } -#ifdef CLARA_CONFIG_OPTIONAL_TYPE - template - inline auto convertInto( std::string const &source, CLARA_CONFIG_OPTIONAL_TYPE& target ) -> ParserResult { - T temp; - auto result = convertInto( source, temp ); - if( result ) - target = std::move(temp); - return result; - } -#endif // CLARA_CONFIG_OPTIONAL_TYPE - - struct NonCopyable { - NonCopyable() = default; - NonCopyable( NonCopyable const & ) = delete; - NonCopyable( NonCopyable && ) = delete; - NonCopyable &operator=( NonCopyable const & ) = delete; - NonCopyable &operator=( NonCopyable && ) = delete; - }; - - struct BoundRef : NonCopyable { - virtual ~BoundRef() = default; - virtual auto isContainer() const -> bool { return false; } - virtual auto isFlag() const -> bool { return false; } - }; - struct BoundValueRefBase : BoundRef { - virtual auto setValue( std::string const &arg ) -> ParserResult = 0; - }; - struct BoundFlagRefBase : BoundRef { - virtual auto setFlag( bool flag ) -> ParserResult = 0; - virtual auto isFlag() const -> bool { return true; } - }; - - template - struct BoundValueRef : BoundValueRefBase { - T &m_ref; - - explicit BoundValueRef( T &ref ) : m_ref( ref ) {} - - auto setValue( std::string const &arg ) -> ParserResult override { - return convertInto( arg, m_ref ); - } - }; - - template - struct BoundValueRef> : BoundValueRefBase { - std::vector &m_ref; - - explicit BoundValueRef( std::vector &ref ) : m_ref( ref ) {} - - auto isContainer() const -> bool override { return true; } - - auto setValue( std::string const &arg ) -> ParserResult override { - T temp; - auto result = convertInto( arg, temp ); - if( result ) - m_ref.push_back( temp ); - return result; - } - }; - - struct BoundFlagRef : BoundFlagRefBase { - bool &m_ref; - - explicit BoundFlagRef( bool &ref ) : m_ref( ref ) {} - - auto setFlag( bool flag ) -> ParserResult override { - m_ref = flag; - return ParserResult::ok( ParseResultType::Matched ); - } - }; - - template - struct LambdaInvoker { - static_assert( std::is_same::value, "Lambda must return void or clara::ParserResult" ); - - template - static auto invoke( L const &lambda, ArgType const &arg ) -> ParserResult { - return lambda( arg ); - } - }; - - template<> - struct LambdaInvoker { - template - static auto invoke( L const &lambda, ArgType const &arg ) -> ParserResult { - lambda( arg ); - return ParserResult::ok( ParseResultType::Matched ); - } - }; - - template - inline auto invokeLambda( L const &lambda, std::string const &arg ) -> ParserResult { - ArgType temp{}; - auto result = convertInto( arg, temp ); - return !result - ? result - : LambdaInvoker::ReturnType>::invoke( lambda, temp ); - } - - template - struct BoundLambda : BoundValueRefBase { - L m_lambda; - - static_assert( UnaryLambdaTraits::isValid, "Supplied lambda must take exactly one argument" ); - explicit BoundLambda( L const &lambda ) : m_lambda( lambda ) {} - - auto setValue( std::string const &arg ) -> ParserResult override { - return invokeLambda::ArgType>( m_lambda, arg ); - } - }; - - template - struct BoundFlagLambda : BoundFlagRefBase { - L m_lambda; - - static_assert( UnaryLambdaTraits::isValid, "Supplied lambda must take exactly one argument" ); - static_assert( std::is_same::ArgType, bool>::value, "flags must be boolean" ); - - explicit BoundFlagLambda( L const &lambda ) : m_lambda( lambda ) {} - - auto setFlag( bool flag ) -> ParserResult override { - return LambdaInvoker::ReturnType>::invoke( m_lambda, flag ); - } - }; - - enum class Optionality { Optional, Required }; - - struct Parser; - - class ParserBase { - public: - virtual ~ParserBase() = default; - virtual auto validate() const -> Result { return Result::ok(); } - virtual auto parse( std::string const& exeName, TokenStream const &tokens) const -> InternalParseResult = 0; - virtual auto cardinality() const -> size_t { return 1; } - - auto parse( Args const &args ) const -> InternalParseResult { - return parse( args.exeName(), TokenStream( args ) ); - } - }; - - template - class ComposableParserImpl : public ParserBase { - public: - template - auto operator|( T const &other ) const -> Parser; - - template - auto operator+( T const &other ) const -> Parser; - }; - - // Common code and state for Args and Opts - template - class ParserRefImpl : public ComposableParserImpl { - protected: - Optionality m_optionality = Optionality::Optional; - std::shared_ptr m_ref; - std::string m_hint; - std::string m_description; - - explicit ParserRefImpl( std::shared_ptr const &ref ) : m_ref( ref ) {} - - public: - template - ParserRefImpl( T &ref, std::string const &hint ) - : m_ref( std::make_shared>( ref ) ), - m_hint( hint ) - {} - - template - ParserRefImpl( LambdaT const &ref, std::string const &hint ) - : m_ref( std::make_shared>( ref ) ), - m_hint(hint) - {} - - auto operator()( std::string const &description ) -> DerivedT & { - m_description = description; - return static_cast( *this ); - } - - auto optional() -> DerivedT & { - m_optionality = Optionality::Optional; - return static_cast( *this ); - }; - - auto required() -> DerivedT & { - m_optionality = Optionality::Required; - return static_cast( *this ); - }; - - auto isOptional() const -> bool { - return m_optionality == Optionality::Optional; - } - - auto cardinality() const -> size_t override { - if( m_ref->isContainer() ) - return 0; - else - return 1; - } - - auto hint() const -> std::string { return m_hint; } - }; - - class ExeName : public ComposableParserImpl { - std::shared_ptr m_name; - std::shared_ptr m_ref; - - template - static auto makeRef(LambdaT const &lambda) -> std::shared_ptr { - return std::make_shared>( lambda) ; - } - - public: - ExeName() : m_name( std::make_shared( "" ) ) {} - - explicit ExeName( std::string &ref ) : ExeName() { - m_ref = std::make_shared>( ref ); - } - - template - explicit ExeName( LambdaT const& lambda ) : ExeName() { - m_ref = std::make_shared>( lambda ); - } - - // The exe name is not parsed out of the normal tokens, but is handled specially - auto parse( std::string const&, TokenStream const &tokens ) const -> InternalParseResult override { - return InternalParseResult::ok( ParseState( ParseResultType::NoMatch, tokens ) ); - } - - auto name() const -> std::string { return *m_name; } - auto set( std::string const& newName ) -> ParserResult { - - auto lastSlash = newName.find_last_of( "\\/" ); - auto filename = ( lastSlash == std::string::npos ) - ? newName - : newName.substr( lastSlash+1 ); - - *m_name = filename; - if( m_ref ) - return m_ref->setValue( filename ); - else - return ParserResult::ok( ParseResultType::Matched ); - } - }; - - class Arg : public ParserRefImpl { - public: - using ParserRefImpl::ParserRefImpl; - - auto parse( std::string const &, TokenStream const &tokens ) const -> InternalParseResult override { - auto validationResult = validate(); - if( !validationResult ) - return InternalParseResult( validationResult ); - - auto remainingTokens = tokens; - auto const &token = *remainingTokens; - if( token.type != TokenType::Argument ) - return InternalParseResult::ok( ParseState( ParseResultType::NoMatch, remainingTokens ) ); - - assert( !m_ref->isFlag() ); - auto valueRef = static_cast( m_ref.get() ); - - auto result = valueRef->setValue( remainingTokens->token ); - if( !result ) - return InternalParseResult( result ); - else - return InternalParseResult::ok( ParseState( ParseResultType::Matched, ++remainingTokens ) ); - } - }; - - inline auto normaliseOpt( std::string const &optName ) -> std::string { -#ifdef CATCH_PLATFORM_WINDOWS - if( optName[0] == '/' ) - return "-" + optName.substr( 1 ); - else -#endif - return optName; - } - - class Opt : public ParserRefImpl { - protected: - std::vector m_optNames; - - public: - template - explicit Opt( LambdaT const &ref ) : ParserRefImpl( std::make_shared>( ref ) ) {} - - explicit Opt( bool &ref ) : ParserRefImpl( std::make_shared( ref ) ) {} - - template - Opt( LambdaT const &ref, std::string const &hint ) : ParserRefImpl( ref, hint ) {} - - template - Opt( T &ref, std::string const &hint ) : ParserRefImpl( ref, hint ) {} - - auto operator[]( std::string const &optName ) -> Opt & { - m_optNames.push_back( optName ); - return *this; - } - - auto getHelpColumns() const -> std::vector { - std::ostringstream oss; - bool first = true; - for( auto const &opt : m_optNames ) { - if (first) - first = false; - else - oss << ", "; - oss << opt; - } - if( !m_hint.empty() ) - oss << " <" << m_hint << ">"; - return { { oss.str(), m_description } }; - } - - auto isMatch( std::string const &optToken ) const -> bool { - auto normalisedToken = normaliseOpt( optToken ); - for( auto const &name : m_optNames ) { - if( normaliseOpt( name ) == normalisedToken ) - return true; - } - return false; - } - - using ParserBase::parse; - - auto parse( std::string const&, TokenStream const &tokens ) const -> InternalParseResult override { - auto validationResult = validate(); - if( !validationResult ) - return InternalParseResult( validationResult ); - - auto remainingTokens = tokens; - if( remainingTokens && remainingTokens->type == TokenType::Option ) { - auto const &token = *remainingTokens; - if( isMatch(token.token ) ) { - if( m_ref->isFlag() ) { - auto flagRef = static_cast( m_ref.get() ); - auto result = flagRef->setFlag( true ); - if( !result ) - return InternalParseResult( result ); - if( result.value() == ParseResultType::ShortCircuitAll ) - return InternalParseResult::ok( ParseState( result.value(), remainingTokens ) ); - } else { - auto valueRef = static_cast( m_ref.get() ); - ++remainingTokens; - if( !remainingTokens ) - return InternalParseResult::runtimeError( "Expected argument following " + token.token ); - auto const &argToken = *remainingTokens; - if( argToken.type != TokenType::Argument ) - return InternalParseResult::runtimeError( "Expected argument following " + token.token ); - auto result = valueRef->setValue( argToken.token ); - if( !result ) - return InternalParseResult( result ); - if( result.value() == ParseResultType::ShortCircuitAll ) - return InternalParseResult::ok( ParseState( result.value(), remainingTokens ) ); - } - return InternalParseResult::ok( ParseState( ParseResultType::Matched, ++remainingTokens ) ); - } - } - return InternalParseResult::ok( ParseState( ParseResultType::NoMatch, remainingTokens ) ); - } - - auto validate() const -> Result override { - if( m_optNames.empty() ) - return Result::logicError( "No options supplied to Opt" ); - for( auto const &name : m_optNames ) { - if( name.empty() ) - return Result::logicError( "Option name cannot be empty" ); -#ifdef CATCH_PLATFORM_WINDOWS - if( name[0] != '-' && name[0] != '/' ) - return Result::logicError( "Option name must begin with '-' or '/'" ); -#else - if( name[0] != '-' ) - return Result::logicError( "Option name must begin with '-'" ); -#endif - } - return ParserRefImpl::validate(); - } - }; - - struct Help : Opt { - Help( bool &showHelpFlag ) - : Opt([&]( bool flag ) { - showHelpFlag = flag; - return ParserResult::ok( ParseResultType::ShortCircuitAll ); - }) - { - static_cast( *this ) - ("display usage information") - ["-?"]["-h"]["--help"] - .optional(); - } - }; - - struct Parser : ParserBase { - - mutable ExeName m_exeName; - std::vector m_options; - std::vector m_args; - - auto operator|=( ExeName const &exeName ) -> Parser & { - m_exeName = exeName; - return *this; - } - - auto operator|=( Arg const &arg ) -> Parser & { - m_args.push_back(arg); - return *this; - } - - auto operator|=( Opt const &opt ) -> Parser & { - m_options.push_back(opt); - return *this; - } - - auto operator|=( Parser const &other ) -> Parser & { - m_options.insert(m_options.end(), other.m_options.begin(), other.m_options.end()); - m_args.insert(m_args.end(), other.m_args.begin(), other.m_args.end()); - return *this; - } - - template - auto operator|( T const &other ) const -> Parser { - return Parser( *this ) |= other; - } - - // Forward deprecated interface with '+' instead of '|' - template - auto operator+=( T const &other ) -> Parser & { return operator|=( other ); } - template - auto operator+( T const &other ) const -> Parser { return operator|( other ); } - - auto getHelpColumns() const -> std::vector { - std::vector cols; - for (auto const &o : m_options) { - auto childCols = o.getHelpColumns(); - cols.insert( cols.end(), childCols.begin(), childCols.end() ); - } - return cols; - } - - void writeToStream( std::ostream &os ) const { - if (!m_exeName.name().empty()) { - os << "usage:\n" << " " << m_exeName.name() << " "; - bool required = true, first = true; - for( auto const &arg : m_args ) { - if (first) - first = false; - else - os << " "; - if( arg.isOptional() && required ) { - os << "["; - required = false; - } - os << "<" << arg.hint() << ">"; - if( arg.cardinality() == 0 ) - os << " ... "; - } - if( !required ) - os << "]"; - if( !m_options.empty() ) - os << " options"; - os << "\n\nwhere options are:" << std::endl; - } - - auto rows = getHelpColumns(); - size_t consoleWidth = CATCH_CLARA_CONFIG_CONSOLE_WIDTH; - size_t optWidth = 0; - for( auto const &cols : rows ) - optWidth = (std::max)(optWidth, cols.left.size() + 2); - - optWidth = (std::min)(optWidth, consoleWidth/2); - - for( auto const &cols : rows ) { - auto row = - TextFlow::Column( cols.left ).width( optWidth ).indent( 2 ) + - TextFlow::Spacer(4) + - TextFlow::Column( cols.right ).width( consoleWidth - 7 - optWidth ); - os << row << std::endl; - } - } - - friend auto operator<<( std::ostream &os, Parser const &parser ) -> std::ostream& { - parser.writeToStream( os ); - return os; - } - - auto validate() const -> Result override { - for( auto const &opt : m_options ) { - auto result = opt.validate(); - if( !result ) - return result; - } - for( auto const &arg : m_args ) { - auto result = arg.validate(); - if( !result ) - return result; - } - return Result::ok(); - } - - using ParserBase::parse; - - auto parse( std::string const& exeName, TokenStream const &tokens ) const -> InternalParseResult override { - - struct ParserInfo { - ParserBase const* parser = nullptr; - size_t count = 0; - }; - const size_t totalParsers = m_options.size() + m_args.size(); - assert( totalParsers < 512 ); - // ParserInfo parseInfos[totalParsers]; // <-- this is what we really want to do - ParserInfo parseInfos[512]; - - { - size_t i = 0; - for (auto const &opt : m_options) parseInfos[i++].parser = &opt; - for (auto const &arg : m_args) parseInfos[i++].parser = &arg; - } - - m_exeName.set( exeName ); - - auto result = InternalParseResult::ok( ParseState( ParseResultType::NoMatch, tokens ) ); - while( result.value().remainingTokens() ) { - bool tokenParsed = false; - - for( size_t i = 0; i < totalParsers; ++i ) { - auto& parseInfo = parseInfos[i]; - if( parseInfo.parser->cardinality() == 0 || parseInfo.count < parseInfo.parser->cardinality() ) { - result = parseInfo.parser->parse(exeName, result.value().remainingTokens()); - if (!result) - return result; - if (result.value().type() != ParseResultType::NoMatch) { - tokenParsed = true; - ++parseInfo.count; - break; - } - } - } - - if( result.value().type() == ParseResultType::ShortCircuitAll ) - return result; - if( !tokenParsed ) - return InternalParseResult::runtimeError( "Unrecognised token: " + result.value().remainingTokens()->token ); - } - // !TBD Check missing required options - return result; - } - }; - - template - template - auto ComposableParserImpl::operator|( T const &other ) const -> Parser { - return Parser() | static_cast( *this ) | other; - } -} // namespace detail - -// A Combined parser -using detail::Parser; - -// A parser for options -using detail::Opt; - -// A parser for arguments -using detail::Arg; - -// Wrapper for argc, argv from main() -using detail::Args; - -// Specifies the name of the executable -using detail::ExeName; - -// Convenience wrapper for option parser that specifies the help option -using detail::Help; - -// enum of result types from a parse -using detail::ParseResultType; - -// Result type for parser operation -using detail::ParserResult; - -}} // namespace Catch::clara - -// end clara.hpp -#ifdef __clang__ -#pragma clang diagnostic pop -#endif - -// Restore Clara's value for console width, if present -#ifdef CATCH_TEMP_CLARA_CONFIG_CONSOLE_WIDTH -#define CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH CATCH_TEMP_CLARA_CONFIG_CONSOLE_WIDTH -#undef CATCH_TEMP_CLARA_CONFIG_CONSOLE_WIDTH -#endif - -// end catch_clara.h -namespace Catch { - - clara::Parser makeCommandLineParser( ConfigData& config ); - -} // end namespace Catch - -// end catch_commandline.h -#include -#include - -namespace Catch { - - clara::Parser makeCommandLineParser( ConfigData& config ) { - - using namespace clara; - - auto const setWarning = [&]( std::string const& warning ) { - auto warningSet = [&]() { - if( warning == "NoAssertions" ) - return WarnAbout::NoAssertions; - - if ( warning == "NoTests" ) - return WarnAbout::NoTests; - - return WarnAbout::Nothing; - }(); - - if (warningSet == WarnAbout::Nothing) - return ParserResult::runtimeError( "Unrecognised warning: '" + warning + "'" ); - config.warnings = static_cast( config.warnings | warningSet ); - return ParserResult::ok( ParseResultType::Matched ); - }; - auto const loadTestNamesFromFile = [&]( std::string const& filename ) { - std::ifstream f( filename.c_str() ); - if( !f.is_open() ) - return ParserResult::runtimeError( "Unable to load input file: '" + filename + "'" ); - - std::string line; - while( std::getline( f, line ) ) { - line = trim(line); - if( !line.empty() && !startsWith( line, '#' ) ) { - if( !startsWith( line, '"' ) ) - line = '"' + line + '"'; - config.testsOrTags.push_back( line + ',' ); - } - } - return ParserResult::ok( ParseResultType::Matched ); - }; - auto const setTestOrder = [&]( 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 - return clara::ParserResult::runtimeError( "Unrecognised ordering: '" + order + "'" ); - return ParserResult::ok( ParseResultType::Matched ); - }; - auto const setRngSeed = [&]( std::string const& seed ) { - if( seed != "time" ) - return clara::detail::convertInto( seed, config.rngSeed ); - config.rngSeed = static_cast( std::time(nullptr) ); - return ParserResult::ok( ParseResultType::Matched ); - }; - auto const setColourUsage = [&]( std::string const& useColour ) { - auto mode = toLower( useColour ); - - if( mode == "yes" ) - config.useColour = UseColour::Yes; - else if( mode == "no" ) - config.useColour = UseColour::No; - else if( mode == "auto" ) - config.useColour = UseColour::Auto; - else - return ParserResult::runtimeError( "colour mode must be one of: auto, yes or no. '" + useColour + "' not recognised" ); - return ParserResult::ok( ParseResultType::Matched ); - }; - auto const setWaitForKeypress = [&]( std::string const& keypress ) { - auto keypressLc = toLower( keypress ); - if( keypressLc == "start" ) - config.waitForKeypress = WaitForKeypress::BeforeStart; - else if( keypressLc == "exit" ) - config.waitForKeypress = WaitForKeypress::BeforeExit; - else if( keypressLc == "both" ) - config.waitForKeypress = WaitForKeypress::BeforeStartAndExit; - else - return ParserResult::runtimeError( "keypress argument must be one of: start, exit or both. '" + keypress + "' not recognised" ); - return ParserResult::ok( ParseResultType::Matched ); - }; - auto const setVerbosity = [&]( std::string const& verbosity ) { - auto lcVerbosity = toLower( verbosity ); - if( lcVerbosity == "quiet" ) - config.verbosity = Verbosity::Quiet; - else if( lcVerbosity == "normal" ) - config.verbosity = Verbosity::Normal; - else if( lcVerbosity == "high" ) - config.verbosity = Verbosity::High; - else - return ParserResult::runtimeError( "Unrecognised verbosity, '" + verbosity + "'" ); - return ParserResult::ok( ParseResultType::Matched ); - }; - - auto cli - = ExeName( config.processName ) - | Help( config.showHelp ) - | Opt( config.listTests ) - ["-l"]["--list-tests"] - ( "list all/matching test cases" ) - | Opt( config.listTags ) - ["-t"]["--list-tags"] - ( "list all/matching tags" ) - | Opt( config.showSuccessfulTests ) - ["-s"]["--success"] - ( "include successful tests in output" ) - | Opt( config.shouldDebugBreak ) - ["-b"]["--break"] - ( "break into debugger on failure" ) - | Opt( config.noThrow ) - ["-e"]["--nothrow"] - ( "skip exception tests" ) - | Opt( config.showInvisibles ) - ["-i"]["--invisibles"] - ( "show invisibles (tabs, newlines)" ) - | Opt( config.outputFilename, "filename" ) - ["-o"]["--out"] - ( "output filename" ) - | Opt( config.reporterName, "name" ) - ["-r"]["--reporter"] - ( "reporter to use (defaults to console)" ) - | Opt( config.name, "name" ) - ["-n"]["--name"] - ( "suite name" ) - | Opt( [&]( bool ){ config.abortAfter = 1; } ) - ["-a"]["--abort"] - ( "abort at first failure" ) - | Opt( [&]( int x ){ config.abortAfter = x; }, "no. failures" ) - ["-x"]["--abortx"] - ( "abort after x failures" ) - | Opt( setWarning, "warning name" ) - ["-w"]["--warn"] - ( "enable warnings" ) - | Opt( [&]( bool flag ) { config.showDurations = flag ? ShowDurations::Always : ShowDurations::Never; }, "yes|no" ) - ["-d"]["--durations"] - ( "show test durations" ) - | Opt( loadTestNamesFromFile, "filename" ) - ["-f"]["--input-file"] - ( "load test names to run from a file" ) - | Opt( config.filenamesAsTags ) - ["-#"]["--filenames-as-tags"] - ( "adds a tag for the filename" ) - | Opt( config.sectionsToRun, "section name" ) - ["-c"]["--section"] - ( "specify section to run" ) - | Opt( setVerbosity, "quiet|normal|high" ) - ["-v"]["--verbosity"] - ( "set output verbosity" ) - | Opt( config.listTestNamesOnly ) - ["--list-test-names-only"] - ( "list all/matching test cases names only" ) - | Opt( config.listReporters ) - ["--list-reporters"] - ( "list all reporters" ) - | Opt( setTestOrder, "decl|lex|rand" ) - ["--order"] - ( "test case order (defaults to decl)" ) - | Opt( setRngSeed, "'time'|number" ) - ["--rng-seed"] - ( "set a specific seed for random numbers" ) - | Opt( setColourUsage, "yes|no" ) - ["--use-colour"] - ( "should output be colourised" ) - | Opt( config.libIdentify ) - ["--libidentify"] - ( "report name and version according to libidentify standard" ) - | Opt( setWaitForKeypress, "start|exit|both" ) - ["--wait-for-keypress"] - ( "waits for a keypress before exiting" ) - | Opt( config.benchmarkResolutionMultiple, "multiplier" ) - ["--benchmark-resolution-multiple"] - ( "multiple of clock resolution to run benchmarks" ) - - | Arg( config.testsOrTags, "test name|pattern|tags" ) - ( "which test or tests to use" ); - - return cli; - } - -} // end namespace Catch -// end catch_commandline.cpp -// start catch_common.cpp - -#include -#include - -namespace Catch { - - bool SourceLineInfo::empty() const noexcept { - return file[0] == '\0'; - } - bool SourceLineInfo::operator == ( SourceLineInfo const& other ) const noexcept { - return line == other.line && (file == other.file || std::strcmp(file, other.file) == 0); - } - bool SourceLineInfo::operator < ( SourceLineInfo const& other ) const noexcept { - return line < other.line || ( line == other.line && (std::strcmp(file, other.file) < 0)); - } - - std::ostream& operator << ( std::ostream& os, SourceLineInfo const& info ) { -#ifndef __GNUG__ - os << info.file << '(' << info.line << ')'; -#else - os << info.file << ':' << info.line; -#endif - return os; - } - - std::string StreamEndStop::operator+() const { - return std::string(); - } - - NonCopyable::NonCopyable() = default; - NonCopyable::~NonCopyable() = default; - -} -// end catch_common.cpp -// start catch_config.cpp - -// start catch_enforce.h - -#include - -#define CATCH_PREPARE_EXCEPTION( type, msg ) \ - type( ( Catch::ReusableStringStream() << msg ).str() ) -#define CATCH_INTERNAL_ERROR( msg ) \ - throw CATCH_PREPARE_EXCEPTION( std::logic_error, CATCH_INTERNAL_LINEINFO << ": Internal Catch error: " << msg); -#define CATCH_ERROR( msg ) \ - throw CATCH_PREPARE_EXCEPTION( std::domain_error, msg ) -#define CATCH_ENFORCE( condition, msg ) \ - do{ if( !(condition) ) CATCH_ERROR( msg ); } while(false) - -// end catch_enforce.h -namespace Catch { - - Config::Config( ConfigData const& data ) - : m_data( data ), - m_stream( openStream() ) - { - TestSpecParser parser(ITagAliasRegistry::get()); - if (data.testsOrTags.empty()) { - parser.parse("~[.]"); // All not hidden tests - } - else { - m_hasTestFilters = true; - for( auto const& testOrTags : data.testsOrTags ) - parser.parse( testOrTags ); - } - m_testSpec = parser.testSpec(); - } - - std::string const& Config::getFilename() const { - return m_data.outputFilename ; - } - - bool Config::listTests() const { return m_data.listTests; } - bool Config::listTestNamesOnly() const { return m_data.listTestNamesOnly; } - bool Config::listTags() const { return m_data.listTags; } - bool Config::listReporters() const { return m_data.listReporters; } - - std::string Config::getProcessName() const { return m_data.processName; } - std::string const& Config::getReporterName() const { return m_data.reporterName; } - - std::vector const& Config::getTestsOrTags() const { return m_data.testsOrTags; } - std::vector const& Config::getSectionsToRun() const { return m_data.sectionsToRun; } - - TestSpec const& Config::testSpec() const { return m_testSpec; } - bool Config::hasTestFilters() const { return m_hasTestFilters; } - - bool Config::showHelp() const { return m_data.showHelp; } - - // IConfig interface - bool Config::allowThrows() const { return !m_data.noThrow; } - std::ostream& Config::stream() const { return m_stream->stream(); } - std::string Config::name() const { return m_data.name.empty() ? m_data.processName : m_data.name; } - bool Config::includeSuccessfulResults() const { return m_data.showSuccessfulTests; } - bool Config::warnAboutMissingAssertions() const { return !!(m_data.warnings & WarnAbout::NoAssertions); } - bool Config::warnAboutNoTests() const { return !!(m_data.warnings & WarnAbout::NoTests); } - ShowDurations::OrNot Config::showDurations() const { return m_data.showDurations; } - RunTests::InWhatOrder Config::runOrder() const { return m_data.runOrder; } - unsigned int Config::rngSeed() const { return m_data.rngSeed; } - int Config::benchmarkResolutionMultiple() const { return m_data.benchmarkResolutionMultiple; } - UseColour::YesOrNo Config::useColour() const { return m_data.useColour; } - bool Config::shouldDebugBreak() const { return m_data.shouldDebugBreak; } - int Config::abortAfter() const { return m_data.abortAfter; } - bool Config::showInvisibles() const { return m_data.showInvisibles; } - Verbosity Config::verbosity() const { return m_data.verbosity; } - - IStream const* Config::openStream() { - return Catch::makeStream(m_data.outputFilename); - } - -} // end namespace Catch -// end catch_config.cpp -// start catch_console_colour.cpp - -#if defined(__clang__) -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wexit-time-destructors" -#endif - -// start catch_errno_guard.h - -namespace Catch { - - class ErrnoGuard { - public: - ErrnoGuard(); - ~ErrnoGuard(); - private: - int m_oldErrno; - }; - -} - -// end catch_errno_guard.h -#include - -namespace Catch { - namespace { - - struct IColourImpl { - virtual ~IColourImpl() = default; - virtual void use( Colour::Code _colourCode ) = 0; - }; - - struct NoColourImpl : IColourImpl { - void use( Colour::Code ) {} - - static IColourImpl* instance() { - static NoColourImpl s_instance; - return &s_instance; - } - }; - - } // anon namespace -} // namespace Catch - -#if !defined( CATCH_CONFIG_COLOUR_NONE ) && !defined( CATCH_CONFIG_COLOUR_WINDOWS ) && !defined( CATCH_CONFIG_COLOUR_ANSI ) -# ifdef CATCH_PLATFORM_WINDOWS -# define CATCH_CONFIG_COLOUR_WINDOWS -# else -# define CATCH_CONFIG_COLOUR_ANSI -# endif -#endif - -#if defined ( CATCH_CONFIG_COLOUR_WINDOWS ) ///////////////////////////////////////// - -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 ) override { - 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::BrightYellow: return setTextAttribute( FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN ); - - case Colour::Bright: CATCH_INTERNAL_ERROR( "not a colour" ); - - default: - CATCH_ERROR( "Unknown colour requested" ); - } - } - - private: - void setTextAttribute( WORD _textAttribute ) { - SetConsoleTextAttribute( stdoutHandle, _textAttribute | originalBackgroundAttributes ); - } - HANDLE stdoutHandle; - WORD originalForegroundAttributes; - WORD originalBackgroundAttributes; - }; - - IColourImpl* platformColourInstance() { - static Win32ColourImpl s_instance; - - IConfigPtr config = getCurrentContext().getConfig(); - UseColour::YesOrNo colourMode = config - ? config->useColour() - : UseColour::Auto; - if( colourMode == UseColour::Auto ) - colourMode = UseColour::Yes; - return colourMode == UseColour::Yes - ? &s_instance - : NoColourImpl::instance(); - } - -} // end anon namespace -} // end namespace Catch - -#elif defined( CATCH_CONFIG_COLOUR_ANSI ) ////////////////////////////////////// - -#include - -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 ) override { - 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::BrightYellow: return setColour( "[1;33m" ); - - case Colour::Bright: CATCH_INTERNAL_ERROR( "not a colour" ); - default: CATCH_INTERNAL_ERROR( "Unknown colour requested" ); - } - } - static IColourImpl* instance() { - static PosixColourImpl s_instance; - return &s_instance; - } - - private: - void setColour( const char* _escapeCode ) { - Catch::cout() << '\033' << _escapeCode; - } - }; - - bool useColourOnPlatform() { - return -#ifdef CATCH_PLATFORM_MAC - !isDebuggerActive() && -#endif -#if !(defined(__DJGPP__) && defined(__STRICT_ANSI__)) - isatty(STDOUT_FILENO) -#else - false -#endif - ; - } - IColourImpl* platformColourInstance() { - ErrnoGuard guard; - IConfigPtr config = getCurrentContext().getConfig(); - UseColour::YesOrNo colourMode = config - ? config->useColour() - : UseColour::Auto; - if( colourMode == UseColour::Auto ) - colourMode = useColourOnPlatform() - ? UseColour::Yes - : UseColour::No; - return colourMode == UseColour::Yes - ? PosixColourImpl::instance() - : NoColourImpl::instance(); - } - -} // end anon namespace -} // end namespace Catch - -#else // not Windows or ANSI /////////////////////////////////////////////// - -namespace Catch { - - static IColourImpl* platformColourInstance() { return NoColourImpl::instance(); } - -} // end namespace Catch - -#endif // Windows/ ANSI/ None - -namespace Catch { - - Colour::Colour( Code _colourCode ) { use( _colourCode ); } - Colour::Colour( Colour&& rhs ) noexcept { - m_moved = rhs.m_moved; - rhs.m_moved = true; - } - Colour& Colour::operator=( Colour&& rhs ) noexcept { - m_moved = rhs.m_moved; - rhs.m_moved = true; - return *this; - } - - Colour::~Colour(){ if( !m_moved ) use( None ); } - - void Colour::use( Code _colourCode ) { - static IColourImpl* impl = platformColourInstance(); - impl->use( _colourCode ); - } - - std::ostream& operator << ( std::ostream& os, Colour const& ) { - return os; - } - -} // end namespace Catch - -#if defined(__clang__) -# pragma clang diagnostic pop -#endif - -// end catch_console_colour.cpp -// start catch_context.cpp - -namespace Catch { - - class Context : public IMutableContext, NonCopyable { - - public: // IContext - virtual IResultCapture* getResultCapture() override { - return m_resultCapture; - } - virtual IRunner* getRunner() override { - return m_runner; - } - - virtual IConfigPtr const& getConfig() const override { - return m_config; - } - - virtual ~Context() override; - - public: // IMutableContext - virtual void setResultCapture( IResultCapture* resultCapture ) override { - m_resultCapture = resultCapture; - } - virtual void setRunner( IRunner* runner ) override { - m_runner = runner; - } - virtual void setConfig( IConfigPtr const& config ) override { - m_config = config; - } - - friend IMutableContext& getCurrentMutableContext(); - - private: - IConfigPtr m_config; - IRunner* m_runner = nullptr; - IResultCapture* m_resultCapture = nullptr; - }; - - IMutableContext *IMutableContext::currentContext = nullptr; - - void IMutableContext::createContext() - { - currentContext = new Context(); - } - - void cleanUpContext() { - delete IMutableContext::currentContext; - IMutableContext::currentContext = nullptr; - } - IContext::~IContext() = default; - IMutableContext::~IMutableContext() = default; - Context::~Context() = default; -} -// end catch_context.cpp -// start catch_debug_console.cpp - -// start catch_debug_console.h - -#include - -namespace Catch { - void writeToDebugConsole( std::string const& text ); -} - -// end catch_debug_console.h -#ifdef CATCH_PLATFORM_WINDOWS - - 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; - } - } - -#endif // Platform -// end catch_debug_console.cpp -// start catch_debugger.cpp - -#ifdef CATCH_PLATFORM_MAC - -# include -# include -# include -# include -# include -# include -# include - -namespace Catch { - - // 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(){ - - int mib[4]; - struct kinfo_proc info; - std::size_t size; - - // Initialize the flags so that, if sysctl fails for some bizarre - // reason, we get a predictable result. - - 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. - - mib[0] = CTL_KERN; - mib[1] = KERN_PROC; - mib[2] = KERN_PROC_PID; - mib[3] = getpid(); - - // Call sysctl. - - size = sizeof(info); - if( sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, nullptr, 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. - - return ( (info.kp_proc.p_flag & P_TRACED) != 0 ); - } - } // namespace Catch - -#elif defined(CATCH_PLATFORM_LINUX) - #include - #include - - namespace Catch{ - // The standard POSIX way of detecting a debugger is to attempt to - // ptrace() the process, but this needs to be done from a child and not - // this process itself to still allow attaching to this process later - // if wanted, so is rather heavy. Under Linux we have the PID of the - // "debugger" (which doesn't need to be gdb, of course, it could also - // be strace, for example) in /proc/$PID/status, so just get it from - // there instead. - bool isDebuggerActive(){ - // Libstdc++ has a bug, where std::ifstream sets errno to 0 - // This way our users can properly assert over errno values - ErrnoGuard guard; - std::ifstream in("/proc/self/status"); - for( std::string line; std::getline(in, line); ) { - static const int PREFIX_LEN = 11; - if( line.compare(0, PREFIX_LEN, "TracerPid:\t") == 0 ) { - // We're traced if the PID is not 0 and no other PID starts - // with 0 digit, so it's enough to check for just a single - // character. - return line.length() > PREFIX_LEN && line[PREFIX_LEN] != '0'; - } - } - - return false; - } - } // namespace Catch -#elif defined(_MSC_VER) - 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; - } - } -#else - namespace Catch { - bool isDebuggerActive() { return false; } - } -#endif // Platform -// end catch_debugger.cpp -// start catch_decomposer.cpp - -namespace Catch { - - ITransientExpression::~ITransientExpression() = default; - - void formatReconstructedExpression( std::ostream &os, std::string const& lhs, StringRef op, std::string const& rhs ) { - if( lhs.size() + rhs.size() < 40 && - lhs.find('\n') == std::string::npos && - rhs.find('\n') == std::string::npos ) - os << lhs << " " << op << " " << rhs; - else - os << lhs << "\n" << op << "\n" << rhs; - } -} -// end catch_decomposer.cpp -// start catch_errno_guard.cpp - -#include - -namespace Catch { - ErrnoGuard::ErrnoGuard():m_oldErrno(errno){} - ErrnoGuard::~ErrnoGuard() { errno = m_oldErrno; } -} -// end catch_errno_guard.cpp -// start catch_exception_translator_registry.cpp - -// start catch_exception_translator_registry.h - -#include -#include -#include - -namespace Catch { - - class ExceptionTranslatorRegistry : public IExceptionTranslatorRegistry { - public: - ~ExceptionTranslatorRegistry(); - virtual void registerTranslator( const IExceptionTranslator* translator ); - virtual std::string translateActiveException() const override; - std::string tryTranslators() const; - - private: - std::vector> m_translators; - }; -} - -// end catch_exception_translator_registry.h -#ifdef __OBJC__ -#import "Foundation/Foundation.h" -#endif - -namespace Catch { - - ExceptionTranslatorRegistry::~ExceptionTranslatorRegistry() { - } - - void ExceptionTranslatorRegistry::registerTranslator( const IExceptionTranslator* translator ) { - m_translators.push_back( std::unique_ptr( translator ) ); - } - - std::string ExceptionTranslatorRegistry::translateActiveException() const { - try { -#ifdef __OBJC__ - // In Objective-C try objective-c exceptions first - @try { - return tryTranslators(); - } - @catch (NSException *exception) { - return Catch::Detail::stringify( [exception description] ); - } -#else - // Compiling a mixed mode project with MSVC means that CLR - // exceptions will be caught in (...) as well. However, these - // do not fill-in std::current_exception and thus lead to crash - // when attempting rethrow. - // /EHa switch also causes structured exceptions to be caught - // here, but they fill-in current_exception properly, so - // at worst the output should be a little weird, instead of - // causing a crash. - if (std::current_exception() == nullptr) { - return "Non C++ exception. Possibly a CLR exception."; - } - return tryTranslators(); -#endif - } - catch( TestFailureException& ) { - std::rethrow_exception(std::current_exception()); - } - 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 ExceptionTranslatorRegistry::tryTranslators() const { - if( m_translators.empty() ) - std::rethrow_exception(std::current_exception()); - else - return m_translators[0]->translate( m_translators.begin()+1, m_translators.end() ); - } -} -// end catch_exception_translator_registry.cpp -// start catch_fatal_condition.cpp - -#if defined(__GNUC__) -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wmissing-field-initializers" -#endif - -#if defined( CATCH_CONFIG_WINDOWS_SEH ) || defined( CATCH_CONFIG_POSIX_SIGNALS ) - -namespace { - // Report the error condition - void reportFatal( char const * const message ) { - Catch::getCurrentContext().getResultCapture()->handleFatalErrorCondition( message ); - } -} - -#endif // signals/SEH handling - -#if defined( CATCH_CONFIG_WINDOWS_SEH ) - -namespace Catch { - struct SignalDefs { DWORD id; const char* name; }; - - // There is no 1-1 mapping between signals and windows exceptions. - // Windows can easily distinguish between SO and SigSegV, - // but SigInt, SigTerm, etc are handled differently. - static SignalDefs signalDefs[] = { - { EXCEPTION_ILLEGAL_INSTRUCTION, "SIGILL - Illegal instruction signal" }, - { EXCEPTION_STACK_OVERFLOW, "SIGSEGV - Stack overflow" }, - { EXCEPTION_ACCESS_VIOLATION, "SIGSEGV - Segmentation violation signal" }, - { EXCEPTION_INT_DIVIDE_BY_ZERO, "Divide by zero error" }, - }; - - LONG CALLBACK FatalConditionHandler::handleVectoredException(PEXCEPTION_POINTERS ExceptionInfo) { - for (auto const& def : signalDefs) { - if (ExceptionInfo->ExceptionRecord->ExceptionCode == def.id) { - reportFatal(def.name); - } - } - // If its not an exception we care about, pass it along. - // This stops us from eating debugger breaks etc. - return EXCEPTION_CONTINUE_SEARCH; - } - - FatalConditionHandler::FatalConditionHandler() { - isSet = true; - // 32k seems enough for Catch to handle stack overflow, - // but the value was found experimentally, so there is no strong guarantee - guaranteeSize = 32 * 1024; - exceptionHandlerHandle = nullptr; - // Register as first handler in current chain - exceptionHandlerHandle = AddVectoredExceptionHandler(1, handleVectoredException); - // Pass in guarantee size to be filled - SetThreadStackGuarantee(&guaranteeSize); - } - - void FatalConditionHandler::reset() { - if (isSet) { - RemoveVectoredExceptionHandler(exceptionHandlerHandle); - SetThreadStackGuarantee(&guaranteeSize); - exceptionHandlerHandle = nullptr; - isSet = false; - } - } - - FatalConditionHandler::~FatalConditionHandler() { - reset(); - } - -bool FatalConditionHandler::isSet = false; -ULONG FatalConditionHandler::guaranteeSize = 0; -PVOID FatalConditionHandler::exceptionHandlerHandle = nullptr; - -} // namespace Catch - -#elif defined( CATCH_CONFIG_POSIX_SIGNALS ) - -namespace Catch { - - struct SignalDefs { - int id; - const char* name; - }; - - // 32kb for the alternate stack seems to be sufficient. However, this value - // is experimentally determined, so that's not guaranteed. - constexpr static std::size_t sigStackSize = 32768 >= MINSIGSTKSZ ? 32768 : MINSIGSTKSZ; - - static 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" } - }; - - void FatalConditionHandler::handleSignal( int sig ) { - char const * name = ""; - for (auto const& def : signalDefs) { - if (sig == def.id) { - name = def.name; - break; - } - } - reset(); - reportFatal(name); - raise( sig ); - } - - FatalConditionHandler::FatalConditionHandler() { - isSet = true; - stack_t sigStack; - sigStack.ss_sp = altStackMem; - sigStack.ss_size = sigStackSize; - sigStack.ss_flags = 0; - sigaltstack(&sigStack, &oldSigStack); - struct sigaction sa = { }; - - sa.sa_handler = handleSignal; - sa.sa_flags = SA_ONSTACK; - for (std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i) { - sigaction(signalDefs[i].id, &sa, &oldSigActions[i]); - } - } - - FatalConditionHandler::~FatalConditionHandler() { - reset(); - } - - void FatalConditionHandler::reset() { - if( isSet ) { - // Set signals back to previous values -- hopefully nobody overwrote them in the meantime - for( std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i ) { - sigaction(signalDefs[i].id, &oldSigActions[i], nullptr); - } - // Return the old stack - sigaltstack(&oldSigStack, nullptr); - isSet = false; - } - } - - bool FatalConditionHandler::isSet = false; - struct sigaction FatalConditionHandler::oldSigActions[sizeof(signalDefs)/sizeof(SignalDefs)] = {}; - stack_t FatalConditionHandler::oldSigStack = {}; - char FatalConditionHandler::altStackMem[sigStackSize] = {}; - -} // namespace Catch - -#else - -namespace Catch { - void FatalConditionHandler::reset() {} -} - -#endif // signals/SEH handling - -#if defined(__GNUC__) -# pragma GCC diagnostic pop -#endif -// end catch_fatal_condition.cpp -// start catch_interfaces_capture.cpp - -namespace Catch { - IResultCapture::~IResultCapture() = default; -} -// end catch_interfaces_capture.cpp -// start catch_interfaces_config.cpp - -namespace Catch { - IConfig::~IConfig() = default; -} -// end catch_interfaces_config.cpp -// start catch_interfaces_exception.cpp - -namespace Catch { - IExceptionTranslator::~IExceptionTranslator() = default; - IExceptionTranslatorRegistry::~IExceptionTranslatorRegistry() = default; -} -// end catch_interfaces_exception.cpp -// start catch_interfaces_registry_hub.cpp - -namespace Catch { - IRegistryHub::~IRegistryHub() = default; - IMutableRegistryHub::~IMutableRegistryHub() = default; -} -// end catch_interfaces_registry_hub.cpp -// start catch_interfaces_reporter.cpp - -// start catch_reporter_listening.h - -namespace Catch { - - class ListeningReporter : public IStreamingReporter { - using Reporters = std::vector; - Reporters m_listeners; - IStreamingReporterPtr m_reporter = nullptr; - - public: - void addListener( IStreamingReporterPtr&& listener ); - void addReporter( IStreamingReporterPtr&& reporter ); - - public: // IStreamingReporter - - ReporterPreferences getPreferences() const override; - - void noMatchingTestCases( std::string const& spec ) override; - - static std::set getSupportedVerbosities(); - - void benchmarkStarting( BenchmarkInfo const& benchmarkInfo ) override; - void benchmarkEnded( BenchmarkStats const& benchmarkStats ) override; - - void testRunStarting( TestRunInfo const& testRunInfo ) override; - void testGroupStarting( GroupInfo const& groupInfo ) override; - void testCaseStarting( TestCaseInfo const& testInfo ) override; - void sectionStarting( SectionInfo const& sectionInfo ) override; - void assertionStarting( AssertionInfo const& assertionInfo ) override; - - // The return value indicates if the messages buffer should be cleared: - bool assertionEnded( AssertionStats const& assertionStats ) override; - void sectionEnded( SectionStats const& sectionStats ) override; - void testCaseEnded( TestCaseStats const& testCaseStats ) override; - void testGroupEnded( TestGroupStats const& testGroupStats ) override; - void testRunEnded( TestRunStats const& testRunStats ) override; - - void skipTest( TestCaseInfo const& testInfo ) override; - bool isMulti() const override; - - }; - -} // end namespace Catch - -// end catch_reporter_listening.h -namespace Catch { - - ReporterConfig::ReporterConfig( IConfigPtr const& _fullConfig ) - : m_stream( &_fullConfig->stream() ), m_fullConfig( _fullConfig ) {} - - ReporterConfig::ReporterConfig( IConfigPtr const& _fullConfig, std::ostream& _stream ) - : m_stream( &_stream ), m_fullConfig( _fullConfig ) {} - - std::ostream& ReporterConfig::stream() const { return *m_stream; } - IConfigPtr ReporterConfig::fullConfig() const { return m_fullConfig; } - - TestRunInfo::TestRunInfo( std::string const& _name ) : name( _name ) {} - - GroupInfo::GroupInfo( std::string const& _name, - std::size_t _groupIndex, - std::size_t _groupsCount ) - : name( _name ), - groupIndex( _groupIndex ), - groupsCounts( _groupsCount ) - {} - - AssertionStats::AssertionStats( AssertionResult const& _assertionResult, - std::vector const& _infoMessages, - Totals const& _totals ) - : assertionResult( _assertionResult ), - infoMessages( _infoMessages ), - totals( _totals ) - { - assertionResult.m_resultData.lazyExpression.m_transientExpression = _assertionResult.m_resultData.lazyExpression.m_transientExpression; - - 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 ); - } - } - - AssertionStats::~AssertionStats() = default; - - SectionStats::SectionStats( SectionInfo const& _sectionInfo, - Counts const& _assertions, - double _durationInSeconds, - bool _missingAssertions ) - : sectionInfo( _sectionInfo ), - assertions( _assertions ), - durationInSeconds( _durationInSeconds ), - missingAssertions( _missingAssertions ) - {} - - SectionStats::~SectionStats() = default; - - 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 ) - {} - - TestCaseStats::~TestCaseStats() = default; - - TestGroupStats::TestGroupStats( GroupInfo const& _groupInfo, - Totals const& _totals, - bool _aborting ) - : groupInfo( _groupInfo ), - totals( _totals ), - aborting( _aborting ) - {} - - TestGroupStats::TestGroupStats( GroupInfo const& _groupInfo ) - : groupInfo( _groupInfo ), - aborting( false ) - {} - - TestGroupStats::~TestGroupStats() = default; - - TestRunStats::TestRunStats( TestRunInfo const& _runInfo, - Totals const& _totals, - bool _aborting ) - : runInfo( _runInfo ), - totals( _totals ), - aborting( _aborting ) - {} - - TestRunStats::~TestRunStats() = default; - - void IStreamingReporter::fatalErrorEncountered( StringRef ) {} - bool IStreamingReporter::isMulti() const { return false; } - - IReporterFactory::~IReporterFactory() = default; - IReporterRegistry::~IReporterRegistry() = default; - -} // end namespace Catch -// end catch_interfaces_reporter.cpp -// start catch_interfaces_runner.cpp - -namespace Catch { - IRunner::~IRunner() = default; -} -// end catch_interfaces_runner.cpp -// start catch_interfaces_testcase.cpp - -namespace Catch { - ITestInvoker::~ITestInvoker() = default; - ITestCaseRegistry::~ITestCaseRegistry() = default; -} -// end catch_interfaces_testcase.cpp -// start catch_leak_detector.cpp - -#ifdef CATCH_CONFIG_WINDOWS_CRTDBG -#include - -namespace Catch { - - LeakDetector::LeakDetector() { - int flag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG); - flag |= _CRTDBG_LEAK_CHECK_DF; - flag |= _CRTDBG_ALLOC_MEM_DF; - _CrtSetDbgFlag(flag); - _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG); - _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR); - // Change this to leaking allocation's number to break there - _CrtSetBreakAlloc(-1); - } -} - -#else - - Catch::LeakDetector::LeakDetector() {} - -#endif -// end catch_leak_detector.cpp -// start catch_list.cpp - -// start catch_list.h - -#include - -namespace Catch { - - std::size_t listTests( Config const& config ); - - std::size_t listTestsNamesOnly( Config const& config ); - - struct TagInfo { - void add( std::string const& spelling ); - std::string all() const; - - std::set spellings; - std::size_t count = 0; - }; - - std::size_t listTags( Config const& config ); - - std::size_t listReporters( Config const& /*config*/ ); - - Option list( Config const& config ); - -} // end namespace Catch - -// end catch_list.h -// start catch_text.h - -namespace Catch { - using namespace clara::TextFlow; -} - -// end catch_text.h -#include -#include -#include - -namespace Catch { - - std::size_t listTests( Config const& config ) { - TestSpec testSpec = config.testSpec(); - if( config.hasTestFilters() ) - Catch::cout() << "Matching test cases:\n"; - else { - Catch::cout() << "All available test cases:\n"; - } - - auto matchedTestCases = filterTests( getAllTestCasesSorted( config ), testSpec, config ); - for( auto const& testCaseInfo : matchedTestCases ) { - Colour::Code colour = testCaseInfo.isHidden() - ? Colour::SecondaryText - : Colour::None; - Colour colourGuard( colour ); - - Catch::cout() << Column( testCaseInfo.name ).initialIndent( 2 ).indent( 4 ) << "\n"; - if( config.verbosity() >= Verbosity::High ) { - Catch::cout() << Column( Catch::Detail::stringify( testCaseInfo.lineInfo ) ).indent(4) << std::endl; - std::string description = testCaseInfo.description; - if( description.empty() ) - description = "(NO DESCRIPTION)"; - Catch::cout() << Column( description ).indent(4) << std::endl; - } - if( !testCaseInfo.tags.empty() ) - Catch::cout() << Column( testCaseInfo.tagsAsString() ).indent( 6 ) << "\n"; - } - - if( !config.hasTestFilters() ) - Catch::cout() << pluralise( matchedTestCases.size(), "test case" ) << '\n' << std::endl; - else - Catch::cout() << pluralise( matchedTestCases.size(), "matching test case" ) << '\n' << std::endl; - return matchedTestCases.size(); - } - - std::size_t listTestsNamesOnly( Config const& config ) { - TestSpec testSpec = config.testSpec(); - std::size_t matchedTests = 0; - std::vector matchedTestCases = filterTests( getAllTestCasesSorted( config ), testSpec, config ); - for( auto const& testCaseInfo : matchedTestCases ) { - matchedTests++; - if( startsWith( testCaseInfo.name, '#' ) ) - Catch::cout() << '"' << testCaseInfo.name << '"'; - else - Catch::cout() << testCaseInfo.name; - if ( config.verbosity() >= Verbosity::High ) - Catch::cout() << "\t@" << testCaseInfo.lineInfo; - Catch::cout() << std::endl; - } - return matchedTests; - } - - void TagInfo::add( std::string const& spelling ) { - ++count; - spellings.insert( spelling ); - } - - std::string TagInfo::all() const { - std::string out; - for( auto const& spelling : spellings ) - out += "[" + spelling + "]"; - return out; - } - - std::size_t listTags( Config const& config ) { - TestSpec testSpec = config.testSpec(); - if( config.hasTestFilters() ) - Catch::cout() << "Tags for matching test cases:\n"; - else { - Catch::cout() << "All available tags:\n"; - } - - std::map tagCounts; - - std::vector matchedTestCases = filterTests( getAllTestCasesSorted( config ), testSpec, config ); - for( auto const& testCase : matchedTestCases ) { - for( auto const& tagName : testCase.getTestCaseInfo().tags ) { - std::string lcaseTagName = toLower( tagName ); - auto countIt = tagCounts.find( lcaseTagName ); - if( countIt == tagCounts.end() ) - countIt = tagCounts.insert( std::make_pair( lcaseTagName, TagInfo() ) ).first; - countIt->second.add( tagName ); - } - } - - for( auto const& tagCount : tagCounts ) { - ReusableStringStream rss; - rss << " " << std::setw(2) << tagCount.second.count << " "; - auto str = rss.str(); - auto wrapper = Column( tagCount.second.all() ) - .initialIndent( 0 ) - .indent( str.size() ) - .width( CATCH_CONFIG_CONSOLE_WIDTH-10 ); - Catch::cout() << str << wrapper << '\n'; - } - Catch::cout() << pluralise( tagCounts.size(), "tag" ) << '\n' << std::endl; - return tagCounts.size(); - } - - std::size_t listReporters( Config const& /*config*/ ) { - Catch::cout() << "Available reporters:\n"; - IReporterRegistry::FactoryMap const& factories = getRegistryHub().getReporterRegistry().getFactories(); - std::size_t maxNameLen = 0; - for( auto const& factoryKvp : factories ) - maxNameLen = (std::max)( maxNameLen, factoryKvp.first.size() ); - - for( auto const& factoryKvp : factories ) { - Catch::cout() - << Column( factoryKvp.first + ":" ) - .indent(2) - .width( 5+maxNameLen ) - + Column( factoryKvp.second->getDescription() ) - .initialIndent(0) - .indent(2) - .width( CATCH_CONFIG_CONSOLE_WIDTH - maxNameLen-8 ) - << "\n"; - } - Catch::cout() << std::endl; - return factories.size(); - } - - 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 -// end catch_list.cpp -// start catch_matchers.cpp - -namespace Catch { -namespace Matchers { - namespace Impl { - - std::string MatcherUntypedBase::toString() const { - if( m_cachedToString.empty() ) - m_cachedToString = describe(); - return m_cachedToString; - } - - MatcherUntypedBase::~MatcherUntypedBase() = default; - - } // namespace Impl -} // namespace Matchers - -using namespace Matchers; -using Matchers::Impl::MatcherBase; - -} // namespace Catch -// end catch_matchers.cpp -// start catch_matchers_floating.cpp - -// start catch_to_string.hpp - -#include - -namespace Catch { - template - std::string to_string(T const& t) { -#if defined(CATCH_CONFIG_CPP11_TO_STRING) - return std::to_string(t); -#else - ReusableStringStream rss; - rss << t; - return rss.str(); -#endif - } -} // end namespace Catch - -// end catch_to_string.hpp -#include -#include -#include -#include - -namespace Catch { -namespace Matchers { -namespace Floating { -enum class FloatingPointKind : uint8_t { - Float, - Double -}; -} -} -} - -namespace { - -template -struct Converter; - -template <> -struct Converter { - static_assert(sizeof(float) == sizeof(int32_t), "Important ULP matcher assumption violated"); - Converter(float f) { - std::memcpy(&i, &f, sizeof(f)); - } - int32_t i; -}; - -template <> -struct Converter { - static_assert(sizeof(double) == sizeof(int64_t), "Important ULP matcher assumption violated"); - Converter(double d) { - std::memcpy(&i, &d, sizeof(d)); - } - int64_t i; -}; - -template -auto convert(T t) -> Converter { - return Converter(t); -} - -template -bool almostEqualUlps(FP lhs, FP rhs, int maxUlpDiff) { - // Comparison with NaN should always be false. - // This way we can rule it out before getting into the ugly details - if (std::isnan(lhs) || std::isnan(rhs)) { - return false; - } - - auto lc = convert(lhs); - auto rc = convert(rhs); - - if ((lc.i < 0) != (rc.i < 0)) { - // Potentially we can have +0 and -0 - return lhs == rhs; - } - - auto ulpDiff = std::abs(lc.i - rc.i); - return ulpDiff <= maxUlpDiff; -} - -} - -namespace Catch { -namespace Matchers { -namespace Floating { - WithinAbsMatcher::WithinAbsMatcher(double target, double margin) - :m_target{ target }, m_margin{ margin } { - if (m_margin < 0) { - throw std::domain_error("Allowed margin difference has to be >= 0"); - } - } - - // Performs equivalent check of std::fabs(lhs - rhs) <= margin - // But without the subtraction to allow for INFINITY in comparison - bool WithinAbsMatcher::match(double const& matchee) const { - return (matchee + m_margin >= m_target) && (m_target + m_margin >= matchee); - } - - std::string WithinAbsMatcher::describe() const { - return "is within " + ::Catch::Detail::stringify(m_margin) + " of " + ::Catch::Detail::stringify(m_target); - } - - WithinUlpsMatcher::WithinUlpsMatcher(double target, int ulps, FloatingPointKind baseType) - :m_target{ target }, m_ulps{ ulps }, m_type{ baseType } { - if (m_ulps < 0) { - throw std::domain_error("Allowed ulp difference has to be >= 0"); - } - } - - bool WithinUlpsMatcher::match(double const& matchee) const { - switch (m_type) { - case FloatingPointKind::Float: - return almostEqualUlps(static_cast(matchee), static_cast(m_target), m_ulps); - case FloatingPointKind::Double: - return almostEqualUlps(matchee, m_target, m_ulps); - default: - throw std::domain_error("Unknown FloatingPointKind value"); - } - } - - std::string WithinUlpsMatcher::describe() const { - return "is within " + Catch::to_string(m_ulps) + " ULPs of " + ::Catch::Detail::stringify(m_target) + ((m_type == FloatingPointKind::Float)? "f" : ""); - } - -}// namespace Floating - -Floating::WithinUlpsMatcher WithinULP(double target, int maxUlpDiff) { - return Floating::WithinUlpsMatcher(target, maxUlpDiff, Floating::FloatingPointKind::Double); -} - -Floating::WithinUlpsMatcher WithinULP(float target, int maxUlpDiff) { - return Floating::WithinUlpsMatcher(target, maxUlpDiff, Floating::FloatingPointKind::Float); -} - -Floating::WithinAbsMatcher WithinAbs(double target, double margin) { - return Floating::WithinAbsMatcher(target, margin); -} - -} // namespace Matchers -} // namespace Catch - -// end catch_matchers_floating.cpp -// start catch_matchers_generic.cpp - -std::string Catch::Matchers::Generic::Detail::finalizeDescription(const std::string& desc) { - if (desc.empty()) { - return "matches undescribed predicate"; - } else { - return "matches predicate: \"" + desc + '"'; - } -} -// end catch_matchers_generic.cpp -// start catch_matchers_string.cpp - -#include - -namespace Catch { -namespace Matchers { - - namespace StdString { - - CasedString::CasedString( std::string const& str, CaseSensitive::Choice caseSensitivity ) - : m_caseSensitivity( caseSensitivity ), - m_str( adjustString( str ) ) - {} - std::string CasedString::adjustString( std::string const& str ) const { - return m_caseSensitivity == CaseSensitive::No - ? toLower( str ) - : str; - } - std::string CasedString::caseSensitivitySuffix() const { - return m_caseSensitivity == CaseSensitive::No - ? " (case insensitive)" - : std::string(); - } - - StringMatcherBase::StringMatcherBase( std::string const& operation, CasedString const& comparator ) - : m_comparator( comparator ), - m_operation( operation ) { - } - - std::string StringMatcherBase::describe() const { - std::string description; - description.reserve(5 + m_operation.size() + m_comparator.m_str.size() + - m_comparator.caseSensitivitySuffix().size()); - description += m_operation; - description += ": \""; - description += m_comparator.m_str; - description += "\""; - description += m_comparator.caseSensitivitySuffix(); - return description; - } - - EqualsMatcher::EqualsMatcher( CasedString const& comparator ) : StringMatcherBase( "equals", comparator ) {} - - bool EqualsMatcher::match( std::string const& source ) const { - return m_comparator.adjustString( source ) == m_comparator.m_str; - } - - ContainsMatcher::ContainsMatcher( CasedString const& comparator ) : StringMatcherBase( "contains", comparator ) {} - - bool ContainsMatcher::match( std::string const& source ) const { - return contains( m_comparator.adjustString( source ), m_comparator.m_str ); - } - - StartsWithMatcher::StartsWithMatcher( CasedString const& comparator ) : StringMatcherBase( "starts with", comparator ) {} - - bool StartsWithMatcher::match( std::string const& source ) const { - return startsWith( m_comparator.adjustString( source ), m_comparator.m_str ); - } - - EndsWithMatcher::EndsWithMatcher( CasedString const& comparator ) : StringMatcherBase( "ends with", comparator ) {} - - bool EndsWithMatcher::match( std::string const& source ) const { - return endsWith( m_comparator.adjustString( source ), m_comparator.m_str ); - } - - RegexMatcher::RegexMatcher(std::string regex, CaseSensitive::Choice caseSensitivity): m_regex(std::move(regex)), m_caseSensitivity(caseSensitivity) {} - - bool RegexMatcher::match(std::string const& matchee) const { - auto flags = std::regex::ECMAScript; // ECMAScript is the default syntax option anyway - if (m_caseSensitivity == CaseSensitive::Choice::No) { - flags |= std::regex::icase; - } - auto reg = std::regex(m_regex, flags); - return std::regex_match(matchee, reg); - } - - std::string RegexMatcher::describe() const { - return "matches " + ::Catch::Detail::stringify(m_regex) + ((m_caseSensitivity == CaseSensitive::Choice::Yes)? " case sensitively" : " case insensitively"); - } - - } // namespace StdString - - StdString::EqualsMatcher Equals( std::string const& str, CaseSensitive::Choice caseSensitivity ) { - return StdString::EqualsMatcher( StdString::CasedString( str, caseSensitivity) ); - } - StdString::ContainsMatcher Contains( std::string const& str, CaseSensitive::Choice caseSensitivity ) { - return StdString::ContainsMatcher( StdString::CasedString( str, caseSensitivity) ); - } - StdString::EndsWithMatcher EndsWith( std::string const& str, CaseSensitive::Choice caseSensitivity ) { - return StdString::EndsWithMatcher( StdString::CasedString( str, caseSensitivity) ); - } - StdString::StartsWithMatcher StartsWith( std::string const& str, CaseSensitive::Choice caseSensitivity ) { - return StdString::StartsWithMatcher( StdString::CasedString( str, caseSensitivity) ); - } - - StdString::RegexMatcher Matches(std::string const& regex, CaseSensitive::Choice caseSensitivity) { - return StdString::RegexMatcher(regex, caseSensitivity); - } - -} // namespace Matchers -} // namespace Catch -// end catch_matchers_string.cpp -// start catch_message.cpp - -// start catch_uncaught_exceptions.h - -namespace Catch { - bool uncaught_exceptions(); -} // end namespace Catch - -// end catch_uncaught_exceptions.h -namespace Catch { - - MessageInfo::MessageInfo( std::string const& _macroName, - SourceLineInfo const& _lineInfo, - ResultWas::OfType _type ) - : macroName( _macroName ), - lineInfo( _lineInfo ), - type( _type ), - sequence( ++globalCount ) - {} - - bool MessageInfo::operator==( MessageInfo const& other ) const { - return sequence == other.sequence; - } - - bool MessageInfo::operator<( MessageInfo const& other ) const { - return sequence < other.sequence; - } - - // This may need protecting if threading support is added - unsigned int MessageInfo::globalCount = 0; - - //////////////////////////////////////////////////////////////////////////// - - Catch::MessageBuilder::MessageBuilder( std::string const& macroName, - SourceLineInfo const& lineInfo, - ResultWas::OfType type ) - :m_info(macroName, lineInfo, type) {} - - //////////////////////////////////////////////////////////////////////////// - - ScopedMessage::ScopedMessage( MessageBuilder const& builder ) - : m_info( builder.m_info ) - { - m_info.message = builder.m_stream.str(); - getResultCapture().pushScopedMessage( m_info ); - } - - ScopedMessage::~ScopedMessage() { - if ( !uncaught_exceptions() ){ - getResultCapture().popScopedMessage(m_info); - } - } -} // end namespace Catch -// end catch_message.cpp -// start catch_output_redirect.cpp - -// start catch_output_redirect.h -#ifndef TWOBLUECUBES_CATCH_OUTPUT_REDIRECT_H -#define TWOBLUECUBES_CATCH_OUTPUT_REDIRECT_H - -#include -#include -#include - -namespace Catch { - - class RedirectedStream { - std::ostream& m_originalStream; - std::ostream& m_redirectionStream; - std::streambuf* m_prevBuf; - - public: - RedirectedStream( std::ostream& originalStream, std::ostream& redirectionStream ); - ~RedirectedStream(); - }; - - class RedirectedStdOut { - ReusableStringStream m_rss; - RedirectedStream m_cout; - public: - RedirectedStdOut(); - auto str() const -> std::string; - }; - - // StdErr has two constituent streams in C++, std::cerr and std::clog - // This means that we need to redirect 2 streams into 1 to keep proper - // order of writes - class RedirectedStdErr { - ReusableStringStream m_rss; - RedirectedStream m_cerr; - RedirectedStream m_clog; - public: - RedirectedStdErr(); - auto str() const -> std::string; - }; - - // Windows's implementation of std::tmpfile is terrible (it tries - // to create a file inside system folder, thus requiring elevated - // privileges for the binary), so we have to use tmpnam(_s) and - // create the file ourselves there. - class TempFile { - public: - TempFile(TempFile const&) = delete; - TempFile& operator=(TempFile const&) = delete; - TempFile(TempFile&&) = delete; - TempFile& operator=(TempFile&&) = delete; - - TempFile(); - ~TempFile(); - - std::FILE* getFile(); - std::string getContents(); - - private: - std::FILE* m_file = nullptr; - #if defined(_MSC_VER) - char m_buffer[L_tmpnam] = { 0 }; - #endif - }; - - class OutputRedirect { - public: - OutputRedirect(OutputRedirect const&) = delete; - OutputRedirect& operator=(OutputRedirect const&) = delete; - OutputRedirect(OutputRedirect&&) = delete; - OutputRedirect& operator=(OutputRedirect&&) = delete; - - OutputRedirect(std::string& stdout_dest, std::string& stderr_dest); - ~OutputRedirect(); - - private: - int m_originalStdout = -1; - int m_originalStderr = -1; - TempFile m_stdoutFile; - TempFile m_stderrFile; - std::string& m_stdoutDest; - std::string& m_stderrDest; - }; - -} // end namespace Catch - -#endif // TWOBLUECUBES_CATCH_OUTPUT_REDIRECT_H -// end catch_output_redirect.h -#include -#include -#include -#include -#include - -#if defined(_MSC_VER) -#include //_dup and _dup2 -#define dup _dup -#define dup2 _dup2 -#define fileno _fileno -#else -#include // dup and dup2 -#endif - -namespace Catch { - - RedirectedStream::RedirectedStream( std::ostream& originalStream, std::ostream& redirectionStream ) - : m_originalStream( originalStream ), - m_redirectionStream( redirectionStream ), - m_prevBuf( m_originalStream.rdbuf() ) - { - m_originalStream.rdbuf( m_redirectionStream.rdbuf() ); - } - - RedirectedStream::~RedirectedStream() { - m_originalStream.rdbuf( m_prevBuf ); - } - - RedirectedStdOut::RedirectedStdOut() : m_cout( Catch::cout(), m_rss.get() ) {} - auto RedirectedStdOut::str() const -> std::string { return m_rss.str(); } - - RedirectedStdErr::RedirectedStdErr() - : m_cerr( Catch::cerr(), m_rss.get() ), - m_clog( Catch::clog(), m_rss.get() ) - {} - auto RedirectedStdErr::str() const -> std::string { return m_rss.str(); } - -#if defined(_MSC_VER) - TempFile::TempFile() { - if (tmpnam_s(m_buffer)) { - throw std::runtime_error("Could not get a temp filename"); - } - if (fopen_s(&m_file, m_buffer, "w")) { - char buffer[100]; - if (strerror_s(buffer, errno)) { - throw std::runtime_error("Could not translate errno to string"); - } - throw std::runtime_error("Could not open the temp file: " + std::string(m_buffer) + buffer); - } - } -#else - TempFile::TempFile() { - m_file = std::tmpfile(); - if (!m_file) { - throw std::runtime_error("Could not create a temp file."); - } - } - -#endif - - TempFile::~TempFile() { - // TBD: What to do about errors here? - std::fclose(m_file); - // We manually create the file on Windows only, on Linux - // it will be autodeleted -#if defined(_MSC_VER) - std::remove(m_buffer); -#endif - } - - FILE* TempFile::getFile() { - return m_file; - } - - std::string TempFile::getContents() { - std::stringstream sstr; - char buffer[100] = {}; - std::rewind(m_file); - while (std::fgets(buffer, sizeof(buffer), m_file)) { - sstr << buffer; - } - return sstr.str(); - } - - OutputRedirect::OutputRedirect(std::string& stdout_dest, std::string& stderr_dest) : - m_originalStdout(dup(1)), - m_originalStderr(dup(2)), - m_stdoutDest(stdout_dest), - m_stderrDest(stderr_dest) { - dup2(fileno(m_stdoutFile.getFile()), 1); - dup2(fileno(m_stderrFile.getFile()), 2); - } - - OutputRedirect::~OutputRedirect() { - Catch::cout() << std::flush; - fflush(stdout); - // Since we support overriding these streams, we flush cerr - // even though std::cerr is unbuffered - Catch::cerr() << std::flush; - Catch::clog() << std::flush; - fflush(stderr); - - dup2(m_originalStdout, 1); - dup2(m_originalStderr, 2); - - m_stdoutDest += m_stdoutFile.getContents(); - m_stderrDest += m_stderrFile.getContents(); - } - -} // namespace Catch - -#if defined(_MSC_VER) -#undef dup -#undef dup2 -#undef fileno -#endif -// end catch_output_redirect.cpp -// start catch_random_number_generator.cpp - -// start catch_random_number_generator.h - -#include - -namespace Catch { - - struct IConfig; - - void seedRng( IConfig const& config ); - - unsigned int rngSeed(); - - struct RandomNumberGenerator { - using result_type = unsigned int; - - static constexpr result_type (min)() { return 0; } - static constexpr result_type (max)() { return 1000000; } - - result_type operator()( result_type n ) const; - result_type operator()() const; - - template - static void shuffle( V& vector ) { - RandomNumberGenerator rng; - std::shuffle( vector.begin(), vector.end(), rng ); - } - }; - -} - -// end catch_random_number_generator.h -#include - -namespace Catch { - - void seedRng( IConfig const& config ) { - if( config.rngSeed() != 0 ) - std::srand( config.rngSeed() ); - } - unsigned int rngSeed() { - return getCurrentContext().getConfig()->rngSeed(); - } - - RandomNumberGenerator::result_type RandomNumberGenerator::operator()( result_type n ) const { - return std::rand() % n; - } - RandomNumberGenerator::result_type RandomNumberGenerator::operator()() const { - return std::rand() % (max)(); - } - -} -// end catch_random_number_generator.cpp -// start catch_registry_hub.cpp - -// start catch_test_case_registry_impl.h - -#include -#include -#include -#include - -namespace Catch { - - class TestCase; - struct IConfig; - - std::vector sortTests( IConfig const& config, std::vector const& unsortedTestCases ); - bool matchTest( TestCase const& testCase, TestSpec const& testSpec, IConfig const& config ); - - void enforceNoDuplicateTestCases( std::vector const& functions ); - - std::vector filterTests( std::vector const& testCases, TestSpec const& testSpec, IConfig const& config ); - std::vector const& getAllTestCasesSorted( IConfig const& config ); - - class TestRegistry : public ITestCaseRegistry { - public: - virtual ~TestRegistry() = default; - - virtual void registerTest( TestCase const& testCase ); - - std::vector const& getAllTests() const override; - std::vector const& getAllTestsSorted( IConfig const& config ) const override; - - private: - std::vector m_functions; - mutable RunTests::InWhatOrder m_currentSortOrder = RunTests::InDeclarationOrder; - mutable std::vector m_sortedFunctions; - std::size_t m_unnamedCount = 0; - std::ios_base::Init m_ostreamInit; // Forces cout/ cerr to be initialised - }; - - /////////////////////////////////////////////////////////////////////////// - - class TestInvokerAsFunction : public ITestInvoker { - void(*m_testAsFunction)(); - public: - TestInvokerAsFunction( void(*testAsFunction)() ) noexcept; - - void invoke() const override; - }; - - std::string extractClassName( StringRef const& classOrQualifiedMethodName ); - - /////////////////////////////////////////////////////////////////////////// - -} // end namespace Catch - -// end catch_test_case_registry_impl.h -// start catch_reporter_registry.h - -#include - -namespace Catch { - - class ReporterRegistry : public IReporterRegistry { - - public: - - ~ReporterRegistry() override; - - IStreamingReporterPtr create( std::string const& name, IConfigPtr const& config ) const override; - - void registerReporter( std::string const& name, IReporterFactoryPtr const& factory ); - void registerListener( IReporterFactoryPtr const& factory ); - - FactoryMap const& getFactories() const override; - Listeners const& getListeners() const override; - - private: - FactoryMap m_factories; - Listeners m_listeners; - }; -} - -// end catch_reporter_registry.h -// start catch_tag_alias_registry.h - -// start catch_tag_alias.h - -#include - -namespace Catch { - - struct TagAlias { - TagAlias(std::string const& _tag, SourceLineInfo _lineInfo); - - std::string tag; - SourceLineInfo lineInfo; - }; - -} // end namespace Catch - -// end catch_tag_alias.h -#include - -namespace Catch { - - class TagAliasRegistry : public ITagAliasRegistry { - public: - ~TagAliasRegistry() override; - TagAlias const* find( std::string const& alias ) const override; - std::string expandAliases( std::string const& unexpandedTestSpec ) const override; - void add( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ); - - private: - std::map m_registry; - }; - -} // end namespace Catch - -// end catch_tag_alias_registry.h -// start catch_startup_exception_registry.h - -#include -#include - -namespace Catch { - - class StartupExceptionRegistry { - public: - void add(std::exception_ptr const& exception) noexcept; - std::vector const& getExceptions() const noexcept; - private: - std::vector m_exceptions; - }; - -} // end namespace Catch - -// end catch_startup_exception_registry.h -namespace Catch { - - namespace { - - class RegistryHub : public IRegistryHub, public IMutableRegistryHub, - private NonCopyable { - - public: // IRegistryHub - RegistryHub() = default; - IReporterRegistry const& getReporterRegistry() const override { - return m_reporterRegistry; - } - ITestCaseRegistry const& getTestCaseRegistry() const override { - return m_testCaseRegistry; - } - IExceptionTranslatorRegistry& getExceptionTranslatorRegistry() override { - return m_exceptionTranslatorRegistry; - } - ITagAliasRegistry const& getTagAliasRegistry() const override { - return m_tagAliasRegistry; - } - StartupExceptionRegistry const& getStartupExceptionRegistry() const override { - return m_exceptionRegistry; - } - - public: // IMutableRegistryHub - void registerReporter( std::string const& name, IReporterFactoryPtr const& factory ) override { - m_reporterRegistry.registerReporter( name, factory ); - } - void registerListener( IReporterFactoryPtr const& factory ) override { - m_reporterRegistry.registerListener( factory ); - } - void registerTest( TestCase const& testInfo ) override { - m_testCaseRegistry.registerTest( testInfo ); - } - void registerTranslator( const IExceptionTranslator* translator ) override { - m_exceptionTranslatorRegistry.registerTranslator( translator ); - } - void registerTagAlias( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ) override { - m_tagAliasRegistry.add( alias, tag, lineInfo ); - } - void registerStartupException() noexcept override { - m_exceptionRegistry.add(std::current_exception()); - } - - private: - TestRegistry m_testCaseRegistry; - ReporterRegistry m_reporterRegistry; - ExceptionTranslatorRegistry m_exceptionTranslatorRegistry; - TagAliasRegistry m_tagAliasRegistry; - StartupExceptionRegistry m_exceptionRegistry; - }; - - // Single, global, instance - RegistryHub*& getTheRegistryHub() { - static RegistryHub* theRegistryHub = nullptr; - if( !theRegistryHub ) - theRegistryHub = new RegistryHub(); - return theRegistryHub; - } - } - - IRegistryHub& getRegistryHub() { - return *getTheRegistryHub(); - } - IMutableRegistryHub& getMutableRegistryHub() { - return *getTheRegistryHub(); - } - void cleanUp() { - delete getTheRegistryHub(); - getTheRegistryHub() = nullptr; - cleanUpContext(); - ReusableStringStream::cleanup(); - } - std::string translateActiveException() { - return getRegistryHub().getExceptionTranslatorRegistry().translateActiveException(); - } - -} // end namespace Catch -// end catch_registry_hub.cpp -// start catch_reporter_registry.cpp - -namespace Catch { - - ReporterRegistry::~ReporterRegistry() = default; - - IStreamingReporterPtr ReporterRegistry::create( std::string const& name, IConfigPtr const& config ) const { - auto it = m_factories.find( name ); - if( it == m_factories.end() ) - return nullptr; - return it->second->create( ReporterConfig( config ) ); - } - - void ReporterRegistry::registerReporter( std::string const& name, IReporterFactoryPtr const& factory ) { - m_factories.emplace(name, factory); - } - void ReporterRegistry::registerListener( IReporterFactoryPtr const& factory ) { - m_listeners.push_back( factory ); - } - - IReporterRegistry::FactoryMap const& ReporterRegistry::getFactories() const { - return m_factories; - } - IReporterRegistry::Listeners const& ReporterRegistry::getListeners() const { - return m_listeners; - } - -} -// end catch_reporter_registry.cpp -// start catch_result_type.cpp - -namespace Catch { - - bool isOk( ResultWas::OfType resultType ) { - return ( resultType & ResultWas::FailureBit ) == 0; - } - bool isJustInfo( int flags ) { - return flags == ResultWas::Info; - } - - ResultDisposition::Flags operator | ( ResultDisposition::Flags lhs, ResultDisposition::Flags rhs ) { - return static_cast( static_cast( lhs ) | static_cast( rhs ) ); - } - - bool shouldContinueOnFailure( int flags ) { return ( flags & ResultDisposition::ContinueOnFailure ) != 0; } - bool shouldSuppressFailure( int flags ) { return ( flags & ResultDisposition::SuppressFail ) != 0; } - -} // end namespace Catch -// end catch_result_type.cpp -// start catch_run_context.cpp - -#include -#include -#include - -namespace Catch { - - RunContext::RunContext(IConfigPtr const& _config, IStreamingReporterPtr&& reporter) - : m_runInfo(_config->name()), - m_context(getCurrentMutableContext()), - m_config(_config), - m_reporter(std::move(reporter)), - m_lastAssertionInfo{ StringRef(), SourceLineInfo("",0), StringRef(), ResultDisposition::Normal }, - m_includeSuccessfulResults( m_config->includeSuccessfulResults() ) - { - m_context.setRunner(this); - m_context.setConfig(m_config); - m_context.setResultCapture(this); - m_reporter->testRunStarting(m_runInfo); - } - - RunContext::~RunContext() { - m_reporter->testRunEnded(TestRunStats(m_runInfo, m_totals, aborting())); - } - - void RunContext::testGroupStarting(std::string const& testSpec, std::size_t groupIndex, std::size_t groupsCount) { - m_reporter->testGroupStarting(GroupInfo(testSpec, groupIndex, groupsCount)); - } - - void RunContext::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 RunContext::runTest(TestCase const& testCase) { - Totals prevTotals = m_totals; - - std::string redirectedCout; - std::string redirectedCerr; - - auto const& testInfo = testCase.getTestCaseInfo(); - - m_reporter->testCaseStarting(testInfo); - - m_activeTestCase = &testCase; - - ITracker& rootTracker = m_trackerContext.startRun(); - assert(rootTracker.isSectionTracker()); - static_cast(rootTracker).addInitialFilters(m_config->getSectionsToRun()); - do { - m_trackerContext.startCycle(); - m_testCaseTracker = &SectionTracker::acquire(m_trackerContext, TestCaseTracking::NameAndLocation(testInfo.name, testInfo.lineInfo)); - runCurrentTest(redirectedCout, redirectedCerr); - } while (!m_testCaseTracker->isSuccessfullyCompleted() && !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 = nullptr; - m_testCaseTracker = nullptr; - - return deltaTotals; - } - - IConfigPtr RunContext::config() const { - return m_config; - } - - IStreamingReporter& RunContext::reporter() const { - return *m_reporter; - } - - void RunContext::assertionEnded(AssertionResult const & result) { - if (result.getResultType() == ResultWas::Ok) { - m_totals.assertions.passed++; - m_lastAssertionPassed = true; - } else if (!result.isOk()) { - m_lastAssertionPassed = false; - if( m_activeTestCase->getTestCaseInfo().okToFail() ) - m_totals.assertions.failedButOk++; - else - m_totals.assertions.failed++; - } - else { - m_lastAssertionPassed = true; - } - - // We have no use for the return value (whether messages should be cleared), because messages were made scoped - // and should be let to clear themselves out. - static_cast(m_reporter->assertionEnded(AssertionStats(result, m_messages, m_totals))); - - // Reset working state - resetAssertionInfo(); - m_lastResult = result; - } - void RunContext::resetAssertionInfo() { - m_lastAssertionInfo.macroName = StringRef(); - m_lastAssertionInfo.capturedExpression = "{Unknown expression after the reported line}"_sr; - } - - bool RunContext::sectionStarted(SectionInfo const & sectionInfo, Counts & assertions) { - ITracker& sectionTracker = SectionTracker::acquire(m_trackerContext, TestCaseTracking::NameAndLocation(sectionInfo.name, sectionInfo.lineInfo)); - if (!sectionTracker.isOpen()) - return false; - m_activeSections.push_back(§ionTracker); - - m_lastAssertionInfo.lineInfo = sectionInfo.lineInfo; - - m_reporter->sectionStarting(sectionInfo); - - assertions = m_totals.assertions; - - return true; - } - - bool RunContext::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; - } - - void RunContext::sectionEnded(SectionEndInfo const & endInfo) { - Counts assertions = m_totals.assertions - endInfo.prevAssertions; - bool missingAssertions = testForMissingAssertions(assertions); - - if (!m_activeSections.empty()) { - m_activeSections.back()->close(); - m_activeSections.pop_back(); - } - - m_reporter->sectionEnded(SectionStats(endInfo.sectionInfo, assertions, endInfo.durationInSeconds, missingAssertions)); - m_messages.clear(); - } - - void RunContext::sectionEndedEarly(SectionEndInfo const & endInfo) { - if (m_unfinishedSections.empty()) - m_activeSections.back()->fail(); - else - m_activeSections.back()->close(); - m_activeSections.pop_back(); - - m_unfinishedSections.push_back(endInfo); - } - void RunContext::benchmarkStarting( BenchmarkInfo const& info ) { - m_reporter->benchmarkStarting( info ); - } - void RunContext::benchmarkEnded( BenchmarkStats const& stats ) { - m_reporter->benchmarkEnded( stats ); - } - - void RunContext::pushScopedMessage(MessageInfo const & message) { - m_messages.push_back(message); - } - - void RunContext::popScopedMessage(MessageInfo const & message) { - m_messages.erase(std::remove(m_messages.begin(), m_messages.end(), message), m_messages.end()); - } - - std::string RunContext::getCurrentTestName() const { - return m_activeTestCase - ? m_activeTestCase->getTestCaseInfo().name - : std::string(); - } - - const AssertionResult * RunContext::getLastResult() const { - return &(*m_lastResult); - } - - void RunContext::exceptionEarlyReported() { - m_shouldReportUnexpected = false; - } - - void RunContext::handleFatalErrorCondition( StringRef message ) { - // First notify reporter that bad things happened - m_reporter->fatalErrorEncountered(message); - - // Don't rebuild the result -- the stringification itself can cause more fatal errors - // Instead, fake a result data. - AssertionResultData tempResult( ResultWas::FatalErrorCondition, { false } ); - tempResult.message = message; - AssertionResult result(m_lastAssertionInfo, tempResult); - - assertionEnded(result); - - handleUnfinishedSections(); - - // Recreate section for test case (as we will lose the one that was in scope) - auto const& testCaseInfo = m_activeTestCase->getTestCaseInfo(); - SectionInfo testCaseSection(testCaseInfo.lineInfo, testCaseInfo.name, testCaseInfo.description); - - Counts assertions; - assertions.failed = 1; - SectionStats testCaseSectionStats(testCaseSection, assertions, 0, false); - m_reporter->sectionEnded(testCaseSectionStats); - - auto const& testInfo = m_activeTestCase->getTestCaseInfo(); - - Totals deltaTotals; - deltaTotals.testCases.failed = 1; - deltaTotals.assertions.failed = 1; - m_reporter->testCaseEnded(TestCaseStats(testInfo, - deltaTotals, - std::string(), - std::string(), - false)); - m_totals.testCases.failed++; - testGroupEnded(std::string(), m_totals, 1, 1); - m_reporter->testRunEnded(TestRunStats(m_runInfo, m_totals, false)); - } - - bool RunContext::lastAssertionPassed() { - return m_lastAssertionPassed; - } - - void RunContext::assertionPassed() { - m_lastAssertionPassed = true; - ++m_totals.assertions.passed; - resetAssertionInfo(); - } - - bool RunContext::aborting() const { - return m_totals.assertions.failed == static_cast(m_config->abortAfter()); - } - - void RunContext::runCurrentTest(std::string & redirectedCout, std::string & redirectedCerr) { - auto 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; - m_shouldReportUnexpected = true; - m_lastAssertionInfo = { "TEST_CASE"_sr, testCaseInfo.lineInfo, StringRef(), ResultDisposition::Normal }; - - seedRng(*m_config); - - Timer timer; - try { - if (m_reporter->getPreferences().shouldRedirectStdOut) { -#if !defined(CATCH_CONFIG_EXPERIMENTAL_REDIRECT) - RedirectedStdOut redirectedStdOut; - RedirectedStdErr redirectedStdErr; - - timer.start(); - invokeActiveTestCase(); - redirectedCout += redirectedStdOut.str(); - redirectedCerr += redirectedStdErr.str(); -#else - OutputRedirect r(redirectedCout, redirectedCerr); - timer.start(); - invokeActiveTestCase(); -#endif - } else { - timer.start(); - invokeActiveTestCase(); - } - duration = timer.getElapsedSeconds(); - } catch (TestFailureException&) { - // This just means the test was aborted due to failure - } catch (...) { - // Under CATCH_CONFIG_FAST_COMPILE, unexpected exceptions under REQUIRE assertions - // are reported without translation at the point of origin. - if( m_shouldReportUnexpected ) { - AssertionReaction dummyReaction; - handleUnexpectedInflightException( m_lastAssertionInfo, translateActiveException(), dummyReaction ); - } - } - Counts assertions = m_totals.assertions - prevAssertions; - bool missingAssertions = testForMissingAssertions(assertions); - - m_testCaseTracker->close(); - handleUnfinishedSections(); - m_messages.clear(); - - SectionStats testCaseSectionStats(testCaseSection, assertions, duration, missingAssertions); - m_reporter->sectionEnded(testCaseSectionStats); - } - - void RunContext::invokeActiveTestCase() { - FatalConditionHandler fatalConditionHandler; // Handle signals - m_activeTestCase->invoke(); - fatalConditionHandler.reset(); - } - - void RunContext::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 (auto it = m_unfinishedSections.rbegin(), - itEnd = m_unfinishedSections.rend(); - it != itEnd; - ++it) - sectionEnded(*it); - m_unfinishedSections.clear(); - } - - void RunContext::handleExpr( - AssertionInfo const& info, - ITransientExpression const& expr, - AssertionReaction& reaction - ) { - m_reporter->assertionStarting( info ); - - bool negated = isFalseTest( info.resultDisposition ); - bool result = expr.getResult() != negated; - - if( result ) { - if (!m_includeSuccessfulResults) { - assertionPassed(); - } - else { - reportExpr(info, ResultWas::Ok, &expr, negated); - } - } - else { - reportExpr(info, ResultWas::ExpressionFailed, &expr, negated ); - populateReaction( reaction ); - } - } - void RunContext::reportExpr( - AssertionInfo const &info, - ResultWas::OfType resultType, - ITransientExpression const *expr, - bool negated ) { - - m_lastAssertionInfo = info; - AssertionResultData data( resultType, LazyExpression( negated ) ); - - AssertionResult assertionResult{ info, data }; - assertionResult.m_resultData.lazyExpression.m_transientExpression = expr; - - assertionEnded( assertionResult ); - } - - void RunContext::handleMessage( - AssertionInfo const& info, - ResultWas::OfType resultType, - StringRef const& message, - AssertionReaction& reaction - ) { - m_reporter->assertionStarting( info ); - - m_lastAssertionInfo = info; - - AssertionResultData data( resultType, LazyExpression( false ) ); - data.message = message; - AssertionResult assertionResult{ m_lastAssertionInfo, data }; - assertionEnded( assertionResult ); - if( !assertionResult.isOk() ) - populateReaction( reaction ); - } - void RunContext::handleUnexpectedExceptionNotThrown( - AssertionInfo const& info, - AssertionReaction& reaction - ) { - handleNonExpr(info, Catch::ResultWas::DidntThrowException, reaction); - } - - void RunContext::handleUnexpectedInflightException( - AssertionInfo const& info, - std::string const& message, - AssertionReaction& reaction - ) { - m_lastAssertionInfo = info; - - AssertionResultData data( ResultWas::ThrewException, LazyExpression( false ) ); - data.message = message; - AssertionResult assertionResult{ info, data }; - assertionEnded( assertionResult ); - populateReaction( reaction ); - } - - void RunContext::populateReaction( AssertionReaction& reaction ) { - reaction.shouldDebugBreak = m_config->shouldDebugBreak(); - reaction.shouldThrow = aborting() || (m_lastAssertionInfo.resultDisposition & ResultDisposition::Normal); - } - - void RunContext::handleIncomplete( - AssertionInfo const& info - ) { - m_lastAssertionInfo = info; - - AssertionResultData data( ResultWas::ThrewException, LazyExpression( false ) ); - data.message = "Exception translation was disabled by CATCH_CONFIG_FAST_COMPILE"; - AssertionResult assertionResult{ info, data }; - assertionEnded( assertionResult ); - } - void RunContext::handleNonExpr( - AssertionInfo const &info, - ResultWas::OfType resultType, - AssertionReaction &reaction - ) { - m_lastAssertionInfo = info; - - AssertionResultData data( resultType, LazyExpression( false ) ); - AssertionResult assertionResult{ info, data }; - assertionEnded( assertionResult ); - - if( !assertionResult.isOk() ) - populateReaction( reaction ); - } - - IResultCapture& getResultCapture() { - if (auto* capture = getCurrentContext().getResultCapture()) - return *capture; - else - CATCH_INTERNAL_ERROR("No result capture instance"); - } -} -// end catch_run_context.cpp -// start catch_section.cpp - -namespace Catch { - - Section::Section( SectionInfo const& info ) - : m_info( info ), - m_sectionIncluded( getResultCapture().sectionStarted( m_info, m_assertions ) ) - { - m_timer.start(); - } - - Section::~Section() { - if( m_sectionIncluded ) { - SectionEndInfo endInfo( m_info, m_assertions, m_timer.getElapsedSeconds() ); - if( uncaught_exceptions() ) - getResultCapture().sectionEndedEarly( endInfo ); - else - getResultCapture().sectionEnded( endInfo ); - } - } - - // This indicates whether the section should be executed or not - Section::operator bool() const { - return m_sectionIncluded; - } - -} // end namespace Catch -// end catch_section.cpp -// start catch_section_info.cpp - -namespace Catch { - - SectionInfo::SectionInfo - ( SourceLineInfo const& _lineInfo, - std::string const& _name, - std::string const& _description ) - : name( _name ), - description( _description ), - lineInfo( _lineInfo ) - {} - - SectionEndInfo::SectionEndInfo( SectionInfo const& _sectionInfo, Counts const& _prevAssertions, double _durationInSeconds ) - : sectionInfo( _sectionInfo ), prevAssertions( _prevAssertions ), durationInSeconds( _durationInSeconds ) - {} - -} // end namespace Catch -// end catch_section_info.cpp -// start catch_session.cpp - -// start catch_session.h - -#include - -namespace Catch { - - class Session : NonCopyable { - public: - - Session(); - ~Session() override; - - void showHelp() const; - void libIdentify(); - - int applyCommandLine( int argc, char const * const * argv ); - - void useConfigData( ConfigData const& configData ); - - int run( int argc, char* argv[] ); - #if defined(CATCH_CONFIG_WCHAR) && defined(WIN32) && defined(UNICODE) - int run( int argc, wchar_t* const argv[] ); - #endif - int run(); - - clara::Parser const& cli() const; - void cli( clara::Parser const& newParser ); - ConfigData& configData(); - Config& config(); - private: - int runInternal(); - - clara::Parser m_cli; - ConfigData m_configData; - std::shared_ptr m_config; - bool m_startupExceptions = false; - }; - -} // end namespace Catch - -// end catch_session.h -// start catch_version.h - -#include - -namespace Catch { - - // Versioning information - struct Version { - Version( Version const& ) = delete; - Version& operator=( Version const& ) = delete; - Version( unsigned int _majorVersion, - unsigned int _minorVersion, - unsigned int _patchNumber, - char const * const _branchName, - unsigned int _buildNumber ); - - unsigned int const majorVersion; - unsigned int const minorVersion; - unsigned int const patchNumber; - - // buildNumber is only used if branchName is not null - char const * const branchName; - unsigned int const buildNumber; - - friend std::ostream& operator << ( std::ostream& os, Version const& version ); - }; - - Version const& libraryVersion(); -} - -// end catch_version.h -#include -#include - -namespace Catch { - - namespace { - const int MaxExitCode = 255; - - IStreamingReporterPtr createReporter(std::string const& reporterName, IConfigPtr const& config) { - auto reporter = Catch::getRegistryHub().getReporterRegistry().create(reporterName, config); - CATCH_ENFORCE(reporter, "No reporter registered with name: '" << reporterName << "'"); - - return reporter; - } - - IStreamingReporterPtr makeReporter(std::shared_ptr const& config) { - if (Catch::getRegistryHub().getReporterRegistry().getListeners().empty()) { - return createReporter(config->getReporterName(), config); - } - - auto multi = std::unique_ptr(new ListeningReporter); - - auto const& listeners = Catch::getRegistryHub().getReporterRegistry().getListeners(); - for (auto const& listener : listeners) { - multi->addListener(listener->create(Catch::ReporterConfig(config))); - } - multi->addReporter(createReporter(config->getReporterName(), config)); - return std::move(multi); - } - - Catch::Totals runTests(std::shared_ptr const& config) { - // FixMe: Add listeners in order first, then add reporters. - - auto reporter = makeReporter(config); - - RunContext context(config, std::move(reporter)); - - Totals totals; - - context.testGroupStarting(config->name(), 1, 1); - - TestSpec testSpec = config->testSpec(); - - auto const& allTestCases = getAllTestCasesSorted(*config); - for (auto const& testCase : allTestCases) { - if (!context.aborting() && matchTest(testCase, testSpec, *config)) - totals += context.runTest(testCase); - else - context.reporter().skipTest(testCase); - } - - if (config->warnAboutNoTests() && totals.testCases.total() == 0) { - ReusableStringStream testConfig; - - bool first = true; - for (const auto& input : config->getTestsOrTags()) { - if (!first) { testConfig << ' '; } - first = false; - testConfig << input; - } - - context.reporter().noMatchingTestCases(testConfig.str()); - totals.error = -1; - } - - context.testGroupEnded(config->name(), totals, 1, 1); - return totals; - } - - void applyFilenamesAsTags(Catch::IConfig const& config) { - auto& tests = const_cast&>(getAllTestCasesSorted(config)); - for (auto& testCase : tests) { - auto tags = testCase.tags; - - std::string filename = testCase.lineInfo.file; - auto lastSlash = filename.find_last_of("\\/"); - if (lastSlash != std::string::npos) { - filename.erase(0, lastSlash); - filename[0] = '#'; - } - - auto lastDot = filename.find_last_of('.'); - if (lastDot != std::string::npos) { - filename.erase(lastDot); - } - - tags.push_back(std::move(filename)); - setTags(testCase, tags); - } - } - - } // anon namespace - - Session::Session() { - static bool alreadyInstantiated = false; - if( alreadyInstantiated ) { - try { CATCH_INTERNAL_ERROR( "Only one instance of Catch::Session can ever be used" ); } - catch(...) { getMutableRegistryHub().registerStartupException(); } - } - - const auto& exceptions = getRegistryHub().getStartupExceptionRegistry().getExceptions(); - if ( !exceptions.empty() ) { - m_startupExceptions = true; - Colour colourGuard( Colour::Red ); - Catch::cerr() << "Errors occurred during startup!" << '\n'; - // iterate over all exceptions and notify user - for ( const auto& ex_ptr : exceptions ) { - try { - std::rethrow_exception(ex_ptr); - } catch ( std::exception const& ex ) { - Catch::cerr() << Column( ex.what() ).indent(2) << '\n'; - } - } - } - - alreadyInstantiated = true; - m_cli = makeCommandLineParser( m_configData ); - } - Session::~Session() { - Catch::cleanUp(); - } - - void Session::showHelp() const { - Catch::cout() - << "\nCatch v" << libraryVersion() << "\n" - << m_cli << std::endl - << "For more detailed usage please see the project docs\n" << std::endl; - } - void Session::libIdentify() { - Catch::cout() - << std::left << std::setw(16) << "description: " << "A Catch test executable\n" - << std::left << std::setw(16) << "category: " << "testframework\n" - << std::left << std::setw(16) << "framework: " << "Catch Test\n" - << std::left << std::setw(16) << "version: " << libraryVersion() << std::endl; - } - - int Session::applyCommandLine( int argc, char const * const * argv ) { - if( m_startupExceptions ) - return 1; - - auto result = m_cli.parse( clara::Args( argc, argv ) ); - if( !result ) { - Catch::cerr() - << Colour( Colour::Red ) - << "\nError(s) in input:\n" - << Column( result.errorMessage() ).indent( 2 ) - << "\n\n"; - Catch::cerr() << "Run with -? for usage\n" << std::endl; - return MaxExitCode; - } - - if( m_configData.showHelp ) - showHelp(); - if( m_configData.libIdentify ) - libIdentify(); - m_config.reset(); - return 0; - } - - void Session::useConfigData( ConfigData const& configData ) { - m_configData = configData; - m_config.reset(); - } - - int Session::run( int argc, char* argv[] ) { - if( m_startupExceptions ) - return 1; - int returnCode = applyCommandLine( argc, argv ); - if( returnCode == 0 ) - returnCode = run(); - return returnCode; - } - -#if defined(CATCH_CONFIG_WCHAR) && defined(WIN32) && defined(UNICODE) - int Session::run( int argc, wchar_t* const argv[] ) { - - char **utf8Argv = new char *[ argc ]; - - for ( int i = 0; i < argc; ++i ) { - int bufSize = WideCharToMultiByte( CP_UTF8, 0, argv[i], -1, NULL, 0, NULL, NULL ); - - utf8Argv[ i ] = new char[ bufSize ]; - - WideCharToMultiByte( CP_UTF8, 0, argv[i], -1, utf8Argv[i], bufSize, NULL, NULL ); - } - - int returnCode = run( argc, utf8Argv ); - - for ( int i = 0; i < argc; ++i ) - delete [] utf8Argv[ i ]; - - delete [] utf8Argv; - - return returnCode; - } -#endif - int Session::run() { - if( ( m_configData.waitForKeypress & WaitForKeypress::BeforeStart ) != 0 ) { - Catch::cout() << "...waiting for enter/ return before starting" << std::endl; - static_cast(std::getchar()); - } - int exitCode = runInternal(); - if( ( m_configData.waitForKeypress & WaitForKeypress::BeforeExit ) != 0 ) { - Catch::cout() << "...waiting for enter/ return before exiting, with code: " << exitCode << std::endl; - static_cast(std::getchar()); - } - return exitCode; - } - - clara::Parser const& Session::cli() const { - return m_cli; - } - void Session::cli( clara::Parser const& newParser ) { - m_cli = newParser; - } - ConfigData& Session::configData() { - return m_configData; - } - Config& Session::config() { - if( !m_config ) - m_config = std::make_shared( m_configData ); - return *m_config; - } - - int Session::runInternal() { - if( m_startupExceptions ) - return 1; - - if( m_configData.showHelp || m_configData.libIdentify ) - return 0; - - try - { - config(); // Force config to be constructed - - seedRng( *m_config ); - - if( m_configData.filenamesAsTags ) - applyFilenamesAsTags( *m_config ); - - // Handle list request - if( Option listed = list( config() ) ) - return static_cast( *listed ); - - auto totals = runTests( m_config ); - // Note that on unices only the lower 8 bits are usually used, clamping - // the return value to 255 prevents false negative when some multiple - // of 256 tests has failed - return (std::min) (MaxExitCode, (std::max) (totals.error, static_cast(totals.assertions.failed))); - } - catch( std::exception& ex ) { - Catch::cerr() << ex.what() << std::endl; - return MaxExitCode; - } - } - -} // end namespace Catch -// end catch_session.cpp -// start catch_startup_exception_registry.cpp - -namespace Catch { - void StartupExceptionRegistry::add( std::exception_ptr const& exception ) noexcept { - try { - m_exceptions.push_back(exception); - } - catch(...) { - // If we run out of memory during start-up there's really not a lot more we can do about it - std::terminate(); - } - } - - std::vector const& StartupExceptionRegistry::getExceptions() const noexcept { - return m_exceptions; - } - -} // end namespace Catch -// end catch_startup_exception_registry.cpp -// start catch_stream.cpp - -#include -#include -#include -#include -#include -#include - -#if defined(__clang__) -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wexit-time-destructors" -#endif - -namespace Catch { - - Catch::IStream::~IStream() = default; - - namespace detail { namespace { - template - class StreamBufImpl : public std::streambuf { - char data[bufferSize]; - WriterF m_writer; - - public: - StreamBufImpl() { - setp( data, data + sizeof(data) ); - } - - ~StreamBufImpl() noexcept { - StreamBufImpl::sync(); - } - - private: - int overflow( int c ) override { - sync(); - - if( c != EOF ) { - if( pbase() == epptr() ) - m_writer( std::string( 1, static_cast( c ) ) ); - else - sputc( static_cast( c ) ); - } - return 0; - } - - int sync() override { - if( pbase() != pptr() ) { - m_writer( std::string( pbase(), static_cast( pptr() - pbase() ) ) ); - setp( pbase(), epptr() ); - } - return 0; - } - }; - - /////////////////////////////////////////////////////////////////////////// - - struct OutputDebugWriter { - - void operator()( std::string const&str ) { - writeToDebugConsole( str ); - } - }; - - /////////////////////////////////////////////////////////////////////////// - - class FileStream : public IStream { - mutable std::ofstream m_ofs; - public: - FileStream( StringRef filename ) { - m_ofs.open( filename.c_str() ); - CATCH_ENFORCE( !m_ofs.fail(), "Unable to open file: '" << filename << "'" ); - } - ~FileStream() override = default; - public: // IStream - std::ostream& stream() const override { - return m_ofs; - } - }; - - /////////////////////////////////////////////////////////////////////////// - - class CoutStream : public IStream { - mutable std::ostream m_os; - public: - // Store the streambuf from cout up-front because - // cout may get redirected when running tests - CoutStream() : m_os( Catch::cout().rdbuf() ) {} - ~CoutStream() override = default; - - public: // IStream - std::ostream& stream() const override { return m_os; } - }; - - /////////////////////////////////////////////////////////////////////////// - - class DebugOutStream : public IStream { - std::unique_ptr> m_streamBuf; - mutable std::ostream m_os; - public: - DebugOutStream() - : m_streamBuf( new StreamBufImpl() ), - m_os( m_streamBuf.get() ) - {} - - ~DebugOutStream() override = default; - - public: // IStream - std::ostream& stream() const override { return m_os; } - }; - - }} // namespace anon::detail - - /////////////////////////////////////////////////////////////////////////// - - auto makeStream( StringRef const &filename ) -> IStream const* { - if( filename.empty() ) - return new detail::CoutStream(); - else if( filename[0] == '%' ) { - if( filename == "%debug" ) - return new detail::DebugOutStream(); - else - CATCH_ERROR( "Unrecognised stream: '" << filename << "'" ); - } - else - return new detail::FileStream( filename ); - } - - // This class encapsulates the idea of a pool of ostringstreams that can be reused. - struct StringStreams { - std::vector> m_streams; - std::vector m_unused; - std::ostringstream m_referenceStream; // Used for copy state/ flags from - static StringStreams* s_instance; - - auto add() -> std::size_t { - if( m_unused.empty() ) { - m_streams.push_back( std::unique_ptr( new std::ostringstream ) ); - return m_streams.size()-1; - } - else { - auto index = m_unused.back(); - m_unused.pop_back(); - return index; - } - } - - void release( std::size_t index ) { - m_streams[index]->copyfmt( m_referenceStream ); // Restore initial flags and other state - m_unused.push_back(index); - } - - // !TBD: put in TLS - static auto instance() -> StringStreams& { - if( !s_instance ) - s_instance = new StringStreams(); - return *s_instance; - } - static void cleanup() { - delete s_instance; - s_instance = nullptr; - } - }; - - StringStreams* StringStreams::s_instance = nullptr; - - void ReusableStringStream::cleanup() { - StringStreams::cleanup(); - } - - ReusableStringStream::ReusableStringStream() - : m_index( StringStreams::instance().add() ), - m_oss( StringStreams::instance().m_streams[m_index].get() ) - {} - - ReusableStringStream::~ReusableStringStream() { - static_cast( m_oss )->str(""); - m_oss->clear(); - StringStreams::instance().release( m_index ); - } - - auto ReusableStringStream::str() const -> std::string { - return static_cast( m_oss )->str(); - } - - /////////////////////////////////////////////////////////////////////////// - -#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& clog() { return std::clog; } -#endif -} - -#if defined(__clang__) -# pragma clang diagnostic pop -#endif -// end catch_stream.cpp -// start catch_string_manip.cpp - -#include -#include -#include -#include - -namespace Catch { - - bool startsWith( std::string const& s, std::string const& prefix ) { - return s.size() >= prefix.size() && std::equal(prefix.begin(), prefix.end(), s.begin()); - } - bool startsWith( std::string const& s, char prefix ) { - return !s.empty() && s[0] == prefix; - } - bool endsWith( std::string const& s, std::string const& suffix ) { - return s.size() >= suffix.size() && std::equal(suffix.rbegin(), suffix.rend(), s.rbegin()); - } - bool endsWith( std::string const& s, char suffix ) { - return !s.empty() && s[s.size()-1] == suffix; - } - bool contains( std::string const& s, std::string const& infix ) { - return s.find( infix ) != std::string::npos; - } - char toLowerCh(char c) { - return static_cast( std::tolower( c ) ); - } - void toLowerInPlace( std::string& s ) { - std::transform( s.begin(), s.end(), s.begin(), toLowerCh ); - } - 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 ) : std::string(); - } - - 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 ) - : 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; - } - -} -// end catch_string_manip.cpp -// start catch_stringref.cpp - -#if defined(__clang__) -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wexit-time-destructors" -#endif - -#include -#include -#include - -namespace { - const uint32_t byte_2_lead = 0xC0; - const uint32_t byte_3_lead = 0xE0; - const uint32_t byte_4_lead = 0xF0; -} - -namespace Catch { - StringRef::StringRef( char const* rawChars ) noexcept - : StringRef( rawChars, static_cast(std::strlen(rawChars) ) ) - {} - - StringRef::operator std::string() const { - return std::string( m_start, m_size ); - } - - void StringRef::swap( StringRef& other ) noexcept { - std::swap( m_start, other.m_start ); - std::swap( m_size, other.m_size ); - std::swap( m_data, other.m_data ); - } - - auto StringRef::c_str() const -> char const* { - if( isSubstring() ) - const_cast( this )->takeOwnership(); - return m_start; - } - auto StringRef::currentData() const noexcept -> char const* { - return m_start; - } - - auto StringRef::isOwned() const noexcept -> bool { - return m_data != nullptr; - } - auto StringRef::isSubstring() const noexcept -> bool { - return m_start[m_size] != '\0'; - } - - void StringRef::takeOwnership() { - if( !isOwned() ) { - m_data = new char[m_size+1]; - memcpy( m_data, m_start, m_size ); - m_data[m_size] = '\0'; - m_start = m_data; - } - } - auto StringRef::substr( size_type start, size_type size ) const noexcept -> StringRef { - if( start < m_size ) - return StringRef( m_start+start, size ); - else - return StringRef(); - } - auto StringRef::operator == ( StringRef const& other ) const noexcept -> bool { - return - size() == other.size() && - (std::strncmp( m_start, other.m_start, size() ) == 0); - } - auto StringRef::operator != ( StringRef const& other ) const noexcept -> bool { - return !operator==( other ); - } - - auto StringRef::operator[](size_type index) const noexcept -> char { - return m_start[index]; - } - - auto StringRef::numberOfCharacters() const noexcept -> size_type { - size_type noChars = m_size; - // Make adjustments for uft encodings - for( size_type i=0; i < m_size; ++i ) { - char c = m_start[i]; - if( ( c & byte_2_lead ) == byte_2_lead ) { - noChars--; - if (( c & byte_3_lead ) == byte_3_lead ) - noChars--; - if( ( c & byte_4_lead ) == byte_4_lead ) - noChars--; - } - } - return noChars; - } - - auto operator + ( StringRef const& lhs, StringRef const& rhs ) -> std::string { - std::string str; - str.reserve( lhs.size() + rhs.size() ); - str += lhs; - str += rhs; - return str; - } - auto operator + ( StringRef const& lhs, const char* rhs ) -> std::string { - return std::string( lhs ) + std::string( rhs ); - } - auto operator + ( char const* lhs, StringRef const& rhs ) -> std::string { - return std::string( lhs ) + std::string( rhs ); - } - - auto operator << ( std::ostream& os, StringRef const& str ) -> std::ostream& { - return os.write(str.currentData(), str.size()); - } - - auto operator+=( std::string& lhs, StringRef const& rhs ) -> std::string& { - lhs.append(rhs.currentData(), rhs.size()); - return lhs; - } - -} // namespace Catch - -#if defined(__clang__) -# pragma clang diagnostic pop -#endif -// end catch_stringref.cpp -// start catch_tag_alias.cpp - -namespace Catch { - TagAlias::TagAlias(std::string const & _tag, SourceLineInfo _lineInfo): tag(_tag), lineInfo(_lineInfo) {} -} -// end catch_tag_alias.cpp -// start catch_tag_alias_autoregistrar.cpp - -namespace Catch { - - RegistrarForTagAliases::RegistrarForTagAliases(char const* alias, char const* tag, SourceLineInfo const& lineInfo) { - try { - getMutableRegistryHub().registerTagAlias(alias, tag, lineInfo); - } catch (...) { - // Do not throw when constructing global objects, instead register the exception to be processed later - getMutableRegistryHub().registerStartupException(); - } - } - -} -// end catch_tag_alias_autoregistrar.cpp -// start catch_tag_alias_registry.cpp - -#include - -namespace Catch { - - TagAliasRegistry::~TagAliasRegistry() {} - - TagAlias const* TagAliasRegistry::find( std::string const& alias ) const { - auto it = m_registry.find( alias ); - if( it != m_registry.end() ) - return &(it->second); - else - return nullptr; - } - - std::string TagAliasRegistry::expandAliases( std::string const& unexpandedTestSpec ) const { - std::string expandedTestSpec = unexpandedTestSpec; - for( auto const& registryKvp : m_registry ) { - std::size_t pos = expandedTestSpec.find( registryKvp.first ); - if( pos != std::string::npos ) { - expandedTestSpec = expandedTestSpec.substr( 0, pos ) + - registryKvp.second.tag + - expandedTestSpec.substr( pos + registryKvp.first.size() ); - } - } - return expandedTestSpec; - } - - void TagAliasRegistry::add( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ) { - CATCH_ENFORCE( startsWith(alias, "[@") && endsWith(alias, ']'), - "error: tag alias, '" << alias << "' is not of the form [@alias name].\n" << lineInfo ); - - CATCH_ENFORCE( m_registry.insert(std::make_pair(alias, TagAlias(tag, lineInfo))).second, - "error: tag alias, '" << alias << "' already registered.\n" - << "\tFirst seen at: " << find(alias)->lineInfo << "\n" - << "\tRedefined at: " << lineInfo ); - } - - ITagAliasRegistry::~ITagAliasRegistry() {} - - ITagAliasRegistry const& ITagAliasRegistry::get() { - return getRegistryHub().getTagAliasRegistry(); - } - -} // end namespace Catch -// end catch_tag_alias_registry.cpp -// start catch_test_case_info.cpp - -#include -#include -#include -#include - -namespace Catch { - - TestCaseInfo::SpecialProperties parseSpecialTag( std::string const& tag ) { - if( startsWith( tag, '.' ) || - 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 if( tag == "!nonportable" ) - return TestCaseInfo::NonPortable; - else if( tag == "!benchmark" ) - return static_cast( TestCaseInfo::Benchmark | TestCaseInfo::IsHidden ); - else - return TestCaseInfo::None; - } - bool isReservedTag( std::string const& tag ) { - return parseSpecialTag( tag ) == TestCaseInfo::None && tag.size() > 0 && !std::isalnum( static_cast(tag[0]) ); - } - void enforceNotReservedTag( std::string const& tag, SourceLineInfo const& _lineInfo ) { - CATCH_ENFORCE( !isReservedTag(tag), - "Tag name: [" << tag << "] is not allowed.\n" - << "Tag names starting with non alpha-numeric characters are reserved\n" - << _lineInfo ); - } - - TestCase makeTestCase( ITestInvoker* _testCase, - std::string const& _className, - NameAndTags const& nameAndTags, - SourceLineInfo const& _lineInfo ) - { - bool isHidden = false; - - // Parse out tags - std::vector tags; - std::string desc, tag; - bool inTag = false; - std::string _descOrTags = nameAndTags.tags; - for (char c : _descOrTags) { - if( !inTag ) { - if( c == '[' ) - inTag = true; - else - desc += c; - } - else { - if( c == ']' ) { - TestCaseInfo::SpecialProperties prop = parseSpecialTag( tag ); - if( ( prop & TestCaseInfo::IsHidden ) != 0 ) - isHidden = true; - else if( prop == TestCaseInfo::None ) - enforceNotReservedTag( tag, _lineInfo ); - - tags.push_back( tag ); - tag.clear(); - inTag = false; - } - else - tag += c; - } - } - if( isHidden ) { - tags.push_back( "." ); - } - - TestCaseInfo info( nameAndTags.name, _className, desc, tags, _lineInfo ); - return TestCase( _testCase, std::move(info) ); - } - - void setTags( TestCaseInfo& testCaseInfo, std::vector tags ) { - std::sort(begin(tags), end(tags)); - tags.erase(std::unique(begin(tags), end(tags)), end(tags)); - testCaseInfo.lcaseTags.clear(); - - for( auto const& tag : tags ) { - std::string lcaseTag = toLower( tag ); - testCaseInfo.properties = static_cast( testCaseInfo.properties | parseSpecialTag( lcaseTag ) ); - testCaseInfo.lcaseTags.push_back( lcaseTag ); - } - testCaseInfo.tags = std::move(tags); - } - - TestCaseInfo::TestCaseInfo( std::string const& _name, - std::string const& _className, - std::string const& _description, - std::vector const& _tags, - SourceLineInfo const& _lineInfo ) - : name( _name ), - className( _className ), - description( _description ), - lineInfo( _lineInfo ), - properties( None ) - { - setTags( *this, _tags ); - } - - 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; - } - - std::string TestCaseInfo::tagsAsString() const { - std::string ret; - // '[' and ']' per tag - std::size_t full_size = 2 * tags.size(); - for (const auto& tag : tags) { - full_size += tag.size(); - } - ret.reserve(full_size); - for (const auto& tag : tags) { - ret.push_back('['); - ret.append(tag); - ret.push_back(']'); - } - - return ret; - } - - TestCase::TestCase( ITestInvoker* testCase, TestCaseInfo&& info ) : TestCaseInfo( std::move(info) ), test( testCase ) {} - - TestCase TestCase::withName( std::string const& _newName ) const { - TestCase other( *this ); - other.name = _newName; - return other; - } - - 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 name < other.name; - } - - TestCaseInfo const& TestCase::getTestCaseInfo() const - { - return *this; - } - -} // end namespace Catch -// end catch_test_case_info.cpp -// start catch_test_case_registry_impl.cpp - -#include - -namespace Catch { - - std::vector sortTests( IConfig const& config, std::vector const& 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; - } - 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( auto const& function : functions ) { - auto prev = seenFunctions.insert( function ); - CATCH_ENFORCE( prev.second, - "error: TEST_CASE( \"" << function.name << "\" ) already defined.\n" - << "\tFirst seen at " << prev.first->getTestCaseInfo().lineInfo << "\n" - << "\tRedefined at " << function.getTestCaseInfo().lineInfo ); - } - } - - std::vector filterTests( std::vector const& testCases, TestSpec const& testSpec, IConfig const& config ) { - std::vector filtered; - filtered.reserve( testCases.size() ); - for( auto const& testCase : testCases ) - if( matchTest( testCase, testSpec, config ) ) - filtered.push_back( testCase ); - return filtered; - } - std::vector const& getAllTestCasesSorted( IConfig const& config ) { - return getRegistryHub().getTestCaseRegistry().getAllTestsSorted( config ); - } - - void TestRegistry::registerTest( TestCase const& testCase ) { - std::string name = testCase.getTestCaseInfo().name; - if( name.empty() ) { - ReusableStringStream rss; - rss << "Anonymous test case " << ++m_unnamedCount; - return registerTest( testCase.withName( rss.str() ) ); - } - m_functions.push_back( testCase ); - } - - std::vector const& TestRegistry::getAllTests() const { - return m_functions; - } - std::vector const& TestRegistry::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; - } - - /////////////////////////////////////////////////////////////////////////// - TestInvokerAsFunction::TestInvokerAsFunction( void(*testAsFunction)() ) noexcept : m_testAsFunction( testAsFunction ) {} - - void TestInvokerAsFunction::invoke() const { - m_testAsFunction(); - } - - std::string extractClassName( StringRef 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 ); - } - return className; - } - -} // end namespace Catch -// end catch_test_case_registry_impl.cpp -// start catch_test_case_tracker.cpp - -#include -#include -#include -#include -#include - -#if defined(__clang__) -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wexit-time-destructors" -#endif - -namespace Catch { -namespace TestCaseTracking { - - NameAndLocation::NameAndLocation( std::string const& _name, SourceLineInfo const& _location ) - : name( _name ), - location( _location ) - {} - - ITracker::~ITracker() = default; - - TrackerContext& TrackerContext::instance() { - static TrackerContext s_instance; - return s_instance; - } - - ITracker& TrackerContext::startRun() { - m_rootTracker = std::make_shared( NameAndLocation( "{root}", CATCH_INTERNAL_LINEINFO ), *this, nullptr ); - m_currentTracker = nullptr; - m_runState = Executing; - return *m_rootTracker; - } - - void TrackerContext::endRun() { - m_rootTracker.reset(); - m_currentTracker = nullptr; - m_runState = NotStarted; - } - - void TrackerContext::startCycle() { - m_currentTracker = m_rootTracker.get(); - m_runState = Executing; - } - void TrackerContext::completeCycle() { - m_runState = CompletedCycle; - } - - bool TrackerContext::completedCycle() const { - return m_runState == CompletedCycle; - } - ITracker& TrackerContext::currentTracker() { - return *m_currentTracker; - } - void TrackerContext::setCurrentTracker( ITracker* tracker ) { - m_currentTracker = tracker; - } - - TrackerBase::TrackerHasName::TrackerHasName( NameAndLocation const& nameAndLocation ) : m_nameAndLocation( nameAndLocation ) {} - bool TrackerBase::TrackerHasName::operator ()( ITrackerPtr const& tracker ) const { - return - tracker->nameAndLocation().name == m_nameAndLocation.name && - tracker->nameAndLocation().location == m_nameAndLocation.location; - } - - TrackerBase::TrackerBase( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent ) - : m_nameAndLocation( nameAndLocation ), - m_ctx( ctx ), - m_parent( parent ) - {} - - NameAndLocation const& TrackerBase::nameAndLocation() const { - return m_nameAndLocation; - } - bool TrackerBase::isComplete() const { - return m_runState == CompletedSuccessfully || m_runState == Failed; - } - bool TrackerBase::isSuccessfullyCompleted() const { - return m_runState == CompletedSuccessfully; - } - bool TrackerBase::isOpen() const { - return m_runState != NotStarted && !isComplete(); - } - bool TrackerBase::hasChildren() const { - return !m_children.empty(); - } - - void TrackerBase::addChild( ITrackerPtr const& child ) { - m_children.push_back( child ); - } - - ITrackerPtr TrackerBase::findChild( NameAndLocation const& nameAndLocation ) { - auto it = std::find_if( m_children.begin(), m_children.end(), TrackerHasName( nameAndLocation ) ); - return( it != m_children.end() ) - ? *it - : nullptr; - } - ITracker& TrackerBase::parent() { - assert( m_parent ); // Should always be non-null except for root - return *m_parent; - } - - void TrackerBase::openChild() { - if( m_runState != ExecutingChildren ) { - m_runState = ExecutingChildren; - if( m_parent ) - m_parent->openChild(); - } - } - - bool TrackerBase::isSectionTracker() const { return false; } - bool TrackerBase::isIndexTracker() const { return false; } - - void TrackerBase::open() { - m_runState = Executing; - moveToThis(); - if( m_parent ) - m_parent->openChild(); - } - - void TrackerBase::close() { - - // Close any still open children (e.g. generators) - while( &m_ctx.currentTracker() != this ) - m_ctx.currentTracker().close(); - - switch( m_runState ) { - case NeedsAnotherRun: - break; - - case Executing: - m_runState = CompletedSuccessfully; - break; - case ExecutingChildren: - if( m_children.empty() || m_children.back()->isComplete() ) - m_runState = CompletedSuccessfully; - break; - - case NotStarted: - case CompletedSuccessfully: - case Failed: - CATCH_INTERNAL_ERROR( "Illogical state: " << m_runState ); - - default: - CATCH_INTERNAL_ERROR( "Unknown state: " << m_runState ); - } - moveToParent(); - m_ctx.completeCycle(); - } - void TrackerBase::fail() { - m_runState = Failed; - if( m_parent ) - m_parent->markAsNeedingAnotherRun(); - moveToParent(); - m_ctx.completeCycle(); - } - void TrackerBase::markAsNeedingAnotherRun() { - m_runState = NeedsAnotherRun; - } - - void TrackerBase::moveToParent() { - assert( m_parent ); - m_ctx.setCurrentTracker( m_parent ); - } - void TrackerBase::moveToThis() { - m_ctx.setCurrentTracker( this ); - } - - SectionTracker::SectionTracker( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent ) - : TrackerBase( nameAndLocation, ctx, parent ) - { - if( parent ) { - while( !parent->isSectionTracker() ) - parent = &parent->parent(); - - SectionTracker& parentSection = static_cast( *parent ); - addNextFilters( parentSection.m_filters ); - } - } - - bool SectionTracker::isSectionTracker() const { return true; } - - SectionTracker& SectionTracker::acquire( TrackerContext& ctx, NameAndLocation const& nameAndLocation ) { - std::shared_ptr section; - - ITracker& currentTracker = ctx.currentTracker(); - if( ITrackerPtr childTracker = currentTracker.findChild( nameAndLocation ) ) { - assert( childTracker ); - assert( childTracker->isSectionTracker() ); - section = std::static_pointer_cast( childTracker ); - } - else { - section = std::make_shared( nameAndLocation, ctx, ¤tTracker ); - currentTracker.addChild( section ); - } - if( !ctx.completedCycle() ) - section->tryOpen(); - return *section; - } - - void SectionTracker::tryOpen() { - if( !isComplete() && (m_filters.empty() || m_filters[0].empty() || m_filters[0] == m_nameAndLocation.name ) ) - open(); - } - - void SectionTracker::addInitialFilters( std::vector const& filters ) { - if( !filters.empty() ) { - m_filters.push_back(""); // Root - should never be consulted - m_filters.push_back(""); // Test Case - not a section filter - m_filters.insert( m_filters.end(), filters.begin(), filters.end() ); - } - } - void SectionTracker::addNextFilters( std::vector const& filters ) { - if( filters.size() > 1 ) - m_filters.insert( m_filters.end(), ++filters.begin(), filters.end() ); - } - - IndexTracker::IndexTracker( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent, int size ) - : TrackerBase( nameAndLocation, ctx, parent ), - m_size( size ) - {} - - bool IndexTracker::isIndexTracker() const { return true; } - - IndexTracker& IndexTracker::acquire( TrackerContext& ctx, NameAndLocation const& nameAndLocation, int size ) { - std::shared_ptr tracker; - - ITracker& currentTracker = ctx.currentTracker(); - if( ITrackerPtr childTracker = currentTracker.findChild( nameAndLocation ) ) { - assert( childTracker ); - assert( childTracker->isIndexTracker() ); - tracker = std::static_pointer_cast( childTracker ); - } - else { - tracker = std::make_shared( nameAndLocation, ctx, ¤tTracker, size ); - currentTracker.addChild( tracker ); - } - - if( !ctx.completedCycle() && !tracker->isComplete() ) { - if( tracker->m_runState != ExecutingChildren && tracker->m_runState != NeedsAnotherRun ) - tracker->moveNext(); - tracker->open(); - } - - return *tracker; - } - - int IndexTracker::index() const { return m_index; } - - void IndexTracker::moveNext() { - m_index++; - m_children.clear(); - } - - void IndexTracker::close() { - TrackerBase::close(); - if( m_runState == CompletedSuccessfully && m_index < m_size-1 ) - m_runState = Executing; - } - -} // namespace TestCaseTracking - -using TestCaseTracking::ITracker; -using TestCaseTracking::TrackerContext; -using TestCaseTracking::SectionTracker; -using TestCaseTracking::IndexTracker; - -} // namespace Catch - -#if defined(__clang__) -# pragma clang diagnostic pop -#endif -// end catch_test_case_tracker.cpp -// start catch_test_registry.cpp - -namespace Catch { - - auto makeTestInvoker( void(*testAsFunction)() ) noexcept -> ITestInvoker* { - return new(std::nothrow) TestInvokerAsFunction( testAsFunction ); - } - - NameAndTags::NameAndTags( StringRef const& name_ , StringRef const& tags_ ) noexcept : name( name_ ), tags( tags_ ) {} - - AutoReg::AutoReg( ITestInvoker* invoker, SourceLineInfo const& lineInfo, StringRef const& classOrMethod, NameAndTags const& nameAndTags ) noexcept { - try { - getMutableRegistryHub() - .registerTest( - makeTestCase( - invoker, - extractClassName( classOrMethod ), - nameAndTags, - lineInfo)); - } catch (...) { - // Do not throw when constructing global objects, instead register the exception to be processed later - getMutableRegistryHub().registerStartupException(); - } - } - - AutoReg::~AutoReg() = default; -} -// end catch_test_registry.cpp -// start catch_test_spec.cpp - -#include -#include -#include -#include - -namespace Catch { - - TestSpec::Pattern::~Pattern() = default; - TestSpec::NamePattern::~NamePattern() = default; - TestSpec::TagPattern::~TagPattern() = default; - TestSpec::ExcludedPattern::~ExcludedPattern() = default; - - TestSpec::NamePattern::NamePattern( std::string const& name ) - : m_wildcardPattern( toLower( name ), CaseSensitive::No ) - {} - bool TestSpec::NamePattern::matches( TestCaseInfo const& testCase ) const { - return m_wildcardPattern.matches( toLower( testCase.name ) ); - } - - TestSpec::TagPattern::TagPattern( std::string const& tag ) : m_tag( toLower( tag ) ) {} - bool TestSpec::TagPattern::matches( TestCaseInfo const& testCase ) const { - return std::find(begin(testCase.lcaseTags), - end(testCase.lcaseTags), - m_tag) != end(testCase.lcaseTags); - } - - TestSpec::ExcludedPattern::ExcludedPattern( PatternPtr const& underlyingPattern ) : m_underlyingPattern( underlyingPattern ) {} - bool TestSpec::ExcludedPattern::matches( TestCaseInfo const& testCase ) const { return !m_underlyingPattern->matches( testCase ); } - - bool TestSpec::Filter::matches( TestCaseInfo const& testCase ) const { - // All patterns in a filter must match for the filter to be a match - for( auto const& pattern : m_patterns ) { - if( !pattern->matches( testCase ) ) - return false; - } - return true; - } - - bool TestSpec::hasFilters() const { - return !m_filters.empty(); - } - bool TestSpec::matches( TestCaseInfo const& testCase ) const { - // A TestSpec matches if any filter matches - for( auto const& filter : m_filters ) - if( filter.matches( testCase ) ) - return true; - return false; - } -} -// end catch_test_spec.cpp -// start catch_test_spec_parser.cpp - -namespace Catch { - - TestSpecParser::TestSpecParser( ITagAliasRegistry const& tagAliases ) : m_tagAliases( &tagAliases ) {} - - TestSpecParser& TestSpecParser::parse( std::string const& arg ) { - m_mode = None; - m_exclusion = false; - m_start = std::string::npos; - m_arg = m_tagAliases->expandAliases( arg ); - m_escapeChars.clear(); - for( m_pos = 0; m_pos < m_arg.size(); ++m_pos ) - visitChar( m_arg[m_pos] ); - if( m_mode == Name ) - addPattern(); - return *this; - } - TestSpec TestSpecParser::testSpec() { - addFilter(); - return m_testSpec; - } - - void TestSpecParser::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 ); - case '\\': return escape(); - default: startNewMode( Name, m_pos ); break; - } - } - if( m_mode == Name ) { - if( c == ',' ) { - addPattern(); - addFilter(); - } - else if( c == '[' ) { - if( subString() == "exclude:" ) - m_exclusion = true; - else - addPattern(); - startNewMode( Tag, ++m_pos ); - } - else if( c == '\\' ) - escape(); - } - else if( m_mode == EscapedName ) - m_mode = Name; - else if( m_mode == QuotedName && c == '"' ) - addPattern(); - else if( m_mode == Tag && c == ']' ) - addPattern(); - } - void TestSpecParser::startNewMode( Mode mode, std::size_t start ) { - m_mode = mode; - m_start = start; - } - void TestSpecParser::escape() { - if( m_mode == None ) - m_start = m_pos; - m_mode = EscapedName; - m_escapeChars.push_back( m_pos ); - } - std::string TestSpecParser::subString() const { return m_arg.substr( m_start, m_pos - m_start ); } - - void TestSpecParser::addFilter() { - if( !m_currentFilter.m_patterns.empty() ) { - m_testSpec.m_filters.push_back( m_currentFilter ); - m_currentFilter = TestSpec::Filter(); - } - } - - TestSpec parseTestSpec( std::string const& arg ) { - return TestSpecParser( ITagAliasRegistry::get() ).parse( arg ).testSpec(); - } - -} // namespace Catch -// end catch_test_spec_parser.cpp -// start catch_timer.cpp - -#include - -static const uint64_t nanosecondsInSecond = 1000000000; - -namespace Catch { - - auto getCurrentNanosecondsSinceEpoch() -> uint64_t { - return std::chrono::duration_cast( std::chrono::high_resolution_clock::now().time_since_epoch() ).count(); - } - - auto estimateClockResolution() -> uint64_t { - uint64_t sum = 0; - static const uint64_t iterations = 1000000; - - auto startTime = getCurrentNanosecondsSinceEpoch(); - - for( std::size_t i = 0; i < iterations; ++i ) { - - uint64_t ticks; - uint64_t baseTicks = getCurrentNanosecondsSinceEpoch(); - do { - ticks = getCurrentNanosecondsSinceEpoch(); - } while( ticks == baseTicks ); - - auto delta = ticks - baseTicks; - sum += delta; - - // If we have been calibrating for over 3 seconds -- the clock - // is terrible and we should move on. - // TBD: How to signal that the measured resolution is probably wrong? - if (ticks > startTime + 3 * nanosecondsInSecond) { - return sum / i; - } - } - - // We're just taking the mean, here. To do better we could take the std. dev and exclude outliers - // - and potentially do more iterations if there's a high variance. - return sum/iterations; - } - auto getEstimatedClockResolution() -> uint64_t { - static auto s_resolution = estimateClockResolution(); - return s_resolution; - } - - void Timer::start() { - m_nanoseconds = getCurrentNanosecondsSinceEpoch(); - } - auto Timer::getElapsedNanoseconds() const -> uint64_t { - return getCurrentNanosecondsSinceEpoch() - m_nanoseconds; - } - auto Timer::getElapsedMicroseconds() const -> uint64_t { - return getElapsedNanoseconds()/1000; - } - auto Timer::getElapsedMilliseconds() const -> unsigned int { - return static_cast(getElapsedMicroseconds()/1000); - } - auto Timer::getElapsedSeconds() const -> double { - return getElapsedMicroseconds()/1000000.0; - } - -} // namespace Catch -// end catch_timer.cpp -// start catch_tostring.cpp - -#if defined(__clang__) -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wexit-time-destructors" -# pragma clang diagnostic ignored "-Wglobal-constructors" -#endif - -// Enable specific decls locally -#if !defined(CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER) -#define CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER -#endif - -#include -#include - -namespace Catch { - -namespace Detail { - - const std::string unprintableString = "{?}"; - - namespace { - const int hexThreshold = 255; - - struct Endianness { - enum Arch { Big, Little }; - - static Arch which() { - union _{ - int asInt; - char asChar[sizeof (int)]; - } u; - - 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; - } - - unsigned char const *bytes = static_cast(object); - ReusableStringStream rss; - rss << "0x" << std::setfill('0') << std::hex; - for( ; i != end; i += inc ) - rss << std::setw(2) << static_cast(bytes[i]); - return rss.str(); - } -} - -template -std::string fpToString( T value, int precision ) { - if (std::isnan(value)) { - return "nan"; - } - - ReusableStringStream rss; - rss << std::setprecision( precision ) - << std::fixed - << value; - std::string d = rss.str(); - std::size_t i = d.find_last_not_of( '0' ); - if( i != std::string::npos && i != d.size()-1 ) { - if( d[i] == '.' ) - i++; - d = d.substr( 0, i+1 ); - } - return d; -} - -//// ======================================================= //// -// -// Out-of-line defs for full specialization of StringMaker -// -//// ======================================================= //// - -std::string StringMaker::convert(const std::string& str) { - if (!getCurrentContext().getConfig()->showInvisibles()) { - return '"' + str + '"'; - } - - std::string s("\""); - for (char c : str) { - switch (c) { - case '\n': - s.append("\\n"); - break; - case '\t': - s.append("\\t"); - break; - default: - s.push_back(c); - break; - } - } - s.append("\""); - return s; -} - -#ifdef CATCH_CONFIG_WCHAR -std::string StringMaker::convert(const std::wstring& wstr) { - std::string s; - s.reserve(wstr.size()); - for (auto c : wstr) { - s += (c <= 0xff) ? static_cast(c) : '?'; - } - return ::Catch::Detail::stringify(s); -} -#endif - -std::string StringMaker::convert(char const* str) { - if (str) { - return ::Catch::Detail::stringify(std::string{ str }); - } else { - return{ "{null string}" }; - } -} -std::string StringMaker::convert(char* str) { - if (str) { - return ::Catch::Detail::stringify(std::string{ str }); - } else { - return{ "{null string}" }; - } -} -#ifdef CATCH_CONFIG_WCHAR -std::string StringMaker::convert(wchar_t const * str) { - if (str) { - return ::Catch::Detail::stringify(std::wstring{ str }); - } else { - return{ "{null string}" }; - } -} -std::string StringMaker::convert(wchar_t * str) { - if (str) { - return ::Catch::Detail::stringify(std::wstring{ str }); - } else { - return{ "{null string}" }; - } -} -#endif - -std::string StringMaker::convert(int value) { - return ::Catch::Detail::stringify(static_cast(value)); -} -std::string StringMaker::convert(long value) { - return ::Catch::Detail::stringify(static_cast(value)); -} -std::string StringMaker::convert(long long value) { - ReusableStringStream rss; - rss << value; - if (value > Detail::hexThreshold) { - rss << " (0x" << std::hex << value << ')'; - } - return rss.str(); -} - -std::string StringMaker::convert(unsigned int value) { - return ::Catch::Detail::stringify(static_cast(value)); -} -std::string StringMaker::convert(unsigned long value) { - return ::Catch::Detail::stringify(static_cast(value)); -} -std::string StringMaker::convert(unsigned long long value) { - ReusableStringStream rss; - rss << value; - if (value > Detail::hexThreshold) { - rss << " (0x" << std::hex << value << ')'; - } - return rss.str(); -} - -std::string StringMaker::convert(bool b) { - return b ? "true" : "false"; -} - -std::string StringMaker::convert(char value) { - if (value == '\r') { - return "'\\r'"; - } else if (value == '\f') { - return "'\\f'"; - } else if (value == '\n') { - return "'\\n'"; - } else if (value == '\t') { - return "'\\t'"; - } else if ('\0' <= value && value < ' ') { - return ::Catch::Detail::stringify(static_cast(value)); - } else { - char chstr[] = "' '"; - chstr[1] = value; - return chstr; - } -} -std::string StringMaker::convert(signed char c) { - return ::Catch::Detail::stringify(static_cast(c)); -} -std::string StringMaker::convert(unsigned char c) { - return ::Catch::Detail::stringify(static_cast(c)); -} - -std::string StringMaker::convert(std::nullptr_t) { - return "nullptr"; -} - -std::string StringMaker::convert(float value) { - return fpToString(value, 5) + 'f'; -} -std::string StringMaker::convert(double value) { - return fpToString(value, 10); -} - -std::string ratio_string::symbol() { return "a"; } -std::string ratio_string::symbol() { return "f"; } -std::string ratio_string::symbol() { return "p"; } -std::string ratio_string::symbol() { return "n"; } -std::string ratio_string::symbol() { return "u"; } -std::string ratio_string::symbol() { return "m"; } - -} // end namespace Catch - -#if defined(__clang__) -# pragma clang diagnostic pop -#endif - -// end catch_tostring.cpp -// start catch_totals.cpp - -namespace Catch { - - Counts 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& Counts::operator += ( Counts const& other ) { - passed += other.passed; - failed += other.failed; - failedButOk += other.failedButOk; - return *this; - } - - std::size_t Counts::total() const { - return passed + failed + failedButOk; - } - bool Counts::allPassed() const { - return failed == 0 && failedButOk == 0; - } - bool Counts::allOk() const { - return failed == 0; - } - - Totals Totals::operator - ( Totals const& other ) const { - Totals diff; - diff.assertions = assertions - other.assertions; - diff.testCases = testCases - other.testCases; - return diff; - } - - Totals& Totals::operator += ( Totals const& other ) { - assertions += other.assertions; - testCases += other.testCases; - return *this; - } - - Totals 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; - } - -} -// end catch_totals.cpp -// start catch_uncaught_exceptions.cpp - -#include - -namespace Catch { - bool uncaught_exceptions() { -#if defined(CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS) - return std::uncaught_exceptions() > 0; -#else - return std::uncaught_exception(); -#endif - } -} // end namespace Catch -// end catch_uncaught_exceptions.cpp -// start catch_version.cpp - -#include - -namespace Catch { - - Version::Version - ( unsigned int _majorVersion, - unsigned int _minorVersion, - unsigned int _patchNumber, - char const * 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; - // branchName is never null -> 0th char is \0 if it is empty - if (version.branchName[0]) { - os << '-' << version.branchName - << '.' << version.buildNumber; - } - return os; - } - - Version const& libraryVersion() { - static Version version( 2, 2, 3, "", 0 ); - return version; - } - -} -// end catch_version.cpp -// start catch_wildcard_pattern.cpp - -#include - -namespace Catch { - - WildcardPattern::WildcardPattern( std::string const& pattern, - CaseSensitive::Choice caseSensitivity ) - : m_caseSensitivity( caseSensitivity ), - 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 ); - } - } - - bool WildcardPattern::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 ); - default: - CATCH_INTERNAL_ERROR( "Unknown enum" ); - } - } - - std::string WildcardPattern::adjustCase( std::string const& str ) const { - return m_caseSensitivity == CaseSensitive::No ? toLower( str ) : str; - } -} -// end catch_wildcard_pattern.cpp -// start catch_xmlwriter.cpp - -#include - -using uchar = unsigned char; - -namespace Catch { - -namespace { - - size_t trailingBytes(unsigned char c) { - if ((c & 0xE0) == 0xC0) { - return 2; - } - if ((c & 0xF0) == 0xE0) { - return 3; - } - if ((c & 0xF8) == 0xF0) { - return 4; - } - CATCH_INTERNAL_ERROR("Invalid multibyte utf-8 start byte encountered"); - } - - uint32_t headerValue(unsigned char c) { - if ((c & 0xE0) == 0xC0) { - return c & 0x1F; - } - if ((c & 0xF0) == 0xE0) { - return c & 0x0F; - } - if ((c & 0xF8) == 0xF0) { - return c & 0x07; - } - CATCH_INTERNAL_ERROR("Invalid multibyte utf-8 start byte encountered"); - } - - void hexEscapeChar(std::ostream& os, unsigned char c) { - os << "\\x" - << std::uppercase << std::hex << std::setfill('0') << std::setw(2) - << static_cast(c); - } - -} // anonymous namespace - - XmlEncode::XmlEncode( std::string const& str, ForWhat forWhat ) - : m_str( str ), - m_forWhat( forWhat ) - {} - - void XmlEncode::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 idx = 0; idx < m_str.size(); ++ idx ) { - uchar c = m_str[idx]; - switch (c) { - case '<': os << "<"; break; - case '&': os << "&"; break; - - case '>': - // See: http://www.w3.org/TR/xml/#syntax - if (idx > 2 && m_str[idx - 1] == ']' && m_str[idx - 2] == ']') - os << ">"; - else - os << c; - break; - - case '\"': - if (m_forWhat == ForAttributes) - os << """; - else - os << c; - break; - - default: - // Check for control characters and invalid utf-8 - - // Escape control characters in standard ascii - // see http://stackoverflow.com/questions/404107/why-are-control-characters-illegal-in-xml-1-0 - if (c < 0x09 || (c > 0x0D && c < 0x20) || c == 0x7F) { - hexEscapeChar(os, c); - break; - } - - // Plain ASCII: Write it to stream - if (c < 0x7F) { - os << c; - break; - } - - // UTF-8 territory - // Check if the encoding is valid and if it is not, hex escape bytes. - // Important: We do not check the exact decoded values for validity, only the encoding format - // First check that this bytes is a valid lead byte: - // This means that it is not encoded as 1111 1XXX - // Or as 10XX XXXX - if (c < 0xC0 || - c >= 0xF8) { - hexEscapeChar(os, c); - break; - } - - auto encBytes = trailingBytes(c); - // Are there enough bytes left to avoid accessing out-of-bounds memory? - if (idx + encBytes - 1 >= m_str.size()) { - hexEscapeChar(os, c); - break; - } - // The header is valid, check data - // The next encBytes bytes must together be a valid utf-8 - // This means: bitpattern 10XX XXXX and the extracted value is sane (ish) - bool valid = true; - uint32_t value = headerValue(c); - for (std::size_t n = 1; n < encBytes; ++n) { - uchar nc = m_str[idx + n]; - valid &= ((nc & 0xC0) == 0x80); - value = (value << 6) | (nc & 0x3F); - } - - if ( - // Wrong bit pattern of following bytes - (!valid) || - // Overlong encodings - (value < 0x80) || - (0x80 <= value && value < 0x800 && encBytes > 2) || - (0x800 < value && value < 0x10000 && encBytes > 3) || - // Encoded value out of range - (value >= 0x110000) - ) { - hexEscapeChar(os, c); - break; - } - - // If we got here, this is in fact a valid(ish) utf-8 sequence - for (std::size_t n = 0; n < encBytes; ++n) { - os << m_str[idx + n]; - } - idx += encBytes - 1; - break; - } - } - } - - std::ostream& operator << ( std::ostream& os, XmlEncode const& xmlEncode ) { - xmlEncode.encodeTo( os ); - return os; - } - - XmlWriter::ScopedElement::ScopedElement( XmlWriter* writer ) - : m_writer( writer ) - {} - - XmlWriter::ScopedElement::ScopedElement( ScopedElement&& other ) noexcept - : m_writer( other.m_writer ){ - other.m_writer = nullptr; - } - XmlWriter::ScopedElement& XmlWriter::ScopedElement::operator=( ScopedElement&& other ) noexcept { - if ( m_writer ) { - m_writer->endElement(); - } - m_writer = other.m_writer; - other.m_writer = nullptr; - return *this; - } - - XmlWriter::ScopedElement::~ScopedElement() { - if( m_writer ) - m_writer->endElement(); - } - - XmlWriter::ScopedElement& XmlWriter::ScopedElement::writeText( std::string const& text, bool indent ) { - m_writer->writeText( text, indent ); - return *this; - } - - XmlWriter::XmlWriter( std::ostream& os ) : m_os( os ) - { - writeDeclaration(); - } - - XmlWriter::~XmlWriter() { - while( !m_tags.empty() ) - endElement(); - } - - XmlWriter& XmlWriter::startElement( std::string const& name ) { - ensureTagClosed(); - newlineIfNecessary(); - m_os << m_indent << '<' << name; - m_tags.push_back( name ); - m_indent += " "; - m_tagIsOpen = true; - return *this; - } - - XmlWriter::ScopedElement XmlWriter::scopedElement( std::string const& name ) { - ScopedElement scoped( this ); - startElement( name ); - return scoped; - } - - XmlWriter& XmlWriter::endElement() { - newlineIfNecessary(); - m_indent = m_indent.substr( 0, m_indent.size()-2 ); - if( m_tagIsOpen ) { - m_os << "/>"; - m_tagIsOpen = false; - } - else { - m_os << m_indent << ""; - } - m_os << std::endl; - m_tags.pop_back(); - return *this; - } - - XmlWriter& XmlWriter::writeAttribute( std::string const& name, std::string const& attribute ) { - if( !name.empty() && !attribute.empty() ) - m_os << ' ' << name << "=\"" << XmlEncode( attribute, XmlEncode::ForAttributes ) << '"'; - return *this; - } - - XmlWriter& XmlWriter::writeAttribute( std::string const& name, bool attribute ) { - m_os << ' ' << name << "=\"" << ( attribute ? "true" : "false" ) << '"'; - return *this; - } - - XmlWriter& XmlWriter::writeText( std::string const& text, bool indent ) { - if( !text.empty() ){ - bool tagWasOpen = m_tagIsOpen; - ensureTagClosed(); - if( tagWasOpen && indent ) - m_os << m_indent; - m_os << XmlEncode( text ); - m_needsNewline = true; - } - return *this; - } - - XmlWriter& XmlWriter::writeComment( std::string const& text ) { - ensureTagClosed(); - m_os << m_indent << ""; - m_needsNewline = true; - return *this; - } - - void XmlWriter::writeStylesheetRef( std::string const& url ) { - m_os << "\n"; - } - - XmlWriter& XmlWriter::writeBlankLine() { - ensureTagClosed(); - m_os << '\n'; - return *this; - } - - void XmlWriter::ensureTagClosed() { - if( m_tagIsOpen ) { - m_os << ">" << std::endl; - m_tagIsOpen = false; - } - } - - void XmlWriter::writeDeclaration() { - m_os << "\n"; - } - - void XmlWriter::newlineIfNecessary() { - if( m_needsNewline ) { - m_os << std::endl; - m_needsNewline = false; - } - } -} -// end catch_xmlwriter.cpp -// start catch_reporter_bases.cpp - -#include -#include -#include -#include -#include - -namespace Catch { - void prepareExpandedExpression(AssertionResult& result) { - result.getExpandedExpression(); - } - - // Because formatting using c++ streams is stateful, drop down to C is required - // Alternatively we could use stringstream, but its performance is... not good. - std::string getFormattedDuration( double duration ) { - // Max exponent + 1 is required to represent the whole part - // + 1 for decimal point - // + 3 for the 3 decimal places - // + 1 for null terminator - const std::size_t maxDoubleSize = DBL_MAX_10_EXP + 1 + 1 + 3 + 1; - char buffer[maxDoubleSize]; - - // Save previous errno, to prevent sprintf from overwriting it - ErrnoGuard guard; -#ifdef _MSC_VER - sprintf_s(buffer, "%.3f", duration); -#else - sprintf(buffer, "%.3f", duration); -#endif - return std::string(buffer); - } - - TestEventListenerBase::TestEventListenerBase(ReporterConfig const & _config) - :StreamingReporterBase(_config) {} - - void TestEventListenerBase::assertionStarting(AssertionInfo const &) {} - - bool TestEventListenerBase::assertionEnded(AssertionStats const &) { - return false; - } - -} // end namespace Catch -// end catch_reporter_bases.cpp -// start catch_reporter_compact.cpp - -namespace { - -#ifdef CATCH_PLATFORM_MAC - const char* failedString() { return "FAILED"; } - const char* passedString() { return "PASSED"; } -#else - const char* failedString() { return "failed"; } - const char* passedString() { return "passed"; } -#endif - - // Colour::LightGrey - Catch::Colour::Code dimColour() { return Catch::Colour::FileName; } - - std::string bothOrAll( std::size_t count ) { - return count == 1 ? std::string() : - count == 2 ? "both " : "all " ; - } - -} // anon namespace - -namespace Catch { -namespace { -// 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. -void printTotals(std::ostream& out, const Totals& totals) { - if (totals.testCases.total() == 0) { - out << "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) : std::string(); - out << - "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) { - out << - "Passed " << bothOrAll(totals.testCases.total()) - << pluralise(totals.testCases.total(), "test case") - << " (no assertions)."; - } else if (totals.assertions.failed) { - Colour colour(Colour::ResultError); - out << - "Failed " << pluralise(totals.testCases.failed, "test case") << ", " - "failed " << pluralise(totals.assertions.failed, "assertion") << '.'; - } else { - Colour colour(Colour::ResultSuccess); - out << - "Passed " << bothOrAll(totals.testCases.passed) - << pluralise(totals.testCases.passed, "test case") << - " with " << pluralise(totals.assertions.passed, "assertion") << '.'; - } -} - -// Implementation of CompactReporter formatting -class AssertionPrinter { -public: - AssertionPrinter& operator= (AssertionPrinter const&) = delete; - AssertionPrinter(AssertionPrinter const&) = delete; - AssertionPrinter(std::ostream& _stream, AssertionStats const& _stats, bool _printInfoMessages) - : stream(_stream) - , 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; - } - } - -private: - void printSourceInfo() const { - Colour colourGuard(Colour::FileName); - stream << result.getSourceInfo() << ':'; - } - - void printResultType(Colour::Code colour, std::string const& passOrFail) const { - if (!passOrFail.empty()) { - { - Colour colourGuard(colour); - stream << ' ' << passOrFail; - } - stream << ':'; - } - } - - void printIssue(std::string const& issue) const { - stream << ' ' << issue; - } - - void printExpressionWas() { - if (result.hasExpression()) { - stream << ';'; - { - Colour colour(dimColour()); - stream << " expression was:"; - } - printOriginalExpression(); - } - } - - void printOriginalExpression() const { - if (result.hasExpression()) { - stream << ' ' << result.getExpression(); - } - } - - 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 printRemainingMessages(Colour::Code colour = dimColour()) { - if (itMessage == messages.end()) - return; - - // using messages.end() directly yields (or auto) 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") << ':'; - } - - 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; - AssertionResult const& result; - std::vector messages; - std::vector::const_iterator itMessage; - bool printInfoMessages; -}; - -} // anon namespace - - std::string CompactReporter::getDescription() { - return "Reports test results on a single line, suitable for IDEs"; - } - - ReporterPreferences CompactReporter::getPreferences() const { - ReporterPreferences prefs; - prefs.shouldRedirectStdOut = false; - return prefs; - } - - void CompactReporter::noMatchingTestCases( std::string const& spec ) { - stream << "No test cases matched '" << spec << '\'' << std::endl; - } - - void CompactReporter::assertionStarting( AssertionInfo const& ) {} - - bool CompactReporter::assertionEnded( AssertionStats const& _assertionStats ) { - AssertionResult const& result = _assertionStats.assertionResult; - - 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; - } - - AssertionPrinter printer( stream, _assertionStats, printInfoMessages ); - printer.print(); - - stream << std::endl; - return true; - } - - void CompactReporter::sectionEnded(SectionStats const& _sectionStats) { - if (m_config->showDurations() == ShowDurations::Always) { - stream << getFormattedDuration(_sectionStats.durationInSeconds) << " s: " << _sectionStats.sectionInfo.name << std::endl; - } - } - - void CompactReporter::testRunEnded( TestRunStats const& _testRunStats ) { - printTotals( stream, _testRunStats.totals ); - stream << '\n' << std::endl; - StreamingReporterBase::testRunEnded( _testRunStats ); - } - - CompactReporter::~CompactReporter() {} - - CATCH_REGISTER_REPORTER( "compact", CompactReporter ) - -} // end namespace Catch -// end catch_reporter_compact.cpp -// start catch_reporter_console.cpp - -#include -#include - -#if defined(_MSC_VER) -#pragma warning(push) -#pragma warning(disable:4061) // Not all labels are EXPLICITLY handled in switch - // Note that 4062 (not all labels are handled - // and default is missing) is enabled -#endif - -namespace Catch { - -namespace { - -// Formatter impl for ConsoleReporter -class ConsoleAssertionPrinter { -public: - ConsoleAssertionPrinter& operator= (ConsoleAssertionPrinter const&) = delete; - ConsoleAssertionPrinter(ConsoleAssertionPrinter const&) = delete; - ConsoleAssertionPrinter(std::ostream& _stream, AssertionStats const& _stats, bool _printInfoMessages) - : stream(_stream), - stats(_stats), - result(_stats.assertionResult), - colour(Colour::None), - 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 "; - if (_stats.infoMessages.size() == 1) - messageLabel += "message"; - if (_stats.infoMessages.size() > 1) - messageLabel += "messages"; - 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 print() const { - printSourceInfo(); - if (stats.totals.assertions.total() > 0) { - if (result.isOk()) - stream << '\n'; - printResultType(); - printOriginalExpression(); - printReconstructedExpression(); - } else { - stream << '\n'; - } - printMessage(); - } - -private: - void printResultType() const { - if (!passOrFail.empty()) { - Colour colourGuard(colour); - stream << passOrFail << ":\n"; - } - } - void printOriginalExpression() const { - if (result.hasExpression()) { - Colour colourGuard(Colour::OriginalExpression); - stream << " "; - stream << result.getExpressionInMacro(); - stream << '\n'; - } - } - void printReconstructedExpression() const { - if (result.hasExpandedExpression()) { - stream << "with expansion:\n"; - Colour colourGuard(Colour::ReconstructedExpression); - stream << Column(result.getExpandedExpression()).indent(2) << '\n'; - } - } - void printMessage() const { - if (!messageLabel.empty()) - stream << messageLabel << ':' << '\n'; - for (auto const& msg : messages) { - // If this assertion is a warning ignore any INFO messages - if (printInfoMessages || msg.type != ResultWas::Info) - stream << Column(msg.message).indent(2) << '\n'; - } - } - void printSourceInfo() const { - Colour colourGuard(Colour::FileName); - stream << result.getSourceInfo() << ": "; - } - - 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; -}; - -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; -} - -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; -} - -struct ColumnInfo { - enum Justification { Left, Right }; - std::string name; - int width; - Justification justification; -}; -struct ColumnBreak {}; -struct RowBreak {}; - -class Duration { - enum class Unit { - Auto, - Nanoseconds, - Microseconds, - Milliseconds, - Seconds, - Minutes - }; - static const uint64_t s_nanosecondsInAMicrosecond = 1000; - static const uint64_t s_nanosecondsInAMillisecond = 1000 * s_nanosecondsInAMicrosecond; - static const uint64_t s_nanosecondsInASecond = 1000 * s_nanosecondsInAMillisecond; - static const uint64_t s_nanosecondsInAMinute = 60 * s_nanosecondsInASecond; - - uint64_t m_inNanoseconds; - Unit m_units; - -public: - explicit Duration(uint64_t inNanoseconds, Unit units = Unit::Auto) - : m_inNanoseconds(inNanoseconds), - m_units(units) { - if (m_units == Unit::Auto) { - if (m_inNanoseconds < s_nanosecondsInAMicrosecond) - m_units = Unit::Nanoseconds; - else if (m_inNanoseconds < s_nanosecondsInAMillisecond) - m_units = Unit::Microseconds; - else if (m_inNanoseconds < s_nanosecondsInASecond) - m_units = Unit::Milliseconds; - else if (m_inNanoseconds < s_nanosecondsInAMinute) - m_units = Unit::Seconds; - else - m_units = Unit::Minutes; - } - - } - - auto value() const -> double { - switch (m_units) { - case Unit::Microseconds: - return m_inNanoseconds / static_cast(s_nanosecondsInAMicrosecond); - case Unit::Milliseconds: - return m_inNanoseconds / static_cast(s_nanosecondsInAMillisecond); - case Unit::Seconds: - return m_inNanoseconds / static_cast(s_nanosecondsInASecond); - case Unit::Minutes: - return m_inNanoseconds / static_cast(s_nanosecondsInAMinute); - default: - return static_cast(m_inNanoseconds); - } - } - auto unitsAsString() const -> std::string { - switch (m_units) { - case Unit::Nanoseconds: - return "ns"; - case Unit::Microseconds: - return "µs"; - case Unit::Milliseconds: - return "ms"; - case Unit::Seconds: - return "s"; - case Unit::Minutes: - return "m"; - default: - return "** internal error **"; - } - - } - friend auto operator << (std::ostream& os, Duration const& duration) -> std::ostream& { - return os << duration.value() << " " << duration.unitsAsString(); - } -}; -} // end anon namespace - -class TablePrinter { - std::ostream& m_os; - std::vector m_columnInfos; - std::ostringstream m_oss; - int m_currentColumn = -1; - bool m_isOpen = false; - -public: - TablePrinter( std::ostream& os, std::vector columnInfos ) - : m_os( os ), - m_columnInfos( std::move( columnInfos ) ) {} - - auto columnInfos() const -> std::vector const& { - return m_columnInfos; - } - - void open() { - if (!m_isOpen) { - m_isOpen = true; - *this << RowBreak(); - for (auto const& info : m_columnInfos) - *this << info.name << ColumnBreak(); - *this << RowBreak(); - m_os << Catch::getLineOfChars<'-'>() << "\n"; - } - } - void close() { - if (m_isOpen) { - *this << RowBreak(); - m_os << std::endl; - m_isOpen = false; - } - } - - template - friend TablePrinter& operator << (TablePrinter& tp, T const& value) { - tp.m_oss << value; - return tp; - } - - friend TablePrinter& operator << (TablePrinter& tp, ColumnBreak) { - auto colStr = tp.m_oss.str(); - // This takes account of utf8 encodings - auto strSize = Catch::StringRef(colStr).numberOfCharacters(); - tp.m_oss.str(""); - tp.open(); - if (tp.m_currentColumn == static_cast(tp.m_columnInfos.size() - 1)) { - tp.m_currentColumn = -1; - tp.m_os << "\n"; - } - tp.m_currentColumn++; - - auto colInfo = tp.m_columnInfos[tp.m_currentColumn]; - auto padding = (strSize + 2 < static_cast(colInfo.width)) - ? std::string(colInfo.width - (strSize + 2), ' ') - : std::string(); - if (colInfo.justification == ColumnInfo::Left) - tp.m_os << colStr << padding << " "; - else - tp.m_os << padding << colStr << " "; - return tp; - } - - friend TablePrinter& operator << (TablePrinter& tp, RowBreak) { - if (tp.m_currentColumn > 0) { - tp.m_os << "\n"; - tp.m_currentColumn = -1; - } - return tp; - } -}; - -ConsoleReporter::ConsoleReporter(ReporterConfig const& config) - : StreamingReporterBase(config), - m_tablePrinter(new TablePrinter(config.stream(), - { - { "benchmark name", CATCH_CONFIG_CONSOLE_WIDTH - 32, ColumnInfo::Left }, - { "iters", 8, ColumnInfo::Right }, - { "elapsed ns", 14, ColumnInfo::Right }, - { "average", 14, ColumnInfo::Right } - })) {} -ConsoleReporter::~ConsoleReporter() = default; - -std::string ConsoleReporter::getDescription() { - return "Reports test results as plain lines of text"; -} - -void ConsoleReporter::noMatchingTestCases(std::string const& spec) { - stream << "No test cases matched '" << spec << '\'' << std::endl; -} - -void ConsoleReporter::assertionStarting(AssertionInfo const&) {} - -bool ConsoleReporter::assertionEnded(AssertionStats const& _assertionStats) { - AssertionResult const& result = _assertionStats.assertionResult; - - bool includeResults = m_config->includeSuccessfulResults() || !result.isOk(); - - // Drop out if result was successful but we're not printing them. - if (!includeResults && result.getResultType() != ResultWas::Warning) - return false; - - lazyPrint(); - - ConsoleAssertionPrinter printer(stream, _assertionStats, includeResults); - printer.print(); - stream << std::endl; - return true; -} - -void ConsoleReporter::sectionStarting(SectionInfo const& _sectionInfo) { - m_headerPrinted = false; - StreamingReporterBase::sectionStarting(_sectionInfo); -} -void ConsoleReporter::sectionEnded(SectionStats const& _sectionStats) { - m_tablePrinter->close(); - 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_config->showDurations() == ShowDurations::Always) { - stream << getFormattedDuration(_sectionStats.durationInSeconds) << " s: " << _sectionStats.sectionInfo.name << std::endl; - } - if (m_headerPrinted) { - m_headerPrinted = false; - } - StreamingReporterBase::sectionEnded(_sectionStats); -} - -void ConsoleReporter::benchmarkStarting(BenchmarkInfo const& info) { - lazyPrintWithoutClosingBenchmarkTable(); - - auto nameCol = Column( info.name ).width( static_cast( m_tablePrinter->columnInfos()[0].width - 2 ) ); - - bool firstLine = true; - for (auto line : nameCol) { - if (!firstLine) - (*m_tablePrinter) << ColumnBreak() << ColumnBreak() << ColumnBreak(); - else - firstLine = false; - - (*m_tablePrinter) << line << ColumnBreak(); - } -} -void ConsoleReporter::benchmarkEnded(BenchmarkStats const& stats) { - Duration average(stats.elapsedTimeInNanoseconds / stats.iterations); - (*m_tablePrinter) - << stats.iterations << ColumnBreak() - << stats.elapsedTimeInNanoseconds << ColumnBreak() - << average << ColumnBreak(); -} - -void ConsoleReporter::testCaseEnded(TestCaseStats const& _testCaseStats) { - m_tablePrinter->close(); - StreamingReporterBase::testCaseEnded(_testCaseStats); - m_headerPrinted = false; -} -void ConsoleReporter::testGroupEnded(TestGroupStats const& _testGroupStats) { - if (currentGroupInfo.used) { - printSummaryDivider(); - stream << "Summary for group '" << _testGroupStats.groupInfo.name << "':\n"; - printTotals(_testGroupStats.totals); - stream << '\n' << std::endl; - } - StreamingReporterBase::testGroupEnded(_testGroupStats); -} -void ConsoleReporter::testRunEnded(TestRunStats const& _testRunStats) { - printTotalsDivider(_testRunStats.totals); - printTotals(_testRunStats.totals); - stream << std::endl; - StreamingReporterBase::testRunEnded(_testRunStats); -} - -void ConsoleReporter::lazyPrint() { - - m_tablePrinter->close(); - lazyPrintWithoutClosingBenchmarkTable(); -} - -void ConsoleReporter::lazyPrintWithoutClosingBenchmarkTable() { - - if (!currentTestRunInfo.used) - lazyPrintRunInfo(); - if (!currentGroupInfo.used) - lazyPrintGroupInfo(); - - if (!m_headerPrinted) { - printTestCaseAndSectionHeader(); - m_headerPrinted = true; - } -} -void ConsoleReporter::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_config->rngSeed() != 0) - stream << "Randomness seeded to: " << m_config->rngSeed() << "\n\n"; - - currentTestRunInfo.used = true; -} -void ConsoleReporter::lazyPrintGroupInfo() { - if (!currentGroupInfo->name.empty() && currentGroupInfo->groupsCounts > 1) { - printClosedHeader("Group: " + currentGroupInfo->name); - currentGroupInfo.used = true; - } -} -void ConsoleReporter::printTestCaseAndSectionHeader() { - assert(!m_sectionStack.empty()); - printOpenHeader(currentTestCaseInfo->name); - - if (m_sectionStack.size() > 1) { - Colour colourGuard(Colour::Headers); - - auto - it = m_sectionStack.begin() + 1, // Skip first section (test case) - itEnd = m_sectionStack.end(); - for (; it != itEnd; ++it) - printHeaderString(it->name, 2); - } - - SourceLineInfo lineInfo = m_sectionStack.back().lineInfo; - - if (!lineInfo.empty()) { - stream << getLineOfChars<'-'>() << '\n'; - Colour colourGuard(Colour::FileName); - stream << lineInfo << '\n'; - } - stream << getLineOfChars<'.'>() << '\n' << std::endl; -} - -void ConsoleReporter::printClosedHeader(std::string const& _name) { - printOpenHeader(_name); - stream << getLineOfChars<'.'>() << '\n'; -} -void ConsoleReporter::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 ConsoleReporter::printHeaderString(std::string const& _string, std::size_t indent) { - std::size_t i = _string.find(": "); - if (i != std::string::npos) - i += 2; - else - i = 0; - stream << Column(_string).indent(indent + i).initialIndent(indent) << '\n'; -} - -struct SummaryColumn { - - SummaryColumn( std::string _label, Colour::Code _colour ) - : label( std::move( _label ) ), - colour( _colour ) {} - SummaryColumn addRow( std::size_t count ) { - ReusableStringStream rss; - rss << count; - std::string row = rss.str(); - for (auto& oldRow : rows) { - while (oldRow.size() < row.size()) - oldRow = ' ' + oldRow; - while (oldRow.size() > row.size()) - row = ' ' + row; - } - rows.push_back(row); - return *this; - } - - std::string label; - Colour::Code colour; - std::vector rows; - -}; - -void ConsoleReporter::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 ConsoleReporter::printSummaryRow(std::string const& label, std::vector const& cols, std::size_t row) { - for (auto col : cols) { - std::string value = col.rows[row]; - if (col.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(col.colour) - << value << ' ' << col.label; - } - } - stream << '\n'; -} - -void ConsoleReporter::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, '='); - } else { - stream << Colour(Colour::Warning) << std::string(CATCH_CONFIG_CONSOLE_WIDTH - 1, '='); - } - stream << '\n'; -} -void ConsoleReporter::printSummaryDivider() { - stream << getLineOfChars<'-'>() << '\n'; -} - -CATCH_REGISTER_REPORTER("console", ConsoleReporter) - -} // end namespace Catch - -#if defined(_MSC_VER) -#pragma warning(pop) -#endif -// end catch_reporter_console.cpp -// start catch_reporter_junit.cpp - -#include -#include -#include -#include - -namespace Catch { - - namespace { - std::string getCurrentTimestamp() { - // Beware, this is not reentrant because of backward compatibility issues - // Also, UTC only, again because of backward compatibility (%z is C++11) - time_t rawtime; - std::time(&rawtime); - auto const timeStampSize = sizeof("2017-01-16T17:06:45Z"); - -#ifdef _MSC_VER - std::tm timeInfo = {}; - gmtime_s(&timeInfo, &rawtime); -#else - std::tm* timeInfo; - timeInfo = std::gmtime(&rawtime); -#endif - - char timeStamp[timeStampSize]; - const char * const fmt = "%Y-%m-%dT%H:%M:%SZ"; - -#ifdef _MSC_VER - std::strftime(timeStamp, timeStampSize, fmt, &timeInfo); -#else - std::strftime(timeStamp, timeStampSize, fmt, timeInfo); -#endif - return std::string(timeStamp); - } - - std::string fileNameTag(const std::vector &tags) { - auto it = std::find_if(begin(tags), - end(tags), - [] (std::string const& tag) {return tag.front() == '#'; }); - if (it != tags.end()) - return it->substr(1); - return std::string(); - } - } // anonymous namespace - - JunitReporter::JunitReporter( ReporterConfig const& _config ) - : CumulativeReporterBase( _config ), - xml( _config.stream() ) - { - m_reporterPrefs.shouldRedirectStdOut = true; - } - - JunitReporter::~JunitReporter() {} - - std::string JunitReporter::getDescription() { - return "Reports test results in an XML format that looks like Ant's junitreport target"; - } - - void JunitReporter::noMatchingTestCases( std::string const& /*spec*/ ) {} - - void JunitReporter::testRunStarting( TestRunInfo const& runInfo ) { - CumulativeReporterBase::testRunStarting( runInfo ); - xml.startElement( "testsuites" ); - } - - void JunitReporter::testGroupStarting( GroupInfo const& groupInfo ) { - suiteTimer.start(); - stdOutForSuite.clear(); - stdErrForSuite.clear(); - unexpectedExceptions = 0; - CumulativeReporterBase::testGroupStarting( groupInfo ); - } - - void JunitReporter::testCaseStarting( TestCaseInfo const& testCaseInfo ) { - m_okToFail = testCaseInfo.okToFail(); - } - - bool JunitReporter::assertionEnded( AssertionStats const& assertionStats ) { - if( assertionStats.assertionResult.getResultType() == ResultWas::ThrewException && !m_okToFail ) - unexpectedExceptions++; - return CumulativeReporterBase::assertionEnded( assertionStats ); - } - - void JunitReporter::testCaseEnded( TestCaseStats const& testCaseStats ) { - stdOutForSuite += testCaseStats.stdOut; - stdErrForSuite += testCaseStats.stdErr; - CumulativeReporterBase::testCaseEnded( testCaseStats ); - } - - void JunitReporter::testGroupEnded( TestGroupStats const& testGroupStats ) { - double suiteTime = suiteTimer.getElapsedSeconds(); - CumulativeReporterBase::testGroupEnded( testGroupStats ); - writeGroup( *m_testGroups.back(), suiteTime ); - } - - void JunitReporter::testRunEndedCumulative() { - xml.endElement(); - } - - void JunitReporter::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", getCurrentTimestamp() ); - - // Write test cases - for( auto const& child : groupNode.children ) - writeTestCase( *child ); - - xml.scopedElement( "system-out" ).writeText( trim( stdOutForSuite ), false ); - xml.scopedElement( "system-err" ).writeText( trim( stdErrForSuite ), false ); - } - - void JunitReporter::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(); - - std::string className = stats.testInfo.className; - - if( className.empty() ) { - className = fileNameTag(stats.testInfo.tags); - if ( className.empty() ) - className = "global"; - } - - if ( !m_config->name().empty() ) - className = m_config->name() + "." + className; - - writeSection( className, "", rootSection ); - } - - void JunitReporter::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; - - 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::Detail::stringify( sectionNode.stats.durationInSeconds ) ); - - 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 ); - } - for( auto const& childNode : sectionNode.childSections ) - if( className.empty() ) - writeSection( name, "", *childNode ); - else - writeSection( className, name, *childNode ); - } - - void JunitReporter::writeAssertions( SectionNode const& sectionNode ) { - for( auto const& assertion : sectionNode.assertions ) - writeAssertion( assertion ); - } - - void JunitReporter::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; - } - - XmlWriter::ScopedElement e = xml.scopedElement( elementName ); - - xml.writeAttribute( "message", result.getExpandedExpression() ); - xml.writeAttribute( "type", result.getTestMacroName() ); - - ReusableStringStream rss; - if( !result.getMessage().empty() ) - rss << result.getMessage() << '\n'; - for( auto const& msg : stats.infoMessages ) - if( msg.type == ResultWas::Info ) - rss << msg.message << '\n'; - - rss << "at " << result.getSourceInfo(); - xml.writeText( rss.str(), false ); - } - } - - CATCH_REGISTER_REPORTER( "junit", JunitReporter ) - -} // end namespace Catch -// end catch_reporter_junit.cpp -// start catch_reporter_listening.cpp - -#include - -namespace Catch { - - void ListeningReporter::addListener( IStreamingReporterPtr&& listener ) { - m_listeners.push_back( std::move( listener ) ); - } - - void ListeningReporter::addReporter(IStreamingReporterPtr&& reporter) { - assert(!m_reporter && "Listening reporter can wrap only 1 real reporter"); - m_reporter = std::move( reporter ); - } - - ReporterPreferences ListeningReporter::getPreferences() const { - return m_reporter->getPreferences(); - } - - std::set ListeningReporter::getSupportedVerbosities() { - return std::set{ }; - } - - void ListeningReporter::noMatchingTestCases( std::string const& spec ) { - for ( auto const& listener : m_listeners ) { - listener->noMatchingTestCases( spec ); - } - m_reporter->noMatchingTestCases( spec ); - } - - void ListeningReporter::benchmarkStarting( BenchmarkInfo const& benchmarkInfo ) { - for ( auto const& listener : m_listeners ) { - listener->benchmarkStarting( benchmarkInfo ); - } - m_reporter->benchmarkStarting( benchmarkInfo ); - } - void ListeningReporter::benchmarkEnded( BenchmarkStats const& benchmarkStats ) { - for ( auto const& listener : m_listeners ) { - listener->benchmarkEnded( benchmarkStats ); - } - m_reporter->benchmarkEnded( benchmarkStats ); - } - - void ListeningReporter::testRunStarting( TestRunInfo const& testRunInfo ) { - for ( auto const& listener : m_listeners ) { - listener->testRunStarting( testRunInfo ); - } - m_reporter->testRunStarting( testRunInfo ); - } - - void ListeningReporter::testGroupStarting( GroupInfo const& groupInfo ) { - for ( auto const& listener : m_listeners ) { - listener->testGroupStarting( groupInfo ); - } - m_reporter->testGroupStarting( groupInfo ); - } - - void ListeningReporter::testCaseStarting( TestCaseInfo const& testInfo ) { - for ( auto const& listener : m_listeners ) { - listener->testCaseStarting( testInfo ); - } - m_reporter->testCaseStarting( testInfo ); - } - - void ListeningReporter::sectionStarting( SectionInfo const& sectionInfo ) { - for ( auto const& listener : m_listeners ) { - listener->sectionStarting( sectionInfo ); - } - m_reporter->sectionStarting( sectionInfo ); - } - - void ListeningReporter::assertionStarting( AssertionInfo const& assertionInfo ) { - for ( auto const& listener : m_listeners ) { - listener->assertionStarting( assertionInfo ); - } - m_reporter->assertionStarting( assertionInfo ); - } - - // The return value indicates if the messages buffer should be cleared: - bool ListeningReporter::assertionEnded( AssertionStats const& assertionStats ) { - for( auto const& listener : m_listeners ) { - static_cast( listener->assertionEnded( assertionStats ) ); - } - return m_reporter->assertionEnded( assertionStats ); - } - - void ListeningReporter::sectionEnded( SectionStats const& sectionStats ) { - for ( auto const& listener : m_listeners ) { - listener->sectionEnded( sectionStats ); - } - m_reporter->sectionEnded( sectionStats ); - } - - void ListeningReporter::testCaseEnded( TestCaseStats const& testCaseStats ) { - for ( auto const& listener : m_listeners ) { - listener->testCaseEnded( testCaseStats ); - } - m_reporter->testCaseEnded( testCaseStats ); - } - - void ListeningReporter::testGroupEnded( TestGroupStats const& testGroupStats ) { - for ( auto const& listener : m_listeners ) { - listener->testGroupEnded( testGroupStats ); - } - m_reporter->testGroupEnded( testGroupStats ); - } - - void ListeningReporter::testRunEnded( TestRunStats const& testRunStats ) { - for ( auto const& listener : m_listeners ) { - listener->testRunEnded( testRunStats ); - } - m_reporter->testRunEnded( testRunStats ); - } - - void ListeningReporter::skipTest( TestCaseInfo const& testInfo ) { - for ( auto const& listener : m_listeners ) { - listener->skipTest( testInfo ); - } - m_reporter->skipTest( testInfo ); - } - - bool ListeningReporter::isMulti() const { - return true; - } - -} // end namespace Catch -// end catch_reporter_listening.cpp -// start catch_reporter_xml.cpp - -#if defined(_MSC_VER) -#pragma warning(push) -#pragma warning(disable:4061) // Not all labels are EXPLICITLY handled in switch - // Note that 4062 (not all labels are handled - // and default is missing) is enabled -#endif - -namespace Catch { - XmlReporter::XmlReporter( ReporterConfig const& _config ) - : StreamingReporterBase( _config ), - m_xml(_config.stream()) - { - m_reporterPrefs.shouldRedirectStdOut = true; - } - - XmlReporter::~XmlReporter() = default; - - std::string XmlReporter::getDescription() { - return "Reports test results as an XML document"; - } - - std::string XmlReporter::getStylesheetRef() const { - return std::string(); - } - - void XmlReporter::writeSourceInfo( SourceLineInfo const& sourceInfo ) { - m_xml - .writeAttribute( "filename", sourceInfo.file ) - .writeAttribute( "line", sourceInfo.line ); - } - - void XmlReporter::noMatchingTestCases( std::string const& s ) { - StreamingReporterBase::noMatchingTestCases( s ); - } - - void XmlReporter::testRunStarting( TestRunInfo const& testInfo ) { - StreamingReporterBase::testRunStarting( testInfo ); - std::string stylesheetRef = getStylesheetRef(); - if( !stylesheetRef.empty() ) - m_xml.writeStylesheetRef( stylesheetRef ); - m_xml.startElement( "Catch" ); - if( !m_config->name().empty() ) - m_xml.writeAttribute( "name", m_config->name() ); - } - - void XmlReporter::testGroupStarting( GroupInfo const& groupInfo ) { - StreamingReporterBase::testGroupStarting( groupInfo ); - m_xml.startElement( "Group" ) - .writeAttribute( "name", groupInfo.name ); - } - - void XmlReporter::testCaseStarting( TestCaseInfo const& testInfo ) { - StreamingReporterBase::testCaseStarting(testInfo); - m_xml.startElement( "TestCase" ) - .writeAttribute( "name", trim( testInfo.name ) ) - .writeAttribute( "description", testInfo.description ) - .writeAttribute( "tags", testInfo.tagsAsString() ); - - writeSourceInfo( testInfo.lineInfo ); - - if ( m_config->showDurations() == ShowDurations::Always ) - m_testCaseTimer.start(); - m_xml.ensureTagClosed(); - } - - void XmlReporter::sectionStarting( SectionInfo const& sectionInfo ) { - StreamingReporterBase::sectionStarting( sectionInfo ); - if( m_sectionDepth++ > 0 ) { - m_xml.startElement( "Section" ) - .writeAttribute( "name", trim( sectionInfo.name ) ) - .writeAttribute( "description", sectionInfo.description ); - writeSourceInfo( sectionInfo.lineInfo ); - m_xml.ensureTagClosed(); - } - } - - void XmlReporter::assertionStarting( AssertionInfo const& ) { } - - bool XmlReporter::assertionEnded( AssertionStats const& assertionStats ) { - - AssertionResult const& result = assertionStats.assertionResult; - - bool includeResults = m_config->includeSuccessfulResults() || !result.isOk(); - - if( includeResults || result.getResultType() == ResultWas::Warning ) { - // Print any info messages in tags. - for( auto const& msg : assertionStats.infoMessages ) { - if( msg.type == ResultWas::Info && includeResults ) { - m_xml.scopedElement( "Info" ) - .writeText( msg.message ); - } else if ( msg.type == ResultWas::Warning ) { - m_xml.scopedElement( "Warning" ) - .writeText( msg.message ); - } - } - } - - // Drop out if result was successful but we're not printing them. - if( !includeResults && result.getResultType() != ResultWas::Warning ) - return true; - - // Print the expression if there is one. - if( result.hasExpression() ) { - m_xml.startElement( "Expression" ) - .writeAttribute( "success", result.succeeded() ) - .writeAttribute( "type", result.getTestMacroName() ); - - writeSourceInfo( result.getSourceInfo() ); - - m_xml.scopedElement( "Original" ) - .writeText( result.getExpression() ); - m_xml.scopedElement( "Expanded" ) - .writeText( result.getExpandedExpression() ); - } - - // And... Print a result applicable to each result type. - switch( result.getResultType() ) { - case ResultWas::ThrewException: - m_xml.startElement( "Exception" ); - writeSourceInfo( result.getSourceInfo() ); - m_xml.writeText( result.getMessage() ); - m_xml.endElement(); - break; - case ResultWas::FatalErrorCondition: - m_xml.startElement( "FatalErrorCondition" ); - writeSourceInfo( result.getSourceInfo() ); - m_xml.writeText( result.getMessage() ); - m_xml.endElement(); - break; - case ResultWas::Info: - m_xml.scopedElement( "Info" ) - .writeText( result.getMessage() ); - break; - case ResultWas::Warning: - // Warning will already have been written - break; - case ResultWas::ExplicitFailure: - m_xml.startElement( "Failure" ); - writeSourceInfo( result.getSourceInfo() ); - m_xml.writeText( result.getMessage() ); - m_xml.endElement(); - break; - default: - break; - } - - if( result.hasExpression() ) - m_xml.endElement(); - - return true; - } - - void XmlReporter::sectionEnded( SectionStats const& sectionStats ) { - 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 ); - - if ( m_config->showDurations() == ShowDurations::Always ) - e.writeAttribute( "durationInSeconds", sectionStats.durationInSeconds ); - - m_xml.endElement(); - } - } - - void XmlReporter::testCaseEnded( TestCaseStats const& testCaseStats ) { - 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() ); - - if( !testCaseStats.stdOut.empty() ) - m_xml.scopedElement( "StdOut" ).writeText( trim( testCaseStats.stdOut ), false ); - if( !testCaseStats.stdErr.empty() ) - m_xml.scopedElement( "StdErr" ).writeText( trim( testCaseStats.stdErr ), false ); - - m_xml.endElement(); - } - - void XmlReporter::testGroupEnded( TestGroupStats const& testGroupStats ) { - 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(); - } - - void XmlReporter::testRunEnded( TestRunStats const& testRunStats ) { - 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(); - } - - CATCH_REGISTER_REPORTER( "xml", XmlReporter ) - -} // end namespace Catch - -#if defined(_MSC_VER) -#pragma warning(pop) -#endif -// end catch_reporter_xml.cpp - -namespace Catch { - LeakDetector leakDetector; -} - -#ifdef __clang__ -#pragma clang diagnostic pop -#endif - -// end catch_impl.hpp -#endif - -#ifdef CATCH_CONFIG_MAIN -// start catch_default_main.hpp - -#ifndef __OBJC__ - -#if defined(CATCH_CONFIG_WCHAR) && defined(WIN32) && defined(_UNICODE) && !defined(DO_NOT_USE_WMAIN) -// Standard C/C++ Win32 Unicode wmain entry point -extern "C" int wmain (int argc, wchar_t * argv[], wchar_t * []) { -#else -// Standard C/C++ main entry point -int main (int argc, char * argv[]) { -#endif - - return Catch::Session().run( argc, argv ); -} - -#else // __OBJC__ - -// Objective-C entry point -int main (int argc, char * const argv[]) { -#if !CATCH_ARC_ENABLED - NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; -#endif - - Catch::registerTestMethods(); - int result = Catch::Session().run( argc, (char**)argv ); - -#if !CATCH_ARC_ENABLED - [pool drain]; -#endif - - return result; -} - -#endif // __OBJC__ - -// end catch_default_main.hpp -#endif - -#if !defined(CATCH_CONFIG_IMPL_ONLY) - -#ifdef CLARA_CONFIG_MAIN_NOT_DEFINED -# undef CLARA_CONFIG_MAIN -#endif - -#if !defined(CATCH_CONFIG_DISABLE) -////// -// If this config identifier is defined then all CATCH macros are prefixed with CATCH_ -#ifdef CATCH_CONFIG_PREFIX_ALL - -#define CATCH_REQUIRE( ... ) INTERNAL_CATCH_TEST( "CATCH_REQUIRE", Catch::ResultDisposition::Normal, __VA_ARGS__ ) -#define CATCH_REQUIRE_FALSE( ... ) INTERNAL_CATCH_TEST( "CATCH_REQUIRE_FALSE", Catch::ResultDisposition::Normal | Catch::ResultDisposition::FalseTest, __VA_ARGS__ ) - -#define CATCH_REQUIRE_THROWS( ... ) INTERNAL_CATCH_THROWS( "CATCH_REQUIRE_THROWS", Catch::ResultDisposition::Normal, "", __VA_ARGS__ ) -#define CATCH_REQUIRE_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "CATCH_REQUIRE_THROWS_AS", exceptionType, Catch::ResultDisposition::Normal, expr ) -#define CATCH_REQUIRE_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS_STR_MATCHES( "CATCH_REQUIRE_THROWS_WITH", Catch::ResultDisposition::Normal, matcher, expr ) -#if !defined(CATCH_CONFIG_DISABLE_MATCHERS) -#define CATCH_REQUIRE_THROWS_MATCHES( expr, exceptionType, matcher ) INTERNAL_CATCH_THROWS_MATCHES( "CATCH_REQUIRE_THROWS_MATCHES", exceptionType, Catch::ResultDisposition::Normal, matcher, expr ) -#endif// CATCH_CONFIG_DISABLE_MATCHERS -#define CATCH_REQUIRE_NOTHROW( ... ) INTERNAL_CATCH_NO_THROW( "CATCH_REQUIRE_NOTHROW", Catch::ResultDisposition::Normal, __VA_ARGS__ ) - -#define CATCH_CHECK( ... ) INTERNAL_CATCH_TEST( "CATCH_CHECK", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ ) -#define CATCH_CHECK_FALSE( ... ) INTERNAL_CATCH_TEST( "CATCH_CHECK_FALSE", Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::FalseTest, __VA_ARGS__ ) -#define CATCH_CHECKED_IF( ... ) INTERNAL_CATCH_IF( "CATCH_CHECKED_IF", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ ) -#define CATCH_CHECKED_ELSE( ... ) INTERNAL_CATCH_ELSE( "CATCH_CHECKED_ELSE", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ ) -#define CATCH_CHECK_NOFAIL( ... ) INTERNAL_CATCH_TEST( "CATCH_CHECK_NOFAIL", Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::SuppressFail, __VA_ARGS__ ) - -#define CATCH_CHECK_THROWS( ... ) INTERNAL_CATCH_THROWS( "CATCH_CHECK_THROWS", Catch::ResultDisposition::ContinueOnFailure, "", __VA_ARGS__ ) -#define CATCH_CHECK_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "CATCH_CHECK_THROWS_AS", exceptionType, Catch::ResultDisposition::ContinueOnFailure, expr ) -#define CATCH_CHECK_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS_STR_MATCHES( "CATCH_CHECK_THROWS_WITH", Catch::ResultDisposition::ContinueOnFailure, matcher, expr ) -#if !defined(CATCH_CONFIG_DISABLE_MATCHERS) -#define CATCH_CHECK_THROWS_MATCHES( expr, exceptionType, matcher ) INTERNAL_CATCH_THROWS_MATCHES( "CATCH_CHECK_THROWS_MATCHES", exceptionType, Catch::ResultDisposition::ContinueOnFailure, matcher, expr ) -#endif // CATCH_CONFIG_DISABLE_MATCHERS -#define CATCH_CHECK_NOTHROW( ... ) INTERNAL_CATCH_NO_THROW( "CATCH_CHECK_NOTHROW", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ ) - -#if !defined(CATCH_CONFIG_DISABLE_MATCHERS) -#define CATCH_CHECK_THAT( arg, matcher ) INTERNAL_CHECK_THAT( "CATCH_CHECK_THAT", matcher, Catch::ResultDisposition::ContinueOnFailure, arg ) - -#define CATCH_REQUIRE_THAT( arg, matcher ) INTERNAL_CHECK_THAT( "CATCH_REQUIRE_THAT", matcher, Catch::ResultDisposition::Normal, arg ) -#endif // CATCH_CONFIG_DISABLE_MATCHERS - -#define CATCH_INFO( msg ) INTERNAL_CATCH_INFO( "CATCH_INFO", msg ) -#define CATCH_WARN( msg ) INTERNAL_CATCH_MSG( "CATCH_WARN", Catch::ResultWas::Warning, Catch::ResultDisposition::ContinueOnFailure, msg ) -#define CATCH_CAPTURE( msg ) INTERNAL_CATCH_INFO( "CATCH_CAPTURE", #msg " := " << ::Catch::Detail::stringify(msg) ) - -#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_FAIL", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, __VA_ARGS__ ) -#define CATCH_FAIL_CHECK( ... ) INTERNAL_CATCH_MSG( "CATCH_FAIL_CHECK", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ ) -#define CATCH_SUCCEED( ... ) INTERNAL_CATCH_MSG( "CATCH_SUCCEED", Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ ) - -#define CATCH_ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE() - -// "BDD-style" convenience wrappers -#define CATCH_SCENARIO( ... ) CATCH_TEST_CASE( "Scenario: " __VA_ARGS__ ) -#define CATCH_SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " __VA_ARGS__ ) -#define CATCH_GIVEN( desc ) CATCH_SECTION( std::string( "Given: ") + desc ) -#define CATCH_WHEN( desc ) CATCH_SECTION( std::string( " When: ") + desc ) -#define CATCH_AND_WHEN( desc ) CATCH_SECTION( std::string( " And: ") + desc ) -#define CATCH_THEN( desc ) CATCH_SECTION( std::string( " Then: ") + desc ) -#define CATCH_AND_THEN( desc ) CATCH_SECTION( std::string( " And: ") + desc ) - -// If CATCH_CONFIG_PREFIX_ALL is not defined then the CATCH_ prefix is not required -#else - -#define REQUIRE( ... ) INTERNAL_CATCH_TEST( "REQUIRE", Catch::ResultDisposition::Normal, __VA_ARGS__ ) -#define REQUIRE_FALSE( ... ) INTERNAL_CATCH_TEST( "REQUIRE_FALSE", Catch::ResultDisposition::Normal | Catch::ResultDisposition::FalseTest, __VA_ARGS__ ) - -#define REQUIRE_THROWS( ... ) INTERNAL_CATCH_THROWS( "REQUIRE_THROWS", Catch::ResultDisposition::Normal, __VA_ARGS__ ) -#define REQUIRE_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "REQUIRE_THROWS_AS", exceptionType, Catch::ResultDisposition::Normal, expr ) -#define REQUIRE_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS_STR_MATCHES( "REQUIRE_THROWS_WITH", Catch::ResultDisposition::Normal, matcher, expr ) -#if !defined(CATCH_CONFIG_DISABLE_MATCHERS) -#define REQUIRE_THROWS_MATCHES( expr, exceptionType, matcher ) INTERNAL_CATCH_THROWS_MATCHES( "REQUIRE_THROWS_MATCHES", exceptionType, Catch::ResultDisposition::Normal, matcher, expr ) -#endif // CATCH_CONFIG_DISABLE_MATCHERS -#define REQUIRE_NOTHROW( ... ) INTERNAL_CATCH_NO_THROW( "REQUIRE_NOTHROW", Catch::ResultDisposition::Normal, __VA_ARGS__ ) - -#define CHECK( ... ) INTERNAL_CATCH_TEST( "CHECK", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ ) -#define CHECK_FALSE( ... ) INTERNAL_CATCH_TEST( "CHECK_FALSE", Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::FalseTest, __VA_ARGS__ ) -#define CHECKED_IF( ... ) INTERNAL_CATCH_IF( "CHECKED_IF", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ ) -#define CHECKED_ELSE( ... ) INTERNAL_CATCH_ELSE( "CHECKED_ELSE", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ ) -#define CHECK_NOFAIL( ... ) INTERNAL_CATCH_TEST( "CHECK_NOFAIL", Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::SuppressFail, __VA_ARGS__ ) - -#define CHECK_THROWS( ... ) INTERNAL_CATCH_THROWS( "CHECK_THROWS", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ ) -#define CHECK_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "CHECK_THROWS_AS", exceptionType, Catch::ResultDisposition::ContinueOnFailure, expr ) -#define CHECK_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS_STR_MATCHES( "CHECK_THROWS_WITH", Catch::ResultDisposition::ContinueOnFailure, matcher, expr ) -#if !defined(CATCH_CONFIG_DISABLE_MATCHERS) -#define CHECK_THROWS_MATCHES( expr, exceptionType, matcher ) INTERNAL_CATCH_THROWS_MATCHES( "CHECK_THROWS_MATCHES", exceptionType, Catch::ResultDisposition::ContinueOnFailure, matcher, expr ) -#endif // CATCH_CONFIG_DISABLE_MATCHERS -#define CHECK_NOTHROW( ... ) INTERNAL_CATCH_NO_THROW( "CHECK_NOTHROW", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ ) - -#if !defined(CATCH_CONFIG_DISABLE_MATCHERS) -#define CHECK_THAT( arg, matcher ) INTERNAL_CHECK_THAT( "CHECK_THAT", matcher, Catch::ResultDisposition::ContinueOnFailure, arg ) - -#define REQUIRE_THAT( arg, matcher ) INTERNAL_CHECK_THAT( "REQUIRE_THAT", matcher, Catch::ResultDisposition::Normal, arg ) -#endif // CATCH_CONFIG_DISABLE_MATCHERS - -#define INFO( msg ) INTERNAL_CATCH_INFO( "INFO", msg ) -#define WARN( msg ) INTERNAL_CATCH_MSG( "WARN", Catch::ResultWas::Warning, Catch::ResultDisposition::ContinueOnFailure, msg ) -#define CAPTURE( msg ) INTERNAL_CATCH_INFO( "CAPTURE", #msg " := " << ::Catch::Detail::stringify(msg) ) - -#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( "FAIL", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, __VA_ARGS__ ) -#define FAIL_CHECK( ... ) INTERNAL_CATCH_MSG( "FAIL_CHECK", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ ) -#define SUCCEED( ... ) INTERNAL_CATCH_MSG( "SUCCEED", Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ ) -#define ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE() - -#endif - -#define CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION( signature ) - -// "BDD-style" convenience wrappers -#define SCENARIO( ... ) TEST_CASE( "Scenario: " __VA_ARGS__ ) -#define SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " __VA_ARGS__ ) - -#define GIVEN( desc ) SECTION( std::string(" Given: ") + desc ) -#define WHEN( desc ) SECTION( std::string(" When: ") + desc ) -#define AND_WHEN( desc ) SECTION( std::string("And when: ") + desc ) -#define THEN( desc ) SECTION( std::string(" Then: ") + desc ) -#define AND_THEN( desc ) SECTION( std::string(" And: ") + desc ) - -using Catch::Detail::Approx; - -#else -////// -// If this config identifier is defined then all CATCH macros are prefixed with CATCH_ -#ifdef CATCH_CONFIG_PREFIX_ALL - -#define CATCH_REQUIRE( ... ) (void)(0) -#define CATCH_REQUIRE_FALSE( ... ) (void)(0) - -#define CATCH_REQUIRE_THROWS( ... ) (void)(0) -#define CATCH_REQUIRE_THROWS_AS( expr, exceptionType ) (void)(0) -#define CATCH_REQUIRE_THROWS_WITH( expr, matcher ) (void)(0) -#if !defined(CATCH_CONFIG_DISABLE_MATCHERS) -#define CATCH_REQUIRE_THROWS_MATCHES( expr, exceptionType, matcher ) (void)(0) -#endif// CATCH_CONFIG_DISABLE_MATCHERS -#define CATCH_REQUIRE_NOTHROW( ... ) (void)(0) - -#define CATCH_CHECK( ... ) (void)(0) -#define CATCH_CHECK_FALSE( ... ) (void)(0) -#define CATCH_CHECKED_IF( ... ) if (__VA_ARGS__) -#define CATCH_CHECKED_ELSE( ... ) if (!(__VA_ARGS__)) -#define CATCH_CHECK_NOFAIL( ... ) (void)(0) - -#define CATCH_CHECK_THROWS( ... ) (void)(0) -#define CATCH_CHECK_THROWS_AS( expr, exceptionType ) (void)(0) -#define CATCH_CHECK_THROWS_WITH( expr, matcher ) (void)(0) -#if !defined(CATCH_CONFIG_DISABLE_MATCHERS) -#define CATCH_CHECK_THROWS_MATCHES( expr, exceptionType, matcher ) (void)(0) -#endif // CATCH_CONFIG_DISABLE_MATCHERS -#define CATCH_CHECK_NOTHROW( ... ) (void)(0) - -#if !defined(CATCH_CONFIG_DISABLE_MATCHERS) -#define CATCH_CHECK_THAT( arg, matcher ) (void)(0) - -#define CATCH_REQUIRE_THAT( arg, matcher ) (void)(0) -#endif // CATCH_CONFIG_DISABLE_MATCHERS - -#define CATCH_INFO( msg ) (void)(0) -#define CATCH_WARN( msg ) (void)(0) -#define CATCH_CAPTURE( msg ) (void)(0) - -#define CATCH_TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ )) -#define CATCH_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ )) -#define CATCH_METHOD_AS_TEST_CASE( method, ... ) -#define CATCH_REGISTER_TEST_CASE( Function, ... ) (void)(0) -#define CATCH_SECTION( ... ) -#define CATCH_FAIL( ... ) (void)(0) -#define CATCH_FAIL_CHECK( ... ) (void)(0) -#define CATCH_SUCCEED( ... ) (void)(0) - -#define CATCH_ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ )) - -// "BDD-style" convenience wrappers -#define CATCH_SCENARIO( ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ )) -#define CATCH_SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TESTCASE_METHOD_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ), className ) -#define CATCH_GIVEN( desc ) -#define CATCH_WHEN( desc ) -#define CATCH_AND_WHEN( desc ) -#define CATCH_THEN( desc ) -#define CATCH_AND_THEN( desc ) - -// If CATCH_CONFIG_PREFIX_ALL is not defined then the CATCH_ prefix is not required -#else - -#define REQUIRE( ... ) (void)(0) -#define REQUIRE_FALSE( ... ) (void)(0) - -#define REQUIRE_THROWS( ... ) (void)(0) -#define REQUIRE_THROWS_AS( expr, exceptionType ) (void)(0) -#define REQUIRE_THROWS_WITH( expr, matcher ) (void)(0) -#if !defined(CATCH_CONFIG_DISABLE_MATCHERS) -#define REQUIRE_THROWS_MATCHES( expr, exceptionType, matcher ) (void)(0) -#endif // CATCH_CONFIG_DISABLE_MATCHERS -#define REQUIRE_NOTHROW( ... ) (void)(0) - -#define CHECK( ... ) (void)(0) -#define CHECK_FALSE( ... ) (void)(0) -#define CHECKED_IF( ... ) if (__VA_ARGS__) -#define CHECKED_ELSE( ... ) if (!(__VA_ARGS__)) -#define CHECK_NOFAIL( ... ) (void)(0) - -#define CHECK_THROWS( ... ) (void)(0) -#define CHECK_THROWS_AS( expr, exceptionType ) (void)(0) -#define CHECK_THROWS_WITH( expr, matcher ) (void)(0) -#if !defined(CATCH_CONFIG_DISABLE_MATCHERS) -#define CHECK_THROWS_MATCHES( expr, exceptionType, matcher ) (void)(0) -#endif // CATCH_CONFIG_DISABLE_MATCHERS -#define CHECK_NOTHROW( ... ) (void)(0) - -#if !defined(CATCH_CONFIG_DISABLE_MATCHERS) -#define CHECK_THAT( arg, matcher ) (void)(0) - -#define REQUIRE_THAT( arg, matcher ) (void)(0) -#endif // CATCH_CONFIG_DISABLE_MATCHERS - -#define INFO( msg ) (void)(0) -#define WARN( msg ) (void)(0) -#define CAPTURE( msg ) (void)(0) - -#define TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ )) -#define TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ )) -#define METHOD_AS_TEST_CASE( method, ... ) -#define REGISTER_TEST_CASE( Function, ... ) (void)(0) -#define SECTION( ... ) -#define FAIL( ... ) (void)(0) -#define FAIL_CHECK( ... ) (void)(0) -#define SUCCEED( ... ) (void)(0) -#define ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ )) - -#endif - -#define CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION_NO_REG( INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionTranslator ), signature ) - -// "BDD-style" convenience wrappers -#define SCENARIO( ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ) ) -#define SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TESTCASE_METHOD_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ), className ) - -#define GIVEN( desc ) -#define WHEN( desc ) -#define AND_WHEN( desc ) -#define THEN( desc ) -#define AND_THEN( desc ) - -using Catch::Detail::Approx; - -#endif - -#endif // ! CATCH_CONFIG_IMPL_ONLY - -// start catch_reenable_warnings.h - - -#ifdef __clang__ -# ifdef __ICC // icpc defines the __clang__ macro -# pragma warning(pop) -# else -# pragma clang diagnostic pop -# endif -#elif defined __GNUC__ -# pragma GCC diagnostic pop -#endif - -// end catch_reenable_warnings.h -// end catch.hpp -#endif // TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED - diff --git a/CMakeLists.txt b/CMakeLists.txt index 141a6e91a..bfbff7e9d 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,13 @@ cmake_minimum_required(VERSION 3.11) project(pc-ble-driver) -include (cmake/pc-ble-driver.cmake) +include(cmake/pc-ble-driver.cmake) + +include(TestBigEndian) +TEST_BIG_ENDIAN(IS_BIG_ENDIAN) +if(IS_BIG_ENDIAN) + message(FATAL_ERROR "Protocol implementation does not support big endian platforms.") +endif() # Common source files file(GLOB LIB_BASE_C_SRC_FILES "src/common/*.c") @@ -22,11 +28,31 @@ else() file(GLOB LIB_PLATFORM_CPP_SRC_FILES "src/common/platform/linux/*.cpp") endif() +set(PC_BLE_DRIVER_DEFAULT_VERSION "4.0.0") +set(PC_BLE_DRIVER_CONNECTIVITY_DEFAULT_VERSION "0.0.0") + +if(NOT DEFINED PC_BLE_DRIVER_VERSION) + message(STATUS "PC_BLE_DRIVER_VERSION not specified, setting it to ${PC_BLE_DRIVER_DEFAULT_VERSION}") + set(PC_BLE_DRIVER_VERSION "${PC_BLE_DRIVER_DEFAULT_VERSION}") +endif() + +# Add connectivity firmware building +if(NOT DEFINED CONNECTIVITY_VERSION) + message(STATUS "CONNECTIVITY_VERSION not specified, using ${PC_BLE_DRIVER_CONNECTIVITY_DEFAULT_VERSION}") + set(CONNECTIVITY_VERSION "${PC_BLE_DRIVER_CONNECTIVITY_DEFAULT_VERSION}" CACHE STRING "" FORCE) +else() + set(CONNECTIVITY_VERSION "${CONNECTIVITY_VERSION}" CACHE STRING "" FORCE) +endif() + # SDK source files, different per API version + +# Newer codecs from nRF5 SDK are backwards compatible to SoftDevice API v3 +file(GLOB_RECURSE LIB_NEWER_SDK_API_COMMON_C_SRC_FILES "src/sd_api_common/sdk/*.c") + foreach(SD_API_VER ${SD_API_VERS}) string(TOLOWER ${SD_API_VER} SD_API_VER_L) file(GLOB_RECURSE LIB_SDK_${SD_API_VER}_C_SRC_FILES "src/${SD_API_VER_L}/sdk/*.c") - file(GLOB_RECURSE LIB_SDK_${SD_API_VER}_CPP_SRC_FILES "src/${SD_API_VER_L}/sdk/*.cpp") + file(GLOB_RECURSE LIB_SDK_${SD_API_VER}_CPP_SRC_FILES "src/${SD_API_VER_L}/*.cpp") endforeach(SD_API_VER) # Set C, CPP and platform source file groups and properties @@ -36,11 +62,19 @@ foreach(SD_API_VER ${SD_API_VERS}) ${LIB_TRANSPORT_C_SRC_FILES} ) + if(SD_API_VER STRGREATER "SD_API_V2") + list(APPEND LIB_${SD_API_VER}_C_SRC_FILES ${LIB_NEWER_SDK_API_COMMON_C_SRC_FILES}) + endif() + + #message(STATUS "SD: ${SD_API_VER}: C_SRC: ${LIB_${SD_API_VER}_C_SRC_FILES}") + set(LIB_${SD_API_VER}_CPP_SRC_FILES ${LIB_BASE_CPP_SRC_FILES} ${LIB_SDK_${SD_API_VER}_CPP_SRC_FILES} ${LIB_TRANSPORT_CPP_SRC_FILES} ) + #message(STATUS "SD: ${SD_API_VER}: CPP_SRC: ${LIB_${SD_API_VER}_CPP_SRC_FILES}") + # Force .c files to be compiled with the C++ compiler if(NOT APPLE) set_source_files_properties( @@ -53,25 +87,16 @@ endforeach(SD_API_VER) set(LIB_PLATFORM_SRC_FILES ${LIB_PLATFORM_C_SRC_FILES} ${LIB_PLATFORM_CPP_SRC_FILES}) -if(WIN32) - # Disable CRT Warnings with Visual Studio - set_source_files_properties( - ${LIB_PLATFORM_C_SRC_FILES} - PROPERTIES - COMPILE_FLAGS "${CMAKE_C_FLAGS} -D_CRT_SECURE_NO_WARNINGS" - ) - set_source_files_properties( - ${LIB_PLATFORM_CPP_SRC_FILES} - PROPERTIES - COMPILE_FLAGS "${CMAKE_CXX_FLAGS} -D_CRT_SECURE_NO_WARNINGS" - ) -endif() # Add common compiler definitions add_definitions( -DSD_RPC_EXPORTS -DHCI_LINK_CONTROL # Adds support for Link Control packets according to the HCI standard ) +if(WIN32) + add_definitions(-D_CRT_SECURE_NO_WARNINGS) +endif() + # Add libraries foreach(SD_API_VER ${SD_API_VERS}) # Object library, from which both shared and static will be built @@ -86,30 +111,45 @@ foreach(SD_API_VER ${SD_API_VERS}) endforeach(SD_API_VER) # Set common include directories +find_path(ASIO_INCLUDE_DIR asio.hpp) + include_directories( include/common include/common/sdk_compat include/common/internal include/common/internal/transport - # Include boost as a system include so that the compiler doesn't nag about issues in boost header files - SYSTEM ${Boost_INCLUDE_DIRS} + SYSTEM ${ASIO_INCLUDE_DIR} ) # Set per-SD API version include directories and compiler definitions foreach(SD_API_VER ${SD_API_VERS}) string(TOLOWER ${SD_API_VER} SD_API_VER_L) - target_include_directories (${PC_BLE_DRIVER_${SD_API_VER}_OBJ_LIB} PRIVATE - src/${SD_API_VER_L}/sdk/components/libraries/util - src/${SD_API_VER_L}/sdk/components/serialization/application/codecs/common - src/${SD_API_VER_L}/sdk/components/serialization/application/codecs/s130/serializers - src/${SD_API_VER_L}/sdk/components/serialization/application/codecs/s132/serializers - src/${SD_API_VER_L}/sdk/components/serialization/application/codecs/ble/serializers - src/${SD_API_VER_L}/sdk/components/serialization/common - src/${SD_API_VER_L}/sdk/components/serialization/common/struct_ser/s130 - src/${SD_API_VER_L}/sdk/components/serialization/common/struct_ser/s132 - src/${SD_API_VER_L}/sdk/components/serialization/common/struct_ser/ble - src/${SD_API_VER_L}/sdk/components/softdevice/s132/headers - ) + + # Newer codecs from nRF5 SDK are backwards compatible to SoftDevice API v3 + if(SD_API_VER STRGREATER "SD_API_V2") + target_include_directories (${PC_BLE_DRIVER_${SD_API_VER}_OBJ_LIB} SYSTEM PRIVATE + src/sd_api_common/sdk/components/libraries/util + src/${SD_API_VER_L}/sdk/components/serialization/application/codecs/common + src/${SD_API_VER_L}/sdk/components/serialization/application/codecs/s132/serializers + src/${SD_API_VER_L}/sdk/components/serialization/application/codecs/ble/serializers + src/sd_api_common/sdk/components/serialization/common + src/sd_api_common/sdk/components/serialization/common/struct_ser/ble + src/${SD_API_VER_L}/sdk/components/softdevice/s132/headers + src/${SD_API_VER_L}/sdk/components/softdevice/s140/headers + src/${SD_API_VER_L} + ) + else() + target_include_directories (${PC_BLE_DRIVER_${SD_API_VER}_OBJ_LIB} SYSTEM PRIVATE + src/${SD_API_VER_L}/sdk/components/libraries/util + src/${SD_API_VER_L}/sdk/components/serialization/application/codecs/common + src/${SD_API_VER_L}/sdk/components/serialization/application/codecs/s130/serializers + src/${SD_API_VER_L}/sdk/components/serialization/common + src/${SD_API_VER_L}/sdk/components/serialization/common/struct_ser/s130 + # S132 and S130 headers are the same + src/${SD_API_VER_L}/sdk/components/softdevice/s132/headers + ) + endif() + # Provide the NRF_SD_BLE_API_VERSION macro to each variant string(REGEX MATCH "[0-9]+$" _SD_API_VER_NUM "${SD_API_VER}") set(SD_API_VER_COMPILER_DEF_NUM "-D${SD_API_VER_COMPILER_DEF}=${_SD_API_VER_NUM}") @@ -139,6 +179,14 @@ endforeach(SD_API_VER) # Add tests add_subdirectory(test) +# Add examples +add_subdirectory(examples) -include (cmake/clang-dev-tools.cmake) +# Add install target +include(cmake/install-target.cmake) + +if(COMPILE_CONNECTIVITY) + add_subdirectory(hex) +endif() +include (cmake/clang-dev-tools.cmake) diff --git a/Installation.md b/Installation.md index 67fce1ccd..495207b45 100644 --- a/Installation.md +++ b/Installation.md @@ -1,256 +1 @@ -## SoftDevice and IC support - -The libraries generated are compatible with the following SoftDevice API versions and nRF5x ICs: - -* SoftDevice s130 API version 2: `s130_nrf51_2.x.x` (nRF51 and nRF52 series ICs) -* SoftDevice s132 API version 5: `s132_nrf52_5.x.x` (only for nRF52 series ICs) - -The .hex files included in the `hex/sd_api_v` folder include both the SoftDevice and the connectivity firmware required to communicate with it. - -## Operating system support - -* Windows (XP, 7, 8, 8.1, 10) 32 and 64-bit -* GNU/Linux (Ubuntu tested) 32 and 64-bit -* macOS (OS X) 32 and 64-bit - -## Hardware setup - -### Installing drivers and tools - -This communication library works over any kind of serial port (UART), but it is most often used over a Segger J-Link USB CDC UART. -To set up the required J-Link drivers simply download and install the version matching you operating system: - -* [Segger J-Link Downloads](https://www.segger.com/jlink-software.html) - -Additionally to flash the connectivity firmware you will need `nrfjprog` which is bundled with the nRF5x Command-Line Tools, which can be downloaded from: - -* [nRF5x Command-Line Tools for Windows](https://www.nordicsemi.com/eng/nordic/Products/nRF51822/nRF5x-Command-Line-Tools-Win32/33444) -* [nRF5x Command-Line Tools for Linux 32-bit](https://www.nordicsemi.com/eng/nordic/Products/nRF51822/nRF5x-Command-Line-Tools-Linux32/52615) -* [nRF5x Command-Line Tools for Linux 64-bit](https://www.nordicsemi.com/eng/nordic/Products/nRF51822/nRF5x-Command-Line-Tools-Linux64/51386) -* [nRF5x Command-Line Tools for OS X](https://www.nordicsemi.com/eng/nordic/Products/nRF51822/nRF5x-Command-Line-Tools-OSX/53402) - -### Flashing the connectivity firmware - -To use this library you will need to flash the connectivity firmware on a nRF5x IC - -Once you have installed the nRF5x Command-Line Tools, you can erase and program the IC: - - $ nrfjprog -f NRF5 -e - $ nrfjprog -f NRF5 --program hex/sd_api_v/connectivity___with_s13_...hex - -### J-Link USB CDC serial ports - -After you have installed the required drivers and connected a J-Link enabled board (such as the Nordic Development Kits) the port should appear automatically - -#### Windows - -The serial port will appear as `COMxx`. Simply check the "Ports (COM & LPT)" section in the Device Manager. - -#### Ubuntu Linux - -The serial port will appear as `/dev/ttyACMx`. By default the port is not accessible to all users. Type the command below to add your user to the `dialout` group to give it access to the serial port. Note that re-login is required for this to take effect. - - sudo usermod -a -G dialout - -To prevent the modemmanager service from trying to connect to the CDC ACM serial port: - - systemctl stop ModemManager.service - systemctl disable ModemManager.service - -#### macOS (OS X) - -The serial port will appear as `/dev/tty.usbmodemXXXX`. - -**IMPORTANT NOTE** - -On macOS (OS X) there is a known issue with the Segger J-Link firmware (that runs on the Debug probe on the board) related to USB packet sizes. This results in the timeout error `Failed to open nRF BLE Driver. Error code: 0x0D` when the serial port is attempted to be opened. - -There are two ways to solve this issue: - -1. Use the Segger firmware, but disable the Mass Storage Device (MSD) feature. Instructions are available [here](https://wiki.segger.com/index.php?title=J-Link-OB_SAM3U). - -2. Replace the firmware on the Debug probe with the mbed DAPLink firmware: - - Enter bootloader mode by powering off the nRF5 Development Kit and then pressing IF BOOT/RESET while you power on the kit. - - Drag and drop the [nrf5x_osx_fix.bin](https://github.com/NordicSemiconductor/pc-ble-driver/blob/master/tools/nrf5x_osx_fix.bin) file into the BOOTLOADER mass storage device. - -If you want to revert back to the Segger firmware you will have to download the it from [this location](http://www.nordicsemi.com/eng/nordic/Products/nRF51-DK/nRF5x-OB-JLink-IF/52276) - -## Compiling the connectivity .hex files - -Precompiled connectivity firmware are provided and can be used with standard Nordic Development Kits. The .hex files are available in the `hex/sd_api_v` folder. They include the SoftDevice and the connectivity application. - -You only need to recompile the connectivity application if you want to run it on a custom board. You can use the `hex/sd_api_v/bootstrap_sd_api_v.sh` script to download and patch the nRF SDK and the application with ease. Using this scripts, the steps 1 and 2 below are done automatically: - -1. [Download the nRF SDK 11 or 14](https://developer.nordicsemi.com/nRF5_SDK/) (depending on the SoftDevice API you want to use) and unzip `nRF5_SDK_.._.zip` -2. Apply the patch `hex/sd_api_v/SDK_connectivity.patch` from the unzipped SDK folder (e.g. `git apply -p1 --ignore-whitespace /repos/pc-ble-driver/hex/sd_api_v2/sdk110_connectivity.patch`) -3. Open the connectivity project `/examples/ble_central_and_peripheral/ble_connectivity/pca100/ser_s13_hci` -4. Compile it using the the compiler of your choice -5. Merge the built connectivity hex file with the corresponding SoftDevice hex file (e.g. `mergehex -m connectivity.hex softdevice.hex -o connectivity_with_softdevice.hex`) - -## Building Boost - -The Boost static libraries required by this drivers must be built before you can build any of the -repositories above that depend on pc-ble-driver. - -### Obtain the Boost source code - -Note: This step is not required for macOS (OS X). - -Use the following link to download the Boost source code: - -* [Boost](http://www.boost.org/users/download) (>=1.67.0) - -- Download and extract Boost to a folder of your choice. -- Set the environment variable `BOOST_ROOT` to the path where you have extracted Boost. - -For example on Windows assuming you've unpacked Boost in `c:\boost\boost_1_xx_y`: - - setx BOOST_ROOT "c:\boost\boost_1_xx_y" - -And on Linux or macOS (OS X) assuming you've unpacked Boost in `~/boost/boost_1_xx_y`: - - export BOOST_ROOT="~/boost/boost_1_xx_y" - -#### Windows - -Install Microsoft Visual Studio. The following versions supported are: - -* Visual Studio 2015 (MSVC 14.0) - -Open a Microsoft Visual Studio Command Prompt and issue the following commands: - - > cd %BOOST_ROOT% - > bootstrap.bat - > b2 toolset=msvc- address-model=<32,64> link=static --with-thread --with-system --with-regex --with-date_time --with-chrono - -**Note**: If you intend to build a 64-bit version of Boost, you might need to open a 64-bit command prompt such as -"Visual Studio 2015 x86 x64 Cross Tools Command Prompt" or similar, or run `vcvarsall.bat x86_amd64` or `setenv.cmd" /Release /x64`. - -**Note**: Refer to the [compiler list](http://www.boost.org/build/doc/html/bbv2/reference/tools.html#bbv2.reference.tools.compilers) of the Boost documentation -to find the version of the MSVC that you need to provide using the `toolset=` option. - -**Note**: Select 32 or 64-bit with the `address-model=` option. - -**Note**: Use `dumpbin /headers ` to check whether a particular object file is 32 or 64-bit. - -##### Examples - -Build 64-bit Boost with Visual Studio 2015: - - > b2 toolset=msvc-14.0 address-model=64 link=static --with-thread --with-system --with-regex --with-date_time --with-chrono - -##### Side-by-side 32 and 64-bit versions - -If you want to be able to have both the 32 and 64-bit versions of Boost available, add `--stagedir=./stage/x86_32` when building the 32-bit version and `--stagedir=./stage/x86_64` when building the 64-bit one, and they will be placed in `stage\x86_32\lib` and `stage\x86_64\lib` respectively. Later on you when building repositories that depend on this one, you will be able to point CMake the correct version of the libraries by using `-DBOOST_LIBRARYDIR="c:\boost\boost_1_xx_y\stage\x86_XX\lib`. - -#### Ubuntu Linux - -Install the required packages to build Boost: - - sudo apt-get install git make gcc g++ - -Additionally if you want to build non-native binaries (for example 32-bit binaries on a 64-bit Ubuntu installation): - - sudo apt-get install gcc-multilib - -Open a terminal window and issue the following commands: - - $ cd $BOOST_ROOT - $ ./bootstrap.sh - $ ./b2 toolset=gcc cxxflags=-fPIC cflags=-fPIC address-model=<32,64> link=static --with-thread --with-system --with-regex --with-date_time --with-chrono - -**Note**: Select 32 or 64-bit with the `address-model=` option. - -**Note**: Use `objdump -f ` to check whether a particular object file is 32 or 64-bit. - -##### Side-by-side 32 and 64-bit versions - -If you want to be able to have both the 32 and 64-bit versions of Boost available, add `--stagedir=./stage/x86_32` when building the 32-bit version and `--stagedir=./stage/x86_64` when building the 64-bit one, and they will be placed in `stage/x86_32` and `stage/x86_64` respectively. Later on you when building repositories that depend on this one, you will be able to point CMake the correct version of the libraries by using `-DBOOST_LIBRARYDIR="~/boost/boost_1_xx_y/stage/x86_XX/lib`. - -#### macOS (OS X) 10.11 and later - -Install Xcode from the App Store. - -The simplest way to install Boost is to use Homebrew. If you don't have Homebrew installed simply run on a terminal: - - $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" - -If you already have Homebrew installed, make sure it's up to date with: - - $ brew update - $ brew upgrade - -Once Homebrew is installed you can use the `brew` command on a terminal to install boost: - - $ brew install boost - -This will download the boost source and compile it, so it might take a while. - -## Compiling pc-ble-driver from source - -Assuming that you have built the Boost libraries and installed the tools required to do so [as described above](#building-boost), you can now build the shared library. - -### Dependencies - -To build this project you will need the following tools: - -* [CMake](https://cmake.org/) (>=3.11) -* A C/C++ toolchain (should already have been installed to build Boost) - -See the following sections for platform-specific instructions on the installation of the dependencies. - -#### Windows - -* Install the latest CMake stable release by downloading the Windows Installer from: - -[CMake Downloads](https://cmake.org/download/) - -Open a Microsoft Visual Studio Command Prompt and issue the following from the root folder of the repository: - - > cd build - > cmake -G "Visual Studio 14 " <-DBOOST_LIBRARYDIR=">" .. - > msbuild ALL_BUILD.vcxproj > - -**Note**: Add `Win64` to the `-G` option to build a 64-bit version of the driver. - -**Note**: Optionally select the location of the Boost libraries with the `-DBOOST_LIBRARYDIR` option. - -**Note**: Optionally select the build configuration with the `/p:Configuration=` option. Typically `Debug`, `Release`, `MinSizeRel` and `RelWithDebInfo` are available. - -##### Examples - -Building for with 64-bit Visual Studio 2015: - - > cmake -G "Visual Studio 14" .. - -#### Ubuntu Linux - -Install cmake: - - $ sudo apt-get install cmake - -Then change to the root folder of the repository and issue the following commands: - - $ cd build - > cmake -G "Unix Makefiles" <-DCMAKE_BUILD_TYPE=> <-DARCH=> <-DBOOST_LIBRARYDIR=">" .. - $ make - -**Note**: Optionally Select the build configuration with the `-DCMAKE_BUILD_TYPE` option. Typically `Debug`, `Release`, `MinSizeRel` and `RelWithDebInfo` are available. - -**Note**: Optionally select the target architecture (32 or 64-bit) using the `-DARCH` option. - -**Note**: Optionally select the location of the Boost libraries with the `-DBOOST_LIBRARYDIR` option. - -#### macOS (OS X) 10.11 and later - -Install cmake with Homebrew with the `brew` command on a terminal: - - $ brew install cmake - -Then change to the root folder of the repository and issue the following commands: - - $ cd build - $ cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE= .. - $ make - -**Note**: Optionally Select the build configuration with the `-DCMAKE_BUILD_TYPE` option. Typically `Debug`, `Release`, `MinSizeRel` and `RelWithDebInfo` are available. +Deprecation notice. The contents of this file have been moved to [README.md](/README.md) \ No newline at end of file diff --git a/Issues.md b/Issues.md new file mode 100644 index 000000000..988a3bd30 --- /dev/null +++ b/Issues.md @@ -0,0 +1,99 @@ +# Known Issues + +## Windows Issues + +#### /dev/null git apply issue + +`Git` >= 2.19.0 is required to solve this issue. + +#### CreateProcess issue + +``` +echo Makefile +CreateProcess(NULL,echo Makefile,...) +process_begin: CreateProcess(NULL, echo Makefile, ...) failed. +Putting child 01DD8B10 (_build) PID 31536216 on the chain. +Live child 01DD8B10 (_build) PID 31536216 +make (e=2): The system cannot find the file specified. +Reaping losing child 01DD8B10 PID 31536216 +make: *** [Makefile:323: _build] Error 2 +Removing child 01DD8B10 PID 31536216 from chain. +``` + +This issue is due to having `sh` or `bash` in PATH. +`sh` or `bash` must not be in the PATH. + +#### Long paths issue + +``` +Compiling file: ble_gap_evt_conn.c +../../../../../../components/serialization/connectivity/codecs/ble/serializers/ble_gap_evt_conn.c:46:10: fatal error: conn_ble_gap_sec_keys.h: No such file or directory +#include "conn_ble_gap_sec_keys.h" +^~~~~~~~~~~~~~~~~~~~~~~~~ +compilation terminated. +make: *** [../../../../../../components/toolchain/gcc/Makefile.common:272: +``` + +In the Windows API (with some exceptions discussed in the following paragraphs), the maximum length for a path is MAX_PATH, which is defined as 260 characters. If the path length exceeds MAX_PATH, then it will have this issue. +[See more details here](https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file#paths) + + +--- +## macOS Issues + +#### Timeout error related to the SEGGER J-Link firmware + +On macOS there is a known issue with the SEGGER J-Link firmware (that runs on the Debug probe on the board) related to USB packet sizes. This results in the timeout error `Failed to open nRF BLE Driver. Error code: 0x0D` when the serial port is attempted to be opened. + +There are two ways to solve this issue: + +1. Use the SEGGER firmware, but disable the Mass Storage Device (MSD) feature. Instructions are available [here](https://wiki.segger.com/index.php?title=J-Link-OB_SAM3U). + +2. Replace the firmware on the Debug probe with the mbed DAPLink firmware: + - Enter bootloader mode by powering off the nRF5 Development Kit and then pressing IF BOOT/RESET while you power on the kit. + - Drag and drop the [nrf5x_osx_fix.bin](https://github.com/NordicSemiconductor/pc-ble-driver/blob/master/tools/nrf5x_osx_fix.bin) file into the BOOTLOADER mass storage device. + +If you want to revert back to the SEGGER firmware you will have to download the it from [this location](http://www.nordicsemi.com/eng/nordic/Products/nRF51-DK/nRF5x-OB-JLink-IF/52276) + + +--- +## SEGGER J-Link-OB Issues + +#### Data corruption or drops + +Due to a known issue in Segger’s J-Link-OB firmware, depending on your operating system and version you might experience data corruption or drops if you use the USB CDC ACM Serial Port with packets larger than 64 bytes. This has been observed on both GNU/Linux and macOS. + +To avoid this, you can simply disable the Mass Storage Device by opening: + +On GNU/Linux or macOS JLinkExe from a terminal +On Microsoft Windows the “JLink Commander†application +And then typing the following: + +```bash +MSDDisable +``` + +#### Invalid USB packets/drops data + +SEGGER J-Link-OB sends invalid USB packets from J-Link-OB UART to USB host and drops data. + +For example, SEGGER J-Link-OB does not send 0xC0, 0x00 from UART to USB host. +After 0xD1 0x02 0x7D is received no more data is received in PC application, CTS is kept high. +This has been observed in Linux using VirtualBox with Oracle VM VirtualBox Extension Pack. + +![USB Analyzer](./doc/segger_ob_usb_analyzer.png) +![Logic Analyzer](./doc/segger_ob_logic_analyzer.png) + +The only way to mitigate this is to not use VirtualBox. + +#### Starts clocking data at 9600 baud + +Sometimes SEGGER-J-Link-OB starts to clock UART data at 9600 baud even if a different baud rate is configured. + +This leads to timeout errors (NRF_ERROR_TIMEOUT) in pc-ble-driver since the connectivity firmware is not able to interpret the data. + +The only way to mitigate this is to close the serial port and try again. + +#### Hardware flow control detection + +Sometimes SEGGER-J-Link-OB gets the hardware flow control detection wrong. A generic way to circumvent this is to open the UART port and use a dummy baud rate first and then use the wanted baud rate. This will restart the hardware flow control detection. This mitigation is implemented in pc-ble-driver. diff --git a/LICENSE b/LICENSE index 514c204ad..e2153d05d 100644 --- a/LICENSE +++ b/LICENSE @@ -1,5 +1,5 @@ -Copyright (c) 2016 Nordic Semiconductor ASA +Copyright (c) 2016-2018 Nordic Semiconductor ASA All rights reserved. Redistribution and use in source and binary forms, with or without modification, diff --git a/README.md b/README.md old mode 100755 new mode 100644 index f3f9798e2..18f0d0ff3 --- a/README.md +++ b/README.md @@ -2,7 +2,34 @@ `pc-ble-driver` provides C/C++ libraries for Bluetooth Low Energy nRF5 SoftDevice serialization. +* [Overview](#Overview) +* [Architecture](#Architecture) +* [Supported environments](#Supported-environments) + * [Operating system](#Operating-system) + * [SoftDevice and IC](#SoftDevice-and-IC) +* [Installing device drivers](#Installing-device-drivers) + * [Driver installation](#Driver-installation) + * [Driver validation](#Driver-validation) +* [Installing tools](#Installing-tools) +* [Installing dependencies](#Installing-dependencies) + * [Installing on Windows](#Installing-dependencies-on-Windows) + * [Installing on Ubuntu Linux](#Installing-dependencies-on-Ubuntu-Linux) + * [Installing on macOS](#Installing-dependencies-on-macOS) +* [Compiling pc-ble-driver from source](#Compiling-pc-ble-driver-from-source) + * [Compiling on Windows](#Compiling-pc-ble-driver-on-Windows) + * [Compiling on Ubuntu Linux or macOS](#Compiling-pc-ble-driver-on-Ubuntu-Linux-or-macOS) +* [Compiling connectivity HEX files](#Compiling-connectivity-HEX-files) + * [Compiling on Windows](#Compiling-connectivity-HEX-files-on-Windows) + * [Compiling on Ubuntu Linux or macOS](#Compiling-connectivity-HEX-files-on-Ubuntu-Linux-or-macOS) +* [Programming connectivity HEX files](#Programming-connectivity-HEX-files) +* [Examples](#Examples) +* [Known issues](#Known-issues) +* [License](#License) + +--- + ## Overview + `pc-ble-driver` consists of a set of static and shared libraries that provide [SoftDevice](http://infocenter.nordicsemi.com/topic/com.nordic.infocenter.softdevices52/dita/nrf52/softdevices.html?cp=2_3) functionality to the application via serial port communication with an nRF5 connectivity chip running the SoftDevice and connectivity software, included as a single .hex file [here](./hex/). For more information on SoftDevice serialization see [Serialization](http://infocenter.nordicsemi.com/topic/com.nordic.infocenter.sdk5.v14.0.0/lib_serialization.html?cp=4_0_0_3_33). The C/C++ libraries can be interfaced with directly, but are also provided as higher-level bindings that ease development at the cost of reduced control (acceptable in most cases): @@ -10,11 +37,491 @@ The C/C++ libraries can be interfaced with directly, but are also provided as hi * [pc-ble-driver-js Node.JS bindings](https://github.com/NordicSemiconductor/pc-ble-driver-js) * [pc-ble-driver-py Python bindings](https://github.com/NordicSemiconductor/pc-ble-driver-py) -## Installing +--- + + +## Architecture + +![Architecture](https://infocenter.nordicsemi.com/topic/com.nordic.infocenter.sdk5.v14.0.0/architecture_overview_serialization.svg) + +Where the 'Application chip' is just generic hardware (i.e. a Windows, Linux or macOS device), although it could also be an Arduino or Raspberry Pi for example. + +--- + +## Supported environments + +#### Operating system + +* Windows 7, 8 and 10, 32 and 64-bit (tested on Windows 7) +* Ubuntu Linux LTS 64-bit (tested on Ubuntu 18.04) +* macOS 64-bit (tested on 10.14 Mojave) + +#### SoftDevice and IC + +To use pc-ble-driver, your Development Kit needs to have the correct firmware. The needed firmwares are found in the `hex/sd_api_v` folder and contain the SoftDevice and connectivity firmware required to communicate with `pc-ble-driver`. + +The generated libraries are compatible with the following SoftDevice API versions and nRF5x ICs: + +* SoftDevice s130 API version 2: `connectivity__<115k2|1m>_with_s130_2.x.x` (nRF51 and nRF52 series ICs) +* SoftDevice s132 API version 3: `connectivity__<115k2|1m|*usb>_with_s132_3.x.x` (only for nRF52 series ICs) +* SoftDevice s132 API version 5: `connectivity__<115k2|1m|*usb>_with_s132_5.x.x` (only for nRF52 series ICs) +* SoftDevice s132 API version 6: `connectivity__<115k2|1m|*usb>_with_s132_6.x.x` (only for nRF52 series ICs) +* SoftDevice s140 API version 6: `connectivity__<115k2|1m|*usb>_with_s140_6.x.x` (only for nRF52 series ICs) + +*usb) only for nRF52 series ICs with USBD peripheral + +###### Supported Development Kits +| PCA | Official name | Article number | Notes | +-----------|------------------------------|----------------|----------| +| PCA10028 | nRF51 DEVELOPMENT KIT | nRF6824 | | +| PCA10031 | nRF51 DONGLE | nRF6825 | | +| PCA10040 | nRF52 DEVELOPMENT KIT | nRF6827 | | +| PCA10056 | nRF52840 { Development Kit } | nRF6828 | *) | +| PCA10059 | nRF52840 { Dongle } | nRF6829 | Can only use connectivity firmware with Nordic USB CDC serial port support | + +*) Can use both Nordic USB CDC serial port version and SEGGER J-Link-OB (VCOM) version. Using Nordic USB CDC serial port version on PCA10056 requires that you connect pins P0.16 and P0.24. The pins to QSPI chip must also be in place (they are by default). The algorithm for detecting if it is PCA10056 or PCA10059 is to check if it is possible to communicate with the QSPI chip. PCA10059 does not have a QSPI chip. The detection is used by nRF Connect DFU trigger to determine what pin to use for resetting the device when changing between DFU and application mode. + +--- + +## Installing device drivers + +### Driver installation + +This communication library works over any kind of serial port (UART), but it is most often used over a Segger J-Link USB CDC UART. +To set up the required J-Link drivers simply download and install the version matching you operating system: + +* [SEGGER J-Link](https://www.segger.com/jlink-software.html) + +After you have installed the required drivers and connected a J-Link enabled board (such as the Nordic Development Kits) the port should be available. + +In addition, you have to disable the `Mass Storage Device` in order to use `pc-ble-driver` to communicate with the device, [see `data corruption or drops issue`](./issues/Issues#Data-corruption-or-drops). + +### Driver validation + +#### Validating on Windows + +The serial port will appear as `COMxx`. +Simply check the "Ports (COM & LPT)" section in the Device Manager. + +#### Validating on Ubuntu Linux + +The serial port will appear as `/dev/ttyACMx`. + +By default the port is not accessible to all users. Type the command below to add your user to the `dialout` group to give it access to the serial port. Note that re-login is required for this to take effect. + +```bash + $ sudo usermod -a -G dialout +``` + +To prevent the modemmanager service from trying to connect to the CDC ACM serial port: + +```bash + $ systemctl stop ModemManager.service + $ systemctl disable ModemManager.service +``` + +#### Validating on macOS + +The serial port will appear as `/dev/tty.usbmodemXXXX`. + + +There is a known issue, check it [here](./issues/Issues.md#Timeout-error-related-to-the-SEGGER-J-Link-firmware) +if you met any problems. + +--- + +## Installing tools + +#### nRF5x Command-Line Tools + +To program the connectivity firmware you will need `nrfjprog` which is bundled with the nRF5x Command-Line Tools, which can be downloaded from: + +* [nRF5x Command-Line Tools for Windows](https://www.nordicsemi.com/eng/nordic/Products/nRF51822/nRF5x-Command-Line-Tools-Win32/33444) +* [nRF5x Command-Line Tools for Linux 32-bit](https://www.nordicsemi.com/eng/nordic/Products/nRF51822/nRF5x-Command-Line-Tools-Linux32/52615) +* [nRF5x Command-Line Tools for Linux 64-bit](https://www.nordicsemi.com/eng/nordic/Products/nRF51822/nRF5x-Command-Line-Tools-Linux64/51386) +* [nRF5x Command-Line Tools for macOS](https://www.nordicsemi.com/eng/nordic/Products/nRF51822/nRF5x-Command-Line-Tools-OSX/53402) + +Add `nrfjprog` and `mergehex` to `PATH` on Linux and macOS. + +#### nRF Connect Programmer (optional) + +Alternatively, `nRF Connect Programmer` can help you to program the connectivty firmware with UI support. + +Download +[nRF Connect Desktop]( https://www.nordicsemi.com/eng/Products/Bluetooth-low-energy/nRF-Connect-for-Desktop) +and install `nRF Connect Programmer` there. + +--- + +## Installing dependencies + +To compile `pc-ble-driver` you will need the following tools: + +* A C/C++ toolchain +* [Git](https://git-scm.com/) (>=2.19) +* [CMake](https://cmake.org/) (>=3.11) +* [vcpkg](https://github.com/Microsoft/vcpkg) + +##### [Go to compile `pc-ble-driver` from source](#Compiling-pc-ble-driver-from-source) + +To compile `connectivity` HEX files you will need additional tools: +* [Chocolatey](https://chocolatey.org/) (for installing GNU Make on Windows) +* [GNU Make](https://www.gnu.org/software/make/) +* [GNU Embedded Toolchain for Arm](https://developer.arm.com/open-source/gnu-toolchain/gnu-rm) +* [Python](https://www.python.org/) +* [pip](https://pypi.org/project/pip/) +* [nrfutil](https://github.com/NordicSemiconductor/pc-nrfutil) + +##### [Go to compile `connectivity` HEX files](#Compiling-connectivity-hex-files) + +Follow the steps to install dependencies on a specific platform: + +#### Installing dependencies on Windows + +1. Download `Visual Studio 15` or later version and install. + +2. Install [Chocolatey](https://chocolatey.org/install/). + Install with `cmd.exe` (Run as administrator) + ```bash + # Copy everything below + @"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin" + ``` + + If `Chocolatey` has already been installed as described above but has not been added to PATH, run: + ```bash + $ SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin" + ``` + +2. Install `Git`. + ```bash + $ choco install -y git + ``` + +3. Install `Cmake`. + ```bash + $ choco install -y cmake + ``` + +4. Install [vcpkg](https://github.com/Microsoft/vcpkg). + ```bash + $ git clone https://github.com/Microsoft/vcpkg.git + $ cd vcpkg + $ .\bootstrap-vcpkg.bat + ``` + + Then add the vcpkg location to the `PATH` and set it as `VCPKG_ROOT` environment variable. + +The following steps are needed only if you want to compile your own `connectivity` HEX files. + +1. Install `make`. + ```bash + $ choco install -y make + ``` + +2. Install `GNU Embedded Toolchain for Arm` + ```bash + $ choco install -y gcc-arm-embedded + ``` + + Set its installation path as `GCCARMEMB_TOOLCHAIN_PATH` in environment variables. + By default: + + ```bash + $ SET GCCARMEMB_TOOLCHAIN_PATH=C:\ProgramData\chocolatey\lib\gcc-arm-embedded\tools + ``` + +3. Install `Python` and `pip`, and then install `nrfutil` + ```bash + $ pip install nrfutil + + # Reboot if installation succeeds but validation fails + ``` + + +#### Installing dependencies on Ubuntu Linux + +1. Install `build-essential`. + ```bash + $ sudo apt-get -y install build-essential + ``` + +2. Install `Git` + ```bash + $ sudo apt-get -y install git + ``` + + If the installed version of `Git` is lower than required, then: + ```bash + $ sudo add-apt-repository ppa:git-core/ppa + $ sudo apt update + $ sudo apt install git + ``` + +3. Install `Cmake`. + ```bash + $ sudo apt-get -y install cmake + ``` + + Install `Cmake` from source if the version is lower than required. + +4. Install [vcpkg](https://github.com/Microsoft/vcpkg). + ```bash + $ git clone https://github.com/Microsoft/vcpkg.git + $ cd vcpkg + $ ./bootstrap-vcpkg.sh + ``` -For detailed guidelines on building and installing `pc-ble-driver` and it's dependencies see [Installation.md](./Installation.md). + Then add the vcpkg location to the `PATH` and `VCPKG_ROOT` environment variable. -## Getting started +The following steps are needed only if you want to compile your own `connectivity` HEX files. + +1. Install `GNU Embedded Toolchain for Arm`. + * Download from [here](https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads) + * Extract + * Set its location as `GCCARMEMB_TOOLCHAIN_PATH` in environment variables. + +2. Install `Python` and `pip`, and then install `nrfutil`. + ```bash + $ pip install nrfutil + + # Reboot if installation succeeds but validation fails + ``` + +#### Installing dependencies on macOS + +1. Install `Xcode (>=10.1)`. + +2. Install `gcc6` using [HomeBrew](https://brew.sh/). + ```bash + $ brew install gcc6 + ``` + +3. Install `CMake` using [HomeBrew](https://brew.sh/). + ```bash + $ brew install cmake + $ brew upgrade cmake + ``` + + Install `CMake` from source if the version is lower than required. + +4. Install [vcpkg](https://github.com/Microsoft/vcpkg). + ```bash + $ git clone https://github.com/Microsoft/vcpkg.git + $ cd vcpkg + $ ./bootstrap-vcpkg.sh + ``` + + Then add the vcpkg location to the `PATH` and `VCPKG_ROOT` environment variable. + + The following steps are needed only if you want to compile your own `connectivity` HEX files. + +1. Install `GNU Embedded Toolchain for Arm` + * Download from [here](https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads) + * Extract + * Set its location as `GCCARMEMB_TOOLCHAIN_PATH` in environment variables. + +2. Install `Python` and `pip`, and then install `nrfutil` + ```bash + $ pip install nrfutil + + # Reboot if installation succeeds but validation fails + ``` + +--- + +## Compiling pc-ble-driver from source + +##### [Go to install dependencies](#Installing-dependencies) if you have not done that yet. + +#### Compiling pc-ble-driver on Windows + +1. Install vcpkg dependencies. + + ```bash + # cd + + # Make sure %VCPKG_ROOT% is set and added to %PATH% + $ mkdir build && cd build + $ vcpkg install asio + $ vcpkg install catch2 + ``` + +2. CMake + + To build 32-bit version with Visual Studio 2015: + ```bash + $ cmake -G "Visual Studio 14" -DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%\scripts\buildsystems\vcpkg.cmake .. + ``` + + To build 64-bit version with Visual Studio 2015: + + ```bash + $ cmake -G "Visual Studio 14 Win64" -DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%\scripts\buildsystems\vcpkg.cmake .. + ``` + + Change `-G "Visual Studio 14"` to `-G "Visual Studio 15"` if you are using Visual Studio 2017. + +3. MSBuild + + ```bash + $ msbuild ALL_BUILD.vcxproj + ``` + + Optionally select the build configuration with the `/p:Configuration=` option. Typically `Debug`, `Release`, `MinSizeRel` and `RelWithDebInfo` are available. For example: + + ```bash + $ msbuild ALL_BUILD.vcxproj /p:Configuration=Debug + ``` + +#### Compiling pc-ble-driver on Ubuntu Linux or macOS + +1. Install vcpkg dependencies. + + ```bash + # cd + + # Make sure $VCPKG_ROOT is set and added to $PATH + $ mkdir build && cd build + $ vcpkg install asio + $ vcpkg install catch2 + ``` + +2. CMake + + ```bash + $ cmake \ + -G "Unix Makefiles" \ + -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake \ + .. + ``` + + Optionally Select the build configuration with the `-DCMAKE_BUILD_TYPE` option. Typically `Debug`, `Release`, `MinSizeRel` and `RelWithDebInfo` are available. + + Optionally select the target architecture (32 or 64-bit) using the `-DARCH` option. The values can be `x86_32`, `x86_64`, `x86_32,x86_64`. + For example: + + ```bash + $ cmake \ + -G "Unix Makefiles" \ + -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake \ + -DCMAKE_BUILD_TYPE=Debug \ + -DARCH=x86_32,x86_64 \ + .. + ``` + +3. Make + ```bash + $ make + ``` + +--- + +## Compiling connectivity HEX files + +##### [Go to install dependencies](#Installing-dependencies) if you have not done that yet. + +##### [Go to compile `pc-ble-driver` from source](#Compiling-pc-ble-driver-from-source) if you have not done that yet. + +Make sure the following environment variables are set: +* `VCPKG_ROOT` +* `GCCARMEMB_TOOLCHAIN_PATH` + +Make sure the following paths have been added to PATH: +* `VCPKG_ROOT` +* `mergehex` + +Follow the steps to install dependencies on a specific platform: + +#### Compiling connectivity HEX files on Windows + +1. Set environment + ```bash + # cd + $ SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin" + + # Make sure environment variables have been set + # as described at beginning of this section + ``` + +2. CMake + ```bash + $ cd hex + $ mkdir build && cd build + + # Modify -DCONNECTIVITY_VERSION=a.b.c + $ cmake -G "Visual Studio 14" -DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%\scripts\buildsystems\vcpkg.cmake -DCOMPILE_CONNECTIVITY=1 -DCONNECTIVITY_VERSION=1.0.0 .. + ``` + + `COMPILE_CONNECTIVITY` is set to 1 to enable compiling connectivity firmware. + + `CONNECTIVITY_VERSION` defines a version for the compiled connectivity firmware. + + Check more options at [compiling pc-ble-driver on Windows](#Compiling-pc-ble-driver-on-Windows) + +3. MSBuild + ```bash + $ msbuild compile_connectivity.vcxproj + ``` + + The HEX files are available in the `hex/sd_api_v` folder after compilation. They include the SoftDevice and the connectivity application. + +#### Compiling connectivity HEX files on Ubuntu Linux or macOS + +1. Set environment + ```bash + # cd + $ export TMP=/tmp + + # Make sure environment variables have been set + # as described at beginning of this section + ``` + +2. CMake + ```bash + $ cd hex + $ mkdir build && cd build + + # Modify -DCONNECTIVITY_VERSION=a.b.c + $ cmake \ + -G "Unix Makefiles" \ + -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake \ + -DCOMPILE_CONNECTIVITY=1 \ + -DCONNECTIVITY_VERSION=1.0.0 \ + .. + ``` + + `COMPILE_CONNECTIVITY` is set to 1 to enable compiling connectivity firmware. + + `CONNECTIVITY_VERSION` defines a version for the compiled connectivity firmware. + + Check more options at [compiling pc-ble-driver on Ubuntu Linux or macOS](#Compiling-pc-ble-driver-on-Ubuntu-Linux-or-macOS) + +3. Make + ```bash + $ make compile_connectivity + ``` + + The HEX files are available in the `hex/sd_api_v` folder after compilation. They include the SoftDevice and the connectivity application. + +--- + +## Programming connectivity HEX files + +[Go to install tools](#Installing-tools) if the nRF5x Command-Line Tools have not been installed yet. + +To use this library you will need to program the connectivity firmware on a nRF5x IC + +Use [nRF5x Command-Line Tools](#Installing-tools) to erase and program the IC: + + $ nrfjprog -f NRF5 -e + $ nrfjprog -f NRF5 --program hex/sd_api_v/connectivity___with_s_...hex + +Alternatively, use [nRF Connect Programmer](https://github.com/NordicSemiconductor/pc-nrfconnect-programmer) +to erase and program the IC. + +--- + +## Examples The [examples](./examples) serve as a great starting point for development with `pc-ble-driver`. Examples include a [heart rate monitor](./examples/heart_rate_monitor/) (BLE peripheral) and [heart rate collector](./examples/heart_rate_collector/) (BLE master) and show the basic structure of an application built on `pc-ble-driver`. @@ -24,13 +531,13 @@ Now that you have successfully built and installed `pc-ble-driver`, you are read $ ls build/ > libpc_ble_driver_static_sd_api_v2.a libpc_ble_driver_shared_sd_api_v2.dylib libpc_ble_driver_static_sd_api_v5.a libpc_ble_driver_shared_sd_api_v5.dylib test_uart ... -To quickly get the examples up and running, see [examples/README.md](https://github.com/NordicSemiconductor/pc-ble-driver/blob/master/examples/README.md). - -## Architecture +To quickly get the examples up and running, see [examples/README.md](./examples/README.md). + +## Known issues -![alt tag](http://infocenter.nordicsemi.com/topic/com.nordic.infocenter.sdk5.v14.0.0/architecture_overview_serialization.svg) +If you meet problems during installation of pc-ble-driver, please see [Issues.md](./Issues.md). -Where the 'Application chip' is just generic hardware (i.e. a Windows, OS X or Linux device), although it could also be an Arduino or Raspberry Pi for example. +--- ## License diff --git a/cmake/apple.cmake b/cmake/apple.cmake index b6dee5f13..c413cfa7e 100644 --- a/cmake/apple.cmake +++ b/cmake/apple.cmake @@ -1,7 +1,3 @@ -set(Boost_USE_STATIC_LIBS ON) - -add_compile_options($<$:-std=c++11> $<$:-std=c99>) - set(CMAKE_OSX_ARCHITECTURES "x86_64") set(CMAKE_SKIP_BUILD_RPATH TRUE) diff --git a/cmake/clang-dev-tools.cmake b/cmake/clang-dev-tools.cmake index 184695dde..99869263e 100644 --- a/cmake/clang-dev-tools.cmake +++ b/cmake/clang-dev-tools.cmake @@ -1,12 +1,12 @@ if(WIN32) # CMAKE_EXPORT_COMPILE_COMMANDS is not working on Windows - message(clang-tidy is not supported on Windows) + message(STATUS "clang-tidy is not supported on Windows") # For the target not to fail: add_custom_target(tidy COMMAND echo "not supported on Windows") else() - find_program(CLANG_TIDY run-clang-tidy.py) + find_program(CLANG_TIDY NAMES run-clang-tidy.py run-clang-tidy-6.0.py) if(NOT CLANG_TIDY) message(STATUS "Did not find clang-tidy, target tidy is disabled.") diff --git a/cmake/clang.cmake b/cmake/clang.cmake new file mode 100644 index 000000000..091ded87e --- /dev/null +++ b/cmake/clang.cmake @@ -0,0 +1,24 @@ +add_compile_options( + -Wall + -Wno-unknown-pragmas + -Wno-undef + -Wno-long-long + -Wfloat-equal + -Wpointer-arith +) + +add_compile_options($<$:-std=c++14> $<$:-std=c99>) + +# Skip RPATH +set(CMAKE_SKIP_RPATH TRUE) + +if(NOT ${ARCH} STREQUAL not_set) + +set(ARCH_FLAGS -m${ARCH_BITS}) + add_compile_options( + ${ARCH_FLAGS} + ) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${ARCH_FLAGS}" ) + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${ARCH_FLAGS}" ) + set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${ARCH_FLAGS}" ) +endif() diff --git a/cmake/gcc.cmake b/cmake/gcc.cmake index 88f01c7f8..01bfb538d 100644 --- a/cmake/gcc.cmake +++ b/cmake/gcc.cmake @@ -5,14 +5,10 @@ add_compile_options( -Wno-long-long -Wfloat-equal -Wpointer-arith - #-H # Used for debugging header dependencies. See https://docs.freebsd.org/info/gcc/gcc.info.Preprocessor_Options.html -) - -add_compile_options( -Wlogical-op ) -add_compile_options($<$:-std=c++11> $<$:-std=c99>) +add_compile_options($<$:-std=c++14> $<$:-std=c99>) # Skip RPATH set(CMAKE_SKIP_RPATH TRUE) diff --git a/cmake/install-target.cmake b/cmake/install-target.cmake new file mode 100644 index 000000000..a11e5543e --- /dev/null +++ b/cmake/install-target.cmake @@ -0,0 +1,54 @@ +#Create install target +set(NRF_BLE_DRIVER_INSTALL_ROOT ${CMAKE_BINARY_DIR}/artifacts/pc-ble-driver-${PC_BLE_DRIVER_VERSION}) +set(NRF_BLE_DRIVER_INCLUDE_PREFIX "${NRF_BLE_DRIVER_INSTALL_ROOT}/include/nrf/ble/driver") + +install( + DIRECTORY include/common DESTINATION ${NRF_BLE_DRIVER_INCLUDE_PREFIX} + PATTERN "internal" EXCLUDE + PATTERN "sdk_compat" EXCLUDE +) + +# Directory include/common/sdk_compat is included without sdk_compat +# in SoftDevice. Moving those header files to common remove an extra +# include to think about +#install( +# DIRECTORY include/common/sdk_compat DESTINATION ${NRF_BLE_DRIVER_INCLUDE_PREFIX}/common +#) + +install(FILES "LICENSE" DESTINATION ${NRF_BLE_DRIVER_INSTALL_ROOT}) + +foreach(SD_API_VER ${SD_API_VERS}) + string(TOLOWER ${SD_API_VER} SD_API_VER_L) + + install( + TARGETS ${PC_BLE_DRIVER_${SD_API_VER}_SHARED_LIB} + LIBRARY DESTINATION ${NRF_BLE_DRIVER_INSTALL_ROOT}/lib/shared + ARCHIVE DESTINATION ${NRF_BLE_DRIVER_INSTALL_ROOT}/lib/shared + RUNTIME DESTINATION ${NRF_BLE_DRIVER_INSTALL_ROOT}/lib/shared + COMPONENT SDK + ) + + install( + TARGETS ${PC_BLE_DRIVER_${SD_API_VER}_STATIC_LIB} + ARCHIVE DESTINATION ${NRF_BLE_DRIVER_INSTALL_ROOT}/lib/static + COMPONENT SDK + ) + + if(SD_API_VER STREQUAL "SD_API_V6") + install( + DIRECTORY + src/${SD_API_VER_L}/sdk/components/softdevice/s140/headers/ + DESTINATION ${NRF_BLE_DRIVER_INCLUDE_PREFIX}/${SD_API_VER_L} + COMPONENT SDK + ) + endif() + + if(NOT SD_API_VER STREQUAL "SD_API_V6") + install( + DIRECTORY + src/${SD_API_VER_L}/sdk/components/softdevice/s132/headers/ + DESTINATION ${NRF_BLE_DRIVER_INCLUDE_PREFIX}/${SD_API_VER_L} + COMPONENT SDK + ) + endif() +endforeach(SD_API_VER) diff --git a/cmake/msvc.cmake b/cmake/msvc.cmake index 077544085..a49817dcf 100644 --- a/cmake/msvc.cmake +++ b/cmake/msvc.cmake @@ -5,4 +5,3 @@ add_definitions( # Issue with VC and disabling of C4200: https://connect.microsoft.com/VisualStudio/feedback/details/1114440 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4200") - diff --git a/cmake/nrf-apply-patches.cmake b/cmake/nrf-apply-patches.cmake new file mode 100644 index 000000000..2bd99111b --- /dev/null +++ b/cmake/nrf-apply-patches.cmake @@ -0,0 +1,46 @@ +function(nrf_apply_patches) + cmake_parse_arguments(nrf_apply_patches "QUIET" "SOURCE_PATH" "PATCHES" ${ARGN}) + + find_program(GIT NAMES git git.cmd) + set(PATCHNUM 0) + + # Check if we are inside a git work tree, if so, git apply will + # not apply the patch if the files to patcha are not in the git + # index. We only want to use git as a patch utlity without any + # of the git features. + execute_process( + COMMAND "${GIT}" rev-parse --is-inside-work-tree + WORKING_DIRECTORY ${nrf_apply_patches_SOURCE_PATH} + RESULT_VARIABLE error_code + ERROR_VARIABLE error + OUTPUT_VARIABLE output + ) + if(error_code) + message(STATUS "Not inside a git work tree, applying patches.") + message(STATUS "Applying patches in directory ${nrf_apply_patches_SOURCE_PATH}") + string(STRIP "${error}" error) + message(STATUS "git error: ${error}") + else() + message(FATAL_ERROR "Inside git work tree, not able to apply patches. Path is ${nrf_apply_patches_SOURCE_PATH}.") + endif() + + foreach(PATCH ${nrf_apply_patches_PATCHES}) + message(STATUS "Applying patch ${PATCH}") + + execute_process( + COMMAND "${GIT}" apply "${PATCH}" --ignore-whitespace + WORKING_DIRECTORY ${nrf_apply_patches_SOURCE_PATH} + RESULT_VARIABLE error_code + ERROR_VARIABLE error + OUTPUT_VARIABLE output + ) + + if(error_code) + message(WARNING "Applying patch failed with error \"${error_code}\". This is expected if this patch was previously applied.") + string(STRIP "${error}" error) + message(STATUS "git error: ${error}") + endif() + + math(EXPR PATCHNUM "${PATCHNUM}+1") + endforeach() +endfunction() diff --git a/cmake/nrf-download-distfile.cmake b/cmake/nrf-download-distfile.cmake new file mode 100644 index 000000000..03df878df --- /dev/null +++ b/cmake/nrf-download-distfile.cmake @@ -0,0 +1,73 @@ +function(nrf_download_distfile VAR) + set(oneValueArgs FILENAME SHA512 DOWNLOAD_DIRECTORY) + set(multipleValuesArgs URLS) + cmake_parse_arguments(nrf_download_distfile "${options}" "${oneValueArgs}" "${multipleValuesArgs}" ${ARGN}) + + if(NOT DEFINED nrf_download_distfile_URLS) + message(FATAL_ERROR "nrf_download_distfile requires a URLS argument.") + endif() + if(NOT DEFINED nrf_download_distfile_FILENAME) + message(FATAL_ERROR "nrf_download_distfile requires a FILENAME argument.") + endif() + if(NOT DEFINED nrf_download_distfile_DOWNLOAD_DIRECTORY) + message(FATAL_ERROR "nrf_download_distfile requires a DOWNLOAD_DIRECTORY argument.") + endif() + if(NOT nrf_download_distfile_SHA512) + message(FATAL_ERROR "nrf_download_distfile requires a SHA512 argument.") + endif() + + set(downloaded_file_path ${nrf_download_distfile_DOWNLOAD_DIRECTORY}/${nrf_download_distfile_FILENAME}) + set(download_file_path_part "${nrf_download_distfile_DOWNLOAD_DIRECTORY}/temp/${nrf_download_distfile_FILENAME}") + + file(REMOVE_RECURSE "${nrf_download_distfile_DOWNLOAD_DIRECTORY}/temp") + file(MAKE_DIRECTORY "${nrf_download_distfile_DOWNLOAD_DIRECTORY}/temp") + + function(test_hash FILE_PATH FILE_KIND CUSTOM_ERROR_ADVICE) + message(STATUS "Testing integrity of ${FILE_KIND}...") + file(SHA512 ${FILE_PATH} FILE_HASH) + if(NOT "${FILE_HASH}" STREQUAL "${nrf_download_distfile_SHA512}") + message(FATAL_ERROR + "\nFile does not have expected hash:\n" + " File path: [ ${FILE_PATH} ]\n" + " Expected hash: [ ${nrf_download_distfile_SHA512} ]\n" + " Actual hash: [ ${FILE_HASH} ]\n" + "${CUSTOM_ERROR_ADVICE}\n") + endif() + message(STATUS "Testing integrity of ${FILE_KIND}... OK") + endfunction() + + if(EXISTS ${downloaded_file_path}) + message(STATUS "Using cached ${downloaded_file_path}") + test_hash("${downloaded_file_path}" "cached file" "Please delete the file and retry if this file should be downloaded again.") + else() + # Tries to download the file. + list(GET nrf_download_distfile_URLS 0 SAMPLE_URL) + foreach(url IN LISTS nrf_download_distfile_URLS) + message(STATUS "Downloading ${url}...") + file(DOWNLOAD ${url} "${download_file_path_part}" STATUS download_status) + list(GET download_status 0 status_code) + if (NOT "${status_code}" STREQUAL "0") + message(STATUS "Downloading ${url}... Failed. Status: ${download_status}") + set(download_success 0) + else() + message(STATUS "Downloading ${url}... OK") + set(download_success 1) + break() + endif() + endforeach(url) + + if (NOT download_success) + message(FATAL_ERROR + " \n" + " Failed to download file.\n" + " If you use a proxy, please set the HTTPS_PROXY and HTTP_PROXY environment\n" + " variables to \"https://user:password@your-proxy-ip-address:port/\".\n") + else() + test_hash("${download_file_path_part}" "downloaded file" "The file may have been corrupted in transit. This can be caused by proxies. If you use a proxy, please set the HTTPS_PROXY and HTTP_PROXY environment variables to \"https://user:password@your-proxy-ip-address:port/\".\n") + get_filename_component(downloaded_file_dir "${downloaded_file_path}" DIRECTORY) + file(MAKE_DIRECTORY "${downloaded_file_dir}") + file(RENAME ${download_file_path_part} ${downloaded_file_path}) + endif() + endif() + set(${VAR} ${downloaded_file_path} PARENT_SCOPE) +endfunction() diff --git a/cmake/pc-ble-driver.cmake b/cmake/pc-ble-driver.cmake index 147c800b5..041d15142 100644 --- a/cmake/pc-ble-driver.cmake +++ b/cmake/pc-ble-driver.cmake @@ -33,29 +33,28 @@ if(NOT MSVC) message(STATUS "Building with build type: ${CMAKE_BUILD_TYPE}.") endif() +# Set C++ standard to use +set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + # Compiler specific -if(MSVC) - include(${CMAKE_CURRENT_LIST_DIR}/msvc.cmake) -elseif(APPLE) - include(${CMAKE_CURRENT_LIST_DIR}/apple.cmake) -else() - # Linux +if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") + include(${CMAKE_CURRENT_LIST_DIR}/clang.cmake) +elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") include(${CMAKE_CURRENT_LIST_DIR}/gcc.cmake) +elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") + include(${CMAKE_CURRENT_LIST_DIR}/msvc.cmake) endif() -# Use multithreaded Boost libraries -set(Boost_USE_MULTITHREADED ON) - -# Use static boost libraries so the dynamic library -# can run anywhere -set(Boost_USE_STATIC_LIBS ON) - -# Find the necessary boost components on the system. -# Minimum version required is 1.67.0 -find_package ( Boost 1.67.0 REQUIRED COMPONENTS thread system regex date_time chrono ) +if(APPLE) + include(${CMAKE_CURRENT_LIST_DIR}/apple.cmake) +endif() # Add or remove SD API versions here -set(SD_API_VER_NUMS 2 5) +if(NOT SD_API_VER_NUMS) + set(SD_API_VER_NUMS 2 3 5 6) +endif() + list(LENGTH SD_API_VER_NUMS SD_API_VER_COUNT) set(SD_API_VER_PREFIX "SD_API_V") @@ -149,8 +148,6 @@ function(build_metadata dir dst) string(CONCAT str ${str} "* C Compiler: " "${CMAKE_C_COMPILER_ID} (${ARCH_BITS}-bit)" "\n") string(CONCAT str ${str} "* C++ Compiler: " "${CMAKE_CXX_COMPILER_ID} (${ARCH_BITS}-bit)" "\n") string(CONCAT str ${str} "* CMake version: " ${CMAKE_VERSION} "\n") - string(CONCAT str ${str} "* Boost version: " ${Boost_MAJOR_VERSION} "." ${Boost_MINOR_VERSION} "." ${Boost_SUBMINOR_VERSION} "\n") - string(CONCAT str ${str} "* Boost libs: " ${Boost_LIBRARY_DIRS} "\n") string(CONCAT str ${str} "* SD API Versions:") foreach(SD_API_VER ${SD_API_VERS}) string(CONCAT str ${str} " <${SD_API_VER}>") diff --git a/doc/segger_ob_logic_analyzer.png b/doc/segger_ob_logic_analyzer.png new file mode 100755 index 0000000000000000000000000000000000000000..1919d78585d163b71ed3c77bce2cc2580f3f4a93 GIT binary patch literal 24246 zcmce;by$?|_BT3+fx*57Qk+AP|)DayRcI5c}~6 z1WE2eGI(XAokSDKs4Y?_#er9z)n943wL+hLOvcTKXX0v9gJHvrv0e8r(i;e_X6} z?!>n#8R4%U)Hcd%X8N^r6B9NRpXKMzQA|-}ew9CqCa3#$j`4(L4Q*~9`=c5vTEjEi zo&J`Z@9#%us6KETlz!Kn{moLlc>k7^#g7chDuQ--6B$$Dnn$1p*Tl2y=Wa?(te@9tJ?(NemVRoq zwAxM5NtK@Vmf&mYVtThrf%1PocJt=g{)E^TQ7n3^Lzmo?AZ?qC*RU?08rV4>QnIfw zf4)(1HsRIef9^RZRy?GGwemz^#%XVP(com9B--e+JV@EgdzRzMOB;B20t;RV!B|vxI7{c`j$I)7HD_*x%dTWSpU9>`0+G_U9`!qvy&+1tl{jjx^fE+5 zuybH}zt=-2es1^0GqLwKT_#?7jTJZV#H6jV`s(&=3t2FGkzOee_~EpD;K7#o?pA@~ z_O(KWte`JC>odYVJC&Sf+vAm6&CII?;rdt=Csb=EXE&4LF_$T&3?cWp8P8l^f~Um} zUv_2Yi%yK5ky}YnrPB%JY>Vg3*+W~sM>Yy};#n23Tk07IHQiPjL63^XQLm9$g6sOg zYTeBeJ>^kp&xGn7m-#{*P3cnC&4jtkD(Bu(=AylbapwyZ7cnJx1SClmzs#`q^pVcF z{62T}cGXHN%FJWdtH9A(__B3n8`*^IRMJBQq;2$(9CU ziJ_L6q&MT6f(*_(lwwPbF&TQ11cV5&3;G@NgL#`jyq)JqhwBHNkPh1 z``hrn%lJn$+@scN9v)}?J7b)t+HJ?DM}i1mLDS3gLp|FDJIxth4CnM|^>^0QZO&LP z{OT>r)GiP1%&49SmX<~hkuW~0yRo*Y!KwOiSGp9>iQ*Bb$}J#yTpF}oLFT(AVP%1! z6ALJ-MNdVXW?Vk+_U}|5;+-Fg*HmqjI6H9c9M#pQa#xU?z_!(Clwo%ys}2}lPd49(Qmz|_&oRE>&7o@ z=RCA^H&ZZGnfH>*gQJ7kC#%#hGvkyjfdMHh+QLZv8#54ZOW6AqUkehLcRSX)Yp!Q| zjR{rR#pdj~Vj0@d6FQH(YnrVczAe|2>O^R(Uf;`UMih1AcuyBaulEnuR-Cp{w*{*5 zr%kuE;uN=9)0!@Bd`}SYTs|Wt@#~Zlf33ta*5y}>c>4Od-g0_awXvcJ9m{xnjHxaL zTO#r4y;rHPrrH^Nf7HmTY2uKc-Agu##BZ^Zx?7r8b|=tZH|Ra{9hp~o=9uRuDXM-+ z?^^G?V76<`l-W|Tp!9lhpwMAlL9(@pjPglFbLm!v9pW3IvMEHka9_FeY%E%X6l=7z zMr|`(Em6x~l2$rbari~sCR5)I1^te(vDaPY|IFwX7Y*uqa`ML_M*6tzUu~NJ~0%bb-@y_i644>&~K2P1eibyu|gMi2lvB$3&;t zvbCOQe!=e!pDx_0<7UfjRH@G#-zd7QBi%E4bT1_W;8BIuvwPFO zDHRYQ`Y$B;*2P5y#%Ll`~d#nXV?PR%WXRpg%^`{*ONX-J#&v>lyZ-@ z7n7V7-7c2-^ERVP4MF#u?UXg5zL-iapLy}(1zTnTqqw6@r>5!fqH}$f#@K$z&Dnx@ zkJTQ9Bq_$`{O)QmY0v7Ur%(57c}i;+ThiNK zX@>xBYchYaV#m7=AN<3@!sKaV_VU!-8&6T}hSN!@Cz@14mD1$d!owvg_U5JktVQ&| z($njINGH z$%WZxlYT3^Wp6iP%wgfQw6qpBx4AU)$DU+wT~eNSrqYX$3gq6IBz zaK%Xa+4NbrqIkxfU8-glTGMixbc2i^I7 z4Hg#as81YzZo@#{oX?}!k)Uf%OQxICg|yC;%Exp}2{47gFX|a)9(#<@NhCbz(E7K7 z_pco!sVPQU;v9W6VibIBL=@P}XuwVXFOS~cPrtWG+Z>STv=?%G?e#^!)aB(5 z-FbcGeMLolVj`2S^Y8&zH#a|q!BSh6goK3A>23kV?6T=ghYug_Gejd*A3U&Pqh z+)P79M~C>eg_p+0i=s3NOej4(Jak;fBj>k+f`Tl2^2eX0DtLxbwsGA_>ws-}mgBWO z!B2XNq>iWb z*T_rFV#_o1LYA~eFVX@-3}^*}g!tT6Eg{L=@bHk-&3XOh~!Rh$n=Y1&l^K?PS18ypPpxny|0elm&sE$;{I>Op= zr?z!_M@QX2rCSWYDb=Y{r|OufpI^6kati4+nfGK1uPsJOFj4pS_rtP>%CY8hy(}4U zeOXo})+W8{em(hUxf5Zc-)ZmyEk)TJYq-3ttE=CxdUo-I_J z^h$k6b9p3?zisIGY2BffEYp7XZ_RZs;jcHIAHa;dPr}P?D z;pmF)ZY}2_ajo_huq=zNmC>nq&PkBTJjqwc}-InyCsT+sC0r}j>> z_hsN(ZyFvY0LYV&=^@QtVQA3Cb;>e6|T6Id1rzAc)wRd*$jnhA+_%G-Q}HQj=O;T?^T^X9 zSM;a8y_bMxu|njgruwR0k})tiw>;6Bl9y*I$80#)+-;W>gT;^5k~5D@f6PhE&JJcz zbpBMy#uTEWu1;Q)5+ZdQg(}dl6m(OZ-<0z(GWPk9YBq7|X#?3rzFMY6ZD*D?W|pNS zXLw*{db)Hh>`wiP!d_lfDz?oEw$`M%aN&Zzg9F;ai_)nNzs%Tm_G#@|n09BU+5|R< zKsEvCAx7NkN}RBD>f5(Z3);k9`jAso;p%@*bsQq|(Ndlj87FH~=wLm1@aW4gBKUYz zDV(})IPY)~h%Ivq3tI-i8-7&B4({)((JD?@{24mFyk1JE+FV$7ciGO-Dta+LZ&kI~ zPq5pZD^bzXn%=3ZKjF-ne)e5&{ouJ_{|4Ujl}>G!$z(q^H`=9RZw8w%n5>e4 z!*2-7hPS+KNlX2F=vna{4yN1u4n!kFK)h}Jnc4pG z*Xzspj=sJYKW0ynF=rCrY|q zPnXXM&3PN%J6Cmt+^z_V;MZWDyz~`}$_SeUk@}{|lY2p~P?s(Gn*Oug`}-Aeg18=* zMLa)p`gqVSmz5vtwhX2Xi>Gy+pQv6EWc9Hst!Wr~6EG_B`4KPT(=gAJee4;2lU$Ql zy8G!TB_$#rEq>phy|Iu^5^kXvqzdy`*_(K1Qdmky`QT*Ha~p$ zFjP-(y?-c8dYi+Knt9^W5pE-hL6+<}rwZ&~@!Yvcor3%)xD#{#VmgDitFRN|ABB~a zwYKIiMvgA8L$$mSY?^i>*bj*VY{U;^6YjWjJYZo)Z#Pzh>(<$$L$9m1E-X6tWqn^C za3kcQ@Jf*DlJEMPCc5}SsSplt9$ma>F~5I|tem3mO>#1cH{h(Yva-Ipt7mI`De3z% zOAHT%1vwxuMUKpu6WYY1%9;A}R>SGH9`Nizz|>gV1Nb-6SMT4w%QHVZYCuc&{Q2`6 zy_}aW*{z{UlD&fR`&ue$@#Ec^Q8Ho)OvfvlvM&qCi8uIR%vPU>Z)T?QNQg;aRM@bdLTYQF?$C^3ec%~PzpuXnrHuOL=oPv0@bQo+ButF*rGgpX=Bm%-a*hCc79&%9f{ z|1WwHrA;eL?&$i^$F$IH(W>`n{^Sw1rra3R2}MnmN*rbs0EON4eYz~C#&WqVu5a>C z7=E{~D-bN2h;R7*qh#<--Gu_)mwXX=%mxz={p5w511kA)b)HU*9q6}f{Y6Ny-+B|@ zP<>iu<8*(7yI|8W^J)^mf?qIsv&hedubZyAv)1JcM|hPsb;&oYBwpIb`6;|kZT?MY z8`6a>C*t?nCvo*Wr8`j+jFan-WzVPnYJGcb^mDKlgKKHvR0+d5d)<-8HdZH}EFZt= z*;PINxJ%`Wz2pOlsw%S7&tjF^9s2waqxPYGFEgLnE#0j(l9Bl` zmOy$ouUR^K#;xSQ#dY(aMpS<^qOo`M4y|Z7agT69!#1=X0-`oU2t6IPoX6%q z8M8ZYV28yw$2I#2ss5IDFYA$p6Bq2I6P*X1-8X? z_izcZV~w|qTpJkjE^eDs$2`0Cb3M63lck#b-Db%)i8#AiX~(?;-Ebc-ZTazClz+$0 zAoU_vv3+r*VqEkn?L&2PS?;gwZ8BL6lWzre?fDr{=tv0jz;Z`&*g9l9Fx7$JE^$>_LMPmkF_|DSp3Zk_`yTC9Y;0<(DRQiUabi zgU1fw?~_-u4EzDKd=CQY;z_&FDANH?D{l*%T#L-1E`8ZxhT-(I#80*iRjWlgyiW5v zj)Z|$v$TX;FcipUkjVhaMhjafx_Lk`SJ!p90L6tt%>HqAF()S{0PV5Cow-2(5Yn3k z(kbcbW}jzB0CtEtFPu$ReR1_H&sfE%$j{Z);}m2eQ>dnNVG)ZfYY%UxQl$|lcMnc& zIPju&s%f6SJpQvv^e17conc3wqkzc@bFf<^V9~fiG{$iH55*sQN9&+9Q|m)ca?r2t z#;UBiuvQ!z^QQW#>BW;Ue8{YT?q_?8UXC}vHl!u1-k!7OB{H%8neawd0DCR5f-fPt zt@Y`{w1CM09MmXxybQAeuto$I6)ww@)6*ks)w`1TM7Jx%jow_H3WUYY4y{=)4U z`r^gmwb*v4mkN?BiWa9r(=P~%oF1fMt?E#oD(ZKs6;+lY8=Uf(_e{lo&egAf==Zof zXJ6gZFzJwQ1-#Lxqv`GRzO$k(;+frIwkXVg7s}8^9`gwuTU*}9$jI;Czb{P0S(j}B zg1LD<)BtO|hG98+(56ikkNDcvB`ZMpC7%mM4b%L&vJ%>8xc0ch+Q2 zPmlbK8>A?F+jwDz5=*EYLx)dfqo9tyQmrUVvu7w}Q+Qp5p_h<&tNru{tu8sc@z+It zQMH=nF|2E!#c_gLKsLwuCEWQ-J3{-+eC7vFek&NBban7!x`d&a7<}C~^L}$pcJq#q zv*=H`GmashZ-3Ln&_;f9o9uV*o(&A>3U^2K6Xxa^7yI%QkczCww-!UZJ`>hd9zJXZ z_587=<=D47+~Y-Ex+zc^US28lFS6*G=vUX$YMM$*YJ+;}y^~qFHt3b4dg(c4^c*e4 zQo6Fo3mcJ^jg=Xa(v9hlkQhLFKOcI~YipFbr^wp+g7U2@ zZcc|9Sqya(rs5A18#AI)FX}uYsAI$FB%Ppi0#J)au0Bco;|Pz<)q9XI@KS4{6RmNw zdV0)&*!!GEgCGaM3&bp2tA7+@3-IIDwr9y)f4P&&-McjoT@T5Bo{oQPZvM8QARIQ@ zs%(l4HhZQk2P4p0F`H58wr2O`lsXSkF+^-^>{1)&UEvkVovNRee`S&eRRNQ0{^1ws zf|h=ED0e_OT|D`=sw&ZlFTgBzwh!HrkiYR=MfupvFMwhtHYQWx$d)00ZSNfGifcCF zv+OU6?9z1$QoVG*8#4<0RLH8Y;U#yKoLE9V4@EByM*{E>YC~vMm6Ye=OTDi++>9D> zW!=57urPis?feP(nbvF)~(HMb`QuHg$9)Vs7jS9k$~K@O&{8 zgzDX$XHNMRUD=1MRg6S>uIhk-;A>DC>3QVH5e_acqps|Sg+)b*OBeU#qYd~V@YtmF z7E?BR#q7UA6#B7NGh?vy9opKN;A#2ZIj67Zd;a z+TH>%INZ)CO3W0Jxi!{3MC&b?JNL7CPi9v*H(^A5b!^OrR>>Tvj8Bw4L317!Wl z*;&wC7@Wi*@963(K?(6Sh+mQ-TkG20*N6Nk(;1nAiS^jb3}mzdqsFik85wavry=&U zva(dw)$s`yR#t3B4=QLdBauW+CCEK_l;>!Scv;pzBTRw!(!q0}f8{$bKKeE#kgjUp zunrSBABs48^k5*Z4nKvDW`PON^Wt;0XcpPvz+Q~=_$sftjnY36X^iFSfpgCk*nE(< zclSBg-13oeZ{MB|W)OXf86Ad141w+WGldzHg=k4PA&}b;(I&g!p8FaMt++NC@!hB* z3~wMNXJ!n0@{KKf3lAk>Ups}2iU2DIRcdq5SprUv!DfRYPM>u3>N)=>Z;$pA?~&Ei zr?#!!TpSz*K$s(5zwQ8;;|O=fRbU^fW_A-XrpKxLT!1~ASz9wZVbYR3#Xy5%w37h- zv5K=s)gCyV`#(!eCr_S4eC_UT0Jf=gk!2>lt$41Y<^iw_fFLXkRQRm9RqEXZYLQ?c z1KRIhT`GEd1hOCTyifIfHW5%;AScE{!5dw1U2gj_YWq)eVzTScWpF!t4_Ke6p=M|I z+TNLrKX0gHvEnR2WQY?JCY?EY*taq-p-9i-O0bl#dWvCJ&L${Pi;vruQl!DTO!V9^ zJACAbX5OO%pg@d#O}^1xtSCTdJkb(EthTf<}bki7z+ zArLCpm_p^AZEvofpz@oVnHiPd8I^`)spIhD!Ms3SXeu3*)Ie94->AqhcPWaxvrHi! zINVEP&HX;th!Q-pN`a^r&1*=Orx7UWwmNpe6ap8n2$6jYkJ$$>Htm<#Lo*?EmFd?fWxP}fB*dM#W6DD0wl$nI7m^T%Nl*|_uAc_Uv;Wl zW>n~~#~mc|IY~n^QN(|rS(dwrLcxr&A-({a%ij{s>jQeXp@+nt?9TqBG_}Zt?+oCl z1!oB>UmeiZMi-ABe$GQNTFUnU^wTa*`U>WNo6gIv!kSg?qQ%JNtz|5T!F}nO=ruTk z-*C7)01bg_OC_7XNiyouSLcfvi_*4A2GJD5^pmxNJPE7L#vY%z>3J+>eK81YR7v!6UXzO7c@uF^I$>B$$vN*Ba* z18VZ0FLvy!$C$@Gau^zhGkS3;a8TGIZ@2&WAp;`zldJmQ&)z$%@O`fr;Ee(8B?;bZ z`B;|)I%LmK@6b%}b7M_dSy+m`z=~NQ90X-`uy192l zmCw-~TIAMvB@PCpSD}!fxK!UZ%m*?DgmR3qH52H%H?q%I=+(2Yq1WA|nA{hxWmj#O zPft%fj|8yyS%B#6;NXBD)>hDFLG|`k5M)GZS!7$*2#W^^YA3Hi{c0??`tsrwR9lA@ zsbI(Yng}&^>vE9E?p#5S(Iy7&Rl!F7?DeGI*zUTz`fKr(1tU(#CG&k~%Ylj*fCp`2 zGh9?m5+buj9cju?f6-Iw>>Q&X#ddf>>fSySm|ZR^T$ zT~kdOz_LT2?7Yj$3WA*Tw020I5r_FPR1*VOI6?e0#ujGuzPMP3pjF4CfwsFqWK{k! zQHCod+k+1Ok*@e?DMnUYF|T=@3Jac$Pvpm-NHPC%^eZSGwImU$m%iNLuKfJ%{Th}A|sVM_YFk`&afD40!^Vf%8K@Y`} z>+kMt6NNB9>&BX~onj;k9Y!E?Ly8O`!numYTL{mMjwHKZ3kFvz7Oo3f4@iuNJ;Q7= zLTcoTv41HuMpuzKG})nrvyc-m=C!BJ^}BYf-pF(Uo}cOnl-pM>=rBsgIu z*T=#?k1mcjY0=N`L`Bhft~cu)55e@C=Ms~dxYN8nr<2qlamx}1-Y{CW)MU4#AC!<^zI*{nuA-(UG%N7nH?}k^HpB@L{fmeQiuEeYG|0y7d}n26SYD4Bk(uO) zk>Z4c!_O@9|2Me(bmHD!>gsPfa zFyjK9U+4=vjVQrn4_aT|4VmBsmE`~Ou*~U%P)a0a$}|{TP?i{GN`pd>)Xe+i8l?0y z&9g)gob4Mqx&i!19$iHqxXu9Ed^DJ0BFgg>6vIT^# zUs%}jOPr8VIL;jpxT~otuc%0AUA3MH7Xi^l6BvujlL`g48=yhIfB$~Ar-0l$HkJZf0nepK`2);KRZar6ukO`K3*=y8 zQ3T$aQhZLuAL%1`G`^W^+A{8D{b%tW!@a;dqaW;;57f_yudyvb9Pk(HE3k|^AWxSk zP=2NyU~Ud&k?pSX5GS%&A8IN6zsC!#K@o;jup{6fFaj`Dhy?hucJV@+IKc)CA%0|U z;W1oxM#f0Ra+@I>-HPp19C&g@-)BgGV*#L-YBaKIK*Oksi~>#=W~ImIlAKRC8QI}$ zA~8=q_Fy=yWeZU>+jo@8&u=!w(W+1gbzmP!$&v{V?dN8yqIR<-_f^5A##Pg<#$_Y@Y5Jb&Ij`b-L2OKt-QT*31wb!I>%9}RXSLFi?>lWBO zUZHRC1W41ic+#inLw8SE6z%s7CUTUEc-u{#8qJM&>V z4FWR3kPr2*j-;KN*RGN1ZT5Ce&d;Y77Dh}@oA2xpcA30O20i0o!N4%^tY)s`S#Yh) z)W~}ZRdc^LXmYO_KQ!TGgKsGD`uF|!W(_g$7*V48w%gknsdKuT!R>PfcY@=}l?f=2 zwxm{?5Z*AvJcBy2H(p|MA)Y^3;0{b7e)>Fepr;JmL=%Cs2o(rj;B|pfuBfO8+ens# zB{F-EEt@vS$wo;oG~Jp21$8fzVLn*2DW1d?`yu(= zxNvybVEGOVXYiFH&7V| z%2syyyclAYFsKY01SU0vg$;B>91FUoS?wtqWsKey4eu-xduUUboSd{tD-seC`qtHjf#5v? z$Ex2_3|8*Wo#sZbvwXJsGcDuU;%S0=y&Xm`V!jXQs9n4EqVh3f~YIrE9*r-MdJWj?wKS}qzu+Z{NRu(efZ?7R?AI0G|7YQcf z5xlD^VEfT-4xBMCFpq@DHscx_*JcZ_`xcxV$>S#q*7f{SS}0=O%ewD`Vlh1|stf@+!i_t6fdP_u9RC$3T1x7Z=&fXe9p;3(~Z_B-$EW z2wu>^5!N_nM7?KH?H7^xp{1-Acb>(TkCa5r?d+2)qio;yW~*>U>!1>lF@PUp;>5fS z{Uyelz*gD6I%-tq7*kit}F+o65`1_!DqT%?f8;_&8XNWA0)J zY@u?9qX+ljqR2kuTMK8k8;tQ+Lw!&>Zp|51*lp5Y77@C{UuIWQu|=r z>ofiT_M*`C^3DSggaONPK*La4njg`H1@#qdS6J!VnU!y#M1XMc7=#CP3}_KxVBEWV zcZg{QP%W?paMtte#%}{U@asDra8skiiZS_a1EUJm3ZU|0$x~rT_C4MjYGMf{jbRtu zw`cUQoE1R%grQ*xgcA{}m6es~)R?X|=go%Ia1UnpE1_~WT@Rhc8MP~21wE_17?>}X zoZWA9e=rAT0qh*c-(#-#tdNm$dyv>EbWqfuU*e5ZavV- ziQNMrvdX7*05{Hm^yM(oGETnX2a4d$^R=(5 zeqJamFL&9PN+V`QjlX>^l~2%TB*m{{p&iDKrx zWK!;(4{hKL(fpe_Ae*3C(PkZ~$0*2L0GIpUJUM2wLB35=?0&C8wM7!3M9%=PI@yR03fI$~Z() znZ@hIyyjN(W>5AW!nS(##;N4H2faawSO~Iq_W=Y4zAuP!=U~8CNvGDb&<%*B8+;@4 z)w`Zfo8p7(R1n}ukTU?)Lt9ch^%@=Sb1g~W4ifh{kJ6+i`kIW)mpmz^z1$K0NGCKC zLRnq?G?dJn=dXz+5ZiIa6PyOlg*OhZZ4%osp#9K@PjqLNZG-P3ZuSeR6agfMW{Pcfek$#r48M0_&f{~3$VH6^}ZPp zi_+86hkfa-h8jXyB$gUjTsp!r({=e=YFS$2CT&@|m9gUUr7YaySD>v;fvtb>+4ba# z!B5fKUy}r12MrpRNG|Tbr)S?c_m3PXfX3A-C?W!E5lRn$0$#5jcM!qlE=AHEkEhRS zUB*fe_7@}Lq_>8tp_i;e|EoS^ox$ySr+Bw{v^y{_qCDOjCv4G*J`_P|LzVp|mNJ{N zYFfp-Hu3j8>oGb*zELn~;T!&DCef zqXiT%f?YoEoe_3SZn~V$M-wWk#PWwaIxPoI>(l@huLH6kgvHaZ4AkOvUB*xCtmy4V zCT)$e&jMC>f9EyWmjaKx&_8aLSoJrBD@(~k;%R=(&3ylmYR+OMnY11hb^y~2%)7s2 zK_`GlIcQ0O-Xzel;6x#qJbvEuT<~Fr-IPUIzcYkRJCea!0X1APoHA%FlXR(W1nfHI zQJu1#x}j`WNc&8i_WGH~^J(8e1`zAH@uwLyW~p9K`D;EG=zfU4bic29Tq7edxl>b8 zd_WvK0Bp8vMsngBG4u`}hF-Pzxw&5{KLr|rD@$~6a=Pw-y4fl`XteQj3L`LgZ;6sB z8gTccJX&y9b)5Pgh~%b2NjzvKyF9qJSBn8N45H)yeI&xULabMXZZo5w)NIa|b8~;N zh-LezmNfz*EBO$7!-L;Mug?;@8OrLKX>E?C-y|J3YT`ic z3G=BR47%c*DLtWZ>AFr`h`REy>C^Kg0k={rzz%~DzNe{qs0L;@qgxFgH4y$=MDV#5 z|F08=oQk30V|R?39voqd&P;>#rEzxoRAVe(6{V*KKtG(5_|b#8 zfa`^4<}~)%8a|A>{k{}JU^#ePDUQ)e`se8<2vQ8M4cWk+OOqP*uNCK&Q%ioP?SYY7 zkN))IY@F#!HH*EGO+Q!4K;N7%2Q4>G^?Hg9kUl|BODuSoOX?ix%7hl=v8~4*6eh83 zMD_;o!hPp|8yCi#R;2VSyggMReq`hk*lQe|ob-;d8AQ=C znHQIbi~}bd4vVk*py5g=PTk6PEbnKi)5H22G6r0Yt=-|9f$JQ5&{QeGzz14do}kmS zGBRE~7H9&nlZ)Ie#WkwAFkXqX1NG|jqdaJ^v7y212TLCHM+K8jGHAQ}M_r&0&w2nt zMdI7HZ%@R&mFTv4psDQ0>|%L>oE*cu$$6ujEm+d7K5=g!jcC^Z;xJ#ZD%Jr>>J+RRUi|Ci3w^2)`t zXM_^1LU#I!PIQU?F0mVAt^g|~PUxNWw4z6Ex=uOp>CF?mnVdys_1JU2C+yu*p4WV$ z4}hM?OlCnY*O5tVw07a+W1tJoJ9Z9vgvyV9P2#{KXhm^*iBts>ZP7N@hvv85g_OeJ z=vL|h9wUydSdu48&`{rWWAHyA0Rmy))Dv=Qru}CbsHl6G=lUKaU&J5pQ9xTxFhGaR z-z`W@JZI5HX}Vzl14`U6teN>og#%Q#ygC_t#lQUcuXGZ9FRjS8Zn#2U+p!vu|7X;B zm8ap$kG>Y~P39yobjPM-aRMtc%CNH}#gN6P;DWRM)9bBu>mi6x-Njjg_^}8vx_Ew@ z_$Qx^#{Ne!Ybga(yxwreO6%XQoP_=_wa}3B>~Xy0q>L<85dT;G!PZ(}H=>PGIeDY7Me`s1$l)a}VX zB)*5*9GskhOtEMBfXNI>2#?|^-$)hHF0Vs(8Ticl$5?bH>k^N>%RMW%d7~Vh$oT&| zWUhDt4MXCi?rFEDcc(K=w-XwD2z&Rx%1F~bVu{?`sbPFTD@b|M} z%13G&G2x>WyZ^fRulu&fhZAK#KwHV+=PR(G`sOsEWL#WCK~JIewQbsL5O!9wn6KK~ z_wR3p;=g|T_H>Y73b5K)0<#+qS%yKx#v9sNVRx3>1i?}`xSuUE1T^oAjEq}VUt1$k zWFvOLkNzFw@egO8eeLOK9QpDRiZfu8b9iX654gF{8@hBJ*|hRdn6$=z0Y2or9}g}l zpE>hrBo6bTRy01|J3e*Kf^Yc#4ju{slgO6getN{Fq-gLBu>>-3yHMZ{LEjB{>pXxf zF}85np!sI%{cpdte-#p)n?!=r=%O?9(zWCTcgixccjz7blovwdXA|rtmbEw6MtJC8 zpEprW3K|sw)exLJ2CDEzqYs&x?=mw3!3+fU0qK)VyO^Smr|)dcsE8H)=v|gfAgUe|6lMS z3FeEYt>_d2d;Wh98`UZrf~jkY0%8M- z*8ghu-S9pkUxQqrZs26XlQFyU(CPx-vlTt`LBq2hDjFIMFHUiG7n+@bnSClo!dmKW ze0vQ#+XOh56E8Tk^@%ojcdkL;;Y2=NUjw4U45=Hq2Q_dyaFJ-Zbrlp9gXp8h6Y&X+ zMsjT7Mto<$^zz=c(xd@Zt~tMNupO|!{Kb=Y*q}SQ$NW<)+WwEpkb>l46qg7|+3~&7U;|H-(DO3&~0)Wv#ZxS$EsiY8if(0TL6la|tMco{ra?q4^ z{^&u_7occK?EE6mq%7t>T7?ay1_4FT&EPN))lRUbB0)3(%^zOShSi22>0`r>w}f8j z_Q&>H{~<^>Z@gtpF=nBp3Wi=PP`THetGDhD^>SUW?G=MA4|)s6{60rXCTh@oQ`F`a z(mJ;0ovKqnf#&vFZ`QG?Jpk~2%d>hP>ICa11GyLV|EW(q5Q{?pmyWvU(%Lilfh@2D z&yXw<8^JEziGl?ev=nTuB`FK-Wt^(&yOj7fskH=DO2^smTA;%Zi24C^i=B!WS3+Yu z@ym-KI@^ID49_NDPAE$Z>jLFY|M-z~s9l!%J?Id3FA5lCOg-+;Gs$S4-B+36;`o82-7N1i@?&B9(5 zf6B>t@rD1J4>j}CFXl5MAD|Cf9;1r7yl-4Ur|`Pvow%qd0c2RJS#|*H@k7fdogNuAG!v@54*I2J@rMc@7wXUE_t*tY7t*q3vH1;&5gr*1T4hs*3!!KVR(YE+mia;>&6aOxNe7#;GiT9CfB$PGo(Z8%a zQBf!;SvF*3Wcko61P@aP<4UZtJKLKbgM&$@s}`R3RJu8VF&+VCf{{D2tS3;{LMYDV zXS*z_-=S+9;!811$M(x9QO_;sDj4HC-5jh)(aPt56Fr4yDsWjl&~!|oXGPRuT9pg{ zv+yf@E4I_7S!$fxC02^}PWI#(%0dLTJI;4omBV9k%YiJHu`7XN_Q!;UT&*67cJ=os z3=9mgrU^fTOb|Qnk6!dEQnqM~!IHoqLZAud81Ea~XYA}OlC<$XEgy6w=tbgy($oxE zOM+Hbl(NUP3JCumLYCdHV0$KD#H~X^`cUlJT(NmwL~~&rvL!L{JIsshpeu&>wAkpl z^1YL1XlWauuf}fc*W%(#Fq33#h{vp9PlXE#dVG?IEiB*y(^va0^DnxoXQ`n^gM=sG zXeg$%H^dEYO|UkSOD#MRh-=k>VCbp#+6_!Og%wnEVPj!oL9g~&z}@P*xEVIlN;~Uq z<|UnZ99g5~CHr7fTucREkqZb!fO3Lgd^w%Q4Nn)!0Vet8I6wAi-txuU2H2niuic&E zF829V;ya0Qj{N4t{#KKM%N>@E{>H9FT9@HQNMrT)_Zt^SF)AN_e6tilBPipH~#$ zfL^ybH{ZB5MId0I6}iB5Wtu~Li7kYX?Ro`v6qrB@ROPg-3fRE_EL~iiSeL1S*kVfq zdZgt8I>U|%uA^aZB4`)fR_wXG0Sy8?kTS5p{EL?F!2luTK-^Szv4#c^QTxfS6_SSV zFH>n-%P}1-`FoAOCPm=_-ZDnLp#Zl&puc44=9oe+6#hzuNiv)&wU3JHFyv4%^s|kxYMljh$I`+=7Q}x zX|}ENCCV0zalOPp1Cr|>?=aQ}31q3oR0`#ukPAlb7%_Jc+gWzjqZ=`IGailj9*sPN z!S~7$gGGNh9`sXd&*eBI2H+pAFiF{o;{6$IRQ3bbtj?)g)a7vo;)P2UIPh#r)O{t^ zdSS!|f>eUBs{=jrhmJgQFX>bZYnp0DnHk5%^uc=(?_(aQ@Vb;uLtC+lJNCO8jbEPP z*+(}H5^vWoHdELMI$lX6(hvg*N%W$m#>w8p=of!BHv%3}@9XJ|ESO+;+1c%nJ~@{} z+ySohrohZ#4KG`?<>kI;?_f5&AhXi4fl4t>BhKP6sx1_?@J>}h17&6TIsPdvyry9k zfwE6s6r8As_6|{U;#I_&M8#Cv#g=)6o@R%g%(Cy&GG;e?0$QH9d_MTzVc`hVQLH(B zp}>fPc2knvdtCr2Dm*w-_t4*Ab||yH2_1L}m3F5rx!s)3*wpaauV#L@sxldJJbqu0 z(&9qnJJARRdO6p!usZfIwF^`8^GaS`UOkKOCPbLRCHyT}S=3s;6L#|kw50J9)}9rt zzxQ%A%lKhlwNg_8jbL$+vT7zES-LFLhK$ubAvMMjCojjB9e8r-mQ?5VwXi(-0-EdH(LtO;m%68M(0; zVPS~elNaG{(;(QQb=uDS*BidRGt1i6R8cyLh}usKw3;)rs1I|c+{*IS8@F$h*4%$X zypV{Y*Sxv-z$@g13ncpKcZqk8=XI$>Go`?jG&K?M_iYfS4A|k~(Ul%8;-x75T*`0x zDsFKp^Ad4@&xr#Z3QUeS7uQXU{IBaQKBg*U%;C>E<$dJ$WNqrl?6SLjk0NyRn_%I* z`Pm4ay-9-q^$A{=u|Am|)%(X0QHTHB2!kq}>$b{5=sf=Y5!RG5jrvN(mBrs6FI?dv zzUOLKoy(iK?g%vm%~Rq?&Z?vp_NJfme*SxYa;XYt4 zFpvKkg6z^&oUK=9M8tmY_cw_f`zqa{ZRK6ge_e$*6K9X&s1y6WFUSzz!sX(}u4wi! z@xku}_&vBg16P%b8Hr=NNW9e>crrDiK#cHb9p9hwKJYuj#J*i#mm7#To$#%YOgSSu zgAP%;gm*=fk<{$_eHBK${(ST1a%v%8Sap;5(h-+yR1;Nau+pMtX`MTnq6E{ygq&8_ z&rAqn+;|5s4^#-Hv7NLUY|2{ikr38v&{J~T88geW$Tw5MTA1(%<9)XW0EdO5G+TpaP@Zp%fi zjjd>drpFS9=wRX=O^OUA5U}J+tvZo}q@@AV<=To1>LpqHPSX;pMFUZBOZ4l>6`Z?L z#5JoNrU2V`$R(Bh?+!AWIS7rZFHcpRBghM`6t6KgB&=_5b^lr%miW55qX5m2c6`DU zr0Y{Ui6wZw@lJOM87-Bz@=JqBNS8JV_frV_vJJE{go5*utIUo{V$5mc_?emp7Q3nw zmGQ5at(T&<)+0i#CBq#p`d^DLr*D+3w<6tFw~eica`z zJZ4#3^Y!J^XF2|+1r0mc*$Tm~2{|SO^)mkWWKF&DOY}<~E{4P*PFt3GbC75pCZ6J& zu%CD58!=0X5|ZM}RfpnkD5xq*DmNF{X=b+>yXaPNb{U}(Lo+H@5Yg|_($HK_$pFs__yOty@Arb%f z;u8F20_n)x7fSlKLwm)5afQqUEYu6hZ% zmZA0$J)Q9}A7D?PUGrs8+mV~*MZLc^S6n5bMF=^);tJ1Uq(b|uAUrDH06iuJfE$Pg z3=v5Z!Swf;71c|T@Lk8T#~1{KJ5`H8)?>+jOj=(F)Dk^&Jq2mA2md5=?`0rtk*<}A zfMMTWyq~330Kx`*n1YJR1kf(%7D_4Ya+SJRaB%s=#A36vvkx=^mJ0)rYXVj^uO=CS zhMTwqItXa$wFWOV@%H;LKPK0U&@JRvD8Ea%S1Rc54~SH_U$q*1IvlRp8ZF3 z7oIXmxr^xSZggR1(8T#Ybb9FOs$^~R6+rS>L#WGoEW&%;v=uf{?9+9?FDfTxe0_bx zSmEyxAXU`-e0{%}7lp+qmi0asxSy^H*pnZ|2GhBf658J0PC-c-6k_vH^-{Xp$I%10 zZWK@hxB{?w;@gIYhhdH2e=yn9`{{vt{Ek*(-_47l1DCsDja2NpSys(;UScpOdIvo3 zHsU|^DCibT&@IEQQnio7b;Y|YSz8l+*{Z9n<4*Q8b}37oMrc%I7(+gUBlP|@F)=FF zK(|&?FajYF5Yu@WaaHyrio>{BgcN~q{@)c`gm>8Q0*H9SD)bDJCJSg^mm5t<5z1DP zpE}`Bx7mB&et+L_{~MoQX?(eN1EK7_Vae33ESrT>i%R|Tq7wlPWAuuuix$E2IseQLAQF2c~ik^HwPoQj;-WF?X7Vy z1wWrSQ65v`nG^dIaDx5MkDbKY3=^Y;^|&fad^WP@7y>atETixv5Wn9)w)_Ui{|o;3 zujL?K^nZmX|3Cj)zH%0Zz{9+;xd{`8iAKJ?_#*!XO#Z|VaD0Lh_ODC|G#&Tr2k=1D zcn8DtgzAp_5#FLiAoTSZG#Y9DbMgJt!YGyt~Ma3qEa_{Uyxo=SQ#D&aR!p zSz5#$-`^kR5fD%%zFTn0*}+;c33$v;2lWny%S$TEUaWdOPV-6qE7-YaubqL&Q4I4Y zUS<7#wRkL2IURpPx?(kcEpBU*SG3ELz~3)e`7p9#%9=^q>&jYew1r*ja-&)ntJlvL zf<0)oxO{ILA>+XkId}Ertx8rjzCq4&0ZUcfZ)k7Ns_2!7pb7k)&Uv`|I>Vj3c5JME z;kfZ-X*rEJz4h6Oi5nqCZ^V`h$MjqpGbGkV=H1uIcX&hQcO74xbeTJHMX{(Sp``LL zE}kH)sh$-E|NId@&%YSUJzI6z>*tBV@Gkes&_MgF=;g`@eq2+cc`#*h{&tq|dqEqC zt~m{1&mB3WOl*ow_HJDczS(VFIrMy_>V31HsZPrU6Y-SZ>-R2;!=B{Y{}jB0UY{Af zZP?oBUQl%T|7zykgPOYXIDXac(iu^vt3c&pT0ucmP(eg$bnxvUm;%RoifT=@*@pS2Ap}+!1?P?)T7ahXBq~ z$jFz47F-J4#pZ~wTC%&x*xgmi8Pi!AV+E^nC@W;@I@z1cy-!CZXg!Y*+Sz8#$*0oY z&se&flJWyMxs@fzkcu$+m0g@;3XzFR7LKUBW5-bx3lo_4WG>sw?XCP)+^Q-dtJSBb zNB9vglIXgbA?hCReZ&(J&d{AUB`WqYX-xG?O-_`N+;wW9Zpf;{q)yA!4hz)162y(b z4bVvT;=LAjtV7ZrW2L@=Z5@~lPTR%0lXjvQ_GlX74LSvl95k&%n!c&-l-!SQcGUAv zFDN~D{Z;b4Qzi4h+2hYsUJQ%OirqXumDj%-N)*J`_Ki^p0qkC-dq~w(wRYwQzS55eIErngfPCiGNzW?HK9 zYz9^0!qPV5I`{89Yc*U4+kP53CWy?Zotok@a1w$Z=e)9aY`znAkunZR)9`pe6^Wdb%El*1VeAZ?&Hg)Vk!V zt~iJPl%x@#Q@v27Ek26@x&SjgyuBPVwb!R7&o0sbK=V@^L*O_OZVKu zwYkI{F1~d#)gSNFwXnfOMHU_UF7)9Z`|}1#_C6gm1AP&U972_EoN(LR<6QX| zo_TW_=~mOQw!1i=_NXd`JU@3lmap+ z`@Sem{295wC-4yQ4y8YTI3}hs4C$0lkX^t^h@Zv=nbcq_Uf@H^;D3bfw5g6Cy*xW6 zo(r3zFF$M52DeFYSrcysm8iF^;kT_Bd*r9IS31@5_zYx{wFu3je!i)vc4=r89JeXr&rdLBs~|{w*}{$ zxS+`Hi9@j%Oqc%F)QZ-%MAy&l5ETh?S&8r10NjTChB%h_zN zTeQr*>lHP(T{kC2TS`c=&KQHs(u;oS(uHDjL5(P!NAnCG%%x70jM!x8+rGpsg>q6e z;q!c(7BP0_B=z18nHV!f8`0dPX@{fgwGvlbJ~2V%X(dQg)xxgx^5ceUig4#wLPpEs z00{rcH1{ToJnJ@ZVWezMa8z>u;robzO;EuZkkNBSH?g zx368ZmuKDIHrQ__w7=jzm3mQ+dosd7fgh|n@zavCSeV7?*P*}YM^#ZGCG3ITFd@Dq zDe3A!we8q`;=u?JYnKl#bG6)Wz0(WVtU58(E_+)@;t<`ivhHBW;|Zv~5~fNh^@)FU zu=sS6s={#NhTOP(v|#qQyya5ATsx}?A)J{Kr=Fo%HW+pVFA3iY!$|$QUPd=3t@S`f znql1GtFh2asm@`ry%tt|I?Mb^Tmo)Bp+Z_xPCwW=vO{k9R3a$y>&1Imf61#i(obBB2q1~BXF%2p%Azw z;ODP0>N|vG0~veO92A7S+up2$Ff9Xv9G>Xzw**%LU=@s^*6TXfI`QnmrNyBm2rBqO z{tsyLKa99PlI}Yg1@F5A=^)b{?%fcyH(+DR57w?90L5_-JY?DIy7ckqGn0dWJQuMP zKIAK%pxOz$jxdSq(A#AvtHT;Tm?4Y=_jbL`4|Lgy$K&6lb+DI5%zML+O-weqE`{oI z`gGp?Ths85bN#bR`K^!rj-PL5n}d0dG#Fw+!R`B%p#5^37l*+2g|GGM1GqVy^@;?q z`-3(Reom*IjBd`>C@4oz!JVt~fq?sysp(WnTg!z^bnoTzSPY9E$+Oe+`>yQv&sg!q zZlJlj13h`HTlwVrI26tf05J>Qt2myY#iT}9kE3uZG|9%QD2qQbcOq}Q1H-9QAuRUO zxAN&tFIT2qu~0?eG2l$bClJ_>j=8J1lXkT z=k8{zgQ$mlMXRr*i!zK7huA}^6@Q2Pzk;JT9F4BwI;1MGW6T_ZG#fHi-*OQpRS@m zji;Mqj}8-RruoN)xdY706Xlr}DiguYKJ5iIWl z=CRJ}i+o{#CXK3=arje@ci19KgkBaLzO?&o6|;7% zD2?f4C*&EN>QSbwTBedUfD+nnTPn-$eQmot8VWAgc}O`)C$aAM0q(jmug<4YvV@qi zZ*p9#36)7tQ}q2!KA$Zrv~915MCy(8m=&+F)6@B@zwq@jw4q}um5mZ6u66}x69|JC z#=Rxs$GC3;@?8b`y~Z}(34y}+YpxdmR-nL6f!XFuo__+Kq}sSHE!%zVtxAXE_H6nV zXXoJe5&-O=vzP$Dh=vnj(WU?E3HQI1wRhpa@(AKH$pYIx&3g4I~{yfJn`{opJ;2ALE(0A<9@Hk3bcAg8N`lz-JKNp O?>=6ByGwS4|MTB3yOI+P2w1a0^awLU0e(I0Q?O;O-FIrEzH7f+WF%LvVL@OK99(gS$ISli$gE z&Y5>+{`%I`T8-@Py?a;fs(P-v@2A2PK1!jZ5TO770Q3*<#gzbn7qI{U%o-8`^hoPY zyb$ykvi*BaCjbDW`}qYE$B01;J&5Hjq2a7-XX@-~=x72^wzaS~baFP)B^X)+04M+- z#6?xyQuY_Uy-3u(Ss#b_C^N${-`n~u5N=78WW(m{bH1d%i5uJOm{Rn-xtIz-cJM&W zq`@S+7@H^m4*UqaAhgo`CR=C$pOn@`DTBE}Y_PCQ&vuWBG0+p$=5@oM?nUhzR`LeQ z-dx|D1##fZ(2F}`G8Y#Y)ATp)t~tYZ7jp?4vq`fYnEcBeX02P+wuXj=Fn(rf?g+%( z*6k7mx-afDW*B9^=Vcy10B&ZY@-=p=H<0 zN=p~;{MU2YWopPv_wmTQv=;wcS{Gc~?iTY!ce=xH>VJQev0n`$sI8PO8bf7m_B{eW z-8~=F(v4LO+w$4-db(Tgt806(v7RZPABJ`9m>p!d8WmsDR z$?sPX7p|DQo!V;ZkJK^sjzXUcA9VFQuer<_F9Q*fp zKBX#gtdHA-m>o;Vf}DPPf&E$m>q>5=1?x)E$#S3Ep3~0_$DbRg^}qNd%r=MP%d+=t z$flQ0g3QxQuDY_1J)C}CcmQv^oX)=ftuf6vX`8`rE_~hls=C>gQcgvx} zOOL46SDsH;C$+>5Pq;qi<-S2dN9*00S1UVrk2pg2+Z;eCIqARGsTRkd%{UjkpBENH zMqim2z)b_zBB<9tp`)Ur0yp*i&Xf}x0Cv|&du+bSBl?eK_u4&oX6#P`1onM3dor`K zu952#v*c?N1TGW_5W@$#E<%hYeeihR@$Z6!2Z^n=VAch8jsC#K%eoVdYrT~?GqPR- zmXHfqfnWl_%Kr56@ruW9$D^*Ur+eWC+1yI&LaSBMRQY25=wzQKMj!|ukk&@zkhmG}5si~0QrYq^_DckGK0UTeq%-n90_uM86c&%<1FeFK_t`mc= z2zyVst)Dg+k8gj^o27STlP`tQE(-<|5VS^yrS6?vx45ohlCg4)rQF_Hog5Ae209R@(8k()ldEy4pDvyPuW)FOd6w9GE?TnzX?;BDVEXSH zV~k)7?*tcP?_mT$o`GrG=PEa@rRs-a`!P?Bw1;Hj_7L!eUJ9)JZu0PYlgZwbL-Ss+ zD@-0IhP*f88EupyQNp{WrE!ra%JGXOnMCgx1hD1hDD3~z`vf{_MT=HS)+SAKQ`R%BFbZVpg43p zO7>4ZAr*MkKkDep^OdQ4;`T9v5Lax@4;#$^*y^&6RC#~vO@_>)12{etWXm;k)of2OUUfFia>wo*!6T2Bg^Ye8ha@$EVkHNUS z{&(KJ@8$FJ%R&+I4?BuFw~vF{o(Dt#Gj{N~{7KUlDLl&q=>FvBzRj(R2$0Z>bQEws>R}9@ls;=t@9$)F- zu8o6ifAwtRC%~FL;tfB}*B!UDo&#k!n?>vD%7mi&lH z(RO|DJTD?Ox7x6dW<1~x$odidV7e^ zsnl1<1D(&Q813<+yl|krwL8_+N}v5=pAe$=6CkbifuWhkl}vBkRk-}D>bgk&#jK#; z7@;(8N}VC&qsPis#?y9-n{w6*D-SSM+npylfNUuoUHFzgrSVitC!FJY^K7}~?Ff%A zm*92JatkqedtN!HYr|f?W%kJbYH-VVaqOL89Ss%*q>a`2~8w<1~9HG-G>MA(Ree)GG>c9}_s_?!W?RUgK zlX`mDHgSa|(BcHEfA<^2Y)8oFeaktN!W#f#X)5la)=X6!ZdmqtK7d2}aYfF~L%Hbl zyDg+L*FQ~_YIlKt>vU=5c1=*$6>?6$@_o6p+pe`}Bl5%F89w#X1s7e3J8CVtP}o5U z3*x`#PQ{Qyq2Rwm5livi;Z9zOM8s{URwtHDJ zabQWC+8WK@azEiSlqUE&hE`tkX}R1`tVba4V`?X3Su^&-lWLg97wUIwO9oT^pTTfkM+z$8j`^pyF1f$4O!Zt9spYi(n(q^q!C_`RHcwQSvG%$dt zjW#dbGWP?klY?>Am4Pe0jyy^7_U`Vll^chT+kM#^&mWB_L_B%K^m@4rydd@3f#|~k z?jK^Fe79Opm<6sP?JC%zM6)|qiIDRo_<&h*YyR8>S+(bl(=8aTiw9-|-WQDe1-wt{ zZMSu9d-9LCEUni@fc7$*wpUU#tvb_YAP{J^rp%iekkRBxI#qI}5ABN=<`%(Y-#8iM z7NQvMSfcfK4mmoA5y%gg!@c{~Irhxwx>FMpnAID+5P_`(JZjcdijDls3Eok|`}5&N zwlklT@MEoN!u13Ab{ne-Exf9q9Cbi>EXlVs0axMy0~zr&IeBH zE@=ImVRBEOv#UU?JXLm97sgtBTR90e_nuqBF^{?f`1A5`JPB)``pxq6;J%-;KAjE& zeCyiQNx8NjX44;dBcdL$TCaQBw7w0~yw(EwTiqJ1>2bE0S{JsocFZ3Z2-=bE&DZS- z%5@L*axP??hqQt9C)K|{H#1(@wI{${^$9LA!Dr1yr^X7Q&g+q0fcFA7Erl;|FUq>a zs?WNSM`u&$XG-YQ$xr4i>(*n*Ox@TxvvmxCx9&)F*47qZ^KnR)KVKc547;AJ421_z zg^=qE@{}{%d$F2wCzOiD^##r)hzt)5O%RXB)g1!J7Koc(anD?>pxL&nN}#v)Z<8P$&ywST;3km!=iUL?q6h@ zNySuD`N)~j9n94*Uc_zWogU@8^(>=uP33p2I0CM_#DxD;wb$_op*m$Iuyt z1Hjtt(}S%{m*Ie(dl=_Gn57`b>lh2zi|ndoIF@$Pi;Zx7<7)%Gr1kD+z)LCl{7WP7 zu#NS(zBC5{hal`I3-cXI&G+8!0gQdyE`*LGs`d6wzZE{aa=U3g>xFe5OG$rk-Waiw z462F;wUr90U&T!hvesnzDYWblAYG>mW<i7@Em zW=nh140XZL3iDDpKZdag5{#a(+Bfw;__$m4h+XD$QB=|6Bi|!1-DXGpc<&T#^dy$v zaWTCN0MuWveLhJVe&mgk^?H?{a|&L4eiBEILw0e@S4(?#q49Sy!Z+iU`hHZewI=Vn;iA)RUqpsgu7YW^kN%vfnM0mX#` z*#{PRR?Kw!yfQfYv%CaaOH~1AcfHKZu{VngQ6mpn=MdaRKI)A+>RIHdTTL5eW}aY3 z0Mbl6dbq4?rnS`bQxm(4m+<>ittTRrdsxTQGiK!45Vg0<-nQB`ggMBb6ACP(Z@-H- z&BZNyTFWQjgH$fj*!HRNSocIe@MjXpG96|!O(isjyxJ%Hx!Y>O=J2B4)@fuUP8A&f zJFCsZ!-I`OxwXv9)O2K=iedA^M@0NxEey8Aq?0;!=7-j$VHrj%U7B9@R^FV|x_+O+ z+gU+aK@JXd;hBLA$NJ+=)RSL#QudpkWh)7fUHJExcHm~C)<|NWwYfd+)#q0wE2mnQd2$@)aCT-Fj)ZvfI(w`pmKud76NRPe27d zh!o+@b|$=!o4hjyQ3mm$BK$OvQ|MOc>BAgV@`^fexeo7+OfXhAjnOT;YEE{c0jJMS z5Vu;Icz>QNYVVQ+w!E$eUc0A18W|KWceND4dU4d>WiY+^krG>*+oR1v5zI3RiQ&W4gHqOM;Ac^+0(OPTMVc-ReLRNBwrzXUie|VLoV-9^*{Sj2+fibWswrGjvvA z*38`HHvY1-A-@9Bg+a6k9ctx7Y6p{!}_?F`woH3>t@v5&_{tC zCcppTXs*)Y3=kzyPC(4q_$|KIrhtStSh~OOJ4#>TZde6d z96EUTwGNZa(t3H?ZU(noxU95pi3P>QCpx}IQH+mE$jTFBw}k|!6rP0y*a@?{Ywt2T zpE0XXsQX63)t8zH5R$NOUIWRJcSP0I)i>(jK%2BYP*=hRIV(z^NzCPeUTL>bZ8oyxt)Ng!-dh_X^=ZcfiQ;cj=@;&kQ|gnw zFgnvXU;sgST5EbC*u`lv(Wya4B6s9Y_*m3ya~#vy$A=7HKPo|BSayrcQnwTiDXCja z0Phe~_&j(NYu8~2Usb6a9!QjRCNEcG5$M>%khvYNnhO%>d$E&wiAX?nZCmijA1_Ep z@2nMGXH7Es$mz>2pyo}7%Uu-P+1i#KYN*?IJ9Pj>WXSl9r&4&GOcfdPrS8=iEeo2O zh+o(?fB-lqZ3C;Wcbz5tBLTMO=Y;#qs*R#)ZuYFES)%#zB3||*>+5dCL;NRc+8C?t zHn4qWvX^}R;RBBzePJ^*aDEy+&=I~btYj1MLQ9qA5|(&+3&T zhT3*7t;qmU`#q1>Zc-mai{*=mopl|=3Tzc=lGxX$)1wx?ntSoJ65P@FmNqodDetZ# zD)*03jo?6X!#6+3f_+MhS~u39k?N5utapY_m=)xG@h2pX5&0@#jxXR|%1z9~uX6yG z#MK)fFujSM9?BqP)O81hooB4gfi+gsuz*&FU4FO6poFaHQE&;WO;gaWIeg-py?om{I%ihCuH*a7Y|oT|T}@1Fup)3!)uLI9Mfs4lZv5 z8W+LnNYw=qk~udCC>=#zJgh4!gNutQTer+)2j5N;^AD%+#@zBfK}A=MHXm_tsJSAm;7fa2SkrA&6GUfxoo5tBmQ|`x4%_7=*Oocq}9^e-w>_ zWjjBZwDI-2JDa2a#5-ZVAD$usr~XDU3i7TsDe2X|r-2nGO;~;8VzHKmsVM^LI={ol z^^iGH^oJ1WV4T)fviD*c{dT?J#Toewbdlgo$dP1QcyT~(clRllyMtyMO-XX?W zAu4?M54(M*7YhESuP?33-H_gRYj5BMz8FqpPuwYpH;g~@M`g+9eP})#>T=&oP2gLe ztFbz%t=mvuE~?cj8K!-$b&>_F0x3G!ozbRu;t~5vU6SZHlN`)8!y)cQf>fuj8k4S8 z`dgEz!%}HKro2y0)7H??KvK4d8S+%!5b*(D-(9IbWIWwJ9TX?xbHB-XC?v*WPF44@ zr@8QyDXAEX?vq|@jce3B_%VKU;ur^B8-lP`xW7Um!fc#AGR5D0i`vA&x{yhoa%lti4{MF3AFN1EO8St%ArAX-eUkwC5Gv}4GMWplv52pp1HvXymlZhsGEPYE} zY}96jPHLsKmk&U)BdTmzjcuDkvg4yIj^e;E{?kIO@<;6K{UQD>{uCFP>EvqTcL#D! z78URSwAfU9nQsn#>8#$QMViuH7`aDF-W1p4kv%>H2UUo~`A(e8dcCgDMY##i1oPP5 z?+s8>B^!BBj5s7$PNr0Gwg8kg=FI>?nQ8Kcw!n$)(W6sZk`ghv%Y|z-3ZrOTMYjmBqvX>iX5Y%-lV#X zy@7>+(gRB}I`&Sn=`G51%Ew2gT=iwzgAGBYx9gJrMHtv!@UQew^LK_@?#9r6H zy77x5Eze8CMcV;Chb{yPaKl#(Zy(1g6sDLsD z#EWDYbI6GE|BAsduZo|5s!~&-{kBxErAUu+MjZK*I#fc=ewvk?YRs5b$ z)m=8f^g>fm^6vKPT5-McQ7$gidj0)3IjKW1&*y9bj5eGt@SFLCq+P*5l_B8TmO7CFq#*W1s& z+4URfR=h=wKYg?t)m=Juw>rtuuiLXf@XEMQcm9d1ONT8aJkPxRy;T8Ne(BPXm zBXtyV4KG{?3_W~ctnXAJ{B8s_pc++M2KPG0Dk_$c?bS)Mu1b*;0PjRI&vZIr^F!}W zzlXm*Ezo`?Er02YZUP0gBLa=l#1*gz-nAz(fFd%mKG4K}W=-a1J_%#%ZHtz##S9!T zTWaMm`LT0_rX_|NpvY*vou-lWFv)cAu*~~PjDA2UyzSdj$ZhIlu22_UkOL(phi(54 z^&IUF`xa(1b`@T-G+|$}5R=ZDX5t#@2nkmuEG)+ubF$IRRk_t9pSUr{sjwyKg%@QR z=~m+!XMUBZSnRPW)GiBlrt=gDP(~WggO&882djz_Le$_78rh<7bQGY^o04>CrdH{O zJ+sz~lha>=>dhO@0qbKu0Vf)7!-y!$_aRA)lW`21ISIrnQEw!};osYsMIn!1RPK?) zooJH3cTr_b?+fU4n{AA_c+vK;+-6=^(VL=4=pFQ-M~2TKRqOb#qP$3Xr^Qn{cHVTW zh}BfI#9(Rb^(fqDP zy0JTy*1w}MrieZ=;Z2IaK1|Wx8T_Yact#>$2y@Xr46L_zC%6&?&Uj_n&Ajfd7@ZAi zN6b;bN&{N2K`s;5upd>x@E`+biCYY!i&z*eN{9QWSXAbg+C7#^k89146X>ind~`?? zpg~1J&BleNBQEE--}1&U^Xn%#VO566Xblhdifb~J`d$*kI$h$px4R_tCz{T~szX#H zfgr(E;0Ea1K%->9*-I=eMcsRD|JUJ4wAk|aGDZqS+v1ImW!q75MeAvz@r}J7=(CIS zo5&v>HIow7AIo+Sa>~CEJPLBg3LbvV8EfjviHw_=x&DwNZRW*RBs=C8L&Bttbj~D^ zEj=re2||lvCczDtaI=?@*Cf_OR9r;M-4x${{Ts8}#hUY)+K(BfFN%KVKBvy9TV$4H z1#dQSLJ@m8xjBeA+sET=U?46Z2ypneQ?vs|!G-^UPcsA?LqJModSQq8o7$E}vBxfQ zu?(~hlgvxZ%(EsX{^u+3VMMogI@436fWf|P>ux5L`EtqG)7ejns1Du zygWJlflbvjGycSm*wTW5qFQxt{>vPGGB^NP8C}a*2S~^WNukfMngYDECkgB73X6D^ zt?-qQQ4p5|E&;thQpTBfy0JA}%j(AjuhQC?^=TpF3lF2MNJWPD3LPok>|eJ?SXh+G z`uu-$0Y(eoya=3PVhsE(M*f0(anarH z@Rf!(Qn)0|6M-HQ(yvJLmT+r4HqPDs@ag+)TwOhz482@4JAH{^!S*NCChI`B;n8wc zFC`d>)p&HaC4QCm_p@nngt08abs7o*WZ}Qa{bDdkOpImpD5sMJm=Bt97n*_h zQ^H4SRy^>}Y_`R#D{kdS3}XtW35dRt6bQR759$JVgpi;Gs?H8H26ylOfQKANj#`yJ zkKyX?$cXU65<+&y_CGXc-KfxFO$>qgp0S(A2~}A;53qD@h>%=WHRVq78R^n8PTlv2 z#;|OS&~^*^>hEWxO{j~sEBTneI+Iq%maG|-^Yxju64TS=y`7-4BHsAr{;V=6sLADk z;SN0WW#U^eRhFu$kB`v*=B)qZlC5-Jr`$~VZ|IUWxT!{_bv%DvCQE(I1Iev)A#WmG zU0ulS>cGdp@9YZX$)|rz)vJNb!xQL~rlXn;)w(8g89jheBR`)9yd_+L5;ZgaHAr3 z5*``>{*SJsSjSK*JUM?$Q}oGl$%i9mI*s? z$~CFYI>td<0oexX&+7jw^Xyi=A~%z^U*1>)P8$Mf0%WE-PFTyNQOc6+p>YtkCf!pp zVawLmW-YK(&nJjqa(E`1*KG^FJzPZe7nX5YuGHE7U0j08sD0}&FxR?a7MlumMUU0x zJIW$7cvkzZ_>IRgWruQ^;$70zeR#%NrD}v&J;Br0wib1_?y)s;s_`8CrPq3QXYmPr zgZCp5#xY816MGm~SX?yqwYmE8kg{JU(}&eS6%OvWzOYYBC&n9-c%Y!~S61{67S1!a zuU)uvR}pdqJug+fbCSM)FN8|SZ~%x>WP)B(xlTZ4#p~R>&rt3Xv1}?OrE0N%h542? z3xrFe$gS^|J;Ku8PX(Rv;NOJHs{Ep}CO#RyBHK{otd6Q3|IkWA2u~$5ozV}Sy=6oQ zc`hUs_%Je5n7$CxnXCZcYSrSFg&%)%XPT=$D4hU`vrBfk_@49@2J zrQ}@(74ZA%>b0^~er-S1nsfnk&MLNHwBWRo4W3MG0)mN21Fi)&#v`ZjOn$Z=#({bI z+u$y|^)4Ur-L4_40wRrn(D#Vc3o8aO3#gk|P{!o#?fvYSWcCupp~arUSy-5% z0@L&}&2*^4u`q7o0Z8XGhpLfEKY20SP(3k_5fzEW`q?utX-E-in1_%Mqb3waaTwsK zNw{xWsh@F8x2(TahS?O&6dEW16zp{9vdJov5mUag9X=cirT)j*=tLc@oJfp6u*IU5 z+f^j3%;_1oKFA&&rZMW5&hF`@rYC4ky?vg$-tDbOinPPZSJIP@LW6+ma;HUFXsTChYR084AZAjec zPqJw&tu3BVG9Nn-W@Z4buU6iK z;=2krZ-cSui(j}NkXl1+mUI8Go`+KtnSuj^`Ldy1Nt2a2T6lt_;#=i88f2Ilb3Be- zk!}`^Re@hSlat`ZqN}s9el5}W?=!#3rWIaQC1-KT#-^(5!4;7w51b;w7^0EqVqD*O-<3j;LuWESR%Xs$0WEt;lQS6}+bV8!fb=R+;3|U}ta)<(_)uYsl z7W?(llWOc}E)OsExWAE~!if~2zc$l^k{hh${*I`t_DQ8EHp)z$6|;nI4rGj{4Yy(W zv(~-2jW3QIXBT%2@*W3+C^>d)%8PTRQ+CO|;S=GE-F5_Cvz(sg?=1iJi5v}5Z75bN)z07cmdhDSHHID3Q ziL69CV$#loL$@&cO{xgV5hYY^(yIF5ocAhsmCgc)A2l1jrQOX{lLX3%rE#+==p!66 zbN)*g#$s(r4vWPOk-`&~uynLYNpu6dOEZwm(-zzJq~+bEYGoiqEuZX~z*r=|HO@YcBy(%`G zFgV^t2A6JM?nY5HJt&WAgk z{%)&)65w-vHS$Fn^vFh)tKqDqPuW+nkC4E?XftbWPBpT)s5&dWOgO+~B9UcnKf;I5 zhYwxsz80v@p|y`J4alcQPku+leQ z`{OTEyO2YRjCpk}f}&3zUO@SS>YL3{&kG+t-NkW#KBJc9!5$ZQHZ3vEv4fi4ieD_4 zO&@WvxETM8jUR}t@8^Doi=p@BW}wC4ySC8;w(E@8SSeOi1v`yFN%c@QYFvLS#iuvY zWu3mur;Zhf@uHD3P`KVORuo@lEPlU3-OFAfo6(M;Qu+{=jT@I_07|ZLD5`d6c`vs` zi?NMxRccO%%|WA3a6O9ee$Re+4jvG-D+_q%7vPkRLsIM>bj%@_JNHA>SoOU#^Rx$Y zZ@uR0cSwXKG9Zi+j(&VkYzxj2(ujGAoHp;1lPCt^7lQB0h@G$O7$=$g38X)jU0>uu zDYut)9qcl_Zyig|RjAbeTHM-TZ$=<&r>ZJU<;1ki6Xc_3sR==SiH1HR;$l!@Q`jHd zD^{X?VH~5G_S@h>TwJAXWzN#TsNxN`nuGHqJRq`*&%9keOf0LdW9AdCO1%($_NpBX zEiGkEUHu&wC7Tr*J^{ZKKUh%)PBC679_mJFbt!on9J=Ky>HY}G+KNX<69OuUQxYZT z1Nv$!sE=IxAQyaexI|WlJ9vxs|KP3O=@}`oUmsk`b8nKsQ2qJ79DMD_i(Ezr_*5d+ zPVWXZo&6adUpx4VDf(%T`ai&y1@A?>oi`b24OWWu_WuG~3~G{}tsca&_odSJWGw!; zK+_us41gn)rw=MIb3**XCVAgNXec5+do9_mzIuhas|ZyFnCg!eBJg9L**m+Qy!TdV zk%DJClaA}Oi|<*N6rhJuPgdgb*fI2wl>i}76jQ;xJD0j(Xj}TKlN#`@_)ztGo|i|p zuHXKi-eil`)mBdYirmNd$ z{rfC8Y(}$fp%Yr}@4a@Dt)@#$5^JBuDaM5wEA^i0a!UFG^~F&0oq^%uJRiFPuK$Kr zz0y;wY5#Z#Td)GK6{ku;J)@kFGDMEzbz$!K9@#Unzk1#fMQ{xa|GH;^AKraGDgsy+OA7Y%*W+E z8SO_+x;rAebyrohcx0%+IJS4*DAlBOPWUI0cB0r8Y@Mz~5CByK^F{w4IDwv<;chZ( z+x;mo3kDW5ep}svNe+2*T%$K5sA=v)-qHF;R$=IcEW2hFo1YyL(Cv-cP|7cBg~ksIqF|JW&T5rY5+DMMZmpsh?h$T5`^(c_Ds`JEp}|yvkIoaKG!!#_%DWS zu_q-Fb>-fmq5K(D3iz09^#D35jUTQq?p*lH&mlDq8Zn?&5Dcrlv`8CbWSx%WT zm&{?_*!f};<_mCR&cnRga{8%px{rBPt=-Kl6ZMH0rD4_VYzvDMSdm$Fx@21JhxXsr z{YGm2jy|L;DP*mAi{~Kd+MBt7!Y8M%h2f+{TA)}}3fVXduZ-ZuUX#b&;aDDHlVl5R zlUH_^%cMr?t1aRY`+%`DLC?b0!ireD2SF|_)e~4E3k7NHm%W4e?L9T6ZxdJ)$yPHI zeh(vzV{`n6T6t3jRV(#FRbQLSj`&)G6!RS zu1y@X|D?P$en`8P?D%8@`V=z2lL5WQx)MhQ zKzlfY9-!Rk;np<#1>j2*Ty~;~sER0Xn*cyDl5AegDNVTrG$7t=c(Z~VZY{g5AZaDS zXa56yMk*WRh!?0XK5K~g=w$+7BxVu7z5boy(A$or*r=DYzdZHzi=pP4i8b6KFJr)4 zRbh4XPU-UQFF3+|a9UzAn!NHx9Ugyu>qTwgV1qS4HUh{e!1ho%GjFM zEoQ7BMXE1GjHs7IW?qdzf`}~wP7jR}6H$pwn%y`f7>JtOnV(OTaCL`lm3%*YLmX46 zDI0(t2q#5XpEPJq)D@4~V!+l&y>Gc9{NSX^FHQM5?-QdAs-0r16dzu)X2r`om4Njg=h+CN(vRP6$rsO4H z^j=^1HXh#KZ0zmsGR&726SfjUgo2eS*?%di?V^gr=2R1op^gtKE%&@14H&p7n9PY6 zgQIGu3zGH7iQS+5^~;>hW?z#nbj#%wnk+npzQT z^F(iy*qMt-lCMXW#ZbN1`GR@*QP~oGRw()^Y%YCtJ$iL``IjerWhkxWqYxYtfQywU1TykAHy60hDd`UC;|6_kA6yU@_9NdY|X} zPJ&d_cxLKLkP;794q67@?Ga1tq}W=z`l#FZ8d~A0#)~)6?ru6w9nU)=EL(2ZJmIQE z?OsA!C@3Y7uolM?h}`e>(03Ml5-PmV%^OAO(Qa3lv$HLKq0|7esnXgfRH#&6Dtb5~ zb|Vxz8soi!p=~~i$A)8LL-5IwZHg-issKg6wWs)TV}GR5C5h;e)kH~#!^-($78^p> z_1kX|Y6yU;*!zRx$@=zQTZ*_(Q^L?IhV%4J)ZgF{5;+(wxDfS~k;X;m;izR94UgaV zPeKQDt$Ox1d;gP{KUl~=Re7-h^+xgudqMP+HBr3+BQ)8J>FkMNJgsO}ZDaJ}`+mx# zmT5(hp5fl`zSsIU?3jCwxpcB7%OGaM^fLW z2z!O&7qN>U+dfWZ1`0nyz2|Xl5s%|ff|wp?re-iAoepTRZyzszWBz-D!RY`+$~M3?_N()0L5zX_b}y7PU)#eJUh=Mp65B)Tpn04K&?F}uH! zJV7KvV}KVA{lmfMXxCWW3DmJ&?8S$9>5DI?K@{T64n?;Ob6otyCeo3Gv6V8Wxmg*E=zAH^_dO<{W9ynd~vCwl*ut)iZQcpCU;ilekN$!sDr}8AWvhwT4G=YYCzXmuZ=>?}_ zgE{_x%cgp#Hi%J`71U*4_TuVArwFG%JnN<*ZxUjT!(l~k`0kA-(DPPS6HTaucUk#> zYth-Ux@1t@5pKTri$1`S*Dr*O72s7WhYpoXohKyicQak-W*2=!El0J)e!g2nP;YNL zfTs|YjV{>!jt*$hLkxPi(HN-gYsNIgJ@aKAiQax7{9suWv&W?&9vRL=lMthy8>lp3 zE`as2S3>Bh?l>X>{(=sw72xZ*(Mdw6_mB)*GE@?NqI=LuN8Xo5O^Wpk%S*RU=1v^6 z_BSwygE@bQ?s6kR^;Ef}Ka>e$jE0ZV^pl)L?#x*6k|h=HdB2o-l7zz`lp-}xTHcaP z?JvG)Z|mbJw?WNDH6%fl7N$Tz!wAxSkQwh6ZfZRRkyd>jPA)Xjv*u!`D=#l+6BbUt z-Gut#jJXH1Re8H8t_O3I&W2D4@;Nk8TPVENirn1VQf{l8Ao_1PlU4nu#!3`Y?N>uU zza4%AQd!UOQ;M-qu_z%svIpH!979e^$^hR3meWw~q=63c?9S-UmPz z)NHoBqM!MB;u>zL|4~qZkc*~{YQ9%NHdN3=F3)X6+qL^?LYs8fZU!t)8gr4_M!E@L zc1A=XXW@MluE0ySk67d5k44X>HH*bRrga(&Iy*`&YDC~&9fiSMu7m||>$Kd&KkS$G zB4btZj?w2qKAoinb~AU*^m&g{Dx8ljNixfi1zH$iKcqbuV~hxGY0D42W4~q_BHZ^h z^oygM)P=Jg3IEvHp5c0yq*UHykve6{>i1=Rji5ax{r?k`_a*~G2%YAk&i3nmjH2T$ zMs2-W`_;^LTEs{W1j*2`3kH*?+K--IWe;b{w|DQMx@JIl4wUdxsx-$b0RuIK+t5C= zrS}pCUYv=n_rp)N>b^Y+`ihCf(sO7f(npExN!|kq_{%v*}O^G@fg30HQda|$O|G2@fGPy|UgMUTYu&O;P3Q(D?=cc{2{ zj)j~Zs~J}O0zxwn`ZcRbH-EII@cpkxy+)eby#t3>m=KbW0(GfHA$94B znUwQeCqjyM97IIeN`RNx*hDlDJW29dSwZZ7;Z5lo-l#&l-&X(%4j7Das`>vL+FHN< z-=Hl)T6O8D@;*}(r|}P=W!2k9yq1A{Px^T=kjx$Z@^xb#E7$4u?C`j1Q~o5!@Tmn9 z(TaZufuo}esTn8M-bc8>Dl13sOJE5O!o4KU?~hb1e35e8t1XSz-cESU^K!1lnmMAx zm;|tiR{hnUXlKm;&9q->jU@E2e3Apo=dWlm_k*#6@{=PKS*p*0dIXAa{f#)HBGR#I zk?dTy-SEMZP`^2~_ryxd2TuC>n7WwakA9d3)ejH4C8=ThP>Jxm>RG6NOpPX@&3$s- zfacJjAk-PQY}0=J00l8`|Iko6NuZC?dqqnPu3qk9v!x05A0ht6Y$_J-(;Dad+jk7ygVXYN`F0vh)tSwloU$2*bGh4s97!RR*^JAm{ z&OQN}JCo*HIe$F;i!aiCg*S_-D({SNUqfKCH2`&r%mdo#_w4U#XbmgLMbKolR87AwAKBHjoi@i63Ad=vV%lGxW zo>dMMycRPEgEU=YGfd6lLmy{egnc#I-+4+5Sc1X0nQ2WM{NDp zN=LOT8=WqiT}1|hAa2X=`M)+aqeDP3dufczSMp2D5C0g^r=aV;eBzHCUF;A^p9y{E z{|7S~Q&10Zt&>djDWYRLKXPS4>`1|{jZI>LqJ%4u>5XkI{Jpk4V65vrF}!pZ@MRCA zK&MhF1B7?$^|uK?Z;1Q?+gCjENP4cYUvHJ<%f@o*-Zp9Wi78(S88NDSrBjT3?#Cxm z%3^}pUF-$}k9u3ESV!FUxdn>w3+AEz9bb*UaHVoBK1J4joX>{#2D#5hIlB0mGDpO8 zkWPDrt9*Q!yPh}JkdH~wi7QBW2L4~9^maOdH@af&eaPQjfPhkC?o)SYkg-#H-j;9p zY&Z`>Gf35B=c~-*C-DyFYKnF`W#!}yA8s#X#xlgKi3b0_ti}{uw+%3IVMu@ z0XS4Ef$IwmClkmTG3_f28-T3NMV|*7D zDnb1zie?r?2su!qP$TerzK`c(XH}bJP>2@d~?5viBKI%fdBy&asTxHxv=tXBjn>e|0macFpi*bQ+ZZ zbJ&z4@r#b|71?vuIO6k%jBs_B6+?%3{4y)tG!OC}oKD*hiKc1LdH4`24rHy{Mv2B4 zMRs#$o~sGziMBEx4~m$vq3CQ}gs#=&ziE9tv3GP~FvFaX$=uwLnGT*oN5TEjFMXhzD<-arhKYJ?wfQm|Sf zSbZW5D4mR1`{gL$*2;}IXa*pPm*YPffVyQ$mv)fYxSUh1d1TKpzDQ-tk{w(aGo_*`tZ+|DIwJ3p%_B7dY(#V23?xuN zt%*rFkm%Vdt^qEyU{BA5*U3~owExiOd7nF?U5nn76{XN>O&_!f%|_MSxyW(ij`{NC zU7qQwP69+8G2qef!3@VB!GZtZ# z9U6K!>q8JS)~vaKY=Jiah;zhd^N}2=&>|qNYCg@}^pj3qtafnSI}5{rlk?3FUoZ{^ zI!sr_V$wODAw$E4W2dSk$9tx@QQ9L+< ziE3lL9W?Fy?77*2xlcX-wU?%%s^}+!qU$0pRA)A=R<3J$;a-}T_q|+y7YW%j-n)(L zz1bRzg@)hC6TUV9e?o@x)pgGqUj|{z>U=Hu!AIGjI{y(4Twjjz-RlL39SsWzh!QGC zS0!?%8PtVagW}(hii++S*|Q+NH=uFA5OJK|{V7k9f%Yd(DD-=%hZ-eZjus%eloL(}28|VEL7aLnO zg{s7N3`0kbnKoRa5 zsnH=9P)iu7@fPx)c_Feh-pb)C++&G_E*H8P+*T+a_hEas|!yC4boX5oIjhiw8 z%05m$k@wXwKV zkuVWR6IQ`kfUQ|eC=IEc1s%X`mKXUi)nGCN*ah{n2wZOjHq&aSboHOhv;B7*5p(cg z$w%8m9!r7}?rnM|MnRaf)>^bBV6JZV@hQd_bMu9n<}!NJIF09*W7N2|SoKM`kBgw1 zW=5l@dOnFli(D95dYP+xGJ2Ab2%OU`?pj)t>Rc-Er)1zKPKLK0YKzuWbJJL(-h}b$ z(S7yhJf}<8yZ+pn9DLZG)%8JcfJhy3YSZl81xX(6FdA6&`5~&D8~K2kXi`E z{|l*6LJk&>*f~&IEmm-XFC0CAoI(l_x+^p1DwC<*^`#?p$%{$A&2cm>`U2G!SUVZ; zy4iSwO*a0Kiqu1&Ut<0v7D<3L31EiIv*av%kYA!%25_ck&-{<`l{UMTGXJ!#I6FJb zw*=P88a*|&+L}7eMh7;{`22jDBJEZWal+_8rOc-;4@V5uJ^$0F8~}S9sEt+xF`8Dx zFI+d7~u{q)W(adGlxJmvGhFM&ktuPugY8mc&X_M*qs=369- z`Cn)LkJ$t5GaFP`9El866SUe^Vj_BceJKZB#a4dC1dD@a<0vW1fo%rOGpd!JFN9>R zz?iqsAd3U^A4j$9zD|Lir{bC@$*q{IcecKa4Ev*5Kw6Bi5ka3o@YD*P;ybtbdSQrW ztc0MThxD<9bB3$(MgvAKj^^+&N^8OT;XdS|RJSQL1}12;O*S`;xN>r@uoAyaixGP%!s5vuU-DDME?f^S;5Ery+WEEPcJT=Q zs`n?N7sP2t4b)ZK8EdHJAxB*^;d2t%cojb_Zzhv7ax;ikuGWV}U zQ7YIOBsfl*TSNxm;CW933ZWZh>=;>dhFUk2riF?R{Q|+8TgFf`z~N>x1(Vfx6-JQ+>*K+9+g5JS^-Bwu^-+x7(SGt@?{R@ zYP-N)S%lkKsR;|}F0Jb~hWZZ|T)Lq}mgG*b-Xdbn6v*(13C1i9cC!u@Z_ZZ~+}1VK zyK--RHxn7TEX)`@yKPLM!*n*SZbF@iCW^wVm+*Za?JbWdX#PG?cnWoy(q~bN{WqEO z4Lle&MRX4-}3tFG4<` z0m`z9UeKnsB&`ZD3Gi*Y+Qk`{^VVRmOpdS{;EPXw&=+iRh?H0e98#4F)}uCW-5zi0 zeOqlf6W%jS9pM@l%xR9IrA99%7Wod}{>JSCprfHFfgiFt#3X0}>GSSw(BEBORM_{f zSsTobCn7to${+-r7(jif7DNSzibU&AsV zWZU6#4>lx%TS789zgbW$G#SZaBV=@#IKF>1+z=CXb8kXO$F1s-^%_Dcm{eIto8&+> zQZcx7@}qJ)LbS}|U6*cbO$qPIfRa?+li`M;`n9$0jn`^z2!ed z=8BCzd9v*&r4TDVIj5aF(yJkV#o5)mfdrk;I>m|{tYBSV07;K2vTyy^I``xI!6cJ- zZmh)`S}Z^~#3q7!w1%SIG~wF7@o=6ip!v0%{@1|6;l;jv>>dhhxR77FP7L!WT;HM{ z5wIX*yaMx#_&6b{prP!E2J=!y{J@$dhyXQdJE3HgP2^ZJJtW!tt6^~p+s5mHF#-N> z;4!=Suxa2KN-7O8M(AD{1M-OJ*2he|+j~;XgfL$IEPZnP2&iK#K6_<7V^-B8;had>nIX^HgM2I~ zH=fI@)CdD<{IMJb3Be?goUL%j<~CNkOip@VDN>g3phFGqgqEFcjM;m04rG11oE@Wq zjDB9c`H7!q$Xd1y+F%2%x>hcM+nEvCxYm=)IZLLPb};={5!yz832x9(heoCd7WT_t z(bT7-;hT?%a4yL9lEt1{!Rkl~(kbsIc*y6VM64LLVo~6cFYZnlaH8fpSa|oyC%N8u zel2S@pNw6ueBzu+Kwv1@@iqB#I@@b)h-At( z0}*m@#C+5z>ksb_j&kfPJne1CU?%F)_+#^SRVgZ+xl9d&_b2>|PS>}9xu>E)%jC0AU1c;pgF`9PmVx2x0oD{U2=`yte(Sqvcd-eYA2yf@s1%8 zQcy8CfDzz%dr(WKZOK@D39EXP6%y@Ai;n2qZzphf+&M|PDPvN6vbvtN`)Yp|w7`ey zz#&2$yTr~6>D3y@C@(${(H_we4?+Gmb6qt|@LKc9%*5Y5U1z!EOb|P)vc_6p?a~dB)>IcnFsg~zjKY}RUb_-GcJy3oA6Y68pJ=Kf9&gxhr_)E2K|k?>}a3%ukQBX zgdBXMmG9b~-`?-hmOP%##q{kj7&cZVhbbu|p*$Q1q#i%qdZGpjA4!3ZZ-s&X;S?Dl zj`Rz#Z+fY=BO)Koj|c~aT2-YYi*E65dLK2C*$0X}L)RYa%8IZ?0)2^SwjC@!T9;wO zu#9Bfi5m5857gPTir(ud1$IQq5Ge<}vCIvKWcff$g)UmZC;@bx-_J3cL~-`!CJTUbd;n>jQR&sF9I} z7NN)MfMZxkxLa5J-Q5rEQ`(Q%Sg1>m(~Gi~OUB-fOpP+YjXSozK7Qo@WxE+kRi0PJ zWVXn$o?_Iw2La6^E?G%j!ymQ-5~|)0IZ%bIL{3?BwhIah>bPU3*nbyP3Y@PW{a#FZK=DhPc1!=H7*@5Nw75q%ttL?B~G{=)J730`EYru z5~YdYcA#5Jawz@v8dxjKN&b+&$FBNy+ccQ1lJT@WYn-3sHHR$NfeMwmwzORSPlG6K zl{g6^CpXOjww|H)5ave|pPDd9aEA*t1LqbmaTbA@MPcNa-Tf5w+#sRo?FCDiU}F8f)LFL1yVK7ywq4XRb_fIgEOAHr_{t_kKEBFG zyP&7G9u^#FplTPS(%+5o_wS71rdi7nYiVXRc>fk+o(M8rYc}XY`b-3; zB0#0js@6>5BSNu!{lizoYs;2(LGjD7x2{)Fu87Dl-eOu%=wv>%X z{5WwcwZKF_zA*Y)&w;*)^fyMRTVR`C_68v#OcES1s}KSRgO83g^~(6dP@D)Isr_wh z=IXMDrm0mKcC?@|@m-boleJ?E1|)dmf+thbl41aIH4;_#h1VD4dC0Jm!E6E5uT|pc z@Dg)@{_7yy=~?GUoR6mPjBQ;*y=g5GbYbyz3nUV_FRWw(S~sY6TSWU_=%McYF5-}D zG4j%2{;g9O)T^hPJ3%nxC%l*w<&@3$-R@o6^XXYy3%ca94kdO~+HGc`Kpl3>C6M`p9F% z?K$m^>&~oPgtclL`Mus1PaX(50MNqr_&BKoHnI!e&iC^9()>7&FB^l|%^j!$ZL6b| zULAGZ2T5P}hxSl)H_rw}kT#Nh6%fU&86SArrWe_jQ#{s&EL-pKp7wug*KzV^rWUO? zlciqT_q5JSXCjJsy5PW_N_}&kqKM|$kNP~xy&3#)#D0XuB?0e2bGL}3lZ&vl z)Xzr0zNNB&Qp>=)nUj%T9m|}~DKN_i+FC+{>Rc6*#KZ%zyPzxe>msBd5lQ#m1BF3h z3s}~9<%Mu|P~PeDM_^(=s#ttiQ>9{Rrq1zd1jt&8b$_M$Y1tP=utiq2LNsUwPFt3zjF>BvWR2jMPE!>y<9VwT328g2CJ^)z2WV19I)3rT~?K8s{j z@s@O4Ets@rOF4@{GDo@6>Z9cR;4a3=nxfoTXBEUJq#Jpe|mM zK32x-osufgGJDPTWcAziP?UzPjb6~#WNxp(UsgG2wR(g(E;?_Ogb3!}dhj3aJuFP! zt5GF-gmN_B0rMOt`re_W@!in*2zo!lXv>p75Aixm0K)~ zFtWjf!R!@||8zqg>l}-hqKuj<)t1E{M0ftvg8XSV3CK63&6>N9`M2VB)(L22^!Jq! z^Iwg?mELg#D3Ew6MHp8eZ!u2|xC@X%?H>>KJc^^F1$q+yB=`gT?V&?;l_V07O2=xG zf8M6SheKI&W$E#L3BTnrMEg!}r>V%OT;E}o-5m5`=`#1oU|^Tau30!V)vl}(AruK? z`~g1QB=Z@PDU7~XiDO{93=tC2>#F`z)ACmznNiyEBJ^E-U~ot*-_o=Yg&wb;!3|2h z=B#vQO|=`fU~CTI$Wu&_C+($zt!CfItbVtG&>~GGj)#71*x_Jn3!Um%qYD~GNYbFX&}}fax;63QPmLP?br}5#+ajzd#L}Y zC)c0o09xbIfyGxjC$$tr9O{p6^1On<5PM~ez)FZRYn&InAv?Gv82EVrBu zAiA6yHl3`{kbFl3jx=sajup@)NImbYH(Z&tTZ+u&)P570=pYeH!$_F{Kft-UXHZX; z)Qf{~aX5Ov5-2QH1F;p`*ben{n-F-B9(Dh03+n}WlE9pw-EfMIda0zZbUrU2!6ZpJ zT&xnzc^5340`xJI0u|#%L%eJWU?d@LK^mYX6Op@d&2Y%o zr?0zb_T|)@pv_$)Y`44J(u{0aJ2%#>HdF~u!zY}Z@?Yf<>(^vmjl#T&$3@xdgDh4nF9(Nboc zS{u;!15g>-=RmiW@jN1~v`(xDbFcohA{;~Ll(=w6oMjTQ1^!E^tj&Km@Xo`so{f
### uVision Project, (C) Keil Software
-+ -+ nrf52832_xxaa -+ 0x4 -+ ARM-ADS -+ -+ 1 -+ -+ Segger\JL2CM3.dll -+ -+ -+ -+ 0 -+ JL2CM3 -+ -O78 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC2000 -FN1 -FF0nrf52xxx -FS00 -FL0200000 -FF1nrf52xxx_uicr.flm -FS110001000 -FL11000 -+ -+ -+ 0 -+ UL2CM3 -+ UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0nrf52xxx -FS00 -FL0200000) -+ -+ -+ -+ -+ flash_s132_nrf52_3.0.0_softdevice -+ 0x4 -+ ARM-ADS -+ -+ Segger\JL2CM3.dll -+ -+ -+ -+ 0 -+ JL2CM3 -+ -O78 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC2000 -FN1 -FF0nrf52xxx_ecb -FS00 -FL0200000 -FF1nrf52xxx_uicr.flm -FS110001000 -FL11000 -+ -+ -+ 0 -+ UL2CM3 -+ UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0nrf52xxx -FS00 -FL0200000) -+ -+ -+ -+ -+ -+ -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/arm4/ble_connectivity_s132v3_hci_pca10040.uvproj b/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/arm4/ble_connectivity_s132v3_hci_pca10040.uvproj ---- a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/arm4/ble_connectivity_s132v3_hci_pca10040.uvproj 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/arm4/ble_connectivity_s132v3_hci_pca10040.uvproj 2018-07-18 17:27:50.000000000 +0200 -@@ -0,0 +1,8162 @@ -+ -+ -+ -+ 1.1 -+ -+
### uVision Project, (C) Keil Software
-+ -+ -+ nrf52832_xxaa -+ 0x4 -+ ARM-ADS -+ -+ -+ nRF52832_xxAA -+ Nordic Semiconductor -+ IROM(0x00000000,0x80000) IRAM(0x20000000,0x10000) CPUTYPE("Cortex-M4") FPU2 CLOCK(64000000) ELITTLE -+ -+ -+ UL2CM3(-UM0364FCE -O78 -S0 -C0 -TO18 -TC16000000 -TP21 -TDS800D -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC2000 -FN1 -FF0nRF52xxx -FS00 -FL0200000) -+ 0 -+ core.h -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ..\..\..\..\..\..\modules\nrfx\mdk\nrf52.svd -+ 0 -+ 0 -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ -+ .\_build\ -+ nrf52832_xxaa -+ 1 -+ 0 -+ 1 -+ 1 -+ 1 -+ .\_build\ -+ 1 -+ 0 -+ 0 -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ 0 -+ -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 3 -+ -+ -+ 1 -+ -+ -+ -+ -+ -+ -+ SARMCM3.DLL -+ -MPU -+ TCM.DLL -+ -pCM4 -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 16 -+ -+ -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ -+ -+ 1 -+ 1 -+ 0 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ 0 -+ -+ 0 -+ -1 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Segger\JL2CM3.dll -+ -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 1 -+ 1 -+ 4099 -+ -+ 1 -+ Segger\JL2CM3.dll -+ -+ -+ -+ -+ -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ 1 -+ 0 -+ 1 -+ 1 -+ 0 -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 0 -+ "Cortex-M4" -+ -+ 0 -+ 0 -+ 0 -+ 1 -+ 1 -+ 0 -+ 0 -+ 2 -+ 0 -+ 0 -+ 8 -+ 1 -+ 0 -+ 0 -+ 3 -+ 5 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x20000000 -+ 0x10000 -+ -+ -+ 1 -+ 0x0 -+ 0x80000 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x1f000 -+ 0x61000 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x2000b9c0 -+ 0x4640 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ -+ -+ -+ 1 -+ 4 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ --c99 --reduce_paths -+ BLE_STACK_SUPPORT_REQD BOARD_PCA10040 BSP_DEFINES_ONLY CONFIG_GPIO_AS_PINRESET FLOAT_ABI_HARD HCI_TIMER2 NRF52 NRF52832_XXAA NRF52_PAN_74 NRF_SD_BLE_API_VERSION=3 S132 SER_CONNECTIVITY SOFTDEVICE_PRESENT SWI_DISABLE0 __HEAP_SIZE=512 __STACK_SIZE=2048 -+ -+ ..\..\..\config\ble_connectivity_s132v3_hci_pca10040;..\..\..\config;..\..\..\..\..\..\components;..\..\..\..\..\..\components\ble\ble_dtm;..\..\..\..\..\..\components\ble\common;..\..\..\..\..\..\components\boards;..\..\..\..\..\..\components\libraries\atomic;..\..\..\..\..\..\components\libraries\balloc;..\..\..\..\..\..\components\libraries\bsp;..\..\..\..\..\..\components\libraries\crc16;..\..\..\..\..\..\components\libraries\delay;..\..\..\..\..\..\components\libraries\experimental_log;..\..\..\..\..\..\components\libraries\experimental_log\src;..\..\..\..\..\..\components\libraries\experimental_memobj;..\..\..\..\..\..\components\libraries\experimental_section_vars;..\..\..\..\..\..\components\libraries\queue;..\..\..\..\..\..\components\libraries\scheduler;..\..\..\..\..\..\components\libraries\strerror;..\..\..\..\..\..\components\libraries\timer;..\..\..\..\..\..\components\libraries\util;..\..\..\..\..\..\components\serialization\common;..\..\..\..\..\..\components\serialization\common\struct_ser\ble;..\..\..\..\..\..\components\serialization\common\transport;..\..\..\..\..\..\components\serialization\common\transport\ser_phy;..\..\..\..\..\..\components\serialization\common\transport\ser_phy\config;..\..\..\..\..\..\components\serialization\connectivity;..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware;..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers;..\..\..\..\..\..\components\serialization\connectivity\codecs\common;..\..\..\..\..\..\components\serialization\connectivity\hal;..\..\..\..\..\..\components\softdevice\common;..\..\..\..\..\..\components\softdevice\s132v3\headers;..\..\..\..\..\..\components\softdevice\s132v3\headers\nrf52;..\..\..\..\..\..\external\fprintf;..\..\..\..\..\..\external\segger_rtt;..\..\..\..\..\..\integration\nrfx;..\..\..\..\..\..\integration\nrfx\legacy;..\..\..\..\..\..\modules\nrfx;..\..\..\..\..\..\modules\nrfx\drivers\include;..\..\..\..\..\..\modules\nrfx\hal;..\..\..\..\..\..\modules\nrfx\mdk;..\config -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ --cpreproc_opts=-DBLE_STACK_SUPPORT_REQD,-DBOARD_PCA10040,-DBSP_DEFINES_ONLY,-DCONFIG_GPIO_AS_PINRESET,-DFLOAT_ABI_HARD,-DHCI_TIMER2,-DNRF52,-DNRF52832_XXAA,-DNRF52_PAN_74,-DNRF_SD_BLE_API_VERSION=3,-DS132,-DSER_CONNECTIVITY,-DSOFTDEVICE_PRESENT,-DSWI_DISABLE0,-D__HEAP_SIZE=512,-D__STACK_SIZE=2048 -+ BLE_STACK_SUPPORT_REQD BOARD_PCA10040 BSP_DEFINES_ONLY CONFIG_GPIO_AS_PINRESET FLOAT_ABI_HARD HCI_TIMER2 NRF52 NRF52832_XXAA NRF52_PAN_74 NRF_SD_BLE_API_VERSION=3 S132 SER_CONNECTIVITY SOFTDEVICE_PRESENT SWI_DISABLE0 __HEAP_SIZE=512 __STACK_SIZE=2048 -+ -+ ..\..\..\config\ble_connectivity_s132v3_hci_pca10040;..\..\..\config;..\..\..\..\..\..\components;..\..\..\..\..\..\components\ble\ble_dtm;..\..\..\..\..\..\components\ble\common;..\..\..\..\..\..\components\boards;..\..\..\..\..\..\components\libraries\atomic;..\..\..\..\..\..\components\libraries\balloc;..\..\..\..\..\..\components\libraries\bsp;..\..\..\..\..\..\components\libraries\crc16;..\..\..\..\..\..\components\libraries\delay;..\..\..\..\..\..\components\libraries\experimental_log;..\..\..\..\..\..\components\libraries\experimental_log\src;..\..\..\..\..\..\components\libraries\experimental_memobj;..\..\..\..\..\..\components\libraries\experimental_section_vars;..\..\..\..\..\..\components\libraries\queue;..\..\..\..\..\..\components\libraries\scheduler;..\..\..\..\..\..\components\libraries\strerror;..\..\..\..\..\..\components\libraries\timer;..\..\..\..\..\..\components\libraries\util;..\..\..\..\..\..\components\serialization\common;..\..\..\..\..\..\components\serialization\common\struct_ser\ble;..\..\..\..\..\..\components\serialization\common\transport;..\..\..\..\..\..\components\serialization\common\transport\ser_phy;..\..\..\..\..\..\components\serialization\common\transport\ser_phy\config;..\..\..\..\..\..\components\serialization\connectivity;..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware;..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers;..\..\..\..\..\..\components\serialization\connectivity\codecs\common;..\..\..\..\..\..\components\serialization\connectivity\hal;..\..\..\..\..\..\components\softdevice\common;..\..\..\..\..\..\components\softdevice\s132v3\headers;..\..\..\..\..\..\components\softdevice\s132v3\headers\nrf52;..\..\..\..\..\..\external\fprintf;..\..\..\..\..\..\external\segger_rtt;..\..\..\..\..\..\integration\nrfx;..\..\..\..\..\..\integration\nrfx\legacy;..\..\..\..\..\..\modules\nrfx;..\..\..\..\..\..\modules\nrfx\drivers\include;..\..\..\..\..\..\modules\nrfx\hal;..\..\..\..\..\..\modules\nrfx\mdk;..\config -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0x00000000 -+ 0x00000000 -+ -+ -+ -+ --diag_suppress 6330 -+ -+ -+ -+ -+ -+ -+ None -+ -+ arm_startup_nrf52.s -+ 2 -+ ..\..\..\..\..\..\modules\nrfx\mdk\arm_startup_nrf52.s -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ system_nrf52.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\mdk\system_nrf52.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Application -+ -+ main.c -+ 1 -+ ..\..\..\main.c -+ sdk_config.h -+ 5 -+ ..\config\sdk_config.h -+ -+ Board Definition -+ -+ boards.c -+ 1 -+ ..\..\..\..\..\..\components\boards\boards.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_BLE -+ -+ ble_advdata.c -+ 1 -+ ..\..\..\..\..\..\components\ble\common\ble_advdata.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm.c -+ 1 -+ ..\..\..\..\..\..\components\ble\ble_dtm\ble_dtm.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm_hw_nrf52.c -+ 1 -+ ..\..\..\..\..\..\components\ble\ble_dtm\ble_dtm_hw_nrf52.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_srv_common.c -+ 1 -+ ..\..\..\..\..\..\components\ble\common\ble_srv_common.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Drivers -+ -+ nrf_drv_clock.c -+ 1 -+ ..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_drv_uart.c -+ 1 -+ ..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_clock.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_power_clock.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_power_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_prs.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\prs\nrfx_prs.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_uart.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_uarte.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_uarte.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Libraries -+ -+ app_error.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_error_handler_keil.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error_handler_keil.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_error_weak.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error_weak.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_scheduler.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\scheduler\app_scheduler.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_timer.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\timer\app_timer.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_util_platform.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_util_platform.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ crc16.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\crc16\crc16.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_assert.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\nrf_assert.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_atomic.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\atomic\nrf_atomic.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_balloc.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\balloc\nrf_balloc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_fprintf.c -+ 1 -+ ..\..\..\..\..\..\external\fprintf\nrf_fprintf.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_fprintf_format.c -+ 1 -+ ..\..\..\..\..\..\external\fprintf\nrf_fprintf_format.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_memobj.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_memobj\nrf_memobj.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_queue.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\queue\nrf_queue.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_section_iter.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_section_vars\nrf_section_iter.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_strerror.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\strerror\nrf_strerror.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Log -+ -+ nrf_log_backend_rtt.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_backend_rtt.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_backend_serial.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_backend_serial.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_default_backends.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_default_backends.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_frontend.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_frontend.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_str_formatter.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_str_formatter.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Segger_RTT -+ -+ SEGGER_RTT.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ SEGGER_RTT_Syscalls_KEIL.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT_Syscalls_KEIL.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ SEGGER_RTT_printf.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT_printf.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Serialization -+ -+ ble_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm_init.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\ble_dtm_init.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_event_enc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_event_enc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gap_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gap_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gap_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatt_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gatt_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gattc_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gattc_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gattc_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gatts_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gatts_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gatts_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_l2cap_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_l2cap_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_l2cap_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\ble_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ cond_field_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\cond_field_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_gap_sec_keys.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_gap_sec_keys.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_l2cap_sdu_pool.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_l2cap_sdu_pool.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_user_mem.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_user_mem.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\conn_mw.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gap.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gap.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gattc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gattc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gatts.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gatts.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_l2cap.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_l2cap.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_nrf_soc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\conn_mw_nrf_soc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ dtm_uart.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\hal\dtm_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_soc_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\nrf_soc_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_soc_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\nrf_soc_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_dtm_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_dtm_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_error_handling.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_error_handling.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_event_encoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_event_encoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_handlers.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_handlers.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_pkt_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_pkt_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_reset_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_reset_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_dbg_sd_str.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\ser_dbg_sd_str.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_hal_transport.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_hal_transport.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_phy_hci.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_phy\ser_phy_hci.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_phy_hci_slip.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_phy\ser_phy_hci_slip.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_SoftDevice -+ -+ nrf_sdh.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_sdh_ble.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh_ble.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_sdh_soc.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh_soc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ flash_s132_nrf52_3.0.0_softdevice -+ 0x4 -+ ARM-ADS -+ -+ -+ nRF52832_xxAA -+ Nordic Semiconductor -+ IROM(0x00000000,0x80000) IRAM(0x20000000,0x10000) CPUTYPE("Cortex-M4") FPU2 CLOCK(64000000) ELITTLE -+ -+ -+ UL2CM3(-UM0364FCE -O78 -S0 -C0 -TO18 -TC16000000 -TP21 -TDS800D -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC2000 -FN1 -FF0nRF52xxx -FS00 -FL0200000) -+ 0 -+ core.h -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ -+ ..\..\..\..\..\..\components\softdevice\s132v3\hex\ -+ s132_nrf52_3.0.0_softdevice.hex -+ 1 -+ 0 -+ 1 -+ 1 -+ 1 -+ .\_build\ -+ 1 -+ 0 -+ 0 -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ 0 -+ -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 3 -+ -+ -+ 1 -+ -+ -+ -+ -+ -+ -+ SARMCM3.DLL -+ -MPU -+ TCM.DLL -+ -pCM4 -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 16 -+ -+ -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ -+ -+ 1 -+ 1 -+ 0 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ 0 -+ -+ 0 -+ -1 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Segger\JL2CM3.dll -+ -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 1 -+ 1 -+ 4099 -+ -+ 1 -+ Segger\JL2CM3.dll -+ -+ -+ -+ -+ -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ 1 -+ 0 -+ 1 -+ 1 -+ 0 -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 0 -+ "" -+ -+ 0 -+ 0 -+ 0 -+ 1 -+ 1 -+ 0 -+ 0 -+ 2 -+ 0 -+ 0 -+ 8 -+ 1 -+ 0 -+ 0 -+ 3 -+ 5 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x20000000 -+ 0x10000 -+ -+ -+ 1 -+ 0x0 -+ 0x80000 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x1f000 -+ 0x61000 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x2000b9c0 -+ 0x4640 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ -+ -+ -+ 1 -+ 4 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ --c99 --reduce_paths -+ __HEAP_SIZE=512 __STACK_SIZE=2048 -+ -+ ..\..\..\config\ble_connectivity_s132v3_hci_pca10040;..\..\..\config;..\config -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ --cpreproc_opts=-D__HEAP_SIZE=512,-D__STACK_SIZE=2048 -+ __HEAP_SIZE=512 __STACK_SIZE=2048 -+ -+ ..\..\..\config\ble_connectivity_s132v3_hci_pca10040;..\..\..\config;..\config -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0x00000000 -+ 0x00000000 -+ -+ -+ -+ --diag_suppress 6330 -+ -+ -+ -+ -+ -+ -+ None -+ -+ arm_startup_nrf52.s -+ 2 -+ ..\..\..\..\..\..\modules\nrfx\mdk\arm_startup_nrf52.s -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ system_nrf52.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\mdk\system_nrf52.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Application -+ -+ main.c -+ 1 -+ ..\..\..\main.c -+ sdk_config.h -+ 5 -+ ..\config\sdk_config.h -+ -+ Board Definition -+ -+ boards.c -+ 1 -+ ..\..\..\..\..\..\components\boards\boards.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_BLE -+ -+ ble_advdata.c -+ 1 -+ ..\..\..\..\..\..\components\ble\common\ble_advdata.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm.c -+ 1 -+ ..\..\..\..\..\..\components\ble\ble_dtm\ble_dtm.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm_hw_nrf52.c -+ 1 -+ ..\..\..\..\..\..\components\ble\ble_dtm\ble_dtm_hw_nrf52.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_srv_common.c -+ 1 -+ ..\..\..\..\..\..\components\ble\common\ble_srv_common.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Drivers -+ -+ nrf_drv_clock.c -+ 1 -+ ..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_drv_uart.c -+ 1 -+ ..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_clock.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_power_clock.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_power_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_prs.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\prs\nrfx_prs.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_uart.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_uarte.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_uarte.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Libraries -+ -+ app_error.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_error_handler_keil.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error_handler_keil.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_error_weak.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error_weak.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_scheduler.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\scheduler\app_scheduler.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_timer.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\timer\app_timer.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_util_platform.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_util_platform.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ crc16.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\crc16\crc16.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_assert.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\nrf_assert.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_atomic.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\atomic\nrf_atomic.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_balloc.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\balloc\nrf_balloc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_fprintf.c -+ 1 -+ ..\..\..\..\..\..\external\fprintf\nrf_fprintf.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_fprintf_format.c -+ 1 -+ ..\..\..\..\..\..\external\fprintf\nrf_fprintf_format.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_memobj.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_memobj\nrf_memobj.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_queue.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\queue\nrf_queue.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_section_iter.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_section_vars\nrf_section_iter.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_strerror.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\strerror\nrf_strerror.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Log -+ -+ nrf_log_backend_rtt.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_backend_rtt.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_backend_serial.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_backend_serial.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_default_backends.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_default_backends.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_frontend.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_frontend.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_str_formatter.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_str_formatter.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Segger_RTT -+ -+ SEGGER_RTT.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ SEGGER_RTT_Syscalls_KEIL.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT_Syscalls_KEIL.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ SEGGER_RTT_printf.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT_printf.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Serialization -+ -+ ble_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm_init.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\ble_dtm_init.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_event_enc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_event_enc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gap_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gap_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gap_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatt_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gatt_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gattc_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gattc_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gattc_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gatts_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gatts_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gatts_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_l2cap_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_l2cap_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_l2cap_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\ble_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ cond_field_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\cond_field_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_gap_sec_keys.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_gap_sec_keys.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_l2cap_sdu_pool.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_l2cap_sdu_pool.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_user_mem.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_user_mem.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\conn_mw.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gap.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gap.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gattc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gattc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gatts.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gatts.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_l2cap.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_l2cap.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_nrf_soc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\conn_mw_nrf_soc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ dtm_uart.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\hal\dtm_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_soc_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\nrf_soc_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_soc_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\nrf_soc_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_dtm_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_dtm_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_error_handling.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_error_handling.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_event_encoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_event_encoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_handlers.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_handlers.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_pkt_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_pkt_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_reset_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_reset_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_dbg_sd_str.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\ser_dbg_sd_str.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_hal_transport.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_hal_transport.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_phy_hci.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_phy\ser_phy_hci.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_phy_hci_slip.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_phy\ser_phy_hci_slip.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_SoftDevice -+ -+ nrf_sdh.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_sdh_ble.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh_ble.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_sdh_soc.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh_soc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+
-diff -u -r -N a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/arm5_no_packs/ble_connectivity_s132v3_hci_pca10040.uvoptx b/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/arm5_no_packs/ble_connectivity_s132v3_hci_pca10040.uvoptx ---- a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/arm5_no_packs/ble_connectivity_s132v3_hci_pca10040.uvoptx 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/arm5_no_packs/ble_connectivity_s132v3_hci_pca10040.uvoptx 2018-07-18 17:27:54.000000000 +0200 -@@ -0,0 +1,221 @@ -+ -+ -+ -+ 1.0 -+ -+
### uVision Project, (C) Keil Software
-+ -+ nrf52832_xxaa -+ 0x4 -+ ARM-ADS -+ -+ -+ 1 -+ 1 -+ 0 -+ 1 -+ -+ -+ 1 -+ 65535 -+ 0 -+ 0 -+ 0 -+ -+ -+ 79 -+ 66 -+ 8 -+ .\_build\ -+ -+ 0 -+ -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ 0 -+ 1 -+ 1 -+ 1 -+ 0 -+ 0 -+ 7 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Segger\JL2CM3.dll -+ -+ -+ -+ 0 -+ JL2CM3 -+ -U408001579 -O78 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC2000 -FN2 -FF0nrf52xxx.flm -FS00 -FL0200000 -FP0($$Device:nRF52832_xxAA$Flash\nrf52xxx.flm) -FF1nrf52xxx_uicr -FS110001000 -FL11000 -FP1($$Device:nRF52832_xxAA$Flash\nrf52xxx_uicr.flm) -+ -+ -+ 0 -+ UL2CM3 -+ UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0nrf52xxx -FS00 -FL0200000 -FP0($$Device:nRF52832_xxAA$Flash\nrf52xxx)) -+ -+ -+ -+ -+ 0 -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ -+ -+ -+ -+ flash_s132_nrf52_3.0.0_softdevice -+ 0x4 -+ ARM-ADS -+ -+ -+ 1 -+ 1 -+ 0 -+ 1 -+ -+ -+ 1 -+ 65535 -+ 0 -+ 0 -+ 0 -+ -+ -+ 79 -+ 66 -+ 8 -+ .\_build\ -+ -+ 0 -+ -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ 0 -+ 1 -+ 1 -+ 1 -+ 0 -+ 0 -+ 7 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Segger\JL2CM3.dll -+ -+ -+ -+ 0 -+ JL2CM3 -+ -U408001579 -O78 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC2000 -FN2 -FF0nrf52xxx.flm -FS00 -FL0200000 -FP0($$Device:nRF52832_xxAA$Flash\nrf52xxx.flm) -FF1nrf52xxx_uicr -FS110001000 -FL11000 -FP1($$Device:nRF52832_xxAA$Flash\nrf52xxx_uicr.flm) -+ -+ -+ 0 -+ UL2CM3 -+ UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0nrf52xxx -FS00 -FL0200000 -FP0($$Device:nRF52832_xxAA$Flash\nrf52xxx)) -+ -+ -+ -+ -+ 0 -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ -+ -+ -+
-+ -+ -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/arm5_no_packs/ble_connectivity_s132v3_hci_pca10040.uvprojx b/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/arm5_no_packs/ble_connectivity_s132v3_hci_pca10040.uvprojx ---- a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/arm5_no_packs/ble_connectivity_s132v3_hci_pca10040.uvprojx 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/arm5_no_packs/ble_connectivity_s132v3_hci_pca10040.uvprojx 2018-07-18 17:27:54.000000000 +0200 -@@ -0,0 +1,8031 @@ -+ -+ -+ -+ 2.1 -+ -+
### uVision Project, (C) Keil Software
-+ -+ -+ nrf52832_xxaa -+ 0x4 -+ ARM-ADS -+ -+ nRF52832_xxAA -+ Nordic Semiconductor -+ NordicSemiconductor.nRF_DeviceFamilyPack.8.16.0 -+ http://developer.nordicsemi.com/nRF51_SDK/pieces/nRF_DeviceFamilyPack/ IROM(0x00000000,0x80000) IRAM(0x20000000,0x10000) CPUTYPE("Cortex-M4") FPU2 CLOCK(64000000) ELITTLE -+ -+ -+ -+ 0 -+ $$Device:nRF52832_xxAA$Device\Include\nrf.h -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ..\..\..\..\..\..\modules\nrfx\mdk\nrf52.svd -+ 0 -+ 0 -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ -+ .\_build\ -+ nrf52832_xxaa -+ 1 -+ 0 -+ 1 -+ 1 -+ 1 -+ .\_build\ -+ 1 -+ 0 -+ 0 -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ 0 -+ -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 3 -+ -+ -+ 1 -+ -+ -+ -+ -+ -+ -+ SARMCM3.DLL -+ -MPU -+ TCM.DLL -+ -pCM4 -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 16 -+ -+ -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ -+ -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ 0 -+ 1 1 -+ 0 -+ -1 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Segger\JL2CM3.dll -+ -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 1 -+ 1 -+ 4099 -+ -+ 1 -+ Segger\JL2CM3.dll -+ -+ -+ -+ -+ -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ 1 -+ 0 -+ 1 -+ 1 -+ 0 -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 0 -+ "Cortex-M4" -+ -+ 0 -+ 0 -+ 0 -+ 1 -+ 1 -+ 0 -+ 0 -+ 2 -+ 0 -+ 0 -+ 8 -+ 1 -+ 0 -+ 0 -+ 0 -+ 3 -+ 3 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x20000000 -+ 0x10000 -+ -+ -+ 1 -+ 0x0 -+ 0x80000 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x1f000 -+ 0x61000 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x2000b9c0 -+ 0x4640 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ -+ -+ -+ 1 -+ 4 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ --reduce_paths -+ BLE_STACK_SUPPORT_REQD BOARD_PCA10040 BSP_DEFINES_ONLY CONFIG_GPIO_AS_PINRESET FLOAT_ABI_HARD HCI_TIMER2 NRF52 NRF52832_XXAA NRF52_PAN_74 NRF_SD_BLE_API_VERSION=3 S132 SER_CONNECTIVITY SOFTDEVICE_PRESENT SWI_DISABLE0 __HEAP_SIZE=512 __STACK_SIZE=2048 -+ -+ ..\..\..\config\ble_connectivity_s132v3_hci_pca10040;..\..\..\config;..\..\..\..\..\..\components;..\..\..\..\..\..\components\ble\ble_dtm;..\..\..\..\..\..\components\ble\common;..\..\..\..\..\..\components\boards;..\..\..\..\..\..\components\libraries\atomic;..\..\..\..\..\..\components\libraries\balloc;..\..\..\..\..\..\components\libraries\bsp;..\..\..\..\..\..\components\libraries\crc16;..\..\..\..\..\..\components\libraries\delay;..\..\..\..\..\..\components\libraries\experimental_log;..\..\..\..\..\..\components\libraries\experimental_log\src;..\..\..\..\..\..\components\libraries\experimental_memobj;..\..\..\..\..\..\components\libraries\experimental_section_vars;..\..\..\..\..\..\components\libraries\queue;..\..\..\..\..\..\components\libraries\scheduler;..\..\..\..\..\..\components\libraries\strerror;..\..\..\..\..\..\components\libraries\timer;..\..\..\..\..\..\components\libraries\util;..\..\..\..\..\..\components\serialization\common;..\..\..\..\..\..\components\serialization\common\struct_ser\ble;..\..\..\..\..\..\components\serialization\common\transport;..\..\..\..\..\..\components\serialization\common\transport\ser_phy;..\..\..\..\..\..\components\serialization\common\transport\ser_phy\config;..\..\..\..\..\..\components\serialization\connectivity;..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware;..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers;..\..\..\..\..\..\components\serialization\connectivity\codecs\common;..\..\..\..\..\..\components\serialization\connectivity\hal;..\..\..\..\..\..\components\softdevice\common;..\..\..\..\..\..\components\softdevice\s132v3\headers;..\..\..\..\..\..\components\softdevice\s132v3\headers\nrf52;..\..\..\..\..\..\external\fprintf;..\..\..\..\..\..\external\segger_rtt;..\..\..\..\..\..\integration\nrfx;..\..\..\..\..\..\integration\nrfx\legacy;..\..\..\..\..\..\modules\nrfx;..\..\..\..\..\..\modules\nrfx\drivers\include;..\..\..\..\..\..\modules\nrfx\hal;..\..\..\..\..\..\modules\nrfx\mdk;..\config -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ --cpreproc_opts=-DBLE_STACK_SUPPORT_REQD,-DBOARD_PCA10040,-DBSP_DEFINES_ONLY,-DCONFIG_GPIO_AS_PINRESET,-DFLOAT_ABI_HARD,-DHCI_TIMER2,-DNRF52,-DNRF52832_XXAA,-DNRF52_PAN_74,-DNRF_SD_BLE_API_VERSION=3,-DS132,-DSER_CONNECTIVITY,-DSOFTDEVICE_PRESENT,-DSWI_DISABLE0,-D__HEAP_SIZE=512,-D__STACK_SIZE=2048 -+ BLE_STACK_SUPPORT_REQD BOARD_PCA10040 BSP_DEFINES_ONLY CONFIG_GPIO_AS_PINRESET FLOAT_ABI_HARD HCI_TIMER2 NRF52 NRF52832_XXAA NRF52_PAN_74 NRF_SD_BLE_API_VERSION=3 S132 SER_CONNECTIVITY SOFTDEVICE_PRESENT SWI_DISABLE0 __HEAP_SIZE=512 __STACK_SIZE=2048 -+ -+ ..\..\..\config\ble_connectivity_s132v3_hci_pca10040;..\..\..\config;..\..\..\..\..\..\components;..\..\..\..\..\..\components\ble\ble_dtm;..\..\..\..\..\..\components\ble\common;..\..\..\..\..\..\components\boards;..\..\..\..\..\..\components\libraries\atomic;..\..\..\..\..\..\components\libraries\balloc;..\..\..\..\..\..\components\libraries\bsp;..\..\..\..\..\..\components\libraries\crc16;..\..\..\..\..\..\components\libraries\delay;..\..\..\..\..\..\components\libraries\experimental_log;..\..\..\..\..\..\components\libraries\experimental_log\src;..\..\..\..\..\..\components\libraries\experimental_memobj;..\..\..\..\..\..\components\libraries\experimental_section_vars;..\..\..\..\..\..\components\libraries\queue;..\..\..\..\..\..\components\libraries\scheduler;..\..\..\..\..\..\components\libraries\strerror;..\..\..\..\..\..\components\libraries\timer;..\..\..\..\..\..\components\libraries\util;..\..\..\..\..\..\components\serialization\common;..\..\..\..\..\..\components\serialization\common\struct_ser\ble;..\..\..\..\..\..\components\serialization\common\transport;..\..\..\..\..\..\components\serialization\common\transport\ser_phy;..\..\..\..\..\..\components\serialization\common\transport\ser_phy\config;..\..\..\..\..\..\components\serialization\connectivity;..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware;..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers;..\..\..\..\..\..\components\serialization\connectivity\codecs\common;..\..\..\..\..\..\components\serialization\connectivity\hal;..\..\..\..\..\..\components\softdevice\common;..\..\..\..\..\..\components\softdevice\s132v3\headers;..\..\..\..\..\..\components\softdevice\s132v3\headers\nrf52;..\..\..\..\..\..\external\fprintf;..\..\..\..\..\..\external\segger_rtt;..\..\..\..\..\..\integration\nrfx;..\..\..\..\..\..\integration\nrfx\legacy;..\..\..\..\..\..\modules\nrfx;..\..\..\..\..\..\modules\nrfx\drivers\include;..\..\..\..\..\..\modules\nrfx\hal;..\..\..\..\..\..\modules\nrfx\mdk;..\config -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0x00000000 -+ 0x20000000 -+ -+ -+ -+ -+ --diag_suppress 6330 -+ -+ -+ -+ -+ -+ -+ Application -+ -+ main.c -+ 1 -+ ..\..\..\main.c -+ sdk_config.h -+ 5 -+ ..\config\sdk_config.h -+ -+ Board Definition -+ -+ boards.c -+ 1 -+ ..\..\..\..\..\..\components\boards\boards.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_BLE -+ -+ ble_advdata.c -+ 1 -+ ..\..\..\..\..\..\components\ble\common\ble_advdata.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm.c -+ 1 -+ ..\..\..\..\..\..\components\ble\ble_dtm\ble_dtm.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm_hw_nrf52.c -+ 1 -+ ..\..\..\..\..\..\components\ble\ble_dtm\ble_dtm_hw_nrf52.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_srv_common.c -+ 1 -+ ..\..\..\..\..\..\components\ble\common\ble_srv_common.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Drivers -+ -+ nrf_drv_clock.c -+ 1 -+ ..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_drv_uart.c -+ 1 -+ ..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_clock.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_power_clock.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_power_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_prs.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\prs\nrfx_prs.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_uart.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_uarte.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_uarte.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Libraries -+ -+ app_error.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_error_handler_keil.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error_handler_keil.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_error_weak.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error_weak.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_scheduler.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\scheduler\app_scheduler.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_timer.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\timer\app_timer.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_util_platform.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_util_platform.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ crc16.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\crc16\crc16.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_assert.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\nrf_assert.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_atomic.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\atomic\nrf_atomic.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_balloc.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\balloc\nrf_balloc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_fprintf.c -+ 1 -+ ..\..\..\..\..\..\external\fprintf\nrf_fprintf.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_fprintf_format.c -+ 1 -+ ..\..\..\..\..\..\external\fprintf\nrf_fprintf_format.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_memobj.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_memobj\nrf_memobj.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_queue.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\queue\nrf_queue.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_section_iter.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_section_vars\nrf_section_iter.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_strerror.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\strerror\nrf_strerror.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Log -+ -+ nrf_log_backend_rtt.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_backend_rtt.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_backend_serial.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_backend_serial.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_default_backends.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_default_backends.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_frontend.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_frontend.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_str_formatter.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_str_formatter.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Segger_RTT -+ -+ SEGGER_RTT.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ SEGGER_RTT_Syscalls_KEIL.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT_Syscalls_KEIL.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ SEGGER_RTT_printf.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT_printf.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Serialization -+ -+ ble_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm_init.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\ble_dtm_init.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_event_enc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_event_enc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gap_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gap_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gap_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatt_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gatt_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gattc_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gattc_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gattc_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gatts_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gatts_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gatts_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_l2cap_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_l2cap_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_l2cap_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\ble_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ cond_field_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\cond_field_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_gap_sec_keys.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_gap_sec_keys.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_l2cap_sdu_pool.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_l2cap_sdu_pool.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_user_mem.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_user_mem.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\conn_mw.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gap.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gap.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gattc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gattc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gatts.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gatts.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_l2cap.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_l2cap.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_nrf_soc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\conn_mw_nrf_soc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ dtm_uart.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\hal\dtm_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_soc_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\nrf_soc_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_soc_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\nrf_soc_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_dtm_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_dtm_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_error_handling.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_error_handling.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_event_encoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_event_encoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_handlers.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_handlers.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_pkt_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_pkt_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_reset_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_reset_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_dbg_sd_str.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\ser_dbg_sd_str.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_hal_transport.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_hal_transport.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_phy_hci.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_phy\ser_phy_hci.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_phy_hci_slip.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_phy\ser_phy_hci_slip.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_SoftDevice -+ -+ nrf_sdh.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_sdh_ble.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh_ble.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_sdh_soc.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh_soc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ flash_s132_nrf52_3.0.0_softdevice -+ 0x4 -+ ARM-ADS -+ -+ nRF52832_xxAA -+ Nordic Semiconductor -+ .. -+ IROM(0x00000000,0x80000) IRAM(0x20000000,0x10000) CPUTYPE("Cortex-M4") FPU2 CLOCK(64000000) ELITTLE -+ -+ -+ -+ 0 -+ $$Device:nRF52832_xxAA$Device\Include\nrf.h -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ -+ ..\..\..\..\..\..\components\softdevice\s132v3\hex\ -+ s132_nrf52_3.0.0_softdevice.hex -+ 1 -+ 0 -+ 1 -+ 1 -+ 1 -+ .\_build\ -+ 1 -+ 0 -+ 0 -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ -+ 1 -+ 0 -+ attrib +R $H\* -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ 0 -+ -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 3 -+ -+ -+ 1 -+ -+ -+ -+ -+ -+ -+ SARMCM3.DLL -+ -MPU -+ TCM.DLL -+ -pCM4 -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 16 -+ -+ -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ -+ -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ 0 -+ 1 1 -+ 0 -+ -1 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Segger\JL2CM3.dll -+ -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 1 -+ 1 -+ 4099 -+ -+ 1 -+ Segger\JL2CM3.dll -+ -+ -+ -+ -+ -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ 1 -+ 0 -+ 1 -+ 1 -+ 0 -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 0 -+ "" -+ -+ 0 -+ 0 -+ 0 -+ 1 -+ 1 -+ 0 -+ 0 -+ 2 -+ 0 -+ 0 -+ 8 -+ 1 -+ 0 -+ 0 -+ 0 -+ 3 -+ 3 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x20000000 -+ 0x10000 -+ -+ -+ 1 -+ 0x0 -+ 0x80000 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x1f000 -+ 0x61000 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x2000b9c0 -+ 0x4640 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ -+ -+ -+ 1 -+ 4 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ --reduce_paths -+ __HEAP_SIZE=512 __STACK_SIZE=2048 -+ -+ ..\..\..\config\ble_connectivity_s132v3_hci_pca10040;..\..\..\config;..\config -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ --cpreproc_opts=-D__HEAP_SIZE=512,-D__STACK_SIZE=2048 -+ __HEAP_SIZE=512 __STACK_SIZE=2048 -+ -+ ..\..\..\config\ble_connectivity_s132v3_hci_pca10040;..\..\..\config;..\config -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0x00000000 -+ 0x20000000 -+ -+ -+ -+ -+ --diag_suppress 6330 -+ -+ -+ -+ -+ -+ -+ Application -+ -+ main.c -+ 1 -+ ..\..\..\main.c -+ sdk_config.h -+ 5 -+ ..\config\sdk_config.h -+ -+ Board Definition -+ -+ boards.c -+ 1 -+ ..\..\..\..\..\..\components\boards\boards.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_BLE -+ -+ ble_advdata.c -+ 1 -+ ..\..\..\..\..\..\components\ble\common\ble_advdata.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm.c -+ 1 -+ ..\..\..\..\..\..\components\ble\ble_dtm\ble_dtm.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm_hw_nrf52.c -+ 1 -+ ..\..\..\..\..\..\components\ble\ble_dtm\ble_dtm_hw_nrf52.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_srv_common.c -+ 1 -+ ..\..\..\..\..\..\components\ble\common\ble_srv_common.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Drivers -+ -+ nrf_drv_clock.c -+ 1 -+ ..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_drv_uart.c -+ 1 -+ ..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_clock.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_power_clock.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_power_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_prs.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\prs\nrfx_prs.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_uart.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_uarte.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_uarte.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Libraries -+ -+ app_error.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_error_handler_keil.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error_handler_keil.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_error_weak.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error_weak.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_scheduler.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\scheduler\app_scheduler.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_timer.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\timer\app_timer.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_util_platform.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_util_platform.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ crc16.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\crc16\crc16.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_assert.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\nrf_assert.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_atomic.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\atomic\nrf_atomic.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_balloc.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\balloc\nrf_balloc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_fprintf.c -+ 1 -+ ..\..\..\..\..\..\external\fprintf\nrf_fprintf.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_fprintf_format.c -+ 1 -+ ..\..\..\..\..\..\external\fprintf\nrf_fprintf_format.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_memobj.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_memobj\nrf_memobj.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_queue.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\queue\nrf_queue.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_section_iter.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_section_vars\nrf_section_iter.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_strerror.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\strerror\nrf_strerror.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Log -+ -+ nrf_log_backend_rtt.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_backend_rtt.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_backend_serial.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_backend_serial.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_default_backends.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_default_backends.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_frontend.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_frontend.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_str_formatter.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_str_formatter.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Segger_RTT -+ -+ SEGGER_RTT.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ SEGGER_RTT_Syscalls_KEIL.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT_Syscalls_KEIL.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ SEGGER_RTT_printf.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT_printf.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Serialization -+ -+ ble_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm_init.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\ble_dtm_init.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_event_enc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_event_enc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gap_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gap_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gap_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatt_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gatt_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gattc_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gattc_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gattc_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gatts_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gatts_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gatts_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_l2cap_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_l2cap_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_l2cap_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\ble_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ cond_field_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\cond_field_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_gap_sec_keys.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_gap_sec_keys.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_l2cap_sdu_pool.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_l2cap_sdu_pool.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_user_mem.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_user_mem.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\conn_mw.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gap.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gap.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gattc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gattc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gatts.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gatts.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_l2cap.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_l2cap.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_nrf_soc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\conn_mw_nrf_soc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ dtm_uart.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\hal\dtm_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_soc_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\nrf_soc_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_soc_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\nrf_soc_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_dtm_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_dtm_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_error_handling.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_error_handling.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_event_encoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_event_encoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_handlers.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_handlers.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_pkt_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_pkt_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_reset_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_reset_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_dbg_sd_str.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\ser_dbg_sd_str.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_hal_transport.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_hal_transport.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_phy_hci.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_phy\ser_phy_hci.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_phy_hci_slip.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_phy\ser_phy_hci_slip.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_SoftDevice -+ -+ nrf_sdh.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_sdh_ble.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh_ble.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_sdh_soc.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh_soc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+
-diff -u -r -N a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/ble_connectivity_gcc_nrf52.ld b/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/ble_connectivity_gcc_nrf52.ld ---- a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/ble_connectivity_gcc_nrf52.ld 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/ble_connectivity_gcc_nrf52.ld 2018-07-18 17:27:44.000000000 +0200 -@@ -0,0 +1,94 @@ -+/* Linker script to configure memory regions. */ -+ -+SEARCH_DIR(.) -+GROUP(-lgcc -lc -lnosys) -+ -+MEMORY -+{ -+ FLASH (rx) : ORIGIN = 0x1f000, LENGTH = 0x61000 -+ RAM (rwx) : ORIGIN = 0x2000b9c0, LENGTH = 0x4640 -+ connectivity_version_info (r) : ORIGIN = 0x30000, LENGTH = 0x18 -+} -+ -+SECTIONS -+{ -+ .connectivity_version_info : -+ { -+ PROVIDE(__start_connectivity_version_info = .); -+ KEEP(*(SORT(.connectivity_version_info*))) -+ PROVIDE(__stop_connectivity_version_info = .); -+ } > connectivity_version_info -+} -+ -+SECTIONS -+{ -+ . = ALIGN(4); -+ .mem_section_dummy_ram : -+ { -+ } -+ .log_dynamic_data : -+ { -+ PROVIDE(__start_log_dynamic_data = .); -+ KEEP(*(SORT(.log_dynamic_data*))) -+ PROVIDE(__stop_log_dynamic_data = .); -+ } > RAM -+ -+} INSERT AFTER .data; -+ -+SECTIONS -+{ -+ .mem_section_dummy_rom : -+ { -+ } -+ .log_const_data : -+ { -+ PROVIDE(__start_log_const_data = .); -+ KEEP(*(SORT(.log_const_data*))) -+ PROVIDE(__stop_log_const_data = .); -+ } > FLASH -+ .sdh_ble_observers : -+ { -+ PROVIDE(__start_sdh_ble_observers = .); -+ KEEP(*(SORT(.sdh_ble_observers*))) -+ PROVIDE(__stop_sdh_ble_observers = .); -+ } > FLASH -+ .sdh_soc_observers : -+ { -+ PROVIDE(__start_sdh_soc_observers = .); -+ KEEP(*(SORT(.sdh_soc_observers*))) -+ PROVIDE(__stop_sdh_soc_observers = .); -+ } > FLASH -+ .nrf_queue : -+ { -+ PROVIDE(__start_nrf_queue = .); -+ KEEP(*(.nrf_queue)) -+ PROVIDE(__stop_nrf_queue = .); -+ } > FLASH -+ .nrf_balloc : -+ { -+ PROVIDE(__start_nrf_balloc = .); -+ KEEP(*(.nrf_balloc)) -+ PROVIDE(__stop_nrf_balloc = .); -+ } > FLASH -+ .sdh_stack_observers : -+ { -+ PROVIDE(__start_sdh_stack_observers = .); -+ KEEP(*(SORT(.sdh_stack_observers*))) -+ PROVIDE(__stop_sdh_stack_observers = .); -+ } > FLASH -+ .sdh_req_observers : -+ { -+ PROVIDE(__start_sdh_req_observers = .); -+ KEEP(*(SORT(.sdh_req_observers*))) -+ PROVIDE(__stop_sdh_req_observers = .); -+ } > FLASH -+ .sdh_state_observers : -+ { -+ PROVIDE(__start_sdh_state_observers = .); -+ KEEP(*(SORT(.sdh_state_observers*))) -+ PROVIDE(__stop_sdh_state_observers = .); -+ } > FLASH -+ -+} INSERT AFTER .text -+ -+INCLUDE "nrf_common.ld" -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/Makefile b/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/Makefile ---- a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/Makefile 2018-07-18 17:27:44.000000000 +0200 -@@ -0,0 +1,259 @@ -+PROJECT_NAME := ble_connectivity_s132v3_hci_pca10040 -+TARGETS := nrf52832_xxaa -+OUTPUT_DIRECTORY := _build -+ -+SDK_ROOT := ../../../../../.. -+PROJ_DIR := ../../.. -+ -+$(OUTPUT_DIRECTORY)/nrf52832_xxaa.out: \ -+ LINKER_SCRIPT := ble_connectivity_gcc_nrf52.ld -+ -+# Source files common to all targets -+SRC_FILES += \ -+ $(SDK_ROOT)/modules/nrfx/mdk/gcc_startup_nrf52.S \ -+ $(SDK_ROOT)/components/libraries/experimental_log/src/nrf_log_backend_rtt.c \ -+ $(SDK_ROOT)/components/libraries/experimental_log/src/nrf_log_backend_serial.c \ -+ $(SDK_ROOT)/components/libraries/experimental_log/src/nrf_log_default_backends.c \ -+ $(SDK_ROOT)/components/libraries/experimental_log/src/nrf_log_frontend.c \ -+ $(SDK_ROOT)/components/libraries/experimental_log/src/nrf_log_str_formatter.c \ -+ $(SDK_ROOT)/components/libraries/util/app_error.c \ -+ $(SDK_ROOT)/components/libraries/util/app_error_handler_gcc.c \ -+ $(SDK_ROOT)/components/libraries/util/app_error_weak.c \ -+ $(SDK_ROOT)/components/libraries/scheduler/app_scheduler.c \ -+ $(SDK_ROOT)/components/libraries/timer/app_timer.c \ -+ $(SDK_ROOT)/components/libraries/util/app_util_platform.c \ -+ $(SDK_ROOT)/components/libraries/crc16/crc16.c \ -+ $(SDK_ROOT)/components/libraries/util/nrf_assert.c \ -+ $(SDK_ROOT)/components/libraries/atomic/nrf_atomic.c \ -+ $(SDK_ROOT)/components/libraries/balloc/nrf_balloc.c \ -+ $(SDK_ROOT)/external/fprintf/nrf_fprintf.c \ -+ $(SDK_ROOT)/external/fprintf/nrf_fprintf_format.c \ -+ $(SDK_ROOT)/components/libraries/experimental_memobj/nrf_memobj.c \ -+ $(SDK_ROOT)/components/libraries/queue/nrf_queue.c \ -+ $(SDK_ROOT)/components/libraries/experimental_section_vars/nrf_section_iter.c \ -+ $(SDK_ROOT)/components/libraries/strerror/nrf_strerror.c \ -+ $(SDK_ROOT)/modules/nrfx/mdk/system_nrf52.c \ -+ $(SDK_ROOT)/components/boards/boards.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_conn.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/common/ble_dtm_init.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_event_enc.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_evt_conn.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gap_evt_conn.c \ -+ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c \ -+ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_gatt_struct_serialization.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gattc_conn.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gattc_evt_conn.c \ -+ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_gattc_struct_serialization.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gatts_conn.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gatts_evt_conn.c \ -+ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_gatts_struct_serialization.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_l2cap_conn.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_l2cap_evt_conn.c \ -+ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_l2cap_struct_serialization.c \ -+ $(SDK_ROOT)/components/serialization/common/ble_serialization.c \ -+ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_struct_serialization.c \ -+ $(SDK_ROOT)/components/serialization/common/cond_field_serialization.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/conn_ble_l2cap_sdu_pool.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/common/conn_mw.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gap.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gattc.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gatts.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_l2cap.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/common/conn_mw_nrf_soc.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/hal/dtm_uart.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/nrf_soc_conn.c \ -+ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/nrf_soc_struct_serialization.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_cmd_decoder.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_dtm_cmd_decoder.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_error_handling.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_event_encoder.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_handlers.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_pkt_decoder.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_reset_cmd_decoder.c \ -+ $(SDK_ROOT)/components/serialization/common/ser_dbg_sd_str.c \ -+ $(SDK_ROOT)/components/serialization/common/transport/ser_hal_transport.c \ -+ $(SDK_ROOT)/components/serialization/common/transport/ser_phy/ser_phy_hci.c \ -+ $(SDK_ROOT)/components/serialization/common/transport/ser_phy/ser_phy_hci_slip.c \ -+ $(SDK_ROOT)/integration/nrfx/legacy/nrf_drv_clock.c \ -+ $(SDK_ROOT)/integration/nrfx/legacy/nrf_drv_uart.c \ -+ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_clock.c \ -+ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power_clock.c \ -+ $(SDK_ROOT)/modules/nrfx/drivers/src/prs/nrfx_prs.c \ -+ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uart.c \ -+ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uarte.c \ -+ $(PROJ_DIR)/main.c \ -+ $(SDK_ROOT)/external/segger_rtt/SEGGER_RTT.c \ -+ $(SDK_ROOT)/external/segger_rtt/SEGGER_RTT_Syscalls_GCC.c \ -+ $(SDK_ROOT)/external/segger_rtt/SEGGER_RTT_printf.c \ -+ $(SDK_ROOT)/components/ble/common/ble_advdata.c \ -+ $(SDK_ROOT)/components/ble/ble_dtm/ble_dtm.c \ -+ $(SDK_ROOT)/components/ble/ble_dtm/ble_dtm_hw_nrf52.c \ -+ $(SDK_ROOT)/components/ble/common/ble_srv_common.c \ -+ $(SDK_ROOT)/components/softdevice/common/nrf_sdh.c \ -+ $(SDK_ROOT)/components/softdevice/common/nrf_sdh_ble.c \ -+ $(SDK_ROOT)/components/softdevice/common/nrf_sdh_soc.c \ -+ -+# Include folders common to all targets -+INC_FOLDERS += \ -+ $(SDK_ROOT)/components \ -+ $(SDK_ROOT)/components/serialization/connectivity/hal \ -+ $(SDK_ROOT)/modules/nrfx/mdk \ -+ $(SDK_ROOT)/components/libraries/scheduler \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers \ -+ $(SDK_ROOT)/components/libraries/experimental_log \ -+ $(SDK_ROOT)/components/toolchain/cmsis/include \ -+ $(SDK_ROOT)/components/libraries/queue \ -+ $(SDK_ROOT)/components/libraries/timer \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/common \ -+ $(SDK_ROOT)/components/serialization/connectivity \ -+ $(SDK_ROOT)/components/libraries/strerror \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware \ -+ $(SDK_ROOT)/components/libraries/crc16 \ -+ $(SDK_ROOT)/components/ble/ble_dtm \ -+ $(SDK_ROOT)/components/serialization/common \ -+ $(SDK_ROOT)/components/libraries/util \ -+ ../config \ -+ $(SDK_ROOT)/components/ble/common \ -+ $(SDK_ROOT)/integration/nrfx \ -+ $(SDK_ROOT)/components/libraries/balloc \ -+ $(SDK_ROOT)/modules/nrfx/hal \ -+ $(SDK_ROOT)/components/libraries/bsp \ -+ $(SDK_ROOT)/components/softdevice/s132v3/headers/nrf52 \ -+ $(SDK_ROOT)/modules/nrfx \ -+ $(SDK_ROOT)/components/libraries/experimental_section_vars \ -+ $(SDK_ROOT)/integration/nrfx/legacy \ -+ $(SDK_ROOT)/components/serialization/common/transport/ser_phy \ -+ $(SDK_ROOT)/components/libraries/experimental_log/src \ -+ $(SDK_ROOT)/components/libraries/delay \ -+ $(SDK_ROOT)/external/segger_rtt \ -+ $(SDK_ROOT)/components/libraries/atomic \ -+ $(SDK_ROOT)/components/boards \ -+ $(SDK_ROOT)/components/libraries/experimental_memobj \ -+ $(SDK_ROOT)/components/serialization/common/struct_ser/ble \ -+ $(SDK_ROOT)/components/softdevice/s132v3/headers \ -+ $(SDK_ROOT)/components/serialization/common/transport \ -+ $(SDK_ROOT)/components/softdevice/common \ -+ $(SDK_ROOT)/components/serialization/common/transport/ser_phy/config \ -+ $(SDK_ROOT)/modules/nrfx/drivers/include \ -+ $(SDK_ROOT)/external/fprintf \ -+ -+# Libraries common to all targets -+LIB_FILES += \ -+ -+# Optimization flags -+OPT = -Os -g3 -+# Uncomment the line below to enable link time optimization -+#OPT += -flto -+ -+# C flags common to all targets -+CFLAGS += $(OPT) -+CFLAGS += -DBLE_STACK_SUPPORT_REQD -+CFLAGS += -DBOARD_PCA10040 -+CFLAGS += -DBSP_DEFINES_ONLY -+CFLAGS += -DCONFIG_GPIO_AS_PINRESET -+CFLAGS += -DFLOAT_ABI_HARD -+CFLAGS += -DHCI_TIMER2 -+CFLAGS += -DNRF52 -+CFLAGS += -DNRF52832_XXAA -+CFLAGS += -DNRF52_PAN_74 -+CFLAGS += -DNRF_SD_BLE_API_VERSION=3 -+CFLAGS += -DS132 -+CFLAGS += -DSER_CONNECTIVITY -+CFLAGS += -DSOFTDEVICE_PRESENT -+CFLAGS += -DSWI_DISABLE0 -+CFLAGS += -mcpu=cortex-m4 -+CFLAGS += -mthumb -mabi=aapcs -+CFLAGS += -Wall -Werror -+CFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16 -+# keep every function in a separate section, this allows linker to discard unused ones -+CFLAGS += -ffunction-sections -fdata-sections -fno-strict-aliasing -+CFLAGS += -fno-builtin -fshort-enums -+ -+# C++ flags common to all targets -+CXXFLAGS += $(OPT) -+ -+# Assembler flags common to all targets -+ASMFLAGS += -g3 -+ASMFLAGS += -mcpu=cortex-m4 -+ASMFLAGS += -mthumb -mabi=aapcs -+ASMFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16 -+ASMFLAGS += -DBLE_STACK_SUPPORT_REQD -+ASMFLAGS += -DBOARD_PCA10040 -+ASMFLAGS += -DBSP_DEFINES_ONLY -+ASMFLAGS += -DCONFIG_GPIO_AS_PINRESET -+ASMFLAGS += -DFLOAT_ABI_HARD -+ASMFLAGS += -DHCI_TIMER2 -+ASMFLAGS += -DNRF52 -+ASMFLAGS += -DNRF52832_XXAA -+ASMFLAGS += -DNRF52_PAN_74 -+ASMFLAGS += -DNRF_SD_BLE_API_VERSION=3 -+ASMFLAGS += -DS132 -+ASMFLAGS += -DSER_CONNECTIVITY -+ASMFLAGS += -DSOFTDEVICE_PRESENT -+ASMFLAGS += -DSWI_DISABLE0 -+ -+# Linker flags -+LDFLAGS += $(OPT) -+LDFLAGS += -mthumb -mabi=aapcs -L$(SDK_ROOT)/modules/nrfx/mdk -T$(LINKER_SCRIPT) -+LDFLAGS += -mcpu=cortex-m4 -+LDFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16 -+# let linker dump unused sections -+LDFLAGS += -Wl,--gc-sections -+# use newlib in nano version -+LDFLAGS += --specs=nano.specs -+ -+nrf52832_xxaa: CFLAGS += -D__HEAP_SIZE=512 -+nrf52832_xxaa: CFLAGS += -D__STACK_SIZE=2048 -+nrf52832_xxaa: ASMFLAGS += -D__HEAP_SIZE=512 -+nrf52832_xxaa: ASMFLAGS += -D__STACK_SIZE=2048 -+ -+# Add standard libraries at the very end of the linker input, after all objects -+# that may need symbols provided by these libraries. -+LIB_FILES += -lc -lnosys -lm -+ -+ -+.PHONY: default help -+ -+# Default target - first one defined -+default: nrf52832_xxaa -+ -+# Print all targets that can be built -+help: -+ @echo following targets are available: -+ @echo nrf52832_xxaa -+ @echo flash_softdevice -+ @echo sdk_config - starting external tool for editing sdk_config.h -+ @echo flash - flashing binary -+ -+TEMPLATE_PATH := $(SDK_ROOT)/components/toolchain/gcc -+ -+ -+include $(TEMPLATE_PATH)/Makefile.common -+ -+$(foreach target, $(TARGETS), $(call define_target, $(target))) -+ -+.PHONY: flash flash_softdevice erase -+ -+# Flash the program -+flash: $(OUTPUT_DIRECTORY)/nrf52832_xxaa.hex -+ @echo Flashing: $< -+ nrfjprog -f nrf52 --program $< --sectorerase -+ nrfjprog -f nrf52 --reset -+ -+# Flash softdevice -+flash_softdevice: -+ @echo Flashing: s132_nrf52_3.0.0_softdevice.hex -+ nrfjprog -f nrf52 --program $(SDK_ROOT)/components/softdevice/s132v3/hex/s132_nrf52_3.0.0_softdevice.hex --sectorerase -+ nrfjprog -f nrf52 --reset -+ -+erase: -+ nrfjprog -f nrf52 --eraseall -+ -+SDK_CONFIG_FILE := ../config/sdk_config.h -+CMSIS_CONFIG_TOOL := $(SDK_ROOT)/external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar -+sdk_config: -+ java -jar $(CMSIS_CONFIG_TOOL) $(SDK_CONFIG_FILE) -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/config/sdk_config.h b/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/config/sdk_config.h ---- a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/config/sdk_config.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/config/sdk_config.h 2018-07-18 17:42:30.000000000 +0200 -@@ -0,0 +1,4130 @@ -+/** -+ * Copyright (c) 2017 - 2018, Nordic Semiconductor ASA -+ * -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form, except as embedded into a Nordic -+ * Semiconductor ASA integrated circuit in a product or a software update for -+ * such product, must reproduce the above copyright notice, this list of -+ * conditions and the following disclaimer in the documentation and/or other -+ * materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its -+ * contributors may be used to endorse or promote products derived from this -+ * software without specific prior written permission. -+ * -+ * 4. This software, with or without modification, must only be used with a -+ * Nordic Semiconductor ASA integrated circuit. -+ * -+ * 5. Any software provided in binary form under this license must not be reverse -+ * engineered, decompiled, modified and/or disassembled. -+ * -+ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -+ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ * -+ */ -+ -+ -+ -+#ifndef SDK_CONFIG_H -+#define SDK_CONFIG_H -+// <<< Use Configuration Wizard in Context Menu >>>\n -+#ifdef USE_APP_CONFIG -+#include "app_config.h" -+#endif -+// nRF_BLE -+ -+//========================================================== -+// BLE_DTM_ENABLED - ble_dtm - Module for testing RF/PHY using DTM commands -+ -+ -+#ifndef BLE_DTM_ENABLED -+#define BLE_DTM_ENABLED 1 -+#endif -+ -+// -+//========================================================== -+ -+// nRF_Drivers -+ -+//========================================================== -+// CLOCK_ENABLED - nrf_drv_clock - CLOCK peripheral driver - legacy layer -+//========================================================== -+#ifndef CLOCK_ENABLED -+#define CLOCK_ENABLED 1 -+#endif -+// CLOCK_CONFIG_LF_SRC - LF Clock Source -+ -+// <0=> RC -+// <1=> XTAL -+// <2=> Synth -+ -+#ifndef CLOCK_CONFIG_LF_SRC -+#define CLOCK_CONFIG_LF_SRC 1 -+#endif -+ -+// CLOCK_CONFIG_IRQ_PRIORITY - Interrupt priority -+ -+ -+// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -+// <0=> 0 (highest) -+// <1=> 1 -+// <2=> 2 -+// <3=> 3 -+// <4=> 4 -+// <5=> 5 -+// <6=> 6 -+// <7=> 7 -+ -+#ifndef CLOCK_CONFIG_IRQ_PRIORITY -+#define CLOCK_CONFIG_IRQ_PRIORITY 7 -+#endif -+ -+// -+ -+// NRFX_CLOCK_ENABLED - nrfx_clock - CLOCK peripheral driver -+//========================================================== -+#ifndef NRFX_CLOCK_ENABLED -+#define NRFX_CLOCK_ENABLED 1 -+#endif -+// NRFX_CLOCK_CONFIG_LF_SRC - LF Clock Source -+ -+// <0=> RC -+// <1=> XTAL -+// <2=> Synth -+ -+#ifndef NRFX_CLOCK_CONFIG_LF_SRC -+#define NRFX_CLOCK_CONFIG_LF_SRC 1 -+#endif -+ -+// NRFX_CLOCK_CONFIG_IRQ_PRIORITY - Interrupt priority -+ -+// <0=> 0 (highest) -+// <1=> 1 -+// <2=> 2 -+// <3=> 3 -+// <4=> 4 -+// <5=> 5 -+// <6=> 6 -+// <7=> 7 -+ -+#ifndef NRFX_CLOCK_CONFIG_IRQ_PRIORITY -+#define NRFX_CLOCK_CONFIG_IRQ_PRIORITY 7 -+#endif -+ -+// NRFX_CLOCK_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRFX_CLOCK_CONFIG_LOG_ENABLED -+#define NRFX_CLOCK_CONFIG_LOG_ENABLED 0 -+#endif -+// NRFX_CLOCK_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRFX_CLOCK_CONFIG_LOG_LEVEL -+#define NRFX_CLOCK_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRFX_CLOCK_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRFX_CLOCK_CONFIG_INFO_COLOR -+#define NRFX_CLOCK_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRFX_CLOCK_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRFX_CLOCK_CONFIG_DEBUG_COLOR -+#define NRFX_CLOCK_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// -+ -+// NRFX_PRS_ENABLED - nrfx_prs - Peripheral Resource Sharing module -+//========================================================== -+#ifndef NRFX_PRS_ENABLED -+#define NRFX_PRS_ENABLED 1 -+#endif -+// NRFX_PRS_BOX_0_ENABLED - Enables box 0 in the module. -+ -+ -+#ifndef NRFX_PRS_BOX_0_ENABLED -+#define NRFX_PRS_BOX_0_ENABLED 0 -+#endif -+ -+// NRFX_PRS_BOX_1_ENABLED - Enables box 1 in the module. -+ -+ -+#ifndef NRFX_PRS_BOX_1_ENABLED -+#define NRFX_PRS_BOX_1_ENABLED 0 -+#endif -+ -+// NRFX_PRS_BOX_2_ENABLED - Enables box 2 in the module. -+ -+ -+#ifndef NRFX_PRS_BOX_2_ENABLED -+#define NRFX_PRS_BOX_2_ENABLED 0 -+#endif -+ -+// NRFX_PRS_BOX_3_ENABLED - Enables box 3 in the module. -+ -+ -+#ifndef NRFX_PRS_BOX_3_ENABLED -+#define NRFX_PRS_BOX_3_ENABLED 0 -+#endif -+ -+// NRFX_PRS_BOX_4_ENABLED - Enables box 4 in the module. -+ -+ -+#ifndef NRFX_PRS_BOX_4_ENABLED -+#define NRFX_PRS_BOX_4_ENABLED 1 -+#endif -+ -+// NRFX_PRS_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRFX_PRS_CONFIG_LOG_ENABLED -+#define NRFX_PRS_CONFIG_LOG_ENABLED 0 -+#endif -+// NRFX_PRS_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRFX_PRS_CONFIG_LOG_LEVEL -+#define NRFX_PRS_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRFX_PRS_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRFX_PRS_CONFIG_INFO_COLOR -+#define NRFX_PRS_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRFX_PRS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRFX_PRS_CONFIG_DEBUG_COLOR -+#define NRFX_PRS_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// -+ -+// NRFX_UARTE_ENABLED - nrfx_uarte - UARTE peripheral driver -+//========================================================== -+#ifndef NRFX_UARTE_ENABLED -+#define NRFX_UARTE_ENABLED 1 -+#endif -+// NRFX_UARTE0_ENABLED - Enable UARTE0 instance -+#ifndef NRFX_UARTE0_ENABLED -+#define NRFX_UARTE0_ENABLED 0 -+#endif -+ -+// NRFX_UARTE_DEFAULT_CONFIG_HWFC - Hardware Flow Control -+ -+// <0=> Disabled -+// <1=> Enabled -+ -+#ifndef NRFX_UARTE_DEFAULT_CONFIG_HWFC -+#define NRFX_UARTE_DEFAULT_CONFIG_HWFC 0 -+#endif -+ -+// NRFX_UARTE_DEFAULT_CONFIG_PARITY - Parity -+ -+// <0=> Excluded -+// <14=> Included -+ -+#ifndef NRFX_UARTE_DEFAULT_CONFIG_PARITY -+#define NRFX_UARTE_DEFAULT_CONFIG_PARITY 0 -+#endif -+ -+// NRFX_UARTE_DEFAULT_CONFIG_BAUDRATE - Default Baudrate -+ -+// <323584=> 1200 baud -+// <643072=> 2400 baud -+// <1290240=> 4800 baud -+// <2576384=> 9600 baud -+// <3862528=> 14400 baud -+// <5152768=> 19200 baud -+// <7716864=> 28800 baud -+// <8388608=> 31250 baud -+// <10289152=> 38400 baud -+// <15007744=> 56000 baud -+// <15400960=> 57600 baud -+// <20615168=> 76800 baud -+// <30801920=> 115200 baud -+// <61865984=> 230400 baud -+// <67108864=> 250000 baud -+// <121634816=> 460800 baud -+// <251658240=> 921600 baud -+// <268435456=> 1000000 baud -+ -+#ifndef NRFX_UARTE_DEFAULT_CONFIG_BAUDRATE -+#define NRFX_UARTE_DEFAULT_CONFIG_BAUDRATE 30801920 -+#endif -+ -+// NRFX_UARTE_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority -+ -+// <0=> 0 (highest) -+// <1=> 1 -+// <2=> 2 -+// <3=> 3 -+// <4=> 4 -+// <5=> 5 -+// <6=> 6 -+// <7=> 7 -+ -+#ifndef NRFX_UARTE_DEFAULT_CONFIG_IRQ_PRIORITY -+#define NRFX_UARTE_DEFAULT_CONFIG_IRQ_PRIORITY 7 -+#endif -+ -+// NRFX_UARTE_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRFX_UARTE_CONFIG_LOG_ENABLED -+#define NRFX_UARTE_CONFIG_LOG_ENABLED 0 -+#endif -+// NRFX_UARTE_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRFX_UARTE_CONFIG_LOG_LEVEL -+#define NRFX_UARTE_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRFX_UARTE_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRFX_UARTE_CONFIG_INFO_COLOR -+#define NRFX_UARTE_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRFX_UARTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRFX_UARTE_CONFIG_DEBUG_COLOR -+#define NRFX_UARTE_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// -+ -+// NRFX_UART_ENABLED - nrfx_uart - UART peripheral driver -+//========================================================== -+#ifndef NRFX_UART_ENABLED -+#define NRFX_UART_ENABLED 1 -+#endif -+// NRFX_UART0_ENABLED - Enable UART0 instance -+#ifndef NRFX_UART0_ENABLED -+#define NRFX_UART0_ENABLED 0 -+#endif -+ -+// NRFX_UART_DEFAULT_CONFIG_HWFC - Hardware Flow Control -+ -+// <0=> Disabled -+// <1=> Enabled -+ -+#ifndef NRFX_UART_DEFAULT_CONFIG_HWFC -+#define NRFX_UART_DEFAULT_CONFIG_HWFC 0 -+#endif -+ -+// NRFX_UART_DEFAULT_CONFIG_PARITY - Parity -+ -+// <0=> Excluded -+// <14=> Included -+ -+#ifndef NRFX_UART_DEFAULT_CONFIG_PARITY -+#define NRFX_UART_DEFAULT_CONFIG_PARITY 0 -+#endif -+ -+// NRFX_UART_DEFAULT_CONFIG_BAUDRATE - Default Baudrate -+ -+// <323584=> 1200 baud -+// <643072=> 2400 baud -+// <1290240=> 4800 baud -+// <2576384=> 9600 baud -+// <3866624=> 14400 baud -+// <5152768=> 19200 baud -+// <7729152=> 28800 baud -+// <8388608=> 31250 baud -+// <10309632=> 38400 baud -+// <15007744=> 56000 baud -+// <15462400=> 57600 baud -+// <20615168=> 76800 baud -+// <30924800=> 115200 baud -+// <61845504=> 230400 baud -+// <67108864=> 250000 baud -+// <123695104=> 460800 baud -+// <247386112=> 921600 baud -+// <268435456=> 1000000 baud -+ -+#ifndef NRFX_UART_DEFAULT_CONFIG_BAUDRATE -+#define NRFX_UART_DEFAULT_CONFIG_BAUDRATE 30924800 -+#endif -+ -+// NRFX_UART_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority -+ -+// <0=> 0 (highest) -+// <1=> 1 -+// <2=> 2 -+// <3=> 3 -+// <4=> 4 -+// <5=> 5 -+// <6=> 6 -+// <7=> 7 -+ -+#ifndef NRFX_UART_DEFAULT_CONFIG_IRQ_PRIORITY -+#define NRFX_UART_DEFAULT_CONFIG_IRQ_PRIORITY 7 -+#endif -+ -+// NRFX_UART_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRFX_UART_CONFIG_LOG_ENABLED -+#define NRFX_UART_CONFIG_LOG_ENABLED 0 -+#endif -+// NRFX_UART_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRFX_UART_CONFIG_LOG_LEVEL -+#define NRFX_UART_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRFX_UART_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRFX_UART_CONFIG_INFO_COLOR -+#define NRFX_UART_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRFX_UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRFX_UART_CONFIG_DEBUG_COLOR -+#define NRFX_UART_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// -+ -+// UART_ENABLED - nrf_drv_uart - UART/UARTE peripheral driver - legacy layer -+//========================================================== -+#ifndef UART_ENABLED -+#define UART_ENABLED 1 -+#endif -+// UART_DEFAULT_CONFIG_HWFC - Hardware Flow Control -+ -+// <0=> Disabled -+// <1=> Enabled -+ -+#ifndef UART_DEFAULT_CONFIG_HWFC -+#define UART_DEFAULT_CONFIG_HWFC 0 -+#endif -+ -+// UART_DEFAULT_CONFIG_PARITY - Parity -+ -+// <0=> Excluded -+// <14=> Included -+ -+#ifndef UART_DEFAULT_CONFIG_PARITY -+#define UART_DEFAULT_CONFIG_PARITY 0 -+#endif -+ -+// UART_DEFAULT_CONFIG_BAUDRATE - Default Baudrate -+ -+// <323584=> 1200 baud -+// <643072=> 2400 baud -+// <1290240=> 4800 baud -+// <2576384=> 9600 baud -+// <3862528=> 14400 baud -+// <5152768=> 19200 baud -+// <7716864=> 28800 baud -+// <10289152=> 38400 baud -+// <15400960=> 57600 baud -+// <20615168=> 76800 baud -+// <30801920=> 115200 baud -+// <61865984=> 230400 baud -+// <67108864=> 250000 baud -+// <121634816=> 460800 baud -+// <251658240=> 921600 baud -+// <268435456=> 1000000 baud -+ -+#ifndef UART_DEFAULT_CONFIG_BAUDRATE -+#define UART_DEFAULT_CONFIG_BAUDRATE 30801920 -+#endif -+ -+// UART_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority -+ -+ -+// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -+// <0=> 0 (highest) -+// <1=> 1 -+// <2=> 2 -+// <3=> 3 -+// <4=> 4 -+// <5=> 5 -+// <6=> 6 -+// <7=> 7 -+ -+#ifndef UART_DEFAULT_CONFIG_IRQ_PRIORITY -+#define UART_DEFAULT_CONFIG_IRQ_PRIORITY 7 -+#endif -+ -+// UART_EASY_DMA_SUPPORT - Driver supporting EasyDMA -+ -+ -+#ifndef UART_EASY_DMA_SUPPORT -+#define UART_EASY_DMA_SUPPORT 1 -+#endif -+ -+// UART_LEGACY_SUPPORT - Driver supporting Legacy mode -+ -+ -+#ifndef UART_LEGACY_SUPPORT -+#define UART_LEGACY_SUPPORT 1 -+#endif -+ -+// UART0_ENABLED - Enable UART0 instance -+//========================================================== -+#ifndef UART0_ENABLED -+#define UART0_ENABLED 1 -+#endif -+// UART0_CONFIG_USE_EASY_DMA - Default setting for using EasyDMA -+ -+ -+#ifndef UART0_CONFIG_USE_EASY_DMA -+#define UART0_CONFIG_USE_EASY_DMA 1 -+#endif -+ -+// -+ -+// -+ -+// -+//========================================================== -+ -+// nRF_Libraries -+ -+//========================================================== -+// APP_SCHEDULER_ENABLED - app_scheduler - Events scheduler -+//========================================================== -+#ifndef APP_SCHEDULER_ENABLED -+#define APP_SCHEDULER_ENABLED 1 -+#endif -+// APP_SCHEDULER_WITH_PAUSE - Enabling pause feature -+ -+ -+#ifndef APP_SCHEDULER_WITH_PAUSE -+#define APP_SCHEDULER_WITH_PAUSE 1 -+#endif -+ -+// APP_SCHEDULER_WITH_PROFILER - Enabling scheduler profiling -+ -+ -+#ifndef APP_SCHEDULER_WITH_PROFILER -+#define APP_SCHEDULER_WITH_PROFILER 1 -+#endif -+ -+// -+ -+// APP_TIMER_ENABLED - app_timer - Application timer functionality -+//========================================================== -+#ifndef APP_TIMER_ENABLED -+#define APP_TIMER_ENABLED 1 -+#endif -+// APP_TIMER_CONFIG_RTC_FREQUENCY - Configure RTC prescaler. -+ -+// <0=> 32768 Hz -+// <1=> 16384 Hz -+// <3=> 8192 Hz -+// <7=> 4096 Hz -+// <15=> 2048 Hz -+// <31=> 1024 Hz -+ -+#ifndef APP_TIMER_CONFIG_RTC_FREQUENCY -+#define APP_TIMER_CONFIG_RTC_FREQUENCY 0 -+#endif -+ -+// APP_TIMER_CONFIG_IRQ_PRIORITY - Interrupt priority -+ -+ -+// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -+// <0=> 0 (highest) -+// <1=> 1 -+// <2=> 2 -+// <3=> 3 -+// <4=> 4 -+// <5=> 5 -+// <6=> 6 -+// <7=> 7 -+ -+#ifndef APP_TIMER_CONFIG_IRQ_PRIORITY -+#define APP_TIMER_CONFIG_IRQ_PRIORITY 7 -+#endif -+ -+// APP_TIMER_CONFIG_OP_QUEUE_SIZE - Capacity of timer requests queue. -+// Size of the queue depends on how many timers are used -+// in the system, how often timers are started and overall -+// system latency. If queue size is too small app_timer calls -+// will fail. -+ -+#ifndef APP_TIMER_CONFIG_OP_QUEUE_SIZE -+#define APP_TIMER_CONFIG_OP_QUEUE_SIZE 10 -+#endif -+ -+// APP_TIMER_CONFIG_USE_SCHEDULER - Enable scheduling app_timer events to app_scheduler -+ -+ -+#ifndef APP_TIMER_CONFIG_USE_SCHEDULER -+#define APP_TIMER_CONFIG_USE_SCHEDULER 0 -+#endif -+ -+// APP_TIMER_KEEPS_RTC_ACTIVE - Enable RTC always on -+ -+ -+// If option is enabled RTC is kept running even if there is no active timers. -+// This option can be used when app_timer is used for timestamping. -+ -+#ifndef APP_TIMER_KEEPS_RTC_ACTIVE -+#define APP_TIMER_KEEPS_RTC_ACTIVE 0 -+#endif -+ -+// App Timer Legacy configuration - Legacy configuration. -+ -+//========================================================== -+// APP_TIMER_WITH_PROFILER - Enable app_timer profiling -+ -+ -+#ifndef APP_TIMER_WITH_PROFILER -+#define APP_TIMER_WITH_PROFILER 0 -+#endif -+ -+// APP_TIMER_CONFIG_SWI_NUMBER - Configure SWI instance used. -+ -+ -+#ifndef APP_TIMER_CONFIG_SWI_NUMBER -+#define APP_TIMER_CONFIG_SWI_NUMBER 0 -+#endif -+ -+// -+//========================================================== -+ -+// -+ -+// CRC16_ENABLED - crc16 - CRC16 calculation routines -+ -+ -+#ifndef CRC16_ENABLED -+#define CRC16_ENABLED 1 -+#endif -+ -+// NRF_BALLOC_ENABLED - nrf_balloc - Block allocator module -+//========================================================== -+#ifndef NRF_BALLOC_ENABLED -+#define NRF_BALLOC_ENABLED 1 -+#endif -+// NRF_BALLOC_CONFIG_DEBUG_ENABLED - Enables debug mode in the module. -+//========================================================== -+#ifndef NRF_BALLOC_CONFIG_DEBUG_ENABLED -+#define NRF_BALLOC_CONFIG_DEBUG_ENABLED 0 -+#endif -+// NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS - Number of words used as head guard. <0-255> -+ -+ -+#ifndef NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS -+#define NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS 1 -+#endif -+ -+// NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS - Number of words used as tail guard. <0-255> -+ -+ -+#ifndef NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS -+#define NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS 1 -+#endif -+ -+// NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED - Enables basic checks in this module. -+ -+ -+#ifndef NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED -+#define NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED 0 -+#endif -+ -+// NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED - Enables double memory free check in this module. -+ -+ -+#ifndef NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED -+#define NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED 0 -+#endif -+ -+// NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED - Enables free memory corruption check in this module. -+ -+ -+#ifndef NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED -+#define NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED 0 -+#endif -+ -+// NRF_BALLOC_CLI_CMDS - Enable CLI commands specific to the module -+ -+ -+#ifndef NRF_BALLOC_CLI_CMDS -+#define NRF_BALLOC_CLI_CMDS 0 -+#endif -+ -+// -+ -+// -+ -+// NRF_FPRINTF_ENABLED - nrf_fprintf - fprintf function. -+ -+ -+#ifndef NRF_FPRINTF_ENABLED -+#define NRF_FPRINTF_ENABLED 1 -+#endif -+ -+// NRF_MEMOBJ_ENABLED - nrf_memobj - Linked memory allocator module -+ -+ -+#ifndef NRF_MEMOBJ_ENABLED -+#define NRF_MEMOBJ_ENABLED 1 -+#endif -+ -+// NRF_QUEUE_ENABLED - nrf_queue - Queue module -+//========================================================== -+#ifndef NRF_QUEUE_ENABLED -+#define NRF_QUEUE_ENABLED 1 -+#endif -+// NRF_QUEUE_CLI_CMDS - Enable CLI commands specific to the module -+ -+ -+#ifndef NRF_QUEUE_CLI_CMDS -+#define NRF_QUEUE_CLI_CMDS 0 -+#endif -+ -+// -+ -+// NRF_SECTION_ITER_ENABLED - nrf_section_iter - Section iterator -+ -+ -+#ifndef NRF_SECTION_ITER_ENABLED -+#define NRF_SECTION_ITER_ENABLED 1 -+#endif -+ -+// NRF_STRERROR_ENABLED - nrf_strerror - Library for converting error code to string. -+ -+ -+#ifndef NRF_STRERROR_ENABLED -+#define NRF_STRERROR_ENABLED 1 -+#endif -+ -+// -+//========================================================== -+ -+// nRF_Log -+ -+//========================================================== -+// NRF_LOG_BACKEND_RTT_ENABLED - nrf_log_backend_rtt - Log RTT backend -+//========================================================== -+#ifndef NRF_LOG_BACKEND_RTT_ENABLED -+#define NRF_LOG_BACKEND_RTT_ENABLED 0 -+#endif -+// NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE - Size of buffer for partially processed strings. -+// Size of the buffer is a trade-off between RAM usage and processing. -+// if buffer is smaller then strings will often be fragmented. -+// It is recommended to use size which will fit typical log and only the -+// longer one will be fragmented. -+ -+#ifndef NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE -+#define NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE 64 -+#endif -+ -+// NRF_LOG_BACKEND_RTT_TX_RETRY_DELAY_MS - Period before retrying writing to RTT -+#ifndef NRF_LOG_BACKEND_RTT_TX_RETRY_DELAY_MS -+#define NRF_LOG_BACKEND_RTT_TX_RETRY_DELAY_MS 1 -+#endif -+ -+// NRF_LOG_BACKEND_RTT_TX_RETRY_CNT - Writing to RTT retries. -+// If RTT fails to accept any new data after retries -+// module assumes that host is not active and on next -+// request it will perform only one write attempt. -+// On successful writing, module assumes that host is active -+// and scheme with retry is applied again. -+ -+#ifndef NRF_LOG_BACKEND_RTT_TX_RETRY_CNT -+#define NRF_LOG_BACKEND_RTT_TX_RETRY_CNT 3 -+#endif -+ -+// -+ -+// NRF_LOG_STR_FORMATTER_TIMESTAMP_FORMAT_ENABLED - nrf_log_str_formatter - Log string formatter -+ -+ -+#ifndef NRF_LOG_STR_FORMATTER_TIMESTAMP_FORMAT_ENABLED -+#define NRF_LOG_STR_FORMATTER_TIMESTAMP_FORMAT_ENABLED 1 -+#endif -+ -+// nrf_log - Logger -+ -+//========================================================== -+// NRF_LOG_ENABLED - Logging module for nRF5 SDK -+//========================================================== -+#ifndef NRF_LOG_ENABLED -+#define NRF_LOG_ENABLED 0 -+#endif -+// NRF_LOG_USES_COLORS - If enabled then ANSI escape code for colors is prefixed to every string -+//========================================================== -+#ifndef NRF_LOG_USES_COLORS -+#define NRF_LOG_USES_COLORS 0 -+#endif -+// NRF_LOG_COLOR_DEFAULT - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_LOG_COLOR_DEFAULT -+#define NRF_LOG_COLOR_DEFAULT 0 -+#endif -+ -+// NRF_LOG_ERROR_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_LOG_ERROR_COLOR -+#define NRF_LOG_ERROR_COLOR 2 -+#endif -+ -+// NRF_LOG_WARNING_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_LOG_WARNING_COLOR -+#define NRF_LOG_WARNING_COLOR 4 -+#endif -+ -+// -+ -+// NRF_LOG_DEFAULT_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_LOG_DEFAULT_LEVEL -+#define NRF_LOG_DEFAULT_LEVEL 3 -+#endif -+ -+// NRF_LOG_DEFERRED - Enable deffered logger. -+ -+ -+// Log data is buffered and can be processed in idle. -+ -+#ifndef NRF_LOG_DEFERRED -+#define NRF_LOG_DEFERRED 1 -+#endif -+ -+// NRF_LOG_BUFSIZE - Size of the buffer for storing logs (in bytes). -+ -+ -+// Must be power of 2 and multiple of 4. -+// If NRF_LOG_DEFERRED = 0 then buffer size can be reduced to minimum. -+// <128=> 128 -+// <256=> 256 -+// <512=> 512 -+// <1024=> 1024 -+// <2048=> 2048 -+// <4096=> 4096 -+// <8192=> 8192 -+// <16384=> 16384 -+ -+#ifndef NRF_LOG_BUFSIZE -+#define NRF_LOG_BUFSIZE 1024 -+#endif -+ -+// NRF_LOG_ALLOW_OVERFLOW - Configures behavior when circular buffer is full. -+ -+ -+// If set then oldest logs are overwritten. Otherwise a -+// marker is injected informing about overflow. -+ -+#ifndef NRF_LOG_ALLOW_OVERFLOW -+#define NRF_LOG_ALLOW_OVERFLOW 1 -+#endif -+ -+// NRF_LOG_USES_TIMESTAMP - Enable timestamping -+ -+// Function for getting the timestamp is provided by the user -+//========================================================== -+#ifndef NRF_LOG_USES_TIMESTAMP -+#define NRF_LOG_USES_TIMESTAMP 0 -+#endif -+// NRF_LOG_TIMESTAMP_DEFAULT_FREQUENCY - Default frequency of the timestamp (in Hz) -+#ifndef NRF_LOG_TIMESTAMP_DEFAULT_FREQUENCY -+#define NRF_LOG_TIMESTAMP_DEFAULT_FREQUENCY 32768 -+#endif -+ -+// -+ -+// NRF_LOG_FILTERS_ENABLED - Enable dynamic filtering of logs. -+ -+ -+#ifndef NRF_LOG_FILTERS_ENABLED -+#define NRF_LOG_FILTERS_ENABLED 0 -+#endif -+ -+// NRF_LOG_CLI_CMDS - Enable CLI commands for the module. -+ -+ -+#ifndef NRF_LOG_CLI_CMDS -+#define NRF_LOG_CLI_CMDS 0 -+#endif -+ -+// Log message pool - Configuration of log message pool -+ -+//========================================================== -+// NRF_LOG_MSGPOOL_ELEMENT_SIZE - Size of a single element in the pool of memory objects. -+// If a small value is set, then performance of logs processing -+// is degraded because data is fragmented. Bigger value impacts -+// RAM memory utilization. The size is set to fit a message with -+// a timestamp and up to 2 arguments in a single memory object. -+ -+#ifndef NRF_LOG_MSGPOOL_ELEMENT_SIZE -+#define NRF_LOG_MSGPOOL_ELEMENT_SIZE 20 -+#endif -+ -+// NRF_LOG_MSGPOOL_ELEMENT_COUNT - Number of elements in the pool of memory objects -+// If a small value is set, then it may lead to a deadlock -+// in certain cases if backend has high latency and holds -+// multiple messages for long time. Bigger value impacts -+// RAM memory usage. -+ -+#ifndef NRF_LOG_MSGPOOL_ELEMENT_COUNT -+#define NRF_LOG_MSGPOOL_ELEMENT_COUNT 8 -+#endif -+ -+// -+//========================================================== -+ -+// -+ -+// nrf_log module configuration -+ -+//========================================================== -+// nrf_log in nRF_Core -+ -+//========================================================== -+// NRF_MPU_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_MPU_CONFIG_LOG_ENABLED -+#define NRF_MPU_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_MPU_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_MPU_CONFIG_LOG_LEVEL -+#define NRF_MPU_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_MPU_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_MPU_CONFIG_INFO_COLOR -+#define NRF_MPU_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_MPU_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_MPU_CONFIG_DEBUG_COLOR -+#define NRF_MPU_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_STACK_GUARD_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_STACK_GUARD_CONFIG_LOG_ENABLED -+#define NRF_STACK_GUARD_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_STACK_GUARD_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_STACK_GUARD_CONFIG_LOG_LEVEL -+#define NRF_STACK_GUARD_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_STACK_GUARD_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_STACK_GUARD_CONFIG_INFO_COLOR -+#define NRF_STACK_GUARD_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_STACK_GUARD_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_STACK_GUARD_CONFIG_DEBUG_COLOR -+#define NRF_STACK_GUARD_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// TASK_MANAGER_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef TASK_MANAGER_CONFIG_LOG_ENABLED -+#define TASK_MANAGER_CONFIG_LOG_ENABLED 0 -+#endif -+// TASK_MANAGER_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef TASK_MANAGER_CONFIG_LOG_LEVEL -+#define TASK_MANAGER_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// TASK_MANAGER_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef TASK_MANAGER_CONFIG_INFO_COLOR -+#define TASK_MANAGER_CONFIG_INFO_COLOR 0 -+#endif -+ -+// TASK_MANAGER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef TASK_MANAGER_CONFIG_DEBUG_COLOR -+#define TASK_MANAGER_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// -+//========================================================== -+ -+// nrf_log in nRF_Drivers -+ -+//========================================================== -+// CLOCK_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef CLOCK_CONFIG_LOG_ENABLED -+#define CLOCK_CONFIG_LOG_ENABLED 0 -+#endif -+// CLOCK_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef CLOCK_CONFIG_LOG_LEVEL -+#define CLOCK_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// CLOCK_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef CLOCK_CONFIG_INFO_COLOR -+#define CLOCK_CONFIG_INFO_COLOR 0 -+#endif -+ -+// CLOCK_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef CLOCK_CONFIG_DEBUG_COLOR -+#define CLOCK_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// COMP_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef COMP_CONFIG_LOG_ENABLED -+#define COMP_CONFIG_LOG_ENABLED 0 -+#endif -+// COMP_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef COMP_CONFIG_LOG_LEVEL -+#define COMP_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// COMP_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef COMP_CONFIG_INFO_COLOR -+#define COMP_CONFIG_INFO_COLOR 0 -+#endif -+ -+// COMP_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef COMP_CONFIG_DEBUG_COLOR -+#define COMP_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// GPIOTE_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef GPIOTE_CONFIG_LOG_ENABLED -+#define GPIOTE_CONFIG_LOG_ENABLED 0 -+#endif -+// GPIOTE_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef GPIOTE_CONFIG_LOG_LEVEL -+#define GPIOTE_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// GPIOTE_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef GPIOTE_CONFIG_INFO_COLOR -+#define GPIOTE_CONFIG_INFO_COLOR 0 -+#endif -+ -+// GPIOTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef GPIOTE_CONFIG_DEBUG_COLOR -+#define GPIOTE_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// LPCOMP_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef LPCOMP_CONFIG_LOG_ENABLED -+#define LPCOMP_CONFIG_LOG_ENABLED 0 -+#endif -+// LPCOMP_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef LPCOMP_CONFIG_LOG_LEVEL -+#define LPCOMP_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// LPCOMP_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef LPCOMP_CONFIG_INFO_COLOR -+#define LPCOMP_CONFIG_INFO_COLOR 0 -+#endif -+ -+// LPCOMP_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef LPCOMP_CONFIG_DEBUG_COLOR -+#define LPCOMP_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// PDM_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef PDM_CONFIG_LOG_ENABLED -+#define PDM_CONFIG_LOG_ENABLED 0 -+#endif -+// PDM_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef PDM_CONFIG_LOG_LEVEL -+#define PDM_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// PDM_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef PDM_CONFIG_INFO_COLOR -+#define PDM_CONFIG_INFO_COLOR 0 -+#endif -+ -+// PDM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef PDM_CONFIG_DEBUG_COLOR -+#define PDM_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// PPI_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef PPI_CONFIG_LOG_ENABLED -+#define PPI_CONFIG_LOG_ENABLED 0 -+#endif -+// PPI_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef PPI_CONFIG_LOG_LEVEL -+#define PPI_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// PPI_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef PPI_CONFIG_INFO_COLOR -+#define PPI_CONFIG_INFO_COLOR 0 -+#endif -+ -+// PPI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef PPI_CONFIG_DEBUG_COLOR -+#define PPI_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// PWM_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef PWM_CONFIG_LOG_ENABLED -+#define PWM_CONFIG_LOG_ENABLED 0 -+#endif -+// PWM_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef PWM_CONFIG_LOG_LEVEL -+#define PWM_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// PWM_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef PWM_CONFIG_INFO_COLOR -+#define PWM_CONFIG_INFO_COLOR 0 -+#endif -+ -+// PWM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef PWM_CONFIG_DEBUG_COLOR -+#define PWM_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// QDEC_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef QDEC_CONFIG_LOG_ENABLED -+#define QDEC_CONFIG_LOG_ENABLED 0 -+#endif -+// QDEC_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef QDEC_CONFIG_LOG_LEVEL -+#define QDEC_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// QDEC_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef QDEC_CONFIG_INFO_COLOR -+#define QDEC_CONFIG_INFO_COLOR 0 -+#endif -+ -+// QDEC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef QDEC_CONFIG_DEBUG_COLOR -+#define QDEC_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// RNG_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef RNG_CONFIG_LOG_ENABLED -+#define RNG_CONFIG_LOG_ENABLED 0 -+#endif -+// RNG_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef RNG_CONFIG_LOG_LEVEL -+#define RNG_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// RNG_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef RNG_CONFIG_INFO_COLOR -+#define RNG_CONFIG_INFO_COLOR 0 -+#endif -+ -+// RNG_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef RNG_CONFIG_DEBUG_COLOR -+#define RNG_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED - Enables logging of random numbers. -+ -+ -+#ifndef RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED -+#define RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED 0 -+#endif -+ -+// -+ -+// RTC_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef RTC_CONFIG_LOG_ENABLED -+#define RTC_CONFIG_LOG_ENABLED 0 -+#endif -+// RTC_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef RTC_CONFIG_LOG_LEVEL -+#define RTC_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// RTC_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef RTC_CONFIG_INFO_COLOR -+#define RTC_CONFIG_INFO_COLOR 0 -+#endif -+ -+// RTC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef RTC_CONFIG_DEBUG_COLOR -+#define RTC_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// SAADC_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef SAADC_CONFIG_LOG_ENABLED -+#define SAADC_CONFIG_LOG_ENABLED 0 -+#endif -+// SAADC_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef SAADC_CONFIG_LOG_LEVEL -+#define SAADC_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// SAADC_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef SAADC_CONFIG_INFO_COLOR -+#define SAADC_CONFIG_INFO_COLOR 0 -+#endif -+ -+// SAADC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef SAADC_CONFIG_DEBUG_COLOR -+#define SAADC_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// SPIS_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef SPIS_CONFIG_LOG_ENABLED -+#define SPIS_CONFIG_LOG_ENABLED 0 -+#endif -+// SPIS_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef SPIS_CONFIG_LOG_LEVEL -+#define SPIS_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// SPIS_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef SPIS_CONFIG_INFO_COLOR -+#define SPIS_CONFIG_INFO_COLOR 0 -+#endif -+ -+// SPIS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef SPIS_CONFIG_DEBUG_COLOR -+#define SPIS_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// SPI_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef SPI_CONFIG_LOG_ENABLED -+#define SPI_CONFIG_LOG_ENABLED 0 -+#endif -+// SPI_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef SPI_CONFIG_LOG_LEVEL -+#define SPI_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// SPI_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef SPI_CONFIG_INFO_COLOR -+#define SPI_CONFIG_INFO_COLOR 0 -+#endif -+ -+// SPI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef SPI_CONFIG_DEBUG_COLOR -+#define SPI_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// TIMER_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef TIMER_CONFIG_LOG_ENABLED -+#define TIMER_CONFIG_LOG_ENABLED 0 -+#endif -+// TIMER_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef TIMER_CONFIG_LOG_LEVEL -+#define TIMER_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// TIMER_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef TIMER_CONFIG_INFO_COLOR -+#define TIMER_CONFIG_INFO_COLOR 0 -+#endif -+ -+// TIMER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef TIMER_CONFIG_DEBUG_COLOR -+#define TIMER_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// TWIS_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef TWIS_CONFIG_LOG_ENABLED -+#define TWIS_CONFIG_LOG_ENABLED 0 -+#endif -+// TWIS_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef TWIS_CONFIG_LOG_LEVEL -+#define TWIS_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// TWIS_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef TWIS_CONFIG_INFO_COLOR -+#define TWIS_CONFIG_INFO_COLOR 0 -+#endif -+ -+// TWIS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef TWIS_CONFIG_DEBUG_COLOR -+#define TWIS_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// TWI_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef TWI_CONFIG_LOG_ENABLED -+#define TWI_CONFIG_LOG_ENABLED 0 -+#endif -+// TWI_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef TWI_CONFIG_LOG_LEVEL -+#define TWI_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// TWI_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef TWI_CONFIG_INFO_COLOR -+#define TWI_CONFIG_INFO_COLOR 0 -+#endif -+ -+// TWI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef TWI_CONFIG_DEBUG_COLOR -+#define TWI_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// UART_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef UART_CONFIG_LOG_ENABLED -+#define UART_CONFIG_LOG_ENABLED 0 -+#endif -+// UART_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef UART_CONFIG_LOG_LEVEL -+#define UART_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// UART_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef UART_CONFIG_INFO_COLOR -+#define UART_CONFIG_INFO_COLOR 0 -+#endif -+ -+// UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef UART_CONFIG_DEBUG_COLOR -+#define UART_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// USBD_CONFIG_LOG_ENABLED - Enable logging in the module -+//========================================================== -+#ifndef USBD_CONFIG_LOG_ENABLED -+#define USBD_CONFIG_LOG_ENABLED 0 -+#endif -+// USBD_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef USBD_CONFIG_LOG_LEVEL -+#define USBD_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// USBD_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef USBD_CONFIG_INFO_COLOR -+#define USBD_CONFIG_INFO_COLOR 0 -+#endif -+ -+// USBD_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef USBD_CONFIG_DEBUG_COLOR -+#define USBD_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// WDT_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef WDT_CONFIG_LOG_ENABLED -+#define WDT_CONFIG_LOG_ENABLED 0 -+#endif -+// WDT_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef WDT_CONFIG_LOG_LEVEL -+#define WDT_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// WDT_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef WDT_CONFIG_INFO_COLOR -+#define WDT_CONFIG_INFO_COLOR 0 -+#endif -+ -+// WDT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef WDT_CONFIG_DEBUG_COLOR -+#define WDT_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// -+//========================================================== -+ -+// nrf_log in nRF_Libraries -+ -+//========================================================== -+// APP_TIMER_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef APP_TIMER_CONFIG_LOG_ENABLED -+#define APP_TIMER_CONFIG_LOG_ENABLED 0 -+#endif -+// APP_TIMER_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef APP_TIMER_CONFIG_LOG_LEVEL -+#define APP_TIMER_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// APP_TIMER_CONFIG_INITIAL_LOG_LEVEL - Initial severity level if dynamic filtering is enabled. -+ -+ -+// If module generates a lot of logs, initial log level can -+// be decreased to prevent flooding. Severity level can be -+// increased on instance basis. -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef APP_TIMER_CONFIG_INITIAL_LOG_LEVEL -+#define APP_TIMER_CONFIG_INITIAL_LOG_LEVEL 3 -+#endif -+ -+// APP_TIMER_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef APP_TIMER_CONFIG_INFO_COLOR -+#define APP_TIMER_CONFIG_INFO_COLOR 0 -+#endif -+ -+// APP_TIMER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef APP_TIMER_CONFIG_DEBUG_COLOR -+#define APP_TIMER_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// APP_USBD_CDC_ACM_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef APP_USBD_CDC_ACM_CONFIG_LOG_ENABLED -+#define APP_USBD_CDC_ACM_CONFIG_LOG_ENABLED 0 -+#endif -+// APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL -+#define APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// APP_USBD_CDC_ACM_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef APP_USBD_CDC_ACM_CONFIG_INFO_COLOR -+#define APP_USBD_CDC_ACM_CONFIG_INFO_COLOR 0 -+#endif -+ -+// APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR -+#define APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// APP_USBD_DUMMY_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef APP_USBD_DUMMY_CONFIG_LOG_ENABLED -+#define APP_USBD_DUMMY_CONFIG_LOG_ENABLED 0 -+#endif -+// APP_USBD_DUMMY_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef APP_USBD_DUMMY_CONFIG_LOG_LEVEL -+#define APP_USBD_DUMMY_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// APP_USBD_DUMMY_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef APP_USBD_DUMMY_CONFIG_INFO_COLOR -+#define APP_USBD_DUMMY_CONFIG_INFO_COLOR 0 -+#endif -+ -+// APP_USBD_DUMMY_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef APP_USBD_DUMMY_CONFIG_DEBUG_COLOR -+#define APP_USBD_DUMMY_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// APP_USBD_MSC_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef APP_USBD_MSC_CONFIG_LOG_ENABLED -+#define APP_USBD_MSC_CONFIG_LOG_ENABLED 0 -+#endif -+// APP_USBD_MSC_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef APP_USBD_MSC_CONFIG_LOG_LEVEL -+#define APP_USBD_MSC_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// APP_USBD_MSC_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef APP_USBD_MSC_CONFIG_INFO_COLOR -+#define APP_USBD_MSC_CONFIG_INFO_COLOR 0 -+#endif -+ -+// APP_USBD_MSC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef APP_USBD_MSC_CONFIG_DEBUG_COLOR -+#define APP_USBD_MSC_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_ENABLED -+#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_ENABLED 0 -+#endif -+// APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_LEVEL -+#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// APP_USBD_NRF_DFU_TRIGGER_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_INFO_COLOR -+#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_INFO_COLOR 0 -+#endif -+ -+// APP_USBD_NRF_DFU_TRIGGER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_DEBUG_COLOR -+#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_ATFIFO_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_ATFIFO_CONFIG_LOG_ENABLED -+#define NRF_ATFIFO_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_ATFIFO_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_ATFIFO_CONFIG_LOG_LEVEL -+#define NRF_ATFIFO_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_ATFIFO_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_ATFIFO_CONFIG_LOG_INIT_FILTER_LEVEL -+#define NRF_ATFIFO_CONFIG_LOG_INIT_FILTER_LEVEL 3 -+#endif -+ -+// NRF_ATFIFO_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_ATFIFO_CONFIG_INFO_COLOR -+#define NRF_ATFIFO_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_ATFIFO_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_ATFIFO_CONFIG_DEBUG_COLOR -+#define NRF_ATFIFO_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_BALLOC_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_BALLOC_CONFIG_LOG_ENABLED -+#define NRF_BALLOC_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_BALLOC_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_BALLOC_CONFIG_LOG_LEVEL -+#define NRF_BALLOC_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_BALLOC_CONFIG_INITIAL_LOG_LEVEL - Initial severity level if dynamic filtering is enabled. -+ -+ -+// If module generates a lot of logs, initial log level can -+// be decreased to prevent flooding. Severity level can be -+// increased on instance basis. -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_BALLOC_CONFIG_INITIAL_LOG_LEVEL -+#define NRF_BALLOC_CONFIG_INITIAL_LOG_LEVEL 3 -+#endif -+ -+// NRF_BALLOC_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_BALLOC_CONFIG_INFO_COLOR -+#define NRF_BALLOC_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_BALLOC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_BALLOC_CONFIG_DEBUG_COLOR -+#define NRF_BALLOC_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_CLI_BLE_UART_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_CLI_BLE_UART_CONFIG_LOG_ENABLED -+#define NRF_CLI_BLE_UART_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL -+#define NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_CLI_BLE_UART_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_CLI_BLE_UART_CONFIG_INFO_COLOR -+#define NRF_CLI_BLE_UART_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR -+#define NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_CLI_LIBUARTE_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_CLI_LIBUARTE_CONFIG_LOG_ENABLED -+#define NRF_CLI_LIBUARTE_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_CLI_LIBUARTE_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_CLI_LIBUARTE_CONFIG_LOG_LEVEL -+#define NRF_CLI_LIBUARTE_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_CLI_LIBUARTE_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_CLI_LIBUARTE_CONFIG_INFO_COLOR -+#define NRF_CLI_LIBUARTE_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_CLI_LIBUARTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_CLI_LIBUARTE_CONFIG_DEBUG_COLOR -+#define NRF_CLI_LIBUARTE_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_CLI_UART_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_CLI_UART_CONFIG_LOG_ENABLED -+#define NRF_CLI_UART_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_CLI_UART_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_CLI_UART_CONFIG_LOG_LEVEL -+#define NRF_CLI_UART_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_CLI_UART_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_CLI_UART_CONFIG_INFO_COLOR -+#define NRF_CLI_UART_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_CLI_UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_CLI_UART_CONFIG_DEBUG_COLOR -+#define NRF_CLI_UART_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_LIBUARTE_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_LIBUARTE_CONFIG_LOG_ENABLED -+#define NRF_LIBUARTE_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_LIBUARTE_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_LIBUARTE_CONFIG_LOG_LEVEL -+#define NRF_LIBUARTE_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_LIBUARTE_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_LIBUARTE_CONFIG_INFO_COLOR -+#define NRF_LIBUARTE_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_LIBUARTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_LIBUARTE_CONFIG_DEBUG_COLOR -+#define NRF_LIBUARTE_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_MEMOBJ_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_MEMOBJ_CONFIG_LOG_ENABLED -+#define NRF_MEMOBJ_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_MEMOBJ_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_MEMOBJ_CONFIG_LOG_LEVEL -+#define NRF_MEMOBJ_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_MEMOBJ_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_MEMOBJ_CONFIG_INFO_COLOR -+#define NRF_MEMOBJ_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_MEMOBJ_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_MEMOBJ_CONFIG_DEBUG_COLOR -+#define NRF_MEMOBJ_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_PWR_MGMT_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_PWR_MGMT_CONFIG_LOG_ENABLED -+#define NRF_PWR_MGMT_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_PWR_MGMT_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_PWR_MGMT_CONFIG_LOG_LEVEL -+#define NRF_PWR_MGMT_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_PWR_MGMT_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_PWR_MGMT_CONFIG_INFO_COLOR -+#define NRF_PWR_MGMT_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_PWR_MGMT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_PWR_MGMT_CONFIG_DEBUG_COLOR -+#define NRF_PWR_MGMT_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_QUEUE_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_QUEUE_CONFIG_LOG_ENABLED -+#define NRF_QUEUE_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_QUEUE_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_QUEUE_CONFIG_LOG_LEVEL -+#define NRF_QUEUE_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_QUEUE_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_QUEUE_CONFIG_LOG_INIT_FILTER_LEVEL -+#define NRF_QUEUE_CONFIG_LOG_INIT_FILTER_LEVEL 3 -+#endif -+ -+// NRF_QUEUE_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_QUEUE_CONFIG_INFO_COLOR -+#define NRF_QUEUE_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_QUEUE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_QUEUE_CONFIG_DEBUG_COLOR -+#define NRF_QUEUE_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_SDH_ANT_LOG_ENABLED - Enable logging in SoftDevice handler (ANT) module. -+//========================================================== -+#ifndef NRF_SDH_ANT_LOG_ENABLED -+#define NRF_SDH_ANT_LOG_ENABLED 0 -+#endif -+// NRF_SDH_ANT_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_SDH_ANT_LOG_LEVEL -+#define NRF_SDH_ANT_LOG_LEVEL 3 -+#endif -+ -+// NRF_SDH_ANT_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_SDH_ANT_INFO_COLOR -+#define NRF_SDH_ANT_INFO_COLOR 0 -+#endif -+ -+// NRF_SDH_ANT_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_SDH_ANT_DEBUG_COLOR -+#define NRF_SDH_ANT_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_SDH_BLE_LOG_ENABLED - Enable logging in SoftDevice handler (BLE) module. -+//========================================================== -+#ifndef NRF_SDH_BLE_LOG_ENABLED -+#define NRF_SDH_BLE_LOG_ENABLED 1 -+#endif -+// NRF_SDH_BLE_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_SDH_BLE_LOG_LEVEL -+#define NRF_SDH_BLE_LOG_LEVEL 3 -+#endif -+ -+// NRF_SDH_BLE_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_SDH_BLE_INFO_COLOR -+#define NRF_SDH_BLE_INFO_COLOR 0 -+#endif -+ -+// NRF_SDH_BLE_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_SDH_BLE_DEBUG_COLOR -+#define NRF_SDH_BLE_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_SDH_LOG_ENABLED - Enable logging in SoftDevice handler module. -+//========================================================== -+#ifndef NRF_SDH_LOG_ENABLED -+#define NRF_SDH_LOG_ENABLED 1 -+#endif -+// NRF_SDH_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_SDH_LOG_LEVEL -+#define NRF_SDH_LOG_LEVEL 3 -+#endif -+ -+// NRF_SDH_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_SDH_INFO_COLOR -+#define NRF_SDH_INFO_COLOR 0 -+#endif -+ -+// NRF_SDH_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_SDH_DEBUG_COLOR -+#define NRF_SDH_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_SDH_SOC_LOG_ENABLED - Enable logging in SoftDevice handler (SoC) module. -+//========================================================== -+#ifndef NRF_SDH_SOC_LOG_ENABLED -+#define NRF_SDH_SOC_LOG_ENABLED 1 -+#endif -+// NRF_SDH_SOC_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_SDH_SOC_LOG_LEVEL -+#define NRF_SDH_SOC_LOG_LEVEL 3 -+#endif -+ -+// NRF_SDH_SOC_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_SDH_SOC_INFO_COLOR -+#define NRF_SDH_SOC_INFO_COLOR 0 -+#endif -+ -+// NRF_SDH_SOC_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_SDH_SOC_DEBUG_COLOR -+#define NRF_SDH_SOC_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_SORTLIST_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_SORTLIST_CONFIG_LOG_ENABLED -+#define NRF_SORTLIST_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_SORTLIST_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_SORTLIST_CONFIG_LOG_LEVEL -+#define NRF_SORTLIST_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_SORTLIST_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_SORTLIST_CONFIG_INFO_COLOR -+#define NRF_SORTLIST_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_SORTLIST_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_SORTLIST_CONFIG_DEBUG_COLOR -+#define NRF_SORTLIST_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_TWI_SENSOR_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_TWI_SENSOR_CONFIG_LOG_ENABLED -+#define NRF_TWI_SENSOR_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_TWI_SENSOR_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_TWI_SENSOR_CONFIG_LOG_LEVEL -+#define NRF_TWI_SENSOR_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_TWI_SENSOR_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_TWI_SENSOR_CONFIG_INFO_COLOR -+#define NRF_TWI_SENSOR_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_TWI_SENSOR_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_TWI_SENSOR_CONFIG_DEBUG_COLOR -+#define NRF_TWI_SENSOR_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// -+//========================================================== -+ -+// nrf_log in nRF_Serialization -+ -+//========================================================== -+// SER_HAL_TRANSPORT_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef SER_HAL_TRANSPORT_CONFIG_LOG_ENABLED -+#define SER_HAL_TRANSPORT_CONFIG_LOG_ENABLED 0 -+#endif -+// SER_HAL_TRANSPORT_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef SER_HAL_TRANSPORT_CONFIG_LOG_LEVEL -+#define SER_HAL_TRANSPORT_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// SER_HAL_TRANSPORT_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef SER_HAL_TRANSPORT_CONFIG_INFO_COLOR -+#define SER_HAL_TRANSPORT_CONFIG_INFO_COLOR 0 -+#endif -+ -+// SER_HAL_TRANSPORT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef SER_HAL_TRANSPORT_CONFIG_DEBUG_COLOR -+#define SER_HAL_TRANSPORT_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// -+//========================================================== -+ -+// -+//========================================================== -+ -+// -+//========================================================== -+ -+// -+//========================================================== -+ -+// nRF_Segger_RTT -+ -+//========================================================== -+// segger_rtt - SEGGER RTT -+ -+//========================================================== -+// SEGGER_RTT_CONFIG_BUFFER_SIZE_UP - Size of upstream buffer. -+// Note that either @ref NRF_LOG_BACKEND_RTT_OUTPUT_BUFFER_SIZE -+// or this value is actually used. It depends on which one is bigger. -+ -+#ifndef SEGGER_RTT_CONFIG_BUFFER_SIZE_UP -+#define SEGGER_RTT_CONFIG_BUFFER_SIZE_UP 512 -+#endif -+ -+// SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS - Size of upstream buffer. -+#ifndef SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS -+#define SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS 2 -+#endif -+ -+// SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN - Size of upstream buffer. -+#ifndef SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN -+#define SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN 16 -+#endif -+ -+// SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS - Size of upstream buffer. -+#ifndef SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS -+#define SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS 2 -+#endif -+ -+// SEGGER_RTT_CONFIG_DEFAULT_MODE - RTT behavior if the buffer is full. -+ -+ -+// The following modes are supported: -+// - SKIP - Do not block, output nothing. -+// - TRIM - Do not block, output as much as fits. -+// - BLOCK - Wait until there is space in the buffer. -+// <0=> SKIP -+// <1=> TRIM -+// <2=> BLOCK_IF_FIFO_FULL -+ -+#ifndef SEGGER_RTT_CONFIG_DEFAULT_MODE -+#define SEGGER_RTT_CONFIG_DEFAULT_MODE 0 -+#endif -+ -+// -+//========================================================== -+ -+// -+//========================================================== -+ -+// nRF_SoftDevice -+ -+//========================================================== -+// NRF_SDH_BLE_ENABLED - nrf_sdh_ble - SoftDevice BLE event handler -+//========================================================== -+#ifndef NRF_SDH_BLE_ENABLED -+#define NRF_SDH_BLE_ENABLED 1 -+#endif -+// BLE Stack configuration - Stack configuration parameters -+ -+// The SoftDevice handler will configure the stack with these parameters when calling @ref nrf_sdh_ble_default_cfg_set. -+// Other libraries might depend on these values; keep them up-to-date even if you are not explicitely calling @ref nrf_sdh_ble_default_cfg_set. -+//========================================================== -+// NRF_SDH_BLE_GAP_DATA_LENGTH <27-251> -+ -+ -+// Requested BLE GAP data length to be negotiated. -+ -+#ifndef NRF_SDH_BLE_GAP_DATA_LENGTH -+#define NRF_SDH_BLE_GAP_DATA_LENGTH 27 -+#endif -+ -+// NRF_SDH_BLE_PERIPHERAL_LINK_COUNT - Maximum number of peripheral links. -+#ifndef NRF_SDH_BLE_PERIPHERAL_LINK_COUNT -+#define NRF_SDH_BLE_PERIPHERAL_LINK_COUNT 8 -+#endif -+ -+// NRF_SDH_BLE_CENTRAL_LINK_COUNT - Maximum number of central links. -+#ifndef NRF_SDH_BLE_CENTRAL_LINK_COUNT -+#define NRF_SDH_BLE_CENTRAL_LINK_COUNT 8 -+#endif -+ -+// NRF_SDH_BLE_TOTAL_LINK_COUNT - Total link count. -+// Maximum number of total concurrent connections using the default configuration. -+ -+#ifndef NRF_SDH_BLE_TOTAL_LINK_COUNT -+#define NRF_SDH_BLE_TOTAL_LINK_COUNT 1 -+#endif -+ -+// NRF_SDH_BLE_GAP_EVENT_LENGTH - GAP event length. -+// The time set aside for this connection on every connection interval in 1.25 ms units. -+ -+#ifndef NRF_SDH_BLE_GAP_EVENT_LENGTH -+#define NRF_SDH_BLE_GAP_EVENT_LENGTH 6 -+#endif -+ -+// NRF_SDH_BLE_GATT_MAX_MTU_SIZE - Static maximum MTU size. -+#ifndef NRF_SDH_BLE_GATT_MAX_MTU_SIZE -+#define NRF_SDH_BLE_GATT_MAX_MTU_SIZE 250 -+#endif -+ -+// NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE - Attribute Table size in bytes. The size must be a multiple of 4. -+#ifndef NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE -+#define NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE 1408 -+#endif -+ -+// NRF_SDH_BLE_VS_UUID_COUNT - The number of vendor-specific UUIDs. -+#ifndef NRF_SDH_BLE_VS_UUID_COUNT -+#define NRF_SDH_BLE_VS_UUID_COUNT 0 -+#endif -+ -+// NRF_SDH_BLE_SERVICE_CHANGED - Include the Service Changed characteristic in the Attribute Table. -+ -+ -+#ifndef NRF_SDH_BLE_SERVICE_CHANGED -+#define NRF_SDH_BLE_SERVICE_CHANGED 0 -+#endif -+ -+// -+//========================================================== -+ -+// BLE Observers - Observers and priority levels -+ -+//========================================================== -+// NRF_SDH_BLE_OBSERVER_PRIO_LEVELS - Total number of priority levels for BLE observers. -+// This setting configures the number of priority levels available for BLE event handlers. -+// The priority level of a handler determines the order in which it receives events, with respect to other handlers. -+ -+#ifndef NRF_SDH_BLE_OBSERVER_PRIO_LEVELS -+#define NRF_SDH_BLE_OBSERVER_PRIO_LEVELS 4 -+#endif -+ -+// BLE Observers priorities - Invididual priorities -+ -+//========================================================== -+// BLE_ADV_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Advertising module. -+ -+#ifndef BLE_ADV_BLE_OBSERVER_PRIO -+#define BLE_ADV_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// BLE_ANCS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Apple Notification Service Client. -+ -+#ifndef BLE_ANCS_C_BLE_OBSERVER_PRIO -+#define BLE_ANCS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_ANS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Alert Notification Service Client. -+ -+#ifndef BLE_ANS_C_BLE_OBSERVER_PRIO -+#define BLE_ANS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_BAS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Battery Service. -+ -+#ifndef BLE_BAS_BLE_OBSERVER_PRIO -+#define BLE_BAS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_BAS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Battery Service Client. -+ -+#ifndef BLE_BAS_C_BLE_OBSERVER_PRIO -+#define BLE_BAS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_BPS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Blood Pressure Service. -+ -+#ifndef BLE_BPS_BLE_OBSERVER_PRIO -+#define BLE_BPS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_CONN_PARAMS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Connection parameters module. -+ -+#ifndef BLE_CONN_PARAMS_BLE_OBSERVER_PRIO -+#define BLE_CONN_PARAMS_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// BLE_CONN_STATE_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Connection State module. -+ -+#ifndef BLE_CONN_STATE_BLE_OBSERVER_PRIO -+#define BLE_CONN_STATE_BLE_OBSERVER_PRIO 0 -+#endif -+ -+// BLE_CSCS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Cycling Speed and Cadence Service. -+ -+#ifndef BLE_CSCS_BLE_OBSERVER_PRIO -+#define BLE_CSCS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_CTS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Current Time Service Client. -+ -+#ifndef BLE_CTS_C_BLE_OBSERVER_PRIO -+#define BLE_CTS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_DB_DISC_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Database Discovery module. -+ -+#ifndef BLE_DB_DISC_BLE_OBSERVER_PRIO -+#define BLE_DB_DISC_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// BLE_DFU_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the DFU Service. -+ -+#ifndef BLE_DFU_BLE_OBSERVER_PRIO -+#define BLE_DFU_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_DIS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Device Information Client. -+ -+#ifndef BLE_DIS_C_BLE_OBSERVER_PRIO -+#define BLE_DIS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_GLS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Glucose Service. -+ -+#ifndef BLE_GLS_BLE_OBSERVER_PRIO -+#define BLE_GLS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_HIDS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Human Interface Device Service. -+ -+#ifndef BLE_HIDS_BLE_OBSERVER_PRIO -+#define BLE_HIDS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_HRS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Heart Rate Service. -+ -+#ifndef BLE_HRS_BLE_OBSERVER_PRIO -+#define BLE_HRS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_HRS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Heart Rate Service Client. -+ -+#ifndef BLE_HRS_C_BLE_OBSERVER_PRIO -+#define BLE_HRS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_HTS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Health Thermometer Service. -+ -+#ifndef BLE_HTS_BLE_OBSERVER_PRIO -+#define BLE_HTS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_IAS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Immediate Alert Service. -+ -+#ifndef BLE_IAS_BLE_OBSERVER_PRIO -+#define BLE_IAS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_IAS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Immediate Alert Service Client. -+ -+#ifndef BLE_IAS_C_BLE_OBSERVER_PRIO -+#define BLE_IAS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_LBS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the LED Button Service. -+ -+#ifndef BLE_LBS_BLE_OBSERVER_PRIO -+#define BLE_LBS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_LBS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the LED Button Service Client. -+ -+#ifndef BLE_LBS_C_BLE_OBSERVER_PRIO -+#define BLE_LBS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_LESC_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the BLE LESC module. -+ -+#ifndef BLE_LESC_OBSERVER_PRIO -+#define BLE_LESC_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_LLS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Link Loss Service. -+ -+#ifndef BLE_LLS_BLE_OBSERVER_PRIO -+#define BLE_LLS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_LNS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Location Navigation Service. -+ -+#ifndef BLE_LNS_BLE_OBSERVER_PRIO -+#define BLE_LNS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_NUS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the UART Service. -+ -+#ifndef BLE_NUS_BLE_OBSERVER_PRIO -+#define BLE_NUS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_NUS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the UART Central Service. -+ -+#ifndef BLE_NUS_C_BLE_OBSERVER_PRIO -+#define BLE_NUS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_OTS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Object transfer service. -+ -+#ifndef BLE_OTS_BLE_OBSERVER_PRIO -+#define BLE_OTS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_OTS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Object transfer service client. -+ -+#ifndef BLE_OTS_C_BLE_OBSERVER_PRIO -+#define BLE_OTS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_RSCS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Running Speed and Cadence Service. -+ -+#ifndef BLE_RSCS_BLE_OBSERVER_PRIO -+#define BLE_RSCS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_RSCS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Running Speed and Cadence Client. -+ -+#ifndef BLE_RSCS_C_BLE_OBSERVER_PRIO -+#define BLE_RSCS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_TPS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the TX Power Service. -+ -+#ifndef BLE_TPS_BLE_OBSERVER_PRIO -+#define BLE_TPS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BSP_BTN_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Button Control module. -+ -+#ifndef BSP_BTN_BLE_OBSERVER_PRIO -+#define BSP_BTN_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NRF_BLE_BMS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Bond Management Service. -+ -+#ifndef NRF_BLE_BMS_BLE_OBSERVER_PRIO -+#define NRF_BLE_BMS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// NRF_BLE_CGMS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Contiuon Glucose Monitoring Service. -+ -+#ifndef NRF_BLE_CGMS_BLE_OBSERVER_PRIO -+#define NRF_BLE_CGMS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// NRF_BLE_ES_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Eddystone module. -+ -+#ifndef NRF_BLE_ES_BLE_OBSERVER_PRIO -+#define NRF_BLE_ES_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the GATT Service Client. -+ -+#ifndef NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO -+#define NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// NRF_BLE_GATT_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the GATT module. -+ -+#ifndef NRF_BLE_GATT_BLE_OBSERVER_PRIO -+#define NRF_BLE_GATT_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NRF_BLE_QWR_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Queued writes module. -+ -+#ifndef NRF_BLE_QWR_BLE_OBSERVER_PRIO -+#define NRF_BLE_QWR_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// PM_BLE_OBSERVER_PRIO - Priority with which BLE events are dispatched to the Peer Manager module. -+#ifndef PM_BLE_OBSERVER_PRIO -+#define PM_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// -+//========================================================== -+ -+// -+//========================================================== -+ -+ -+// -+ -+// NRF_SDH_ENABLED - nrf_sdh - SoftDevice handler -+//========================================================== -+#ifndef NRF_SDH_ENABLED -+#define NRF_SDH_ENABLED 1 -+#endif -+// Dispatch model -+ -+// This setting configures how Stack events are dispatched to the application. -+//========================================================== -+// NRF_SDH_DISPATCH_MODEL -+ -+ -+// NRF_SDH_DISPATCH_MODEL_INTERRUPT: SoftDevice events are passed to the application from the interrupt context. -+// NRF_SDH_DISPATCH_MODEL_APPSH: SoftDevice events are scheduled using @ref app_scheduler. -+// NRF_SDH_DISPATCH_MODEL_POLLING: SoftDevice events are to be fetched manually. -+// <0=> NRF_SDH_DISPATCH_MODEL_INTERRUPT -+// <1=> NRF_SDH_DISPATCH_MODEL_APPSH -+// <2=> NRF_SDH_DISPATCH_MODEL_POLLING -+ -+#ifndef NRF_SDH_DISPATCH_MODEL -+#define NRF_SDH_DISPATCH_MODEL 0 -+#endif -+ -+// -+//========================================================== -+ -+// Clock - SoftDevice clock configuration -+ -+//========================================================== -+// NRF_SDH_CLOCK_LF_SRC - SoftDevice clock source. -+ -+// <0=> NRF_CLOCK_LF_SRC_RC -+// <1=> NRF_CLOCK_LF_SRC_XTAL -+// <2=> NRF_CLOCK_LF_SRC_SYNTH -+ -+#ifndef NRF_SDH_CLOCK_LF_SRC -+#define NRF_SDH_CLOCK_LF_SRC 1 -+#endif -+ -+// NRF_SDH_CLOCK_LF_RC_CTIV - SoftDevice calibration timer interval. -+#ifndef NRF_SDH_CLOCK_LF_RC_CTIV -+#define NRF_SDH_CLOCK_LF_RC_CTIV 0 -+#endif -+ -+// NRF_SDH_CLOCK_LF_RC_TEMP_CTIV - SoftDevice calibration timer interval under constant temperature. -+// How often (in number of calibration intervals) the RC oscillator shall be calibrated -+// if the temperature has not changed. -+ -+#ifndef NRF_SDH_CLOCK_LF_RC_TEMP_CTIV -+#define NRF_SDH_CLOCK_LF_RC_TEMP_CTIV 0 -+#endif -+ -+// NRF_SDH_CLOCK_LF_ACCURACY - External clock accuracy used in the LL to compute timing. -+ -+// <0=> NRF_CLOCK_LF_ACCURACY_250_PPM -+// <1=> NRF_CLOCK_LF_ACCURACY_500_PPM -+// <2=> NRF_CLOCK_LF_ACCURACY_150_PPM -+// <3=> NRF_CLOCK_LF_ACCURACY_100_PPM -+// <4=> NRF_CLOCK_LF_ACCURACY_75_PPM -+// <5=> NRF_CLOCK_LF_ACCURACY_50_PPM -+// <6=> NRF_CLOCK_LF_ACCURACY_30_PPM -+// <7=> NRF_CLOCK_LF_ACCURACY_20_PPM -+// <8=> NRF_CLOCK_LF_ACCURACY_10_PPM -+// <9=> NRF_CLOCK_LF_ACCURACY_5_PPM -+// <10=> NRF_CLOCK_LF_ACCURACY_2_PPM -+// <11=> NRF_CLOCK_LF_ACCURACY_1_PPM -+ -+#ifndef NRF_SDH_CLOCK_LF_ACCURACY -+#define NRF_SDH_CLOCK_LF_ACCURACY 7 -+#endif -+ -+// -+//========================================================== -+ -+// SDH Observers - Observers and priority levels -+ -+//========================================================== -+// NRF_SDH_REQ_OBSERVER_PRIO_LEVELS - Total number of priority levels for request observers. -+// This setting configures the number of priority levels available for the SoftDevice request event handlers. -+// The priority level of a handler determines the order in which it receives events, with respect to other handlers. -+ -+#ifndef NRF_SDH_REQ_OBSERVER_PRIO_LEVELS -+#define NRF_SDH_REQ_OBSERVER_PRIO_LEVELS 2 -+#endif -+ -+// NRF_SDH_STATE_OBSERVER_PRIO_LEVELS - Total number of priority levels for state observers. -+// This setting configures the number of priority levels available for the SoftDevice state event handlers. -+// The priority level of a handler determines the order in which it receives events, with respect to other handlers. -+ -+#ifndef NRF_SDH_STATE_OBSERVER_PRIO_LEVELS -+#define NRF_SDH_STATE_OBSERVER_PRIO_LEVELS 2 -+#endif -+ -+// NRF_SDH_STACK_OBSERVER_PRIO_LEVELS - Total number of priority levels for stack event observers. -+// This setting configures the number of priority levels available for the SoftDevice stack event handlers (ANT, BLE, SoC). -+// The priority level of a handler determines the order in which it receives events, with respect to other handlers. -+ -+#ifndef NRF_SDH_STACK_OBSERVER_PRIO_LEVELS -+#define NRF_SDH_STACK_OBSERVER_PRIO_LEVELS 2 -+#endif -+ -+ -+// State Observers priorities - Invididual priorities -+ -+//========================================================== -+// CLOCK_CONFIG_STATE_OBSERVER_PRIO -+// Priority with which state events are dispatched to the Clock driver. -+ -+#ifndef CLOCK_CONFIG_STATE_OBSERVER_PRIO -+#define CLOCK_CONFIG_STATE_OBSERVER_PRIO 0 -+#endif -+ -+// POWER_CONFIG_STATE_OBSERVER_PRIO -+// Priority with which state events are dispatched to the Power driver. -+ -+#ifndef POWER_CONFIG_STATE_OBSERVER_PRIO -+#define POWER_CONFIG_STATE_OBSERVER_PRIO 0 -+#endif -+ -+// RNG_CONFIG_STATE_OBSERVER_PRIO -+// Priority with which state events are dispatched to this module. -+ -+#ifndef RNG_CONFIG_STATE_OBSERVER_PRIO -+#define RNG_CONFIG_STATE_OBSERVER_PRIO 0 -+#endif -+ -+// -+//========================================================== -+ -+// Stack Event Observers priorities - Invididual priorities -+ -+//========================================================== -+// NRF_SDH_ANT_STACK_OBSERVER_PRIO -+// This setting configures the priority with which ANT events are processed with respect to other events coming from the stack. -+// Modify this setting if you need to have ANT events dispatched before or after other stack events, such as BLE or SoC. -+// Zero is the highest priority. -+ -+#ifndef NRF_SDH_ANT_STACK_OBSERVER_PRIO -+#define NRF_SDH_ANT_STACK_OBSERVER_PRIO 0 -+#endif -+ -+// NRF_SDH_BLE_STACK_OBSERVER_PRIO -+// This setting configures the priority with which BLE events are processed with respect to other events coming from the stack. -+// Modify this setting if you need to have BLE events dispatched before or after other stack events, such as ANT or SoC. -+// Zero is the highest priority. -+ -+#ifndef NRF_SDH_BLE_STACK_OBSERVER_PRIO -+#define NRF_SDH_BLE_STACK_OBSERVER_PRIO 0 -+#endif -+ -+// NRF_SDH_SOC_STACK_OBSERVER_PRIO -+// This setting configures the priority with which SoC events are processed with respect to other events coming from the stack. -+// Modify this setting if you need to have SoC events dispatched before or after other stack events, such as ANT or BLE. -+// Zero is the highest priority. -+ -+#ifndef NRF_SDH_SOC_STACK_OBSERVER_PRIO -+#define NRF_SDH_SOC_STACK_OBSERVER_PRIO 0 -+#endif -+ -+// -+//========================================================== -+ -+// -+//========================================================== -+ -+ -+// -+ -+// NRF_SDH_SOC_ENABLED - nrf_sdh_soc - SoftDevice SoC event handler -+//========================================================== -+#ifndef NRF_SDH_SOC_ENABLED -+#define NRF_SDH_SOC_ENABLED 1 -+#endif -+// SoC Observers - Observers and priority levels -+ -+//========================================================== -+// NRF_SDH_SOC_OBSERVER_PRIO_LEVELS - Total number of priority levels for SoC observers. -+// This setting configures the number of priority levels available for the SoC event handlers. -+// The priority level of a handler determines the order in which it receives events, with respect to other handlers. -+ -+#ifndef NRF_SDH_SOC_OBSERVER_PRIO_LEVELS -+#define NRF_SDH_SOC_OBSERVER_PRIO_LEVELS 2 -+#endif -+ -+// SoC Observers priorities - Invididual priorities -+ -+//========================================================== -+// BLE_ADV_SOC_OBSERVER_PRIO -+// Priority with which SoC events are dispatched to the Advertising module. -+ -+#ifndef BLE_ADV_SOC_OBSERVER_PRIO -+#define BLE_ADV_SOC_OBSERVER_PRIO 1 -+#endif -+ -+// BLE_DFU_SOC_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the DFU Service. -+ -+#ifndef BLE_DFU_SOC_OBSERVER_PRIO -+#define BLE_DFU_SOC_OBSERVER_PRIO 1 -+#endif -+ -+// CLOCK_CONFIG_SOC_OBSERVER_PRIO -+// Priority with which SoC events are dispatched to the Clock driver. -+ -+#ifndef CLOCK_CONFIG_SOC_OBSERVER_PRIO -+#define CLOCK_CONFIG_SOC_OBSERVER_PRIO 0 -+#endif -+ -+// POWER_CONFIG_SOC_OBSERVER_PRIO -+// Priority with which SoC events are dispatched to the Power driver. -+ -+#ifndef POWER_CONFIG_SOC_OBSERVER_PRIO -+#define POWER_CONFIG_SOC_OBSERVER_PRIO 0 -+#endif -+ -+// -+//========================================================== -+ -+// -+//========================================================== -+ -+ -+// -+ -+// -+//========================================================== -+ -+// <<< end of configuration section >>> -+#endif //SDK_CONFIG_H -+ -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/iar/ble_connectivity_iar_nRF5x.icf b/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/iar/ble_connectivity_iar_nRF5x.icf ---- a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/iar/ble_connectivity_iar_nRF5x.icf 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/iar/ble_connectivity_iar_nRF5x.icf 2018-07-18 17:28:06.000000000 +0200 -@@ -0,0 +1,36 @@ -+/*###ICF### Section handled by ICF editor, don't touch! ****/ -+/*-Editor annotation file-*/ -+/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ -+/*-Specials-*/ -+define symbol __ICFEDIT_intvec_start__ = 0x1f000; -+/*-Memory Regions-*/ -+define symbol __ICFEDIT_region_ROM_start__ = 0x1f000; -+define symbol __ICFEDIT_region_ROM_end__ = 0x7ffff; -+define symbol __ICFEDIT_region_RAM_start__ = 0x2000b9c0; -+define symbol __ICFEDIT_region_RAM_end__ = 0x2000ffff; -+export symbol __ICFEDIT_region_RAM_start__; -+export symbol __ICFEDIT_region_RAM_end__; -+/*-Sizes-*/ -+define symbol __ICFEDIT_size_cstack__ = 2048; -+define symbol __ICFEDIT_size_heap__ = 512; -+/**** End of ICF editor section. ###ICF###*/ -+ -+define memory mem with size = 4G; -+define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; -+define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; -+ -+define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; -+define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; -+define block RO_END with alignment = 8, size = 0 { }; -+ -+initialize by copy { readwrite }; -+do not initialize { section .noinit }; -+ -+keep { section .intvec }; -+place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; -+place in ROM_region { readonly, -+ block RO_END }; -+place in RAM_region { readwrite, -+ block CSTACK, -+ block HEAP }; -+ -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/iar/ble_connectivity_s132v3_hci_pca10040.ewd b/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/iar/ble_connectivity_s132v3_hci_pca10040.ewd ---- a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/iar/ble_connectivity_s132v3_hci_pca10040.ewd 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/iar/ble_connectivity_s132v3_hci_pca10040.ewd 2018-07-18 17:28:06.000000000 +0200 -@@ -0,0 +1,1350 @@ -+ -+ -+ -+ 2 -+ nrf52832_xxaa -+ -+ ARM -+ -+ 0 -+ -+ C-SPY -+ 2 -+ -+ 26 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ARMSIM_ID -+ 2 -+ -+ 1 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ ANGEL_ID -+ 2 -+ -+ 0 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ CMSISDAP_ID -+ 2 -+ -+ 2 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ GDBSERVER_ID -+ 2 -+ -+ 0 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ IARROM_ID -+ 2 -+ -+ 1 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ IJET_ID -+ 2 -+ -+ 3 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ JLINK_ID -+ 2 -+ -+ 15 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ LMIFTDI_ID -+ 2 -+ -+ 2 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ MACRAIGOR_ID -+ 2 -+ -+ 3 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ PEMICRO_ID -+ 2 -+ -+ 1 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ RDI_ID -+ 2 -+ -+ 2 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ STLINK_ID -+ 2 -+ -+ 2 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ THIRDPARTY_ID -+ 2 -+ -+ 0 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ XDS100_ID -+ 2 -+ -+ 2 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin -+ 0 -+ -+ -+ $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin -+ 1 -+ -+ -+ $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin -+ 0 -+ -+ -+ $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin -+ 1 -+ -+ -+ $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin -+ 0 -+ -+ -+ -+ -+ -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/iar/ble_connectivity_s132v3_hci_pca10040.ewp b/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/iar/ble_connectivity_s132v3_hci_pca10040.ewp ---- a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/iar/ble_connectivity_s132v3_hci_pca10040.ewp 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/iar/ble_connectivity_s132v3_hci_pca10040.ewp 2018-07-18 17:28:06.000000000 +0200 -@@ -0,0 +1,1154 @@ -+ -+ -+ -+ -+ 2 -+ nrf52832_xxaa -+ -+ ARM -+ -+ 0 -+ -+ General -+ 3 -+ -+ 22 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ICCARM -+ 2 -+ -+ 31 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ AARM -+ 2 -+ -+ 9 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ OBJCOPY -+ 0 -+ -+ 1 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ CUSTOM -+ 3 -+ -+ -+ -+ -+ -+ -+ BICOMP -+ 0 -+ -+ -+ -+ BUILDACTION -+ 1 -+ -+ -+ -+ -+ -+ -+ ILINK -+ 0 -+ -+ 16 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ IARCHIVE -+ 0 -+ -+ 0 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ BILINK -+ 0 -+ -+ -+ -+ nRF_Log -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_backend_rtt.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_backend_serial.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_default_backends.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_frontend.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_str_formatter.c -+ nRF_Libraries -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\util\app_error.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\util\app_error_handler_iar.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\util\app_error_weak.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\scheduler\app_scheduler.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\timer\app_timer.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\util\app_util_platform.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\crc16\crc16.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\util\nrf_assert.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\atomic\nrf_atomic.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\balloc\nrf_balloc.c -+ $PROJ_DIR$\..\..\..\..\..\..\external\fprintf\nrf_fprintf.c -+ $PROJ_DIR$\..\..\..\..\..\..\external\fprintf\nrf_fprintf_format.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\experimental_memobj\nrf_memobj.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\queue\nrf_queue.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\experimental_section_vars\nrf_section_iter.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\strerror\nrf_strerror.c -+ None -+ $PROJ_DIR$\..\..\..\..\..\..\modules\nrfx\mdk\iar_startup_nrf52.s -+ $PROJ_DIR$\..\..\..\..\..\..\modules\nrfx\mdk\system_nrf52.c -+ Board Definition -+ $PROJ_DIR$\..\..\..\..\..\..\components\boards\boards.c -+ nRF_Serialization -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\common\ble_dtm_init.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_event_enc.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_evt_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gap_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gap_evt_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gap_struct_serialization.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gatt_struct_serialization.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gattc_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gattc_evt_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gattc_struct_serialization.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gatts_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gatts_evt_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gatts_struct_serialization.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_l2cap_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_l2cap_evt_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_l2cap_struct_serialization.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\ble_serialization.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_struct_serialization.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\cond_field_serialization.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_gap_sec_keys.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_l2cap_sdu_pool.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_user_mem.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\common\conn_mw.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gap.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gattc.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gatts.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_l2cap.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\common\conn_mw_nrf_soc.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\hal\dtm_uart.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\nrf_soc_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\struct_ser\ble\nrf_soc_struct_serialization.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\ser_conn_cmd_decoder.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\ser_conn_dtm_cmd_decoder.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\ser_conn_error_handling.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\ser_conn_event_encoder.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\ser_conn_handlers.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\ser_conn_pkt_decoder.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\ser_conn_reset_cmd_decoder.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\ser_dbg_sd_str.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\transport\ser_hal_transport.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\transport\ser_phy\ser_phy_hci.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\transport\ser_phy\ser_phy_hci_slip.c -+ nRF_Drivers -+ $PROJ_DIR$\..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_clock.c -+ $PROJ_DIR$\..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_uart.c -+ $PROJ_DIR$\..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_clock.c -+ $PROJ_DIR$\..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_power_clock.c -+ $PROJ_DIR$\..\..\..\..\..\..\modules\nrfx\drivers\src\prs\nrfx_prs.c -+ $PROJ_DIR$\..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_uart.c -+ $PROJ_DIR$\..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_uarte.c -+ Application -+ $PROJ_DIR$\..\..\..\main.c -+ $PROJ_DIR$\..\config\sdk_config.h -+ nRF_Segger_RTT -+ $PROJ_DIR$\..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT.c -+ $PROJ_DIR$\..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT_Syscalls_IAR.c -+ $PROJ_DIR$\..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT_printf.c -+ nRF_BLE -+ $PROJ_DIR$\..\..\..\..\..\..\components\ble\common\ble_advdata.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\ble\ble_dtm\ble_dtm.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\ble\ble_dtm\ble_dtm_hw_nrf52.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\ble\common\ble_srv_common.c -+ nRF_SoftDevice -+ $PROJ_DIR$\..\..\..\..\..\..\components\softdevice\common\nrf_sdh.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\softdevice\common\nrf_sdh_ble.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\softdevice\common\nrf_sdh_soc.c -+ -+ -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_s132v3_hci_pca10040.emProject b/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_s132v3_hci_pca10040.emProject ---- a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_s132v3_hci_pca10040.emProject 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_s132v3_hci_pca10040.emProject 2018-07-18 17:28:12.000000000 +0200 -@@ -0,0 +1,152 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_s132v3_hci_pca10040.emSession b/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_s132v3_hci_pca10040.emSession ---- a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_s132v3_hci_pca10040.emSession 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_s132v3_hci_pca10040.emSession 2018-07-18 17:28:12.000000000 +0200 -@@ -0,0 +1,7 @@ -+ -+ -+ -+ -+ -+ -+ -\ No newline at end of file -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/flash_placement.xml b/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/flash_placement.xml ---- a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/flash_placement.xml 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/flash_placement.xml 2018-07-18 17:28:12.000000000 +0200 -@@ -0,0 +1,46 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/arm4/ble_connectivity_s132v5_hci_pca10040.uvopt b/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/arm4/ble_connectivity_s132v5_hci_pca10040.uvopt ---- a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/arm4/ble_connectivity_s132v5_hci_pca10040.uvopt 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/arm4/ble_connectivity_s132v5_hci_pca10040.uvopt 2018-07-18 17:27:48.000000000 +0200 -@@ -0,0 +1,51 @@ -+ -+ -+ -+ 1.0 -+ -+
### uVision Project, (C) Keil Software
-+ -+ nrf52832_xxaa -+ 0x4 -+ ARM-ADS -+ -+ 1 -+ -+ Segger\JL2CM3.dll -+ -+ -+ -+ 0 -+ JL2CM3 -+ -O78 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC2000 -FN1 -FF0nrf52xxx -FS00 -FL0200000 -FF1nrf52xxx_uicr.flm -FS110001000 -FL11000 -+ -+ -+ 0 -+ UL2CM3 -+ UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0nrf52xxx -FS00 -FL0200000) -+ -+ -+ -+ -+ flash_s132_nrf52_5.0.0_softdevice -+ 0x4 -+ ARM-ADS -+ -+ Segger\JL2CM3.dll -+ -+ -+ -+ 0 -+ JL2CM3 -+ -O78 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC2000 -FN1 -FF0nrf52xxx_ecb -FS00 -FL0200000 -FF1nrf52xxx_uicr.flm -FS110001000 -FL11000 -+ -+ -+ 0 -+ UL2CM3 -+ UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0nrf52xxx -FS00 -FL0200000) -+ -+ -+ -+
-+ -+ -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/arm4/ble_connectivity_s132v5_hci_pca10040.uvproj b/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/arm4/ble_connectivity_s132v5_hci_pca10040.uvproj ---- a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/arm4/ble_connectivity_s132v5_hci_pca10040.uvproj 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/arm4/ble_connectivity_s132v5_hci_pca10040.uvproj 2018-07-18 17:27:48.000000000 +0200 -@@ -0,0 +1,8248 @@ -+ -+ -+ -+ 1.1 -+ -+
### uVision Project, (C) Keil Software
-+ -+ -+ nrf52832_xxaa -+ 0x4 -+ ARM-ADS -+ -+ -+ nRF52832_xxAA -+ Nordic Semiconductor -+ IROM(0x00000000,0x80000) IRAM(0x20000000,0x10000) CPUTYPE("Cortex-M4") FPU2 CLOCK(64000000) ELITTLE -+ -+ -+ UL2CM3(-UM0364FCE -O78 -S0 -C0 -TO18 -TC16000000 -TP21 -TDS800D -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC2000 -FN1 -FF0nRF52xxx -FS00 -FL0200000) -+ 0 -+ core.h -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ..\..\..\..\..\..\modules\nrfx\mdk\nrf52.svd -+ 0 -+ 0 -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ -+ .\_build\ -+ nrf52832_xxaa -+ 1 -+ 0 -+ 1 -+ 1 -+ 1 -+ .\_build\ -+ 1 -+ 0 -+ 0 -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ 0 -+ -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 3 -+ -+ -+ 1 -+ -+ -+ -+ -+ -+ -+ SARMCM3.DLL -+ -MPU -+ TCM.DLL -+ -pCM4 -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 16 -+ -+ -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ -+ -+ 1 -+ 1 -+ 0 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ 0 -+ -+ 0 -+ -1 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Segger\JL2CM3.dll -+ -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 1 -+ 1 -+ 4099 -+ -+ 1 -+ Segger\JL2CM3.dll -+ -+ -+ -+ -+ -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ 1 -+ 0 -+ 1 -+ 1 -+ 0 -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 0 -+ "Cortex-M4" -+ -+ 0 -+ 0 -+ 0 -+ 1 -+ 1 -+ 0 -+ 0 -+ 2 -+ 0 -+ 0 -+ 8 -+ 1 -+ 0 -+ 0 -+ 3 -+ 5 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x20000000 -+ 0x10000 -+ -+ -+ 1 -+ 0x0 -+ 0x80000 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x23000 -+ 0x5d000 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x2000b380 -+ 0x4c80 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ -+ -+ -+ 1 -+ 4 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ --c99 --reduce_paths -+ BLE_STACK_SUPPORT_REQD BOARD_PCA10040 BSP_DEFINES_ONLY CONFIG_GPIO_AS_PINRESET FLOAT_ABI_HARD HCI_TIMER2 NRF52 NRF52832_XXAA NRF52_PAN_74 NRF_SD_BLE_API_VERSION=5 S132 SER_CONNECTIVITY SOFTDEVICE_PRESENT SWI_DISABLE0 __HEAP_SIZE=512 __STACK_SIZE=2048 -+ -+ ..\..\..\config\ble_connectivity_s132v5_hci_pca10040;..\..\..\config;..\..\..\..\..\..\components;..\..\..\..\..\..\components\ble\ble_dtm;..\..\..\..\..\..\components\ble\common;..\..\..\..\..\..\components\boards;..\..\..\..\..\..\components\libraries\atomic;..\..\..\..\..\..\components\libraries\balloc;..\..\..\..\..\..\components\libraries\bsp;..\..\..\..\..\..\components\libraries\crc16;..\..\..\..\..\..\components\libraries\delay;..\..\..\..\..\..\components\libraries\experimental_log;..\..\..\..\..\..\components\libraries\experimental_log\src;..\..\..\..\..\..\components\libraries\experimental_memobj;..\..\..\..\..\..\components\libraries\experimental_section_vars;..\..\..\..\..\..\components\libraries\queue;..\..\..\..\..\..\components\libraries\scheduler;..\..\..\..\..\..\components\libraries\strerror;..\..\..\..\..\..\components\libraries\timer;..\..\..\..\..\..\components\libraries\util;..\..\..\..\..\..\components\serialization\common;..\..\..\..\..\..\components\serialization\common\struct_ser\ble;..\..\..\..\..\..\components\serialization\common\transport;..\..\..\..\..\..\components\serialization\common\transport\ser_phy;..\..\..\..\..\..\components\serialization\common\transport\ser_phy\config;..\..\..\..\..\..\components\serialization\connectivity;..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware;..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers;..\..\..\..\..\..\components\serialization\connectivity\codecs\common;..\..\..\..\..\..\components\serialization\connectivity\hal;..\..\..\..\..\..\components\softdevice\common;..\..\..\..\..\..\components\softdevice\s132v5\headers;..\..\..\..\..\..\components\softdevice\s132v5\headers\nrf52;..\..\..\..\..\..\external\fprintf;..\..\..\..\..\..\external\segger_rtt;..\..\..\..\..\..\integration\nrfx;..\..\..\..\..\..\integration\nrfx\legacy;..\..\..\..\..\..\modules\nrfx;..\..\..\..\..\..\modules\nrfx\drivers\include;..\..\..\..\..\..\modules\nrfx\hal;..\..\..\..\..\..\modules\nrfx\mdk;..\config -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ --cpreproc_opts=-DBLE_STACK_SUPPORT_REQD,-DBOARD_PCA10040,-DBSP_DEFINES_ONLY,-DCONFIG_GPIO_AS_PINRESET,-DFLOAT_ABI_HARD,-DHCI_TIMER2,-DNRF52,-DNRF52832_XXAA,-DNRF52_PAN_74,-DNRF_SD_BLE_API_VERSION=5,-DS132,-DSER_CONNECTIVITY,-DSOFTDEVICE_PRESENT,-DSWI_DISABLE0,-D__HEAP_SIZE=512,-D__STACK_SIZE=2048 -+ BLE_STACK_SUPPORT_REQD BOARD_PCA10040 BSP_DEFINES_ONLY CONFIG_GPIO_AS_PINRESET FLOAT_ABI_HARD HCI_TIMER2 NRF52 NRF52832_XXAA NRF52_PAN_74 NRF_SD_BLE_API_VERSION=5 S132 SER_CONNECTIVITY SOFTDEVICE_PRESENT SWI_DISABLE0 __HEAP_SIZE=512 __STACK_SIZE=2048 -+ -+ ..\..\..\config\ble_connectivity_s132v5_hci_pca10040;..\..\..\config;..\..\..\..\..\..\components;..\..\..\..\..\..\components\ble\ble_dtm;..\..\..\..\..\..\components\ble\common;..\..\..\..\..\..\components\boards;..\..\..\..\..\..\components\libraries\atomic;..\..\..\..\..\..\components\libraries\balloc;..\..\..\..\..\..\components\libraries\bsp;..\..\..\..\..\..\components\libraries\crc16;..\..\..\..\..\..\components\libraries\delay;..\..\..\..\..\..\components\libraries\experimental_log;..\..\..\..\..\..\components\libraries\experimental_log\src;..\..\..\..\..\..\components\libraries\experimental_memobj;..\..\..\..\..\..\components\libraries\experimental_section_vars;..\..\..\..\..\..\components\libraries\queue;..\..\..\..\..\..\components\libraries\scheduler;..\..\..\..\..\..\components\libraries\strerror;..\..\..\..\..\..\components\libraries\timer;..\..\..\..\..\..\components\libraries\util;..\..\..\..\..\..\components\serialization\common;..\..\..\..\..\..\components\serialization\common\struct_ser\ble;..\..\..\..\..\..\components\serialization\common\transport;..\..\..\..\..\..\components\serialization\common\transport\ser_phy;..\..\..\..\..\..\components\serialization\common\transport\ser_phy\config;..\..\..\..\..\..\components\serialization\connectivity;..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware;..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers;..\..\..\..\..\..\components\serialization\connectivity\codecs\common;..\..\..\..\..\..\components\serialization\connectivity\hal;..\..\..\..\..\..\components\softdevice\common;..\..\..\..\..\..\components\softdevice\s132v5\headers;..\..\..\..\..\..\components\softdevice\s132v5\headers\nrf52;..\..\..\..\..\..\external\fprintf;..\..\..\..\..\..\external\segger_rtt;..\..\..\..\..\..\integration\nrfx;..\..\..\..\..\..\integration\nrfx\legacy;..\..\..\..\..\..\modules\nrfx;..\..\..\..\..\..\modules\nrfx\drivers\include;..\..\..\..\..\..\modules\nrfx\hal;..\..\..\..\..\..\modules\nrfx\mdk;..\config -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0x00000000 -+ 0x00000000 -+ -+ -+ -+ --diag_suppress 6330 -+ -+ -+ -+ -+ -+ -+ None -+ -+ arm_startup_nrf52.s -+ 2 -+ ..\..\..\..\..\..\modules\nrfx\mdk\arm_startup_nrf52.s -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ system_nrf52.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\mdk\system_nrf52.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Application -+ -+ main.c -+ 1 -+ ..\..\..\main.c -+ sdk_config.h -+ 5 -+ ..\config\sdk_config.h -+ -+ Board Definition -+ -+ boards.c -+ 1 -+ ..\..\..\..\..\..\components\boards\boards.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_BLE -+ -+ ble_advdata.c -+ 1 -+ ..\..\..\..\..\..\components\ble\common\ble_advdata.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_conn_params.c -+ 1 -+ ..\..\..\..\..\..\components\ble\common\ble_conn_params.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm.c -+ 1 -+ ..\..\..\..\..\..\components\ble\ble_dtm\ble_dtm.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm_hw_nrf52.c -+ 1 -+ ..\..\..\..\..\..\components\ble\ble_dtm\ble_dtm_hw_nrf52.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_srv_common.c -+ 1 -+ ..\..\..\..\..\..\components\ble\common\ble_srv_common.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Drivers -+ -+ nrf_drv_clock.c -+ 1 -+ ..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_drv_uart.c -+ 1 -+ ..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_clock.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_power_clock.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_power_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_prs.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\prs\nrfx_prs.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_uart.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_uarte.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_uarte.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Libraries -+ -+ app_error.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_error_handler_keil.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error_handler_keil.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_error_weak.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error_weak.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_scheduler.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\scheduler\app_scheduler.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_timer.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\timer\app_timer.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_util_platform.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_util_platform.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ crc16.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\crc16\crc16.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_assert.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\nrf_assert.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_atomic.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\atomic\nrf_atomic.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_balloc.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\balloc\nrf_balloc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_fprintf.c -+ 1 -+ ..\..\..\..\..\..\external\fprintf\nrf_fprintf.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_fprintf_format.c -+ 1 -+ ..\..\..\..\..\..\external\fprintf\nrf_fprintf_format.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_memobj.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_memobj\nrf_memobj.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_queue.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\queue\nrf_queue.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_section_iter.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_section_vars\nrf_section_iter.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_strerror.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\strerror\nrf_strerror.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Log -+ -+ nrf_log_backend_rtt.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_backend_rtt.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_backend_serial.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_backend_serial.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_default_backends.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_default_backends.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_frontend.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_frontend.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_str_formatter.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_str_formatter.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Segger_RTT -+ -+ SEGGER_RTT.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ SEGGER_RTT_Syscalls_KEIL.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT_Syscalls_KEIL.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ SEGGER_RTT_printf.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT_printf.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Serialization -+ -+ ble_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm_init.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\ble_dtm_init.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_event_enc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_event_enc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gap_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gap_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gap_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatt_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gatt_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gattc_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gattc_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gattc_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gatts_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gatts_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gatts_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_l2cap_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_l2cap_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_l2cap_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\ble_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ cond_field_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\cond_field_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_gap_sec_keys.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_gap_sec_keys.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_l2cap_sdu_pool.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_l2cap_sdu_pool.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_user_mem.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_user_mem.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\conn_mw.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gap.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gap.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gattc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gattc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gatts.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gatts.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_l2cap.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_l2cap.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_nrf_soc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\conn_mw_nrf_soc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ dtm_uart.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\hal\dtm_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_soc_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\nrf_soc_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_soc_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\nrf_soc_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_dtm_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_dtm_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_error_handling.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_error_handling.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_event_encoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_event_encoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_handlers.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_handlers.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_pkt_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_pkt_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_reset_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_reset_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_dbg_sd_str.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\ser_dbg_sd_str.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_hal_transport.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_hal_transport.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_phy_hci.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_phy\ser_phy_hci.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_phy_hci_slip.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_phy\ser_phy_hci_slip.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_SoftDevice -+ -+ nrf_sdh.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_sdh_ble.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh_ble.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_sdh_soc.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh_soc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ flash_s132_nrf52_5.0.0_softdevice -+ 0x4 -+ ARM-ADS -+ -+ -+ nRF52832_xxAA -+ Nordic Semiconductor -+ IROM(0x00000000,0x80000) IRAM(0x20000000,0x10000) CPUTYPE("Cortex-M4") FPU2 CLOCK(64000000) ELITTLE -+ -+ -+ UL2CM3(-UM0364FCE -O78 -S0 -C0 -TO18 -TC16000000 -TP21 -TDS800D -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC2000 -FN1 -FF0nRF52xxx -FS00 -FL0200000) -+ 0 -+ core.h -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ -+ ..\..\..\..\..\..\components\softdevice\s132v5\hex\ -+ s132_nrf52_5.0.0_softdevice.hex -+ 1 -+ 0 -+ 1 -+ 1 -+ 1 -+ .\_build\ -+ 1 -+ 0 -+ 0 -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ 0 -+ -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 3 -+ -+ -+ 1 -+ -+ -+ -+ -+ -+ -+ SARMCM3.DLL -+ -MPU -+ TCM.DLL -+ -pCM4 -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 16 -+ -+ -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ -+ -+ 1 -+ 1 -+ 0 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ 0 -+ -+ 0 -+ -1 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Segger\JL2CM3.dll -+ -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 1 -+ 1 -+ 4099 -+ -+ 1 -+ Segger\JL2CM3.dll -+ -+ -+ -+ -+ -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ 1 -+ 0 -+ 1 -+ 1 -+ 0 -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 0 -+ "" -+ -+ 0 -+ 0 -+ 0 -+ 1 -+ 1 -+ 0 -+ 0 -+ 2 -+ 0 -+ 0 -+ 8 -+ 1 -+ 0 -+ 0 -+ 3 -+ 5 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x20000000 -+ 0x10000 -+ -+ -+ 1 -+ 0x0 -+ 0x80000 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x23000 -+ 0x5d000 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x2000b380 -+ 0x4c80 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ -+ -+ -+ 1 -+ 4 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ --c99 --reduce_paths -+ __HEAP_SIZE=512 __STACK_SIZE=2048 -+ -+ ..\..\..\config\ble_connectivity_s132v5_hci_pca10040;..\..\..\config;..\config -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ --cpreproc_opts=-D__HEAP_SIZE=512,-D__STACK_SIZE=2048 -+ __HEAP_SIZE=512 __STACK_SIZE=2048 -+ -+ ..\..\..\config\ble_connectivity_s132v5_hci_pca10040;..\..\..\config;..\config -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0x00000000 -+ 0x00000000 -+ -+ -+ -+ --diag_suppress 6330 -+ -+ -+ -+ -+ -+ -+ None -+ -+ arm_startup_nrf52.s -+ 2 -+ ..\..\..\..\..\..\modules\nrfx\mdk\arm_startup_nrf52.s -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ system_nrf52.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\mdk\system_nrf52.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Application -+ -+ main.c -+ 1 -+ ..\..\..\main.c -+ sdk_config.h -+ 5 -+ ..\config\sdk_config.h -+ -+ Board Definition -+ -+ boards.c -+ 1 -+ ..\..\..\..\..\..\components\boards\boards.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_BLE -+ -+ ble_advdata.c -+ 1 -+ ..\..\..\..\..\..\components\ble\common\ble_advdata.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_conn_params.c -+ 1 -+ ..\..\..\..\..\..\components\ble\common\ble_conn_params.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm.c -+ 1 -+ ..\..\..\..\..\..\components\ble\ble_dtm\ble_dtm.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm_hw_nrf52.c -+ 1 -+ ..\..\..\..\..\..\components\ble\ble_dtm\ble_dtm_hw_nrf52.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_srv_common.c -+ 1 -+ ..\..\..\..\..\..\components\ble\common\ble_srv_common.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Drivers -+ -+ nrf_drv_clock.c -+ 1 -+ ..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_drv_uart.c -+ 1 -+ ..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_clock.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_power_clock.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_power_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_prs.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\prs\nrfx_prs.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_uart.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_uarte.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_uarte.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Libraries -+ -+ app_error.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_error_handler_keil.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error_handler_keil.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_error_weak.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error_weak.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_scheduler.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\scheduler\app_scheduler.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_timer.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\timer\app_timer.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_util_platform.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_util_platform.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ crc16.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\crc16\crc16.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_assert.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\nrf_assert.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_atomic.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\atomic\nrf_atomic.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_balloc.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\balloc\nrf_balloc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_fprintf.c -+ 1 -+ ..\..\..\..\..\..\external\fprintf\nrf_fprintf.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_fprintf_format.c -+ 1 -+ ..\..\..\..\..\..\external\fprintf\nrf_fprintf_format.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_memobj.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_memobj\nrf_memobj.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_queue.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\queue\nrf_queue.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_section_iter.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_section_vars\nrf_section_iter.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_strerror.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\strerror\nrf_strerror.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Log -+ -+ nrf_log_backend_rtt.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_backend_rtt.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_backend_serial.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_backend_serial.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_default_backends.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_default_backends.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_frontend.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_frontend.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_str_formatter.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_str_formatter.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Segger_RTT -+ -+ SEGGER_RTT.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ SEGGER_RTT_Syscalls_KEIL.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT_Syscalls_KEIL.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ SEGGER_RTT_printf.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT_printf.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Serialization -+ -+ ble_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm_init.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\ble_dtm_init.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_event_enc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_event_enc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gap_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gap_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gap_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatt_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gatt_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gattc_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gattc_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gattc_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gatts_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gatts_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gatts_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_l2cap_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_l2cap_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_l2cap_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\ble_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ cond_field_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\cond_field_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_gap_sec_keys.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_gap_sec_keys.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_l2cap_sdu_pool.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_l2cap_sdu_pool.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_user_mem.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_user_mem.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\conn_mw.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gap.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gap.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gattc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gattc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gatts.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gatts.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_l2cap.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_l2cap.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_nrf_soc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\conn_mw_nrf_soc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ dtm_uart.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\hal\dtm_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_soc_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\nrf_soc_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_soc_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\nrf_soc_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_dtm_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_dtm_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_error_handling.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_error_handling.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_event_encoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_event_encoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_handlers.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_handlers.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_pkt_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_pkt_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_reset_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_reset_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_dbg_sd_str.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\ser_dbg_sd_str.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_hal_transport.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_hal_transport.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_phy_hci.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_phy\ser_phy_hci.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_phy_hci_slip.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_phy\ser_phy_hci_slip.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_SoftDevice -+ -+ nrf_sdh.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_sdh_ble.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh_ble.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_sdh_soc.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh_soc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+
-diff -u -r -N a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/arm5_no_packs/ble_connectivity_s132v5_hci_pca10040.uvoptx b/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/arm5_no_packs/ble_connectivity_s132v5_hci_pca10040.uvoptx ---- a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/arm5_no_packs/ble_connectivity_s132v5_hci_pca10040.uvoptx 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/arm5_no_packs/ble_connectivity_s132v5_hci_pca10040.uvoptx 2018-07-18 17:27:54.000000000 +0200 -@@ -0,0 +1,221 @@ -+ -+ -+ -+ 1.0 -+ -+
### uVision Project, (C) Keil Software
-+ -+ nrf52832_xxaa -+ 0x4 -+ ARM-ADS -+ -+ -+ 1 -+ 1 -+ 0 -+ 1 -+ -+ -+ 1 -+ 65535 -+ 0 -+ 0 -+ 0 -+ -+ -+ 79 -+ 66 -+ 8 -+ .\_build\ -+ -+ 0 -+ -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ 0 -+ 1 -+ 1 -+ 1 -+ 0 -+ 0 -+ 7 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Segger\JL2CM3.dll -+ -+ -+ -+ 0 -+ JL2CM3 -+ -U408001579 -O78 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC2000 -FN2 -FF0nrf52xxx.flm -FS00 -FL0200000 -FP0($$Device:nRF52832_xxAA$Flash\nrf52xxx.flm) -FF1nrf52xxx_uicr -FS110001000 -FL11000 -FP1($$Device:nRF52832_xxAA$Flash\nrf52xxx_uicr.flm) -+ -+ -+ 0 -+ UL2CM3 -+ UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0nrf52xxx -FS00 -FL0200000 -FP0($$Device:nRF52832_xxAA$Flash\nrf52xxx)) -+ -+ -+ -+ -+ 0 -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ -+ -+ -+ -+ flash_s132_nrf52_5.0.0_softdevice -+ 0x4 -+ ARM-ADS -+ -+ -+ 1 -+ 1 -+ 0 -+ 1 -+ -+ -+ 1 -+ 65535 -+ 0 -+ 0 -+ 0 -+ -+ -+ 79 -+ 66 -+ 8 -+ .\_build\ -+ -+ 0 -+ -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ 0 -+ 1 -+ 1 -+ 1 -+ 0 -+ 0 -+ 7 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Segger\JL2CM3.dll -+ -+ -+ -+ 0 -+ JL2CM3 -+ -U408001579 -O78 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC2000 -FN2 -FF0nrf52xxx.flm -FS00 -FL0200000 -FP0($$Device:nRF52832_xxAA$Flash\nrf52xxx.flm) -FF1nrf52xxx_uicr -FS110001000 -FL11000 -FP1($$Device:nRF52832_xxAA$Flash\nrf52xxx_uicr.flm) -+ -+ -+ 0 -+ UL2CM3 -+ UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0nrf52xxx -FS00 -FL0200000 -FP0($$Device:nRF52832_xxAA$Flash\nrf52xxx)) -+ -+ -+ -+ -+ 0 -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ -+ -+ -+
-+ -+ -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/arm5_no_packs/ble_connectivity_s132v5_hci_pca10040.uvprojx b/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/arm5_no_packs/ble_connectivity_s132v5_hci_pca10040.uvprojx ---- a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/arm5_no_packs/ble_connectivity_s132v5_hci_pca10040.uvprojx 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/arm5_no_packs/ble_connectivity_s132v5_hci_pca10040.uvprojx 2018-07-18 17:27:54.000000000 +0200 -@@ -0,0 +1,8117 @@ -+ -+ -+ -+ 2.1 -+ -+
### uVision Project, (C) Keil Software
-+ -+ -+ nrf52832_xxaa -+ 0x4 -+ ARM-ADS -+ -+ nRF52832_xxAA -+ Nordic Semiconductor -+ NordicSemiconductor.nRF_DeviceFamilyPack.8.16.0 -+ http://developer.nordicsemi.com/nRF51_SDK/pieces/nRF_DeviceFamilyPack/ IROM(0x00000000,0x80000) IRAM(0x20000000,0x10000) CPUTYPE("Cortex-M4") FPU2 CLOCK(64000000) ELITTLE -+ -+ -+ -+ 0 -+ $$Device:nRF52832_xxAA$Device\Include\nrf.h -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ..\..\..\..\..\..\modules\nrfx\mdk\nrf52.svd -+ 0 -+ 0 -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ -+ .\_build\ -+ nrf52832_xxaa -+ 1 -+ 0 -+ 1 -+ 1 -+ 1 -+ .\_build\ -+ 1 -+ 0 -+ 0 -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ 0 -+ -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 3 -+ -+ -+ 1 -+ -+ -+ -+ -+ -+ -+ SARMCM3.DLL -+ -MPU -+ TCM.DLL -+ -pCM4 -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 16 -+ -+ -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ -+ -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ 0 -+ 1 1 -+ 0 -+ -1 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Segger\JL2CM3.dll -+ -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 1 -+ 1 -+ 4099 -+ -+ 1 -+ Segger\JL2CM3.dll -+ -+ -+ -+ -+ -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ 1 -+ 0 -+ 1 -+ 1 -+ 0 -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 0 -+ "Cortex-M4" -+ -+ 0 -+ 0 -+ 0 -+ 1 -+ 1 -+ 0 -+ 0 -+ 2 -+ 0 -+ 0 -+ 8 -+ 1 -+ 0 -+ 0 -+ 0 -+ 3 -+ 3 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x20000000 -+ 0x10000 -+ -+ -+ 1 -+ 0x0 -+ 0x80000 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x23000 -+ 0x5d000 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x2000b380 -+ 0x4c80 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ -+ -+ -+ 1 -+ 4 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ --reduce_paths -+ BLE_STACK_SUPPORT_REQD BOARD_PCA10040 BSP_DEFINES_ONLY CONFIG_GPIO_AS_PINRESET FLOAT_ABI_HARD HCI_TIMER2 NRF52 NRF52832_XXAA NRF52_PAN_74 NRF_SD_BLE_API_VERSION=5 S132 SER_CONNECTIVITY SOFTDEVICE_PRESENT SWI_DISABLE0 __HEAP_SIZE=512 __STACK_SIZE=2048 -+ -+ ..\..\..\config\ble_connectivity_s132v5_hci_pca10040;..\..\..\config;..\..\..\..\..\..\components;..\..\..\..\..\..\components\ble\ble_dtm;..\..\..\..\..\..\components\ble\common;..\..\..\..\..\..\components\boards;..\..\..\..\..\..\components\libraries\atomic;..\..\..\..\..\..\components\libraries\balloc;..\..\..\..\..\..\components\libraries\bsp;..\..\..\..\..\..\components\libraries\crc16;..\..\..\..\..\..\components\libraries\delay;..\..\..\..\..\..\components\libraries\experimental_log;..\..\..\..\..\..\components\libraries\experimental_log\src;..\..\..\..\..\..\components\libraries\experimental_memobj;..\..\..\..\..\..\components\libraries\experimental_section_vars;..\..\..\..\..\..\components\libraries\queue;..\..\..\..\..\..\components\libraries\scheduler;..\..\..\..\..\..\components\libraries\strerror;..\..\..\..\..\..\components\libraries\timer;..\..\..\..\..\..\components\libraries\util;..\..\..\..\..\..\components\serialization\common;..\..\..\..\..\..\components\serialization\common\struct_ser\ble;..\..\..\..\..\..\components\serialization\common\transport;..\..\..\..\..\..\components\serialization\common\transport\ser_phy;..\..\..\..\..\..\components\serialization\common\transport\ser_phy\config;..\..\..\..\..\..\components\serialization\connectivity;..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware;..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers;..\..\..\..\..\..\components\serialization\connectivity\codecs\common;..\..\..\..\..\..\components\serialization\connectivity\hal;..\..\..\..\..\..\components\softdevice\common;..\..\..\..\..\..\components\softdevice\s132v5\headers;..\..\..\..\..\..\components\softdevice\s132v5\headers\nrf52;..\..\..\..\..\..\external\fprintf;..\..\..\..\..\..\external\segger_rtt;..\..\..\..\..\..\integration\nrfx;..\..\..\..\..\..\integration\nrfx\legacy;..\..\..\..\..\..\modules\nrfx;..\..\..\..\..\..\modules\nrfx\drivers\include;..\..\..\..\..\..\modules\nrfx\hal;..\..\..\..\..\..\modules\nrfx\mdk;..\config -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ --cpreproc_opts=-DBLE_STACK_SUPPORT_REQD,-DBOARD_PCA10040,-DBSP_DEFINES_ONLY,-DCONFIG_GPIO_AS_PINRESET,-DFLOAT_ABI_HARD,-DHCI_TIMER2,-DNRF52,-DNRF52832_XXAA,-DNRF52_PAN_74,-DNRF_SD_BLE_API_VERSION=5,-DS132,-DSER_CONNECTIVITY,-DSOFTDEVICE_PRESENT,-DSWI_DISABLE0,-D__HEAP_SIZE=512,-D__STACK_SIZE=2048 -+ BLE_STACK_SUPPORT_REQD BOARD_PCA10040 BSP_DEFINES_ONLY CONFIG_GPIO_AS_PINRESET FLOAT_ABI_HARD HCI_TIMER2 NRF52 NRF52832_XXAA NRF52_PAN_74 NRF_SD_BLE_API_VERSION=5 S132 SER_CONNECTIVITY SOFTDEVICE_PRESENT SWI_DISABLE0 __HEAP_SIZE=512 __STACK_SIZE=2048 -+ -+ ..\..\..\config\ble_connectivity_s132v5_hci_pca10040;..\..\..\config;..\..\..\..\..\..\components;..\..\..\..\..\..\components\ble\ble_dtm;..\..\..\..\..\..\components\ble\common;..\..\..\..\..\..\components\boards;..\..\..\..\..\..\components\libraries\atomic;..\..\..\..\..\..\components\libraries\balloc;..\..\..\..\..\..\components\libraries\bsp;..\..\..\..\..\..\components\libraries\crc16;..\..\..\..\..\..\components\libraries\delay;..\..\..\..\..\..\components\libraries\experimental_log;..\..\..\..\..\..\components\libraries\experimental_log\src;..\..\..\..\..\..\components\libraries\experimental_memobj;..\..\..\..\..\..\components\libraries\experimental_section_vars;..\..\..\..\..\..\components\libraries\queue;..\..\..\..\..\..\components\libraries\scheduler;..\..\..\..\..\..\components\libraries\strerror;..\..\..\..\..\..\components\libraries\timer;..\..\..\..\..\..\components\libraries\util;..\..\..\..\..\..\components\serialization\common;..\..\..\..\..\..\components\serialization\common\struct_ser\ble;..\..\..\..\..\..\components\serialization\common\transport;..\..\..\..\..\..\components\serialization\common\transport\ser_phy;..\..\..\..\..\..\components\serialization\common\transport\ser_phy\config;..\..\..\..\..\..\components\serialization\connectivity;..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware;..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers;..\..\..\..\..\..\components\serialization\connectivity\codecs\common;..\..\..\..\..\..\components\serialization\connectivity\hal;..\..\..\..\..\..\components\softdevice\common;..\..\..\..\..\..\components\softdevice\s132v5\headers;..\..\..\..\..\..\components\softdevice\s132v5\headers\nrf52;..\..\..\..\..\..\external\fprintf;..\..\..\..\..\..\external\segger_rtt;..\..\..\..\..\..\integration\nrfx;..\..\..\..\..\..\integration\nrfx\legacy;..\..\..\..\..\..\modules\nrfx;..\..\..\..\..\..\modules\nrfx\drivers\include;..\..\..\..\..\..\modules\nrfx\hal;..\..\..\..\..\..\modules\nrfx\mdk;..\config -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0x00000000 -+ 0x20000000 -+ -+ -+ -+ -+ --diag_suppress 6330 -+ -+ -+ -+ -+ -+ -+ Application -+ -+ main.c -+ 1 -+ ..\..\..\main.c -+ sdk_config.h -+ 5 -+ ..\config\sdk_config.h -+ -+ Board Definition -+ -+ boards.c -+ 1 -+ ..\..\..\..\..\..\components\boards\boards.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_BLE -+ -+ ble_advdata.c -+ 1 -+ ..\..\..\..\..\..\components\ble\common\ble_advdata.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_conn_params.c -+ 1 -+ ..\..\..\..\..\..\components\ble\common\ble_conn_params.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm.c -+ 1 -+ ..\..\..\..\..\..\components\ble\ble_dtm\ble_dtm.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm_hw_nrf52.c -+ 1 -+ ..\..\..\..\..\..\components\ble\ble_dtm\ble_dtm_hw_nrf52.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_srv_common.c -+ 1 -+ ..\..\..\..\..\..\components\ble\common\ble_srv_common.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Drivers -+ -+ nrf_drv_clock.c -+ 1 -+ ..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_drv_uart.c -+ 1 -+ ..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_clock.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_power_clock.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_power_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_prs.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\prs\nrfx_prs.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_uart.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_uarte.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_uarte.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Libraries -+ -+ app_error.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_error_handler_keil.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error_handler_keil.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_error_weak.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error_weak.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_scheduler.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\scheduler\app_scheduler.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_timer.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\timer\app_timer.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_util_platform.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_util_platform.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ crc16.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\crc16\crc16.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_assert.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\nrf_assert.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_atomic.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\atomic\nrf_atomic.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_balloc.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\balloc\nrf_balloc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_fprintf.c -+ 1 -+ ..\..\..\..\..\..\external\fprintf\nrf_fprintf.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_fprintf_format.c -+ 1 -+ ..\..\..\..\..\..\external\fprintf\nrf_fprintf_format.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_memobj.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_memobj\nrf_memobj.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_queue.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\queue\nrf_queue.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_section_iter.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_section_vars\nrf_section_iter.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_strerror.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\strerror\nrf_strerror.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Log -+ -+ nrf_log_backend_rtt.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_backend_rtt.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_backend_serial.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_backend_serial.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_default_backends.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_default_backends.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_frontend.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_frontend.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_str_formatter.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_str_formatter.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Segger_RTT -+ -+ SEGGER_RTT.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ SEGGER_RTT_Syscalls_KEIL.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT_Syscalls_KEIL.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ SEGGER_RTT_printf.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT_printf.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Serialization -+ -+ ble_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm_init.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\ble_dtm_init.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_event_enc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_event_enc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gap_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gap_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gap_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatt_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gatt_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gattc_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gattc_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gattc_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gatts_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gatts_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gatts_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_l2cap_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_l2cap_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_l2cap_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\ble_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ cond_field_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\cond_field_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_gap_sec_keys.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_gap_sec_keys.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_l2cap_sdu_pool.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_l2cap_sdu_pool.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_user_mem.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_user_mem.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\conn_mw.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gap.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gap.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gattc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gattc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gatts.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gatts.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_l2cap.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_l2cap.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_nrf_soc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\conn_mw_nrf_soc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ dtm_uart.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\hal\dtm_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_soc_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\nrf_soc_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_soc_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\nrf_soc_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_dtm_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_dtm_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_error_handling.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_error_handling.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_event_encoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_event_encoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_handlers.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_handlers.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_pkt_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_pkt_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_reset_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_reset_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_dbg_sd_str.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\ser_dbg_sd_str.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_hal_transport.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_hal_transport.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_phy_hci.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_phy\ser_phy_hci.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_phy_hci_slip.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_phy\ser_phy_hci_slip.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_SoftDevice -+ -+ nrf_sdh.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_sdh_ble.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh_ble.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_sdh_soc.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh_soc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ flash_s132_nrf52_5.0.0_softdevice -+ 0x4 -+ ARM-ADS -+ -+ nRF52832_xxAA -+ Nordic Semiconductor -+ .. -+ IROM(0x00000000,0x80000) IRAM(0x20000000,0x10000) CPUTYPE("Cortex-M4") FPU2 CLOCK(64000000) ELITTLE -+ -+ -+ -+ 0 -+ $$Device:nRF52832_xxAA$Device\Include\nrf.h -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ -+ ..\..\..\..\..\..\components\softdevice\s132v5\hex\ -+ s132_nrf52_5.0.0_softdevice.hex -+ 1 -+ 0 -+ 1 -+ 1 -+ 1 -+ .\_build\ -+ 1 -+ 0 -+ 0 -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ -+ 1 -+ 0 -+ attrib +R $H\* -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ 0 -+ -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 3 -+ -+ -+ 1 -+ -+ -+ -+ -+ -+ -+ SARMCM3.DLL -+ -MPU -+ TCM.DLL -+ -pCM4 -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 16 -+ -+ -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ -+ -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ 0 -+ 1 1 -+ 0 -+ -1 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Segger\JL2CM3.dll -+ -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 1 -+ 1 -+ 4099 -+ -+ 1 -+ Segger\JL2CM3.dll -+ -+ -+ -+ -+ -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ 1 -+ 0 -+ 1 -+ 1 -+ 0 -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 0 -+ "" -+ -+ 0 -+ 0 -+ 0 -+ 1 -+ 1 -+ 0 -+ 0 -+ 2 -+ 0 -+ 0 -+ 8 -+ 1 -+ 0 -+ 0 -+ 0 -+ 3 -+ 3 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x20000000 -+ 0x10000 -+ -+ -+ 1 -+ 0x0 -+ 0x80000 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x23000 -+ 0x5d000 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x2000b380 -+ 0x4c80 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ -+ -+ -+ 1 -+ 4 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ --reduce_paths -+ __HEAP_SIZE=512 __STACK_SIZE=2048 -+ -+ ..\..\..\config\ble_connectivity_s132v5_hci_pca10040;..\..\..\config;..\config -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ --cpreproc_opts=-D__HEAP_SIZE=512,-D__STACK_SIZE=2048 -+ __HEAP_SIZE=512 __STACK_SIZE=2048 -+ -+ ..\..\..\config\ble_connectivity_s132v5_hci_pca10040;..\..\..\config;..\config -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0x00000000 -+ 0x20000000 -+ -+ -+ -+ -+ --diag_suppress 6330 -+ -+ -+ -+ -+ -+ -+ Application -+ -+ main.c -+ 1 -+ ..\..\..\main.c -+ sdk_config.h -+ 5 -+ ..\config\sdk_config.h -+ -+ Board Definition -+ -+ boards.c -+ 1 -+ ..\..\..\..\..\..\components\boards\boards.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_BLE -+ -+ ble_advdata.c -+ 1 -+ ..\..\..\..\..\..\components\ble\common\ble_advdata.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_conn_params.c -+ 1 -+ ..\..\..\..\..\..\components\ble\common\ble_conn_params.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm.c -+ 1 -+ ..\..\..\..\..\..\components\ble\ble_dtm\ble_dtm.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm_hw_nrf52.c -+ 1 -+ ..\..\..\..\..\..\components\ble\ble_dtm\ble_dtm_hw_nrf52.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_srv_common.c -+ 1 -+ ..\..\..\..\..\..\components\ble\common\ble_srv_common.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Drivers -+ -+ nrf_drv_clock.c -+ 1 -+ ..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_drv_uart.c -+ 1 -+ ..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_clock.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_power_clock.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_power_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_prs.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\prs\nrfx_prs.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_uart.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_uarte.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_uarte.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Libraries -+ -+ app_error.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_error_handler_keil.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error_handler_keil.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_error_weak.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error_weak.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_scheduler.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\scheduler\app_scheduler.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_timer.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\timer\app_timer.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_util_platform.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_util_platform.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ crc16.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\crc16\crc16.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_assert.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\nrf_assert.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_atomic.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\atomic\nrf_atomic.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_balloc.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\balloc\nrf_balloc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_fprintf.c -+ 1 -+ ..\..\..\..\..\..\external\fprintf\nrf_fprintf.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_fprintf_format.c -+ 1 -+ ..\..\..\..\..\..\external\fprintf\nrf_fprintf_format.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_memobj.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_memobj\nrf_memobj.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_queue.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\queue\nrf_queue.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_section_iter.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_section_vars\nrf_section_iter.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_strerror.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\strerror\nrf_strerror.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Log -+ -+ nrf_log_backend_rtt.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_backend_rtt.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_backend_serial.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_backend_serial.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_default_backends.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_default_backends.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_frontend.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_frontend.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_str_formatter.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_str_formatter.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Segger_RTT -+ -+ SEGGER_RTT.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ SEGGER_RTT_Syscalls_KEIL.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT_Syscalls_KEIL.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ SEGGER_RTT_printf.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT_printf.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Serialization -+ -+ ble_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm_init.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\ble_dtm_init.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_event_enc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_event_enc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gap_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gap_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gap_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatt_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gatt_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gattc_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gattc_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gattc_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gatts_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gatts_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gatts_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_l2cap_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_l2cap_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_l2cap_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\ble_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ cond_field_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\cond_field_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_gap_sec_keys.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_gap_sec_keys.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_l2cap_sdu_pool.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_l2cap_sdu_pool.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_user_mem.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_user_mem.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\conn_mw.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gap.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gap.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gattc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gattc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gatts.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gatts.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_l2cap.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_l2cap.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_nrf_soc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\conn_mw_nrf_soc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ dtm_uart.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\hal\dtm_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_soc_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\nrf_soc_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_soc_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\nrf_soc_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_dtm_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_dtm_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_error_handling.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_error_handling.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_event_encoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_event_encoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_handlers.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_handlers.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_pkt_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_pkt_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_reset_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_reset_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_dbg_sd_str.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\ser_dbg_sd_str.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_hal_transport.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_hal_transport.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_phy_hci.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_phy\ser_phy_hci.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_phy_hci_slip.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_phy\ser_phy_hci_slip.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_SoftDevice -+ -+ nrf_sdh.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_sdh_ble.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh_ble.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_sdh_soc.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh_soc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+
-diff -u -r -N a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/ble_connectivity_gcc_nrf52.ld b/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/ble_connectivity_gcc_nrf52.ld ---- a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/ble_connectivity_gcc_nrf52.ld 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/ble_connectivity_gcc_nrf52.ld 2018-07-18 17:27:42.000000000 +0200 -@@ -0,0 +1,94 @@ -+/* Linker script to configure memory regions. */ -+ -+SEARCH_DIR(.) -+GROUP(-lgcc -lc -lnosys) -+ -+MEMORY -+{ -+ FLASH (rx) : ORIGIN = 0x23000, LENGTH = 0x5d000 -+ RAM (rwx) : ORIGIN = 0x2000b380, LENGTH = 0x4c80 -+ connectivity_version_info (r) : ORIGIN = 0x30000, LENGTH = 0x18 -+} -+ -+SECTIONS -+{ -+ .connectivity_version_info : -+ { -+ PROVIDE(__start_connectivity_version_info = .); -+ KEEP(*(SORT(.connectivity_version_info*))) -+ PROVIDE(__stop_connectivity_version_info = .); -+ } > connectivity_version_info -+} -+ -+SECTIONS -+{ -+ . = ALIGN(4); -+ .mem_section_dummy_ram : -+ { -+ } -+ .log_dynamic_data : -+ { -+ PROVIDE(__start_log_dynamic_data = .); -+ KEEP(*(SORT(.log_dynamic_data*))) -+ PROVIDE(__stop_log_dynamic_data = .); -+ } > RAM -+ -+} INSERT AFTER .data; -+ -+SECTIONS -+{ -+ .mem_section_dummy_rom : -+ { -+ } -+ .log_const_data : -+ { -+ PROVIDE(__start_log_const_data = .); -+ KEEP(*(SORT(.log_const_data*))) -+ PROVIDE(__stop_log_const_data = .); -+ } > FLASH -+ .sdh_ble_observers : -+ { -+ PROVIDE(__start_sdh_ble_observers = .); -+ KEEP(*(SORT(.sdh_ble_observers*))) -+ PROVIDE(__stop_sdh_ble_observers = .); -+ } > FLASH -+ .sdh_soc_observers : -+ { -+ PROVIDE(__start_sdh_soc_observers = .); -+ KEEP(*(SORT(.sdh_soc_observers*))) -+ PROVIDE(__stop_sdh_soc_observers = .); -+ } > FLASH -+ .nrf_queue : -+ { -+ PROVIDE(__start_nrf_queue = .); -+ KEEP(*(.nrf_queue)) -+ PROVIDE(__stop_nrf_queue = .); -+ } > FLASH -+ .nrf_balloc : -+ { -+ PROVIDE(__start_nrf_balloc = .); -+ KEEP(*(.nrf_balloc)) -+ PROVIDE(__stop_nrf_balloc = .); -+ } > FLASH -+ .sdh_stack_observers : -+ { -+ PROVIDE(__start_sdh_stack_observers = .); -+ KEEP(*(SORT(.sdh_stack_observers*))) -+ PROVIDE(__stop_sdh_stack_observers = .); -+ } > FLASH -+ .sdh_req_observers : -+ { -+ PROVIDE(__start_sdh_req_observers = .); -+ KEEP(*(SORT(.sdh_req_observers*))) -+ PROVIDE(__stop_sdh_req_observers = .); -+ } > FLASH -+ .sdh_state_observers : -+ { -+ PROVIDE(__start_sdh_state_observers = .); -+ KEEP(*(SORT(.sdh_state_observers*))) -+ PROVIDE(__stop_sdh_state_observers = .); -+ } > FLASH -+ -+} INSERT AFTER .text -+ -+INCLUDE "nrf_common.ld" -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/Makefile b/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/Makefile ---- a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/Makefile 2018-07-18 17:27:42.000000000 +0200 -@@ -0,0 +1,260 @@ -+PROJECT_NAME := ble_connectivity_s132v5_hci_pca10040 -+TARGETS := nrf52832_xxaa -+OUTPUT_DIRECTORY := _build -+ -+SDK_ROOT := ../../../../../.. -+PROJ_DIR := ../../.. -+ -+$(OUTPUT_DIRECTORY)/nrf52832_xxaa.out: \ -+ LINKER_SCRIPT := ble_connectivity_gcc_nrf52.ld -+ -+# Source files common to all targets -+SRC_FILES += \ -+ $(SDK_ROOT)/modules/nrfx/mdk/gcc_startup_nrf52.S \ -+ $(SDK_ROOT)/components/libraries/experimental_log/src/nrf_log_backend_rtt.c \ -+ $(SDK_ROOT)/components/libraries/experimental_log/src/nrf_log_backend_serial.c \ -+ $(SDK_ROOT)/components/libraries/experimental_log/src/nrf_log_default_backends.c \ -+ $(SDK_ROOT)/components/libraries/experimental_log/src/nrf_log_frontend.c \ -+ $(SDK_ROOT)/components/libraries/experimental_log/src/nrf_log_str_formatter.c \ -+ $(SDK_ROOT)/components/libraries/util/app_error.c \ -+ $(SDK_ROOT)/components/libraries/util/app_error_handler_gcc.c \ -+ $(SDK_ROOT)/components/libraries/util/app_error_weak.c \ -+ $(SDK_ROOT)/components/libraries/scheduler/app_scheduler.c \ -+ $(SDK_ROOT)/components/libraries/timer/app_timer.c \ -+ $(SDK_ROOT)/components/libraries/util/app_util_platform.c \ -+ $(SDK_ROOT)/components/libraries/crc16/crc16.c \ -+ $(SDK_ROOT)/components/libraries/util/nrf_assert.c \ -+ $(SDK_ROOT)/components/libraries/atomic/nrf_atomic.c \ -+ $(SDK_ROOT)/components/libraries/balloc/nrf_balloc.c \ -+ $(SDK_ROOT)/external/fprintf/nrf_fprintf.c \ -+ $(SDK_ROOT)/external/fprintf/nrf_fprintf_format.c \ -+ $(SDK_ROOT)/components/libraries/experimental_memobj/nrf_memobj.c \ -+ $(SDK_ROOT)/components/libraries/queue/nrf_queue.c \ -+ $(SDK_ROOT)/components/libraries/experimental_section_vars/nrf_section_iter.c \ -+ $(SDK_ROOT)/components/libraries/strerror/nrf_strerror.c \ -+ $(SDK_ROOT)/modules/nrfx/mdk/system_nrf52.c \ -+ $(SDK_ROOT)/components/boards/boards.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_conn.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/common/ble_dtm_init.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_event_enc.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_evt_conn.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gap_evt_conn.c \ -+ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c \ -+ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_gatt_struct_serialization.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gattc_conn.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gattc_evt_conn.c \ -+ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_gattc_struct_serialization.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gatts_conn.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gatts_evt_conn.c \ -+ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_gatts_struct_serialization.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_l2cap_conn.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_l2cap_evt_conn.c \ -+ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_l2cap_struct_serialization.c \ -+ $(SDK_ROOT)/components/serialization/common/ble_serialization.c \ -+ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_struct_serialization.c \ -+ $(SDK_ROOT)/components/serialization/common/cond_field_serialization.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/conn_ble_l2cap_sdu_pool.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/common/conn_mw.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gap.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gattc.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gatts.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_l2cap.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/common/conn_mw_nrf_soc.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/hal/dtm_uart.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/nrf_soc_conn.c \ -+ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/nrf_soc_struct_serialization.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_cmd_decoder.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_dtm_cmd_decoder.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_error_handling.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_event_encoder.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_handlers.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_pkt_decoder.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_reset_cmd_decoder.c \ -+ $(SDK_ROOT)/components/serialization/common/ser_dbg_sd_str.c \ -+ $(SDK_ROOT)/components/serialization/common/transport/ser_hal_transport.c \ -+ $(SDK_ROOT)/components/serialization/common/transport/ser_phy/ser_phy_hci.c \ -+ $(SDK_ROOT)/components/serialization/common/transport/ser_phy/ser_phy_hci_slip.c \ -+ $(SDK_ROOT)/integration/nrfx/legacy/nrf_drv_clock.c \ -+ $(SDK_ROOT)/integration/nrfx/legacy/nrf_drv_uart.c \ -+ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_clock.c \ -+ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power_clock.c \ -+ $(SDK_ROOT)/modules/nrfx/drivers/src/prs/nrfx_prs.c \ -+ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uart.c \ -+ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uarte.c \ -+ $(PROJ_DIR)/main.c \ -+ $(SDK_ROOT)/external/segger_rtt/SEGGER_RTT.c \ -+ $(SDK_ROOT)/external/segger_rtt/SEGGER_RTT_Syscalls_GCC.c \ -+ $(SDK_ROOT)/external/segger_rtt/SEGGER_RTT_printf.c \ -+ $(SDK_ROOT)/components/ble/common/ble_advdata.c \ -+ $(SDK_ROOT)/components/ble/common/ble_conn_params.c \ -+ $(SDK_ROOT)/components/ble/ble_dtm/ble_dtm.c \ -+ $(SDK_ROOT)/components/ble/ble_dtm/ble_dtm_hw_nrf52.c \ -+ $(SDK_ROOT)/components/ble/common/ble_srv_common.c \ -+ $(SDK_ROOT)/components/softdevice/common/nrf_sdh.c \ -+ $(SDK_ROOT)/components/softdevice/common/nrf_sdh_ble.c \ -+ $(SDK_ROOT)/components/softdevice/common/nrf_sdh_soc.c \ -+ -+# Include folders common to all targets -+INC_FOLDERS += \ -+ $(SDK_ROOT)/components \ -+ $(SDK_ROOT)/components/serialization/connectivity/hal \ -+ $(SDK_ROOT)/modules/nrfx/mdk \ -+ $(SDK_ROOT)/components/libraries/scheduler \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers \ -+ $(SDK_ROOT)/components/libraries/experimental_log \ -+ $(SDK_ROOT)/components/toolchain/cmsis/include \ -+ $(SDK_ROOT)/components/libraries/queue \ -+ $(SDK_ROOT)/components/libraries/timer \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/common \ -+ $(SDK_ROOT)/components/serialization/connectivity \ -+ $(SDK_ROOT)/components/libraries/strerror \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware \ -+ $(SDK_ROOT)/components/libraries/crc16 \ -+ $(SDK_ROOT)/components/ble/ble_dtm \ -+ $(SDK_ROOT)/components/serialization/common \ -+ $(SDK_ROOT)/components/libraries/util \ -+ ../config \ -+ $(SDK_ROOT)/components/ble/common \ -+ $(SDK_ROOT)/components/libraries/balloc \ -+ $(SDK_ROOT)/modules/nrfx/hal \ -+ $(SDK_ROOT)/components/libraries/bsp \ -+ $(SDK_ROOT)/modules/nrfx \ -+ $(SDK_ROOT)/components/libraries/experimental_section_vars \ -+ $(SDK_ROOT)/integration/nrfx/legacy \ -+ $(SDK_ROOT)/components/serialization/common/transport/ser_phy \ -+ $(SDK_ROOT)/components/softdevice/s132v5/headers \ -+ $(SDK_ROOT)/components/libraries/experimental_log/src \ -+ $(SDK_ROOT)/components/libraries/delay \ -+ $(SDK_ROOT)/external/segger_rtt \ -+ $(SDK_ROOT)/components/libraries/atomic \ -+ $(SDK_ROOT)/components/boards \ -+ $(SDK_ROOT)/components/libraries/experimental_memobj \ -+ $(SDK_ROOT)/components/serialization/common/struct_ser/ble \ -+ $(SDK_ROOT)/integration/nrfx \ -+ $(SDK_ROOT)/components/serialization/common/transport \ -+ $(SDK_ROOT)/components/softdevice/common \ -+ $(SDK_ROOT)/components/serialization/common/transport/ser_phy/config \ -+ $(SDK_ROOT)/modules/nrfx/drivers/include \ -+ $(SDK_ROOT)/components/softdevice/s132v5/headers/nrf52 \ -+ $(SDK_ROOT)/external/fprintf \ -+ -+# Libraries common to all targets -+LIB_FILES += \ -+ -+# Optimization flags -+OPT = -Os -g3 -+# Uncomment the line below to enable link time optimization -+#OPT += -flto -+ -+# C flags common to all targets -+CFLAGS += $(OPT) -+CFLAGS += -DBLE_STACK_SUPPORT_REQD -+CFLAGS += -DBOARD_PCA10040 -+CFLAGS += -DBSP_DEFINES_ONLY -+CFLAGS += -DCONFIG_GPIO_AS_PINRESET -+CFLAGS += -DFLOAT_ABI_HARD -+CFLAGS += -DHCI_TIMER2 -+CFLAGS += -DNRF52 -+CFLAGS += -DNRF52832_XXAA -+CFLAGS += -DNRF52_PAN_74 -+CFLAGS += -DNRF_SD_BLE_API_VERSION=5 -+CFLAGS += -DS132 -+CFLAGS += -DSER_CONNECTIVITY -+CFLAGS += -DSOFTDEVICE_PRESENT -+CFLAGS += -DSWI_DISABLE0 -+CFLAGS += -mcpu=cortex-m4 -+CFLAGS += -mthumb -mabi=aapcs -+CFLAGS += -Wall -Werror -+CFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16 -+# keep every function in a separate section, this allows linker to discard unused ones -+CFLAGS += -ffunction-sections -fdata-sections -fno-strict-aliasing -+CFLAGS += -fno-builtin -fshort-enums -+ -+# C++ flags common to all targets -+CXXFLAGS += $(OPT) -+ -+# Assembler flags common to all targets -+ASMFLAGS += -g3 -+ASMFLAGS += -mcpu=cortex-m4 -+ASMFLAGS += -mthumb -mabi=aapcs -+ASMFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16 -+ASMFLAGS += -DBLE_STACK_SUPPORT_REQD -+ASMFLAGS += -DBOARD_PCA10040 -+ASMFLAGS += -DBSP_DEFINES_ONLY -+ASMFLAGS += -DCONFIG_GPIO_AS_PINRESET -+ASMFLAGS += -DFLOAT_ABI_HARD -+ASMFLAGS += -DHCI_TIMER2 -+ASMFLAGS += -DNRF52 -+ASMFLAGS += -DNRF52832_XXAA -+ASMFLAGS += -DNRF52_PAN_74 -+ASMFLAGS += -DNRF_SD_BLE_API_VERSION=5 -+ASMFLAGS += -DS132 -+ASMFLAGS += -DSER_CONNECTIVITY -+ASMFLAGS += -DSOFTDEVICE_PRESENT -+ASMFLAGS += -DSWI_DISABLE0 -+ -+# Linker flags -+LDFLAGS += $(OPT) -+LDFLAGS += -mthumb -mabi=aapcs -L$(SDK_ROOT)/modules/nrfx/mdk -T$(LINKER_SCRIPT) -+LDFLAGS += -mcpu=cortex-m4 -+LDFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16 -+# let linker dump unused sections -+LDFLAGS += -Wl,--gc-sections -+# use newlib in nano version -+LDFLAGS += --specs=nano.specs -+ -+nrf52832_xxaa: CFLAGS += -D__HEAP_SIZE=512 -+nrf52832_xxaa: CFLAGS += -D__STACK_SIZE=2048 -+nrf52832_xxaa: ASMFLAGS += -D__HEAP_SIZE=512 -+nrf52832_xxaa: ASMFLAGS += -D__STACK_SIZE=2048 -+ -+# Add standard libraries at the very end of the linker input, after all objects -+# that may need symbols provided by these libraries. -+LIB_FILES += -lc -lnosys -lm -+ -+ -+.PHONY: default help -+ -+# Default target - first one defined -+default: nrf52832_xxaa -+ -+# Print all targets that can be built -+help: -+ @echo following targets are available: -+ @echo nrf52832_xxaa -+ @echo flash_softdevice -+ @echo sdk_config - starting external tool for editing sdk_config.h -+ @echo flash - flashing binary -+ -+TEMPLATE_PATH := $(SDK_ROOT)/components/toolchain/gcc -+ -+ -+include $(TEMPLATE_PATH)/Makefile.common -+ -+$(foreach target, $(TARGETS), $(call define_target, $(target))) -+ -+.PHONY: flash flash_softdevice erase -+ -+# Flash the program -+flash: $(OUTPUT_DIRECTORY)/nrf52832_xxaa.hex -+ @echo Flashing: $< -+ nrfjprog -f nrf52 --program $< --sectorerase -+ nrfjprog -f nrf52 --reset -+ -+# Flash softdevice -+flash_softdevice: -+ @echo Flashing: s132_nrf52_5.0.0_softdevice.hex -+ nrfjprog -f nrf52 --program $(SDK_ROOT)/components/softdevice/s132v5/hex/s132_nrf52_5.0.0_softdevice.hex --sectorerase -+ nrfjprog -f nrf52 --reset -+ -+erase: -+ nrfjprog -f nrf52 --eraseall -+ -+SDK_CONFIG_FILE := ../config/sdk_config.h -+CMSIS_CONFIG_TOOL := $(SDK_ROOT)/external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar -+sdk_config: -+ java -jar $(CMSIS_CONFIG_TOOL) $(SDK_CONFIG_FILE) -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/config/sdk_config.h b/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/config/sdk_config.h ---- a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/config/sdk_config.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/config/sdk_config.h 2018-07-18 17:42:30.000000000 +0200 -@@ -0,0 +1,4151 @@ -+/** -+ * Copyright (c) 2017 - 2018, Nordic Semiconductor ASA -+ * -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form, except as embedded into a Nordic -+ * Semiconductor ASA integrated circuit in a product or a software update for -+ * such product, must reproduce the above copyright notice, this list of -+ * conditions and the following disclaimer in the documentation and/or other -+ * materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its -+ * contributors may be used to endorse or promote products derived from this -+ * software without specific prior written permission. -+ * -+ * 4. This software, with or without modification, must only be used with a -+ * Nordic Semiconductor ASA integrated circuit. -+ * -+ * 5. Any software provided in binary form under this license must not be reverse -+ * engineered, decompiled, modified and/or disassembled. -+ * -+ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -+ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ * -+ */ -+ -+ -+ -+#ifndef SDK_CONFIG_H -+#define SDK_CONFIG_H -+// <<< Use Configuration Wizard in Context Menu >>>\n -+#ifdef USE_APP_CONFIG -+#include "app_config.h" -+#endif -+// nRF_BLE -+ -+//========================================================== -+// BLE_DTM_ENABLED - ble_dtm - Module for testing RF/PHY using DTM commands -+ -+ -+#ifndef BLE_DTM_ENABLED -+#define BLE_DTM_ENABLED 1 -+#endif -+ -+// NRF_BLE_CONN_PARAMS_ENABLED - ble_conn_params - Initiating and executing a connection parameters negotiation procedure -+//========================================================== -+#ifndef NRF_BLE_CONN_PARAMS_ENABLED -+#define NRF_BLE_CONN_PARAMS_ENABLED 1 -+#endif -+// NRF_BLE_CONN_PARAMS_MAX_SLAVE_LATENCY_DEVIATION - The largest acceptable deviation in slave latency. -+// The largest deviation (+ or -) from the requested slave latency that will not be renegotiated. -+ -+#ifndef NRF_BLE_CONN_PARAMS_MAX_SLAVE_LATENCY_DEVIATION -+#define NRF_BLE_CONN_PARAMS_MAX_SLAVE_LATENCY_DEVIATION 499 -+#endif -+ -+// NRF_BLE_CONN_PARAMS_MAX_SUPERVISION_TIMEOUT_DEVIATION - The largest acceptable deviation (in 10 ms units) in supervision timeout. -+// The largest deviation (+ or -, in 10 ms units) from the requested supervision timeout that will not be renegotiated. -+ -+#ifndef NRF_BLE_CONN_PARAMS_MAX_SUPERVISION_TIMEOUT_DEVIATION -+#define NRF_BLE_CONN_PARAMS_MAX_SUPERVISION_TIMEOUT_DEVIATION 65535 -+#endif -+ -+// -+ -+// -+//========================================================== -+ -+// nRF_Drivers -+ -+//========================================================== -+// CLOCK_ENABLED - nrf_drv_clock - CLOCK peripheral driver - legacy layer -+//========================================================== -+#ifndef CLOCK_ENABLED -+#define CLOCK_ENABLED 1 -+#endif -+// CLOCK_CONFIG_LF_SRC - LF Clock Source -+ -+// <0=> RC -+// <1=> XTAL -+// <2=> Synth -+ -+#ifndef CLOCK_CONFIG_LF_SRC -+#define CLOCK_CONFIG_LF_SRC 1 -+#endif -+ -+// CLOCK_CONFIG_IRQ_PRIORITY - Interrupt priority -+ -+ -+// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -+// <0=> 0 (highest) -+// <1=> 1 -+// <2=> 2 -+// <3=> 3 -+// <4=> 4 -+// <5=> 5 -+// <6=> 6 -+// <7=> 7 -+ -+#ifndef CLOCK_CONFIG_IRQ_PRIORITY -+#define CLOCK_CONFIG_IRQ_PRIORITY 7 -+#endif -+ -+// -+ -+// NRFX_CLOCK_ENABLED - nrfx_clock - CLOCK peripheral driver -+//========================================================== -+#ifndef NRFX_CLOCK_ENABLED -+#define NRFX_CLOCK_ENABLED 1 -+#endif -+// NRFX_CLOCK_CONFIG_LF_SRC - LF Clock Source -+ -+// <0=> RC -+// <1=> XTAL -+// <2=> Synth -+ -+#ifndef NRFX_CLOCK_CONFIG_LF_SRC -+#define NRFX_CLOCK_CONFIG_LF_SRC 1 -+#endif -+ -+// NRFX_CLOCK_CONFIG_IRQ_PRIORITY - Interrupt priority -+ -+// <0=> 0 (highest) -+// <1=> 1 -+// <2=> 2 -+// <3=> 3 -+// <4=> 4 -+// <5=> 5 -+// <6=> 6 -+// <7=> 7 -+ -+#ifndef NRFX_CLOCK_CONFIG_IRQ_PRIORITY -+#define NRFX_CLOCK_CONFIG_IRQ_PRIORITY 7 -+#endif -+ -+// NRFX_CLOCK_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRFX_CLOCK_CONFIG_LOG_ENABLED -+#define NRFX_CLOCK_CONFIG_LOG_ENABLED 0 -+#endif -+// NRFX_CLOCK_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRFX_CLOCK_CONFIG_LOG_LEVEL -+#define NRFX_CLOCK_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRFX_CLOCK_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRFX_CLOCK_CONFIG_INFO_COLOR -+#define NRFX_CLOCK_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRFX_CLOCK_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRFX_CLOCK_CONFIG_DEBUG_COLOR -+#define NRFX_CLOCK_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// -+ -+// NRFX_PRS_ENABLED - nrfx_prs - Peripheral Resource Sharing module -+//========================================================== -+#ifndef NRFX_PRS_ENABLED -+#define NRFX_PRS_ENABLED 1 -+#endif -+// NRFX_PRS_BOX_0_ENABLED - Enables box 0 in the module. -+ -+ -+#ifndef NRFX_PRS_BOX_0_ENABLED -+#define NRFX_PRS_BOX_0_ENABLED 0 -+#endif -+ -+// NRFX_PRS_BOX_1_ENABLED - Enables box 1 in the module. -+ -+ -+#ifndef NRFX_PRS_BOX_1_ENABLED -+#define NRFX_PRS_BOX_1_ENABLED 0 -+#endif -+ -+// NRFX_PRS_BOX_2_ENABLED - Enables box 2 in the module. -+ -+ -+#ifndef NRFX_PRS_BOX_2_ENABLED -+#define NRFX_PRS_BOX_2_ENABLED 0 -+#endif -+ -+// NRFX_PRS_BOX_3_ENABLED - Enables box 3 in the module. -+ -+ -+#ifndef NRFX_PRS_BOX_3_ENABLED -+#define NRFX_PRS_BOX_3_ENABLED 0 -+#endif -+ -+// NRFX_PRS_BOX_4_ENABLED - Enables box 4 in the module. -+ -+ -+#ifndef NRFX_PRS_BOX_4_ENABLED -+#define NRFX_PRS_BOX_4_ENABLED 1 -+#endif -+ -+// NRFX_PRS_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRFX_PRS_CONFIG_LOG_ENABLED -+#define NRFX_PRS_CONFIG_LOG_ENABLED 0 -+#endif -+// NRFX_PRS_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRFX_PRS_CONFIG_LOG_LEVEL -+#define NRFX_PRS_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRFX_PRS_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRFX_PRS_CONFIG_INFO_COLOR -+#define NRFX_PRS_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRFX_PRS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRFX_PRS_CONFIG_DEBUG_COLOR -+#define NRFX_PRS_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// -+ -+// NRFX_UARTE_ENABLED - nrfx_uarte - UARTE peripheral driver -+//========================================================== -+#ifndef NRFX_UARTE_ENABLED -+#define NRFX_UARTE_ENABLED 1 -+#endif -+// NRFX_UARTE0_ENABLED - Enable UARTE0 instance -+#ifndef NRFX_UARTE0_ENABLED -+#define NRFX_UARTE0_ENABLED 0 -+#endif -+ -+// NRFX_UARTE_DEFAULT_CONFIG_HWFC - Hardware Flow Control -+ -+// <0=> Disabled -+// <1=> Enabled -+ -+#ifndef NRFX_UARTE_DEFAULT_CONFIG_HWFC -+#define NRFX_UARTE_DEFAULT_CONFIG_HWFC 0 -+#endif -+ -+// NRFX_UARTE_DEFAULT_CONFIG_PARITY - Parity -+ -+// <0=> Excluded -+// <14=> Included -+ -+#ifndef NRFX_UARTE_DEFAULT_CONFIG_PARITY -+#define NRFX_UARTE_DEFAULT_CONFIG_PARITY 0 -+#endif -+ -+// NRFX_UARTE_DEFAULT_CONFIG_BAUDRATE - Default Baudrate -+ -+// <323584=> 1200 baud -+// <643072=> 2400 baud -+// <1290240=> 4800 baud -+// <2576384=> 9600 baud -+// <3862528=> 14400 baud -+// <5152768=> 19200 baud -+// <7716864=> 28800 baud -+// <8388608=> 31250 baud -+// <10289152=> 38400 baud -+// <15007744=> 56000 baud -+// <15400960=> 57600 baud -+// <20615168=> 76800 baud -+// <30801920=> 115200 baud -+// <61865984=> 230400 baud -+// <67108864=> 250000 baud -+// <121634816=> 460800 baud -+// <251658240=> 921600 baud -+// <268435456=> 1000000 baud -+ -+#ifndef NRFX_UARTE_DEFAULT_CONFIG_BAUDRATE -+#define NRFX_UARTE_DEFAULT_CONFIG_BAUDRATE 30801920 -+#endif -+ -+// NRFX_UARTE_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority -+ -+// <0=> 0 (highest) -+// <1=> 1 -+// <2=> 2 -+// <3=> 3 -+// <4=> 4 -+// <5=> 5 -+// <6=> 6 -+// <7=> 7 -+ -+#ifndef NRFX_UARTE_DEFAULT_CONFIG_IRQ_PRIORITY -+#define NRFX_UARTE_DEFAULT_CONFIG_IRQ_PRIORITY 7 -+#endif -+ -+// NRFX_UARTE_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRFX_UARTE_CONFIG_LOG_ENABLED -+#define NRFX_UARTE_CONFIG_LOG_ENABLED 0 -+#endif -+// NRFX_UARTE_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRFX_UARTE_CONFIG_LOG_LEVEL -+#define NRFX_UARTE_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRFX_UARTE_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRFX_UARTE_CONFIG_INFO_COLOR -+#define NRFX_UARTE_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRFX_UARTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRFX_UARTE_CONFIG_DEBUG_COLOR -+#define NRFX_UARTE_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// -+ -+// NRFX_UART_ENABLED - nrfx_uart - UART peripheral driver -+//========================================================== -+#ifndef NRFX_UART_ENABLED -+#define NRFX_UART_ENABLED 1 -+#endif -+// NRFX_UART0_ENABLED - Enable UART0 instance -+#ifndef NRFX_UART0_ENABLED -+#define NRFX_UART0_ENABLED 0 -+#endif -+ -+// NRFX_UART_DEFAULT_CONFIG_HWFC - Hardware Flow Control -+ -+// <0=> Disabled -+// <1=> Enabled -+ -+#ifndef NRFX_UART_DEFAULT_CONFIG_HWFC -+#define NRFX_UART_DEFAULT_CONFIG_HWFC 0 -+#endif -+ -+// NRFX_UART_DEFAULT_CONFIG_PARITY - Parity -+ -+// <0=> Excluded -+// <14=> Included -+ -+#ifndef NRFX_UART_DEFAULT_CONFIG_PARITY -+#define NRFX_UART_DEFAULT_CONFIG_PARITY 0 -+#endif -+ -+// NRFX_UART_DEFAULT_CONFIG_BAUDRATE - Default Baudrate -+ -+// <323584=> 1200 baud -+// <643072=> 2400 baud -+// <1290240=> 4800 baud -+// <2576384=> 9600 baud -+// <3866624=> 14400 baud -+// <5152768=> 19200 baud -+// <7729152=> 28800 baud -+// <8388608=> 31250 baud -+// <10309632=> 38400 baud -+// <15007744=> 56000 baud -+// <15462400=> 57600 baud -+// <20615168=> 76800 baud -+// <30924800=> 115200 baud -+// <61845504=> 230400 baud -+// <67108864=> 250000 baud -+// <123695104=> 460800 baud -+// <247386112=> 921600 baud -+// <268435456=> 1000000 baud -+ -+#ifndef NRFX_UART_DEFAULT_CONFIG_BAUDRATE -+#define NRFX_UART_DEFAULT_CONFIG_BAUDRATE 30924800 -+#endif -+ -+// NRFX_UART_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority -+ -+// <0=> 0 (highest) -+// <1=> 1 -+// <2=> 2 -+// <3=> 3 -+// <4=> 4 -+// <5=> 5 -+// <6=> 6 -+// <7=> 7 -+ -+#ifndef NRFX_UART_DEFAULT_CONFIG_IRQ_PRIORITY -+#define NRFX_UART_DEFAULT_CONFIG_IRQ_PRIORITY 7 -+#endif -+ -+// NRFX_UART_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRFX_UART_CONFIG_LOG_ENABLED -+#define NRFX_UART_CONFIG_LOG_ENABLED 0 -+#endif -+// NRFX_UART_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRFX_UART_CONFIG_LOG_LEVEL -+#define NRFX_UART_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRFX_UART_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRFX_UART_CONFIG_INFO_COLOR -+#define NRFX_UART_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRFX_UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRFX_UART_CONFIG_DEBUG_COLOR -+#define NRFX_UART_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// -+ -+// UART_ENABLED - nrf_drv_uart - UART/UARTE peripheral driver - legacy layer -+//========================================================== -+#ifndef UART_ENABLED -+#define UART_ENABLED 1 -+#endif -+// UART_DEFAULT_CONFIG_HWFC - Hardware Flow Control -+ -+// <0=> Disabled -+// <1=> Enabled -+ -+#ifndef UART_DEFAULT_CONFIG_HWFC -+#define UART_DEFAULT_CONFIG_HWFC 0 -+#endif -+ -+// UART_DEFAULT_CONFIG_PARITY - Parity -+ -+// <0=> Excluded -+// <14=> Included -+ -+#ifndef UART_DEFAULT_CONFIG_PARITY -+#define UART_DEFAULT_CONFIG_PARITY 0 -+#endif -+ -+// UART_DEFAULT_CONFIG_BAUDRATE - Default Baudrate -+ -+// <323584=> 1200 baud -+// <643072=> 2400 baud -+// <1290240=> 4800 baud -+// <2576384=> 9600 baud -+// <3862528=> 14400 baud -+// <5152768=> 19200 baud -+// <7716864=> 28800 baud -+// <10289152=> 38400 baud -+// <15400960=> 57600 baud -+// <20615168=> 76800 baud -+// <30801920=> 115200 baud -+// <61865984=> 230400 baud -+// <67108864=> 250000 baud -+// <121634816=> 460800 baud -+// <251658240=> 921600 baud -+// <268435456=> 1000000 baud -+ -+#ifndef UART_DEFAULT_CONFIG_BAUDRATE -+#define UART_DEFAULT_CONFIG_BAUDRATE 30801920 -+#endif -+ -+// UART_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority -+ -+ -+// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -+// <0=> 0 (highest) -+// <1=> 1 -+// <2=> 2 -+// <3=> 3 -+// <4=> 4 -+// <5=> 5 -+// <6=> 6 -+// <7=> 7 -+ -+#ifndef UART_DEFAULT_CONFIG_IRQ_PRIORITY -+#define UART_DEFAULT_CONFIG_IRQ_PRIORITY 7 -+#endif -+ -+// UART_EASY_DMA_SUPPORT - Driver supporting EasyDMA -+ -+ -+#ifndef UART_EASY_DMA_SUPPORT -+#define UART_EASY_DMA_SUPPORT 1 -+#endif -+ -+// UART_LEGACY_SUPPORT - Driver supporting Legacy mode -+ -+ -+#ifndef UART_LEGACY_SUPPORT -+#define UART_LEGACY_SUPPORT 1 -+#endif -+ -+// UART0_ENABLED - Enable UART0 instance -+//========================================================== -+#ifndef UART0_ENABLED -+#define UART0_ENABLED 1 -+#endif -+// UART0_CONFIG_USE_EASY_DMA - Default setting for using EasyDMA -+ -+ -+#ifndef UART0_CONFIG_USE_EASY_DMA -+#define UART0_CONFIG_USE_EASY_DMA 1 -+#endif -+ -+// -+ -+// -+ -+// -+//========================================================== -+ -+// nRF_Libraries -+ -+//========================================================== -+// APP_SCHEDULER_ENABLED - app_scheduler - Events scheduler -+//========================================================== -+#ifndef APP_SCHEDULER_ENABLED -+#define APP_SCHEDULER_ENABLED 1 -+#endif -+// APP_SCHEDULER_WITH_PAUSE - Enabling pause feature -+ -+ -+#ifndef APP_SCHEDULER_WITH_PAUSE -+#define APP_SCHEDULER_WITH_PAUSE 1 -+#endif -+ -+// APP_SCHEDULER_WITH_PROFILER - Enabling scheduler profiling -+ -+ -+#ifndef APP_SCHEDULER_WITH_PROFILER -+#define APP_SCHEDULER_WITH_PROFILER 1 -+#endif -+ -+// -+ -+// APP_TIMER_ENABLED - app_timer - Application timer functionality -+//========================================================== -+#ifndef APP_TIMER_ENABLED -+#define APP_TIMER_ENABLED 1 -+#endif -+// APP_TIMER_CONFIG_RTC_FREQUENCY - Configure RTC prescaler. -+ -+// <0=> 32768 Hz -+// <1=> 16384 Hz -+// <3=> 8192 Hz -+// <7=> 4096 Hz -+// <15=> 2048 Hz -+// <31=> 1024 Hz -+ -+#ifndef APP_TIMER_CONFIG_RTC_FREQUENCY -+#define APP_TIMER_CONFIG_RTC_FREQUENCY 0 -+#endif -+ -+// APP_TIMER_CONFIG_IRQ_PRIORITY - Interrupt priority -+ -+ -+// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -+// <0=> 0 (highest) -+// <1=> 1 -+// <2=> 2 -+// <3=> 3 -+// <4=> 4 -+// <5=> 5 -+// <6=> 6 -+// <7=> 7 -+ -+#ifndef APP_TIMER_CONFIG_IRQ_PRIORITY -+#define APP_TIMER_CONFIG_IRQ_PRIORITY 7 -+#endif -+ -+// APP_TIMER_CONFIG_OP_QUEUE_SIZE - Capacity of timer requests queue. -+// Size of the queue depends on how many timers are used -+// in the system, how often timers are started and overall -+// system latency. If queue size is too small app_timer calls -+// will fail. -+ -+#ifndef APP_TIMER_CONFIG_OP_QUEUE_SIZE -+#define APP_TIMER_CONFIG_OP_QUEUE_SIZE 10 -+#endif -+ -+// APP_TIMER_CONFIG_USE_SCHEDULER - Enable scheduling app_timer events to app_scheduler -+ -+ -+#ifndef APP_TIMER_CONFIG_USE_SCHEDULER -+#define APP_TIMER_CONFIG_USE_SCHEDULER 0 -+#endif -+ -+// APP_TIMER_KEEPS_RTC_ACTIVE - Enable RTC always on -+ -+ -+// If option is enabled RTC is kept running even if there is no active timers. -+// This option can be used when app_timer is used for timestamping. -+ -+#ifndef APP_TIMER_KEEPS_RTC_ACTIVE -+#define APP_TIMER_KEEPS_RTC_ACTIVE 0 -+#endif -+ -+// App Timer Legacy configuration - Legacy configuration. -+ -+//========================================================== -+// APP_TIMER_WITH_PROFILER - Enable app_timer profiling -+ -+ -+#ifndef APP_TIMER_WITH_PROFILER -+#define APP_TIMER_WITH_PROFILER 0 -+#endif -+ -+// APP_TIMER_CONFIG_SWI_NUMBER - Configure SWI instance used. -+ -+ -+#ifndef APP_TIMER_CONFIG_SWI_NUMBER -+#define APP_TIMER_CONFIG_SWI_NUMBER 0 -+#endif -+ -+// -+//========================================================== -+ -+// -+ -+// CRC16_ENABLED - crc16 - CRC16 calculation routines -+ -+ -+#ifndef CRC16_ENABLED -+#define CRC16_ENABLED 1 -+#endif -+ -+// NRF_BALLOC_ENABLED - nrf_balloc - Block allocator module -+//========================================================== -+#ifndef NRF_BALLOC_ENABLED -+#define NRF_BALLOC_ENABLED 1 -+#endif -+// NRF_BALLOC_CONFIG_DEBUG_ENABLED - Enables debug mode in the module. -+//========================================================== -+#ifndef NRF_BALLOC_CONFIG_DEBUG_ENABLED -+#define NRF_BALLOC_CONFIG_DEBUG_ENABLED 0 -+#endif -+// NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS - Number of words used as head guard. <0-255> -+ -+ -+#ifndef NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS -+#define NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS 1 -+#endif -+ -+// NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS - Number of words used as tail guard. <0-255> -+ -+ -+#ifndef NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS -+#define NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS 1 -+#endif -+ -+// NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED - Enables basic checks in this module. -+ -+ -+#ifndef NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED -+#define NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED 0 -+#endif -+ -+// NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED - Enables double memory free check in this module. -+ -+ -+#ifndef NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED -+#define NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED 0 -+#endif -+ -+// NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED - Enables free memory corruption check in this module. -+ -+ -+#ifndef NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED -+#define NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED 0 -+#endif -+ -+// NRF_BALLOC_CLI_CMDS - Enable CLI commands specific to the module -+ -+ -+#ifndef NRF_BALLOC_CLI_CMDS -+#define NRF_BALLOC_CLI_CMDS 0 -+#endif -+ -+// -+ -+// -+ -+// NRF_FPRINTF_ENABLED - nrf_fprintf - fprintf function. -+ -+ -+#ifndef NRF_FPRINTF_ENABLED -+#define NRF_FPRINTF_ENABLED 1 -+#endif -+ -+// NRF_MEMOBJ_ENABLED - nrf_memobj - Linked memory allocator module -+ -+ -+#ifndef NRF_MEMOBJ_ENABLED -+#define NRF_MEMOBJ_ENABLED 1 -+#endif -+ -+// NRF_QUEUE_ENABLED - nrf_queue - Queue module -+//========================================================== -+#ifndef NRF_QUEUE_ENABLED -+#define NRF_QUEUE_ENABLED 1 -+#endif -+// NRF_QUEUE_CLI_CMDS - Enable CLI commands specific to the module -+ -+ -+#ifndef NRF_QUEUE_CLI_CMDS -+#define NRF_QUEUE_CLI_CMDS 0 -+#endif -+ -+// -+ -+// NRF_SECTION_ITER_ENABLED - nrf_section_iter - Section iterator -+ -+ -+#ifndef NRF_SECTION_ITER_ENABLED -+#define NRF_SECTION_ITER_ENABLED 1 -+#endif -+ -+// NRF_STRERROR_ENABLED - nrf_strerror - Library for converting error code to string. -+ -+ -+#ifndef NRF_STRERROR_ENABLED -+#define NRF_STRERROR_ENABLED 1 -+#endif -+ -+// -+//========================================================== -+ -+// nRF_Log -+ -+//========================================================== -+// NRF_LOG_BACKEND_RTT_ENABLED - nrf_log_backend_rtt - Log RTT backend -+//========================================================== -+#ifndef NRF_LOG_BACKEND_RTT_ENABLED -+#define NRF_LOG_BACKEND_RTT_ENABLED 0 -+#endif -+// NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE - Size of buffer for partially processed strings. -+// Size of the buffer is a trade-off between RAM usage and processing. -+// if buffer is smaller then strings will often be fragmented. -+// It is recommended to use size which will fit typical log and only the -+// longer one will be fragmented. -+ -+#ifndef NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE -+#define NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE 64 -+#endif -+ -+// NRF_LOG_BACKEND_RTT_TX_RETRY_DELAY_MS - Period before retrying writing to RTT -+#ifndef NRF_LOG_BACKEND_RTT_TX_RETRY_DELAY_MS -+#define NRF_LOG_BACKEND_RTT_TX_RETRY_DELAY_MS 1 -+#endif -+ -+// NRF_LOG_BACKEND_RTT_TX_RETRY_CNT - Writing to RTT retries. -+// If RTT fails to accept any new data after retries -+// module assumes that host is not active and on next -+// request it will perform only one write attempt. -+// On successful writing, module assumes that host is active -+// and scheme with retry is applied again. -+ -+#ifndef NRF_LOG_BACKEND_RTT_TX_RETRY_CNT -+#define NRF_LOG_BACKEND_RTT_TX_RETRY_CNT 3 -+#endif -+ -+// -+ -+// NRF_LOG_STR_FORMATTER_TIMESTAMP_FORMAT_ENABLED - nrf_log_str_formatter - Log string formatter -+ -+ -+#ifndef NRF_LOG_STR_FORMATTER_TIMESTAMP_FORMAT_ENABLED -+#define NRF_LOG_STR_FORMATTER_TIMESTAMP_FORMAT_ENABLED 1 -+#endif -+ -+// nrf_log - Logger -+ -+//========================================================== -+// NRF_LOG_ENABLED - Logging module for nRF5 SDK -+//========================================================== -+#ifndef NRF_LOG_ENABLED -+#define NRF_LOG_ENABLED 0 -+#endif -+// NRF_LOG_USES_COLORS - If enabled then ANSI escape code for colors is prefixed to every string -+//========================================================== -+#ifndef NRF_LOG_USES_COLORS -+#define NRF_LOG_USES_COLORS 0 -+#endif -+// NRF_LOG_COLOR_DEFAULT - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_LOG_COLOR_DEFAULT -+#define NRF_LOG_COLOR_DEFAULT 0 -+#endif -+ -+// NRF_LOG_ERROR_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_LOG_ERROR_COLOR -+#define NRF_LOG_ERROR_COLOR 2 -+#endif -+ -+// NRF_LOG_WARNING_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_LOG_WARNING_COLOR -+#define NRF_LOG_WARNING_COLOR 4 -+#endif -+ -+// -+ -+// NRF_LOG_DEFAULT_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_LOG_DEFAULT_LEVEL -+#define NRF_LOG_DEFAULT_LEVEL 3 -+#endif -+ -+// NRF_LOG_DEFERRED - Enable deffered logger. -+ -+ -+// Log data is buffered and can be processed in idle. -+ -+#ifndef NRF_LOG_DEFERRED -+#define NRF_LOG_DEFERRED 1 -+#endif -+ -+// NRF_LOG_BUFSIZE - Size of the buffer for storing logs (in bytes). -+ -+ -+// Must be power of 2 and multiple of 4. -+// If NRF_LOG_DEFERRED = 0 then buffer size can be reduced to minimum. -+// <128=> 128 -+// <256=> 256 -+// <512=> 512 -+// <1024=> 1024 -+// <2048=> 2048 -+// <4096=> 4096 -+// <8192=> 8192 -+// <16384=> 16384 -+ -+#ifndef NRF_LOG_BUFSIZE -+#define NRF_LOG_BUFSIZE 1024 -+#endif -+ -+// NRF_LOG_ALLOW_OVERFLOW - Configures behavior when circular buffer is full. -+ -+ -+// If set then oldest logs are overwritten. Otherwise a -+// marker is injected informing about overflow. -+ -+#ifndef NRF_LOG_ALLOW_OVERFLOW -+#define NRF_LOG_ALLOW_OVERFLOW 1 -+#endif -+ -+// NRF_LOG_USES_TIMESTAMP - Enable timestamping -+ -+// Function for getting the timestamp is provided by the user -+//========================================================== -+#ifndef NRF_LOG_USES_TIMESTAMP -+#define NRF_LOG_USES_TIMESTAMP 0 -+#endif -+// NRF_LOG_TIMESTAMP_DEFAULT_FREQUENCY - Default frequency of the timestamp (in Hz) -+#ifndef NRF_LOG_TIMESTAMP_DEFAULT_FREQUENCY -+#define NRF_LOG_TIMESTAMP_DEFAULT_FREQUENCY 32768 -+#endif -+ -+// -+ -+// NRF_LOG_FILTERS_ENABLED - Enable dynamic filtering of logs. -+ -+ -+#ifndef NRF_LOG_FILTERS_ENABLED -+#define NRF_LOG_FILTERS_ENABLED 0 -+#endif -+ -+// NRF_LOG_CLI_CMDS - Enable CLI commands for the module. -+ -+ -+#ifndef NRF_LOG_CLI_CMDS -+#define NRF_LOG_CLI_CMDS 0 -+#endif -+ -+// Log message pool - Configuration of log message pool -+ -+//========================================================== -+// NRF_LOG_MSGPOOL_ELEMENT_SIZE - Size of a single element in the pool of memory objects. -+// If a small value is set, then performance of logs processing -+// is degraded because data is fragmented. Bigger value impacts -+// RAM memory utilization. The size is set to fit a message with -+// a timestamp and up to 2 arguments in a single memory object. -+ -+#ifndef NRF_LOG_MSGPOOL_ELEMENT_SIZE -+#define NRF_LOG_MSGPOOL_ELEMENT_SIZE 20 -+#endif -+ -+// NRF_LOG_MSGPOOL_ELEMENT_COUNT - Number of elements in the pool of memory objects -+// If a small value is set, then it may lead to a deadlock -+// in certain cases if backend has high latency and holds -+// multiple messages for long time. Bigger value impacts -+// RAM memory usage. -+ -+#ifndef NRF_LOG_MSGPOOL_ELEMENT_COUNT -+#define NRF_LOG_MSGPOOL_ELEMENT_COUNT 8 -+#endif -+ -+// -+//========================================================== -+ -+// -+ -+// nrf_log module configuration -+ -+//========================================================== -+// nrf_log in nRF_Core -+ -+//========================================================== -+// NRF_MPU_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_MPU_CONFIG_LOG_ENABLED -+#define NRF_MPU_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_MPU_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_MPU_CONFIG_LOG_LEVEL -+#define NRF_MPU_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_MPU_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_MPU_CONFIG_INFO_COLOR -+#define NRF_MPU_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_MPU_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_MPU_CONFIG_DEBUG_COLOR -+#define NRF_MPU_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_STACK_GUARD_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_STACK_GUARD_CONFIG_LOG_ENABLED -+#define NRF_STACK_GUARD_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_STACK_GUARD_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_STACK_GUARD_CONFIG_LOG_LEVEL -+#define NRF_STACK_GUARD_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_STACK_GUARD_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_STACK_GUARD_CONFIG_INFO_COLOR -+#define NRF_STACK_GUARD_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_STACK_GUARD_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_STACK_GUARD_CONFIG_DEBUG_COLOR -+#define NRF_STACK_GUARD_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// TASK_MANAGER_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef TASK_MANAGER_CONFIG_LOG_ENABLED -+#define TASK_MANAGER_CONFIG_LOG_ENABLED 0 -+#endif -+// TASK_MANAGER_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef TASK_MANAGER_CONFIG_LOG_LEVEL -+#define TASK_MANAGER_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// TASK_MANAGER_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef TASK_MANAGER_CONFIG_INFO_COLOR -+#define TASK_MANAGER_CONFIG_INFO_COLOR 0 -+#endif -+ -+// TASK_MANAGER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef TASK_MANAGER_CONFIG_DEBUG_COLOR -+#define TASK_MANAGER_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// -+//========================================================== -+ -+// nrf_log in nRF_Drivers -+ -+//========================================================== -+// CLOCK_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef CLOCK_CONFIG_LOG_ENABLED -+#define CLOCK_CONFIG_LOG_ENABLED 0 -+#endif -+// CLOCK_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef CLOCK_CONFIG_LOG_LEVEL -+#define CLOCK_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// CLOCK_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef CLOCK_CONFIG_INFO_COLOR -+#define CLOCK_CONFIG_INFO_COLOR 0 -+#endif -+ -+// CLOCK_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef CLOCK_CONFIG_DEBUG_COLOR -+#define CLOCK_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// COMP_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef COMP_CONFIG_LOG_ENABLED -+#define COMP_CONFIG_LOG_ENABLED 0 -+#endif -+// COMP_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef COMP_CONFIG_LOG_LEVEL -+#define COMP_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// COMP_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef COMP_CONFIG_INFO_COLOR -+#define COMP_CONFIG_INFO_COLOR 0 -+#endif -+ -+// COMP_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef COMP_CONFIG_DEBUG_COLOR -+#define COMP_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// GPIOTE_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef GPIOTE_CONFIG_LOG_ENABLED -+#define GPIOTE_CONFIG_LOG_ENABLED 0 -+#endif -+// GPIOTE_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef GPIOTE_CONFIG_LOG_LEVEL -+#define GPIOTE_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// GPIOTE_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef GPIOTE_CONFIG_INFO_COLOR -+#define GPIOTE_CONFIG_INFO_COLOR 0 -+#endif -+ -+// GPIOTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef GPIOTE_CONFIG_DEBUG_COLOR -+#define GPIOTE_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// LPCOMP_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef LPCOMP_CONFIG_LOG_ENABLED -+#define LPCOMP_CONFIG_LOG_ENABLED 0 -+#endif -+// LPCOMP_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef LPCOMP_CONFIG_LOG_LEVEL -+#define LPCOMP_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// LPCOMP_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef LPCOMP_CONFIG_INFO_COLOR -+#define LPCOMP_CONFIG_INFO_COLOR 0 -+#endif -+ -+// LPCOMP_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef LPCOMP_CONFIG_DEBUG_COLOR -+#define LPCOMP_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// PDM_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef PDM_CONFIG_LOG_ENABLED -+#define PDM_CONFIG_LOG_ENABLED 0 -+#endif -+// PDM_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef PDM_CONFIG_LOG_LEVEL -+#define PDM_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// PDM_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef PDM_CONFIG_INFO_COLOR -+#define PDM_CONFIG_INFO_COLOR 0 -+#endif -+ -+// PDM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef PDM_CONFIG_DEBUG_COLOR -+#define PDM_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// PPI_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef PPI_CONFIG_LOG_ENABLED -+#define PPI_CONFIG_LOG_ENABLED 0 -+#endif -+// PPI_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef PPI_CONFIG_LOG_LEVEL -+#define PPI_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// PPI_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef PPI_CONFIG_INFO_COLOR -+#define PPI_CONFIG_INFO_COLOR 0 -+#endif -+ -+// PPI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef PPI_CONFIG_DEBUG_COLOR -+#define PPI_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// PWM_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef PWM_CONFIG_LOG_ENABLED -+#define PWM_CONFIG_LOG_ENABLED 0 -+#endif -+// PWM_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef PWM_CONFIG_LOG_LEVEL -+#define PWM_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// PWM_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef PWM_CONFIG_INFO_COLOR -+#define PWM_CONFIG_INFO_COLOR 0 -+#endif -+ -+// PWM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef PWM_CONFIG_DEBUG_COLOR -+#define PWM_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// QDEC_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef QDEC_CONFIG_LOG_ENABLED -+#define QDEC_CONFIG_LOG_ENABLED 0 -+#endif -+// QDEC_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef QDEC_CONFIG_LOG_LEVEL -+#define QDEC_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// QDEC_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef QDEC_CONFIG_INFO_COLOR -+#define QDEC_CONFIG_INFO_COLOR 0 -+#endif -+ -+// QDEC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef QDEC_CONFIG_DEBUG_COLOR -+#define QDEC_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// RNG_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef RNG_CONFIG_LOG_ENABLED -+#define RNG_CONFIG_LOG_ENABLED 0 -+#endif -+// RNG_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef RNG_CONFIG_LOG_LEVEL -+#define RNG_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// RNG_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef RNG_CONFIG_INFO_COLOR -+#define RNG_CONFIG_INFO_COLOR 0 -+#endif -+ -+// RNG_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef RNG_CONFIG_DEBUG_COLOR -+#define RNG_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED - Enables logging of random numbers. -+ -+ -+#ifndef RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED -+#define RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED 0 -+#endif -+ -+// -+ -+// RTC_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef RTC_CONFIG_LOG_ENABLED -+#define RTC_CONFIG_LOG_ENABLED 0 -+#endif -+// RTC_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef RTC_CONFIG_LOG_LEVEL -+#define RTC_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// RTC_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef RTC_CONFIG_INFO_COLOR -+#define RTC_CONFIG_INFO_COLOR 0 -+#endif -+ -+// RTC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef RTC_CONFIG_DEBUG_COLOR -+#define RTC_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// SAADC_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef SAADC_CONFIG_LOG_ENABLED -+#define SAADC_CONFIG_LOG_ENABLED 0 -+#endif -+// SAADC_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef SAADC_CONFIG_LOG_LEVEL -+#define SAADC_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// SAADC_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef SAADC_CONFIG_INFO_COLOR -+#define SAADC_CONFIG_INFO_COLOR 0 -+#endif -+ -+// SAADC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef SAADC_CONFIG_DEBUG_COLOR -+#define SAADC_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// SPIS_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef SPIS_CONFIG_LOG_ENABLED -+#define SPIS_CONFIG_LOG_ENABLED 0 -+#endif -+// SPIS_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef SPIS_CONFIG_LOG_LEVEL -+#define SPIS_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// SPIS_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef SPIS_CONFIG_INFO_COLOR -+#define SPIS_CONFIG_INFO_COLOR 0 -+#endif -+ -+// SPIS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef SPIS_CONFIG_DEBUG_COLOR -+#define SPIS_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// SPI_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef SPI_CONFIG_LOG_ENABLED -+#define SPI_CONFIG_LOG_ENABLED 0 -+#endif -+// SPI_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef SPI_CONFIG_LOG_LEVEL -+#define SPI_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// SPI_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef SPI_CONFIG_INFO_COLOR -+#define SPI_CONFIG_INFO_COLOR 0 -+#endif -+ -+// SPI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef SPI_CONFIG_DEBUG_COLOR -+#define SPI_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// TIMER_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef TIMER_CONFIG_LOG_ENABLED -+#define TIMER_CONFIG_LOG_ENABLED 0 -+#endif -+// TIMER_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef TIMER_CONFIG_LOG_LEVEL -+#define TIMER_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// TIMER_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef TIMER_CONFIG_INFO_COLOR -+#define TIMER_CONFIG_INFO_COLOR 0 -+#endif -+ -+// TIMER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef TIMER_CONFIG_DEBUG_COLOR -+#define TIMER_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// TWIS_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef TWIS_CONFIG_LOG_ENABLED -+#define TWIS_CONFIG_LOG_ENABLED 0 -+#endif -+// TWIS_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef TWIS_CONFIG_LOG_LEVEL -+#define TWIS_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// TWIS_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef TWIS_CONFIG_INFO_COLOR -+#define TWIS_CONFIG_INFO_COLOR 0 -+#endif -+ -+// TWIS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef TWIS_CONFIG_DEBUG_COLOR -+#define TWIS_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// TWI_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef TWI_CONFIG_LOG_ENABLED -+#define TWI_CONFIG_LOG_ENABLED 0 -+#endif -+// TWI_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef TWI_CONFIG_LOG_LEVEL -+#define TWI_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// TWI_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef TWI_CONFIG_INFO_COLOR -+#define TWI_CONFIG_INFO_COLOR 0 -+#endif -+ -+// TWI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef TWI_CONFIG_DEBUG_COLOR -+#define TWI_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// UART_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef UART_CONFIG_LOG_ENABLED -+#define UART_CONFIG_LOG_ENABLED 0 -+#endif -+// UART_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef UART_CONFIG_LOG_LEVEL -+#define UART_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// UART_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef UART_CONFIG_INFO_COLOR -+#define UART_CONFIG_INFO_COLOR 0 -+#endif -+ -+// UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef UART_CONFIG_DEBUG_COLOR -+#define UART_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// USBD_CONFIG_LOG_ENABLED - Enable logging in the module -+//========================================================== -+#ifndef USBD_CONFIG_LOG_ENABLED -+#define USBD_CONFIG_LOG_ENABLED 0 -+#endif -+// USBD_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef USBD_CONFIG_LOG_LEVEL -+#define USBD_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// USBD_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef USBD_CONFIG_INFO_COLOR -+#define USBD_CONFIG_INFO_COLOR 0 -+#endif -+ -+// USBD_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef USBD_CONFIG_DEBUG_COLOR -+#define USBD_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// WDT_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef WDT_CONFIG_LOG_ENABLED -+#define WDT_CONFIG_LOG_ENABLED 0 -+#endif -+// WDT_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef WDT_CONFIG_LOG_LEVEL -+#define WDT_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// WDT_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef WDT_CONFIG_INFO_COLOR -+#define WDT_CONFIG_INFO_COLOR 0 -+#endif -+ -+// WDT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef WDT_CONFIG_DEBUG_COLOR -+#define WDT_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// -+//========================================================== -+ -+// nrf_log in nRF_Libraries -+ -+//========================================================== -+// APP_TIMER_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef APP_TIMER_CONFIG_LOG_ENABLED -+#define APP_TIMER_CONFIG_LOG_ENABLED 0 -+#endif -+// APP_TIMER_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef APP_TIMER_CONFIG_LOG_LEVEL -+#define APP_TIMER_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// APP_TIMER_CONFIG_INITIAL_LOG_LEVEL - Initial severity level if dynamic filtering is enabled. -+ -+ -+// If module generates a lot of logs, initial log level can -+// be decreased to prevent flooding. Severity level can be -+// increased on instance basis. -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef APP_TIMER_CONFIG_INITIAL_LOG_LEVEL -+#define APP_TIMER_CONFIG_INITIAL_LOG_LEVEL 3 -+#endif -+ -+// APP_TIMER_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef APP_TIMER_CONFIG_INFO_COLOR -+#define APP_TIMER_CONFIG_INFO_COLOR 0 -+#endif -+ -+// APP_TIMER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef APP_TIMER_CONFIG_DEBUG_COLOR -+#define APP_TIMER_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// APP_USBD_CDC_ACM_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef APP_USBD_CDC_ACM_CONFIG_LOG_ENABLED -+#define APP_USBD_CDC_ACM_CONFIG_LOG_ENABLED 0 -+#endif -+// APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL -+#define APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// APP_USBD_CDC_ACM_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef APP_USBD_CDC_ACM_CONFIG_INFO_COLOR -+#define APP_USBD_CDC_ACM_CONFIG_INFO_COLOR 0 -+#endif -+ -+// APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR -+#define APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// APP_USBD_DUMMY_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef APP_USBD_DUMMY_CONFIG_LOG_ENABLED -+#define APP_USBD_DUMMY_CONFIG_LOG_ENABLED 0 -+#endif -+// APP_USBD_DUMMY_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef APP_USBD_DUMMY_CONFIG_LOG_LEVEL -+#define APP_USBD_DUMMY_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// APP_USBD_DUMMY_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef APP_USBD_DUMMY_CONFIG_INFO_COLOR -+#define APP_USBD_DUMMY_CONFIG_INFO_COLOR 0 -+#endif -+ -+// APP_USBD_DUMMY_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef APP_USBD_DUMMY_CONFIG_DEBUG_COLOR -+#define APP_USBD_DUMMY_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// APP_USBD_MSC_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef APP_USBD_MSC_CONFIG_LOG_ENABLED -+#define APP_USBD_MSC_CONFIG_LOG_ENABLED 0 -+#endif -+// APP_USBD_MSC_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef APP_USBD_MSC_CONFIG_LOG_LEVEL -+#define APP_USBD_MSC_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// APP_USBD_MSC_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef APP_USBD_MSC_CONFIG_INFO_COLOR -+#define APP_USBD_MSC_CONFIG_INFO_COLOR 0 -+#endif -+ -+// APP_USBD_MSC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef APP_USBD_MSC_CONFIG_DEBUG_COLOR -+#define APP_USBD_MSC_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_ENABLED -+#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_ENABLED 0 -+#endif -+// APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_LEVEL -+#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// APP_USBD_NRF_DFU_TRIGGER_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_INFO_COLOR -+#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_INFO_COLOR 0 -+#endif -+ -+// APP_USBD_NRF_DFU_TRIGGER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_DEBUG_COLOR -+#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_ATFIFO_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_ATFIFO_CONFIG_LOG_ENABLED -+#define NRF_ATFIFO_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_ATFIFO_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_ATFIFO_CONFIG_LOG_LEVEL -+#define NRF_ATFIFO_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_ATFIFO_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_ATFIFO_CONFIG_LOG_INIT_FILTER_LEVEL -+#define NRF_ATFIFO_CONFIG_LOG_INIT_FILTER_LEVEL 3 -+#endif -+ -+// NRF_ATFIFO_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_ATFIFO_CONFIG_INFO_COLOR -+#define NRF_ATFIFO_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_ATFIFO_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_ATFIFO_CONFIG_DEBUG_COLOR -+#define NRF_ATFIFO_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_BALLOC_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_BALLOC_CONFIG_LOG_ENABLED -+#define NRF_BALLOC_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_BALLOC_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_BALLOC_CONFIG_LOG_LEVEL -+#define NRF_BALLOC_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_BALLOC_CONFIG_INITIAL_LOG_LEVEL - Initial severity level if dynamic filtering is enabled. -+ -+ -+// If module generates a lot of logs, initial log level can -+// be decreased to prevent flooding. Severity level can be -+// increased on instance basis. -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_BALLOC_CONFIG_INITIAL_LOG_LEVEL -+#define NRF_BALLOC_CONFIG_INITIAL_LOG_LEVEL 3 -+#endif -+ -+// NRF_BALLOC_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_BALLOC_CONFIG_INFO_COLOR -+#define NRF_BALLOC_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_BALLOC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_BALLOC_CONFIG_DEBUG_COLOR -+#define NRF_BALLOC_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_CLI_BLE_UART_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_CLI_BLE_UART_CONFIG_LOG_ENABLED -+#define NRF_CLI_BLE_UART_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL -+#define NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_CLI_BLE_UART_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_CLI_BLE_UART_CONFIG_INFO_COLOR -+#define NRF_CLI_BLE_UART_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR -+#define NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_CLI_LIBUARTE_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_CLI_LIBUARTE_CONFIG_LOG_ENABLED -+#define NRF_CLI_LIBUARTE_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_CLI_LIBUARTE_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_CLI_LIBUARTE_CONFIG_LOG_LEVEL -+#define NRF_CLI_LIBUARTE_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_CLI_LIBUARTE_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_CLI_LIBUARTE_CONFIG_INFO_COLOR -+#define NRF_CLI_LIBUARTE_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_CLI_LIBUARTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_CLI_LIBUARTE_CONFIG_DEBUG_COLOR -+#define NRF_CLI_LIBUARTE_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_CLI_UART_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_CLI_UART_CONFIG_LOG_ENABLED -+#define NRF_CLI_UART_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_CLI_UART_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_CLI_UART_CONFIG_LOG_LEVEL -+#define NRF_CLI_UART_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_CLI_UART_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_CLI_UART_CONFIG_INFO_COLOR -+#define NRF_CLI_UART_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_CLI_UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_CLI_UART_CONFIG_DEBUG_COLOR -+#define NRF_CLI_UART_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_LIBUARTE_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_LIBUARTE_CONFIG_LOG_ENABLED -+#define NRF_LIBUARTE_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_LIBUARTE_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_LIBUARTE_CONFIG_LOG_LEVEL -+#define NRF_LIBUARTE_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_LIBUARTE_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_LIBUARTE_CONFIG_INFO_COLOR -+#define NRF_LIBUARTE_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_LIBUARTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_LIBUARTE_CONFIG_DEBUG_COLOR -+#define NRF_LIBUARTE_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_MEMOBJ_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_MEMOBJ_CONFIG_LOG_ENABLED -+#define NRF_MEMOBJ_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_MEMOBJ_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_MEMOBJ_CONFIG_LOG_LEVEL -+#define NRF_MEMOBJ_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_MEMOBJ_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_MEMOBJ_CONFIG_INFO_COLOR -+#define NRF_MEMOBJ_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_MEMOBJ_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_MEMOBJ_CONFIG_DEBUG_COLOR -+#define NRF_MEMOBJ_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_PWR_MGMT_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_PWR_MGMT_CONFIG_LOG_ENABLED -+#define NRF_PWR_MGMT_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_PWR_MGMT_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_PWR_MGMT_CONFIG_LOG_LEVEL -+#define NRF_PWR_MGMT_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_PWR_MGMT_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_PWR_MGMT_CONFIG_INFO_COLOR -+#define NRF_PWR_MGMT_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_PWR_MGMT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_PWR_MGMT_CONFIG_DEBUG_COLOR -+#define NRF_PWR_MGMT_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_QUEUE_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_QUEUE_CONFIG_LOG_ENABLED -+#define NRF_QUEUE_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_QUEUE_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_QUEUE_CONFIG_LOG_LEVEL -+#define NRF_QUEUE_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_QUEUE_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_QUEUE_CONFIG_LOG_INIT_FILTER_LEVEL -+#define NRF_QUEUE_CONFIG_LOG_INIT_FILTER_LEVEL 3 -+#endif -+ -+// NRF_QUEUE_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_QUEUE_CONFIG_INFO_COLOR -+#define NRF_QUEUE_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_QUEUE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_QUEUE_CONFIG_DEBUG_COLOR -+#define NRF_QUEUE_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_SDH_ANT_LOG_ENABLED - Enable logging in SoftDevice handler (ANT) module. -+//========================================================== -+#ifndef NRF_SDH_ANT_LOG_ENABLED -+#define NRF_SDH_ANT_LOG_ENABLED 0 -+#endif -+// NRF_SDH_ANT_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_SDH_ANT_LOG_LEVEL -+#define NRF_SDH_ANT_LOG_LEVEL 3 -+#endif -+ -+// NRF_SDH_ANT_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_SDH_ANT_INFO_COLOR -+#define NRF_SDH_ANT_INFO_COLOR 0 -+#endif -+ -+// NRF_SDH_ANT_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_SDH_ANT_DEBUG_COLOR -+#define NRF_SDH_ANT_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_SDH_BLE_LOG_ENABLED - Enable logging in SoftDevice handler (BLE) module. -+//========================================================== -+#ifndef NRF_SDH_BLE_LOG_ENABLED -+#define NRF_SDH_BLE_LOG_ENABLED 1 -+#endif -+// NRF_SDH_BLE_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_SDH_BLE_LOG_LEVEL -+#define NRF_SDH_BLE_LOG_LEVEL 3 -+#endif -+ -+// NRF_SDH_BLE_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_SDH_BLE_INFO_COLOR -+#define NRF_SDH_BLE_INFO_COLOR 0 -+#endif -+ -+// NRF_SDH_BLE_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_SDH_BLE_DEBUG_COLOR -+#define NRF_SDH_BLE_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_SDH_LOG_ENABLED - Enable logging in SoftDevice handler module. -+//========================================================== -+#ifndef NRF_SDH_LOG_ENABLED -+#define NRF_SDH_LOG_ENABLED 1 -+#endif -+// NRF_SDH_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_SDH_LOG_LEVEL -+#define NRF_SDH_LOG_LEVEL 3 -+#endif -+ -+// NRF_SDH_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_SDH_INFO_COLOR -+#define NRF_SDH_INFO_COLOR 0 -+#endif -+ -+// NRF_SDH_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_SDH_DEBUG_COLOR -+#define NRF_SDH_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_SDH_SOC_LOG_ENABLED - Enable logging in SoftDevice handler (SoC) module. -+//========================================================== -+#ifndef NRF_SDH_SOC_LOG_ENABLED -+#define NRF_SDH_SOC_LOG_ENABLED 1 -+#endif -+// NRF_SDH_SOC_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_SDH_SOC_LOG_LEVEL -+#define NRF_SDH_SOC_LOG_LEVEL 3 -+#endif -+ -+// NRF_SDH_SOC_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_SDH_SOC_INFO_COLOR -+#define NRF_SDH_SOC_INFO_COLOR 0 -+#endif -+ -+// NRF_SDH_SOC_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_SDH_SOC_DEBUG_COLOR -+#define NRF_SDH_SOC_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_SORTLIST_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_SORTLIST_CONFIG_LOG_ENABLED -+#define NRF_SORTLIST_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_SORTLIST_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_SORTLIST_CONFIG_LOG_LEVEL -+#define NRF_SORTLIST_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_SORTLIST_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_SORTLIST_CONFIG_INFO_COLOR -+#define NRF_SORTLIST_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_SORTLIST_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_SORTLIST_CONFIG_DEBUG_COLOR -+#define NRF_SORTLIST_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_TWI_SENSOR_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_TWI_SENSOR_CONFIG_LOG_ENABLED -+#define NRF_TWI_SENSOR_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_TWI_SENSOR_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_TWI_SENSOR_CONFIG_LOG_LEVEL -+#define NRF_TWI_SENSOR_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_TWI_SENSOR_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_TWI_SENSOR_CONFIG_INFO_COLOR -+#define NRF_TWI_SENSOR_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_TWI_SENSOR_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_TWI_SENSOR_CONFIG_DEBUG_COLOR -+#define NRF_TWI_SENSOR_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// -+//========================================================== -+ -+// nrf_log in nRF_Serialization -+ -+//========================================================== -+// SER_HAL_TRANSPORT_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef SER_HAL_TRANSPORT_CONFIG_LOG_ENABLED -+#define SER_HAL_TRANSPORT_CONFIG_LOG_ENABLED 0 -+#endif -+// SER_HAL_TRANSPORT_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef SER_HAL_TRANSPORT_CONFIG_LOG_LEVEL -+#define SER_HAL_TRANSPORT_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// SER_HAL_TRANSPORT_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef SER_HAL_TRANSPORT_CONFIG_INFO_COLOR -+#define SER_HAL_TRANSPORT_CONFIG_INFO_COLOR 0 -+#endif -+ -+// SER_HAL_TRANSPORT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef SER_HAL_TRANSPORT_CONFIG_DEBUG_COLOR -+#define SER_HAL_TRANSPORT_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// -+//========================================================== -+ -+// -+//========================================================== -+ -+// -+//========================================================== -+ -+// -+//========================================================== -+ -+// nRF_Segger_RTT -+ -+//========================================================== -+// segger_rtt - SEGGER RTT -+ -+//========================================================== -+// SEGGER_RTT_CONFIG_BUFFER_SIZE_UP - Size of upstream buffer. -+// Note that either @ref NRF_LOG_BACKEND_RTT_OUTPUT_BUFFER_SIZE -+// or this value is actually used. It depends on which one is bigger. -+ -+#ifndef SEGGER_RTT_CONFIG_BUFFER_SIZE_UP -+#define SEGGER_RTT_CONFIG_BUFFER_SIZE_UP 512 -+#endif -+ -+// SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS - Size of upstream buffer. -+#ifndef SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS -+#define SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS 2 -+#endif -+ -+// SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN - Size of upstream buffer. -+#ifndef SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN -+#define SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN 16 -+#endif -+ -+// SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS - Size of upstream buffer. -+#ifndef SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS -+#define SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS 2 -+#endif -+ -+// SEGGER_RTT_CONFIG_DEFAULT_MODE - RTT behavior if the buffer is full. -+ -+ -+// The following modes are supported: -+// - SKIP - Do not block, output nothing. -+// - TRIM - Do not block, output as much as fits. -+// - BLOCK - Wait until there is space in the buffer. -+// <0=> SKIP -+// <1=> TRIM -+// <2=> BLOCK_IF_FIFO_FULL -+ -+#ifndef SEGGER_RTT_CONFIG_DEFAULT_MODE -+#define SEGGER_RTT_CONFIG_DEFAULT_MODE 0 -+#endif -+ -+// -+//========================================================== -+ -+// -+//========================================================== -+ -+// nRF_SoftDevice -+ -+//========================================================== -+// NRF_SDH_BLE_ENABLED - nrf_sdh_ble - SoftDevice BLE event handler -+//========================================================== -+#ifndef NRF_SDH_BLE_ENABLED -+#define NRF_SDH_BLE_ENABLED 1 -+#endif -+// BLE Stack configuration - Stack configuration parameters -+ -+// The SoftDevice handler will configure the stack with these parameters when calling @ref nrf_sdh_ble_default_cfg_set. -+// Other libraries might depend on these values; keep them up-to-date even if you are not explicitely calling @ref nrf_sdh_ble_default_cfg_set. -+//========================================================== -+// NRF_SDH_BLE_GAP_DATA_LENGTH <27-251> -+ -+ -+// Requested BLE GAP data length to be negotiated. -+ -+#ifndef NRF_SDH_BLE_GAP_DATA_LENGTH -+#define NRF_SDH_BLE_GAP_DATA_LENGTH 27 -+#endif -+ -+// NRF_SDH_BLE_PERIPHERAL_LINK_COUNT - Maximum number of peripheral links. -+#ifndef NRF_SDH_BLE_PERIPHERAL_LINK_COUNT -+#define NRF_SDH_BLE_PERIPHERAL_LINK_COUNT 8 -+#endif -+ -+// NRF_SDH_BLE_CENTRAL_LINK_COUNT - Maximum number of central links. -+#ifndef NRF_SDH_BLE_CENTRAL_LINK_COUNT -+#define NRF_SDH_BLE_CENTRAL_LINK_COUNT 8 -+#endif -+ -+// NRF_SDH_BLE_TOTAL_LINK_COUNT - Total link count. -+// Maximum number of total concurrent connections using the default configuration. -+ -+#ifndef NRF_SDH_BLE_TOTAL_LINK_COUNT -+#define NRF_SDH_BLE_TOTAL_LINK_COUNT 1 -+#endif -+ -+// NRF_SDH_BLE_GAP_EVENT_LENGTH - GAP event length. -+// The time set aside for this connection on every connection interval in 1.25 ms units. -+ -+#ifndef NRF_SDH_BLE_GAP_EVENT_LENGTH -+#define NRF_SDH_BLE_GAP_EVENT_LENGTH 6 -+#endif -+ -+// NRF_SDH_BLE_GATT_MAX_MTU_SIZE - Static maximum MTU size. -+#ifndef NRF_SDH_BLE_GATT_MAX_MTU_SIZE -+#define NRF_SDH_BLE_GATT_MAX_MTU_SIZE 250 -+#endif -+ -+// NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE - Attribute Table size in bytes. The size must be a multiple of 4. -+#ifndef NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE -+#define NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE 1408 -+#endif -+ -+// NRF_SDH_BLE_VS_UUID_COUNT - The number of vendor-specific UUIDs. -+#ifndef NRF_SDH_BLE_VS_UUID_COUNT -+#define NRF_SDH_BLE_VS_UUID_COUNT 0 -+#endif -+ -+// NRF_SDH_BLE_SERVICE_CHANGED - Include the Service Changed characteristic in the Attribute Table. -+ -+ -+#ifndef NRF_SDH_BLE_SERVICE_CHANGED -+#define NRF_SDH_BLE_SERVICE_CHANGED 0 -+#endif -+ -+// -+//========================================================== -+ -+// BLE Observers - Observers and priority levels -+ -+//========================================================== -+// NRF_SDH_BLE_OBSERVER_PRIO_LEVELS - Total number of priority levels for BLE observers. -+// This setting configures the number of priority levels available for BLE event handlers. -+// The priority level of a handler determines the order in which it receives events, with respect to other handlers. -+ -+#ifndef NRF_SDH_BLE_OBSERVER_PRIO_LEVELS -+#define NRF_SDH_BLE_OBSERVER_PRIO_LEVELS 4 -+#endif -+ -+// BLE Observers priorities - Invididual priorities -+ -+//========================================================== -+// BLE_ADV_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Advertising module. -+ -+#ifndef BLE_ADV_BLE_OBSERVER_PRIO -+#define BLE_ADV_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// BLE_ANCS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Apple Notification Service Client. -+ -+#ifndef BLE_ANCS_C_BLE_OBSERVER_PRIO -+#define BLE_ANCS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_ANS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Alert Notification Service Client. -+ -+#ifndef BLE_ANS_C_BLE_OBSERVER_PRIO -+#define BLE_ANS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_BAS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Battery Service. -+ -+#ifndef BLE_BAS_BLE_OBSERVER_PRIO -+#define BLE_BAS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_BAS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Battery Service Client. -+ -+#ifndef BLE_BAS_C_BLE_OBSERVER_PRIO -+#define BLE_BAS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_BPS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Blood Pressure Service. -+ -+#ifndef BLE_BPS_BLE_OBSERVER_PRIO -+#define BLE_BPS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_CONN_PARAMS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Connection parameters module. -+ -+#ifndef BLE_CONN_PARAMS_BLE_OBSERVER_PRIO -+#define BLE_CONN_PARAMS_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// BLE_CONN_STATE_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Connection State module. -+ -+#ifndef BLE_CONN_STATE_BLE_OBSERVER_PRIO -+#define BLE_CONN_STATE_BLE_OBSERVER_PRIO 0 -+#endif -+ -+// BLE_CSCS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Cycling Speed and Cadence Service. -+ -+#ifndef BLE_CSCS_BLE_OBSERVER_PRIO -+#define BLE_CSCS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_CTS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Current Time Service Client. -+ -+#ifndef BLE_CTS_C_BLE_OBSERVER_PRIO -+#define BLE_CTS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_DB_DISC_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Database Discovery module. -+ -+#ifndef BLE_DB_DISC_BLE_OBSERVER_PRIO -+#define BLE_DB_DISC_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// BLE_DFU_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the DFU Service. -+ -+#ifndef BLE_DFU_BLE_OBSERVER_PRIO -+#define BLE_DFU_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_DIS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Device Information Client. -+ -+#ifndef BLE_DIS_C_BLE_OBSERVER_PRIO -+#define BLE_DIS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_GLS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Glucose Service. -+ -+#ifndef BLE_GLS_BLE_OBSERVER_PRIO -+#define BLE_GLS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_HIDS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Human Interface Device Service. -+ -+#ifndef BLE_HIDS_BLE_OBSERVER_PRIO -+#define BLE_HIDS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_HRS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Heart Rate Service. -+ -+#ifndef BLE_HRS_BLE_OBSERVER_PRIO -+#define BLE_HRS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_HRS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Heart Rate Service Client. -+ -+#ifndef BLE_HRS_C_BLE_OBSERVER_PRIO -+#define BLE_HRS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_HTS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Health Thermometer Service. -+ -+#ifndef BLE_HTS_BLE_OBSERVER_PRIO -+#define BLE_HTS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_IAS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Immediate Alert Service. -+ -+#ifndef BLE_IAS_BLE_OBSERVER_PRIO -+#define BLE_IAS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_IAS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Immediate Alert Service Client. -+ -+#ifndef BLE_IAS_C_BLE_OBSERVER_PRIO -+#define BLE_IAS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_LBS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the LED Button Service. -+ -+#ifndef BLE_LBS_BLE_OBSERVER_PRIO -+#define BLE_LBS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_LBS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the LED Button Service Client. -+ -+#ifndef BLE_LBS_C_BLE_OBSERVER_PRIO -+#define BLE_LBS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_LESC_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the BLE LESC module. -+ -+#ifndef BLE_LESC_OBSERVER_PRIO -+#define BLE_LESC_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_LLS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Link Loss Service. -+ -+#ifndef BLE_LLS_BLE_OBSERVER_PRIO -+#define BLE_LLS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_LNS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Location Navigation Service. -+ -+#ifndef BLE_LNS_BLE_OBSERVER_PRIO -+#define BLE_LNS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_NUS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the UART Service. -+ -+#ifndef BLE_NUS_BLE_OBSERVER_PRIO -+#define BLE_NUS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_NUS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the UART Central Service. -+ -+#ifndef BLE_NUS_C_BLE_OBSERVER_PRIO -+#define BLE_NUS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_OTS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Object transfer service. -+ -+#ifndef BLE_OTS_BLE_OBSERVER_PRIO -+#define BLE_OTS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_OTS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Object transfer service client. -+ -+#ifndef BLE_OTS_C_BLE_OBSERVER_PRIO -+#define BLE_OTS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_RSCS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Running Speed and Cadence Service. -+ -+#ifndef BLE_RSCS_BLE_OBSERVER_PRIO -+#define BLE_RSCS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_RSCS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Running Speed and Cadence Client. -+ -+#ifndef BLE_RSCS_C_BLE_OBSERVER_PRIO -+#define BLE_RSCS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_TPS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the TX Power Service. -+ -+#ifndef BLE_TPS_BLE_OBSERVER_PRIO -+#define BLE_TPS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BSP_BTN_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Button Control module. -+ -+#ifndef BSP_BTN_BLE_OBSERVER_PRIO -+#define BSP_BTN_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NRF_BLE_BMS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Bond Management Service. -+ -+#ifndef NRF_BLE_BMS_BLE_OBSERVER_PRIO -+#define NRF_BLE_BMS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// NRF_BLE_CGMS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Contiuon Glucose Monitoring Service. -+ -+#ifndef NRF_BLE_CGMS_BLE_OBSERVER_PRIO -+#define NRF_BLE_CGMS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// NRF_BLE_ES_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Eddystone module. -+ -+#ifndef NRF_BLE_ES_BLE_OBSERVER_PRIO -+#define NRF_BLE_ES_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the GATT Service Client. -+ -+#ifndef NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO -+#define NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// NRF_BLE_GATT_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the GATT module. -+ -+#ifndef NRF_BLE_GATT_BLE_OBSERVER_PRIO -+#define NRF_BLE_GATT_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NRF_BLE_QWR_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Queued writes module. -+ -+#ifndef NRF_BLE_QWR_BLE_OBSERVER_PRIO -+#define NRF_BLE_QWR_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// PM_BLE_OBSERVER_PRIO - Priority with which BLE events are dispatched to the Peer Manager module. -+#ifndef PM_BLE_OBSERVER_PRIO -+#define PM_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// -+//========================================================== -+ -+// -+//========================================================== -+ -+ -+// -+ -+// NRF_SDH_ENABLED - nrf_sdh - SoftDevice handler -+//========================================================== -+#ifndef NRF_SDH_ENABLED -+#define NRF_SDH_ENABLED 1 -+#endif -+// Dispatch model -+ -+// This setting configures how Stack events are dispatched to the application. -+//========================================================== -+// NRF_SDH_DISPATCH_MODEL -+ -+ -+// NRF_SDH_DISPATCH_MODEL_INTERRUPT: SoftDevice events are passed to the application from the interrupt context. -+// NRF_SDH_DISPATCH_MODEL_APPSH: SoftDevice events are scheduled using @ref app_scheduler. -+// NRF_SDH_DISPATCH_MODEL_POLLING: SoftDevice events are to be fetched manually. -+// <0=> NRF_SDH_DISPATCH_MODEL_INTERRUPT -+// <1=> NRF_SDH_DISPATCH_MODEL_APPSH -+// <2=> NRF_SDH_DISPATCH_MODEL_POLLING -+ -+#ifndef NRF_SDH_DISPATCH_MODEL -+#define NRF_SDH_DISPATCH_MODEL 0 -+#endif -+ -+// -+//========================================================== -+ -+// Clock - SoftDevice clock configuration -+ -+//========================================================== -+// NRF_SDH_CLOCK_LF_SRC - SoftDevice clock source. -+ -+// <0=> NRF_CLOCK_LF_SRC_RC -+// <1=> NRF_CLOCK_LF_SRC_XTAL -+// <2=> NRF_CLOCK_LF_SRC_SYNTH -+ -+#ifndef NRF_SDH_CLOCK_LF_SRC -+#define NRF_SDH_CLOCK_LF_SRC 1 -+#endif -+ -+// NRF_SDH_CLOCK_LF_RC_CTIV - SoftDevice calibration timer interval. -+#ifndef NRF_SDH_CLOCK_LF_RC_CTIV -+#define NRF_SDH_CLOCK_LF_RC_CTIV 0 -+#endif -+ -+// NRF_SDH_CLOCK_LF_RC_TEMP_CTIV - SoftDevice calibration timer interval under constant temperature. -+// How often (in number of calibration intervals) the RC oscillator shall be calibrated -+// if the temperature has not changed. -+ -+#ifndef NRF_SDH_CLOCK_LF_RC_TEMP_CTIV -+#define NRF_SDH_CLOCK_LF_RC_TEMP_CTIV 0 -+#endif -+ -+// NRF_SDH_CLOCK_LF_ACCURACY - External clock accuracy used in the LL to compute timing. -+ -+// <0=> NRF_CLOCK_LF_ACCURACY_250_PPM -+// <1=> NRF_CLOCK_LF_ACCURACY_500_PPM -+// <2=> NRF_CLOCK_LF_ACCURACY_150_PPM -+// <3=> NRF_CLOCK_LF_ACCURACY_100_PPM -+// <4=> NRF_CLOCK_LF_ACCURACY_75_PPM -+// <5=> NRF_CLOCK_LF_ACCURACY_50_PPM -+// <6=> NRF_CLOCK_LF_ACCURACY_30_PPM -+// <7=> NRF_CLOCK_LF_ACCURACY_20_PPM -+// <8=> NRF_CLOCK_LF_ACCURACY_10_PPM -+// <9=> NRF_CLOCK_LF_ACCURACY_5_PPM -+// <10=> NRF_CLOCK_LF_ACCURACY_2_PPM -+// <11=> NRF_CLOCK_LF_ACCURACY_1_PPM -+ -+#ifndef NRF_SDH_CLOCK_LF_ACCURACY -+#define NRF_SDH_CLOCK_LF_ACCURACY 7 -+#endif -+ -+// -+//========================================================== -+ -+// SDH Observers - Observers and priority levels -+ -+//========================================================== -+// NRF_SDH_REQ_OBSERVER_PRIO_LEVELS - Total number of priority levels for request observers. -+// This setting configures the number of priority levels available for the SoftDevice request event handlers. -+// The priority level of a handler determines the order in which it receives events, with respect to other handlers. -+ -+#ifndef NRF_SDH_REQ_OBSERVER_PRIO_LEVELS -+#define NRF_SDH_REQ_OBSERVER_PRIO_LEVELS 2 -+#endif -+ -+// NRF_SDH_STATE_OBSERVER_PRIO_LEVELS - Total number of priority levels for state observers. -+// This setting configures the number of priority levels available for the SoftDevice state event handlers. -+// The priority level of a handler determines the order in which it receives events, with respect to other handlers. -+ -+#ifndef NRF_SDH_STATE_OBSERVER_PRIO_LEVELS -+#define NRF_SDH_STATE_OBSERVER_PRIO_LEVELS 2 -+#endif -+ -+// NRF_SDH_STACK_OBSERVER_PRIO_LEVELS - Total number of priority levels for stack event observers. -+// This setting configures the number of priority levels available for the SoftDevice stack event handlers (ANT, BLE, SoC). -+// The priority level of a handler determines the order in which it receives events, with respect to other handlers. -+ -+#ifndef NRF_SDH_STACK_OBSERVER_PRIO_LEVELS -+#define NRF_SDH_STACK_OBSERVER_PRIO_LEVELS 2 -+#endif -+ -+ -+// State Observers priorities - Invididual priorities -+ -+//========================================================== -+// CLOCK_CONFIG_STATE_OBSERVER_PRIO -+// Priority with which state events are dispatched to the Clock driver. -+ -+#ifndef CLOCK_CONFIG_STATE_OBSERVER_PRIO -+#define CLOCK_CONFIG_STATE_OBSERVER_PRIO 0 -+#endif -+ -+// POWER_CONFIG_STATE_OBSERVER_PRIO -+// Priority with which state events are dispatched to the Power driver. -+ -+#ifndef POWER_CONFIG_STATE_OBSERVER_PRIO -+#define POWER_CONFIG_STATE_OBSERVER_PRIO 0 -+#endif -+ -+// RNG_CONFIG_STATE_OBSERVER_PRIO -+// Priority with which state events are dispatched to this module. -+ -+#ifndef RNG_CONFIG_STATE_OBSERVER_PRIO -+#define RNG_CONFIG_STATE_OBSERVER_PRIO 0 -+#endif -+ -+// -+//========================================================== -+ -+// Stack Event Observers priorities - Invididual priorities -+ -+//========================================================== -+// NRF_SDH_ANT_STACK_OBSERVER_PRIO -+// This setting configures the priority with which ANT events are processed with respect to other events coming from the stack. -+// Modify this setting if you need to have ANT events dispatched before or after other stack events, such as BLE or SoC. -+// Zero is the highest priority. -+ -+#ifndef NRF_SDH_ANT_STACK_OBSERVER_PRIO -+#define NRF_SDH_ANT_STACK_OBSERVER_PRIO 0 -+#endif -+ -+// NRF_SDH_BLE_STACK_OBSERVER_PRIO -+// This setting configures the priority with which BLE events are processed with respect to other events coming from the stack. -+// Modify this setting if you need to have BLE events dispatched before or after other stack events, such as ANT or SoC. -+// Zero is the highest priority. -+ -+#ifndef NRF_SDH_BLE_STACK_OBSERVER_PRIO -+#define NRF_SDH_BLE_STACK_OBSERVER_PRIO 0 -+#endif -+ -+// NRF_SDH_SOC_STACK_OBSERVER_PRIO -+// This setting configures the priority with which SoC events are processed with respect to other events coming from the stack. -+// Modify this setting if you need to have SoC events dispatched before or after other stack events, such as ANT or BLE. -+// Zero is the highest priority. -+ -+#ifndef NRF_SDH_SOC_STACK_OBSERVER_PRIO -+#define NRF_SDH_SOC_STACK_OBSERVER_PRIO 0 -+#endif -+ -+// -+//========================================================== -+ -+// -+//========================================================== -+ -+ -+// -+ -+// NRF_SDH_SOC_ENABLED - nrf_sdh_soc - SoftDevice SoC event handler -+//========================================================== -+#ifndef NRF_SDH_SOC_ENABLED -+#define NRF_SDH_SOC_ENABLED 1 -+#endif -+// SoC Observers - Observers and priority levels -+ -+//========================================================== -+// NRF_SDH_SOC_OBSERVER_PRIO_LEVELS - Total number of priority levels for SoC observers. -+// This setting configures the number of priority levels available for the SoC event handlers. -+// The priority level of a handler determines the order in which it receives events, with respect to other handlers. -+ -+#ifndef NRF_SDH_SOC_OBSERVER_PRIO_LEVELS -+#define NRF_SDH_SOC_OBSERVER_PRIO_LEVELS 2 -+#endif -+ -+// SoC Observers priorities - Invididual priorities -+ -+//========================================================== -+// BLE_ADV_SOC_OBSERVER_PRIO -+// Priority with which SoC events are dispatched to the Advertising module. -+ -+#ifndef BLE_ADV_SOC_OBSERVER_PRIO -+#define BLE_ADV_SOC_OBSERVER_PRIO 1 -+#endif -+ -+// BLE_DFU_SOC_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the DFU Service. -+ -+#ifndef BLE_DFU_SOC_OBSERVER_PRIO -+#define BLE_DFU_SOC_OBSERVER_PRIO 1 -+#endif -+ -+// CLOCK_CONFIG_SOC_OBSERVER_PRIO -+// Priority with which SoC events are dispatched to the Clock driver. -+ -+#ifndef CLOCK_CONFIG_SOC_OBSERVER_PRIO -+#define CLOCK_CONFIG_SOC_OBSERVER_PRIO 0 -+#endif -+ -+// POWER_CONFIG_SOC_OBSERVER_PRIO -+// Priority with which SoC events are dispatched to the Power driver. -+ -+#ifndef POWER_CONFIG_SOC_OBSERVER_PRIO -+#define POWER_CONFIG_SOC_OBSERVER_PRIO 0 -+#endif -+ -+// -+//========================================================== -+ -+// -+//========================================================== -+ -+ -+// -+ -+// -+//========================================================== -+ -+// <<< end of configuration section >>> -+#endif //SDK_CONFIG_H -+ -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/iar/ble_connectivity_iar_nRF5x.icf b/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/iar/ble_connectivity_iar_nRF5x.icf ---- a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/iar/ble_connectivity_iar_nRF5x.icf 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/iar/ble_connectivity_iar_nRF5x.icf 2018-07-18 17:28:04.000000000 +0200 -@@ -0,0 +1,36 @@ -+/*###ICF### Section handled by ICF editor, don't touch! ****/ -+/*-Editor annotation file-*/ -+/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ -+/*-Specials-*/ -+define symbol __ICFEDIT_intvec_start__ = 0x23000; -+/*-Memory Regions-*/ -+define symbol __ICFEDIT_region_ROM_start__ = 0x23000; -+define symbol __ICFEDIT_region_ROM_end__ = 0x7ffff; -+define symbol __ICFEDIT_region_RAM_start__ = 0x2000b380; -+define symbol __ICFEDIT_region_RAM_end__ = 0x2000ffff; -+export symbol __ICFEDIT_region_RAM_start__; -+export symbol __ICFEDIT_region_RAM_end__; -+/*-Sizes-*/ -+define symbol __ICFEDIT_size_cstack__ = 2048; -+define symbol __ICFEDIT_size_heap__ = 512; -+/**** End of ICF editor section. ###ICF###*/ -+ -+define memory mem with size = 4G; -+define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; -+define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; -+ -+define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; -+define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; -+define block RO_END with alignment = 8, size = 0 { }; -+ -+initialize by copy { readwrite }; -+do not initialize { section .noinit }; -+ -+keep { section .intvec }; -+place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; -+place in ROM_region { readonly, -+ block RO_END }; -+place in RAM_region { readwrite, -+ block CSTACK, -+ block HEAP }; -+ -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/iar/ble_connectivity_s132v5_hci_pca10040.ewd b/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/iar/ble_connectivity_s132v5_hci_pca10040.ewd ---- a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/iar/ble_connectivity_s132v5_hci_pca10040.ewd 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/iar/ble_connectivity_s132v5_hci_pca10040.ewd 2018-07-18 17:28:04.000000000 +0200 -@@ -0,0 +1,1350 @@ -+ -+ -+ -+ 2 -+ nrf52832_xxaa -+ -+ ARM -+ -+ 0 -+ -+ C-SPY -+ 2 -+ -+ 26 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ARMSIM_ID -+ 2 -+ -+ 1 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ ANGEL_ID -+ 2 -+ -+ 0 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ CMSISDAP_ID -+ 2 -+ -+ 2 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ GDBSERVER_ID -+ 2 -+ -+ 0 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ IARROM_ID -+ 2 -+ -+ 1 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ IJET_ID -+ 2 -+ -+ 3 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ JLINK_ID -+ 2 -+ -+ 15 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ LMIFTDI_ID -+ 2 -+ -+ 2 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ MACRAIGOR_ID -+ 2 -+ -+ 3 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ PEMICRO_ID -+ 2 -+ -+ 1 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ RDI_ID -+ 2 -+ -+ 2 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ STLINK_ID -+ 2 -+ -+ 2 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ THIRDPARTY_ID -+ 2 -+ -+ 0 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ XDS100_ID -+ 2 -+ -+ 2 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin -+ 0 -+ -+ -+ $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin -+ 1 -+ -+ -+ $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin -+ 0 -+ -+ -+ $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin -+ 1 -+ -+ -+ $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin -+ 0 -+ -+ -+ -+ -+ -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/iar/ble_connectivity_s132v5_hci_pca10040.ewp b/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/iar/ble_connectivity_s132v5_hci_pca10040.ewp ---- a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/iar/ble_connectivity_s132v5_hci_pca10040.ewp 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/iar/ble_connectivity_s132v5_hci_pca10040.ewp 2018-07-18 17:28:04.000000000 +0200 -@@ -0,0 +1,1155 @@ -+ -+ -+ -+ -+ 2 -+ nrf52832_xxaa -+ -+ ARM -+ -+ 0 -+ -+ General -+ 3 -+ -+ 22 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ICCARM -+ 2 -+ -+ 31 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ AARM -+ 2 -+ -+ 9 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ OBJCOPY -+ 0 -+ -+ 1 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ CUSTOM -+ 3 -+ -+ -+ -+ -+ -+ -+ BICOMP -+ 0 -+ -+ -+ -+ BUILDACTION -+ 1 -+ -+ -+ -+ -+ -+ -+ ILINK -+ 0 -+ -+ 16 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ IARCHIVE -+ 0 -+ -+ 0 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ BILINK -+ 0 -+ -+ -+ -+ nRF_Log -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_backend_rtt.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_backend_serial.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_default_backends.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_frontend.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_str_formatter.c -+ nRF_Libraries -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\util\app_error.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\util\app_error_handler_iar.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\util\app_error_weak.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\scheduler\app_scheduler.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\timer\app_timer.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\util\app_util_platform.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\crc16\crc16.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\util\nrf_assert.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\atomic\nrf_atomic.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\balloc\nrf_balloc.c -+ $PROJ_DIR$\..\..\..\..\..\..\external\fprintf\nrf_fprintf.c -+ $PROJ_DIR$\..\..\..\..\..\..\external\fprintf\nrf_fprintf_format.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\experimental_memobj\nrf_memobj.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\queue\nrf_queue.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\experimental_section_vars\nrf_section_iter.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\strerror\nrf_strerror.c -+ None -+ $PROJ_DIR$\..\..\..\..\..\..\modules\nrfx\mdk\iar_startup_nrf52.s -+ $PROJ_DIR$\..\..\..\..\..\..\modules\nrfx\mdk\system_nrf52.c -+ Board Definition -+ $PROJ_DIR$\..\..\..\..\..\..\components\boards\boards.c -+ nRF_Serialization -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\common\ble_dtm_init.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_event_enc.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_evt_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gap_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gap_evt_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gap_struct_serialization.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gatt_struct_serialization.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gattc_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gattc_evt_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gattc_struct_serialization.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gatts_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gatts_evt_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gatts_struct_serialization.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_l2cap_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_l2cap_evt_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_l2cap_struct_serialization.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\ble_serialization.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_struct_serialization.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\cond_field_serialization.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_gap_sec_keys.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_l2cap_sdu_pool.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_user_mem.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\common\conn_mw.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gap.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gattc.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gatts.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_l2cap.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\common\conn_mw_nrf_soc.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\hal\dtm_uart.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\nrf_soc_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\struct_ser\ble\nrf_soc_struct_serialization.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\ser_conn_cmd_decoder.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\ser_conn_dtm_cmd_decoder.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\ser_conn_error_handling.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\ser_conn_event_encoder.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\ser_conn_handlers.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\ser_conn_pkt_decoder.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\ser_conn_reset_cmd_decoder.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\ser_dbg_sd_str.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\transport\ser_hal_transport.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\transport\ser_phy\ser_phy_hci.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\transport\ser_phy\ser_phy_hci_slip.c -+ nRF_Drivers -+ $PROJ_DIR$\..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_clock.c -+ $PROJ_DIR$\..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_uart.c -+ $PROJ_DIR$\..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_clock.c -+ $PROJ_DIR$\..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_power_clock.c -+ $PROJ_DIR$\..\..\..\..\..\..\modules\nrfx\drivers\src\prs\nrfx_prs.c -+ $PROJ_DIR$\..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_uart.c -+ $PROJ_DIR$\..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_uarte.c -+ Application -+ $PROJ_DIR$\..\..\..\main.c -+ $PROJ_DIR$\..\config\sdk_config.h -+ nRF_Segger_RTT -+ $PROJ_DIR$\..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT.c -+ $PROJ_DIR$\..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT_Syscalls_IAR.c -+ $PROJ_DIR$\..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT_printf.c -+ nRF_BLE -+ $PROJ_DIR$\..\..\..\..\..\..\components\ble\common\ble_advdata.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\ble\common\ble_conn_params.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\ble\ble_dtm\ble_dtm.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\ble\ble_dtm\ble_dtm_hw_nrf52.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\ble\common\ble_srv_common.c -+ nRF_SoftDevice -+ $PROJ_DIR$\..\..\..\..\..\..\components\softdevice\common\nrf_sdh.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\softdevice\common\nrf_sdh_ble.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\softdevice\common\nrf_sdh_soc.c -+ -+ -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_s132v5_hci_pca10040.emProject b/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_s132v5_hci_pca10040.emProject ---- a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_s132v5_hci_pca10040.emProject 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_s132v5_hci_pca10040.emProject 2018-07-18 17:28:12.000000000 +0200 -@@ -0,0 +1,153 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_s132v5_hci_pca10040.emSession b/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_s132v5_hci_pca10040.emSession ---- a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_s132v5_hci_pca10040.emSession 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_s132v5_hci_pca10040.emSession 2018-07-18 17:28:12.000000000 +0200 -@@ -0,0 +1,7 @@ -+ -+ -+ -+ -+ -+ -+ -\ No newline at end of file -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/flash_placement.xml b/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/flash_placement.xml ---- a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/flash_placement.xml 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/flash_placement.xml 2018-07-18 17:28:12.000000000 +0200 -@@ -0,0 +1,46 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/arm4/ble_connectivity_s140_hci_pca10056.uvproj b/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/arm4/ble_connectivity_s140_hci_pca10056.uvproj ---- a/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/arm4/ble_connectivity_s140_hci_pca10056.uvproj 2018-03-22 12:24:54.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/arm4/ble_connectivity_s140_hci_pca10056.uvproj 2018-07-18 17:27:48.000000000 +0200 -@@ -323,8 +323,8 @@ - - - 0 -- 0x200094b8 -- 0x36b48 -+ 0x200194b8 -+ 0x26b48 - - - 0 -@@ -4313,8 +4313,8 @@ - - - 0 -- 0x200094b8 -- 0x36b48 -+ 0x200194b8 -+ 0x26b48 - - - 0 -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/arm5_no_packs/ble_connectivity_s140_hci_pca10056.uvprojx b/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/arm5_no_packs/ble_connectivity_s140_hci_pca10056.uvprojx ---- a/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/arm5_no_packs/ble_connectivity_s140_hci_pca10056.uvprojx 2018-03-22 12:24:58.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/arm5_no_packs/ble_connectivity_s140_hci_pca10056.uvprojx 2018-07-18 17:27:54.000000000 +0200 -@@ -329,8 +329,8 @@ - - - 0 -- 0x200094b8 -- 0x36b48 -+ 0x200194b8 -+ 0x26b48 - - - 0 -@@ -4244,8 +4244,8 @@ - - - 0 -- 0x200094b8 -- 0x36b48 -+ 0x200194b8 -+ 0x26b48 - - - 0 -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/ble_connectivity_gcc_nrf52.ld b/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/ble_connectivity_gcc_nrf52.ld ---- a/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/ble_connectivity_gcc_nrf52.ld 2018-03-22 12:24:46.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/ble_connectivity_gcc_nrf52.ld 2018-07-18 17:27:40.000000000 +0200 -@@ -6,11 +6,18 @@ - MEMORY - { - FLASH (rx) : ORIGIN = 0x26000, LENGTH = 0xda000 -- RAM (rwx) : ORIGIN = 0x200094b8, LENGTH = 0x36b48 -+ RAM (rwx) : ORIGIN = 0x200194b8, LENGTH = 0x26b48 -+ connectivity_version_info (r) : ORIGIN = 0x30000, LENGTH = 0x18 - } - - SECTIONS - { -+ .connectivity_version_info : -+ { -+ PROVIDE(__start_connectivity_version_info = .); -+ KEEP(*(SORT(.connectivity_version_info*))) -+ PROVIDE(__stop_connectivity_version_info = .); -+ } > connectivity_version_info - } - - SECTIONS -@@ -63,12 +70,6 @@ - KEEP(*(.nrf_balloc)) - PROVIDE(__stop_nrf_balloc = .); - } > FLASH -- .sdh_state_observers : -- { -- PROVIDE(__start_sdh_state_observers = .); -- KEEP(*(SORT(.sdh_state_observers*))) -- PROVIDE(__stop_sdh_state_observers = .); -- } > FLASH - .sdh_stack_observers : - { - PROVIDE(__start_sdh_stack_observers = .); -@@ -81,6 +82,12 @@ - KEEP(*(SORT(.sdh_req_observers*))) - PROVIDE(__stop_sdh_req_observers = .); - } > FLASH -+ .sdh_state_observers : -+ { -+ PROVIDE(__start_sdh_state_observers = .); -+ KEEP(*(SORT(.sdh_state_observers*))) -+ PROVIDE(__stop_sdh_state_observers = .); -+ } > FLASH - - } INSERT AFTER .text - -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/iar/ble_connectivity_iar_nRF5x.icf b/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/iar/ble_connectivity_iar_nRF5x.icf ---- a/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/iar/ble_connectivity_iar_nRF5x.icf 2018-03-22 12:25:06.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/iar/ble_connectivity_iar_nRF5x.icf 2018-07-18 17:28:04.000000000 +0200 -@@ -6,7 +6,7 @@ - /*-Memory Regions-*/ - define symbol __ICFEDIT_region_ROM_start__ = 0x26000; - define symbol __ICFEDIT_region_ROM_end__ = 0xfffff; --define symbol __ICFEDIT_region_RAM_start__ = 0x200094b8; -+define symbol __ICFEDIT_region_RAM_start__ = 0x200194b8; - define symbol __ICFEDIT_region_RAM_end__ = 0x2003ffff; - export symbol __ICFEDIT_region_RAM_start__; - export symbol __ICFEDIT_region_RAM_end__; -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/ble_connectivity_s140_hci_pca10056.emProject b/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/ble_connectivity_s140_hci_pca10056.emProject ---- a/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/ble_connectivity_s140_hci_pca10056.emProject 2018-03-22 12:25:12.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/ble_connectivity_s140_hci_pca10056.emProject 2018-07-18 17:28:12.000000000 +0200 -@@ -27,8 +27,8 @@ - linker_printf_width_precision_supported="Yes" - linker_printf_fmt_level="long" - linker_section_placement_file="flash_placement.xml" -- linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x100000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x40000;FLASH_START=0x26000;FLASH_SIZE=0xda000;RAM_START=0x200094b8;RAM_SIZE=0x36b48" -- linker_section_placements_segments="FLASH RX 0x0 0x100000;RAM RWX 0x20000000 0x40000" -+ linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x100000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x40000;FLASH_START=0x26000;FLASH_SIZE=0xda000;RAM_START=0x200194b8;RAM_SIZE=0x26b48" -+ linker_section_placements_segments="FLASH RX 0x0 0x100000;RAM RWX 0x20000000 0x40000;connectivity_version_info RX 0x30000 0x18" - project_directory="" - project_type="Executable" /> - -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/flash_placement.xml b/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/flash_placement.xml ---- a/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/flash_placement.xml 2018-03-22 12:25:12.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/flash_placement.xml 2018-07-18 17:28:12.000000000 +0200 -@@ -11,9 +11,9 @@ - - - -- - - -+ - - - -@@ -40,4 +40,7 @@ - - - -+ -+ -+ - -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/arm4/ble_connectivity_s140_usb_hci_pca10056.uvproj b/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/arm4/ble_connectivity_s140_usb_hci_pca10056.uvproj ---- a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/arm4/ble_connectivity_s140_usb_hci_pca10056.uvproj 2018-03-22 12:24:54.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/arm4/ble_connectivity_s140_usb_hci_pca10056.uvproj 2018-07-18 17:27:48.000000000 +0200 -@@ -323,8 +323,8 @@ - - - 0 -- 0x200094b8 -- 0x36b48 -+ 0x200194b8 -+ 0x26b48 - - - 0 -@@ -4700,8 +4700,8 @@ - - - 0 -- 0x200094b8 -- 0x36b48 -+ 0x200194b8 -+ 0x26b48 - - - 0 -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/arm5_no_packs/ble_connectivity_s140_usb_hci_pca10056.uvprojx b/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/arm5_no_packs/ble_connectivity_s140_usb_hci_pca10056.uvprojx ---- a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/arm5_no_packs/ble_connectivity_s140_usb_hci_pca10056.uvprojx 2018-03-22 12:24:58.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/arm5_no_packs/ble_connectivity_s140_usb_hci_pca10056.uvprojx 2018-07-18 17:27:54.000000000 +0200 -@@ -329,8 +329,8 @@ - - - 0 -- 0x200094b8 -- 0x36b48 -+ 0x200194b8 -+ 0x26b48 - - - 0 -@@ -4631,8 +4631,8 @@ - - - 0 -- 0x200094b8 -- 0x36b48 -+ 0x200194b8 -+ 0x26b48 - - - 0 -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld b/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld ---- a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld 2018-03-22 12:24:48.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld 2018-07-18 17:27:42.000000000 +0200 -@@ -6,11 +6,18 @@ - MEMORY - { - FLASH (rx) : ORIGIN = 0x26000, LENGTH = 0xda000 -- RAM (rwx) : ORIGIN = 0x200094b8, LENGTH = 0x36b48 -+ RAM (rwx) : ORIGIN = 0x200194b8, LENGTH = 0x26b48 -+ connectivity_version_info (r) : ORIGIN = 0x30000, LENGTH = 0x18 - } - - SECTIONS - { -+ .connectivity_version_info : -+ { -+ PROVIDE(__start_connectivity_version_info = .); -+ KEEP(*(SORT(.connectivity_version_info*))) -+ PROVIDE(__stop_connectivity_version_info = .); -+ } > connectivity_version_info - } - - SECTIONS -@@ -63,12 +70,6 @@ - KEEP(*(.nrf_balloc)) - PROVIDE(__stop_nrf_balloc = .); - } > FLASH -- .sdh_state_observers : -- { -- PROVIDE(__start_sdh_state_observers = .); -- KEEP(*(SORT(.sdh_state_observers*))) -- PROVIDE(__stop_sdh_state_observers = .); -- } > FLASH - .sdh_stack_observers : - { - PROVIDE(__start_sdh_stack_observers = .); -@@ -81,6 +82,12 @@ - KEEP(*(SORT(.sdh_req_observers*))) - PROVIDE(__stop_sdh_req_observers = .); - } > FLASH -+ .sdh_state_observers : -+ { -+ PROVIDE(__start_sdh_state_observers = .); -+ KEEP(*(SORT(.sdh_state_observers*))) -+ PROVIDE(__stop_sdh_state_observers = .); -+ } > FLASH - - } INSERT AFTER .text - -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/config/sdk_config.h b/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/config/sdk_config.h ---- a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/config/sdk_config.h 2018-03-22 15:25:12.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/config/sdk_config.h 2018-07-18 17:42:30.000000000 +0200 -@@ -868,7 +868,7 @@ - - // Selected Product ID - #ifndef APP_USBD_PID --#define APP_USBD_PID 0x521B -+#define APP_USBD_PID 0xC00A - #endif - - // APP_USBD_DEVICE_VER_MAJOR - Device version, major part <0-99> -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/iar/ble_connectivity_iar_nRF5x.icf b/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/iar/ble_connectivity_iar_nRF5x.icf ---- a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/iar/ble_connectivity_iar_nRF5x.icf 2018-03-22 12:25:06.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/iar/ble_connectivity_iar_nRF5x.icf 2018-07-18 17:28:04.000000000 +0200 -@@ -6,7 +6,7 @@ - /*-Memory Regions-*/ - define symbol __ICFEDIT_region_ROM_start__ = 0x26000; - define symbol __ICFEDIT_region_ROM_end__ = 0xfffff; --define symbol __ICFEDIT_region_RAM_start__ = 0x200094b8; -+define symbol __ICFEDIT_region_RAM_start__ = 0x200194b8; - define symbol __ICFEDIT_region_RAM_end__ = 0x2003ffff; - export symbol __ICFEDIT_region_RAM_start__; - export symbol __ICFEDIT_region_RAM_end__; -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10056.emProject b/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10056.emProject ---- a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10056.emProject 2018-03-22 12:25:12.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10056.emProject 2018-07-18 17:28:12.000000000 +0200 -@@ -16,7 +16,7 @@ - arm_target_device_name="nRF52840_xxAA" - arm_target_interface_type="SWD" - c_user_include_directories="../../../config/ble_connectivity_s140_usb_hci_pca10056;../../../config;../../../../../../components;../../../../../../components/ble/ble_dtm;../../../../../../components/boards;../../../../../../components/drivers_nrf/usbd;../../../../../../components/libraries/atomic;../../../../../../components/libraries/atomic_fifo;../../../../../../components/libraries/balloc;../../../../../../components/libraries/bsp;../../../../../../components/libraries/crc16;../../../../../../components/libraries/delay;../../../../../../components/libraries/experimental_log;../../../../../../components/libraries/experimental_log/src;../../../../../../components/libraries/experimental_memobj;../../../../../../components/libraries/experimental_section_vars;../../../../../../components/libraries/queue;../../../../../../components/libraries/scheduler;../../../../../../components/libraries/strerror;../../../../../../components/libraries/timer;../../../../../../components/libraries/usbd;../../../../../../components/libraries/usbd/class/cdc;../../../../../../components/libraries/usbd/class/cdc/acm;../../../../../../components/libraries/usbd/config;../../../../../../components/libraries/util;../../../../../../components/serialization/common;../../../../../../components/serialization/common/struct_ser/ble;../../../../../../components/serialization/common/transport;../../../../../../components/serialization/common/transport/ser_phy;../../../../../../components/serialization/common/transport/ser_phy/config;../../../../../../components/serialization/connectivity;../../../../../../components/serialization/connectivity/codecs/ble/middleware;../../../../../../components/serialization/connectivity/codecs/ble/serializers;../../../../../../components/serialization/connectivity/codecs/common;../../../../../../components/serialization/connectivity/hal;../../../../../../components/softdevice/common;../../../../../../components/softdevice/s140/headers;../../../../../../components/softdevice/s140/headers/nrf52;../../../../../../components/toolchain/cmsis/include;../../../../../../external/fprintf;../../../../../../external/segger_rtt;../../../../../../integration/nrfx;../../../../../../integration/nrfx/legacy;../../../../../../modules/nrfx;../../../../../../modules/nrfx/drivers/include;../../../../../../modules/nrfx/hal;../../../../../../modules/nrfx/mdk;../config;" -- c_preprocessor_definitions="APP_USBD_STRINGS_PRODUCT;APP_USBD_STRING_SERIAL;APP_USBD_STRING_SERIAL_EXTERN;BLE_STACK_SUPPORT_REQD;BOARD_PCA10056;BSP_DEFINES_ONLY;CONFIG_GPIO_AS_PINRESET;FLOAT_ABI_HARD;HCI_TIMER2;INITIALIZE_USER_SECTIONS;NO_VTOR_CONFIG;NRF52840_XXAA;NRF_SD_BLE_API_VERSION=6;S140;SER_CONNECTIVITY;SOFTDEVICE_PRESENT;SWI_DISABLE0;" -+ c_preprocessor_definitions="BLE_STACK_SUPPORT_REQD;BOARD_PCA10056;BSP_DEFINES_ONLY;CONFIG_GPIO_AS_PINRESET;FLOAT_ABI_HARD;HCI_TIMER2;INITIALIZE_USER_SECTIONS;NO_VTOR_CONFIG;NRF52840_XXAA;NRF_SD_BLE_API_VERSION=6;S140;SER_CONNECTIVITY;SOFTDEVICE_PRESENT;SWI_DISABLE0;" - debug_target_connection="J-Link" - gcc_entry_point="Reset_Handler" - macros="CMSIS_CONFIG_TOOL=../../../../../../external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar" -@@ -27,8 +27,8 @@ - linker_printf_width_precision_supported="Yes" - linker_printf_fmt_level="long" - linker_section_placement_file="flash_placement.xml" -- linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x100000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x40000;FLASH_START=0x26000;FLASH_SIZE=0xda000;RAM_START=0x200094b8;RAM_SIZE=0x36b48" -- linker_section_placements_segments="FLASH RX 0x0 0x100000;RAM RWX 0x20000000 0x40000" -+ linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x100000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x40000;FLASH_START=0x26000;FLASH_SIZE=0xda000;RAM_START=0x200194b8;RAM_SIZE=0x26b48" -+ linker_section_placements_segments="FLASH RX 0x0 0x100000;RAM RWX 0x20000000 0x40000;connectivity_version_info RX 0x30000 0x18" - project_directory="" - project_type="Executable" /> - -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/flash_placement.xml b/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/flash_placement.xml ---- a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/flash_placement.xml 2018-03-22 12:25:12.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/flash_placement.xml 2018-07-18 17:28:12.000000000 +0200 -@@ -11,9 +11,9 @@ - - - -- - - -+ - - - -@@ -40,4 +40,7 @@ - - - -+ -+ -+ - -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/arm4/ble_connectivity_s132v3_usb_hci_pca10059.uvopt b/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/arm4/ble_connectivity_s132v3_usb_hci_pca10059.uvopt ---- a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/arm4/ble_connectivity_s132v3_usb_hci_pca10059.uvopt 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/arm4/ble_connectivity_s132v3_usb_hci_pca10059.uvopt 2018-07-18 17:27:48.000000000 +0200 -@@ -0,0 +1,51 @@ -+ -+ -+ -+ 1.0 -+ -+
### uVision Project, (C) Keil Software
-+ -+ nrf52840_xxaa -+ 0x4 -+ ARM-ADS -+ -+ 1 -+ -+ Segger\JL2CM3.dll -+ -+ -+ -+ 0 -+ JL2CM3 -+ -O78 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC2000 -FN1 -FF0nrf52xxx -FS00 -FL0200000 -FF1nrf52xxx_uicr.flm -FS110001000 -FL11000 -+ -+ -+ 0 -+ UL2CM3 -+ UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0nrf52xxx -FS00 -FL0200000) -+ -+ -+ -+ -+ flash_s132_nrf52_3.0.0_softdevice -+ 0x4 -+ ARM-ADS -+ -+ Segger\JL2CM3.dll -+ -+ -+ -+ 0 -+ JL2CM3 -+ -O78 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC2000 -FN1 -FF0nrf52xxx_ecb -FS00 -FL0200000 -FF1nrf52xxx_uicr.flm -FS110001000 -FL11000 -+ -+ -+ 0 -+ UL2CM3 -+ UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0nrf52xxx -FS00 -FL0200000) -+ -+ -+ -+
-+ -+ -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/arm4/ble_connectivity_s132v3_usb_hci_pca10059.uvproj b/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/arm4/ble_connectivity_s132v3_usb_hci_pca10059.uvproj ---- a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/arm4/ble_connectivity_s132v3_usb_hci_pca10059.uvproj 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/arm4/ble_connectivity_s132v3_usb_hci_pca10059.uvproj 2018-07-18 17:27:48.000000000 +0200 -@@ -0,0 +1,9108 @@ -+ -+ -+ -+ 1.1 -+ -+
### uVision Project, (C) Keil Software
-+ -+ -+ nrf52840_xxaa -+ 0x4 -+ ARM-ADS -+ -+ -+ nRF52840_xxAA -+ Nordic Semiconductor -+ IROM(0x00000000,0x80000) IRAM(0x20000000,0x10000) CPUTYPE("Cortex-M4") FPU2 CLOCK(64000000) ELITTLE -+ -+ -+ UL2CM3(-UM0364FCE -O78 -S0 -C0 -TO18 -TC16000000 -TP21 -TDS800D -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC2000 -FN1 -FF0nRF52xxx -FS00 -FL0200000) -+ 0 -+ core.h -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ..\..\..\..\..\..\modules\nrfx\mdk\nrf52840.svd -+ 0 -+ 0 -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ -+ .\_build\ -+ nrf52840_xxaa -+ 1 -+ 0 -+ 1 -+ 1 -+ 1 -+ .\_build\ -+ 1 -+ 0 -+ 0 -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ 0 -+ -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 3 -+ -+ -+ 1 -+ -+ -+ -+ -+ -+ -+ SARMCM3.DLL -+ -MPU -+ TCM.DLL -+ -pCM4 -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 16 -+ -+ -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ -+ -+ 1 -+ 1 -+ 0 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ 0 -+ -+ 0 -+ -1 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Segger\JL2CM3.dll -+ -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 1 -+ 1 -+ 4099 -+ -+ 1 -+ Segger\JL2CM3.dll -+ -+ -+ -+ -+ -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ 1 -+ 0 -+ 1 -+ 1 -+ 0 -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 0 -+ "Cortex-M4" -+ -+ 0 -+ 0 -+ 0 -+ 1 -+ 1 -+ 0 -+ 0 -+ 2 -+ 0 -+ 0 -+ 8 -+ 1 -+ 0 -+ 0 -+ 3 -+ 5 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x20000000 -+ 0x40000 -+ -+ -+ 1 -+ 0x0 -+ 0x100000 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x1f000 -+ 0xe1000 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x200199c0 -+ 0x26640 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ -+ -+ -+ 1 -+ 4 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ --c99 --reduce_paths -+ BLE_STACK_SUPPORT_REQD BOARD_PCA10059 BSP_DEFINES_ONLY CONFIG_GPIO_AS_PINRESET FLOAT_ABI_HARD HCI_TIMER2 NRF52840_XXAA NRF_SD_BLE_API_VERSION=3 S132 SER_CONNECTIVITY SOFTDEVICE_PRESENT SWI_DISABLE0 __HEAP_SIZE=512 __STACK_SIZE=2048 -+ -+ ..\..\..\config\ble_connectivity_s132v3_usb_hci_pca10059;..\..\..\config;..\..\..\..\..\..\components;..\..\..\..\..\..\components\ble\ble_dtm;..\..\..\..\..\..\components\ble\common;..\..\..\..\..\..\components\boards;..\..\..\..\..\..\components\drivers_nrf\usbd;..\..\..\..\..\..\components\libraries\atomic;..\..\..\..\..\..\components\libraries\atomic_fifo;..\..\..\..\..\..\components\libraries\balloc;..\..\..\..\..\..\components\libraries\block_dev;..\..\..\..\..\..\components\libraries\bootloader\dfu;..\..\..\..\..\..\components\libraries\bsp;..\..\..\..\..\..\components\libraries\crc16;..\..\..\..\..\..\components\libraries\delay;..\..\..\..\..\..\components\libraries\experimental_log;..\..\..\..\..\..\components\libraries\experimental_log\src;..\..\..\..\..\..\components\libraries\experimental_memobj;..\..\..\..\..\..\components\libraries\experimental_section_vars;..\..\..\..\..\..\components\libraries\queue;..\..\..\..\..\..\components\libraries\scheduler;..\..\..\..\..\..\components\libraries\strerror;..\..\..\..\..\..\components\libraries\timer;..\..\..\..\..\..\components\libraries\usbd;..\..\..\..\..\..\components\libraries\usbd\class\cdc;..\..\..\..\..\..\components\libraries\usbd\class\cdc\acm;..\..\..\..\..\..\components\libraries\usbd\class\nrf_dfu_trigger;..\..\..\..\..\..\components\libraries\usbd\config;..\..\..\..\..\..\components\libraries\util;..\..\..\..\..\..\components\serialization\common;..\..\..\..\..\..\components\serialization\common\struct_ser\ble;..\..\..\..\..\..\components\serialization\common\transport;..\..\..\..\..\..\components\serialization\common\transport\ser_phy;..\..\..\..\..\..\components\serialization\common\transport\ser_phy\config;..\..\..\..\..\..\components\serialization\connectivity;..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware;..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers;..\..\..\..\..\..\components\serialization\connectivity\codecs\common;..\..\..\..\..\..\components\serialization\connectivity\hal;..\..\..\..\..\..\components\softdevice\common;..\..\..\..\..\..\components\softdevice\s132v3\headers;..\..\..\..\..\..\components\softdevice\s132v3\headers\nrf52;..\..\..\..\..\..\external\fprintf;..\..\..\..\..\..\external\segger_rtt;..\..\..\..\..\..\integration\nrfx;..\..\..\..\..\..\integration\nrfx\legacy;..\..\..\..\..\..\modules\nrfx;..\..\..\..\..\..\modules\nrfx\drivers\include;..\..\..\..\..\..\modules\nrfx\hal;..\..\..\..\..\..\modules\nrfx\mdk;..\config -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ --cpreproc_opts=-DBLE_STACK_SUPPORT_REQD,-DBOARD_PCA10059,-DBSP_DEFINES_ONLY,-DCONFIG_GPIO_AS_PINRESET,-DFLOAT_ABI_HARD,-DHCI_TIMER2,-DNRF52840_XXAA,-DNRF_SD_BLE_API_VERSION=3,-DS132,-DSER_CONNECTIVITY,-DSOFTDEVICE_PRESENT,-DSWI_DISABLE0,-D__HEAP_SIZE=512,-D__STACK_SIZE=2048 -+ BLE_STACK_SUPPORT_REQD BOARD_PCA10059 BSP_DEFINES_ONLY CONFIG_GPIO_AS_PINRESET FLOAT_ABI_HARD HCI_TIMER2 NRF52840_XXAA NRF_SD_BLE_API_VERSION=3 S132 SER_CONNECTIVITY SOFTDEVICE_PRESENT SWI_DISABLE0 __HEAP_SIZE=512 __STACK_SIZE=2048 -+ -+ ..\..\..\config\ble_connectivity_s132v3_usb_hci_pca10059;..\..\..\config;..\..\..\..\..\..\components;..\..\..\..\..\..\components\ble\ble_dtm;..\..\..\..\..\..\components\ble\common;..\..\..\..\..\..\components\boards;..\..\..\..\..\..\components\drivers_nrf\usbd;..\..\..\..\..\..\components\libraries\atomic;..\..\..\..\..\..\components\libraries\atomic_fifo;..\..\..\..\..\..\components\libraries\balloc;..\..\..\..\..\..\components\libraries\block_dev;..\..\..\..\..\..\components\libraries\bootloader\dfu;..\..\..\..\..\..\components\libraries\bsp;..\..\..\..\..\..\components\libraries\crc16;..\..\..\..\..\..\components\libraries\delay;..\..\..\..\..\..\components\libraries\experimental_log;..\..\..\..\..\..\components\libraries\experimental_log\src;..\..\..\..\..\..\components\libraries\experimental_memobj;..\..\..\..\..\..\components\libraries\experimental_section_vars;..\..\..\..\..\..\components\libraries\queue;..\..\..\..\..\..\components\libraries\scheduler;..\..\..\..\..\..\components\libraries\strerror;..\..\..\..\..\..\components\libraries\timer;..\..\..\..\..\..\components\libraries\usbd;..\..\..\..\..\..\components\libraries\usbd\class\cdc;..\..\..\..\..\..\components\libraries\usbd\class\cdc\acm;..\..\..\..\..\..\components\libraries\usbd\class\nrf_dfu_trigger;..\..\..\..\..\..\components\libraries\usbd\config;..\..\..\..\..\..\components\libraries\util;..\..\..\..\..\..\components\serialization\common;..\..\..\..\..\..\components\serialization\common\struct_ser\ble;..\..\..\..\..\..\components\serialization\common\transport;..\..\..\..\..\..\components\serialization\common\transport\ser_phy;..\..\..\..\..\..\components\serialization\common\transport\ser_phy\config;..\..\..\..\..\..\components\serialization\connectivity;..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware;..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers;..\..\..\..\..\..\components\serialization\connectivity\codecs\common;..\..\..\..\..\..\components\serialization\connectivity\hal;..\..\..\..\..\..\components\softdevice\common;..\..\..\..\..\..\components\softdevice\s132v3\headers;..\..\..\..\..\..\components\softdevice\s132v3\headers\nrf52;..\..\..\..\..\..\external\fprintf;..\..\..\..\..\..\external\segger_rtt;..\..\..\..\..\..\integration\nrfx;..\..\..\..\..\..\integration\nrfx\legacy;..\..\..\..\..\..\modules\nrfx;..\..\..\..\..\..\modules\nrfx\drivers\include;..\..\..\..\..\..\modules\nrfx\hal;..\..\..\..\..\..\modules\nrfx\mdk;..\config -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0x00000000 -+ 0x00000000 -+ -+ -+ -+ --diag_suppress 6330 -+ -+ -+ -+ -+ -+ -+ None -+ -+ arm_startup_nrf52840.s -+ 2 -+ ..\..\..\..\..\..\modules\nrfx\mdk\arm_startup_nrf52840.s -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ system_nrf52840.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\mdk\system_nrf52840.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Application -+ -+ main.c -+ 1 -+ ..\..\..\main.c -+ sdk_config.h -+ 5 -+ ..\config\sdk_config.h -+ -+ Board Definition -+ -+ boards.c -+ 1 -+ ..\..\..\..\..\..\components\boards\boards.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_dfu_trigger_usb.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\bootloader\dfu\nrf_dfu_trigger_usb.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_BLE -+ -+ ble_advdata.c -+ 1 -+ ..\..\..\..\..\..\components\ble\common\ble_advdata.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm.c -+ 1 -+ ..\..\..\..\..\..\components\ble\ble_dtm\ble_dtm.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm_hw_nrf52.c -+ 1 -+ ..\..\..\..\..\..\components\ble\ble_dtm\ble_dtm_hw_nrf52.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_srv_common.c -+ 1 -+ ..\..\..\..\..\..\components\ble\common\ble_srv_common.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Drivers -+ -+ nrf_drv_clock.c -+ 1 -+ ..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_drv_power.c -+ 1 -+ ..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_power.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_drv_uart.c -+ 1 -+ ..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_drv_usbd.c -+ 1 -+ ..\..\..\..\..\..\components\drivers_nrf\usbd\nrf_drv_usbd.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_clock.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_power.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_power.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_power_clock.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_power_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_prs.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\prs\nrfx_prs.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_uart.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_uarte.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_uarte.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Libraries -+ -+ app_error.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_error_handler_keil.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error_handler_keil.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_error_weak.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error_weak.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_scheduler.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\scheduler\app_scheduler.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_timer.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\timer\app_timer.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_usbd.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\usbd\app_usbd.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_usbd_cdc_acm.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\usbd\class\cdc\acm\app_usbd_cdc_acm.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_usbd_core.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\usbd\app_usbd_core.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_usbd_nrf_dfu_trigger.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\usbd\class\nrf_dfu_trigger\app_usbd_nrf_dfu_trigger.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_usbd_serial_num.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\usbd\app_usbd_serial_num.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_usbd_string_desc.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\usbd\app_usbd_string_desc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_util_platform.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_util_platform.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ crc16.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\crc16\crc16.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_assert.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\nrf_assert.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_atfifo.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\atomic_fifo\nrf_atfifo.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_atomic.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\atomic\nrf_atomic.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_balloc.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\balloc\nrf_balloc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_fprintf.c -+ 1 -+ ..\..\..\..\..\..\external\fprintf\nrf_fprintf.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_fprintf_format.c -+ 1 -+ ..\..\..\..\..\..\external\fprintf\nrf_fprintf_format.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_memobj.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_memobj\nrf_memobj.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_queue.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\queue\nrf_queue.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_section_iter.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_section_vars\nrf_section_iter.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_strerror.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\strerror\nrf_strerror.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Log -+ -+ nrf_log_backend_rtt.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_backend_rtt.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_backend_serial.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_backend_serial.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_default_backends.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_default_backends.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_frontend.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_frontend.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_str_formatter.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_str_formatter.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Segger_RTT -+ -+ SEGGER_RTT.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ SEGGER_RTT_Syscalls_KEIL.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT_Syscalls_KEIL.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ SEGGER_RTT_printf.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT_printf.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Serialization -+ -+ ble_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm_init.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\ble_dtm_init.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_event_enc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_event_enc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gap_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gap_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gap_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatt_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gatt_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gattc_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gattc_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gattc_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gatts_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gatts_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gatts_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_l2cap_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_l2cap_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_l2cap_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\ble_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ cond_field_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\cond_field_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_gap_sec_keys.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_gap_sec_keys.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_l2cap_sdu_pool.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_l2cap_sdu_pool.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_user_mem.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_user_mem.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\conn_mw.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gap.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gap.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gattc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gattc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gatts.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gatts.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_l2cap.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_l2cap.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_nrf_soc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\conn_mw_nrf_soc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ dtm_uart.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\hal\dtm_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_soc_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\nrf_soc_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_soc_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\nrf_soc_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_dtm_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_dtm_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_error_handling.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_error_handling.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_event_encoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_event_encoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_handlers.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_handlers.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_pkt_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_pkt_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_reset_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_reset_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_dbg_sd_str.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\ser_dbg_sd_str.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_hal_transport.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_hal_transport.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_phy_hci.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_phy\ser_phy_hci.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_phy_hci_slip_cdc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_phy\ser_phy_hci_slip_cdc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_SoftDevice -+ -+ nrf_sdh.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_sdh_ble.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh_ble.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_sdh_soc.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh_soc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ flash_s132_nrf52_3.0.0_softdevice -+ 0x4 -+ ARM-ADS -+ -+ -+ nRF52840_xxAA -+ Nordic Semiconductor -+ IROM(0x00000000,0x80000) IRAM(0x20000000,0x10000) CPUTYPE("Cortex-M4") FPU2 CLOCK(64000000) ELITTLE -+ -+ -+ UL2CM3(-UM0364FCE -O78 -S0 -C0 -TO18 -TC16000000 -TP21 -TDS800D -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC2000 -FN1 -FF0nRF52xxx -FS00 -FL0200000) -+ 0 -+ core.h -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ -+ ..\..\..\..\..\..\components\softdevice\s132v3\hex\ -+ s132_nrf52_3.0.0_softdevice.hex -+ 1 -+ 0 -+ 1 -+ 1 -+ 1 -+ .\_build\ -+ 1 -+ 0 -+ 0 -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ 0 -+ -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 3 -+ -+ -+ 1 -+ -+ -+ -+ -+ -+ -+ SARMCM3.DLL -+ -MPU -+ TCM.DLL -+ -pCM4 -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 16 -+ -+ -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ -+ -+ 1 -+ 1 -+ 0 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ 0 -+ -+ 0 -+ -1 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Segger\JL2CM3.dll -+ -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 1 -+ 1 -+ 4099 -+ -+ 1 -+ Segger\JL2CM3.dll -+ -+ -+ -+ -+ -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ 1 -+ 0 -+ 1 -+ 1 -+ 0 -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 0 -+ "" -+ -+ 0 -+ 0 -+ 0 -+ 1 -+ 1 -+ 0 -+ 0 -+ 2 -+ 0 -+ 0 -+ 8 -+ 1 -+ 0 -+ 0 -+ 3 -+ 5 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x20000000 -+ 0x40000 -+ -+ -+ 1 -+ 0x0 -+ 0x100000 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x1f000 -+ 0xe1000 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x200199c0 -+ 0x26640 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ -+ -+ -+ 1 -+ 4 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ --c99 --reduce_paths -+ __HEAP_SIZE=512 __STACK_SIZE=2048 -+ -+ ..\..\..\config\ble_connectivity_s132v3_usb_hci_pca10059;..\..\..\config;..\config -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ --cpreproc_opts=-D__HEAP_SIZE=512,-D__STACK_SIZE=2048 -+ __HEAP_SIZE=512 __STACK_SIZE=2048 -+ -+ ..\..\..\config\ble_connectivity_s132v3_usb_hci_pca10059;..\..\..\config;..\config -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0x00000000 -+ 0x00000000 -+ -+ -+ -+ --diag_suppress 6330 -+ -+ -+ -+ -+ -+ -+ None -+ -+ arm_startup_nrf52840.s -+ 2 -+ ..\..\..\..\..\..\modules\nrfx\mdk\arm_startup_nrf52840.s -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ system_nrf52840.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\mdk\system_nrf52840.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Application -+ -+ main.c -+ 1 -+ ..\..\..\main.c -+ sdk_config.h -+ 5 -+ ..\config\sdk_config.h -+ -+ Board Definition -+ -+ boards.c -+ 1 -+ ..\..\..\..\..\..\components\boards\boards.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_dfu_trigger_usb.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\bootloader\dfu\nrf_dfu_trigger_usb.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_BLE -+ -+ ble_advdata.c -+ 1 -+ ..\..\..\..\..\..\components\ble\common\ble_advdata.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm.c -+ 1 -+ ..\..\..\..\..\..\components\ble\ble_dtm\ble_dtm.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm_hw_nrf52.c -+ 1 -+ ..\..\..\..\..\..\components\ble\ble_dtm\ble_dtm_hw_nrf52.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_srv_common.c -+ 1 -+ ..\..\..\..\..\..\components\ble\common\ble_srv_common.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Drivers -+ -+ nrf_drv_clock.c -+ 1 -+ ..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_drv_power.c -+ 1 -+ ..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_power.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_drv_uart.c -+ 1 -+ ..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_drv_usbd.c -+ 1 -+ ..\..\..\..\..\..\components\drivers_nrf\usbd\nrf_drv_usbd.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_clock.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_power.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_power.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_power_clock.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_power_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_prs.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\prs\nrfx_prs.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_uart.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_uarte.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_uarte.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Libraries -+ -+ app_error.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_error_handler_keil.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error_handler_keil.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_error_weak.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error_weak.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_scheduler.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\scheduler\app_scheduler.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_timer.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\timer\app_timer.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_usbd.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\usbd\app_usbd.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_usbd_cdc_acm.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\usbd\class\cdc\acm\app_usbd_cdc_acm.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_usbd_core.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\usbd\app_usbd_core.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_usbd_nrf_dfu_trigger.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\usbd\class\nrf_dfu_trigger\app_usbd_nrf_dfu_trigger.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_usbd_serial_num.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\usbd\app_usbd_serial_num.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_usbd_string_desc.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\usbd\app_usbd_string_desc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_util_platform.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_util_platform.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ crc16.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\crc16\crc16.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_assert.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\nrf_assert.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_atfifo.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\atomic_fifo\nrf_atfifo.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_atomic.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\atomic\nrf_atomic.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_balloc.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\balloc\nrf_balloc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_fprintf.c -+ 1 -+ ..\..\..\..\..\..\external\fprintf\nrf_fprintf.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_fprintf_format.c -+ 1 -+ ..\..\..\..\..\..\external\fprintf\nrf_fprintf_format.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_memobj.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_memobj\nrf_memobj.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_queue.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\queue\nrf_queue.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_section_iter.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_section_vars\nrf_section_iter.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_strerror.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\strerror\nrf_strerror.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Log -+ -+ nrf_log_backend_rtt.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_backend_rtt.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_backend_serial.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_backend_serial.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_default_backends.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_default_backends.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_frontend.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_frontend.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_str_formatter.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_str_formatter.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Segger_RTT -+ -+ SEGGER_RTT.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ SEGGER_RTT_Syscalls_KEIL.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT_Syscalls_KEIL.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ SEGGER_RTT_printf.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT_printf.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Serialization -+ -+ ble_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm_init.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\ble_dtm_init.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_event_enc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_event_enc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gap_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gap_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gap_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatt_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gatt_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gattc_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gattc_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gattc_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gatts_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gatts_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gatts_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_l2cap_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_l2cap_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_l2cap_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\ble_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ cond_field_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\cond_field_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_gap_sec_keys.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_gap_sec_keys.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_l2cap_sdu_pool.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_l2cap_sdu_pool.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_user_mem.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_user_mem.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\conn_mw.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gap.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gap.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gattc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gattc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gatts.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gatts.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_l2cap.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_l2cap.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_nrf_soc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\conn_mw_nrf_soc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ dtm_uart.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\hal\dtm_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_soc_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\nrf_soc_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_soc_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\nrf_soc_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_dtm_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_dtm_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_error_handling.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_error_handling.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_event_encoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_event_encoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_handlers.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_handlers.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_pkt_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_pkt_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_reset_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_reset_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_dbg_sd_str.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\ser_dbg_sd_str.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_hal_transport.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_hal_transport.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_phy_hci.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_phy\ser_phy_hci.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_phy_hci_slip_cdc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_phy\ser_phy_hci_slip_cdc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_SoftDevice -+ -+ nrf_sdh.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_sdh_ble.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh_ble.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_sdh_soc.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh_soc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+
-diff -u -r -N a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/arm5_no_packs/ble_connectivity_s132v3_usb_hci_pca10059.uvoptx b/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/arm5_no_packs/ble_connectivity_s132v3_usb_hci_pca10059.uvoptx ---- a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/arm5_no_packs/ble_connectivity_s132v3_usb_hci_pca10059.uvoptx 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/arm5_no_packs/ble_connectivity_s132v3_usb_hci_pca10059.uvoptx 2018-07-18 17:27:54.000000000 +0200 -@@ -0,0 +1,221 @@ -+ -+ -+ -+ 1.0 -+ -+
### uVision Project, (C) Keil Software
-+ -+ nrf52840_xxaa -+ 0x4 -+ ARM-ADS -+ -+ -+ 1 -+ 1 -+ 0 -+ 1 -+ -+ -+ 1 -+ 65535 -+ 0 -+ 0 -+ 0 -+ -+ -+ 79 -+ 66 -+ 8 -+ .\_build\ -+ -+ 0 -+ -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ 0 -+ 1 -+ 1 -+ 1 -+ 0 -+ 0 -+ 7 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Segger\JL2CM3.dll -+ -+ -+ -+ 0 -+ JL2CM3 -+ -U408001579 -O78 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC2000 -FN2 -FF0nrf52xxx.flm -FS00 -FL0200000 -FP0($$Device:nRF52840_xxAA$Flash\nrf52xxx.flm) -FF1nrf52xxx_uicr -FS110001000 -FL11000 -FP1($$Device:nRF52840_xxAA$Flash\nrf52xxx_uicr.flm) -+ -+ -+ 0 -+ UL2CM3 -+ UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0nrf52xxx -FS00 -FL0200000 -FP0($$Device:nRF52840_xxAA$Flash\nrf52xxx)) -+ -+ -+ -+ -+ 0 -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ -+ -+ -+ -+ flash_s132_nrf52_3.0.0_softdevice -+ 0x4 -+ ARM-ADS -+ -+ -+ 1 -+ 1 -+ 0 -+ 1 -+ -+ -+ 1 -+ 65535 -+ 0 -+ 0 -+ 0 -+ -+ -+ 79 -+ 66 -+ 8 -+ .\_build\ -+ -+ 0 -+ -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ 0 -+ 1 -+ 1 -+ 1 -+ 0 -+ 0 -+ 7 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Segger\JL2CM3.dll -+ -+ -+ -+ 0 -+ JL2CM3 -+ -U408001579 -O78 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC2000 -FN2 -FF0nrf52xxx.flm -FS00 -FL0200000 -FP0($$Device:nRF52840_xxAA$Flash\nrf52xxx.flm) -FF1nrf52xxx_uicr -FS110001000 -FL11000 -FP1($$Device:nRF52840_xxAA$Flash\nrf52xxx_uicr.flm) -+ -+ -+ 0 -+ UL2CM3 -+ UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0nrf52xxx -FS00 -FL0200000 -FP0($$Device:nRF52840_xxAA$Flash\nrf52xxx)) -+ -+ -+ -+ -+ 0 -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ -+ -+ -+
-+ -+ -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/arm5_no_packs/ble_connectivity_s132v3_usb_hci_pca10059.uvprojx b/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/arm5_no_packs/ble_connectivity_s132v3_usb_hci_pca10059.uvprojx ---- a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/arm5_no_packs/ble_connectivity_s132v3_usb_hci_pca10059.uvprojx 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/arm5_no_packs/ble_connectivity_s132v3_usb_hci_pca10059.uvprojx 2018-07-18 17:27:54.000000000 +0200 -@@ -0,0 +1,8977 @@ -+ -+ -+ -+ 2.1 -+ -+
### uVision Project, (C) Keil Software
-+ -+ -+ nrf52840_xxaa -+ 0x4 -+ ARM-ADS -+ -+ nRF52840_xxAA -+ Nordic Semiconductor -+ NordicSemiconductor.nRF_DeviceFamilyPack.8.16.0 -+ http://developer.nordicsemi.com/nRF51_SDK/pieces/nRF_DeviceFamilyPack/ IROM(0x00000000,0x80000) IRAM(0x20000000,0x10000) CPUTYPE("Cortex-M4") FPU2 CLOCK(64000000) ELITTLE -+ -+ -+ -+ 0 -+ $$Device:nRF52832_xxAA$Device\Include\nrf.h -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ..\..\..\..\..\..\modules\nrfx\mdk\nrf52840.svd -+ 0 -+ 0 -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ -+ .\_build\ -+ nrf52840_xxaa -+ 1 -+ 0 -+ 1 -+ 1 -+ 1 -+ .\_build\ -+ 1 -+ 0 -+ 0 -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ 0 -+ -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 3 -+ -+ -+ 1 -+ -+ -+ -+ -+ -+ -+ SARMCM3.DLL -+ -MPU -+ TCM.DLL -+ -pCM4 -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 16 -+ -+ -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ -+ -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ 0 -+ 1 1 -+ 0 -+ -1 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Segger\JL2CM3.dll -+ -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 1 -+ 1 -+ 4099 -+ -+ 1 -+ Segger\JL2CM3.dll -+ -+ -+ -+ -+ -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ 1 -+ 0 -+ 1 -+ 1 -+ 0 -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 0 -+ "Cortex-M4" -+ -+ 0 -+ 0 -+ 0 -+ 1 -+ 1 -+ 0 -+ 0 -+ 2 -+ 0 -+ 0 -+ 8 -+ 1 -+ 0 -+ 0 -+ 0 -+ 3 -+ 3 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x20000000 -+ 0x40000 -+ -+ -+ 1 -+ 0x0 -+ 0x100000 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x1f000 -+ 0xe1000 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x200199c0 -+ 0x26640 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ -+ -+ -+ 1 -+ 4 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ --reduce_paths -+ BLE_STACK_SUPPORT_REQD BOARD_PCA10059 BSP_DEFINES_ONLY CONFIG_GPIO_AS_PINRESET FLOAT_ABI_HARD HCI_TIMER2 NRF52840_XXAA NRF_SD_BLE_API_VERSION=3 S132 SER_CONNECTIVITY SOFTDEVICE_PRESENT SWI_DISABLE0 __HEAP_SIZE=512 __STACK_SIZE=2048 -+ -+ ..\..\..\config\ble_connectivity_s132v3_usb_hci_pca10059;..\..\..\config;..\..\..\..\..\..\components;..\..\..\..\..\..\components\ble\ble_dtm;..\..\..\..\..\..\components\ble\common;..\..\..\..\..\..\components\boards;..\..\..\..\..\..\components\drivers_nrf\usbd;..\..\..\..\..\..\components\libraries\atomic;..\..\..\..\..\..\components\libraries\atomic_fifo;..\..\..\..\..\..\components\libraries\balloc;..\..\..\..\..\..\components\libraries\block_dev;..\..\..\..\..\..\components\libraries\bootloader\dfu;..\..\..\..\..\..\components\libraries\bsp;..\..\..\..\..\..\components\libraries\crc16;..\..\..\..\..\..\components\libraries\delay;..\..\..\..\..\..\components\libraries\experimental_log;..\..\..\..\..\..\components\libraries\experimental_log\src;..\..\..\..\..\..\components\libraries\experimental_memobj;..\..\..\..\..\..\components\libraries\experimental_section_vars;..\..\..\..\..\..\components\libraries\queue;..\..\..\..\..\..\components\libraries\scheduler;..\..\..\..\..\..\components\libraries\strerror;..\..\..\..\..\..\components\libraries\timer;..\..\..\..\..\..\components\libraries\usbd;..\..\..\..\..\..\components\libraries\usbd\class\cdc;..\..\..\..\..\..\components\libraries\usbd\class\cdc\acm;..\..\..\..\..\..\components\libraries\usbd\class\nrf_dfu_trigger;..\..\..\..\..\..\components\libraries\usbd\config;..\..\..\..\..\..\components\libraries\util;..\..\..\..\..\..\components\serialization\common;..\..\..\..\..\..\components\serialization\common\struct_ser\ble;..\..\..\..\..\..\components\serialization\common\transport;..\..\..\..\..\..\components\serialization\common\transport\ser_phy;..\..\..\..\..\..\components\serialization\common\transport\ser_phy\config;..\..\..\..\..\..\components\serialization\connectivity;..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware;..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers;..\..\..\..\..\..\components\serialization\connectivity\codecs\common;..\..\..\..\..\..\components\serialization\connectivity\hal;..\..\..\..\..\..\components\softdevice\common;..\..\..\..\..\..\components\softdevice\s132v3\headers;..\..\..\..\..\..\components\softdevice\s132v3\headers\nrf52;..\..\..\..\..\..\external\fprintf;..\..\..\..\..\..\external\segger_rtt;..\..\..\..\..\..\integration\nrfx;..\..\..\..\..\..\integration\nrfx\legacy;..\..\..\..\..\..\modules\nrfx;..\..\..\..\..\..\modules\nrfx\drivers\include;..\..\..\..\..\..\modules\nrfx\hal;..\..\..\..\..\..\modules\nrfx\mdk;..\config -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ --cpreproc_opts=-DBLE_STACK_SUPPORT_REQD,-DBOARD_PCA10059,-DBSP_DEFINES_ONLY,-DCONFIG_GPIO_AS_PINRESET,-DFLOAT_ABI_HARD,-DHCI_TIMER2,-DNRF52840_XXAA,-DNRF_SD_BLE_API_VERSION=3,-DS132,-DSER_CONNECTIVITY,-DSOFTDEVICE_PRESENT,-DSWI_DISABLE0,-D__HEAP_SIZE=512,-D__STACK_SIZE=2048 -+ BLE_STACK_SUPPORT_REQD BOARD_PCA10059 BSP_DEFINES_ONLY CONFIG_GPIO_AS_PINRESET FLOAT_ABI_HARD HCI_TIMER2 NRF52840_XXAA NRF_SD_BLE_API_VERSION=3 S132 SER_CONNECTIVITY SOFTDEVICE_PRESENT SWI_DISABLE0 __HEAP_SIZE=512 __STACK_SIZE=2048 -+ -+ ..\..\..\config\ble_connectivity_s132v3_usb_hci_pca10059;..\..\..\config;..\..\..\..\..\..\components;..\..\..\..\..\..\components\ble\ble_dtm;..\..\..\..\..\..\components\ble\common;..\..\..\..\..\..\components\boards;..\..\..\..\..\..\components\drivers_nrf\usbd;..\..\..\..\..\..\components\libraries\atomic;..\..\..\..\..\..\components\libraries\atomic_fifo;..\..\..\..\..\..\components\libraries\balloc;..\..\..\..\..\..\components\libraries\block_dev;..\..\..\..\..\..\components\libraries\bootloader\dfu;..\..\..\..\..\..\components\libraries\bsp;..\..\..\..\..\..\components\libraries\crc16;..\..\..\..\..\..\components\libraries\delay;..\..\..\..\..\..\components\libraries\experimental_log;..\..\..\..\..\..\components\libraries\experimental_log\src;..\..\..\..\..\..\components\libraries\experimental_memobj;..\..\..\..\..\..\components\libraries\experimental_section_vars;..\..\..\..\..\..\components\libraries\queue;..\..\..\..\..\..\components\libraries\scheduler;..\..\..\..\..\..\components\libraries\strerror;..\..\..\..\..\..\components\libraries\timer;..\..\..\..\..\..\components\libraries\usbd;..\..\..\..\..\..\components\libraries\usbd\class\cdc;..\..\..\..\..\..\components\libraries\usbd\class\cdc\acm;..\..\..\..\..\..\components\libraries\usbd\class\nrf_dfu_trigger;..\..\..\..\..\..\components\libraries\usbd\config;..\..\..\..\..\..\components\libraries\util;..\..\..\..\..\..\components\serialization\common;..\..\..\..\..\..\components\serialization\common\struct_ser\ble;..\..\..\..\..\..\components\serialization\common\transport;..\..\..\..\..\..\components\serialization\common\transport\ser_phy;..\..\..\..\..\..\components\serialization\common\transport\ser_phy\config;..\..\..\..\..\..\components\serialization\connectivity;..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware;..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers;..\..\..\..\..\..\components\serialization\connectivity\codecs\common;..\..\..\..\..\..\components\serialization\connectivity\hal;..\..\..\..\..\..\components\softdevice\common;..\..\..\..\..\..\components\softdevice\s132v3\headers;..\..\..\..\..\..\components\softdevice\s132v3\headers\nrf52;..\..\..\..\..\..\external\fprintf;..\..\..\..\..\..\external\segger_rtt;..\..\..\..\..\..\integration\nrfx;..\..\..\..\..\..\integration\nrfx\legacy;..\..\..\..\..\..\modules\nrfx;..\..\..\..\..\..\modules\nrfx\drivers\include;..\..\..\..\..\..\modules\nrfx\hal;..\..\..\..\..\..\modules\nrfx\mdk;..\config -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0x00000000 -+ 0x20000000 -+ -+ -+ -+ -+ --diag_suppress 6330 -+ -+ -+ -+ -+ -+ -+ Application -+ -+ main.c -+ 1 -+ ..\..\..\main.c -+ sdk_config.h -+ 5 -+ ..\config\sdk_config.h -+ -+ Board Definition -+ -+ boards.c -+ 1 -+ ..\..\..\..\..\..\components\boards\boards.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_dfu_trigger_usb.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\bootloader\dfu\nrf_dfu_trigger_usb.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_BLE -+ -+ ble_advdata.c -+ 1 -+ ..\..\..\..\..\..\components\ble\common\ble_advdata.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm.c -+ 1 -+ ..\..\..\..\..\..\components\ble\ble_dtm\ble_dtm.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm_hw_nrf52.c -+ 1 -+ ..\..\..\..\..\..\components\ble\ble_dtm\ble_dtm_hw_nrf52.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_srv_common.c -+ 1 -+ ..\..\..\..\..\..\components\ble\common\ble_srv_common.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Drivers -+ -+ nrf_drv_clock.c -+ 1 -+ ..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_drv_power.c -+ 1 -+ ..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_power.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_drv_uart.c -+ 1 -+ ..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_drv_usbd.c -+ 1 -+ ..\..\..\..\..\..\components\drivers_nrf\usbd\nrf_drv_usbd.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_clock.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_power.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_power.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_power_clock.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_power_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_prs.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\prs\nrfx_prs.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_uart.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_uarte.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_uarte.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Libraries -+ -+ app_error.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_error_handler_keil.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error_handler_keil.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_error_weak.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error_weak.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_scheduler.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\scheduler\app_scheduler.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_timer.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\timer\app_timer.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_usbd.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\usbd\app_usbd.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_usbd_cdc_acm.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\usbd\class\cdc\acm\app_usbd_cdc_acm.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_usbd_core.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\usbd\app_usbd_core.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_usbd_nrf_dfu_trigger.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\usbd\class\nrf_dfu_trigger\app_usbd_nrf_dfu_trigger.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_usbd_serial_num.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\usbd\app_usbd_serial_num.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_usbd_string_desc.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\usbd\app_usbd_string_desc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_util_platform.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_util_platform.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ crc16.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\crc16\crc16.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_assert.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\nrf_assert.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_atfifo.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\atomic_fifo\nrf_atfifo.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_atomic.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\atomic\nrf_atomic.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_balloc.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\balloc\nrf_balloc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_fprintf.c -+ 1 -+ ..\..\..\..\..\..\external\fprintf\nrf_fprintf.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_fprintf_format.c -+ 1 -+ ..\..\..\..\..\..\external\fprintf\nrf_fprintf_format.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_memobj.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_memobj\nrf_memobj.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_queue.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\queue\nrf_queue.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_section_iter.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_section_vars\nrf_section_iter.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_strerror.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\strerror\nrf_strerror.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Log -+ -+ nrf_log_backend_rtt.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_backend_rtt.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_backend_serial.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_backend_serial.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_default_backends.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_default_backends.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_frontend.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_frontend.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_str_formatter.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_str_formatter.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Segger_RTT -+ -+ SEGGER_RTT.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ SEGGER_RTT_Syscalls_KEIL.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT_Syscalls_KEIL.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ SEGGER_RTT_printf.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT_printf.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Serialization -+ -+ ble_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm_init.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\ble_dtm_init.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_event_enc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_event_enc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gap_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gap_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gap_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatt_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gatt_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gattc_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gattc_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gattc_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gatts_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gatts_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gatts_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_l2cap_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_l2cap_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_l2cap_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\ble_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ cond_field_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\cond_field_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_gap_sec_keys.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_gap_sec_keys.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_l2cap_sdu_pool.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_l2cap_sdu_pool.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_user_mem.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_user_mem.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\conn_mw.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gap.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gap.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gattc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gattc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gatts.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gatts.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_l2cap.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_l2cap.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_nrf_soc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\conn_mw_nrf_soc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ dtm_uart.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\hal\dtm_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_soc_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\nrf_soc_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_soc_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\nrf_soc_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_dtm_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_dtm_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_error_handling.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_error_handling.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_event_encoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_event_encoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_handlers.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_handlers.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_pkt_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_pkt_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_reset_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_reset_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_dbg_sd_str.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\ser_dbg_sd_str.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_hal_transport.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_hal_transport.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_phy_hci.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_phy\ser_phy_hci.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_phy_hci_slip_cdc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_phy\ser_phy_hci_slip_cdc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_SoftDevice -+ -+ nrf_sdh.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_sdh_ble.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh_ble.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_sdh_soc.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh_soc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ flash_s132_nrf52_3.0.0_softdevice -+ 0x4 -+ ARM-ADS -+ -+ nRF52840_xxAA -+ Nordic Semiconductor -+ .. -+ IROM(0x00000000,0x80000) IRAM(0x20000000,0x10000) CPUTYPE("Cortex-M4") FPU2 CLOCK(64000000) ELITTLE -+ -+ -+ -+ 0 -+ $$Device:nRF52832_xxAA$Device\Include\nrf.h -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ -+ ..\..\..\..\..\..\components\softdevice\s132v3\hex\ -+ s132_nrf52_3.0.0_softdevice.hex -+ 1 -+ 0 -+ 1 -+ 1 -+ 1 -+ .\_build\ -+ 1 -+ 0 -+ 0 -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ -+ 1 -+ 0 -+ attrib +R $H\* -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ 0 -+ -+ -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 3 -+ -+ -+ 1 -+ -+ -+ -+ -+ -+ -+ SARMCM3.DLL -+ -MPU -+ TCM.DLL -+ -pCM4 -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 16 -+ -+ -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ -+ -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ 0 -+ 1 1 -+ 0 -+ -1 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Segger\JL2CM3.dll -+ -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 1 -+ 1 -+ 4099 -+ -+ 1 -+ Segger\JL2CM3.dll -+ -+ -+ -+ -+ -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 1 -+ 1 -+ 0 -+ 1 -+ 1 -+ 0 -+ 0 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 1 -+ 0 -+ 0 -+ "" -+ -+ 0 -+ 0 -+ 0 -+ 1 -+ 1 -+ 0 -+ 0 -+ 2 -+ 0 -+ 0 -+ 8 -+ 1 -+ 0 -+ 0 -+ 0 -+ 3 -+ 3 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x20000000 -+ 0x40000 -+ -+ -+ 1 -+ 0x0 -+ 0x100000 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 1 -+ 0x1f000 -+ 0xe1000 -+ -+ -+ 1 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ 0 -+ 0x200199c0 -+ 0x26640 -+ -+ -+ 0 -+ 0x0 -+ 0x0 -+ -+ -+ -+ -+ -+ 1 -+ 4 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ --reduce_paths -+ __HEAP_SIZE=512 __STACK_SIZE=2048 -+ -+ ..\..\..\config\ble_connectivity_s132v3_usb_hci_pca10059;..\..\..\config;..\config -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ -+ --cpreproc_opts=-D__HEAP_SIZE=512,-D__STACK_SIZE=2048 -+ __HEAP_SIZE=512 __STACK_SIZE=2048 -+ -+ ..\..\..\config\ble_connectivity_s132v3_usb_hci_pca10059;..\..\..\config;..\config -+ -+ -+ -+ 1 -+ 0 -+ 0 -+ 0 -+ 1 -+ 0 -+ 0x00000000 -+ 0x20000000 -+ -+ -+ -+ -+ --diag_suppress 6330 -+ -+ -+ -+ -+ -+ -+ Application -+ -+ main.c -+ 1 -+ ..\..\..\main.c -+ sdk_config.h -+ 5 -+ ..\config\sdk_config.h -+ -+ Board Definition -+ -+ boards.c -+ 1 -+ ..\..\..\..\..\..\components\boards\boards.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_dfu_trigger_usb.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\bootloader\dfu\nrf_dfu_trigger_usb.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_BLE -+ -+ ble_advdata.c -+ 1 -+ ..\..\..\..\..\..\components\ble\common\ble_advdata.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm.c -+ 1 -+ ..\..\..\..\..\..\components\ble\ble_dtm\ble_dtm.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm_hw_nrf52.c -+ 1 -+ ..\..\..\..\..\..\components\ble\ble_dtm\ble_dtm_hw_nrf52.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_srv_common.c -+ 1 -+ ..\..\..\..\..\..\components\ble\common\ble_srv_common.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Drivers -+ -+ nrf_drv_clock.c -+ 1 -+ ..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_drv_power.c -+ 1 -+ ..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_power.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_drv_uart.c -+ 1 -+ ..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_drv_usbd.c -+ 1 -+ ..\..\..\..\..\..\components\drivers_nrf\usbd\nrf_drv_usbd.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_clock.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_power.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_power.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_power_clock.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_power_clock.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_prs.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\prs\nrfx_prs.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_uart.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrfx_uarte.c -+ 1 -+ ..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_uarte.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Libraries -+ -+ app_error.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_error_handler_keil.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error_handler_keil.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_error_weak.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_error_weak.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_scheduler.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\scheduler\app_scheduler.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_timer.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\timer\app_timer.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_usbd.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\usbd\app_usbd.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_usbd_cdc_acm.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\usbd\class\cdc\acm\app_usbd_cdc_acm.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_usbd_core.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\usbd\app_usbd_core.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_usbd_nrf_dfu_trigger.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\usbd\class\nrf_dfu_trigger\app_usbd_nrf_dfu_trigger.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_usbd_serial_num.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\usbd\app_usbd_serial_num.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_usbd_string_desc.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\usbd\app_usbd_string_desc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ app_util_platform.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\app_util_platform.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ crc16.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\crc16\crc16.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_assert.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\util\nrf_assert.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_atfifo.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\atomic_fifo\nrf_atfifo.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_atomic.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\atomic\nrf_atomic.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_balloc.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\balloc\nrf_balloc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_fprintf.c -+ 1 -+ ..\..\..\..\..\..\external\fprintf\nrf_fprintf.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_fprintf_format.c -+ 1 -+ ..\..\..\..\..\..\external\fprintf\nrf_fprintf_format.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_memobj.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_memobj\nrf_memobj.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_queue.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\queue\nrf_queue.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_section_iter.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_section_vars\nrf_section_iter.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_strerror.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\strerror\nrf_strerror.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Log -+ -+ nrf_log_backend_rtt.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_backend_rtt.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_backend_serial.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_backend_serial.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_default_backends.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_default_backends.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_frontend.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_frontend.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_log_str_formatter.c -+ 1 -+ ..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_str_formatter.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Segger_RTT -+ -+ SEGGER_RTT.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ SEGGER_RTT_Syscalls_KEIL.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT_Syscalls_KEIL.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ SEGGER_RTT_printf.c -+ 1 -+ ..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT_printf.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_Serialization -+ -+ ble_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_dtm_init.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\ble_dtm_init.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_event_enc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_event_enc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gap_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gap_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gap_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gap_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatt_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gatt_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gattc_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gattc_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gattc_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gattc_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gatts_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gatts_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_gatts_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gatts_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_l2cap_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_evt_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_l2cap_evt_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_l2cap_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_l2cap_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\ble_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ble_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ cond_field_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\cond_field_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_gap_sec_keys.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_gap_sec_keys.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_l2cap_sdu_pool.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_l2cap_sdu_pool.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_ble_user_mem.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_user_mem.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\conn_mw.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gap.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gap.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gattc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gattc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_gatts.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gatts.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_ble_l2cap.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_l2cap.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ conn_mw_nrf_soc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\common\conn_mw_nrf_soc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ dtm_uart.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\hal\dtm_uart.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_soc_conn.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\nrf_soc_conn.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_soc_struct_serialization.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\struct_ser\ble\nrf_soc_struct_serialization.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_dtm_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_dtm_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_error_handling.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_error_handling.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_event_encoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_event_encoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_handlers.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_handlers.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_pkt_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_pkt_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_conn_reset_cmd_decoder.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\connectivity\ser_conn_reset_cmd_decoder.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_dbg_sd_str.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\ser_dbg_sd_str.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_hal_transport.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_hal_transport.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_phy_hci.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_phy\ser_phy_hci.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ser_phy_hci_slip_cdc.c -+ 1 -+ ..\..\..\..\..\..\components\serialization\common\transport\ser_phy\ser_phy_hci_slip_cdc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nRF_SoftDevice -+ -+ nrf_sdh.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_sdh_ble.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh_ble.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ nrf_sdh_soc.c -+ 1 -+ ..\..\..\..\..\..\components\softdevice\common\nrf_sdh_soc.c -+ -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 11 -+ -+ -+ 1 -+ -+ -+ -+ 2 -+ 0 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 2 -+ 0 -+ 2 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+
-diff -u -r -N a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld b/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld ---- a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld 2018-07-18 17:27:40.000000000 +0200 -@@ -0,0 +1,94 @@ -+/* Linker script to configure memory regions. */ -+ -+SEARCH_DIR(.) -+GROUP(-lgcc -lc -lnosys) -+ -+MEMORY -+{ -+ FLASH (rx) : ORIGIN = 0x1f000, LENGTH = 0xe1000 -+ RAM (rwx) : ORIGIN = 0x200199c0, LENGTH = 0x26640 -+ connectivity_version_info (r) : ORIGIN = 0x30000, LENGTH = 0x18 -+} -+ -+SECTIONS -+{ -+ .connectivity_version_info : -+ { -+ PROVIDE(__start_connectivity_version_info = .); -+ KEEP(*(SORT(.connectivity_version_info*))) -+ PROVIDE(__stop_connectivity_version_info = .); -+ } > connectivity_version_info -+} -+ -+SECTIONS -+{ -+ . = ALIGN(4); -+ .mem_section_dummy_ram : -+ { -+ } -+ .log_dynamic_data : -+ { -+ PROVIDE(__start_log_dynamic_data = .); -+ KEEP(*(SORT(.log_dynamic_data*))) -+ PROVIDE(__stop_log_dynamic_data = .); -+ } > RAM -+ -+} INSERT AFTER .data; -+ -+SECTIONS -+{ -+ .mem_section_dummy_rom : -+ { -+ } -+ .log_const_data : -+ { -+ PROVIDE(__start_log_const_data = .); -+ KEEP(*(SORT(.log_const_data*))) -+ PROVIDE(__stop_log_const_data = .); -+ } > FLASH -+ .sdh_ble_observers : -+ { -+ PROVIDE(__start_sdh_ble_observers = .); -+ KEEP(*(SORT(.sdh_ble_observers*))) -+ PROVIDE(__stop_sdh_ble_observers = .); -+ } > FLASH -+ .sdh_soc_observers : -+ { -+ PROVIDE(__start_sdh_soc_observers = .); -+ KEEP(*(SORT(.sdh_soc_observers*))) -+ PROVIDE(__stop_sdh_soc_observers = .); -+ } > FLASH -+ .nrf_queue : -+ { -+ PROVIDE(__start_nrf_queue = .); -+ KEEP(*(.nrf_queue)) -+ PROVIDE(__stop_nrf_queue = .); -+ } > FLASH -+ .nrf_balloc : -+ { -+ PROVIDE(__start_nrf_balloc = .); -+ KEEP(*(.nrf_balloc)) -+ PROVIDE(__stop_nrf_balloc = .); -+ } > FLASH -+ .sdh_stack_observers : -+ { -+ PROVIDE(__start_sdh_stack_observers = .); -+ KEEP(*(SORT(.sdh_stack_observers*))) -+ PROVIDE(__stop_sdh_stack_observers = .); -+ } > FLASH -+ .sdh_req_observers : -+ { -+ PROVIDE(__start_sdh_req_observers = .); -+ KEEP(*(SORT(.sdh_req_observers*))) -+ PROVIDE(__stop_sdh_req_observers = .); -+ } > FLASH -+ .sdh_state_observers : -+ { -+ PROVIDE(__start_sdh_state_observers = .); -+ KEEP(*(SORT(.sdh_state_observers*))) -+ PROVIDE(__stop_sdh_state_observers = .); -+ } > FLASH -+ -+} INSERT AFTER .text -+ -+INCLUDE "nrf_common.ld" -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/Makefile b/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/Makefile ---- a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/Makefile 2018-07-18 17:27:40.000000000 +0200 -@@ -0,0 +1,276 @@ -+PROJECT_NAME := ble_connectivity_s132v3_usb_hci_pca10059 -+TARGETS := nrf52840_xxaa -+OUTPUT_DIRECTORY := _build -+ -+SDK_ROOT := ../../../../../.. -+PROJ_DIR := ../../.. -+ -+$(OUTPUT_DIRECTORY)/nrf52840_xxaa.out: \ -+ LINKER_SCRIPT := ble_connectivity_gcc_nrf52.ld -+ -+# Source files common to all targets -+SRC_FILES += \ -+ $(SDK_ROOT)/modules/nrfx/mdk/gcc_startup_nrf52840.S \ -+ $(SDK_ROOT)/components/libraries/experimental_log/src/nrf_log_backend_rtt.c \ -+ $(SDK_ROOT)/components/libraries/experimental_log/src/nrf_log_backend_serial.c \ -+ $(SDK_ROOT)/components/libraries/experimental_log/src/nrf_log_default_backends.c \ -+ $(SDK_ROOT)/components/libraries/experimental_log/src/nrf_log_frontend.c \ -+ $(SDK_ROOT)/components/libraries/experimental_log/src/nrf_log_str_formatter.c \ -+ $(SDK_ROOT)/components/libraries/util/app_error.c \ -+ $(SDK_ROOT)/components/libraries/util/app_error_handler_gcc.c \ -+ $(SDK_ROOT)/components/libraries/util/app_error_weak.c \ -+ $(SDK_ROOT)/components/libraries/scheduler/app_scheduler.c \ -+ $(SDK_ROOT)/components/libraries/timer/app_timer.c \ -+ $(SDK_ROOT)/components/libraries/usbd/app_usbd.c \ -+ $(SDK_ROOT)/components/libraries/usbd/class/cdc/acm/app_usbd_cdc_acm.c \ -+ $(SDK_ROOT)/components/libraries/usbd/app_usbd_core.c \ -+ $(SDK_ROOT)/components/libraries/usbd/class/nrf_dfu_trigger/app_usbd_nrf_dfu_trigger.c \ -+ $(SDK_ROOT)/components/libraries/usbd/app_usbd_serial_num.c \ -+ $(SDK_ROOT)/components/libraries/usbd/app_usbd_string_desc.c \ -+ $(SDK_ROOT)/components/libraries/util/app_util_platform.c \ -+ $(SDK_ROOT)/components/libraries/crc16/crc16.c \ -+ $(SDK_ROOT)/components/libraries/util/nrf_assert.c \ -+ $(SDK_ROOT)/components/libraries/atomic_fifo/nrf_atfifo.c \ -+ $(SDK_ROOT)/components/libraries/atomic/nrf_atomic.c \ -+ $(SDK_ROOT)/components/libraries/balloc/nrf_balloc.c \ -+ $(SDK_ROOT)/external/fprintf/nrf_fprintf.c \ -+ $(SDK_ROOT)/external/fprintf/nrf_fprintf_format.c \ -+ $(SDK_ROOT)/components/libraries/experimental_memobj/nrf_memobj.c \ -+ $(SDK_ROOT)/components/libraries/queue/nrf_queue.c \ -+ $(SDK_ROOT)/components/libraries/experimental_section_vars/nrf_section_iter.c \ -+ $(SDK_ROOT)/components/libraries/strerror/nrf_strerror.c \ -+ $(SDK_ROOT)/modules/nrfx/mdk/system_nrf52840.c \ -+ $(SDK_ROOT)/components/boards/boards.c \ -+ $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_conn.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/common/ble_dtm_init.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_event_enc.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_evt_conn.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gap_evt_conn.c \ -+ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c \ -+ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_gatt_struct_serialization.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gattc_conn.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gattc_evt_conn.c \ -+ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_gattc_struct_serialization.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gatts_conn.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gatts_evt_conn.c \ -+ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_gatts_struct_serialization.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_l2cap_conn.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_l2cap_evt_conn.c \ -+ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_l2cap_struct_serialization.c \ -+ $(SDK_ROOT)/components/serialization/common/ble_serialization.c \ -+ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_struct_serialization.c \ -+ $(SDK_ROOT)/components/serialization/common/cond_field_serialization.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/conn_ble_l2cap_sdu_pool.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/common/conn_mw.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gap.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gattc.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gatts.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_l2cap.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/common/conn_mw_nrf_soc.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/hal/dtm_uart.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/nrf_soc_conn.c \ -+ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/nrf_soc_struct_serialization.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_cmd_decoder.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_dtm_cmd_decoder.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_error_handling.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_event_encoder.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_handlers.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_pkt_decoder.c \ -+ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_reset_cmd_decoder.c \ -+ $(SDK_ROOT)/components/serialization/common/ser_dbg_sd_str.c \ -+ $(SDK_ROOT)/components/serialization/common/transport/ser_hal_transport.c \ -+ $(SDK_ROOT)/components/serialization/common/transport/ser_phy/ser_phy_hci.c \ -+ $(SDK_ROOT)/components/serialization/common/transport/ser_phy/ser_phy_hci_slip_cdc.c \ -+ $(SDK_ROOT)/integration/nrfx/legacy/nrf_drv_clock.c \ -+ $(SDK_ROOT)/integration/nrfx/legacy/nrf_drv_power.c \ -+ $(SDK_ROOT)/integration/nrfx/legacy/nrf_drv_uart.c \ -+ $(SDK_ROOT)/components/drivers_nrf/usbd/nrf_drv_usbd.c \ -+ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_clock.c \ -+ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power.c \ -+ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power_clock.c \ -+ $(SDK_ROOT)/modules/nrfx/drivers/src/prs/nrfx_prs.c \ -+ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uart.c \ -+ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uarte.c \ -+ $(PROJ_DIR)/main.c \ -+ $(SDK_ROOT)/external/segger_rtt/SEGGER_RTT.c \ -+ $(SDK_ROOT)/external/segger_rtt/SEGGER_RTT_Syscalls_GCC.c \ -+ $(SDK_ROOT)/external/segger_rtt/SEGGER_RTT_printf.c \ -+ $(SDK_ROOT)/components/ble/common/ble_advdata.c \ -+ $(SDK_ROOT)/components/ble/ble_dtm/ble_dtm.c \ -+ $(SDK_ROOT)/components/ble/ble_dtm/ble_dtm_hw_nrf52.c \ -+ $(SDK_ROOT)/components/ble/common/ble_srv_common.c \ -+ $(SDK_ROOT)/components/softdevice/common/nrf_sdh.c \ -+ $(SDK_ROOT)/components/softdevice/common/nrf_sdh_ble.c \ -+ $(SDK_ROOT)/components/softdevice/common/nrf_sdh_soc.c \ -+ -+# Include folders common to all targets -+INC_FOLDERS += \ -+ $(PROJ_DIR)/config/ble_connectivity_s132v3_usb_hci_pca10059 \ -+ $(SDK_ROOT)/components \ -+ $(SDK_ROOT)/components/serialization/connectivity/hal \ -+ $(SDK_ROOT)/modules/nrfx/mdk \ -+ $(SDK_ROOT)/components/libraries/scheduler \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers \ -+ $(SDK_ROOT)/components/libraries/experimental_log \ -+ $(SDK_ROOT)/components/toolchain/cmsis/include \ -+ $(SDK_ROOT)/components/libraries/queue \ -+ $(SDK_ROOT)/components/libraries/timer \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/common \ -+ $(SDK_ROOT)/components/serialization/connectivity \ -+ $(SDK_ROOT)/components/libraries/strerror \ -+ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware \ -+ $(SDK_ROOT)/components/libraries/crc16 \ -+ $(SDK_ROOT)/components/libraries/bootloader/dfu \ -+ $(SDK_ROOT)/components/serialization/common \ -+ $(SDK_ROOT)/components/libraries/util \ -+ $(SDK_ROOT)/components/libraries/usbd/class/cdc/acm \ -+ ../config \ -+ $(SDK_ROOT)/components/libraries/usbd/class/cdc \ -+ $(SDK_ROOT)/components/ble/common \ -+ $(SDK_ROOT)/integration/nrfx \ -+ $(SDK_ROOT)/components/libraries/balloc \ -+ $(SDK_ROOT)/components/drivers_nrf/usbd \ -+ $(SDK_ROOT)/modules/nrfx/hal \ -+ $(SDK_ROOT)/components/libraries/bsp \ -+ $(SDK_ROOT)/components/softdevice/s132v3/headers/nrf52 \ -+ $(SDK_ROOT)/modules/nrfx \ -+ $(SDK_ROOT)/components/libraries/experimental_section_vars \ -+ $(SDK_ROOT)/integration/nrfx/legacy \ -+ $(SDK_ROOT)/components/serialization/common/transport/ser_phy \ -+ $(SDK_ROOT)/components/libraries/usbd \ -+ $(SDK_ROOT)/components/libraries/experimental_log/src \ -+ $(SDK_ROOT)/components/libraries/delay \ -+ $(SDK_ROOT)/external/segger_rtt \ -+ $(SDK_ROOT)/components/libraries/atomic_fifo \ -+ $(SDK_ROOT)/components/ble/ble_dtm \ -+ $(SDK_ROOT)/components/libraries/atomic \ -+ $(SDK_ROOT)/components/boards \ -+ $(SDK_ROOT)/components/libraries/experimental_memobj \ -+ $(SDK_ROOT)/components/serialization/common/struct_ser/ble \ -+ $(SDK_ROOT)/components/libraries/usbd/config \ -+ $(SDK_ROOT)/components/softdevice/s132v3/headers \ -+ $(SDK_ROOT)/components/libraries/usbd/class/nrf_dfu_trigger \ -+ $(SDK_ROOT)/components/serialization/common/transport \ -+ $(SDK_ROOT)/components/softdevice/common \ -+ $(SDK_ROOT)/components/serialization/common/transport/ser_phy/config \ -+ $(SDK_ROOT)/modules/nrfx/drivers/include \ -+ $(SDK_ROOT)/components/libraries/block_dev \ -+ $(SDK_ROOT)/external/fprintf \ -+ -+# Libraries common to all targets -+LIB_FILES += \ -+ -+# Optimization flags -+OPT = -Os -g3 -+# Uncomment the line below to enable link time optimization -+#OPT += -flto -+ -+# C flags common to all targets -+CFLAGS += $(OPT) -+CFLAGS += -DBLE_STACK_SUPPORT_REQD -+CFLAGS += -DBOARD_PCA10059 -+CFLAGS += -DBSP_DEFINES_ONLY -+CFLAGS += -DCONFIG_GPIO_AS_PINRESET -+CFLAGS += -DFLOAT_ABI_HARD -+CFLAGS += -DHCI_TIMER2 -+CFLAGS += -DNRF52840_XXAA -+CFLAGS += -DNRF_SD_BLE_API_VERSION=3 -+CFLAGS += -DS132 -+CFLAGS += -DSER_CONNECTIVITY -+CFLAGS += -DSOFTDEVICE_PRESENT -+CFLAGS += -DSWI_DISABLE0 -+CFLAGS += -mcpu=cortex-m4 -+CFLAGS += -mthumb -mabi=aapcs -+CFLAGS += -Wall -Werror -+CFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16 -+# keep every function in a separate section, this allows linker to discard unused ones -+CFLAGS += -ffunction-sections -fdata-sections -fno-strict-aliasing -+CFLAGS += -fno-builtin -fshort-enums -+ -+# C++ flags common to all targets -+CXXFLAGS += $(OPT) -+ -+# Assembler flags common to all targets -+ASMFLAGS += -g3 -+ASMFLAGS += -mcpu=cortex-m4 -+ASMFLAGS += -mthumb -mabi=aapcs -+ASMFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16 -+ASMFLAGS += -DBLE_STACK_SUPPORT_REQD -+ASMFLAGS += -DBOARD_PCA10059 -+ASMFLAGS += -DBSP_DEFINES_ONLY -+ASMFLAGS += -DCONFIG_GPIO_AS_PINRESET -+ASMFLAGS += -DFLOAT_ABI_HARD -+ASMFLAGS += -DHCI_TIMER2 -+ASMFLAGS += -DNRF52840_XXAA -+ASMFLAGS += -DNRF_SD_BLE_API_VERSION=3 -+ASMFLAGS += -DS132 -+ASMFLAGS += -DSER_CONNECTIVITY -+ASMFLAGS += -DSOFTDEVICE_PRESENT -+ASMFLAGS += -DSWI_DISABLE0 -+ -+# Linker flags -+LDFLAGS += $(OPT) -+LDFLAGS += -mthumb -mabi=aapcs -L$(SDK_ROOT)/modules/nrfx/mdk -T$(LINKER_SCRIPT) -+LDFLAGS += -mcpu=cortex-m4 -+LDFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16 -+# let linker dump unused sections -+LDFLAGS += -Wl,--gc-sections -+# use newlib in nano version -+LDFLAGS += --specs=nano.specs -+ -+nrf52840_xxaa: CFLAGS += -D__HEAP_SIZE=512 -+nrf52840_xxaa: CFLAGS += -D__STACK_SIZE=2048 -+nrf52840_xxaa: ASMFLAGS += -D__HEAP_SIZE=512 -+nrf52840_xxaa: ASMFLAGS += -D__STACK_SIZE=2048 -+ -+# Add standard libraries at the very end of the linker input, after all objects -+# that may need symbols provided by these libraries. -+LIB_FILES += -lc -lnosys -lm -+ -+ -+.PHONY: default help -+ -+# Default target - first one defined -+default: nrf52840_xxaa -+ -+# Print all targets that can be built -+help: -+ @echo following targets are available: -+ @echo nrf52840_xxaa -+ @echo flash_softdevice -+ @echo sdk_config - starting external tool for editing sdk_config.h -+ @echo flash - flashing binary -+ -+TEMPLATE_PATH := $(SDK_ROOT)/components/toolchain/gcc -+ -+ -+include $(TEMPLATE_PATH)/Makefile.common -+ -+$(foreach target, $(TARGETS), $(call define_target, $(target))) -+ -+.PHONY: flash flash_softdevice erase -+ -+# Flash the program -+flash: $(OUTPUT_DIRECTORY)/nrf52840_xxaa.hex -+ @echo Flashing: $< -+ nrfjprog -f nrf52 --program $< --sectorerase -+ nrfjprog -f nrf52 --reset -+ -+# Flash softdevice -+flash_softdevice: -+ @echo Flashing: s132_nrf52_3.0.0_softdevice.hex -+ nrfjprog -f nrf52 --program $(SDK_ROOT)/components/softdevice/s132v3/hex/s132_nrf52_3.0.0_softdevice.hex --sectorerase -+ nrfjprog -f nrf52 --reset -+ -+erase: -+ nrfjprog -f nrf52 --eraseall -+ -+SDK_CONFIG_FILE := ../config/sdk_config.h -+CMSIS_CONFIG_TOOL := $(SDK_ROOT)/external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar -+sdk_config: -+ java -jar $(CMSIS_CONFIG_TOOL) $(SDK_CONFIG_FILE) -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/config/sdk_config.h b/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/config/sdk_config.h ---- a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/config/sdk_config.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/config/sdk_config.h 2018-07-18 17:42:30.000000000 +0200 -@@ -0,0 +1,4529 @@ -+/** -+ * Copyright (c) 2017 - 2018, Nordic Semiconductor ASA -+ * -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form, except as embedded into a Nordic -+ * Semiconductor ASA integrated circuit in a product or a software update for -+ * such product, must reproduce the above copyright notice, this list of -+ * conditions and the following disclaimer in the documentation and/or other -+ * materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its -+ * contributors may be used to endorse or promote products derived from this -+ * software without specific prior written permission. -+ * -+ * 4. This software, with or without modification, must only be used with a -+ * Nordic Semiconductor ASA integrated circuit. -+ * -+ * 5. Any software provided in binary form under this license must not be reverse -+ * engineered, decompiled, modified and/or disassembled. -+ * -+ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -+ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ * -+ */ -+ -+ -+ -+#ifndef SDK_CONFIG_H -+#define SDK_CONFIG_H -+// <<< Use Configuration Wizard in Context Menu >>>\n -+#ifdef USE_APP_CONFIG -+#include "app_config.h" -+#endif -+// Application -+ -+//========================================================== -+// application_info - Software Component -+ -+//========================================================== -+// APP_NAME - Application name -+#ifndef APP_NAME -+#define APP_NAME "ble-connectivity" -+#endif -+ -+// APP_ID - Application ID -+#ifndef APP_ID -+#define APP_ID 0 -+#endif -+ -+// APP_VERSION - Application version (semantic versioning) -+ -+//========================================================== -+// APP_VERSION_MAJOR - Major version <0-1000> -+ -+ -+#ifndef APP_VERSION_MAJOR -+#define APP_VERSION_MAJOR 0 -+#endif -+ -+// APP_VERSION_MINOR - Minor version <0-1000> -+ -+ -+#ifndef APP_VERSION_MINOR -+#define APP_VERSION_MINOR 1 -+#endif -+ -+// APP_VERSION_PATCH - Patch version <0-1000> -+ -+ -+#ifndef APP_VERSION_PATCH -+#define APP_VERSION_PATCH 0 -+#endif -+ -+// APP_VERSION_PRERELEASE - Prerelease, eg. "-1.alpha" -+ -+// If not empty, this string should include the leading hyphen (-). -+// This string might be normalized at run-time to not contain characters -+// illegal in Semantic Versioning. -+#ifndef APP_VERSION_PRERELEASE -+#define APP_VERSION_PRERELEASE "" -+#endif -+ -+// APP_VERSION_METADATA - Metadata, e.g. "+some-string.01-01-2018-23-59-59" -+ -+// If not empty, this string should include the leading plus (+). -+// This string might be normalized at run-time to not contain characters -+// illegal in Semantic Versioning. -+#ifndef APP_VERSION_METADATA -+#define APP_VERSION_METADATA "+" __DATE__ " " __TIME__ -+#endif -+ -+// -+//========================================================== -+ -+// -+//========================================================== -+ -+// -+//========================================================== -+ -+// Board Definition -+ -+//========================================================== -+// nrf_dfu_trigger_usb - USB DFU Trigger library -+ -+//========================================================== -+// NRF_DFU_TRIGGER_USB_USB_SHARED - Flag indicating whether USB is used for other purposes in the application. -+ -+ -+#ifndef NRF_DFU_TRIGGER_USB_USB_SHARED -+#define NRF_DFU_TRIGGER_USB_USB_SHARED 1 -+#endif -+ -+// NRF_DFU_TRIGGER_USB_INTERFACE_NUM - The USB interface to use for the DFU Trigger library. <0-255> -+ -+ -+// According to the USB Specification, interface numbers cannot have -+// gaps. Tailor this value to adhere to this limitation. -+ -+#ifndef NRF_DFU_TRIGGER_USB_INTERFACE_NUM -+#define NRF_DFU_TRIGGER_USB_INTERFACE_NUM 0 -+#endif -+ -+// -+//========================================================== -+ -+// -+//========================================================== -+ -+// nRF_BLE -+ -+//========================================================== -+// BLE_DTM_ENABLED - ble_dtm - Module for testing RF/PHY using DTM commands -+ -+ -+#ifndef BLE_DTM_ENABLED -+#define BLE_DTM_ENABLED 1 -+#endif -+ -+// -+//========================================================== -+ -+// nRF_Drivers -+ -+//========================================================== -+// CLOCK_ENABLED - nrf_drv_clock - CLOCK peripheral driver - legacy layer -+//========================================================== -+#ifndef CLOCK_ENABLED -+#define CLOCK_ENABLED 1 -+#endif -+// CLOCK_CONFIG_LF_SRC - LF Clock Source -+ -+// <0=> RC -+// <1=> XTAL -+// <2=> Synth -+ -+#ifndef CLOCK_CONFIG_LF_SRC -+#define CLOCK_CONFIG_LF_SRC 1 -+#endif -+ -+// CLOCK_CONFIG_IRQ_PRIORITY - Interrupt priority -+ -+ -+// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -+// <0=> 0 (highest) -+// <1=> 1 -+// <2=> 2 -+// <3=> 3 -+// <4=> 4 -+// <5=> 5 -+// <6=> 6 -+// <7=> 7 -+ -+#ifndef CLOCK_CONFIG_IRQ_PRIORITY -+#define CLOCK_CONFIG_IRQ_PRIORITY 7 -+#endif -+ -+// -+ -+// NRFX_CLOCK_ENABLED - nrfx_clock - CLOCK peripheral driver -+//========================================================== -+#ifndef NRFX_CLOCK_ENABLED -+#define NRFX_CLOCK_ENABLED 1 -+#endif -+// NRFX_CLOCK_CONFIG_LF_SRC - LF Clock Source -+ -+// <0=> RC -+// <1=> XTAL -+// <2=> Synth -+ -+#ifndef NRFX_CLOCK_CONFIG_LF_SRC -+#define NRFX_CLOCK_CONFIG_LF_SRC 1 -+#endif -+ -+// NRFX_CLOCK_CONFIG_IRQ_PRIORITY - Interrupt priority -+ -+// <0=> 0 (highest) -+// <1=> 1 -+// <2=> 2 -+// <3=> 3 -+// <4=> 4 -+// <5=> 5 -+// <6=> 6 -+// <7=> 7 -+ -+#ifndef NRFX_CLOCK_CONFIG_IRQ_PRIORITY -+#define NRFX_CLOCK_CONFIG_IRQ_PRIORITY 7 -+#endif -+ -+// NRFX_CLOCK_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRFX_CLOCK_CONFIG_LOG_ENABLED -+#define NRFX_CLOCK_CONFIG_LOG_ENABLED 0 -+#endif -+// NRFX_CLOCK_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRFX_CLOCK_CONFIG_LOG_LEVEL -+#define NRFX_CLOCK_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRFX_CLOCK_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRFX_CLOCK_CONFIG_INFO_COLOR -+#define NRFX_CLOCK_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRFX_CLOCK_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRFX_CLOCK_CONFIG_DEBUG_COLOR -+#define NRFX_CLOCK_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// -+ -+// NRFX_POWER_ENABLED - nrfx_power - POWER peripheral driver -+//========================================================== -+#ifndef NRFX_POWER_ENABLED -+#define NRFX_POWER_ENABLED 1 -+#endif -+// NRFX_POWER_CONFIG_IRQ_PRIORITY - Interrupt priority -+ -+// <0=> 0 (highest) -+// <1=> 1 -+// <2=> 2 -+// <3=> 3 -+// <4=> 4 -+// <5=> 5 -+// <6=> 6 -+// <7=> 7 -+ -+#ifndef NRFX_POWER_CONFIG_IRQ_PRIORITY -+#define NRFX_POWER_CONFIG_IRQ_PRIORITY 7 -+#endif -+ -+// NRFX_POWER_CONFIG_DEFAULT_DCDCEN - The default configuration of main DCDC regulator -+ -+ -+// This settings means only that components for DCDC regulator are installed and it can be enabled. -+ -+#ifndef NRFX_POWER_CONFIG_DEFAULT_DCDCEN -+#define NRFX_POWER_CONFIG_DEFAULT_DCDCEN 0 -+#endif -+ -+// NRFX_POWER_CONFIG_DEFAULT_DCDCENHV - The default configuration of High Voltage DCDC regulator -+ -+ -+// This settings means only that components for DCDC regulator are installed and it can be enabled. -+ -+#ifndef NRFX_POWER_CONFIG_DEFAULT_DCDCENHV -+#define NRFX_POWER_CONFIG_DEFAULT_DCDCENHV 0 -+#endif -+ -+// -+ -+// NRFX_PRS_ENABLED - nrfx_prs - Peripheral Resource Sharing module -+//========================================================== -+#ifndef NRFX_PRS_ENABLED -+#define NRFX_PRS_ENABLED 1 -+#endif -+// NRFX_PRS_BOX_0_ENABLED - Enables box 0 in the module. -+ -+ -+#ifndef NRFX_PRS_BOX_0_ENABLED -+#define NRFX_PRS_BOX_0_ENABLED 0 -+#endif -+ -+// NRFX_PRS_BOX_1_ENABLED - Enables box 1 in the module. -+ -+ -+#ifndef NRFX_PRS_BOX_1_ENABLED -+#define NRFX_PRS_BOX_1_ENABLED 0 -+#endif -+ -+// NRFX_PRS_BOX_2_ENABLED - Enables box 2 in the module. -+ -+ -+#ifndef NRFX_PRS_BOX_2_ENABLED -+#define NRFX_PRS_BOX_2_ENABLED 0 -+#endif -+ -+// NRFX_PRS_BOX_3_ENABLED - Enables box 3 in the module. -+ -+ -+#ifndef NRFX_PRS_BOX_3_ENABLED -+#define NRFX_PRS_BOX_3_ENABLED 0 -+#endif -+ -+// NRFX_PRS_BOX_4_ENABLED - Enables box 4 in the module. -+ -+ -+#ifndef NRFX_PRS_BOX_4_ENABLED -+#define NRFX_PRS_BOX_4_ENABLED 1 -+#endif -+ -+// NRFX_PRS_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRFX_PRS_CONFIG_LOG_ENABLED -+#define NRFX_PRS_CONFIG_LOG_ENABLED 0 -+#endif -+// NRFX_PRS_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRFX_PRS_CONFIG_LOG_LEVEL -+#define NRFX_PRS_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRFX_PRS_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRFX_PRS_CONFIG_INFO_COLOR -+#define NRFX_PRS_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRFX_PRS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRFX_PRS_CONFIG_DEBUG_COLOR -+#define NRFX_PRS_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// -+ -+// NRFX_UARTE_ENABLED - nrfx_uarte - UARTE peripheral driver -+//========================================================== -+#ifndef NRFX_UARTE_ENABLED -+#define NRFX_UARTE_ENABLED 1 -+#endif -+// NRFX_UARTE0_ENABLED - Enable UARTE0 instance -+#ifndef NRFX_UARTE0_ENABLED -+#define NRFX_UARTE0_ENABLED 0 -+#endif -+ -+// NRFX_UARTE1_ENABLED - Enable UARTE1 instance -+#ifndef NRFX_UARTE1_ENABLED -+#define NRFX_UARTE1_ENABLED 0 -+#endif -+ -+// NRFX_UARTE_DEFAULT_CONFIG_HWFC - Hardware Flow Control -+ -+// <0=> Disabled -+// <1=> Enabled -+ -+#ifndef NRFX_UARTE_DEFAULT_CONFIG_HWFC -+#define NRFX_UARTE_DEFAULT_CONFIG_HWFC 0 -+#endif -+ -+// NRFX_UARTE_DEFAULT_CONFIG_PARITY - Parity -+ -+// <0=> Excluded -+// <14=> Included -+ -+#ifndef NRFX_UARTE_DEFAULT_CONFIG_PARITY -+#define NRFX_UARTE_DEFAULT_CONFIG_PARITY 0 -+#endif -+ -+// NRFX_UARTE_DEFAULT_CONFIG_BAUDRATE - Default Baudrate -+ -+// <323584=> 1200 baud -+// <643072=> 2400 baud -+// <1290240=> 4800 baud -+// <2576384=> 9600 baud -+// <3862528=> 14400 baud -+// <5152768=> 19200 baud -+// <7716864=> 28800 baud -+// <8388608=> 31250 baud -+// <10289152=> 38400 baud -+// <15007744=> 56000 baud -+// <15400960=> 57600 baud -+// <20615168=> 76800 baud -+// <30801920=> 115200 baud -+// <61865984=> 230400 baud -+// <67108864=> 250000 baud -+// <121634816=> 460800 baud -+// <251658240=> 921600 baud -+// <268435456=> 1000000 baud -+ -+#ifndef NRFX_UARTE_DEFAULT_CONFIG_BAUDRATE -+#define NRFX_UARTE_DEFAULT_CONFIG_BAUDRATE 30801920 -+#endif -+ -+// NRFX_UARTE_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority -+ -+// <0=> 0 (highest) -+// <1=> 1 -+// <2=> 2 -+// <3=> 3 -+// <4=> 4 -+// <5=> 5 -+// <6=> 6 -+// <7=> 7 -+ -+#ifndef NRFX_UARTE_DEFAULT_CONFIG_IRQ_PRIORITY -+#define NRFX_UARTE_DEFAULT_CONFIG_IRQ_PRIORITY 7 -+#endif -+ -+// NRFX_UARTE_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRFX_UARTE_CONFIG_LOG_ENABLED -+#define NRFX_UARTE_CONFIG_LOG_ENABLED 0 -+#endif -+// NRFX_UARTE_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRFX_UARTE_CONFIG_LOG_LEVEL -+#define NRFX_UARTE_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRFX_UARTE_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRFX_UARTE_CONFIG_INFO_COLOR -+#define NRFX_UARTE_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRFX_UARTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRFX_UARTE_CONFIG_DEBUG_COLOR -+#define NRFX_UARTE_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// -+ -+// NRFX_UART_ENABLED - nrfx_uart - UART peripheral driver -+//========================================================== -+#ifndef NRFX_UART_ENABLED -+#define NRFX_UART_ENABLED 1 -+#endif -+// NRFX_UART0_ENABLED - Enable UART0 instance -+#ifndef NRFX_UART0_ENABLED -+#define NRFX_UART0_ENABLED 0 -+#endif -+ -+// NRFX_UART_DEFAULT_CONFIG_HWFC - Hardware Flow Control -+ -+// <0=> Disabled -+// <1=> Enabled -+ -+#ifndef NRFX_UART_DEFAULT_CONFIG_HWFC -+#define NRFX_UART_DEFAULT_CONFIG_HWFC 0 -+#endif -+ -+// NRFX_UART_DEFAULT_CONFIG_PARITY - Parity -+ -+// <0=> Excluded -+// <14=> Included -+ -+#ifndef NRFX_UART_DEFAULT_CONFIG_PARITY -+#define NRFX_UART_DEFAULT_CONFIG_PARITY 0 -+#endif -+ -+// NRFX_UART_DEFAULT_CONFIG_BAUDRATE - Default Baudrate -+ -+// <323584=> 1200 baud -+// <643072=> 2400 baud -+// <1290240=> 4800 baud -+// <2576384=> 9600 baud -+// <3866624=> 14400 baud -+// <5152768=> 19200 baud -+// <7729152=> 28800 baud -+// <8388608=> 31250 baud -+// <10309632=> 38400 baud -+// <15007744=> 56000 baud -+// <15462400=> 57600 baud -+// <20615168=> 76800 baud -+// <30924800=> 115200 baud -+// <61845504=> 230400 baud -+// <67108864=> 250000 baud -+// <123695104=> 460800 baud -+// <247386112=> 921600 baud -+// <268435456=> 1000000 baud -+ -+#ifndef NRFX_UART_DEFAULT_CONFIG_BAUDRATE -+#define NRFX_UART_DEFAULT_CONFIG_BAUDRATE 30924800 -+#endif -+ -+// NRFX_UART_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority -+ -+// <0=> 0 (highest) -+// <1=> 1 -+// <2=> 2 -+// <3=> 3 -+// <4=> 4 -+// <5=> 5 -+// <6=> 6 -+// <7=> 7 -+ -+#ifndef NRFX_UART_DEFAULT_CONFIG_IRQ_PRIORITY -+#define NRFX_UART_DEFAULT_CONFIG_IRQ_PRIORITY 7 -+#endif -+ -+// NRFX_UART_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRFX_UART_CONFIG_LOG_ENABLED -+#define NRFX_UART_CONFIG_LOG_ENABLED 0 -+#endif -+// NRFX_UART_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRFX_UART_CONFIG_LOG_LEVEL -+#define NRFX_UART_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRFX_UART_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRFX_UART_CONFIG_INFO_COLOR -+#define NRFX_UART_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRFX_UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRFX_UART_CONFIG_DEBUG_COLOR -+#define NRFX_UART_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// -+ -+// POWER_ENABLED - nrf_drv_power - POWER peripheral driver - legacy layer -+//========================================================== -+#ifndef POWER_ENABLED -+#define POWER_ENABLED 1 -+#endif -+// POWER_CONFIG_IRQ_PRIORITY - Interrupt priority -+ -+ -+// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -+// <0=> 0 (highest) -+// <1=> 1 -+// <2=> 2 -+// <3=> 3 -+// <4=> 4 -+// <5=> 5 -+// <6=> 6 -+// <7=> 7 -+ -+#ifndef POWER_CONFIG_IRQ_PRIORITY -+#define POWER_CONFIG_IRQ_PRIORITY 7 -+#endif -+ -+// POWER_CONFIG_DEFAULT_DCDCEN - The default configuration of main DCDC regulator -+ -+ -+// This settings means only that components for DCDC regulator are installed and it can be enabled. -+ -+#ifndef POWER_CONFIG_DEFAULT_DCDCEN -+#define POWER_CONFIG_DEFAULT_DCDCEN 0 -+#endif -+ -+// POWER_CONFIG_DEFAULT_DCDCENHV - The default configuration of High Voltage DCDC regulator -+ -+ -+// This settings means only that components for DCDC regulator are installed and it can be enabled. -+ -+#ifndef POWER_CONFIG_DEFAULT_DCDCENHV -+#define POWER_CONFIG_DEFAULT_DCDCENHV 0 -+#endif -+ -+// -+ -+// UART_ENABLED - nrf_drv_uart - UART/UARTE peripheral driver - legacy layer -+//========================================================== -+#ifndef UART_ENABLED -+#define UART_ENABLED 1 -+#endif -+// UART_DEFAULT_CONFIG_HWFC - Hardware Flow Control -+ -+// <0=> Disabled -+// <1=> Enabled -+ -+#ifndef UART_DEFAULT_CONFIG_HWFC -+#define UART_DEFAULT_CONFIG_HWFC 0 -+#endif -+ -+// UART_DEFAULT_CONFIG_PARITY - Parity -+ -+// <0=> Excluded -+// <14=> Included -+ -+#ifndef UART_DEFAULT_CONFIG_PARITY -+#define UART_DEFAULT_CONFIG_PARITY 0 -+#endif -+ -+// UART_DEFAULT_CONFIG_BAUDRATE - Default Baudrate -+ -+// <323584=> 1200 baud -+// <643072=> 2400 baud -+// <1290240=> 4800 baud -+// <2576384=> 9600 baud -+// <3862528=> 14400 baud -+// <5152768=> 19200 baud -+// <7716864=> 28800 baud -+// <10289152=> 38400 baud -+// <15400960=> 57600 baud -+// <20615168=> 76800 baud -+// <30801920=> 115200 baud -+// <61865984=> 230400 baud -+// <67108864=> 250000 baud -+// <121634816=> 460800 baud -+// <251658240=> 921600 baud -+// <268435456=> 1000000 baud -+ -+#ifndef UART_DEFAULT_CONFIG_BAUDRATE -+#define UART_DEFAULT_CONFIG_BAUDRATE 30801920 -+#endif -+ -+// UART_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority -+ -+ -+// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -+// <0=> 0 (highest) -+// <1=> 1 -+// <2=> 2 -+// <3=> 3 -+// <4=> 4 -+// <5=> 5 -+// <6=> 6 -+// <7=> 7 -+ -+#ifndef UART_DEFAULT_CONFIG_IRQ_PRIORITY -+#define UART_DEFAULT_CONFIG_IRQ_PRIORITY 7 -+#endif -+ -+// UART_EASY_DMA_SUPPORT - Driver supporting EasyDMA -+ -+ -+#ifndef UART_EASY_DMA_SUPPORT -+#define UART_EASY_DMA_SUPPORT 1 -+#endif -+ -+// UART_LEGACY_SUPPORT - Driver supporting Legacy mode -+ -+ -+#ifndef UART_LEGACY_SUPPORT -+#define UART_LEGACY_SUPPORT 1 -+#endif -+ -+// UART0_ENABLED - Enable UART0 instance -+//========================================================== -+#ifndef UART0_ENABLED -+#define UART0_ENABLED 1 -+#endif -+// UART0_CONFIG_USE_EASY_DMA - Default setting for using EasyDMA -+ -+ -+#ifndef UART0_CONFIG_USE_EASY_DMA -+#define UART0_CONFIG_USE_EASY_DMA 1 -+#endif -+ -+// -+ -+// UART1_ENABLED - Enable UART1 instance -+//========================================================== -+#ifndef UART1_ENABLED -+#define UART1_ENABLED 0 -+#endif -+// -+ -+// -+ -+// USBD_ENABLED - nrf_drv_usbd - USB driver -+//========================================================== -+#ifndef USBD_ENABLED -+#define USBD_ENABLED 1 -+#endif -+// USBD_CONFIG_IRQ_PRIORITY - Interrupt priority -+ -+ -+// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -+// <0=> 0 (highest) -+// <1=> 1 -+// <2=> 2 -+// <3=> 3 -+// <4=> 4 -+// <5=> 5 -+// <6=> 6 -+// <7=> 7 -+ -+#ifndef USBD_CONFIG_IRQ_PRIORITY -+#define USBD_CONFIG_IRQ_PRIORITY 7 -+#endif -+ -+// USBD_CONFIG_DMASCHEDULER_MODE - USBD SMA scheduler working scheme -+ -+// <0=> Prioritized access -+// <1=> Round Robin -+ -+#ifndef USBD_CONFIG_DMASCHEDULER_MODE -+#define USBD_CONFIG_DMASCHEDULER_MODE 0 -+#endif -+ -+// -+ -+// -+//========================================================== -+ -+// nRF_Libraries -+ -+//========================================================== -+// APP_SCHEDULER_ENABLED - app_scheduler - Events scheduler -+//========================================================== -+#ifndef APP_SCHEDULER_ENABLED -+#define APP_SCHEDULER_ENABLED 1 -+#endif -+// APP_SCHEDULER_WITH_PAUSE - Enabling pause feature -+ -+ -+#ifndef APP_SCHEDULER_WITH_PAUSE -+#define APP_SCHEDULER_WITH_PAUSE 1 -+#endif -+ -+// APP_SCHEDULER_WITH_PROFILER - Enabling scheduler profiling -+ -+ -+#ifndef APP_SCHEDULER_WITH_PROFILER -+#define APP_SCHEDULER_WITH_PROFILER 1 -+#endif -+ -+// -+ -+// APP_TIMER_ENABLED - app_timer - Application timer functionality -+//========================================================== -+#ifndef APP_TIMER_ENABLED -+#define APP_TIMER_ENABLED 1 -+#endif -+// APP_TIMER_CONFIG_RTC_FREQUENCY - Configure RTC prescaler. -+ -+// <0=> 32768 Hz -+// <1=> 16384 Hz -+// <3=> 8192 Hz -+// <7=> 4096 Hz -+// <15=> 2048 Hz -+// <31=> 1024 Hz -+ -+#ifndef APP_TIMER_CONFIG_RTC_FREQUENCY -+#define APP_TIMER_CONFIG_RTC_FREQUENCY 0 -+#endif -+ -+// APP_TIMER_CONFIG_IRQ_PRIORITY - Interrupt priority -+ -+ -+// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -+// <0=> 0 (highest) -+// <1=> 1 -+// <2=> 2 -+// <3=> 3 -+// <4=> 4 -+// <5=> 5 -+// <6=> 6 -+// <7=> 7 -+ -+#ifndef APP_TIMER_CONFIG_IRQ_PRIORITY -+#define APP_TIMER_CONFIG_IRQ_PRIORITY 7 -+#endif -+ -+// APP_TIMER_CONFIG_OP_QUEUE_SIZE - Capacity of timer requests queue. -+// Size of the queue depends on how many timers are used -+// in the system, how often timers are started and overall -+// system latency. If queue size is too small app_timer calls -+// will fail. -+ -+#ifndef APP_TIMER_CONFIG_OP_QUEUE_SIZE -+#define APP_TIMER_CONFIG_OP_QUEUE_SIZE 10 -+#endif -+ -+// APP_TIMER_CONFIG_USE_SCHEDULER - Enable scheduling app_timer events to app_scheduler -+ -+ -+#ifndef APP_TIMER_CONFIG_USE_SCHEDULER -+#define APP_TIMER_CONFIG_USE_SCHEDULER 0 -+#endif -+ -+// APP_TIMER_KEEPS_RTC_ACTIVE - Enable RTC always on -+ -+ -+// If option is enabled RTC is kept running even if there is no active timers. -+// This option can be used when app_timer is used for timestamping. -+ -+#ifndef APP_TIMER_KEEPS_RTC_ACTIVE -+#define APP_TIMER_KEEPS_RTC_ACTIVE 0 -+#endif -+ -+// App Timer Legacy configuration - Legacy configuration. -+ -+//========================================================== -+// APP_TIMER_WITH_PROFILER - Enable app_timer profiling -+ -+ -+#ifndef APP_TIMER_WITH_PROFILER -+#define APP_TIMER_WITH_PROFILER 0 -+#endif -+ -+// APP_TIMER_CONFIG_SWI_NUMBER - Configure SWI instance used. -+ -+ -+#ifndef APP_TIMER_CONFIG_SWI_NUMBER -+#define APP_TIMER_CONFIG_SWI_NUMBER 0 -+#endif -+ -+// -+//========================================================== -+ -+// -+ -+// APP_USBD_CDC_ACM_ENABLED - app_usbd_cdc_acm - USB CDC ACM class -+ -+ -+#ifndef APP_USBD_CDC_ACM_ENABLED -+#define APP_USBD_CDC_ACM_ENABLED 1 -+#endif -+ -+// APP_USBD_ENABLED - app_usbd - USB Device library -+//========================================================== -+#ifndef APP_USBD_ENABLED -+#define APP_USBD_ENABLED 1 -+#endif -+// APP_USBD_VID - Vendor ID -+ -+// Vendor ID ordered from USB IF: http://www.usb.org/developers/vendor/ -+#ifndef APP_USBD_VID -+#define APP_USBD_VID 0x1915 -+#endif -+ -+// APP_USBD_PID - Product ID -+ -+// Selected Product ID -+#ifndef APP_USBD_PID -+#define APP_USBD_PID 0xC00A -+#endif -+ -+// APP_USBD_DEVICE_VER_MAJOR - Device version, major part <0-99> -+ -+ -+// Device version, will be converted automatically to BCD notation. Use just decimal values. -+ -+#ifndef APP_USBD_DEVICE_VER_MAJOR -+#define APP_USBD_DEVICE_VER_MAJOR 1 -+#endif -+ -+// APP_USBD_DEVICE_VER_MINOR - Device version, minor part <0-99> -+ -+ -+// Device version, will be converted automatically to BCD notation. Use just decimal values. -+ -+#ifndef APP_USBD_DEVICE_VER_MINOR -+#define APP_USBD_DEVICE_VER_MINOR 0 -+#endif -+ -+// APP_USBD_CONFIG_SELF_POWERED - Self powered -+ -+ -+#ifndef APP_USBD_CONFIG_SELF_POWERED -+#define APP_USBD_CONFIG_SELF_POWERED 1 -+#endif -+ -+// APP_USBD_CONFIG_MAX_POWER - MaxPower field in configuration descriptor in milliamps <0-500> -+ -+ -+#ifndef APP_USBD_CONFIG_MAX_POWER -+#define APP_USBD_CONFIG_MAX_POWER 500 -+#endif -+ -+// APP_USBD_CONFIG_POWER_EVENTS_PROCESS - Process power events -+ -+ -+// Enable processing power events in USB event handler. -+ -+#ifndef APP_USBD_CONFIG_POWER_EVENTS_PROCESS -+#define APP_USBD_CONFIG_POWER_EVENTS_PROCESS 1 -+#endif -+ -+// APP_USBD_CONFIG_EVENT_QUEUE_ENABLE - Enable event queue -+ -+// This is the default configuration when all the events are placed into internal queue. -+// Disable it when external queue is used like app_scheduler or if you wish to process all events inside interrupts. -+// Processing all events from the interrupt level adds requirement not to call any functions that modifies the USBD library state from the context higher than USB interrupt context. -+// Functions that modify USBD state are functions for sleep, wakeup, start, stop, enable and disable. -+//========================================================== -+#ifndef APP_USBD_CONFIG_EVENT_QUEUE_ENABLE -+#define APP_USBD_CONFIG_EVENT_QUEUE_ENABLE 1 -+#endif -+// APP_USBD_CONFIG_EVENT_QUEUE_SIZE - The size of event queue <16-64> -+ -+ -+// The size of the queue for the events that would be processed in the main loop. -+ -+#ifndef APP_USBD_CONFIG_EVENT_QUEUE_SIZE -+#define APP_USBD_CONFIG_EVENT_QUEUE_SIZE 32 -+#endif -+ -+// APP_USBD_CONFIG_SOF_HANDLING_MODE - Change SOF events handling mode. -+ -+ -+// Normal queue - SOF events are pushed normally into event queue. -+// Compress queue - SOF events are counted and binded with other events or executed when queue is empty. -+// This prevents queue from filling with SOF events. -+// Interrupt - SOF events are processed in interrupt. -+// <0=> Normal queue -+// <1=> Compress queue -+// <2=> Interrupt -+ -+#ifndef APP_USBD_CONFIG_SOF_HANDLING_MODE -+#define APP_USBD_CONFIG_SOF_HANDLING_MODE 1 -+#endif -+ -+// -+ -+// APP_USBD_CONFIG_SOF_TIMESTAMP_PROVIDE - Provide a function that generates timestamps for logs based on the current SOF -+ -+ -+// The function app_usbd_sof_timestamp_get will be implemented if the logger is enabled. -+// Use it when initializing the logger. -+// SOF processing will be always enabled when this configuration parameter is active. -+// Notice that this option is configured outside of APP_USBD_CONFIG_LOG_ENABLED. -+// This means that it will work even if the logging in this very module is disabled. -+ -+#ifndef APP_USBD_CONFIG_SOF_TIMESTAMP_PROVIDE -+#define APP_USBD_CONFIG_SOF_TIMESTAMP_PROVIDE 0 -+#endif -+ -+// APP_USBD_CONFIG_LOG_ENABLED - Enable logging in the module -+//========================================================== -+#ifndef APP_USBD_CONFIG_LOG_ENABLED -+#define APP_USBD_CONFIG_LOG_ENABLED 0 -+#endif -+// APP_USBD_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef APP_USBD_CONFIG_LOG_LEVEL -+#define APP_USBD_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// APP_USBD_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef APP_USBD_CONFIG_INFO_COLOR -+#define APP_USBD_CONFIG_INFO_COLOR 0 -+#endif -+ -+// APP_USBD_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef APP_USBD_CONFIG_DEBUG_COLOR -+#define APP_USBD_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// -+ -+// APP_USBD_NRF_DFU_TRIGGER_ENABLED - app_usbd_nrf_dfu_trigger - USBD Nordic DFU Trigger class -+ -+ -+#ifndef APP_USBD_NRF_DFU_TRIGGER_ENABLED -+#define APP_USBD_NRF_DFU_TRIGGER_ENABLED 1 -+#endif -+ -+// CRC16_ENABLED - crc16 - CRC16 calculation routines -+ -+ -+#ifndef CRC16_ENABLED -+#define CRC16_ENABLED 1 -+#endif -+ -+// NRF_BALLOC_ENABLED - nrf_balloc - Block allocator module -+//========================================================== -+#ifndef NRF_BALLOC_ENABLED -+#define NRF_BALLOC_ENABLED 1 -+#endif -+// NRF_BALLOC_CONFIG_DEBUG_ENABLED - Enables debug mode in the module. -+//========================================================== -+#ifndef NRF_BALLOC_CONFIG_DEBUG_ENABLED -+#define NRF_BALLOC_CONFIG_DEBUG_ENABLED 0 -+#endif -+// NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS - Number of words used as head guard. <0-255> -+ -+ -+#ifndef NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS -+#define NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS 1 -+#endif -+ -+// NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS - Number of words used as tail guard. <0-255> -+ -+ -+#ifndef NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS -+#define NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS 1 -+#endif -+ -+// NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED - Enables basic checks in this module. -+ -+ -+#ifndef NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED -+#define NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED 0 -+#endif -+ -+// NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED - Enables double memory free check in this module. -+ -+ -+#ifndef NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED -+#define NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED 0 -+#endif -+ -+// NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED - Enables free memory corruption check in this module. -+ -+ -+#ifndef NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED -+#define NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED 0 -+#endif -+ -+// NRF_BALLOC_CLI_CMDS - Enable CLI commands specific to the module -+ -+ -+#ifndef NRF_BALLOC_CLI_CMDS -+#define NRF_BALLOC_CLI_CMDS 0 -+#endif -+ -+// -+ -+// -+ -+// NRF_FPRINTF_ENABLED - nrf_fprintf - fprintf function. -+ -+ -+#ifndef NRF_FPRINTF_ENABLED -+#define NRF_FPRINTF_ENABLED 1 -+#endif -+ -+// NRF_MEMOBJ_ENABLED - nrf_memobj - Linked memory allocator module -+ -+ -+#ifndef NRF_MEMOBJ_ENABLED -+#define NRF_MEMOBJ_ENABLED 1 -+#endif -+ -+// NRF_QUEUE_ENABLED - nrf_queue - Queue module -+//========================================================== -+#ifndef NRF_QUEUE_ENABLED -+#define NRF_QUEUE_ENABLED 1 -+#endif -+// NRF_QUEUE_CLI_CMDS - Enable CLI commands specific to the module -+ -+ -+#ifndef NRF_QUEUE_CLI_CMDS -+#define NRF_QUEUE_CLI_CMDS 0 -+#endif -+ -+// -+ -+// NRF_SECTION_ITER_ENABLED - nrf_section_iter - Section iterator -+ -+ -+#ifndef NRF_SECTION_ITER_ENABLED -+#define NRF_SECTION_ITER_ENABLED 1 -+#endif -+ -+// NRF_STRERROR_ENABLED - nrf_strerror - Library for converting error code to string. -+ -+ -+#ifndef NRF_STRERROR_ENABLED -+#define NRF_STRERROR_ENABLED 1 -+#endif -+ -+// -+//========================================================== -+ -+// nRF_Log -+ -+//========================================================== -+// NRF_LOG_BACKEND_RTT_ENABLED - nrf_log_backend_rtt - Log RTT backend -+//========================================================== -+#ifndef NRF_LOG_BACKEND_RTT_ENABLED -+#define NRF_LOG_BACKEND_RTT_ENABLED 0 -+#endif -+// NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE - Size of buffer for partially processed strings. -+// Size of the buffer is a trade-off between RAM usage and processing. -+// if buffer is smaller then strings will often be fragmented. -+// It is recommended to use size which will fit typical log and only the -+// longer one will be fragmented. -+ -+#ifndef NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE -+#define NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE 64 -+#endif -+ -+// NRF_LOG_BACKEND_RTT_TX_RETRY_DELAY_MS - Period before retrying writing to RTT -+#ifndef NRF_LOG_BACKEND_RTT_TX_RETRY_DELAY_MS -+#define NRF_LOG_BACKEND_RTT_TX_RETRY_DELAY_MS 1 -+#endif -+ -+// NRF_LOG_BACKEND_RTT_TX_RETRY_CNT - Writing to RTT retries. -+// If RTT fails to accept any new data after retries -+// module assumes that host is not active and on next -+// request it will perform only one write attempt. -+// On successful writing, module assumes that host is active -+// and scheme with retry is applied again. -+ -+#ifndef NRF_LOG_BACKEND_RTT_TX_RETRY_CNT -+#define NRF_LOG_BACKEND_RTT_TX_RETRY_CNT 3 -+#endif -+ -+// -+ -+// NRF_LOG_STR_FORMATTER_TIMESTAMP_FORMAT_ENABLED - nrf_log_str_formatter - Log string formatter -+ -+ -+#ifndef NRF_LOG_STR_FORMATTER_TIMESTAMP_FORMAT_ENABLED -+#define NRF_LOG_STR_FORMATTER_TIMESTAMP_FORMAT_ENABLED 1 -+#endif -+ -+// nrf_log - Logger -+ -+//========================================================== -+// NRF_LOG_ENABLED - Logging module for nRF5 SDK -+//========================================================== -+#ifndef NRF_LOG_ENABLED -+#define NRF_LOG_ENABLED 0 -+#endif -+// NRF_LOG_USES_COLORS - If enabled then ANSI escape code for colors is prefixed to every string -+//========================================================== -+#ifndef NRF_LOG_USES_COLORS -+#define NRF_LOG_USES_COLORS 0 -+#endif -+// NRF_LOG_COLOR_DEFAULT - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_LOG_COLOR_DEFAULT -+#define NRF_LOG_COLOR_DEFAULT 0 -+#endif -+ -+// NRF_LOG_ERROR_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_LOG_ERROR_COLOR -+#define NRF_LOG_ERROR_COLOR 2 -+#endif -+ -+// NRF_LOG_WARNING_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_LOG_WARNING_COLOR -+#define NRF_LOG_WARNING_COLOR 4 -+#endif -+ -+// -+ -+// NRF_LOG_DEFAULT_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_LOG_DEFAULT_LEVEL -+#define NRF_LOG_DEFAULT_LEVEL 3 -+#endif -+ -+// NRF_LOG_DEFERRED - Enable deffered logger. -+ -+ -+// Log data is buffered and can be processed in idle. -+ -+#ifndef NRF_LOG_DEFERRED -+#define NRF_LOG_DEFERRED 1 -+#endif -+ -+// NRF_LOG_BUFSIZE - Size of the buffer for storing logs (in bytes). -+ -+ -+// Must be power of 2 and multiple of 4. -+// If NRF_LOG_DEFERRED = 0 then buffer size can be reduced to minimum. -+// <128=> 128 -+// <256=> 256 -+// <512=> 512 -+// <1024=> 1024 -+// <2048=> 2048 -+// <4096=> 4096 -+// <8192=> 8192 -+// <16384=> 16384 -+ -+#ifndef NRF_LOG_BUFSIZE -+#define NRF_LOG_BUFSIZE 1024 -+#endif -+ -+// NRF_LOG_ALLOW_OVERFLOW - Configures behavior when circular buffer is full. -+ -+ -+// If set then oldest logs are overwritten. Otherwise a -+// marker is injected informing about overflow. -+ -+#ifndef NRF_LOG_ALLOW_OVERFLOW -+#define NRF_LOG_ALLOW_OVERFLOW 1 -+#endif -+ -+// NRF_LOG_USES_TIMESTAMP - Enable timestamping -+ -+// Function for getting the timestamp is provided by the user -+//========================================================== -+#ifndef NRF_LOG_USES_TIMESTAMP -+#define NRF_LOG_USES_TIMESTAMP 0 -+#endif -+// NRF_LOG_TIMESTAMP_DEFAULT_FREQUENCY - Default frequency of the timestamp (in Hz) -+#ifndef NRF_LOG_TIMESTAMP_DEFAULT_FREQUENCY -+#define NRF_LOG_TIMESTAMP_DEFAULT_FREQUENCY 32768 -+#endif -+ -+// -+ -+// NRF_LOG_FILTERS_ENABLED - Enable dynamic filtering of logs. -+ -+ -+#ifndef NRF_LOG_FILTERS_ENABLED -+#define NRF_LOG_FILTERS_ENABLED 0 -+#endif -+ -+// NRF_LOG_CLI_CMDS - Enable CLI commands for the module. -+ -+ -+#ifndef NRF_LOG_CLI_CMDS -+#define NRF_LOG_CLI_CMDS 0 -+#endif -+ -+// Log message pool - Configuration of log message pool -+ -+//========================================================== -+// NRF_LOG_MSGPOOL_ELEMENT_SIZE - Size of a single element in the pool of memory objects. -+// If a small value is set, then performance of logs processing -+// is degraded because data is fragmented. Bigger value impacts -+// RAM memory utilization. The size is set to fit a message with -+// a timestamp and up to 2 arguments in a single memory object. -+ -+#ifndef NRF_LOG_MSGPOOL_ELEMENT_SIZE -+#define NRF_LOG_MSGPOOL_ELEMENT_SIZE 20 -+#endif -+ -+// NRF_LOG_MSGPOOL_ELEMENT_COUNT - Number of elements in the pool of memory objects -+// If a small value is set, then it may lead to a deadlock -+// in certain cases if backend has high latency and holds -+// multiple messages for long time. Bigger value impacts -+// RAM memory usage. -+ -+#ifndef NRF_LOG_MSGPOOL_ELEMENT_COUNT -+#define NRF_LOG_MSGPOOL_ELEMENT_COUNT 8 -+#endif -+ -+// -+//========================================================== -+ -+// -+ -+// nrf_log module configuration -+ -+//========================================================== -+// nrf_log in nRF_Core -+ -+//========================================================== -+// NRF_MPU_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_MPU_CONFIG_LOG_ENABLED -+#define NRF_MPU_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_MPU_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_MPU_CONFIG_LOG_LEVEL -+#define NRF_MPU_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_MPU_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_MPU_CONFIG_INFO_COLOR -+#define NRF_MPU_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_MPU_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_MPU_CONFIG_DEBUG_COLOR -+#define NRF_MPU_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_STACK_GUARD_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_STACK_GUARD_CONFIG_LOG_ENABLED -+#define NRF_STACK_GUARD_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_STACK_GUARD_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_STACK_GUARD_CONFIG_LOG_LEVEL -+#define NRF_STACK_GUARD_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_STACK_GUARD_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_STACK_GUARD_CONFIG_INFO_COLOR -+#define NRF_STACK_GUARD_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_STACK_GUARD_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_STACK_GUARD_CONFIG_DEBUG_COLOR -+#define NRF_STACK_GUARD_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// TASK_MANAGER_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef TASK_MANAGER_CONFIG_LOG_ENABLED -+#define TASK_MANAGER_CONFIG_LOG_ENABLED 0 -+#endif -+// TASK_MANAGER_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef TASK_MANAGER_CONFIG_LOG_LEVEL -+#define TASK_MANAGER_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// TASK_MANAGER_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef TASK_MANAGER_CONFIG_INFO_COLOR -+#define TASK_MANAGER_CONFIG_INFO_COLOR 0 -+#endif -+ -+// TASK_MANAGER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef TASK_MANAGER_CONFIG_DEBUG_COLOR -+#define TASK_MANAGER_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// -+//========================================================== -+ -+// nrf_log in nRF_Drivers -+ -+//========================================================== -+// CLOCK_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef CLOCK_CONFIG_LOG_ENABLED -+#define CLOCK_CONFIG_LOG_ENABLED 0 -+#endif -+// CLOCK_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef CLOCK_CONFIG_LOG_LEVEL -+#define CLOCK_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// CLOCK_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef CLOCK_CONFIG_INFO_COLOR -+#define CLOCK_CONFIG_INFO_COLOR 0 -+#endif -+ -+// CLOCK_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef CLOCK_CONFIG_DEBUG_COLOR -+#define CLOCK_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// COMP_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef COMP_CONFIG_LOG_ENABLED -+#define COMP_CONFIG_LOG_ENABLED 0 -+#endif -+// COMP_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef COMP_CONFIG_LOG_LEVEL -+#define COMP_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// COMP_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef COMP_CONFIG_INFO_COLOR -+#define COMP_CONFIG_INFO_COLOR 0 -+#endif -+ -+// COMP_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef COMP_CONFIG_DEBUG_COLOR -+#define COMP_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// GPIOTE_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef GPIOTE_CONFIG_LOG_ENABLED -+#define GPIOTE_CONFIG_LOG_ENABLED 0 -+#endif -+// GPIOTE_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef GPIOTE_CONFIG_LOG_LEVEL -+#define GPIOTE_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// GPIOTE_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef GPIOTE_CONFIG_INFO_COLOR -+#define GPIOTE_CONFIG_INFO_COLOR 0 -+#endif -+ -+// GPIOTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef GPIOTE_CONFIG_DEBUG_COLOR -+#define GPIOTE_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// LPCOMP_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef LPCOMP_CONFIG_LOG_ENABLED -+#define LPCOMP_CONFIG_LOG_ENABLED 0 -+#endif -+// LPCOMP_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef LPCOMP_CONFIG_LOG_LEVEL -+#define LPCOMP_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// LPCOMP_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef LPCOMP_CONFIG_INFO_COLOR -+#define LPCOMP_CONFIG_INFO_COLOR 0 -+#endif -+ -+// LPCOMP_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef LPCOMP_CONFIG_DEBUG_COLOR -+#define LPCOMP_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// PDM_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef PDM_CONFIG_LOG_ENABLED -+#define PDM_CONFIG_LOG_ENABLED 0 -+#endif -+// PDM_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef PDM_CONFIG_LOG_LEVEL -+#define PDM_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// PDM_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef PDM_CONFIG_INFO_COLOR -+#define PDM_CONFIG_INFO_COLOR 0 -+#endif -+ -+// PDM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef PDM_CONFIG_DEBUG_COLOR -+#define PDM_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// PPI_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef PPI_CONFIG_LOG_ENABLED -+#define PPI_CONFIG_LOG_ENABLED 0 -+#endif -+// PPI_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef PPI_CONFIG_LOG_LEVEL -+#define PPI_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// PPI_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef PPI_CONFIG_INFO_COLOR -+#define PPI_CONFIG_INFO_COLOR 0 -+#endif -+ -+// PPI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef PPI_CONFIG_DEBUG_COLOR -+#define PPI_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// PWM_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef PWM_CONFIG_LOG_ENABLED -+#define PWM_CONFIG_LOG_ENABLED 0 -+#endif -+// PWM_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef PWM_CONFIG_LOG_LEVEL -+#define PWM_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// PWM_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef PWM_CONFIG_INFO_COLOR -+#define PWM_CONFIG_INFO_COLOR 0 -+#endif -+ -+// PWM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef PWM_CONFIG_DEBUG_COLOR -+#define PWM_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// QDEC_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef QDEC_CONFIG_LOG_ENABLED -+#define QDEC_CONFIG_LOG_ENABLED 0 -+#endif -+// QDEC_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef QDEC_CONFIG_LOG_LEVEL -+#define QDEC_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// QDEC_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef QDEC_CONFIG_INFO_COLOR -+#define QDEC_CONFIG_INFO_COLOR 0 -+#endif -+ -+// QDEC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef QDEC_CONFIG_DEBUG_COLOR -+#define QDEC_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// RNG_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef RNG_CONFIG_LOG_ENABLED -+#define RNG_CONFIG_LOG_ENABLED 0 -+#endif -+// RNG_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef RNG_CONFIG_LOG_LEVEL -+#define RNG_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// RNG_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef RNG_CONFIG_INFO_COLOR -+#define RNG_CONFIG_INFO_COLOR 0 -+#endif -+ -+// RNG_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef RNG_CONFIG_DEBUG_COLOR -+#define RNG_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED - Enables logging of random numbers. -+ -+ -+#ifndef RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED -+#define RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED 0 -+#endif -+ -+// -+ -+// RTC_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef RTC_CONFIG_LOG_ENABLED -+#define RTC_CONFIG_LOG_ENABLED 0 -+#endif -+// RTC_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef RTC_CONFIG_LOG_LEVEL -+#define RTC_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// RTC_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef RTC_CONFIG_INFO_COLOR -+#define RTC_CONFIG_INFO_COLOR 0 -+#endif -+ -+// RTC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef RTC_CONFIG_DEBUG_COLOR -+#define RTC_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// SAADC_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef SAADC_CONFIG_LOG_ENABLED -+#define SAADC_CONFIG_LOG_ENABLED 0 -+#endif -+// SAADC_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef SAADC_CONFIG_LOG_LEVEL -+#define SAADC_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// SAADC_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef SAADC_CONFIG_INFO_COLOR -+#define SAADC_CONFIG_INFO_COLOR 0 -+#endif -+ -+// SAADC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef SAADC_CONFIG_DEBUG_COLOR -+#define SAADC_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// SPIS_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef SPIS_CONFIG_LOG_ENABLED -+#define SPIS_CONFIG_LOG_ENABLED 0 -+#endif -+// SPIS_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef SPIS_CONFIG_LOG_LEVEL -+#define SPIS_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// SPIS_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef SPIS_CONFIG_INFO_COLOR -+#define SPIS_CONFIG_INFO_COLOR 0 -+#endif -+ -+// SPIS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef SPIS_CONFIG_DEBUG_COLOR -+#define SPIS_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// SPI_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef SPI_CONFIG_LOG_ENABLED -+#define SPI_CONFIG_LOG_ENABLED 0 -+#endif -+// SPI_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef SPI_CONFIG_LOG_LEVEL -+#define SPI_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// SPI_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef SPI_CONFIG_INFO_COLOR -+#define SPI_CONFIG_INFO_COLOR 0 -+#endif -+ -+// SPI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef SPI_CONFIG_DEBUG_COLOR -+#define SPI_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// TIMER_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef TIMER_CONFIG_LOG_ENABLED -+#define TIMER_CONFIG_LOG_ENABLED 0 -+#endif -+// TIMER_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef TIMER_CONFIG_LOG_LEVEL -+#define TIMER_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// TIMER_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef TIMER_CONFIG_INFO_COLOR -+#define TIMER_CONFIG_INFO_COLOR 0 -+#endif -+ -+// TIMER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef TIMER_CONFIG_DEBUG_COLOR -+#define TIMER_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// TWIS_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef TWIS_CONFIG_LOG_ENABLED -+#define TWIS_CONFIG_LOG_ENABLED 0 -+#endif -+// TWIS_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef TWIS_CONFIG_LOG_LEVEL -+#define TWIS_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// TWIS_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef TWIS_CONFIG_INFO_COLOR -+#define TWIS_CONFIG_INFO_COLOR 0 -+#endif -+ -+// TWIS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef TWIS_CONFIG_DEBUG_COLOR -+#define TWIS_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// TWI_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef TWI_CONFIG_LOG_ENABLED -+#define TWI_CONFIG_LOG_ENABLED 0 -+#endif -+// TWI_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef TWI_CONFIG_LOG_LEVEL -+#define TWI_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// TWI_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef TWI_CONFIG_INFO_COLOR -+#define TWI_CONFIG_INFO_COLOR 0 -+#endif -+ -+// TWI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef TWI_CONFIG_DEBUG_COLOR -+#define TWI_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// UART_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef UART_CONFIG_LOG_ENABLED -+#define UART_CONFIG_LOG_ENABLED 0 -+#endif -+// UART_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef UART_CONFIG_LOG_LEVEL -+#define UART_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// UART_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef UART_CONFIG_INFO_COLOR -+#define UART_CONFIG_INFO_COLOR 0 -+#endif -+ -+// UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef UART_CONFIG_DEBUG_COLOR -+#define UART_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// USBD_CONFIG_LOG_ENABLED - Enable logging in the module -+//========================================================== -+#ifndef USBD_CONFIG_LOG_ENABLED -+#define USBD_CONFIG_LOG_ENABLED 0 -+#endif -+// USBD_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef USBD_CONFIG_LOG_LEVEL -+#define USBD_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// USBD_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef USBD_CONFIG_INFO_COLOR -+#define USBD_CONFIG_INFO_COLOR 0 -+#endif -+ -+// USBD_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef USBD_CONFIG_DEBUG_COLOR -+#define USBD_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// WDT_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef WDT_CONFIG_LOG_ENABLED -+#define WDT_CONFIG_LOG_ENABLED 0 -+#endif -+// WDT_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef WDT_CONFIG_LOG_LEVEL -+#define WDT_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// WDT_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef WDT_CONFIG_INFO_COLOR -+#define WDT_CONFIG_INFO_COLOR 0 -+#endif -+ -+// WDT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef WDT_CONFIG_DEBUG_COLOR -+#define WDT_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// -+//========================================================== -+ -+// nrf_log in nRF_Libraries -+ -+//========================================================== -+// APP_TIMER_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef APP_TIMER_CONFIG_LOG_ENABLED -+#define APP_TIMER_CONFIG_LOG_ENABLED 0 -+#endif -+// APP_TIMER_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef APP_TIMER_CONFIG_LOG_LEVEL -+#define APP_TIMER_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// APP_TIMER_CONFIG_INITIAL_LOG_LEVEL - Initial severity level if dynamic filtering is enabled. -+ -+ -+// If module generates a lot of logs, initial log level can -+// be decreased to prevent flooding. Severity level can be -+// increased on instance basis. -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef APP_TIMER_CONFIG_INITIAL_LOG_LEVEL -+#define APP_TIMER_CONFIG_INITIAL_LOG_LEVEL 3 -+#endif -+ -+// APP_TIMER_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef APP_TIMER_CONFIG_INFO_COLOR -+#define APP_TIMER_CONFIG_INFO_COLOR 0 -+#endif -+ -+// APP_TIMER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef APP_TIMER_CONFIG_DEBUG_COLOR -+#define APP_TIMER_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// APP_USBD_CDC_ACM_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef APP_USBD_CDC_ACM_CONFIG_LOG_ENABLED -+#define APP_USBD_CDC_ACM_CONFIG_LOG_ENABLED 0 -+#endif -+// APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL -+#define APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// APP_USBD_CDC_ACM_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef APP_USBD_CDC_ACM_CONFIG_INFO_COLOR -+#define APP_USBD_CDC_ACM_CONFIG_INFO_COLOR 0 -+#endif -+ -+// APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR -+#define APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// APP_USBD_DUMMY_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef APP_USBD_DUMMY_CONFIG_LOG_ENABLED -+#define APP_USBD_DUMMY_CONFIG_LOG_ENABLED 0 -+#endif -+// APP_USBD_DUMMY_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef APP_USBD_DUMMY_CONFIG_LOG_LEVEL -+#define APP_USBD_DUMMY_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// APP_USBD_DUMMY_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef APP_USBD_DUMMY_CONFIG_INFO_COLOR -+#define APP_USBD_DUMMY_CONFIG_INFO_COLOR 0 -+#endif -+ -+// APP_USBD_DUMMY_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef APP_USBD_DUMMY_CONFIG_DEBUG_COLOR -+#define APP_USBD_DUMMY_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// APP_USBD_MSC_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef APP_USBD_MSC_CONFIG_LOG_ENABLED -+#define APP_USBD_MSC_CONFIG_LOG_ENABLED 0 -+#endif -+// APP_USBD_MSC_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef APP_USBD_MSC_CONFIG_LOG_LEVEL -+#define APP_USBD_MSC_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// APP_USBD_MSC_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef APP_USBD_MSC_CONFIG_INFO_COLOR -+#define APP_USBD_MSC_CONFIG_INFO_COLOR 0 -+#endif -+ -+// APP_USBD_MSC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef APP_USBD_MSC_CONFIG_DEBUG_COLOR -+#define APP_USBD_MSC_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_ENABLED -+#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_ENABLED 0 -+#endif -+// APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_LEVEL -+#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// APP_USBD_NRF_DFU_TRIGGER_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_INFO_COLOR -+#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_INFO_COLOR 0 -+#endif -+ -+// APP_USBD_NRF_DFU_TRIGGER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_DEBUG_COLOR -+#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_ATFIFO_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_ATFIFO_CONFIG_LOG_ENABLED -+#define NRF_ATFIFO_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_ATFIFO_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_ATFIFO_CONFIG_LOG_LEVEL -+#define NRF_ATFIFO_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_ATFIFO_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_ATFIFO_CONFIG_LOG_INIT_FILTER_LEVEL -+#define NRF_ATFIFO_CONFIG_LOG_INIT_FILTER_LEVEL 3 -+#endif -+ -+// NRF_ATFIFO_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_ATFIFO_CONFIG_INFO_COLOR -+#define NRF_ATFIFO_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_ATFIFO_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_ATFIFO_CONFIG_DEBUG_COLOR -+#define NRF_ATFIFO_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_BALLOC_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_BALLOC_CONFIG_LOG_ENABLED -+#define NRF_BALLOC_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_BALLOC_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_BALLOC_CONFIG_LOG_LEVEL -+#define NRF_BALLOC_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_BALLOC_CONFIG_INITIAL_LOG_LEVEL - Initial severity level if dynamic filtering is enabled. -+ -+ -+// If module generates a lot of logs, initial log level can -+// be decreased to prevent flooding. Severity level can be -+// increased on instance basis. -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_BALLOC_CONFIG_INITIAL_LOG_LEVEL -+#define NRF_BALLOC_CONFIG_INITIAL_LOG_LEVEL 3 -+#endif -+ -+// NRF_BALLOC_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_BALLOC_CONFIG_INFO_COLOR -+#define NRF_BALLOC_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_BALLOC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_BALLOC_CONFIG_DEBUG_COLOR -+#define NRF_BALLOC_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_CLI_BLE_UART_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_CLI_BLE_UART_CONFIG_LOG_ENABLED -+#define NRF_CLI_BLE_UART_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL -+#define NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_CLI_BLE_UART_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_CLI_BLE_UART_CONFIG_INFO_COLOR -+#define NRF_CLI_BLE_UART_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR -+#define NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_CLI_LIBUARTE_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_CLI_LIBUARTE_CONFIG_LOG_ENABLED -+#define NRF_CLI_LIBUARTE_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_CLI_LIBUARTE_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_CLI_LIBUARTE_CONFIG_LOG_LEVEL -+#define NRF_CLI_LIBUARTE_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_CLI_LIBUARTE_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_CLI_LIBUARTE_CONFIG_INFO_COLOR -+#define NRF_CLI_LIBUARTE_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_CLI_LIBUARTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_CLI_LIBUARTE_CONFIG_DEBUG_COLOR -+#define NRF_CLI_LIBUARTE_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_CLI_UART_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_CLI_UART_CONFIG_LOG_ENABLED -+#define NRF_CLI_UART_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_CLI_UART_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_CLI_UART_CONFIG_LOG_LEVEL -+#define NRF_CLI_UART_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_CLI_UART_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_CLI_UART_CONFIG_INFO_COLOR -+#define NRF_CLI_UART_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_CLI_UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_CLI_UART_CONFIG_DEBUG_COLOR -+#define NRF_CLI_UART_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_LIBUARTE_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_LIBUARTE_CONFIG_LOG_ENABLED -+#define NRF_LIBUARTE_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_LIBUARTE_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_LIBUARTE_CONFIG_LOG_LEVEL -+#define NRF_LIBUARTE_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_LIBUARTE_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_LIBUARTE_CONFIG_INFO_COLOR -+#define NRF_LIBUARTE_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_LIBUARTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_LIBUARTE_CONFIG_DEBUG_COLOR -+#define NRF_LIBUARTE_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_MEMOBJ_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_MEMOBJ_CONFIG_LOG_ENABLED -+#define NRF_MEMOBJ_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_MEMOBJ_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_MEMOBJ_CONFIG_LOG_LEVEL -+#define NRF_MEMOBJ_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_MEMOBJ_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_MEMOBJ_CONFIG_INFO_COLOR -+#define NRF_MEMOBJ_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_MEMOBJ_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_MEMOBJ_CONFIG_DEBUG_COLOR -+#define NRF_MEMOBJ_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_PWR_MGMT_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_PWR_MGMT_CONFIG_LOG_ENABLED -+#define NRF_PWR_MGMT_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_PWR_MGMT_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_PWR_MGMT_CONFIG_LOG_LEVEL -+#define NRF_PWR_MGMT_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_PWR_MGMT_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_PWR_MGMT_CONFIG_INFO_COLOR -+#define NRF_PWR_MGMT_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_PWR_MGMT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_PWR_MGMT_CONFIG_DEBUG_COLOR -+#define NRF_PWR_MGMT_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_QUEUE_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_QUEUE_CONFIG_LOG_ENABLED -+#define NRF_QUEUE_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_QUEUE_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_QUEUE_CONFIG_LOG_LEVEL -+#define NRF_QUEUE_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_QUEUE_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_QUEUE_CONFIG_LOG_INIT_FILTER_LEVEL -+#define NRF_QUEUE_CONFIG_LOG_INIT_FILTER_LEVEL 3 -+#endif -+ -+// NRF_QUEUE_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_QUEUE_CONFIG_INFO_COLOR -+#define NRF_QUEUE_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_QUEUE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_QUEUE_CONFIG_DEBUG_COLOR -+#define NRF_QUEUE_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_SDH_ANT_LOG_ENABLED - Enable logging in SoftDevice handler (ANT) module. -+//========================================================== -+#ifndef NRF_SDH_ANT_LOG_ENABLED -+#define NRF_SDH_ANT_LOG_ENABLED 0 -+#endif -+// NRF_SDH_ANT_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_SDH_ANT_LOG_LEVEL -+#define NRF_SDH_ANT_LOG_LEVEL 3 -+#endif -+ -+// NRF_SDH_ANT_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_SDH_ANT_INFO_COLOR -+#define NRF_SDH_ANT_INFO_COLOR 0 -+#endif -+ -+// NRF_SDH_ANT_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_SDH_ANT_DEBUG_COLOR -+#define NRF_SDH_ANT_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_SDH_BLE_LOG_ENABLED - Enable logging in SoftDevice handler (BLE) module. -+//========================================================== -+#ifndef NRF_SDH_BLE_LOG_ENABLED -+#define NRF_SDH_BLE_LOG_ENABLED 1 -+#endif -+// NRF_SDH_BLE_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_SDH_BLE_LOG_LEVEL -+#define NRF_SDH_BLE_LOG_LEVEL 3 -+#endif -+ -+// NRF_SDH_BLE_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_SDH_BLE_INFO_COLOR -+#define NRF_SDH_BLE_INFO_COLOR 0 -+#endif -+ -+// NRF_SDH_BLE_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_SDH_BLE_DEBUG_COLOR -+#define NRF_SDH_BLE_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_SDH_LOG_ENABLED - Enable logging in SoftDevice handler module. -+//========================================================== -+#ifndef NRF_SDH_LOG_ENABLED -+#define NRF_SDH_LOG_ENABLED 1 -+#endif -+// NRF_SDH_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_SDH_LOG_LEVEL -+#define NRF_SDH_LOG_LEVEL 3 -+#endif -+ -+// NRF_SDH_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_SDH_INFO_COLOR -+#define NRF_SDH_INFO_COLOR 0 -+#endif -+ -+// NRF_SDH_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_SDH_DEBUG_COLOR -+#define NRF_SDH_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_SDH_SOC_LOG_ENABLED - Enable logging in SoftDevice handler (SoC) module. -+//========================================================== -+#ifndef NRF_SDH_SOC_LOG_ENABLED -+#define NRF_SDH_SOC_LOG_ENABLED 1 -+#endif -+// NRF_SDH_SOC_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_SDH_SOC_LOG_LEVEL -+#define NRF_SDH_SOC_LOG_LEVEL 3 -+#endif -+ -+// NRF_SDH_SOC_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_SDH_SOC_INFO_COLOR -+#define NRF_SDH_SOC_INFO_COLOR 0 -+#endif -+ -+// NRF_SDH_SOC_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_SDH_SOC_DEBUG_COLOR -+#define NRF_SDH_SOC_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_SORTLIST_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_SORTLIST_CONFIG_LOG_ENABLED -+#define NRF_SORTLIST_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_SORTLIST_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_SORTLIST_CONFIG_LOG_LEVEL -+#define NRF_SORTLIST_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_SORTLIST_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_SORTLIST_CONFIG_INFO_COLOR -+#define NRF_SORTLIST_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_SORTLIST_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_SORTLIST_CONFIG_DEBUG_COLOR -+#define NRF_SORTLIST_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// NRF_TWI_SENSOR_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef NRF_TWI_SENSOR_CONFIG_LOG_ENABLED -+#define NRF_TWI_SENSOR_CONFIG_LOG_ENABLED 0 -+#endif -+// NRF_TWI_SENSOR_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef NRF_TWI_SENSOR_CONFIG_LOG_LEVEL -+#define NRF_TWI_SENSOR_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// NRF_TWI_SENSOR_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_TWI_SENSOR_CONFIG_INFO_COLOR -+#define NRF_TWI_SENSOR_CONFIG_INFO_COLOR 0 -+#endif -+ -+// NRF_TWI_SENSOR_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef NRF_TWI_SENSOR_CONFIG_DEBUG_COLOR -+#define NRF_TWI_SENSOR_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// -+//========================================================== -+ -+// nrf_log in nRF_Serialization -+ -+//========================================================== -+// SER_HAL_TRANSPORT_CONFIG_LOG_ENABLED - Enables logging in the module. -+//========================================================== -+#ifndef SER_HAL_TRANSPORT_CONFIG_LOG_ENABLED -+#define SER_HAL_TRANSPORT_CONFIG_LOG_ENABLED 0 -+#endif -+// SER_HAL_TRANSPORT_CONFIG_LOG_LEVEL - Default Severity level -+ -+// <0=> Off -+// <1=> Error -+// <2=> Warning -+// <3=> Info -+// <4=> Debug -+ -+#ifndef SER_HAL_TRANSPORT_CONFIG_LOG_LEVEL -+#define SER_HAL_TRANSPORT_CONFIG_LOG_LEVEL 3 -+#endif -+ -+// SER_HAL_TRANSPORT_CONFIG_INFO_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef SER_HAL_TRANSPORT_CONFIG_INFO_COLOR -+#define SER_HAL_TRANSPORT_CONFIG_INFO_COLOR 0 -+#endif -+ -+// SER_HAL_TRANSPORT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. -+ -+// <0=> Default -+// <1=> Black -+// <2=> Red -+// <3=> Green -+// <4=> Yellow -+// <5=> Blue -+// <6=> Magenta -+// <7=> Cyan -+// <8=> White -+ -+#ifndef SER_HAL_TRANSPORT_CONFIG_DEBUG_COLOR -+#define SER_HAL_TRANSPORT_CONFIG_DEBUG_COLOR 0 -+#endif -+ -+// -+ -+// -+//========================================================== -+ -+// -+//========================================================== -+ -+// -+//========================================================== -+ -+// -+//========================================================== -+ -+// nRF_Segger_RTT -+ -+//========================================================== -+// segger_rtt - SEGGER RTT -+ -+//========================================================== -+// SEGGER_RTT_CONFIG_BUFFER_SIZE_UP - Size of upstream buffer. -+// Note that either @ref NRF_LOG_BACKEND_RTT_OUTPUT_BUFFER_SIZE -+// or this value is actually used. It depends on which one is bigger. -+ -+#ifndef SEGGER_RTT_CONFIG_BUFFER_SIZE_UP -+#define SEGGER_RTT_CONFIG_BUFFER_SIZE_UP 512 -+#endif -+ -+// SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS - Size of upstream buffer. -+#ifndef SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS -+#define SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS 2 -+#endif -+ -+// SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN - Size of upstream buffer. -+#ifndef SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN -+#define SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN 16 -+#endif -+ -+// SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS - Size of upstream buffer. -+#ifndef SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS -+#define SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS 2 -+#endif -+ -+// SEGGER_RTT_CONFIG_DEFAULT_MODE - RTT behavior if the buffer is full. -+ -+ -+// The following modes are supported: -+// - SKIP - Do not block, output nothing. -+// - TRIM - Do not block, output as much as fits. -+// - BLOCK - Wait until there is space in the buffer. -+// <0=> SKIP -+// <1=> TRIM -+// <2=> BLOCK_IF_FIFO_FULL -+ -+#ifndef SEGGER_RTT_CONFIG_DEFAULT_MODE -+#define SEGGER_RTT_CONFIG_DEFAULT_MODE 0 -+#endif -+ -+// -+//========================================================== -+ -+// -+//========================================================== -+ -+// nRF_SoftDevice -+ -+//========================================================== -+// NRF_SDH_BLE_ENABLED - nrf_sdh_ble - SoftDevice BLE event handler -+//========================================================== -+#ifndef NRF_SDH_BLE_ENABLED -+#define NRF_SDH_BLE_ENABLED 1 -+#endif -+// BLE Stack configuration - Stack configuration parameters -+ -+// The SoftDevice handler will configure the stack with these parameters when calling @ref nrf_sdh_ble_default_cfg_set. -+// Other libraries might depend on these values; keep them up-to-date even if you are not explicitely calling @ref nrf_sdh_ble_default_cfg_set. -+//========================================================== -+// NRF_SDH_BLE_GAP_DATA_LENGTH <27-251> -+ -+ -+// Requested BLE GAP data length to be negotiated. -+ -+#ifndef NRF_SDH_BLE_GAP_DATA_LENGTH -+#define NRF_SDH_BLE_GAP_DATA_LENGTH 27 -+#endif -+ -+// NRF_SDH_BLE_PERIPHERAL_LINK_COUNT - Maximum number of peripheral links. -+#ifndef NRF_SDH_BLE_PERIPHERAL_LINK_COUNT -+#define NRF_SDH_BLE_PERIPHERAL_LINK_COUNT 0 -+#endif -+ -+// NRF_SDH_BLE_CENTRAL_LINK_COUNT - Maximum number of central links. -+#ifndef NRF_SDH_BLE_CENTRAL_LINK_COUNT -+#define NRF_SDH_BLE_CENTRAL_LINK_COUNT 0 -+#endif -+ -+// NRF_SDH_BLE_TOTAL_LINK_COUNT - Total link count. -+// Maximum number of total concurrent connections using the default configuration. -+ -+#ifndef NRF_SDH_BLE_TOTAL_LINK_COUNT -+#define NRF_SDH_BLE_TOTAL_LINK_COUNT 1 -+#endif -+ -+// NRF_SDH_BLE_GAP_EVENT_LENGTH - GAP event length. -+// The time set aside for this connection on every connection interval in 1.25 ms units. -+ -+#ifndef NRF_SDH_BLE_GAP_EVENT_LENGTH -+#define NRF_SDH_BLE_GAP_EVENT_LENGTH 6 -+#endif -+ -+// NRF_SDH_BLE_GATT_MAX_MTU_SIZE - Static maximum MTU size. -+#ifndef NRF_SDH_BLE_GATT_MAX_MTU_SIZE -+#define NRF_SDH_BLE_GATT_MAX_MTU_SIZE 250 -+#endif -+ -+// NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE - Attribute Table size in bytes. The size must be a multiple of 4. -+#ifndef NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE -+#define NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE 1408 -+#endif -+ -+// NRF_SDH_BLE_VS_UUID_COUNT - The number of vendor-specific UUIDs. -+#ifndef NRF_SDH_BLE_VS_UUID_COUNT -+#define NRF_SDH_BLE_VS_UUID_COUNT 0 -+#endif -+ -+// NRF_SDH_BLE_SERVICE_CHANGED - Include the Service Changed characteristic in the Attribute Table. -+ -+ -+#ifndef NRF_SDH_BLE_SERVICE_CHANGED -+#define NRF_SDH_BLE_SERVICE_CHANGED 0 -+#endif -+ -+// -+//========================================================== -+ -+// BLE Observers - Observers and priority levels -+ -+//========================================================== -+// NRF_SDH_BLE_OBSERVER_PRIO_LEVELS - Total number of priority levels for BLE observers. -+// This setting configures the number of priority levels available for BLE event handlers. -+// The priority level of a handler determines the order in which it receives events, with respect to other handlers. -+ -+#ifndef NRF_SDH_BLE_OBSERVER_PRIO_LEVELS -+#define NRF_SDH_BLE_OBSERVER_PRIO_LEVELS 4 -+#endif -+ -+// BLE Observers priorities - Invididual priorities -+ -+//========================================================== -+// BLE_ADV_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Advertising module. -+ -+#ifndef BLE_ADV_BLE_OBSERVER_PRIO -+#define BLE_ADV_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// BLE_ANCS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Apple Notification Service Client. -+ -+#ifndef BLE_ANCS_C_BLE_OBSERVER_PRIO -+#define BLE_ANCS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_ANS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Alert Notification Service Client. -+ -+#ifndef BLE_ANS_C_BLE_OBSERVER_PRIO -+#define BLE_ANS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_BAS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Battery Service. -+ -+#ifndef BLE_BAS_BLE_OBSERVER_PRIO -+#define BLE_BAS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_BAS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Battery Service Client. -+ -+#ifndef BLE_BAS_C_BLE_OBSERVER_PRIO -+#define BLE_BAS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_BPS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Blood Pressure Service. -+ -+#ifndef BLE_BPS_BLE_OBSERVER_PRIO -+#define BLE_BPS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_CONN_PARAMS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Connection parameters module. -+ -+#ifndef BLE_CONN_PARAMS_BLE_OBSERVER_PRIO -+#define BLE_CONN_PARAMS_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// BLE_CONN_STATE_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Connection State module. -+ -+#ifndef BLE_CONN_STATE_BLE_OBSERVER_PRIO -+#define BLE_CONN_STATE_BLE_OBSERVER_PRIO 0 -+#endif -+ -+// BLE_CSCS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Cycling Speed and Cadence Service. -+ -+#ifndef BLE_CSCS_BLE_OBSERVER_PRIO -+#define BLE_CSCS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_CTS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Current Time Service Client. -+ -+#ifndef BLE_CTS_C_BLE_OBSERVER_PRIO -+#define BLE_CTS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_DB_DISC_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Database Discovery module. -+ -+#ifndef BLE_DB_DISC_BLE_OBSERVER_PRIO -+#define BLE_DB_DISC_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// BLE_DFU_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the DFU Service. -+ -+#ifndef BLE_DFU_BLE_OBSERVER_PRIO -+#define BLE_DFU_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_DIS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Device Information Client. -+ -+#ifndef BLE_DIS_C_BLE_OBSERVER_PRIO -+#define BLE_DIS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_GLS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Glucose Service. -+ -+#ifndef BLE_GLS_BLE_OBSERVER_PRIO -+#define BLE_GLS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_HIDS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Human Interface Device Service. -+ -+#ifndef BLE_HIDS_BLE_OBSERVER_PRIO -+#define BLE_HIDS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_HRS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Heart Rate Service. -+ -+#ifndef BLE_HRS_BLE_OBSERVER_PRIO -+#define BLE_HRS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_HRS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Heart Rate Service Client. -+ -+#ifndef BLE_HRS_C_BLE_OBSERVER_PRIO -+#define BLE_HRS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_HTS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Health Thermometer Service. -+ -+#ifndef BLE_HTS_BLE_OBSERVER_PRIO -+#define BLE_HTS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_IAS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Immediate Alert Service. -+ -+#ifndef BLE_IAS_BLE_OBSERVER_PRIO -+#define BLE_IAS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_IAS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Immediate Alert Service Client. -+ -+#ifndef BLE_IAS_C_BLE_OBSERVER_PRIO -+#define BLE_IAS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_LBS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the LED Button Service. -+ -+#ifndef BLE_LBS_BLE_OBSERVER_PRIO -+#define BLE_LBS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_LBS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the LED Button Service Client. -+ -+#ifndef BLE_LBS_C_BLE_OBSERVER_PRIO -+#define BLE_LBS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_LESC_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the BLE LESC module. -+ -+#ifndef BLE_LESC_OBSERVER_PRIO -+#define BLE_LESC_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_LLS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Link Loss Service. -+ -+#ifndef BLE_LLS_BLE_OBSERVER_PRIO -+#define BLE_LLS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_LNS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Location Navigation Service. -+ -+#ifndef BLE_LNS_BLE_OBSERVER_PRIO -+#define BLE_LNS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_NUS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the UART Service. -+ -+#ifndef BLE_NUS_BLE_OBSERVER_PRIO -+#define BLE_NUS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_NUS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the UART Central Service. -+ -+#ifndef BLE_NUS_C_BLE_OBSERVER_PRIO -+#define BLE_NUS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_OTS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Object transfer service. -+ -+#ifndef BLE_OTS_BLE_OBSERVER_PRIO -+#define BLE_OTS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_OTS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Object transfer service client. -+ -+#ifndef BLE_OTS_C_BLE_OBSERVER_PRIO -+#define BLE_OTS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_RSCS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Running Speed and Cadence Service. -+ -+#ifndef BLE_RSCS_BLE_OBSERVER_PRIO -+#define BLE_RSCS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_RSCS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Running Speed and Cadence Client. -+ -+#ifndef BLE_RSCS_C_BLE_OBSERVER_PRIO -+#define BLE_RSCS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BLE_TPS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the TX Power Service. -+ -+#ifndef BLE_TPS_BLE_OBSERVER_PRIO -+#define BLE_TPS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// BSP_BTN_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Button Control module. -+ -+#ifndef BSP_BTN_BLE_OBSERVER_PRIO -+#define BSP_BTN_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the NFC pairing library. -+ -+#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO -+#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NRF_BLE_BMS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Bond Management Service. -+ -+#ifndef NRF_BLE_BMS_BLE_OBSERVER_PRIO -+#define NRF_BLE_BMS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// NRF_BLE_CGMS_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Contiuon Glucose Monitoring Service. -+ -+#ifndef NRF_BLE_CGMS_BLE_OBSERVER_PRIO -+#define NRF_BLE_CGMS_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// NRF_BLE_ES_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Eddystone module. -+ -+#ifndef NRF_BLE_ES_BLE_OBSERVER_PRIO -+#define NRF_BLE_ES_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the GATT Service Client. -+ -+#ifndef NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO -+#define NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// NRF_BLE_GATT_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the GATT module. -+ -+#ifndef NRF_BLE_GATT_BLE_OBSERVER_PRIO -+#define NRF_BLE_GATT_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// NRF_BLE_QWR_BLE_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the Queued writes module. -+ -+#ifndef NRF_BLE_QWR_BLE_OBSERVER_PRIO -+#define NRF_BLE_QWR_BLE_OBSERVER_PRIO 2 -+#endif -+ -+// PM_BLE_OBSERVER_PRIO - Priority with which BLE events are dispatched to the Peer Manager module. -+#ifndef PM_BLE_OBSERVER_PRIO -+#define PM_BLE_OBSERVER_PRIO 1 -+#endif -+ -+// -+//========================================================== -+ -+// -+//========================================================== -+ -+ -+// -+ -+// NRF_SDH_ENABLED - nrf_sdh - SoftDevice handler -+//========================================================== -+#ifndef NRF_SDH_ENABLED -+#define NRF_SDH_ENABLED 1 -+#endif -+// Dispatch model -+ -+// This setting configures how Stack events are dispatched to the application. -+//========================================================== -+// NRF_SDH_DISPATCH_MODEL -+ -+ -+// NRF_SDH_DISPATCH_MODEL_INTERRUPT: SoftDevice events are passed to the application from the interrupt context. -+// NRF_SDH_DISPATCH_MODEL_APPSH: SoftDevice events are scheduled using @ref app_scheduler. -+// NRF_SDH_DISPATCH_MODEL_POLLING: SoftDevice events are to be fetched manually. -+// <0=> NRF_SDH_DISPATCH_MODEL_INTERRUPT -+// <1=> NRF_SDH_DISPATCH_MODEL_APPSH -+// <2=> NRF_SDH_DISPATCH_MODEL_POLLING -+ -+#ifndef NRF_SDH_DISPATCH_MODEL -+#define NRF_SDH_DISPATCH_MODEL 0 -+#endif -+ -+// -+//========================================================== -+ -+// Clock - SoftDevice clock configuration -+ -+//========================================================== -+// NRF_SDH_CLOCK_LF_SRC - SoftDevice clock source. -+ -+// <0=> NRF_CLOCK_LF_SRC_RC -+// <1=> NRF_CLOCK_LF_SRC_XTAL -+// <2=> NRF_CLOCK_LF_SRC_SYNTH -+ -+#ifndef NRF_SDH_CLOCK_LF_SRC -+#define NRF_SDH_CLOCK_LF_SRC 1 -+#endif -+ -+// NRF_SDH_CLOCK_LF_RC_CTIV - SoftDevice calibration timer interval. -+#ifndef NRF_SDH_CLOCK_LF_RC_CTIV -+#define NRF_SDH_CLOCK_LF_RC_CTIV 0 -+#endif -+ -+// NRF_SDH_CLOCK_LF_RC_TEMP_CTIV - SoftDevice calibration timer interval under constant temperature. -+// How often (in number of calibration intervals) the RC oscillator shall be calibrated -+// if the temperature has not changed. -+ -+#ifndef NRF_SDH_CLOCK_LF_RC_TEMP_CTIV -+#define NRF_SDH_CLOCK_LF_RC_TEMP_CTIV 0 -+#endif -+ -+// NRF_SDH_CLOCK_LF_ACCURACY - External clock accuracy used in the LL to compute timing. -+ -+// <0=> NRF_CLOCK_LF_ACCURACY_250_PPM -+// <1=> NRF_CLOCK_LF_ACCURACY_500_PPM -+// <2=> NRF_CLOCK_LF_ACCURACY_150_PPM -+// <3=> NRF_CLOCK_LF_ACCURACY_100_PPM -+// <4=> NRF_CLOCK_LF_ACCURACY_75_PPM -+// <5=> NRF_CLOCK_LF_ACCURACY_50_PPM -+// <6=> NRF_CLOCK_LF_ACCURACY_30_PPM -+// <7=> NRF_CLOCK_LF_ACCURACY_20_PPM -+// <8=> NRF_CLOCK_LF_ACCURACY_10_PPM -+// <9=> NRF_CLOCK_LF_ACCURACY_5_PPM -+// <10=> NRF_CLOCK_LF_ACCURACY_2_PPM -+// <11=> NRF_CLOCK_LF_ACCURACY_1_PPM -+ -+#ifndef NRF_SDH_CLOCK_LF_ACCURACY -+#define NRF_SDH_CLOCK_LF_ACCURACY 7 -+#endif -+ -+// -+//========================================================== -+ -+// SDH Observers - Observers and priority levels -+ -+//========================================================== -+// NRF_SDH_REQ_OBSERVER_PRIO_LEVELS - Total number of priority levels for request observers. -+// This setting configures the number of priority levels available for the SoftDevice request event handlers. -+// The priority level of a handler determines the order in which it receives events, with respect to other handlers. -+ -+#ifndef NRF_SDH_REQ_OBSERVER_PRIO_LEVELS -+#define NRF_SDH_REQ_OBSERVER_PRIO_LEVELS 2 -+#endif -+ -+// NRF_SDH_STATE_OBSERVER_PRIO_LEVELS - Total number of priority levels for state observers. -+// This setting configures the number of priority levels available for the SoftDevice state event handlers. -+// The priority level of a handler determines the order in which it receives events, with respect to other handlers. -+ -+#ifndef NRF_SDH_STATE_OBSERVER_PRIO_LEVELS -+#define NRF_SDH_STATE_OBSERVER_PRIO_LEVELS 2 -+#endif -+ -+// NRF_SDH_STACK_OBSERVER_PRIO_LEVELS - Total number of priority levels for stack event observers. -+// This setting configures the number of priority levels available for the SoftDevice stack event handlers (ANT, BLE, SoC). -+// The priority level of a handler determines the order in which it receives events, with respect to other handlers. -+ -+#ifndef NRF_SDH_STACK_OBSERVER_PRIO_LEVELS -+#define NRF_SDH_STACK_OBSERVER_PRIO_LEVELS 2 -+#endif -+ -+ -+// State Observers priorities - Invididual priorities -+ -+//========================================================== -+// CLOCK_CONFIG_STATE_OBSERVER_PRIO -+// Priority with which state events are dispatched to the Clock driver. -+ -+#ifndef CLOCK_CONFIG_STATE_OBSERVER_PRIO -+#define CLOCK_CONFIG_STATE_OBSERVER_PRIO 0 -+#endif -+ -+// POWER_CONFIG_STATE_OBSERVER_PRIO -+// Priority with which state events are dispatched to the Power driver. -+ -+#ifndef POWER_CONFIG_STATE_OBSERVER_PRIO -+#define POWER_CONFIG_STATE_OBSERVER_PRIO 0 -+#endif -+ -+// RNG_CONFIG_STATE_OBSERVER_PRIO -+// Priority with which state events are dispatched to this module. -+ -+#ifndef RNG_CONFIG_STATE_OBSERVER_PRIO -+#define RNG_CONFIG_STATE_OBSERVER_PRIO 0 -+#endif -+ -+// -+//========================================================== -+ -+// Stack Event Observers priorities - Invididual priorities -+ -+//========================================================== -+// NRF_SDH_ANT_STACK_OBSERVER_PRIO -+// This setting configures the priority with which ANT events are processed with respect to other events coming from the stack. -+// Modify this setting if you need to have ANT events dispatched before or after other stack events, such as BLE or SoC. -+// Zero is the highest priority. -+ -+#ifndef NRF_SDH_ANT_STACK_OBSERVER_PRIO -+#define NRF_SDH_ANT_STACK_OBSERVER_PRIO 0 -+#endif -+ -+// NRF_SDH_BLE_STACK_OBSERVER_PRIO -+// This setting configures the priority with which BLE events are processed with respect to other events coming from the stack. -+// Modify this setting if you need to have BLE events dispatched before or after other stack events, such as ANT or SoC. -+// Zero is the highest priority. -+ -+#ifndef NRF_SDH_BLE_STACK_OBSERVER_PRIO -+#define NRF_SDH_BLE_STACK_OBSERVER_PRIO 0 -+#endif -+ -+// NRF_SDH_SOC_STACK_OBSERVER_PRIO -+// This setting configures the priority with which SoC events are processed with respect to other events coming from the stack. -+// Modify this setting if you need to have SoC events dispatched before or after other stack events, such as ANT or BLE. -+// Zero is the highest priority. -+ -+#ifndef NRF_SDH_SOC_STACK_OBSERVER_PRIO -+#define NRF_SDH_SOC_STACK_OBSERVER_PRIO 0 -+#endif -+ -+// -+//========================================================== -+ -+// -+//========================================================== -+ -+ -+// -+ -+// NRF_SDH_SOC_ENABLED - nrf_sdh_soc - SoftDevice SoC event handler -+//========================================================== -+#ifndef NRF_SDH_SOC_ENABLED -+#define NRF_SDH_SOC_ENABLED 1 -+#endif -+// SoC Observers - Observers and priority levels -+ -+//========================================================== -+// NRF_SDH_SOC_OBSERVER_PRIO_LEVELS - Total number of priority levels for SoC observers. -+// This setting configures the number of priority levels available for the SoC event handlers. -+// The priority level of a handler determines the order in which it receives events, with respect to other handlers. -+ -+#ifndef NRF_SDH_SOC_OBSERVER_PRIO_LEVELS -+#define NRF_SDH_SOC_OBSERVER_PRIO_LEVELS 2 -+#endif -+ -+// SoC Observers priorities - Invididual priorities -+ -+//========================================================== -+// BLE_ADV_SOC_OBSERVER_PRIO -+// Priority with which SoC events are dispatched to the Advertising module. -+ -+#ifndef BLE_ADV_SOC_OBSERVER_PRIO -+#define BLE_ADV_SOC_OBSERVER_PRIO 1 -+#endif -+ -+// BLE_DFU_SOC_OBSERVER_PRIO -+// Priority with which BLE events are dispatched to the DFU Service. -+ -+#ifndef BLE_DFU_SOC_OBSERVER_PRIO -+#define BLE_DFU_SOC_OBSERVER_PRIO 1 -+#endif -+ -+// CLOCK_CONFIG_SOC_OBSERVER_PRIO -+// Priority with which SoC events are dispatched to the Clock driver. -+ -+#ifndef CLOCK_CONFIG_SOC_OBSERVER_PRIO -+#define CLOCK_CONFIG_SOC_OBSERVER_PRIO 0 -+#endif -+ -+// POWER_CONFIG_SOC_OBSERVER_PRIO -+// Priority with which SoC events are dispatched to the Power driver. -+ -+#ifndef POWER_CONFIG_SOC_OBSERVER_PRIO -+#define POWER_CONFIG_SOC_OBSERVER_PRIO 0 -+#endif -+ -+// -+//========================================================== -+ -+// -+//========================================================== -+ -+ -+// -+ -+// -+//========================================================== -+ -+// <<< end of configuration section >>> -+#endif //SDK_CONFIG_H -+ -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/iar/ble_connectivity_iar_nRF5x.icf b/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/iar/ble_connectivity_iar_nRF5x.icf ---- a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/iar/ble_connectivity_iar_nRF5x.icf 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/iar/ble_connectivity_iar_nRF5x.icf 2018-07-18 17:28:04.000000000 +0200 -@@ -0,0 +1,36 @@ -+/*###ICF### Section handled by ICF editor, don't touch! ****/ -+/*-Editor annotation file-*/ -+/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ -+/*-Specials-*/ -+define symbol __ICFEDIT_intvec_start__ = 0x1f000; -+/*-Memory Regions-*/ -+define symbol __ICFEDIT_region_ROM_start__ = 0x1f000; -+define symbol __ICFEDIT_region_ROM_end__ = 0xfffff; -+define symbol __ICFEDIT_region_RAM_start__ = 0x200199c0; -+define symbol __ICFEDIT_region_RAM_end__ = 0x2003ffff; -+export symbol __ICFEDIT_region_RAM_start__; -+export symbol __ICFEDIT_region_RAM_end__; -+/*-Sizes-*/ -+define symbol __ICFEDIT_size_cstack__ = 2048; -+define symbol __ICFEDIT_size_heap__ = 512; -+/**** End of ICF editor section. ###ICF###*/ -+ -+define memory mem with size = 4G; -+define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; -+define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; -+ -+define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; -+define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; -+define block RO_END with alignment = 8, size = 0 { }; -+ -+initialize by copy { readwrite }; -+do not initialize { section .noinit }; -+ -+keep { section .intvec }; -+place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; -+place in ROM_region { readonly, -+ block RO_END }; -+place in RAM_region { readwrite, -+ block CSTACK, -+ block HEAP }; -+ -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/iar/ble_connectivity_s132v3_usb_hci_pca10059.ewd b/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/iar/ble_connectivity_s132v3_usb_hci_pca10059.ewd ---- a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/iar/ble_connectivity_s132v3_usb_hci_pca10059.ewd 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/iar/ble_connectivity_s132v3_usb_hci_pca10059.ewd 2018-07-18 17:28:04.000000000 +0200 -@@ -0,0 +1,1350 @@ -+ -+ -+ -+ 2 -+ nrf52840_xxaa -+ -+ ARM -+ -+ 0 -+ -+ C-SPY -+ 2 -+ -+ 26 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ARMSIM_ID -+ 2 -+ -+ 1 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ ANGEL_ID -+ 2 -+ -+ 0 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ CMSISDAP_ID -+ 2 -+ -+ 2 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ GDBSERVER_ID -+ 2 -+ -+ 0 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ IARROM_ID -+ 2 -+ -+ 1 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ IJET_ID -+ 2 -+ -+ 3 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ JLINK_ID -+ 2 -+ -+ 15 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ LMIFTDI_ID -+ 2 -+ -+ 2 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ MACRAIGOR_ID -+ 2 -+ -+ 3 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ PEMICRO_ID -+ 2 -+ -+ 1 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ RDI_ID -+ 2 -+ -+ 2 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ STLINK_ID -+ 2 -+ -+ 2 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ THIRDPARTY_ID -+ 2 -+ -+ 0 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ XDS100_ID -+ 2 -+ -+ 2 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin -+ 0 -+ -+ -+ $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin -+ 0 -+ -+ -+ $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin -+ 1 -+ -+ -+ $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin -+ 0 -+ -+ -+ $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin -+ 1 -+ -+ -+ $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin -+ 0 -+ -+ -+ -+ -+ -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/iar/ble_connectivity_s132v3_usb_hci_pca10059.ewp b/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/iar/ble_connectivity_s132v3_usb_hci_pca10059.ewp ---- a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/iar/ble_connectivity_s132v3_usb_hci_pca10059.ewp 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/iar/ble_connectivity_s132v3_usb_hci_pca10059.ewp 2018-07-18 17:28:04.000000000 +0200 -@@ -0,0 +1,1179 @@ -+ -+ -+ -+ -+ 2 -+ nrf52840_xxaa -+ -+ ARM -+ -+ 0 -+ -+ General -+ 3 -+ -+ 22 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ ICCARM -+ 2 -+ -+ 31 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ AARM -+ 2 -+ -+ 9 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ OBJCOPY -+ 0 -+ -+ 1 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ CUSTOM -+ 3 -+ -+ -+ -+ -+ -+ -+ BICOMP -+ 0 -+ -+ -+ -+ BUILDACTION -+ 1 -+ -+ -+ -+ -+ -+ -+ ILINK -+ 0 -+ -+ 16 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ IARCHIVE -+ 0 -+ -+ 0 -+ 1 -+ 0 -+ -+ -+ -+ -+ -+ -+ BILINK -+ 0 -+ -+ -+ -+ nRF_Log -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_backend_rtt.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_backend_serial.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_default_backends.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_frontend.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\experimental_log\src\nrf_log_str_formatter.c -+ nRF_Libraries -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\util\app_error.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\util\app_error_handler_iar.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\util\app_error_weak.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\scheduler\app_scheduler.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\timer\app_timer.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\usbd\app_usbd.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\usbd\class\cdc\acm\app_usbd_cdc_acm.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\usbd\app_usbd_core.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\usbd\class\nrf_dfu_trigger\app_usbd_nrf_dfu_trigger.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\usbd\app_usbd_serial_num.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\usbd\app_usbd_string_desc.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\util\app_util_platform.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\crc16\crc16.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\util\nrf_assert.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\atomic_fifo\nrf_atfifo.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\atomic\nrf_atomic.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\balloc\nrf_balloc.c -+ $PROJ_DIR$\..\..\..\..\..\..\external\fprintf\nrf_fprintf.c -+ $PROJ_DIR$\..\..\..\..\..\..\external\fprintf\nrf_fprintf_format.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\experimental_memobj\nrf_memobj.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\queue\nrf_queue.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\experimental_section_vars\nrf_section_iter.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\strerror\nrf_strerror.c -+ None -+ $PROJ_DIR$\..\..\..\..\..\..\modules\nrfx\mdk\iar_startup_nrf52840.s -+ $PROJ_DIR$\..\..\..\..\..\..\modules\nrfx\mdk\system_nrf52840.c -+ Board Definition -+ $PROJ_DIR$\..\..\..\..\..\..\components\boards\boards.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\libraries\bootloader\dfu\nrf_dfu_trigger_usb.c -+ nRF_Serialization -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\common\ble_dtm_init.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_event_enc.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_evt_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gap_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gap_evt_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gap_struct_serialization.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gatt_struct_serialization.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gattc_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gattc_evt_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gattc_struct_serialization.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gatts_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_gatts_evt_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_gatts_struct_serialization.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_l2cap_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\ble_l2cap_evt_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_l2cap_struct_serialization.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\ble_serialization.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\struct_ser\ble\ble_struct_serialization.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\cond_field_serialization.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_gap_sec_keys.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_l2cap_sdu_pool.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\conn_ble_user_mem.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\common\conn_mw.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gap.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gattc.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_gatts.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\middleware\conn_mw_ble_l2cap.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\common\conn_mw_nrf_soc.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\hal\dtm_uart.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\codecs\ble\serializers\nrf_soc_conn.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\struct_ser\ble\nrf_soc_struct_serialization.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\ser_conn_cmd_decoder.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\ser_conn_dtm_cmd_decoder.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\ser_conn_error_handling.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\ser_conn_event_encoder.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\ser_conn_handlers.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\ser_conn_pkt_decoder.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\connectivity\ser_conn_reset_cmd_decoder.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\ser_dbg_sd_str.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\transport\ser_hal_transport.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\transport\ser_phy\ser_phy_hci.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\serialization\common\transport\ser_phy\ser_phy_hci_slip_cdc.c -+ nRF_Drivers -+ $PROJ_DIR$\..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_clock.c -+ $PROJ_DIR$\..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_power.c -+ $PROJ_DIR$\..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_uart.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\drivers_nrf\usbd\nrf_drv_usbd.c -+ $PROJ_DIR$\..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_clock.c -+ $PROJ_DIR$\..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_power.c -+ $PROJ_DIR$\..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_power_clock.c -+ $PROJ_DIR$\..\..\..\..\..\..\modules\nrfx\drivers\src\prs\nrfx_prs.c -+ $PROJ_DIR$\..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_uart.c -+ $PROJ_DIR$\..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_uarte.c -+ Application -+ $PROJ_DIR$\..\..\..\main.c -+ $PROJ_DIR$\..\config\sdk_config.h -+ nRF_Segger_RTT -+ $PROJ_DIR$\..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT.c -+ $PROJ_DIR$\..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT_Syscalls_IAR.c -+ $PROJ_DIR$\..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT_printf.c -+ nRF_BLE -+ $PROJ_DIR$\..\..\..\..\..\..\components\ble\common\ble_advdata.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\ble\ble_dtm\ble_dtm.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\ble\ble_dtm\ble_dtm_hw_nrf52.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\ble\common\ble_srv_common.c -+ nRF_SoftDevice -+ $PROJ_DIR$\..\..\..\..\..\..\components\softdevice\common\nrf_sdh.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\softdevice\common\nrf_sdh_ble.c -+ $PROJ_DIR$\..\..\..\..\..\..\components\softdevice\common\nrf_sdh_soc.c -+ -+ -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_s132v3_usb_hci_pca10059.emProject b/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_s132v3_usb_hci_pca10059.emProject ---- a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_s132v3_usb_hci_pca10059.emProject 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_s132v3_usb_hci_pca10059.emProject 2018-07-18 17:28:10.000000000 +0200 -@@ -0,0 +1,163 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_s132v3_usb_hci_pca10059.emSession b/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_s132v3_usb_hci_pca10059.emSession ---- a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_s132v3_usb_hci_pca10059.emSession 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_s132v3_usb_hci_pca10059.emSession 2018-07-18 17:28:10.000000000 +0200 -@@ -0,0 +1,7 @@ -+ -+ -+ -+ -+ -+ -+ -\ No newline at end of file -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/flash_placement.xml b/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/flash_placement.xml ---- a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/flash_placement.xml 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/flash_placement.xml 2018-07-18 17:28:10.000000000 +0200 -@@ -0,0 +1,46 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/arm4/ble_connectivity_s140_usb_hci_pca10059.uvproj b/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/arm4/ble_connectivity_s140_usb_hci_pca10059.uvproj ---- a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/arm4/ble_connectivity_s140_usb_hci_pca10059.uvproj 2018-03-22 12:24:54.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/arm4/ble_connectivity_s140_usb_hci_pca10059.uvproj 2018-07-18 17:27:50.000000000 +0200 -@@ -323,8 +323,8 @@ - - - 0 -- 0x200094b8 -- 0x36b48 -+ 0x200194b8 -+ 0x26b48 - - - 0 -@@ -4786,8 +4786,8 @@ - - - 0 -- 0x200094b8 -- 0x36b48 -+ 0x200194b8 -+ 0x26b48 - - - 0 -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/arm5_no_packs/ble_connectivity_s140_usb_hci_pca10059.uvprojx b/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/arm5_no_packs/ble_connectivity_s140_usb_hci_pca10059.uvprojx ---- a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/arm5_no_packs/ble_connectivity_s140_usb_hci_pca10059.uvprojx 2018-03-22 12:24:58.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/arm5_no_packs/ble_connectivity_s140_usb_hci_pca10059.uvprojx 2018-07-18 17:27:54.000000000 +0200 -@@ -329,8 +329,8 @@ - - - 0 -- 0x200094b8 -- 0x36b48 -+ 0x200194b8 -+ 0x26b48 - - - 0 -@@ -4717,8 +4717,8 @@ - - - 0 -- 0x200094b8 -- 0x36b48 -+ 0x200194b8 -+ 0x26b48 - - - 0 -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld b/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld ---- a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld 2018-03-22 12:24:50.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld 2018-07-18 17:27:44.000000000 +0200 -@@ -6,11 +6,18 @@ - MEMORY - { - FLASH (rx) : ORIGIN = 0x26000, LENGTH = 0xda000 -- RAM (rwx) : ORIGIN = 0x200094b8, LENGTH = 0x36b48 -+ RAM (rwx) : ORIGIN = 0x200194b8, LENGTH = 0x26b48 -+ connectivity_version_info (r) : ORIGIN = 0x30000, LENGTH = 0x18 - } - - SECTIONS - { -+ .connectivity_version_info : -+ { -+ PROVIDE(__start_connectivity_version_info = .); -+ KEEP(*(SORT(.connectivity_version_info*))) -+ PROVIDE(__stop_connectivity_version_info = .); -+ } > connectivity_version_info - } - - SECTIONS -@@ -63,12 +70,6 @@ - KEEP(*(.nrf_balloc)) - PROVIDE(__stop_nrf_balloc = .); - } > FLASH -- .sdh_state_observers : -- { -- PROVIDE(__start_sdh_state_observers = .); -- KEEP(*(SORT(.sdh_state_observers*))) -- PROVIDE(__stop_sdh_state_observers = .); -- } > FLASH - .sdh_stack_observers : - { - PROVIDE(__start_sdh_stack_observers = .); -@@ -81,6 +82,12 @@ - KEEP(*(SORT(.sdh_req_observers*))) - PROVIDE(__stop_sdh_req_observers = .); - } > FLASH -+ .sdh_state_observers : -+ { -+ PROVIDE(__start_sdh_state_observers = .); -+ KEEP(*(SORT(.sdh_state_observers*))) -+ PROVIDE(__stop_sdh_state_observers = .); -+ } > FLASH - - } INSERT AFTER .text - -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/config/sdk_config.h b/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/config/sdk_config.h ---- a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/config/sdk_config.h 2018-03-22 15:25:12.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/config/sdk_config.h 2018-07-18 17:42:30.000000000 +0200 -@@ -964,7 +964,7 @@ - - // Selected Product ID - #ifndef APP_USBD_PID --#define APP_USBD_PID 0x521B -+#define APP_USBD_PID 0xC00A - #endif - - // APP_USBD_DEVICE_VER_MAJOR - Device version, major part <0-99> -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/iar/ble_connectivity_iar_nRF5x.icf b/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/iar/ble_connectivity_iar_nRF5x.icf ---- a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/iar/ble_connectivity_iar_nRF5x.icf 2018-03-22 12:25:08.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/iar/ble_connectivity_iar_nRF5x.icf 2018-07-18 17:28:06.000000000 +0200 -@@ -6,7 +6,7 @@ - /*-Memory Regions-*/ - define symbol __ICFEDIT_region_ROM_start__ = 0x26000; - define symbol __ICFEDIT_region_ROM_end__ = 0xfffff; --define symbol __ICFEDIT_region_RAM_start__ = 0x200094b8; -+define symbol __ICFEDIT_region_RAM_start__ = 0x200194b8; - define symbol __ICFEDIT_region_RAM_end__ = 0x2003ffff; - export symbol __ICFEDIT_region_RAM_start__; - export symbol __ICFEDIT_region_RAM_end__; -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10059.emProject b/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10059.emProject ---- a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10059.emProject 2018-03-22 12:25:14.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10059.emProject 2018-07-18 17:28:14.000000000 +0200 -@@ -16,7 +16,7 @@ - arm_target_device_name="nRF52840_xxAA" - arm_target_interface_type="SWD" - c_user_include_directories="../../../config/ble_connectivity_s140_usb_hci_pca10059;../../../config;../../../../../../components;../../../../../../components/ble/ble_dtm;../../../../../../components/boards;../../../../../../components/drivers_nrf/usbd;../../../../../../components/libraries/atomic;../../../../../../components/libraries/atomic_fifo;../../../../../../components/libraries/balloc;../../../../../../components/libraries/block_dev;../../../../../../components/libraries/bootloader/dfu;../../../../../../components/libraries/bsp;../../../../../../components/libraries/crc16;../../../../../../components/libraries/delay;../../../../../../components/libraries/experimental_log;../../../../../../components/libraries/experimental_log/src;../../../../../../components/libraries/experimental_memobj;../../../../../../components/libraries/experimental_section_vars;../../../../../../components/libraries/queue;../../../../../../components/libraries/scheduler;../../../../../../components/libraries/strerror;../../../../../../components/libraries/timer;../../../../../../components/libraries/usbd;../../../../../../components/libraries/usbd/class/cdc;../../../../../../components/libraries/usbd/class/cdc/acm;../../../../../../components/libraries/usbd/class/nrf_dfu_trigger;../../../../../../components/libraries/usbd/config;../../../../../../components/libraries/util;../../../../../../components/serialization/common;../../../../../../components/serialization/common/struct_ser/ble;../../../../../../components/serialization/common/transport;../../../../../../components/serialization/common/transport/ser_phy;../../../../../../components/serialization/common/transport/ser_phy/config;../../../../../../components/serialization/connectivity;../../../../../../components/serialization/connectivity/codecs/ble/middleware;../../../../../../components/serialization/connectivity/codecs/ble/serializers;../../../../../../components/serialization/connectivity/codecs/common;../../../../../../components/serialization/connectivity/hal;../../../../../../components/softdevice/common;../../../../../../components/softdevice/s140/headers;../../../../../../components/softdevice/s140/headers/nrf52;../../../../../../components/toolchain/cmsis/include;../../../../../../external/fprintf;../../../../../../external/segger_rtt;../../../../../../integration/nrfx;../../../../../../integration/nrfx/legacy;../../../../../../modules/nrfx;../../../../../../modules/nrfx/drivers/include;../../../../../../modules/nrfx/hal;../../../../../../modules/nrfx/mdk;../config;" -- c_preprocessor_definitions="BLE_STACK_SUPPORT_REQD;BOARD_PCA10059;BSP_DEFINES_ONLY;CONFIG_GPIO_AS_PINRESET;FLOAT_ABI_HARD;HCI_TIMER2;INITIALIZE_USER_SECTIONS;NO_VTOR_CONFIG;NRF52840_XXAA;NRF_SD_BLE_API_VERSION=6;S140;SER_CONNECTIVITY;SOFTDEVICE_PRESENT;SWI_DISABLE0;" -+ c_preprocessor_definitions="APP_USBD_STRINGS_PRODUCT;APP_USBD_STRING_SERIAL;APP_USBD_STRING_SERIAL_EXTERN;BLE_STACK_SUPPORT_REQD;BOARD_PCA10059;BSP_DEFINES_ONLY;CONFIG_GPIO_AS_PINRESET;FLOAT_ABI_HARD;HCI_TIMER2;INITIALIZE_USER_SECTIONS;NO_VTOR_CONFIG;NRF52840_XXAA;NRF_SD_BLE_API_VERSION=6;S140;SER_CONNECTIVITY;SOFTDEVICE_PRESENT;SWI_DISABLE0;" - debug_target_connection="J-Link" - gcc_entry_point="Reset_Handler" - macros="CMSIS_CONFIG_TOOL=../../../../../../external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar" -@@ -27,8 +27,8 @@ - linker_printf_width_precision_supported="Yes" - linker_printf_fmt_level="long" - linker_section_placement_file="flash_placement.xml" -- linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x100000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x40000;FLASH_START=0x26000;FLASH_SIZE=0xda000;RAM_START=0x200094b8;RAM_SIZE=0x36b48" -- linker_section_placements_segments="FLASH RX 0x0 0x100000;RAM RWX 0x20000000 0x40000" -+ linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x100000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x40000;FLASH_START=0x26000;FLASH_SIZE=0xda000;RAM_START=0x200194b8;RAM_SIZE=0x26b48" -+ linker_section_placements_segments="FLASH RX 0x0 0x100000;RAM RWX 0x20000000 0x40000;connectivity_version_info RX 0x30000 0x18" - project_directory="" - project_type="Executable" /> - -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/flash_placement.xml b/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/flash_placement.xml ---- a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/flash_placement.xml 2018-03-22 12:25:14.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/flash_placement.xml 2018-07-18 17:28:14.000000000 +0200 -@@ -11,9 +11,9 @@ - - - -- - - -+ - - - -@@ -40,4 +40,7 @@ - - - -+ -+ -+ - -diff -u -r -N a/integration/nrfx/legacy/nrf_drv_power.c b/integration/nrfx/legacy/nrf_drv_power.c ---- a/integration/nrfx/legacy/nrf_drv_power.c 2018-03-22 15:25:14.000000000 +0100 -+++ b/integration/nrfx/legacy/nrf_drv_power.c 2018-07-18 17:42:32.000000000 +0200 -@@ -47,6 +47,14 @@ - #include "nrf_sdh_soc.h" - #endif - -+#if defined(SOFTDEVICE_PRESENT) -+#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 6 -+#define POWER_USB_SD_API 0 -+#else -+#define POWER_USB_SD_API 1 -+#endif -+#endif -+ - #include - - // The structure with default configuration data. -@@ -215,7 +223,7 @@ - - #if NRF_POWER_HAS_USBREG - --#ifdef SOFTDEVICE_PRESENT -+#if POWER_USB_SD_API - static ret_code_t nrf_drv_power_sd_usbevt_enable(bool enable) - { - ret_code_t err_code; -@@ -243,7 +251,7 @@ - { - nrf_drv_power_usbevt_uninit(); - nrfx_power_usbevt_init(p_config); --#ifdef SOFTDEVICE_PRESENT -+#if POWER_USB_SD_API - if (nrf_sdh_is_enabled()) - { - ret_code_t err_code = nrf_drv_power_sd_usbevt_enable(true); -@@ -278,7 +286,7 @@ - - void nrf_drv_power_usbevt_uninit(void) - { --#ifdef SOFTDEVICE_PRESENT -+#if POWER_USB_SD_API - CRITICAL_REGION_ENTER(); - if (nrf_sdh_is_enabled()) - { -@@ -291,7 +299,7 @@ - { - nrfx_power_usbevt_disable(); - } --#ifdef SOFTDEVICE_PRESENT -+#if POWER_USB_SD_API - CRITICAL_REGION_EXIT(); - #endif - nrfx_power_usbevt_uninit(); -@@ -321,7 +329,7 @@ - pofwarn_handler(); - } - --#if NRF_POWER_HAS_USBREG -+#if NRF_POWER_HAS_USBREG && POWER_USB_SD_API - nrfx_power_usb_event_handler_t usbevt_handler = nrfx_power_usb_handler_get(); - if (usbevt_handler != NULL) - { -@@ -359,7 +367,7 @@ - } - CRITICAL_REGION_EXIT(); - --#if NRF_POWER_HAS_USBREG -+#if NRF_POWER_HAS_USBREG && POWER_USB_SD_API - if (nrfx_power_usb_handler_get() != NULL) - { - ret_code_t err_code = nrf_drv_power_sd_usbevt_enable(true); diff --git a/include/common/internal/adapter_internal.h b/include/common/internal/adapter_internal.h index 608beb8b1..ed34f9796 100755 --- a/include/common/internal/adapter_internal.h +++ b/include/common/internal/adapter_internal.h @@ -41,31 +41,37 @@ #include "sd_rpc_types.h" #include "serialization_transport.h" -#include "nrf_error.h" #include "ble.h" +#include "nrf_error.h" #include -class AdapterInternal { - public: - explicit AdapterInternal(SerializationTransport *transport); - ~AdapterInternal(); - uint32_t open(const sd_rpc_status_handler_t status_callback, const sd_rpc_evt_handler_t event_callback, const sd_rpc_log_handler_t log_callback); - uint32_t close() const; - uint32_t logSeverityFilterSet(sd_rpc_log_severity_t severity_filter); - static bool isInternalError(const uint32_t error_code); +class AdapterInternal +{ + public: + explicit AdapterInternal(SerializationTransport *transport); + ~AdapterInternal(); + uint32_t open(const sd_rpc_status_handler_t status_callback, + const sd_rpc_evt_handler_t event_callback, + const sd_rpc_log_handler_t log_callback); + uint32_t close(); + uint32_t logSeverityFilterSet(const sd_rpc_log_severity_t severity_filter); + static bool isInternalError(const uint32_t error_code); + + void statusHandler(const sd_rpc_app_status_t code, const std::string &error); + void eventHandler(ble_evt_t *event); + void logHandler(const sd_rpc_log_severity_t severity, const std::string &log_message); - void statusHandler(sd_rpc_app_status_t code, const char * error); - void eventHandler(ble_evt_t *event); - void logHandler(sd_rpc_log_severity_t severity, std::string log_message); + SerializationTransport *transport; - SerializationTransport *transport; + private: + sd_rpc_evt_handler_t eventCallback; + sd_rpc_status_handler_t statusCallback; + sd_rpc_log_handler_t logCallback; + sd_rpc_log_severity_t logSeverityFilter; - private: - sd_rpc_evt_handler_t eventCallback; - sd_rpc_status_handler_t statusCallback; - sd_rpc_log_handler_t logCallback; - sd_rpc_log_severity_t logSeverityFilter; + bool isOpen; + std::mutex publicMethodMutex; }; #endif // ADAPTER_INTERNAL_H__ diff --git a/include/common/internal/app_ble_gap.h b/include/common/internal/app_ble_gap.h new file mode 100644 index 000000000..1f41f51ba --- /dev/null +++ b/include/common/internal/app_ble_gap.h @@ -0,0 +1,249 @@ +/** + * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +#ifndef _APP_BLE_GAP_H +#define _APP_BLE_GAP_H + +/**@file + * + * @defgroup app_ble_gap_sec_keys GAP Functions for managing memory for security keys in the + * application device. + * @{ + * @ingroup ser_app_s130_codecs + * + * @brief GAP Application auxiliary functions for synchronizing the GAP security keys with the + * ones stored in the connectivity device. + */ + +#include "ble_gap.h" +#include "ble_types.h" + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef SER_MAX_CONNECTIONS +#define SER_MAX_CONNECTIONS 8 +#endif + +/**@brief GAP connection - keyset mapping structure. + * + * @note This structure is used to map keysets to connection instances and store them in a static + * table. + */ +typedef struct +{ + uint16_t conn_handle; /**< Connection handle.*/ + uint8_t conn_active; /**< Indication that keys for this connection are used by the SoftDevice. + 0: keys used; 1: keys not used. */ + ble_gap_sec_keyset_t keyset; /**< Keyset structure, see @ref ble_gap_sec_keyset_t.*/ +} ser_ble_gap_app_keyset_t; + +typedef enum { + REQUEST_REPLY_CODEC_CONTEXT, + EVENT_CODEC_CONTEXT +} app_ble_gap_adapter_codec_context_t; + +/** + * @brief Create GAP states for a given adapter + * + * The purpose of this function is to create a GAP state for a given adapter. + * + * @param[in] key Key that represents the adapter, used by other functions to select GAP state for a + * adapter + */ +uint32_t app_ble_gap_state_create(void *key); + +/** + * @brief Delete GAP states for a given adapter + * + * The purpose of this function is to delete the GAP state for a given adapter. + * + * @param[in] key Key that represents the adapter + */ +uint32_t app_ble_gap_state_delete(void *key); + +/**@brief Set the current GAP adapter to be used by codecs + * + * @param[in] adapter_id Adapter to be used by codecs + * @param[in] codec_context Codec context + */ +void app_ble_gap_set_current_adapter_id(void *adapter_id, + const app_ble_gap_adapter_codec_context_t codec_context); + +/**@brief Unset the current GAP adapter used by codecs + * @param[in] codec_context Unset the given codec context + */ +void app_ble_gap_unset_current_adapter_id(const app_ble_gap_adapter_codec_context_t codec_context); + +/**@brief Check if current adapter is set + * @param[in] codec_context Check if adapter GAP state is set for codec context + */ +uint32_t app_ble_gap_check_current_adapter_set(const app_ble_gap_adapter_codec_context_t codec_context); + +/**@brief Allocates the instance in m_app_keys_table[] for storage of encryption keys. + * + * @param[in] conn_handle conn_handle + * @param[out] p_index Pointer to the index of the allocated instance. + * + * @retval NRF_SUCCESS Key storage allocated. + * @retval NRF_ERROR_NO_MEM No free instance available. + */ +uint32_t app_ble_gap_sec_keys_storage_create(uint16_t conn_handle, uint32_t *p_index); + +/**@brief Release the instance identified by a connection handle. + * + * @param[in] conn_handle conn_handle + * + * @retval NRF_SUCCESS Context released. + * @retval NRF_ERROR_NOT_FOUND Instance with conn_handle not found. + */ +uint32_t app_ble_gap_sec_keys_storage_destroy(const uint16_t conn_handle); + +/**@brief Finds index of instance identified by a connection handle. + * + * @param[in] conn_handle conn_handle + * + * @param[out] p_index Pointer to the index of the entry in the keys table + * corresponding to the given conn_handle. + * + * @retval NRF_SUCCESS Context found. + * @retval NRF_ERROR_NOT_FOUND Instance with conn_handle not found. + */ +uint32_t app_ble_gap_sec_keys_find(const uint16_t conn_handle, uint32_t *p_index); + +/**@brief Gets key for given adapter and connection. + * + * @param[in] index key index + * @param[out] Double pointer to keyset for given key index + */ +uint32_t app_ble_gap_sec_keys_get(const uint32_t index, ble_gap_sec_keyset_t **keyset); + +/**@brief Updates key in given index. This function is used in REQUEST_REPLY_CODEC_CONTEXT. + * + * @param[in] index key index + * @param[out] Pointer to keyset for given key index + */ +uint32_t app_ble_gap_sec_keys_update(const uint32_t index, const ble_gap_sec_keyset_t *keyset); + +/** + * @brief Reset internal values in app_ble_gap + * + * The purpose of this function is to clear internal values in this file + * when starting to use the adapter + */ +uint32_t app_ble_gap_state_reset(); + +#if NRF_SD_BLE_API_VERSION >= 6 +/** + * @brief Stores buffer for adv report data. + * + * @param p_data Pointer to the buffer. + * + */ +void app_ble_gap_scan_data_set(const uint8_t *p_scan_data); + +/** + * @brief Returns pointer to the buffer for storing report data. Returns error if not paired with + * @ref app_ble_gap_scan_data_set call. + * + * @param[out] p_data Stored data. + * @return NRF_SUCCESS or error in case pointer is already cleared. + */ +uint32_t app_ble_gap_scan_data_fetch_clear(ble_data_t *p_data); + +/** + * @brief Function for registering data pointers related with given adv_handle. + * + * @param adv_handle Handle. + * @param p_adv_data Adv_data buffer. + * @param p_scan_rsp_data Scan_rsp_data buffer. + * + * @return NRF_SUCCESS or error. + * + */ +uint32_t app_ble_gap_adv_set_register(uint8_t adv_handle, uint8_t *p_adv_data, + uint8_t *p_scan_rsp_data); + +/** + * @brief Function for unregistering given . + * + * @param[in] adv_handle Handle. + * @param[out] pp_adv_data Pointer to adv_data buffer associated with given adv_handle. + * @param[out] pp_scan_rsp_data Pointer to adv_data buffer associated with given adv_handle. + * + * @return NRF_SUCCESS or error. + * + */ +uint32_t app_ble_gap_adv_set_unregister(uint8_t adv_handle, uint8_t **pp_adv_data, + uint8_t **pp_scan_rsp_data); + +/** + * @brief Register an advertisement buffer pointer + * + * @param[in] p_buf Advertisement buffer to create a pointer ID from + * @return -1 if there is no space left in buffer table, 0 of p_buf is nullptr, >0 with buffer location in buffer table + */ + +int app_ble_gap_adv_buf_register(void * p_buf); + +/** + * @brief Unregister a buffer from advertisement buffer table + * + * Unregister a buffer from the buffer table (ble_gap_adv_buf_addr) + * + * @param[in] id buffer ID in the ble_gap_adv_buf_addr table + * @param[in] event_context true if EVENT context, false if it is in REQUEST_REPLOY context + * + * @return Buffer pointer from advertisement buffer table, except nullptr if id == 0 or if the context for the current adapter is not set + */ +void *app_ble_gap_adv_buf_unregister(const int id, bool event_context); +void app_ble_gap_adv_buf_addr_unregister(void * p_buf, bool event_context); + +void app_ble_gap_scan_data_unset(bool free); + +#endif // NRF_SD_BLE_API_VERSION >= 6 +/** @} */ +#ifdef __cplusplus +} +#endif + +#endif //_APP_BLE_GAP_H diff --git a/include/common/internal/ble_common.h b/include/common/internal/ble_common.h index 4fe21981c..43f98cf23 100755 --- a/include/common/internal/ble_common.h +++ b/include/common/internal/ble_common.h @@ -37,37 +37,42 @@ #ifndef BLE_COMMON_IMPL_H__ #define BLE_COMMON_IMPL_H__ -#include #include "adapter.h" +#include #include -#include "app_ble_gap_sec_keys.h" -typedef std::function encode_function_t; -typedef std::function decode_function_t; +typedef std::function encode_function_t; +typedef std::function decode_function_t; -uint32_t encode_decode(adapter_t *adapter, encode_function_t encode_function, decode_function_t decode_function); +uint32_t encode_decode(adapter_t *adapter, const encode_function_t &encode_function, + const decode_function_t &decode_function); /* - * We do not want to change the codecs provided by the SDK too much. The BLESecurityContext provides a way to set the root - * security context before calling the codecs. Typically the root context is the SerializationTransport object. -*/ + * We do not want to change the codecs provided by the SDK too much. The BLESecurityContext provides + * a way to set the root security context before calling the codecs. Typically the root context is + * the SerializationTransport object. + */ -class BLESecurityContext +class RequestReplyCodecContext { -private: - void *context; - -public: - explicit BLESecurityContext(void* context) : context(context) - { - app_ble_gap_sec_context_root_set(context); - } + public: + explicit RequestReplyCodecContext(void *adapterId); + ~RequestReplyCodecContext(); + RequestReplyCodecContext(const RequestReplyCodecContext &) = delete; + RequestReplyCodecContext &operator=(const RequestReplyCodecContext &) = delete; + RequestReplyCodecContext(RequestReplyCodecContext &&) = delete; + RequestReplyCodecContext &operator=(RequestReplyCodecContext &&) = delete; +}; - ~BLESecurityContext() - { - app_ble_gap_sec_context_root_release(); - } +class EventCodecContext +{ + public: + explicit EventCodecContext(void *adapterId); + ~EventCodecContext(); + EventCodecContext(const EventCodecContext &) = delete; + EventCodecContext &operator=(const EventCodecContext &) = delete; + EventCodecContext(EventCodecContext &&) = delete; + EventCodecContext &operator=(EventCodecContext &&) = delete; }; #endif - diff --git a/include/common/internal/log.h b/include/common/internal/log.h index 681463679..3cdd85a06 100644 --- a/include/common/internal/log.h +++ b/include/common/internal/log.h @@ -53,17 +53,19 @@ // This stack overflow thread contains more info in regards to cmd.exe output: // https://stackoverflow.com/questions/7404551/why-is-console-output-so-slow -#ifndef NRF_LOG_SETUP +#ifdef NRF_LOG_SETUP #ifndef NRF_LOG_FILENAME std::ostream &nrfLogStream(std::cout); \ - static std::mutex nrfLogMutex; + std::mutex nrfLogMutex; #else std::fstream nrfLogStream(\ NRF_LOG_FILENAME, \ std::fstream::out | std::fstream::trunc); \ - static std::mutex nrfLogMutex; + std::mutex nrfLogMutex; #endif -#define NRF_LOG_SETUP +#else +extern std::ostream &nrfLogStream; +extern std::mutex nrfLogMutex; #endif #ifndef NRF_LOG diff --git a/include/common/internal/transport/h5_transport.h b/include/common/internal/transport/h5_transport.h index f55121d7f..879a4e0e3 100755 --- a/include/common/internal/transport/h5_transport.h +++ b/include/common/internal/transport/h5_transport.h @@ -40,19 +40,18 @@ #include "transport.h" -#include #include +#include #include -#include -#include -#include #include "h5.h" #include "h5_transport_exit_criterias.h" +#include +#include +#include -typedef enum -{ +typedef enum { STATE_START, STATE_RESET, STATE_UNINITIALIZED, @@ -64,26 +63,28 @@ typedef enum STATE_UNKNOWN } h5_state_t; -constexpr uint8_t SyncFirstByte = 0x01; -constexpr uint8_t SyncSecondByte = 0x7E; -constexpr uint8_t SyncRspFirstByte = 0x02; -constexpr uint8_t SyncRspSecondByte = 0x7D; -constexpr uint8_t SyncConfigFirstByte = 0x03; -constexpr uint8_t SyncConfigSecondByte = 0xFC; -constexpr uint8_t SyncConfigRspFirstByte = 0x04; +constexpr uint8_t SyncFirstByte = 0x01; +constexpr uint8_t SyncSecondByte = 0x7E; +constexpr uint8_t SyncRspFirstByte = 0x02; +constexpr uint8_t SyncRspSecondByte = 0x7D; +constexpr uint8_t SyncConfigFirstByte = 0x03; +constexpr uint8_t SyncConfigSecondByte = 0xFC; +constexpr uint8_t SyncConfigRspFirstByte = 0x04; constexpr uint8_t SyncConfigRspSecondByte = 0x7B; -constexpr uint8_t SyncConfigField = 0x11; +constexpr uint8_t SyncConfigField = 0x11; using state_action_t = std::function; -using payload_t = std::vector; +using payload_t = std::vector; -class H5Transport : public Transport { -public: +class H5Transport : public Transport +{ + public: H5Transport() = delete; - H5Transport(Transport *nextTransportLayer, uint32_t retransmission_interval); - ~H5Transport(); - - uint32_t open(status_cb_t status_callback, data_cb_t data_callback, log_cb_t log_callback) override; + H5Transport(Transport *nextTransportLayer, const uint32_t retransmission_interval); + ~H5Transport() noexcept; + + uint32_t open(const status_cb_t &status_callback, const data_cb_t &data_callback, + const log_cb_t &log_callback) override; uint32_t close() override; uint32_t send(const std::vector &data) override; @@ -94,11 +95,15 @@ class H5Transport : public Transport { static bool isSyncConfigPacket(const payload_t &packet, const uint8_t offset = 0); static bool isSyncConfigResponsePacket(const payload_t &packet, const uint8_t offset = 0); static bool isResetPacket(const payload_t &packet, const uint8_t offset = 0); - static bool checkPattern(const payload_t &packet, const uint8_t offset, const payload_t &pattern); + static bool checkPattern(const payload_t &packet, const uint8_t offset, + const payload_t &pattern); + static payload_t getPktPattern(const control_pkt_type); + static std::string stateToString(const h5_state_t state); + static std::string pktTypeToString(const h5_pkt_type_t pktType); -private: - void dataHandler(uint8_t *data, size_t length); - void statusHandler(sd_rpc_app_status_t code, const char * error); + private: + void dataHandler(const uint8_t *data, const size_t length); + void statusHandler(const sd_rpc_app_status_t code, const std::string &error); void processPacket(const payload_t &packet); void sendControlPacket(control_pkt_type type); @@ -122,7 +127,8 @@ class H5Transport : public Transport { std::vector unprocessedData; std::mutex stateMachineMutex; // Mutex controlling access to state machine variables - std::condition_variable stateMachineChange; // Condition variable to communicate changes to state machine + std::condition_variable + stateMachineChange; // Condition variable to communicate changes to state machine // Variables used in state ACTIVE std::chrono::milliseconds retransmissionInterval; @@ -135,14 +141,10 @@ class H5Transport : public Transport { uint32_t errorPacketCount; void logPacket(const bool outgoing, const payload_t &packet); - void log(std::string &logLine) const; - void log(char const *logLine) const; void logStateTransition(const h5_state_t from, const h5_state_t to) const; - static std::string stateToString(const h5_state_t state); static std::string asHex(const payload_t &packet); - static std::string hciPacketLinkControlToString(const payload_t &payload); - std::string h5PktToString(const bool out, const payload_t &h5Packet) const; - static std::string pktTypeToString(const h5_pkt_type_t pktType); + static std::string hciPacketLinkControlToString(const payload_t &payload); + std::string h5PktToString(const bool out, const payload_t &h5Packet) const; // State machine related h5_state_t currentState; @@ -155,17 +157,27 @@ class H5Transport : public Transport { void startStateMachine(); void stopStateMachine(); - std::map> exitCriterias; + std::map> exitCriterias; void stateMachineWorker(); - std::mutex stateMutex; // Mutex that allows threads to wait for a given state in the state machine + // Mutex that allows threads to wait for a given state in the state machine + std::mutex stateMutex; bool waitForState(h5_state_t state, std::chrono::milliseconds timeout); std::condition_variable stateWaitCondition; - static const std::map pkt_pattern; - static const std::map stateString; - static const std::map pktTypeString; + bool isOpen; + std::mutex publicMethodMutex; + + // Actions associated with each state + h5_state_t stateActionStart(); + h5_state_t stateActionReset(); + h5_state_t stateActionUninitialized(); + h5_state_t stateActionInitialized(); + h5_state_t stateActionActive(); + h5_state_t stateActionFailed(); + h5_state_t stateActionClosed(); + h5_state_t stateActionNoResponse(); }; -#endif //H5_TRANSPORT_H +#endif // H5_TRANSPORT_H diff --git a/include/common/internal/transport/serial_port_enum.h b/include/common/internal/transport/serial_port_enum.h index 00125285d..d5e1c0782 100755 --- a/include/common/internal/transport/serial_port_enum.h +++ b/include/common/internal/transport/serial_port_enum.h @@ -69,7 +69,7 @@ #include #include -#include +#include struct SerialPortDesc { public: @@ -82,6 +82,6 @@ struct SerialPortDesc { std::string productId; }; -uint32_t EnumSerialPorts(std::list& descs); +std::list EnumSerialPorts(); #endif // SERIAL_PORT_ENUM_H diff --git a/include/common/internal/transport/serialization_transport.h b/include/common/internal/transport/serialization_transport.h index eac3579e6..cc09152fe 100755 --- a/include/common/internal/transport/serialization_transport.h +++ b/include/common/internal/transport/serialization_transport.h @@ -42,15 +42,18 @@ #include "ble.h" -#include -#include +#include #include +#include +#include +#include #include -#include -typedef uint32_t(*transport_rsp_handler_t)(const uint8_t *p_buffer, uint16_t length); -typedef std::function evt_cb_t; +typedef uint32_t (*transport_rsp_handler_t)(const uint8_t *p_buffer, uint16_t length); +typedef std::function evt_cb_t; + +constexpr uint32_t MaxPossibleEventLength = 700; struct eventData_t { @@ -58,50 +61,61 @@ struct eventData_t uint32_t dataLength; }; -typedef enum -{ - SERIALIZATION_COMMAND = 0, - SERIALIZATION_RESPONSE = 1, - SERIALIZATION_EVENT = 2 +typedef enum { + SERIALIZATION_COMMAND = 0, + SERIALIZATION_RESPONSE = 1, + SERIALIZATION_EVENT = 2, + SERIALIZATION_DTM_CMD = 3, // Direct test mode command + SERIALIZATION_DTM_RESP = 4, // Direct test mode response + SERIALIZATION_RESET_CMD = 5 } serialization_pkt_type_t; -class SerializationTransport { -public: - SerializationTransport() = delete; +class SerializationTransport +{ + public: + SerializationTransport(const SerializationTransport &) = delete; + SerializationTransport &operator=(const SerializationTransport &) = delete; + SerializationTransport(SerializationTransport &&) = delete; + SerializationTransport &operator=(SerializationTransport &&) = delete; + SerializationTransport(Transport *dataLinkLayer, uint32_t response_timeout); - ~SerializationTransport(); - - uint32_t open(status_cb_t status_callback, evt_cb_t event_callback, log_cb_t log_callback); + ~SerializationTransport() = default; + + uint32_t open(const status_cb_t &status_callback, const evt_cb_t &event_callback, + const log_cb_t &log_callback); uint32_t close(); - uint32_t send(uint8_t *cmdBuffer, uint32_t cmdLength, uint8_t *rspBuffer, uint32_t *rspLength); + uint32_t send(const std::vector &cmdBuffer, + std::shared_ptr> rspBuffer, + serialization_pkt_type_t pktType = SERIALIZATION_COMMAND); -private: - void readHandler(uint8_t *data, size_t length); + private: + void readHandler(const uint8_t *data, const size_t length); void eventHandlingRunner(); status_cb_t statusCallback; evt_cb_t eventCallback; log_cb_t logCallback; - + data_cb_t dataCallback; std::shared_ptr nextTransportLayer; uint32_t responseTimeout; - bool rspReceived; - uint8_t *responseBuffer; - uint32_t *responseLength; + bool responseReceived; + std::shared_ptr> responseBuffer; std::mutex sendMutex; std::mutex responseMutex; std::condition_variable responseWaitCondition; - bool runEventThread; // Variable to control if thread shall run, used in thread to exit/keep running inthread std::mutex eventMutex; std::condition_variable eventWaitCondition; std::thread eventThread; - std::queue eventQueue; + std::queue> eventQueue; + + std::atomic isOpen; // Variable is shared between threads + std::mutex publicMethodMutex; }; -#endif //SERIALIZATION_TRANSPORT_H +#endif // SERIALIZATION_TRANSPORT_H diff --git a/include/common/internal/transport/transport.h b/include/common/internal/transport/transport.h index 55e123e18..5e26cf853 100755 --- a/include/common/internal/transport/transport.h +++ b/include/common/internal/transport/transport.h @@ -46,18 +46,25 @@ #include -typedef std::function status_cb_t; -typedef std::function data_cb_t; -typedef std::function log_cb_t; +typedef std::function status_cb_t; +typedef std::function data_cb_t; +typedef std::function + log_cb_t; -class Transport { -public: +class Transport +{ + public: virtual ~Transport(); - virtual uint32_t open(status_cb_t status_callback, data_cb_t data_callback, log_cb_t log_callback); - virtual uint32_t close(); + virtual uint32_t open(const status_cb_t &status_callback, const data_cb_t &data_callback, + const log_cb_t &log_callback); + virtual uint32_t close() = 0; + virtual uint32_t send(const std::vector &data) = 0; -protected: + void log(const sd_rpc_log_severity_t severity, const std::string &message) const; + void status(const sd_rpc_app_status_t code, const std::string &message) const; + + protected: Transport(); status_cb_t upperStatusCallback; @@ -65,4 +72,4 @@ class Transport { log_cb_t upperLogCallback; }; -#endif //TRANSPORT_H +#endif // TRANSPORT_H diff --git a/include/common/internal/transport/uart_boost.h b/include/common/internal/transport/uart_boost.h index 926d91de4..2ef2168bf 100755 --- a/include/common/internal/transport/uart_boost.h +++ b/include/common/internal/transport/uart_boost.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Nordic Semiconductor ASA + * Copyright (c) 2016-2018 Nordic Semiconductor ASA * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, @@ -39,87 +39,93 @@ #define UART_BOOST_H #include "transport.h" -#include "uart_settings_boost.h" #include "uart_defines.h" +#include "uart_settings_boost.h" -#include -#include +#include +#include #include #include #include #include -#if BOOST_VERSION >= 106600 -typedef boost::asio::io_context asio_io_context; -#else -typedef boost::asio::io_service asio_io_context; -#endif - /** * @brief The UartBoost class opens, reads and writes a serial port using the boost asio library */ class UartBoost : public Transport { -public: - - /**@brief Is called by app_uart_init() stores function pointers and sets up necessary boost variables. + public: + /** + *@brief Is called by app_uart_init() stores function pointers and sets up necessary boost + * variables. */ UartBoost(const UartCommunicationParameters &communicationParameters); - ~UartBoost(); + ~UartBoost() noexcept; - /**@brief Setup of serial port service with parameter data. + /** + *@brief Setup of serial port service with parameter data. */ - uint32_t open(status_cb_t status_callback, data_cb_t data_callback, log_cb_t log_callback); + uint32_t open(const status_cb_t &status_callback, const data_cb_t &data_callback, + const log_cb_t &log_callback) override; - /**@brief Closes the serial port service. + /** + *@brief Closes the serial port service. */ - uint32_t close(); + uint32_t close() override; - /**@brief sends data to serial port to write. + /** + *@brief sends data to serial port to write. */ - uint32_t send(const std::vector &data); - -private: + uint32_t send(const std::vector &data) override; - /**@brief Called when background thread receives bytes from uart. + private: + /** + *@brief Called when background thread receives bytes from uart. */ - void readHandler(const boost::system::error_code &errorCode, const size_t bytesTransferred); + void readHandler(const asio::error_code &errorCode, const size_t bytesTransferred); - /**@brief Called when write is finished doing asynchronous write. + /** + *@brief Called when write is finished doing asynchronous write. */ - void writeHandler(const boost::system::error_code &errorCode, const size_t); + void writeHandler(const asio::error_code &errorCode, const size_t); - /**@brief Starts asynchronous read on a background thread. + /** + *@brief Starts asynchronous read on a background thread. */ void startRead(); - /**@brief Starts an asynchronous read. + /** + *@brief Starts an asynchronous read. */ void asyncRead(); - /**@brief Starts an asynchronous write. + /** + *@brief Starts an asynchronous write. */ void asyncWrite(); - boost::array readBuffer; + std::array readBuffer; std::vector writeBufferVector; std::deque writeQueue; std::mutex queueMutex; + std::mutex publicMethodMutex; + bool isOpen; - boost::function callbackReadHandle; - boost::function callbackWriteHandle; + std::function callbackReadHandle; + std::function callbackWriteHandle; UartSettingsBoost uartSettingsBoost; bool asyncWriteInProgress; std::thread *ioServiceThread; - asio_io_context* ioService; - boost::asio::serial_port* serialPort; + asio::io_service *ioService; + asio::serial_port *serialPort; + + asio::io_service::work *workNotifier; - asio_io_context::work* workNotifier; }; -#endif //UART_BOOST_H +#endif // UART_BOOST_H diff --git a/include/common/internal/transport/uart_settings_boost.h b/include/common/internal/transport/uart_settings_boost.h index 701eb6449..d8ed13166 100755 --- a/include/common/internal/transport/uart_settings_boost.h +++ b/include/common/internal/transport/uart_settings_boost.h @@ -40,7 +40,7 @@ #include "uart_settings.h" -#include +#include /** * @brief Extension class to UartSettings. Extra functions for returning Boost variables. @@ -56,19 +56,19 @@ class UartSettingsBoost : public UartSettings UartSettingsBoost(const UartCommunicationParameters &communicationParameters); /*@brief Returns baud rate readable by Boost. */ - boost::asio::serial_port::baud_rate getBoostBaudRate() const; + asio::serial_port::baud_rate getBoostBaudRate() const; /*@brief Returns flow control in Boost format. */ - boost::asio::serial_port::flow_control getBoostFlowControl() const; + asio::serial_port::flow_control getBoostFlowControl() const; /*@brief Returns parity in Boost format. */ - boost::asio::serial_port::parity getBoostParity() const; + asio::serial_port::parity getBoostParity() const; /*@brief Returns stop bits in Boost format. */ - boost::asio::serial_port::stop_bits getBoostStopBits() const; + asio::serial_port::stop_bits getBoostStopBits() const; /*@brief Returns character size in Boost format. */ - boost::asio::serial_port::character_size getBoostCharacterSize() const; + asio::serial_port::character_size getBoostCharacterSize() const; }; diff --git a/include/common/sd_rpc.h b/include/common/sd_rpc.h index fd4482ee9..47b554c5a 100644 --- a/include/common/sd_rpc.h +++ b/include/common/sd_rpc.h @@ -148,11 +148,12 @@ SD_RPC_API uint32_t sd_rpc_log_handler_severity_filter_set(adapter_t *adapter, s /**@brief Reset the connectivity chip. * * @param[in] adapter The transport adapter. + * @param[in] reset_mode The reset mode to perform in connectivity firmware. * * @retval NRF_SUCCESS The connectivity chip was reset successfully. * @retval NRF_ERROR There was an error reset the connectivity chip. */ -SD_RPC_API uint32_t sd_rpc_conn_reset(adapter_t *adapter); +SD_RPC_API uint32_t sd_rpc_conn_reset(adapter_t *adapter, sd_rpc_reset_t reset_mode); #ifdef __cplusplus } diff --git a/include/common/sd_rpc_types.h b/include/common/sd_rpc_types.h index 7d5122850..9724b4ad6 100755 --- a/include/common/sd_rpc_types.h +++ b/include/common/sd_rpc_types.h @@ -51,7 +51,8 @@ extern "C" { #define SD_RPC_MAXPATHLEN 512 /**@brief Error codes that an error callback can be associated with. */ -typedef struct { +typedef struct +{ char port[SD_RPC_MAXPATHLEN]; char manufacturer[SD_RPC_MAXPATHLEN]; char serialNumber[SD_RPC_MAXPATHLEN]; @@ -62,8 +63,7 @@ typedef struct { } sd_rpc_serial_port_desc_t; /**@brief Error codes that an error callback can be associated with. */ -typedef enum -{ +typedef enum { PKT_SEND_MAX_RETRIES_REACHED, PKT_UNEXPECTED, PKT_ENCODE_ERROR, @@ -75,8 +75,7 @@ typedef enum } sd_rpc_app_status_t; /**@brief Levels of severity that a log message can be associated with. */ -typedef enum -{ +typedef enum { SD_RPC_LOG_TRACE, SD_RPC_LOG_DEBUG, SD_RPC_LOG_INFO, @@ -86,24 +85,55 @@ typedef enum } sd_rpc_log_severity_t; /**@brief Flow control modes */ -typedef enum -{ - SD_RPC_FLOW_CONTROL_NONE, - SD_RPC_FLOW_CONTROL_HARDWARE -} sd_rpc_flow_control_t; +typedef enum { SD_RPC_FLOW_CONTROL_NONE, SD_RPC_FLOW_CONTROL_HARDWARE } sd_rpc_flow_control_t; /**@brief Parity modes */ -typedef enum -{ - SD_RPC_PARITY_NONE, - SD_RPC_PARITY_EVEN -} sd_rpc_parity_t; - -/**@brief Function pointer type for event callbacks. -*/ -typedef void(*sd_rpc_status_handler_t)(adapter_t *adapter, sd_rpc_app_status_t code, const char * message); -typedef void(*sd_rpc_evt_handler_t)(adapter_t *adapter, ble_evt_t * p_ble_evt); -typedef void(*sd_rpc_log_handler_t)(adapter_t *adapter, sd_rpc_log_severity_t severity, const char * log_message); +typedef enum { SD_RPC_PARITY_NONE, SD_RPC_PARITY_EVEN } sd_rpc_parity_t; + +/**@brief Reset modes to specify how the connectivity firmware will perform a reset. */ +typedef enum { + SYS_RESET, /** System reset of the connectivity chip, all state is reset. */ + SOFT_RESET, /** Reset transport and SoftDevice related states only. */ +} sd_rpc_reset_t; + +/**@bref Error codes for SD_RPC related errors */ +#define NRF_ERROR_SD_RPC_BASE_NUM (NRF_ERROR_BASE_NUM + 0x8000) + +#define NRF_ERROR_SD_RPC_ENCODE (NRF_ERROR_SD_RPC_BASE_NUM + 1) +#define NRF_ERROR_SD_RPC_DECODE (NRF_ERROR_SD_RPC_BASE_NUM + 2) +#define NRF_ERROR_SD_RPC_SEND (NRF_ERROR_SD_RPC_BASE_NUM + 3) +#define NRF_ERROR_SD_RPC_INVALID_ARGUMENT (NRF_ERROR_SD_RPC_BASE_NUM + 4) +#define NRF_ERROR_SD_RPC_NO_RESPONSE (NRF_ERROR_SD_RPC_BASE_NUM + 5) +#define NRF_ERROR_SD_RPC_INVALID_STATE (NRF_ERROR_SD_RPC_BASE_NUM + 6) + +#define NRF_ERROR_SD_RPC_SERIALIZATION_TRANSPORT (NRF_ERROR_SD_RPC_BASE_NUM + 20) +#define NRF_ERROR_SD_RPC_SERIALIZATION_TRANSPORT_INVALID_STATE (NRF_ERROR_SD_RPC_BASE_NUM + 21) +#define NRF_ERROR_SD_RPC_SERIALIZATION_TRANSPORT_NO_RESPONSE (NRF_ERROR_SD_RPC_BASE_NUM + 22) +#define NRF_ERROR_SD_RPC_SERIALIZATION_TRANSPORT_ALREADY_OPEN (NRF_ERROR_SD_RPC_BASE_NUM + 23) +#define NRF_ERROR_SD_RPC_SERIALIZATION_TRANSPORT_ALREADY_CLOSED (NRF_ERROR_SD_RPC_BASE_NUM + 24) + +#define NRF_ERROR_SD_RPC_H5_TRANSPORT (NRF_ERROR_SD_RPC_BASE_NUM + 40) +#define NRF_ERROR_SD_RPC_H5_TRANSPORT_STATE (NRF_ERROR_SD_RPC_BASE_NUM + 41) +#define NRF_ERROR_SD_RPC_H5_TRANSPORT_NO_RESPONSE (NRF_ERROR_SD_RPC_BASE_NUM + 42) +#define NRF_ERROR_SD_RPC_H5_TRANSPORT_SLIP_PAYLOAD_SIZE (NRF_ERROR_SD_RPC_BASE_NUM + 43) +#define NRF_ERROR_SD_RPC_H5_TRANSPORT_SLIP_CALCULATED_PAYLOAD_SIZE (NRF_ERROR_SD_RPC_BASE_NUM + 44) +#define NRF_ERROR_SD_RPC_H5_TRANSPORT_SLIP_DECODING (NRF_ERROR_SD_RPC_BASE_NUM + 45) +#define NRF_ERROR_SD_RPC_H5_TRANSPORT_HEADER_CHECKSUM (NRF_ERROR_SD_RPC_BASE_NUM + 46) +#define NRF_ERROR_SD_RPC_H5_TRANSPORT_PACKET_CHECKSUM (NRF_ERROR_SD_RPC_BASE_NUM + 47) +#define NRF_ERROR_SD_RPC_H5_TRANSPORT_ALREADY_OPEN (NRF_ERROR_SD_RPC_BASE_NUM + 48) +#define NRF_ERROR_SD_RPC_H5_TRANSPORT_ALREADY_CLOSED (NRF_ERROR_SD_RPC_BASE_NUM + 49) + +#define NRF_ERROR_SD_RPC_SERIAL_PORT (NRF_ERROR_SD_RPC_BASE_NUM + 60) +#define NRF_ERROR_SD_RPC_SERIAL_PORT_STATE (NRF_ERROR_SD_RPC_BASE_NUM + 61) +#define NRF_ERROR_SD_RPC_SERIAL_PORT_ALREADY_OPEN (NRF_ERROR_SD_RPC_BASE_NUM + 62) +#define NRF_ERROR_SD_RPC_SERIAL_PORT_ALREADY_CLOSED (NRF_ERROR_SD_RPC_BASE_NUM + 63) + +/**@brief Function pointer type for event callbacks. */ +typedef void (*sd_rpc_status_handler_t)(adapter_t *adapter, sd_rpc_app_status_t code, + const char *message); +typedef void (*sd_rpc_evt_handler_t)(adapter_t *adapter, ble_evt_t *p_ble_evt); +typedef void (*sd_rpc_log_handler_t)(adapter_t *adapter, sd_rpc_log_severity_t severity, + const char *log_message); #ifdef __cplusplus } diff --git a/src/common/adapter_internal.cpp b/src/common/adapter_internal.cpp index 9e14d49ce..365175dab 100755 --- a/src/common/adapter_internal.cpp +++ b/src/common/adapter_internal.cpp @@ -43,76 +43,103 @@ #include -AdapterInternal::AdapterInternal(SerializationTransport *_transport): - eventCallback(nullptr), - statusCallback(nullptr), - logCallback(nullptr), - logSeverityFilter(SD_RPC_LOG_TRACE) -{ - this->transport = _transport; -} - +AdapterInternal::AdapterInternal(SerializationTransport *_transport) + : transport(_transport) + , eventCallback(nullptr) + , statusCallback(nullptr) + , logCallback(nullptr) + , logSeverityFilter(SD_RPC_LOG_TRACE) + , isOpen(false) +{} + AdapterInternal::~AdapterInternal() { delete transport; } -uint32_t AdapterInternal::open(const sd_rpc_status_handler_t status_callback, const sd_rpc_evt_handler_t event_callback, const sd_rpc_log_handler_t log_callback) +uint32_t AdapterInternal::open(const sd_rpc_status_handler_t status_callback, + const sd_rpc_evt_handler_t event_callback, + const sd_rpc_log_handler_t log_callback) { + std::lock_guard lck(publicMethodMutex); + + if (isOpen) + { + return NRF_ERROR_INVALID_STATE; + } + + isOpen = true; + statusCallback = status_callback; - eventCallback = event_callback; - logCallback = log_callback; + eventCallback = event_callback; + logCallback = log_callback; - auto boundStatusHandler = std::bind(&AdapterInternal::statusHandler, this, std::placeholders::_1, std::placeholders::_2); - auto boundEventHandler = std::bind(&AdapterInternal::eventHandler, this, std::placeholders::_1); - auto boundLogHandler = std::bind(&AdapterInternal::logHandler, this, std::placeholders::_1, std::placeholders::_2); + const auto boundStatusHandler = std::bind(&AdapterInternal::statusHandler, this, + std::placeholders::_1, std::placeholders::_2); + const auto boundEventHandler = + std::bind(&AdapterInternal::eventHandler, this, std::placeholders::_1); + const auto boundLogHandler = + std::bind(&AdapterInternal::logHandler, this, std::placeholders::_1, std::placeholders::_2); return transport->open(boundStatusHandler, boundEventHandler, boundLogHandler); } -uint32_t AdapterInternal::close() const +uint32_t AdapterInternal::close() { + std::lock_guard lck(publicMethodMutex); + + if (!isOpen) + { + return NRF_ERROR_INVALID_STATE; + } + + isOpen = false; + return transport->close(); } -void AdapterInternal::statusHandler(sd_rpc_app_status_t code, const char * message) +void AdapterInternal::statusHandler(const sd_rpc_app_status_t code, const std::string &message) { - adapter_t adapter; - adapter.internal = static_cast(this); - statusCallback(&adapter, code, message); + adapter_t adapter = {}; + adapter.internal = static_cast(this); + + if (statusCallback != nullptr) + { + statusCallback(&adapter, code, message.c_str()); + } } void AdapterInternal::eventHandler(ble_evt_t *event) { // Event Thread - adapter_t adapter; - adapter.internal = static_cast(this); - eventCallback(&adapter, event); + adapter_t adapter = {}; + adapter.internal = static_cast(this); + + if (eventCallback != nullptr) + { + eventCallback(&adapter, event); + } } -void AdapterInternal::logHandler(sd_rpc_log_severity_t severity, std::string log_message) +void AdapterInternal::logHandler(const sd_rpc_log_severity_t severity, + const std::string &log_message) { - adapter_t adapter; - adapter.internal = static_cast(this); + adapter_t adapter = {}; + adapter.internal = static_cast(this); - if((uint32_t) severity >= (uint32_t) logSeverityFilter) + if (logCallback != nullptr && (static_cast(severity) >= static_cast(logSeverityFilter))) { logCallback(&adapter, severity, log_message.c_str()); } } -bool AdapterInternal::isInternalError(const uint32_t error_code) { - if (error_code != NRF_SUCCESS) { - return true; - } - else - { - return false; - } +bool AdapterInternal::isInternalError(const uint32_t error_code) +{ + return error_code != NRF_SUCCESS; } -uint32_t AdapterInternal::logSeverityFilterSet(sd_rpc_log_severity_t severity_filter) +uint32_t AdapterInternal::logSeverityFilterSet(const sd_rpc_log_severity_t severity_filter) { + std::lock_guard lck(publicMethodMutex); logSeverityFilter = severity_filter; return NRF_SUCCESS; } - diff --git a/src/common/app_ble_gap.cpp b/src/common/app_ble_gap.cpp new file mode 100644 index 000000000..8241c9fe5 --- /dev/null +++ b/src/common/app_ble_gap.cpp @@ -0,0 +1,570 @@ +/** + * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +#include "app_ble_gap.h" +#include "nrf_error.h" +#include "ser_config.h" + +#include +#include +#include +#include +#include + +#include + +typedef struct +{ + bool active; + uint8_t adv_handle; + uint8_t *p_adv_data; + uint8_t *p_scan_rsp_data; +} adv_set_t; + +/** + * @brief This structure keeps GAP states for one adapter + */ +typedef struct +{ + // GAP connection - BLE security keys table for storage. + ser_ble_gap_app_keyset_t app_keys_table[SER_MAX_CONNECTIONS]{}; +#if NRF_SD_BLE_API_VERSION >= 6 + // Advertisement sets - BLE advertisement sets + adv_set_t adv_sets[BLE_GAP_ADV_SET_COUNT_MAX]{}; + // Buffer for scan data received + ble_data_t scan_data = {nullptr, 0}; + int scan_data_id{0}; + void *ble_gap_adv_buf_addr[BLE_GAP_ADV_SET_COUNT_MAX]{}; +#endif // NRF_SD_BLE_API_VERSION >= 6 +} adapter_ble_gap_state_t; + +/** + * @brief This map keeps the GAP states (see @ref adapter_ble_gap_state_t) for adapters used + */ +static std::map> adapters_gap_state; + +/** + * @brief This structure keeps information related to an adapter key + * + * An adapter key is used to tell the codecs what adapter_ble_gap_state_t to + * use during encoding and decoding. + * + */ +typedef struct +{ + /** + * @brief adapter_id that points to the @ref adapter_ble_gap_state_t [adapter GAP state] + * currently used by codecs + */ + void *adapter_id{nullptr}; + + /** + * @brief Mutex that protects changing the adapter GAP state while encoding/decoding is in + * progress + */ + std::mutex codec_mutex; +} adapter_codec_context_t; + +/** + * @brief Adapter key used for encoding/decoding request reply commands + */ +static adapter_codec_context_t current_request_reply_context; + +/** + * @brief Adapter key used for decoding events + */ +static adapter_codec_context_t current_event_context; + +uint32_t app_ble_gap_state_create(void *adapter_id) +{ + if (adapters_gap_state.count(adapter_id) == 1) + { + return NRF_ERROR_SD_RPC_INVALID_STATE; + } + + adapters_gap_state[adapter_id] = std::make_shared(); + + return NRF_SUCCESS; +} + +uint32_t app_ble_gap_state_delete(void *adapter_id) +{ + if (adapters_gap_state.erase(adapter_id) != 1) + { + return NRF_ERROR_SD_RPC_INVALID_STATE; + } + + // TODO: if this key is used in request_reply_key + // TODO: or event_key, remove them from the keys + // TODO: and unlock any keys + + return NRF_SUCCESS; +} + +void app_ble_gap_set_current_adapter_id(void *adapter_id, + const app_ble_gap_adapter_codec_context_t key_type) +{ + if (key_type == EVENT_CODEC_CONTEXT) + { + current_event_context.codec_mutex.lock(); + current_event_context.adapter_id = adapter_id; + } + else if (key_type == REQUEST_REPLY_CODEC_CONTEXT) + { + current_request_reply_context.codec_mutex.lock(); + current_request_reply_context.adapter_id = adapter_id; + } +} + +void app_ble_gap_unset_current_adapter_id(const app_ble_gap_adapter_codec_context_t key_type) +{ + if (key_type == EVENT_CODEC_CONTEXT) + { + current_event_context.codec_mutex.unlock(); + current_event_context.adapter_id = nullptr; + } + else if (key_type == REQUEST_REPLY_CODEC_CONTEXT) + { + current_request_reply_context.codec_mutex.unlock(); + current_request_reply_context.adapter_id = nullptr; + } +} + +uint32_t +app_ble_gap_check_current_adapter_set(const app_ble_gap_adapter_codec_context_t codec_context) +{ + if (codec_context == EVENT_CODEC_CONTEXT) + { + return current_event_context.adapter_id != nullptr; + } + else if (codec_context == REQUEST_REPLY_CODEC_CONTEXT) + { + return current_request_reply_context.adapter_id != nullptr; + } + + return false; +} + +uint32_t app_ble_gap_sec_keys_storage_create(uint16_t conn_handle, uint32_t *p_index) +{ + if (!app_ble_gap_check_current_adapter_set(REQUEST_REPLY_CODEC_CONTEXT)) + { + return NRF_ERROR_SD_RPC_INVALID_STATE; + } + + try + { + const auto gap_state = adapters_gap_state.at(current_request_reply_context.adapter_id); + + // Assumption: conn_handle is always starting from 0 and up to SER_MAX_CONNECTIONS (not + // including) + for (auto i = 0; i < SER_MAX_CONNECTIONS; i++) + { + auto &keys = gap_state->app_keys_table[i]; + + if (!keys.conn_active) + { + keys.conn_active = 1; + keys.conn_handle = conn_handle; + *p_index = i; + return NRF_SUCCESS; + } + } + } + catch (const std::out_of_range &) + { + return NRF_ERROR_SD_RPC_INVALID_STATE; + } + + return NRF_ERROR_NO_MEM; +} + +uint32_t app_ble_gap_sec_keys_storage_destroy(const uint16_t conn_handle) +{ + if (!app_ble_gap_check_current_adapter_set(EVENT_CODEC_CONTEXT)) + { + return NRF_ERROR_SD_RPC_INVALID_STATE; + } + + try + { + const auto gap_state = adapters_gap_state.at(current_event_context.adapter_id); + + for (auto &keys : gap_state->app_keys_table) + { + if (keys.conn_handle == conn_handle) + { + keys.conn_active = 0; + return NRF_SUCCESS; + } + } + + return NRF_ERROR_NO_MEM; + } + catch (const std::out_of_range &) + { + return NRF_ERROR_SD_RPC_INVALID_STATE; + } +} + +uint32_t app_ble_gap_sec_keys_find(const uint16_t conn_handle, uint32_t *p_index) +{ + if (!app_ble_gap_check_current_adapter_set(EVENT_CODEC_CONTEXT)) + { + return NRF_ERROR_SD_RPC_INVALID_STATE; + } + + try + { + const auto gap_state = adapters_gap_state.at(current_event_context.adapter_id); + + for (auto i = 0; i < SER_MAX_CONNECTIONS; i++) + { + auto &keys = gap_state->app_keys_table[i]; + if ((keys.conn_handle == conn_handle) && (keys.conn_active == 1)) + { + *p_index = i; + return NRF_SUCCESS; + } + } + + return NRF_ERROR_NOT_FOUND; + } + catch (const std::out_of_range &) + { + return NRF_ERROR_SD_RPC_INVALID_STATE; + } +} + +uint32_t app_ble_gap_sec_keys_get(const uint32_t index, ble_gap_sec_keyset_t **keyset) +{ + if (!app_ble_gap_check_current_adapter_set(EVENT_CODEC_CONTEXT)) + { + return NRF_ERROR_SD_RPC_INVALID_STATE; + } + + try + { + const auto gap_state = adapters_gap_state.at(current_event_context.adapter_id); + *keyset = &(gap_state->app_keys_table[index].keyset); + return NRF_SUCCESS; + } + catch (const std::out_of_range &) + { + return NRF_ERROR_SD_RPC_INVALID_STATE; + } +} + +uint32_t app_ble_gap_sec_keys_update(const uint32_t index, const ble_gap_sec_keyset_t *keyset) +{ + if (!app_ble_gap_check_current_adapter_set(REQUEST_REPLY_CODEC_CONTEXT)) + { + return NRF_ERROR_SD_RPC_INVALID_STATE; + } + + try + { + const auto gap_state = adapters_gap_state.at(current_request_reply_context.adapter_id); + std::memcpy(&(gap_state->app_keys_table[index].keyset), keyset, + sizeof(ble_gap_sec_keyset_t)); + return NRF_SUCCESS; + } + catch (const std::out_of_range &) + { + return NRF_ERROR_SD_RPC_INVALID_STATE; + } +} + +uint32_t app_ble_gap_state_reset() +{ + if (!app_ble_gap_check_current_adapter_set(REQUEST_REPLY_CODEC_CONTEXT)) + { + return NRF_ERROR_SD_RPC_INVALID_STATE; + } + + try + { + const auto gap_state = adapters_gap_state.at(current_request_reply_context.adapter_id); + + for (auto &keyset : gap_state->app_keys_table) + { + keyset.conn_active = false; + } + +#if NRF_SD_BLE_API_VERSION >= 6 + for (auto &adv_set : gap_state->adv_sets) + { + adv_set.active = false; + } + + gap_state->scan_data = {nullptr, 0}; +#endif // NRF_SD_BLE_API_VERSION >= 6 + } + catch (const std::out_of_range &) + { + return NRF_ERROR_SD_RPC_INVALID_STATE; + } + + return NRF_SUCCESS; +} + +#if NRF_SD_BLE_API_VERSION >= 6 +uint32_t app_ble_gap_scan_data_set(ble_data_t const *p_data) +{ + if (!app_ble_gap_check_current_adapter_set(REQUEST_REPLY_CODEC_CONTEXT)) + { + return NRF_ERROR_SD_RPC_INVALID_STATE; + } + + try + { + const auto gap_state = adapters_gap_state.at(current_request_reply_context.adapter_id); + + if (gap_state->scan_data.p_data != nullptr) + { + return NRF_ERROR_BUSY; + } + + memcpy(&(gap_state->scan_data), p_data, sizeof(ble_data_t)); + return NRF_SUCCESS; + } + catch (const std::out_of_range &) + { + return NRF_ERROR_SD_RPC_INVALID_STATE; + } +} + +uint32_t app_ble_gap_scan_data_fetch_clear(ble_data_t *p_data) +{ + if (!app_ble_gap_check_current_adapter_set(EVENT_CODEC_CONTEXT)) + { + return NRF_ERROR_SD_RPC_INVALID_STATE; + } + + try + { + const auto gap_state = adapters_gap_state.at(current_event_context.adapter_id); + std::memcpy(p_data, &(gap_state->scan_data), sizeof(ble_data_t)); + + if (gap_state->scan_data.p_data != nullptr) + { + gap_state->scan_data.p_data = nullptr; + return NRF_SUCCESS; + } + + return NRF_ERROR_NOT_FOUND; + } + catch (const std::out_of_range &) + { + return NRF_ERROR_SD_RPC_INVALID_STATE; + } +} + +uint32_t app_ble_gap_adv_set_register(uint8_t adv_handle, uint8_t *p_adv_data, + uint8_t *p_scan_rsp_data) +{ + if (!app_ble_gap_check_current_adapter_set(REQUEST_REPLY_CODEC_CONTEXT)) + { + return NRF_ERROR_SD_RPC_INVALID_STATE; + } + + try + { + const auto gap_state = adapters_gap_state.at(current_request_reply_context.adapter_id); + + for (auto &m_adv_set : gap_state->adv_sets) + { + if (!m_adv_set.active) + { + m_adv_set.active = true; + m_adv_set.adv_handle = adv_handle; + m_adv_set.p_adv_data = p_adv_data; + m_adv_set.p_scan_rsp_data = p_scan_rsp_data; + return NRF_SUCCESS; + } + } + + return NRF_ERROR_NOT_FOUND; + } + catch (const std::out_of_range &) + { + return NRF_ERROR_SD_RPC_INVALID_STATE; + } +} + +uint32_t app_ble_gap_adv_set_unregister(uint8_t adv_handle, uint8_t **pp_adv_data, + uint8_t **pp_scan_rsp_data) +{ + if (!app_ble_gap_check_current_adapter_set(EVENT_CODEC_CONTEXT)) + { + return NRF_ERROR_SD_RPC_INVALID_STATE; + } + + try + { + const auto gap_state = adapters_gap_state.at(current_event_context.adapter_id); + + for (auto &m_adv_set : gap_state->adv_sets) + { + if (m_adv_set.active && (m_adv_set.adv_handle == adv_handle)) + { + m_adv_set.active = false; + *pp_adv_data = m_adv_set.p_adv_data; + *pp_scan_rsp_data = m_adv_set.p_scan_rsp_data; + return NRF_SUCCESS; + } + } + + return NRF_ERROR_NOT_FOUND; + } + catch (const std::out_of_range &) + { + return NRF_ERROR_SD_RPC_INVALID_STATE; + } +} + +int app_ble_gap_adv_buf_register(void *p_buf) +{ + if (!app_ble_gap_check_current_adapter_set(REQUEST_REPLY_CODEC_CONTEXT)) + { + std::cerr << "PROGRAM LOGIC ERROR: app_ble_gap_adv_buf_register not called from context REQUEST_REPLY_CODEC_CONTEXT, terminating" << std::endl; + std::terminate(); + } + + if (p_buf == nullptr) + { + return 0; + } + + try + { + const auto gap_state = adapters_gap_state.at(current_request_reply_context.adapter_id); + + auto id = 1; + + // Find available location in ble_gap_adv_buf_addr for + // store this new buffer pointer. + for (auto &addr : gap_state->ble_gap_adv_buf_addr) + { + if (addr == nullptr) + { + addr = p_buf; + return id; + } + id++; + } + + return -1; + } + catch (const std::out_of_range &) + { + return -1; + } +} + +void *app_ble_gap_adv_buf_unregister(const int id, const bool event_context) +{ + if (!app_ble_gap_check_current_adapter_set(event_context ? EVENT_CODEC_CONTEXT + : REQUEST_REPLY_CODEC_CONTEXT)) + { + return nullptr; + } + + if (id == 0) + { + return nullptr; + } + + const auto gap_state = + adapters_gap_state.at(event_context ? current_event_context.adapter_id + : current_request_reply_context.adapter_id); + + auto ret = gap_state->ble_gap_adv_buf_addr[id - 1]; + gap_state->ble_gap_adv_buf_addr[id - 1] = nullptr; + + return ret; +} + +// Update the adapter gap state scan_data_id variable based on pointer received??? +void app_ble_gap_scan_data_set(const uint8_t *p_scan_data) +{ + if (!app_ble_gap_check_current_adapter_set(REQUEST_REPLY_CODEC_CONTEXT)) + { + return; + } + + // Find location for scan_data + const auto gap_state = adapters_gap_state.at(current_request_reply_context.adapter_id); + + auto id = 0; + + // Check if ptr to scan data is already registered??? + for (auto &addr : gap_state->ble_gap_adv_buf_addr) + { + if (addr == p_scan_data) + { + gap_state->scan_data_id = id + 1; + return; + } + id++; + } + + gap_state->scan_data_id = 0; +} + +void app_ble_gap_scan_data_unset(bool free) +{ + if (!app_ble_gap_check_current_adapter_set(REQUEST_REPLY_CODEC_CONTEXT)) + { + return; + } + + const auto gap_state = adapters_gap_state.at(current_request_reply_context.adapter_id); + + if (gap_state->scan_data_id) + { + if (free) + { + app_ble_gap_adv_buf_unregister(gap_state->scan_data_id, false); + } + gap_state->scan_data_id = 0; + } +} + +#endif // NRF_SD_BLE_API_VERSION >= 6 diff --git a/src/common/ble_common.cpp b/src/common/ble_common.cpp index ccfa6a440..34c4cf502 100755 --- a/src/common/ble_common.cpp +++ b/src/common/ble_common.cpp @@ -35,72 +35,96 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - #include "ble_common.h" +#include "ble_common.h" #include #include #include "adapter_internal.h" +#include "app_ble_gap.h" #include "nrf_error.h" #include "ser_config.h" -uint32_t encode_decode(adapter_t *adapter, encode_function_t encode_function, decode_function_t decode_function) +// AdapterRequestReplyCodecContext + +RequestReplyCodecContext::RequestReplyCodecContext(void *adapterId) { - uint32_t tx_buffer_length = SER_HAL_TRANSPORT_MAX_PKT_SIZE; - uint32_t rx_buffer_length = 0; + app_ble_gap_set_current_adapter_id(adapterId, REQUEST_REPLY_CODEC_CONTEXT); +} - std::unique_ptr tx_buffer(static_cast(std::malloc(SER_HAL_TRANSPORT_MAX_PKT_SIZE))); - std::unique_ptr rx_buffer(static_cast(std::malloc(SER_HAL_TRANSPORT_MAX_PKT_SIZE))); +RequestReplyCodecContext::~RequestReplyCodecContext() +{ + app_ble_gap_unset_current_adapter_id(REQUEST_REPLY_CODEC_CONTEXT); +} - std::stringstream error_message; +EventCodecContext::EventCodecContext(void *adapterId) +{ + app_ble_gap_set_current_adapter_id(adapterId, EVENT_CODEC_CONTEXT); +} - auto _adapter = static_cast(adapter->internal); +EventCodecContext::~EventCodecContext() +{ + app_ble_gap_unset_current_adapter_id(EVENT_CODEC_CONTEXT); +} - uint32_t err_code = encode_function(tx_buffer.get(), &tx_buffer_length); +uint32_t encode_decode(adapter_t *adapter, const encode_function_t &encode_function, + const decode_function_t &decode_function) +{ + std::stringstream error_message; + auto _adapter = static_cast(adapter->internal); - if (_adapter->isInternalError(err_code)) + // Create rx_buffer + std::shared_ptr> rx_buffer; + + if (decode_function) { - error_message << "Not able to encode packet. Code #" << err_code; - _adapter->statusHandler(PKT_ENCODE_ERROR, error_message.str().c_str()); - return NRF_ERROR_INTERNAL; + rx_buffer = std::make_shared>(SER_HAL_TRANSPORT_MAX_PKT_SIZE ); } - if (decode_function != nullptr) - { - err_code = _adapter->transport->send( - tx_buffer.get(), - tx_buffer_length, - rx_buffer.get(), - &rx_buffer_length); - } - else + // Create tx_buffer + uint32_t tx_buffer_length = SER_HAL_TRANSPORT_MAX_PKT_SIZE; + std::vector tx_buffer(tx_buffer_length); + auto err_code = encode_function(tx_buffer.data(), &tx_buffer_length); + tx_buffer.resize(tx_buffer_length); + + if (AdapterInternal::isInternalError(err_code)) { - err_code = _adapter->transport->send( - tx_buffer.get(), - tx_buffer_length, - nullptr, - &rx_buffer_length); + error_message << "Not able to encode packet. Code: 0x" << std::hex << err_code; + _adapter->statusHandler(PKT_ENCODE_ERROR, error_message.str()); + return NRF_ERROR_SD_RPC_ENCODE; } - if (_adapter->isInternalError(err_code)) + err_code = _adapter->transport->send(tx_buffer, rx_buffer); + + if (AdapterInternal::isInternalError(err_code)) { - error_message << "Error sending packet to target. Code #" << err_code; - _adapter->statusHandler(PKT_SEND_ERROR, error_message.str().c_str()); - return NRF_ERROR_INTERNAL; + error_message << "Error sending packet to target. Code: 0x" << std::hex << err_code; + _adapter->statusHandler(PKT_SEND_ERROR, error_message.str()); + + switch (err_code) + { + case NRF_ERROR_SD_RPC_H5_TRANSPORT_NO_RESPONSE: + return NRF_ERROR_SD_RPC_NO_RESPONSE; + case NRF_ERROR_SD_RPC_H5_TRANSPORT_STATE: + return NRF_ERROR_SD_RPC_INVALID_STATE; + default: + return NRF_ERROR_SD_RPC_SEND; + } } uint32_t result_code = NRF_SUCCESS; - if (decode_function != nullptr) + if (decode_function) { - err_code = decode_function(rx_buffer.get(), rx_buffer_length, &result_code); + err_code = decode_function(rx_buffer->data(), static_cast(rx_buffer->size()), + &result_code); } - if (_adapter->isInternalError(err_code)) + if (AdapterInternal::isInternalError(err_code)) { - error_message << "Not able to decode packet. Code #" << err_code; - _adapter->statusHandler(PKT_DECODE_ERROR, error_message.str().c_str()); - return NRF_ERROR_INTERNAL; + error_message << "Not able to decode packet. Code 0x" << std::hex << err_code; + _adapter->statusHandler(PKT_DECODE_ERROR, error_message.str()); + return NRF_ERROR_SD_RPC_DECODE; } return result_code; diff --git a/src/common/platform/linux/serial_port_enum.cpp b/src/common/platform/linux/serial_port_enum.cpp index 955f24696..203743af7 100755 --- a/src/common/platform/linux/serial_port_enum.cpp +++ b/src/common/platform/linux/serial_port_enum.cpp @@ -45,33 +45,26 @@ #include "serial_port_enum.h" -using namespace std; - -typedef struct serial_device_t { - char port[MAXPATHLEN]; - char locationId[MAXPATHLEN]; - char vendorId[MAXPATHLEN]; - char productId[MAXPATHLEN]; - char manufacturer[MAXPATHLEN]; - char serialNumber[MAXPATHLEN]; -} serial_device_t; - const char* SEGGER_VENDOR_ID = "1366"; const char* NXP_VENDOR_ID = "0d28"; -typedef vector adapter_list_t; +std::string to_str(const char* s) +{ + // NOLINTNEXTLINE(modernize-use-nullptr) + return (s != NULL) ? std::string(s) : std::string(); +} -static adapter_list_t* GetAdapters() +std::list EnumSerialPorts() { // Setup return value - adapter_list_t* devices = new adapter_list_t(); + std::list devices; // Setup udev related variables struct udev *udev_ctx = udev_new(); - assert(udev_ctx != NULL); + assert(udev_ctx != NULL); // NOLINT(modernize-use-nullptr) struct udev_enumerate *udev_enum = udev_enumerate_new(udev_ctx); - assert(udev_enum != NULL); + assert(udev_enum != NULL); // NOLINT(modernize-use-nullptr) udev_enumerate_add_match_subsystem(udev_enum, "tty"); udev_enumerate_scan_devices(udev_enum); @@ -93,22 +86,28 @@ static adapter_list_t* GetAdapters() "usb_device" ); - const char *idVendor = udev_device_get_sysattr_value(udev_usb_dev, "idVendor"); + std::string idVendor = to_str(udev_device_get_sysattr_value(udev_usb_dev, "idVendor")); + std::string manufacturer = to_str(udev_device_get_sysattr_value(udev_usb_dev,"manufacturer")); - // Only add SEGGER and ARM (even though VENDOR_ID is NXPs...) devices to list - if(idVendor != NULL && ((strcmp(idVendor, SEGGER_VENDOR_ID) == 0) || (strcmp(idVendor, NXP_VENDOR_ID) == 0))) + if( + ((idVendor == SEGGER_VENDOR_ID) || (idVendor == NXP_VENDOR_ID)) + && ((manufacturer == "SEGGER") + || (strncasecmp(manufacturer.c_str(), "arm", 3) == 0) + || (strncasecmp(manufacturer.c_str(), "mbed", 4) == 0)) + ) { - serial_device_t *serial_device = (serial_device_t*)malloc(sizeof(serial_device_t)); - memset(serial_device, 0, sizeof(serial_device_t)); - - strcpy(serial_device->vendorId, idVendor); - strcpy(serial_device->port, devname); - strcpy(serial_device->locationId, path); - strcpy(serial_device->productId, udev_device_get_sysattr_value(udev_usb_dev, "idProduct")); - strcpy(serial_device->manufacturer, udev_device_get_sysattr_value(udev_usb_dev,"manufacturer")); - strcpy(serial_device->serialNumber, udev_device_get_sysattr_value(udev_usb_dev, "serial")); - - devices->push_back(serial_device); + std::string serialNumber = to_str(udev_device_get_sysattr_value(udev_usb_dev, "serial")); + std::string idProduct = to_str(udev_device_get_sysattr_value(udev_usb_dev, "idProduct")); + + devices.push_back(SerialPortDesc { + devname, + manufacturer, + serialNumber, + "", + path, + idVendor, + idProduct + }); } udev_device_unref(udev_tty_dev); @@ -119,49 +118,3 @@ static adapter_list_t* GetAdapters() return devices; } -uint32_t EnumSerialPorts(std::list& descs) -{ - - adapter_list_t* devices = GetAdapters(); - - for(auto device : *devices) - { - if((strcmp(device->manufacturer,"SEGGER") == 0) - || (strcasecmp(device->manufacturer, "arm") == 0) - || (strcasecmp(device->manufacturer, "mbed") == 0)) - { - SerialPortDesc* resultItem = new SerialPortDesc(); - - resultItem->comName = device->port; - - if (device->locationId != NULL) { - resultItem->locationId = device->locationId; - } - - if (device->vendorId != NULL) { - resultItem->vendorId = device->vendorId; - } - - if (device->productId != NULL) { - resultItem->productId = device->productId; - } - - if (device->manufacturer != NULL) { - resultItem->manufacturer = device->manufacturer; - } - - if (device->serialNumber != NULL) { - resultItem->serialNumber = device->serialNumber; - } - - descs.push_back(resultItem); - } - - free(device); - } - - devices->clear(); - delete devices; - - return 0; -} diff --git a/src/common/platform/macos_osx/serial_port_enum.cpp b/src/common/platform/macos_osx/serial_port_enum.cpp index b2bc0f62d..f2c7f9255 100755 --- a/src/common/platform/macos_osx/serial_port_enum.cpp +++ b/src/common/platform/macos_osx/serial_port_enum.cpp @@ -69,7 +69,6 @@ #include #include -#include #include #include @@ -111,7 +110,6 @@ const char* SEGGER_VENDOR_ID = "1366"; typedef vector adapter_list_t; static mach_port_t masterPort; -static io_registry_entry_t root; // Function prototypes static void FindModems(io_iterator_t *matchingServices); @@ -120,7 +118,6 @@ static adapter_list_t* GetAdapters(); static void FindModems(io_iterator_t *matchingServices) { - kern_return_t kernResult; CFMutableDictionaryRef classesToMatch; classesToMatch = IOServiceMatching(kIOSerialBSDServiceValue); @@ -135,14 +132,20 @@ static void FindModems(io_iterator_t *matchingServices) kern_return_t status; status = IOMasterPort(MACH_PORT_NULL, &masterPort); - assert(status == kIOReturnSuccess); - /* - root = IORegistryGetRootEntry(masterPort); - assert(root != MACH_PORT_NULL); */ + if (status != kIOReturnSuccess) + { + std::cerr << "Error calling IOMasterPort: " << std::hex << "0x" << status << std::endl; + std::abort(); + } status = IOServiceGetMatchingServices(masterPort, classesToMatch, matchingServices); - assert(status == kIOReturnSuccess); + + if (status != kIOReturnSuccess) + { + std::cerr << "Error calling IOServiceGetMatchingServices: " << std::hex << "0x" << status << std::endl; + std::abort(); + } } static io_registry_entry_t GetUsbDevice(char* pathName) @@ -156,7 +159,12 @@ static io_registry_entry_t GetUsbDevice(char* pathName) io_iterator_t matchingServices; kern_return_t status = IOServiceGetMatchingServices(masterPort, classesToMatch, &matchingServices); - assert(status == kIOReturnSuccess); + + if (status != kIOReturnSuccess) + { + std::cerr << "Error calling IOServiceGetMatchingServices: " << std::hex << "0x" << status << std::endl; + std::abort(); + } io_service_t service; Boolean deviceFound = false; @@ -245,8 +253,6 @@ static adapter_list_t* GetAdapters() // Initialize the returned path *bsdPath = '\0'; - int length = 0; - while ((modemService = IOIteratorNext(serialPortIterator))) { CFTypeRef bsdPathAsCFString; @@ -265,7 +271,11 @@ static adapter_list_t* GetAdapters() kCFStringEncodingUTF8); CFRelease(bsdPathAsCFString); - assert(result); + if (!result) + { + std::cerr << "Error calling CFStringGetCString: " << std::hex << "0x" << result << std::endl; + std::abort(); + } serial_device_t *serial_device = (serial_device_t*)malloc(sizeof(serial_device_t)); memset(serial_device, 0, sizeof(serial_device_t)); @@ -386,24 +396,25 @@ static adapter_list_t* GetAdapters() return devices; } -uint32_t EnumSerialPorts(std::list& descs) +std::list EnumSerialPorts() { + std::list descs; adapter_list_t* devices = GetAdapters(); for(auto device : *devices) { - if((strcmp(device->manufacturer,"SEGGER") == 0) - || (strcasecmp(device->manufacturer, "arm") == 0) - || (strcasecmp(device->manufacturer, "mbed") == 0)) + if((strncmp(device->manufacturer, "SEGGER", 6) == 0) + || (strncasecmp(device->manufacturer, "arm", 3) == 0) + || (strncasecmp(device->manufacturer, "mbed", 4) == 0)) { - SerialPortDesc* resultItem = new SerialPortDesc(); + SerialPortDesc resultItem = {}; - resultItem->comName = device->port; - resultItem->locationId = device->locationId; - resultItem->vendorId = device->vendorId; - resultItem->productId = device->productId; - resultItem->manufacturer = device->manufacturer; - resultItem->serialNumber = device->serialNumber; + resultItem.comName = device->port; + resultItem.locationId = device->locationId; + resultItem.vendorId = device->vendorId; + resultItem.productId = device->productId; + resultItem.manufacturer = device->manufacturer; + resultItem.serialNumber = device->serialNumber; descs.push_back(resultItem); } @@ -414,5 +425,5 @@ uint32_t EnumSerialPorts(std::list& descs) devices->clear(); delete devices; - return 0; + return descs; } diff --git a/src/common/platform/win/serial_port_enum.cpp b/src/common/platform/win/serial_port_enum.cpp index 9686347cd..de2837916 100755 --- a/src/common/platform/win/serial_port_enum.cpp +++ b/src/common/platform/win/serial_port_enum.cpp @@ -92,8 +92,10 @@ * VID 0403 / PID 6001 - Arduino Diecimila * */ -uint32_t EnumSerialPorts(std::list& descs) +std::list EnumSerialPorts() { + std::list descs; + DISPATCH_OBJ(wmiSvc); DISPATCH_OBJ(colDevices); @@ -101,7 +103,7 @@ uint32_t EnumSerialPorts(std::list& descs) dhToggleExceptions(FALSE); dhGetObject(L"winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\cimv2", nullptr, &wmiSvc); - dhGetValue(L"%o", &colDevices, wmiSvc, L".ExecQuery(%S)", L"Select * from Win32_PnPEntity"); + dhGetValue(L"%o", &colDevices, wmiSvc, L".ExecQuery(%S)", L"Select * from Win32_PnPEntity WHERE Name LIKE '%COM%'"); FOR_EACH(objDevice, colDevices, NULL) { char* name = nullptr; @@ -122,16 +124,16 @@ uint32_t EnumSerialPorts(std::list& descs) { char *next_token = NULL; auto comname = strtok_s( match, "()", &next_token); - auto resultItem = new SerialPortDesc(); - resultItem->comName = comname; - resultItem->manufacturer = manu; - resultItem->pnpId = pnpid; - descs.push_back(resultItem); + SerialPortDesc resultItem = {}; + resultItem.comName = comname; + resultItem.manufacturer = manu; + resultItem.pnpId = pnpid; string jlinkId = portNameToJlinkId(string(comname)); if (jlinkId != "") { - resultItem->serialNumber = jlinkId.c_str(); + resultItem.serialNumber = jlinkId; } + descs.push_back(resultItem); } dhFreeString(manu); @@ -146,5 +148,5 @@ uint32_t EnumSerialPorts(std::list& descs) dhUninitialize(TRUE); - return 0; + return descs; } diff --git a/src/common/sd_rpc_impl.cpp b/src/common/sd_rpc_impl.cpp index 5bce02727..b7a59fbb7 100644 --- a/src/common/sd_rpc_impl.cpp +++ b/src/common/sd_rpc_impl.cpp @@ -38,77 +38,57 @@ #include "sd_rpc.h" #include "adapter_internal.h" -#include "serialization_transport.h" +#include "ble_common.h" #include "h5_transport.h" +#include "serial_port_enum.h" +#include "serialization_transport.h" #include "uart_boost.h" #include "uart_settings_boost.h" -#include "serial_port_enum.h" -#include "conn_systemreset_app.h" -#include "ble_common.h" - -#include - -#ifndef _WIN32 -#define strcpy_s(a,b,c) strcpy(a,c) -#endif +#include "app_ble_gap.h" +#include uint32_t sd_rpc_serial_port_enum(sd_rpc_serial_port_desc_t serial_port_descs[], uint32_t *size) { - std::list descs; - uint32_t ret; - - if(!size) + if (size == nullptr) { return NRF_ERROR_NULL; } - ret = EnumSerialPorts(descs); - - if(ret != NRF_SUCCESS) - { - return ret; - } + const std::list &descs = EnumSerialPorts(); - if(descs.size() > *size) + if (descs.size() > *size) { - ret = NRF_ERROR_DATA_SIZE; + return NRF_ERROR_DATA_SIZE; } - *size = (uint32_t) descs.size(); - - if(ret == NRF_SUCCESS) - { - int i = 0; - for(auto it = descs.begin(); it != descs.end(); ++it) - { - strcpy_s(serial_port_descs[i].port, SD_RPC_MAXPATHLEN, (*it)->comName.c_str()); - strcpy_s(serial_port_descs[i].manufacturer, SD_RPC_MAXPATHLEN, (*it)->manufacturer.c_str()); - strcpy_s(serial_port_descs[i].serialNumber, SD_RPC_MAXPATHLEN, (*it)->serialNumber.c_str()); - strcpy_s(serial_port_descs[i].pnpId, SD_RPC_MAXPATHLEN, (*it)->pnpId.c_str()); - strcpy_s(serial_port_descs[i].locationId, SD_RPC_MAXPATHLEN, (*it)->locationId.c_str()); - strcpy_s(serial_port_descs[i].vendorId, SD_RPC_MAXPATHLEN, (*it)->vendorId.c_str()); - strcpy_s(serial_port_descs[i].productId, SD_RPC_MAXPATHLEN, (*it)->productId.c_str()); - - ++i; - } - } + *size = static_cast(descs.size()); - for(auto it = descs.begin(); it != descs.end(); ++it) + auto i = 0; + for (auto &desc : descs) { - delete *it; + strncpy(serial_port_descs[i].port, desc.comName.c_str(), SD_RPC_MAXPATHLEN); + strncpy(serial_port_descs[i].manufacturer, desc.manufacturer.c_str(), SD_RPC_MAXPATHLEN); + strncpy(serial_port_descs[i].serialNumber, desc.serialNumber.c_str(), SD_RPC_MAXPATHLEN); + strncpy(serial_port_descs[i].pnpId, desc.pnpId.c_str(), SD_RPC_MAXPATHLEN); + strncpy(serial_port_descs[i].locationId, desc.locationId.c_str(), SD_RPC_MAXPATHLEN); + strncpy(serial_port_descs[i].vendorId, desc.vendorId.c_str(), SD_RPC_MAXPATHLEN); + strncpy(serial_port_descs[i].productId, desc.productId.c_str(), SD_RPC_MAXPATHLEN); + ++i; } - return ret; + return NRF_SUCCESS; } -physical_layer_t *sd_rpc_physical_layer_create_uart(const char * port_name, uint32_t baud_rate, sd_rpc_flow_control_t flow_control, sd_rpc_parity_t parity) +physical_layer_t *sd_rpc_physical_layer_create_uart(const char *port_name, uint32_t baud_rate, + sd_rpc_flow_control_t flow_control, + sd_rpc_parity_t parity) { - auto physicalLayer = static_cast(malloc(sizeof(physical_layer_t))); + const auto physicalLayer = static_cast(malloc(sizeof(physical_layer_t))); - UartCommunicationParameters uartSettings; - uartSettings.portName = port_name; - uartSettings.baudRate = baud_rate; + UartCommunicationParameters uartSettings = {}; + uartSettings.portName = port_name; + uartSettings.baudRate = baud_rate; if (flow_control == SD_RPC_FLOW_CONTROL_NONE) { @@ -131,67 +111,114 @@ physical_layer_t *sd_rpc_physical_layer_create_uart(const char * port_name, uint uartSettings.stopBits = UartStopBitsOne; uartSettings.dataBits = UartDataBitsEight; - auto uart = new UartBoost(uartSettings); + const auto uart = new UartBoost(uartSettings); physicalLayer->internal = static_cast(uart); return physicalLayer; } -data_link_layer_t *sd_rpc_data_link_layer_create_bt_three_wire(physical_layer_t *physical_layer, uint32_t retransmission_interval) +data_link_layer_t *sd_rpc_data_link_layer_create_bt_three_wire(physical_layer_t *physical_layer, + uint32_t retransmission_interval) { - auto dataLinkLayer = static_cast(malloc(sizeof(data_link_layer_t))); - auto physicalLayer = static_cast(physical_layer->internal); - auto h5 = new H5Transport(physicalLayer, retransmission_interval); - dataLinkLayer->internal = static_cast(h5); + const auto dataLinkLayer = static_cast(malloc(sizeof(data_link_layer_t))); + const auto physicalLayer = static_cast(physical_layer->internal); + const auto h5 = new H5Transport(physicalLayer, retransmission_interval); + dataLinkLayer->internal = static_cast(h5); return dataLinkLayer; } -transport_layer_t *sd_rpc_transport_layer_create(data_link_layer_t *data_link_layer, uint32_t response_timeout) +transport_layer_t *sd_rpc_transport_layer_create(data_link_layer_t *data_link_layer, + uint32_t response_timeout) { - auto transportLayer = static_cast(malloc(sizeof(transport_layer_t))); - auto dataLinkLayer = static_cast(data_link_layer->internal); - auto serialization = new SerializationTransport(dataLinkLayer, response_timeout); - transportLayer->internal = serialization; + const auto transportLayer = static_cast(malloc(sizeof(transport_layer_t))); + const auto dataLinkLayer = static_cast(data_link_layer->internal); + const auto serialization = new SerializationTransport(dataLinkLayer, response_timeout); + transportLayer->internal = serialization; return transportLayer; } -adapter_t *sd_rpc_adapter_create(transport_layer_t* transport_layer) +adapter_t *sd_rpc_adapter_create(transport_layer_t *transport_layer) { - auto adapterLayer = static_cast(malloc(sizeof(adapter_t))); - auto transportLayer = static_cast(transport_layer->internal); - auto adapter = new AdapterInternal(transportLayer); - adapterLayer->internal = static_cast(adapter); + const auto adapterLayer = static_cast(malloc(sizeof(adapter_t))); + const auto transportLayer = static_cast(transport_layer->internal); + const auto adapter = new AdapterInternal(transportLayer); + adapterLayer->internal = static_cast(adapter); return adapterLayer; } void sd_rpc_adapter_delete(adapter_t *adapter) { - auto adapterLayer = static_cast(adapter->internal); + const auto adapterLayer = static_cast(adapter->internal); + + if (adapterLayer == nullptr) + { + return; + } + delete adapterLayer; + adapter->internal = nullptr; } -uint32_t sd_rpc_open(adapter_t *adapter, sd_rpc_status_handler_t status_handler, sd_rpc_evt_handler_t event_handler, sd_rpc_log_handler_t log_handler) +uint32_t sd_rpc_open(adapter_t *adapter, sd_rpc_status_handler_t status_handler, + sd_rpc_evt_handler_t event_handler, sd_rpc_log_handler_t log_handler) { auto adapterLayer = static_cast(adapter->internal); - return adapterLayer->open(status_handler, event_handler, log_handler); + + if (adapterLayer == nullptr) + { + return NRF_ERROR_INVALID_PARAM; + } + + const auto err_code = adapterLayer->open(status_handler, event_handler, log_handler); + + if (err_code != NRF_SUCCESS) + { + return err_code; + } + + // Create a BLE GAP state object + return app_ble_gap_state_create(adapterLayer->transport); } uint32_t sd_rpc_close(adapter_t *adapter) { - auto adapterLayer = static_cast(adapter->internal); + const auto adapterLayer = static_cast(adapter->internal); + + if (adapterLayer == nullptr) + { + return NRF_ERROR_INVALID_PARAM; + } + + // Delete BLE GAP state object + app_ble_gap_state_delete(adapterLayer->transport); + return adapterLayer->close(); } -uint32_t sd_rpc_log_handler_severity_filter_set(adapter_t *adapter, sd_rpc_log_severity_t severity_filter) +uint32_t sd_rpc_log_handler_severity_filter_set(adapter_t *adapter, + sd_rpc_log_severity_t severity_filter) { - auto adapterLayer = static_cast(adapter->internal); + auto adapterLayer = static_cast(adapter->internal); + + if (adapterLayer == nullptr) + { + return NRF_ERROR_INVALID_PARAM; + } + return adapterLayer->logSeverityFilterSet(severity_filter); } -uint32_t sd_rpc_conn_reset(adapter_t *adapter) +uint32_t sd_rpc_conn_reset(adapter_t *adapter, sd_rpc_reset_t reset_mode) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { - return conn_systemreset_enc(buffer, length); - }; + auto adapterLayer = static_cast(adapter->internal); + + if (adapterLayer == nullptr) + { + return NRF_ERROR_INVALID_PARAM; + } + + const uint32_t tx_buffer_length = 1; // This command has 1 byte payload, hence length 1 + std::vector tx_buffer(tx_buffer_length); + tx_buffer[0] = static_cast(reset_mode); - return encode_decode(adapter, encode_function, nullptr); + return adapterLayer->transport->send(tx_buffer, nullptr, SERIALIZATION_RESET_CMD); } diff --git a/src/common/transport/h5.cpp b/src/common/transport/h5.cpp index 34fb6a326..8e0f11700 100755 --- a/src/common/transport/h5.cpp +++ b/src/common/transport/h5.cpp @@ -37,21 +37,22 @@ #include "h5.h" #include "nrf_error.h" -#include +#include "sd_rpc_types.h" #include +#include -const uint8_t seqNumMask = 0x07; -const uint8_t ackNumMask = 0x07; -const uint8_t ackNumPos = 3; -const uint8_t crcPresentMask = 0x01; -const uint8_t crcPresentPos = 6; +const uint8_t seqNumMask = 0x07; +const uint8_t ackNumMask = 0x07; +const uint8_t ackNumPos = 3; +const uint8_t crcPresentMask = 0x01; +const uint8_t crcPresentPos = 6; const uint8_t reliablePacketMask = 0x01; -const uint8_t reliablePacketPos = 7; +const uint8_t reliablePacketPos = 7; -const uint8_t packetTypeMask = 0x0F; -const uint16_t payloadLengthFirstNibbleMask = 0x000F; +const uint8_t packetTypeMask = 0x0F; +const uint16_t payloadLengthFirstNibbleMask = 0x000F; const uint16_t payloadLengthSecondNibbleMask = 0x0FF0; -const uint8_t payloadLengthOffset = 4; +const uint8_t payloadLengthOffset = 4; uint8_t calculate_header_checksum(const std::vector &header) { @@ -59,12 +60,13 @@ uint8_t calculate_header_checksum(const std::vector &header) checksum += header[1]; checksum += header[2]; checksum &= 0xFFu; - checksum = (~checksum + 1u); + checksum = (~checksum + 1u); return static_cast(checksum); } -uint16_t calculate_crc16_checksum(const std::vector::const_iterator &start, const std::vector::const_iterator &end) +uint16_t calculate_crc16_checksum(const std::vector::const_iterator &start, + const std::vector::const_iterator &end) { uint16_t crc = 0xFFFF; @@ -79,23 +81,16 @@ uint16_t calculate_crc16_checksum(const std::vector::const_iterator &st return crc; } -void add_h5_header(std::vector &out_packet, - const uint8_t seq_num, - const uint8_t ack_num, - const bool crc_present, - const bool reliable_packet, - const uint8_t packet_type, +void add_h5_header(std::vector &out_packet, const uint8_t seq_num, const uint8_t ack_num, + const bool crc_present, const bool reliable_packet, const uint8_t packet_type, const uint16_t payload_length) { - out_packet.push_back( - (seq_num & seqNumMask) - | ((ack_num & ackNumMask) << ackNumPos) - | ((crc_present & crcPresentMask) << crcPresentPos) - | ((reliable_packet & reliablePacketMask) << reliablePacketPos)); + out_packet.push_back((seq_num & seqNumMask) | ((ack_num & ackNumMask) << ackNumPos) | + ((crc_present & crcPresentMask) << crcPresentPos) | + ((reliable_packet & reliablePacketMask) << reliablePacketPos)); - out_packet.push_back( - (packet_type & packetTypeMask) - | ((payload_length & payloadLengthFirstNibbleMask) << payloadLengthOffset)); + out_packet.push_back((packet_type & packetTypeMask) | + ((payload_length & payloadLengthFirstNibbleMask) << payloadLengthOffset)); out_packet.push_back((payload_length & payloadLengthSecondNibbleMask) >> payloadLengthOffset); out_packet.push_back(calculate_header_checksum(out_packet)); @@ -108,22 +103,12 @@ void add_crc16(std::vector &out_packet) out_packet.push_back((crc16 >> 8) & 0xFF); } -void h5_encode(const std::vector &in_packet, - std::vector &out_packet, - const uint8_t seq_num, - const uint8_t ack_num, - const bool crc_present, - const bool reliable_packet, - const h5_pkt_type_t packet_type) +void h5_encode(const std::vector &in_packet, std::vector &out_packet, + const uint8_t seq_num, const uint8_t ack_num, const bool crc_present, + const bool reliable_packet, const h5_pkt_type_t packet_type) { - add_h5_header( - out_packet, - seq_num, - ack_num, - crc_present, - reliable_packet, - packet_type, - static_cast(in_packet.size())); + add_h5_header(out_packet, seq_num, ack_num, crc_present, reliable_packet, packet_type, + static_cast(in_packet.size())); out_packet.insert(out_packet.end(), in_packet.begin(), in_packet.end()); @@ -134,27 +119,26 @@ void h5_encode(const std::vector &in_packet, } } -uint32_t h5_decode(const std::vector &slipPayload, - std::vector &h5Payload, - uint8_t *seq_num, - uint8_t *ack_num, - bool *_data_integrity, - uint16_t *_payload_length, - uint8_t *_header_checksum, - bool *reliable_packet, +uint32_t h5_decode(const std::vector &slipPayload, std::vector &h5Payload, + uint8_t *seq_num, uint8_t *ack_num, bool *_data_integrity, + uint16_t *_payload_length, uint8_t *_header_checksum, bool *reliable_packet, h5_pkt_type_t *packet_type) { if (slipPayload.size() < 4) { - return NRF_ERROR_INVALID_LENGTH; + return NRF_ERROR_SD_RPC_H5_TRANSPORT_SLIP_PAYLOAD_SIZE; } *seq_num = slipPayload[0] & seqNumMask; *ack_num = (slipPayload[0] >> ackNumPos) & ackNumMask; - const auto crc_present = static_cast(((slipPayload[0] >> crcPresentPos) & crcPresentMask) != 0); - *reliable_packet = static_cast(((slipPayload[0] >> reliablePacketPos) & reliablePacketMask) != 0); + const auto crc_present = + static_cast(((slipPayload[0] >> crcPresentPos) & crcPresentMask) != 0); + *reliable_packet = + static_cast(((slipPayload[0] >> reliablePacketPos) & reliablePacketMask) != 0); *packet_type = static_cast(slipPayload[1] & packetTypeMask); - const uint16_t payload_length = ((slipPayload[1] >> payloadLengthOffset) & payloadLengthFirstNibbleMask) + (static_cast(slipPayload[2]) << payloadLengthOffset); + const uint16_t payload_length = + ((slipPayload[1] >> payloadLengthOffset) & payloadLengthFirstNibbleMask) + + (static_cast(slipPayload[2]) << payloadLengthOffset); const auto header_checksum = slipPayload[3]; // Check if received packet size matches the packet size stated in header @@ -162,28 +146,33 @@ uint32_t h5_decode(const std::vector &slipPayload, if (slipPayload.size() != calculatedPayloadSize) { - return NRF_ERROR_INVALID_DATA; + return NRF_ERROR_SD_RPC_H5_TRANSPORT_SLIP_CALCULATED_PAYLOAD_SIZE; } - if (_payload_length != nullptr) *_payload_length = payload_length; - if (_data_integrity != nullptr) *_data_integrity = crc_present; - if (_header_checksum != nullptr) *_header_checksum = header_checksum; + if (_payload_length != nullptr) + *_payload_length = payload_length; + if (_data_integrity != nullptr) + *_data_integrity = crc_present; + if (_header_checksum != nullptr) + *_header_checksum = header_checksum; const auto calculated_header_checksum = calculate_header_checksum(slipPayload); if (header_checksum != calculated_header_checksum) { - return NRF_ERROR_INVALID_DATA; + return NRF_ERROR_SD_RPC_H5_TRANSPORT_HEADER_CHECKSUM; } if (crc_present) { - const uint16_t packet_checksum = slipPayload[payload_length + H5_HEADER_LENGTH] + (slipPayload[payload_length + H5_HEADER_LENGTH + 1] << 8); - const auto calculated_packet_checksum = calculate_crc16_checksum(slipPayload.begin(), slipPayload.begin() + payload_length + H5_HEADER_LENGTH); + const uint16_t packet_checksum = slipPayload[payload_length + H5_HEADER_LENGTH] + + (slipPayload[payload_length + H5_HEADER_LENGTH + 1] << 8); + const auto calculated_packet_checksum = calculate_crc16_checksum( + slipPayload.begin(), slipPayload.begin() + payload_length + H5_HEADER_LENGTH); if (packet_checksum != calculated_packet_checksum) { - return NRF_ERROR_INVALID_DATA; + return NRF_ERROR_SD_RPC_H5_TRANSPORT_PACKET_CHECKSUM; } } diff --git a/src/common/transport/h5_transport.cpp b/src/common/transport/h5_transport.cpp index 3ff6bb8c3..0bf860232 100755 --- a/src/common/transport/h5_transport.cpp +++ b/src/common/transport/h5_transport.cpp @@ -53,88 +53,65 @@ #include #include "h5_transport.h" -#include "sd_rpc_types.h" #include "nrf_error.h" +#include "sd_rpc_types.h" #include "h5.h" #include "slip.h" -#include +#include #include +#include #include -#include +#include #include -#include +#include #include -#include -#include - -// Constants use for state machine states UNINITIALIZED and INITIALIZED -const auto NON_ACTIVE_STATE_TIMEOUT = std::chrono::milliseconds(250); // Duration to wait until resending a packet -const uint8_t PACKET_RETRANSMISSIONS = 6; // Number of times to send reliable packets before giving in +const uint8_t PACKET_RETRANSMISSIONS = + 6; // Number of times to send reliable packets before giving in // Other constants -const auto OPEN_WAIT_TIMEOUT = std::chrono::milliseconds(2000); // Duration to wait for state ACTIVE after open is called -const auto RESET_WAIT_DURATION = std::chrono::milliseconds(300); // Duration to wait before continuing UART communication after reset is sent to target + +// Duration to wait for state ACTIVE after open is called +const auto OPEN_WAIT_TIMEOUT = std::chrono::milliseconds(2000); +// Duration to wait before continuing UART communication after reset is sent to target +const auto RESET_WAIT_DURATION = std::chrono::milliseconds(300); #pragma region Public methods -H5Transport::H5Transport(Transport *_nextTransportLayer, uint32_t retransmission_interval) - : Transport(), - seqNum(0), ackNum(0), c0Found(false), - unprocessedData(), incomingPacketCount(0), outgoingPacketCount(0), - errorPacketCount(0), - currentState(STATE_START), - stateMachineReady(false) +H5Transport::H5Transport(Transport *_nextTransportLayer, const uint32_t retransmission_interval) + : nextTransportLayer(_nextTransportLayer) + , seqNum(0) + , ackNum(0) + , c0Found(false) + , retransmissionInterval(std::chrono::milliseconds(retransmission_interval)) + , incomingPacketCount(0) + , outgoingPacketCount(0) + , errorPacketCount(0) + , currentState(STATE_START) + , stateMachineReady(false) + , isOpen(false) { - this->nextTransportLayer = _nextTransportLayer; - retransmissionInterval = std::chrono::milliseconds(retransmission_interval); setupStateMachine(); } -H5Transport::~H5Transport() +H5Transport::~H5Transport() noexcept { delete nextTransportLayer; } -#pragma region Static initializers - -const std::map H5Transport::stateString{ - { STATE_UNKNOWN, "STATE_UNKNOWN" }, - { STATE_START, "STATE_START" }, - { STATE_UNINITIALIZED, "STATE_UNINITIALIZED" }, - { STATE_ACTIVE, "STATE_ACTIVE" }, - { STATE_FAILED, "STATE_FAILED" }, - { STATE_RESET, "STATE_RESET" }, - { STATE_INITIALIZED, "STATE_INITIALIZED" }, - { STATE_CLOSED, "STATE_CLOSED" }, - { STATE_NO_RESPONSE, "STATE_NO_RESPONSE" }, -}; - -const std::map> H5Transport::pkt_pattern = { - { CONTROL_PKT_RESET, {} }, - { CONTROL_PKT_ACK, {} }, - { CONTROL_PKT_SYNC, { SyncFirstByte, SyncSecondByte } }, - { CONTROL_PKT_SYNC_RESPONSE, { SyncRspFirstByte, SyncRspSecondByte } }, - { CONTROL_PKT_SYNC_CONFIG, { SyncConfigFirstByte, SyncConfigSecondByte, SyncConfigField } }, - { CONTROL_PKT_SYNC_CONFIG_RESPONSE, { SyncConfigRspFirstByte, SyncConfigRspSecondByte, SyncConfigField } } -}; +uint32_t H5Transport::open(const status_cb_t &status_callback, const data_cb_t &data_callback, + const log_cb_t &log_callback) +{ + std::lock_guard lck(publicMethodMutex); -const std::map H5Transport::pktTypeString = { - { ACK_PACKET, "ACK" }, - { HCI_COMMAND_PACKET, "HCI_COMMAND_PACKET" }, - { ACL_DATA_PACKET, "ACL_DATA_PACKET" }, - { SYNC_DATA_PACKET, "SYNC_DATA_PACKET" }, - { HCI_EVENT_PACKET, "HCI_EVENT_PACKET" }, - { RESET_PACKET, "RESERVED_5" }, - { VENDOR_SPECIFIC_PACKET, "VENDOR_SPECIFIC" }, - { LINK_CONTROL_PACKET, "LINK_CONTROL_PACKET" }, -}; + if (isOpen) + { + return NRF_ERROR_SD_RPC_H5_TRANSPORT_STATE; + } -#pragma endregion + isOpen = true; -uint32_t H5Transport::open(const status_cb_t status_callback, data_cb_t data_callback, log_cb_t log_callback) -{ auto errorCode = Transport::open(status_callback, data_callback, log_callback); if (errorCode != NRF_SUCCESS) @@ -144,42 +121,54 @@ uint32_t H5Transport::open(const status_cb_t status_callback, data_cb_t data_cal if (currentState != STATE_START) { - log("Not able to open, current state is not valid"); - return NRF_ERROR_INTERNAL; + log(SD_RPC_LOG_FATAL, std::string("Not able to open, current state is not valid")); + return NRF_ERROR_SD_RPC_H5_TRANSPORT_STATE; } // State machine starts in a separate thread. // Wait for the state machine to be ready startStateMachine(); - auto _exitCriterias = dynamic_cast(exitCriterias[currentState].get()); lastPacket.clear(); - statusCallback = std::bind(&H5Transport::statusHandler, this, std::placeholders::_1, std::placeholders::_2); - dataCallback = std::bind(&H5Transport::dataHandler, this, std::placeholders::_1, std::placeholders::_2); - - errorCode = nextTransportLayer->open( - statusCallback, - dataCallback, - upperLogCallback); + statusCallback = + std::bind(&H5Transport::statusHandler, this, std::placeholders::_1, std::placeholders::_2); + dataCallback = + std::bind(&H5Transport::dataHandler, this, std::placeholders::_1, std::placeholders::_2); - std::unique_lock stateMachineLock(stateMachineMutex); + errorCode = nextTransportLayer->open(statusCallback, dataCallback, upperLogCallback); - if (errorCode != NRF_SUCCESS) - { - _exitCriterias->ioResourceError = true; - } - else + try { - _exitCriterias->isOpened = true; - } + std::unique_lock stateMachineLock(stateMachineMutex); - stateMachineLock.unlock(); - stateMachineChange.notify_all(); + const auto currentExitCriteria = exitCriterias.at(currentState); + const auto exitCriteria = dynamic_cast(currentExitCriteria.get()); - if (errorCode != NRF_SUCCESS) + if (exitCriteria == nullptr) + { + std::stringstream ss; + ss << "h5_transport is in state " << stateToString(currentState) + << " but should be in STATE_START. This state is not valid."; + log(SD_RPC_LOG_WARNING, ss.str()); + return NRF_ERROR_SD_RPC_H5_TRANSPORT_STATE; + } + + if (errorCode != NRF_SUCCESS) + { + exitCriteria->ioResourceError = true; + } + else + { + exitCriteria->isOpened = true; + } + + stateMachineLock.unlock(); + stateMachineChange.notify_all(); + } + catch (std::out_of_range &) { - return NRF_ERROR_INTERNAL; + return NRF_ERROR_SD_RPC_H5_TRANSPORT_STATE; } if (waitForState(STATE_ACTIVE, OPEN_WAIT_TIMEOUT)) @@ -190,73 +179,81 @@ uint32_t H5Transport::open(const status_cb_t status_callback, data_cb_t data_cal { switch (state()) { - case STATE_START: - case STATE_RESET: - case STATE_UNINITIALIZED: - case STATE_INITIALIZED: - case STATE_NO_RESPONSE: - // There are two situations on can get timeout: - // 1) there is no response from the device - // 2) non failing state transitions from STATE_START to STATE_ACTIVE did not happen in time period OPEN_WAIT_TIMEOUT - return NRF_ERROR_TIMEOUT; - case STATE_FAILED: - return NRF_ERROR_INTERNAL; - case STATE_CLOSED: - return NRF_ERROR_RESOURCES; - case STATE_ACTIVE: - return NRF_SUCCESS; - default: - return NRF_ERROR_INTERNAL; + case STATE_START: + case STATE_RESET: + case STATE_UNINITIALIZED: + case STATE_INITIALIZED: + case STATE_NO_RESPONSE: + // There are two situations on can get timeout: + // 1) there is no response from the device + // 2) non failing state transitions from STATE_START to STATE_ACTIVE did not happen + // in time period OPEN_WAIT_TIMEOUT + return NRF_ERROR_TIMEOUT; + case STATE_FAILED: + case STATE_CLOSED: + return NRF_ERROR_SD_RPC_H5_TRANSPORT_STATE; + case STATE_ACTIVE: + return NRF_SUCCESS; + default: + return NRF_ERROR_SD_RPC_H5_TRANSPORT_STATE; } } } uint32_t H5Transport::close() { - std::unique_lock stateMachineLock(stateMachineMutex); - auto exitCriteria = exitCriterias[currentState].get(); + std::lock_guard lck(publicMethodMutex); - if (exitCriteria != nullptr) + if (!isOpen) { - exitCriteria->close = true; + return NRF_ERROR_SD_RPC_H5_TRANSPORT_ALREADY_CLOSED; } - // Notify about the change in the state machine - stateMachineLock.unlock(); - stateMachineChange.notify_all(); + isOpen = false; - stopStateMachine(); + try + { + std::unique_lock stateMachineLock(stateMachineMutex); + const auto currentExitCriteria = exitCriterias.at(currentState); + const auto exitCriteria = currentExitCriteria.get(); - auto errorCode1 = nextTransportLayer->close(); - auto errorCode2 = Transport::close(); + if (exitCriteria != nullptr) + { + exitCriteria->close = true; + } - if (errorCode1 != NRF_SUCCESS) - { - return errorCode1; + // Notify about the change in the state machine + stateMachineLock.unlock(); + stateMachineChange.notify_all(); } - else + catch (std::out_of_range &) { - return errorCode2; + std::stringstream ss; + ss << "State " << stateToString(currentState) + << " does not have exit criteria associated with it. Will continue to close the " + "H5Transport."; + log(SD_RPC_LOG_WARNING, ss.str()); } + + stopStateMachine(); + + return nextTransportLayer->close(); } uint32_t H5Transport::send(const std::vector &data) { - if (currentState != STATE_ACTIVE) + std::lock_guard lck(publicMethodMutex); + + if (currentState != STATE_ACTIVE || !isOpen) { - return NRF_ERROR_INVALID_STATE; + return NRF_ERROR_SD_RPC_H5_TRANSPORT_STATE; } - // max theoretical length of encoded packet, aditional 6 bytes h5 encoding and all bytes escaped + 2 packet encapsuling + // max theoretical length of encoded packet, aditional 6 bytes h5 encoding and all bytes escaped + // + 2 packet encapsuling payload_t h5EncodedPacket; - h5_encode(data, - h5EncodedPacket, - seqNum, - ackNum, - true, - true, - VENDOR_SPECIFIC_PACKET); + h5_encode(data, h5EncodedPacket, seqNum, ackNum, true, true, VENDOR_SPECIFIC_PACKET); payload_t encodedPacket; slip_encode(h5EncodedPacket, encodedPacket); @@ -271,7 +268,10 @@ uint32_t H5Transport::send(const std::vector &data) while (remainingRetransmissions--) { logPacket(true, h5EncodedPacket); - nextTransportLayer->send(lastPacket); + const auto err_code = nextTransportLayer->send(lastPacket); + + if (err_code != NRF_SUCCESS) + return err_code; const uint8_t seqNumBefore = seqNum; @@ -281,18 +281,16 @@ uint32_t H5Transport::send(const std::vector &data) // Ref. spurious wakeup: // http://en.cppreference.com/w/cpp/thread/condition_variable // https://en.wikipedia.org/wiki/Spurious_wakeup - if (ackWaitCondition.wait_for( - ackGuard, - std::chrono::milliseconds(retransmissionInterval), - [&] { return seqNum != seqNumBefore; })) - { - lastPacket.clear(); - return NRF_SUCCESS; - } + if (ackWaitCondition.wait_for(ackGuard, std::chrono::milliseconds(retransmissionInterval), + [&] { return seqNum != seqNumBefore; })) + { + lastPacket.clear(); + return NRF_SUCCESS; + } } lastPacket.clear(); - return NRF_ERROR_TIMEOUT; + return NRF_ERROR_SD_RPC_H5_TRANSPORT_NO_RESPONSE; } h5_state_t H5Transport::state() const @@ -316,6 +314,13 @@ void H5Transport::processPacket(const payload_t &packet) if (err_code != NRF_SUCCESS) { errorPacketCount++; + + std::stringstream ss; + ss << "slip_decode error, code: 0x" << std::hex << static_cast(err_code); + ss << ", H5 error count: " << static_cast(errorPacketCount) + << ". raw packet: " << asHex(packet); + log(SD_RPC_LOG_ERROR, ss.str()); + return; } @@ -323,20 +328,19 @@ void H5Transport::processPacket(const payload_t &packet) payload_t h5Payload; - err_code = h5_decode( - slipPayload, - h5Payload, - &seq_num, - &ack_num, - nullptr, - nullptr, - nullptr, - &reliable_packet, - &packet_type); + err_code = h5_decode(slipPayload, h5Payload, &seq_num, &ack_num, nullptr, nullptr, nullptr, + &reliable_packet, &packet_type); if (err_code != NRF_SUCCESS) { errorPacketCount++; + + std::stringstream ss; + ss << "h5_decode error, code: 0x" << std::hex << static_cast(err_code); + ss << ", H5 error count: " << static_cast(errorPacketCount) + << ". raw packet: " << asHex(packet); + log(SD_RPC_LOG_ERROR, ss.str()); + return; } @@ -355,7 +359,13 @@ void H5Transport::processPacket(const payload_t &packet) { if (H5Transport::isSyncResponsePacket(h5Payload)) { - dynamic_cast(exitCriterias[currentState].get())->syncRspReceived = true; + const auto stateCriteria = + dynamic_cast(exitCriterias[currentState].get()); + + if (stateCriteria != nullptr) + { + stateCriteria->syncRspReceived = true; + } } else if (H5Transport::isSyncPacket(h5Payload)) { @@ -364,7 +374,8 @@ void H5Transport::processPacket(const payload_t &packet) } else if (currentState == STATE_INITIALIZED) { - auto exit = dynamic_cast(exitCriterias[currentState].get()); + const auto exit = + dynamic_cast(exitCriterias[currentState].get()); if (H5Transport::isSyncConfigResponsePacket(h5Payload)) { @@ -381,7 +392,8 @@ void H5Transport::processPacket(const payload_t &packet) } else if (currentState == STATE_ACTIVE) { - auto exit = dynamic_cast(exitCriterias[currentState].get()); + const auto exit = + dynamic_cast(exitCriterias[currentState].get()); if (H5Transport::isSyncPacket(h5Payload)) { @@ -416,7 +428,8 @@ void H5Transport::processPacket(const payload_t &packet) { if (ack_num == ((seqNum + 1) & 0x07)) { - // Received a packet with valid ack_num, inform threads that wait the command is received on the other end + // Received a packet with valid ack_num, inform threads that wait the command is + // received on the other end std::lock_guard ackGuard(ackMutex); incrementSeqNum(); ackWaitCondition.notify_all(); @@ -427,7 +440,24 @@ void H5Transport::processPacket(const payload_t &packet) } else { - dynamic_cast(exitCriterias[currentState].get())->irrecoverableSyncError = true; + if (currentState == STATE_ACTIVE) + { + const auto exit = + dynamic_cast(exitCriterias[currentState].get()); + + if (exit != nullptr) + { + exit->irrecoverableSyncError = true; + } + } + else + { + std::stringstream ss; + ss << "h5_transport received ack packet in state " << stateToString(currentState) + << ". ack_num is: " << std::hex << ack_num << " seq_num is: " << std::hex + << seq_num << ". Ignoring the packet."; + log(SD_RPC_LOG_WARNING, ss.str()); + } } } @@ -435,29 +465,37 @@ void H5Transport::processPacket(const payload_t &packet) stateMachineChange.notify_all(); } -void H5Transport::statusHandler(sd_rpc_app_status_t code, const char * error) +void H5Transport::statusHandler(const sd_rpc_app_status_t code, const std::string &message) { if (code == IO_RESOURCES_UNAVAILABLE) { - std::unique_lock stateMachineLock(stateMachineMutex); - auto exitCriteria = exitCriterias[currentState].get(); + try + { + std::unique_lock stateMachineLock(stateMachineMutex); + const auto currentExitCriteria = exitCriterias.at(currentState); + const auto exitCriteria = currentExitCriteria.get(); - if (exitCriteria != nullptr) + if (exitCriteria != nullptr) + { + exitCriteria->ioResourceError = true; + } + + stateMachineLock.unlock(); + stateMachineChange.notify_all(); + } + catch (std::out_of_range &) { - exitCriteria->ioResourceError = true; + std::stringstream ss; + ss << "State " << stateToString(currentState) + << " does not have criteria associated with it."; + log(SD_RPC_LOG_WARNING, ss.str()); } - - stateMachineLock.unlock(); - stateMachineChange.notify_all(); } - if (upperStatusCallback != nullptr) - { - upperStatusCallback(code, error); - } + status(code, message); } -void H5Transport::dataHandler(uint8_t *data, size_t length) +void H5Transport::dataHandler(const uint8_t *data, const size_t length) { payload_t packet; @@ -478,7 +516,8 @@ void H5Transport::dataHandler(uint8_t *data, size_t length) { // End of packet found - // If we have two 0xC0 after another we assume it is the beginning of a new packet, and not the end + // If we have two 0xC0 after another we assume it is the beginning of a new packet, + // and not the end if (packet.size() == 2) { packet.clear(); @@ -497,7 +536,8 @@ void H5Transport::dataHandler(uint8_t *data, size_t length) // Start of packet found c0Found = true; - // Clear previous data from packet since data before the start of packet is irrelevant. + // Clear previous data from packet since data before the start of packet is + // irrelevant. packet.clear(); packet.push_back(0xC0); } @@ -525,223 +565,241 @@ void H5Transport::incrementAckNum() #pragma endregion Processing of incoming packets from UART -#pragma region State machine -void H5Transport::setupStateMachine() -{ - // All states lock on mutex stateMachineMutex. - // The lock is released when values are ready to be updated and when the states goes out of scope. - stateActions[STATE_START] = [this]() -> h5_state_t { - std::unique_lock stateMachineLock(stateMachineMutex); - auto exit = dynamic_cast(exitCriterias[STATE_START].get()); - - stateMachineReady = true; - - // Notify other threads that the state machine is ready - stateMachineLock.unlock(); - stateMachineChange.notify_all(); - stateMachineLock.lock(); +#pragma region State machine - // Wait for notification of a stateMachineChange that exists the state - stateMachineChange.wait(stateMachineLock, [&exit] { return exit->isFullfilled(); }); +h5_state_t H5Transport::stateActionStart() +{ + std::unique_lock stateMachineLock(stateMachineMutex); + auto exit = dynamic_cast(exitCriterias[STATE_START].get()); - // Order is of importance when returning state - if (exit->ioResourceError) - { - return STATE_FAILED; - } + stateMachineReady = true; - if (exit->close) - { - return STATE_CLOSED; - } + // Notify other threads that the state machine is ready + stateMachineLock.unlock(); + stateMachineChange.notify_all(); + stateMachineLock.lock(); - if (exit->isOpened) - { - return STATE_RESET; - } + // Wait for notification of a stateMachineChange that exists the state + stateMachineChange.wait(stateMachineLock, [&exit] { return exit->isFullfilled(); }); + // Order is of importance when returning state + if (exit->ioResourceError) + { return STATE_FAILED; - }; + } - stateActions[STATE_RESET] = [this]() -> h5_state_t { - std::unique_lock stateMachineLock(stateMachineMutex); - auto exit = dynamic_cast(exitCriterias[STATE_RESET].get()); + if (exit->close) + { + return STATE_CLOSED; + } - // Send the reset packet, and wait for the device to reboot and ready for receiving commands - sendControlPacket(CONTROL_PKT_RESET); + if (exit->isOpened) + { + return STATE_RESET; + } - if (statusCallback != nullptr) - { - statusCallback(RESET_PERFORMED, "Target Reset performed"); - } + return STATE_FAILED; +} - exit->resetSent = true; - stateMachineChange.wait_for(stateMachineLock, RESET_WAIT_DURATION, [&exit] { return exit->isFullfilled(); }); - exit->resetWait = true; +h5_state_t H5Transport::stateActionReset() +{ + std::unique_lock stateMachineLock(stateMachineMutex); + auto exit = dynamic_cast(exitCriterias[STATE_RESET].get()); - // Order is of importance when returning state - if (exit->ioResourceError) - { - return STATE_FAILED; - } + // Send the reset packet, and wait for the device to reboot and ready for receiving commands + sendControlPacket(CONTROL_PKT_RESET); - if (exit->close) - { - return STATE_CLOSED; - } + if (statusCallback) + { + statusCallback(RESET_PERFORMED, "Target Reset performed"); + } - if (exit->resetSent && exit->resetWait) - { - return STATE_UNINITIALIZED; - } + exit->resetSent = true; + stateMachineChange.wait_for(stateMachineLock, RESET_WAIT_DURATION, + [&exit] { return exit->isFullfilled(); }); + exit->resetWait = true; + // Order is of importance when returning state + if (exit->ioResourceError) + { return STATE_FAILED; - }; + } - stateActions[STATE_UNINITIALIZED] = [this]() -> h5_state_t + if (exit->close) { - std::unique_lock stateMachineLock(stateMachineMutex); - auto exit = dynamic_cast(exitCriterias[STATE_UNINITIALIZED].get()); - uint8_t syncRetransmission = PACKET_RETRANSMISSIONS; - - while (!exit->isFullfilled() && syncRetransmission > 0) - { - sendControlPacket(CONTROL_PKT_SYNC); - exit->syncSent = true; - stateMachineChange.wait_for(stateMachineLock, NON_ACTIVE_STATE_TIMEOUT, [&exit] { return exit->isFullfilled(); }); - syncRetransmission--; - } + return STATE_CLOSED; + } - // Order is of importance when returning state - if (exit->ioResourceError) - { - return STATE_FAILED; - } + if (exit->resetSent && exit->resetWait) + { + return STATE_UNINITIALIZED; + } - if (exit->close) - { - return STATE_CLOSED; - } + return STATE_FAILED; +}; - if (exit->syncSent && exit->syncRspReceived) - { - return STATE_INITIALIZED; - } +h5_state_t H5Transport::stateActionUninitialized() +{ + std::unique_lock stateMachineLock(stateMachineMutex); + auto exit = + dynamic_cast(exitCriterias[STATE_UNINITIALIZED].get()); + auto syncRetransmission = PACKET_RETRANSMISSIONS; - if (syncRetransmission == 0) - { - std::stringstream status; - status << "No response from device. Tried to send packet " << std::to_string(PACKET_RETRANSMISSIONS) << " times."; - statusHandler(PKT_SEND_MAX_RETRIES_REACHED, status.str().c_str()); - return STATE_NO_RESPONSE; - } + while (!exit->isFullfilled() && syncRetransmission > 0) + { + sendControlPacket(CONTROL_PKT_SYNC); + exit->syncSent = true; + stateMachineChange.wait_for(stateMachineLock, retransmissionInterval, + [&exit] { return exit->isFullfilled(); }); + syncRetransmission--; + } + // Order is of importance when returning state + if (exit->ioResourceError) + { return STATE_FAILED; - }; + } - stateActions[STATE_INITIALIZED] = [this]() -> h5_state_t + if (exit->close) { - std::unique_lock stateMachineLock(stateMachineMutex); - auto exit = dynamic_cast(exitCriterias[STATE_INITIALIZED].get()); - uint8_t syncRetransmission = PACKET_RETRANSMISSIONS; + return STATE_CLOSED; + } - // Send a package immediately - while (!exit->isFullfilled() && syncRetransmission > 0) - { - sendControlPacket(CONTROL_PKT_SYNC_CONFIG); - exit->syncConfigSent = true; + if (exit->syncSent && exit->syncRspReceived) + { + return STATE_INITIALIZED; + } - stateMachineChange.wait_for( - stateMachineLock, - NON_ACTIVE_STATE_TIMEOUT, - [&exit]{ return exit->isFullfilled(); } - ); + if (syncRetransmission == 0) + { + std::stringstream status; + status << "No response from device. Tried to send packet " + << std::to_string(PACKET_RETRANSMISSIONS) << " times."; + statusHandler(PKT_SEND_MAX_RETRIES_REACHED, status.str().c_str()); + return STATE_NO_RESPONSE; + } - syncRetransmission--; - } + return STATE_FAILED; +}; - // Order is of importance when returning state - if (exit->ioResourceError) - { - return STATE_FAILED; - } +h5_state_t H5Transport::stateActionInitialized() +{ + std::unique_lock stateMachineLock(stateMachineMutex); + auto exit = dynamic_cast(exitCriterias[STATE_INITIALIZED].get()); + auto syncRetransmission = PACKET_RETRANSMISSIONS; - if (exit->close) - { - return STATE_CLOSED; - } + // Send a package immediately + while (!exit->isFullfilled() && syncRetransmission > 0) + { + sendControlPacket(CONTROL_PKT_SYNC_CONFIG); + exit->syncConfigSent = true; - if (exit->syncConfigSent && exit->syncConfigRspReceived) - { - return STATE_ACTIVE; - } + stateMachineChange.wait_for(stateMachineLock, retransmissionInterval, + [&exit] { return exit->isFullfilled(); }); - if (syncRetransmission == 0) - { - std::stringstream status; - status << "No response from device. Tried to send packet " << std::to_string(PACKET_RETRANSMISSIONS) << " times."; - statusHandler(PKT_SEND_MAX_RETRIES_REACHED, status.str().c_str()); - return STATE_NO_RESPONSE; - } + syncRetransmission--; + } + // Order is of importance when returning state + if (exit->ioResourceError) + { return STATE_FAILED; - }; + } - stateActions[STATE_ACTIVE] = [this]() -> h5_state_t + if (exit->close) { - std::unique_lock stateMachineLock(stateMachineMutex); - auto exit = dynamic_cast(exitCriterias[STATE_ACTIVE].get()); - - seqNum = 0; - ackNum = 0; + return STATE_CLOSED; + } - statusHandler(CONNECTION_ACTIVE, "Connection active"); - stateMachineChange.wait(stateMachineLock, [this, &exit] { - return exit->isFullfilled(); - }); + if (exit->syncConfigSent && exit->syncConfigRspReceived) + { + return STATE_ACTIVE; + } - if (exit->ioResourceError) - { - return STATE_FAILED; - } + if (syncRetransmission == 0) + { + std::stringstream status; + status << "No response from device. Tried to send packet " + << std::to_string(PACKET_RETRANSMISSIONS) << " times."; + statusHandler(PKT_SEND_MAX_RETRIES_REACHED, status.str().c_str()); + return STATE_NO_RESPONSE; + } - if (exit->close) - { - return STATE_CLOSED; - } + return STATE_FAILED; +}; +h5_state_t H5Transport::stateActionActive() +{ + std::unique_lock stateMachineLock(stateMachineMutex); + auto exit = dynamic_cast(exitCriterias[STATE_ACTIVE].get()); - if (exit->syncReceived || exit->irrecoverableSyncError) - { - return STATE_RESET; - } + seqNum = 0; + ackNum = 0; - return STATE_FAILED; - }; + statusHandler(CONNECTION_ACTIVE, "Connection active"); + stateMachineChange.wait(stateMachineLock, [&exit] { return exit->isFullfilled(); }); // T#2 - stateActions[STATE_FAILED] = [this]() -> h5_state_t + if (exit->ioResourceError) { - log("Entered state failed. No exit exists from this state."); return STATE_FAILED; - }; + } - stateActions[STATE_CLOSED] = [this]() -> h5_state_t + if (exit->close) { - log("Entered state closed."); return STATE_CLOSED; - }; + } - stateActions[STATE_NO_RESPONSE] = [this]() -> h5_state_t + if (exit->syncReceived || exit->irrecoverableSyncError) { - log("No response to data sent to device."); - return STATE_NO_RESPONSE; - }; + return STATE_RESET; + } - // Setup exit criterias - exitCriterias[STATE_START] = std::unique_ptr(new StartExitCriterias()); - exitCriterias[STATE_RESET] = std::unique_ptr(new ResetExitCriterias()); - exitCriterias[STATE_UNINITIALIZED] = std::unique_ptr(new UninitializedExitCriterias()); - exitCriterias[STATE_INITIALIZED] = std::unique_ptr(new InitializedExitCriterias()); - exitCriterias[STATE_ACTIVE] = std::unique_ptr(new ActiveExitCriterias()); + return STATE_FAILED; +}; + +h5_state_t H5Transport::stateActionFailed() +{ + std::lock_guard stateMachineLock(stateMachineMutex); + log(SD_RPC_LOG_FATAL, "Entered state failed. No exit exists from this state."); + return STATE_FAILED; +}; + +h5_state_t H5Transport::stateActionClosed() +{ + std::lock_guard stateMachineLock(stateMachineMutex); + log(SD_RPC_LOG_DEBUG, "Entered state closed."); + return STATE_CLOSED; +}; +h5_state_t H5Transport::stateActionNoResponse() +{ + std::lock_guard stateMachineLock(stateMachineMutex); + log(SD_RPC_LOG_DEBUG, "No response to data sent to device."); + return STATE_NO_RESPONSE; +}; + +void H5Transport::setupStateMachine() +{ + // Setup state actions + // + // The reason for using lambdas calling data member functions is to be able to easier debug when + // compiling the project as a release build Doing it this way allows us to see the symbol name + // when debugging + stateActions[STATE_START] = [this] { return stateActionStart(); }; + stateActions[STATE_RESET] = [this] { return stateActionReset(); }; + stateActions[STATE_UNINITIALIZED] = [this] { return stateActionUninitialized(); }; + stateActions[STATE_INITIALIZED] = [this] { return stateActionInitialized(); }; + stateActions[STATE_ACTIVE] = [this] { return stateActionActive(); }; + stateActions[STATE_FAILED] = [this] { return stateActionFailed(); }; + stateActions[STATE_CLOSED] = [this] { return stateActionClosed(); }; + stateActions[STATE_NO_RESPONSE] = [this] { return stateActionNoResponse(); }; + + // Setup exit criteria + exitCriterias[STATE_START] = std::shared_ptr(new StartExitCriterias()); + exitCriterias[STATE_RESET] = std::shared_ptr(new ResetExitCriterias()); + exitCriterias[STATE_UNINITIALIZED] = + std::shared_ptr(new UninitializedExitCriterias()); + exitCriterias[STATE_INITIALIZED] = + std::shared_ptr(new InitializedExitCriterias()); + exitCriterias[STATE_ACTIVE] = std::shared_ptr(new ActiveExitCriterias()); } void H5Transport::startStateMachine() @@ -756,14 +814,14 @@ void H5Transport::startStateMachine() stateMachineThread = std::thread([this] { stateMachineWorker(); }); // Wait for the state machine to be ready - stateMachineChange.wait(stateMachineLock, [this]() { - return stateMachineReady; - }); + stateMachineChange.wait(stateMachineLock, [this] { return stateMachineReady; }); } else { // Terminate if the state machine thread is joinable (already runs), this should not happen. - std::cerr << __FILE__ << ":" << __LINE__ << " stateMachineThread exists, this should not happen. Terminating." << std::endl; + std::cerr << __FILE__ << ":" << __LINE__ + << " stateMachineThread exists, this should not happen. Terminating." + << std::endl; std::terminate(); } } @@ -779,9 +837,10 @@ void H5Transport::stopStateMachine() // State machine thread void H5Transport::stateMachineWorker() { - while (currentState != STATE_FAILED && currentState != STATE_CLOSED && currentState != STATE_NO_RESPONSE) + while (currentState != STATE_FAILED && currentState != STATE_CLOSED && + currentState != STATE_NO_RESPONSE) { - auto nextState = stateActions[currentState](); + const auto nextState = stateActions[currentState](); // Make sure that state is not changed when assigning a new current state { @@ -792,24 +851,28 @@ void H5Transport::stateMachineWorker() switch (nextState) { case STATE_START: - dynamic_cast(exitCriterias[STATE_START].get())->reset(); + dynamic_cast(exitCriterias[STATE_START].get())->reset(); break; case STATE_RESET: - dynamic_cast(exitCriterias[STATE_RESET].get())->reset(); + dynamic_cast(exitCriterias[STATE_RESET].get())->reset(); break; case STATE_UNINITIALIZED: - dynamic_cast(exitCriterias[STATE_UNINITIALIZED].get())->reset(); + dynamic_cast( + exitCriterias[STATE_UNINITIALIZED].get()) + ->reset(); break; case STATE_INITIALIZED: - dynamic_cast(exitCriterias[STATE_INITIALIZED].get())->reset(); + dynamic_cast(exitCriterias[STATE_INITIALIZED].get()) + ->reset(); break; case STATE_ACTIVE: - dynamic_cast(exitCriterias[STATE_ACTIVE].get())->reset(); + dynamic_cast(exitCriterias[STATE_ACTIVE].get())->reset(); break; case STATE_FAILED: case STATE_CLOSED: case STATE_NO_RESPONSE: - // These are terminal states that do not have exit criterias associated with them + // These are terminal states that do not have exit criteria associated with + // them break; case STATE_UNKNOWN: // Not used @@ -827,7 +890,8 @@ void H5Transport::stateMachineWorker() bool H5Transport::waitForState(h5_state_t state, std::chrono::milliseconds timeout) { std::unique_lock lock(stateMutex); - return stateWaitCondition.wait_for(lock, timeout, [&state, this] { return currentState == state; }); + return stateWaitCondition.wait_for(lock, timeout, + [&state, this] { return currentState == state; }); } #pragma endregion State machine related methods @@ -840,50 +904,37 @@ void H5Transport::sendControlPacket(const control_pkt_type type) switch (type) { - case CONTROL_PKT_RESET: - h5_packet = RESET_PACKET; - break; - case CONTROL_PKT_SYNC: - case CONTROL_PKT_SYNC_RESPONSE: - case CONTROL_PKT_SYNC_CONFIG: - case CONTROL_PKT_SYNC_CONFIG_RESPONSE: - h5_packet = LINK_CONTROL_PACKET; - break; - case CONTROL_PKT_ACK: - h5_packet = ACK_PACKET; - break; - default: - h5_packet = LINK_CONTROL_PACKET; + case CONTROL_PKT_RESET: + h5_packet = RESET_PACKET; + break; + case CONTROL_PKT_SYNC: + case CONTROL_PKT_SYNC_RESPONSE: + case CONTROL_PKT_SYNC_CONFIG: + case CONTROL_PKT_SYNC_CONFIG_RESPONSE: + h5_packet = LINK_CONTROL_PACKET; + break; + case CONTROL_PKT_ACK: + h5_packet = ACK_PACKET; + break; + default: + h5_packet = LINK_CONTROL_PACKET; } payload_t h5Packet; try { - const auto payload = pkt_pattern.at(type); - - h5_encode(payload, - h5Packet, - 0, - type == CONTROL_PKT_ACK ? ackNum : 0, - false, - false, - h5_packet); - } - catch(const std::out_of_range &e) + const auto payload = getPktPattern(type); + + h5_encode(payload, h5Packet, 0, type == CONTROL_PKT_ACK ? ackNum : 0, false, false, + h5_packet); + } + catch (const std::out_of_range &e) { std::stringstream logLine; logLine << "Trying to send unknown control packet to device. " << e.what() << ". Aborting."; - - if (upperLogCallback != nullptr) - { - upperLogCallback(SD_RPC_LOG_INFO, logLine.str()); - } - else - { - std::clog << logLine.str() << std::endl; - } + log(SD_RPC_LOG_INFO, logLine.str()); std::terminate(); } @@ -901,29 +952,57 @@ void H5Transport::sendControlPacket(const control_pkt_type type) #pragma region Debugging std::string H5Transport::stateToString(const h5_state_t state) { - try - { - return stateString.at(state); - } - catch (const std::out_of_range &e) + switch (state) { - std::stringstream ss; - ss << "UNKNOWN state " << e.what(); - return ss.str(); + case STATE_START: + return "STATE_START"; + case STATE_RESET: + return "STATE_RESET"; + case STATE_UNINITIALIZED: + return "STATE_UNINITIALIZED"; + case STATE_INITIALIZED: + return "STATE_INITIALIZED"; + case STATE_ACTIVE: + return "STATE_ACTIVE"; + case STATE_FAILED: + return "STATE_FAILED"; + case STATE_CLOSED: + return "STATE_CLOSED"; + case STATE_NO_RESPONSE: + return "STATE_NO_RESPONSE"; + case STATE_UNKNOWN: + return "STATE_UNKNOWN"; + default: + std::stringstream ss; + ss << "UNKNOWN[0x" << std::hex << static_cast(state) << "]"; + return ss.str(); } } std::string H5Transport::pktTypeToString(const h5_pkt_type_t pktType) { - try - { - return pktTypeString.at(pktType); - } - catch (const std::out_of_range &e) + switch (pktType) { - std::stringstream ss; - ss << "UNKNOWN pktType " << e.what(); - return ss.str(); + case ACK_PACKET: + return "ACK"; + case HCI_COMMAND_PACKET: + return "HCI_COMMAND_PACKET"; + case ACL_DATA_PACKET: + return "ACL_DATA_PACKET"; + case SYNC_DATA_PACKET: + return "SYNC_DATA_PACKET"; + case HCI_EVENT_PACKET: + return "HCI_EVENT_PACKET"; + case RESET_PACKET: + return "RESERVED_5"; + case VENDOR_SPECIFIC_PACKET: + return "VENDOR_SPECIFIC"; + case LINK_CONTROL_PACKET: + return "LINK_CONTROL_PACKET"; + default: + std::stringstream ss; + ss << "UNKNOWN[0x" << std::hex << static_cast(pktType) << "]"; + return ss.str(); } } @@ -931,7 +1010,12 @@ std::string H5Transport::asHex(const payload_t &packet) { std::stringstream hex; - for_each(packet.begin(), packet.end(), [&](uint8_t byte){ + if (packet.empty()) + { + return "N/A"; + } + + for_each(packet.begin(), packet.end(), [&](uint8_t byte) { hex << std::setfill('0') << std::setw(2) << std::hex << +byte << " "; }); @@ -942,8 +1026,7 @@ std::string H5Transport::hciPacketLinkControlToString(const payload_t &payload) { std::stringstream retval; - const auto configToString = [](uint8_t config) - { + const auto configToString = [](uint8_t config) { std::stringstream info; info << " sliding-window-size:" << (config & 0x07); info << " out-of-frame:" << ((config & 0x08) ? "1" : "0"); @@ -1008,16 +1091,9 @@ std::string H5Transport::h5PktToString(const bool out, const payload_t &h5Packet uint16_t payload_length; uint8_t header_checksum; - const auto err_code = h5_decode( - h5Packet, - payload, - &seq_num, - &ack_num, - &data_integrity, - &payload_length, - &header_checksum, - &reliable_packet, - &packet_type); + const auto err_code = + h5_decode(h5Packet, payload, &seq_num, &ack_num, &data_integrity, &payload_length, + &header_checksum, &reliable_packet, &packet_type); std::stringstream count; @@ -1027,29 +1103,27 @@ std::string H5Transport::h5PktToString(const bool out, const payload_t &h5Packet } else { - count << std::setw(5) << incomingPacketCount << "/" << std::setw(2) << errorPacketCount << " <- "; + count << std::setw(5) << incomingPacketCount << "/" << std::setw(2) << errorPacketCount + << " <- "; } std::stringstream retval; - retval - << count.str() - << " [" << asHex(payload) << "]" << std::endl - << std::setw(20) << "type:" << std::setw(20) << pktTypeToString(packet_type) - << " reliable:" << std::setw(3) << (reliable_packet ? "yes" : "no") - << " seq#:" << std::hex << +seq_num << " ack#:" << std::hex << +ack_num - << " payload_length:" << payload_length - << " data_integrity:" << data_integrity; + retval << count.str() << " [" << asHex(payload) << "] " + << "type:" << std::setw(20) << pktTypeToString(packet_type) + << " reliable:" << std::setw(3) << (reliable_packet ? "yes" : "no") + << " seq#:" << std::hex << +seq_num << " ack#:" << std::hex << +ack_num + << " payload_length:" << +payload_length << " data_integrity:" << data_integrity; if (data_integrity) { retval << " header_checksum:" << std::hex << +header_checksum; } - retval << " err_code:" << err_code; + retval << " err_code:0x" << std::hex << err_code; if (packet_type == LINK_CONTROL_PACKET) { - retval << std::endl << std::setw(15) << "" << hciPacketLinkControlToString(payload); + retval << " " << hciPacketLinkControlToString(payload); } return retval.str(); @@ -1066,34 +1140,8 @@ void H5Transport::logPacket(const bool outgoing, const payload_t &packet) incomingPacketCount++; } - const std::string logLine = h5PktToString(outgoing, packet).c_str(); - - if (upperLogCallback != nullptr) - { - upperLogCallback(SD_RPC_LOG_DEBUG, logLine); - } - else - { - std::clog << logLine << std::endl; - } -} - -void H5Transport::log(std::string &logLine) const -{ - if (upperLogCallback != nullptr) - { - upperLogCallback(SD_RPC_LOG_DEBUG, logLine); - } - else - { - std::clog << logLine << std::endl; - } -} - -void H5Transport::log(char const *logLine) const -{ - auto _logLine = std::string(logLine); - log(_logLine); + const std::string logLine = h5PktToString(outgoing, packet); + log(SD_RPC_LOG_DEBUG, logLine); } void H5Transport::logStateTransition(h5_state_t from, h5_state_t to) const @@ -1101,23 +1149,17 @@ void H5Transport::logStateTransition(h5_state_t from, h5_state_t to) const std::stringstream logLine; logLine << "State change: " << stateToString(from) << " -> " << stateToString(to) << std::endl; - if (upperLogCallback != nullptr) - { - upperLogCallback(SD_RPC_LOG_DEBUG, logLine.str()); - } - else - { - std::clog << logLine.str() << std::endl; - } + log(SD_RPC_LOG_DEBUG, logLine.str()); } #pragma endregion Debugging related methods - #pragma region Test related methods -bool H5Transport::checkPattern(const payload_t &packet, const uint8_t offset, const payload_t &pattern) +bool H5Transport::checkPattern(const payload_t &packet, const uint8_t offset, + const payload_t &pattern) { - if (offset >= packet.size()) return false; + if (offset >= packet.size()) + return false; auto packetItr = packet.begin() + offset; @@ -1137,28 +1179,53 @@ bool H5Transport::checkPattern(const payload_t &packet, const uint8_t offset, co return true; } +payload_t H5Transport::getPktPattern(const control_pkt_type type) +{ + switch (type) + { + case CONTROL_PKT_RESET: + return {}; + case CONTROL_PKT_ACK: + return {}; + case CONTROL_PKT_SYNC: + return {SyncFirstByte, SyncSecondByte}; + case CONTROL_PKT_SYNC_RESPONSE: + return {SyncRspFirstByte, SyncRspSecondByte}; + case CONTROL_PKT_SYNC_CONFIG: + return {SyncConfigFirstByte, SyncConfigSecondByte, SyncConfigField}; + case CONTROL_PKT_SYNC_CONFIG_RESPONSE: + return {SyncConfigRspFirstByte, SyncConfigRspSecondByte, SyncConfigField}; + case CONTROL_PKT_LAST: + return {}; + default: + std::stringstream ss; + ss << "unknown CONTROL packet type 0x" << std::hex << static_cast(type); + throw std::out_of_range(ss.str()); + } +} + bool H5Transport::isSyncPacket(const payload_t &packet, const uint8_t offset) { - return checkPattern(packet, offset, payload_t{ SyncFirstByte, SyncSecondByte }); + return checkPattern(packet, offset, payload_t{SyncFirstByte, SyncSecondByte}); } bool H5Transport::isSyncResponsePacket(const payload_t &packet, const uint8_t offset) { - return checkPattern(packet, offset, payload_t { SyncRspFirstByte, SyncRspSecondByte }); + return checkPattern(packet, offset, payload_t{SyncRspFirstByte, SyncRspSecondByte}); } bool H5Transport::isSyncConfigPacket(const payload_t &packet, const uint8_t offset) { - return checkPattern(packet, offset, payload_t { SyncConfigFirstByte, SyncConfigSecondByte }); + return checkPattern(packet, offset, payload_t{SyncConfigFirstByte, SyncConfigSecondByte}); } bool H5Transport::isSyncConfigResponsePacket(const payload_t &packet, const uint8_t offset) { - return checkPattern(packet, offset, payload_t { SyncConfigRspFirstByte, SyncConfigRspSecondByte }); + return checkPattern(packet, offset, payload_t{SyncConfigRspFirstByte, SyncConfigRspSecondByte}); } bool H5Transport::isResetPacket(const payload_t &packet, const uint8_t offset) { - return checkPattern(packet, offset, payload_t { 0x05 }); + return checkPattern(packet, offset, payload_t{0x05}); } #pragma endregion Test related methods diff --git a/src/common/transport/serialization_transport.cpp b/src/common/transport/serialization_transport.cpp index 2783914f5..2db0b2b05 100755 --- a/src/common/transport/serialization_transport.cpp +++ b/src/common/transport/serialization_transport.cpp @@ -43,35 +43,43 @@ #include "ble_common.h" +#include #include -#include #include -#include // Do not remove! Required by gcc. SerializationTransport::SerializationTransport(Transport *dataLinkLayer, uint32_t response_timeout) - : statusCallback(nullptr), eventCallback(nullptr), - logCallback(nullptr), rspReceived(false), - responseBuffer(nullptr), responseLength(nullptr), - runEventThread(false) + : statusCallback(nullptr) + , eventCallback(nullptr) + , logCallback(nullptr) + , responseReceived(false) + , responseBuffer(nullptr) + , isOpen(false) { - // SerializationTransport takes owership of dataLinkLayer provided object + // SerializationTransport takes ownership of dataLinkLayer provided object nextTransportLayer = std::shared_ptr(dataLinkLayer); - responseTimeout = response_timeout; + responseTimeout = response_timeout; } -SerializationTransport::~SerializationTransport() +uint32_t SerializationTransport::open(const status_cb_t &status_callback, + const evt_cb_t &event_callback, const log_cb_t &log_callback) { -} + std::lock_guard lck(publicMethodMutex); + + if (isOpen) + { + return NRF_ERROR_SD_RPC_SERIALIZATION_TRANSPORT_ALREADY_OPEN; + } + + isOpen = true; -uint32_t SerializationTransport::open(status_cb_t status_callback, evt_cb_t event_callback, log_cb_t log_callback) -{ statusCallback = status_callback; - eventCallback = event_callback; - logCallback = log_callback; + eventCallback = event_callback; + logCallback = log_callback; - auto dataCallback = std::bind(&SerializationTransport::readHandler, this, std::placeholders::_1, std::placeholders::_2); + const auto dataCallback = std::bind(&SerializationTransport::readHandler, this, + std::placeholders::_1, std::placeholders::_2); - uint32_t errorCode = nextTransportLayer->open(status_callback, dataCallback, log_callback); + const auto errorCode = nextTransportLayer->open(status_callback, dataCallback, log_callback); if (errorCode != NRF_SUCCESS) { @@ -81,12 +89,22 @@ uint32_t SerializationTransport::open(status_cb_t status_callback, evt_cb_t even // Thread should not be running from before when calling this if (!eventThread.joinable()) { - runEventThread = true; - eventThread = std::thread(std::bind(&SerializationTransport::eventHandlingRunner, this)); + // If ::close is called when this method (::open) returns + // and eventThread is executing somewhere between while (isOpen) + // and eventWaitCondition notification we could get a deadlock. + // + // To prevent this, lock eventMutex in this thread, let eventThread + // wait until eventMutex is unlocked (.wait in this thread). + // When eventThread is started and outside critical region, + // let eventThread notify eventWaitCondition, making .wait + // return + std::unique_lock eventLock(eventMutex); + eventThread = std::thread([this] { eventHandlingRunner(); }); + eventWaitCondition.wait(eventLock); } else { - return NRF_ERROR_INTERNAL; + return NRF_ERROR_SD_RPC_SERIALIZATION_TRANSPORT; } return NRF_SUCCESS; @@ -94,15 +112,23 @@ uint32_t SerializationTransport::open(status_cb_t status_callback, evt_cb_t even uint32_t SerializationTransport::close() { - runEventThread = false; + std::lock_guard lck(publicMethodMutex); + + if (!isOpen) + { + return NRF_ERROR_SD_RPC_SERIALIZATION_TRANSPORT_ALREADY_CLOSED; + } + + isOpen = false; eventWaitCondition.notify_all(); if (eventThread.joinable()) { if (std::this_thread::get_id() == eventThread.get_id()) { - //log "ser_app_hal_pc_event_handling_stop was called from an event callback, causing the event thread to stop itself. This will cause a resource leak." - return NRF_ERROR_INTERNAL; + // log "ser_app_hal_pc_event_handling_stop was called from an event callback, causing + // the event thread to stop itself. This will cause a resource leak." + return NRF_ERROR_SD_RPC_SERIALIZATION_TRANSPORT; } eventThread.join(); @@ -111,45 +137,49 @@ uint32_t SerializationTransport::close() return nextTransportLayer->close(); } -uint32_t SerializationTransport::send(uint8_t *cmdBuffer, uint32_t cmdLength, uint8_t *rspBuffer, uint32_t *rspLength) +uint32_t SerializationTransport::send(const std::vector &cmdBuffer, + std::shared_ptr> rspBuffer, + serialization_pkt_type_t pktType) { + std::lock_guard lck(publicMethodMutex); + + if (!isOpen) + { + return NRF_ERROR_SD_RPC_SERIALIZATION_TRANSPORT_INVALID_STATE; + } + // Mutex to avoid multiple threads sending commands at the same time. std::lock_guard sendGuard(sendMutex); - rspReceived = false; - responseBuffer = rspBuffer; - responseLength = rspLength; + responseReceived = false; + responseBuffer = rspBuffer; - std::vector commandBuffer(cmdLength + 1); - commandBuffer[0] = SERIALIZATION_COMMAND; - memcpy(&commandBuffer[1], cmdBuffer, cmdLength * sizeof(uint8_t)); + std::vector commandBuffer(cmdBuffer.size() + 1); + commandBuffer[0] = pktType; + std::copy(cmdBuffer.begin(), cmdBuffer.end(), commandBuffer.begin() + 1); - auto errCode = nextTransportLayer->send(commandBuffer); + const auto errCode = nextTransportLayer->send(commandBuffer); - if (errCode != NRF_SUCCESS) { + if (errCode != NRF_SUCCESS) + { return errCode; } - else if (rspBuffer == nullptr) + + if (!rspBuffer) { return NRF_SUCCESS; } std::unique_lock responseGuard(responseMutex); - std::chrono::milliseconds timeout(responseTimeout); - std::chrono::system_clock::time_point wakeupTime = std::chrono::system_clock::now() + timeout; + const std::chrono::milliseconds timeout(responseTimeout); + const auto wakeupTime = std::chrono::system_clock::now() + timeout; - responseWaitCondition.wait_until( - responseGuard, - wakeupTime, - [&] { - return rspReceived; - } - ); + responseWaitCondition.wait_until(responseGuard, wakeupTime, [&] { return responseReceived; }); - if (!rspReceived) + if (!responseReceived) { logCallback(SD_RPC_LOG_WARNING, "Failed to receive response for command"); - return NRF_ERROR_INTERNAL; + return NRF_ERROR_SD_RPC_SERIALIZATION_TRANSPORT_NO_RESPONSE; } return NRF_SUCCESS; @@ -158,72 +188,106 @@ uint32_t SerializationTransport::send(uint8_t *cmdBuffer, uint32_t cmdLength, ui // Event Thread void SerializationTransport::eventHandlingRunner() { - while (runEventThread) { + std::unique_lock eventLock(eventMutex); - std::unique_lock eventLock(eventMutex); + while (isOpen) + { + // Suspend this thread until event wait condition + // is notified. This can happen from ::close and + // ::readHandler (thread in H5Transport) + eventWaitCondition.notify_all(); eventWaitCondition.wait(eventLock); - while (!eventQueue.empty()) + while (!eventQueue.empty() && isOpen) { - eventData_t eventData = eventQueue.front(); + // Get oldest event received from UART thread + const auto eventData = eventQueue.front(); + const auto eventDataSize = static_cast(eventData.size()); + + // Remove oldest event received from H5Transport thread eventQueue.pop(); + + // Let UART thread add events to eventQueue + // while popped event is processed eventLock.unlock(); - // Allocate memory to store decoded event including an unknown quantity of padding + // Set codec context + EventCodecContext context(this); - // Set security context - BLESecurityContext context(this); + // Allocate memory to store decoded event including an unknown quantity of padding + auto possibleEventLength = MaxPossibleEventLength; + std::vector eventDecodeBuffer; + eventDecodeBuffer.reserve(MaxPossibleEventLength); + const auto event = reinterpret_cast(eventDecodeBuffer.data()); - uint32_t possibleEventLength = 700; - std::unique_ptr event(static_cast(std::malloc(possibleEventLength))); - uint32_t errCode = ble_event_dec(eventData.data, eventData.dataLength, event.get(), &possibleEventLength); + // Decode event + const auto errCode = + ble_event_dec(eventData.data(), eventDataSize, event, &possibleEventLength); - if (eventCallback != nullptr && errCode == NRF_SUCCESS) + if (eventCallback && errCode == NRF_SUCCESS) { - eventCallback(event.get()); + eventCallback(event); } if (errCode != NRF_SUCCESS) { std::stringstream logMessage; - logMessage << "Failed to decode event, error code is " << errCode << "." << std::endl; - logCallback(SD_RPC_LOG_ERROR, logMessage.str().c_str()); + logMessage << "Failed to decode event, error code is " << std::dec << errCode + << "/0x" << std::hex << errCode << "." << std::endl; + logCallback(SD_RPC_LOG_ERROR, logMessage.str()); + statusCallback(PKT_DECODE_ERROR, logMessage.str()); } - free(eventData.data); - + // Prevent UART from adding events to eventQueue eventLock.lock(); } } } -void SerializationTransport::readHandler(uint8_t *data, size_t length) +void SerializationTransport::readHandler(const uint8_t *data, const size_t length) { - auto eventType = static_cast(data[0]); - data += 1; - length -= 1; + const auto eventType = static_cast(data[0]); - if (eventType == SERIALIZATION_RESPONSE) { - memcpy(responseBuffer, data, length); - *responseLength = (uint32_t) length; + const auto startOfData = data + 1; + const size_t dataLength = length - 1; + + if (eventType == SERIALIZATION_RESPONSE) + { + if (responseBuffer && !responseBuffer->empty()) + { + if (responseBuffer->size() >= dataLength) + { + std::copy(startOfData, startOfData + dataLength, responseBuffer->begin()); + responseBuffer->resize(dataLength); + } + else + { + logCallback(SD_RPC_LOG_ERROR, "Received SERIALIZATION_RESPONSE with a packet that " + "is larger than the allocated buffer."); + } + } + else + { + logCallback(SD_RPC_LOG_ERROR, "Received SERIALIZATION_RESPONSE but command did not " + "provide a buffer for the reply."); + } std::lock_guard responseGuard(responseMutex); - rspReceived = true; + responseReceived = true; responseWaitCondition.notify_one(); } else if (eventType == SERIALIZATION_EVENT) { - eventData_t eventData; - eventData.data = static_cast(malloc(length)); - memcpy(eventData.data, data, length); - eventData.dataLength = (uint32_t) length; - + std::vector event; + event.reserve(dataLength); + std::copy(startOfData, startOfData + dataLength, std::back_inserter(event)); std::lock_guard eventLock(eventMutex); - eventQueue.push(eventData); + eventQueue.push(std::move(event)); eventWaitCondition.notify_one(); } else { - logCallback(SD_RPC_LOG_WARNING, "Unknown Nordic Semiconductor vendor specific packet received"); + logCallback(SD_RPC_LOG_WARNING, + "Unknown Nordic Semiconductor vendor specific packet received"); } } diff --git a/src/common/transport/slip.cpp b/src/common/transport/slip.cpp index d66f8a721..e6a7498ca 100755 --- a/src/common/transport/slip.cpp +++ b/src/common/transport/slip.cpp @@ -37,19 +37,20 @@ #include "slip.h" #include "nrf_error.h" +#include "sd_rpc_types.h" +#include #include -#include -#define SLIP_END 0xC0 -#define SLIP_ESC 0xDB -#define SLIP_ESC_END 0xDC -#define SLIP_ESC_ESC 0xDD +constexpr uint8_t SLIP_END = 0xC0; +constexpr uint8_t SLIP_ESC = 0xDB; +constexpr uint8_t SLIP_ESC_END = 0xDC; +constexpr uint8_t SLIP_ESC_ESC = 0xDD; void slip_encode(const std::vector &in_packet, std::vector &out_packet) { out_packet.push_back(SLIP_END); - for (unsigned char i : in_packet) + for (auto i : in_packet) { if (i == SLIP_END) { @@ -72,13 +73,14 @@ void slip_encode(const std::vector &in_packet, std::vector &ou uint32_t slip_decode(const std::vector &packet, std::vector &out_packet) { - for (size_t i = 0; i < packet.size(); i++) + for (std::size_t i = 0; i < packet.size(); i++) { if (packet[i] == SLIP_END) { continue; } - else if (packet[i] == SLIP_ESC) { + else if (packet[i] == SLIP_ESC) + { i++; if (packet[i] == SLIP_ESC_END) { @@ -90,7 +92,7 @@ uint32_t slip_decode(const std::vector &packet, std::vector &o } else { - return NRF_ERROR_INVALID_DATA; + return NRF_ERROR_SD_RPC_H5_TRANSPORT_SLIP_DECODING; } } else diff --git a/src/common/transport/transport.cpp b/src/common/transport/transport.cpp index 9a18bcb12..4e85c1773 100755 --- a/src/common/transport/transport.cpp +++ b/src/common/transport/transport.cpp @@ -39,35 +39,49 @@ #include "nrf_error.h" +#include #include using namespace std; -Transport::Transport() -{ - /* Intentional empty */ -} - -Transport::~Transport() -{ - /* Intentional empty */ -} +Transport::Transport() = default; +Transport::~Transport() = default; -uint32_t Transport::open(status_cb_t status_callback, data_cb_t data_callback, log_cb_t log_callback) +uint32_t Transport::open(const status_cb_t &status_callback, const data_cb_t &data_callback, + const log_cb_t &log_callback) { - if (status_callback == nullptr || data_callback == nullptr || log_callback == nullptr) + if (!status_callback || !data_callback || !log_callback) { - return NRF_ERROR_INTERNAL; + return NRF_ERROR_SD_RPC_INVALID_ARGUMENT; } upperStatusCallback = status_callback; - upperDataCallback = data_callback; - upperLogCallback = log_callback; + upperDataCallback = data_callback; + upperLogCallback = log_callback; return NRF_SUCCESS; } -uint32_t Transport::close() +void Transport::log(const sd_rpc_log_severity_t severity, const std::string &message) const { - return NRF_SUCCESS; + if (upperLogCallback) + { + upperLogCallback(severity, message); + } + else + { + std::cerr << "LOG(" << static_cast(severity) << "): " << message << std::endl; + } +} + +void Transport::status(const sd_rpc_app_status_t code, const std::string &message) const +{ + if (upperLogCallback) + { + upperStatusCallback(code, message); + } + else + { + std::cerr << "status(" << static_cast(code) << ") " << message << std::endl; + } } diff --git a/src/common/transport/uart_boost.cpp b/src/common/transport/uart_boost.cpp index 26b7b5518..edc07d230 100755 --- a/src/common/transport/uart_boost.cpp +++ b/src/common/transport/uart_boost.cpp @@ -36,37 +36,46 @@ */ #include "uart_boost.h" -#include "uart_settings_boost.h" #include "nrf_error.h" +#include "uart_settings_boost.h" #include -#include -#include - #include -#include #include +#include +#include + +#if defined(__APPLE__) +#include +#include +#include +#endif + +#include + +constexpr uint32_t DUMMY_BAUD_RATE = 9600; UartBoost::UartBoost(const UartCommunicationParameters &communicationParameters) - : Transport(), - readBuffer(), - writeBufferVector(), - writeQueue(), - queueMutex(), - callbackReadHandle(), - callbackWriteHandle(), - uartSettingsBoost(communicationParameters), - asyncWriteInProgress(false), - ioServiceThread(nullptr) + : Transport() + , readBuffer() + , writeBufferVector() + , writeQueue() + , queueMutex() + , isOpen(false) + , callbackReadHandle() + , callbackWriteHandle() + , uartSettingsBoost(communicationParameters) + , asyncWriteInProgress(false) + , ioServiceThread(nullptr) { - ioService = new asio_io_context(); - serialPort = new boost::asio::serial_port(*ioService); - workNotifier = new asio_io_context::work(*ioService); + ioService = new asio::io_service(); + serialPort = new asio::serial_port(*ioService); + workNotifier = new asio::io_service::work(*ioService); } // The order of destructor invocation is important here. See: // https://svn.boost.org/trac10/ticket/10447 -UartBoost::~UartBoost() +UartBoost::~UartBoost() noexcept { try { @@ -94,15 +103,25 @@ UartBoost::~UartBoost() delete ioService; } } - catch (std::exception& e) + catch (std::exception &e) { - std::cerr << "Error in ~UartBoost::UartBoost" << e.what() << std::endl; + std::cerr << "Error in ~UartBoost" << e.what() << std::endl; std::terminate(); } } -uint32_t UartBoost::open(status_cb_t status_callback, data_cb_t data_callback, log_cb_t log_callback) +uint32_t UartBoost::open(const status_cb_t &status_callback, const data_cb_t &data_callback, + const log_cb_t &log_callback) { + std::lock_guard lck(publicMethodMutex); + + if (isOpen) + { + return NRF_ERROR_SD_RPC_SERIAL_PORT_ALREADY_OPEN; + } + + isOpen = true; + Transport::open(status_callback, data_callback, log_callback); const auto portName = uartSettingsBoost.getPortName(); @@ -111,45 +130,90 @@ uint32_t UartBoost::open(status_cb_t status_callback, data_cb_t data_callback, l { serialPort->open(portName); - // Wait a bit before making the device available since there are problems + // Wait a bit before making the device available since there are problems // if data is sent right after open. // // Not sure if this is an OS issue or if it is an issue with the device USB stack. // The 200ms wait time is based on testing with PCA10028, PCA10031 and PCA10040. - // All of these devices use the Segger OB which at the time of testing has firmware version + // All of these devices use the SEGGER OB which at the time of testing has firmware version // "J-Link OB-SAM3U128-V2-NordicSemi compiled Jan 12 2018 16:05:20" - //std::this_thread::sleep_for(std::chrono::milliseconds(200)); + std::this_thread::sleep_for(std::chrono::milliseconds(200)); - const auto baudRate = uartSettingsBoost.getBoostBaudRate(); - const auto flowControl = uartSettingsBoost.getBoostFlowControl(); - const auto stopBits = uartSettingsBoost.getBoostStopBits(); - const auto parity = uartSettingsBoost.getBoostParity(); + const auto flowControl = uartSettingsBoost.getBoostFlowControl(); + const auto stopBits = uartSettingsBoost.getBoostStopBits(); + const auto parity = uartSettingsBoost.getBoostParity(); const auto characterSize = uartSettingsBoost.getBoostCharacterSize(); - serialPort->set_option(baudRate); serialPort->set_option(flowControl); serialPort->set_option(stopBits); serialPort->set_option(parity); serialPort->set_option(characterSize); + + // SEGGER J-LINK-OB VCOM has an issue when auto-detecting UART flow control + // The VCOM implementation keeps the detected flow-control state if the baud rate + // is the same as the previous open of UART (MDK-1005). + if (uartSettingsBoost.getBoostBaudRate().value() == DUMMY_BAUD_RATE) + { + std::stringstream message; + message << "Error setting up serial port " << uartSettingsBoost.getPortName() + << ". Baud rate requested (" << uartSettingsBoost.getBoostBaudRate().value() + << ") is the dummy baud rate to circumvent a SEGGER J-LINK-OB issue. Please " + "use a different baud rate."; + + status(IO_RESOURCES_UNAVAILABLE, message.str()); + + return NRF_ERROR_SD_RPC_SERIAL_PORT; + } + +#if !defined(__APPLE__) + // Set dummy baud rate + auto baudRate = asio::serial_port::baud_rate(DUMMY_BAUD_RATE); + serialPort->set_option(baudRate); + + // Set requested baud rate + baudRate = uartSettingsBoost.getBoostBaudRate(); + serialPort->set_option(baudRate); +#else + // Workaround for setting non-standard baudrate on macOS + // get underlying boost serial port handle and apply baud rate directly + + // Set dummy baud rate + auto speed = (speed_t)DUMMY_BAUD_RATE; + if (ioctl(serialPort->native_handle(), IOSSIOSPEED, &speed) < 0) + { + const auto error = std::error_code(errno, std::system_category()); + throw std::system_error(error, "Failed to set dummy baud rate (" + + std::to_string(speed) + ")"); + } + + // Set requested baud rate + speed = (speed_t)uartSettingsBoost.getBaudRate(); + + if (ioctl(serialPort->native_handle(), IOSSIOSPEED, &speed) < 0) + { + const auto error = std::error_code(errno, std::system_category()); + throw std::system_error(error, "Failed to set baud rate to " + std::to_string(speed)); + } +#endif } - catch (std::exception& ex) + catch (std::exception &ex) { std::stringstream message; - message << "Error setting up serial port " << uartSettingsBoost.getPortName() << ". " << ex.what(); - upperStatusCallback(IO_RESOURCES_UNAVAILABLE, message.str().c_str()); - return NRF_ERROR_INTERNAL; + message << "Error setting up serial port " << uartSettingsBoost.getPortName() << ". " + << ex.what(); + + status(IO_RESOURCES_UNAVAILABLE, message.str()); + + return NRF_ERROR_SD_RPC_SERIAL_PORT; } try { - // boost::bind not compatible with std::bind - callbackReadHandle = boost::bind(&UartBoost::readHandler, this, - boost::asio::placeholders::error, - boost::asio::placeholders::bytes_transferred); + callbackReadHandle = + std::bind(&UartBoost::readHandler, this, std::placeholders::_1, std::placeholders::_2); - callbackWriteHandle = boost::bind(&UartBoost::writeHandler, this, - boost::asio::placeholders::error, - boost::asio::placeholders::bytes_transferred); + callbackWriteHandle = + std::bind(&UartBoost::writeHandler, this, std::placeholders::_1, std::placeholders::_2); // run execution of io_service handlers in a separate thread if (ioServiceThread != nullptr) @@ -158,27 +222,31 @@ uint32_t UartBoost::open(status_cb_t status_callback, data_cb_t data_callback, l std::terminate(); } - ioServiceThread = new std::thread([&]() { - try { + const auto asioWorker = [&]() { + try + { const auto count = ioService->run(); std::stringstream message; message << "serial io_context executed " << count << " handlers."; - upperLogCallback(SD_RPC_LOG_TRACE, message.str()); + log(SD_RPC_LOG_TRACE, message.str()); } catch (std::exception &e) { std::stringstream message; message << "serial io_context error: " << e.what() << "."; - upperLogCallback(SD_RPC_LOG_ERROR, message.str()); + log(SD_RPC_LOG_ERROR, message.str()); } - }); + }; + + ioServiceThread = new std::thread(asioWorker); } - catch (std::exception& ex) + catch (std::exception &ex) { std::stringstream message; - message << "Error starting serial port work thread. " << ex.what() << " on serial port " << uartSettingsBoost.getPortName() << "."; - upperStatusCallback(IO_RESOURCES_UNAVAILABLE, message.str().c_str()); - return NRF_ERROR_INTERNAL; + message << "Error starting serial port work thread. " << ex.what() << " on serial port " + << uartSettingsBoost.getPortName() << "."; + status(IO_RESOURCES_UNAVAILABLE, message.str()); + return NRF_ERROR_SD_RPC_SERIAL_PORT; } startRead(); @@ -186,7 +254,7 @@ uint32_t UartBoost::open(status_cb_t status_callback, data_cb_t data_callback, l std::stringstream flow_control_string; std::stringstream parity_string; - switch(uartSettingsBoost.getParity()) + switch (uartSettingsBoost.getParity()) { case UartParityEven: parity_string << "even"; @@ -201,7 +269,7 @@ uint32_t UartBoost::open(status_cb_t status_callback, data_cb_t data_callback, l parity_string << "unknown"; } - switch(uartSettingsBoost.getFlowControl()) + switch (uartSettingsBoost.getFlowControl()) { case UartFlowControlNone: flow_control_string << "none"; @@ -217,19 +285,27 @@ uint32_t UartBoost::open(status_cb_t status_callback, data_cb_t data_callback, l } std::stringstream message; - message << "Successfully opened " - << uartSettingsBoost.getPortName() << ". " - << "Baud rate: " << uartSettingsBoost.getBaudRate() << ". " - << "Flow control: " << flow_control_string.str() << ". " - << "Parity: " << parity_string.str() << "." << std::endl; + message << "Successfully opened " << uartSettingsBoost.getPortName() << ". " + << "Baud rate: " << uartSettingsBoost.getBaudRate() << ". " + << "Flow control: " << flow_control_string.str() << ". " + << "Parity: " << parity_string.str() << "." << std::endl; - upperLogCallback(SD_RPC_LOG_INFO, message.str()); + log(SD_RPC_LOG_INFO, message.str()); return NRF_SUCCESS; } uint32_t UartBoost::close() { + std::lock_guard lck(publicMethodMutex); + + if (!isOpen) + { + return NRF_ERROR_SD_RPC_H5_TRANSPORT_ALREADY_CLOSED; + } + + isOpen = false; + try { serialPort->close(); @@ -247,26 +323,39 @@ uint32_t UartBoost::close() std::stringstream message; message << "serial port " << uartSettingsBoost.getPortName() << " closed."; - upperLogCallback(SD_RPC_LOG_INFO, message.str()); + log(SD_RPC_LOG_INFO, message.str()); } - catch (std::exception& ex) + catch (std::exception &ex) { std::stringstream message; - message << "Error closing serial port " << uartSettingsBoost.getPortName() << ", " << ex.what() << "."; - upperLogCallback(SD_RPC_LOG_ERROR, message.str()); + message << "Error closing serial port " << uartSettingsBoost.getPortName() << ", " + << ex.what() << "."; + log(SD_RPC_LOG_ERROR, message.str()); } asyncWriteInProgress = false; - Transport::close(); return NRF_SUCCESS; } uint32_t UartBoost::send(const std::vector &data) { - queueMutex.lock(); - writeQueue.insert(writeQueue.end(), data.begin(), data.end()); - queueMutex.unlock(); + std::lock_guard lck(publicMethodMutex); + + if (!isOpen) + { + std::stringstream message; + message << "Trying to send packets to device when serial device is closed is not " + "supported."; + log(SD_RPC_LOG_ERROR, message.str()); + + return NRF_ERROR_SD_RPC_SERIAL_PORT_STATE; + } + + { + std::lock_guard guard(queueMutex); + writeQueue.insert(writeQueue.end(), data.begin(), data.end()); + } if (!asyncWriteInProgress) { @@ -276,56 +365,72 @@ uint32_t UartBoost::send(const std::vector &data) return NRF_SUCCESS; } -void UartBoost::readHandler(const boost::system::error_code& errorCode, const size_t bytesTransferred) +void UartBoost::readHandler(const asio::error_code &errorCode, const size_t bytesTransferred) { - if (errorCode == boost::system::errc::success) + if (!isOpen && !errorCode) + { + std::stringstream message; + message << "serial port closed, but " << bytesTransferred + << " bytes received. Data will not be sent to transport layer above."; + log(SD_RPC_LOG_DEBUG, message.str()); + } + + if (!errorCode && isOpen) { - auto readBufferData = readBuffer.data(); - upperDataCallback(readBufferData, bytesTransferred); + const auto readBufferData = readBuffer.data(); + + if (upperDataCallback) + { + upperDataCallback(readBufferData, bytesTransferred); + } + asyncRead(); // Initiate a new read } - else if (errorCode == boost::asio::error::operation_aborted) + else if (errorCode == asio::error::operation_aborted) { std::stringstream message; message << "serial port read on port " << uartSettingsBoost.getPortName() << " aborted."; - upperLogCallback(SD_RPC_LOG_DEBUG, message.str()); - return; + + log(SD_RPC_LOG_DEBUG, message.str()); } else { std::stringstream message; message << "serial port read failed on port " << uartSettingsBoost.getPortName() << ". "; message << "Error: " << errorCode.message() << " [" << errorCode.value() << "]"; - upperStatusCallback(IO_RESOURCES_UNAVAILABLE, message.str().c_str()); - // TODO: handle this case in upper layers + + status(IO_RESOURCES_UNAVAILABLE, message.str()); } } -void UartBoost::writeHandler (const boost::system::error_code& errorCode, const size_t bytesTransferred) +void UartBoost::writeHandler(const asio::error_code &errorCode, const size_t bytesTransferred) { - if (errorCode == boost::system::errc::success) + if (!errorCode) { asyncWrite(); } - else if (errorCode == boost::asio::error::operation_aborted) + else if (errorCode == asio::error::operation_aborted) { std::stringstream message; - message << "serial port write operation on port " << uartSettingsBoost.getPortName() << " aborted."; - upperLogCallback(SD_RPC_LOG_DEBUG, message.str()); + message << "serial port write operation on port " << uartSettingsBoost.getPortName() + << " aborted."; + + log(SD_RPC_LOG_DEBUG, message.str()); - // In case of an aborted write operation, suppress notifications and return (i.e. no asyncWrite) + // In case of an aborted write operation, suppress notifications and return (i.e. no + // asyncWrite) queueMutex.lock(); writeQueue.clear(); asyncWriteInProgress = false; queueMutex.unlock(); - return; } else { std::stringstream message; message << "serial port write operation on port " << uartSettingsBoost.getPortName() - << " failed. Error: " << errorCode.message() << "[" << errorCode.value() << "]"; - upperLogCallback(SD_RPC_LOG_ERROR, message.str()); + << " failed. Error: " << errorCode.message() << "[" << errorCode.value() << "]"; + + log(SD_RPC_LOG_ERROR, message.str()); } } @@ -336,16 +441,16 @@ void UartBoost::startRead() void UartBoost::asyncRead() { - const auto mutableReadBuffer = boost::asio::buffer(readBuffer, BUFFER_SIZE); + const auto mutableReadBuffer = asio::buffer(readBuffer, BUFFER_SIZE); serialPort->async_read_some(mutableReadBuffer, callbackReadHandle); } void UartBoost::asyncWrite() { - { //lock_guard scope + { // lock_guard scope std::lock_guard guard(queueMutex); - auto numBytesPending = writeQueue.size(); + const auto numBytesPending = writeQueue.size(); if (numBytesPending == 0) { @@ -361,6 +466,6 @@ void UartBoost::asyncWrite() writeQueue.clear(); } - auto buffer = boost::asio::buffer(writeBufferVector, writeBufferVector.size()); - boost::asio::async_write(*serialPort, buffer, callbackWriteHandle); + const auto buffer = asio::buffer(writeBufferVector, writeBufferVector.size()); + asio::async_write(*serialPort, buffer, callbackWriteHandle); } diff --git a/src/common/transport/uart_settings_boost.cpp b/src/common/transport/uart_settings_boost.cpp index f3f8b43dc..b77b63ee3 100755 --- a/src/common/transport/uart_settings_boost.cpp +++ b/src/common/transport/uart_settings_boost.cpp @@ -39,8 +39,6 @@ #include -using namespace boost; - UartSettingsBoost::UartSettingsBoost() : UartSettings() { diff --git a/src/sd_api_common/README.md b/src/sd_api_common/README.md new file mode 100644 index 000000000..e6802eecf --- /dev/null +++ b/src/sd_api_common/README.md @@ -0,0 +1,6 @@ +# Content + +This directory contains the common codecs for SoftDevice API version 3 to SoftDevice API version 6. +The codecs are updated at regular intervals from the latest versions of the nRF5 SDK. + +The SDKs are found here: https://developer.nordicsemi.com/nRF5_SDK/ diff --git a/src/sd_api_v5/sdk/components/libraries/util/app_util.h b/src/sd_api_common/sdk/components/libraries/util/app_util.h similarity index 100% rename from src/sd_api_v5/sdk/components/libraries/util/app_util.h rename to src/sd_api_common/sdk/components/libraries/util/app_util.h diff --git a/src/sd_api_v5/sdk/components/libraries/util/nordic_common.h b/src/sd_api_common/sdk/components/libraries/util/nordic_common.h similarity index 100% rename from src/sd_api_v5/sdk/components/libraries/util/nordic_common.h rename to src/sd_api_common/sdk/components/libraries/util/nordic_common.h diff --git a/src/sd_api_v5/sdk/components/serialization/common/ble_serialization.c b/src/sd_api_common/sdk/components/serialization/common/ble_serialization.c similarity index 99% rename from src/sd_api_v5/sdk/components/serialization/common/ble_serialization.c rename to src/sd_api_common/sdk/components/serialization/common/ble_serialization.c index 1305304bc..de2b51f41 100644 --- a/src/sd_api_v5/sdk/components/serialization/common/ble_serialization.c +++ b/src/sd_api_common/sdk/components/serialization/common/ble_serialization.c @@ -1,5 +1,5 @@ /** - * Copyright (c) 2013 - 2017, Nordic Semiconductor ASA + * Copyright (c) 2013 - 2018, Nordic Semiconductor ASA * * All rights reserved. * diff --git a/src/sd_api_v5/sdk/components/serialization/common/ble_serialization.h b/src/sd_api_common/sdk/components/serialization/common/ble_serialization.h similarity index 99% rename from src/sd_api_v5/sdk/components/serialization/common/ble_serialization.h rename to src/sd_api_common/sdk/components/serialization/common/ble_serialization.h index d66c95a09..e86388e79 100644 --- a/src/sd_api_v5/sdk/components/serialization/common/ble_serialization.h +++ b/src/sd_api_common/sdk/components/serialization/common/ble_serialization.h @@ -58,7 +58,7 @@ typedef enum SER_PKT_TYPE_EVT, /**< Event packet type. */ SER_PKT_TYPE_DTM_CMD, /**< DTM Command packet type. */ SER_PKT_TYPE_DTM_RESP, /**< DTM Response packet type. */ - SER_PKT_TYPE_RESET_CMD, /**< System Reset Command packet type. */ + SER_PKT_TYPE_GENERIC_CMD, /**< GENERIC Command packet type. */ #if defined(ANT_STACK_SUPPORT_REQD) SER_PKT_TYPE_ANT_CMD, /**< ANT Command packet type. */ SER_PKT_TYPE_ANT_RESP, /**< ANT Response packet type. */ @@ -67,6 +67,12 @@ typedef enum SER_PKT_TYPE_MAX /**< Upper bound. */ } ser_pkt_type_t; +typedef enum +{ + SER_GENERIC_CMD_RESET, + SER_GENERIC_CMD_SOFT_RESET +} ser_generic_cmd_t; + #define LOW16(a) ((uint16_t)((a & 0x0000FFFF) >> 0)) #define HIGH16(a) ((uint16_t)((a & 0xFFFF0000) >> 16)) diff --git a/src/sd_api_v5/sdk/components/serialization/common/cond_field_serialization.c b/src/sd_api_common/sdk/components/serialization/common/cond_field_serialization.c similarity index 98% rename from src/sd_api_v5/sdk/components/serialization/common/cond_field_serialization.c rename to src/sd_api_common/sdk/components/serialization/common/cond_field_serialization.c index ca51f62dc..049dc27f8 100644 --- a/src/sd_api_v5/sdk/components/serialization/common/cond_field_serialization.c +++ b/src/sd_api_common/sdk/components/serialization/common/cond_field_serialization.c @@ -1,5 +1,5 @@ /** - * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA + * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA * * All rights reserved. * diff --git a/src/sd_api_v5/sdk/components/serialization/common/cond_field_serialization.h b/src/sd_api_common/sdk/components/serialization/common/cond_field_serialization.h similarity index 98% rename from src/sd_api_v5/sdk/components/serialization/common/cond_field_serialization.h rename to src/sd_api_common/sdk/components/serialization/common/cond_field_serialization.h index 9ebad1545..b3103b10e 100644 --- a/src/sd_api_v5/sdk/components/serialization/common/cond_field_serialization.h +++ b/src/sd_api_common/sdk/components/serialization/common/cond_field_serialization.h @@ -1,5 +1,5 @@ /** - * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA + * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA * * All rights reserved. * diff --git a/src/sd_api_v5/sdk/components/serialization/common/ser_config.h b/src/sd_api_common/sdk/components/serialization/common/ser_config.h similarity index 69% rename from src/sd_api_v5/sdk/components/serialization/common/ser_config.h rename to src/sd_api_common/sdk/components/serialization/common/ser_config.h index 99a028b85..0c3829d45 100644 --- a/src/sd_api_v5/sdk/components/serialization/common/ser_config.h +++ b/src/sd_api_common/sdk/components/serialization/common/ser_config.h @@ -1,5 +1,5 @@ /** - * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA + * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA * * All rights reserved. * @@ -66,8 +66,13 @@ extern "C" { /** Max packets size in serialization HAL Transport layer (packets before adding PHY header i.e. * packet length). */ -#define SER_HAL_TRANSPORT_APP_TO_CONN_MAX_PKT_SIZE (512UL) -#define SER_HAL_TRANSPORT_CONN_TO_APP_MAX_PKT_SIZE (512UL) +#if NRF_SD_BLE_API == 2 + #define SER_HAL_TRANSPORT_APP_TO_CONN_MAX_PKT_SIZE (512UL) + #define SER_HAL_TRANSPORT_CONN_TO_APP_MAX_PKT_SIZE (512UL) +#else + #define SER_HAL_TRANSPORT_APP_TO_CONN_MAX_PKT_SIZE (768UL) + #define SER_HAL_TRANSPORT_CONN_TO_APP_MAX_PKT_SIZE (768UL) +#endif #define SER_HAL_TRANSPORT_MAX_PKT_SIZE ((SER_HAL_TRANSPORT_APP_TO_CONN_MAX_PKT_SIZE) >= \ (SER_HAL_TRANSPORT_CONN_TO_APP_MAX_PKT_SIZE) \ @@ -77,7 +82,6 @@ extern "C" { #ifdef SER_CONNECTIVITY #define SER_HAL_TRANSPORT_TX_MAX_PKT_SIZE SER_HAL_TRANSPORT_CONN_TO_APP_MAX_PKT_SIZE #define SER_HAL_TRANSPORT_RX_MAX_PKT_SIZE SER_HAL_TRANSPORT_APP_TO_CONN_MAX_PKT_SIZE - #else /* APPLICATION SIDE */ #define SER_HAL_TRANSPORT_TX_MAX_PKT_SIZE SER_HAL_TRANSPORT_APP_TO_CONN_MAX_PKT_SIZE #define SER_HAL_TRANSPORT_RX_MAX_PKT_SIZE SER_HAL_TRANSPORT_CONN_TO_APP_MAX_PKT_SIZE @@ -99,45 +103,10 @@ extern "C" { /** UART transmission parameters */ #define SER_PHY_UART_FLOW_CTRL NRF_UART_HWFC_ENABLED -#define SER_PHY_UART_PARITY NRF_UART_PARITY_INCLUDED -#define SER_PHY_UART_BAUDRATE UART_BAUDRATE_BAUDRATE_Baud1M - -/** Find UART baud rate value based on the chosen register setting. */ -#if (SER_PHY_UART_BAUDRATE == UART_BAUDRATE_BAUDRATE_Baud1200) - #define SER_PHY_UART_BAUDRATE_VAL 1200uL -#elif (SER_PHY_UART_BAUDRATE == UART_BAUDRATE_BAUDRATE_Baud2400) - #define SER_PHY_UART_BAUDRATE_VAL 2400uL -#elif (SER_PHY_UART_BAUDRATE == UART_BAUDRATE_BAUDRATE_Baud4800) - #define SER_PHY_UART_BAUDRATE_VAL 4800uL -#elif (SER_PHY_UART_BAUDRATE == UART_BAUDRATE_BAUDRATE_Baud9600) - #define SER_PHY_UART_BAUDRATE_VAL 9600uL -#elif (SER_PHY_UART_BAUDRATE == UART_BAUDRATE_BAUDRATE_Baud14400) - #define SER_PHY_UART_BAUDRATE_VAL 14400uL -#elif (SER_PHY_UART_BAUDRATE == UART_BAUDRATE_BAUDRATE_Baud19200) - #define SER_PHY_UART_BAUDRATE_VAL 19200uL -#elif (SER_PHY_UART_BAUDRATE == UART_BAUDRATE_BAUDRATE_Baud28800) - #define SER_PHY_UART_BAUDRATE_VAL 28800uL -#elif (SER_PHY_UART_BAUDRATE == UART_BAUDRATE_BAUDRATE_Baud38400) - #define SER_PHY_UART_BAUDRATE_VAL 38400uL -#elif (SER_PHY_UART_BAUDRATE == UART_BAUDRATE_BAUDRATE_Baud57600) - #define SER_PHY_UART_BAUDRATE_VAL 57600uL -#elif (SER_PHY_UART_BAUDRATE == UART_BAUDRATE_BAUDRATE_Baud76800) - #define SER_PHY_UART_BAUDRATE_VAL 76800uL -#elif (SER_PHY_UART_BAUDRATE == UART_BAUDRATE_BAUDRATE_Baud115200) - #define SER_PHY_UART_BAUDRATE_VAL 115200uL -#elif (SER_PHY_UART_BAUDRATE == UART_BAUDRATE_BAUDRATE_Baud230400) - #define SER_PHY_UART_BAUDRATE_VAL 230400uL -#elif (SER_PHY_UART_BAUDRATE == UART_BAUDRATE_BAUDRATE_Baud250000) - #define SER_PHY_UART_BAUDRATE_VAL 250000uL -#elif (SER_PHY_UART_BAUDRATE == UART_BAUDRATE_BAUDRATE_Baud460800) - #define SER_PHY_UART_BAUDRATE_VAL 460800uL -#elif (SER_PHY_UART_BAUDRATE == UART_BAUDRATE_BAUDRATE_Baud921600) - #define SER_PHY_UART_BAUDRATE_VAL 921600uL -#elif (SER_PHY_UART_BAUDRATE == UART_BAUDRATE_BAUDRATE_Baud1M) - #define SER_PHY_UART_BAUDRATE_VAL 1000000uL -#else - #error "Unsupported baudrate" -#endif /* SER_PHY_UART_BAUDRATE */ +#define SER_PHY_UART_PARITY NRF_UART_PARITY_EXCLUDED +#define SER_PHY_UART_BAUDRATE_VAL 1000000 + +#define SER_PHY_UART_BAUDRATE CONCAT_2(NRF_UART_BAUDRATE_,SER_PHY_UART_BAUDRATE_VAL) /** Configuration timeouts of connectivity MCU. */ #define CONN_CHIP_RESET_TIME 50 /**< Time to keep the reset line to the connectivity chip low (in milliseconds). */ @@ -148,7 +117,7 @@ extern "C" { #ifndef SER_MAX_ADV_DATA #define SER_MAX_ADV_DATA 256 #endif - + #ifdef __cplusplus } #endif diff --git a/src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c b/src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c similarity index 83% rename from src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c rename to src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c index bad3dd03e..dc239c94c 100644 --- a/src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c +++ b/src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c @@ -37,6 +37,7 @@ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ + #include "ble_gap_struct_serialization.h" #include "ble_struct_serialization.h" #include "ble_serialization.h" @@ -45,13 +46,32 @@ #include "string.h" #include "ble_gatts.h" +#if !defined(SER_CONNECTIVITY) && NRF_SD_BLE_API_VERSION > 5 +#include "app_ble_gap.h" +#endif + +#ifndef S112 uint32_t ble_gap_evt_adv_report_t_enc(void const * const p_void_struct, uint8_t * const p_buf, uint32_t buf_len, uint32_t * const p_index) { SER_STRUCT_ENC_BEGIN(ble_gap_evt_adv_report_t); - +#if NRF_SD_BLE_API_VERSION > 5 + SER_PUSH_FIELD(&p_struct->type, ble_gap_adv_report_type_t_enc); + SER_PUSH_FIELD(&p_struct->peer_addr, ble_gap_addr_t_enc); + SER_PUSH_FIELD(&p_struct->direct_addr, ble_gap_addr_t_enc); + SER_PUSH_uint8(&p_struct->primary_phy); + SER_PUSH_uint8(&p_struct->secondary_phy); + SER_PUSH_int8(&p_struct->tx_power); + SER_PUSH_int8(&p_struct->rssi); + SER_PUSH_uint8(&p_struct->ch_index); + SER_PUSH_uint8(&p_struct->set_id); + uint16_t temp = p_struct->data_id; + SER_PUSH_uint16(&temp); + SER_PUSH_FIELD(&p_struct->data, ble_data_t_enc); + SER_PUSH_FIELD(&p_struct->aux_pointer, ble_gap_aux_pointer_t_enc); +#else uint8_t ser_data = (p_struct->scan_rsp & 0x01) | ((p_struct->type & 0x03) << 1); uint8_t data_len = (p_struct->dlen & 0x1F); @@ -60,7 +80,7 @@ uint32_t ble_gap_evt_adv_report_t_enc(void const * const p_void_struct, SER_PUSH_int8(&p_struct->rssi); SER_PUSH_uint8(&ser_data); SER_PUSH_len8data(p_struct->data, data_len); - +#endif SER_STRUCT_ENC_END; } @@ -71,6 +91,23 @@ uint32_t ble_gap_evt_adv_report_t_dec(uint8_t const * const p_buf, { SER_STRUCT_DEC_BEGIN(ble_gap_evt_adv_report_t); +#if NRF_SD_BLE_API_VERSION > 5 + SER_PULL_FIELD(&p_struct->type, ble_gap_adv_report_type_t_dec); + SER_PULL_FIELD(&p_struct->peer_addr, ble_gap_addr_t_dec); + SER_PULL_FIELD(&p_struct->direct_addr, ble_gap_addr_t_dec); + SER_PULL_uint8(&p_struct->primary_phy); + SER_PULL_uint8(&p_struct->secondary_phy); + SER_PULL_int8(&p_struct->tx_power); + SER_PULL_int8(&p_struct->rssi); + SER_PULL_uint8(&p_struct->ch_index); + SER_PULL_uint8(&p_struct->set_id); + uint16_t temp; + SER_PULL_uint16(&temp); + p_struct->data_id = temp & 0x0FFF; + + SER_PULL_FIELD(&p_struct->data, ble_data_t_dec); + SER_PULL_FIELD(&p_struct->aux_pointer, ble_gap_aux_pointer_t_dec); +#else uint8_t ser_data; uint8_t data_len = BLE_GAP_ADV_MAX_SIZE; uint8_t * p_field_data = p_struct->data; @@ -83,9 +120,10 @@ uint32_t ble_gap_evt_adv_report_t_dec(uint8_t const * const p_buf, p_struct->scan_rsp = ser_data & 0x01; p_struct->type = (ser_data >> 1) & 0x03; p_struct->dlen = data_len; - +#endif SER_STRUCT_DEC_END; } +#endif uint32_t ble_gap_irk_t_enc(void const * const p_void_struct, uint8_t * const p_buf, @@ -420,6 +458,9 @@ uint32_t ble_gap_evt_connected_t_enc(void const * const p_void_struct, SER_PUSH_FIELD(&p_struct->peer_addr, ble_gap_addr_t_enc); SER_PUSH_uint8(&p_struct->role); SER_PUSH_FIELD(&p_struct->conn_params, ble_gap_conn_params_t_enc); +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 5 + SER_PUSH_FIELD(&p_struct->adv_data, ble_gap_adv_data_t_enc); +#endif SER_STRUCT_ENC_END; } @@ -434,6 +475,9 @@ uint32_t ble_gap_evt_connected_t_dec(uint8_t const * const p_buf, SER_PULL_FIELD(&p_struct->peer_addr, ble_gap_addr_t_dec); SER_PULL_uint8(&p_struct->role); SER_PULL_FIELD(&p_struct->conn_params, ble_gap_conn_params_t_dec); +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 5 + SER_PULL_FIELD(&p_struct->adv_data, ble_gap_adv_data_t_dec); +#endif SER_STRUCT_DEC_END; } @@ -523,6 +567,7 @@ uint32_t ble_gap_evt_conn_param_update_t_dec(uint8_t const * const p_buf, SER_STRUCT_DEC_END; } +#ifndef S112 uint32_t ble_gap_evt_conn_param_update_request_t_enc(void const * const p_void_struct, uint8_t * const p_buf, uint32_t buf_len, @@ -542,6 +587,7 @@ uint32_t ble_gap_evt_conn_param_update_request_t_dec(uint8_t const * const p_buf SER_PULL_FIELD(&(p_struct->conn_params), ble_gap_conn_params_t_dec); SER_STRUCT_DEC_END; } +#endif //!S112 uint32_t ble_gap_conn_params_t_enc(void const * const p_void_struct, uint8_t * const p_buf, @@ -615,24 +661,35 @@ uint32_t ble_gap_master_id_t_dec(uint8_t const * const p_buf, SER_STRUCT_DEC_END; } +#ifndef S112 uint32_t ble_gap_scan_params_t_enc(void const * const p_void_struct, uint8_t * const p_buf, uint32_t buf_len, uint32_t * const p_index) { SER_STRUCT_ENC_BEGIN(ble_gap_scan_params_t); - - uint8_t ser_data = (p_struct->active & 0x01) - | ((p_struct->use_whitelist & 0x01) << 1) - | ((p_struct->adv_dir_report & 0x01) << 2); + uint8_t ser_data; +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 6 + ser_data = (p_struct->active & 0x01) + | ((p_struct->use_whitelist & 0x01) << 1) + | ((p_struct->adv_dir_report & 0x01) << 2); + SER_PUSH_uint8(&ser_data); +#else + ser_data = + ((p_struct->extended & 0x01) << 0) | + ((p_struct->report_incomplete_evts & 0x01) << 1) | + ((p_struct->active & 0x01) << 2) | + ((p_struct->filter_policy & 0x03) << 3); SER_PUSH_uint8(&ser_data); + SER_PUSH_uint8(&p_struct->scan_phys); + SER_PUSH_buf(p_struct->channel_mask, 5); +#endif SER_PUSH_uint16(&p_struct->interval); SER_PUSH_uint16(&p_struct->window); SER_PUSH_uint16(&p_struct->timeout); SER_STRUCT_ENC_END; } - uint32_t ble_gap_scan_params_t_dec(uint8_t const * const p_buf, uint32_t buf_len, uint32_t * const p_index, @@ -641,17 +698,29 @@ uint32_t ble_gap_scan_params_t_dec(uint8_t const * const p_buf, SER_STRUCT_DEC_BEGIN(ble_gap_scan_params_t); uint8_t ser_data; +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 6 SER_PULL_uint8(&ser_data); p_struct->active = ser_data & 0x01; p_struct->use_whitelist = (ser_data >> 1) & 0x01; p_struct->adv_dir_report = (ser_data >> 2) & 0x01; - +#else + SER_PULL_uint8(&ser_data); + p_struct->extended = ser_data & 0x01; + p_struct->report_incomplete_evts = (ser_data >> 1) & 0x01; + p_struct->active = (ser_data >> 2) & 0x01; + p_struct->filter_policy = (ser_data >> 3) & 0x03; + + SER_PULL_uint8(&p_struct->scan_phys); + uint8_t * p_channel_mask = (uint8_t *)p_struct->channel_mask; + SER_PULL_buf(&p_channel_mask, 5, 5); +#endif SER_PULL_uint16(&p_struct->interval); SER_PULL_uint16(&p_struct->window); SER_PULL_uint16(&p_struct->timeout); SER_STRUCT_DEC_END; } +#endif //!S112 uint32_t ble_gap_enc_key_t_enc(void const * const p_void_struct, uint8_t * const p_buf, @@ -870,7 +939,7 @@ uint32_t ble_gap_opt_passkey_t_dec(uint8_t const * const p_buf, SER_PULL_buf((uint8_t**)&p_struct->p_passkey, BLE_GAP_PASSKEY_LEN, BLE_GAP_PASSKEY_LEN); SER_STRUCT_DEC_END; } - +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 6 uint32_t ble_gap_opt_scan_req_report_t_enc(void const * const p_void_struct, uint8_t * const p_buf, uint32_t buf_len, @@ -897,6 +966,7 @@ uint32_t ble_gap_opt_scan_req_report_t_dec(uint8_t const * const p_buf, SER_STRUCT_DEC_END; } +#endif #if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 4 uint32_t ble_gap_opt_compat_mode_t_enc(void const * const p_void_struct, @@ -927,6 +997,7 @@ uint32_t ble_gap_opt_compat_mode_t_dec(uint8_t const * const p_buf, } #endif +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 6 uint32_t ble_gap_adv_ch_mask_t_enc(void const * const p_void_struct, uint8_t * const p_buf, uint32_t buf_len, @@ -957,6 +1028,7 @@ uint32_t ble_gap_adv_ch_mask_t_dec(uint8_t const * const p_buf, SER_STRUCT_DEC_END; } +#endif #if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 4 uint32_t ble_gap_enable_params_t_enc(void const * const p_void_struct, @@ -1064,14 +1136,27 @@ uint32_t ble_gap_adv_params_t_enc(void const * const p_void_struct, uint32_t * const p_index) { SER_STRUCT_ENC_BEGIN(ble_gap_adv_params_t); - +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 6 SER_PUSH_uint8(&p_struct->type); SER_PUSH_COND(p_struct->p_peer_addr, ble_gap_addr_t_enc); SER_PUSH_uint8(&p_struct->fp); SER_PUSH_uint16(&p_struct->interval); SER_PUSH_uint16(&p_struct->timeout); SER_PUSH_FIELD(&p_struct->channel_mask, ble_gap_adv_ch_mask_t_enc); +#else + SER_PUSH_FIELD(&p_struct->properties, ble_gap_adv_properties_t_enc); + SER_PUSH_COND(p_struct->p_peer_addr, ble_gap_addr_t_enc); + SER_PUSH_uint32(&p_struct->interval); + SER_PUSH_uint16(&p_struct->duration); + SER_PUSH_uint8(&p_struct->max_adv_evts); + SER_PUSH_buf(p_struct->channel_mask, 5); + SER_PUSH_uint8(&p_struct->filter_policy); + SER_PUSH_uint8(&p_struct->primary_phy); + SER_PUSH_uint8(&p_struct->secondary_phy); + uint8_t temp = p_struct->set_id | (p_struct->scan_req_notification << 4); + SER_PUSH_uint8(&temp); +#endif SER_STRUCT_ENC_END; } @@ -1082,12 +1167,31 @@ uint32_t ble_gap_adv_params_t_dec(uint8_t const * const p_buf, { SER_STRUCT_DEC_BEGIN(ble_gap_adv_params_t); +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 6 SER_PULL_uint8(&p_struct->type); SER_PULL_COND(&p_struct->p_peer_addr, ble_gap_addr_t_dec); SER_PULL_uint8(&p_struct->fp); SER_PULL_uint16(&p_struct->interval); SER_PULL_uint16(&p_struct->timeout); SER_PULL_FIELD(&p_struct->channel_mask, ble_gap_adv_ch_mask_t_dec); +#else + SER_PULL_FIELD(&p_struct->properties, ble_gap_adv_properties_t_dec); + SER_PULL_COND(&p_struct->p_peer_addr, ble_gap_addr_t_dec); + SER_PULL_uint32(&p_struct->interval); + SER_PULL_uint16(&p_struct->duration); + SER_PULL_uint8(&p_struct->max_adv_evts); + uint8_t * p_channel_mask = p_struct->channel_mask; + SER_PULL_buf((uint8_t **)&p_channel_mask, 5, 5); + SER_PULL_uint8(&p_struct->filter_policy); + SER_PULL_uint8(&p_struct->primary_phy); + SER_PULL_uint8(&p_struct->secondary_phy); + + uint8_t temp; + SER_PULL_uint8(&temp); + p_struct->set_id = temp & 0x0F; + p_struct->scan_req_notification = (temp & 0x10) ? 1 : 0; + +#endif SER_STRUCT_DEC_END; } @@ -1235,6 +1339,7 @@ uint32_t ble_gap_privacy_params_t_dec(uint8_t const * const p_buf, #if NRF_SD_BLE_API_VERSION >= 4 +#ifndef S112 uint32_t ble_gap_opt_compat_mode_1_t_enc(void const * const p_void_struct, uint8_t * const p_buf, uint32_t buf_len, @@ -1261,6 +1366,7 @@ uint32_t ble_gap_opt_compat_mode_1_t_dec(uint8_t const * const p_buf, SER_STRUCT_DEC_END; } +#endif //!S112 uint32_t ble_gap_opt_slave_latency_disable_t_enc(void const * const p_void_struct, uint8_t * const p_buf, @@ -1325,9 +1431,17 @@ uint32_t ble_gap_cfg_role_count_t_enc(void const * const p_void_struct, SER_STRUCT_ENC_BEGIN(ble_gap_cfg_role_count_t); SER_PUSH_uint8(&p_struct->periph_role_count); +#ifndef S112 SER_PUSH_uint8(&p_struct->central_role_count); SER_PUSH_uint8(&p_struct->central_sec_count); - +#endif //!S112 +#if NRF_SD_BLE_API_VERSION > 5 + SER_PUSH_uint8(&p_struct->adv_set_count); +#ifndef S112 + uint32_t temp = p_struct->qos_channel_survey_role_available; + SER_PUSH_uint8(&temp); +#endif //!S112 +#endif SER_STRUCT_ENC_END; } @@ -1339,12 +1453,22 @@ uint32_t ble_gap_cfg_role_count_t_dec(uint8_t const * const p_buf, SER_STRUCT_DEC_BEGIN(ble_gap_cfg_role_count_t); SER_PULL_uint8(&p_struct->periph_role_count); +#ifndef S112 SER_PULL_uint8(&p_struct->central_role_count); SER_PULL_uint8(&p_struct->central_sec_count); - +#endif //!S112 +#if NRF_SD_BLE_API_VERSION > 5 + SER_PULL_uint8(&p_struct->adv_set_count); +#ifndef S112 + uint8_t temp; + SER_PULL_uint8(&temp); + p_struct->qos_channel_survey_role_available = temp; +#endif //!S112 +#endif SER_STRUCT_DEC_END; } +#ifndef S112 uint32_t ble_gap_data_length_params_t_enc(void const * const p_void_struct, uint8_t * const p_buf, uint32_t buf_len, @@ -1402,6 +1526,7 @@ uint32_t ble_gap_data_length_limitation_t_dec(uint8_t const * const p_buf, SER_STRUCT_DEC_END; } +#endif //!S112 #endif #if NRF_SD_BLE_API_VERSION == 4 @@ -1462,3 +1587,159 @@ uint32_t ble_gap_phys_t_dec(uint8_t const * const p_buf, SER_STRUCT_DEC_END; } #endif + +#if NRF_SD_BLE_API_VERSION > 5 +uint32_t ble_gap_adv_properties_t_enc(void const * const p_void_struct, + uint8_t * const p_buf, + uint32_t buf_len, + uint32_t * const p_index) +{ + SER_STRUCT_ENC_BEGIN(ble_gap_adv_properties_t); + + SER_PUSH_uint8(&p_struct->type); + uint8_t temp = p_struct->anonymous | (p_struct->include_tx_power << 1); + SER_PUSH_uint8(&temp); + + SER_STRUCT_ENC_END; +} + +uint32_t ble_gap_adv_properties_t_dec(uint8_t const * const p_buf, + uint32_t buf_len, + uint32_t * const p_index, + void * const p_void_struct) +{ + SER_STRUCT_DEC_BEGIN(ble_gap_adv_properties_t); + + SER_PULL_uint8(&p_struct->type); + uint8_t temp; + SER_PULL_uint8(&temp); + p_struct->anonymous = temp & 0x01; + p_struct->include_tx_power = (temp & 0x02) ? 1 : 0; + + SER_STRUCT_DEC_END; +} + +#ifndef S112 +uint32_t ble_gap_adv_report_type_t_enc(void const * const p_void_struct, + uint8_t * const p_buf, + uint32_t buf_len, + uint32_t * const p_index) +{ + SER_STRUCT_ENC_BEGIN(ble_gap_adv_report_type_t); + + uint16_t temp = + (p_struct->connectable << 0) | + (p_struct->scannable << 1) | + (p_struct->directed << 2) | + (p_struct->scan_response << 3) | + (p_struct->extended_pdu << 4) | + (p_struct->status << 5) | + (p_struct->reserved << 7); + SER_PUSH_uint16(&temp); + + SER_STRUCT_ENC_END; +} + +uint32_t ble_gap_adv_report_type_t_dec(uint8_t const * const p_buf, + uint32_t buf_len, + uint32_t * const p_index, + void * const p_void_struct) +{ + SER_STRUCT_DEC_BEGIN(ble_gap_adv_report_type_t); + + uint16_t temp; + SER_PULL_uint16(&temp); + p_struct->connectable = (temp >> 0) & 0x01; + p_struct->scannable = (temp >> 1) & 0x01; + p_struct->directed = (temp >> 2) & 0x01; + p_struct->scan_response = (temp >> 3) & 0x01; + p_struct->extended_pdu = (temp >> 4) & 0x01; + p_struct->status = (temp >> 5) & 0x03; + p_struct->reserved = (temp >> 7) & 0x1FF; + + SER_STRUCT_DEC_END; +} + +uint32_t ble_gap_aux_pointer_t_enc(void const * const p_void_struct, + uint8_t * const p_buf, + uint32_t buf_len, + uint32_t * const p_index) +{ + SER_STRUCT_ENC_BEGIN(ble_gap_aux_pointer_t); + + SER_PUSH_uint16(&p_struct->aux_offset); + SER_PUSH_uint8(&p_struct->aux_phy); + + SER_STRUCT_ENC_END; +} + +uint32_t ble_gap_aux_pointer_t_dec(uint8_t const * const p_buf, + uint32_t buf_len, + uint32_t * const p_index, + void * const p_void_struct) +{ + SER_STRUCT_DEC_BEGIN(ble_gap_aux_pointer_t); + + SER_PULL_uint16(&p_struct->aux_offset); + SER_PULL_uint8(&p_struct->aux_phy); + + SER_STRUCT_DEC_END; +} +#endif //!S112 + +uint32_t ble_gap_adv_data_t_enc(void const * const p_void_struct, + uint8_t * const p_buf, + uint32_t buf_len, + uint32_t * const p_index) +{ + SER_STRUCT_ENC_BEGIN(ble_gap_adv_data_t); + + SER_PUSH_FIELD(&p_struct->adv_data, ble_data_t_enc); + SER_PUSH_FIELD(&p_struct->scan_rsp_data, ble_data_t_enc); + + SER_STRUCT_ENC_END; +} + +uint32_t ble_gap_adv_data_t_dec(uint8_t const * const p_buf, + uint32_t buf_len, + uint32_t * const p_index, + void * const p_void_struct) +{ + SER_STRUCT_DEC_BEGIN(ble_gap_adv_data_t); + + SER_PULL_FIELD(&p_struct->adv_data, ble_data_t_dec); + SER_PULL_FIELD(&p_struct->scan_rsp_data, ble_data_t_dec); + + SER_STRUCT_DEC_END; +} + +uint32_t ble_gap_evt_adv_set_terminated_t_enc(void const * const p_void_struct, + uint8_t * const p_buf, + uint32_t buf_len, + uint32_t * const p_index) +{ + SER_STRUCT_ENC_BEGIN(ble_gap_evt_adv_set_terminated_t); + + SER_PUSH_uint8(&p_struct->reason); + SER_PUSH_uint8(&p_struct->adv_handle); + SER_PUSH_uint8(&p_struct->num_completed_adv_events); + SER_PUSH_FIELD(&p_struct->adv_data, ble_gap_adv_data_t_enc); + + SER_STRUCT_ENC_END; +} + +uint32_t ble_gap_evt_adv_set_terminated_t_dec(uint8_t const * const p_buf, + uint32_t buf_len, + uint32_t * const p_index, + void * const p_void_struct) +{ + SER_STRUCT_DEC_BEGIN(ble_gap_evt_adv_set_terminated_t); + + SER_PULL_uint8(&p_struct->reason); + SER_PULL_uint8(&p_struct->adv_handle); + SER_PULL_uint8(&p_struct->num_completed_adv_events); + SER_PULL_FIELD(&p_struct->adv_data, ble_gap_adv_data_t_dec); + + SER_STRUCT_DEC_END; +} +#endif diff --git a/src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.h b/src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.h similarity index 91% rename from src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.h rename to src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.h index 1fa57a013..918d6f5b0 100644 --- a/src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.h +++ b/src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.h @@ -1,5 +1,5 @@ /** - * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA + * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA * * All rights reserved. * @@ -553,6 +553,58 @@ uint32_t ble_gap_phys_t_dec(uint8_t const * const p_buf, void * const p_void_struct); #endif +#if NRF_SD_BLE_API_VERSION > 5 +uint32_t ble_gap_adv_properties_t_enc(void const * const p_void_struct, + uint8_t * const p_buf, + uint32_t buf_len, + uint32_t * const p_index); + +uint32_t ble_gap_adv_properties_t_dec(uint8_t const * const p_buf, + uint32_t buf_len, + uint32_t * const p_index, + void * const p_void_struct); + +uint32_t ble_gap_adv_report_type_t_enc(void const * const p_void_struct, + uint8_t * const p_buf, + uint32_t buf_len, + uint32_t * const p_index); + +uint32_t ble_gap_adv_report_type_t_dec(uint8_t const * const p_buf, + uint32_t buf_len, + uint32_t * const p_index, + void * const p_void_struct); + +uint32_t ble_gap_aux_pointer_t_enc(void const * const p_void_struct, + uint8_t * const p_buf, + uint32_t buf_len, + uint32_t * const p_index); + +uint32_t ble_gap_aux_pointer_t_dec(uint8_t const * const p_buf, + uint32_t buf_len, + uint32_t * const p_index, + void * const p_void_struct); + +uint32_t ble_gap_adv_data_t_enc(void const * const p_void_struct, + uint8_t * const p_buf, + uint32_t buf_len, + uint32_t * const p_index); + +uint32_t ble_gap_adv_data_t_dec(uint8_t const * const p_buf, + uint32_t buf_len, + uint32_t * const p_index, + void * const p_void_struct); + +uint32_t ble_gap_evt_adv_set_terminated_t_enc(void const * const p_void_struct, + uint8_t * const p_buf, + uint32_t buf_len, + uint32_t * const p_index); + +uint32_t ble_gap_evt_adv_set_terminated_t_dec(uint8_t const * const p_buf, + uint32_t buf_len, + uint32_t * const p_index, + void * const p_void_struct); +#endif + #ifdef __cplusplus } #endif diff --git a/src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_gatt_struct_serialization.c b/src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_gatt_struct_serialization.c similarity index 99% rename from src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_gatt_struct_serialization.c rename to src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_gatt_struct_serialization.c index f681c956a..f308ea802 100644 --- a/src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_gatt_struct_serialization.c +++ b/src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_gatt_struct_serialization.c @@ -1,5 +1,5 @@ /** - * Copyright (c) 2016 - 2017, Nordic Semiconductor ASA + * Copyright (c) 2016 - 2018, Nordic Semiconductor ASA * * All rights reserved. * diff --git a/src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_gatt_struct_serialization.h b/src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_gatt_struct_serialization.h similarity index 98% rename from src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_gatt_struct_serialization.h rename to src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_gatt_struct_serialization.h index d14fa104a..d61eaa747 100644 --- a/src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_gatt_struct_serialization.h +++ b/src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_gatt_struct_serialization.h @@ -1,5 +1,5 @@ /** - * Copyright (c) 2016 - 2017, Nordic Semiconductor ASA + * Copyright (c) 2016 - 2018, Nordic Semiconductor ASA * * All rights reserved. * diff --git a/src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_gattc_struct_serialization.c b/src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_gattc_struct_serialization.c similarity index 99% rename from src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_gattc_struct_serialization.c rename to src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_gattc_struct_serialization.c index eb1103bcf..b1b9db6db 100644 --- a/src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_gattc_struct_serialization.c +++ b/src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_gattc_struct_serialization.c @@ -1,5 +1,5 @@ /** - * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA + * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA * * All rights reserved. * diff --git a/src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_gattc_struct_serialization.h b/src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_gattc_struct_serialization.h similarity index 99% rename from src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_gattc_struct_serialization.h rename to src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_gattc_struct_serialization.h index c447f37f1..f17e58f4e 100644 --- a/src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_gattc_struct_serialization.h +++ b/src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_gattc_struct_serialization.h @@ -1,5 +1,5 @@ /** - * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA + * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA * * All rights reserved. * diff --git a/src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_gatts_struct_serialization.c b/src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_gatts_struct_serialization.c similarity index 99% rename from src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_gatts_struct_serialization.c rename to src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_gatts_struct_serialization.c index 8e7b7a033..476a11d0f 100644 --- a/src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_gatts_struct_serialization.c +++ b/src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_gatts_struct_serialization.c @@ -1,5 +1,5 @@ /** - * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA + * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA * * All rights reserved. * diff --git a/src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_gatts_struct_serialization.h b/src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_gatts_struct_serialization.h similarity index 99% rename from src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_gatts_struct_serialization.h rename to src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_gatts_struct_serialization.h index 9ea86d6db..4a9391334 100644 --- a/src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_gatts_struct_serialization.h +++ b/src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_gatts_struct_serialization.h @@ -1,5 +1,5 @@ /** - * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA + * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA * * All rights reserved. * diff --git a/src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_l2cap_struct_serialization.c b/src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_l2cap_struct_serialization.c similarity index 99% rename from src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_l2cap_struct_serialization.c rename to src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_l2cap_struct_serialization.c index 4bc57f806..cc48f8036 100644 --- a/src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_l2cap_struct_serialization.c +++ b/src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_l2cap_struct_serialization.c @@ -1,5 +1,5 @@ /** - * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA + * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA * * All rights reserved. * diff --git a/src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_l2cap_struct_serialization.h b/src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_l2cap_struct_serialization.h similarity index 98% rename from src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_l2cap_struct_serialization.h rename to src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_l2cap_struct_serialization.h index e3cc6a497..a8c7bc1f9 100644 --- a/src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_l2cap_struct_serialization.h +++ b/src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_l2cap_struct_serialization.h @@ -1,5 +1,5 @@ /** - * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA + * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA * * All rights reserved. * @@ -40,6 +40,7 @@ #ifndef BLE_L2CAP_STRUCT_SERIALIZATION_H #define BLE_L2CAP_STRUCT_SERIALIZATION_H +#ifndef S112 #include "ble_l2cap.h" #ifdef __cplusplus @@ -110,7 +111,9 @@ uint32_t ble_l2cap_ch_tx_params_t_dec(uint8_t const * const p_buf, uint32_t * const p_index, void * const p_void_struct); #endif +#endif #ifdef __cplusplus } #endif -#endif + +#endif /*BLE_L2CAP_STRUCT_SERIALIZATION_H*/ diff --git a/src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_struct_serialization.c b/src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_struct_serialization.c similarity index 95% rename from src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_struct_serialization.c rename to src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_struct_serialization.c index aee4eea3c..a1ef9516a 100644 --- a/src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_struct_serialization.c +++ b/src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_struct_serialization.c @@ -1,30 +1,30 @@ /** - * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA - * + * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA + * * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. - * + * * 2. Redistributions in binary form, except as embedded into a Nordic * Semiconductor ASA integrated circuit in a product or a software update for * such product, must reproduce the above copyright notice, this list of * conditions and the following disclaimer in the documentation and/or other * materials provided with the distribution. - * + * * 3. Neither the name of Nordic Semiconductor ASA nor the names of its * contributors may be used to endorse or promote products derived from this * software without specific prior written permission. - * + * * 4. This software, with or without modification, must only be used with a * Nordic Semiconductor ASA integrated circuit. - * + * * 5. Any software provided in binary form under this license must not be reverse * engineered, decompiled, modified and/or disassembled. - * + * * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE @@ -35,8 +35,9 @@ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * + * */ + #include "ble_struct_serialization.h" #include "ble_gap_struct_serialization.h" #include "ble_gatt_struct_serialization.h" @@ -46,6 +47,12 @@ #include "ble_types.h" #include "ble.h" #include "cond_field_serialization.h" +#include "ser_config.h" +#ifdef SER_CONNECTIVITY +#include "conn_ble_gap_sec_keys.h" +#else +#include "app_ble_gap.h" +#endif #include @@ -468,7 +475,15 @@ uint32_t ble_data_t_enc(void const * const p_void_struct, { SER_STRUCT_ENC_BEGIN(ble_data_t); - uint32_t buf_id = (uint32_t)p_struct->p_data; + uint32_t buf_id = 0; +#if NRF_SD_BLE_API_VERSION > 5 +#if defined(SER_CONNECTIVITY) + buf_id = conn_ble_gap_ble_data_buf_free(p_struct->p_data); +#else + buf_id = app_ble_gap_adv_buf_register(p_struct->p_data); + SER_ASSERT(buf_id >= 0, NRF_ERROR_NO_MEM); +#endif +#endif SER_PUSH_uint32(&buf_id); SER_PUSH_len16data(p_struct->p_data, p_struct->len); @@ -484,11 +499,16 @@ uint32_t ble_data_t_dec(uint8_t const * const p_buf, uint32_t buf_id; SER_PULL_uint32(&buf_id); -#if defined(SER_CONNECTIVITY) && NRF_SD_BLE_API_VERSION > 5 + p_struct->len = SER_MAX_ADV_DATA; +#if NRF_SD_BLE_API_VERSION > 5 +#if defined(SER_CONNECTIVITY) if (buf_id && (p_struct->p_data == NULL)) - { - p_struct->p_data = conn_ble_gap_ble_data_buf_alloc(buf_id); - } + { + p_struct->p_data = conn_ble_gap_ble_data_buf_alloc(buf_id); + } +#else + p_struct->p_data = app_ble_gap_adv_buf_unregister(buf_id, true); +#endif #endif SER_PULL_len16data(&p_struct->p_data, &p_struct->len); diff --git a/src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_struct_serialization.h b/src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_struct_serialization.h similarity index 99% rename from src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_struct_serialization.h rename to src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_struct_serialization.h index 56058f26a..66c05a94b 100644 --- a/src/sd_api_v5/sdk/components/serialization/common/struct_ser/ble/ble_struct_serialization.h +++ b/src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_struct_serialization.h @@ -1,5 +1,5 @@ /** - * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA + * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA * * All rights reserved. * diff --git a/src/sd_api_v2/ble_gap_impl.cpp b/src/sd_api_v2/ble_gap_impl.cpp new file mode 100644 index 000000000..3acb0894d --- /dev/null +++ b/src/sd_api_v2/ble_gap_impl.cpp @@ -0,0 +1,725 @@ +/* + * Copyright (c) 2016 Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in or with a processor manufactured by Nordic + * Semiconductor ASA, or in or with a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * 5. Any software provided in binary or object form under this license must not be + * reverse engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "adapter.h" +#include "ble_common.h" +#include "adapter_internal.h" + +#include "ble_gap.h" +#include "ble_gap_app.h" + +#include "app_ble_gap.h" + +#include + +static uint32_t gap_encode_decode(adapter_t *adapter, const encode_function_t &encode_function, + const decode_function_t &decode_function) +{ + const auto adapterLayer = static_cast(adapter->internal); + + if (adapterLayer == nullptr) + { + return NRF_ERROR_INVALID_PARAM; + } + + RequestReplyCodecContext context(adapterLayer->transport); + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_adv_start( + adapter_t *adapter, + ble_gap_adv_params_t const * const p_adv_params + ) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_adv_start_req_enc( + p_adv_params, + buffer, + length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_adv_start_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + + +uint32_t sd_ble_gap_device_name_get(adapter_t *adapter, uint8_t * const p_dev_name, uint16_t * const p_len) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_device_name_get_req_enc( + p_dev_name, + p_len, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_device_name_get_rsp_dec( + buffer, + length, + p_dev_name, + p_len, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_appearance_get(adapter_t *adapter, uint16_t * const p_appearance) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_appearance_get_req_enc( + p_appearance, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_appearance_get_rsp_dec( + buffer, + length, + p_appearance, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_device_name_set(adapter_t *adapter, ble_gap_conn_sec_mode_t const * const p_write_perm, + uint8_t const * const p_dev_name, + uint16_t len) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_device_name_set_req_enc(p_write_perm, + p_dev_name, + len, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_device_name_set_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_appearance_set(adapter_t *adapter, uint16_t appearance) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_appearance_set_req_enc( + appearance, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_appearance_set_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + + +uint32_t sd_ble_gap_ppcp_set(adapter_t *adapter, ble_gap_conn_params_t const * const p_conn_params) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_ppcp_set_req_enc( + p_conn_params, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_ppcp_set_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + + +uint32_t sd_ble_gap_adv_data_set(adapter_t *adapter, uint8_t const * const p_data, + uint8_t dlen, + uint8_t const * const p_sr_data, + uint8_t srdlen) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_adv_data_set_req_enc(p_data, + dlen, + p_sr_data, + srdlen, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_adv_data_set_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + + +uint32_t sd_ble_gap_conn_param_update(adapter_t *adapter, uint16_t conn_handle, ble_gap_conn_params_t const * const p_conn_params) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_conn_param_update_req_enc( + conn_handle, + p_conn_params, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_conn_param_update_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + + +uint32_t sd_ble_gap_disconnect(adapter_t *adapter, uint16_t conn_handle, uint8_t hci_status_code) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_disconnect_req_enc( + conn_handle, + hci_status_code, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_disconnect_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_sec_info_reply(adapter_t *adapter, uint16_t conn_handle, + ble_gap_enc_info_t const * p_enc_info, + ble_gap_irk_t const * p_id_info, + ble_gap_sign_info_t const * p_sign_info) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_sec_info_reply_req_enc( + conn_handle, + p_enc_info, + p_id_info, + p_sign_info, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_sec_info_reply_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + + +uint32_t sd_ble_gap_ppcp_get(adapter_t *adapter, ble_gap_conn_params_t * const p_conn_params) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_ppcp_get_req_enc( + p_conn_params, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_ppcp_get_rsp_dec( + buffer, + length, + p_conn_params, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_address_get(adapter_t *adapter, ble_gap_addr_t * const p_addr) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_address_get_req_enc( + p_addr, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_address_get_rsp_dec( + buffer, + length, + static_cast(p_addr), + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_address_set(adapter_t *adapter, uint8_t addr_cycle_mode, ble_gap_addr_t const * const p_addr) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_address_set_req_enc( + addr_cycle_mode, + p_addr, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_address_set_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_adv_stop(adapter_t *adapter) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_adv_stop_req_enc( + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_adv_stop_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + + +uint32_t sd_ble_gap_auth_key_reply(adapter_t *adapter, uint16_t conn_handle, + uint8_t key_type, + uint8_t const * const key) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_auth_key_reply_req_enc( + conn_handle, + key_type, + key, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_auth_key_reply_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_authenticate(adapter_t *adapter, uint16_t conn_handle, ble_gap_sec_params_t const * const p_sec_params) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_authenticate_req_enc( + conn_handle, + p_sec_params, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_authenticate_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_conn_sec_get(adapter_t *adapter, uint16_t conn_handle, ble_gap_conn_sec_t * const p_conn_sec) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_conn_sec_get_req_enc( + conn_handle, + p_conn_sec, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_conn_sec_get_rsp_dec( + buffer, + length, + const_cast(&p_conn_sec), + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_rssi_start(adapter_t *adapter, uint16_t conn_handle, uint8_t threshold_dbm, uint8_t skip_count) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_rssi_start_req_enc( + conn_handle, + threshold_dbm, + skip_count, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_rssi_start_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_rssi_stop(adapter_t *adapter, uint16_t conn_handle) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_rssi_stop_req_enc( + conn_handle, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_rssi_stop_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_tx_power_set(adapter_t *adapter, int8_t tx_power) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_tx_power_set_req_enc( + tx_power, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_tx_power_set_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_scan_stop(adapter_t *adapter) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_scan_stop_req_enc( + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_scan_stop_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_connect(adapter_t *adapter, + ble_gap_addr_t const * const p_addr, + ble_gap_scan_params_t const * const p_scan_params, + ble_gap_conn_params_t const * const p_conn_params + ) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_connect_req_enc( + p_addr, + p_scan_params, + p_conn_params, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_connect_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + + +uint32_t sd_ble_gap_connect_cancel(adapter_t *adapter) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_connect_cancel_req_enc( + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_connect_cancel_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + + +uint32_t sd_ble_gap_scan_start(adapter_t *adapter, ble_gap_scan_params_t const * const p_scan_params) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_scan_start_req_enc( + p_scan_params, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_scan_start_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_encrypt(adapter_t *adapter, + uint16_t conn_handle, + ble_gap_master_id_t const * p_master_id, + ble_gap_enc_info_t const * p_enc_info) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_encrypt_req_enc( + conn_handle, + p_master_id, + p_enc_info, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_encrypt_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + + +uint32_t sd_ble_gap_rssi_get(adapter_t *adapter, uint16_t conn_handle, + int8_t * p_rssi) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_rssi_get_req_enc( + conn_handle, + p_rssi, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_rssi_get_rsp_dec( + buffer, + length, + static_cast(p_rssi), + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + + +uint32_t sd_ble_gap_sec_params_reply(adapter_t *adapter, + uint16_t conn_handle, + uint8_t sec_status, + ble_gap_sec_params_t const *p_sec_params, + ble_gap_sec_keyset_t const *p_sec_keyset) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + uint32_t index = 0; + auto err_code = app_ble_gap_sec_keys_storage_create(conn_handle, &index); + + if (err_code != NRF_SUCCESS) + { + return err_code; + } + + if (p_sec_keyset) + { + err_code = app_ble_gap_sec_keys_update(index, p_sec_keyset); + + if (err_code != NRF_SUCCESS) + { + return err_code; + } + } + + return ble_gap_sec_params_reply_req_enc( + conn_handle, + sec_status, + p_sec_params, + p_sec_keyset, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_sec_params_reply_rsp_dec( + buffer, + length, + p_sec_keyset, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_lesc_oob_data_get(adapter_t *adapter, uint16_t conn_handle, ble_gap_lesc_p256_pk_t const *p_pk_own, ble_gap_lesc_oob_data_t *p_oobd_own) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_lesc_oob_data_get_req_enc( + conn_handle, + p_pk_own, + p_oobd_own, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_lesc_oob_data_get_rsp_dec( + buffer, + length, + &p_oobd_own, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_lesc_oob_data_set(adapter_t *adapter, uint16_t conn_handle, ble_gap_lesc_oob_data_t const *p_oobd_own, ble_gap_lesc_oob_data_t const *p_oobd_peer) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_lesc_oob_data_set_req_enc( + conn_handle, + p_oobd_own, + p_oobd_peer, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_lesc_oob_data_set_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_lesc_dhkey_reply(adapter_t *adapter, uint16_t conn_handle, ble_gap_lesc_dhkey_t const *p_dhkey) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_lesc_dhkey_reply_req_enc( + conn_handle, + p_dhkey, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_lesc_dhkey_reply_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_keypress_notify(adapter_t *adapter, uint16_t conn_handle, uint8_t kp_not) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_keypress_notify_req_enc( + conn_handle, + kp_not, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_keypress_notify_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} diff --git a/src/sd_api_v2/ble_gattc_impl.cpp b/src/sd_api_v2/ble_gattc_impl.cpp new file mode 100644 index 000000000..beb6131b0 --- /dev/null +++ b/src/sd_api_v2/ble_gattc_impl.cpp @@ -0,0 +1,178 @@ +/* + * Copyright (c) 2016 Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in or with a processor manufactured by Nordic + * Semiconductor ASA, or in or with a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * 5. Any software provided in binary or object form under this license must not be + * reverse engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include + +// C++ code +#include "adapter.h" + + +// C code +#include "ble_gattc.h" +#include "ble_gattc_app.h" // Encoder/decoder functions + +#include "ble_common.h" + +uint32_t sd_ble_gattc_primary_services_discover(adapter_t *adapter, uint16_t conn_handle, uint16_t start_handle, ble_uuid_t const *p_srvc_uuid) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gattc_primary_services_discover_req_enc(conn_handle, start_handle, p_srvc_uuid, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gattc_primary_services_discover_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gattc_relationships_discover(adapter_t *adapter, uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gattc_relationships_discover_req_enc(conn_handle, p_handle_range, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gattc_relationships_discover_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gattc_characteristics_discover(adapter_t *adapter, uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gattc_characteristics_discover_req_enc(conn_handle, p_handle_range, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gattc_characteristics_discover_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gattc_descriptors_discover(adapter_t *adapter, uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gattc_descriptors_discover_req_enc(conn_handle, p_handle_range, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gattc_descriptors_discover_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gattc_char_value_by_uuid_read(adapter_t *adapter, uint16_t conn_handle, ble_uuid_t const *p_uuid, ble_gattc_handle_range_t const *p_handle_range) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gattc_char_value_by_uuid_read_req_enc(conn_handle, p_uuid, p_handle_range, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gattc_char_value_by_uuid_read_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gattc_read(adapter_t *adapter, uint16_t conn_handle, uint16_t handle, uint16_t offset) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gattc_read_req_enc(conn_handle, handle, offset, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gattc_read_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gattc_char_values_read(adapter_t *adapter, uint16_t conn_handle, uint16_t const *p_handles, uint16_t handle_count) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gattc_char_values_read_req_enc(conn_handle, p_handles, handle_count, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gattc_char_values_read_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gattc_write(adapter_t *adapter, uint16_t conn_handle, ble_gattc_write_params_t const *p_write_params) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gattc_write_req_enc(conn_handle, p_write_params, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gattc_write_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gattc_hv_confirm(adapter_t *adapter, uint16_t conn_handle, uint16_t handle) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gattc_hv_confirm_req_enc(conn_handle, handle, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gattc_hv_confirm_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gattc_attr_info_discover(adapter_t *adapter, uint16_t conn_handle, ble_gattc_handle_range_t const * p_handle_range) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gattc_attr_info_discover_req_enc(conn_handle, p_handle_range, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gattc_attr_info_discover_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} diff --git a/src/sd_api_v2/ble_gatts_impl.cpp b/src/sd_api_v2/ble_gatts_impl.cpp new file mode 100644 index 000000000..4656b0cb8 --- /dev/null +++ b/src/sd_api_v2/ble_gatts_impl.cpp @@ -0,0 +1,218 @@ +/* + * Copyright (c) 2016 Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in or with a processor manufactured by Nordic + * Semiconductor ASA, or in or with a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * 5. Any software provided in binary or object form under this license must not be + * reverse engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include + +// C++ code +#include "adapter.h" + +// C code +#include "ble_gatts.h" +#include "ble_gatts_app.h" // Encoder/decoder functions + +#include "ble_common.h" + +uint32_t sd_ble_gatts_service_add(adapter_t *adapter, uint8_t type, ble_uuid_t const *p_uuid, uint16_t *p_handle) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_service_add_req_enc(type, p_uuid, p_handle, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_service_add_rsp_dec(buffer, length, p_handle, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_include_add(adapter_t *adapter, uint16_t service_handle, uint16_t inc_srvc_handle, uint16_t *p_include_handle) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_include_add_req_enc(service_handle, inc_srvc_handle, p_include_handle, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_include_add_rsp_dec(buffer, length, p_include_handle, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_characteristic_add(adapter_t *adapter, uint16_t service_handle, ble_gatts_char_md_t const *p_char_md, ble_gatts_attr_t const *p_attr_char_value, ble_gatts_char_handles_t *p_handles) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_characteristic_add_req_enc(service_handle, p_char_md, p_attr_char_value, p_handles, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + uint16_t * handles = &p_handles->value_handle; + return ble_gatts_characteristic_add_rsp_dec(buffer, length, &handles, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_descriptor_add(adapter_t *adapter, uint16_t char_handle, ble_gatts_attr_t const *p_attr, uint16_t *p_handle) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_descriptor_add_req_enc(char_handle, p_attr, p_handle, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_descriptor_add_rsp_dec(buffer, length, p_handle, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_value_set(adapter_t *adapter, uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_value_set_req_enc(conn_handle, handle, p_value, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_value_set_rsp_dec(buffer, length, p_value, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_value_get(adapter_t *adapter, uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_value_get_req_enc(conn_handle, handle, p_value, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_value_get_rsp_dec(buffer, length, p_value, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_hvx(adapter_t *adapter, uint16_t conn_handle, ble_gatts_hvx_params_t const *p_hvx_params) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_hvx_req_enc(conn_handle, p_hvx_params, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + uint16_t *out_length = p_hvx_params->p_len; + return ble_gatts_hvx_rsp_dec(buffer, length, result, &out_length); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_service_changed(adapter_t *adapter, uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_service_changed_req_enc(conn_handle, start_handle, end_handle, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_service_changed_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_rw_authorize_reply(adapter_t *adapter, uint16_t conn_handle, ble_gatts_rw_authorize_reply_params_t const *p_rw_authorize_reply_params) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_rw_authorize_reply_req_enc(conn_handle, p_rw_authorize_reply_params, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_rw_authorize_reply_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_sys_attr_set(adapter_t *adapter, uint16_t conn_handle, uint8_t const *p_sys_attr_data, uint16_t len, uint32_t flags) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_sys_attr_set_req_enc(conn_handle, p_sys_attr_data, len, flags, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_sys_attr_set_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_sys_attr_get(adapter_t *adapter, uint16_t conn_handle, uint8_t *p_sys_attr_data, uint16_t *p_len, uint32_t flags) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_sys_attr_get_req_enc(conn_handle, p_sys_attr_data, p_len, flags, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_sys_attr_get_rsp_dec(buffer, length, p_sys_attr_data, p_len, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_initial_user_handle_get(adapter_t *adapter, uint16_t *p_handle) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_initial_user_handle_get_req_enc(p_handle, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_initial_user_handle_get_rsp_dec(buffer, length, &p_handle, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_attr_get(adapter_t *adapter, uint16_t handle, ble_uuid_t * p_uuid, ble_gatts_attr_md_t * p_md) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_attr_get_req_enc(handle, p_uuid, p_md, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_attr_get_rsp_dec(buffer, length, &p_uuid, &p_md, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} diff --git a/src/common/ble_impl.cpp b/src/sd_api_v2/ble_impl.cpp old mode 100755 new mode 100644 similarity index 70% rename from src/common/ble_impl.cpp rename to src/sd_api_v2/ble_impl.cpp index c7a7fa05c..fc46ccdb4 --- a/src/common/ble_impl.cpp +++ b/src/sd_api_v2/ble_impl.cpp @@ -40,14 +40,16 @@ #include "ble.h" #include "ble_app.h" +#include "app_ble_gap.h" +#include -#include +#include uint32_t sd_ble_uuid_encode(adapter_t* adapter, ble_uuid_t const * const p_uuid, uint8_t * const p_uuid_le_len, uint8_t * const p_uuid_le) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_uuid_encode_req_enc( p_uuid, p_uuid_le_len, @@ -56,7 +58,7 @@ uint32_t sd_ble_uuid_encode(adapter_t* adapter, ble_uuid_t const * const p_uuid, length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_uuid_encode_rsp_dec( buffer, length, @@ -68,10 +70,9 @@ uint32_t sd_ble_uuid_encode(adapter_t* adapter, ble_uuid_t const * const p_uuid, return encode_decode(adapter, encode_function, decode_function); } // ble_tx_packet_count_get_req_enc -#if NRF_SD_BLE_API_VERSION < 4 uint32_t sd_ble_tx_packet_count_get(adapter_t *adapter, uint16_t conn_handle, uint8_t * p_count) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_tx_packet_count_get_req_enc( conn_handle, p_count, @@ -79,7 +80,7 @@ uint32_t sd_ble_tx_packet_count_get(adapter_t *adapter, uint16_t conn_handle, ui length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_tx_packet_count_get_rsp_dec( buffer, length, @@ -89,11 +90,10 @@ uint32_t sd_ble_tx_packet_count_get(adapter_t *adapter, uint16_t conn_handle, ui return encode_decode(adapter, encode_function, decode_function); } -#endif uint32_t sd_ble_uuid_vs_add(adapter_t *adapter, ble_uuid128_t const * const p_vs_uuid, uint8_t * const p_uuid_type) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_uuid_vs_add_req_enc( p_vs_uuid, p_uuid_type, @@ -101,7 +101,7 @@ uint32_t sd_ble_uuid_vs_add(adapter_t *adapter, ble_uuid128_t const * const p_vs length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_uuid_vs_add_rsp_dec( buffer, length, @@ -114,7 +114,7 @@ uint32_t sd_ble_uuid_vs_add(adapter_t *adapter, ble_uuid128_t const * const p_vs uint32_t sd_ble_uuid_decode(adapter_t *adapter, uint8_t uuid_le_len, uint8_t const * const p_uuid_le, ble_uuid_t * const p_uuid) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_uuid_decode_req_enc( uuid_le_len, p_uuid_le, @@ -123,7 +123,7 @@ uint32_t sd_ble_uuid_decode(adapter_t *adapter, uint8_t uuid_le_len, uint8_t con length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_uuid_decode_rsp_dec( buffer, length, @@ -136,14 +136,14 @@ uint32_t sd_ble_uuid_decode(adapter_t *adapter, uint8_t uuid_le_len, uint8_t con uint32_t sd_ble_version_get(adapter_t *adapter, ble_version_t * p_version) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_version_get_req_enc( p_version, buffer, length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_version_get_rsp_dec( buffer, length, @@ -156,7 +156,7 @@ uint32_t sd_ble_version_get(adapter_t *adapter, ble_version_t * p_version) uint32_t sd_ble_opt_get(adapter_t *adapter, uint32_t opt_id, ble_opt_t *p_opt) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_opt_get_req_enc( opt_id, p_opt, @@ -164,7 +164,7 @@ uint32_t sd_ble_opt_get(adapter_t *adapter, uint32_t opt_id, ble_opt_t *p_opt) length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_opt_get_rsp_dec( buffer, length, @@ -178,7 +178,7 @@ uint32_t sd_ble_opt_get(adapter_t *adapter, uint32_t opt_id, ble_opt_t *p_opt) uint32_t sd_ble_opt_set(adapter_t *adapter, uint32_t opt_id, ble_opt_t const *p_opt) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_opt_set_req_enc( opt_id, p_opt, @@ -186,7 +186,7 @@ uint32_t sd_ble_opt_set(adapter_t *adapter, uint32_t opt_id, ble_opt_t const *p_ length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_opt_set_rsp_dec( buffer, length, @@ -196,47 +196,27 @@ uint32_t sd_ble_opt_set(adapter_t *adapter, uint32_t opt_id, ble_opt_t const *p_ return encode_decode(adapter, encode_function, decode_function); } -#if NRF_SD_BLE_API_VERSION >= 5 -uint32_t sd_ble_cfg_set(adapter_t *adapter, uint32_t cfg_id, ble_cfg_t const * p_cfg, uint32_t app_ram_base) -{ - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { - return ble_cfg_set_req_enc( - cfg_id, - p_cfg, - buffer, - length); - }; - - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { - return ble_cfg_set_rsp_dec( - buffer, - length, - result); - }; - - return encode_decode(adapter, encode_function, decode_function); -} -#endif - uint32_t sd_ble_enable( adapter_t *adapter, -#if NRF_SD_BLE_API_VERSION < 4 ble_enable_params_t * p_params, -#endif uint32_t *p_app_ram_base) { (void)p_app_ram_base; - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + auto adapterLayer = static_cast(adapter->internal); + RequestReplyCodecContext context(adapterLayer->transport); + + // Reset previous app_ble_gap data + app_ble_gap_state_reset(); + + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_enable_req_enc( -#if NRF_SD_BLE_API_VERSION < 4 p_params, -#endif buffer, length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_enable_rsp_dec( buffer, length, @@ -253,7 +233,7 @@ uint32_t sd_ble_user_mem_reply(adapter_t *adapter, uint16_t conn_handle, ble_use return NRF_ERROR_INVALID_PARAM; } - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_user_mem_reply_req_enc( conn_handle, p_block, @@ -261,7 +241,7 @@ uint32_t sd_ble_user_mem_reply(adapter_t *adapter, uint16_t conn_handle, ble_use length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_user_mem_reply_rsp_dec( buffer, length, diff --git a/src/sd_api_v2/sdk/components/serialization/application/codecs/s130/serializers/app_ble_gap_sec_keys.h b/src/sd_api_v2/sdk/components/serialization/application/codecs/s130/serializers/app_ble_gap_sec_keys.h deleted file mode 100755 index 71e6e432f..000000000 --- a/src/sd_api_v2/sdk/components/serialization/application/codecs/s130/serializers/app_ble_gap_sec_keys.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright (c) 2016 Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this - * list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of other - * contributors to this software may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * 4. This software must only be used in or with a processor manufactured by Nordic - * Semiconductor ASA, or in or with a processor manufactured by a third party that - * is used in combination with a processor manufactured by Nordic Semiconductor. - * - * 5. Any software provided in binary or object form under this license must not be - * reverse engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef _APP_BLE_GAP_SEC_KEYS_H -#define _APP_BLE_GAP_SEC_KEYS_H - -/** - * @addtogroup ser_codecs Serialization codecs - * @ingroup ble_sdk_lib_serialization - */ - -/** - * @addtogroup ser_app_s130_codecs Application s130 codecs - * @ingroup ser_codecs - */ - - /**@file - * - * @defgroup app_ble_gap_sec_keys GAP Functions for managing memory for security keys in application device. - * @{ - * @ingroup ser_app_s130_codecs - * - * @brief GAP Application auxiliary functions for synchronizing GAP security keys with the ones stored in the connectivity device. - */ - -#include "ble_gap.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/**@brief GAP connection - keyset mapping structure. - * - * @note This structure is used to map keysets to connection instances, and will be stored in a static table. - */ -typedef struct -{ - uint8_t conn_active; /**< Indication that keys for this connection are used by soft device. 0: keys used; 1: keys not used*/ - ble_gap_sec_keyset_t keyset; /**< Keyset structure, see @ref ble_gap_sec_keyset_t.*/ -} ser_ble_gap_app_keyset_t; - - -/**@brief Sets root context for calls to *_context_create, *_context_destroy, *_context_find -* -* @param[in] context root pointer to use as key for finding keysets -*/ -void app_ble_gap_sec_context_root_set(void *context); - - -/**@brief Release root context for calls to *_context_create, *_context_destroy, *_context_find -* -*/ -void app_ble_gap_sec_context_root_release(); - - -/**@brief allocates instance for storage of encryption keys. - * - * @param[in] adapter adapter - * @param[in] conn_handle conn_handle - * @param[out] **pp_gap_app_keyset Pointer to the keyset corresponding to the given conn_handle - * - * @retval NRF_SUCCESS Context allocated. - * @retval NRF_ERROR_NO_MEM No free instance available. - */ -uint32_t app_ble_gap_sec_context_create(uint16_t conn_handle, ser_ble_gap_app_keyset_t **pp_gap_app_keyset); - -/**@brief release instance identified by a connection handle. - * - * @param[in] adapter adapter - * @param[in] conn_handle conn_handle - * - * @retval NRF_SUCCESS Context released. - * @retval NRF_ERROR_NOT_FOUND instance with conn_handle not found - */ -uint32_t app_ble_gap_sec_context_destroy(uint16_t conn_handle); - -/**@brief finds index of instance identified by a connection handle in m_app_keys_table[]. - * - * @param[in] adapter adapter - * @param[in] conn_handle conn_handle - * - * @param[out] **pp_gap_app_keyset Pointer to the keyset corresponding to the given conn_handle - * - * @retval NRF_SUCCESS Context found - * @retval NRF_ERROR_NOT_FOUND instance with conn_handle not found - */ -uint32_t app_ble_gap_sec_context_find(uint16_t conn_handle, ser_ble_gap_app_keyset_t **pp_gap_app_keyset); -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif //_APP_BLE_GAP_SEC_KEYS_H diff --git a/src/sd_api_v2/sdk/components/serialization/application/codecs/s130/serializers/ble_gap_evt_auth_status.c b/src/sd_api_v2/sdk/components/serialization/application/codecs/s130/serializers/ble_gap_evt_auth_status.c index 2d6ab29ac..2af45ae61 100755 --- a/src/sd_api_v2/sdk/components/serialization/application/codecs/s130/serializers/ble_gap_evt_auth_status.c +++ b/src/sd_api_v2/sdk/components/serialization/application/codecs/s130/serializers/ble_gap_evt_auth_status.c @@ -40,7 +40,7 @@ #include "ble_serialization.h" #include "ble_gap_struct_serialization.h" #include "app_util.h" -#include "app_ble_gap_sec_keys.h" +#include "app_ble_gap.h" uint32_t ble_gap_evt_auth_status_dec( uint8_t const * const p_buf, @@ -50,7 +50,6 @@ uint32_t ble_gap_evt_auth_status_dec( { uint32_t index = 0; uint32_t err_code = NRF_SUCCESS; - ser_ble_gap_app_keyset_t *keyset; SER_ASSERT_NOT_NULL(p_buf); SER_ASSERT_NOT_NULL(p_event_len); @@ -76,15 +75,20 @@ uint32_t ble_gap_evt_auth_status_dec( err_code = ble_gap_evt_auth_status_t_dec(p_buf, packet_len, &index, &(p_event->evt.gap_evt.params.auth_status)); SER_ASSERT(err_code == NRF_SUCCESS, err_code); - // keyset is an extension of standard event data - used to synchronize keys at application - err_code = app_ble_gap_sec_context_find(p_event->evt.gap_evt.conn_handle, &keyset); + uint32_t conn_index; + err_code = app_ble_gap_sec_keys_find(p_event->evt.gap_evt.conn_handle, &conn_index); + SER_ASSERT(err_code == NRF_SUCCESS, err_code); if (err_code == NRF_SUCCESS) { - err_code = ble_gap_sec_keyset_t_dec(p_buf, packet_len, &index, (void*) (&keyset->keyset)); + ble_gap_sec_keyset_t *keyset; + err_code = app_ble_gap_sec_keys_get(conn_index, &keyset); + SER_ASSERT(err_code == NRF_SUCCESS, err_code); + + err_code = ble_gap_sec_keyset_t_dec(p_buf, packet_len, &index, (void*)keyset); SER_ASSERT(err_code == NRF_SUCCESS, err_code); - err_code = app_ble_gap_sec_context_destroy(p_event->evt.gap_evt.conn_handle); + err_code = app_ble_gap_sec_keys_storage_destroy(p_event->evt.gap_evt.conn_handle); SER_ASSERT(err_code == NRF_SUCCESS, err_code); } else diff --git a/src/sd_api_v2/sdk/components/serialization/application/codecs/s130/serializers/ble_gap_evt_lesc_dhkey_request.c b/src/sd_api_v2/sdk/components/serialization/application/codecs/s130/serializers/ble_gap_evt_lesc_dhkey_request.c index 5ed7fd420..91af755e9 100755 --- a/src/sd_api_v2/sdk/components/serialization/application/codecs/s130/serializers/ble_gap_evt_lesc_dhkey_request.c +++ b/src/sd_api_v2/sdk/components/serialization/application/codecs/s130/serializers/ble_gap_evt_lesc_dhkey_request.c @@ -39,9 +39,7 @@ #include "ble_serialization.h" #include "ble_gap_struct_serialization.h" #include "cond_field_serialization.h" -#include "app_util.h" -#include "app_ble_gap_sec_keys.h" -extern ser_ble_gap_app_keyset_t m_app_keys_table[]; +#include "app_ble_gap.h" uint32_t ble_gap_evt_lesc_dhkey_request_dec(uint8_t const * const p_buf, uint32_t packet_len, @@ -49,8 +47,6 @@ uint32_t ble_gap_evt_lesc_dhkey_request_dec(uint8_t const * const p_buf, uint32_t * const p_event_len) { uint32_t index = 0; - uint32_t err_code = NRF_SUCCESS; - ser_ble_gap_app_keyset_t *keyset; SER_ASSERT_NOT_NULL(p_buf); SER_ASSERT_NOT_NULL(p_event_len); @@ -71,14 +67,18 @@ uint32_t ble_gap_evt_lesc_dhkey_request_dec(uint8_t const * const p_buf, p_event->header.evt_len = event_len; - err_code = uint16_t_dec(p_buf, packet_len, &index, &p_event->evt.gap_evt.conn_handle); + uint32_t err_code = uint16_t_dec(p_buf, packet_len, &index, &p_event->evt.gap_evt.conn_handle); SER_ASSERT(err_code == NRF_SUCCESS, err_code); - // keyset is an extension of standard event data - used to synchronize keys at application - err_code = app_ble_gap_sec_context_find(p_event->evt.gap_evt.conn_handle, &keyset); + uint32_t conn_index; + err_code = app_ble_gap_sec_keys_find(p_event->evt.gap_evt.conn_handle, &conn_index); SER_ASSERT(err_code == NRF_SUCCESS, err_code); - p_event->evt.gap_evt.params.lesc_dhkey_request.p_pk_peer = keyset->keyset.keys_peer.p_pk; + ble_gap_sec_keyset_t *keyset; + err_code = app_ble_gap_sec_keys_get(conn_index, &keyset); + SER_ASSERT(err_code == NRF_SUCCESS, err_code); + + p_event->evt.gap_evt.params.lesc_dhkey_request.p_pk_peer = keyset->keys_peer.p_pk; err_code = cond_field_dec(p_buf, packet_len, &index, (void **)&p_event->evt.gap_evt.params.lesc_dhkey_request.p_pk_peer, ble_gap_lesc_p256_pk_t_dec); diff --git a/src/sd_api_v2/sdk/components/serialization/common/ser_config.h b/src/sd_api_v2/sdk/components/serialization/common/ser_config.h index 8f5a7387f..fffba436d 100755 --- a/src/sd_api_v2/sdk/components/serialization/common/ser_config.h +++ b/src/sd_api_v2/sdk/components/serialization/common/ser_config.h @@ -133,7 +133,9 @@ extern "C" { #define CONN_CHIP_RESET_TIME 50 /**< The time to keep the reset line to the nRF51822 low (in milliseconds). */ #define CONN_CHIP_WAKEUP_TIME 500 /**< The time for nRF51822 to reset and become ready to receive serialized commands (in milliseconds). */ -#define SER_MAX_CONNECTIONS 1 +#ifndef SER_MAX_CONNECTIONS + #define SER_MAX_CONNECTIONS 8 +#endif #ifdef __cplusplus } diff --git a/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble.h b/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble.h index db9c3ef80..257890295 100755 --- a/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble.h +++ b/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble.h @@ -170,7 +170,7 @@ typedef struct typedef struct { uint16_t conn_handle; /**< Connection Handle on which this event occurred. */ - union common_evt_params_union + union { ble_evt_tx_complete_t tx_complete; /**< Transmission Complete. */ ble_evt_user_mem_request_t user_mem_request; /**< User Memory Request Event Parameters. */ @@ -189,7 +189,7 @@ typedef struct typedef struct { ble_evt_hdr_t header; /**< Event header. */ - union evt_union + union { ble_common_evt_t common_evt; /**< Common Event, evt_id in BLE_EVT_* series. */ ble_gap_evt_t gap_evt; /**< GAP originated event, evt_id in BLE_GAP_EVT_* series. */ diff --git a/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_gap.h b/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_gap.h index a0dd49f89..ef16cba20 100755 --- a/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_gap.h +++ b/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_gap.h @@ -812,7 +812,7 @@ typedef struct typedef struct { uint16_t conn_handle; /**< Connection Handle on which event occurred. */ - union gap_evt_params_union /**< union alternative identified by evt_id in enclosing struct. */ + union /**< union alternative identified by evt_id in enclosing struct. */ { ble_gap_evt_connected_t connected; /**< Connected Event Parameters. */ ble_gap_evt_disconnected_t disconnected; /**< Disconnected Event Parameters. */ diff --git a/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_gattc.h b/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_gattc.h index 94c019107..404cfeb63 100755 --- a/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_gattc.h +++ b/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_gattc.h @@ -170,7 +170,7 @@ typedef struct typedef struct { uint16_t handle; /**< Attribute handle. */ - union gattc_attr_info_union + union { ble_uuid_t uuid16; /**< 16-bit Attribute UUID. */ ble_uuid128_t uuid128; /**< 128-bit Attribute UUID. */ @@ -287,7 +287,7 @@ typedef struct uint16_t conn_handle; /**< Connection Handle on which event occured. */ uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ uint16_t error_handle; /**< In case of error: The handle causing the error. In all other cases @ref BLE_GATT_HANDLE_INVALID. */ - union gattc_evt_params_union + union { ble_gattc_evt_prim_srvc_disc_rsp_t prim_srvc_disc_rsp; /**< Primary Service Discovery Response Event Parameters. */ ble_gattc_evt_rel_disc_rsp_t rel_disc_rsp; /**< Relationship Discovery Response Event Parameters. */ diff --git a/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_gatts.h b/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_gatts.h index 0e1261745..3404970f8 100755 --- a/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_gatts.h +++ b/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_gatts.h @@ -281,7 +281,7 @@ typedef struct typedef struct { uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ - union gatts_rw_authorize_reply_params_union + union { ble_gatts_authorize_params_t read; /**< Read authorization parameters. */ ble_gatts_authorize_params_t write; /**< Write authorization parameters. */ @@ -315,7 +315,7 @@ typedef struct typedef struct { uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ - union gatts_evt_rw_authorize_request_union + union { ble_gatts_evt_read_t read; /**< Attribute Read Parameters. */ ble_gatts_evt_write_t write; /**< Attribute Write Parameters. */ @@ -346,7 +346,7 @@ typedef struct typedef struct { uint16_t conn_handle; /**< Connection Handle on which the event occurred. */ - union gatts_evt_union + union { ble_gatts_evt_write_t write; /**< Write Event Parameters. */ ble_gatts_evt_rw_authorize_request_t authorize_request; /**< Read or Write Authorize Request Parameters. */ diff --git a/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_l2cap.h b/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_l2cap.h index db8f0eab6..af2b98501 100755 --- a/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_l2cap.h +++ b/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_l2cap.h @@ -120,7 +120,7 @@ typedef struct typedef struct { uint16_t conn_handle; /**< Connection Handle on which event occured. */ - union l2cap_evt_params_union + union { ble_l2cap_evt_rx_t rx; /**< RX Event parameters. */ } params; /**< Event Parameters. */ diff --git a/src/sd_api_v2/sdk/custom/app_ble_gap_sec_keys.cpp b/src/sd_api_v2/sdk/custom/app_ble_gap_sec_keys.cpp deleted file mode 100755 index 34aada8ed..000000000 --- a/src/sd_api_v2/sdk/custom/app_ble_gap_sec_keys.cpp +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright (c) 2016 Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this - * list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of other - * contributors to this software may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * 4. This software must only be used in or with a processor manufactured by Nordic - * Semiconductor ASA, or in or with a processor manufactured by a third party that - * is used in combination with a processor manufactured by Nordic Semiconductor. - * - * 5. Any software provided in binary or object form under this license must not be - * reverse engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/* Copyright (c) 2014 Nordic Semiconductor. All Rights Reserved. -* -* The information contained herein is property of Nordic Semiconductor ASA. -* Terms and conditions of usage are described in detail in NORDIC -* SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. -* -* Licensees are granted free, non-transferable use of the information. NO -* WARRANTY of ANY KIND is provided. This heading must NOT be removed from -* the file. -* -*/ - -#include "app_ble_gap_sec_keys.h" -#include "nrf_error.h" -#include - -// C++ code -#include "adapter.h" - -#include -#include -#include -#include - -#include - -typedef std::map connhandle_keyset_t; - -// Map with context, each with a set of conn_handle and each conn_handle a ser_ble_gap_app_keyset_t* -std::map m_app_keys_table; -void *current_context = nullptr; -std::mutex current_context_mutex; - -void app_ble_gap_sec_context_root_set(void *context) -{ - current_context_mutex.lock(); - current_context = context; -} - -void app_ble_gap_sec_context_root_release() -{ - current_context = nullptr; - current_context_mutex.unlock(); -} - -uint32_t app_ble_gap_sec_context_create(uint16_t conn_handle, ser_ble_gap_app_keyset_t **pp_gap_app_keyset) -{ - if (current_context == nullptr) return NRF_ERROR_INVALID_DATA; - - auto tempRootContext = m_app_keys_table.find(current_context); - - auto keyset = new ser_ble_gap_app_keyset_t(); - - // If current context is not found we have to add it - if (tempRootContext == m_app_keys_table.end()) - { - auto connectionAndKeyset = new std::map{ - { conn_handle, keyset } - }; - - m_app_keys_table.insert(std::make_pair(current_context, connectionAndKeyset)); - } - else - { - auto connHandleMap = tempRootContext->second; - auto connHandle = connHandleMap->find(conn_handle); - - // If connection handle does not exist from before - // we create a new ser_ble_gap_app_keyset_t for the connnection handle - if (connHandle != connHandleMap->end()) - { - delete connHandle->second; - connHandleMap->erase(conn_handle); - } - - connHandleMap->insert(std::make_pair(conn_handle, keyset)); - } - - *pp_gap_app_keyset = keyset; - return NRF_SUCCESS; -} - -uint32_t app_ble_gap_sec_context_destroy(uint16_t conn_handle) -{ - auto tempAdapter = m_app_keys_table.find(current_context); - if (tempAdapter == m_app_keys_table.end()) return NRF_ERROR_NOT_FOUND; - - auto connHandleMap = tempAdapter->second; - auto connHandle = connHandleMap->find(conn_handle); - - if (connHandle == connHandleMap->end()) return NRF_ERROR_NOT_FOUND; - delete connHandle->second; // Delete the ser_ble_gap_app_keyset_t - connHandleMap->erase(conn_handle); - - return NRF_SUCCESS; -} - -uint32_t app_ble_gap_sec_context_find(uint16_t conn_handle, ser_ble_gap_app_keyset_t **pp_gap_app_keyset) -{ - auto tempAdapter = m_app_keys_table.find(current_context); - if (tempAdapter == m_app_keys_table.end()) return NRF_ERROR_NOT_FOUND; - - auto connHandleMap = tempAdapter->second; - auto connHandle = connHandleMap->find(conn_handle); - - if (connHandle == connHandleMap->end()) return NRF_ERROR_NOT_FOUND; - *pp_gap_app_keyset = connHandle->second; - return NRF_SUCCESS; -} diff --git a/src/sd_api_v3/ble_gap_impl.cpp b/src/sd_api_v3/ble_gap_impl.cpp new file mode 100644 index 000000000..619dd4e34 --- /dev/null +++ b/src/sd_api_v3/ble_gap_impl.cpp @@ -0,0 +1,807 @@ +/* + * Copyright (c) 2016 Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in or with a processor manufactured by Nordic + * Semiconductor ASA, or in or with a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * 5. Any software provided in binary or object form under this license must not be + * reverse engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +// C++ code +#include "adapter.h" +#include "ble_common.h" +#include "adapter_internal.h" + +// C code +#include "ble_gap.h" +#include "ble_gap_app.h" + +#include "app_ble_gap.h" + +#include + +static uint32_t gap_encode_decode(adapter_t *adapter, const encode_function_t &encode_function, + const decode_function_t &decode_function) +{ + const auto adapterLayer = static_cast(adapter->internal); + + if (adapterLayer == nullptr) + { + return NRF_ERROR_INVALID_PARAM; + } + + RequestReplyCodecContext context(adapterLayer->transport); + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_adv_start( + adapter_t *adapter, + ble_gap_adv_params_t const * const p_adv_params + ) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_adv_start_req_enc( + p_adv_params, + buffer, + length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_adv_start_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + + +uint32_t sd_ble_gap_device_name_get(adapter_t *adapter, uint8_t * const p_dev_name, uint16_t * const p_len) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_device_name_get_req_enc( + p_dev_name, + p_len, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_device_name_get_rsp_dec( + buffer, + length, + p_dev_name, + p_len, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_appearance_get(adapter_t *adapter, uint16_t * const p_appearance) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_appearance_get_req_enc( + p_appearance, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_appearance_get_rsp_dec( + buffer, + length, + p_appearance, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_device_name_set(adapter_t *adapter, ble_gap_conn_sec_mode_t const * const p_write_perm, + uint8_t const * const p_dev_name, + uint16_t len) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_device_name_set_req_enc(p_write_perm, + p_dev_name, + len, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_device_name_set_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_appearance_set(adapter_t *adapter, uint16_t appearance) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_appearance_set_req_enc( + appearance, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_appearance_set_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + + +uint32_t sd_ble_gap_ppcp_set(adapter_t *adapter, ble_gap_conn_params_t const * const p_conn_params) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_ppcp_set_req_enc( + p_conn_params, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_ppcp_set_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + + +uint32_t sd_ble_gap_adv_data_set(adapter_t *adapter, uint8_t const * const p_data, + uint8_t dlen, + uint8_t const * const p_sr_data, + uint8_t srdlen) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_adv_data_set_req_enc(p_data, + dlen, + p_sr_data, + srdlen, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_adv_data_set_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + + +uint32_t sd_ble_gap_conn_param_update(adapter_t *adapter, uint16_t conn_handle, ble_gap_conn_params_t const * const p_conn_params) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_conn_param_update_req_enc( + conn_handle, + p_conn_params, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_conn_param_update_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + + +uint32_t sd_ble_gap_disconnect(adapter_t *adapter, uint16_t conn_handle, uint8_t hci_status_code) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_disconnect_req_enc( + conn_handle, + hci_status_code, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_disconnect_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_sec_info_reply(adapter_t *adapter, uint16_t conn_handle, + ble_gap_enc_info_t const * p_enc_info, + ble_gap_irk_t const * p_id_info, + ble_gap_sign_info_t const * p_sign_info) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_sec_info_reply_req_enc( + conn_handle, + p_enc_info, + p_id_info, + p_sign_info, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_sec_info_reply_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + + +uint32_t sd_ble_gap_ppcp_get(adapter_t *adapter, ble_gap_conn_params_t * const p_conn_params) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_ppcp_get_req_enc( + p_conn_params, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_ppcp_get_rsp_dec( + buffer, + length, + p_conn_params, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_addr_get(adapter_t *adapter, ble_gap_addr_t * const p_addr) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_addr_get_req_enc( + p_addr, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_addr_get_rsp_dec( + buffer, + length, + static_cast(p_addr), + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_addr_set(adapter_t *adapter, ble_gap_addr_t const * const p_addr) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_addr_set_req_enc( + p_addr, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_addr_set_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_whitelist_set(adapter_t *adapter, ble_gap_addr_t const * const * pp_wl_addrs, uint8_t len) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_whitelist_set_req_enc( + pp_wl_addrs, + len, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_whitelist_set_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_device_identities_set(adapter_t *adapter, ble_gap_id_key_t const * const * pp_id_keys, ble_gap_irk_t const * const * pp_local_irks, uint8_t len) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_device_identities_set_req_enc( + pp_id_keys, + pp_local_irks, + len, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_device_identities_set_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_privacy_set(adapter_t *adapter, ble_gap_privacy_params_t const *p_privacy_params) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_privacy_set_req_enc( + p_privacy_params, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_privacy_set_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); + +} + +uint32_t sd_ble_gap_privacy_get(adapter_t *adapter, ble_gap_privacy_params_t *p_privacy_params) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_privacy_get_req_enc( + p_privacy_params, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_privacy_get_rsp_dec( + buffer, + length, + p_privacy_params, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_adv_stop(adapter_t *adapter) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_adv_stop_req_enc( + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_adv_stop_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + + +uint32_t sd_ble_gap_auth_key_reply(adapter_t *adapter, uint16_t conn_handle, + uint8_t key_type, + uint8_t const * const key) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_auth_key_reply_req_enc( + conn_handle, + key_type, + key, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_auth_key_reply_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_authenticate(adapter_t *adapter, uint16_t conn_handle, ble_gap_sec_params_t const * const p_sec_params) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_authenticate_req_enc( + conn_handle, + p_sec_params, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_authenticate_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_conn_sec_get(adapter_t *adapter, uint16_t conn_handle, ble_gap_conn_sec_t * const p_conn_sec) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_conn_sec_get_req_enc( + conn_handle, + p_conn_sec, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_conn_sec_get_rsp_dec( + buffer, + length, + const_cast(&p_conn_sec), + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_rssi_start(adapter_t *adapter, uint16_t conn_handle, uint8_t threshold_dbm, uint8_t skip_count) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_rssi_start_req_enc( + conn_handle, + threshold_dbm, + skip_count, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_rssi_start_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_rssi_stop(adapter_t *adapter, uint16_t conn_handle) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_rssi_stop_req_enc( + conn_handle, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_rssi_stop_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_tx_power_set(adapter_t *adapter, int8_t tx_power) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_tx_power_set_req_enc( + tx_power, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_tx_power_set_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_scan_stop(adapter_t *adapter) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_scan_stop_req_enc( + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_scan_stop_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_connect(adapter_t *adapter, + ble_gap_addr_t const * const p_addr, + ble_gap_scan_params_t const * const p_scan_params, + ble_gap_conn_params_t const * const p_conn_params + ) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_connect_req_enc( + p_addr, + p_scan_params, + p_conn_params, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_connect_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + + +uint32_t sd_ble_gap_connect_cancel(adapter_t *adapter) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_connect_cancel_req_enc( + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_connect_cancel_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + + +uint32_t sd_ble_gap_scan_start(adapter_t *adapter, ble_gap_scan_params_t const * const p_scan_params) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_scan_start_req_enc( + p_scan_params, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_scan_start_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_encrypt(adapter_t *adapter, + uint16_t conn_handle, + ble_gap_master_id_t const * p_master_id, + ble_gap_enc_info_t const * p_enc_info) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_encrypt_req_enc( + conn_handle, + p_master_id, + p_enc_info, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_encrypt_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + + +uint32_t sd_ble_gap_rssi_get(adapter_t *adapter, uint16_t conn_handle, + int8_t * p_rssi) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_rssi_get_req_enc( + conn_handle, + p_rssi, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_rssi_get_rsp_dec( + buffer, + length, + static_cast(p_rssi), + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + + +uint32_t sd_ble_gap_sec_params_reply(adapter_t *adapter, + uint16_t conn_handle, + uint8_t sec_status, + ble_gap_sec_params_t const *p_sec_params, + ble_gap_sec_keyset_t const *p_sec_keyset) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + uint32_t index = 0; + auto err_code = app_ble_gap_sec_keys_storage_create(conn_handle, &index); + + if (err_code != NRF_SUCCESS) + { + return err_code; + } + + if (p_sec_keyset) + { + err_code = app_ble_gap_sec_keys_update(index, p_sec_keyset); + + if (err_code != NRF_SUCCESS) + { + return err_code; + } + } + + return ble_gap_sec_params_reply_req_enc( + conn_handle, + sec_status, + p_sec_params, + p_sec_keyset, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_sec_params_reply_rsp_dec( + buffer, + length, + p_sec_keyset, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_lesc_oob_data_get(adapter_t *adapter, uint16_t conn_handle, ble_gap_lesc_p256_pk_t const *p_pk_own, ble_gap_lesc_oob_data_t *p_oobd_own) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_lesc_oob_data_get_req_enc( + conn_handle, + p_pk_own, + p_oobd_own, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_lesc_oob_data_get_rsp_dec( + buffer, + length, + &p_oobd_own, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_lesc_oob_data_set(adapter_t *adapter, uint16_t conn_handle, ble_gap_lesc_oob_data_t const *p_oobd_own, ble_gap_lesc_oob_data_t const *p_oobd_peer) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_lesc_oob_data_set_req_enc( + conn_handle, + p_oobd_own, + p_oobd_peer, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_lesc_oob_data_set_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_lesc_dhkey_reply(adapter_t *adapter, uint16_t conn_handle, ble_gap_lesc_dhkey_t const *p_dhkey) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_lesc_dhkey_reply_req_enc( + conn_handle, + p_dhkey, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_lesc_dhkey_reply_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_keypress_notify(adapter_t *adapter, uint16_t conn_handle, uint8_t kp_not) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_keypress_notify_req_enc( + conn_handle, + kp_not, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + return ble_gap_keypress_notify_rsp_dec( + buffer, + length, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} diff --git a/src/sd_api_v3/ble_gattc_impl.cpp b/src/sd_api_v3/ble_gattc_impl.cpp new file mode 100644 index 000000000..5b10970f0 --- /dev/null +++ b/src/sd_api_v3/ble_gattc_impl.cpp @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2016 Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in or with a processor manufactured by Nordic + * Semiconductor ASA, or in or with a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * 5. Any software provided in binary or object form under this license must not be + * reverse engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include + +// C++ code +#include "adapter.h" + +// C code +#include "ble_gattc.h" +#include "ble_gattc_app.h" // Encoder/decoder functions + +#include "ble_common.h" + +uint32_t sd_ble_gattc_primary_services_discover(adapter_t *adapter, uint16_t conn_handle, uint16_t start_handle, ble_uuid_t const *p_srvc_uuid) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gattc_primary_services_discover_req_enc(conn_handle, start_handle, p_srvc_uuid, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gattc_primary_services_discover_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gattc_relationships_discover(adapter_t *adapter, uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gattc_relationships_discover_req_enc(conn_handle, p_handle_range, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gattc_relationships_discover_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gattc_characteristics_discover(adapter_t *adapter, uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gattc_characteristics_discover_req_enc(conn_handle, p_handle_range, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gattc_characteristics_discover_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gattc_descriptors_discover(adapter_t *adapter, uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gattc_descriptors_discover_req_enc(conn_handle, p_handle_range, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gattc_descriptors_discover_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gattc_char_value_by_uuid_read(adapter_t *adapter, uint16_t conn_handle, ble_uuid_t const *p_uuid, ble_gattc_handle_range_t const *p_handle_range) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gattc_char_value_by_uuid_read_req_enc(conn_handle, p_uuid, p_handle_range, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gattc_char_value_by_uuid_read_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gattc_read(adapter_t *adapter, uint16_t conn_handle, uint16_t handle, uint16_t offset) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gattc_read_req_enc(conn_handle, handle, offset, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gattc_read_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gattc_char_values_read(adapter_t *adapter, uint16_t conn_handle, uint16_t const *p_handles, uint16_t handle_count) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gattc_char_values_read_req_enc(conn_handle, p_handles, handle_count, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gattc_char_values_read_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gattc_write(adapter_t *adapter, uint16_t conn_handle, ble_gattc_write_params_t const *p_write_params) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gattc_write_req_enc(conn_handle, p_write_params, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gattc_write_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gattc_hv_confirm(adapter_t *adapter, uint16_t conn_handle, uint16_t handle) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gattc_hv_confirm_req_enc(conn_handle, handle, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gattc_hv_confirm_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gattc_attr_info_discover(adapter_t *adapter, uint16_t conn_handle, ble_gattc_handle_range_t const * p_handle_range) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gattc_attr_info_discover_req_enc(conn_handle, p_handle_range, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gattc_attr_info_discover_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gattc_exchange_mtu_request(adapter_t *adapter, uint16_t conn_handle, uint16_t client_rx_mtu) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gattc_exchange_mtu_request_req_enc(conn_handle, client_rx_mtu, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gattc_exchange_mtu_request_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} diff --git a/src/sd_api_v3/ble_gatts_impl.cpp b/src/sd_api_v3/ble_gatts_impl.cpp new file mode 100644 index 000000000..48136ef5f --- /dev/null +++ b/src/sd_api_v3/ble_gatts_impl.cpp @@ -0,0 +1,232 @@ +/* + * Copyright (c) 2016 Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in or with a processor manufactured by Nordic + * Semiconductor ASA, or in or with a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * 5. Any software provided in binary or object form under this license must not be + * reverse engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include + +// C++ code +#include "adapter.h" +#include "adapter_internal.h" + +// C code +#include "ble_gatts.h" +#include "ble_gatts_app.h" // Encoder/decoder functions + +#include "ble_common.h" + +uint32_t sd_ble_gatts_service_add(adapter_t *adapter, uint8_t type, ble_uuid_t const *p_uuid, uint16_t *p_handle) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_service_add_req_enc(type, p_uuid, p_handle, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_service_add_rsp_dec(buffer, length, p_handle, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_include_add(adapter_t *adapter, uint16_t service_handle, uint16_t inc_srvc_handle, uint16_t *p_include_handle) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_include_add_req_enc(service_handle, inc_srvc_handle, p_include_handle, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_include_add_rsp_dec(buffer, length, p_include_handle, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_characteristic_add(adapter_t *adapter, uint16_t service_handle, ble_gatts_char_md_t const *p_char_md, ble_gatts_attr_t const *p_attr_char_value, ble_gatts_char_handles_t *p_handles) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_characteristic_add_req_enc(service_handle, p_char_md, p_attr_char_value, p_handles, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + uint16_t * handles = &p_handles->value_handle; + return ble_gatts_characteristic_add_rsp_dec(buffer, length, &handles, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_descriptor_add(adapter_t *adapter, uint16_t char_handle, ble_gatts_attr_t const *p_attr, uint16_t *p_handle) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_descriptor_add_req_enc(char_handle, p_attr, p_handle, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_descriptor_add_rsp_dec(buffer, length, p_handle, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_value_set(adapter_t *adapter, uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_value_set_req_enc(conn_handle, handle, p_value, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_value_set_rsp_dec(buffer, length, p_value, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_value_get(adapter_t *adapter, uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_value_get_req_enc(conn_handle, handle, p_value, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_value_get_rsp_dec(buffer, length, p_value, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_hvx(adapter_t *adapter, uint16_t conn_handle, ble_gatts_hvx_params_t const *p_hvx_params) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_hvx_req_enc(conn_handle, p_hvx_params, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + uint16_t *out_length = p_hvx_params->p_len; + return ble_gatts_hvx_rsp_dec(buffer, length, result, &out_length); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_service_changed(adapter_t *adapter, uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_service_changed_req_enc(conn_handle, start_handle, end_handle, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_service_changed_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_rw_authorize_reply(adapter_t *adapter, uint16_t conn_handle, ble_gatts_rw_authorize_reply_params_t const *p_rw_authorize_reply_params) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_rw_authorize_reply_req_enc(conn_handle, p_rw_authorize_reply_params, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_rw_authorize_reply_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_sys_attr_set(adapter_t *adapter, uint16_t conn_handle, uint8_t const *p_sys_attr_data, uint16_t len, uint32_t flags) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_sys_attr_set_req_enc(conn_handle, p_sys_attr_data, len, flags, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_sys_attr_set_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_sys_attr_get(adapter_t *adapter, uint16_t conn_handle, uint8_t *p_sys_attr_data, uint16_t *p_len, uint32_t flags) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_sys_attr_get_req_enc(conn_handle, p_sys_attr_data, p_len, flags, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_sys_attr_get_rsp_dec(buffer, length, &p_sys_attr_data, &p_len, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_initial_user_handle_get(adapter_t *adapter, uint16_t *p_handle) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_initial_user_handle_get_req_enc(p_handle, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_initial_user_handle_get_rsp_dec(buffer, length, &p_handle, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_attr_get(adapter_t *adapter, uint16_t handle, ble_uuid_t * p_uuid, ble_gatts_attr_md_t * p_md) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_attr_get_req_enc(handle, p_uuid, p_md, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_attr_get_rsp_dec(buffer, length, &p_uuid, &p_md, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_exchange_mtu_reply(adapter_t *adapter, uint16_t conn_handle, uint16_t server_rx_mtu) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_exchange_mtu_reply_req_enc(conn_handle, server_rx_mtu, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_exchange_mtu_reply_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} diff --git a/src/sd_api_v3/ble_impl.cpp b/src/sd_api_v3/ble_impl.cpp new file mode 100644 index 000000000..8e7f8662c --- /dev/null +++ b/src/sd_api_v3/ble_impl.cpp @@ -0,0 +1,252 @@ +/* + * Copyright (c) 2016 Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in or with a processor manufactured by Nordic + * Semiconductor ASA, or in or with a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * 5. Any software provided in binary or object form under this license must not be + * reverse engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "adapter.h" +#include "ble_common.h" + +#include "ble.h" +#include "ble_app.h" + +#include +#include +#include + +uint32_t sd_ble_uuid_encode(adapter_t* adapter, ble_uuid_t const * const p_uuid, + uint8_t * const p_uuid_le_len, + uint8_t * const p_uuid_le) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_uuid_encode_req_enc( + p_uuid, + p_uuid_le_len, + p_uuid_le, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_uuid_encode_rsp_dec( + buffer, + length, + p_uuid_le_len, + p_uuid_le, + result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + // ble_tx_packet_count_get_req_enc +uint32_t sd_ble_tx_packet_count_get(adapter_t *adapter, uint16_t conn_handle, uint8_t * p_count) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_tx_packet_count_get_req_enc( + conn_handle, + p_count, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_tx_packet_count_get_rsp_dec( + buffer, + length, + reinterpret_cast(&p_count), + result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_uuid_vs_add(adapter_t *adapter, ble_uuid128_t const * const p_vs_uuid, uint8_t * const p_uuid_type) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_uuid_vs_add_req_enc( + p_vs_uuid, + p_uuid_type, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_uuid_vs_add_rsp_dec( + buffer, + length, + const_cast(&p_uuid_type), + result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_uuid_decode(adapter_t *adapter, uint8_t uuid_le_len, uint8_t const * const p_uuid_le, ble_uuid_t * const p_uuid) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_uuid_decode_req_enc( + uuid_le_len, + p_uuid_le, + p_uuid, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_uuid_decode_rsp_dec( + buffer, + length, + const_cast(&p_uuid), + result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_version_get(adapter_t *adapter, ble_version_t * p_version) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_version_get_req_enc( + p_version, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_version_get_rsp_dec( + buffer, + length, + p_version, + result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_opt_get(adapter_t *adapter, uint32_t opt_id, ble_opt_t *p_opt) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_opt_get_req_enc( + opt_id, + p_opt, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_opt_get_rsp_dec( + buffer, + length, + &opt_id, + p_opt, + result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_opt_set(adapter_t *adapter, uint32_t opt_id, ble_opt_t const *p_opt) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_opt_set_req_enc( + opt_id, + p_opt, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_opt_set_rsp_dec( + buffer, + length, + result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_enable( + adapter_t *adapter, + ble_enable_params_t * p_params, + uint32_t *p_app_ram_base) +{ + (void)p_app_ram_base; + + auto adapterLayer = static_cast(adapter->internal); + RequestReplyCodecContext context(adapterLayer->transport); + + // Reset previous app_ble_gap data + app_ble_gap_state_reset(); + + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_enable_req_enc( + p_params, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_enable_rsp_dec( + buffer, + length, + result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_user_mem_reply(adapter_t *adapter, uint16_t conn_handle, ble_user_mem_block_t const *p_block) +{ + if (p_block != nullptr) + { + return NRF_ERROR_INVALID_PARAM; + } + + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_user_mem_reply_req_enc( + conn_handle, + p_block, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_user_mem_reply_rsp_dec( + buffer, + length, + result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} diff --git a/src/sd_api_v3/sdk/components/serialization/application/codecs/common/conn_systemreset_app.c b/src/sd_api_v3/sdk/components/serialization/application/codecs/common/conn_systemreset_app.c new file mode 100644 index 000000000..3e26d2989 --- /dev/null +++ b/src/sd_api_v3/sdk/components/serialization/application/codecs/common/conn_systemreset_app.c @@ -0,0 +1,21 @@ +/* Copyright (c) 2014 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is property of Nordic Semiconductor ASA. + * Terms and conditions of usage are described in detail in NORDIC + * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. + * + * Licensees are granted free, non-transferable use of the information. NO + * WARRANTY of ANY KIND is provided. This heading must NOT be removed from + * the file. + * + */ + +#include "ble_serialization.h" +#include "conn_systemreset_app.h" + +uint32_t conn_systemreset_enc(uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(CONN_SYSTEMRESET); + SER_REQ_ENC_END; +} diff --git a/src/sd_api_v3/sdk/components/serialization/application/codecs/common/conn_systemreset_app.h b/src/sd_api_v3/sdk/components/serialization/application/codecs/common/conn_systemreset_app.h new file mode 100644 index 000000000..4361bc06a --- /dev/null +++ b/src/sd_api_v3/sdk/components/serialization/application/codecs/common/conn_systemreset_app.h @@ -0,0 +1,91 @@ +/** + * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +#ifndef CONN_SYSTEMRESET_H__ +#define CONN_SYSTEMRESET_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/** @addtogroup CONN_ENUMERATIONS Enumerations + * @{ */ + +/** + * @brief Connectivity API SVC numbers. + */ +enum CONN_SVCS +{ + CONN_SYSTEMRESET = 0x00, +}; + +/** + * @addtogroup ser_codecs Serialization codecs + * @ingroup ble_sdk_lib_serialization + */ + +/** + * @addtogroup ser_app_common_codecs Application common codecs + * @ingroup ser_codecs_app + */ + +/**@file + * + * @defgroup conn_systemreset Connectivity chip reset command request encoder + * @{ + * @ingroup ser_app_common_codecs + * + * @brief Connectivity chip reset command request encoder. + */ + +/**@brief Function for performing the connectivity chip reset. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_INTERNAL Encoding failure. Transport error. + */ +uint32_t conn_systemreset_enc(uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif // CONN_SYSTEMRESET_H__ diff --git a/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/app_ble_user_mem.c b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/app_ble_user_mem.c new file mode 100644 index 000000000..c47602039 --- /dev/null +++ b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/app_ble_user_mem.c @@ -0,0 +1,74 @@ +/* Copyright (c) 2014 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is property of Nordic Semiconductor ASA. + * Terms and conditions of usage are described in detail in NORDIC + * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. + * + * Licensees are granted free, non-transferable use of the information. NO + * WARRANTY of ANY KIND is provided. This heading must NOT be removed from + * the file. + * + */ + +#include "app_ble_user_mem.h" +#include "ser_config.h" +#include "nrf_error.h" +#include + +ser_ble_user_mem_t m_app_user_mem_table[SER_MAX_CONNECTIONS]; + +uint32_t app_ble_user_mem_context_create(uint16_t conn_handle, uint32_t *p_index) +{ + uint32_t err_code = NRF_ERROR_NO_MEM; + uint32_t i; + + for (i=0; i + +#ifdef __cplusplus +extern "C" { +#endif + +/**@brief Connection - user memory mapping structure. + * + * @note This structure is used to map user memory to connection instances and store it in a static table. + */ +//lint -esym(452,ser_ble_user_mem_t) +typedef struct +{ + uint16_t conn_handle; /**< Connection handle. */ + uint8_t conn_active; /**< Indication that user memory for this connection is used by the SoftDevice. 0: memory used; 1: memory not used. */ + ble_user_mem_block_t mem_block; /**< User memory block structure, see @ref ble_user_mem_block_t. */ +} ser_ble_user_mem_t; + +/**@brief Allocates instance in m_user_mem_table[] for storage. + * + * @param[in] conn_handle conn_handle + * @param[out] p_index Pointer to the index of the allocated instance. + * + * @retval NRF_SUCCESS Context allocated. + * @retval NRF_ERROR_NO_MEM No free instance available. + */ +uint32_t app_ble_user_mem_context_create(uint16_t conn_handle, uint32_t *p_index); + +/**@brief Release instance identified by a connection handle. + * + * @param[in] conn_handle conn_handle + * + * @retval NRF_SUCCESS Context released. + * @retval NRF_ERROR_NOT_FOUND Instance with conn_handle not found. + */ +uint32_t app_ble_user_mem_context_destroy(uint16_t conn_handle); + +/**@brief Finds index of the instance identified by a connection handle in m_user_mem_table[]. + * + * @param[in] conn_handle conn_handle + * + * @param[out] p_index Pointer to the index of the entry in the context table corresponding to the given conn_handle. + * + * @retval NRF_SUCCESS Context found. + * @retval NRF_ERROR_NOT_FOUND Instance with conn_handle not found. + */ +uint32_t app_ble_user_mem_context_find(uint16_t conn_handle, uint32_t *p_index); +/** @} */ + + +#ifdef __cplusplus +} +#endif + +#endif //_APP_BLE_USER_MEM_H diff --git a/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_app.c b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_app.c new file mode 100644 index 000000000..e478ce5c1 --- /dev/null +++ b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_app.c @@ -0,0 +1,383 @@ +/* Copyright (c) 2014 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is property of Nordic Semiconductor ASA. + * Terms and conditions of usage are described in detail in NORDIC + * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. + * + * Licensees are granted free, non-transferable use of the information. NO + * WARRANTY of ANY KIND is provided. This heading must NOT be removed from + * the file. + * + */ + +#include +#include +#include "ble_app.h" +#include "ble_serialization.h" +#include "ble_struct_serialization.h" +#include "ble_gap_struct_serialization.h" +#include "cond_field_serialization.h" +#include "app_util.h" + + +uint32_t ble_enable_req_enc(ble_enable_params_t * p_ble_enable_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_ENABLE); + SER_PUSH_COND(p_ble_enable_params, ble_enable_params_t_enc); + SER_REQ_ENC_END; +} + + +uint32_t ble_enable_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_ENABLE); +} + +uint32_t ble_opt_get_req_enc(uint32_t opt_id, + ble_opt_t const * const p_opt, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_OPT_GET); + + SER_ASSERT(((opt_id == BLE_COMMON_OPT_CONN_BW) || + (opt_id == BLE_COMMON_OPT_PA_LNA) || + (opt_id == BLE_COMMON_OPT_CONN_EVT_EXT) || + (opt_id == BLE_GAP_OPT_CH_MAP) || + (opt_id == BLE_GAP_OPT_LOCAL_CONN_LATENCY) || + (opt_id == BLE_GAP_OPT_PASSKEY) || + (opt_id == BLE_GAP_OPT_SCAN_REQ_REPORT) || + (opt_id == BLE_GAP_OPT_COMPAT_MODE) || + (opt_id == BLE_GAP_OPT_AUTH_PAYLOAD_TIMEOUT) || + (opt_id == BLE_GAP_OPT_EXT_LEN)), NRF_ERROR_INVALID_PARAM); + + SER_PUSH_uint32(&opt_id); + SER_PUSH_COND(p_opt, NULL); + + SER_REQ_ENC_END; +} + +uint32_t ble_opt_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_opt_id, + ble_opt_t * const p_opt, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_OPT_GET); + + SER_PULL_uint32(p_opt_id); + SER_ASSERT(((*p_opt_id == BLE_COMMON_OPT_CONN_BW) || + (*p_opt_id == BLE_COMMON_OPT_PA_LNA) || + (*p_opt_id == BLE_COMMON_OPT_CONN_EVT_EXT) || + (*p_opt_id == BLE_GAP_OPT_CH_MAP) || + (*p_opt_id == BLE_GAP_OPT_LOCAL_CONN_LATENCY) || + (*p_opt_id == BLE_GAP_OPT_PASSKEY) || + (*p_opt_id == BLE_GAP_OPT_SCAN_REQ_REPORT) || + (*p_opt_id == BLE_GAP_OPT_COMPAT_MODE) || + (*p_opt_id == BLE_GAP_OPT_AUTH_PAYLOAD_TIMEOUT) || + (*p_opt_id == BLE_GAP_OPT_EXT_LEN)), NRF_ERROR_INVALID_PARAM); + + field_decoder_handler_t fp_decoder = NULL; + void * p_struct = NULL; + + switch (*p_opt_id) + { + case BLE_COMMON_OPT_CONN_BW: + fp_decoder = ble_common_opt_conn_bw_t_dec; + p_struct = &(p_opt->common_opt.conn_bw); + break; + case BLE_COMMON_OPT_PA_LNA: + fp_decoder = ble_common_opt_pa_lna_t_dec; + p_struct = &(p_opt->common_opt.pa_lna); + break; + case BLE_COMMON_OPT_CONN_EVT_EXT: + fp_decoder = ble_common_opt_conn_evt_ext_t_dec; + p_struct = &(p_opt->common_opt.conn_evt_ext); + break; + case BLE_GAP_OPT_CH_MAP: + fp_decoder = ble_gap_opt_ch_map_t_dec; + p_struct =&(p_opt->gap_opt.ch_map); + break; + case BLE_GAP_OPT_LOCAL_CONN_LATENCY: + fp_decoder = ble_gap_opt_local_conn_latency_t_dec; + p_struct = &(p_opt->gap_opt.local_conn_latency); + break; + case BLE_GAP_OPT_PASSKEY: + fp_decoder = ble_gap_opt_passkey_t_dec; + p_struct = &(p_opt->gap_opt.passkey); + break; + case BLE_GAP_OPT_AUTH_PAYLOAD_TIMEOUT: + fp_decoder = ble_gap_opt_auth_payload_timeout_t_dec; + p_struct = &(p_opt->gap_opt.auth_payload_timeout); + break; + case BLE_GAP_OPT_EXT_LEN: + fp_decoder = ble_gap_opt_ext_len_t_dec; + p_struct = &(p_opt->gap_opt.ext_len); + break; + case BLE_GAP_OPT_SCAN_REQ_REPORT: + fp_decoder = ble_gap_opt_scan_req_report_t_dec; + p_struct = &(p_opt->gap_opt.scan_req_report); + break; + case BLE_GAP_OPT_COMPAT_MODE: + fp_decoder = ble_gap_opt_compat_mode_t_dec; + p_struct = &(p_opt->gap_opt.compat_mode); + break; + default: + SER_ASSERT(NRF_ERROR_INVALID_PARAM, NRF_ERROR_INVALID_PARAM); + break; + } + + SER_PULL_FIELD(p_struct, fp_decoder); + + SER_RSP_DEC_END; +} + + + +uint32_t ble_opt_set_req_enc(uint32_t const opt_id, + ble_opt_t const * const p_opt, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_OPT_SET); + + SER_ASSERT(((opt_id == BLE_COMMON_OPT_CONN_BW) || + (opt_id == BLE_COMMON_OPT_PA_LNA) || + (opt_id == BLE_COMMON_OPT_CONN_EVT_EXT) || + (opt_id == BLE_GAP_OPT_CH_MAP) || + (opt_id == BLE_GAP_OPT_LOCAL_CONN_LATENCY) || + (opt_id == BLE_GAP_OPT_PASSKEY) || + (opt_id == BLE_GAP_OPT_SCAN_REQ_REPORT) || + (opt_id == BLE_GAP_OPT_COMPAT_MODE) || + (opt_id == BLE_GAP_OPT_AUTH_PAYLOAD_TIMEOUT) || + (opt_id == BLE_GAP_OPT_EXT_LEN)), NRF_ERROR_INVALID_PARAM); + + SER_PUSH_uint32(&opt_id); + + field_encoder_handler_t fp_encoder = NULL; + void const * p_struct = NULL; + + SER_PUSH_COND(p_opt, NULL); + if (p_opt) + { + switch(opt_id) + { + case BLE_COMMON_OPT_CONN_BW: + fp_encoder = ble_common_opt_conn_bw_t_enc; + p_struct = &(p_opt->common_opt.conn_bw); + break; + case BLE_COMMON_OPT_PA_LNA: + fp_encoder = ble_common_opt_pa_lna_t_enc; + p_struct = &(p_opt->common_opt.pa_lna); + break; + case BLE_COMMON_OPT_CONN_EVT_EXT: + fp_encoder = ble_common_opt_conn_evt_ext_t_enc; + p_struct = &(p_opt->common_opt.conn_evt_ext); + break; + case BLE_GAP_OPT_CH_MAP: + fp_encoder = ble_gap_opt_ch_map_t_enc; + p_struct = &(p_opt->gap_opt.ch_map); + break; + case BLE_GAP_OPT_LOCAL_CONN_LATENCY: + fp_encoder = ble_gap_opt_local_conn_latency_t_enc; + p_struct = &(p_opt->gap_opt.local_conn_latency); + break; + case BLE_GAP_OPT_PASSKEY: + fp_encoder = ble_gap_opt_passkey_t_enc; + p_struct = &(p_opt->gap_opt.passkey); + break; + case BLE_GAP_OPT_AUTH_PAYLOAD_TIMEOUT: + fp_encoder = ble_gap_opt_auth_payload_timeout_t_enc; + p_struct = &(p_opt->gap_opt.auth_payload_timeout); + break; + case BLE_GAP_OPT_EXT_LEN: + fp_encoder = ble_gap_opt_ext_len_t_enc; + p_struct = &(p_opt->gap_opt.ext_len); + break; + case BLE_GAP_OPT_SCAN_REQ_REPORT: + fp_encoder = ble_gap_opt_scan_req_report_t_enc; + p_struct = &(p_opt->gap_opt.scan_req_report); + break; + case BLE_GAP_OPT_COMPAT_MODE: + fp_encoder = ble_gap_opt_compat_mode_t_enc; + p_struct = &(p_opt->gap_opt.compat_mode); + break; + default: + SER_ASSERT(NRF_ERROR_INVALID_PARAM,NRF_ERROR_INVALID_PARAM); + break; + } + + SER_PUSH_FIELD(p_struct, fp_encoder); + } + + SER_REQ_ENC_END; +} + + +uint32_t ble_opt_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_OPT_SET); +} + +uint32_t ble_tx_packet_count_get_req_enc(uint16_t conn_handle, + uint8_t const * const p_count, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_TX_PACKET_COUNT_GET); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_count, NULL); + + SER_REQ_ENC_END; +} + + +uint32_t ble_tx_packet_count_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint8_t * * const pp_count, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_TX_PACKET_COUNT_GET); + SER_PULL_COND(pp_count, uint8_t_dec); + SER_RSP_DEC_END; +} + +uint32_t ble_user_mem_reply_req_enc(uint16_t conn_handle, + ble_user_mem_block_t const * p_block, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_USER_MEM_REPLY); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_block, ble_user_mem_block_t_enc); + + SER_REQ_ENC_END; +} + +uint32_t ble_user_mem_reply_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_USER_MEM_REPLY); +} + + + +uint32_t ble_uuid_decode_req_enc(uint8_t uuid_le_len, + uint8_t const * const p_uuid_le, + ble_uuid_t * const p_uuid, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_UUID_DECODE); + + SER_PUSH_len8data(p_uuid_le, uuid_le_len); + SER_PUSH_COND(p_uuid, NULL); + + SER_REQ_ENC_END; +} + + +uint32_t ble_uuid_decode_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_uuid_t * * const pp_uuid, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_UUID_DECODE); + SER_PULL_COND(pp_uuid, ble_uuid_t_dec); + SER_RSP_DEC_END; +} + + +uint32_t ble_uuid_encode_req_enc(ble_uuid_t const * const p_uuid, + uint8_t const * const p_uuid_le_len, + uint8_t const * const p_uuid_le, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_UUID_ENCODE); + + SER_PUSH_COND(p_uuid, ble_uuid_t_enc); + SER_PUSH_COND(p_uuid_le_len, NULL); + SER_PUSH_COND(p_uuid_le, NULL); + + SER_REQ_ENC_END; +} + + +uint32_t ble_uuid_encode_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint8_t * const p_uuid_le_len, + uint8_t * const p_uuid_le, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_UUID_ENCODE); + + uint8_t uuid_le_len; + SER_PULL_uint8(&uuid_le_len); + if (p_uuid_le_len) + { + *p_uuid_le_len = uuid_le_len; + if (p_uuid_le) + { + SER_PULL_uint8array(p_uuid_le, uuid_le_len); + } + } + + SER_RSP_DEC_END; +} + +uint32_t ble_uuid_vs_add_req_enc(ble_uuid128_t const * const p_vs_uuid, + uint8_t * const p_uuid_type, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_UUID_VS_ADD); + + SER_PUSH_COND(p_vs_uuid, ble_uuid128_t_enc); + SER_PUSH_COND(p_uuid_type, NULL); + + SER_REQ_ENC_END; +} + + +uint32_t ble_uuid_vs_add_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint8_t * * const pp_uuid_type, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_UUID_VS_ADD); + + SER_ASSERT_NOT_NULL(pp_uuid_type); + SER_PULL_COND(pp_uuid_type, uint8_t_dec); + + SER_RSP_DEC_END; +} + +uint32_t ble_version_get_req_enc(ble_version_t const * const p_version, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_VERSION_GET); + SER_PUSH_COND(p_version, NULL); + SER_REQ_ENC_END; +} + +uint32_t ble_version_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_version_t * p_version, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_VERSION_GET); + SER_PULL_FIELD(p_version, ble_version_t_dec); + SER_RSP_DEC_END; +} + diff --git a/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_app.h b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_app.h new file mode 100644 index 000000000..31fce2bb7 --- /dev/null +++ b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_app.h @@ -0,0 +1,438 @@ +/* Copyright (c) 2013 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is property of Nordic Semiconductor ASA. + * Terms and conditions of usage are described in detail in NORDIC + * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. + * + * Licensees are granted free, non-transferable use of the information. NO + * WARRANTY of ANY KIND is provided. This heading must NOT be removed from + * the file. + * + */ +#ifndef BLE_APP_H__ +#define BLE_APP_H__ + +/** + * @addtogroup ser_codecs Serialization codecs + * @ingroup ble_sdk_lib_serialization + */ + +/** + * @addtogroup ser_app_s130_codecs Application S132 codecs + * @ingroup ser_codecs + */ + +/**@file + * + * @defgroup ble_app Application command request encoders and command response decoders + * @{ + * @ingroup ser_app_s130_codecs + * + * @brief Application command request encoders and command response decoders. + */ +#include "ble.h" + +#ifdef __cplusplus +extern "C" { +#endif +/** + * @brief Encodes @ref sd_ble_tx_packet_count_get command request. + * + * @sa @ref ble_tx_packet_count_get_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_count Pointer to count value to be filled. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of the encoded command packet. + * + * @note \p p_count will not be updated by the command + * request encoder. Updated values are set by @ref ble_tx_packet_count_get_rsp_dec. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_tx_packet_count_get_req_enc(uint16_t conn_handle, + uint8_t const * const p_count, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes a response to @ref sd_ble_tx_packet_count_get command. + * + * @sa @ref ble_tx_packet_count_get_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to the beginning of a command response packet. + * @param[in] packet_len Length (in bytes) of the response packet. + * @param[out] pp_count Pointer to the pointer to count value. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_tx_packet_count_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint8_t * * const pp_count, + uint32_t * const p_result_code); + +/**@brief Encodes the @ref sd_ble_uuid_encode command request. + * + * @sa @ref ble_uuid_encode_rsp_dec for command response decoder. + * + * @param[in] p_uuid Pointer to a @ref ble_uuid_t structure that will be encoded into bytes. + * @param[in] p_uuid_le_len Size of \p p_uuid_le, if \p p_uuid_le is not NULL + * @param[in] p_uuid_le Pointer to a buffer where the little endian raw UUID bytes(2 or 16) + * will be stored. Can be NULL to calculate the required size. + * @param[in] p_buf Pointer to a buffer where the encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of the encoded command packet. + * + * @note \p p_uuid_le_len and \p p_uuid_le will not be updated by the command + * request encoder. Updated values are set by @ref ble_uuid_encode_rsp_dec. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_uuid_encode_req_enc(ble_uuid_t const * const p_uuid, + uint8_t const * const p_uuid_le_len, + uint8_t const * const p_uuid_le, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes a response to the @ref sd_ble_uuid_encode command. + * + * @sa @ref ble_uuid_encode_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to the beginning of a command response packet. + * @param[in] packet_len Length (in bytes) of a response packet. + * @param[in,out] p_uuid_le_len \c in: Size (in bytes) of \p p_uuid_le buffer. + * \c out: Length of decoded contents of \p p_uuid_le. + * @param[out] p_uuid_le Pointer to a buffer where the encoded UUID will be stored. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Length of \p p_uuid_le is too small to hold the decoded + * value from response. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match the expected + * operation code. + */ +uint32_t ble_uuid_encode_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint8_t * const p_uuid_le_len, + uint8_t * const p_uuid_le, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_uuid_decode command request. + * + * @sa @ref ble_uuid_decode_rsp_dec for command response decoder. + * + * @param[in] uuid_le_len Size of \p p_uuid_le if \p p_uuid_le is not NULL. + * @param[in] p_uuid_le Pointer to a buffer where the little endian raw UUID bytes(2 or 16) + * are stored. + * @param[out] p_uuid Pointer to a @ref ble_uuid_t structure were the raw UUID will be decoded. + * @param[in] p_buf Pointer to the buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of the encoded command packet. + * + * @note \p p_uuid will not be updated by the command request encoder. + * Updated values are set by @ref ble_uuid_decode_rsp_dec. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_uuid_decode_req_enc(uint8_t uuid_le_len, + uint8_t const * const p_uuid_le, + ble_uuid_t * const p_uuid, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes a response to the @ref sd_ble_uuid_decode command. + * + * @sa @ref ble_uuid_decode_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to the beginning of command response packet. + * @param[in] packet_len Length (in bytes) of the response packet. + * @param[out] p_uuid Pointer to a buffer where the decoded UUID will be stored. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match the expected + * operation code. + */ +uint32_t ble_uuid_decode_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_uuid_t * * const p_uuid, + uint32_t * const p_result_code); + +/**@brief Encodes the @ref sd_ble_uuid_vs_add command request. + * + * @sa @ref ble_uuid_vs_add_rsp_dec for command response decoder. + * + * @param[in] p_vs_uuid Pointer to a @ref ble_uuid128_t structure. + * @param[in] p_uuid_type Pointer to uint8_t where UUID type will be returned. + * @param[in] p_buf Pointer to buffer where the encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @note \p p_uuid_type will not be updated by the command request encoder. + * Updated values are set by @ref ble_uuid_vs_add_rsp_dec. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_uuid_vs_add_req_enc(ble_uuid128_t const * const p_vs_uuid, + uint8_t * const p_uuid_type, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to the @ref sd_ble_uuid_vs_add command. + * + * @sa @ref ble_uuid_vs_add_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to the beginning of command response packet. + * @param[in] packet_len Length (in bytes) of a response packet. + * @param[out] pp_uuid_type Pointer to a pointer to uint8_t where the decoded UUID type will be stored. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_uuid_vs_add_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint8_t * * const pp_uuid_type, + uint32_t * const p_result_code); + +/**@brief Encodes the @ref sd_ble_version_get command request. + * + * @sa @ref ble_version_get_rsp_dec for command response decoder. + * + * @param[in] p_version Pointer to a @ref ble_version_t structure to be filled by the response. + * @param[in] p_buf Pointer to a buffer where the encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_version_get_req_enc(ble_version_t const * const p_version, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to the @ref sd_ble_version_get command. + * + * @sa @ref ble_version_get_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to the beginning of a command response packet. + * @param[in] packet_len Length (in bytes) of the response packet. + * @param[out] p_version Pointer to a @ref ble_version_t where the decoded version will be stored. + * @param[out] p_result_code Command result code. + * + * @return NRF_SUCCESS Version information stored successfully. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold the decoded event. + */ +uint32_t ble_version_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_version_t * p_version, + uint32_t * const p_result_code); + + +/**@brief Encodes the @ref sd_ble_opt_set command request. + * + * @sa @ref ble_opt_set_rsp_dec for command response decoder. + * + * @param[in] opt_id Identifies type of parameter in ble_opt_t union. + * @param[in] p_opt Pointer to the ble_opt_t union. + * @param[in] p_buf Pointer to a buffer where the encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of the encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_PARAM Invalid opt id. + */ +uint32_t ble_opt_set_req_enc(uint32_t const opt_id, + ble_opt_t const * const p_opt, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to the @ref sd_ble_opt_set command. + * + * @sa @ref ble_opt_set_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to the beginning of a command response packet. + * @param[in] packet_len Length (in bytes) of the response packet. + * @param[out] p_result_code Command result code. + * + * @return NRF_SUCCESS Version information stored successfully. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + */ +uint32_t ble_opt_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes the @ref sd_ble_enable command request. + * + * @sa @ref ble_enable_rsp_dec for command response decoder. + * + * @param[in] p_ble_enable_params Pointer to the @ref ble_enable_params_t structure. + * @param[in] p_buf Pointer to the buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of the encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_enable_req_enc(ble_enable_params_t * p_ble_enable_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to the @ref sd_ble_enable command. + * + * @sa @ref ble_enable_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to the beginning of a command response packet. + * @param[in] packet_len Length (in bytes) of the response packet. + * @param[out] p_result_code Command result code. + * + * @return NRF_SUCCESS Success. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold the decoded event. + */ +uint32_t ble_enable_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes the @ref sd_ble_opt_get command request. + * + * @sa @ref ble_opt_get_rsp_dec for command response decoder. + * + * @param[in] opt_id Identifies the type of parameter in the ble_opt_t union. + * @param[in] p_opt Pointer to the @ref ble_opt_t union to be filled by the response. + * @param[in] p_buf Pointer to the buffer where the encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of the encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_PARAM Invalid opt id. + */ +uint32_t ble_opt_get_req_enc(uint32_t opt_id, + ble_opt_t const * const p_opt, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to the @ref sd_ble_opt_get command. + * + * @sa @ref ble_opt_get_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to the beginning of a command response packet. + * @param[in] packet_len Length (in bytes) of the response packet. + * @param[out] p_opt_id Pointer to the decoded opt_id. + * @param[out] p_opt Pointer to the decoded @ref ble_opt_t union. + * @param[out] p_result_code Command result code. + * + * @return NRF_SUCCESS Opt stored successfully. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold the decoded event. + * @retval NRF_ERROR_INVALID_PARAM Invalid opt id. + */ + +uint32_t ble_opt_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_opt_id, + ble_opt_t * const p_opt, + uint32_t * const p_result_code); + +/**@brief Encodes the @ref sd_ble_user_mem_reply command request. + * + * @sa @ref ble_user_mem_reply_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_block Pointer to the @ref ble_user_mem_block_t structure. + * @param[in] p_buf Pointer to the buffer where the encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of the encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_PARAM Invalid opt id. + */ +uint32_t ble_user_mem_reply_req_enc(uint16_t conn_handle, + ble_user_mem_block_t const * p_block, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to the @ref sd_ble_user_mem_reply command. + * + * @sa @ref ble_user_mem_reply_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to the beginning of a command response packet. + * @param[in] packet_len Length (in bytes) of the response packet. + * @param[out] p_result_code Command result code. + * + * @return NRF_SUCCESS Opt stored successfully. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold the decoded event. + * @retval NRF_ERROR_INVALID_PARAM Invalid opt id. + */ +uint32_t ble_user_mem_reply_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Event decoding dispatcher. + * + * The event decoding dispatcher will route the event packet to the correct decoder, which in turn + * decodes the contents of the event and updates the \p p_event struct. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of the event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to the \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, the required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of the decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold the decoded event. + * @retval NRF_ERROR_NOT_FOUND Decoding failure. No event decoder is available. + */ +uint32_t ble_event_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_event.c b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_event.c new file mode 100644 index 000000000..c7d8c889f --- /dev/null +++ b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_event.c @@ -0,0 +1,227 @@ +/* Copyright (c) 2014 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is property of Nordic Semiconductor ASA. + * Terms and conditions of usage are described in detail in NORDIC + * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. + * + * Licensees are granted free, non-transferable use of the information. NO + * WARRANTY of ANY KIND is provided. This heading must NOT be removed from + * the file. + * + */ + +#include "ble_serialization.h" +#include "ble_app.h" +#include "ble_evt_app.h" +#include "ble_gap_evt_app.h" +#include "ble_gattc_evt_app.h" +#include "ble_gatts_evt_app.h" +#include "ble_l2cap_evt_app.h" +#include "app_util.h" + +uint32_t ble_event_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + uint32_t err_code; + SER_ASSERT_NOT_NULL(p_buf); + SER_ASSERT_NOT_NULL(p_event_len); + SER_ASSERT_LENGTH_LEQ(SER_EVT_HEADER_SIZE, packet_len); + SER_ASSERT_NOT_NULL(p_event); + SER_ASSERT_LENGTH_LEQ(sizeof (ble_evt_hdr_t), *p_event_len); + *p_event_len -= sizeof (ble_evt_hdr_t); + + const uint16_t event_id = uint16_decode(&p_buf[SER_EVT_ID_POS]); + const uint8_t * p_sub_buffer = &p_buf[SER_EVT_HEADER_SIZE]; + const uint32_t sub_packet_len = packet_len - SER_EVT_HEADER_SIZE; + + uint32_t (*fp_event_decoder)(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) = NULL; + + switch (event_id) + { + case BLE_EVT_TX_COMPLETE: + fp_event_decoder = ble_evt_tx_complete_dec; + break; + + case BLE_EVT_USER_MEM_REQUEST: + fp_event_decoder = ble_evt_user_mem_request_dec; + break; + + case BLE_EVT_USER_MEM_RELEASE: + fp_event_decoder = ble_evt_user_mem_release_dec; + break; + + case BLE_EVT_DATA_LENGTH_CHANGED: + fp_event_decoder = ble_evt_data_length_changed_dec; + break; + + case BLE_GAP_EVT_PASSKEY_DISPLAY: + fp_event_decoder = ble_gap_evt_passkey_display_dec; + break; + + case BLE_GAP_EVT_AUTH_KEY_REQUEST: + fp_event_decoder = ble_gap_evt_auth_key_request_dec; + break; + + case BLE_GAP_EVT_CONN_PARAM_UPDATE: + fp_event_decoder = ble_gap_evt_conn_param_update_dec; + break; + + case BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST: + fp_event_decoder = ble_gap_evt_conn_param_update_request_dec; + break; + + case BLE_GAP_EVT_CONN_SEC_UPDATE: + fp_event_decoder = ble_gap_evt_conn_sec_update_dec; + break; + + case BLE_GAP_EVT_CONNECTED: + fp_event_decoder = ble_gap_evt_connected_dec; + break; + + case BLE_GAP_EVT_DISCONNECTED: + fp_event_decoder = ble_gap_evt_disconnected_dec; + break; + + case BLE_GAP_EVT_TIMEOUT: + fp_event_decoder = ble_gap_evt_timeout_dec; + break; + + case BLE_GAP_EVT_RSSI_CHANGED: + fp_event_decoder = ble_gap_evt_rssi_changed_dec; + break; + + case BLE_GAP_EVT_SEC_INFO_REQUEST: + fp_event_decoder = ble_gap_evt_sec_info_request_dec; + break; + + case BLE_GAP_EVT_SEC_PARAMS_REQUEST: + fp_event_decoder = ble_gap_evt_sec_params_request_dec; + break; + + case BLE_GAP_EVT_AUTH_STATUS: + fp_event_decoder = ble_gap_evt_auth_status_dec; + break; + + case BLE_GAP_EVT_SEC_REQUEST: + fp_event_decoder = ble_gap_evt_sec_request_dec; + break; + + case BLE_GAP_EVT_KEY_PRESSED: + fp_event_decoder = ble_gap_evt_key_pressed_dec; + break; + + case BLE_GAP_EVT_LESC_DHKEY_REQUEST: + fp_event_decoder = ble_gap_evt_lesc_dhkey_request_dec; + break; + + case BLE_GATTC_EVT_CHAR_DISC_RSP: + fp_event_decoder = ble_gattc_evt_char_disc_rsp_dec; + break; + + case BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP: + fp_event_decoder = ble_gattc_evt_char_val_by_uuid_read_rsp_dec; + break; + + case BLE_GATTC_EVT_DESC_DISC_RSP: + fp_event_decoder = ble_gattc_evt_desc_disc_rsp_dec; + break; + + case BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP: + fp_event_decoder = ble_gattc_evt_prim_srvc_disc_rsp_dec; + break; + + case BLE_GATTC_EVT_READ_RSP: + fp_event_decoder = ble_gattc_evt_read_rsp_dec; + break; + + case BLE_GATTC_EVT_HVX: + fp_event_decoder = ble_gattc_evt_hvx_dec; + break; + + case BLE_GATTC_EVT_TIMEOUT: + fp_event_decoder = ble_gattc_evt_timeout_dec; + break; + + case BLE_GATTC_EVT_WRITE_RSP: + fp_event_decoder = ble_gattc_evt_write_rsp_dec; + break; + + case BLE_GATTC_EVT_CHAR_VALS_READ_RSP: + fp_event_decoder = ble_gattc_evt_char_vals_read_rsp_dec; + break; + + case BLE_GATTC_EVT_REL_DISC_RSP: + fp_event_decoder = ble_gattc_evt_rel_disc_rsp_dec; + break; + + case BLE_GATTC_EVT_ATTR_INFO_DISC_RSP: + fp_event_decoder = ble_gattc_evt_attr_info_disc_rsp_dec; + break; + + case BLE_GATTC_EVT_EXCHANGE_MTU_RSP: + fp_event_decoder = ble_gattc_evt_exchange_mtu_rsp_dec; + break; + + case BLE_GATTS_EVT_WRITE: + fp_event_decoder = ble_gatts_evt_write_dec; + break; + + case BLE_GATTS_EVT_TIMEOUT: + fp_event_decoder = ble_gatts_evt_timeout_dec; + break; + + case BLE_GATTS_EVT_SC_CONFIRM: + fp_event_decoder = ble_gatts_evt_sc_confirm_dec; + break; + + case BLE_GATTS_EVT_HVC: + fp_event_decoder = ble_gatts_evt_hvc_dec; + break; + + case BLE_GATTS_EVT_SYS_ATTR_MISSING: + fp_event_decoder = ble_gatts_evt_sys_attr_missing_dec; + break; + + case BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST: + fp_event_decoder = ble_gatts_evt_rw_authorize_request_dec; + break; + + case BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST: + fp_event_decoder = ble_gatts_evt_exchange_mtu_request_dec; + break; + + case BLE_L2CAP_EVT_RX: + fp_event_decoder = ble_l2cap_evt_rx_dec; + break; + + case BLE_GAP_EVT_ADV_REPORT: + fp_event_decoder = ble_gap_evt_adv_report_dec; + break; + + case BLE_GAP_EVT_SCAN_REQ_REPORT: + fp_event_decoder = ble_gap_evt_scan_req_report_dec; + break; + default: + break; + } + + if (fp_event_decoder) + { + err_code = fp_event_decoder(p_sub_buffer, sub_packet_len, p_event, p_event_len); + } + else + { + err_code = NRF_ERROR_NOT_FOUND; + } + + *p_event_len += offsetof(ble_evt_t, evt); + p_event->header.evt_id = (err_code == NRF_SUCCESS) ? event_id : 0; + p_event->header.evt_len = (err_code == NRF_SUCCESS) ? (uint16_t)*p_event_len : 0; + + return err_code; +} diff --git a/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_evt_app.c b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_evt_app.c new file mode 100644 index 000000000..28242f54b --- /dev/null +++ b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_evt_app.c @@ -0,0 +1,100 @@ +/* Copyright (c) 2015 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is property of Nordic Semiconductor ASA. + * Terms and conditions of usage are described in detail in NORDIC + * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. + * + * Licensees are granted free, non-transferable use of the information. NO + * WARRANTY of ANY KIND is provided. This heading must NOT be removed from + * the file. + * + */ + +#include "ble_serialization.h" +#include "ble_struct_serialization.h" +#include "cond_field_serialization.h" +#include "app_util.h" +#include "ble_evt_app.h" +#include "app_ble_user_mem.h" + + +// Helper definitions for common event type names to be compliant with +// event serialization macros. +#define ble_common_evt_tx_complete_t ble_evt_tx_complete_t +#define ble_common_evt_user_mem_request_t ble_evt_user_mem_request_t +#define ble_common_evt_user_mem_release_t ble_evt_user_mem_release_t +#define ble_common_evt_data_length_changed_t ble_evt_data_length_changed_t + + +extern ser_ble_user_mem_t m_app_user_mem_table[]; + +uint32_t ble_evt_user_mem_release_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_EVT_USER_MEM_RELEASE, common, user_mem_release); + + SER_PULL_uint16(&p_event->evt.common_evt.conn_handle); + SER_PULL_uint8(&p_event->evt.common_evt.params.user_mem_release.type); + SER_PULL_uint16(&p_event->evt.common_evt.params.user_mem_release.mem_block.len); + + //Set the memory pointer to not-null value. + p_event->evt.common_evt.params.user_mem_release.mem_block.p_mem = (uint8_t *)~0; + SER_PULL_COND(&p_event->evt.common_evt.params.user_mem_release.mem_block.p_mem, NULL); + if (p_event->evt.common_evt.params.user_mem_release.mem_block.p_mem) + { + // Using connection handle find which mem block to release in Application Processor + uint32_t user_mem_table_index; + err_code = app_ble_user_mem_context_find(p_event->evt.common_evt.conn_handle, &user_mem_table_index); + SER_ASSERT(err_code == NRF_SUCCESS, err_code); + p_event->evt.common_evt.params.user_mem_release.mem_block.p_mem = + m_app_user_mem_table[user_mem_table_index].mem_block.p_mem; + } + + // Now user memory context can be released + err_code = app_ble_user_mem_context_destroy(p_event->evt.common_evt.conn_handle); + SER_ASSERT(err_code == NRF_SUCCESS, err_code); + + SER_EVT_DEC_END; +} + +uint32_t ble_evt_tx_complete_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_EVT_TX_COMPLETE, common, tx_complete); + + SER_PULL_uint16(&p_event->evt.common_evt.conn_handle); + SER_PULL_uint8(&p_event->evt.common_evt.params.tx_complete.count); + + SER_EVT_DEC_END; +} + + +uint32_t ble_evt_user_mem_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_EVT_USER_MEM_REQUEST, common, user_mem_request); + + SER_PULL_uint16(&p_event->evt.common_evt.conn_handle); + SER_PULL_uint8(&p_event->evt.common_evt.params.user_mem_request.type); + + SER_EVT_DEC_END; +} + +uint32_t ble_evt_data_length_changed_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_EVT_DATA_LENGTH_CHANGED, common, data_length_changed); + + SER_PULL_uint16(&p_event->evt.common_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.common_evt.params.data_length_changed, ble_evt_data_length_changed_t_dec); + + SER_EVT_DEC_END; +} diff --git a/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_evt_app.h b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_evt_app.h new file mode 100644 index 000000000..6a98a188b --- /dev/null +++ b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_evt_app.h @@ -0,0 +1,137 @@ +/* Copyright (c) 2014 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is property of Nordic Semiconductor ASA. + * Terms and conditions of usage are described in detail in NORDIC + * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. + * + * Licensees are granted free, non-transferable use of the information. NO + * WARRANTY of ANY KIND is provided. This heading must NOT be removed from + * the file. + * + */ +#ifndef BLE_EVT_APP_H__ +#define BLE_EVT_APP_H__ + +/** + * @addtogroup ser_codecs Serialization codecs + * @ingroup ble_sdk_lib_serialization + */ + +/** + * @addtogroup ser_app_s130_codecs Application S132 codecs + * @ingroup ser_codecs + */ + +/**@file + * + * @defgroup ble_evt_app Application event decoders + * @{ + * @ingroup ser_app_s130_codecs + * + * @brief Application event decoders. + */ +#include "ble.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Decodes the ble_evt_tx_complete event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of the event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to the \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, the required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of the \p p_event buffer. + * \c out: Length of the decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold the decoded event. + */ +uint32_t ble_evt_tx_complete_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes the ble_evt_user_mem_request event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of the event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to the \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, the required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of the \p p_event buffer. + * \c out: Length of the decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold the decoded event. + */ +uint32_t ble_evt_user_mem_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes the ble_evt_user_mem_release event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of the event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to the \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, the required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of the \p p_event buffer. + * \c out: Length of the decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold the decoded event. + */ +uint32_t ble_evt_user_mem_release_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes the ble_evt_data_length_changed event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of the event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to the \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, the required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of the \p p_event buffer. + * \c out: Length of the decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold the decoded event. + */ +uint32_t ble_evt_data_length_changed_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gap_app.c b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gap_app.c new file mode 100644 index 000000000..ad2bfa296 --- /dev/null +++ b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gap_app.c @@ -0,0 +1,824 @@ +/* Copyright (c) 2013 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is property of Nordic Semiconductor ASA. + * Terms and conditions of usage are described in detail in NORDIC + * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. + * + * Licensees are granted free, non-transferable use of the information. NO + * WARRANTY of ANY KIND is provided. This heading must NOT be removed from + * the file. + * + */ + +#include "ble_gap_app.h" +#include +#include +#include "ble_serialization.h" +#include "ble_gap_struct_serialization.h" +#include "ble_struct_serialization.h" +#include "cond_field_serialization.h" +#include "app_util.h" + + +uint32_t ble_gap_adv_data_set_req_enc(uint8_t const * const p_data, + uint8_t dlen, + uint8_t const * const p_sr_data, + uint8_t srdlen, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_ADV_DATA_SET); + + SER_PUSH_len8data(p_data, dlen); + SER_PUSH_len8data(p_sr_data, srdlen); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_adv_data_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_ADV_DATA_SET); +} + + +uint32_t ble_gap_adv_start_req_enc(ble_gap_adv_params_t const * const p_adv_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_ADV_START); + SER_PUSH_COND(p_adv_params, ble_gap_adv_params_t_enc); + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_adv_start_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_ADV_START); +} + + +uint32_t ble_gap_adv_stop_req_enc(uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_ADV_STOP); + SER_REQ_ENC_END; +} + +uint32_t ble_gap_adv_stop_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_ADV_STOP); +} + + + +uint32_t ble_gap_appearance_get_req_enc(uint16_t const * const p_appearance, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_APPEARANCE_GET); + SER_PUSH_COND(p_appearance, NULL); + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_appearance_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint16_t * const p_appearance, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GAP_APPEARANCE_GET); + SER_PULL_COND(&p_appearance, uint16_t_dec); + SER_RSP_DEC_END; +} + + +uint32_t ble_gap_appearance_set_req_enc(uint16_t appearance, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_APPEARANCE_SET); + SER_PUSH_uint16(&appearance); + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_appearance_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_APPEARANCE_SET); +} + + +uint32_t ble_gap_auth_key_reply_req_enc(uint16_t conn_handle, + uint8_t key_type, + uint8_t const * const p_key, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_AUTH_KEY_REPLY); + + uint8_t key_len; + switch (key_type) + { + case BLE_GAP_AUTH_KEY_TYPE_NONE: + key_len = 0; + break; + + case BLE_GAP_AUTH_KEY_TYPE_PASSKEY: + key_len = 6; + break; + + case BLE_GAP_AUTH_KEY_TYPE_OOB: + key_len = 16; + break; + + default: + return NRF_ERROR_INVALID_PARAM; + } + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_uint8(&key_type); + SER_PUSH_buf(p_key, key_len); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_auth_key_reply_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_AUTH_KEY_REPLY); +} + + + +uint32_t ble_gap_authenticate_req_enc(uint16_t conn_handle, + ble_gap_sec_params_t const * const p_sec_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_AUTHENTICATE); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_sec_params, ble_gap_sec_params_t_enc); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_authenticate_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_AUTHENTICATE); +} + + +uint32_t ble_gap_conn_param_update_req_enc(uint16_t conn_handle, + ble_gap_conn_params_t const * const p_conn_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_CONN_PARAM_UPDATE); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_conn_params, ble_gap_conn_params_t_enc); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_conn_param_update_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_CONN_PARAM_UPDATE); +} + + +uint32_t ble_gap_conn_sec_get_req_enc(uint16_t conn_handle, + ble_gap_conn_sec_t const * const p_conn_sec, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_CONN_SEC_GET); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_conn_sec, NULL); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_conn_sec_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gap_conn_sec_t * * const pp_conn_sec, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GAP_CONN_SEC_GET); + SER_PULL_COND(pp_conn_sec, ble_gap_conn_sec_t_dec); + SER_RSP_DEC_END; +} + + +uint32_t ble_gap_connect_req_enc(ble_gap_addr_t const * const p_peer_addr, + ble_gap_scan_params_t const * const p_scan_params, + ble_gap_conn_params_t const * const p_conn_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_CONNECT); + + SER_PUSH_COND(p_peer_addr, ble_gap_addr_t_enc); + SER_PUSH_COND(p_scan_params, ble_gap_scan_params_t_enc); + SER_PUSH_COND(p_conn_params, ble_gap_conn_params_t_enc); + + SER_REQ_ENC_END; +} + +uint32_t ble_gap_connect_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_CONNECT); +} + + +uint32_t ble_gap_connect_cancel_req_enc(uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_CONNECT_CANCEL); + SER_REQ_ENC_END; +} + +uint32_t ble_gap_connect_cancel_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_CONNECT_CANCEL); +} + + +uint32_t ble_gap_device_name_get_req_enc(uint8_t const * const p_dev_name, + uint16_t const * const p_len, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_DEVICE_NAME_GET); + + SER_PUSH_COND(p_len, uint16_t_enc); + SER_PUSH_COND(p_dev_name, NULL); + + SER_REQ_ENC_END; +} + +uint32_t ble_gap_device_name_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint8_t * const p_dev_name, + uint16_t * const p_dev_name_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GAP_DEVICE_NAME_GET); + + SER_PULL_COND(&p_dev_name_len, uint16_t_dec); + if (p_dev_name_len) + { + SER_PULL_uint8array(p_dev_name, *p_dev_name_len); + } + + SER_RSP_DEC_END; +} + + +uint32_t ble_gap_device_name_set_req_enc(ble_gap_conn_sec_mode_t const * const p_write_perm, + uint8_t const * const p_dev_name, + uint16_t len, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_DEVICE_NAME_SET); + + SER_ERROR_CHECK(len <= BLE_GAP_DEVNAME_MAX_LEN, NRF_ERROR_INVALID_PARAM); + + SER_PUSH_COND(p_write_perm, ble_gap_conn_sec_mode_t_enc); + SER_PUSH_len16data(p_dev_name, len); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_device_name_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_DEVICE_NAME_SET); +} + + +uint32_t ble_gap_disconnect_req_enc(uint16_t conn_handle, + uint8_t hci_status_code, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_DISCONNECT); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_uint8(&hci_status_code); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_disconnect_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_DISCONNECT); +} + + +uint32_t ble_gap_encrypt_req_enc(uint16_t conn_handle, + ble_gap_master_id_t const * const p_master_id, + ble_gap_enc_info_t const * const p_enc_info, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_ENCRYPT); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_master_id, ble_gap_master_id_t_enc); + SER_PUSH_COND(p_enc_info, ble_gap_enc_info_t_enc); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_encrypt_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_ENCRYPT); +} + + +uint32_t ble_gap_keypress_notify_req_enc(uint16_t conn_handle, + uint8_t kp_not, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_KEYPRESS_NOTIFY); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_uint8(&kp_not); + + SER_REQ_ENC_END; +} + +uint32_t ble_gap_keypress_notify_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_KEYPRESS_NOTIFY); +} + + +uint32_t ble_gap_lesc_dhkey_reply_req_enc(uint16_t conn_handle, + ble_gap_lesc_dhkey_t const *p_dhkey, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_LESC_DHKEY_REPLY); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_dhkey, ble_gap_lesc_dhkey_t_enc); + + SER_REQ_ENC_END; +} + +uint32_t ble_gap_lesc_dhkey_reply_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_LESC_DHKEY_REPLY); +} + + +uint32_t ble_gap_lesc_oob_data_get_req_enc(uint16_t conn_handle, + ble_gap_lesc_p256_pk_t const *p_pk_own, + ble_gap_lesc_oob_data_t *p_oobd_own, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_LESC_OOB_DATA_GET); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_pk_own, ble_gap_lesc_p256_pk_t_enc); + SER_PUSH_COND(p_oobd_own, NULL); + + SER_REQ_ENC_END; +} + +uint32_t ble_gap_lesc_oob_data_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gap_lesc_oob_data_t * *pp_oobd_own, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GAP_LESC_OOB_DATA_GET); + SER_PULL_COND(pp_oobd_own, ble_gap_lesc_oob_data_t_dec); + SER_RSP_DEC_END; +} + + +uint32_t ble_gap_lesc_oob_data_set_req_enc(uint16_t conn_handle, + ble_gap_lesc_oob_data_t const *p_oobd_own, + ble_gap_lesc_oob_data_t const *p_oobd_peer, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_LESC_OOB_DATA_SET); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_oobd_own, ble_gap_lesc_oob_data_t_enc); + SER_PUSH_COND(p_oobd_peer, ble_gap_lesc_oob_data_t_enc); + + SER_REQ_ENC_END; +} + +uint32_t ble_gap_lesc_oob_data_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_LESC_OOB_DATA_SET); +} + + +uint32_t ble_gap_ppcp_get_req_enc(ble_gap_conn_params_t const * const p_conn_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_PPCP_GET); + SER_PUSH_COND(p_conn_params, NULL); + SER_REQ_ENC_END; +} + +uint32_t ble_gap_ppcp_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gap_conn_params_t * const p_conn_params, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GAP_PPCP_GET); + SER_PULL_COND(&p_conn_params, ble_gap_conn_params_t_dec); + SER_RSP_DEC_END; +} + + +uint32_t ble_gap_ppcp_set_req_enc(ble_gap_conn_params_t const * const p_conn_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_PPCP_SET); + SER_PUSH_COND(p_conn_params, ble_gap_conn_params_t_enc); + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_ppcp_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_PPCP_SET); +} + +uint32_t ble_gap_rssi_get_req_enc(uint16_t conn_handle, + int8_t const * const p_rssi, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_RSSI_GET); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_rssi, NULL); + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_rssi_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + int8_t * const p_rssi, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GAP_RSSI_GET); + SER_PULL_COND(&p_rssi, uint8_t_dec); + SER_RSP_DEC_END; +} + + +uint32_t ble_gap_rssi_start_req_enc(uint16_t conn_handle, + uint8_t threshold_dbm, + uint8_t skip_count, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_RSSI_START); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_uint8(&threshold_dbm); + SER_PUSH_uint8(&skip_count); + + SER_REQ_ENC_END; +} + +uint32_t ble_gap_rssi_start_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_RSSI_START); +} + + +uint32_t ble_gap_rssi_stop_req_enc(uint16_t conn_handle, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_RSSI_STOP); + SER_PUSH_uint16(&conn_handle); + SER_REQ_ENC_END; +} + +uint32_t ble_gap_rssi_stop_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_RSSI_STOP); +} + + +uint32_t ble_gap_scan_start_req_enc(ble_gap_scan_params_t const * p_scan_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_SCAN_START); + SER_PUSH_COND(p_scan_params, ble_gap_scan_params_t_enc); + SER_REQ_ENC_END; +} + +uint32_t ble_gap_scan_start_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_SCAN_START); +} + + +uint32_t ble_gap_scan_stop_req_enc(uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_SCAN_STOP); + SER_REQ_ENC_END; +} + +uint32_t ble_gap_scan_stop_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_SCAN_STOP); +} + + +uint32_t ble_gap_sec_info_reply_req_enc(uint16_t conn_handle, + ble_gap_enc_info_t const * p_enc_info, + ble_gap_irk_t const * p_id_info, + ble_gap_sign_info_t const * p_sign_info, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_SEC_INFO_REPLY); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_enc_info, ble_gap_enc_info_t_enc); + SER_PUSH_COND(p_id_info, ble_gap_irk_t_enc); + SER_PUSH_COND(p_sign_info, ble_gap_sign_info_t_enc); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_sec_info_reply_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_SEC_INFO_REPLY); +} + + +uint32_t ble_gap_sec_params_reply_req_enc(uint16_t conn_handle, + uint8_t sec_status, + ble_gap_sec_params_t const * const p_sec_params, + ble_gap_sec_keyset_t const * const p_sec_keyset, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_SEC_PARAMS_REPLY); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_uint8(&sec_status); + SER_PUSH_COND(p_sec_params, ble_gap_sec_params_t_enc); + SER_PUSH_COND(p_sec_keyset, ble_gap_sec_keyset_t_enc); + + SER_REQ_ENC_END; +} + +uint32_t ble_gap_sec_params_reply_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gap_sec_keyset_t const * const p_sec_keyset, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GAP_SEC_PARAMS_REPLY); + SER_PULL_COND(&p_sec_keyset, ble_gap_sec_keyset_t_dec); + SER_RSP_DEC_END; +} + + +uint32_t ble_gap_tx_power_set_req_enc(int8_t tx_power, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_TX_POWER_SET); + SER_PUSH_int8(&tx_power); + SER_REQ_ENC_END; +} + +uint32_t ble_gap_tx_power_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_TX_POWER_SET); +} + +uint32_t ble_gap_addr_get_req_enc(ble_gap_addr_t const * const p_address, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_ADDR_GET); + SER_PUSH_COND(p_address, NULL); + SER_REQ_ENC_END; +} + +uint32_t ble_gap_addr_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gap_addr_t * const p_address, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GAP_ADDR_GET); + SER_PULL_FIELD(p_address, ble_gap_addr_t_dec); + SER_RSP_DEC_END; +} + +uint32_t ble_gap_addr_set_req_enc(ble_gap_addr_t const * const p_addr, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_ADDR_SET); + SER_PUSH_COND(p_addr, ble_gap_addr_t_enc); + SER_REQ_ENC_END; +} + +uint32_t ble_gap_addr_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_ADDR_SET); +} + +uint32_t ble_gap_privacy_set_req_enc(ble_gap_privacy_params_t const * p_privacy_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_PRIVACY_SET); + SER_PUSH_COND(p_privacy_params, ble_gap_privacy_params_t_enc); + SER_REQ_ENC_END; +} + +uint32_t ble_gap_privacy_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_PRIVACY_SET); +} + + +uint32_t ble_gap_privacy_get_req_enc(ble_gap_privacy_params_t const * const p_privacy_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_PRIVACY_GET); + SER_PUSH_COND(p_privacy_params, ble_gap_privacy_params_t_enc); + SER_REQ_ENC_END; +} + +uint32_t ble_gap_privacy_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gap_privacy_params_t const * const p_privacy_params, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GAP_PRIVACY_GET); + SER_PULL_COND((void **)&p_privacy_params, ble_gap_privacy_params_t_dec); + SER_RSP_DEC_END; +} + +uint32_t ble_gap_whitelist_set_req_enc(ble_gap_addr_t const * const * const pp_wl_addrs, + uint8_t const len, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_WHITELIST_SET); + + uint8_t presence; + SER_PUSH_uint8(&len); + + if (pp_wl_addrs) + { + presence = SER_FIELD_PRESENT; + SER_PUSH_uint8(&presence); + + for (uint32_t i = 0; i < len; ++i) + { + SER_PUSH_COND(pp_wl_addrs[i], ble_gap_addr_t_enc); + } + } + else + { + presence = SER_FIELD_NOT_PRESENT; + SER_PUSH_uint8(&presence); + } + + SER_REQ_ENC_END; +} + +uint32_t ble_gap_whitelist_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_WHITELIST_SET); +} + +uint32_t ble_gap_device_identities_set_req_enc(ble_gap_id_key_t const * const * const pp_id_keys, + ble_gap_irk_t const * const * const pp_local_irks, + uint8_t const len, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_DEVICE_IDENTITIES_SET); + uint8_t presence; + SER_PUSH_uint8(&len); + + if (pp_id_keys) + { + presence = SER_FIELD_PRESENT; + SER_PUSH_uint8(&presence); + + for (uint32_t i = 0; i < len; ++i) + { + SER_PUSH_COND(pp_id_keys[i], ble_gap_id_key_t_enc); + } + } + else + { + presence = SER_FIELD_NOT_PRESENT; + SER_PUSH_uint8(&presence); + } + + if (pp_local_irks) + { + presence = SER_FIELD_PRESENT; + SER_PUSH_uint8(&presence); + + for (uint32_t i = 0; i < len; ++i) + { + SER_PUSH_COND(pp_local_irks[i], ble_gap_irk_t_enc); + } + } + else + { + presence = SER_FIELD_NOT_PRESENT; + SER_PUSH_uint8(&presence); + } + + SER_REQ_ENC_END; +} + +uint32_t ble_gap_device_identities_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_DEVICE_IDENTITIES_SET); +} diff --git a/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gap_app.h b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gap_app.h new file mode 100644 index 000000000..f720930d3 --- /dev/null +++ b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gap_app.h @@ -0,0 +1,1421 @@ +/* Copyright (c) 2013 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is property of Nordic Semiconductor ASA. + * Terms and conditions of usage are described in detail in NORDIC + * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. + * + * Licensees are granted free, non-transferable use of the information. NO + * WARRANTY of ANY KIND is provided. This heading must NOT be removed from + * the file. + * + */ +#ifndef BLE_GAP_APP_H__ +#define BLE_GAP_APP_H__ + +/** + * @addtogroup ser_codecs Serialization codecs + * @ingroup ble_sdk_lib_serialization + */ + +/** + * @addtogroup ser_app_s130_codecs Application S132 codecs + * @ingroup ser_codecs + */ + +/**@file + * + * @defgroup ble_gap_app GAP Application command request encoders and command response decoders + * @{ + * @ingroup ser_app_s130_codecs + * + * @brief GAP Application command request encoders and command response decoders. + */ +#include "ble.h" +#include "ble_gap.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Encodes @ref sd_ble_gap_adv_data_set command request. + * + * @sa @ref ble_gap_adv_data_set_rsp_dec for command response decoder. + * + * @param[in] p_data Raw data to be placed in advertisement packet. If NULL, no changes + * are made to the current advertisement packet data. + * @param[in] dlen Data length for p_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. + * Should be 0 if p_data is NULL, can be 0 if p_data is not NULL. + * @param[in] p_sr_data Raw data to be placed in scan response packet. If NULL, + * no changes are made to the current scan response packet data. + * @param[in] srdlen Data length for p_sr_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. + * Should be 0 if p_sr_data is NULL, can be 0 if p_data is not NULL. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_adv_data_set_req_enc(uint8_t const * const p_data, + uint8_t dlen, + uint8_t const * const p_sr_data, + uint8_t srdlen, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes response to @ref sd_ble_gap_adv_data_set command. + * + * @sa @ref ble_gap_adv_data_set_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gap_adv_data_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/** + * @brief Encodes @ref sd_ble_gap_adv_start command request. + * + * @sa @ref ble_gap_adv_start_rsp_dec for command response decoder. + * + * @param[in] p_adv_params Pointer to advertising parameters structure. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_adv_start_req_enc(ble_gap_adv_params_t const * const p_adv_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes response to @ref sd_ble_gap_adv_start command. + * + * @sa @ref ble_gap_adv_start_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gap_adv_start_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/** + * @brief Encodes @ref sd_ble_gap_tx_power_set command request. + * + * @sa @ref ble_gap_tx_power_set_rsp_dec for command response decoder. + * + * @param[in] tx_power Radio transmit power in dBm (accepted values are -40, -30, -20, -16, -12, -8, -4, 0, and 4 dBm). + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_tx_power_set_req_enc(int8_t tx_power, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes response to @ref sd_ble_gap_tx_power_set command. + * + * @sa @ref ble_gap_tx_power_set_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gap_tx_power_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/** + * @brief Encodes @ref sd_ble_gap_appearance_get command request. + * + * @sa @ref ble_gap_appearance_get_rsp_dec for command response decoder. + * + * @param[in] p_appearance Appearance (16 bit), see @ref BLE_APPEARANCES. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @note \p p_appearance will not be updated by the command + * request encoder. Updated values are set by @ref ble_gap_appearance_get_rsp_dec. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_appearance_get_req_enc(uint16_t const * const p_appearance, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes response to @ref sd_ble_gap_appearance_get command. + * + * @sa @ref ble_gap_appearance_get_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_appearance Appearance (16 bit), see @ref BLE_APPEARANCES. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gap_appearance_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint16_t * const p_appearance, + uint32_t * const p_result_code); + +/** + * @brief Encodes @ref sd_ble_gap_appearance_set command request. + * + * @sa @ref ble_gap_appearance_set_rsp_dec for command response decoder. + * + * @param[in] appearance Appearance (16 bit), see @ref BLE_APPEARANCES. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_appearance_set_req_enc(uint16_t appearance, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes response to @ref sd_ble_gap_appearance_set command. + * + * @sa @ref ble_gap_appearance_set_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gap_appearance_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/** + * @brief Encodes @ref sd_ble_gap_device_name_get command request. + * + * @sa @ref ble_gap_device_name_get_rsp_dec for command response decoder. + * + * @param[in] p_dev_name Pointer to an empty buffer where the UTF-8 non NULL-terminated + * string will be placed. Set to NULL to obtain the complete device + * name length. + * @param[in] p_dev_name_len Length of the buffer pointed by p_dev_name. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @note \p p_dev_name and \p p_len will not be updated by the command + * request encoder. Updated values are set by @ref ble_gap_device_name_get_rsp_dec. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_device_name_get_req_enc(uint8_t const * const p_dev_name, + uint16_t const * const p_dev_name_len, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes response to @ref sd_ble_gap_device_name_get command. + * + * @sa @ref ble_gap_device_name_get_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_dev_name Pointer to an empty buffer where the UTF-8 + * non NULL-terminated string will be placed. + * @param[in,out] p_dev_name_len Length of the buffer pointed by p_dev_name, complete device name + * length on output. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gap_device_name_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint8_t * const p_dev_name, + uint16_t * const p_dev_name_len, + uint32_t * const p_result_code); + +/** + * @brief Encodes @ref sd_ble_gap_device_name_set command request. + * + * @sa @ref ble_gap_device_name_set_rsp_dec for command response decoder. + * + * @param[in] p_write_perm Write permissions for the Device Name characteristic, see + * @ref ble_gap_conn_sec_mode_t. + * @param[in] p_dev_name Pointer to a UTF-8 encoded, non NULL-terminated string. + * @param[in] len Length of the UTF-8, non NULL-terminated string pointed + * to by p_dev_name in octets (must be smaller or equal + * than @ref BLE_GAP_DEVNAME_MAX_LEN). + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_device_name_set_req_enc(ble_gap_conn_sec_mode_t const * const p_write_perm, + uint8_t const * const p_dev_name, + uint16_t len, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes response to @ref sd_ble_gap_device_name_set command. + * + * @sa @ref ble_gap_device_name_set_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gap_device_name_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/** + * @brief Encodes @ref sd_ble_gap_ppcp_set command request. + * + * @sa @ref ble_gap_ppcp_set_rsp_dec for command response decoder. + * + * @param[in] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure with the + * desired parameters. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_ppcp_set_req_enc(ble_gap_conn_params_t const * const p_conn_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes response to @ref sd_ble_gap_ppcp_set command. + * + * @sa @ref ble_gap_ppcp_set_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gap_ppcp_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_conn_param_update command request. + * + * @sa @ref ble_gap_conn_param_update_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] p_conn_params Pointer to desired connection parameters. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_conn_param_update_req_enc(uint16_t conn_handle, + ble_gap_conn_params_t const * const p_conn_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_conn_param_update command. + * + * @sa @ref ble_gap_conn_param_update_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_conn_param_update_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_disconnect command request. + * + * @sa @ref ble_gap_disconnect_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] hci_status_code HCI status code, see @ref BLE_HCI_STATUS_CODES. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_disconnect_req_enc(uint16_t conn_handle, + uint8_t hci_status_code, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_disconnect command. + * + * @sa @ref ble_gap_disconnect_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_disconnect_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + + +/**@brief Encodes @ref sd_ble_gap_rssi_stop command request. + * + * @sa @ref ble_gap_rssi_stop_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_rssi_stop_req_enc(uint16_t conn_handle, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_rssi_stop command. + * + * @sa @ref ble_gap_rssi_stop_rsp_dec for command response decoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_rssi_stop_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + + + + +/**@brief Encodes @ref sd_ble_gap_ppcp_get command request. + * + * @sa @ref ble_gap_ppcp_get_rsp_dec for command response decoder. + * + * @param[in] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure where the + * parameters will be stored. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @note \p p_conn_params will not be updated by the command request encoder. Updated values are + * set by @ref ble_gap_ppcp_get_rsp_dec. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_ppcp_get_req_enc(ble_gap_conn_params_t const * const p_conn_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_ppcp_get command. + * + * @sa @ref ble_gap_ppcp_get_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure where the parameters + * will be stored. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_ppcp_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gap_conn_params_t * const p_conn_params, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_auth_key_reply command request. + * + * @sa @ref ble_gap_auth_key_reply_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] key_type Key type which defines length of key data as defined for + * @ref sd_ble_gap_auth_key_reply . + * @param[in] p_key Pointer to a buffer which contains key + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_PARAM Encoding failure. Incorrect param provided (key_type). + */ +uint32_t ble_gap_auth_key_reply_req_enc(uint16_t conn_handle, + uint8_t key_type, + uint8_t const * const p_key, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_auth_key_reply command. + * + * @sa @ref ble_gap_auth_key_reply_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_auth_key_reply_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_sec_info_reply command request. + * + * @sa @ref ble_gap_sec_info_reply_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information + * structure. + * @param[in] p_id_info Pointer to a @ref ble_gap_irk_t id information + * structure. + * @param[in] p_sign_info Pointer to a @ref ble_gap_sign_info_t signing information + * structure. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_sec_info_reply_req_enc(uint16_t conn_handle, + ble_gap_enc_info_t const * p_enc_info, + ble_gap_irk_t const * p_id_info, + ble_gap_sign_info_t const * p_sign_info, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_sec_info_reply command. + * + * @sa @ref ble_gap_sec_info_reply_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_sec_info_reply_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_sec_params_reply command request. + * + * @sa @ref ble_gap_sec_params_reply_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] sec_status Security status, see @ref BLE_GAP_SEC_STATUS. + * @param[in] p_sec_params Pointer to @ref ble_gap_sec_params_t security parameters + * structure. + * @param[in] p_sec_keyset Pointer to @ref ble_gap_sec_keyset_t security keys + * structure. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_sec_params_reply_req_enc(uint16_t conn_handle, + uint8_t sec_status, + ble_gap_sec_params_t const * const p_sec_params, + ble_gap_sec_keyset_t const * const p_sec_keyset, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_sec_params_reply command. + * + * @sa @ref ble_gap_sec_params_reply_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[in] p_sec_keyset Pointer to @ref ble_gap_sec_keyset_t security keys + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_sec_params_reply_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gap_sec_keyset_t const * const p_sec_keyset, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_authenticate command request. + * + * @sa @ref ble_gap_authenticate_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] p_sec_params Pointer to a @ref ble_gap_sec_params_t security parameters + * structure. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_authenticate_req_enc(uint16_t conn_handle, + ble_gap_sec_params_t const * const p_sec_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_authenticate command. + * + * @sa @ref ble_gap_authenticate_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_authenticate_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_adv_stop command request. + * + * @sa @ref ble_gap_adv_stop_rsp_dec for command response decoder. + * + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_adv_stop_req_enc(uint8_t * const p_buf, uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_adv_stop command. + * + * @sa @ref ble_gap_adv_stop_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_adv_stop_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_conn_sec_get command request. + * + * @sa @ref ble_gap_conn_sec_get_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] p_conn_sec Pointer to \ref ble_gap_conn_sec_t which will be filled in + * response. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_conn_sec_get_req_enc(uint16_t conn_handle, + ble_gap_conn_sec_t const * const p_conn_sec, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_conn_sec_get command. + * + * @sa @ref ble_gap_conn_sec_get_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] pp_conn_sec Pointer to pointer to \ref ble_gap_conn_sec_t which will be filled by + * the decoded data (if present). + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_conn_sec_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gap_conn_sec_t * * const pp_conn_sec, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_rssi_start command request. + * + * @sa @ref ble_gap_rssi_start_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] threshold_dbm Threshold in dBm. + * @param[in] skip_count Sample skip count. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_rssi_start_req_enc(uint16_t conn_handle, + uint8_t threshold_dbm, + uint8_t skip_count, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_rssi_start command. + * + * @sa @ref ble_gap_rssi_start_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_rssi_start_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_scan_stop command request. + * + * @sa @ref ble_gap_scan_stop_rsp_dec for command response decoder. + * + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_scan_stop_req_enc(uint8_t * const p_buf, uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_scan_stop command. + * + * @sa @ref ble_gap_scan_stop_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_scan_stop_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_scan_start command request. + * + * @sa @ref ble_gap_scan_start_rsp_dec for command response decoder. + * + * @param[in] p_scan_params Pointer to scan params structure. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_scan_start_req_enc(ble_gap_scan_params_t const * p_scan_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_scan_start command. + * + * @sa @ref ble_gap_scan_start_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_scan_start_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_connect command request. + * + * @sa @ref ble_gap_connect_rsp_dec for command response decoder. + * + * @param[in] p_peer_addr Pointer to peer address. + * @param[in] p_scan_params Pointer to scan params structure. + * @param[in] p_conn_params Pointer to desired connection parameters. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_connect_req_enc(ble_gap_addr_t const * const p_peer_addr, + ble_gap_scan_params_t const * const p_scan_params, + ble_gap_conn_params_t const * const p_conn_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_connect command. + * + * @sa @ref ble_gap_connect_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_connect_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_connect_cancel command request. + * + * @sa @ref ble_gap_connect_cancel_rsp_dec for command response decoder. + * + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_connect_cancel_req_enc(uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_connect_cancel command. + * + * @sa @ref ble_gap_connect_cancel_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_connect_cancel_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + + +/**@brief Encodes @ref sd_ble_gap_encrypt command request. + * + * @sa @ref ble_gap_encrypt_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_master_id Pointer to a master identification structure. + * @param[in] p_enc_info Pointer to desired connection parameters. + * @param[in] p_buf Pointer to a ble_gap_enc_info_t encryption information structure. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ + +uint32_t ble_gap_encrypt_req_enc(uint16_t conn_handle, + ble_gap_master_id_t const * const p_master_id, + ble_gap_enc_info_t const * const p_enc_info, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + + +/**@brief Decodes response to @ref sd_ble_gap_encrypt command. + * + * @sa @ref ble_gap_encrypt_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_encrypt_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_rssi_get command request. + * + * @sa @ref ble_gap_rssi_get_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_rssi Pointer to the RSSI value. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_rssi_get_req_enc(uint16_t conn_handle, + int8_t const * const p_rssi, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_rssi_get command. + * + * @sa @ref ble_gap_rssi_get_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_rssi Pointer to RSSI value. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_rssi_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + int8_t * const p_rssi, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_keypress_notify command request. + * + * @sa @ref ble_gap_keypress_notify_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle. + * @param[in] kp_not See @ref sd_ble_gap_keypress_notify. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_keypress_notify_req_enc(uint16_t conn_handle, + uint8_t kp_not, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_keypress_notify command. + * + * @sa @ref ble_gap_keypress_notify_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_keypress_notify_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_lesc_dhkey_reply command request. + * + * @sa @ref ble_gap_lesc_dhkey_reply_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_dhkey See @ref sd_ble_gap_lesc_dhkey_reply. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_lesc_dhkey_reply_req_enc(uint16_t conn_handle, + ble_gap_lesc_dhkey_t const *p_dhkey, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_lesc_dhkey_reply command. + * + * @sa @ref ble_gap_lesc_dhkey_reply_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_lesc_dhkey_reply_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_lesc_oob_data_set command request. + * + * @sa @ref ble_gap_lesc_oob_data_set_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_oobd_own See @ref sd_ble_gap_lesc_oob_data_set. + * @param[in] p_oobd_peer See @ref sd_ble_gap_lesc_oob_data_set. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_lesc_oob_data_set_req_enc(uint16_t conn_handle, + ble_gap_lesc_oob_data_t const *p_oobd_own, + ble_gap_lesc_oob_data_t const *p_oobd_peer, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_lesc_oob_data_set command. + * + * @sa @ref ble_gap_lesc_oob_data_set_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_lesc_oob_data_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_lesc_oob_data_get command request. + * + * @sa @ref ble_gap_lesc_oob_data_get_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_pk_own See @ref sd_ble_gap_lesc_oob_data_get. + * @param[in] p_oobd_own See @ref sd_ble_gap_lesc_oob_data_get. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_lesc_oob_data_get_req_enc(uint16_t conn_handle, + ble_gap_lesc_p256_pk_t const *p_pk_own, + ble_gap_lesc_oob_data_t *p_oobd_own, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_lesc_oob_data_get command. + * + * @sa @ref ble_gap_lesc_oob_data_get_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] pp_oobd_own Pointer to pointer to location where OOB data is decoded. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_lesc_oob_data_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gap_lesc_oob_data_t * *pp_oobd_own, + uint32_t * const p_result_code); + +/** + * @brief Encodes @ref sd_ble_gap_addr_get command request. + * + * @sa @ref ble_gap_addr_get_rsp_dec for command response decoder. + * + * @param[in] p_address Pointer to address. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @note \p p_address will not be updated by the command + * request encoder. Updated values are set by @ref ble_gap_addr_get_rsp_dec. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_addr_get_req_enc(ble_gap_addr_t const * const p_address, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes response to @ref sd_ble_gap_addr_get command. + * + * @sa @ref ble_gap_addr_get_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_address Pointer to address. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gap_addr_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gap_addr_t * const p_address, + uint32_t * const p_result_code); + +/** + * @brief Encodes @ref sd_ble_gap_addr_set command request. + * + * @sa @ref ble_gap_addr_set_rsp_dec for command response decoder. + * + * @param[in] p_addr Pointer to address structure. + * @param[in,out] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_addr_set_req_enc(ble_gap_addr_t const * const p_addr, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes response to @ref sd_ble_gap_addr_set command. + * + * @sa @ref ble_gap_addr_set_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gap_addr_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/** + * @brief Encodes @ref sd_ble_gap_privacy_set command request. + * + * @sa @ref ble_gap_privacy_set_rsp_dec for command response decoder. + * + * @param[in] p_privacy_params Pointer to privacy settings structure. + * @param[in,out] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_privacy_set_req_enc(ble_gap_privacy_params_t const * p_privacy_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes response to @ref sd_ble_gap_privacy_set command. + * + * @sa @ref ble_gap_privacy_set_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gap_privacy_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/** + * @brief Encodes @ref sd_ble_gap_privacy_get command request. + * + * @sa @ref ble_gap_privacy_get_rsp_dec for command response decoder. + * + * @param[in] p_privacy_params Pointer to privacy settings structure. + * @param[in,out] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_privacy_get_req_enc(ble_gap_privacy_params_t const * const p_privacy_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes response to @ref sd_ble_gap_privacy_get command. + * + * @sa @ref ble_gap_privacy_get_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_privacy_params Pointer to privacy settings structure. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gap_privacy_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gap_privacy_params_t const * const p_privacy_params, + uint32_t * const p_result_code); + +/** + * @brief Encodes @ref sd_ble_gap_whitelist_set command request. + * + * @sa @ref ble_gap_whitelist_set_rsp_dec for command response decoder. + * + * @param[in] pp_wl_addrs Pointer to a whitelist of peer addresses. + * @param[out] len Pointer to a length of the whitelist. + * @param[in,out] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_whitelist_set_req_enc(ble_gap_addr_t const * const * const pp_wl_addrs, + uint8_t const len, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes response to @ref sd_ble_gap_whitelist_set command. + * + * @sa @ref ble_gap_whitelist_set_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gap_whitelist_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/** + * @brief Encodes @ref sd_ble_gap_device_identities_set command request. + * + * @sa @ref ble_gap_device_identities_set_rsp_dec for command response decoder. + * + * @param[in] pp_id_keys Pointer to an array of peer identity addresses and peer IRKs. + * @param[in] pp_local_irks Pointer to an array of local IRKs. + * @param[out] len Pointer to a length of the device identity list. + * @param[in,out] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_device_identities_set_req_enc(ble_gap_id_key_t const * const * const pp_id_keys, + ble_gap_irk_t const * const * const pp_local_irks, + uint8_t const len, + uint8_t * const p_buf, + uint32_t * const p_buf_len); +/** + * @brief Decodes response to @ref sd_ble_gap_device_identities_set command. + * + * @sa @ref ble_gap_device_identities_set_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gap_device_identities_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gap_evt_app.c b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gap_evt_app.c new file mode 100644 index 000000000..f3f5ee454 --- /dev/null +++ b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gap_evt_app.c @@ -0,0 +1,292 @@ +/* Copyright (c) 2014 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is property of Nordic Semiconductor ASA. + * Terms and conditions of usage are described in detail in NORDIC + * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. + * + * Licensees are granted free, non-transferable use of the information. NO + * WARRANTY of ANY KIND is provided. This heading must NOT be removed from + * the file. + * + */ + +#include "ble_gap_evt_app.h" +#include "ble_serialization.h" +#include "app_util.h" +#include "app_ble_gap.h" +#include "ble_gap_struct_serialization.h" +#include "cond_field_serialization.h" +#include + +uint32_t ble_gap_evt_adv_report_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_ADV_REPORT, gap, adv_report); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gap_evt.params.adv_report, ble_gap_evt_adv_report_t_dec); + + SER_EVT_DEC_END; +} + +uint32_t ble_gap_evt_auth_key_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_AUTH_KEY_REQUEST, gap, auth_key_request); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_uint8(&p_event->evt.gap_evt.params.auth_key_request.key_type); + + SER_EVT_DEC_END; +} + +uint32_t ble_gap_evt_auth_status_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_AUTH_STATUS, gap, auth_status); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gap_evt.params.auth_status, ble_gap_evt_auth_status_t_dec); + + // keyset is an extension of standard event data - used to synchronize keys at application + uint32_t conn_index; + err_code = app_ble_gap_sec_keys_find(p_event->evt.gap_evt.conn_handle, &conn_index); + + if (err_code == NRF_SUCCESS) + { + ble_gap_sec_keyset_t *keyset; + err_code = app_ble_gap_sec_keys_get(conn_index, &keyset); + SER_ASSERT(err_code == NRF_SUCCESS, err_code); + + SER_PULL_FIELD(keyset, ble_gap_sec_keyset_t_dec); + + err_code = app_ble_gap_sec_keys_storage_destroy(p_event->evt.gap_evt.conn_handle); + SER_ASSERT(err_code == NRF_SUCCESS, err_code); + } + else + { + err_code = NRF_SUCCESS; + } + + SER_EVT_DEC_END; +} + + +uint32_t ble_gap_evt_conn_param_update_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_CONN_PARAM_UPDATE, gap, conn_param_update); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gap_evt.params.conn_param_update, ble_gap_evt_conn_param_update_t_dec); + + SER_EVT_DEC_END; +} + + +uint32_t ble_gap_evt_conn_param_update_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST, gap, conn_param_update_request); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gap_evt.params.conn_param_update_request, + ble_gap_evt_conn_param_update_request_t_dec); + + SER_EVT_DEC_END; +} + + +uint32_t ble_gap_evt_conn_sec_update_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST, gap, conn_sec_update); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gap_evt.params.conn_sec_update, ble_gap_evt_conn_sec_update_t_dec); + + SER_EVT_DEC_END; +} + +uint32_t ble_gap_evt_connected_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_CONNECTED, gap, connected); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gap_evt.params.connected, ble_gap_evt_connected_t_dec); + + SER_EVT_DEC_END; +} + + +uint32_t ble_gap_evt_disconnected_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_DISCONNECTED, gap, disconnected); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gap_evt.params.disconnected, ble_gap_evt_disconnected_t_dec); + + SER_EVT_DEC_END; +} + +uint32_t ble_gap_evt_key_pressed_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_KEY_PRESSED, gap, key_pressed); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_uint8(&p_event->evt.gap_evt.params.key_pressed.kp_not); + + SER_EVT_DEC_END; +} + + +uint32_t ble_gap_evt_lesc_dhkey_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_LESC_DHKEY_REQUEST, gap, lesc_dhkey_request); + + uint8_t ser_data; + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + + // keyset is an extension of standard event data - used to synchronize keys at application + uint32_t conn_index; + err_code = app_ble_gap_sec_keys_find(p_event->evt.gap_evt.conn_handle, &conn_index); + SER_ASSERT(err_code == NRF_SUCCESS, err_code); + + ble_gap_sec_keyset_t *keyset; + err_code = app_ble_gap_sec_keys_get(conn_index, &keyset); + SER_ASSERT(err_code == NRF_SUCCESS, err_code); + + p_event->evt.gap_evt.params.lesc_dhkey_request.p_pk_peer = keyset->keys_peer.p_pk; + SER_PULL_COND(&p_event->evt.gap_evt.params.lesc_dhkey_request.p_pk_peer, ble_gap_lesc_p256_pk_t_dec); + + SER_PULL_uint8(&ser_data); + p_event->evt.gap_evt.params.lesc_dhkey_request.oobd_req = ser_data & 0x01; + + SER_EVT_DEC_END; +} + + +#define PASSKEY_LEN sizeof (p_event->evt.gap_evt.params.passkey_display.passkey) + + +uint32_t ble_gap_evt_passkey_display_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_PASSKEY_DISPLAY, gap, passkey_display); + + uint8_t ser_data; + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_uint8array(p_event->evt.gap_evt.params.passkey_display.passkey, BLE_GAP_PASSKEY_LEN); + SER_PULL_uint8(&ser_data); + p_event->evt.gap_evt.params.passkey_display.match_request = (ser_data & 0x01); + + SER_EVT_DEC_END; +} + + + +uint32_t ble_gap_evt_rssi_changed_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_RSSI_CHANGED, gap, rssi_changed); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_int8(&p_event->evt.gap_evt.params.rssi_changed.rssi); + + SER_EVT_DEC_END; +} + + +uint32_t ble_gap_evt_scan_req_report_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_SCAN_REQ_REPORT, gap, scan_req_report); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gap_evt.params.scan_req_report.peer_addr, ble_gap_addr_t_dec); + SER_PULL_int8(&p_event->evt.gap_evt.params.scan_req_report.rssi); + + SER_EVT_DEC_END; +} + +uint32_t ble_gap_evt_sec_info_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_SEC_INFO_REQUEST, gap, sec_info_request); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gap_evt.params.sec_info_request, ble_gap_evt_sec_info_request_t_dec); + + SER_EVT_DEC_END; +} + +uint32_t ble_gap_evt_sec_params_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_SEC_PARAMS_REQUEST, gap, sec_params_request); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gap_evt.params.sec_params_request, ble_gap_evt_sec_params_request_t_dec); + + SER_EVT_DEC_END; +} + +uint32_t ble_gap_evt_sec_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_SEC_REQUEST, gap, sec_request); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gap_evt.params.sec_request, ble_gap_evt_sec_request_t_dec); + + SER_EVT_DEC_END; +} + +uint32_t ble_gap_evt_timeout_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_TIMEOUT, gap, timeout); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_uint8(&p_event->evt.gap_evt.params.timeout.src); + + SER_EVT_DEC_END; +} diff --git a/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gap_evt_app.h b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gap_evt_app.h new file mode 100644 index 000000000..719cb1980 --- /dev/null +++ b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gap_evt_app.h @@ -0,0 +1,433 @@ +/* Copyright (c) 2014 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is property of Nordic Semiconductor ASA. + * Terms and conditions of usage are described in detail in NORDIC + * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. + * + * Licensees are granted free, non-transferable use of the information. NO + * WARRANTY of ANY KIND is provided. This heading must NOT be removed from + * the file. + * + */ +#ifndef BLE_GAP_EVT_APP_H__ +#define BLE_GAP_EVT_APP_H__ + +/** + * @addtogroup ser_codecs Serialization codecs + * @ingroup ble_sdk_lib_serialization + */ + +/** + * @addtogroup ser_app_s130_codecs Application S132 codecs + * @ingroup ser_codecs + */ + +/**@file + * + * @defgroup ble_gap_evt_app GAP Application event decoders + * @{ + * @ingroup ser_app_s130_codecs + * + * @brief GAP Application event decoders. + */ +#include "ble.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Decodes ble_gap_evt_auth_key_request event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_auth_key_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gap_evt_auth_status event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_auth_status_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gap_evt_conn_param_update event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_conn_param_update_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gap_evt_conn_sec_update event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_conn_sec_update_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gap_evt_connected event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_connected_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gap_evt_disconnected event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_disconnected_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gap_evt_passkey_display event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_passkey_display_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gap_evt_rssi_changed event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_rssi_changed_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gap_evt_sec_info_request event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_sec_info_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gap_evt_sec_params_request event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_sec_params_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gap_evt_timeout event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_timeout_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gap_evt_sec_request event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_sec_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gap_evt_conn_param_update_request event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_conn_param_update_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); +/** + * @brief Decodes ble_gap_evt_adv_report event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_adv_report_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gap_evt_scan_req_report event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_scan_req_report_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gap_evt_key_pressed event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_key_pressed_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); +/** + * @brief Decodes ble_gap_evt_lesc_dhkey_request event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_lesc_dhkey_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gattc_app.c b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gattc_app.c new file mode 100644 index 000000000..0184d30cf --- /dev/null +++ b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gattc_app.c @@ -0,0 +1,259 @@ +/* Copyright (c) 2013 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is property of Nordic Semiconductor ASA. + * Terms and conditions of usage are described in detail in NORDIC + * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. + * + * Licensees are granted free, non-transferable use of the information. NO + * WARRANTY of ANY KIND is provided. This heading must NOT be removed from + * the file. + * + */ + +#include "ble_gattc_app.h" +#include +#include "ble_serialization.h" +#include "ble_gattc_struct_serialization.h" +#include "cond_field_serialization.h" +#include "app_util.h" +#include "ble_struct_serialization.h" +#include "ble_types.h" + +uint32_t ble_gattc_attr_info_discover_req_enc(uint16_t conn_handle, + ble_gattc_handle_range_t const * const p_handle_range, + uint8_t * const p_buf, + uint32_t * p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTC_ATTR_INFO_DISCOVER); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_handle_range, ble_gattc_handle_range_t_enc); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gattc_attr_info_discover_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GATTC_ATTR_INFO_DISCOVER); +} + +uint32_t ble_gattc_char_value_by_uuid_read_req_enc(uint16_t conn_handle, + ble_uuid_t const * const p_uuid, + ble_gattc_handle_range_t const * const p_handle_range, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_uuid, ble_uuid_t_enc); + SER_PUSH_COND(p_handle_range, ble_gattc_handle_range_t_enc); + + SER_REQ_ENC_END; +} + +uint32_t ble_gattc_char_value_by_uuid_read_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ); +} + +uint32_t ble_gattc_char_values_read_req_enc(uint16_t conn_handle, + uint16_t const * const p_handles, + uint16_t handle_count, + uint8_t * const p_buf, + uint32_t * p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTC_CHAR_VALUES_READ); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_len16data16(p_handles, handle_count); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gattc_char_values_read_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GATTC_CHAR_VALUES_READ); +} + +uint32_t ble_gattc_characteristics_discover_req_enc( + uint16_t conn_handle, + ble_gattc_handle_range_t const * const p_handle_range, + uint8_t * const p_buf, + uint32_t * p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTC_CHARACTERISTICS_DISCOVER); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_handle_range, ble_gattc_handle_range_t_enc); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gattc_characteristics_discover_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GATTC_CHARACTERISTICS_DISCOVER); +} + +uint32_t ble_gattc_descriptors_discover_req_enc( + uint16_t conn_handle, + ble_gattc_handle_range_t const * const p_handle_range, + uint8_t * const p_buf, + uint32_t * p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTC_DESCRIPTORS_DISCOVER); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_handle_range, ble_gattc_handle_range_t_enc); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gattc_descriptors_discover_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GATTC_DESCRIPTORS_DISCOVER); +} + +uint32_t ble_gattc_hv_confirm_req_enc(uint16_t conn_handle, + uint16_t handle, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTC_HV_CONFIRM); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_uint16(&handle); + + SER_REQ_ENC_END; +} + +uint32_t ble_gattc_hv_confirm_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GATTC_HV_CONFIRM); +} + +uint32_t ble_gattc_primary_services_discover_req_enc(uint16_t conn_handle, + uint16_t start_handle, + ble_uuid_t const * const p_srvc_uuid, + uint8_t * const p_buf, + uint32_t * p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_uint16(&start_handle); + SER_PUSH_COND(p_srvc_uuid, ble_uuid_t_enc); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gattc_primary_services_discover_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER); +} + +uint32_t ble_gattc_read_req_enc(uint16_t conn_handle, + uint16_t handle, + uint16_t offset, + uint8_t * const p_buf, + uint32_t * p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTC_READ); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_uint16(&handle); + SER_PUSH_uint16(&offset); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gattc_read_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GATTC_READ); +} + +uint32_t ble_gattc_relationships_discover_req_enc( + uint16_t conn_handle, + ble_gattc_handle_range_t const * const p_handle_range, + uint8_t * const p_buf, + uint32_t * p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTC_RELATIONSHIPS_DISCOVER); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_handle_range, ble_gattc_handle_range_t_enc); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gattc_relationships_discover_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GATTC_RELATIONSHIPS_DISCOVER); +} + +uint32_t ble_gattc_write_req_enc(uint16_t conn_handle, + ble_gattc_write_params_t const * const p_write_params, + uint8_t * const p_buf, + uint32_t * p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTC_WRITE); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_write_params, ble_gattc_write_params_t_enc); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gattc_write_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GATTC_WRITE); +} + +uint32_t ble_gattc_exchange_mtu_request_req_enc(uint16_t conn_handle, + uint16_t client_rx_mtu, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTC_EXCHANGE_MTU_REQUEST); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_uint16(&client_rx_mtu); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gattc_exchange_mtu_request_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GATTC_EXCHANGE_MTU_REQUEST); +} diff --git a/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gattc_app.h b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gattc_app.h new file mode 100644 index 000000000..7d857b0a6 --- /dev/null +++ b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gattc_app.h @@ -0,0 +1,473 @@ +/* Copyright (c) 2013 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is property of Nordic Semiconductor ASA. + * Terms and conditions of usage are described in detail in NORDIC + * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. + * + * Licensees are granted free, non-transferable use of the information. NO + * WARRANTY of ANY KIND is provided. This heading must NOT be removed from + * the file. + * + */ +#ifndef BLE_GATTC_APP_H__ +#define BLE_GATTC_APP_H__ + +/** + * @addtogroup ser_codecs Serialization codecs + * @ingroup ble_sdk_lib_serialization + */ + +/** + * @addtogroup ser_app_s130_codecs Application S132 codecs + * @ingroup ser_codecs + */ + +/**@file + * + * @defgroup ble_gattc_app GATTC Application command request encoders and command response decoders + * @{ + * @ingroup ser_app_s130_codecs + * + * @brief GATTC Application command request encoders and command response decoders. + */ +#include "ble_gattc.h" +#include "ble.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/**@brief Encodes @ref sd_ble_gattc_primary_services_discover command request. + * + * @sa @ref ble_gattc_primary_services_discover_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] start_handle Handle to start searching from. + * @param[in] p_srvc_uuid Pointer to a @ref ble_uuid_t which indicates the service UUID to + * be found. If it is NULL, all primary services will be returned. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gattc_primary_services_discover_req_enc(uint16_t conn_handle, + uint16_t start_handle, + ble_uuid_t const * const p_srvc_uuid, + uint8_t * const p_buf, + uint32_t * p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gattc_primary_services_discover command. + * + * @sa @ref ble_gattc_primary_services_discover_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gattc_primary_services_discover_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gattc_descriptors_discover command request. + * + * @sa @ref ble_gattc_descriptors_discover_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] p_handle_range A pointer to the range of handles of the Service to perform + * this procedure on. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gattc_descriptors_discover_req_enc( + uint16_t conn_handle, + ble_gattc_handle_range_t const * const p_handle_range, + uint8_t * const p_buf, + uint32_t * p_buf_len); + + +/**@brief Decodes response to @ref sd_ble_gattc_descriptors_discover command. + * + * @sa @ref ble_gattc_primary_services_discover_rsp_dec for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gattc_descriptors_discover_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gattc_relationships_discover command request. + * + * @sa @ref ble_gattc_relationships_discover_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] p_handle_range A pointer to the range of handles of the Service to perform + * this procedure on. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gattc_relationships_discover_req_enc( + uint16_t conn_handle, + ble_gattc_handle_range_t const * const p_handle_range, + uint8_t * const p_buf, + uint32_t * p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gattc_relationships_discover command. + * + * @sa @ref ble_gattc_relationships_discover_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gattc_relationships_discover_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gattc_characteristics_discover command request. + * + * @sa @ref ble_gattc_characteristics_discover_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] p_handle_range A pointer to the range of handles of the Service to perform + * this procedure on. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gattc_characteristics_discover_req_enc + (uint16_t conn_handle, + ble_gattc_handle_range_t const * const p_handle_range, + uint8_t * const p_buf, + uint32_t * p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gattc_characteristics_discover command. + * + * @sa @ref ble_gattc_primary_services_discover_rsp_dec for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gattc_characteristics_discover_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gattc_read command request. + * + * @sa @ref ble_gattc_read_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] handle The handle of the attribute to be read. + * @param[in] offset Offset into the attribute value to be read. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gattc_read_req_enc(uint16_t conn_handle, + uint16_t handle, + uint16_t offset, + uint8_t * const p_buf, + uint32_t * p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gattc_read command. + * + * @sa @ref ble_gattc_read_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gattc_read_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gattc_char_values_read command request. + * + * @sa @ref ble_gattc_char_values_read_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] p_handles A pointer to the handle(s) of the attribute(s) to be read. + * @param[in] handle_count The number of handles in p_handles. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gattc_char_values_read_req_enc(uint16_t conn_handle, + uint16_t const * const p_handles, + uint16_t handle_count, + uint8_t * const p_buf, + uint32_t * p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gattc_char_values_read command. + * + * @sa @ref ble_gattc_char_values_read_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gattc_char_values_read_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gattc_write command request. + * + * @sa @ref ble_gattc_write_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] p_write_params Pointer to \ref sd_ble_gattc_write params. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gattc_write_req_enc(uint16_t conn_handle, + ble_gattc_write_params_t const * const p_write_params, + uint8_t * const p_buf, + uint32_t * p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gattc_write command. + * + * @sa @ref ble_gattc_write_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gattc_write_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gattc_hv_confirm command request. + * + * @sa @ref ble_gattc_hv_confirm_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] handle Handle of the attribute in the indication. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gattc_hv_confirm_req_enc(uint16_t conn_handle, + uint16_t handle, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gattc_hv_confirm command. + * + * @sa @ref ble_gattc_hv_confirm_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Pointer to command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gattc_hv_confirm_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gattc_char_value_by_uuid_read command request. + * + * @sa @ref ble_gattc_char_value_by_uuid_read_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] p_uuid Pointer to a characteristic value UUID to read. + * @param[in] p_handle_range Pointer to the range of handles to perform this procedure on. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gattc_char_value_by_uuid_read_req_enc + (uint16_t conn_handle, + ble_uuid_t const * const p_uuid, + ble_gattc_handle_range_t const * const p_handle_range, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gattc_char_value_by_uuid_read command. + * + * @sa @ref ble_gattc_char_value_by_uuid_read_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Pointer to command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gattc_char_value_by_uuid_read_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gattc_attr_info_discover command request. + * + * @sa @ref ble_gattc_attr_info_discover_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] p_handle_range Pointer to the range of handles + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gattc_attr_info_discover_req_enc(uint16_t conn_handle, + ble_gattc_handle_range_t const * const p_handle_range, + uint8_t * const p_buf, + uint32_t * p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gattc_attr_info_discover command. + * + * @sa @ref ble_gattc_attr_info_discover_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Pointer to command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gattc_attr_info_discover_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gattc_exchange_mtu_request command request. + * + * @sa @ref ble_gattc_exchange_mtu_request_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] client_rx_mtu Client MTU Size. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gattc_exchange_mtu_request_req_enc(uint16_t conn_handle, + uint16_t client_rx_mtu, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gattc_exchange_mtu_request command. + * + * @sa @ref ble_gattc_exchange_mtu_request_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Pointer to command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gattc_exchange_mtu_request_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif + + diff --git a/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gattc_evt_app.c b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gattc_evt_app.c new file mode 100644 index 000000000..b3d5afe64 --- /dev/null +++ b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gattc_evt_app.c @@ -0,0 +1,219 @@ +/* Copyright (c) 2013 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is property of Nordic Semiconductor ASA. + * Terms and conditions of usage are described in detail in NORDIC + * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. + * + * Licensees are granted free, non-transferable use of the information. NO + * WARRANTY of ANY KIND is provided. This heading must NOT be removed from + * the file. + * + */ + +#include "ble_gattc_evt_app.h" +#include +#include "ble_serialization.h" +#include "ble_gattc_struct_serialization.h" +#include "app_util.h" + +uint32_t ble_gattc_evt_attr_info_disc_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, gattc, attr_info_disc_rsp); + + SER_PULL_uint16(&p_event->evt.gattc_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.gattc_evt.gatt_status); + SER_PULL_uint16(&p_event->evt.gattc_evt.error_handle); + SER_PULL_FIELD_EXTENDED(&p_event->evt.gattc_evt.params.attr_info_disc_rsp, + ble_gattc_evt_attr_info_disc_rsp_t_dec); + + SER_EVT_DEC_END; +} + +uint32_t ble_gattc_evt_char_disc_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTC_EVT_CHAR_DISC_RSP, gattc, char_disc_rsp); + + SER_PULL_uint16(&p_event->evt.gattc_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.gattc_evt.gatt_status); + SER_PULL_uint16(&p_event->evt.gattc_evt.error_handle); + SER_PULL_FIELD_EXTENDED(&p_event->evt.gattc_evt.params.char_disc_rsp, + ble_gattc_evt_char_disc_rsp_t_dec); + + SER_EVT_DEC_END; +} + + + +uint32_t ble_gattc_evt_char_val_by_uuid_read_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP, gattc, char_val_by_uuid_read_rsp); + + SER_PULL_uint16(&p_event->evt.gattc_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.gattc_evt.gatt_status); + SER_PULL_uint16(&p_event->evt.gattc_evt.error_handle); + SER_PULL_FIELD_EXTENDED(&p_event->evt.gattc_evt.params.char_val_by_uuid_read_rsp, + ble_gattc_evt_char_val_by_uuid_read_rsp_t_dec); + + SER_EVT_DEC_END; +} + + +uint32_t ble_gattc_evt_char_vals_read_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTC_EVT_CHAR_VALS_READ_RSP, gattc, char_vals_read_rsp); + + SER_PULL_uint16(&p_event->evt.gattc_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.gattc_evt.gatt_status); + SER_PULL_uint16(&p_event->evt.gattc_evt.error_handle); + SER_PULL_FIELD_EXTENDED(&p_event->evt.gattc_evt.params.char_vals_read_rsp, + ble_gattc_evt_char_vals_read_rsp_t_dec); + + SER_EVT_DEC_END; +} + + +uint32_t ble_gattc_evt_desc_disc_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTC_EVT_DESC_DISC_RSP, gattc, desc_disc_rsp); + + SER_PULL_uint16(&p_event->evt.gattc_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.gattc_evt.gatt_status); + SER_PULL_uint16(&p_event->evt.gattc_evt.error_handle); + SER_PULL_FIELD_EXTENDED(&p_event->evt.gattc_evt.params.desc_disc_rsp, + ble_gattc_evt_desc_disc_rsp_t_dec); + + SER_EVT_DEC_END; +} + +uint32_t ble_gattc_evt_hvx_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTC_EVT_HVX, gattc, hvx); + + SER_PULL_uint16(&p_event->evt.gattc_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.gattc_evt.gatt_status); + SER_PULL_uint16(&p_event->evt.gattc_evt.error_handle); + SER_PULL_FIELD_EXTENDED(&p_event->evt.gattc_evt.params.hvx, + ble_gattc_evt_hvx_t_dec); + + SER_EVT_DEC_END; +} + + +uint32_t ble_gattc_evt_prim_srvc_disc_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP, gattc, prim_srvc_disc_rsp); + + SER_PULL_uint16(&p_event->evt.gattc_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.gattc_evt.gatt_status); + SER_PULL_uint16(&p_event->evt.gattc_evt.error_handle); + SER_PULL_FIELD_EXTENDED(&p_event->evt.gattc_evt.params.prim_srvc_disc_rsp, + ble_gattc_evt_prim_srvc_disc_rsp_t_dec); + + SER_EVT_DEC_END; +} + +uint32_t ble_gattc_evt_read_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTC_EVT_READ_RSP, gattc, read_rsp); + + SER_PULL_uint16(&p_event->evt.gattc_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.gattc_evt.gatt_status); + SER_PULL_uint16(&p_event->evt.gattc_evt.error_handle); + SER_PULL_FIELD_EXTENDED(&p_event->evt.gattc_evt.params.read_rsp, + ble_gattc_evt_read_rsp_t_dec); + + SER_EVT_DEC_END; +} + + +#define BLE_GATTC_EVT_REL_DISC_RSP_COUNT_POSITION 6 + + +uint32_t ble_gattc_evt_rel_disc_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTC_EVT_READ_RSP, gattc, rel_disc_rsp); + + SER_PULL_uint16(&p_event->evt.gattc_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.gattc_evt.gatt_status); + SER_PULL_uint16(&p_event->evt.gattc_evt.error_handle); + SER_PULL_FIELD_EXTENDED(&p_event->evt.gattc_evt.params.rel_disc_rsp, + ble_gattc_evt_rel_disc_rsp_t_dec); + + SER_EVT_DEC_END; +} + + +uint32_t ble_gattc_evt_timeout_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTC_EVT_TIMEOUT, gattc, timeout); + + SER_PULL_uint16(&p_event->evt.gattc_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.gattc_evt.gatt_status); + SER_PULL_uint16(&p_event->evt.gattc_evt.error_handle); + SER_PULL_FIELD(&p_event->evt.gattc_evt.params.timeout, + ble_gattc_evt_timeout_t_dec); + + SER_EVT_DEC_END; +} + +uint32_t ble_gattc_evt_write_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTC_EVT_WRITE_RSP, gattc, write_rsp); + + SER_PULL_uint16(&p_event->evt.gattc_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.gattc_evt.gatt_status); + SER_PULL_uint16(&p_event->evt.gattc_evt.error_handle); + SER_PULL_FIELD_EXTENDED(&p_event->evt.gattc_evt.params.write_rsp, + ble_gattc_evt_write_rsp_t_dec); + + SER_EVT_DEC_END; +} + +uint32_t ble_gattc_evt_exchange_mtu_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTC_EVT_EXCHANGE_MTU_RSP, gattc, exchange_mtu_rsp); + + SER_PULL_uint16(&p_event->evt.gattc_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.gattc_evt.gatt_status); + SER_PULL_uint16(&p_event->evt.gattc_evt.error_handle); + SER_PULL_FIELD(&p_event->evt.gattc_evt.params.exchange_mtu_rsp, + ble_gattc_evt_exchange_mtu_rsp_t_dec); + + SER_EVT_DEC_END; +} diff --git a/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gattc_evt_app.h b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gattc_evt_app.h new file mode 100644 index 000000000..db9efb84c --- /dev/null +++ b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gattc_evt_app.h @@ -0,0 +1,321 @@ +/* Copyright (c) 2014 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is property of Nordic Semiconductor ASA. + * Terms and conditions of usage are described in detail in NORDIC + * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. + * + * Licensees are granted free, non-transferable use of the information. NO + * WARRANTY of ANY KIND is provided. This heading must NOT be removed from + * the file. + * + */ +#ifndef BLE_GATTC_EVT_APP_H__ +#define BLE_GATTC_EVT_APP_H__ + +/** + * @addtogroup ser_codecs Serialization codecs + * @ingroup ble_sdk_lib_serialization + */ + +/** + * @addtogroup ser_app_s130_codecs Application S132 codecs + * @ingroup ser_codecs + */ + +/**@file + * + * @defgroup ble_gattc_evt_app GATTC Application event decoders + * @{ + * @ingroup ser_app_s130_codecs + * + * @brief GATTC Application event decoders. + */ +#include "ble.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Decodes ble_gattc_evt_char_disc_rsp event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gattc_evt_char_disc_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gattc_evt_char_val_by_uuid_read_rsp event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gattc_evt_char_val_by_uuid_read_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gattc_evt_char_vals_read_rsp event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gattc_evt_char_vals_read_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gattc_evt_desc_disc_rsp event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gattc_evt_desc_disc_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gattc_evt_hvx event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gattc_evt_hvx_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gattc_evt_prim_srvc_disc_rsp event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gattc_evt_prim_srvc_disc_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gattc_evt_read_rsp event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gattc_evt_read_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gattc_evt_rel_disc_rsp_dec event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gattc_evt_rel_disc_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gattc_evt_timeout event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gattc_evt_timeout_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gattc_evt_write_rsp event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gattc_evt_write_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gattc_evt_attr_info_disc_rsp event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gattc_evt_attr_info_disc_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gattc_evt_exchange_mtu_rsp event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gattc_evt_exchange_mtu_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gatts_app.c b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gatts_app.c new file mode 100644 index 000000000..15cece727 --- /dev/null +++ b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gatts_app.c @@ -0,0 +1,412 @@ +/* Copyright (c) 2013 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is property of Nordic Semiconductor ASA. + * Terms and conditions of usage are described in detail in NORDIC + * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. + * + * Licensees are granted free, non-transferable use of the information. NO + * WARRANTY of ANY KIND is provided. This heading must NOT be removed from + * the file. + * + */ + +#include "ble_gatts_app.h" +#include +#include +#include "ble_serialization.h" +#include "ble_gatts_struct_serialization.h" +#include "ble_struct_serialization.h" +#include "cond_field_serialization.h" +#include "app_util.h" + + +uint32_t ble_gatts_attr_get_req_enc(uint16_t handle, + ble_uuid_t * p_uuid, + ble_gatts_attr_md_t * p_md, + uint8_t * const p_buf, + uint32_t * p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTS_ATTR_GET); + + SER_PUSH_uint16(&handle); + SER_PUSH_COND(p_uuid, NULL); + SER_PUSH_COND(p_md, NULL); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gatts_attr_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_uuid_t ** pp_uuid, + ble_gatts_attr_md_t ** pp_md, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GATTS_ATTR_GET); + SER_PULL_COND(pp_uuid, ble_uuid_t_dec); + SER_PULL_COND(pp_md, ble_gatts_attr_md_t_dec); + SER_RSP_DEC_END; +} + + +uint32_t ble_gatts_characteristic_add_req_enc( + uint16_t service_handle, + ble_gatts_char_md_t const * const p_char_md, + ble_gatts_attr_t const * const p_attr_char_value, + ble_gatts_char_handles_t const * const p_handles, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTS_CHARACTERISTIC_ADD); + + SER_PUSH_uint16(&service_handle); + SER_PUSH_COND(p_char_md, ble_gatts_char_md_t_enc); + SER_PUSH_COND(p_attr_char_value, ble_gatts_attr_t_enc); + SER_PUSH_COND(p_handles, NULL); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gatts_characteristic_add_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint16_t * * const pp_handles, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GATTS_CHARACTERISTIC_ADD); + + SER_PULL_COND(pp_handles, ble_gatts_char_handles_t_dec); + + SER_RSP_DEC_END; +} + + + +uint32_t ble_gatts_descriptor_add_req_enc(uint16_t char_handle, + ble_gatts_attr_t const * const p_attr, + uint16_t * const p_handle, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTS_DESCRIPTOR_ADD); + + SER_PUSH_uint16(&char_handle); + SER_PUSH_COND(p_attr, ble_gatts_attr_t_enc); + SER_PUSH_COND(p_handle, NULL); + + SER_REQ_ENC_END; +} + +uint32_t ble_gatts_descriptor_add_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint16_t * const p_handle, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GATTS_DESCRIPTOR_ADD); + + SER_PULL_COND(&p_handle, uint16_t_dec); + + SER_RSP_DEC_END; +} + + +uint32_t ble_gatts_hvx_req_enc(uint16_t conn_handle, + ble_gatts_hvx_params_t const * const p_hvx_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTS_HVX); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_hvx_params, ble_gatts_hvx_params_t_enc); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gatts_hvx_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code, + uint16_t * * const pp_bytes_written) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GATTS_HVX); + + SER_PULL_COND(pp_bytes_written, uint16_t_dec); + + SER_RSP_DEC_END; +} + + +uint32_t ble_gatts_include_add_req_enc(uint16_t service_handle, + uint16_t inc_srvc_handle, + uint16_t * const p_include_handle, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTS_INCLUDE_ADD); + + SER_PUSH_uint16(&service_handle); + SER_PUSH_uint16(&inc_srvc_handle); + SER_PUSH_COND(p_include_handle, NULL); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gatts_include_add_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint16_t * const p_include_handle, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GATTS_INCLUDE_ADD); + + SER_PULL_COND(&p_include_handle, uint16_t_dec); + + SER_RSP_DEC_END; +} + + +uint32_t ble_gatts_initial_user_handle_get_req_enc(uint16_t * p_handle, + uint8_t * const p_buf, + uint32_t * p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTS_INITIAL_USER_HANDLE_GET); + + SER_PUSH_COND(p_handle, NULL); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gatts_initial_user_handle_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint16_t ** pp_handle, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GATTS_INITIAL_USER_HANDLE_GET); + + SER_PULL_COND(pp_handle, uint16_t_dec); + + SER_RSP_DEC_END; +} + + +uint32_t ble_gatts_rw_authorize_reply_req_enc(uint16_t conn_handle, + ble_gatts_rw_authorize_reply_params_t const * const p_reply_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTS_RW_AUTHORIZE_REPLY); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_reply_params, ble_gatts_rw_authorize_reply_params_t_enc); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gatts_rw_authorize_reply_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GATTS_RW_AUTHORIZE_REPLY); +} + + +uint32_t ble_gatts_service_add_req_enc(uint8_t type, + ble_uuid_t const * const p_uuid, + uint16_t const * const p_conn_handle, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTS_SERVICE_ADD); + + SER_PUSH_uint8(&type); + SER_PUSH_COND(p_uuid, ble_uuid_t_enc); + SER_PUSH_COND(p_conn_handle, NULL); + + SER_REQ_ENC_END; +} + +uint32_t ble_gatts_service_add_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint16_t * const p_conn_handle, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GATTS_SERVICE_ADD); + + SER_PULL_COND(&p_conn_handle, uint16_t_dec); + + SER_RSP_DEC_END; +} + + +uint32_t ble_gatts_service_changed_req_enc(uint16_t conn_handle, + uint16_t start_handle, + uint16_t end_handle, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTS_SERVICE_CHANGED); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_uint16(&start_handle); + SER_PUSH_uint16(&end_handle); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gatts_service_changed_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GATTS_SERVICE_CHANGED); +} + + +uint32_t ble_gatts_sys_attr_get_req_enc(uint16_t conn_handle, + uint8_t const * const p_sys_attr_data, + uint16_t const * const p_sys_attr_data_len, + uint32_t flags, + uint8_t * const p_buf, + uint32_t * p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTS_SYS_ATTR_GET); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_sys_attr_data_len, uint16_t_enc); + SER_PUSH_COND(p_sys_attr_data, NULL); + SER_PUSH_uint32(&flags); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gatts_sys_attr_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint8_t * * const pp_sys_attr_data, + uint16_t * * const pp_sys_attr_data_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GATTS_SYS_ATTR_GET); + + SER_PULL_COND(pp_sys_attr_data_len, uint16_t_dec); + if (*pp_sys_attr_data_len) + { + SER_PULL_buf(pp_sys_attr_data, **pp_sys_attr_data_len, **pp_sys_attr_data_len); + } + + SER_RSP_DEC_END; +} + + +uint32_t ble_gatts_sys_attr_set_req_enc(uint16_t conn_handle, + uint8_t const * const p_sys_attr_data, + uint16_t sys_attr_data_len, + uint32_t flags, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTS_SYS_ATTR_SET); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_len16data(p_sys_attr_data, sys_attr_data_len); + SER_PUSH_uint32(&flags); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gatts_sys_attr_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + return ser_ble_cmd_rsp_dec(p_buf, packet_len, SD_BLE_GATTS_SYS_ATTR_SET, p_result_code); +} + + +uint32_t ble_gatts_value_get_req_enc(uint16_t conn_handle, + uint16_t handle, + ble_gatts_value_t const * const p_value, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTS_VALUE_GET); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_uint16(&handle); + + //Special case: skip the data. + SER_PUSH_COND(p_value, NULL); + if (p_value) + { + SER_PUSH_uint16(&p_value->offset); + SER_PUSH_uint16(&p_value->len); + SER_PUSH_COND(p_value->p_value, NULL); + } + + SER_REQ_ENC_END; +} + +uint32_t ble_gatts_value_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gatts_value_t * const p_value, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GATTS_VALUE_GET); + + SER_PULL_COND(&p_value, ble_gatts_value_t_dec); + + SER_RSP_DEC_END; +} + + +uint32_t ble_gatts_value_set_req_enc(uint16_t conn_handle, + uint16_t handle, + ble_gatts_value_t * p_value, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTS_VALUE_SET); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_uint16(&handle); + SER_PUSH_COND(p_value, ble_gatts_value_t_enc); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gatts_value_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gatts_value_t * const p_value, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GATTS_VALUE_SET); + + SER_PULL_COND(&p_value, ble_gatts_value_t_dec); + + SER_RSP_DEC_END; +} + +uint32_t ble_gatts_exchange_mtu_reply_req_enc(uint16_t conn_handle, + uint16_t server_rx_mtu, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTS_EXCHANGE_MTU_REPLY); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_uint16(&server_rx_mtu); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gatts_exchange_mtu_reply_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GATTS_EXCHANGE_MTU_REPLY); +} diff --git a/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gatts_app.h b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gatts_app.h new file mode 100644 index 000000000..19f1bb1ae --- /dev/null +++ b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gatts_app.h @@ -0,0 +1,659 @@ +/* Copyright (c) 2013 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is property of Nordic Semiconductor ASA. + * Terms and conditions of usage are described in detail in NORDIC + * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. + * + * Licensees are granted free, non-transferable use of the information. NO + * WARRANTY of ANY KIND is provided. This heading must NOT be removed from + * the file. + * + */ +#ifndef BLE_GATTS_APP_H__ +#define BLE_GATTS_APP_H__ + +/** + * @addtogroup ser_codecs Serialization codecs + * @ingroup ble_sdk_lib_serialization + */ + +/** + * @addtogroup ser_app_s130_codecs Application S132 codecs + * @ingroup ser_codecs + */ + +/**@file + * + * @defgroup ble_gatts_app GATTS Application command request encoders and command response decoders + * @{ + * @ingroup ser_app_s130_codecs + * + * @brief GATTS Application command request encoders and command response decoders. + */ +#include "ble_gatts.h" +#include "ble.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/**@brief Encodes @ref sd_ble_gatts_value_get command request. + * + * @sa @ref ble_gatts_value_get_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle. + * @param[in] handle Attribute handle. + * @param[in] p_value Pointer to attribute value information. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @note \p p_data_len and \p p_data will not be updated by the command + * request encoder. Updated values are set by @ref ble_gatts_value_get_rsp_dec. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gatts_value_get_req_enc(uint16_t conn_handle, + uint16_t handle, + ble_gatts_value_t const * const p_value, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gatts_value_get command. + * + * @sa @ref ble_gatts_value_get_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_value Pointer to structure where the attribute value will be stored. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Length of \p p_value is too small to hold decoded + * value from response. + */ +uint32_t ble_gatts_value_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gatts_value_t * const p_value, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gatts_hvx command request. + * + * @sa @ref ble_gatts_hvx_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_hvx_params Pointer to an HVx parameters structure to be encoded. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @note \p p_hvx_params will not be updated by the command + * request encoder. Updated values are set by @ref ble_gatts_hvx_rsp_dec. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gatts_hvx_req_enc(uint16_t conn_handle, + ble_gatts_hvx_params_t const * const p_hvx_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gatts_hvx command. + * + * @sa @ref ble_gatts_hvx_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * @param[out] pp_bytes_written Pointer to pointer to location where number of bytes is written. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gatts_hvx_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code, + uint16_t * * const pp_bytes_written); + +/**@brief Encodes @ref sd_ble_gatts_characteristic_add command request. + * + * @sa @ref ble_gatts_characteristic_add_rsp_dec for command response decoder. + * + * @param[in] service_handle Handle of the service where the characteristic is to be placed. + * If @ref BLE_GATT_HANDLE_INVALID is used, it will be placed + * sequentially. + * @param[in] p_char_md Pointer to a @ref ble_gatts_char_md_t structure, characteristic + * metadata. + * @param[in] p_attr_char_value Pointer to a @ref ble_gatts_attr_t structure, corresponding to + * the characteristic value. + * @param[in] p_handles Pointer to a @ref ble_gatts_char_handles_t structure, where the + * assigned handles will be stored. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @note \p p_handles will not be updated by the command + * request encoder. Updated values are set by @ref ble_gatts_characteristic_add_rsp_dec. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gatts_characteristic_add_req_enc + (uint16_t service_handle, + ble_gatts_char_md_t const * const p_char_md, + ble_gatts_attr_t const * const p_attr_char_value, + ble_gatts_char_handles_t const * const p_handles, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gatts_characteristic_add command. + * + * @sa @ref ble_gatts_characteristic_add_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] pp_handles Pointer to pointer to location where handles should be decoded. + * @param[out] p_result_code Pointer to command result code decode location. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gatts_characteristic_add_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint16_t * * const pp_handles, + uint32_t * const p_result_code); + + +/**@brief Encodes @ref sd_ble_gatts_service_add command request. + * + * @sa @ref ble_gatts_service_add_rsp_dec for command response decoder. + * + * @param[in] type Toggles between primary and secondary services, + * see @ref BLE_GATTS_SRVC_TYPES. + * @param[in] p_uuid Pointer to service UUID. + * @param[in] p_conn_handle Pointer to a 16-bit word where the assigned handle will be stored. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @note \p p_conn_handle will not be updated by the command + * request encoder. Updated values are set by @ref ble_gatts_service_add_rsp_dec. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gatts_service_add_req_enc(uint8_t type, + ble_uuid_t const * const p_uuid, + uint16_t const * const p_conn_handle, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gatts_service_add command. + * + * @sa @ref ble_gatts_service_add_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_conn_handle Connection handle. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gatts_service_add_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint16_t * const p_conn_handle, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gatts_sys_attr_set command request. + * + * @sa @ref ble_gatts_sys_attr_set_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_sys_attr_data Pointer to a buffer (at least \p sys_attr_data_len bytes long) + * containing the attribute value to write. + * @param[in] sys_attr_data_len Length (in bytes) of \p p_sys_attr_data. + * @param[in] flags Optional additional flags. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gatts_sys_attr_set_req_enc(uint16_t conn_handle, + uint8_t const * const p_sys_attr_data, + uint16_t sys_attr_data_len, + uint32_t flags, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gatts_sys_attr_set command. + * + * @sa @ref ble_gatts_sys_attr_set_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gatts_sys_attr_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gatts_value_set command request. + * + * @sa @ref ble_gatts_value_set_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle. + * @param[in] handle Attribute handle. + * @param[in] p_value Pointer to attribute value information. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gatts_value_set_req_enc(uint16_t conn_handle, + uint16_t handle, + ble_gatts_value_t * p_value, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gatts_value_set command. + * + * @sa @ref ble_gatts_value_set_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_value Pointer to attribute value information. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gatts_value_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gatts_value_t * const p_value, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gatts_sys_attr_get command request. + * + * @sa @ref ble_gatts_sys_attr_get_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] p_sys_attr_data Pointer to buffer where updated information about system + * attributes will be stored. Can be NULL to calculate required + * size. + * @param[in] p_sys_attr_data_len Size of p_sys_attr_data buffer if \p p_sys_attr_data is + * not NULL. + * @param[in] flags Additional optional flags. + * @param[in,out] p_buf Pointer to buffer where encoded data command will + * be returned. + * @param[in,out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @note \p p_sys_attr_data and \p p_sys_attr_data_len will not be updated by the command + * request encoder. Updated values are set by @ref ble_gatts_sys_attr_get_rsp_dec. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gatts_sys_attr_get_req_enc(uint16_t conn_handle, + uint8_t const * const p_sys_attr_data, + uint16_t const * const p_sys_attr_data_len, + uint32_t flags, + uint8_t * const p_buf, + uint32_t * p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gatts_sys_attr_get command. + * + * @sa @ref ble_gatts_sys_attr_get_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] pp_sys_attr_data Pointer to a buffer where updated information about system + * attributes will be stored. + * @param[in,out] pp_sys_attr_data_len \c in: Size (in bytes) of \p p_sys_attr_data buffer. + * \c out: Length of decoded contents of \p p_sys_attr_data. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Length of \p p_sys_attr_data is too small to hold decoded + * value from response. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gatts_sys_attr_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint8_t * * const pp_sys_attr_data, + uint16_t * * const pp_sys_attr_data_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gatts_descriptor_add command request. + * + * @sa @ref ble_gatts_descriptor_add_rsp_dec for command response decoder. + * + * @param[in] char_handle Handle of the characteristic where the description is to be placed. + * If @ref BLE_GATT_HANDLE_INVALID is used, it will be placed + * sequentially. + * @param[in] p_attr Pointer to a @ref ble_gatts_attr_t structure, characteristic + * metadata. + * @param[in] p_handle Pointer to a @ref ble_gatts_char_handles_t structure, where the + * assigned handles will be stored. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gatts_descriptor_add_req_enc(uint16_t char_handle, + ble_gatts_attr_t const * const p_attr, + uint16_t * const p_handle, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gatts_descriptor_add command. + * + * @sa @ref ble_gatts_descriptor_add_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_handle Pointer to bufer where descriptor handle will be + returned. + * @param[out] p_result_code Pointer to command result code decode location. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gatts_descriptor_add_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint16_t * const p_handle, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gatts_include_add command request. + * + * @sa @ref ble_gatts_include_add_rsp_dec for command response decoder. + * + * @param[in] service_handle Handle of the service where the included service is to be placed. + * @param[in] inc_srvc_handle Handle of the included service + * @param[in] p_include_handle Pointer to Pointer to a 16-bit word where the assigned handle will be stored. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gatts_include_add_req_enc(uint16_t service_handle, + uint16_t inc_srvc_handle, + uint16_t * const p_include_handle, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gatts_include_add command. + * + * @sa @ref ble_gatts_include_add_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_include_handle Pointer to a 16-bit word where the assigned handle will be stored. + * @param[out] p_result_code Pointer to command result code decode location. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gatts_include_add_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint16_t * const p_include_handle, + uint32_t * const p_result_code); + + +/**@brief Encodes @ref sd_ble_gatts_rw_authorize_reply command request. + * + * @sa @ref ble_gatts_rw_authorize_reply_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_reply_params Pointer to \ref ble_gatts_rw_authorize_reply_params_t + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_PARAM Encoding failure. Invalid param provided in p_reply_params. + */ +uint32_t ble_gatts_rw_authorize_reply_req_enc( + uint16_t conn_handle, + ble_gatts_rw_authorize_reply_params_t const * const + p_reply_params, + uint8_t * const + p_buf, + uint32_t * const + p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gatts_rw_authorize_reply command. + * + * @sa @ref ble_gatts_rw_authorize_reply_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gatts_rw_authorize_reply_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gatts_service_changed command request. + * + * @sa @ref ble_gatts_service_changed_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle. + * @param[in] start_handle Start of affected attribute handle range. + * @param[in] end_handle End of affected attribute handle range. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_PARAM Encoding failure. Invalid param provided in p_reply_params. + */ +uint32_t ble_gatts_service_changed_req_enc(uint16_t conn_handle, + uint16_t start_handle, + uint16_t end_handle, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gatts_service_changed command. + * + * @sa @ref ble_gatts_service_changed_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gatts_service_changed_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gatts_attr_get command request. + * + * @sa @ref ble_gatts_attr_get_rsp_dec for command response decoder. + * + * @param[in] handle See @ref sd_ble_gatts_attr_get. + * @param[in] p_uuid See @ref sd_ble_gatts_attr_get. + * @param[out] p_md See @ref sd_ble_gatts_attr_get. + * @param[in,out] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gatts_attr_get_req_enc(uint16_t handle, + ble_uuid_t * p_uuid, + ble_gatts_attr_md_t * p_md, + uint8_t * const p_buf, + uint32_t * p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gatts_attr_get command. + * + * @sa @ref ble_gatts_attr_get_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] pp_uuid Pointer to address where to put output data. + * @param[out] pp_md Pointer to address where to put output data. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gatts_attr_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_uuid_t ** pp_uuid, + ble_gatts_attr_md_t ** pp_md, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gatts_initial_user_handle_get command request. + * + * @sa @ref ble_gatts_initial_user_handle_get_rsp_dec for command response decoder. + * + * @param[out] p_handle See @ref sd_ble_gatts_initial_user_handle_get. + * @param[in,out] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gatts_initial_user_handle_get_req_enc(uint16_t * p_handle, + uint8_t * const p_buf, + uint32_t * p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gatts_initial_user_handle_get command. + * + * @sa @ref ble_gatts_initial_user_handle_get_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] pp_handle Pointer to address where to put output data. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gatts_initial_user_handle_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint16_t ** pp_handle, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gatts_exchange_mtu_reply command request. + * + * @sa @ref ble_gatts_exchange_mtu_reply_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle. + * @param[in] server_rx_mtu Server MTU Size. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_PARAM Encoding failure. Invalid param provided in p_reply_params. + */ +uint32_t ble_gatts_exchange_mtu_reply_req_enc(uint16_t conn_handle, + uint16_t server_rx_mtu, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gatts_exchange_mtu_reply command. + * + * @sa @ref ble_gatts_exchange_mtu_reply_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gatts_exchange_mtu_reply_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif //BLE_GATTS_APP_H__ + + diff --git a/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gatts_evt_app.c b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gatts_evt_app.c new file mode 100644 index 000000000..eafa7fe33 --- /dev/null +++ b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gatts_evt_app.c @@ -0,0 +1,148 @@ +/* Copyright (c) 2013 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is property of Nordic Semiconductor ASA. + * Terms and conditions of usage are described in detail in NORDIC + * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. + * + * Licensees are granted free, non-transferable use of the information. NO + * WARRANTY of ANY KIND is provided. This heading must NOT be removed from + * the file. + * + */ + +#include "ble_gatts_evt_app.h" +#include "ble_serialization.h" +#include "ble_gatts_struct_serialization.h" +#include "app_ble_user_mem.h" +#include "app_util.h" + +extern ser_ble_user_mem_t m_app_user_mem_table[]; + +uint32_t ble_gatts_evt_hvc_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTS_EVT_HVC, gatts, hvc); + + SER_PULL_uint16(&p_event->evt.gatts_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gatts_evt.params.hvc, + ble_gatts_evt_hvc_t_dec); + + SER_EVT_DEC_END; +} + +uint32_t ble_gatts_evt_rw_authorize_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTS_EVT_HVC, gatts, rw_authorize_request); + + SER_PULL_uint16(&p_event->evt.gatts_evt.conn_handle); + SER_PULL_FIELD_EXTENDED(&p_event->evt.gatts_evt.params.authorize_request, ble_gatts_evt_rw_authorize_request_t_dec); + + //Correct event length / memory sync. + if (p_event->evt.gatts_evt.params.authorize_request.type == BLE_GATTS_AUTHORIZE_TYPE_READ) + { + evt_struct_len = offsetof(ble_evt_t, evt.gatts_evt.params.authorize_request.request.read) + - offsetof(ble_evt_t, evt) + + sizeof(ble_gatts_evt_read_t); + } + else if ((p_event->evt.gatts_evt.params.authorize_request.type == BLE_GATTS_AUTHORIZE_TYPE_WRITE) && + ( (p_event->evt.gatts_evt.params.authorize_request.request.write.op == BLE_GATTS_OP_EXEC_WRITE_REQ_NOW) || + (p_event->evt.gatts_evt.params.authorize_request.request.write.op == BLE_GATTS_OP_PREP_WRITE_REQ))) + { + uint32_t conn_index; + if(app_ble_user_mem_context_find(p_event->evt.gatts_evt.conn_handle, &conn_index) != NRF_ERROR_NOT_FOUND) + { + SER_PULL_len16data(&m_app_user_mem_table[conn_index].mem_block.p_mem, &m_app_user_mem_table[conn_index].mem_block.len); + } + } + + SER_EVT_DEC_END; +} + + +uint32_t ble_gatts_evt_sc_confirm_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN_NO_STRUCT(BLE_GATTS_EVT_SC_CONFIRM, gatts); + SER_PULL_uint16(&p_event->evt.gatts_evt.conn_handle); + SER_EVT_DEC_END; +} + + +uint32_t ble_gatts_evt_sys_attr_missing_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTS_EVT_SYS_ATTR_MISSING, gatts, sys_attr_missing); + + SER_PULL_uint16(&p_event->evt.gatts_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gatts_evt.params.sys_attr_missing, + ble_gatts_evt_sys_attr_missing_t_dec); + + SER_EVT_DEC_END; +} + + +uint32_t ble_gatts_evt_timeout_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTS_EVT_TIMEOUT, gatts, timeout); + + SER_PULL_uint16(&p_event->evt.gatts_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gatts_evt.params.timeout, + ble_gatts_evt_timeout_t_dec); + + SER_EVT_DEC_END; +} + + + + +uint32_t ble_gatts_evt_write_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTS_EVT_WRITE, gatts, write); + + SER_PULL_uint16(&p_event->evt.gatts_evt.conn_handle); + SER_PULL_FIELD_EXTENDED(&p_event->evt.gatts_evt.params.write, ble_gatts_evt_write_t_dec); + + if(p_event != NULL) + { + if(p_event->evt.gatts_evt.params.write.op == BLE_GATTS_OP_EXEC_WRITE_REQ_NOW) + { + uint32_t conn_index; + if(app_ble_user_mem_context_find(p_event->evt.gatts_evt.conn_handle, &conn_index) != NRF_ERROR_NOT_FOUND) + { + SER_PULL_len16data(&m_app_user_mem_table[conn_index].mem_block.p_mem, &m_app_user_mem_table[conn_index].mem_block.len); + SER_ASSERT(err_code == NRF_SUCCESS, err_code); + } + } + } + + SER_EVT_DEC_END; +} + + +uint32_t ble_gatts_evt_exchange_mtu_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST, gatts, exchange_mtu_request); + + SER_PULL_uint16(&p_event->evt.gatts_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gatts_evt.params.exchange_mtu_request, ble_gatts_evt_exchange_mtu_request_t_dec); + + SER_EVT_DEC_END; +} diff --git a/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gatts_evt_app.h b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gatts_evt_app.h new file mode 100644 index 000000000..b81903e5f --- /dev/null +++ b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_gatts_evt_app.h @@ -0,0 +1,206 @@ +/* Copyright (c) 2014 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is property of Nordic Semiconductor ASA. + * Terms and conditions of usage are described in detail in NORDIC + * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. + * + * Licensees are granted free, non-transferable use of the information. NO + * WARRANTY of ANY KIND is provided. This heading must NOT be removed from + * the file. + * + */ +#ifndef BLE_GATTS_EVT_APP_H__ +#define BLE_GATTS_EVT_APP_H__ + +/** + * @addtogroup ser_codecs Serialization codecs + * @ingroup ble_sdk_lib_serialization + */ + +/** + * @addtogroup ser_app_s130_codecs Application S132 codecs + * @ingroup ser_codecs + */ + +/**@file + * + * @defgroup ble_gatts_evt_app GATTS Application event decoders + * @{ + * @ingroup ser_app_s130_codecs + * + * @brief GATTS Application event decoders. + */ +#include "ble.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Decodes ble_gatts_evt_hvc event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gatts_evt_hvc_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gatts_evt_rw_authorize_request event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gatts_evt_rw_authorize_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gatts_evt_sc_confirm event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gatts_evt_sc_confirm_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gatts_evt_sys_attr_missing event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gatts_evt_sys_attr_missing_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gatts_evt_timeout event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gatts_evt_timeout_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gatts_evt_write event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gatts_evt_write_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gatts_evt_exchange_mtu_request event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gatts_evt_exchange_mtu_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_l2cap_app.c b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_l2cap_app.c new file mode 100644 index 000000000..c81384544 --- /dev/null +++ b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_l2cap_app.c @@ -0,0 +1,119 @@ +/* Copyright (c) 2014 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is property of Nordic Semiconductor ASA. + * Terms and conditions of usage are described in detail in NORDIC + * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. + * + * Licensees are granted free, non-transferable use of the information. NO + * WARRANTY of ANY KIND is provided. This heading must NOT be removed from + * the file. + * + */ + +#include +#include "ble_l2cap_app.h" +#include "ble_serialization.h" +#include "ble_struct_serialization.h" +#include "ble_gap.h" +#include "app_util.h" +#include "cond_field_serialization.h" +#include + +uint32_t ble_l2cap_cid_register_req_enc(uint16_t cid, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + uint32_t index = 0; + uint32_t err_code = NRF_SUCCESS; + + SER_ASSERT_NOT_NULL(p_buf); + SER_ASSERT_NOT_NULL(p_buf_len); + + SER_ASSERT_LENGTH_LEQ(index + 3, *p_buf_len); + + p_buf[index++] = SD_BLE_L2CAP_CID_REGISTER; + err_code = uint16_t_enc(&cid, p_buf, *p_buf_len, &index); + SER_ASSERT(err_code == NRF_SUCCESS, err_code); + + *p_buf_len = index; + + return err_code; +} + +uint32_t ble_l2cap_cid_register_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + return ser_ble_cmd_rsp_dec(p_buf, packet_len, SD_BLE_L2CAP_CID_REGISTER, p_result_code); +} + +uint32_t ble_l2cap_cid_unregister_req_enc(uint16_t cid, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + uint32_t index = 0; + uint32_t err_code = NRF_SUCCESS; + + SER_ASSERT_NOT_NULL(p_buf); + SER_ASSERT_NOT_NULL(p_buf_len); + + SER_ASSERT_LENGTH_LEQ(index + 3, *p_buf_len); + + p_buf[index++] = SD_BLE_L2CAP_CID_UNREGISTER; + err_code = uint16_t_enc(&cid, p_buf, *p_buf_len, &index); + SER_ASSERT(err_code == NRF_SUCCESS, err_code); + + *p_buf_len = index; + + return err_code; +} + +uint32_t ble_l2cap_cid_unregister_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + return ser_ble_cmd_rsp_dec(p_buf, packet_len, SD_BLE_L2CAP_CID_UNREGISTER, p_result_code); +} + + +uint32_t ble_l2cap_tx_req_enc(uint16_t conn_handle, + ble_l2cap_header_t const * const p_l2cap_header, + uint8_t const * const p_data, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + uint32_t index = 0; + uint32_t err_code = NRF_SUCCESS; + + SER_ASSERT_NOT_NULL(p_buf); + SER_ASSERT_NOT_NULL(p_buf_len); + + SER_ASSERT_LENGTH_LEQ(1, *p_buf_len); + p_buf[index++] = SD_BLE_L2CAP_TX; + + err_code = uint16_t_enc(&conn_handle, p_buf, *p_buf_len, &index); + SER_ASSERT(err_code == NRF_SUCCESS, err_code); + + err_code = cond_field_enc(p_l2cap_header, p_buf, *p_buf_len, &index, ble_l2cap_header_t_enc); + SER_ASSERT(err_code == NRF_SUCCESS, err_code); + + if (p_l2cap_header != NULL) + { + err_code = buf_enc(p_data, p_l2cap_header->len, p_buf, *p_buf_len, &index); + } + else + { + err_code = buf_enc(NULL, 0, p_buf, *p_buf_len, &index); + } + + *p_buf_len = index; + + return err_code; +} + +uint32_t ble_l2cap_tx_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + return ser_ble_cmd_rsp_dec(p_buf, packet_len, SD_BLE_L2CAP_TX, p_result_code); +} diff --git a/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_l2cap_app.h b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_l2cap_app.h new file mode 100644 index 000000000..7b48b29f3 --- /dev/null +++ b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_l2cap_app.h @@ -0,0 +1,168 @@ +/* Copyright (c) 2014 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is confidential property of Nordic Semiconductor. The use, + * copying, transfer or disclosure of such information is prohibited except by express written + * agreement with Nordic Semiconductor. + * + */ + +/** + * @addtogroup ser_codecs Serialization codecs + * @ingroup ble_sdk_lib_serialization + */ + +/** + * @addtogroup ser_app_s130_codecs Application S132 codecs + * @ingroup ser_codecs + */ + +/**@file + * + * @defgroup ble_l2cap_app L2CAP Application command request encoders and command response decoders + * @{ + * @ingroup ser_app_s130_codecs + * + * @brief L2CAP Application command request encoders and command response decoders. + */ + +#ifndef BLE_L2CAP_APP_H__ +#define BLE_L2CAP_APP_H__ + +#include "ble.h" +#include "ble_types.h" +#include "ble_ranges.h" +#include "ble_err.h" +#include "ble_l2cap.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/**@brief Register a CID with L2CAP. + * + * @details This registers a higher protocol layer with the L2CAP multiplexer, and is required prior to all operations on the CID. + * + * @param[in] cid L2CAP CID. + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_l2cap_cid_register_req_enc(uint16_t cid, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes response to @ref sd_ble_l2cap_cid_register command. + * + * @sa @ref ble_l2cap_cid_register_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_l2cap_cid_register_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Unregister a CID with L2CAP. + * + * @details This unregisters a previously registered higher protocol layer with the L2CAP multiplexer. + * + * @param[in] cid L2CAP CID. + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_l2cap_cid_unregister_req_enc(uint16_t cid, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes response to @ref sd_ble_l2cap_cid_unregister command. + * + * @sa @ref ble_l2cap_cid_unregister_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_l2cap_cid_unregister_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Transmit an L2CAP packet. + * + * @note It is important to note that a call to this function will consume an application buffer, and will therefore + * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. + * See the documentation of @ref sd_ble_tx_packet_count_get for more details. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_l2cap_header Pointer to a packet header containing length and CID. + * @param[in] p_data Pointer to the data to be transmitted. + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @return @ref NRF_SUCCESS Successfully queued an L2CAP packet for transmission. + * @return @ref NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @return @ref NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, CIDs must be registered beforehand with @ref sd_ble_l2cap_cid_register. + * @return @ref NRF_ERROR_NOT_FOUND CID not found. + * @return @ref NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @return @ref NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, see @ref BLE_L2CAP_MTU_DEF. + */ +uint32_t ble_l2cap_tx_req_enc(uint16_t conn_handle, + ble_l2cap_header_t const * const p_l2cap_header, + uint8_t const * const p_data, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes response to @ref sd_ble_l2cap_tx command. + * + * @sa @ref ble_l2cap_tx_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_l2cap_tx_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + + + +#ifdef __cplusplus +} +#endif + +#endif //BLE_L2CAP_APP_H__ + +/** + @} + */ diff --git a/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_l2cap_evt_app.c b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_l2cap_evt_app.c new file mode 100644 index 000000000..71c5f0cf4 --- /dev/null +++ b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_l2cap_evt_app.c @@ -0,0 +1,30 @@ +/* Copyright (c) 2014 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is property of Nordic Semiconductor ASA. + * Terms and conditions of usage are described in detail in NORDIC + * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. + * + * Licensees are granted free, non-transferable use of the information. NO + * WARRANTY of ANY KIND is provided. This heading must NOT be removed from + * the file. + * + */ + +#include "ble_serialization.h" +#include "ble_struct_serialization.h" +#include "app_util.h" +#include "ble_l2cap_evt_app.h" +#include + +uint32_t ble_l2cap_evt_rx_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_L2CAP_EVT_RX, l2cap, rx); + + SER_PULL_uint16(&p_event->evt.l2cap_evt.conn_handle); + SER_PULL_FIELD_EXTENDED(&p_event->evt.l2cap_evt.params.rx, ble_l2cap_evt_rx_t_dec); + + SER_EVT_DEC_END; +} diff --git a/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_l2cap_evt_app.h b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_l2cap_evt_app.h new file mode 100644 index 000000000..e950a26ad --- /dev/null +++ b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/ble_l2cap_evt_app.h @@ -0,0 +1,68 @@ +/* Copyright (c) 2014 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is property of Nordic Semiconductor ASA. + * Terms and conditions of usage are described in detail in NORDIC + * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. + * + * Licensees are granted free, non-transferable use of the information. NO + * WARRANTY of ANY KIND is provided. This heading must NOT be removed from + * the file. + * + */ +#ifndef BLE_L2CAP_EVT_APP_H__ +#define BLE_L2CAP_EVT_APP_H__ + +/** + * @addtogroup ser_codecs Serialization codecs + * @ingroup ble_sdk_lib_serialization + */ + +/** + * @addtogroup ser_app_s130_codecs Application S132 codecs + * @ingroup ser_codecs + */ + +/**@file + * + * @defgroup ble_l2cap_evt_app L2CAP Application event decoders + * @{ + * @ingroup ser_app_s130_codecs + * + * @brief L2CAP Application event decoders. + */ +#include "ble.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Decodes ble_l2cap_evt_rx event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_l2cap_evt_rx_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/nrf_soc_app.h b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/nrf_soc_app.h new file mode 100644 index 000000000..c571eec96 --- /dev/null +++ b/src/sd_api_v3/sdk/components/serialization/application/codecs/s132/serializers/nrf_soc_app.h @@ -0,0 +1,130 @@ +/* Copyright (c) 2013 Nordic Semiconductor. All Rights Reserved. + * + * The information contained herein is property of Nordic Semiconductor ASA. + * Terms and conditions of usage are described in detail in NORDIC + * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. + * + * Licensees are granted free, non-transferable use of the information. NO + * WARRANTY of ANY KIND is provided. This heading must NOT be removed from + * the file. + * + */ + +/** + * @addtogroup ser_codecs Serialization codecs + * @ingroup ble_sdk_lib_serialization + */ + +/** + * @addtogroup ser_app_s130_codecs Application S132 codecs + * @ingroup ser_codecs + */ + +/**@file + * + * @defgroup soc_app SOC Application command request encoders and command response decoders + * @{ + * @ingroup ser_app_s130_codecs + * + * @brief SOC Application command request encoders and command response decoders. + */ + +#ifndef NRF_SOC_APP_H__ +#define NRF_SOC_APP_H__ + +#include +#include "nrf_soc.h" + +#ifdef __cplusplus +extern "C" { +#endif +/**@brief Encodes @ref sd_power_system_off command request. + * + * + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: size of p_buf buffer. \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t power_system_off_req_enc(uint8_t * const p_buf, uint32_t * const p_buf_len); + + +/**@brief Encodes @ref sd_temp_get command request. + * + * @sa @ref temp_get_rsp_dec for command response decoder. + * + * @param[in] p_temp Pointer to result of temperature measurement. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: size of p_buf buffer. \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t temp_get_req_enc(int32_t const * const p_temp, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_temp_get command. + * + * @sa @ref temp_get_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * @param[out] pp_temp Pointer to result of temperature measurement. + * + * @return NRF_SUCCESS Version information stored successfully. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t temp_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code, + int32_t * * const pp_temp); + +/**@brief Encodes @ref sd_ecb_block_encrypt command request. + * + * @sa @ref ecb_block_encrypt_rsp_dec for command response decoder. + * + * @param[in] p_ecb_data Pointer to ECB data. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: size of p_buf buffer. \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ecb_block_encrypt_req_enc(nrf_ecb_hal_data_t * p_ecb_data, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ecb_block_encrypt command. + * + * @sa @ref ecb_block_encrypt_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_ecb_data Pointer to ECB data. + * @param[out] p_result_code Command result code. + * + * @return NRF_SUCCESS Version information stored successfully. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ecb_block_encrypt_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + nrf_ecb_hal_data_t * * const p_ecb_data, + uint32_t * const p_result_code); +/** @} */ + + +#ifdef __cplusplus +} +#endif + +#endif // NRF_SOC_APP_H__ diff --git a/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble.h b/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble.h new file mode 100644 index 000000000..7b7a03bc1 --- /dev/null +++ b/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble.h @@ -0,0 +1,681 @@ +/* + * Copyright (c) Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in a processor manufactured by Nordic + * Semiconductor ASA, or in a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/** + @addtogroup BLE_COMMON BLE SoftDevice Common + @{ + @defgroup ble_api Events, type definitions and API calls + @{ + + @brief Module independent events, type definitions and API calls for the BLE SoftDevice. + + */ + +#ifndef BLE_H__ +#define BLE_H__ + +#include "ble_ranges.h" +#include "ble_types.h" +#include "ble_gap.h" +#include "ble_l2cap.h" +#include "ble_gatt.h" +#include "ble_gattc.h" +#include "ble_gatts.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @addtogroup BLE_COMMON_ENUMERATIONS Enumerations + * @{ */ + +/** + * @brief Common API SVC numbers. + */ +enum BLE_COMMON_SVCS +{ + SD_BLE_ENABLE = BLE_SVC_BASE, /**< Enable and initialize the BLE stack */ + SD_BLE_EVT_GET, /**< Get an event from the pending events queue. */ + SD_BLE_TX_PACKET_COUNT_GET, /**< Get the total number of available application transmission packets for a particular connection. */ + SD_BLE_UUID_VS_ADD, /**< Add a Vendor Specific UUID. */ + SD_BLE_UUID_DECODE, /**< Decode UUID bytes. */ + SD_BLE_UUID_ENCODE, /**< Encode UUID bytes. */ + SD_BLE_VERSION_GET, /**< Get the local version information (company id, Link Layer Version, Link Layer Subversion). */ + SD_BLE_USER_MEM_REPLY, /**< User Memory Reply. */ + SD_BLE_OPT_SET, /**< Set a BLE option. */ + SD_BLE_OPT_GET, /**< Get a BLE option. */ +}; + + /** + * @brief BLE Module Independent Event IDs. + */ +enum BLE_COMMON_EVTS +{ + BLE_EVT_TX_COMPLETE = BLE_EVT_BASE, /**< Transmission Complete. @ref ble_evt_tx_complete_t */ + BLE_EVT_USER_MEM_REQUEST, /**< User Memory request. @ref ble_evt_user_mem_request_t */ + BLE_EVT_USER_MEM_RELEASE, /**< User Memory release. @ref ble_evt_user_mem_release_t */ + BLE_EVT_DATA_LENGTH_CHANGED /**< Link layer PDU length changed. @ref ble_evt_data_length_changed_t. */ +}; + +/**@brief BLE connection bandwidth types. + * Bandwidth types supported by the SoftDevice. The bandwidth type dictates the maximum number of full length packets per connection interval. + */ +enum BLE_CONN_BWS +{ + BLE_CONN_BW_INVALID = 0, /**< Invalid connection bandwidth. */ + BLE_CONN_BW_LOW, /**< Low connection bandwidth. */ + BLE_CONN_BW_MID, /**< Medium connection bandwidth. */ + BLE_CONN_BW_HIGH /**< High connection bandwidth. */ +}; + +/**@brief Common Option IDs. + * IDs that uniquely identify a common option. + */ +enum BLE_COMMON_OPTS +{ + BLE_COMMON_OPT_CONN_BW = BLE_OPT_BASE, /**< Bandwidth configuration @ref ble_common_opt_conn_bw_t */ + BLE_COMMON_OPT_PA_LNA, /**< PA and LNA options */ + BLE_COMMON_OPT_CONN_EVT_EXT, /**< Extended connection events option */ +}; + +/** @} */ + +/** @addtogroup BLE_COMMON_DEFINES Defines + * @{ */ + +/** @brief Required pointer alignment for BLE Events. +*/ +#define BLE_EVTS_PTR_ALIGNMENT 4 + +/** @brief Maximum possible length for BLE Events. + * @note Value of @ref ble_gatt_enable_params_t::att_mtu shall be used as a parameter. + * If that value is set to 0 then @ref GATT_MTU_SIZE_DEFAULT must be used instead. +*/ +#define BLE_EVTS_LEN_MAX(ATT_MTU) (MAX( \ + sizeof(ble_evt_t), \ + MAX( \ + offsetof(ble_evt_t, evt.gattc_evt.params.rel_disc_rsp.includes) + ((ATT_MTU) - 2) / 6 * sizeof(ble_gattc_include_t), \ + offsetof(ble_evt_t, evt.gattc_evt.params.attr_info_disc_rsp.info.attr_info16) + ((ATT_MTU) - 2) / 4 * sizeof(ble_gattc_attr_info16_t) \ + ) \ +)) + +/** @defgroup BLE_USER_MEM_TYPES User Memory Types + * @{ */ +#define BLE_USER_MEM_TYPE_INVALID 0x00 /**< Invalid User Memory Types. */ +#define BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES 0x01 /**< User Memory for GATTS queued writes. */ +/** @} */ + +/** @defgroup BLE_UUID_VS_COUNTS Vendor Specific UUID counts + * @{ + */ +#define BLE_UUID_VS_COUNT_MIN 1 /**< Minimum VS UUID count. */ +#define BLE_UUID_VS_COUNT_DEFAULT 0 /**< Use the default VS UUID count (10 for this version of the SoftDevice). */ +/** @} */ + +/** @} */ + +/** @addtogroup BLE_COMMON_STRUCTURES Structures + * @{ */ + +/**@brief User Memory Block. */ +typedef struct +{ + uint8_t *p_mem; /**< Pointer to the start of the user memory block. */ + uint16_t len; /**< Length in bytes of the user memory block. */ +} ble_user_mem_block_t; + +/** + * @brief Event structure for @ref BLE_EVT_TX_COMPLETE. + */ +typedef struct +{ + uint8_t count; /**< Number of packets transmitted. */ +} ble_evt_tx_complete_t; + +/**@brief Event structure for @ref BLE_EVT_USER_MEM_REQUEST. */ +typedef struct +{ + uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ +} ble_evt_user_mem_request_t; + +/**@brief Event structure for @ref BLE_EVT_USER_MEM_RELEASE. */ +typedef struct +{ + uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ + ble_user_mem_block_t mem_block; /**< User memory block */ +} ble_evt_user_mem_release_t; + +/**@brief Event structure for @ref BLE_EVT_DATA_LENGTH_CHANGED. */ +typedef struct +{ + uint16_t max_tx_octets; /**< The maximum number of payload octets in a Link Layer Data Channel PDU that the local Controller will send. Range: 27-251 */ + uint16_t max_tx_time; /**< The maximum time (in microseconds) that the local Controller will take to send a Link Layer Data Channel PDU. Range: 328-2120 */ + uint16_t max_rx_octets; /**< The maximum number of payload octets in a Link Layer Data Channel PDU that the local controller expects to receive. Range: 27-251 */ + uint16_t max_rx_time; /**< The maximum time (in microseconds) that the local Controller expects to take to receive a Link Layer Data Channel PDU. Range: 328-2120 */ +} ble_evt_data_length_changed_t; + +/**@brief Event structure for events not associated with a specific function module. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which this event occurred. */ + union + { + ble_evt_tx_complete_t tx_complete; /**< Transmission Complete. */ + ble_evt_user_mem_request_t user_mem_request; /**< User Memory Request Event Parameters. */ + ble_evt_user_mem_release_t user_mem_release; /**< User Memory Release Event Parameters. */ + ble_evt_data_length_changed_t data_length_changed; /**< Data Length Changed Event Parameters. */ + } params; /**< Event parameter union. */ +} ble_common_evt_t; + +/**@brief BLE Event header. */ +typedef struct +{ + uint16_t evt_id; /**< Value from a BLE__EVT series. */ + uint16_t evt_len; /**< Length in octets including this header. */ +} ble_evt_hdr_t; + +/**@brief Common BLE Event type, wrapping the module specific event reports. */ +typedef struct +{ + ble_evt_hdr_t header; /**< Event header. */ + union + { + ble_common_evt_t common_evt; /**< Common Event, evt_id in BLE_EVT_* series. */ + ble_gap_evt_t gap_evt; /**< GAP originated event, evt_id in BLE_GAP_EVT_* series. */ + ble_l2cap_evt_t l2cap_evt; /**< L2CAP originated event, evt_id in BLE_L2CAP_EVT* series. */ + ble_gattc_evt_t gattc_evt; /**< GATT client originated event, evt_id in BLE_GATTC_EVT* series. */ + ble_gatts_evt_t gatts_evt; /**< GATT server originated event, evt_id in BLE_GATTS_EVT* series. */ + } evt; /**< Event union. */ +} ble_evt_t; + + +/** + * @brief Version Information. + */ +typedef struct +{ + uint8_t version_number; /**< Link Layer Version number for BT 4.1 spec is 7 (https://www.bluetooth.org/en-us/specification/assigned-numbers/link-layer). */ + uint16_t company_id; /**< Company ID, Nordic Semiconductor's company ID is 89 (0x0059) (https://www.bluetooth.org/apps/content/Default.aspx?doc_id=49708). */ + uint16_t subversion_number; /**< Link Layer Sub Version number, corresponds to the SoftDevice Config ID or Firmware ID (FWID). */ +} ble_version_t; + +/** + * @brief Configuration parameters for the PA and LNA. + */ +typedef struct +{ + uint8_t enable :1; /**< Enable toggling for this amplifier */ + uint8_t active_high :1; /**< Set the pin to be active high */ + uint8_t gpio_pin :6; /**< The GPIO pin to toggle for this amplifier */ +} ble_pa_lna_cfg_t; + +/** + * @brief PA & LNA GPIO toggle configuration + * + * This option configures the SoftDevice to toggle pins when the radio is active for use with a power amplifier and/or + * a low noise amplifier. + * + * Toggling the pins is achieved by using two PPI channels and a GPIOTE channel. The hardware channel IDs are provided + * by the application and should be regarded as reserved as long as any PA/LNA toggling is enabled. + * + * @note @ref sd_ble_opt_get is not supported for this option. + * @note This feature is only supported for nRF52, on nRF51 @ref NRF_ERROR_NOT_SUPPORTED will always be returned. + * @note Setting this option while the radio is in use (i.e. any of the roles are active) may have undefined consequences + * and must be avoided by the application. + */ +typedef struct +{ + ble_pa_lna_cfg_t pa_cfg; /**< Power Amplifier configuration */ + ble_pa_lna_cfg_t lna_cfg; /**< Low Noise Amplifier configuration */ + + uint8_t ppi_ch_id_set; /**< PPI channel used for radio pin setting */ + uint8_t ppi_ch_id_clr; /**< PPI channel used for radio pin clearing */ + uint8_t gpiote_ch_id; /**< GPIOTE channel used for radio pin toggling */ +} ble_common_opt_pa_lna_t; + +/** + * @brief BLE connection bandwidth configuration parameters + */ +typedef struct +{ + uint8_t conn_bw_tx; /**< Connection bandwidth configuration for transmission, see @ref BLE_CONN_BWS.*/ + uint8_t conn_bw_rx; /**< Connection bandwidth configuration for reception, see @ref BLE_CONN_BWS.*/ +} ble_conn_bw_t; + +/**@brief BLE connection specific bandwidth configuration parameters. + * + * This can be used with @ref sd_ble_opt_set to set the bandwidth configuration to be used when creating connections. + * + * Call @ref sd_ble_opt_set with this option prior to calling @ref sd_ble_gap_adv_start or @ref sd_ble_gap_connect. + * + * The bandwidth configurations set via @ref sd_ble_opt_set are maintained separately for central and peripheral + * connections. The given configurations are used for all future connections of the role indicated in this structure + * unless they are changed by subsequent @ref sd_ble_opt_set calls. + * + * @note When this option is not used, the SoftDevice will use the default options: + * - @ref BLE_CONN_BW_HIGH for @ref BLE_GAP_ROLE_PERIPH connections (both transmission and reception). + * - @ref BLE_CONN_BW_MID for @ref BLE_GAP_ROLE_CENTRAL connections (both transmisison and reception). + * This option allows the application to selectively override these defaults for each role. + * + * @note The global memory pool configuration can be set with the @ref ble_conn_bw_counts_t configuration parameter, which + * is provided to @ref sd_ble_enable. + * + * @note @ref sd_ble_opt_get is not supported for this option. + * @note Please refer to SoftDevice Specification for more information on bandwidth configuration. + * + * @mscs + * @mmsc{@ref BLE_COMMON_CONF_BW} + * @endmscs + * + * @retval ::NRF_SUCCESS Set successfully. + * @retval ::BLE_ERROR_INVALID_ROLE The role is invalid. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid bandwidth configuration parameters. + * @retval ::NRF_ERROR_NOT_SUPPORTED If the combination of role and bandwidth configuration is not supported. + */ +typedef struct +{ + uint8_t role; /**< BLE role of the connection, see @ref BLE_GAP_ROLES. */ + ble_conn_bw_t conn_bw; /**< Bandwidth configuration parameters. */ +} ble_common_opt_conn_bw_t; + +/** + * @brief Configuration of extended BLE connection events. + * + * When enabled the SoftDevice will dynamically extend the connection event when possible. + * + * The connection event length is controlled by the bandwidth configuration as set by @ref ble_common_opt_conn_bw_t. + * The connection event can be extended if there is time to send another packet pair before the start of the next connection interval, + * and if there are no conflicts with other BLE roles requesting radio time. + * + * @note @ref sd_ble_opt_get is not supported for this option. + */ +typedef struct +{ + uint8_t enable : 1; /**< Enable extended BLE connection events, disabled by default. */ +} ble_common_opt_conn_evt_ext_t; + +/**@brief Option structure for common options. */ +typedef union +{ + ble_common_opt_conn_bw_t conn_bw; /**< Parameters for the connection bandwidth option. */ + ble_common_opt_pa_lna_t pa_lna; /**< Parameters for controlling PA and LNA pin toggling. */ + ble_common_opt_conn_evt_ext_t conn_evt_ext; /**< Parameters for enabling extended connection events. */ +} ble_common_opt_t; + +/**@brief Common BLE Option type, wrapping the module specific options. */ +typedef union +{ + ble_common_opt_t common_opt; /**< COMMON options, opt_id in @ref BLE_COMMON_OPTS series. */ + ble_gap_opt_t gap_opt; /**< GAP option, opt_id in @ref BLE_GAP_OPTS series. */ +} ble_opt_t; + +/** + * @brief BLE bandwidth count parameters + * + * These parameters are used to configure the memory pools allocated within the SoftDevice for application packets + * (both transmission and reception) for all connections. + * + * @note The sum of all three counts must add up to the sum of @ref ble_gap_enable_params_t::central_conn_count and + * @ref ble_gap_enable_params_t::periph_conn_count in @ref ble_gap_enable_params_t. + */ +typedef struct { + uint8_t high_count; /**< Total number of high bandwidth TX or RX memory pools available to the application at runtime for all active connections. */ + uint8_t mid_count; /**< Total number of medium bandwidth TX or RX memory pools available to the application at runtime for all active connections. */ + uint8_t low_count; /**< Total number of low bandwidth TX or RX memory pools available to the application at runtime for all active connections. */ +} ble_conn_bw_count_t; + +/** + * @brief BLE bandwidth global memory pool configuration parameters + * + * These configuration parameters are used to set the amount of memory dedicated to application packets for + * all connections. The application should specify the most demanding configuration for the intended use. + * + * Please refer to the SoftDevice Specification for more information on bandwidth configuration. + * + * @note Each connection created at runtime requires both a TX and an RX memory pool. By the use of these configuration + * parameters, the application can decide the size and total number of the global memory pools that will be later + * available for connection creation. + * + * @mscs + * @mmsc{@ref BLE_COMMON_CONF_BW} + * @endmscs + * + */ +typedef struct { + ble_conn_bw_count_t tx_counts; /**< Global memory pool configuration for transmission.*/ + ble_conn_bw_count_t rx_counts; /**< Global memory pool configuration for reception.*/ +} ble_conn_bw_counts_t; + +/** + * @brief BLE Common Initialization parameters. + * + * @note If @ref p_conn_bw_counts is NULL the SoftDevice will assume default bandwidth configuration for all connections. + * To fit a custom bandwidth configuration requirement, the application developer may have to specify a custom memory + * pool configuration here. See @ref ble_common_opt_conn_bw_t for bandwidth configuration of individual connections. + * Please refer to the SoftDevice Specification for more information on bandwidth configuration. + */ +typedef struct +{ + uint16_t vs_uuid_count; /**< Maximum number of 128-bit, Vendor Specific UUID bases to allocate. */ + ble_conn_bw_counts_t *p_conn_bw_counts; /**< Bandwidth configuration parameters or NULL for defaults. */ +} ble_common_enable_params_t; + +/** + * @brief BLE Initialization parameters. + */ +typedef struct +{ + ble_common_enable_params_t common_enable_params; /**< Common init parameters @ref ble_common_enable_params_t. */ + ble_gap_enable_params_t gap_enable_params; /**< GAP init parameters @ref ble_gap_enable_params_t. */ + ble_gatt_enable_params_t gatt_enable_params; /**< GATT init parameters @ref ble_gatt_enable_params_t. */ + ble_gatts_enable_params_t gatts_enable_params; /**< GATTS init parameters @ref ble_gatts_enable_params_t. */ +} ble_enable_params_t; + +/** @} */ + +/** @addtogroup BLE_COMMON_FUNCTIONS Functions + * @{ */ + +/**@brief Enable the BLE stack + * + * @param[in, out] p_ble_enable_params Pointer to ble_enable_params_t + * @param[in, out] p_app_ram_base Pointer to a variable containing the start address of the application RAM region + * (APP_RAM_BASE). On return, this will contain the minimum start address of the application RAM region required by the + * SoftDevice for this configuration. Calling @ref sd_ble_enable() with *p_app_ram_base set to 0 can be used during + * development to find out how much memory a specific configuration will need. + * + * @note The memory requirement for a specific configuration will not increase between SoftDevices with the same major + * version number. + * + * @note At runtime the IC's RAM is split into 2 regions: The SoftDevice RAM region is located between 0x20000000 and + * APP_RAM_BASE-1 and the application's RAM region is located between APP_RAM_BASE and the start of the call stack. + * + * @details This call initializes the BLE stack, no other BLE related function can be called before this one. + * + * @mscs + * @mmsc{@ref BLE_COMMON_ENABLE} + * @endmscs + * + * @retval ::NRF_SUCCESS The BLE stack has been initialized successfully. + * @retval ::NRF_ERROR_INVALID_STATE The BLE stack had already been initialized and cannot be reinitialized. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. + * @retval ::NRF_ERROR_INVALID_LENGTH One or more of the following is true: + * - The specified Attribute Table size is too small. + * The minimum acceptable size is defined by @ref BLE_GATTS_ATTR_TAB_SIZE_MIN. + * - The specified Attribute Table size is not a multiple of 4. + * - The device name length is invalid (must be between 0 and @ref BLE_GAP_DEVNAME_MAX_LEN). + * - The device name length is too long for the given Attribute Table. + * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: + * - Incorrectly configured VS UUID count. + * - Invalid connection count parameters. + * - Invalid device name location (vloc). + * - Invalid device name security mode. + * - Invalid maximum ATT_MTU size, see @ref ble_gatt_enable_params_t::att_mtu. + * @retval ::NRF_ERROR_NOT_SUPPORTED Device name security mode is not supported. + * @retval ::NRF_ERROR_NO_MEM The amount of memory assigned to the SoftDevice by *p_app_ram_base is not + * large enough to fit this configuration's memory requirement. Check *p_app_ram_base + * and set the start address of the application RAM region accordingly. + * @retval ::NRF_ERROR_CONN_COUNT The requested number of connections exceeds the maximum supported by the SoftDevice. + * Please refer to the SoftDevice Specification for more information on role configuration. + */ +SVCALL(SD_BLE_ENABLE, uint32_t, sd_ble_enable(adapter_t *adapter, ble_enable_params_t * p_ble_enable_params, uint32_t * p_app_ram_base)); + +/**@brief Get an event from the pending events queue. + * + * @param[out] p_dest Pointer to buffer to be filled in with an event, or NULL to retrieve the event length. + * This buffer must be aligned to the extend defined by @ref BLE_EVTS_PTR_ALIGNMENT. + * @param[in, out] p_len Pointer the length of the buffer, on return it is filled with the event length. + * + * @details This call allows the application to pull a BLE event from the BLE stack. The application is signaled that + * an event is available from the BLE stack by the triggering of the SD_EVT_IRQn interrupt. + * The application is free to choose whether to call this function from thread mode (main context) or directly from the + * Interrupt Service Routine that maps to SD_EVT_IRQn. In any case however, and because the BLE stack runs at a higher + * priority than the application, this function should be called in a loop (until @ref NRF_ERROR_NOT_FOUND is returned) + * every time SD_EVT_IRQn is raised to ensure that all available events are pulled from the BLE stack. Failure to do so + * could potentially leave events in the internal queue without the application being aware of this fact. Sizing the + * p_dest buffer is equally important, since the application needs to provide all the memory necessary for the event to + * be copied into application memory. If the buffer provided is not large enough to fit the entire contents of the event, + * @ref NRF_ERROR_DATA_SIZE will be returned and the application can then call again with a larger buffer size. + * The maximum possible event length is defined by @ref BLE_EVTS_LEN_MAX. The application may also "peek" the event length + * by providing p_dest as a NULL pointer and inspecting the value of *p_len upon return: + * + * \code + * uint16_t len; + * errcode = sd_ble_evt_get(NULL, &len); + * \endcode + * + * @mscs + * @mmsc{@ref BLE_COMMON_IRQ_EVT_MSC} + * @mmsc{@ref BLE_COMMON_THREAD_EVT_MSC} + * @endmscs + * + * @retval ::NRF_SUCCESS Event pulled and stored into the supplied buffer. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. + * @retval ::NRF_ERROR_NOT_FOUND No events ready to be pulled. + * @retval ::NRF_ERROR_DATA_SIZE Event ready but could not fit into the supplied buffer. + */ +SVCALL(SD_BLE_EVT_GET, uint32_t, sd_ble_evt_get(adapter_t *adapter, uint8_t *p_dest, uint16_t *p_len)); + + +/**@brief Get the total number of available guaranteed application transmission packets for a particular connection. + * + * @details This call allows the application to obtain the total number of guaranteed application transmission packets + * available for a connection. Please note that this does not return the number of free packets, but rather the total + * amount of them for that particular connection. The application has two options to handle transmitting application packets: + * - Use a simple arithmetic calculation: after connection creation time the application should use this function to + * find out the total amount of guaranteed packets available to it and store it in a variable. + * Every time a packet is successfully queued for a transmission on this connection using any of the exposed functions in + * this BLE API, the application should decrement that variable. Conversely, whenever a @ref BLE_EVT_TX_COMPLETE event + * with the conn_handle matching the particular connection is received by the application, it should retrieve the count + * field in such event and add that number to the same variable storing the number of available guaranteed packets. This + * mechanism allows the application to be aware at any time of the number of guaranteed application packets available for + * each of the active connections, and therefore it can know with certainty whether it is possible to send more data or + * it has to wait for a @ref BLE_EVT_TX_COMPLETE event before it proceeds. + * The application can still pursue transmissions when the number of guaranteed application packets available is smaller + * than or equal to zero, but successful queuing of the tranmsission is not guaranteed. + * - Choose to simply not keep track of available packets at all, and instead handle the @ref BLE_ERROR_NO_TX_PACKETS error + * by queueing the packet to be transmitted and try again as soon as a @ref BLE_EVT_TX_COMPLETE event arrives. + * + * The API functions that may consume an application packet depending on the parameters supplied to them can be found below: + * - @ref sd_ble_gattc_write (write without response only) + * - @ref sd_ble_gatts_hvx (notifications only) + * - @ref sd_ble_l2cap_tx (all packets) + * + * @param[in] conn_handle Connection handle. + * @param[out] p_count Pointer to a uint8_t which will contain the number of application transmission packets upon + * successful return. + * @mscs + * @mmsc{@ref BLE_COMMON_APP_BUFF_MSC} + * @endmscs + * + * @retval ::NRF_SUCCESS Number of application transmission packets retrieved successfully. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_TX_PACKET_COUNT_GET, uint32_t, sd_ble_tx_packet_count_get(adapter_t *adapter, uint16_t conn_handle, uint8_t *p_count)); + + +/**@brief Add a Vendor Specific base UUID. + * + * @details This call enables the application to add a vendor specific base UUID to the BLE stack's table, for later + * use with all other modules and APIs. This then allows the application to use the shorter, 24-bit @ref ble_uuid_t + * format when dealing with both 16-bit and 128-bit UUIDs without having to check for lengths and having split code + * paths. This is accomplished by extending the grouping mechanism that the Bluetooth SIG standard base UUID uses + * for all other 128-bit UUIDs. The type field in the @ref ble_uuid_t structure is an index (relative to + * @ref BLE_UUID_TYPE_VENDOR_BEGIN) to the table populated by multiple calls to this function, and the uuid field + * in the same structure contains the 2 bytes at indices 12 and 13. The number of possible 128-bit UUIDs available to + * the application is therefore the number of Vendor Specific UUIDs added with the help of this function times 65536, + * although restricted to modifying bytes 12 and 13 for each of the entries in the supplied array. + * + * @note Bytes 12 and 13 of the provided UUID will not be used internally, since those are always replaced by + * the 16-bit uuid field in @ref ble_uuid_t. + * + * @note If a UUID is already present in the BLE stack's internal table, the corresponding index will be returned in + * p_uuid_type along with an NRF_SUCCESS error code. + * + * @param[in] p_vs_uuid Pointer to a 16-octet (128-bit) little endian Vendor Specific UUID disregarding + * bytes 12 and 13. + * @param[out] p_uuid_type Pointer to a uint8_t where the type field in @ref ble_uuid_t corresponding to this UUID will be stored. + * + * @retval ::NRF_SUCCESS Successfully added the Vendor Specific UUID. + * @retval ::NRF_ERROR_INVALID_ADDR If p_vs_uuid or p_uuid_type is NULL or invalid. + * @retval ::NRF_ERROR_NO_MEM If there are no more free slots for VS UUIDs. + */ +SVCALL(SD_BLE_UUID_VS_ADD, uint32_t, sd_ble_uuid_vs_add(adapter_t *adapter, ble_uuid128_t const *p_vs_uuid, uint8_t *p_uuid_type)); + + +/** @brief Decode little endian raw UUID bytes (16-bit or 128-bit) into a 24 bit @ref ble_uuid_t structure. + * + * @details The raw UUID bytes excluding bytes 12 and 13 (i.e. bytes 0-11 and 14-15) of p_uuid_le are compared + * to the corresponding ones in each entry of the table of vendor specific UUIDs populated with @ref sd_ble_uuid_vs_add + * to look for a match. If there is such a match, bytes 12 and 13 are returned as p_uuid->uuid and the index + * relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN as p_uuid->type. + * + * @note If the UUID length supplied is 2, then the type set by this call will always be @ref BLE_UUID_TYPE_BLE. + * + * @param[in] uuid_le_len Length in bytes of the buffer pointed to by p_uuid_le (must be 2 or 16 bytes). + * @param[in] p_uuid_le Pointer pointing to little endian raw UUID bytes. + * @param[out] p_uuid Pointer to a @ref ble_uuid_t structure to be filled in. + * + * @retval ::NRF_SUCCESS Successfully decoded into the @ref ble_uuid_t structure. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_LENGTH Invalid UUID length. + * @retval ::NRF_ERROR_NOT_FOUND For a 128-bit UUID, no match in the populated table of UUIDs. + */ +SVCALL(SD_BLE_UUID_DECODE, uint32_t, sd_ble_uuid_decode(adapter_t *adapter, uint8_t uuid_le_len, uint8_t const *p_uuid_le, ble_uuid_t *p_uuid)); + + +/** @brief Encode a @ref ble_uuid_t structure into little endian raw UUID bytes (16-bit or 128-bit). + * + * @note The pointer to the destination buffer p_uuid_le may be NULL, in which case only the validity and size of p_uuid is computed. + * + * @param[in] p_uuid Pointer to a @ref ble_uuid_t structure that will be encoded into bytes. + * @param[out] p_uuid_le_len Pointer to a uint8_t that will be filled with the encoded length (2 or 16 bytes). + * @param[out] p_uuid_le Pointer to a buffer where the little endian raw UUID bytes (2 or 16) will be stored. + * + * @retval ::NRF_SUCCESS Successfully encoded into the buffer. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid UUID type. + */ +SVCALL(SD_BLE_UUID_ENCODE, uint32_t, sd_ble_uuid_encode(adapter_t *adapter, ble_uuid_t const *p_uuid, uint8_t *p_uuid_le_len, uint8_t *p_uuid_le)); + + +/**@brief Get Version Information. + * + * @details This call allows the application to get the BLE stack version information. + * + * @param[out] p_version Pointer to a ble_version_t structure to be filled in. + * + * @retval ::NRF_SUCCESS Version information stored successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_BUSY The BLE stack is busy (typically doing a locally-initiated disconnection procedure). + */ +SVCALL(SD_BLE_VERSION_GET, uint32_t, sd_ble_version_get(adapter_t *adapter, ble_version_t *p_version)); + + +/**@brief Provide a user memory block. + * + * @note This call can only be used as a response to a @ref BLE_EVT_USER_MEM_REQUEST event issued to the application. + * + * @param[in] conn_handle Connection handle. + * @param[in,out] p_block Pointer to a user memory block structure. + * + * @mscs + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_PEER_CANCEL_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_NOAUTH_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} + * @endmscs + * + * @retval ::NRF_SUCCESS Successfully queued a response to the peer. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection state or no execute write request pending. + * @retval ::NRF_ERROR_BUSY The BLE stack is busy. Retry at later time. + */ +SVCALL(SD_BLE_USER_MEM_REPLY, uint32_t, sd_ble_user_mem_reply(adapter_t *adapter, uint16_t conn_handle, ble_user_mem_block_t const *p_block)); + +/**@brief Set a BLE option. + * + * @details This call allows the application to set the value of an option. + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_BONDING_STATIC_PK_MSC} + * @mmsc{@ref BLE_COMMON_CONF_BW} + * @endmscs + * + * @param[in] opt_id Option ID, see @ref BLE_COMMON_OPTS and @ref BLE_GAP_OPTS. + * @param[in] p_opt Pointer to a ble_opt_t structure containing the option value. + * + * @retval ::NRF_SUCCESS Option set successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. + * @retval ::NRF_ERROR_INVALID_STATE Unable to set the parameter at this time. + * @retval ::NRF_ERROR_BUSY The BLE stack is busy or the previous procedure has not completed. + */ +SVCALL(SD_BLE_OPT_SET, uint32_t, sd_ble_opt_set(adapter_t *adapter, uint32_t opt_id, ble_opt_t const *p_opt)); + + +/**@brief Get a BLE option. + * + * @details This call allows the application to retrieve the value of an option. + * + * @param[in] opt_id Option ID, see @ref BLE_COMMON_OPTS and @ref BLE_GAP_OPTS. + * @param[out] p_opt Pointer to a ble_opt_t structure to be filled in. + * + * @retval ::NRF_SUCCESS Option retrieved successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. + * @retval ::NRF_ERROR_INVALID_STATE Unable to retrieve the parameter at this time. + * @retval ::NRF_ERROR_BUSY The BLE stack is busy or the previous procedure has not completed. + * @retval ::NRF_ERROR_NOT_SUPPORTED This option is not supported. + * + */ +SVCALL(SD_BLE_OPT_GET, uint32_t, sd_ble_opt_get(adapter_t *adapter, uint32_t opt_id, ble_opt_t *p_opt)); + +/** @} */ +#ifdef __cplusplus +} +#endif +#endif /* BLE_H__ */ + +/** + @} + @} +*/ diff --git a/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_err.h b/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_err.h new file mode 100644 index 000000000..233226790 --- /dev/null +++ b/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_err.h @@ -0,0 +1,90 @@ +/* + * Copyright (c) Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in a processor manufactured by Nordic + * Semiconductor ASA, or in a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/** + @addtogroup BLE_COMMON + @{ + @addtogroup nrf_error + @{ + @ingroup BLE_COMMON + @} + + @defgroup ble_err General error codes + @{ + + @brief General error code definitions for the BLE API. + + @ingroup BLE_COMMON +*/ +#ifndef NRF_BLE_ERR_H__ +#define NRF_BLE_ERR_H__ + +#include "nrf_error.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* @defgroup BLE_ERRORS Error Codes + * @{ */ +#define BLE_ERROR_NOT_ENABLED (NRF_ERROR_STK_BASE_NUM+0x001) /**< @ref sd_ble_enable has not been called. */ +#define BLE_ERROR_INVALID_CONN_HANDLE (NRF_ERROR_STK_BASE_NUM+0x002) /**< Invalid connection handle. */ +#define BLE_ERROR_INVALID_ATTR_HANDLE (NRF_ERROR_STK_BASE_NUM+0x003) /**< Invalid attribute handle. */ +#define BLE_ERROR_NO_TX_PACKETS (NRF_ERROR_STK_BASE_NUM+0x004) /**< Not enough application packets available on this connection. */ +#define BLE_ERROR_INVALID_ROLE (NRF_ERROR_STK_BASE_NUM+0x005) /**< Invalid role. */ +/** @} */ + + +/** @defgroup BLE_ERROR_SUBRANGES Module specific error code subranges + * @brief Assignment of subranges for module specific error codes. + * @note For specific error codes, see ble_.h or ble_error_.h. + * @{ */ +#define NRF_L2CAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x100) /**< L2CAP specific errors. */ +#define NRF_GAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x200) /**< GAP specific errors. */ +#define NRF_GATTC_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x300) /**< GATT client specific errors. */ +#define NRF_GATTS_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x400) /**< GATT server specific errors. */ +/** @} */ + +#ifdef __cplusplus +} +#endif +#endif + + +/** + @} + @} +*/ diff --git a/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_gap.h b/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_gap.h new file mode 100644 index 000000000..e366a8d5c --- /dev/null +++ b/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_gap.h @@ -0,0 +1,1917 @@ +/* + * Copyright (c) Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in a processor manufactured by Nordic + * Semiconductor ASA, or in a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/** + @addtogroup BLE_GAP Generic Access Profile (GAP) + @{ + @brief Definitions and prototypes for the GAP interface. + */ + +#ifndef BLE_GAP_H__ +#define BLE_GAP_H__ + +#include "ble_types.h" +#include "ble_ranges.h" +#include "nrf_svc.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/**@addtogroup BLE_GAP_ENUMERATIONS Enumerations + * @{ */ + +/**@brief GAP API SVC numbers. + */ +enum BLE_GAP_SVCS +{ + SD_BLE_GAP_ADDR_SET = BLE_GAP_SVC_BASE, /**< Set own Bluetooth Address. */ + SD_BLE_GAP_ADDR_GET, /**< Get own Bluetooth Address. */ + SD_BLE_GAP_WHITELIST_SET, /**< Set active whitelist. */ + SD_BLE_GAP_DEVICE_IDENTITIES_SET, /**< Set device identity list. */ + SD_BLE_GAP_PRIVACY_SET, /**< Set Privacy settings*/ + SD_BLE_GAP_PRIVACY_GET, /**< Get Privacy settings*/ + SD_BLE_GAP_ADV_DATA_SET, /**< Set Advertising Data. */ + SD_BLE_GAP_ADV_START, /**< Start Advertising. */ + SD_BLE_GAP_ADV_STOP, /**< Stop Advertising. */ + SD_BLE_GAP_CONN_PARAM_UPDATE, /**< Connection Parameter Update. */ + SD_BLE_GAP_DISCONNECT, /**< Disconnect. */ + SD_BLE_GAP_TX_POWER_SET, /**< Set TX Power. */ + SD_BLE_GAP_APPEARANCE_SET, /**< Set Appearance. */ + SD_BLE_GAP_APPEARANCE_GET, /**< Get Appearance. */ + SD_BLE_GAP_PPCP_SET, /**< Set PPCP. */ + SD_BLE_GAP_PPCP_GET, /**< Get PPCP. */ + SD_BLE_GAP_DEVICE_NAME_SET, /**< Set Device Name. */ + SD_BLE_GAP_DEVICE_NAME_GET, /**< Get Device Name. */ + SD_BLE_GAP_AUTHENTICATE, /**< Initiate Pairing/Bonding. */ + SD_BLE_GAP_SEC_PARAMS_REPLY, /**< Reply with Security Parameters. */ + SD_BLE_GAP_AUTH_KEY_REPLY, /**< Reply with an authentication key. */ + SD_BLE_GAP_LESC_DHKEY_REPLY, /**< Reply with an LE Secure Connections DHKey. */ + SD_BLE_GAP_KEYPRESS_NOTIFY, /**< Notify of a keypress during an authentication procedure. */ + SD_BLE_GAP_LESC_OOB_DATA_GET, /**< Get the local LE Secure Connections OOB data. */ + SD_BLE_GAP_LESC_OOB_DATA_SET, /**< Set the remote LE Secure Connections OOB data. */ + SD_BLE_GAP_ENCRYPT, /**< Initiate encryption procedure. */ + SD_BLE_GAP_SEC_INFO_REPLY, /**< Reply with Security Information. */ + SD_BLE_GAP_CONN_SEC_GET, /**< Obtain connection security level. */ + SD_BLE_GAP_RSSI_START, /**< Start reporting of changes in RSSI. */ + SD_BLE_GAP_RSSI_STOP, /**< Stop reporting of changes in RSSI. */ + SD_BLE_GAP_SCAN_START, /**< Start Scanning. */ + SD_BLE_GAP_SCAN_STOP, /**< Stop Scanning. */ + SD_BLE_GAP_CONNECT, /**< Connect. */ + SD_BLE_GAP_CONNECT_CANCEL, /**< Cancel ongoing connection procedure. */ + SD_BLE_GAP_RSSI_GET, /**< Get the last RSSI sample. */ +}; + +/**@brief GAP Event IDs. + * IDs that uniquely identify an event coming from the stack to the application. + */ +enum BLE_GAP_EVTS +{ + BLE_GAP_EVT_CONNECTED = BLE_GAP_EVT_BASE, /**< Connection established. \n See @ref ble_gap_evt_connected_t. */ + BLE_GAP_EVT_DISCONNECTED, /**< Disconnected from peer. \n See @ref ble_gap_evt_disconnected_t. */ + BLE_GAP_EVT_CONN_PARAM_UPDATE, /**< Connection Parameters updated. \n See @ref ble_gap_evt_conn_param_update_t. */ + BLE_GAP_EVT_SEC_PARAMS_REQUEST, /**< Request to provide security parameters. \n Reply with @ref sd_ble_gap_sec_params_reply. \n See @ref ble_gap_evt_sec_params_request_t. */ + BLE_GAP_EVT_SEC_INFO_REQUEST, /**< Request to provide security information. \n Reply with @ref sd_ble_gap_sec_info_reply. \n See @ref ble_gap_evt_sec_info_request_t. */ + BLE_GAP_EVT_PASSKEY_DISPLAY, /**< Request to display a passkey to the user. \n In LESC Numeric Comparison, reply with @ref sd_ble_gap_auth_key_reply. \n See @ref ble_gap_evt_passkey_display_t. */ + BLE_GAP_EVT_KEY_PRESSED, /**< Notification of a keypress on the remote device.\n See @ref ble_gap_evt_key_pressed_t */ + BLE_GAP_EVT_AUTH_KEY_REQUEST, /**< Request to provide an authentication key. \n Reply with @ref sd_ble_gap_auth_key_reply. \n See @ref ble_gap_evt_auth_key_request_t. */ + BLE_GAP_EVT_LESC_DHKEY_REQUEST, /**< Request to calculate an LE Secure Connections DHKey. \n Reply with @ref sd_ble_gap_lesc_dhkey_reply. \n See @ref ble_gap_evt_lesc_dhkey_request_t */ + BLE_GAP_EVT_AUTH_STATUS, /**< Authentication procedure completed with status. \n See @ref ble_gap_evt_auth_status_t. */ + BLE_GAP_EVT_CONN_SEC_UPDATE, /**< Connection security updated. \n See @ref ble_gap_evt_conn_sec_update_t. */ + BLE_GAP_EVT_TIMEOUT, /**< Timeout expired. \n See @ref ble_gap_evt_timeout_t. */ + BLE_GAP_EVT_RSSI_CHANGED, /**< RSSI report. \n See @ref ble_gap_evt_rssi_changed_t. */ + BLE_GAP_EVT_ADV_REPORT, /**< Advertising report. \n See @ref ble_gap_evt_adv_report_t. */ + BLE_GAP_EVT_SEC_REQUEST, /**< Security Request. \n See @ref ble_gap_evt_sec_request_t. */ + BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST, /**< Connection Parameter Update Request. \n Reply with @ref sd_ble_gap_conn_param_update. \n See @ref ble_gap_evt_conn_param_update_request_t. */ + BLE_GAP_EVT_SCAN_REQ_REPORT, /**< Scan request report. \n See @ref ble_gap_evt_scan_req_report_t. */ +}; + +/**@brief GAP Option IDs. + * IDs that uniquely identify a GAP option. + */ +enum BLE_GAP_OPTS +{ + BLE_GAP_OPT_CH_MAP = BLE_GAP_OPT_BASE, /**< Channel Map. @ref ble_gap_opt_ch_map_t */ + BLE_GAP_OPT_LOCAL_CONN_LATENCY, /**< Local connection latency. @ref ble_gap_opt_local_conn_latency_t */ + BLE_GAP_OPT_PASSKEY, /**< Set passkey. @ref ble_gap_opt_passkey_t */ + BLE_GAP_OPT_SCAN_REQ_REPORT, /**< Scan request report. @ref ble_gap_opt_scan_req_report_t */ + BLE_GAP_OPT_COMPAT_MODE, /**< Compatibility mode. @ref ble_gap_opt_compat_mode_t */ + BLE_GAP_OPT_AUTH_PAYLOAD_TIMEOUT, /**< Set Authenticated payload timeout. @ref ble_gap_opt_auth_payload_timeout_t */ + BLE_GAP_OPT_EXT_LEN, /**< Extended length packets. @ref ble_gap_opt_ext_len_t */ +}; + +/** @} */ + +/**@addtogroup BLE_GAP_DEFINES Defines + * @{ */ + +/**@defgroup BLE_ERRORS_GAP SVC return values specific to GAP + * @{ */ +#define BLE_ERROR_GAP_UUID_LIST_MISMATCH (NRF_GAP_ERR_BASE + 0x000) /**< UUID list does not contain an integral number of UUIDs. */ +#define BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST (NRF_GAP_ERR_BASE + 0x001) /**< Use of Whitelist not permitted with discoverable advertising. */ +#define BLE_ERROR_GAP_INVALID_BLE_ADDR (NRF_GAP_ERR_BASE + 0x002) /**< The upper two bits of the address do not correspond to the specified address type. */ +#define BLE_ERROR_GAP_WHITELIST_IN_USE (NRF_GAP_ERR_BASE + 0x003) /**< Attempt to modify the whitelist while already in use by another operation. */ +#define BLE_ERROR_GAP_DEVICE_IDENTITIES_IN_USE (NRF_GAP_ERR_BASE + 0x004) /**< Attempt to modify the device identity list while already in use by another operation. */ +#define BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE (NRF_GAP_ERR_BASE + 0x005) /**< The device identity list contains entries with duplicate identity addresses. */ +/**@} */ + + +/**@defgroup BLE_GAP_ROLES GAP Roles + * @note Not explicitly used in peripheral API, but will be relevant for central API. + * @{ */ +#define BLE_GAP_ROLE_INVALID 0x0 /**< Invalid Role. */ +#define BLE_GAP_ROLE_PERIPH 0x1 /**< Peripheral Role. */ +#define BLE_GAP_ROLE_CENTRAL 0x2 /**< Central Role. */ +/**@} */ + + +/**@defgroup BLE_GAP_TIMEOUT_SOURCES GAP Timeout sources + * @{ */ +#define BLE_GAP_TIMEOUT_SRC_ADVERTISING 0x00 /**< Advertising timeout. */ +#define BLE_GAP_TIMEOUT_SRC_SECURITY_REQUEST 0x01 /**< Security request timeout. */ +#define BLE_GAP_TIMEOUT_SRC_SCAN 0x02 /**< Scanning timeout. */ +#define BLE_GAP_TIMEOUT_SRC_CONN 0x03 /**< Connection timeout. */ +#define BLE_GAP_TIMEOUT_SRC_AUTH_PAYLOAD 0x04 /**< Authenticated payload timeout. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADDR_TYPES GAP Address types + * @{ */ +#define BLE_GAP_ADDR_TYPE_PUBLIC 0x00 /**< Public address. */ +#define BLE_GAP_ADDR_TYPE_RANDOM_STATIC 0x01 /**< Random static address. */ +#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE 0x02 /**< Random private resolvable address. */ +#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE 0x03 /**< Random private non-resolvable address. */ +/**@} */ + + +/**@brief The default interval in seconds at which a private address is refreshed. */ +#define BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S (900) /* 15 minutes. */ +/**@brief The maximum interval in seconds at which a private address can be refreshed. */ +#define BLE_GAP_MAX_PRIVATE_ADDR_CYCLE_INTERVAL_S (41400) /* 11 hours 30 minutes. */ + + +/** @brief BLE address length. */ +#define BLE_GAP_ADDR_LEN (6) + + +/**@defgroup BLE_GAP_PRIVACY_MODES Privacy modes + * @{ */ +#define BLE_GAP_PRIVACY_MODE_OFF 0x00 /**< Device will send and accept its identity address for its own address. */ +#define BLE_GAP_PRIVACY_MODE_DEVICE_PRIVACY 0x01 /**< Device will send and accept only private addresses for its own address. */ +/**@} */ + + +/**@defgroup BLE_GAP_AD_TYPE_DEFINITIONS GAP Advertising and Scan Response Data format + * @note Found at https://www.bluetooth.org/Technical/AssignedNumbers/generic_access_profile.htm + * @{ */ +#define BLE_GAP_AD_TYPE_FLAGS 0x01 /**< Flags for discoverability. */ +#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE 0x02 /**< Partial list of 16 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE 0x03 /**< Complete list of 16 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_MORE_AVAILABLE 0x04 /**< Partial list of 32 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_COMPLETE 0x05 /**< Complete list of 32 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_MORE_AVAILABLE 0x06 /**< Partial list of 128 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_COMPLETE 0x07 /**< Complete list of 128 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME 0x08 /**< Short local device name. */ +#define BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME 0x09 /**< Complete local device name. */ +#define BLE_GAP_AD_TYPE_TX_POWER_LEVEL 0x0A /**< Transmit power level. */ +#define BLE_GAP_AD_TYPE_CLASS_OF_DEVICE 0x0D /**< Class of device. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C 0x0E /**< Simple Pairing Hash C. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R 0x0F /**< Simple Pairing Randomizer R. */ +#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_TK_VALUE 0x10 /**< Security Manager TK Value. */ +#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_OOB_FLAGS 0x11 /**< Security Manager Out Of Band Flags. */ +#define BLE_GAP_AD_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE 0x12 /**< Slave Connection Interval Range. */ +#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_16BIT 0x14 /**< List of 16-bit Service Solicitation UUIDs. */ +#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_128BIT 0x15 /**< List of 128-bit Service Solicitation UUIDs. */ +#define BLE_GAP_AD_TYPE_SERVICE_DATA 0x16 /**< Service Data - 16-bit UUID. */ +#define BLE_GAP_AD_TYPE_PUBLIC_TARGET_ADDRESS 0x17 /**< Public Target Address. */ +#define BLE_GAP_AD_TYPE_RANDOM_TARGET_ADDRESS 0x18 /**< Random Target Address. */ +#define BLE_GAP_AD_TYPE_APPEARANCE 0x19 /**< Appearance. */ +#define BLE_GAP_AD_TYPE_ADVERTISING_INTERVAL 0x1A /**< Advertising Interval. */ +#define BLE_GAP_AD_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS 0x1B /**< LE Bluetooth Device Address. */ +#define BLE_GAP_AD_TYPE_LE_ROLE 0x1C /**< LE Role. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C256 0x1D /**< Simple Pairing Hash C-256. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R256 0x1E /**< Simple Pairing Randomizer R-256. */ +#define BLE_GAP_AD_TYPE_SERVICE_DATA_32BIT_UUID 0x20 /**< Service Data - 32-bit UUID. */ +#define BLE_GAP_AD_TYPE_SERVICE_DATA_128BIT_UUID 0x21 /**< Service Data - 128-bit UUID. */ +#define BLE_GAP_AD_TYPE_URI 0x24 /**< URI */ +#define BLE_GAP_AD_TYPE_3D_INFORMATION_DATA 0x3D /**< 3D Information Data. */ +#define BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA 0xFF /**< Manufacturer Specific Data. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADV_FLAGS GAP Advertisement Flags + * @{ */ +#define BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE (0x01) /**< LE Limited Discoverable Mode. */ +#define BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE (0x02) /**< LE General Discoverable Mode. */ +#define BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED (0x04) /**< BR/EDR not supported. */ +#define BLE_GAP_ADV_FLAG_LE_BR_EDR_CONTROLLER (0x08) /**< Simultaneous LE and BR/EDR, Controller. */ +#define BLE_GAP_ADV_FLAG_LE_BR_EDR_HOST (0x10) /**< Simultaneous LE and BR/EDR, Host. */ +#define BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE (BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE Limited Discoverable Mode, BR/EDR not supported. */ +#define BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE (BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE General Discoverable Mode, BR/EDR not supported. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADV_INTERVALS GAP Advertising interval max and min + * @{ */ +#define BLE_GAP_ADV_INTERVAL_MIN 0x0020 /**< Minimum Advertising interval in 625 us units, i.e. 20 ms. */ +#define BLE_GAP_ADV_NONCON_INTERVAL_MIN 0x00A0 /**< Minimum Advertising interval in 625 us units for non connectable mode, i.e. 100 ms. */ +#define BLE_GAP_ADV_INTERVAL_MAX 0x4000 /**< Maximum Advertising interval in 625 us units, i.e. 10.24 s. */ + /**@} */ + + +/**@defgroup BLE_GAP_SCAN_INTERVALS GAP Scan interval max and min + * @{ */ +#define BLE_GAP_SCAN_INTERVAL_MIN 0x0004 /**< Minimum Scan interval in 625 us units, i.e. 2.5 ms. */ +#define BLE_GAP_SCAN_INTERVAL_MAX 0x4000 /**< Maximum Scan interval in 625 us units, i.e. 10.24 s. */ + /** @} */ + + +/**@defgroup BLE_GAP_SCAN_WINDOW GAP Scan window max and min + * @{ */ +#define BLE_GAP_SCAN_WINDOW_MIN 0x0004 /**< Minimum Scan window in 625 us units, i.e. 2.5 ms. */ +#define BLE_GAP_SCAN_WINDOW_MAX 0x4000 /**< Maximum Scan window in 625 us units, i.e. 10.24 s. */ + /** @} */ + + +/**@defgroup BLE_GAP_SCAN_TIMEOUT GAP Scan timeout max and min + * @{ */ +#define BLE_GAP_SCAN_TIMEOUT_MIN 0x0001 /**< Minimum Scan timeout in seconds. */ +#define BLE_GAP_SCAN_TIMEOUT_MAX 0xFFFF /**< Maximum Scan timeout in seconds. */ + /** @} */ + + +/**@brief Maximum size of advertising data in octets. */ +#define BLE_GAP_ADV_MAX_SIZE (31) + + +/**@defgroup BLE_GAP_ADV_TYPES GAP Advertising types + * @{ */ +#define BLE_GAP_ADV_TYPE_ADV_IND 0x00 /**< Connectable undirected. */ +#define BLE_GAP_ADV_TYPE_ADV_DIRECT_IND 0x01 /**< Connectable directed. */ +#define BLE_GAP_ADV_TYPE_ADV_SCAN_IND 0x02 /**< Scannable undirected. */ +#define BLE_GAP_ADV_TYPE_ADV_NONCONN_IND 0x03 /**< Non connectable undirected. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADV_FILTER_POLICIES GAP Advertising filter policies + * @{ */ +#define BLE_GAP_ADV_FP_ANY 0x00 /**< Allow scan requests and connect requests from any device. */ +#define BLE_GAP_ADV_FP_FILTER_SCANREQ 0x01 /**< Filter scan requests with whitelist. */ +#define BLE_GAP_ADV_FP_FILTER_CONNREQ 0x02 /**< Filter connect requests with whitelist. */ +#define BLE_GAP_ADV_FP_FILTER_BOTH 0x03 /**< Filter both scan and connect requests with whitelist. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADV_TIMEOUT_VALUES GAP Advertising timeout values + * @{ */ +#define BLE_GAP_ADV_TIMEOUT_LIMITED_MAX (180) /**< Maximum advertising time in limited discoverable mode (TGAP(lim_adv_timeout) = 180s). */ +#define BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED (0) /**< Unlimited advertising in general discoverable mode. */ +/**@} */ + + +/**@defgroup BLE_GAP_DISC_MODES GAP Discovery modes + * @{ */ +#define BLE_GAP_DISC_MODE_NOT_DISCOVERABLE 0x00 /**< Not discoverable discovery Mode. */ +#define BLE_GAP_DISC_MODE_LIMITED 0x01 /**< Limited Discovery Mode. */ +#define BLE_GAP_DISC_MODE_GENERAL 0x02 /**< General Discovery Mode. */ +/**@} */ + + +/**@defgroup BLE_GAP_IO_CAPS GAP IO Capabilities + * @{ */ +#define BLE_GAP_IO_CAPS_DISPLAY_ONLY 0x00 /**< Display Only. */ +#define BLE_GAP_IO_CAPS_DISPLAY_YESNO 0x01 /**< Display and Yes/No entry. */ +#define BLE_GAP_IO_CAPS_KEYBOARD_ONLY 0x02 /**< Keyboard Only. */ +#define BLE_GAP_IO_CAPS_NONE 0x03 /**< No I/O capabilities. */ +#define BLE_GAP_IO_CAPS_KEYBOARD_DISPLAY 0x04 /**< Keyboard and Display. */ +/**@} */ + + +/**@defgroup BLE_GAP_AUTH_KEY_TYPES GAP Authentication Key Types + * @{ */ +#define BLE_GAP_AUTH_KEY_TYPE_NONE 0x00 /**< No key (may be used to reject). */ +#define BLE_GAP_AUTH_KEY_TYPE_PASSKEY 0x01 /**< 6-digit Passkey. */ +#define BLE_GAP_AUTH_KEY_TYPE_OOB 0x02 /**< Out Of Band data. */ +/**@} */ + + +/**@defgroup BLE_GAP_KP_NOT_TYPES GAP Keypress Notification Types + * @{ */ +#define BLE_GAP_KP_NOT_TYPE_PASSKEY_START 0x00 /**< Passkey entry started. */ +#define BLE_GAP_KP_NOT_TYPE_PASSKEY_DIGIT_IN 0x01 /**< Passkey digit entered. */ +#define BLE_GAP_KP_NOT_TYPE_PASSKEY_DIGIT_OUT 0x02 /**< Passkey digit erased. */ +#define BLE_GAP_KP_NOT_TYPE_PASSKEY_CLEAR 0x03 /**< Passkey cleared. */ +#define BLE_GAP_KP_NOT_TYPE_PASSKEY_END 0x04 /**< Passkey entry completed. */ +/**@} */ + + +/**@defgroup BLE_GAP_SEC_STATUS GAP Security status + * @{ */ +#define BLE_GAP_SEC_STATUS_SUCCESS 0x00 /**< Procedure completed with success. */ +#define BLE_GAP_SEC_STATUS_TIMEOUT 0x01 /**< Procedure timed out. */ +#define BLE_GAP_SEC_STATUS_PDU_INVALID 0x02 /**< Invalid PDU received. */ +#define BLE_GAP_SEC_STATUS_RFU_RANGE1_BEGIN 0x03 /**< Reserved for Future Use range #1 begin. */ +#define BLE_GAP_SEC_STATUS_RFU_RANGE1_END 0x80 /**< Reserved for Future Use range #1 end. */ +#define BLE_GAP_SEC_STATUS_PASSKEY_ENTRY_FAILED 0x81 /**< Passkey entry failed (user cancelled or other). */ +#define BLE_GAP_SEC_STATUS_OOB_NOT_AVAILABLE 0x82 /**< Out of Band Key not available. */ +#define BLE_GAP_SEC_STATUS_AUTH_REQ 0x83 /**< Authentication requirements not met. */ +#define BLE_GAP_SEC_STATUS_CONFIRM_VALUE 0x84 /**< Confirm value failed. */ +#define BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP 0x85 /**< Pairing not supported. */ +#define BLE_GAP_SEC_STATUS_ENC_KEY_SIZE 0x86 /**< Encryption key size. */ +#define BLE_GAP_SEC_STATUS_SMP_CMD_UNSUPPORTED 0x87 /**< Unsupported SMP command. */ +#define BLE_GAP_SEC_STATUS_UNSPECIFIED 0x88 /**< Unspecified reason. */ +#define BLE_GAP_SEC_STATUS_REPEATED_ATTEMPTS 0x89 /**< Too little time elapsed since last attempt. */ +#define BLE_GAP_SEC_STATUS_INVALID_PARAMS 0x8A /**< Invalid parameters. */ +#define BLE_GAP_SEC_STATUS_DHKEY_FAILURE 0x8B /**< DHKey check failure. */ +#define BLE_GAP_SEC_STATUS_NUM_COMP_FAILURE 0x8C /**< Numeric Comparison failure. */ +#define BLE_GAP_SEC_STATUS_BR_EDR_IN_PROG 0x8D /**< BR/EDR pairing in progress. */ +#define BLE_GAP_SEC_STATUS_X_TRANS_KEY_DISALLOWED 0x8E /**< BR/EDR Link Key cannot be used for LE keys. */ +#define BLE_GAP_SEC_STATUS_RFU_RANGE2_BEGIN 0x8F /**< Reserved for Future Use range #2 begin. */ +#define BLE_GAP_SEC_STATUS_RFU_RANGE2_END 0xFF /**< Reserved for Future Use range #2 end. */ +/**@} */ + + +/**@defgroup BLE_GAP_SEC_STATUS_SOURCES GAP Security status sources + * @{ */ +#define BLE_GAP_SEC_STATUS_SOURCE_LOCAL 0x00 /**< Local failure. */ +#define BLE_GAP_SEC_STATUS_SOURCE_REMOTE 0x01 /**< Remote failure. */ +/**@} */ + + +/**@defgroup BLE_GAP_CP_LIMITS GAP Connection Parameters Limits + * @{ */ +#define BLE_GAP_CP_MIN_CONN_INTVL_NONE 0xFFFF /**< No new minimum connection interval specified in connect parameters. */ +#define BLE_GAP_CP_MIN_CONN_INTVL_MIN 0x0006 /**< Lowest minimum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ +#define BLE_GAP_CP_MIN_CONN_INTVL_MAX 0x0C80 /**< Highest minimum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ +#define BLE_GAP_CP_MAX_CONN_INTVL_NONE 0xFFFF /**< No new maximum connection interval specified in connect parameters. */ +#define BLE_GAP_CP_MAX_CONN_INTVL_MIN 0x0006 /**< Lowest maximum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ +#define BLE_GAP_CP_MAX_CONN_INTVL_MAX 0x0C80 /**< Highest maximum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ +#define BLE_GAP_CP_SLAVE_LATENCY_MAX 0x01F3 /**< Highest slave latency permitted, in connection events. */ +#define BLE_GAP_CP_CONN_SUP_TIMEOUT_NONE 0xFFFF /**< No new supervision timeout specified in connect parameters. */ +#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MIN 0x000A /**< Lowest supervision timeout permitted, in units of 10 ms, i.e. 100 ms. */ +#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MAX 0x0C80 /**< Highest supervision timeout permitted, in units of 10 ms, i.e. 32 s. */ +/**@} */ + + +/**@brief GAP device name defines. */ +#define BLE_GAP_DEVNAME_DEFAULT "nRF5x" /**< Default device name value. */ +#define BLE_GAP_DEVNAME_DEFAULT_LEN 31 /**< Default number of octets in device name. */ +#define BLE_GAP_DEVNAME_MAX_LEN 248 /**< Maximum number of octets in device name. */ + + +/**@brief Disable RSSI events for connections */ +#define BLE_GAP_RSSI_THRESHOLD_INVALID 0xFF + + +/**@defgroup BLE_GAP_CONN_SEC_MODE_SET_MACROS GAP attribute security requirement setters + * + * See @ref ble_gap_conn_sec_mode_t. + * @{ */ +/**@brief Set sec_mode pointed to by ptr to have no access rights.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(ptr) do {(ptr)->sm = 0; (ptr)->lv = 0;} while(0) +/**@brief Set sec_mode pointed to by ptr to require no protection, open link.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_OPEN(ptr) do {(ptr)->sm = 1; (ptr)->lv = 1;} while(0) +/**@brief Set sec_mode pointed to by ptr to require encryption, but no MITM protection.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_ENC_NO_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 2;} while(0) +/**@brief Set sec_mode pointed to by ptr to require encryption and MITM protection.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 3;} while(0) +/**@brief Set sec_mode pointed to by ptr to require LESC encryption and MITM protection.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_LESC_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 4;} while(0) +/**@brief Set sec_mode pointed to by ptr to require signing or encryption, no MITM protection needed.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_NO_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 1;} while(0) +/**@brief Set sec_mode pointed to by ptr to require signing or encryption with MITM protection.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_WITH_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 2;} while(0) +/**@} */ + + +/**@brief GAP Security Random Number Length. */ +#define BLE_GAP_SEC_RAND_LEN 8 + + +/**@brief GAP Security Key Length. */ +#define BLE_GAP_SEC_KEY_LEN 16 + + +/**@brief GAP LE Secure Connections Elliptic Curve Diffie-Hellman P-256 Public Key Length. */ +#define BLE_GAP_LESC_P256_PK_LEN 64 + + +/**@brief GAP LE Secure Connections Elliptic Curve Diffie-Hellman DHKey Length. */ +#define BLE_GAP_LESC_DHKEY_LEN 32 + + +/**@brief GAP Passkey Length. */ +#define BLE_GAP_PASSKEY_LEN 6 + + +/**@brief Maximum amount of addresses in the whitelist. */ +#define BLE_GAP_WHITELIST_ADDR_MAX_COUNT (8) + + +/**@brief Maximum amount of identities in the device identities list. */ +#define BLE_GAP_DEVICE_IDENTITIES_MAX_COUNT (8) + + +/**@defgroup GAP_SEC_MODES GAP Security Modes + * @{ */ +#define BLE_GAP_SEC_MODE 0x00 /**< No key (may be used to reject). */ +/**@} */ +/** @} */ + + +/**@addtogroup BLE_GAP_STRUCTURES Structures + * @{ */ + +/**@brief Bluetooth Low Energy address. */ +typedef struct +{ + uint8_t addr_id_peer : 1; /**< Only valid for peer addresses. + Reference to peer in device identities list (as set with @ref sd_ble_gap_device_identities_set) when peer is using privacy. */ + uint8_t addr_type : 7; /**< See @ref BLE_GAP_ADDR_TYPES. */ + uint8_t addr[BLE_GAP_ADDR_LEN]; /**< 48-bit address, LSB format. */ +} ble_gap_addr_t; + + +/**@brief GAP connection parameters. + * + * @note When ble_conn_params_t is received in an event, both min_conn_interval and + * max_conn_interval will be equal to the connection interval set by the central. + * + * @note If both conn_sup_timeout and max_conn_interval are specified, then the following constraint applies: + * conn_sup_timeout * 4 > (1 + slave_latency) * max_conn_interval + * that corresponds to the following Bluetooth Spec requirement: + * The Supervision_Timeout in milliseconds shall be larger than + * (1 + Conn_Latency) * Conn_Interval_Max * 2, where Conn_Interval_Max is given in milliseconds. + */ +typedef struct +{ + uint16_t min_conn_interval; /**< Minimum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ + uint16_t max_conn_interval; /**< Maximum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ + uint16_t slave_latency; /**< Slave Latency in number of connection events, see @ref BLE_GAP_CP_LIMITS.*/ + uint16_t conn_sup_timeout; /**< Connection Supervision Timeout in 10 ms units, see @ref BLE_GAP_CP_LIMITS.*/ +} ble_gap_conn_params_t; + + +/**@brief GAP connection security modes. + * + * Security Mode 0 Level 0: No access permissions at all (this level is not defined by the Bluetooth Core specification).\n + * Security Mode 1 Level 1: No security is needed (aka open link).\n + * Security Mode 1 Level 2: Encrypted link required, MITM protection not necessary.\n + * Security Mode 1 Level 3: MITM protected encrypted link required.\n + * Security Mode 1 Level 4: LESC MITM protected encrypted link required.\n + * Security Mode 2 Level 1: Signing or encryption required, MITM protection not necessary.\n + * Security Mode 2 Level 2: MITM protected signing required, unless link is MITM protected encrypted.\n + */ +typedef struct +{ + uint8_t sm : 4; /**< Security Mode (1 or 2), 0 for no permissions at all. */ + uint8_t lv : 4; /**< Level (1, 2, 3 or 4), 0 for no permissions at all. */ + +} ble_gap_conn_sec_mode_t; + + +/**@brief GAP connection security status.*/ +typedef struct +{ + ble_gap_conn_sec_mode_t sec_mode; /**< Currently active security mode for this connection.*/ + uint8_t encr_key_size; /**< Length of currently active encryption key, 7 to 16 octets (only applicable for bonding procedures). */ +} ble_gap_conn_sec_t; + + +/** + * @brief Device name and its properties + * @note If @ref max_len is more than @ref BLE_GAP_DEVNAME_DEFAULT_LEN and vloc is set to @ref BLE_GATTS_VLOC_STACK, the attribute table size must be increased to have room for the longer device name (see @ref ble_gatts_enable_params_t). + */ +typedef struct +{ + ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ + uint8_t vloc:2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ + uint8_t *p_value; /**< Pointer to where the value (device name) is stored or will be stored.*/ + uint16_t current_len; /**< Current length in bytes of the memory pointed to by p_value.*/ + uint16_t max_len; /**< Maximum length in bytes of the memory pointed to by p_value.*/ +} ble_gap_device_name_t; + + +/** + * @brief BLE GAP initialization parameters. + */ +typedef struct +{ + uint8_t periph_conn_count; /**< Number of connections acting as a peripheral */ + uint8_t central_conn_count; /**< Number of connections acting as a central */ + uint8_t central_sec_count; /**< Number of SMP instances for all connections acting as a central. */ + ble_gap_device_name_t const *p_device_name; /**< Pointer to device name instance. If NULL, @ref sd_ble_enable() will set the device name to @ref BLE_GAP_DEVNAME_DEFAULT. */ +} ble_gap_enable_params_t; + + +/**@brief Identity Resolving Key. */ +typedef struct +{ + uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Array containing IRK. */ +} ble_gap_irk_t; + + +/**@brief Channel mask for RF channels used in advertising. */ +typedef struct +{ + uint8_t ch_37_off : 1; /**< Setting this bit to 1 will turn off advertising on channel 37 */ + uint8_t ch_38_off : 1; /**< Setting this bit to 1 will turn off advertising on channel 38 */ + uint8_t ch_39_off : 1; /**< Setting this bit to 1 will turn off advertising on channel 39 */ +} ble_gap_adv_ch_mask_t; + + +/**@brief GAP advertising parameters. */ +typedef struct +{ + uint8_t type; /**< See @ref BLE_GAP_ADV_TYPES. */ + ble_gap_addr_t const *p_peer_addr; /**< Address of a known peer. + - When privacy is enabled and the local device use @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE addresses, the device identity list is searched for a matching + entry. If the local IRK for that device identity is set, the local IRK for that device will be used to generate the advertiser address field in the advertise packet. + - If type is @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND, this must be set to the targeted initiator. If the initiator is in the device identity list, + the peer IRK for that device will be used to generate the initiator address field in the ADV_DIRECT_IND packet. */ + uint8_t fp; /**< Filter Policy, see @ref BLE_GAP_ADV_FILTER_POLICIES. */ + uint16_t interval; /**< Advertising interval between 0x0020 and 0x4000 in 0.625 ms units (20ms to 10.24s), see @ref BLE_GAP_ADV_INTERVALS. + - If type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND, this parameter must be set to 0 for high duty cycle directed advertising. + - If type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND, set @ref BLE_GAP_ADV_INTERVAL_MIN <= interval <= @ref BLE_GAP_ADV_INTERVAL_MAX for low duty cycle advertising.*/ + uint16_t timeout; /**< Advertising timeout between 0x0001 and 0x3FFF in seconds, 0x0000 disables timeout. See also @ref BLE_GAP_ADV_TIMEOUT_VALUES. If type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND, this parameter must be set to 0 for High duty cycle directed advertising. */ + ble_gap_adv_ch_mask_t channel_mask; /**< Advertising channel mask. See @ref ble_gap_adv_ch_mask_t. */ +} ble_gap_adv_params_t; + + +/**@brief GAP scanning parameters. */ +typedef struct +{ + uint8_t active : 1; /**< If 1, perform active scanning (scan requests). */ + uint8_t use_whitelist : 1; /**< If 1, filter advertisers using current active whitelist. */ + uint8_t adv_dir_report : 1; /**< If 1, also report directed advertisements where the initiator field is set to a private resolvable address, + even if the address did not resolve to an entry in the device identity list. A report will be generated + even if the peer is not in the whitelist. */ + uint16_t interval; /**< Scan interval between 0x0004 and 0x4000 in 0.625ms units (2.5ms to 10.24s). */ + uint16_t window; /**< Scan window between 0x0004 and 0x4000 in 0.625ms units (2.5ms to 10.24s). */ + uint16_t timeout; /**< Scan timeout between 0x0001 and 0xFFFF in seconds, 0x0000 disables timeout. */ +} ble_gap_scan_params_t; + + +/**@brief Device Privacy. + * + * The privacy feature provides a way for the device to avoid being tracked over a period of time. + * The privacy feature, when enabled, hides the local device identity and replaces it with a private address + * that is automatically refreshed at a specified interval. + * + * If a device still wants to be recognized by other peers, it needs to share it's Identity Resolving Key (IRK). + * With this key, a device can generate a random private address that can only be recognized by peers in possession of that key, + * and devices can establish connections without revealing their real identities. + * + * @note If the device IRK is updated, the new IRK becomes the one to be distributed in all + * bonding procedures performed after @ref sd_ble_gap_privacy_set returns. + * The IRK distributed during bonding procedure is the device IRK that is active when @ref sd_ble_gap_sec_params_reply is called. + */ +typedef struct +{ + uint8_t privacy_mode; /**< Privacy mode, see @ref BLE_GAP_PRIVACY_MODES. Default is @ref BLE_GAP_PRIVACY_MODE_OFF. */ + uint8_t private_addr_type; /**< The private address type must be either @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE or @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE. */ + uint16_t private_addr_cycle_s; /**< Private address cycle interval in seconds. Providing an address cycle value of 0 will use the default value defined by @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S. */ + ble_gap_irk_t *p_device_irk; /**< When used as input, pointer to IRK structure that will be used as the default IRK. If NULL, the device default IRK will be used. + When used as output, pointer to IRK structure where the current default IRK will be written to. If NULL, this argument is ignored. + By default, the default IRK is used to generate random private resolvable addresses for the local device unless instructed otherwise. */ +} ble_gap_privacy_params_t; + + +/** @brief Keys that can be exchanged during a bonding procedure. */ +typedef struct +{ + uint8_t enc : 1; /**< Long Term Key and Master Identification. */ + uint8_t id : 1; /**< Identity Resolving Key and Identity Address Information. */ + uint8_t sign : 1; /**< Connection Signature Resolving Key. */ + uint8_t link : 1; /**< Derive the Link Key from the LTK. */ +} ble_gap_sec_kdist_t; + + +/**@brief GAP security parameters. */ +typedef struct +{ + uint8_t bond : 1; /**< Perform bonding. */ + uint8_t mitm : 1; /**< Enable Man In The Middle protection. */ + uint8_t lesc : 1; /**< Enable LE Secure Connection pairing. */ + uint8_t keypress : 1; /**< Enable generation of keypress notifications. */ + uint8_t io_caps : 3; /**< IO capabilities, see @ref BLE_GAP_IO_CAPS. */ + uint8_t oob : 1; /**< Out Of Band data available. */ + uint8_t min_key_size; /**< Minimum encryption key size in octets between 7 and 16. If 0 then not applicable in this instance. */ + uint8_t max_key_size; /**< Maximum encryption key size in octets between min_key_size and 16. */ + ble_gap_sec_kdist_t kdist_own; /**< Key distribution bitmap: keys that the local device will distribute. */ + ble_gap_sec_kdist_t kdist_peer; /**< Key distribution bitmap: keys that the remote device will distribute. */ +} ble_gap_sec_params_t; + + +/**@brief GAP Encryption Information. */ +typedef struct +{ + uint8_t ltk[BLE_GAP_SEC_KEY_LEN]; /**< Long Term Key. */ + uint8_t lesc : 1; /**< Key generated using LE Secure Connections. */ + uint8_t auth : 1; /**< Authenticated Key. */ + uint8_t ltk_len : 6; /**< LTK length in octets. */ +} ble_gap_enc_info_t; + + +/**@brief GAP Master Identification. */ +typedef struct +{ + uint16_t ediv; /**< Encrypted Diversifier. */ + uint8_t rand[BLE_GAP_SEC_RAND_LEN]; /**< Random Number. */ +} ble_gap_master_id_t; + + +/**@brief GAP Signing Information. */ +typedef struct +{ + uint8_t csrk[BLE_GAP_SEC_KEY_LEN]; /**< Connection Signature Resolving Key. */ +} ble_gap_sign_info_t; + + +/**@brief GAP LE Secure Connections P-256 Public Key. */ +typedef struct +{ + uint8_t pk[BLE_GAP_LESC_P256_PK_LEN]; /**< LE Secure Connections Elliptic Curve Diffie-Hellman P-256 Public Key. Stored in the standard SMP protocol format: {X,Y} both in little-endian. */ +} ble_gap_lesc_p256_pk_t; + + +/**@brief GAP LE Secure Connections DHKey. */ +typedef struct +{ + uint8_t key[BLE_GAP_LESC_DHKEY_LEN]; /**< LE Secure Connections Elliptic Curve Diffie-Hellman Key. Stored in little-endian. */ +} ble_gap_lesc_dhkey_t; + + +/**@brief GAP LE Secure Connections OOB data. */ +typedef struct +{ + ble_gap_addr_t addr; /**< Bluetooth address of the device. */ + uint8_t r[BLE_GAP_SEC_KEY_LEN]; /**< Random Number. */ + uint8_t c[BLE_GAP_SEC_KEY_LEN]; /**< Confirm Value. */ +} ble_gap_lesc_oob_data_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_CONNECTED. */ +typedef struct +{ + ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 + and the address is the device's identity address. */ + uint8_t role; /**< BLE role for this connection, see @ref BLE_GAP_ROLES */ + ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ +} ble_gap_evt_connected_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_DISCONNECTED. */ +typedef struct +{ + uint8_t reason; /**< HCI error code, see @ref BLE_HCI_STATUS_CODES. */ +} ble_gap_evt_disconnected_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_CONN_PARAM_UPDATE. */ +typedef struct +{ + ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ +} ble_gap_evt_conn_param_update_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST. */ +typedef struct +{ + ble_gap_sec_params_t peer_params; /**< Initiator Security Parameters. */ +} ble_gap_evt_sec_params_request_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_SEC_INFO_REQUEST. */ +typedef struct +{ + ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ + ble_gap_master_id_t master_id; /**< Master Identification for LTK lookup. */ + uint8_t enc_info : 1; /**< If 1, Encryption Information required. */ + uint8_t id_info : 1; /**< If 1, Identity Information required. */ + uint8_t sign_info : 1; /**< If 1, Signing Information required. */ +} ble_gap_evt_sec_info_request_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_PASSKEY_DISPLAY. */ +typedef struct +{ + uint8_t passkey[BLE_GAP_PASSKEY_LEN]; /**< 6-digit passkey in ASCII ('0'-'9' digits only). */ + uint8_t match_request : 1; /**< If 1 requires the application to report the match using @ref sd_ble_gap_auth_key_reply + with either @ref BLE_GAP_AUTH_KEY_TYPE_NONE if there is no match or + @ref BLE_GAP_AUTH_KEY_TYPE_PASSKEY if there is a match. */ +} ble_gap_evt_passkey_display_t; + +/**@brief Event structure for @ref BLE_GAP_EVT_KEY_PRESSED. */ +typedef struct +{ + uint8_t kp_not; /**< Keypress notification type, see @ref BLE_GAP_KP_NOT_TYPES. */ +} ble_gap_evt_key_pressed_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_AUTH_KEY_REQUEST. */ +typedef struct +{ + uint8_t key_type; /**< See @ref BLE_GAP_AUTH_KEY_TYPES. */ +} ble_gap_evt_auth_key_request_t; + +/**@brief Event structure for @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST. */ +typedef struct +{ + ble_gap_lesc_p256_pk_t *p_pk_peer; /**< LE Secure Connections remote P-256 Public Key. This will point to the application-supplied memory + inside the keyset during the call to @ref sd_ble_gap_sec_params_reply. */ + uint8_t oobd_req :1; /**< LESC OOB data required. A call to @ref sd_ble_gap_lesc_oob_data_set is required to complete the procedure. */ +} ble_gap_evt_lesc_dhkey_request_t; + + +/**@brief Security levels supported. + * @note See Bluetooth Specification Version 4.2 Volume 3, Part C, Chapter 10, Section 10.2.1. +*/ +typedef struct +{ + uint8_t lv1 : 1; /**< If 1: Level 1 is supported. */ + uint8_t lv2 : 1; /**< If 1: Level 2 is supported. */ + uint8_t lv3 : 1; /**< If 1: Level 3 is supported. */ + uint8_t lv4 : 1; /**< If 1: Level 4 is supported. */ +} ble_gap_sec_levels_t; + + +/**@brief Encryption Key. */ +typedef struct +{ + ble_gap_enc_info_t enc_info; /**< Encryption Information. */ + ble_gap_master_id_t master_id; /**< Master Identification. */ +} ble_gap_enc_key_t; + + +/**@brief Identity Key. */ +typedef struct +{ + ble_gap_irk_t id_info; /**< Identity Resolving Key. */ + ble_gap_addr_t id_addr_info; /**< Identity Address. */ +} ble_gap_id_key_t; + + +/**@brief Security Keys. */ +typedef struct +{ + ble_gap_enc_key_t *p_enc_key; /**< Encryption Key, or NULL. */ + ble_gap_id_key_t *p_id_key; /**< Identity Key, or NULL. */ + ble_gap_sign_info_t *p_sign_key; /**< Signing Key, or NULL. */ + ble_gap_lesc_p256_pk_t *p_pk; /**< LE Secure Connections P-256 Public Key. When in debug mode the application must use the value defined + in the Core Bluetooth Specification v4.2 Vol.3, Part H, Section 2.3.5.6.1 */ +} ble_gap_sec_keys_t; + + +/**@brief Security key set for both local and peer keys. */ +typedef struct +{ + ble_gap_sec_keys_t keys_own; /**< Keys distributed by the local device. For LE Secure Connections the encryption key will be generated locally and will always be stored if bonding. */ + ble_gap_sec_keys_t keys_peer; /**< Keys distributed by the remote device. For LE Secure Connections, p_enc_key must always be NULL. */ +} ble_gap_sec_keyset_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_AUTH_STATUS. */ +typedef struct +{ + uint8_t auth_status; /**< Authentication status, see @ref BLE_GAP_SEC_STATUS. */ + uint8_t error_src : 2; /**< On error, source that caused the failure, see @ref BLE_GAP_SEC_STATUS_SOURCES. */ + uint8_t bonded : 1; /**< Procedure resulted in a bond. */ + ble_gap_sec_levels_t sm1_levels; /**< Levels supported in Security Mode 1. */ + ble_gap_sec_levels_t sm2_levels; /**< Levels supported in Security Mode 2. */ + ble_gap_sec_kdist_t kdist_own; /**< Bitmap stating which keys were exchanged (distributed) by the local device. If bonding with LE Secure Connections, the enc bit will be always set. */ + ble_gap_sec_kdist_t kdist_peer; /**< Bitmap stating which keys were exchanged (distributed) by the remote device. If bonding with LE Secure Connections, the enc bit will never be set. */ +} ble_gap_evt_auth_status_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_CONN_SEC_UPDATE. */ +typedef struct +{ + ble_gap_conn_sec_t conn_sec; /**< Connection security level. */ +} ble_gap_evt_conn_sec_update_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_TIMEOUT. */ +typedef struct +{ + uint8_t src; /**< Source of timeout event, see @ref BLE_GAP_TIMEOUT_SOURCES. */ +} ble_gap_evt_timeout_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_RSSI_CHANGED. */ +typedef struct +{ + int8_t rssi; /**< Received Signal Strength Indication in dBm. */ +} ble_gap_evt_rssi_changed_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_ADV_REPORT. */ +typedef struct +{ + ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 + and the address is the device's identity address. */ + ble_gap_addr_t direct_addr; /**< Set when the scanner is unable to resolve the private resolvable address of the initiator + field of a directed advertisement packet and the scanner has been enabled to report this in @ref ble_gap_scan_params_t::adv_dir_report. */ + int8_t rssi; /**< Received Signal Strength Indication in dBm. */ + uint8_t scan_rsp : 1; /**< If 1, the report corresponds to a scan response and the type field may be ignored. */ + uint8_t type : 2; /**< See @ref BLE_GAP_ADV_TYPES. Only valid if the scan_rsp field is 0. */ + uint8_t dlen : 5; /**< Advertising or scan response data length. */ + uint8_t data[BLE_GAP_ADV_MAX_SIZE]; /**< Advertising or scan response data. */ +} ble_gap_evt_adv_report_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_SEC_REQUEST. */ +typedef struct +{ + uint8_t bond : 1; /**< Perform bonding. */ + uint8_t mitm : 1; /**< Man In The Middle protection requested. */ + uint8_t lesc : 1; /**< LE Secure Connections requested. */ + uint8_t keypress : 1; /**< Generation of keypress notifications requested. */ +} ble_gap_evt_sec_request_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST. */ +typedef struct +{ + ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ +} ble_gap_evt_conn_param_update_request_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_SCAN_REQ_REPORT. */ +typedef struct +{ + int8_t rssi; /**< Received Signal Strength Indication in dBm. */ + ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 + and the address is the device's identity address. */ +} ble_gap_evt_scan_req_report_t; + + +/**@brief GAP event structure. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which event occurred. */ + union /**< union alternative identified by evt_id in enclosing struct. */ + { + ble_gap_evt_connected_t connected; /**< Connected Event Parameters. */ + ble_gap_evt_disconnected_t disconnected; /**< Disconnected Event Parameters. */ + ble_gap_evt_conn_param_update_t conn_param_update; /**< Connection Parameter Update Parameters. */ + ble_gap_evt_sec_params_request_t sec_params_request; /**< Security Parameters Request Event Parameters. */ + ble_gap_evt_sec_info_request_t sec_info_request; /**< Security Information Request Event Parameters. */ + ble_gap_evt_passkey_display_t passkey_display; /**< Passkey Display Event Parameters. */ + ble_gap_evt_key_pressed_t key_pressed; /**< Key Pressed Event Parameters. */ + ble_gap_evt_auth_key_request_t auth_key_request; /**< Authentication Key Request Event Parameters. */ + ble_gap_evt_lesc_dhkey_request_t lesc_dhkey_request; /**< LE Secure Connections DHKey calculation request. */ + ble_gap_evt_auth_status_t auth_status; /**< Authentication Status Event Parameters. */ + ble_gap_evt_conn_sec_update_t conn_sec_update; /**< Connection Security Update Event Parameters. */ + ble_gap_evt_timeout_t timeout; /**< Timeout Event Parameters. */ + ble_gap_evt_rssi_changed_t rssi_changed; /**< RSSI Event parameters. */ + ble_gap_evt_adv_report_t adv_report; /**< Advertising Report Event Parameters. */ + ble_gap_evt_sec_request_t sec_request; /**< Security Request Event Parameters. */ + ble_gap_evt_conn_param_update_request_t conn_param_update_request; /**< Connection Parameter Update Parameters. */ + ble_gap_evt_scan_req_report_t scan_req_report; /**< Scan Request Report parameters. */ + } params; /**< Event Parameters. */ +} ble_gap_evt_t; + + +/**@brief Channel Map option. + * Used with @ref sd_ble_opt_get to get the current channel map + * or @ref sd_ble_opt_set to set a new channel map. When setting the + * channel map, it applies to all current and future connections. When getting the + * current channel map, it applies to a single connection and the connection handle + * must be supplied. + * + * @note Setting the channel map may take some time, depending on connection parameters. + * The time taken may be different for each connection and the get operation will + * return the previous channel map until the new one has taken effect. + * + * @note After setting the channel map, by spec it can not be set again until at least 1 s has passed. + * See Bluetooth Specification Version 4.1 Volume 2, Part E, Section 7.3.46. + * + * @retval ::NRF_SUCCESS Get or set successful. + * @retval ::NRF_ERROR_BUSY Channel map was set again before enough time had passed. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied for get. + * @retval ::NRF_ERROR_NOT_SUPPORTED Returned by sd_ble_opt_set in peripheral-only SoftDevices. + * + */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle (only applicable for get) */ + uint8_t ch_map[5]; /**< Channel Map (37-bit). */ +} ble_gap_opt_ch_map_t; + + +/**@brief Local connection latency option. + * + * Local connection latency is a feature which enables the slave to improve + * current consumption by ignoring the slave latency set by the peer. The + * local connection latency can only be set to a multiple of the slave latency, + * and cannot be longer than half of the supervision timeout. + * + * Used with @ref sd_ble_opt_set to set the local connection latency. The + * @ref sd_ble_opt_get is not supported for this option, but the actual + * local connection latency (unless set to NULL) is set as a return parameter + * when setting the option. + * + * @note The latency set will be truncated down to the closest slave latency event + * multiple, or the nearest multiple before half of the supervision timeout. + * + * @note The local connection latency is disabled by default, and needs to be enabled for new + * connections and whenever the connection is updated. + * + * @retval ::NRF_SUCCESS Set successfully. + * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. + */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle */ + uint16_t requested_latency; /**< Requested local connection latency. */ + uint16_t * p_actual_latency; /**< Pointer to storage for the actual local connection latency (can be set to NULL to skip return value). */ +} ble_gap_opt_local_conn_latency_t; + + +/**@brief Passkey Option. + * + * Structure containing the passkey to be used during pairing. This can be used with @ref + * sd_ble_opt_set to make the SoftDevice use a pre-programmed passkey for authentication + * instead of generating a random one. + * + * @note Repeated pairing attempts using the same pre-programmed passkey makes pairing vulnerable to MITM attacks. + * + * @note @ref sd_ble_opt_get is not supported for this option. + * + */ +typedef struct +{ + uint8_t * p_passkey; /**< Pointer to 6-digit ASCII string (digit 0..9 only, no NULL termination) passkey to be used during pairing. If this is NULL, the SoftDevice will generate a random passkey if required.*/ +} ble_gap_opt_passkey_t; + + +/**@brief Scan request report option. + * + * This can be used with @ref sd_ble_opt_set to make the SoftDevice send + * @ref BLE_GAP_EVT_SCAN_REQ_REPORT events. + * + * @note Due to the limited space reserved for scan request report events, + * not all received scan requests will be reported. + * + * @note If whitelisting is used, only whitelisted requests are reported. + * + * @retval ::NRF_SUCCESS Set successfully. + * @retval ::NRF_ERROR_INVALID_STATE When advertising is ongoing while the option is set. + */ +typedef struct +{ + uint8_t enable : 1; /**< Enable scan request reports. */ +} ble_gap_opt_scan_req_report_t; + + +/**@brief Compatibility mode option. + * + * This can be used with @ref sd_ble_opt_set to enable and disable + * compatibility modes. Compatibility modes are disabled by default. + * + * @note Compatibility mode 1 enables interoperability with devices that do not support + * a value of 0 for the WinOffset parameter in the Link Layer CONNECT_REQ packet. + * + * @retval ::NRF_SUCCESS Set successfully. + * @retval ::NRF_ERROR_INVALID_STATE When connection creation is ongoing while mode 1 is set. + */ +typedef struct +{ + uint8_t mode_1_enable : 1; /**< Enable compatibility mode 1.*/ +} ble_gap_opt_compat_mode_t; + +/**@brief Data length extension option. + * + * This can be used with @ref sd_ble_opt_set to enable longer data packets. + * + * @note An rxtx_max_pdu_payload_size of 0 will result in the default minimum payload size of 27. + * @note Not supported by SoftDevices for nRF51 Series devices. + * @note The parameters for a connection are applied when a connection complete + * event is generated for the host. + * + * + * @retval ::NRF_SUCCESS Set successfully. + * @retval ::NRF_ERROR_INVALID_PARAM If the payload size is not 0 or a valid link layer PDU payload size. + * @retval ::NRF_ERROR_NOT_SUPPORTED If called on a SoftDevice designed for nRF51 (e.g. s130). + */ +typedef struct +{ + uint8_t rxtx_max_pdu_payload_size; /**< Max PDU payload size (in octets). */ +} ble_gap_opt_ext_len_t; + + + +/**@brief Authenticated payload timeout option. + * + * This can be used with @ref sd_ble_opt_set to change the Authenticated payload timeout to a value other than the default of 8 minutes. + * + * @note The authenticated payload timeout event ::BLE_GAP_TIMEOUT_SRC_AUTH_PAYLOAD will be generated + * if auth_payload_timeout time has elapsed without receiving a packet with a valid MIC on an encrypted + * link. + * + * @note The LE ping procedure will be initiated before the timer expires to give the peer a chance + * to reset the timer. In addition the stack will try to prioritize running of LE ping over other + * activities to increase chances of finishing LE ping before timer expires. To avoid side-effects + * on other activities, it is recommended to use high timeout values. + * Recommended timeout > 2*(connInterval * (6 + connSlaveLatency)). + * + * @retval ::NRF_SUCCESS Set successfully. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. auth_payload_timeout was outside of allowed range. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. + */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle */ + uint16_t auth_payload_timeout; /**< Requested timeout in 10 ms unit. Maximum is 48 000 (=480 000 ms =8 min). Minimum is 1 (=10ms). */ +} ble_gap_opt_auth_payload_timeout_t; + + +/**@brief Option structure for GAP options. */ +typedef union +{ + ble_gap_opt_ch_map_t ch_map; /**< Parameters for the Channel Map option. */ + ble_gap_opt_local_conn_latency_t local_conn_latency; /**< Parameters for the Local connection latency option */ + ble_gap_opt_passkey_t passkey; /**< Parameters for the Passkey option.*/ + ble_gap_opt_scan_req_report_t scan_req_report; /**< Parameters for the scan request report option.*/ + ble_gap_opt_compat_mode_t compat_mode; /**< Parameters for the compatibility mode option.*/ + ble_gap_opt_ext_len_t ext_len; /**< Parameters for the extended length option. */ + ble_gap_opt_auth_payload_timeout_t auth_payload_timeout; /**< Parameters for the authenticated payload timeout option.*/ +} ble_gap_opt_t; +/**@} */ + + +/**@addtogroup BLE_GAP_FUNCTIONS Functions + * @{ */ + +/**@brief Set the local Bluetooth identity address. + * + * The local Bluetooth identity address is the address that identifies this device to other peers. + * The address type must be either @ref BLE_GAP_ADDR_TYPE_PUBLIC or @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC. + * The identity address cannot be changed while roles are running. + * + * @note This address will be distributed to the peer during bonding. + * If the address changes, the address stored in the peer device will not be valid and the ability to + * reconnect using the old address will be lost. + * + * @note By default the SoftDevice will set an address of type @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC upon being + * enabled. The address is a random number populated during the IC manufacturing process and remains unchanged + * for the lifetime of each IC. + * + * @mscs + * @mmsc{@ref BLE_GAP_ADV_MSC} + * @endmscs + * + * @param[in] p_addr Pointer to address structure. + * + * @retval ::NRF_SUCCESS Address successfully set. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address. + * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. + * @retval ::NRF_ERROR_INVALID_STATE The identity address cannot be changed while the roles are running. + */ +SVCALL(SD_BLE_GAP_ADDR_SET, uint32_t, sd_ble_gap_addr_set(adapter_t *adapter, ble_gap_addr_t const *p_addr)); + + +/**@brief Get local Bluetooth identity address. + * + * @note This will always return the identity address irrespective of the privacy settings, + * i.e. the address type will always be either @ref BLE_GAP_ADDR_TYPE_PUBLIC or @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC. + * + * @param[out] p_addr Pointer to address structure to be filled in. + * + * @retval ::NRF_SUCCESS Address successfully retrieved. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid or NULL pointer supplied. + */ +SVCALL(SD_BLE_GAP_ADDR_GET, uint32_t, sd_ble_gap_addr_get(adapter_t *adapter, ble_gap_addr_t *p_addr)); + + +/**@brief Set the active whitelist in the SoftDevice. + * + * @note Only one whitelist can be used at a time and the whitelist is shared between the BLE roles. + * The whitelist cannot be set if a BLE role is using the whitelist. + * + * @note If an address is resolved using the information in the device identity list, then the whitelist + * filter policy applies to the peer identity address and not the resolvable address sent on air. + * + * @mscs + * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} + * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_PRIVATE_SCAN_MSC} + * @endmscs + * + * @param[in] pp_wl_addrs Pointer to a whitelist of peer addresses, if NULL the whitelist will be cleared. + * @param[in] len Length of the whitelist, maximum @ref BLE_GAP_WHITELIST_ADDR_MAX_COUNT. + * + * @retval ::NRF_SUCCESS The whitelist is successfully set/cleared. + * @retval ::NRF_ERROR_INVALID_ADDR The whitelist (or one of its entries) provided is invalid. + * @retval ::BLE_ERROR_GAP_WHITELIST_IN_USE The whitelist is in use by a BLE role and cannot be set or cleared. + * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. + * @retval ::NRF_ERROR_DATA_SIZE The given whitelist size is invalid (zero or too large); this can only return when + * pp_wl_addrs is not NULL. + */ +SVCALL(SD_BLE_GAP_WHITELIST_SET, uint32_t, sd_ble_gap_whitelist_set(adapter_t *adapter, ble_gap_addr_t const * const * pp_wl_addrs, uint8_t len)); + + +/**@brief Set device identity list. + * + * @note Only one device identity list can be used at a time and the list is shared between the BLE roles. + * The device identity list cannot be set if a BLE role is using the list. + * + * @param[in] pp_id_keys Pointer to an array of peer identity addresses and peer IRKs, if NULL the device identity list will be cleared. + * @param[in] pp_local_irks Pointer to an array of local IRKs. Each entry in the array maps to the entry in pp_id_keys at the same index. + * To fill in the list with the currently set device IRK for all peers, set to NULL. + * @param[in] len Length of the device identity list, maximum @ref BLE_GAP_DEVICE_IDENTITIES_MAX_COUNT. + * + * @mscs + * @mmsc{@ref BLE_GAP_PRIVACY_ADV_MSC} + * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_MSC} + * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_PRIVATE_SCAN_MSC} + * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_CONN_PRIV_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_CONN_PRIV_MSC} + * @endmscs + * + * @retval ::NRF_SUCCESS The device identity list successfully set/cleared. + * @retval ::NRF_ERROR_INVALID_ADDR The device identity list (or one of its entries) provided is invalid. + This code may be returned if the local IRK list also has an invalid entry. + * @retval ::BLE_ERROR_GAP_DEVICE_IDENTITIES_IN_USE The device identity list is in use and cannot be set or cleared. + * @retval ::BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE The device identity list contains multiple entries with the same identity address. + * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. + * @retval ::NRF_ERROR_DATA_SIZE The given device identity list size invalid (zero or too large); this can + * only return when pp_id_keys is not NULL. + */ +SVCALL(SD_BLE_GAP_DEVICE_IDENTITIES_SET, uint32_t, sd_ble_gap_device_identities_set(adapter_t *adapter, ble_gap_id_key_t const * const * pp_id_keys, ble_gap_irk_t const * const * pp_local_irks, uint8_t len)); + + +/**@brief Set privacy settings. + * + * @note Privacy settings cannot be set while BLE roles are running. + * + * @param[in] p_privacy_params Privacy settings. + * + * @mscs + * @mmsc{@ref BLE_GAP_PRIVACY_ADV_MSC} + * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_MSC} + * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} + * @endmscs + * + * @retval ::NRF_SUCCESS Set successfully. + * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. + * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. + * @retval ::NRF_ERROR_INVALID_ADDR The pointer to privacy settings is NULL or invalid. + Otherwise, the p_device_irk pointer in privacy parameter is an invalid pointer. + * @retval ::NRF_ERROR_INVALID_PARAM Out of range parameters are provided. + * @retval ::NRF_ERROR_INVALID_STATE Privacy settings cannot be changed while BLE roles using privacy are enabled. + */ +SVCALL(SD_BLE_GAP_PRIVACY_SET, uint32_t, sd_ble_gap_privacy_set(adapter_t *adapter, ble_gap_privacy_params_t const *p_privacy_params)); + + +/**@brief Get privacy settings. + * + * @note The privacy settings returned include the current device irk as well. + * + * @param[in] p_privacy_params Privacy settings. + * + * @retval ::NRF_SUCCESS Privacy settings read. + * @retval ::NRF_ERROR_INVALID_ADDR The pointer given for returning the privacy settings may be NULL or invalid. + Otherwise, the p_device_irk pointer in privacy parameter is an invalid pointer. + */ +SVCALL(SD_BLE_GAP_PRIVACY_GET, uint32_t, sd_ble_gap_privacy_get(adapter_t *adapter, ble_gap_privacy_params_t *p_privacy_params)); + + +/**@brief Set, clear or update advertising and scan response data. + * + * @note The format of the advertising data will be checked by this call to ensure interoperability. + * Limitations imposed by this API call to the data provided include having a flags data type in the scan response data and + * duplicating the local name in the advertising data and scan response data. + * + * @note To clear the advertising data and set it to a 0-length packet, simply provide a valid pointer (p_data/p_sr_data) with its corresponding + * length (dlen/srdlen) set to 0. + * + * @note The call will fail if p_data and p_sr_data are both NULL since this would have no effect. + * + * @mscs + * @mmsc{@ref BLE_GAP_ADV_MSC} + * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} + * @endmscs + * + * @param[in] p_data Raw data to be placed in advertising packet. If NULL, no changes are made to the current advertising packet data. + * @param[in] dlen Data length for p_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_data is NULL, can be 0 if p_data is not NULL. + * @param[in] p_sr_data Raw data to be placed in scan response packet. If NULL, no changes are made to the current scan response packet data. + * @param[in] srdlen Data length for p_sr_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_sr_data is NULL, can be 0 if p_data is not NULL. + * + * @retval ::NRF_SUCCESS Advertising data successfully updated or cleared. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, both p_data and p_sr_data cannot be NULL. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_FLAGS Invalid combination of advertising flags supplied. + * @retval ::NRF_ERROR_INVALID_DATA Invalid data type(s) supplied, check the advertising data format specification. + * @retval ::NRF_ERROR_INVALID_LENGTH Invalid data length(s) supplied. + * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported data type. + * @retval ::BLE_ERROR_GAP_UUID_LIST_MISMATCH Invalid UUID list supplied. + */ +SVCALL(SD_BLE_GAP_ADV_DATA_SET, uint32_t, sd_ble_gap_adv_data_set(adapter_t *adapter, uint8_t const *p_data, uint8_t dlen, uint8_t const *p_sr_data, uint8_t srdlen)); + + +/**@brief Start advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). + * + * @note An application can start an advertising procedure for broadcasting purposes while a connection + * is active. After a @ref BLE_GAP_EVT_CONNECTED event is received, this function may therefore + * be called to start a broadcast advertising procedure. The advertising procedure + * cannot however be connectable (it must be of type @ref BLE_GAP_ADV_TYPE_ADV_SCAN_IND or + * @ref BLE_GAP_ADV_TYPE_ADV_NONCONN_IND). @note Only one advertiser may be active at any time. + * + * @events + * @event{@ref BLE_GAP_EVT_CONNECTED, Generated after connection has been established through connectable advertising.} + * @event{@ref BLE_GAP_EVT_TIMEOUT, Advertisement has timed out.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_ADV_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_CONN_PRIV_MSC} + * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} + * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} + * @endmscs + * + * @param[in] p_adv_params Pointer to advertising parameters structure. + * + * @retval ::NRF_SUCCESS The BLE stack has started advertising. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @retval ::NRF_ERROR_CONN_COUNT The limit of available connections has been reached; connectable advertiser cannot be started. + * @retval ::NRF_ERROR_NO_MEM The configured memory pools (see @ref ble_conn_bw_counts_t) are not large enough for the + * bandwidth selected for this connection. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check the accepted ranges and limits. + * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Bluetooth address supplied. + * @retval ::BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST Discoverable mode and whitelist incompatible. + * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. + * @retval ::NRF_ERROR_RESOURCES Not enough BLE role slots available. + * Stop one or more currently active roles (Central, Peripheral or Observer) and try again + */ +SVCALL(SD_BLE_GAP_ADV_START, uint32_t, sd_ble_gap_adv_start(adapter_t *adapter, ble_gap_adv_params_t const *p_adv_params)); + + +/**@brief Stop advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). + * + * @mscs + * @mmsc{@ref BLE_GAP_ADV_MSC} + * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} + * @endmscs + * + * @retval ::NRF_SUCCESS The BLE stack has stopped advertising. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation (most probably not in advertising state). + */ +SVCALL(SD_BLE_GAP_ADV_STOP, uint32_t, sd_ble_gap_adv_stop(adapter_t *adapter)); + + +/**@brief Update connection parameters. + * + * @details In the central role this will initiate a Link Layer connection parameter update procedure, + * otherwise in the peripheral role, this will send the corresponding L2CAP request and wait for + * the central to perform the procedure. In both cases, and regardless of success or failure, the application + * will be informed of the result with a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE event. + * + * @details This function can be used as a central both to reply to a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST or to start the procedure unrequested. + * + * @events + * @event{@ref BLE_GAP_EVT_CONN_PARAM_UPDATE, Result of the connection parameter update procedure.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_CPU_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} + * @mmsc{@ref BLE_GAP_MULTILINK_CPU_MSC} + * @mmsc{@ref BLE_GAP_MULTILINK_CTRL_PROC_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_CPU_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_conn_params Pointer to desired connection parameters. If NULL is provided on a peripheral role, + * the parameters in the PPCP characteristic of the GAP service will be used instead. + * If NULL is provided on a central role and in response to a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST, the peripheral request will be rejected + * + * @retval ::NRF_SUCCESS The Connection Update procedure has been started successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @retval ::NRF_ERROR_BUSY Procedure already in progress or not allowed at this time, process pending events and wait for pending procedures to complete and retry. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. + */ +SVCALL(SD_BLE_GAP_CONN_PARAM_UPDATE, uint32_t, sd_ble_gap_conn_param_update(adapter_t *adapter, uint16_t conn_handle, ble_gap_conn_params_t const *p_conn_params)); + + +/**@brief Disconnect (GAP Link Termination). + * + * @details This call initiates the disconnection procedure, and its completion will be communicated to the application + * with a @ref BLE_GAP_EVT_DISCONNECTED event. + * + * @events + * @event{@ref BLE_GAP_EVT_DISCONNECTED, Generated when disconnection procedure is complete.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_CONN_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] hci_status_code HCI status code, see @ref BLE_HCI_STATUS_CODES (accepted values are @ref BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION and @ref BLE_HCI_CONN_INTERVAL_UNACCEPTABLE). + * + * @retval ::NRF_SUCCESS The disconnection procedure has been started successfully. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation (disconnection is already in progress). + */ +SVCALL(SD_BLE_GAP_DISCONNECT, uint32_t, sd_ble_gap_disconnect(adapter_t *adapter, uint16_t conn_handle, uint8_t hci_status_code)); + + +/**@brief Set the radio's transmit power. + * + * @param[in] tx_power Radio transmit power in dBm (accepted values are -40, -30, -20, -16, -12, -8, -4, 0, 3, and 4 dBm). + * + * @note The +3dBm setting is only available on nRF52 series ICs. + * @note The -30dBm setting is only available on nRF51 series ICs. + * @note The -40dBm setting is only available on nRF52 series ICs. + * + * @retval ::NRF_SUCCESS Successfully changed the transmit power. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + */ +SVCALL(SD_BLE_GAP_TX_POWER_SET, uint32_t, sd_ble_gap_tx_power_set(adapter_t *adapter, int8_t tx_power)); + + +/**@brief Set GAP Appearance value. + * + * @param[in] appearance Appearance (16-bit), see @ref BLE_APPEARANCES. + * + * @retval ::NRF_SUCCESS Appearance value set successfully. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + */ +SVCALL(SD_BLE_GAP_APPEARANCE_SET, uint32_t, sd_ble_gap_appearance_set(adapter_t *adapter, uint16_t appearance)); + + +/**@brief Get GAP Appearance value. + * + * @param[out] p_appearance Pointer to appearance (16-bit) to be filled in, see @ref BLE_APPEARANCES. + * + * @retval ::NRF_SUCCESS Appearance value retrieved successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_GAP_APPEARANCE_GET, uint32_t, sd_ble_gap_appearance_get(adapter_t *adapter, uint16_t *p_appearance)); + + +/**@brief Set GAP Peripheral Preferred Connection Parameters. + * + * @param[in] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure with the desired parameters. + * + * @retval ::NRF_SUCCESS Peripheral Preferred Connection Parameters set successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + */ +SVCALL(SD_BLE_GAP_PPCP_SET, uint32_t, sd_ble_gap_ppcp_set(adapter_t *adapter, ble_gap_conn_params_t const *p_conn_params)); + + +/**@brief Get GAP Peripheral Preferred Connection Parameters. + * + * @param[out] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure where the parameters will be stored. + * + * @retval ::NRF_SUCCESS Peripheral Preferred Connection Parameters retrieved successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_GAP_PPCP_GET, uint32_t, sd_ble_gap_ppcp_get(adapter_t *adapter, ble_gap_conn_params_t *p_conn_params)); + + +/**@brief Set GAP device name. + * + * @param[in] p_write_perm Write permissions for the Device Name characteristic, see @ref ble_gap_conn_sec_mode_t. + * @param[in] p_dev_name Pointer to a UTF-8 encoded, non NULL-terminated string. + * @param[in] len Length of the UTF-8, non NULL-terminated string pointed to by p_dev_name in octets (must be smaller or equal than @ref BLE_GAP_DEVNAME_MAX_LEN). + * + * @note If the device name is located in application flash memory (see @ref ble_gap_device_name_t), it cannot be changed. Then @ref NRF_ERROR_FORBIDDEN will be returned. + * + * @retval ::NRF_SUCCESS GAP device name and permissions set successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + * @retval ::NRF_ERROR_FORBIDDEN Device name is not writable. + */ +SVCALL(SD_BLE_GAP_DEVICE_NAME_SET, uint32_t, sd_ble_gap_device_name_set(adapter_t *adapter, ble_gap_conn_sec_mode_t const *p_write_perm, uint8_t const *p_dev_name, uint16_t len)); + + +/**@brief Get GAP device name. + * + * @note If the device name is longer than the size of the supplied buffer, + * p_len will return the complete device name length, + * and not the number of bytes actually returned in p_dev_name. + * The application may use this information to allocate a suitable buffer size. + * + * @param[out] p_dev_name Pointer to an empty buffer where the UTF-8 non NULL-terminated string will be placed. Set to NULL to obtain the complete device name length. + * @param[in,out] p_len Length of the buffer pointed by p_dev_name, complete device name length on output. + * + * @retval ::NRF_SUCCESS GAP device name retrieved successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + */ +SVCALL(SD_BLE_GAP_DEVICE_NAME_GET, uint32_t, sd_ble_gap_device_name_get(adapter_t *adapter, uint8_t *p_dev_name, uint16_t *p_len)); + + +/**@brief Initiate the GAP Authentication procedure. + * + * @details In the central role, this function will send an SMP Pairing Request (or an SMP Pairing Failed if rejected), + * otherwise in the peripheral role, an SMP Security Request will be sent. + * + * @events + * @event{Depending on the security parameters set and the packet exchanges with the peer\, the following events may be generated:} + * @event{@ref BLE_GAP_EVT_SEC_PARAMS_REQUEST} + * @event{@ref BLE_GAP_EVT_SEC_INFO_REQUEST} + * @event{@ref BLE_GAP_EVT_PASSKEY_DISPLAY} + * @event{@ref BLE_GAP_EVT_KEY_PRESSED} + * @event{@ref BLE_GAP_EVT_AUTH_KEY_REQUEST} + * @event{@ref BLE_GAP_EVT_LESC_DHKEY_REQUEST} + * @event{@ref BLE_GAP_EVT_CONN_SEC_UPDATE} + * @event{@ref BLE_GAP_EVT_AUTH_STATUS} + * @event{@ref BLE_GAP_EVT_TIMEOUT} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_SEC_REQ_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_SEC_REQ_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_PAIRING_JW_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_JW_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_sec_params Pointer to the @ref ble_gap_sec_params_t structure with the security parameters to be used during the pairing or bonding procedure. + * In the peripheral role, only the bond, mitm, lesc and keypress fields of this structure are used. + * In the central role, this pointer may be NULL to reject a Security Request. + * + * @retval ::NRF_SUCCESS Successfully initiated authentication procedure. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. + * @retval ::NRF_ERROR_NO_MEM The maximum number of authentication procedures that can run in parallel for the given role is reached. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::NRF_ERROR_NOT_SUPPORTED Setting of sign or link fields in @ref ble_gap_sec_kdist_t not supported. + * @retval ::NRF_ERROR_TIMEOUT A SMP timeout has occurred, and further SMP operations on this link is prohibited. + */ +SVCALL(SD_BLE_GAP_AUTHENTICATE, uint32_t, sd_ble_gap_authenticate(adapter_t *adapter, uint16_t conn_handle, ble_gap_sec_params_t const *p_sec_params)); + + +/**@brief Reply with GAP security parameters. + * + * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. + * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. + * + * @events + * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_JW_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_BONDING_JW_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_PERIPH_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_CENTRAL_OOB_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_BONDING_STATIC_PK_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_CONFIRM_FAIL_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_PAIRING_JW_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_PD_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_KS_TOO_SMALL_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_APP_ERROR_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_REMOTE_PAIRING_FAIL_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_TIMEOUT_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_PAIRING_JW_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_JW_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] sec_status Security status, see @ref BLE_GAP_SEC_STATUS. + * @param[in] p_sec_params Pointer to a @ref ble_gap_sec_params_t security parameters structure. In the central role this must be set to NULL, as the parameters have + * already been provided during a previous call to @ref sd_ble_gap_authenticate. + * @param[in,out] p_sec_keyset Pointer to a @ref ble_gap_sec_keyset_t security keyset structure. Any keys generated and/or distributed as a result of the ongoing security procedure + * will be stored into the memory referenced by the pointers inside this structure. The keys will be stored and available to the application + * upon reception of a @ref BLE_GAP_EVT_AUTH_STATUS event. + * Note that the SoftDevice expects the application to provide memory for storing the + * peer's keys. So it must be ensured that the relevant pointers inside this structure are not NULL. The pointers to the local key + * can, however, be NULL, in which case, the local key data will not be available to the application upon reception of the + * @ref BLE_GAP_EVT_AUTH_STATUS event. + * + * @retval ::NRF_SUCCESS Successfully accepted security parameter from the application. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::NRF_ERROR_NOT_SUPPORTED Setting of sign or link fields in @ref ble_gap_sec_kdist_t not supported. + */ +SVCALL(SD_BLE_GAP_SEC_PARAMS_REPLY, uint32_t, sd_ble_gap_sec_params_reply(adapter_t *adapter, uint16_t conn_handle, uint8_t sec_status, ble_gap_sec_params_t const *p_sec_params, ble_gap_sec_keyset_t const *p_sec_keyset)); + + +/**@brief Reply with an authentication key. + * + * @details This function is only used to reply to a @ref BLE_GAP_EVT_AUTH_KEY_REQUEST or a @ref BLE_GAP_EVT_PASSKEY_DISPLAY, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. + * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. + * + * @events + * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_CENTRAL_OOB_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] key_type See @ref BLE_GAP_AUTH_KEY_TYPES. + * @param[in] p_key If key type is @ref BLE_GAP_AUTH_KEY_TYPE_NONE, then NULL. + * If key type is @ref BLE_GAP_AUTH_KEY_TYPE_PASSKEY, then a 6-byte ASCII string (digit 0..9 only, no NULL termination) + * or NULL when confirming LE Secure Connections Numeric Comparison. + * If key type is @ref BLE_GAP_AUTH_KEY_TYPE_OOB, then a 16-byte OOB key value in Little Endian format. + * + * @retval ::NRF_SUCCESS Authentication key successfully set. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_AUTH_KEY_REPLY, uint32_t, sd_ble_gap_auth_key_reply(adapter_t *adapter, uint16_t conn_handle, uint8_t key_type, uint8_t const *p_key)); + +/**@brief Reply with an LE Secure connections DHKey. + * + * @details This function is only used to reply to a @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. + * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. + * + * @events + * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_LESC_PAIRING_JW_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_PD_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_dhkey LE Secure Connections DHKey. + * + * @retval ::NRF_SUCCESS DHKey successfully set. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_LESC_DHKEY_REPLY, uint32_t, sd_ble_gap_lesc_dhkey_reply(adapter_t *adapter, uint16_t conn_handle, ble_gap_lesc_dhkey_t const *p_dhkey)); + +/**@brief Notify the peer of a local keypress. + * + * @details This function can only be used when an authentication procedure using LE Secure Connection is in progress. Calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] kp_not See @ref BLE_GAP_KP_NOT_TYPES. + * + * @retval ::NRF_SUCCESS Keypress notification successfully queued for transmission. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either not entering a passkey or keypresses have not been enabled by both peers. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::NRF_ERROR_BUSY The BLE stack is busy. Retry at later time. + */ +SVCALL(SD_BLE_GAP_KEYPRESS_NOTIFY, uint32_t, sd_ble_gap_keypress_notify(adapter_t *adapter, uint16_t conn_handle, uint8_t kp_not)); + +/**@brief Generate a set of OOB data to send to a peer out of band. + * + * @note The @ref ble_gap_addr_t included in the OOB data returned will be the currently active one (or, if a connection has already been established, + * the one used during connection setup). The application may manually overwrite it with an updated value. + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. Can be BLE_CONN_HANDLE_INVALID if a BLE connection has not been established yet. + * @param[in] p_pk_own LE Secure Connections local P-256 Public Key. + * @param[out] p_oobd_own The OOB data to be sent out of band to a peer. + * + * @retval ::NRF_SUCCESS OOB data successfully generated. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_LESC_OOB_DATA_GET, uint32_t, sd_ble_gap_lesc_oob_data_get(adapter_t *adapter, uint16_t conn_handle, ble_gap_lesc_p256_pk_t const *p_pk_own, ble_gap_lesc_oob_data_t *p_oobd_own)); + +/**@brief Provide the OOB data sent/received out of band. + * + * @note At least one of the 2 pointers provided must be different from NULL. + * @note An authentication procedure with OOB selected as an algorithm must be in progress when calling this function. + * @note A @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST event with the oobd_req set to 1 must have been received prior to calling this function. + * + * @events + * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_oobd_own The OOB data sent out of band to a peer or NULL if none sent. + * @param[in] p_oobd_peer The OOB data received out of band from a peer or NULL if none received. + * + * @retval ::NRF_SUCCESS OOB data accepted. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_LESC_OOB_DATA_SET, uint32_t, sd_ble_gap_lesc_oob_data_set(adapter_t *adapter, uint16_t conn_handle, ble_gap_lesc_oob_data_t const *p_oobd_own, ble_gap_lesc_oob_data_t const *p_oobd_peer)); + +/**@brief Initiate GAP Encryption procedure. + * + * @details In the central role, this function will initiate the encryption procedure using the encryption information provided. + * + * @events + * @event{@ref BLE_GAP_EVT_CONN_SEC_UPDATE, The connection security has been updated.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_ENC_MSC} + * @mmsc{@ref BLE_GAP_MULTILINK_CTRL_PROC_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_SEC_REQ_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_master_id Pointer to a @ref ble_gap_master_id_t master identification structure. + * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. + * + * @retval ::NRF_SUCCESS Successfully initiated authentication procedure. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::BLE_ERROR_INVALID_ROLE Operation is not supported in the Peripheral role. + * @retval ::NRF_ERROR_BUSY Procedure already in progress or not allowed at this time, wait for pending procedures to complete and retry. + */ +SVCALL(SD_BLE_GAP_ENCRYPT, uint32_t, sd_ble_gap_encrypt(adapter_t *adapter, uint16_t conn_handle, ble_gap_master_id_t const *p_master_id, ble_gap_enc_info_t const *p_enc_info)); + + +/**@brief Reply with GAP security information. + * + * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_INFO_REQUEST, calling it at other times will result in @ref NRF_ERROR_INVALID_STATE. + * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. + * @note Data signing is not yet supported, and p_sign_info must therefore be NULL. + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_ENC_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. May be NULL to signal none is available. + * @param[in] p_id_info Pointer to a @ref ble_gap_irk_t identity information structure. May be NULL to signal none is available. + * @param[in] p_sign_info Pointer to a @ref ble_gap_sign_info_t signing information structure. May be NULL to signal none is available. + * + * @retval ::NRF_SUCCESS Successfully accepted security information. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_SEC_INFO_REPLY, uint32_t, sd_ble_gap_sec_info_reply(adapter_t *adapter, uint16_t conn_handle, ble_gap_enc_info_t const *p_enc_info, ble_gap_irk_t const *p_id_info, ble_gap_sign_info_t const *p_sign_info)); + + +/**@brief Get the current connection security. + * + * @param[in] conn_handle Connection handle. + * @param[out] p_conn_sec Pointer to a @ref ble_gap_conn_sec_t structure to be filled in. + * + * @retval ::NRF_SUCCESS Current connection security successfully retrieved. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_CONN_SEC_GET, uint32_t, sd_ble_gap_conn_sec_get(adapter_t *adapter, uint16_t conn_handle, ble_gap_conn_sec_t *p_conn_sec)); + + +/**@brief Start reporting the received signal strength to the application. + * + * A new event is reported whenever the RSSI value changes, until @ref sd_ble_gap_rssi_stop is called. + * + * @events + * @event{@ref BLE_GAP_EVT_RSSI_CHANGED, New RSSI data available. How often the event is generated is + dependent on the settings of the threshold_dbm + and skip_count input parameters.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} + * @mmsc{@ref BLE_GAP_RSSI_FILT_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] threshold_dbm Minimum change in dBm before triggering the @ref BLE_GAP_EVT_RSSI_CHANGED event. Events are disabled if threshold_dbm equals @ref BLE_GAP_RSSI_THRESHOLD_INVALID. + * @param[in] skip_count Number of RSSI samples with a change of threshold_dbm or more before sending a new @ref BLE_GAP_EVT_RSSI_CHANGED event. + * + * @retval ::NRF_SUCCESS Successfully activated RSSI reporting. + * @retval ::NRF_ERROR_INVALID_STATE Disconnection in progress. Invalid state to perform operation. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_RSSI_START, uint32_t, sd_ble_gap_rssi_start(adapter_t *adapter, uint16_t conn_handle, uint8_t threshold_dbm, uint8_t skip_count)); + + +/**@brief Stop reporting the received signal strength. + * + * @note An RSSI change detected before the call but not yet received by the application + * may be reported after @ref sd_ble_gap_rssi_stop has been called. + * + * @mscs + * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} + * @mmsc{@ref BLE_GAP_RSSI_FILT_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * + * @retval ::NRF_SUCCESS Successfully deactivated RSSI reporting. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_RSSI_STOP, uint32_t, sd_ble_gap_rssi_stop(adapter_t *adapter, uint16_t conn_handle)); + + +/**@brief Get the received signal strength for the last connection event. + * + * @ref sd_ble_gap_rssi_start must be called to start reporting RSSI before using this function. @ref NRF_ERROR_NOT_FOUND + * will be returned until RSSI was sampled for the first time after calling @ref sd_ble_gap_rssi_start. + * + * @mscs + * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[out] p_rssi Pointer to the location where the RSSI measurement shall be stored. + * + * @retval ::NRF_SUCCESS Successfully read the RSSI. + * @retval ::NRF_ERROR_NOT_FOUND No sample is available. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is not ongoing, or disconnection in progress. + */ +SVCALL(SD_BLE_GAP_RSSI_GET, uint32_t, sd_ble_gap_rssi_get(adapter_t *adapter, uint16_t conn_handle, int8_t *p_rssi)); + + +/**@brief Start scanning (GAP Discovery procedure, Observer Procedure). + * + * + * @events + * @event{@ref BLE_GAP_EVT_ADV_REPORT, An advertising or scan response packet has been received.} + * @event{@ref BLE_GAP_EVT_TIMEOUT, Scanner has timed out.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_SCAN_MSC} + * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} + * @endmscs + * + * @param[in] p_scan_params Pointer to scan parameters structure. + * + * @retval ::NRF_SUCCESS Successfully initiated scanning procedure. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. + * @retval ::NRF_ERROR_RESOURCES Not enough BLE role slots available. + * Stop one or more currently active roles (Central, Peripheral or Broadcaster) and try again + */ +SVCALL(SD_BLE_GAP_SCAN_START, uint32_t, sd_ble_gap_scan_start(adapter_t *adapter, ble_gap_scan_params_t const *p_scan_params)); + + +/**@brief Stop scanning (GAP Discovery procedure, Observer Procedure). + * + * @mscs + * @mmsc{@ref BLE_GAP_SCAN_MSC} + * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} + * @endmscs + * + * @retval ::NRF_SUCCESS Successfully stopped scanning procedure. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation (most probably not in scanning state). + */ +SVCALL(SD_BLE_GAP_SCAN_STOP, uint32_t, sd_ble_gap_scan_stop(adapter_t *adapter)); + + +/**@brief Create a connection (GAP Link Establishment). + * + * @note If a scanning procedure is currently in progress it will be automatically stopped when calling this function. + * + * @mscs + * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_CONN_PRIV_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_CONN_MSC} + * @endmscs + * + * @param[in] p_peer_addr Pointer to peer address. If the use_whitelist bit is set in @ref ble_gap_scan_params_t, then this is ignored. + * If @ref ble_gap_addr_t::addr_id_peer is set then p_peer_addr must be present in the device identity list + * see @ref sd_ble_gap_device_identities_set. + * @param[in] p_scan_params Pointer to scan parameters structure. + * @param[in] p_conn_params Pointer to desired connection parameters. + * + * @retval ::NRF_SUCCESS Successfully initiated connection procedure. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid parameter(s) pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + - Invalid parameter(s) in p_scan_params or p_conn_params. + - Use of whitelist requested but whitelist has not been set, see @ref sd_ble_gap_whitelist_set. + - Peer address was not present in the device identity list, see @ref sd_ble_gap_device_identities_set. + * @retval ::NRF_ERROR_INVALID_STATE The SoftDevice is in an invalid state to perform this operation. This may be due to an + * existing locally initiated connect procedure, which must complete before initiating again. + * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Peer address. + * @retval ::NRF_ERROR_CONN_COUNT The limit of available connections has been reached. + * @retval ::NRF_ERROR_NO_MEM The configured memory pool (see @ref ble_conn_bw_counts_t) is not large enough for the + * bandwidth selected for this connection. + * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. If another connection is being established + * wait for the corresponding @ref BLE_GAP_EVT_CONNECTED event before calling again. + * @retval ::NRF_ERROR_RESOURCES Not enough BLE role slots available. + * Stop one or more currently active roles (Central, Peripheral or Broadcaster) and try again + */ +SVCALL(SD_BLE_GAP_CONNECT, uint32_t, sd_ble_gap_connect(adapter_t *adapter, ble_gap_addr_t const *p_peer_addr, ble_gap_scan_params_t const *p_scan_params, ble_gap_conn_params_t const *p_conn_params)); + + +/**@brief Cancel a connection establishment. + * + * @mscs + * @mmsc{@ref BLE_GAP_CENTRAL_CONN_MSC} + * @endmscs + * + * @retval ::NRF_SUCCESS Successfully cancelled an ongoing connection procedure. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. + */ +SVCALL(SD_BLE_GAP_CONNECT_CANCEL, uint32_t, sd_ble_gap_connect_cancel(adapter_t *adapter)); + +/** @} */ + +#ifdef __cplusplus +} +#endif +#endif // BLE_GAP_H__ + +/** + @} +*/ diff --git a/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_gatt.h b/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_gatt.h new file mode 100644 index 000000000..53eea73fd --- /dev/null +++ b/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_gatt.h @@ -0,0 +1,220 @@ +/* + * Copyright (c) Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in a processor manufactured by Nordic + * Semiconductor ASA, or in a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/** + @addtogroup BLE_GATT Generic Attribute Profile (GATT) Common + @{ + @brief Common definitions and prototypes for the GATT interfaces. + */ + +#ifndef BLE_GATT_H__ +#define BLE_GATT_H__ + +#include "ble_types.h" +#include "ble_ranges.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @addtogroup BLE_GATT_DEFINES Defines + * @{ */ + +/** @brief Default MTU size, in bytes. */ +#define GATT_MTU_SIZE_DEFAULT 23 + +/**@brief Invalid Attribute Handle. */ +#define BLE_GATT_HANDLE_INVALID 0x0000 + +/**@brief First Attribute Handle. */ +#define BLE_GATT_HANDLE_START 0x0001 + +/**@brief Last Attribute Handle. */ +#define BLE_GATT_HANDLE_END 0xFFFF + +/** @defgroup BLE_GATT_TIMEOUT_SOURCES GATT Timeout sources + * @{ */ +#define BLE_GATT_TIMEOUT_SRC_PROTOCOL 0x00 /**< ATT Protocol timeout. */ +/** @} */ + +/** @defgroup BLE_GATT_WRITE_OPS GATT Write operations + * @{ */ +#define BLE_GATT_OP_INVALID 0x00 /**< Invalid Operation. */ +#define BLE_GATT_OP_WRITE_REQ 0x01 /**< Write Request. */ +#define BLE_GATT_OP_WRITE_CMD 0x02 /**< Write Command. */ +#define BLE_GATT_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ +#define BLE_GATT_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ +#define BLE_GATT_OP_EXEC_WRITE_REQ 0x05 /**< Execute Write Request. */ +/** @} */ + +/** @defgroup BLE_GATT_EXEC_WRITE_FLAGS GATT Execute Write flags + * @{ */ +#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_CANCEL 0x00 /**< Cancel prepared write. */ +#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE 0x01 /**< Execute prepared write. */ +/** @} */ + +/** @defgroup BLE_GATT_HVX_TYPES GATT Handle Value operations + * @{ */ +#define BLE_GATT_HVX_INVALID 0x00 /**< Invalid Operation. */ +#define BLE_GATT_HVX_NOTIFICATION 0x01 /**< Handle Value Notification. */ +#define BLE_GATT_HVX_INDICATION 0x02 /**< Handle Value Indication. */ +/** @} */ + +/** @defgroup BLE_GATT_STATUS_CODES GATT Status Codes + * @{ */ +#define BLE_GATT_STATUS_SUCCESS 0x0000 /**< Success. */ +#define BLE_GATT_STATUS_UNKNOWN 0x0001 /**< Unknown or not applicable status. */ +#define BLE_GATT_STATUS_ATTERR_INVALID 0x0100 /**< ATT Error: Invalid Error Code. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_HANDLE 0x0101 /**< ATT Error: Invalid Attribute Handle. */ +#define BLE_GATT_STATUS_ATTERR_READ_NOT_PERMITTED 0x0102 /**< ATT Error: Read not permitted. */ +#define BLE_GATT_STATUS_ATTERR_WRITE_NOT_PERMITTED 0x0103 /**< ATT Error: Write not permitted. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_PDU 0x0104 /**< ATT Error: Used in ATT as Invalid PDU. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHENTICATION 0x0105 /**< ATT Error: Authenticated link required. */ +#define BLE_GATT_STATUS_ATTERR_REQUEST_NOT_SUPPORTED 0x0106 /**< ATT Error: Used in ATT as Request Not Supported. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_OFFSET 0x0107 /**< ATT Error: Offset specified was past the end of the attribute. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHORIZATION 0x0108 /**< ATT Error: Used in ATT as Insufficient Authorisation. */ +#define BLE_GATT_STATUS_ATTERR_PREPARE_QUEUE_FULL 0x0109 /**< ATT Error: Used in ATT as Prepare Queue Full. */ +#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_FOUND 0x010A /**< ATT Error: Used in ATT as Attribute not found. */ +#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_LONG 0x010B /**< ATT Error: Attribute cannot be read or written using read/write blob requests. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_ENC_KEY_SIZE 0x010C /**< ATT Error: Encryption key size used is insufficient. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_ATT_VAL_LENGTH 0x010D /**< ATT Error: Invalid value size. */ +#define BLE_GATT_STATUS_ATTERR_UNLIKELY_ERROR 0x010E /**< ATT Error: Very unlikely error. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_ENCRYPTION 0x010F /**< ATT Error: Encrypted link required. */ +#define BLE_GATT_STATUS_ATTERR_UNSUPPORTED_GROUP_TYPE 0x0110 /**< ATT Error: Attribute type is not a supported grouping attribute. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_RESOURCES 0x0111 /**< ATT Error: Encrypted link required. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_BEGIN 0x0112 /**< ATT Error: Reserved for Future Use range #1 begin. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_END 0x017F /**< ATT Error: Reserved for Future Use range #1 end. */ +#define BLE_GATT_STATUS_ATTERR_APP_BEGIN 0x0180 /**< ATT Error: Application range begin. */ +#define BLE_GATT_STATUS_ATTERR_APP_END 0x019F /**< ATT Error: Application range end. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_BEGIN 0x01A0 /**< ATT Error: Reserved for Future Use range #2 begin. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_END 0x01DF /**< ATT Error: Reserved for Future Use range #2 end. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_BEGIN 0x01E0 /**< ATT Error: Reserved for Future Use range #3 begin. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_END 0x01FC /**< ATT Error: Reserved for Future Use range #3 end. */ +#define BLE_GATT_STATUS_ATTERR_CPS_CCCD_CONFIG_ERROR 0x01FD /**< ATT Common Profile and Service Error: Client Characteristic Configuration Descriptor improperly configured. */ +#define BLE_GATT_STATUS_ATTERR_CPS_PROC_ALR_IN_PROG 0x01FE /**< ATT Common Profile and Service Error: Procedure Already in Progress. */ +#define BLE_GATT_STATUS_ATTERR_CPS_OUT_OF_RANGE 0x01FF /**< ATT Common Profile and Service Error: Out Of Range. */ +/** @} */ + + +/** @defgroup BLE_GATT_CPF_FORMATS Characteristic Presentation Formats + * @note Found at http://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.gatt.characteristic_presentation_format.xml + * @{ */ +#define BLE_GATT_CPF_FORMAT_RFU 0x00 /**< Reserved For Future Use. */ +#define BLE_GATT_CPF_FORMAT_BOOLEAN 0x01 /**< Boolean. */ +#define BLE_GATT_CPF_FORMAT_2BIT 0x02 /**< Unsigned 2-bit integer. */ +#define BLE_GATT_CPF_FORMAT_NIBBLE 0x03 /**< Unsigned 4-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT8 0x04 /**< Unsigned 8-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT12 0x05 /**< Unsigned 12-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT16 0x06 /**< Unsigned 16-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT24 0x07 /**< Unsigned 24-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT32 0x08 /**< Unsigned 32-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT48 0x09 /**< Unsigned 48-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT64 0x0A /**< Unsigned 64-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT128 0x0B /**< Unsigned 128-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT8 0x0C /**< Signed 2-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT12 0x0D /**< Signed 12-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT16 0x0E /**< Signed 16-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT24 0x0F /**< Signed 24-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT32 0x10 /**< Signed 32-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT48 0x11 /**< Signed 48-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT64 0x12 /**< Signed 64-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT128 0x13 /**< Signed 128-bit integer. */ +#define BLE_GATT_CPF_FORMAT_FLOAT32 0x14 /**< IEEE-754 32-bit floating point. */ +#define BLE_GATT_CPF_FORMAT_FLOAT64 0x15 /**< IEEE-754 64-bit floating point. */ +#define BLE_GATT_CPF_FORMAT_SFLOAT 0x16 /**< IEEE-11073 16-bit SFLOAT. */ +#define BLE_GATT_CPF_FORMAT_FLOAT 0x17 /**< IEEE-11073 32-bit FLOAT. */ +#define BLE_GATT_CPF_FORMAT_DUINT16 0x18 /**< IEEE-20601 format. */ +#define BLE_GATT_CPF_FORMAT_UTF8S 0x19 /**< UTF-8 string. */ +#define BLE_GATT_CPF_FORMAT_UTF16S 0x1A /**< UTF-16 string. */ +#define BLE_GATT_CPF_FORMAT_STRUCT 0x1B /**< Opaque Structure. */ +/** @} */ + +/** @defgroup BLE_GATT_CPF_NAMESPACES GATT Bluetooth Namespaces + * @{ + */ +#define BLE_GATT_CPF_NAMESPACE_BTSIG 0x01 /**< Bluetooth SIG defined Namespace. */ +#define BLE_GATT_CPF_NAMESPACE_DESCRIPTION_UNKNOWN 0x0000 /**< Namespace Description Unknown. */ +/** @} */ + +/** @} */ + +/** @addtogroup BLE_GATT_STRUCTURES Structures + * @{ */ + +/** + * @brief BLE GATT initialization parameters. + */ +typedef struct +{ + uint16_t att_mtu; /**< Maximum size of ATT packet the SoftDevice can send or receive. + If it is 0 then @ref GATT_MTU_SIZE_DEFAULT will be used. + Otherwise @ref GATT_MTU_SIZE_DEFAULT is the minimum value. + @mscs + @mmsc{@ref BLE_GATTC_MTU_EXCHANGE} + @mmsc{@ref BLE_GATTS_MTU_EXCHANGE} + @endmscs + */ +} ble_gatt_enable_params_t; + +/**@brief GATT Characteristic Properties. */ +typedef struct +{ + /* Standard properties */ + uint8_t broadcast :1; /**< Broadcasting of the value permitted. */ + uint8_t read :1; /**< Reading the value permitted. */ + uint8_t write_wo_resp :1; /**< Writing the value with Write Command permitted. */ + uint8_t write :1; /**< Writing the value with Write Request permitted. */ + uint8_t notify :1; /**< Notications of the value permitted. */ + uint8_t indicate :1; /**< Indications of the value permitted. */ + uint8_t auth_signed_wr :1; /**< Writing the value with Signed Write Command permitted. */ +} ble_gatt_char_props_t; + +/**@brief GATT Characteristic Extended Properties. */ +typedef struct +{ + /* Extended properties */ + uint8_t reliable_wr :1; /**< Writing the value with Queued Write operations permitted. */ + uint8_t wr_aux :1; /**< Writing the Characteristic User Description descriptor permitted. */ +} ble_gatt_char_ext_props_t; + +/** @} */ + +#ifdef __cplusplus +} +#endif +#endif // BLE_GATT_H__ + +/** @} */ diff --git a/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_gattc.h b/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_gattc.h new file mode 100644 index 000000000..e11aaaa51 --- /dev/null +++ b/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_gattc.h @@ -0,0 +1,660 @@ +/* + * Copyright (c) Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in a processor manufactured by Nordic + * Semiconductor ASA, or in a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/** + @addtogroup BLE_GATTC Generic Attribute Profile (GATT) Client + @{ + @brief Definitions and prototypes for the GATT Client interface. + */ + +#ifndef BLE_GATTC_H__ +#define BLE_GATTC_H__ + +#include "ble_gatt.h" +#include "ble_types.h" +#include "ble_ranges.h" +#include "nrf_svc.h" +#include "nrf_error.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @addtogroup BLE_GATTC_ENUMERATIONS Enumerations + * @{ */ + +/**@brief GATTC API SVC numbers. */ +enum BLE_GATTC_SVCS +{ + SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER = BLE_GATTC_SVC_BASE, /**< Primary Service Discovery. */ + SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, /**< Relationship Discovery. */ + SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, /**< Characteristic Discovery. */ + SD_BLE_GATTC_DESCRIPTORS_DISCOVER, /**< Characteristic Descriptor Discovery. */ + SD_BLE_GATTC_ATTR_INFO_DISCOVER, /**< Attribute Information Discovery. */ + SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, /**< Read Characteristic Value by UUID. */ + SD_BLE_GATTC_READ, /**< Generic read. */ + SD_BLE_GATTC_CHAR_VALUES_READ, /**< Read multiple Characteristic Values. */ + SD_BLE_GATTC_WRITE, /**< Generic write. */ + SD_BLE_GATTC_HV_CONFIRM, /**< Handle Value Confirmation. */ + SD_BLE_GATTC_EXCHANGE_MTU_REQUEST, /**< Exchange MTU Request. */ +}; + +/** + * @brief GATT Client Event IDs. + */ +enum BLE_GATTC_EVTS +{ + BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP = BLE_GATTC_EVT_BASE, /**< Primary Service Discovery Response event. \n See @ref ble_gattc_evt_prim_srvc_disc_rsp_t. */ + BLE_GATTC_EVT_REL_DISC_RSP, /**< Relationship Discovery Response event. \n See @ref ble_gattc_evt_rel_disc_rsp_t. */ + BLE_GATTC_EVT_CHAR_DISC_RSP, /**< Characteristic Discovery Response event. \n See @ref ble_gattc_evt_char_disc_rsp_t. */ + BLE_GATTC_EVT_DESC_DISC_RSP, /**< Descriptor Discovery Response event. \n See @ref ble_gattc_evt_desc_disc_rsp_t. */ + BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, /**< Attribute Information Response event. \n See @ref ble_gattc_evt_attr_info_disc_rsp_t. */ + BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP, /**< Read By UUID Response event. \n See @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t. */ + BLE_GATTC_EVT_READ_RSP, /**< Read Response event. \n See @ref ble_gattc_evt_read_rsp_t. */ + BLE_GATTC_EVT_CHAR_VALS_READ_RSP, /**< Read multiple Response event. \n See @ref ble_gattc_evt_char_vals_read_rsp_t. */ + BLE_GATTC_EVT_WRITE_RSP, /**< Write Response event. \n See @ref ble_gattc_evt_write_rsp_t. */ + BLE_GATTC_EVT_HVX, /**< Handle Value Notification or Indication event. \n Confirm indication with @ref sd_ble_gattc_hv_confirm. \n See @ref ble_gattc_evt_hvx_t. */ + BLE_GATTC_EVT_EXCHANGE_MTU_RSP, /**< Exchange MTU Response event. \n See @ref ble_gattc_evt_exchange_mtu_rsp_t. */ + BLE_GATTC_EVT_TIMEOUT /**< Timeout event. \n See @ref ble_gattc_evt_timeout_t. */ +}; + +/** @} */ + +/** @addtogroup BLE_GATTC_DEFINES Defines + * @{ */ + +/** @defgroup BLE_ERRORS_GATTC SVC return values specific to GATTC + * @{ */ +#define BLE_ERROR_GATTC_PROC_NOT_PERMITTED (NRF_GATTC_ERR_BASE + 0x000) /**< Procedure not Permitted. */ +/** @} */ + +/** @defgroup BLE_GATTC_ATTR_INFO_FORMAT Attribute Information Formats + * @{ */ +#define BLE_GATTC_ATTR_INFO_FORMAT_16BIT 1 /**< 16-bit Attribute Information Format. */ +#define BLE_GATTC_ATTR_INFO_FORMAT_128BIT 2 /**< 128-bit Attribute Information Format. */ +/** @} */ + +/** @} */ + +/** @addtogroup BLE_GATTC_STRUCTURES Structures + * @{ */ + +/**@brief Operation Handle Range. */ +typedef struct +{ + uint16_t start_handle; /**< Start Handle. */ + uint16_t end_handle; /**< End Handle. */ +} ble_gattc_handle_range_t; + + +/**@brief GATT service. */ +typedef struct +{ + ble_uuid_t uuid; /**< Service UUID. */ + ble_gattc_handle_range_t handle_range; /**< Service Handle Range. */ +} ble_gattc_service_t; + + +/**@brief GATT include. */ +typedef struct +{ + uint16_t handle; /**< Include Handle. */ + ble_gattc_service_t included_srvc; /**< Handle of the included service. */ +} ble_gattc_include_t; + + +/**@brief GATT characteristic. */ +typedef struct +{ + ble_uuid_t uuid; /**< Characteristic UUID. */ + ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ + uint8_t char_ext_props : 1; /**< Extended properties present. */ + uint16_t handle_decl; /**< Handle of the Characteristic Declaration. */ + uint16_t handle_value; /**< Handle of the Characteristic Value. */ +} ble_gattc_char_t; + + +/**@brief GATT descriptor. */ +typedef struct +{ + uint16_t handle; /**< Descriptor Handle. */ + ble_uuid_t uuid; /**< Descriptor UUID. */ +} ble_gattc_desc_t; + + +/**@brief Write Parameters. */ +typedef struct +{ + uint8_t write_op; /**< Write Operation to be performed, see @ref BLE_GATT_WRITE_OPS. */ + uint8_t flags; /**< Flags, see @ref BLE_GATT_EXEC_WRITE_FLAGS. */ + uint16_t handle; /**< Handle to the attribute to be written. */ + uint16_t offset; /**< Offset in bytes. @note For WRITE_CMD and WRITE_REQ, offset must be 0. */ + uint16_t len; /**< Length of data in bytes. */ + uint8_t const *p_value; /**< Pointer to the value data. */ +} ble_gattc_write_params_t; + +/**@brief Attribute Information for 16-bit Attribute UUID. */ +typedef struct +{ + uint16_t handle; /**< Attribute handle. */ + ble_uuid_t uuid; /**< 16-bit Attribute UUID. */ +} ble_gattc_attr_info16_t; + +/**@brief Attribute Information for 128-bit Attribute UUID. */ +typedef struct +{ + uint16_t handle; /**< Attribute handle. */ + ble_uuid128_t uuid; /**< 128-bit Attribute UUID. */ +} ble_gattc_attr_info128_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Service count. */ + ble_gattc_service_t services[1]; /**< Service data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_prim_srvc_disc_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_REL_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Include count. */ + ble_gattc_include_t includes[1]; /**< Include data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_rel_disc_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Characteristic count. */ + ble_gattc_char_t chars[1]; /**< Characteristic data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_char_disc_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_DESC_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Descriptor count. */ + ble_gattc_desc_t descs[1]; /**< Descriptor data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_desc_disc_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Attribute count. */ + uint8_t format; /**< Attribute information format, see @ref BLE_GATTC_ATTR_INFO_FORMAT. */ + union { + ble_gattc_attr_info16_t attr_info16[1]; /**< Attribute information for 16-bit Attribute UUID. + @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ + ble_gattc_attr_info128_t attr_info128[1]; /**< Attribute information for 128-bit Attribute UUID. + @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ + } info; /**< Attribute information union. */ +} ble_gattc_evt_attr_info_disc_rsp_t; + +/**@brief GATT read by UUID handle value pair. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + uint8_t *p_value; /**< Pointer to the Attribute Value, length is available in @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t::value_len. */ +} ble_gattc_handle_value_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP. */ +typedef struct +{ + uint16_t count; /**< Handle-Value Pair Count. */ + uint16_t value_len; /**< Length of the value in Handle-Value(s) list. */ + uint8_t handle_value[1]; /**< Handle-Value(s) list. To iterate through the list use @ref sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter. + @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_char_val_by_uuid_read_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_READ_RSP. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + uint16_t offset; /**< Offset of the attribute data. */ + uint16_t len; /**< Attribute data length. */ + uint8_t data[1]; /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_read_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP. */ +typedef struct +{ + uint16_t len; /**< Concatenated Attribute values length. */ + uint8_t values[1]; /**< Attribute values. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_char_vals_read_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_WRITE_RSP. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + uint8_t write_op; /**< Type of write operation, see @ref BLE_GATT_WRITE_OPS. */ + uint16_t offset; /**< Data offset. */ + uint16_t len; /**< Data length. */ + uint8_t data[1]; /**< Data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_write_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_HVX. */ +typedef struct +{ + uint16_t handle; /**< Handle to which the HVx operation applies. */ + uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ + uint16_t len; /**< Attribute data length. */ + uint8_t data[1]; /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_hvx_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. */ +typedef struct +{ + uint16_t server_rx_mtu; /**< Server RX MTU size. */ +} ble_gattc_evt_exchange_mtu_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_TIMEOUT. */ +typedef struct +{ + uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ +} ble_gattc_evt_timeout_t; + +/**@brief GATTC event structure. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which event occured. */ + uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ + uint16_t error_handle; /**< In case of error: The handle causing the error. In all other cases @ref BLE_GATT_HANDLE_INVALID. */ + union + { + ble_gattc_evt_prim_srvc_disc_rsp_t prim_srvc_disc_rsp; /**< Primary Service Discovery Response Event Parameters. */ + ble_gattc_evt_rel_disc_rsp_t rel_disc_rsp; /**< Relationship Discovery Response Event Parameters. */ + ble_gattc_evt_char_disc_rsp_t char_disc_rsp; /**< Characteristic Discovery Response Event Parameters. */ + ble_gattc_evt_desc_disc_rsp_t desc_disc_rsp; /**< Descriptor Discovery Response Event Parameters. */ + ble_gattc_evt_char_val_by_uuid_read_rsp_t char_val_by_uuid_read_rsp; /**< Characteristic Value Read by UUID Response Event Parameters. */ + ble_gattc_evt_read_rsp_t read_rsp; /**< Read Response Event Parameters. */ + ble_gattc_evt_char_vals_read_rsp_t char_vals_read_rsp; /**< Characteristic Values Read Response Event Parameters. */ + ble_gattc_evt_write_rsp_t write_rsp; /**< Write Response Event Parameters. */ + ble_gattc_evt_hvx_t hvx; /**< Handle Value Notification/Indication Event Parameters. */ + ble_gattc_evt_exchange_mtu_rsp_t exchange_mtu_rsp; /**< Exchange MTU Response Event Parameters. */ + ble_gattc_evt_timeout_t timeout; /**< Timeout Event Parameters. */ + ble_gattc_evt_attr_info_disc_rsp_t attr_info_disc_rsp; /**< Attribute Information Discovery Event Parameters. */ + } params; /**< Event Parameters. @note Only valid if @ref gatt_status == @ref BLE_GATT_STATUS_SUCCESS. */ +} ble_gattc_evt_t; +/** @} */ + +/** @addtogroup BLE_GATTC_FUNCTIONS Functions + * @{ */ + +/**@brief Initiate or continue a GATT Primary Service Discovery procedure. + * + * @details This function initiates or resumes a Primary Service discovery procedure, starting from the supplied handle. + * If the last service has not been reached, this function must be called again with an updated start handle value to continue the search. + * + * @note If any of the discovered services have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with + * type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. + * + * @events + * @event{@ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_PRIM_SRVC_DISC_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] start_handle Handle to start searching from. + * @param[in] p_srvc_uuid Pointer to the service UUID to be found. If it is NULL, all primary services will be returned. + * + * @retval ::NRF_SUCCESS Successfully started or resumed the Primary Service Discovery procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER, uint32_t, sd_ble_gattc_primary_services_discover(adapter_t *adapter, uint16_t conn_handle, uint16_t start_handle, ble_uuid_t const *p_srvc_uuid)); + + +/**@brief Initiate or continue a GATT Relationship Discovery procedure. + * + * @details This function initiates or resumes the Find Included Services sub-procedure. If the last included service has not been reached, + * this must be called again with an updated handle range to continue the search. + * + * @events + * @event{@ref BLE_GATTC_EVT_REL_DISC_RSP} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_REL_DISC_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. + * + * @retval ::NRF_SUCCESS Successfully started or resumed the Relationship Discovery procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, uint32_t, sd_ble_gattc_relationships_discover(adapter_t *adapter, uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); + + +/**@brief Initiate or continue a GATT Characteristic Discovery procedure. + * + * @details This function initiates or resumes a Characteristic discovery procedure. If the last Characteristic has not been reached, + * this must be called again with an updated handle range to continue the discovery. + * + * @note If any of the discovered characteristics have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with + * type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. + * + * @events + * @event{@ref BLE_GATTC_EVT_CHAR_DISC_RSP} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_CHAR_DISC_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. + * + * @retval ::NRF_SUCCESS Successfully started or resumed the Characteristic Discovery procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, uint32_t, sd_ble_gattc_characteristics_discover(adapter_t *adapter, uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); + + +/**@brief Initiate or continue a GATT Characteristic Descriptor Discovery procedure. + * + * @details This function initiates or resumes a Characteristic Descriptor discovery procedure. If the last Descriptor has not been reached, + * this must be called again with an updated handle range to continue the discovery. + * + * @events + * @event{@ref BLE_GATTC_EVT_DESC_DISC_RSP} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_DESC_DISC_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handle_range A pointer to the range of handles of the Characteristic to perform this procedure on. + * + * @retval ::NRF_SUCCESS Successfully started or resumed the Descriptor Discovery procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_DESCRIPTORS_DISCOVER, uint32_t, sd_ble_gattc_descriptors_discover(adapter_t *adapter, uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); + + +/**@brief Initiate or continue a GATT Read using Characteristic UUID procedure. + * + * @details This function initiates or resumes a Read using Characteristic UUID procedure. If the last Characteristic has not been reached, + * this must be called again with an updated handle range to continue the discovery. + * + * @events + * @event{@ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_READ_UUID_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_uuid Pointer to a Characteristic value UUID to read. + * @param[in] p_handle_range A pointer to the range of handles to perform this procedure on. + * + * @retval ::NRF_SUCCESS Successfully started or resumed the Read using Characteristic UUID procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, uint32_t, sd_ble_gattc_char_value_by_uuid_read(adapter_t *adapter, uint16_t conn_handle, ble_uuid_t const *p_uuid, ble_gattc_handle_range_t const *p_handle_range)); + + +/**@brief Initiate or continue a GATT Read (Long) Characteristic or Descriptor procedure. + * + * @details This function initiates or resumes a GATT Read (Long) Characteristic or Descriptor procedure. If the Characteristic or Descriptor + * to be read is longer than ATT_MTU - 1, this function must be called multiple times with appropriate offset to read the + * complete value. + * + * @events + * @event{@ref BLE_GATTC_EVT_READ_RSP} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_VALUE_READ_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] handle The handle of the attribute to be read. + * @param[in] offset Offset into the attribute value to be read. + * + * @retval ::NRF_SUCCESS Successfully started or resumed the Read (Long) procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_READ, uint32_t, sd_ble_gattc_read(adapter_t *adapter, uint16_t conn_handle, uint16_t handle, uint16_t offset)); + + +/**@brief Initiate a GATT Read Multiple Characteristic Values procedure. + * + * @details This function initiates a GATT Read Multiple Characteristic Values procedure. + * + * @events + * @event{@ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_READ_MULT_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handles A pointer to the handle(s) of the attribute(s) to be read. + * @param[in] handle_count The number of handles in p_handles. + * + * @retval ::NRF_SUCCESS Successfully started the Read Multiple Characteristic Values procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_CHAR_VALUES_READ, uint32_t, sd_ble_gattc_char_values_read(adapter_t *adapter, uint16_t conn_handle, uint16_t const *p_handles, uint16_t handle_count)); + + +/**@brief Perform a Write (Characteristic Value or Descriptor, with or without response, signed or not, long or reliable) procedure. + * + * @details This function can perform all write procedures described in GATT. + * + * @note It is important to note that a write without response will consume an application buffer, and will therefore + * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. A write (with response) on the other hand will use the + * standard client internal buffer and thus will only generate a @ref BLE_GATTC_EVT_WRITE_RSP event as soon as the write response + * has been received from the peer. Please see the documentation of @ref sd_ble_tx_packet_count_get for more details. + * + * @events + * @event{@ref BLE_GATTC_EVT_WRITE_RSP, Generated when using write request or queued writes.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_VALUE_WRITE_MSC} + * @mmsc{@ref BLE_GATTC_VALUE_LONG_WRITE_MSC} + * @mmsc{@ref BLE_GATTC_VALUE_RELIABLE_WRITE_MSC} + * @mmsc{@ref BLE_COMMON_APP_BUFF_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_write_params A pointer to a write parameters structure. + * + * @retval ::NRF_SUCCESS Successfully started the Write procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + * @retval ::NRF_ERROR_BUSY Procedure already in progress. + * @retval ::BLE_ERROR_NO_TX_PACKETS No available application packets for this connection. + */ +SVCALL(SD_BLE_GATTC_WRITE, uint32_t, sd_ble_gattc_write(adapter_t *adapter, uint16_t conn_handle, ble_gattc_write_params_t const *p_write_params)); + + +/**@brief Send a Handle Value Confirmation to the GATT Server. + * + * @mscs + * @mmsc{@ref BLE_GATTC_HVI_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] handle The handle of the attribute in the indication. + * + * @retval ::NRF_SUCCESS Successfully queued the Handle Value Confirmation for transmission. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no Indication pending to be confirmed. + * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle. + */ +SVCALL(SD_BLE_GATTC_HV_CONFIRM, uint32_t, sd_ble_gattc_hv_confirm(adapter_t *adapter, uint16_t conn_handle, uint16_t handle)); + +/**@brief Discovers information about a range of attributes on a GATT server. + * + * @events + * @event{@ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, Generated when information about a range of attributes has been received.} + * @endevents + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handle_range The range of handles to request information about. + * + * @retval ::NRF_SUCCESS Successfully started an attribute information discovery procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_ATTR_INFO_DISCOVER, uint32_t, sd_ble_gattc_attr_info_discover(adapter_t *adapter, uint16_t conn_handle, ble_gattc_handle_range_t const * p_handle_range)); + +/**@brief Start an ATT_MTU exchange by sending an Exchange MTU Request to the server. + * + * @details The SoftDevice sets ATT_MTU to the minimum of: + * - The Client RX MTU value, and + * - The Server RX MTU value from @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. + * + * However, the SoftDevice never sets ATT_MTU lower than @ref GATT_MTU_SIZE_DEFAULT. + * + * @events + * @event{@ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP} + * @event{@ref BLE_EVT_DATA_LENGTH_CHANGED, Generated if a data length update procedure is performed after the ATT_MTU exchange.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_MTU_EXCHANGE} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] client_rx_mtu Client RX MTU size. + * - The minimum value is @ref GATT_MTU_SIZE_DEFAULT. + * - The maximum value is @ref ble_gatt_enable_params_t::att_mtu. + * - The value must be equal to Server RX MTU size given in @ref sd_ble_gatts_exchange_mtu_reply + * if an ATT_MTU exchange has already been performed in the other direction. + * + * @retval ::NRF_SUCCESS Successfully sent request to the server. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state or an ATT_MTU exchange was already requested once. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid Client RX MTU size supplied. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + */ +SVCALL(SD_BLE_GATTC_EXCHANGE_MTU_REQUEST, uint32_t, sd_ble_gattc_exchange_mtu_request(adapter_t *adapter, uint16_t conn_handle, uint16_t client_rx_mtu)); + +/**@brief Iterate through Handle-Value(s) list in @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. + * + * @param[in] p_gattc_evt Pointer to event buffer containing @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. + * @note If the buffer contains different event, behavior is undefined. + * @param[in,out] p_iter Iterator, points to @ref ble_gattc_handle_value_t structure that will be filled in with + * the next Handle-Value pair in each iteration. If the function returns other than + * @ref NRF_SUCCESS, it will not be changed. + * - To start iteration, initialize the structure to zero. + * - To continue, pass the value from previous iteration. + * + * \code + * ble_gattc_handle_value_t iter; + * memset(&iter, 0, sizeof(ble_gattc_handle_value_t)); + * while (sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(&ble_evt.evt.gattc_evt, &iter) == NRF_SUCCESS) + * { + * app_handle = iter.handle; + * memcpy(app_value, iter.p_value, ble_evt.evt.gattc_evt.params.char_val_by_uuid_read_rsp.value_len); + * } + * \endcode + * + * @retval ::NRF_SUCCESS Successfully retrieved the next Handle-Value pair. + * @retval ::NRF_ERROR_NOT_FOUND No more Handle-Value pairs available in the list. + */ +static inline uint32_t sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(ble_gattc_evt_t *p_gattc_evt, ble_gattc_handle_value_t *p_iter) +{ + uint32_t value_len = p_gattc_evt->params.char_val_by_uuid_read_rsp.value_len; + uint8_t *p_first = p_gattc_evt->params.char_val_by_uuid_read_rsp.handle_value; + uint8_t *p_next = p_iter->p_value ? p_iter->p_value + value_len : p_first; + + if ((p_next - p_first) / (sizeof(uint16_t) + value_len) < p_gattc_evt->params.char_val_by_uuid_read_rsp.count) + { + p_iter->handle = (uint16_t)p_next[1] << 8 | p_next[0]; + p_iter->p_value = p_next + sizeof(uint16_t); + return NRF_SUCCESS; + } + else + { + return NRF_ERROR_NOT_FOUND; + } +} + +/** @} */ + +#ifdef __cplusplus +} +#endif +#endif /* BLE_GATTC_H__ */ + +/** + @} +*/ diff --git a/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_gatts.h b/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_gatts.h new file mode 100644 index 000000000..104844801 --- /dev/null +++ b/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_gatts.h @@ -0,0 +1,778 @@ +/* + * Copyright (c) Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in a processor manufactured by Nordic + * Semiconductor ASA, or in a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/** + @addtogroup BLE_GATTS Generic Attribute Profile (GATT) Server + @{ + @brief Definitions and prototypes for the GATTS interface. + */ + +#ifndef BLE_GATTS_H__ +#define BLE_GATTS_H__ + +#include "ble_types.h" +#include "ble_ranges.h" +#include "ble_l2cap.h" +#include "ble_gap.h" +#include "ble_gatt.h" +#include "nrf_svc.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @addtogroup BLE_GATTS_ENUMERATIONS Enumerations + * @{ */ + +/** + * @brief GATTS API SVC numbers. + */ +enum BLE_GATTS_SVCS +{ + SD_BLE_GATTS_SERVICE_ADD = BLE_GATTS_SVC_BASE, /**< Add a service. */ + SD_BLE_GATTS_INCLUDE_ADD, /**< Add an included service. */ + SD_BLE_GATTS_CHARACTERISTIC_ADD, /**< Add a characteristic. */ + SD_BLE_GATTS_DESCRIPTOR_ADD, /**< Add a generic attribute. */ + SD_BLE_GATTS_VALUE_SET, /**< Set an attribute value. */ + SD_BLE_GATTS_VALUE_GET, /**< Get an attribute value. */ + SD_BLE_GATTS_HVX, /**< Handle Value Notification or Indication. */ + SD_BLE_GATTS_SERVICE_CHANGED, /**< Perform a Service Changed Indication to one or more peers. */ + SD_BLE_GATTS_RW_AUTHORIZE_REPLY, /**< Reply to an authorization request for a read or write operation on one or more attributes. */ + SD_BLE_GATTS_SYS_ATTR_SET, /**< Set the persistent system attributes for a connection. */ + SD_BLE_GATTS_SYS_ATTR_GET, /**< Retrieve the persistent system attributes. */ + SD_BLE_GATTS_INITIAL_USER_HANDLE_GET, /**< Retrieve the first valid user handle. */ + SD_BLE_GATTS_ATTR_GET, /**< Retrieve the UUID and/or metadata of an attribute. */ + SD_BLE_GATTS_EXCHANGE_MTU_REPLY /**< Reply to Exchange MTU Request. */ +}; + +/** + * @brief GATT Server Event IDs. + */ +enum BLE_GATTS_EVTS +{ + BLE_GATTS_EVT_WRITE = BLE_GATTS_EVT_BASE, /**< Write operation performed. \n See @ref ble_gatts_evt_write_t. */ + BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST, /**< Read/Write Authorization request. \n Reply with @ref sd_ble_gatts_rw_authorize_reply. \n See @ref ble_gatts_evt_rw_authorize_request_t. */ + BLE_GATTS_EVT_SYS_ATTR_MISSING, /**< A persistent system attribute access is pending. \n Respond with @ref sd_ble_gatts_sys_attr_set. \n See @ref ble_gatts_evt_sys_attr_missing_t. */ + BLE_GATTS_EVT_HVC, /**< Handle Value Confirmation. \n See @ref ble_gatts_evt_hvc_t. */ + BLE_GATTS_EVT_SC_CONFIRM, /**< Service Changed Confirmation. No additional event structure applies. */ + BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST, /**< Exchange MTU Request. \n Reply with @ref sd_ble_gatts_exchange_mtu_reply. \n See @ref ble_gatts_evt_exchange_mtu_request_t. */ + BLE_GATTS_EVT_TIMEOUT /**< Peer failed to resonpond to an ATT request in time. \n See @ref ble_gatts_evt_timeout_t. */ +}; +/** @} */ + +/** @addtogroup BLE_GATTS_DEFINES Defines + * @{ */ + +/** @defgroup BLE_ERRORS_GATTS SVC return values specific to GATTS + * @{ */ +#define BLE_ERROR_GATTS_INVALID_ATTR_TYPE (NRF_GATTS_ERR_BASE + 0x000) /**< Invalid attribute type. */ +#define BLE_ERROR_GATTS_SYS_ATTR_MISSING (NRF_GATTS_ERR_BASE + 0x001) /**< System Attributes missing. */ +/** @} */ + +/** @defgroup BLE_GATTS_ATTR_LENS_MAX Maximum attribute lengths + * @{ */ +#define BLE_GATTS_FIX_ATTR_LEN_MAX (510) /**< Maximum length for fixed length Attribute Values. */ +#define BLE_GATTS_VAR_ATTR_LEN_MAX (512) /**< Maximum length for variable length Attribute Values. */ +/** @} */ + +/** @defgroup BLE_GATTS_SRVC_TYPES GATT Server Service Types + * @{ */ +#define BLE_GATTS_SRVC_TYPE_INVALID 0x00 /**< Invalid Service Type. */ +#define BLE_GATTS_SRVC_TYPE_PRIMARY 0x01 /**< Primary Service. */ +#define BLE_GATTS_SRVC_TYPE_SECONDARY 0x02 /**< Secondary Type. */ +/** @} */ + + +/** @defgroup BLE_GATTS_ATTR_TYPES GATT Server Attribute Types + * @{ */ +#define BLE_GATTS_ATTR_TYPE_INVALID 0x00 /**< Invalid Attribute Type. */ +#define BLE_GATTS_ATTR_TYPE_PRIM_SRVC_DECL 0x01 /**< Primary Service Declaration. */ +#define BLE_GATTS_ATTR_TYPE_SEC_SRVC_DECL 0x02 /**< Secondary Service Declaration. */ +#define BLE_GATTS_ATTR_TYPE_INC_DECL 0x03 /**< Include Declaration. */ +#define BLE_GATTS_ATTR_TYPE_CHAR_DECL 0x04 /**< Characteristic Declaration. */ +#define BLE_GATTS_ATTR_TYPE_CHAR_VAL 0x05 /**< Characteristic Value. */ +#define BLE_GATTS_ATTR_TYPE_DESC 0x06 /**< Descriptor. */ +#define BLE_GATTS_ATTR_TYPE_OTHER 0x07 /**< Other, non-GATT specific type. */ +/** @} */ + + +/** @defgroup BLE_GATTS_OPS GATT Server Operations + * @{ */ +#define BLE_GATTS_OP_INVALID 0x00 /**< Invalid Operation. */ +#define BLE_GATTS_OP_WRITE_REQ 0x01 /**< Write Request. */ +#define BLE_GATTS_OP_WRITE_CMD 0x02 /**< Write Command. */ +#define BLE_GATTS_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ +#define BLE_GATTS_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ +#define BLE_GATTS_OP_EXEC_WRITE_REQ_CANCEL 0x05 /**< Execute Write Request: Cancel all prepared writes. */ +#define BLE_GATTS_OP_EXEC_WRITE_REQ_NOW 0x06 /**< Execute Write Request: Immediately execute all prepared writes. */ +/** @} */ + +/** @defgroup BLE_GATTS_VLOCS GATT Value Locations + * @{ */ +#define BLE_GATTS_VLOC_INVALID 0x00 /**< Invalid Location. */ +#define BLE_GATTS_VLOC_STACK 0x01 /**< Attribute Value is located in stack memory, no user memory is required. */ +#define BLE_GATTS_VLOC_USER 0x02 /**< Attribute Value is located in user memory. This requires the user to maintain a valid buffer through the lifetime of the attribute, since the stack + will read and write directly to the memory using the pointer provided in the APIs. There are no alignment requirements for the buffer. */ +/** @} */ + +/** @defgroup BLE_GATTS_AUTHORIZE_TYPES GATT Server Authorization Types + * @{ */ +#define BLE_GATTS_AUTHORIZE_TYPE_INVALID 0x00 /**< Invalid Type. */ +#define BLE_GATTS_AUTHORIZE_TYPE_READ 0x01 /**< Authorize a Read Operation. */ +#define BLE_GATTS_AUTHORIZE_TYPE_WRITE 0x02 /**< Authorize a Write Request Operation. */ +/** @} */ + +/** @defgroup BLE_GATTS_SYS_ATTR_FLAGS System Attribute Flags + * @{ */ +#define BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS (1 << 0) /**< Restrict system attributes to system services only. */ +#define BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS (1 << 1) /**< Restrict system attributes to user services only. */ +/** @} */ + +/** @defgroup BLE_GATTS_ATTR_TAB_SIZE Attribute Table size + * @{ + */ +#define BLE_GATTS_ATTR_TAB_SIZE_MIN 248 /**< Minimum Attribute Table size */ +#define BLE_GATTS_ATTR_TAB_SIZE_DEFAULT 0x0000 /**< Default Attribute Table size (0x580 bytes for this version of the SoftDevice). */ +/** @} */ + +/** @} */ + +/** @addtogroup BLE_GATTS_STRUCTURES Structures + * @{ */ + +/** + * @brief BLE GATTS initialization parameters. + */ +typedef struct +{ + uint8_t service_changed:1; /**< Include the Service Changed characteristic in the Attribute Table. */ + uint32_t attr_tab_size; /**< Attribute Table size in bytes. The size must be a multiple of 4. @ref BLE_GATTS_ATTR_TAB_SIZE_DEFAULT is used to set the default size. */ +} ble_gatts_enable_params_t; + +/**@brief Attribute metadata. */ +typedef struct +{ + ble_gap_conn_sec_mode_t read_perm; /**< Read permissions. */ + ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ + uint8_t vlen :1; /**< Variable length attribute. */ + uint8_t vloc :2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ + uint8_t rd_auth :1; /**< Read authorization and value will be requested from the application on every read operation. */ + uint8_t wr_auth :1; /**< Write authorization will be requested from the application on every Write Request operation (but not Write Command). */ +} ble_gatts_attr_md_t; + + +/**@brief GATT Attribute. */ +typedef struct +{ + ble_uuid_t *p_uuid; /**< Pointer to the attribute UUID. */ + ble_gatts_attr_md_t *p_attr_md; /**< Pointer to the attribute metadata structure. */ + uint16_t init_len; /**< Initial attribute value length in bytes. */ + uint16_t init_offs; /**< Initial attribute value offset in bytes. If different from zero, the first init_offs bytes of the attribute value will be left uninitialized. */ + uint16_t max_len; /**< Maximum attribute value length in bytes, see @ref BLE_GATTS_ATTR_LENS_MAX for maximum values. */ + uint8_t* p_value; /**< Pointer to the attribute data. Please note that if the @ref BLE_GATTS_VLOC_USER value location is selected in the attribute metadata, this will have to point to a buffer + that remains valid through the lifetime of the attribute. This excludes usage of automatic variables that may go out of scope or any other temporary location. + The stack may access that memory directly without the application's knowledge. For writable characteristics, this value must not be a location in flash memory.*/ +} ble_gatts_attr_t; + +/**@brief GATT Attribute Value. */ +typedef struct +{ + uint16_t len; /**< Length in bytes to be written or read. Length in bytes written or read after successful return.*/ + uint16_t offset; /**< Attribute value offset. */ + uint8_t *p_value; /**< Pointer to where value is stored or will be stored. + If value is stored in user memory, only the attribute length is updated when p_value == NULL. + Set to NULL when reading to obtain the complete length of the attribute value */ +} ble_gatts_value_t; + + +/**@brief GATT Characteristic Presentation Format. */ +typedef struct +{ + uint8_t format; /**< Format of the value, see @ref BLE_GATT_CPF_FORMATS. */ + int8_t exponent; /**< Exponent for integer data types. */ + uint16_t unit; /**< Unit from Bluetooth Assigned Numbers. */ + uint8_t name_space; /**< Namespace from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ + uint16_t desc; /**< Namespace description from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ +} ble_gatts_char_pf_t; + + +/**@brief GATT Characteristic metadata. */ +typedef struct +{ + ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ + ble_gatt_char_ext_props_t char_ext_props; /**< Characteristic Extended Properties. */ + uint8_t *p_char_user_desc; /**< Pointer to a UTF-8 encoded string (non-NULL terminated), NULL if the descriptor is not required. */ + uint16_t char_user_desc_max_size; /**< The maximum size in bytes of the user description descriptor. */ + uint16_t char_user_desc_size; /**< The size of the user description, must be smaller or equal to char_user_desc_max_size. */ + ble_gatts_char_pf_t* p_char_pf; /**< Pointer to a presentation format structure or NULL if the CPF descriptor is not required. */ + ble_gatts_attr_md_t* p_user_desc_md; /**< Attribute metadata for the User Description descriptor, or NULL for default values. */ + ble_gatts_attr_md_t* p_cccd_md; /**< Attribute metadata for the Client Characteristic Configuration Descriptor, or NULL for default values. */ + ble_gatts_attr_md_t* p_sccd_md; /**< Attribute metadata for the Server Characteristic Configuration Descriptor, or NULL for default values. */ +} ble_gatts_char_md_t; + + +/**@brief GATT Characteristic Definition Handles. */ +typedef struct +{ + uint16_t value_handle; /**< Handle to the characteristic value. */ + uint16_t user_desc_handle; /**< Handle to the User Description descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ + uint16_t cccd_handle; /**< Handle to the Client Characteristic Configuration Descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ + uint16_t sccd_handle; /**< Handle to the Server Characteristic Configuration Descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ +} ble_gatts_char_handles_t; + + +/**@brief GATT HVx parameters. */ +typedef struct +{ + uint16_t handle; /**< Characteristic Value Handle. */ + uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ + uint16_t offset; /**< Offset within the attribute value. */ + uint16_t *p_len; /**< Length in bytes to be written, length in bytes written after successful return. */ + uint8_t *p_data; /**< Actual data content, use NULL to use the current attribute value. */ +} ble_gatts_hvx_params_t; + +/**@brief GATT Authorization parameters. */ +typedef struct +{ + uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ + uint8_t update : 1; /**< If set, data supplied in p_data will be used to update the attribute value. + Please note that for @ref BLE_GATTS_AUTHORIZE_TYPE_WRITE operations this bit must always be set, + as the data to be written needs to be stored and later provided by the application. */ + uint16_t offset; /**< Offset of the attribute value being updated. */ + uint16_t len; /**< Length in bytes of the value in p_data pointer, see @ref BLE_GATTS_ATTR_LENS_MAX. */ + const uint8_t *p_data; /**< Pointer to new value used to update the attribute value. */ +} ble_gatts_authorize_params_t; + +/**@brief GATT Read or Write Authorize Reply parameters. */ +typedef struct +{ + uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ + union { + ble_gatts_authorize_params_t read; /**< Read authorization parameters. */ + ble_gatts_authorize_params_t write; /**< Write authorization parameters. */ + } params; /**< Reply Parameters. */ +} ble_gatts_rw_authorize_reply_params_t; + + + +/**@brief Event structure for @ref BLE_GATTS_EVT_WRITE. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + ble_uuid_t uuid; /**< Attribute UUID. */ + uint8_t op; /**< Type of write operation, see @ref BLE_GATTS_OPS. */ + uint8_t auth_required; /**< Writing operation deferred due to authorization requirement. Application may use @ref sd_ble_gatts_value_set to finalise the writing operation. */ + uint16_t offset; /**< Offset for the write operation. */ + uint16_t len; /**< Length of the received data. */ + uint8_t data[1]; /**< Received data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gatts_evt_write_t; + +/**@brief Event substructure for authorized read requests, see @ref ble_gatts_evt_rw_authorize_request_t. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + ble_uuid_t uuid; /**< Attribute UUID. */ + uint16_t offset; /**< Offset for the read operation. */ +} ble_gatts_evt_read_t; + +/**@brief Event structure for @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST. */ +typedef struct +{ + uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ + union { + ble_gatts_evt_read_t read; /**< Attribute Read Parameters. */ + ble_gatts_evt_write_t write; /**< Attribute Write Parameters. */ + } request; /**< Request Parameters. */ +} ble_gatts_evt_rw_authorize_request_t; + +/**@brief Event structure for @ref BLE_GATTS_EVT_SYS_ATTR_MISSING. */ +typedef struct +{ + uint8_t hint; /**< Hint (currently unused). */ +} ble_gatts_evt_sys_attr_missing_t; + + +/**@brief Event structure for @ref BLE_GATTS_EVT_HVC. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ +} ble_gatts_evt_hvc_t; + +/**@brief Event structure for @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST. */ +typedef struct +{ + uint16_t client_rx_mtu; /**< Client RX MTU size. */ +} ble_gatts_evt_exchange_mtu_request_t; + +/**@brief Event structure for @ref BLE_GATTS_EVT_TIMEOUT. */ +typedef struct +{ + uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ +} ble_gatts_evt_timeout_t; + + +/**@brief GATTS event structure. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which the event occurred. */ + union + { + ble_gatts_evt_write_t write; /**< Write Event Parameters. */ + ble_gatts_evt_rw_authorize_request_t authorize_request; /**< Read or Write Authorize Request Parameters. */ + ble_gatts_evt_sys_attr_missing_t sys_attr_missing; /**< System attributes missing. */ + ble_gatts_evt_hvc_t hvc; /**< Handle Value Confirmation Event Parameters. */ + ble_gatts_evt_exchange_mtu_request_t exchange_mtu_request; /**< Exchange MTU Request Event Parameters. */ + ble_gatts_evt_timeout_t timeout; /**< Timeout Event. */ + } params; /**< Event Parameters. */ +} ble_gatts_evt_t; + +/** @} */ + +/** @addtogroup BLE_GATTS_FUNCTIONS Functions + * @{ */ + +/**@brief Add a service declaration to the Attribute Table. + * + * @note Secondary Services are only relevant in the context of the entity that references them, it is therefore forbidden to + * add a secondary service declaration that is not referenced by another service later in the Attribute Table. + * + * @mscs + * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} + * @endmscs + * + * @param[in] type Toggles between primary and secondary services, see @ref BLE_GATTS_SRVC_TYPES. + * @param[in] p_uuid Pointer to service UUID. + * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. + * + * @retval ::NRF_SUCCESS Successfully added a service declaration. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, Vendor Specific UUIDs need to be present in the table. + * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. + * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. + */ +SVCALL(SD_BLE_GATTS_SERVICE_ADD, uint32_t, sd_ble_gatts_service_add(adapter_t *adapter, uint8_t type, ble_uuid_t const *p_uuid, uint16_t *p_handle)); + + +/**@brief Add an include declaration to the Attribute Table. + * + * @note It is currently only possible to add an include declaration to the last added service (i.e. only sequential population is supported at this time). + * + * @note The included service must already be present in the Attribute Table prior to this call. + * + * @mscs + * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} + * @endmscs + * + * @param[in] service_handle Handle of the service where the included service is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. + * @param[in] inc_srvc_handle Handle of the included service. + * @param[out] p_include_handle Pointer to a 16-bit word where the assigned handle will be stored. + * + * @retval ::NRF_SUCCESS Successfully added an include declaration. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, handle values need to match previously added services. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. + * @retval ::NRF_ERROR_NOT_SUPPORTED Feature is not supported, service_handle must be that of the last added service. + * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, self inclusions are not allowed. + * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. + */ +SVCALL(SD_BLE_GATTS_INCLUDE_ADD, uint32_t, sd_ble_gatts_include_add(adapter_t *adapter, uint16_t service_handle, uint16_t inc_srvc_handle, uint16_t *p_include_handle)); + + +/**@brief Add a characteristic declaration, a characteristic value declaration and optional characteristic descriptor declarations to the Attribute Table. + * + * @note It is currently only possible to add a characteristic to the last added service (i.e. only sequential population is supported at this time). + * + * @note Several restrictions apply to the parameters, such as matching permissions between the user description descriptor and the writeable auxiliaries bits, + * readable (no security) and writeable (selectable) CCCDs and SCCDs and valid presentation format values. + * + * @note If no metadata is provided for the optional descriptors, their permissions will be derived from the characteristic permissions. + * + * @mscs + * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} + * @endmscs + * + * @param[in] service_handle Handle of the service where the characteristic is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. + * @param[in] p_char_md Characteristic metadata. + * @param[in] p_attr_char_value Pointer to the attribute structure corresponding to the characteristic value. + * @param[out] p_handles Pointer to the structure where the assigned handles will be stored. + * + * @retval ::NRF_SUCCESS Successfully added a characteristic. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, service handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a service context is required. + * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. + * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. + */ +SVCALL(SD_BLE_GATTS_CHARACTERISTIC_ADD, uint32_t, sd_ble_gatts_characteristic_add(adapter_t *adapter, uint16_t service_handle, ble_gatts_char_md_t const *p_char_md, ble_gatts_attr_t const *p_attr_char_value, ble_gatts_char_handles_t *p_handles)); + + +/**@brief Add a descriptor to the Attribute Table. + * + * @note It is currently only possible to add a descriptor to the last added characteristic (i.e. only sequential population is supported at this time). + * + * @mscs + * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} + * @endmscs + * + * @param[in] char_handle Handle of the characteristic where the descriptor is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. + * @param[in] p_attr Pointer to the attribute structure. + * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. + * + * @retval ::NRF_SUCCESS Successfully added a descriptor. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, characteristic handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a characteristic context is required. + * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. + * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. + */ +SVCALL(SD_BLE_GATTS_DESCRIPTOR_ADD, uint32_t, sd_ble_gatts_descriptor_add(adapter_t *adapter, uint16_t char_handle, ble_gatts_attr_t const *p_attr, uint16_t *p_handle)); + +/**@brief Set the value of a given attribute. + * + * @note Values other than system attributes can be set at any time, regardless of wheter any active connections exist. + * + * @mscs + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. If the value does not belong to a system attribute then @ref BLE_CONN_HANDLE_INVALID can be used. + * @param[in] handle Attribute handle. + * @param[in,out] p_value Attribute value information. + * + * @retval ::NRF_SUCCESS Successfully set the value of the attribute. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. + * @retval ::NRF_ERROR_FORBIDDEN Forbidden handle supplied, certain attributes are not modifiable by the application. + * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::BLE_ERROR_GATTS_INVALID_ATTR_TYPE @ref BLE_CONN_HANDLE_INVALID supplied on a system attribute. + */ +SVCALL(SD_BLE_GATTS_VALUE_SET, uint32_t, sd_ble_gatts_value_set(adapter_t *adapter, uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value)); + +/**@brief Get the value of a given attribute. + * + * @note If the attribute value is longer than the size of the supplied buffer, + * p_len will return the total attribute value length (excluding offset), + * and not the number of bytes actually returned in p_data. + * The application may use this information to allocate a suitable buffer size. + * + * @note When retrieving system attribute values with this function, the connection handle + * may refer to an already disconnected connection. Refer to the documentation of + * @ref sd_ble_gatts_sys_attr_get for further information. + * + * @param[in] conn_handle Connection handle. If the value does not belong to a system attribute then @ref BLE_CONN_HANDLE_INVALID can be used. + * @param[in] handle Attribute handle. + * @param[in,out] p_value Attribute value information. + * + * @retval ::NRF_SUCCESS Successfully retrieved the value of the attribute. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid attribute offset supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::BLE_ERROR_GATTS_INVALID_ATTR_TYPE @ref BLE_CONN_HANDLE_INVALID supplied on a system attribute. + * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. + */ +SVCALL(SD_BLE_GATTS_VALUE_GET, uint32_t, sd_ble_gatts_value_get(adapter_t *adapter, uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value)); + +/**@brief Notify or Indicate an attribute value. + * + * @details This function checks for the relevant Client Characteristic Configuration descriptor value to verify that the relevant operation + * (notification or indication) has been enabled by the client. It is also able to update the attribute value before issuing the PDU, so that + * the application can atomically perform a value update and a server initiated transaction with a single API call. + * If the application chooses to indicate an attribute value, a @ref BLE_GATTS_EVT_HVC event will be issued as soon as the confirmation arrives from + * the peer. + * + * @note The local attribute value may be updated even if an outgoing packet is not sent to the peer due to an error during execution. + * The Attribute Table has been updated if one of the following error codes is returned: @ref NRF_ERROR_INVALID_STATE, @ref NRF_ERROR_BUSY, + * @ref NRF_ERROR_FORBIDDEN, @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING and @ref BLE_ERROR_NO_TX_PACKETS. + * The caller can check whether the value has been updated by looking at the contents of *(p_hvx_params->p_len). + * + * @note It is important to note that a notification will consume an application buffer, and will therefore + * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. An indication on the other hand will use the + * standard server internal buffer and thus will only generate a @ref BLE_GATTS_EVT_HVC event as soon as the confirmation + * has been received from the peer. Please see the documentation of @ref sd_ble_tx_packet_count_get for more details. + * + * @events + * @event{@ref BLE_EVT_TX_COMPLETE, Transmission complete.} + * @event{@ref BLE_GATTS_EVT_HVC, Confirmation received from peer.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTS_HVX_SYS_ATTRS_MISSING_MSC} + * @mmsc{@ref BLE_GATTS_HVN_MSC} + * @mmsc{@ref BLE_GATTS_HVI_MSC} + * @mmsc{@ref BLE_GATTS_HVX_DISABLED_MSC} + * @mmsc{@ref BLE_COMMON_APP_BUFF_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_hvx_params Pointer to an HVx parameters structure. If the p_data member contains a non-NULL pointer the attribute value will be updated with + * the contents pointed by it before sending the notification or indication. + * + * @retval ::NRF_SUCCESS Successfully queued a notification or indication for transmission, and optionally updated the attribute value. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE One or more of the following is true: + * - Invalid Connection State + * - Notifications and/or indications not enabled in the CCCD + * - An ATT_MTU exchange is ongoing + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied. Only attributes added directly by the application are available to notify and indicate. + * @retval ::BLE_ERROR_GATTS_INVALID_ATTR_TYPE Invalid attribute type(s) supplied, only characteristic values may be notified and indicated. + * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. + * @retval ::NRF_ERROR_FORBIDDEN The connection's current security level is lower than the one required by the write permissions of the CCCD associated with this characteristic. + * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + * @retval ::NRF_ERROR_BUSY Procedure already in progress. + * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. + * @retval ::BLE_ERROR_NO_TX_PACKETS No available application packets for this connection, applies only to notifications. + */ +SVCALL(SD_BLE_GATTS_HVX, uint32_t, sd_ble_gatts_hvx(adapter_t *adapter, uint16_t conn_handle, ble_gatts_hvx_params_t const *p_hvx_params)); + +/**@brief Indicate the Service Changed attribute value. + * + * @details This call will send a Handle Value Indication to one or more peers connected to inform them that the Attribute + * Table layout has changed. As soon as the peer has confirmed the indication, a @ref BLE_GATTS_EVT_SC_CONFIRM event will + * be issued. + * + * @note Some of the restrictions and limitations that apply to @ref sd_ble_gatts_hvx also apply here. + * + * @events + * @event{@ref BLE_GATTS_EVT_SC_CONFIRM, Confirmation of attribute table change received from peer.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTS_SC_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] start_handle Start of affected attribute handle range. + * @param[in] end_handle End of affected attribute handle range. + * + * @retval ::NRF_SUCCESS Successfully queued the Service Changed indication for transmission. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_NOT_SUPPORTED Service Changed not enabled at initialization. See @ref sd_ble_enable and @ref ble_gatts_enable_params_t. + * @retval ::NRF_ERROR_INVALID_STATE One or more of the following is true: + * - Invalid Connection State + * - Notifications and/or indications not enabled in the CCCD + * - An ATT_MTU exchange is ongoing + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied, handles must be in the range populated by the application. + * @retval ::NRF_ERROR_BUSY Procedure already in progress. + * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. + */ +SVCALL(SD_BLE_GATTS_SERVICE_CHANGED, uint32_t, sd_ble_gatts_service_changed(adapter_t *adapter, uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle)); + +/**@brief Respond to a Read/Write authorization request. + * + * @note This call should only be used as a response to a @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST event issued to the application. + * + * @mscs + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} + * @mmsc{@ref BLE_GATTS_READ_REQ_AUTH_MSC} + * @mmsc{@ref BLE_GATTS_WRITE_REQ_AUTH_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_PEER_CANCEL_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_rw_authorize_reply_params Pointer to a structure with the attribute provided by the application. + * + * @note @ref ble_gatts_authorize_params_t::p_data is ignored when this function is used to respond + * to a @ref BLE_GATTS_AUTHORIZE_TYPE_READ event if @ref ble_gatts_authorize_params_t::update + * is set to 0. + * + * @retval ::NRF_SUCCESS Successfully queued a response to the peer, and in the case of a write operation, Attribute Table updated. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no authorization request pending. + * @retval ::NRF_ERROR_INVALID_PARAM Authorization op invalid, + * handle supplied does not match requested handle, + * or invalid data to be written provided by the application. + * @retval ::NRF_ERROR_BUSY The stack is busy. Retry at later time. + */ +SVCALL(SD_BLE_GATTS_RW_AUTHORIZE_REPLY, uint32_t, sd_ble_gatts_rw_authorize_reply(adapter_t *adapter, uint16_t conn_handle, ble_gatts_rw_authorize_reply_params_t const *p_rw_authorize_reply_params)); + + +/**@brief Update persistent system attribute information. + * + * @details Supply information about persistent system attributes to the stack, + * previously obtained using @ref sd_ble_gatts_sys_attr_get. + * This call is only allowed for active connections, and is usually + * made immediately after a connection is established with an known bonded device, + * often as a response to a @ref BLE_GATTS_EVT_SYS_ATTR_MISSING. + * + * p_sysattrs may point directly to the application's stored copy of the system attributes + * obtained using @ref sd_ble_gatts_sys_attr_get. + * If the pointer is NULL, the system attribute info is initialized, assuming that + * the application does not have any previously saved system attribute data for this device. + * + * @note The state of persistent system attributes is reset upon connection establishment and then remembered for its duration. + * + * @note If this call returns with an error code different from @ref NRF_SUCCESS, the storage of persistent system attributes may have been completed only partially. + * This means that the state of the attribute table is undefined, and the application should either provide a new set of attributes using this same call or + * reset the SoftDevice to return to a known state. + * + * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS is used with this function, only the system attributes included in system services will be modified. + * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS is used with this function, only the system attributes included in user services will be modified. + * + * @mscs + * @mmsc{@ref BLE_GATTS_HVX_SYS_ATTRS_MISSING_MSC} + * @mmsc{@ref BLE_GATTS_SYS_ATTRS_UNK_PEER_MSC} + * @mmsc{@ref BLE_GATTS_SYS_ATTRS_BONDED_PEER_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_sys_attr_data Pointer to a saved copy of system attributes supplied to the stack, or NULL. + * @param[in] len Size of data pointed by p_sys_attr_data, in octets. + * @param[in] flags Optional additional flags, see @ref BLE_GATTS_SYS_ATTR_FLAGS + * + * @retval ::NRF_SUCCESS Successfully set the system attribute information. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid flags supplied. + * @retval ::NRF_ERROR_INVALID_DATA Invalid data supplied, the data should be exactly the same as retrieved with @ref sd_ble_gatts_sys_attr_get. + * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @retval ::NRF_ERROR_BUSY The stack is busy. Retry at later time. + */ +SVCALL(SD_BLE_GATTS_SYS_ATTR_SET, uint32_t, sd_ble_gatts_sys_attr_set(adapter_t *adapter, uint16_t conn_handle, uint8_t const *p_sys_attr_data, uint16_t len, uint32_t flags)); + + +/**@brief Retrieve persistent system attribute information from the stack. + * + * @details This call is used to retrieve information about values to be stored perisistently by the application + * during the lifetime of a connection or after it has been terminated. When a new connection is established with the same bonded device, + * the system attribute information retrieved with this function should be restored using using @ref sd_ble_gatts_sys_attr_set. + * If retrieved after disconnection, the data should be read before a new connection established. The connection handle for + * the previous, now disconnected, connection will remain valid until a new one is created to allow this API call to refer to it. + * Connection handles belonging to active connections can be used as well, but care should be taken since the system attributes + * may be written to at any time by the peer during a connection's lifetime. + * + * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS is used with this function, only the system attributes included in system services will be returned. + * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS is used with this function, only the system attributes included in user services will be returned. + * + * @mscs + * @mmsc{@ref BLE_GATTS_SYS_ATTRS_BONDED_PEER_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle of the recently terminated connection. + * @param[out] p_sys_attr_data Pointer to a buffer where updated information about system attributes will be filled in. The format of the data is described + * in @ref BLE_GATTS_SYS_ATTRS_FORMAT. NULL can be provided to obtain the length of the data. + * @param[in,out] p_len Size of application buffer if p_sys_attr_data is not NULL. Unconditially updated to actual length of system attribute data. + * @param[in] flags Optional additional flags, see @ref BLE_GATTS_SYS_ATTR_FLAGS + * + * @retval ::NRF_SUCCESS Successfully retrieved the system attribute information. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid flags supplied. + * @retval ::NRF_ERROR_DATA_SIZE The system attribute information did not fit into the provided buffer. + * @retval ::NRF_ERROR_NOT_FOUND No system attributes found. + */ +SVCALL(SD_BLE_GATTS_SYS_ATTR_GET, uint32_t, sd_ble_gatts_sys_attr_get(adapter_t *adapter, uint16_t conn_handle, uint8_t *p_sys_attr_data, uint16_t *p_len, uint32_t flags)); + + +/**@brief Retrieve the first valid user attribute handle. + * + * @param[out] p_handle Pointer to an integer where the handle will be stored. + * + * @retval ::NRF_SUCCESS Successfully retrieved the handle. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_GATTS_INITIAL_USER_HANDLE_GET, uint32_t, sd_ble_gatts_initial_user_handle_get(adapter_t *adapter, uint16_t *p_handle)); + +/**@brief Retrieve the attribute UUID and/or metadata. + * + * @param[in] handle Attribute handle + * @param[out] p_uuid UUID of the attribute. Use NULL to omit this field. + * @param[out] p_md Metadata of the attribute. Use NULL to omit this field. + * + * @retval ::NRF_SUCCESS Successfully retrieved the attribute metadata, + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameters supplied. Returned when both @c p_uuid and @c p_md are NULL. + * @retval ::NRF_ERROR_NOT_FOUND Attribute was not found. + */ +SVCALL(SD_BLE_GATTS_ATTR_GET, uint32_t, sd_ble_gatts_attr_get(adapter_t *adapter, uint16_t handle, ble_uuid_t * p_uuid, ble_gatts_attr_md_t * p_md)); + +/**@brief Reply to an ATT_MTU exchange request by sending an Exchange MTU Response to the client. + * + * @details This function is only used to reply to a @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST event. + * + * @details The SoftDevice sets ATT_MTU to the minimum of: + * - The Client RX MTU value from @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST, and + * - The Server RX MTU value. + * + * However, the SoftDevice never sets ATT_MTU lower than @ref GATT_MTU_SIZE_DEFAULT. + * + * @events + * @event{@ref BLE_EVT_DATA_LENGTH_CHANGED, Generated if a data length update procedure is performed after the ATT_MTU exchange.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTS_MTU_EXCHANGE} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] server_rx_mtu Server RX MTU size. + * - The minimum value is @ref GATT_MTU_SIZE_DEFAULT. + * - The maximum value is @ref ble_gatt_enable_params_t::att_mtu. + * - The value must be equal to Client RX MTU size given in @ref sd_ble_gattc_exchange_mtu_request + * if an ATT_MTU exchange has already been performed in the other direction. + * + * @retval ::NRF_SUCCESS Successfully sent response to the client. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no ATT_MTU exchange request pending. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid Server RX MTU size supplied. + * @retval ::NRF_ERROR_BUSY The stack is busy. Retry at later time. + */ +SVCALL(SD_BLE_GATTS_EXCHANGE_MTU_REPLY, uint32_t, sd_ble_gatts_exchange_mtu_reply(adapter_t *adapter, uint16_t conn_handle, uint16_t server_rx_mtu)); +/** @} */ + +#ifdef __cplusplus +} +#endif +#endif // BLE_GATTS_H__ + +/** + @} +*/ diff --git a/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_hci.h b/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_hci.h new file mode 100644 index 000000000..4a9620ce2 --- /dev/null +++ b/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_hci.h @@ -0,0 +1,131 @@ +/* + * Copyright (c) Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in a processor manufactured by Nordic + * Semiconductor ASA, or in a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/** + @addtogroup BLE_COMMON + @{ +*/ + + +#ifndef BLE_HCI_H__ +#define BLE_HCI_H__ +#ifdef __cplusplus +extern "C" { +#endif + +/** @defgroup BLE_HCI_STATUS_CODES Bluetooth status codes + * @{ */ + +#define BLE_HCI_STATUS_CODE_SUCCESS 0x00 /**< Success. */ +#define BLE_HCI_STATUS_CODE_UNKNOWN_BTLE_COMMAND 0x01 /**< Unknown BLE Command. */ +#define BLE_HCI_STATUS_CODE_UNKNOWN_CONNECTION_IDENTIFIER 0x02 /**< Unknown Connection Identifier. */ +/*0x03 Hardware Failure +0x04 Page Timeout +*/ +#define BLE_HCI_AUTHENTICATION_FAILURE 0x05 /**< Authentication Failure. */ +#define BLE_HCI_STATUS_CODE_PIN_OR_KEY_MISSING 0x06 /**< Pin or Key missing. */ +#define BLE_HCI_MEMORY_CAPACITY_EXCEEDED 0x07 /**< Memory Capacity Exceeded. */ +#define BLE_HCI_CONNECTION_TIMEOUT 0x08 /**< Connection Timeout. */ +/*0x09 Connection Limit Exceeded +0x0A Synchronous Connection Limit To A Device Exceeded +0x0B ACL Connection Already Exists*/ +#define BLE_HCI_STATUS_CODE_COMMAND_DISALLOWED 0x0C /**< Command Disallowed. */ +/*0x0D Connection Rejected due to Limited Resources +0x0E Connection Rejected Due To Security Reasons +0x0F Connection Rejected due to Unacceptable BD_ADDR +0x10 Connection Accept Timeout Exceeded +0x11 Unsupported Feature or Parameter Value*/ +#define BLE_HCI_STATUS_CODE_INVALID_BTLE_COMMAND_PARAMETERS 0x12 /**< Invalid BLE Command Parameters. */ +#define BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION 0x13 /**< Remote User Terminated Connection. */ +#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES 0x14 /**< Remote Device Terminated Connection due to low resources.*/ +#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF 0x15 /**< Remote Device Terminated Connection due to power off. */ +#define BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTION 0x16 /**< Local Host Terminated Connection. */ +/* +0x17 Repeated Attempts +0x18 Pairing Not Allowed +0x19 Unknown LMP PDU +*/ +#define BLE_HCI_UNSUPPORTED_REMOTE_FEATURE 0x1A /**< Unsupported Remote Feature. */ +/* +0x1B SCO Offset Rejected +0x1C SCO Interval Rejected +0x1D SCO Air Mode Rejected*/ +#define BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS 0x1E /**< Invalid LMP Parameters. */ +#define BLE_HCI_STATUS_CODE_UNSPECIFIED_ERROR 0x1F /**< Unspecified Error. */ +/*0x20 Unsupported LMP Parameter Value +0x21 Role Change Not Allowed +*/ +#define BLE_HCI_STATUS_CODE_LMP_RESPONSE_TIMEOUT 0x22 /**< LMP Response Timeout. */ +/*0x23 LMP Error Transaction Collision*/ +#define BLE_HCI_STATUS_CODE_LMP_PDU_NOT_ALLOWED 0x24 /**< LMP PDU Not Allowed. */ +/*0x25 Encryption Mode Not Acceptable +0x26 Link Key Can Not be Changed +0x27 Requested QoS Not Supported +*/ +#define BLE_HCI_INSTANT_PASSED 0x28 /**< Instant Passed. */ +#define BLE_HCI_PAIRING_WITH_UNIT_KEY_UNSUPPORTED 0x29 /**< Pairing with Unit Key Unsupported. */ +#define BLE_HCI_DIFFERENT_TRANSACTION_COLLISION 0x2A /**< Different Transaction Collision. */ +/* +0x2B Reserved +0x2C QoS Unacceptable Parameter +0x2D QoS Rejected +0x2E Channel Classification Not Supported +0x2F Insufficient Security +0x30 Parameter Out Of Mandatory Range +0x31 Reserved +0x32 Role Switch Pending +0x33 Reserved +0x34 Reserved Slot Violation +0x35 Role Switch Failed +0x36 Extended Inquiry Response Too Large +0x37 Secure Simple Pairing Not Supported By Host. +0x38 Host Busy - Pairing +0x39 Connection Rejected due to No Suitable Channel Found*/ +#define BLE_HCI_CONTROLLER_BUSY 0x3A /**< Controller Busy. */ +#define BLE_HCI_CONN_INTERVAL_UNACCEPTABLE 0x3B /**< Connection Interval Unacceptable. */ +#define BLE_HCI_DIRECTED_ADVERTISER_TIMEOUT 0x3C /**< Directed Adverisement Timeout. */ +#define BLE_HCI_CONN_TERMINATED_DUE_TO_MIC_FAILURE 0x3D /**< Connection Terminated due to MIC Failure. */ +#define BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED 0x3E /**< Connection Failed to be Established. */ + +/** @} */ + + +#ifdef __cplusplus +} +#endif +#endif // BLE_HCI_H__ + +/** @} */ diff --git a/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_l2cap.h b/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_l2cap.h new file mode 100644 index 000000000..f46df795c --- /dev/null +++ b/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_l2cap.h @@ -0,0 +1,202 @@ +/* + * Copyright (c) Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in a processor manufactured by Nordic + * Semiconductor ASA, or in a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/** + @addtogroup BLE_L2CAP Logical Link Control and Adaptation Protocol (L2CAP) + @{ + @brief Definitions and prototypes for the L2CAP interface. + */ + +#ifndef BLE_L2CAP_H__ +#define BLE_L2CAP_H__ + +#include "ble_types.h" +#include "ble_ranges.h" +#include "ble_err.h" +#include "nrf_svc.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/**@addtogroup BLE_L2CAP_ENUMERATIONS Enumerations + * @{ */ + +/**@brief L2CAP API SVC numbers. */ +enum BLE_L2CAP_SVCS +{ + SD_BLE_L2CAP_CID_REGISTER = BLE_L2CAP_SVC_BASE, /**< Register a CID. */ + SD_BLE_L2CAP_CID_UNREGISTER, /**< Unregister a CID. */ + SD_BLE_L2CAP_TX /**< Transmit a packet. */ +}; + +/**@brief L2CAP Event IDs. */ +enum BLE_L2CAP_EVTS +{ + BLE_L2CAP_EVT_RX = BLE_L2CAP_EVT_BASE /**< L2CAP packet received. */ +}; + +/** @} */ + +/**@addtogroup BLE_L2CAP_DEFINES Defines + * @{ */ + +/**@defgroup BLE_ERRORS_L2CAP SVC return values specific to L2CAP + * @{ */ +#define BLE_ERROR_L2CAP_CID_IN_USE (NRF_L2CAP_ERR_BASE + 0x000) /**< CID already in use. */ +/** @} */ + +/**@brief Default L2CAP MTU. */ +#define BLE_L2CAP_MTU_DEF (23) + +/**@brief Invalid Channel Identifier. */ +#define BLE_L2CAP_CID_INVALID (0x0000) + +/**@brief Dynamic Channel Identifier base. */ +#define BLE_L2CAP_CID_DYN_BASE (0x0040) + +/**@brief Maximum amount of dynamic CIDs. */ +#define BLE_L2CAP_CID_DYN_MAX (8) + +/** @} */ + +/**@addtogroup BLE_L2CAP_STRUCTURES Structures + * @{ */ + +/**@brief Packet header format for L2CAP transmission. */ +typedef struct +{ + uint16_t len; /**< Length of valid info in data member. */ + uint16_t cid; /**< Channel ID on which packet is transmitted. */ +} ble_l2cap_header_t; + + +/**@brief L2CAP Received packet event report. */ +typedef struct +{ + ble_l2cap_header_t header; /**< L2CAP packet header. */ + uint8_t data[1]; /**< Packet data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_l2cap_evt_rx_t; + + +/**@brief L2CAP event callback event structure. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which event occured. */ + union + { + ble_l2cap_evt_rx_t rx; /**< RX Event parameters. */ + } params; /**< Event Parameters. */ +} ble_l2cap_evt_t; + +/** @} */ + +/**@addtogroup BLE_L2CAP_FUNCTIONS Functions + * @{ */ + +/**@brief Register a CID with L2CAP. + * + * @details This registers a higher protocol layer with the L2CAP multiplexer, and is requried prior to all operations on the CID. + * + * @mscs + * @mmsc{@ref BLE_L2CAP_API_MSC} + * @endmscs + * + * @param[in] cid L2CAP CID. + * + * @retval ::NRF_SUCCESS Successfully registered a CID with the L2CAP layer. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, CID must be above @ref BLE_L2CAP_CID_DYN_BASE. + * @retval ::BLE_ERROR_L2CAP_CID_IN_USE L2CAP CID already in use. + * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. + */ +SVCALL(SD_BLE_L2CAP_CID_REGISTER, uint32_t, sd_ble_l2cap_cid_register(adapter_t *adapter, uint16_t cid)); + +/**@brief Unregister a CID with L2CAP. + * + * @details This unregisters a previously registerd higher protocol layer with the L2CAP multiplexer. + * + * @mscs + * @mmsc{@ref BLE_L2CAP_API_MSC} + * @endmscs + * + * @param[in] cid L2CAP CID. + * + * @retval ::NRF_SUCCESS Successfully unregistered the CID. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_NOT_FOUND CID not previously registered. + */ +SVCALL(SD_BLE_L2CAP_CID_UNREGISTER, uint32_t, sd_ble_l2cap_cid_unregister(adapter_t *adapter, uint16_t cid)); + +/**@brief Transmit an L2CAP packet. + * + * @note It is important to note that a call to this function will consume an application packet, and will therefore + * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. + * Please see the documentation of @ref sd_ble_tx_packet_count_get for more details. + * + * @events + * @event{@ref BLE_EVT_TX_COMPLETE} + * @event{@ref BLE_L2CAP_EVT_RX} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_L2CAP_API_MSC} + * @endmscs + * + * @param[in] conn_handle Connection Handle. + * @param[in] p_header Pointer to a packet header containing length and CID. + * @param[in] p_data Pointer to the data to be transmitted. + * + * @retval ::NRF_SUCCESS Successfully queued an L2CAP packet for transmission. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, CIDs must be registered beforehand with @ref sd_ble_l2cap_cid_register. + * @retval ::NRF_ERROR_NOT_FOUND CID not found. + * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @retval ::BLE_ERROR_NO_TX_PACKETS Not enough application packets available. + * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, see @ref BLE_L2CAP_MTU_DEF. + */ +SVCALL(SD_BLE_L2CAP_TX, uint32_t, sd_ble_l2cap_tx(adapter_t *adapter, uint16_t conn_handle, ble_l2cap_header_t const *p_header, uint8_t const *p_data)); + +/** @} */ + +#ifdef __cplusplus +} +#endif +#endif // BLE_L2CAP_H__ + +/** + @} +*/ diff --git a/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_ranges.h b/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_ranges.h new file mode 100644 index 000000000..24cbb5633 --- /dev/null +++ b/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_ranges.h @@ -0,0 +1,138 @@ +/* + * Copyright (c) Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in a processor manufactured by Nordic + * Semiconductor ASA, or in a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/** + @addtogroup BLE_COMMON + @{ + @defgroup ble_ranges Module specific SVC, event and option number subranges + @{ + + @brief Definition of SVC, event and option number subranges for each API module. + + @note + SVCs, event and option numbers are split into subranges for each API module. + Each module receives its entire allocated range of SVC calls, whether implemented or not, + but return BLE_ERROR_NOT_SUPPORTED for unimplemented or undefined calls in its range. + + Note that the symbols BLE__SVC_LAST is the end of the allocated SVC range, + rather than the last SVC function call actually defined and implemented. + + Specific SVC, event and option values are defined in each module's ble_.h file, + which defines names of each individual SVC code based on the range start value. +*/ + +#ifndef BLE_RANGES_H__ +#define BLE_RANGES_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#define BLE_SVC_BASE 0x60 /**< Common BLE SVC base. */ +#define BLE_SVC_LAST 0x6B /**< Common BLE SVC last. */ + + +#define BLE_GAP_SVC_BASE 0x6C /**< GAP BLE SVC base. */ +#define BLE_GAP_SVC_LAST 0x93 /**< GAP BLE SVC last. */ + + +#define BLE_GATTC_SVC_BASE 0x94 /**< GATTC BLE SVC base. */ +#define BLE_GATTC_SVC_LAST 0x9F /**< GATTC BLE SVC last. */ + + +#define BLE_GATTS_SVC_BASE 0xA0 /**< GATTS BLE SVC base. */ +#define BLE_GATTS_SVC_LAST 0xAF /**< GATTS BLE SVC last. */ + + +#define BLE_L2CAP_SVC_BASE 0xB0 /**< L2CAP BLE SVC base. */ +#define BLE_L2CAP_SVC_LAST 0xBF /**< L2CAP BLE SVC last. */ + + +#define BLE_EVT_INVALID 0x00 /**< Invalid BLE Event. */ + + +#define BLE_EVT_BASE 0x01 /**< Common BLE Event base. */ +#define BLE_EVT_LAST 0x0F /**< Common BLE Event last. */ + + +#define BLE_GAP_EVT_BASE 0x10 /**< GAP BLE Event base. */ +#define BLE_GAP_EVT_LAST 0x2F /**< GAP BLE Event last. */ + + +#define BLE_GATTC_EVT_BASE 0x30 /**< GATTC BLE Event base. */ +#define BLE_GATTC_EVT_LAST 0x4F /**< GATTC BLE Event last. */ + + +#define BLE_GATTS_EVT_BASE 0x50 /**< GATTS BLE Event base. */ +#define BLE_GATTS_EVT_LAST 0x6F /**< GATTS BLE Event last. */ + + +#define BLE_L2CAP_EVT_BASE 0x70 /**< L2CAP BLE Event base. */ +#define BLE_L2CAP_EVT_LAST 0x8F /**< L2CAP BLE Event last. */ + + +#define BLE_OPT_INVALID 0x00 /**< Invalid BLE Option. */ + + +#define BLE_OPT_BASE 0x01 /**< Common BLE Option base. */ +#define BLE_OPT_LAST 0x1F /**< Common BLE Option last. */ + + +#define BLE_GAP_OPT_BASE 0x20 /**< GAP BLE Option base. */ +#define BLE_GAP_OPT_LAST 0x3F /**< GAP BLE Option last. */ + + +#define BLE_GATTC_OPT_BASE 0x40 /**< GATTC BLE Option base. */ +#define BLE_GATTC_OPT_LAST 0x5F /**< GATTC BLE Option last. */ + + +#define BLE_GATTS_OPT_BASE 0x60 /**< GATTS BLE Option base. */ +#define BLE_GATTS_OPT_LAST 0x7F /**< GATTS BLE Option last. */ + + +#define BLE_L2CAP_OPT_BASE 0x80 /**< L2CAP BLE Option base. */ +#define BLE_L2CAP_OPT_LAST 0x9F /**< L2CAP BLE Option last. */ + + +#ifdef __cplusplus +} +#endif +#endif /* BLE_RANGES_H__ */ + +/** + @} + @} +*/ diff --git a/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_types.h b/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_types.h new file mode 100644 index 000000000..79c7fefe1 --- /dev/null +++ b/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_types.h @@ -0,0 +1,205 @@ +/* + * Copyright (c) Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in a processor manufactured by Nordic + * Semiconductor ASA, or in a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/** + @addtogroup BLE_COMMON + @{ + @defgroup ble_types Common types and macro definitions + @{ + + @brief Common types and macro definitions for the BLE SoftDevice. + */ + +#ifndef BLE_TYPES_H__ +#define BLE_TYPES_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** @addtogroup BLE_TYPES_DEFINES Defines + * @{ */ + +/** @defgroup BLE_CONN_HANDLES BLE Connection Handles + * @{ */ +#define BLE_CONN_HANDLE_INVALID 0xFFFF /**< Invalid Connection Handle. */ +#define BLE_CONN_HANDLE_ALL 0xFFFE /**< Applies to all Connection Handles. */ +/** @} */ + + +/** @defgroup BLE_UUID_VALUES Assigned Values for BLE UUIDs + * @{ */ +/* Generic UUIDs, applicable to all services */ +#define BLE_UUID_UNKNOWN 0x0000 /**< Reserved UUID. */ +#define BLE_UUID_SERVICE_PRIMARY 0x2800 /**< Primary Service. */ +#define BLE_UUID_SERVICE_SECONDARY 0x2801 /**< Secondary Service. */ +#define BLE_UUID_SERVICE_INCLUDE 0x2802 /**< Include. */ +#define BLE_UUID_CHARACTERISTIC 0x2803 /**< Characteristic. */ +#define BLE_UUID_DESCRIPTOR_CHAR_EXT_PROP 0x2900 /**< Characteristic Extended Properties Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CHAR_USER_DESC 0x2901 /**< Characteristic User Description Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CLIENT_CHAR_CONFIG 0x2902 /**< Client Characteristic Configuration Descriptor. */ +#define BLE_UUID_DESCRIPTOR_SERVER_CHAR_CONFIG 0x2903 /**< Server Characteristic Configuration Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CHAR_PRESENTATION_FORMAT 0x2904 /**< Characteristic Presentation Format Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CHAR_AGGREGATE_FORMAT 0x2905 /**< Characteristic Aggregate Format Descriptor. */ +/* GATT specific UUIDs */ +#define BLE_UUID_GATT 0x1801 /**< Generic Attribute Profile. */ +#define BLE_UUID_GATT_CHARACTERISTIC_SERVICE_CHANGED 0x2A05 /**< Service Changed Characteristic. */ +/* GAP specific UUIDs */ +#define BLE_UUID_GAP 0x1800 /**< Generic Access Profile. */ +#define BLE_UUID_GAP_CHARACTERISTIC_DEVICE_NAME 0x2A00 /**< Device Name Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_APPEARANCE 0x2A01 /**< Appearance Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_RECONN_ADDR 0x2A03 /**< Reconnection Address Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_PPCP 0x2A04 /**< Peripheral Preferred Connection Parameters Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_CAR 0x2AA6 /**< Central Address Resolution Characteristic. */ +/** @} */ + + +/** @defgroup BLE_UUID_TYPES Types of UUID + * @{ */ +#define BLE_UUID_TYPE_UNKNOWN 0x00 /**< Invalid UUID type. */ +#define BLE_UUID_TYPE_BLE 0x01 /**< Bluetooth SIG UUID (16-bit). */ +#define BLE_UUID_TYPE_VENDOR_BEGIN 0x02 /**< Vendor UUID types start at this index (128-bit). */ +/** @} */ + + +/** @defgroup BLE_APPEARANCES Bluetooth Appearance values + * @note Retrieved from http://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml + * @{ */ +#define BLE_APPEARANCE_UNKNOWN 0 /**< Unknown. */ +#define BLE_APPEARANCE_GENERIC_PHONE 64 /**< Generic Phone. */ +#define BLE_APPEARANCE_GENERIC_COMPUTER 128 /**< Generic Computer. */ +#define BLE_APPEARANCE_GENERIC_WATCH 192 /**< Generic Watch. */ +#define BLE_APPEARANCE_WATCH_SPORTS_WATCH 193 /**< Watch: Sports Watch. */ +#define BLE_APPEARANCE_GENERIC_CLOCK 256 /**< Generic Clock. */ +#define BLE_APPEARANCE_GENERIC_DISPLAY 320 /**< Generic Display. */ +#define BLE_APPEARANCE_GENERIC_REMOTE_CONTROL 384 /**< Generic Remote Control. */ +#define BLE_APPEARANCE_GENERIC_EYE_GLASSES 448 /**< Generic Eye-glasses. */ +#define BLE_APPEARANCE_GENERIC_TAG 512 /**< Generic Tag. */ +#define BLE_APPEARANCE_GENERIC_KEYRING 576 /**< Generic Keyring. */ +#define BLE_APPEARANCE_GENERIC_MEDIA_PLAYER 640 /**< Generic Media Player. */ +#define BLE_APPEARANCE_GENERIC_BARCODE_SCANNER 704 /**< Generic Barcode Scanner. */ +#define BLE_APPEARANCE_GENERIC_THERMOMETER 768 /**< Generic Thermometer. */ +#define BLE_APPEARANCE_THERMOMETER_EAR 769 /**< Thermometer: Ear. */ +#define BLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR 832 /**< Generic Heart rate Sensor. */ +#define BLE_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT 833 /**< Heart Rate Sensor: Heart Rate Belt. */ +#define BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE 896 /**< Generic Blood Pressure. */ +#define BLE_APPEARANCE_BLOOD_PRESSURE_ARM 897 /**< Blood Pressure: Arm. */ +#define BLE_APPEARANCE_BLOOD_PRESSURE_WRIST 898 /**< Blood Pressure: Wrist. */ +#define BLE_APPEARANCE_GENERIC_HID 960 /**< Human Interface Device (HID). */ +#define BLE_APPEARANCE_HID_KEYBOARD 961 /**< Keyboard (HID Subtype). */ +#define BLE_APPEARANCE_HID_MOUSE 962 /**< Mouse (HID Subtype). */ +#define BLE_APPEARANCE_HID_JOYSTICK 963 /**< Joystiq (HID Subtype). */ +#define BLE_APPEARANCE_HID_GAMEPAD 964 /**< Gamepad (HID Subtype). */ +#define BLE_APPEARANCE_HID_DIGITIZERSUBTYPE 965 /**< Digitizer Tablet (HID Subtype). */ +#define BLE_APPEARANCE_HID_CARD_READER 966 /**< Card Reader (HID Subtype). */ +#define BLE_APPEARANCE_HID_DIGITAL_PEN 967 /**< Digital Pen (HID Subtype). */ +#define BLE_APPEARANCE_HID_BARCODE 968 /**< Barcode Scanner (HID Subtype). */ +#define BLE_APPEARANCE_GENERIC_GLUCOSE_METER 1024 /**< Generic Glucose Meter. */ +#define BLE_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR 1088 /**< Generic Running Walking Sensor. */ +#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE 1089 /**< Running Walking Sensor: In-Shoe. */ +#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE 1090 /**< Running Walking Sensor: On-Shoe. */ +#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP 1091 /**< Running Walking Sensor: On-Hip. */ +#define BLE_APPEARANCE_GENERIC_CYCLING 1152 /**< Generic Cycling. */ +#define BLE_APPEARANCE_CYCLING_CYCLING_COMPUTER 1153 /**< Cycling: Cycling Computer. */ +#define BLE_APPEARANCE_CYCLING_SPEED_SENSOR 1154 /**< Cycling: Speed Sensor. */ +#define BLE_APPEARANCE_CYCLING_CADENCE_SENSOR 1155 /**< Cycling: Cadence Sensor. */ +#define BLE_APPEARANCE_CYCLING_POWER_SENSOR 1156 /**< Cycling: Power Sensor. */ +#define BLE_APPEARANCE_CYCLING_SPEED_CADENCE_SENSOR 1157 /**< Cycling: Speed and Cadence Sensor. */ +#define BLE_APPEARANCE_GENERIC_PULSE_OXIMETER 3136 /**< Generic Pulse Oximeter. */ +#define BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP 3137 /**< Fingertip (Pulse Oximeter subtype). */ +#define BLE_APPEARANCE_PULSE_OXIMETER_WRIST_WORN 3138 /**< Wrist Worn(Pulse Oximeter subtype). */ +#define BLE_APPEARANCE_GENERIC_WEIGHT_SCALE 3200 /**< Generic Weight Scale. */ +#define BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS_ACT 5184 /**< Generic Outdoor Sports Activity. */ +#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_DISP 5185 /**< Location Display Device (Outdoor Sports Activity subtype). */ +#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_DISP 5186 /**< Location and Navigation Display Device (Outdoor Sports Activity subtype). */ +#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_POD 5187 /**< Location Pod (Outdoor Sports Activity subtype). */ +#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_POD 5188 /**< Location and Navigation Pod (Outdoor Sports Activity subtype). */ +/** @} */ + +/** @brief Set .type and .uuid fields of ble_uuid_struct to specified uuid value. */ +#define BLE_UUID_BLE_ASSIGN(instance, value) do {\ + instance.type = BLE_UUID_TYPE_BLE; \ + instance.uuid = value;} while(0) + +/** @brief Copy type and uuid members from src to dst ble_uuid_t pointer. Both pointers must be valid/non-null. */ +#define BLE_UUID_COPY_PTR(dst, src) do {\ + (dst)->type = (src)->type; \ + (dst)->uuid = (src)->uuid;} while(0) + +/** @brief Copy type and uuid members from src to dst ble_uuid_t struct. */ +#define BLE_UUID_COPY_INST(dst, src) do {\ + (dst).type = (src).type; \ + (dst).uuid = (src).uuid;} while(0) + +/** @brief Compare for equality both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ +#define BLE_UUID_EQ(p_uuid1, p_uuid2) \ + (((p_uuid1)->type == (p_uuid2)->type) && ((p_uuid1)->uuid == (p_uuid2)->uuid)) + +/** @brief Compare for difference both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ +#define BLE_UUID_NEQ(p_uuid1, p_uuid2) \ + (((p_uuid1)->type != (p_uuid2)->type) || ((p_uuid1)->uuid != (p_uuid2)->uuid)) + +/** @} */ + +/** @addtogroup BLE_TYPES_STRUCTURES Structures + * @{ */ + +/** @brief 128 bit UUID values. */ +typedef struct +{ + uint8_t uuid128[16]; /**< Little-Endian UUID bytes. */ +} ble_uuid128_t; + +/** @brief Bluetooth Low Energy UUID type, encapsulates both 16-bit and 128-bit UUIDs. */ +typedef struct +{ + uint16_t uuid; /**< 16-bit UUID value or octets 12-13 of 128-bit UUID. */ + uint8_t type; /**< UUID type, see @ref BLE_UUID_TYPES. If type is @ref BLE_UUID_TYPE_UNKNOWN, the value of uuid is undefined. */ +} ble_uuid_t; + +/** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* BLE_TYPES_H__ */ + +/** + @} + @} +*/ diff --git a/src/sd_api_v3/sdk/components/softdevice/s132/headers/nrf_error.h b/src/sd_api_v3/sdk/components/softdevice/s132/headers/nrf_error.h new file mode 100644 index 000000000..1035b76d4 --- /dev/null +++ b/src/sd_api_v3/sdk/components/softdevice/s132/headers/nrf_error.h @@ -0,0 +1,87 @@ +/* + * Copyright (c) Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in a processor manufactured by Nordic + * Semiconductor ASA, or in a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + /** + @defgroup nrf_error SoftDevice Global Error Codes + @{ + + @brief Global Error definitions +*/ + +/* Header guard */ +#ifndef NRF_ERROR_H__ +#define NRF_ERROR_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/** @defgroup NRF_ERRORS_BASE Error Codes Base number definitions + * @{ */ +#define NRF_ERROR_BASE_NUM (0x0) ///< Global error base +#define NRF_ERROR_SDM_BASE_NUM (0x1000) ///< SDM error base +#define NRF_ERROR_SOC_BASE_NUM (0x2000) ///< SoC error base +#define NRF_ERROR_STK_BASE_NUM (0x3000) ///< STK error base +/** @} */ + +#define NRF_SUCCESS (NRF_ERROR_BASE_NUM + 0) ///< Successful command +#define NRF_ERROR_SVC_HANDLER_MISSING (NRF_ERROR_BASE_NUM + 1) ///< SVC handler is missing +#define NRF_ERROR_SOFTDEVICE_NOT_ENABLED (NRF_ERROR_BASE_NUM + 2) ///< SoftDevice has not been enabled +#define NRF_ERROR_INTERNAL (NRF_ERROR_BASE_NUM + 3) ///< Internal Error +#define NRF_ERROR_NO_MEM (NRF_ERROR_BASE_NUM + 4) ///< No Memory for operation +#define NRF_ERROR_NOT_FOUND (NRF_ERROR_BASE_NUM + 5) ///< Not found +#define NRF_ERROR_NOT_SUPPORTED (NRF_ERROR_BASE_NUM + 6) ///< Not supported +#define NRF_ERROR_INVALID_PARAM (NRF_ERROR_BASE_NUM + 7) ///< Invalid Parameter +#define NRF_ERROR_INVALID_STATE (NRF_ERROR_BASE_NUM + 8) ///< Invalid state, operation disallowed in this state +#define NRF_ERROR_INVALID_LENGTH (NRF_ERROR_BASE_NUM + 9) ///< Invalid Length +#define NRF_ERROR_INVALID_FLAGS (NRF_ERROR_BASE_NUM + 10) ///< Invalid Flags +#define NRF_ERROR_INVALID_DATA (NRF_ERROR_BASE_NUM + 11) ///< Invalid Data +#define NRF_ERROR_DATA_SIZE (NRF_ERROR_BASE_NUM + 12) ///< Invalid Data size +#define NRF_ERROR_TIMEOUT (NRF_ERROR_BASE_NUM + 13) ///< Operation timed out +#define NRF_ERROR_NULL (NRF_ERROR_BASE_NUM + 14) ///< Null Pointer +#define NRF_ERROR_FORBIDDEN (NRF_ERROR_BASE_NUM + 15) ///< Forbidden Operation +#define NRF_ERROR_INVALID_ADDR (NRF_ERROR_BASE_NUM + 16) ///< Bad Memory Address +#define NRF_ERROR_BUSY (NRF_ERROR_BASE_NUM + 17) ///< Busy +#define NRF_ERROR_CONN_COUNT (NRF_ERROR_BASE_NUM + 18) ///< Maximum connection count exceeded. +#define NRF_ERROR_RESOURCES (NRF_ERROR_BASE_NUM + 19) ///< Not enough resources for operation + +#ifdef __cplusplus +} +#endif +#endif // NRF_ERROR_H__ + +/** + @} +*/ diff --git a/src/common/ble_gap_impl.cpp b/src/sd_api_v5/ble_gap_impl.cpp old mode 100755 new mode 100644 similarity index 55% rename from src/common/ble_gap_impl.cpp rename to src/sd_api_v5/ble_gap_impl.cpp index 0a65265be..5d970a758 --- a/src/common/ble_gap_impl.cpp +++ b/src/sd_api_v5/ble_gap_impl.cpp @@ -35,54 +35,60 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -// C++ code #include "adapter.h" #include "ble_common.h" #include "adapter_internal.h" -#include - -// C code #include "ble_gap.h" -#include "ble_gap_app.h" // Encoder/decoder functions +#include "ble_gap_app.h" + +#include "app_ble_gap.h" + +#include -//TODO: Find a way to support multiple adapters -#include "app_ble_gap_sec_keys.h" // m_app_keys_table and app_ble_gap_sec_context_create +static uint32_t gap_encode_decode(adapter_t *adapter, const encode_function_t &encode_function, + const decode_function_t &decode_function) +{ + const auto adapterLayer = static_cast(adapter->internal); + + if (adapterLayer == nullptr) + { + return NRF_ERROR_SD_RPC_INVALID_ARGUMENT; + } + + RequestReplyCodecContext context(adapterLayer->transport); + return encode_decode(adapter, encode_function, decode_function); +} -#include uint32_t sd_ble_gap_adv_start( adapter_t *adapter, - ble_gap_adv_params_t const * const p_adv_params -#if NRF_SD_BLE_API_VERSION >= 4 - , uint8_t conn_cfg_tag -#endif + ble_gap_adv_params_t const * const p_adv_params, + uint8_t conn_cfg_tag ) { - encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_adv_start_req_enc( p_adv_params, -#if NRF_SD_BLE_API_VERSION >= 4 conn_cfg_tag, -#endif buffer, length); }; - decode_function_t decode_function = [&] (uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_adv_start_rsp_dec( buffer, length, result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } uint32_t sd_ble_gap_device_name_get(adapter_t *adapter, uint8_t * const p_dev_name, uint16_t * const p_len) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_device_name_get_req_enc( p_dev_name, p_len, @@ -90,7 +96,7 @@ uint32_t sd_ble_gap_device_name_get(adapter_t *adapter, uint8_t * const p_dev_na length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_device_name_get_rsp_dec( buffer, length, @@ -99,19 +105,19 @@ uint32_t sd_ble_gap_device_name_get(adapter_t *adapter, uint8_t * const p_dev_na result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } uint32_t sd_ble_gap_appearance_get(adapter_t *adapter, uint16_t * const p_appearance) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_appearance_get_req_enc( p_appearance, buffer, length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_appearance_get_rsp_dec( buffer, length, @@ -119,14 +125,14 @@ uint32_t sd_ble_gap_appearance_get(adapter_t *adapter, uint16_t * const p_appear result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } uint32_t sd_ble_gap_device_name_set(adapter_t *adapter, ble_gap_conn_sec_mode_t const * const p_write_perm, uint8_t const * const p_dev_name, uint16_t len) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_device_name_set_req_enc(p_write_perm, p_dev_name, len, @@ -134,50 +140,50 @@ uint32_t sd_ble_gap_device_name_set(adapter_t *adapter, ble_gap_conn_sec_mode_t length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_device_name_set_rsp_dec( buffer, length, result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } uint32_t sd_ble_gap_appearance_set(adapter_t *adapter, uint16_t appearance) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_appearance_set_req_enc( appearance, buffer, length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_appearance_set_rsp_dec( buffer, length, result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } uint32_t sd_ble_gap_ppcp_set(adapter_t *adapter, ble_gap_conn_params_t const * const p_conn_params) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_ppcp_set_req_enc( p_conn_params, buffer, length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_ppcp_set_rsp_dec(buffer, length, result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } @@ -186,7 +192,7 @@ uint32_t sd_ble_gap_adv_data_set(adapter_t *adapter, uint8_t const * const p_dat uint8_t const * const p_sr_data, uint8_t srdlen) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_adv_data_set_req_enc(p_data, dlen, p_sr_data, @@ -195,17 +201,17 @@ uint32_t sd_ble_gap_adv_data_set(adapter_t *adapter, uint8_t const * const p_dat length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_adv_data_set_rsp_dec(buffer, length, result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } uint32_t sd_ble_gap_conn_param_update(adapter_t *adapter, uint16_t conn_handle, ble_gap_conn_params_t const * const p_conn_params) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_conn_param_update_req_enc( conn_handle, p_conn_params, @@ -213,17 +219,17 @@ uint32_t sd_ble_gap_conn_param_update(adapter_t *adapter, uint16_t conn_handle, length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_conn_param_update_rsp_dec(buffer, length, result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } uint32_t sd_ble_gap_disconnect(adapter_t *adapter, uint16_t conn_handle, uint8_t hci_status_code) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_disconnect_req_enc( conn_handle, hci_status_code, @@ -231,11 +237,11 @@ uint32_t sd_ble_gap_disconnect(adapter_t *adapter, uint16_t conn_handle, uint8_t length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_disconnect_rsp_dec(buffer, length, result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } uint32_t sd_ble_gap_sec_info_reply(adapter_t *adapter, uint16_t conn_handle, @@ -243,7 +249,7 @@ uint32_t sd_ble_gap_sec_info_reply(adapter_t *adapter, uint16_t conn_handle, ble_gap_irk_t const * p_id_info, ble_gap_sign_info_t const * p_sign_info) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_sec_info_reply_req_enc( conn_handle, p_enc_info, @@ -253,24 +259,24 @@ uint32_t sd_ble_gap_sec_info_reply(adapter_t *adapter, uint16_t conn_handle, length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_sec_info_reply_rsp_dec(buffer, length, result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } uint32_t sd_ble_gap_ppcp_get(adapter_t *adapter, ble_gap_conn_params_t * const p_conn_params) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_ppcp_get_req_enc( p_conn_params, buffer, length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_ppcp_get_rsp_dec( buffer, length, @@ -278,94 +284,51 @@ uint32_t sd_ble_gap_ppcp_get(adapter_t *adapter, ble_gap_conn_params_t * const p result); }; - return encode_decode(adapter, encode_function, decode_function); -} - -#if NRF_SD_BLE_API_VERSION <= 2 -uint32_t sd_ble_gap_address_get(adapter_t *adapter, ble_gap_addr_t * const p_addr) -{ - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { - return ble_gap_address_get_req_enc( - p_addr, - buffer, - length); - }; - - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { - return ble_gap_address_get_rsp_dec( - buffer, - length, - (ble_gap_addr_t *)p_addr, - result); - }; - - return encode_decode(adapter, encode_function, decode_function); -} - -uint32_t sd_ble_gap_address_set(adapter_t *adapter, uint8_t addr_cycle_mode, ble_gap_addr_t const * const p_addr) -{ - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { - return ble_gap_address_set_req_enc( - addr_cycle_mode, - p_addr, - buffer, - length); - }; - - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { - return ble_gap_address_set_rsp_dec( - buffer, - length, - result); - }; - - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } -#endif -#if NRF_SD_BLE_API_VERSION >= 3 uint32_t sd_ble_gap_addr_get(adapter_t *adapter, ble_gap_addr_t * const p_addr) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_addr_get_req_enc( p_addr, buffer, length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_addr_get_rsp_dec( buffer, length, - (ble_gap_addr_t *)p_addr, + static_cast(p_addr), result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } uint32_t sd_ble_gap_addr_set(adapter_t *adapter, ble_gap_addr_t const * const p_addr) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_addr_set_req_enc( p_addr, buffer, length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_addr_set_rsp_dec( buffer, length, result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } uint32_t sd_ble_gap_whitelist_set(adapter_t *adapter, ble_gap_addr_t const * const * pp_wl_addrs, uint8_t len) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_whitelist_set_req_enc( pp_wl_addrs, len, @@ -373,19 +336,19 @@ uint32_t sd_ble_gap_whitelist_set(adapter_t *adapter, ble_gap_addr_t const * con length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_whitelist_set_rsp_dec( buffer, length, result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } uint32_t sd_ble_gap_device_identities_set(adapter_t *adapter, ble_gap_id_key_t const * const * pp_id_keys, ble_gap_irk_t const * const * pp_local_irks, uint8_t len) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_device_identities_set_req_enc( pp_id_keys, pp_local_irks, @@ -394,46 +357,46 @@ uint32_t sd_ble_gap_device_identities_set(adapter_t *adapter, ble_gap_id_key_t c length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_device_identities_set_rsp_dec( buffer, length, result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } uint32_t sd_ble_gap_privacy_set(adapter_t *adapter, ble_gap_privacy_params_t const *p_privacy_params) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_privacy_set_req_enc( p_privacy_params, buffer, length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_privacy_set_rsp_dec( buffer, length, result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } uint32_t sd_ble_gap_privacy_get(adapter_t *adapter, ble_gap_privacy_params_t *p_privacy_params) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_privacy_get_req_enc( p_privacy_params, buffer, length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_privacy_get_rsp_dec( buffer, length, @@ -441,26 +404,25 @@ uint32_t sd_ble_gap_privacy_get(adapter_t *adapter, ble_gap_privacy_params_t *p_ result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } -#endif uint32_t sd_ble_gap_adv_stop(adapter_t *adapter) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_adv_stop_req_enc( buffer, length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_adv_stop_rsp_dec( buffer, length, result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } @@ -468,7 +430,7 @@ uint32_t sd_ble_gap_auth_key_reply(adapter_t *adapter, uint16_t conn_handle, uint8_t key_type, uint8_t const * const key) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_auth_key_reply_req_enc( conn_handle, key_type, @@ -477,19 +439,19 @@ uint32_t sd_ble_gap_auth_key_reply(adapter_t *adapter, uint16_t conn_handle, length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_auth_key_reply_rsp_dec( buffer, length, result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } uint32_t sd_ble_gap_authenticate(adapter_t *adapter, uint16_t conn_handle, ble_gap_sec_params_t const * const p_sec_params) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_authenticate_req_enc( conn_handle, p_sec_params, @@ -497,19 +459,19 @@ uint32_t sd_ble_gap_authenticate(adapter_t *adapter, uint16_t conn_handle, ble_g length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_authenticate_rsp_dec( buffer, length, result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } uint32_t sd_ble_gap_conn_sec_get(adapter_t *adapter, uint16_t conn_handle, ble_gap_conn_sec_t * const p_conn_sec) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_conn_sec_get_req_enc( conn_handle, p_conn_sec, @@ -517,20 +479,20 @@ uint32_t sd_ble_gap_conn_sec_get(adapter_t *adapter, uint16_t conn_handle, ble_g length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_conn_sec_get_rsp_dec( buffer, length, - (ble_gap_conn_sec_t * * const)&p_conn_sec, + const_cast(&p_conn_sec), result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } uint32_t sd_ble_gap_rssi_start(adapter_t *adapter, uint16_t conn_handle, uint8_t threshold_dbm, uint8_t skip_count) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_rssi_start_req_enc( conn_handle, threshold_dbm, @@ -539,140 +501,136 @@ uint32_t sd_ble_gap_rssi_start(adapter_t *adapter, uint16_t conn_handle, uint8_t length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_rssi_start_rsp_dec( buffer, length, result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } uint32_t sd_ble_gap_rssi_stop(adapter_t *adapter, uint16_t conn_handle) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_rssi_stop_req_enc( conn_handle, buffer, length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_rssi_stop_rsp_dec( buffer, length, result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } uint32_t sd_ble_gap_tx_power_set(adapter_t *adapter, int8_t tx_power) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_tx_power_set_req_enc( tx_power, buffer, length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_tx_power_set_rsp_dec( buffer, length, result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } uint32_t sd_ble_gap_scan_stop(adapter_t *adapter) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_scan_stop_req_enc( buffer, length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_scan_stop_rsp_dec( buffer, length, result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } uint32_t sd_ble_gap_connect(adapter_t *adapter, ble_gap_addr_t const * const p_addr, ble_gap_scan_params_t const * const p_scan_params, - ble_gap_conn_params_t const * const p_conn_params -#if NRF_SD_BLE_API_VERSION >= 4 - , uint8_t conn_cfg_tag -#endif + ble_gap_conn_params_t const * const p_conn_params, + uint8_t conn_cfg_tag ) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_connect_req_enc( p_addr, p_scan_params, p_conn_params, -#if NRF_SD_BLE_API_VERSION >= 4 conn_cfg_tag, -#endif buffer, length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_connect_rsp_dec( buffer, length, result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } uint32_t sd_ble_gap_connect_cancel(adapter_t *adapter) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_connect_cancel_req_enc( buffer, length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_connect_cancel_rsp_dec( buffer, length, result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } uint32_t sd_ble_gap_scan_start(adapter_t *adapter, ble_gap_scan_params_t const * const p_scan_params) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_scan_start_req_enc( p_scan_params, buffer, length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_scan_start_rsp_dec( buffer, length, result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } uint32_t sd_ble_gap_encrypt(adapter_t *adapter, @@ -680,7 +638,7 @@ uint32_t sd_ble_gap_encrypt(adapter_t *adapter, ble_gap_master_id_t const * p_master_id, ble_gap_enc_info_t const * p_enc_info) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_encrypt_req_enc( conn_handle, p_master_id, @@ -689,21 +647,21 @@ uint32_t sd_ble_gap_encrypt(adapter_t *adapter, length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_encrypt_rsp_dec( buffer, length, result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } uint32_t sd_ble_gap_rssi_get(adapter_t *adapter, uint16_t conn_handle, int8_t * p_rssi) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_rssi_get_req_enc( conn_handle, p_rssi, @@ -711,15 +669,15 @@ uint32_t sd_ble_gap_rssi_get(adapter_t *adapter, uint16_t conn_handle, length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_rssi_get_rsp_dec( buffer, length, - (int8_t *)p_rssi, + static_cast(p_rssi), result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } @@ -729,7 +687,25 @@ uint32_t sd_ble_gap_sec_params_reply(adapter_t *adapter, ble_gap_sec_params_t const *p_sec_params, ble_gap_sec_keyset_t const *p_sec_keyset) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + uint32_t index = 0; + auto err_code = app_ble_gap_sec_keys_storage_create(conn_handle, &index); + + if (err_code != NRF_SUCCESS) + { + return err_code; + } + + if (p_sec_keyset) + { + err_code = app_ble_gap_sec_keys_update(index, p_sec_keyset); + + if (err_code != NRF_SUCCESS) + { + return err_code; + } + } + return ble_gap_sec_params_reply_req_enc( conn_handle, sec_status, @@ -739,7 +715,7 @@ uint32_t sd_ble_gap_sec_params_reply(adapter_t *adapter, length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_sec_params_reply_rsp_dec( buffer, length, @@ -747,44 +723,12 @@ uint32_t sd_ble_gap_sec_params_reply(adapter_t *adapter, result); }; - uint32_t err_code = NRF_SUCCESS; -#if NRF_SD_BLE_API_VERSION < 4 - ser_ble_gap_app_keyset_t *keyset = nullptr; - - // First allocate security context for serialization. We add the a security context for the - // connection even if the developer has not provided a p_sec_keyset since the same structure - // will be used for storing keys received from the peer. - auto adapterInternal = static_cast(adapter->internal); - BLESecurityContext context(adapterInternal->transport); -#endif - -#if NRF_SD_BLE_API_VERSION < 4 - err_code = app_ble_gap_sec_context_create(conn_handle, &keyset); -#else - uint32_t index = 0; - err_code = app_ble_gap_sec_context_create(conn_handle, &index); -#endif - - if (err_code != NRF_SUCCESS) - { - return err_code; - } - - if (p_sec_keyset) - { -#if NRF_SD_BLE_API_VERSION < 4 - std::memcpy(&keyset->keyset, p_sec_keyset, sizeof(ble_gap_sec_keyset_t)); -#else - std::memcpy(&(m_app_keys_table[index].keyset), p_sec_keyset, sizeof(ble_gap_sec_keyset_t)); -#endif - } - - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } uint32_t sd_ble_gap_lesc_oob_data_get(adapter_t *adapter, uint16_t conn_handle, ble_gap_lesc_p256_pk_t const *p_pk_own, ble_gap_lesc_oob_data_t *p_oobd_own) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_lesc_oob_data_get_req_enc( conn_handle, p_pk_own, @@ -793,7 +737,7 @@ uint32_t sd_ble_gap_lesc_oob_data_get(adapter_t *adapter, uint16_t conn_handle, length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_lesc_oob_data_get_rsp_dec( buffer, length, @@ -801,12 +745,12 @@ uint32_t sd_ble_gap_lesc_oob_data_get(adapter_t *adapter, uint16_t conn_handle, result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } uint32_t sd_ble_gap_lesc_oob_data_set(adapter_t *adapter, uint16_t conn_handle, ble_gap_lesc_oob_data_t const *p_oobd_own, ble_gap_lesc_oob_data_t const *p_oobd_peer) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_lesc_oob_data_set_req_enc( conn_handle, p_oobd_own, @@ -815,19 +759,19 @@ uint32_t sd_ble_gap_lesc_oob_data_set(adapter_t *adapter, uint16_t conn_handle, length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_lesc_oob_data_set_rsp_dec( buffer, length, result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } uint32_t sd_ble_gap_lesc_dhkey_reply(adapter_t *adapter, uint16_t conn_handle, ble_gap_lesc_dhkey_t const *p_dhkey) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_lesc_dhkey_reply_req_enc( conn_handle, p_dhkey, @@ -835,19 +779,19 @@ uint32_t sd_ble_gap_lesc_dhkey_reply(adapter_t *adapter, uint16_t conn_handle, b length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_lesc_dhkey_reply_rsp_dec( buffer, length, result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } uint32_t sd_ble_gap_keypress_notify(adapter_t *adapter, uint16_t conn_handle, uint8_t kp_not) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_keypress_notify_req_enc( conn_handle, kp_not, @@ -855,20 +799,19 @@ uint32_t sd_ble_gap_keypress_notify(adapter_t *adapter, uint16_t conn_handle, ui length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_keypress_notify_rsp_dec( buffer, length, result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } -#if NRF_SD_BLE_API_VERSION >= 5 uint32_t sd_ble_gap_phy_update(adapter_t *adapter, uint16_t conn_handle, ble_gap_phys_t const *p_gap_phys) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_phy_update_req_enc( conn_handle, p_gap_phys, @@ -876,21 +819,19 @@ uint32_t sd_ble_gap_phy_update(adapter_t *adapter, uint16_t conn_handle, ble_gap length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_phy_update_rsp_dec( buffer, length, result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } -#endif -#if NRF_SD_BLE_API_VERSION >= 4 uint32_t sd_ble_gap_data_length_update(adapter_t *adapter, uint16_t conn_handle, ble_gap_data_length_params_t const *p_dl_params, ble_gap_data_length_limitation_t *p_dl_limitation) { - encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_data_length_update_req_enc( conn_handle, p_dl_params, @@ -899,7 +840,7 @@ uint32_t sd_ble_gap_data_length_update(adapter_t *adapter, uint16_t conn_handle, length); }; - decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { return ble_gap_data_length_update_rsp_dec( buffer, length, @@ -907,6 +848,5 @@ uint32_t sd_ble_gap_data_length_update(adapter_t *adapter, uint16_t conn_handle, result); }; - return encode_decode(adapter, encode_function, decode_function); + return gap_encode_decode(adapter, encode_function, decode_function); } -#endif diff --git a/src/sd_api_v5/ble_gattc_impl.cpp b/src/sd_api_v5/ble_gattc_impl.cpp new file mode 100644 index 000000000..0a470b231 --- /dev/null +++ b/src/sd_api_v5/ble_gattc_impl.cpp @@ -0,0 +1,193 @@ +/* + * Copyright (c) 2016 Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in or with a processor manufactured by Nordic + * Semiconductor ASA, or in or with a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * 5. Any software provided in binary or object form under this license must not be + * reverse engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include + +// C++ code +#include "adapter.h" +#include "adapter_internal.h" +#include "transport.h" + + +// C code +#include "ble_gattc.h" +#include "ble_gattc_app.h" // Encoder/decoder functions + +#include "ble_common.h" + +uint32_t sd_ble_gattc_primary_services_discover(adapter_t *adapter, uint16_t conn_handle, uint16_t start_handle, ble_uuid_t const *p_srvc_uuid) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gattc_primary_services_discover_req_enc(conn_handle, start_handle, p_srvc_uuid, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gattc_primary_services_discover_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gattc_relationships_discover(adapter_t *adapter, uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gattc_relationships_discover_req_enc(conn_handle, p_handle_range, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gattc_relationships_discover_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gattc_characteristics_discover(adapter_t *adapter, uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gattc_characteristics_discover_req_enc(conn_handle, p_handle_range, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gattc_characteristics_discover_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gattc_descriptors_discover(adapter_t *adapter, uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gattc_descriptors_discover_req_enc(conn_handle, p_handle_range, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gattc_descriptors_discover_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gattc_char_value_by_uuid_read(adapter_t *adapter, uint16_t conn_handle, ble_uuid_t const *p_uuid, ble_gattc_handle_range_t const *p_handle_range) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gattc_char_value_by_uuid_read_req_enc(conn_handle, p_uuid, p_handle_range, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gattc_char_value_by_uuid_read_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gattc_read(adapter_t *adapter, uint16_t conn_handle, uint16_t handle, uint16_t offset) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gattc_read_req_enc(conn_handle, handle, offset, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gattc_read_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gattc_char_values_read(adapter_t *adapter, uint16_t conn_handle, uint16_t const *p_handles, uint16_t handle_count) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gattc_char_values_read_req_enc(conn_handle, p_handles, handle_count, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gattc_char_values_read_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gattc_write(adapter_t *adapter, uint16_t conn_handle, ble_gattc_write_params_t const *p_write_params) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gattc_write_req_enc(conn_handle, p_write_params, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gattc_write_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gattc_hv_confirm(adapter_t *adapter, uint16_t conn_handle, uint16_t handle) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gattc_hv_confirm_req_enc(conn_handle, handle, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gattc_hv_confirm_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gattc_attr_info_discover(adapter_t *adapter, uint16_t conn_handle, ble_gattc_handle_range_t const * p_handle_range) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gattc_attr_info_discover_req_enc(conn_handle, p_handle_range, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gattc_attr_info_discover_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gattc_exchange_mtu_request(adapter_t *adapter, uint16_t conn_handle, uint16_t client_rx_mtu) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gattc_exchange_mtu_request_req_enc(conn_handle, client_rx_mtu, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gattc_exchange_mtu_request_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} diff --git a/src/sd_api_v5/ble_gatts_impl.cpp b/src/sd_api_v5/ble_gatts_impl.cpp new file mode 100644 index 000000000..c0f11107c --- /dev/null +++ b/src/sd_api_v5/ble_gatts_impl.cpp @@ -0,0 +1,232 @@ +/* + * Copyright (c) 2016 Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in or with a processor manufactured by Nordic + * Semiconductor ASA, or in or with a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * 5. Any software provided in binary or object form under this license must not be + * reverse engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include + +// C++ code +#include "adapter.h" +#include "adapter_internal.h" + +// C code +#include "ble_gatts.h" +#include "ble_gatts_app.h" // Encoder/decoder functions + +#include "ble_common.h" + +uint32_t sd_ble_gatts_service_add(adapter_t *adapter, uint8_t type, ble_uuid_t const *p_uuid, uint16_t *p_handle) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_service_add_req_enc(type, p_uuid, p_handle, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_service_add_rsp_dec(buffer, length, p_handle, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_include_add(adapter_t *adapter, uint16_t service_handle, uint16_t inc_srvc_handle, uint16_t *p_include_handle) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_include_add_req_enc(service_handle, inc_srvc_handle, p_include_handle, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_include_add_rsp_dec(buffer, length, p_include_handle, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_characteristic_add(adapter_t *adapter, uint16_t service_handle, ble_gatts_char_md_t const *p_char_md, ble_gatts_attr_t const *p_attr_char_value, ble_gatts_char_handles_t *p_handles) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_characteristic_add_req_enc(service_handle, p_char_md, p_attr_char_value, p_handles, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + uint16_t * handles = &p_handles->value_handle; + return ble_gatts_characteristic_add_rsp_dec(buffer, length, &handles, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_descriptor_add(adapter_t *adapter, uint16_t char_handle, ble_gatts_attr_t const *p_attr, uint16_t *p_handle) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_descriptor_add_req_enc(char_handle, p_attr, p_handle, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_descriptor_add_rsp_dec(buffer, length, p_handle, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_value_set(adapter_t *adapter, uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_value_set_req_enc(conn_handle, handle, p_value, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_value_set_rsp_dec(buffer, length, p_value, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_value_get(adapter_t *adapter, uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_value_get_req_enc(conn_handle, handle, p_value, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_value_get_rsp_dec(buffer, length, p_value, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_hvx(adapter_t *adapter, uint16_t conn_handle, ble_gatts_hvx_params_t const *p_hvx_params) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_hvx_req_enc(conn_handle, p_hvx_params, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + uint16_t *out_length = p_hvx_params->p_len; + return ble_gatts_hvx_rsp_dec(buffer, length, result, &out_length); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_service_changed(adapter_t *adapter, uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_service_changed_req_enc(conn_handle, start_handle, end_handle, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_service_changed_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_rw_authorize_reply(adapter_t *adapter, uint16_t conn_handle, ble_gatts_rw_authorize_reply_params_t const *p_rw_authorize_reply_params) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_rw_authorize_reply_req_enc(conn_handle, p_rw_authorize_reply_params, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_rw_authorize_reply_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_sys_attr_set(adapter_t *adapter, uint16_t conn_handle, uint8_t const *p_sys_attr_data, uint16_t len, uint32_t flags) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_sys_attr_set_req_enc(conn_handle, p_sys_attr_data, len, flags, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_sys_attr_set_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_sys_attr_get(adapter_t *adapter, uint16_t conn_handle, uint8_t *p_sys_attr_data, uint16_t *p_len, uint32_t flags) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_sys_attr_get_req_enc(conn_handle, p_sys_attr_data, p_len, flags, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_sys_attr_get_rsp_dec(buffer, length, &p_sys_attr_data, &p_len, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_initial_user_handle_get(adapter_t *adapter, uint16_t *p_handle) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_initial_user_handle_get_req_enc(p_handle, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_initial_user_handle_get_rsp_dec(buffer, length, &p_handle, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_attr_get(adapter_t *adapter, uint16_t handle, ble_uuid_t * p_uuid, ble_gatts_attr_md_t * p_md) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_attr_get_req_enc(handle, p_uuid, p_md, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_attr_get_rsp_dec(buffer, length, &p_uuid, &p_md, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gatts_exchange_mtu_reply(adapter_t *adapter, uint16_t conn_handle, uint16_t server_rx_mtu) +{ + const encode_function_t encode_function = [&] (uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gatts_exchange_mtu_reply_req_enc(conn_handle, server_rx_mtu, buffer, length); + }; + + const decode_function_t decode_function = [&] (uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_gatts_exchange_mtu_reply_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} diff --git a/src/sd_api_v5/ble_impl.cpp b/src/sd_api_v5/ble_impl.cpp new file mode 100644 index 000000000..ce4fe474c --- /dev/null +++ b/src/sd_api_v5/ble_impl.cpp @@ -0,0 +1,249 @@ +/* + * Copyright (c) 2016 Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in or with a processor manufactured by Nordic + * Semiconductor ASA, or in or with a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * 5. Any software provided in binary or object form under this license must not be + * reverse engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "adapter.h" +#include "ble_common.h" + +#include "ble.h" +#include "ble_app.h" + +#include +#include + +#include + +uint32_t sd_ble_uuid_encode(adapter_t* adapter, ble_uuid_t const * const p_uuid, + uint8_t * const p_uuid_le_len, + uint8_t * const p_uuid_le) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_uuid_encode_req_enc( + p_uuid, + p_uuid_le_len, + p_uuid_le, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_uuid_encode_rsp_dec( + buffer, + length, + p_uuid_le_len, + p_uuid_le, + result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} +uint32_t sd_ble_uuid_vs_add(adapter_t *adapter, ble_uuid128_t const * const p_vs_uuid, uint8_t * const p_uuid_type) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_uuid_vs_add_req_enc( + p_vs_uuid, + p_uuid_type, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_uuid_vs_add_rsp_dec( + buffer, + length, + const_cast(&p_uuid_type), + result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_uuid_decode(adapter_t *adapter, uint8_t uuid_le_len, uint8_t const * const p_uuid_le, ble_uuid_t * const p_uuid) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_uuid_decode_req_enc( + uuid_le_len, + p_uuid_le, + p_uuid, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_uuid_decode_rsp_dec( + buffer, + length, + const_cast(&p_uuid), + result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_version_get(adapter_t *adapter, ble_version_t * p_version) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_version_get_req_enc( + p_version, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_version_get_rsp_dec( + buffer, + length, + p_version, + result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_opt_get(adapter_t *adapter, uint32_t opt_id, ble_opt_t *p_opt) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_opt_get_req_enc( + opt_id, + p_opt, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_opt_get_rsp_dec( + buffer, + length, + &opt_id, + p_opt, + result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_opt_set(adapter_t *adapter, uint32_t opt_id, ble_opt_t const *p_opt) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_opt_set_req_enc( + opt_id, + p_opt, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_opt_set_rsp_dec( + buffer, + length, + result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_cfg_set(adapter_t *adapter, uint32_t cfg_id, ble_cfg_t const * p_cfg, uint32_t app_ram_base) +{ + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_cfg_set_req_enc( + cfg_id, + p_cfg, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_cfg_set_rsp_dec( + buffer, + length, + result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_enable( + adapter_t *adapter, + uint32_t *p_app_ram_base) +{ + (void)p_app_ram_base; + + auto adapterLayer = static_cast(adapter->internal); + RequestReplyCodecContext context(adapterLayer->transport); + + // Reset previous app_ble_gap data + app_ble_gap_state_reset(); + + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_enable_req_enc( + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_enable_rsp_dec( + buffer, + length, + result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_user_mem_reply(adapter_t *adapter, uint16_t conn_handle, ble_user_mem_block_t const *p_block) +{ + if (p_block != nullptr) + { + return NRF_ERROR_INVALID_PARAM; + } + + const encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_user_mem_reply_req_enc( + conn_handle, + p_block, + buffer, + length); + }; + + const decode_function_t decode_function = [&](uint8_t *buffer, const uint32_t length, uint32_t *result) -> uint32_t { + return ble_user_mem_reply_rsp_dec( + buffer, + length, + result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} diff --git a/src/sd_api_v5/sdk/components/serialization/application/codecs/ble/serializers/ble_gap_evt_app.c b/src/sd_api_v5/sdk/components/serialization/application/codecs/ble/serializers/ble_gap_evt_app.c index bc5eb0ecf..17d0cad49 100644 --- a/src/sd_api_v5/sdk/components/serialization/application/codecs/ble/serializers/ble_gap_evt_app.c +++ b/src/sd_api_v5/sdk/components/serialization/application/codecs/ble/serializers/ble_gap_evt_app.c @@ -40,7 +40,7 @@ #include "ble_gap_evt_app.h" #include "ble_serialization.h" #include "app_util.h" -#include "app_ble_gap_sec_keys.h" +#include "app_ble_gap.h" #include "ble_gap_struct_serialization.h" #include "cond_field_serialization.h" #include @@ -84,13 +84,17 @@ uint32_t ble_gap_evt_auth_status_dec(uint8_t const * const p_buf, SER_PULL_FIELD(&p_event->evt.gap_evt.params.auth_status, ble_gap_evt_auth_status_t_dec); // keyset is an extension of standard event data - used to synchronize keys at application - uint32_t keyset_index; - err_code = app_ble_gap_sec_context_find(p_event->evt.gap_evt.conn_handle, &keyset_index); + uint32_t conn_index; + err_code = app_ble_gap_sec_keys_find(p_event->evt.gap_evt.conn_handle, &conn_index); if (err_code == NRF_SUCCESS) { - SER_PULL_FIELD(&(m_app_keys_table[keyset_index].keyset), ble_gap_sec_keyset_t_dec); + ble_gap_sec_keyset_t *keyset; + err_code = app_ble_gap_sec_keys_get(conn_index, &keyset); + SER_ASSERT(err_code == NRF_SUCCESS, err_code); + + SER_PULL_FIELD(keyset, ble_gap_sec_keyset_t_dec); - err_code = app_ble_gap_sec_context_destroy(p_event->evt.gap_evt.conn_handle); + err_code = app_ble_gap_sec_keys_storage_destroy(p_event->evt.gap_evt.conn_handle); SER_ASSERT(err_code == NRF_SUCCESS, err_code); } else @@ -197,9 +201,14 @@ uint32_t ble_gap_evt_lesc_dhkey_request_dec(uint8_t const * const p_buf, // keyset is an extension of standard event data - used to synchronize keys at application uint32_t conn_index; - err_code = app_ble_gap_sec_context_find(p_event->evt.gap_evt.conn_handle, &conn_index); + err_code = app_ble_gap_sec_keys_find(p_event->evt.gap_evt.conn_handle, &conn_index); + SER_ASSERT(err_code == NRF_SUCCESS, err_code); + + ble_gap_sec_keyset_t *keyset; + err_code = app_ble_gap_sec_keys_get(conn_index, &keyset); SER_ASSERT(err_code == NRF_SUCCESS, err_code); - p_event->evt.gap_evt.params.lesc_dhkey_request.p_pk_peer = m_app_keys_table[conn_index].keyset.keys_peer.p_pk; + + p_event->evt.gap_evt.params.lesc_dhkey_request.p_pk_peer = keyset->keys_peer.p_pk; SER_PULL_COND(&p_event->evt.gap_evt.params.lesc_dhkey_request.p_pk_peer, ble_gap_lesc_p256_pk_t_dec); SER_PULL_uint8(&ser_data); diff --git a/src/sd_api_v5/sdk/components/softdevice/s132/headers/ble.h b/src/sd_api_v5/sdk/components/softdevice/s132/headers/ble.h index a6ba0fca7..1ccb728b1 100644 --- a/src/sd_api_v5/sdk/components/softdevice/s132/headers/ble.h +++ b/src/sd_api_v5/sdk/components/softdevice/s132/headers/ble.h @@ -195,7 +195,7 @@ typedef struct typedef struct { uint16_t conn_handle; /**< Connection Handle on which this event occurred. */ - union common_evt_params_union + union { ble_evt_user_mem_request_t user_mem_request; /**< User Memory Request Event Parameters. */ ble_evt_user_mem_release_t user_mem_release; /**< User Memory Release Event Parameters. */ @@ -213,7 +213,7 @@ typedef struct typedef struct { ble_evt_hdr_t header; /**< Event header. */ - union evt_union + union { ble_common_evt_t common_evt; /**< Common Event, evt_id in BLE_EVT_* series. */ ble_gap_evt_t gap_evt; /**< GAP originated event, evt_id in BLE_GAP_EVT_* series. */ @@ -316,7 +316,7 @@ typedef struct uint8_t conn_cfg_tag; /**< The application chosen tag it can use with the @ref sd_ble_gap_adv_start() and @ref sd_ble_gap_connect() calls to select this configuration when creating a connection. Must be different for all connection configurations added and not @ref BLE_CONN_CFG_TAG_DEFAULT. */ - union conn_cfg_params_union + union { ble_gap_conn_cfg_t gap_conn_cfg; /**< GAP connection configuration, cfg_id is @ref BLE_CONN_CFG_GAP. */ ble_gattc_conn_cfg_t gattc_conn_cfg; /**< GATTC connection configuration, cfg_id is @ref BLE_CONN_CFG_GATTC. */ diff --git a/src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_gap.h b/src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_gap.h index 5a0965118..75aa88130 100644 --- a/src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_gap.h +++ b/src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_gap.h @@ -983,7 +983,7 @@ typedef struct typedef struct { uint16_t conn_handle; /**< Connection Handle on which event occurred. */ - union gap_evt_params_union /**< union alternative identified by evt_id in enclosing struct. */ + union /**< union alternative identified by evt_id in enclosing struct. */ { ble_gap_evt_connected_t connected; /**< Connected Event Parameters. */ ble_gap_evt_disconnected_t disconnected; /**< Disconnected Event Parameters. */ diff --git a/src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_gattc.h b/src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_gattc.h index 496903624..5f30a3d6f 100644 --- a/src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_gattc.h +++ b/src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_gattc.h @@ -235,7 +235,7 @@ typedef struct { uint16_t count; /**< Attribute count. */ uint8_t format; /**< Attribute information format, see @ref BLE_GATTC_ATTR_INFO_FORMAT. */ - union gattc_attr_info_union + union { ble_gattc_attr_info16_t attr_info16[1]; /**< Attribute information for 16-bit Attribute UUID. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. @@ -326,7 +326,7 @@ typedef struct uint16_t conn_handle; /**< Connection Handle on which event occurred. */ uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ uint16_t error_handle; /**< In case of error: The handle causing the error. In all other cases @ref BLE_GATT_HANDLE_INVALID. */ - union gattc_evt_union + union { ble_gattc_evt_prim_srvc_disc_rsp_t prim_srvc_disc_rsp; /**< Primary Service Discovery Response Event Parameters. */ ble_gattc_evt_rel_disc_rsp_t rel_disc_rsp; /**< Relationship Discovery Response Event Parameters. */ diff --git a/src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_gatts.h b/src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_gatts.h index 562090989..4a9ed2a9c 100644 --- a/src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_gatts.h +++ b/src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_gatts.h @@ -306,7 +306,7 @@ typedef struct typedef struct { uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ - union gatts_rw_authorize_reply_params_union + union { ble_gatts_authorize_params_t read; /**< Read authorization parameters. */ ble_gatts_authorize_params_t write; /**< Write authorization parameters. */ @@ -364,7 +364,7 @@ typedef struct typedef struct { uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ - union gatts_evt_rw_authorize_request_union + union { ble_gatts_evt_read_t read; /**< Attribute Read Parameters. */ ble_gatts_evt_write_t write; /**< Attribute Write Parameters. */ @@ -406,7 +406,7 @@ typedef struct typedef struct { uint16_t conn_handle; /**< Connection Handle on which the event occurred. */ - union gatts_evt_params_union + union { ble_gatts_evt_write_t write; /**< Write Event Parameters. */ ble_gatts_evt_rw_authorize_request_t authorize_request; /**< Read or Write Authorize Request Parameters. */ diff --git a/src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_l2cap.h b/src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_l2cap.h index 0f59f687f..697477b1d 100644 --- a/src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_l2cap.h +++ b/src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_l2cap.h @@ -287,7 +287,7 @@ typedef struct uint16_t conn_handle; /**< Connection Handle on which the event occured. */ uint16_t local_cid; /**< Local Channel ID of the L2CAP channel, or @ref BLE_L2CAP_CID_INVALID if not present. */ - union l2cap_evt_params_union + union { ble_l2cap_evt_ch_setup_request_t ch_setup_request; /**< L2CAP Channel Setup Request Event Parameters. */ ble_l2cap_evt_ch_setup_refused_t ch_setup_refused; /**< L2CAP Channel Setup Refused Event Parameters. */ diff --git a/src/sd_api_v5/sdk/custom/app_ble_gap_sec_keys.cpp b/src/sd_api_v5/sdk/custom/app_ble_gap_sec_keys.cpp deleted file mode 100644 index 220162e87..000000000 --- a/src/sd_api_v5/sdk/custom/app_ble_gap_sec_keys.cpp +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright (c) 2016 Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this - * list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of other - * contributors to this software may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * 4. This software must only be used in or with a processor manufactured by Nordic - * Semiconductor ASA, or in or with a processor manufactured by a third party that - * is used in combination with a processor manufactured by Nordic Semiconductor. - * - * 5. Any software provided in binary or object form under this license must not be - * reverse engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/* Copyright (c) 2014 Nordic Semiconductor. All Rights Reserved. -* -* The information contained herein is property of Nordic Semiconductor ASA. -* Terms and conditions of usage are described in detail in NORDIC -* SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. -* -* Licensees are granted free, non-transferable use of the information. NO -* WARRANTY of ANY KIND is provided. This heading must NOT be removed from -* the file. -* -*/ - -#include "app_ble_gap_sec_keys.h" -#include "nrf_error.h" -#include - -#include - -ser_ble_gap_app_keyset_t m_app_keys_table[SER_MAX_CONNECTIONS]; - -void *current_context = nullptr; -std::mutex current_context_mutex; - -void app_ble_gap_sec_context_root_set(void *context) -{ - current_context_mutex.lock(); - current_context = context; -} - -void app_ble_gap_sec_context_root_release() -{ - current_context = nullptr; - current_context_mutex.unlock(); -} - -uint32_t app_ble_gap_sec_context_create(uint16_t conn_handle, uint32_t *p_index) -{ - uint32_t err_code = NRF_ERROR_NO_MEM; - uint32_t i; - - for (i = 0; i < SER_MAX_CONNECTIONS; ++i) - { - if (!m_app_keys_table[i].conn_active) - { - m_app_keys_table[i].conn_active = 1; - m_app_keys_table[i].conn_handle = conn_handle; - *p_index = i; - err_code = NRF_SUCCESS; - break; - } - } - - return err_code; -} - -uint32_t app_ble_gap_sec_context_destroy(uint16_t conn_handle) -{ - uint32_t err_code = NRF_ERROR_NOT_FOUND; - uint32_t i; - - for (i = 0; i < SER_MAX_CONNECTIONS; ++i) - { - if (m_app_keys_table[i].conn_handle == conn_handle) - { - m_app_keys_table[i].conn_active = 0; - err_code = NRF_SUCCESS; - break; - } - } - - return err_code; -} - -uint32_t app_ble_gap_sec_context_find(uint16_t conn_handle, uint32_t *p_index) -{ - uint32_t err_code = NRF_ERROR_NOT_FOUND; - uint32_t i; - - for (i = 0; i < SER_MAX_CONNECTIONS; ++i) - { - if ((m_app_keys_table[i].conn_handle == conn_handle) && (m_app_keys_table[i].conn_active == 1)) - { - *p_index = i; - err_code = NRF_SUCCESS; - break; - } - } - - return err_code; -} diff --git a/src/sd_api_v6/ble_gap_impl.cpp b/src/sd_api_v6/ble_gap_impl.cpp new file mode 100644 index 000000000..491aaf707 --- /dev/null +++ b/src/sd_api_v6/ble_gap_impl.cpp @@ -0,0 +1,676 @@ +/* + * Copyright (c) 2016 Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in or with a processor manufactured by Nordic + * Semiconductor ASA, or in or with a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * 5. Any software provided in binary or object form under this license must not be + * reverse engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +// C++ code +#include "adapter.h" +#include "adapter_internal.h" +#include "ble_common.h" + +// C code +#include "ble_gap.h" +#include "ble_gap_app.h" // Encoder/decoder functions + +#include "app_ble_gap.h" + +#include + +static void *mp_out_params[3]; + +static uint32_t gap_encode_decode(adapter_t *adapter, const encode_function_t &encode_function, + const decode_function_t &decode_function) +{ + const auto adapterLayer = static_cast(adapter->internal); + + if (adapterLayer == nullptr) + { + return NRF_ERROR_INVALID_PARAM; + } + + RequestReplyCodecContext context(adapterLayer->transport); + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_adv_set_configure(adapter_t *adapter, uint8_t *p_adv_handle, + ble_gap_adv_data_t const *p_adv_data, + ble_gap_adv_params_t const *p_adv_params) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + if (p_adv_handle) + { + mp_out_params[0] = p_adv_data->adv_data.p_data; + mp_out_params[1] = p_adv_data->scan_rsp_data.p_data; + } + else + { + mp_out_params[0] = NULL; + mp_out_params[1] = NULL; + } + + return ble_gap_adv_set_configure_req_enc(p_adv_handle, p_adv_data, p_adv_params, buffer, + length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_adv_set_configure_rsp_dec(buffer, length, p_adv_handle, result); + }; + + uint32_t err = gap_encode_decode(adapter, encode_function, decode_function); + return err; +} + +uint32_t sd_ble_gap_adv_start(adapter_t *adapter, uint8_t adv_handle, uint8_t conn_cfg_tag) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_adv_start_req_enc(adv_handle, conn_cfg_tag, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_adv_start_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_device_name_get(adapter_t *adapter, uint8_t *const p_dev_name, + uint16_t *const p_len) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_device_name_get_req_enc(p_dev_name, p_len, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_device_name_get_rsp_dec(buffer, length, p_dev_name, p_len, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_appearance_get(adapter_t *adapter, uint16_t *const p_appearance) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_appearance_get_req_enc(p_appearance, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_appearance_get_rsp_dec(buffer, length, p_appearance, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_device_name_set(adapter_t *adapter, + ble_gap_conn_sec_mode_t const *const p_write_perm, + uint8_t const *const p_dev_name, uint16_t len) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_device_name_set_req_enc(p_write_perm, p_dev_name, len, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_device_name_set_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_appearance_set(adapter_t *adapter, uint16_t appearance) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_appearance_set_req_enc(appearance, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_appearance_set_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_ppcp_set(adapter_t *adapter, ble_gap_conn_params_t const *const p_conn_params) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_ppcp_set_req_enc(p_conn_params, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_ppcp_set_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_conn_param_update(adapter_t *adapter, uint16_t conn_handle, + ble_gap_conn_params_t const *const p_conn_params) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_conn_param_update_req_enc(conn_handle, p_conn_params, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_conn_param_update_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_disconnect(adapter_t *adapter, uint16_t conn_handle, uint8_t hci_status_code) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_disconnect_req_enc(conn_handle, hci_status_code, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_disconnect_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_sec_info_reply(adapter_t *adapter, uint16_t conn_handle, + ble_gap_enc_info_t const *p_enc_info, + ble_gap_irk_t const *p_id_info, + ble_gap_sign_info_t const *p_sign_info) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_sec_info_reply_req_enc(conn_handle, p_enc_info, p_id_info, p_sign_info, + buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_sec_info_reply_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_ppcp_get(adapter_t *adapter, ble_gap_conn_params_t *const p_conn_params) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_ppcp_get_req_enc(p_conn_params, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_ppcp_get_rsp_dec(buffer, length, p_conn_params, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_addr_get(adapter_t *adapter, ble_gap_addr_t *const p_addr) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_addr_get_req_enc(p_addr, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_addr_get_rsp_dec(buffer, length, (ble_gap_addr_t *)p_addr, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_addr_set(adapter_t *adapter, ble_gap_addr_t const *const p_addr) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_addr_set_req_enc(p_addr, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_addr_set_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_whitelist_set(adapter_t *adapter, ble_gap_addr_t const *const *pp_wl_addrs, + uint8_t len) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_whitelist_set_req_enc(pp_wl_addrs, len, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_whitelist_set_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_device_identities_set(adapter_t *adapter, + ble_gap_id_key_t const *const *pp_id_keys, + ble_gap_irk_t const *const *pp_local_irks, uint8_t len) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_device_identities_set_req_enc(pp_id_keys, pp_local_irks, len, buffer, + length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_device_identities_set_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_privacy_set(adapter_t *adapter, + ble_gap_privacy_params_t const *p_privacy_params) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_privacy_set_req_enc(p_privacy_params, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_privacy_set_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_privacy_get(adapter_t *adapter, ble_gap_privacy_params_t *p_privacy_params) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_privacy_get_req_enc(p_privacy_params, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_privacy_get_rsp_dec(buffer, length, p_privacy_params, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_adv_stop(adapter_t *adapter, uint8_t adv_handle + +) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_adv_stop_req_enc(adv_handle, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_adv_stop_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_auth_key_reply(adapter_t *adapter, uint16_t conn_handle, uint8_t key_type, + uint8_t const *const key) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_auth_key_reply_req_enc(conn_handle, key_type, key, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_auth_key_reply_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_authenticate(adapter_t *adapter, uint16_t conn_handle, + ble_gap_sec_params_t const *const p_sec_params) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_authenticate_req_enc(conn_handle, p_sec_params, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_authenticate_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_conn_sec_get(adapter_t *adapter, uint16_t conn_handle, + ble_gap_conn_sec_t *const p_conn_sec) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_conn_sec_get_req_enc(conn_handle, p_conn_sec, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_conn_sec_get_rsp_dec(buffer, length, + (ble_gap_conn_sec_t * *const) & p_conn_sec, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_rssi_start(adapter_t *adapter, uint16_t conn_handle, uint8_t threshold_dbm, + uint8_t skip_count) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_rssi_start_req_enc(conn_handle, threshold_dbm, skip_count, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_rssi_start_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_rssi_stop(adapter_t *adapter, uint16_t conn_handle) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_rssi_stop_req_enc(conn_handle, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_rssi_stop_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_tx_power_set(adapter_t *adapter, uint8_t role, uint16_t handle, int8_t tx_power) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_tx_power_set_req_enc(role, handle, tx_power, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_tx_power_set_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_scan_stop(adapter_t *adapter) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const auto err_code = ble_gap_scan_stop_req_enc(buffer, length); + +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 5 + app_ble_gap_scan_data_unset(true); +#endif + return err_code; + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_scan_stop_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_connect(adapter_t *adapter, ble_gap_addr_t const *const p_addr, + ble_gap_scan_params_t const *const p_scan_params, + ble_gap_conn_params_t const *const p_conn_params, uint8_t conn_cfg_tag) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_connect_req_enc(p_addr, p_scan_params, p_conn_params, conn_cfg_tag, buffer, + length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_connect_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_connect_cancel(adapter_t *adapter) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_connect_cancel_req_enc(buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_connect_cancel_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_scan_start(adapter_t *adapter, ble_gap_scan_params_t const *const p_scan_params, + ble_data_t const *p_adv_report_buffer) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + const auto err_code = + ble_gap_scan_start_req_enc(p_scan_params, p_adv_report_buffer, buffer, length); + +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 5 + app_ble_gap_scan_data_set(p_adv_report_buffer->p_data); +#endif + + return err_code; + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + const auto err_code = ble_gap_scan_start_rsp_dec(buffer, length, result); + + if (err_code != NRF_SUCCESS) + { + app_ble_gap_scan_data_unset(true); + } + + return err_code; + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_encrypt(adapter_t *adapter, uint16_t conn_handle, + ble_gap_master_id_t const *p_master_id, + ble_gap_enc_info_t const *p_enc_info) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_encrypt_req_enc(conn_handle, p_master_id, p_enc_info, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_encrypt_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_rssi_get(adapter_t *adapter, uint16_t conn_handle, int8_t *p_rssi, + uint8_t *p_ch_index) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_rssi_get_req_enc(conn_handle, p_rssi, p_ch_index, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_rssi_get_rsp_dec(buffer, length, (int8_t *)p_rssi, (uint8_t *)p_ch_index, + result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_sec_params_reply(adapter_t *adapter, uint16_t conn_handle, uint8_t sec_status, + ble_gap_sec_params_t const *p_sec_params, + ble_gap_sec_keyset_t const *p_sec_keyset) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + uint32_t index = 0; + auto err_code = app_ble_gap_sec_keys_storage_create(conn_handle, &index); + + if (err_code != NRF_SUCCESS) + { + return err_code; + } + + if (p_sec_keyset) + { + err_code = app_ble_gap_sec_keys_update(index, p_sec_keyset); + + if (err_code != NRF_SUCCESS) + { + return err_code; + } + } + + return ble_gap_sec_params_reply_req_enc(conn_handle, sec_status, p_sec_params, p_sec_keyset, + buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_sec_params_reply_rsp_dec(buffer, length, p_sec_keyset, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_lesc_oob_data_get(adapter_t *adapter, uint16_t conn_handle, + ble_gap_lesc_p256_pk_t const *p_pk_own, + ble_gap_lesc_oob_data_t *p_oobd_own) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_lesc_oob_data_get_req_enc(conn_handle, p_pk_own, p_oobd_own, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_lesc_oob_data_get_rsp_dec(buffer, length, &p_oobd_own, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_lesc_oob_data_set(adapter_t *adapter, uint16_t conn_handle, + ble_gap_lesc_oob_data_t const *p_oobd_own, + ble_gap_lesc_oob_data_t const *p_oobd_peer) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_lesc_oob_data_set_req_enc(conn_handle, p_oobd_own, p_oobd_peer, buffer, + length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_lesc_oob_data_set_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_lesc_dhkey_reply(adapter_t *adapter, uint16_t conn_handle, + ble_gap_lesc_dhkey_t const *p_dhkey) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_lesc_dhkey_reply_req_enc(conn_handle, p_dhkey, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_lesc_dhkey_reply_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_keypress_notify(adapter_t *adapter, uint16_t conn_handle, uint8_t kp_not) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_keypress_notify_req_enc(conn_handle, kp_not, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_keypress_notify_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_phy_update(adapter_t *adapter, uint16_t conn_handle, + ble_gap_phys_t const *p_gap_phys) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_phy_update_req_enc(conn_handle, p_gap_phys, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_phy_update_rsp_dec(buffer, length, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_gap_data_length_update(adapter_t *adapter, uint16_t conn_handle, + ble_gap_data_length_params_t const *p_dl_params, + ble_gap_data_length_limitation_t *p_dl_limitation) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_gap_data_length_update_req_enc(conn_handle, p_dl_params, p_dl_limitation, buffer, + length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_gap_data_length_update_rsp_dec(buffer, length, p_dl_limitation, result); + }; + + return gap_encode_decode(adapter, encode_function, decode_function); +} diff --git a/src/common/ble_gattc_impl.cpp b/src/sd_api_v6/ble_gattc_impl.cpp old mode 100755 new mode 100644 similarity index 100% rename from src/common/ble_gattc_impl.cpp rename to src/sd_api_v6/ble_gattc_impl.cpp diff --git a/src/common/ble_gatts_impl.cpp b/src/sd_api_v6/ble_gatts_impl.cpp old mode 100755 new mode 100644 similarity index 100% rename from src/common/ble_gatts_impl.cpp rename to src/sd_api_v6/ble_gatts_impl.cpp diff --git a/src/sd_api_v6/ble_impl.cpp b/src/sd_api_v6/ble_impl.cpp new file mode 100644 index 000000000..2876bd843 --- /dev/null +++ b/src/sd_api_v6/ble_impl.cpp @@ -0,0 +1,193 @@ +/* + * Copyright (c) 2016 Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in or with a processor manufactured by Nordic + * Semiconductor ASA, or in or with a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * 5. Any software provided in binary or object form under this license must not be + * reverse engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "adapter.h" +#include "ble_common.h" + +#include "app_ble_gap.h" +#include "ble.h" +#include "ble_app.h" +#include + +#include + +uint32_t sd_ble_uuid_encode(adapter_t *adapter, ble_uuid_t const *const p_uuid, + uint8_t *const p_uuid_le_len, uint8_t *const p_uuid_le) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_uuid_encode_req_enc(p_uuid, p_uuid_le_len, p_uuid_le, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_uuid_encode_rsp_dec(buffer, length, p_uuid_le_len, p_uuid_le, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_uuid_vs_add(adapter_t *adapter, ble_uuid128_t const *const p_vs_uuid, + uint8_t *const p_uuid_type) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_uuid_vs_add_req_enc(p_vs_uuid, p_uuid_type, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_uuid_vs_add_rsp_dec(buffer, length, const_cast(&p_uuid_type), + result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_uuid_decode(adapter_t *adapter, uint8_t uuid_le_len, uint8_t const *const p_uuid_le, + ble_uuid_t *const p_uuid) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_uuid_decode_req_enc(uuid_le_len, p_uuid_le, p_uuid, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_uuid_decode_rsp_dec(buffer, length, const_cast(&p_uuid), result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_version_get(adapter_t *adapter, ble_version_t *p_version) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_version_get_req_enc(p_version, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_version_get_rsp_dec(buffer, length, p_version, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_opt_get(adapter_t *adapter, uint32_t opt_id, ble_opt_t *p_opt) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_opt_get_req_enc(opt_id, p_opt, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_opt_get_rsp_dec(buffer, length, &opt_id, p_opt, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_opt_set(adapter_t *adapter, uint32_t opt_id, ble_opt_t const *p_opt) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_opt_set_req_enc(opt_id, p_opt, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_opt_set_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_cfg_set(adapter_t *adapter, uint32_t cfg_id, ble_cfg_t const *p_cfg, + uint32_t app_ram_base) +{ + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_cfg_set_req_enc(cfg_id, p_cfg, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_cfg_set_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_enable(adapter_t *adapter, + uint32_t *p_app_ram_base) +{ + (void)p_app_ram_base; + + auto adapterLayer = static_cast(adapter->internal); + RequestReplyCodecContext context(adapterLayer->transport); + + // Reset previous app_ble_gap data + app_ble_gap_state_reset(); + + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_enable_req_enc( + buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_enable_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} + +uint32_t sd_ble_user_mem_reply(adapter_t *adapter, uint16_t conn_handle, + ble_user_mem_block_t const *p_block) +{ + if (p_block != nullptr) + { + return NRF_ERROR_INVALID_PARAM; + } + + encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { + return ble_user_mem_reply_req_enc(conn_handle, p_block, buffer, length); + }; + + decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, + uint32_t *result) -> uint32_t { + return ble_user_mem_reply_rsp_dec(buffer, length, result); + }; + + return encode_decode(adapter, encode_function, decode_function); +} diff --git a/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/app_ble_user_mem.c b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/app_ble_user_mem.c new file mode 100644 index 000000000..dcb137132 --- /dev/null +++ b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/app_ble_user_mem.c @@ -0,0 +1,101 @@ +/** + * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +#include "app_ble_user_mem.h" +#include "ser_config.h" +#include "nrf_error.h" +#include + +ser_ble_user_mem_t m_app_user_mem_table[SER_MAX_CONNECTIONS]; + +uint32_t app_ble_user_mem_context_create(uint16_t conn_handle, uint32_t *p_index) +{ + uint32_t err_code = NRF_ERROR_NO_MEM; + uint32_t i; + + for (i=0; i #ifdef __cplusplus extern "C" { #endif -#ifndef SER_MAX_CONNECTIONS -#define SER_MAX_CONNECTIONS 8 -#endif - -/**@brief GAP connection - keyset mapping structure. +/**@brief Connection - user memory mapping structure. * - * @note This structure is used to map keysets to connection instances and store them in a static table. + * @note This structure is used to map user memory to connection instances and store it in a static table. */ +//lint -esym(452,ser_ble_user_mem_t) typedef struct { - uint16_t conn_handle; /**< Connection handle.*/ - uint8_t conn_active; /**< Indication that keys for this connection are used by the SoftDevice. 0: keys used; 1: keys not used. */ - ble_gap_sec_keyset_t keyset; /**< Keyset structure, see @ref ble_gap_sec_keyset_t.*/ -} ser_ble_gap_app_keyset_t; - -/**@brief GAP connection - keys table for storage. - * - * @note This array is used to store keys. - */ -extern ser_ble_gap_app_keyset_t m_app_keys_table[SER_MAX_CONNECTIONS]; - -/**@brief Sets root context for calls to *_context_create, *_context_destroy, *_context_find -* -* @param[in] context root pointer to use as key for finding keysets -*/ -void app_ble_gap_sec_context_root_set(void *context); - - -/**@brief Release root context for calls to *_context_create, *_context_destroy, *_context_find -* -*/ -void app_ble_gap_sec_context_root_release(); + uint16_t conn_handle; /**< Connection handle. */ + uint8_t conn_active; /**< Indication that user memory for this connection is used by the SoftDevice. 0: memory used; 1: memory not used. */ + ble_user_mem_block_t mem_block; /**< User memory block structure, see @ref ble_user_mem_block_t. */ +} ser_ble_user_mem_t; -/**@brief Allocates the instance in m_app_keys_table[] for storage of encryption keys. +/**@brief Allocates instance in m_user_mem_table[] for storage. * * @param[in] conn_handle conn_handle * @param[out] p_index Pointer to the index of the allocated instance. @@ -97,18 +78,18 @@ void app_ble_gap_sec_context_root_release(); * @retval NRF_SUCCESS Context allocated. * @retval NRF_ERROR_NO_MEM No free instance available. */ -uint32_t app_ble_gap_sec_context_create(uint16_t conn_handle, uint32_t *p_index); +uint32_t app_ble_user_mem_context_create(uint16_t conn_handle, uint32_t *p_index); -/**@brief Release the instance identified by a connection handle. +/**@brief Release instance identified by a connection handle. * * @param[in] conn_handle conn_handle * * @retval NRF_SUCCESS Context released. * @retval NRF_ERROR_NOT_FOUND Instance with conn_handle not found. */ -uint32_t app_ble_gap_sec_context_destroy(uint16_t conn_handle); +uint32_t app_ble_user_mem_context_destroy(uint16_t conn_handle); -/**@brief Finds index of instance identified by a connection handle in m_app_keys_table[]. +/**@brief Finds index of the instance identified by a connection handle in m_user_mem_table[]. * * @param[in] conn_handle conn_handle * @@ -117,7 +98,7 @@ uint32_t app_ble_gap_sec_context_destroy(uint16_t conn_handle); * @retval NRF_SUCCESS Context found. * @retval NRF_ERROR_NOT_FOUND Instance with conn_handle not found. */ -uint32_t app_ble_gap_sec_context_find(uint16_t conn_handle, uint32_t *p_index); +uint32_t app_ble_user_mem_context_find(uint16_t conn_handle, uint32_t *p_index); /** @} */ @@ -125,4 +106,4 @@ uint32_t app_ble_gap_sec_context_find(uint16_t conn_handle, uint32_t *p_index); } #endif -#endif //_APP_BLE_GAP_SEC_KEYS_H +#endif //_APP_BLE_USER_MEM_H diff --git a/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_app.c b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_app.c new file mode 100644 index 000000000..fcc71ab06 --- /dev/null +++ b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_app.c @@ -0,0 +1,513 @@ +/** + * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +#include +#include +#include "ble_app.h" +#include "ble_serialization.h" +#include "ble_struct_serialization.h" +#include "ble_gap_struct_serialization.h" +#include "ble_gatt_struct_serialization.h" +#include "ble_gattc_struct_serialization.h" +#include "ble_gatts_struct_serialization.h" +#include "ble_l2cap_struct_serialization.h" +#include "cond_field_serialization.h" +#include "app_util.h" + +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 4 +uint32_t ble_enable_req_enc(ble_enable_params_t * p_ble_enable_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_ENABLE); + SER_PUSH_COND(p_ble_enable_params, ble_enable_params_t_enc); + SER_REQ_ENC_END; +} +#else +uint32_t ble_enable_req_enc(uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_ENABLE); + SER_REQ_ENC_END; +} +#endif + +uint32_t ble_enable_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_ENABLE); +} + +uint32_t ble_opt_get_req_enc(uint32_t opt_id, + ble_opt_t const * const p_opt, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_OPT_GET); + + SER_PUSH_uint32(&opt_id); + SER_PUSH_COND(p_opt, NULL); + + SER_REQ_ENC_END; +} + +uint32_t ble_opt_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_opt_id, + ble_opt_t * const p_opt, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_OPT_GET); + + SER_PULL_uint32(p_opt_id); + + field_decoder_handler_t fp_decoder = NULL; + void * p_struct = NULL; + + switch (*p_opt_id) + { +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 4 + case BLE_COMMON_OPT_CONN_BW: + fp_decoder = ble_common_opt_conn_bw_t_dec; + p_struct = &(p_opt->common_opt.conn_bw); + break; +#endif + case BLE_COMMON_OPT_PA_LNA: + fp_decoder = ble_common_opt_pa_lna_t_dec; + p_struct = &(p_opt->common_opt.pa_lna); + break; + case BLE_COMMON_OPT_CONN_EVT_EXT: + fp_decoder = ble_common_opt_conn_evt_ext_t_dec; + p_struct = &(p_opt->common_opt.conn_evt_ext); + break; + case BLE_GAP_OPT_CH_MAP: + fp_decoder = ble_gap_opt_ch_map_t_dec; + p_struct =&(p_opt->gap_opt.ch_map); + break; + case BLE_GAP_OPT_LOCAL_CONN_LATENCY: + fp_decoder = ble_gap_opt_local_conn_latency_t_dec; + p_struct = &(p_opt->gap_opt.local_conn_latency); + break; + case BLE_GAP_OPT_PASSKEY: + fp_decoder = ble_gap_opt_passkey_t_dec; + p_struct = &(p_opt->gap_opt.passkey); + break; + case BLE_GAP_OPT_AUTH_PAYLOAD_TIMEOUT: + fp_decoder = ble_gap_opt_auth_payload_timeout_t_dec; + p_struct = &(p_opt->gap_opt.auth_payload_timeout); + break; +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 4 + case BLE_GAP_OPT_EXT_LEN: + fp_decoder = ble_gap_opt_ext_len_t_dec; + p_struct = &(p_opt->gap_opt.ext_len); + break; +#endif +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 6 + case BLE_GAP_OPT_SCAN_REQ_REPORT: + fp_decoder = ble_gap_opt_scan_req_report_t_dec; + p_struct = &(p_opt->gap_opt.scan_req_report); + break; +#endif +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 4 + case BLE_GAP_OPT_COMPAT_MODE: + fp_decoder = ble_gap_opt_compat_mode_t_dec; + p_struct = &(p_opt->gap_opt.compat_mode); + break; +#else +#ifndef S112 + case BLE_GAP_OPT_COMPAT_MODE_1: + fp_decoder = ble_gap_opt_compat_mode_1_t_dec; + p_struct = &(p_opt->gap_opt.compat_mode_1); + break; +#endif +#endif +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION == 4 + case BLE_GAP_OPT_COMPAT_MODE_2: + fp_decoder = ble_gap_opt_compat_mode_2_t_dec; + p_struct = &(p_opt->gap_opt.compat_mode_2); + break; +#endif + default: + SER_ASSERT(NRF_ERROR_INVALID_PARAM, NRF_ERROR_INVALID_PARAM); + break; + } + + SER_PULL_FIELD(p_struct, fp_decoder); + + SER_RSP_DEC_END; +} + + + +uint32_t ble_opt_set_req_enc(uint32_t const opt_id, + ble_opt_t const * const p_opt, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_OPT_SET); + + SER_PUSH_uint32(&opt_id); + + field_encoder_handler_t fp_encoder = NULL; + void const * p_struct = NULL; + + SER_PUSH_COND(p_opt, NULL); + if (p_opt) + { + switch (opt_id) + { +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 4 + case BLE_COMMON_OPT_CONN_BW: + fp_encoder = ble_common_opt_conn_bw_t_enc; + p_struct = &(p_opt->common_opt.conn_bw); + break; +#endif + case BLE_COMMON_OPT_PA_LNA: + fp_encoder = ble_common_opt_pa_lna_t_enc; + p_struct = &(p_opt->common_opt.pa_lna); + break; + case BLE_COMMON_OPT_CONN_EVT_EXT: + fp_encoder = ble_common_opt_conn_evt_ext_t_enc; + p_struct = &(p_opt->common_opt.conn_evt_ext); + break; + case BLE_GAP_OPT_CH_MAP: + fp_encoder = ble_gap_opt_ch_map_t_enc; + p_struct = &(p_opt->gap_opt.ch_map); + break; + case BLE_GAP_OPT_LOCAL_CONN_LATENCY: + fp_encoder = ble_gap_opt_local_conn_latency_t_enc; + p_struct = &(p_opt->gap_opt.local_conn_latency); + break; + case BLE_GAP_OPT_PASSKEY: + fp_encoder = ble_gap_opt_passkey_t_enc; + p_struct = &(p_opt->gap_opt.passkey); + break; + case BLE_GAP_OPT_AUTH_PAYLOAD_TIMEOUT: + fp_encoder = ble_gap_opt_auth_payload_timeout_t_enc; + p_struct = &(p_opt->gap_opt.auth_payload_timeout); + break; +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 4 + case BLE_GAP_OPT_EXT_LEN: + fp_encoder = ble_gap_opt_ext_len_t_enc; + p_struct = &(p_opt->gap_opt.ext_len); + break; +#endif +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 6 + case BLE_GAP_OPT_SCAN_REQ_REPORT: + fp_encoder = ble_gap_opt_scan_req_report_t_enc; + p_struct = &(p_opt->gap_opt.scan_req_report); + break; +#endif +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 4 + case BLE_GAP_OPT_COMPAT_MODE: + fp_encoder = ble_gap_opt_compat_mode_t_enc; + p_struct = &(p_opt->gap_opt.compat_mode); + break; +#else +#ifndef S112 + case BLE_GAP_OPT_COMPAT_MODE_1: + fp_encoder = ble_gap_opt_compat_mode_1_t_enc; + p_struct = &(p_opt->gap_opt.compat_mode_1); + break; +#endif + case BLE_GAP_OPT_SLAVE_LATENCY_DISABLE: + fp_encoder = ble_gap_opt_slave_latency_disable_t_enc; + p_struct = &(p_opt->gap_opt.slave_latency_disable); + break; +#endif +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION == 4 + case BLE_GAP_OPT_COMPAT_MODE_2: + fp_encoder = ble_gap_opt_compat_mode_2_t_enc; + p_struct = &(p_opt->gap_opt.compat_mode_2); + break; +#endif + default: + SER_ASSERT(NRF_ERROR_INVALID_PARAM,NRF_ERROR_INVALID_PARAM); + break; + } + + SER_PUSH_FIELD(p_struct, fp_encoder); + } + + SER_REQ_ENC_END; +} + + +uint32_t ble_opt_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_OPT_SET); +} + +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 4 +uint32_t ble_tx_packet_count_get_req_enc(uint16_t conn_handle, + uint8_t const * const p_count, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_TX_PACKET_COUNT_GET); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_count, NULL); + + SER_REQ_ENC_END; +} + + +uint32_t ble_tx_packet_count_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint8_t * * const pp_count, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_TX_PACKET_COUNT_GET); + SER_PULL_COND(pp_count, uint8_t_dec); + SER_RSP_DEC_END; +} +#endif + +uint32_t ble_user_mem_reply_req_enc(uint16_t conn_handle, + ble_user_mem_block_t const * p_block, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_USER_MEM_REPLY); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_block, ble_user_mem_block_t_enc); + + SER_REQ_ENC_END; +} + +uint32_t ble_user_mem_reply_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_USER_MEM_REPLY); +} + + + +uint32_t ble_uuid_decode_req_enc(uint8_t uuid_le_len, + uint8_t const * const p_uuid_le, + ble_uuid_t * const p_uuid, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_UUID_DECODE); + + SER_PUSH_len8data(p_uuid_le, uuid_le_len); + SER_PUSH_COND(p_uuid, NULL); + + SER_REQ_ENC_END; +} + + +uint32_t ble_uuid_decode_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_uuid_t * * const pp_uuid, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_UUID_DECODE); + SER_PULL_COND(pp_uuid, ble_uuid_t_dec); + SER_RSP_DEC_END; +} + + +uint32_t ble_uuid_encode_req_enc(ble_uuid_t const * const p_uuid, + uint8_t const * const p_uuid_le_len, + uint8_t const * const p_uuid_le, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_UUID_ENCODE); + + SER_PUSH_COND(p_uuid, ble_uuid_t_enc); + SER_PUSH_COND(p_uuid_le_len, NULL); + SER_PUSH_COND(p_uuid_le, NULL); + + SER_REQ_ENC_END; +} + + +uint32_t ble_uuid_encode_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint8_t * const p_uuid_le_len, + uint8_t * const p_uuid_le, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_UUID_ENCODE); + + uint8_t uuid_le_len; + SER_PULL_uint8(&uuid_le_len); + if (p_uuid_le_len) + { + *p_uuid_le_len = uuid_le_len; + if (p_uuid_le) + { + SER_PULL_uint8array(p_uuid_le, uuid_le_len); + } + } + + SER_RSP_DEC_END; +} + +uint32_t ble_uuid_vs_add_req_enc(ble_uuid128_t const * const p_vs_uuid, + uint8_t * const p_uuid_type, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_UUID_VS_ADD); + + SER_PUSH_COND(p_vs_uuid, ble_uuid128_t_enc); + SER_PUSH_COND(p_uuid_type, NULL); + + SER_REQ_ENC_END; +} + + +uint32_t ble_uuid_vs_add_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint8_t * * const pp_uuid_type, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_UUID_VS_ADD); + + SER_ASSERT_NOT_NULL(pp_uuid_type); + SER_PULL_COND(pp_uuid_type, uint8_t_dec); + + SER_RSP_DEC_END; +} + +uint32_t ble_version_get_req_enc(ble_version_t const * const p_version, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_VERSION_GET); + SER_PUSH_COND(p_version, NULL); + SER_REQ_ENC_END; +} + +uint32_t ble_version_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_version_t * p_version, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_VERSION_GET); + SER_PULL_FIELD(p_version, ble_version_t_dec); + SER_RSP_DEC_END; +} +#if NRF_SD_BLE_API_VERSION >= 4 +uint32_t ble_cfg_set_req_enc(uint32_t cfg_id, + ble_cfg_t const * p_cfg, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_CFG_SET); + SER_PUSH_uint32(&cfg_id); + field_encoder_handler_t fp_encoder = NULL; + void const * p_struct = NULL; + + SER_PUSH_COND(p_cfg, NULL); + if (p_cfg) + { + + switch (cfg_id) + { + case BLE_CONN_CFG_GAP: + fp_encoder = ble_gap_conn_cfg_t_enc; + p_struct = &(p_cfg->conn_cfg.params.gap_conn_cfg); + break; + case BLE_CONN_CFG_GATTC: + fp_encoder = ble_gattc_conn_cfg_t_enc; + p_struct = &(p_cfg->conn_cfg.params.gattc_conn_cfg); + break; + case BLE_CONN_CFG_GATTS: + fp_encoder = ble_gatts_conn_cfg_t_enc; + p_struct = &(p_cfg->conn_cfg.params.gatts_conn_cfg); + break; + case BLE_CONN_CFG_GATT: + fp_encoder = ble_gatt_conn_cfg_t_enc; + p_struct = &(p_cfg->conn_cfg.params.gatt_conn_cfg); + break; +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION >= 5 && !defined(S112) + case BLE_CONN_CFG_L2CAP: + fp_encoder = ble_l2cap_conn_cfg_t_enc; + p_struct = &(p_cfg->conn_cfg.params.l2cap_conn_cfg); + break; +#endif + case BLE_COMMON_CFG_VS_UUID: + fp_encoder = ble_common_cfg_vs_uuid_t_enc; + p_struct = &(p_cfg->common_cfg.vs_uuid_cfg); + break; + case BLE_GAP_CFG_ROLE_COUNT: + fp_encoder = ble_gap_cfg_role_count_t_enc; + p_struct = &(p_cfg->gap_cfg.role_count_cfg); + break; + case BLE_GAP_CFG_DEVICE_NAME: + fp_encoder = ble_gap_cfg_device_name_t_enc; + p_struct = &(p_cfg->gap_cfg.device_name_cfg); + break; + case BLE_GATTS_CFG_SERVICE_CHANGED: + fp_encoder = ble_gatts_cfg_service_changed_t_enc; + p_struct = &(p_cfg->gatts_cfg.service_changed); + break; + case BLE_GATTS_CFG_ATTR_TAB_SIZE: + fp_encoder = ble_gatts_cfg_attr_tab_size_t_enc; + p_struct = &(p_cfg->gatts_cfg.attr_tab_size); + break; + } + if (cfg_id >= BLE_CONN_CFG_BASE && cfg_id <= BLE_CONN_CFG_GATT) + { + SER_PUSH_uint8(&p_cfg->conn_cfg.conn_cfg_tag); + } + SER_PUSH_FIELD(p_struct, fp_encoder); + } + SER_REQ_ENC_END; +} + + +uint32_t ble_cfg_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_CFG_SET); +} +#endif //NRF_SD_BLE_API_VERSION >= 4 diff --git a/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_app.h b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_app.h new file mode 100644 index 000000000..a68cf0d9e --- /dev/null +++ b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_app.h @@ -0,0 +1,523 @@ +/** + * Copyright (c) 2013 - 2018, Nordic Semiconductor ASA + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +#ifndef BLE_APP_H__ +#define BLE_APP_H__ + +/** + * @addtogroup ser_codecs Serialization codecs + * @ingroup ble_sdk_lib_serialization + */ + +/** + * @addtogroup ser_app_s130_codecs Application codecs for S132 and S140 + * @ingroup ser_codecs_app + */ + +/**@file + * + * @defgroup ble_app Application command request encoders and command response decoders + * @{ + * @ingroup ser_app_s130_codecs + * + * @brief Application command request encoders and command response decoders. + */ +#include "ble.h" + +#ifdef __cplusplus +extern "C" { +#endif +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 4 +/** + * @brief Encodes @ref sd_ble_tx_packet_count_get command request. + * + * @sa @ref ble_tx_packet_count_get_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_count Pointer to count value to be filled. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of the encoded command packet. + * + * @note \p p_count will not be updated by the command + * request encoder. Updated values are set by @ref ble_tx_packet_count_get_rsp_dec. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_tx_packet_count_get_req_enc(uint16_t conn_handle, + uint8_t const * const p_count, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes a response to @ref sd_ble_tx_packet_count_get command. + * + * @sa @ref ble_tx_packet_count_get_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to the beginning of a command response packet. + * @param[in] packet_len Length (in bytes) of the response packet. + * @param[out] pp_count Pointer to the pointer to count value. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_tx_packet_count_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint8_t * * const pp_count, + uint32_t * const p_result_code); +#endif +/**@brief Encodes the @ref sd_ble_uuid_encode command request. + * + * @sa @ref ble_uuid_encode_rsp_dec for command response decoder. + * + * @param[in] p_uuid Pointer to a @ref ble_uuid_t structure that will be encoded into bytes. + * @param[in] p_uuid_le_len Size of \p p_uuid_le, if \p p_uuid_le is not NULL + * @param[in] p_uuid_le Pointer to a buffer where the little endian raw UUID bytes(2 or 16) + * will be stored. Can be NULL to calculate the required size. + * @param[in] p_buf Pointer to a buffer where the encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of the encoded command packet. + * + * @note \p p_uuid_le_len and \p p_uuid_le will not be updated by the command + * request encoder. Updated values are set by @ref ble_uuid_encode_rsp_dec. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_uuid_encode_req_enc(ble_uuid_t const * const p_uuid, + uint8_t const * const p_uuid_le_len, + uint8_t const * const p_uuid_le, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes a response to the @ref sd_ble_uuid_encode command. + * + * @sa @ref ble_uuid_encode_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to the beginning of a command response packet. + * @param[in] packet_len Length (in bytes) of a response packet. + * @param[in,out] p_uuid_le_len \c in: Size (in bytes) of \p p_uuid_le buffer. + * \c out: Length of decoded contents of \p p_uuid_le. + * @param[out] p_uuid_le Pointer to a buffer where the encoded UUID will be stored. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Length of \p p_uuid_le is too small to hold the decoded + * value from response. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match the expected + * operation code. + */ +uint32_t ble_uuid_encode_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint8_t * const p_uuid_le_len, + uint8_t * const p_uuid_le, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_uuid_decode command request. + * + * @sa @ref ble_uuid_decode_rsp_dec for command response decoder. + * + * @param[in] uuid_le_len Size of \p p_uuid_le if \p p_uuid_le is not NULL. + * @param[in] p_uuid_le Pointer to a buffer where the little endian raw UUID bytes(2 or 16) + * are stored. + * @param[out] p_uuid Pointer to a @ref ble_uuid_t structure were the raw UUID will be decoded. + * @param[in] p_buf Pointer to the buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of the encoded command packet. + * + * @note \p p_uuid will not be updated by the command request encoder. + * Updated values are set by @ref ble_uuid_decode_rsp_dec. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_uuid_decode_req_enc(uint8_t uuid_le_len, + uint8_t const * const p_uuid_le, + ble_uuid_t * const p_uuid, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes a response to the @ref sd_ble_uuid_decode command. + * + * @sa @ref ble_uuid_decode_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to the beginning of command response packet. + * @param[in] packet_len Length (in bytes) of the response packet. + * @param[out] p_uuid Pointer to a buffer where the decoded UUID will be stored. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match the expected + * operation code. + */ +uint32_t ble_uuid_decode_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_uuid_t * * const p_uuid, + uint32_t * const p_result_code); + +/**@brief Encodes the @ref sd_ble_uuid_vs_add command request. + * + * @sa @ref ble_uuid_vs_add_rsp_dec for command response decoder. + * + * @param[in] p_vs_uuid Pointer to a @ref ble_uuid128_t structure. + * @param[in] p_uuid_type Pointer to uint8_t where UUID type will be returned. + * @param[in] p_buf Pointer to buffer where the encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @note \p p_uuid_type will not be updated by the command request encoder. + * Updated values are set by @ref ble_uuid_vs_add_rsp_dec. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_uuid_vs_add_req_enc(ble_uuid128_t const * const p_vs_uuid, + uint8_t * const p_uuid_type, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to the @ref sd_ble_uuid_vs_add command. + * + * @sa @ref ble_uuid_vs_add_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to the beginning of command response packet. + * @param[in] packet_len Length (in bytes) of a response packet. + * @param[out] pp_uuid_type Pointer to a pointer to uint8_t where the decoded UUID type will be stored. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_uuid_vs_add_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint8_t * * const pp_uuid_type, + uint32_t * const p_result_code); + +/**@brief Encodes the @ref sd_ble_version_get command request. + * + * @sa @ref ble_version_get_rsp_dec for command response decoder. + * + * @param[in] p_version Pointer to a @ref ble_version_t structure to be filled by the response. + * @param[in] p_buf Pointer to a buffer where the encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_version_get_req_enc(ble_version_t const * const p_version, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to the @ref sd_ble_version_get command. + * + * @sa @ref ble_version_get_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to the beginning of a command response packet. + * @param[in] packet_len Length (in bytes) of the response packet. + * @param[out] p_version Pointer to a @ref ble_version_t where the decoded version will be stored. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Version information stored successfully. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold the decoded event. + */ +uint32_t ble_version_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_version_t * p_version, + uint32_t * const p_result_code); + + +/**@brief Encodes the @ref sd_ble_opt_set command request. + * + * @sa @ref ble_opt_set_rsp_dec for command response decoder. + * + * @param[in] opt_id Identifies type of parameter in ble_opt_t union. + * @param[in] p_opt Pointer to the ble_opt_t union. + * @param[in] p_buf Pointer to a buffer where the encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of the encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_PARAM Invalid opt id. + */ +uint32_t ble_opt_set_req_enc(uint32_t const opt_id, + ble_opt_t const * const p_opt, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to the @ref sd_ble_opt_set command. + * + * @sa @ref ble_opt_set_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to the beginning of a command response packet. + * @param[in] packet_len Length (in bytes) of the response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Version information stored successfully. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + */ +uint32_t ble_opt_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 4 +/**@brief Encodes the @ref sd_ble_enable command request. + * + * @sa @ref ble_enable_rsp_dec for command response decoder. + * + * @param[in] p_ble_enable_params Pointer to the @ref ble_enable_params_t structure. + * @param[in] p_buf Pointer to the buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of the encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_enable_req_enc(ble_enable_params_t * p_ble_enable_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len); +#else +/**@brief Encodes the @ref sd_ble_enable command request. + * + * @sa @ref ble_enable_rsp_dec for command response decoder. + * + * @param[in] p_buf Pointer to the buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of the encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_enable_req_enc(uint8_t * const p_buf, + uint32_t * const p_buf_len); + +#endif + +/**@brief Decodes response to the @ref sd_ble_enable command. + * + * @sa @ref ble_enable_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to the beginning of a command response packet. + * @param[in] packet_len Length (in bytes) of the response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Success. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold the decoded event. + */ +uint32_t ble_enable_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); +/**@brief Encodes the @ref sd_ble_opt_get command request. + * + * @sa @ref ble_opt_get_rsp_dec for command response decoder. + * + * @param[in] opt_id Identifies the type of parameter in the ble_opt_t union. + * @param[in] p_opt Pointer to the @ref ble_opt_t union to be filled by the response. + * @param[in] p_buf Pointer to the buffer where the encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of the encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_PARAM Invalid opt id. + */ +uint32_t ble_opt_get_req_enc(uint32_t opt_id, + ble_opt_t const * const p_opt, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to the @ref sd_ble_opt_get command. + * + * @sa @ref ble_opt_get_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to the beginning of a command response packet. + * @param[in] packet_len Length (in bytes) of the response packet. + * @param[out] p_opt_id Pointer to the decoded opt_id. + * @param[out] p_opt Pointer to the decoded @ref ble_opt_t union. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Opt stored successfully. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold the decoded event. + * @retval NRF_ERROR_INVALID_PARAM Invalid opt id. + */ + +uint32_t ble_opt_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_opt_id, + ble_opt_t * const p_opt, + uint32_t * const p_result_code); + +/**@brief Encodes the @ref sd_ble_user_mem_reply command request. + * + * @sa @ref ble_user_mem_reply_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_block Pointer to the @ref ble_user_mem_block_t structure. + * @param[in] p_buf Pointer to the buffer where the encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of the encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_PARAM Invalid opt id. + */ +uint32_t ble_user_mem_reply_req_enc(uint16_t conn_handle, + ble_user_mem_block_t const * p_block, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to the @ref sd_ble_user_mem_reply command. + * + * @sa @ref ble_user_mem_reply_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to the beginning of a command response packet. + * @param[in] packet_len Length (in bytes) of the response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Opt stored successfully. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold the decoded event. + * @retval NRF_ERROR_INVALID_PARAM Invalid opt id. + */ +uint32_t ble_user_mem_reply_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); +#if NRF_SD_BLE_API_VERSION >= 4 +/**@brief Encodes the @ref sd_ble_cfg_set command request. + * + * @sa @ref ble_cfg_set_rsp_dec for command response decoder. + * + * @param[in] cfg_id Configuratio id. + * @param[in] p_cfg Pointer to the configuration. + * @param[in] p_buf Pointer to the buffer where the encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of the encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_PARAM Invalid opt id. + */ +uint32_t ble_cfg_set_req_enc(uint32_t cfg_id, + ble_cfg_t const * p_cfg, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to the @ref sd_ble_cfg_set command. + * + * @sa @ref ble_cfg_set_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to the beginning of a command response packet. + * @param[in] packet_len Length (in bytes) of the response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Opt stored successfully. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold the decoded event. + * @retval NRF_ERROR_INVALID_PARAM Invalid opt id. + */ +uint32_t ble_cfg_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); +#endif //NRF_SD_BLE_API_VERSION >= 4 + +/**@brief Event decoding dispatcher. + * + * The event decoding dispatcher will route the event packet to the correct decoder, which in turn + * decodes the contents of the event and updates the \p p_event struct. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of the event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to the \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, the required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of the decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold the decoded event. + * @retval NRF_ERROR_NOT_FOUND Decoding failure. No event decoder is available. + */ +uint32_t ble_event_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_event.c b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_event.c new file mode 100644 index 000000000..7b7463252 --- /dev/null +++ b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_event.c @@ -0,0 +1,326 @@ +/** + * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +#include "ble_serialization.h" +#include "ble_app.h" +#include "ble_evt_app.h" +#include "ble_gap_evt_app.h" +#include "ble_gattc_evt_app.h" +#include "ble_gatts_evt_app.h" +#include "ble_l2cap_evt_app.h" +#include "app_util.h" + +uint32_t ble_event_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + uint32_t err_code; + SER_ASSERT_NOT_NULL(p_buf); + SER_ASSERT_NOT_NULL(p_event_len); + SER_ASSERT_LENGTH_LEQ(SER_EVT_HEADER_SIZE, packet_len); + SER_ASSERT_NOT_NULL(p_event); + SER_ASSERT_LENGTH_LEQ(sizeof (ble_evt_hdr_t), *p_event_len); + *p_event_len -= sizeof (ble_evt_hdr_t); + + const uint16_t event_id = uint16_decode(&p_buf[SER_EVT_ID_POS]); + const uint8_t * p_sub_buffer = &p_buf[SER_EVT_HEADER_SIZE]; + const uint32_t sub_packet_len = packet_len - SER_EVT_HEADER_SIZE; + + uint32_t (*fp_event_decoder)(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) = NULL; + + switch (event_id) + { +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 4 + case BLE_EVT_TX_COMPLETE: + fp_event_decoder = ble_evt_tx_complete_dec; + break; + case BLE_EVT_DATA_LENGTH_CHANGED: + fp_event_decoder = ble_evt_data_length_changed_dec; + break; +#endif + case BLE_EVT_USER_MEM_REQUEST: + fp_event_decoder = ble_evt_user_mem_request_dec; + break; + + case BLE_EVT_USER_MEM_RELEASE: + fp_event_decoder = ble_evt_user_mem_release_dec; + break; + + + case BLE_GAP_EVT_PASSKEY_DISPLAY: + fp_event_decoder = ble_gap_evt_passkey_display_dec; + break; + + case BLE_GAP_EVT_AUTH_KEY_REQUEST: + fp_event_decoder = ble_gap_evt_auth_key_request_dec; + break; + + case BLE_GAP_EVT_CONN_PARAM_UPDATE: + fp_event_decoder = ble_gap_evt_conn_param_update_dec; + break; + +#ifndef S112 + case BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST: + fp_event_decoder = ble_gap_evt_conn_param_update_request_dec; + break; +#endif + case BLE_GAP_EVT_CONN_SEC_UPDATE: + fp_event_decoder = ble_gap_evt_conn_sec_update_dec; + break; + + case BLE_GAP_EVT_CONNECTED: + fp_event_decoder = ble_gap_evt_connected_dec; + break; + + case BLE_GAP_EVT_DISCONNECTED: + fp_event_decoder = ble_gap_evt_disconnected_dec; + break; + + case BLE_GAP_EVT_TIMEOUT: + fp_event_decoder = ble_gap_evt_timeout_dec; + break; + + case BLE_GAP_EVT_RSSI_CHANGED: + fp_event_decoder = ble_gap_evt_rssi_changed_dec; + break; + + case BLE_GAP_EVT_SEC_INFO_REQUEST: + fp_event_decoder = ble_gap_evt_sec_info_request_dec; + break; + + case BLE_GAP_EVT_SEC_PARAMS_REQUEST: + fp_event_decoder = ble_gap_evt_sec_params_request_dec; + break; + + case BLE_GAP_EVT_AUTH_STATUS: + fp_event_decoder = ble_gap_evt_auth_status_dec; + break; + + case BLE_GAP_EVT_SEC_REQUEST: + fp_event_decoder = ble_gap_evt_sec_request_dec; + break; + + case BLE_GAP_EVT_KEY_PRESSED: + fp_event_decoder = ble_gap_evt_key_pressed_dec; + break; + + case BLE_GAP_EVT_LESC_DHKEY_REQUEST: + fp_event_decoder = ble_gap_evt_lesc_dhkey_request_dec; + break; +#if NRF_SD_BLE_API_VERSION >= 5 + case BLE_GAP_EVT_PHY_UPDATE: + fp_event_decoder = ble_gap_evt_phy_update_dec; + break; + case BLE_GAP_EVT_PHY_UPDATE_REQUEST: + fp_event_decoder = ble_gap_evt_phy_update_request_dec; + break; +#endif +#if NRF_SD_BLE_API_VERSION >= 6 +#ifndef S112 + case BLE_GAP_EVT_QOS_CHANNEL_SURVEY_REPORT: + fp_event_decoder = ble_gap_evt_qos_channel_survey_report_dec; + break; +#endif + case BLE_GAP_EVT_ADV_SET_TERMINATED: + fp_event_decoder = ble_gap_evt_adv_set_terminated_dec; + break; +#endif +#if NRF_SD_BLE_API_VERSION >= 4 && !defined(S112) + case BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST: + fp_event_decoder = ble_gap_evt_data_length_update_request_dec; + break; + case BLE_GAP_EVT_DATA_LENGTH_UPDATE: + fp_event_decoder = ble_gap_evt_data_length_update_dec; + break; +#endif + case BLE_GATTC_EVT_CHAR_DISC_RSP: + fp_event_decoder = ble_gattc_evt_char_disc_rsp_dec; + break; + + case BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP: + fp_event_decoder = ble_gattc_evt_char_val_by_uuid_read_rsp_dec; + break; + + case BLE_GATTC_EVT_DESC_DISC_RSP: + fp_event_decoder = ble_gattc_evt_desc_disc_rsp_dec; + break; + + case BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP: + fp_event_decoder = ble_gattc_evt_prim_srvc_disc_rsp_dec; + break; + + case BLE_GATTC_EVT_READ_RSP: + fp_event_decoder = ble_gattc_evt_read_rsp_dec; + break; + + case BLE_GATTC_EVT_HVX: + fp_event_decoder = ble_gattc_evt_hvx_dec; + break; + + case BLE_GATTC_EVT_TIMEOUT: + fp_event_decoder = ble_gattc_evt_timeout_dec; + break; + + case BLE_GATTC_EVT_WRITE_RSP: + fp_event_decoder = ble_gattc_evt_write_rsp_dec; + break; + + case BLE_GATTC_EVT_CHAR_VALS_READ_RSP: + fp_event_decoder = ble_gattc_evt_char_vals_read_rsp_dec; + break; + + case BLE_GATTC_EVT_REL_DISC_RSP: + fp_event_decoder = ble_gattc_evt_rel_disc_rsp_dec; + break; + + case BLE_GATTC_EVT_ATTR_INFO_DISC_RSP: + fp_event_decoder = ble_gattc_evt_attr_info_disc_rsp_dec; + break; + + case BLE_GATTC_EVT_EXCHANGE_MTU_RSP: + fp_event_decoder = ble_gattc_evt_exchange_mtu_rsp_dec; + break; +#if NRF_SD_BLE_API_VERSION >= 4 + case BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE: + fp_event_decoder = ble_gattc_evt_write_cmd_tx_complete_dec; + break; +#endif + case BLE_GATTS_EVT_WRITE: + fp_event_decoder = ble_gatts_evt_write_dec; + break; + + case BLE_GATTS_EVT_TIMEOUT: + fp_event_decoder = ble_gatts_evt_timeout_dec; + break; + + case BLE_GATTS_EVT_SC_CONFIRM: + fp_event_decoder = ble_gatts_evt_sc_confirm_dec; + break; + + case BLE_GATTS_EVT_HVC: + fp_event_decoder = ble_gatts_evt_hvc_dec; + break; + + case BLE_GATTS_EVT_SYS_ATTR_MISSING: + fp_event_decoder = ble_gatts_evt_sys_attr_missing_dec; + break; + + case BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST: + fp_event_decoder = ble_gatts_evt_rw_authorize_request_dec; + break; + + case BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST: + fp_event_decoder = ble_gatts_evt_exchange_mtu_request_dec; + break; +#if NRF_SD_BLE_API_VERSION >= 4 + case BLE_GATTS_EVT_HVN_TX_COMPLETE: + fp_event_decoder = ble_gatts_evt_hvn_tx_complete_dec; + break; +#endif +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 4 + case BLE_L2CAP_EVT_RX: + fp_event_decoder = ble_l2cap_evt_rx_dec; + break; +#endif + +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION >= 5 && !defined(S112) + case BLE_L2CAP_EVT_CH_SETUP_REQUEST: + fp_event_decoder = ble_l2cap_evt_ch_setup_request_dec; + break; + + case BLE_L2CAP_EVT_CH_SETUP_REFUSED: + fp_event_decoder = ble_l2cap_evt_ch_setup_refused_dec; + break; + + case BLE_L2CAP_EVT_CH_SETUP: + fp_event_decoder = ble_l2cap_evt_ch_setup_dec; + break; + + case BLE_L2CAP_EVT_CH_RELEASED: + fp_event_decoder = ble_l2cap_evt_ch_released_dec; + break; + + case BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED: + fp_event_decoder = ble_l2cap_evt_ch_sdu_buf_released_dec; + break; + + case BLE_L2CAP_EVT_CH_CREDIT: + fp_event_decoder = ble_l2cap_evt_ch_credit_dec; + break; + + case BLE_L2CAP_EVT_CH_RX: + fp_event_decoder = ble_l2cap_evt_ch_rx_dec; + break; + + case BLE_L2CAP_EVT_CH_TX: + fp_event_decoder = ble_l2cap_evt_ch_tx_dec; + break; + +#endif +#ifndef S112 + case BLE_GAP_EVT_ADV_REPORT: + fp_event_decoder = ble_gap_evt_adv_report_dec; + break; +#endif + case BLE_GAP_EVT_SCAN_REQ_REPORT: + fp_event_decoder = ble_gap_evt_scan_req_report_dec; + break; + default: + break; + } + + if (fp_event_decoder) + { + err_code = fp_event_decoder(p_sub_buffer, sub_packet_len, p_event, p_event_len); + } + else + { + err_code = NRF_ERROR_NOT_FOUND; + } + + *p_event_len += offsetof(ble_evt_t, evt); + p_event->header.evt_id = (err_code == NRF_SUCCESS) ? event_id : 0; + p_event->header.evt_len = (err_code == NRF_SUCCESS) ? (uint16_t)*p_event_len : 0; + + return err_code; +} diff --git a/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_evt_app.c b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_evt_app.c new file mode 100644 index 000000000..a5964c672 --- /dev/null +++ b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_evt_app.c @@ -0,0 +1,129 @@ +/** + * Copyright (c) 2015 - 2018, Nordic Semiconductor ASA + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +#include "ble_serialization.h" +#include "ble_struct_serialization.h" +#include "cond_field_serialization.h" +#include "app_util.h" +#include "ble_evt_app.h" +#include "app_ble_user_mem.h" + + +// Helper definitions for common event type names to be compliant with +// event serialization macros. +#define ble_common_evt_tx_complete_t ble_evt_tx_complete_t +#define ble_common_evt_user_mem_request_t ble_evt_user_mem_request_t +#define ble_common_evt_user_mem_release_t ble_evt_user_mem_release_t +#define ble_common_evt_data_length_changed_t ble_evt_data_length_changed_t + + +extern ser_ble_user_mem_t m_app_user_mem_table[]; + +uint32_t ble_evt_user_mem_release_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_EVT_USER_MEM_RELEASE, common, user_mem_release); + + SER_PULL_uint16(&p_event->evt.common_evt.conn_handle); + SER_PULL_uint8(&p_event->evt.common_evt.params.user_mem_release.type); + SER_PULL_uint16(&p_event->evt.common_evt.params.user_mem_release.mem_block.len); + + //Set the memory pointer to not-null value. + p_event->evt.common_evt.params.user_mem_release.mem_block.p_mem = (uint8_t *)~0; + SER_PULL_COND(&p_event->evt.common_evt.params.user_mem_release.mem_block.p_mem, NULL); + if (p_event->evt.common_evt.params.user_mem_release.mem_block.p_mem) + { + // Using connection handle find which mem block to release in Application Processor + uint32_t user_mem_table_index; + err_code = app_ble_user_mem_context_find(p_event->evt.common_evt.conn_handle, &user_mem_table_index); + SER_ASSERT(err_code == NRF_SUCCESS, err_code); + p_event->evt.common_evt.params.user_mem_release.mem_block.p_mem = + m_app_user_mem_table[user_mem_table_index].mem_block.p_mem; + } + + // Now user memory context can be released + err_code = app_ble_user_mem_context_destroy(p_event->evt.common_evt.conn_handle); + SER_ASSERT(err_code == NRF_SUCCESS, err_code); + + SER_EVT_DEC_END; +} + +uint32_t ble_evt_user_mem_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_EVT_USER_MEM_REQUEST, common, user_mem_request); + + SER_PULL_uint16(&p_event->evt.common_evt.conn_handle); + SER_PULL_uint8(&p_event->evt.common_evt.params.user_mem_request.type); + + SER_EVT_DEC_END; +} + +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 4 +uint32_t ble_evt_tx_complete_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_EVT_TX_COMPLETE, common, tx_complete); + + SER_PULL_uint16(&p_event->evt.common_evt.conn_handle); + SER_PULL_uint8(&p_event->evt.common_evt.params.tx_complete.count); + + SER_EVT_DEC_END; +} + + +uint32_t ble_evt_data_length_changed_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_EVT_DATA_LENGTH_CHANGED, common, data_length_changed); + + SER_PULL_uint16(&p_event->evt.common_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.common_evt.params.data_length_changed, ble_evt_data_length_changed_t_dec); + + SER_EVT_DEC_END; +} +#endif diff --git a/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_evt_app.h b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_evt_app.h new file mode 100644 index 000000000..67b613568 --- /dev/null +++ b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_evt_app.h @@ -0,0 +1,157 @@ +/** + * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +#ifndef BLE_EVT_APP_H__ +#define BLE_EVT_APP_H__ + +/**@file + * + * @defgroup ble_evt_app Application event decoders + * @{ + * @ingroup ser_app_s130_codecs + * + * @brief Application event decoders. + */ +#include "ble.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 4 +/** + * @brief Decodes the ble_evt_tx_complete event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of the event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to the \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, the required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of the \p p_event buffer. + * \c out: Length of the decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold the decoded event. + */ +uint32_t ble_evt_tx_complete_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); +#endif +/** + * @brief Decodes the ble_evt_user_mem_request event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of the event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to the \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, the required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of the \p p_event buffer. + * \c out: Length of the decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold the decoded event. + */ +uint32_t ble_evt_user_mem_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes the ble_evt_user_mem_release event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of the event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to the \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, the required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of the \p p_event buffer. + * \c out: Length of the decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold the decoded event. + */ +uint32_t ble_evt_user_mem_release_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 4 +/** + * @brief Decodes the ble_evt_data_length_changed event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of the event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to the \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, the required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of the \p p_event buffer. + * \c out: Length of the decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold the decoded event. + */ +uint32_t ble_evt_data_length_changed_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); +#endif + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gap_app.c b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gap_app.c new file mode 100644 index 000000000..6e8c63954 --- /dev/null +++ b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gap_app.c @@ -0,0 +1,1021 @@ +/** + * Copyright (c) 2013 - 2018, Nordic Semiconductor ASA + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +#include "ble_gap_app.h" +#include +#include +#include "ble_serialization.h" +#include "ble_gap_struct_serialization.h" +#include "ble_struct_serialization.h" +#include "cond_field_serialization.h" +#include "app_util.h" + +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 6 +uint32_t ble_gap_adv_data_set_req_enc(uint8_t const * const p_data, + uint8_t dlen, + uint8_t const * const p_sr_data, + uint8_t srdlen, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_ADV_DATA_SET); + + SER_PUSH_len8data(p_data, dlen); + SER_PUSH_len8data(p_sr_data, srdlen); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_adv_data_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_ADV_DATA_SET); +} +#endif + +uint32_t ble_gap_adv_start_req_enc( +#if NRF_SD_BLE_API_VERSION > 5 + uint8_t adv_handle, +#else + ble_gap_adv_params_t const * const p_adv_params, +#endif +#if NRF_SD_BLE_API_VERSION >= 4 + uint8_t conn_cfg_tag, +#endif + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_ADV_START); + +#if NRF_SD_BLE_API_VERSION > 5 + SER_PUSH_uint8(&adv_handle); +#else + SER_PUSH_COND(p_adv_params, ble_gap_adv_params_t_enc); +#endif + +#if NRF_SD_BLE_API_VERSION >= 4 + SER_PUSH_uint8(&conn_cfg_tag); +#endif + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_adv_start_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_ADV_START); +} + + +uint32_t ble_gap_adv_stop_req_enc( +#if NRF_SD_BLE_API_VERSION > 5 + uint8_t adv_handle, +#endif + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_ADV_STOP); +#if NRF_SD_BLE_API_VERSION > 5 + SER_PUSH_uint8(&adv_handle); +#endif + SER_REQ_ENC_END; +} + +uint32_t ble_gap_adv_stop_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_ADV_STOP); +} + + + +uint32_t ble_gap_appearance_get_req_enc(uint16_t const * const p_appearance, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_APPEARANCE_GET); + SER_PUSH_COND(p_appearance, NULL); + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_appearance_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint16_t * const p_appearance, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GAP_APPEARANCE_GET); + SER_PULL_COND(&p_appearance, uint16_t_dec); + SER_RSP_DEC_END; +} + + +uint32_t ble_gap_appearance_set_req_enc(uint16_t appearance, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_APPEARANCE_SET); + SER_PUSH_uint16(&appearance); + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_appearance_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_APPEARANCE_SET); +} + + +uint32_t ble_gap_auth_key_reply_req_enc(uint16_t conn_handle, + uint8_t key_type, + uint8_t const * const p_key, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_AUTH_KEY_REPLY); + + uint8_t key_len; + switch (key_type) + { + case BLE_GAP_AUTH_KEY_TYPE_NONE: + key_len = 0; + break; + + case BLE_GAP_AUTH_KEY_TYPE_PASSKEY: + key_len = 6; + break; + + case BLE_GAP_AUTH_KEY_TYPE_OOB: + key_len = 16; + break; + + default: + return NRF_ERROR_INVALID_PARAM; + } + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_uint8(&key_type); + SER_PUSH_buf(p_key, key_len); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_auth_key_reply_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_AUTH_KEY_REPLY); +} + + + +uint32_t ble_gap_authenticate_req_enc(uint16_t conn_handle, + ble_gap_sec_params_t const * const p_sec_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_AUTHENTICATE); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_sec_params, ble_gap_sec_params_t_enc); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_authenticate_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_AUTHENTICATE); +} + + +uint32_t ble_gap_conn_param_update_req_enc(uint16_t conn_handle, + ble_gap_conn_params_t const * const p_conn_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_CONN_PARAM_UPDATE); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_conn_params, ble_gap_conn_params_t_enc); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_conn_param_update_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_CONN_PARAM_UPDATE); +} + + +uint32_t ble_gap_conn_sec_get_req_enc(uint16_t conn_handle, + ble_gap_conn_sec_t const * const p_conn_sec, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_CONN_SEC_GET); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_conn_sec, NULL); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_conn_sec_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gap_conn_sec_t * * const pp_conn_sec, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GAP_CONN_SEC_GET); + SER_PULL_COND(pp_conn_sec, ble_gap_conn_sec_t_dec); + SER_RSP_DEC_END; +} + +#ifndef S112 +uint32_t ble_gap_connect_req_enc(ble_gap_addr_t const * const p_peer_addr, + ble_gap_scan_params_t const * const p_scan_params, + ble_gap_conn_params_t const * const p_conn_params, +#if NRF_SD_BLE_API_VERSION >= 4 + uint8_t conn_cfg_tag, +#endif + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_CONNECT); + + SER_PUSH_COND(p_peer_addr, ble_gap_addr_t_enc); + SER_PUSH_COND(p_scan_params, ble_gap_scan_params_t_enc); + SER_PUSH_COND(p_conn_params, ble_gap_conn_params_t_enc); +#if NRF_SD_BLE_API_VERSION >= 4 + SER_PUSH_uint8(&conn_cfg_tag); +#endif + + SER_REQ_ENC_END; +} + +uint32_t ble_gap_connect_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_CONNECT); +} + + +uint32_t ble_gap_connect_cancel_req_enc(uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_CONNECT_CANCEL); + SER_REQ_ENC_END; +} + +uint32_t ble_gap_connect_cancel_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_CONNECT_CANCEL); +} +#endif + +uint32_t ble_gap_device_name_get_req_enc(uint8_t const * const p_dev_name, + uint16_t const * const p_len, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_DEVICE_NAME_GET); + + SER_PUSH_COND(p_len, uint16_t_enc); + SER_PUSH_COND(p_dev_name, NULL); + + SER_REQ_ENC_END; +} + +uint32_t ble_gap_device_name_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint8_t * const p_dev_name, + uint16_t * const p_dev_name_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GAP_DEVICE_NAME_GET); + + SER_PULL_COND(&p_dev_name_len, uint16_t_dec); + if (p_dev_name_len) + { + SER_PULL_uint8array(p_dev_name, *p_dev_name_len); + } + + SER_RSP_DEC_END; +} + + +uint32_t ble_gap_device_name_set_req_enc(ble_gap_conn_sec_mode_t const * const p_write_perm, + uint8_t const * const p_dev_name, + uint16_t len, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_DEVICE_NAME_SET); + + SER_ERROR_CHECK(len <= BLE_GAP_DEVNAME_MAX_LEN, NRF_ERROR_INVALID_PARAM); + + SER_PUSH_COND(p_write_perm, ble_gap_conn_sec_mode_t_enc); + SER_PUSH_len16data(p_dev_name, len); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_device_name_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_DEVICE_NAME_SET); +} + + +uint32_t ble_gap_disconnect_req_enc(uint16_t conn_handle, + uint8_t hci_status_code, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_DISCONNECT); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_uint8(&hci_status_code); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_disconnect_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_DISCONNECT); +} + +#ifndef S112 +uint32_t ble_gap_encrypt_req_enc(uint16_t conn_handle, + ble_gap_master_id_t const * const p_master_id, + ble_gap_enc_info_t const * const p_enc_info, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_ENCRYPT); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_master_id, ble_gap_master_id_t_enc); + SER_PUSH_COND(p_enc_info, ble_gap_enc_info_t_enc); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_encrypt_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_ENCRYPT); +} +#endif + +uint32_t ble_gap_keypress_notify_req_enc(uint16_t conn_handle, + uint8_t kp_not, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_KEYPRESS_NOTIFY); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_uint8(&kp_not); + + SER_REQ_ENC_END; +} + +uint32_t ble_gap_keypress_notify_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_KEYPRESS_NOTIFY); +} + + +uint32_t ble_gap_lesc_dhkey_reply_req_enc(uint16_t conn_handle, + ble_gap_lesc_dhkey_t const *p_dhkey, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_LESC_DHKEY_REPLY); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_dhkey, ble_gap_lesc_dhkey_t_enc); + + SER_REQ_ENC_END; +} + +uint32_t ble_gap_lesc_dhkey_reply_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_LESC_DHKEY_REPLY); +} + + +uint32_t ble_gap_lesc_oob_data_get_req_enc(uint16_t conn_handle, + ble_gap_lesc_p256_pk_t const *p_pk_own, + ble_gap_lesc_oob_data_t *p_oobd_own, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_LESC_OOB_DATA_GET); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_pk_own, ble_gap_lesc_p256_pk_t_enc); + SER_PUSH_COND(p_oobd_own, NULL); + + SER_REQ_ENC_END; +} + +uint32_t ble_gap_lesc_oob_data_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gap_lesc_oob_data_t * *pp_oobd_own, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GAP_LESC_OOB_DATA_GET); + SER_PULL_COND(pp_oobd_own, ble_gap_lesc_oob_data_t_dec); + SER_RSP_DEC_END; +} + + +uint32_t ble_gap_lesc_oob_data_set_req_enc(uint16_t conn_handle, + ble_gap_lesc_oob_data_t const *p_oobd_own, + ble_gap_lesc_oob_data_t const *p_oobd_peer, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_LESC_OOB_DATA_SET); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_oobd_own, ble_gap_lesc_oob_data_t_enc); + SER_PUSH_COND(p_oobd_peer, ble_gap_lesc_oob_data_t_enc); + + SER_REQ_ENC_END; +} + +uint32_t ble_gap_lesc_oob_data_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_LESC_OOB_DATA_SET); +} + + +uint32_t ble_gap_ppcp_get_req_enc(ble_gap_conn_params_t const * const p_conn_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_PPCP_GET); + SER_PUSH_COND(p_conn_params, NULL); + SER_REQ_ENC_END; +} + +uint32_t ble_gap_ppcp_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gap_conn_params_t * const p_conn_params, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GAP_PPCP_GET); + SER_PULL_COND(&p_conn_params, ble_gap_conn_params_t_dec); + SER_RSP_DEC_END; +} + + +uint32_t ble_gap_ppcp_set_req_enc(ble_gap_conn_params_t const * const p_conn_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_PPCP_SET); + SER_PUSH_COND(p_conn_params, ble_gap_conn_params_t_enc); + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_ppcp_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_PPCP_SET); +} + +uint32_t ble_gap_rssi_get_req_enc(uint16_t conn_handle, + int8_t const * const p_rssi, +#if NRF_SD_BLE_API_VERSION > 5 + uint8_t const * const p_ch_index, +#endif + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_RSSI_GET); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_rssi, NULL); +#if NRF_SD_BLE_API_VERSION > 5 + SER_PUSH_COND(p_ch_index, NULL); +#endif + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_rssi_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + int8_t * const p_rssi, +#if NRF_SD_BLE_API_VERSION > 5 + uint8_t * const p_ch_index, +#endif + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GAP_RSSI_GET); + SER_PULL_COND(&p_rssi, uint8_t_dec); +#if NRF_SD_BLE_API_VERSION > 5 + SER_PULL_COND(&p_ch_index, uint8_t_dec); +#endif + SER_RSP_DEC_END; +} + + +uint32_t ble_gap_rssi_start_req_enc(uint16_t conn_handle, + uint8_t threshold_dbm, + uint8_t skip_count, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_RSSI_START); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_uint8(&threshold_dbm); + SER_PUSH_uint8(&skip_count); + + SER_REQ_ENC_END; +} + +uint32_t ble_gap_rssi_start_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_RSSI_START); +} + + +uint32_t ble_gap_rssi_stop_req_enc(uint16_t conn_handle, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_RSSI_STOP); + SER_PUSH_uint16(&conn_handle); + SER_REQ_ENC_END; +} + +uint32_t ble_gap_rssi_stop_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_RSSI_STOP); +} + +#ifndef S112 +uint32_t ble_gap_scan_start_req_enc(ble_gap_scan_params_t const * p_scan_params, +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 5 + ble_data_t const * p_adv_report_buffer, +#endif + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_SCAN_START); + SER_PUSH_COND(p_scan_params, ble_gap_scan_params_t_enc); +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 5 + SER_PUSH_COND(p_adv_report_buffer, ble_data_t_enc); +#endif + SER_REQ_ENC_END; +} +uint32_t ble_gap_scan_start_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_SCAN_START); + +} + + +uint32_t ble_gap_scan_stop_req_enc(uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_SCAN_STOP); + SER_REQ_ENC_END; +} + +uint32_t ble_gap_scan_stop_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_SCAN_STOP); +} +#endif + +uint32_t ble_gap_sec_info_reply_req_enc(uint16_t conn_handle, + ble_gap_enc_info_t const * p_enc_info, + ble_gap_irk_t const * p_id_info, + ble_gap_sign_info_t const * p_sign_info, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_SEC_INFO_REPLY); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_enc_info, ble_gap_enc_info_t_enc); + SER_PUSH_COND(p_id_info, ble_gap_irk_t_enc); + SER_PUSH_COND(p_sign_info, ble_gap_sign_info_t_enc); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_sec_info_reply_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_SEC_INFO_REPLY); +} + + +uint32_t ble_gap_sec_params_reply_req_enc(uint16_t conn_handle, + uint8_t sec_status, + ble_gap_sec_params_t const * const p_sec_params, + ble_gap_sec_keyset_t const * const p_sec_keyset, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_SEC_PARAMS_REPLY); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_uint8(&sec_status); + SER_PUSH_COND(p_sec_params, ble_gap_sec_params_t_enc); + SER_PUSH_COND(p_sec_keyset, ble_gap_sec_keyset_t_enc); + + SER_REQ_ENC_END; +} + +uint32_t ble_gap_sec_params_reply_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gap_sec_keyset_t const * const p_sec_keyset, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GAP_SEC_PARAMS_REPLY); + SER_PULL_COND(&p_sec_keyset, ble_gap_sec_keyset_t_dec); + SER_RSP_DEC_END; +} + + +uint32_t ble_gap_tx_power_set_req_enc( +#if NRF_SD_BLE_API_VERSION > 5 + uint8_t role, uint16_t handle, +#endif + int8_t tx_power, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_TX_POWER_SET); +#if NRF_SD_BLE_API_VERSION > 5 + SER_PUSH_uint8(&role); + SER_PUSH_uint16(&handle); +#endif + SER_PUSH_int8(&tx_power); + SER_REQ_ENC_END; +} + +uint32_t ble_gap_tx_power_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_TX_POWER_SET); +} + +uint32_t ble_gap_addr_get_req_enc(ble_gap_addr_t const * const p_address, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_ADDR_GET); + SER_PUSH_COND(p_address, NULL); + SER_REQ_ENC_END; +} + +uint32_t ble_gap_addr_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gap_addr_t * const p_address, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GAP_ADDR_GET); + SER_PULL_FIELD(p_address, ble_gap_addr_t_dec); + SER_RSP_DEC_END; +} + +uint32_t ble_gap_addr_set_req_enc(ble_gap_addr_t const * const p_addr, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_ADDR_SET); + SER_PUSH_COND(p_addr, ble_gap_addr_t_enc); + SER_REQ_ENC_END; +} + +uint32_t ble_gap_addr_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_ADDR_SET); +} + +uint32_t ble_gap_privacy_set_req_enc(ble_gap_privacy_params_t const * p_privacy_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_PRIVACY_SET); + SER_PUSH_COND(p_privacy_params, ble_gap_privacy_params_t_enc); + SER_REQ_ENC_END; +} + +uint32_t ble_gap_privacy_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_PRIVACY_SET); +} + + +uint32_t ble_gap_privacy_get_req_enc(ble_gap_privacy_params_t const * const p_privacy_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_PRIVACY_GET); + SER_PUSH_COND(p_privacy_params, ble_gap_privacy_params_t_enc); + SER_REQ_ENC_END; +} + +uint32_t ble_gap_privacy_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gap_privacy_params_t const * const p_privacy_params, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GAP_PRIVACY_GET); + SER_PULL_COND((void **)&p_privacy_params, ble_gap_privacy_params_t_dec); + SER_RSP_DEC_END; +} + +uint32_t ble_gap_whitelist_set_req_enc(ble_gap_addr_t const * const * const pp_wl_addrs, + uint8_t const len, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_WHITELIST_SET); + + uint8_t presence; + SER_PUSH_uint8(&len); + + if (pp_wl_addrs) + { + presence = SER_FIELD_PRESENT; + SER_PUSH_uint8(&presence); + + for (uint32_t i = 0; i < len; ++i) + { + SER_PUSH_COND(pp_wl_addrs[i], ble_gap_addr_t_enc); + } + } + else + { + presence = SER_FIELD_NOT_PRESENT; + SER_PUSH_uint8(&presence); + } + + SER_REQ_ENC_END; +} + +uint32_t ble_gap_whitelist_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_WHITELIST_SET); +} + +uint32_t ble_gap_device_identities_set_req_enc(ble_gap_id_key_t const * const * const pp_id_keys, + ble_gap_irk_t const * const * const pp_local_irks, + uint8_t const len, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_DEVICE_IDENTITIES_SET); + uint8_t presence; + SER_PUSH_uint8(&len); + + if (pp_id_keys) + { + presence = SER_FIELD_PRESENT; + SER_PUSH_uint8(&presence); + + for (uint32_t i = 0; i < len; ++i) + { + SER_PUSH_COND(pp_id_keys[i], ble_gap_id_key_t_enc); + } + } + else + { + presence = SER_FIELD_NOT_PRESENT; + SER_PUSH_uint8(&presence); + } + + if (pp_local_irks) + { + presence = SER_FIELD_PRESENT; + SER_PUSH_uint8(&presence); + + for (uint32_t i = 0; i < len; ++i) + { + SER_PUSH_COND(pp_local_irks[i], ble_gap_irk_t_enc); + } + } + else + { + presence = SER_FIELD_NOT_PRESENT; + SER_PUSH_uint8(&presence); + } + + SER_REQ_ENC_END; +} + +uint32_t ble_gap_device_identities_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_DEVICE_IDENTITIES_SET); +} +#if NRF_SD_BLE_API_VERSION >= 4 && !defined(S112) +uint32_t ble_gap_data_length_update_req_enc(uint16_t conn_handle, + ble_gap_data_length_params_t const * p_dl_params, + ble_gap_data_length_limitation_t * p_dl_limitation, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_DATA_LENGTH_UPDATE); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_dl_params, ble_gap_data_length_params_t_enc); + SER_PUSH_COND(p_dl_limitation, NULL); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_data_length_update_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gap_data_length_limitation_t * p_dl_limitation, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GAP_DATA_LENGTH_UPDATE); + SER_PULL_COND((void **)&p_dl_limitation, ble_gap_data_length_limitation_t_dec); + SER_RSP_DEC_END; +} +#endif +#if NRF_SD_BLE_API_VERSION >= 5 +uint32_t ble_gap_phy_update_req_enc(uint16_t conn_handle, + ble_gap_phys_t const * p_gap_phys, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_PHY_UPDATE); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_gap_phys, ble_gap_phys_t_enc); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_phy_update_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_PHY_UPDATE); +} +#endif + +#if NRF_SD_BLE_API_VERSION > 5 +uint32_t ble_gap_adv_set_configure_req_enc(uint8_t * p_adv_handle, + ble_gap_adv_data_t const * p_adv_data, + ble_gap_adv_params_t const *p_adv_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_ADV_SET_CONFIGURE); + + SER_PUSH_COND(p_adv_handle, uint8_t_enc); + SER_PUSH_COND(p_adv_data, ble_gap_adv_data_t_enc); + SER_PUSH_COND(p_adv_params, ble_gap_adv_params_t_enc); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_adv_set_configure_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint8_t * p_adv_handle, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GAP_ADV_SET_CONFIGURE); + SER_PULL_COND((void **)&p_adv_handle, uint8_t_dec); + + SER_RSP_DEC_END; +} + +#ifndef S112 +uint32_t ble_gap_qos_channel_survey_start_req_enc(uint32_t interval_us, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_QOS_CHANNEL_SURVEY_START); + + SER_PUSH_uint32(&interval_us); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_qos_channel_survey_start_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_QOS_CHANNEL_SURVEY_START); +} + +uint32_t ble_gap_qos_channel_survey_stop_req_enc(uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GAP_QOS_CHANNEL_SURVEY_STOP); + SER_REQ_ENC_END; +} + + +uint32_t ble_gap_qos_channel_survey_stop_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_QOS_CHANNEL_SURVEY_STOP); +} +#endif //!S112 +#endif diff --git a/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gap_app.h b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gap_app.h new file mode 100644 index 000000000..715a8dfce --- /dev/null +++ b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gap_app.h @@ -0,0 +1,1667 @@ +/** + * Copyright (c) 2013 - 2018, Nordic Semiconductor ASA + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +#ifndef BLE_GAP_APP_H__ +#define BLE_GAP_APP_H__ + +/**@file + * + * @defgroup ble_gap_app GAP Application command request encoders and command response decoders + * @{ + * @ingroup ser_app_s130_codecs + * + * @brief GAP Application command request encoders and command response decoders. + */ +#include "ble.h" +#include "ble_gap.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(NRF_SD_BLE_API_VERSION) && (NRF_SD_BLE_API_VERSION <= 5) +/** + * @brief Encodes @ref sd_ble_gap_adv_data_set command request. + * + * @sa @ref ble_gap_adv_data_set_rsp_dec for command response decoder. + * + * @param[in] p_data Raw data to be placed in advertisement packet. If NULL, no changes + * are made to the current advertisement packet data. + * @param[in] dlen Data length for p_data. Max size: @ref BLE_GAP_ADV_SR_MAX_LEN_DEFAULT octets. + * Should be 0 if p_data is NULL, can be 0 if p_data is not NULL. + * @param[in] p_sr_data Raw data to be placed in scan response packet. If NULL, + * no changes are made to the current scan response packet data. + * @param[in] srdlen Data length for p_sr_data. Max size: @ref BLE_GAP_ADV_SR_MAX_LEN_DEFAULT octets. + * Should be 0 if p_sr_data is NULL, can be 0 if p_data is not NULL. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_adv_data_set_req_enc(uint8_t const * const p_data, + uint8_t dlen, + uint8_t const * const p_sr_data, + uint8_t srdlen, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes response to @ref sd_ble_gap_adv_data_set command. + * + * @sa @ref ble_gap_adv_data_set_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gap_adv_data_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); +#endif + +/** + * @brief Encodes @ref sd_ble_gap_adv_start command request. + * + * @sa @ref ble_gap_adv_start_rsp_dec for command response decoder. + * + * @param[in] p_adv_params Pointer to advertising parameters structure. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_adv_start_req_enc( +#if NRF_SD_BLE_API_VERSION > 5 + uint8_t adv_handle, +#else + ble_gap_adv_params_t const * const p_adv_params, +#endif +#if NRF_SD_BLE_API_VERSION >= 4 + uint8_t conn_cfg_tag, +#endif + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes response to @ref sd_ble_gap_adv_start command. + * + * @sa @ref ble_gap_adv_start_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gap_adv_start_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/** + * @brief Encodes @ref sd_ble_gap_tx_power_set command request. + * + * @sa @ref ble_gap_tx_power_set_rsp_dec for command response decoder. + * + * @param[in] tx_power Radio transmit power in dBm (accepted values are -40, -30, -20, -16, -12, -8, -4, 0, and 4 dBm). + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_tx_power_set_req_enc( +#if NRF_SD_BLE_API_VERSION > 5 + uint8_t role, uint16_t handle, +#endif + int8_t tx_power, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes response to @ref sd_ble_gap_tx_power_set command. + * + * @sa @ref ble_gap_tx_power_set_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gap_tx_power_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/** + * @brief Encodes @ref sd_ble_gap_appearance_get command request. + * + * @sa @ref ble_gap_appearance_get_rsp_dec for command response decoder. + * + * @param[in] p_appearance Appearance (16 bit), see @ref BLE_APPEARANCES. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @note \p p_appearance will not be updated by the command + * request encoder. Updated values are set by @ref ble_gap_appearance_get_rsp_dec. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_appearance_get_req_enc(uint16_t const * const p_appearance, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes response to @ref sd_ble_gap_appearance_get command. + * + * @sa @ref ble_gap_appearance_get_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_appearance Appearance (16 bit), see @ref BLE_APPEARANCES. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gap_appearance_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint16_t * const p_appearance, + uint32_t * const p_result_code); + +/** + * @brief Encodes @ref sd_ble_gap_appearance_set command request. + * + * @sa @ref ble_gap_appearance_set_rsp_dec for command response decoder. + * + * @param[in] appearance Appearance (16 bit), see @ref BLE_APPEARANCES. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_appearance_set_req_enc(uint16_t appearance, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes response to @ref sd_ble_gap_appearance_set command. + * + * @sa @ref ble_gap_appearance_set_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gap_appearance_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/** + * @brief Encodes @ref sd_ble_gap_device_name_get command request. + * + * @sa @ref ble_gap_device_name_get_rsp_dec for command response decoder. + * + * @param[in] p_dev_name Pointer to an empty buffer where the UTF-8 non NULL-terminated + * string will be placed. Set to NULL to obtain the complete device + * name length. + * @param[in] p_dev_name_len Length of the buffer pointed by p_dev_name. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @note \p p_dev_name and \p p_len will not be updated by the command + * request encoder. Updated values are set by @ref ble_gap_device_name_get_rsp_dec. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_device_name_get_req_enc(uint8_t const * const p_dev_name, + uint16_t const * const p_dev_name_len, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes response to @ref sd_ble_gap_device_name_get command. + * + * @sa @ref ble_gap_device_name_get_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_dev_name Pointer to an empty buffer where the UTF-8 + * non NULL-terminated string will be placed. + * @param[in,out] p_dev_name_len Length of the buffer pointed by p_dev_name, complete device name + * length on output. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gap_device_name_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint8_t * const p_dev_name, + uint16_t * const p_dev_name_len, + uint32_t * const p_result_code); + +/** + * @brief Encodes @ref sd_ble_gap_device_name_set command request. + * + * @sa @ref ble_gap_device_name_set_rsp_dec for command response decoder. + * + * @param[in] p_write_perm Write permissions for the Device Name characteristic, see + * @ref ble_gap_conn_sec_mode_t. + * @param[in] p_dev_name Pointer to a UTF-8 encoded, non NULL-terminated string. + * @param[in] len Length of the UTF-8, non NULL-terminated string pointed + * to by p_dev_name in octets (must be smaller or equal + * than @ref BLE_GAP_DEVNAME_MAX_LEN). + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_device_name_set_req_enc(ble_gap_conn_sec_mode_t const * const p_write_perm, + uint8_t const * const p_dev_name, + uint16_t len, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes response to @ref sd_ble_gap_device_name_set command. + * + * @sa @ref ble_gap_device_name_set_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gap_device_name_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/** + * @brief Encodes @ref sd_ble_gap_ppcp_set command request. + * + * @sa @ref ble_gap_ppcp_set_rsp_dec for command response decoder. + * + * @param[in] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure with the + * desired parameters. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_ppcp_set_req_enc(ble_gap_conn_params_t const * const p_conn_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes response to @ref sd_ble_gap_ppcp_set command. + * + * @sa @ref ble_gap_ppcp_set_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gap_ppcp_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_conn_param_update command request. + * + * @sa @ref ble_gap_conn_param_update_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] p_conn_params Pointer to desired connection parameters. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_conn_param_update_req_enc(uint16_t conn_handle, + ble_gap_conn_params_t const * const p_conn_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_conn_param_update command. + * + * @sa @ref ble_gap_conn_param_update_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_conn_param_update_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_disconnect command request. + * + * @sa @ref ble_gap_disconnect_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] hci_status_code HCI status code, see @ref BLE_HCI_STATUS_CODES. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_disconnect_req_enc(uint16_t conn_handle, + uint8_t hci_status_code, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_disconnect command. + * + * @sa @ref ble_gap_disconnect_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_disconnect_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + + +/**@brief Encodes @ref sd_ble_gap_rssi_stop command request. + * + * @sa @ref ble_gap_rssi_stop_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_rssi_stop_req_enc(uint16_t conn_handle, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_rssi_stop command. + * + * @sa @ref ble_gap_rssi_stop_rsp_dec for command response decoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_rssi_stop_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + + + + +/**@brief Encodes @ref sd_ble_gap_ppcp_get command request. + * + * @sa @ref ble_gap_ppcp_get_rsp_dec for command response decoder. + * + * @param[in] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure where the + * parameters will be stored. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @note \p p_conn_params will not be updated by the command request encoder. Updated values are + * set by @ref ble_gap_ppcp_get_rsp_dec. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_ppcp_get_req_enc(ble_gap_conn_params_t const * const p_conn_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_ppcp_get command. + * + * @sa @ref ble_gap_ppcp_get_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure where the parameters + * will be stored. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_ppcp_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gap_conn_params_t * const p_conn_params, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_auth_key_reply command request. + * + * @sa @ref ble_gap_auth_key_reply_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] key_type Key type which defines length of key data as defined for + * @ref sd_ble_gap_auth_key_reply . + * @param[in] p_key Pointer to a buffer which contains key + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_PARAM Encoding failure. Incorrect param provided (key_type). + */ +uint32_t ble_gap_auth_key_reply_req_enc(uint16_t conn_handle, + uint8_t key_type, + uint8_t const * const p_key, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_auth_key_reply command. + * + * @sa @ref ble_gap_auth_key_reply_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_auth_key_reply_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_sec_info_reply command request. + * + * @sa @ref ble_gap_sec_info_reply_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information + * structure. + * @param[in] p_id_info Pointer to a @ref ble_gap_irk_t id information + * structure. + * @param[in] p_sign_info Pointer to a @ref ble_gap_sign_info_t signing information + * structure. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_sec_info_reply_req_enc(uint16_t conn_handle, + ble_gap_enc_info_t const * p_enc_info, + ble_gap_irk_t const * p_id_info, + ble_gap_sign_info_t const * p_sign_info, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_sec_info_reply command. + * + * @sa @ref ble_gap_sec_info_reply_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_sec_info_reply_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_sec_params_reply command request. + * + * @sa @ref ble_gap_sec_params_reply_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] sec_status Security status, see @ref BLE_GAP_SEC_STATUS. + * @param[in] p_sec_params Pointer to @ref ble_gap_sec_params_t security parameters + * structure. + * @param[in] p_sec_keyset Pointer to @ref ble_gap_sec_keyset_t security keys + * structure. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_sec_params_reply_req_enc(uint16_t conn_handle, + uint8_t sec_status, + ble_gap_sec_params_t const * const p_sec_params, + ble_gap_sec_keyset_t const * const p_sec_keyset, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_sec_params_reply command. + * + * @sa @ref ble_gap_sec_params_reply_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[in] p_sec_keyset Pointer to @ref ble_gap_sec_keyset_t security keys + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_sec_params_reply_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gap_sec_keyset_t const * const p_sec_keyset, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_authenticate command request. + * + * @sa @ref ble_gap_authenticate_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] p_sec_params Pointer to a @ref ble_gap_sec_params_t security parameters + * structure. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_authenticate_req_enc(uint16_t conn_handle, + ble_gap_sec_params_t const * const p_sec_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_authenticate command. + * + * @sa @ref ble_gap_authenticate_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_authenticate_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_adv_stop command request. + * + * @sa @ref ble_gap_adv_stop_rsp_dec for command response decoder. + * + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_adv_stop_req_enc( +#if NRF_SD_BLE_API_VERSION > 5 + uint8_t adv_handle, +#endif + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_adv_stop command. + * + * @sa @ref ble_gap_adv_stop_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_adv_stop_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_conn_sec_get command request. + * + * @sa @ref ble_gap_conn_sec_get_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] p_conn_sec Pointer to \ref ble_gap_conn_sec_t which will be filled in + * response. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_conn_sec_get_req_enc(uint16_t conn_handle, + ble_gap_conn_sec_t const * const p_conn_sec, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_conn_sec_get command. + * + * @sa @ref ble_gap_conn_sec_get_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] pp_conn_sec Pointer to pointer to \ref ble_gap_conn_sec_t which will be filled by + * the decoded data (if present). + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_conn_sec_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gap_conn_sec_t * * const pp_conn_sec, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_rssi_start command request. + * + * @sa @ref ble_gap_rssi_start_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] threshold_dbm Threshold in dBm. + * @param[in] skip_count Sample skip count. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_rssi_start_req_enc(uint16_t conn_handle, + uint8_t threshold_dbm, + uint8_t skip_count, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_rssi_start command. + * + * @sa @ref ble_gap_rssi_start_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_rssi_start_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); +#ifndef S112 +/**@brief Encodes @ref sd_ble_gap_scan_stop command request. + * + * @sa @ref ble_gap_scan_stop_rsp_dec for command response decoder. + * + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_scan_stop_req_enc(uint8_t * const p_buf, uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_scan_stop command. + * + * @sa @ref ble_gap_scan_stop_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_scan_stop_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_scan_start command request. + * + * @sa @ref ble_gap_scan_start_rsp_dec for command response decoder. + * + * @param[in] p_scan_params Pointer to scan params structure. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_scan_start_req_enc(ble_gap_scan_params_t const * p_scan_params, +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 5 + ble_data_t const * p_adv_report_buffer, +#endif + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_scan_start command. + * + * @sa @ref ble_gap_scan_start_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_scan_start_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_connect command request. + * + * @sa @ref ble_gap_connect_rsp_dec for command response decoder. + * + * @param[in] p_peer_addr Pointer to peer address. + * @param[in] p_scan_params Pointer to scan params structure. + * @param[in] p_conn_params Pointer to desired connection parameters. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_connect_req_enc(ble_gap_addr_t const * const p_peer_addr, + ble_gap_scan_params_t const * const p_scan_params, + ble_gap_conn_params_t const * const p_conn_params, +#if NRF_SD_BLE_API_VERSION >= 4 + uint8_t conn_cfg_tag, +#endif + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_connect command. + * + * @sa @ref ble_gap_connect_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_connect_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_connect_cancel command request. + * + * @sa @ref ble_gap_connect_cancel_rsp_dec for command response decoder. + * + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_connect_cancel_req_enc(uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_connect_cancel command. + * + * @sa @ref ble_gap_connect_cancel_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_connect_cancel_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + + +/**@brief Encodes @ref sd_ble_gap_encrypt command request. + * + * @sa @ref ble_gap_encrypt_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_master_id Pointer to a master identification structure. + * @param[in] p_enc_info Pointer to desired connection parameters. + * @param[in] p_buf Pointer to a ble_gap_enc_info_t encryption information structure. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ + +uint32_t ble_gap_encrypt_req_enc(uint16_t conn_handle, + ble_gap_master_id_t const * const p_master_id, + ble_gap_enc_info_t const * const p_enc_info, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + + +/**@brief Decodes response to @ref sd_ble_gap_encrypt command. + * + * @sa @ref ble_gap_encrypt_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_encrypt_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); +#endif //!S112 + +/**@brief Encodes @ref sd_ble_gap_rssi_get command request. + * + * @sa @ref ble_gap_rssi_get_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_rssi Pointer to the RSSI value. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_rssi_get_req_enc(uint16_t conn_handle, + int8_t const * const p_rssi, +#if NRF_SD_BLE_API_VERSION > 5 + uint8_t const * const p_ch_index, +#endif + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_rssi_get command. + * + * @sa @ref ble_gap_rssi_get_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_rssi Pointer to RSSI value. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_rssi_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + int8_t * const p_rssi, +#if NRF_SD_BLE_API_VERSION > 5 + uint8_t * const p_ch_index, +#endif + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_keypress_notify command request. + * + * @sa @ref ble_gap_keypress_notify_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle. + * @param[in] kp_not See @ref sd_ble_gap_keypress_notify. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_keypress_notify_req_enc(uint16_t conn_handle, + uint8_t kp_not, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_keypress_notify command. + * + * @sa @ref ble_gap_keypress_notify_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_keypress_notify_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_lesc_dhkey_reply command request. + * + * @sa @ref ble_gap_lesc_dhkey_reply_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_dhkey See @ref sd_ble_gap_lesc_dhkey_reply. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_lesc_dhkey_reply_req_enc(uint16_t conn_handle, + ble_gap_lesc_dhkey_t const *p_dhkey, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_lesc_dhkey_reply command. + * + * @sa @ref ble_gap_lesc_dhkey_reply_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_lesc_dhkey_reply_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_lesc_oob_data_set command request. + * + * @sa @ref ble_gap_lesc_oob_data_set_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_oobd_own See @ref sd_ble_gap_lesc_oob_data_set. + * @param[in] p_oobd_peer See @ref sd_ble_gap_lesc_oob_data_set. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_lesc_oob_data_set_req_enc(uint16_t conn_handle, + ble_gap_lesc_oob_data_t const *p_oobd_own, + ble_gap_lesc_oob_data_t const *p_oobd_peer, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_lesc_oob_data_set command. + * + * @sa @ref ble_gap_lesc_oob_data_set_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_lesc_oob_data_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_lesc_oob_data_get command request. + * + * @sa @ref ble_gap_lesc_oob_data_get_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_pk_own See @ref sd_ble_gap_lesc_oob_data_get. + * @param[in] p_oobd_own See @ref sd_ble_gap_lesc_oob_data_get. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_lesc_oob_data_get_req_enc(uint16_t conn_handle, + ble_gap_lesc_p256_pk_t const *p_pk_own, + ble_gap_lesc_oob_data_t *p_oobd_own, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_lesc_oob_data_get command. + * + * @sa @ref ble_gap_lesc_oob_data_get_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] pp_oobd_own Pointer to pointer to location where OOB data is decoded. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_lesc_oob_data_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gap_lesc_oob_data_t * *pp_oobd_own, + uint32_t * const p_result_code); + +/** + * @brief Encodes @ref sd_ble_gap_addr_get command request. + * + * @sa @ref ble_gap_addr_get_rsp_dec for command response decoder. + * + * @param[in] p_address Pointer to address. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @note \p p_address will not be updated by the command + * request encoder. Updated values are set by @ref ble_gap_addr_get_rsp_dec. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_addr_get_req_enc(ble_gap_addr_t const * const p_address, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes response to @ref sd_ble_gap_addr_get command. + * + * @sa @ref ble_gap_addr_get_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_address Pointer to address. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gap_addr_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gap_addr_t * const p_address, + uint32_t * const p_result_code); + +/** + * @brief Encodes @ref sd_ble_gap_addr_set command request. + * + * @sa @ref ble_gap_addr_set_rsp_dec for command response decoder. + * + * @param[in] p_addr Pointer to address structure. + * @param[in,out] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_addr_set_req_enc(ble_gap_addr_t const * const p_addr, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes response to @ref sd_ble_gap_addr_set command. + * + * @sa @ref ble_gap_addr_set_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gap_addr_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/** + * @brief Encodes @ref sd_ble_gap_privacy_set command request. + * + * @sa @ref ble_gap_privacy_set_rsp_dec for command response decoder. + * + * @param[in] p_privacy_params Pointer to privacy settings structure. + * @param[in,out] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_privacy_set_req_enc(ble_gap_privacy_params_t const * p_privacy_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes response to @ref sd_ble_gap_privacy_set command. + * + * @sa @ref ble_gap_privacy_set_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gap_privacy_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/** + * @brief Encodes @ref sd_ble_gap_privacy_get command request. + * + * @sa @ref ble_gap_privacy_get_rsp_dec for command response decoder. + * + * @param[in] p_privacy_params Pointer to privacy settings structure. + * @param[in,out] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_privacy_get_req_enc(ble_gap_privacy_params_t const * const p_privacy_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes response to @ref sd_ble_gap_privacy_get command. + * + * @sa @ref ble_gap_privacy_get_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_privacy_params Pointer to privacy settings structure. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gap_privacy_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gap_privacy_params_t const * const p_privacy_params, + uint32_t * const p_result_code); + +/** + * @brief Encodes @ref sd_ble_gap_whitelist_set command request. + * + * @sa @ref ble_gap_whitelist_set_rsp_dec for command response decoder. + * + * @param[in] pp_wl_addrs Pointer to a whitelist of peer addresses. + * @param[out] len Pointer to a length of the whitelist. + * @param[in,out] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_whitelist_set_req_enc(ble_gap_addr_t const * const * const pp_wl_addrs, + uint8_t const len, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes response to @ref sd_ble_gap_whitelist_set command. + * + * @sa @ref ble_gap_whitelist_set_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gap_whitelist_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/** + * @brief Encodes @ref sd_ble_gap_device_identities_set command request. + * + * @sa @ref ble_gap_device_identities_set_rsp_dec for command response decoder. + * + * @param[in] pp_id_keys Pointer to an array of peer identity addresses and peer IRKs. + * @param[in] pp_local_irks Pointer to an array of local IRKs. + * @param[out] len Pointer to a length of the device identity list. + * @param[in,out] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_device_identities_set_req_enc(ble_gap_id_key_t const * const * const pp_id_keys, + ble_gap_irk_t const * const * const pp_local_irks, + uint8_t const len, + uint8_t * const p_buf, + uint32_t * const p_buf_len); +/** + * @brief Decodes response to @ref sd_ble_gap_device_identities_set command. + * + * @sa @ref ble_gap_device_identities_set_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gap_device_identities_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +#if NRF_SD_BLE_API_VERSION >= 4 && !defined(S112) +/** + * @brief Encodes @ref sd_ble_gap_data_length_update command request. + * + * @sa @ref ble_gap_data_length_update_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_dl_params Pointer to a data length params structure. + * @param[out] p_dl_limitation Pointer to a data length limitation structure. + * @param[in,out] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_data_length_update_req_enc(uint16_t conn_handle, + ble_gap_data_length_params_t const * p_dl_params, + ble_gap_data_length_limitation_t * p_dl_limitation, + uint8_t * const p_buf, + uint32_t * const p_buf_len); +/** + * @brief Decodes response to @ref sd_ble_gap_data_length_update command. + * + * @sa @ref ble_gap_data_length_update_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_dl_limitation Pointer to a data length limitation structure. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gap_data_length_update_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gap_data_length_limitation_t * p_dl_limitation, + uint32_t * const p_result_code); +#endif + +#if NRF_SD_BLE_API_VERSION >= 5 +/**@brief Encodes @ref sd_ble_gap_phy_update command request. + * + * @sa @ref ble_gap_phy_update_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] p_gap_phys Pointer to a @ref ble_gap_phys_t + * structure. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_phy_update_req_enc(uint16_t conn_handle, + ble_gap_phys_t const * p_gap_phys, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gap_phy_update command. + * + * @sa @ref ble_gap_phy_update_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_phy_update_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); +#endif + +#if NRF_SD_BLE_API_VERSION >= 6 +/**@brief Encodes @ref sd_ble_gap_adv_set_configure command request. + * + * @sa @ref ble_gap_adv_set_configure_rsp_dec for command response decoder. + * + * @param[in] p_adv_handle Advertising handle. + * @param[in] p_adv_data Pointer to a @ref ble_gap_adv_data_t structure. + * @param[in] p_adv_params Pointer to a @ref ble_gap_adv_params_t structure. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_adv_set_configure_req_enc(uint8_t * p_adv_handle, + ble_gap_adv_data_t const * p_adv_data, + ble_gap_adv_params_t const *p_adv_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + + +/**@brief Decodes response to @ref sd_ble_gap_adv_set_configure command. + * + * @sa @ref ble_gap_adv_set_configure_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_adv_handle Advertising handle. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_adv_set_configure_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint8_t * p_adv_handle, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_qos_channel_survey_start command request. + * + * @sa @ref ble_gap_qos_channel_survey_start_rsp_dec for command response decoder. + * + * @param[in] interval_us Interval. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_qos_channel_survey_start_req_enc(uint32_t interval_us, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + + +/**@brief Decodes response to @ref sd_ble_gap_qos_channel_survey_start command. + * + * @sa @ref ble_gap_qos_channel_survey_start_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_qos_channel_survey_start_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gap_qos_channel_survey_stop command request. + * + * @sa @ref ble_gap_qos_channel_survey_stop_rsp_dec for command response decoder. + * + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gap_qos_channel_survey_stop_req_enc(uint8_t * const p_buf, + uint32_t * const p_buf_len); + + +/**@brief Decodes response to @ref sd_ble_gap_qos_channel_survey_stop command. + * + * @sa @ref ble_gap_qos_channel_survey_stop_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gap_qos_channel_survey_stop_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); +#endif +/** @} */ +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gap_evt_app.c b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gap_evt_app.c new file mode 100644 index 000000000..2d6b79a4e --- /dev/null +++ b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gap_evt_app.c @@ -0,0 +1,419 @@ +/** + * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +#include "ble_gap_evt_app.h" +#include "ble_serialization.h" +#include "app_util.h" +#include "app_ble_gap.h" +#include "ble_gap_struct_serialization.h" +#include "ble_struct_serialization.h" +#include "cond_field_serialization.h" +#include + +#ifndef S112 +uint32_t ble_gap_evt_adv_report_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_ADV_REPORT, gap, adv_report); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION >= 6 + //get buffer stored during scan start. + app_ble_gap_scan_data_unset(false); +#endif + SER_PULL_FIELD(&p_event->evt.gap_evt.params.adv_report, ble_gap_evt_adv_report_t_dec); + + + SER_EVT_DEC_END; +} +#endif //!S112 + +uint32_t ble_gap_evt_auth_key_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_AUTH_KEY_REQUEST, gap, auth_key_request); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_uint8(&p_event->evt.gap_evt.params.auth_key_request.key_type); + + SER_EVT_DEC_END; +} + +uint32_t ble_gap_evt_auth_status_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_AUTH_STATUS, gap, auth_status); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gap_evt.params.auth_status, ble_gap_evt_auth_status_t_dec); + + // keyset is an extension of standard event data - used to synchronize keys at application + uint32_t conn_index; + err_code = app_ble_gap_sec_keys_find(p_event->evt.gap_evt.conn_handle, &conn_index); + if (err_code == NRF_SUCCESS) + { + ble_gap_sec_keyset_t *keyset; + err_code = app_ble_gap_sec_keys_get(conn_index, &keyset); + SER_ASSERT(err_code == NRF_SUCCESS, err_code); + + SER_PULL_FIELD(keyset, ble_gap_sec_keyset_t_dec); + + err_code = app_ble_gap_sec_keys_storage_destroy(p_event->evt.gap_evt.conn_handle); + SER_ASSERT(err_code == NRF_SUCCESS, err_code); + } + + SER_EVT_DEC_END; +} + + +uint32_t ble_gap_evt_conn_param_update_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_CONN_PARAM_UPDATE, gap, conn_param_update); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gap_evt.params.conn_param_update, ble_gap_evt_conn_param_update_t_dec); + + SER_EVT_DEC_END; +} + + +#ifndef S112 +uint32_t ble_gap_evt_conn_param_update_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST, gap, conn_param_update_request); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gap_evt.params.conn_param_update_request, + ble_gap_evt_conn_param_update_request_t_dec); + + SER_EVT_DEC_END; +} +#endif + +uint32_t ble_gap_evt_conn_sec_update_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_CONN_SEC_UPDATE, gap, conn_sec_update); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gap_evt.params.conn_sec_update, ble_gap_evt_conn_sec_update_t_dec); + + SER_EVT_DEC_END; +} + +uint32_t ble_gap_evt_connected_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_CONNECTED, gap, connected); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gap_evt.params.connected, ble_gap_evt_connected_t_dec); + + SER_EVT_DEC_END; +} + + +uint32_t ble_gap_evt_disconnected_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_DISCONNECTED, gap, disconnected); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gap_evt.params.disconnected, ble_gap_evt_disconnected_t_dec); + + SER_EVT_DEC_END; +} + +uint32_t ble_gap_evt_key_pressed_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_KEY_PRESSED, gap, key_pressed); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_uint8(&p_event->evt.gap_evt.params.key_pressed.kp_not); + + SER_EVT_DEC_END; +} + + +uint32_t ble_gap_evt_lesc_dhkey_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_LESC_DHKEY_REQUEST, gap, lesc_dhkey_request); + + uint8_t ser_data; + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + + // keyset is an extension of standard event data - used to synchronize keys at application + uint32_t conn_index; + err_code = app_ble_gap_sec_keys_find(p_event->evt.gap_evt.conn_handle, &conn_index); + SER_ASSERT(err_code == NRF_SUCCESS, err_code); + + ble_gap_sec_keyset_t *keyset; + err_code = app_ble_gap_sec_keys_get(conn_index, &keyset); + SER_ASSERT(err_code == NRF_SUCCESS, err_code); + +p_event->evt.gap_evt.params.lesc_dhkey_request.p_pk_peer = keyset->keys_peer.p_pk; + SER_PULL_COND(&p_event->evt.gap_evt.params.lesc_dhkey_request.p_pk_peer, ble_gap_lesc_p256_pk_t_dec); + + SER_PULL_uint8(&ser_data); + p_event->evt.gap_evt.params.lesc_dhkey_request.oobd_req = ser_data & 0x01; + + SER_EVT_DEC_END; +} + + +#define PASSKEY_LEN sizeof (p_event->evt.gap_evt.params.passkey_display.passkey) + + +uint32_t ble_gap_evt_passkey_display_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_PASSKEY_DISPLAY, gap, passkey_display); + + uint8_t ser_data; + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_uint8array(p_event->evt.gap_evt.params.passkey_display.passkey, BLE_GAP_PASSKEY_LEN); + SER_PULL_uint8(&ser_data); + p_event->evt.gap_evt.params.passkey_display.match_request = (ser_data & 0x01); + + SER_EVT_DEC_END; +} + + + +uint32_t ble_gap_evt_rssi_changed_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_RSSI_CHANGED, gap, rssi_changed); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_int8(&p_event->evt.gap_evt.params.rssi_changed.rssi); +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 5 + SER_PULL_uint8(&p_event->evt.gap_evt.params.rssi_changed.ch_index); +#endif + SER_EVT_DEC_END; +} + + +uint32_t ble_gap_evt_scan_req_report_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_SCAN_REQ_REPORT, gap, scan_req_report); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 5 + SER_PULL_uint8(&p_event->evt.gap_evt.params.scan_req_report.adv_handle); +#endif + SER_PULL_FIELD(&p_event->evt.gap_evt.params.scan_req_report.peer_addr, ble_gap_addr_t_dec); + SER_PULL_int8(&p_event->evt.gap_evt.params.scan_req_report.rssi); + + SER_EVT_DEC_END; +} + +uint32_t ble_gap_evt_sec_info_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_SEC_INFO_REQUEST, gap, sec_info_request); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gap_evt.params.sec_info_request, ble_gap_evt_sec_info_request_t_dec); + + SER_EVT_DEC_END; +} + +uint32_t ble_gap_evt_sec_params_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_SEC_PARAMS_REQUEST, gap, sec_params_request); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gap_evt.params.sec_params_request, ble_gap_evt_sec_params_request_t_dec); + + SER_EVT_DEC_END; +} + +uint32_t ble_gap_evt_sec_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_SEC_REQUEST, gap, sec_request); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gap_evt.params.sec_request, ble_gap_evt_sec_request_t_dec); + + SER_EVT_DEC_END; +} + +uint32_t ble_gap_evt_timeout_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_TIMEOUT, gap, timeout); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_uint8(&p_event->evt.gap_evt.params.timeout.src); +#if defined(NRF_SD_BLE_API_VERSION) && (NRF_SD_BLE_API_VERSION > 5) && !defined(S112) + if (p_event->evt.gap_evt.params.timeout.src == BLE_GAP_TIMEOUT_SRC_SCAN) + { + SER_PULL_FIELD(&p_event->evt.gap_evt.params.timeout.params.adv_report_buffer, ble_data_t_dec); + } +#endif + SER_EVT_DEC_END; +} + +#if NRF_SD_BLE_API_VERSION >= 5 +uint32_t ble_gap_evt_phy_update_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_PHY_UPDATE, gap, phy_update); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_uint8(&p_event->evt.gap_evt.params.phy_update.status); + SER_PULL_uint8(&p_event->evt.gap_evt.params.phy_update.tx_phy); + SER_PULL_uint8(&p_event->evt.gap_evt.params.phy_update.rx_phy); + + SER_EVT_DEC_END; +} + +uint32_t ble_gap_evt_phy_update_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_PHY_UPDATE_REQUEST, gap, phy_update); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gap_evt.params.phy_update_request, ble_gap_phys_t_dec); + + SER_EVT_DEC_END; +} +#endif +#if NRF_SD_BLE_API_VERSION >= 4 && !defined(S112) +uint32_t ble_gap_evt_data_length_update_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST, gap, timeout); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gap_evt.params.data_length_update_request.peer_params, ble_gap_data_length_params_t_dec); + + SER_EVT_DEC_END; +} +uint32_t ble_gap_evt_data_length_update_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_DATA_LENGTH_UPDATE, gap, timeout); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gap_evt.params.data_length_update.effective_params, ble_gap_data_length_params_t_dec); + + SER_EVT_DEC_END; +} +#endif //NRF_SD_BLE_API_VERSION >= 4 @@ !defined(S112) +#if NRF_SD_BLE_API_VERSION > 5 +#ifndef S112 +uint32_t ble_gap_evt_qos_channel_survey_report_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_QOS_CHANNEL_SURVEY_REPORT, gap, qos_channel_survey_report); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_uint8array((uint8_t *)p_event->evt.gap_evt.params.qos_channel_survey_report.channel_energy, BLE_GAP_CHANNEL_COUNT); + + SER_EVT_DEC_END; +} +#endif //S112 + +uint32_t ble_gap_evt_adv_set_terminated_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GAP_EVT_ADV_SET_TERMINATED, gap, adv_set_terminated); + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gap_evt.params.adv_set_terminated, ble_gap_evt_adv_set_terminated_t_dec); + + SER_EVT_DEC_END; +} +#endif diff --git a/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gap_evt_app.h b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gap_evt_app.h new file mode 100644 index 000000000..53b02079b --- /dev/null +++ b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gap_evt_app.h @@ -0,0 +1,597 @@ +/** + * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +#ifndef BLE_GAP_EVT_APP_H__ +#define BLE_GAP_EVT_APP_H__ + +/**@file + * + * @defgroup ble_gap_evt_app GAP Application event decoders + * @{ + * @ingroup ser_app_s130_codecs + * + * @brief GAP Application event decoders. + */ +#include "ble.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Decodes ble_gap_evt_auth_key_request event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_auth_key_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gap_evt_auth_status event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_auth_status_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gap_evt_conn_param_update event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_conn_param_update_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gap_evt_conn_sec_update event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_conn_sec_update_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gap_evt_connected event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_connected_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gap_evt_disconnected event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_disconnected_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gap_evt_passkey_display event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_passkey_display_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gap_evt_rssi_changed event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_rssi_changed_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gap_evt_sec_info_request event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_sec_info_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gap_evt_sec_params_request event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_sec_params_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gap_evt_timeout event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_timeout_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gap_evt_sec_request event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_sec_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gap_evt_conn_param_update_request event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_conn_param_update_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); +/** + * @brief Decodes ble_gap_evt_adv_report event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_adv_report_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gap_evt_scan_req_report event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_scan_req_report_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gap_evt_key_pressed event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_key_pressed_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); +/** + * @brief Decodes ble_gap_evt_lesc_dhkey_request event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_lesc_dhkey_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +#if NRF_SD_BLE_API_VERSION >= 5 +/** + * @brief Decodes ble_gap_evt_phy_update event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_phy_update_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gap_evt_phy_update_request event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_phy_update_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); +#endif + +#if NRF_SD_BLE_API_VERSION >= 4 +/** + * @brief Decodes ble_gap_evt_data_length_update_request event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_data_length_update_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); +/** + * @brief Decodes ble_gap_evt_data_length_update event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_data_length_update_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +#endif //NRF_SD_BLE_API_VERSION >= 4 + +#if NRF_SD_BLE_API_VERSION >= 6 +#ifndef S112 +/** + * @brief Decodes ble_gap_evt_qos_channel_survey_report event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_qos_channel_survey_report_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); +#endif + +/** + * @brief Decodes ble_gap_evt_adv_set_terminated event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gap_evt_adv_set_terminated_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); +#endif +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gattc_app.c b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gattc_app.c new file mode 100644 index 000000000..dc0057cd3 --- /dev/null +++ b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gattc_app.c @@ -0,0 +1,286 @@ +/** + * Copyright (c) 2013 - 2018, Nordic Semiconductor ASA + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +#include "ble_gattc_app.h" +#include +#include "ble_serialization.h" +#include "ble_gattc_struct_serialization.h" +#include "cond_field_serialization.h" +#include "app_util.h" +#include "ble_struct_serialization.h" +#include "ble_types.h" + +uint32_t ble_gattc_attr_info_discover_req_enc(uint16_t conn_handle, + ble_gattc_handle_range_t const * const p_handle_range, + uint8_t * const p_buf, + uint32_t * p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTC_ATTR_INFO_DISCOVER); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_handle_range, ble_gattc_handle_range_t_enc); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gattc_attr_info_discover_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GATTC_ATTR_INFO_DISCOVER); +} + +uint32_t ble_gattc_char_value_by_uuid_read_req_enc(uint16_t conn_handle, + ble_uuid_t const * const p_uuid, + ble_gattc_handle_range_t const * const p_handle_range, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_uuid, ble_uuid_t_enc); + SER_PUSH_COND(p_handle_range, ble_gattc_handle_range_t_enc); + + SER_REQ_ENC_END; +} + +uint32_t ble_gattc_char_value_by_uuid_read_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ); +} + +uint32_t ble_gattc_char_values_read_req_enc(uint16_t conn_handle, + uint16_t const * const p_handles, + uint16_t handle_count, + uint8_t * const p_buf, + uint32_t * p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTC_CHAR_VALUES_READ); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_len16data16(p_handles, handle_count); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gattc_char_values_read_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GATTC_CHAR_VALUES_READ); +} + +uint32_t ble_gattc_characteristics_discover_req_enc( + uint16_t conn_handle, + ble_gattc_handle_range_t const * const p_handle_range, + uint8_t * const p_buf, + uint32_t * p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTC_CHARACTERISTICS_DISCOVER); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_handle_range, ble_gattc_handle_range_t_enc); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gattc_characteristics_discover_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GATTC_CHARACTERISTICS_DISCOVER); +} + +uint32_t ble_gattc_descriptors_discover_req_enc( + uint16_t conn_handle, + ble_gattc_handle_range_t const * const p_handle_range, + uint8_t * const p_buf, + uint32_t * p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTC_DESCRIPTORS_DISCOVER); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_handle_range, ble_gattc_handle_range_t_enc); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gattc_descriptors_discover_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GATTC_DESCRIPTORS_DISCOVER); +} + +uint32_t ble_gattc_hv_confirm_req_enc(uint16_t conn_handle, + uint16_t handle, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTC_HV_CONFIRM); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_uint16(&handle); + + SER_REQ_ENC_END; +} + +uint32_t ble_gattc_hv_confirm_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GATTC_HV_CONFIRM); +} + +uint32_t ble_gattc_primary_services_discover_req_enc(uint16_t conn_handle, + uint16_t start_handle, + ble_uuid_t const * const p_srvc_uuid, + uint8_t * const p_buf, + uint32_t * p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_uint16(&start_handle); + SER_PUSH_COND(p_srvc_uuid, ble_uuid_t_enc); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gattc_primary_services_discover_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER); +} + +uint32_t ble_gattc_read_req_enc(uint16_t conn_handle, + uint16_t handle, + uint16_t offset, + uint8_t * const p_buf, + uint32_t * p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTC_READ); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_uint16(&handle); + SER_PUSH_uint16(&offset); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gattc_read_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GATTC_READ); +} + +uint32_t ble_gattc_relationships_discover_req_enc( + uint16_t conn_handle, + ble_gattc_handle_range_t const * const p_handle_range, + uint8_t * const p_buf, + uint32_t * p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTC_RELATIONSHIPS_DISCOVER); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_handle_range, ble_gattc_handle_range_t_enc); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gattc_relationships_discover_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GATTC_RELATIONSHIPS_DISCOVER); +} + +uint32_t ble_gattc_write_req_enc(uint16_t conn_handle, + ble_gattc_write_params_t const * const p_write_params, + uint8_t * const p_buf, + uint32_t * p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTC_WRITE); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_write_params, ble_gattc_write_params_t_enc); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gattc_write_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GATTC_WRITE); +} + +uint32_t ble_gattc_exchange_mtu_request_req_enc(uint16_t conn_handle, + uint16_t client_rx_mtu, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTC_EXCHANGE_MTU_REQUEST); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_uint16(&client_rx_mtu); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gattc_exchange_mtu_request_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GATTC_EXCHANGE_MTU_REQUEST); +} diff --git a/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gattc_app.h b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gattc_app.h new file mode 100644 index 000000000..ddb237e10 --- /dev/null +++ b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gattc_app.h @@ -0,0 +1,491 @@ +/** + * Copyright (c) 2013 - 2018, Nordic Semiconductor ASA + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +#ifndef BLE_GATTC_APP_H__ +#define BLE_GATTC_APP_H__ + +/**@file + * + * @defgroup ble_gattc_app GATTC Application command request encoders and command response decoders + * @{ + * @ingroup ser_app_s130_codecs + * + * @brief GATTC Application command request encoders and command response decoders. + */ +#include "ble_gattc.h" +#include "ble.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/**@brief Encodes @ref sd_ble_gattc_primary_services_discover command request. + * + * @sa @ref ble_gattc_primary_services_discover_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] start_handle Handle to start searching from. + * @param[in] p_srvc_uuid Pointer to a @ref ble_uuid_t which indicates the service UUID to + * be found. If it is NULL, all primary services will be returned. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gattc_primary_services_discover_req_enc(uint16_t conn_handle, + uint16_t start_handle, + ble_uuid_t const * const p_srvc_uuid, + uint8_t * const p_buf, + uint32_t * p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gattc_primary_services_discover command. + * + * @sa @ref ble_gattc_primary_services_discover_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gattc_primary_services_discover_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gattc_descriptors_discover command request. + * + * @sa @ref ble_gattc_descriptors_discover_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] p_handle_range A pointer to the range of handles of the Service to perform + * this procedure on. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gattc_descriptors_discover_req_enc( + uint16_t conn_handle, + ble_gattc_handle_range_t const * const p_handle_range, + uint8_t * const p_buf, + uint32_t * p_buf_len); + + +/**@brief Decodes response to @ref sd_ble_gattc_descriptors_discover command. + * + * @sa @ref ble_gattc_primary_services_discover_rsp_dec for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gattc_descriptors_discover_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gattc_relationships_discover command request. + * + * @sa @ref ble_gattc_relationships_discover_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] p_handle_range A pointer to the range of handles of the Service to perform + * this procedure on. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gattc_relationships_discover_req_enc( + uint16_t conn_handle, + ble_gattc_handle_range_t const * const p_handle_range, + uint8_t * const p_buf, + uint32_t * p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gattc_relationships_discover command. + * + * @sa @ref ble_gattc_relationships_discover_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gattc_relationships_discover_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gattc_characteristics_discover command request. + * + * @sa @ref ble_gattc_characteristics_discover_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] p_handle_range A pointer to the range of handles of the Service to perform + * this procedure on. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gattc_characteristics_discover_req_enc + (uint16_t conn_handle, + ble_gattc_handle_range_t const * const p_handle_range, + uint8_t * const p_buf, + uint32_t * p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gattc_characteristics_discover command. + * + * @sa @ref ble_gattc_primary_services_discover_rsp_dec for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gattc_characteristics_discover_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gattc_read command request. + * + * @sa @ref ble_gattc_read_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] handle The handle of the attribute to be read. + * @param[in] offset Offset into the attribute value to be read. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gattc_read_req_enc(uint16_t conn_handle, + uint16_t handle, + uint16_t offset, + uint8_t * const p_buf, + uint32_t * p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gattc_read command. + * + * @sa @ref ble_gattc_read_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gattc_read_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gattc_char_values_read command request. + * + * @sa @ref ble_gattc_char_values_read_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] p_handles A pointer to the handle(s) of the attribute(s) to be read. + * @param[in] handle_count The number of handles in p_handles. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gattc_char_values_read_req_enc(uint16_t conn_handle, + uint16_t const * const p_handles, + uint16_t handle_count, + uint8_t * const p_buf, + uint32_t * p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gattc_char_values_read command. + * + * @sa @ref ble_gattc_char_values_read_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gattc_char_values_read_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gattc_write command request. + * + * @sa @ref ble_gattc_write_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] p_write_params Pointer to \ref sd_ble_gattc_write params. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gattc_write_req_enc(uint16_t conn_handle, + ble_gattc_write_params_t const * const p_write_params, + uint8_t * const p_buf, + uint32_t * p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gattc_write command. + * + * @sa @ref ble_gattc_write_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gattc_write_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gattc_hv_confirm command request. + * + * @sa @ref ble_gattc_hv_confirm_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] handle Handle of the attribute in the indication. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gattc_hv_confirm_req_enc(uint16_t conn_handle, + uint16_t handle, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gattc_hv_confirm command. + * + * @sa @ref ble_gattc_hv_confirm_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Pointer to command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gattc_hv_confirm_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gattc_char_value_by_uuid_read command request. + * + * @sa @ref ble_gattc_char_value_by_uuid_read_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] p_uuid Pointer to a characteristic value UUID to read. + * @param[in] p_handle_range Pointer to the range of handles to perform this procedure on. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gattc_char_value_by_uuid_read_req_enc + (uint16_t conn_handle, + ble_uuid_t const * const p_uuid, + ble_gattc_handle_range_t const * const p_handle_range, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gattc_char_value_by_uuid_read command. + * + * @sa @ref ble_gattc_char_value_by_uuid_read_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Pointer to command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gattc_char_value_by_uuid_read_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gattc_attr_info_discover command request. + * + * @sa @ref ble_gattc_attr_info_discover_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] p_handle_range Pointer to the range of handles + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gattc_attr_info_discover_req_enc(uint16_t conn_handle, + ble_gattc_handle_range_t const * const p_handle_range, + uint8_t * const p_buf, + uint32_t * p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gattc_attr_info_discover command. + * + * @sa @ref ble_gattc_attr_info_discover_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Pointer to command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gattc_attr_info_discover_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gattc_exchange_mtu_request command request. + * + * @sa @ref ble_gattc_exchange_mtu_request_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] client_rx_mtu Client MTU Size. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in, out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gattc_exchange_mtu_request_req_enc(uint16_t conn_handle, + uint16_t client_rx_mtu, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gattc_exchange_mtu_request command. + * + * @sa @ref ble_gattc_exchange_mtu_request_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Pointer to command response result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match expected + * operation code. + */ +uint32_t ble_gattc_exchange_mtu_request_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif + + diff --git a/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gattc_evt_app.c b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gattc_evt_app.c new file mode 100644 index 000000000..c049ed41f --- /dev/null +++ b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gattc_evt_app.c @@ -0,0 +1,262 @@ +/** + * Copyright (c) 2013 - 2018, Nordic Semiconductor ASA + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +#include "ble_gattc_evt_app.h" +#include +#include "ble_serialization.h" +#include "ble_gattc_struct_serialization.h" +#include "app_util.h" + +uint32_t ble_gattc_evt_attr_info_disc_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, gattc, attr_info_disc_rsp); + + SER_PULL_uint16(&p_event->evt.gattc_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.gattc_evt.gatt_status); + SER_PULL_uint16(&p_event->evt.gattc_evt.error_handle); + SER_PULL_FIELD_EXTENDED(&p_event->evt.gattc_evt.params.attr_info_disc_rsp, + ble_gattc_evt_attr_info_disc_rsp_t_dec); + + SER_EVT_DEC_END; +} + +uint32_t ble_gattc_evt_char_disc_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTC_EVT_CHAR_DISC_RSP, gattc, char_disc_rsp); + + SER_PULL_uint16(&p_event->evt.gattc_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.gattc_evt.gatt_status); + SER_PULL_uint16(&p_event->evt.gattc_evt.error_handle); + SER_PULL_FIELD_EXTENDED(&p_event->evt.gattc_evt.params.char_disc_rsp, + ble_gattc_evt_char_disc_rsp_t_dec); + + SER_EVT_DEC_END; +} + + + +uint32_t ble_gattc_evt_char_val_by_uuid_read_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP, gattc, char_val_by_uuid_read_rsp); + + SER_PULL_uint16(&p_event->evt.gattc_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.gattc_evt.gatt_status); + SER_PULL_uint16(&p_event->evt.gattc_evt.error_handle); + SER_PULL_FIELD_EXTENDED(&p_event->evt.gattc_evt.params.char_val_by_uuid_read_rsp, + ble_gattc_evt_char_val_by_uuid_read_rsp_t_dec); + + SER_EVT_DEC_END; +} + + +uint32_t ble_gattc_evt_char_vals_read_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTC_EVT_CHAR_VALS_READ_RSP, gattc, char_vals_read_rsp); + + SER_PULL_uint16(&p_event->evt.gattc_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.gattc_evt.gatt_status); + SER_PULL_uint16(&p_event->evt.gattc_evt.error_handle); + SER_PULL_FIELD_EXTENDED(&p_event->evt.gattc_evt.params.char_vals_read_rsp, + ble_gattc_evt_char_vals_read_rsp_t_dec); + + SER_EVT_DEC_END; +} + + +uint32_t ble_gattc_evt_desc_disc_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTC_EVT_DESC_DISC_RSP, gattc, desc_disc_rsp); + + SER_PULL_uint16(&p_event->evt.gattc_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.gattc_evt.gatt_status); + SER_PULL_uint16(&p_event->evt.gattc_evt.error_handle); + SER_PULL_FIELD_EXTENDED(&p_event->evt.gattc_evt.params.desc_disc_rsp, + ble_gattc_evt_desc_disc_rsp_t_dec); + + SER_EVT_DEC_END; +} + +uint32_t ble_gattc_evt_hvx_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTC_EVT_HVX, gattc, hvx); + + SER_PULL_uint16(&p_event->evt.gattc_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.gattc_evt.gatt_status); + SER_PULL_uint16(&p_event->evt.gattc_evt.error_handle); + SER_PULL_FIELD_EXTENDED(&p_event->evt.gattc_evt.params.hvx, + ble_gattc_evt_hvx_t_dec); + + SER_EVT_DEC_END; +} + + +uint32_t ble_gattc_evt_prim_srvc_disc_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP, gattc, prim_srvc_disc_rsp); + + SER_PULL_uint16(&p_event->evt.gattc_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.gattc_evt.gatt_status); + SER_PULL_uint16(&p_event->evt.gattc_evt.error_handle); + SER_PULL_FIELD_EXTENDED(&p_event->evt.gattc_evt.params.prim_srvc_disc_rsp, + ble_gattc_evt_prim_srvc_disc_rsp_t_dec); + + SER_EVT_DEC_END; +} + +uint32_t ble_gattc_evt_read_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTC_EVT_READ_RSP, gattc, read_rsp); + + SER_PULL_uint16(&p_event->evt.gattc_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.gattc_evt.gatt_status); + SER_PULL_uint16(&p_event->evt.gattc_evt.error_handle); + SER_PULL_FIELD_EXTENDED(&p_event->evt.gattc_evt.params.read_rsp, + ble_gattc_evt_read_rsp_t_dec); + + SER_EVT_DEC_END; +} + + +#define BLE_GATTC_EVT_REL_DISC_RSP_COUNT_POSITION 6 + + +uint32_t ble_gattc_evt_rel_disc_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTC_EVT_READ_RSP, gattc, rel_disc_rsp); + + SER_PULL_uint16(&p_event->evt.gattc_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.gattc_evt.gatt_status); + SER_PULL_uint16(&p_event->evt.gattc_evt.error_handle); + SER_PULL_FIELD_EXTENDED(&p_event->evt.gattc_evt.params.rel_disc_rsp, + ble_gattc_evt_rel_disc_rsp_t_dec); + + SER_EVT_DEC_END; +} + + +uint32_t ble_gattc_evt_timeout_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTC_EVT_TIMEOUT, gattc, timeout); + + SER_PULL_uint16(&p_event->evt.gattc_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.gattc_evt.gatt_status); + SER_PULL_uint16(&p_event->evt.gattc_evt.error_handle); + SER_PULL_FIELD(&p_event->evt.gattc_evt.params.timeout, + ble_gattc_evt_timeout_t_dec); + + SER_EVT_DEC_END; +} + +uint32_t ble_gattc_evt_write_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTC_EVT_WRITE_RSP, gattc, write_rsp); + + SER_PULL_uint16(&p_event->evt.gattc_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.gattc_evt.gatt_status); + SER_PULL_uint16(&p_event->evt.gattc_evt.error_handle); + SER_PULL_FIELD_EXTENDED(&p_event->evt.gattc_evt.params.write_rsp, + ble_gattc_evt_write_rsp_t_dec); + + SER_EVT_DEC_END; +} + +uint32_t ble_gattc_evt_exchange_mtu_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTC_EVT_EXCHANGE_MTU_RSP, gattc, exchange_mtu_rsp); + + SER_PULL_uint16(&p_event->evt.gattc_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.gattc_evt.gatt_status); + SER_PULL_uint16(&p_event->evt.gattc_evt.error_handle); + SER_PULL_FIELD(&p_event->evt.gattc_evt.params.exchange_mtu_rsp, + ble_gattc_evt_exchange_mtu_rsp_t_dec); + + SER_EVT_DEC_END; +} + +#if NRF_SD_BLE_API_VERSION >= 4 +uint32_t ble_gattc_evt_write_cmd_tx_complete_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE, gattc, write_cmd_tx_complete); + SER_PULL_uint16(&p_event->evt.gattc_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.gattc_evt.gatt_status); + SER_PULL_uint16(&p_event->evt.gattc_evt.error_handle); + SER_PULL_uint8(&p_event->evt.gattc_evt.params.write_cmd_tx_complete.count); + + SER_EVT_DEC_END; +} +#endif diff --git a/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gattc_evt_app.h b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gattc_evt_app.h new file mode 100644 index 000000000..73a0c78de --- /dev/null +++ b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gattc_evt_app.h @@ -0,0 +1,364 @@ +/** + * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +#ifndef BLE_GATTC_EVT_APP_H__ +#define BLE_GATTC_EVT_APP_H__ + +/**@file + * + * @defgroup ble_gattc_evt_app GATTC Application event decoders + * @{ + * @ingroup ser_app_s130_codecs + * + * @brief GATTC Application event decoders. + */ +#include "ble.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Decodes ble_gattc_evt_char_disc_rsp event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gattc_evt_char_disc_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gattc_evt_char_val_by_uuid_read_rsp event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gattc_evt_char_val_by_uuid_read_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gattc_evt_char_vals_read_rsp event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gattc_evt_char_vals_read_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gattc_evt_desc_disc_rsp event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gattc_evt_desc_disc_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gattc_evt_hvx event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gattc_evt_hvx_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gattc_evt_prim_srvc_disc_rsp event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gattc_evt_prim_srvc_disc_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gattc_evt_read_rsp event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gattc_evt_read_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gattc_evt_rel_disc_rsp_dec event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gattc_evt_rel_disc_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gattc_evt_timeout event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gattc_evt_timeout_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gattc_evt_write_rsp event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gattc_evt_write_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gattc_evt_attr_info_disc_rsp event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gattc_evt_attr_info_disc_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gattc_evt_exchange_mtu_rsp event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gattc_evt_exchange_mtu_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +#if NRF_SD_BLE_API_VERSION >= 4 + +/** + * @brief Decodes ble_gattc_evt_write_cmd_tx_complete event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gattc_evt_write_cmd_tx_complete_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); +#endif +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gatts_app.c b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gatts_app.c new file mode 100644 index 000000000..eb7c76c2a --- /dev/null +++ b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gatts_app.c @@ -0,0 +1,439 @@ +/** + * Copyright (c) 2013 - 2018, Nordic Semiconductor ASA + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +#include "ble_gatts_app.h" +#include +#include +#include "ble_serialization.h" +#include "ble_gatts_struct_serialization.h" +#include "ble_struct_serialization.h" +#include "cond_field_serialization.h" +#include "app_util.h" + + +uint32_t ble_gatts_attr_get_req_enc(uint16_t handle, + ble_uuid_t * p_uuid, + ble_gatts_attr_md_t * p_md, + uint8_t * const p_buf, + uint32_t * p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTS_ATTR_GET); + + SER_PUSH_uint16(&handle); + SER_PUSH_COND(p_uuid, NULL); + SER_PUSH_COND(p_md, NULL); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gatts_attr_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_uuid_t ** pp_uuid, + ble_gatts_attr_md_t ** pp_md, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GATTS_ATTR_GET); + SER_PULL_COND(pp_uuid, ble_uuid_t_dec); + SER_PULL_COND(pp_md, ble_gatts_attr_md_t_dec); + SER_RSP_DEC_END; +} + + +uint32_t ble_gatts_characteristic_add_req_enc( + uint16_t service_handle, + ble_gatts_char_md_t const * const p_char_md, + ble_gatts_attr_t const * const p_attr_char_value, + ble_gatts_char_handles_t const * const p_handles, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTS_CHARACTERISTIC_ADD); + + SER_PUSH_uint16(&service_handle); + SER_PUSH_COND(p_char_md, ble_gatts_char_md_t_enc); + SER_PUSH_COND(p_attr_char_value, ble_gatts_attr_t_enc); + SER_PUSH_COND(p_handles, NULL); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gatts_characteristic_add_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint16_t * * const pp_handles, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GATTS_CHARACTERISTIC_ADD); + + SER_PULL_COND(pp_handles, ble_gatts_char_handles_t_dec); + + SER_RSP_DEC_END; +} + + + +uint32_t ble_gatts_descriptor_add_req_enc(uint16_t char_handle, + ble_gatts_attr_t const * const p_attr, + uint16_t * const p_handle, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTS_DESCRIPTOR_ADD); + + SER_PUSH_uint16(&char_handle); + SER_PUSH_COND(p_attr, ble_gatts_attr_t_enc); + SER_PUSH_COND(p_handle, NULL); + + SER_REQ_ENC_END; +} + +uint32_t ble_gatts_descriptor_add_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint16_t * const p_handle, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GATTS_DESCRIPTOR_ADD); + + SER_PULL_COND(&p_handle, uint16_t_dec); + + SER_RSP_DEC_END; +} + + +uint32_t ble_gatts_hvx_req_enc(uint16_t conn_handle, + ble_gatts_hvx_params_t const * const p_hvx_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTS_HVX); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_hvx_params, ble_gatts_hvx_params_t_enc); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gatts_hvx_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code, + uint16_t * * const pp_bytes_written) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GATTS_HVX); + + SER_PULL_COND(pp_bytes_written, uint16_t_dec); + + SER_RSP_DEC_END; +} + + +uint32_t ble_gatts_include_add_req_enc(uint16_t service_handle, + uint16_t inc_srvc_handle, + uint16_t * const p_include_handle, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTS_INCLUDE_ADD); + + SER_PUSH_uint16(&service_handle); + SER_PUSH_uint16(&inc_srvc_handle); + SER_PUSH_COND(p_include_handle, NULL); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gatts_include_add_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint16_t * const p_include_handle, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GATTS_INCLUDE_ADD); + + SER_PULL_COND(&p_include_handle, uint16_t_dec); + + SER_RSP_DEC_END; +} + + +uint32_t ble_gatts_initial_user_handle_get_req_enc(uint16_t * p_handle, + uint8_t * const p_buf, + uint32_t * p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTS_INITIAL_USER_HANDLE_GET); + + SER_PUSH_COND(p_handle, NULL); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gatts_initial_user_handle_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint16_t ** pp_handle, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GATTS_INITIAL_USER_HANDLE_GET); + + SER_PULL_COND(pp_handle, uint16_t_dec); + + SER_RSP_DEC_END; +} + + +uint32_t ble_gatts_rw_authorize_reply_req_enc(uint16_t conn_handle, + ble_gatts_rw_authorize_reply_params_t const * const p_reply_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTS_RW_AUTHORIZE_REPLY); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_reply_params, ble_gatts_rw_authorize_reply_params_t_enc); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gatts_rw_authorize_reply_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GATTS_RW_AUTHORIZE_REPLY); +} + + +uint32_t ble_gatts_service_add_req_enc(uint8_t type, + ble_uuid_t const * const p_uuid, + uint16_t const * const p_conn_handle, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTS_SERVICE_ADD); + + SER_PUSH_uint8(&type); + SER_PUSH_COND(p_uuid, ble_uuid_t_enc); + SER_PUSH_COND(p_conn_handle, NULL); + + SER_REQ_ENC_END; +} + +uint32_t ble_gatts_service_add_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint16_t * const p_conn_handle, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GATTS_SERVICE_ADD); + + SER_PULL_COND(&p_conn_handle, uint16_t_dec); + + SER_RSP_DEC_END; +} + + +uint32_t ble_gatts_service_changed_req_enc(uint16_t conn_handle, + uint16_t start_handle, + uint16_t end_handle, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTS_SERVICE_CHANGED); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_uint16(&start_handle); + SER_PUSH_uint16(&end_handle); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gatts_service_changed_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GATTS_SERVICE_CHANGED); +} + + +uint32_t ble_gatts_sys_attr_get_req_enc(uint16_t conn_handle, + uint8_t const * const p_sys_attr_data, + uint16_t const * const p_sys_attr_data_len, + uint32_t flags, + uint8_t * const p_buf, + uint32_t * p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTS_SYS_ATTR_GET); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_sys_attr_data_len, uint16_t_enc); + SER_PUSH_COND(p_sys_attr_data, NULL); + SER_PUSH_uint32(&flags); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gatts_sys_attr_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint8_t * * const pp_sys_attr_data, + uint16_t * * const pp_sys_attr_data_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GATTS_SYS_ATTR_GET); + + SER_PULL_COND(pp_sys_attr_data_len, uint16_t_dec); + if (*pp_sys_attr_data_len) + { + SER_PULL_buf(pp_sys_attr_data, **pp_sys_attr_data_len, **pp_sys_attr_data_len); + } + + SER_RSP_DEC_END; +} + + +uint32_t ble_gatts_sys_attr_set_req_enc(uint16_t conn_handle, + uint8_t const * const p_sys_attr_data, + uint16_t sys_attr_data_len, + uint32_t flags, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTS_SYS_ATTR_SET); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_len16data(p_sys_attr_data, sys_attr_data_len); + SER_PUSH_uint32(&flags); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gatts_sys_attr_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + return ser_ble_cmd_rsp_dec(p_buf, packet_len, SD_BLE_GATTS_SYS_ATTR_SET, p_result_code); +} + + +uint32_t ble_gatts_value_get_req_enc(uint16_t conn_handle, + uint16_t handle, + ble_gatts_value_t const * const p_value, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTS_VALUE_GET); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_uint16(&handle); + + //Special case: skip the data. + SER_PUSH_COND(p_value, NULL); + if (p_value) + { + SER_PUSH_uint16(&p_value->offset); + SER_PUSH_uint16(&p_value->len); + SER_PUSH_COND(p_value->p_value, NULL); + } + + SER_REQ_ENC_END; +} + +uint32_t ble_gatts_value_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gatts_value_t * const p_value, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GATTS_VALUE_GET); + + SER_PULL_COND(&p_value, ble_gatts_value_t_dec); + + SER_RSP_DEC_END; +} + + +uint32_t ble_gatts_value_set_req_enc(uint16_t conn_handle, + uint16_t handle, + ble_gatts_value_t * p_value, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTS_VALUE_SET); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_uint16(&handle); + SER_PUSH_COND(p_value, ble_gatts_value_t_enc); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gatts_value_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gatts_value_t * const p_value, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_GATTS_VALUE_SET); + + SER_PULL_COND(&p_value, ble_gatts_value_t_dec); + + SER_RSP_DEC_END; +} + +uint32_t ble_gatts_exchange_mtu_reply_req_enc(uint16_t conn_handle, + uint16_t server_rx_mtu, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_GATTS_EXCHANGE_MTU_REPLY); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_uint16(&server_rx_mtu); + + SER_REQ_ENC_END; +} + + +uint32_t ble_gatts_exchange_mtu_reply_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GATTS_EXCHANGE_MTU_REPLY); +} diff --git a/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gatts_app.h b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gatts_app.h new file mode 100644 index 000000000..3dcf5d5a8 --- /dev/null +++ b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gatts_app.h @@ -0,0 +1,677 @@ +/** + * Copyright (c) 2013 - 2018, Nordic Semiconductor ASA + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +#ifndef BLE_GATTS_APP_H__ +#define BLE_GATTS_APP_H__ + +/**@file + * + * @defgroup ble_gatts_app GATTS Application command request encoders and command response decoders + * @{ + * @ingroup ser_app_s130_codecs + * + * @brief GATTS Application command request encoders and command response decoders. + */ +#include "ble_gatts.h" +#include "ble.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/**@brief Encodes @ref sd_ble_gatts_value_get command request. + * + * @sa @ref ble_gatts_value_get_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle. + * @param[in] handle Attribute handle. + * @param[in] p_value Pointer to attribute value information. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @note \p p_data_len and \p p_data will not be updated by the command + * request encoder. Updated values are set by @ref ble_gatts_value_get_rsp_dec. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gatts_value_get_req_enc(uint16_t conn_handle, + uint16_t handle, + ble_gatts_value_t const * const p_value, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gatts_value_get command. + * + * @sa @ref ble_gatts_value_get_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_value Pointer to structure where the attribute value will be stored. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Length of \p p_value is too small to hold decoded + * value from response. + */ +uint32_t ble_gatts_value_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gatts_value_t * const p_value, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gatts_hvx command request. + * + * @sa @ref ble_gatts_hvx_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_hvx_params Pointer to an HVx parameters structure to be encoded. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @note \p p_hvx_params will not be updated by the command + * request encoder. Updated values are set by @ref ble_gatts_hvx_rsp_dec. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gatts_hvx_req_enc(uint16_t conn_handle, + ble_gatts_hvx_params_t const * const p_hvx_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gatts_hvx command. + * + * @sa @ref ble_gatts_hvx_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * @param[out] pp_bytes_written Pointer to pointer to location where number of bytes is written. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gatts_hvx_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code, + uint16_t * * const pp_bytes_written); + +/**@brief Encodes @ref sd_ble_gatts_characteristic_add command request. + * + * @sa @ref ble_gatts_characteristic_add_rsp_dec for command response decoder. + * + * @param[in] service_handle Handle of the service where the characteristic is to be placed. + * If @ref BLE_GATT_HANDLE_INVALID is used, it will be placed + * sequentially. + * @param[in] p_char_md Pointer to a @ref ble_gatts_char_md_t structure, characteristic + * metadata. + * @param[in] p_attr_char_value Pointer to a @ref ble_gatts_attr_t structure, corresponding to + * the characteristic value. + * @param[in] p_handles Pointer to a @ref ble_gatts_char_handles_t structure, where the + * assigned handles will be stored. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @note \p p_handles will not be updated by the command + * request encoder. Updated values are set by @ref ble_gatts_characteristic_add_rsp_dec. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gatts_characteristic_add_req_enc + (uint16_t service_handle, + ble_gatts_char_md_t const * const p_char_md, + ble_gatts_attr_t const * const p_attr_char_value, + ble_gatts_char_handles_t const * const p_handles, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gatts_characteristic_add command. + * + * @sa @ref ble_gatts_characteristic_add_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] pp_handles Pointer to pointer to location where handles should be decoded. + * @param[out] p_result_code Pointer to command result code decode location. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gatts_characteristic_add_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint16_t * * const pp_handles, + uint32_t * const p_result_code); + + +/**@brief Encodes @ref sd_ble_gatts_service_add command request. + * + * @sa @ref ble_gatts_service_add_rsp_dec for command response decoder. + * + * @param[in] type Toggles between primary and secondary services, + * see @ref BLE_GATTS_SRVC_TYPES. + * @param[in] p_uuid Pointer to service UUID. + * @param[in] p_conn_handle Pointer to a 16-bit word where the assigned handle will be stored. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @note \p p_conn_handle will not be updated by the command + * request encoder. Updated values are set by @ref ble_gatts_service_add_rsp_dec. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gatts_service_add_req_enc(uint8_t type, + ble_uuid_t const * const p_uuid, + uint16_t const * const p_conn_handle, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gatts_service_add command. + * + * @sa @ref ble_gatts_service_add_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_conn_handle Connection handle. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gatts_service_add_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint16_t * const p_conn_handle, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gatts_sys_attr_set command request. + * + * @sa @ref ble_gatts_sys_attr_set_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_sys_attr_data Pointer to a buffer (at least \p sys_attr_data_len bytes long) + * containing the attribute value to write. + * @param[in] sys_attr_data_len Length (in bytes) of \p p_sys_attr_data. + * @param[in] flags Optional additional flags. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gatts_sys_attr_set_req_enc(uint16_t conn_handle, + uint8_t const * const p_sys_attr_data, + uint16_t sys_attr_data_len, + uint32_t flags, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gatts_sys_attr_set command. + * + * @sa @ref ble_gatts_sys_attr_set_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gatts_sys_attr_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gatts_value_set command request. + * + * @sa @ref ble_gatts_value_set_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle. + * @param[in] handle Attribute handle. + * @param[in] p_value Pointer to attribute value information. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gatts_value_set_req_enc(uint16_t conn_handle, + uint16_t handle, + ble_gatts_value_t * p_value, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gatts_value_set command. + * + * @sa @ref ble_gatts_value_set_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_value Pointer to attribute value information. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gatts_value_set_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_gatts_value_t * const p_value, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gatts_sys_attr_get command request. + * + * @sa @ref ble_gatts_sys_attr_get_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle of the connection. + * @param[in] p_sys_attr_data Pointer to buffer where updated information about system + * attributes will be stored. Can be NULL to calculate required + * size. + * @param[in] p_sys_attr_data_len Size of p_sys_attr_data buffer if \p p_sys_attr_data is + * not NULL. + * @param[in] flags Additional optional flags. + * @param[in,out] p_buf Pointer to buffer where encoded data command will + * be returned. + * @param[in,out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @note \p p_sys_attr_data and \p p_sys_attr_data_len will not be updated by the command + * request encoder. Updated values are set by @ref ble_gatts_sys_attr_get_rsp_dec. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gatts_sys_attr_get_req_enc(uint16_t conn_handle, + uint8_t const * const p_sys_attr_data, + uint16_t const * const p_sys_attr_data_len, + uint32_t flags, + uint8_t * const p_buf, + uint32_t * p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gatts_sys_attr_get command. + * + * @sa @ref ble_gatts_sys_attr_get_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] pp_sys_attr_data Pointer to a buffer where updated information about system + * attributes will be stored. + * @param[in,out] pp_sys_attr_data_len \c in: Size (in bytes) of \p p_sys_attr_data buffer. + * \c out: Length of decoded contents of \p p_sys_attr_data. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Length of \p p_sys_attr_data is too small to hold decoded + * value from response. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gatts_sys_attr_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint8_t * * const pp_sys_attr_data, + uint16_t * * const pp_sys_attr_data_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gatts_descriptor_add command request. + * + * @sa @ref ble_gatts_descriptor_add_rsp_dec for command response decoder. + * + * @param[in] char_handle Handle of the characteristic where the description is to be placed. + * If @ref BLE_GATT_HANDLE_INVALID is used, it will be placed + * sequentially. + * @param[in] p_attr Pointer to a @ref ble_gatts_attr_t structure, characteristic + * metadata. + * @param[in] p_handle Pointer to a @ref ble_gatts_char_handles_t structure, where the + * assigned handles will be stored. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gatts_descriptor_add_req_enc(uint16_t char_handle, + ble_gatts_attr_t const * const p_attr, + uint16_t * const p_handle, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gatts_descriptor_add command. + * + * @sa @ref ble_gatts_descriptor_add_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_handle Pointer to bufer where descriptor handle will be + returned. + * @param[out] p_result_code Pointer to command result code decode location. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gatts_descriptor_add_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint16_t * const p_handle, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gatts_include_add command request. + * + * @sa @ref ble_gatts_include_add_rsp_dec for command response decoder. + * + * @param[in] service_handle Handle of the service where the included service is to be placed. + * @param[in] inc_srvc_handle Handle of the included service + * @param[in] p_include_handle Pointer to Pointer to a 16-bit word where the assigned handle will be stored. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gatts_include_add_req_enc(uint16_t service_handle, + uint16_t inc_srvc_handle, + uint16_t * const p_include_handle, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gatts_include_add command. + * + * @sa @ref ble_gatts_include_add_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_include_handle Pointer to a 16-bit word where the assigned handle will be stored. + * @param[out] p_result_code Pointer to command result code decode location. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gatts_include_add_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint16_t * const p_include_handle, + uint32_t * const p_result_code); + + +/**@brief Encodes @ref sd_ble_gatts_rw_authorize_reply command request. + * + * @sa @ref ble_gatts_rw_authorize_reply_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_reply_params Pointer to \ref ble_gatts_rw_authorize_reply_params_t + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_PARAM Encoding failure. Invalid param provided in p_reply_params. + */ +uint32_t ble_gatts_rw_authorize_reply_req_enc( + uint16_t conn_handle, + ble_gatts_rw_authorize_reply_params_t const * const + p_reply_params, + uint8_t * const + p_buf, + uint32_t * const + p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gatts_rw_authorize_reply command. + * + * @sa @ref ble_gatts_rw_authorize_reply_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gatts_rw_authorize_reply_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gatts_service_changed command request. + * + * @sa @ref ble_gatts_service_changed_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle. + * @param[in] start_handle Start of affected attribute handle range. + * @param[in] end_handle End of affected attribute handle range. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_PARAM Encoding failure. Invalid param provided in p_reply_params. + */ +uint32_t ble_gatts_service_changed_req_enc(uint16_t conn_handle, + uint16_t start_handle, + uint16_t end_handle, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gatts_service_changed command. + * + * @sa @ref ble_gatts_service_changed_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gatts_service_changed_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gatts_attr_get command request. + * + * @sa @ref ble_gatts_attr_get_rsp_dec for command response decoder. + * + * @param[in] handle See @ref sd_ble_gatts_attr_get. + * @param[in] p_uuid See @ref sd_ble_gatts_attr_get. + * @param[out] p_md See @ref sd_ble_gatts_attr_get. + * @param[in,out] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gatts_attr_get_req_enc(uint16_t handle, + ble_uuid_t * p_uuid, + ble_gatts_attr_md_t * p_md, + uint8_t * const p_buf, + uint32_t * p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gatts_attr_get command. + * + * @sa @ref ble_gatts_attr_get_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] pp_uuid Pointer to address where to put output data. + * @param[out] pp_md Pointer to address where to put output data. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gatts_attr_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_uuid_t ** pp_uuid, + ble_gatts_attr_md_t ** pp_md, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gatts_initial_user_handle_get command request. + * + * @sa @ref ble_gatts_initial_user_handle_get_rsp_dec for command response decoder. + * + * @param[out] p_handle See @ref sd_ble_gatts_initial_user_handle_get. + * @param[in,out] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_gatts_initial_user_handle_get_req_enc(uint16_t * p_handle, + uint8_t * const p_buf, + uint32_t * p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gatts_initial_user_handle_get command. + * + * @sa @ref ble_gatts_initial_user_handle_get_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] pp_handle Pointer to address where to put output data. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gatts_initial_user_handle_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint16_t ** pp_handle, + uint32_t * const p_result_code); + +/**@brief Encodes @ref sd_ble_gatts_exchange_mtu_reply command request. + * + * @sa @ref ble_gatts_exchange_mtu_reply_rsp_dec for command response decoder. + * + * @param[in] conn_handle Connection handle. + * @param[in] server_rx_mtu Server MTU Size. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_PARAM Encoding failure. Invalid param provided in p_reply_params. + */ +uint32_t ble_gatts_exchange_mtu_reply_req_enc(uint16_t conn_handle, + uint16_t server_rx_mtu, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ble_gatts_exchange_mtu_reply command. + * + * @sa @ref ble_gatts_exchange_mtu_reply_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_gatts_exchange_mtu_reply_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif //BLE_GATTS_APP_H__ + + diff --git a/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gatts_evt_app.c b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gatts_evt_app.c new file mode 100644 index 000000000..bbe71e81b --- /dev/null +++ b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gatts_evt_app.c @@ -0,0 +1,190 @@ +/** + * Copyright (c) 2013 - 2018, Nordic Semiconductor ASA + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +#include "ble_gatts_evt_app.h" +#include "ble_serialization.h" +#include "ble_gatts_struct_serialization.h" +#include "app_ble_user_mem.h" +#include "app_util.h" + +extern ser_ble_user_mem_t m_app_user_mem_table[]; + +uint32_t ble_gatts_evt_hvc_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTS_EVT_HVC, gatts, hvc); + + SER_PULL_uint16(&p_event->evt.gatts_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gatts_evt.params.hvc, + ble_gatts_evt_hvc_t_dec); + + SER_EVT_DEC_END; +} + +uint32_t ble_gatts_evt_rw_authorize_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTS_EVT_HVC, gatts, rw_authorize_request); + + SER_PULL_uint16(&p_event->evt.gatts_evt.conn_handle); + SER_PULL_FIELD_EXTENDED(&p_event->evt.gatts_evt.params.authorize_request, ble_gatts_evt_rw_authorize_request_t_dec); + + //Correct event length / memory sync. + if (p_event->evt.gatts_evt.params.authorize_request.type == BLE_GATTS_AUTHORIZE_TYPE_READ) + { + evt_struct_len = offsetof(ble_evt_t, evt.gatts_evt.params.authorize_request.request.read) + - offsetof(ble_evt_t, evt) + + sizeof(ble_gatts_evt_read_t); + } + else if ((p_event->evt.gatts_evt.params.authorize_request.type == BLE_GATTS_AUTHORIZE_TYPE_WRITE) && + ( (p_event->evt.gatts_evt.params.authorize_request.request.write.op == BLE_GATTS_OP_EXEC_WRITE_REQ_NOW) || + (p_event->evt.gatts_evt.params.authorize_request.request.write.op == BLE_GATTS_OP_PREP_WRITE_REQ))) + { + uint32_t conn_index; + if (app_ble_user_mem_context_find(p_event->evt.gatts_evt.conn_handle, &conn_index) != NRF_ERROR_NOT_FOUND) + { + SER_PULL_len16data(&m_app_user_mem_table[conn_index].mem_block.p_mem, &m_app_user_mem_table[conn_index].mem_block.len); + } + } + + SER_EVT_DEC_END; +} + + +uint32_t ble_gatts_evt_sc_confirm_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN_NO_STRUCT(BLE_GATTS_EVT_SC_CONFIRM, gatts); + SER_PULL_uint16(&p_event->evt.gatts_evt.conn_handle); + SER_EVT_DEC_END; +} + + +uint32_t ble_gatts_evt_sys_attr_missing_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTS_EVT_SYS_ATTR_MISSING, gatts, sys_attr_missing); + + SER_PULL_uint16(&p_event->evt.gatts_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gatts_evt.params.sys_attr_missing, + ble_gatts_evt_sys_attr_missing_t_dec); + + SER_EVT_DEC_END; +} + + +uint32_t ble_gatts_evt_timeout_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTS_EVT_TIMEOUT, gatts, timeout); + + SER_PULL_uint16(&p_event->evt.gatts_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gatts_evt.params.timeout, + ble_gatts_evt_timeout_t_dec); + + SER_EVT_DEC_END; +} + + + + +uint32_t ble_gatts_evt_write_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTS_EVT_WRITE, gatts, write); + + SER_PULL_uint16(&p_event->evt.gatts_evt.conn_handle); + SER_PULL_FIELD_EXTENDED(&p_event->evt.gatts_evt.params.write, ble_gatts_evt_write_t_dec); + + if (p_event != NULL) + { + if (p_event->evt.gatts_evt.params.write.op == BLE_GATTS_OP_EXEC_WRITE_REQ_NOW) + { + uint32_t conn_index; + if (app_ble_user_mem_context_find(p_event->evt.gatts_evt.conn_handle, &conn_index) != NRF_ERROR_NOT_FOUND) + { + SER_PULL_len16data(&m_app_user_mem_table[conn_index].mem_block.p_mem, &m_app_user_mem_table[conn_index].mem_block.len); + SER_ASSERT(err_code == NRF_SUCCESS, err_code); + } + } + } + + SER_EVT_DEC_END; +} + + +uint32_t ble_gatts_evt_exchange_mtu_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST, gatts, exchange_mtu_request); + + SER_PULL_uint16(&p_event->evt.gatts_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gatts_evt.params.exchange_mtu_request, ble_gatts_evt_exchange_mtu_request_t_dec); + + SER_EVT_DEC_END; +} + +#if NRF_SD_BLE_API_VERSION >= 4 +uint32_t ble_gatts_evt_hvn_tx_complete_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_GATTS_EVT_HVN_TX_COMPLETE, gatts, hvn_tx_complete); + + SER_PULL_uint16(&p_event->evt.gatts_evt.conn_handle); + SER_PULL_uint8(&p_event->evt.gatts_evt.params.hvn_tx_complete.count); + + SER_EVT_DEC_END; +} +#endif diff --git a/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gatts_evt_app.h b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gatts_evt_app.h new file mode 100644 index 000000000..d294b8142 --- /dev/null +++ b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_gatts_evt_app.h @@ -0,0 +1,249 @@ +/** + * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +#ifndef BLE_GATTS_EVT_APP_H__ +#define BLE_GATTS_EVT_APP_H__ + +/**@file + * + * @defgroup ble_gatts_evt_app GATTS Application event decoders + * @{ + * @ingroup ser_app_s130_codecs + * + * @brief GATTS Application event decoders. + */ +#include "ble.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Decodes ble_gatts_evt_hvc event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gatts_evt_hvc_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gatts_evt_rw_authorize_request event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gatts_evt_rw_authorize_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gatts_evt_sc_confirm event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gatts_evt_sc_confirm_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gatts_evt_sys_attr_missing event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gatts_evt_sys_attr_missing_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gatts_evt_timeout event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gatts_evt_timeout_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gatts_evt_write event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gatts_evt_write_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +/** + * @brief Decodes ble_gatts_evt_exchange_mtu_request event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gatts_evt_exchange_mtu_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +#if NRF_SD_BLE_API_VERSION >= 4 + +/** + * @brief Decodes ble_gatts_evt_hvn_tx_complete event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_gatts_evt_hvn_tx_complete_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); +#endif +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_l2cap_app.c b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_l2cap_app.c new file mode 100644 index 000000000..8378c80af --- /dev/null +++ b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_l2cap_app.c @@ -0,0 +1,279 @@ +/** + * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +#include +#include "ble_l2cap_app.h" +#include "ble_serialization.h" +#include "ble_struct_serialization.h" +#include "ble_l2cap_struct_serialization.h" +#include "ble_gap.h" +#include "app_util.h" +#include "cond_field_serialization.h" + +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 4 +uint32_t ble_l2cap_cid_register_req_enc(uint16_t cid, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + uint32_t index = 0; + uint32_t err_code = NRF_SUCCESS; + + SER_ASSERT_NOT_NULL(p_buf); + SER_ASSERT_NOT_NULL(p_buf_len); + + SER_ASSERT_LENGTH_LEQ(index + 3, *p_buf_len); + + p_buf[index++] = SD_BLE_L2CAP_CID_REGISTER; + err_code = uint16_t_enc(&cid, p_buf, *p_buf_len, &index); + SER_ASSERT(err_code == NRF_SUCCESS, err_code); + + *p_buf_len = index; + + return err_code; +} + +uint32_t ble_l2cap_cid_register_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + return ser_ble_cmd_rsp_dec(p_buf, packet_len, SD_BLE_L2CAP_CID_REGISTER, p_result_code); +} + +uint32_t ble_l2cap_cid_unregister_req_enc(uint16_t cid, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + uint32_t index = 0; + uint32_t err_code = NRF_SUCCESS; + + SER_ASSERT_NOT_NULL(p_buf); + SER_ASSERT_NOT_NULL(p_buf_len); + + SER_ASSERT_LENGTH_LEQ(index + 3, *p_buf_len); + + p_buf[index++] = SD_BLE_L2CAP_CID_UNREGISTER; + err_code = uint16_t_enc(&cid, p_buf, *p_buf_len, &index); + SER_ASSERT(err_code == NRF_SUCCESS, err_code); + + *p_buf_len = index; + + return err_code; +} + +uint32_t ble_l2cap_cid_unregister_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + return ser_ble_cmd_rsp_dec(p_buf, packet_len, SD_BLE_L2CAP_CID_UNREGISTER, p_result_code); +} + + +uint32_t ble_l2cap_tx_req_enc(uint16_t conn_handle, + ble_l2cap_header_t const * const p_l2cap_header, + uint8_t const * const p_data, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + uint32_t index = 0; + uint32_t err_code = NRF_SUCCESS; + + SER_ASSERT_NOT_NULL(p_buf); + SER_ASSERT_NOT_NULL(p_buf_len); + + SER_ASSERT_LENGTH_LEQ(1, *p_buf_len); + p_buf[index++] = SD_BLE_L2CAP_TX; + + err_code = uint16_t_enc(&conn_handle, p_buf, *p_buf_len, &index); + SER_ASSERT(err_code == NRF_SUCCESS, err_code); + + err_code = cond_field_enc(p_l2cap_header, p_buf, *p_buf_len, &index, ble_l2cap_header_t_enc); + SER_ASSERT(err_code == NRF_SUCCESS, err_code); + + if (p_l2cap_header != NULL) + { + err_code = buf_enc(p_data, p_l2cap_header->len, p_buf, *p_buf_len, &index); + } + else + { + err_code = buf_enc(NULL, 0, p_buf, *p_buf_len, &index); + } + + *p_buf_len = index; + + return err_code; +} + +uint32_t ble_l2cap_tx_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + return ser_ble_cmd_rsp_dec(p_buf, packet_len, SD_BLE_L2CAP_TX, p_result_code); +} +#endif + +#if NRF_SD_BLE_API_VERSION >= 5 +uint32_t ble_l2cap_ch_setup_req_enc(uint16_t conn_handle, + uint16_t * p_local_cid, + ble_l2cap_ch_setup_params_t const *p_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_L2CAP_CH_SETUP); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_COND(p_local_cid, uint16_t_enc); + SER_PUSH_COND(p_params, ble_l2cap_ch_setup_params_t_enc); + + SER_REQ_ENC_END; +} + +uint32_t ble_l2cap_ch_setup_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint16_t * p_local_cid, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_L2CAP_CH_SETUP); + SER_PULL_COND((void **)&p_local_cid, uint16_t_dec); + SER_RSP_DEC_END; +} + +uint32_t ble_l2cap_ch_release_req_enc(uint16_t conn_handle, + uint16_t local_cid, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_L2CAP_CH_RELEASE); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_uint16(&local_cid); + + SER_REQ_ENC_END; +} + +uint32_t ble_l2cap_ch_release_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_L2CAP_CH_RELEASE); +} + +uint32_t ble_l2cap_ch_rx_req_enc(uint16_t conn_handle, + uint16_t local_cid, + ble_data_t const *p_sdu_buf, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_L2CAP_CH_RX); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_uint16(&local_cid); + + SER_PUSH_COND(p_sdu_buf, NULL); + if (p_sdu_buf) + { + SER_PUSH_uint16(&p_sdu_buf->len); + SER_PUSH_uint32(&p_sdu_buf->p_data); + } + + SER_REQ_ENC_END; +} + +uint32_t ble_l2cap_ch_rx_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_L2CAP_CH_RX); +} + +uint32_t ble_l2cap_ch_tx_req_enc(uint16_t conn_handle, + uint16_t local_cid, + ble_data_t const *p_sdu_buf, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_L2CAP_CH_TX); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_uint16(&local_cid); + + SER_PUSH_COND(p_sdu_buf, NULL); + if (p_sdu_buf) + { + SER_PUSH_uint32(&p_sdu_buf->p_data); + SER_PUSH_uint16(&p_sdu_buf->len); + SER_PUSH_buf(p_sdu_buf->p_data, p_sdu_buf->len); + } + + SER_REQ_ENC_END; +} + +uint32_t ble_l2cap_ch_tx_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_RESULT_ONLY(SD_BLE_L2CAP_CH_TX); +} + +uint32_t ble_l2cap_ch_flow_control_req_enc(uint16_t conn_handle, + uint16_t local_cid, + uint16_t credits, + uint16_t *p_credits, + uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(SD_BLE_L2CAP_CH_FLOW_CONTROL); + + SER_PUSH_uint16(&conn_handle); + SER_PUSH_uint16(&local_cid); + SER_PUSH_uint16(&credits); + SER_PUSH_COND(p_credits, NULL); + + SER_REQ_ENC_END; +} + +uint32_t ble_l2cap_ch_flow_control_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint16_t * p_credits, + uint32_t * const p_result_code) +{ + SER_RSP_DEC_BEGIN(SD_BLE_L2CAP_CH_FLOW_CONTROL); + SER_PULL_COND((void **)&p_credits, uint16_t_dec); + SER_RSP_DEC_END; +} +#endif //NRF_SD_BLE_API_VERSION >= 5 diff --git a/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_l2cap_app.h b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_l2cap_app.h new file mode 100644 index 000000000..68d8f688e --- /dev/null +++ b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_l2cap_app.h @@ -0,0 +1,242 @@ +/** + * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +/**@file + * + * @defgroup ble_l2cap_app L2CAP Application command request encoders and command response decoders + * @{ + * @ingroup ser_app_s130_codecs + * + * @brief L2CAP Application command request encoders and command response decoders. + */ + +#ifndef BLE_L2CAP_APP_H__ +#define BLE_L2CAP_APP_H__ + +#include "ble.h" +#include "ble_types.h" +#include "ble_ranges.h" +#include "ble_err.h" +#include "ble_l2cap.h" + +#ifdef __cplusplus +extern "C" { +#endif +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 4 +/**@brief Register a CID with L2CAP. + * + * @details This registers a higher protocol layer with the L2CAP multiplexer, and is required prior to all operations on the CID. + * + * @param[in] cid L2CAP CID. + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_l2cap_cid_register_req_enc(uint16_t cid, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes response to @ref sd_ble_l2cap_cid_register command. + * + * @sa @ref ble_l2cap_cid_register_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_l2cap_cid_register_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Unregister a CID with L2CAP. + * + * @details This unregisters a previously registered higher protocol layer with the L2CAP multiplexer. + * + * @param[in] cid L2CAP CID. + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in,out] p_buf_len \c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ble_l2cap_cid_unregister_req_enc(uint16_t cid, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes response to @ref sd_ble_l2cap_cid_unregister command. + * + * @sa @ref ble_l2cap_cid_unregister_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_l2cap_cid_unregister_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +/**@brief Transmit an L2CAP packet. + * + * @note It is important to note that a call to this function will consume an application buffer, and will therefore + * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. + * See the documentation of @ref sd_ble_tx_packet_count_get for more details. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_l2cap_header Pointer to a packet header containing length and CID. + * @param[in] p_data Pointer to the data to be transmitted. + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in,out] p_buf_len\ c in: Size of \p p_buf buffer. + * \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Successfully queued an L2CAP packet for transmission. + * @retval NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, CIDs must be registered beforehand with @ref sd_ble_l2cap_cid_register. + * @retval NRF_ERROR_NOT_FOUND CID not found. + * @retval NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @retval NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, see @ref BLE_L2CAP_MTU_DEF. + */ +uint32_t ble_l2cap_tx_req_enc(uint16_t conn_handle, + ble_l2cap_header_t const * const p_l2cap_header, + uint8_t const * const p_data, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** + * @brief Decodes response to @ref sd_ble_l2cap_tx command. + * + * @sa @ref ble_l2cap_tx_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_INVALID_DATA Decoding failure. Decoded operation code does not match + * expected operation code. + */ +uint32_t ble_l2cap_tx_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); +#endif + +#if NRF_SD_BLE_API_VERSION >= 5 +uint32_t ble_l2cap_ch_setup_req_enc(uint16_t conn_handle, + uint16_t * p_local_cid, + ble_l2cap_ch_setup_params_t const *p_params, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +uint32_t ble_l2cap_ch_setup_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint16_t * p_local_cid, + uint32_t * const p_result_code); + +uint32_t ble_l2cap_ch_release_req_enc(uint16_t conn_handle, + uint16_t local_cid, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +uint32_t ble_l2cap_ch_release_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +uint32_t ble_l2cap_ch_rx_req_enc(uint16_t conn_handle, + uint16_t local_cid, + ble_data_t const *p_sdu_buf, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +uint32_t ble_l2cap_ch_rx_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +uint32_t ble_l2cap_ch_tx_req_enc(uint16_t conn_handle, + uint16_t local_cid, + ble_data_t const *p_sdu_buf, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +uint32_t ble_l2cap_ch_tx_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code); + +uint32_t ble_l2cap_ch_flow_control_req_enc(uint16_t conn_handle, + uint16_t local_cid, + uint16_t credits, + uint16_t *p_credits, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +uint32_t ble_l2cap_ch_flow_control_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint16_t * p_credits, + uint32_t * const p_result_code); +#endif //NRF_SD_BLE_API_VERSION >= 5 + +#ifdef __cplusplus +} +#endif + +#endif //BLE_L2CAP_APP_H__ + +/** + @} + */ diff --git a/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_l2cap_evt_app.c b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_l2cap_evt_app.c new file mode 100644 index 000000000..392d86045 --- /dev/null +++ b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_l2cap_evt_app.c @@ -0,0 +1,183 @@ +/** + * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +#include "ble_serialization.h" +#include "ble_struct_serialization.h" +#include "ble_l2cap_struct_serialization.h" +#include "app_util.h" +#include "ble_l2cap_evt_app.h" + +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 4 +uint32_t ble_l2cap_evt_rx_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_L2CAP_EVT_RX, l2cap, rx); + + SER_PULL_uint16(&p_event->evt.l2cap_evt.conn_handle); + SER_PULL_FIELD_EXTENDED(&p_event->evt.l2cap_evt.params.rx, ble_l2cap_evt_rx_t_dec); + + SER_EVT_DEC_END; +} +#endif + +#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION >= 5 + +uint32_t ble_l2cap_evt_ch_setup_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_L2CAP_EVT_CH_SETUP_REQUEST, l2cap, ch_setup_request); + + SER_PULL_uint16(&p_event->evt.l2cap_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.l2cap_evt.local_cid); + SER_PULL_uint16(&p_event->evt.l2cap_evt.params.ch_setup_request.le_psm); + SER_PULL_FIELD(&p_event->evt.l2cap_evt.params.ch_setup_request.tx_params, ble_l2cap_ch_tx_params_t_dec); + + SER_EVT_DEC_END; +} + +uint32_t ble_l2cap_evt_ch_setup_refused_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_L2CAP_EVT_CH_SETUP_REFUSED, l2cap, ch_setup_refused); + + SER_PULL_uint16(&p_event->evt.l2cap_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.l2cap_evt.local_cid); + SER_PULL_uint8(&p_event->evt.l2cap_evt.params.ch_setup_refused.source); + SER_PULL_uint16(&p_event->evt.l2cap_evt.params.ch_setup_refused.status); + + SER_EVT_DEC_END; +} + +uint32_t ble_l2cap_evt_ch_setup_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_L2CAP_EVT_CH_SETUP, l2cap, ch_setup); + + SER_PULL_uint16(&p_event->evt.l2cap_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.l2cap_evt.local_cid); + SER_PULL_FIELD(&p_event->evt.l2cap_evt.params.ch_setup.tx_params, ble_l2cap_ch_tx_params_t_dec); + + SER_EVT_DEC_END; +} + +uint32_t ble_l2cap_evt_ch_released_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN_NO_STRUCT(BLE_L2CAP_EVT_CH_RELEASED, l2cap); + + SER_PULL_uint16(&p_event->evt.l2cap_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.l2cap_evt.local_cid); + + SER_EVT_DEC_END; +} + +uint32_t ble_l2cap_evt_ch_sdu_buf_released_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED, l2cap, ch_sdu_buf_released); + + SER_PULL_uint16(&p_event->evt.l2cap_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.l2cap_evt.local_cid); + SER_PULL_uint16(&p_event->evt.l2cap_evt.params.ch_sdu_buf_released.sdu_buf.len); + SER_PULL_uint32(&p_event->evt.l2cap_evt.params.ch_sdu_buf_released.sdu_buf.p_data); + + SER_EVT_DEC_END; +} + +uint32_t ble_l2cap_evt_ch_credit_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_L2CAP_EVT_CH_CREDIT, l2cap, ch_credit); + + SER_PULL_uint16(&p_event->evt.l2cap_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.l2cap_evt.local_cid); + SER_PULL_uint16(&p_event->evt.l2cap_evt.params.credit.credits); + + SER_EVT_DEC_END; +} + +uint32_t ble_l2cap_evt_ch_rx_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_L2CAP_EVT_CH_RX, l2cap, ch_rx); + + SER_PULL_uint16(&p_event->evt.l2cap_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.l2cap_evt.local_cid); + SER_PULL_uint16(&p_event->evt.l2cap_evt.params.rx.sdu_len); + SER_PULL_uint16(&p_event->evt.l2cap_evt.params.rx.sdu_buf.len); + + SER_PULL_uint32(&p_event->evt.l2cap_evt.params.rx.sdu_buf.p_data); + SER_PULL_buf(&p_event->evt.l2cap_evt.params.rx.sdu_buf.p_data, p_event->evt.l2cap_evt.params.rx.sdu_buf.len, p_event->evt.l2cap_evt.params.rx.sdu_buf.len); + + SER_EVT_DEC_END; +} + + +uint32_t ble_l2cap_evt_ch_tx_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len) +{ + SER_EVT_DEC_BEGIN(BLE_L2CAP_EVT_CH_TX, l2cap, ch_tx); + + SER_PULL_uint16(&p_event->evt.l2cap_evt.conn_handle); + SER_PULL_uint16(&p_event->evt.l2cap_evt.local_cid); + SER_PULL_uint16(&p_event->evt.l2cap_evt.params.tx.sdu_buf.len); + SER_PULL_uint32(&p_event->evt.l2cap_evt.params.tx.sdu_buf.p_data); + + SER_EVT_DEC_END; +} + +#endif diff --git a/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_l2cap_evt_app.h b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_l2cap_evt_app.h new file mode 100644 index 000000000..e2d795884 --- /dev/null +++ b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/ble_l2cap_evt_app.h @@ -0,0 +1,126 @@ +/** + * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +#ifndef BLE_L2CAP_EVT_APP_H__ +#define BLE_L2CAP_EVT_APP_H__ + +/**@file + * + * @defgroup ble_l2cap_evt_app L2CAP Application event decoders + * @{ + * @ingroup ser_app_s130_codecs + * + * @brief L2CAP Application event decoders. + */ +#include "ble.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Decodes ble_l2cap_evt_rx event. + * + * If \p p_event is null, the required length of \p p_event is returned in \p p_event_len. + * + * @param[in] p_buf Pointer to the beginning of an event packet. + * @param[in] packet_len Length (in bytes) of the event packet. + * @param[in,out] p_event Pointer to a \ref ble_evt_t buffer where the decoded event will be + * stored. If NULL, required length will be returned in \p p_event_len. + * @param[in,out] p_event_len \c in: Size (in bytes) of \p p_event buffer. + * \c out: Length of decoded contents of \p p_event. + * + * @retval NRF_SUCCESS Decoding success. + * @retval NRF_ERROR_NULL Decoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ble_l2cap_evt_rx_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +uint32_t ble_l2cap_evt_ch_setup_request_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +uint32_t ble_l2cap_evt_ch_setup_refused_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +uint32_t ble_l2cap_evt_ch_setup_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +uint32_t ble_l2cap_evt_ch_released_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +uint32_t ble_l2cap_evt_ch_sdu_buf_released_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +uint32_t ble_l2cap_evt_ch_credit_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + +uint32_t ble_l2cap_evt_ch_rx_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); + + +uint32_t ble_l2cap_evt_ch_tx_dec(uint8_t const * const p_buf, + uint32_t packet_len, + ble_evt_t * const p_event, + uint32_t * const p_event_len); +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/nrf_soc_app.h b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/nrf_soc_app.h new file mode 100644 index 000000000..ed1cb84ce --- /dev/null +++ b/src/sd_api_v6/sdk/components/serialization/application/codecs/ble/serializers/nrf_soc_app.h @@ -0,0 +1,147 @@ +/** + * Copyright (c) 2013 - 2018, Nordic Semiconductor ASA + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +/**@file + * + * @defgroup soc_app SOC Application command request encoders and command response decoders + * @{ + * @ingroup ser_app_s130_codecs + * + * @brief SOC Application command request encoders and command response decoders. + */ + +#ifndef NRF_SOC_APP_H__ +#define NRF_SOC_APP_H__ + +#include +#include "nrf_soc.h" + +#ifdef __cplusplus +extern "C" { +#endif +/**@brief Encodes @ref sd_power_system_off command request. + * + * + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: size of p_buf buffer. \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t power_system_off_req_enc(uint8_t * const p_buf, uint32_t * const p_buf_len); + + +/**@brief Encodes @ref sd_temp_get command request. + * + * @sa @ref temp_get_rsp_dec for command response decoder. + * + * @param[in] p_temp Pointer to result of temperature measurement. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: size of p_buf buffer. \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t temp_get_req_enc(int32_t const * const p_temp, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_temp_get command. + * + * @sa @ref temp_get_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_result_code Command result code. + * @param[out] pp_temp Pointer to result of temperature measurement. + * + * @retval NRF_SUCCESS Version information stored successfully. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t temp_get_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + uint32_t * const p_result_code, + int32_t * * const pp_temp); + +/**@brief Encodes @ref sd_ecb_block_encrypt command request. + * + * @sa @ref ecb_block_encrypt_rsp_dec for command response decoder. + * + * @param[in] p_ecb_data Pointer to ECB data. + * @param[in] p_buf Pointer to buffer where encoded data command will be returned. + * @param[in,out] p_buf_len \c in: size of p_buf buffer. \c out: Length of encoded command packet. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_NULL Encoding failure. NULL pointer supplied. + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ +uint32_t ecb_block_encrypt_req_enc(nrf_ecb_hal_data_t * p_ecb_data, + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/**@brief Decodes response to @ref sd_ecb_block_encrypt command. + * + * @sa @ref ecb_block_encrypt_req_enc for command request encoder. + * + * @param[in] p_buf Pointer to beginning of command response packet. + * @param[in] packet_len Length (in bytes) of response packet. + * @param[out] p_ecb_data Pointer to ECB data. + * @param[out] p_result_code Command result code. + * + * @retval NRF_SUCCESS Version information stored successfully. + * @retval NRF_ERROR_INVALID_LENGTH Decoding failure. Incorrect buffer length. + * @retval NRF_ERROR_DATA_SIZE Decoding failure. Length of \p p_event is too small to + * hold decoded event. + */ +uint32_t ecb_block_encrypt_rsp_dec(uint8_t const * const p_buf, + uint32_t packet_len, + nrf_ecb_hal_data_t * * const p_ecb_data, + uint32_t * const p_result_code); +/** @} */ + + +#ifdef __cplusplus +} +#endif + +#endif // NRF_SOC_APP_H__ diff --git a/src/sd_api_v6/sdk/components/serialization/application/codecs/common/conn_systemreset_app.c b/src/sd_api_v6/sdk/components/serialization/application/codecs/common/conn_systemreset_app.c new file mode 100644 index 000000000..659cbb95b --- /dev/null +++ b/src/sd_api_v6/sdk/components/serialization/application/codecs/common/conn_systemreset_app.c @@ -0,0 +1,48 @@ +/** + * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +#include "ble_serialization.h" +#include "conn_systemreset_app.h" + +uint32_t conn_systemreset_enc(uint8_t * const p_buf, + uint32_t * const p_buf_len) +{ + SER_REQ_ENC_BEGIN(CONN_SYSTEMRESET); + SER_REQ_ENC_END; +} diff --git a/src/sd_api_v6/sdk/components/serialization/application/codecs/common/conn_systemreset_app.h b/src/sd_api_v6/sdk/components/serialization/application/codecs/common/conn_systemreset_app.h new file mode 100644 index 000000000..0c8b9998c --- /dev/null +++ b/src/sd_api_v6/sdk/components/serialization/application/codecs/common/conn_systemreset_app.h @@ -0,0 +1,91 @@ +/** + * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +#ifndef CONN_SYSTEMRESET_H__ +#define CONN_SYSTEMRESET_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/** @addtogroup CONN_ENUMERATIONS Enumerations + * @{ */ + +/** + * @brief Connectivity API SVC numbers. + */ +enum CONN_SVCS +{ + CONN_SYSTEMRESET = 0x00, +}; + +/** + * @addtogroup ser_codecs Serialization codecs + * @ingroup ble_sdk_lib_serialization + */ + +/** + * @addtogroup ser_app_common_codecs Application common codecs + * @ingroup ser_codecs_app + */ + +/**@file + * + * @defgroup conn_systemreset Connectivity chip reset command request encoder + * @{ + * @ingroup ser_app_common_codecs + * + * @brief Connectivity chip reset command request encoder. + */ + +/**@brief Function for performing the connectivity chip reset. + * + * @retval NRF_SUCCESS Encoding success. + * @retval NRF_ERROR_INTERNAL Encoding failure. Transport error. + */ +uint32_t conn_systemreset_enc(uint8_t * const p_buf, + uint32_t * const p_buf_len); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif // CONN_SYSTEMRESET_H__ diff --git a/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble.h b/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble.h new file mode 100644 index 000000000..265e068c7 --- /dev/null +++ b/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble.h @@ -0,0 +1,667 @@ +/* + * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + @addtogroup BLE_COMMON BLE SoftDevice Common + @{ + @defgroup ble_api Events, type definitions and API calls + @{ + + @brief Module independent events, type definitions and API calls for the BLE SoftDevice. + + */ + +#ifndef BLE_H__ +#define BLE_H__ + +#include +#include "nrf_svc.h" +#include "nrf_error.h" +#include "ble_err.h" +#include "ble_gap.h" +#include "ble_l2cap.h" +#include "ble_gatt.h" +#include "ble_gattc.h" +#include "ble_gatts.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @addtogroup BLE_COMMON_ENUMERATIONS Enumerations + * @{ */ + +/** + * @brief Common API SVC numbers. + */ +enum BLE_COMMON_SVCS +{ + SD_BLE_ENABLE = BLE_SVC_BASE, /**< Enable and initialize the BLE stack */ + SD_BLE_EVT_GET, /**< Get an event from the pending events queue. */ + SD_BLE_UUID_VS_ADD, /**< Add a Vendor Specific base UUID. */ + SD_BLE_UUID_DECODE, /**< Decode UUID bytes. */ + SD_BLE_UUID_ENCODE, /**< Encode UUID bytes. */ + SD_BLE_VERSION_GET, /**< Get the local version information (company ID, Link Layer Version, Link Layer Subversion). */ + SD_BLE_USER_MEM_REPLY, /**< User Memory Reply. */ + SD_BLE_OPT_SET, /**< Set a BLE option. */ + SD_BLE_OPT_GET, /**< Get a BLE option. */ + SD_BLE_CFG_SET, /**< Add a configuration to the BLE stack. */ + SD_BLE_UUID_VS_REMOVE, /**< Remove a Vendor Specific base UUID. */ +}; + +/** + * @brief BLE Module Independent Event IDs. + */ +enum BLE_COMMON_EVTS +{ + BLE_EVT_USER_MEM_REQUEST = BLE_EVT_BASE + 0, /**< User Memory request. @ref ble_evt_user_mem_request_t */ + BLE_EVT_USER_MEM_RELEASE = BLE_EVT_BASE + 1, /**< User Memory release. @ref ble_evt_user_mem_release_t */ +}; + +/**@brief BLE Connection Configuration IDs. + * + * IDs that uniquely identify a connection configuration. + */ +enum BLE_CONN_CFGS +{ + BLE_CONN_CFG_GAP = BLE_CONN_CFG_BASE + 0, /**< BLE GAP specific connection configuration. */ + BLE_CONN_CFG_GATTC = BLE_CONN_CFG_BASE + 1, /**< BLE GATTC specific connection configuration. */ + BLE_CONN_CFG_GATTS = BLE_CONN_CFG_BASE + 2, /**< BLE GATTS specific connection configuration. */ + BLE_CONN_CFG_GATT = BLE_CONN_CFG_BASE + 3, /**< BLE GATT specific connection configuration. */ + BLE_CONN_CFG_L2CAP = BLE_CONN_CFG_BASE + 4, /**< BLE L2CAP specific connection configuration. */ +}; + +/**@brief BLE Common Configuration IDs. + * + * IDs that uniquely identify a common configuration. + */ +enum BLE_COMMON_CFGS +{ + BLE_COMMON_CFG_VS_UUID = BLE_CFG_BASE, /**< Vendor specific base UUID configuration */ +}; + +/**@brief Common Option IDs. + * IDs that uniquely identify a common option. + */ +enum BLE_COMMON_OPTS +{ + BLE_COMMON_OPT_PA_LNA = BLE_OPT_BASE + 0, /**< PA and LNA options */ + BLE_COMMON_OPT_CONN_EVT_EXT = BLE_OPT_BASE + 1, /**< Extended connection events option */ + BLE_COMMON_OPT_EXTENDED_RC_CAL = BLE_OPT_BASE + 2, /**< Extended RC calibration option */ +}; + +/** @} */ + +/** @addtogroup BLE_COMMON_DEFINES Defines + * @{ */ + +/** @brief Required pointer alignment for BLE Events. +*/ +#define BLE_EVT_PTR_ALIGNMENT 4 + +/** @brief Leaves the maximum of the two arguments. +*/ +#define BLE_MAX(a, b) ((a) < (b) ? (b) : (a)) + +/** @brief Maximum possible length for BLE Events. + * @note The highest value used for @ref ble_gatt_conn_cfg_t::att_mtu in any connection configuration shall be used as a parameter. + * If that value has not been configured for any connections then @ref BLE_GATT_ATT_MTU_DEFAULT must be used instead. +*/ +#define BLE_EVT_LEN_MAX(ATT_MTU) ( \ + offsetof(ble_evt_t, evt.gattc_evt.params.prim_srvc_disc_rsp.services) + ((ATT_MTU) - 1) / 4 * sizeof(ble_gattc_service_t) \ +) + +/** @defgroup BLE_USER_MEM_TYPES User Memory Types + * @{ */ +#define BLE_USER_MEM_TYPE_INVALID 0x00 /**< Invalid User Memory Types. */ +#define BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES 0x01 /**< User Memory for GATTS queued writes. */ +/** @} */ + +/** @defgroup BLE_UUID_VS_COUNTS Vendor Specific base UUID counts + * @{ + */ +#define BLE_UUID_VS_COUNT_DEFAULT 10 /**< Default VS UUID count. */ +#define BLE_UUID_VS_COUNT_MAX 254 /**< Maximum VS UUID count. */ +/** @} */ + +/** @defgroup BLE_COMMON_CFG_DEFAULTS Configuration defaults. + * @{ + */ +#define BLE_CONN_CFG_TAG_DEFAULT 0 /**< Default configuration tag, SoftDevice default connection configuration. */ + +/** @} */ + +/** @} */ + +/** @addtogroup BLE_COMMON_STRUCTURES Structures + * @{ */ + +/**@brief User Memory Block. */ +typedef struct +{ + uint8_t *p_mem; /**< Pointer to the start of the user memory block. */ + uint16_t len; /**< Length in bytes of the user memory block. */ +} ble_user_mem_block_t; + +/**@brief Event structure for @ref BLE_EVT_USER_MEM_REQUEST. */ +typedef struct +{ + uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ +} ble_evt_user_mem_request_t; + +/**@brief Event structure for @ref BLE_EVT_USER_MEM_RELEASE. */ +typedef struct +{ + uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ + ble_user_mem_block_t mem_block; /**< User memory block */ +} ble_evt_user_mem_release_t; + +/**@brief Event structure for events not associated with a specific function module. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which this event occurred. */ + union + { + ble_evt_user_mem_request_t user_mem_request; /**< User Memory Request Event Parameters. */ + ble_evt_user_mem_release_t user_mem_release; /**< User Memory Release Event Parameters. */ + } params; /**< Event parameter union. */ +} ble_common_evt_t; + +/**@brief BLE Event header. */ +typedef struct +{ + uint16_t evt_id; /**< Value from a BLE__EVT series. */ + uint16_t evt_len; /**< Length in octets including this header. */ +} ble_evt_hdr_t; + +/**@brief Common BLE Event type, wrapping the module specific event reports. */ +typedef struct +{ + ble_evt_hdr_t header; /**< Event header. */ + union + { + ble_common_evt_t common_evt; /**< Common Event, evt_id in BLE_EVT_* series. */ + ble_gap_evt_t gap_evt; /**< GAP originated event, evt_id in BLE_GAP_EVT_* series. */ + ble_gattc_evt_t gattc_evt; /**< GATT client originated event, evt_id in BLE_GATTC_EVT* series. */ + ble_gatts_evt_t gatts_evt; /**< GATT server originated event, evt_id in BLE_GATTS_EVT* series. */ + ble_l2cap_evt_t l2cap_evt; /**< L2CAP originated event, evt_id in BLE_L2CAP_EVT* series. */ + } evt; /**< Event union. */ +} ble_evt_t; + + +/** + * @brief Version Information. + */ +typedef struct +{ + uint8_t version_number; /**< Link Layer Version number. See https://www.bluetooth.org/en-us/specification/assigned-numbers/link-layer for assigned values. */ + uint16_t company_id; /**< Company ID, Nordic Semiconductor's company ID is 89 (0x0059) (https://www.bluetooth.org/apps/content/Default.aspx?doc_id=49708). */ + uint16_t subversion_number; /**< Link Layer Sub Version number, corresponds to the SoftDevice Config ID or Firmware ID (FWID). */ +} ble_version_t; + +/** + * @brief Configuration parameters for the PA and LNA. + */ +typedef struct +{ + uint8_t enable :1; /**< Enable toggling for this amplifier */ + uint8_t active_high :1; /**< Set the pin to be active high */ + uint8_t gpio_pin :6; /**< The GPIO pin to toggle for this amplifier */ +} ble_pa_lna_cfg_t; + +/** + * @brief PA & LNA GPIO toggle configuration + * + * This option configures the SoftDevice to toggle pins when the radio is active for use with a power amplifier and/or + * a low noise amplifier. + * + * Toggling the pins is achieved by using two PPI channels and a GPIOTE channel. The hardware channel IDs are provided + * by the application and should be regarded as reserved as long as any PA/LNA toggling is enabled. + * + * @note @ref sd_ble_opt_get is not supported for this option. + * @note Setting this option while the radio is in use (i.e. any of the roles are active) may have undefined consequences + * and must be avoided by the application. + */ +typedef struct +{ + ble_pa_lna_cfg_t pa_cfg; /**< Power Amplifier configuration */ + ble_pa_lna_cfg_t lna_cfg; /**< Low Noise Amplifier configuration */ + + uint8_t ppi_ch_id_set; /**< PPI channel used for radio pin setting */ + uint8_t ppi_ch_id_clr; /**< PPI channel used for radio pin clearing */ + uint8_t gpiote_ch_id; /**< GPIOTE channel used for radio pin toggling */ +} ble_common_opt_pa_lna_t; + +/** + * @brief Configuration of extended BLE connection events. + * + * When enabled the SoftDevice will dynamically extend the connection event when possible. + * + * The connection event length is controlled by the connection configuration as set by @ref ble_gap_conn_cfg_t::event_length. + * The connection event can be extended if there is time to send another packet pair before the start of the next connection interval, + * and if there are no conflicts with other BLE roles requesting radio time. + * + * @note @ref sd_ble_opt_get is not supported for this option. + */ +typedef struct +{ + uint8_t enable : 1; /**< Enable extended BLE connection events, disabled by default. */ +} ble_common_opt_conn_evt_ext_t; + +/** + * @brief Enable/disable extended RC calibration. + * + * If extended RC calibration is enabled and the internal RC oscillator (@ref NRF_CLOCK_LF_SRC_RC) is used as the SoftDevice + * LFCLK source, the SoftDevice as a peripheral will by default try to increase the receive window if two consecutive packets + * are not received. If it turns out that the packets were not received due to clock drift, the RC calibration is started. + * This calibration comes in addition to the periodic calibration that is configured by @ref sd_softdevice_enable(). When + * using only peripheral connections, the periodic calibration can therefore be configured with a much longer interval as the + * peripheral will be able to detect and adjust automatically to clock drift, and calibrate on demand. + * + * If extended RC calibration is disabled and the internal RC oscillator is used as the SoftDevice LFCLK source, the + * RC oscillator is calibrated periodically as configured by @ref sd_softdevice_enable(). + * + * @note @ref sd_ble_opt_get is not supported for this option. + */ +typedef struct +{ + uint8_t enable : 1; /**< Enable extended RC calibration, enabled by default. */ +} ble_common_opt_extended_rc_cal_t; + +/**@brief Option structure for common options. */ +typedef union +{ + ble_common_opt_pa_lna_t pa_lna; /**< Parameters for controlling PA and LNA pin toggling. */ + ble_common_opt_conn_evt_ext_t conn_evt_ext; /**< Parameters for enabling extended connection events. */ + ble_common_opt_extended_rc_cal_t extended_rc_cal; /**< Parameters for enabling extended RC calibration. */ +} ble_common_opt_t; + +/**@brief Common BLE Option type, wrapping the module specific options. */ +typedef union +{ + ble_common_opt_t common_opt; /**< COMMON options, opt_id in @ref BLE_COMMON_OPTS series. */ + ble_gap_opt_t gap_opt; /**< GAP option, opt_id in @ref BLE_GAP_OPTS series. */ +} ble_opt_t; + +/**@brief BLE connection configuration type, wrapping the module specific configurations, set with + * @ref sd_ble_cfg_set. + * + * @note Connection configurations don't have to be set. + * In the case that no configurations has been set, or fewer connection configurations has been set than enabled connections, + * the default connection configuration will be automatically added for the remaining connections. + * When creating connections with the default configuration, @ref BLE_CONN_CFG_TAG_DEFAULT should be used in + * place of @ref ble_conn_cfg_t::conn_cfg_tag. + * + * @sa sd_ble_gap_adv_start() + * @sa sd_ble_gap_connect() + * + * @mscs + * @mmsc{@ref BLE_CONN_CFG} + * @endmscs + + */ +typedef struct +{ + uint8_t conn_cfg_tag; /**< The application chosen tag it can use with the + @ref sd_ble_gap_adv_start() and @ref sd_ble_gap_connect() calls + to select this configuration when creating a connection. + Must be different for all connection configurations added and not @ref BLE_CONN_CFG_TAG_DEFAULT. */ + union { + ble_gap_conn_cfg_t gap_conn_cfg; /**< GAP connection configuration, cfg_id is @ref BLE_CONN_CFG_GAP. */ + ble_gattc_conn_cfg_t gattc_conn_cfg; /**< GATTC connection configuration, cfg_id is @ref BLE_CONN_CFG_GATTC. */ + ble_gatts_conn_cfg_t gatts_conn_cfg; /**< GATTS connection configuration, cfg_id is @ref BLE_CONN_CFG_GATTS. */ + ble_gatt_conn_cfg_t gatt_conn_cfg; /**< GATT connection configuration, cfg_id is @ref BLE_CONN_CFG_GATT. */ + ble_l2cap_conn_cfg_t l2cap_conn_cfg; /**< L2CAP connection configuration, cfg_id is @ref BLE_CONN_CFG_L2CAP. */ + } params; /**< Connection configuration union. */ +} ble_conn_cfg_t; + +/** + * @brief Configuration of Vendor Specific base UUIDs, set with @ref sd_ble_cfg_set. + * + * @retval ::NRF_ERROR_INVALID_PARAM Too many UUIDs configured. + */ +typedef struct +{ + uint8_t vs_uuid_count; /**< Number of 128-bit Vendor Specific base UUID bases to allocate memory for. + Default value is @ref BLE_UUID_VS_COUNT_DEFAULT. Maximum value is + @ref BLE_UUID_VS_COUNT_MAX. */ +} ble_common_cfg_vs_uuid_t; + +/**@brief Common BLE Configuration type, wrapping the common configurations. */ +typedef union +{ + ble_common_cfg_vs_uuid_t vs_uuid_cfg; /**< Vendor Specific base UUID configuration, cfg_id is @ref BLE_COMMON_CFG_VS_UUID. */ +} ble_common_cfg_t; + +/**@brief BLE Configuration type, wrapping the module specific configurations. */ +typedef union +{ + ble_conn_cfg_t conn_cfg; /**< Connection specific configurations, cfg_id in @ref BLE_CONN_CFGS series. */ + ble_common_cfg_t common_cfg; /**< Global common configurations, cfg_id in @ref BLE_COMMON_CFGS series. */ + ble_gap_cfg_t gap_cfg; /**< Global GAP configurations, cfg_id in @ref BLE_GAP_CFGS series. */ + ble_gatts_cfg_t gatts_cfg; /**< Global GATTS configuration, cfg_id in @ref BLE_GATTS_CFGS series. */ +} ble_cfg_t; + +/** @} */ + +/** @addtogroup BLE_COMMON_FUNCTIONS Functions + * @{ */ + +/**@brief Enable the BLE stack + * + * @param[in, out] p_app_ram_base Pointer to a variable containing the start address of the + * application RAM region (APP_RAM_BASE). On return, this will + * contain the minimum start address of the application RAM region + * required by the SoftDevice for this configuration. + * + * @note The memory requirement for a specific configuration will not increase between SoftDevices + * with the same major version number. + * + * @note At runtime the IC's RAM is split into 2 regions: The SoftDevice RAM region is located + * between 0x20000000 and APP_RAM_BASE-1 and the application's RAM region is located between + * APP_RAM_BASE and the start of the call stack. + * + * @details This call initializes the BLE stack, no BLE related function other than @ref + * sd_ble_cfg_set can be called before this one. + * + * @mscs + * @mmsc{@ref BLE_COMMON_ENABLE} + * @endmscs + * + * @retval ::NRF_SUCCESS The BLE stack has been initialized successfully. + * @retval ::NRF_ERROR_INVALID_STATE The BLE stack had already been initialized and cannot be reinitialized. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. + * @retval ::NRF_ERROR_NO_MEM One or more of the following is true: + * - The amount of memory assigned to the SoftDevice by *p_app_ram_base is not + * large enough to fit this configuration's memory requirement. Check *p_app_ram_base + * and set the start address of the application RAM region accordingly. + * - Dynamic part of the SoftDevice RAM region is larger then 64 kB which + * is currently not supported. + * @retval ::NRF_ERROR_RESOURCES The total number of L2CAP Channels configured using @ref sd_ble_cfg_set is too large. + */ +SVCALL(SD_BLE_ENABLE, uint32_t, sd_ble_enable(adapter_t *adapter, uint32_t * p_app_ram_base)); + +/**@brief Add configurations for the BLE stack + * + * @param[in] cfg_id Config ID, see @ref BLE_CONN_CFGS, @ref BLE_COMMON_CFGS, @ref + * BLE_GAP_CFGS or @ref BLE_GATTS_CFGS. + * @param[in] p_cfg Pointer to a ble_cfg_t structure containing the configuration value. + * @param[in] app_ram_base The start address of the application RAM region (APP_RAM_BASE). + * See @ref sd_ble_enable for details about APP_RAM_BASE. + * + * @note The memory requirement for a specific configuration will not increase between SoftDevices + * with the same major version number. + * + * @note If a configuration is set more than once, the last one set is the one that takes effect on + * @ref sd_ble_enable. + * + * @note Any part of the BLE stack that is NOT configured with @ref sd_ble_cfg_set will have default + * configuration. + * + * @note @ref sd_ble_cfg_set may be called at any time when the SoftDevice is enabled (see @ref + * sd_softdevice_enable) while the BLE part of the SoftDevice is not enabled (see @ref + * sd_ble_enable). + * + * @note Error codes for the configurations are described in the configuration structs. + * + * @mscs + * @mmsc{@ref BLE_COMMON_ENABLE} + * @endmscs + * + * @retval ::NRF_SUCCESS The configuration has been added successfully. + * @retval ::NRF_ERROR_INVALID_STATE The BLE stack had already been initialized. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid cfg_id supplied. + * @retval ::NRF_ERROR_NO_MEM The amount of memory assigned to the SoftDevice by app_ram_base is not + * large enough to fit this configuration's memory requirement. + */ +SVCALL(SD_BLE_CFG_SET, uint32_t, sd_ble_cfg_set(adapter_t *adapter, uint32_t cfg_id, ble_cfg_t const * p_cfg, uint32_t app_ram_base)); + +/**@brief Get an event from the pending events queue. + * + * @param[out] p_dest Pointer to buffer to be filled in with an event, or NULL to retrieve the event length. + * This buffer must be aligned to the extend defined by @ref BLE_EVT_PTR_ALIGNMENT. + * The buffer should be interpreted as a @ref ble_evt_t struct. + * @param[in, out] p_len Pointer the length of the buffer, on return it is filled with the event length. + * + * @details This call allows the application to pull a BLE event from the BLE stack. The application is signaled that + * an event is available from the BLE stack by the triggering of the SD_EVT_IRQn interrupt. + * The application is free to choose whether to call this function from thread mode (main context) or directly from the + * Interrupt Service Routine that maps to SD_EVT_IRQn. In any case however, and because the BLE stack runs at a higher + * priority than the application, this function should be called in a loop (until @ref NRF_ERROR_NOT_FOUND is returned) + * every time SD_EVT_IRQn is raised to ensure that all available events are pulled from the BLE stack. Failure to do so + * could potentially leave events in the internal queue without the application being aware of this fact. + * + * Sizing the p_dest buffer is equally important, since the application needs to provide all the memory necessary for the event to + * be copied into application memory. If the buffer provided is not large enough to fit the entire contents of the event, + * @ref NRF_ERROR_DATA_SIZE will be returned and the application can then call again with a larger buffer size. + * The maximum possible event length is defined by @ref BLE_EVT_LEN_MAX. The application may also "peek" the event length + * by providing p_dest as a NULL pointer and inspecting the value of *p_len upon return: + * + * \code + * uint16_t len; + * errcode = sd_ble_evt_get(NULL, &len); + * \endcode + * + * @mscs + * @mmsc{@ref BLE_COMMON_IRQ_EVT_MSC} + * @mmsc{@ref BLE_COMMON_THREAD_EVT_MSC} + * @endmscs + * + * @retval ::NRF_SUCCESS Event pulled and stored into the supplied buffer. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. + * @retval ::NRF_ERROR_NOT_FOUND No events ready to be pulled. + * @retval ::NRF_ERROR_DATA_SIZE Event ready but could not fit into the supplied buffer. + */ +SVCALL(SD_BLE_EVT_GET, uint32_t, sd_ble_evt_get(adapter_t *adapter, uint8_t *p_dest, uint16_t *p_len)); + + +/**@brief Add a Vendor Specific base UUID. + * + * @details This call enables the application to add a Vendor Specific base UUID to the BLE stack's table, for later + * use with all other modules and APIs. This then allows the application to use the shorter, 24-bit @ref ble_uuid_t + * format when dealing with both 16-bit and 128-bit UUIDs without having to check for lengths and having split code + * paths. This is accomplished by extending the grouping mechanism that the Bluetooth SIG standard base UUID uses + * for all other 128-bit UUIDs. The type field in the @ref ble_uuid_t structure is an index (relative to + * @ref BLE_UUID_TYPE_VENDOR_BEGIN) to the table populated by multiple calls to this function, and the UUID field + * in the same structure contains the 2 bytes at indexes 12 and 13. The number of possible 128-bit UUIDs available to + * the application is therefore the number of Vendor Specific UUIDs added with the help of this function times 65536, + * although restricted to modifying bytes 12 and 13 for each of the entries in the supplied array. + * + * @note Bytes 12 and 13 of the provided UUID will not be used internally, since those are always replaced by + * the 16-bit uuid field in @ref ble_uuid_t. + * + * @note If a UUID is already present in the BLE stack's internal table, the corresponding index will be returned in + * p_uuid_type along with an @ref NRF_SUCCESS error code. + * + * @param[in] p_vs_uuid Pointer to a 16-octet (128-bit) little endian Vendor Specific base UUID disregarding + * bytes 12 and 13. + * @param[out] p_uuid_type Pointer to a uint8_t where the type field in @ref ble_uuid_t corresponding to this UUID will be stored. + * + * @retval ::NRF_SUCCESS Successfully added the Vendor Specific base UUID. + * @retval ::NRF_ERROR_INVALID_ADDR If p_vs_uuid or p_uuid_type is NULL or invalid. + * @retval ::NRF_ERROR_NO_MEM If there are no more free slots for VS UUIDs. + */ +SVCALL(SD_BLE_UUID_VS_ADD, uint32_t, sd_ble_uuid_vs_add(adapter_t *adapter, ble_uuid128_t const *p_vs_uuid, uint8_t *p_uuid_type)); + + +/**@brief Remove a Vendor Specific base UUID. + * + * @details This call removes a Vendor Specific base UUID that has been added with @ref sd_ble_uuid_vs_add. This function allows + * the application to reuse memory allocated for Vendor Specific base UUIDs. + * + * @note Currently this function can only be called with a p_uuid_type set to @ref BLE_UUID_TYPE_UNKNOWN or the last added UUID type. + * + * @param[in] p_uuid_type Pointer to a uint8_t where the type field in @ref ble_uuid_t::type corresponds to the UUID type that + * shall be removed. If the type is set to @ref BLE_UUID_TYPE_UNKNOWN, or the pointer is NULL, the last + * Vendor Specific base UUID will be removed. + * @param[out] p_uuid_type Pointer to a uint8_t where the type field in @ref ble_uuid_t corresponds to the UUID type that was + * removed. If function returns with a failure, it contains the last type that is in use by the ATT Server. + * + * @retval ::NRF_SUCCESS Successfully removed the Vendor Specific base UUID. + * @retval ::NRF_ERROR_INVALID_ADDR If p_uuid_type is invalid. + * @retval ::NRF_ERROR_INVALID_PARAM If p_uuid_type points to a non-valid UUID type. + * @retval ::NRF_ERROR_FORBIDDEN If the Vendor Specific base UUID is in use by the ATT Server. + */ + +SVCALL(SD_BLE_UUID_VS_REMOVE, uint32_t, sd_ble_uuid_vs_remove(adapter_t *adapter, uint8_t *p_uuid_type)); + + +/** @brief Decode little endian raw UUID bytes (16-bit or 128-bit) into a 24 bit @ref ble_uuid_t structure. + * + * @details The raw UUID bytes excluding bytes 12 and 13 (i.e. bytes 0-11 and 14-15) of p_uuid_le are compared + * to the corresponding ones in each entry of the table of Vendor Specific base UUIDs populated with @ref sd_ble_uuid_vs_add + * to look for a match. If there is such a match, bytes 12 and 13 are returned as p_uuid->uuid and the index + * relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN as p_uuid->type. + * + * @note If the UUID length supplied is 2, then the type set by this call will always be @ref BLE_UUID_TYPE_BLE. + * + * @param[in] uuid_le_len Length in bytes of the buffer pointed to by p_uuid_le (must be 2 or 16 bytes). + * @param[in] p_uuid_le Pointer pointing to little endian raw UUID bytes. + * @param[out] p_uuid Pointer to a @ref ble_uuid_t structure to be filled in. + * + * @retval ::NRF_SUCCESS Successfully decoded into the @ref ble_uuid_t structure. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_LENGTH Invalid UUID length. + * @retval ::NRF_ERROR_NOT_FOUND For a 128-bit UUID, no match in the populated table of UUIDs. + */ +SVCALL(SD_BLE_UUID_DECODE, uint32_t, sd_ble_uuid_decode(adapter_t *adapter, uint8_t uuid_le_len, uint8_t const *p_uuid_le, ble_uuid_t *p_uuid)); + + +/** @brief Encode a @ref ble_uuid_t structure into little endian raw UUID bytes (16-bit or 128-bit). + * + * @note The pointer to the destination buffer p_uuid_le may be NULL, in which case only the validity and size of p_uuid is computed. + * + * @param[in] p_uuid Pointer to a @ref ble_uuid_t structure that will be encoded into bytes. + * @param[out] p_uuid_le_len Pointer to a uint8_t that will be filled with the encoded length (2 or 16 bytes). + * @param[out] p_uuid_le Pointer to a buffer where the little endian raw UUID bytes (2 or 16) will be stored. + * + * @retval ::NRF_SUCCESS Successfully encoded into the buffer. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid UUID type. + */ +SVCALL(SD_BLE_UUID_ENCODE, uint32_t, sd_ble_uuid_encode(adapter_t *adapter, ble_uuid_t const *p_uuid, uint8_t *p_uuid_le_len, uint8_t *p_uuid_le)); + + +/**@brief Get Version Information. + * + * @details This call allows the application to get the BLE stack version information. + * + * @param[out] p_version Pointer to a ble_version_t structure to be filled in. + * + * @retval ::NRF_SUCCESS Version information stored successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_BUSY The BLE stack is busy (typically doing a locally-initiated disconnection procedure). + */ +SVCALL(SD_BLE_VERSION_GET, uint32_t, sd_ble_version_get(adapter_t *adapter, ble_version_t *p_version)); + + +/**@brief Provide a user memory block. + * + * @note This call can only be used as a response to a @ref BLE_EVT_USER_MEM_REQUEST event issued to the application. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_block Pointer to a user memory block structure or NULL if memory is managed by the application. + * + * @mscs + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_PEER_CANCEL_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_NOAUTH_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} + * @endmscs + * + * @retval ::NRF_SUCCESS Successfully queued a response to the peer. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_LENGTH Invalid user memory block length supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection state or no user memory request pending. + */ +SVCALL(SD_BLE_USER_MEM_REPLY, uint32_t, sd_ble_user_mem_reply(adapter_t *adapter, uint16_t conn_handle, ble_user_mem_block_t const *p_block)); + +/**@brief Set a BLE option. + * + * @details This call allows the application to set the value of an option. + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_BONDING_STATIC_PK_MSC} + * @endmscs + * + * @param[in] opt_id Option ID, see @ref BLE_COMMON_OPTS and @ref BLE_GAP_OPTS. + * @param[in] p_opt Pointer to a ble_opt_t structure containing the option value. + * + * @retval ::NRF_SUCCESS Option set successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. + * @retval ::NRF_ERROR_INVALID_STATE Unable to set the parameter at this time. + * @retval ::NRF_ERROR_BUSY The BLE stack is busy or the previous procedure has not completed. + */ +SVCALL(SD_BLE_OPT_SET, uint32_t, sd_ble_opt_set(adapter_t *adapter, uint32_t opt_id, ble_opt_t const *p_opt)); + + +/**@brief Get a BLE option. + * + * @details This call allows the application to retrieve the value of an option. + * + * @param[in] opt_id Option ID, see @ref BLE_COMMON_OPTS and @ref BLE_GAP_OPTS. + * @param[out] p_opt Pointer to a ble_opt_t structure to be filled in. + * + * @retval ::NRF_SUCCESS Option retrieved successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. + * @retval ::NRF_ERROR_INVALID_STATE Unable to retrieve the parameter at this time. + * @retval ::NRF_ERROR_BUSY The BLE stack is busy or the previous procedure has not completed. + * @retval ::NRF_ERROR_NOT_SUPPORTED This option is not supported. + * + */ +SVCALL(SD_BLE_OPT_GET, uint32_t, sd_ble_opt_get(adapter_t *adapter, uint32_t opt_id, ble_opt_t *p_opt)); + +/** @} */ +#ifdef __cplusplus +} +#endif +#endif /* BLE_H__ */ + +/** + @} + @} +*/ diff --git a/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_err.h b/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_err.h new file mode 100644 index 000000000..1b4820dc3 --- /dev/null +++ b/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_err.h @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + @addtogroup BLE_COMMON + @{ + @addtogroup nrf_error + @{ + @ingroup BLE_COMMON + @} + + @defgroup ble_err General error codes + @{ + + @brief General error code definitions for the BLE API. + + @ingroup BLE_COMMON +*/ +#ifndef NRF_BLE_ERR_H__ +#define NRF_BLE_ERR_H__ + +#include "nrf_error.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* @defgroup BLE_ERRORS Error Codes + * @{ */ +#define BLE_ERROR_NOT_ENABLED (NRF_ERROR_STK_BASE_NUM+0x001) /**< @ref sd_ble_enable has not been called. */ +#define BLE_ERROR_INVALID_CONN_HANDLE (NRF_ERROR_STK_BASE_NUM+0x002) /**< Invalid connection handle. */ +#define BLE_ERROR_INVALID_ATTR_HANDLE (NRF_ERROR_STK_BASE_NUM+0x003) /**< Invalid attribute handle. */ +#define BLE_ERROR_INVALID_ADV_HANDLE (NRF_ERROR_STK_BASE_NUM+0x004) /**< Invalid advertising handle. */ +#define BLE_ERROR_INVALID_ROLE (NRF_ERROR_STK_BASE_NUM+0x005) /**< Invalid role. */ +#define BLE_ERROR_BLOCKED_BY_OTHER_LINKS (NRF_ERROR_STK_BASE_NUM+0x006) /**< The attempt to change link settings failed due to the scheduling of other links. */ +/** @} */ + + +/** @defgroup BLE_ERROR_SUBRANGES Module specific error code subranges + * @brief Assignment of subranges for module specific error codes. + * @note For specific error codes, see ble_.h or ble_error_.h. + * @{ */ +#define NRF_L2CAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x100) /**< L2CAP specific errors. */ +#define NRF_GAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x200) /**< GAP specific errors. */ +#define NRF_GATTC_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x300) /**< GATT client specific errors. */ +#define NRF_GATTS_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x400) /**< GATT server specific errors. */ +/** @} */ + +#ifdef __cplusplus +} +#endif +#endif + + +/** + @} + @} +*/ diff --git a/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_gap.h b/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_gap.h new file mode 100644 index 000000000..e5a375ba2 --- /dev/null +++ b/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_gap.h @@ -0,0 +1,2691 @@ +/* + * Copyright (c) 2011 - 2018, Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + @addtogroup BLE_GAP Generic Access Profile (GAP) + @{ + @brief Definitions and prototypes for the GAP interface. + */ + +#ifndef BLE_GAP_H__ +#define BLE_GAP_H__ + +#include +#include "nrf_svc.h" +#include "nrf_error.h" +#include "ble_hci.h" +#include "ble_ranges.h" +#include "ble_types.h" +#include "ble_err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/**@addtogroup BLE_GAP_ENUMERATIONS Enumerations + * @{ */ + +/**@brief GAP API SVC numbers. + */ +enum BLE_GAP_SVCS +{ + SD_BLE_GAP_ADDR_SET = BLE_GAP_SVC_BASE, /**< Set own Bluetooth Address. */ + SD_BLE_GAP_ADDR_GET = BLE_GAP_SVC_BASE + 1, /**< Get own Bluetooth Address. */ + SD_BLE_GAP_WHITELIST_SET = BLE_GAP_SVC_BASE + 2, /**< Set active whitelist. */ + SD_BLE_GAP_DEVICE_IDENTITIES_SET = BLE_GAP_SVC_BASE + 3, /**< Set device identity list. */ + SD_BLE_GAP_PRIVACY_SET = BLE_GAP_SVC_BASE + 4, /**< Set Privacy settings*/ + SD_BLE_GAP_PRIVACY_GET = BLE_GAP_SVC_BASE + 5, /**< Get Privacy settings*/ + SD_BLE_GAP_ADV_SET_CONFIGURE = BLE_GAP_SVC_BASE + 6, /**< Configure an advertising set. */ + SD_BLE_GAP_ADV_START = BLE_GAP_SVC_BASE + 7, /**< Start Advertising. */ + SD_BLE_GAP_ADV_STOP = BLE_GAP_SVC_BASE + 8, /**< Stop Advertising. */ + SD_BLE_GAP_CONN_PARAM_UPDATE = BLE_GAP_SVC_BASE + 9, /**< Connection Parameter Update. */ + SD_BLE_GAP_DISCONNECT = BLE_GAP_SVC_BASE + 10, /**< Disconnect. */ + SD_BLE_GAP_TX_POWER_SET = BLE_GAP_SVC_BASE + 11, /**< Set TX Power. */ + SD_BLE_GAP_APPEARANCE_SET = BLE_GAP_SVC_BASE + 12, /**< Set Appearance. */ + SD_BLE_GAP_APPEARANCE_GET = BLE_GAP_SVC_BASE + 13, /**< Get Appearance. */ + SD_BLE_GAP_PPCP_SET = BLE_GAP_SVC_BASE + 14, /**< Set PPCP. */ + SD_BLE_GAP_PPCP_GET = BLE_GAP_SVC_BASE + 15, /**< Get PPCP. */ + SD_BLE_GAP_DEVICE_NAME_SET = BLE_GAP_SVC_BASE + 16, /**< Set Device Name. */ + SD_BLE_GAP_DEVICE_NAME_GET = BLE_GAP_SVC_BASE + 17, /**< Get Device Name. */ + SD_BLE_GAP_AUTHENTICATE = BLE_GAP_SVC_BASE + 18, /**< Initiate Pairing/Bonding. */ + SD_BLE_GAP_SEC_PARAMS_REPLY = BLE_GAP_SVC_BASE + 19, /**< Reply with Security Parameters. */ + SD_BLE_GAP_AUTH_KEY_REPLY = BLE_GAP_SVC_BASE + 20, /**< Reply with an authentication key. */ + SD_BLE_GAP_LESC_DHKEY_REPLY = BLE_GAP_SVC_BASE + 21, /**< Reply with an LE Secure Connections DHKey. */ + SD_BLE_GAP_KEYPRESS_NOTIFY = BLE_GAP_SVC_BASE + 22, /**< Notify of a keypress during an authentication procedure. */ + SD_BLE_GAP_LESC_OOB_DATA_GET = BLE_GAP_SVC_BASE + 23, /**< Get the local LE Secure Connections OOB data. */ + SD_BLE_GAP_LESC_OOB_DATA_SET = BLE_GAP_SVC_BASE + 24, /**< Set the remote LE Secure Connections OOB data. */ + SD_BLE_GAP_ENCRYPT = BLE_GAP_SVC_BASE + 25, /**< Initiate encryption procedure. */ + SD_BLE_GAP_SEC_INFO_REPLY = BLE_GAP_SVC_BASE + 26, /**< Reply with Security Information. */ + SD_BLE_GAP_CONN_SEC_GET = BLE_GAP_SVC_BASE + 27, /**< Obtain connection security level. */ + SD_BLE_GAP_RSSI_START = BLE_GAP_SVC_BASE + 28, /**< Start reporting of changes in RSSI. */ + SD_BLE_GAP_RSSI_STOP = BLE_GAP_SVC_BASE + 29, /**< Stop reporting of changes in RSSI. */ + SD_BLE_GAP_SCAN_START = BLE_GAP_SVC_BASE + 30, /**< Start Scanning. */ + SD_BLE_GAP_SCAN_STOP = BLE_GAP_SVC_BASE + 31, /**< Stop Scanning. */ + SD_BLE_GAP_CONNECT = BLE_GAP_SVC_BASE + 32, /**< Connect. */ + SD_BLE_GAP_CONNECT_CANCEL = BLE_GAP_SVC_BASE + 33, /**< Cancel ongoing connection procedure. */ + SD_BLE_GAP_RSSI_GET = BLE_GAP_SVC_BASE + 34, /**< Get the last RSSI sample. */ + SD_BLE_GAP_PHY_UPDATE = BLE_GAP_SVC_BASE + 35, /**< Initiate or respond to a PHY Update Procedure. */ + SD_BLE_GAP_DATA_LENGTH_UPDATE = BLE_GAP_SVC_BASE + 36, /**< Initiate or respond to a Data Length Update Procedure. */ + SD_BLE_GAP_QOS_CHANNEL_SURVEY_START = BLE_GAP_SVC_BASE + 37, /**< Start Quality of Service (QoS) channel survey module. */ + SD_BLE_GAP_QOS_CHANNEL_SURVEY_STOP = BLE_GAP_SVC_BASE + 38, /**< Stop Quality of Service (QoS) channel survey module. */ + SD_BLE_GAP_ADV_ADDR_GET = BLE_GAP_SVC_BASE + 39, /**< Get the Address used on air while Advertising. */ +}; + +/**@brief GAP Event IDs. + * IDs that uniquely identify an event coming from the stack to the application. + */ +enum BLE_GAP_EVTS +{ + BLE_GAP_EVT_CONNECTED = BLE_GAP_EVT_BASE, /**< Connected to peer. \n See @ref ble_gap_evt_connected_t */ + BLE_GAP_EVT_DISCONNECTED = BLE_GAP_EVT_BASE + 1, /**< Disconnected from peer. \n See @ref ble_gap_evt_disconnected_t. */ + BLE_GAP_EVT_CONN_PARAM_UPDATE = BLE_GAP_EVT_BASE + 2, /**< Connection Parameters updated. \n See @ref ble_gap_evt_conn_param_update_t. */ + BLE_GAP_EVT_SEC_PARAMS_REQUEST = BLE_GAP_EVT_BASE + 3, /**< Request to provide security parameters. \n Reply with @ref sd_ble_gap_sec_params_reply. \n See @ref ble_gap_evt_sec_params_request_t. */ + BLE_GAP_EVT_SEC_INFO_REQUEST = BLE_GAP_EVT_BASE + 4, /**< Request to provide security information. \n Reply with @ref sd_ble_gap_sec_info_reply. \n See @ref ble_gap_evt_sec_info_request_t. */ + BLE_GAP_EVT_PASSKEY_DISPLAY = BLE_GAP_EVT_BASE + 5, /**< Request to display a passkey to the user. \n In LESC Numeric Comparison, reply with @ref sd_ble_gap_auth_key_reply. \n See @ref ble_gap_evt_passkey_display_t. */ + BLE_GAP_EVT_KEY_PRESSED = BLE_GAP_EVT_BASE + 6, /**< Notification of a keypress on the remote device.\n See @ref ble_gap_evt_key_pressed_t */ + BLE_GAP_EVT_AUTH_KEY_REQUEST = BLE_GAP_EVT_BASE + 7, /**< Request to provide an authentication key. \n Reply with @ref sd_ble_gap_auth_key_reply. \n See @ref ble_gap_evt_auth_key_request_t. */ + BLE_GAP_EVT_LESC_DHKEY_REQUEST = BLE_GAP_EVT_BASE + 8, /**< Request to calculate an LE Secure Connections DHKey. \n Reply with @ref sd_ble_gap_lesc_dhkey_reply. \n See @ref ble_gap_evt_lesc_dhkey_request_t */ + BLE_GAP_EVT_AUTH_STATUS = BLE_GAP_EVT_BASE + 9, /**< Authentication procedure completed with status. \n See @ref ble_gap_evt_auth_status_t. */ + BLE_GAP_EVT_CONN_SEC_UPDATE = BLE_GAP_EVT_BASE + 10, /**< Connection security updated. \n See @ref ble_gap_evt_conn_sec_update_t. */ + BLE_GAP_EVT_TIMEOUT = BLE_GAP_EVT_BASE + 11, /**< Timeout expired. \n See @ref ble_gap_evt_timeout_t. */ + BLE_GAP_EVT_RSSI_CHANGED = BLE_GAP_EVT_BASE + 12, /**< RSSI report. \n See @ref ble_gap_evt_rssi_changed_t. */ + BLE_GAP_EVT_ADV_REPORT = BLE_GAP_EVT_BASE + 13, /**< Advertising report. \n See @ref ble_gap_evt_adv_report_t. */ + BLE_GAP_EVT_SEC_REQUEST = BLE_GAP_EVT_BASE + 14, /**< Security Request. \n See @ref ble_gap_evt_sec_request_t. */ + BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST = BLE_GAP_EVT_BASE + 15, /**< Connection Parameter Update Request. \n Reply with @ref sd_ble_gap_conn_param_update. \n See @ref ble_gap_evt_conn_param_update_request_t. */ + BLE_GAP_EVT_SCAN_REQ_REPORT = BLE_GAP_EVT_BASE + 16, /**< Scan request report. \n See @ref ble_gap_evt_scan_req_report_t. */ + BLE_GAP_EVT_PHY_UPDATE_REQUEST = BLE_GAP_EVT_BASE + 17, /**< PHY Update Request. \n Reply with @ref sd_ble_gap_phy_update. \n See @ref ble_gap_evt_phy_update_request_t. */ + BLE_GAP_EVT_PHY_UPDATE = BLE_GAP_EVT_BASE + 18, /**< PHY Update Procedure is complete. \n See @ref ble_gap_evt_phy_update_t. */ + BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST = BLE_GAP_EVT_BASE + 19, /**< Data Length Update Request. \n Reply with @ref sd_ble_gap_data_length_update.\n See @ref ble_gap_evt_data_length_update_request_t. */ + BLE_GAP_EVT_DATA_LENGTH_UPDATE = BLE_GAP_EVT_BASE + 20, /**< LL Data Channel PDU payload length updated. \n See @ref ble_gap_evt_data_length_update_t. */ + BLE_GAP_EVT_QOS_CHANNEL_SURVEY_REPORT = BLE_GAP_EVT_BASE + 21, /**< Channel survey report. \n See @ref ble_gap_evt_qos_channel_survey_report_t. */ + BLE_GAP_EVT_ADV_SET_TERMINATED = BLE_GAP_EVT_BASE + 22, /**< Advertising set terminated. \n See @ref ble_gap_evt_adv_set_terminated_t. */ +}; + +/**@brief GAP Option IDs. + * IDs that uniquely identify a GAP option. + */ +enum BLE_GAP_OPTS +{ + BLE_GAP_OPT_CH_MAP = BLE_GAP_OPT_BASE, /**< Channel Map. @ref ble_gap_opt_ch_map_t */ + BLE_GAP_OPT_LOCAL_CONN_LATENCY = BLE_GAP_OPT_BASE + 1, /**< Local connection latency. @ref ble_gap_opt_local_conn_latency_t */ + BLE_GAP_OPT_PASSKEY = BLE_GAP_OPT_BASE + 2, /**< Set passkey. @ref ble_gap_opt_passkey_t */ + BLE_GAP_OPT_COMPAT_MODE_1 = BLE_GAP_OPT_BASE + 3, /**< Compatibility mode. @ref ble_gap_opt_compat_mode_1_t */ + BLE_GAP_OPT_AUTH_PAYLOAD_TIMEOUT = BLE_GAP_OPT_BASE + 4, /**< Set Authenticated payload timeout. @ref ble_gap_opt_auth_payload_timeout_t */ + BLE_GAP_OPT_SLAVE_LATENCY_DISABLE = BLE_GAP_OPT_BASE + 5, /**< Disable slave latency. @ref ble_gap_opt_slave_latency_disable_t */ +}; + +/**@brief GAP Configuration IDs. + * + * IDs that uniquely identify a GAP configuration. + */ +enum BLE_GAP_CFGS +{ + BLE_GAP_CFG_ROLE_COUNT = BLE_GAP_CFG_BASE, /**< Role count configuration. */ + BLE_GAP_CFG_DEVICE_NAME = BLE_GAP_CFG_BASE + 1, /**< Device name configuration. */ +}; + +/**@brief GAP TX Power roles. + */ +enum BLE_GAP_TX_POWER_ROLES +{ + BLE_GAP_TX_POWER_ROLE_ADV = 1, /**< Advertiser role. */ + BLE_GAP_TX_POWER_ROLE_SCAN_INIT = 2, /**< Scanner and initiator role. */ + BLE_GAP_TX_POWER_ROLE_CONN = 3, /**< Connection role. */ +}; + +/** @} */ + +/**@addtogroup BLE_GAP_DEFINES Defines + * @{ */ + +/**@defgroup BLE_ERRORS_GAP SVC return values specific to GAP + * @{ */ +#define BLE_ERROR_GAP_UUID_LIST_MISMATCH (NRF_GAP_ERR_BASE + 0x000) /**< UUID list does not contain an integral number of UUIDs. */ +#define BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST (NRF_GAP_ERR_BASE + 0x001) /**< Use of Whitelist not permitted with discoverable advertising. */ +#define BLE_ERROR_GAP_INVALID_BLE_ADDR (NRF_GAP_ERR_BASE + 0x002) /**< The upper two bits of the address do not correspond to the specified address type. */ +#define BLE_ERROR_GAP_WHITELIST_IN_USE (NRF_GAP_ERR_BASE + 0x003) /**< Attempt to modify the whitelist while already in use by another operation. */ +#define BLE_ERROR_GAP_DEVICE_IDENTITIES_IN_USE (NRF_GAP_ERR_BASE + 0x004) /**< Attempt to modify the device identity list while already in use by another operation. */ +#define BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE (NRF_GAP_ERR_BASE + 0x005) /**< The device identity list contains entries with duplicate identity addresses. */ +/**@} */ + + +/**@defgroup BLE_GAP_ROLES GAP Roles + * @{ */ +#define BLE_GAP_ROLE_INVALID 0x0 /**< Invalid Role. */ +#define BLE_GAP_ROLE_PERIPH 0x1 /**< Peripheral Role. */ +#define BLE_GAP_ROLE_CENTRAL 0x2 /**< Central Role. */ +/**@} */ + + +/**@defgroup BLE_GAP_TIMEOUT_SOURCES GAP Timeout sources + * @{ */ +#define BLE_GAP_TIMEOUT_SRC_SCAN 0x01 /**< Scanning timeout. */ +#define BLE_GAP_TIMEOUT_SRC_CONN 0x02 /**< Connection timeout. */ +#define BLE_GAP_TIMEOUT_SRC_AUTH_PAYLOAD 0x03 /**< Authenticated payload timeout. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADDR_TYPES GAP Address types + * @{ */ +#define BLE_GAP_ADDR_TYPE_PUBLIC 0x00 /**< Public (identity) address.*/ +#define BLE_GAP_ADDR_TYPE_RANDOM_STATIC 0x01 /**< Random static (identity) address. */ +#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE 0x02 /**< Random private resolvable address. */ +#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE 0x03 /**< Random private non-resolvable address. */ +#define BLE_GAP_ADDR_TYPE_ANONYMOUS 0x7F /**< An advertiser may advertise without its address. + This type of advertising is called anonymous. */ +/**@} */ + + +/**@brief The default interval in seconds at which a private address is refreshed. */ +#define BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S (900) /* 15 minutes. */ +/**@brief The maximum interval in seconds at which a private address can be refreshed. */ +#define BLE_GAP_MAX_PRIVATE_ADDR_CYCLE_INTERVAL_S (41400) /* 11 hours 30 minutes. */ + + +/** @brief BLE address length. */ +#define BLE_GAP_ADDR_LEN (6) + +/**@defgroup BLE_GAP_PRIVACY_MODES Privacy modes + * @{ */ +#define BLE_GAP_PRIVACY_MODE_OFF 0x00 /**< Device will send and accept its identity address for its own address. */ +#define BLE_GAP_PRIVACY_MODE_DEVICE_PRIVACY 0x01 /**< Device will send and accept only private addresses for its own address. */ +#define BLE_GAP_PRIVACY_MODE_NETWORK_PRIVACY 0x02 /**< Device will send and accept only private addresses for its own address, + and will not accept a peer using identity address as sender address when + the peer IRK is exchanged, non-zero and added to the identity list. */ +/**@} */ + +/** @brief Invalid power level. */ +#define BLE_GAP_POWER_LEVEL_INVALID 127 + +/** @brief Advertising set handle not set. */ +#define BLE_GAP_ADV_SET_HANDLE_NOT_SET (0xFF) + +/** @brief The default number of advertising sets. */ +#define BLE_GAP_ADV_SET_COUNT_DEFAULT (1) + +/** @brief The maximum number of advertising sets supported by this SoftDevice. */ +#define BLE_GAP_ADV_SET_COUNT_MAX (1) + +/**@defgroup BLE_GAP_ADV_SET_DATA_SIZES Advertising data sizes. + * @{ */ +#define BLE_GAP_ADV_SET_DATA_SIZE_MAX (31) /**< Maximum data length for an advertising set. + If more advertising data is required, use extended advertising instead. */ +#define BLE_GAP_ADV_SET_DATA_SIZE_EXTENDED_MAX_SUPPORTED (255) /**< Maximum supported data length for an extended advertising set. */ + +#define BLE_GAP_ADV_SET_DATA_SIZE_EXTENDED_CONNECTABLE_MAX_SUPPORTED (238) /**< Maximum supported data length for an extended connectable advertising set. */ +/**@}. */ + +/** @brief Set ID not available in advertising report. */ +#define BLE_GAP_ADV_REPORT_SET_ID_NOT_AVAILABLE 0xFF + +/**@defgroup BLE_GAP_EVT_ADV_SET_TERMINATED_REASON GAP Advertising Set Terminated reasons + * @{ */ +#define BLE_GAP_EVT_ADV_SET_TERMINATED_REASON_TIMEOUT 0x01 /**< Timeout value reached. */ +#define BLE_GAP_EVT_ADV_SET_TERMINATED_REASON_LIMIT_REACHED 0x02 /**< @ref ble_gap_adv_params_t::max_adv_evts was reached. */ +/**@} */ + +/**@defgroup BLE_GAP_AD_TYPE_DEFINITIONS GAP Advertising and Scan Response Data format + * @note Found at https://www.bluetooth.org/Technical/AssignedNumbers/generic_access_profile.htm + * @{ */ +#define BLE_GAP_AD_TYPE_FLAGS 0x01 /**< Flags for discoverability. */ +#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE 0x02 /**< Partial list of 16 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE 0x03 /**< Complete list of 16 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_MORE_AVAILABLE 0x04 /**< Partial list of 32 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_COMPLETE 0x05 /**< Complete list of 32 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_MORE_AVAILABLE 0x06 /**< Partial list of 128 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_COMPLETE 0x07 /**< Complete list of 128 bit service UUIDs. */ +#define BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME 0x08 /**< Short local device name. */ +#define BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME 0x09 /**< Complete local device name. */ +#define BLE_GAP_AD_TYPE_TX_POWER_LEVEL 0x0A /**< Transmit power level. */ +#define BLE_GAP_AD_TYPE_CLASS_OF_DEVICE 0x0D /**< Class of device. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C 0x0E /**< Simple Pairing Hash C. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R 0x0F /**< Simple Pairing Randomizer R. */ +#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_TK_VALUE 0x10 /**< Security Manager TK Value. */ +#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_OOB_FLAGS 0x11 /**< Security Manager Out Of Band Flags. */ +#define BLE_GAP_AD_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE 0x12 /**< Slave Connection Interval Range. */ +#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_16BIT 0x14 /**< List of 16-bit Service Solicitation UUIDs. */ +#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_128BIT 0x15 /**< List of 128-bit Service Solicitation UUIDs. */ +#define BLE_GAP_AD_TYPE_SERVICE_DATA 0x16 /**< Service Data - 16-bit UUID. */ +#define BLE_GAP_AD_TYPE_PUBLIC_TARGET_ADDRESS 0x17 /**< Public Target Address. */ +#define BLE_GAP_AD_TYPE_RANDOM_TARGET_ADDRESS 0x18 /**< Random Target Address. */ +#define BLE_GAP_AD_TYPE_APPEARANCE 0x19 /**< Appearance. */ +#define BLE_GAP_AD_TYPE_ADVERTISING_INTERVAL 0x1A /**< Advertising Interval. */ +#define BLE_GAP_AD_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS 0x1B /**< LE Bluetooth Device Address. */ +#define BLE_GAP_AD_TYPE_LE_ROLE 0x1C /**< LE Role. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C256 0x1D /**< Simple Pairing Hash C-256. */ +#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R256 0x1E /**< Simple Pairing Randomizer R-256. */ +#define BLE_GAP_AD_TYPE_SERVICE_DATA_32BIT_UUID 0x20 /**< Service Data - 32-bit UUID. */ +#define BLE_GAP_AD_TYPE_SERVICE_DATA_128BIT_UUID 0x21 /**< Service Data - 128-bit UUID. */ +#define BLE_GAP_AD_TYPE_LESC_CONFIRMATION_VALUE 0x22 /**< LE Secure Connections Confirmation Value */ +#define BLE_GAP_AD_TYPE_LESC_RANDOM_VALUE 0x23 /**< LE Secure Connections Random Value */ +#define BLE_GAP_AD_TYPE_URI 0x24 /**< URI */ +#define BLE_GAP_AD_TYPE_3D_INFORMATION_DATA 0x3D /**< 3D Information Data. */ +#define BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA 0xFF /**< Manufacturer Specific Data. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADV_FLAGS GAP Advertisement Flags + * @{ */ +#define BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE (0x01) /**< LE Limited Discoverable Mode. */ +#define BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE (0x02) /**< LE General Discoverable Mode. */ +#define BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED (0x04) /**< BR/EDR not supported. */ +#define BLE_GAP_ADV_FLAG_LE_BR_EDR_CONTROLLER (0x08) /**< Simultaneous LE and BR/EDR, Controller. */ +#define BLE_GAP_ADV_FLAG_LE_BR_EDR_HOST (0x10) /**< Simultaneous LE and BR/EDR, Host. */ +#define BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE (BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE Limited Discoverable Mode, BR/EDR not supported. */ +#define BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE (BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE General Discoverable Mode, BR/EDR not supported. */ +/**@} */ + + +/**@defgroup BLE_GAP_ADV_INTERVALS GAP Advertising interval max and min + * @{ */ +#define BLE_GAP_ADV_INTERVAL_MIN 0x000020 /**< Minimum Advertising interval in 625 us units, i.e. 20 ms. */ +#define BLE_GAP_ADV_INTERVAL_MAX 0x004000 /**< Maximum Advertising interval in 625 us units, i.e. 10.24 s. */ + /**@} */ + + +/**@defgroup BLE_GAP_SCAN_INTERVALS GAP Scan interval max and min + * @{ */ +#define BLE_GAP_SCAN_INTERVAL_MIN 0x0004 /**< Minimum Scan interval in 625 us units, i.e. 2.5 ms. */ +#define BLE_GAP_SCAN_INTERVAL_MAX 0xFFFF /**< Maximum Scan interval in 625 us units, i.e. 40,959.375 s. */ + /** @} */ + + +/**@defgroup BLE_GAP_SCAN_WINDOW GAP Scan window max and min + * @{ */ +#define BLE_GAP_SCAN_WINDOW_MIN 0x0004 /**< Minimum Scan window in 625 us units, i.e. 2.5 ms. */ +#define BLE_GAP_SCAN_WINDOW_MAX 0xFFFF /**< Maximum Scan window in 625 us units, i.e. 40,959.375 s. */ + /** @} */ + + +/**@defgroup BLE_GAP_SCAN_TIMEOUT GAP Scan timeout max and min + * @{ */ +#define BLE_GAP_SCAN_TIMEOUT_MIN 0x0001 /**< Minimum Scan timeout in 10 ms units, i.e 10 ms. */ +#define BLE_GAP_SCAN_TIMEOUT_UNLIMITED 0x0000 /**< Continue to scan forever. */ + /** @} */ + +/**@defgroup BLE_GAP_SCAN_BUFFER_SIZE GAP Minimum scanner buffer size + * + * Scan buffers are used for storing advertising data received from an advertiser. + * If ble_gap_scan_params_t::extended is set to 0, @ref BLE_GAP_SCAN_BUFFER_MIN is the minimum scan buffer length. + * else the minimum scan buffer size is @ref BLE_GAP_SCAN_BUFFER_EXTENDED_MIN. + * @{ */ +#define BLE_GAP_SCAN_BUFFER_MIN (31) /**< Minimum data length for an + advertising set. */ +#define BLE_GAP_SCAN_BUFFER_MAX (31) /**< Maximum data length for an + advertising set. */ +#define BLE_GAP_SCAN_BUFFER_EXTENDED_MIN (255) /**< Minimum data length for an + extended advertising set. */ +#define BLE_GAP_SCAN_BUFFER_EXTENDED_MAX (1650) /**< Maximum data length for an + extended advertising set. */ +#define BLE_GAP_SCAN_BUFFER_EXTENDED_MAX_SUPPORTED (255) /**< Maximum supported data length for + an extended advertising set. */ +/** @} */ + +/**@defgroup BLE_GAP_ADV_TYPES GAP Advertising types + * + * Advertising types defined in Bluetooth Core Specification v5.0, Vol 6, Part B, Section 4.4.2. + * + * The maximum advertising data length is defined by @ref BLE_GAP_ADV_SET_DATA_SIZE_MAX. + * The maximum supported data length for an extended advertiser is defined by + * @ref BLE_GAP_ADV_SET_DATA_SIZE_EXTENDED_MAX_SUPPORTED + * Note that some of the advertising types do not support advertising data. Non-scannable types do not support + * scan response data. + * + * @{ */ +#define BLE_GAP_ADV_TYPE_CONNECTABLE_SCANNABLE_UNDIRECTED 0x01 /**< Connectable and scannable undirected + advertising events. */ +#define BLE_GAP_ADV_TYPE_CONNECTABLE_NONSCANNABLE_DIRECTED_HIGH_DUTY_CYCLE 0x02 /**< Connectable non-scannable directed advertising + events. Advertising interval is less that 3.75 ms. + Use this type for fast reconnections. + @note Advertising data is not supported. */ +#define BLE_GAP_ADV_TYPE_CONNECTABLE_NONSCANNABLE_DIRECTED 0x03 /**< Connectable non-scannable directed advertising + events. + @note Advertising data is not supported. */ +#define BLE_GAP_ADV_TYPE_NONCONNECTABLE_SCANNABLE_UNDIRECTED 0x04 /**< Non-connectable scannable undirected + advertising events. */ +#define BLE_GAP_ADV_TYPE_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED 0x05 /**< Non-connectable non-scannable undirected + advertising events. */ +#define BLE_GAP_ADV_TYPE_EXTENDED_CONNECTABLE_NONSCANNABLE_UNDIRECTED 0x06 /**< Connectable non-scannable undirected advertising + events using extended advertising PDUs. */ +#define BLE_GAP_ADV_TYPE_EXTENDED_CONNECTABLE_NONSCANNABLE_DIRECTED 0x07 /**< Connectable non-scannable directed advertising + events using extended advertising PDUs. */ +#define BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_SCANNABLE_UNDIRECTED 0x08 /**< Non-connectable scannable undirected advertising + events using extended advertising PDUs. + @note Only scan response data is supported. */ +#define BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_SCANNABLE_DIRECTED 0x09 /**< Non-connectable scannable directed advertising + events using extended advertising PDUs. + @note Only scan response data is supported. */ +#define BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED 0x0A /**< Non-connectable non-scannable undirected advertising + events using extended advertising PDUs. */ +#define BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_DIRECTED 0x0B /**< Non-connectable non-scannable directed advertising + events using extended advertising PDUs. */ +/**@} */ + +/**@defgroup BLE_GAP_ADV_FILTER_POLICIES GAP Advertising filter policies + * @{ */ +#define BLE_GAP_ADV_FP_ANY 0x00 /**< Allow scan requests and connect requests from any device. */ +#define BLE_GAP_ADV_FP_FILTER_SCANREQ 0x01 /**< Filter scan requests with whitelist. */ +#define BLE_GAP_ADV_FP_FILTER_CONNREQ 0x02 /**< Filter connect requests with whitelist. */ +#define BLE_GAP_ADV_FP_FILTER_BOTH 0x03 /**< Filter both scan and connect requests with whitelist. */ +/**@} */ + +/**@defgroup BLE_GAP_ADV_DATA_STATUS GAP Advertising data status + * @{ */ +#define BLE_GAP_ADV_DATA_STATUS_COMPLETE 0x00 /**< All data in the advertising event have been received. */ +#define BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA 0x01 /**< More data to be received. + @note This value will only be used if + @ref ble_gap_scan_params_t::report_incomplete_evts and + @ref ble_gap_adv_report_type_t::extended_pdu are set to true. */ +#define BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_TRUNCATED 0x02 /**< Incomplete data. Buffer size insufficient to receive more. + @note This value will only be used if + @ref ble_gap_adv_report_type_t::extended_pdu is set to true. */ +#define BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MISSED 0x03 /**< Failed to receive the remaining data. + @note This value will only be used if + @ref ble_gap_adv_report_type_t::extended_pdu is set to true. */ +/**@} */ + +/**@defgroup BLE_GAP_SCAN_FILTER_POLICIES GAP Scanner filter policies + * @{ */ +#define BLE_GAP_SCAN_FP_ACCEPT_ALL 0x00 /**< Accept all advertising packets except directed advertising packets + not addressed to this device. */ +#define BLE_GAP_SCAN_FP_WHITELIST 0x01 /**< Accept advertising packets from devices in the whitelist except directed + packets not addressed to this device. */ +#define BLE_GAP_SCAN_FP_ALL_NOT_RESOLVED_DIRECTED 0x02 /**< Accept all advertising packets specified in @ref BLE_GAP_SCAN_FP_ACCEPT_ALL. + In addition, accept directed advertising packets, where the advertiser's + address is a resolvable private address that cannot be resolved. */ +#define BLE_GAP_SCAN_FP_WHITELIST_NOT_RESOLVED_DIRECTED 0x03 /**< Accept all advertising packets specified in @ref BLE_GAP_SCAN_FP_WHITELIST. + In addition, accept directed advertising packets, where the advertiser's + address is a resolvable private address that cannot be resolved. */ +/**@} */ + +/**@defgroup BLE_GAP_ADV_TIMEOUT_VALUES GAP Advertising timeout values in 10 ms units + * @{ */ +#define BLE_GAP_ADV_TIMEOUT_HIGH_DUTY_MAX (128) /**< Maximum high duty advertising time in 10 ms units. Corresponds to 1.28 s. */ +#define BLE_GAP_ADV_TIMEOUT_LIMITED_MAX (18000) /**< Maximum advertising time in 10 ms units corresponding to TGAP(lim_adv_timeout) = 180 s in limited discoverable mode. */ +#define BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED (0) /**< Unlimited advertising in general discoverable mode. + For high duty cycle advertising, this corresponds to @ref BLE_GAP_ADV_TIMEOUT_HIGH_DUTY_MAX. */ +/**@} */ + + +/**@defgroup BLE_GAP_DISC_MODES GAP Discovery modes + * @{ */ +#define BLE_GAP_DISC_MODE_NOT_DISCOVERABLE 0x00 /**< Not discoverable discovery Mode. */ +#define BLE_GAP_DISC_MODE_LIMITED 0x01 /**< Limited Discovery Mode. */ +#define BLE_GAP_DISC_MODE_GENERAL 0x02 /**< General Discovery Mode. */ +/**@} */ + + +/**@defgroup BLE_GAP_IO_CAPS GAP IO Capabilities + * @{ */ +#define BLE_GAP_IO_CAPS_DISPLAY_ONLY 0x00 /**< Display Only. */ +#define BLE_GAP_IO_CAPS_DISPLAY_YESNO 0x01 /**< Display and Yes/No entry. */ +#define BLE_GAP_IO_CAPS_KEYBOARD_ONLY 0x02 /**< Keyboard Only. */ +#define BLE_GAP_IO_CAPS_NONE 0x03 /**< No I/O capabilities. */ +#define BLE_GAP_IO_CAPS_KEYBOARD_DISPLAY 0x04 /**< Keyboard and Display. */ +/**@} */ + + +/**@defgroup BLE_GAP_AUTH_KEY_TYPES GAP Authentication Key Types + * @{ */ +#define BLE_GAP_AUTH_KEY_TYPE_NONE 0x00 /**< No key (may be used to reject). */ +#define BLE_GAP_AUTH_KEY_TYPE_PASSKEY 0x01 /**< 6-digit Passkey. */ +#define BLE_GAP_AUTH_KEY_TYPE_OOB 0x02 /**< Out Of Band data. */ +/**@} */ + + +/**@defgroup BLE_GAP_KP_NOT_TYPES GAP Keypress Notification Types + * @{ */ +#define BLE_GAP_KP_NOT_TYPE_PASSKEY_START 0x00 /**< Passkey entry started. */ +#define BLE_GAP_KP_NOT_TYPE_PASSKEY_DIGIT_IN 0x01 /**< Passkey digit entered. */ +#define BLE_GAP_KP_NOT_TYPE_PASSKEY_DIGIT_OUT 0x02 /**< Passkey digit erased. */ +#define BLE_GAP_KP_NOT_TYPE_PASSKEY_CLEAR 0x03 /**< Passkey cleared. */ +#define BLE_GAP_KP_NOT_TYPE_PASSKEY_END 0x04 /**< Passkey entry completed. */ +/**@} */ + + +/**@defgroup BLE_GAP_SEC_STATUS GAP Security status + * @{ */ +#define BLE_GAP_SEC_STATUS_SUCCESS 0x00 /**< Procedure completed with success. */ +#define BLE_GAP_SEC_STATUS_TIMEOUT 0x01 /**< Procedure timed out. */ +#define BLE_GAP_SEC_STATUS_PDU_INVALID 0x02 /**< Invalid PDU received. */ +#define BLE_GAP_SEC_STATUS_RFU_RANGE1_BEGIN 0x03 /**< Reserved for Future Use range #1 begin. */ +#define BLE_GAP_SEC_STATUS_RFU_RANGE1_END 0x80 /**< Reserved for Future Use range #1 end. */ +#define BLE_GAP_SEC_STATUS_PASSKEY_ENTRY_FAILED 0x81 /**< Passkey entry failed (user canceled or other). */ +#define BLE_GAP_SEC_STATUS_OOB_NOT_AVAILABLE 0x82 /**< Out of Band Key not available. */ +#define BLE_GAP_SEC_STATUS_AUTH_REQ 0x83 /**< Authentication requirements not met. */ +#define BLE_GAP_SEC_STATUS_CONFIRM_VALUE 0x84 /**< Confirm value failed. */ +#define BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP 0x85 /**< Pairing not supported. */ +#define BLE_GAP_SEC_STATUS_ENC_KEY_SIZE 0x86 /**< Encryption key size. */ +#define BLE_GAP_SEC_STATUS_SMP_CMD_UNSUPPORTED 0x87 /**< Unsupported SMP command. */ +#define BLE_GAP_SEC_STATUS_UNSPECIFIED 0x88 /**< Unspecified reason. */ +#define BLE_GAP_SEC_STATUS_REPEATED_ATTEMPTS 0x89 /**< Too little time elapsed since last attempt. */ +#define BLE_GAP_SEC_STATUS_INVALID_PARAMS 0x8A /**< Invalid parameters. */ +#define BLE_GAP_SEC_STATUS_DHKEY_FAILURE 0x8B /**< DHKey check failure. */ +#define BLE_GAP_SEC_STATUS_NUM_COMP_FAILURE 0x8C /**< Numeric Comparison failure. */ +#define BLE_GAP_SEC_STATUS_BR_EDR_IN_PROG 0x8D /**< BR/EDR pairing in progress. */ +#define BLE_GAP_SEC_STATUS_X_TRANS_KEY_DISALLOWED 0x8E /**< BR/EDR Link Key cannot be used for LE keys. */ +#define BLE_GAP_SEC_STATUS_RFU_RANGE2_BEGIN 0x8F /**< Reserved for Future Use range #2 begin. */ +#define BLE_GAP_SEC_STATUS_RFU_RANGE2_END 0xFF /**< Reserved for Future Use range #2 end. */ +/**@} */ + + +/**@defgroup BLE_GAP_SEC_STATUS_SOURCES GAP Security status sources + * @{ */ +#define BLE_GAP_SEC_STATUS_SOURCE_LOCAL 0x00 /**< Local failure. */ +#define BLE_GAP_SEC_STATUS_SOURCE_REMOTE 0x01 /**< Remote failure. */ +/**@} */ + + +/**@defgroup BLE_GAP_CP_LIMITS GAP Connection Parameters Limits + * @{ */ +#define BLE_GAP_CP_MIN_CONN_INTVL_NONE 0xFFFF /**< No new minimum connection interval specified in connect parameters. */ +#define BLE_GAP_CP_MIN_CONN_INTVL_MIN 0x0006 /**< Lowest minimum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ +#define BLE_GAP_CP_MIN_CONN_INTVL_MAX 0x0C80 /**< Highest minimum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ +#define BLE_GAP_CP_MAX_CONN_INTVL_NONE 0xFFFF /**< No new maximum connection interval specified in connect parameters. */ +#define BLE_GAP_CP_MAX_CONN_INTVL_MIN 0x0006 /**< Lowest maximum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ +#define BLE_GAP_CP_MAX_CONN_INTVL_MAX 0x0C80 /**< Highest maximum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ +#define BLE_GAP_CP_SLAVE_LATENCY_MAX 0x01F3 /**< Highest slave latency permitted, in connection events. */ +#define BLE_GAP_CP_CONN_SUP_TIMEOUT_NONE 0xFFFF /**< No new supervision timeout specified in connect parameters. */ +#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MIN 0x000A /**< Lowest supervision timeout permitted, in units of 10 ms, i.e. 100 ms. */ +#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MAX 0x0C80 /**< Highest supervision timeout permitted, in units of 10 ms, i.e. 32 s. */ +/**@} */ + + +/**@defgroup BLE_GAP_DEVNAME GAP device name defines. + * @{ */ +#define BLE_GAP_DEVNAME_DEFAULT "nRF5x" /**< Default device name value. */ +#define BLE_GAP_DEVNAME_DEFAULT_LEN 31 /**< Default number of octets in device name. */ +#define BLE_GAP_DEVNAME_MAX_LEN 248 /**< Maximum number of octets in device name. */ +/**@} */ + + +/**@brief Disable RSSI events for connections */ +#define BLE_GAP_RSSI_THRESHOLD_INVALID 0xFF + +/**@defgroup BLE_GAP_PHYS GAP PHYs + * @{ */ +#define BLE_GAP_PHY_AUTO 0x00 /**< Automatic PHY selection. Refer @ref sd_ble_gap_phy_update for more information.*/ +#define BLE_GAP_PHY_1MBPS 0x01 /**< 1 Mbps PHY. */ +#define BLE_GAP_PHY_2MBPS 0x02 /**< 2 Mbps PHY. */ +#define BLE_GAP_PHY_CODED 0x04 /**< Coded PHY. */ +#define BLE_GAP_PHY_NOT_SET 0xFF /**< PHY is not configured. */ + +/**@brief Supported PHYs in connections, for scanning, and for advertising. */ +#define BLE_GAP_PHYS_SUPPORTED (BLE_GAP_PHY_1MBPS | BLE_GAP_PHY_2MBPS | BLE_GAP_PHY_CODED) /**< All PHYs are supported. */ + +/**@} */ + +/**@defgroup BLE_GAP_CONN_SEC_MODE_SET_MACROS GAP attribute security requirement setters + * + * See @ref ble_gap_conn_sec_mode_t. + * @{ */ +/**@brief Set sec_mode pointed to by ptr to have no access rights.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(ptr) do {(ptr)->sm = 0; (ptr)->lv = 0;} while(0) +/**@brief Set sec_mode pointed to by ptr to require no protection, open link.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_OPEN(ptr) do {(ptr)->sm = 1; (ptr)->lv = 1;} while(0) +/**@brief Set sec_mode pointed to by ptr to require encryption, but no MITM protection.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_ENC_NO_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 2;} while(0) +/**@brief Set sec_mode pointed to by ptr to require encryption and MITM protection.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 3;} while(0) +/**@brief Set sec_mode pointed to by ptr to require LESC encryption and MITM protection.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_LESC_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 4;} while(0) +/**@brief Set sec_mode pointed to by ptr to require signing or encryption, no MITM protection needed.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_NO_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 1;} while(0) +/**@brief Set sec_mode pointed to by ptr to require signing or encryption with MITM protection.*/ +#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_WITH_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 2;} while(0) +/**@} */ + + +/**@brief GAP Security Random Number Length. */ +#define BLE_GAP_SEC_RAND_LEN 8 + + +/**@brief GAP Security Key Length. */ +#define BLE_GAP_SEC_KEY_LEN 16 + + +/**@brief GAP LE Secure Connections Elliptic Curve Diffie-Hellman P-256 Public Key Length. */ +#define BLE_GAP_LESC_P256_PK_LEN 64 + + +/**@brief GAP LE Secure Connections Elliptic Curve Diffie-Hellman DHKey Length. */ +#define BLE_GAP_LESC_DHKEY_LEN 32 + + +/**@brief GAP Passkey Length. */ +#define BLE_GAP_PASSKEY_LEN 6 + + +/**@brief Maximum amount of addresses in the whitelist. */ +#define BLE_GAP_WHITELIST_ADDR_MAX_COUNT (8) + + +/**@brief Maximum amount of identities in the device identities list. */ +#define BLE_GAP_DEVICE_IDENTITIES_MAX_COUNT (8) + + +/**@brief Default connection count for a configuration. */ +#define BLE_GAP_CONN_COUNT_DEFAULT (1) + + +/**@defgroup BLE_GAP_EVENT_LENGTH GAP event length defines. + * @{ */ +#define BLE_GAP_EVENT_LENGTH_MIN (2) /**< Minimum event length, in 1.25 ms units. */ +#define BLE_GAP_EVENT_LENGTH_CODED_PHY_MIN (6) /**< The shortest event length in 1.25 ms units supporting LE Coded PHY. */ +#define BLE_GAP_EVENT_LENGTH_DEFAULT (3) /**< Default event length, in 1.25 ms units. */ +/**@} */ + + +/**@defgroup BLE_GAP_ROLE_COUNT GAP concurrent connection count defines. + * @{ */ +#define BLE_GAP_ROLE_COUNT_PERIPH_DEFAULT (1) /**< Default maximum number of connections concurrently acting as peripherals. */ +#define BLE_GAP_ROLE_COUNT_CENTRAL_DEFAULT (3) /**< Default maximum number of connections concurrently acting as centrals. */ +#define BLE_GAP_ROLE_COUNT_CENTRAL_SEC_DEFAULT (1) /**< Default number of SMP instances shared between all connections acting as centrals. */ +#define BLE_GAP_ROLE_COUNT_COMBINED_MAX (20) /**< Maximum supported number of concurrent connections in the peripheral and central roles combined. */ + +/**@} */ + +/**@brief Automatic data length parameter. */ +#define BLE_GAP_DATA_LENGTH_AUTO 0 + +/**@defgroup BLE_GAP_AUTH_PAYLOAD_TIMEOUT Authenticated payload timeout defines. + * @{ */ +#define BLE_GAP_AUTH_PAYLOAD_TIMEOUT_MAX (48000) /**< Maximum authenticated payload timeout in 10 ms units, i.e. 8 minutes. */ +#define BLE_GAP_AUTH_PAYLOAD_TIMEOUT_MIN (1) /**< Minimum authenticated payload timeout in 10 ms units, i.e. 10 ms. */ +/**@} */ + +/**@defgroup GAP_SEC_MODES GAP Security Modes + * @{ */ +#define BLE_GAP_SEC_MODE 0x00 /**< No key (may be used to reject). */ +/**@} */ + +/**@brief The total number of channels in Bluetooth Low Energy. */ +#define BLE_GAP_CHANNEL_COUNT (40) + +/**@defgroup BLE_GAP_QOS_CHANNEL_SURVEY_INTERVALS Quality of Service (QoS) Channel survey interval defines + * @{ */ +#define BLE_GAP_QOS_CHANNEL_SURVEY_INTERVAL_CONTINUOUS (0) /**< Continuous channel survey. */ +#define BLE_GAP_QOS_CHANNEL_SURVEY_INTERVAL_MIN_US (7500) /**< Minimum channel survey interval in microseconds (7.5 ms). */ +#define BLE_GAP_QOS_CHANNEL_SURVEY_INTERVAL_MAX_US (4000000) /**< Maximum channel survey interval in microseconds (4 s). */ + /**@} */ + +/** @} */ + + +/**@addtogroup BLE_GAP_STRUCTURES Structures + * @{ */ + +/**@brief Advertising event properties. */ +typedef struct +{ + uint8_t type; /**< Advertising type. See @ref BLE_GAP_ADV_TYPES. */ + uint8_t anonymous : 1; /**< Omit advertiser's address from all PDUs. + @note Anonymous advertising is only available for + @ref BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED and + @ref BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_DIRECTED. */ + uint8_t include_tx_power : 1; /**< This feature is not supported on this SoftDevice. */ +} ble_gap_adv_properties_t; + + +/**@brief Advertising report type. */ +typedef struct +{ + uint16_t connectable : 1; /**< Connectable advertising event type. */ + uint16_t scannable : 1; /**< Scannable advertising event type. */ + uint16_t directed : 1; /**< Directed advertising event type. */ + uint16_t scan_response : 1; /**< Received a scan response. */ + uint16_t extended_pdu : 1; /**< Received an extended advertising set. */ + uint16_t status : 2; /**< Data status. See @ref BLE_GAP_ADV_DATA_STATUS. */ + uint16_t reserved : 9; /**< Reserved for future use. */ +} ble_gap_adv_report_type_t; + +/**@brief Advertising Auxiliary Pointer. */ +typedef struct +{ + uint16_t aux_offset; /**< Time offset from the beginning of advertising packet to the auxiliary packet in 100 us units. */ + uint8_t aux_phy; /**< Indicates the PHY on which the auxiliary advertising packet is sent. See @ref BLE_GAP_PHYS. */ +} ble_gap_aux_pointer_t; + +/**@brief Bluetooth Low Energy address. */ +typedef struct +{ + uint8_t addr_id_peer : 1; /**< Only valid for peer addresses. + This bit is set by the SoftDevice to indicate whether the address has been resolved from + a Resolvable Private Address (when the peer is using privacy). + If set to 1, @ref addr and @ref addr_type refer to the identity address of the resolved address. + + This bit is ignored when a variable of type @ref ble_gap_addr_t is used as input to API functions. */ + uint8_t addr_type : 7; /**< See @ref BLE_GAP_ADDR_TYPES. */ + uint8_t addr[BLE_GAP_ADDR_LEN]; /**< 48-bit address, LSB format. + @ref addr is not used if @ref addr_type is @ref BLE_GAP_ADDR_TYPE_ANONYMOUS. */ +} ble_gap_addr_t; + + +/**@brief GAP connection parameters. + * + * @note When ble_conn_params_t is received in an event, both min_conn_interval and + * max_conn_interval will be equal to the connection interval set by the central. + * + * @note If both conn_sup_timeout and max_conn_interval are specified, then the following constraint applies: + * conn_sup_timeout * 4 > (1 + slave_latency) * max_conn_interval + * that corresponds to the following Bluetooth Spec requirement: + * The Supervision_Timeout in milliseconds shall be larger than + * (1 + Conn_Latency) * Conn_Interval_Max * 2, where Conn_Interval_Max is given in milliseconds. + */ +typedef struct +{ + uint16_t min_conn_interval; /**< Minimum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ + uint16_t max_conn_interval; /**< Maximum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ + uint16_t slave_latency; /**< Slave Latency in number of connection events, see @ref BLE_GAP_CP_LIMITS.*/ + uint16_t conn_sup_timeout; /**< Connection Supervision Timeout in 10 ms units, see @ref BLE_GAP_CP_LIMITS.*/ +} ble_gap_conn_params_t; + + +/**@brief GAP connection security modes. + * + * Security Mode 0 Level 0: No access permissions at all (this level is not defined by the Bluetooth Core specification).\n + * Security Mode 1 Level 1: No security is needed (aka open link).\n + * Security Mode 1 Level 2: Encrypted link required, MITM protection not necessary.\n + * Security Mode 1 Level 3: MITM protected encrypted link required.\n + * Security Mode 1 Level 4: LESC MITM protected encrypted link using a 128-bit strength encryption key required.\n + * Security Mode 2 Level 1: Signing or encryption required, MITM protection not necessary.\n + * Security Mode 2 Level 2: MITM protected signing required, unless link is MITM protected encrypted.\n + */ +typedef struct +{ + uint8_t sm : 4; /**< Security Mode (1 or 2), 0 for no permissions at all. */ + uint8_t lv : 4; /**< Level (1, 2, 3 or 4), 0 for no permissions at all. */ + +} ble_gap_conn_sec_mode_t; + + +/**@brief GAP connection security status.*/ +typedef struct +{ + ble_gap_conn_sec_mode_t sec_mode; /**< Currently active security mode for this connection.*/ + uint8_t encr_key_size; /**< Length of currently active encryption key, 7 to 16 octets (only applicable for bonding procedures). */ +} ble_gap_conn_sec_t; + +/**@brief Identity Resolving Key. */ +typedef struct +{ + uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Array containing IRK. */ +} ble_gap_irk_t; + + +/**@brief Channel mask (40 bits). + * Every channel is represented with a bit positioned as per channel index defined in Bluetooth Core Specification v5.0, + * Vol 6, Part B, Section 1.4.1. The LSB contained in array element 0 represents channel index 0, and bit 39 represents + * channel index 39. If a bit is set to 1, the channel is not used. + */ +typedef uint8_t ble_gap_ch_mask_t[5]; + + +/**@brief GAP advertising parameters. */ +typedef struct +{ + ble_gap_adv_properties_t properties; /**< The properties of the advertising events. */ + ble_gap_addr_t const *p_peer_addr; /**< Address of a known peer. + @note ble_gap_addr_t::addr_type cannot be + @ref BLE_GAP_ADDR_TYPE_ANONYMOUS. + - When privacy is enabled and the local device uses + @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE addresses, + the device identity list is searched for a matching entry. If + the local IRK for that device identity is set, the local IRK + for that device will be used to generate the advertiser address + field in the advertising packet. + - If @ref ble_gap_adv_properties_t::type is directed, this must be + set to the targeted scanner or initiator. If the peer address is + in the device identity list, the peer IRK for that device will be + used to generate @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE + target addresses used in the advertising event PDUs. */ + uint32_t interval; /**< Advertising interval in 625 us units. @sa BLE_GAP_ADV_INTERVALS. + @note If @ref ble_gap_adv_properties_t::type is set to + @ref BLE_GAP_ADV_TYPE_CONNECTABLE_NONSCANNABLE_DIRECTED_HIGH_DUTY_CYCLE + advertising, this parameter is ignored. */ + uint16_t duration; /**< Advertising duration in 10 ms units. When timeout is reached, + an event of type @ref BLE_GAP_EVT_ADV_SET_TERMINATED is raised. + @sa BLE_GAP_ADV_TIMEOUT_VALUES. + @note The SoftDevice will always complete at least one advertising + event even if the duration is set too low. */ + uint8_t max_adv_evts; /**< Maximum advertising events that shall be sent prior to disabling + advertising. Setting the value to 0 disables the limitation. When + the count of advertising events specified by this parameter + (if not 0) is reached, advertising will be automatically stopped + and an event of type @ref BLE_GAP_EVT_ADV_SET_TERMINATED is raised + @note If @ref ble_gap_adv_properties_t::type is set to + @ref BLE_GAP_ADV_TYPE_CONNECTABLE_NONSCANNABLE_DIRECTED_HIGH_DUTY_CYCLE, + this parameter is ignored. */ + ble_gap_ch_mask_t channel_mask; /**< Channel mask for primary and secondary advertising channels. + At least one of the primary channels, that is channel index 37-39, must be used. + Masking away secondary advertising channels is not supported. */ + uint8_t filter_policy; /**< Filter Policy. @sa BLE_GAP_ADV_FILTER_POLICIES. */ + uint8_t primary_phy; /**< Indicates the PHY on which the primary advertising channel packets + are transmitted. If set to @ref BLE_GAP_PHY_AUTO, @ref BLE_GAP_PHY_1MBPS + will be used. + Valid values are @ref BLE_GAP_PHY_1MBPS and @ref BLE_GAP_PHY_CODED. + @note The primary_phy shall indicate @ref BLE_GAP_PHY_1MBPS if + @ref ble_gap_adv_properties_t::type is not an extended advertising type. */ + uint8_t secondary_phy; /**< Indicates the PHY on which the secondary advertising channel packets + are transmitted. + If set to @ref BLE_GAP_PHY_AUTO, @ref BLE_GAP_PHY_1MBPS will be used. + Valid values are + @ref BLE_GAP_PHY_1MBPS, @ref BLE_GAP_PHY_2MBPS, and @ref BLE_GAP_PHY_CODED. + If @ref ble_gap_adv_properties_t::type is an extended advertising type + and connectable, this is the PHY that will be used to establish a + connection and send AUX_ADV_IND packets on. + @note This parameter will be ignored when + @ref ble_gap_adv_properties_t::type is not an extended advertising type. */ + uint8_t set_id:4; /**< The advertising set identifier distinguishes this advertising set from other + advertising sets transmitted by this and other devices. + @note This parameter will be ignored when + @ref ble_gap_adv_properties_t::type is not an extended advertising type. */ + uint8_t scan_req_notification:1; /**< Enable scan request notifications for this advertising set. When a + scan request is received and the scanner address is allowed + by the filter policy, @ref BLE_GAP_EVT_SCAN_REQ_REPORT is raised. + @note This parameter will be ignored when + @ref ble_gap_adv_properties_t::type is a non-scannable + advertising type. */ +} ble_gap_adv_params_t; + + +/**@brief GAP advertising data buffers. + * + * The application must provide the buffers for advertisement. The memory shall reside in application RAM, and + * shall never be modified while advertising. The data shall be kept alive until either: + * - @ref BLE_GAP_EVT_ADV_SET_TERMINATED is raised. + * - @ref BLE_GAP_EVT_CONNECTED is raised with @ref ble_gap_evt_connected_t::adv_handle set to the corresponding + * advertising handle. + * - Advertising is stopped. + * - Advertising data is changed. + * To update advertising data while advertising, provide new buffers to @ref sd_ble_gap_adv_set_configure. */ +typedef struct +{ + ble_data_t adv_data; /**< Advertising data. + @note + Advertising data can only be specified for a @ref ble_gap_adv_properties_t::type + that is allowed to contain advertising data. */ + ble_data_t scan_rsp_data; /**< Scan response data. + @note + Scan response data can only be specified for a @ref ble_gap_adv_properties_t::type + that is scannable. */ +} ble_gap_adv_data_t; + + +/**@brief GAP scanning parameters. */ +typedef struct +{ + uint8_t extended : 1; /**< If 1, the scanner will accept extended advertising packets. + If set to 0, the scanner will not receive advertising packets + on secondary advertising channels, and will not be able + to receive long advertising PDUs. */ + uint8_t report_incomplete_evts : 1; /**< If 1, events of type @ref ble_gap_evt_adv_report_t may have + @ref ble_gap_adv_report_type_t::status set to + @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA. + This parameter is ignored when used with @ref sd_ble_gap_connect + @note This may be used to abort receiving more packets from an extended + advertising event, and is only available for extended + scanning, see @ref sd_ble_gap_scan_start. + @note This feature is not supported by this SoftDevice. */ + uint8_t active : 1; /**< If 1, perform active scanning by sending scan requests. + This parameter is ignored when used with @ref sd_ble_gap_connect. */ + uint8_t filter_policy : 2; /**< Scanning filter policy. @sa BLE_GAP_SCAN_FILTER_POLICIES. + @note Only @ref BLE_GAP_SCAN_FP_ACCEPT_ALL and + @ref BLE_GAP_SCAN_FP_WHITELIST are valid when used with + @ref sd_ble_gap_connect */ + uint8_t scan_phys; /**< Bitfield of PHYs to scan on. If set to @ref BLE_GAP_PHY_AUTO, + scan_phys will default to @ref BLE_GAP_PHY_1MBPS. + - If @ref ble_gap_scan_params_t::extended is set to 0, the only + supported PHY is @ref BLE_GAP_PHY_1MBPS. + - When used with @ref sd_ble_gap_scan_start, + the bitfield indicates the PHYs the scanner will use for scanning + on primary advertising channels. The scanner will accept + @ref BLE_GAP_PHYS_SUPPORTED as secondary advertising channel PHYs. + - When used with @ref sd_ble_gap_connect, the + bitfield indicates the PHYs on where a connection may be initiated. + If scan_phys contains @ref BLE_GAP_PHY_1MBPS and/or @ref BLE_GAP_PHY_2MBPS, + the primary scan PHY is @ref BLE_GAP_PHY_1MBPS. + If scan_phys also contains @ref BLE_GAP_PHY_CODED, the primary scan + PHY will also contain @ref BLE_GAP_PHY_CODED. If the only scan PHY is + @ref BLE_GAP_PHY_CODED, the primary scan PHY is + @ref BLE_GAP_PHY_CODED only. */ + uint16_t interval; /**< Scan interval in 625 us units. @sa BLE_GAP_SCAN_INTERVALS. */ + uint16_t window; /**< Scan window in 625 us units. @sa BLE_GAP_SCAN_WINDOW. + If scan_phys contains both @ref BLE_GAP_PHY_1MBPS and + @ref BLE_GAP_PHY_CODED interval shall be larger than or + equal to twice the scan window. */ + uint16_t timeout; /**< Scan timeout in 10 ms units. @sa BLE_GAP_SCAN_TIMEOUT. */ + ble_gap_ch_mask_t channel_mask; /**< Channel mask for primary and secondary advertising channels. + At least one of the primary channels, that is channel index 37-39, must be + set to 0. + Masking away secondary channels is not supported. */ +} ble_gap_scan_params_t; + + +/**@brief Privacy. + * + * The privacy feature provides a way for the device to avoid being tracked over a period of time. + * The privacy feature, when enabled, hides the local device identity and replaces it with a private address + * that is automatically refreshed at a specified interval. + * + * If a device still wants to be recognized by other peers, it needs to share it's Identity Resolving Key (IRK). + * With this key, a device can generate a random private address that can only be recognized by peers in possession of that key, + * and devices can establish connections without revealing their real identities. + * + * Both network privacy (@ref BLE_GAP_PRIVACY_MODE_NETWORK_PRIVACY) and device privacy (@ref BLE_GAP_PRIVACY_MODE_DEVICE_PRIVACY) + * are supported. + * + * @note If the device IRK is updated, the new IRK becomes the one to be distributed in all + * bonding procedures performed after @ref sd_ble_gap_privacy_set returns. + * The IRK distributed during bonding procedure is the device IRK that is active when @ref sd_ble_gap_sec_params_reply is called. + */ +typedef struct +{ + uint8_t privacy_mode; /**< Privacy mode, see @ref BLE_GAP_PRIVACY_MODES. Default is @ref BLE_GAP_PRIVACY_MODE_OFF. */ + uint8_t private_addr_type; /**< The private address type must be either @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE or @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE. */ + uint16_t private_addr_cycle_s; /**< Private address cycle interval in seconds. Providing an address cycle value of 0 will use the default value defined by @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S. */ + ble_gap_irk_t *p_device_irk; /**< When used as input, pointer to IRK structure that will be used as the default IRK. If NULL, the device default IRK will be used. + When used as output, pointer to IRK structure where the current default IRK will be written to. If NULL, this argument is ignored. + By default, the default IRK is used to generate random private resolvable addresses for the local device unless instructed otherwise. */ +} ble_gap_privacy_params_t; + + +/**@brief PHY preferences for TX and RX + * @note tx_phys and rx_phys are bit fields. Multiple bits can be set in them to indicate multiple preferred PHYs for each direction. + * @code + * p_gap_phys->tx_phys = BLE_GAP_PHY_1MBPS | BLE_GAP_PHY_2MBPS; + * p_gap_phys->rx_phys = BLE_GAP_PHY_1MBPS | BLE_GAP_PHY_2MBPS; + * @endcode + * + */ +typedef struct +{ + uint8_t tx_phys; /**< Preferred transmit PHYs, see @ref BLE_GAP_PHYS. */ + uint8_t rx_phys; /**< Preferred receive PHYs, see @ref BLE_GAP_PHYS. */ +} ble_gap_phys_t; + +/** @brief Keys that can be exchanged during a bonding procedure. */ +typedef struct +{ + uint8_t enc : 1; /**< Long Term Key and Master Identification. */ + uint8_t id : 1; /**< Identity Resolving Key and Identity Address Information. */ + uint8_t sign : 1; /**< Connection Signature Resolving Key. */ + uint8_t link : 1; /**< Derive the Link Key from the LTK. */ +} ble_gap_sec_kdist_t; + + +/**@brief GAP security parameters. */ +typedef struct +{ + uint8_t bond : 1; /**< Perform bonding. */ + uint8_t mitm : 1; /**< Enable Man In The Middle protection. */ + uint8_t lesc : 1; /**< Enable LE Secure Connection pairing. */ + uint8_t keypress : 1; /**< Enable generation of keypress notifications. */ + uint8_t io_caps : 3; /**< IO capabilities, see @ref BLE_GAP_IO_CAPS. */ + uint8_t oob : 1; /**< The OOB data flag. + - In LE legacy pairing, this flag is set if a device has out of band authentication data. + The OOB method is used if both of the devices have out of band authentication data. + - In LE Secure Connections pairing, this flag is set if a device has the peer device's out of band authentication data. + The OOB method is used if at least one device has the peer device's OOB data available. */ + uint8_t min_key_size; /**< Minimum encryption key size in octets between 7 and 16. If 0 then not applicable in this instance. */ + uint8_t max_key_size; /**< Maximum encryption key size in octets between min_key_size and 16. */ + ble_gap_sec_kdist_t kdist_own; /**< Key distribution bitmap: keys that the local device will distribute. */ + ble_gap_sec_kdist_t kdist_peer; /**< Key distribution bitmap: keys that the remote device will distribute. */ +} ble_gap_sec_params_t; + + +/**@brief GAP Encryption Information. */ +typedef struct +{ + uint8_t ltk[BLE_GAP_SEC_KEY_LEN]; /**< Long Term Key. */ + uint8_t lesc : 1; /**< Key generated using LE Secure Connections. */ + uint8_t auth : 1; /**< Authenticated Key. */ + uint8_t ltk_len : 6; /**< LTK length in octets. */ +} ble_gap_enc_info_t; + + +/**@brief GAP Master Identification. */ +typedef struct +{ + uint16_t ediv; /**< Encrypted Diversifier. */ + uint8_t rand[BLE_GAP_SEC_RAND_LEN]; /**< Random Number. */ +} ble_gap_master_id_t; + + +/**@brief GAP Signing Information. */ +typedef struct +{ + uint8_t csrk[BLE_GAP_SEC_KEY_LEN]; /**< Connection Signature Resolving Key. */ +} ble_gap_sign_info_t; + + +/**@brief GAP LE Secure Connections P-256 Public Key. */ +typedef struct +{ + uint8_t pk[BLE_GAP_LESC_P256_PK_LEN]; /**< LE Secure Connections Elliptic Curve Diffie-Hellman P-256 Public Key. Stored in the standard SMP protocol format: {X,Y} both in little-endian. */ +} ble_gap_lesc_p256_pk_t; + + +/**@brief GAP LE Secure Connections DHKey. */ +typedef struct +{ + uint8_t key[BLE_GAP_LESC_DHKEY_LEN]; /**< LE Secure Connections Elliptic Curve Diffie-Hellman Key. Stored in little-endian. */ +} ble_gap_lesc_dhkey_t; + + +/**@brief GAP LE Secure Connections OOB data. */ +typedef struct +{ + ble_gap_addr_t addr; /**< Bluetooth address of the device. */ + uint8_t r[BLE_GAP_SEC_KEY_LEN]; /**< Random Number. */ + uint8_t c[BLE_GAP_SEC_KEY_LEN]; /**< Confirm Value. */ +} ble_gap_lesc_oob_data_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_CONNECTED. */ +typedef struct +{ + ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 + and the address is the device's identity address. */ + uint8_t role; /**< BLE role for this connection, see @ref BLE_GAP_ROLES */ + ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ + uint8_t adv_handle; /**< Advertising handle in which advertising has ended. + This variable is only set if role is set to @ref BLE_GAP_ROLE_PERIPH. */ + ble_gap_adv_data_t adv_data; /**< Advertising buffers corresponding to the terminated + advertising set. The advertising buffers provided in + @ref sd_ble_gap_adv_set_configure are now released. + This variable is only set if role is set to @ref BLE_GAP_ROLE_PERIPH. */ +} ble_gap_evt_connected_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_DISCONNECTED. */ +typedef struct +{ + uint8_t reason; /**< HCI error code, see @ref BLE_HCI_STATUS_CODES. */ +} ble_gap_evt_disconnected_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_CONN_PARAM_UPDATE. */ +typedef struct +{ + ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ +} ble_gap_evt_conn_param_update_t; + +/**@brief Event structure for @ref BLE_GAP_EVT_PHY_UPDATE_REQUEST. */ +typedef struct +{ + ble_gap_phys_t peer_preferred_phys; /**< The PHYs the peer prefers to use. */ +} ble_gap_evt_phy_update_request_t; + +/**@brief Event Structure for @ref BLE_GAP_EVT_PHY_UPDATE. */ +typedef struct +{ + uint8_t status; /**< Status of the procedure, see @ref BLE_HCI_STATUS_CODES.*/ + uint8_t tx_phy; /**< TX PHY for this connection, see @ref BLE_GAP_PHYS. */ + uint8_t rx_phy; /**< RX PHY for this connection, see @ref BLE_GAP_PHYS. */ +} ble_gap_evt_phy_update_t; + +/**@brief Event structure for @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST. */ +typedef struct +{ + ble_gap_sec_params_t peer_params; /**< Initiator Security Parameters. */ +} ble_gap_evt_sec_params_request_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_SEC_INFO_REQUEST. */ +typedef struct +{ + ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ + ble_gap_master_id_t master_id; /**< Master Identification for LTK lookup. */ + uint8_t enc_info : 1; /**< If 1, Encryption Information required. */ + uint8_t id_info : 1; /**< If 1, Identity Information required. */ + uint8_t sign_info : 1; /**< If 1, Signing Information required. */ +} ble_gap_evt_sec_info_request_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_PASSKEY_DISPLAY. */ +typedef struct +{ + uint8_t passkey[BLE_GAP_PASSKEY_LEN]; /**< 6-digit passkey in ASCII ('0'-'9' digits only). */ + uint8_t match_request : 1; /**< If 1 requires the application to report the match using @ref sd_ble_gap_auth_key_reply + with either @ref BLE_GAP_AUTH_KEY_TYPE_NONE if there is no match or + @ref BLE_GAP_AUTH_KEY_TYPE_PASSKEY if there is a match. */ +} ble_gap_evt_passkey_display_t; + +/**@brief Event structure for @ref BLE_GAP_EVT_KEY_PRESSED. */ +typedef struct +{ + uint8_t kp_not; /**< Keypress notification type, see @ref BLE_GAP_KP_NOT_TYPES. */ +} ble_gap_evt_key_pressed_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_AUTH_KEY_REQUEST. */ +typedef struct +{ + uint8_t key_type; /**< See @ref BLE_GAP_AUTH_KEY_TYPES. */ +} ble_gap_evt_auth_key_request_t; + +/**@brief Event structure for @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST. */ +typedef struct +{ + ble_gap_lesc_p256_pk_t *p_pk_peer; /**< LE Secure Connections remote P-256 Public Key. This will point to the application-supplied memory + inside the keyset during the call to @ref sd_ble_gap_sec_params_reply. */ + uint8_t oobd_req :1; /**< LESC OOB data required. A call to @ref sd_ble_gap_lesc_oob_data_set is required to complete the procedure. */ +} ble_gap_evt_lesc_dhkey_request_t; + + +/**@brief Security levels supported. + * @note See Bluetooth Specification Version 4.2 Volume 3, Part C, Chapter 10, Section 10.2.1. +*/ +typedef struct +{ + uint8_t lv1 : 1; /**< If 1: Level 1 is supported. */ + uint8_t lv2 : 1; /**< If 1: Level 2 is supported. */ + uint8_t lv3 : 1; /**< If 1: Level 3 is supported. */ + uint8_t lv4 : 1; /**< If 1: Level 4 is supported. */ +} ble_gap_sec_levels_t; + + +/**@brief Encryption Key. */ +typedef struct +{ + ble_gap_enc_info_t enc_info; /**< Encryption Information. */ + ble_gap_master_id_t master_id; /**< Master Identification. */ +} ble_gap_enc_key_t; + + +/**@brief Identity Key. */ +typedef struct +{ + ble_gap_irk_t id_info; /**< Identity Resolving Key. */ + ble_gap_addr_t id_addr_info; /**< Identity Address. */ +} ble_gap_id_key_t; + + +/**@brief Security Keys. */ +typedef struct +{ + ble_gap_enc_key_t *p_enc_key; /**< Encryption Key, or NULL. */ + ble_gap_id_key_t *p_id_key; /**< Identity Key, or NULL. */ + ble_gap_sign_info_t *p_sign_key; /**< Signing Key, or NULL. */ + ble_gap_lesc_p256_pk_t *p_pk; /**< LE Secure Connections P-256 Public Key. When in debug mode the application must use the value defined + in the Core Bluetooth Specification v4.2 Vol.3, Part H, Section 2.3.5.6.1 */ +} ble_gap_sec_keys_t; + + +/**@brief Security key set for both local and peer keys. */ +typedef struct +{ + ble_gap_sec_keys_t keys_own; /**< Keys distributed by the local device. For LE Secure Connections the encryption key will be generated locally and will always be stored if bonding. */ + ble_gap_sec_keys_t keys_peer; /**< Keys distributed by the remote device. For LE Secure Connections, p_enc_key must always be NULL. */ +} ble_gap_sec_keyset_t; + + +/**@brief Data Length Update Procedure parameters. */ +typedef struct +{ + uint16_t max_tx_octets; /**< Maximum number of payload octets that a Controller supports for transmission of a single Link Layer Data Channel PDU. */ + uint16_t max_rx_octets; /**< Maximum number of payload octets that a Controller supports for reception of a single Link Layer Data Channel PDU. */ + uint16_t max_tx_time_us; /**< Maximum time, in microseconds, that a Controller supports for transmission of a single Link Layer Data Channel PDU. */ + uint16_t max_rx_time_us; /**< Maximum time, in microseconds, that a Controller supports for reception of a single Link Layer Data Channel PDU. */ +} ble_gap_data_length_params_t; + + +/**@brief Data Length Update Procedure local limitation. */ +typedef struct +{ + uint16_t tx_payload_limited_octets; /**< If > 0, the requested TX packet length is too long by this many octets. */ + uint16_t rx_payload_limited_octets; /**< If > 0, the requested RX packet length is too long by this many octets. */ + uint16_t tx_rx_time_limited_us; /**< If > 0, the requested combination of TX and RX packet lengths is too long by this many microseconds. */ +} ble_gap_data_length_limitation_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_AUTH_STATUS. */ +typedef struct +{ + uint8_t auth_status; /**< Authentication status, see @ref BLE_GAP_SEC_STATUS. */ + uint8_t error_src : 2; /**< On error, source that caused the failure, see @ref BLE_GAP_SEC_STATUS_SOURCES. */ + uint8_t bonded : 1; /**< Procedure resulted in a bond. */ + uint8_t lesc : 1; /**< Procedure resulted in a LE Secure Connection. */ + ble_gap_sec_levels_t sm1_levels; /**< Levels supported in Security Mode 1. */ + ble_gap_sec_levels_t sm2_levels; /**< Levels supported in Security Mode 2. */ + ble_gap_sec_kdist_t kdist_own; /**< Bitmap stating which keys were exchanged (distributed) by the local device. If bonding with LE Secure Connections, the enc bit will be always set. */ + ble_gap_sec_kdist_t kdist_peer; /**< Bitmap stating which keys were exchanged (distributed) by the remote device. If bonding with LE Secure Connections, the enc bit will never be set. */ +} ble_gap_evt_auth_status_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_CONN_SEC_UPDATE. */ +typedef struct +{ + ble_gap_conn_sec_t conn_sec; /**< Connection security level. */ +} ble_gap_evt_conn_sec_update_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_TIMEOUT. */ +typedef struct +{ + uint8_t src; /**< Source of timeout event, see @ref BLE_GAP_TIMEOUT_SOURCES. */ + union + { + ble_data_t adv_report_buffer; /**< If source is set to @ref BLE_GAP_TIMEOUT_SRC_SCAN, the released + scan buffer is contained in this field. */ + } params; /**< Event Parameters. */ +} ble_gap_evt_timeout_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_RSSI_CHANGED. */ +typedef struct +{ + int8_t rssi; /**< Received Signal Strength Indication in dBm. + @note ERRATA-153 requires the rssi sample to be compensated based on a temperature measurement. */ + uint8_t ch_index; /**< Data Channel Index on which the Signal Strength is measured (0-36). */ +} ble_gap_evt_rssi_changed_t; + +/**@brief Event structure for @ref BLE_GAP_EVT_ADV_SET_TERMINATED */ +typedef struct +{ + uint8_t reason; /**< Reason for why the advertising set terminated. See + @ref BLE_GAP_EVT_ADV_SET_TERMINATED_REASON. */ + uint8_t adv_handle; /**< Advertising handle in which advertising has ended. */ + uint8_t num_completed_adv_events; /**< If @ref ble_gap_adv_params_t::max_adv_evts was not set to 0, + this field indicates the number of completed advertising events. */ + ble_gap_adv_data_t adv_data; /**< Advertising buffers corresponding to the terminated + advertising set. The advertising buffers provided in + @ref sd_ble_gap_adv_set_configure are now released. */ +} ble_gap_evt_adv_set_terminated_t; + +/**@brief Event structure for @ref BLE_GAP_EVT_ADV_REPORT. + * + * @note If @ref ble_gap_adv_report_type_t::status is set to @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA, + * not all fields in the advertising report may be available. + * + * @note When ble_gap_adv_report_type_t::status is not set to @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA, + * scanning will be paused. To continue scanning, call @ref sd_ble_gap_scan_start. + */ +typedef struct +{ + ble_gap_adv_report_type_t type; /**< Advertising report type. See @ref ble_gap_adv_report_type_t. */ + ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr is resolved: + @ref ble_gap_addr_t::addr_id_peer is set to 1 and the address is the + peer's identity address. */ + ble_gap_addr_t direct_addr; /**< Contains the target address of the advertising event if + @ref ble_gap_adv_report_type_t::directed is set to 1. If the + SoftDevice was able to resolve the address, + @ref ble_gap_addr_t::addr_id_peer is set to 1 and the direct_addr + contains the local identity address. If the target address of the + advertising event is @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE, + and the SoftDevice was unable to resolve it, the application may try + to resolve this address to find out if the advertising event was + directed to us. */ + uint8_t primary_phy; /**< Indicates the PHY on which the primary advertising packet was received. + See @ref BLE_GAP_PHYS. */ + uint8_t secondary_phy; /**< Indicates the PHY on which the secondary advertising packet was received. + See @ref BLE_GAP_PHYS. This field is set to @ref BLE_GAP_PHY_NOT_SET if no packets + were received on a secondary advertising channel. */ + int8_t tx_power; /**< TX Power reported by the advertiser in the last packet header received. + This field is set to @ref BLE_GAP_POWER_LEVEL_INVALID if the + last received packet did not contain the Tx Power field. + @note TX Power is only included in extended advertising packets. */ + int8_t rssi; /**< Received Signal Strength Indication in dBm of the last packet received. + @note ERRATA-153 requires the rssi sample to be compensated based on a temperature measurement. */ + uint8_t ch_index; /**< Channel Index on which the last advertising packet is received (0-39). */ + uint8_t set_id; /**< Set ID of the received advertising data. Set ID is not present + if set to @ref BLE_GAP_ADV_REPORT_SET_ID_NOT_AVAILABLE. */ + uint16_t data_id:12; /**< The advertising data ID of the received advertising data. Data ID + is not present if @ref ble_gap_evt_adv_report_t::set_id is set to + @ref BLE_GAP_ADV_REPORT_SET_ID_NOT_AVAILABLE. */ + ble_data_t data; /**< Received advertising or scan response data. If + @ref ble_gap_adv_report_type_t::status is not set to + @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA, the data buffer provided + in @ref sd_ble_gap_scan_start is now released. */ + ble_gap_aux_pointer_t aux_pointer; /**< The offset and PHY of the next advertising packet in this extended advertising + event. @note This field is only set if @ref ble_gap_adv_report_type_t::status + is set to @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA. */ +} ble_gap_evt_adv_report_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_SEC_REQUEST. */ +typedef struct +{ + uint8_t bond : 1; /**< Perform bonding. */ + uint8_t mitm : 1; /**< Man In The Middle protection requested. */ + uint8_t lesc : 1; /**< LE Secure Connections requested. */ + uint8_t keypress : 1; /**< Generation of keypress notifications requested. */ +} ble_gap_evt_sec_request_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST. */ +typedef struct +{ + ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ +} ble_gap_evt_conn_param_update_request_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_SCAN_REQ_REPORT. */ +typedef struct +{ + uint8_t adv_handle; /**< Advertising handle for the advertising set which received the Scan Request */ + int8_t rssi; /**< Received Signal Strength Indication in dBm. + @note ERRATA-153 requires the rssi sample to be compensated based on a temperature measurement. */ + ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 + and the address is the device's identity address. */ +} ble_gap_evt_scan_req_report_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST. */ +typedef struct +{ + ble_gap_data_length_params_t peer_params; /**< Peer data length parameters. */ +} ble_gap_evt_data_length_update_request_t; + +/**@brief Event structure for @ref BLE_GAP_EVT_DATA_LENGTH_UPDATE. */ +typedef struct +{ + ble_gap_data_length_params_t effective_params; /**< The effective data length parameters. */ +} ble_gap_evt_data_length_update_t; + + +/**@brief Event structure for @ref BLE_GAP_EVT_QOS_CHANNEL_SURVEY_REPORT. */ +typedef struct +{ + int8_t channel_energy[BLE_GAP_CHANNEL_COUNT]; /**< The measured energy on the Bluetooth Low Energy + channels, in dBm, indexed by Channel Index. + If no measurement is available for the given channel, channel_energy is set to + @ref BLE_GAP_POWER_LEVEL_INVALID. */ +} ble_gap_evt_qos_channel_survey_report_t; + +/**@brief GAP event structure. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which event occurred. */ + union /**< union alternative identified by evt_id in enclosing struct. */ + { + ble_gap_evt_connected_t connected; /**< Connected Event Parameters. */ + ble_gap_evt_disconnected_t disconnected; /**< Disconnected Event Parameters. */ + ble_gap_evt_conn_param_update_t conn_param_update; /**< Connection Parameter Update Parameters. */ + ble_gap_evt_sec_params_request_t sec_params_request; /**< Security Parameters Request Event Parameters. */ + ble_gap_evt_sec_info_request_t sec_info_request; /**< Security Information Request Event Parameters. */ + ble_gap_evt_passkey_display_t passkey_display; /**< Passkey Display Event Parameters. */ + ble_gap_evt_key_pressed_t key_pressed; /**< Key Pressed Event Parameters. */ + ble_gap_evt_auth_key_request_t auth_key_request; /**< Authentication Key Request Event Parameters. */ + ble_gap_evt_lesc_dhkey_request_t lesc_dhkey_request; /**< LE Secure Connections DHKey calculation request. */ + ble_gap_evt_auth_status_t auth_status; /**< Authentication Status Event Parameters. */ + ble_gap_evt_conn_sec_update_t conn_sec_update; /**< Connection Security Update Event Parameters. */ + ble_gap_evt_timeout_t timeout; /**< Timeout Event Parameters. */ + ble_gap_evt_rssi_changed_t rssi_changed; /**< RSSI Event Parameters. */ + ble_gap_evt_adv_report_t adv_report; /**< Advertising Report Event Parameters. */ + ble_gap_evt_adv_set_terminated_t adv_set_terminated; /**< Advertising Set Terminated Event Parameters. */ + ble_gap_evt_sec_request_t sec_request; /**< Security Request Event Parameters. */ + ble_gap_evt_conn_param_update_request_t conn_param_update_request; /**< Connection Parameter Update Parameters. */ + ble_gap_evt_scan_req_report_t scan_req_report; /**< Scan Request Report Parameters. */ + ble_gap_evt_phy_update_request_t phy_update_request; /**< PHY Update Request Event Parameters. */ + ble_gap_evt_phy_update_t phy_update; /**< PHY Update Parameters. */ + ble_gap_evt_data_length_update_request_t data_length_update_request; /**< Data Length Update Request Event Parameters. */ + ble_gap_evt_data_length_update_t data_length_update; /**< Data Length Update Event Parameters. */ + ble_gap_evt_qos_channel_survey_report_t qos_channel_survey_report; /**< Quality of Service (QoS) Channel Survey Report Parameters. */ + } params; /**< Event Parameters. */ +} ble_gap_evt_t; + + +/** + * @brief BLE GAP connection configuration parameters, set with @ref sd_ble_cfg_set. + * + * @retval ::NRF_ERROR_CONN_COUNT The connection count for the connection configurations is zero. + * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: + * - The sum of conn_count for all connection configurations combined exceeds UINT8_MAX. + * - The event length is smaller than @ref BLE_GAP_EVENT_LENGTH_MIN. + */ +typedef struct +{ + uint8_t conn_count; /**< The number of concurrent connections the application can create with this configuration. + The default and minimum value is @ref BLE_GAP_CONN_COUNT_DEFAULT. */ + uint16_t event_length; /**< The time set aside for this connection on every connection interval in 1.25 ms units. + The default value is @ref BLE_GAP_EVENT_LENGTH_DEFAULT, the minimum value is @ref BLE_GAP_EVENT_LENGTH_MIN. + The event length and the connection interval are the primary parameters + for setting the throughput of a connection. + See the SoftDevice Specification for details on throughput. */ +} ble_gap_conn_cfg_t; + + +/** + * @brief Configuration of maximum concurrent connections in the different connected roles, set with + * @ref sd_ble_cfg_set. + * + * @retval ::NRF_ERROR_CONN_COUNT The sum of periph_role_count and central_role_count is too + * large. The maximum supported sum of concurrent connections is + * @ref BLE_GAP_ROLE_COUNT_COMBINED_MAX. + * @retval ::NRF_ERROR_INVALID_PARAM central_sec_count is larger than central_role_count. + * @retval ::NRF_ERROR_RESOURCES The adv_set_count is too large. The maximum + * supported advertising handles is + * @ref BLE_GAP_ADV_SET_COUNT_MAX. + */ +typedef struct +{ + uint8_t adv_set_count; /**< Maximum number of advertising sets. Default value is @ref BLE_GAP_ADV_SET_COUNT_DEFAULT. */ + uint8_t periph_role_count; /**< Maximum number of connections concurrently acting as a peripheral. Default value is @ref BLE_GAP_ROLE_COUNT_PERIPH_DEFAULT. */ + uint8_t central_role_count; /**< Maximum number of connections concurrently acting as a central. Default value is @ref BLE_GAP_ROLE_COUNT_CENTRAL_DEFAULT. */ + uint8_t central_sec_count; /**< Number of SMP instances shared between all connections acting as a central. Default value is @ref BLE_GAP_ROLE_COUNT_CENTRAL_SEC_DEFAULT. */ + uint8_t qos_channel_survey_role_available:1; /**< If set, the Quality of Service (QoS) channel survey module is available to the + application using @ref sd_ble_gap_qos_channel_survey_start. */ +} ble_gap_cfg_role_count_t; + + +/** + * @brief Device name and its properties, set with @ref sd_ble_cfg_set. + * + * @note If the device name is not configured, the default device name will be + * @ref BLE_GAP_DEVNAME_DEFAULT, the maximum device name length will be + * @ref BLE_GAP_DEVNAME_DEFAULT_LEN, vloc will be set to @ref BLE_GATTS_VLOC_STACK and the device name + * will have no write access. + * + * @note If @ref max_len is more than @ref BLE_GAP_DEVNAME_DEFAULT_LEN and vloc is set to @ref BLE_GATTS_VLOC_STACK, + * the attribute table size must be increased to have room for the longer device name (see + * @ref sd_ble_cfg_set and @ref ble_gatts_cfg_attr_tab_size_t). + * + * @note If vloc is @ref BLE_GATTS_VLOC_STACK : + * - p_value must point to non-volatile memory (flash) or be NULL. + * - If p_value is NULL, the device name will initially be empty. + * + * @note If vloc is @ref BLE_GATTS_VLOC_USER : + * - p_value cannot be NULL. + * - If the device name is writable, p_value must point to volatile memory (RAM). + * + * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: + * - Invalid device name location (vloc). + * - Invalid device name security mode. + * @retval ::NRF_ERROR_INVALID_LENGTH One or more of the following is true: + * - The device name length is invalid (must be between 0 and @ref BLE_GAP_DEVNAME_MAX_LEN). + * - The device name length is too long for the given Attribute Table. + * @retval ::NRF_ERROR_NOT_SUPPORTED Device name security mode is not supported. + */ +typedef struct +{ + ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ + uint8_t vloc:2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ + uint8_t *p_value; /**< Pointer to where the value (device name) is stored or will be stored. */ + uint16_t current_len; /**< Current length in bytes of the memory pointed to by p_value.*/ + uint16_t max_len; /**< Maximum length in bytes of the memory pointed to by p_value.*/ +} ble_gap_cfg_device_name_t; + + +/**@brief Configuration structure for GAP configurations. */ +typedef union +{ + ble_gap_cfg_role_count_t role_count_cfg; /**< Role count configuration, cfg_id is @ref BLE_GAP_CFG_ROLE_COUNT. */ + ble_gap_cfg_device_name_t device_name_cfg; /**< Device name configuration, cfg_id is @ref BLE_GAP_CFG_DEVICE_NAME. */ +} ble_gap_cfg_t; + + +/**@brief Channel Map option. + * + * @details Used with @ref sd_ble_opt_get to get the current channel map + * or @ref sd_ble_opt_set to set a new channel map. When setting the + * channel map, it applies to all current and future connections. When getting the + * current channel map, it applies to a single connection and the connection handle + * must be supplied. + * + * @note Setting the channel map may take some time, depending on connection parameters. + * The time taken may be different for each connection and the get operation will + * return the previous channel map until the new one has taken effect. + * + * @note After setting the channel map, by spec it can not be set again until at least 1 s has passed. + * See Bluetooth Specification Version 4.1 Volume 2, Part E, Section 7.3.46. + * + * @retval ::NRF_SUCCESS Get or set successful. + * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: + * - Less then two bits in @ref ch_map are set. + * - Bits for primary advertising channels (37-39) are set. + * @retval ::NRF_ERROR_BUSY Channel map was set again before enough time had passed. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied for get. + * + */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle (only applicable for get) */ + uint8_t ch_map[5]; /**< Channel Map (37-bit). */ +} ble_gap_opt_ch_map_t; + + +/**@brief Local connection latency option. + * + * @details Local connection latency is a feature which enables the slave to improve + * current consumption by ignoring the slave latency set by the peer. The + * local connection latency can only be set to a multiple of the slave latency, + * and cannot be longer than half of the supervision timeout. + * + * @details Used with @ref sd_ble_opt_set to set the local connection latency. The + * @ref sd_ble_opt_get is not supported for this option, but the actual + * local connection latency (unless set to NULL) is set as a return parameter + * when setting the option. + * + * @note The latency set will be truncated down to the closest slave latency event + * multiple, or the nearest multiple before half of the supervision timeout. + * + * @note The local connection latency is disabled by default, and needs to be enabled for new + * connections and whenever the connection is updated. + * + * @retval ::NRF_SUCCESS Set successfully. + * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. + */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle */ + uint16_t requested_latency; /**< Requested local connection latency. */ + uint16_t * p_actual_latency; /**< Pointer to storage for the actual local connection latency (can be set to NULL to skip return value). */ +} ble_gap_opt_local_conn_latency_t; + +/**@brief Disable slave latency + * + * @details Used with @ref sd_ble_opt_set to temporarily disable slave latency of a peripheral connection + * (see @ref ble_gap_conn_params_t::slave_latency). And to re-enable it again. When disabled, the + * peripheral will ignore the slave_latency set by the central. + * + * @note Shall only be called on peripheral links. + * + * @retval ::NRF_SUCCESS Set successfully. + * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. + */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle */ + uint8_t disable : 1; /**< Set to 1 to disable slave latency. Set to 0 enable it again.*/ +} ble_gap_opt_slave_latency_disable_t; + +/**@brief Passkey Option. + * + * @details Structure containing the passkey to be used during pairing. This can be used with @ref + * sd_ble_opt_set to make the SoftDevice use a preprogrammed passkey for authentication + * instead of generating a random one. + * + * @note Repeated pairing attempts using the same preprogrammed passkey makes pairing vulnerable to MITM attacks. + * + * @note @ref sd_ble_opt_get is not supported for this option. + * + */ +typedef struct +{ + uint8_t const * p_passkey; /**< Pointer to 6-digit ASCII string (digit 0..9 only, no NULL termination) passkey to be used during pairing. If this is NULL, the SoftDevice will generate a random passkey if required.*/ +} ble_gap_opt_passkey_t; + + +/**@brief Compatibility mode 1 option. + * + * @details This can be used with @ref sd_ble_opt_set to enable and disable + * compatibility mode 1. Compatibility mode 1 is disabled by default. + * + * @note Compatibility mode 1 enables interoperability with devices that do not support a value of + * 0 for the WinOffset parameter in the Link Layer CONNECT_IND packet. This applies to a + * limited set of legacy peripheral devices from another vendor. Enabling this compatibility + * mode will only have an effect if the local device will act as a central device and + * initiate a connection to a peripheral device. In that case it may lead to the connection + * creation taking up to one connection interval longer to complete for all connections. + * + * @retval ::NRF_SUCCESS Set successfully. + * @retval ::NRF_ERROR_INVALID_STATE When connection creation is ongoing while mode 1 is set. + */ +typedef struct +{ + uint8_t enable : 1; /**< Enable compatibility mode 1.*/ +} ble_gap_opt_compat_mode_1_t; + + +/**@brief Authenticated payload timeout option. + * + * @details This can be used with @ref sd_ble_opt_set to change the Authenticated payload timeout to a value other + * than the default of @ref BLE_GAP_AUTH_PAYLOAD_TIMEOUT_MAX. + * + * @note The authenticated payload timeout event ::BLE_GAP_TIMEOUT_SRC_AUTH_PAYLOAD will be generated + * if auth_payload_timeout time has elapsed without receiving a packet with a valid MIC on an encrypted + * link. + * + * @note The LE ping procedure will be initiated before the timer expires to give the peer a chance + * to reset the timer. In addition the stack will try to prioritize running of LE ping over other + * activities to increase chances of finishing LE ping before timer expires. To avoid side-effects + * on other activities, it is recommended to use high timeout values. + * Recommended timeout > 2*(connInterval * (6 + connSlaveLatency)). + * + * @retval ::NRF_SUCCESS Set successfully. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. auth_payload_timeout was outside of allowed range. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. + */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle */ + uint16_t auth_payload_timeout; /**< Requested timeout in 10 ms unit, see @ref BLE_GAP_AUTH_PAYLOAD_TIMEOUT. */ +} ble_gap_opt_auth_payload_timeout_t; + +/**@brief Option structure for GAP options. */ +typedef union +{ + ble_gap_opt_ch_map_t ch_map; /**< Parameters for the Channel Map option. */ + ble_gap_opt_local_conn_latency_t local_conn_latency; /**< Parameters for the Local connection latency option */ + ble_gap_opt_passkey_t passkey; /**< Parameters for the Passkey option.*/ + ble_gap_opt_compat_mode_1_t compat_mode_1; /**< Parameters for the compatibility mode 1 option.*/ + ble_gap_opt_auth_payload_timeout_t auth_payload_timeout; /**< Parameters for the authenticated payload timeout option.*/ + ble_gap_opt_slave_latency_disable_t slave_latency_disable; /**< Parameters for the Disable slave latency option */ +} ble_gap_opt_t; +/**@} */ + + +/**@addtogroup BLE_GAP_FUNCTIONS Functions + * @{ */ + +/**@brief Set the local Bluetooth identity address. + * + * The local Bluetooth identity address is the address that identifies this device to other peers. + * The address type must be either @ref BLE_GAP_ADDR_TYPE_PUBLIC or @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC. + * + * @note The identity address cannot be changed while advertising, scanning or creating a connection. + * + * @note This address will be distributed to the peer during bonding. + * If the address changes, the address stored in the peer device will not be valid and the ability to + * reconnect using the old address will be lost. + * + * @note By default the SoftDevice will set an address of type @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC upon being + * enabled. The address is a random number populated during the IC manufacturing process and remains unchanged + * for the lifetime of each IC. + * + * @mscs + * @mmsc{@ref BLE_GAP_ADV_MSC} + * @endmscs + * + * @param[in] p_addr Pointer to address structure. + * + * @retval ::NRF_SUCCESS Address successfully set. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address. + * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. + * @retval ::NRF_ERROR_INVALID_STATE The identity address cannot be changed while advertising, + * scanning or creating a connection. + */ +SVCALL(SD_BLE_GAP_ADDR_SET, uint32_t, sd_ble_gap_addr_set(adapter_t *adapter, ble_gap_addr_t const *p_addr)); + + +/**@brief Get local Bluetooth identity address. + * + * @note This will always return the identity address irrespective of the privacy settings, + * i.e. the address type will always be either @ref BLE_GAP_ADDR_TYPE_PUBLIC or @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC. + * + * @param[out] p_addr Pointer to address structure to be filled in. + * + * @retval ::NRF_SUCCESS Address successfully retrieved. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid or NULL pointer supplied. + */ +SVCALL(SD_BLE_GAP_ADDR_GET, uint32_t, sd_ble_gap_addr_get(adapter_t *adapter, ble_gap_addr_t *p_addr)); + + +/**@brief Get the Bluetooth device address used by the advertiser. + * + * @note This function will return the local Bluetooth address used in advertising PDUs. When + * using privacy, the SoftDevice will generate a new private address every + * @ref ble_gap_privacy_params_t::private_addr_cycle_s configured using + * @ref sd_ble_gap_privacy_set. Hence depending on when the application calls this API, the + * address returned may not be the latest address that is used in the advertising PDUs. + * + * @param[in] adv_handle The advertising handle to get the address from. + * @param[out] p_addr Pointer to address structure to be filled in. + * + * @retval ::NRF_SUCCESS Address successfully retrieved. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid or NULL pointer supplied. + * @retval ::BLE_ERROR_INVALID_ADV_HANDLE The provided advertising handle was not found. + * @retval ::NRF_ERROR_INVALID_STATE The advertising set is currently not advertising. + */ +SVCALL(SD_BLE_GAP_ADV_ADDR_GET, uint32_t, sd_ble_gap_adv_addr_get(adapter_t *adapter, uint8_t adv_handle, ble_gap_addr_t *p_addr)); + + +/**@brief Set the active whitelist in the SoftDevice. + * + * @note Only one whitelist can be used at a time and the whitelist is shared between the BLE roles. + * The whitelist cannot be set if a BLE role is using the whitelist. + * + * @note If an address is resolved using the information in the device identity list, then the whitelist + * filter policy applies to the peer identity address and not the resolvable address sent on air. + * + * @mscs + * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} + * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_PRIVATE_SCAN_MSC} + * @endmscs + * + * @param[in] pp_wl_addrs Pointer to a whitelist of peer addresses, if NULL the whitelist will be cleared. + * @param[in] len Length of the whitelist, maximum @ref BLE_GAP_WHITELIST_ADDR_MAX_COUNT. + * + * @retval ::NRF_SUCCESS The whitelist is successfully set/cleared. + * @retval ::NRF_ERROR_INVALID_ADDR The whitelist (or one of its entries) provided is invalid. + * @retval ::BLE_ERROR_GAP_WHITELIST_IN_USE The whitelist is in use by a BLE role and cannot be set or cleared. + * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. + * @retval ::NRF_ERROR_DATA_SIZE The given whitelist size is invalid (zero or too large); this can only return when + * pp_wl_addrs is not NULL. + */ +SVCALL(SD_BLE_GAP_WHITELIST_SET, uint32_t, sd_ble_gap_whitelist_set(adapter_t *adapter, ble_gap_addr_t const * const * pp_wl_addrs, uint8_t len)); + + +/**@brief Set device identity list. + * + * @note Only one device identity list can be used at a time and the list is shared between the BLE roles. + * The device identity list cannot be set if a BLE role is using the list. + * + * @param[in] pp_id_keys Pointer to an array of peer identity addresses and peer IRKs, if NULL the device identity list will be cleared. + * @param[in] pp_local_irks Pointer to an array of local IRKs. Each entry in the array maps to the entry in pp_id_keys at the same index. + * To fill in the list with the currently set device IRK for all peers, set to NULL. + * @param[in] len Length of the device identity list, maximum @ref BLE_GAP_DEVICE_IDENTITIES_MAX_COUNT. + * + * @mscs + * @mmsc{@ref BLE_GAP_PRIVACY_ADV_MSC} + * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_MSC} + * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_PRIVATE_SCAN_MSC} + * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_CONN_PRIV_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_CONN_PRIV_MSC} + * @endmscs + * + * @retval ::NRF_SUCCESS The device identity list successfully set/cleared. + * @retval ::NRF_ERROR_INVALID_ADDR The device identity list (or one of its entries) provided is invalid. + * This code may be returned if the local IRK list also has an invalid entry. + * @retval ::BLE_ERROR_GAP_DEVICE_IDENTITIES_IN_USE The device identity list is in use and cannot be set or cleared. + * @retval ::BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE The device identity list contains multiple entries with the same identity address. + * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. + * @retval ::NRF_ERROR_DATA_SIZE The given device identity list size invalid (zero or too large); this can + * only return when pp_id_keys is not NULL. + */ +SVCALL(SD_BLE_GAP_DEVICE_IDENTITIES_SET, uint32_t, sd_ble_gap_device_identities_set(adapter_t *adapter, ble_gap_id_key_t const * const * pp_id_keys, ble_gap_irk_t const * const * pp_local_irks, uint8_t len)); + + +/**@brief Set privacy settings. + * + * @note Privacy settings cannot be changed while advertising, scanning or creating a connection. + * + * @param[in] p_privacy_params Privacy settings. + * + * @mscs + * @mmsc{@ref BLE_GAP_PRIVACY_ADV_MSC} + * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_MSC} + * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} + * @endmscs + * + * @retval ::NRF_SUCCESS Set successfully. + * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. + * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. + * @retval ::NRF_ERROR_INVALID_ADDR The pointer to privacy settings is NULL or invalid. + * Otherwise, the p_device_irk pointer in privacy parameter is an invalid pointer. + * @retval ::NRF_ERROR_INVALID_PARAM Out of range parameters are provided. + * @retval ::NRF_ERROR_INVALID_STATE Privacy settings cannot be changed while advertising, scanning + * or creating a connection. + */ +SVCALL(SD_BLE_GAP_PRIVACY_SET, uint32_t, sd_ble_gap_privacy_set(adapter_t *adapter, ble_gap_privacy_params_t const *p_privacy_params)); + + +/**@brief Get privacy settings. + * + * @note ::ble_gap_privacy_params_t::p_device_irk must be initialized to NULL or a valid address before this function is called. + * If it is initialized to a valid address, the address pointed to will contain the current device IRK on return. + * + * @param[in,out] p_privacy_params Privacy settings. + * + * @retval ::NRF_SUCCESS Privacy settings read. + * @retval ::NRF_ERROR_INVALID_ADDR The pointer given for returning the privacy settings may be NULL or invalid. + * Otherwise, the p_device_irk pointer in privacy parameter is an invalid pointer. + */ +SVCALL(SD_BLE_GAP_PRIVACY_GET, uint32_t, sd_ble_gap_privacy_get(adapter_t *adapter, ble_gap_privacy_params_t *p_privacy_params)); + + +/**@brief Configure an advertising set. Set, clear or update advertising and scan response data. + * + * @note The format of the advertising data will be checked by this call to ensure interoperability. + * Limitations imposed by this API call to the data provided include having a flags data type in the scan response data and + * duplicating the local name in the advertising data and scan response data. + * + * @note In order to update advertising data while advertising, new advertising buffers must be provided. + * + * @mscs + * @mmsc{@ref BLE_GAP_ADV_MSC} + * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} + * @endmscs + * + * @param[in,out] p_adv_handle Provide a pointer to a handle containing @ref BLE_GAP_ADV_SET_HANDLE_NOT_SET to configure + * a new advertising set. On success, a new handle is then returned through the pointer. + * Provide a pointer to an existing advertising handle to configure an existing advertising set. + * @param[in] p_adv_data Advertising data. If set to NULL, no advertising data will be used. See @ref ble_gap_adv_data_t. + * @param[in] p_adv_params Advertising parameters. When this function is used to update advertising data while advertising, + * this parameter must be NULL. See @ref ble_gap_adv_params_t. + * + * @retval ::NRF_SUCCESS Advertising set successfully configured. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied: + * - Invalid advertising data configuration specified. See @ref ble_gap_adv_data_t. + * - Invalid configuration of p_adv_params. See @ref ble_gap_adv_params_t. + * - Use of whitelist requested but whitelist has not been set, + * see @ref sd_ble_gap_whitelist_set. + * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR ble_gap_adv_params_t::p_peer_addr is invalid. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either: + * - It is invalid to provide non-NULL advertising set parameters while advertising. + * - It is invalid to provide the same data buffers while advertising. To update + * advertising data, provide new advertising buffers. + * @retval ::BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST Discoverable mode and whitelist incompatible. + * @retval ::BLE_ERROR_INVALID_ADV_HANDLE The provided advertising handle was not found. Use @ref BLE_GAP_ADV_SET_HANDLE_NOT_SET to + * configure a new advertising handle. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_FLAGS Invalid combination of advertising flags supplied. + * @retval ::NRF_ERROR_INVALID_DATA Invalid data type(s) supplied. Check the advertising data format specification + * given in Bluetooth Specification Version 5.0, Volume 3, Part C, Chapter 11. + * @retval ::NRF_ERROR_INVALID_LENGTH Invalid data length(s) supplied. + * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported data length or advertising parameter configuration. + * @retval ::NRF_ERROR_NO_MEM Not enough memory to configure a new advertising handle. Update an + * existing advertising handle instead. + * @retval ::BLE_ERROR_GAP_UUID_LIST_MISMATCH Invalid UUID list supplied. + */ +SVCALL(SD_BLE_GAP_ADV_SET_CONFIGURE, uint32_t, sd_ble_gap_adv_set_configure(adapter_t *adapter, uint8_t *p_adv_handle, ble_gap_adv_data_t const *p_adv_data, ble_gap_adv_params_t const *p_adv_params)); + + +/**@brief Start advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). + * + * @note Only one advertiser may be active at any time. + * + * @events + * @event{@ref BLE_GAP_EVT_CONNECTED, Generated after connection has been established through connectable advertising.} + * @event{@ref BLE_GAP_EVT_ADV_SET_TERMINATED, Advertising set has terminated.} + * @event{@ref BLE_GAP_EVT_SCAN_REQ_REPORT, A scan request was received.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_ADV_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_CONN_PRIV_MSC} + * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} + * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} + * @endmscs + * + * @param[in] adv_handle Advertising handle to advertise on, received from @ref sd_ble_gap_adv_set_configure. + * @param[in] conn_cfg_tag Tag identifying a configuration set by @ref sd_ble_cfg_set or + * @ref BLE_CONN_CFG_TAG_DEFAULT to use the default connection configuration. For non-connectable + * advertising, this is ignored. + * + * @retval ::NRF_SUCCESS The BLE stack has started advertising. + * @retval ::NRF_ERROR_INVALID_STATE adv_handle is not configured or already advertising. + * @retval ::NRF_ERROR_CONN_COUNT The limit of available connections has been reached; connectable advertiser cannot be started. + * @retval ::BLE_ERROR_INVALID_ADV_HANDLE Advertising handle not found. Configure a new adveriting handle with @ref sd_ble_gap_adv_set_configure. + * @retval ::NRF_ERROR_NOT_FOUND conn_cfg_tag not found. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied: + * - Invalid configuration of p_adv_params. See @ref ble_gap_adv_params_t. + * - Use of whitelist requested but whitelist has not been set, see @ref sd_ble_gap_whitelist_set. + * @retval ::NRF_ERROR_RESOURCES Either: + * - adv_handle is configured with connectable advertising, but the event_length parameter + * associated with conn_cfg_tag is too small to be able to establish a connection on + * the selected advertising phys. Use @ref sd_ble_cfg_set to increase the event length. + * - Not enough BLE role slots available. + Stop one or more currently active roles (Central, Peripheral, Broadcaster or Observer) and try again. + * - p_adv_params is configured with connectable advertising, but the event_length parameter + * associated with conn_cfg_tag is too small to be able to establish a connection on + * the selected advertising phys. Use @ref sd_ble_cfg_set to increase the event length. + */ +SVCALL(SD_BLE_GAP_ADV_START, uint32_t, sd_ble_gap_adv_start(adapter_t *adapter, uint8_t adv_handle, uint8_t conn_cfg_tag)); + + +/**@brief Stop advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). + * + * @mscs + * @mmsc{@ref BLE_GAP_ADV_MSC} + * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} + * @endmscs + * + * @param[in] adv_handle The advertising handle that should stop advertising. + * + * @retval ::NRF_SUCCESS The BLE stack has stopped advertising. + * @retval ::BLE_ERROR_INVALID_ADV_HANDLE Invalid advertising handle. + * @retval ::NRF_ERROR_INVALID_STATE The advertising handle is not advertising. + */ +SVCALL(SD_BLE_GAP_ADV_STOP, uint32_t, sd_ble_gap_adv_stop(adapter_t *adapter, uint8_t adv_handle)); + + + +/**@brief Update connection parameters. + * + * @details In the central role this will initiate a Link Layer connection parameter update procedure, + * otherwise in the peripheral role, this will send the corresponding L2CAP request and wait for + * the central to perform the procedure. In both cases, and regardless of success or failure, the application + * will be informed of the result with a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE event. + * + * @details This function can be used as a central both to reply to a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST or to start the procedure unrequested. + * + * @events + * @event{@ref BLE_GAP_EVT_CONN_PARAM_UPDATE, Result of the connection parameter update procedure.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_CPU_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} + * @mmsc{@ref BLE_GAP_MULTILINK_CPU_MSC} + * @mmsc{@ref BLE_GAP_MULTILINK_CTRL_PROC_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_CPU_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_conn_params Pointer to desired connection parameters. If NULL is provided on a peripheral role, + * the parameters in the PPCP characteristic of the GAP service will be used instead. + * If NULL is provided on a central role and in response to a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST, the peripheral request will be rejected + * + * @retval ::NRF_SUCCESS The Connection Update procedure has been started successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. + * @retval ::NRF_ERROR_INVALID_STATE Disconnection in progress or link has not been established. + * @retval ::NRF_ERROR_BUSY Procedure already in progress, wait for pending procedures to complete and retry. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. + */ +SVCALL(SD_BLE_GAP_CONN_PARAM_UPDATE, uint32_t, sd_ble_gap_conn_param_update(adapter_t *adapter, uint16_t conn_handle, ble_gap_conn_params_t const *p_conn_params)); + + +/**@brief Disconnect (GAP Link Termination). + * + * @details This call initiates the disconnection procedure, and its completion will be communicated to the application + * with a @ref BLE_GAP_EVT_DISCONNECTED event. + * + * @events + * @event{@ref BLE_GAP_EVT_DISCONNECTED, Generated when disconnection procedure is complete.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_CONN_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] hci_status_code HCI status code, see @ref BLE_HCI_STATUS_CODES (accepted values are @ref BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION and @ref BLE_HCI_CONN_INTERVAL_UNACCEPTABLE). + * + * @retval ::NRF_SUCCESS The disconnection procedure has been started successfully. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::NRF_ERROR_INVALID_STATE Disconnection in progress or link has not been established. + */ +SVCALL(SD_BLE_GAP_DISCONNECT, uint32_t, sd_ble_gap_disconnect(adapter_t *adapter, uint16_t conn_handle, uint8_t hci_status_code)); + + +/**@brief Set the radio's transmit power. + * + * @param[in] role The role to set the transmit power for, see @ref BLE_GAP_TX_POWER_ROLES for + * possible roles. + * @param[in] handle The handle parameter is interpreted depending on role: + * - If role is @ref BLE_GAP_TX_POWER_ROLE_CONN, this value is the specific connection handle. + * - If role is @ref BLE_GAP_TX_POWER_ROLE_ADV, the advertising set identified with the advertising handle, + * will use the specified transmit power, and include it in the advertising packet headers if + * @ref ble_gap_adv_properties_t::include_tx_power set. + * - For all other roles handle is ignored. + * @param[in] tx_power Radio transmit power in dBm (see note for accepted values). + * + * @note Supported tx_power values: -40dBm, -20dBm, -16dBm, -12dBm, -8dBm, -4dBm, 0dBm, +2dBm, +3dBm, +4dBm, +5dBm, +6dBm, +7dBm and +8dBm. + * @note The initiator will have the same transmit power as the scanner. + * @note When a connection is created it will inherit the transmit power from the initiator or + * advertiser leading to the connection. + * + * @retval ::NRF_SUCCESS Successfully changed the transmit power. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::BLE_ERROR_INVALID_ADV_HANDLE Advertising handle not found. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_TX_POWER_SET, uint32_t, sd_ble_gap_tx_power_set(adapter_t *adapter, uint8_t role, uint16_t handle, int8_t tx_power)); + + +/**@brief Set GAP Appearance value. + * + * @param[in] appearance Appearance (16-bit), see @ref BLE_APPEARANCES. + * + * @retval ::NRF_SUCCESS Appearance value set successfully. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + */ +SVCALL(SD_BLE_GAP_APPEARANCE_SET, uint32_t, sd_ble_gap_appearance_set(adapter_t *adapter, uint16_t appearance)); + + +/**@brief Get GAP Appearance value. + * + * @param[out] p_appearance Pointer to appearance (16-bit) to be filled in, see @ref BLE_APPEARANCES. + * + * @retval ::NRF_SUCCESS Appearance value retrieved successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_GAP_APPEARANCE_GET, uint32_t, sd_ble_gap_appearance_get(adapter_t *adapter, uint16_t *p_appearance)); + + +/**@brief Set GAP Peripheral Preferred Connection Parameters. + * + * @param[in] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure with the desired parameters. + * + * @retval ::NRF_SUCCESS Peripheral Preferred Connection Parameters set successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + */ +SVCALL(SD_BLE_GAP_PPCP_SET, uint32_t, sd_ble_gap_ppcp_set(adapter_t *adapter, ble_gap_conn_params_t const *p_conn_params)); + + +/**@brief Get GAP Peripheral Preferred Connection Parameters. + * + * @param[out] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure where the parameters will be stored. + * + * @retval ::NRF_SUCCESS Peripheral Preferred Connection Parameters retrieved successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_GAP_PPCP_GET, uint32_t, sd_ble_gap_ppcp_get(adapter_t *adapter, ble_gap_conn_params_t *p_conn_params)); + + +/**@brief Set GAP device name. + * + * @note If the device name is located in application flash memory (see @ref ble_gap_cfg_device_name_t), + * it cannot be changed. Then @ref NRF_ERROR_FORBIDDEN will be returned. + * + * @param[in] p_write_perm Write permissions for the Device Name characteristic, see @ref ble_gap_conn_sec_mode_t. + * @param[in] p_dev_name Pointer to a UTF-8 encoded, non NULL-terminated string. + * @param[in] len Length of the UTF-8, non NULL-terminated string pointed to by p_dev_name in octets (must be smaller or equal than @ref BLE_GAP_DEVNAME_MAX_LEN). + * + * @retval ::NRF_SUCCESS GAP device name and permissions set successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + * @retval ::NRF_ERROR_FORBIDDEN Device name is not writable. + */ +SVCALL(SD_BLE_GAP_DEVICE_NAME_SET, uint32_t, sd_ble_gap_device_name_set(adapter_t *adapter, ble_gap_conn_sec_mode_t const *p_write_perm, uint8_t const *p_dev_name, uint16_t len)); + + +/**@brief Get GAP device name. + * + * @note If the device name is longer than the size of the supplied buffer, + * p_len will return the complete device name length, + * and not the number of bytes actually returned in p_dev_name. + * The application may use this information to allocate a suitable buffer size. + * + * @param[out] p_dev_name Pointer to an empty buffer where the UTF-8 non NULL-terminated string will be placed. Set to NULL to obtain the complete device name length. + * @param[in,out] p_len Length of the buffer pointed by p_dev_name, complete device name length on output. + * + * @retval ::NRF_SUCCESS GAP device name retrieved successfully. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + */ +SVCALL(SD_BLE_GAP_DEVICE_NAME_GET, uint32_t, sd_ble_gap_device_name_get(adapter_t *adapter, uint8_t *p_dev_name, uint16_t *p_len)); + + +/**@brief Initiate the GAP Authentication procedure. + * + * @details In the central role, this function will send an SMP Pairing Request (or an SMP Pairing Failed if rejected), + * otherwise in the peripheral role, an SMP Security Request will be sent. + * + * @events + * @event{Depending on the security parameters set and the packet exchanges with the peer\, the following events may be generated:} + * @event{@ref BLE_GAP_EVT_SEC_PARAMS_REQUEST} + * @event{@ref BLE_GAP_EVT_SEC_INFO_REQUEST} + * @event{@ref BLE_GAP_EVT_PASSKEY_DISPLAY} + * @event{@ref BLE_GAP_EVT_KEY_PRESSED} + * @event{@ref BLE_GAP_EVT_AUTH_KEY_REQUEST} + * @event{@ref BLE_GAP_EVT_LESC_DHKEY_REQUEST} + * @event{@ref BLE_GAP_EVT_CONN_SEC_UPDATE} + * @event{@ref BLE_GAP_EVT_AUTH_STATUS} + * @event{@ref BLE_GAP_EVT_TIMEOUT} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_SEC_REQ_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_SEC_REQ_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_PAIRING_JW_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_JW_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_sec_params Pointer to the @ref ble_gap_sec_params_t structure with the security parameters to be used during the pairing or bonding procedure. + * In the peripheral role, only the bond, mitm, lesc and keypress fields of this structure are used. + * In the central role, this pointer may be NULL to reject a Security Request. + * + * @retval ::NRF_SUCCESS Successfully initiated authentication procedure. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either: + * - No link has been established. + * - An encryption is already executing or queued. + * @retval ::NRF_ERROR_NO_MEM The maximum number of authentication procedures that can run in parallel for the given role is reached. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::NRF_ERROR_NOT_SUPPORTED Setting of sign or link fields in @ref ble_gap_sec_kdist_t not supported. + * @retval ::NRF_ERROR_TIMEOUT A SMP timeout has occurred, and further SMP operations on this link is prohibited. + */ +SVCALL(SD_BLE_GAP_AUTHENTICATE, uint32_t, sd_ble_gap_authenticate(adapter_t *adapter, uint16_t conn_handle, ble_gap_sec_params_t const *p_sec_params)); + + +/**@brief Reply with GAP security parameters. + * + * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. + * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. + * + * @events + * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_JW_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_BONDING_JW_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_PERIPH_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_CENTRAL_OOB_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_BONDING_STATIC_PK_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_CONFIRM_FAIL_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_PAIRING_JW_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_PD_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_KS_TOO_SMALL_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_APP_ERROR_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_REMOTE_PAIRING_FAIL_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_TIMEOUT_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_PAIRING_JW_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_JW_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] sec_status Security status, see @ref BLE_GAP_SEC_STATUS. + * @param[in] p_sec_params Pointer to a @ref ble_gap_sec_params_t security parameters structure. In the central role this must be set to NULL, as the parameters have + * already been provided during a previous call to @ref sd_ble_gap_authenticate. + * @param[in,out] p_sec_keyset Pointer to a @ref ble_gap_sec_keyset_t security keyset structure. Any keys generated and/or distributed as a result of the ongoing security procedure + * will be stored into the memory referenced by the pointers inside this structure. The keys will be stored and available to the application + * upon reception of a @ref BLE_GAP_EVT_AUTH_STATUS event. + * Note that the SoftDevice expects the application to provide memory for storing the + * peer's keys. So it must be ensured that the relevant pointers inside this structure are not NULL. The pointers to the local key + * can, however, be NULL, in which case, the local key data will not be available to the application upon reception of the + * @ref BLE_GAP_EVT_AUTH_STATUS event. + * + * @retval ::NRF_SUCCESS Successfully accepted security parameter from the application. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_INVALID_STATE Security parameters has not been requested. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::NRF_ERROR_NOT_SUPPORTED Setting of sign or link fields in @ref ble_gap_sec_kdist_t not supported. + */ +SVCALL(SD_BLE_GAP_SEC_PARAMS_REPLY, uint32_t, sd_ble_gap_sec_params_reply(adapter_t *adapter, uint16_t conn_handle, uint8_t sec_status, ble_gap_sec_params_t const *p_sec_params, ble_gap_sec_keyset_t const *p_sec_keyset)); + + +/**@brief Reply with an authentication key. + * + * @details This function is only used to reply to a @ref BLE_GAP_EVT_AUTH_KEY_REQUEST or a @ref BLE_GAP_EVT_PASSKEY_DISPLAY, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. + * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. + * + * @events + * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_CENTRAL_OOB_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] key_type See @ref BLE_GAP_AUTH_KEY_TYPES. + * @param[in] p_key If key type is @ref BLE_GAP_AUTH_KEY_TYPE_NONE, then NULL. + * If key type is @ref BLE_GAP_AUTH_KEY_TYPE_PASSKEY, then a 6-byte ASCII string (digit 0..9 only, no NULL termination) + * or NULL when confirming LE Secure Connections Numeric Comparison. + * If key type is @ref BLE_GAP_AUTH_KEY_TYPE_OOB, then a 16-byte OOB key value in little-endian format. + * + * @retval ::NRF_SUCCESS Authentication key successfully set. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_INVALID_STATE Authentication key has not been requested. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_AUTH_KEY_REPLY, uint32_t, sd_ble_gap_auth_key_reply(adapter_t *adapter, uint16_t conn_handle, uint8_t key_type, uint8_t const *p_key)); + + +/**@brief Reply with an LE Secure connections DHKey. + * + * @details This function is only used to reply to a @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. + * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. + * + * @events + * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_LESC_PAIRING_JW_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_PD_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_dhkey LE Secure Connections DHKey. + * + * @retval ::NRF_SUCCESS DHKey successfully set. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either: + * - The peer is not authenticated. + * - The application has not pulled a @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST event. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_LESC_DHKEY_REPLY, uint32_t, sd_ble_gap_lesc_dhkey_reply(adapter_t *adapter, uint16_t conn_handle, ble_gap_lesc_dhkey_t const *p_dhkey)); + + +/**@brief Notify the peer of a local keypress. + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] kp_not See @ref BLE_GAP_KP_NOT_TYPES. + * + * @retval ::NRF_SUCCESS Keypress notification successfully queued for transmission. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either: + * - Authentication key not requested. + * - Passkey has not been entered. + * - Keypresses have not been enabled by both peers. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::NRF_ERROR_BUSY The BLE stack is busy. Retry at later time. + */ +SVCALL(SD_BLE_GAP_KEYPRESS_NOTIFY, uint32_t, sd_ble_gap_keypress_notify(adapter_t *adapter, uint16_t conn_handle, uint8_t kp_not)); + + +/**@brief Generate a set of OOB data to send to a peer out of band. + * + * @note The @ref ble_gap_addr_t included in the OOB data returned will be the currently active one (or, if a connection has already been established, + * the one used during connection setup). The application may manually overwrite it with an updated value. + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. Can be @ref BLE_CONN_HANDLE_INVALID if a BLE connection has not been established yet. + * @param[in] p_pk_own LE Secure Connections local P-256 Public Key. + * @param[out] p_oobd_own The OOB data to be sent out of band to a peer. + * + * @retval ::NRF_SUCCESS OOB data successfully generated. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_LESC_OOB_DATA_GET, uint32_t, sd_ble_gap_lesc_oob_data_get(adapter_t *adapter, uint16_t conn_handle, ble_gap_lesc_p256_pk_t const *p_pk_own, ble_gap_lesc_oob_data_t *p_oobd_own)); + +/**@brief Provide the OOB data sent/received out of band. + * + * @note An authentication procedure with OOB selected as an algorithm must be in progress when calling this function. + * @note A @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST event with the oobd_req set to 1 must have been received prior to calling this function. + * + * @events + * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_oobd_own The OOB data sent out of band to a peer or NULL if the peer has not received OOB data. + * Must correspond to @ref ble_gap_sec_params_t::oob flag in @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST. + * @param[in] p_oobd_peer The OOB data received out of band from a peer or NULL if none received. + * Must correspond to @ref ble_gap_sec_params_t::oob flag + * in @ref sd_ble_gap_authenticate in the central role or + * in @ref sd_ble_gap_sec_params_reply in the peripheral role. + * + * @retval ::NRF_SUCCESS OOB data accepted. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either: + * - Authentication key not requested + * - Not expecting LESC OOB data + * - Have not actually exchanged passkeys. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_LESC_OOB_DATA_SET, uint32_t, sd_ble_gap_lesc_oob_data_set(adapter_t *adapter, uint16_t conn_handle, ble_gap_lesc_oob_data_t const *p_oobd_own, ble_gap_lesc_oob_data_t const *p_oobd_peer)); + + +/**@brief Initiate GAP Encryption procedure. + * + * @details In the central role, this function will initiate the encryption procedure using the encryption information provided. + * + * @events + * @event{@ref BLE_GAP_EVT_CONN_SEC_UPDATE, The connection security has been updated.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_ENC_MSC} + * @mmsc{@ref BLE_GAP_MULTILINK_CTRL_PROC_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_SEC_REQ_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_master_id Pointer to a @ref ble_gap_master_id_t master identification structure. + * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. + * + * @retval ::NRF_SUCCESS Successfully initiated authentication procedure. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_STATE No link has been established. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::BLE_ERROR_INVALID_ROLE Operation is not supported in the Peripheral role. + * @retval ::NRF_ERROR_BUSY Procedure already in progress or not allowed at this time, wait for pending procedures to complete and retry. + */ +SVCALL(SD_BLE_GAP_ENCRYPT, uint32_t, sd_ble_gap_encrypt(adapter_t *adapter, uint16_t conn_handle, ble_gap_master_id_t const *p_master_id, ble_gap_enc_info_t const *p_enc_info)); + + +/**@brief Reply with GAP security information. + * + * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_INFO_REQUEST, calling it at other times will result in @ref NRF_ERROR_INVALID_STATE. + * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. + * @note Data signing is not yet supported, and p_sign_info must therefore be NULL. + * + * @mscs + * @mmsc{@ref BLE_GAP_PERIPH_ENC_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. May be NULL to signal none is available. + * @param[in] p_id_info Pointer to a @ref ble_gap_irk_t identity information structure. May be NULL to signal none is available. + * @param[in] p_sign_info Pointer to a @ref ble_gap_sign_info_t signing information structure. May be NULL to signal none is available. + * + * @retval ::NRF_SUCCESS Successfully accepted security information. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either: + * - No link has been established. + * - No @ref BLE_GAP_EVT_SEC_REQUEST pending. + * - LE long term key requested command not allowed. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_SEC_INFO_REPLY, uint32_t, sd_ble_gap_sec_info_reply(adapter_t *adapter, uint16_t conn_handle, ble_gap_enc_info_t const *p_enc_info, ble_gap_irk_t const *p_id_info, ble_gap_sign_info_t const *p_sign_info)); + + +/**@brief Get the current connection security. + * + * @param[in] conn_handle Connection handle. + * @param[out] p_conn_sec Pointer to a @ref ble_gap_conn_sec_t structure to be filled in. + * + * @retval ::NRF_SUCCESS Current connection security successfully retrieved. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_CONN_SEC_GET, uint32_t, sd_ble_gap_conn_sec_get(adapter_t *adapter, uint16_t conn_handle, ble_gap_conn_sec_t *p_conn_sec)); + + +/**@brief Start reporting the received signal strength to the application. + * + * A new event is reported whenever the RSSI value changes, until @ref sd_ble_gap_rssi_stop is called. + * + * @events + * @event{@ref BLE_GAP_EVT_RSSI_CHANGED, New RSSI data available. How often the event is generated is + * dependent on the settings of the threshold_dbm + * and skip_count input parameters.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} + * @mmsc{@ref BLE_GAP_RSSI_FILT_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] threshold_dbm Minimum change in dBm before triggering the @ref BLE_GAP_EVT_RSSI_CHANGED event. Events are disabled if threshold_dbm equals @ref BLE_GAP_RSSI_THRESHOLD_INVALID. + * @param[in] skip_count Number of RSSI samples with a change of threshold_dbm or more before sending a new @ref BLE_GAP_EVT_RSSI_CHANGED event. + * + * @retval ::NRF_SUCCESS Successfully activated RSSI reporting. + * @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is already ongoing. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_RSSI_START, uint32_t, sd_ble_gap_rssi_start(adapter_t *adapter, uint16_t conn_handle, uint8_t threshold_dbm, uint8_t skip_count)); + + +/**@brief Stop reporting the received signal strength. + * + * @note An RSSI change detected before the call but not yet received by the application + * may be reported after @ref sd_ble_gap_rssi_stop has been called. + * + * @mscs + * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} + * @mmsc{@ref BLE_GAP_RSSI_FILT_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * + * @retval ::NRF_SUCCESS Successfully deactivated RSSI reporting. + * @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is not ongoing. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + */ +SVCALL(SD_BLE_GAP_RSSI_STOP, uint32_t, sd_ble_gap_rssi_stop(adapter_t *adapter, uint16_t conn_handle)); + + +/**@brief Get the received signal strength for the last connection event. + * + * @ref sd_ble_gap_rssi_start must be called to start reporting RSSI before using this function. @ref NRF_ERROR_NOT_FOUND + * will be returned until RSSI was sampled for the first time after calling @ref sd_ble_gap_rssi_start. + * @note ERRATA-153 requires the rssi sample to be compensated based on a temperature measurement. + * @mscs + * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[out] p_rssi Pointer to the location where the RSSI measurement shall be stored. + * @param[out] p_ch_index Pointer to the location where Channel Index for the RSSI measurement shall be stored. + * + * @retval ::NRF_SUCCESS Successfully read the RSSI. + * @retval ::NRF_ERROR_NOT_FOUND No sample is available. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is not ongoing. + */ +SVCALL(SD_BLE_GAP_RSSI_GET, uint32_t, sd_ble_gap_rssi_get(adapter_t *adapter, uint16_t conn_handle, int8_t *p_rssi, uint8_t *p_ch_index)); + + +/**@brief Start or continue scanning (GAP Discovery procedure, Observer Procedure). + * + * @note A call to this function will require the application to keep the memory pointed by + * p_adv_report_buffer alive until the buffer is released. The buffer is released when the scanner is stopped + * or when this function is called with another buffer. + * + * @note The scanner will automatically stop in the following cases: + * - @ref sd_ble_gap_scan_stop is called. + * - @ref sd_ble_gap_connect is called. + * - A @ref BLE_GAP_EVT_TIMEOUT with source set to @ref BLE_GAP_TIMEOUT_SRC_SCAN is received. + * - When a @ref BLE_GAP_EVT_ADV_REPORT event is received and @ref ble_gap_adv_report_type_t::status is not set to + * @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA. In this case scanning is only paused to let the application + * access received data. The application must call this function to continue scanning, or call @ref sd_ble_gap_scan_stop + * to stop scanning. + * + * @note If a @ref BLE_GAP_EVT_ADV_REPORT event is received with @ref ble_gap_adv_report_type_t::status set to + * @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA, the scanner will continue scanning, and the application will + * receive more reports from this advertising event. The following reports will include the old and new received data. + * + * @events + * @event{@ref BLE_GAP_EVT_ADV_REPORT, An advertising or scan response packet has been received.} + * @event{@ref BLE_GAP_EVT_TIMEOUT, Scanner has timed out.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_SCAN_MSC} + * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} + * @endmscs + * + * @param[in] p_scan_params Pointer to scan parameters structure. When this function is used to continue + * scanning, this parameter must be NULL. + * @param[in] p_adv_report_buffer Pointer to buffer used to store incoming advertising data. + * The memory pointed to should be kept alive until the scanning is stopped. + * See @ref BLE_GAP_SCAN_BUFFER_SIZE for minimum and maximum buffer size. + * If the scanner receives advertising data larger than can be stored in the buffer, + * a @ref BLE_GAP_EVT_ADV_REPORT will be raised with @ref ble_gap_adv_report_type_t::status + * set to @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_TRUNCATED. + * + * @retval ::NRF_SUCCESS Successfully initiated scanning procedure. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either: + * - Scanning is already ongoing and p_scan_params was not NULL + * - Scanning is not running and p_scan_params was NULL. + * - The scanner has timed out when this function is called to continue scanning. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. See @ref ble_gap_scan_params_t. + * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported parameters supplied. See @ref ble_gap_scan_params_t. + * @retval ::NRF_ERROR_INVALID_LENGTH The provided buffer length is invalid. See @ref BLE_GAP_SCAN_BUFFER_MIN. + * @retval ::NRF_ERROR_RESOURCES Not enough BLE role slots available. + * Stop one or more currently active roles (Central, Peripheral or Broadcaster) and try again + */ +SVCALL(SD_BLE_GAP_SCAN_START, uint32_t, sd_ble_gap_scan_start(adapter_t *adapter, ble_gap_scan_params_t const *p_scan_params, ble_data_t const * p_adv_report_buffer)); + + +/**@brief Stop scanning (GAP Discovery procedure, Observer Procedure). + * + * @note The buffer provided in @ref sd_ble_gap_scan_start is released. + * + * @mscs + * @mmsc{@ref BLE_GAP_SCAN_MSC} + * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} + * @endmscs + * + * @retval ::NRF_SUCCESS Successfully stopped scanning procedure. + * @retval ::NRF_ERROR_INVALID_STATE Not in the scanning state. + */ +SVCALL(SD_BLE_GAP_SCAN_STOP, uint32_t, sd_ble_gap_scan_stop(adapter_t *adapter)); + + +/**@brief Create a connection (GAP Link Establishment). + * + * @note If a scanning procedure is currently in progress it will be automatically stopped when calling this function. + * The scanning procedure will be stopped even if the function returns an error. + * + * @events + * @event{@ref BLE_GAP_EVT_CONNECTED, A connection was established.} + * @event{@ref BLE_GAP_EVT_TIMEOUT, Failed to establish a connection.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_CONN_PRIV_MSC} + * @mmsc{@ref BLE_GAP_CENTRAL_CONN_MSC} + * @endmscs + * + * @param[in] p_peer_addr Pointer to peer identity address. If @ref ble_gap_scan_params_t::filter_policy is set to use + * whitelist, then p_peer_addr is ignored. + * @param[in] p_scan_params Pointer to scan parameters structure. + * @param[in] p_conn_params Pointer to desired connection parameters. + * @param[in] conn_cfg_tag Tag identifying a configuration set by @ref sd_ble_cfg_set or + * @ref BLE_CONN_CFG_TAG_DEFAULT to use the default connection configuration. + * + * @retval ::NRF_SUCCESS Successfully initiated connection procedure. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid parameter(s) pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * - Invalid parameter(s) in p_scan_params or p_conn_params. + * - Use of whitelist requested but whitelist has not been set, see @ref sd_ble_gap_whitelist_set. + * - Peer address was not present in the device identity list, see @ref sd_ble_gap_device_identities_set. + * @retval ::NRF_ERROR_NOT_FOUND conn_cfg_tag not found. + * @retval ::NRF_ERROR_INVALID_STATE The SoftDevice is in an invalid state to perform this operation. This may be due to an + * existing locally initiated connect procedure, which must complete before initiating again. + * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Peer address. + * @retval ::NRF_ERROR_CONN_COUNT The limit of available connections has been reached. + * @retval ::NRF_ERROR_RESOURCES Either: + * - Not enough BLE role slots available. + * Stop one or more currently active roles (Central, Peripheral or Observer) and try again. + * - The event_length parameter associated with conn_cfg_tag is too small to be able to + * establish a connection on the selected @ref ble_gap_scan_params_t::scan_phys. + * Use @ref sd_ble_cfg_set to increase the event length. + */ +SVCALL(SD_BLE_GAP_CONNECT, uint32_t, sd_ble_gap_connect(adapter_t *adapter, ble_gap_addr_t const *p_peer_addr, ble_gap_scan_params_t const *p_scan_params, ble_gap_conn_params_t const *p_conn_params, uint8_t conn_cfg_tag)); + + +/**@brief Cancel a connection establishment. + * + * @mscs + * @mmsc{@ref BLE_GAP_CENTRAL_CONN_MSC} + * @endmscs + * + * @retval ::NRF_SUCCESS Successfully canceled an ongoing connection procedure. + * @retval ::NRF_ERROR_INVALID_STATE No locally initiated connect procedure started or connection + * completed occurred. + */ +SVCALL(SD_BLE_GAP_CONNECT_CANCEL, uint32_t, sd_ble_gap_connect_cancel(adapter_t *adapter)); + + +/**@brief Initiate or respond to a PHY Update Procedure + * + * @details This function is used to initiate or respond to a PHY Update Procedure. It will always + * generate a @ref BLE_GAP_EVT_PHY_UPDATE event if successfully executed. + * If this function is used to initiate a PHY Update procedure and the only option + * provided in @ref ble_gap_phys_t::tx_phys and @ref ble_gap_phys_t::rx_phys is the + * currently active PHYs in the respective directions, the SoftDevice will generate a + * @ref BLE_GAP_EVT_PHY_UPDATE with the current PHYs set and will not initiate the + * procedure in the Link Layer. + * + * If @ref ble_gap_phys_t::tx_phys or @ref ble_gap_phys_t::rx_phys is @ref BLE_GAP_PHY_AUTO, + * then the stack will select PHYs based on the peer's PHY preferences and the local link + * configuration. The PHY Update procedure will for this case result in a PHY combination + * that respects the time constraints configured with @ref sd_ble_cfg_set and the current + * link layer data length. + * + * When acting as a central, the SoftDevice will select the fastest common PHY in each direction. + * + * If the peer does not support the PHY Update Procedure, then the resulting + * @ref BLE_GAP_EVT_PHY_UPDATE event will have a status set to + * @ref BLE_HCI_UNSUPPORTED_REMOTE_FEATURE. + * + * If the PHY procedure was rejected by the peer due to a procedure collision, the status + * will be @ref BLE_HCI_STATUS_CODE_LMP_ERROR_TRANSACTION_COLLISION or + * @ref BLE_HCI_DIFFERENT_TRANSACTION_COLLISION. + * If the peer responds to the PHY Update procedure with invalid parameters, the status + * will be @ref BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS. + * If the PHY procedure was rejected by the peer for a different reason, the status will + * contain the reason as specified by the peer. + * + * @events + * @event{@ref BLE_GAP_EVT_PHY_UPDATE, Result of the PHY Update Procedure.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GAP_CENTRAL_PHY_UPDATE} + * @mmsc{@ref BLE_GAP_PERIPHERAL_PHY_UPDATE} + * @endmscs + * + * @param[in] conn_handle Connection handle to indicate the connection for which the PHY Update is requested. + * @param[in] p_gap_phys Pointer to PHY structure. + * + * @retval ::NRF_SUCCESS Successfully requested a PHY Update. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_INVALID_STATE No link has been established. + * @retval ::NRF_ERROR_RESOURCES The connection event length configured for this link is not sufficient for the combination of + * @ref ble_gap_phys_t::tx_phys, @ref ble_gap_phys_t::rx_phys, and @ref ble_gap_data_length_params_t. + * The connection event length is configured with @ref BLE_CONN_CFG_GAP using @ref sd_ble_cfg_set. + * @retval ::NRF_ERROR_BUSY Procedure is already in progress or not allowed at this time. Process pending events and wait for the pending procedure to complete and retry. + * + */ +SVCALL(SD_BLE_GAP_PHY_UPDATE, uint32_t, sd_ble_gap_phy_update(adapter_t *adapter, uint16_t conn_handle, ble_gap_phys_t const *p_gap_phys)); + + +/**@brief Initiate or respond to a Data Length Update Procedure. + * + * @note If the application uses @ref BLE_GAP_DATA_LENGTH_AUTO for one or more members of + * p_dl_params, the SoftDevice will choose the highest value supported in current + * configuration and connection parameters. + * + * @param[in] conn_handle Connection handle. + * @param[in] p_dl_params Pointer to local parameters to be used in Data Length Update + * Procedure. Set any member to @ref BLE_GAP_DATA_LENGTH_AUTO to let + * the SoftDevice automatically decide the value for that member. + * Set to NULL to use automatic values for all members. + * @param[out] p_dl_limitation Pointer to limitation to be written when local device does not + * have enough resources or does not support the requested Data Length + * Update parameters. Ignored if NULL. + * + * @mscs + * @mmsc{@ref BLE_GAP_DATA_LENGTH_UPDATE_PROCEDURE_MSC} + * @endmscs + * + * @retval ::NRF_SUCCESS Successfully set Data Length Extension initiation/response parameters. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter supplied. + * @retval ::NRF_ERROR_INVALID_STATE No link has been established. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameters supplied. + * @retval ::NRF_ERROR_NOT_SUPPORTED The requested parameters are not supported by the SoftDevice. Inspect + * p_dl_limitation to see which parameter is not supported. + * @retval ::NRF_ERROR_RESOURCES The connection event length configured for this link is not sufficient for the requested parameters. + * Use @ref sd_ble_cfg_set with @ref BLE_CONN_CFG_GAP to increase the connection event length. + * Inspect p_dl_limitation to see where the limitation is. + * @retval ::NRF_ERROR_BUSY Peer has already initiated a Data Length Update Procedure. Process the + * pending @ref BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST event to respond. + */ +SVCALL(SD_BLE_GAP_DATA_LENGTH_UPDATE, uint32_t, sd_ble_gap_data_length_update(adapter_t *adapter, uint16_t conn_handle, ble_gap_data_length_params_t const *p_dl_params, ble_gap_data_length_limitation_t *p_dl_limitation)); + +/**@brief Start the Quality of Service (QoS) channel survey module. + * + * @details The channel survey module provides measurements of the energy levels on + * the Bluetooth Low Energy channels. When the module is enabled, @ref BLE_GAP_EVT_QOS_CHANNEL_SURVEY_REPORT + * events will periodically report the measured energy levels for each channel. + * + * @note The measurements are scheduled with lower priority than other Bluetooth Low Energy roles, + * Radio Timeslot API events and Flash API events. + * + * @note The channel survey module will attempt to do measurements so that the average interval + * between measurements will be interval_us. However due to the channel survey module + * having the lowest priority of all roles and modules, this may not be possible. In that + * case fewer than expected channel survey reports may be given. + * + * @note In order to use the channel survey module, @ref ble_gap_cfg_role_count_t::qos_channel_survey_role_available + * must be set. This is done using @ref sd_ble_cfg_set. + * + * @param[in] interval_us Requested average interval for the measurements and reports. See + * @ref BLE_GAP_QOS_CHANNEL_SURVEY_INTERVALS for valid ranges. If set + * to @ref BLE_GAP_QOS_CHANNEL_SURVEY_INTERVAL_CONTINUOUS, the channel + * survey role will be scheduled at every available opportunity. + * + * @retval ::NRF_SUCCESS The module is successfully started. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter supplied. interval_us is out of the + * allowed range. + * @retval ::NRF_ERROR_INVALID_STATE Trying to start the module when already running. + * @retval ::NRF_ERROR_RESOURCES The channel survey module is not available to the application. + * Set @ref ble_gap_cfg_role_count_t::qos_channel_survey_role_available using + * @ref sd_ble_cfg_set. + */ +SVCALL(SD_BLE_GAP_QOS_CHANNEL_SURVEY_START, uint32_t, sd_ble_gap_qos_channel_survey_start(adapter_t *adapter, uint32_t interval_us)); + +/**@brief Stop the Quality of Service (QoS) channel survey module. + * + * @retval ::NRF_SUCCESS The module is successfully stopped. + * @retval ::NRF_ERROR_INVALID_STATE Trying to stop the module when it is not running. + */ +SVCALL(SD_BLE_GAP_QOS_CHANNEL_SURVEY_STOP, uint32_t, sd_ble_gap_qos_channel_survey_stop(adapter_t *adapter)); + + +/** @} */ + +#ifdef __cplusplus +} +#endif +#endif // BLE_GAP_H__ + +/** + @} +*/ diff --git a/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_gatt.h b/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_gatt.h new file mode 100644 index 000000000..9cb577cc8 --- /dev/null +++ b/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_gatt.h @@ -0,0 +1,229 @@ +/* + * Copyright (c) 2013 - 2018, Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + @addtogroup BLE_GATT Generic Attribute Profile (GATT) Common + @{ + @brief Common definitions and prototypes for the GATT interfaces. + */ + +#ifndef BLE_GATT_H__ +#define BLE_GATT_H__ + +#include +#include "nrf_svc.h" +#include "nrf_error.h" +#include "ble_hci.h" +#include "ble_ranges.h" +#include "ble_types.h" +#include "ble_err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @addtogroup BLE_GATT_DEFINES Defines + * @{ */ + +/** @brief Default ATT MTU, in bytes. */ +#define BLE_GATT_ATT_MTU_DEFAULT 23 + +/**@brief Invalid Attribute Handle. */ +#define BLE_GATT_HANDLE_INVALID 0x0000 + +/**@brief First Attribute Handle. */ +#define BLE_GATT_HANDLE_START 0x0001 + +/**@brief Last Attribute Handle. */ +#define BLE_GATT_HANDLE_END 0xFFFF + +/** @defgroup BLE_GATT_TIMEOUT_SOURCES GATT Timeout sources + * @{ */ +#define BLE_GATT_TIMEOUT_SRC_PROTOCOL 0x00 /**< ATT Protocol timeout. */ +/** @} */ + +/** @defgroup BLE_GATT_WRITE_OPS GATT Write operations + * @{ */ +#define BLE_GATT_OP_INVALID 0x00 /**< Invalid Operation. */ +#define BLE_GATT_OP_WRITE_REQ 0x01 /**< Write Request. */ +#define BLE_GATT_OP_WRITE_CMD 0x02 /**< Write Command. */ +#define BLE_GATT_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ +#define BLE_GATT_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ +#define BLE_GATT_OP_EXEC_WRITE_REQ 0x05 /**< Execute Write Request. */ +/** @} */ + +/** @defgroup BLE_GATT_EXEC_WRITE_FLAGS GATT Execute Write flags + * @{ */ +#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_CANCEL 0x00 /**< Cancel prepared write. */ +#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE 0x01 /**< Execute prepared write. */ +/** @} */ + +/** @defgroup BLE_GATT_HVX_TYPES GATT Handle Value operations + * @{ */ +#define BLE_GATT_HVX_INVALID 0x00 /**< Invalid Operation. */ +#define BLE_GATT_HVX_NOTIFICATION 0x01 /**< Handle Value Notification. */ +#define BLE_GATT_HVX_INDICATION 0x02 /**< Handle Value Indication. */ +/** @} */ + +/** @defgroup BLE_GATT_STATUS_CODES GATT Status Codes + * @{ */ +#define BLE_GATT_STATUS_SUCCESS 0x0000 /**< Success. */ +#define BLE_GATT_STATUS_UNKNOWN 0x0001 /**< Unknown or not applicable status. */ +#define BLE_GATT_STATUS_ATTERR_INVALID 0x0100 /**< ATT Error: Invalid Error Code. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_HANDLE 0x0101 /**< ATT Error: Invalid Attribute Handle. */ +#define BLE_GATT_STATUS_ATTERR_READ_NOT_PERMITTED 0x0102 /**< ATT Error: Read not permitted. */ +#define BLE_GATT_STATUS_ATTERR_WRITE_NOT_PERMITTED 0x0103 /**< ATT Error: Write not permitted. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_PDU 0x0104 /**< ATT Error: Used in ATT as Invalid PDU. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHENTICATION 0x0105 /**< ATT Error: Authenticated link required. */ +#define BLE_GATT_STATUS_ATTERR_REQUEST_NOT_SUPPORTED 0x0106 /**< ATT Error: Used in ATT as Request Not Supported. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_OFFSET 0x0107 /**< ATT Error: Offset specified was past the end of the attribute. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHORIZATION 0x0108 /**< ATT Error: Used in ATT as Insufficient Authorization. */ +#define BLE_GATT_STATUS_ATTERR_PREPARE_QUEUE_FULL 0x0109 /**< ATT Error: Used in ATT as Prepare Queue Full. */ +#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_FOUND 0x010A /**< ATT Error: Used in ATT as Attribute not found. */ +#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_LONG 0x010B /**< ATT Error: Attribute cannot be read or written using read/write blob requests. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_ENC_KEY_SIZE 0x010C /**< ATT Error: Encryption key size used is insufficient. */ +#define BLE_GATT_STATUS_ATTERR_INVALID_ATT_VAL_LENGTH 0x010D /**< ATT Error: Invalid value size. */ +#define BLE_GATT_STATUS_ATTERR_UNLIKELY_ERROR 0x010E /**< ATT Error: Very unlikely error. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_ENCRYPTION 0x010F /**< ATT Error: Encrypted link required. */ +#define BLE_GATT_STATUS_ATTERR_UNSUPPORTED_GROUP_TYPE 0x0110 /**< ATT Error: Attribute type is not a supported grouping attribute. */ +#define BLE_GATT_STATUS_ATTERR_INSUF_RESOURCES 0x0111 /**< ATT Error: Encrypted link required. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_BEGIN 0x0112 /**< ATT Error: Reserved for Future Use range #1 begin. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_END 0x017F /**< ATT Error: Reserved for Future Use range #1 end. */ +#define BLE_GATT_STATUS_ATTERR_APP_BEGIN 0x0180 /**< ATT Error: Application range begin. */ +#define BLE_GATT_STATUS_ATTERR_APP_END 0x019F /**< ATT Error: Application range end. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_BEGIN 0x01A0 /**< ATT Error: Reserved for Future Use range #2 begin. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_END 0x01DF /**< ATT Error: Reserved for Future Use range #2 end. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_BEGIN 0x01E0 /**< ATT Error: Reserved for Future Use range #3 begin. */ +#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_END 0x01FC /**< ATT Error: Reserved for Future Use range #3 end. */ +#define BLE_GATT_STATUS_ATTERR_CPS_WRITE_REQ_REJECTED 0x01FC /**< ATT Common Profile and Service Error: Write request rejected. */ +#define BLE_GATT_STATUS_ATTERR_CPS_CCCD_CONFIG_ERROR 0x01FD /**< ATT Common Profile and Service Error: Client Characteristic Configuration Descriptor improperly configured. */ +#define BLE_GATT_STATUS_ATTERR_CPS_PROC_ALR_IN_PROG 0x01FE /**< ATT Common Profile and Service Error: Procedure Already in Progress. */ +#define BLE_GATT_STATUS_ATTERR_CPS_OUT_OF_RANGE 0x01FF /**< ATT Common Profile and Service Error: Out Of Range. */ +/** @} */ + + +/** @defgroup BLE_GATT_CPF_FORMATS Characteristic Presentation Formats + * @note Found at http://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.gatt.characteristic_presentation_format.xml + * @{ */ +#define BLE_GATT_CPF_FORMAT_RFU 0x00 /**< Reserved For Future Use. */ +#define BLE_GATT_CPF_FORMAT_BOOLEAN 0x01 /**< Boolean. */ +#define BLE_GATT_CPF_FORMAT_2BIT 0x02 /**< Unsigned 2-bit integer. */ +#define BLE_GATT_CPF_FORMAT_NIBBLE 0x03 /**< Unsigned 4-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT8 0x04 /**< Unsigned 8-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT12 0x05 /**< Unsigned 12-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT16 0x06 /**< Unsigned 16-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT24 0x07 /**< Unsigned 24-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT32 0x08 /**< Unsigned 32-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT48 0x09 /**< Unsigned 48-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT64 0x0A /**< Unsigned 64-bit integer. */ +#define BLE_GATT_CPF_FORMAT_UINT128 0x0B /**< Unsigned 128-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT8 0x0C /**< Signed 2-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT12 0x0D /**< Signed 12-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT16 0x0E /**< Signed 16-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT24 0x0F /**< Signed 24-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT32 0x10 /**< Signed 32-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT48 0x11 /**< Signed 48-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT64 0x12 /**< Signed 64-bit integer. */ +#define BLE_GATT_CPF_FORMAT_SINT128 0x13 /**< Signed 128-bit integer. */ +#define BLE_GATT_CPF_FORMAT_FLOAT32 0x14 /**< IEEE-754 32-bit floating point. */ +#define BLE_GATT_CPF_FORMAT_FLOAT64 0x15 /**< IEEE-754 64-bit floating point. */ +#define BLE_GATT_CPF_FORMAT_SFLOAT 0x16 /**< IEEE-11073 16-bit SFLOAT. */ +#define BLE_GATT_CPF_FORMAT_FLOAT 0x17 /**< IEEE-11073 32-bit FLOAT. */ +#define BLE_GATT_CPF_FORMAT_DUINT16 0x18 /**< IEEE-20601 format. */ +#define BLE_GATT_CPF_FORMAT_UTF8S 0x19 /**< UTF-8 string. */ +#define BLE_GATT_CPF_FORMAT_UTF16S 0x1A /**< UTF-16 string. */ +#define BLE_GATT_CPF_FORMAT_STRUCT 0x1B /**< Opaque Structure. */ +/** @} */ + +/** @defgroup BLE_GATT_CPF_NAMESPACES GATT Bluetooth Namespaces + * @{ + */ +#define BLE_GATT_CPF_NAMESPACE_BTSIG 0x01 /**< Bluetooth SIG defined Namespace. */ +#define BLE_GATT_CPF_NAMESPACE_DESCRIPTION_UNKNOWN 0x0000 /**< Namespace Description Unknown. */ +/** @} */ + +/** @} */ + +/** @addtogroup BLE_GATT_STRUCTURES Structures + * @{ */ + +/** + * @brief BLE GATT connection configuration parameters, set with @ref sd_ble_cfg_set. + * + * @retval ::NRF_ERROR_INVALID_PARAM att_mtu is smaller than @ref BLE_GATT_ATT_MTU_DEFAULT. + */ +typedef struct +{ + uint16_t att_mtu; /**< Maximum size of ATT packet the SoftDevice can send or receive. + The default and minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. + @mscs + @mmsc{@ref BLE_GATTC_MTU_EXCHANGE} + @mmsc{@ref BLE_GATTS_MTU_EXCHANGE} + @endmscs + */ +} ble_gatt_conn_cfg_t; + +/**@brief GATT Characteristic Properties. */ +typedef struct +{ + /* Standard properties */ + uint8_t broadcast :1; /**< Broadcasting of the value permitted. */ + uint8_t read :1; /**< Reading the value permitted. */ + uint8_t write_wo_resp :1; /**< Writing the value with Write Command permitted. */ + uint8_t write :1; /**< Writing the value with Write Request permitted. */ + uint8_t notify :1; /**< Notification of the value permitted. */ + uint8_t indicate :1; /**< Indications of the value permitted. */ + uint8_t auth_signed_wr :1; /**< Writing the value with Signed Write Command permitted. */ +} ble_gatt_char_props_t; + +/**@brief GATT Characteristic Extended Properties. */ +typedef struct +{ + /* Extended properties */ + uint8_t reliable_wr :1; /**< Writing the value with Queued Write operations permitted. */ + uint8_t wr_aux :1; /**< Writing the Characteristic User Description descriptor permitted. */ +} ble_gatt_char_ext_props_t; + +/** @} */ + +#ifdef __cplusplus +} +#endif +#endif // BLE_GATT_H__ + +/** @} */ diff --git a/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_gattc.h b/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_gattc.h new file mode 100644 index 000000000..d39678d66 --- /dev/null +++ b/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_gattc.h @@ -0,0 +1,715 @@ +/* + * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + @addtogroup BLE_GATTC Generic Attribute Profile (GATT) Client + @{ + @brief Definitions and prototypes for the GATT Client interface. + */ + +#ifndef BLE_GATTC_H__ +#define BLE_GATTC_H__ + +#include +#include "nrf.h" +#include "nrf_svc.h" +#include "nrf_error.h" +#include "ble_ranges.h" +#include "ble_types.h" +#include "ble_err.h" +#include "ble_gatt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @addtogroup BLE_GATTC_ENUMERATIONS Enumerations + * @{ */ + +/**@brief GATTC API SVC numbers. */ +enum BLE_GATTC_SVCS +{ + SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER = BLE_GATTC_SVC_BASE, /**< Primary Service Discovery. */ + SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, /**< Relationship Discovery. */ + SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, /**< Characteristic Discovery. */ + SD_BLE_GATTC_DESCRIPTORS_DISCOVER, /**< Characteristic Descriptor Discovery. */ + SD_BLE_GATTC_ATTR_INFO_DISCOVER, /**< Attribute Information Discovery. */ + SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, /**< Read Characteristic Value by UUID. */ + SD_BLE_GATTC_READ, /**< Generic read. */ + SD_BLE_GATTC_CHAR_VALUES_READ, /**< Read multiple Characteristic Values. */ + SD_BLE_GATTC_WRITE, /**< Generic write. */ + SD_BLE_GATTC_HV_CONFIRM, /**< Handle Value Confirmation. */ + SD_BLE_GATTC_EXCHANGE_MTU_REQUEST, /**< Exchange MTU Request. */ +}; + +/** + * @brief GATT Client Event IDs. + */ +enum BLE_GATTC_EVTS +{ + BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP = BLE_GATTC_EVT_BASE, /**< Primary Service Discovery Response event. \n See @ref ble_gattc_evt_prim_srvc_disc_rsp_t. */ + BLE_GATTC_EVT_REL_DISC_RSP, /**< Relationship Discovery Response event. \n See @ref ble_gattc_evt_rel_disc_rsp_t. */ + BLE_GATTC_EVT_CHAR_DISC_RSP, /**< Characteristic Discovery Response event. \n See @ref ble_gattc_evt_char_disc_rsp_t. */ + BLE_GATTC_EVT_DESC_DISC_RSP, /**< Descriptor Discovery Response event. \n See @ref ble_gattc_evt_desc_disc_rsp_t. */ + BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, /**< Attribute Information Response event. \n See @ref ble_gattc_evt_attr_info_disc_rsp_t. */ + BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP, /**< Read By UUID Response event. \n See @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t. */ + BLE_GATTC_EVT_READ_RSP, /**< Read Response event. \n See @ref ble_gattc_evt_read_rsp_t. */ + BLE_GATTC_EVT_CHAR_VALS_READ_RSP, /**< Read multiple Response event. \n See @ref ble_gattc_evt_char_vals_read_rsp_t. */ + BLE_GATTC_EVT_WRITE_RSP, /**< Write Response event. \n See @ref ble_gattc_evt_write_rsp_t. */ + BLE_GATTC_EVT_HVX, /**< Handle Value Notification or Indication event. \n Confirm indication with @ref sd_ble_gattc_hv_confirm. \n See @ref ble_gattc_evt_hvx_t. */ + BLE_GATTC_EVT_EXCHANGE_MTU_RSP, /**< Exchange MTU Response event. \n See @ref ble_gattc_evt_exchange_mtu_rsp_t. */ + BLE_GATTC_EVT_TIMEOUT, /**< Timeout event. \n See @ref ble_gattc_evt_timeout_t. */ + BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE /**< Write without Response transmission complete. \n See @ref ble_gattc_evt_write_cmd_tx_complete_t. */ +}; + +/** @} */ + +/** @addtogroup BLE_GATTC_DEFINES Defines + * @{ */ + +/** @defgroup BLE_ERRORS_GATTC SVC return values specific to GATTC + * @{ */ +#define BLE_ERROR_GATTC_PROC_NOT_PERMITTED (NRF_GATTC_ERR_BASE + 0x000) /**< Procedure not Permitted. */ +/** @} */ + +/** @defgroup BLE_GATTC_ATTR_INFO_FORMAT Attribute Information Formats + * @{ */ +#define BLE_GATTC_ATTR_INFO_FORMAT_16BIT 1 /**< 16-bit Attribute Information Format. */ +#define BLE_GATTC_ATTR_INFO_FORMAT_128BIT 2 /**< 128-bit Attribute Information Format. */ +/** @} */ + +/** @defgroup BLE_GATTC_DEFAULTS GATT Client defaults + * @{ */ +#define BLE_GATTC_WRITE_CMD_TX_QUEUE_SIZE_DEFAULT 1 /**< Default number of Write without Response that can be queued for transmission. */ +/** @} */ + +/** @} */ + +/** @addtogroup BLE_GATTC_STRUCTURES Structures + * @{ */ + +/** + * @brief BLE GATTC connection configuration parameters, set with @ref sd_ble_cfg_set. + */ +typedef struct +{ + uint8_t write_cmd_tx_queue_size; /**< The guaranteed minimum number of Write without Response that can be queued for transmission. + The default value is @ref BLE_GATTC_WRITE_CMD_TX_QUEUE_SIZE_DEFAULT */ +} ble_gattc_conn_cfg_t; + +/**@brief Operation Handle Range. */ +typedef struct +{ + uint16_t start_handle; /**< Start Handle. */ + uint16_t end_handle; /**< End Handle. */ +} ble_gattc_handle_range_t; + + +/**@brief GATT service. */ +typedef struct +{ + ble_uuid_t uuid; /**< Service UUID. */ + ble_gattc_handle_range_t handle_range; /**< Service Handle Range. */ +} ble_gattc_service_t; + + +/**@brief GATT include. */ +typedef struct +{ + uint16_t handle; /**< Include Handle. */ + ble_gattc_service_t included_srvc; /**< Handle of the included service. */ +} ble_gattc_include_t; + + +/**@brief GATT characteristic. */ +typedef struct +{ + ble_uuid_t uuid; /**< Characteristic UUID. */ + ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ + uint8_t char_ext_props : 1; /**< Extended properties present. */ + uint16_t handle_decl; /**< Handle of the Characteristic Declaration. */ + uint16_t handle_value; /**< Handle of the Characteristic Value. */ +} ble_gattc_char_t; + + +/**@brief GATT descriptor. */ +typedef struct +{ + uint16_t handle; /**< Descriptor Handle. */ + ble_uuid_t uuid; /**< Descriptor UUID. */ +} ble_gattc_desc_t; + + +/**@brief Write Parameters. */ +typedef struct +{ + uint8_t write_op; /**< Write Operation to be performed, see @ref BLE_GATT_WRITE_OPS. */ + uint8_t flags; /**< Flags, see @ref BLE_GATT_EXEC_WRITE_FLAGS. */ + uint16_t handle; /**< Handle to the attribute to be written. */ + uint16_t offset; /**< Offset in bytes. @note For WRITE_CMD and WRITE_REQ, offset must be 0. */ + uint16_t len; /**< Length of data in bytes. */ + uint8_t const *p_value; /**< Pointer to the value data. */ +} ble_gattc_write_params_t; + +/**@brief Attribute Information for 16-bit Attribute UUID. */ +typedef struct +{ + uint16_t handle; /**< Attribute handle. */ + ble_uuid_t uuid; /**< 16-bit Attribute UUID. */ +} ble_gattc_attr_info16_t; + +/**@brief Attribute Information for 128-bit Attribute UUID. */ +typedef struct +{ + uint16_t handle; /**< Attribute handle. */ + ble_uuid128_t uuid; /**< 128-bit Attribute UUID. */ +} ble_gattc_attr_info128_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Service count. */ + ble_gattc_service_t services[1]; /**< Service data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_prim_srvc_disc_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_REL_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Include count. */ + ble_gattc_include_t includes[1]; /**< Include data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_rel_disc_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Characteristic count. */ + ble_gattc_char_t chars[1]; /**< Characteristic data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_char_disc_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_DESC_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Descriptor count. */ + ble_gattc_desc_t descs[1]; /**< Descriptor data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_desc_disc_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP. */ +typedef struct +{ + uint16_t count; /**< Attribute count. */ + uint8_t format; /**< Attribute information format, see @ref BLE_GATTC_ATTR_INFO_FORMAT. */ + union { + ble_gattc_attr_info16_t attr_info16[1]; /**< Attribute information for 16-bit Attribute UUID. + @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ + ble_gattc_attr_info128_t attr_info128[1]; /**< Attribute information for 128-bit Attribute UUID. + @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ + } info; /**< Attribute information union. */ +} ble_gattc_evt_attr_info_disc_rsp_t; + +/**@brief GATT read by UUID handle value pair. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + uint8_t *p_value; /**< Pointer to the Attribute Value, length is available in @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t::value_len. */ +} ble_gattc_handle_value_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP. */ +typedef struct +{ + uint16_t count; /**< Handle-Value Pair Count. */ + uint16_t value_len; /**< Length of the value in Handle-Value(s) list. */ + uint8_t handle_value[1]; /**< Handle-Value(s) list. To iterate through the list use @ref sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter. + @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_char_val_by_uuid_read_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_READ_RSP. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + uint16_t offset; /**< Offset of the attribute data. */ + uint16_t len; /**< Attribute data length. */ + uint8_t data[1]; /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_read_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP. */ +typedef struct +{ + uint16_t len; /**< Concatenated Attribute values length. */ + uint8_t values[1]; /**< Attribute values. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_char_vals_read_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_WRITE_RSP. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + uint8_t write_op; /**< Type of write operation, see @ref BLE_GATT_WRITE_OPS. */ + uint16_t offset; /**< Data offset. */ + uint16_t len; /**< Data length. */ + uint8_t data[1]; /**< Data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_write_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_HVX. */ +typedef struct +{ + uint16_t handle; /**< Handle to which the HVx operation applies. */ + uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ + uint16_t len; /**< Attribute data length. */ + uint8_t data[1]; /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gattc_evt_hvx_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. */ +typedef struct +{ + uint16_t server_rx_mtu; /**< Server RX MTU size. */ +} ble_gattc_evt_exchange_mtu_rsp_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_TIMEOUT. */ +typedef struct +{ + uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ +} ble_gattc_evt_timeout_t; + +/**@brief Event structure for @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE. */ +typedef struct +{ + uint8_t count; /**< Number of write without response transmissions completed. */ +} ble_gattc_evt_write_cmd_tx_complete_t; + +/**@brief GATTC event structure. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which event occurred. */ + uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ + uint16_t error_handle; /**< In case of error: The handle causing the error. In all other cases @ref BLE_GATT_HANDLE_INVALID. */ + union + { + ble_gattc_evt_prim_srvc_disc_rsp_t prim_srvc_disc_rsp; /**< Primary Service Discovery Response Event Parameters. */ + ble_gattc_evt_rel_disc_rsp_t rel_disc_rsp; /**< Relationship Discovery Response Event Parameters. */ + ble_gattc_evt_char_disc_rsp_t char_disc_rsp; /**< Characteristic Discovery Response Event Parameters. */ + ble_gattc_evt_desc_disc_rsp_t desc_disc_rsp; /**< Descriptor Discovery Response Event Parameters. */ + ble_gattc_evt_char_val_by_uuid_read_rsp_t char_val_by_uuid_read_rsp; /**< Characteristic Value Read by UUID Response Event Parameters. */ + ble_gattc_evt_read_rsp_t read_rsp; /**< Read Response Event Parameters. */ + ble_gattc_evt_char_vals_read_rsp_t char_vals_read_rsp; /**< Characteristic Values Read Response Event Parameters. */ + ble_gattc_evt_write_rsp_t write_rsp; /**< Write Response Event Parameters. */ + ble_gattc_evt_hvx_t hvx; /**< Handle Value Notification/Indication Event Parameters. */ + ble_gattc_evt_exchange_mtu_rsp_t exchange_mtu_rsp; /**< Exchange MTU Response Event Parameters. */ + ble_gattc_evt_timeout_t timeout; /**< Timeout Event Parameters. */ + ble_gattc_evt_attr_info_disc_rsp_t attr_info_disc_rsp; /**< Attribute Information Discovery Event Parameters. */ + ble_gattc_evt_write_cmd_tx_complete_t write_cmd_tx_complete; /**< Write without Response transmission complete Event Parameters. */ + } params; /**< Event Parameters. @note Only valid if @ref gatt_status == @ref BLE_GATT_STATUS_SUCCESS. */ +} ble_gattc_evt_t; +/** @} */ + +/** @addtogroup BLE_GATTC_FUNCTIONS Functions + * @{ */ + +/**@brief Initiate or continue a GATT Primary Service Discovery procedure. + * + * @details This function initiates or resumes a Primary Service discovery procedure, starting from the supplied handle. + * If the last service has not been reached, this function must be called again with an updated start handle value to continue the search. + * + * @note If any of the discovered services have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with + * type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. + * + * @events + * @event{@ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_PRIM_SRVC_DISC_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] start_handle Handle to start searching from. + * @param[in] p_srvc_uuid Pointer to the service UUID to be found. If it is NULL, all primary services will be returned. + * + * @retval ::NRF_SUCCESS Successfully started or resumed the Primary Service Discovery procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER, uint32_t, sd_ble_gattc_primary_services_discover(adapter_t *adapter, uint16_t conn_handle, uint16_t start_handle, ble_uuid_t const *p_srvc_uuid)); + + +/**@brief Initiate or continue a GATT Relationship Discovery procedure. + * + * @details This function initiates or resumes the Find Included Services sub-procedure. If the last included service has not been reached, + * this must be called again with an updated handle range to continue the search. + * + * @events + * @event{@ref BLE_GATTC_EVT_REL_DISC_RSP} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_REL_DISC_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. + * + * @retval ::NRF_SUCCESS Successfully started or resumed the Relationship Discovery procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, uint32_t, sd_ble_gattc_relationships_discover(adapter_t *adapter, uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); + + +/**@brief Initiate or continue a GATT Characteristic Discovery procedure. + * + * @details This function initiates or resumes a Characteristic discovery procedure. If the last Characteristic has not been reached, + * this must be called again with an updated handle range to continue the discovery. + * + * @note If any of the discovered characteristics have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with + * type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. + * + * @events + * @event{@ref BLE_GATTC_EVT_CHAR_DISC_RSP} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_CHAR_DISC_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. + * + * @retval ::NRF_SUCCESS Successfully started or resumed the Characteristic Discovery procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, uint32_t, sd_ble_gattc_characteristics_discover(adapter_t *adapter, uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); + + +/**@brief Initiate or continue a GATT Characteristic Descriptor Discovery procedure. + * + * @details This function initiates or resumes a Characteristic Descriptor discovery procedure. If the last Descriptor has not been reached, + * this must be called again with an updated handle range to continue the discovery. + * + * @events + * @event{@ref BLE_GATTC_EVT_DESC_DISC_RSP} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_DESC_DISC_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handle_range A pointer to the range of handles of the Characteristic to perform this procedure on. + * + * @retval ::NRF_SUCCESS Successfully started or resumed the Descriptor Discovery procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_DESCRIPTORS_DISCOVER, uint32_t, sd_ble_gattc_descriptors_discover(adapter_t *adapter, uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); + + +/**@brief Initiate or continue a GATT Read using Characteristic UUID procedure. + * + * @details This function initiates or resumes a Read using Characteristic UUID procedure. If the last Characteristic has not been reached, + * this must be called again with an updated handle range to continue the discovery. + * + * @events + * @event{@ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_READ_UUID_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_uuid Pointer to a Characteristic value UUID to read. + * @param[in] p_handle_range A pointer to the range of handles to perform this procedure on. + * + * @retval ::NRF_SUCCESS Successfully started or resumed the Read using Characteristic UUID procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, uint32_t, sd_ble_gattc_char_value_by_uuid_read(adapter_t *adapter, uint16_t conn_handle, ble_uuid_t const *p_uuid, ble_gattc_handle_range_t const *p_handle_range)); + + +/**@brief Initiate or continue a GATT Read (Long) Characteristic or Descriptor procedure. + * + * @details This function initiates or resumes a GATT Read (Long) Characteristic or Descriptor procedure. If the Characteristic or Descriptor + * to be read is longer than ATT_MTU - 1, this function must be called multiple times with appropriate offset to read the + * complete value. + * + * @events + * @event{@ref BLE_GATTC_EVT_READ_RSP} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_VALUE_READ_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] handle The handle of the attribute to be read. + * @param[in] offset Offset into the attribute value to be read. + * + * @retval ::NRF_SUCCESS Successfully started or resumed the Read (Long) procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_READ, uint32_t, sd_ble_gattc_read(adapter_t *adapter, uint16_t conn_handle, uint16_t handle, uint16_t offset)); + + +/**@brief Initiate a GATT Read Multiple Characteristic Values procedure. + * + * @details This function initiates a GATT Read Multiple Characteristic Values procedure. + * + * @events + * @event{@ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_READ_MULT_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handles A pointer to the handle(s) of the attribute(s) to be read. + * @param[in] handle_count The number of handles in p_handles. + * + * @retval ::NRF_SUCCESS Successfully started the Read Multiple Characteristic Values procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_CHAR_VALUES_READ, uint32_t, sd_ble_gattc_char_values_read(adapter_t *adapter, uint16_t conn_handle, uint16_t const *p_handles, uint16_t handle_count)); + + +/**@brief Perform a Write (Characteristic Value or Descriptor, with or without response, signed or not, long or reliable) procedure. + * + * @details This function can perform all write procedures described in GATT. + * + * @note Only one write with response procedure can be ongoing per connection at a time. + * If the application tries to write with response while another write with response procedure is ongoing, + * the function call will return @ref NRF_ERROR_BUSY. + * A @ref BLE_GATTC_EVT_WRITE_RSP event will be issued as soon as the write response arrives from the peer. + * + * @note The number of Write without Response that can be queued is configured by @ref ble_gattc_conn_cfg_t::write_cmd_tx_queue_size + * When the queue is full, the function call will return @ref NRF_ERROR_RESOURCES. + * A @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event will be issued as soon as the transmission of the write without response is complete. + * + * @note The application can keep track of the available queue element count for writes without responses by following the procedure below: + * - Store initial queue element count in a variable. + * - Decrement the variable, which stores the currently available queue element count, by one when a call to this function returns @ref NRF_SUCCESS. + * - Increment the variable, which stores the current available queue element count, by the count variable in @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event. + * + * @events + * @event{@ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE, Write without response transmission complete.} + * @event{@ref BLE_GATTC_EVT_WRITE_RSP, Write response received from the peer.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_VALUE_WRITE_WITHOUT_RESP_MSC} + * @mmsc{@ref BLE_GATTC_VALUE_WRITE_MSC} + * @mmsc{@ref BLE_GATTC_VALUE_LONG_WRITE_MSC} + * @mmsc{@ref BLE_GATTC_VALUE_RELIABLE_WRITE_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_write_params A pointer to a write parameters structure. + * + * @retval ::NRF_SUCCESS Successfully started the Write procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + * @retval ::NRF_ERROR_BUSY For write with response, procedure already in progress. Wait for a @ref BLE_GATTC_EVT_WRITE_RSP event and retry. + * @retval ::NRF_ERROR_RESOURCES Too many writes without responses queued. + * Wait for a @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event and retry. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_WRITE, uint32_t, sd_ble_gattc_write(adapter_t *adapter, uint16_t conn_handle, ble_gattc_write_params_t const *p_write_params)); + + +/**@brief Send a Handle Value Confirmation to the GATT Server. + * + * @mscs + * @mmsc{@ref BLE_GATTC_HVI_MSC} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] handle The handle of the attribute in the indication. + * + * @retval ::NRF_SUCCESS Successfully queued the Handle Value Confirmation for transmission. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no Indication pending to be confirmed. + * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_HV_CONFIRM, uint32_t, sd_ble_gattc_hv_confirm(adapter_t *adapter, uint16_t conn_handle, uint16_t handle)); + +/**@brief Discovers information about a range of attributes on a GATT server. + * + * @events + * @event{@ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, Generated when information about a range of attributes has been received.} + * @endevents + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] p_handle_range The range of handles to request information about. + * + * @retval ::NRF_SUCCESS Successfully started an attribute information discovery procedure. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_ATTR_INFO_DISCOVER, uint32_t, sd_ble_gattc_attr_info_discover(adapter_t *adapter, uint16_t conn_handle, ble_gattc_handle_range_t const * p_handle_range)); + +/**@brief Start an ATT_MTU exchange by sending an Exchange MTU Request to the server. + * + * @details The SoftDevice sets ATT_MTU to the minimum of: + * - The Client RX MTU value, and + * - The Server RX MTU value from @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. + * + * However, the SoftDevice never sets ATT_MTU lower than @ref BLE_GATT_ATT_MTU_DEFAULT. + * + * @events + * @event{@ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTC_MTU_EXCHANGE} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] client_rx_mtu Client RX MTU size. + * - The minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. + * - The maximum value is @ref ble_gatt_conn_cfg_t::att_mtu in the connection configuration + used for this connection. + * - The value must be equal to Server RX MTU size given in @ref sd_ble_gatts_exchange_mtu_reply + * if an ATT_MTU exchange has already been performed in the other direction. + * + * @retval ::NRF_SUCCESS Successfully sent request to the server. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state or an ATT_MTU exchange was already requested once. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid Client RX MTU size supplied. + * @retval ::NRF_ERROR_BUSY Client procedure already in progress. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTC_EXCHANGE_MTU_REQUEST, uint32_t, sd_ble_gattc_exchange_mtu_request(adapter_t *adapter, uint16_t conn_handle, uint16_t client_rx_mtu)); + +/**@brief Iterate through Handle-Value(s) list in @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. + * + * @param[in] p_gattc_evt Pointer to event buffer containing @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. + * @note If the buffer contains different event, behavior is undefined. + * @param[in,out] p_iter Iterator, points to @ref ble_gattc_handle_value_t structure that will be filled in with + * the next Handle-Value pair in each iteration. If the function returns other than + * @ref NRF_SUCCESS, it will not be changed. + * - To start iteration, initialize the structure to zero. + * - To continue, pass the value from previous iteration. + * + * \code + * ble_gattc_handle_value_t iter; + * memset(&iter, 0, sizeof(ble_gattc_handle_value_t)); + * while (sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(&ble_evt.evt.gattc_evt, &iter) == NRF_SUCCESS) + * { + * app_handle = iter.handle; + * memcpy(app_value, iter.p_value, ble_evt.evt.gattc_evt.params.char_val_by_uuid_read_rsp.value_len); + * } + * \endcode + * + * @retval ::NRF_SUCCESS Successfully retrieved the next Handle-Value pair. + * @retval ::NRF_ERROR_NOT_FOUND No more Handle-Value pairs available in the list. + */ +static inline uint32_t sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(adapter_t *adapter, ble_gattc_evt_t *p_gattc_evt, ble_gattc_handle_value_t *p_iter); + +/** @} */ + +#ifndef SUPPRESS_INLINE_IMPLEMENTATION + +static inline uint32_t sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(adapter_t *adapter, ble_gattc_evt_t *p_gattc_evt, ble_gattc_handle_value_t *p_iter) +{ + uint32_t value_len = p_gattc_evt->params.char_val_by_uuid_read_rsp.value_len; + uint8_t *p_first = p_gattc_evt->params.char_val_by_uuid_read_rsp.handle_value; + uint8_t *p_next = p_iter->p_value ? p_iter->p_value + value_len : p_first; + + if ((p_next - p_first) / (sizeof(uint16_t) + value_len) < p_gattc_evt->params.char_val_by_uuid_read_rsp.count) + { + p_iter->handle = (uint16_t)p_next[1] << 8 | p_next[0]; + p_iter->p_value = p_next + sizeof(uint16_t); + return NRF_SUCCESS; + } + else + { + return NRF_ERROR_NOT_FOUND; + } +} + +#endif /* SUPPRESS_INLINE_IMPLEMENTATION */ + +#ifdef __cplusplus +} +#endif +#endif /* BLE_GATTC_H__ */ + +/** + @} +*/ diff --git a/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_gatts.h b/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_gatts.h new file mode 100644 index 000000000..bff02a2f4 --- /dev/null +++ b/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_gatts.h @@ -0,0 +1,845 @@ +/* + * Copyright (c) 2011 - 2018, Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + @addtogroup BLE_GATTS Generic Attribute Profile (GATT) Server + @{ + @brief Definitions and prototypes for the GATTS interface. + */ + +#ifndef BLE_GATTS_H__ +#define BLE_GATTS_H__ + +#include +#include "nrf_svc.h" +#include "nrf_error.h" +#include "ble_hci.h" +#include "ble_ranges.h" +#include "ble_types.h" +#include "ble_err.h" +#include "ble_gatt.h" +#include "ble_gap.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @addtogroup BLE_GATTS_ENUMERATIONS Enumerations + * @{ */ + +/** + * @brief GATTS API SVC numbers. + */ +enum BLE_GATTS_SVCS +{ + SD_BLE_GATTS_SERVICE_ADD = BLE_GATTS_SVC_BASE, /**< Add a service. */ + SD_BLE_GATTS_INCLUDE_ADD, /**< Add an included service. */ + SD_BLE_GATTS_CHARACTERISTIC_ADD, /**< Add a characteristic. */ + SD_BLE_GATTS_DESCRIPTOR_ADD, /**< Add a generic attribute. */ + SD_BLE_GATTS_VALUE_SET, /**< Set an attribute value. */ + SD_BLE_GATTS_VALUE_GET, /**< Get an attribute value. */ + SD_BLE_GATTS_HVX, /**< Handle Value Notification or Indication. */ + SD_BLE_GATTS_SERVICE_CHANGED, /**< Perform a Service Changed Indication to one or more peers. */ + SD_BLE_GATTS_RW_AUTHORIZE_REPLY, /**< Reply to an authorization request for a read or write operation on one or more attributes. */ + SD_BLE_GATTS_SYS_ATTR_SET, /**< Set the persistent system attributes for a connection. */ + SD_BLE_GATTS_SYS_ATTR_GET, /**< Retrieve the persistent system attributes. */ + SD_BLE_GATTS_INITIAL_USER_HANDLE_GET, /**< Retrieve the first valid user handle. */ + SD_BLE_GATTS_ATTR_GET, /**< Retrieve the UUID and/or metadata of an attribute. */ + SD_BLE_GATTS_EXCHANGE_MTU_REPLY /**< Reply to Exchange MTU Request. */ +}; + +/** + * @brief GATT Server Event IDs. + */ +enum BLE_GATTS_EVTS +{ + BLE_GATTS_EVT_WRITE = BLE_GATTS_EVT_BASE, /**< Write operation performed. \n See @ref ble_gatts_evt_write_t. */ + BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST, /**< Read/Write Authorization request. \n Reply with @ref sd_ble_gatts_rw_authorize_reply. \n See @ref ble_gatts_evt_rw_authorize_request_t. */ + BLE_GATTS_EVT_SYS_ATTR_MISSING, /**< A persistent system attribute access is pending. \n Respond with @ref sd_ble_gatts_sys_attr_set. \n See @ref ble_gatts_evt_sys_attr_missing_t. */ + BLE_GATTS_EVT_HVC, /**< Handle Value Confirmation. \n See @ref ble_gatts_evt_hvc_t. */ + BLE_GATTS_EVT_SC_CONFIRM, /**< Service Changed Confirmation. \n No additional event structure applies. */ + BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST, /**< Exchange MTU Request. \n Reply with @ref sd_ble_gatts_exchange_mtu_reply. \n See @ref ble_gatts_evt_exchange_mtu_request_t. */ + BLE_GATTS_EVT_TIMEOUT, /**< Peer failed to respond to an ATT request in time. \n See @ref ble_gatts_evt_timeout_t. */ + BLE_GATTS_EVT_HVN_TX_COMPLETE /**< Handle Value Notification transmission complete. \n See @ref ble_gatts_evt_hvn_tx_complete_t. */ +}; + +/**@brief GATTS Configuration IDs. + * + * IDs that uniquely identify a GATTS configuration. + */ +enum BLE_GATTS_CFGS +{ + BLE_GATTS_CFG_SERVICE_CHANGED = BLE_GATTS_CFG_BASE, /**< Service changed configuration. */ + BLE_GATTS_CFG_ATTR_TAB_SIZE, /**< Attribute table size configuration. */ +}; + +/** @} */ + +/** @addtogroup BLE_GATTS_DEFINES Defines + * @{ */ + +/** @defgroup BLE_ERRORS_GATTS SVC return values specific to GATTS + * @{ */ +#define BLE_ERROR_GATTS_INVALID_ATTR_TYPE (NRF_GATTS_ERR_BASE + 0x000) /**< Invalid attribute type. */ +#define BLE_ERROR_GATTS_SYS_ATTR_MISSING (NRF_GATTS_ERR_BASE + 0x001) /**< System Attributes missing. */ +/** @} */ + +/** @defgroup BLE_GATTS_ATTR_LENS_MAX Maximum attribute lengths + * @{ */ +#define BLE_GATTS_FIX_ATTR_LEN_MAX (510) /**< Maximum length for fixed length Attribute Values. */ +#define BLE_GATTS_VAR_ATTR_LEN_MAX (512) /**< Maximum length for variable length Attribute Values. */ +/** @} */ + +/** @defgroup BLE_GATTS_SRVC_TYPES GATT Server Service Types + * @{ */ +#define BLE_GATTS_SRVC_TYPE_INVALID 0x00 /**< Invalid Service Type. */ +#define BLE_GATTS_SRVC_TYPE_PRIMARY 0x01 /**< Primary Service. */ +#define BLE_GATTS_SRVC_TYPE_SECONDARY 0x02 /**< Secondary Type. */ +/** @} */ + + +/** @defgroup BLE_GATTS_ATTR_TYPES GATT Server Attribute Types + * @{ */ +#define BLE_GATTS_ATTR_TYPE_INVALID 0x00 /**< Invalid Attribute Type. */ +#define BLE_GATTS_ATTR_TYPE_PRIM_SRVC_DECL 0x01 /**< Primary Service Declaration. */ +#define BLE_GATTS_ATTR_TYPE_SEC_SRVC_DECL 0x02 /**< Secondary Service Declaration. */ +#define BLE_GATTS_ATTR_TYPE_INC_DECL 0x03 /**< Include Declaration. */ +#define BLE_GATTS_ATTR_TYPE_CHAR_DECL 0x04 /**< Characteristic Declaration. */ +#define BLE_GATTS_ATTR_TYPE_CHAR_VAL 0x05 /**< Characteristic Value. */ +#define BLE_GATTS_ATTR_TYPE_DESC 0x06 /**< Descriptor. */ +#define BLE_GATTS_ATTR_TYPE_OTHER 0x07 /**< Other, non-GATT specific type. */ +/** @} */ + + +/** @defgroup BLE_GATTS_OPS GATT Server Operations + * @{ */ +#define BLE_GATTS_OP_INVALID 0x00 /**< Invalid Operation. */ +#define BLE_GATTS_OP_WRITE_REQ 0x01 /**< Write Request. */ +#define BLE_GATTS_OP_WRITE_CMD 0x02 /**< Write Command. */ +#define BLE_GATTS_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ +#define BLE_GATTS_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ +#define BLE_GATTS_OP_EXEC_WRITE_REQ_CANCEL 0x05 /**< Execute Write Request: Cancel all prepared writes. */ +#define BLE_GATTS_OP_EXEC_WRITE_REQ_NOW 0x06 /**< Execute Write Request: Immediately execute all prepared writes. */ +/** @} */ + +/** @defgroup BLE_GATTS_VLOCS GATT Value Locations + * @{ */ +#define BLE_GATTS_VLOC_INVALID 0x00 /**< Invalid Location. */ +#define BLE_GATTS_VLOC_STACK 0x01 /**< Attribute Value is located in stack memory, no user memory is required. */ +#define BLE_GATTS_VLOC_USER 0x02 /**< Attribute Value is located in user memory. This requires the user to maintain a valid buffer through the lifetime of the attribute, since the stack + will read and write directly to the memory using the pointer provided in the APIs. There are no alignment requirements for the buffer. */ +/** @} */ + +/** @defgroup BLE_GATTS_AUTHORIZE_TYPES GATT Server Authorization Types + * @{ */ +#define BLE_GATTS_AUTHORIZE_TYPE_INVALID 0x00 /**< Invalid Type. */ +#define BLE_GATTS_AUTHORIZE_TYPE_READ 0x01 /**< Authorize a Read Operation. */ +#define BLE_GATTS_AUTHORIZE_TYPE_WRITE 0x02 /**< Authorize a Write Request Operation. */ +/** @} */ + +/** @defgroup BLE_GATTS_SYS_ATTR_FLAGS System Attribute Flags + * @{ */ +#define BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS (1 << 0) /**< Restrict system attributes to system services only. */ +#define BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS (1 << 1) /**< Restrict system attributes to user services only. */ +/** @} */ + +/** @defgroup BLE_GATTS_SERVICE_CHANGED Service Changed Inclusion Values + * @{ + */ +#define BLE_GATTS_SERVICE_CHANGED_DEFAULT (1) /**< Default is to include the Service Changed characteristic in the Attribute Table. */ +/** @} */ + +/** @defgroup BLE_GATTS_ATTR_TAB_SIZE Attribute Table size + * @{ + */ +#define BLE_GATTS_ATTR_TAB_SIZE_MIN (248) /**< Minimum Attribute Table size */ +#define BLE_GATTS_ATTR_TAB_SIZE_DEFAULT (1408) /**< Default Attribute Table size. */ +/** @} */ + +/** @defgroup BLE_GATTS_DEFAULTS GATT Server defaults + * @{ + */ +#define BLE_GATTS_HVN_TX_QUEUE_SIZE_DEFAULT 1 /**< Default number of Handle Value Notifications that can be queued for transmission. */ +/** @} */ + +/** @} */ + +/** @addtogroup BLE_GATTS_STRUCTURES Structures + * @{ */ + +/** + * @brief BLE GATTS connection configuration parameters, set with @ref sd_ble_cfg_set. + */ +typedef struct +{ + uint8_t hvn_tx_queue_size; /**< Minimum guaranteed number of Handle Value Notifications that can be queued for transmission. + The default value is @ref BLE_GATTS_HVN_TX_QUEUE_SIZE_DEFAULT */ +} ble_gatts_conn_cfg_t; + +/**@brief Attribute metadata. */ +typedef struct +{ + ble_gap_conn_sec_mode_t read_perm; /**< Read permissions. */ + ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ + uint8_t vlen :1; /**< Variable length attribute. */ + uint8_t vloc :2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ + uint8_t rd_auth :1; /**< Read authorization and value will be requested from the application on every read operation. */ + uint8_t wr_auth :1; /**< Write authorization will be requested from the application on every Write Request operation (but not Write Command). */ +} ble_gatts_attr_md_t; + + +/**@brief GATT Attribute. */ +typedef struct +{ + ble_uuid_t const *p_uuid; /**< Pointer to the attribute UUID. */ + ble_gatts_attr_md_t const *p_attr_md; /**< Pointer to the attribute metadata structure. */ + uint16_t init_len; /**< Initial attribute value length in bytes. */ + uint16_t init_offs; /**< Initial attribute value offset in bytes. If different from zero, the first init_offs bytes of the attribute value will be left uninitialized. */ + uint16_t max_len; /**< Maximum attribute value length in bytes, see @ref BLE_GATTS_ATTR_LENS_MAX for maximum values. */ + uint8_t *p_value; /**< Pointer to the attribute data. Please note that if the @ref BLE_GATTS_VLOC_USER value location is selected in the attribute metadata, this will have to point to a buffer + that remains valid through the lifetime of the attribute. This excludes usage of automatic variables that may go out of scope or any other temporary location. + The stack may access that memory directly without the application's knowledge. For writable characteristics, this value must not be a location in flash memory.*/ +} ble_gatts_attr_t; + +/**@brief GATT Attribute Value. */ +typedef struct +{ + uint16_t len; /**< Length in bytes to be written or read. Length in bytes written or read after successful return.*/ + uint16_t offset; /**< Attribute value offset. */ + uint8_t *p_value; /**< Pointer to where value is stored or will be stored. + If value is stored in user memory, only the attribute length is updated when p_value == NULL. + Set to NULL when reading to obtain the complete length of the attribute value */ +} ble_gatts_value_t; + + +/**@brief GATT Characteristic Presentation Format. */ +typedef struct +{ + uint8_t format; /**< Format of the value, see @ref BLE_GATT_CPF_FORMATS. */ + int8_t exponent; /**< Exponent for integer data types. */ + uint16_t unit; /**< Unit from Bluetooth Assigned Numbers. */ + uint8_t name_space; /**< Namespace from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ + uint16_t desc; /**< Namespace description from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ +} ble_gatts_char_pf_t; + + +/**@brief GATT Characteristic metadata. */ +typedef struct +{ + ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ + ble_gatt_char_ext_props_t char_ext_props; /**< Characteristic Extended Properties. */ + uint8_t const *p_char_user_desc; /**< Pointer to a UTF-8 encoded string (non-NULL terminated), NULL if the descriptor is not required. */ + uint16_t char_user_desc_max_size; /**< The maximum size in bytes of the user description descriptor. */ + uint16_t char_user_desc_size; /**< The size of the user description, must be smaller or equal to char_user_desc_max_size. */ + ble_gatts_char_pf_t const *p_char_pf; /**< Pointer to a presentation format structure or NULL if the CPF descriptor is not required. */ + ble_gatts_attr_md_t const *p_user_desc_md; /**< Attribute metadata for the User Description descriptor, or NULL for default values. */ + ble_gatts_attr_md_t const *p_cccd_md; /**< Attribute metadata for the Client Characteristic Configuration Descriptor, or NULL for default values. */ + ble_gatts_attr_md_t const *p_sccd_md; /**< Attribute metadata for the Server Characteristic Configuration Descriptor, or NULL for default values. */ +} ble_gatts_char_md_t; + + +/**@brief GATT Characteristic Definition Handles. */ +typedef struct +{ + uint16_t value_handle; /**< Handle to the characteristic value. */ + uint16_t user_desc_handle; /**< Handle to the User Description descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ + uint16_t cccd_handle; /**< Handle to the Client Characteristic Configuration Descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ + uint16_t sccd_handle; /**< Handle to the Server Characteristic Configuration Descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ +} ble_gatts_char_handles_t; + + +/**@brief GATT HVx parameters. */ +typedef struct +{ + uint16_t handle; /**< Characteristic Value Handle. */ + uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ + uint16_t offset; /**< Offset within the attribute value. */ + uint16_t *p_len; /**< Length in bytes to be written, length in bytes written after return. */ + uint8_t const *p_data; /**< Actual data content, use NULL to use the current attribute value. */ +} ble_gatts_hvx_params_t; + +/**@brief GATT Authorization parameters. */ +typedef struct +{ + uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ + uint8_t update : 1; /**< If set, data supplied in p_data will be used to update the attribute value. + Please note that for @ref BLE_GATTS_AUTHORIZE_TYPE_WRITE operations this bit must always be set, + as the data to be written needs to be stored and later provided by the application. */ + uint16_t offset; /**< Offset of the attribute value being updated. */ + uint16_t len; /**< Length in bytes of the value in p_data pointer, see @ref BLE_GATTS_ATTR_LENS_MAX. */ + uint8_t const *p_data; /**< Pointer to new value used to update the attribute value. */ +} ble_gatts_authorize_params_t; + +/**@brief GATT Read or Write Authorize Reply parameters. */ +typedef struct +{ + uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ + union { + ble_gatts_authorize_params_t read; /**< Read authorization parameters. */ + ble_gatts_authorize_params_t write; /**< Write authorization parameters. */ + } params; /**< Reply Parameters. */ +} ble_gatts_rw_authorize_reply_params_t; + +/**@brief Service Changed Inclusion configuration parameters, set with @ref sd_ble_cfg_set. */ +typedef struct +{ + uint8_t service_changed : 1; /**< If 1, include the Service Changed characteristic in the Attribute Table. Default is @ref BLE_GATTS_SERVICE_CHANGED_DEFAULT. */ +} ble_gatts_cfg_service_changed_t; + +/**@brief Attribute table size configuration parameters, set with @ref sd_ble_cfg_set. + * + * @retval ::NRF_ERROR_INVALID_LENGTH One or more of the following is true: + * - The specified Attribute Table size is too small. + * The minimum acceptable size is defined by @ref BLE_GATTS_ATTR_TAB_SIZE_MIN. + * - The specified Attribute Table size is not a multiple of 4. + */ +typedef struct +{ + uint32_t attr_tab_size; /**< Attribute table size. Default is @ref BLE_GATTS_ATTR_TAB_SIZE_DEFAULT, minimum is @ref BLE_GATTS_ATTR_TAB_SIZE_MIN. */ +} ble_gatts_cfg_attr_tab_size_t; + +/**@brief Config structure for GATTS configurations. */ +typedef union +{ + ble_gatts_cfg_service_changed_t service_changed; /**< Include service changed characteristic, cfg_id is @ref BLE_GATTS_CFG_SERVICE_CHANGED. */ + ble_gatts_cfg_attr_tab_size_t attr_tab_size; /**< Attribute table size, cfg_id is @ref BLE_GATTS_CFG_ATTR_TAB_SIZE. */ +} ble_gatts_cfg_t; + + +/**@brief Event structure for @ref BLE_GATTS_EVT_WRITE. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + ble_uuid_t uuid; /**< Attribute UUID. */ + uint8_t op; /**< Type of write operation, see @ref BLE_GATTS_OPS. */ + uint8_t auth_required; /**< Writing operation deferred due to authorization requirement. Application may use @ref sd_ble_gatts_value_set to finalize the writing operation. */ + uint16_t offset; /**< Offset for the write operation. */ + uint16_t len; /**< Length of the received data. */ + uint8_t data[1]; /**< Received data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. + See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ +} ble_gatts_evt_write_t; + +/**@brief Event substructure for authorized read requests, see @ref ble_gatts_evt_rw_authorize_request_t. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ + ble_uuid_t uuid; /**< Attribute UUID. */ + uint16_t offset; /**< Offset for the read operation. */ +} ble_gatts_evt_read_t; + +/**@brief Event structure for @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST. */ +typedef struct +{ + uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ + union { + ble_gatts_evt_read_t read; /**< Attribute Read Parameters. */ + ble_gatts_evt_write_t write; /**< Attribute Write Parameters. */ + } request; /**< Request Parameters. */ +} ble_gatts_evt_rw_authorize_request_t; + +/**@brief Event structure for @ref BLE_GATTS_EVT_SYS_ATTR_MISSING. */ +typedef struct +{ + uint8_t hint; /**< Hint (currently unused). */ +} ble_gatts_evt_sys_attr_missing_t; + + +/**@brief Event structure for @ref BLE_GATTS_EVT_HVC. */ +typedef struct +{ + uint16_t handle; /**< Attribute Handle. */ +} ble_gatts_evt_hvc_t; + +/**@brief Event structure for @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST. */ +typedef struct +{ + uint16_t client_rx_mtu; /**< Client RX MTU size. */ +} ble_gatts_evt_exchange_mtu_request_t; + +/**@brief Event structure for @ref BLE_GATTS_EVT_TIMEOUT. */ +typedef struct +{ + uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ +} ble_gatts_evt_timeout_t; + +/**@brief Event structure for @ref BLE_GATTS_EVT_HVN_TX_COMPLETE. */ +typedef struct +{ + uint8_t count; /**< Number of notification transmissions completed. */ +} ble_gatts_evt_hvn_tx_complete_t; + +/**@brief GATTS event structure. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which the event occurred. */ + union + { + ble_gatts_evt_write_t write; /**< Write Event Parameters. */ + ble_gatts_evt_rw_authorize_request_t authorize_request; /**< Read or Write Authorize Request Parameters. */ + ble_gatts_evt_sys_attr_missing_t sys_attr_missing; /**< System attributes missing. */ + ble_gatts_evt_hvc_t hvc; /**< Handle Value Confirmation Event Parameters. */ + ble_gatts_evt_exchange_mtu_request_t exchange_mtu_request; /**< Exchange MTU Request Event Parameters. */ + ble_gatts_evt_timeout_t timeout; /**< Timeout Event. */ + ble_gatts_evt_hvn_tx_complete_t hvn_tx_complete; /**< Handle Value Notification transmission complete Event Parameters. */ + } params; /**< Event Parameters. */ +} ble_gatts_evt_t; + +/** @} */ + +/** @addtogroup BLE_GATTS_FUNCTIONS Functions + * @{ */ + +/**@brief Add a service declaration to the Attribute Table. + * + * @note Secondary Services are only relevant in the context of the entity that references them, it is therefore forbidden to + * add a secondary service declaration that is not referenced by another service later in the Attribute Table. + * + * @mscs + * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} + * @endmscs + * + * @param[in] type Toggles between primary and secondary services, see @ref BLE_GATTS_SRVC_TYPES. + * @param[in] p_uuid Pointer to service UUID. + * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. + * + * @retval ::NRF_SUCCESS Successfully added a service declaration. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, Vendor Specific UUIDs need to be present in the table. + * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. + * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. + */ +SVCALL(SD_BLE_GATTS_SERVICE_ADD, uint32_t, sd_ble_gatts_service_add(adapter_t *adapter, uint8_t type, ble_uuid_t const *p_uuid, uint16_t *p_handle)); + + +/**@brief Add an include declaration to the Attribute Table. + * + * @note It is currently only possible to add an include declaration to the last added service (i.e. only sequential population is supported at this time). + * + * @note The included service must already be present in the Attribute Table prior to this call. + * + * @mscs + * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} + * @endmscs + * + * @param[in] service_handle Handle of the service where the included service is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. + * @param[in] inc_srvc_handle Handle of the included service. + * @param[out] p_include_handle Pointer to a 16-bit word where the assigned handle will be stored. + * + * @retval ::NRF_SUCCESS Successfully added an include declaration. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, handle values need to match previously added services. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a service context is required. + * @retval ::NRF_ERROR_NOT_SUPPORTED Feature is not supported, service_handle must be that of the last added service. + * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, self inclusions are not allowed. + * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. + */ +SVCALL(SD_BLE_GATTS_INCLUDE_ADD, uint32_t, sd_ble_gatts_include_add(adapter_t *adapter, uint16_t service_handle, uint16_t inc_srvc_handle, uint16_t *p_include_handle)); + + +/**@brief Add a characteristic declaration, a characteristic value declaration and optional characteristic descriptor declarations to the Attribute Table. + * + * @note It is currently only possible to add a characteristic to the last added service (i.e. only sequential population is supported at this time). + * + * @note Several restrictions apply to the parameters, such as matching permissions between the user description descriptor and the writable auxiliaries bits, + * readable (no security) and writable (selectable) CCCDs and SCCDs and valid presentation format values. + * + * @note If no metadata is provided for the optional descriptors, their permissions will be derived from the characteristic permissions. + * + * @mscs + * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} + * @endmscs + * + * @param[in] service_handle Handle of the service where the characteristic is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. + * @param[in] p_char_md Characteristic metadata. + * @param[in] p_attr_char_value Pointer to the attribute structure corresponding to the characteristic value. + * @param[out] p_handles Pointer to the structure where the assigned handles will be stored. + * + * @retval ::NRF_SUCCESS Successfully added a characteristic. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, service handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a service context is required. + * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. + * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. + */ +SVCALL(SD_BLE_GATTS_CHARACTERISTIC_ADD, uint32_t, sd_ble_gatts_characteristic_add(adapter_t *adapter, uint16_t service_handle, ble_gatts_char_md_t const *p_char_md, ble_gatts_attr_t const *p_attr_char_value, ble_gatts_char_handles_t *p_handles)); + + +/**@brief Add a descriptor to the Attribute Table. + * + * @note It is currently only possible to add a descriptor to the last added characteristic (i.e. only sequential population is supported at this time). + * + * @mscs + * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} + * @endmscs + * + * @param[in] char_handle Handle of the characteristic where the descriptor is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. + * @param[in] p_attr Pointer to the attribute structure. + * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. + * + * @retval ::NRF_SUCCESS Successfully added a descriptor. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, characteristic handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. + * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a characteristic context is required. + * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. + * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. + * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. + */ +SVCALL(SD_BLE_GATTS_DESCRIPTOR_ADD, uint32_t, sd_ble_gatts_descriptor_add(adapter_t *adapter, uint16_t char_handle, ble_gatts_attr_t const *p_attr, uint16_t *p_handle)); + +/**@brief Set the value of a given attribute. + * + * @note Values other than system attributes can be set at any time, regardless of whether any active connections exist. + * + * @mscs + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. Ignored if the value does not belong to a system attribute. + * @param[in] handle Attribute handle. + * @param[in,out] p_value Attribute value information. + * + * @retval ::NRF_SUCCESS Successfully set the value of the attribute. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. + * @retval ::NRF_ERROR_FORBIDDEN Forbidden handle supplied, certain attributes are not modifiable by the application. + * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied on a system attribute. + */ +SVCALL(SD_BLE_GATTS_VALUE_SET, uint32_t, sd_ble_gatts_value_set(adapter_t *adapter, uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value)); + +/**@brief Get the value of a given attribute. + * + * @note If the attribute value is longer than the size of the supplied buffer, + * @ref ble_gatts_value_t::len will return the total attribute value length (excluding offset), + * and not the number of bytes actually returned in @ref ble_gatts_value_t::p_value. + * The application may use this information to allocate a suitable buffer size. + * + * @note When retrieving system attribute values with this function, the connection handle + * may refer to an already disconnected connection. Refer to the documentation of + * @ref sd_ble_gatts_sys_attr_get for further information. + * + * @param[in] conn_handle Connection handle. Ignored if the value does not belong to a system attribute. + * @param[in] handle Attribute handle. + * @param[in,out] p_value Attribute value information. + * + * @retval ::NRF_SUCCESS Successfully retrieved the value of the attribute. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid attribute offset supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied on a system attribute. + * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. + */ +SVCALL(SD_BLE_GATTS_VALUE_GET, uint32_t, sd_ble_gatts_value_get(adapter_t *adapter, uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value)); + +/**@brief Notify or Indicate an attribute value. + * + * @details This function checks for the relevant Client Characteristic Configuration descriptor value to verify that the relevant operation + * (notification or indication) has been enabled by the client. It is also able to update the attribute value before issuing the PDU, so that + * the application can atomically perform a value update and a server initiated transaction with a single API call. + * + * @note The local attribute value may be updated even if an outgoing packet is not sent to the peer due to an error during execution. + * The Attribute Table has been updated if one of the following error codes is returned: @ref NRF_ERROR_INVALID_STATE, @ref NRF_ERROR_BUSY, + * @ref NRF_ERROR_FORBIDDEN, @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING and @ref NRF_ERROR_RESOURCES. + * The caller can check whether the value has been updated by looking at the contents of *(@ref ble_gatts_hvx_params_t::p_len). + * + * @note Only one indication procedure can be ongoing per connection at a time. + * If the application tries to indicate an attribute value while another indication procedure is ongoing, + * the function call will return @ref NRF_ERROR_BUSY. + * A @ref BLE_GATTS_EVT_HVC event will be issued as soon as the confirmation arrives from the peer. + * + * @note The number of Handle Value Notifications that can be queued is configured by @ref ble_gatts_conn_cfg_t::hvn_tx_queue_size + * When the queue is full, the function call will return @ref NRF_ERROR_RESOURCES. + * A @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event will be issued as soon as the transmission of the notification is complete. + * + * @note The application can keep track of the available queue element count for notifications by following the procedure below: + * - Store initial queue element count in a variable. + * - Decrement the variable, which stores the currently available queue element count, by one when a call to this function returns @ref NRF_SUCCESS. + * - Increment the variable, which stores the current available queue element count, by the count variable in @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event. + * + * @events + * @event{@ref BLE_GATTS_EVT_HVN_TX_COMPLETE, Notification transmission complete.} + * @event{@ref BLE_GATTS_EVT_HVC, Confirmation received from the peer.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTS_HVX_SYS_ATTRS_MISSING_MSC} + * @mmsc{@ref BLE_GATTS_HVN_MSC} + * @mmsc{@ref BLE_GATTS_HVI_MSC} + * @mmsc{@ref BLE_GATTS_HVX_DISABLED_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in,out] p_hvx_params Pointer to an HVx parameters structure. If @ref ble_gatts_hvx_params_t::p_data + * contains a non-NULL pointer the attribute value will be updated with the contents + * pointed by it before sending the notification or indication. If the attribute value + * is updated, @ref ble_gatts_hvx_params_t::p_len is updated by the SoftDevice to + * contain the number of actual bytes written, else it will be set to 0. + * + * @retval ::NRF_SUCCESS Successfully queued a notification or indication for transmission, and optionally updated the attribute value. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE One or more of the following is true: + * - Invalid Connection State + * - Notifications and/or indications not enabled in the CCCD + * - An ATT_MTU exchange is ongoing + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied. Only attributes added directly by the application are available to notify and indicate. + * @retval ::BLE_ERROR_GATTS_INVALID_ATTR_TYPE Invalid attribute type(s) supplied, only characteristic values may be notified and indicated. + * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. + * @retval ::NRF_ERROR_FORBIDDEN The connection's current security level is lower than the one required by the write permissions of the CCCD associated with this characteristic. + * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. + * @retval ::NRF_ERROR_BUSY For @ref BLE_GATT_HVX_INDICATION Procedure already in progress. Wait for a @ref BLE_GATTS_EVT_HVC event and retry. + * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. + * @retval ::NRF_ERROR_RESOURCES Too many notifications queued. + * Wait for a @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event and retry. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTS_HVX, uint32_t, sd_ble_gatts_hvx(adapter_t *adapter, uint16_t conn_handle, ble_gatts_hvx_params_t const *p_hvx_params)); + +/**@brief Indicate the Service Changed attribute value. + * + * @details This call will send a Handle Value Indication to one or more peers connected to inform them that the Attribute + * Table layout has changed. As soon as the peer has confirmed the indication, a @ref BLE_GATTS_EVT_SC_CONFIRM event will + * be issued. + * + * @note Some of the restrictions and limitations that apply to @ref sd_ble_gatts_hvx also apply here. + * + * @events + * @event{@ref BLE_GATTS_EVT_SC_CONFIRM, Confirmation of attribute table change received from peer.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_GATTS_SC_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] start_handle Start of affected attribute handle range. + * @param[in] end_handle End of affected attribute handle range. + * + * @retval ::NRF_SUCCESS Successfully queued the Service Changed indication for transmission. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_NOT_SUPPORTED Service Changed not enabled at initialization. See @ref + * sd_ble_cfg_set and @ref ble_gatts_cfg_service_changed_t. + * @retval ::NRF_ERROR_INVALID_STATE One or more of the following is true: + * - Invalid Connection State + * - Notifications and/or indications not enabled in the CCCD + * - An ATT_MTU exchange is ongoing + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied, handles must be in the range populated by the application. + * @retval ::NRF_ERROR_BUSY Procedure already in progress. + * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTS_SERVICE_CHANGED, uint32_t, sd_ble_gatts_service_changed(adapter_t *adapter, uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle)); + +/**@brief Respond to a Read/Write authorization request. + * + * @note This call should only be used as a response to a @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST event issued to the application. + * + * @mscs + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} + * @mmsc{@ref BLE_GATTS_READ_REQ_AUTH_MSC} + * @mmsc{@ref BLE_GATTS_WRITE_REQ_AUTH_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} + * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_PEER_CANCEL_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_rw_authorize_reply_params Pointer to a structure with the attribute provided by the application. + * + * @note @ref ble_gatts_authorize_params_t::p_data is ignored when this function is used to respond + * to a @ref BLE_GATTS_AUTHORIZE_TYPE_READ event if @ref ble_gatts_authorize_params_t::update + * is set to 0. + * + * @retval ::NRF_SUCCESS Successfully queued a response to the peer, and in the case of a write operation, Attribute Table updated. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no authorization request pending. + * @retval ::NRF_ERROR_INVALID_PARAM Authorization op invalid, + * handle supplied does not match requested handle, + * or invalid data to be written provided by the application. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTS_RW_AUTHORIZE_REPLY, uint32_t, sd_ble_gatts_rw_authorize_reply(adapter_t *adapter, uint16_t conn_handle, ble_gatts_rw_authorize_reply_params_t const *p_rw_authorize_reply_params)); + + +/**@brief Update persistent system attribute information. + * + * @details Supply information about persistent system attributes to the stack, + * previously obtained using @ref sd_ble_gatts_sys_attr_get. + * This call is only allowed for active connections, and is usually + * made immediately after a connection is established with an known bonded device, + * often as a response to a @ref BLE_GATTS_EVT_SYS_ATTR_MISSING. + * + * p_sysattrs may point directly to the application's stored copy of the system attributes + * obtained using @ref sd_ble_gatts_sys_attr_get. + * If the pointer is NULL, the system attribute info is initialized, assuming that + * the application does not have any previously saved system attribute data for this device. + * + * @note The state of persistent system attributes is reset upon connection establishment and then remembered for its duration. + * + * @note If this call returns with an error code different from @ref NRF_SUCCESS, the storage of persistent system attributes may have been completed only partially. + * This means that the state of the attribute table is undefined, and the application should either provide a new set of attributes using this same call or + * reset the SoftDevice to return to a known state. + * + * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS is used with this function, only the system attributes included in system services will be modified. + * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS is used with this function, only the system attributes included in user services will be modified. + * + * @mscs + * @mmsc{@ref BLE_GATTS_HVX_SYS_ATTRS_MISSING_MSC} + * @mmsc{@ref BLE_GATTS_SYS_ATTRS_UNK_PEER_MSC} + * @mmsc{@ref BLE_GATTS_SYS_ATTRS_BONDED_PEER_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle. + * @param[in] p_sys_attr_data Pointer to a saved copy of system attributes supplied to the stack, or NULL. + * @param[in] len Size of data pointed by p_sys_attr_data, in octets. + * @param[in] flags Optional additional flags, see @ref BLE_GATTS_SYS_ATTR_FLAGS + * + * @retval ::NRF_SUCCESS Successfully set the system attribute information. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid flags supplied. + * @retval ::NRF_ERROR_INVALID_DATA Invalid data supplied, the data should be exactly the same as retrieved with @ref sd_ble_gatts_sys_attr_get. + * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. + */ +SVCALL(SD_BLE_GATTS_SYS_ATTR_SET, uint32_t, sd_ble_gatts_sys_attr_set(adapter_t *adapter, uint16_t conn_handle, uint8_t const *p_sys_attr_data, uint16_t len, uint32_t flags)); + + +/**@brief Retrieve persistent system attribute information from the stack. + * + * @details This call is used to retrieve information about values to be stored persistently by the application + * during the lifetime of a connection or after it has been terminated. When a new connection is established with the same bonded device, + * the system attribute information retrieved with this function should be restored using using @ref sd_ble_gatts_sys_attr_set. + * If retrieved after disconnection, the data should be read before a new connection established. The connection handle for + * the previous, now disconnected, connection will remain valid until a new one is created to allow this API call to refer to it. + * Connection handles belonging to active connections can be used as well, but care should be taken since the system attributes + * may be written to at any time by the peer during a connection's lifetime. + * + * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS is used with this function, only the system attributes included in system services will be returned. + * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS is used with this function, only the system attributes included in user services will be returned. + * + * @mscs + * @mmsc{@ref BLE_GATTS_SYS_ATTRS_BONDED_PEER_MSC} + * @endmscs + * + * @param[in] conn_handle Connection handle of the recently terminated connection. + * @param[out] p_sys_attr_data Pointer to a buffer where updated information about system attributes will be filled in. The format of the data is described + * in @ref BLE_GATTS_SYS_ATTRS_FORMAT. NULL can be provided to obtain the length of the data. + * @param[in,out] p_len Size of application buffer if p_sys_attr_data is not NULL. Unconditionally updated to actual length of system attribute data. + * @param[in] flags Optional additional flags, see @ref BLE_GATTS_SYS_ATTR_FLAGS + * + * @retval ::NRF_SUCCESS Successfully retrieved the system attribute information. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid flags supplied. + * @retval ::NRF_ERROR_DATA_SIZE The system attribute information did not fit into the provided buffer. + * @retval ::NRF_ERROR_NOT_FOUND No system attributes found. + */ +SVCALL(SD_BLE_GATTS_SYS_ATTR_GET, uint32_t, sd_ble_gatts_sys_attr_get(adapter_t *adapter, uint16_t conn_handle, uint8_t *p_sys_attr_data, uint16_t *p_len, uint32_t flags)); + + +/**@brief Retrieve the first valid user attribute handle. + * + * @param[out] p_handle Pointer to an integer where the handle will be stored. + * + * @retval ::NRF_SUCCESS Successfully retrieved the handle. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + */ +SVCALL(SD_BLE_GATTS_INITIAL_USER_HANDLE_GET, uint32_t, sd_ble_gatts_initial_user_handle_get(adapter_t *adapter, uint16_t *p_handle)); + +/**@brief Retrieve the attribute UUID and/or metadata. + * + * @param[in] handle Attribute handle + * @param[out] p_uuid UUID of the attribute. Use NULL to omit this field. + * @param[out] p_md Metadata of the attribute. Use NULL to omit this field. + * + * @retval ::NRF_SUCCESS Successfully retrieved the attribute metadata, + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameters supplied. Returned when both @c p_uuid and @c p_md are NULL. + * @retval ::NRF_ERROR_NOT_FOUND Attribute was not found. + */ +SVCALL(SD_BLE_GATTS_ATTR_GET, uint32_t, sd_ble_gatts_attr_get(adapter_t *adapter, uint16_t handle, ble_uuid_t * p_uuid, ble_gatts_attr_md_t * p_md)); + +/**@brief Reply to an ATT_MTU exchange request by sending an Exchange MTU Response to the client. + * + * @details This function is only used to reply to a @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST event. + * + * @details The SoftDevice sets ATT_MTU to the minimum of: + * - The Client RX MTU value from @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST, and + * - The Server RX MTU value. + * + * However, the SoftDevice never sets ATT_MTU lower than @ref BLE_GATT_ATT_MTU_DEFAULT. + * + * @mscs + * @mmsc{@ref BLE_GATTS_MTU_EXCHANGE} + * @endmscs + * + * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. + * @param[in] server_rx_mtu Server RX MTU size. + * - The minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. + * - The maximum value is @ref ble_gatt_conn_cfg_t::att_mtu in the connection configuration + * used for this connection. + * - The value must be equal to Client RX MTU size given in @ref sd_ble_gattc_exchange_mtu_request + * if an ATT_MTU exchange has already been performed in the other direction. + * + * @retval ::NRF_SUCCESS Successfully sent response to the client. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no ATT_MTU exchange request pending. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid Server RX MTU size supplied. + * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. + */ +SVCALL(SD_BLE_GATTS_EXCHANGE_MTU_REPLY, uint32_t, sd_ble_gatts_exchange_mtu_reply(adapter_t *adapter, uint16_t conn_handle, uint16_t server_rx_mtu)); +/** @} */ + +#ifdef __cplusplus +} +#endif +#endif // BLE_GATTS_H__ + +/** + @} +*/ diff --git a/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_hci.h b/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_hci.h new file mode 100644 index 000000000..f0dde9a03 --- /dev/null +++ b/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_hci.h @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + @addtogroup BLE_COMMON + @{ +*/ + + +#ifndef BLE_HCI_H__ +#define BLE_HCI_H__ +#ifdef __cplusplus +extern "C" { +#endif + +/** @defgroup BLE_HCI_STATUS_CODES Bluetooth status codes + * @{ */ + +#define BLE_HCI_STATUS_CODE_SUCCESS 0x00 /**< Success. */ +#define BLE_HCI_STATUS_CODE_UNKNOWN_BTLE_COMMAND 0x01 /**< Unknown BLE Command. */ +#define BLE_HCI_STATUS_CODE_UNKNOWN_CONNECTION_IDENTIFIER 0x02 /**< Unknown Connection Identifier. */ +/*0x03 Hardware Failure +0x04 Page Timeout +*/ +#define BLE_HCI_AUTHENTICATION_FAILURE 0x05 /**< Authentication Failure. */ +#define BLE_HCI_STATUS_CODE_PIN_OR_KEY_MISSING 0x06 /**< Pin or Key missing. */ +#define BLE_HCI_MEMORY_CAPACITY_EXCEEDED 0x07 /**< Memory Capacity Exceeded. */ +#define BLE_HCI_CONNECTION_TIMEOUT 0x08 /**< Connection Timeout. */ +/*0x09 Connection Limit Exceeded +0x0A Synchronous Connection Limit To A Device Exceeded +0x0B ACL Connection Already Exists*/ +#define BLE_HCI_STATUS_CODE_COMMAND_DISALLOWED 0x0C /**< Command Disallowed. */ +/*0x0D Connection Rejected due to Limited Resources +0x0E Connection Rejected Due To Security Reasons +0x0F Connection Rejected due to Unacceptable BD_ADDR +0x10 Connection Accept Timeout Exceeded +0x11 Unsupported Feature or Parameter Value*/ +#define BLE_HCI_STATUS_CODE_INVALID_BTLE_COMMAND_PARAMETERS 0x12 /**< Invalid BLE Command Parameters. */ +#define BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION 0x13 /**< Remote User Terminated Connection. */ +#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES 0x14 /**< Remote Device Terminated Connection due to low resources.*/ +#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF 0x15 /**< Remote Device Terminated Connection due to power off. */ +#define BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTION 0x16 /**< Local Host Terminated Connection. */ +/* +0x17 Repeated Attempts +0x18 Pairing Not Allowed +0x19 Unknown LMP PDU +*/ +#define BLE_HCI_UNSUPPORTED_REMOTE_FEATURE 0x1A /**< Unsupported Remote Feature. */ +/* +0x1B SCO Offset Rejected +0x1C SCO Interval Rejected +0x1D SCO Air Mode Rejected*/ +#define BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS 0x1E /**< Invalid LMP Parameters. */ +#define BLE_HCI_STATUS_CODE_UNSPECIFIED_ERROR 0x1F /**< Unspecified Error. */ +/*0x20 Unsupported LMP Parameter Value +0x21 Role Change Not Allowed +*/ +#define BLE_HCI_STATUS_CODE_LMP_RESPONSE_TIMEOUT 0x22 /**< LMP Response Timeout. */ +#define BLE_HCI_STATUS_CODE_LMP_ERROR_TRANSACTION_COLLISION 0x23 /**< LMP Error Transaction Collision/LL Procedure Collision. */ +#define BLE_HCI_STATUS_CODE_LMP_PDU_NOT_ALLOWED 0x24 /**< LMP PDU Not Allowed. */ +/*0x25 Encryption Mode Not Acceptable +0x26 Link Key Can Not be Changed +0x27 Requested QoS Not Supported +*/ +#define BLE_HCI_INSTANT_PASSED 0x28 /**< Instant Passed. */ +#define BLE_HCI_PAIRING_WITH_UNIT_KEY_UNSUPPORTED 0x29 /**< Pairing with Unit Key Unsupported. */ +#define BLE_HCI_DIFFERENT_TRANSACTION_COLLISION 0x2A /**< Different Transaction Collision. */ +/* +0x2B Reserved +0x2C QoS Unacceptable Parameter +0x2D QoS Rejected +0x2E Channel Classification Not Supported +0x2F Insufficient Security +*/ +#define BLE_HCI_PARAMETER_OUT_OF_MANDATORY_RANGE 0x30 /**< Parameter Out Of Mandatory Range. */ +/* +0x31 Reserved +0x32 Role Switch Pending +0x33 Reserved +0x34 Reserved Slot Violation +0x35 Role Switch Failed +0x36 Extended Inquiry Response Too Large +0x37 Secure Simple Pairing Not Supported By Host. +0x38 Host Busy - Pairing +0x39 Connection Rejected due to No Suitable Channel Found*/ +#define BLE_HCI_CONTROLLER_BUSY 0x3A /**< Controller Busy. */ +#define BLE_HCI_CONN_INTERVAL_UNACCEPTABLE 0x3B /**< Connection Interval Unacceptable. */ +#define BLE_HCI_DIRECTED_ADVERTISER_TIMEOUT 0x3C /**< Directed Advertisement Timeout. */ +#define BLE_HCI_CONN_TERMINATED_DUE_TO_MIC_FAILURE 0x3D /**< Connection Terminated due to MIC Failure. */ +#define BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED 0x3E /**< Connection Failed to be Established. */ + +/** @} */ + + +#ifdef __cplusplus +} +#endif +#endif // BLE_HCI_H__ + +/** @} */ diff --git a/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_l2cap.h b/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_l2cap.h new file mode 100644 index 000000000..914ef940a --- /dev/null +++ b/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_l2cap.h @@ -0,0 +1,506 @@ +/* + * Copyright (c) 2011 - 2018, Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + @addtogroup BLE_L2CAP Logical Link Control and Adaptation Protocol (L2CAP) + @{ + @brief Definitions and prototypes for the L2CAP interface. + */ + +#ifndef BLE_L2CAP_H__ +#define BLE_L2CAP_H__ + +#include +#include "nrf_svc.h" +#include "nrf_error.h" +#include "ble_ranges.h" +#include "ble_types.h" +#include "ble_err.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/**@addtogroup BLE_L2CAP_TERMINOLOGY Terminology + * @{ + * @details + * + * L2CAP SDU + * - A data unit that the application can send/receive to/from a peer. + * + * L2CAP PDU + * - A data unit that is exchanged between local and remote L2CAP entities. + * It consists of L2CAP protocol control information and payload fields. + * The payload field can contain an L2CAP SDU or a part of an L2CAP SDU. + * + * L2CAP MTU + * - The maximum length of an L2CAP SDU. + * + * L2CAP MPS + * - The maximum length of an L2CAP PDU payload field. + * + * Credits + * - A value indicating the number of L2CAP PDUs that the receiver of the credit can send to the peer. + * @} */ + +/**@addtogroup BLE_L2CAP_ENUMERATIONS Enumerations + * @{ */ + +/**@brief L2CAP API SVC numbers. */ +enum BLE_L2CAP_SVCS +{ + SD_BLE_L2CAP_CH_SETUP = BLE_L2CAP_SVC_BASE + 0, /**< Set up an L2CAP channel. */ + SD_BLE_L2CAP_CH_RELEASE = BLE_L2CAP_SVC_BASE + 1, /**< Release an L2CAP channel. */ + SD_BLE_L2CAP_CH_RX = BLE_L2CAP_SVC_BASE + 2, /**< Receive an SDU on an L2CAP channel. */ + SD_BLE_L2CAP_CH_TX = BLE_L2CAP_SVC_BASE + 3, /**< Transmit an SDU on an L2CAP channel. */ + SD_BLE_L2CAP_CH_FLOW_CONTROL = BLE_L2CAP_SVC_BASE + 4, /**< Advanced SDU reception flow control. */ +}; + +/**@brief L2CAP Event IDs. */ +enum BLE_L2CAP_EVTS +{ + BLE_L2CAP_EVT_CH_SETUP_REQUEST = BLE_L2CAP_EVT_BASE + 0, /**< L2CAP Channel Setup Request event. + \n See @ref ble_l2cap_evt_ch_setup_request_t. */ + BLE_L2CAP_EVT_CH_SETUP_REFUSED = BLE_L2CAP_EVT_BASE + 1, /**< L2CAP Channel Setup Refused event. + \n See @ref ble_l2cap_evt_ch_setup_refused_t. */ + BLE_L2CAP_EVT_CH_SETUP = BLE_L2CAP_EVT_BASE + 2, /**< L2CAP Channel Setup Completed event. + \n See @ref ble_l2cap_evt_ch_setup_t. */ + BLE_L2CAP_EVT_CH_RELEASED = BLE_L2CAP_EVT_BASE + 3, /**< L2CAP Channel Released event. + \n No additional event structure applies. */ + BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED = BLE_L2CAP_EVT_BASE + 4, /**< L2CAP Channel SDU data buffer released event. + \n See @ref ble_l2cap_evt_ch_sdu_buf_released_t. */ + BLE_L2CAP_EVT_CH_CREDIT = BLE_L2CAP_EVT_BASE + 5, /**< L2CAP Channel Credit received. + \n See @ref ble_l2cap_evt_ch_credit_t. */ + BLE_L2CAP_EVT_CH_RX = BLE_L2CAP_EVT_BASE + 6, /**< L2CAP Channel SDU received. + \n See @ref ble_l2cap_evt_ch_rx_t. */ + BLE_L2CAP_EVT_CH_TX = BLE_L2CAP_EVT_BASE + 7, /**< L2CAP Channel SDU transmitted. + \n See @ref ble_l2cap_evt_ch_tx_t. */ +}; + +/** @} */ + +/**@addtogroup BLE_L2CAP_DEFINES Defines + * @{ */ + +/**@brief Maximum number of L2CAP channels per connection. */ +#define BLE_L2CAP_CH_COUNT_MAX (64) + +/**@brief Minimum L2CAP MTU, in bytes. */ +#define BLE_L2CAP_MTU_MIN (23) + +/**@brief Minimum L2CAP MPS, in bytes. */ +#define BLE_L2CAP_MPS_MIN (23) + +/**@brief Invalid CID. */ +#define BLE_L2CAP_CID_INVALID (0x0000) + +/**@brief Default number of credits for @ref sd_ble_l2cap_ch_flow_control. */ +#define BLE_L2CAP_CREDITS_DEFAULT (1) + +/**@defgroup BLE_L2CAP_CH_SETUP_REFUSED_SRCS L2CAP channel setup refused sources + * @{ */ +#define BLE_L2CAP_CH_SETUP_REFUSED_SRC_LOCAL (0x01) /**< Local. */ +#define BLE_L2CAP_CH_SETUP_REFUSED_SRC_REMOTE (0x02) /**< Remote. */ + /** @} */ + + /** @defgroup BLE_L2CAP_CH_STATUS_CODES L2CAP channel status codes + * @{ */ +#define BLE_L2CAP_CH_STATUS_CODE_SUCCESS (0x0000) /**< Success. */ +#define BLE_L2CAP_CH_STATUS_CODE_LE_PSM_NOT_SUPPORTED (0x0002) /**< LE_PSM not supported. */ +#define BLE_L2CAP_CH_STATUS_CODE_NO_RESOURCES (0x0004) /**< No resources available. */ +#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_AUTHENTICATION (0x0005) /**< Insufficient authentication. */ +#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_AUTHORIZATION (0x0006) /**< Insufficient authorization. */ +#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_ENC_KEY_SIZE (0x0007) /**< Insufficient encryption key size. */ +#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_ENC (0x0008) /**< Insufficient encryption. */ +#define BLE_L2CAP_CH_STATUS_CODE_INVALID_SCID (0x0009) /**< Invalid Source CID. */ +#define BLE_L2CAP_CH_STATUS_CODE_SCID_ALLOCATED (0x000A) /**< Source CID already allocated. */ +#define BLE_L2CAP_CH_STATUS_CODE_UNACCEPTABLE_PARAMS (0x000B) /**< Unacceptable parameters. */ +#define BLE_L2CAP_CH_STATUS_CODE_NOT_UNDERSTOOD (0x8000) /**< Command Reject received instead of LE Credit Based Connection Response. */ +#define BLE_L2CAP_CH_STATUS_CODE_TIMEOUT (0xC000) /**< Operation timed out. */ +/** @} */ + +/** @} */ + +/**@addtogroup BLE_L2CAP_STRUCTURES Structures + * @{ */ + +/** + * @brief BLE L2CAP connection configuration parameters, set with @ref sd_ble_cfg_set. + * + * @note These parameters are set per connection, so all L2CAP channels created on this connection + * will have the same parameters. + * + * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: + * - rx_mps is smaller than @ref BLE_L2CAP_MPS_MIN. + * - tx_mps is smaller than @ref BLE_L2CAP_MPS_MIN. + * - ch_count is greater than @ref BLE_L2CAP_CH_COUNT_MAX. + * @retval ::NRF_ERROR_NO_MEM rx_mps or tx_mps is set too high. + */ +typedef struct +{ + uint16_t rx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall + be able to receive on L2CAP channels on connections with this + configuration. The minimum value is @ref BLE_L2CAP_MPS_MIN. */ + uint16_t tx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall + be able to transmit on L2CAP channels on connections with this + configuration. The minimum value is @ref BLE_L2CAP_MPS_MIN. */ + uint8_t rx_queue_size; /**< Number of SDU data buffers that can be queued for reception per + L2CAP channel. The minimum value is one. */ + uint8_t tx_queue_size; /**< Number of SDU data buffers that can be queued for transmission + per L2CAP channel. The minimum value is one. */ + uint8_t ch_count; /**< Number of L2CAP channels the application can create per connection + with this configuration. The default value is zero, the maximum + value is @ref BLE_L2CAP_CH_COUNT_MAX. + @note if this parameter is set to zero, all other parameters in + @ref ble_l2cap_conn_cfg_t are ignored. */ +} ble_l2cap_conn_cfg_t; + +/**@brief L2CAP channel RX parameters. */ +typedef struct +{ + uint16_t rx_mtu; /**< The maximum L2CAP SDU size, in bytes, that L2CAP shall be able to + receive on this L2CAP channel. + - Must be equal to or greater than @ref BLE_L2CAP_MTU_MIN. */ + uint16_t rx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall be + able to receive on this L2CAP channel. + - Must be equal to or greater than @ref BLE_L2CAP_MPS_MIN. + - Must be equal to or less than @ref ble_l2cap_conn_cfg_t::rx_mps. */ + ble_data_t sdu_buf; /**< SDU data buffer for reception. + - If @ref ble_data_t::p_data is non-NULL, initial credits are + issued to the peer. + - If @ref ble_data_t::p_data is NULL, no initial credits are + issued to the peer. */ +} ble_l2cap_ch_rx_params_t; + +/**@brief L2CAP channel setup parameters. */ +typedef struct +{ + ble_l2cap_ch_rx_params_t rx_params; /**< L2CAP channel RX parameters. */ + uint16_t le_psm; /**< LE Protocol/Service Multiplexer. Used when requesting + setup of an L2CAP channel, ignored otherwise. */ + uint16_t status; /**< Status code, see @ref BLE_L2CAP_CH_STATUS_CODES. + Used when replying to a setup request of an L2CAP + channel, ignored otherwise. */ +} ble_l2cap_ch_setup_params_t; + +/**@brief L2CAP channel TX parameters. */ +typedef struct +{ + uint16_t tx_mtu; /**< The maximum L2CAP SDU size, in bytes, that L2CAP is able to + transmit on this L2CAP channel. */ + uint16_t peer_mps; /**< The maximum L2CAP PDU payload size, in bytes, that the peer is + able to receive on this L2CAP channel. */ + uint16_t tx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP is able + to transmit on this L2CAP channel. This is effective tx_mps, + selected by the SoftDevice as + MIN( @ref ble_l2cap_ch_tx_params_t::peer_mps, @ref ble_l2cap_conn_cfg_t::tx_mps ) */ + uint16_t credits; /**< Initial credits given by the peer. */ +} ble_l2cap_ch_tx_params_t; + +/**@brief L2CAP Channel Setup Request event. */ +typedef struct +{ + ble_l2cap_ch_tx_params_t tx_params; /**< L2CAP channel TX parameters. */ + uint16_t le_psm; /**< LE Protocol/Service Multiplexer. */ +} ble_l2cap_evt_ch_setup_request_t; + +/**@brief L2CAP Channel Setup Refused event. */ +typedef struct +{ + uint8_t source; /**< Source, see @ref BLE_L2CAP_CH_SETUP_REFUSED_SRCS */ + uint16_t status; /**< Status code, see @ref BLE_L2CAP_CH_STATUS_CODES */ +} ble_l2cap_evt_ch_setup_refused_t; + +/**@brief L2CAP Channel Setup Completed event. */ +typedef struct +{ + ble_l2cap_ch_tx_params_t tx_params; /**< L2CAP channel TX parameters. */ +} ble_l2cap_evt_ch_setup_t; + +/**@brief L2CAP Channel SDU Data Buffer Released event. */ +typedef struct +{ + ble_data_t sdu_buf; /**< Returned reception or transmission SDU data buffer. The SoftDevice + returns SDU data buffers supplied by the application, which have + not yet been returned previously via a @ref BLE_L2CAP_EVT_CH_RX or + @ref BLE_L2CAP_EVT_CH_TX event. */ +} ble_l2cap_evt_ch_sdu_buf_released_t; + +/**@brief L2CAP Channel Credit received event. */ +typedef struct +{ + uint16_t credits; /**< Additional credits given by the peer. */ +} ble_l2cap_evt_ch_credit_t; + +/**@brief L2CAP Channel received SDU event. */ +typedef struct +{ + uint16_t sdu_len; /**< Total SDU length, in bytes. */ + ble_data_t sdu_buf; /**< SDU data buffer. + @note If there is not enough space in the buffer + (sdu_buf.len < sdu_len) then the rest of the SDU will be + silently discarded by the SoftDevice. */ +} ble_l2cap_evt_ch_rx_t; + +/**@brief L2CAP Channel transmitted SDU event. */ +typedef struct +{ + ble_data_t sdu_buf; /**< SDU data buffer. */ +} ble_l2cap_evt_ch_tx_t; + +/**@brief L2CAP event structure. */ +typedef struct +{ + uint16_t conn_handle; /**< Connection Handle on which the event occured. */ + uint16_t local_cid; /**< Local Channel ID of the L2CAP channel, or + @ref BLE_L2CAP_CID_INVALID if not present. */ + union + { + ble_l2cap_evt_ch_setup_request_t ch_setup_request; /**< L2CAP Channel Setup Request Event Parameters. */ + ble_l2cap_evt_ch_setup_refused_t ch_setup_refused; /**< L2CAP Channel Setup Refused Event Parameters. */ + ble_l2cap_evt_ch_setup_t ch_setup; /**< L2CAP Channel Setup Completed Event Parameters. */ + ble_l2cap_evt_ch_sdu_buf_released_t ch_sdu_buf_released;/**< L2CAP Channel SDU Data Buffer Released Event Parameters. */ + ble_l2cap_evt_ch_credit_t credit; /**< L2CAP Channel Credit Received Event Parameters. */ + ble_l2cap_evt_ch_rx_t rx; /**< L2CAP Channel SDU Received Event Parameters. */ + ble_l2cap_evt_ch_tx_t tx; /**< L2CAP Channel SDU Transmitted Event Parameters. */ + } params; /**< Event Parameters. */ +} ble_l2cap_evt_t; + +/** @} */ + +/**@addtogroup BLE_L2CAP_FUNCTIONS Functions + * @{ */ + +/**@brief Set up an L2CAP channel. + * + * @details This function is used to: + * - Request setup of an L2CAP channel: sends an LE Credit Based Connection Request packet to a peer. + * - Reply to a setup request of an L2CAP channel (if called in response to a + * @ref BLE_L2CAP_EVT_CH_SETUP_REQUEST event): sends an LE Credit Based Connection + * Response packet to a peer. + * + * @note A call to this function will require the application to keep the SDU data buffer alive + * until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_RX or + * @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. + * + * @events + * @event{@ref BLE_L2CAP_EVT_CH_SETUP, Setup successful.} + * @event{@ref BLE_L2CAP_EVT_CH_SETUP_REFUSED, Setup failed.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_L2CAP_CH_SETUP_MSC} + * @endmscs + * + * @param[in] conn_handle Connection Handle. + * @param[in,out] p_local_cid Pointer to a uint16_t containing Local Channel ID of the L2CAP channel: + * - As input: @ref BLE_L2CAP_CID_INVALID when requesting setup of an L2CAP + * channel or local_cid provided in the @ref BLE_L2CAP_EVT_CH_SETUP_REQUEST + * event when replying to a setup request of an L2CAP channel. + * - As output: local_cid for this channel. + * @param[in] p_params L2CAP channel parameters. + * + * @retval ::NRF_SUCCESS Successfully queued request or response for transmission. + * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. + * @retval ::NRF_ERROR_INVALID_LENGTH Supplied higher rx_mps than has been configured on this link. + * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (L2CAP channel already set up). + * @retval ::NRF_ERROR_NOT_FOUND CID not found. + * @retval ::NRF_ERROR_RESOURCES The limit has been reached for available L2CAP channels, + * see @ref ble_l2cap_conn_cfg_t::ch_count. + */ +SVCALL(SD_BLE_L2CAP_CH_SETUP, uint32_t, sd_ble_l2cap_ch_setup(adapter_t *adapter, uint16_t conn_handle, uint16_t *p_local_cid, ble_l2cap_ch_setup_params_t const *p_params)); + +/**@brief Release an L2CAP channel. + * + * @details This sends a Disconnection Request packet to a peer. + * + * @events + * @event{@ref BLE_L2CAP_EVT_CH_RELEASED, Release complete.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_L2CAP_CH_RELEASE_MSC} + * @endmscs + * + * @param[in] conn_handle Connection Handle. + * @param[in] local_cid Local Channel ID of the L2CAP channel. + * + * @retval ::NRF_SUCCESS Successfully queued request for transmission. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is + * in progress for the L2CAP channel). + * @retval ::NRF_ERROR_NOT_FOUND CID not found. + */ +SVCALL(SD_BLE_L2CAP_CH_RELEASE, uint32_t, sd_ble_l2cap_ch_release(adapter_t *adapter, uint16_t conn_handle, uint16_t local_cid)); + +/**@brief Receive an SDU on an L2CAP channel. + * + * @details This may issue additional credits to the peer using an LE Flow Control Credit packet. + * + * @note A call to this function will require the application to keep the memory pointed by + * @ref ble_data_t::p_data alive until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_RX + * or @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. + * + * @note The SoftDevice can queue up to @ref ble_l2cap_conn_cfg_t::rx_queue_size SDU data buffers + * for reception per L2CAP channel. + * + * @events + * @event{@ref BLE_L2CAP_EVT_CH_RX, The SDU is received.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_L2CAP_CH_RX_MSC} + * @endmscs + * + * @param[in] conn_handle Connection Handle. + * @param[in] local_cid Local Channel ID of the L2CAP channel. + * @param[in] p_sdu_buf Pointer to the SDU data buffer. + * + * @retval ::NRF_SUCCESS Buffer accepted. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is + * in progress for an L2CAP channel). + * @retval ::NRF_ERROR_NOT_FOUND CID not found. + * @retval ::NRF_ERROR_RESOURCES Too many SDU data buffers supplied. Wait for a + * @ref BLE_L2CAP_EVT_CH_RX event and retry. + */ +SVCALL(SD_BLE_L2CAP_CH_RX, uint32_t, sd_ble_l2cap_ch_rx(adapter_t *adapter, uint16_t conn_handle, uint16_t local_cid, ble_data_t const *p_sdu_buf)); + +/**@brief Transmit an SDU on an L2CAP channel. + * + * @note A call to this function will require the application to keep the memory pointed by + * @ref ble_data_t::p_data alive until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_TX + * or @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. + * + * @note The SoftDevice can queue up to @ref ble_l2cap_conn_cfg_t::tx_queue_size SDUs for + * transmission per L2CAP channel. + * + * @note The application can keep track of the available credits for transmission by following + * the procedure below: + * - Store initial credits given by the peer in a variable. + * (Initial credits are provided in a @ref BLE_L2CAP_EVT_CH_SETUP event.) + * - Decrement the variable, which stores the currently available credits, by + * ceiling((@ref ble_data_t::len + 2) / tx_mps) when a call to this function returns + * @ref NRF_SUCCESS. (tx_mps is provided in a @ref BLE_L2CAP_EVT_CH_SETUP event.) + * - Increment the variable, which stores the currently available credits, by additional + * credits given by the peer in a @ref BLE_L2CAP_EVT_CH_CREDIT event. + * + * @events + * @event{@ref BLE_L2CAP_EVT_CH_TX, The SDU is transmitted.} + * @endevents + * + * @mscs + * @mmsc{@ref BLE_L2CAP_CH_TX_MSC} + * @endmscs + * + * @param[in] conn_handle Connection Handle. + * @param[in] local_cid Local Channel ID of the L2CAP channel. + * @param[in] p_sdu_buf Pointer to the SDU data buffer. + * + * @retval ::NRF_SUCCESS Successfully queued L2CAP SDU for transmission. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is + * in progress for the L2CAP channel). + * @retval ::NRF_ERROR_NOT_FOUND CID not found. + * @retval ::NRF_ERROR_DATA_SIZE Invalid SDU length supplied, must not be more than + * @ref ble_l2cap_ch_tx_params_t::tx_mtu provided in + * @ref BLE_L2CAP_EVT_CH_SETUP event. + * @retval ::NRF_ERROR_RESOURCES Too many SDUs queued for transmission. Wait for a + * @ref BLE_L2CAP_EVT_CH_TX event and retry. + */ +SVCALL(SD_BLE_L2CAP_CH_TX, uint32_t, sd_ble_l2cap_ch_tx(adapter_t *adapter, uint16_t conn_handle, uint16_t local_cid, ble_data_t const *p_sdu_buf)); + +/**@brief Advanced SDU reception flow control. + * + * @details Adjust the way the SoftDevice issues credits to the peer. + * This may issue additional credits to the peer using an LE Flow Control Credit packet. + * + * @mscs + * @mmsc{@ref BLE_L2CAP_CH_FLOW_CONTROL_MSC} + * @endmscs + * + * @param[in] conn_handle Connection Handle. + * @param[in] local_cid Local Channel ID of the L2CAP channel or @ref BLE_L2CAP_CID_INVALID to set + * the value that will be used for newly created channels. + * @param[in] credits Number of credits that the SoftDevice will make sure the peer has every + * time it starts using a new reception buffer. + * - @ref BLE_L2CAP_CREDITS_DEFAULT is the default value the SoftDevice will + * use if this function is not called. + * - If set to zero, the SoftDevice will stop issuing credits for new reception + * buffers the application provides or has provided. SDU reception that is + * currently ongoing will be allowed to complete. + * @param[out] p_credits NULL or pointer to a uint16_t. If a valid pointer is provided, it will be + * written by the SoftDevice with the number of credits that is or will be + * available to the peer. If the value written by the SoftDevice is 0 when + * credits parameter was set to 0, the peer will not be able to send more + * data until more credits are provided by calling this function again with + * credits > 0. This parameter is ignored when local_cid is set to + * @ref BLE_L2CAP_CID_INVALID. + * + * @note Application should take care when setting number of credits higher than default value. In + * this case the application must make sure that the SoftDevice always has reception buffers + * available (see @ref sd_ble_l2cap_ch_rx) for that channel. If the SoftDevice does not have + * such buffers available, packets may be NACKed on the Link Layer and all Bluetooth traffic + * on the connection handle may be stalled until the SoftDevice again has an available + * reception buffer. This applies even if the application has used this call to set the + * credits back to default, or zero. + * + * @retval ::NRF_SUCCESS Flow control parameters accepted. + * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. + * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. + * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is + * in progress for an L2CAP channel). + * @retval ::NRF_ERROR_NOT_FOUND CID not found. + */ +SVCALL(SD_BLE_L2CAP_CH_FLOW_CONTROL, uint32_t, sd_ble_l2cap_ch_flow_control(adapter_t *adapter, uint16_t conn_handle, uint16_t local_cid, uint16_t credits, uint16_t *p_credits)); + +/** @} */ + +#ifdef __cplusplus +} +#endif +#endif // BLE_L2CAP_H__ + +/** + @} +*/ diff --git a/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_ranges.h b/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_ranges.h new file mode 100644 index 000000000..0935bca07 --- /dev/null +++ b/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_ranges.h @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + @addtogroup BLE_COMMON + @{ + @defgroup ble_ranges Module specific SVC, event and option number subranges + @{ + + @brief Definition of SVC, event and option number subranges for each API module. + + @note + SVCs, event and option numbers are split into subranges for each API module. + Each module receives its entire allocated range of SVC calls, whether implemented or not, + but return BLE_ERROR_NOT_SUPPORTED for unimplemented or undefined calls in its range. + + Note that the symbols BLE__SVC_LAST is the end of the allocated SVC range, + rather than the last SVC function call actually defined and implemented. + + Specific SVC, event and option values are defined in each module's ble_.h file, + which defines names of each individual SVC code based on the range start value. +*/ + +#ifndef BLE_RANGES_H__ +#define BLE_RANGES_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#define BLE_SVC_BASE 0x60 /**< Common BLE SVC base. */ +#define BLE_SVC_LAST 0x6B /**< Common BLE SVC last. */ + +#define BLE_GAP_SVC_BASE 0x6C /**< GAP BLE SVC base. */ +#define BLE_GAP_SVC_LAST 0x9A /**< GAP BLE SVC last. */ + +#define BLE_GATTC_SVC_BASE 0x9B /**< GATTC BLE SVC base. */ +#define BLE_GATTC_SVC_LAST 0xA7 /**< GATTC BLE SVC last. */ + +#define BLE_GATTS_SVC_BASE 0xA8 /**< GATTS BLE SVC base. */ +#define BLE_GATTS_SVC_LAST 0xB7 /**< GATTS BLE SVC last. */ + +#define BLE_L2CAP_SVC_BASE 0xB8 /**< L2CAP BLE SVC base. */ +#define BLE_L2CAP_SVC_LAST 0xBF /**< L2CAP BLE SVC last. */ + + +#define BLE_EVT_INVALID 0x00 /**< Invalid BLE Event. */ + +#define BLE_EVT_BASE 0x01 /**< Common BLE Event base. */ +#define BLE_EVT_LAST 0x0F /**< Common BLE Event last. */ + +#define BLE_GAP_EVT_BASE 0x10 /**< GAP BLE Event base. */ +#define BLE_GAP_EVT_LAST 0x2F /**< GAP BLE Event last. */ + +#define BLE_GATTC_EVT_BASE 0x30 /**< GATTC BLE Event base. */ +#define BLE_GATTC_EVT_LAST 0x4F /**< GATTC BLE Event last. */ + +#define BLE_GATTS_EVT_BASE 0x50 /**< GATTS BLE Event base. */ +#define BLE_GATTS_EVT_LAST 0x6F /**< GATTS BLE Event last. */ + +#define BLE_L2CAP_EVT_BASE 0x70 /**< L2CAP BLE Event base. */ +#define BLE_L2CAP_EVT_LAST 0x8F /**< L2CAP BLE Event last. */ + + +#define BLE_OPT_INVALID 0x00 /**< Invalid BLE Option. */ + +#define BLE_OPT_BASE 0x01 /**< Common BLE Option base. */ +#define BLE_OPT_LAST 0x1F /**< Common BLE Option last. */ + +#define BLE_GAP_OPT_BASE 0x20 /**< GAP BLE Option base. */ +#define BLE_GAP_OPT_LAST 0x3F /**< GAP BLE Option last. */ + +#define BLE_GATT_OPT_BASE 0x40 /**< GATT BLE Option base. */ +#define BLE_GATT_OPT_LAST 0x5F /**< GATT BLE Option last. */ + +#define BLE_GATTC_OPT_BASE 0x60 /**< GATTC BLE Option base. */ +#define BLE_GATTC_OPT_LAST 0x7F /**< GATTC BLE Option last. */ + +#define BLE_GATTS_OPT_BASE 0x80 /**< GATTS BLE Option base. */ +#define BLE_GATTS_OPT_LAST 0x9F /**< GATTS BLE Option last. */ + +#define BLE_L2CAP_OPT_BASE 0xA0 /**< L2CAP BLE Option base. */ +#define BLE_L2CAP_OPT_LAST 0xBF /**< L2CAP BLE Option last. */ + + +#define BLE_CFG_INVALID 0x00 /**< Invalid BLE configuration. */ + +#define BLE_CFG_BASE 0x01 /**< Common BLE configuration base. */ +#define BLE_CFG_LAST 0x1F /**< Common BLE configuration last. */ + +#define BLE_CONN_CFG_BASE 0x20 /**< BLE connection configuration base. */ +#define BLE_CONN_CFG_LAST 0x3F /**< BLE connection configuration last. */ + +#define BLE_GAP_CFG_BASE 0x40 /**< GAP BLE configuration base. */ +#define BLE_GAP_CFG_LAST 0x5F /**< GAP BLE configuration last. */ + +#define BLE_GATT_CFG_BASE 0x60 /**< GATT BLE configuration base. */ +#define BLE_GATT_CFG_LAST 0x7F /**< GATT BLE configuration last. */ + +#define BLE_GATTC_CFG_BASE 0x80 /**< GATTC BLE configuration base. */ +#define BLE_GATTC_CFG_LAST 0x9F /**< GATTC BLE configuration last. */ + +#define BLE_GATTS_CFG_BASE 0xA0 /**< GATTS BLE configuration base. */ +#define BLE_GATTS_CFG_LAST 0xBF /**< GATTS BLE configuration last. */ + +#define BLE_L2CAP_CFG_BASE 0xC0 /**< L2CAP BLE configuration base. */ +#define BLE_L2CAP_CFG_LAST 0xDF /**< L2CAP BLE configuration last. */ + + + + + +#ifdef __cplusplus +} +#endif +#endif /* BLE_RANGES_H__ */ + +/** + @} + @} +*/ diff --git a/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_types.h b/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_types.h new file mode 100644 index 000000000..88c93180c --- /dev/null +++ b/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_types.h @@ -0,0 +1,215 @@ +/* + * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + @addtogroup BLE_COMMON + @{ + @defgroup ble_types Common types and macro definitions + @{ + + @brief Common types and macro definitions for the BLE SoftDevice. + */ + +#ifndef BLE_TYPES_H__ +#define BLE_TYPES_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** @addtogroup BLE_TYPES_DEFINES Defines + * @{ */ + +/** @defgroup BLE_CONN_HANDLES BLE Connection Handles + * @{ */ +#define BLE_CONN_HANDLE_INVALID 0xFFFF /**< Invalid Connection Handle. */ +#define BLE_CONN_HANDLE_ALL 0xFFFE /**< Applies to all Connection Handles. */ +/** @} */ + + +/** @defgroup BLE_UUID_VALUES Assigned Values for BLE UUIDs + * @{ */ +/* Generic UUIDs, applicable to all services */ +#define BLE_UUID_UNKNOWN 0x0000 /**< Reserved UUID. */ +#define BLE_UUID_SERVICE_PRIMARY 0x2800 /**< Primary Service. */ +#define BLE_UUID_SERVICE_SECONDARY 0x2801 /**< Secondary Service. */ +#define BLE_UUID_SERVICE_INCLUDE 0x2802 /**< Include. */ +#define BLE_UUID_CHARACTERISTIC 0x2803 /**< Characteristic. */ +#define BLE_UUID_DESCRIPTOR_CHAR_EXT_PROP 0x2900 /**< Characteristic Extended Properties Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CHAR_USER_DESC 0x2901 /**< Characteristic User Description Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CLIENT_CHAR_CONFIG 0x2902 /**< Client Characteristic Configuration Descriptor. */ +#define BLE_UUID_DESCRIPTOR_SERVER_CHAR_CONFIG 0x2903 /**< Server Characteristic Configuration Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CHAR_PRESENTATION_FORMAT 0x2904 /**< Characteristic Presentation Format Descriptor. */ +#define BLE_UUID_DESCRIPTOR_CHAR_AGGREGATE_FORMAT 0x2905 /**< Characteristic Aggregate Format Descriptor. */ +/* GATT specific UUIDs */ +#define BLE_UUID_GATT 0x1801 /**< Generic Attribute Profile. */ +#define BLE_UUID_GATT_CHARACTERISTIC_SERVICE_CHANGED 0x2A05 /**< Service Changed Characteristic. */ +/* GAP specific UUIDs */ +#define BLE_UUID_GAP 0x1800 /**< Generic Access Profile. */ +#define BLE_UUID_GAP_CHARACTERISTIC_DEVICE_NAME 0x2A00 /**< Device Name Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_APPEARANCE 0x2A01 /**< Appearance Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_RECONN_ADDR 0x2A03 /**< Reconnection Address Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_PPCP 0x2A04 /**< Peripheral Preferred Connection Parameters Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_CAR 0x2AA6 /**< Central Address Resolution Characteristic. */ +#define BLE_UUID_GAP_CHARACTERISTIC_RPA_ONLY 0x2AC9 /**< Resolvable Private Address Only Characteristic. */ +/** @} */ + + +/** @defgroup BLE_UUID_TYPES Types of UUID + * @{ */ +#define BLE_UUID_TYPE_UNKNOWN 0x00 /**< Invalid UUID type. */ +#define BLE_UUID_TYPE_BLE 0x01 /**< Bluetooth SIG UUID (16-bit). */ +#define BLE_UUID_TYPE_VENDOR_BEGIN 0x02 /**< Vendor UUID types start at this index (128-bit). */ +/** @} */ + + +/** @defgroup BLE_APPEARANCES Bluetooth Appearance values + * @note Retrieved from http://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml + * @{ */ +#define BLE_APPEARANCE_UNKNOWN 0 /**< Unknown. */ +#define BLE_APPEARANCE_GENERIC_PHONE 64 /**< Generic Phone. */ +#define BLE_APPEARANCE_GENERIC_COMPUTER 128 /**< Generic Computer. */ +#define BLE_APPEARANCE_GENERIC_WATCH 192 /**< Generic Watch. */ +#define BLE_APPEARANCE_WATCH_SPORTS_WATCH 193 /**< Watch: Sports Watch. */ +#define BLE_APPEARANCE_GENERIC_CLOCK 256 /**< Generic Clock. */ +#define BLE_APPEARANCE_GENERIC_DISPLAY 320 /**< Generic Display. */ +#define BLE_APPEARANCE_GENERIC_REMOTE_CONTROL 384 /**< Generic Remote Control. */ +#define BLE_APPEARANCE_GENERIC_EYE_GLASSES 448 /**< Generic Eye-glasses. */ +#define BLE_APPEARANCE_GENERIC_TAG 512 /**< Generic Tag. */ +#define BLE_APPEARANCE_GENERIC_KEYRING 576 /**< Generic Keyring. */ +#define BLE_APPEARANCE_GENERIC_MEDIA_PLAYER 640 /**< Generic Media Player. */ +#define BLE_APPEARANCE_GENERIC_BARCODE_SCANNER 704 /**< Generic Barcode Scanner. */ +#define BLE_APPEARANCE_GENERIC_THERMOMETER 768 /**< Generic Thermometer. */ +#define BLE_APPEARANCE_THERMOMETER_EAR 769 /**< Thermometer: Ear. */ +#define BLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR 832 /**< Generic Heart rate Sensor. */ +#define BLE_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT 833 /**< Heart Rate Sensor: Heart Rate Belt. */ +#define BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE 896 /**< Generic Blood Pressure. */ +#define BLE_APPEARANCE_BLOOD_PRESSURE_ARM 897 /**< Blood Pressure: Arm. */ +#define BLE_APPEARANCE_BLOOD_PRESSURE_WRIST 898 /**< Blood Pressure: Wrist. */ +#define BLE_APPEARANCE_GENERIC_HID 960 /**< Human Interface Device (HID). */ +#define BLE_APPEARANCE_HID_KEYBOARD 961 /**< Keyboard (HID Subtype). */ +#define BLE_APPEARANCE_HID_MOUSE 962 /**< Mouse (HID Subtype). */ +#define BLE_APPEARANCE_HID_JOYSTICK 963 /**< Joystick (HID Subtype). */ +#define BLE_APPEARANCE_HID_GAMEPAD 964 /**< Gamepad (HID Subtype). */ +#define BLE_APPEARANCE_HID_DIGITIZERSUBTYPE 965 /**< Digitizer Tablet (HID Subtype). */ +#define BLE_APPEARANCE_HID_CARD_READER 966 /**< Card Reader (HID Subtype). */ +#define BLE_APPEARANCE_HID_DIGITAL_PEN 967 /**< Digital Pen (HID Subtype). */ +#define BLE_APPEARANCE_HID_BARCODE 968 /**< Barcode Scanner (HID Subtype). */ +#define BLE_APPEARANCE_GENERIC_GLUCOSE_METER 1024 /**< Generic Glucose Meter. */ +#define BLE_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR 1088 /**< Generic Running Walking Sensor. */ +#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE 1089 /**< Running Walking Sensor: In-Shoe. */ +#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE 1090 /**< Running Walking Sensor: On-Shoe. */ +#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP 1091 /**< Running Walking Sensor: On-Hip. */ +#define BLE_APPEARANCE_GENERIC_CYCLING 1152 /**< Generic Cycling. */ +#define BLE_APPEARANCE_CYCLING_CYCLING_COMPUTER 1153 /**< Cycling: Cycling Computer. */ +#define BLE_APPEARANCE_CYCLING_SPEED_SENSOR 1154 /**< Cycling: Speed Sensor. */ +#define BLE_APPEARANCE_CYCLING_CADENCE_SENSOR 1155 /**< Cycling: Cadence Sensor. */ +#define BLE_APPEARANCE_CYCLING_POWER_SENSOR 1156 /**< Cycling: Power Sensor. */ +#define BLE_APPEARANCE_CYCLING_SPEED_CADENCE_SENSOR 1157 /**< Cycling: Speed and Cadence Sensor. */ +#define BLE_APPEARANCE_GENERIC_PULSE_OXIMETER 3136 /**< Generic Pulse Oximeter. */ +#define BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP 3137 /**< Fingertip (Pulse Oximeter subtype). */ +#define BLE_APPEARANCE_PULSE_OXIMETER_WRIST_WORN 3138 /**< Wrist Worn(Pulse Oximeter subtype). */ +#define BLE_APPEARANCE_GENERIC_WEIGHT_SCALE 3200 /**< Generic Weight Scale. */ +#define BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS_ACT 5184 /**< Generic Outdoor Sports Activity. */ +#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_DISP 5185 /**< Location Display Device (Outdoor Sports Activity subtype). */ +#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_DISP 5186 /**< Location and Navigation Display Device (Outdoor Sports Activity subtype). */ +#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_POD 5187 /**< Location Pod (Outdoor Sports Activity subtype). */ +#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_POD 5188 /**< Location and Navigation Pod (Outdoor Sports Activity subtype). */ +/** @} */ + +/** @brief Set .type and .uuid fields of ble_uuid_struct to specified UUID value. */ +#define BLE_UUID_BLE_ASSIGN(instance, value) do {\ + instance.type = BLE_UUID_TYPE_BLE; \ + instance.uuid = value;} while(0) + +/** @brief Copy type and uuid members from src to dst ble_uuid_t pointer. Both pointers must be valid/non-null. */ +#define BLE_UUID_COPY_PTR(dst, src) do {\ + (dst)->type = (src)->type; \ + (dst)->uuid = (src)->uuid;} while(0) + +/** @brief Copy type and uuid members from src to dst ble_uuid_t struct. */ +#define BLE_UUID_COPY_INST(dst, src) do {\ + (dst).type = (src).type; \ + (dst).uuid = (src).uuid;} while(0) + +/** @brief Compare for equality both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ +#define BLE_UUID_EQ(p_uuid1, p_uuid2) \ + (((p_uuid1)->type == (p_uuid2)->type) && ((p_uuid1)->uuid == (p_uuid2)->uuid)) + +/** @brief Compare for difference both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ +#define BLE_UUID_NEQ(p_uuid1, p_uuid2) \ + (((p_uuid1)->type != (p_uuid2)->type) || ((p_uuid1)->uuid != (p_uuid2)->uuid)) + +/** @} */ + +/** @addtogroup BLE_TYPES_STRUCTURES Structures + * @{ */ + +/** @brief 128 bit UUID values. */ +typedef struct +{ + uint8_t uuid128[16]; /**< Little-Endian UUID bytes. */ +} ble_uuid128_t; + +/** @brief Bluetooth Low Energy UUID type, encapsulates both 16-bit and 128-bit UUIDs. */ +typedef struct +{ + uint16_t uuid; /**< 16-bit UUID value or octets 12-13 of 128-bit UUID. */ + uint8_t type; /**< UUID type, see @ref BLE_UUID_TYPES. If type is @ref BLE_UUID_TYPE_UNKNOWN, the value of uuid is undefined. */ +} ble_uuid_t; + +/**@brief Data structure. */ +typedef struct +{ + uint8_t *p_data; /**< Pointer to the data buffer provided to/from the application. */ + uint16_t len; /**< Length of the data buffer, in bytes. */ +} ble_data_t; + +/** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* BLE_TYPES_H__ */ + +/** + @} + @} +*/ diff --git a/src/sd_api_v6/sdk/components/softdevice/s140/headers/nrf_error.h b/src/sd_api_v6/sdk/components/softdevice/s140/headers/nrf_error.h new file mode 100644 index 000000000..6badee98e --- /dev/null +++ b/src/sd_api_v6/sdk/components/softdevice/s140/headers/nrf_error.h @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + /** + @defgroup nrf_error SoftDevice Global Error Codes + @{ + + @brief Global Error definitions +*/ + +/* Header guard */ +#ifndef NRF_ERROR_H__ +#define NRF_ERROR_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/** @defgroup NRF_ERRORS_BASE Error Codes Base number definitions + * @{ */ +#define NRF_ERROR_BASE_NUM (0x0) ///< Global error base +#define NRF_ERROR_SDM_BASE_NUM (0x1000) ///< SDM error base +#define NRF_ERROR_SOC_BASE_NUM (0x2000) ///< SoC error base +#define NRF_ERROR_STK_BASE_NUM (0x3000) ///< STK error base +/** @} */ + +#define NRF_SUCCESS (NRF_ERROR_BASE_NUM + 0) ///< Successful command +#define NRF_ERROR_SVC_HANDLER_MISSING (NRF_ERROR_BASE_NUM + 1) ///< SVC handler is missing +#define NRF_ERROR_SOFTDEVICE_NOT_ENABLED (NRF_ERROR_BASE_NUM + 2) ///< SoftDevice has not been enabled +#define NRF_ERROR_INTERNAL (NRF_ERROR_BASE_NUM + 3) ///< Internal Error +#define NRF_ERROR_NO_MEM (NRF_ERROR_BASE_NUM + 4) ///< No Memory for operation +#define NRF_ERROR_NOT_FOUND (NRF_ERROR_BASE_NUM + 5) ///< Not found +#define NRF_ERROR_NOT_SUPPORTED (NRF_ERROR_BASE_NUM + 6) ///< Not supported +#define NRF_ERROR_INVALID_PARAM (NRF_ERROR_BASE_NUM + 7) ///< Invalid Parameter +#define NRF_ERROR_INVALID_STATE (NRF_ERROR_BASE_NUM + 8) ///< Invalid state, operation disallowed in this state +#define NRF_ERROR_INVALID_LENGTH (NRF_ERROR_BASE_NUM + 9) ///< Invalid Length +#define NRF_ERROR_INVALID_FLAGS (NRF_ERROR_BASE_NUM + 10) ///< Invalid Flags +#define NRF_ERROR_INVALID_DATA (NRF_ERROR_BASE_NUM + 11) ///< Invalid Data +#define NRF_ERROR_DATA_SIZE (NRF_ERROR_BASE_NUM + 12) ///< Invalid Data size +#define NRF_ERROR_TIMEOUT (NRF_ERROR_BASE_NUM + 13) ///< Operation timed out +#define NRF_ERROR_NULL (NRF_ERROR_BASE_NUM + 14) ///< Null Pointer +#define NRF_ERROR_FORBIDDEN (NRF_ERROR_BASE_NUM + 15) ///< Forbidden Operation +#define NRF_ERROR_INVALID_ADDR (NRF_ERROR_BASE_NUM + 16) ///< Bad Memory Address +#define NRF_ERROR_BUSY (NRF_ERROR_BASE_NUM + 17) ///< Busy +#define NRF_ERROR_CONN_COUNT (NRF_ERROR_BASE_NUM + 18) ///< Maximum connection count exceeded. +#define NRF_ERROR_RESOURCES (NRF_ERROR_BASE_NUM + 19) ///< Not enough resources for operation + +#ifdef __cplusplus +} +#endif +#endif // NRF_ERROR_H__ + +/** + @} +*/ diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index c58140490..65a728dc1 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,46 +1,416 @@ -enable_testing() - -# Use the latest SoftDevice API version in the tests -#list(GET SD_API_VER_NUMS -1 SD_API_VER) - -message(STATUS "Using SoftDevice API version ${SD_API_VER} in tests.") - if(MSVC) add_definitions(-DPC_BLE_DRIVER_STATIC) add_definitions(-D_CRT_SECURE_NO_WARNINGS) endif() +find_package(Catch2 CONFIG REQUIRED) + include_directories ( ../3rdparty ../include/common/sdk_compat ../include/common ../include/common/internal/transport - ../src/sd_api_v${SD_API_VER}/sdk/components/softdevice/s132/headers ) -file(GLOB tests_src "test_*.cpp") +set(TESTS_SOFTDEVICE_V2 ) +set(TESTS_SOFTDEVICE_V3 ) +set(TESTS_SOFTDEVICE_V5 ) +set(TESTS_SOFTDEVICE_V6 ) + +set(CONNECTIVITY_ROOT "${CMAKE_SOURCE_DIR}/hex") +find_program(NRFJPROG "nrfjprog") + +if(NOT NRFJPROG) + message(STATUS "nrfjprog not found, tests will not be ran.") +endif() + +execute_process( + COMMAND ${NRFJPROG} "--version" + OUTPUT_VARIABLE version_info + RESULT_VARIABLE result +) + +message(STATUS "nrfjprog reports:\nversion:${version_info}\nexit_code:${result}\n") + +file(TO_NATIVE_PATH "${CONNECTIVITY_ROOT}/sd_api_v2/connectivity_${CONNECTIVITY_VERSION}_1m_with_s130_2.0.1.hex" SD_API_V2_S130_HEX) +file(TO_NATIVE_PATH "${CONNECTIVITY_ROOT}/sd_api_v3/connectivity_${CONNECTIVITY_VERSION}_1m_with_s132_3.1.0.hex" SD_API_V3_S132_HEX) +file(TO_NATIVE_PATH "${CONNECTIVITY_ROOT}/sd_api_v3/connectivity_${CONNECTIVITY_VERSION}_usb_with_s132_3.1.0.hex" SD_API_V3_S132_PCA10056_USB_HEX) +file(TO_NATIVE_PATH "${CONNECTIVITY_ROOT}/sd_api_v5/connectivity_${CONNECTIVITY_VERSION}_1m_with_s132_5.1.0.hex" SD_API_V5_S132_HEX) +file(TO_NATIVE_PATH "${CONNECTIVITY_ROOT}/sd_api_v6/connectivity_${CONNECTIVITY_VERSION}_1m_with_s132_6.1.0.hex" SD_API_V6_S132_HEX) +file(TO_NATIVE_PATH "${CONNECTIVITY_ROOT}/sd_api_v6/connectivity_${CONNECTIVITY_VERSION}_1m_with_s140_6.1.0.hex" SD_API_V6_S140_HEX) +file(TO_NATIVE_PATH "${CONNECTIVITY_ROOT}/sd_api_v6/connectivity_${CONNECTIVITY_VERSION}_1m_with_s140_usb_6.1.0.hex" SD_API_V6_S140_PCA10056_USB_HEX) + +function(parse_device_id device_id parse_error segger_sn serial_port) + set(INVALID_FORMAT_MESSAGE "Device id ${device_id} is in an invalid format, must be :") + + string(REPLACE ":" " " DEVICE_INFO ${device_id}) + separate_arguments(DEVICE_INFO) + list(LENGTH DEVICE_INFO DEVICE_INFO_COUNT) + if(NOT DEVICE_INFO_COUNT EQUAL 2) + set(${parse_error} ${INVALID_FORMAT_MESSAGE} PARENT_SCOPE) + return() + endif() + + list(GET DEVICE_INFO 0 DEVICE_SEGGER_SN) + list(GET DEVICE_INFO 1 DEVICE_SERIAL_PORT) + if(NOT DEVICE_SEGGER_SN OR NOT DEVICE_SERIAL_PORT) + set(${parse_error} ${INVALID_FORMAT_MESSAGE} PARENT_SCOPE) + return() + endif() + + set(${segger_sn} ${DEVICE_SEGGER_SN} PARENT_SCOPE) + set(${serial_port} ${DEVICE_SERIAL_PORT} PARENT_SCOPE) +endfunction() + +function(add_softdevice_test target_name pca device_a device_b connfw tests_reporter tests) + # Basic sanity checks + if(NOT NRFJPROG) + return() + endif() + + if(NOT device_a OR NOT device_b) + message(STATUS "Devices(s) missing for running tests in target ${target_name}") + return() + endif() + + set(COMMAND_NAME "${target_name}_CMD") + + set(DEVICE_A_SEGGER_SN ) + set(DEVICE_A_SERIAL_PORT ) + set(PARSE_ERROR ) + + parse_device_id(${device_a} PARSE_ERROR DEVICE_A_SEGGER_SN DEVICE_A_SERIAL_PORT) + + if(PARSE_ERROR) + message(WARNING "${PARSE_ERROR}") + return() + endif() + + parse_device_id(${device_b} PARSE_ERROR DEVICE_B_SEGGER_SN DEVICE_B_SERIAL_PORT) + if(PARSE_ERROR) + message(STATUS "${PARSE_ERROR}") + return() + endif() + + set(TEST_WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/$") + + message(STATUS "TARGET: ${target_name} uses:") + message(STATUS "DEVICE_A: SN:${DEVICE_A_SEGGER_SN} PORT:${DEVICE_A_SERIAL_PORT}") + message(STATUS "DEVICE_B: SN:${DEVICE_B_SEGGER_SN} PORT:${DEVICE_B_SERIAL_PORT}") + message(STATUS "TESTS: ${tests}") + message(STATUS "REPORTER: ${tests_reporter}") + + add_custom_command( + OUTPUT ${COMMAND_NAME} + + COMMAND ${NRFJPROG} --version + COMMAND ${CMAKE_COMMAND} -E echo "Erasing ${pca}/${DEVICE_A_SEGGER_SN}." + COMMAND ${NRFJPROG} -s ${DEVICE_A_SEGGER_SN} --eraseall --log + COMMAND ${CMAKE_COMMAND} -E echo "Programming ${pca}/${DEVICE_A_SEGGER_SN}." + COMMAND ${NRFJPROG} -s ${DEVICE_A_SEGGER_SN} --program ${connfw} --log + COMMAND ${CMAKE_COMMAND} -E echo "Resetting ${pca}/${DEVICE_A_SEGGER_SN}." + COMMAND ${NRFJPROG} -s ${DEVICE_A_SEGGER_SN} --reset --log + COMMAND ${CMAKE_COMMAND} -E echo "Resetting of ${pca}/${DEVICE_B_SEGGER_SN} complete." + + COMMAND ${CMAKE_COMMAND} -E echo "Erasing ${pca}/${DEVICE_B_SEGGER_SN}." + COMMAND ${NRFJPROG} -s ${DEVICE_B_SEGGER_SN} --eraseall --log + COMMAND ${CMAKE_COMMAND} -E echo "Programming ${pca}/${DEVICE_B_SEGGER_SN}." + COMMAND ${NRFJPROG} -s ${DEVICE_B_SEGGER_SN} --program ${connfw} --log + COMMAND ${CMAKE_COMMAND} -E echo "Resetting ${pca}/${DEVICE_B_SEGGER_SN}." + COMMAND ${NRFJPROG} -s ${DEVICE_B_SEGGER_SN} --reset --log + COMMAND ${CMAKE_COMMAND} -E echo "Resetting of ${pca}/${DEVICE_B_SEGGER_SN} complete." + COMMAND ${CMAKE_COMMAND} -E sleep 2 + ) + + if(BLE_DRIVER_TEST_OPENCLOSE_ITERATIONS) + set(OPENCLOSE_ITERATIONS ${BLE_DRIVER_TEST_OPENCLOSE_ITERATIONS}) + else() + set(OPENCLOSE_ITERATIONS 10) + endif() + + set(BAUD_RATE 1000000) + + # Extract hex filename only + get_filename_component(connfw_filename "${connfw}" NAME) + + # Link tests together so they are ran in sequence + foreach(integration_test IN LISTS tests) + add_custom_command( + OUTPUT ${COMMAND_NAME} + APPEND COMMAND ${CMAKE_COMMAND} -E echo "Running tests from $ with connectivity ${connfw}." + ) + + add_custom_command( + OUTPUT ${COMMAND_NAME} + APPEND COMMAND ${CMAKE_COMMAND} -E make_directory "$/test-reports" + ) + + add_custom_command( + OUTPUT ${COMMAND_NAME} + APPEND COMMAND ${CMAKE_COMMAND} -E env ${define_env} + "$" + --port-a ${DEVICE_A_SERIAL_PORT} + --port-b ${DEVICE_B_SERIAL_PORT} + --iterations ${OPENCLOSE_ITERATIONS} + --baud-rate ${BAUD_RATE} + --log-level trace + --hardware-info "hex:${connfw_filename},pca:${pca},segger_sn:${DEVICE_A_SEGGER_SN},${DEVICE_B_SEGGER_SN}" + --reporter ${tests_reporter} + --order lex + --out "$/test-reports/${target_name}-${integration_test}.xml" || (exit 0) + DEPENDS ${integration_test} + ) + endforeach() + + add_custom_target("${target_name}" DEPENDS ${COMMAND_NAME}) +endfunction() + +function(add_run_test_targets) + # SoftDevice API version -> SoftDevice version -> PCBA + # + # SDv6: + # S132: PCA10040 + # S140: PCA10056 + + # SDv5: + # S132: PCA10040 + # S132: PCA10056 -foreach(SD_API_VER ${SD_API_VER_NUMS}) - foreach(test_src ${tests_src}) - get_filename_component(test_name ${test_src} NAME_WE) - set(test_name "${test_name}_v${SD_API_VER}") + # SDv3: + # S132: PCA10040 + # S132: PCA10056 - # Build executable - add_executable(${test_name} ${test_src}) - target_compile_definitions(${test_name} PRIVATE -DNRF_SD_BLE_API=${SD_API_VER} -DNRF_LOG_FILENAME="${test_name}.txt") - target_include_directories(${test_name} PRIVATE ../src/sd_api_v${SD_API_VER}/sdk/components/softdevice/s132/headers) + # SDv2: + # S130: PCA10028 + # S130: PCA10031 + set(TEST_REPORTER "junit") - if(WIN32) - target_link_libraries(${test_name} PRIVATE pc_ble_driver_static_sd_api_v${SD_API_VER}) - elseif(APPLE) - target_link_libraries(${test_name} PRIVATE pc_ble_driver_static_sd_api_v${SD_API_VER}) - else() - # Assume Linux - target_link_libraries(${test_name} PRIVATE pc_ble_driver_static_sd_api_v${SD_API_VER} "pthread") + set(RUN_TEST_TARGETS ) + + if(BLE_DRIVER_TEST_PCA10028_A AND BLE_DRIVER_TEST_PCA10028_B) + # SDv2 + if(2 IN_LIST SD_API_VER_NUMS) + add_softdevice_test( + run_test_sdv2_s130_pca10028 + pca10028 + "${BLE_DRIVER_TEST_PCA10028_A}" + "${BLE_DRIVER_TEST_PCA10028_B}" + "${SD_API_V2_S130_HEX}" + "${TEST_REPORTER}" + "${TESTS_SOFTDEVICE_V2}" + ) + list(APPEND RUN_TEST_TARGETS run_test_sdv2_s130_pca10028) + endif() + endif() + + if(BLE_DRIVER_TEST_PCA10031_A AND BLE_DRIVER_TEST_PCA10031_B) + # SDv2 + if(2 IN_LIST SD_API_VER_NUMS) + add_softdevice_test( + run_test_sdv2_s130_pca10031 + pca10031 + "${BLE_DRIVER_TEST_PCA10031_A}" + "${BLE_DRIVER_TEST_PCA10031_B}" + "${SD_API_V2_S130_HEX}" + "${TEST_REPORTER}" + "${TESTS_SOFTDEVICE_V2}" + ) + list(APPEND RUN_TEST_TARGETS run_test_sdv2_s130_pca10031) + endif() + endif() + + if(BLE_DRIVER_TEST_PCA10040_A AND BLE_DRIVER_TEST_PCA10040_B) + # SDv3 + if(3 IN_LIST SD_API_VER_NUMS) + add_softdevice_test( + run_test_sdv3_s132_pca10040 + pca10040 + "${BLE_DRIVER_TEST_PCA10040_A}" + "${BLE_DRIVER_TEST_PCA10040_B}" + "${SD_API_V3_S132_HEX}" + "${TEST_REPORTER}" + "${TESTS_SOFTDEVICE_V3}" + ) + list(APPEND RUN_TEST_TARGETS run_test_sdv3_s132_pca10040) + endif() + + # SDv5 + if(5 IN_LIST SD_API_VER_NUMS) + add_softdevice_test( + run_test_sdv5_s132_pca10040 + pca10040 + "${BLE_DRIVER_TEST_PCA10040_A}" + "${BLE_DRIVER_TEST_PCA10040_B}" + "${SD_API_V5_S132_HEX}" + "${TEST_REPORTER}" + "${TESTS_SOFTDEVICE_V5}" + ) + list(APPEND RUN_TEST_TARGETS run_test_sdv5_s132_pca10040) + endif() + + # SDv6 + if(6 IN_LIST SD_API_VER_NUMS) + add_softdevice_test( + run_test_sdv6_s132_pca10040 + pca10040 + "${BLE_DRIVER_TEST_PCA10040_A}" + "${BLE_DRIVER_TEST_PCA10040_B}" + "${SD_API_V6_S132_HEX}" + "${TEST_REPORTER}" + "${TESTS_SOFTDEVICE_V6}" + ) + list(APPEND RUN_TEST_TARGETS run_test_sdv6_s132_pca10040) endif() + endif() + + if(BLE_DRIVER_TEST_PCA10056_USB_A AND BLE_DRIVER_TEST_PCA10056_USB_B) + # SDv3 + if(3 IN_LIST SD_API_VER_NUMS) + add_softdevice_test( + run_test_sdv3_s132_pca10056_usb + pca10056 + "${BLE_DRIVER_TEST_PCA10056_USB_A}" + "${BLE_DRIVER_TEST_PCA10056_USB_B}" + "${SD_API_V3_S132_PCA10056_USB_HEX}" + "${TEST_REPORTER}" + "${TESTS_SOFTDEVICE_V3}" + ) + list(APPEND RUN_TEST_TARGETS run_test_sdv3_s132_pca10056_usb) + endif() + + # SDv6 + if(6 IN_LIST SD_API_VER_NUMS) + add_softdevice_test( + run_test_sdv6_s140_pca10056_usb + pca10056 + "${BLE_DRIVER_TEST_PCA10056_USB_A}" + "${BLE_DRIVER_TEST_PCA10056_USB_B}" + "${SD_API_V6_S140_PCA10056_USB_HEX}" + "${TEST_REPORTER}" + "${TESTS_SOFTDEVICE_V6}" + ) + list(APPEND RUN_TEST_TARGETS run_test_sdv6_s140_pca10056_usb) + endif() + endif() + + if(BLE_DRIVER_TEST_PCA10056_A AND BLE_DRIVER_TEST_PCA10056_B) + # SDv3 + if(3 IN_LIST SD_API_VER_NUMS) + add_softdevice_test( + run_test_sdv3_s132_pca10056 + pca10056 + "${BLE_DRIVER_TEST_PCA10056_A}" + "${BLE_DRIVER_TEST_PCA10056_B}" + "${SD_API_V3_S132_HEX}" + "${TEST_REPORTER}" + "${TESTS_SOFTDEVICE_V3}" + ) + list(APPEND RUN_TEST_TARGETS run_test_sdv3_s132_pca10056) + endif() + + # SDv5 + if(5 IN_LIST SD_API_VER_NUMS) + add_softdevice_test( + run_test_sdv5_s132_pca10056 + pca10056 + "${BLE_DRIVER_TEST_PCA10056_A}" + "${BLE_DRIVER_TEST_PCA10056_B}" + "${SD_API_V5_S132_HEX}" + "${TEST_REPORTER}" + "${TESTS_SOFTDEVICE_V5}" + ) + list(APPEND RUN_TEST_TARGETS run_test_sdv5_s132_pca10056) + endif() + + # SDv6 + if(6 IN_LIST SD_API_VER_NUMS) + add_softdevice_test( + run_test_sdv6_s140_pca10056 + pca10056 + "${BLE_DRIVER_TEST_PCA10056_A}" + "${BLE_DRIVER_TEST_PCA10056_B}" + "${SD_API_V6_S140_HEX}" + "${TEST_REPORTER}" + "${TESTS_SOFTDEVICE_V6}" + ) + list(APPEND RUN_TEST_TARGETS run_test_sdv6_s140_pca10056) + endif() + endif() + + add_custom_target(run_tests DEPENDS ${RUN_TEST_TARGETS}) +endfunction(add_run_test_targets) + +function(setup_test) + cmake_parse_arguments( + SETUP_TEST + "" + "SOURCE_FILE;SOFTDEVICE_API_VER;TEST_LIST" + SOURCE_TESTCASES + ${ARGN} + ) + + set(softdevice_api_ver "${SETUP_TEST_SOFTDEVICE_API_VER}") + set(source_file "${SETUP_TEST_SOURCE_FILE}") + set(source_testcases "${SETUP_TEST_SOURCE_TESTCASES}") + set(test_list "${SETUP_TEST_TEST_LIST}") + + file(GLOB test_util_src "util/src/*.cpp") + + message(STATUS "softdevice_api_ver:${softdevice_api_ver} source_file:${source_file} source_testcases:${source_testcases} test_list:${test_list}") + + get_filename_component(test_name ${source_file} NAME_WE) + set(test_name "${test_name}_v${softdevice_api_ver}") + + # Build executable + add_executable(${test_name} ${source_file} ${source_testcases} ${test_util_src}) + + target_compile_definitions(${test_name} PRIVATE -DNRF_SD_BLE_API=${softdevice_api_ver}) + target_include_directories(${test_name} SYSTEM PRIVATE ../src/sd_api_v${softdevice_api_ver}/sdk/components/softdevice/s132/headers) + target_include_directories(${test_name} SYSTEM PRIVATE ../src/sd_api_v${softdevice_api_ver}/sdk/components/softdevice/s140/headers) + target_include_directories(${test_name} SYSTEM PRIVATE util/include) + + if(WIN32) + target_link_libraries(${test_name} PRIVATE pc_ble_driver_static_sd_api_v${softdevice_api_ver} Catch2::Catch2) + elseif(APPLE) + target_link_libraries(${test_name} PRIVATE pc_ble_driver_static_sd_api_v${softdevice_api_ver} Catch2::Catch2) + else() + # Assume Linux + target_link_libraries(${test_name} PRIVATE pc_ble_driver_static_sd_api_v${softdevice_api_ver} "pthread" Catch2::Catch2) + endif() + + if(NOT ${test_name} STREQUAL "test_uart_boost_v2") + set(${test_list} ${${test_list}} ${test_name} PARENT_SCOPE) + else() + message(STATUS "${test_name} NOT ADDED to ${test_list} since the test is a serial port loopback test.") + endif() +endfunction(setup_test) + +if(TEST_ALL) + set(TEST_TRANSPORT true) + set(TEST_SOFTDEVICE_API true) +endif() + +if(TEST_TRANSPORT) + file(GLOB transport_tests_src "transport/test_*.cpp") + + list(GET SD_API_VER_NUMS 0 ANY_SD_API_VERSION) + message(STATUS "Linking common code with SoftDevice API version ${ANY_SD_API_VERSION}") + + foreach(transport_test_src ${transport_tests_src}) + # Use any SD API version for linking object files common between SD API versions + setup_test(SOURCE_FILE ${transport_test_src} SOURCE_TESTCASES "" SOFTDEVICE_API_VER ${ANY_SD_API_VERSION} TEST_LIST TESTS_SOFTDEVICE_${ANY_SD_API_VERSION}) + endforeach(transport_test_src) +endif(TEST_TRANSPORT) + +if(TEST_SOFTDEVICE_API) + file(GLOB tests_src "softdevice_api/test_*.cpp") + file(GLOB testcases_src "softdevice_api/testcase_*.cpp") - add_test(NAME ${test_name} COMMAND ${test_name}) + foreach(SD_API_VER ${SD_API_VER_NUMS}) + foreach(test_src ${tests_src}) + setup_test(SOURCE_FILE ${test_src} SOURCE_TESTCASES ${testcases_src} SOFTDEVICE_API_VER ${SD_API_VER} TEST_LIST TESTS_SOFTDEVICE_V${SD_API_VER}) + endforeach(test_src) + endforeach(SD_API_VER) - message(STATUS "Added test ${test_src}, with test name ${test_name}.") - endforeach(test_src) -endforeach(SD_API_VER) + add_run_test_targets() +endif(TEST_SOFTDEVICE_API) diff --git a/test/README.md b/test/README.md index fb5f8f083..f43d6d10f 100644 --- a/test/README.md +++ b/test/README.md @@ -11,4 +11,33 @@ The following environment variables affects the running of the tests: | BLE_DRIVER_TEST_SERIAL_PORT_A | The serial port to use in the tests. | BLE_DRIVER_TEST_SERIAL_PORT_B | The serial port to use in the tests. Used in tests where two devices are needed. | BLE_DRIVER_TEST_OPENCLOSE_ITERATIONS | The number of open close iterations to run before concluding the test. It defaults to 100 iterations. -| BLE_DRIVER_TEST_LOGLEVEL | Specifies the pc-ble-driver log level. Defaults to 'info'. Can be 'trace', 'debug','info','warning','error','fatal'. \ No newline at end of file +| BLE_DRIVER_TEST_LOGLEVEL | Specifies the pc-ble-driver log level. Defaults to 'info'. Can be 'trace', 'debug','info','warning','error','fatal'. + +## Creating and running test targets +For CMake to create test targets one have to provide defines that identify the boards that are available on the system. + +The format of the assigned values are :. + +Since most integration tests require two boards the tests are setup to expect two boards of the same type in the tests. That way peripheral and central role for the same connectivity firmware can be ran in one test. If a board identifier value is not set, test targets for that combination of SoftDevice and board will not be created. + +| Define (-D) | Description | +|--------------------------------------|--------------------------------------------------| +| BLE_DRIVER_TEST_PCA10028_A | Id for PCA10028 board A | +| BLE_DRIVER_TEST_PCA10028_B | Id for PCA10028 board B | +| BLE_DRIVER_TEST_PCA10031_A | Id for PCA10031 board A | +| BLE_DRIVER_TEST_PCA10031_B | Id for PCA10031 board B | +| BLE_DRIVER_TEST_PCA10040_A | Id for PCA10040 board A | +| BLE_DRIVER_TEST_PCA10040_B | Id for PCA10040 board B | +| BLE_DRIVER_TEST_PCA10056_A | Id for PCA10056 board A (using Segger USB CDC) | +| BLE_DRIVER_TEST_PCA10056_B | Id for PCA10056 board B (using Segger USB CDC) | +| BLE_DRIVER_TEST_PCA10056_USB_A | Id for PCA10056 board A (using USB CDC port) | +| BLE_DRIVER_TEST_PCA10056_USB_B | Id for PCA10056 board B (using USB CDC port) | +| TEST_SOFTDEVICE_API | value set: test SoftDevice API, if not, skip | +| TEST_TRANSPORT | value set: test transport layers, if not, skip | +| TEST_ALL | value set: enable all tests | + +For example, if you have two PCA10056 boards, you provide the following defines the CMake when generating the project files: + -DBLE_DRIVER_TEST_PCA10056_A=: -DBLE_DRIVER_TEST_PCA10056_B=: -DTEST_SOFTDEVICE_API=1 + +The test targets needs to be ran manually, the naming of the test targets are "test_run_sdv\_\_pca". +Each of the targets first program the devices with the correct connectivity firmware and then starts the test. The test result is written in junit format in directory test-reports below the the test build directory. diff --git a/test/softdevice_api/test_main.cpp b/test/softdevice_api/test_main.cpp new file mode 100644 index 000000000..bc9bfa4fc --- /dev/null +++ b/test/softdevice_api/test_main.cpp @@ -0,0 +1,81 @@ +// Logging support + +#include +#include +#include + +std::ostream &nrfLogStream(std::cout); +std::mutex nrfLogMutex; + +#define CATCH_CONFIG_RUNNER +#include "catch2/catch.hpp" + +int main(int argc, char *argv[]) +{ + Catch::Session session; + + auto serialPortA = std::string{}; + auto serialPortB = std::string{}; + auto hardwareInfo = std::string{}; + auto baudRate = defaultBaudRate; + + using namespace Catch::clara; + + const auto cli = + session.cli() | + Opt(serialPortA, "serial-port")["--port-a"]("serial port A, usually BLE central") | + Opt(serialPortB, "serial-port")["--port-b"]("serial port B, usually BLE peripheral") | + Opt(test::ConfiguredEnvironment.baudRate, "baud-rate")["--baud-rate"]("baud rate") | + Opt(test::ConfiguredEnvironment.responseTimeout, "milliseconds")["--response-timeout"]("Transport response timeout") | + Opt(test::ConfiguredEnvironment.retransmissionInterval, "milliseconds")["--retransmission-interval"]("Transport retransmission interval") | + Opt(test::ConfiguredEnvironment.mtu, "size")["--ble-mtu"]("Default BLE MTU, may be ignored in some tests") | + Opt(test::ConfiguredEnvironment.numberOfIterations, + "count")["--iterations"]("number of iterations (for tests supporting that)") | + Opt( + [&](const std::string &value) { + if (!value.empty()) + { + try + { + test::ConfiguredEnvironment.driverLogLevel = + testutil::parseLogSeverity(value); + test::ConfiguredEnvironment.driverLogLevelSet = true; + } + catch (std::invalid_argument &) + { + INFO("Log level '" << value << "' not supported."); + } + } + }, + "trace|debug|info|warning|error|fatal")["--log-level"]("pc-ble-driver log level") | + Opt(hardwareInfo, + "text")["--hardware-info"]("hardware info text to show in test reports"); + + session.cli(cli); + + const auto exitCode = session.applyCommandLine(argc, argv); + + if (exitCode != 0) + return exitCode; + + if (!serialPortA.empty()) + { + test::ConfiguredEnvironment.serialPorts.emplace_back(serialPortA, baudRate); + } + + if (!serialPortB.empty()) + { + test::ConfiguredEnvironment.serialPorts.emplace_back(serialPortB, baudRate); + } + + if (!hardwareInfo.empty()) + { + test::ConfiguredEnvironment.hardwareInfo = hardwareInfo; + } + else + { + test::ConfiguredEnvironment.hardwareInfo = "No hardware info provided."; + } + + return session.run(); +} diff --git a/test/softdevice_api/testcase_advertising.cpp b/test/softdevice_api/testcase_advertising.cpp new file mode 100644 index 000000000..70672466c --- /dev/null +++ b/test/softdevice_api/testcase_advertising.cpp @@ -0,0 +1,331 @@ +/* + * Copyright (c) 2018 Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in or with a processor manufactured by Nordic + * Semiconductor ASA, or in or with a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * 5. Any software provided in binary or object form under this license must not be + * reverse engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +// Test framework +#include "catch2/catch.hpp" + +// Logging support +#include + +// Test support +#include +#include + +#include +#include + +#include +#include +#include + +TEST_CASE(CREATE_TEST_NAME_AND_TAGS( + advertising, [gap][known_error][PCA10028][PCA10031][PCA10040][PCA10056][PCA10059])) +{ + using namespace testutil; + + auto env = ::test::getEnvironment(); + INFO(::test::getEnvironmentAsText(env)); + + REQUIRE(env.serialPorts.size() >= 2); + const auto central = env.serialPorts.at(0); + const auto peripheral = env.serialPorts.at(1); + +#if NRF_SD_BLE_API == 6 + // Indicates if an error has occurred in a callback. + // The test framework is not thread safe so this variable is used to communicate that an issues + // has occurred in a callback. + auto error = false; + auto testSuccess = false; + + SECTION("extended") + { + const auto maxLengthOfAdvData = testutil::ADV_DATA_BUFFER_SIZE; + const auto maxNumberOfAdvertisements = 20; + const auto advertisementNameLength = 40; + const auto advertisementSetId = 5; + + auto scanRequestCountOtherCentral = 0; + auto scanRequestCountThisCentral = 0; + + std::vector peripheralAdvNameBuffer(advertisementNameLength); + testutil::appendRandomAlphaNumeric(peripheralAdvNameBuffer, advertisementNameLength); + const std::string peripheralAdvName(peripheralAdvNameBuffer.begin(), + peripheralAdvNameBuffer.end()); + + // Create advertising data and scan response data + std::vector advertising; + std::vector scanResponse; + + testutil::appendAdvertisingName(scanResponse, peripheralAdvName); + + // Append max number of bytes in advertisement packet with manufacturer specific random data + // after the peripheral name + const auto remainingSpace = + maxLengthOfAdvData - scanResponse.size() - 2 /* length and AD type */; + std::vector randomData; + + testutil::appendRandomData(randomData, remainingSpace); + + scanResponse.reserve(maxLengthOfAdvData); + testutil::appendManufacturerSpecificData(scanResponse, randomData, true); + + // Instantiate an adapter to use as BLE Central in the test + auto c = std::make_shared( + testutil::Central, central.port, env.baudRate, env.mtu, env.retransmissionInterval, + env.responseTimeout); + + // Instantiated an adapter to use as BLE Peripheral in the test + auto p = std::make_shared( + testutil::Peripheral, peripheral.port, env.baudRate, env.mtu, env.retransmissionInterval, + env.responseTimeout); + + REQUIRE(sd_rpc_log_handler_severity_filter_set(c->unwrap(), env.driverLogLevel) == + NRF_SUCCESS); + REQUIRE(sd_rpc_log_handler_severity_filter_set(p->unwrap(), env.driverLogLevel) == + NRF_SUCCESS); + + c->setGapEventCallback([&](const uint16_t eventId, const ble_gap_evt_t *gapEvent) -> bool { + switch (eventId) + { + case BLE_GAP_EVT_ADV_REPORT: + { + const auto advReport = gapEvent->params.adv_report; + + if (testutil::findAdvName(advReport, peripheralAdvName)) + { + std::vector manufacturerSpecificData; + + if (testutil::findManufacturerSpecificData(advReport, + manufacturerSpecificData)) + { + // Check that the received data is according to setupAdvertisement + if (manufacturerSpecificData != randomData) + { + NRF_LOG(c->role() << " Data configured in peripheral does not " + "match data received on central"); + error = true; + return true; + } + else + { + // TODO: check previous state + if (!(advReport.primary_phy == BLE_GAP_PHY_1MBPS && + advReport.secondary_phy == BLE_GAP_PHY_2MBPS && + advReport.type.extended_pdu == 1 && + advReport.type.scan_response == 1 && + advReport.type.connectable == 0 && + advReport.set_id == advertisementSetId)) + { + NRF_LOG(c->role() + << " Configured advertisement on peripheral does not " + "match event received on central"); + error = true; + return true; + } + } + } + } + + if (!error) + { + c->startScan(true); + } + } + return true; + case BLE_GAP_EVT_TIMEOUT: + if (gapEvent->params.timeout.src == BLE_GAP_TIMEOUT_SRC_SCAN) + { + const auto err_code = c->startScan(); + + if (err_code != NRF_SUCCESS) + { + NRF_LOG(c->role() + << " Scan start error, err_code " << std::hex << err_code); + error = true; + } + } + return true; + default: + return false; + } + }); + + p->setGapEventCallback([&](const uint16_t eventId, const ble_gap_evt_t *gapEvent) { + switch (eventId) + { + case BLE_GAP_EVT_TIMEOUT: + return false; + case BLE_GAP_EVT_SCAN_REQ_REPORT: + { + const auto scanRequestReport = gapEvent->params.scan_req_report; + if (scanRequestReport.adv_handle != p->scratchpad.adv_handle) + { + NRF_LOG(p->role() << " BLE_GAP_EVT_SCAN_REQ_REPORT: Received " + "advertisement handle does not match the " + "one setup with sd_ble_gap_adv_set_configure."); + error = true; + return true; + } + else + { + if (scanRequestReport.peer_addr == c->address) + { + scanRequestCountThisCentral += 1; + } + else + { + scanRequestCountOtherCentral += 1; + } + + NRF_LOG(p->role() + << " SCAN_REQ_REPORT count, this: " << scanRequestCountThisCentral + << ", other: " << scanRequestCountOtherCentral); + } + } + return true; + case BLE_GAP_EVT_ADV_SET_TERMINATED: + { + const auto setTerminated = gapEvent->params.adv_set_terminated; + + if (setTerminated.adv_handle != p->scratchpad.adv_handle) + { + NRF_LOG(p->role() << " BLE_GAP_EVT_ADV_SET_TERMINATED: Received " + "advertisement handle does not match the " + "one setup with sd_ble_gap_adv_set_configure."); + error = true; + return true; + } + + if (setTerminated.reason != BLE_GAP_EVT_ADV_SET_TERMINATED_REASON_LIMIT_REACHED) + { + NRF_LOG(p->role() + << " BLE_GAP_EVT_ADV_SET_TERMINATED: Limit reason was not " + "LIMIT_REACHED which it should be."); + error = true; + return true; + } + + if (setTerminated.num_completed_adv_events != maxNumberOfAdvertisements) + { + NRF_LOG(p->role() + << " BLE_GAP_EVT_ADV_SET_TERMINATED: Number of completed " + "advertisement events does not match max_adv_evts set in " + "sd_ble_gap_adv_set_configure."); + error = true; + return true; + } + + std::vector manufacturerSpecificData; + const auto advReport = setTerminated.adv_data; + + std::vector advData; + const auto data = advReport.scan_rsp_data.p_data; + const auto dataLength = advReport.scan_rsp_data.len; + advData.assign(data, data + dataLength); + + if (scanResponse != advData) + { + NRF_LOG(p->role() << " BLE_GAP_EVT_ADV_SET_TERMINATED: Advertisement " + "buffers set in sd_ble_gap_adv_set_configure does " + "not match with advertisement received."); + error = true; + return true; + } + + testSuccess = true; + + return true; + } + default: + return false; + } + }); + + c->setStatusCallback([&](const sd_rpc_app_status_t code, const std::string &message) { + if (code == PKT_DECODE_ERROR || code == PKT_SEND_MAX_RETRIES_REACHED || + code == PKT_UNEXPECTED) + { + error = true; + } + }); + + p->setStatusCallback([&](const sd_rpc_app_status_t code, const std::string &message) { + if (code == PKT_DECODE_ERROR || code == PKT_SEND_MAX_RETRIES_REACHED || + code == PKT_UNEXPECTED) + { + error = true; + } + }); + + // Open the adapters + REQUIRE(c->open() == NRF_SUCCESS); + REQUIRE(p->open() == NRF_SUCCESS); + + REQUIRE(c->configure() == NRF_SUCCESS); + REQUIRE(p->configure() == NRF_SUCCESS); + + REQUIRE(p->setupAdvertising({}, // advertising data + scanResponse, // scan response data + 40, // interval + 0, // duration + false, // connectable + true, // extended + true, // scan_req_notification + advertisementSetId, // set_id + BLE_GAP_PHY_1MBPS, // primary phy + BLE_GAP_PHY_2MBPS, // secondary phy + 0, // filter policy + maxNumberOfAdvertisements // max_adv_events + ) == NRF_SUCCESS); + REQUIRE(p->startAdvertising() == NRF_SUCCESS); + + REQUIRE(c->startScan(false, true, false) == NRF_SUCCESS); + + // Wait for the test to complete + std::this_thread::sleep_for(std::chrono::seconds(3)); + + CHECK(error == false); + CHECK(testSuccess == true); + + CHECK(c->close() == NRF_SUCCESS); + sd_rpc_adapter_delete(c->unwrap()); + + CHECK(p->close() == NRF_SUCCESS); + sd_rpc_adapter_delete(p->unwrap()); + } +#endif // NRF_SD_BLE_API == 6 +} diff --git a/test/softdevice_api/testcase_driver_open_close.cpp b/test/softdevice_api/testcase_driver_open_close.cpp new file mode 100644 index 000000000..e4d459e31 --- /dev/null +++ b/test/softdevice_api/testcase_driver_open_close.cpp @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2018 Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in or with a processor manufactured by Nordic + * Semiconductor ASA, or in or with a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * 5. Any software provided in binary or object form under this license must not be + * reverse engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +// Test framework +#include "catch2/catch.hpp" + +// Logging support +#include + +#include +#include + +#include +#include + +#include +#include + +TEST_CASE(CREATE_TEST_NAME_AND_TAGS(driver_open_close, + [rpc][PCA10028][PCA10031][PCA10040][PCA10056][PCA10059])) +{ + // Indicates if an error has occurred in a callback. + // The test framework is not thread safe so this variable is used to communicate that an issues + // has occurred in a callback. + + auto error = false; + + auto env = ::test::getEnvironment(); + INFO(::test::getEnvironmentAsText(env)); + REQUIRE(!env.serialPorts.empty()); + const auto serialPort = env.serialPorts.at(0); + const auto numberOfIterations = env.numberOfIterations; + + SECTION("open_already_opened_adapter") + { + auto c = std::make_unique( + testutil::Central, serialPort.port, env.baudRate, env.mtu, env.retransmissionInterval, + env.responseTimeout); + + REQUIRE(sd_rpc_log_handler_severity_filter_set(c->unwrap(), env.driverLogLevel) == + NRF_SUCCESS); + + CHECK(c->open() == NRF_SUCCESS); + CHECK(c->open() == NRF_ERROR_INVALID_STATE); + CHECK(c->close() == NRF_SUCCESS); + } + + SECTION("close_already_closed_adapter") + { + auto c = std::make_unique( + testutil::Central, serialPort.port, env.baudRate, env.mtu, env.retransmissionInterval, + env.responseTimeout); + + REQUIRE(sd_rpc_log_handler_severity_filter_set(c->unwrap(), env.driverLogLevel) == + NRF_SUCCESS); + + CHECK(c->close() == NRF_ERROR_INVALID_STATE); + CHECK(c->open() == NRF_SUCCESS); + CHECK(c->close() == NRF_SUCCESS); + CHECK(c->close() == NRF_ERROR_INVALID_STATE); + } + + SECTION("open_close_open_iterations") + { + for (uint32_t i = 0; i < numberOfIterations; i++) + { + NRF_LOG("Starting iteration #" << std::dec << static_cast(i + 1) << " of " + << numberOfIterations); + + auto c = std::make_shared( + testutil::Central, serialPort.port, env.baudRate, env.mtu, + env.retransmissionInterval, env.responseTimeout); + + REQUIRE(sd_rpc_log_handler_severity_filter_set(c->unwrap(), env.driverLogLevel) == + NRF_SUCCESS); + + c->setGapEventCallback([&](const uint16_t eventId, + const ble_gap_evt_t *gapEvent) -> bool { + switch (eventId) + { + case BLE_GAP_EVT_ADV_REPORT: + return true; + case BLE_GAP_EVT_TIMEOUT: + if (gapEvent->params.timeout.src == BLE_GAP_TIMEOUT_SRC_SCAN) + { + const auto err_code = c->startScan(); + + if (err_code != NRF_SUCCESS) + { + NRF_LOG(c->role() << " Scan start error, err_code " << err_code); + error = true; + } + } + return true; + default: + return false; + } + }); + + REQUIRE(c->open() == NRF_SUCCESS); + REQUIRE(c->configure() == NRF_SUCCESS); + REQUIRE(c->startScan() == NRF_SUCCESS); + + std::this_thread::sleep_for(std::chrono::seconds(2)); + + CHECK(error == false); + + CHECK(c->close() == NRF_SUCCESS); + sd_rpc_adapter_delete(c->unwrap()); + + NRF_LOG("Iteration #" << std::dec << static_cast(i + 1) << " of " + << numberOfIterations << " complete."); + } + } +} diff --git a/test/softdevice_api/testcase_issue_gh_112.cpp b/test/softdevice_api/testcase_issue_gh_112.cpp new file mode 100644 index 000000000..ff0957362 --- /dev/null +++ b/test/softdevice_api/testcase_issue_gh_112.cpp @@ -0,0 +1,562 @@ +/* + * Copyright (c) 2018 Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in or with a processor manufactured by Nordic + * Semiconductor ASA, or in or with a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * 5. Any software provided in binary or object form under this license must not be + * reverse engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +// This issue is only relevant for SoftDevice API >= 3 +#if NRF_SD_BLE_API >= 3 + +// Test framework +#include "catch2/catch.hpp" + +// Logging support +#include "internal/log.h" + +// Test support +#include +#include + +#include +#include + +#include +#include +#include + +TEST_CASE(CREATE_TEST_NAME_AND_TAGS(issue_gh_112, + [issue][PCA10028][PCA10031][PCA10040][PCA10056][PCA10059])) +{ + auto env = ::test::getEnvironment(); + INFO(::test::getEnvironmentAsText(env)); + REQUIRE(env.serialPorts.size() >= 2); + const auto central = env.serialPorts.at(0); + const auto peripheral = env.serialPorts.at(1); + + constexpr uint16_t BLE_UUID_HEART_RATE_SERVICE = 0x180D; + constexpr uint16_t BLE_UUID_HEART_RATE_MEASUREMENT_CHAR = 0x2A37; + constexpr uint16_t BLE_UUID_CCCD = 0x2902; + + // Indicates if an error has occurred in a callback. + // The test framework is not thread safe so this variable is used to communicate that an + // issue has occurred in a callback. + auto centralError = false; + auto peripheralError = false; + + // Set to true when the test is complete + auto testComplete = false; + + auto setupPeripheral = [&](const std::shared_ptr &p, + const std::string &advertisingName, + const std::vector &initialCharacteristicValue, + const uint16_t characteristicValueMaxLength) -> uint32_t { + // Setup the advertisement data + std::vector advertisingData; + testutil::appendAdvertisingName(advertisingData, advertisingName); + advertisingData.push_back(3); // Length of upcoming advertisement type + advertisingData.push_back(BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE); + + // Store BLE_UUID_HEART_RATE_SERVICE in little - endian format. + advertisingData.push_back(BLE_UUID_HEART_RATE_SERVICE & 0xFF); + advertisingData.push_back((BLE_UUID_HEART_RATE_SERVICE & 0xFF00) >> 8); + + auto err_code = p->setupAdvertising(advertisingData); + if (err_code != NRF_SUCCESS) + return err_code; + + // Setup service, use service UUID specified in scratchpad.target_service + err_code = sd_ble_gatts_service_add(p->unwrap(), BLE_GATTS_SRVC_TYPE_PRIMARY, + &(p->scratchpad.target_service), + &(p->scratchpad.service_handle)); + if (err_code != NRF_SUCCESS) + return err_code; + + // Setup characteristic, use characteristic UUID specified in + // scratchpad.target_characteristic + ble_gatts_char_md_t char_md; + ble_gatts_attr_md_t cccd_md; + ble_gatts_attr_t attr_char_value; + ble_gatts_attr_md_t attr_md; + + memset(&cccd_md, 0, sizeof(cccd_md)); + + BLE_GAP_CONN_SEC_MODE_SET_OPEN(&cccd_md.read_perm); + BLE_GAP_CONN_SEC_MODE_SET_OPEN(&cccd_md.write_perm); + cccd_md.vloc = BLE_GATTS_VLOC_STACK; + + memset(&char_md, 0, sizeof(char_md)); + + char_md.char_props.read = 1; + char_md.char_props.notify = 1; + char_md.char_props.write = 1; + char_md.char_props.write_wo_resp = 1; + char_md.p_char_user_desc = nullptr; + char_md.p_char_pf = nullptr; + char_md.p_user_desc_md = nullptr; + char_md.p_cccd_md = &cccd_md; + char_md.p_sccd_md = nullptr; + + memset(&attr_md, 0, sizeof(attr_md)); + + BLE_GAP_CONN_SEC_MODE_SET_OPEN(&attr_md.read_perm); + BLE_GAP_CONN_SEC_MODE_SET_OPEN(&attr_md.write_perm); + attr_md.vloc = BLE_GATTS_VLOC_STACK; + attr_md.rd_auth = 0; + attr_md.wr_auth = 0; + attr_md.vlen = 1; + + memset(&attr_char_value, 0, sizeof(attr_char_value)); + + attr_char_value.p_uuid = &(p->scratchpad.target_characteristic); + attr_char_value.p_attr_md = &attr_md; + attr_char_value.init_len = static_cast(initialCharacteristicValue.size()); + attr_char_value.init_offs = 0; + attr_char_value.max_len = characteristicValueMaxLength; + attr_char_value.p_value = const_cast(initialCharacteristicValue.data()); + + return sd_ble_gatts_characteristic_add(p->unwrap(), p->scratchpad.service_handle, &char_md, + &attr_char_value, + &(p->scratchpad.gatts_characteristic_handle)); + }; + + const auto peripheralAdvName = testutil::createRandomAdvertisingName(); + + // Instantiate an adapter to use as BLE Central in the test + auto c = std::make_shared( + testutil::Central, central.port, env.baudRate, env.mtu, env.retransmissionInterval, + env.responseTimeout); + + // Instantiated an adapter to use as BLE Peripheral in the test + auto p = std::make_shared( + testutil::Peripheral, peripheral.port, env.baudRate, env.mtu, env.retransmissionInterval, + env.responseTimeout); + + // Use Heart rate service and characteristics as target for testing but + // the values sent are not according to the Heart Rate service + + // BLE Central scratchpad + c->scratchpad.target_service.uuid = BLE_UUID_HEART_RATE_SERVICE; + c->scratchpad.target_service.type = BLE_UUID_TYPE_BLE; + + c->scratchpad.target_characteristic.uuid = BLE_UUID_HEART_RATE_MEASUREMENT_CHAR; + c->scratchpad.target_characteristic.type = BLE_UUID_TYPE_BLE; + + c->scratchpad.target_descriptor.uuid = BLE_UUID_CCCD; + c->scratchpad.target_descriptor.type = BLE_UUID_TYPE_BLE; + c->scratchpad.mtu = 150; + + // BLE Peripheral scratchpad + p->scratchpad.target_service.uuid = BLE_UUID_HEART_RATE_SERVICE; + p->scratchpad.target_service.type = BLE_UUID_TYPE_BLE; + + p->scratchpad.target_characteristic.uuid = BLE_UUID_HEART_RATE_MEASUREMENT_CHAR; + p->scratchpad.target_characteristic.type = BLE_UUID_TYPE_BLE; + + p->scratchpad.target_descriptor.uuid = BLE_UUID_CCCD; + p->scratchpad.target_descriptor.type = BLE_UUID_TYPE_BLE; + p->scratchpad.mtu = 150; + + REQUIRE(sd_rpc_log_handler_severity_filter_set(c->unwrap(), env.driverLogLevel) == NRF_SUCCESS); + REQUIRE(sd_rpc_log_handler_severity_filter_set(p->unwrap(), env.driverLogLevel) == NRF_SUCCESS); + + c->setGapEventCallback([&](const uint16_t eventId, const ble_gap_evt_t *gapEvent) -> bool { + switch (eventId) + { + case BLE_GAP_EVT_CONNECTED: + c->startServiceDiscovery(BLE_UUID_TYPE_BLE, BLE_UUID_HEART_RATE_SERVICE); + return true; + case BLE_GAP_EVT_DISCONNECTED: + return true; + case BLE_GAP_EVT_ADV_REPORT: + if (testutil::findAdvName(gapEvent->params.adv_report, peripheralAdvName)) + { + if (!c->scratchpad.connection_in_progress) + { + const auto err_code = c->connect(&(gapEvent->params.adv_report.peer_addr)); + + if (err_code != NRF_SUCCESS) + { + NRF_LOG(c->role() + << " Error connecting to " + << testutil::asText(gapEvent->params.adv_report.peer_addr) + << ", " << testutil::errorToString(err_code)); + centralError = true; + } + } + } +#if NRF_SD_BLE_API == 6 + else + { + c->startScan(true); + } +#endif + return true; + case BLE_GAP_EVT_TIMEOUT: + if (gapEvent->params.timeout.src == BLE_GAP_TIMEOUT_SRC_SCAN) + { + const auto err_code = c->startScan(); + + if (err_code != NRF_SUCCESS) + { + NRF_LOG(c->role() << " Scan start error, err_code " << err_code); + centralError = true; + } + } + return true; + case BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST: + { + const auto err_code = sd_ble_gap_conn_param_update( + c->unwrap(), c->scratchpad.connection_handle, + &(gapEvent->params.conn_param_update_request.conn_params)); + if (err_code != NRF_SUCCESS) + { + NRF_LOG(c->role() << " Conn params update failed, err_code " << err_code); + centralError = true; + } + } + return true; + default: + return false; + } + }); + + c->setGattcEventCallback([&](const uint16_t eventId, + const ble_gattc_evt_t *gattcEvent) -> bool { + switch (eventId) + { + case BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP: + { + NRF_LOG(c->role() << " Received service discovery response."); + + if (gattcEvent->gatt_status != NRF_SUCCESS) + { + NRF_LOG(c->role() << " Service discovery failed. " + << testutil::gattStatusToString(gattcEvent->gatt_status)); + centralError = true; + return true; + } + + const auto count = gattcEvent->params.prim_srvc_disc_rsp.count; + + if (count == 0) + { + NRF_LOG(c->role() << " No services not found."); + centralError = true; + return true; + } + + auto targetServiceFound = false; + + ble_gattc_service_t service{}; + + for (auto service_index = 0; service_index < count; service_index++) + { + service = gattcEvent->params.prim_srvc_disc_rsp.services[service_index]; + + if (service.uuid.uuid == c->scratchpad.target_service.uuid && + service.uuid.type == c->scratchpad.target_service.type) + { + NRF_LOG(c->role() << " Found target service " + << testutil::asText(c->scratchpad.target_service)); + targetServiceFound = true; + break; + } + } + + if (!targetServiceFound) + { + centralError = true; + NRF_LOG(c->role() << " Did not find target service " + << testutil::asText(c->scratchpad.target_service)); + return true; + } + + c->scratchpad.service_start_handle = service.handle_range.start_handle; + c->scratchpad.service_end_handle = service.handle_range.end_handle; + + NRF_LOG(c->role() << " Discovered target service. " + << testutil::asText(service.uuid) << " start_handle: " + << testutil::asText(c->scratchpad.service_start_handle) + << " end_handle: " + << testutil::asText(c->scratchpad.service_end_handle)); + + if (c->startCharacteristicDiscovery() != NRF_SUCCESS) + { + centralError = true; + } + } + return true; + case BLE_GATTC_EVT_CHAR_DISC_RSP: + { + const auto count = gattcEvent->params.char_disc_rsp.count; + + if (gattcEvent->gatt_status != NRF_SUCCESS) + { + NRF_LOG(c->role() << " Characteristic discovery failed. " + << testutil::gattStatusToString(gattcEvent->gatt_status)); + centralError = true; + return true; + } + + NRF_LOG(c->role() + << " Received characteristic discovery response, characteristics count: " + << count); + + auto foundTargetCharacteristic = false; + + for (auto i = 0; i < count; i++) + { + NRF_LOG(c->role() + << " [characteristic #" << i << "] " + << testutil::asText(gattcEvent->params.char_disc_rsp.chars[i])); + + if (gattcEvent->params.char_disc_rsp.chars[i].uuid.uuid == + c->scratchpad.target_characteristic.uuid && + gattcEvent->params.char_disc_rsp.chars[i].uuid.type == + c->scratchpad.target_characteristic.type) + { + NRF_LOG(c->role() << " Found target characteristic, " + << testutil::asText(c->scratchpad.target_characteristic)); + c->scratchpad.characteristic_decl_handle = + gattcEvent->params.char_disc_rsp.chars[i].handle_decl; + c->scratchpad.characteristic_value_handle = + gattcEvent->params.char_disc_rsp.chars[i].handle_value; + foundTargetCharacteristic = true; + } + } + + if (!foundTargetCharacteristic) + { + NRF_LOG(c->role() << " Did not find target characteristic " + << testutil::asText(c->scratchpad.target_characteristic)); + centralError = true; + } + else + { + if (c->startDescriptorDiscovery() != NRF_SUCCESS) + { + centralError = true; + } + } + + return true; + } + case BLE_GATTC_EVT_DESC_DISC_RSP: + { + const auto count = gattcEvent->params.desc_disc_rsp.count; + + if (gattcEvent->gatt_status != NRF_SUCCESS) + { + NRF_LOG(c->role() << " Descriptor discovery failed. " + << testutil::gattStatusToString(gattcEvent->gatt_status)); + centralError = true; + return true; + } + + NRF_LOG(c->role() << " Received descriptor discovery response, descriptor count: " + << count); + + // Change the MTU + const auto err_code = sd_ble_gattc_exchange_mtu_request( + c->unwrap(), c->scratchpad.connection_handle, c->scratchpad.mtu); + + if (err_code != NRF_SUCCESS) + { + NRF_LOG(c->role() << " MTU exchange request failed, " << testutil::errorToString(err_code)); + centralError = true; + } + } + return true; + case BLE_GATTC_EVT_WRITE_RSP: + NRF_LOG(c->role() << " Received write response."); + + if (gattcEvent->gatt_status != NRF_SUCCESS) + { + NRF_LOG(c->role() << " Error. Write operation failed. " + << testutil::gattStatusToString(gattcEvent->gatt_status)); + centralError = true; + } + else + { + testComplete = true; + } + + return true; + case BLE_GATTC_EVT_EXCHANGE_MTU_RSP: + { + auto const server_rx_mtu = gattcEvent->params.exchange_mtu_rsp.server_rx_mtu; + NRF_LOG(c->role() << " MTU response received. New ATT_MTU is " << server_rx_mtu); + + // Write some data to characteristic to trigger reported error + std::vector data; + + // Send negotiated MTU - 3 bytes used by GATT header + testutil::appendRandomData(data, c->scratchpad.mtu - 3); + + const auto err_code = + c->writeCharacteristicValue(c->scratchpad.characteristic_value_handle, data); + + if (err_code != NRF_SUCCESS) + { + NRF_LOG(c->role() + << " Error writing data to characteristic. err_code: " << err_code); + centralError = true; + } + } + return true; + default: + return false; + } + }); + + c->setGattsEventCallback( + [&](const uint16_t eventId, const ble_gatts_evt_t *gattsEvent) -> bool { + switch (eventId) + { + case BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST: + { + const auto err_code = sd_ble_gatts_exchange_mtu_reply( + c->unwrap(), c->scratchpad.connection_handle, c->scratchpad.mtu); + + if (err_code != NRF_SUCCESS) + { + NRF_LOG(c->role() + << " MTU exchange request reply failed, " << testutil::errorToString(err_code)); + centralError = true; + } + } + return true; + default: + return false; + } + }); + + p->setGapEventCallback([&](const uint16_t eventId, const ble_gap_evt_t *gapEvent) { + switch (eventId) + { + case BLE_GAP_EVT_DISCONNECTED: + { + // Use scratchpad defaults when advertising + NRF_LOG(p->role() << " Starting advertising."); + + const auto err_code = p->startAdvertising(); + if (err_code != NRF_SUCCESS) + { + NRF_LOG(p->role() << " Error starting advertising after disconnect, " << testutil::errorToString(err_code)); + peripheralError = true; + } + } + return true; + case BLE_GAP_EVT_SEC_PARAMS_REQUEST: + { + const auto err_code = + sd_ble_gap_sec_params_reply(p->unwrap(), p->scratchpad.connection_handle, + BLE_GAP_SEC_STATUS_SUCCESS, nullptr, nullptr); + + if (err_code != NRF_SUCCESS) + { + peripheralError = true; + NRF_LOG(p->role() << "Failed reply with GAP security parameters. " + << testutil::errorToString(err_code)); + } + } + return true; + case BLE_GATTS_EVT_SYS_ATTR_MISSING: + { + const auto err_code = sd_ble_gatts_sys_attr_set( + p->unwrap(), p->scratchpad.connection_handle, nullptr, 0, 0); + + if (err_code != NRF_SUCCESS) + { + peripheralError = true; + NRF_LOG(p->role() << "Failed updating persistent sys attr info. " + << testutil::errorToString(err_code)); + } + } + return true; + default: + return false; + } + }); + + p->setGattsEventCallback( + [&](const uint16_t eventId, const ble_gatts_evt_t *gattsEvent) -> bool { + switch (eventId) + { + case BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST: + { + const auto err_code = sd_ble_gatts_exchange_mtu_reply( + p->unwrap(), p->scratchpad.connection_handle, p->scratchpad.mtu); + + if (err_code != NRF_SUCCESS) + { + peripheralError = true; + NRF_LOG(p->role() << " MTU exchange request reply failed. " + << testutil::errorToString(err_code)); + } + } + return true; + default: + return false; + } + }); + + // Open the adapters + REQUIRE(c->open() == NRF_SUCCESS); + REQUIRE(p->open() == NRF_SUCCESS); + + REQUIRE(c->configure() == NRF_SUCCESS); + REQUIRE(p->configure() == NRF_SUCCESS); + + REQUIRE(setupPeripheral(p, peripheralAdvName, {0x00}, p->scratchpad.mtu) == NRF_SUCCESS); + REQUIRE(p->startAdvertising() == NRF_SUCCESS); + + // Starting the scan starts the sequence of operations to get a connection established + REQUIRE(c->startScan() == NRF_SUCCESS); + + // Wait for the test to complete + std::this_thread::sleep_for(std::chrono::seconds(3)); + + CHECK(centralError == false); + CHECK(peripheralError == false); + CHECK(testComplete == true); + + CHECK(c->close() == NRF_SUCCESS); + sd_rpc_adapter_delete(c->unwrap()); + + CHECK(p->close() == NRF_SUCCESS); + sd_rpc_adapter_delete(p->unwrap()); +} + +#endif // This issue is only relevant for SoftDevice API >= 3 diff --git a/test/softdevice_api/testcase_issue_stuck_in_scan_mode.cpp b/test/softdevice_api/testcase_issue_stuck_in_scan_mode.cpp new file mode 100644 index 000000000..e6b31c05a --- /dev/null +++ b/test/softdevice_api/testcase_issue_stuck_in_scan_mode.cpp @@ -0,0 +1,185 @@ +/* + * Copyright (c) 2018 Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in or with a processor manufactured by Nordic + * Semiconductor ASA, or in or with a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * 5. Any software provided in binary or object form under this license must not be + * reverse engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +// Test framework +#include "catch2/catch.hpp" + +// Logging support +#include + +#include +#include + +#include +#include + +#include +#include + +TEST_CASE(CREATE_TEST_NAME_AND_TAGS(issue_stuck_in_scan_mode, + [issue][PCA10028][PCA10031][PCA10040][PCA10056][PCA10059])) +{ + // Indicates if an error has occurred in a callback. + // The test framework is not thread safe so this variable is used to communicate that an issues + // has occurred in a callback. + auto error = false; + + std::chrono::steady_clock::time_point adv_report_received; + + auto env = ::test::getEnvironment(); + INFO(::test::getEnvironmentAsText(env)); + + REQUIRE(env.serialPorts.size() >= 2); + const auto central = env.serialPorts.at(0); + const auto peripheral = env.serialPorts.at(1); + + const auto scanIterations = env.numberOfIterations; + INFO("Purpose of this test:"); + INFO("1) Assert that closing the adapter when scan is running does not prevent opening the " + "adapter again."); + INFO("2) Assert that advertisement reports are received all the time (timeout is set to " + "0x00)"); + INFO("Running " << scanIterations << " adapter open -> scan -> adapter close iterations"); + + const auto advertisementNameLength = 20; + + std::vector peripheralAdvNameBuffer(advertisementNameLength); + testutil::appendRandomAlphaNumeric(peripheralAdvNameBuffer, advertisementNameLength); + const std::string peripheralAdvName(peripheralAdvNameBuffer.begin(), + peripheralAdvNameBuffer.end()); + + // Create advertising data and scan response data + std::vector advertising; + std::vector advertisingPacket; + + testutil::appendAdvertisingName(advertisingPacket, peripheralAdvName); + + // Instantiated an adapter to use as BLE Peripheral in the test + auto p = std::make_shared( + testutil::Peripheral, peripheral.port, env.baudRate, env.mtu, env.retransmissionInterval, + env.responseTimeout); + + REQUIRE(sd_rpc_log_handler_severity_filter_set(p->unwrap(), env.driverLogLevel) == NRF_SUCCESS); + REQUIRE(p->open() == NRF_SUCCESS); + REQUIRE(p->configure() == NRF_SUCCESS); + REQUIRE(p->setupAdvertising(advertisingPacket, // advertising data + {}, // scan response data + 40, // interval + 0, // duration + false, // connectable + false // extended + ) == NRF_SUCCESS); + REQUIRE(p->startAdvertising() == NRF_SUCCESS); + + for (auto i = static_cast(0); i < scanIterations; i++) + { + auto adv_report_count = 0; + + auto c = std::make_shared( + testutil::Central, central.port, env.baudRate, env.mtu, env.retransmissionInterval, + env.responseTimeout); + + NRF_LOG(c->role() << " Starting scan iteration #" << std::dec << static_cast(i) + << " of " << static_cast(scanIterations)); + + REQUIRE(sd_rpc_log_handler_severity_filter_set(c->unwrap(), env.driverLogLevel) == + NRF_SUCCESS); + + // Scan forever + c->scratchpad.scan_param.timeout = 0; + + c->setGapEventCallback([&](const uint16_t eventId, const ble_gap_evt_t *gapEvent) -> bool { + switch (eventId) + { + case BLE_GAP_EVT_ADV_REPORT: + adv_report_count++; + NRF_LOG("adv_report_count: " << adv_report_count); +#if NRF_SD_BLE_API == 6 + { + const auto err_code = c->startScan(true); + if (err_code != NRF_SUCCESS) + { + NRF_LOG(c->role() + << " startScan in BLE_GAP_EVT_ADV_REPORT failed, err_code " + << err_code); + error = true; + } + } +#endif + adv_report_received = std::chrono::steady_clock::now(); + + return true; + case BLE_GAP_EVT_TIMEOUT: + if (gapEvent->params.timeout.src == BLE_GAP_TIMEOUT_SRC_SCAN) + { + const auto err_code = c->startScan(); + + if (err_code != NRF_SUCCESS) + { + NRF_LOG(c->role() << " Scan start error, err_code " << err_code); + error = true; + } + } + return true; + default: + return false; + } + }); + + REQUIRE(c->open() == NRF_SUCCESS); + REQUIRE(c->configure() == NRF_SUCCESS); + REQUIRE(c->startScan() == NRF_SUCCESS); + + std::this_thread::sleep_for(std::chrono::seconds(5)); + + // Check that we have recently received an advertisement report + auto now = std::chrono::steady_clock::now(); + auto silence_duration = + std::chrono::duration_cast(now - adv_report_received) + .count(); + CHECK(silence_duration < 1000); + + CHECK(error == false); + + // Cleanup current adapter connection + CHECK(c->close() == NRF_SUCCESS); + sd_rpc_adapter_delete(c->unwrap()); + + NRF_LOG(c->role() << " Scan iteration #" << std::dec << static_cast(i) << " of " + << static_cast(scanIterations) << " completed"); + } +} diff --git a/test/softdevice_api/testcase_phy_update.cpp b/test/softdevice_api/testcase_phy_update.cpp new file mode 100644 index 000000000..f7c99c556 --- /dev/null +++ b/test/softdevice_api/testcase_phy_update.cpp @@ -0,0 +1,308 @@ +/* + * Copyright (c) 2018 Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in or with a processor manufactured by Nordic + * Semiconductor ASA, or in or with a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * 5. Any software provided in binary or object form under this license must not be + * reverse engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +// Test framework +#include "catch2/catch.hpp" + +#if NRF_SD_BLE_API >= 6 + +// Logging support +#include + +// Test support +#include +#include + +#include +#include + +#include +#include +#include + +using namespace testutil; + +TEST_CASE(CREATE_TEST_NAME_AND_TAGS(phy_update, [known_issue][PCA10056][PCA10059][nRF52840])) +{ + // Indicates if an error has occurred in a callback. + // The test framework is not thread safe so this variable is used to communicate that an issues + // has occurred in a callback. + auto error = false; + + // Set to true when the test is complete + auto testComplete = false; + + auto env = ::test::getEnvironment(); + INFO(::test::getEnvironmentAsText(env)); + REQUIRE(env.serialPorts.size() >= 2); + const auto central = env.serialPorts.at(0); + const auto peripheral = env.serialPorts.at(1); + + SECTION("update_from_1mps_to_2mpb") + { + const auto advertisementNameLength = 20; + std::vector peripheralAdvNameBuffer(advertisementNameLength); + testutil::appendRandomAlphaNumeric(peripheralAdvNameBuffer, advertisementNameLength); + const std::string peripheralAdvName(peripheralAdvNameBuffer.begin(), + peripheralAdvNameBuffer.end()); + std::vector advResponse; + testutil::appendAdvertisingName(advResponse, peripheralAdvName); + + ble_gap_phys_t requestedPhys{BLE_GAP_PHY_2MBPS, BLE_GAP_PHY_2MBPS}; + + // Instantiate an adapter to use as BLE Central in the test + auto c = std::make_shared( + testutil::Central, central.port, env.baudRate, env.mtu, env.retransmissionInterval, + env.responseTimeout); + + // Instantiated an adapter to use as BLE Peripheral in the test + auto p = std::make_shared( + testutil::Peripheral, peripheral.port, env.baudRate, env.mtu, + env.retransmissionInterval, env.responseTimeout); + + REQUIRE(sd_rpc_log_handler_severity_filter_set(c->unwrap(), env.driverLogLevel) == + NRF_SUCCESS); + REQUIRE(sd_rpc_log_handler_severity_filter_set(p->unwrap(), env.driverLogLevel) == + NRF_SUCCESS); + + c->setGapEventCallback([&](const uint16_t eventId, const ble_gap_evt_t *gapEvent) -> bool { + switch (eventId) + { + case BLE_GAP_EVT_CONNECTED: + { + const auto err_code = + sd_ble_gap_phy_update(c->unwrap(), gapEvent->conn_handle, &requestedPhys); + + if (err_code != NRF_SUCCESS) + { + NRF_LOG(c->role() + << "BLE_GAP_EVT_CONNECTED: error calling sd_ble_gap_phy_update" + << ", " << testutil::errorToString(err_code)); + + error = true; + } + } + return true; + case BLE_GAP_EVT_DISCONNECTED: + return true; + case BLE_GAP_EVT_ADV_REPORT: + if (testutil::findAdvName(gapEvent->params.adv_report, peripheralAdvName)) + { + if (!c->scratchpad.connection_in_progress) + { + const auto err_code = + c->connect(&(gapEvent->params.adv_report.peer_addr)); + + if (err_code != NRF_SUCCESS) + { + NRF_LOG(c->role() + << " Error connecting to " + << testutil::asText(gapEvent->params.adv_report.peer_addr) + << ", " << testutil::errorToString(err_code)); + error = true; + } + } + } + else + { + c->startScan(true); + } + return true; + case BLE_GAP_EVT_TIMEOUT: + if (gapEvent->params.timeout.src == BLE_GAP_TIMEOUT_SRC_SCAN) + { + const auto err_code = c->startScan(); + + if (err_code != NRF_SUCCESS) + { + NRF_LOG(c->role() << " Scan start error, err_code " << err_code); + error = true; + } + } + return true; + case BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST: + { + const auto err_code = sd_ble_gap_conn_param_update( + c->unwrap(), c->scratchpad.connection_handle, + &(gapEvent->params.conn_param_update_request.conn_params)); + + if (err_code != NRF_SUCCESS) + { + NRF_LOG(c->role() << " Conn params update failed, err_code " << err_code); + error = true; + } + } + return true; + case BLE_GAP_EVT_PHY_UPDATE: + { + if (gapEvent->params.phy_update.rx_phy != requestedPhys.rx_phys || + gapEvent->params.phy_update.tx_phy != requestedPhys.tx_phys) + { + NRF_LOG( + c->role() + << "BLE_GAP_EVT_PHY_UPDATE:: phy is not updated according to request"); + error = true; + } + else + { + const auto status = gapEvent->params.phy_update.status; + if (status != BLE_HCI_STATUS_CODE_SUCCESS) + { + NRF_LOG(c->role() << "BLE_GAP_EVT_PHY_UPDATE: status is " << status + << ", should be BLE_HCI_STATUS_CODE_SUCCESS( " + << BLE_HCI_STATUS_CODE_SUCCESS << ")"); + error = true; + } + } + } + + return true; + default: + return false; + } + }); + + p->setGapEventCallback([&](const uint16_t eventId, const ble_gap_evt_t *gapEvent) { + switch (eventId) + { + case BLE_GAP_EVT_CONNECTED: + return true; + case BLE_GAP_EVT_DISCONNECTED: + { + // Use scratchpad defaults when advertising + NRF_LOG(p->role() << " Starting advertising."); + const auto err_code = p->startAdvertising(); + if (err_code != NRF_SUCCESS) + { + error = true; + } + } + return true; + case BLE_GAP_EVT_TIMEOUT: + return true; + case BLE_GAP_EVT_PHY_UPDATE_REQUEST: + { + if (gapEvent->params.phy_update_request.peer_preferred_phys != requestedPhys) + { + NRF_LOG(p->role() << "BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST: update " + "request is not equal to the one sent from central"); + error = true; + } + else + { + const auto err_code = sd_ble_gap_phy_update( + p->unwrap(), gapEvent->conn_handle, + &(gapEvent->params.phy_update_request.peer_preferred_phys)); + + if (err_code != NRF_SUCCESS) + { + NRF_LOG(p->role() + << "BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST: error calling " + "sd_ble_gap_phy_update" + << ", " << testutil::errorToString(err_code)); + + error = true; + } + } + } + return true; + case BLE_GAP_EVT_PHY_UPDATE: + { + if (gapEvent->params.phy_update.rx_phy != requestedPhys.rx_phys || + gapEvent->params.phy_update.tx_phy != requestedPhys.tx_phys) + { + NRF_LOG( + p->role() + << "BLE_GAP_EVT_PHY_UPDATE:: phy is not updated according to request"); + error = true; + } + else + { + const auto status = gapEvent->params.phy_update.status; + + if (status != BLE_HCI_STATUS_CODE_SUCCESS) + { + NRF_LOG(p->role() << "BLE_GAP_EVT_PHY_UPDATE: status is " << status + << ", should be BLE_HCI_STATUS_CODE_SUCCESS( " + << BLE_HCI_STATUS_CODE_SUCCESS << ")"); + error = true; + } + else + { + testComplete = true; + } + } + } + + return true; + + default: + return false; + } + }); + + // Open the adapters + REQUIRE(c->open() == NRF_SUCCESS); + REQUIRE(p->open() == NRF_SUCCESS); + + REQUIRE(c->configure() == NRF_SUCCESS); + REQUIRE(p->configure() == NRF_SUCCESS); + + REQUIRE(p->setupAdvertising(advResponse, // advertising data + {}, // scan response data + 40, // interval + 0, // duration + true // connectable + ) == NRF_SUCCESS); + REQUIRE(p->startAdvertising() == NRF_SUCCESS); + + REQUIRE(c->startScan() == NRF_SUCCESS); + + // Wait for the test to complete + std::this_thread::sleep_for(std::chrono::seconds(5)); + + CHECK(error == false); + CHECK(testComplete == true); + + CHECK(c->close() == NRF_SUCCESS); + sd_rpc_adapter_delete(c->unwrap()); + + CHECK(p->close() == NRF_SUCCESS); + sd_rpc_adapter_delete(p->unwrap()); + } +} +#endif // NRF_SD_BLE_API >= 6 \ No newline at end of file diff --git a/test/softdevice_api/testcase_rssi.cpp b/test/softdevice_api/testcase_rssi.cpp new file mode 100644 index 000000000..c9950dcfe --- /dev/null +++ b/test/softdevice_api/testcase_rssi.cpp @@ -0,0 +1,377 @@ +/* + * Copyright (c) 2018 Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in or with a processor manufactured by Nordic + * Semiconductor ASA, or in or with a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * 5. Any software provided in binary or object form under this license must not be + * reverse engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +// Test framework +#include "catch2/catch.hpp" + +// Logging support +#include + +// Test support +#include +#include + +#include +#include + +#include +#include +#include + +TEST_CASE(CREATE_TEST_NAME_AND_TAGS(rssi, [PCA10028][PCA10031][PCA10040][PCA10056][PCA10059])) +{ + // Indicates if an error has occurred in a callback. + // The test framework is not thread safe so this variable is used to communicate that an issues + // has occurred in a callback. + auto centralError = false; + auto peripheralError = false; + + // Set to true when the test is complete + auto testCompleteCentral = false; + auto testCompletePeripheral = false; + + auto env = ::test::getEnvironment(); + INFO(::test::getEnvironmentAsText(env)); + REQUIRE(env.serialPorts.size() >= 2); + const auto central = env.serialPorts.at(0); + const auto peripheral = env.serialPorts.at(1); + + auto centralRssiReportsCount = 0; + auto peripheralRssiReportsCount = 0; + const auto maxRssiReportsWanted = 20; + const auto rssiThreshold = 0; + const auto rssiSkipCount = 0; + + auto periperalRssiStop = false; + auto centralRssiStop = false; + + const auto advertisementNameLength = 20; + std::vector peripheralAdvNameBuffer(advertisementNameLength); + testutil::appendRandomAlphaNumeric(peripheralAdvNameBuffer, advertisementNameLength); + const std::string peripheralAdvName(peripheralAdvNameBuffer.begin(), + peripheralAdvNameBuffer.end()); + std::vector advResponse; + testutil::appendAdvertisingName(advResponse, peripheralAdvName); + + // Instantiate an adapter to use as BLE Central in the test + auto c = std::make_shared( + testutil::Central, central.port, env.baudRate, env.mtu, env.retransmissionInterval, + env.responseTimeout); + + // Instantiated an adapter to use as BLE Peripheral in the test + auto p = std::make_shared( + testutil::Peripheral, peripheral.port, env.baudRate, env.mtu, env.retransmissionInterval, + env.responseTimeout); + + REQUIRE(sd_rpc_log_handler_severity_filter_set(c->unwrap(), env.driverLogLevel) == NRF_SUCCESS); + REQUIRE(sd_rpc_log_handler_severity_filter_set(p->unwrap(), env.driverLogLevel) == NRF_SUCCESS); + + c->setGapEventCallback([&](const uint16_t eventId, const ble_gap_evt_t *gapEvent) -> bool { + switch (eventId) + { + case BLE_GAP_EVT_CONNECTED: + { + const auto err_code = sd_ble_gap_rssi_start(c->unwrap(), gapEvent->conn_handle, + rssiThreshold, rssiSkipCount); + + if (err_code != NRF_SUCCESS) + { + NRF_LOG(c->role() + << "BLE_GAP_EVT_CONNECTED: error calling sd_ble_gap_rssi_start" + << ", " << testutil::errorToString(err_code)); + + centralError = true; + } + } + return true; + case BLE_GAP_EVT_ADV_REPORT: + if (testutil::findAdvName(gapEvent->params.adv_report, peripheralAdvName)) + { + if (!c->scratchpad.connection_in_progress) + { + const auto err_code = c->connect(&(gapEvent->params.adv_report.peer_addr)); + + if (err_code != NRF_SUCCESS) + { + NRF_LOG(c->role() + << " Error connecting to " + << testutil::asText(gapEvent->params.adv_report.peer_addr) + << ", " << testutil::errorToString(err_code)); + centralError = true; + } + } + } + else + { + c->startScan(true); + } + return true; + case BLE_GAP_EVT_TIMEOUT: + if (gapEvent->params.timeout.src == BLE_GAP_TIMEOUT_SRC_SCAN) + { + const auto err_code = c->startScan(); + + if (err_code != NRF_SUCCESS) + { + NRF_LOG(c->role() << " Scan start error, " << testutil::errorToString(err_code)); + centralError = true; + } + } + return true; + case BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST: + { + const auto err_code = sd_ble_gap_conn_param_update( + c->unwrap(), c->scratchpad.connection_handle, + &(gapEvent->params.conn_param_update_request.conn_params)); + + if (err_code != NRF_SUCCESS) + { + NRF_LOG(c->role() << " Conn params update failed, " << testutil::errorToString(err_code)); + centralError = true; + } + } + return true; + + case BLE_GAP_EVT_RSSI_CHANGED: + { + centralRssiReportsCount++; + + if (centralRssiReportsCount >= maxRssiReportsWanted && !centralRssiStop) + { + centralRssiStop = true; + + int8_t lastRssi; + +#if NRF_SD_BLE_API >= 6 + uint8_t channelIndex; + auto err_code = sd_ble_gap_rssi_get(c->unwrap(), gapEvent->conn_handle, + &lastRssi, &channelIndex); +#else + auto err_code = + sd_ble_gap_rssi_get(c->unwrap(), gapEvent->conn_handle, &lastRssi); +#endif + + if (err_code == BLE_ERROR_INVALID_CONN_HANDLE) + { + NRF_LOG(c->role() + << "BLE_GAP_EVT_RSSI_CHANGED: sd_ble_gap_rssi_get" + << " reports connection is invalid. Connection may be down."); + } + else if (err_code != NRF_SUCCESS) + { + NRF_LOG(c->role() << "BLE_GAP_EVT_RSSI_CHANGED: sd_ble_gap_rssi_get" + << ", " << testutil::errorToString(err_code)); + + centralError = true; + return true; + } + + NRF_LOG(c->role() + << "BLE_GAP_EVT_RSSI_CHANGED: RSSI from sd_ble_api_rssi_get is " + << static_cast(lastRssi)); + +#if NRF_SD_BLE_API >= 6 + NRF_LOG( + c->role() + << "BLE_GAP_EVT_RSSI_CHANGED: channel index from sd_ble_api_rssi_get is " + << static_cast(channelIndex)); +#endif + + err_code = sd_ble_gap_rssi_stop(c->unwrap(), gapEvent->conn_handle); + + if (err_code == BLE_ERROR_INVALID_CONN_HANDLE) + { + NRF_LOG(c->role() + << "BLE_GAP_EVT_RSSI_CHANGED: sd_ble_gap_rssi_stop" + << " reports connection is invalid. Connection may be down."); + } + else if (err_code != NRF_SUCCESS) + { + NRF_LOG(c->role() << "BLE_GAP_EVT_RSSI_CHANGED: sd_ble_gap_rssi_stop" + << ", " << testutil::errorToString(err_code)); + + centralError = true; + return true; + } + + testCompleteCentral = true; + } + } + + return true; + default: + return false; + } + }); + + p->setGapEventCallback([&](const uint16_t eventId, const ble_gap_evt_t *gapEvent) { + switch (eventId) + { + case BLE_GAP_EVT_CONNECTED: + { + const auto err_code = sd_ble_gap_rssi_start(p->unwrap(), gapEvent->conn_handle, + rssiThreshold, rssiSkipCount); + + if (err_code != NRF_SUCCESS) + { + NRF_LOG(p->role() + << "BLE_GAP_EVT_CONNECTED: error calling sd_ble_gap_rssi_start" + << ", " << testutil::errorToString(err_code)); + + peripheralError = true; + return true; + } + } + return true; + case BLE_GAP_EVT_DISCONNECTED: + { + // Use scratchpad defaults when advertising + NRF_LOG(p->role() << " Disconnected, connection handle: 0x" + << testutil::asHex(gapEvent->conn_handle) + << ". Starting advertising."); + if (p->startAdvertising() != NRF_SUCCESS) + { + peripheralError = true; + return true; + } + } + case BLE_GAP_EVT_RSSI_CHANGED: + { + peripheralRssiReportsCount++; + + if (peripheralRssiReportsCount >= maxRssiReportsWanted && !periperalRssiStop) + { + periperalRssiStop = true; + + int8_t lastRssi; + +#if NRF_SD_BLE_API >= 6 + uint8_t channelIndex; + auto err_code = sd_ble_gap_rssi_get(p->unwrap(), gapEvent->conn_handle, + &lastRssi, &channelIndex); +#else + auto err_code = + sd_ble_gap_rssi_get(p->unwrap(), gapEvent->conn_handle, &lastRssi); +#endif + + if (err_code == BLE_ERROR_INVALID_CONN_HANDLE) + { + NRF_LOG(p->role() + << "BLE_GAP_EVT_RSSI_CHANGED: sd_ble_gap_rssi_get" + << ", reports connection is invalid. Connection may be down."); + } + else if (err_code != NRF_SUCCESS) + { + NRF_LOG(p->role() << "BLE_GAP_EVT_RSSI_CHANGED: sd_ble_gap_rssi_get" + << ", " << testutil::errorToString(err_code)); + + peripheralError = true; + return true; + } + + NRF_LOG(p->role() + << "BLE_GAP_EVT_RSSI_CHANGED: RSSI from sd_ble_api_rssi_get is " + << static_cast(lastRssi)); + +#if NRF_SD_BLE_API >= 6 + NRF_LOG( + p->role() + << "BLE_GAP_EVT_RSSI_CHANGED: channel index from sd_ble_api_rssi_get is " + << static_cast(channelIndex)); +#endif + + err_code = sd_ble_gap_rssi_stop(p->unwrap(), gapEvent->conn_handle); + + if (err_code == BLE_ERROR_INVALID_CONN_HANDLE) + { + NRF_LOG(p->role() + << "BLE_GAP_EVT_RSSI_STOP: sd_ble_gap_rssi_get" + << " reports connection is invalid. Connection may be down."); + } + else if (err_code != NRF_SUCCESS) + { + NRF_LOG(p->role() << "BLE_GAP_EVT_RSSI_CHANGED: sd_ble_gap_rssi_stop" + << ", " << testutil::errorToString(err_code)); + + peripheralError = true; + return true; + } + + testCompletePeripheral = true; + } + } + return true; + default: + return false; + } + }); + + // Open the adapters + REQUIRE(c->open() == NRF_SUCCESS); + REQUIRE(p->open() == NRF_SUCCESS); + + REQUIRE(c->configure() == NRF_SUCCESS); + REQUIRE(p->configure() == NRF_SUCCESS); + + REQUIRE(p->setupAdvertising(advResponse, // advertising data + {}, // scan response data + 40, // interval + 0, // duration + true // connectable + ) == NRF_SUCCESS); + REQUIRE(p->startAdvertising() == NRF_SUCCESS); + + REQUIRE(c->startScan() == NRF_SUCCESS); + + // Wait for the test to complete + std::this_thread::sleep_for(std::chrono::seconds(4)); + + CAPTURE(centralRssiReportsCount); + CAPTURE(peripheralRssiReportsCount); + + CHECK(centralError == false); + CHECK(peripheralError == false); + + CHECK(testCompletePeripheral == true); + CHECK(testCompleteCentral == true); + + CHECK(c->close() == NRF_SUCCESS); + sd_rpc_adapter_delete(c->unwrap()); + + CHECK(p->close() == NRF_SUCCESS); + sd_rpc_adapter_delete(p->unwrap()); +} diff --git a/test/softdevice_api/testcase_security.cpp b/test/softdevice_api/testcase_security.cpp new file mode 100644 index 000000000..82598c656 --- /dev/null +++ b/test/softdevice_api/testcase_security.cpp @@ -0,0 +1,314 @@ +/* + * Copyright (c) 2018 Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in or with a processor manufactured by Nordic + * Semiconductor ASA, or in or with a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * 5. Any software provided in binary or object form under this license must not be + * reverse engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +// Test framework +#include "catch2/catch.hpp" + +// Logging support +#include + +// Test support +#include +#include + +#include +#include + +#include +#include +#include + +TEST_CASE(CREATE_TEST_NAME_AND_TAGS(security, [PCA10028][PCA10031][PCA10040][PCA10056][PCA10059])) +{ + auto env = ::test::getEnvironment(); + INFO(::test::getEnvironmentAsText(env)); + REQUIRE(env.serialPorts.size() >= 2); + const auto central = env.serialPorts.at(0); + const auto peripheral = env.serialPorts.at(1); + + // Indicates if an error has occurred in a callback. + // The test framework is not thread safe so this variable is used to communicate that an issues + // has occurred in a callback. + auto error = false; + + // Set to true when the test is complete + auto testComplete = false; + + const auto setupPeripheral = [&](const std::shared_ptr &p, + const std::string &advertisingName, + const std::vector &initialCharacteristicValue, + const uint16_t characteristicValueMaxLength) -> uint32_t { + // Setup the advertisement data + std::vector advertisingData; + testutil::appendAdvertisingName(advertisingData, advertisingName); + + auto err_code = p->setupAdvertising(advertisingData); + if (err_code != NRF_SUCCESS) + { + NRF_LOG(p->role() << " Error setting advertising data, " + << ", " << testutil::errorToString(err_code)); + return err_code; + } + + return err_code; + }; + + SECTION("legacy_passkey") + { + const auto peripheralAdvName = testutil::createRandomAdvertisingName(); + + // Instantiate an adapter to use as BLE Central in the test + auto c = std::make_shared( + testutil::Central, central.port, env.baudRate, env.mtu, env.retransmissionInterval, + env.responseTimeout); + + // Instantiated an adapter to use as BLE Peripheral in the test + auto p = std::make_shared( + testutil::Peripheral, peripheral.port, env.baudRate, env.mtu, + env.retransmissionInterval, env.responseTimeout); + + REQUIRE(sd_rpc_log_handler_severity_filter_set(c->unwrap(), env.driverLogLevel) == + NRF_SUCCESS); + REQUIRE(sd_rpc_log_handler_severity_filter_set(p->unwrap(), env.driverLogLevel) == + NRF_SUCCESS); + + c->setGapEventCallback([&](const uint16_t eventId, const ble_gap_evt_t *gapEvent) -> bool { + switch (eventId) + { + case BLE_GAP_EVT_CONNECTED: + { + const auto err_code = c->startAuthentication(true, true, false, true); + + if (err_code != NRF_SUCCESS) + { + error = true; + } + } + return true; + case BLE_GAP_EVT_DISCONNECTED: + return true; + case BLE_GAP_EVT_ADV_REPORT: + if (testutil::findAdvName(gapEvent->params.adv_report, peripheralAdvName)) + { + if (!c->scratchpad.connection_in_progress) + { + const auto err_code = + c->connect(&(gapEvent->params.adv_report.peer_addr)); + + if (err_code != NRF_SUCCESS) + { + NRF_LOG(c->role() + << " Error connecting to " + << testutil::asText(gapEvent->params.adv_report.peer_addr) + << ", " << testutil::errorToString(err_code)); + error = true; + } + } + } +#if NRF_SD_BLE_API == 6 + else + { + c->startScan(true); + } +#endif + return true; + case BLE_GAP_EVT_TIMEOUT: + if (gapEvent->params.timeout.src == BLE_GAP_TIMEOUT_SRC_SCAN) + { + const auto err_code = c->startScan(); + + if (err_code != NRF_SUCCESS) + { + NRF_LOG(c->role() << " Scan start error, err_code " << err_code); + error = true; + } + } + return true; + case BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST: + { + const auto err_code = sd_ble_gap_conn_param_update( + c->unwrap(), c->scratchpad.connection_handle, + &(gapEvent->params.conn_param_update_request.conn_params)); + + if (err_code != NRF_SUCCESS) + { + NRF_LOG(c->role() << " Conn params update failed, err_code " << err_code); + error = true; + } + } + return true; + case BLE_GAP_EVT_SEC_PARAMS_REQUEST: + { + ble_gap_sec_keyset_t keyset; + memset(&keyset, 0, sizeof(ble_gap_sec_keyset_t)); + + ble_gap_sec_keys_t keys_own; + ble_gap_sec_keys_t keys_peer; + memset(&keys_own, 0, sizeof(keys_own)); + memset(&keys_peer, 0, sizeof(keys_peer)); + + keyset.keys_own = keys_own; + keyset.keys_peer = keys_peer; + + const auto err_code = c->securityParamsReply(keyset); + + if (err_code != NRF_SUCCESS) + { + error = true; + } + } + return true; + case BLE_GAP_EVT_PASSKEY_DISPLAY: + { + size_t size = 0; + + switch (p->scratchpad.key_type) + { + case BLE_GAP_AUTH_KEY_TYPE_PASSKEY: + size = 6; + break; + case BLE_GAP_AUTH_KEY_TYPE_OOB: + size = 16; + break; + default: + break; + } + + if (size != 0) + { + std::memcpy(c->scratchpad.key, gapEvent->params.passkey_display.passkey, + size); + } + + const auto err_code = + p->authKeyReply(p->scratchpad.key_type, c->scratchpad.key); + + if (err_code != NRF_SUCCESS) + { + error = true; + } + } + return true; + case BLE_GAP_EVT_AUTH_STATUS: + if (gapEvent->params.auth_status.auth_status == BLE_GAP_SEC_STATUS_SUCCESS) + { + testComplete = true; + } + else + { + error = true; + } + + return true; + default: + return false; + } + }); + + p->setGapEventCallback([&](const uint16_t eventId, const ble_gap_evt_t *gapEvent) { + switch (eventId) + { + case BLE_GAP_EVT_DISCONNECTED: + { + // Use scratchpad defaults when advertising + NRF_LOG(p->role() << " Starting advertising."); + const auto err_code = p->startAdvertising(); + if (err_code != NRF_SUCCESS) + { + error = true; + } + } + return true; + case BLE_GAP_EVT_TIMEOUT: + return true; + case BLE_GAP_EVT_SEC_PARAMS_REQUEST: + { + ble_gap_sec_keyset_t keyset; + std::memset(&keyset, 0, sizeof(keyset)); + + const auto err_code = + p->securityParamsReply(BLE_GAP_SEC_STATUS_SUCCESS, keyset); + + if (err_code != NRF_SUCCESS) + { + error = true; + } + } + return true; + case BLE_GAP_EVT_AUTH_STATUS: + if (gapEvent->params.auth_status.auth_status == BLE_GAP_SEC_STATUS_SUCCESS) + { + // Move on to the next type of bonding/pairing + testComplete = true; + } + else + { + error = true; + } + + return true; + default: + return false; + } + }); + + // Open the adapters + REQUIRE(c->open() == NRF_SUCCESS); + REQUIRE(p->open() == NRF_SUCCESS); + + REQUIRE(c->configure() == NRF_SUCCESS); + REQUIRE(p->configure() == NRF_SUCCESS); + + REQUIRE(setupPeripheral(p, peripheralAdvName, {0x00}, p->scratchpad.mtu) == NRF_SUCCESS); + REQUIRE(p->startAdvertising() == NRF_SUCCESS); + + // Starting the scan starts the sequence of operations to get a connection established + REQUIRE(c->startScan() == NRF_SUCCESS); + + // Wait for the test to complete + std::this_thread::sleep_for(std::chrono::seconds(5)); + + CHECK(error == false); + CHECK(testComplete == true); + + CHECK(c->close() == NRF_SUCCESS); + sd_rpc_adapter_delete(c->unwrap()); + + CHECK(p->close() == NRF_SUCCESS); + sd_rpc_adapter_delete(p->unwrap()); + } +} diff --git a/test/test_issue_gh_112.cpp b/test/test_issue_gh_112.cpp deleted file mode 100644 index 558a523ff..000000000 --- a/test/test_issue_gh_112.cpp +++ /dev/null @@ -1,584 +0,0 @@ -/* -* Copyright (c) 2018 Nordic Semiconductor ASA -* All rights reserved. -* -* Redistribution and use in source and binary forms, with or without modification, -* are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, this -* list of conditions and the following disclaimer in the documentation and/or -* other materials provided with the distribution. -* -* 3. Neither the name of Nordic Semiconductor ASA nor the names of other -* contributors to this software may be used to endorse or promote products -* derived from this software without specific prior written permission. -* -* 4. This software must only be used in or with a processor manufactured by Nordic -* Semiconductor ASA, or in or with a processor manufactured by a third party that -* is used in combination with a processor manufactured by Nordic Semiconductor. -* -* 5. Any software provided in binary or object form under this license must not be -* reverse engineered, decompiled, modified and/or disassembled. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - - // Test framework -#define CATCH_CONFIG_MAIN -#include "catch2/catch.hpp" - -// This issue is only relevant for SoftDevice API >= 3 -#if NRF_SD_BLE_API >= 3 - -// Logging support -#include "internal/log.h" - -// Test support -#include "test_setup.h" -#include "test_util.h" - -#include "ble.h" -#include "sd_rpc.h" - -#include -#include -#include - -constexpr uint16_t BLE_UUID_HEART_RATE_SERVICE = 0x180D; -constexpr uint16_t BLE_UUID_HEART_RATE_MEASUREMENT_CHAR = 0x2A37; -constexpr uint16_t BLE_UUID_CCCD = 0x2902; - -// Indicates if an error has occurred in a callback. -// The test framework is not thread safe so this variable is used to communicate that an issues has occurred in a callback. -bool error = false; - -// Set to true when the test is complete -bool testComplete = false; - -uint32_t setupPeripheral(const std::shared_ptr &p, const std::string &advertisingNme, const std::vector &initialCharaciteristicValue, const uint16_t characteristicValueMaxLength) -{ - // Setup the advertisement data - std::vector advertisingData; - testutil::appendAdvertisingName(advertisingData, advertisingNme); - advertisingData.push_back(3); // Length of upcoming advertisement type - advertisingData.push_back(BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE); - - // Store BLE_UUID_HEART_RATE_SERVICE in little - endian format. - advertisingData.push_back(BLE_UUID_HEART_RATE_SERVICE & 0xFF); - advertisingData.push_back((BLE_UUID_HEART_RATE_SERVICE & 0xFF00) >> 8); - - const uint8_t * sr_data = nullptr; - const uint8_t sr_data_length = 0; - - auto err_code = sd_ble_gap_adv_data_set( - p->unwrap(), - advertisingData.data(), - static_cast(advertisingData.size()), - sr_data, - sr_data_length); - if (err_code != NRF_SUCCESS) return err_code; - - // Setup service, use service UUID specified in scratchpad.target_service - err_code = sd_ble_gatts_service_add( - p->unwrap(), - BLE_GATTS_SRVC_TYPE_PRIMARY, - &(p->scratchpad.target_service), - &(p->scratchpad.service_handle)); - if (err_code != NRF_SUCCESS) return err_code; - - // Setup characteristic, use characteristic UUID specified in scratchpad.target_characteristic - ble_gatts_char_md_t char_md; - ble_gatts_attr_md_t cccd_md; - ble_gatts_attr_t attr_char_value; - ble_gatts_attr_md_t attr_md; - - memset(&cccd_md, 0, sizeof(cccd_md)); - - BLE_GAP_CONN_SEC_MODE_SET_OPEN(&cccd_md.read_perm); - BLE_GAP_CONN_SEC_MODE_SET_OPEN(&cccd_md.write_perm); - cccd_md.vloc = BLE_GATTS_VLOC_STACK; - - memset(&char_md, 0, sizeof(char_md)); - - char_md.char_props.read = 1; - char_md.char_props.notify = 1; - char_md.char_props.write = 1; - char_md.char_props.write_wo_resp = 1; - char_md.p_char_user_desc = nullptr; - char_md.p_char_pf = nullptr; - char_md.p_user_desc_md = nullptr; - char_md.p_cccd_md = &cccd_md; - char_md.p_sccd_md = nullptr; - - memset(&attr_md, 0, sizeof(attr_md)); - - BLE_GAP_CONN_SEC_MODE_SET_OPEN(&attr_md.read_perm); - BLE_GAP_CONN_SEC_MODE_SET_OPEN(&attr_md.write_perm); - attr_md.vloc = BLE_GATTS_VLOC_STACK; - attr_md.rd_auth = 0; - attr_md.wr_auth = 0; - attr_md.vlen = 1; - - memset(&attr_char_value, 0, sizeof(attr_char_value)); - - attr_char_value.p_uuid = &(p->scratchpad.target_characteristic); - attr_char_value.p_attr_md = &attr_md; - attr_char_value.init_len = static_cast(initialCharaciteristicValue.size()); - attr_char_value.init_offs = 0; - attr_char_value.max_len = characteristicValueMaxLength; - attr_char_value.p_value = const_cast(initialCharaciteristicValue.data()); - - return sd_ble_gatts_characteristic_add( - p->unwrap(), - p->scratchpad.service_handle, - &char_md, - &attr_char_value, - &(p->scratchpad.gatts_characteristic_handle)); -} - -TEST_CASE("test_issue_gh_112") -{ - auto env = ::test::getEnvironment(); - REQUIRE(env.serialPorts.size() >= 2); - auto central = env.serialPorts.at(0); - auto peripheral = env.serialPorts.at(1); - - SECTION("reproduce_error") - { - const auto baudRate = central.baudRate; - - INFO("Central serial port used: " << central.port); - INFO("Peripheral serial port used: " << peripheral.port); - INFO("Baud rate used: " << baudRate); - - const auto peripheralAdvName = "peripheral"; - - // Instantiate an adapter to use as BLE Central in the test - auto c = std::shared_ptr( - new testutil::AdapterWrapper(testutil::Central, central.port.c_str(), baudRate)); - - // Instantiated an adapter to use as BLE Peripheral in the test - auto p = std::shared_ptr( - new testutil::AdapterWrapper(testutil::Peripheral, peripheral.port.c_str(), baudRate) - ); - - // Use Heart rate service and characteristics as target for testing but - // the values sent are not according to the Heart Rate service - - // BLE Central scratchpad - c->scratchpad.target_service.uuid = BLE_UUID_HEART_RATE_SERVICE; - c->scratchpad.target_service.type = BLE_UUID_TYPE_BLE; - - c->scratchpad.target_characteristic.uuid = BLE_UUID_HEART_RATE_MEASUREMENT_CHAR; - c->scratchpad.target_characteristic.type = BLE_UUID_TYPE_BLE; - - c->scratchpad.target_descriptor.uuid = BLE_UUID_CCCD; - c->scratchpad.target_descriptor.type = BLE_UUID_TYPE_BLE; - c->scratchpad.mtu = 150; - - // BLE Peripheral scratchpad - p->scratchpad.target_service.uuid = BLE_UUID_HEART_RATE_SERVICE; - p->scratchpad.target_service.type = BLE_UUID_TYPE_BLE; - - p->scratchpad.target_characteristic.uuid = BLE_UUID_HEART_RATE_MEASUREMENT_CHAR; - p->scratchpad.target_characteristic.type = BLE_UUID_TYPE_BLE; - - p->scratchpad.target_descriptor.uuid = BLE_UUID_CCCD; - p->scratchpad.target_descriptor.type = BLE_UUID_TYPE_BLE; - p->scratchpad.mtu = 150; - - // Register adapters so that C based callbacks can find them in sd_rpc_open callbacks - testutil::adapters.push_back(c); - testutil::adapters.push_back(p); - - REQUIRE(sd_rpc_log_handler_severity_filter_set(c->unwrap(), env.driverLogLevel) == NRF_SUCCESS); - REQUIRE(sd_rpc_log_handler_severity_filter_set(p->unwrap(), env.driverLogLevel) == NRF_SUCCESS); - - c->setGapEventCallback([&c, &peripheralAdvName](const uint16_t eventId, const ble_gap_evt_t * gapEvent) -> bool - { - switch (eventId) - { - case BLE_GAP_EVT_CONNECTED: - c->scratchpad.connection_handle = gapEvent->conn_handle; - c->scratchpad.connection_in_progress = false; - c->startServiceDiscovery(BLE_UUID_TYPE_BLE, BLE_UUID_HEART_RATE_SERVICE); - return true; - case BLE_GAP_EVT_DISCONNECTED: - NRF_LOG(c->role() << " disconnected, reason: " << std::hex << gapEvent->params.disconnected.reason); - return true; - case BLE_GAP_EVT_ADV_REPORT: - NRF_LOG(c->role() << " Received advertisement report from device: " << testutil::asText(gapEvent->params.adv_report.peer_addr)); - - if (testutil::findAdvName(&(gapEvent->params.adv_report), peripheralAdvName)) - { - if (!c->scratchpad.connection_in_progress) - { - const auto err_code = c->connect(&(gapEvent->params.adv_report.peer_addr)); - - if (err_code != NRF_SUCCESS) - { - NRF_LOG(c->role() << " Error connecting to " << testutil::asText(gapEvent->params.adv_report.peer_addr) << ", " << testutil::errorToString(err_code)); - error = true; - } - } - } - return true; - case BLE_GAP_EVT_TIMEOUT: - if (gapEvent->params.timeout.src == BLE_GAP_TIMEOUT_SRC_CONN) - { - c->scratchpad.connection_in_progress = false; - } - else if (gapEvent->params.timeout.src == BLE_GAP_TIMEOUT_SRC_SCAN) - { - const auto err_code = c->startScan(); - - if (err_code != NRF_SUCCESS) - { - NRF_LOG(c->role() << " Scan start error, err_code " << err_code); - error = true; - } - } - return true; - case BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST: - { - const auto err_code = sd_ble_gap_conn_param_update(c->unwrap(), - c->scratchpad.connection_handle, - &(gapEvent->params.conn_param_update_request.conn_params) - ); - if (err_code != NRF_SUCCESS) - { - NRF_LOG(c->role() << " Conn params update failed, err_code " << err_code); - error = true; - } - } - return true; - default: - return false; - } - }); - - c->setGattcEventCallback([&c](const uint16_t eventId, const ble_gattc_evt_t *gattcEvent) -> bool - { - switch (eventId) - { - case BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP: - { - NRF_LOG(c->role() << " Received service discovery response."); - - if (gattcEvent->gatt_status != NRF_SUCCESS) - { - NRF_LOG(c->role() << " Service discovery failed. " << testutil::gattStatusToString(gattcEvent->gatt_status)); - error = true; - return true; - } - - const auto count = gattcEvent->params.prim_srvc_disc_rsp.count; - - if (count == 0) - { - NRF_LOG(c->role() << " No services not found."); - error = true; - return true; - } - - auto targetServiceFound = false; - - ble_gattc_service_t service; - - for (auto service_index = 0; service_index < count; service_index++) - { - service = gattcEvent->params.prim_srvc_disc_rsp.services[service_index]; - - if (service.uuid.uuid == c->scratchpad.target_service.uuid - && service.uuid.type == c->scratchpad.target_service.type) - { - NRF_LOG(c->role() << " Found target service " << testutil::asText(c->scratchpad.target_service)); - targetServiceFound = true; - break; - } - } - - if (!targetServiceFound) - { - error = true; - NRF_LOG(c->role() << " Did not find target service " << testutil::asText(c->scratchpad.target_service)); - return true; - } - - c->scratchpad.service_start_handle = service.handle_range.start_handle; - c->scratchpad.service_end_handle = service.handle_range.end_handle; - - NRF_LOG(c->role() << " Discovered target service. " - << testutil::asText(service.uuid) - << " start_handle: " << testutil::asText(c->scratchpad.service_start_handle) - << " end_handle: " << testutil::asText(c->scratchpad.service_end_handle) - ); - - if (c->startCharacteristicDiscovery() != NRF_SUCCESS) - { - error = true; - } - } - return true; - case BLE_GATTC_EVT_CHAR_DISC_RSP: - { - const auto count = gattcEvent->params.char_disc_rsp.count; - - if (gattcEvent->gatt_status != NRF_SUCCESS) - { - NRF_LOG(c->role() << " Characteristic discovery failed. " << testutil::gattStatusToString(gattcEvent->gatt_status)); - error = true; - return true; - } - - NRF_LOG(c->role() << " Received characteristic discovery response, characteristics count: " << count); - - - auto foundTargetCharacteristic = false; - - for (auto i = 0; i < count; i++) - { - NRF_LOG(c->role() << " [characteristic #" << i << "] " << testutil::asText(gattcEvent->params.char_disc_rsp.chars[i])); - - if (gattcEvent->params.char_disc_rsp.chars[i].uuid.uuid == c->scratchpad.target_characteristic.uuid && - gattcEvent->params.char_disc_rsp.chars[i].uuid.type == c->scratchpad.target_characteristic.type) - { - NRF_LOG(c->role() << " Found target characteristic, " << testutil::asText(c->scratchpad.target_characteristic)); - c->scratchpad.characteristic_decl_handle = gattcEvent->params.char_disc_rsp.chars[i].handle_decl; - c->scratchpad.characteristic_value_handle = gattcEvent->params.char_disc_rsp.chars[i].handle_value; - foundTargetCharacteristic = true; - } - } - - if (!foundTargetCharacteristic) - { - NRF_LOG(c->role() << " Did not find target characteristic " << testutil::asText(c->scratchpad.target_characteristic)); - error = true; - } - else - { - if (c->startDescriptorDiscovery() != NRF_SUCCESS) - { - error = true; - } - } - - return true; - } - case BLE_GATTC_EVT_DESC_DISC_RSP: - { - const auto count = gattcEvent->params.desc_disc_rsp.count; - - if (gattcEvent->gatt_status != NRF_SUCCESS) - { - NRF_LOG(c->role() << " Descriptor discovery failed. " << testutil::gattStatusToString(gattcEvent->gatt_status)); - error = true; - return true; - } - - NRF_LOG(c->role() << " Received descriptor discovery response, descriptor count: " << count); - - // Change the MTU - const auto err_code = sd_ble_gattc_exchange_mtu_request( - c->unwrap(), - c->scratchpad.connection_handle, - c->scratchpad.mtu); - - if (err_code != NRF_SUCCESS) - { - NRF_LOG(c->role() << " MTU exchange request reply failed, err_code: " << err_code); - error = true; - } - } - return true; - case BLE_GATTC_EVT_WRITE_RSP: - NRF_LOG(c->role() << " Received write response."); - - if (gattcEvent->gatt_status != NRF_SUCCESS) - { - NRF_LOG(c->role() << " Error. Write operation failed. " << testutil::gattStatusToString(gattcEvent->gatt_status)); - error = true; - } - - testComplete = true; - - return true; - case BLE_GATTC_EVT_EXCHANGE_MTU_RSP: - { - auto const server_rx_mtu = gattcEvent->params.exchange_mtu_rsp.server_rx_mtu; - NRF_LOG(c->role() << " MTU response received. New ATT_MTU is " << server_rx_mtu); - - // Write some data to characteristic to trigger reported error - std::vector data; - - // Send negotiated MTU - 3 bytes used by GATT header - testutil::appendRandomData(data, c->scratchpad.mtu - 3); - - const auto err_code = c->writeCharacteristicValue(c->scratchpad.characteristic_value_handle, data); - - if (err_code != NRF_SUCCESS) - { - NRF_LOG(c->role() << " Error writing data to characteristic. err_code: " << err_code); - error = true; - } - } - return true; - default: - return false; - } - }); - - c->setGattsEventCallback([&c](const uint16_t eventId, const ble_gatts_evt_t *gattsEvent) -> bool { - switch (eventId) - { - case BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST: - { - const auto err_code = sd_ble_gatts_exchange_mtu_reply( - c->unwrap(), - c->scratchpad.connection_handle, - c->scratchpad.mtu); - - if (err_code != NRF_SUCCESS) - { - NRF_LOG(c->role() << " MTU exchange request reply failed, err_code: " << err_code); - error = true; - } - } - return true; - default: - return false; - } - }); - - c->setEventCallback([](const ble_evt_t * p_ble_evt) -> bool - { - const auto eventId = p_ble_evt->header.evt_id; - NRF_LOG("Received an un-handled event with ID: " << eventId); - return true; - }); - - p->setGapEventCallback([&p](const uint16_t eventId, const ble_gap_evt_t * gapEvent) - { - switch (eventId) - { - case BLE_GAP_EVT_CONNECTED: - p->scratchpad.connection_handle = gapEvent->conn_handle; - NRF_LOG(p->role() << " Connected, connection_handle: " << testutil::asText(gapEvent->conn_handle)); - return true; - case BLE_GAP_EVT_DISCONNECTED: - { - NRF_LOG(p->role() << " Disconnected, connection_handle: " << testutil::asText(gapEvent->conn_handle)); - p->scratchpad.connection_handle = BLE_CONN_HANDLE_INVALID; - - // Use scratchpad defaults when advertising - NRF_LOG(p->role() << " Starting advertising."); - const auto err_code = p->startAdvertising(); - if (err_code != NRF_SUCCESS) - { - NRF_LOG(p->role() << " Error starting advertising after disconnect."); - error = true; - } - } - return true; - case BLE_GAP_EVT_TIMEOUT: - p->scratchpad.advertisement_timed_out = true; - return true; - case BLE_GAP_EVT_SEC_PARAMS_REQUEST: - { - const auto err_code = sd_ble_gap_sec_params_reply( - p->unwrap(), - p->scratchpad.connection_handle, - BLE_GAP_SEC_STATUS_SUCCESS, nullptr, nullptr); - - if (err_code != NRF_SUCCESS) - { - error = true; - NRF_LOG(p->role() << "Failed reply with GAP security parameters. " << testutil::errorToString(err_code)); - } - } - return true; - case BLE_GATTS_EVT_SYS_ATTR_MISSING: - { - const auto err_code = sd_ble_gatts_sys_attr_set(p->unwrap(), p->scratchpad.connection_handle, nullptr, 0, 0); - - if (err_code != NRF_SUCCESS) - { - error = true; - NRF_LOG(p->role() << "Failed updating persistent sys attr info. " << testutil::errorToString(err_code)); - } - } - return true; - default: - return false; - } - }); - - p->setGattsEventCallback([&p](const uint16_t eventId, const ble_gatts_evt_t * gattsEvent) -> bool - { - switch (eventId) - { - case BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST: - { - const auto err_code = sd_ble_gatts_exchange_mtu_reply( - p->unwrap(), - p->scratchpad.connection_handle, - p->scratchpad.mtu); - - if (err_code != NRF_SUCCESS) - { - error = true; - NRF_LOG(p->role() << " MTU exchange request reply failed. " << testutil::errorToString(err_code)); - } - } - return true; - default: - return false; - } - }); - - // Open the adapters - REQUIRE(sd_rpc_open(c->unwrap(), testutil::statusHandler, testutil::eventHandler, testutil::logHandler) == NRF_SUCCESS); - REQUIRE(sd_rpc_open(p->unwrap(), testutil::statusHandler, testutil::eventHandler, testutil::logHandler) == NRF_SUCCESS); - - REQUIRE(c->configure() == NRF_SUCCESS); - REQUIRE(p->configure() == NRF_SUCCESS); - - // Starting the scan starts the sequence of operations to get a connection established - REQUIRE(c->startScan() == NRF_SUCCESS); - - REQUIRE(setupPeripheral(p, peripheralAdvName, { 0x00 }, p->scratchpad.mtu) == NRF_SUCCESS); - REQUIRE(p->startAdvertising() == NRF_SUCCESS); - - // Wait for the test to complete - std::this_thread::sleep_for(std::chrono::seconds(2)); - - REQUIRE(error == false); - REQUIRE(testComplete == true); - - REQUIRE(sd_rpc_close(c->unwrap()) == NRF_SUCCESS); - sd_rpc_adapter_delete(c->unwrap()); - - REQUIRE(sd_rpc_close(p->unwrap()) == NRF_SUCCESS); - sd_rpc_adapter_delete(p->unwrap()); - } -} - -#else -TEST_CASE("test_issue_gh_112") -{ - INFO("Not relevant for SoftDevice API version < 3") -} - -#endif // This issue is only relevant for SoftDevice API >= 3 diff --git a/test/test_pc_ble_driver_open_close.cpp b/test/test_pc_ble_driver_open_close.cpp deleted file mode 100644 index cd5363b3d..000000000 --- a/test/test_pc_ble_driver_open_close.cpp +++ /dev/null @@ -1,287 +0,0 @@ -/* -* Copyright (c) 2018 Nordic Semiconductor ASA -* All rights reserved. -* -* Redistribution and use in source and binary forms, with or without modification, -* are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this -* list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, this -* list of conditions and the following disclaimer in the documentation and/or -* other materials provided with the distribution. -* -* 3. Neither the name of Nordic Semiconductor ASA nor the names of other -* contributors to this software may be used to endorse or promote products -* derived from this software without specific prior written permission. -* -* 4. This software must only be used in or with a processor manufactured by Nordic -* Semiconductor ASA, or in or with a processor manufactured by a third party that -* is used in combination with a processor manufactured by Nordic Semiconductor. -* -* 5. Any software provided in binary or object form under this license must not be -* reverse engineered, decompiled, modified and/or disassembled. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - - // Test framework -#define CATCH_CONFIG_MAIN -#include "catch2/catch.hpp" - - // Logging support -#include "internal/log.h" - -#include "test_setup.h" - -#include "ble.h" -#include "sd_rpc.h" - -#include -#include -#include - -#define SCAN_INTERVAL 0x00A0 /**< Determines scan interval in units of 0.625 milliseconds. */ -#define SCAN_WINDOW 0x0050 /**< Determines scan window in units of 0.625 milliseconds. */ -#define SCAN_TIMEOUT 0x0 /**< Scan timeout between 0x01 and 0xFFFF in seconds, 0x0 disables timeout. */ - -typedef struct -{ - uint8_t * p_data; /**< Pointer to data. */ - uint16_t data_len; /**< Length of data. */ -} data_t; - -static adapter_t * m_adapter = nullptr; - -#if NRF_SD_BLE_API >= 5 -static uint32_t m_config_id = 1; -#endif - -static const ble_gap_scan_params_t m_scan_param = -{ - 1, // Active scanning set. - 0, // Selective scanning not set. -#if NRF_SD_BLE_API == 2 - nullptr, // White-list not set. -#endif -#if NRF_SD_BLE_API >= 3 - 0, // adv_dir_report not set. -#endif - static_cast(SCAN_INTERVAL), - static_cast(SCAN_WINDOW), - static_cast(SCAN_TIMEOUT) -}; - -/* Local function forward declarations */ -static uint32_t ble_stack_init(); -static bool error = false; - -static void status_handler(adapter_t * adapter, sd_rpc_app_status_t code, const char * message) -{ - NRF_LOG("Status: " << code << ", message: " << message); -} - -static void log_handler(adapter_t * adapter, sd_rpc_log_severity_t severity, const char * message) -{ - switch (severity) - { - case SD_RPC_LOG_ERROR: - NRF_LOG("Error: " << message); - break; - - case SD_RPC_LOG_WARNING: - NRF_LOG("Warning: " << message); - break; - - case SD_RPC_LOG_INFO: - NRF_LOG("Info: " << message); - break; - - default: - NRF_LOG("Log: " << message); - break; - } -} - -static void on_adv_report(const ble_gap_evt_t * const p_ble_gap_evt) -{ - // Log the Bluetooth device address of advertisement packet received. - NRF_LOG("Received advertisement report with device address: " << testutil::asText(p_ble_gap_evt->params.adv_report.peer_addr)); -} - -static void on_timeout(const ble_gap_evt_t * const p_ble_gap_evt) -{ - if (p_ble_gap_evt->params.timeout.src == BLE_GAP_TIMEOUT_SRC_SCAN) - { - const auto result = sd_ble_gap_scan_start(m_adapter, &m_scan_param); - - if (result != NRF_SUCCESS) - { - error = true; - NRF_LOG("ERROR: starting scan failed. Code: " << result); - } - } -} - -static adapter_t * adapter_init(const char * serial_port, uint32_t baud_rate) -{ - physical_layer_t * phy = sd_rpc_physical_layer_create_uart(serial_port, baud_rate, SD_RPC_FLOW_CONTROL_NONE, - SD_RPC_PARITY_NONE); - data_link_layer_t * data_link_layer = sd_rpc_data_link_layer_create_bt_three_wire(phy, 100); - transport_layer_t * transport_layer = sd_rpc_transport_layer_create(data_link_layer, 100); - return sd_rpc_adapter_create(transport_layer); -} - -static uint32_t ble_stack_init() -{ - uint32_t err_code; - uint32_t * app_ram_base = nullptr; - -#if NRF_SD_BLE_API <= 3 - ble_enable_params_t ble_enable_params; - memset(&ble_enable_params, 0, sizeof(ble_enable_params)); -#endif - -#if NRF_SD_BLE_API == 3 - ble_enable_params.gatt_enable_params.att_mtu = GATT_MTU_SIZE_DEFAULT; -#elif NRF_SD_BLE_API < 3 - ble_enable_params.gatts_enable_params.attr_tab_size = BLE_GATTS_ATTR_TAB_SIZE_DEFAULT; - ble_enable_params.gatts_enable_params.service_changed = false; - ble_enable_params.gap_enable_params.periph_conn_count = 1; - ble_enable_params.gap_enable_params.central_conn_count = 1; - ble_enable_params.gap_enable_params.central_sec_count = 1; - ble_enable_params.common_enable_params.p_conn_bw_counts = nullptr; - ble_enable_params.common_enable_params.vs_uuid_count = 1; -#endif - -#if NRF_SD_BLE_API <= 3 - err_code = sd_ble_enable(m_adapter, &ble_enable_params, app_ram_base); -#else - err_code = sd_ble_enable(m_adapter, app_ram_base); -#endif - - switch (err_code) { - case NRF_SUCCESS: - break; - case NRF_ERROR_INVALID_STATE: - NRF_LOG("BLE stack already enabled"); - break; - default: - NRF_LOG("Failed to enable BLE stack. Error code: " << err_code); - break; - } - - return err_code; -} - -#if NRF_SD_BLE_API <= 3 -static uint32_t ble_options_set() -{ - ble_opt_t opt; - ble_common_opt_t common_opt; - - common_opt.conn_bw.role = BLE_GAP_ROLE_CENTRAL; - common_opt.conn_bw.conn_bw.conn_bw_rx = BLE_CONN_BW_HIGH; - common_opt.conn_bw.conn_bw.conn_bw_tx = BLE_CONN_BW_HIGH; - opt.common_opt = common_opt; - - return sd_ble_opt_set(m_adapter, BLE_COMMON_OPT_CONN_BW, &opt); -} -#endif - -#if NRF_SD_BLE_API >= 5 -void ble_cfg_set(uint8_t conn_cfg_tag) -{ - const uint32_t ram_start = 0; // Value is not used by ble-driver - ble_cfg_t ble_cfg; - - // Configure the connection roles. - memset(&ble_cfg, 0, sizeof(ble_cfg)); - ble_cfg.gap_cfg.role_count_cfg.periph_role_count = 1; - ble_cfg.gap_cfg.role_count_cfg.central_role_count = 1; - ble_cfg.gap_cfg.role_count_cfg.central_sec_count = 1; - - REQUIRE(sd_ble_cfg_set(m_adapter, BLE_GAP_CFG_ROLE_COUNT, &ble_cfg, ram_start) == NRF_SUCCESS); - - memset(&ble_cfg, 0x00, sizeof(ble_cfg)); - ble_cfg.conn_cfg.conn_cfg_tag = conn_cfg_tag; - ble_cfg.conn_cfg.params.gatt_conn_cfg.att_mtu = 150; - - REQUIRE(sd_ble_cfg_set(m_adapter, BLE_CONN_CFG_GATT, &ble_cfg, ram_start) == NRF_SUCCESS); -} -#endif - - -static void ble_evt_dispatch(adapter_t * adapter, ble_evt_t * p_ble_evt) -{ - if (p_ble_evt == nullptr) - { - NRF_LOG("Received an empty BLE event"); - return; - } - - switch (p_ble_evt->header.evt_id) - { - case BLE_GAP_EVT_ADV_REPORT: - on_adv_report(&(p_ble_evt->evt.gap_evt)); - break; - case BLE_GAP_EVT_TIMEOUT: - on_timeout(&(p_ble_evt->evt.gap_evt)); - break; - default: - NRF_LOG("Received an un-handled event with ID: " << p_ble_evt->header.evt_id); - break; - } -} - -TEST_CASE("test_pc_ble_driver_open_close") -{ - auto env = ::test::getEnvironment(); - REQUIRE(!env.serialPorts.empty()); - auto serialPort = env.serialPorts.at(0); - const auto numberOfIterations = env.numberOfIterations; - - SECTION("open_close_open_iterations") - { - const auto baudRate = serialPort.baudRate; - - INFO("Serial port used: " << serialPort.port); - INFO("Baud rate used: " << baudRate); - - for (uint32_t i = 0; i < numberOfIterations; i++) - { - m_adapter = adapter_init(serialPort.port.c_str(), baudRate); - REQUIRE(sd_rpc_log_handler_severity_filter_set(m_adapter, env.driverLogLevel) == NRF_SUCCESS); - REQUIRE(sd_rpc_open(m_adapter, status_handler, ble_evt_dispatch, log_handler) == NRF_SUCCESS); -#if NRF_SD_BLE_API >= 5 - ble_cfg_set(m_config_id); -#endif - - REQUIRE(ble_stack_init() == NRF_SUCCESS); - -#if NRF_SD_BLE_API < 5 - REQUIRE(ble_options_set() == NRF_SUCCESS); -#endif - - REQUIRE(sd_ble_gap_scan_start(m_adapter, &m_scan_param) == NRF_SUCCESS); - - std::this_thread::sleep_for(std::chrono::seconds(2)); - REQUIRE(error == false); - - REQUIRE(sd_rpc_close(m_adapter) == NRF_SUCCESS); - sd_rpc_adapter_delete(m_adapter); - - NRF_LOG("Iteration #" << (i + 1) << " of " << numberOfIterations << " complete."); - } - } -} diff --git a/test/test_setup.h b/test/test_setup.h deleted file mode 100644 index f8d872fb2..000000000 --- a/test/test_setup.h +++ /dev/null @@ -1,293 +0,0 @@ -/* - * Copyright (c) 2018 Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this - * list of conditions and the following disclaimer in the documentation and/or - * other materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of other - * contributors to this software may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * 4. This software must only be used in or with a processor manufactured by Nordic - * Semiconductor ASA, or in or with a processor manufactured by a third party that - * is used in combination with a processor manufactured by Nordic Semiconductor. - * - * 5. Any software provided in binary or object form under this license must not be - * reverse engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef TEST_SETUP_H__ -#define TEST_SETUP_H__ - -#include "transport.h" -#include "h5_transport.h" - -#include "log.h" -#include "test_util.h" - -#include "virtual_uart.h" - -#include -#include -#include -#include -#include - -#ifdef _WIN32 -#define DEFAULT_BAUD_RATE 1000000 /**< The baud rate to be used for serial communication with nRF5 device. */ -#endif -#ifdef __APPLE__ -#define DEFAULT_BAUD_RATE 115200 /**< Baud rate 1M is not supported on MacOS. */ -#endif -#ifdef __linux__ -#define DEFAULT_BAUD_RATE 1000000 -#endif - - -namespace test -{ - struct SerialPort - { - SerialPort(std::string port, uint32_t baudRate) : - port(port), baudRate(baudRate) {}; - - std::string port; - uint32_t baudRate; - }; - - struct Environment - { - std::vector serialPorts; - uint32_t numberOfIterations; - sd_rpc_log_severity_t driverLogLevel; - }; - - Environment getEnvironment() - { - Environment env; - - auto baudRate = DEFAULT_BAUD_RATE; - auto envBaudRate = std::getenv("BLE_DRIVER_TEST_BAUD_RATE"); - - if (envBaudRate != nullptr) - { - baudRate = std::stoi(envBaudRate); - } - - auto envPortA = std::getenv("BLE_DRIVER_TEST_SERIAL_PORT_A"); - - if (envPortA != nullptr) - { - env.serialPorts.push_back(SerialPort(envPortA, baudRate)); - } - - auto envPortB = std::getenv("BLE_DRIVER_TEST_SERIAL_PORT_B"); - - if (envPortB != nullptr) - { - env.serialPorts.push_back(SerialPort(envPortB, baudRate)); - } - - auto numberOfIterations = 100; - auto envNumberOfIterations = std::getenv("BLE_DRIVER_TEST_OPENCLOSE_ITERATIONS"); - - if (envNumberOfIterations != nullptr) - { - numberOfIterations = std::stoi(envNumberOfIterations); - } - - env.numberOfIterations = numberOfIterations; - - auto driverLogLevel = SD_RPC_LOG_INFO; - auto envDriverLogLevel = std::getenv("BLE_DRIVER_TEST_LOGLEVEL"); - - if (envDriverLogLevel != nullptr) - { - auto envDriverLogLevel_ = std::string(envDriverLogLevel); - - if (envDriverLogLevel_ == "trace") - { - driverLogLevel = SD_RPC_LOG_TRACE; - } - else if (envDriverLogLevel_ == "debug") - { - driverLogLevel = SD_RPC_LOG_DEBUG; - } - else if (envDriverLogLevel_ == "info") - { - driverLogLevel = SD_RPC_LOG_INFO; - } - else if (envDriverLogLevel_ == "warning") - { - driverLogLevel = SD_RPC_LOG_WARNING; - } - else if (envDriverLogLevel_ == "error") - { - driverLogLevel = SD_RPC_LOG_ERROR; - } - else if (envDriverLogLevel_ == "fatal") - { - driverLogLevel = SD_RPC_LOG_FATAL; - } - } - - env.driverLogLevel = driverLogLevel; - - return env; - }; - - class VirtualTransportSendSync : public Transport - { - public: - explicit VirtualTransportSendSync() noexcept - : Transport(), pushData(false) {} - - uint32_t open(const status_cb_t &status_callback, const data_cb_t &data_callback, const log_cb_t &log_callback) - { - Transport::open(status_callback, data_callback, log_callback); - pushData = true; - - auto inboundDataThread = [=]() -> void - { - std::vector syncPacket{ 0xc0, 0x00, 0x2f, 0x00, 0xd1, 0x01, 0x7e, 0xc0 }; - - while (pushData) - { - std::this_thread::sleep_for(std::chrono::milliseconds(250)); - upperDataCallback(syncPacket.data(), syncPacket.size()); - } - }; - - dataPusher = std::thread(inboundDataThread); - - return NRF_SUCCESS; - } - - uint32_t close() - { - pushData = false; - - if (dataPusher.joinable()) - { - dataPusher.join(); - } - - Transport::close(); - return NRF_SUCCESS; - } - - uint32_t send(const std::vector &data) - { - NRF_LOG("->" << testutil::asHex(data) << " length: " << data.size()); - return NRF_SUCCESS; - } - - private: - std::thread dataPusher; - bool pushData; - }; - - // Since the H5Transport.open is a blocking call - // we need to run open in separate threads to - // make the two H5Transports communicate - class H5TransportWrapper : public H5Transport - { - public: - H5TransportWrapper(Transport *nextTransportLayer, uint32_t retransmission_interval) noexcept - : H5Transport(nextTransportLayer, retransmission_interval), isOpenDone(false), result(-1) - { - } - - ~H5TransportWrapper() - { - close(); - } - - void openThread(status_cb_t status_callback, data_cb_t data_callback, log_cb_t log_callback) - { - auto lock = std::unique_lock(openWait); - - result = H5Transport::open( - status_callback, - data_callback, - log_callback - ); - - isOpenDone = true; - - lock.unlock(); - openStateChanged.notify_all(); - } - - // Runs open in a separate thread, call waitForResult to wait for the result of opening. - // - // It does not override open becase we can not provide a return value that - // is of the same type as H5Transport::open - void wrappedOpen(status_cb_t status_callback, data_cb_t data_callback, log_cb_t log_callback) - { - auto lock = std::unique_lock(openWait); - h5Thread = std::thread(std::bind(&H5TransportWrapper::openThread, this, status_callback, data_callback, log_callback)); - } - - uint32_t close() - { - auto lock = std::unique_lock(openWait); - - if (isOpenDone) - { - isOpenDone = false; - lock.unlock(); - openStateChanged.notify_all(); - - if (h5Thread.joinable()) - { - h5Thread.join(); - } - } - - return H5Transport::close(); - } - - uint32_t waitForResult() - { - auto lock = std::unique_lock(openWait); - - if (isOpenDone) - { - return result; - } - - openStateChanged.wait(lock, [this] { return isOpenDone; }); - return result; - } - - private: - std::mutex openWait; - bool isOpenDone; - std::condition_variable openStateChanged; - - std::thread h5Thread; - uint32_t result; - }; -}; - -#endif // TEST_SETUP_H__ \ No newline at end of file diff --git a/test/test_util.h b/test/test_util.h deleted file mode 100644 index e44696e83..000000000 --- a/test/test_util.h +++ /dev/null @@ -1,164 +0,0 @@ -#ifndef TEST_UTIL_H__ -#define TEST_UTIL_H__ - -#include "test_util_adapter_wrapper.h" -#include "test_util_conversion.h" -#include "test_util_role.h" - -#include "ble.h" - -#include -#include -#include -#include - -namespace testutil -{ - static std::vector> adapters; - - static void statusHandler(adapter_t *adapter, sd_rpc_app_status_t code, const char * message) - { - for (const auto& registeredAdapter : adapters) - { - if (registeredAdapter->unwrap()->internal == adapter->internal) - { - registeredAdapter->processStatus(code, message); - } - } - } - - static void eventHandler(adapter_t *adapter, ble_evt_t *p_ble_evt) - { - for (const auto ®isteredAdapter : adapters) - { - if (registeredAdapter->unwrap()->internal == adapter->internal) - { - registeredAdapter->processEvent(p_ble_evt); - } - } - } - - static void logHandler(adapter_t *adapter, sd_rpc_log_severity_t severity, const char * log_message) - { - for (const auto ®isteredAdapter : adapters) - { - if (registeredAdapter->unwrap()->internal == adapter->internal) - { - registeredAdapter->processLog(severity, log_message); - } - } - } - - /** - * @brief Function that find advertisement type data based on specified specified advertisement type - * - * @param[in] advType Advertisment type to search for - * @param[in] advData Advertisement data to parse - * @param[in,out] advTypeData Advertisement data found for provided advertisement type - * - * @return true if advertisement type was found, false if not. - */ - static bool advReportParse(const uint8_t advType, const std::vector &advData, std::vector &advTypeData) - { - auto typeDataBegin = advData.begin(); - while (typeDataBegin != advData.end()) - { - auto fieldLength = *typeDataBegin++; - if (typeDataBegin == advData.end()) - { - return false; - } - - auto fieldType = *typeDataBegin++; - if (typeDataBegin == advData.end()) - { - return false; - } - - if (fieldType == advType) - { - const auto advTypeDataLength = fieldLength - 1; - const auto distance = std::distance(typeDataBegin, advData.end()); - - if (distance < advTypeDataLength) - { - return false; - } - - const auto typeDataEnd = typeDataBegin + advTypeDataLength; - advTypeData.assign(typeDataBegin, typeDataEnd); - return true; - } - - std::advance(typeDataBegin, fieldLength - 1); - } - - return false; - } - - /** - * @brief Function that search for advertisement name in BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME or - * BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME - * - * @param[in] p_adv_report Pointer to advertisement report to search in - * @param[in] name_to_find Advertisement name to search for - * - * @return true if name is found, false if not - */ - static bool findAdvName(const ble_gap_evt_adv_report_t *p_adv_report, const std::string &name_to_find) - { - std::vector advData; - advData.assign((uint8_t *)p_adv_report->data, (uint8_t *)p_adv_report->data + p_adv_report->dlen); - - std::vector advTypeData; - std::vector nameToFind; - std::copy(name_to_find.begin(), name_to_find.end(), std::back_inserter(nameToFind)); - - auto found = [&](const uint8_t advType) - { - if (advReportParse(advType, advData, advTypeData)) - { - if (nameToFind.size() > advTypeData.size()) - { - return false; - } - - if (std::equal(nameToFind.begin(), nameToFind.end(), advTypeData.begin())) - { - return true; - } - } - - return false; - }; - - return found(BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME) || found(BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME); - } - - /** - * @brief Function that append name to advertise to advertisement type BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME - * - * @param[in,out] advertisingData std::vector to append advertisement data to - * @param[in] name Name to append to advertisingData - */ - static void appendAdvertisingName(std::vector &advertisingData, const std::string &name) - { - advertisingData.push_back((uint8_t)(name.length() + 1)); // Device name + advertisement type - advertisingData.push_back(BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME); - std::copy(name.begin(), name.end(), std::back_inserter(advertisingData)); - } - - /* - * @brief Function that fills a std::vector with random values - * - * @param[in,out] data vector to populate with random values - * @param[in] size number of random values to fill the vector with - */ - static void appendRandomData(std::vector &data, const size_t size) - { - data.resize(size); - std::generate(data.begin(), data.end(), std::rand); - } -} - -#endif // TEST_UTIL_H__ diff --git a/test/test_util_adapter_wrapper.h b/test/test_util_adapter_wrapper.h deleted file mode 100644 index a675ec515..000000000 --- a/test/test_util_adapter_wrapper.h +++ /dev/null @@ -1,677 +0,0 @@ -#ifndef TEST_UTIL_ADAPTER_WRAPPER_H__ -#define TEST_UTIL_ADAPTER_WRAPPER_H__ - -#include "test_util_conversion.h" -#include "test_util_role.h" - -// Logging support -#include "internal/log.h" - -#include "ble.h" -#include "sd_rpc.h" - -#include - -namespace testutil -{ - using LogCallback = std::function; - using StatusCallback = std::function; - using EventCallback = std::function; - using GapEventCallback = std::function; - using GattsEventCallback = std::function; - using GattcEventCallback = std::function; - - // Claculations between milliseconds to SoftDevice API units - using sd_api_time_unit_t = enum - { - UNIT_0_625_MS = 625, /**< Number of microseconds in 0.625 milliseconds. */ - UNIT_1_25_MS = 1250, /**< Number of microseconds in 1.25 milliseconds. */ - UNIT_10_MS = 10000 /**< Number of microseconds in 10 milliseconds. */ - }; - - static uint16_t millisecondsToUnits(const double milliseconds, const sd_api_time_unit_t timeunit) - { - const auto microseconds = milliseconds * 1000; - return (static_cast(microseconds / timeunit)); - } - - // This struct is used for storing data that the tests can use - // - // It will only contain information about one connection, service, characteristic and CCCD - // - // NOTICE: - // this struct is not thread safe, the implementer of the test - // must take that into account when using this scratchpad - struct AdapterWrapperScratchpad - { - // Values related to SoftDevice API - ble_gap_scan_params_t scan_param; - ble_gap_conn_params_t connection_param; - -#if NRF_SD_BLE_API <= 3 - ble_enable_params_t ble_enable_params; -#endif // NRF_SD_BLE_API - - -#if NRF_SD_BLE_API < 5 - #define DEFAULT_MTU_SIZE GATT_MTU_SIZE_DEFAULT -#else - #define DEFAULT_MTU_SIZE BLE_GATT_ATT_MTU_DEFAULT -#endif - -#if NRF_SD_BLE_API <= 3 - ble_opt_t opt; - ble_common_opt_t common_opt; -#endif - - // Connect handle to connection under test - uint16_t connection_handle = BLE_CONN_HANDLE_INVALID; - - uint16_t service_start_handle = 0; - uint16_t service_end_handle = 0; - - // Handle to Client Characterstic Configuration Descriptor - // Can be set during discovery of services - uint16_t cccd_handle = BLE_GATT_HANDLE_INVALID; - - // The service used by the test - uint16_t service_handle = BLE_GATT_HANDLE_INVALID; - - // The characteristic declaration handle used by the test - uint16_t characteristic_decl_handle = BLE_GATT_HANDLE_INVALID; - - // The characteristic value handle used by the test - uint16_t characteristic_value_handle = BLE_GATT_HANDLE_INVALID; - - // The descriptor used by the test - uint16_t descriptor_handle = BLE_GATT_HANDLE_INVALID; - - // Target service UUID to use during testing - ble_uuid_t target_service; - - // Target characteristic UUID to use during testing - ble_uuid_t target_characteristic; - - // Target descriptor UUID to use during testing - ble_uuid_t target_descriptor; - - // The GATT server side representation of the characteristic used by the test - ble_gatts_char_handles_t gatts_characteristic_handle; - - bool send_notifications = false; - bool advertisement_timed_out = false; - - uint16_t mtu = DEFAULT_MTU_SIZE; // See #define DEFAULT_MTU_SIZE above - - // Newer versions of SoftDevice API supports multiple configurations - uint32_t config_id = 1; - - bool connection_in_progress = false; - - ble_gap_adv_params_t adv_params; - }; - - class AdapterWrapper - { - public: - AdapterWrapper(const Role &role, const std::string &port, const uint32_t baudRate) : m_role(role), m_port(port) - { - m_adapter = adapterInit(port.c_str(), baudRate); - - // Setup scratchpad with default values - setupScratchpad(); - } - - uint32_t configure() - { - uint32_t error_code; - -#if NRF_SD_BLE_API >= 5 - error_code = setBLECfg(scratchpad.config_id); - - if (error_code != NRF_SUCCESS) - { - return error_code; - } -#endif - - error_code = initBLEStack(); - - if (error_code != NRF_SUCCESS) - { - return error_code; - } - -#if NRF_SD_BLE_API < 5 - error_code = setBLEOptions(); - - if (error_code != NRF_SUCCESS) - { - return error_code; - } -#endif - - return error_code; - } - - uint32_t connect(const ble_gap_addr_t *address) - { - const auto err_code = sd_ble_gap_connect( - m_adapter, - address, - &(scratchpad.scan_param), - &(scratchpad.connection_param) -#if NRF_SD_BLE_API >= 5 - , scratchpad.config_id -#endif - ); - - if (err_code == NRF_SUCCESS) - { - scratchpad.connection_in_progress = true; - } - - return err_code; - } - - bool error() - { - return m_async_error; - } - - uint32_t startScan() - { - uint32_t error_code = sd_ble_gap_scan_start(m_adapter, &scratchpad.scan_param); - - if (error_code != NRF_SUCCESS) - { - NRF_LOG(role() << " Scan start failed"); - } - else - { - NRF_LOG(role() << " Scan started"); - } - - return error_code; - } - - uint32_t startAdvertising() - { - if (role() != Peripheral) - { - NRF_LOG(role() << " Wrong role, must be peripheral to advertise."); - return NRF_ERROR_INVALID_STATE; - } - - uint32_t err_code; - -#if NRF_SD_BLE_API <= 3 - err_code = sd_ble_gap_adv_start(m_adapter, &(scratchpad.adv_params)); -#else - err_code = sd_ble_gap_adv_start(m_adapter, &(scratchpad.adv_params), scratchpad.config_id); -#endif - - if (err_code != NRF_SUCCESS) - { - NRF_LOG(role() << " Failed to start advertising. " << testutil::errorToString(err_code)); - } - - return err_code; - } - - uint32_t startServiceDiscovery(const uint8_t type, const uint16_t uuid) - { - uint16_t start_handle = 0x01; - ble_uuid_t srvc_uuid; - - NRF_LOG(role() << " Starting discovery of GATT Primary Services"); - - srvc_uuid.type = type; - srvc_uuid.uuid = uuid; - - const auto err_code = sd_ble_gattc_primary_services_discover(m_adapter, - scratchpad.connection_handle, - start_handle, - &srvc_uuid); - - if (err_code != NRF_SUCCESS) - { - NRF_LOG(role() << " Failed to initiate or continue a GATT Primary Service Discovery procedure\n"); - } - - return err_code; - } - - uint32_t startCharacteristicDiscovery() - { - ble_gattc_handle_range_t handle_range; - - handle_range.start_handle = scratchpad.service_start_handle; - handle_range.end_handle = scratchpad.service_end_handle; - - NRF_LOG(role() << " Discovering characteristics, " << testutil::asText(handle_range)); - - return sd_ble_gattc_characteristics_discover(m_adapter, scratchpad.connection_handle, &handle_range); - } - - uint32_t startDescriptorDiscovery() - { - ble_gattc_handle_range_t handle_range; - NRF_LOG(role() << " Discovering characteristic's descriptors"); - - if (scratchpad.characteristic_decl_handle == 0) - { - NRF_LOG(role() << " No characteristic handle specified."); - return NRF_ERROR_INVALID_STATE; - } - - handle_range.start_handle = scratchpad.characteristic_decl_handle; - handle_range.end_handle = scratchpad.service_end_handle; - - return sd_ble_gattc_descriptors_discover(m_adapter, scratchpad.connection_handle, &handle_range); - } - - uint32_t writeCCCDValue(const uint16_t cccdHandle, const uint8_t value) - { - ble_gattc_write_params_t write_params; - uint8_t cccd_value[2] = { value, 0 }; - - write_params.handle = cccdHandle; - write_params.len = 2; - write_params.p_value = cccd_value; - write_params.write_op = BLE_GATT_OP_WRITE_REQ; - write_params.offset = 0; - - NRF_LOG(role() << " Writing to connection " - << testutil::asText(scratchpad.connection_handle) - << " CCCD handle: " - << testutil::asText(cccdHandle) - << " value: " << value); - - return sd_ble_gattc_write(m_adapter, scratchpad.connection_handle, &write_params); - } - - uint32_t writeCharacteristicValue(const uint16_t characteristicHandle, const std::vector &data) - { - ble_gattc_write_params_t write_params; - write_params.handle = characteristicHandle; - write_params.len = static_cast(data.size()); - write_params.p_value = const_cast(data.data()); - write_params.write_op = BLE_GATT_OP_WRITE_REQ; - write_params.offset = 0; - - NRF_LOG(role() << " Writing to connection_handle: " - << testutil::asText(scratchpad.connection_handle) - << " characteristic_handle: " - << testutil::asText(characteristicHandle) - << " length: " << data.size() - << " value: " << asHex(data)); - - return sd_ble_gattc_write(m_adapter, scratchpad.connection_handle, &write_params); - } - - adapter_t* unwrap() - { - return m_adapter; - } - - Role role() const - { - return m_role; - } - - std::string port() const - { - return m_port; - } - - void processLog(const sd_rpc_log_severity_t severity, const std::string &log_message) - { - NRF_LOG(role() << "[log] severity:" << testutil::asText(severity) << " message:" << log_message); - - if (m_logCallback != nullptr) - { - m_logCallback(severity, log_message); - } - } - - void processEvent(const ble_evt_t * p_ble_evt) - { - auto eventId = p_ble_evt->header.evt_id; - - const auto logGenericUnprocessed = [this, &eventId]() - { - NRF_LOG(role() << " Unprocessed event: 0x" << std::setfill('0') << std::setw(2) << std::hex << (uint32_t)eventId); - }; - - if (eventId >= BLE_GAP_EVT_BASE && eventId <= BLE_GAP_EVT_LAST) - { - const auto logUnprocessed = [this, &eventId]() - { - NRF_LOG(role() << " Unprocessed GAP event: 0x" << std::setfill('0') << std::setw(2) << std::hex << (uint32_t)eventId); - }; - - if (m_gapEventCallback != nullptr) - { - if (!m_gapEventCallback(eventId, &(p_ble_evt->evt.gap_evt))) - { - logUnprocessed(); - } - } - else - { - logUnprocessed(); - } - } - else if (eventId >= BLE_GATTC_EVT_BASE && eventId <= BLE_GATTC_EVT_LAST) - { - const auto logUnprocessed = [this, &eventId]() - { - NRF_LOG(role() << " Unprocessed GATTC event: 0x" << std::setfill('0') << std::setw(2) << std::hex << (uint32_t)eventId); - }; - - if (m_gattcEventCallback != nullptr) - { - if (!m_gattcEventCallback(eventId, &(p_ble_evt->evt.gattc_evt))) - { - logUnprocessed(); - } - } - else - { - logUnprocessed(); - } - } - else if (eventId >= BLE_GATTS_EVT_BASE && eventId <= BLE_GATTS_EVT_LAST) - { - const auto logUnprocessed = [this, &eventId]() - { - NRF_LOG(role() << " Unprocessed GATTS event: 0x" << std::setfill('0') << std::setw(2) << std::hex << (uint32_t)eventId); - }; - - if (m_gattsEventCallback != nullptr) - { - if (!m_gattsEventCallback(eventId, &(p_ble_evt->evt.gatts_evt))) - { - logUnprocessed(); - } - } - else - { - logUnprocessed(); - } - } - else - { - if (m_eventCallback != nullptr) - { - if (!m_eventCallback(p_ble_evt)) - { - logGenericUnprocessed(); - } - } - else - { - logGenericUnprocessed(); - } - - } - } - - void processStatus(const sd_rpc_app_status_t code, const std::string &message) - { - NRF_LOG(role() << "[status] code:" << testutil::asText(code) << " message:" << message); - - if (m_statusCallback != nullptr) - { - m_statusCallback(code, message); - } - } - - void setStatusCallback(const StatusCallback &statusCallback) - { - m_statusCallback = statusCallback; - } - - void setLogCallback(const LogCallback &logCallback) - { - m_logCallback = logCallback; - } - - void setEventCallback(const EventCallback &eventCallback) - { - m_eventCallback = eventCallback; - } - - void setGattcEventCallback(const GattcEventCallback &callback) - { - m_gattcEventCallback = callback; - } - - void setGattsEventCallback(const GattsEventCallback &callback) - { - m_gattsEventCallback = callback; - } - - void setGapEventCallback(const GapEventCallback &callback) - { - m_gapEventCallback = callback; - } - - // Public data members used during testing - public: - // Scratchpad for values related to SoftDevice API. - - // The scratchpad is used by methods in this class and by implementers of test. - - // There is no encapsulation of the values in the scratchpad and the scratchpad is not - // thread safe. - AdapterWrapperScratchpad scratchpad; - - private: - // Adapter from pc-ble-driver - adapter_t *m_adapter; - const std::string m_port; - - // Used to indicate that something went wrong in an async callback - // Since the test framework is not thread safe, this variable is used - // indicate error in callbacks - bool m_async_error; - - // Callbacks - LogCallback m_logCallback; - StatusCallback m_statusCallback; - EventCallback m_eventCallback; - GapEventCallback m_gapEventCallback; - GattsEventCallback m_gattsEventCallback; - GattcEventCallback m_gattcEventCallback; - - // The role given in the test. The SoftDevice supports multi-role, but for - // simplicity in the tests we try to keep then to one role. - Role m_role; - - void setupScratchpad() - { - // Setup scratchpad with default values -#if NRF_SD_BLE_API <= 3 - std::memset(&scratchpad.ble_enable_params, 0, sizeof(scratchpad.ble_enable_params)); -#endif - -#if NRF_SD_BLE_API == 3 - scratchpad.ble_enable_params.gatt_enable_params.att_mtu = GATT_MTU_SIZE_DEFAULT; -#elif NRF_SD_BLE_API < 3 - scratchpad.ble_enable_params.gatts_enable_params.attr_tab_size = BLE_GATTS_ATTR_TAB_SIZE_DEFAULT; - scratchpad.ble_enable_params.gatts_enable_params.service_changed = false; - scratchpad.ble_enable_params.gap_enable_params.periph_conn_count = 1; - scratchpad.ble_enable_params.gap_enable_params.central_conn_count = 1; - scratchpad.ble_enable_params.gap_enable_params.central_sec_count = 1; - scratchpad.ble_enable_params.common_enable_params.p_conn_bw_counts = NULL; - scratchpad.ble_enable_params.common_enable_params.vs_uuid_count = 1; -#endif - -#if NRF_SD_BLE_API <= 3 - scratchpad.common_opt.conn_bw.role = BLE_GAP_ROLE_CENTRAL; - scratchpad.common_opt.conn_bw.conn_bw.conn_bw_rx = BLE_CONN_BW_HIGH; - scratchpad.common_opt.conn_bw.conn_bw.conn_bw_tx = BLE_CONN_BW_HIGH; - scratchpad.opt.common_opt = scratchpad.common_opt; -#endif - - // Connection parameters - scratchpad.connection_param.min_conn_interval = millisecondsToUnits(7.5, UNIT_1_25_MS); - scratchpad.connection_param.max_conn_interval = millisecondsToUnits(7.5, UNIT_1_25_MS); - scratchpad.connection_param.slave_latency = 0; - scratchpad.connection_param.conn_sup_timeout = millisecondsToUnits(4000, UNIT_10_MS); - - // Scan parameters - memset(&scratchpad.scan_param, 0, sizeof(ble_gap_scan_params_t)); - scratchpad.scan_param.active = 1; -#if NRF_SD_BLE_API == 2 - scratchpad.scan_param.p_whitelist = nullptr; -#endif -#if NRF_SD_BLE_API >= 3 - scratchpad.scan_param.use_whitelist = 0; - scratchpad.scan_param.adv_dir_report = 0; - scratchpad.scan_param.adv_dir_report = 0; -#endif - - scratchpad.scan_param.window = millisecondsToUnits(50, UNIT_0_625_MS); - scratchpad.scan_param.timeout = 0; - scratchpad.scan_param.interval = millisecondsToUnits(100, UNIT_0_625_MS); - - // Advertisement parameters - memset(&scratchpad.adv_params, 0, sizeof(ble_gap_adv_params_t)); - scratchpad.adv_params.type = BLE_GAP_ADV_TYPE_ADV_IND; - scratchpad.adv_params.p_peer_addr = NULL; // Undirected advertisement. - scratchpad.adv_params.fp = BLE_GAP_ADV_FP_ANY; - scratchpad.adv_params.interval = millisecondsToUnits(40, UNIT_0_625_MS); - scratchpad.adv_params.timeout = 180; // 180 seconds - -#if NRF_SD_BLE_API == 2 - scratchpad.adv_params.p_whitelist = NULL; -#endif - } - - uint32_t setBLEOptions() - { -#if NRF_SD_BLE_API <= 3 - return sd_ble_opt_set(m_adapter, BLE_COMMON_OPT_CONN_BW, &scratchpad.opt); -#else - return NRF_ERROR_NOT_SUPPORTED; -#endif - } - - uint32_t initBLEStack() - { - uint32_t err_code; - uint32_t * app_ram_base = NULL; - -#if NRF_SD_BLE_API <= 3 - err_code = sd_ble_enable(m_adapter, &scratchpad.ble_enable_params, app_ram_base); -#else - err_code = sd_ble_enable(m_adapter, app_ram_base); -#endif - - switch (err_code) { - case NRF_SUCCESS: - break; - case NRF_ERROR_INVALID_STATE: - NRF_LOG(role() << " BLE stack already enabled\n"); - break; - default: - NRF_LOG(role() << " Failed to enable BLE stack. " << testutil::errorToString(err_code)); - break; - } - - return err_code; - } - -#if NRF_SD_BLE_API >= 5 - uint32_t setBLECfg(uint8_t conn_cfg_tag) - { - const uint32_t ram_start = 0; // Value is not used by ble-driver - uint32_t error_code; - ble_cfg_t ble_cfg; - - // Configure the connection roles. - memset(&ble_cfg, 0, sizeof(ble_cfg)); - ble_cfg.gap_cfg.role_count_cfg.periph_role_count = 1; - ble_cfg.gap_cfg.role_count_cfg.central_role_count = 1; - ble_cfg.gap_cfg.role_count_cfg.central_sec_count = 1; - - error_code = sd_ble_cfg_set(m_adapter, BLE_GAP_CFG_ROLE_COUNT, &ble_cfg, ram_start); - - if (error_code != NRF_SUCCESS) - { - NRF_LOG(role() << " sd_ble_cfg_set() failed when attempting to set BLE_GAP_CFG_ROLE_COUNT. " << testutil::errorToString(error_code)); - return error_code; - } - - memset(&ble_cfg, 0x00, sizeof(ble_cfg)); - ble_cfg.conn_cfg.conn_cfg_tag = conn_cfg_tag; - ble_cfg.conn_cfg.params.gatt_conn_cfg.att_mtu = scratchpad.mtu; - - error_code = sd_ble_cfg_set(m_adapter, BLE_CONN_CFG_GATT, &ble_cfg, ram_start); - if (error_code != NRF_SUCCESS) - { - NRF_LOG(role() << " sd_ble_cfg_set() failed when attempting to set BLE_CONN_CFG_GATT. " << testutil::errorToString(error_code)); - return error_code; - } - - return NRF_SUCCESS; - } -#endif - - adapter_t *adapterInit(const char * serial_port, uint32_t baud_rate) - { - physical_layer_t * phy; - data_link_layer_t * data_link_layer; - transport_layer_t * transport_layer; - - phy = sd_rpc_physical_layer_create_uart(serial_port, baud_rate, SD_RPC_FLOW_CONTROL_NONE, - SD_RPC_PARITY_NONE); - data_link_layer = sd_rpc_data_link_layer_create_bt_three_wire(phy, 100); - transport_layer = sd_rpc_transport_layer_create(data_link_layer, 100); - return sd_rpc_adapter_create(transport_layer); - } - }; - - std::ostream& operator<< (std::ostream &s, const ble_gap_addr_t *address) - { - const int address_length = 6; - - for (int i = sizeof(address->addr) - 1; i >= 0; --i) - { - s << std::setfill('0') << std::setw(2) << std::hex << static_cast(address->addr[i]); - - if (i < 5) - { - s << ":"; - } - } - - s << "/"; - - switch (address->addr_type) - { - case BLE_GAP_ADDR_TYPE_PUBLIC: - s << "PUBLIC"; - break; - case BLE_GAP_ADDR_TYPE_RANDOM_STATIC: - s << "RANDOM_STATIC"; - break; - case BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE: - s << "RANDOM_PRIVATE_RESOLVABLE"; - break; - case BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE: - s << "RANDOM_PRIVATE_NON_RESOLVABLE"; - break; - default: - s << "UNKNOWN"; - break; - } - - return s; - } -} // namespace testutil - -#endif // TEST_UTIL_ADAPTER_WRAPPER_H__ diff --git a/test/test_util_conversion.h b/test/test_util_conversion.h deleted file mode 100644 index b40c960df..000000000 --- a/test/test_util_conversion.h +++ /dev/null @@ -1,212 +0,0 @@ -#ifndef TEST_UTIL_CONVERSION_H__ -#define TEST_UTIL_CONVERSION_H__ - -#include "ble.h" - -namespace testutil -{ - /** - * @brief Function that convert data to string representation - * @param[in] data Data to represent as a string - * @return string representation of data - */ - static std::string asHex(const std::vector &data) { - std::stringstream retval; - - for (uint8_t const& value : data) - { - retval << std::setfill('0') << std::setw(2) << std::hex << static_cast(value) << ' '; - } - - return retval.str(); - } - - static std::string asHex(const uint16_t &data) - { - std::stringstream retval; - retval << std::setfill('0') << std::setw(2) << std::hex << data; - return retval.str(); - } - - /** - * @brief Function that convert a Bluetooth Low Energy address to string - * - * @param[in] address Bluetooth Lower Energy address - * @return string representation of provided address - */ - static std::string asText(const ble_gap_addr_t &address) - { - const int address_length = 6; - std::stringstream retval; - - for (int i = sizeof(address.addr) - 1; i >= 0; --i) - { - retval << std::setfill('0') << std::setw(2) << std::hex << static_cast(address.addr[i]); - - if (i > 0) - { - retval << ":"; - } - } - - retval << "/"; - - switch (address.addr_type) - { - case BLE_GAP_ADDR_TYPE_PUBLIC: - retval << "PUBLIC"; - break; - case BLE_GAP_ADDR_TYPE_RANDOM_STATIC: - retval << "RANDOM_STATIC"; - break; - case BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE: - retval << "RANDOM_PRIVATE_RESOLVABLE"; - break; - case BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE: - retval << "RANDOM_PRIVATE_NON_RESOLVABLE"; - break; - default: - retval << "UNKNOWN"; - break; - } - - return retval.str(); - } - - /** - * @brief Function that convert an error code to string representation - * - * param[in] error code - * - * @return textual representation of the error - */ - static std::string errorToString(const uint32_t error_code) - { - std::stringstream retval; - retval << "error code: 0x" << std::setfill('0') << std::setw(2) << std::hex << error_code; - return retval.str(); - } - - /** - * @brief Function that convert a GATT status code to string representation - * - * param[in] code code - * - * @return textual representation of the code - */ - static std::string gattStatusToString(const uint16_t code) - { - std::stringstream retval; - retval << "GATT status code: 0x" << std::setfill('0') << std::setw(4) << std::hex << (uint32_t)code << "."; - return retval.str(); - } - - // Operator overloading for common types used - std::string asText(const sd_rpc_app_status_t &status) - { - switch (status) - { - case PKT_SEND_MAX_RETRIES_REACHED: - return "PKT_SEND_MAX_RETRIES_REACHED"; - case PKT_UNEXPECTED: - return "PKT_UNEXPECTED"; - case PKT_ENCODE_ERROR: - return "PKT_ENCODE_ERROR"; - case PKT_DECODE_ERROR: - return "PKT_DECODE_ERROR"; - case PKT_SEND_ERROR: - return "PKT_SEND_ERROR"; - case IO_RESOURCES_UNAVAILABLE: - return "IO_RESOURCES_UNAVAILABLE"; - case RESET_PERFORMED: - return "RESET_PERFORMED"; - case CONNECTION_ACTIVE: - return "CONNECTION_ACTIVE"; - default: - return "UNKNOWN"; - } - } - - static std::string asText(const uint16_t &value) - { - std::stringstream retval; - retval << "0x" << std::setfill('0') << std::setw(4) << std::hex << (uint32_t)value; - return retval.str(); - } - - static std::string asText(const uint8_t &value) - { - std::stringstream retval; - retval << "0x" << std::setfill('0') << std::setw(2) << std::hex << (uint32_t)value; - return retval.str(); - } - - static std::string asText(const ble_uuid_t &uuid) - { - std::stringstream retval; - retval << "uuid: [type: " << asText(uuid.type) << ", uuid: " << asText(uuid.uuid) << "]"; - return retval.str(); - } - - static std::string asText(const ble_gattc_char_t &gattc_char) - { - std::stringstream retval; - retval << "characteristic: [" - << "handle_decl: " << asText(gattc_char.handle_decl) - << ", handle_value: " << asText(gattc_char.handle_value) - << ", uuid: " << asText(gattc_char.uuid) - << "]"; - - return retval.str(); - } - - static std::string asText(const ble_gattc_handle_range_t &gattc_handle_range) - { - std::stringstream retval; - retval << "handle range: [" - << "start: " << asText(gattc_handle_range.start_handle) - << ", end: " << asText(gattc_handle_range.end_handle) - << "]"; - return retval.str(); - } - - static std::string asText(const ble_gattc_desc_t &gattc_desc) - { - std::stringstream retval; - retval << "descriptor: [" - << "handle: " << asText(gattc_desc.handle) - << " " << asText(gattc_desc.uuid) - << "]"; - return retval.str(); - } - - static std::string asText(const sd_rpc_log_severity_t &severity) - { - switch (severity) - { - case SD_RPC_LOG_TRACE: - return "TRACE"; - break; - case SD_RPC_LOG_DEBUG: - return "DEBUG"; - break; - case SD_RPC_LOG_INFO: - return "INFO"; - break; - case SD_RPC_LOG_WARNING: - return "WARNING"; - break; - case SD_RPC_LOG_ERROR: - return "ERROR"; - break; - case SD_RPC_LOG_FATAL: - return "FATAL"; - break; - default: - return "UNKNOWN"; - break; - }; - } -} // namespace testutil - -#endif // TEST_UTIL_CONVERSION_H__ diff --git a/test/test_util_role.h b/test/test_util_role.h deleted file mode 100644 index d6279efd1..000000000 --- a/test/test_util_role.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef TEST_UTIL_ROLE_H__ -#define TEST_UTIL_ROLE_H__ - -#include "ble.h" - -namespace testutil -{ - enum Role - { - Central = BLE_GAP_ROLE_CENTRAL, - Peripheral = BLE_GAP_ROLE_PERIPH - }; - - std::ostream& operator<< (std::ostream &s, const Role &role) - { - if (role == Role::Central) - { - s << "[central]"; - } - else if (role == Role::Peripheral) - { - s << "[peripheral]"; - } - else - { - s << "[unknown role]"; - } - - return s; - } -} // namespace testutil - -#endif // TEST_UTIL_ROLE_H__ \ No newline at end of file diff --git a/test/test_h5_transport.cpp b/test/transport/test_h5_transport.cpp similarity index 94% rename from test/test_h5_transport.cpp rename to test/transport/test_h5_transport.cpp index a57bfc829..c8492624f 100644 --- a/test/test_h5_transport.cpp +++ b/test/transport/test_h5_transport.cpp @@ -40,17 +40,19 @@ #include "catch2/catch.hpp" // Logging support -#include "internal/log.h" +#define NRF_LOG_SETUP +#include -#include "transport.h" -#include "h5_transport.h" -#include "h5.h" -#include "nrf_error.h" +#include +#include +#include +#include -#include "test_setup.h" +#include #include #include +#include #include #include #include @@ -64,25 +66,23 @@ class H5TransportTestSetup { public: - H5TransportTestSetup(const std::string transportName, Transport *lowerTransport): name(transportName) + H5TransportTestSetup(std::string transportName, Transport *lowerTransport): name(std::move(transportName)) { - transport = std::shared_ptr( - new test::H5TransportWrapper(lowerTransport, 250) - ); + transport = std::make_shared(lowerTransport, 250); } - void statusCallback(sd_rpc_app_status_t code, const char *message) const + void statusCallback(const sd_rpc_app_status_t code, const std::string &message) const { NRF_LOG("[" << name << "][status] code: " << code << " message: " << message); } - void dataCallback(uint8_t *data, size_t length) + void dataCallback(const uint8_t *data, const size_t length) { incoming.assign(data, data + length); NRF_LOG("[" << name << "][data]<- " << testutil::asHex(incoming) << " length: " << length); } - void logCallback(sd_rpc_log_severity_t severity, std::string message) const + void logCallback(const sd_rpc_log_severity_t severity, const std::string &message) const { NRF_LOG("[" << name << "][log] severity: " << severity << " message: " << message); } diff --git a/test/transport/test_serial_port_enum.cpp b/test/transport/test_serial_port_enum.cpp new file mode 100644 index 000000000..3e04ecff6 --- /dev/null +++ b/test/transport/test_serial_port_enum.cpp @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2018 Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in or with a processor manufactured by Nordic + * Semiconductor ASA, or in or with a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * 5. Any software provided in binary or object form under this license must not be + * reverse engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +// Test framework +#define CATCH_CONFIG_MAIN +#include "catch2/catch.hpp" + +// Logging support +#define NRF_LOG_SETUP +#include + +#include +#include + +#include + +#if defined(_MSC_VER) +// Disable warning "This function or variable may be unsafe. Consider using _dupenv_s instead." +#pragma warning(disable: 4996) +#endif + +TEST_CASE("SerialPortEnumeration") +{ + SECTION("Array not large enough for devices found") { + std::vector devices(0); + auto size = static_cast(devices.capacity()); + REQUIRE(sd_rpc_serial_port_enum(devices.data(), &size) == NRF_ERROR_DATA_SIZE); + } + + SECTION("Array large enough for devices found") { + std::vector devices(100); + auto size = static_cast(devices.capacity()); + REQUIRE(sd_rpc_serial_port_enum(devices.data(), &size) == NRF_SUCCESS); + REQUIRE(size > 0); + NRF_LOG("Found " << size << " devices."); + } +} diff --git a/test/test_uart_boost.cpp b/test/transport/test_uart_boost.cpp similarity index 65% rename from test/test_uart_boost.cpp rename to test/transport/test_uart_boost.cpp index fdacf670d..ca0e1bdb3 100644 --- a/test/test_uart_boost.cpp +++ b/test/transport/test_uart_boost.cpp @@ -35,45 +35,48 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - // Logging support +// Logging support +#define NRF_LOG_SETUP #include "internal/log.h" - // Test framework +// Test framework #define CATCH_CONFIG_MAIN #include "catch2/catch.hpp" -#include "uart_boost.h" -#include "test_setup.h" +#include +#include -#include -#include -#include +#include #include -#include -#include -#include #include -#include +#include +#include +#include +#include #if defined(_MSC_VER) // Disable warning "This function or variable may be unsafe. Consider using _dupenv_s instead." -#pragma warning(disable: 4996) +#pragma warning(disable : 4996) #endif using std::chrono::system_clock; -struct PortStats { +struct PortStats +{ uint32_t pktCount; - uint32_t pktMinSize; - uint32_t pktMaxSize; - - PortStats() : pktCount(0), pktMinSize(std::numeric_limits::max()), pktMaxSize(0) {} + size_t pktMinSize; + size_t pktMaxSize; + + PortStats() + : pktCount(0) + , pktMinSize(std::numeric_limits::max()) + , pktMaxSize(0) + {} }; -std::ostream& operator<<(std::ostream &out, PortStats stats) +std::ostream &operator<<(std::ostream &out, const PortStats &stats) { - out << "pkt_count: " << stats.pktCount - << " pkt_max_size: " << stats.pktMaxSize + out << "pkt_count: " << stats.pktCount << " pkt_max_size: " << stats.pktMaxSize << " pkt_min_size: "; if (stats.pktMinSize == std::numeric_limits::max()) @@ -92,32 +95,33 @@ TEST_CASE("open_close") { auto env = ::test::getEnvironment(); - INFO("Two serial ports must be specifided. Please specify environment variables BLE_DRIVER_TEST_SERIAL_PORT_A and BLE_DRIVER_TEST_SERIAL_PORT_B"); + INFO("Two serial ports must be specifided. Please specify environment variables " + "BLE_DRIVER_TEST_SERIAL_PORT_A and BLE_DRIVER_TEST_SERIAL_PORT_B"); REQUIRE(env.serialPorts.size() == 2); auto envPortA = env.serialPorts.at(0); - auto portA = envPortA.port.c_str(); + auto portA = envPortA.port.c_str(); - auto ap = UartCommunicationParameters(); - ap.baudRate = envPortA.baudRate; - ap.dataBits = UartDataBitsEight; + UartCommunicationParameters ap; + ap.baudRate = envPortA.baudRate; + ap.dataBits = UartDataBitsEight; ap.flowControl = UartFlowControlNone; - ap.parity = UartParityNone; - ap.portName = portA; - ap.stopBits = UartStopBitsOne; - auto a = new UartBoost(ap); + ap.parity = UartParityNone; + ap.portName = portA; + ap.stopBits = UartStopBitsOne; + auto a = new UartBoost(ap); auto envPortB = env.serialPorts.at(1); - auto portB = envPortB.port.c_str(); + auto portB = envPortB.port.c_str(); - auto bp = UartCommunicationParameters(); - bp.baudRate = envPortB.baudRate; - bp.dataBits = UartDataBitsEight; + UartCommunicationParameters bp; + bp.baudRate = envPortB.baudRate; + bp.dataBits = UartDataBitsEight; bp.flowControl = UartFlowControlNone; - bp.parity = UartParityNone; - bp.portName = portB; - bp.stopBits = UartStopBitsOne; - auto b = new UartBoost(bp); + bp.parity = UartParityNone; + bp.portName = portB; + bp.stopBits = UartStopBitsOne; + auto b = new UartBoost(bp); bool error = false; @@ -131,18 +135,19 @@ TEST_CASE("open_close") std::generate(sendOnB.begin(), sendOnB.end(), std::rand); std::generate(sendOnA.begin(), sendOnA.end(), std::rand); - auto status_callback = [&error](sd_rpc_app_status_t code, const char *message) -> void - { + const auto status_callback = [&error](const sd_rpc_app_status_t code, + const std::string &message) -> void { NRF_LOG("code: " << code << " message: " << message); if (code != NRF_SUCCESS) { error = true; - NRF_LOG("ERROR: code is " << std::to_string(code) << " must be " << std::to_string(NRF_SUCCESS)); + NRF_LOG("ERROR: code is " << std::to_string(code) << " must be " + << std::to_string(NRF_SUCCESS)); } }; - auto log_callback = [&portA, &portB, &error](sd_rpc_log_severity_t severity, std::string message) -> void - { + auto log_callback = [&portA, &portB, &error](sd_rpc_log_severity_t severity, + std::string message) -> void { NRF_LOG("severity: " << severity << " message: " << message); if (severity == 1) @@ -175,47 +180,41 @@ TEST_CASE("open_close") PortStats portAStats; PortStats portBStats; - b->open( - status_callback, - [&receivedOnB, &portBStats](uint8_t *data, size_t length) -> void - { - receivedOnB.insert(receivedOnB.end(), data, data + length); - - if (portBStats.pktMaxSize < length) - { - portBStats.pktMaxSize = length; - } - - if (portBStats.pktMinSize > length) - { - portBStats.pktMinSize = length; - } - - portBStats.pktCount++; - }, - log_callback - ); - - a->open( - status_callback, - [&receivedOnA, &portAStats](uint8_t *data, size_t length) -> void - { - receivedOnA.insert(receivedOnA.end(), data, data + length); - - if (portAStats.pktMaxSize < length) - { - portAStats.pktMaxSize = length; - } - - if (portAStats.pktMinSize > length) - { - portAStats.pktMinSize = length; - } - - portAStats.pktCount++; - }, - log_callback - ); + b->open(status_callback, + [&receivedOnB, &portBStats](const uint8_t *data, const size_t length) -> void { + receivedOnB.insert(receivedOnB.end(), data, data + length); + + if (portBStats.pktMaxSize < length) + { + portBStats.pktMaxSize = length; + } + + if (portBStats.pktMinSize > length) + { + portBStats.pktMinSize = length; + } + + portBStats.pktCount++; + }, + log_callback); + + a->open(status_callback, + [&receivedOnA, &portAStats](const uint8_t *data, const size_t length) -> void { + receivedOnA.insert(receivedOnA.end(), data, data + length); + + if (portAStats.pktMaxSize < length) + { + portAStats.pktMaxSize = length; + } + + if (portAStats.pktMinSize > length) + { + portAStats.pktMinSize = length; + } + + portAStats.pktCount++; + }, + log_callback); b->send(sendOnB); a->send(sendOnA); diff --git a/test/test_virtual_uart.cpp b/test/transport/test_virtual_uart.cpp similarity index 80% rename from test/test_virtual_uart.cpp rename to test/transport/test_virtual_uart.cpp index 0ab8737ab..5fbb0b776 100644 --- a/test/test_virtual_uart.cpp +++ b/test/transport/test_virtual_uart.cpp @@ -1,16 +1,16 @@ // Logging support -#include "internal/log.h" +#define NRF_LOG_SETUP +#include -#include "test_setup.h" -#include "test_util.h" +#include +#include // Test framework #define CATCH_CONFIG_MAIN #include "catch2/catch.hpp" -#include "transport.h" -#include "nrf_error.h" -#include "virtual_uart.h" +#include +#include #if defined(_MSC_VER) // Disable warning "This function or variable may be unsafe. Consider using _dupenv_s instead." @@ -36,7 +36,7 @@ TEST_CASE("virtual_uart") const auto dataCallback = [](const std::string name, payload_t &payloadReceived) { - return [name, &payloadReceived](uint8_t *data, size_t length) -> void + return [name, &payloadReceived](const uint8_t *data, const size_t length) -> void { payloadReceived.assign(data, data + length); NRF_LOG("[" << name << "][data]<- " << testutil::asHex(payloadReceived) << " length: " << length); @@ -46,12 +46,12 @@ TEST_CASE("virtual_uart") const std::string uartAName = "uartA"; uartA->open( - [&uartAName](sd_rpc_app_status_t code, const char *message) -> void + [&uartAName](const sd_rpc_app_status_t code, const std::string &message) -> void { NRF_LOG("[" << uartAName << "][status] code: " << code << " message: " << message); }, dataCallback(uartAName, payloadFromB), - [&uartAName](sd_rpc_log_severity_t severity, std::string message) -> void + [&uartAName](const sd_rpc_log_severity_t severity, const std::string &message) -> void { NRF_LOG("[" << uartAName << "][log] severity: " << severity << " message: " << message); } @@ -60,12 +60,12 @@ TEST_CASE("virtual_uart") const std::string uartBName = "uartB"; uartB->open( - [&uartBName](sd_rpc_app_status_t code, const char *message) -> void + [&uartBName](const sd_rpc_app_status_t code, const std::string &message) -> void { NRF_LOG("[" << uartBName << "][status] code: " << code << " message: " << message); }, dataCallback(uartBName, payloadFromA), - [&uartBName](sd_rpc_log_severity_t severity, std::string message) -> void + [&uartBName](const sd_rpc_log_severity_t severity, const std::string &message) -> void { NRF_LOG("[" << uartBName << "][log] severity: " << severity << " message: " << message); } diff --git a/test/util/include/test_setup.h b/test/util/include/test_setup.h new file mode 100644 index 000000000..9bc16a1e1 --- /dev/null +++ b/test/util/include/test_setup.h @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2018 Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in or with a processor manufactured by Nordic + * Semiconductor ASA, or in or with a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * 5. Any software provided in binary or object form under this license must not be + * reverse engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#pragma once + +#include "h5_transport.h" +#include "transport.h" + +#include "log.h" +#include "test_util.h" + +#include "virtual_uart.h" + +#include +#include +#include +#include +#include + +constexpr uint32_t defaultRetransmissionInterval() +{ +#if NRF_SD_BLE_API == 2 + return 300; // nRF51 devices use SDv2. They are a bit slower than the nRF52 series devices. +#else + return 250; +#endif +} + +constexpr uint32_t defaultBaudRate = 1000000; /**< The baud rate to be used for serial communication with nRF5 device. */ + +#define STR(s) #s +#define EXPAND(s) STR(s) +#define CREATE_TEST_NAME_AND_TAGS(name, tags) \ +#name "_sdv" EXPAND(NRF_SD_BLE_API), #tags "[sdv" EXPAND(NRF_SD_BLE_API) "]" + +namespace test { +struct SerialPort +{ + SerialPort(std::string port, uint32_t baudRate); + std::string port; + uint32_t baudRate; +}; + +struct Environment +{ + std::vector serialPorts{}; + uint32_t numberOfIterations{10}; + sd_rpc_log_severity_t driverLogLevel{SD_RPC_LOG_INFO}; + bool driverLogLevelSet{false}; + uint32_t baudRate{defaultBaudRate}; + uint32_t retransmissionInterval{defaultRetransmissionInterval()}; + uint32_t responseTimeout{1500}; + uint16_t mtu{150}; + std::string hardwareInfo{}; +}; + +extern Environment ConfiguredEnvironment; + +Environment getEnvironment(); +std::string getEnvironmentAsText(const Environment &env); + +class VirtualTransportSendSync : public Transport +{ + public: + explicit VirtualTransportSendSync() noexcept; + + uint32_t open(const status_cb_t &status_callback, const data_cb_t &data_callback, + const log_cb_t &log_callback); + uint32_t close(); + uint32_t send(const std::vector &data); + + private: + std::thread dataPusher; + bool pushData; +}; + +// Since the H5Transport.open is a blocking call +// we need to run open in separate threads to +// make the two H5Transports communicate +class H5TransportWrapper : public H5Transport +{ + public: + H5TransportWrapper(Transport *nextTransportLayer, uint32_t retransmission_interval) noexcept; + ~H5TransportWrapper(); + + void openThread(status_cb_t status_callback, data_cb_t data_callback, log_cb_t log_callback); + + // Runs open in a separate thread, call waitForResult to wait for the result of opening. + // + // It does not override open becase we can not provide a return value that + // is of the same type as H5Transport::open + void wrappedOpen(status_cb_t status_callback, data_cb_t data_callback, log_cb_t log_callback); + uint32_t waitForResult(); + + private: + std::mutex openWait; + bool isOpenDone; + std::condition_variable openStateChanged; + + std::thread h5Thread; + uint32_t result; +}; +}; // namespace test diff --git a/test/util/include/test_util.h b/test/util/include/test_util.h new file mode 100644 index 000000000..a28ef629a --- /dev/null +++ b/test/util/include/test_util.h @@ -0,0 +1,104 @@ +#pragma once + +#include "test_util_adapter_wrapper.h" +#include "test_util_conversion.h" +#include "test_util_role.h" + +#include "ble.h" + +#include +#include +#include +#include + +namespace testutil { + +/** + * @brief Function that find advertising type data based on specified specified advertising type + * + * @param[in] advType Advertising type to search for + * @param[in] advData Advertising data to parse + * @param[in,out] advTypeData Advertising data found for provided advertising type + * + * @return true if advertising type was found, false if not. + */ +bool advReportParse(const uint8_t advType, const std::vector &advData, + std::vector &advTypeData); + +bool findManufacturerSpecificData(const ble_gap_evt_adv_report_t &p_adv_report, + std::vector &manufacturer_specific_data); + +/** + * @brief Function that search for advertising name in BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME or + * BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME + * + * @param[in] p_adv_report Pointer to advertising report to search in + * @param[in] name_to_find Advertising name to search for + * + * @return true if name is found, false if not + */ +bool findAdvName(const ble_gap_evt_adv_report_t p_adv_report, const std::string &name_to_find); + +void assertAdvertisingPacketSizeIsValid(const std::vector existingPacket, + const size_t additionalBytes, const bool extended = false, + const bool connectable = false); + +/** + * @brief Function that append name to advertise to advertising type + * BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME + * + * @param[in,out] advertisingData std::vector to append advertising data to + * @param[in] name Name to append to advertisingData + */ +void appendAdvertisingName(std::vector &advertisingData, const std::string &name, + const bool extended = false); + +/** + * @brief Function that append flags to advertising type + * + * @param[in,out] advertisingData std::vector to append advertising flags to + * @param[in] flags Flags to append to advertisingData + */ +void appendAdvertisingFlags(std::vector &advertisingData, const uint8_t flags, + const bool extended = false); + +/** + * @brief Function that append manufacturer specifid data to advertising + * + * @param[in,out] advertisingData std::vector to append manufacturer specific data to + * @param[in] manufacturerSpecificData Manufacturer specific data to append to advertisingData + */ +void appendManufacturerSpecificData(std::vector &advertisingData, + const std::vector manufacturerSpecificData, + const bool extended = false); + +/* + * @brief Function that fills a std::vector with random values + * + * @param[in,out] data vector to populate with random values + * @param[in] size number of random values to fill the vector with + */ +void appendRandomData(std::vector &data, const size_t size); + +/* + * @brief Function that fills a std::vector with random ASCII values + * + * @param[in,out] data vector to populate with random ASCII values + * @param[in] size number of random values to fill the vector with + */ + +void appendRandomAlphaNumeric(std::vector &data, const size_t size); + +std::string createRandomAdvertisingName(const std::string &prefix = "periph", + const uint8_t length = 10); + +bool operator==(const ble_gap_addr_t &lhs, const ble_gap_addr_t &rhs); + +bool operator!=(const ble_gap_addr_t &lhs, const ble_gap_addr_t &rhs); + +#if NRF_SD_BLE_API == 6 +bool operator==(const ble_gap_phys_t &lhs, const ble_gap_phys_t &rhs); +bool operator!=(const ble_gap_phys_t &lhs, const ble_gap_phys_t &rhs); +#endif // NRF_SD_BLE_API == 6 + +} // namespace testutil diff --git a/test/util/include/test_util_adapter_wrapper.h b/test/util/include/test_util_adapter_wrapper.h new file mode 100644 index 000000000..e2a1cbde0 --- /dev/null +++ b/test/util/include/test_util_adapter_wrapper.h @@ -0,0 +1,182 @@ +#pragma once + +#if NRF_SD_BLE_API == 4 || NRF_SD_BLE_API > 6 +#error "wrapper does not take into account this version of the SoftDevice API." +#endif + +#include "test_util_conversion.h" +#include "test_util_role.h" + +// Logging support +#include "internal/log.h" + +#include "ble.h" +#include "sd_rpc.h" + +#include "test_util_adapter_wrapper_scratchpad.h" + +#include +#include +#include +#include + +namespace testutil { +using LogCallback = + std::function; +using StatusCallback = + std::function; +using EventCallback = std::function; +using GapEventCallback = std::function; +using GattsEventCallback = + std::function; +using GattcEventCallback = + std::function; + +// Calculations between milliseconds to SoftDevice API units +using sd_api_time_unit_t = enum { + UNIT_0_625_MS = 625, /**< Number of microseconds in 0.625 milliseconds. */ + UNIT_1_25_MS = 1250, /**< Number of microseconds in 1.25 milliseconds. */ + UNIT_10_MS = 10000 /**< Number of microseconds in 10 milliseconds. */ +}; + +uint16_t millisecondsToUnits(const double milliseconds, const sd_api_time_unit_t timeunit); + +class AdapterWrapper +{ + public: + AdapterWrapper(const Role &role, const std::string &port, const uint32_t baudRate, + const uint16_t mtu = 0, const uint32_t retransmissionInterval = 250, + uint32_t const responseTimeout = 1000); + ~AdapterWrapper(); + + // Static data member that keeps pointer + // to all adapters used by the tests + static std::map adapters; + + uint32_t configure(); + + uint32_t connect(const ble_gap_addr_t *address); + bool error() const; + + uint32_t open(); + + uint32_t close(); + + uint32_t startScan(const bool resume = false, const bool extended = false, + const bool incomplete = false); + + uint32_t setupAdvertising(const std::vector &advertisingData = std::vector{}, + const std::vector &scanResponseData = std::vector{}, + const uint32_t interval = BLE_GAP_ADV_INTERVAL_MIN, + const uint32_t duration = 0, const bool connectable = true, + const bool extended = false, const bool scan_req_notification = false, + const uint8_t set_id = 0, const uint8_t primary_phy = 0, + const uint8_t secondary_phy = 0, const uint8_t filter_policy = 0, + const uint32_t max_adv_events = 0); + + uint32_t startAdvertising(); + + uint32_t startServiceDiscovery(const uint8_t type, const uint16_t uuid); + + uint32_t startAuthentication(const bool bond = true, const bool mitm = true, + const bool lesc = false, const bool keypress = false, + const uint8_t ioCaps = BLE_GAP_IO_CAPS_KEYBOARD_DISPLAY, + const bool oob = false, const uint8_t minKeySize = 7, + const uint8_t maxKeySize = 16); + + uint32_t authKeyReply(const uint8_t keyType, const uint8_t *key); + + uint32_t securityParamsReply(const uint8_t status, const ble_gap_sec_keyset_t &keyset, + const bool bond = true, const bool mitm = true, + const bool lesc = false, const bool keypress = false, + const uint8_t ioCaps = BLE_GAP_IO_CAPS_KEYBOARD_DISPLAY, + const bool oob = false, const uint8_t minKeySize = 7, + const uint8_t maxKeySize = 16); + + uint32_t securityParamsReply(const ble_gap_sec_keyset_t &keyset); + + uint32_t startCharacteristicDiscovery(); + + uint32_t startDescriptorDiscovery(); + + uint32_t writeCCCDValue(const uint16_t cccdHandle, const uint8_t value); + + uint32_t writeCharacteristicValue(const uint16_t characteristicHandle, + const std::vector &data); + + adapter_t *unwrap(); + + Role role() const; + std::string port() const; + + void processLog(const sd_rpc_log_severity_t severity, const std::string &log_message); + void logEvent(const uint16_t eventId, const ble_gap_evt_t &gapEvent); + + void processEvent(const ble_evt_t *p_ble_evt); + void processStatus(const sd_rpc_app_status_t code, const std::string &message); + + void setStatusCallback(const StatusCallback &statusCallback); + void setLogCallback(const LogCallback &logCallback); + void setEventCallback(const EventCallback &eventCallback); + void setGattcEventCallback(const GattcEventCallback &callback); + void setGattsEventCallback(const GattsEventCallback &callback); + void setGapEventCallback(const GapEventCallback &callback); + + // Public data members used during testing + public: + // Scratchpad for values related to SoftDevice API. + + // The scratchpad is used by methods in this class and by implementers of test. + + // There is no encapsulation of the values in the scratchpad and the scratchpad is not + // thread safe. + AdapterWrapperScratchpad scratchpad; + + // My address + ble_gap_addr_t address; + + private: + // Adapter from pc-ble-driver + adapter_t *m_adapter; + + // The role given in the test. The SoftDevice supports multi-role, but for + // simplicity in the tests we try to keep then to one role. + const Role m_role; + + const std::string m_port; + + // Used to indicate that something went wrong in an async callback + // Since the test framework is not thread safe, this variable is used + // indicate error in callbacks + bool m_async_error; + + // Callbacks + LogCallback m_logCallback; + StatusCallback m_statusCallback; + EventCallback m_eventCallback; + GapEventCallback m_gapEventCallback; + GattsEventCallback m_gattsEventCallback; + GattcEventCallback m_gattcEventCallback; + + void setupScratchpad(const uint16_t mtu = 0); + + uint32_t setBLEOptions(); + + uint32_t initBLEStack(); + +#if NRF_SD_BLE_API >= 5 + uint32_t setBLECfg(uint8_t conn_cfg_tag); +#endif + + adapter_t *adapterInit(const char *serial_port, const uint32_t baud_rate, + const uint32_t retransmission_interval, const uint32_t response_timeout); + + static void statusHandler(adapter_t *adapter, sd_rpc_app_status_t code, const char *message); + + static void eventHandler(adapter_t *adapter, ble_evt_t *p_ble_evt); + + static void logHandler(adapter_t *adapter, sd_rpc_log_severity_t severity, + const char *log_message); +}; + +} // namespace testutil diff --git a/test/util/include/test_util_adapter_wrapper_scratchpad.h b/test/util/include/test_util_adapter_wrapper_scratchpad.h new file mode 100644 index 000000000..e6010a6a3 --- /dev/null +++ b/test/util/include/test_util_adapter_wrapper_scratchpad.h @@ -0,0 +1,115 @@ +#pragma once + +#include "test_util_conversion.h" +#include "test_util_role.h" + +#include "ble.h" + +#if NRF_SD_BLE_API == 4 || NRF_SD_BLE_API > 6 +#error "wrapper does not take into account this version of the SoftDevice API." +#endif + +namespace testutil { + +// This struct is used for storing data that the tests can use +// +// It will only contain information about one connection, service, characteristic and CCCD +// +// NOTICE: +// this struct is not thread safe, the implementer of the test +// must take that into account when using this scratchpad + +#if NRF_SD_BLE_API < 6 +constexpr size_t ADV_DATA_BUFFER_SIZE = BLE_GAP_ADV_MAX_SIZE; +#else +constexpr size_t ADV_DATA_BUFFER_SIZE = + BLE_GAP_ADV_SET_DATA_SIZE_EXTENDED_MAX_SUPPORTED; +#endif + +struct AdapterWrapperScratchpad +{ + // Values related to SoftDevice API + ble_gap_scan_params_t scan_param; + ble_gap_conn_params_t connection_param; + +#if NRF_SD_BLE_API <= 3 + ble_enable_params_t ble_enable_params; +#endif // NRF_SD_BLE_API + +#if NRF_SD_BLE_API < 5 +#define DEFAULT_MTU_SIZE GATT_MTU_SIZE_DEFAULT +#else +#define DEFAULT_MTU_SIZE BLE_GATT_ATT_MTU_DEFAULT +#endif + +#if NRF_SD_BLE_API <= 3 + ble_opt_t opt; + ble_common_opt_t common_opt; +#endif + + // Connect handle to connection under test + uint16_t connection_handle = BLE_CONN_HANDLE_INVALID; + + // Security related values + uint8_t key_type; + uint8_t key[16]; + + uint16_t service_start_handle = 0; + uint16_t service_end_handle = 0; + + // Handle to Client Characterstic Configuration Descriptor + // Can be set during discovery of services + uint16_t cccd_handle = BLE_GATT_HANDLE_INVALID; + + // The service used by the test + uint16_t service_handle = BLE_GATT_HANDLE_INVALID; + + // The characteristic declaration handle used by the test + uint16_t characteristic_decl_handle = BLE_GATT_HANDLE_INVALID; + + // The characteristic value handle used by the test + uint16_t characteristic_value_handle = BLE_GATT_HANDLE_INVALID; + + // The descriptor used by the test + uint16_t descriptor_handle = BLE_GATT_HANDLE_INVALID; + + // Target service UUID to use during testing + ble_uuid_t target_service; + + // Target characteristic UUID to use during testing + ble_uuid_t target_characteristic; + + // Target descriptor UUID to use during testing + ble_uuid_t target_descriptor; + + // The GATT server side representation of the characteristic used by the test + ble_gatts_char_handles_t gatts_characteristic_handle; + + bool send_notifications = false; + bool advertisement_timed_out = false; + + uint16_t mtu = DEFAULT_MTU_SIZE; // See #define DEFAULT_MTU_SIZE above + + // Newer versions of SoftDevice API supports multiple configurations + uint32_t config_id = 1; + + bool connection_in_progress = false; + +#if NRF_SD_BLE_API == 6 + // Data members related to receiving advertisement reports + ble_data_t adv_report_receive_buffer{}; + uint8_t adv_report_data_received[ADV_DATA_BUFFER_SIZE]; // Data to store advertisement report in + + // Data members related to sending advertisement reports + uint8_t adv_handle{BLE_GAP_ADV_SET_HANDLE_NOT_SET}; + ble_gap_adv_data_t adv_report_data{}; // Data used for advertising + ble_data_t adv_report_adv_data{}; // Advertisement data + uint8_t adv_report_adv_data_buffer[ADV_DATA_BUFFER_SIZE]{}; // Advertisement data buffer + uint8_t adv_report_scan_rsp_data_buffer[1000]{}; // Advertisement data buffer + ble_data_t adv_report_scan_rsp_data{}; // Scan report data + ble_gap_adv_properties_t adv_properties{}; // Properties used for advertising +#endif + + ble_gap_adv_params_t adv_params{}; // Parameters used for advertising +}; +} // namespace testutil diff --git a/test/util/include/test_util_conversion.h b/test/util/include/test_util_conversion.h new file mode 100644 index 000000000..b584e26a3 --- /dev/null +++ b/test/util/include/test_util_conversion.h @@ -0,0 +1,104 @@ +#pragma once + +#include "ble.h" +#include "ble_hci.h" +#include "sd_rpc_types.h" + +#include +#include + +namespace testutil { +/** + * @brief Function that convert data to string representation + * @param[in] data Data to represent as a string + * @return string representation of data + */ +std::string asHex(const std::vector &data); +std::string asHex(const uint16_t &data); + +/** + * @brief Function that convert a Bluetooth Low Energy address to string + * + * @param[in] address Bluetooth Lower Energy address + * @return string representation of provided address + */ +std::string asText(const ble_gap_addr_t &address); + +/** + * @brief Function that convert an error code to string representation + * + * param[in] error code + * + * @return textual representation of the error + */ +std::string errorToString(const uint32_t error_code); +std::string ioCapsToString(const uint8_t code); +std::string roleToString(const uint8_t role); +std::string gattAuthErrorSrcToString(const uint8_t errorSrc); +std::string gattAuthStatusToString(const uint8_t authStatus); +std::string hciStatusCodeToString(const uint8_t hciStatusCode); +std::string eventIdAsText(const uint32_t eventId); + +std::string asText(const ble_gap_evt_passkey_display_t &passkeyDisplay); +std::string asText(const ble_gap_enc_info_t &encryptionInfo); +std::string asText(const ble_gap_conn_params_t &connectionParams); +std::string asText(const ble_gap_evt_connected_t &connected); +std::string asText(const ble_gap_evt_disconnected_t &disconnected); +std::string asText(const ble_gap_evt_scan_req_report_t &scanReqReport); +std::string asText(const ble_gap_sec_kdist_t &keyDist); +std::string asText(const ble_gap_evt_sec_request_t &securityRequest); +std::string asText(const ble_gap_evt_sec_params_request_t &securityParamsRequest); +std::string asText(const ble_gap_evt_auth_key_request_t &authKeyRequest); +std::string asText(const ble_gap_conn_sec_mode_t &connSecMode); +std::string asText(const ble_gap_conn_sec_t &connSec); +std::string asText(const ble_gap_evt_rssi_changed_t &rssiChanged); +std::string asText(const ble_gap_lesc_p256_pk_t &lsecP256Pk); +std::string asText(const ble_gap_evt_key_pressed_t &keyPressed); +std::string asText(const std::vector &data); +std::string asText(const ble_gap_evt_timeout_t &timeout); + +#if NRF_SD_BLE_API == 6 +std::string asText(const ble_gap_adv_report_type_t &reportType); +std::string asText(const ble_gap_aux_pointer_t &auxPointer); +std::string asText(const ble_gap_phys_t &phys); +std::string asText(const ble_gap_evt_phy_update_request_t &phyUpdateRequest); +std::string asText(const ble_gap_evt_phy_update_t &phyUpdate); +std::string asText(const ble_gap_data_length_params_t &dataLengthParams); +std::string asText(const ble_gap_evt_data_length_update_request_t &dataLengthUpdateRequest); +std::string asText(const ble_gap_evt_data_length_update_t &dataLengthUpdate); +std::string asText(const ble_gap_evt_qos_channel_survey_report_t &qosChannelSurveyReport); +std::string asText(const ble_data_t &data); +std::string asText(const ble_gap_adv_data_t &advData); +std::string asText(const ble_gap_evt_adv_set_terminated_t &advSetTerminated); +#endif // NRF_SD_BLE_API == 6 + +std::string asText(const ble_gap_evt_adv_report_t &advReport); +std::string asText(const ble_gap_evt_lesc_dhkey_request_t &dhkeyRequest); +std::string asText(const ble_gap_master_id_t &masterId); +std::string asText(const ble_gap_evt_sec_info_request_t &secInfoRequest); +std::string asText(const ble_gap_evt_conn_sec_update_t &connSecUpdate); +std::string asText(const ble_gap_sec_levels_t &secLevels); +std::string asText(const ble_gap_evt_auth_status_t &authStatus); + +/** + * @brief Function that convert a GATT status code to string representation + * + * param[in] code code + * + * @return textual representation of the code + */ +std::string gattStatusToString(const uint16_t code); + +// Operator overloading for common types used +std::string asText(const sd_rpc_app_status_t &status); +std::string asText(const uint16_t &value); +std::string asText(const uint8_t &value); +std::string asText(const ble_uuid_t &uuid); +std::string asText(const ble_gattc_char_t &gattc_char); +std::string asText(const ble_gattc_handle_range_t &gattc_handle_range); +std::string asText(const ble_gattc_desc_t &gattc_desc); +std::string asText(const sd_rpc_log_severity_t &severity); + +sd_rpc_log_severity_t parseLogSeverity(const std::string &level); + +} // namespace testutil diff --git a/test/util/include/test_util_role.h b/test/util/include/test_util_role.h new file mode 100644 index 000000000..20d1a3676 --- /dev/null +++ b/test/util/include/test_util_role.h @@ -0,0 +1,10 @@ +#pragma once + +#include "ble.h" +#include + +namespace testutil { +enum Role { Central = BLE_GAP_ROLE_CENTRAL, Peripheral = BLE_GAP_ROLE_PERIPH }; + +std::ostream &operator<<(std::ostream &s, const Role &role); +} // namespace testutil diff --git a/test/util/include/virtual_uart.h b/test/util/include/virtual_uart.h new file mode 100644 index 000000000..1239d4f29 --- /dev/null +++ b/test/util/include/virtual_uart.h @@ -0,0 +1,44 @@ +#pragma once + +#include "internal/log.h" +#include "transport.h" +#include "h5_transport.h" + +#include +#include +#include +#include +#include + +class VirtualUart : public Transport +{ +private: + std::string name; + bool isOpen; + VirtualUart* peer; + + std::mutex outDataMutex; + std::vector> outData; + std::condition_variable outDataAvailable; + std::thread outDataThread; + + std::mutex inDataMutex; + std::vector> inData; + std::condition_variable inDataAvailable; + std::thread inDataThread; + + control_pkt_type stopAtPktType; + + bool stoppedProcessing; + +public: + VirtualUart() = delete; + VirtualUart(const std::string &name); + void stopAt(control_pkt_type stopAtPktType_); + uint32_t open(const status_cb_t &status_callback, const data_cb_t &data_callback, const log_cb_t &log_callback) override; + uint32_t close() override; + uint32_t send(const std::vector& data) override; + void setPeer(VirtualUart* connectingPeer); + void injectInData(const std::vector data); + ~VirtualUart() override; +}; diff --git a/test/util/src/test_setup.cpp b/test/util/src/test_setup.cpp new file mode 100644 index 000000000..1d769b0e3 --- /dev/null +++ b/test/util/src/test_setup.cpp @@ -0,0 +1,229 @@ +#include "test_setup.h" +#include +#include + +namespace test { + +Environment ConfiguredEnvironment; + +SerialPort::SerialPort(std::string port, uint32_t baudRate) + : port(std::move(port)) + , baudRate(baudRate){}; + +std::string getEnvironmentAsText(const Environment &env) +{ + std::stringstream ss; + + if (env.serialPorts.empty()) + { + ss << "No serial ports setup.\n"; + } + else + { + ss << "serial-ports:\n"; + for (auto port : env.serialPorts) + { + ss << " port:" << port.port << " baud-rate:" << port.baudRate << "\n"; + } + } + + ss << "retransmission-interval:" << env.retransmissionInterval << "\n"; + ss << "response-timeout:" << env.responseTimeout << "\n"; + ss << "ble-mtu:" << env.mtu << "\n"; + + ss << "hardware-info:" << env.hardwareInfo << "\n"; + ss << "log-level:" << testutil::asText(env.driverLogLevel) << "\n"; + ss << "iterations(if relevant):" << env.numberOfIterations << "\n"; + + return ss.str(); +} + +Environment getEnvironment() +{ + Environment env; + + auto baudRate = defaultBaudRate; + const auto envBaudRate = std::getenv("BLE_DRIVER_TEST_BAUD_RATE"); + + if (envBaudRate != nullptr) + { + baudRate = std::stoi(envBaudRate); + } + + // Command line argument override environment variable + if (ConfiguredEnvironment.baudRate != 0) + { + baudRate = ConfiguredEnvironment.baudRate; + } + + // Command line argument override environment variable + if (std::count_if(ConfiguredEnvironment.serialPorts.begin(), + ConfiguredEnvironment.serialPorts.end(), + [](const SerialPort &port) -> bool { return !port.port.empty(); }) >= 2) + { + for (auto port : ConfiguredEnvironment.serialPorts) + { + if (!port.port.empty()) + { + env.serialPorts.emplace_back(port.port, baudRate); + } + } + } + else + { + auto envPortA = std::getenv("BLE_DRIVER_TEST_SERIAL_PORT_A"); + + if (envPortA != nullptr) + { + env.serialPorts.emplace_back(envPortA, baudRate); + } + + auto envPortB = std::getenv("BLE_DRIVER_TEST_SERIAL_PORT_B"); + + if (envPortB != nullptr) + { + env.serialPorts.emplace_back(envPortB, baudRate); + } + } + + auto numberOfIterations = 100; + const auto envNumberOfIterations = std::getenv("BLE_DRIVER_TEST_OPENCLOSE_ITERATIONS"); + + if (envNumberOfIterations != nullptr) + { + numberOfIterations = std::stoi(envNumberOfIterations); + } + + // Command line argument override environment variable + if (ConfiguredEnvironment.numberOfIterations != 0) + { + numberOfIterations = ConfiguredEnvironment.numberOfIterations; + } + + env.numberOfIterations = numberOfIterations; + + env.driverLogLevel = SD_RPC_LOG_INFO; + + // Command line argument override environment variable + if (ConfiguredEnvironment.driverLogLevelSet) + { + env.driverLogLevel = ConfiguredEnvironment.driverLogLevel; + } + else + { + const auto envDriverLogLevel = std::getenv("BLE_DRIVER_TEST_LOGLEVEL"); + + if (envDriverLogLevel != nullptr) + { + env.driverLogLevel = testutil::parseLogSeverity(envDriverLogLevel); + } + } + + env.driverLogLevelSet = true; + env.baudRate = baudRate; + env.hardwareInfo = ConfiguredEnvironment.hardwareInfo; + env.retransmissionInterval = ConfiguredEnvironment.retransmissionInterval; + env.responseTimeout = ConfiguredEnvironment.responseTimeout; + env.mtu = ConfiguredEnvironment.mtu; + + return env; +}; + +VirtualTransportSendSync::VirtualTransportSendSync() noexcept + : Transport() + , pushData(false) +{} + +uint32_t VirtualTransportSendSync::open(const status_cb_t &status_callback, + const data_cb_t &data_callback, + const log_cb_t &log_callback) +{ + Transport::open(status_callback, data_callback, log_callback); + pushData = true; + + auto inboundDataThread = [=]() -> void { + std::vector syncPacket{0xc0, 0x00, 0x2f, 0x00, 0xd1, 0x01, 0x7e, 0xc0}; + + while (pushData) + { + std::this_thread::sleep_for(std::chrono::milliseconds(250)); + upperDataCallback(syncPacket.data(), syncPacket.size()); + } + }; + + dataPusher = std::thread(inboundDataThread); + + return NRF_SUCCESS; +} + +uint32_t VirtualTransportSendSync::close() +{ + pushData = false; + + if (dataPusher.joinable()) + { + dataPusher.join(); + } + + return NRF_SUCCESS; +} + +uint32_t VirtualTransportSendSync::send(const std::vector &data) +{ + NRF_LOG("->" << testutil::asHex(data) << " length: " << data.size()); + return NRF_SUCCESS; +} + +// Since the H5Transport.open is a blocking call +// we need to run open in separate threads to +// make the two H5Transports communicate +H5TransportWrapper::H5TransportWrapper(Transport *nextTransportLayer, + uint32_t retransmission_interval) noexcept + : H5Transport(nextTransportLayer, retransmission_interval) + , isOpenDone(false) + , result(-1) +{} + +H5TransportWrapper::~H5TransportWrapper() +{ + H5Transport::close(); +} + +void H5TransportWrapper::openThread(status_cb_t status_callback, data_cb_t data_callback, + log_cb_t log_callback) +{ + auto lock = std::unique_lock(openWait); + + result = H5Transport::open(status_callback, data_callback, log_callback); + + isOpenDone = true; + + lock.unlock(); + openStateChanged.notify_all(); +}; + +// Runs open in a separate thread, call waitForResult to wait for the result of opening. +// +// It does not override open because we can not provide a return value that +// is of the same type as H5Transport::open +void H5TransportWrapper::wrappedOpen(status_cb_t status_callback, data_cb_t data_callback, + log_cb_t log_callback) +{ + auto lock = std::unique_lock(openWait); + h5Thread = std::thread(std::bind(&H5TransportWrapper::openThread, this, status_callback, + data_callback, log_callback)); +} + +uint32_t H5TransportWrapper::waitForResult() +{ + auto lock = std::unique_lock(openWait); + + if (isOpenDone) + { + return result; + } + + openStateChanged.wait(lock, [this] { return isOpenDone; }); + return result; +} +} // namespace test diff --git a/test/util/src/test_util.cpp b/test/util/src/test_util.cpp new file mode 100644 index 000000000..676bc06be --- /dev/null +++ b/test/util/src/test_util.cpp @@ -0,0 +1,314 @@ +#include "test_util.h" + +#include "ble.h" + +#include +#include +#include + +#include +#include +#include + +namespace testutil { + +/** + * @brief Function that find advertising type data based on specified specified advertising type + * + * @param[in] advType Advertisment type to search for + * @param[in] advData Advertising data to parse + * @param[in,out] advTypeData Advertising data found for provided advertising type + * + * @return true if advertising type was found, false if not. + */ +bool advReportParse(const uint8_t advType, const std::vector &advData, + std::vector &advTypeData) +{ + auto typeDataBegin = advData.begin(); + while (typeDataBegin != advData.end()) + { + auto fieldLength = *typeDataBegin++; + if (typeDataBegin == advData.end()) + { + return false; + } + + auto fieldType = *typeDataBegin++; + if (typeDataBegin == advData.end()) + { + return false; + } + + const auto advTypeDataLength = fieldLength - 1; + const auto distance = std::distance(typeDataBegin, advData.end()); + + if (distance < advTypeDataLength) + { + return false; + } + + if (fieldType == advType) + { + const auto typeDataEnd = typeDataBegin + advTypeDataLength; + advTypeData.assign(typeDataBegin, typeDataEnd); + return true; + } + + std::advance(typeDataBegin, fieldLength - 1); + } + + return false; +} + +bool findManufacturerSpecificData(const ble_gap_evt_adv_report_t &p_adv_report, + std::vector &manufacturer_specific_data) +{ + std::vector advData; + + uint8_t *data; + uint16_t data_len; + +#if NRF_SD_BLE_API >= 6 + data = (uint8_t *)p_adv_report.data.p_data; + data_len = p_adv_report.data.len; +#else + data = (uint8_t *)p_adv_report.data; + data_len = p_adv_report.dlen; +#endif + advData.assign(data, data + data_len); + + std::vector manufacturerSpecific; + return advReportParse(BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA, advData, + manufacturer_specific_data); +} + +/** + * @brief Function that search for advertising name in BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME or + * BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME + * + * @param[in] p_adv_report Pointer to advertising report to search in + * @param[in] name_to_find Advertising name to search for + * + * @return true if name is found, false if not + */ +bool findAdvName(const ble_gap_evt_adv_report_t p_adv_report, const std::string &name_to_find) +{ + std::vector advData; + + uint8_t *data; + uint16_t data_len; + +#if NRF_SD_BLE_API >= 6 + data = (uint8_t *)p_adv_report.data.p_data; + data_len = p_adv_report.data.len; +#else + data = (uint8_t *)p_adv_report.data; + data_len = p_adv_report.dlen; +#endif + advData.assign(data, data + data_len); + + std::vector advTypeData; + std::vector nameToFind; + std::copy(name_to_find.begin(), name_to_find.end(), std::back_inserter(nameToFind)); + + auto found = [&](const uint8_t advType) { + if (advReportParse(advType, advData, advTypeData)) + { + if (nameToFind.size() > advTypeData.size()) + { + return false; + } + + if (std::equal(nameToFind.begin(), nameToFind.end(), advTypeData.begin())) + { + return true; + } + } + + return false; + }; + + return found(BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME) || found(BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME); +} + +void assertAdvertisingPacketSizeIsValid(const std::vector existingPacket, + const size_t additionalBytes, const bool extended, + const bool connectable) +{ + auto valid = true; + const auto packetSize = existingPacket.size() + additionalBytes; + + if (packetSize > testutil::ADV_DATA_BUFFER_SIZE) + { + if (extended) + { +#if NRF_SD_BLE_API == 6 + valid = packetSize > + static_cast( + connectable ? BLE_GAP_ADV_SET_DATA_SIZE_EXTENDED_CONNECTABLE_MAX_SUPPORTED + : BLE_GAP_ADV_SET_DATA_SIZE_EXTENDED_MAX_SUPPORTED); +#else + throw std::invalid_argument( + "Only SoftDevice API version 6 or newer support extended advertising."); +#endif + } + else + { +#if NRF_SD_BLE_API == 6 + valid = packetSize > BLE_GAP_ADV_SET_DATA_SIZE_MAX; +#else + valid = packetSize > BLE_GAP_ADV_MAX_SIZE; +#endif + } + } + + if (!valid) + { + throw std::range_error("Packet size is larger than allowed for this type of advertising."); + } +} + +/** + * @brief Function that append name to advertise to advertising type + * BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME + * + * @param[in,out] advertisingData std::vector to append advertising data to + * @param[in] name Name to append to advertisingData + */ +void appendAdvertisingName(std::vector &advertisingData, const std::string &name, + const bool extended) +{ + assertAdvertisingPacketSizeIsValid(advertisingData, 2 /* size + type */ + name.length(), + extended); + + advertisingData.push_back(1 /* type */ + static_cast(name.length())); + advertisingData.push_back(BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME); + std::copy(name.begin(), name.end(), std::back_inserter(advertisingData)); +} + +/** + * @brief Function that append flags to advertising type + * + * @param[in,out] advertisingData std::vector to append advertising flags to + * @param[in] flags Flags to append to advertisingData + */ +void appendAdvertisingFlags(std::vector &advertisingData, const uint8_t flags, + const bool extended) +{ + assertAdvertisingPacketSizeIsValid(advertisingData, 3 /* size + type + flags */, extended); + + advertisingData.push_back(2); // Flags field size + flags data size + advertisingData.push_back(BLE_GAP_AD_TYPE_FLAGS); + advertisingData.push_back(flags); +} + +/** + * @brief Function that append manufacturer specifid data to advertising + * + * @param[in,out] advertisingData std::vector to append manufacturer specific data to + * @param[in] manufacturerSpecificData Manufacturer specific data to append to advertisingData + */ +void appendManufacturerSpecificData(std::vector &advertisingData, + const std::vector manufacturerSpecificData, + const bool extended) +{ + assertAdvertisingPacketSizeIsValid( + advertisingData, 2 /* size + type */ + manufacturerSpecificData.size(), extended); + + advertisingData.push_back(1 /* type */ + static_cast(manufacturerSpecificData.size())); + advertisingData.push_back(BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA); + std::copy(manufacturerSpecificData.begin(), manufacturerSpecificData.end(), + std::back_inserter(advertisingData)); +} + +/* + * @brief Function that fills a std::vector with random values + * + * @param[in,out] data vector to populate with random values + * @param[in] size number of random values to fill the vector with + */ +void appendRandomData(std::vector &data, const size_t size) +{ + data.resize(size); + std::generate(data.begin(), data.end(), std::rand); +} + +/* + * @brief Function that fills a std::vector with random ASCII values + * + * @param[in,out] data vector to populate with random ASCII values + * @param[in] size number of random values to fill the vector with + */ + +void appendRandomAlphaNumeric(std::vector &data, const size_t size) +{ + data.resize(size); + std::generate(data.begin(), data.end(), [] { + uint8_t c; + while (!std::isalnum(c = static_cast(std::rand()))) + ; + return c; + }); +} + +std::string createRandomAdvertisingName(const std::string &prefix, const uint8_t length) +{ + std::vector data; + data.reserve(length); + + if (prefix.length() > length) + { + return std::string(prefix.begin(), prefix.begin() + length); + } + + std::copy(prefix.begin(), prefix.end(), std::back_inserter(data)); + const auto randomLength = length - prefix.length(); + std::generate_n(std::back_inserter(data), randomLength, [] { + char c; + while (!std::isalnum(c = static_cast(std::rand()))) + ; + return c; + }); + + return std::string(data.begin(), data.end()); +} + +bool operator==(const ble_gap_addr_t &lhs, const ble_gap_addr_t &rhs) +{ + const auto addressIsSame = std::memcmp(lhs.addr, rhs.addr, BLE_GAP_ADDR_LEN) == 0; + + if (addressIsSame && (lhs.addr_type == rhs.addr_type)) + { +#if NRF_SD_BLE_API == 6 + if (lhs.addr_id_peer != rhs.addr_id_peer) + { + return false; + } +#endif // NRF_SD_BLE_API + + return true; + } + else + { + return false; + } +} + +bool operator!=(const ble_gap_addr_t &lhs, const ble_gap_addr_t &rhs) +{ + return !(lhs == rhs); +} + +#if NRF_SD_BLE_API == 6 +bool operator==(const ble_gap_phys_t &lhs, const ble_gap_phys_t &rhs) +{ + return ((lhs.tx_phys == rhs.tx_phys) && (lhs.rx_phys == rhs.rx_phys)); +} + +bool operator!=(const ble_gap_phys_t &lhs, const ble_gap_phys_t &rhs) +{ + return !(lhs == rhs); +} +#endif // NRF_SD_BLE_API == 6 + +} // namespace testutil diff --git a/test/util/src/test_util_adapter_wrapper.cpp b/test/util/src/test_util_adapter_wrapper.cpp new file mode 100644 index 000000000..d74da5806 --- /dev/null +++ b/test/util/src/test_util_adapter_wrapper.cpp @@ -0,0 +1,1137 @@ +#include "test_util_adapter_wrapper.h" + +#if NRF_SD_BLE_API == 4 || NRF_SD_BLE_API > 6 +#error "wrapper does not take into account this version of the SoftDevice API." +#endif + +#include "test_util_conversion.h" +#include "test_util_role.h" + +// Logging support +#include "internal/log.h" + +#include "ble.h" +#include "sd_rpc.h" + +#include "test_util_adapter_wrapper_scratchpad.h" + +#include +#include +#include + +constexpr uint8_t MaxPeripheralConnections = 1; +constexpr uint8_t MaxCentralConnections = 7; +constexpr uint8_t MaxCentralSecureConnections = 1; + +namespace testutil { + +uint16_t millisecondsToUnits(const double milliseconds, const sd_api_time_unit_t timeunit) +{ + const auto microseconds = milliseconds * 1000; + return (static_cast(microseconds / timeunit)); +} + +AdapterWrapper::AdapterWrapper(const Role &role, const std::string &port, const uint32_t baudRate, + const uint16_t mtu, const uint32_t retransmissionInterval, + uint32_t const responseTimeout) + : address{} + , m_role(role) + , m_port(port) + , m_async_error(false) +{ + m_adapter = adapterInit(port.c_str(), baudRate, retransmissionInterval, responseTimeout); + + AdapterWrapper::adapters[m_adapter->internal] = this; + + // Setup scratchpad with default values + setupScratchpad(mtu); +}; + +AdapterWrapper::~AdapterWrapper() +{ + if (m_adapter != nullptr) + { + const auto err_code = sd_rpc_close(m_adapter); + NRF_LOG(role() << " sd_rpc_close, " << testutil::errorToString(err_code)); + + // Remove adapter from map of adapters used in callbacks + AdapterWrapper::adapters.erase(m_adapter->internal); + + sd_rpc_adapter_delete(m_adapter); + NRF_LOG(role() << " sd_rpc_adapter_delete called and returned."); + } +} + +uint32_t AdapterWrapper::configure() +{ + uint32_t err_code; + +#if NRF_SD_BLE_API >= 5 + err_code = setBLECfg(scratchpad.config_id); + + if (err_code != NRF_SUCCESS) + { + return err_code; + } +#endif + + err_code = initBLEStack(); + + if (err_code != NRF_SUCCESS) + { + return err_code; + } + +#if NRF_SD_BLE_API < 5 + err_code = setBLEOptions(); + + if (err_code != NRF_SUCCESS) + { + return err_code; + } +#endif + +// Store the local address +#if NRF_SD_BLE_API >= 3 + err_code = sd_ble_gap_addr_get(m_adapter, &address); + if (err_code != NRF_SUCCESS) + { + NRF_LOG(role() << " sd_ble_gap_addr_get, " << testutil::errorToString(err_code)); + } +#else + err_code = sd_ble_gap_address_get(m_adapter, &address); + if (err_code != NRF_SUCCESS) + { + NRF_LOG(role() << " sd_ble_gap_address_get failed, " << testutil::errorToString(err_code)); + } +#endif + + if (err_code != NRF_SUCCESS) + { + return err_code; + } + else + { + NRF_LOG(role() << " GAP address is: " << testutil::asText(address)); + } + + return err_code; +} + +uint32_t AdapterWrapper::connect(const ble_gap_addr_t *address) +{ + const auto err_code = sd_ble_gap_connect(m_adapter, address, &(scratchpad.scan_param), + &(scratchpad.connection_param) +#if NRF_SD_BLE_API >= 5 + , + scratchpad.config_id +#endif + ); + + if (err_code == NRF_SUCCESS) + { + scratchpad.connection_in_progress = true; + } + else + { + NRF_LOG(role() << " sd_ble_gap_connect, " << testutil::errorToString(err_code)); + } + + return err_code; +} + +bool AdapterWrapper::error() const +{ + return m_async_error; +} + +uint32_t AdapterWrapper::open() +{ + return sd_rpc_open(m_adapter, statusHandler, eventHandler, logHandler); +} + +uint32_t AdapterWrapper::close() +{ + return sd_rpc_close(m_adapter); +} + +uint32_t AdapterWrapper::startScan(const bool resume, const bool extended, const bool incomplete) +{ +#if NRF_SD_BLE_API == 6 + scratchpad.adv_report_receive_buffer.p_data = scratchpad.adv_report_data_received; + scratchpad.adv_report_receive_buffer.len = sizeof(scratchpad.adv_report_data_received); + scratchpad.scan_param.extended = extended ? 1 : 0; + scratchpad.scan_param.report_incomplete_evts = incomplete ? 1 : 0; +#endif + +#if NRF_SD_BLE_API < 6 + if (resume == true) + { + NRF_LOG(role() << " Not possible to resume a scan if SoftDevice API version < 6"); + return NRF_ERROR_INVALID_STATE; + } +#endif + + ble_gap_scan_params_t *scanParams; + + if (resume) + { + scanParams = nullptr; + } + else + { + scanParams = &scratchpad.scan_param; + } + + const auto err_code = sd_ble_gap_scan_start(m_adapter, scanParams +#if NRF_SD_BLE_API == 6 + , + &(scratchpad.adv_report_receive_buffer) +#endif + ); + + if (err_code != NRF_SUCCESS) + { + if (!resume) + { + NRF_LOG(role() << " Scan start failed with " << testutil::errorToString(err_code)); + } + else + { + NRF_LOG(role() << " Scan resume failed with " << testutil::errorToString(err_code)); + } + } + else + { + if (!resume) + { + NRF_LOG(role() << " Scan started"); + } + else + { + NRF_LOG(role() << " Scan resumed"); + } + } + + return err_code; +} + +uint32_t AdapterWrapper::setupAdvertising( + const std::vector &advertisingData, const std::vector &scanResponseData, + const uint32_t interval, const uint32_t duration, const bool connectable, const bool extended, + const bool scan_req_notification, const uint8_t set_id, const uint8_t primary_phy, + const uint8_t secondary_phy, const uint8_t filter_policy, const uint32_t max_adv_events) +{ +#if NRF_SD_BLE_API <= 5 + const uint8_t *sr_data = nullptr; + const uint8_t sr_data_length = 0; + + auto err_code = sd_ble_gap_adv_data_set(m_adapter, advertisingData.data(), + static_cast(advertisingData.size()), sr_data, + sr_data_length); + + if (err_code != NRF_SUCCESS) + { + NRF_LOG(role() << " sd_ble_gap_adv_data_set, " << testutil::errorToString(err_code)); + return err_code; + } +#endif + +#if NRF_SD_BLE_API == 6 + const auto advertisingDataSize = advertisingData.size(); + + if (advertisingDataSize > testutil::ADV_DATA_BUFFER_SIZE) + { + NRF_LOG(role() << " Advertising data is larger then the buffer set asize."); + return NRF_ERROR_INVALID_PARAM; + } + + if (advertisingDataSize == 0) + { + scratchpad.adv_report_adv_data.p_data = nullptr; + scratchpad.adv_report_adv_data.len = 0; + } + else + { + std::copy(advertisingData.begin(), advertisingData.end(), + scratchpad.adv_report_adv_data_buffer); + scratchpad.adv_report_adv_data.p_data = scratchpad.adv_report_adv_data_buffer; + scratchpad.adv_report_adv_data.len = static_cast(advertisingDataSize); + } + + const auto scanResponseDataSize = scanResponseData.size(); + + if (scanResponseDataSize == 0) + { + scratchpad.adv_report_scan_rsp_data.p_data = nullptr; + scratchpad.adv_report_scan_rsp_data.len = 0; + } + else + { + std::copy(scanResponseData.begin(), scanResponseData.end(), + scratchpad.adv_report_scan_rsp_data_buffer); + scratchpad.adv_report_scan_rsp_data.p_data = scratchpad.adv_report_scan_rsp_data_buffer; + scratchpad.adv_report_scan_rsp_data.len = static_cast(scanResponseDataSize); + } + + // Tie together the advertisement setup + scratchpad.adv_report_data.adv_data = scratchpad.adv_report_adv_data; + scratchpad.adv_report_data.scan_rsp_data = scratchpad.adv_report_scan_rsp_data; + scratchpad.adv_params.properties.anonymous = 0; + scratchpad.adv_params.properties.include_tx_power = 0; + + scratchpad.adv_params.set_id = set_id; + scratchpad.adv_params.interval = interval; + scratchpad.adv_params.duration = duration; + scratchpad.adv_params.filter_policy = filter_policy; + scratchpad.adv_params.scan_req_notification = (scan_req_notification ? 1 : 0); + scratchpad.adv_params.primary_phy = primary_phy; + scratchpad.adv_params.secondary_phy = secondary_phy; + scratchpad.adv_params.max_adv_evts = max_adv_events; + + // Support only undirected advertisement for now + if (extended) + { + if (connectable) + { + scratchpad.adv_params.properties.type = + BLE_GAP_ADV_TYPE_EXTENDED_CONNECTABLE_NONSCANNABLE_UNDIRECTED; + } + else + { + scratchpad.adv_params.properties.type = + BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_SCANNABLE_UNDIRECTED; + } + } + else + { + if (connectable) + { + scratchpad.adv_params.properties.type = + BLE_GAP_ADV_TYPE_CONNECTABLE_SCANNABLE_UNDIRECTED; + } + else + { + scratchpad.adv_params.properties.type = + BLE_GAP_ADV_TYPE_NONCONNECTABLE_SCANNABLE_UNDIRECTED; + } + } + + auto err_code = + sd_ble_gap_adv_set_configure(m_adapter, &(scratchpad.adv_handle), + &(scratchpad.adv_report_data), &(scratchpad.adv_params)); +#endif + + if (err_code != NRF_SUCCESS) + { + NRF_LOG(role() << " Setup of advertisement failed, " << testutil::errorToString(err_code)); + } + else + { + NRF_LOG(role() << " Setting advertisement success."); + } + + return err_code; +} + +uint32_t AdapterWrapper::startAdvertising() +{ + if (role() != Peripheral) + { + NRF_LOG(role() << " Wrong role, must be peripheral to advertise."); + return NRF_ERROR_INVALID_STATE; + } + + uint32_t err_code; + +#if NRF_SD_BLE_API <= 3 + err_code = sd_ble_gap_adv_start(m_adapter, &(scratchpad.adv_params)); +#elif NRF_SD_BLE_API == 5 + err_code = sd_ble_gap_adv_start(m_adapter, &(scratchpad.adv_params), scratchpad.config_id); +#elif NRF_SD_BLE_API == 6 + err_code = sd_ble_gap_adv_start(m_adapter, scratchpad.adv_handle, scratchpad.config_id); +#endif + + if (err_code != NRF_SUCCESS) + { + NRF_LOG(role() << " Failed to start advertising, sd_ble_gap_adv_start, " + << testutil::errorToString(err_code)); + } + + return err_code; +} + +uint32_t AdapterWrapper::startServiceDiscovery(const uint8_t type, const uint16_t uuid) +{ + uint16_t start_handle = 0x01; + ble_uuid_t srvc_uuid; + + NRF_LOG(role() << " Starting discovery of GATT Primary Services"); + + srvc_uuid.type = type; + srvc_uuid.uuid = uuid; + + const auto err_code = sd_ble_gattc_primary_services_discover( + m_adapter, scratchpad.connection_handle, start_handle, &srvc_uuid); + + if (err_code != NRF_SUCCESS) + { + NRF_LOG(role() << " Failed to initiate or continue a GATT Primary Service Discovery " + "procedure, sd_ble_gattc_primary_services_discover " + << testutil::errorToString(err_code)); + } + + return err_code; +} + +uint32_t AdapterWrapper::startAuthentication(const bool bond, const bool mitm, const bool lesc, + const bool keypress, const uint8_t ioCaps, + const bool oob, const uint8_t minKeySize, + const uint8_t maxKeySize) +{ + ble_gap_sec_params_t p_sec_params; + memset(&p_sec_params, 0, sizeof(p_sec_params)); + p_sec_params.bond = bond ? 1 : 0; + p_sec_params.mitm = mitm ? 1 : 0; + p_sec_params.lesc = lesc ? 1 : 0; + p_sec_params.keypress = keypress ? 1 : 0; + p_sec_params.io_caps = ioCaps; + p_sec_params.oob = oob ? 1 : 0; + p_sec_params.min_key_size = minKeySize; + p_sec_params.max_key_size = maxKeySize; + + const auto err_code = + sd_ble_gap_authenticate(m_adapter, scratchpad.connection_handle, &p_sec_params); + + if (err_code != NRF_SUCCESS) + { + NRF_LOG(role() << " Error calling sd_ble_gap_authenticate: " + << testutil::errorToString(err_code)); + } + + return err_code; +} + +uint32_t AdapterWrapper::authKeyReply(const uint8_t keyType, const uint8_t *key) +{ + const auto err_code = + sd_ble_gap_auth_key_reply(m_adapter, scratchpad.connection_handle, keyType, key); + if (err_code != NRF_SUCCESS) + { + NRF_LOG(role() << " Error calling sd_ble_gap_auth_key_reply: " + << testutil::errorToString(err_code)); + } + + return err_code; +} + +uint32_t AdapterWrapper::securityParamsReply(const uint8_t status, + const ble_gap_sec_keyset_t &keyset, const bool bond, + const bool mitm, const bool lesc, const bool keypress, + const uint8_t ioCaps, const bool oob, + const uint8_t minKeySize, const uint8_t maxKeySize) +{ + ble_gap_sec_params_t secParams; + memset(&secParams, 0, sizeof(secParams)); + secParams.bond = bond ? 1 : 0; + secParams.mitm = mitm ? 1 : 0; + secParams.lesc = lesc ? 1 : 0; + secParams.keypress = keypress ? 1 : 0; + secParams.io_caps = ioCaps; + secParams.oob = oob ? 1 : 0; + secParams.min_key_size = minKeySize; + secParams.max_key_size = maxKeySize; + + const auto err_code = sd_ble_gap_sec_params_reply(m_adapter, scratchpad.connection_handle, + status, &secParams, &keyset); + + if (err_code != NRF_SUCCESS) + { + NRF_LOG(role() << " sd_ble_gap_sec_params_reply, " << testutil::errorToString(err_code)); + } + + return err_code; +} + +uint32_t AdapterWrapper::securityParamsReply(const ble_gap_sec_keyset_t &keyset) +{ + const auto err_code = sd_ble_gap_sec_params_reply(m_adapter, scratchpad.connection_handle, + BLE_GAP_SEC_STATUS_SUCCESS, nullptr, &keyset); + + if (err_code != NRF_SUCCESS) + { + NRF_LOG(role() << " sd_ble_gap_sec_params_reply failed, " + << testutil::errorToString(err_code)); + } + + return err_code; +} + +uint32_t AdapterWrapper::startCharacteristicDiscovery() +{ + ble_gattc_handle_range_t handle_range; + + handle_range.start_handle = scratchpad.service_start_handle; + handle_range.end_handle = scratchpad.service_end_handle; + + NRF_LOG(role() << " Discovering characteristics, " << testutil::asText(handle_range)); + + const auto err_code = sd_ble_gattc_characteristics_discover( + m_adapter, scratchpad.connection_handle, &handle_range); + if (err_code != NRF_SUCCESS) + { + NRF_LOG(role() << " sd_ble_gattc_characteristics_discover, " + << testutil::errorToString(err_code)); + } + + return err_code; +} + +uint32_t AdapterWrapper::startDescriptorDiscovery() +{ + ble_gattc_handle_range_t handle_range; + NRF_LOG(role() << " Discovering characteristic's descriptors"); + + if (scratchpad.characteristic_decl_handle == 0) + { + NRF_LOG(role() << " No characteristic handle specified."); + return NRF_ERROR_INVALID_STATE; + } + + handle_range.start_handle = scratchpad.characteristic_decl_handle; + handle_range.end_handle = scratchpad.service_end_handle; + + const auto err_code = + sd_ble_gattc_descriptors_discover(m_adapter, scratchpad.connection_handle, &handle_range); + + if (err_code != NRF_SUCCESS) + { + NRF_LOG(role() << " sd_ble_gattc_descriptors_discover failed, err_code: " + << testutil::errorToString(err_code)); + } + + return err_code; +} + +uint32_t AdapterWrapper::writeCCCDValue(const uint16_t cccdHandle, const uint8_t value) +{ + ble_gattc_write_params_t write_params; + uint8_t cccd_value[2] = {value, 0}; + + write_params.handle = cccdHandle; + write_params.len = 2; + write_params.p_value = cccd_value; + write_params.write_op = BLE_GATT_OP_WRITE_REQ; + write_params.offset = 0; + + NRF_LOG(role() << " Writing to connection " << testutil::asText(scratchpad.connection_handle) + << " CCCD handle: " << testutil::asText(cccdHandle) << " value: " << value); + + const auto err_code = + sd_ble_gattc_write(m_adapter, scratchpad.connection_handle, &write_params); + + if (err_code != NRF_SUCCESS) + { + NRF_LOG(role() << " sd_ble_gattc_write, " << testutil::errorToString(err_code)); + } + + return err_code; +} + +uint32_t AdapterWrapper::writeCharacteristicValue(const uint16_t characteristicHandle, + const std::vector &data) +{ + ble_gattc_write_params_t write_params; + write_params.handle = characteristicHandle; + write_params.len = static_cast(data.size()); + write_params.p_value = const_cast(data.data()); + write_params.write_op = BLE_GATT_OP_WRITE_REQ; + write_params.offset = 0; + + NRF_LOG(role() << " Writing to connection_handle: " + << testutil::asText(scratchpad.connection_handle) + << " characteristic_handle: " << testutil::asText(characteristicHandle) + << " length: " << data.size() << " value: 0x" << asHex(data)); + + const auto err_code = + sd_ble_gattc_write(m_adapter, scratchpad.connection_handle, &write_params); + if (err_code != NRF_SUCCESS) + { + NRF_LOG(role() << " sd_ble_gattc_write, " << testutil::errorToString(err_code)); + } + + return err_code; +} + +adapter_t *AdapterWrapper::unwrap() +{ + return m_adapter; +} + +Role AdapterWrapper::role() const +{ + return m_role; +} + +std::string AdapterWrapper::port() const +{ + return m_port; +} + +void AdapterWrapper::processLog(const sd_rpc_log_severity_t severity, + const std::string &log_message) +{ + NRF_LOG(role() << "[log] severity:" << testutil::asText(severity) + << " message:" << log_message); + + if (m_logCallback) + { + m_logCallback(severity, log_message); + } +} + +void AdapterWrapper::logEvent(const uint16_t eventId, const ble_gap_evt_t &gapEvent) +{ + switch (eventId) + { + case BLE_GAP_EVT_CONNECTED: + NRF_LOG(role() << " BLE_GAP_EVT_CONNECTED [" + << "conn_handle:" << testutil::asText(gapEvent.conn_handle) + << " connected:[" << testutil::asText(gapEvent.params.connected) + << "]]"); + break; + case BLE_GAP_EVT_DISCONNECTED: + NRF_LOG(role() << " BLE_GAP_EVT_DISCONNECTED [" + << "conn_handle:" << testutil::asText(gapEvent.conn_handle) + << " disconnected:[" << testutil::asText(gapEvent.params.disconnected) + << "]]"); + break; + case BLE_GAP_EVT_TIMEOUT: + NRF_LOG(role() << " BLE_GAP_EVT_TIMEOUT [" + << "conn_handle:" << testutil::asText(gapEvent.conn_handle) + << " timeout:[" << testutil::asText(gapEvent.params.timeout) << "]]"); + break; + case BLE_GAP_EVT_ADV_REPORT: + NRF_LOG(role() << " BLE_GAP_EVT_ADV_REPORT [" + << "conn_handle:" << testutil::asText(gapEvent.conn_handle) + << " adv_report:[" << testutil::asText(gapEvent.params.adv_report) + << "]]"); + break; + case BLE_GAP_EVT_SEC_PARAMS_REQUEST: + NRF_LOG(role() << " BLE_GAP_EVT_SEC_PARAMS_REQUEST [" + << "conn_handle:" << testutil::asText(gapEvent.conn_handle) + << " sec_params_request:[" + << testutil::asText(gapEvent.params.sec_params_request) << "]]"); + break; + case BLE_GAP_EVT_SEC_INFO_REQUEST: + NRF_LOG(role() << " BLE_GAP_EVT_SEC_INFO_REQUEST [" + << "conn_handle:" << testutil::asText(gapEvent.conn_handle) + << " sec_info_request:[" + << testutil::asText(gapEvent.params.sec_info_request) << "]]"); + break; + case BLE_GAP_EVT_PASSKEY_DISPLAY: + NRF_LOG(role() << " BLE_GAP_EVT_PASSKEY_DISPLAY [" + << "conn_handle:" << testutil::asText(gapEvent.conn_handle) + << " passkey_display:[" + << testutil::asText(gapEvent.params.passkey_display) << "]]"); + break; + case BLE_GAP_EVT_KEY_PRESSED: + NRF_LOG(role() << " BLE_GAP_EVT_KEY_PRESSED [" + << "conn_handle:" << testutil::asText(gapEvent.conn_handle) + << " key_pressed:[" << testutil::asText(gapEvent.params.key_pressed) + << "]]"); + break; + case BLE_GAP_EVT_SEC_REQUEST: + NRF_LOG(role() << " BLE_GAP_EVT_SEC_REQUEST [" + << "conn_handle:" << testutil::asText(gapEvent.conn_handle) + << " sec_request:[" << testutil::asText(gapEvent.params.sec_request) + << "]]"); + break; + case BLE_GAP_EVT_AUTH_KEY_REQUEST: + NRF_LOG(role() << " BLE_GAP_EVT_AUTH_KEY_REQUEST [" + << "conn_handle:" << testutil::asText(gapEvent.conn_handle) + << " auth_key_request:[" + << testutil::asText(gapEvent.params.auth_key_request) << "]]"); + break; + case BLE_GAP_EVT_LESC_DHKEY_REQUEST: + NRF_LOG(role() << " BLE_GAP_EVT_LESC_DHKEY_REQUEST [" + << "conn_handle:" << testutil::asText(gapEvent.conn_handle) + << " lesc_dhkey_request:[" + << testutil::asText(gapEvent.params.lesc_dhkey_request) << "]]"); + break; + case BLE_GAP_EVT_CONN_SEC_UPDATE: + NRF_LOG(role() << " BLE_GAP_EVT_CONN_SEC_UPDATE [" + << "conn_handle:" << testutil::asText(gapEvent.conn_handle) + << " conn_sec_update:[" + << testutil::asText(gapEvent.params.conn_sec_update) << "]]"); + break; + case BLE_GAP_EVT_AUTH_STATUS: + NRF_LOG(role() << " BLE_GAP_EVT_AUTH_STATUS [" + << "conn_handle:" << testutil::asText(gapEvent.conn_handle) + << " auth_status:[" << testutil::asText(gapEvent.params.auth_status) + << "]]"); + break; + case BLE_GAP_EVT_RSSI_CHANGED: + NRF_LOG(role() << " BLE_GAP_EVT_RSSI_CHANGED [" + << "conn_handle:" << testutil::asText(gapEvent.conn_handle) + << " rssi_changed:[" << testutil::asText(gapEvent.params.rssi_changed) + << "]]"); + break; + case BLE_GAP_EVT_SCAN_REQ_REPORT: + NRF_LOG(role() << " BLE_GAP_EVT_SCAN_REQ_REPORT [" + << "conn_handle:" << testutil::asText(gapEvent.conn_handle) + << " scan_req_report:[" + << testutil::asText(gapEvent.params.scan_req_report) << "]]"); + break; +#if NRF_SD_BLE_API == 6 + case BLE_GAP_EVT_PHY_UPDATE_REQUEST: + NRF_LOG(role() << " BLE_GAP_EVT_PHY_UPDATE_REQUEST [" + << "conn_handle:" << testutil::asText(gapEvent.conn_handle) + << " scan_req_report:[" + << testutil::asText(gapEvent.params.phy_update_request) << "]]"); + break; + + case BLE_GAP_EVT_PHY_UPDATE: + NRF_LOG(role() << " BLE_GAP_EVT_PHY_UPDATE [" + << "conn_handle:" << testutil::asText(gapEvent.conn_handle) + << " scan_req_report:[" << testutil::asText(gapEvent.params.phy_update) + << "]]"); + break; + + case BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST: + NRF_LOG(role() << " BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST [" + << "conn_handle:" << testutil::asText(gapEvent.conn_handle) + << " scan_req_report:[" + << testutil::asText(gapEvent.params.data_length_update_request) << "]]"); + break; + + case BLE_GAP_EVT_DATA_LENGTH_UPDATE: + NRF_LOG(role() << " BLE_GAP_EVT_DATA_LENGTH_UPDATE [" + << "conn_handle:" << testutil::asText(gapEvent.conn_handle) + << " scan_req_report:[" + << testutil::asText(gapEvent.params.data_length_update) << "]]"); + break; + + case BLE_GAP_EVT_QOS_CHANNEL_SURVEY_REPORT: + NRF_LOG(role() << " BLE_GAP_EVT_QOS_CHANNEL_SURVEY_REPORT [" + << "conn_handle:" << testutil::asText(gapEvent.conn_handle) + << " scan_req_report:[" + << testutil::asText(gapEvent.params.qos_channel_survey_report) << "]]"); + break; + + case BLE_GAP_EVT_ADV_SET_TERMINATED: + NRF_LOG(role() << " BLE_GAP_EVT_ADV_SET_TERMINATED [" + << "conn_handle:" << testutil::asText(gapEvent.conn_handle) + << " scan_req_report:[" + << testutil::asText(gapEvent.params.adv_set_terminated) << "]]"); + break; + +#endif // NRF_SD_BLE_API == 6 + default: + NRF_LOG(role() << " UNKNOWN EVENT WITH ID [0x" << std::hex << eventId << "]"); + break; + } +} + +void AdapterWrapper::processEvent(const ble_evt_t *p_ble_evt) +{ + auto eventId = p_ble_evt->header.evt_id; + + const auto logGenericUnprocessed = [this, &eventId]() { + NRF_LOG(role() << " Unprocessed event: 0x" << std::setfill('0') << std::setw(2) << std::hex + << (uint32_t)eventId); + }; + + if (eventId >= BLE_GAP_EVT_BASE && eventId <= BLE_GAP_EVT_LAST) + { + logEvent(eventId, p_ble_evt->evt.gap_evt); + + switch (eventId) + { + case BLE_GAP_EVT_CONNECTED: + scratchpad.connection_handle = p_ble_evt->evt.gap_evt.conn_handle; + scratchpad.connection_in_progress = false; + break; + case BLE_GAP_EVT_DISCONNECTED: + scratchpad.connection_handle = BLE_CONN_HANDLE_INVALID; + break; + case BLE_GAP_EVT_TIMEOUT: + scratchpad.advertisement_timed_out = true; + if (p_ble_evt->evt.gap_evt.params.timeout.src == BLE_GAP_TIMEOUT_SRC_CONN) + { + scratchpad.connection_in_progress = false; + } + break; + case BLE_GAP_EVT_AUTH_KEY_REQUEST: + scratchpad.key_type = p_ble_evt->evt.gap_evt.params.auth_key_request.key_type; + break; + default: + break; + } + + const auto logUnprocessed = [this, &eventId]() { + NRF_LOG(role() << " Unprocessed GAP event, " << testutil::eventIdAsText(eventId)); + }; + + if (m_gapEventCallback) + { + if (!m_gapEventCallback(eventId, &(p_ble_evt->evt.gap_evt))) + { + logUnprocessed(); + } + } + else + { + logUnprocessed(); + } + } + else if (eventId >= BLE_GATTC_EVT_BASE && eventId <= BLE_GATTC_EVT_LAST) + { + const auto logUnprocessed = [this, &eventId]() { + NRF_LOG(role() << " Unprocessed GATTC event, " << eventIdAsText(eventId)); + }; + + if (m_gattcEventCallback) + { + if (!m_gattcEventCallback(eventId, &(p_ble_evt->evt.gattc_evt))) + { + logUnprocessed(); + } + } + else + { + logUnprocessed(); + } + } + else if (eventId >= BLE_GATTS_EVT_BASE && eventId <= BLE_GATTS_EVT_LAST) + { + const auto logUnprocessed = [this, &eventId]() { + NRF_LOG(role() << " Unprocessed GATTS event, " << eventIdAsText(eventId)); + }; + + if (m_gattsEventCallback) + { + if (!m_gattsEventCallback(eventId, &(p_ble_evt->evt.gatts_evt))) + { + logUnprocessed(); + } + } + else + { + logUnprocessed(); + } + } + else + { + if (m_eventCallback) + { + if (!m_eventCallback(p_ble_evt)) + { + logGenericUnprocessed(); + } + } + else + { + logGenericUnprocessed(); + } + } +} + +void AdapterWrapper::processStatus(const sd_rpc_app_status_t code, const std::string &message) +{ + NRF_LOG(role() << "[status] code:" << testutil::asText(code) << " message:" << message); + + if (m_statusCallback) + { + m_statusCallback(code, message); + } +} + +void AdapterWrapper::setStatusCallback(const StatusCallback &statusCallback) +{ + m_statusCallback = statusCallback; +} + +void AdapterWrapper::setLogCallback(const LogCallback &logCallback) +{ + m_logCallback = logCallback; +} + +void AdapterWrapper::setEventCallback(const EventCallback &eventCallback) +{ + m_eventCallback = eventCallback; +} + +void AdapterWrapper::setGattcEventCallback(const GattcEventCallback &callback) +{ + m_gattcEventCallback = callback; +} + +void AdapterWrapper::setGattsEventCallback(const GattsEventCallback &callback) +{ + m_gattsEventCallback = callback; +} + +void AdapterWrapper::setGapEventCallback(const GapEventCallback &callback) +{ + m_gapEventCallback = callback; +} + +void AdapterWrapper::setupScratchpad(const uint16_t mtu) +{ + // Setup scratchpad with default values, take role into account +#if NRF_SD_BLE_API <= 3 + std::memset(&scratchpad.ble_enable_params, 0, sizeof(scratchpad.ble_enable_params)); + scratchpad.ble_enable_params.gatts_enable_params.attr_tab_size = + BLE_GATTS_ATTR_TAB_SIZE_DEFAULT; + scratchpad.ble_enable_params.gatts_enable_params.service_changed = false; + scratchpad.ble_enable_params.gap_enable_params.periph_conn_count = MaxPeripheralConnections; + scratchpad.ble_enable_params.gap_enable_params.central_conn_count = MaxCentralConnections; + scratchpad.ble_enable_params.gap_enable_params.central_sec_count = MaxCentralSecureConnections; + scratchpad.ble_enable_params.common_enable_params.p_conn_bw_counts = nullptr; + scratchpad.ble_enable_params.common_enable_params.vs_uuid_count = 1; + + if (m_role == Central) + { + scratchpad.common_opt.conn_bw.role = BLE_GAP_ROLE_CENTRAL; + } + else + { + scratchpad.common_opt.conn_bw.role = BLE_GAP_ROLE_PERIPH; + } + + scratchpad.common_opt.conn_bw.conn_bw.conn_bw_rx = BLE_CONN_BW_HIGH; + scratchpad.common_opt.conn_bw.conn_bw.conn_bw_tx = BLE_CONN_BW_HIGH; + scratchpad.opt.common_opt = scratchpad.common_opt; + scratchpad.mtu = mtu == 0 ? DEFAULT_MTU_SIZE : mtu; +#endif + +#if NRF_SD_BLE_API == 3 + scratchpad.ble_enable_params.gatt_enable_params.att_mtu = scratchpad.mtu; +#endif + + // Connection parameters + scratchpad.connection_param.min_conn_interval = millisecondsToUnits(7.5, UNIT_1_25_MS); + scratchpad.connection_param.max_conn_interval = millisecondsToUnits(7.5, UNIT_1_25_MS); + scratchpad.connection_param.slave_latency = 0; + scratchpad.connection_param.conn_sup_timeout = millisecondsToUnits(4000, UNIT_10_MS); + + // Scan parameters + std::memset(&scratchpad.scan_param, 0, sizeof(ble_gap_scan_params_t)); + scratchpad.scan_param.active = 1; + +#if NRF_SD_BLE_API == 2 + scratchpad.scan_param.p_whitelist = nullptr; +#endif + +#if NRF_SD_BLE_API >= 3 && NRF_SD_BLE_API <= 5 + scratchpad.scan_param.use_whitelist = 0; + scratchpad.scan_param.adv_dir_report = 0; + scratchpad.scan_param.adv_dir_report = 0; +#endif + + scratchpad.scan_param.window = millisecondsToUnits(50, UNIT_0_625_MS); + scratchpad.scan_param.timeout = 0; + scratchpad.scan_param.interval = millisecondsToUnits(100, UNIT_0_625_MS); + + // Advertisement parameters +#if NRF_SD_BLE_API == 6 + scratchpad.adv_handle = 0; // Using BLE_GAP_ADV_SET_HANDLE_NOT_SET causes a bug + std::memset(&scratchpad.adv_report_data, 0, sizeof(ble_gap_adv_data_t)); + std::memset(&scratchpad.adv_report_adv_data, 0, sizeof(ble_data_t)); + std::memset(&scratchpad.adv_report_scan_rsp_data, 0, sizeof(ble_data_t)); + std::memset(&scratchpad.adv_properties, 0, sizeof(ble_gap_adv_properties_t)); +#endif + std::memset(&scratchpad.adv_params, 0, sizeof(ble_gap_adv_params_t)); + +#if NRF_SD_BLE_API <= 5 + scratchpad.adv_params.type = BLE_GAP_ADV_TYPE_ADV_IND; + scratchpad.adv_params.fp = BLE_GAP_ADV_FP_ANY; + scratchpad.adv_params.timeout = 180; // 180 seconds +#endif + scratchpad.adv_params.interval = millisecondsToUnits(40, UNIT_0_625_MS); + scratchpad.adv_params.p_peer_addr = nullptr; // Undirected advertisement. + +#if NRF_SD_BLE_API == 2 + scratchpad.adv_params.p_whitelist = nullptr; +#endif + +#if NRF_SD_BLE_API == 6 + scratchpad.adv_properties.type = BLE_GAP_ADV_TYPE_CONNECTABLE_SCANNABLE_UNDIRECTED; + scratchpad.adv_properties.anonymous = 0; + scratchpad.adv_properties.include_tx_power = 0; + + scratchpad.adv_params.properties = scratchpad.adv_properties; + scratchpad.adv_params.filter_policy = BLE_GAP_ADV_FP_ANY; + scratchpad.adv_params.duration = BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED; + scratchpad.adv_params.p_peer_addr = nullptr; + scratchpad.adv_params.max_adv_evts = 0; + scratchpad.adv_params.primary_phy = BLE_GAP_PHY_AUTO; + scratchpad.adv_params.secondary_phy = BLE_GAP_PHY_AUTO; + scratchpad.adv_params.channel_mask[0] = 0; + scratchpad.adv_params.channel_mask[1] = 0; + scratchpad.adv_params.channel_mask[2] = 0; + scratchpad.adv_params.channel_mask[3] = 0; + scratchpad.adv_params.channel_mask[4] = 0; + + scratchpad.adv_report_scan_rsp_data.p_data = nullptr; + scratchpad.adv_report_scan_rsp_data.len = 0; + + scratchpad.adv_report_adv_data.p_data = nullptr; + scratchpad.adv_report_adv_data.len = 0; +#endif +} + +uint32_t AdapterWrapper::setBLEOptions() +{ +#if NRF_SD_BLE_API <= 3 + const auto err_code = sd_ble_opt_set(m_adapter, BLE_COMMON_OPT_CONN_BW, &scratchpad.opt); + if (err_code != NRF_SUCCESS) + { + NRF_LOG(role() << " sd_ble_opt_set, " << testutil::errorToString(err_code)); + } + + return err_code; +#else + return NRF_ERROR_NOT_SUPPORTED; +#endif +} + +uint32_t AdapterWrapper::initBLEStack() +{ + uint32_t err_code; + uint32_t *app_ram_base = nullptr; + +#if NRF_SD_BLE_API <= 3 + err_code = sd_ble_enable(m_adapter, &scratchpad.ble_enable_params, app_ram_base); +#else + err_code = sd_ble_enable(m_adapter, app_ram_base); +#endif + + switch (err_code) + { + case NRF_SUCCESS: + break; + case NRF_ERROR_INVALID_STATE: + NRF_LOG(role() << " BLE stack already enabled\n"); + break; + default: + NRF_LOG(role() << " Failed to enable BLE stack, " << testutil::errorToString(err_code)); + break; + } + + return err_code; +} + +#if NRF_SD_BLE_API >= 5 +uint32_t AdapterWrapper::setBLECfg(uint8_t conn_cfg_tag) +{ + const uint32_t ram_start = 0; // Value is not used by ble-driver + uint32_t error_code; + ble_cfg_t ble_cfg; + + // Configure the connection roles. + std::memset(&ble_cfg, 0, sizeof(ble_cfg)); + ble_cfg.gap_cfg.role_count_cfg.periph_role_count = MaxPeripheralConnections; + ble_cfg.gap_cfg.role_count_cfg.central_role_count = MaxCentralConnections; + ble_cfg.gap_cfg.role_count_cfg.central_sec_count = MaxCentralSecureConnections; + +#if NRF_SD_BLE_API == 6 + ble_cfg.gap_cfg.role_count_cfg.adv_set_count = 1; +#endif + + error_code = sd_ble_cfg_set(m_adapter, BLE_GAP_CFG_ROLE_COUNT, &ble_cfg, ram_start); + + if (error_code != NRF_SUCCESS) + { + NRF_LOG(role() << " sd_ble_cfg_set() failed when attempting to set BLE_GAP_CFG_ROLE_COUNT, " + << testutil::errorToString(error_code)); + return error_code; + } + + std::memset(&ble_cfg, 0, sizeof(ble_cfg)); + ble_cfg.conn_cfg.conn_cfg_tag = conn_cfg_tag; + ble_cfg.conn_cfg.params.gatt_conn_cfg.att_mtu = scratchpad.mtu; + + error_code = sd_ble_cfg_set(m_adapter, BLE_CONN_CFG_GATT, &ble_cfg, ram_start); + + if (error_code != NRF_SUCCESS) + { + NRF_LOG(role() << " sd_ble_cfg_set() failed when attempting to set BLE_CONN_CFG_GATT, " + << testutil::errorToString(error_code)); + return error_code; + } + + return NRF_SUCCESS; +} +#endif + +adapter_t *AdapterWrapper::adapterInit(const char *serial_port, const uint32_t baud_rate, + const uint32_t retransmission_interval, + const uint32_t response_timeout) +{ + const auto phy = sd_rpc_physical_layer_create_uart( + serial_port, baud_rate, SD_RPC_FLOW_CONTROL_NONE, SD_RPC_PARITY_NONE); + + const auto data_link_layer = + sd_rpc_data_link_layer_create_bt_three_wire(phy, retransmission_interval); + const auto transport_layer = sd_rpc_transport_layer_create(data_link_layer, response_timeout); + return sd_rpc_adapter_create(transport_layer); +} + +void AdapterWrapper::statusHandler(adapter_t *adapter, sd_rpc_app_status_t code, + const char *message) +{ + try + { + const auto wrappedAdapter = AdapterWrapper::adapters.at(adapter->internal); + wrappedAdapter->processStatus(code, message); + } + catch (std::out_of_range &) + { + NRF_LOG("In statusHandler callback, not able to find adapter to invoke status handler on."); + } + catch (std::system_error &e) + { + NRF_LOG("std::system_error in statusHandler: " << e.what()); + } +} + +void AdapterWrapper::eventHandler(adapter_t *adapter, ble_evt_t *p_ble_evt) +{ + try + { + const auto wrappedAdapter = AdapterWrapper::adapters.at(adapter->internal); + wrappedAdapter->processEvent(p_ble_evt); + } + catch (std::out_of_range &) + { + NRF_LOG("In eventHandler, not able to find adapter to invoke event handler on."); + } + catch (std::system_error &e) + { + NRF_LOG("std::system_error in eventHandler: " << e.what()); + } +} + +void AdapterWrapper::logHandler(adapter_t *adapter, sd_rpc_log_severity_t severity, + const char *log_message) +{ + try + { + const auto wrappedAdapter = AdapterWrapper::adapters.at(adapter->internal); + wrappedAdapter->processLog(severity, log_message); + } + catch (std::out_of_range &) + { + NRF_LOG("In logHandler, not able to find adapter to invoke log handler on."); + } + catch (std::system_error &e) + { + NRF_LOG("std::system_error in logHandler: " << e.what()); + } +} + +std::map AdapterWrapper::adapters; + +} // namespace testutil diff --git a/test/util/src/test_util_conversion.cpp b/test/util/src/test_util_conversion.cpp new file mode 100644 index 000000000..27c1b078c --- /dev/null +++ b/test/util/src/test_util_conversion.cpp @@ -0,0 +1,1092 @@ +#include "test_util_conversion.h" + +#include "ble.h" +#include "ble_hci.h" +#include "sd_rpc_types.h" + +#include +#include +#include +#include +#include + +#define NAME_MAP_ENTRY(enumerator) \ + { \ + enumerator, "" #enumerator "" \ + } + +namespace testutil { +/** + * @brief Function that convert data to string representation + * @param[in] data Data to represent as a string + * @return string representation of data + */ +std::string asHex(const std::vector &data) +{ + std::stringstream retval; + + for (uint8_t const &value : data) + { + retval << std::setfill('0') << std::setw(2) << std::hex << static_cast(value) << ' '; + } + + return retval.str(); +} + +std::string asHex(const uint16_t &data) +{ + std::stringstream retval; + retval << std::setfill('0') << std::setw(2) << std::hex << data; + return retval.str(); +} + +/** + * @brief Function that convert a Bluetooth Low Energy address to string + * + * @param[in] address Bluetooth Lower Energy address + * @return string representation of provided address + */ +std::string asText(const ble_gap_addr_t &address) +{ + std::stringstream retval; + + for (int i = sizeof(address.addr) - 1; i >= 0; --i) + { + retval << std::setfill('0') << std::setw(2) << std::hex + << static_cast(address.addr[i]); + + if (i > 0) + { + retval << ":"; + } + } + + retval << "/"; + + switch (address.addr_type) + { + case BLE_GAP_ADDR_TYPE_PUBLIC: + retval << "PUBLIC"; + break; + case BLE_GAP_ADDR_TYPE_RANDOM_STATIC: + retval << "RANDOM_STATIC"; + break; + case BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE: + retval << "RANDOM_PRIVATE_RESOLVABLE"; + break; + case BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE: + retval << "RANDOM_PRIVATE_NON_RESOLVABLE"; + break; + default: + retval << "UNKNOWN"; + break; + } + + return retval.str(); +} + +/** + * @brief Function that convert an error code to string representation + * + * param[in] error code + * + * @return textual representation of the error + */ +std::string errorToString(const uint32_t error_code) +{ + std::stringstream retval; + retval << "error code: 0x" << std::setfill('0') << std::setw(2) << std::hex << error_code; + return retval.str(); +} + +std::string ioCapsToString(const uint8_t code) +{ + std::stringstream retval; + + switch (code) + { + case BLE_GAP_IO_CAPS_DISPLAY_ONLY: + retval << " BLE_GAP_IO_CAPS_DISPLAY_ONLY"; + break; + case BLE_GAP_IO_CAPS_DISPLAY_YESNO: + retval << " BLE_GAP_IO_CAPS_DISPLAY_YESNO"; + break; + case BLE_GAP_IO_CAPS_KEYBOARD_ONLY: + retval << " BLE_GAP_IO_CAPS_KEYBOARD_ONLY"; + break; + case BLE_GAP_IO_CAPS_NONE: + retval << " BLE_GAP_IO_CAPS_NONE"; + break; + case BLE_GAP_IO_CAPS_KEYBOARD_DISPLAY: + retval << " BLE_GAP_IO_CAPS_KEYBOARD_DISPLAY"; + break; + default: + retval << " UNKNOWN"; + break; + } + + retval << "/0x" << std::setfill('0') << std::setw(2) << std::hex << (uint32_t)code << "."; + return retval.str(); +} + +std::string roleToString(const uint8_t role) +{ + std::stringstream retval; + + switch (role) + { + case BLE_GAP_ROLE_INVALID: + retval << "BLE_GAP_ROLE_INVALID"; + break; + case BLE_GAP_ROLE_PERIPH: + retval << "BLE_GAP_ROLE_PERIPH"; + break; + case BLE_GAP_ROLE_CENTRAL: + retval << "BLE_GAP_ROLE_CENTRAL"; + break; + default: + retval << "UNKNOWN"; + break; + } + + return retval.str(); +} + +std::string gattAuthErrorSrcToString(const uint8_t errorSrc) +{ + std::stringstream retval; + + switch (errorSrc) + { + case BLE_GAP_SEC_STATUS_SOURCE_LOCAL: + retval << "BLE_GAP_SEC_STATUS_SOURCE_LOCAL"; + break; + case BLE_GAP_SEC_STATUS_SOURCE_REMOTE: + retval << "BLE_GAP_SEC_STATUS_SOURCE_REMOTE"; + break; + default: + retval << "unknown"; + break; + } + + retval << "/0x" << std::setfill('0') << std::setw(2) << std::hex + << static_cast(errorSrc) << "."; + return retval.str(); +} + +std::string gattAuthStatusToString(const uint8_t authStatus) +{ + std::stringstream retval; + + switch (authStatus) + { + case BLE_GAP_SEC_STATUS_SUCCESS: + retval << "BLE_GAP_SEC_STATUS_SUCCESS"; + break; + case BLE_GAP_SEC_STATUS_TIMEOUT: + retval << "BLE_GAP_SEC_STATUS_TIMEOUT"; + break; + case BLE_GAP_SEC_STATUS_PDU_INVALID: + retval << "BLE_GAP_SEC_STATUS_PDU_INVALID"; + break; + case BLE_GAP_SEC_STATUS_RFU_RANGE1_BEGIN: + retval << "BLE_GAP_SEC_STATUS_RFU_RANGE1_BEGIN"; + break; + case BLE_GAP_SEC_STATUS_RFU_RANGE1_END: + retval << "BLE_GAP_SEC_STATUS_RFU_RANGE1_END"; + break; + case BLE_GAP_SEC_STATUS_PASSKEY_ENTRY_FAILED: + retval << "BLE_GAP_SEC_STATUS_PASSKEY_ENTRY_FAILED"; + break; + case BLE_GAP_SEC_STATUS_OOB_NOT_AVAILABLE: + retval << "BLE_GAP_SEC_STATUS_OOB_NOT_AVAILABLE"; + break; + case BLE_GAP_SEC_STATUS_AUTH_REQ: + retval << "BLE_GAP_SEC_STATUS_AUTH_REQ"; + break; + case BLE_GAP_SEC_STATUS_CONFIRM_VALUE: + retval << "BLE_GAP_SEC_STATUS_CONFIRM_VALUE"; + break; + case BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP: + retval << "BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP"; + break; + case BLE_GAP_SEC_STATUS_ENC_KEY_SIZE: + retval << "BLE_GAP_SEC_STATUS_ENC_KEY_SIZE"; + break; + case BLE_GAP_SEC_STATUS_SMP_CMD_UNSUPPORTED: + retval << "BLE_GAP_SEC_STATUS_SMP_CMD_UNSUPPORTED"; + break; + case BLE_GAP_SEC_STATUS_UNSPECIFIED: + retval << "BLE_GAP_SEC_STATUS_UNSPECIFIED"; + break; + case BLE_GAP_SEC_STATUS_REPEATED_ATTEMPTS: + retval << "BLE_GAP_SEC_STATUS_REPEATED_ATTEMPTS"; + break; + case BLE_GAP_SEC_STATUS_INVALID_PARAMS: + retval << "BLE_GAP_SEC_STATUS_INVALID_PARAMS"; + break; + case BLE_GAP_SEC_STATUS_DHKEY_FAILURE: + retval << "BLE_GAP_SEC_STATUS_DHKEY_FAILURE"; + break; + case BLE_GAP_SEC_STATUS_NUM_COMP_FAILURE: + retval << "BLE_GAP_SEC_STATUS_NUM_COMP_FAILURE"; + break; + case BLE_GAP_SEC_STATUS_BR_EDR_IN_PROG: + retval << "BLE_GAP_SEC_STATUS_BR_EDR_IN_PROG"; + break; + case BLE_GAP_SEC_STATUS_X_TRANS_KEY_DISALLOWED: + retval << "BLE_GAP_SEC_STATUS_X_TRANS_KEY_DISALLOWED"; + break; + case BLE_GAP_SEC_STATUS_RFU_RANGE2_BEGIN: + retval << "BLE_GAP_SEC_STATUS_RFU_RANGE2_BEGIN"; + break; + case BLE_GAP_SEC_STATUS_RFU_RANGE2_END: + retval << "BLE_GAP_SEC_STATUS_RFU_RANGE2_END"; + break; + default: + break; + } + + retval << "/0x" << std::setfill('0') << std::setw(2) << std::hex + << static_cast(authStatus) << "."; + return retval.str(); +} + +std::string hciStatusCodeToString(const uint8_t hciStatusCode) +{ + std::stringstream retval; + + switch (hciStatusCode) + { + case BLE_HCI_STATUS_CODE_SUCCESS: + retval << "BLE_HCI_STATUS_CODE_SUCCESS"; + break; + case BLE_HCI_STATUS_CODE_UNKNOWN_BTLE_COMMAND: + retval << "BLE_HCI_STATUS_CODE_UNKNOWN_BTLE_COMMAND"; + break; + case BLE_HCI_STATUS_CODE_UNKNOWN_CONNECTION_IDENTIFIER: + retval << "BLE_HCI_STATUS_CODE_UNKNOWN_CONNECTION_IDENTIFIER"; + break; + case BLE_HCI_AUTHENTICATION_FAILURE: + retval << "BLE_HCI_AUTHENTICATION_FAILURE"; + break; + case BLE_HCI_STATUS_CODE_PIN_OR_KEY_MISSING: + retval << "BLE_HCI_STATUS_CODE_PIN_OR_KEY_MISSING"; + break; + case BLE_HCI_MEMORY_CAPACITY_EXCEEDED: + retval << "BLE_HCI_MEMORY_CAPACITY_EXCEEDED"; + break; + case BLE_HCI_CONNECTION_TIMEOUT: + retval << "BLE_HCI_CONNECTION_TIMEOUT"; + break; + case BLE_HCI_STATUS_CODE_COMMAND_DISALLOWED: + retval << "BLE_HCI_STATUS_CODE_COMMAND_DISALLOWED"; + break; + case BLE_HCI_STATUS_CODE_INVALID_BTLE_COMMAND_PARAMETERS: + retval << "BLE_HCI_STATUS_CODE_INVALID_BTLE_COMMAND_PARAMETERS"; + break; + case BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION: + retval << "BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION"; + break; + case BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES: + retval << "BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES"; + break; + case BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF: + retval << "BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF"; + break; + case BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTION: + retval << "BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTION"; + break; + case BLE_HCI_UNSUPPORTED_REMOTE_FEATURE: + retval << "BLE_HCI_UNSUPPORTED_REMOTE_FEATURE"; + break; + case BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS: + retval << "BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS"; + break; + case BLE_HCI_STATUS_CODE_UNSPECIFIED_ERROR: + retval << "BLE_HCI_STATUS_CODE_UNSPECIFIED_ERROR"; + break; + case BLE_HCI_STATUS_CODE_LMP_RESPONSE_TIMEOUT: + retval << "BLE_HCI_STATUS_CODE_LMP_RESPONSE_TIMEOUT"; + break; +#if NRF_SD_BLE_API > 3 + case BLE_HCI_STATUS_CODE_LMP_ERROR_TRANSACTION_COLLISION: + retval << "BLE_HCI_STATUS_CODE_LMP_ERROR_TRANSACTION_COLLISION"; + break; +#endif + case BLE_HCI_STATUS_CODE_LMP_PDU_NOT_ALLOWED: + retval << "BLE_HCI_STATUS_CODE_LMP_PDU_NOT_ALLOWED"; + break; + case BLE_HCI_INSTANT_PASSED: + retval << "BLE_HCI_INSTANT_PASSED"; + break; + case BLE_HCI_PAIRING_WITH_UNIT_KEY_UNSUPPORTED: + retval << "BLE_HCI_PAIRING_WITH_UNIT_KEY_UNSUPPORTED"; + break; + case BLE_HCI_DIFFERENT_TRANSACTION_COLLISION: + retval << "BLE_HCI_DIFFERENT_TRANSACTION_COLLISION"; + break; +#if NRF_SD_BLE_API > 3 + case BLE_HCI_PARAMETER_OUT_OF_MANDATORY_RANGE: + retval << "BLE_HCI_PARAMETER_OUT_OF_MANDATORY_RANGE"; + break; +#endif + case BLE_HCI_CONTROLLER_BUSY: + retval << "BLE_HCI_CONTROLLER_BUSY"; + break; + case BLE_HCI_CONN_INTERVAL_UNACCEPTABLE: + retval << "BLE_HCI_CONN_INTERVAL_UNACCEPTABLE"; + break; + case BLE_HCI_DIRECTED_ADVERTISER_TIMEOUT: + retval << "BLE_HCI_DIRECTED_ADVERTISER_TIMEOUT"; + break; + case BLE_HCI_CONN_TERMINATED_DUE_TO_MIC_FAILURE: + retval << "BLE_HCI_CONN_TERMINATED_DUE_TO_MIC_FAILURE"; + break; + case BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED: + retval << "BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED"; + break; + default: + retval << "UNKNOWN"; + break; + } + + return retval.str(); +} + +std::string asText(const ble_gap_evt_passkey_display_t &passkeyDisplay) +{ + std::stringstream retval; + std::stringstream passkey; + + for (auto i = 0; i < 6; i++) + { + passkey << static_cast(passkeyDisplay.passkey[i]); + } + + retval << "passkey: '" << passkey.str() << "'"; + retval << " match_request:" << (passkeyDisplay.match_request ? "yes" : "no"); + return retval.str(); +} + +std::string asText(const ble_gap_enc_info_t &encryptionInfo) +{ + std::stringstream retval; + std::vector key(encryptionInfo.ltk, encryptionInfo.ltk + encryptionInfo.ltk_len); + + retval << "ltk:" << asHex(key) << " "; + retval << "lesc:" << (encryptionInfo.lesc ? "yes" : "no") << " "; + retval << "auth:" << (encryptionInfo.auth ? "yes" : "no") << " "; + retval << "ltk_len:" << static_cast(encryptionInfo.ltk_len); + return retval.str(); +} + +std::string asText(const ble_gap_conn_params_t &connectionParams) +{ + std::stringstream retval; + + retval << "conn_sup_timeout:" << static_cast(connectionParams.conn_sup_timeout) + << " "; + retval << "max_conn_interval:" << static_cast(connectionParams.max_conn_interval) + << " "; + retval << "min_conn_interval:" << static_cast(connectionParams.min_conn_interval) + << " "; + retval << "slave_latency:" << static_cast(connectionParams.slave_latency); + + return retval.str(); +} + +std::string asText(const ble_gap_evt_connected_t &connected) +{ + std::stringstream retval; + + retval << "peer_addr:[" << asText(connected.peer_addr) << "] "; +#if NRF_SD_BLE_API == 2 + retval << "own_addr:[" << asText(connected.own_addr) << "] "; +#endif // NRF_SD_BLE_API == 2 + retval << "role:" << roleToString(connected.role) << " "; +#if NRF_SD_BLE_API == 2 + retval << "irk_match:" << (connected.irk_match ? "yes" : "no") << " "; + retval << "irk_match_idx:" << static_cast(connected.irk_match_idx) << " "; +#endif // NRF_SD_BLE_API == 2 + retval << "conn_params:[" << asText(connected.conn_params) << "]"; + return retval.str(); +} + +std::string asText(const ble_gap_evt_disconnected_t &disconnected) +{ + std::stringstream retval; + + retval << "reason:" << hciStatusCodeToString(disconnected.reason); + return retval.str(); +} + +std::string asText(const ble_gap_evt_scan_req_report_t &scanReqReport) +{ + std::stringstream retval; + + retval << "peer_addr:[" << asText(scanReqReport.peer_addr) << "]"; + retval << " rssi:" << static_cast(scanReqReport.rssi); + return retval.str(); +} + +std::string asText(const ble_gap_sec_kdist_t &keyDist) +{ + std::stringstream retval; + retval << "enc:" << (keyDist.enc ? "yes" : "no") << " "; + retval << "id:" << (keyDist.id ? "yes" : "no") << " "; + retval << "sign:" << (keyDist.sign ? "yes" : "no") << " "; + retval << "link:" << (keyDist.link ? "yes" : "no"); + return retval.str(); +} + +std::string asText(const ble_gap_evt_sec_request_t &securityRequest) +{ + std::stringstream retval; + retval << "bond:" << (securityRequest.bond ? "yes" : "no") << " "; + retval << "mitm:" << (securityRequest.mitm ? "yes" : "no") << " "; + retval << "lesc:" << (securityRequest.lesc ? "yes" : "no") << " "; + retval << "keypress:" << (securityRequest.keypress ? "yes" : "no"); + return retval.str(); +} + +std::string asText(const ble_gap_evt_sec_params_request_t &securityParamsRequest) +{ + std::stringstream retval; + retval << "peer_params:["; + retval << "bond:" << (securityParamsRequest.peer_params.bond ? "yes" : "no") << " "; + retval << "mitm:" << (securityParamsRequest.peer_params.mitm ? "yes" : "no") << " "; + retval << "lesc:" << (securityParamsRequest.peer_params.lesc ? "yes" : "no") << " "; + retval << "keypress:" << (securityParamsRequest.peer_params.keypress ? "yes" : "no") << " "; + retval << "io_caps:" << testutil::ioCapsToString(securityParamsRequest.peer_params.io_caps) + << " "; + retval << "oob:" << (securityParamsRequest.peer_params.oob ? "yes" : "no") << " "; + retval << "min_key_size:" + << static_cast(securityParamsRequest.peer_params.min_key_size) << " "; + retval << "max_key_size:" + << static_cast(securityParamsRequest.peer_params.max_key_size) << " "; + retval << "kdist_own:[" << asText(securityParamsRequest.peer_params.kdist_own) << "] "; + retval << "kdist_peer:[" << asText(securityParamsRequest.peer_params.kdist_peer) << "]"; + retval << "]"; + return retval.str(); +} + +std::string asText(const ble_gap_evt_auth_key_request_t &authKeyRequest) +{ + std::stringstream retval; + retval << "key_type: "; + + switch (authKeyRequest.key_type) + { + case BLE_GAP_AUTH_KEY_TYPE_NONE: + retval << "BLE_GAP_AUTH_KEY_TYPE_NONE"; + break; + case BLE_GAP_AUTH_KEY_TYPE_PASSKEY: + retval << "BLE_GAP_AUTH_KEY_TYPE_PASSKEY"; + break; + case BLE_GAP_AUTH_KEY_TYPE_OOB: + retval << "BLE_GAP_AUTH_KEY_TYPE_OOB"; + break; + default: + retval << "0x" << asHex(authKeyRequest.key_type); + break; + } + return retval.str(); +} + +std::string asText(const ble_gap_conn_sec_mode_t &connSecMode) +{ + std::stringstream retval; + + retval << "sm:" << static_cast(connSecMode.sm) + << " lv:" << static_cast(connSecMode.lv) << " description:'"; + + if (connSecMode.sm == 0 && connSecMode.lv == 0) + { + retval << "Security Mode 0 Level 0: No access permissions at all"; + } + else if (connSecMode.sm == 1 && connSecMode.lv == 1) + { + retval << "No security is needed (aka open link)"; + } + else if (connSecMode.sm == 1 && connSecMode.lv == 2) + { + retval << "Encrypted link required, MITM protection not necessary"; + } + else if (connSecMode.sm == 1 && connSecMode.lv == 3) + { + retval << "MITM protected encrypted link required"; + } + else if (connSecMode.sm == 1 && connSecMode.lv == 4) + { + retval << "LESC MITM protected encrypted link required"; + } + else if (connSecMode.sm == 2 && connSecMode.lv == 1) + { + retval << "Signing or encryption required, MITM protection not necessary"; + } + else if (connSecMode.sm == 2 && connSecMode.lv == 2) + { + retval << "MITM protected signing required, unless link is MITM protected encrypted"; + } + + retval << "'"; + return retval.str(); +} + +std::string asText(const ble_gap_conn_sec_t &connSec) +{ + std::stringstream retval; + retval << "sec_mode:[" << asText(connSec.sec_mode) << "] "; + retval << "encr_key_size:" << static_cast(connSec.encr_key_size); + return retval.str(); +} + +std::string asText(const ble_gap_evt_rssi_changed_t &rssiChanged) +{ + std::stringstream retval; + retval << "rssi:" << static_cast(rssiChanged.rssi) << "dBm"; +#if NRF_SD_BLE_API >= 6 + retval << " ch_index:" << static_cast(rssiChanged.ch_index); +#endif + return retval.str(); +} + +std::string asText(const ble_gap_lesc_p256_pk_t &lsecP256Pk) +{ + std::stringstream retval; + std::vector key(lsecP256Pk.pk, lsecP256Pk.pk + 64); + retval << "key:" << asHex(key); + return retval.str(); +} + +std::string asText(const ble_gap_evt_key_pressed_t &keyPressed) +{ + std::stringstream retval; + retval << "pk_not:" << keyPressed.kp_not; // TODO: convert to string + return retval.str(); +} + +std::string asText(const std::vector &data) +{ + std::stringstream retval; + + for (auto v : data) + { + if (std::isprint(v)) + { + retval << v; + } + } + + return retval.str(); +} + +std::string asText(const ble_gap_evt_timeout_t &timeout) +{ + std::stringstream retval; + retval << "src:" << timeout.src; // TODO: convert to string + return retval.str(); +} + +#if NRF_SD_BLE_API == 6 +std::string asText(const ble_gap_adv_report_type_t &reportType) +{ + std::stringstream retval; + + if (reportType.connectable) + { + retval << " connectable:" << (reportType.connectable ? "yes" : "no"); + } + + if (reportType.scannable) + { + retval << " scannable:" << (reportType.scannable ? "yes" : "no"); + } + + if (reportType.directed) + { + retval << " directed:" << (reportType.directed ? "yes" : "no"); + } + + if (reportType.scan_response) + { + retval << " scan_response:" << (reportType.scan_response ? "yes" : "no"); + } + + if (reportType.extended_pdu) + { + retval << " extended_pdu:" << (reportType.extended_pdu ? "yes" : "no"); + } + + retval << " status:"; + + switch (reportType.status) + { + case BLE_GAP_ADV_DATA_STATUS_COMPLETE: + retval << "COMPLETE"; + break; + case BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA: + retval << "INCOMPLETE_MORE_DATA"; + break; + case BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_TRUNCATED: + retval << "INCOMPLETE_TRUNCATED"; + break; + case BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MISSED: + retval << "INCOMPLETE_MISSED"; + break; + default: + retval << "UNKNOWN(" << std::hex << static_cast(reportType.status) << ")"; + break; + } + + return retval.str(); +} + +std::string asText(const ble_gap_aux_pointer_t &auxPointer) +{ + std::stringstream retval; + retval << "aux_offset:" << static_cast(auxPointer.aux_offset); + retval << " aux_phy:" << static_cast(auxPointer.aux_phy); + return retval.str(); +} + +std::string asText(const ble_gap_phys_t &phys) +{ + std::stringstream retval; + retval << "tx_phys:" << static_cast(phys.tx_phys); + retval << " rx_phys:" << static_cast(phys.rx_phys); + return retval.str(); +} + +std::string asText(const ble_gap_evt_phy_update_request_t &phyUpdateRequest) +{ + std::stringstream retval; + retval << "peer_preferred_phys:[" << asText(phyUpdateRequest.peer_preferred_phys) << "]"; + return retval.str(); +} + +std::string asText(const ble_gap_evt_phy_update_t &phyUpdate) +{ + std::stringstream retval; + retval << "status: " << static_cast(phyUpdate.status); + retval << " tx_phy:" << static_cast(phyUpdate.tx_phy); + retval << " rx_phy:" << static_cast(phyUpdate.rx_phy); + return retval.str(); +} + +std::string asText(const ble_gap_data_length_params_t &dataLengthParams) +{ + std::stringstream retval; + retval << "max_tx_octets: " << static_cast(dataLengthParams.max_tx_octets); + retval << "max_rx_octets: " << static_cast(dataLengthParams.max_rx_octets); + retval << "max_tx_time_us: " << static_cast(dataLengthParams.max_tx_time_us); + retval << "max_rx_time_us: " << static_cast(dataLengthParams.max_rx_time_us); + return retval.str(); +} + +std::string asText(const ble_gap_evt_data_length_update_request_t &dataLengthUpdateRequest) +{ + std::stringstream retval; + retval << "peer_params:[" << asText(dataLengthUpdateRequest.peer_params) << "]"; + return retval.str(); +} + +std::string asText(const ble_gap_evt_data_length_update_t &dataLengthUpdate) +{ + std::stringstream retval; + retval << "effective_params:[" << asText(dataLengthUpdate.effective_params) << "]"; + return retval.str(); +} + +std::string asText(const ble_gap_evt_qos_channel_survey_report_t &qosChannelSurveyReport) +{ + std::stringstream retval; + std::vector channels; + channels.assign(qosChannelSurveyReport.channel_energy, + qosChannelSurveyReport.channel_energy + BLE_GAP_CHANNEL_COUNT); + + retval << "channel_energy:"; + for (auto channel : channels) + { + retval << " " << static_cast(channel); + } + + return retval.str(); +} + +std::string asText(const ble_data_t &data) +{ + std::stringstream retval; + + std::vector wrappedData; + wrappedData.assign(data.p_data, data.p_data + data.len); + + retval << "data:" << asHex(wrappedData); + retval << " len:" << static_cast(data.len); + + return retval.str(); +} + +std::string asText(const ble_gap_adv_data_t &advData) +{ + std::stringstream retval; + + retval << "adv_data:[" << asText(advData.adv_data) << "]"; + retval << " scan_rsp_data:[" << asText(advData.scan_rsp_data) << "]"; + return retval.str(); +} + +std::string asText(const ble_gap_evt_adv_set_terminated_t &advSetTerminated) +{ + std::stringstream retval; + retval << "reason:" << static_cast(advSetTerminated.reason); + retval << " adv_handle:" << asHex(advSetTerminated.adv_handle); + retval << " num_completed_adv_events:" + << static_cast(advSetTerminated.num_completed_adv_events); + retval << " adv_data:[" << asText(advSetTerminated.adv_data) << "]"; + + return retval.str(); +} + +#endif // NRF_SD_BLE_API == 6 + +std::string asText(const ble_gap_evt_adv_report_t &advReport) +{ + std::stringstream retval; + + retval << "peer_addr:[" << asText(advReport.peer_addr) << "]"; +#if NRF_SD_BLE_API == 6 + std::vector data(advReport.data.p_data, advReport.data.p_data + advReport.data.len); + retval << " type:[" << asText(advReport.type) << "]"; +#else + std::vector data(advReport.data, advReport.data + advReport.dlen); + retval << " type:" << asHex(advReport.type); +#endif + +#if NRF_SD_BLE_API == 6 + if (advReport.type.directed) + { + retval << " direct_addr:[" << asText(advReport.direct_addr) << "]"; + } + + retval << " primary_phy:" << static_cast(advReport.primary_phy); + retval << " secondary_phy:" << static_cast(advReport.secondary_phy); + + if (advReport.tx_power != BLE_GAP_POWER_LEVEL_INVALID) + { + retval << " tx_power:" << static_cast(advReport.tx_power); + } +#endif + + retval << " rssi:" << static_cast(advReport.rssi) << "dBm"; + +#if NRF_SD_BLE_API == 6 + retval << " ch_index:" << std::hex << static_cast(advReport.ch_index); + + if (advReport.set_id != BLE_GAP_ADV_REPORT_SET_ID_NOT_AVAILABLE) + { + retval << " set_id:" << std::hex << static_cast(advReport.set_id); + } + + if (advReport.data_id != BLE_GAP_ADV_REPORT_SET_ID_NOT_AVAILABLE) + { + retval << " data_id:" << std::hex << static_cast(advReport.data_id); + } + + if (advReport.type.status == BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA) + { + retval << " aux_pointer:[" << asText(advReport.aux_pointer) << "]"; + } +#endif + +#if NRF_SD_BLE_API < 6 + retval << " scan_rsp:" << (advReport.scan_rsp ? "yes" : "no"); +#endif + + retval << " data:" << asHex(data) << "/" << asText(data); + + return retval.str(); +} + +std::string asText(const ble_gap_evt_lesc_dhkey_request_t &dhkeyRequest) +{ + std::stringstream retval; + retval << "p_pk_peer:[" + << ((dhkeyRequest.p_pk_peer != nullptr) ? asText(*dhkeyRequest.p_pk_peer) : "NULL") + << "]"; + retval << " oobd_req:" << (dhkeyRequest.oobd_req ? "yes" : "no"); + return retval.str(); +} + +std::string asText(const ble_gap_master_id_t &masterId) +{ + std::stringstream retval; + std::vector rand(masterId.rand, masterId.rand + sizeof(masterId.rand)); + retval << "ediv:0x" << asHex(masterId.ediv); + retval << " rand:0x" << asHex(rand); + return retval.str(); +} + +std::string asText(const ble_gap_evt_sec_info_request_t &secInfoRequest) +{ + std::stringstream retval; + retval << "peer_addr:[" << asText(secInfoRequest.peer_addr) << "]"; + retval << " enc_info:" << (secInfoRequest.enc_info ? "required" : "not_required"); + retval << " id_info:" + << (secInfoRequest.id_info ? "identity_information_required" + : "identity_information_not_required"); + retval << " master_id:[" << asText(secInfoRequest.master_id) << "]"; + retval << " sign_info:" << secInfoRequest.sign_info + << (secInfoRequest.sign_info ? "signing_information_required" + : "signing_information_not_required"); + return retval.str(); +} + +std::string asText(const ble_gap_evt_conn_sec_update_t &connSecUpdate) +{ + std::stringstream retval; + retval << "conn_sec:["; + retval << asText(connSecUpdate.conn_sec); + retval << "]"; + return retval.str(); +} + +std::string asText(const ble_gap_sec_levels_t &secLevels) +{ + std::stringstream retval; + retval << "lv1:" << (secLevels.lv1 ? "yes" : "no"); + retval << " lv2:" << (secLevels.lv2 ? "yes" : "no"); + retval << " lv3:" << (secLevels.lv3 ? "yes" : "no"); + retval << " lv4:" << (secLevels.lv4 ? "yes" : "no"); + return retval.str(); +} + +std::string asText(const ble_gap_evt_auth_status_t &authStatus) +{ + std::stringstream retval; + retval << "auth_status:" << gattAuthStatusToString(authStatus.auth_status) << " "; + retval << "error_src:" << gattAuthErrorSrcToString(authStatus.error_src) << " "; + retval << "bonded:" << (authStatus.bonded ? "yes" : "no") << " "; + retval << "sm1_levels:[" << asText(authStatus.sm1_levels) << "] "; + retval << "sm2_levels:[" << asText(authStatus.sm2_levels) << "] "; + retval << "kdist_own:[" << asText(authStatus.kdist_own) << "] "; + retval << "kdist_peer:[" << asText(authStatus.kdist_peer) << "]"; + return retval.str(); +} + +/** + * @brief Function that convert a GATT status code to string representation + * + * param[in] code code + * + * @return textual representation of the code + */ +std::string gattStatusToString(const uint16_t code) +{ + std::stringstream retval; + retval << "GATT status code: 0x" << std::setfill('0') << std::setw(4) << std::hex + << (uint32_t)code << "."; + return retval.str(); +} + +// Operator overloading for common types used +std::string asText(const sd_rpc_app_status_t &status) +{ + switch (status) + { + case PKT_SEND_MAX_RETRIES_REACHED: + return "PKT_SEND_MAX_RETRIES_REACHED"; + case PKT_UNEXPECTED: + return "PKT_UNEXPECTED"; + case PKT_ENCODE_ERROR: + return "PKT_ENCODE_ERROR"; + case PKT_DECODE_ERROR: + return "PKT_DECODE_ERROR"; + case PKT_SEND_ERROR: + return "PKT_SEND_ERROR"; + case IO_RESOURCES_UNAVAILABLE: + return "IO_RESOURCES_UNAVAILABLE"; + case RESET_PERFORMED: + return "RESET_PERFORMED"; + case CONNECTION_ACTIVE: + return "CONNECTION_ACTIVE"; + default: + return "UNKNOWN"; + } +} + +std::string asText(const uint16_t &value) +{ + std::stringstream retval; + retval << "0x" << std::setfill('0') << std::setw(4) << std::hex << (uint32_t)value; + return retval.str(); +} + +std::string asText(const uint8_t &value) +{ + std::stringstream retval; + retval << "0x" << std::setfill('0') << std::setw(2) << std::hex << (uint32_t)value; + return retval.str(); +} + +std::string asText(const ble_uuid_t &uuid) +{ + std::stringstream retval; + retval << "uuid:[type: " << asText(uuid.type) << ", uuid: " << asText(uuid.uuid) << "]"; + return retval.str(); +} + +std::string asText(const ble_gattc_char_t &gattc_char) +{ + std::stringstream retval; + retval << "characteristic:[" + << "handle_decl: " << asText(gattc_char.handle_decl) + << ", handle_value: " << asText(gattc_char.handle_value) + << ", uuid: " << asText(gattc_char.uuid) << "]"; + + return retval.str(); +} + +std::string asText(const ble_gattc_handle_range_t &gattc_handle_range) +{ + std::stringstream retval; + retval << "handle range:[" + << "start: " << asText(gattc_handle_range.start_handle) + << ", end: " << asText(gattc_handle_range.end_handle) << "]"; + return retval.str(); +} + +std::string asText(const ble_gattc_desc_t &gattc_desc) +{ + std::stringstream retval; + retval << "descriptor:[" + << "handle: " << asText(gattc_desc.handle) << " " << asText(gattc_desc.uuid) << "]"; + return retval.str(); +} + +std::string eventIdAsText(const uint32_t eventId) +{ + static std::map eventIds = { + {// GAP Events + NAME_MAP_ENTRY(BLE_GAP_EVT_CONNECTED), + NAME_MAP_ENTRY(BLE_GAP_EVT_DISCONNECTED), + NAME_MAP_ENTRY(BLE_GAP_EVT_CONN_PARAM_UPDATE), + NAME_MAP_ENTRY(BLE_GAP_EVT_SEC_PARAMS_REQUEST), + NAME_MAP_ENTRY(BLE_GAP_EVT_SEC_INFO_REQUEST), + NAME_MAP_ENTRY(BLE_GAP_EVT_PASSKEY_DISPLAY), + NAME_MAP_ENTRY(BLE_GAP_EVT_KEY_PRESSED), + NAME_MAP_ENTRY(BLE_GAP_EVT_AUTH_KEY_REQUEST), + NAME_MAP_ENTRY(BLE_GAP_EVT_LESC_DHKEY_REQUEST), + NAME_MAP_ENTRY(BLE_GAP_EVT_AUTH_STATUS), + NAME_MAP_ENTRY(BLE_GAP_EVT_CONN_SEC_UPDATE), + NAME_MAP_ENTRY(BLE_GAP_EVT_TIMEOUT), + NAME_MAP_ENTRY(BLE_GAP_EVT_RSSI_CHANGED), + NAME_MAP_ENTRY(BLE_GAP_EVT_ADV_REPORT), + NAME_MAP_ENTRY(BLE_GAP_EVT_SEC_REQUEST), + NAME_MAP_ENTRY(BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST), + NAME_MAP_ENTRY(BLE_GAP_EVT_SCAN_REQ_REPORT), +#if NRF_SD_BLE_API >= 6 + NAME_MAP_ENTRY(BLE_GAP_EVT_PHY_UPDATE_REQUEST), + NAME_MAP_ENTRY(BLE_GAP_EVT_PHY_UPDATE), + NAME_MAP_ENTRY(BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST), + NAME_MAP_ENTRY(BLE_GAP_EVT_DATA_LENGTH_UPDATE), + NAME_MAP_ENTRY(BLE_GAP_EVT_QOS_CHANNEL_SURVEY_REPORT), + NAME_MAP_ENTRY(BLE_GAP_EVT_ADV_SET_TERMINATED), +#endif // NRF_SD_BLE_API >= 6 + // GATTS events + NAME_MAP_ENTRY(BLE_GATTS_EVT_WRITE), + NAME_MAP_ENTRY(BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST), + NAME_MAP_ENTRY(BLE_GATTS_EVT_SYS_ATTR_MISSING), + NAME_MAP_ENTRY(BLE_GATTS_EVT_HVC), + NAME_MAP_ENTRY(BLE_GATTS_EVT_SC_CONFIRM), + NAME_MAP_ENTRY(BLE_GATTS_EVT_TIMEOUT), +#if NRF_SD_BLE_API >= 5 + NAME_MAP_ENTRY(BLE_GATTS_EVT_HVN_TX_COMPLETE), +#endif // NRF_SD_BLE_API >= 5 + // GATTS events + NAME_MAP_ENTRY(BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP), + NAME_MAP_ENTRY(BLE_GATTC_EVT_REL_DISC_RSP), + NAME_MAP_ENTRY(BLE_GATTC_EVT_CHAR_DISC_RSP), + NAME_MAP_ENTRY(BLE_GATTC_EVT_DESC_DISC_RSP), + NAME_MAP_ENTRY(BLE_GATTC_EVT_ATTR_INFO_DISC_RSP), + NAME_MAP_ENTRY(BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP), + NAME_MAP_ENTRY(BLE_GATTC_EVT_READ_RSP), + NAME_MAP_ENTRY(BLE_GATTC_EVT_CHAR_VALS_READ_RSP), + NAME_MAP_ENTRY(BLE_GATTC_EVT_WRITE_RSP), + NAME_MAP_ENTRY(BLE_GATTC_EVT_HVX) +#if NRF_SD_BLE_API >= 5 + , + NAME_MAP_ENTRY(BLE_GATTC_EVT_EXCHANGE_MTU_RSP), + NAME_MAP_ENTRY(BLE_GATTC_EVT_TIMEOUT), + NAME_MAP_ENTRY(BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE) +#endif // NRF_SD_BLE_API >= 5 + }}; + + std::stringstream retval; + + try + { + retval << eventIds.at(eventId) << "(0x" << asHex(eventId) << ")"; + } + catch (const std::out_of_range &) + { + retval << "UNKNOWN(0x" << asHex(eventId) << ")"; + } + + return retval.str(); +} + +std::string asText(const sd_rpc_log_severity_t &severity) +{ + switch (severity) + { + case SD_RPC_LOG_TRACE: + return "TRACE"; + case SD_RPC_LOG_DEBUG: + return "DEBUG"; + case SD_RPC_LOG_INFO: + return "INFO"; + case SD_RPC_LOG_WARNING: + return "WARNING"; + case SD_RPC_LOG_ERROR: + return "ERROR"; + case SD_RPC_LOG_FATAL: + return "FATAL"; + default: + return "UNKNOWN"; + }; +} + +sd_rpc_log_severity_t parseLogSeverity(const std::string &level) +{ + if (level == "trace") + { + return SD_RPC_LOG_TRACE; + } + else if (level == "debug") + { + return SD_RPC_LOG_DEBUG; + } + else if (level == "info") + { + return SD_RPC_LOG_INFO; + } + else if (level == "warning") + { + return SD_RPC_LOG_WARNING; + } + else if (level == "error") + { + return SD_RPC_LOG_ERROR; + } + else if (level == "fatal") + { + return SD_RPC_LOG_FATAL; + } + + std::stringstream ss; + ss << "Not able to parse '" << level << "' to be sd_rpc_log_severity_t."; + throw std::invalid_argument(ss.str()); +} +} // namespace testutil diff --git a/test/util/src/test_util_role.cpp b/test/util/src/test_util_role.cpp new file mode 100644 index 000000000..3698de062 --- /dev/null +++ b/test/util/src/test_util_role.cpp @@ -0,0 +1,19 @@ +#include "test_util_role.h" + +namespace testutil { + +std::ostream &operator<<(std::ostream &s, const Role &role) { + if (role == Role::Central) + { + s << "[central ]"; + } + else if (role == Role::Peripheral) + { s << "[peripheral]"; } + else + { s << "[unknown role]"; } + + return s; +} +} // namespace testutil + + diff --git a/test/util/src/virtual_uart.cpp b/test/util/src/virtual_uart.cpp new file mode 100644 index 000000000..68c59329b --- /dev/null +++ b/test/util/src/virtual_uart.cpp @@ -0,0 +1,215 @@ +#include "virtual_uart.h" + +#include "internal/log.h" +#include "sd_rpc_types.h" +#include "transport.h" + +#include +#include +#include +#include + +VirtualUart::VirtualUart(const std::string &name) + : Transport() + , name(name) + , isOpen(false) + , peer(nullptr) + , stopAtPktType(CONTROL_PKT_LAST) + , stoppedProcessing(false) +{} + +void VirtualUart::stopAt(control_pkt_type stopAtPktType_) +{ + stopAtPktType = stopAtPktType_; +} + +uint32_t VirtualUart::open(const status_cb_t &status_callback, const data_cb_t &data_callback, + const log_cb_t &log_callback) +{ + Transport::open(status_callback, data_callback, log_callback); + + if (peer == nullptr) + { + NRF_LOG("Peer port must be specified before calling open."); + return NRF_ERROR_INTERNAL; + } + + isOpen = true; + + outDataThread = std::thread([this]() { + while (isOpen && stoppedProcessing == false) + { + std::unique_lock lock(outDataMutex); + + if (outData.size() > 0) + { + std::for_each(outData.begin(), outData.end(), [&](std::vector data) { + // TODO: do a proper SLIP decoding later on in case header hits SLIP encoding + // rules + if (H5Transport::isResetPacket(data, 2)) + { + NRF_LOG("[" << name << "]" + << " Requested to send RESET, ignoring since a reset does not " + "make sense in this case."); + } + else + { + try + { + if (peer->isOpen) + { + peer->injectInData(data); + } + else + { + // TODO: report error back + } + } + catch (std::exception &e) + { + NRF_LOG("[" << name << "] " + << "error sending " << e.what()); + } + } + }); + outData.erase(outData.begin(), outData.end()); + } + + outDataAvailable.wait(lock, [&] { + return !(isOpen == true && outData.size() == 0 && stoppedProcessing == false); + }); + } + }); + + inDataThread = std::thread([this]() { + while (isOpen) + { + std::unique_lock lock(inDataMutex); + + if (inData.size() > 0) + { + std::for_each(inData.begin(), inData.end(), [&](std::vector data) { + // TODO: do a proper SLIP decoding later on in case + // TODO: header hits SLIP encoding rules + + if (H5Transport::isResetPacket(data, 2)) + { + NRF_LOG("[" << name << "] Received RESET, ignoring"); + } + else if (H5Transport::isSyncPacket(data, 5) && + stopAtPktType <= CONTROL_PKT_SYNC) + { + NRF_LOG("[" << name << "] Received SYNC ignored."); + stoppedProcessing = true; + outDataAvailable.notify_all(); + } + else if (H5Transport::isSyncResponsePacket(data, 5) && + stopAtPktType <= CONTROL_PKT_SYNC_RESPONSE) + { + NRF_LOG("[" << name << "] Received SYNC RESPONSE ignored."); + stoppedProcessing = true; + outDataAvailable.notify_all(); + } + else if (H5Transport::isSyncConfigPacket(data, 5) && + stopAtPktType <= CONTROL_PKT_SYNC_CONFIG) + { + NRF_LOG("[" << name << "] Received SYNC CONFIG ignored."); + stoppedProcessing = true; + outDataAvailable.notify_all(); + } + else if (H5Transport::isSyncConfigResponsePacket(data, 5) && + stopAtPktType <= CONTROL_PKT_SYNC_CONFIG_RESPONSE) + { + NRF_LOG("[" << name << "] Received SYNC CONFIG RESPONSE ignored."); + stoppedProcessing = true; + outDataAvailable.notify_all(); + } + else + { + try + { + if (upperDataCallback != nullptr) + { + upperDataCallback(data.data(), data.size()); + } + } + catch (std::exception &e) + { + NRF_LOG("[" << name << "]" << name + << "] error calling data callback: " << e.what()); + } + } + }); + inData.erase(inData.begin(), inData.end()); + } + + inDataAvailable.wait(lock, [&] { return !(isOpen == true && inData.size() == 0); }); + } + }); + + return NRF_SUCCESS; // TODO: take into account other return codes +} + +uint32_t VirtualUart::close() +{ + if (!isOpen) + return NRF_ERROR_INTERNAL; + + isOpen = false; + inDataAvailable.notify_all(); + outDataAvailable.notify_all(); + + if (outDataThread.joinable()) + { + outDataThread.join(); + } + + if (inDataThread.joinable()) + { + inDataThread.join(); + } + + if (upperLogCallback != nullptr) + { + std::stringstream message; + message << "serial port " << name << " closed."; + upperLogCallback(SD_RPC_LOG_INFO, message.str()); + } + + return NRF_SUCCESS; // TODO: take into account other return codes +} + +uint32_t VirtualUart::send(const std::vector &data) +{ + std::unique_lock lock(outDataMutex); + + if (!isOpen) + { + return NRF_ERROR_INTERNAL; + } + + outData.push_back(data); + lock.unlock(); + outDataAvailable.notify_all(); + + return NRF_SUCCESS; // TODO: take into account other states +} + +void VirtualUart::setPeer(VirtualUart *connectingPeer) +{ + peer = connectingPeer; +} + +// Used by peer to inject data into its incoming data pipe +void VirtualUart::injectInData(const std::vector data) +{ + std::unique_lock lock(inDataMutex); + inData.push_back(data); + lock.unlock(); + inDataAvailable.notify_all(); +} + +VirtualUart::~VirtualUart() +{ + VirtualUart::close(); +} diff --git a/test/virtual_uart.h b/test/virtual_uart.h deleted file mode 100644 index a7f78bcc4..000000000 --- a/test/virtual_uart.h +++ /dev/null @@ -1,228 +0,0 @@ -#ifndef VIRTUAL_UART_HPP__ -#define VIRTUAL_UART_HPP__ - -#include "internal/log.h" - -#include -#include -#include -#include -#include - -class VirtualUart : public Transport -{ -private: - std::string name; - bool isOpen; - VirtualUart* peer; - - std::mutex outDataMutex; - std::vector> outData; - std::condition_variable outDataAvailable; - std::thread outDataThread; - - std::mutex inDataMutex; - std::vector> inData; - std::condition_variable inDataAvailable; - std::thread inDataThread; - - control_pkt_type stopAtPktType; - - bool stoppedProcessing; - -public: - VirtualUart() = delete; - - VirtualUart(const std::string &name) : - Transport(), name(name), isOpen(false), peer(nullptr), stopAtPktType(CONTROL_PKT_LAST), stoppedProcessing(false) - { - } - - void stopAt(control_pkt_type stopAtPktType_) - { - stopAtPktType = stopAtPktType_; - } - - uint32_t open(status_cb_t status_callback, data_cb_t data_callback, log_cb_t log_callback) override - { - Transport::open(status_callback, data_callback, log_callback); - - if (peer == nullptr) - { - NRF_LOG("Peer port must be specified before calling open."); - return NRF_ERROR_INTERNAL; - } - - isOpen = true; - - outDataThread = std::thread([this]() - { - while (isOpen && stoppedProcessing == false) - { - std::unique_lock lock(outDataMutex); - - if (outData.size() > 0) - { - std::for_each(outData.begin(), outData.end(), [&](std::vector data) - { - // TODO: do a proper SLIP decoding later on in case header hits SLIP encoding rules - if (H5Transport::isResetPacket(data, 2)) - { - NRF_LOG("[" << name << "]" << " Requested to send RESET, ignoring since a reset does not make sense in this case."); - } - else - { - try - { - if (peer->isOpen) - { - peer->injectInData(data); - } - else - { - // TODO: report error back - } - } - catch (std::exception &e) - { - NRF_LOG("[" << name << "] " << "error sending " << e.what()); - } - } - }); - outData.erase(outData.begin(), outData.end()); - } - - outDataAvailable.wait(lock, [&] { return !(isOpen == true && outData.size() == 0 && stoppedProcessing == false); }); - } - }); - - inDataThread = std::thread([this]() - { - while (isOpen) - { - std::unique_lock lock(inDataMutex); - - if (inData.size() > 0) - { - std::for_each(inData.begin(), inData.end(), [&](std::vector data) - { - // TODO: do a proper SLIP decoding later on in case header hits SLIP encoding rules - - if (H5Transport::isResetPacket(data, 2)) - { - NRF_LOG("[" << name << "] Received RESET, ignoring"); - } - else if (H5Transport::isSyncPacket(data, 5) && stopAtPktType <= CONTROL_PKT_SYNC) - { - NRF_LOG("[" << name << "] Received SYNC ignored."); - stoppedProcessing = true; - outDataAvailable.notify_all(); - } - else if (H5Transport::isSyncResponsePacket(data, 5) && stopAtPktType <= CONTROL_PKT_SYNC_RESPONSE) - { - NRF_LOG("[" << name << "] Received SYNC RESPONSE ignored."); - stoppedProcessing = true; - outDataAvailable.notify_all(); - } - else if (H5Transport::isSyncConfigPacket(data, 5) && stopAtPktType <= CONTROL_PKT_SYNC_CONFIG) - { - NRF_LOG("[" << name << "] Received SYNC CONFIG ignored."); - stoppedProcessing = true; - outDataAvailable.notify_all(); - } - else if (H5Transport::isSyncConfigResponsePacket(data, 5) && stopAtPktType <= CONTROL_PKT_SYNC_CONFIG_RESPONSE) - { - NRF_LOG("[" << name << "] Received SYNC CONFIG RESPONSE ignored."); - stoppedProcessing = true; - outDataAvailable.notify_all(); - } - else - { - try - { - if (upperDataCallback != nullptr) - { - upperDataCallback(data.data(), data.size()); - } - } - catch (std::exception &e) - { - NRF_LOG("[" << name << "]" << name << "] error calling data callback: " << e.what()); - } - } - }); - inData.erase(inData.begin(), inData.end()); - } - - inDataAvailable.wait(lock, [&] { return !(isOpen == true && inData.size() == 0); }); - } - }); - - return NRF_SUCCESS; // TODO: take into account other return codes - } - - uint32_t close() override - { - if (!isOpen) return NRF_ERROR_INTERNAL; - - isOpen = false; - inDataAvailable.notify_all(); - outDataAvailable.notify_all(); - - if (outDataThread.joinable()) - { - outDataThread.join(); - } - - if (inDataThread.joinable()) - { - inDataThread.join(); - } - - if (upperLogCallback != nullptr) - { - std::stringstream message; - message << "serial port " << name << " closed."; - upperLogCallback(SD_RPC_LOG_INFO, message.str()); - } - - return NRF_SUCCESS; // TODO: take into account other return codes - } - - uint32_t send(const std::vector& data) override - { - std::unique_lock lock(outDataMutex); - - if (!isOpen) - { - return NRF_ERROR_INTERNAL; - } - - outData.push_back(data); - lock.unlock(); - outDataAvailable.notify_all(); - - return NRF_SUCCESS; // TODO: take into account other states - } - - void setPeer(VirtualUart* connectingPeer) - { - peer = connectingPeer; - } - - // Used by peer to inject data into its incoming data pipe - void injectInData(const std::vector data) - { - std::unique_lock lock(inDataMutex); - inData.push_back(data); - lock.unlock(); - inDataAvailable.notify_all(); - } - - ~VirtualUart() override - { - close(); - } -}; - -#endif // VIRTUAL_UART_HPP__ \ No newline at end of file From 9faba69eafc122410b981f4aeede0b6ea92b2158 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ken=20A=2E=20Rederg=C3=A5rd?= <64542+kenr@users.noreply.github.com> Date: Thu, 13 Dec 2018 16:49:57 +0100 Subject: [PATCH 02/32] Fix/update docs (#177) * Update to new doc-center URI, pull in v2.3.2 text --- README.md | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 18f0d0ff3..c5d19f4a7 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ ## Overview -`pc-ble-driver` consists of a set of static and shared libraries that provide [SoftDevice](http://infocenter.nordicsemi.com/topic/com.nordic.infocenter.softdevices52/dita/nrf52/softdevices.html?cp=2_3) functionality to the application via serial port communication with an nRF5 connectivity chip running the SoftDevice and connectivity software, included as a single .hex file [here](./hex/). For more information on SoftDevice serialization see [Serialization](http://infocenter.nordicsemi.com/topic/com.nordic.infocenter.sdk5.v14.0.0/lib_serialization.html?cp=4_0_0_3_33). +`pc-ble-driver` consists of a set of static and shared libraries that provide [SoftDevice](https://www.nordicsemi.com/DocLib/Content/SoftDevice_API_Doc/S140/v6-1-0/modules) functionality to the application via serial port communication with an nRF5 connectivity chip running the SoftDevice and connectivity software, included as a single .hex file [here](./hex/). For more information on SoftDevice serialization see [Serialization](https://www.nordicsemi.com/en/DocLib/Content/SDK_Doc/nRF5_SDK/v15-2-0/lib_serialization). The C/C++ libraries can be interfaced with directly, but are also provided as higher-level bindings that ease development at the cost of reduced control (acceptable in most cases): @@ -42,7 +42,7 @@ The C/C++ libraries can be interfaced with directly, but are also provided as hi ## Architecture -![Architecture](https://infocenter.nordicsemi.com/topic/com.nordic.infocenter.sdk5.v14.0.0/architecture_overview_serialization.svg) +![Architecture](https://www.nordicsemi.com/en/DocLib/Content/SDK_Doc/nRF5_SDK/v15-2-0/-/media/0905BE636D5E4B27B19F4F179B241DB8.ashx) Where the 'Application chip' is just generic hardware (i.e. a Windows, Linux or macOS device), although it could also be an Arduino or Raspberry Pi for example. @@ -507,6 +507,7 @@ Follow the steps to install dependencies on a specific platform: ## Programming connectivity HEX files +### SEGGER J-Link-OB based kits [Go to install tools](#Installing-tools) if the nRF5x Command-Line Tools have not been installed yet. To use this library you will need to program the connectivity firmware on a nRF5x IC @@ -519,18 +520,28 @@ Use [nRF5x Command-Line Tools](#Installing-tools) to erase and program the IC: Alternatively, use [nRF Connect Programmer](https://github.com/NordicSemiconductor/pc-nrfconnect-programmer) to erase and program the IC. +### Nordic USB based kits + +#### Installing drivers and tools +Some kits, like the pca10059 nRF52 dongle, do not have onboard debugger and will have to be programmed via serial DFU. +On Windows, device drivers are required for the kits to be detected correctly by the operating system. To install the required drivers, please make sure you have the latest [nRF Connect for Desktop](http://www.nordicsemi.com/eng/Products/Bluetooth-low-energy/nRF-Connect-for-desktop) installed. + +#### Programming the connectivity firmware via serial DFU + +Programming the connectivity firmware via serial DFU can be done from command line or from nRF Connect for Desktop. + +##### Programming from command line with nrfutil + +Device Firmware Upgrade with [nrfutil](https://www.nordicsemi.com/DocLib/Content/User_Guides/nrfutil/latest/UG/nrfutil/nrfutil_dfu_serial_usb) is normally done in two steps: 1: generating the DFU zip package, and 2: performing the DFU procedure. A DFU zip package has been pre-made and is included in this repository. To run the DFU procedure with nrfutil with the pre-made DFU package: + + nrfutil dfu usb_serial -pkg connectivity_x.x.x_usb_with_s_
.._dfu_pkg.zip -p + --- ## Examples The [examples](./examples) serve as a great starting point for development with `pc-ble-driver`. Examples include a [heart rate monitor](./examples/heart_rate_monitor/) (BLE peripheral) and [heart rate collector](./examples/heart_rate_collector/) (BLE master) and show the basic structure of an application built on `pc-ble-driver`. -Now that you have successfully built and installed `pc-ble-driver`, you are ready to run the examples in `pc-ble-driver/examples/`. First verify that the static and shared libraries exist in the directory the examples expect them to be in. - - $ cd pc-ble-driver/ - $ ls build/ - > libpc_ble_driver_static_sd_api_v2.a libpc_ble_driver_shared_sd_api_v2.dylib libpc_ble_driver_static_sd_api_v5.a libpc_ble_driver_shared_sd_api_v5.dylib test_uart ... - To quickly get the examples up and running, see [examples/README.md](./examples/README.md). ## Known issues From f7afa8de549ac92accf59b8ba4c6a10c90174f3c Mon Sep 17 00:00:00 2001 From: mathiasap Date: Fri, 14 Dec 2018 10:26:23 +0100 Subject: [PATCH 03/32] Changed connectivity filename for tests (#178) --- test/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 65a728dc1..dd7eac548 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -38,7 +38,7 @@ file(TO_NATIVE_PATH "${CONNECTIVITY_ROOT}/sd_api_v3/connectivity_${CONNECTIVITY_ file(TO_NATIVE_PATH "${CONNECTIVITY_ROOT}/sd_api_v5/connectivity_${CONNECTIVITY_VERSION}_1m_with_s132_5.1.0.hex" SD_API_V5_S132_HEX) file(TO_NATIVE_PATH "${CONNECTIVITY_ROOT}/sd_api_v6/connectivity_${CONNECTIVITY_VERSION}_1m_with_s132_6.1.0.hex" SD_API_V6_S132_HEX) file(TO_NATIVE_PATH "${CONNECTIVITY_ROOT}/sd_api_v6/connectivity_${CONNECTIVITY_VERSION}_1m_with_s140_6.1.0.hex" SD_API_V6_S140_HEX) -file(TO_NATIVE_PATH "${CONNECTIVITY_ROOT}/sd_api_v6/connectivity_${CONNECTIVITY_VERSION}_1m_with_s140_usb_6.1.0.hex" SD_API_V6_S140_PCA10056_USB_HEX) +file(TO_NATIVE_PATH "${CONNECTIVITY_ROOT}/sd_api_v6/connectivity_${CONNECTIVITY_VERSION}_usb_with_s140_6.1.0.hex" SD_API_V6_S140_PCA10056_USB_HEX) function(parse_device_id device_id parse_error segger_sn serial_port) set(INVALID_FORMAT_MESSAGE "Device id ${device_id} is in an invalid format, must be :") From a5fbcdbd5dfc8eaff4d50440dd93d2163208a89a Mon Sep 17 00:00:00 2001 From: mathiasap Date: Fri, 14 Dec 2018 11:06:29 +0100 Subject: [PATCH 04/32] Fixes runtime error for test debug build (#179) --- test/util/src/test_util.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/util/src/test_util.cpp b/test/util/src/test_util.cpp index 676bc06be..1e4079d5f 100644 --- a/test/util/src/test_util.cpp +++ b/test/util/src/test_util.cpp @@ -264,8 +264,8 @@ std::string createRandomAdvertisingName(const std::string &prefix, const uint8_t std::copy(prefix.begin(), prefix.end(), std::back_inserter(data)); const auto randomLength = length - prefix.length(); std::generate_n(std::back_inserter(data), randomLength, [] { - char c; - while (!std::isalnum(c = static_cast(std::rand()))) + uint8_t c; + while (!std::isalnum(c = static_cast(std::rand()))) ; return c; }); From 5ffdef4318a6f8eed884e94be164b26657bd67b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ken=20A=2E=20Rederg=C3=A5rd?= <64542+kenr@users.noreply.github.com> Date: Tue, 18 Dec 2018 13:26:58 +0100 Subject: [PATCH 05/32] Add connectivity hex file without SoftDevice to copy step (#180) * Add unmerged hex files for usb DFU based connectivity firmware to copy step --- hex/CMakeLists.txt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/hex/CMakeLists.txt b/hex/CMakeLists.txt index 9c9f03f8f..a7a83e0a6 100644 --- a/hex/CMakeLists.txt +++ b/hex/CMakeLists.txt @@ -178,7 +178,8 @@ function(nrf_create_connectivity_compile_targets) set(SD_ID) nrf_extract_softdevice_info("${SOFTDEVICE_HEX_PATH}" SD_VERSION SOC_FAMILY SD_API_VERSION SD_ID) - set(TARGET_NAME "connectivity_${VERSION}_${TRANSPORT}_with_${SD_VERSION}_${SD_API_VERSION}") + set(CONNECTIVITY_NAME "connectivity_${VERSION}_${TRANSPORT}") + set(TARGET_NAME "${CONNECTIVITY_NAME}_with_${SD_VERSION}_${SD_API_VERSION}") # Check if target name already exists list(FIND CONNECTIVITY_BUILD_TARGETS "compile_${TARGET_NAME}" FOUND_TARGET) @@ -267,6 +268,12 @@ function(nrf_create_connectivity_compile_targets) OUTPUT "${COMMAND_NAME}" APPEND COMMAND ${CMAKE_COMMAND} -E copy "${DFU_PKG}" "${OUTPUT_DIRECTORY}" ) + + # Copy connectivity hex file to binary make_directory + add_custom_command( + OUTPUT "${COMMAND_NAME}" + APPEND COMMAND ${CMAKE_COMMAND} -E copy "${APP_HEX_PATH}" "${OUTPUT_DIRECTORY}/${CONNECTIVITY_NAME}.hex" + ) endif() endif() From c6c23bec1180c5975d20ed5fb2ef4c70edf92c6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ken=20A=2E=20Rederg=C3=A5rd?= <64542+kenr@users.noreply.github.com> Date: Tue, 18 Dec 2018 15:30:49 +0100 Subject: [PATCH 06/32] Fix connectivity firmware version issues (#181) * Fix firmware version values to match regex (nRF5 SDKv15.2) * Add version info struct for armgcc (nRF5 SDK v11.0) --- hex/nRF5_SDK_11.0.0_connectivity.patch | 68 +- hex/nRF5_SDK_15.2.0_connectivity.patch | 1490 ++++++++++++------------ 2 files changed, 806 insertions(+), 752 deletions(-) diff --git a/hex/nRF5_SDK_11.0.0_connectivity.patch b/hex/nRF5_SDK_11.0.0_connectivity.patch index a6078f4a2..8ea5758c0 100644 --- a/hex/nRF5_SDK_11.0.0_connectivity.patch +++ b/hex/nRF5_SDK_11.0.0_connectivity.patch @@ -490,10 +490,10 @@ index 84d5ff8..9a72955 100644 /**@brief Function for registering for System (SOC) events. * diff --git nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/main.c nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/main.c -index 83241ef..1c48018 100644 +index 83241ef..85d6acb 100644 --- nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/main.c +++ nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/main.c -@@ -28,9 +28,43 @@ +@@ -28,9 +28,47 @@ #include "ser_hal_transport.h" #include "ser_conn_handlers.h" #include "boards.h" @@ -501,7 +501,6 @@ index 83241ef..1c48018 100644 #include "ser_phy_debug_comm.h" -+#if defined ( __CC_ARM ) +typedef struct __attribute__((packed)) +{ + uint32_t magic_number; /* Magic number to verify the presence of this structure in memory */ @@ -517,8 +516,14 @@ index 83241ef..1c48018 100644 + uint32_t rfu2 : 16; /* Reserved for future use, shall be 0xFFFF */ + uint32_t baud_rate; /* UART transport baud rate */ +} version_info_t; -+ -+static const version_info_t version_info __attribute__((at(0x20000))) = { ++#if defined ( __CC_ARM ) ++static const version_info_t version_info __attribute__((at(0x20000))) = ++#elif defined ( __GNUC__ ) || defined ( __SES_ARM ) ++volatile static const version_info_t version_info __attribute__ ((section(".connectivity_version_info"))) = ++#elif defined ( __ICCARM__ ) ++__root const version_info_t version_info @ 0x20000 = ++#endif ++{ + .magic_number = 0x46D8A517, + .struct_version = 2, + .rfu0 = 0xFFFFFF, @@ -532,12 +537,11 @@ index 83241ef..1c48018 100644 + .rfu2 = 0xFFFF, + .baud_rate = SER_PHY_UART_BAUDRATE_VAL, +}; -+#endif + /**@brief Main function of the connectivity application. */ int main(void) { -@@ -65,6 +99,15 @@ int main(void) +@@ -65,6 +103,15 @@ int main(void) { /* Process SoftDevice events. */ app_sched_execute(); @@ -579,6 +583,31 @@ index f02d9d2..cc9dd3f 100644 #echo suspend ifeq ("$(VERBOSE)","1") +diff --git nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10028/ser_s130_hci/armgcc/ble_connectivity_gcc_nrf51.ld nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/pca10028/ser_s130_hci/armgcc/ble_connectivity_gcc_nrf51.ld +index 52c6617..4654217 100644 +--- nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10028/ser_s130_hci/armgcc/ble_connectivity_gcc_nrf51.ld ++++ nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/pca10028/ser_s130_hci/armgcc/ble_connectivity_gcc_nrf51.ld +@@ -5,12 +5,19 @@ GROUP(-lgcc -lc -lnosys) + + MEMORY + { +- FLASH (rx) : ORIGIN = 0x1b000, LENGTH = 0x25000 ++ FLASH (rx) : ORIGIN = 0x1b000, LENGTH = 0x1e000 + RAM (rwx) : ORIGIN = 0x20004300, LENGTH = 0x3d00 ++ connectivity_version_info (r) : ORIGIN = 0x39000, LENGTH = 0x18 + } + + SECTIONS + { ++ .connectivity_version_info : ++ { ++ PROVIDE(__start_connectivity_version_info = .); ++ KEEP(*(SORT(.connectivity_version_info*))) ++ PROVIDE(__stop_connectivity_version_info = .); ++ } > connectivity_version_info + .fs_data : + { + PROVIDE(__start_fs_data = .); diff --git nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10028/ser_s130_spi/armgcc/Makefile nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/pca10028/ser_s130_spi/armgcc/Makefile index 39a998a..c8dc2a6 100644 --- nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10028/ser_s130_spi/armgcc/Makefile @@ -683,6 +712,31 @@ index f4b3fc1..ab9016d 100644 #echo suspend ifeq ("$(VERBOSE)","1") +diff --git nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10040/ser_s132_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/pca10040/ser_s132_hci/armgcc/ble_connectivity_gcc_nrf52.ld +index 3c6e5b1..996be3c 100644 +--- nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10040/ser_s132_hci/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/pca10040/ser_s132_hci/armgcc/ble_connectivity_gcc_nrf52.ld +@@ -5,12 +5,19 @@ GROUP(-lgcc -lc -lnosys) + + MEMORY + { +- FLASH (rx) : ORIGIN = 0x1c000, LENGTH = 0x64000 ++ FLASH (rx) : ORIGIN = 0x1c000, LENGTH = 0x34000 + RAM (rwx) : ORIGIN = 0x20004300, LENGTH = 0xbd00 ++ connectivity_version_info (r) : ORIGIN = 0x50000, LENGTH = 0x18 + } + + SECTIONS + { ++ .connectivity_version_info : ++ { ++ PROVIDE(__start_connectivity_version_info = .); ++ KEEP(*(SORT(.connectivity_version_info*))) ++ PROVIDE(__stop_connectivity_version_info = .); ++ } > connectivity_version_info + .fs_data : + { + PROVIDE(__start_fs_data = .); diff --git nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10040/ser_s132_spi/armgcc/Makefile nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/pca10040/ser_s132_spi/armgcc/Makefile index 5ef79e6..9618498 100644 --- nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10040/ser_s132_spi/armgcc/Makefile diff --git a/hex/nRF5_SDK_15.2.0_connectivity.patch b/hex/nRF5_SDK_15.2.0_connectivity.patch index be2d2f72a..5654f5cae 100644 --- a/hex/nRF5_SDK_15.2.0_connectivity.patch +++ b/hex/nRF5_SDK_15.2.0_connectivity.patch @@ -1,7 +1,7 @@ -diff --git nRF5_SDK_15.2.0_9412b96/components/boards/pca10056.h nRF5_SDK_15.2.0_80108de/components/boards/pca10056.h +diff --git nRF5_SDK_15.2.0_9412b96/components/boards/pca10056.h nRF5_SDK_15.2.0_f8cd40a/components/boards/pca10056.h index 6b3f92f..7fbfbca 100644 --- nRF5_SDK_15.2.0_9412b96/components/boards/pca10056.h -+++ nRF5_SDK_15.2.0_80108de/components/boards/pca10056.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/boards/pca10056.h @@ -90,6 +90,8 @@ extern "C" { #define RTS_PIN_NUMBER 5 #define HWFC true @@ -11,10 +11,10 @@ index 6b3f92f..7fbfbca 100644 #define BSP_QSPI_SCK_PIN 19 #define BSP_QSPI_CSN_PIN 17 #define BSP_QSPI_IO0_PIN 20 -diff --git nRF5_SDK_15.2.0_9412b96/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.c nRF5_SDK_15.2.0_80108de/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.c +diff --git nRF5_SDK_15.2.0_9412b96/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.c nRF5_SDK_15.2.0_f8cd40a/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.c index 755581d..23b34db 100644 --- nRF5_SDK_15.2.0_9412b96/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.c -+++ nRF5_SDK_15.2.0_80108de/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.c ++++ nRF5_SDK_15.2.0_f8cd40a/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.c @@ -50,10 +50,6 @@ #include "nrf_log.h" NRF_LOG_MODULE_REGISTER(); @@ -62,10 +62,10 @@ index 755581d..23b34db 100644 m_dfu_info.wAddress = CODE_START; m_dfu_info.wFirmwareSize = CODE_SIZE; m_dfu_info.wVersionMajor = APP_VERSION_MAJOR; -diff --git nRF5_SDK_15.2.0_9412b96/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.h nRF5_SDK_15.2.0_80108de/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.h +diff --git nRF5_SDK_15.2.0_9412b96/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.h nRF5_SDK_15.2.0_f8cd40a/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.h index 5906a80..8befbe9 100644 --- nRF5_SDK_15.2.0_9412b96/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.h -+++ nRF5_SDK_15.2.0_80108de/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.h @@ -63,11 +63,12 @@ * * @note If @ref APP_USBD_CONFIG_EVENT_QUEUE_ENABLE is on (1), USB events must be handled manually. @@ -80,10 +80,10 @@ index 5906a80..8befbe9 100644 /** @} */ -diff --git nRF5_SDK_15.2.0_9412b96/components/libraries/log/src/nrf_log_ctrl_internal.h nRF5_SDK_15.2.0_80108de/components/libraries/log/src/nrf_log_ctrl_internal.h +diff --git nRF5_SDK_15.2.0_9412b96/components/libraries/log/src/nrf_log_ctrl_internal.h nRF5_SDK_15.2.0_f8cd40a/components/libraries/log/src/nrf_log_ctrl_internal.h index 3478d9f..660652b 100644 --- nRF5_SDK_15.2.0_9412b96/components/libraries/log/src/nrf_log_ctrl_internal.h -+++ nRF5_SDK_15.2.0_80108de/components/libraries/log/src/nrf_log_ctrl_internal.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/libraries/log/src/nrf_log_ctrl_internal.h @@ -79,7 +79,7 @@ #else // NRF_MODULE_ENABLED(NRF_LOG) #define NRF_LOG_INTERNAL_PROCESS() false @@ -93,10 +93,10 @@ index 3478d9f..660652b 100644 #define NRF_LOG_INTERNAL_HANDLERS_SET(default_handler, bytes_handler) \ UNUSED_PARAMETER(default_handler); UNUSED_PARAMETER(bytes_handler) #define NRF_LOG_INTERNAL_FINAL_FLUSH() -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/middleware/app_mw_ble.c nRF5_SDK_15.2.0_80108de/components/serialization/application/codecs/ble/middleware/app_mw_ble.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/middleware/app_mw_ble.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/application/codecs/ble/middleware/app_mw_ble.c index 033d974..94ff331 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/middleware/app_mw_ble.c -+++ nRF5_SDK_15.2.0_80108de/components/serialization/application/codecs/ble/middleware/app_mw_ble.c ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/application/codecs/ble/middleware/app_mw_ble.c @@ -44,6 +44,7 @@ #include "ser_sd_transport.h" #include "app_error.h" @@ -123,10 +123,10 @@ index 033d974..94ff331 100644 tx_buf_alloc(&p_buffer, &buffer_length); const uint32_t err_code = ble_enable_req_enc(&(p_buffer[1]), -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/middleware/app_mw_ble_gap.c nRF5_SDK_15.2.0_80108de/components/serialization/application/codecs/ble/middleware/app_mw_ble_gap.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/middleware/app_mw_ble_gap.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/application/codecs/ble/middleware/app_mw_ble_gap.c index 1fbb06f..c60d92d 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/middleware/app_mw_ble_gap.c -+++ nRF5_SDK_15.2.0_80108de/components/serialization/application/codecs/ble/middleware/app_mw_ble_gap.c ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/application/codecs/ble/middleware/app_mw_ble_gap.c @@ -1069,7 +1069,9 @@ uint32_t _sd_ble_gap_scan_stop(void) &buffer_length); //@note: Should never fail. @@ -219,10 +219,10 @@ index 1fbb06f..c60d92d 100644 const uint32_t err_code = ble_gap_adv_set_configure_req_enc(p_adv_handle, p_adv_data, p_adv_params, &(p_buffer[1]), &buffer_length); //@note: Should never fail. -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.c nRF5_SDK_15.2.0_80108de/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.c index cb0bd94..849a24d 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.c -+++ nRF5_SDK_15.2.0_80108de/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.c ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.c @@ -56,9 +56,22 @@ typedef struct { static adv_set_t m_adv_sets[4]; //todo configurable number of adv sets. @@ -372,10 +372,10 @@ index cb0bd94..849a24d 100644 } + #endif -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.h nRF5_SDK_15.2.0_80108de/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.h +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.h nRF5_SDK_15.2.0_f8cd40a/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.h index 58a0870..f2edf11 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.h -+++ nRF5_SDK_15.2.0_80108de/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.h @@ -53,6 +53,7 @@ #include "ble_types.h" @@ -447,10 +447,10 @@ index 58a0870..f2edf11 100644 #endif #ifdef __cplusplus } -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/serializers/ble_gap_app.c nRF5_SDK_15.2.0_80108de/components/serialization/application/codecs/ble/serializers/ble_gap_app.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/serializers/ble_gap_app.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/application/codecs/ble/serializers/ble_gap_app.c index 2eac945..24bd2cf 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/serializers/ble_gap_app.c -+++ nRF5_SDK_15.2.0_80108de/components/serialization/application/codecs/ble/serializers/ble_gap_app.c ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/application/codecs/ble/serializers/ble_gap_app.c @@ -650,6 +650,7 @@ uint32_t ble_gap_scan_start_rsp_dec(uint8_t const * const p_buf, uint32_t * const p_result_code) { @@ -467,10 +467,10 @@ index 2eac945..24bd2cf 100644 SER_RSP_DEC_END; } -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/serializers/ble_gap_evt_app.c nRF5_SDK_15.2.0_80108de/components/serialization/application/codecs/ble/serializers/ble_gap_evt_app.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/serializers/ble_gap_evt_app.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/application/codecs/ble/serializers/ble_gap_evt_app.c index c8cbc94..8b83d5d 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/serializers/ble_gap_evt_app.c -+++ nRF5_SDK_15.2.0_80108de/components/serialization/application/codecs/ble/serializers/ble_gap_evt_app.c ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/application/codecs/ble/serializers/ble_gap_evt_app.c @@ -42,6 +42,7 @@ #include "app_util.h" #include "app_ble_gap_sec_keys.h" @@ -534,10 +534,10 @@ index c8cbc94..8b83d5d 100644 SER_EVT_DEC_END; } #endif -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/common/conn_systemreset.c nRF5_SDK_15.2.0_80108de/components/serialization/application/codecs/common/conn_systemreset.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/common/conn_systemreset.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/application/codecs/common/conn_systemreset.c index ca012d2..f1088c4 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/common/conn_systemreset.c -+++ nRF5_SDK_15.2.0_80108de/components/serialization/application/codecs/common/conn_systemreset.c ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/application/codecs/common/conn_systemreset.c @@ -56,8 +56,9 @@ uint32_t conn_systemreset(void) } @@ -550,10 +550,10 @@ index ca012d2..f1088c4 100644 err_code = ser_sd_transport_cmd_write(p_tx_buf, tx_buf_len, NULL); if (err_code != NRF_SUCCESS) -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/ble_serialization.h nRF5_SDK_15.2.0_80108de/components/serialization/common/ble_serialization.h +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/ble_serialization.h nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/ble_serialization.h index dc37234..0787032 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/common/ble_serialization.h -+++ nRF5_SDK_15.2.0_80108de/components/serialization/common/ble_serialization.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/ble_serialization.h @@ -58,7 +58,7 @@ typedef enum SER_PKT_TYPE_EVT, /**< Event packet type. */ SER_PKT_TYPE_DTM_CMD, /**< DTM Command packet type. */ @@ -576,10 +576,10 @@ index dc37234..0787032 100644 #define LOW16(a) ((uint16_t)((a & 0x0000FFFF) >> 0)) #define HIGH16(a) ((uint16_t)((a & 0xFFFF0000) >> 16)) -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/ser_config.h nRF5_SDK_15.2.0_80108de/components/serialization/common/ser_config.h +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/ser_config.h nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/ser_config.h index 2e6d502..0f6c4a9 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/common/ser_config.h -+++ nRF5_SDK_15.2.0_80108de/components/serialization/common/ser_config.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/ser_config.h @@ -66,8 +66,8 @@ extern "C" { /** Max packets size in serialization HAL Transport layer (packets before adding PHY header i.e. @@ -610,10 +610,10 @@ index 2e6d502..0f6c4a9 100644 #ifdef __cplusplus } #endif -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/ser_dbg_sd_str.c nRF5_SDK_15.2.0_80108de/components/serialization/common/ser_dbg_sd_str.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/ser_dbg_sd_str.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/ser_dbg_sd_str.c index 5fbf555..b7390f3 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/common/ser_dbg_sd_str.c -+++ nRF5_SDK_15.2.0_80108de/components/serialization/common/ser_dbg_sd_str.c ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/ser_dbg_sd_str.c @@ -54,10 +54,10 @@ #if NRF_MODULE_ENABLED(NRF_LOG) && defined(BLE_STACK_SUPPORT_REQD) @@ -657,10 +657,10 @@ index 5fbf555..b7390f3 100644 "SD_EVT_UNKNOWN", /*0x27*/ "SD_EVT_UNKNOWN", /*0x28*/ "SD_EVT_UNKNOWN", /*0x29*/ -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c nRF5_SDK_15.2.0_80108de/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c index bd8943d..eed27e8 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c -+++ nRF5_SDK_15.2.0_80108de/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c @@ -453,9 +453,7 @@ uint32_t ble_gap_evt_connected_t_enc(void const * const p_void_struct, SER_PUSH_uint8(&p_struct->role); SER_PUSH_FIELD(&p_struct->conn_params, ble_gap_conn_params_t_enc); @@ -713,10 +713,10 @@ index bd8943d..eed27e8 100644 SER_STRUCT_DEC_END; } -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/struct_ser/ble/ble_struct_serialization.c nRF5_SDK_15.2.0_80108de/components/serialization/common/struct_ser/ble/ble_struct_serialization.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/struct_ser/ble/ble_struct_serialization.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/struct_ser/ble/ble_struct_serialization.c index 37f43ac..40ddda2 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/common/struct_ser/ble/ble_struct_serialization.c -+++ nRF5_SDK_15.2.0_80108de/components/serialization/common/struct_ser/ble/ble_struct_serialization.c ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/struct_ser/ble/ble_struct_serialization.c @@ -46,8 +46,11 @@ #include "ble_types.h" #include "ble.h" @@ -764,10 +764,10 @@ index 37f43ac..40ddda2 100644 #endif SER_PULL_len16data(&p_struct->p_data, &p_struct->len); -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_hal_transport.c nRF5_SDK_15.2.0_80108de/components/serialization/common/transport/ser_hal_transport.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_hal_transport.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/transport/ser_hal_transport.c index 9bcc818..5d97f88 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_hal_transport.c -+++ nRF5_SDK_15.2.0_80108de/components/serialization/common/transport/ser_hal_transport.c ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/transport/ser_hal_transport.c @@ -44,7 +44,7 @@ #include "ser_config.h" #include "ser_phy.h" @@ -800,10 +800,10 @@ index 9bcc818..5d97f88 100644 uint32_t ser_hal_transport_open(ser_hal_transport_events_handler_t events_handler) { uint32_t err_code = NRF_SUCCESS; -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_hal_transport.h nRF5_SDK_15.2.0_80108de/components/serialization/common/transport/ser_hal_transport.h +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_hal_transport.h nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/transport/ser_hal_transport.h index d4da8b4..55d99d8 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_hal_transport.h -+++ nRF5_SDK_15.2.0_80108de/components/serialization/common/transport/ser_hal_transport.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/transport/ser_hal_transport.h @@ -162,6 +162,8 @@ typedef void (*ser_hal_transport_events_handler_t)(ser_hal_transport_evt_t event */ uint32_t ser_hal_transport_open(ser_hal_transport_events_handler_t events_handler); @@ -813,10 +813,10 @@ index d4da8b4..55d99d8 100644 /**@brief Function for closing a transport channel. * -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/config/ser_phy_config_conn.h nRF5_SDK_15.2.0_80108de/components/serialization/common/transport/ser_phy/config/ser_phy_config_conn.h +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/config/ser_phy_config_conn.h nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/transport/ser_phy/config/ser_phy_config_conn.h index 06e7f9c..164a375 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/config/ser_phy_config_conn.h -+++ nRF5_SDK_15.2.0_80108de/components/serialization/common/transport/ser_phy/config/ser_phy_config_conn.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/transport/ser_phy/config/ser_phy_config_conn.h @@ -69,10 +69,10 @@ extern "C" { /* UART configuration */ #define UART_IRQ_PRIORITY APP_IRQ_PRIORITY_LOWEST @@ -832,10 +832,10 @@ index 06e7f9c..164a375 100644 #ifdef __cplusplus -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/ser_phy_hci.c nRF5_SDK_15.2.0_80108de/components/serialization/common/transport/ser_phy/ser_phy_hci.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/ser_phy_hci.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/transport/ser_phy/ser_phy_hci.c index 20e1eef..6996889 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/ser_phy_hci.c -+++ nRF5_SDK_15.2.0_80108de/components/serialization/common/transport/ser_phy/ser_phy_hci.c ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/transport/ser_phy/ser_phy_hci.c @@ -51,6 +51,17 @@ #include "nrf_soc.h" #include "ser_config.h" @@ -1131,10 +1131,10 @@ index 20e1eef..6996889 100644 } return err_code; } -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/ser_phy_hci.h nRF5_SDK_15.2.0_80108de/components/serialization/common/transport/ser_phy/ser_phy_hci.h +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/ser_phy_hci.h nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/transport/ser_phy/ser_phy_hci.h index ab7f337..409491d 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/ser_phy_hci.h -+++ nRF5_SDK_15.2.0_80108de/components/serialization/common/transport/ser_phy/ser_phy_hci.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/transport/ser_phy/ser_phy_hci.h @@ -129,6 +129,8 @@ typedef void (*ser_phy_hci_slip_event_handler_t)(ser_phy_hci_slip_evt_t *p_event */ uint32_t ser_phy_hci_slip_open(ser_phy_hci_slip_event_handler_t events_handler); @@ -1144,10 +1144,10 @@ index ab7f337..409491d 100644 /**@brief A function for transmitting a HCI SLIP packet. * -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/ser_phy_hci_slip.c nRF5_SDK_15.2.0_80108de/components/serialization/common/transport/ser_phy/ser_phy_hci_slip.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/ser_phy_hci_slip.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/transport/ser_phy/ser_phy_hci_slip.c index 857792b..7ad0537 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/ser_phy_hci_slip.c -+++ nRF5_SDK_15.2.0_80108de/components/serialization/common/transport/ser_phy/ser_phy_hci_slip.c ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/transport/ser_phy/ser_phy_hci_slip.c @@ -189,6 +189,7 @@ static void tx_buf_fill(void) { can_continue = tx_buf_put(tx_escaped_data); @@ -1232,10 +1232,10 @@ index 857792b..7ad0537 100644 APP_ERROR_CHECK(nrf_drv_uart_rx(&m_uart, m_rx_buf, 1)); -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/ser_phy_hci_slip_cdc.c nRF5_SDK_15.2.0_80108de/components/serialization/common/transport/ser_phy/ser_phy_hci_slip_cdc.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/ser_phy_hci_slip_cdc.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/transport/ser_phy/ser_phy_hci_slip_cdc.c index ddbf926..d11c83e 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/ser_phy_hci_slip_cdc.c -+++ nRF5_SDK_15.2.0_80108de/components/serialization/common/transport/ser_phy/ser_phy_hci_slip_cdc.c ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/transport/ser_phy/ser_phy_hci_slip_cdc.c @@ -67,10 +67,10 @@ NRF_LOG_MODULE_REGISTER(); static void cdc_acm_user_ev_handler(app_usbd_class_inst_t const * p_inst, app_usbd_cdc_acm_user_event_t event); @@ -1347,10 +1347,10 @@ index ddbf926..d11c83e 100644 return NRF_SUCCESS; } -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble.c nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble.c index f8e4666..c7807ad 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble.c -+++ nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble.c ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble.c @@ -41,7 +41,7 @@ #include "conn_mw_ble.h" #include "ble_serialization.h" @@ -1369,10 +1369,10 @@ index f8e4666..c7807ad 100644 #else err_code = ble_enable_req_dec(p_rx_buf, rx_buf_len); SER_ASSERT(err_code == NRF_SUCCESS, err_code); -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gap.c nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gap.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gap.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gap.c index 6999f20..940c5af 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gap.c -+++ nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gap.c ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gap.c @@ -136,14 +136,22 @@ uint32_t conn_mw_ble_gap_scan_start(uint8_t const * const p_rx_buf, err_code = ble_gap_scan_start_req_dec(p_rx_buf, rx_buf_len, &p_scan_params, &p_adv_report_buffer); SER_ASSERT(err_code == NRF_SUCCESS, err_code); @@ -1421,10 +1421,10 @@ index 6999f20..940c5af 100644 SER_ASSERT(err_code == NRF_SUCCESS, err_code); return err_code; -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/ble_event_enc.c nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/serializers/ble_event_enc.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/ble_event_enc.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/serializers/ble_event_enc.c index ffe2ffe..5355070 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/ble_event_enc.c -+++ nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/serializers/ble_event_enc.c ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/serializers/ble_event_enc.c @@ -46,6 +46,7 @@ #include "ble_serialization.h" #include "app_util.h" @@ -1442,10 +1442,10 @@ index ffe2ffe..5355070 100644 switch (p_event->header.evt_id) { #if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 4 -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.c nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.c index ff9a3ad..674a0bf 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.c -+++ nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.c ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.c @@ -671,10 +671,14 @@ uint32_t ble_gap_scan_start_req_dec(uint8_t const * const p_buf, } @@ -1475,10 +1475,10 @@ index ff9a3ad..674a0bf 100644 SER_RSP_ENC_END; } -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.h nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.h +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.h nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.h index f1eaa4d..3bfaf36 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.h -+++ nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.h @@ -850,6 +850,9 @@ uint32_t ble_gap_scan_start_req_dec(uint8_t const * const p_buf, * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. */ @@ -1497,10 +1497,10 @@ index f1eaa4d..3bfaf36 100644 uint8_t const * const p_adv_handle); #ifndef S112 -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/ble_gap_evt_conn.c nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/serializers/ble_gap_evt_conn.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/ble_gap_evt_conn.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/serializers/ble_gap_evt_conn.c index 9267b39..a96cff8 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/ble_gap_evt_conn.c -+++ nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/serializers/ble_gap_evt_conn.c ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/serializers/ble_gap_evt_conn.c @@ -43,6 +43,7 @@ #include "ble_serialization.h" #include "cond_field_serialization.h" @@ -1548,10 +1548,10 @@ index 9267b39..a96cff8 100644 SER_EVT_ENC_END; } -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.c nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.c index 3f8c122..8b21066 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.c -+++ nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.c ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.c @@ -54,7 +54,25 @@ typedef struct ble_data_item_t m_ble_data_pool[8]; @@ -1636,10 +1636,10 @@ index 3f8c122..8b21066 100644 } #endif -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.h nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.h +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.h nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.h index 875de9a..348b54d 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.h -+++ nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.h @@ -51,7 +51,7 @@ #include "ble_gap.h" @@ -1671,10 +1671,10 @@ index 875de9a..348b54d 100644 #ifdef __cplusplus } -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.c nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.c index 2a54512..68623e4 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.c -+++ nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.c ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.c @@ -46,6 +46,16 @@ sercon_ble_user_mem_t m_conn_user_mem_table[SER_MAX_CONNECTIONS]; @@ -1692,10 +1692,10 @@ index 2a54512..68623e4 100644 uint32_t conn_ble_user_mem_context_create(uint32_t *p_index) { uint32_t err_code = NRF_ERROR_NO_MEM; -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.h nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.h +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.h nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.h index bb53a2d..3de2b6f 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.h -+++ nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.h @@ -70,6 +70,9 @@ typedef struct uint8_t mem_table[64]; /**< Memory table. */ } sercon_ble_user_mem_t; @@ -1706,10 +1706,10 @@ index bb53a2d..3de2b6f 100644 /**@brief Allocates instance in m_user_mem_table[] for storage. * * @param[out] p_index Pointer to the index of allocated instance. -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_event_encoder.c nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/ser_conn_event_encoder.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_event_encoder.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/ser_conn_event_encoder.c index d784754..7d8e424 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_event_encoder.c -+++ nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/ser_conn_event_encoder.c ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/ser_conn_event_encoder.c @@ -46,6 +46,7 @@ #include "ser_hal_transport.h" #include "ser_conn_event_encoder.h" @@ -1746,10 +1746,10 @@ index d784754..7d8e424 100644 } else { -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_handlers.c nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/ser_conn_handlers.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_handlers.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/ser_conn_handlers.c index f656ee2..f6656ea 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_handlers.c -+++ nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/ser_conn_handlers.c ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/ser_conn_handlers.c @@ -48,6 +48,8 @@ #include "nrf_sdh.h" #ifdef BLE_STACK_SUPPORT_REQD @@ -1782,10 +1782,10 @@ index f656ee2..f6656ea 100644 { // Queue is full. Do not pull new events. nrf_sdh_suspend(); -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_handlers.h nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/ser_conn_handlers.h +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_handlers.h nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/ser_conn_handlers.h index cc5777a..3f17f2f 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_handlers.h -+++ nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/ser_conn_handlers.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/ser_conn_handlers.h @@ -77,7 +77,7 @@ extern "C" { #endif @@ -1805,10 +1805,10 @@ index cc5777a..3f17f2f 100644 /**@brief A function for processing BLE SoftDevice events. * * @details BLE events are put into application scheduler queue to be processed at a later time. -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_pkt_decoder.c nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/ser_conn_pkt_decoder.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_pkt_decoder.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/ser_conn_pkt_decoder.c index c8a899c..d3e3fca 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_pkt_decoder.c -+++ nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/ser_conn_pkt_decoder.c ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/ser_conn_pkt_decoder.c @@ -86,9 +86,9 @@ uint32_t ser_conn_received_pkt_process( break; } @@ -1821,10 +1821,10 @@ index c8a899c..d3e3fca 100644 break; } -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_reset_cmd_decoder.c nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/ser_conn_reset_cmd_decoder.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_reset_cmd_decoder.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/ser_conn_reset_cmd_decoder.c index fcf4235..efc7244 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_reset_cmd_decoder.c -+++ nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/ser_conn_reset_cmd_decoder.c ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/ser_conn_reset_cmd_decoder.c @@ -39,9 +39,92 @@ */ #include "nrf_nvic.h" @@ -1921,10 +1921,10 @@ index fcf4235..efc7244 100644 + break; + } } -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_reset_cmd_decoder.h nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/ser_conn_reset_cmd_decoder.h +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_reset_cmd_decoder.h nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/ser_conn_reset_cmd_decoder.h index 6e9eb9c..2b654e1 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_reset_cmd_decoder.h -+++ nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/ser_conn_reset_cmd_decoder.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/ser_conn_reset_cmd_decoder.h @@ -58,7 +58,7 @@ #define SER_CONN_RESET_CMD_DECODER_H__ @@ -1945,10 +1945,10 @@ index 6e9eb9c..2b654e1 100644 #ifdef __cplusplus } -diff --git nRF5_SDK_15.2.0_9412b96/components/softdevice/common/nrf_sdh.c nRF5_SDK_15.2.0_80108de/components/softdevice/common/nrf_sdh.c +diff --git nRF5_SDK_15.2.0_9412b96/components/softdevice/common/nrf_sdh.c nRF5_SDK_15.2.0_f8cd40a/components/softdevice/common/nrf_sdh.c index 63e7fea..f2fa7cf 100644 --- nRF5_SDK_15.2.0_9412b96/components/softdevice/common/nrf_sdh.c -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/common/nrf_sdh.c ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/common/nrf_sdh.c @@ -204,7 +204,11 @@ ret_code_t nrf_sdh_enable_request(void) .source = NRF_SDH_CLOCK_LF_SRC, .rc_ctiv = NRF_SDH_CLOCK_LF_RC_CTIV, @@ -1975,10 +1975,10 @@ index 63e7fea..f2fa7cf 100644 // Enable event interrupt. // Interrupt priority has already been set by the stack. softdevices_evt_irq_enable(); -diff --git nRF5_SDK_15.2.0_9412b96/components/softdevice/common/nrf_sdh_ble.c nRF5_SDK_15.2.0_80108de/components/softdevice/common/nrf_sdh_ble.c +diff --git nRF5_SDK_15.2.0_9412b96/components/softdevice/common/nrf_sdh_ble.c nRF5_SDK_15.2.0_f8cd40a/components/softdevice/common/nrf_sdh_ble.c index d8ac161..db6379f 100644 --- nRF5_SDK_15.2.0_9412b96/components/softdevice/common/nrf_sdh_ble.c -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/common/nrf_sdh_ble.c ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/common/nrf_sdh_ble.c @@ -102,8 +102,9 @@ ret_code_t nrf_sdh_ble_app_ram_start_get(uint32_t * p_app_ram_start) ret_code_t nrf_sdh_ble_default_cfg_set(uint8_t conn_cfg_tag, uint32_t * p_ram_start) @@ -2055,10 +2055,10 @@ index d8ac161..db6379f 100644 /**@brief Function for polling BLE events. * -diff --git nRF5_SDK_15.2.0_9412b96/components/softdevice/common/nrf_sdh_ble.h nRF5_SDK_15.2.0_80108de/components/softdevice/common/nrf_sdh_ble.h +diff --git nRF5_SDK_15.2.0_9412b96/components/softdevice/common/nrf_sdh_ble.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/common/nrf_sdh_ble.h index 2970807..7c08450 100644 --- nRF5_SDK_15.2.0_9412b96/components/softdevice/common/nrf_sdh_ble.h -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/common/nrf_sdh_ble.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/common/nrf_sdh_ble.h @@ -62,6 +62,12 @@ extern "C" { #endif @@ -2085,11 +2085,11 @@ index 2970807..7c08450 100644 #ifdef __cplusplus } -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble.h new file mode 100644 index 0000000..168d655 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble.h @@ -0,0 +1,681 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -2772,11 +2772,11 @@ index 0000000..168d655 + @} + @} +*/ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_err.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_err.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_err.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_err.h new file mode 100644 index 0000000..9e70176 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_err.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_err.h @@ -0,0 +1,90 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -2868,11 +2868,11 @@ index 0000000..9e70176 + @} + @} +*/ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_gap.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_gap.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_gap.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_gap.h new file mode 100644 index 0000000..54a33f0 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_gap.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_gap.h @@ -0,0 +1,1917 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -4791,11 +4791,11 @@ index 0000000..54a33f0 +/** + @} +*/ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_gatt.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_gatt.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_gatt.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_gatt.h new file mode 100644 index 0000000..42d6cb6 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_gatt.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_gatt.h @@ -0,0 +1,220 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -5017,11 +5017,11 @@ index 0000000..42d6cb6 +#endif // BLE_GATT_H__ + +/** @} */ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_gattc.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_gattc.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_gattc.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_gattc.h new file mode 100644 index 0000000..859dcdf --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_gattc.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_gattc.h @@ -0,0 +1,660 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -5683,11 +5683,11 @@ index 0000000..859dcdf +/** + @} +*/ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_gatts.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_gatts.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_gatts.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_gatts.h new file mode 100644 index 0000000..535332b --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_gatts.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_gatts.h @@ -0,0 +1,778 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -6467,11 +6467,11 @@ index 0000000..535332b +/** + @} +*/ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_hci.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_hci.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_hci.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_hci.h new file mode 100644 index 0000000..4c7a5d5 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_hci.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_hci.h @@ -0,0 +1,131 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -6604,11 +6604,11 @@ index 0000000..4c7a5d5 +#endif // BLE_HCI_H__ + +/** @} */ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_l2cap.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_l2cap.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_l2cap.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_l2cap.h new file mode 100644 index 0000000..a180840 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_l2cap.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_l2cap.h @@ -0,0 +1,202 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -6812,11 +6812,11 @@ index 0000000..a180840 +/** + @} +*/ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_ranges.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_ranges.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_ranges.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_ranges.h new file mode 100644 index 0000000..854898c --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_ranges.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_ranges.h @@ -0,0 +1,138 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -6956,11 +6956,11 @@ index 0000000..854898c + @} + @} +*/ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_types.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_types.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_types.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_types.h new file mode 100644 index 0000000..f5ccdb7 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_types.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_types.h @@ -0,0 +1,213 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -7175,11 +7175,11 @@ index 0000000..f5ccdb7 + @} + @} +*/ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf52/nrf_mbr.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf52/nrf_mbr.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf52/nrf_mbr.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf52/nrf_mbr.h new file mode 100644 index 0000000..31a3a23 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf52/nrf_mbr.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf52/nrf_mbr.h @@ -0,0 +1,217 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -7398,11 +7398,11 @@ index 0000000..31a3a23 +/** + @} +*/ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_error.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_error.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_error.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_error.h new file mode 100644 index 0000000..55ce59e --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_error.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_error.h @@ -0,0 +1,87 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -7491,11 +7491,11 @@ index 0000000..55ce59e +/** + @} +*/ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_error_sdm.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_error_sdm.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_error_sdm.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_error_sdm.h new file mode 100644 index 0000000..3881071 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_error_sdm.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_error_sdm.h @@ -0,0 +1,67 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -7564,11 +7564,11 @@ index 0000000..3881071 + @} + @} +*/ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_error_soc.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_error_soc.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_error_soc.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_error_soc.h new file mode 100644 index 0000000..b876fc4 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_error_soc.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_error_soc.h @@ -0,0 +1,82 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -7652,11 +7652,11 @@ index 0000000..b876fc4 + @} + @} +*/ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_nvic.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_nvic.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_nvic.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_nvic.h new file mode 100644 index 0000000..40a6f84 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_nvic.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_nvic.h @@ -0,0 +1,485 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -8143,11 +8143,11 @@ index 0000000..40a6f84 +#endif // NRF_NVIC_H__ + +/**@} */ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_sd_def.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_sd_def.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_sd_def.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_sd_def.h new file mode 100644 index 0000000..58e699e --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_sd_def.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_sd_def.h @@ -0,0 +1,28 @@ +/* Copyright (c) 2015 - 2018 Nordic Semiconductor ASA. All Rights Reserved. + * @@ -8177,11 +8177,11 @@ index 0000000..58e699e +#endif + +#endif /* NRF_SD_DEF_H__ */ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_sdm.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_sdm.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_sdm.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_sdm.h new file mode 100644 index 0000000..bb98ce0 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_sdm.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_sdm.h @@ -0,0 +1,331 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -8514,11 +8514,11 @@ index 0000000..bb98ce0 +/** + @} +*/ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_soc.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_soc.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_soc.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_soc.h new file mode 100644 index 0000000..2e9e820 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_soc.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_soc.h @@ -0,0 +1,906 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -9426,11 +9426,11 @@ index 0000000..2e9e820 +#endif // NRF_SOC_H__ + +/**@} */ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_svc.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_svc.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_svc.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_svc.h new file mode 100644 index 0000000..c7e3fbe --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_svc.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_svc.h @@ -0,0 +1,88 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -9520,11 +9520,11 @@ index 0000000..c7e3fbe +} +#endif +#endif // NRF_SVC__ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers_replacement/ble_gap.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers_replacement/ble_gap.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers_replacement/ble_gap.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers_replacement/ble_gap.h new file mode 100644 index 0000000..e07ccef --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers_replacement/ble_gap.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers_replacement/ble_gap.h @@ -0,0 +1,1919 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -11445,11 +11445,11 @@ index 0000000..e07ccef +/** + @} +*/ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers_replacement/ble_gattc.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers_replacement/ble_gattc.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers_replacement/ble_gattc.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers_replacement/ble_gattc.h new file mode 100644 index 0000000..9cd75e2 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers_replacement/ble_gattc.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers_replacement/ble_gattc.h @@ -0,0 +1,674 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -12125,11 +12125,11 @@ index 0000000..9cd75e2 +/** + @} +*/ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers_replacement/nrf_nvic.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers_replacement/nrf_nvic.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers_replacement/nrf_nvic.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers_replacement/nrf_nvic.h new file mode 100644 index 0000000..a29d008 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers_replacement/nrf_nvic.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers_replacement/nrf_nvic.h @@ -0,0 +1,546 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -12677,20 +12677,20 @@ index 0000000..a29d008 +#endif // NRF_NVIC_H__ + +/**@} */ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers_replacement/test.rb nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers_replacement/test.rb +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers_replacement/test.rb nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers_replacement/test.rb new file mode 100644 index 0000000..f58ae1e --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers_replacement/test.rb ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers_replacement/test.rb @@ -0,0 +1,2 @@ +a = 'xxx const * const*' +puts a.gsub('const','') \ No newline at end of file -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/hex/s132_nrf52_3.0.0_softdevice.hex nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/hex/s132_nrf52_3.0.0_softdevice.hex +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/hex/s132_nrf52_3.0.0_softdevice.hex nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/hex/s132_nrf52_3.0.0_softdevice.hex new file mode 100644 index 0000000..126407c --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/hex/s132_nrf52_3.0.0_softdevice.hex ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/hex/s132_nrf52_3.0.0_softdevice.hex @@ -0,0 +1,7694 @@ +:020000040000FA +:1000000000040020E508000079050000C508000094 @@ -20386,11 +20386,11 @@ index 0000000..126407c +:10E720000100683720FB349B5F80041F80001002CB +:10E730002C01337F0102A029024410E431E00100E2 +:00000001FF -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/toolchain/armgcc/armgcc_s132v3_nrf52832_xxaa.ld nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/toolchain/armgcc/armgcc_s132v3_nrf52832_xxaa.ld +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/toolchain/armgcc/armgcc_s132v3_nrf52832_xxaa.ld nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/toolchain/armgcc/armgcc_s132v3_nrf52832_xxaa.ld new file mode 100644 index 0000000..74140a9 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/toolchain/armgcc/armgcc_s132v3_nrf52832_xxaa.ld ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/toolchain/armgcc/armgcc_s132v3_nrf52832_xxaa.ld @@ -0,0 +1,33 @@ +/* Linker script to configure memory regions. */ + @@ -20425,11 +20425,11 @@ index 0000000..74140a9 +} INSERT AFTER .text + +INCLUDE "nrf_common.ld" -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/toolchain/iar/iar_s132v3_nrf52832_xxaa.icf nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/toolchain/iar/iar_s132v3_nrf52832_xxaa.icf +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/toolchain/iar/iar_s132v3_nrf52832_xxaa.icf nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/toolchain/iar/iar_s132v3_nrf52832_xxaa.icf new file mode 100644 index 0000000..0cc668a --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/toolchain/iar/iar_s132v3_nrf52832_xxaa.icf ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/toolchain/iar/iar_s132v3_nrf52832_xxaa.icf @@ -0,0 +1,36 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ @@ -20467,11 +20467,11 @@ index 0000000..0cc668a + block CSTACK, + block HEAP }; + -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble.h new file mode 100644 index 0000000..ed16f6d --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble.h @@ -0,0 +1,628 @@ +/* + * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA @@ -21101,11 +21101,11 @@ index 0000000..ed16f6d + @} + @} +*/ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_err.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_err.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_err.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_err.h new file mode 100644 index 0000000..2699abc --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_err.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_err.h @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA @@ -21198,11 +21198,11 @@ index 0000000..2699abc + @} + @} +*/ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_gap.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_gap.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_gap.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_gap.h new file mode 100644 index 0000000..fa61bb9 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_gap.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_gap.h @@ -0,0 +1,2189 @@ +/* + * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA @@ -23393,11 +23393,11 @@ index 0000000..fa61bb9 +/** + @} +*/ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_gatt.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_gatt.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_gatt.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_gatt.h new file mode 100644 index 0000000..f1651c8 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_gatt.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_gatt.h @@ -0,0 +1,228 @@ +/* + * Copyright (c) 2013 - 2017, Nordic Semiconductor ASA @@ -23627,11 +23627,11 @@ index 0000000..f1651c8 +#endif // BLE_GATT_H__ + +/** @} */ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_gattc.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_gattc.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_gattc.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_gattc.h new file mode 100644 index 0000000..f1428cd --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_gattc.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_gattc.h @@ -0,0 +1,707 @@ +/* + * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA @@ -24340,11 +24340,11 @@ index 0000000..f1428cd +/** + @} +*/ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_gatts.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_gatts.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_gatts.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_gatts.h new file mode 100644 index 0000000..1bba73d --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_gatts.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_gatts.h @@ -0,0 +1,841 @@ +/* + * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA @@ -25187,11 +25187,11 @@ index 0000000..1bba73d +/** + @} +*/ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_hci.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_hci.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_hci.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_hci.h new file mode 100644 index 0000000..b48d706 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_hci.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_hci.h @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA @@ -25328,11 +25328,11 @@ index 0000000..b48d706 +#endif // BLE_HCI_H__ + +/** @} */ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_l2cap.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_l2cap.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_l2cap.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_l2cap.h new file mode 100644 index 0000000..96d833a --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_l2cap.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_l2cap.h @@ -0,0 +1,507 @@ +/* + * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA @@ -25841,11 +25841,11 @@ index 0000000..96d833a +/** + @} +*/ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_ranges.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_ranges.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_ranges.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_ranges.h new file mode 100644 index 0000000..9bff917 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_ranges.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_ranges.h @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA @@ -26003,11 +26003,11 @@ index 0000000..9bff917 + @} + @} +*/ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_types.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_types.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_types.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_types.h new file mode 100644 index 0000000..cd5fbaf --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_types.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_types.h @@ -0,0 +1,215 @@ +/* + * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA @@ -26224,11 +26224,11 @@ index 0000000..cd5fbaf + @} + @} +*/ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf52/nrf_mbr.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf52/nrf_mbr.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf52/nrf_mbr.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf52/nrf_mbr.h new file mode 100644 index 0000000..ea231b3 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf52/nrf_mbr.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf52/nrf_mbr.h @@ -0,0 +1,241 @@ +/* + * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA @@ -26471,11 +26471,11 @@ index 0000000..ea231b3 +/** + @} +*/ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_error.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_error.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_error.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_error.h new file mode 100644 index 0000000..09d3044 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_error.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_error.h @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA @@ -26567,11 +26567,11 @@ index 0000000..09d3044 +/** + @} +*/ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_error_sdm.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_error_sdm.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_error_sdm.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_error_sdm.h new file mode 100644 index 0000000..85e08f3 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_error_sdm.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_error_sdm.h @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA @@ -26643,11 +26643,11 @@ index 0000000..85e08f3 + @} + @} +*/ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_error_soc.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_error_soc.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_error_soc.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_error_soc.h new file mode 100644 index 0000000..ea9825e --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_error_soc.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_error_soc.h @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA @@ -26734,11 +26734,11 @@ index 0000000..ea9825e + @} + @} +*/ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_nvic.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_nvic.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_nvic.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_nvic.h new file mode 100644 index 0000000..1705cb6 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_nvic.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_nvic.h @@ -0,0 +1,486 @@ +/* + * Copyright (c) 2016 - 2017, Nordic Semiconductor ASA @@ -27226,11 +27226,11 @@ index 0000000..1705cb6 +#endif // NRF_NVIC_H__ + +/**@} */ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_sd_def.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_sd_def.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_sd_def.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_sd_def.h new file mode 100644 index 0000000..7bf0ff0 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_sd_def.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_sd_def.h @@ -0,0 +1,28 @@ +/* Copyright (c) 2015 - 2018 Nordic Semiconductor ASA. All Rights Reserved. + * @@ -27260,11 +27260,11 @@ index 0000000..7bf0ff0 +#endif + +#endif /* NRF_SD_DEF_H__ */ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_sdm.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_sdm.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_sdm.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_sdm.h new file mode 100644 index 0000000..09eaecb --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_sdm.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_sdm.h @@ -0,0 +1,357 @@ +/* + * Copyright (c) 2015 - 2017, Nordic Semiconductor ASA @@ -27623,11 +27623,11 @@ index 0000000..09eaecb +/** + @} +*/ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_soc.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_soc.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_soc.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_soc.h new file mode 100644 index 0000000..60fff94 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_soc.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_soc.h @@ -0,0 +1,934 @@ +/* + * Copyright (c) 2015 - 2017, Nordic Semiconductor ASA @@ -28563,11 +28563,11 @@ index 0000000..60fff94 +#endif // NRF_SOC_H__ + +/**@} */ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_svc.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_svc.h +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_svc.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_svc.h new file mode 100644 index 0000000..c26ce74 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_svc.h ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_svc.h @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA @@ -28659,20 +28659,20 @@ index 0000000..c26ce74 +} +#endif +#endif // NRF_SVC__ -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers_replacement/test.rb nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers_replacement/test.rb +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers_replacement/test.rb nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers_replacement/test.rb new file mode 100644 index 0000000..f58ae1e --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers_replacement/test.rb ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers_replacement/test.rb @@ -0,0 +1,2 @@ +a = 'xxx const * const*' +puts a.gsub('const','') \ No newline at end of file -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/hex/s132_nrf52_5.1.0_softdevice.hex nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/hex/s132_nrf52_5.1.0_softdevice.hex +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/hex/s132_nrf52_5.1.0_softdevice.hex nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/hex/s132_nrf52_5.1.0_softdevice.hex new file mode 100644 index 0000000..757b5f6 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/hex/s132_nrf52_5.1.0_softdevice.hex ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/hex/s132_nrf52_5.1.0_softdevice.hex @@ -0,0 +1,7843 @@ +:020000040000FA +:1000000000040020E90800007D050000C908000088 @@ -36517,11 +36517,11 @@ index 0000000..757b5f6 +:10F070001B201C041AA20401980912BF237F01025D +:04F080006B290000F8 +:00000001FF -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/toolchain/armgcc/armgcc_s132v5_nrf52832_xxaa.ld nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/toolchain/armgcc/armgcc_s132v5_nrf52832_xxaa.ld +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/toolchain/armgcc/armgcc_s132v5_nrf52832_xxaa.ld nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/toolchain/armgcc/armgcc_s132v5_nrf52832_xxaa.ld new file mode 100644 index 0000000..cb45d8b --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/toolchain/armgcc/armgcc_s132v5_nrf52832_xxaa.ld ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/toolchain/armgcc/armgcc_s132v5_nrf52832_xxaa.ld @@ -0,0 +1,33 @@ +/* Linker script to configure memory regions. */ + @@ -36556,11 +36556,11 @@ index 0000000..cb45d8b +} INSERT AFTER .text + +INCLUDE "nrf_common.ld" -diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/toolchain/iar/iar_s132v5_nrf52832_xxaa.icf nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/toolchain/iar/iar_s132v5_nrf52832_xxaa.icf +diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/toolchain/iar/iar_s132v5_nrf52832_xxaa.icf nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/toolchain/iar/iar_s132v5_nrf52832_xxaa.icf new file mode 100644 index 0000000..55701b7 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/toolchain/iar/iar_s132v5_nrf52832_xxaa.icf ++++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/toolchain/iar/iar_s132v5_nrf52832_xxaa.icf @@ -0,0 +1,36 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ @@ -36598,10 +36598,10 @@ index 0000000..55701b7 + block CSTACK, + block HEAP }; + -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/main.c nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/main.c -index fc7996c..24df30a 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/main.c nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/main.c +index fc7996c..68e5441 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/main.c -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/main.c ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/main.c @@ -57,23 +57,34 @@ #include "ser_conn_handlers.h" #include "boards.h" @@ -36684,9 +36684,9 @@ index fc7996c..24df30a 100644 + .struct_version = 2, + .rfu0 = 0xFFFFFF, + .revision_hash = 0, -+ .version_major = 2, -+ .version_minor = 0, -+ .version_patch = 1, ++ .version_major = 0xf1, ++ .version_minor = 0xf2, ++ .version_patch = 0xf3, + .rfu1 = 0xFF, + .sd_ble_api_version = NRF_SD_BLE_API_VERSION, + .transport_type = 1, @@ -36835,10 +36835,10 @@ index fc7996c..24df30a 100644 } } /** @} */ -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/armgcc/ble_connectivity_gcc_nrf52.ld -index 611a3b6..1584391 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/armgcc/ble_connectivity_gcc_nrf52.ld +index 611a3b6..65e784e 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/armgcc/ble_connectivity_gcc_nrf52.ld -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/armgcc/ble_connectivity_gcc_nrf52.ld @@ -6,11 +6,18 @@ GROUP(-lgcc -lc -lnosys) MEMORY { @@ -36859,36 +36859,36 @@ index 611a3b6..1584391 100644 } SECTIONS -@@ -69,6 +76,12 @@ SECTIONS +@@ -69,12 +76,6 @@ SECTIONS KEEP(*(.nrf_balloc)) PROVIDE(__stop_nrf_balloc = .); } > FLASH -+ .sdh_state_observers : -+ { -+ PROVIDE(__start_sdh_state_observers = .); -+ KEEP(*(SORT(.sdh_state_observers*))) -+ PROVIDE(__stop_sdh_state_observers = .); -+ } > FLASH - .sdh_stack_observers : - { - PROVIDE(__start_sdh_stack_observers = .); -@@ -81,12 +94,6 @@ SECTIONS - KEEP(*(SORT(.sdh_req_observers*))) - PROVIDE(__stop_sdh_req_observers = .); - } > FLASH -- .sdh_state_observers : +- .sdh_stack_observers : - { -- PROVIDE(__start_sdh_state_observers = .); -- KEEP(*(SORT(.sdh_state_observers*))) -- PROVIDE(__stop_sdh_state_observers = .); +- PROVIDE(__start_sdh_stack_observers = .); +- KEEP(*(SORT(.sdh_stack_observers*))) +- PROVIDE(__stop_sdh_stack_observers = .); - } > FLASH + .sdh_req_observers : + { + PROVIDE(__start_sdh_req_observers = .); +@@ -87,6 +88,12 @@ SECTIONS + KEEP(*(SORT(.sdh_state_observers*))) + PROVIDE(__stop_sdh_state_observers = .); + } > FLASH ++ .sdh_stack_observers : ++ { ++ PROVIDE(__start_sdh_stack_observers = .); ++ KEEP(*(SORT(.sdh_stack_observers*))) ++ PROVIDE(__stop_sdh_stack_observers = .); ++ } > FLASH .log_backends : { PROVIDE(__start_log_backends = .); -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/config/sdk_config.h index c5caa64..19a16d1 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/config/sdk_config.h -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/config/sdk_config.h ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/config/sdk_config.h @@ -518,6 +518,136 @@ // @@ -37159,10 +37159,10 @@ index c5caa64..19a16d1 100644 // NRF_BLE_BMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Bond Management Service. -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/ble_connectivity_s132_hci_pca10040.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/ble_connectivity_s132_hci_pca10040.emProject +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/ble_connectivity_s132_hci_pca10040.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/ble_connectivity_s132_hci_pca10040.emProject index 7eccb28..8a0e048 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/ble_connectivity_s132_hci_pca10040.emProject -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/ble_connectivity_s132_hci_pca10040.emProject ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/ble_connectivity_s132_hci_pca10040.emProject @@ -27,8 +27,8 @@ linker_printf_width_precision_supported="Yes" linker_printf_fmt_level="long" @@ -37174,18 +37174,18 @@ index 7eccb28..8a0e048 100644 project_directory="" project_type="Executable" /> -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/flash_placement.xml -index 6b7653b..c9cc513 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/flash_placement.xml +index 6b7653b..d9b36f6 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/flash_placement.xml -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/flash_placement.xml @@ -11,9 +11,9 @@ -+ - +- -- + ++ @@ -37197,10 +37197,10 @@ index 6b7653b..c9cc513 100644 + + -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/armgcc/ble_connectivity_gcc_nrf52.ld -index f67446c..5b7dc28 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/armgcc/ble_connectivity_gcc_nrf52.ld +index f67446c..d1bb196 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/armgcc/ble_connectivity_gcc_nrf52.ld -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/armgcc/ble_connectivity_gcc_nrf52.ld @@ -6,11 +6,18 @@ GROUP(-lgcc -lc -lnosys) MEMORY { @@ -37221,36 +37221,36 @@ index f67446c..5b7dc28 100644 } SECTIONS -@@ -63,6 +70,12 @@ SECTIONS +@@ -63,12 +70,6 @@ SECTIONS KEEP(*(SORT(.log_const_data*))) PROVIDE(__stop_log_const_data = .); } > FLASH -+ .sdh_state_observers : -+ { -+ PROVIDE(__start_sdh_state_observers = .); -+ KEEP(*(SORT(.sdh_state_observers*))) -+ PROVIDE(__stop_sdh_state_observers = .); -+ } > FLASH - .sdh_stack_observers : - { - PROVIDE(__start_sdh_stack_observers = .); -@@ -75,12 +88,6 @@ SECTIONS - KEEP(*(SORT(.sdh_req_observers*))) - PROVIDE(__stop_sdh_req_observers = .); - } > FLASH -- .sdh_state_observers : +- .sdh_stack_observers : - { -- PROVIDE(__start_sdh_state_observers = .); -- KEEP(*(SORT(.sdh_state_observers*))) -- PROVIDE(__stop_sdh_state_observers = .); +- PROVIDE(__start_sdh_stack_observers = .); +- KEEP(*(SORT(.sdh_stack_observers*))) +- PROVIDE(__stop_sdh_stack_observers = .); - } > FLASH + .sdh_req_observers : + { + PROVIDE(__start_sdh_req_observers = .); +@@ -81,6 +82,12 @@ SECTIONS + KEEP(*(SORT(.sdh_state_observers*))) + PROVIDE(__stop_sdh_state_observers = .); + } > FLASH ++ .sdh_stack_observers : ++ { ++ PROVIDE(__start_sdh_stack_observers = .); ++ KEEP(*(SORT(.sdh_stack_observers*))) ++ PROVIDE(__stop_sdh_stack_observers = .); ++ } > FLASH .log_backends : { PROVIDE(__start_log_backends = .); -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/config/sdk_config.h index 878122b..9342e94 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/config/sdk_config.h -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/config/sdk_config.h ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/config/sdk_config.h @@ -747,6 +747,136 @@ // @@ -37521,10 +37521,10 @@ index 878122b..9342e94 100644 // NRF_BLE_BMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Bond Management Service. -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/ble_connectivity_s132_spi_pca10040.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/ble_connectivity_s132_spi_pca10040.emProject +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/ble_connectivity_s132_spi_pca10040.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/ble_connectivity_s132_spi_pca10040.emProject index 918459a..0eb8650 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/ble_connectivity_s132_spi_pca10040.emProject -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/ble_connectivity_s132_spi_pca10040.emProject ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/ble_connectivity_s132_spi_pca10040.emProject @@ -27,8 +27,8 @@ linker_printf_width_precision_supported="Yes" linker_printf_fmt_level="long" @@ -37536,18 +37536,18 @@ index 918459a..0eb8650 100644 project_directory="" project_type="Executable" /> -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/flash_placement.xml -index a801e6e..0708731 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/flash_placement.xml +index a801e6e..85d547f 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/flash_placement.xml -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/flash_placement.xml @@ -10,9 +10,9 @@ -+ - +- -- + ++ @@ -37559,10 +37559,10 @@ index a801e6e..0708731 100644 + + -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld -index f67446c..5b7dc28 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld +index f67446c..d1bb196 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld @@ -6,11 +6,18 @@ GROUP(-lgcc -lc -lnosys) MEMORY { @@ -37583,36 +37583,36 @@ index f67446c..5b7dc28 100644 } SECTIONS -@@ -63,6 +70,12 @@ SECTIONS +@@ -63,12 +70,6 @@ SECTIONS KEEP(*(SORT(.log_const_data*))) PROVIDE(__stop_log_const_data = .); } > FLASH -+ .sdh_state_observers : -+ { -+ PROVIDE(__start_sdh_state_observers = .); -+ KEEP(*(SORT(.sdh_state_observers*))) -+ PROVIDE(__stop_sdh_state_observers = .); -+ } > FLASH - .sdh_stack_observers : - { - PROVIDE(__start_sdh_stack_observers = .); -@@ -75,12 +88,6 @@ SECTIONS - KEEP(*(SORT(.sdh_req_observers*))) - PROVIDE(__stop_sdh_req_observers = .); - } > FLASH -- .sdh_state_observers : +- .sdh_stack_observers : - { -- PROVIDE(__start_sdh_state_observers = .); -- KEEP(*(SORT(.sdh_state_observers*))) -- PROVIDE(__stop_sdh_state_observers = .); +- PROVIDE(__start_sdh_stack_observers = .); +- KEEP(*(SORT(.sdh_stack_observers*))) +- PROVIDE(__stop_sdh_stack_observers = .); - } > FLASH + .sdh_req_observers : + { + PROVIDE(__start_sdh_req_observers = .); +@@ -81,6 +82,12 @@ SECTIONS + KEEP(*(SORT(.sdh_state_observers*))) + PROVIDE(__stop_sdh_state_observers = .); + } > FLASH ++ .sdh_stack_observers : ++ { ++ PROVIDE(__start_sdh_stack_observers = .); ++ KEEP(*(SORT(.sdh_stack_observers*))) ++ PROVIDE(__stop_sdh_stack_observers = .); ++ } > FLASH .log_backends : { PROVIDE(__start_log_backends = .); -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/config/sdk_config.h index 878122b..9342e94 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/config/sdk_config.h -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/config/sdk_config.h ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/config/sdk_config.h @@ -747,6 +747,136 @@ // @@ -37883,10 +37883,10 @@ index 878122b..9342e94 100644 // NRF_BLE_BMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Bond Management Service. -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/ble_connectivity_s132_spi_5W_pca10040.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/ble_connectivity_s132_spi_5W_pca10040.emProject +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/ble_connectivity_s132_spi_5W_pca10040.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/ble_connectivity_s132_spi_5W_pca10040.emProject index 4f3e9db..13cae61 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/ble_connectivity_s132_spi_5W_pca10040.emProject -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/ble_connectivity_s132_spi_5W_pca10040.emProject ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/ble_connectivity_s132_spi_5W_pca10040.emProject @@ -27,8 +27,8 @@ linker_printf_width_precision_supported="Yes" linker_printf_fmt_level="long" @@ -37898,18 +37898,18 @@ index 4f3e9db..13cae61 100644 project_directory="" project_type="Executable" /> -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/flash_placement.xml -index a801e6e..0708731 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/flash_placement.xml +index a801e6e..85d547f 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/flash_placement.xml -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/flash_placement.xml @@ -10,9 +10,9 @@ -+ - +- -- + ++ @@ -37921,10 +37921,10 @@ index a801e6e..0708731 100644 + + -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/armgcc/ble_connectivity_gcc_nrf52.ld -index f67446c..5b7dc28 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/armgcc/ble_connectivity_gcc_nrf52.ld +index f67446c..d1bb196 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/armgcc/ble_connectivity_gcc_nrf52.ld -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/armgcc/ble_connectivity_gcc_nrf52.ld @@ -6,11 +6,18 @@ GROUP(-lgcc -lc -lnosys) MEMORY { @@ -37945,36 +37945,36 @@ index f67446c..5b7dc28 100644 } SECTIONS -@@ -63,6 +70,12 @@ SECTIONS +@@ -63,12 +70,6 @@ SECTIONS KEEP(*(SORT(.log_const_data*))) PROVIDE(__stop_log_const_data = .); } > FLASH -+ .sdh_state_observers : -+ { -+ PROVIDE(__start_sdh_state_observers = .); -+ KEEP(*(SORT(.sdh_state_observers*))) -+ PROVIDE(__stop_sdh_state_observers = .); -+ } > FLASH - .sdh_stack_observers : - { - PROVIDE(__start_sdh_stack_observers = .); -@@ -75,12 +88,6 @@ SECTIONS - KEEP(*(SORT(.sdh_req_observers*))) - PROVIDE(__stop_sdh_req_observers = .); - } > FLASH -- .sdh_state_observers : +- .sdh_stack_observers : - { -- PROVIDE(__start_sdh_state_observers = .); -- KEEP(*(SORT(.sdh_state_observers*))) -- PROVIDE(__stop_sdh_state_observers = .); +- PROVIDE(__start_sdh_stack_observers = .); +- KEEP(*(SORT(.sdh_stack_observers*))) +- PROVIDE(__stop_sdh_stack_observers = .); - } > FLASH + .sdh_req_observers : + { + PROVIDE(__start_sdh_req_observers = .); +@@ -81,6 +82,12 @@ SECTIONS + KEEP(*(SORT(.sdh_state_observers*))) + PROVIDE(__stop_sdh_state_observers = .); + } > FLASH ++ .sdh_stack_observers : ++ { ++ PROVIDE(__start_sdh_stack_observers = .); ++ KEEP(*(SORT(.sdh_stack_observers*))) ++ PROVIDE(__stop_sdh_stack_observers = .); ++ } > FLASH .log_backends : { PROVIDE(__start_log_backends = .); -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/config/sdk_config.h index 17cad13..cad5969 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/config/sdk_config.h -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/config/sdk_config.h ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/config/sdk_config.h @@ -518,6 +518,136 @@ // @@ -38245,10 +38245,10 @@ index 17cad13..cad5969 100644 // NRF_BLE_BMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Bond Management Service. -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/ble_connectivity_s132_uart_pca10040.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/ble_connectivity_s132_uart_pca10040.emProject +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/ble_connectivity_s132_uart_pca10040.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/ble_connectivity_s132_uart_pca10040.emProject index 400fec8..8c8b417 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/ble_connectivity_s132_uart_pca10040.emProject -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/ble_connectivity_s132_uart_pca10040.emProject ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/ble_connectivity_s132_uart_pca10040.emProject @@ -27,8 +27,8 @@ linker_printf_width_precision_supported="Yes" linker_printf_fmt_level="long" @@ -38260,18 +38260,18 @@ index 400fec8..8c8b417 100644 project_directory="" project_type="Executable" /> -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/flash_placement.xml -index a801e6e..0708731 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/flash_placement.xml +index a801e6e..85d547f 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/flash_placement.xml -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/flash_placement.xml @@ -10,9 +10,9 @@ -+ - +- -- + ++ @@ -38283,11 +38283,11 @@ index a801e6e..0708731 100644 + + -diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/Makefile nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/Makefile +diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/Makefile nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/Makefile new file mode 100644 index 0000000..c33f1b4 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/Makefile ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/Makefile @@ -0,0 +1,262 @@ +PROJECT_NAME := ble_connectivity_132v3_hci_pca10040 +TARGETS := nrf52832_xxaa @@ -38551,11 +38551,11 @@ index 0000000..c33f1b4 +CMSIS_CONFIG_TOOL := $(SDK_ROOT)/external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar +sdk_config: + java -jar $(CMSIS_CONFIG_TOOL) $(SDK_CONFIG_FILE) -diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/ble_connectivity_gcc_nrf52.ld +diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/ble_connectivity_gcc_nrf52.ld new file mode 100644 -index 0000000..12b76c1 +index 0000000..7d40943 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/ble_connectivity_gcc_nrf52.ld @@ -0,0 +1,106 @@ +/* Linker script to configure memory regions. */ + @@ -38635,6 +38635,12 @@ index 0000000..12b76c1 + KEEP(*(.nrf_balloc)) + PROVIDE(__stop_nrf_balloc = .); + } > FLASH ++ .sdh_req_observers : ++ { ++ PROVIDE(__start_sdh_req_observers = .); ++ KEEP(*(SORT(.sdh_req_observers*))) ++ PROVIDE(__stop_sdh_req_observers = .); ++ } > FLASH + .sdh_state_observers : + { + PROVIDE(__start_sdh_state_observers = .); @@ -38647,12 +38653,6 @@ index 0000000..12b76c1 + KEEP(*(SORT(.sdh_stack_observers*))) + PROVIDE(__stop_sdh_stack_observers = .); + } > FLASH -+ .sdh_req_observers : -+ { -+ PROVIDE(__start_sdh_req_observers = .); -+ KEEP(*(SORT(.sdh_req_observers*))) -+ PROVIDE(__stop_sdh_req_observers = .); -+ } > FLASH + .log_backends : + { + PROVIDE(__start_log_backends = .); @@ -38663,11 +38663,11 @@ index 0000000..12b76c1 +} INSERT AFTER .text + +INCLUDE "nrf_common.ld" -diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/config/sdk_config.h new file mode 100644 index 0000000..19a16d1 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/config/sdk_config.h ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/config/sdk_config.h @@ -0,0 +1,4558 @@ +/** + * Copyright (c) 2017 - 2018, Nordic Semiconductor ASA @@ -43227,11 +43227,11 @@ index 0000000..19a16d1 +// <<< end of configuration section >>> +#endif //SDK_CONFIG_H + -diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_132v3_hci_pca10040.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_132v3_hci_pca10040.emProject +diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_132v3_hci_pca10040.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_132v3_hci_pca10040.emProject new file mode 100644 index 0000000..e320c53 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_132v3_hci_pca10040.emProject ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_132v3_hci_pca10040.emProject @@ -0,0 +1,154 @@ + + @@ -43387,11 +43387,11 @@ index 0000000..e320c53 + c_preprocessor_definitions="DEBUG; DEBUG_NRF" + gcc_optimization_level="None"/> + -diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_132v3_hci_pca10040.emSession nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_132v3_hci_pca10040.emSession +diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_132v3_hci_pca10040.emSession nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_132v3_hci_pca10040.emSession new file mode 100644 index 0000000..c05cfb5 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_132v3_hci_pca10040.emSession ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_132v3_hci_pca10040.emSession @@ -0,0 +1,7 @@ + + @@ -43401,11 +43401,11 @@ index 0000000..c05cfb5 + + \ No newline at end of file -diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/flash_placement.xml +diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/flash_placement.xml new file mode 100644 -index 0000000..c9cc513 +index 0000000..d9b36f6 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/flash_placement.xml @@ -0,0 +1,49 @@ + + @@ -43420,9 +43420,9 @@ index 0000000..c9cc513 + + + ++ + + -+ + + + @@ -43456,11 +43456,11 @@ index 0000000..c9cc513 + + + -diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/Makefile nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/Makefile +diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/Makefile nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/Makefile new file mode 100644 index 0000000..25fcc18 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/Makefile ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/Makefile @@ -0,0 +1,263 @@ +PROJECT_NAME := ble_connectivity_132v5_hci_pca10040 +TARGETS := nrf52832_xxaa @@ -43725,11 +43725,11 @@ index 0000000..25fcc18 +CMSIS_CONFIG_TOOL := $(SDK_ROOT)/external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar +sdk_config: + java -jar $(CMSIS_CONFIG_TOOL) $(SDK_CONFIG_FILE) -diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/ble_connectivity_gcc_nrf52.ld +diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/ble_connectivity_gcc_nrf52.ld new file mode 100644 -index 0000000..9877300 +index 0000000..04f6cc8 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/ble_connectivity_gcc_nrf52.ld @@ -0,0 +1,106 @@ +/* Linker script to configure memory regions. */ + @@ -43809,6 +43809,12 @@ index 0000000..9877300 + KEEP(*(.nrf_balloc)) + PROVIDE(__stop_nrf_balloc = .); + } > FLASH ++ .sdh_req_observers : ++ { ++ PROVIDE(__start_sdh_req_observers = .); ++ KEEP(*(SORT(.sdh_req_observers*))) ++ PROVIDE(__stop_sdh_req_observers = .); ++ } > FLASH + .sdh_state_observers : + { + PROVIDE(__start_sdh_state_observers = .); @@ -43821,12 +43827,6 @@ index 0000000..9877300 + KEEP(*(SORT(.sdh_stack_observers*))) + PROVIDE(__stop_sdh_stack_observers = .); + } > FLASH -+ .sdh_req_observers : -+ { -+ PROVIDE(__start_sdh_req_observers = .); -+ KEEP(*(SORT(.sdh_req_observers*))) -+ PROVIDE(__stop_sdh_req_observers = .); -+ } > FLASH + .log_backends : + { + PROVIDE(__start_log_backends = .); @@ -43837,11 +43837,11 @@ index 0000000..9877300 +} INSERT AFTER .text + +INCLUDE "nrf_common.ld" -diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/config/sdk_config.h new file mode 100644 index 0000000..ffe8c67 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/config/sdk_config.h ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/config/sdk_config.h @@ -0,0 +1,4579 @@ +/** + * Copyright (c) 2017 - 2018, Nordic Semiconductor ASA @@ -48422,11 +48422,11 @@ index 0000000..ffe8c67 +// <<< end of configuration section >>> +#endif //SDK_CONFIG_H + -diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_132v5_hci_pca10040.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_132v5_hci_pca10040.emProject +diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_132v5_hci_pca10040.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_132v5_hci_pca10040.emProject new file mode 100644 index 0000000..ec91733 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_132v5_hci_pca10040.emProject ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_132v5_hci_pca10040.emProject @@ -0,0 +1,155 @@ + + @@ -48583,11 +48583,11 @@ index 0000000..ec91733 + c_preprocessor_definitions="DEBUG; DEBUG_NRF" + gcc_optimization_level="None"/> + -diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_132v5_hci_pca10040.emSession nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_132v5_hci_pca10040.emSession +diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_132v5_hci_pca10040.emSession nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_132v5_hci_pca10040.emSession new file mode 100644 index 0000000..811c3c5 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_132v5_hci_pca10040.emSession ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_132v5_hci_pca10040.emSession @@ -0,0 +1,7 @@ + + @@ -48597,11 +48597,11 @@ index 0000000..811c3c5 + + \ No newline at end of file -diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/flash_placement.xml +diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/flash_placement.xml new file mode 100644 -index 0000000..c9cc513 +index 0000000..d9b36f6 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/flash_placement.xml @@ -0,0 +1,49 @@ + + @@ -48616,9 +48616,9 @@ index 0000000..c9cc513 + + + ++ + + -+ + + + @@ -48652,10 +48652,10 @@ index 0000000..c9cc513 + + + -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/armgcc/ble_connectivity_gcc_nrf52.ld -index e8a3735..7161fc8 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/armgcc/ble_connectivity_gcc_nrf52.ld +index e8a3735..9a410b0 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/armgcc/ble_connectivity_gcc_nrf52.ld -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/armgcc/ble_connectivity_gcc_nrf52.ld @@ -7,10 +7,17 @@ MEMORY { FLASH (rx) : ORIGIN = 0x19000, LENGTH = 0x17000 @@ -48674,36 +48674,36 @@ index e8a3735..7161fc8 100644 } SECTIONS -@@ -69,6 +76,12 @@ SECTIONS +@@ -69,12 +76,6 @@ SECTIONS KEEP(*(.nrf_balloc)) PROVIDE(__stop_nrf_balloc = .); } > FLASH -+ .sdh_state_observers : -+ { -+ PROVIDE(__start_sdh_state_observers = .); -+ KEEP(*(SORT(.sdh_state_observers*))) -+ PROVIDE(__stop_sdh_state_observers = .); -+ } > FLASH - .sdh_stack_observers : - { - PROVIDE(__start_sdh_stack_observers = .); -@@ -81,12 +94,6 @@ SECTIONS - KEEP(*(SORT(.sdh_req_observers*))) - PROVIDE(__stop_sdh_req_observers = .); - } > FLASH -- .sdh_state_observers : +- .sdh_stack_observers : - { -- PROVIDE(__start_sdh_state_observers = .); -- KEEP(*(SORT(.sdh_state_observers*))) -- PROVIDE(__stop_sdh_state_observers = .); +- PROVIDE(__start_sdh_stack_observers = .); +- KEEP(*(SORT(.sdh_stack_observers*))) +- PROVIDE(__stop_sdh_stack_observers = .); - } > FLASH + .sdh_req_observers : + { + PROVIDE(__start_sdh_req_observers = .); +@@ -87,6 +88,12 @@ SECTIONS + KEEP(*(SORT(.sdh_state_observers*))) + PROVIDE(__stop_sdh_state_observers = .); + } > FLASH ++ .sdh_stack_observers : ++ { ++ PROVIDE(__start_sdh_stack_observers = .); ++ KEEP(*(SORT(.sdh_stack_observers*))) ++ PROVIDE(__stop_sdh_stack_observers = .); ++ } > FLASH .log_backends : { PROVIDE(__start_log_backends = .); -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/config/sdk_config.h index 6539e77..3119381 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/config/sdk_config.h -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/config/sdk_config.h ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/config/sdk_config.h @@ -397,6 +397,136 @@ // @@ -48974,10 +48974,10 @@ index 6539e77..3119381 100644 // NRF_BLE_BMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Bond Management Service. -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/ble_connectivity_s112_hci_pca10040e.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/ble_connectivity_s112_hci_pca10040e.emProject +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/ble_connectivity_s112_hci_pca10040e.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/ble_connectivity_s112_hci_pca10040e.emProject index bbf3d52..2a6c303 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/ble_connectivity_s112_hci_pca10040e.emProject -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/ble_connectivity_s112_hci_pca10040e.emProject ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/ble_connectivity_s112_hci_pca10040e.emProject @@ -28,7 +28,7 @@ linker_printf_fmt_level="long" linker_section_placement_file="flash_placement.xml" @@ -48987,18 +48987,18 @@ index bbf3d52..2a6c303 100644 project_directory="" project_type="Executable" /> -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/flash_placement.xml -index 6b7653b..c9cc513 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/flash_placement.xml +index 6b7653b..d9b36f6 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/flash_placement.xml -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/flash_placement.xml @@ -11,9 +11,9 @@ -+ - +- -- + ++ @@ -49010,10 +49010,10 @@ index 6b7653b..c9cc513 100644 + + -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/armgcc/ble_connectivity_gcc_nrf52.ld -index 40d23f1..ce61515 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/armgcc/ble_connectivity_gcc_nrf52.ld +index 40d23f1..9ce3ba9 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/armgcc/ble_connectivity_gcc_nrf52.ld -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/armgcc/ble_connectivity_gcc_nrf52.ld @@ -7,10 +7,17 @@ MEMORY { FLASH (rx) : ORIGIN = 0x19000, LENGTH = 0x17000 @@ -49032,36 +49032,36 @@ index 40d23f1..ce61515 100644 } SECTIONS -@@ -63,6 +70,12 @@ SECTIONS +@@ -63,12 +70,6 @@ SECTIONS KEEP(*(SORT(.log_const_data*))) PROVIDE(__stop_log_const_data = .); } > FLASH -+ .sdh_state_observers : -+ { -+ PROVIDE(__start_sdh_state_observers = .); -+ KEEP(*(SORT(.sdh_state_observers*))) -+ PROVIDE(__stop_sdh_state_observers = .); -+ } > FLASH - .sdh_stack_observers : - { - PROVIDE(__start_sdh_stack_observers = .); -@@ -75,12 +88,6 @@ SECTIONS - KEEP(*(SORT(.sdh_req_observers*))) - PROVIDE(__stop_sdh_req_observers = .); - } > FLASH -- .sdh_state_observers : +- .sdh_stack_observers : - { -- PROVIDE(__start_sdh_state_observers = .); -- KEEP(*(SORT(.sdh_state_observers*))) -- PROVIDE(__stop_sdh_state_observers = .); +- PROVIDE(__start_sdh_stack_observers = .); +- KEEP(*(SORT(.sdh_stack_observers*))) +- PROVIDE(__stop_sdh_stack_observers = .); - } > FLASH + .sdh_req_observers : + { + PROVIDE(__start_sdh_req_observers = .); +@@ -81,6 +82,12 @@ SECTIONS + KEEP(*(SORT(.sdh_state_observers*))) + PROVIDE(__stop_sdh_state_observers = .); + } > FLASH ++ .sdh_stack_observers : ++ { ++ PROVIDE(__start_sdh_stack_observers = .); ++ KEEP(*(SORT(.sdh_stack_observers*))) ++ PROVIDE(__stop_sdh_stack_observers = .); ++ } > FLASH .log_backends : { PROVIDE(__start_log_backends = .); -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/config/sdk_config.h index 4adb2af..00e28ae 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/config/sdk_config.h -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/config/sdk_config.h ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/config/sdk_config.h @@ -598,6 +598,136 @@ // @@ -49332,10 +49332,10 @@ index 4adb2af..00e28ae 100644 // NRF_BLE_BMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Bond Management Service. -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/ble_connectivity_s112_spi_pca10040e.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/ble_connectivity_s112_spi_pca10040e.emProject +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/ble_connectivity_s112_spi_pca10040e.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/ble_connectivity_s112_spi_pca10040e.emProject index 89c1d8f..0dc51b4 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/ble_connectivity_s112_spi_pca10040e.emProject -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/ble_connectivity_s112_spi_pca10040e.emProject ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/ble_connectivity_s112_spi_pca10040e.emProject @@ -28,7 +28,7 @@ linker_printf_fmt_level="long" linker_section_placement_file="flash_placement.xml" @@ -49345,18 +49345,18 @@ index 89c1d8f..0dc51b4 100644 project_directory="" project_type="Executable" /> -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/flash_placement.xml -index a801e6e..0708731 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/flash_placement.xml +index a801e6e..85d547f 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/flash_placement.xml -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/flash_placement.xml @@ -10,9 +10,9 @@ -+ - +- -- + ++ @@ -49368,10 +49368,10 @@ index a801e6e..0708731 100644 + + -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld -index 40d23f1..ce61515 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld +index 40d23f1..9ce3ba9 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld @@ -7,10 +7,17 @@ MEMORY { FLASH (rx) : ORIGIN = 0x19000, LENGTH = 0x17000 @@ -49390,36 +49390,36 @@ index 40d23f1..ce61515 100644 } SECTIONS -@@ -63,6 +70,12 @@ SECTIONS +@@ -63,12 +70,6 @@ SECTIONS KEEP(*(SORT(.log_const_data*))) PROVIDE(__stop_log_const_data = .); } > FLASH -+ .sdh_state_observers : -+ { -+ PROVIDE(__start_sdh_state_observers = .); -+ KEEP(*(SORT(.sdh_state_observers*))) -+ PROVIDE(__stop_sdh_state_observers = .); -+ } > FLASH - .sdh_stack_observers : - { - PROVIDE(__start_sdh_stack_observers = .); -@@ -75,12 +88,6 @@ SECTIONS - KEEP(*(SORT(.sdh_req_observers*))) - PROVIDE(__stop_sdh_req_observers = .); - } > FLASH -- .sdh_state_observers : +- .sdh_stack_observers : - { -- PROVIDE(__start_sdh_state_observers = .); -- KEEP(*(SORT(.sdh_state_observers*))) -- PROVIDE(__stop_sdh_state_observers = .); +- PROVIDE(__start_sdh_stack_observers = .); +- KEEP(*(SORT(.sdh_stack_observers*))) +- PROVIDE(__stop_sdh_stack_observers = .); - } > FLASH + .sdh_req_observers : + { + PROVIDE(__start_sdh_req_observers = .); +@@ -81,6 +82,12 @@ SECTIONS + KEEP(*(SORT(.sdh_state_observers*))) + PROVIDE(__stop_sdh_state_observers = .); + } > FLASH ++ .sdh_stack_observers : ++ { ++ PROVIDE(__start_sdh_stack_observers = .); ++ KEEP(*(SORT(.sdh_stack_observers*))) ++ PROVIDE(__stop_sdh_stack_observers = .); ++ } > FLASH .log_backends : { PROVIDE(__start_log_backends = .); -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/config/sdk_config.h index 4adb2af..00e28ae 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/config/sdk_config.h -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/config/sdk_config.h ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/config/sdk_config.h @@ -598,6 +598,136 @@ // @@ -49690,10 +49690,10 @@ index 4adb2af..00e28ae 100644 // NRF_BLE_BMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Bond Management Service. -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/ble_connectivity_s112_spi_5W_pca10040e.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/ble_connectivity_s112_spi_5W_pca10040e.emProject +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/ble_connectivity_s112_spi_5W_pca10040e.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/ble_connectivity_s112_spi_5W_pca10040e.emProject index d1b0172..552d665 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/ble_connectivity_s112_spi_5W_pca10040e.emProject -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/ble_connectivity_s112_spi_5W_pca10040e.emProject ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/ble_connectivity_s112_spi_5W_pca10040e.emProject @@ -28,7 +28,7 @@ linker_printf_fmt_level="long" linker_section_placement_file="flash_placement.xml" @@ -49703,18 +49703,18 @@ index d1b0172..552d665 100644 project_directory="" project_type="Executable" /> -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/flash_placement.xml -index a801e6e..0708731 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/flash_placement.xml +index a801e6e..85d547f 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/flash_placement.xml -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/flash_placement.xml @@ -10,9 +10,9 @@ -+ - +- -- + ++ @@ -49726,10 +49726,10 @@ index a801e6e..0708731 100644 + + -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/armgcc/ble_connectivity_gcc_nrf52.ld -index 40d23f1..ce61515 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/armgcc/ble_connectivity_gcc_nrf52.ld +index 40d23f1..9ce3ba9 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/armgcc/ble_connectivity_gcc_nrf52.ld -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/armgcc/ble_connectivity_gcc_nrf52.ld @@ -7,10 +7,17 @@ MEMORY { FLASH (rx) : ORIGIN = 0x19000, LENGTH = 0x17000 @@ -49748,36 +49748,36 @@ index 40d23f1..ce61515 100644 } SECTIONS -@@ -63,6 +70,12 @@ SECTIONS +@@ -63,12 +70,6 @@ SECTIONS KEEP(*(SORT(.log_const_data*))) PROVIDE(__stop_log_const_data = .); } > FLASH -+ .sdh_state_observers : -+ { -+ PROVIDE(__start_sdh_state_observers = .); -+ KEEP(*(SORT(.sdh_state_observers*))) -+ PROVIDE(__stop_sdh_state_observers = .); -+ } > FLASH - .sdh_stack_observers : - { - PROVIDE(__start_sdh_stack_observers = .); -@@ -75,12 +88,6 @@ SECTIONS - KEEP(*(SORT(.sdh_req_observers*))) - PROVIDE(__stop_sdh_req_observers = .); - } > FLASH -- .sdh_state_observers : +- .sdh_stack_observers : - { -- PROVIDE(__start_sdh_state_observers = .); -- KEEP(*(SORT(.sdh_state_observers*))) -- PROVIDE(__stop_sdh_state_observers = .); +- PROVIDE(__start_sdh_stack_observers = .); +- KEEP(*(SORT(.sdh_stack_observers*))) +- PROVIDE(__stop_sdh_stack_observers = .); - } > FLASH + .sdh_req_observers : + { + PROVIDE(__start_sdh_req_observers = .); +@@ -81,6 +82,12 @@ SECTIONS + KEEP(*(SORT(.sdh_state_observers*))) + PROVIDE(__stop_sdh_state_observers = .); + } > FLASH ++ .sdh_stack_observers : ++ { ++ PROVIDE(__start_sdh_stack_observers = .); ++ KEEP(*(SORT(.sdh_stack_observers*))) ++ PROVIDE(__stop_sdh_stack_observers = .); ++ } > FLASH .log_backends : { PROVIDE(__start_log_backends = .); -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/config/sdk_config.h index 7b74df4..f0c345a 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/config/sdk_config.h -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/config/sdk_config.h ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/config/sdk_config.h @@ -397,6 +397,136 @@ // @@ -50048,10 +50048,10 @@ index 7b74df4..f0c345a 100644 // NRF_BLE_BMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Bond Management Service. -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/ble_connectivity_s112_uart_pca10040e.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/ble_connectivity_s112_uart_pca10040e.emProject +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/ble_connectivity_s112_uart_pca10040e.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/ble_connectivity_s112_uart_pca10040e.emProject index 79da171..3d7b71f 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/ble_connectivity_s112_uart_pca10040e.emProject -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/ble_connectivity_s112_uart_pca10040e.emProject ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/ble_connectivity_s112_uart_pca10040e.emProject @@ -28,7 +28,7 @@ linker_printf_fmt_level="long" linker_section_placement_file="flash_placement.xml" @@ -50061,18 +50061,18 @@ index 79da171..3d7b71f 100644 project_directory="" project_type="Executable" /> -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/flash_placement.xml -index a801e6e..0708731 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/flash_placement.xml +index a801e6e..85d547f 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/flash_placement.xml -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/flash_placement.xml @@ -10,9 +10,9 @@ -+ - +- -- + ++ @@ -50084,11 +50084,11 @@ index a801e6e..0708731 100644 + + -diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/armgcc/Makefile nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/armgcc/Makefile +diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/armgcc/Makefile nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/armgcc/Makefile new file mode 100644 index 0000000..29138b1 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/armgcc/Makefile ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/armgcc/Makefile @@ -0,0 +1,282 @@ +PROJECT_NAME := ble_connectivity_132v3_usb_hci_pca10056 +TARGETS := nrf52840_xxaa @@ -50372,11 +50372,11 @@ index 0000000..29138b1 +CMSIS_CONFIG_TOOL := $(SDK_ROOT)/external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar +sdk_config: + java -jar $(CMSIS_CONFIG_TOOL) $(SDK_CONFIG_FILE) -diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld +diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld new file mode 100644 -index 0000000..0267096 +index 0000000..12fd23c --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld @@ -0,0 +1,106 @@ +/* Linker script to configure memory regions. */ + @@ -50456,6 +50456,12 @@ index 0000000..0267096 + KEEP(*(.nrf_balloc)) + PROVIDE(__stop_nrf_balloc = .); + } > FLASH ++ .sdh_req_observers : ++ { ++ PROVIDE(__start_sdh_req_observers = .); ++ KEEP(*(SORT(.sdh_req_observers*))) ++ PROVIDE(__stop_sdh_req_observers = .); ++ } > FLASH + .sdh_state_observers : + { + PROVIDE(__start_sdh_state_observers = .); @@ -50468,12 +50474,6 @@ index 0000000..0267096 + KEEP(*(SORT(.sdh_stack_observers*))) + PROVIDE(__stop_sdh_stack_observers = .); + } > FLASH -+ .sdh_req_observers : -+ { -+ PROVIDE(__start_sdh_req_observers = .); -+ KEEP(*(SORT(.sdh_req_observers*))) -+ PROVIDE(__stop_sdh_req_observers = .); -+ } > FLASH + .log_backends : + { + PROVIDE(__start_log_backends = .); @@ -50484,11 +50484,11 @@ index 0000000..0267096 +} INSERT AFTER .text + +INCLUDE "nrf_common.ld" -diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/config/sdk_config.h new file mode 100644 index 0000000..14a8586 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/config/sdk_config.h ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/config/sdk_config.h @@ -0,0 +1,5223 @@ +/** + * Copyright (c) 2017 - 2018, Nordic Semiconductor ASA @@ -55713,11 +55713,11 @@ index 0000000..14a8586 +// <<< end of configuration section >>> +#endif //SDK_CONFIG_H + -diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10056.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10056.emProject +diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10056.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10056.emProject new file mode 100644 index 0000000..bd45579 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10056.emProject ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10056.emProject @@ -0,0 +1,169 @@ + + @@ -55888,11 +55888,11 @@ index 0000000..bd45579 + c_preprocessor_definitions="DEBUG; DEBUG_NRF" + gcc_optimization_level="None"/> + -diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10056.emSession nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10056.emSession +diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10056.emSession nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10056.emSession new file mode 100644 index 0000000..ce75e3c --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10056.emSession ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10056.emSession @@ -0,0 +1,7 @@ + + @@ -55902,11 +55902,11 @@ index 0000000..ce75e3c + + \ No newline at end of file -diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/flash_placement.xml +diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/flash_placement.xml new file mode 100644 -index 0000000..c9cc513 +index 0000000..d9b36f6 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/flash_placement.xml @@ -0,0 +1,49 @@ + + @@ -55921,9 +55921,9 @@ index 0000000..c9cc513 + + + ++ + + -+ + + + @@ -55957,11 +55957,11 @@ index 0000000..c9cc513 + + + -diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/armgcc/Makefile nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/armgcc/Makefile +diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/armgcc/Makefile nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/armgcc/Makefile new file mode 100644 index 0000000..8d850ae --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/armgcc/Makefile ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/armgcc/Makefile @@ -0,0 +1,283 @@ +PROJECT_NAME := ble_connectivity_132v5_usb_hci_pca10056 +TARGETS := nrf52840_xxaa @@ -56246,11 +56246,11 @@ index 0000000..8d850ae +CMSIS_CONFIG_TOOL := $(SDK_ROOT)/external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar +sdk_config: + java -jar $(CMSIS_CONFIG_TOOL) $(SDK_CONFIG_FILE) -diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld +diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld new file mode 100644 -index 0000000..211f001 +index 0000000..3d81a92 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld @@ -0,0 +1,106 @@ +/* Linker script to configure memory regions. */ + @@ -56330,6 +56330,12 @@ index 0000000..211f001 + KEEP(*(.nrf_balloc)) + PROVIDE(__stop_nrf_balloc = .); + } > FLASH ++ .sdh_req_observers : ++ { ++ PROVIDE(__start_sdh_req_observers = .); ++ KEEP(*(SORT(.sdh_req_observers*))) ++ PROVIDE(__stop_sdh_req_observers = .); ++ } > FLASH + .sdh_state_observers : + { + PROVIDE(__start_sdh_state_observers = .); @@ -56342,12 +56348,6 @@ index 0000000..211f001 + KEEP(*(SORT(.sdh_stack_observers*))) + PROVIDE(__stop_sdh_stack_observers = .); + } > FLASH -+ .sdh_req_observers : -+ { -+ PROVIDE(__start_sdh_req_observers = .); -+ KEEP(*(SORT(.sdh_req_observers*))) -+ PROVIDE(__stop_sdh_req_observers = .); -+ } > FLASH + .log_backends : + { + PROVIDE(__start_log_backends = .); @@ -56358,11 +56358,11 @@ index 0000000..211f001 +} INSERT AFTER .text + +INCLUDE "nrf_common.ld" -diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/config/sdk_config.h new file mode 100644 index 0000000..f0b6542 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/config/sdk_config.h ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/config/sdk_config.h @@ -0,0 +1,5244 @@ +/** + * Copyright (c) 2017 - 2018, Nordic Semiconductor ASA @@ -61608,11 +61608,11 @@ index 0000000..f0b6542 +// <<< end of configuration section >>> +#endif //SDK_CONFIG_H + -diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/ble_connectivity_132v5_usb_hci_pca10056.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/ble_connectivity_132v5_usb_hci_pca10056.emProject +diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/ble_connectivity_132v5_usb_hci_pca10056.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/ble_connectivity_132v5_usb_hci_pca10056.emProject new file mode 100644 index 0000000..d93607c --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/ble_connectivity_132v5_usb_hci_pca10056.emProject ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/ble_connectivity_132v5_usb_hci_pca10056.emProject @@ -0,0 +1,170 @@ + + @@ -61784,11 +61784,11 @@ index 0000000..d93607c + c_preprocessor_definitions="DEBUG; DEBUG_NRF" + gcc_optimization_level="None"/> + -diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/ble_connectivity_132v5_usb_hci_pca10056.emSession nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/ble_connectivity_132v5_usb_hci_pca10056.emSession +diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/ble_connectivity_132v5_usb_hci_pca10056.emSession nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/ble_connectivity_132v5_usb_hci_pca10056.emSession new file mode 100644 index 0000000..6c26dd1 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/ble_connectivity_132v5_usb_hci_pca10056.emSession ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/ble_connectivity_132v5_usb_hci_pca10056.emSession @@ -0,0 +1,7 @@ + + @@ -61798,11 +61798,11 @@ index 0000000..6c26dd1 + + \ No newline at end of file -diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/flash_placement.xml +diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/flash_placement.xml new file mode 100644 -index 0000000..c9cc513 +index 0000000..d9b36f6 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/flash_placement.xml @@ -0,0 +1,49 @@ + + @@ -61817,9 +61817,9 @@ index 0000000..c9cc513 + + + ++ + + -+ + + + @@ -61853,10 +61853,10 @@ index 0000000..c9cc513 + + + -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/Makefile nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/Makefile +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/Makefile nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/Makefile index 87059cc..0d8cc08 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/Makefile -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/Makefile ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/Makefile @@ -85,6 +85,7 @@ SRC_FILES += \ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_clock.c \ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power_clock.c \ @@ -61865,10 +61865,10 @@ index 87059cc..0d8cc08 100644 $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uart.c \ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uarte.c \ $(PROJ_DIR)/main.c \ -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/ble_connectivity_gcc_nrf52.ld -index b877f5a..f354cbc 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/ble_connectivity_gcc_nrf52.ld +index b877f5a..6816cb2 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/ble_connectivity_gcc_nrf52.ld -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/ble_connectivity_gcc_nrf52.ld @@ -7,10 +7,17 @@ MEMORY { FLASH (rx) : ORIGIN = 0x26000, LENGTH = 0xda000 @@ -61887,36 +61887,36 @@ index b877f5a..f354cbc 100644 } SECTIONS -@@ -69,6 +76,12 @@ SECTIONS +@@ -69,12 +76,6 @@ SECTIONS KEEP(*(.nrf_balloc)) PROVIDE(__stop_nrf_balloc = .); } > FLASH -+ .sdh_state_observers : -+ { -+ PROVIDE(__start_sdh_state_observers = .); -+ KEEP(*(SORT(.sdh_state_observers*))) -+ PROVIDE(__stop_sdh_state_observers = .); -+ } > FLASH - .sdh_stack_observers : - { - PROVIDE(__start_sdh_stack_observers = .); -@@ -81,12 +94,6 @@ SECTIONS - KEEP(*(SORT(.sdh_req_observers*))) - PROVIDE(__stop_sdh_req_observers = .); - } > FLASH -- .sdh_state_observers : +- .sdh_stack_observers : - { -- PROVIDE(__start_sdh_state_observers = .); -- KEEP(*(SORT(.sdh_state_observers*))) -- PROVIDE(__stop_sdh_state_observers = .); +- PROVIDE(__start_sdh_stack_observers = .); +- KEEP(*(SORT(.sdh_stack_observers*))) +- PROVIDE(__stop_sdh_stack_observers = .); - } > FLASH + .sdh_req_observers : + { + PROVIDE(__start_sdh_req_observers = .); +@@ -87,6 +88,12 @@ SECTIONS + KEEP(*(SORT(.sdh_state_observers*))) + PROVIDE(__stop_sdh_state_observers = .); + } > FLASH ++ .sdh_stack_observers : ++ { ++ PROVIDE(__start_sdh_stack_observers = .); ++ KEEP(*(SORT(.sdh_stack_observers*))) ++ PROVIDE(__stop_sdh_stack_observers = .); ++ } > FLASH .log_backends : { PROVIDE(__start_log_backends = .); -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/config/sdk_config.h index 793e569..d43945e 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/config/sdk_config.h -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/config/sdk_config.h ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/config/sdk_config.h @@ -240,6 +240,134 @@ // @@ -62337,10 +62337,10 @@ index 793e569..d43945e 100644 // NRF_BLE_BMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Bond Management Service. -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/ble_connectivity_s140_hci_pca10056.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/ble_connectivity_s140_hci_pca10056.emProject +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/ble_connectivity_s140_hci_pca10056.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/ble_connectivity_s140_hci_pca10056.emProject index f64c3a0..0221ede 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/ble_connectivity_s140_hci_pca10056.emProject -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/ble_connectivity_s140_hci_pca10056.emProject ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/ble_connectivity_s140_hci_pca10056.emProject @@ -28,7 +28,7 @@ linker_printf_fmt_level="long" linker_section_placement_file="flash_placement.xml" @@ -62358,18 +62358,18 @@ index f64c3a0..0221ede 100644 -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/flash_placement.xml -index 6b7653b..c9cc513 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/flash_placement.xml +index 6b7653b..d9b36f6 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/flash_placement.xml -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/flash_placement.xml @@ -11,9 +11,9 @@ -+ - +- -- + ++ @@ -62381,10 +62381,10 @@ index 6b7653b..c9cc513 100644 + + -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/Makefile nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/Makefile +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/Makefile nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/Makefile index f5648fe..98f1192 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/Makefile -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/Makefile ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/Makefile @@ -83,6 +83,7 @@ SRC_FILES += \ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_gpiote.c \ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power_clock.c \ @@ -62393,10 +62393,10 @@ index f5648fe..98f1192 100644 $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_spis.c \ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uart.c \ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uarte.c \ -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/ble_connectivity_gcc_nrf52.ld -index d3acaad..a5e33ee 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/ble_connectivity_gcc_nrf52.ld +index d3acaad..5af9fbd 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/ble_connectivity_gcc_nrf52.ld -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/ble_connectivity_gcc_nrf52.ld @@ -7,10 +7,17 @@ MEMORY { FLASH (rx) : ORIGIN = 0x26000, LENGTH = 0xda000 @@ -62415,36 +62415,36 @@ index d3acaad..a5e33ee 100644 } SECTIONS -@@ -63,6 +70,12 @@ SECTIONS +@@ -63,12 +70,6 @@ SECTIONS KEEP(*(SORT(.log_const_data*))) PROVIDE(__stop_log_const_data = .); } > FLASH -+ .sdh_state_observers : -+ { -+ PROVIDE(__start_sdh_state_observers = .); -+ KEEP(*(SORT(.sdh_state_observers*))) -+ PROVIDE(__stop_sdh_state_observers = .); -+ } > FLASH - .sdh_stack_observers : - { - PROVIDE(__start_sdh_stack_observers = .); -@@ -75,12 +88,6 @@ SECTIONS - KEEP(*(SORT(.sdh_req_observers*))) - PROVIDE(__stop_sdh_req_observers = .); - } > FLASH -- .sdh_state_observers : +- .sdh_stack_observers : - { -- PROVIDE(__start_sdh_state_observers = .); -- KEEP(*(SORT(.sdh_state_observers*))) -- PROVIDE(__stop_sdh_state_observers = .); +- PROVIDE(__start_sdh_stack_observers = .); +- KEEP(*(SORT(.sdh_stack_observers*))) +- PROVIDE(__stop_sdh_stack_observers = .); - } > FLASH + .sdh_req_observers : + { + PROVIDE(__start_sdh_req_observers = .); +@@ -81,6 +82,12 @@ SECTIONS + KEEP(*(SORT(.sdh_state_observers*))) + PROVIDE(__stop_sdh_state_observers = .); + } > FLASH ++ .sdh_stack_observers : ++ { ++ PROVIDE(__start_sdh_stack_observers = .); ++ KEEP(*(SORT(.sdh_stack_observers*))) ++ PROVIDE(__stop_sdh_stack_observers = .); ++ } > FLASH .log_backends : { PROVIDE(__start_log_backends = .); -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/config/sdk_config.h index ba4721d..0c83e4d 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/config/sdk_config.h -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/config/sdk_config.h ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/config/sdk_config.h @@ -347,6 +347,134 @@ // @@ -62865,10 +62865,10 @@ index ba4721d..0c83e4d 100644 // NRF_BLE_BMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Bond Management Service. -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/ble_connectivity_s140_spi_pca10056.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/ble_connectivity_s140_spi_pca10056.emProject +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/ble_connectivity_s140_spi_pca10056.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/ble_connectivity_s140_spi_pca10056.emProject index a71ed2f..430528f 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/ble_connectivity_s140_spi_pca10056.emProject -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/ble_connectivity_s140_spi_pca10056.emProject ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/ble_connectivity_s140_spi_pca10056.emProject @@ -28,7 +28,7 @@ linker_printf_fmt_level="long" linker_section_placement_file="flash_placement.xml" @@ -62886,18 +62886,18 @@ index a71ed2f..430528f 100644 -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/flash_placement.xml -index a801e6e..0708731 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/flash_placement.xml +index a801e6e..85d547f 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/flash_placement.xml -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/flash_placement.xml @@ -10,9 +10,9 @@ -+ - +- -- + ++ @@ -62909,10 +62909,10 @@ index a801e6e..0708731 100644 + + -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/Makefile nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/Makefile +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/Makefile nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/Makefile index e498e6c..1147b6f 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/Makefile -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/Makefile ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/Makefile @@ -83,6 +83,7 @@ SRC_FILES += \ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_gpiote.c \ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power_clock.c \ @@ -62921,10 +62921,10 @@ index e498e6c..1147b6f 100644 $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_spis.c \ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uart.c \ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uarte.c \ -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld -index d3acaad..a5e33ee 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld +index d3acaad..5af9fbd 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld @@ -7,10 +7,17 @@ MEMORY { FLASH (rx) : ORIGIN = 0x26000, LENGTH = 0xda000 @@ -62943,36 +62943,36 @@ index d3acaad..a5e33ee 100644 } SECTIONS -@@ -63,6 +70,12 @@ SECTIONS +@@ -63,12 +70,6 @@ SECTIONS KEEP(*(SORT(.log_const_data*))) PROVIDE(__stop_log_const_data = .); } > FLASH -+ .sdh_state_observers : -+ { -+ PROVIDE(__start_sdh_state_observers = .); -+ KEEP(*(SORT(.sdh_state_observers*))) -+ PROVIDE(__stop_sdh_state_observers = .); -+ } > FLASH - .sdh_stack_observers : - { - PROVIDE(__start_sdh_stack_observers = .); -@@ -75,12 +88,6 @@ SECTIONS - KEEP(*(SORT(.sdh_req_observers*))) - PROVIDE(__stop_sdh_req_observers = .); - } > FLASH -- .sdh_state_observers : +- .sdh_stack_observers : - { -- PROVIDE(__start_sdh_state_observers = .); -- KEEP(*(SORT(.sdh_state_observers*))) -- PROVIDE(__stop_sdh_state_observers = .); +- PROVIDE(__start_sdh_stack_observers = .); +- KEEP(*(SORT(.sdh_stack_observers*))) +- PROVIDE(__stop_sdh_stack_observers = .); - } > FLASH + .sdh_req_observers : + { + PROVIDE(__start_sdh_req_observers = .); +@@ -81,6 +82,12 @@ SECTIONS + KEEP(*(SORT(.sdh_state_observers*))) + PROVIDE(__stop_sdh_state_observers = .); + } > FLASH ++ .sdh_stack_observers : ++ { ++ PROVIDE(__start_sdh_stack_observers = .); ++ KEEP(*(SORT(.sdh_stack_observers*))) ++ PROVIDE(__stop_sdh_stack_observers = .); ++ } > FLASH .log_backends : { PROVIDE(__start_log_backends = .); -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/config/sdk_config.h index ba4721d..0c83e4d 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/config/sdk_config.h -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/config/sdk_config.h ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/config/sdk_config.h @@ -347,6 +347,134 @@ // @@ -63393,10 +63393,10 @@ index ba4721d..0c83e4d 100644 // NRF_BLE_BMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Bond Management Service. -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/ble_connectivity_s140_spi_5W_pca10056.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/ble_connectivity_s140_spi_5W_pca10056.emProject +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/ble_connectivity_s140_spi_5W_pca10056.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/ble_connectivity_s140_spi_5W_pca10056.emProject index a95d1a5..44ff831 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/ble_connectivity_s140_spi_5W_pca10056.emProject -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/ble_connectivity_s140_spi_5W_pca10056.emProject ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/ble_connectivity_s140_spi_5W_pca10056.emProject @@ -28,7 +28,7 @@ linker_printf_fmt_level="long" linker_section_placement_file="flash_placement.xml" @@ -63414,18 +63414,18 @@ index a95d1a5..44ff831 100644 -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/flash_placement.xml -index a801e6e..0708731 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/flash_placement.xml +index a801e6e..85d547f 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/flash_placement.xml -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/flash_placement.xml @@ -10,9 +10,9 @@ -+ - +- -- + ++ @@ -63437,10 +63437,10 @@ index a801e6e..0708731 100644 + + -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/Makefile nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/Makefile +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/Makefile nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/Makefile index aad2de3..d3b8468 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/Makefile -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/Makefile ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/Makefile @@ -81,6 +81,7 @@ SRC_FILES += \ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_clock.c \ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power_clock.c \ @@ -63449,10 +63449,10 @@ index aad2de3..d3b8468 100644 $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uart.c \ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uarte.c \ $(PROJ_DIR)/main.c \ -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/ble_connectivity_gcc_nrf52.ld -index d3acaad..a5e33ee 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/ble_connectivity_gcc_nrf52.ld +index d3acaad..5af9fbd 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/ble_connectivity_gcc_nrf52.ld -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/ble_connectivity_gcc_nrf52.ld @@ -7,10 +7,17 @@ MEMORY { FLASH (rx) : ORIGIN = 0x26000, LENGTH = 0xda000 @@ -63471,36 +63471,36 @@ index d3acaad..a5e33ee 100644 } SECTIONS -@@ -63,6 +70,12 @@ SECTIONS +@@ -63,12 +70,6 @@ SECTIONS KEEP(*(SORT(.log_const_data*))) PROVIDE(__stop_log_const_data = .); } > FLASH -+ .sdh_state_observers : -+ { -+ PROVIDE(__start_sdh_state_observers = .); -+ KEEP(*(SORT(.sdh_state_observers*))) -+ PROVIDE(__stop_sdh_state_observers = .); -+ } > FLASH - .sdh_stack_observers : - { - PROVIDE(__start_sdh_stack_observers = .); -@@ -75,12 +88,6 @@ SECTIONS - KEEP(*(SORT(.sdh_req_observers*))) - PROVIDE(__stop_sdh_req_observers = .); - } > FLASH -- .sdh_state_observers : +- .sdh_stack_observers : - { -- PROVIDE(__start_sdh_state_observers = .); -- KEEP(*(SORT(.sdh_state_observers*))) -- PROVIDE(__stop_sdh_state_observers = .); +- PROVIDE(__start_sdh_stack_observers = .); +- KEEP(*(SORT(.sdh_stack_observers*))) +- PROVIDE(__stop_sdh_stack_observers = .); - } > FLASH + .sdh_req_observers : + { + PROVIDE(__start_sdh_req_observers = .); +@@ -81,6 +82,12 @@ SECTIONS + KEEP(*(SORT(.sdh_state_observers*))) + PROVIDE(__stop_sdh_state_observers = .); + } > FLASH ++ .sdh_stack_observers : ++ { ++ PROVIDE(__start_sdh_stack_observers = .); ++ KEEP(*(SORT(.sdh_stack_observers*))) ++ PROVIDE(__stop_sdh_stack_observers = .); ++ } > FLASH .log_backends : { PROVIDE(__start_log_backends = .); -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/config/sdk_config.h index 36b0fe4..bc8c8d0 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/config/sdk_config.h -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/config/sdk_config.h ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/config/sdk_config.h @@ -240,6 +240,134 @@ // @@ -63921,10 +63921,10 @@ index 36b0fe4..bc8c8d0 100644 // NRF_BLE_BMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Bond Management Service. -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/ble_connectivity_s140_uart_pca10056.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/ble_connectivity_s140_uart_pca10056.emProject +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/ble_connectivity_s140_uart_pca10056.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/ble_connectivity_s140_uart_pca10056.emProject index 228cf40..29b2865 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/ble_connectivity_s140_uart_pca10056.emProject -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/ble_connectivity_s140_uart_pca10056.emProject ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/ble_connectivity_s140_uart_pca10056.emProject @@ -28,7 +28,7 @@ linker_printf_fmt_level="long" linker_section_placement_file="flash_placement.xml" @@ -63942,18 +63942,18 @@ index 228cf40..29b2865 100644 -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/flash_placement.xml -index a801e6e..0708731 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/flash_placement.xml +index a801e6e..85d547f 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/flash_placement.xml -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/flash_placement.xml @@ -10,9 +10,9 @@ -+ - +- -- + ++ @@ -63965,10 +63965,10 @@ index a801e6e..0708731 100644 + + -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/Makefile nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/Makefile +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/Makefile nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/Makefile index 07cf7c6..b4c2628 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/Makefile -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/Makefile ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/Makefile @@ -25,6 +25,7 @@ SRC_FILES += \ $(SDK_ROOT)/components/libraries/usbd/app_usbd.c \ $(SDK_ROOT)/components/libraries/usbd/class/cdc/acm/app_usbd_cdc_acm.c \ @@ -64037,10 +64037,10 @@ index 07cf7c6..b4c2628 100644 ASMFLAGS += -DSOFTDEVICE_PRESENT ASMFLAGS += -DSWI_DISABLE0 -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld -index b877f5a..f354cbc 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld +index b877f5a..6816cb2 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld @@ -7,10 +7,17 @@ MEMORY { FLASH (rx) : ORIGIN = 0x26000, LENGTH = 0xda000 @@ -64059,36 +64059,36 @@ index b877f5a..f354cbc 100644 } SECTIONS -@@ -69,6 +76,12 @@ SECTIONS +@@ -69,12 +76,6 @@ SECTIONS KEEP(*(.nrf_balloc)) PROVIDE(__stop_nrf_balloc = .); } > FLASH -+ .sdh_state_observers : -+ { -+ PROVIDE(__start_sdh_state_observers = .); -+ KEEP(*(SORT(.sdh_state_observers*))) -+ PROVIDE(__stop_sdh_state_observers = .); -+ } > FLASH - .sdh_stack_observers : - { - PROVIDE(__start_sdh_stack_observers = .); -@@ -81,12 +94,6 @@ SECTIONS - KEEP(*(SORT(.sdh_req_observers*))) - PROVIDE(__stop_sdh_req_observers = .); - } > FLASH -- .sdh_state_observers : +- .sdh_stack_observers : - { -- PROVIDE(__start_sdh_state_observers = .); -- KEEP(*(SORT(.sdh_state_observers*))) -- PROVIDE(__stop_sdh_state_observers = .); +- PROVIDE(__start_sdh_stack_observers = .); +- KEEP(*(SORT(.sdh_stack_observers*))) +- PROVIDE(__stop_sdh_stack_observers = .); - } > FLASH + .sdh_req_observers : + { + PROVIDE(__start_sdh_req_observers = .); +@@ -87,6 +88,12 @@ SECTIONS + KEEP(*(SORT(.sdh_state_observers*))) + PROVIDE(__stop_sdh_state_observers = .); + } > FLASH ++ .sdh_stack_observers : ++ { ++ PROVIDE(__start_sdh_stack_observers = .); ++ KEEP(*(SORT(.sdh_stack_observers*))) ++ PROVIDE(__stop_sdh_stack_observers = .); ++ } > FLASH .log_backends : { PROVIDE(__start_log_backends = .); -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/config/sdk_config.h index 994863b..14a8586 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/config/sdk_config.h -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/config/sdk_config.h ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/config/sdk_config.h @@ -46,6 +46,102 @@ #ifdef USE_APP_CONFIG #include "app_config.h" @@ -64635,10 +64635,10 @@ index 994863b..14a8586 100644 // NRF_BLE_BMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Bond Management Service. -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10056.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10056.emProject +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10056.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10056.emProject index 571ebbb..6be7f69 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10056.emProject -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10056.emProject ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10056.emProject @@ -15,8 +15,8 @@ arm_simulator_memory_simulation_parameter="RWX 00000000,00100000,FFFFFFFF;RWX 20000000,00010000,CDCDCDCD" arm_target_device_name="nRF52840_xxAA" @@ -64683,18 +64683,18 @@ index 571ebbb..6be7f69 100644 -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/flash_placement.xml -index 6b7653b..c9cc513 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/flash_placement.xml +index 6b7653b..d9b36f6 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/flash_placement.xml -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/flash_placement.xml @@ -11,9 +11,9 @@ -+ - +- -- + ++ @@ -64706,11 +64706,11 @@ index 6b7653b..c9cc513 100644 + + -diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/Makefile nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/Makefile +diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/Makefile nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/Makefile new file mode 100644 index 0000000..b704d10 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/Makefile ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/Makefile @@ -0,0 +1,282 @@ +PROJECT_NAME := ble_connectivity_132v3_usb_hci_pca10059 +TARGETS := nrf52840_xxaa @@ -64994,11 +64994,11 @@ index 0000000..b704d10 +CMSIS_CONFIG_TOOL := $(SDK_ROOT)/external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar +sdk_config: + java -jar $(CMSIS_CONFIG_TOOL) $(SDK_CONFIG_FILE) -diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld +diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld new file mode 100644 -index 0000000..0267096 +index 0000000..12fd23c --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld @@ -0,0 +1,106 @@ +/* Linker script to configure memory regions. */ + @@ -65078,6 +65078,12 @@ index 0000000..0267096 + KEEP(*(.nrf_balloc)) + PROVIDE(__stop_nrf_balloc = .); + } > FLASH ++ .sdh_req_observers : ++ { ++ PROVIDE(__start_sdh_req_observers = .); ++ KEEP(*(SORT(.sdh_req_observers*))) ++ PROVIDE(__stop_sdh_req_observers = .); ++ } > FLASH + .sdh_state_observers : + { + PROVIDE(__start_sdh_state_observers = .); @@ -65090,12 +65096,6 @@ index 0000000..0267096 + KEEP(*(SORT(.sdh_stack_observers*))) + PROVIDE(__stop_sdh_stack_observers = .); + } > FLASH -+ .sdh_req_observers : -+ { -+ PROVIDE(__start_sdh_req_observers = .); -+ KEEP(*(SORT(.sdh_req_observers*))) -+ PROVIDE(__stop_sdh_req_observers = .); -+ } > FLASH + .log_backends : + { + PROVIDE(__start_log_backends = .); @@ -65106,11 +65106,11 @@ index 0000000..0267096 +} INSERT AFTER .text + +INCLUDE "nrf_common.ld" -diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/config/sdk_config.h new file mode 100644 index 0000000..c244199 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/config/sdk_config.h ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/config/sdk_config.h @@ -0,0 +1,5223 @@ +/** + * Copyright (c) 2017 - 2018, Nordic Semiconductor ASA @@ -70335,11 +70335,11 @@ index 0000000..c244199 +// <<< end of configuration section >>> +#endif //SDK_CONFIG_H + -diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10059.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10059.emProject +diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10059.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10059.emProject new file mode 100644 index 0000000..735cba9 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10059.emProject ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10059.emProject @@ -0,0 +1,169 @@ + + @@ -70510,11 +70510,11 @@ index 0000000..735cba9 + c_preprocessor_definitions="DEBUG; DEBUG_NRF" + gcc_optimization_level="None"/> + -diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10059.emSession nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10059.emSession +diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10059.emSession nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10059.emSession new file mode 100644 index 0000000..22c73f1 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10059.emSession ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10059.emSession @@ -0,0 +1,7 @@ + + @@ -70524,11 +70524,11 @@ index 0000000..22c73f1 + + \ No newline at end of file -diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/flash_placement.xml +diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/flash_placement.xml new file mode 100644 -index 0000000..c9cc513 +index 0000000..d9b36f6 --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/flash_placement.xml @@ -0,0 +1,49 @@ + + @@ -70543,9 +70543,9 @@ index 0000000..c9cc513 + + + ++ + + -+ + + + @@ -70579,10 +70579,10 @@ index 0000000..c9cc513 + + + -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/Makefile nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/Makefile +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/Makefile nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/Makefile index 33053bc..b4bde15 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/Makefile -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/Makefile ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/Makefile @@ -96,6 +96,7 @@ SRC_FILES += \ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power.c \ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power_clock.c \ @@ -70607,10 +70607,10 @@ index 33053bc..b4bde15 100644 ASMFLAGS += -DSOFTDEVICE_PRESENT ASMFLAGS += -DSWI_DISABLE0 -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld -index b877f5a..f354cbc 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld +index b877f5a..6816cb2 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld @@ -7,10 +7,17 @@ MEMORY { FLASH (rx) : ORIGIN = 0x26000, LENGTH = 0xda000 @@ -70629,36 +70629,36 @@ index b877f5a..f354cbc 100644 } SECTIONS -@@ -69,6 +76,12 @@ SECTIONS +@@ -69,12 +76,6 @@ SECTIONS KEEP(*(.nrf_balloc)) PROVIDE(__stop_nrf_balloc = .); } > FLASH -+ .sdh_state_observers : -+ { -+ PROVIDE(__start_sdh_state_observers = .); -+ KEEP(*(SORT(.sdh_state_observers*))) -+ PROVIDE(__stop_sdh_state_observers = .); -+ } > FLASH - .sdh_stack_observers : - { - PROVIDE(__start_sdh_stack_observers = .); -@@ -81,12 +94,6 @@ SECTIONS - KEEP(*(SORT(.sdh_req_observers*))) - PROVIDE(__stop_sdh_req_observers = .); - } > FLASH -- .sdh_state_observers : +- .sdh_stack_observers : - { -- PROVIDE(__start_sdh_state_observers = .); -- KEEP(*(SORT(.sdh_state_observers*))) -- PROVIDE(__stop_sdh_state_observers = .); +- PROVIDE(__start_sdh_stack_observers = .); +- KEEP(*(SORT(.sdh_stack_observers*))) +- PROVIDE(__stop_sdh_stack_observers = .); - } > FLASH + .sdh_req_observers : + { + PROVIDE(__start_sdh_req_observers = .); +@@ -87,6 +88,12 @@ SECTIONS + KEEP(*(SORT(.sdh_state_observers*))) + PROVIDE(__stop_sdh_state_observers = .); + } > FLASH ++ .sdh_stack_observers : ++ { ++ PROVIDE(__start_sdh_stack_observers = .); ++ KEEP(*(SORT(.sdh_stack_observers*))) ++ PROVIDE(__stop_sdh_stack_observers = .); ++ } > FLASH .log_backends : { PROVIDE(__start_log_backends = .); -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/config/sdk_config.h index bb385de..c244199 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/config/sdk_config.h -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/config/sdk_config.h ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/config/sdk_config.h @@ -133,7 +133,7 @@ // gaps. Tailor this value to adhere to this limitation. @@ -71097,10 +71097,10 @@ index bb385de..c244199 100644 // NRF_BLE_BMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Bond Management Service. -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10059.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10059.emProject +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10059.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10059.emProject index c7771fd..e6a0b2c 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10059.emProject -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10059.emProject ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10059.emProject @@ -16,7 +16,7 @@ arm_target_device_name="nRF52840_xxAA" arm_target_interface_type="SWD" @@ -71127,18 +71127,18 @@ index c7771fd..e6a0b2c 100644 -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/flash_placement.xml -index 6b7653b..c9cc513 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/flash_placement.xml +index 6b7653b..d9b36f6 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/flash_placement.xml -+++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/flash_placement.xml @@ -11,9 +11,9 @@ -+ - +- -- + ++ @@ -71150,10 +71150,10 @@ index 6b7653b..c9cc513 100644 + + -diff --git nRF5_SDK_15.2.0_9412b96/examples/dfu/dfu_public_key.c nRF5_SDK_15.2.0_80108de/examples/dfu/dfu_public_key.c +diff --git nRF5_SDK_15.2.0_9412b96/examples/dfu/dfu_public_key.c nRF5_SDK_15.2.0_f8cd40a/examples/dfu/dfu_public_key.c index e483589..8629005 100644 --- nRF5_SDK_15.2.0_9412b96/examples/dfu/dfu_public_key.c -+++ nRF5_SDK_15.2.0_80108de/examples/dfu/dfu_public_key.c ++++ nRF5_SDK_15.2.0_f8cd40a/examples/dfu/dfu_public_key.c @@ -1,30 +1,51 @@ +/** + * Copyright (c) 2010 - 2018, Nordic Semiconductor ASA @@ -71228,11 +71228,11 @@ index e483589..8629005 100644 -#else -#error "Debug public key not valid for production. Please see https://github.com/NordicSemiconductor/pc-nrfutil/blob/master/README.md to generate it" -#endif -diff --git nRF5_SDK_15.2.0_80108de/examples/readme.txt nRF5_SDK_15.2.0_80108de/examples/readme.txt +diff --git nRF5_SDK_15.2.0_f8cd40a/examples/readme.txt nRF5_SDK_15.2.0_f8cd40a/examples/readme.txt new file mode 100644 index 0000000..ac71eca --- /dev/null -+++ nRF5_SDK_15.2.0_80108de/examples/readme.txt ++++ nRF5_SDK_15.2.0_f8cd40a/examples/readme.txt @@ -0,0 +1,14 @@ +Matrix shows which board is supported by given example + @@ -71248,10 +71248,10 @@ index 0000000..ac71eca +-------------------------------------------------------------------------- +connectivity\ble_connectivity | * | | * | * | | * | +-------------------------------------------------------------------------- -diff --git nRF5_SDK_15.2.0_9412b96/integration/nrfx/legacy/nrf_drv_power.c nRF5_SDK_15.2.0_80108de/integration/nrfx/legacy/nrf_drv_power.c +diff --git nRF5_SDK_15.2.0_9412b96/integration/nrfx/legacy/nrf_drv_power.c nRF5_SDK_15.2.0_f8cd40a/integration/nrfx/legacy/nrf_drv_power.c index bba3d13..139d375 100644 --- nRF5_SDK_15.2.0_9412b96/integration/nrfx/legacy/nrf_drv_power.c -+++ nRF5_SDK_15.2.0_80108de/integration/nrfx/legacy/nrf_drv_power.c ++++ nRF5_SDK_15.2.0_f8cd40a/integration/nrfx/legacy/nrf_drv_power.c @@ -47,6 +47,14 @@ #include "nrf_sdh_soc.h" #endif From 08b10bb315c89850e19cb583d23cfdeaeba65f3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ken=20A=2E=20Rederg=C3=A5rd?= <64542+kenr@users.noreply.github.com> Date: Wed, 19 Dec 2018 11:24:01 +0100 Subject: [PATCH 07/32] Fix connectivity version in DFU (#183) --- hex/CMakeLists.txt | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/hex/CMakeLists.txt b/hex/CMakeLists.txt index a7a83e0a6..152193054 100644 --- a/hex/CMakeLists.txt +++ b/hex/CMakeLists.txt @@ -218,10 +218,17 @@ function(nrf_create_connectivity_compile_targets) message(STATUS "Running make:${MAKE} in ARMGCC_PROJECT_DIRECTORY:${ARMGCC_PROJECT_DIRECTORY}") + # Add CFLAGS that specify application version, used by SDFU + set(MAJOR) + set(MINOR) + set(PATCH) + nrf_extract_version_number("${CONNECTIVITY_VERSION}" MAJOR MINOR PATCH) + set(VERSION_CFLAGS "-DAPP_VERSION_MAJOR=${MAJOR} -DAPP_VERSION_MINOR=${MINOR} -DAPP_VERSION_PATCH=${PATCH}") + # Compile project add_custom_command( OUTPUT "${COMMAND_NAME}" - APPEND COMMAND ${MAKE} + APPEND COMMAND ${CMAKE_COMMAND} -E env CFLAGS=${VERSION_CFLAGS} ${MAKE} ) set(HEX_MERGED "${TARGET_NAME}.hex") @@ -272,7 +279,7 @@ function(nrf_create_connectivity_compile_targets) # Copy connectivity hex file to binary make_directory add_custom_command( OUTPUT "${COMMAND_NAME}" - APPEND COMMAND ${CMAKE_COMMAND} -E copy "${APP_HEX_PATH}" "${OUTPUT_DIRECTORY}/${CONNECTIVITY_NAME}.hex" + APPEND COMMAND ${CMAKE_COMMAND} -E copy "${APP_HEX_PATH}" "${OUTPUT_DIRECTORY}/${CONNECTIVITY_NAME}_for_${SD_VERSION}_${SD_API_VERSION}.hex" ) endif() endif() From 4ee5bf2d1ca34f5519779f698e01d2d15251f040 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ken=20A=2E=20Rederg=C3=A5rd?= <64542+kenr@users.noreply.github.com> Date: Wed, 19 Dec 2018 11:24:26 +0100 Subject: [PATCH 08/32] Wrong PIN number for reset on PCA10056 (#182) Documentation stated P0.16 and P0.24 must be connected, the correct pins are P0.18 and P0.24. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c5d19f4a7..d5f54db66 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ The generated libraries are compatible with the following SoftDevice API version | PCA10056 | nRF52840 { Development Kit } | nRF6828 | *) | | PCA10059 | nRF52840 { Dongle } | nRF6829 | Can only use connectivity firmware with Nordic USB CDC serial port support | -*) Can use both Nordic USB CDC serial port version and SEGGER J-Link-OB (VCOM) version. Using Nordic USB CDC serial port version on PCA10056 requires that you connect pins P0.16 and P0.24. The pins to QSPI chip must also be in place (they are by default). The algorithm for detecting if it is PCA10056 or PCA10059 is to check if it is possible to communicate with the QSPI chip. PCA10059 does not have a QSPI chip. The detection is used by nRF Connect DFU trigger to determine what pin to use for resetting the device when changing between DFU and application mode. +*) Can use both Nordic USB CDC serial port version and SEGGER J-Link-OB (VCOM) version. Using Nordic USB CDC serial port version on PCA10056 requires that you connect pins P0.18 and P0.24. The pins to QSPI chip must also be in place (they are by default). The algorithm for detecting if it is PCA10056 or PCA10059 is to check if it is possible to communicate with the QSPI chip. PCA10059 does not have a QSPI chip. The detection is used by nRF Connect DFU trigger to determine what pin to use for resetting the device when changing between DFU and application mode. --- From 2ee416ab4acd29a765e0fabf8893b105c6016b54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ken=20A=2E=20Rederg=C3=A5rd?= <64542+kenr@users.noreply.github.com> Date: Thu, 20 Dec 2018 12:13:30 +0100 Subject: [PATCH 09/32] Fix test_util_adapter_wrapper to use provided MTU in SD > 3 (#184) --- test/util/src/test_util_adapter_wrapper.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/util/src/test_util_adapter_wrapper.cpp b/test/util/src/test_util_adapter_wrapper.cpp index d74da5806..8c8c62773 100644 --- a/test/util/src/test_util_adapter_wrapper.cpp +++ b/test/util/src/test_util_adapter_wrapper.cpp @@ -903,9 +903,10 @@ void AdapterWrapper::setupScratchpad(const uint16_t mtu) scratchpad.common_opt.conn_bw.conn_bw.conn_bw_rx = BLE_CONN_BW_HIGH; scratchpad.common_opt.conn_bw.conn_bw.conn_bw_tx = BLE_CONN_BW_HIGH; scratchpad.opt.common_opt = scratchpad.common_opt; - scratchpad.mtu = mtu == 0 ? DEFAULT_MTU_SIZE : mtu; #endif + scratchpad.mtu = mtu == 0 ? DEFAULT_MTU_SIZE : mtu; + #if NRF_SD_BLE_API == 3 scratchpad.ble_enable_params.gatt_enable_params.att_mtu = scratchpad.mtu; #endif From 75202cf63a05029668e06e3d9917f4afd2992c24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ken=20A=2E=20Rederg=C3=A5rd?= <64542+kenr@users.noreply.github.com> Date: Tue, 15 Jan 2019 15:52:39 +0100 Subject: [PATCH 10/32] Fix issue with open close open without transport teardown (#188) * Fix issue with open close open without transport teardown --- src/common/transport/h5_transport.cpp | 12 +++++--- src/common/transport/uart_boost.cpp | 18 ++++++------ .../testcase_driver_open_close.cpp | 29 +++++++++++++++++-- 3 files changed, 44 insertions(+), 15 deletions(-) diff --git a/src/common/transport/h5_transport.cpp b/src/common/transport/h5_transport.cpp index 0bf860232..894d9385c 100755 --- a/src/common/transport/h5_transport.cpp +++ b/src/common/transport/h5_transport.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Nordic Semiconductor ASA + * Copyright (c) 2016-2019 Nordic Semiconductor ASA * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, @@ -92,7 +92,6 @@ H5Transport::H5Transport(Transport *_nextTransportLayer, const uint32_t retransm , stateMachineReady(false) , isOpen(false) { - setupStateMachine(); } H5Transport::~H5Transport() noexcept @@ -119,14 +118,17 @@ uint32_t H5Transport::open(const status_cb_t &status_callback, const data_cb_t & return errorCode; } - if (currentState != STATE_START) + if (!(currentState == STATE_START || currentState == STATE_CLOSED)) { - log(SD_RPC_LOG_FATAL, std::string("Not able to open, current state is not valid")); + std::stringstream ss; + ss << "Not able to open, current state is not valid (" << stateToString(currentState) << ")"; + log(SD_RPC_LOG_FATAL, ss.str()); return NRF_ERROR_SD_RPC_H5_TRANSPORT_STATE; } // State machine starts in a separate thread. // Wait for the state machine to be ready + setupStateMachine(); startStateMachine(); lastPacket.clear(); @@ -885,6 +887,8 @@ void H5Transport::stateMachineWorker() // Inform interested parties that new current state is set and ready stateWaitCondition.notify_all(); } + + stateMachineReady = false; } bool H5Transport::waitForState(h5_state_t state, std::chrono::milliseconds timeout) diff --git a/src/common/transport/uart_boost.cpp b/src/common/transport/uart_boost.cpp index edc07d230..bcfd6f305 100755 --- a/src/common/transport/uart_boost.cpp +++ b/src/common/transport/uart_boost.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Nordic Semiconductor ASA + * Copyright (c) 2016-2019 Nordic Semiconductor ASA * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, @@ -57,14 +57,7 @@ constexpr uint32_t DUMMY_BAUD_RATE = 9600; UartBoost::UartBoost(const UartCommunicationParameters &communicationParameters) : Transport() - , readBuffer() - , writeBufferVector() - , writeQueue() - , queueMutex() - , isOpen(false) - , callbackReadHandle() - , callbackWriteHandle() - , uartSettingsBoost(communicationParameters) + , readBuffer(), isOpen(false), uartSettingsBoost(communicationParameters) , asyncWriteInProgress(false) , ioServiceThread(nullptr) { @@ -225,6 +218,12 @@ uint32_t UartBoost::open(const status_cb_t &status_callback, const data_cb_t &da const auto asioWorker = [&]() { try { + // If ioService has ran before it needs to be restarted + if (ioService->stopped()) + { + ioService->restart(); + } + const auto count = ioService->run(); std::stringstream message; message << "serial io_context executed " << count << " handlers."; @@ -318,6 +317,7 @@ uint32_t UartBoost::close() ioServiceThread->join(); } + delete ioServiceThread; ioServiceThread = nullptr; } diff --git a/test/softdevice_api/testcase_driver_open_close.cpp b/test/softdevice_api/testcase_driver_open_close.cpp index e4d459e31..ff425c853 100644 --- a/test/softdevice_api/testcase_driver_open_close.cpp +++ b/test/softdevice_api/testcase_driver_open_close.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 Nordic Semiconductor ASA + * Copyright (c) 2018-2019 Nordic Semiconductor ASA * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, @@ -94,7 +94,7 @@ TEST_CASE(CREATE_TEST_NAME_AND_TAGS(driver_open_close, CHECK(c->close() == NRF_ERROR_INVALID_STATE); } - SECTION("open_close_open_iterations") + SECTION("open_close_open_with_teardown_iterations") { for (uint32_t i = 0; i < numberOfIterations; i++) { @@ -146,4 +146,29 @@ TEST_CASE(CREATE_TEST_NAME_AND_TAGS(driver_open_close, << numberOfIterations << " complete."); } } + + SECTION("open_close_open_iterations") + { + auto c = std::make_shared( + testutil::Central, serialPort.port, env.baudRate, env.mtu, + env.retransmissionInterval, env.responseTimeout); + + REQUIRE(sd_rpc_log_handler_severity_filter_set(c->unwrap(), env.driverLogLevel) == + NRF_SUCCESS); + + for (uint32_t i = 0; i < numberOfIterations; i++) + { + NRF_LOG("Starting iteration #" << std::dec << static_cast(i + 1) << " of " + << numberOfIterations); + + REQUIRE(c->open() == NRF_SUCCESS); + REQUIRE(c->configure() == NRF_SUCCESS); + CHECK(c->close() == NRF_SUCCESS); + + NRF_LOG("Iteration #" << std::dec << static_cast(i + 1) << " of " + << numberOfIterations << " complete."); + } + + sd_rpc_adapter_delete(c->unwrap()); + } } From b216ccc943e2539fa0ab529248e5541eab85202c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ken=20A=2E=20Rederg=C3=A5rd?= <64542+kenr@users.noreply.github.com> Date: Thu, 17 Jan 2019 15:50:48 +0100 Subject: [PATCH 11/32] Add missing files in install target (#187) --- cmake/install-target.cmake | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/cmake/install-target.cmake b/cmake/install-target.cmake index a11e5543e..fd1d53099 100644 --- a/cmake/install-target.cmake +++ b/cmake/install-target.cmake @@ -11,9 +11,13 @@ install( # Directory include/common/sdk_compat is included without sdk_compat # in SoftDevice. Moving those header files to common remove an extra # include to think about -#install( -# DIRECTORY include/common/sdk_compat DESTINATION ${NRF_BLE_DRIVER_INCLUDE_PREFIX}/common -#) +install( + FILES + include/common/sdk_compat/nrf.h + include/common/sdk_compat/compiler_abstraction.h + include/common/sdk_compat/nrf_svc.h + DESTINATION ${NRF_BLE_DRIVER_INCLUDE_PREFIX}/common +) install(FILES "LICENSE" DESTINATION ${NRF_BLE_DRIVER_INSTALL_ROOT}) From 1aadc399d7848340f139d07ceac1718a29cedf7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ken=20A=2E=20Rederg=C3=A5rd?= <64542+kenr@users.noreply.github.com> Date: Thu, 17 Jan 2019 15:51:30 +0100 Subject: [PATCH 12/32] Support install prefix (#189) --- cmake/install-target.cmake | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cmake/install-target.cmake b/cmake/install-target.cmake index fd1d53099..1c95bdb31 100644 --- a/cmake/install-target.cmake +++ b/cmake/install-target.cmake @@ -1,5 +1,10 @@ #Create install target -set(NRF_BLE_DRIVER_INSTALL_ROOT ${CMAKE_BINARY_DIR}/artifacts/pc-ble-driver-${PC_BLE_DRIVER_VERSION}) +if(NOT CMAKE_INSTALL_PREFIX) + set(NRF_BLE_DRIVER_INSTALL_ROOT ${CMAKE_BINARY_DIR}/artifacts/pc-ble-driver-${PC_BLE_DRIVER_VERSION}) +else() + set(NRF_BLE_DRIVER_INSTALL_ROOT ${CMAKE_INSTALL_PREFIX}) +endif() + set(NRF_BLE_DRIVER_INCLUDE_PREFIX "${NRF_BLE_DRIVER_INSTALL_ROOT}/include/nrf/ble/driver") install( From 16eef27f85ea18898bec9f8318e62ce100a17e7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ken=20A=2E=20Rederg=C3=A5rd?= <64542+kenr@users.noreply.github.com> Date: Wed, 23 Jan 2019 15:13:46 +0100 Subject: [PATCH 13/32] Fix/support install prefix take 2 (#190) * Add support for using project as a cmake module * Add support for using project as a vcpkg (through cmake module) * Renamed artifacts from pc-ble-driver to nrf-ble-driver * Add version numbers in shared library file names * Add support for CMAKE_INSTALL_PREFIX * Rearrange location of public include files, each SoftDevice API version has one folder with public interface --- CMakeLists.txt | 169 +++++++++++++----- cmake/install-target.cmake | 108 ++++++----- ...-ble-driver.cmake => nrf-ble-driver.cmake} | 39 ++-- examples/CMakeLists.txt | 10 +- include/README.md | 8 + include/common/sd_rpc.h | 2 +- include/common/sdk_compat/nrf_svc.h | 2 +- .../s132/headers => include/sd_api_v2}/ble.h | 2 +- .../headers => include/sd_api_v2}/ble_err.h | 0 .../headers => include/sd_api_v2}/ble_gap.h | 2 +- .../headers => include/sd_api_v2}/ble_gatt.h | 2 +- .../headers => include/sd_api_v2}/ble_gattc.h | 2 +- .../headers => include/sd_api_v2}/ble_gatts.h | 2 +- .../headers => include/sd_api_v2}/ble_hci.h | 0 .../headers => include/sd_api_v2}/ble_l2cap.h | 2 +- .../sd_api_v2}/ble_ranges.h | 0 .../headers => include/sd_api_v2}/ble_types.h | 0 .../headers => include/sd_api_v2}/nrf_error.h | 0 .../s132/headers => include/sd_api_v3}/ble.h | 0 .../headers => include/sd_api_v3}/ble_err.h | 0 .../headers => include/sd_api_v3}/ble_gap.h | 0 .../headers => include/sd_api_v3}/ble_gatt.h | 0 .../headers => include/sd_api_v3}/ble_gattc.h | 0 .../headers => include/sd_api_v3}/ble_gatts.h | 0 .../headers => include/sd_api_v3}/ble_hci.h | 0 .../headers => include/sd_api_v3}/ble_l2cap.h | 0 .../sd_api_v3}/ble_ranges.h | 0 .../headers => include/sd_api_v3}/ble_types.h | 0 .../headers => include/sd_api_v3}/nrf_error.h | 0 .../s132/headers => include/sd_api_v5}/ble.h | 0 .../headers => include/sd_api_v5}/ble_err.h | 0 .../headers => include/sd_api_v5}/ble_gap.h | 0 .../headers => include/sd_api_v5}/ble_gatt.h | 0 .../headers => include/sd_api_v5}/ble_gattc.h | 0 .../headers => include/sd_api_v5}/ble_gatts.h | 0 .../headers => include/sd_api_v5}/ble_hci.h | 0 .../headers => include/sd_api_v5}/ble_l2cap.h | 0 .../sd_api_v5}/ble_ranges.h | 0 .../headers => include/sd_api_v5}/ble_types.h | 0 .../headers => include/sd_api_v5}/nrf_error.h | 0 .../s140/headers => include/sd_api_v6}/ble.h | 0 .../headers => include/sd_api_v6}/ble_err.h | 0 .../headers => include/sd_api_v6}/ble_gap.h | 0 .../headers => include/sd_api_v6}/ble_gatt.h | 0 .../headers => include/sd_api_v6}/ble_gattc.h | 0 .../headers => include/sd_api_v6}/ble_gatts.h | 0 .../headers => include/sd_api_v6}/ble_hci.h | 0 .../headers => include/sd_api_v6}/ble_l2cap.h | 0 .../sd_api_v6}/ble_ranges.h | 0 .../headers => include/sd_api_v6}/ble_types.h | 0 .../headers => include/sd_api_v6}/nrf_error.h | 0 .../sdk/components/softdevice/README.md | 1 + .../sdk/components/softdevice/README.md | 1 + .../sdk/components/softdevice/README.md | 1 + .../sdk/components/softdevice/README.md | 1 + test/CMakeLists.txt | 9 +- 56 files changed, 224 insertions(+), 139 deletions(-) rename cmake/{pc-ble-driver.cmake => nrf-ble-driver.cmake} (74%) create mode 100644 include/README.md rename {src/sd_api_v2/sdk/components/softdevice/s132/headers => include/sd_api_v2}/ble.h (99%) mode change 100755 => 100644 rename {src/sd_api_v2/sdk/components/softdevice/s132/headers => include/sd_api_v2}/ble_err.h (100%) mode change 100755 => 100644 rename {src/sd_api_v2/sdk/components/softdevice/s132/headers => include/sd_api_v2}/ble_gap.h (99%) mode change 100755 => 100644 rename {src/sd_api_v2/sdk/components/softdevice/s132/headers => include/sd_api_v2}/ble_gatt.h (99%) mode change 100755 => 100644 rename {src/sd_api_v2/sdk/components/softdevice/s132/headers => include/sd_api_v2}/ble_gattc.h (99%) mode change 100755 => 100644 rename {src/sd_api_v2/sdk/components/softdevice/s132/headers => include/sd_api_v2}/ble_gatts.h (99%) mode change 100755 => 100644 rename {src/sd_api_v2/sdk/components/softdevice/s132/headers => include/sd_api_v2}/ble_hci.h (100%) mode change 100755 => 100644 rename {src/sd_api_v2/sdk/components/softdevice/s132/headers => include/sd_api_v2}/ble_l2cap.h (99%) mode change 100755 => 100644 rename {src/sd_api_v2/sdk/components/softdevice/s132/headers => include/sd_api_v2}/ble_ranges.h (100%) mode change 100755 => 100644 rename {src/sd_api_v2/sdk/components/softdevice/s132/headers => include/sd_api_v2}/ble_types.h (100%) mode change 100755 => 100644 rename {src/sd_api_v2/sdk/components/softdevice/s132/headers => include/sd_api_v2}/nrf_error.h (100%) mode change 100755 => 100644 rename {src/sd_api_v3/sdk/components/softdevice/s132/headers => include/sd_api_v3}/ble.h (100%) rename {src/sd_api_v3/sdk/components/softdevice/s132/headers => include/sd_api_v3}/ble_err.h (100%) rename {src/sd_api_v3/sdk/components/softdevice/s132/headers => include/sd_api_v3}/ble_gap.h (100%) rename {src/sd_api_v3/sdk/components/softdevice/s132/headers => include/sd_api_v3}/ble_gatt.h (100%) rename {src/sd_api_v3/sdk/components/softdevice/s132/headers => include/sd_api_v3}/ble_gattc.h (100%) rename {src/sd_api_v3/sdk/components/softdevice/s132/headers => include/sd_api_v3}/ble_gatts.h (100%) rename {src/sd_api_v3/sdk/components/softdevice/s132/headers => include/sd_api_v3}/ble_hci.h (100%) rename {src/sd_api_v3/sdk/components/softdevice/s132/headers => include/sd_api_v3}/ble_l2cap.h (100%) rename {src/sd_api_v3/sdk/components/softdevice/s132/headers => include/sd_api_v3}/ble_ranges.h (100%) rename {src/sd_api_v3/sdk/components/softdevice/s132/headers => include/sd_api_v3}/ble_types.h (100%) rename {src/sd_api_v3/sdk/components/softdevice/s132/headers => include/sd_api_v3}/nrf_error.h (100%) rename {src/sd_api_v5/sdk/components/softdevice/s132/headers => include/sd_api_v5}/ble.h (100%) rename {src/sd_api_v5/sdk/components/softdevice/s132/headers => include/sd_api_v5}/ble_err.h (100%) rename {src/sd_api_v5/sdk/components/softdevice/s132/headers => include/sd_api_v5}/ble_gap.h (100%) rename {src/sd_api_v5/sdk/components/softdevice/s132/headers => include/sd_api_v5}/ble_gatt.h (100%) rename {src/sd_api_v5/sdk/components/softdevice/s132/headers => include/sd_api_v5}/ble_gattc.h (100%) rename {src/sd_api_v5/sdk/components/softdevice/s132/headers => include/sd_api_v5}/ble_gatts.h (100%) rename {src/sd_api_v5/sdk/components/softdevice/s132/headers => include/sd_api_v5}/ble_hci.h (100%) rename {src/sd_api_v5/sdk/components/softdevice/s132/headers => include/sd_api_v5}/ble_l2cap.h (100%) rename {src/sd_api_v5/sdk/components/softdevice/s132/headers => include/sd_api_v5}/ble_ranges.h (100%) rename {src/sd_api_v5/sdk/components/softdevice/s132/headers => include/sd_api_v5}/ble_types.h (100%) rename {src/sd_api_v5/sdk/components/softdevice/s132/headers => include/sd_api_v5}/nrf_error.h (100%) rename {src/sd_api_v6/sdk/components/softdevice/s140/headers => include/sd_api_v6}/ble.h (100%) rename {src/sd_api_v6/sdk/components/softdevice/s140/headers => include/sd_api_v6}/ble_err.h (100%) rename {src/sd_api_v6/sdk/components/softdevice/s140/headers => include/sd_api_v6}/ble_gap.h (100%) rename {src/sd_api_v6/sdk/components/softdevice/s140/headers => include/sd_api_v6}/ble_gatt.h (100%) rename {src/sd_api_v6/sdk/components/softdevice/s140/headers => include/sd_api_v6}/ble_gattc.h (100%) rename {src/sd_api_v6/sdk/components/softdevice/s140/headers => include/sd_api_v6}/ble_gatts.h (100%) rename {src/sd_api_v6/sdk/components/softdevice/s140/headers => include/sd_api_v6}/ble_hci.h (100%) rename {src/sd_api_v6/sdk/components/softdevice/s140/headers => include/sd_api_v6}/ble_l2cap.h (100%) rename {src/sd_api_v6/sdk/components/softdevice/s140/headers => include/sd_api_v6}/ble_ranges.h (100%) rename {src/sd_api_v6/sdk/components/softdevice/s140/headers => include/sd_api_v6}/ble_types.h (100%) rename {src/sd_api_v6/sdk/components/softdevice/s140/headers => include/sd_api_v6}/nrf_error.h (100%) create mode 100644 src/sd_api_v2/sdk/components/softdevice/README.md create mode 100644 src/sd_api_v3/sdk/components/softdevice/README.md create mode 100644 src/sd_api_v5/sdk/components/softdevice/README.md create mode 100644 src/sd_api_v6/sdk/components/softdevice/README.md diff --git a/CMakeLists.txt b/CMakeLists.txt index bfbff7e9d..942dc42dd 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,18 @@ cmake_minimum_required(VERSION 3.11) -project(pc-ble-driver) -include(cmake/pc-ble-driver.cmake) +set(NRF_BLE_DRIVER_DEFAULT_VERSION "0.0.0") + +if(NOT DEFINED NRF_BLE_DRIVER_VERSION) + message(STATUS "NRF_BLE_DRIVER_VERSION not specified, setting it to ${NRF_BLE_DRIVER_DEFAULT_VERSION}") + set(NRF_BLE_DRIVER_VERSION "${NRF_BLE_DRIVER_DEFAULT_VERSION}") +endif() + +project( + nrf-ble-driver + VERSION ${NRF_BLE_DRIVER_VERSION} +) + +include(cmake/nrf-ble-driver.cmake) include(TestBigEndian) TEST_BIG_ENDIAN(IS_BIG_ENDIAN) @@ -28,22 +39,6 @@ else() file(GLOB LIB_PLATFORM_CPP_SRC_FILES "src/common/platform/linux/*.cpp") endif() -set(PC_BLE_DRIVER_DEFAULT_VERSION "4.0.0") -set(PC_BLE_DRIVER_CONNECTIVITY_DEFAULT_VERSION "0.0.0") - -if(NOT DEFINED PC_BLE_DRIVER_VERSION) - message(STATUS "PC_BLE_DRIVER_VERSION not specified, setting it to ${PC_BLE_DRIVER_DEFAULT_VERSION}") - set(PC_BLE_DRIVER_VERSION "${PC_BLE_DRIVER_DEFAULT_VERSION}") -endif() - -# Add connectivity firmware building -if(NOT DEFINED CONNECTIVITY_VERSION) - message(STATUS "CONNECTIVITY_VERSION not specified, using ${PC_BLE_DRIVER_CONNECTIVITY_DEFAULT_VERSION}") - set(CONNECTIVITY_VERSION "${PC_BLE_DRIVER_CONNECTIVITY_DEFAULT_VERSION}" CACHE STRING "" FORCE) -else() - set(CONNECTIVITY_VERSION "${CONNECTIVITY_VERSION}" CACHE STRING "" FORCE) -endif() - # SDK source files, different per API version # Newer codecs from nRF5 SDK are backwards compatible to SoftDevice API v3 @@ -66,15 +61,11 @@ foreach(SD_API_VER ${SD_API_VERS}) list(APPEND LIB_${SD_API_VER}_C_SRC_FILES ${LIB_NEWER_SDK_API_COMMON_C_SRC_FILES}) endif() - #message(STATUS "SD: ${SD_API_VER}: C_SRC: ${LIB_${SD_API_VER}_C_SRC_FILES}") - set(LIB_${SD_API_VER}_CPP_SRC_FILES ${LIB_BASE_CPP_SRC_FILES} ${LIB_SDK_${SD_API_VER}_CPP_SRC_FILES} ${LIB_TRANSPORT_CPP_SRC_FILES} ) - #message(STATUS "SD: ${SD_API_VER}: CPP_SRC: ${LIB_${SD_API_VER}_CPP_SRC_FILES}") - # Force .c files to be compiled with the C++ compiler if(NOT APPLE) set_source_files_properties( @@ -100,14 +91,88 @@ endif() # Add libraries foreach(SD_API_VER ${SD_API_VERS}) # Object library, from which both shared and static will be built - add_library(${PC_BLE_DRIVER_${SD_API_VER}_OBJ_LIB} OBJECT ${LIB_${SD_API_VER}_C_SRC_FILES} ${LIB_${SD_API_VER}_CPP_SRC_FILES} ${LIB_PLATFORM_SRC_FILES}) + add_library(${NRF_BLE_DRIVER_${SD_API_VER}_OBJ_LIB} OBJECT ${LIB_${SD_API_VER}_C_SRC_FILES} ${LIB_${SD_API_VER}_CPP_SRC_FILES} ${LIB_PLATFORM_SRC_FILES}) # shared libraries need PIC - set_property(TARGET ${PC_BLE_DRIVER_${SD_API_VER}_OBJ_LIB} PROPERTY POSITION_INDEPENDENT_CODE 1) + set_property(TARGET ${NRF_BLE_DRIVER_${SD_API_VER}_OBJ_LIB} PROPERTY POSITION_INDEPENDENT_CODE 1) # actual shared and static libraries built from the same object files - add_library(${PC_BLE_DRIVER_${SD_API_VER}_SHARED_LIB} SHARED $) - add_library(${PC_BLE_DRIVER_${SD_API_VER}_STATIC_LIB} STATIC $) + add_library(${NRF_BLE_DRIVER_${SD_API_VER}_SHARED_LIB} SHARED $) + add_library(${NRF_BLE_DRIVER_${SD_API_VER}_STATIC_LIB} STATIC $) + + string(TOLOWER ${SD_API_VER} SD_API_VER_L) + + target_include_directories( + ${NRF_BLE_DRIVER_${SD_API_VER}_SHARED_LIB} INTERFACE + $ + ) + + target_include_directories( + ${NRF_BLE_DRIVER_${SD_API_VER}_STATIC_LIB} INTERFACE + $ + ) + + set(${SD_API_VER}_PUBLIC_HEADERS + include/common/sd_rpc.h + include/common/sd_rpc_types.h + include/common/adapter.h + include/common/sdk_compat/nrf.h + include/common/sdk_compat/compiler_abstraction.h + include/common/sdk_compat/nrf_svc.h + include/common/config/platform.h + include/${SD_API_VER_L}/ble.h + include/${SD_API_VER_L}/ble_err.h + include/${SD_API_VER_L}/ble_gap.h + include/${SD_API_VER_L}/ble_gatt.h + include/${SD_API_VER_L}/ble_gattc.h + include/${SD_API_VER_L}/ble_gatts.h + include/${SD_API_VER_L}/ble_hci.h + include/${SD_API_VER_L}/ble_l2cap.h + include/${SD_API_VER_L}/ble_ranges.h + include/${SD_API_VER_L}/ble_types.h + include/${SD_API_VER_L}/nrf_error.h + ) + +if(WIN32) + set_target_properties( + ${NRF_BLE_DRIVER_${SD_API_VER}_SHARED_LIB} PROPERTIES + PUBLIC_HEADER "${${SD_API_VER}_PUBLIC_HEADERS}" + OUTPUT_NAME "nrf-ble-driver-${SD_API_VER_L}" + RELEASE_POSTFIX "${MSVC_TOOLSET}-mt-${PROJECT_VERSION_MAJOR}_${PROJECT_VERSION_MINOR}_${PROJECT_VERSION_PATCH}" + RELWITHDEBINFO_POSTFIX "${MSVC_TOOLSET}-mt-${PROJECT_VERSION_MAJOR}_${PROJECT_VERSION_MINOR}_${PROJECT_VERSION_PATCH}" + MINSIZEREL_POSTFIX "${MSVC_TOOLSET}-mt-${PROJECT_VERSION_MAJOR}_${PROJECT_VERSION_MINOR}_${PROJECT_VERSION_PATCH}" + DEBUG_POSTFIX "${MSVC_TOOLSET}-mt-gd-${PROJECT_VERSION_MAJOR}_${PROJECT_VERSION_MINOR}_${PROJECT_VERSION_PATCH}" + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" + ) + + set_target_properties( + ${NRF_BLE_DRIVER_${SD_API_VER}_STATIC_LIB} PROPERTIES + PUBLIC_HEADER "${${SD_API_VER}_PUBLIC_HEADERS}" + OUTPUT_NAME "nrf-ble-driver-${SD_API_VER_L}" + RELEASE_POSTFIX "${MSVC_TOOLSET}-mt-static-${PROJECT_VERSION_MAJOR}_${PROJECT_VERSION_MINOR}_${PROJECT_VERSION_PATCH}" + RELWITHDEBINFO_POSTFIX "${MSVC_TOOLSET}-mt-static-${PROJECT_VERSION_MAJOR}_${PROJECT_VERSION_MINOR}_${PROJECT_VERSION_PATCH}" + MINSIZEREL_POSTFIX "${MSVC_TOOLSET}-mt-static-${PROJECT_VERSION_MAJOR}_${PROJECT_VERSION_MINOR}_${PROJECT_VERSION_PATCH}" + DEBUG_POSTFIX "${MSVC_TOOLSET}-mt-static-gd-${PROJECT_VERSION_MAJOR}_${PROJECT_VERSION_MINOR}_${PROJECT_VERSION_PATCH}" + ) +else() + set_target_properties( + ${NRF_BLE_DRIVER_${SD_API_VER}_SHARED_LIB} PROPERTIES + COMPILE_DEFINITIONS "DLL_EXPORT" + PUBLIC_HEADER "${${SD_API_VER}_PUBLIC_HEADERS}" + OUTPUT_NAME "nrf-ble-driver-${SD_API_VER_L}" + VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}" + SOVERSION "${PROJECT_VERSION_MAJOR}" + PREFIX "lib" + ) + + set_target_properties( + ${NRF_BLE_DRIVER_${SD_API_VER}_STATIC_LIB} PROPERTIES + PUBLIC_HEADER "${${SD_API_VER}_PUBLIC_HEADERS}" + OUTPUT_NAME "nrf-ble-driver-${SD_API_VER_L}" + PREFIX "lib" + ) +endif() + endforeach(SD_API_VER) # Set common include directories @@ -115,6 +180,7 @@ find_path(ASIO_INCLUDE_DIR asio.hpp) include_directories( include/common + include/common/config include/common/sdk_compat include/common/internal include/common/internal/transport @@ -127,26 +193,23 @@ foreach(SD_API_VER ${SD_API_VERS}) # Newer codecs from nRF5 SDK are backwards compatible to SoftDevice API v3 if(SD_API_VER STRGREATER "SD_API_V2") - target_include_directories (${PC_BLE_DRIVER_${SD_API_VER}_OBJ_LIB} SYSTEM PRIVATE + target_include_directories(${NRF_BLE_DRIVER_${SD_API_VER}_OBJ_LIB} SYSTEM PRIVATE src/sd_api_common/sdk/components/libraries/util src/${SD_API_VER_L}/sdk/components/serialization/application/codecs/common src/${SD_API_VER_L}/sdk/components/serialization/application/codecs/s132/serializers src/${SD_API_VER_L}/sdk/components/serialization/application/codecs/ble/serializers src/sd_api_common/sdk/components/serialization/common src/sd_api_common/sdk/components/serialization/common/struct_ser/ble - src/${SD_API_VER_L}/sdk/components/softdevice/s132/headers - src/${SD_API_VER_L}/sdk/components/softdevice/s140/headers - src/${SD_API_VER_L} + include/${SD_API_VER_L} ) else() - target_include_directories (${PC_BLE_DRIVER_${SD_API_VER}_OBJ_LIB} SYSTEM PRIVATE + target_include_directories(${NRF_BLE_DRIVER_${SD_API_VER}_OBJ_LIB} SYSTEM PRIVATE src/${SD_API_VER_L}/sdk/components/libraries/util src/${SD_API_VER_L}/sdk/components/serialization/application/codecs/common src/${SD_API_VER_L}/sdk/components/serialization/application/codecs/s130/serializers src/${SD_API_VER_L}/sdk/components/serialization/common src/${SD_API_VER_L}/sdk/components/serialization/common/struct_ser/s130 - # S132 and S130 headers are the same - src/${SD_API_VER_L}/sdk/components/softdevice/s132/headers + include/${SD_API_VER_L} ) endif() @@ -154,38 +217,56 @@ foreach(SD_API_VER ${SD_API_VERS}) string(REGEX MATCH "[0-9]+$" _SD_API_VER_NUM "${SD_API_VER}") set(SD_API_VER_COMPILER_DEF_NUM "-D${SD_API_VER_COMPILER_DEF}=${_SD_API_VER_NUM}") #MESSAGE( STATUS "compiler def: " "${SD_API_VER_COMPILER_DEF_NUM}" ) - target_compile_definitions(${PC_BLE_DRIVER_${SD_API_VER}_OBJ_LIB} PRIVATE "${SD_API_VER_COMPILER_DEF_NUM}") + target_compile_definitions(${NRF_BLE_DRIVER_${SD_API_VER}_OBJ_LIB} PRIVATE "${SD_API_VER_COMPILER_DEF_NUM}") endforeach(SD_API_VER) # Additional special linkage libraries foreach(SD_API_VER ${SD_API_VERS}) if(WIN32) elseif(APPLE) - target_link_libraries(${PC_BLE_DRIVER_${SD_API_VER}_STATIC_LIB} PRIVATE "-framework CoreFoundation" "-framework IOKit") - target_link_libraries(${PC_BLE_DRIVER_${SD_API_VER}_SHARED_LIB} PRIVATE "-framework CoreFoundation" "-framework IOKit") - set_property(TARGET ${PC_BLE_DRIVER_${SD_API_VER}_STATIC_LIB} PROPERTY MACOSX_RPATH ON) - set_property(TARGET ${PC_BLE_DRIVER_${SD_API_VER}_SHARED_LIB} PROPERTY MACOSX_RPATH ON) + target_link_libraries(${NRF_BLE_DRIVER_${SD_API_VER}_STATIC_LIB} PRIVATE "-framework CoreFoundation" "-framework IOKit") + target_link_libraries(${NRF_BLE_DRIVER_${SD_API_VER}_SHARED_LIB} PRIVATE "-framework CoreFoundation" "-framework IOKit") + set_property(TARGET ${NRF_BLE_DRIVER_${SD_API_VER}_STATIC_LIB} PROPERTY MACOSX_RPATH ON) + set_property(TARGET ${NRF_BLE_DRIVER_${SD_API_VER}_SHARED_LIB} PROPERTY MACOSX_RPATH ON) else() # Assume Linux - target_link_libraries(${PC_BLE_DRIVER_${SD_API_VER}_STATIC_LIB} PRIVATE "udev" "pthread") - target_link_libraries(${PC_BLE_DRIVER_${SD_API_VER}_SHARED_LIB} PRIVATE "udev" "pthread") + target_link_libraries(${NRF_BLE_DRIVER_${SD_API_VER}_STATIC_LIB} PRIVATE "udev" "pthread") + target_link_libraries(${NRF_BLE_DRIVER_${SD_API_VER}_SHARED_LIB} PRIVATE "udev" "pthread") endif() # Specify libraries to link serialization library with - target_link_libraries (${PC_BLE_DRIVER_${SD_API_VER}_SHARED_LIB} PRIVATE ${Boost_LIBRARIES}) - target_link_libraries (${PC_BLE_DRIVER_${SD_API_VER}_STATIC_LIB} PRIVATE ${Boost_LIBRARIES}) + target_link_libraries (${NRF_BLE_DRIVER_${SD_API_VER}_SHARED_LIB} PRIVATE ${Boost_LIBRARIES}) + target_link_libraries (${NRF_BLE_DRIVER_${SD_API_VER}_STATIC_LIB} PRIVATE ${Boost_LIBRARIES}) endforeach(SD_API_VER) # Add tests -add_subdirectory(test) +if(NOT DEFINED DISABLE_TESTS) + add_subdirectory(test) +else() + message(STATUS "Disabling tests") +endif() # Add examples -add_subdirectory(examples) +if(NOT DEFINED DISABLE_EXAMPLES) + add_subdirectory(examples) +else() + message(STATUS "Disabling examples") +endif() # Add install target include(cmake/install-target.cmake) if(COMPILE_CONNECTIVITY) + set(NRF_BLE_DRIVER_CONNECTIVITY_DEFAULT_VERSION "0.0.0") + + # Add connectivity firmware building + if(NOT DEFINED CONNECTIVITY_VERSION) + message(STATUS "CONNECTIVITY_VERSION not specified, using ${NRF_BLE_DRIVER_CONNECTIVITY_DEFAULT_VERSION}") + set(CONNECTIVITY_VERSION "${NRF_BLE_DRIVER_CONNECTIVITY_DEFAULT_VERSION}" CACHE STRING "" FORCE) + else() + set(CONNECTIVITY_VERSION "${CONNECTIVITY_VERSION}" CACHE STRING "" FORCE) + endif() + add_subdirectory(hex) endif() diff --git a/cmake/install-target.cmake b/cmake/install-target.cmake index 1c95bdb31..c277cd5e0 100644 --- a/cmake/install-target.cmake +++ b/cmake/install-target.cmake @@ -1,63 +1,77 @@ #Create install target -if(NOT CMAKE_INSTALL_PREFIX) - set(NRF_BLE_DRIVER_INSTALL_ROOT ${CMAKE_BINARY_DIR}/artifacts/pc-ble-driver-${PC_BLE_DRIVER_VERSION}) -else() - set(NRF_BLE_DRIVER_INSTALL_ROOT ${CMAKE_INSTALL_PREFIX}) -endif() +include(GNUInstallDirs) +include(CMakePackageConfigHelpers) -set(NRF_BLE_DRIVER_INCLUDE_PREFIX "${NRF_BLE_DRIVER_INSTALL_ROOT}/include/nrf/ble/driver") +install(FILES "LICENSE" DESTINATION share) -install( - DIRECTORY include/common DESTINATION ${NRF_BLE_DRIVER_INCLUDE_PREFIX} - PATTERN "internal" EXCLUDE - PATTERN "sdk_compat" EXCLUDE -) - -# Directory include/common/sdk_compat is included without sdk_compat -# in SoftDevice. Moving those header files to common remove an extra -# include to think about -install( - FILES - include/common/sdk_compat/nrf.h - include/common/sdk_compat/compiler_abstraction.h - include/common/sdk_compat/nrf_svc.h - DESTINATION ${NRF_BLE_DRIVER_INCLUDE_PREFIX}/common -) - -install(FILES "LICENSE" DESTINATION ${NRF_BLE_DRIVER_INSTALL_ROOT}) +message(STATUS "CMAKE_INSTALL_LIBDIR: ${CMAKE_INSTALL_LIBDIR} CMAKE_INSTALL_INCLUDEDIR: ${CMAKE_INSTALL_INCLUDEDIR}") foreach(SD_API_VER ${SD_API_VERS}) string(TOLOWER ${SD_API_VER} SD_API_VER_L) install( - TARGETS ${PC_BLE_DRIVER_${SD_API_VER}_SHARED_LIB} - LIBRARY DESTINATION ${NRF_BLE_DRIVER_INSTALL_ROOT}/lib/shared - ARCHIVE DESTINATION ${NRF_BLE_DRIVER_INSTALL_ROOT}/lib/shared - RUNTIME DESTINATION ${NRF_BLE_DRIVER_INSTALL_ROOT}/lib/shared + TARGETS ${NRF_BLE_DRIVER_${SD_API_VER}_SHARED_LIB} + EXPORT ${PROJECT_NAME}-targets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${SD_API_VER_L} COMPONENT SDK ) install( - TARGETS ${PC_BLE_DRIVER_${SD_API_VER}_STATIC_LIB} - ARCHIVE DESTINATION ${NRF_BLE_DRIVER_INSTALL_ROOT}/lib/static + TARGETS ${NRF_BLE_DRIVER_${SD_API_VER}_STATIC_LIB} + EXPORT ${PROJECT_NAME}-targets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${SD_API_VER_L} COMPONENT SDK ) +endforeach(SD_API_VER) + +set(NRF_BLE_DRIVER_CMAKECONFIG_INSTALL_DIR "share/${PROJECT_NAME}" CACHE STRING "install path for nrf-ble-driverConfig.cmake") + +# Create a template package config file +# This part is required because SoftDevice to compile is dynamic +set(CONFIG_TEMPLATE "@PACKAGE_INIT@\n\ninclude(\"\${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake\")\n\n") +set(CONFIG_TEMPLATE "${CONFIG_TEMPLATE}\n") + +foreach(SD_API_VER ${SD_API_VERS}) + string(TOLOWER ${SD_API_VER} SD_API_VER_L) - if(SD_API_VER STREQUAL "SD_API_V6") - install( - DIRECTORY - src/${SD_API_VER_L}/sdk/components/softdevice/s140/headers/ - DESTINATION ${NRF_BLE_DRIVER_INCLUDE_PREFIX}/${SD_API_VER_L} - COMPONENT SDK - ) - endif() - - if(NOT SD_API_VER STREQUAL "SD_API_V6") - install( - DIRECTORY - src/${SD_API_VER_L}/sdk/components/softdevice/s132/headers/ - DESTINATION ${NRF_BLE_DRIVER_INCLUDE_PREFIX}/${SD_API_VER_L} - COMPONENT SDK - ) - endif() + set(CONFIG_TEMPLATE "${CONFIG_TEMPLATE}\n# ${SD_API_VER} related properties") + set(CONFIG_TEMPLATE "${CONFIG_TEMPLATE}\nget_target_property(@PROJECT_NAME@_${SD_API_VER}_INCLUDE_DIR nrf::nrf_ble_driver_${SD_API_VER_L}_shared INTERFACE_INCLUDE_DIRECTORIES)") + set(CONFIG_TEMPLATE "${CONFIG_TEMPLATE}\nget_target_property(@PROJECT_NAME@_${SD_API_VER}_LIBRARY nrf::nrf_ble_driver_${SD_API_VER_L}_shared LOCATION)") + set(CONFIG_TEMPLATE "${CONFIG_TEMPLATE}\nget_target_property(@PROJECT_NAME@_${SD_API_VER}_STATIC_LIBRARY nrf::nrf_ble_driver_${SD_API_VER_L}_static LOCATION)") + set(CONFIG_TEMPLATE "${CONFIG_TEMPLATE}\n") endforeach(SD_API_VER) + +set(CONFIG_TEMPLATE_FILENAME "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake.in") +file(WRITE ${CONFIG_TEMPLATE_FILENAME} "${CONFIG_TEMPLATE}") + +configure_package_config_file( + ${CONFIG_TEMPLATE_FILENAME} + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" + INSTALL_DESTINATION ${NRF_BLE_DRIVER_CMAKECONFIG_INSTALL_DIR} +) + +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" + VERSION ${NRF_BLE_DRIVER_VERSION} + COMPATIBILITY AnyNewerVersion +) + +install( + FILES + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake + DESTINATION ${NRF_BLE_DRIVER_CMAKECONFIG_INSTALL_DIR} +) + +install( + EXPORT ${PROJECT_NAME}-targets + FILE ${PROJECT_NAME}Targets.cmake + NAMESPACE nrf:: + DESTINATION ${NRF_BLE_DRIVER_CMAKECONFIG_INSTALL_DIR} +) diff --git a/cmake/pc-ble-driver.cmake b/cmake/nrf-ble-driver.cmake similarity index 74% rename from cmake/pc-ble-driver.cmake rename to cmake/nrf-ble-driver.cmake index 041d15142..1b6bdd190 100644 --- a/cmake/pc-ble-driver.cmake +++ b/cmake/nrf-ble-driver.cmake @@ -1,8 +1,8 @@ # include guard -if(PC_BLE_DRIVER_CMAKE_INCLUDED) +if(NRF_BLE_DRIVER_CMAKE_INCLUDED) return() -endif(PC_BLE_DRIVER_CMAKE_INCLUDED) -set(PC_BLE_DRIVER_CMAKE_INCLUDED true) +endif(NRF_BLE_DRIVER_CMAKE_INCLUDED) +set(NRF_BLE_DRIVER_CMAKE_INCLUDED true) math(EXPR COMPILER_ARCH_BITS "8*${CMAKE_SIZEOF_VOID_P}") # Default to compiler architecture @@ -67,41 +67,26 @@ foreach(SD_API_VER_NUM ${SD_API_VER_NUMS}) # Append it to the list list(APPEND SD_API_VERS ${_SD_API_VER}) # Set project and variable names - set(PC_BLE_DRIVER_${_SD_API_VER}_PROJECT_NAME "pc_ble_driver_${_SD_API_VER_L}") - set(PC_BLE_DRIVER_${_SD_API_VER}_OBJ_LIB "pc_ble_driver_obj_${_SD_API_VER_L}") - set(PC_BLE_DRIVER_${_SD_API_VER}_STATIC_LIB "pc_ble_driver_static_${_SD_API_VER_L}") - set(PC_BLE_DRIVER_${_SD_API_VER}_SHARED_LIB "pc_ble_driver_shared_${_SD_API_VER_L}") + set(NRF_BLE_DRIVER_${_SD_API_VER}_PROJECT_NAME "nrf_ble_driver_${_SD_API_VER_L}") + set(NRF_BLE_DRIVER_${_SD_API_VER}_OBJ_LIB "nrf_ble_driver_obj_${_SD_API_VER_L}") + set(NRF_BLE_DRIVER_${_SD_API_VER}_STATIC_LIB "nrf_ble_driver_${_SD_API_VER_L}_static") + set(NRF_BLE_DRIVER_${_SD_API_VER}_SHARED_LIB "nrf_ble_driver_${_SD_API_VER_L}_shared") endforeach(SD_API_VER_NUM) set(SD_API_VER_COMPILER_DEF "NRF_SD_BLE_API_VERSION") -#MESSAGE( STATUS "list1: " "${SD_API_VER_NUMS}" ) -#MESSAGE( STATUS "list2: " "${SD_API_VERS}" ) -#MESSAGE( STATUS "proj2: " "${PC_BLE_DRIVER_SD_API_V2_PROJECT_NAME}" ) -#MESSAGE( STATUS "proj5: " "${PC_BLE_DRIVER_SD_API_V5_PROJECT_NAME}" ) - # pc-ble-driver root folder -set(PC_BLE_DRIVER_ROOT_DIR ${CMAKE_CURRENT_LIST_DIR}/..) +set(NRF_BLE_DRIVER_ROOT_DIR ${CMAKE_CURRENT_LIST_DIR}/..) # pc-ble-driver hex folder -set(PC_BLE_DRIVER_HEX_DIR ${PC_BLE_DRIVER_ROOT_DIR}/hex) +set(NRF_BLE_DRIVER_HEX_DIR ${NRF_BLE_DRIVER_ROOT_DIR}/hex) # pc-ble-driver include path -set(PC_BLE_DRIVER_INCLUDE_DIR ${PC_BLE_DRIVER_ROOT_DIR}/include) - -# Set public include folders -foreach(SD_API_VER ${SD_API_VERS}) - string(TOLOWER ${SD_API_VER} SD_API_VER_L) - set(PC_BLE_DRIVER_${SD_API_VER}_PUBLIC_INCLUDE_DIRS ${PC_BLE_DRIVER_ROOT_DIR}/include - ${PC_BLE_DRIVER_ROOT_DIR}/include/common - ${PC_BLE_DRIVER_ROOT_DIR}/include/common/sdk_compat - ${PC_BLE_DRIVER_ROOT_DIR}/src/${SD_API_VER_L}/sdk/components/softdevice/s132/headers) -endforeach(SD_API_VER) +set(NRF_BLE_DRIVER_INCLUDE_DIR ${NRF_BLE_DRIVER_ROOT_DIR}/include) find_package(Git REQUIRED) function(git_repo_metadata dir commit branch remotes) - # Get the latest abbreviated commit hash of the working branch execute_process( COMMAND ${GIT_EXECUTABLE} log -1 --format=%H @@ -131,11 +116,9 @@ function(git_repo_metadata dir commit branch remotes) ) set(${remotes} ${GIT_REMOTES} PARENT_SCOPE) - endfunction() function(build_metadata dir dst) - cmake_host_system_information(RESULT BUILD_MD_HOSTNAME QUERY HOSTNAME) string(TIMESTAMP BUILD_TIMESTAMP "%Y-%m-%d %H:%M:%S (YY-MM-DD HH:MM:SS, UTC)" UTC) @@ -155,6 +138,4 @@ function(build_metadata dir dst) string(CONCAT str ${str} "\n") set(${dst} ${str} PARENT_SCOPE) - - endfunction() diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 83142d0ed..7a342798c 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -8,17 +8,15 @@ function(setup_example example_directory) add_executable(${EXAMPLE_NAME} ${EXAMPLE_SOURCE_FILES}) target_compile_definitions(${EXAMPLE_NAME} PRIVATE -DNRF_SD_BLE_API=${SD_API_VER}) - target_include_directories(${EXAMPLE_NAME} PRIVATE ../src/sd_api_v${SD_API_VER}/sdk/components/softdevice/s130/headers) - target_include_directories(${EXAMPLE_NAME} PRIVATE ../src/sd_api_v${SD_API_VER}/sdk/components/softdevice/s132/headers) - target_include_directories(${EXAMPLE_NAME} PRIVATE ../src/sd_api_v${SD_API_VER}/sdk/components/softdevice/s140/headers) + target_include_directories(${EXAMPLE_NAME} PRIVATE ../include/sd_api_v${SD_API_VER}) if(WIN32) - target_link_libraries(${EXAMPLE_NAME} PRIVATE pc_ble_driver_static_sd_api_v${SD_API_VER}) + target_link_libraries(${EXAMPLE_NAME} PRIVATE nrf_ble_driver_sd_api_v${SD_API_VER}_static) elseif(APPLE) - target_link_libraries(${EXAMPLE_NAME} PRIVATE pc_ble_driver_static_sd_api_v${SD_API_VER}) + target_link_libraries(${EXAMPLE_NAME} PRIVATE nrf_ble_driver_sd_api_v${SD_API_VER}_static) else() # Assume Linux - target_link_libraries(${EXAMPLE_NAME} PRIVATE pc_ble_driver_static_sd_api_v${SD_API_VER} "pthread") + target_link_libraries(${EXAMPLE_NAME} PRIVATE nrf_ble_driver_sd_api_v${SD_API_VER}_static "pthread") endif() endforeach() endfunction(setup_example) diff --git a/include/README.md b/include/README.md new file mode 100644 index 000000000..57ea2fec4 --- /dev/null +++ b/include/README.md @@ -0,0 +1,8 @@ +The header files in the sd_api_vx directories are from their respective SoftDevice API version + +Source location of header files in this directory +================================================= +sd_api_v2: /components/softdevice/s132 +sd_api_v3: /components/softdevice/s132v3 +sd_api_v5: /components/softdevice/s132v5 +sd_api_v6: /components/softdevice/s140 diff --git a/include/common/sd_rpc.h b/include/common/sd_rpc.h index 47b554c5a..60481b2e3 100644 --- a/include/common/sd_rpc.h +++ b/include/common/sd_rpc.h @@ -43,7 +43,7 @@ #ifndef SD_RPC_H__ #define SD_RPC_H__ -#include "config/platform.h" +#include "platform.h" #include "sd_rpc_types.h" #include "adapter.h" diff --git a/include/common/sdk_compat/nrf_svc.h b/include/common/sdk_compat/nrf_svc.h index 4868c50d3..32fadd98f 100755 --- a/include/common/sdk_compat/nrf_svc.h +++ b/include/common/sdk_compat/nrf_svc.h @@ -38,7 +38,7 @@ #ifndef NRF_SVC_H__ #define NRF_SVC_H__ -#include "config/platform.h" +#include "platform.h" #define SVCALL(number, return_type, signature) SD_RPC_API return_type signature #include "adapter.h" diff --git a/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble.h b/include/sd_api_v2/ble.h old mode 100755 new mode 100644 similarity index 99% rename from src/sd_api_v2/sdk/components/softdevice/s132/headers/ble.h rename to include/sd_api_v2/ble.h index 257890295..da3b2e787 --- a/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble.h +++ b/include/sd_api_v2/ble.h @@ -47,7 +47,7 @@ #ifndef BLE_H__ #define BLE_H__ -#include "config/platform.h" +#include "platform.h" #include "ble_ranges.h" #include "ble_types.h" #include "ble_gap.h" diff --git a/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_err.h b/include/sd_api_v2/ble_err.h old mode 100755 new mode 100644 similarity index 100% rename from src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_err.h rename to include/sd_api_v2/ble_err.h diff --git a/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_gap.h b/include/sd_api_v2/ble_gap.h old mode 100755 new mode 100644 similarity index 99% rename from src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_gap.h rename to include/sd_api_v2/ble_gap.h index ef16cba20..777c96d44 --- a/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_gap.h +++ b/include/sd_api_v2/ble_gap.h @@ -45,7 +45,7 @@ #include "adapter.h" -#include "config/platform.h" +#include "platform.h" #include "ble_types.h" #include "ble_ranges.h" diff --git a/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_gatt.h b/include/sd_api_v2/ble_gatt.h old mode 100755 new mode 100644 similarity index 99% rename from src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_gatt.h rename to include/sd_api_v2/ble_gatt.h index a6dcae960..c59ad04c2 --- a/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_gatt.h +++ b/include/sd_api_v2/ble_gatt.h @@ -43,7 +43,7 @@ #ifndef BLE_GATT_H__ #define BLE_GATT_H__ -#include "config/platform.h" +#include "platform.h" #include "ble_types.h" #include "ble_ranges.h" diff --git a/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_gattc.h b/include/sd_api_v2/ble_gattc.h old mode 100755 new mode 100644 similarity index 99% rename from src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_gattc.h rename to include/sd_api_v2/ble_gattc.h index 404cfeb63..a2616c39e --- a/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_gattc.h +++ b/include/sd_api_v2/ble_gattc.h @@ -45,7 +45,7 @@ #include "adapter.h" -#include "config/platform.h" +#include "platform.h" #include "ble_gatt.h" #include "ble_types.h" diff --git a/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_gatts.h b/include/sd_api_v2/ble_gatts.h old mode 100755 new mode 100644 similarity index 99% rename from src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_gatts.h rename to include/sd_api_v2/ble_gatts.h index 3404970f8..fcf80a385 --- a/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_gatts.h +++ b/include/sd_api_v2/ble_gatts.h @@ -45,7 +45,7 @@ #include "adapter.h" -#include "config/platform.h" +#include "platform.h" #include "ble_types.h" #include "ble_ranges.h" diff --git a/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_hci.h b/include/sd_api_v2/ble_hci.h old mode 100755 new mode 100644 similarity index 100% rename from src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_hci.h rename to include/sd_api_v2/ble_hci.h diff --git a/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_l2cap.h b/include/sd_api_v2/ble_l2cap.h old mode 100755 new mode 100644 similarity index 99% rename from src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_l2cap.h rename to include/sd_api_v2/ble_l2cap.h index af2b98501..3f69ab0bd --- a/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_l2cap.h +++ b/include/sd_api_v2/ble_l2cap.h @@ -45,7 +45,7 @@ #include "adapter.h" -#include "config/platform.h" +#include "platform.h" #include "ble_types.h" #include "ble_ranges.h" diff --git a/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_ranges.h b/include/sd_api_v2/ble_ranges.h old mode 100755 new mode 100644 similarity index 100% rename from src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_ranges.h rename to include/sd_api_v2/ble_ranges.h diff --git a/src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_types.h b/include/sd_api_v2/ble_types.h old mode 100755 new mode 100644 similarity index 100% rename from src/sd_api_v2/sdk/components/softdevice/s132/headers/ble_types.h rename to include/sd_api_v2/ble_types.h diff --git a/src/sd_api_v2/sdk/components/softdevice/s132/headers/nrf_error.h b/include/sd_api_v2/nrf_error.h old mode 100755 new mode 100644 similarity index 100% rename from src/sd_api_v2/sdk/components/softdevice/s132/headers/nrf_error.h rename to include/sd_api_v2/nrf_error.h diff --git a/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble.h b/include/sd_api_v3/ble.h similarity index 100% rename from src/sd_api_v3/sdk/components/softdevice/s132/headers/ble.h rename to include/sd_api_v3/ble.h diff --git a/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_err.h b/include/sd_api_v3/ble_err.h similarity index 100% rename from src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_err.h rename to include/sd_api_v3/ble_err.h diff --git a/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_gap.h b/include/sd_api_v3/ble_gap.h similarity index 100% rename from src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_gap.h rename to include/sd_api_v3/ble_gap.h diff --git a/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_gatt.h b/include/sd_api_v3/ble_gatt.h similarity index 100% rename from src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_gatt.h rename to include/sd_api_v3/ble_gatt.h diff --git a/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_gattc.h b/include/sd_api_v3/ble_gattc.h similarity index 100% rename from src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_gattc.h rename to include/sd_api_v3/ble_gattc.h diff --git a/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_gatts.h b/include/sd_api_v3/ble_gatts.h similarity index 100% rename from src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_gatts.h rename to include/sd_api_v3/ble_gatts.h diff --git a/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_hci.h b/include/sd_api_v3/ble_hci.h similarity index 100% rename from src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_hci.h rename to include/sd_api_v3/ble_hci.h diff --git a/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_l2cap.h b/include/sd_api_v3/ble_l2cap.h similarity index 100% rename from src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_l2cap.h rename to include/sd_api_v3/ble_l2cap.h diff --git a/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_ranges.h b/include/sd_api_v3/ble_ranges.h similarity index 100% rename from src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_ranges.h rename to include/sd_api_v3/ble_ranges.h diff --git a/src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_types.h b/include/sd_api_v3/ble_types.h similarity index 100% rename from src/sd_api_v3/sdk/components/softdevice/s132/headers/ble_types.h rename to include/sd_api_v3/ble_types.h diff --git a/src/sd_api_v3/sdk/components/softdevice/s132/headers/nrf_error.h b/include/sd_api_v3/nrf_error.h similarity index 100% rename from src/sd_api_v3/sdk/components/softdevice/s132/headers/nrf_error.h rename to include/sd_api_v3/nrf_error.h diff --git a/src/sd_api_v5/sdk/components/softdevice/s132/headers/ble.h b/include/sd_api_v5/ble.h similarity index 100% rename from src/sd_api_v5/sdk/components/softdevice/s132/headers/ble.h rename to include/sd_api_v5/ble.h diff --git a/src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_err.h b/include/sd_api_v5/ble_err.h similarity index 100% rename from src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_err.h rename to include/sd_api_v5/ble_err.h diff --git a/src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_gap.h b/include/sd_api_v5/ble_gap.h similarity index 100% rename from src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_gap.h rename to include/sd_api_v5/ble_gap.h diff --git a/src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_gatt.h b/include/sd_api_v5/ble_gatt.h similarity index 100% rename from src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_gatt.h rename to include/sd_api_v5/ble_gatt.h diff --git a/src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_gattc.h b/include/sd_api_v5/ble_gattc.h similarity index 100% rename from src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_gattc.h rename to include/sd_api_v5/ble_gattc.h diff --git a/src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_gatts.h b/include/sd_api_v5/ble_gatts.h similarity index 100% rename from src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_gatts.h rename to include/sd_api_v5/ble_gatts.h diff --git a/src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_hci.h b/include/sd_api_v5/ble_hci.h similarity index 100% rename from src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_hci.h rename to include/sd_api_v5/ble_hci.h diff --git a/src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_l2cap.h b/include/sd_api_v5/ble_l2cap.h similarity index 100% rename from src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_l2cap.h rename to include/sd_api_v5/ble_l2cap.h diff --git a/src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_ranges.h b/include/sd_api_v5/ble_ranges.h similarity index 100% rename from src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_ranges.h rename to include/sd_api_v5/ble_ranges.h diff --git a/src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_types.h b/include/sd_api_v5/ble_types.h similarity index 100% rename from src/sd_api_v5/sdk/components/softdevice/s132/headers/ble_types.h rename to include/sd_api_v5/ble_types.h diff --git a/src/sd_api_v5/sdk/components/softdevice/s132/headers/nrf_error.h b/include/sd_api_v5/nrf_error.h similarity index 100% rename from src/sd_api_v5/sdk/components/softdevice/s132/headers/nrf_error.h rename to include/sd_api_v5/nrf_error.h diff --git a/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble.h b/include/sd_api_v6/ble.h similarity index 100% rename from src/sd_api_v6/sdk/components/softdevice/s140/headers/ble.h rename to include/sd_api_v6/ble.h diff --git a/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_err.h b/include/sd_api_v6/ble_err.h similarity index 100% rename from src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_err.h rename to include/sd_api_v6/ble_err.h diff --git a/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_gap.h b/include/sd_api_v6/ble_gap.h similarity index 100% rename from src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_gap.h rename to include/sd_api_v6/ble_gap.h diff --git a/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_gatt.h b/include/sd_api_v6/ble_gatt.h similarity index 100% rename from src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_gatt.h rename to include/sd_api_v6/ble_gatt.h diff --git a/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_gattc.h b/include/sd_api_v6/ble_gattc.h similarity index 100% rename from src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_gattc.h rename to include/sd_api_v6/ble_gattc.h diff --git a/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_gatts.h b/include/sd_api_v6/ble_gatts.h similarity index 100% rename from src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_gatts.h rename to include/sd_api_v6/ble_gatts.h diff --git a/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_hci.h b/include/sd_api_v6/ble_hci.h similarity index 100% rename from src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_hci.h rename to include/sd_api_v6/ble_hci.h diff --git a/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_l2cap.h b/include/sd_api_v6/ble_l2cap.h similarity index 100% rename from src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_l2cap.h rename to include/sd_api_v6/ble_l2cap.h diff --git a/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_ranges.h b/include/sd_api_v6/ble_ranges.h similarity index 100% rename from src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_ranges.h rename to include/sd_api_v6/ble_ranges.h diff --git a/src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_types.h b/include/sd_api_v6/ble_types.h similarity index 100% rename from src/sd_api_v6/sdk/components/softdevice/s140/headers/ble_types.h rename to include/sd_api_v6/ble_types.h diff --git a/src/sd_api_v6/sdk/components/softdevice/s140/headers/nrf_error.h b/include/sd_api_v6/nrf_error.h similarity index 100% rename from src/sd_api_v6/sdk/components/softdevice/s140/headers/nrf_error.h rename to include/sd_api_v6/nrf_error.h diff --git a/src/sd_api_v2/sdk/components/softdevice/README.md b/src/sd_api_v2/sdk/components/softdevice/README.md new file mode 100644 index 000000000..2ea7209cf --- /dev/null +++ b/src/sd_api_v2/sdk/components/softdevice/README.md @@ -0,0 +1 @@ +Header files for SoftDevice are located in /include/sd_api_v2 diff --git a/src/sd_api_v3/sdk/components/softdevice/README.md b/src/sd_api_v3/sdk/components/softdevice/README.md new file mode 100644 index 000000000..5f884e3b2 --- /dev/null +++ b/src/sd_api_v3/sdk/components/softdevice/README.md @@ -0,0 +1 @@ +Header files for SoftDevice are located in /include/sd_api_v3 diff --git a/src/sd_api_v5/sdk/components/softdevice/README.md b/src/sd_api_v5/sdk/components/softdevice/README.md new file mode 100644 index 000000000..251d616cd --- /dev/null +++ b/src/sd_api_v5/sdk/components/softdevice/README.md @@ -0,0 +1 @@ +Header files for SoftDevice are located in /include/sd_api_v5 diff --git a/src/sd_api_v6/sdk/components/softdevice/README.md b/src/sd_api_v6/sdk/components/softdevice/README.md new file mode 100644 index 000000000..fcfbb5a9e --- /dev/null +++ b/src/sd_api_v6/sdk/components/softdevice/README.md @@ -0,0 +1 @@ +Header files for SoftDevice are located in /include/sd_api_v6 diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index dd7eac548..537aa0ca8 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -365,17 +365,16 @@ function(setup_test) add_executable(${test_name} ${source_file} ${source_testcases} ${test_util_src}) target_compile_definitions(${test_name} PRIVATE -DNRF_SD_BLE_API=${softdevice_api_ver}) - target_include_directories(${test_name} SYSTEM PRIVATE ../src/sd_api_v${softdevice_api_ver}/sdk/components/softdevice/s132/headers) - target_include_directories(${test_name} SYSTEM PRIVATE ../src/sd_api_v${softdevice_api_ver}/sdk/components/softdevice/s140/headers) + target_include_directories(${test_name} SYSTEM PRIVATE ../include/sd_api_v${softdevice_api_ver}) target_include_directories(${test_name} SYSTEM PRIVATE util/include) if(WIN32) - target_link_libraries(${test_name} PRIVATE pc_ble_driver_static_sd_api_v${softdevice_api_ver} Catch2::Catch2) + target_link_libraries(${test_name} PRIVATE nrf_ble_driver_sd_api_v${softdevice_api_ver}_static Catch2::Catch2) elseif(APPLE) - target_link_libraries(${test_name} PRIVATE pc_ble_driver_static_sd_api_v${softdevice_api_ver} Catch2::Catch2) + target_link_libraries(${test_name} PRIVATE nrf_ble_driver_sd_api_v${softdevice_api_ver}_static Catch2::Catch2) else() # Assume Linux - target_link_libraries(${test_name} PRIVATE pc_ble_driver_static_sd_api_v${softdevice_api_ver} "pthread" Catch2::Catch2) + target_link_libraries(${test_name} PRIVATE nrf_ble_driver_sd_api_v${softdevice_api_ver}_static "pthread" Catch2::Catch2) endif() if(NOT ${test_name} STREQUAL "test_uart_boost_v2") From d17406fad44c4a96d8ef376b35c6a59fad7180d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ken=20A=2E=20Rederg=C3=A5rd?= <64542+kenr@users.noreply.github.com> Date: Wed, 30 Jan 2019 12:42:21 +0100 Subject: [PATCH 14/32] Fix/advertise buffers (#191) * Align number of advertise buffers with connectivity in SDK patch * Fix issue with reuse of same advertise buffer * Fix codec issue in relation to connected event * Support replacing advertising buffers during advertising * Update patch to SDK commit 8d32cc00 --- hex/nRF5_SDK_15.2.0_connectivity.patch | 1917 +++++++++-------- include/common/internal/app_ble_gap.h | 41 +- src/common/app_ble_gap.cpp | 92 +- src/common/ble_common.cpp | 2 +- .../ble/ble_gap_struct_serialization.c | 2 + src/sd_api_v6/ble_gap_impl.cpp | 12 +- test/softdevice_api/testcase_advertising.cpp | 63 +- test/softdevice_api/testcase_util.cpp | 110 + test/util/include/test_util.h | 38 +- test/util/include/test_util_adapter_wrapper.h | 19 + .../test_util_adapter_wrapper_scratchpad.h | 4 +- test/util/src/test_util.cpp | 79 +- test/util/src/test_util_adapter_wrapper.cpp | 119 +- 13 files changed, 1446 insertions(+), 1052 deletions(-) create mode 100644 test/softdevice_api/testcase_util.cpp diff --git a/hex/nRF5_SDK_15.2.0_connectivity.patch b/hex/nRF5_SDK_15.2.0_connectivity.patch index 5654f5cae..04e345fa4 100644 --- a/hex/nRF5_SDK_15.2.0_connectivity.patch +++ b/hex/nRF5_SDK_15.2.0_connectivity.patch @@ -1,7 +1,7 @@ -diff --git nRF5_SDK_15.2.0_9412b96/components/boards/pca10056.h nRF5_SDK_15.2.0_f8cd40a/components/boards/pca10056.h +diff --git nRF5_SDK_15.2.0_9412b96/components/boards/pca10056.h nRF5_SDK_15.2.0_8d32cc0/components/boards/pca10056.h index 6b3f92f..7fbfbca 100644 --- nRF5_SDK_15.2.0_9412b96/components/boards/pca10056.h -+++ nRF5_SDK_15.2.0_f8cd40a/components/boards/pca10056.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/boards/pca10056.h @@ -90,6 +90,8 @@ extern "C" { #define RTS_PIN_NUMBER 5 #define HWFC true @@ -11,10 +11,10 @@ index 6b3f92f..7fbfbca 100644 #define BSP_QSPI_SCK_PIN 19 #define BSP_QSPI_CSN_PIN 17 #define BSP_QSPI_IO0_PIN 20 -diff --git nRF5_SDK_15.2.0_9412b96/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.c nRF5_SDK_15.2.0_f8cd40a/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.c +diff --git nRF5_SDK_15.2.0_9412b96/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.c nRF5_SDK_15.2.0_8d32cc0/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.c index 755581d..23b34db 100644 --- nRF5_SDK_15.2.0_9412b96/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.c -+++ nRF5_SDK_15.2.0_f8cd40a/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.c ++++ nRF5_SDK_15.2.0_8d32cc0/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.c @@ -50,10 +50,6 @@ #include "nrf_log.h" NRF_LOG_MODULE_REGISTER(); @@ -62,10 +62,10 @@ index 755581d..23b34db 100644 m_dfu_info.wAddress = CODE_START; m_dfu_info.wFirmwareSize = CODE_SIZE; m_dfu_info.wVersionMajor = APP_VERSION_MAJOR; -diff --git nRF5_SDK_15.2.0_9412b96/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.h nRF5_SDK_15.2.0_f8cd40a/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.h +diff --git nRF5_SDK_15.2.0_9412b96/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.h nRF5_SDK_15.2.0_8d32cc0/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.h index 5906a80..8befbe9 100644 --- nRF5_SDK_15.2.0_9412b96/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.h -+++ nRF5_SDK_15.2.0_f8cd40a/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.h @@ -63,11 +63,12 @@ * * @note If @ref APP_USBD_CONFIG_EVENT_QUEUE_ENABLE is on (1), USB events must be handled manually. @@ -80,10 +80,10 @@ index 5906a80..8befbe9 100644 /** @} */ -diff --git nRF5_SDK_15.2.0_9412b96/components/libraries/log/src/nrf_log_ctrl_internal.h nRF5_SDK_15.2.0_f8cd40a/components/libraries/log/src/nrf_log_ctrl_internal.h +diff --git nRF5_SDK_15.2.0_9412b96/components/libraries/log/src/nrf_log_ctrl_internal.h nRF5_SDK_15.2.0_8d32cc0/components/libraries/log/src/nrf_log_ctrl_internal.h index 3478d9f..660652b 100644 --- nRF5_SDK_15.2.0_9412b96/components/libraries/log/src/nrf_log_ctrl_internal.h -+++ nRF5_SDK_15.2.0_f8cd40a/components/libraries/log/src/nrf_log_ctrl_internal.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/libraries/log/src/nrf_log_ctrl_internal.h @@ -79,7 +79,7 @@ #else // NRF_MODULE_ENABLED(NRF_LOG) #define NRF_LOG_INTERNAL_PROCESS() false @@ -93,10 +93,10 @@ index 3478d9f..660652b 100644 #define NRF_LOG_INTERNAL_HANDLERS_SET(default_handler, bytes_handler) \ UNUSED_PARAMETER(default_handler); UNUSED_PARAMETER(bytes_handler) #define NRF_LOG_INTERNAL_FINAL_FLUSH() -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/middleware/app_mw_ble.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/application/codecs/ble/middleware/app_mw_ble.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/middleware/app_mw_ble.c nRF5_SDK_15.2.0_8d32cc0/components/serialization/application/codecs/ble/middleware/app_mw_ble.c index 033d974..94ff331 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/middleware/app_mw_ble.c -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/application/codecs/ble/middleware/app_mw_ble.c ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/application/codecs/ble/middleware/app_mw_ble.c @@ -44,6 +44,7 @@ #include "ser_sd_transport.h" #include "app_error.h" @@ -123,10 +123,10 @@ index 033d974..94ff331 100644 tx_buf_alloc(&p_buffer, &buffer_length); const uint32_t err_code = ble_enable_req_enc(&(p_buffer[1]), -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/middleware/app_mw_ble_gap.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/application/codecs/ble/middleware/app_mw_ble_gap.c -index 1fbb06f..c60d92d 100644 +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/middleware/app_mw_ble_gap.c nRF5_SDK_15.2.0_8d32cc0/components/serialization/application/codecs/ble/middleware/app_mw_ble_gap.c +index 1fbb06f..29c87e3 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/middleware/app_mw_ble_gap.c -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/application/codecs/ble/middleware/app_mw_ble_gap.c ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/application/codecs/ble/middleware/app_mw_ble_gap.c @@ -1069,7 +1069,9 @@ uint32_t _sd_ble_gap_scan_stop(void) &buffer_length); //@note: Should never fail. @@ -144,7 +144,7 @@ index 1fbb06f..c60d92d 100644 + if (result_code != NRF_SUCCESS) + { -+ app_ble_gap_scan_data_unset(true); ++ app_ble_gap_scan_data_unset(true); + } + //@note: Should never fail. @@ -181,8 +181,8 @@ index 1fbb06f..c60d92d 100644 + if (result_code != NRF_SUCCESS) + { -+ app_ble_gap_adv_buf_addr_unregister(mp_out_params[0], false); -+ app_ble_gap_adv_buf_addr_unregister(mp_out_params[1], false); ++ app_ble_gap_adv_buf_addr_unregister(mp_out_params[0], false); ++ app_ble_gap_adv_buf_addr_unregister(mp_out_params[1], false); + } + //@note: Should never fail. @@ -194,12 +194,14 @@ index 1fbb06f..c60d92d 100644 APP_ERROR_CHECK(err_code); return result_code; -@@ -1918,13 +1925,19 @@ uint32_t _sd_ble_gap_adv_set_configure(uint8_t *p_adv_handle, +@@ -1917,23 +1924,37 @@ uint32_t _sd_ble_gap_adv_set_configure(uint8_t *p_adv_handle, + { uint8_t * p_buffer; uint32_t buffer_length = 0; - - - ++ uint32_t err; + tx_buf_alloc(&p_buffer, (uint16_t *)&buffer_length); - mp_out_params[0] = p_adv_handle; @@ -207,46 +209,78 @@ index 1fbb06f..c60d92d 100644 - mp_out_params[2] = p_adv_data ? p_adv_data->scan_rsp_data.p_data : NULL; + if (p_adv_handle) + { -+ mp_out_params[0] = p_adv_data->adv_data.p_data; -+ mp_out_params[1] = p_adv_data->scan_rsp_data.p_data; ++ mp_out_params[0] = p_adv_data->adv_data.p_data; ++ mp_out_params[1] = p_adv_data->scan_rsp_data.p_data; + } + else + { -+ mp_out_params[0] = NULL; ++ mp_out_params[0] = NULL; + mp_out_params[1] = NULL; + } + const uint32_t err_code = ble_gap_adv_set_configure_req_enc(p_adv_handle, p_adv_data, p_adv_params, &(p_buffer[1]), &buffer_length); //@note: Should never fail. -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.c -index cb0bd94..849a24d 100644 + APP_ERROR_CHECK(err_code); + + //@note: Increment buffer length as internally managed packet type field must be included. +- return ser_sd_transport_cmd_write(p_buffer, ++ err = ser_sd_transport_cmd_write(p_buffer, + (++buffer_length), + gap_adv_set_configure_rsp_dec); ++ ++ if (err == NRF_SUCCESS && p_adv_data) ++ { ++ app_ble_gap_set_adv_data_set(*p_adv_handle, mp_out_params[0], mp_out_params[1]); ++ } ++ ++ return err; + } + + #ifndef S112 +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.c nRF5_SDK_15.2.0_8d32cc0/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.c +index cb0bd94..a3ae478 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.c -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.c -@@ -56,9 +56,22 @@ typedef struct { ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.c +@@ -55,10 +55,37 @@ typedef struct { + static adv_set_t m_adv_sets[4]; //todo configurable number of adv sets. ++typedef struct ++{ ++ uint8_t adv_handle; ++ uint8_t * buf1; ++ uint8_t * buf2; ++} adv_set_data_t; ++ ++static adv_set_data_t adv_set_data[BLE_GAP_ADV_SET_COUNT_MAX]; ++ static ble_data_t m_scan_data = {0}; +static int scan_data_id; #endif ser_ble_gap_app_keyset_t m_app_keys_table[SER_MAX_CONNECTIONS]; -+static void *m_ble_gap_adv_buf_addr_storage[16]; ++static void *m_ble_gap_adv_buf_addr_storage[8]; + +void app_ble_gap_sec_keys_init(void) +{ +#if NRF_SD_BLE_API_VERSION >= 6 + memset(m_ble_gap_adv_buf_addr_storage, 0, sizeof(m_ble_gap_adv_buf_addr_storage)); -+ memset(&m_scan_data, 0, sizeof(m_scan_data)); -+ memset(m_adv_sets, 0, sizeof(m_adv_sets)); ++ memset(&m_scan_data, 0, sizeof(m_scan_data)); ++ memset(m_adv_sets, 0, sizeof(m_adv_sets)); ++ ++ for (int i; i < BLE_GAP_ADV_SET_COUNT_MAX; i++) ++ { ++ adv_set_data[i].adv_handle = BLE_GAP_ADV_SET_HANDLE_NOT_SET; ++ } +#endif -+ memset(m_app_keys_table, 0, sizeof(m_app_keys_table)); ++ memset(m_app_keys_table, 0, sizeof(m_app_keys_table)); +} + uint32_t app_ble_gap_sec_context_create(uint16_t conn_handle, uint32_t *p_index) { uint32_t err_code = NRF_ERROR_NO_MEM; -@@ -115,68 +128,83 @@ uint32_t app_ble_gap_sec_context_find(uint16_t conn_handle, uint32_t *p_index) +@@ -115,68 +142,123 @@ uint32_t app_ble_gap_sec_context_find(uint16_t conn_handle, uint32_t *p_index) return err_code; } #if NRF_SD_BLE_API_VERSION >= 6 @@ -268,114 +302,148 @@ index cb0bd94..849a24d 100644 { - memcpy(&m_scan_data, p_data, sizeof(ble_data_t)); - return NRF_SUCCESS; -+ if (m_ble_gap_adv_buf_addr_storage[i] == NULL) { ++ if ((m_ble_gap_adv_buf_addr_storage[i] == NULL) || ++ (m_ble_gap_adv_buf_addr_storage[i] == p_buf)) ++ { + m_ble_gap_adv_buf_addr_storage[i] = p_buf; + return i+1; + } } --} - ++ + return -1; -+} + } --uint32_t app_ble_gap_scan_data_fetch_clear(ble_data_t * p_data) +void *app_ble_gap_adv_buf_unregister(int id, bool event_context) ++{ ++ (void)event_context; ++ if (id == 0) ++ { ++ return NULL; ++ } ++ ++ void * ret = m_ble_gap_adv_buf_addr_storage[id-1]; ++ m_ble_gap_adv_buf_addr_storage[id-1] = NULL; + +-uint32_t app_ble_gap_scan_data_fetch_clear(ble_data_t * p_data) ++ return ret; ++} ++ ++void app_ble_gap_adv_buf_addr_unregister(void * p_buf, bool event_context) { - memcpy(p_data, &m_scan_data, sizeof(ble_data_t)); - if (m_scan_data.p_data) + (void)event_context; -+ if (id == 0) ++ int i; ++ ++ if (p_buf == NULL) ++ { ++ return; ++ } ++ ++ for (i = 0; i < ARRAY_SIZE(m_ble_gap_adv_buf_addr_storage); i++) { - m_scan_data.p_data = NULL; - return NRF_SUCCESS; -- } -- else -- { -- return NRF_ERROR_NOT_FOUND; -+ return NULL; ++ if (m_ble_gap_adv_buf_addr_storage[i] == p_buf) { ++ m_ble_gap_adv_buf_addr_storage[i] = NULL; ++ } } +- else ++} + -+ void * ret = m_ble_gap_adv_buf_addr_storage[id-1]; -+ m_ble_gap_adv_buf_addr_storage[id-1] = NULL; ++void app_ble_gap_scan_data_set(uint8_t * p_scan_data) ++{ ++ int i; + -+ return ret; ++ for (i = 0; i < ARRAY_SIZE(m_ble_gap_adv_buf_addr_storage); i++) + { +- return NRF_ERROR_NOT_FOUND; ++ if (m_ble_gap_adv_buf_addr_storage[i] == p_scan_data) { ++ scan_data_id = i+1; ++ return; ++ } + } ++ scan_data_id = 0; } -uint32_t app_ble_gap_adv_set_register(uint8_t adv_handle, uint8_t * p_adv_data, uint8_t * p_scan_rsp_data) -+void app_ble_gap_adv_buf_addr_unregister(void * p_buf, bool event_context) ++void app_ble_gap_scan_data_unset(bool free) { - uint32_t err_code = NRF_ERROR_NO_MEM; - uint32_t i; - for (i = 0; i < ARRAY_SIZE(m_adv_sets); i++) -+ (void)event_context; -+ int i; -+ -+ if (p_buf == NULL) ++ if (scan_data_id) { - if (m_adv_sets[i].active == false) -- { ++ if (free) + { - m_adv_sets[i].active = true; - m_adv_sets[i].adv_handle = adv_handle; - m_adv_sets[i].p_adv_data = p_adv_data; - m_adv_sets[i].p_scan_rsp_data = p_scan_rsp_data; - err_code = NRF_SUCCESS; - break; -- } -+ return; ++ app_ble_gap_adv_buf_unregister(scan_data_id, false); + } ++ scan_data_id = 0; } - return err_code; -+ -+ for (i = 0; i < ARRAY_SIZE(m_ble_gap_adv_buf_addr_storage); i++) -+ { -+ if (m_ble_gap_adv_buf_addr_storage[i] == p_buf) { -+ m_ble_gap_adv_buf_addr_storage[i] = NULL; -+ } -+ } } -uint32_t app_ble_gap_adv_set_unregister(uint8_t adv_handle, uint8_t * * pp_adv_data, uint8_t **pp_scan_rsp_data) -+void app_ble_gap_scan_data_set(uint8_t * p_scan_data) ++void app_ble_gap_set_adv_data_set(uint8_t adv_handle, uint8_t * buf1, uint8_t * buf2) { - uint32_t err_code = NRF_ERROR_NOT_FOUND; - uint32_t i; - for (i = 0; i < ARRAY_SIZE(m_adv_sets); i++) -+ int i; ++if (adv_handle == BLE_GAP_ADV_SET_HANDLE_NOT_SET) ++ { ++ return; ++ } + -+ for (i = 0; i < ARRAY_SIZE(m_ble_gap_adv_buf_addr_storage); i++) ++ for (int i; i < BLE_GAP_ADV_SET_COUNT_MAX; i++) ++ { ++ if (adv_set_data[i].adv_handle == adv_handle) ++ { ++ /* If adv_set is already configured replace old buffers with new one. */ ++ if (adv_set_data[i].buf1 != buf1) { ++ app_ble_gap_adv_buf_addr_unregister(adv_set_data[i].buf1, false); ++ } ++ ++ if (adv_set_data[i].buf2 != buf2) { ++ app_ble_gap_adv_buf_addr_unregister(adv_set_data[i].buf2, false); ++ } ++ ++ adv_set_data[i].buf1 = buf1; ++ adv_set_data[i].buf2 = buf2; ++ ++ return; ++ } ++ } ++ ++ for (int i; i < BLE_GAP_ADV_SET_COUNT_MAX; i++) { - if ((m_adv_sets[i].active == true) && (m_adv_sets[i].adv_handle == adv_handle)) -- { ++ if (adv_set_data[i].adv_handle == BLE_GAP_ADV_SET_HANDLE_NOT_SET) + { - m_adv_sets[i].active = false; - *pp_adv_data = m_adv_sets[i].p_adv_data; - *pp_scan_rsp_data = m_adv_sets[i].p_scan_rsp_data; - err_code = NRF_SUCCESS; - break; -+ if (m_ble_gap_adv_buf_addr_storage[i] == p_scan_data) { -+ scan_data_id = i+1; ++ adv_set_data[i].adv_handle = adv_handle; ++ adv_set_data[i].buf1 = buf1; ++ adv_set_data[i].buf2 = buf2; + return; } } - return err_code; -+ scan_data_id = 0; -+} -+ -+void app_ble_gap_scan_data_unset(bool free) -+{ -+ if (scan_data_id) -+ { -+ if (free) -+ { -+ app_ble_gap_adv_buf_unregister(scan_data_id, false); -+ } -+ scan_data_id = 0; -+ } } -+ #endif -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.h nRF5_SDK_15.2.0_f8cd40a/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.h -index 58a0870..f2edf11 100644 +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.h nRF5_SDK_15.2.0_8d32cc0/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.h +index 58a0870..c9fb4dc 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.h -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.h @@ -53,6 +53,7 @@ #include "ble_types.h" @@ -393,7 +461,7 @@ index 58a0870..f2edf11 100644 /**@brief Allocates the instance in m_app_keys_table[] for storage of encryption keys. * * @param[in] conn_handle conn_handle -@@ -101,48 +104,14 @@ uint32_t app_ble_gap_sec_context_find(uint16_t conn_handle, uint32_t *p_index); +@@ -101,48 +104,15 @@ uint32_t app_ble_gap_sec_context_find(uint16_t conn_handle, uint32_t *p_index); /** @} */ #if NRF_SD_BLE_API_VERSION >= 6 @@ -444,13 +512,14 @@ index 58a0870..f2edf11 100644 - * - */ -uint32_t app_ble_gap_adv_set_unregister(uint8_t adv_handle, uint8_t * * pp_adv_data, uint8_t **pp_scan_rsp_data); ++void app_ble_gap_set_adv_data_set(uint8_t adv_handle, uint8_t * buf1, uint8_t * buf2); #endif #ifdef __cplusplus } -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/serializers/ble_gap_app.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/application/codecs/ble/serializers/ble_gap_app.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/serializers/ble_gap_app.c nRF5_SDK_15.2.0_8d32cc0/components/serialization/application/codecs/ble/serializers/ble_gap_app.c index 2eac945..24bd2cf 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/serializers/ble_gap_app.c -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/application/codecs/ble/serializers/ble_gap_app.c ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/application/codecs/ble/serializers/ble_gap_app.c @@ -650,6 +650,7 @@ uint32_t ble_gap_scan_start_rsp_dec(uint8_t const * const p_buf, uint32_t * const p_result_code) { @@ -467,10 +536,10 @@ index 2eac945..24bd2cf 100644 SER_RSP_DEC_END; } -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/serializers/ble_gap_evt_app.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/application/codecs/ble/serializers/ble_gap_evt_app.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/serializers/ble_gap_evt_app.c nRF5_SDK_15.2.0_8d32cc0/components/serialization/application/codecs/ble/serializers/ble_gap_evt_app.c index c8cbc94..8b83d5d 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/serializers/ble_gap_evt_app.c -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/application/codecs/ble/serializers/ble_gap_evt_app.c ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/application/codecs/ble/serializers/ble_gap_evt_app.c @@ -42,6 +42,7 @@ #include "app_util.h" #include "app_ble_gap_sec_keys.h" @@ -534,10 +603,10 @@ index c8cbc94..8b83d5d 100644 SER_EVT_DEC_END; } #endif -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/common/conn_systemreset.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/application/codecs/common/conn_systemreset.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/common/conn_systemreset.c nRF5_SDK_15.2.0_8d32cc0/components/serialization/application/codecs/common/conn_systemreset.c index ca012d2..f1088c4 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/common/conn_systemreset.c -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/application/codecs/common/conn_systemreset.c ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/application/codecs/common/conn_systemreset.c @@ -56,8 +56,9 @@ uint32_t conn_systemreset(void) } @@ -550,10 +619,10 @@ index ca012d2..f1088c4 100644 err_code = ser_sd_transport_cmd_write(p_tx_buf, tx_buf_len, NULL); if (err_code != NRF_SUCCESS) -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/ble_serialization.h nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/ble_serialization.h +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/ble_serialization.h nRF5_SDK_15.2.0_8d32cc0/components/serialization/common/ble_serialization.h index dc37234..0787032 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/common/ble_serialization.h -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/ble_serialization.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/common/ble_serialization.h @@ -58,7 +58,7 @@ typedef enum SER_PKT_TYPE_EVT, /**< Event packet type. */ SER_PKT_TYPE_DTM_CMD, /**< DTM Command packet type. */ @@ -576,10 +645,10 @@ index dc37234..0787032 100644 #define LOW16(a) ((uint16_t)((a & 0x0000FFFF) >> 0)) #define HIGH16(a) ((uint16_t)((a & 0xFFFF0000) >> 16)) -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/ser_config.h nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/ser_config.h +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/ser_config.h nRF5_SDK_15.2.0_8d32cc0/components/serialization/common/ser_config.h index 2e6d502..0f6c4a9 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/common/ser_config.h -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/ser_config.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/common/ser_config.h @@ -66,8 +66,8 @@ extern "C" { /** Max packets size in serialization HAL Transport layer (packets before adding PHY header i.e. @@ -610,10 +679,10 @@ index 2e6d502..0f6c4a9 100644 #ifdef __cplusplus } #endif -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/ser_dbg_sd_str.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/ser_dbg_sd_str.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/ser_dbg_sd_str.c nRF5_SDK_15.2.0_8d32cc0/components/serialization/common/ser_dbg_sd_str.c index 5fbf555..b7390f3 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/common/ser_dbg_sd_str.c -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/ser_dbg_sd_str.c ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/common/ser_dbg_sd_str.c @@ -54,10 +54,10 @@ #if NRF_MODULE_ENABLED(NRF_LOG) && defined(BLE_STACK_SUPPORT_REQD) @@ -657,41 +726,39 @@ index 5fbf555..b7390f3 100644 "SD_EVT_UNKNOWN", /*0x27*/ "SD_EVT_UNKNOWN", /*0x28*/ "SD_EVT_UNKNOWN", /*0x29*/ -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c -index bd8943d..eed27e8 100644 +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c nRF5_SDK_15.2.0_8d32cc0/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c +index bd8943d..9c1edaa 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c -@@ -453,9 +453,7 @@ uint32_t ble_gap_evt_connected_t_enc(void const * const p_void_struct, - SER_PUSH_uint8(&p_struct->role); ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c +@@ -454,8 +454,7 @@ uint32_t ble_gap_evt_connected_t_enc(void const * const p_void_struct, SER_PUSH_FIELD(&p_struct->conn_params, ble_gap_conn_params_t_enc); #if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 5 -- SER_PUSH_uint8(&p_struct->adv_handle); + SER_PUSH_uint8(&p_struct->adv_handle); - SER_PUSH_uint16(&p_struct->adv_data.adv_data.len); - SER_PUSH_uint16(&p_struct->adv_data.scan_rsp_data.len); + SER_PUSH_FIELD(&p_struct->adv_data, ble_gap_adv_data_t_enc); #endif SER_STRUCT_ENC_END; -@@ -472,9 +470,7 @@ uint32_t ble_gap_evt_connected_t_dec(uint8_t const * const p_buf, - SER_PULL_uint8(&p_struct->role); +@@ -473,8 +472,7 @@ uint32_t ble_gap_evt_connected_t_dec(uint8_t const * const p_buf, SER_PULL_FIELD(&p_struct->conn_params, ble_gap_conn_params_t_dec); #if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 5 -- SER_PULL_uint8(&p_struct->adv_handle); + SER_PULL_uint8(&p_struct->adv_handle); - SER_PULL_uint16(&p_struct->adv_data.adv_data.len); - SER_PULL_uint16(&p_struct->adv_data.scan_rsp_data.len); + SER_PULL_FIELD(&p_struct->adv_data, ble_gap_adv_data_t_dec); #endif SER_STRUCT_DEC_END; -@@ -1721,15 +1717,8 @@ uint32_t ble_gap_evt_adv_set_terminated_t_enc(void const * const p_void_struct, +@@ -1721,15 +1719,8 @@ uint32_t ble_gap_evt_adv_set_terminated_t_enc(void const * const p_void_struct, SER_PUSH_uint8(&p_struct->reason); SER_PUSH_uint8(&p_struct->adv_handle); SER_PUSH_uint8(&p_struct->num_completed_adv_events); - SER_PUSH_uint16(&p_struct->adv_data.adv_data.len); -- + - uint32_t addr = (uint32_t)p_struct->adv_data.adv_data.p_data; - SER_PUSH_uint32(&addr); - +- - SER_PUSH_uint16(&p_struct->adv_data.scan_rsp_data.len); - - addr = (uint32_t)p_struct->adv_data.scan_rsp_data.p_data; @@ -700,7 +767,7 @@ index bd8943d..eed27e8 100644 SER_STRUCT_ENC_END; } -@@ -1744,10 +1733,8 @@ uint32_t ble_gap_evt_adv_set_terminated_t_dec(uint8_t const * const p_buf, +@@ -1744,10 +1735,8 @@ uint32_t ble_gap_evt_adv_set_terminated_t_dec(uint8_t const * const p_buf, SER_PULL_uint8(&p_struct->reason); SER_PULL_uint8(&p_struct->adv_handle); SER_PULL_uint8(&p_struct->num_completed_adv_events); @@ -713,10 +780,10 @@ index bd8943d..eed27e8 100644 SER_STRUCT_DEC_END; } -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/struct_ser/ble/ble_struct_serialization.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/struct_ser/ble/ble_struct_serialization.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/struct_ser/ble/ble_struct_serialization.c nRF5_SDK_15.2.0_8d32cc0/components/serialization/common/struct_ser/ble/ble_struct_serialization.c index 37f43ac..40ddda2 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/common/struct_ser/ble/ble_struct_serialization.c -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/struct_ser/ble/ble_struct_serialization.c ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/common/struct_ser/ble/ble_struct_serialization.c @@ -46,8 +46,11 @@ #include "ble_types.h" #include "ble.h" @@ -764,10 +831,10 @@ index 37f43ac..40ddda2 100644 #endif SER_PULL_len16data(&p_struct->p_data, &p_struct->len); -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_hal_transport.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/transport/ser_hal_transport.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_hal_transport.c nRF5_SDK_15.2.0_8d32cc0/components/serialization/common/transport/ser_hal_transport.c index 9bcc818..5d97f88 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_hal_transport.c -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/transport/ser_hal_transport.c ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/common/transport/ser_hal_transport.c @@ -44,7 +44,7 @@ #include "ser_config.h" #include "ser_phy.h" @@ -800,10 +867,10 @@ index 9bcc818..5d97f88 100644 uint32_t ser_hal_transport_open(ser_hal_transport_events_handler_t events_handler) { uint32_t err_code = NRF_SUCCESS; -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_hal_transport.h nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/transport/ser_hal_transport.h +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_hal_transport.h nRF5_SDK_15.2.0_8d32cc0/components/serialization/common/transport/ser_hal_transport.h index d4da8b4..55d99d8 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_hal_transport.h -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/transport/ser_hal_transport.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/common/transport/ser_hal_transport.h @@ -162,6 +162,8 @@ typedef void (*ser_hal_transport_events_handler_t)(ser_hal_transport_evt_t event */ uint32_t ser_hal_transport_open(ser_hal_transport_events_handler_t events_handler); @@ -813,10 +880,10 @@ index d4da8b4..55d99d8 100644 /**@brief Function for closing a transport channel. * -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/config/ser_phy_config_conn.h nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/transport/ser_phy/config/ser_phy_config_conn.h +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/config/ser_phy_config_conn.h nRF5_SDK_15.2.0_8d32cc0/components/serialization/common/transport/ser_phy/config/ser_phy_config_conn.h index 06e7f9c..164a375 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/config/ser_phy_config_conn.h -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/transport/ser_phy/config/ser_phy_config_conn.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/common/transport/ser_phy/config/ser_phy_config_conn.h @@ -69,10 +69,10 @@ extern "C" { /* UART configuration */ #define UART_IRQ_PRIORITY APP_IRQ_PRIORITY_LOWEST @@ -832,10 +899,10 @@ index 06e7f9c..164a375 100644 #ifdef __cplusplus -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/ser_phy_hci.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/transport/ser_phy/ser_phy_hci.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/ser_phy_hci.c nRF5_SDK_15.2.0_8d32cc0/components/serialization/common/transport/ser_phy/ser_phy_hci.c index 20e1eef..6996889 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/ser_phy_hci.c -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/transport/ser_phy/ser_phy_hci.c ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/common/transport/ser_phy/ser_phy_hci.c @@ -51,6 +51,17 @@ #include "nrf_soc.h" #include "ser_config.h" @@ -1131,10 +1198,10 @@ index 20e1eef..6996889 100644 } return err_code; } -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/ser_phy_hci.h nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/transport/ser_phy/ser_phy_hci.h +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/ser_phy_hci.h nRF5_SDK_15.2.0_8d32cc0/components/serialization/common/transport/ser_phy/ser_phy_hci.h index ab7f337..409491d 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/ser_phy_hci.h -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/transport/ser_phy/ser_phy_hci.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/common/transport/ser_phy/ser_phy_hci.h @@ -129,6 +129,8 @@ typedef void (*ser_phy_hci_slip_event_handler_t)(ser_phy_hci_slip_evt_t *p_event */ uint32_t ser_phy_hci_slip_open(ser_phy_hci_slip_event_handler_t events_handler); @@ -1144,10 +1211,10 @@ index ab7f337..409491d 100644 /**@brief A function for transmitting a HCI SLIP packet. * -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/ser_phy_hci_slip.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/transport/ser_phy/ser_phy_hci_slip.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/ser_phy_hci_slip.c nRF5_SDK_15.2.0_8d32cc0/components/serialization/common/transport/ser_phy/ser_phy_hci_slip.c index 857792b..7ad0537 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/ser_phy_hci_slip.c -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/transport/ser_phy/ser_phy_hci_slip.c ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/common/transport/ser_phy/ser_phy_hci_slip.c @@ -189,6 +189,7 @@ static void tx_buf_fill(void) { can_continue = tx_buf_put(tx_escaped_data); @@ -1232,10 +1299,10 @@ index 857792b..7ad0537 100644 APP_ERROR_CHECK(nrf_drv_uart_rx(&m_uart, m_rx_buf, 1)); -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/ser_phy_hci_slip_cdc.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/transport/ser_phy/ser_phy_hci_slip_cdc.c -index ddbf926..d11c83e 100644 +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/ser_phy_hci_slip_cdc.c nRF5_SDK_15.2.0_8d32cc0/components/serialization/common/transport/ser_phy/ser_phy_hci_slip_cdc.c +index ddbf926..42c7097 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/ser_phy_hci_slip_cdc.c -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/common/transport/ser_phy/ser_phy_hci_slip_cdc.c ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/common/transport/ser_phy/ser_phy_hci_slip_cdc.c @@ -67,10 +67,10 @@ NRF_LOG_MODULE_REGISTER(); static void cdc_acm_user_ev_handler(app_usbd_class_inst_t const * p_inst, app_usbd_cdc_acm_user_event_t event); @@ -1303,8 +1370,8 @@ index ddbf926..d11c83e 100644 NRF_LOG_DEBUG("EVT_PORT_CLOSE"); + if (m_tx_in_progress) + { -+ m_ser_phy_hci_slip_event.evt_type = SER_PHY_HCI_SLIP_EVT_PKT_SENT; -+ m_ser_phy_hci_slip_event_handler(&m_ser_phy_hci_slip_event); ++ m_ser_phy_hci_slip_event.evt_type = SER_PHY_HCI_SLIP_EVT_PKT_SENT; ++ m_ser_phy_hci_slip_event_handler(&m_ser_phy_hci_slip_event); + m_tx_in_progress = false; + } m_port_open = false; @@ -1347,10 +1414,10 @@ index ddbf926..d11c83e 100644 return NRF_SUCCESS; } -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble.c nRF5_SDK_15.2.0_8d32cc0/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble.c index f8e4666..c7807ad 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble.c -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble.c ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble.c @@ -41,7 +41,7 @@ #include "conn_mw_ble.h" #include "ble_serialization.h" @@ -1369,10 +1436,10 @@ index f8e4666..c7807ad 100644 #else err_code = ble_enable_req_dec(p_rx_buf, rx_buf_len); SER_ASSERT(err_code == NRF_SUCCESS, err_code); -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gap.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gap.c -index 6999f20..940c5af 100644 +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gap.c nRF5_SDK_15.2.0_8d32cc0/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gap.c +index 6999f20..2f8d397 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gap.c -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gap.c ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gap.c @@ -136,14 +136,22 @@ uint32_t conn_mw_ble_gap_scan_start(uint8_t const * const p_rx_buf, err_code = ble_gap_scan_start_req_dec(p_rx_buf, rx_buf_len, &p_scan_params, &p_adv_report_buffer); SER_ASSERT(err_code == NRF_SUCCESS, err_code); @@ -1382,7 +1449,7 @@ index 6999f20..940c5af 100644 + + if (sd_err_code != NRF_SUCCESS) + { -+ conn_ble_gap_scan_data_unset(true); ++ conn_ble_gap_scan_data_unset(true); + } + + err_code = ble_gap_scan_start_rsp_enc(sd_err_code, p_adv_report_buffer, p_tx_buf, p_tx_buf_len); @@ -1406,25 +1473,31 @@ index 6999f20..940c5af 100644 #endif sd_err_code = sd_ble_gap_scan_stop(); -@@ -1232,7 +1240,13 @@ uint32_t conn_mw_ble_gap_adv_set_configure(uint8_t const * const p_rx_buf, +@@ -1232,7 +1240,19 @@ uint32_t conn_mw_ble_gap_adv_set_configure(uint8_t const * const p_rx_buf, sd_err_code = sd_ble_gap_adv_set_configure(p_adv_handle, p_adv_data, p_adv_params); - err_code = ble_gap_adv_set_configure_rsp_enc(sd_err_code, p_tx_buf, p_tx_buf_len, p_adv_handle); + if ((sd_err_code != NRF_SUCCESS) && p_adv_data) + { -+ conn_ble_gap_ble_data_buf_free(p_adv_data->adv_data.p_data); -+ conn_ble_gap_ble_data_buf_free(p_adv_data->scan_rsp_data.p_data); ++ conn_ble_gap_ble_data_buf_free(p_adv_data->adv_data.p_data); ++ conn_ble_gap_ble_data_buf_free(p_adv_data->scan_rsp_data.p_data); ++ } ++ else ++ { ++ conn_ble_gap_set_adv_data_set(*p_adv_handle, ++ p_adv_data->adv_data.p_data, ++ p_adv_data->scan_rsp_data.p_data); + } + + err_code = ble_gap_adv_set_configure_rsp_enc(sd_err_code, p_tx_buf, p_tx_buf_len, p_adv_data, p_adv_handle); SER_ASSERT(err_code == NRF_SUCCESS, err_code); return err_code; -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/ble_event_enc.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/serializers/ble_event_enc.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/ble_event_enc.c nRF5_SDK_15.2.0_8d32cc0/components/serialization/connectivity/codecs/ble/serializers/ble_event_enc.c index ffe2ffe..5355070 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/ble_event_enc.c -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/serializers/ble_event_enc.c ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/connectivity/codecs/ble/serializers/ble_event_enc.c @@ -46,6 +46,7 @@ #include "ble_serialization.h" #include "app_util.h" @@ -1442,10 +1515,10 @@ index ffe2ffe..5355070 100644 switch (p_event->header.evt_id) { #if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 4 -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.c nRF5_SDK_15.2.0_8d32cc0/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.c index ff9a3ad..674a0bf 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.c -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.c ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.c @@ -671,10 +671,14 @@ uint32_t ble_gap_scan_start_req_dec(uint8_t const * const p_buf, } @@ -1475,10 +1548,10 @@ index ff9a3ad..674a0bf 100644 SER_RSP_ENC_END; } -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.h nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.h +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.h nRF5_SDK_15.2.0_8d32cc0/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.h index f1eaa4d..3bfaf36 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.h -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.h @@ -850,6 +850,9 @@ uint32_t ble_gap_scan_start_req_dec(uint8_t const * const p_buf, * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. */ @@ -1497,10 +1570,10 @@ index f1eaa4d..3bfaf36 100644 uint8_t const * const p_adv_handle); #ifndef S112 -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/ble_gap_evt_conn.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/serializers/ble_gap_evt_conn.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/ble_gap_evt_conn.c nRF5_SDK_15.2.0_8d32cc0/components/serialization/connectivity/codecs/ble/serializers/ble_gap_evt_conn.c index 9267b39..a96cff8 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/ble_gap_evt_conn.c -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/serializers/ble_gap_evt_conn.c ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/connectivity/codecs/ble/serializers/ble_gap_evt_conn.c @@ -43,6 +43,7 @@ #include "ble_serialization.h" #include "cond_field_serialization.h" @@ -1548,12 +1621,23 @@ index 9267b39..a96cff8 100644 SER_EVT_ENC_END; } -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.c -index 3f8c122..8b21066 100644 +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.c nRF5_SDK_15.2.0_8d32cc0/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.c +index 3f8c122..351e35b 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.c -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.c -@@ -54,7 +54,25 @@ typedef struct ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.c +@@ -52,9 +52,41 @@ typedef struct + uint8_t ble_data[SER_MAX_ADV_DATA]; + } ble_data_item_t; ++typedef struct ++{ ++ uint8_t adv_handle; ++ uint8_t * buf1; ++ uint8_t * buf2; ++} adv_set_data_t; ++ ++static adv_set_data_t adv_set_data[BLE_GAP_ADV_SET_COUNT_MAX]; ++ ble_data_item_t m_ble_data_pool[8]; +static uint8_t * mp_scan_data; @@ -1572,13 +1656,18 @@ index 3f8c122..8b21066 100644 + { + m_ble_data_pool[i].id = 0; + } ++ ++ for (int i = 0; i < BLE_GAP_ADV_SET_COUNT_MAX; i++) ++ { ++ adv_set_data[i].adv_handle = BLE_GAP_ADV_SET_HANDLE_NOT_SET; ++ } +#endif +} + uint32_t conn_ble_gap_sec_context_create(uint32_t *p_index) { uint32_t err_code = NRF_ERROR_NO_MEM; -@@ -115,6 +133,11 @@ uint8_t * conn_ble_gap_ble_data_buf_alloc(uint32_t id) +@@ -115,6 +147,11 @@ uint8_t * conn_ble_gap_ble_data_buf_alloc(uint32_t id) { uint32_t i; @@ -1590,7 +1679,7 @@ index 3f8c122..8b21066 100644 /* First find if given id already allocated the buffer. */ for (i = 0; i < ARRAY_SIZE(m_ble_data_pool); i++) { -@@ -137,19 +160,43 @@ uint8_t * conn_ble_gap_ble_data_buf_alloc(uint32_t id) +@@ -137,16 +174,80 @@ uint8_t * conn_ble_gap_ble_data_buf_alloc(uint32_t id) } @@ -1610,10 +1699,9 @@ index 3f8c122..8b21066 100644 { + uint32_t id = m_ble_data_pool[i].id; m_ble_data_pool[i].id = 0; -- return; + return id; - } - } ++ } ++ } + + return 0; +} @@ -1633,13 +1721,50 @@ index 3f8c122..8b21066 100644 + } + mp_scan_data = NULL; + } - } - #endif - -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.h nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.h -index 875de9a..348b54d 100644 ++} ++ ++void conn_ble_gap_set_adv_data_set(uint8_t adv_handle, uint8_t * buf1, uint8_t * buf2) ++{ ++ if (adv_handle == BLE_GAP_ADV_SET_HANDLE_NOT_SET) ++ { ++ return; ++ } ++ ++ for (int i = 0; i < BLE_GAP_ADV_SET_COUNT_MAX; i++) ++ { ++ if (adv_set_data[i].adv_handle == adv_handle) ++ { ++ /* If adv_set is already configured replace old buffers with new one. */ ++ if (adv_set_data[i].buf1 != buf1) ++ { ++ conn_ble_gap_ble_data_buf_free(adv_set_data[i].buf1); ++ } ++ if (adv_set_data[i].buf2 != buf2) ++ { ++ conn_ble_gap_ble_data_buf_free(adv_set_data[i].buf2); ++ } ++ ++ adv_set_data[i].buf1 = buf1; ++ adv_set_data[i].buf2 = buf2; ++ ++ return; ++ } ++ } ++ ++ for (int i = 0; i < BLE_GAP_ADV_SET_COUNT_MAX; i++) ++ { ++ if (adv_set_data[i].adv_handle == BLE_GAP_ADV_SET_HANDLE_NOT_SET) ++ { ++ adv_set_data[i].adv_handle = adv_handle; ++ adv_set_data[i].buf1 = buf1; ++ adv_set_data[i].buf2 = buf2; + return; + } + } +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.h nRF5_SDK_15.2.0_8d32cc0/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.h +index 875de9a..8db41f7 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.h -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.h @@ -51,7 +51,7 @@ #include "ble_gap.h" @@ -1659,7 +1784,7 @@ index 875de9a..348b54d 100644 /**@brief Allocates instance in m_conn_keys_table[] for storage of encryption keys. * * @param[out] p_index Pointer to the index of allocated instance. -@@ -119,7 +122,10 @@ uint8_t * conn_ble_gap_ble_data_buf_alloc(uint32_t id); +@@ -119,7 +122,12 @@ uint8_t * conn_ble_gap_ble_data_buf_alloc(uint32_t id); /** @brief Function for freeing the buffer. * @param p_data Buffer to be freed. */ @@ -1668,13 +1793,15 @@ index 875de9a..348b54d 100644 + +void conn_ble_gap_scan_data_set(uint8_t * p_scan_data); +void conn_ble_gap_scan_data_unset(bool free); ++ ++void conn_ble_gap_set_adv_data_set(uint8_t adv_handle, uint8_t * buf1, uint8_t * buf2); #ifdef __cplusplus } -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.c nRF5_SDK_15.2.0_8d32cc0/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.c index 2a54512..68623e4 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.c -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.c ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.c @@ -46,6 +46,16 @@ sercon_ble_user_mem_t m_conn_user_mem_table[SER_MAX_CONNECTIONS]; @@ -1692,10 +1819,10 @@ index 2a54512..68623e4 100644 uint32_t conn_ble_user_mem_context_create(uint32_t *p_index) { uint32_t err_code = NRF_ERROR_NO_MEM; -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.h nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.h +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.h nRF5_SDK_15.2.0_8d32cc0/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.h index bb53a2d..3de2b6f 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.h -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.h @@ -70,6 +70,9 @@ typedef struct uint8_t mem_table[64]; /**< Memory table. */ } sercon_ble_user_mem_t; @@ -1706,10 +1833,10 @@ index bb53a2d..3de2b6f 100644 /**@brief Allocates instance in m_user_mem_table[] for storage. * * @param[out] p_index Pointer to the index of allocated instance. -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_event_encoder.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/ser_conn_event_encoder.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_event_encoder.c nRF5_SDK_15.2.0_8d32cc0/components/serialization/connectivity/ser_conn_event_encoder.c index d784754..7d8e424 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_event_encoder.c -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/ser_conn_event_encoder.c ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/connectivity/ser_conn_event_encoder.c @@ -46,6 +46,7 @@ #include "ser_hal_transport.h" #include "ser_conn_event_encoder.h" @@ -1746,10 +1873,10 @@ index d784754..7d8e424 100644 } else { -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_handlers.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/ser_conn_handlers.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_handlers.c nRF5_SDK_15.2.0_8d32cc0/components/serialization/connectivity/ser_conn_handlers.c index f656ee2..f6656ea 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_handlers.c -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/ser_conn_handlers.c ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/connectivity/ser_conn_handlers.c @@ -48,6 +48,8 @@ #include "nrf_sdh.h" #ifdef BLE_STACK_SUPPORT_REQD @@ -1782,10 +1909,10 @@ index f656ee2..f6656ea 100644 { // Queue is full. Do not pull new events. nrf_sdh_suspend(); -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_handlers.h nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/ser_conn_handlers.h +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_handlers.h nRF5_SDK_15.2.0_8d32cc0/components/serialization/connectivity/ser_conn_handlers.h index cc5777a..3f17f2f 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_handlers.h -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/ser_conn_handlers.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/connectivity/ser_conn_handlers.h @@ -77,7 +77,7 @@ extern "C" { #endif @@ -1805,10 +1932,10 @@ index cc5777a..3f17f2f 100644 /**@brief A function for processing BLE SoftDevice events. * * @details BLE events are put into application scheduler queue to be processed at a later time. -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_pkt_decoder.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/ser_conn_pkt_decoder.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_pkt_decoder.c nRF5_SDK_15.2.0_8d32cc0/components/serialization/connectivity/ser_conn_pkt_decoder.c index c8a899c..d3e3fca 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_pkt_decoder.c -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/ser_conn_pkt_decoder.c ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/connectivity/ser_conn_pkt_decoder.c @@ -86,9 +86,9 @@ uint32_t ser_conn_received_pkt_process( break; } @@ -1821,10 +1948,10 @@ index c8a899c..d3e3fca 100644 break; } -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_reset_cmd_decoder.c nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/ser_conn_reset_cmd_decoder.c +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_reset_cmd_decoder.c nRF5_SDK_15.2.0_8d32cc0/components/serialization/connectivity/ser_conn_reset_cmd_decoder.c index fcf4235..efc7244 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_reset_cmd_decoder.c -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/ser_conn_reset_cmd_decoder.c ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/connectivity/ser_conn_reset_cmd_decoder.c @@ -39,9 +39,92 @@ */ #include "nrf_nvic.h" @@ -1921,10 +2048,10 @@ index fcf4235..efc7244 100644 + break; + } } -diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_reset_cmd_decoder.h nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/ser_conn_reset_cmd_decoder.h +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_reset_cmd_decoder.h nRF5_SDK_15.2.0_8d32cc0/components/serialization/connectivity/ser_conn_reset_cmd_decoder.h index 6e9eb9c..2b654e1 100644 --- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/ser_conn_reset_cmd_decoder.h -+++ nRF5_SDK_15.2.0_f8cd40a/components/serialization/connectivity/ser_conn_reset_cmd_decoder.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/serialization/connectivity/ser_conn_reset_cmd_decoder.h @@ -58,7 +58,7 @@ #define SER_CONN_RESET_CMD_DECODER_H__ @@ -1945,10 +2072,10 @@ index 6e9eb9c..2b654e1 100644 #ifdef __cplusplus } -diff --git nRF5_SDK_15.2.0_9412b96/components/softdevice/common/nrf_sdh.c nRF5_SDK_15.2.0_f8cd40a/components/softdevice/common/nrf_sdh.c +diff --git nRF5_SDK_15.2.0_9412b96/components/softdevice/common/nrf_sdh.c nRF5_SDK_15.2.0_8d32cc0/components/softdevice/common/nrf_sdh.c index 63e7fea..f2fa7cf 100644 --- nRF5_SDK_15.2.0_9412b96/components/softdevice/common/nrf_sdh.c -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/common/nrf_sdh.c ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/common/nrf_sdh.c @@ -204,7 +204,11 @@ ret_code_t nrf_sdh_enable_request(void) .source = NRF_SDH_CLOCK_LF_SRC, .rc_ctiv = NRF_SDH_CLOCK_LF_RC_CTIV, @@ -1975,10 +2102,10 @@ index 63e7fea..f2fa7cf 100644 // Enable event interrupt. // Interrupt priority has already been set by the stack. softdevices_evt_irq_enable(); -diff --git nRF5_SDK_15.2.0_9412b96/components/softdevice/common/nrf_sdh_ble.c nRF5_SDK_15.2.0_f8cd40a/components/softdevice/common/nrf_sdh_ble.c +diff --git nRF5_SDK_15.2.0_9412b96/components/softdevice/common/nrf_sdh_ble.c nRF5_SDK_15.2.0_8d32cc0/components/softdevice/common/nrf_sdh_ble.c index d8ac161..db6379f 100644 --- nRF5_SDK_15.2.0_9412b96/components/softdevice/common/nrf_sdh_ble.c -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/common/nrf_sdh_ble.c ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/common/nrf_sdh_ble.c @@ -102,8 +102,9 @@ ret_code_t nrf_sdh_ble_app_ram_start_get(uint32_t * p_app_ram_start) ret_code_t nrf_sdh_ble_default_cfg_set(uint8_t conn_cfg_tag, uint32_t * p_ram_start) @@ -2055,10 +2182,10 @@ index d8ac161..db6379f 100644 /**@brief Function for polling BLE events. * -diff --git nRF5_SDK_15.2.0_9412b96/components/softdevice/common/nrf_sdh_ble.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/common/nrf_sdh_ble.h +diff --git nRF5_SDK_15.2.0_9412b96/components/softdevice/common/nrf_sdh_ble.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/common/nrf_sdh_ble.h index 2970807..7c08450 100644 --- nRF5_SDK_15.2.0_9412b96/components/softdevice/common/nrf_sdh_ble.h -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/common/nrf_sdh_ble.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/common/nrf_sdh_ble.h @@ -62,6 +62,12 @@ extern "C" { #endif @@ -2085,11 +2212,11 @@ index 2970807..7c08450 100644 #ifdef __cplusplus } -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/ble.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/ble.h new file mode 100644 index 0000000..168d655 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/ble.h @@ -0,0 +1,681 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -2772,11 +2899,11 @@ index 0000000..168d655 + @} + @} +*/ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_err.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_err.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/ble_err.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/ble_err.h new file mode 100644 index 0000000..9e70176 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_err.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/ble_err.h @@ -0,0 +1,90 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -2868,11 +2995,11 @@ index 0000000..9e70176 + @} + @} +*/ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_gap.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_gap.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/ble_gap.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/ble_gap.h new file mode 100644 index 0000000..54a33f0 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_gap.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/ble_gap.h @@ -0,0 +1,1917 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -4791,11 +4918,11 @@ index 0000000..54a33f0 +/** + @} +*/ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_gatt.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_gatt.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/ble_gatt.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/ble_gatt.h new file mode 100644 index 0000000..42d6cb6 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_gatt.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/ble_gatt.h @@ -0,0 +1,220 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -5017,11 +5144,11 @@ index 0000000..42d6cb6 +#endif // BLE_GATT_H__ + +/** @} */ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_gattc.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_gattc.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/ble_gattc.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/ble_gattc.h new file mode 100644 index 0000000..859dcdf --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_gattc.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/ble_gattc.h @@ -0,0 +1,660 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -5683,11 +5810,11 @@ index 0000000..859dcdf +/** + @} +*/ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_gatts.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_gatts.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/ble_gatts.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/ble_gatts.h new file mode 100644 index 0000000..535332b --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_gatts.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/ble_gatts.h @@ -0,0 +1,778 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -6467,11 +6594,11 @@ index 0000000..535332b +/** + @} +*/ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_hci.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_hci.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/ble_hci.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/ble_hci.h new file mode 100644 index 0000000..4c7a5d5 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_hci.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/ble_hci.h @@ -0,0 +1,131 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -6604,11 +6731,11 @@ index 0000000..4c7a5d5 +#endif // BLE_HCI_H__ + +/** @} */ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_l2cap.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_l2cap.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/ble_l2cap.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/ble_l2cap.h new file mode 100644 index 0000000..a180840 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_l2cap.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/ble_l2cap.h @@ -0,0 +1,202 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -6812,11 +6939,11 @@ index 0000000..a180840 +/** + @} +*/ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_ranges.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_ranges.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/ble_ranges.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/ble_ranges.h new file mode 100644 index 0000000..854898c --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_ranges.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/ble_ranges.h @@ -0,0 +1,138 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -6956,11 +7083,11 @@ index 0000000..854898c + @} + @} +*/ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_types.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_types.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/ble_types.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/ble_types.h new file mode 100644 index 0000000..f5ccdb7 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/ble_types.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/ble_types.h @@ -0,0 +1,213 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -7175,11 +7302,11 @@ index 0000000..f5ccdb7 + @} + @} +*/ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf52/nrf_mbr.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf52/nrf_mbr.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/nrf52/nrf_mbr.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/nrf52/nrf_mbr.h new file mode 100644 index 0000000..31a3a23 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf52/nrf_mbr.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/nrf52/nrf_mbr.h @@ -0,0 +1,217 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -7398,11 +7525,11 @@ index 0000000..31a3a23 +/** + @} +*/ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_error.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_error.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/nrf_error.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/nrf_error.h new file mode 100644 index 0000000..55ce59e --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_error.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/nrf_error.h @@ -0,0 +1,87 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -7491,11 +7618,11 @@ index 0000000..55ce59e +/** + @} +*/ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_error_sdm.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_error_sdm.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/nrf_error_sdm.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/nrf_error_sdm.h new file mode 100644 index 0000000..3881071 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_error_sdm.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/nrf_error_sdm.h @@ -0,0 +1,67 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -7564,11 +7691,11 @@ index 0000000..3881071 + @} + @} +*/ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_error_soc.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_error_soc.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/nrf_error_soc.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/nrf_error_soc.h new file mode 100644 index 0000000..b876fc4 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_error_soc.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/nrf_error_soc.h @@ -0,0 +1,82 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -7652,11 +7779,11 @@ index 0000000..b876fc4 + @} + @} +*/ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_nvic.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_nvic.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/nrf_nvic.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/nrf_nvic.h new file mode 100644 index 0000000..40a6f84 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_nvic.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/nrf_nvic.h @@ -0,0 +1,485 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -8143,11 +8270,11 @@ index 0000000..40a6f84 +#endif // NRF_NVIC_H__ + +/**@} */ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_sd_def.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_sd_def.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/nrf_sd_def.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/nrf_sd_def.h new file mode 100644 index 0000000..58e699e --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_sd_def.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/nrf_sd_def.h @@ -0,0 +1,28 @@ +/* Copyright (c) 2015 - 2018 Nordic Semiconductor ASA. All Rights Reserved. + * @@ -8177,11 +8304,11 @@ index 0000000..58e699e +#endif + +#endif /* NRF_SD_DEF_H__ */ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_sdm.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_sdm.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/nrf_sdm.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/nrf_sdm.h new file mode 100644 index 0000000..bb98ce0 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_sdm.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/nrf_sdm.h @@ -0,0 +1,331 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -8514,11 +8641,11 @@ index 0000000..bb98ce0 +/** + @} +*/ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_soc.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_soc.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/nrf_soc.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/nrf_soc.h new file mode 100644 index 0000000..2e9e820 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_soc.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/nrf_soc.h @@ -0,0 +1,906 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -9426,11 +9553,11 @@ index 0000000..2e9e820 +#endif // NRF_SOC_H__ + +/**@} */ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_svc.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_svc.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/nrf_svc.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/nrf_svc.h new file mode 100644 index 0000000..c7e3fbe --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers/nrf_svc.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers/nrf_svc.h @@ -0,0 +1,88 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -9520,11 +9647,11 @@ index 0000000..c7e3fbe +} +#endif +#endif // NRF_SVC__ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers_replacement/ble_gap.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers_replacement/ble_gap.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers_replacement/ble_gap.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers_replacement/ble_gap.h new file mode 100644 index 0000000..e07ccef --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers_replacement/ble_gap.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers_replacement/ble_gap.h @@ -0,0 +1,1919 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -11445,11 +11572,11 @@ index 0000000..e07ccef +/** + @} +*/ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers_replacement/ble_gattc.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers_replacement/ble_gattc.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers_replacement/ble_gattc.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers_replacement/ble_gattc.h new file mode 100644 index 0000000..9cd75e2 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers_replacement/ble_gattc.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers_replacement/ble_gattc.h @@ -0,0 +1,674 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -12125,11 +12252,11 @@ index 0000000..9cd75e2 +/** + @} +*/ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers_replacement/nrf_nvic.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers_replacement/nrf_nvic.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers_replacement/nrf_nvic.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers_replacement/nrf_nvic.h new file mode 100644 index 0000000..a29d008 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers_replacement/nrf_nvic.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers_replacement/nrf_nvic.h @@ -0,0 +1,546 @@ +/* + * Copyright (c) Nordic Semiconductor ASA @@ -12677,20 +12804,20 @@ index 0000000..a29d008 +#endif // NRF_NVIC_H__ + +/**@} */ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers_replacement/test.rb nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers_replacement/test.rb +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers_replacement/test.rb nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers_replacement/test.rb new file mode 100644 index 0000000..f58ae1e --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/headers_replacement/test.rb ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/headers_replacement/test.rb @@ -0,0 +1,2 @@ +a = 'xxx const * const*' +puts a.gsub('const','') \ No newline at end of file -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/hex/s132_nrf52_3.0.0_softdevice.hex nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/hex/s132_nrf52_3.0.0_softdevice.hex +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/hex/s132_nrf52_3.0.0_softdevice.hex nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/hex/s132_nrf52_3.0.0_softdevice.hex new file mode 100644 index 0000000..126407c --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/hex/s132_nrf52_3.0.0_softdevice.hex ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/hex/s132_nrf52_3.0.0_softdevice.hex @@ -0,0 +1,7694 @@ +:020000040000FA +:1000000000040020E508000079050000C508000094 @@ -20386,11 +20513,11 @@ index 0000000..126407c +:10E720000100683720FB349B5F80041F80001002CB +:10E730002C01337F0102A029024410E431E00100E2 +:00000001FF -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/toolchain/armgcc/armgcc_s132v3_nrf52832_xxaa.ld nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/toolchain/armgcc/armgcc_s132v3_nrf52832_xxaa.ld +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/toolchain/armgcc/armgcc_s132v3_nrf52832_xxaa.ld nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/toolchain/armgcc/armgcc_s132v3_nrf52832_xxaa.ld new file mode 100644 index 0000000..74140a9 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/toolchain/armgcc/armgcc_s132v3_nrf52832_xxaa.ld ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v3/toolchain/armgcc/armgcc_s132v3_nrf52832_xxaa.ld @@ -0,0 +1,33 @@ +/* Linker script to configure memory regions. */ + @@ -20425,53 +20552,11 @@ index 0000000..74140a9 +} INSERT AFTER .text + +INCLUDE "nrf_common.ld" -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/toolchain/iar/iar_s132v3_nrf52832_xxaa.icf nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/toolchain/iar/iar_s132v3_nrf52832_xxaa.icf -new file mode 100644 -index 0000000..0cc668a ---- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v3/toolchain/iar/iar_s132v3_nrf52832_xxaa.icf -@@ -0,0 +1,36 @@ -+/*###ICF### Section handled by ICF editor, don't touch! ****/ -+/*-Editor annotation file-*/ -+/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ -+/*-Specials-*/ -+define symbol __ICFEDIT_intvec_start__ = 0x1f000; -+/*-Memory Regions-*/ -+define symbol __ICFEDIT_region_ROM_start__ = 0x1f000; -+define symbol __ICFEDIT_region_ROM_end__ = 0x7ffff; -+define symbol __ICFEDIT_region_RAM_start__ = 0x200019c0; -+define symbol __ICFEDIT_region_RAM_end__ = 0x2000ffff; -+export symbol __ICFEDIT_region_RAM_start__; -+export symbol __ICFEDIT_region_RAM_end__; -+/*-Sizes-*/ -+define symbol __ICFEDIT_size_cstack__ = ; -+define symbol __ICFEDIT_size_heap__ = ; -+/**** End of ICF editor section. ###ICF###*/ -+ -+define memory mem with size = 4G; -+define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; -+define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; -+ -+define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; -+define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; -+define block RO_END with alignment = 8, size = 0 { }; -+ -+initialize by copy { readwrite }; -+do not initialize { section .noinit }; -+ -+keep { section .intvec }; -+place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; -+place in ROM_region { readonly, -+ block RO_END }; -+place in RAM_region { readwrite, -+ block CSTACK, -+ block HEAP }; -+ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/ble.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/ble.h new file mode 100644 index 0000000..ed16f6d --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/ble.h @@ -0,0 +1,628 @@ +/* + * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA @@ -21101,11 +21186,11 @@ index 0000000..ed16f6d + @} + @} +*/ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_err.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_err.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/ble_err.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/ble_err.h new file mode 100644 index 0000000..2699abc --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_err.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/ble_err.h @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA @@ -21198,11 +21283,11 @@ index 0000000..2699abc + @} + @} +*/ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_gap.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_gap.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/ble_gap.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/ble_gap.h new file mode 100644 index 0000000..fa61bb9 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_gap.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/ble_gap.h @@ -0,0 +1,2189 @@ +/* + * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA @@ -23393,11 +23478,11 @@ index 0000000..fa61bb9 +/** + @} +*/ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_gatt.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_gatt.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/ble_gatt.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/ble_gatt.h new file mode 100644 index 0000000..f1651c8 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_gatt.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/ble_gatt.h @@ -0,0 +1,228 @@ +/* + * Copyright (c) 2013 - 2017, Nordic Semiconductor ASA @@ -23627,11 +23712,11 @@ index 0000000..f1651c8 +#endif // BLE_GATT_H__ + +/** @} */ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_gattc.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_gattc.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/ble_gattc.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/ble_gattc.h new file mode 100644 index 0000000..f1428cd --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_gattc.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/ble_gattc.h @@ -0,0 +1,707 @@ +/* + * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA @@ -24340,11 +24425,11 @@ index 0000000..f1428cd +/** + @} +*/ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_gatts.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_gatts.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/ble_gatts.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/ble_gatts.h new file mode 100644 index 0000000..1bba73d --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_gatts.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/ble_gatts.h @@ -0,0 +1,841 @@ +/* + * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA @@ -25187,11 +25272,11 @@ index 0000000..1bba73d +/** + @} +*/ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_hci.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_hci.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/ble_hci.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/ble_hci.h new file mode 100644 index 0000000..b48d706 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_hci.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/ble_hci.h @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA @@ -25328,11 +25413,11 @@ index 0000000..b48d706 +#endif // BLE_HCI_H__ + +/** @} */ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_l2cap.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_l2cap.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/ble_l2cap.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/ble_l2cap.h new file mode 100644 index 0000000..96d833a --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_l2cap.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/ble_l2cap.h @@ -0,0 +1,507 @@ +/* + * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA @@ -25841,11 +25926,11 @@ index 0000000..96d833a +/** + @} +*/ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_ranges.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_ranges.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/ble_ranges.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/ble_ranges.h new file mode 100644 index 0000000..9bff917 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_ranges.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/ble_ranges.h @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA @@ -26003,11 +26088,11 @@ index 0000000..9bff917 + @} + @} +*/ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_types.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_types.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/ble_types.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/ble_types.h new file mode 100644 index 0000000..cd5fbaf --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/ble_types.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/ble_types.h @@ -0,0 +1,215 @@ +/* + * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA @@ -26224,11 +26309,11 @@ index 0000000..cd5fbaf + @} + @} +*/ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf52/nrf_mbr.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf52/nrf_mbr.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/nrf52/nrf_mbr.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/nrf52/nrf_mbr.h new file mode 100644 index 0000000..ea231b3 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf52/nrf_mbr.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/nrf52/nrf_mbr.h @@ -0,0 +1,241 @@ +/* + * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA @@ -26471,11 +26556,11 @@ index 0000000..ea231b3 +/** + @} +*/ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_error.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_error.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/nrf_error.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/nrf_error.h new file mode 100644 index 0000000..09d3044 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_error.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/nrf_error.h @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA @@ -26567,11 +26652,11 @@ index 0000000..09d3044 +/** + @} +*/ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_error_sdm.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_error_sdm.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/nrf_error_sdm.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/nrf_error_sdm.h new file mode 100644 index 0000000..85e08f3 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_error_sdm.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/nrf_error_sdm.h @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA @@ -26643,11 +26728,11 @@ index 0000000..85e08f3 + @} + @} +*/ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_error_soc.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_error_soc.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/nrf_error_soc.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/nrf_error_soc.h new file mode 100644 index 0000000..ea9825e --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_error_soc.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/nrf_error_soc.h @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA @@ -26734,11 +26819,11 @@ index 0000000..ea9825e + @} + @} +*/ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_nvic.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_nvic.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/nrf_nvic.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/nrf_nvic.h new file mode 100644 index 0000000..1705cb6 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_nvic.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/nrf_nvic.h @@ -0,0 +1,486 @@ +/* + * Copyright (c) 2016 - 2017, Nordic Semiconductor ASA @@ -27226,11 +27311,11 @@ index 0000000..1705cb6 +#endif // NRF_NVIC_H__ + +/**@} */ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_sd_def.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_sd_def.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/nrf_sd_def.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/nrf_sd_def.h new file mode 100644 index 0000000..7bf0ff0 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_sd_def.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/nrf_sd_def.h @@ -0,0 +1,28 @@ +/* Copyright (c) 2015 - 2018 Nordic Semiconductor ASA. All Rights Reserved. + * @@ -27260,11 +27345,11 @@ index 0000000..7bf0ff0 +#endif + +#endif /* NRF_SD_DEF_H__ */ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_sdm.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_sdm.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/nrf_sdm.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/nrf_sdm.h new file mode 100644 index 0000000..09eaecb --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_sdm.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/nrf_sdm.h @@ -0,0 +1,357 @@ +/* + * Copyright (c) 2015 - 2017, Nordic Semiconductor ASA @@ -27623,11 +27708,11 @@ index 0000000..09eaecb +/** + @} +*/ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_soc.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_soc.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/nrf_soc.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/nrf_soc.h new file mode 100644 index 0000000..60fff94 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_soc.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/nrf_soc.h @@ -0,0 +1,934 @@ +/* + * Copyright (c) 2015 - 2017, Nordic Semiconductor ASA @@ -28563,11 +28648,11 @@ index 0000000..60fff94 +#endif // NRF_SOC_H__ + +/**@} */ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_svc.h nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_svc.h +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/nrf_svc.h nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/nrf_svc.h new file mode 100644 index 0000000..c26ce74 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers/nrf_svc.h ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers/nrf_svc.h @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA @@ -28659,20 +28744,20 @@ index 0000000..c26ce74 +} +#endif +#endif // NRF_SVC__ -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers_replacement/test.rb nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers_replacement/test.rb +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers_replacement/test.rb nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers_replacement/test.rb new file mode 100644 index 0000000..f58ae1e --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/headers_replacement/test.rb ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/headers_replacement/test.rb @@ -0,0 +1,2 @@ +a = 'xxx const * const*' +puts a.gsub('const','') \ No newline at end of file -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/hex/s132_nrf52_5.1.0_softdevice.hex nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/hex/s132_nrf52_5.1.0_softdevice.hex +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/hex/s132_nrf52_5.1.0_softdevice.hex nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/hex/s132_nrf52_5.1.0_softdevice.hex new file mode 100644 index 0000000..757b5f6 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/hex/s132_nrf52_5.1.0_softdevice.hex ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/hex/s132_nrf52_5.1.0_softdevice.hex @@ -0,0 +1,7843 @@ +:020000040000FA +:1000000000040020E90800007D050000C908000088 @@ -36517,11 +36602,11 @@ index 0000000..757b5f6 +:10F070001B201C041AA20401980912BF237F01025D +:04F080006B290000F8 +:00000001FF -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/toolchain/armgcc/armgcc_s132v5_nrf52832_xxaa.ld nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/toolchain/armgcc/armgcc_s132v5_nrf52832_xxaa.ld +diff --git nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/toolchain/armgcc/armgcc_s132v5_nrf52832_xxaa.ld nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/toolchain/armgcc/armgcc_s132v5_nrf52832_xxaa.ld new file mode 100644 index 0000000..cb45d8b --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/toolchain/armgcc/armgcc_s132v5_nrf52832_xxaa.ld ++++ nRF5_SDK_15.2.0_8d32cc0/components/softdevice/s132v5/toolchain/armgcc/armgcc_s132v5_nrf52832_xxaa.ld @@ -0,0 +1,33 @@ +/* Linker script to configure memory regions. */ + @@ -36556,52 +36641,10 @@ index 0000000..cb45d8b +} INSERT AFTER .text + +INCLUDE "nrf_common.ld" -diff --git nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/toolchain/iar/iar_s132v5_nrf52832_xxaa.icf nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/toolchain/iar/iar_s132v5_nrf52832_xxaa.icf -new file mode 100644 -index 0000000..55701b7 ---- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/components/softdevice/s132v5/toolchain/iar/iar_s132v5_nrf52832_xxaa.icf -@@ -0,0 +1,36 @@ -+/*###ICF### Section handled by ICF editor, don't touch! ****/ -+/*-Editor annotation file-*/ -+/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ -+/*-Specials-*/ -+define symbol __ICFEDIT_intvec_start__ = 0x23000; -+/*-Memory Regions-*/ -+define symbol __ICFEDIT_region_ROM_start__ = 0x23000; -+define symbol __ICFEDIT_region_ROM_end__ = 0x7ffff; -+define symbol __ICFEDIT_region_RAM_start__ = 0x20001380; -+define symbol __ICFEDIT_region_RAM_end__ = 0x2000ffff; -+export symbol __ICFEDIT_region_RAM_start__; -+export symbol __ICFEDIT_region_RAM_end__; -+/*-Sizes-*/ -+define symbol __ICFEDIT_size_cstack__ = ; -+define symbol __ICFEDIT_size_heap__ = ; -+/**** End of ICF editor section. ###ICF###*/ -+ -+define memory mem with size = 4G; -+define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; -+define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; -+ -+define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; -+define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; -+define block RO_END with alignment = 8, size = 0 { }; -+ -+initialize by copy { readwrite }; -+do not initialize { section .noinit }; -+ -+keep { section .intvec }; -+place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; -+place in ROM_region { readonly, -+ block RO_END }; -+place in RAM_region { readwrite, -+ block CSTACK, -+ block HEAP }; -+ -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/main.c nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/main.c +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/main.c nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/main.c index fc7996c..68e5441 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/main.c -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/main.c ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/main.c @@ -57,23 +57,34 @@ #include "ser_conn_handlers.h" #include "boards.h" @@ -36835,16 +36878,16 @@ index fc7996c..68e5441 100644 } } /** @} */ -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/armgcc/ble_connectivity_gcc_nrf52.ld -index 611a3b6..65e784e 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/armgcc/ble_connectivity_gcc_nrf52.ld +index 611a3b6..3db651d 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/armgcc/ble_connectivity_gcc_nrf52.ld -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/armgcc/ble_connectivity_gcc_nrf52.ld @@ -6,11 +6,18 @@ GROUP(-lgcc -lc -lnosys) MEMORY { FLASH (rx) : ORIGIN = 0x26000, LENGTH = 0x5a000 - RAM (rwx) : ORIGIN = 0x2000b8a8, LENGTH = 0x4758 -+ RAM (rwx) : ORIGIN = 0x2000a8a8, LENGTH = 0x5758 ++ RAM (rwx) : ORIGIN = 0x2000ab20, LENGTH = 0x54e0 + connectivity_version_info (r) : ORIGIN = 0x50000, LENGTH = 0x18 } @@ -36859,36 +36902,36 @@ index 611a3b6..65e784e 100644 } SECTIONS -@@ -69,12 +76,6 @@ SECTIONS +@@ -69,6 +76,12 @@ SECTIONS KEEP(*(.nrf_balloc)) PROVIDE(__stop_nrf_balloc = .); } > FLASH -- .sdh_stack_observers : -- { -- PROVIDE(__start_sdh_stack_observers = .); -- KEEP(*(SORT(.sdh_stack_observers*))) -- PROVIDE(__stop_sdh_stack_observers = .); -- } > FLASH - .sdh_req_observers : - { - PROVIDE(__start_sdh_req_observers = .); -@@ -87,6 +88,12 @@ SECTIONS - KEEP(*(SORT(.sdh_state_observers*))) - PROVIDE(__stop_sdh_state_observers = .); - } > FLASH -+ .sdh_stack_observers : ++ .sdh_state_observers : + { -+ PROVIDE(__start_sdh_stack_observers = .); -+ KEEP(*(SORT(.sdh_stack_observers*))) -+ PROVIDE(__stop_sdh_stack_observers = .); ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); + } > FLASH + .sdh_stack_observers : + { + PROVIDE(__start_sdh_stack_observers = .); +@@ -81,12 +94,6 @@ SECTIONS + KEEP(*(SORT(.sdh_req_observers*))) + PROVIDE(__stop_sdh_req_observers = .); + } > FLASH +- .sdh_state_observers : +- { +- PROVIDE(__start_sdh_state_observers = .); +- KEEP(*(SORT(.sdh_state_observers*))) +- PROVIDE(__stop_sdh_state_observers = .); +- } > FLASH .log_backends : { PROVIDE(__start_log_backends = .); -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/config/sdk_config.h nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/config/sdk_config.h index c5caa64..19a16d1 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/config/sdk_config.h -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/config/sdk_config.h ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/config/sdk_config.h @@ -518,6 +518,136 @@ // @@ -37159,33 +37202,33 @@ index c5caa64..19a16d1 100644 // NRF_BLE_BMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Bond Management Service. -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/ble_connectivity_s132_hci_pca10040.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/ble_connectivity_s132_hci_pca10040.emProject -index 7eccb28..8a0e048 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/ble_connectivity_s132_hci_pca10040.emProject nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/ble_connectivity_s132_hci_pca10040.emProject +index 7eccb28..5758cb0 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/ble_connectivity_s132_hci_pca10040.emProject -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/ble_connectivity_s132_hci_pca10040.emProject ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/ble_connectivity_s132_hci_pca10040.emProject @@ -27,8 +27,8 @@ linker_printf_width_precision_supported="Yes" linker_printf_fmt_level="long" linker_section_placement_file="flash_placement.xml" - linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x80000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x10000;FLASH_START=0x26000;FLASH_SIZE=0x5a000;RAM_START=0x2000b8a8;RAM_SIZE=0x4758" - linker_section_placements_segments="FLASH RX 0x0 0x80000;RAM RWX 0x20000000 0x10000" -+ linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x80000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x10000;FLASH_START=0x26000;FLASH_SIZE=0x5a000;RAM_START=0x2000a8a8;RAM_SIZE=0x5758" ++ linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x80000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x10000;FLASH_START=0x26000;FLASH_SIZE=0x5a000;RAM_START=0x2000ab20;RAM_SIZE=0x54e0" + linker_section_placements_segments="FLASH RX 0x0 0x80000;RAM RWX 0x20000000 0x10000;connectivity_version_info RX 0x50000 0x18" project_directory="" project_type="Executable" /> -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/flash_placement.xml -index 6b7653b..d9b36f6 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/flash_placement.xml +index 6b7653b..c9cc513 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/flash_placement.xml -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/flash_placement.xml @@ -11,9 +11,9 @@ -- ++ + - -+ +- @@ -37197,16 +37240,16 @@ index 6b7653b..d9b36f6 100644 + + -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/armgcc/ble_connectivity_gcc_nrf52.ld -index f67446c..d1bb196 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/armgcc/ble_connectivity_gcc_nrf52.ld +index f67446c..1eafad7 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/armgcc/ble_connectivity_gcc_nrf52.ld -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/armgcc/ble_connectivity_gcc_nrf52.ld @@ -6,11 +6,18 @@ GROUP(-lgcc -lc -lnosys) MEMORY { FLASH (rx) : ORIGIN = 0x26000, LENGTH = 0x5a000 - RAM (rwx) : ORIGIN = 0x2000b8a8, LENGTH = 0x4758 -+ RAM (rwx) : ORIGIN = 0x2000a8a8, LENGTH = 0x5758 ++ RAM (rwx) : ORIGIN = 0x2000ab20, LENGTH = 0x54e0 + connectivity_version_info (r) : ORIGIN = 0x50000, LENGTH = 0x18 } @@ -37221,36 +37264,36 @@ index f67446c..d1bb196 100644 } SECTIONS -@@ -63,12 +70,6 @@ SECTIONS +@@ -63,6 +70,12 @@ SECTIONS KEEP(*(SORT(.log_const_data*))) PROVIDE(__stop_log_const_data = .); } > FLASH -- .sdh_stack_observers : -- { -- PROVIDE(__start_sdh_stack_observers = .); -- KEEP(*(SORT(.sdh_stack_observers*))) -- PROVIDE(__stop_sdh_stack_observers = .); -- } > FLASH - .sdh_req_observers : - { - PROVIDE(__start_sdh_req_observers = .); -@@ -81,6 +82,12 @@ SECTIONS - KEEP(*(SORT(.sdh_state_observers*))) - PROVIDE(__stop_sdh_state_observers = .); - } > FLASH -+ .sdh_stack_observers : ++ .sdh_state_observers : + { -+ PROVIDE(__start_sdh_stack_observers = .); -+ KEEP(*(SORT(.sdh_stack_observers*))) -+ PROVIDE(__stop_sdh_stack_observers = .); ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); + } > FLASH + .sdh_stack_observers : + { + PROVIDE(__start_sdh_stack_observers = .); +@@ -75,12 +88,6 @@ SECTIONS + KEEP(*(SORT(.sdh_req_observers*))) + PROVIDE(__stop_sdh_req_observers = .); + } > FLASH +- .sdh_state_observers : +- { +- PROVIDE(__start_sdh_state_observers = .); +- KEEP(*(SORT(.sdh_state_observers*))) +- PROVIDE(__stop_sdh_state_observers = .); +- } > FLASH .log_backends : { PROVIDE(__start_log_backends = .); -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/config/sdk_config.h nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/config/sdk_config.h index 878122b..9342e94 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/config/sdk_config.h -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/config/sdk_config.h ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/config/sdk_config.h @@ -747,6 +747,136 @@ // @@ -37521,33 +37564,33 @@ index 878122b..9342e94 100644 // NRF_BLE_BMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Bond Management Service. -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/ble_connectivity_s132_spi_pca10040.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/ble_connectivity_s132_spi_pca10040.emProject -index 918459a..0eb8650 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/ble_connectivity_s132_spi_pca10040.emProject nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/ble_connectivity_s132_spi_pca10040.emProject +index 918459a..ff01e46 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/ble_connectivity_s132_spi_pca10040.emProject -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/ble_connectivity_s132_spi_pca10040.emProject ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/ble_connectivity_s132_spi_pca10040.emProject @@ -27,8 +27,8 @@ linker_printf_width_precision_supported="Yes" linker_printf_fmt_level="long" linker_section_placement_file="flash_placement.xml" - linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x80000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x10000;FLASH_START=0x26000;FLASH_SIZE=0x5a000;RAM_START=0x2000b8a8;RAM_SIZE=0x4758" - linker_section_placements_segments="FLASH RX 0x0 0x80000;RAM RWX 0x20000000 0x10000" -+ linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x80000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x10000;FLASH_START=0x26000;FLASH_SIZE=0x5a000;RAM_START=0x2000a8a8;RAM_SIZE=0x5758" ++ linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x80000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x10000;FLASH_START=0x26000;FLASH_SIZE=0x5a000;RAM_START=0x2000ab20;RAM_SIZE=0x54e0" + linker_section_placements_segments="FLASH RX 0x0 0x80000;RAM RWX 0x20000000 0x10000;connectivity_version_info RX 0x50000 0x18" project_directory="" project_type="Executable" /> -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/flash_placement.xml -index a801e6e..85d547f 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/flash_placement.xml nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/flash_placement.xml +index a801e6e..0708731 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/flash_placement.xml -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/flash_placement.xml @@ -10,9 +10,9 @@ -- ++ + - -+ +- @@ -37559,16 +37602,16 @@ index a801e6e..85d547f 100644 + + -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld -index f67446c..d1bb196 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld +index f67446c..1eafad7 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld @@ -6,11 +6,18 @@ GROUP(-lgcc -lc -lnosys) MEMORY { FLASH (rx) : ORIGIN = 0x26000, LENGTH = 0x5a000 - RAM (rwx) : ORIGIN = 0x2000b8a8, LENGTH = 0x4758 -+ RAM (rwx) : ORIGIN = 0x2000a8a8, LENGTH = 0x5758 ++ RAM (rwx) : ORIGIN = 0x2000ab20, LENGTH = 0x54e0 + connectivity_version_info (r) : ORIGIN = 0x50000, LENGTH = 0x18 } @@ -37583,36 +37626,36 @@ index f67446c..d1bb196 100644 } SECTIONS -@@ -63,12 +70,6 @@ SECTIONS +@@ -63,6 +70,12 @@ SECTIONS KEEP(*(SORT(.log_const_data*))) PROVIDE(__stop_log_const_data = .); } > FLASH -- .sdh_stack_observers : -- { -- PROVIDE(__start_sdh_stack_observers = .); -- KEEP(*(SORT(.sdh_stack_observers*))) -- PROVIDE(__stop_sdh_stack_observers = .); -- } > FLASH - .sdh_req_observers : - { - PROVIDE(__start_sdh_req_observers = .); -@@ -81,6 +82,12 @@ SECTIONS - KEEP(*(SORT(.sdh_state_observers*))) - PROVIDE(__stop_sdh_state_observers = .); - } > FLASH -+ .sdh_stack_observers : ++ .sdh_state_observers : + { -+ PROVIDE(__start_sdh_stack_observers = .); -+ KEEP(*(SORT(.sdh_stack_observers*))) -+ PROVIDE(__stop_sdh_stack_observers = .); ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); + } > FLASH + .sdh_stack_observers : + { + PROVIDE(__start_sdh_stack_observers = .); +@@ -75,12 +88,6 @@ SECTIONS + KEEP(*(SORT(.sdh_req_observers*))) + PROVIDE(__stop_sdh_req_observers = .); + } > FLASH +- .sdh_state_observers : +- { +- PROVIDE(__start_sdh_state_observers = .); +- KEEP(*(SORT(.sdh_state_observers*))) +- PROVIDE(__stop_sdh_state_observers = .); +- } > FLASH .log_backends : { PROVIDE(__start_log_backends = .); -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/config/sdk_config.h nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/config/sdk_config.h index 878122b..9342e94 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/config/sdk_config.h -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/config/sdk_config.h ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/config/sdk_config.h @@ -747,6 +747,136 @@ // @@ -37883,33 +37926,33 @@ index 878122b..9342e94 100644 // NRF_BLE_BMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Bond Management Service. -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/ble_connectivity_s132_spi_5W_pca10040.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/ble_connectivity_s132_spi_5W_pca10040.emProject -index 4f3e9db..13cae61 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/ble_connectivity_s132_spi_5W_pca10040.emProject nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/ble_connectivity_s132_spi_5W_pca10040.emProject +index 4f3e9db..f6f4263 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/ble_connectivity_s132_spi_5W_pca10040.emProject -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/ble_connectivity_s132_spi_5W_pca10040.emProject ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/ble_connectivity_s132_spi_5W_pca10040.emProject @@ -27,8 +27,8 @@ linker_printf_width_precision_supported="Yes" linker_printf_fmt_level="long" linker_section_placement_file="flash_placement.xml" - linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x80000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x10000;FLASH_START=0x26000;FLASH_SIZE=0x5a000;RAM_START=0x2000b8a8;RAM_SIZE=0x4758" - linker_section_placements_segments="FLASH RX 0x0 0x80000;RAM RWX 0x20000000 0x10000" -+ linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x80000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x10000;FLASH_START=0x26000;FLASH_SIZE=0x5a000;RAM_START=0x2000a8a8;RAM_SIZE=0x5758" ++ linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x80000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x10000;FLASH_START=0x26000;FLASH_SIZE=0x5a000;RAM_START=0x2000ab20;RAM_SIZE=0x54e0" + linker_section_placements_segments="FLASH RX 0x0 0x80000;RAM RWX 0x20000000 0x10000;connectivity_version_info RX 0x50000 0x18" project_directory="" project_type="Executable" /> -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/flash_placement.xml -index a801e6e..85d547f 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/flash_placement.xml nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/flash_placement.xml +index a801e6e..0708731 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/flash_placement.xml -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/flash_placement.xml @@ -10,9 +10,9 @@ -- ++ + - -+ +- @@ -37921,16 +37964,16 @@ index a801e6e..85d547f 100644 + + -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/armgcc/ble_connectivity_gcc_nrf52.ld -index f67446c..d1bb196 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/armgcc/ble_connectivity_gcc_nrf52.ld +index f67446c..1eafad7 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/armgcc/ble_connectivity_gcc_nrf52.ld -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/armgcc/ble_connectivity_gcc_nrf52.ld @@ -6,11 +6,18 @@ GROUP(-lgcc -lc -lnosys) MEMORY { FLASH (rx) : ORIGIN = 0x26000, LENGTH = 0x5a000 - RAM (rwx) : ORIGIN = 0x2000b8a8, LENGTH = 0x4758 -+ RAM (rwx) : ORIGIN = 0x2000a8a8, LENGTH = 0x5758 ++ RAM (rwx) : ORIGIN = 0x2000ab20, LENGTH = 0x54e0 + connectivity_version_info (r) : ORIGIN = 0x50000, LENGTH = 0x18 } @@ -37945,36 +37988,36 @@ index f67446c..d1bb196 100644 } SECTIONS -@@ -63,12 +70,6 @@ SECTIONS +@@ -63,6 +70,12 @@ SECTIONS KEEP(*(SORT(.log_const_data*))) PROVIDE(__stop_log_const_data = .); } > FLASH -- .sdh_stack_observers : -- { -- PROVIDE(__start_sdh_stack_observers = .); -- KEEP(*(SORT(.sdh_stack_observers*))) -- PROVIDE(__stop_sdh_stack_observers = .); -- } > FLASH - .sdh_req_observers : - { - PROVIDE(__start_sdh_req_observers = .); -@@ -81,6 +82,12 @@ SECTIONS - KEEP(*(SORT(.sdh_state_observers*))) - PROVIDE(__stop_sdh_state_observers = .); - } > FLASH -+ .sdh_stack_observers : ++ .sdh_state_observers : + { -+ PROVIDE(__start_sdh_stack_observers = .); -+ KEEP(*(SORT(.sdh_stack_observers*))) -+ PROVIDE(__stop_sdh_stack_observers = .); ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); + } > FLASH + .sdh_stack_observers : + { + PROVIDE(__start_sdh_stack_observers = .); +@@ -75,12 +88,6 @@ SECTIONS + KEEP(*(SORT(.sdh_req_observers*))) + PROVIDE(__stop_sdh_req_observers = .); + } > FLASH +- .sdh_state_observers : +- { +- PROVIDE(__start_sdh_state_observers = .); +- KEEP(*(SORT(.sdh_state_observers*))) +- PROVIDE(__stop_sdh_state_observers = .); +- } > FLASH .log_backends : { PROVIDE(__start_log_backends = .); -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/config/sdk_config.h nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/config/sdk_config.h index 17cad13..cad5969 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/config/sdk_config.h -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/config/sdk_config.h ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/config/sdk_config.h @@ -518,6 +518,136 @@ // @@ -38245,33 +38288,33 @@ index 17cad13..cad5969 100644 // NRF_BLE_BMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Bond Management Service. -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/ble_connectivity_s132_uart_pca10040.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/ble_connectivity_s132_uart_pca10040.emProject -index 400fec8..8c8b417 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/ble_connectivity_s132_uart_pca10040.emProject nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/ble_connectivity_s132_uart_pca10040.emProject +index 400fec8..002b7f2 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/ble_connectivity_s132_uart_pca10040.emProject -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/ble_connectivity_s132_uart_pca10040.emProject ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/ble_connectivity_s132_uart_pca10040.emProject @@ -27,8 +27,8 @@ linker_printf_width_precision_supported="Yes" linker_printf_fmt_level="long" linker_section_placement_file="flash_placement.xml" - linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x80000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x10000;FLASH_START=0x26000;FLASH_SIZE=0x5a000;RAM_START=0x2000b8a8;RAM_SIZE=0x4758" - linker_section_placements_segments="FLASH RX 0x0 0x80000;RAM RWX 0x20000000 0x10000" -+ linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x80000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x10000;FLASH_START=0x26000;FLASH_SIZE=0x5a000;RAM_START=0x2000a8a8;RAM_SIZE=0x5758" ++ linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x80000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x10000;FLASH_START=0x26000;FLASH_SIZE=0x5a000;RAM_START=0x2000ab20;RAM_SIZE=0x54e0" + linker_section_placements_segments="FLASH RX 0x0 0x80000;RAM RWX 0x20000000 0x10000;connectivity_version_info RX 0x50000 0x18" project_directory="" project_type="Executable" /> -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/flash_placement.xml -index a801e6e..85d547f 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/flash_placement.xml nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/flash_placement.xml +index a801e6e..0708731 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/flash_placement.xml -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/flash_placement.xml @@ -10,9 +10,9 @@ -- ++ + - -+ +- @@ -38283,11 +38326,11 @@ index a801e6e..85d547f 100644 + + -diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/Makefile nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/Makefile +diff --git nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/Makefile nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/Makefile new file mode 100644 index 0000000..c33f1b4 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/Makefile ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/Makefile @@ -0,0 +1,262 @@ +PROJECT_NAME := ble_connectivity_132v3_hci_pca10040 +TARGETS := nrf52832_xxaa @@ -38551,11 +38594,11 @@ index 0000000..c33f1b4 +CMSIS_CONFIG_TOOL := $(SDK_ROOT)/external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar +sdk_config: + java -jar $(CMSIS_CONFIG_TOOL) $(SDK_CONFIG_FILE) -diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/ble_connectivity_gcc_nrf52.ld +diff --git nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/ble_connectivity_gcc_nrf52.ld new file mode 100644 -index 0000000..7d40943 +index 0000000..92dcfa9 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/ble_connectivity_gcc_nrf52.ld @@ -0,0 +1,106 @@ +/* Linker script to configure memory regions. */ + @@ -38565,7 +38608,7 @@ index 0000000..7d40943 +MEMORY +{ + FLASH (rx) : ORIGIN = 0x1f000, LENGTH = 0x61000 -+ RAM (rwx) : ORIGIN = 0x2000a9c0, LENGTH = 0x5640 ++ RAM (rwx) : ORIGIN = 0x2000ac38, LENGTH = 0x53c8 + connectivity_version_info (r) : ORIGIN = 0x50000, LENGTH = 0x18 +} + @@ -38635,12 +38678,6 @@ index 0000000..7d40943 + KEEP(*(.nrf_balloc)) + PROVIDE(__stop_nrf_balloc = .); + } > FLASH -+ .sdh_req_observers : -+ { -+ PROVIDE(__start_sdh_req_observers = .); -+ KEEP(*(SORT(.sdh_req_observers*))) -+ PROVIDE(__stop_sdh_req_observers = .); -+ } > FLASH + .sdh_state_observers : + { + PROVIDE(__start_sdh_state_observers = .); @@ -38653,6 +38690,12 @@ index 0000000..7d40943 + KEEP(*(SORT(.sdh_stack_observers*))) + PROVIDE(__stop_sdh_stack_observers = .); + } > FLASH ++ .sdh_req_observers : ++ { ++ PROVIDE(__start_sdh_req_observers = .); ++ KEEP(*(SORT(.sdh_req_observers*))) ++ PROVIDE(__stop_sdh_req_observers = .); ++ } > FLASH + .log_backends : + { + PROVIDE(__start_log_backends = .); @@ -38663,11 +38706,11 @@ index 0000000..7d40943 +} INSERT AFTER .text + +INCLUDE "nrf_common.ld" -diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/config/sdk_config.h nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/config/sdk_config.h new file mode 100644 index 0000000..19a16d1 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/config/sdk_config.h ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/config/sdk_config.h @@ -0,0 +1,4558 @@ +/** + * Copyright (c) 2017 - 2018, Nordic Semiconductor ASA @@ -43227,11 +43270,11 @@ index 0000000..19a16d1 +// <<< end of configuration section >>> +#endif //SDK_CONFIG_H + -diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_132v3_hci_pca10040.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_132v3_hci_pca10040.emProject +diff --git nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_132v3_hci_pca10040.emProject nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_132v3_hci_pca10040.emProject new file mode 100644 -index 0000000..e320c53 +index 0000000..1063e5a --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_132v3_hci_pca10040.emProject ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_132v3_hci_pca10040.emProject @@ -0,0 +1,154 @@ + + @@ -43262,7 +43305,7 @@ index 0000000..e320c53 + linker_printf_width_precision_supported="Yes" + linker_printf_fmt_level="long" + linker_section_placement_file="flash_placement.xml" -+ linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x80000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x10000;FLASH_START=0x1f000;FLASH_SIZE=0x61000;RAM_START=0x2000a9c0;RAM_SIZE=0x5640" ++ linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x80000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x10000;FLASH_START=0x1f000;FLASH_SIZE=0x61000;RAM_START=0x2000ac38;RAM_SIZE=0x53c8" + linker_section_placements_segments="FLASH RX 0x0 0x80000;RAM RWX 0x20000000 0x10000;connectivity_version_info RX 0x50000 0x18" + project_directory="" + project_type="Executable" /> @@ -43387,11 +43430,11 @@ index 0000000..e320c53 + c_preprocessor_definitions="DEBUG; DEBUG_NRF" + gcc_optimization_level="None"/> + -diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_132v3_hci_pca10040.emSession nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_132v3_hci_pca10040.emSession +diff --git nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_132v3_hci_pca10040.emSession nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_132v3_hci_pca10040.emSession new file mode 100644 index 0000000..c05cfb5 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_132v3_hci_pca10040.emSession ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_132v3_hci_pca10040.emSession @@ -0,0 +1,7 @@ + + @@ -43401,11 +43444,11 @@ index 0000000..c05cfb5 + + \ No newline at end of file -diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/flash_placement.xml +diff --git nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/flash_placement.xml new file mode 100644 -index 0000000..d9b36f6 +index 0000000..c9cc513 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/flash_placement.xml @@ -0,0 +1,49 @@ + + @@ -43420,9 +43463,9 @@ index 0000000..d9b36f6 + + + -+ + + ++ + + + @@ -43456,11 +43499,11 @@ index 0000000..d9b36f6 + + + -diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/Makefile nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/Makefile +diff --git nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/Makefile nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/Makefile new file mode 100644 index 0000000..25fcc18 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/Makefile ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/Makefile @@ -0,0 +1,263 @@ +PROJECT_NAME := ble_connectivity_132v5_hci_pca10040 +TARGETS := nrf52832_xxaa @@ -43725,11 +43768,11 @@ index 0000000..25fcc18 +CMSIS_CONFIG_TOOL := $(SDK_ROOT)/external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar +sdk_config: + java -jar $(CMSIS_CONFIG_TOOL) $(SDK_CONFIG_FILE) -diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/ble_connectivity_gcc_nrf52.ld +diff --git nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/ble_connectivity_gcc_nrf52.ld new file mode 100644 -index 0000000..04f6cc8 +index 0000000..f095a22 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/ble_connectivity_gcc_nrf52.ld @@ -0,0 +1,106 @@ +/* Linker script to configure memory regions. */ + @@ -43739,7 +43782,7 @@ index 0000000..04f6cc8 +MEMORY +{ + FLASH (rx) : ORIGIN = 0x23000, LENGTH = 0x5d000 -+ RAM (rwx) : ORIGIN = 0x2000a380, LENGTH = 0x5c80 ++ RAM (rwx) : ORIGIN = 0x2000a5f8, LENGTH = 0x5a08 + connectivity_version_info (r) : ORIGIN = 0x50000, LENGTH = 0x18 +} + @@ -43809,12 +43852,6 @@ index 0000000..04f6cc8 + KEEP(*(.nrf_balloc)) + PROVIDE(__stop_nrf_balloc = .); + } > FLASH -+ .sdh_req_observers : -+ { -+ PROVIDE(__start_sdh_req_observers = .); -+ KEEP(*(SORT(.sdh_req_observers*))) -+ PROVIDE(__stop_sdh_req_observers = .); -+ } > FLASH + .sdh_state_observers : + { + PROVIDE(__start_sdh_state_observers = .); @@ -43827,6 +43864,12 @@ index 0000000..04f6cc8 + KEEP(*(SORT(.sdh_stack_observers*))) + PROVIDE(__stop_sdh_stack_observers = .); + } > FLASH ++ .sdh_req_observers : ++ { ++ PROVIDE(__start_sdh_req_observers = .); ++ KEEP(*(SORT(.sdh_req_observers*))) ++ PROVIDE(__stop_sdh_req_observers = .); ++ } > FLASH + .log_backends : + { + PROVIDE(__start_log_backends = .); @@ -43837,11 +43880,11 @@ index 0000000..04f6cc8 +} INSERT AFTER .text + +INCLUDE "nrf_common.ld" -diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/config/sdk_config.h nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/config/sdk_config.h new file mode 100644 index 0000000..ffe8c67 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/config/sdk_config.h ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/config/sdk_config.h @@ -0,0 +1,4579 @@ +/** + * Copyright (c) 2017 - 2018, Nordic Semiconductor ASA @@ -48422,11 +48465,11 @@ index 0000000..ffe8c67 +// <<< end of configuration section >>> +#endif //SDK_CONFIG_H + -diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_132v5_hci_pca10040.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_132v5_hci_pca10040.emProject +diff --git nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_132v5_hci_pca10040.emProject nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_132v5_hci_pca10040.emProject new file mode 100644 -index 0000000..ec91733 +index 0000000..8609a39 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_132v5_hci_pca10040.emProject ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_132v5_hci_pca10040.emProject @@ -0,0 +1,155 @@ + + @@ -48457,7 +48500,7 @@ index 0000000..ec91733 + linker_printf_width_precision_supported="Yes" + linker_printf_fmt_level="long" + linker_section_placement_file="flash_placement.xml" -+ linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x80000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x10000;FLASH_START=0x23000;FLASH_SIZE=0x5d000;RAM_START=0x2000a380;RAM_SIZE=0x5c80" ++ linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x80000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x10000;FLASH_START=0x23000;FLASH_SIZE=0x5d000;RAM_START=0x2000a5f8;RAM_SIZE=0x5a08" + linker_section_placements_segments="FLASH RX 0x0 0x80000;RAM RWX 0x20000000 0x10000;connectivity_version_info RX 0x50000 0x18" + project_directory="" + project_type="Executable" /> @@ -48583,11 +48626,11 @@ index 0000000..ec91733 + c_preprocessor_definitions="DEBUG; DEBUG_NRF" + gcc_optimization_level="None"/> + -diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_132v5_hci_pca10040.emSession nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_132v5_hci_pca10040.emSession +diff --git nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_132v5_hci_pca10040.emSession nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_132v5_hci_pca10040.emSession new file mode 100644 index 0000000..811c3c5 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_132v5_hci_pca10040.emSession ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_132v5_hci_pca10040.emSession @@ -0,0 +1,7 @@ + + @@ -48597,11 +48640,11 @@ index 0000000..811c3c5 + + \ No newline at end of file -diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/flash_placement.xml +diff --git nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/flash_placement.xml new file mode 100644 -index 0000000..d9b36f6 +index 0000000..c9cc513 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/flash_placement.xml @@ -0,0 +1,49 @@ + + @@ -48616,9 +48659,9 @@ index 0000000..d9b36f6 + + + -+ + + ++ + + + @@ -48652,10 +48695,10 @@ index 0000000..d9b36f6 + + + -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/armgcc/ble_connectivity_gcc_nrf52.ld -index e8a3735..9a410b0 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/armgcc/ble_connectivity_gcc_nrf52.ld +index e8a3735..7161fc8 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/armgcc/ble_connectivity_gcc_nrf52.ld -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/armgcc/ble_connectivity_gcc_nrf52.ld @@ -7,10 +7,17 @@ MEMORY { FLASH (rx) : ORIGIN = 0x19000, LENGTH = 0x17000 @@ -48674,36 +48717,36 @@ index e8a3735..9a410b0 100644 } SECTIONS -@@ -69,12 +76,6 @@ SECTIONS +@@ -69,6 +76,12 @@ SECTIONS KEEP(*(.nrf_balloc)) PROVIDE(__stop_nrf_balloc = .); } > FLASH -- .sdh_stack_observers : -- { -- PROVIDE(__start_sdh_stack_observers = .); -- KEEP(*(SORT(.sdh_stack_observers*))) -- PROVIDE(__stop_sdh_stack_observers = .); -- } > FLASH - .sdh_req_observers : - { - PROVIDE(__start_sdh_req_observers = .); -@@ -87,6 +88,12 @@ SECTIONS - KEEP(*(SORT(.sdh_state_observers*))) - PROVIDE(__stop_sdh_state_observers = .); - } > FLASH -+ .sdh_stack_observers : ++ .sdh_state_observers : + { -+ PROVIDE(__start_sdh_stack_observers = .); -+ KEEP(*(SORT(.sdh_stack_observers*))) -+ PROVIDE(__stop_sdh_stack_observers = .); ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); + } > FLASH + .sdh_stack_observers : + { + PROVIDE(__start_sdh_stack_observers = .); +@@ -81,12 +94,6 @@ SECTIONS + KEEP(*(SORT(.sdh_req_observers*))) + PROVIDE(__stop_sdh_req_observers = .); + } > FLASH +- .sdh_state_observers : +- { +- PROVIDE(__start_sdh_state_observers = .); +- KEEP(*(SORT(.sdh_state_observers*))) +- PROVIDE(__stop_sdh_state_observers = .); +- } > FLASH .log_backends : { PROVIDE(__start_log_backends = .); -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/config/sdk_config.h nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/config/sdk_config.h index 6539e77..3119381 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/config/sdk_config.h -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/config/sdk_config.h ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/config/sdk_config.h @@ -397,6 +397,136 @@ // @@ -48974,10 +49017,10 @@ index 6539e77..3119381 100644 // NRF_BLE_BMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Bond Management Service. -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/ble_connectivity_s112_hci_pca10040e.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/ble_connectivity_s112_hci_pca10040e.emProject +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/ble_connectivity_s112_hci_pca10040e.emProject nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/ble_connectivity_s112_hci_pca10040e.emProject index bbf3d52..2a6c303 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/ble_connectivity_s112_hci_pca10040e.emProject -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/ble_connectivity_s112_hci_pca10040e.emProject ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/ble_connectivity_s112_hci_pca10040e.emProject @@ -28,7 +28,7 @@ linker_printf_fmt_level="long" linker_section_placement_file="flash_placement.xml" @@ -48987,18 +49030,18 @@ index bbf3d52..2a6c303 100644 project_directory="" project_type="Executable" /> -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/flash_placement.xml -index 6b7653b..d9b36f6 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/flash_placement.xml +index 6b7653b..c9cc513 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/flash_placement.xml -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/flash_placement.xml @@ -11,9 +11,9 @@ -- ++ + - -+ +- @@ -49010,10 +49053,10 @@ index 6b7653b..d9b36f6 100644 + + -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/armgcc/ble_connectivity_gcc_nrf52.ld -index 40d23f1..9ce3ba9 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/armgcc/ble_connectivity_gcc_nrf52.ld +index 40d23f1..ce61515 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/armgcc/ble_connectivity_gcc_nrf52.ld -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/armgcc/ble_connectivity_gcc_nrf52.ld @@ -7,10 +7,17 @@ MEMORY { FLASH (rx) : ORIGIN = 0x19000, LENGTH = 0x17000 @@ -49032,36 +49075,36 @@ index 40d23f1..9ce3ba9 100644 } SECTIONS -@@ -63,12 +70,6 @@ SECTIONS +@@ -63,6 +70,12 @@ SECTIONS KEEP(*(SORT(.log_const_data*))) PROVIDE(__stop_log_const_data = .); } > FLASH -- .sdh_stack_observers : -- { -- PROVIDE(__start_sdh_stack_observers = .); -- KEEP(*(SORT(.sdh_stack_observers*))) -- PROVIDE(__stop_sdh_stack_observers = .); -- } > FLASH - .sdh_req_observers : - { - PROVIDE(__start_sdh_req_observers = .); -@@ -81,6 +82,12 @@ SECTIONS - KEEP(*(SORT(.sdh_state_observers*))) - PROVIDE(__stop_sdh_state_observers = .); - } > FLASH -+ .sdh_stack_observers : ++ .sdh_state_observers : + { -+ PROVIDE(__start_sdh_stack_observers = .); -+ KEEP(*(SORT(.sdh_stack_observers*))) -+ PROVIDE(__stop_sdh_stack_observers = .); ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); + } > FLASH + .sdh_stack_observers : + { + PROVIDE(__start_sdh_stack_observers = .); +@@ -75,12 +88,6 @@ SECTIONS + KEEP(*(SORT(.sdh_req_observers*))) + PROVIDE(__stop_sdh_req_observers = .); + } > FLASH +- .sdh_state_observers : +- { +- PROVIDE(__start_sdh_state_observers = .); +- KEEP(*(SORT(.sdh_state_observers*))) +- PROVIDE(__stop_sdh_state_observers = .); +- } > FLASH .log_backends : { PROVIDE(__start_log_backends = .); -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/config/sdk_config.h nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/config/sdk_config.h index 4adb2af..00e28ae 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/config/sdk_config.h -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/config/sdk_config.h ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/config/sdk_config.h @@ -598,6 +598,136 @@ // @@ -49332,10 +49375,10 @@ index 4adb2af..00e28ae 100644 // NRF_BLE_BMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Bond Management Service. -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/ble_connectivity_s112_spi_pca10040e.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/ble_connectivity_s112_spi_pca10040e.emProject +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/ble_connectivity_s112_spi_pca10040e.emProject nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/ble_connectivity_s112_spi_pca10040e.emProject index 89c1d8f..0dc51b4 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/ble_connectivity_s112_spi_pca10040e.emProject -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/ble_connectivity_s112_spi_pca10040e.emProject ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/ble_connectivity_s112_spi_pca10040e.emProject @@ -28,7 +28,7 @@ linker_printf_fmt_level="long" linker_section_placement_file="flash_placement.xml" @@ -49345,18 +49388,18 @@ index 89c1d8f..0dc51b4 100644 project_directory="" project_type="Executable" /> -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/flash_placement.xml -index a801e6e..85d547f 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/flash_placement.xml nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/flash_placement.xml +index a801e6e..0708731 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/flash_placement.xml -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/flash_placement.xml @@ -10,9 +10,9 @@ -- ++ + - -+ +- @@ -49368,10 +49411,10 @@ index a801e6e..85d547f 100644 + + -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld -index 40d23f1..9ce3ba9 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld +index 40d23f1..ce61515 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld @@ -7,10 +7,17 @@ MEMORY { FLASH (rx) : ORIGIN = 0x19000, LENGTH = 0x17000 @@ -49390,36 +49433,36 @@ index 40d23f1..9ce3ba9 100644 } SECTIONS -@@ -63,12 +70,6 @@ SECTIONS +@@ -63,6 +70,12 @@ SECTIONS KEEP(*(SORT(.log_const_data*))) PROVIDE(__stop_log_const_data = .); } > FLASH -- .sdh_stack_observers : -- { -- PROVIDE(__start_sdh_stack_observers = .); -- KEEP(*(SORT(.sdh_stack_observers*))) -- PROVIDE(__stop_sdh_stack_observers = .); -- } > FLASH - .sdh_req_observers : - { - PROVIDE(__start_sdh_req_observers = .); -@@ -81,6 +82,12 @@ SECTIONS - KEEP(*(SORT(.sdh_state_observers*))) - PROVIDE(__stop_sdh_state_observers = .); - } > FLASH -+ .sdh_stack_observers : ++ .sdh_state_observers : + { -+ PROVIDE(__start_sdh_stack_observers = .); -+ KEEP(*(SORT(.sdh_stack_observers*))) -+ PROVIDE(__stop_sdh_stack_observers = .); ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); + } > FLASH + .sdh_stack_observers : + { + PROVIDE(__start_sdh_stack_observers = .); +@@ -75,12 +88,6 @@ SECTIONS + KEEP(*(SORT(.sdh_req_observers*))) + PROVIDE(__stop_sdh_req_observers = .); + } > FLASH +- .sdh_state_observers : +- { +- PROVIDE(__start_sdh_state_observers = .); +- KEEP(*(SORT(.sdh_state_observers*))) +- PROVIDE(__stop_sdh_state_observers = .); +- } > FLASH .log_backends : { PROVIDE(__start_log_backends = .); -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/config/sdk_config.h nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/config/sdk_config.h index 4adb2af..00e28ae 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/config/sdk_config.h -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/config/sdk_config.h ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/config/sdk_config.h @@ -598,6 +598,136 @@ // @@ -49690,10 +49733,10 @@ index 4adb2af..00e28ae 100644 // NRF_BLE_BMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Bond Management Service. -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/ble_connectivity_s112_spi_5W_pca10040e.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/ble_connectivity_s112_spi_5W_pca10040e.emProject +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/ble_connectivity_s112_spi_5W_pca10040e.emProject nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/ble_connectivity_s112_spi_5W_pca10040e.emProject index d1b0172..552d665 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/ble_connectivity_s112_spi_5W_pca10040e.emProject -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/ble_connectivity_s112_spi_5W_pca10040e.emProject ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/ble_connectivity_s112_spi_5W_pca10040e.emProject @@ -28,7 +28,7 @@ linker_printf_fmt_level="long" linker_section_placement_file="flash_placement.xml" @@ -49703,18 +49746,18 @@ index d1b0172..552d665 100644 project_directory="" project_type="Executable" /> -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/flash_placement.xml -index a801e6e..85d547f 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/flash_placement.xml nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/flash_placement.xml +index a801e6e..0708731 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/flash_placement.xml -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/flash_placement.xml @@ -10,9 +10,9 @@ -- ++ + - -+ +- @@ -49726,10 +49769,10 @@ index a801e6e..85d547f 100644 + + -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/armgcc/ble_connectivity_gcc_nrf52.ld -index 40d23f1..9ce3ba9 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/armgcc/ble_connectivity_gcc_nrf52.ld +index 40d23f1..ce61515 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/armgcc/ble_connectivity_gcc_nrf52.ld -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/armgcc/ble_connectivity_gcc_nrf52.ld @@ -7,10 +7,17 @@ MEMORY { FLASH (rx) : ORIGIN = 0x19000, LENGTH = 0x17000 @@ -49748,36 +49791,36 @@ index 40d23f1..9ce3ba9 100644 } SECTIONS -@@ -63,12 +70,6 @@ SECTIONS +@@ -63,6 +70,12 @@ SECTIONS KEEP(*(SORT(.log_const_data*))) PROVIDE(__stop_log_const_data = .); } > FLASH -- .sdh_stack_observers : -- { -- PROVIDE(__start_sdh_stack_observers = .); -- KEEP(*(SORT(.sdh_stack_observers*))) -- PROVIDE(__stop_sdh_stack_observers = .); -- } > FLASH - .sdh_req_observers : - { - PROVIDE(__start_sdh_req_observers = .); -@@ -81,6 +82,12 @@ SECTIONS - KEEP(*(SORT(.sdh_state_observers*))) - PROVIDE(__stop_sdh_state_observers = .); - } > FLASH -+ .sdh_stack_observers : ++ .sdh_state_observers : + { -+ PROVIDE(__start_sdh_stack_observers = .); -+ KEEP(*(SORT(.sdh_stack_observers*))) -+ PROVIDE(__stop_sdh_stack_observers = .); ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); + } > FLASH + .sdh_stack_observers : + { + PROVIDE(__start_sdh_stack_observers = .); +@@ -75,12 +88,6 @@ SECTIONS + KEEP(*(SORT(.sdh_req_observers*))) + PROVIDE(__stop_sdh_req_observers = .); + } > FLASH +- .sdh_state_observers : +- { +- PROVIDE(__start_sdh_state_observers = .); +- KEEP(*(SORT(.sdh_state_observers*))) +- PROVIDE(__stop_sdh_state_observers = .); +- } > FLASH .log_backends : { PROVIDE(__start_log_backends = .); -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/config/sdk_config.h nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/config/sdk_config.h index 7b74df4..f0c345a 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/config/sdk_config.h -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/config/sdk_config.h ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/config/sdk_config.h @@ -397,6 +397,136 @@ // @@ -50048,10 +50091,10 @@ index 7b74df4..f0c345a 100644 // NRF_BLE_BMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Bond Management Service. -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/ble_connectivity_s112_uart_pca10040e.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/ble_connectivity_s112_uart_pca10040e.emProject +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/ble_connectivity_s112_uart_pca10040e.emProject nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/ble_connectivity_s112_uart_pca10040e.emProject index 79da171..3d7b71f 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/ble_connectivity_s112_uart_pca10040e.emProject -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/ble_connectivity_s112_uart_pca10040e.emProject ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/ble_connectivity_s112_uart_pca10040e.emProject @@ -28,7 +28,7 @@ linker_printf_fmt_level="long" linker_section_placement_file="flash_placement.xml" @@ -50061,18 +50104,18 @@ index 79da171..3d7b71f 100644 project_directory="" project_type="Executable" /> -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/flash_placement.xml -index a801e6e..85d547f 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/flash_placement.xml nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/flash_placement.xml +index a801e6e..0708731 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/flash_placement.xml -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/flash_placement.xml @@ -10,9 +10,9 @@ -- ++ + - -+ +- @@ -50084,11 +50127,11 @@ index a801e6e..85d547f 100644 + + -diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/armgcc/Makefile nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/armgcc/Makefile +diff --git nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/armgcc/Makefile nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/armgcc/Makefile new file mode 100644 index 0000000..29138b1 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/armgcc/Makefile ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/armgcc/Makefile @@ -0,0 +1,282 @@ +PROJECT_NAME := ble_connectivity_132v3_usb_hci_pca10056 +TARGETS := nrf52840_xxaa @@ -50372,11 +50415,11 @@ index 0000000..29138b1 +CMSIS_CONFIG_TOOL := $(SDK_ROOT)/external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar +sdk_config: + java -jar $(CMSIS_CONFIG_TOOL) $(SDK_CONFIG_FILE) -diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld +diff --git nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld new file mode 100644 -index 0000000..12fd23c +index 0000000..0267096 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld @@ -0,0 +1,106 @@ +/* Linker script to configure memory regions. */ + @@ -50456,12 +50499,6 @@ index 0000000..12fd23c + KEEP(*(.nrf_balloc)) + PROVIDE(__stop_nrf_balloc = .); + } > FLASH -+ .sdh_req_observers : -+ { -+ PROVIDE(__start_sdh_req_observers = .); -+ KEEP(*(SORT(.sdh_req_observers*))) -+ PROVIDE(__stop_sdh_req_observers = .); -+ } > FLASH + .sdh_state_observers : + { + PROVIDE(__start_sdh_state_observers = .); @@ -50474,6 +50511,12 @@ index 0000000..12fd23c + KEEP(*(SORT(.sdh_stack_observers*))) + PROVIDE(__stop_sdh_stack_observers = .); + } > FLASH ++ .sdh_req_observers : ++ { ++ PROVIDE(__start_sdh_req_observers = .); ++ KEEP(*(SORT(.sdh_req_observers*))) ++ PROVIDE(__stop_sdh_req_observers = .); ++ } > FLASH + .log_backends : + { + PROVIDE(__start_log_backends = .); @@ -50484,11 +50527,11 @@ index 0000000..12fd23c +} INSERT AFTER .text + +INCLUDE "nrf_common.ld" -diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/config/sdk_config.h nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/config/sdk_config.h new file mode 100644 index 0000000..14a8586 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/config/sdk_config.h ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/config/sdk_config.h @@ -0,0 +1,5223 @@ +/** + * Copyright (c) 2017 - 2018, Nordic Semiconductor ASA @@ -55713,11 +55756,11 @@ index 0000000..14a8586 +// <<< end of configuration section >>> +#endif //SDK_CONFIG_H + -diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10056.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10056.emProject +diff --git nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10056.emProject nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10056.emProject new file mode 100644 index 0000000..bd45579 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10056.emProject ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10056.emProject @@ -0,0 +1,169 @@ + + @@ -55888,11 +55931,11 @@ index 0000000..bd45579 + c_preprocessor_definitions="DEBUG; DEBUG_NRF" + gcc_optimization_level="None"/> + -diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10056.emSession nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10056.emSession +diff --git nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10056.emSession nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10056.emSession new file mode 100644 index 0000000..ce75e3c --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10056.emSession ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10056.emSession @@ -0,0 +1,7 @@ + + @@ -55902,11 +55945,11 @@ index 0000000..ce75e3c + + \ No newline at end of file -diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/flash_placement.xml +diff --git nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/flash_placement.xml new file mode 100644 -index 0000000..d9b36f6 +index 0000000..c9cc513 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/flash_placement.xml @@ -0,0 +1,49 @@ + + @@ -55921,9 +55964,9 @@ index 0000000..d9b36f6 + + + -+ + + ++ + + + @@ -55957,11 +56000,11 @@ index 0000000..d9b36f6 + + + -diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/armgcc/Makefile nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/armgcc/Makefile +diff --git nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/armgcc/Makefile nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/armgcc/Makefile new file mode 100644 index 0000000..8d850ae --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/armgcc/Makefile ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/armgcc/Makefile @@ -0,0 +1,283 @@ +PROJECT_NAME := ble_connectivity_132v5_usb_hci_pca10056 +TARGETS := nrf52840_xxaa @@ -56246,11 +56289,11 @@ index 0000000..8d850ae +CMSIS_CONFIG_TOOL := $(SDK_ROOT)/external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar +sdk_config: + java -jar $(CMSIS_CONFIG_TOOL) $(SDK_CONFIG_FILE) -diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld +diff --git nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld new file mode 100644 -index 0000000..3d81a92 +index 0000000..211f001 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld @@ -0,0 +1,106 @@ +/* Linker script to configure memory regions. */ + @@ -56330,12 +56373,6 @@ index 0000000..3d81a92 + KEEP(*(.nrf_balloc)) + PROVIDE(__stop_nrf_balloc = .); + } > FLASH -+ .sdh_req_observers : -+ { -+ PROVIDE(__start_sdh_req_observers = .); -+ KEEP(*(SORT(.sdh_req_observers*))) -+ PROVIDE(__stop_sdh_req_observers = .); -+ } > FLASH + .sdh_state_observers : + { + PROVIDE(__start_sdh_state_observers = .); @@ -56348,6 +56385,12 @@ index 0000000..3d81a92 + KEEP(*(SORT(.sdh_stack_observers*))) + PROVIDE(__stop_sdh_stack_observers = .); + } > FLASH ++ .sdh_req_observers : ++ { ++ PROVIDE(__start_sdh_req_observers = .); ++ KEEP(*(SORT(.sdh_req_observers*))) ++ PROVIDE(__stop_sdh_req_observers = .); ++ } > FLASH + .log_backends : + { + PROVIDE(__start_log_backends = .); @@ -56358,11 +56401,11 @@ index 0000000..3d81a92 +} INSERT AFTER .text + +INCLUDE "nrf_common.ld" -diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/config/sdk_config.h nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/config/sdk_config.h new file mode 100644 index 0000000..f0b6542 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/config/sdk_config.h ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/config/sdk_config.h @@ -0,0 +1,5244 @@ +/** + * Copyright (c) 2017 - 2018, Nordic Semiconductor ASA @@ -61608,11 +61651,11 @@ index 0000000..f0b6542 +// <<< end of configuration section >>> +#endif //SDK_CONFIG_H + -diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/ble_connectivity_132v5_usb_hci_pca10056.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/ble_connectivity_132v5_usb_hci_pca10056.emProject +diff --git nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/ble_connectivity_132v5_usb_hci_pca10056.emProject nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/ble_connectivity_132v5_usb_hci_pca10056.emProject new file mode 100644 index 0000000..d93607c --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/ble_connectivity_132v5_usb_hci_pca10056.emProject ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/ble_connectivity_132v5_usb_hci_pca10056.emProject @@ -0,0 +1,170 @@ + + @@ -61784,11 +61827,11 @@ index 0000000..d93607c + c_preprocessor_definitions="DEBUG; DEBUG_NRF" + gcc_optimization_level="None"/> + -diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/ble_connectivity_132v5_usb_hci_pca10056.emSession nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/ble_connectivity_132v5_usb_hci_pca10056.emSession +diff --git nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/ble_connectivity_132v5_usb_hci_pca10056.emSession nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/ble_connectivity_132v5_usb_hci_pca10056.emSession new file mode 100644 index 0000000..6c26dd1 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/ble_connectivity_132v5_usb_hci_pca10056.emSession ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/ble_connectivity_132v5_usb_hci_pca10056.emSession @@ -0,0 +1,7 @@ + + @@ -61798,11 +61841,11 @@ index 0000000..6c26dd1 + + \ No newline at end of file -diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/flash_placement.xml +diff --git nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/flash_placement.xml new file mode 100644 -index 0000000..d9b36f6 +index 0000000..c9cc513 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/flash_placement.xml @@ -0,0 +1,49 @@ + + @@ -61817,9 +61860,9 @@ index 0000000..d9b36f6 + + + -+ + + ++ + + + @@ -61853,10 +61896,10 @@ index 0000000..d9b36f6 + + + -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/Makefile nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/Makefile +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/Makefile nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/Makefile index 87059cc..0d8cc08 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/Makefile -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/Makefile ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/Makefile @@ -85,6 +85,7 @@ SRC_FILES += \ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_clock.c \ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power_clock.c \ @@ -61865,10 +61908,10 @@ index 87059cc..0d8cc08 100644 $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uart.c \ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uarte.c \ $(PROJ_DIR)/main.c \ -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/ble_connectivity_gcc_nrf52.ld -index b877f5a..6816cb2 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/ble_connectivity_gcc_nrf52.ld +index b877f5a..f354cbc 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/ble_connectivity_gcc_nrf52.ld -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/ble_connectivity_gcc_nrf52.ld @@ -7,10 +7,17 @@ MEMORY { FLASH (rx) : ORIGIN = 0x26000, LENGTH = 0xda000 @@ -61887,36 +61930,36 @@ index b877f5a..6816cb2 100644 } SECTIONS -@@ -69,12 +76,6 @@ SECTIONS +@@ -69,6 +76,12 @@ SECTIONS KEEP(*(.nrf_balloc)) PROVIDE(__stop_nrf_balloc = .); } > FLASH -- .sdh_stack_observers : -- { -- PROVIDE(__start_sdh_stack_observers = .); -- KEEP(*(SORT(.sdh_stack_observers*))) -- PROVIDE(__stop_sdh_stack_observers = .); -- } > FLASH - .sdh_req_observers : - { - PROVIDE(__start_sdh_req_observers = .); -@@ -87,6 +88,12 @@ SECTIONS - KEEP(*(SORT(.sdh_state_observers*))) - PROVIDE(__stop_sdh_state_observers = .); - } > FLASH -+ .sdh_stack_observers : ++ .sdh_state_observers : + { -+ PROVIDE(__start_sdh_stack_observers = .); -+ KEEP(*(SORT(.sdh_stack_observers*))) -+ PROVIDE(__stop_sdh_stack_observers = .); ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); + } > FLASH + .sdh_stack_observers : + { + PROVIDE(__start_sdh_stack_observers = .); +@@ -81,12 +94,6 @@ SECTIONS + KEEP(*(SORT(.sdh_req_observers*))) + PROVIDE(__stop_sdh_req_observers = .); + } > FLASH +- .sdh_state_observers : +- { +- PROVIDE(__start_sdh_state_observers = .); +- KEEP(*(SORT(.sdh_state_observers*))) +- PROVIDE(__stop_sdh_state_observers = .); +- } > FLASH .log_backends : { PROVIDE(__start_log_backends = .); -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/config/sdk_config.h nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/config/sdk_config.h index 793e569..d43945e 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/config/sdk_config.h -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/config/sdk_config.h ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/config/sdk_config.h @@ -240,6 +240,134 @@ // @@ -62337,10 +62380,10 @@ index 793e569..d43945e 100644 // NRF_BLE_BMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Bond Management Service. -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/ble_connectivity_s140_hci_pca10056.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/ble_connectivity_s140_hci_pca10056.emProject +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/ble_connectivity_s140_hci_pca10056.emProject nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/ble_connectivity_s140_hci_pca10056.emProject index f64c3a0..0221ede 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/ble_connectivity_s140_hci_pca10056.emProject -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/ble_connectivity_s140_hci_pca10056.emProject ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/ble_connectivity_s140_hci_pca10056.emProject @@ -28,7 +28,7 @@ linker_printf_fmt_level="long" linker_section_placement_file="flash_placement.xml" @@ -62358,18 +62401,18 @@ index f64c3a0..0221ede 100644 -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/flash_placement.xml -index 6b7653b..d9b36f6 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/flash_placement.xml +index 6b7653b..c9cc513 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/flash_placement.xml -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/flash_placement.xml @@ -11,9 +11,9 @@ -- ++ + - -+ +- @@ -62381,10 +62424,10 @@ index 6b7653b..d9b36f6 100644 + + -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/Makefile nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/Makefile +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/Makefile nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/Makefile index f5648fe..98f1192 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/Makefile -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/Makefile ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/Makefile @@ -83,6 +83,7 @@ SRC_FILES += \ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_gpiote.c \ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power_clock.c \ @@ -62393,10 +62436,10 @@ index f5648fe..98f1192 100644 $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_spis.c \ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uart.c \ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uarte.c \ -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/ble_connectivity_gcc_nrf52.ld -index d3acaad..5af9fbd 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/ble_connectivity_gcc_nrf52.ld +index d3acaad..a5e33ee 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/ble_connectivity_gcc_nrf52.ld -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/ble_connectivity_gcc_nrf52.ld @@ -7,10 +7,17 @@ MEMORY { FLASH (rx) : ORIGIN = 0x26000, LENGTH = 0xda000 @@ -62415,36 +62458,36 @@ index d3acaad..5af9fbd 100644 } SECTIONS -@@ -63,12 +70,6 @@ SECTIONS +@@ -63,6 +70,12 @@ SECTIONS KEEP(*(SORT(.log_const_data*))) PROVIDE(__stop_log_const_data = .); } > FLASH -- .sdh_stack_observers : -- { -- PROVIDE(__start_sdh_stack_observers = .); -- KEEP(*(SORT(.sdh_stack_observers*))) -- PROVIDE(__stop_sdh_stack_observers = .); -- } > FLASH - .sdh_req_observers : - { - PROVIDE(__start_sdh_req_observers = .); -@@ -81,6 +82,12 @@ SECTIONS - KEEP(*(SORT(.sdh_state_observers*))) - PROVIDE(__stop_sdh_state_observers = .); - } > FLASH -+ .sdh_stack_observers : ++ .sdh_state_observers : + { -+ PROVIDE(__start_sdh_stack_observers = .); -+ KEEP(*(SORT(.sdh_stack_observers*))) -+ PROVIDE(__stop_sdh_stack_observers = .); ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); + } > FLASH + .sdh_stack_observers : + { + PROVIDE(__start_sdh_stack_observers = .); +@@ -75,12 +88,6 @@ SECTIONS + KEEP(*(SORT(.sdh_req_observers*))) + PROVIDE(__stop_sdh_req_observers = .); + } > FLASH +- .sdh_state_observers : +- { +- PROVIDE(__start_sdh_state_observers = .); +- KEEP(*(SORT(.sdh_state_observers*))) +- PROVIDE(__stop_sdh_state_observers = .); +- } > FLASH .log_backends : { PROVIDE(__start_log_backends = .); -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/config/sdk_config.h nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/config/sdk_config.h index ba4721d..0c83e4d 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/config/sdk_config.h -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/config/sdk_config.h ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/config/sdk_config.h @@ -347,6 +347,134 @@ // @@ -62865,10 +62908,10 @@ index ba4721d..0c83e4d 100644 // NRF_BLE_BMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Bond Management Service. -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/ble_connectivity_s140_spi_pca10056.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/ble_connectivity_s140_spi_pca10056.emProject +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/ble_connectivity_s140_spi_pca10056.emProject nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/ble_connectivity_s140_spi_pca10056.emProject index a71ed2f..430528f 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/ble_connectivity_s140_spi_pca10056.emProject -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/ble_connectivity_s140_spi_pca10056.emProject ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/ble_connectivity_s140_spi_pca10056.emProject @@ -28,7 +28,7 @@ linker_printf_fmt_level="long" linker_section_placement_file="flash_placement.xml" @@ -62886,18 +62929,18 @@ index a71ed2f..430528f 100644 -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/flash_placement.xml -index a801e6e..85d547f 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/flash_placement.xml nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/flash_placement.xml +index a801e6e..0708731 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/flash_placement.xml -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/flash_placement.xml @@ -10,9 +10,9 @@ -- ++ + - -+ +- @@ -62909,10 +62952,10 @@ index a801e6e..85d547f 100644 + + -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/Makefile nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/Makefile +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/Makefile nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/Makefile index e498e6c..1147b6f 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/Makefile -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/Makefile ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/Makefile @@ -83,6 +83,7 @@ SRC_FILES += \ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_gpiote.c \ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power_clock.c \ @@ -62921,10 +62964,10 @@ index e498e6c..1147b6f 100644 $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_spis.c \ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uart.c \ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uarte.c \ -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld -index d3acaad..5af9fbd 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld +index d3acaad..a5e33ee 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld @@ -7,10 +7,17 @@ MEMORY { FLASH (rx) : ORIGIN = 0x26000, LENGTH = 0xda000 @@ -62943,36 +62986,36 @@ index d3acaad..5af9fbd 100644 } SECTIONS -@@ -63,12 +70,6 @@ SECTIONS +@@ -63,6 +70,12 @@ SECTIONS KEEP(*(SORT(.log_const_data*))) PROVIDE(__stop_log_const_data = .); } > FLASH -- .sdh_stack_observers : -- { -- PROVIDE(__start_sdh_stack_observers = .); -- KEEP(*(SORT(.sdh_stack_observers*))) -- PROVIDE(__stop_sdh_stack_observers = .); -- } > FLASH - .sdh_req_observers : - { - PROVIDE(__start_sdh_req_observers = .); -@@ -81,6 +82,12 @@ SECTIONS - KEEP(*(SORT(.sdh_state_observers*))) - PROVIDE(__stop_sdh_state_observers = .); - } > FLASH -+ .sdh_stack_observers : ++ .sdh_state_observers : + { -+ PROVIDE(__start_sdh_stack_observers = .); -+ KEEP(*(SORT(.sdh_stack_observers*))) -+ PROVIDE(__stop_sdh_stack_observers = .); ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); + } > FLASH + .sdh_stack_observers : + { + PROVIDE(__start_sdh_stack_observers = .); +@@ -75,12 +88,6 @@ SECTIONS + KEEP(*(SORT(.sdh_req_observers*))) + PROVIDE(__stop_sdh_req_observers = .); + } > FLASH +- .sdh_state_observers : +- { +- PROVIDE(__start_sdh_state_observers = .); +- KEEP(*(SORT(.sdh_state_observers*))) +- PROVIDE(__stop_sdh_state_observers = .); +- } > FLASH .log_backends : { PROVIDE(__start_log_backends = .); -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/config/sdk_config.h nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/config/sdk_config.h index ba4721d..0c83e4d 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/config/sdk_config.h -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/config/sdk_config.h ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/config/sdk_config.h @@ -347,6 +347,134 @@ // @@ -63393,10 +63436,10 @@ index ba4721d..0c83e4d 100644 // NRF_BLE_BMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Bond Management Service. -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/ble_connectivity_s140_spi_5W_pca10056.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/ble_connectivity_s140_spi_5W_pca10056.emProject +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/ble_connectivity_s140_spi_5W_pca10056.emProject nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/ble_connectivity_s140_spi_5W_pca10056.emProject index a95d1a5..44ff831 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/ble_connectivity_s140_spi_5W_pca10056.emProject -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/ble_connectivity_s140_spi_5W_pca10056.emProject ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/ble_connectivity_s140_spi_5W_pca10056.emProject @@ -28,7 +28,7 @@ linker_printf_fmt_level="long" linker_section_placement_file="flash_placement.xml" @@ -63414,18 +63457,18 @@ index a95d1a5..44ff831 100644 -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/flash_placement.xml -index a801e6e..85d547f 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/flash_placement.xml nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/flash_placement.xml +index a801e6e..0708731 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/flash_placement.xml -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/flash_placement.xml @@ -10,9 +10,9 @@ -- ++ + - -+ +- @@ -63437,10 +63480,10 @@ index a801e6e..85d547f 100644 + + -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/Makefile nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/Makefile +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/Makefile nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/Makefile index aad2de3..d3b8468 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/Makefile -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/Makefile ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/Makefile @@ -81,6 +81,7 @@ SRC_FILES += \ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_clock.c \ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power_clock.c \ @@ -63449,10 +63492,10 @@ index aad2de3..d3b8468 100644 $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uart.c \ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uarte.c \ $(PROJ_DIR)/main.c \ -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/ble_connectivity_gcc_nrf52.ld -index d3acaad..5af9fbd 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/ble_connectivity_gcc_nrf52.ld +index d3acaad..a5e33ee 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/ble_connectivity_gcc_nrf52.ld -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/ble_connectivity_gcc_nrf52.ld @@ -7,10 +7,17 @@ MEMORY { FLASH (rx) : ORIGIN = 0x26000, LENGTH = 0xda000 @@ -63471,36 +63514,36 @@ index d3acaad..5af9fbd 100644 } SECTIONS -@@ -63,12 +70,6 @@ SECTIONS +@@ -63,6 +70,12 @@ SECTIONS KEEP(*(SORT(.log_const_data*))) PROVIDE(__stop_log_const_data = .); } > FLASH -- .sdh_stack_observers : -- { -- PROVIDE(__start_sdh_stack_observers = .); -- KEEP(*(SORT(.sdh_stack_observers*))) -- PROVIDE(__stop_sdh_stack_observers = .); -- } > FLASH - .sdh_req_observers : - { - PROVIDE(__start_sdh_req_observers = .); -@@ -81,6 +82,12 @@ SECTIONS - KEEP(*(SORT(.sdh_state_observers*))) - PROVIDE(__stop_sdh_state_observers = .); - } > FLASH -+ .sdh_stack_observers : ++ .sdh_state_observers : + { -+ PROVIDE(__start_sdh_stack_observers = .); -+ KEEP(*(SORT(.sdh_stack_observers*))) -+ PROVIDE(__stop_sdh_stack_observers = .); ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); + } > FLASH + .sdh_stack_observers : + { + PROVIDE(__start_sdh_stack_observers = .); +@@ -75,12 +88,6 @@ SECTIONS + KEEP(*(SORT(.sdh_req_observers*))) + PROVIDE(__stop_sdh_req_observers = .); + } > FLASH +- .sdh_state_observers : +- { +- PROVIDE(__start_sdh_state_observers = .); +- KEEP(*(SORT(.sdh_state_observers*))) +- PROVIDE(__stop_sdh_state_observers = .); +- } > FLASH .log_backends : { PROVIDE(__start_log_backends = .); -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/config/sdk_config.h nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/config/sdk_config.h index 36b0fe4..bc8c8d0 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/config/sdk_config.h -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/config/sdk_config.h ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/config/sdk_config.h @@ -240,6 +240,134 @@ // @@ -63921,10 +63964,10 @@ index 36b0fe4..bc8c8d0 100644 // NRF_BLE_BMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Bond Management Service. -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/ble_connectivity_s140_uart_pca10056.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/ble_connectivity_s140_uart_pca10056.emProject +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/ble_connectivity_s140_uart_pca10056.emProject nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/ble_connectivity_s140_uart_pca10056.emProject index 228cf40..29b2865 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/ble_connectivity_s140_uart_pca10056.emProject -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/ble_connectivity_s140_uart_pca10056.emProject ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/ble_connectivity_s140_uart_pca10056.emProject @@ -28,7 +28,7 @@ linker_printf_fmt_level="long" linker_section_placement_file="flash_placement.xml" @@ -63942,18 +63985,18 @@ index 228cf40..29b2865 100644 -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/flash_placement.xml -index a801e6e..85d547f 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/flash_placement.xml nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/flash_placement.xml +index a801e6e..0708731 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/flash_placement.xml -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/flash_placement.xml @@ -10,9 +10,9 @@ -- ++ + - -+ +- @@ -63965,10 +64008,10 @@ index a801e6e..85d547f 100644 + + -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/Makefile nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/Makefile +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/Makefile nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/Makefile index 07cf7c6..b4c2628 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/Makefile -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/Makefile ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/Makefile @@ -25,6 +25,7 @@ SRC_FILES += \ $(SDK_ROOT)/components/libraries/usbd/app_usbd.c \ $(SDK_ROOT)/components/libraries/usbd/class/cdc/acm/app_usbd_cdc_acm.c \ @@ -64037,10 +64080,10 @@ index 07cf7c6..b4c2628 100644 ASMFLAGS += -DSOFTDEVICE_PRESENT ASMFLAGS += -DSWI_DISABLE0 -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld -index b877f5a..6816cb2 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld +index b877f5a..f354cbc 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld @@ -7,10 +7,17 @@ MEMORY { FLASH (rx) : ORIGIN = 0x26000, LENGTH = 0xda000 @@ -64059,36 +64102,36 @@ index b877f5a..6816cb2 100644 } SECTIONS -@@ -69,12 +76,6 @@ SECTIONS +@@ -69,6 +76,12 @@ SECTIONS KEEP(*(.nrf_balloc)) PROVIDE(__stop_nrf_balloc = .); } > FLASH -- .sdh_stack_observers : -- { -- PROVIDE(__start_sdh_stack_observers = .); -- KEEP(*(SORT(.sdh_stack_observers*))) -- PROVIDE(__stop_sdh_stack_observers = .); -- } > FLASH - .sdh_req_observers : - { - PROVIDE(__start_sdh_req_observers = .); -@@ -87,6 +88,12 @@ SECTIONS - KEEP(*(SORT(.sdh_state_observers*))) - PROVIDE(__stop_sdh_state_observers = .); - } > FLASH -+ .sdh_stack_observers : ++ .sdh_state_observers : + { -+ PROVIDE(__start_sdh_stack_observers = .); -+ KEEP(*(SORT(.sdh_stack_observers*))) -+ PROVIDE(__stop_sdh_stack_observers = .); ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); + } > FLASH + .sdh_stack_observers : + { + PROVIDE(__start_sdh_stack_observers = .); +@@ -81,12 +94,6 @@ SECTIONS + KEEP(*(SORT(.sdh_req_observers*))) + PROVIDE(__stop_sdh_req_observers = .); + } > FLASH +- .sdh_state_observers : +- { +- PROVIDE(__start_sdh_state_observers = .); +- KEEP(*(SORT(.sdh_state_observers*))) +- PROVIDE(__stop_sdh_state_observers = .); +- } > FLASH .log_backends : { PROVIDE(__start_log_backends = .); -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/config/sdk_config.h nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/config/sdk_config.h index 994863b..14a8586 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/config/sdk_config.h -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/config/sdk_config.h ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/config/sdk_config.h @@ -46,6 +46,102 @@ #ifdef USE_APP_CONFIG #include "app_config.h" @@ -64635,10 +64678,10 @@ index 994863b..14a8586 100644 // NRF_BLE_BMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Bond Management Service. -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10056.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10056.emProject +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10056.emProject nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10056.emProject index 571ebbb..6be7f69 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10056.emProject -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10056.emProject ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10056.emProject @@ -15,8 +15,8 @@ arm_simulator_memory_simulation_parameter="RWX 00000000,00100000,FFFFFFFF;RWX 20000000,00010000,CDCDCDCD" arm_target_device_name="nRF52840_xxAA" @@ -64683,18 +64726,18 @@ index 571ebbb..6be7f69 100644 -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/flash_placement.xml -index 6b7653b..d9b36f6 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/flash_placement.xml +index 6b7653b..c9cc513 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/flash_placement.xml -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/flash_placement.xml @@ -11,9 +11,9 @@ -- ++ + - -+ +- @@ -64706,11 +64749,11 @@ index 6b7653b..d9b36f6 100644 + + -diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/Makefile nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/Makefile +diff --git nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/Makefile nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/Makefile new file mode 100644 index 0000000..b704d10 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/Makefile ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/Makefile @@ -0,0 +1,282 @@ +PROJECT_NAME := ble_connectivity_132v3_usb_hci_pca10059 +TARGETS := nrf52840_xxaa @@ -64994,11 +65037,11 @@ index 0000000..b704d10 +CMSIS_CONFIG_TOOL := $(SDK_ROOT)/external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar +sdk_config: + java -jar $(CMSIS_CONFIG_TOOL) $(SDK_CONFIG_FILE) -diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld +diff --git nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld new file mode 100644 -index 0000000..12fd23c +index 0000000..0267096 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld @@ -0,0 +1,106 @@ +/* Linker script to configure memory regions. */ + @@ -65078,12 +65121,6 @@ index 0000000..12fd23c + KEEP(*(.nrf_balloc)) + PROVIDE(__stop_nrf_balloc = .); + } > FLASH -+ .sdh_req_observers : -+ { -+ PROVIDE(__start_sdh_req_observers = .); -+ KEEP(*(SORT(.sdh_req_observers*))) -+ PROVIDE(__stop_sdh_req_observers = .); -+ } > FLASH + .sdh_state_observers : + { + PROVIDE(__start_sdh_state_observers = .); @@ -65096,6 +65133,12 @@ index 0000000..12fd23c + KEEP(*(SORT(.sdh_stack_observers*))) + PROVIDE(__stop_sdh_stack_observers = .); + } > FLASH ++ .sdh_req_observers : ++ { ++ PROVIDE(__start_sdh_req_observers = .); ++ KEEP(*(SORT(.sdh_req_observers*))) ++ PROVIDE(__stop_sdh_req_observers = .); ++ } > FLASH + .log_backends : + { + PROVIDE(__start_log_backends = .); @@ -65106,11 +65149,11 @@ index 0000000..12fd23c +} INSERT AFTER .text + +INCLUDE "nrf_common.ld" -diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/config/sdk_config.h nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/config/sdk_config.h new file mode 100644 index 0000000..c244199 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/config/sdk_config.h ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/config/sdk_config.h @@ -0,0 +1,5223 @@ +/** + * Copyright (c) 2017 - 2018, Nordic Semiconductor ASA @@ -70335,11 +70378,11 @@ index 0000000..c244199 +// <<< end of configuration section >>> +#endif //SDK_CONFIG_H + -diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10059.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10059.emProject +diff --git nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10059.emProject nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10059.emProject new file mode 100644 index 0000000..735cba9 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10059.emProject ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10059.emProject @@ -0,0 +1,169 @@ + + @@ -70510,11 +70553,11 @@ index 0000000..735cba9 + c_preprocessor_definitions="DEBUG; DEBUG_NRF" + gcc_optimization_level="None"/> + -diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10059.emSession nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10059.emSession +diff --git nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10059.emSession nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10059.emSession new file mode 100644 index 0000000..22c73f1 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10059.emSession ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10059.emSession @@ -0,0 +1,7 @@ + + @@ -70524,11 +70567,11 @@ index 0000000..22c73f1 + + \ No newline at end of file -diff --git nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/flash_placement.xml +diff --git nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/flash_placement.xml new file mode 100644 -index 0000000..d9b36f6 +index 0000000..c9cc513 --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/flash_placement.xml @@ -0,0 +1,49 @@ + + @@ -70543,9 +70586,9 @@ index 0000000..d9b36f6 + + + -+ + + ++ + + + @@ -70579,10 +70622,10 @@ index 0000000..d9b36f6 + + + -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/Makefile nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/Makefile +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/Makefile nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/Makefile index 33053bc..b4bde15 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/Makefile -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/Makefile ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/Makefile @@ -96,6 +96,7 @@ SRC_FILES += \ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power.c \ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power_clock.c \ @@ -70607,10 +70650,10 @@ index 33053bc..b4bde15 100644 ASMFLAGS += -DSOFTDEVICE_PRESENT ASMFLAGS += -DSWI_DISABLE0 -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld -index b877f5a..6816cb2 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld +index b877f5a..f354cbc 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld @@ -7,10 +7,17 @@ MEMORY { FLASH (rx) : ORIGIN = 0x26000, LENGTH = 0xda000 @@ -70629,36 +70672,36 @@ index b877f5a..6816cb2 100644 } SECTIONS -@@ -69,12 +76,6 @@ SECTIONS +@@ -69,6 +76,12 @@ SECTIONS KEEP(*(.nrf_balloc)) PROVIDE(__stop_nrf_balloc = .); } > FLASH -- .sdh_stack_observers : -- { -- PROVIDE(__start_sdh_stack_observers = .); -- KEEP(*(SORT(.sdh_stack_observers*))) -- PROVIDE(__stop_sdh_stack_observers = .); -- } > FLASH - .sdh_req_observers : - { - PROVIDE(__start_sdh_req_observers = .); -@@ -87,6 +88,12 @@ SECTIONS - KEEP(*(SORT(.sdh_state_observers*))) - PROVIDE(__stop_sdh_state_observers = .); - } > FLASH -+ .sdh_stack_observers : ++ .sdh_state_observers : + { -+ PROVIDE(__start_sdh_stack_observers = .); -+ KEEP(*(SORT(.sdh_stack_observers*))) -+ PROVIDE(__stop_sdh_stack_observers = .); ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); + } > FLASH + .sdh_stack_observers : + { + PROVIDE(__start_sdh_stack_observers = .); +@@ -81,12 +94,6 @@ SECTIONS + KEEP(*(SORT(.sdh_req_observers*))) + PROVIDE(__stop_sdh_req_observers = .); + } > FLASH +- .sdh_state_observers : +- { +- PROVIDE(__start_sdh_state_observers = .); +- KEEP(*(SORT(.sdh_state_observers*))) +- PROVIDE(__stop_sdh_state_observers = .); +- } > FLASH .log_backends : { PROVIDE(__start_log_backends = .); -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/config/sdk_config.h nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/config/sdk_config.h +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/config/sdk_config.h nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/config/sdk_config.h index bb385de..c244199 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/config/sdk_config.h -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/config/sdk_config.h ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/config/sdk_config.h @@ -133,7 +133,7 @@ // gaps. Tailor this value to adhere to this limitation. @@ -71097,10 +71140,10 @@ index bb385de..c244199 100644 // NRF_BLE_BMS_BLE_OBSERVER_PRIO // Priority with which BLE events are dispatched to the Bond Management Service. -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10059.emProject nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10059.emProject +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10059.emProject nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10059.emProject index c7771fd..e6a0b2c 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10059.emProject -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10059.emProject ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10059.emProject @@ -16,7 +16,7 @@ arm_target_device_name="nRF52840_xxAA" arm_target_interface_type="SWD" @@ -71127,18 +71170,18 @@ index c7771fd..e6a0b2c 100644 -diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/flash_placement.xml -index 6b7653b..d9b36f6 100644 +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/flash_placement.xml +index 6b7653b..c9cc513 100644 --- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/flash_placement.xml -+++ nRF5_SDK_15.2.0_f8cd40a/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_8d32cc0/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/flash_placement.xml @@ -11,9 +11,9 @@ -- ++ + - -+ +- @@ -71150,10 +71193,10 @@ index 6b7653b..d9b36f6 100644 + + -diff --git nRF5_SDK_15.2.0_9412b96/examples/dfu/dfu_public_key.c nRF5_SDK_15.2.0_f8cd40a/examples/dfu/dfu_public_key.c +diff --git nRF5_SDK_15.2.0_9412b96/examples/dfu/dfu_public_key.c nRF5_SDK_15.2.0_8d32cc0/examples/dfu/dfu_public_key.c index e483589..8629005 100644 --- nRF5_SDK_15.2.0_9412b96/examples/dfu/dfu_public_key.c -+++ nRF5_SDK_15.2.0_f8cd40a/examples/dfu/dfu_public_key.c ++++ nRF5_SDK_15.2.0_8d32cc0/examples/dfu/dfu_public_key.c @@ -1,30 +1,51 @@ +/** + * Copyright (c) 2010 - 2018, Nordic Semiconductor ASA @@ -71228,11 +71271,11 @@ index e483589..8629005 100644 -#else -#error "Debug public key not valid for production. Please see https://github.com/NordicSemiconductor/pc-nrfutil/blob/master/README.md to generate it" -#endif -diff --git nRF5_SDK_15.2.0_f8cd40a/examples/readme.txt nRF5_SDK_15.2.0_f8cd40a/examples/readme.txt +diff --git nRF5_SDK_15.2.0_8d32cc0/examples/readme.txt nRF5_SDK_15.2.0_8d32cc0/examples/readme.txt new file mode 100644 index 0000000..ac71eca --- /dev/null -+++ nRF5_SDK_15.2.0_f8cd40a/examples/readme.txt ++++ nRF5_SDK_15.2.0_8d32cc0/examples/readme.txt @@ -0,0 +1,14 @@ +Matrix shows which board is supported by given example + @@ -71248,10 +71291,10 @@ index 0000000..ac71eca +-------------------------------------------------------------------------- +connectivity\ble_connectivity | * | | * | * | | * | +-------------------------------------------------------------------------- -diff --git nRF5_SDK_15.2.0_9412b96/integration/nrfx/legacy/nrf_drv_power.c nRF5_SDK_15.2.0_f8cd40a/integration/nrfx/legacy/nrf_drv_power.c +diff --git nRF5_SDK_15.2.0_9412b96/integration/nrfx/legacy/nrf_drv_power.c nRF5_SDK_15.2.0_8d32cc0/integration/nrfx/legacy/nrf_drv_power.c index bba3d13..139d375 100644 --- nRF5_SDK_15.2.0_9412b96/integration/nrfx/legacy/nrf_drv_power.c -+++ nRF5_SDK_15.2.0_f8cd40a/integration/nrfx/legacy/nrf_drv_power.c ++++ nRF5_SDK_15.2.0_8d32cc0/integration/nrfx/legacy/nrf_drv_power.c @@ -47,6 +47,14 @@ #include "nrf_sdh_soc.h" #endif diff --git a/include/common/internal/app_ble_gap.h b/include/common/internal/app_ble_gap.h index 1f41f51ba..ced4d4f6c 100644 --- a/include/common/internal/app_ble_gap.h +++ b/include/common/internal/app_ble_gap.h @@ -64,6 +64,10 @@ extern "C" { #define SER_MAX_CONNECTIONS 8 #endif +#ifndef APP_BLE_GAP_ADV_BUF_COUNT +#define APP_BLE_GAP_ADV_BUF_COUNT 8 // Keep in sync with connectivity in SDK +#endif + /**@brief GAP connection - keyset mapping structure. * * @note This structure is used to map keysets to connection instances and store them in a static @@ -117,7 +121,8 @@ void app_ble_gap_unset_current_adapter_id(const app_ble_gap_adapter_codec_contex /**@brief Check if current adapter is set * @param[in] codec_context Check if adapter GAP state is set for codec context */ -uint32_t app_ble_gap_check_current_adapter_set(const app_ble_gap_adapter_codec_context_t codec_context); +uint32_t +app_ble_gap_check_current_adapter_set(const app_ble_gap_adapter_codec_context_t codec_context); /**@brief Allocates the instance in m_app_keys_table[] for storage of encryption keys. * @@ -173,6 +178,19 @@ uint32_t app_ble_gap_sec_keys_update(const uint32_t index, const ble_gap_sec_key uint32_t app_ble_gap_state_reset(); #if NRF_SD_BLE_API_VERSION >= 6 + +/** + * @brief Data structure to store advertising set data + */ +typedef struct +{ + uint8_t adv_handle; + uint8_t *buf1; + uint8_t *buf2; +} adv_set_data_t; + +void app_ble_gap_set_adv_data_set(uint8_t adv_handle, uint8_t *buf1, uint8_t *buf2); + /** * @brief Stores buffer for adv report data. * @@ -218,25 +236,26 @@ uint32_t app_ble_gap_adv_set_unregister(uint8_t adv_handle, uint8_t **pp_adv_dat /** * @brief Register an advertisement buffer pointer - * + * * @param[in] p_buf Advertisement buffer to create a pointer ID from - * @return -1 if there is no space left in buffer table, 0 of p_buf is nullptr, >0 with buffer location in buffer table + * @return -1 if there is no space left in buffer table, 0 of p_buf is nullptr, >0 with buffer + * location in buffer table */ -int app_ble_gap_adv_buf_register(void * p_buf); - +int app_ble_gap_adv_buf_register(void *p_buf); +int app_ble_gap_adv_buf_addr_unregister(void *p_buf); /** * @brief Unregister a buffer from advertisement buffer table - * + * * Unregister a buffer from the buffer table (ble_gap_adv_buf_addr) - * + * * @param[in] id buffer ID in the ble_gap_adv_buf_addr table * @param[in] event_context true if EVENT context, false if it is in REQUEST_REPLOY context - * - * @return Buffer pointer from advertisement buffer table, except nullptr if id == 0 or if the context for the current adapter is not set - */ + * + * @return Buffer pointer from advertisement buffer table, except nullptr if id == 0 or if the + * context for the current adapter is not set + */ void *app_ble_gap_adv_buf_unregister(const int id, bool event_context); -void app_ble_gap_adv_buf_addr_unregister(void * p_buf, bool event_context); void app_ble_gap_scan_data_unset(bool free); diff --git a/src/common/app_ble_gap.cpp b/src/common/app_ble_gap.cpp index 8241c9fe5..df1729bfc 100644 --- a/src/common/app_ble_gap.cpp +++ b/src/common/app_ble_gap.cpp @@ -39,7 +39,6 @@ */ #include "app_ble_gap.h" #include "nrf_error.h" -#include "ser_config.h" #include #include @@ -70,7 +69,7 @@ typedef struct // Buffer for scan data received ble_data_t scan_data = {nullptr, 0}; int scan_data_id{0}; - void *ble_gap_adv_buf_addr[BLE_GAP_ADV_SET_COUNT_MAX]{}; + void *ble_gap_adv_buf_addr[APP_BLE_GAP_ADV_BUF_COUNT]{}; #endif // NRF_SD_BLE_API_VERSION >= 6 } adapter_ble_gap_state_t; @@ -345,6 +344,8 @@ uint32_t app_ble_gap_state_reset() } #if NRF_SD_BLE_API_VERSION >= 6 +static adv_set_data_t adv_set_data[] = {BLE_GAP_ADV_SET_HANDLE_NOT_SET, nullptr, nullptr}; + uint32_t app_ble_gap_scan_data_set(ble_data_t const *p_data) { if (!app_ble_gap_check_current_adapter_set(REQUEST_REPLY_CODEC_CONTEXT)) @@ -463,7 +464,9 @@ int app_ble_gap_adv_buf_register(void *p_buf) { if (!app_ble_gap_check_current_adapter_set(REQUEST_REPLY_CODEC_CONTEXT)) { - std::cerr << "PROGRAM LOGIC ERROR: app_ble_gap_adv_buf_register not called from context REQUEST_REPLY_CODEC_CONTEXT, terminating" << std::endl; + std::cerr << "PROGRAM LOGIC ERROR: app_ble_gap_adv_buf_register not called from context " + "REQUEST_REPLY_CODEC_CONTEXT, terminating" + << std::endl; std::terminate(); } @@ -482,7 +485,7 @@ int app_ble_gap_adv_buf_register(void *p_buf) // store this new buffer pointer. for (auto &addr : gap_state->ble_gap_adv_buf_addr) { - if (addr == nullptr) + if ((addr == nullptr) || (addr == p_buf)) { addr = p_buf; return id; @@ -498,6 +501,46 @@ int app_ble_gap_adv_buf_register(void *p_buf) } } +int app_ble_gap_adv_buf_addr_unregister(void *p_buf) +{ + if (!app_ble_gap_check_current_adapter_set(REQUEST_REPLY_CODEC_CONTEXT)) + { + std::cerr << "PROGRAM LOGIC ERROR: app_ble_gap_adv_buf_register not called from context " + "REQUEST_REPLY_CODEC_CONTEXT, terminating" + << std::endl; + std::terminate(); + } + + if (p_buf == nullptr) + { + return 0; + } + + try + { + const auto gap_state = adapters_gap_state.at(current_request_reply_context.adapter_id); + + auto id = 1; + + // Find available location in ble_gap_adv_buf_addr for + // store this new buffer pointer. + for (auto &addr : gap_state->ble_gap_adv_buf_addr) + { + if (addr == p_buf) + { + addr = nullptr; + return id; + } + } + + return -1; + } + catch (const std::out_of_range &) + { + return -1; + } +} + void *app_ble_gap_adv_buf_unregister(const int id, const bool event_context) { if (!app_ble_gap_check_current_adapter_set(event_context ? EVENT_CODEC_CONTEXT @@ -521,6 +564,47 @@ void *app_ble_gap_adv_buf_unregister(const int id, const bool event_context) return ret; } +void app_ble_gap_set_adv_data_set(uint8_t adv_handle, uint8_t *buf1, uint8_t *buf2) +{ + if (adv_handle == BLE_GAP_ADV_SET_HANDLE_NOT_SET) + { + return; + } + + for (int i = 0; i < BLE_GAP_ADV_SET_COUNT_MAX; i++) + { + if (adv_set_data[i].adv_handle == adv_handle) + { + /* If adv_set is already configured replace old buffers with new one. */ + if (adv_set_data[i].buf1 != buf1) + { + app_ble_gap_adv_buf_addr_unregister(adv_set_data[i].buf1); + } + + if (adv_set_data[i].buf2 != buf2) + { + app_ble_gap_adv_buf_addr_unregister(adv_set_data[i].buf2); + } + + adv_set_data[i].buf1 = buf1; + adv_set_data[i].buf2 = buf2; + + return; + } + } + + for (int i = 0; i < BLE_GAP_ADV_SET_COUNT_MAX; i++) + { + if (adv_set_data[i].adv_handle == BLE_GAP_ADV_SET_HANDLE_NOT_SET) + { + adv_set_data[i].adv_handle = adv_handle; + adv_set_data[i].buf1 = buf1; + adv_set_data[i].buf2 = buf2; + return; + } + } +} + // Update the adapter gap state scan_data_id variable based on pointer received??? void app_ble_gap_scan_data_set(const uint8_t *p_scan_data) { diff --git a/src/common/ble_common.cpp b/src/common/ble_common.cpp index 34c4cf502..a94fcec5c 100755 --- a/src/common/ble_common.cpp +++ b/src/common/ble_common.cpp @@ -78,7 +78,7 @@ uint32_t encode_decode(adapter_t *adapter, const encode_function_t &encode_funct if (decode_function) { - rx_buffer = std::make_shared>(SER_HAL_TRANSPORT_MAX_PKT_SIZE ); + rx_buffer = std::make_shared>(SER_HAL_TRANSPORT_MAX_PKT_SIZE); } // Create tx_buffer diff --git a/src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c b/src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c index dc239c94c..a984756db 100644 --- a/src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c +++ b/src/sd_api_common/sdk/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c @@ -459,6 +459,7 @@ uint32_t ble_gap_evt_connected_t_enc(void const * const p_void_struct, SER_PUSH_uint8(&p_struct->role); SER_PUSH_FIELD(&p_struct->conn_params, ble_gap_conn_params_t_enc); #if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 5 + SER_PUSH_uint8(&p_struct->adv_handle); SER_PUSH_FIELD(&p_struct->adv_data, ble_gap_adv_data_t_enc); #endif @@ -476,6 +477,7 @@ uint32_t ble_gap_evt_connected_t_dec(uint8_t const * const p_buf, SER_PULL_uint8(&p_struct->role); SER_PULL_FIELD(&p_struct->conn_params, ble_gap_conn_params_t_dec); #if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 5 + SER_PULL_uint8(&p_struct->adv_handle); SER_PULL_FIELD(&p_struct->adv_data, ble_gap_adv_data_t_dec); #endif diff --git a/src/sd_api_v6/ble_gap_impl.cpp b/src/sd_api_v6/ble_gap_impl.cpp index 491aaf707..c0f9c2319 100644 --- a/src/sd_api_v6/ble_gap_impl.cpp +++ b/src/sd_api_v6/ble_gap_impl.cpp @@ -76,8 +76,8 @@ uint32_t sd_ble_gap_adv_set_configure(adapter_t *adapter, uint8_t *p_adv_handle, } else { - mp_out_params[0] = NULL; - mp_out_params[1] = NULL; + mp_out_params[0] = nullptr; + mp_out_params[1] = nullptr; } return ble_gap_adv_set_configure_req_enc(p_adv_handle, p_adv_data, p_adv_params, buffer, @@ -86,7 +86,13 @@ uint32_t sd_ble_gap_adv_set_configure(adapter_t *adapter, uint8_t *p_adv_handle, decode_function_t decode_function = [&](uint8_t *buffer, uint32_t length, uint32_t *result) -> uint32_t { - return ble_gap_adv_set_configure_rsp_dec(buffer, length, p_adv_handle, result); + uint32_t err = ble_gap_adv_set_configure_rsp_dec(buffer, length, p_adv_handle, result); + if (err == 0) + { + app_ble_gap_set_adv_data_set(*p_adv_handle, (uint8_t *)mp_out_params[0], + (uint8_t *)mp_out_params[1]); + } + return err; }; uint32_t err = gap_encode_decode(adapter, encode_function, decode_function); diff --git a/test/softdevice_api/testcase_advertising.cpp b/test/softdevice_api/testcase_advertising.cpp index 70672466c..728b4b4a0 100644 --- a/test/softdevice_api/testcase_advertising.cpp +++ b/test/softdevice_api/testcase_advertising.cpp @@ -74,34 +74,28 @@ TEST_CASE(CREATE_TEST_NAME_AND_TAGS( SECTION("extended") { const auto maxLengthOfAdvData = testutil::ADV_DATA_BUFFER_SIZE; - const auto maxNumberOfAdvertisements = 20; - const auto advertisementNameLength = 40; - const auto advertisementSetId = 5; + const auto maxNumberOfAdvertisements = 100; // Random number of advertisements + const auto advertisementNameLength = 40; // Random advertisement name length + const auto advertisementSetId = 5; // Random advertisement set id auto scanRequestCountOtherCentral = 0; auto scanRequestCountThisCentral = 0; - std::vector peripheralAdvNameBuffer(advertisementNameLength); - testutil::appendRandomAlphaNumeric(peripheralAdvNameBuffer, advertisementNameLength); - const std::string peripheralAdvName(peripheralAdvNameBuffer.begin(), - peripheralAdvNameBuffer.end()); + std::string peripheralAdvName; + std::vector randomData; // Create advertising data and scan response data - std::vector advertising; - std::vector scanResponse; - - testutil::appendAdvertisingName(scanResponse, peripheralAdvName); + std::vector advertisingData; + std::vector scanResponseData; // Append max number of bytes in advertisement packet with manufacturer specific random data // after the peripheral name - const auto remainingSpace = - maxLengthOfAdvData - scanResponse.size() - 2 /* length and AD type */; - std::vector randomData; + const auto remainingSpace = maxLengthOfAdvData - + (advertisementNameLength + 2) /* AD header size */ - + 2 /* AD header size manufacturer specific data */; - testutil::appendRandomData(randomData, remainingSpace); - - scanResponse.reserve(maxLengthOfAdvData); - testutil::appendManufacturerSpecificData(scanResponse, randomData, true); + testutil::createRandomAdvertisingData(scanResponseData, peripheralAdvName, randomData, + advertisementNameLength, remainingSpace); // Instantiate an adapter to use as BLE Central in the test auto c = std::make_shared( @@ -110,8 +104,8 @@ TEST_CASE(CREATE_TEST_NAME_AND_TAGS( // Instantiated an adapter to use as BLE Peripheral in the test auto p = std::make_shared( - testutil::Peripheral, peripheral.port, env.baudRate, env.mtu, env.retransmissionInterval, - env.responseTimeout); + testutil::Peripheral, peripheral.port, env.baudRate, env.mtu, + env.retransmissionInterval, env.responseTimeout); REQUIRE(sd_rpc_log_handler_severity_filter_set(c->unwrap(), env.driverLogLevel) == NRF_SUCCESS); @@ -156,6 +150,25 @@ TEST_CASE(CREATE_TEST_NAME_AND_TAGS( error = true; return true; } + + // Change advertising data in peripheral + scanResponseData.clear(); + testutil::createRandomAdvertisingData( + scanResponseData, peripheralAdvName, randomData); + NRF_LOG(c->role() << " Changing advertisement data in BLE_GAP_EVT_ADV_REPORT"); + + const auto err_code = p->changeAdvertisingData( + std::vector(), scanResponseData); + + if (err_code != NRF_SUCCESS) + { + NRF_LOG(c->role() << " Error changing advertising data " + << testutil::asText( + gapEvent->params.adv_report.peer_addr) + << ", " << testutil::errorToString(err_code)); + error = true; + return true; + } } } } @@ -252,12 +265,12 @@ TEST_CASE(CREATE_TEST_NAME_AND_TAGS( std::vector manufacturerSpecificData; const auto advReport = setTerminated.adv_data; - std::vector advData; + std::vector scan_rsp_data; const auto data = advReport.scan_rsp_data.p_data; const auto dataLength = advReport.scan_rsp_data.len; - advData.assign(data, data + dataLength); + scan_rsp_data.assign(data, data + dataLength); - if (scanResponse != advData) + if (scanResponseData != scan_rsp_data) { NRF_LOG(p->role() << " BLE_GAP_EVT_ADV_SET_TERMINATED: Advertisement " "buffers set in sd_ble_gap_adv_set_configure does " @@ -298,8 +311,8 @@ TEST_CASE(CREATE_TEST_NAME_AND_TAGS( REQUIRE(c->configure() == NRF_SUCCESS); REQUIRE(p->configure() == NRF_SUCCESS); - REQUIRE(p->setupAdvertising({}, // advertising data - scanResponse, // scan response data + REQUIRE(p->setupAdvertising(advertisingData, // advertising data + scanResponseData, // scan response data 40, // interval 0, // duration false, // connectable diff --git a/test/softdevice_api/testcase_util.cpp b/test/softdevice_api/testcase_util.cpp new file mode 100644 index 000000000..6274f03b1 --- /dev/null +++ b/test/softdevice_api/testcase_util.cpp @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2019 Nordic Semiconductor ASA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 4. This software must only be used in or with a processor manufactured by Nordic + * Semiconductor ASA, or in or with a processor manufactured by a third party that + * is used in combination with a processor manufactured by Nordic Semiconductor. + * + * 5. Any software provided in binary or object form under this license must not be + * reverse engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +// Test framework +#include "catch2/catch.hpp" + +// Test support +#include +#include + +#include + +TEST_CASE("create random advertising packet") +{ + const auto advertisingHeaderSize = 2; + std::vector advertisingData; + + SECTION("append manufacturer specific data data") + { + const auto data = std::vector{0, 1, 2, 3, 4}; + testutil::appendManufacturerSpecificData(advertisingData, data); + REQUIRE(advertisingData.size() == (data.size() + advertisingHeaderSize)); + REQUIRE(advertisingData[0] == (1 + static_cast(data.size()))); + REQUIRE(advertisingData[1] == BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA); + + for (size_t i = 0; i < data.size(); i++) + { + REQUIRE(advertisingData[2 + i] == data[i]); + } + } + + SECTION("append advertising name") + { + const std::string name = "Unicorn"; + testutil::appendAdvertisingName(advertisingData, name); + REQUIRE(advertisingData.size() == (name.size() + advertisingHeaderSize)); + REQUIRE(advertisingData[0] == (1 + static_cast(name.length()))); + REQUIRE(advertisingData[1] == BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME); + + for (size_t i = 0; i < name.length(); i++) + { + REQUIRE(advertisingData[advertisingHeaderSize + i] == name[i]); + } + } + + SECTION("create random advertising packet") + { + std::string advertisingName; + std::vector randomData; + + testutil::createRandomAdvertisingData(advertisingData, advertisingName, randomData); + size_t offset = 0; + + REQUIRE(advertisingData[offset++] == (1 + static_cast(advertisingName.size()))); + REQUIRE(advertisingData[offset++] == + static_cast(BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME)); + + for (size_t i = offset; i < advertisingName.length(); i++) + { + REQUIRE(advertisingData[i + offset] == advertisingName[i]); + } + + offset = offset + advertisingName.length(); + REQUIRE(advertisingData[offset++] == (1 + static_cast(randomData.size()))); + REQUIRE(advertisingData[offset++] == + static_cast(BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA)); + + for (size_t i = 0; i < randomData.size(); i++) + { + REQUIRE(advertisingData[offset + i] == randomData[i]); + } + + REQUIRE(advertisingData.size() == (advertisingName.length() + advertisingHeaderSize + + randomData.size() + advertisingHeaderSize)); + } +} \ No newline at end of file diff --git a/test/util/include/test_util.h b/test/util/include/test_util.h index a28ef629a..ff8ec8adc 100644 --- a/test/util/include/test_util.h +++ b/test/util/include/test_util.h @@ -40,8 +40,8 @@ bool findManufacturerSpecificData(const ble_gap_evt_adv_report_t &p_adv_report, bool findAdvName(const ble_gap_evt_adv_report_t p_adv_report, const std::string &name_to_find); void assertAdvertisingPacketSizeIsValid(const std::vector existingPacket, - const size_t additionalBytes, const bool extended = false, - const bool connectable = false); + const size_t additionalBytes, const bool extended = false, + const bool connectable = false); /** * @brief Function that append name to advertise to advertising type @@ -49,6 +49,7 @@ void assertAdvertisingPacketSizeIsValid(const std::vector existingPacke * * @param[in,out] advertisingData std::vector to append advertising data to * @param[in] name Name to append to advertisingData + * @param[in] extended specifies if packet type is extended or not */ void appendAdvertisingName(std::vector &advertisingData, const std::string &name, const bool extended = false); @@ -58,21 +59,23 @@ void appendAdvertisingName(std::vector &advertisingData, const std::str * * @param[in,out] advertisingData std::vector to append advertising flags to * @param[in] flags Flags to append to advertisingData + * @param[in] extended specifies if packet type is extended or not */ void appendAdvertisingFlags(std::vector &advertisingData, const uint8_t flags, - const bool extended = false); + const bool extended = false); /** * @brief Function that append manufacturer specifid data to advertising * * @param[in,out] advertisingData std::vector to append manufacturer specific data to * @param[in] manufacturerSpecificData Manufacturer specific data to append to advertisingData + * @param[in] extended specifies if packet type is extended or not */ void appendManufacturerSpecificData(std::vector &advertisingData, - const std::vector manufacturerSpecificData, + const std::vector &manufacturerSpecificData, const bool extended = false); -/* +/** * @brief Function that fills a std::vector with random values * * @param[in,out] data vector to populate with random values @@ -80,18 +83,39 @@ void appendManufacturerSpecificData(std::vector &advertisingData, */ void appendRandomData(std::vector &data, const size_t size); -/* +/** * @brief Function that fills a std::vector with random ASCII values * * @param[in,out] data vector to populate with random ASCII values * @param[in] size number of random values to fill the vector with */ - void appendRandomAlphaNumeric(std::vector &data, const size_t size); +/** + * @brief Function that create a random advertising name + * + * @param[in] prefix A prefix added to the advertising name + * @param[in] length Total length of advertising name (including prefix) + */ std::string createRandomAdvertisingName(const std::string &prefix = "periph", const uint8_t length = 10); +/** + * @brief Function that append random advertising data + * + * @param[out] advertisingData vector to append advertising data to + * @param[out] advertisingName vector to populate with randomly created advertising name + * @param[out] manufacturerData vector to populate with randomly created manufacturer data + * + */ +void createRandomAdvertisingData( + std::vector &advertisingData, std::string &advertisingName, + std::vector &randomData, const size_t advertisingNameLength = 20, + const size_t manufacturerDataLength = testutil::ADV_DATA_BUFFER_SIZE - + 20 /* advertisingNameLength */ - + 2 /* length and AD type */ - 2 /* length and AD type */, + const bool extended = false); + bool operator==(const ble_gap_addr_t &lhs, const ble_gap_addr_t &rhs); bool operator!=(const ble_gap_addr_t &lhs, const ble_gap_addr_t &rhs); diff --git a/test/util/include/test_util_adapter_wrapper.h b/test/util/include/test_util_adapter_wrapper.h index e2a1cbde0..bf19e820f 100644 --- a/test/util/include/test_util_adapter_wrapper.h +++ b/test/util/include/test_util_adapter_wrapper.h @@ -15,6 +15,7 @@ #include "test_util_adapter_wrapper_scratchpad.h" +#include #include #include #include @@ -41,6 +42,11 @@ using sd_api_time_unit_t = enum { uint16_t millisecondsToUnits(const double milliseconds, const sd_api_time_unit_t timeunit); +constexpr uint8_t DATA_ROTATING_BUFFER_COUNT = 4; + +using data_buffer = std::vector; +using data_buffers = std::vector; + class AdapterWrapper { public: @@ -76,6 +82,9 @@ class AdapterWrapper uint32_t startAdvertising(); + uint32_t changeAdvertisingData(const std::vector &advertisingData, + const std::vector &scanResponseData); + uint32_t startServiceDiscovery(const uint8_t type, const uint16_t uuid); uint32_t startAuthentication(const bool bond = true, const bool mitm = true, @@ -168,6 +177,16 @@ class AdapterWrapper uint32_t setBLECfg(uint8_t conn_cfg_tag); #endif + // This data member is a way to change the advertising data while advertising is in progress. + // The way SoftDevice V6 works is that the pointer address needs to be different when changing + // the advertising data while advertising. +#if NRF_SD_BLE_API > 5 + data_buffers m_data_buffers{}; + uint8_t m_data_buffers_index{0}; + data_buffer &nextDataBuffer(); + uint32_t m_changeCount{0}; +#endif + adapter_t *adapterInit(const char *serial_port, const uint32_t baud_rate, const uint32_t retransmission_interval, const uint32_t response_timeout); diff --git a/test/util/include/test_util_adapter_wrapper_scratchpad.h b/test/util/include/test_util_adapter_wrapper_scratchpad.h index e6010a6a3..6f6f60795 100644 --- a/test/util/include/test_util_adapter_wrapper_scratchpad.h +++ b/test/util/include/test_util_adapter_wrapper_scratchpad.h @@ -5,6 +5,8 @@ #include "ble.h" +constexpr size_t SCAN_RSP_DATA_BUFFER_SIZE = 1000; + #if NRF_SD_BLE_API == 4 || NRF_SD_BLE_API > 6 #error "wrapper does not take into account this version of the SoftDevice API." #endif @@ -105,7 +107,7 @@ struct AdapterWrapperScratchpad ble_gap_adv_data_t adv_report_data{}; // Data used for advertising ble_data_t adv_report_adv_data{}; // Advertisement data uint8_t adv_report_adv_data_buffer[ADV_DATA_BUFFER_SIZE]{}; // Advertisement data buffer - uint8_t adv_report_scan_rsp_data_buffer[1000]{}; // Advertisement data buffer + uint8_t adv_report_scan_rsp_data_buffer[SCAN_RSP_DATA_BUFFER_SIZE]{}; // Advertisement data buffer ble_data_t adv_report_scan_rsp_data{}; // Scan report data ble_gap_adv_properties_t adv_properties{}; // Properties used for advertising #endif diff --git a/test/util/src/test_util.cpp b/test/util/src/test_util.cpp index 1e4079d5f..3172e4f0c 100644 --- a/test/util/src/test_util.cpp +++ b/test/util/src/test_util.cpp @@ -12,15 +12,6 @@ namespace testutil { -/** - * @brief Function that find advertising type data based on specified specified advertising type - * - * @param[in] advType Advertisment type to search for - * @param[in] advData Advertising data to parse - * @param[in,out] advTypeData Advertising data found for provided advertising type - * - * @return true if advertising type was found, false if not. - */ bool advReportParse(const uint8_t advType, const std::vector &advData, std::vector &advTypeData) { @@ -82,15 +73,6 @@ bool findManufacturerSpecificData(const ble_gap_evt_adv_report_t &p_adv_report, manufacturer_specific_data); } -/** - * @brief Function that search for advertising name in BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME or - * BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME - * - * @param[in] p_adv_report Pointer to advertising report to search in - * @param[in] name_to_find Advertising name to search for - * - * @return true if name is found, false if not - */ bool findAdvName(const ble_gap_evt_adv_report_t p_adv_report, const std::string &name_to_find) { std::vector advData; @@ -132,8 +114,8 @@ bool findAdvName(const ble_gap_evt_adv_report_t p_adv_report, const std::string } void assertAdvertisingPacketSizeIsValid(const std::vector existingPacket, - const size_t additionalBytes, const bool extended, - const bool connectable) + const size_t additionalBytes, const bool extended, + const bool connectable) { auto valid = true; const auto packetSize = existingPacket.size() + additionalBytes; @@ -168,32 +150,19 @@ void assertAdvertisingPacketSizeIsValid(const std::vector existingPacke } } -/** - * @brief Function that append name to advertise to advertising type - * BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME - * - * @param[in,out] advertisingData std::vector to append advertising data to - * @param[in] name Name to append to advertisingData - */ void appendAdvertisingName(std::vector &advertisingData, const std::string &name, const bool extended) { assertAdvertisingPacketSizeIsValid(advertisingData, 2 /* size + type */ + name.length(), - extended); + extended); advertisingData.push_back(1 /* type */ + static_cast(name.length())); advertisingData.push_back(BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME); std::copy(name.begin(), name.end(), std::back_inserter(advertisingData)); } -/** - * @brief Function that append flags to advertising type - * - * @param[in,out] advertisingData std::vector to append advertising flags to - * @param[in] flags Flags to append to advertisingData - */ void appendAdvertisingFlags(std::vector &advertisingData, const uint8_t flags, - const bool extended) + const bool extended) { assertAdvertisingPacketSizeIsValid(advertisingData, 3 /* size + type + flags */, extended); @@ -202,14 +171,8 @@ void appendAdvertisingFlags(std::vector &advertisingData, const uint8_t advertisingData.push_back(flags); } -/** - * @brief Function that append manufacturer specifid data to advertising - * - * @param[in,out] advertisingData std::vector to append manufacturer specific data to - * @param[in] manufacturerSpecificData Manufacturer specific data to append to advertisingData - */ void appendManufacturerSpecificData(std::vector &advertisingData, - const std::vector manufacturerSpecificData, + const std::vector &manufacturerSpecificData, const bool extended) { assertAdvertisingPacketSizeIsValid( @@ -221,25 +184,12 @@ void appendManufacturerSpecificData(std::vector &advertisingData, std::back_inserter(advertisingData)); } -/* - * @brief Function that fills a std::vector with random values - * - * @param[in,out] data vector to populate with random values - * @param[in] size number of random values to fill the vector with - */ void appendRandomData(std::vector &data, const size_t size) { data.resize(size); std::generate(data.begin(), data.end(), std::rand); } -/* - * @brief Function that fills a std::vector with random ASCII values - * - * @param[in,out] data vector to populate with random ASCII values - * @param[in] size number of random values to fill the vector with - */ - void appendRandomAlphaNumeric(std::vector &data, const size_t size) { data.resize(size); @@ -273,6 +223,25 @@ std::string createRandomAdvertisingName(const std::string &prefix, const uint8_t return std::string(data.begin(), data.end()); } +void createRandomAdvertisingData(std::vector &advertisingData, + std::string &advertisingName, std::vector &randomData, + const size_t advertisingNameLength, + const size_t manufacturerDataLength, const bool extended) +{ + randomData.clear(); + randomData.resize(manufacturerDataLength); + + std::vector peripheralAdvNameBuffer(advertisingNameLength); + appendRandomAlphaNumeric(peripheralAdvNameBuffer, advertisingNameLength); + const std::string peripheralAdvName(peripheralAdvNameBuffer.begin(), + peripheralAdvNameBuffer.end()); + testutil::appendAdvertisingName(advertisingData, peripheralAdvName); + advertisingName = peripheralAdvName; + + testutil::appendRandomData(randomData, manufacturerDataLength); + testutil::appendManufacturerSpecificData(advertisingData, randomData, extended); +} + bool operator==(const ble_gap_addr_t &lhs, const ble_gap_addr_t &rhs) { const auto addressIsSame = std::memcmp(lhs.addr, rhs.addr, BLE_GAP_ADDR_LEN) == 0; diff --git a/test/util/src/test_util_adapter_wrapper.cpp b/test/util/src/test_util_adapter_wrapper.cpp index 8c8c62773..137d03a2a 100644 --- a/test/util/src/test_util_adapter_wrapper.cpp +++ b/test/util/src/test_util_adapter_wrapper.cpp @@ -17,10 +17,11 @@ #include #include +#include #include -constexpr uint8_t MaxPeripheralConnections = 1; -constexpr uint8_t MaxCentralConnections = 7; +constexpr uint8_t MaxPeripheralConnections = 1; +constexpr uint8_t MaxCentralConnections = 7; constexpr uint8_t MaxCentralSecureConnections = 1; namespace testutil { @@ -43,6 +44,18 @@ AdapterWrapper::AdapterWrapper(const Role &role, const std::string &port, const AdapterWrapper::adapters[m_adapter->internal] = this; +#if NRF_SD_BLE_API > 5 + // + // Create a fixed memory area to support SoftDevice API v6 + // advertising data change during advertising + // + m_data_buffers.resize(DATA_ROTATING_BUFFER_COUNT); + for (auto &buffer : m_data_buffers) + { + buffer.reserve(ADV_DATA_BUFFER_SIZE); + } +#endif + // Setup scratchpad with default values setupScratchpad(mtu); }; @@ -317,7 +330,7 @@ uint32_t AdapterWrapper::setupAdvertising( } } - auto err_code = + const auto err_code = sd_ble_gap_adv_set_configure(m_adapter, &(scratchpad.adv_handle), &(scratchpad.adv_report_data), &(scratchpad.adv_params)); #endif @@ -361,6 +374,96 @@ uint32_t AdapterWrapper::startAdvertising() return err_code; } +#if NRF_SD_BLE_API > 5 +data_buffer &AdapterWrapper::nextDataBuffer() +{ + m_data_buffers_index++; + m_data_buffers_index = m_data_buffers_index % DATA_ROTATING_BUFFER_COUNT; + return m_data_buffers[m_data_buffers_index]; +} +#endif + +uint32_t AdapterWrapper::changeAdvertisingData(const std::vector &advertisingData, + const std::vector &scanResponseData) +{ +#if NRF_SD_BLE_API == 6 + const auto advertisingDataSize = advertisingData.size(); + + if (advertisingDataSize > testutil::ADV_DATA_BUFFER_SIZE) + { + NRF_LOG(role() << " Advertising data is larger then the buffer set asize."); + return NRF_ERROR_INVALID_PARAM; + } + + ble_data_t adv_data; + + if (advertisingDataSize == 0) + { + adv_data.p_data = nullptr; + adv_data.len = 0; + } + else + { + auto &adv_data_buffer = nextDataBuffer(); + + adv_data_buffer.resize(advertisingDataSize); + std::copy(advertisingData.begin(), advertisingData.end(), adv_data_buffer.begin()); + + adv_data.p_data = adv_data_buffer.data(); + adv_data.len = static_cast(advertisingDataSize); + } + + const auto scanResponseDataSize = scanResponseData.size(); + + ble_data_t scan_rsp_data; + + if (scanResponseDataSize == 0) + { + scan_rsp_data.p_data = nullptr; + scan_rsp_data.len = 0; + } + else + { + auto &scan_rsp_data_buffer = nextDataBuffer(); + scan_rsp_data_buffer.resize(scanResponseDataSize); + std::copy(scanResponseData.begin(), scanResponseData.end(), scan_rsp_data_buffer.begin()); + scan_rsp_data.p_data = scan_rsp_data_buffer.data(); + scan_rsp_data.len = static_cast(scanResponseDataSize); + } + + // Tie together the advertisement setup + ble_gap_adv_data_t advertising_data; + + advertising_data.adv_data = adv_data; + advertising_data.scan_rsp_data = scan_rsp_data; + + NRF_LOG(role() << " Changing advertisement data to instance with addresses" + << " adv_data.p_data:" << static_cast(advertising_data.adv_data.p_data) + << " adv_data.len:" << static_cast(adv_data.len) << " scan_rsp.p_data:" + << static_cast(advertising_data.scan_rsp_data.p_data) + << " scan_rsp_data.len:" << static_cast(scan_rsp_data.len)); + + // Support only undirected advertisement for now + const auto err_code = sd_ble_gap_adv_set_configure(m_adapter, &(scratchpad.adv_handle), + &advertising_data, nullptr); + + if (err_code != NRF_SUCCESS) + { + NRF_LOG(role() << " Changing of advertisement data failed, " + << testutil::errorToString(err_code)); + } + else + { + m_changeCount++; + NRF_LOG(role() << " Changing advertisement data succeeded (#" << m_changeCount << ")"); + } + + return err_code; +#else + return NRF_ERROR_NOT_SUPPORTED; +#endif +} + uint32_t AdapterWrapper::startServiceDiscovery(const uint8_t type, const uint16_t uuid) { uint16_t start_handle = 0x01; @@ -884,10 +987,10 @@ void AdapterWrapper::setupScratchpad(const uint16_t mtu) std::memset(&scratchpad.ble_enable_params, 0, sizeof(scratchpad.ble_enable_params)); scratchpad.ble_enable_params.gatts_enable_params.attr_tab_size = BLE_GATTS_ATTR_TAB_SIZE_DEFAULT; - scratchpad.ble_enable_params.gatts_enable_params.service_changed = false; - scratchpad.ble_enable_params.gap_enable_params.periph_conn_count = MaxPeripheralConnections; - scratchpad.ble_enable_params.gap_enable_params.central_conn_count = MaxCentralConnections; - scratchpad.ble_enable_params.gap_enable_params.central_sec_count = MaxCentralSecureConnections; + scratchpad.ble_enable_params.gatts_enable_params.service_changed = false; + scratchpad.ble_enable_params.gap_enable_params.periph_conn_count = MaxPeripheralConnections; + scratchpad.ble_enable_params.gap_enable_params.central_conn_count = MaxCentralConnections; + scratchpad.ble_enable_params.gap_enable_params.central_sec_count = MaxCentralSecureConnections; scratchpad.ble_enable_params.common_enable_params.p_conn_bw_counts = nullptr; scratchpad.ble_enable_params.common_enable_params.vs_uuid_count = 1; @@ -905,7 +1008,7 @@ void AdapterWrapper::setupScratchpad(const uint16_t mtu) scratchpad.opt.common_opt = scratchpad.common_opt; #endif - scratchpad.mtu = mtu == 0 ? DEFAULT_MTU_SIZE : mtu; + scratchpad.mtu = mtu == 0 ? DEFAULT_MTU_SIZE : mtu; #if NRF_SD_BLE_API == 3 scratchpad.ble_enable_params.gatt_enable_params.att_mtu = scratchpad.mtu; From 47bb72b9657829dd0898f9df1ffc1fac3da61807 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ken=20A=2E=20Rederg=C3=A5rd?= <64542+kenr@users.noreply.github.com> Date: Thu, 31 Jan 2019 11:12:24 +0100 Subject: [PATCH 15/32] Add check of armgcc toolchain version (#192) --- hex/cmake/util.cmake | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/hex/cmake/util.cmake b/hex/cmake/util.cmake index 09c425975..41753586f 100644 --- a/hex/cmake/util.cmake +++ b/hex/cmake/util.cmake @@ -92,6 +92,12 @@ function(nrf_configure_sdk_values SDK_VERSION SDK_DIRECTORY) return() endif() + set(ARM_GCC_TOOLCHAIN_VERSION_MIN "7.3.1") + + if(GCC_VERSION VERSION_LESS "${ARM_GCC_TOOLCHAIN_VERSION_MIN}") + message(FATAL_ERROR "armgcc toolchain version is too old. Needs to be ${ARM_GCC_TOOLCHAIN_VERSION_MIN} or newer.") + endif() + set(TOOLCHAIN_PATH "${SDK_DIRECTORY}/components/toolchain/gcc") if(EXISTS "${TOOLCHAIN_PATH}") if(WIN32) From c5ef8eb8817e5923fbb2038a436efd0de892521f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ken=20A=2E=20Rederg=C3=A5rd?= <64542+kenr@users.noreply.github.com> Date: Thu, 31 Jan 2019 11:12:56 +0100 Subject: [PATCH 16/32] Fix/spurious error and compilation warning (#193) * Fix compilation warning (clang) * Try to fix spurious errors in test bench --- src/common/app_ble_gap.cpp | 2 +- test/softdevice_api/testcase_advertising.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/common/app_ble_gap.cpp b/src/common/app_ble_gap.cpp index df1729bfc..e80c1a2d1 100644 --- a/src/common/app_ble_gap.cpp +++ b/src/common/app_ble_gap.cpp @@ -344,7 +344,7 @@ uint32_t app_ble_gap_state_reset() } #if NRF_SD_BLE_API_VERSION >= 6 -static adv_set_data_t adv_set_data[] = {BLE_GAP_ADV_SET_HANDLE_NOT_SET, nullptr, nullptr}; +static adv_set_data_t adv_set_data[] = {{BLE_GAP_ADV_SET_HANDLE_NOT_SET, nullptr, nullptr}}; uint32_t app_ble_gap_scan_data_set(ble_data_t const *p_data) { diff --git a/test/softdevice_api/testcase_advertising.cpp b/test/softdevice_api/testcase_advertising.cpp index 728b4b4a0..f80013a9a 100644 --- a/test/softdevice_api/testcase_advertising.cpp +++ b/test/softdevice_api/testcase_advertising.cpp @@ -74,7 +74,7 @@ TEST_CASE(CREATE_TEST_NAME_AND_TAGS( SECTION("extended") { const auto maxLengthOfAdvData = testutil::ADV_DATA_BUFFER_SIZE; - const auto maxNumberOfAdvertisements = 100; // Random number of advertisements + const auto maxNumberOfAdvertisements = 200; // Random number of advertisements const auto advertisementNameLength = 40; // Random advertisement name length const auto advertisementSetId = 5; // Random advertisement set id From eaf5ce8f1dfa2d117744fbe0d6de1bd8d65d95e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ken=20A=2E=20Rederg=C3=A5rd?= <64542+kenr@users.noreply.github.com> Date: Thu, 31 Jan 2019 14:05:33 +0100 Subject: [PATCH 17/32] Add hex as cmake module resource (#194) * Associate hex files with nrf-ble-driver targets (shared/static libraries) * Allow specifying ARM GCC compiler path with cmake defines --- CMakeLists.txt | 102 ++++++++++++++++++++----------------- cmake/install-target.cmake | 12 ++--- hex/CMakeLists.txt | 10 ++-- 3 files changed, 68 insertions(+), 56 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 942dc42dd..25c142bee 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,6 +7,16 @@ if(NOT DEFINED NRF_BLE_DRIVER_VERSION) set(NRF_BLE_DRIVER_VERSION "${NRF_BLE_DRIVER_DEFAULT_VERSION}") endif() +set(NRF_BLE_DRIVER_CONNECTIVITY_DEFAULT_VERSION "0.0.0") + +# Add connectivity firmware building +if(NOT DEFINED CONNECTIVITY_VERSION) + message(STATUS "CONNECTIVITY_VERSION not specified, using ${NRF_BLE_DRIVER_CONNECTIVITY_DEFAULT_VERSION}") + set(CONNECTIVITY_VERSION "${NRF_BLE_DRIVER_CONNECTIVITY_DEFAULT_VERSION}" CACHE STRING "" FORCE) +else() + set(CONNECTIVITY_VERSION "${CONNECTIVITY_VERSION}" CACHE STRING "" FORCE) +endif() + project( nrf-ble-driver VERSION ${NRF_BLE_DRIVER_VERSION} @@ -133,45 +143,53 @@ foreach(SD_API_VER ${SD_API_VERS}) include/${SD_API_VER_L}/nrf_error.h ) -if(WIN32) - set_target_properties( - ${NRF_BLE_DRIVER_${SD_API_VER}_SHARED_LIB} PROPERTIES - PUBLIC_HEADER "${${SD_API_VER}_PUBLIC_HEADERS}" - OUTPUT_NAME "nrf-ble-driver-${SD_API_VER_L}" - RELEASE_POSTFIX "${MSVC_TOOLSET}-mt-${PROJECT_VERSION_MAJOR}_${PROJECT_VERSION_MINOR}_${PROJECT_VERSION_PATCH}" - RELWITHDEBINFO_POSTFIX "${MSVC_TOOLSET}-mt-${PROJECT_VERSION_MAJOR}_${PROJECT_VERSION_MINOR}_${PROJECT_VERSION_PATCH}" - MINSIZEREL_POSTFIX "${MSVC_TOOLSET}-mt-${PROJECT_VERSION_MAJOR}_${PROJECT_VERSION_MINOR}_${PROJECT_VERSION_PATCH}" - DEBUG_POSTFIX "${MSVC_TOOLSET}-mt-gd-${PROJECT_VERSION_MAJOR}_${PROJECT_VERSION_MINOR}_${PROJECT_VERSION_PATCH}" - RUNTIME_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" - ) + string(TOLOWER ${SD_API_VER} SD_API_VER_L) + set(HEX_FILE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/hex/${SD_API_VER_L}/connectivity_${CONNECTIVITY_VERSION}*.hex") + file(GLOB_RECURSE ${SD_API_VER}_HEX_FILES ${HEX_FILE_DIRECTORY}) - set_target_properties( - ${NRF_BLE_DRIVER_${SD_API_VER}_STATIC_LIB} PROPERTIES - PUBLIC_HEADER "${${SD_API_VER}_PUBLIC_HEADERS}" - OUTPUT_NAME "nrf-ble-driver-${SD_API_VER_L}" - RELEASE_POSTFIX "${MSVC_TOOLSET}-mt-static-${PROJECT_VERSION_MAJOR}_${PROJECT_VERSION_MINOR}_${PROJECT_VERSION_PATCH}" - RELWITHDEBINFO_POSTFIX "${MSVC_TOOLSET}-mt-static-${PROJECT_VERSION_MAJOR}_${PROJECT_VERSION_MINOR}_${PROJECT_VERSION_PATCH}" - MINSIZEREL_POSTFIX "${MSVC_TOOLSET}-mt-static-${PROJECT_VERSION_MAJOR}_${PROJECT_VERSION_MINOR}_${PROJECT_VERSION_PATCH}" - DEBUG_POSTFIX "${MSVC_TOOLSET}-mt-static-gd-${PROJECT_VERSION_MAJOR}_${PROJECT_VERSION_MINOR}_${PROJECT_VERSION_PATCH}" - ) -else() - set_target_properties( - ${NRF_BLE_DRIVER_${SD_API_VER}_SHARED_LIB} PROPERTIES - COMPILE_DEFINITIONS "DLL_EXPORT" - PUBLIC_HEADER "${${SD_API_VER}_PUBLIC_HEADERS}" - OUTPUT_NAME "nrf-ble-driver-${SD_API_VER_L}" - VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}" - SOVERSION "${PROJECT_VERSION_MAJOR}" - PREFIX "lib" - ) + if(WIN32) + set_target_properties( + ${NRF_BLE_DRIVER_${SD_API_VER}_SHARED_LIB} PROPERTIES + PUBLIC_HEADER "${${SD_API_VER}_PUBLIC_HEADERS}" + OUTPUT_NAME "nrf-ble-driver-${SD_API_VER_L}" + RELEASE_POSTFIX "${MSVC_TOOLSET}-mt-${PROJECT_VERSION_MAJOR}_${PROJECT_VERSION_MINOR}_${PROJECT_VERSION_PATCH}" + RELWITHDEBINFO_POSTFIX "${MSVC_TOOLSET}-mt-${PROJECT_VERSION_MAJOR}_${PROJECT_VERSION_MINOR}_${PROJECT_VERSION_PATCH}" + MINSIZEREL_POSTFIX "${MSVC_TOOLSET}-mt-${PROJECT_VERSION_MAJOR}_${PROJECT_VERSION_MINOR}_${PROJECT_VERSION_PATCH}" + DEBUG_POSTFIX "${MSVC_TOOLSET}-mt-gd-${PROJECT_VERSION_MAJOR}_${PROJECT_VERSION_MINOR}_${PROJECT_VERSION_PATCH}" + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" + RESOURCE "${${SD_API_VER}_HEX_FILES}" + ) - set_target_properties( - ${NRF_BLE_DRIVER_${SD_API_VER}_STATIC_LIB} PROPERTIES - PUBLIC_HEADER "${${SD_API_VER}_PUBLIC_HEADERS}" - OUTPUT_NAME "nrf-ble-driver-${SD_API_VER_L}" - PREFIX "lib" - ) -endif() + set_target_properties( + ${NRF_BLE_DRIVER_${SD_API_VER}_STATIC_LIB} PROPERTIES + PUBLIC_HEADER "${${SD_API_VER}_PUBLIC_HEADERS}" + OUTPUT_NAME "nrf-ble-driver-${SD_API_VER_L}" + RELEASE_POSTFIX "${MSVC_TOOLSET}-mt-static-${PROJECT_VERSION_MAJOR}_${PROJECT_VERSION_MINOR}_${PROJECT_VERSION_PATCH}" + RELWITHDEBINFO_POSTFIX "${MSVC_TOOLSET}-mt-static-${PROJECT_VERSION_MAJOR}_${PROJECT_VERSION_MINOR}_${PROJECT_VERSION_PATCH}" + MINSIZEREL_POSTFIX "${MSVC_TOOLSET}-mt-static-${PROJECT_VERSION_MAJOR}_${PROJECT_VERSION_MINOR}_${PROJECT_VERSION_PATCH}" + DEBUG_POSTFIX "${MSVC_TOOLSET}-mt-static-gd-${PROJECT_VERSION_MAJOR}_${PROJECT_VERSION_MINOR}_${PROJECT_VERSION_PATCH}" + RESOURCE "${${SD_API_VER}_HEX_FILES}" + ) + else() + set_target_properties( + ${NRF_BLE_DRIVER_${SD_API_VER}_SHARED_LIB} PROPERTIES + COMPILE_DEFINITIONS "DLL_EXPORT" + PUBLIC_HEADER "${${SD_API_VER}_PUBLIC_HEADERS}" + OUTPUT_NAME "nrf-ble-driver-${SD_API_VER_L}" + VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}" + SOVERSION "${PROJECT_VERSION_MAJOR}" + PREFIX "lib" + RESOURCE "${${SD_API_VER}_HEX_FILES}" + ) + + set_target_properties( + ${NRF_BLE_DRIVER_${SD_API_VER}_STATIC_LIB} PROPERTIES + PUBLIC_HEADER "${${SD_API_VER}_PUBLIC_HEADERS}" + OUTPUT_NAME "nrf-ble-driver-${SD_API_VER_L}" + PREFIX "lib" + RESOURCE "${${SD_API_VER}_HEX_FILES}" + ) + endif() endforeach(SD_API_VER) @@ -257,16 +275,6 @@ endif() include(cmake/install-target.cmake) if(COMPILE_CONNECTIVITY) - set(NRF_BLE_DRIVER_CONNECTIVITY_DEFAULT_VERSION "0.0.0") - - # Add connectivity firmware building - if(NOT DEFINED CONNECTIVITY_VERSION) - message(STATUS "CONNECTIVITY_VERSION not specified, using ${NRF_BLE_DRIVER_CONNECTIVITY_DEFAULT_VERSION}") - set(CONNECTIVITY_VERSION "${NRF_BLE_DRIVER_CONNECTIVITY_DEFAULT_VERSION}" CACHE STRING "" FORCE) - else() - set(CONNECTIVITY_VERSION "${CONNECTIVITY_VERSION}" CACHE STRING "" FORCE) - endif() - add_subdirectory(hex) endif() diff --git a/cmake/install-target.cmake b/cmake/install-target.cmake index c277cd5e0..f750cca36 100644 --- a/cmake/install-target.cmake +++ b/cmake/install-target.cmake @@ -4,7 +4,7 @@ include(CMakePackageConfigHelpers) install(FILES "LICENSE" DESTINATION share) -message(STATUS "CMAKE_INSTALL_LIBDIR: ${CMAKE_INSTALL_LIBDIR} CMAKE_INSTALL_INCLUDEDIR: ${CMAKE_INSTALL_INCLUDEDIR}") +set(NRF_BLE_DRIVER_SHARE_INSTALL_DIR "share/${PROJECT_NAME}" CACHE STRING "install share path for nrf-ble-driver") foreach(SD_API_VER ${SD_API_VERS}) string(TOLOWER ${SD_API_VER} SD_API_VER_L) @@ -16,6 +16,7 @@ foreach(SD_API_VER ${SD_API_VERS}) ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${SD_API_VER_L} + RESOURCE DESTINATION ${NRF_BLE_DRIVER_SHARE_INSTALL_DIR}/hex/${SD_API_VER_L} COMPONENT SDK ) @@ -26,12 +27,11 @@ foreach(SD_API_VER ${SD_API_VERS}) ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${SD_API_VER_L} + RESOURCE DESTINATION ${NRF_BLE_DRIVER_SHARE_INSTALL_DIR}/hex/${SD_API_VER_L} COMPONENT SDK ) endforeach(SD_API_VER) -set(NRF_BLE_DRIVER_CMAKECONFIG_INSTALL_DIR "share/${PROJECT_NAME}" CACHE STRING "install path for nrf-ble-driverConfig.cmake") - # Create a template package config file # This part is required because SoftDevice to compile is dynamic set(CONFIG_TEMPLATE "@PACKAGE_INIT@\n\ninclude(\"\${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake\")\n\n") @@ -53,7 +53,7 @@ file(WRITE ${CONFIG_TEMPLATE_FILENAME} "${CONFIG_TEMPLATE}") configure_package_config_file( ${CONFIG_TEMPLATE_FILENAME} "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" - INSTALL_DESTINATION ${NRF_BLE_DRIVER_CMAKECONFIG_INSTALL_DIR} + INSTALL_DESTINATION ${NRF_BLE_DRIVER_SHARE_INSTALL_DIR} ) write_basic_package_version_file( @@ -66,12 +66,12 @@ install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake - DESTINATION ${NRF_BLE_DRIVER_CMAKECONFIG_INSTALL_DIR} + DESTINATION ${NRF_BLE_DRIVER_SHARE_INSTALL_DIR} ) install( EXPORT ${PROJECT_NAME}-targets FILE ${PROJECT_NAME}Targets.cmake NAMESPACE nrf:: - DESTINATION ${NRF_BLE_DRIVER_CMAKECONFIG_INSTALL_DIR} + DESTINATION ${NRF_BLE_DRIVER_SHARE_INSTALL_DIR} ) diff --git a/hex/CMakeLists.txt b/hex/CMakeLists.txt index 152193054..2d2fd9599 100644 --- a/hex/CMakeLists.txt +++ b/hex/CMakeLists.txt @@ -21,10 +21,14 @@ if(NOT DEFINED CONNECTIVITY_VERSION) message(FATAL_ERROR "CONNECTIVITY_VERSION not provided, terminating compilation.") endif() -if(NOT DEFINED ENV{GCCARMEMB_TOOLCHAIN_PATH}) - message(FATAL_ERROR "GNU Tools ARM Embedded environment variable GCCARMEMB_TOOLCHAIN_PATH not set. Stopping build.") +if(NOT DEFINED ENV{GCCARMEMB_TOOLCHAIN_PATH} AND NOT DEFINED GCCARMEMB_TOOLCHAIN_PATH) + message(FATAL_ERROR "GNU Tools ARM Embedded environment variable or cmake define GCCARMEMB_TOOLCHAIN_PATH not set. Stopping build.") else() - set(GCC_TOOLCHAIN_PATH "$ENV{GCCARMEMB_TOOLCHAIN_PATH}") + if(DEFINED GCCARMEMB_TOOLCHAIN_PATH) + set(GCC_TOOLCHAIN_PATH "${GCCARMEMB_TOOLCHAIN_PATH}") + else() + set(GCC_TOOLCHAIN_PATH "$ENV{GCCARMEMB_TOOLCHAIN_PATH}") + endif() endif() #message(STATUS "GCC_TOOLCHAIN_PATH: ${GCC_TOOLCHAIN_PATH}") From 049747310070744af61dc5580268d06dbd465187 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ken=20A=2E=20Rederg=C3=A5rd?= <64542+kenr@users.noreply.github.com> Date: Mon, 4 Feb 2019 13:16:43 +0100 Subject: [PATCH 18/32] Enable use of VCPKG_ROOT env variable (#195) To make it easier to create project files VCPKG_ROOT environment variable can be used by projects. Using the environment variable developer do not have to provide the -DCMAKE_TOOLCHAIN_FILE= define to location of the toolchain file --- CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 25c142bee..9b2c98759 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,6 +17,11 @@ else() set(CONNECTIVITY_VERSION "${CONNECTIVITY_VERSION}" CACHE STRING "" FORCE) endif() +if(DEFINED ENV{VCPKG_ROOT} AND NOT DEFINED CMAKE_TOOLCHAIN_FILE) + set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" + CACHE STRING "") +endif() + project( nrf-ble-driver VERSION ${NRF_BLE_DRIVER_VERSION} From d7228afcfd0f8c5e669a7d4967eae9fc9e66eccd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ken=20A=2E=20Rederg=C3=A5rd?= <64542+kenr@users.noreply.github.com> Date: Mon, 4 Feb 2019 14:28:15 +0100 Subject: [PATCH 19/32] Make terminate event happen earlier and stop adv/scan before closing (#196) --- test/softdevice_api/testcase_advertising.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/softdevice_api/testcase_advertising.cpp b/test/softdevice_api/testcase_advertising.cpp index f80013a9a..6cca63df4 100644 --- a/test/softdevice_api/testcase_advertising.cpp +++ b/test/softdevice_api/testcase_advertising.cpp @@ -74,7 +74,7 @@ TEST_CASE(CREATE_TEST_NAME_AND_TAGS( SECTION("extended") { const auto maxLengthOfAdvData = testutil::ADV_DATA_BUFFER_SIZE; - const auto maxNumberOfAdvertisements = 200; // Random number of advertisements + const auto maxNumberOfAdvertisements = 10; // Random number of advertisements const auto advertisementNameLength = 40; // Random advertisement name length const auto advertisementSetId = 5; // Random advertisement set id @@ -331,6 +331,9 @@ TEST_CASE(CREATE_TEST_NAME_AND_TAGS( // Wait for the test to complete std::this_thread::sleep_for(std::chrono::seconds(3)); + REQUIRE(sd_ble_gap_scan_stop(c->unwrap()) == NRF_SUCCESS); + REQUIRE(sd_ble_gap_adv_stop(p->unwrap(), p->scratchpad.adv_handle) == NRF_SUCCESS); + CHECK(error == false); CHECK(testSuccess == true); From bd8f68a41534b1267db3e311a2013ecb720d3066 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ken=20A=2E=20Rederg=C3=A5rd?= <64542+kenr@users.noreply.github.com> Date: Tue, 5 Feb 2019 09:29:43 +0100 Subject: [PATCH 20/32] Fix/spurious errors advertising test (#197) * Add support for parallel builds by not loading connfw build (connfw build does not support parallel compilation due to limitations in SDK) * Check that advertising is stopped --- CMakeLists.txt | 2 +- test/softdevice_api/testcase_advertising.cpp | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9b2c98759..681296d62 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -280,7 +280,7 @@ endif() include(cmake/install-target.cmake) if(COMPILE_CONNECTIVITY) - add_subdirectory(hex) + add_subdirectory(hex EXCLUDE_FROM_ALL) endif() include (cmake/clang-dev-tools.cmake) diff --git a/test/softdevice_api/testcase_advertising.cpp b/test/softdevice_api/testcase_advertising.cpp index 6cca63df4..be10da8d5 100644 --- a/test/softdevice_api/testcase_advertising.cpp +++ b/test/softdevice_api/testcase_advertising.cpp @@ -332,7 +332,9 @@ TEST_CASE(CREATE_TEST_NAME_AND_TAGS( std::this_thread::sleep_for(std::chrono::seconds(3)); REQUIRE(sd_ble_gap_scan_stop(c->unwrap()) == NRF_SUCCESS); - REQUIRE(sd_ble_gap_adv_stop(p->unwrap(), p->scratchpad.adv_handle) == NRF_SUCCESS); + + // Advertising shall already be stopped, check that actually is + REQUIRE(sd_ble_gap_adv_stop(p->unwrap(), p->scratchpad.adv_handle) == NRF_ERROR_INVALID_STATE); CHECK(error == false); CHECK(testSuccess == true); From b963f53be1e1bfe995d4fc8d3abba2cd15e17095 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ken=20A=2E=20Rederg=C3=A5rd?= <64542+kenr@users.noreply.github.com> Date: Wed, 13 Feb 2019 08:29:24 +0100 Subject: [PATCH 21/32] Remove newline in log and status messages (#199) --- src/common/transport/h5_transport.cpp | 2 +- src/common/transport/serialization_transport.cpp | 2 +- src/common/transport/uart_boost.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/common/transport/h5_transport.cpp b/src/common/transport/h5_transport.cpp index 894d9385c..a2d538603 100755 --- a/src/common/transport/h5_transport.cpp +++ b/src/common/transport/h5_transport.cpp @@ -1151,7 +1151,7 @@ void H5Transport::logPacket(const bool outgoing, const payload_t &packet) void H5Transport::logStateTransition(h5_state_t from, h5_state_t to) const { std::stringstream logLine; - logLine << "State change: " << stateToString(from) << " -> " << stateToString(to) << std::endl; + logLine << "State change: " << stateToString(from) << " -> " << stateToString(to); log(SD_RPC_LOG_DEBUG, logLine.str()); } diff --git a/src/common/transport/serialization_transport.cpp b/src/common/transport/serialization_transport.cpp index 2db0b2b05..30d9828d9 100755 --- a/src/common/transport/serialization_transport.cpp +++ b/src/common/transport/serialization_transport.cpp @@ -233,7 +233,7 @@ void SerializationTransport::eventHandlingRunner() { std::stringstream logMessage; logMessage << "Failed to decode event, error code is " << std::dec << errCode - << "/0x" << std::hex << errCode << "." << std::endl; + << "/0x" << std::hex << errCode << "."; logCallback(SD_RPC_LOG_ERROR, logMessage.str()); statusCallback(PKT_DECODE_ERROR, logMessage.str()); } diff --git a/src/common/transport/uart_boost.cpp b/src/common/transport/uart_boost.cpp index bcfd6f305..bcdc2601a 100755 --- a/src/common/transport/uart_boost.cpp +++ b/src/common/transport/uart_boost.cpp @@ -287,7 +287,7 @@ uint32_t UartBoost::open(const status_cb_t &status_callback, const data_cb_t &da message << "Successfully opened " << uartSettingsBoost.getPortName() << ". " << "Baud rate: " << uartSettingsBoost.getBaudRate() << ". " << "Flow control: " << flow_control_string.str() << ". " - << "Parity: " << parity_string.str() << "." << std::endl; + << "Parity: " << parity_string.str() << "."; log(SD_RPC_LOG_INFO, message.str()); From abce7974fe983c23930d362b1769e51c8fa13cbf Mon Sep 17 00:00:00 2001 From: Xavier Yin Date: Fri, 22 Feb 2019 19:26:26 +0800 Subject: [PATCH 22/32] Update CMakeLists.txt (#203) Support usage of ASIO standalone from other sources than vcpkg asio port. --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 681296d62..bf905f4c2 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -95,6 +95,7 @@ set(LIB_PLATFORM_SRC_FILES ${LIB_PLATFORM_C_SRC_FILES} ${LIB_PLATFORM_CPP_SRC_FI # Add common compiler definitions add_definitions( + -DASIO_STANDALONE -DSD_RPC_EXPORTS -DHCI_LINK_CONTROL # Adds support for Link Control packets according to the HCI standard ) From e4c2047e453251dd6786bf40c76d77a92d7737f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ken=20A=2E=20Rederg=C3=A5rd?= <64542+kenr@users.noreply.github.com> Date: Mon, 4 Mar 2019 10:00:37 +0100 Subject: [PATCH 23/32] Check if status callback returns errors (#207) --- src/sd_api_v6/ble_gap_impl.cpp | 4 +--- test/softdevice_api/testcase_issue_gh_112.cpp | 16 ++++++++++++++++ test/softdevice_api/testcase_phy_update.cpp | 16 ++++++++++++++++ test/softdevice_api/testcase_rssi.cpp | 16 ++++++++++++++++ test/softdevice_api/testcase_security.cpp | 16 ++++++++++++++++ 5 files changed, 65 insertions(+), 3 deletions(-) diff --git a/src/sd_api_v6/ble_gap_impl.cpp b/src/sd_api_v6/ble_gap_impl.cpp index c0f9c2319..f13d1c3e4 100644 --- a/src/sd_api_v6/ble_gap_impl.cpp +++ b/src/sd_api_v6/ble_gap_impl.cpp @@ -336,9 +336,7 @@ uint32_t sd_ble_gap_privacy_get(adapter_t *adapter, ble_gap_privacy_params_t *p_ return gap_encode_decode(adapter, encode_function, decode_function); } -uint32_t sd_ble_gap_adv_stop(adapter_t *adapter, uint8_t adv_handle - -) +uint32_t sd_ble_gap_adv_stop(adapter_t *adapter, uint8_t adv_handle) { encode_function_t encode_function = [&](uint8_t *buffer, uint32_t *length) -> uint32_t { return ble_gap_adv_stop_req_enc(adv_handle, buffer, length); diff --git a/test/softdevice_api/testcase_issue_gh_112.cpp b/test/softdevice_api/testcase_issue_gh_112.cpp index ff0957362..1b09cb473 100644 --- a/test/softdevice_api/testcase_issue_gh_112.cpp +++ b/test/softdevice_api/testcase_issue_gh_112.cpp @@ -532,6 +532,22 @@ TEST_CASE(CREATE_TEST_NAME_AND_TAGS(issue_gh_112, } }); + c->setStatusCallback([&](const sd_rpc_app_status_t code, const std::string &message) { + if (code == PKT_DECODE_ERROR || code == PKT_SEND_MAX_RETRIES_REACHED || + code == PKT_UNEXPECTED) + { + centralError = true; + } + }); + + p->setStatusCallback([&](const sd_rpc_app_status_t code, const std::string &message) { + if (code == PKT_DECODE_ERROR || code == PKT_SEND_MAX_RETRIES_REACHED || + code == PKT_UNEXPECTED) + { + peripheralError = true; + } + }); + // Open the adapters REQUIRE(c->open() == NRF_SUCCESS); REQUIRE(p->open() == NRF_SUCCESS); diff --git a/test/softdevice_api/testcase_phy_update.cpp b/test/softdevice_api/testcase_phy_update.cpp index f7c99c556..8842dbd32 100644 --- a/test/softdevice_api/testcase_phy_update.cpp +++ b/test/softdevice_api/testcase_phy_update.cpp @@ -275,6 +275,22 @@ TEST_CASE(CREATE_TEST_NAME_AND_TAGS(phy_update, [known_issue][PCA10056][PCA10059 } }); + c->setStatusCallback([&](const sd_rpc_app_status_t code, const std::string &message) { + if (code == PKT_DECODE_ERROR || code == PKT_SEND_MAX_RETRIES_REACHED || + code == PKT_UNEXPECTED) + { + error = true; + } + }); + + p->setStatusCallback([&](const sd_rpc_app_status_t code, const std::string &message) { + if (code == PKT_DECODE_ERROR || code == PKT_SEND_MAX_RETRIES_REACHED || + code == PKT_UNEXPECTED) + { + error = true; + } + }); + // Open the adapters REQUIRE(c->open() == NRF_SUCCESS); REQUIRE(p->open() == NRF_SUCCESS); diff --git a/test/softdevice_api/testcase_rssi.cpp b/test/softdevice_api/testcase_rssi.cpp index c9950dcfe..15be55ca5 100644 --- a/test/softdevice_api/testcase_rssi.cpp +++ b/test/softdevice_api/testcase_rssi.cpp @@ -340,6 +340,22 @@ TEST_CASE(CREATE_TEST_NAME_AND_TAGS(rssi, [PCA10028][PCA10031][PCA10040][PCA1005 } }); + c->setStatusCallback([&](const sd_rpc_app_status_t code, const std::string &message) { + if (code == PKT_DECODE_ERROR || code == PKT_SEND_MAX_RETRIES_REACHED || + code == PKT_UNEXPECTED) + { + centralError = true; + } + }); + + p->setStatusCallback([&](const sd_rpc_app_status_t code, const std::string &message) { + if (code == PKT_DECODE_ERROR || code == PKT_SEND_MAX_RETRIES_REACHED || + code == PKT_UNEXPECTED) + { + peripheralError = true; + } + }); + // Open the adapters REQUIRE(c->open() == NRF_SUCCESS); REQUIRE(p->open() == NRF_SUCCESS); diff --git a/test/softdevice_api/testcase_security.cpp b/test/softdevice_api/testcase_security.cpp index 82598c656..59d09cc3b 100644 --- a/test/softdevice_api/testcase_security.cpp +++ b/test/softdevice_api/testcase_security.cpp @@ -286,6 +286,22 @@ TEST_CASE(CREATE_TEST_NAME_AND_TAGS(security, [PCA10028][PCA10031][PCA10040][PCA } }); + c->setStatusCallback([&](const sd_rpc_app_status_t code, const std::string &message) { + if (code == PKT_DECODE_ERROR || code == PKT_SEND_MAX_RETRIES_REACHED || + code == PKT_UNEXPECTED) + { + error = true; + } + }); + + p->setStatusCallback([&](const sd_rpc_app_status_t code, const std::string &message) { + if (code == PKT_DECODE_ERROR || code == PKT_SEND_MAX_RETRIES_REACHED || + code == PKT_UNEXPECTED) + { + error = true; + } + }); + // Open the adapters REQUIRE(c->open() == NRF_SUCCESS); REQUIRE(p->open() == NRF_SUCCESS); From 180c86fb8e9db73e1ef6dea15129254ebf5d2c14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ken=20A=2E=20Rederg=C3=A5rd?= <64542+kenr@users.noreply.github.com> Date: Mon, 4 Mar 2019 15:13:54 +0100 Subject: [PATCH 24/32] Make creation of run test targets optional (#208) --- examples/CMakeLists.txt | 9 +++++ test/CMakeLists.txt | 87 ++++++++++++++++++++++++++--------------- 2 files changed, 65 insertions(+), 31 deletions(-) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 7a342798c..14fc4e227 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -18,6 +18,15 @@ function(setup_example example_directory) # Assume Linux target_link_libraries(${EXAMPLE_NAME} PRIVATE nrf_ble_driver_sd_api_v${SD_API_VER}_static "pthread") endif() + + install( + TARGETS ${EXAMPLE_NAME} + EXPORT ${PROJECT_NAME}-targets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}/examples + COMPONENT Examples + ) endforeach() endfunction(setup_example) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 537aa0ca8..f76b87772 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -6,7 +6,6 @@ endif() find_package(Catch2 CONFIG REQUIRED) include_directories ( - ../3rdparty ../include/common/sdk_compat ../include/common ../include/common/internal/transport @@ -17,28 +16,38 @@ set(TESTS_SOFTDEVICE_V3 ) set(TESTS_SOFTDEVICE_V5 ) set(TESTS_SOFTDEVICE_V6 ) -set(CONNECTIVITY_ROOT "${CMAKE_SOURCE_DIR}/hex") -find_program(NRFJPROG "nrfjprog") +function(setup_test_run) + set(CONNECTIVITY_ROOT "${CMAKE_SOURCE_DIR}/hex") + find_program(NRFJPROG "nrfjprog") -if(NOT NRFJPROG) - message(STATUS "nrfjprog not found, tests will not be ran.") -endif() - -execute_process( - COMMAND ${NRFJPROG} "--version" - OUTPUT_VARIABLE version_info - RESULT_VARIABLE result -) + if(NOT NRFJPROG) + message(STATUS "nrfjprog not found, tests will not be ran.") + endif() -message(STATUS "nrfjprog reports:\nversion:${version_info}\nexit_code:${result}\n") + execute_process( + COMMAND ${NRFJPROG} "--version" + OUTPUT_VARIABLE version_info + RESULT_VARIABLE result + ) -file(TO_NATIVE_PATH "${CONNECTIVITY_ROOT}/sd_api_v2/connectivity_${CONNECTIVITY_VERSION}_1m_with_s130_2.0.1.hex" SD_API_V2_S130_HEX) -file(TO_NATIVE_PATH "${CONNECTIVITY_ROOT}/sd_api_v3/connectivity_${CONNECTIVITY_VERSION}_1m_with_s132_3.1.0.hex" SD_API_V3_S132_HEX) -file(TO_NATIVE_PATH "${CONNECTIVITY_ROOT}/sd_api_v3/connectivity_${CONNECTIVITY_VERSION}_usb_with_s132_3.1.0.hex" SD_API_V3_S132_PCA10056_USB_HEX) -file(TO_NATIVE_PATH "${CONNECTIVITY_ROOT}/sd_api_v5/connectivity_${CONNECTIVITY_VERSION}_1m_with_s132_5.1.0.hex" SD_API_V5_S132_HEX) -file(TO_NATIVE_PATH "${CONNECTIVITY_ROOT}/sd_api_v6/connectivity_${CONNECTIVITY_VERSION}_1m_with_s132_6.1.0.hex" SD_API_V6_S132_HEX) -file(TO_NATIVE_PATH "${CONNECTIVITY_ROOT}/sd_api_v6/connectivity_${CONNECTIVITY_VERSION}_1m_with_s140_6.1.0.hex" SD_API_V6_S140_HEX) -file(TO_NATIVE_PATH "${CONNECTIVITY_ROOT}/sd_api_v6/connectivity_${CONNECTIVITY_VERSION}_usb_with_s140_6.1.0.hex" SD_API_V6_S140_PCA10056_USB_HEX) + message(STATUS "nrfjprog reports:\nversion:${version_info}\nexit_code:${result}\n") + + file(TO_NATIVE_PATH "${CONNECTIVITY_ROOT}/sd_api_v2/connectivity_${CONNECTIVITY_VERSION}_1m_with_s130_2.0.1.hex" SD_API_V2_S130_HEX) + file(TO_NATIVE_PATH "${CONNECTIVITY_ROOT}/sd_api_v3/connectivity_${CONNECTIVITY_VERSION}_1m_with_s132_3.1.0.hex" SD_API_V3_S132_HEX) + file(TO_NATIVE_PATH "${CONNECTIVITY_ROOT}/sd_api_v3/connectivity_${CONNECTIVITY_VERSION}_usb_with_s132_3.1.0.hex" SD_API_V3_S132_PCA10056_USB_HEX) + file(TO_NATIVE_PATH "${CONNECTIVITY_ROOT}/sd_api_v5/connectivity_${CONNECTIVITY_VERSION}_1m_with_s132_5.1.0.hex" SD_API_V5_S132_HEX) + file(TO_NATIVE_PATH "${CONNECTIVITY_ROOT}/sd_api_v6/connectivity_${CONNECTIVITY_VERSION}_1m_with_s132_6.1.0.hex" SD_API_V6_S132_HEX) + file(TO_NATIVE_PATH "${CONNECTIVITY_ROOT}/sd_api_v6/connectivity_${CONNECTIVITY_VERSION}_1m_with_s140_6.1.0.hex" SD_API_V6_S140_HEX) + file(TO_NATIVE_PATH "${CONNECTIVITY_ROOT}/sd_api_v6/connectivity_${CONNECTIVITY_VERSION}_usb_with_s140_6.1.0.hex" SD_API_V6_S140_PCA10056_USB_HEX) + + set(SD_API_V2_S130_HEX ${SD_API_V2_S130_HEX} PARENT_SCOPE) + set(SD_API_V3_S132_HEX ${SD_API_V3_S132_HEX} PARENT_SCOPE) + set(SD_API_V3_S132_PCA10056_USB_HEX ${SD_API_V3_S132_PCA10056_USB_HEX} PARENT_SCOPE) + set(SD_API_V5_S132_HEX ${SD_API_V5_S132_HEX} PARENT_SCOPE) + set(SD_API_V6_S132_HEX ${SD_API_V6_S132_HEX} PARENT_SCOPE) + set(SD_API_V6_S140_HEX ${SD_API_V6_S140_HEX} PARENT_SCOPE) + set(SD_API_V6_S140_PCA10056_USB_HEX ${SD_API_V6_S140_PCA10056_USB_HEX} PARENT_SCOPE) +endfunction(setup_test_run) function(parse_device_id device_id parse_error segger_sn serial_port) set(INVALID_FORMAT_MESSAGE "Device id ${device_id} is in an invalid format, must be :") @@ -60,7 +69,7 @@ function(parse_device_id device_id parse_error segger_sn serial_port) set(${segger_sn} ${DEVICE_SEGGER_SN} PARENT_SCOPE) set(${serial_port} ${DEVICE_SERIAL_PORT} PARENT_SCOPE) -endfunction() +endfunction(parse_device_id) function(add_softdevice_test target_name pca device_a device_b connfw tests_reporter tests) # Basic sanity checks @@ -100,17 +109,22 @@ function(add_softdevice_test target_name pca device_a device_b connfw tests_repo message(STATUS "TESTS: ${tests}") message(STATUS "REPORTER: ${tests_reporter}") + add_custom_command( + OUTPUT ${COMMAND_NAME} + COMMAND ${CMAKE_COMMAND} -E echo "Preparing to run test target ${target_name} with connectivity ${connfw}." + ) + add_custom_command( OUTPUT ${COMMAND_NAME} - COMMAND ${NRFJPROG} --version + APPEND COMMAND ${NRFJPROG} --version COMMAND ${CMAKE_COMMAND} -E echo "Erasing ${pca}/${DEVICE_A_SEGGER_SN}." COMMAND ${NRFJPROG} -s ${DEVICE_A_SEGGER_SN} --eraseall --log COMMAND ${CMAKE_COMMAND} -E echo "Programming ${pca}/${DEVICE_A_SEGGER_SN}." COMMAND ${NRFJPROG} -s ${DEVICE_A_SEGGER_SN} --program ${connfw} --log COMMAND ${CMAKE_COMMAND} -E echo "Resetting ${pca}/${DEVICE_A_SEGGER_SN}." COMMAND ${NRFJPROG} -s ${DEVICE_A_SEGGER_SN} --reset --log - COMMAND ${CMAKE_COMMAND} -E echo "Resetting of ${pca}/${DEVICE_B_SEGGER_SN} complete." + COMMAND ${CMAKE_COMMAND} -E echo "Resetting of ${pca}/${DEVICE_A_SEGGER_SN} complete." COMMAND ${CMAKE_COMMAND} -E echo "Erasing ${pca}/${DEVICE_B_SEGGER_SN}." COMMAND ${NRFJPROG} -s ${DEVICE_B_SEGGER_SN} --eraseall --log @@ -137,7 +151,7 @@ function(add_softdevice_test target_name pca device_a device_b connfw tests_repo foreach(integration_test IN LISTS tests) add_custom_command( OUTPUT ${COMMAND_NAME} - APPEND COMMAND ${CMAKE_COMMAND} -E echo "Running tests from $ with connectivity ${connfw}." + APPEND COMMAND ${CMAKE_COMMAND} -E echo "Running tests in $ with connectivity ${connfw}." ) add_custom_command( @@ -157,13 +171,13 @@ function(add_softdevice_test target_name pca device_a device_b connfw tests_repo --hardware-info "hex:${connfw_filename},pca:${pca},segger_sn:${DEVICE_A_SEGGER_SN},${DEVICE_B_SEGGER_SN}" --reporter ${tests_reporter} --order lex - --out "$/test-reports/${target_name}-${integration_test}.xml" || (exit 0) + --out "$/test-reports/${target_name}-${integration_test}.xml" || ${CMAKE_COMMAND} -E echo "Target ${target_name} failed." DEPENDS ${integration_test} ) endforeach() add_custom_target("${target_name}" DEPENDS ${COMMAND_NAME}) -endfunction() +endfunction(add_softdevice_test) function(add_run_test_targets) # SoftDevice API version -> SoftDevice version -> PCBA @@ -356,7 +370,7 @@ function(setup_test) file(GLOB test_util_src "util/src/*.cpp") - message(STATUS "softdevice_api_ver:${softdevice_api_ver} source_file:${source_file} source_testcases:${source_testcases} test_list:${test_list}") + #message(STATUS "softdevice_api_ver:${softdevice_api_ver} source_file:${source_file} source_testcases:${source_testcases} test_list:${test_list}") get_filename_component(test_name ${source_file} NAME_WE) set(test_name "${test_name}_v${softdevice_api_ver}") @@ -382,6 +396,15 @@ function(setup_test) else() message(STATUS "${test_name} NOT ADDED to ${test_list} since the test is a serial port loopback test.") endif() + + install( + TARGETS ${test_name} + EXPORT ${PROJECT_NAME}-targets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}/tests + COMPONENT Tests + ) endfunction(setup_test) if(TEST_ALL) @@ -393,13 +416,12 @@ if(TEST_TRANSPORT) file(GLOB transport_tests_src "transport/test_*.cpp") list(GET SD_API_VER_NUMS 0 ANY_SD_API_VERSION) - message(STATUS "Linking common code with SoftDevice API version ${ANY_SD_API_VERSION}") foreach(transport_test_src ${transport_tests_src}) # Use any SD API version for linking object files common between SD API versions setup_test(SOURCE_FILE ${transport_test_src} SOURCE_TESTCASES "" SOFTDEVICE_API_VER ${ANY_SD_API_VERSION} TEST_LIST TESTS_SOFTDEVICE_${ANY_SD_API_VERSION}) endforeach(transport_test_src) -endif(TEST_TRANSPORT) +endif() if(TEST_SOFTDEVICE_API) file(GLOB tests_src "softdevice_api/test_*.cpp") @@ -411,5 +433,8 @@ if(TEST_SOFTDEVICE_API) endforeach(test_src) endforeach(SD_API_VER) - add_run_test_targets() -endif(TEST_SOFTDEVICE_API) + if(CREATE_RUN_TEST_TARGETS) + setup_test_run() + add_run_test_targets() + endif() +endif() From c350bfc6def614ed8ef257a7707c7c153c6e73b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ken=20A=2E=20Rederg=C3=A5rd?= <64542+kenr@users.noreply.github.com> Date: Mon, 4 Mar 2019 16:00:56 +0100 Subject: [PATCH 25/32] Remove baud wiggle (#204) * Remove baud wiggle * Add IO flush on open and close, modify open/close semantics --- .../common/internal/transport/uart_boost.h | 13 +- src/common/transport/h5_transport.cpp | 2 +- src/common/transport/uart_boost.cpp | 141 ++++++++---------- test/CMakeLists.txt | 1 - 4 files changed, 71 insertions(+), 86 deletions(-) diff --git a/include/common/internal/transport/uart_boost.h b/include/common/internal/transport/uart_boost.h index 2ef2168bf..e41660a26 100755 --- a/include/common/internal/transport/uart_boost.h +++ b/include/common/internal/transport/uart_boost.h @@ -119,13 +119,16 @@ class UartBoost : public Transport UartSettingsBoost uartSettingsBoost; bool asyncWriteInProgress; - std::thread *ioServiceThread; + std::unique_ptr ioServiceThread; - asio::io_service *ioService; - asio::serial_port *serialPort; - - asio::io_service::work *workNotifier; + std::unique_ptr ioService; + std::unique_ptr serialPort; + std::unique_ptr> workNotifier; + /** + * @brief Purge RX and TX data in serial buffers. On WIN32, in addition, abort any overlapped operations + */ + void purge(); }; #endif // UART_BOOST_H diff --git a/src/common/transport/h5_transport.cpp b/src/common/transport/h5_transport.cpp index a2d538603..4678f02d0 100755 --- a/src/common/transport/h5_transport.cpp +++ b/src/common/transport/h5_transport.cpp @@ -74,7 +74,7 @@ const uint8_t PACKET_RETRANSMISSIONS = // Other constants // Duration to wait for state ACTIVE after open is called -const auto OPEN_WAIT_TIMEOUT = std::chrono::milliseconds(2000); +const auto OPEN_WAIT_TIMEOUT = std::chrono::milliseconds(3000); // Duration to wait before continuing UART communication after reset is sent to target const auto RESET_WAIT_DURATION = std::chrono::milliseconds(300); diff --git a/src/common/transport/uart_boost.cpp b/src/common/transport/uart_boost.cpp index bcdc2601a..c177a57ae 100755 --- a/src/common/transport/uart_boost.cpp +++ b/src/common/transport/uart_boost.cpp @@ -53,7 +53,11 @@ #include -constexpr uint32_t DUMMY_BAUD_RATE = 9600; +constexpr auto DELAY_BEFORE_READ_WRITE = std::chrono::milliseconds(200); + +// On Windows, some users experience a permission denied error +// if opening a UART port right after close. +constexpr auto DELAY_BEFORE_OPEN = std::chrono::milliseconds(200); UartBoost::UartBoost(const UartCommunicationParameters &communicationParameters) : Transport() @@ -61,9 +65,6 @@ UartBoost::UartBoost(const UartCommunicationParameters &communicationParameters) , asyncWriteInProgress(false) , ioServiceThread(nullptr) { - ioService = new asio::io_service(); - serialPort = new asio::serial_port(*ioService); - workNotifier = new asio::io_service::work(*ioService); } // The order of destructor invocation is important here. See: @@ -72,28 +73,9 @@ UartBoost::~UartBoost() noexcept { try { - if (serialPort != nullptr) + if (isOpen) { - delete serialPort; - } - - if (workNotifier != nullptr) - { - delete workNotifier; - } - - if (ioServiceThread != nullptr) - { - if (ioServiceThread->joinable()) - { - ioServiceThread->join(); - delete ioServiceThread; - } - } - - if (ioService != nullptr) - { - delete ioService; + close(); } } catch (std::exception &e) @@ -119,19 +101,16 @@ uint32_t UartBoost::open(const status_cb_t &status_callback, const data_cb_t &da const auto portName = uartSettingsBoost.getPortName(); + ioService = std::make_unique(); + serialPort = std::make_unique(*ioService); + workNotifier = std::make_unique>( + asio::make_work_guard(*ioService)); + try { + std::this_thread::sleep_for(DELAY_BEFORE_OPEN); serialPort->open(portName); - - // Wait a bit before making the device available since there are problems - // if data is sent right after open. - // - // Not sure if this is an OS issue or if it is an issue with the device USB stack. - // The 200ms wait time is based on testing with PCA10028, PCA10031 and PCA10040. - // All of these devices use the SEGGER OB which at the time of testing has firmware version - // "J-Link OB-SAM3U128-V2-NordicSemi compiled Jan 12 2018 16:05:20" - std::this_thread::sleep_for(std::chrono::milliseconds(200)); - + purge(); const auto flowControl = uartSettingsBoost.getBoostFlowControl(); const auto stopBits = uartSettingsBoost.getBoostStopBits(); const auto parity = uartSettingsBoost.getBoostParity(); @@ -142,45 +121,15 @@ uint32_t UartBoost::open(const status_cb_t &status_callback, const data_cb_t &da serialPort->set_option(parity); serialPort->set_option(characterSize); - // SEGGER J-LINK-OB VCOM has an issue when auto-detecting UART flow control - // The VCOM implementation keeps the detected flow-control state if the baud rate - // is the same as the previous open of UART (MDK-1005). - if (uartSettingsBoost.getBoostBaudRate().value() == DUMMY_BAUD_RATE) - { - std::stringstream message; - message << "Error setting up serial port " << uartSettingsBoost.getPortName() - << ". Baud rate requested (" << uartSettingsBoost.getBoostBaudRate().value() - << ") is the dummy baud rate to circumvent a SEGGER J-LINK-OB issue. Please " - "use a different baud rate."; - - status(IO_RESOURCES_UNAVAILABLE, message.str()); - - return NRF_ERROR_SD_RPC_SERIAL_PORT; - } - #if !defined(__APPLE__) - // Set dummy baud rate - auto baudRate = asio::serial_port::baud_rate(DUMMY_BAUD_RATE); - serialPort->set_option(baudRate); + asio::serial_port::baud_rate baudRate; // Set requested baud rate baudRate = uartSettingsBoost.getBoostBaudRate(); serialPort->set_option(baudRate); -#else - // Workaround for setting non-standard baudrate on macOS - // get underlying boost serial port handle and apply baud rate directly - - // Set dummy baud rate - auto speed = (speed_t)DUMMY_BAUD_RATE; - if (ioctl(serialPort->native_handle(), IOSSIOSPEED, &speed) < 0) - { - const auto error = std::error_code(errno, std::system_category()); - throw std::system_error(error, "Failed to set dummy baud rate (" + - std::to_string(speed) + ")"); - } - +#else // !defined(__APPLE__) // Set requested baud rate - speed = (speed_t)uartSettingsBoost.getBaudRate(); + const auto speed = (speed_t)uartSettingsBoost.getBaudRate(); if (ioctl(serialPort->native_handle(), IOSSIOSPEED, &speed) < 0) { @@ -188,6 +137,15 @@ uint32_t UartBoost::open(const status_cb_t &status_callback, const data_cb_t &da throw std::system_error(error, "Failed to set baud rate to " + std::to_string(speed)); } #endif + + // Wait a bit before making the device available since there are problems + // if data is sent right after open. + // + // Not sure if this is an OS issue or if it is an issue with the device USB stack. + // The 200ms wait time is based on testing with PCA10028, PCA10031 and PCA10040. + // All of these devices use the SEGGER OB which at the time of testing has firmware version + // "J-Link OB-SAM3U128-V2-NordicSemi compiled Jan 12 2018 16:05:20" + std::this_thread::sleep_for(DELAY_BEFORE_READ_WRITE); } catch (std::exception &ex) { @@ -208,13 +166,6 @@ uint32_t UartBoost::open(const status_cb_t &status_callback, const data_cb_t &da callbackWriteHandle = std::bind(&UartBoost::writeHandler, this, std::placeholders::_1, std::placeholders::_2); - // run execution of io_service handlers in a separate thread - if (ioServiceThread != nullptr) - { - std::cerr << "ioServiceThread already exists.... aborting." << std::endl; - std::terminate(); - } - const auto asioWorker = [&]() { try { @@ -237,7 +188,7 @@ uint32_t UartBoost::open(const status_cb_t &status_callback, const data_cb_t &da } }; - ioServiceThread = new std::thread(asioWorker); + ioServiceThread = std::make_unique(asioWorker); } catch (std::exception &ex) { @@ -307,8 +258,11 @@ uint32_t UartBoost::close() try { + serialPort->cancel(); + purge(); serialPort->close(); ioService->stop(); + workNotifier->reset(); if (ioServiceThread != nullptr) { @@ -316,11 +270,11 @@ uint32_t UartBoost::close() { ioServiceThread->join(); } - - delete ioServiceThread; - ioServiceThread = nullptr; } + serialPort.reset(); + ioService.reset(); + std::stringstream message; message << "serial port " << uartSettingsBoost.getPortName() << " closed."; log(SD_RPC_LOG_INFO, message.str()); @@ -469,3 +423,32 @@ void UartBoost::asyncWrite() const auto buffer = asio::buffer(writeBufferVector, writeBufferVector.size()); asio::async_write(*serialPort, buffer, callbackWriteHandle); } + +void UartBoost::purge() +{ +#if _WIN32 + const auto result = PurgeComm(serialPort->native_handle(), + PURGE_RXCLEAR | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_TXABORT); + if (result == 0) + { + const auto lastError = GetLastError(); + + if (lastError != ERROR_SUCCESS) + { + std::stringstream message; + message << "Error purging UART " << static_cast(lastError); + log(SD_RPC_LOG_ERROR, message.str()); + } + } +#endif + +#ifdef __unix__ + const auto result = tcflush(serialPort->native_handle(), TCIOFLUSH); + + if (result == -1) { + std::stringstream message; + message << "Error purging UART " << static_cast(result); + log(SD_RPC_LOG_ERROR, message.str()); + } +#endif +} diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index f76b87772..6c4e22ad4 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -116,7 +116,6 @@ function(add_softdevice_test target_name pca device_a device_b connfw tests_repo add_custom_command( OUTPUT ${COMMAND_NAME} - APPEND COMMAND ${NRFJPROG} --version COMMAND ${CMAKE_COMMAND} -E echo "Erasing ${pca}/${DEVICE_A_SEGGER_SN}." COMMAND ${NRFJPROG} -s ${DEVICE_A_SEGGER_SN} --eraseall --log From dbd2e9840a9c97cb09531ea19ac052a07836478f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ken=20A=2E=20Rederg=C3=A5rd?= <64542+kenr@users.noreply.github.com> Date: Mon, 4 Mar 2019 16:02:10 +0100 Subject: [PATCH 26/32] Update documentation (#209) * Update documentation related to vcpkg toolchain file * Update GNU Embedded Toolchain for Arm version number * Update Windows install instructions --- README.md | 38 +++++++++++++++++--------------------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index d5f54db66..4353ea31a 100644 --- a/README.md +++ b/README.md @@ -218,16 +218,16 @@ The following steps are needed only if you want to compile your own `connectivit $ choco install -y make ``` -2. Install `GNU Embedded Toolchain for Arm` - ```bash - $ choco install -y gcc-arm-embedded - ``` +2. Download and install `GNU Embedded Toolchain for Arm` version 7-2018q2 + Download from [this](https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads) location. + + Follow the install instructions. Set its installation path as `GCCARMEMB_TOOLCHAIN_PATH` in environment variables. - By default: + For example: ```bash - $ SET GCCARMEMB_TOOLCHAIN_PATH=C:\ProgramData\chocolatey\lib\gcc-arm-embedded\tools + $ set GCCARMEMB_TOOLCHAIN_PATH=c:\gccarmemb ``` 3. Install `Python` and `pip`, and then install `nrfutil` @@ -275,7 +275,7 @@ The following steps are needed only if you want to compile your own `connectivit The following steps are needed only if you want to compile your own `connectivity` HEX files. -1. Install `GNU Embedded Toolchain for Arm`. +1. Install `GNU Embedded Toolchain for Arm` version 7-2018q2. * Download from [here](https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads) * Extract * Set its location as `GCCARMEMB_TOOLCHAIN_PATH` in environment variables. @@ -315,7 +315,7 @@ The following steps are needed only if you want to compile your own `connectivit The following steps are needed only if you want to compile your own `connectivity` HEX files. -1. Install `GNU Embedded Toolchain for Arm` +1. Install `GNU Embedded Toolchain for Arm` version 7-2018q2. * Download from [here](https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads) * Extract * Set its location as `GCCARMEMB_TOOLCHAIN_PATH` in environment variables. @@ -350,13 +350,13 @@ The following steps are needed only if you want to compile your own `connectivit To build 32-bit version with Visual Studio 2015: ```bash - $ cmake -G "Visual Studio 14" -DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%\scripts\buildsystems\vcpkg.cmake .. + $ cmake -G "Visual Studio 14" .. ``` To build 64-bit version with Visual Studio 2015: ```bash - $ cmake -G "Visual Studio 14 Win64" -DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%\scripts\buildsystems\vcpkg.cmake .. + $ cmake -G "Visual Studio 14 Win64" .. ``` Change `-G "Visual Studio 14"` to `-G "Visual Studio 15"` if you are using Visual Studio 2017. @@ -364,13 +364,13 @@ The following steps are needed only if you want to compile your own `connectivit 3. MSBuild ```bash - $ msbuild ALL_BUILD.vcxproj + $ cmake --build . ``` - Optionally select the build configuration with the `/p:Configuration=` option. Typically `Debug`, `Release`, `MinSizeRel` and `RelWithDebInfo` are available. For example: + Optionally select the build configuration with the `--config` option. Typically `Debug`, `Release`, `MinSizeRel` and `RelWithDebInfo` are available. For example: ```bash - $ msbuild ALL_BUILD.vcxproj /p:Configuration=Debug + $ cmake --build . --config Debug ``` #### Compiling pc-ble-driver on Ubuntu Linux or macOS @@ -391,7 +391,6 @@ The following steps are needed only if you want to compile your own `connectivit ```bash $ cmake \ -G "Unix Makefiles" \ - -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake \ .. ``` @@ -403,7 +402,6 @@ The following steps are needed only if you want to compile your own `connectivit ```bash $ cmake \ -G "Unix Makefiles" \ - -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake \ -DCMAKE_BUILD_TYPE=Debug \ -DARCH=x86_32,x86_64 \ .. @@ -411,7 +409,7 @@ The following steps are needed only if you want to compile your own `connectivit 3. Make ```bash - $ make + $ cmake --build . ``` --- @@ -445,11 +443,10 @@ Follow the steps to install dependencies on a specific platform: 2. CMake ```bash - $ cd hex $ mkdir build && cd build # Modify -DCONNECTIVITY_VERSION=a.b.c - $ cmake -G "Visual Studio 14" -DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%\scripts\buildsystems\vcpkg.cmake -DCOMPILE_CONNECTIVITY=1 -DCONNECTIVITY_VERSION=1.0.0 .. + $ cmake -G "Visual Studio 14" -DCOMPILE_CONNECTIVITY=1 -DCONNECTIVITY_VERSION=1.0.0 .. ``` `COMPILE_CONNECTIVITY` is set to 1 to enable compiling connectivity firmware. @@ -460,7 +457,7 @@ Follow the steps to install dependencies on a specific platform: 3. MSBuild ```bash - $ msbuild compile_connectivity.vcxproj + $ cmake --build hex --target compile_connectivity ``` The HEX files are available in the `hex/sd_api_v` folder after compilation. They include the SoftDevice and the connectivity application. @@ -484,7 +481,6 @@ Follow the steps to install dependencies on a specific platform: # Modify -DCONNECTIVITY_VERSION=a.b.c $ cmake \ -G "Unix Makefiles" \ - -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake \ -DCOMPILE_CONNECTIVITY=1 \ -DCONNECTIVITY_VERSION=1.0.0 \ .. @@ -498,7 +494,7 @@ Follow the steps to install dependencies on a specific platform: 3. Make ```bash - $ make compile_connectivity + $ cmake --build hex --target compile_connectivity ``` The HEX files are available in the `hex/sd_api_v` folder after compilation. They include the SoftDevice and the connectivity application. From fda417151cf8342a007cc32312b69c42d5baa14a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ken=20A=2E=20Rederg=C3=A5rd?= <64542+kenr@users.noreply.github.com> Date: Mon, 4 Mar 2019 16:50:21 +0100 Subject: [PATCH 27/32] Remove test/example subdirectories, use what is provided by cmake (#212) --- examples/CMakeLists.txt | 4 +++- test/CMakeLists.txt | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 14fc4e227..72cd98cae 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -24,7 +24,7 @@ function(setup_example example_directory) EXPORT ${PROJECT_NAME}-targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}/examples + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT Examples ) endforeach() @@ -41,3 +41,5 @@ endif() setup_example(heart_rate_monitor) setup_example(heart_rate_collector) + +message(STATUS "Compiled examples are installed in directory \"${CMAKE_INSTALL_BINDIR}\"") diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 6c4e22ad4..6d65a8daa 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -401,7 +401,7 @@ function(setup_test) EXPORT ${PROJECT_NAME}-targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}/tests + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT Tests ) endfunction(setup_test) @@ -436,4 +436,6 @@ if(TEST_SOFTDEVICE_API) setup_test_run() add_run_test_targets() endif() + + message(STATUS "Compiled tests are installed in directory \"${CMAKE_INSTALL_BINDIR}\"") endif() From be0234a486e3588056a635b0cba2b361e67493e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ken=20A=2E=20Rederg=C3=A5rd?= <64542+kenr@users.noreply.github.com> Date: Mon, 4 Mar 2019 16:50:56 +0100 Subject: [PATCH 28/32] Adjust line in doc (#211) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 4353ea31a..56f38b637 100644 --- a/README.md +++ b/README.md @@ -219,6 +219,7 @@ The following steps are needed only if you want to compile your own `connectivit ``` 2. Download and install `GNU Embedded Toolchain for Arm` version 7-2018q2 + Download from [this](https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads) location. Follow the install instructions. From 66f80bdc401edb56084ad0df66c0db1f2b6fc836 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ken=20A=2E=20Rederg=C3=A5rd?= <64542+kenr@users.noreply.github.com> Date: Mon, 4 Mar 2019 16:51:31 +0100 Subject: [PATCH 29/32] Force armgcc toolchain version (#210) --- hex/cmake/util.cmake | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hex/cmake/util.cmake b/hex/cmake/util.cmake index 41753586f..343a189bf 100644 --- a/hex/cmake/util.cmake +++ b/hex/cmake/util.cmake @@ -92,10 +92,10 @@ function(nrf_configure_sdk_values SDK_VERSION SDK_DIRECTORY) return() endif() - set(ARM_GCC_TOOLCHAIN_VERSION_MIN "7.3.1") + set(ARM_GCC_TOOLCHAIN_VERSION "7.3.1") - if(GCC_VERSION VERSION_LESS "${ARM_GCC_TOOLCHAIN_VERSION_MIN}") - message(FATAL_ERROR "armgcc toolchain version is too old. Needs to be ${ARM_GCC_TOOLCHAIN_VERSION_MIN} or newer.") + if(NOT GCC_VERSION VERSION_EQUAL "${ARM_GCC_TOOLCHAIN_VERSION}") + message(FATAL_ERROR "Required armgcc toolchain version not provided. Needs to be ${ARM_GCC_TOOLCHAIN_VERSION}.") endif() set(TOOLCHAIN_PATH "${SDK_DIRECTORY}/components/toolchain/gcc") @@ -118,7 +118,7 @@ function(nrf_configure_sdk_values SDK_VERSION SDK_DIRECTORY) file(WRITE "${MAKEFILE_COMMON}.pristine" "${MAKEFILE_CONTENT}") string( - REPLACE "RM := rm -rf" "RM := \"${CMAKE_COMMAND}\" -E remove_directory" + REPLACE "RM := rm -rf" "RM := \"${CMAKE_COMMAND}\" -E remove_directory" MAKEFILE_CONTENT_NEW "${MAKEFILE_CONTENT}" ) From cb808c3fb84ad9a38d44f29827fc2bfd19ebe1a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ken=20A=2E=20Rederg=C3=A5rd?= <64542+kenr@users.noreply.github.com> Date: Mon, 4 Mar 2019 17:09:35 +0100 Subject: [PATCH 30/32] Fix/install dirs for tests examples (#213) * Remove test/example subdirectories of bin * Include GNUInstallDirs so that vars are set --- examples/CMakeLists.txt | 2 ++ test/CMakeLists.txt | 2 ++ 2 files changed, 4 insertions(+) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 72cd98cae..666d6108b 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,3 +1,5 @@ +include(GNUInstallDirs) + function(setup_example example_directory) set(EXAMPLE_NAME_BASE "${example_directory}") file(GLOB EXAMPLE_SOURCE_FILES "${example_directory}/*.c") diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 6d65a8daa..3d373c256 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,3 +1,5 @@ +include(GNUInstallDirs) + if(MSVC) add_definitions(-DPC_BLE_DRIVER_STATIC) add_definitions(-D_CRT_SECURE_NO_WARNINGS) From deaa5c53af7b63d24bf3f9243a6e2299936a6546 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ken=20A=2E=20Rederg=C3=A5rd?= <64542+kenr@users.noreply.github.com> Date: Tue, 5 Mar 2019 13:37:53 +0100 Subject: [PATCH 31/32] Feature/remove 115k2 baud rate support (#214) * Remove support for 115k2 baud rate * Remove baud rate SDK patching * Remove 115k2 baud rate from documentation * Remove reference to 115k2 baud rate in examples --- CMakeLists.txt | 2 +- README.md | 10 +++---- examples/README.md | 4 +-- examples/heart_rate_collector/main.c | 24 +++-------------- examples/heart_rate_monitor/main.c | 26 +++--------------- hex/CMakeLists.txt | 19 +++---------- hex/cmake/build_cmd_ser_config.cmake | 40 ---------------------------- hex/cmake/util.cmake | 21 ++------------- 8 files changed, 20 insertions(+), 126 deletions(-) delete mode 100644 hex/cmake/build_cmd_ser_config.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index bf905f4c2..cd8f761c6 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,7 +11,7 @@ set(NRF_BLE_DRIVER_CONNECTIVITY_DEFAULT_VERSION "0.0.0") # Add connectivity firmware building if(NOT DEFINED CONNECTIVITY_VERSION) - message(STATUS "CONNECTIVITY_VERSION not specified, using ${NRF_BLE_DRIVER_CONNECTIVITY_DEFAULT_VERSION}") + message(STATUS "CONNECTIVITY_VERSION not specified, setting it to ${NRF_BLE_DRIVER_CONNECTIVITY_DEFAULT_VERSION}") set(CONNECTIVITY_VERSION "${NRF_BLE_DRIVER_CONNECTIVITY_DEFAULT_VERSION}" CACHE STRING "" FORCE) else() set(CONNECTIVITY_VERSION "${CONNECTIVITY_VERSION}" CACHE STRING "" FORCE) diff --git a/README.md b/README.md index 56f38b637..3fc10cd42 100644 --- a/README.md +++ b/README.md @@ -62,11 +62,11 @@ To use pc-ble-driver, your Development Kit needs to have the correct firmware. T The generated libraries are compatible with the following SoftDevice API versions and nRF5x ICs: -* SoftDevice s130 API version 2: `connectivity__<115k2|1m>_with_s130_2.x.x` (nRF51 and nRF52 series ICs) -* SoftDevice s132 API version 3: `connectivity__<115k2|1m|*usb>_with_s132_3.x.x` (only for nRF52 series ICs) -* SoftDevice s132 API version 5: `connectivity__<115k2|1m|*usb>_with_s132_5.x.x` (only for nRF52 series ICs) -* SoftDevice s132 API version 6: `connectivity__<115k2|1m|*usb>_with_s132_6.x.x` (only for nRF52 series ICs) -* SoftDevice s140 API version 6: `connectivity__<115k2|1m|*usb>_with_s140_6.x.x` (only for nRF52 series ICs) +* SoftDevice s130 API version 2: `connectivity__1m_with_s130_2.x.x` (nRF51 and nRF52 series ICs) +* SoftDevice s132 API version 3: `connectivity__<1m|*usb>_with_s132_3.x.x` (only for nRF52 series ICs) +* SoftDevice s132 API version 5: `connectivity__<1m|*usb>_with_s132_5.x.x` (only for nRF52 series ICs) +* SoftDevice s132 API version 6: `connectivity__<1m|*usb>_with_s132_6.x.x` (only for nRF52 series ICs) +* SoftDevice s140 API version 6: `connectivity__<1m|*usb>_with_s140_6.x.x` (only for nRF52 series ICs) *usb) only for nRF52 series ICs with USBD peripheral diff --git a/examples/README.md b/examples/README.md index 29ff7b93a..e5a46cfd9 100644 --- a/examples/README.md +++ b/examples/README.md @@ -21,7 +21,7 @@ Where `heart_rate_monitor_v2` and `heart_rate_monitor_v3` etc are the executable Plug your nRF5 DK into your PC and [Program the connectivity firmware](/README.md#Programming-connectivity-HEX-files). -Note: the examples communicate with a baud rate of 115200 [by default](https://github.com/NordicSemiconductor/pc-ble-driver/blob/master/examples/heart_rate_monitor/main.c#L420), so make sure you program your nRF5 device with `hex/sd_api_v/connectivity__115k2_with_s_...hex` where `115k2` corresponds to the baud rate of 115200. +Note: the examples communicate with a baud rate of 1M [by default](https://github.com/NordicSemiconductor/pc-ble-driver/blob/master/examples/heart_rate_monitor/main.c#L420), so make sure you program your nRF5 device with `hex/sd_api_v/connectivity__1m_with_s_...hex` where `1m` corresponds to the baud rate of 1M. If you are on macOS or a recent version of Linux there is a known [J-Link issue](https://github.com/NordicSemiconductor/pc-ble-driver#macos-os-x) that you need to do a workaround for. @@ -39,7 +39,7 @@ And run the example: When running the `heart_rate_monitor` example you should see: > Serial port used: /dev/tty.usbmodem - > Warning: Successfully opened /dev/tty.usbmodem. Baud rate: 115200. Flow control: none. Parity: none. + > Warning: Successfully opened /dev/tty.usbmodem. Baud rate: 1M. Flow control: none. Parity: none. > Status: 6, message: Target Reset performed > Status: 7, message: Connection active diff --git a/examples/heart_rate_collector/main.c b/examples/heart_rate_collector/main.c index c76a487dc..3ee6c9c69 100644 --- a/examples/heart_rate_collector/main.c +++ b/examples/heart_rate_collector/main.c @@ -64,17 +64,16 @@ /** Definitions */ +#define DEFAULT_BAUD_RATE 1000000 /**< The baud rate to be used for serial communication with nRF5 device. */ + #ifdef _WIN32 #define DEFAULT_UART_PORT_NAME "COM1" -#define DEFAULT_BAUD_RATE 1000000 /**< The baud rate to be used for serial communication with nRF5 device. */ #endif #ifdef __APPLE__ #define DEFAULT_UART_PORT_NAME "/dev/tty.usbmodem00000" -#define DEFAULT_BAUD_RATE 115200 /* 1M baud rate is not supported on MacOS */ #endif #ifdef __linux__ #define DEFAULT_UART_PORT_NAME "/dev/ttyACM0" -#define DEFAULT_BAUD_RATE 1000000 #endif enum @@ -999,7 +998,7 @@ static void ble_evt_dispatch(adapter_t * adapter, ble_evt_t * p_ble_evt) /**@brief Function for application main entry. * * @param[in] argc Number of arguments (program expects 0 or 1 arguments). - * @param[in] argv The serial port and baud rate of the target nRF5 device (Optional). + * @param[in] argv The serial port of the target nRF5 device (Optional). */ int main(int argc, char * argv[]) { @@ -1008,23 +1007,6 @@ int main(int argc, char * argv[]) uint32_t baud_rate = DEFAULT_BAUD_RATE; uint8_t cccd_value = 0; - if (argc > 2) - { - if (strcmp(argv[2], "1000000") == 0) - { - baud_rate = 1000000; - } - else if (strcmp(argv[2], "115200") == 0) - { - baud_rate = 115200; - } - else - { - printf("Supported baud rate values are: 115200, 1000000\n"); - fflush(stdout); - } - } - if (argc > 1) { serial_port = argv[1]; diff --git a/examples/heart_rate_monitor/main.c b/examples/heart_rate_monitor/main.c index 0a18a3170..79d71e938 100644 --- a/examples/heart_rate_monitor/main.c +++ b/examples/heart_rate_monitor/main.c @@ -43,7 +43,7 @@ * This file contains the source code for a sample application using the Heart Rate service. * This service exposes heart rate data from a Heart Rate Sensor intended for fitness applications. * https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth.service.heart_rate.xml - * + * * Structure of this file * - Includes * - Definitions @@ -77,17 +77,16 @@ /** Definitions */ +#define DEFAULT_BAUD_RATE 1000000 /**< The baud rate to be used for serial communication with nRF5 device. */ + #ifdef _WIN32 #define DEFAULT_UART_PORT_NAME "COM1" -#define DEFAULT_BAUD_RATE 1000000 /**< The baud rate to be used for serial communication with nRF5 device. */ #endif #ifdef __APPLE__ #define DEFAULT_UART_PORT_NAME "/dev/tty.usbmodem00000" -#define DEFAULT_BAUD_RATE 115200 /* 1M baud rate is not supported on MacOS */ #endif #ifdef __linux__ #define DEFAULT_UART_PORT_NAME "/dev/ttyACM0" -#define DEFAULT_BAUD_RATE 1000000 #endif #define ADVERTISING_INTERVAL_40_MS 64 /**< 0.625 ms = 40 ms */ @@ -691,7 +690,7 @@ static void ble_evt_dispatch(adapter_t * adapter, ble_evt_t * p_ble_evt) /**@brief Function for application main entry. * * @param[in] argc Number of arguments (program expects 0 or 1 arguments). - * @param[in] argv The serial port and baud rate of the target nRF5 device (Optional). + * @param[in] argv The serial port of the target nRF5 device (Optional). */ int main(int argc, char * argv[]) { @@ -699,23 +698,6 @@ int main(int argc, char * argv[]) char * serial_port = DEFAULT_UART_PORT_NAME; uint32_t baud_rate = DEFAULT_BAUD_RATE; - if (argc > 2) - { - if (strcmp(argv[2], "1000000") == 0) - { - baud_rate = 1000000; - } - else if (strcmp(argv[2], "115200") == 0) - { - baud_rate = 115200; - } - else - { - printf("Supported baud rate values are: 115200, 1000000\n"); - fflush(stdout); - } - } - if (argc > 1) { serial_port = argv[1]; diff --git a/hex/CMakeLists.txt b/hex/CMakeLists.txt index 2d2fd9599..60a442aec 100644 --- a/hex/CMakeLists.txt +++ b/hex/CMakeLists.txt @@ -164,7 +164,6 @@ function(nrf_create_connectivity_compile_targets) endif() if(TRANSPORT STREQUAL "uart") - list(APPEND TRANSPORTS "115k2") list(APPEND TRANSPORTS "1m") endif() @@ -193,31 +192,19 @@ function(nrf_create_connectivity_compile_targets) else() set(COMMAND_NAME "${TARGET_NAME}_cmd") - set(SER_CONFIG_PATH) set(MAIN_PATH) - nrf_configure_sdk_affected_files(${SDK_VERSION} ${SDK_ROOT} SER_CONFIG_PATH MAIN_PATH) - - set(SER_CONFIG_IN_PATH "${SER_CONFIG_PATH}.in") - if(NOT EXISTS ${SER_CONFIG_IN_PATH}) - message(FATAL_ERROR "ser_config.h.in not found. The SDK needs to be prepared. Please delete the build folder and try again (${SDK_ROOT}).") - endif() + nrf_configure_sdk_affected_files(${SDK_VERSION} ${SDK_ROOT} MAIN_PATH) set(MAIN_IN_PATH "${MAIN_PATH}.in") if(NOT EXISTS ${MAIN_IN_PATH}) message(FATAL_ERROR "main.c.in not found. The SDK needs to be prepared. Please delete the build folder and try again (${SDK_ROOT}).") endif() - # Setup ser_config.h - add_custom_command( - OUTPUT "${COMMAND_NAME}" - COMMAND ${CMAKE_COMMAND} -DSDK_VERSION=${SDK_VERSION} -DSER_CONFIG_IN_PATH=${SER_CONFIG_IN_PATH} -DBAUD_RATE=${TRANSPORT} -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/build_cmd_ser_config.cmake - WORKING_DIRECTORY ${ARMGCC_PROJECT_DIRECTORY} - ) - # Setup main.c add_custom_command( OUTPUT "${COMMAND_NAME}" - APPEND COMMAND ${CMAKE_COMMAND} -DMAIN_IN_PATH=${MAIN_IN_PATH} -DCONNECTIVITY_VERSION=${VERSION} -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/build_cmd_main.cmake + COMMAND ${CMAKE_COMMAND} -DMAIN_IN_PATH=${MAIN_IN_PATH} -DCONNECTIVITY_VERSION=${VERSION} -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/build_cmd_main.cmake + WORKING_DIRECTORY ${ARMGCC_PROJECT_DIRECTORY} ) message(STATUS "Running make:${MAKE} in ARMGCC_PROJECT_DIRECTORY:${ARMGCC_PROJECT_DIRECTORY}") diff --git a/hex/cmake/build_cmd_ser_config.cmake b/hex/cmake/build_cmd_ser_config.cmake deleted file mode 100644 index e82b23031..000000000 --- a/hex/cmake/build_cmd_ser_config.cmake +++ /dev/null @@ -1,40 +0,0 @@ -#[[ - This script is invoked from CMakeLists in this directory during the build steps - for the connectivity firmware. -]] - -if(NOT DEFINED SDK_VERSION) - message(FATAL_ERROR "SDK_VERSION not provided.") -endif() - -if(NOT DEFINED SER_CONFIG_IN_PATH) - message(FATAL_ERROR "SER_CONFIG_IN_PATH not provided.") -endif() - -if(NOT DEFINED BAUD_RATE) - message(FATAL_ERROR "BAUD_RATE not provided.") -endif() - -if(SDK_VERSION STREQUAL "11") - if(BAUD_RATE STREQUAL "115k2") - set(SER_PHY_UART_BAUDRATE "UART_BAUDRATE_BAUDRATE_Baud115200") - elseif(BAUD_RATE STREQUAL "1m" OR BAUD_RATE STREQUAL "usb") - set(SER_PHY_UART_BAUDRATE "UART_BAUDRATE_BAUDRATE_Baud1M") - endif() -elseif(SDK_VERSION STREQUAL "15") - if(BAUD_RATE STREQUAL "115k2") - set(SER_PHY_UART_BAUDRATE_VAL "115200") - elseif(BAUD_RATE STREQUAL "1m" OR BAUD_RATE STREQUAL "usb") - set(SER_PHY_UART_BAUDRATE_VAL "1000000") - endif() -endif() - -if(NOT DEFINED SER_PHY_UART_BAUDRATE AND NOT DEFINED SER_PHY_UART_BAUDRATE_VAL) - message(FATAL_ERROR "Not able to find baud rate for SDK ${SDK_VERSION}.") -endif() - -get_filename_component(SER_CONFIG_DIR "${SER_CONFIG_IN_PATH}" DIRECTORY) -set(SER_CONFIG_PATH "${SER_CONFIG_DIR}/ser_config.h") - -#message(STATUS "Configuring ${SER_CONFIG_IN_PATH} with baud rate ${SER_PHY_UART_BAUDRATE}${SER_PHY_UART_BAUDRATE_VAL}, output file ${SER_CONFIG_PATH}") -configure_file(${SER_CONFIG_IN_PATH} ${SER_CONFIG_PATH} @ONLY) diff --git a/hex/cmake/util.cmake b/hex/cmake/util.cmake index 343a189bf..01a6500da 100644 --- a/hex/cmake/util.cmake +++ b/hex/cmake/util.cmake @@ -1,4 +1,4 @@ -function(nrf_configure_sdk_affected_files SDK_VERSION SDK_DIRECTORY SER_CONFIG_PATH MAIN_PATH) +function(nrf_configure_sdk_affected_files SDK_VERSION SDK_DIRECTORY MAIN_PATH) if(SDK_VERSION EQUAL 11) set(MAIN_PATH "${SDK_DIRECTORY}/examples/ble_central_and_peripheral/ble_connectivity/main.c" PARENT_SCOPE) elseif(SDK_VERSION EQUAL 15) @@ -7,8 +7,6 @@ function(nrf_configure_sdk_affected_files SDK_VERSION SDK_DIRECTORY SER_CONFIG_P message(FATAL_ERROR "Not able to prepare SDK with configuration values because SDK v${SDK_VERSION} is unknown.") return() endif() - - set(SER_CONFIG_PATH "${SDK_DIRECTORY}/components/serialization/common/ser_config.h" PARENT_SCOPE) endfunction() function(nrf_extract_version_number VERSION_NUMBER MAJOR MINOR PATCH) @@ -24,30 +22,15 @@ function(nrf_extract_version_number VERSION_NUMBER MAJOR MINOR PATCH) endfunction() function(nrf_configure_sdk_values SDK_VERSION SDK_DIRECTORY) - set(SER_CONFIG_PATH) set(MAIN_PATH) - nrf_configure_sdk_affected_files(${SDK_VERSION} ${SDK_DIRECTORY} SER_CONFIG_PATH MAIN_PATH) - - if(NOT EXISTS ${SER_CONFIG_PATH}) - message(FATAL_ERROR "Not able to find ser_config.h in path ${SER_CONFIG_PATH}") - endif() - + nrf_configure_sdk_affected_files(${SDK_VERSION} ${SDK_DIRECTORY} MAIN_PATH) if(NOT EXISTS ${MAIN_PATH}) message(FATAL_ERROR "Not able to find main.c in path ${SER_CONFIG_PATH}") endif() - file(READ ${SER_CONFIG_PATH} SER_CONFIG) file(READ ${MAIN_PATH} MAIN) - if(SDK_VERSION STREQUAL 11) - string(REGEX REPLACE "#define (SER_PHY_UART_BAUDRATE)(.+)UART_BAUDRATE_BAUDRATE_Baud1M\n" "#cmakedefine \\1\\2@SER_PHY_UART_BAUDRATE@\n" SER_CONFIG_IN ${SER_CONFIG}) - elseif(SDK_VERSION STREQUAL 15) - string(REGEX REPLACE "#define (SER_PHY_UART_BAUDRATE_VAL)(.+)1000000\n" "#cmakedefine \\1\\2@SER_PHY_UART_BAUDRATE_VAL@\n" SER_CONFIG_IN ${SER_CONFIG}) - endif() - - file(WRITE "${SER_CONFIG_PATH}.in" "${SER_CONFIG_IN}") - # Version number is defined the same way in supported SDKS string(REGEX REPLACE "(\\.version_major[ ]+\\=[ ]+)0xf1(,\n)" "\\1@VERSION_MAJOR@\\2" MAIN_IN "${MAIN}") string(REGEX REPLACE "(\\.version_minor[ ]+\\=[ ]+)0xf2(,\n)" "\\1@VERSION_MINOR@\\2" MAIN_IN "${MAIN_IN}") From b04c4a94d745730f696175c55a9d2e4e811b9b7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ken=20A=2E=20Rederg=C3=A5rd?= <64542+kenr@users.noreply.github.com> Date: Tue, 5 Mar 2019 13:38:32 +0100 Subject: [PATCH 32/32] Add status logging (#215) * Add status logging --- .../testcase_driver_open_close.cpp | 28 +++++++++++++++++++ test/softdevice_api/testcase_issue_gh_112.cpp | 4 +++ .../testcase_issue_stuck_in_scan_mode.cpp | 21 ++++++++++++++ test/softdevice_api/testcase_security.cpp | 4 +++ 4 files changed, 57 insertions(+) diff --git a/test/softdevice_api/testcase_driver_open_close.cpp b/test/softdevice_api/testcase_driver_open_close.cpp index ff425c853..6891766c2 100644 --- a/test/softdevice_api/testcase_driver_open_close.cpp +++ b/test/softdevice_api/testcase_driver_open_close.cpp @@ -85,6 +85,15 @@ TEST_CASE(CREATE_TEST_NAME_AND_TAGS(driver_open_close, testutil::Central, serialPort.port, env.baudRate, env.mtu, env.retransmissionInterval, env.responseTimeout); + c->setStatusCallback([&](const sd_rpc_app_status_t code, const std::string &message) { + if (code == PKT_DECODE_ERROR || code == PKT_SEND_MAX_RETRIES_REACHED || + code == PKT_UNEXPECTED) + { + NRF_LOG(c->role() << " error in status callback " << static_cast(code) + << ": " << message); + } + }); + REQUIRE(sd_rpc_log_handler_severity_filter_set(c->unwrap(), env.driverLogLevel) == NRF_SUCCESS); @@ -108,6 +117,15 @@ TEST_CASE(CREATE_TEST_NAME_AND_TAGS(driver_open_close, REQUIRE(sd_rpc_log_handler_severity_filter_set(c->unwrap(), env.driverLogLevel) == NRF_SUCCESS); + c->setStatusCallback([&](const sd_rpc_app_status_t code, const std::string &message) { + if (code == PKT_DECODE_ERROR || code == PKT_SEND_MAX_RETRIES_REACHED || + code == PKT_UNEXPECTED) + { + NRF_LOG(c->role() << " error in status callback " << static_cast(code) + << ": " << message); + } + }); + c->setGapEventCallback([&](const uint16_t eventId, const ble_gap_evt_t *gapEvent) -> bool { switch (eventId) @@ -156,6 +174,16 @@ TEST_CASE(CREATE_TEST_NAME_AND_TAGS(driver_open_close, REQUIRE(sd_rpc_log_handler_severity_filter_set(c->unwrap(), env.driverLogLevel) == NRF_SUCCESS); + c->setStatusCallback( + [&](const sd_rpc_app_status_t code, const std::string &message) { + if (code == PKT_DECODE_ERROR || code == PKT_SEND_MAX_RETRIES_REACHED || + code == PKT_UNEXPECTED) + { + NRF_LOG(c->role() << " error in status callback " << static_cast(code) + << ": " << message); + } + }); + for (uint32_t i = 0; i < numberOfIterations; i++) { NRF_LOG("Starting iteration #" << std::dec << static_cast(i + 1) << " of " diff --git a/test/softdevice_api/testcase_issue_gh_112.cpp b/test/softdevice_api/testcase_issue_gh_112.cpp index 1b09cb473..587c897a5 100644 --- a/test/softdevice_api/testcase_issue_gh_112.cpp +++ b/test/softdevice_api/testcase_issue_gh_112.cpp @@ -537,6 +537,8 @@ TEST_CASE(CREATE_TEST_NAME_AND_TAGS(issue_gh_112, code == PKT_UNEXPECTED) { centralError = true; + NRF_LOG(c->role() << " error in status callback " << static_cast(code) << ": " + << message); } }); @@ -545,6 +547,8 @@ TEST_CASE(CREATE_TEST_NAME_AND_TAGS(issue_gh_112, code == PKT_UNEXPECTED) { peripheralError = true; + NRF_LOG(p->role() << " error in status callback " << static_cast(code) << ": " + << message); } }); diff --git a/test/softdevice_api/testcase_issue_stuck_in_scan_mode.cpp b/test/softdevice_api/testcase_issue_stuck_in_scan_mode.cpp index e6b31c05a..cdc001218 100644 --- a/test/softdevice_api/testcase_issue_stuck_in_scan_mode.cpp +++ b/test/softdevice_api/testcase_issue_stuck_in_scan_mode.cpp @@ -93,6 +93,16 @@ TEST_CASE(CREATE_TEST_NAME_AND_TAGS(issue_stuck_in_scan_mode, testutil::Peripheral, peripheral.port, env.baudRate, env.mtu, env.retransmissionInterval, env.responseTimeout); + p->setStatusCallback([&](const sd_rpc_app_status_t code, const std::string &message) { + if (code == PKT_DECODE_ERROR || code == PKT_SEND_MAX_RETRIES_REACHED || + code == PKT_UNEXPECTED) + { + error = true; + NRF_LOG(p->role() << " error in status callback " << static_cast(code) << ": " + << message); + } + }); + REQUIRE(sd_rpc_log_handler_severity_filter_set(p->unwrap(), env.driverLogLevel) == NRF_SUCCESS); REQUIRE(p->open() == NRF_SUCCESS); REQUIRE(p->configure() == NRF_SUCCESS); @@ -113,6 +123,16 @@ TEST_CASE(CREATE_TEST_NAME_AND_TAGS(issue_stuck_in_scan_mode, testutil::Central, central.port, env.baudRate, env.mtu, env.retransmissionInterval, env.responseTimeout); + c->setStatusCallback([&](const sd_rpc_app_status_t code, const std::string &message) { + if (code == PKT_DECODE_ERROR || code == PKT_SEND_MAX_RETRIES_REACHED || + code == PKT_UNEXPECTED) + { + error = true; + NRF_LOG(c->role() << " error in status callback " << static_cast(code) + << ": " << message); + } + }); + NRF_LOG(c->role() << " Starting scan iteration #" << std::dec << static_cast(i) << " of " << static_cast(scanIterations)); @@ -160,6 +180,7 @@ TEST_CASE(CREATE_TEST_NAME_AND_TAGS(issue_stuck_in_scan_mode, } }); + REQUIRE(sd_rpc_log_handler_severity_filter_set(c->unwrap(), env.driverLogLevel) == NRF_SUCCESS); REQUIRE(c->open() == NRF_SUCCESS); REQUIRE(c->configure() == NRF_SUCCESS); REQUIRE(c->startScan() == NRF_SUCCESS); diff --git a/test/softdevice_api/testcase_security.cpp b/test/softdevice_api/testcase_security.cpp index 59d09cc3b..0b2bcbdec 100644 --- a/test/softdevice_api/testcase_security.cpp +++ b/test/softdevice_api/testcase_security.cpp @@ -291,6 +291,8 @@ TEST_CASE(CREATE_TEST_NAME_AND_TAGS(security, [PCA10028][PCA10031][PCA10040][PCA code == PKT_UNEXPECTED) { error = true; + NRF_LOG(c->role() << " error in status callback " << static_cast(code) + << ": " << message); } }); @@ -299,6 +301,8 @@ TEST_CASE(CREATE_TEST_NAME_AND_TAGS(security, [PCA10028][PCA10031][PCA10040][PCA code == PKT_UNEXPECTED) { error = true; + NRF_LOG(p->role() << " error in status callback " << static_cast(code) + << ": " << message); } });

znSIXYMg~!zfaTt zk=Bt-lvx~6oKj*D&(fPbEXIAU5^EgV>4FlYHxqa~1{o9}^{=-DPR})%(cN0U3J(R?sHc$PbLRBGIPgE!_X~MUJ zamPMhfU4?&VkadU!iJ&-=PT%fJv8}t66Z3aAN`J%$yp_m&#Di$dj1TkVc`Z45zvX` zt6q5UjVfF3nMt%D1X3DG(?d~R-Vza+>uAry^ zSLzWJZcSNGCEHg)x>KY99d(D*GEisdtAMv|;CXa3B}=$6v#V>p(Ua9+aA7EDq`|cU z4q|71j^itveSF1D2>yeUbwgLIf`T|=1aW$iu?JHsN)nL9#^HU-``I)&&x@9u;;Ia5 zFX@Lz814!VzuUn@I!9skm`Tl2XCFxqbZRl}q@ZP|$M`npSqr}uN%y&cyToXwHNYZ7 za9j~=B?q(gf*D>=F~8Khr1G;eaY&K$Bjg|EMgz;d1;I6w?vDEE>yJMKc8V`CYTU$ZE; zygi*D%=94bJ7z~JHk!EP3@}Y>wcpTorW1T)z9g9GMUE?KR9sVi^f37)Uwl^V0JU^>J6`7W>n zR2&Ui5%_nXFYO7e|Vbk@fIiTV7pGI#_dh6V(8M^2iGk`w~xOjhGn92)xpHa8u zRL_Q^3`Zr4yCw4zkn>t+1_AEi=$6J>_^3)tlAKo)U0=CqTGwobYr_#b2 z4tb3+G)H{#>pI5YyK)vQZw_apj-U56T;EVyP1=ujKJeBBH}I%>I5{Ofa1}!Nn7rty znkDNiz^T0r_l?ea_v1#&I`=bM7HUX=jaQW_wW;+Rz4!9nU%{zo*GHn0(Cv(aNzx;O^@mW1*pV=@-QeyC_qLw2tiLvceS0B10w3cj@-fwJNo7%fC zC^YrN?fGPt+@%rF70D@YKn0Ve2V%QOE-of;0m<6uc|YX|ZYj9CnQBdOyT6!A7Askf@40`j_o!BmvgBV#+_!IycRQo4ErQxr zK+i+^3j40tN!47V7M(qkE8oTq-I*Ru%t8-48e#$b1f-TTeR<* zT5mQd`UH60xt%>rIab8>To|}Xm!vQ+@3>}gs&8vocA<3nObx00$-MXHiQ-BZQa}^S zmY;47wH(*1h0(*U@x1OgCTd~~C8m^7m3_b=Kh|Nc<%^8mJ!ic%eEdsp+|G~pvQ!hs z>BpK4d@&oI7v1YSw+nqUg#fMOO1(>MhEk;t`?2A>W0WMc%obK2ekpa0^)QT5*)gf* z;2PLUBpG0GQPs5Kzh2#0%yPXfh@Ww`tf*D~kyCZIy?v(edbh+Ce}6496Rk$AuCy=Jox3bdm?wo{6MXDP`%`-N?T6B6V=CGQ*>F5cjH^O^RlPwmXY6x3nYw4xc;s4lZrb z+ufwut2MXrJ%(V0vx|uh&4Pe&CXbVloq_oKoh5q`J{MLftXFb!^3D=S=Kut`jHCOO zwA>x!^Nh!sqtZ{hY6#~13jW=r&i->^vm^LsJ|^h588NJ@iP)yQiJFD9U1shRIR!nZbZfwD&op|JLl7s&AJPTq!FWXfV=G1YU^FH@I4I_#q^W%B^9 zTEO{50D@l_MX_bCaDK zq`jDct>s@II-}JlU=4M{PB7PXCCI__L@F#`a>=gD#SwDfZ zfxX`!U_Gs!x7)1+K`fN@#)5!1Xx^Xtwm}+@hKWK?9=MLjcH}$e{th)HB;VC3Iuinw zfpj%f1BWET(jubzKhp5g=e4k-VEZ@1VcGr==AvsY)FOlq&iq285=?#8q{M?zTZ~ze zz*Ve2{m#7_*Ey~66I5`a@E{Zy~TD7gv>weeE%h8ga0ruU{==3D)RzLpymwI|G zDT$x!ujPss>^w3l60?ToB;H=!zQgMxJ*X&;IIvX9HAOlolO}fh73-^5QAA9=6B?l#^Dcd_?*R_b{}>p&j166m|TR}6}I*( ziAdZVf>1D{m*ci-yE9XAy!puL-F(MZ*LlgX#Pd|2nQ;q6&OKu5)uXwLe&)2Z=eF#G^U5ra9#mR(f?e8m!zM5Lm zOcUAslw#@-1-be~#R=BzjZFFc!YhMPS4oS~ilT1Vtj};oqddnM?rNWwiIvRORoyJU z4n#$~4f?ajgURX}vNn}fyE__!5$^y#otc$0Weu|895|hD;l7t{T?)`T6>VXE82wue z#|<34yZGG9QJNqKk<6EAVaYGhH8C=Rkkc%EHlg7bAx4}?cLbHW;*ci{OXIX(@n5R- zSvB?42;vk&Ix312kS}?s0RpJ9*y3F-{t#v!h8jTD04laPJuzWr?NEWq8xU?6c|FWW zTD)ksBxUZ*8vX`u2|Ahp3iI~~dV`S^t@mI8gEL#wGS$9l`ZKpXJ90 z=DA;a7hJ`t%zj}6=x~cNpvT7!RO^9)!(yhIrqcfO@LlbQ=AXVL#vj839Vo&jcP{ z0I<5iElRT^kR7$rrsRKp*ni+_;Wa>3>Ec?i7hR9iE&lqfr#Ez|1OB49e`E4K_8%!9 z__YY^JFdfAxA$+DZVUlZAovXAakUcg_A@uU7AWpv;eyx6d!U(V+l9YK!xh^yR^=*D z#X`*$u-1bcZ|XE72IP3-3XO;ceCcvXM?TUGE;jusC&D!E*=P$ zB@G<|aZCWsJ?SN#YS~i7EDwVD4Hdmv2_XGS^-NnzP~5An8~Gx`4%l_*@dWGqe#>rq zAh7|=LmvpJM9S2KS z+>}1vy!!|X+Lq<-{KfCPfTBAKrhzwt2vU-VMlg&*mc@G&ov^d!9)&ZmKW<*6?`gWv7X#8;ol+a zYl&Ekf)S1SlDrV^{k7i*sCbY=>{Hf59V%upGtV9nb61(`wJ<(TF4j&iN%RTQBjAKz zyg4sTGYDNS@_m=O@}jBDcJCOP-lI+)u>8|Ed{r;INb2Nq)ynu)8o5Y9n0Oq^458o+ zdD=pfK#QY<@Rl!M_U_z{m^*P}mWAhIob2($6cs^j)D;Yf45LP%1L7nXjIH>Z(U=vd zYD|t`#j%yI9V#%i`hC79Csh>zgzu(Qj3Ct@fRswyDR9_HJm^y}cEWNai`Jo#KvhuJ zG(!)j^|J*RgwWF5;S!622o|ug$E1HwnxY`3nhj05wjpPZ;fcD3EIOCJO8a{4$I_xQ zJ@$fE9;2CL)c9~&JU7gcv32R;oWtp60E%zc=&wS2nM!u2p=;+B*m{%b34eSx+t5&u zqCJ^S7=2ol%tj49DXKkw{5jnf6DCDxQe%C5O`v(ib))Tv`wYh+%)ip-Kn8D`lk*mK z=_j&0-j1=advcSb)AlI8amNh)l|n$EaFm^{>jUf%=QjtYW4AQyxCAsXV?+sl+T)}V z0q-N0j9B2MEw+Y%vrJhru#Q*n)U13a<9V#}hW3tJDR_|2VoHFPiAm$x zvotgr&r;oc%rWlX*;kU~{Fg31Jr;qS1$6OkEd*r2XwfS0kNa3P2r2dxDjhSR4E=Aw zFv})LzttVrH_?W%f^jRvq6s1Ouqe}>`NZXAi^44hH=4~~7-U!(bfTl7!cGz~X2$-s zn_*HY3W?N@6xf<^zUT6Sfn>oE0xqxQ^-W>HB3#0@+k-2`y}_%7McdF!WYHleW$ll3 zWf1|$U&shZDeUV}d3i~x%&}EHj4rX17E9-Q>T0Gc+7K}gn0;W$)>sx5EO9RjOE6l4 zB}dYu!y2FBe2@(XML-f0peen?%u72HoVL@@wIHUzkzzL#GnYyC0oYnc=`sLft#8h2QjSN5emm=1oSnX!dhZRVgbaNZ2{%B{}O=<3yEE37Pg>S_Fb2mz2H~eK}NuCbU=FD7vA+ zW#(RUUCCpkcs{S{*J7bm)plsR|2+6f z7dyH+c3xa(^S&)h39z^%Cls@mUK2kptSVM|o=uXRV;v1_@rAvxPVAa(LcaszLL~!G z(GZN{l7a5m-3KN>640>o5LgCczRKpZ=FKA+VEGAtOjteL@yPxMQCDO!76@eN|1qX5 zrmM8hOm`2z$b8{YZXIFLKIEtXguVBX>$Y@-OH+L6IASi_TwbDpxCpLiwD3!_|h4uV~P=8Cds(u>kwF|H-e%BEHQC*nR@dOX>|o|1-$9q zmAgHLV}lk}?e!z@r_nV)fqxyFtvmf*yH{0d+kX6~uZpVy{GKN=9SS8aW_}ZYzle&5 z=s;s`r!?);IUt=?N>5!;0hTWLf-<;VhZd*~d6Q9HW%b{hbayjVZCW@eN(tK>Plml# z>+trvuJqPX8)}+tcEhsxrz18WYf+b4LJh70S?MAhFv|Izf~&%?rK{D zv*nokhtowQ+lz;e+iDH7=#kQ?i>+GusLMA;Ew>gMrW;(*PnN-Pb%7gP8UHH zn@6f^^95u3cP_;p?%^+#a@oO&&wV_-=3=cGny=6y6w@5x`;|?(@$@UwY1ZKP``mf&oa5S6)utp5nQ=_Gt-}>&-mM1u}g zhUhD!ibUQ^pyV3e#vGbfI5+Ef#z8k@Ac&)1oe413{7f7Mfd|z4m14`I@zz*&Kg%xk zwK__pI<6(H?+xi zzP#(Wnuaw;&qUBX!djzxRh0-NFWOX-lBsqU;?y~>_CW_Z!c#n5>OiJ8^XQdKkL>aF z)+=hRp2|)b2ZzXr?#mKyB`?KI7NN)K)h{4kkNK|4lAbPbOz+b^Cwh7R7>jC+-GKy- z0LnsO8ZXOzu~Gk9K3AH2IHUCf9ti~`x;=-_IfH^-^XjhJrT@_i2gpe@|M0a(*?fwkN0dA1#v4&kb^T&Do;_zZ}$O~?QWX`*j2!Zwn_E06Z@-FjzUSR$(#Kz96 z0)L`Gu!hAs3>TZ89g9y=JtreTQ&a<{(8u0K{bLAe>^4q1*KKs?%G0LZng^S98X+h>DfsgazMH@ z4=6E$0n|6mJ|Vgh!rZH<%P-GC(p9;SvaxS%Ibg#4J9I+r?kPR4p@;`LK2CTt+{^^} zyjE8guW(Zo3JZ99sGLsp(4v-F`%k}gTV1tMNyl^Ef{5zcI{VUmYf5NF8W7g)4sLn_ zoLJZc`DJBlrnj8DvE;?PBgT(>+HU&Fa`%%)Z=znHj=i>f0b&iUvC@{bL4UID6O0{M zHI8AaUSY_WD3_>vfB7_pEbi{+rAhXxS_hNwZH-DH=aCx%6&C9%#3Ux zRvly7B-OK$0v!)p|6}pH$qc$n!b32j${yd$hNWzp{ycQh2X-pH>@Uao-rhA~ zu-S5fV}CtWbjX_hW%xVv&_C%tBBJs#nUNmb@y<2+v{OC=w(!-NuJ+E)z6a*M)TM|;6rag(-AJWd^DMW`lDgy4hZ!QtyyS~YVCOliJtC2Ob7<{OTjk8`AIJIt8Ct_ z5)$Nvq~NEYk|d_IL1M-F(3TuB4AG|i-?l$Ol~UflAY*x1i5`Ep-8JNsjX4U25!ht! z5U#36%p_^z2%2tR_xoP$o!OAIet!|mGYQ>jsT|h1Qaf!;wU(I&t;LuvIW<;Kg+IuX zhCO6Us{tFp))*~AOu<-%Y0ROPt^ytME7M>9DeFigWzR(qy(pimFgDu@*|M{OQCleD zX?W6i_RiE#1sz+NlW-0Zdf!~+|K*$%3k%XX){!SjQX->!*W1~TON$ZH?>8}mkSUE| z)Ql<(c&YYAxRA0l#}8UznI#^6zxK~{a5+HmdP1y2TiH_IGR z8Utygm~}Ut_8&Z1-b+7pcUrUC33apE8Xx|>gk((o5f;F*u0<@oniY54A{64ynCtrF zzQwjc^lH8T$3da8dJCBC|I7fKmNpxpi#v`xiJZ4JdE7Ugx=K2(wWLPeHh4nqTOoZp zq-)ZD`V$LxHryH(%?szx>)8F6?yBzmPc6pT{1veT$d&4^$`4@gN>vMVi}~k*_I7an zb%;4|L)$9_iJo6qh$WJ$f{iP!D(Ww6mPUHr7g}!{wD-PDM4aS2ox8T3uDjs=o^$=* z!{wF!>ogIyK46vuN_ZM)S^xP!&GzI=xrSKLxA;KKOAgbL#En02zG?gehd8h1CTwZh z;@u6=2l~5ucZveYLg8a*$i>Pv-W~Nq${m|=W(f~wg7DPYGD1n&`5=kRUQE61jt{GQ zg+)utGYxyq^D+UcLxw_f>y4|L4i=(3{;V#4~f_0~rVz^*!rL+P=PFMc7! z@tZZ`SDsMAzNoGyPJbp^2B%Q|FOjpZ4BKe8MbbH)lJx3Y8Pd~$5A-4Za)f}S5fMUo*3>1Ix~!Wax<4Q=oG&=qH$V@x{umy<_h^1 z^>mSj>hA{$HF=S?gC`4WlJ_Sv?tc}|;;*&uEm}}2bI?>X3<|VRbum|zL*2DN06Vuc zF)8CuVOK+8Fl5j=G?wcW&EykPW%`wXQ!(cs?}59GDdkvnhc4h&{G9sg9H+&x6dzq) z(>mY3x=f**ZxrpX-vm{#L%qfLq;uLE zcY9~U=2?2T(t;4cPS{?-4qRt+)58vI&u~hxP}>1C!DmEKRd`%khbk5?+wc47y&7*n zDrd0qNABvk%G+FASPSIup-#4Kncc~LPng$gzCyRQpBrBC!+s4wO-R9BaK<3=DU zf~oK@tD+i5mT&7~I}z}kL6!k5wtfhgEP0BO)f@{DeJn2+!Tp9r&;55O-&j2x(8X{zDffx#3cTn>Pm(*OE&(M z7j_zXm+pIUJ)!ts*bmDOrGB`{Ij_=NarHRSV9KvNJ)mq}0;>dsNU5Fxg65i&0F$U= zcw3g^did!w9?WPsS7`G0ya#qpEN>8We)q1NVOrH)xDr>H_D?))*b`ICVl6$MU|wx4 zU6h~AP>q5BT#HZDMwM!;;}-Nf*X|?vd4%lp7gj#1DlR($-RH!sGbb=9>;E5jZy6Ow zyRHr55J+%K&=A}L1a}f3!QI{6g1ZF^7J|FG(|FUk1PBlyxI=JvhpFb>@80|D@0^)4 zKWA!X@gvQmtGc?XuII9QNggTtV$^%`qvIw>(L?~i-i9@QnWitEm$CE7z6-!|fiWlU z(aZMr3RpBC3v?hNG0K`+7N)nUa&!wl$cx-ZV%drI8?ZP1(z>?{;ud!V_D$#!7CGCW zOg)rS9&>sPOYqqnr??MOpy{Zw#pzrl{?q8{^X_(QSj>>FF2PzC^M?~M*1M1r4}oXQ zXnjSTKFu1r53EtQMu2%+Jn|PAtVF01|K=Qc%1ySR{zz>qPNl#{2(@_QayxiH3Gf!o zd3{M&AiIz8Pnp92eD}=TBq?W1cxQKJD9T^tN8Y;L=vBYFS@`ZO+T-nKoqehj0nZcc zJKcB4$Iy+BcYP1Ac-n1_m>{ZIq&sZ+J}eHSErR* zGdb8_g0#DED7>UT{~^ zVhE52_+H;26B85XJ-Tvx*{)Ex&&=!@uHFjcI$X^S;iwD2bfO@qgPGBEqB?Ee{0_ay zWCc209)MF*)^j03)WhJ0vyUFqu2Z(d%|lEYg?iXvKt35_H?e9U)gWd;>?Oz$f)nmw zq83Lz%X@Flp4u+=C}0!%yi7b4rh=iFVas9Ow(Z_@cACV*E>DQ2ud2-NiE=5;o?2kHOPE^7a@~ zI#+mePn%aVU052wxe5o|lFs|~+E_`sMvVayM?m=6YOM!igI7O6xRmYHA)Nqk2Yr+^ zV#x339b3$IyYcI?)fbH%-s=hW+>U={XMI-j_;3g?m^Sfxj#|yG*tij+_Ce1Ih?`px zBmCdvNKzT~7vkh;p=sn>ors+{@`QHPC{fYktT+kn%c>=YjQyhLBIpZBrsoe%mD!`k zpJbZKPbY=>TmA<<;|qc6|G|+G4MC2(^Emx2-htOIowp0PQ&S@pm*-Kt%4}oNFh4Ea z$+D$B3KRd52G3Zf@9FutX=-Rrsr4X1nM*Awa~UwRO6kM9n-JV5QL|q@N*h^9>`|Y? zC@I3jm03{h#ZG@7o7|e%;=7SRyaWDoK|h#sVAZPTU7smcJX<(;(B~Xy)_=Dl`L~4guuM@CkVGmx_fef1F$@I6 z7InVbW@Z8{+=fC9Om6@FsQ4!uH3{~IA*FEf1$%|$YSd>JBn9S+lzcko%!4T>fv2GJ zzRHG?y^ zA|%h0cNC{%bSTRx?uETJo?oTzl1v8A3=1X?vS232wglgE{mmtyc%V3Ybi>ATZ&ZcrA4NQq6Qy^1 zEYLrGp+5coshbCC10b!apVUFqqOF!79Ca~J8n$ivFMHpz|4%1!l-xlx%-;))TAieS z3tu_WXR{|uA2g%<{jyV}EL9xLa#sk3)bKVYB9`{UB{>SFXvImZKIWIInq!JZ=4zA% zpq0lx&t*7pAHOV~e%|S6C3QD}XL`WGyFj||hLbgxI3wQwh*rCkodCJ>q?{@ok~ebm}l zrSg$!d<|ieH_NxSnhA(0?9`XZ^7F~Dq=DrILQ&A=Hcy|Qjw25IamZ5tVt|m?d)^4F zD+;-zLCzyP`mxLWa`4i9Z|fOWLs;4yP}9H#Tco$aa`6`vTDD?2<0QyEJ4afiPxU*V3MSn^=l@n zr}}^^R0#-VHQqbgSE;V=YAi*9TlNo;r-sL+shK{txF&L*jYJzfbfG@%#CD zR9qYtIPaf(g65rEU58XZJgmF(AhU8=r6a&(-W|BMfmbN-finR|S{`TnzK=Cy z8s*_N47=<&p~uIStFn}BoY1c^8$+W`X{&eqJ=g9L+iv`+eP4$QGA%>vG%zB)pgk1|kH~0DQfLa_453mmivq5Nm)LWeXb;4<;=QrJv z1`)xI>%H8YSuz2}%;NThU(k8`R|D9QteO0DUVpP5g~x%4MEPa$@(y;7-QwF%V%}v3A>l3h#fsCkwN!^r&#I?AY}Q$tA#_KP49C4U_}G&+Pbz|Z(p__#Dvpf z<@aqvH)}L17HQNk0}<**u%^T1j>7&_AcKIJnH6ZBiPOB1cI8-HcV6x}z#WbpokF#= zTi)>})TH$pSK- zbQ%rbgd_h$hn6r=%d7NdV=ox^a4bXLK?Pvv!xO)xHIm!|Qq={;+KY7EvLtLyGUD~!Foy;DRenS%Fwpb>j__ofr%=x9*) zw>p=LOQDA~q2VF38>9j|)ADc9z7Fr7H5xQsK zGs%^OAy7^bdP&$=f$~ZLoXv=Ib@m%QgO$if(YJTzbgl_)3dDzj)`>u8!Wo zzXP|^5_{iE{S4N@TTXpu-))Soz-M+m(S!9pZ?^N(+MjM%fxxS}t_Ki|B1xJ8W0~?z zJ@6i1Z@1S$ z8G>jqy&7^Ib|R^88*q=-wMtv9bNOCKLZx4CIP^Z8L41CQ5 zUz-(mFImziLYRcUzQ&)VGaoOaJ>9O%@bwEE&_tnImh{--*j2v7^Wn6xf>63yAtDRu zWmD)j@@HC;+`HAGoPkCJPi6JML5eGP{5qDczw_!2>{5YIExhF%tsb|Nm+0uuUphcA z7cAnl#D$VXghZ<|tv$mTy^h{8T>JzEzTfJCXJf$f>$Gt6LpMGHL56>s^Owvc1|2SweB(%RcwjlP<35I?ji z2Qd`$O}dTZJ8|080Jenb{z8Jm$ycFYzr?eBS~cffTwk$B0ftVFgI+f^*hB-GY`Kl9 zT5#P>m2!k<+I?l3nU9BFBo@+ZB*)VPQ3SO^ioG_5!uU&5jVWiydqIoila|aMlhxS+ zKASr`J0;~oW4RxrHwqxohcq0}R?{Fx9s7(_$fqUd3-;&-r~f+yw&|PTMrDX4F5IG; zqo}`6*h{P~P%hLa`U!O@uta0eu9K8EfgII39@~^=nXZCfGLUmO^*vRD+v&_WS6+@hC4J#wPMGir#SQsKrOV>EgFYFD&}l z=H;-;^kMg2QwqXQ{N;3Rg6*(bRhIVYG+V{ABZ1mzV*BUO)Ty$6=Veh^@|df*68ya8 z0EpD@?EVU_nzYS!-K$&d&}SVDr)AnBde?#1Ytm5uX^ozYtll|7q53fprZ-9`7f6Jxtt-?62`@NIHp7+$Ovo)POB(25n(Hhvj5{(bkZ6tC@w0(XBg1*SB?=*2(a`~|n%?yin`0r#c35qUy6W9SBLU@II<5JbF2v8*SGRUiG-NRdTiz_>F3dlSY+ zpM6{?CtimZxhZwVQj0poVM54tK+ye$`%9c!8**K?s zQYGLzg?ZR+(mW{;8{{V-Xgt183DpOlv-LWI6Dy@n=d5ul{dw(3iv)fe4Ed?Q944Kt z_|IFz$Jv7y`%^p;<(3h0Ry9sJND^i03)haVNf~%keM(+Wnm*MOW;ol?;%n&iDq&`dFk{V-HRvh}|G;CX<&KIT$l|%G!ye}NHzGq}8`MX${*%Rb>XvDa77B%AKWsZ! z$i=+JZzwG<44#Ler!c`)Dj=DyGYsHhzbdqV+wVj)!kLHM)YVG>wS|Qm5J3kcptg{H zhIo^>R^r>w9u)MzUm`RniIP@`_W1Wx5=`jD6?O)nckvr(J8iMXS)n&EEv8)!mZf}e zpBp#Ls8U?+h1u21X7}Fl?XgQM$zn-nVcYpta}_I^xUb~EY;f*cB8J~X=4rjCvHkRX ziW8ahLr5iG>0!SG(4pr|x}o}`)Cl*BEy6N|n|Q&)5WvyAGL2_Or?{$^q#PDLXT}F+ zu=Kb&!Igg3;3BHVN{iyrB^X8B(Fv(B9RdMkrczCV)|BAGn%SfD2vmTMYxuf>(^^J9 zzIWe>tR(Ww>J-j3`Q$pf-4&~grs{%+!D#>|ui1POwhXrHv{|m92?yw4?s6*}iNepf z(Klj_-iY~xxqwO6JIkTSTO!rE`3LTRF@~GsK4xu1;IyEeYBaq~%_EazTY(X!I14Qj z(qod`H~YXZidcW}e96d&4!w#c4A7VhQwCd(3$oo+jOgYMAJ6wDvE{=-SeWFk=ckOo}*K?Lk2n zlB;}4W`#0I?*{h$lB*j^aBEi$Dm=bxCfTFd!>BR)%E$NWcuD}~++>T?kBqjv zjhzrdsOLfDVzg_#Y);F{-Q(jGZ<8<~5~1#Y!BO*C&qD$X9?;@E`<`JdNx-2U4Iyyz z?&NOjA&drYmh}uP1WZL5cl7r^^CP{f#7PSi1OCLHscR^-+MXiFW7qX9U&(SlOIzUBFzv1NPVc;EXXm*Mm3M z0T#HsJ3CO>_M(Vs%lBgQg|I5_AF08sg?%Ww;pV+T9o6bkSkLY}((rp-Gu=t~tX21d za<8rTtqi+Went>@#ZbNLyk6)aC?hKrY5L(vhT>_q6u5-<)~& zH1^Hxg%r}Q3d%=~Xv;pP_8EQYkURFVU8E18t#UkN-yK~)oErGNw`bnHJ*DBwbNWI8kfqt*1bepi<5E!pwKW`*bw-qvQBui#y0(Z0de?jv}@nA(~96 zb*6n@6k~dQJ^%7a4krWTaPLcJaI^8;<*`ltk{E27u3)2<=0j}f@kcpbRO@;}mr81i z9KO2!>OP%Y=$bJ7VcRUzJ9uz#FrVPx!Q4m2J)8TT0=7`+P!`2<_%Dk{1VL5w;seG2 z9354?1=ck!)95YXo2RP z@xKt+Xx9X=cmsw=LMuOt!1(q5;>JQs%blk>@g=RX#cOq@<3Rr(gLlWbpd-(Pdf;2i zDT>Jx`oiqCq;;gGv6vT9MAWTeCjea5PIl|nVp{iV<#MIYUXIO-Ne!()T)&~UrRt)| z@S&aP!*8PzOLHD5tWycgB&tTvI(Eh5 zbOjQBI%qu}Q7n6x41I3b%s4D8;*8!{OB9m+xB274d0f z`!axC!P0*9q07K*Wcdy^-r0CArAMLlwsWF<;ytvDdvS`w|ApnF5I1*{C#?FrAIfRy1H_aM+ofj?HK}k2(Gh??y>wx|XNgRF{k0YvGT!XFHMLj-Q zirR$hoE3Yqyb`FTR(6M+>@9)EBM+Tjd@M&e7CJN$*8~pPWpUtvHV^^ATz#9(Ss!58 zV3YCGO1(0zYy_r9Tz@g=H9oh&v{=#0Jmd-5Fe6DL>_#&Zf1$%z`RWZ%h_ylUe1(^m z^F!0czRu!*kM_pP8PWbG-S&#L0klVLF+pwqFSPgbKhPed0N-NxQzdoY=WOioPd_=z zZ$gVGe;iCb)eD{uWzoSW!*{XR-3=8ATN{NtXN(#^?T+8WR=bTO$U`GEl$ z%NVv8h3pq_#Y2FmqU)g;MO2ERS-HP>xAwa;i@}z1tIGM*_`%zg9*K*3M|(*Y#-01! zVA^8J2vGzu7+kksVrzAKQL!=ECvW+GFmP+dmpW+$tY=Z3#~SB!Il{^j?2*~9Tin2! z4v;rOu|XEa{AjL-z86^MLTLmhAPG*PagbkJ>wv3H!#I?36AcGHGIuERjyDU(~y z!N+u2Jol-iT1;Ub=%{{!ypY~^E4n~~j{ZvXH5fJoO2M5Me|!8F1=kHwaLDq1;k_mY zxcZQGO>$X~hxckPi+ESlXQMQrqFRIvsHlGa9y#6ELF5&DJ$@M{>8sz9bPuAj7*8}@ zQyJptf2ZLpO?2CCAR0|AYTj{~jsXxakNGjT0zywZ`Zpn0O+dDEwihDz^ZWza(oLFYN=9B5T+w-#TC(5ch|(X zPk;HTHd2BL5oc4PCr5Yc)ojxYMkKez_5e-5Vac-wf31W593T~*(74E8jPVXH&QKe; zTPYVh6!nbDFs3rI=@{x}Z8a%FxJqZ0ASaH^Wo>nniynH(WuuZMI)m*C4QA^=&-v!& z%<}B*ZO5M7lHWqHgjIRmSCJ-fz}F?NNhd-iEjKA`KY?_ItIns(?<*MUl7ROUc~mjd zz;2uO=as&ZZFhrhEe6H7wX;1VFnjKc zN|s-bf53U~yTdhx>u~hAnZM>!x*HMF1_kyQT*(5KhV#Dm11H;;YjpNiw}^nz2kmwh z;Si$+$L8>ta4F)t!mG#a>u2IIJ-0ON!$JC&l`q=Gw`y~?w-DAYQPtd~I&~j;WXB~x zbIIlPN>gLiVOz0|viiKVid*T#rJ?b~5bo+`4bCNSTe;zO`wjtv;Aw4kxHfou-}(r4 zs=d_(+E@Yp^>hWdK!2wAoS0O%Z3rpbYG(hY!p5w_9?Z1 z>;z5|3UYCtSK|KU3tzo9u6!i^cppA)lnQQTUeVk+JL7euPjxE^NXz zELm!TX~@6;rCU%gJd9hE&@@)?;ahUh{y@Dm3oh*^lbahCC|qHF`xas+=y7Iln^K9V zIN{uOQUAl3tz)e(+K!WjYZTt)|BenLxchy?W_#zSk4p6LJk;*uT_>={)2Z37{-{i|CKDOJJ93~#!meLpft|)z5jTxxqo&$?qB_> z_}3KPxu9oHk!#>ep#ZFmRB_h&hn5r2gM)5P@UFA(`xBKl1xNp|pup`NnpKjc80346 zXmX{}gr;qRfR?sUF?AhX^Vic9hFF{pVMT^VjC>6rMkFXW=UW|p2Ahgn7O$e7Ij4qu zIita#SZ|d|rJT!hX8OLwNG|jl{s&toxj>f9=V>35WVF6s;{y~tHFLOIkG_gkGmM_) zw;8X#dXTi<3NslXJekS*j-yc(WwnW=79L-+yP(Wi_xb%c6f)_RmQa7Q);CZDy;qc2 zxnhJqUAkd7Pe@o0sj%>S_W+0i$SVoXJ{c6MW9q6?aLwZGaU$QTS$1U6#B`|eKNivr zj~MY+E3EOm5V~x3`w&9eF32$n&JO$2Bo7Z#=`WZ{lT;SZx#jNHaxi6SJ{jGQe)WDE zDn`j`kSm?;o!}*y${(R&XW-nry-?^NOX}!WBkFl+s8TXpQV+ z&7I2eB>@5UtaWy}eHfB*2=6EHqSxhlY)brKUPOnIgMG$YL8Sk5{UiY#kw#HtM#QLt zS1yUvZ@Pi3Csi`W3D>IH=y_83U1*$tvX1^nG;nITk+=2;n>F&4epAt{dJO6COkSsP zihdz{mI(tL-|-KeRL{Ku=&3of4(PI0w6w&jmez?l9YA830p=I?Z@8EfM-9Rp2WyxZ z#$2cS`}lwqPo)o=tTL5TS}g~b$7%4U60db;kb)}Pq6loDwbfjJtTMlD<15s-O<|h} zWXdQ`OrG_0NVp%}5hIBpxKa@cGNgdan7-uDrg7kux){)F?)io&fM7KQkZpRo^R3u=c}Btk79b|*@}}r zIhNj@$@rE#ht^%0CO}dP*AN#Z>E-yseS*$elb<9>nq5OR7X{4FuVzEPowQvH+;^;P zfXIkK#HrGYYEG-x4M2_@WOiw$EwpCd0=xi3$d zQ3{O}6KU?XC_CwBP7SB)lNz|e>ve1XeWP+u{u8O|t7QjSmc4ye4Nd8f)MB8KFXuWU z&+g@Q>|uUtF2GJn#x|8n3D>!&74kbBMt-EJqEB`PVG(s~C#~5oB$rJXoF~a&nk+0h z=}ys_zmTRD!~I3-Pf-|*BL5)AG(vfn35}~#Y!@2IX&Y#+#*@f0jCj)+%c!bty1*-Lh!E)I zXQNRt7YM*8&d+3xF7Jy`PQJE9N6+;Mpq901rP-C`P4vpq2M&K`DMhUHw?I!Q#?7#% zC{`qTZWY#19WU~|AQUTJPD4!x2`FfcMN^T`HiqwkkZruV7XrCGE>iq?3-P9eOPxTM zrUnWWFHMEoK?al7FM$hglf(}!{*tmf;05?>*H}yPWw&^T4tV@9^zBAtvB@ezFSK-2 zs?^2N%Ebsi1p^1RoFmQAabZogCdoeiwseEH?%+e7_kv^Q2#x~qH8AoaO6hL0-U@!v zcn*wXpp3Q638&$u&&$&MU{w$O6W@ z;Jd`$Gg;gMQ#dSL6(h%MPtG2H>f4QwYfKMBbM|UXzYxI7ivGdl1qk7mOlH`7vLJtq z$Wb>gbABG|@TTDE>)5=|XY&&r&9Qv0-oKn&`JpE!gA*Iqb^r3xq`S|dd zc7K0=xwJ+jblq>Q%U7S|mGtvL=$fS%awDW^*OE8J{JVqTY81ok@cby3?0jQ$`#c-N z zejGUai1$;dJK=^9u>Aeoqqh6Xcs5^q!j0Wq+mBsIf*$3ATiL#O)qD>2YtNWHyo(ld zPH2e*h1$YH*$kfQi$N04efF^99KlxhWB2SWdj>;?&|R0%=J{t*&p(-ipHT>| zN~c&KHawAcXnW#BPSeIeGaU&t)z*ZOX z+hI5}eQay*33{&wjB2riYNtCVCu6r8fO^VV^|dTs(Q+)3F+6luM_1Q&&r^!abtxK1 zgtXo^>i`h&)@^Q34p1+DRUNdFkgcmNK8d1G@I=upBq;eW^VmUjkj_6NDO)R+yUbVH z4NE@ZebHo+PTv^Me6djLOnn#mro`k*f! zg$N;lpM+MZw5c$T;d}Mr@QjZr&XX;9exl@WAKMnv!I|13=Xd4LSb$nN!%+LZ?KPlu znm!JhX2>`y$luQ2Z8rF+e{r1q^oPrB(kCkX1=bgQ{&>NR9S-wSXdI>M$)Lu0o-U9) z!Qj|8CU$){V^(@D^XCqzofITXD?9-FGf>rY&_f7?qH&|lwOEn!(ZPDIb&iJ9It>g* zl(4x_hK}ia-!xsH9>1M?T&octGE^0Oe z-*&w7gi)#9%i|Wmfq1U>0@s9>hsQz(8=6MZBeGLG7W@~@=r*~A*?Xw^n}zQ1wzd7U&!$E6ma86A+GT<3*vk@ESh1%&b2(n z<3iO@V2Eb>G=>mKfinc9()PT34Rf1BcdMjmu0H_j;6bZjcdXe5it^a*b`*82es%Gw zLjHAdMrV5<6YqG6$@Au|t*!V5(j3%klsC)lOCc6HG&`&TrBF5R_w0YjGHbM)ZOJc1c z!iQG+JoX_K2%MC(=uWgsxk{zMNA$xBM;gUanKcUocx?DGwOt&ae)xOJyX#h5{bNpU zW{}qF65OD~|*%mBA?HZ?376^HElVN)xK} zy8|s()AjoxAH9y*3S%H|B3N@bTa?2K3H=k1D$*=^C18NHQB_2=1nX>`RAI%dq+&c zBLR|$L6{1-!zl$SV1_uE{!?h)#B}Vzr2So68^6h0p>UQX4p%Fnw2~hx$4UZntU9jT zxQ!L?;Ru@O$BF%MugQ&sO$)@u5ZIunYsLcL=iRMOsq)V5D0k_u)kIr3=9kx<lta?qt(HBX7vEZOy$~d7GatEfD69(5J;SqXjgr8PZ=jDLHrTU1QyiO2)EI> zyz$uQEUzL-r5&jmwBxHUzqNKHko2Vl?Z}dhZNI=xw*c|CL&3?A7z8NjOOW-RrsOfWfd8Xtbi{+ z-bZej$2^u?V$k+l19HfMLgJ+8Vp5|DV>arW{@XBo=Vs&kBtt{lOoX9zX#2J}v69dR zkwAr{footmJig6G8|FvOh4=23lRWhhQYhtDjw@ZZ(#c3FLi{##u25=T&!k*tGo+Qa zux-aEzv9P(hlGLa&MT9}yZa@8FUkpEd>}=iB81;A&}0w_TF@#jSGkVED0==KZzZ+Y z3*_*ww)em(MdgH9lV#f2#A zj$P9Cr9Q0JV(*YTr>+;A9h71vsU20Uxc^p8=DgbMt6%Af7c*Mp@N>!?c}0o7PZ9dx zXrAZSy_B335ZVp023SO3Ud-@NFTefRSUfPSP6Y=KK2e}p8P%3uv$f1Mj$fWy$|HaF zby4IC4x!fR-cbEFBZLgI4Y{0&zNxm^{2W#!b2_vthv)!B*yI(_%{^4HIa}99I$o`H z{6N1OHR**?SLnguoO(GaW$2JCUH-Gd;jsb0!$sub03IIdybi}_wXkfd3}8K7SZ)C> zEn6S*4-WP@zjpVBqopVU4mEEXDzZ6YHn9VZ7y>C}u-?#Ts+KoDP9CMfyd_yft% zQ|PC!#By>^$(uX4zr6srm-w%JxA)&*O_!M(vRR~Bz`w!T0M}S;k+>MOI0IB+$z;uD z#SmOGyMHg6PWxBpn^(QYfsNsH-)7uC3VLwTx=%_PCSs z{Jz&eNr`zkTc(s_&JQZRjyuPkbyV_ou{WzyM^fW?n&WTVqQ`(3$$?7mSz_8dD~C19 zwu%^MXouvMNU^njry+6^|EIa>z{;KFtkn%W`dLX^>@<>1nvZjACt2;xbCWW3{32AL zm}t8RL~s0|84{IyTZ^=U_`*jsBu`HyiO!BDAyo89FF9i-8EO(q^Lfw6iuK`g7Tb}& zKNO-i+iU!^VaFCDIt2J@SBiV<#IJw+Y4DSUf-=3z~kFx z`M-a8Knrm4IVP+#de63NN0q%UbT1zG8jRtL`p?}5Q|zqD@w{8prH*aJo1Z?HCg|tV zJW?=zqkjpIV-h|#xS#Tw>H6qZfjNN;j;QWz{jM?`$5W*XdSOB5zu&A?8;>Ux?`rPk zTe8tJfSQ2MNY3s^1170X(Nal<`Wjnm!oR7MDLx^`D9=Hei16-+U5t$=mDc~+2mZMc z`U9w7tijY(Q|J+zfmjv7I@Z|a18)RcKitE6)An{5Dq?p*K)G0jsKRq>xYF2b-k65I z>b9vCOu+Kj5HlF|qS7y&1TmI!Pf-M>#`?mZkU}WF%JrwMs;h*k{W){z1Nif+=>7yn zq#OMia7S4wc3TKn7TzMV29O~EROPYZy$>NGm>oKJ&R$x6Kzn58gAe|n^o(_AM-IL4 z7sBnmz*ix>o%*VW1kT9@5jP-#&K9cnQbvkDIL1*PZfT z3@4QD&hDt;!M|PLpw^jdUk#Z0(~0=-hejwl^#U;YdtDuM z+?Lvk*787q>96j{eC54d zM;`q|uPJi&YoEB(GcNU~AeEuJ?d*-||EWq$QZRTK> zY$)6Lv@u+t0Y&jW08=b<^VJ5R6VXNf?vVejvgC7H?s`L$>HBc~ky)}I$)(uB2R)Fy z{lVt~H2_m};Ihmap}PdOn`&VF*TGPX{5%H?<|eduxp=hvmq^f zU^ntGNxq@!hgt)SUwd$CbDqYb@#%Hq@i+IKO|P5&e%i-(CBN^nnnB2Fp**U(%)73@ z@y;3NBC?86T@>~18+K_*Q)F124wm(Ot*d&iHB26De4(G#pg3twRTouclc0Pd5cNJm>dDsYs*uBsBKuzcl}H0ah97z_p8^q>FdHUGS*w zRkA1^0UIj(g#9@&vPhE?@1Amg<^?7Da!1ubjoAXwxgI$xp(x5!@@kSIqThOsX71fI z^yCD_@rx(}OLn)jB@Gak@2HKUmc!Ye=@Ux zAKhW5N0wmyjOl}ZSDB|M=ie?rMP1H(G=jtsQUn4qOrw+M^-$Dk1)# z4W1K6AP3QNh7v?yzs?T-fs8T=JKF->I6(VNXf^pG*E&?Q@CKMtTuztnU(Dfn8W(Z^ zIo?80r2^S<8ouEsahxybi>>1=BgNTiEd!?x@4iAT_wP5JjCn}0l|}6<96}HpV(9zG zsOOOHGXmfE4ln?wC|iaBHQDzOuLZSG#4hC27U zLk9}WN|^)AEdu(3N+_9Y{HGT&PW4{9nI1nt#D3^`+cIl$_)Z*UTkG!5 zW~$zctlL2iVHI$!<-fpHf2XQXE$cAQr9cF+StD)*9Hey#@1D67UT1}guPtPa8j3S+ zyz1Q{48szYUaqJZO`mVN$T~Q1H$<1a=eN-Xrq09;xWAcH)nt5&WmWbv8aM?C*=&N< zit@ulK4CWI3Wxa!e~vRc4-W2Xn^;Wh%dFiGzq-@!zLYceA+gaMP?KTj+02UjcZhUS zOdabLmjAof_hOPZaGLu|JujU|NzN?H8sNK=wenP5lmAG_kERdU<{XTgX4|JRM=qFL zE@t~ar#N6;AkP>q{S}a~d5QX0Izk8mT@K_BH#-Qdv7bHwR8KJW!x`*4QH_n&X2k`byA zP(HB40EIJ0f<=2vfY~td@4}f=J$5TeU(96^KZsFaq1e{UD=Ty9KG=Yw5O!Tw zQou`=;{wS4gWABOAw>w6*@qSlw0)leTQN;KRYyRq5PYdYkqELOcYOILm?{4=j4cVw$*EA4c>*TD4=(#crnvuKF?k;ha@ThPcFwh})x#ya z-`V&iPyK$w{N7k+y)E3Rd*>!)mju1DZg<$k`{Z`%(I+3{DTDg|!0PQ2k`QEuWxM{i zei^1vcm0(psG=zT<4a150P&cxjj*0k3zt@*>QU_+=jr^|yVsa#qw5^z4@vT_bhKeD zTrsnR?X!~0m2?q6=$tffy^dL`2>6(ZZw=8fg?Ldf0Z%I4Dv}i`}qwj4DQ9N%MwE-7ih1H5QPcL zAgdcx!skR1VEfam=vG=T<%5B6YwsWb+}`T`@9%WThha50 zZ)Nn~py8QG3?+N%p;oyOr3H?A_y9{u-NPIO)E5GS+#=$XW9B^@p@G(z1b)m%>@ay!h?By zqSio`1@cf^F^+?93b*Ay9rjaY}5WPDA6QOlYO~f5ttVVt17nIggj?8x~n)1}d0{>egZ&y+? zs(AHKNiO+j`kk2kq&0Si0QdGkSUmaXKWA=GSa&lr&);*(L(qh+%r{Sr;{sz7D!hO& zNJhW zid5PrmsHj1D4963ne_&exeITXj*2N!QKp0vyU!5ak=tw4smV8kOYZ=;V7%anB%Su3 zg?iNzKD9I8L0mot8Ay8g?r6$ntGz$PQDdvef`lqS8~;L9eUB{>*@DRPNQH!0c|IU! zg@}sl*>Kcp;7ol4KW)`u6izlEhhvL|200H##t38hf&5B*8UUBa!1&|4KnTE8tt`)z zAtGC~($pkS$D&iQA3(&XK5yCrC55O2uPv=il=snT(6>z1)illK)JP7C=qh);t3@h( zm3#5eF*r0cjgQB{B5$rKXPR9L$2Fviv(Mwi=!zt*N@f7*WZWXR_-YTbckgQ3kI?&l z_cVcHX;PEn#)~g;b*{j^t4kyg<`;Z;IE(3ggz#M9_u zYzF07BqAKsz}eQfj012BDET!NmD zY-^Byq=V0e6Ag_S7A$fodh^`$+(%(5vASc}AVQgM4?~-(zNiuy=JHw5C3lK-cw~>! z6y_^*n2S(&X-#8p6L(-9wrBk5@4}IKs|z0g7jVx{&fOFD7j&SHad+O{(JRCYtLkO! z-SaZOIco5ti**ja6m#4Dbp64*CVfB=E|RelP@cT)IrEWYLFt^Wz4marzOldlzk2)X zxTyBMT>}AWL}`#vxx%Poj;k^{7@4VA=s?LEUIVD8BL@gtE>V)H8lryr>p&`l_r+c zHL4X2G0fV%ujwC1)@j>Pru0;Tw|^UpxL~bazEfwR9AkbiSeLg~P4jV(i1Y<=tZhNa zI7$?MD`kLWa-QMmRX5o0Dc;3b_?j!Tvmfi}#Njjs7;_ohLmlzayoQ#9B5-J+p6Uf= z8z@r|tlE$Vc`r`2O2Dky;<4}ioklBJy1v_*THm&)i-*(~@-z8yUj*RMER5kKo!Vc@ zPkeJ23Cat*h}a!OVLoxk|5yDfld2*eh(~|Nz%G*MOE|CpzcX*p*c4LOaQ3N`w0zJ? z0Jo6J8+YfGj+o=6fQXHiyuMk+HY==Ypr>};Pv^3nW^l>N{_?!o!$-0QMe?c7LdnCG z71{@P$J)zZJd6}o!7m9A!{=RnqCNtQiYk(Ns+y>)H!+Sc4e)wu+b9*{#0+kskli2R zLHlDmV~IHDIsmG+9Jbm^e;)*ccRt~6II>`iNUO%AvCi@zhTP;gf(|9 zk1SN^wx*}Mf74Da9L@4Ruc+erqoS!ekM0Mu82t=X9rLHV9IviaqV%n$x-Kj2lcWOo zvqMw^9WVEmyTV*Y=2DI?fTWIl)u|p2jzy=;@~4scudp6{egY@m@Ts2B$4C-*WsWp` zj)Qef;B%XiPrSQwK!FEtOOJR++UR3EzL!J_3!UF}4r2CD2>{h$ytZ%c`m)w-O#$jI z2fft6I#}fI??i~*E~!e3rj*~e4Ijh8)=hJ{QwXm`G0@x|ufKM8w!|dj312$DdS)zr z*UK)g)q!2cw@_<QId4A($VjIVlI3fEvu zBr_;+7dQQmotZOht+Y8LSt zgZN?FCBK9QR=sWRd^F>?l!AthSJMu)62ip)IEaaL?PVVi@!~! z*1OUac;D*IX2^~N!LMYKhN{SOix$g961^defhT<}NWIWgW|mjijqHb~vquawDGrU^6d%xm@mzH3sy@#V#(y-6O(BzOlbm*z6A+Cudp;)o z=7=c1GP)JvyUAa!j8{k}94;gQrvoh~?ZPg}19)?f?~l6_Z&~n;!lzT)+nxJ3~}l=fAl1i42ysguk|>I~*e>z03_3wC|$vY8rXl$^i-2QrBx_gMVuR zv1Lj?1aie16W#invvs1jkzr%}Juo;7zwyI^*<<%A^<2Tny1S|blQWq=nMz`k*ssqI z)*_DgOW@(sfKkLqaX^TkI=WA%Hk_5WoW6g`7%h~=#v4HMO&ItesR36wlh>3r@bV!q z1rHQ>Y#y?vm`2(5^CA-j&2E=u^Dq^Qnq!u9!vuLs92^RfPczDuK{*t%-&@`YsQ<{0 z;e%OoDg%`wrQZ0D)gEjwb?*^b48S^|4*`I@cf9yo8%HpHp)#-t$M_ZaHss7+!PqMv zgi9mE#6Vh@n=8p?CRQ%$4}zF`tvD>c0g7ZZsL>uF>=o<#a(xNr(jK`bCB9gr#kHoY z=bR0!ru-5ltxjSMcsRrt3@7|! zu>)k@nb+NU)bCNvowv2v+hOdrakvZLNf%?JfHbr(1EZ?*#27*fpGB8SAcM11{!N$c zrbdtKtkuHaWTupG)C^BI!`A~zc1V!z&n?M{5!q<#@(|UuJ-=c>9x!D>A_9y$jKhn& zW;~28=M{?#52<4BSW%IBeO<}?iOnzQh4F^(gETtRC-_2wvR302C4`y0O$Q7g1%kq$ z+IK)lHM%ut5jXdC-;%;Sg>;5$`D0?^A6a*PD*Jj$>hdFyQ?bt;uyv&lF^9Aoz$H~G z8&Gr(NJE>_O;!reafTlZ*ViWru-uW)e(&6Hbl$%u(MvWL?B$_JERD>+6G|;Nz`9)k z;Q^dsW07$9hYfiuVTRjHSRWRdJe3@fO^=U1G|xnj7V%V_onl^(xjpA#(hKU~Xh8qC zpm0!>^oJL~#;e?i7G`E<%s-8YoI(jmgd_OI5;>E*Lxd2!3~gI8*tK);dXn#goEbwa z6Z|nkloIW3_i|<8K%BRk2Gu<6+ZqQ{ZUJWK*>O}}*JxBT%`G~_>1)J@fIenZW|Hm| zAj~mq*J!)#_i!cZJr;5!&iw@{+=8xAB?ihL5&Pt2sYI z>f2yULSQ|LE#KJJqoGRBl#z(bhJ7iuhY`Wo?q(H{#|5?ceIGQeKKcE3a_>-0T^5lw zFlN|^kq4Qa-m@OoqdR)8rwl94*_wC)y(G1)z5svTUMD~{9K9)|w!K7Ywp(;3b6k0oIh^ZooL`rCTI*9cb^f{_mLe72fj{#ZS7Z+@>bahkjz zS&J0XRKlnC^A@#{Glc#2W^%0@yTybTYPL_+f!3MG`C#72X#})c!|j7Eky;^V_@#;q zy;=(_=%8N3jJUQ4FI{WxAU$AjZ@kjh6^EyuX<}!k(eZ=5-NpPo-F3;pIndI}0`eoi zm|wYVn$2`ka+(VO^Pp0nX4c&w0+$R&WhHhO>qkY5!V6AOG*dI5cI*#^4nMhZflK3* z-N-t=OE52F-ArO3t&tPGlU*Eo;ou(NdVJL?9E7QX)+BfF2X*ine}qe_R7VK&_VCpxe251eABo?zOJ&O-gB}``Nz5t93qBFCe9O22bI3 zU65vc_B8jG$RdYjyN%MnfBqRB!&Ol(MkN2C(5FXuxA%5$2M*joxMfa?H@c1QL6>h2 zAwzGjJ%t%xA+~B39J>Yh)bg#Dmc)`FVEjxPbQ$fP;1~+#6@aWqWjYpI6bFSmeziQ` zj#H8t67~)ipdwP&+~FSM+O}^Sg0*$a=_`f@)eG3zTE=}L*@fZgFYJjx#hhiRPo^H9 ze;8h0c7G*C;|ezitSx{TPNM8(wP#C$6qteZ0gQjShhu~&a7aP^EVA)4sAyRj`ARi1 z-+*t0a_&##HPAM@hEqHaT3iHwtE=|$w8K>*;JsA-j4YaET4Q<)Bp-cI0J zDGqqn^yeUT_*er`D<+Zce48l?&D1B|hSfRSy-#_!mEmA`pM0^bqg5&OT>K!(dWJp2 zf3oSbFu(Byk7ZmHiS?d%Bado3bhUSlBhph@Iq&_|@g}2Xgk<4CrLB>?M_KuT3@#FN zSuZ0PgL|J87B=!~?wyf)(;uX(s~Ss&hw=#yHizf z4`$*5S<+&6WKjjqid*B^W%y|0gNx}Vhv23j=^=+3W@I2ibe9{67FU2*%AX%KZ&&H! z*e&P#+C~mcdbIq-suznWzNnQ=*4pKA<*?oNZ-sWk%d&J7`c9kFm>~AZu~X*vd>An| zMf&`N44u*?wrF&}L#@yzq;dLNcO0Xfls_RP!%+2Jebec^ z##k9W943RqJi-^Lm6~&TC1qF~9*+`T?XybqTzi|cD~hIW*V_K(3RIe=mi1`n=vGS4 zwyLpGAuYDApz(~CWlDE~uDH zp&i(2@C9PI)2CfR8Yv(8zAF_?l=^<|y?KtoVf$^|R^y6^I_jGum$YH%h4c=e^b4d! z1@*YxM_^pc1(V4b?%{@Q!U(FwNG@WLYW+Q#^37PoRtUQ}pBj z@y$6Pilb(?@P_c~7gW?%eN>c;YZEp{$kelFQzcSW5UG`I=lo_(a9;k|IM15BA4x7G*s7z(gp2w!CaF3H^hQpy7hdsWOCB76?KnMoBfWd-y!ALvhWqqrG z65s_C8X|f0HijTks!>xjD8}}6?_GmE7wn0$2T^wW0eNWHx%xpx;_iHe=@$^E+m3_` z!{xqjvMtyjh#+UNTTJ%#D^}gjv*mJv7D)F5pIj#I&4yq@TYe^N+q++6e(Gjsy;h(2 zra;p^zq4<{u2SdcC;4{a@*)1<6yk~)U=*u9qqQ`CZtCyX;bQ)b?ACx%9?cQ1AM`Rf z4^&r)1%6k{Q!B*~i59UsRvjkBQ>B3VsxCv46IA*6RlGq0pPsx>2jPcwL(Q=9T}n_M znmY0mX|nZX{yW3<#|=XcEu!?sII5rcCHHd2QVMjWqkm}T`b3@vyR5R&I^w3MfmwG* zsjXti2jjAWYy9eU6Y5?5Y}1TJwQ%E~HAWyfRV-w?U{$%Pi~n@4)EgyN9)i1L>l>nD zSH1N)_Ea?#J_^pNA(Likiyx0B?S5DHwcF9!V5U)mV6YfenZSmvSRdDVfsml91On$1 zCEn1zl2NJiVdff8g8ovJ#h|kwV|RJ=K4SKa-~HD4dVA0vK2BM0`4fz1lp+kdL@|^e zo40%KWM9Ds{sfnjO^cHScOstcAgiWzOd;}c*d>jOykEg>hwXovloQa`B({nq z3RE-N%30wvjo5HXhFE>r%P(g9LS2?3%XYqIIPqRk(rybJhivkuh62Sj_Y?y%=(wDFk=R{ls9;|y#TB`d{&Xm=CyWpnL3%IVKBL+H~Q(<1nylM-j(-4FUj}!m)(;EUH9DT&cLJN?%}9* z$oD2$?DQdtsklWOhG86=QOYRsZ$PgedWq)d6h}d8bHgr{NM=-E2BU}Tvto7?@rr!F zZAfZ;xo~ud9@w)k#67b58cll^VAF9*d#kT-v!6BzT+znzj_uBd#%VcnFyVNyps~c= zMM46`or-kNTkZVIC8~ZGa!tED<*Io&*o_xdO^X@4t%Bq7ksfaBcAT*g#rd6I1jatT zWP>)htgHwrr(&H~Sz5*< z%FxC}6TmG>XXG2Ia}V&tB$N-{Ho6nB;BJ=zP*tuL^2-idR`fM1Nx zR)@8xSPvJGxg|N8SQ^Z=R#)wO2xC4wbSl{WSaU2IcF%>(#hhP0X`qb$sYvQ}u`98& z>vifPc)hn2aNK2CcbZ|d39N2jcxS)nUaY9hz1*uE4#EPR*e<8@ms8<~g&UVeIa{z{ zJIDi=TZp!l8{R!DrxqUXkMEsbyJ-~W=Z-q(x4q>`yhEo9VUUp5OF3e)zjy+Z<^dFN z$-#$X%9oFIb(BvCXAnEdM#!693S8O|7TaH}$zav1mp=sWL&JP1BazADQ3ZD5Tk?urf*Wa{;Zqi;%*(nInC z8tMJ|;{O$DzA&G<^Cuz>-2yoIDbd(}g~_K0QVS%nF$T#R^ut{}$-JZ1`OGv`sX$bE z(#i3bF80UA|Ov z+K8zA(V{+w0~@y+kj$RFc7+^ogM?SegPR|7mI&6#QPOP^$226NZ{-pw5};c^EPMb zoPBbBw=M56;4AOyedRQjhc0|S;~w4uc-8L@zEbbudesvP)9qjxP!K5+7)gICfD*)B z29}b}t1Ui3FyM!%IWD;7eA^7|6A=bLX~voi_ALF~fYR-i*;4Uk$WLxA&T{H!A1q#w zl8_j<`^_SyTjv)S!zn}UAUb%ljI}zJkI)sX_|QhcT9~D9Qtc9i?S7Ja3qU%7#eOc^ z{MJ_Twn>kDO|Tk!?v<2KBnSjx`KJ`3;pABAWQk0dyx*DettE#}6-^yj1O@fz0in}O6 zw&4lLX%6r!f869x|2Fqty|IxeByWuvjxX=MJw9kJrzr@3k>w|t?LIMsmk=9~o=-k9 z@0|Y4naY5dbWBNJeT(7f5vL8Ci3aG95r($pPo$7xJ&Mt>1J7T9 z$TX_94X#qlFfN~F`&th05SlxSDnVtF?)aL-=0(oTfTNr>Tzv*3H;3Ax` z(yf;H0?s;8YpZtK*ZGS}tk?OZJPSeuC2?Myff@uEY`xilLX`N8LLAZUFzmOq`EXcL zZEC4#7X5kdmuu=aG%<7>VQ2ahT8ebGg$>{B4C1(rL$4M41>Drfys=d1f4cU5CPmRk zP+(<$1J6>kt0P-)CbI(^DWA4YQ1T0!;361pNAn0yp_xM`)nOC8=`GV&O2^1_KRQCg z@~sJS_*LzzztCyRLkn11VSqvGk)gpc6hmLYeB-b$Za|-dqGw4hztLO-$7x9e^j7BOvyJmHA*)az%9) zlAOuPv{|Z^+qm7Y2qs0hAL}@y2hJ7^nnW*4vt-gq`$z~f;{?()L#9%5%uMq5uw_Z2 zBm3G0Fw&da>8}KZcKVzjs$4_4we!6kM^EY9L`ikA4SV+cR-9c;iQhO% z-%le+gKrG%v^zad1kd4<0(ea_^w|T^p zA6!q^?&tUI`(_seyQJv0F`3Z&?7WE|^Yb~}Dt~hB^?$$;O5Cu7Y9J;p^DY;Fd0|nc z?fFt@1mEbhCQhV~p1J_EpRaND7~AD7 z9dq7_(w=_ji*N}}A38`r*Zs|6=tcu9hT@*P3;PH$LGcL&ipd~(k;yu6^lBE2EGF-z z!bNJktW1#7@b2Jn*2lo$m{+*Hn)9OZ2`i~5Rs?~SQ{0l=dW^&Z8!K}2tq2|v_kS1e z&7*dNkKJgFs~dgo?$QfU+7K0GssGGUnH5|l%lR0L7nD&ObiYT2X*u$L%N4@;!O!FW zl^;Z;(ejJBw0BaiA*pk|SVX4Lsu;|1j}m^MT<4oD2nS><9|sUe5kLBez04T&5Ud7k zjt#7lvbIA}r`4k=KSkU3yF?ge$gv zGk1PaY?g*$2@RH98EM=Mut+^{8fyERM`(XU2yRzoei{p_LA5l8Qkl$}kuiO}c^mQV zr?&lWLYTd&)g=pfc*>{AQPY^7$oZPUfvLZLtfzghMOvh@G5%<*&}mzWglv1wsHh;Z zY(cp^1ahBnG)HvpiqoY&H8Y>B*CU3R*2&vJbCU25hi}X=-R3i~#cU+%xFR)?@6anR98#%(Ry6W>uZF%S(4n(f-+rsl46-OT$4clPR8P z9}+1z@q2MnQC+>^vOWXP6t|??V|%`|a!Z`Q5(K0m5Siq-#M@eUSPwktHeLprM$%KE z#EZNj1s0k6Y7{sFVhq!ohJEMuoa@|bM)3!sJ9l--s|dZSzzqoR-qSGq2U$0aAo~9w zM$oG2KV<}`8n|gFxNE!HhB%noW{-9wBJ7vOoZXY>&oqPy1_?`&2edKDTT;65VJY@n zb5>U7(SwPog$mvS;7q7V76g@+gMdS&SLx1rQaB>qX6x(k`I+4-$tf(9uya=Q_Qxh` zvwXV$ju|xkSIl6fcxr29M*@5NN1%Kr&T!peIG$&(_MB-Otl)mbD)kK8i`7+|S19P3 zXG+5kiR^n$SLcakhl#9-c6R_W3v0cL8467P&;?1y^@EP1$nIuWn0=p&%){KNhkXp> z-Zh-#W2Of`{qn!oXdjax-9j>ZBn`uI5pn-q#?8yqaYd@9e$Ydo@PcYGrOJl&H+U8; zSiUVyS9oMM*#QLJj3HFG(Xh=f?NFY3Y&@BT57ks1S431!uqJ7#l*&8T5^EMakY@i8fFZtbP7(hz$R4mD7 z#DV_Gxn6PT;BXj{u|c#xBL=$ubO0bs&p3`>QPMf^Jg#4Zc|L8wkQDQl4!K+uhIcyG z;$nZF_^23Z^7wI@&QA>XBPT)C04Nh*o#1%Jy$SG)-}?JA{x2*k?|>q2tof&dJS8$` zp>+#9y~4cxl6Un$OLh;UtGaCGmmYdi1Ycj@AhW=MMAW@?p5LOw)AjX?*ZC4us@2c6 z(x;=y8&{5+#^jA-_v@QaZC#&%=rGfZsdd<+X>H3W(Lhxg<~1F;bSaQNPOY#0(^@vxYTLYcr12Yx z;~N4JqL_1|)bHDG4{6`uH`d4)KRUX)c(wt)H*Gn8XM=w-y#J3~({;rHjNr)Ga(>?{ z9FHKW2I=ZMsB7i`L8!8*4z=3}Egd`IpCEGeT5Tq^R{A}rH1A&{{09`FQwK$Cm3n7Y zTTW~c!5W`=OthX!2@shuH^_%q-$A^0Kdv?yPhWTzjx>18^_qqLoW>^;f>}qUomuiT?y?hbYVea9M1YZfHXr@T#DBvL#t;Q!$T)$_ z(yVV)s_uGmlvp~*GqiS9QLT8e#SPLAV+d1nDR9+~bz(J2jo_Odl&8vd&Sc<)W;V*Z zIwPmAb5er44oKWgtc-O82Ry6{A)fR!!K|?<>4&zQEkAn27m0FD^}^N70PO-%*e&|`I(FFupT*0Z<#o%$Jj>l|MmR1Jln9wm7nqK>-Od(Sb7(K5iifNfb{zk^}E_1ScO7z7>z=Ju3Vecv=6T{-zu zeY{CofaiNfWA`ugj@Ogo61f(cNn{AmKmk(~4~f`dk3O&DXn3Ebti!gp zkCU6%QF$De^_FX*w43jll~AYiHb2z7(#czi8gCb=loZ2 zO9m^~`BbHm)`$`O(iz#5ii|s&7_d8B(u)Xe7J}=&Pm=Yrl47e#vp7&lD1%bPb$<fi->q z6DpAS07VMOqH$49j)^e2&W7)|fNg2%Gh9S39Xj{PFEID=8pO}Ciwff{Sw*bE`S zW(YKI6ZTs^K?pRq@)L@2Q~mk9WLe`{igC-k#hOcwH>&mM{>WCX=0g6cdUEjY_K^S; zy1La5TLB>7>BpG0(Jd0Fx@*rIO|zd$!;#*B{F?n&!EO7HWa8Um+f7gz8c6h<1~*@P`6=-dAm zWHdfmKDx2eti1px!(qONj|?-B@NprtdHVX=r-O-PZsiuV0JEA?0#zL7)_6|STmhOp zA)1hxe5hH(*pYLM+UaAR=6atf^Bmq(xI`T~T(Sji%h=l_mbw9=`l`Y2!XKgb`)?RJge z7WQw&a{epe3vmi@2TyJ@Da`+jr|T|{)OU81Ym14Wau#k>as0U$M?`>_Z@Xmf_*{wRh{P78P+-=Fj zl-)|CogCWJDkeB}=hhvfvk#K$JNio(wwvsvmkE#SD=NT&u9e6*WIen;PUQz%n9wKeVA1#aLGO zVhzsyCW~e9{Z^d#@vY?CZ{jw*IPtaLqexNw((x7wG?EYD!?y0ppg1wxY!Iy~`evqE zmCk^dN=>!2wfo}*KBBTDJ>T(V{;_ip6+fn%)eiy&Q)A zobYa$-QK=?*@ce^(9=HXE4Iy$2t><}VmGcCSRALZ@+!<5av4$hgqJ7D})hF{KtXKub+lFxyH5H+No`BRa=ljfFpd`s96os6fyvPa?$2 zYucXqDSIPPnVaU>BHjB!rN*?r5~aVBf#kOU+#Jc$BF+#-;KJ+f^|v}=5TWsJVw27# zHC6JdFhTxYJtxH`s7iZq(s44C7n8V`pNF@Wk^I`_jak>lLkoPT~cbmPlpLulJYwbNqYwSKoD z#stfIgV;{1Y(Y5-WI#sVFGW=kcp5KO-_t+bx1C+9n5Rnhsrfjl3T7u_h*RTy3>zR_ zEx&PX72~5&jacazhL9bZ^W`icv`L1Ex79Z&oDnBjbT0)g&`<^xuVxjQuubgyr*gTE zQi6hNk8PVIhKAo6G9V>8o2kPpOUGa{>(jh{cNKOXfhI-1^|S2p`v&s)-*ql-qgYOV zH#c~62U{Np6VJ9bu#R^x%95QkUmHP)Lu3stu(tq4jXCaUQNZ+0(esIW@DFh--sy@h zit`t^wkkU~#i#nPsSo*P4@(iZxA%k%YgkQ zDK!Rnd4ms5I0|L`h#83tZ)si1Q8J|{~M=t>2#x(KH--ArqXUoH!ENi+(R&!bPGLHhX6@rvbWI80VybL=T3{TGQT z4pC8|g{TE)aW!aCJhPJz>MDhvxkId6%tO({Ps5_-7&Z~9aHwQwiR+XRM}ykq5PU=K zJa5DgiZ?MEmSW)bD1x_AVv|$^3{J>wCpe(xyl&L9aX8r5a~@JenHf$ZDuUt`@i&dA z43NU_RWF63l2vH$S?8CIqZk2oqkTyb!8h(+q@YPgUJ*u>z2ZD!P4>tn!*++LTC_p+rf+HhI&tK37%%w~0m6g(Arm z-xw(Ojr-_)+IneJNCn{^#wUFQnXO1leMeK}d?4&~5 z7(+?RPj(mH`8*bMF}~2|4j-B4r_k>^f$OvOuSS~xNf4d3I|WK-sH<1ixq%9|NY)mM zlmAd!Eo}Nv_OJbD_rJ1)1@mv<^6BrNs&0OV@$`>hfH|@LU@4if``eE+MQ?LFY0h%h zO(*wF({sBr&G;YCnFUBpGWgSRuJ6^_h!&1FsO~qcgStDMe0^a=OiEgJ=CiZC{R@o! zRjz0H69^Hs!QTfU2~JWLFi5ok8gZZA8c63~FT9oZm=OlaL{BZ1D)^UEzFKP?Uobvr zXp$kizsoML;ojQv30VYHP^v(}6>TEh+Nc1ScVSEDYAz=OUOaOU1rZ=`|_6645d4a`cASA-1oVYQJQ> z*+tMj_Ijt)e*e_PjeSq0J6!PO00&y1=Wj0MR<+Ufg}b48mKV6BVxK`mCVj0&3Q*Upj9y}1?q{A}7^0QL0UF`L&l&HdhOU0h4L7pd4(B)+I@?aMnZoQdTn!;FP_tLQ7ZG{NpkJ=te zo8Rhsi7G-!z zX4>S9`LK>yYGgW?Pn9@fh&T1QiSbhha|tzOAFssA`z0k`p$6n&ik!iiifgsVBdH|c zQkb>Qz!mQ-?M_VQ#F7y&Y8JLX5Z>P_%8Ha2S-8yt6$U`3^U5Yy|DY;Y&d- zdRKK|NYoB-`PeW%!v%$c4Fc#!OGnh3O!I$aO1%5i8hCdf9v_43sXAB$IKVnS&3mD>&0^ST8p3#B@ULa(-c{1T zCQdQqDt9Yj^tbi;5?_z-a+gwKvb8mcFJFz*WS=Xz`fJ?zO*{7Zje#tJe)x4zaPn7| zBDeChRvskCgC{0vu3t@^W^@QaE^P47B#?ok_kZV8%+?kdoCy}Eb&uD2o`l$Su+@)E z0v?bD0z5xI(}*3X^jpxWp1L1wBS3P@@ciuXW#8mx$JyE9+mi($13|=so+=8s?hInT z&YbG{)f4`!if$;($Md{5ZpAbuxLc9ErTObKjK`1JpYEi1=z|uTJw+;ZI}mwxGxqKy zh*hhIS0*i1p48H8$VQO7lK%YPQj#1tXdpncl!CA;HkIaSzg1es-@Kf*kd_8|SA)w>DN;l;(GC_2Eagegs zrX+LSS-#GkXz~@LS^K|pEY40O(qhOw3=YPqc9azTbyumP?8#0|7yMxA7{sypEeHKq zl5)AiDps|znPERz_OC3Z`C=x!Nqj$|IK_v9l7HA1Ge2(N-`Pmzz#2p#)PsI}q<-)$ z5X^N}b<1a)3Byc;p@HzvMNO`39cQZT ziYG`1l;3z3_dbx{68jNkRx`~EJG!U$)e0fKc+tCs(WWvCTI^Hc^!|SmfW?9)}fUy*`rw`Pa}p-*sFs~jck$(n(G zTKDV725%sO$IT0JbG{63;b&-DNA6d>M^4l*At~;^BVKiXwx5=*y@(}wQWqqGck_N>={sTE!jRERBeKCH zfs+8tA6$~Xw1g$SJD#v#G8NeHNfF>bA`=NL<(FGfkcf?Ts{eTy1%dk;hcP0uasUUs zVS+9ylMOlGZM`gGgdlz`1igeZQq^=Nd=tY2PoBYY=mz<!`h=2tUK8kD1jnRNi7N(wq@|2y+R&`K&Otz6mWyz?EP1lVoUCH9D@F7#s@G9 z@2=%j%Ja_TZG_!w+gHK>tPtI}4vQ;)?$`YdAP;w5BNJUQ=IW~t6WrkH+$2c30B4lZ z%I~PV>pen5nhHz64HelwK@j*?G=Ba{`@`rv?*}iMfH05WS^2kr{ulK9NqKw^7r}1M zW+1Y0=1({u-`+REc3FyB@>#rWcUma!a)M_$vcfA0M zZmGXMuU~-oOaAlXk_#qy^neM%Y&lHzE*zf*!GZH!tv030(J1Q948(K@LS+VQcOlPU*w(V{{mHtdCmX; literal 0 HcmV?d00001 diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt new file mode 100644 index 000000000..83142d0ed --- /dev/null +++ b/examples/CMakeLists.txt @@ -0,0 +1,36 @@ +function(setup_example example_directory) + set(EXAMPLE_NAME_BASE "${example_directory}") + file(GLOB EXAMPLE_SOURCE_FILES "${example_directory}/*.c") + + # Build executable + foreach(SD_API_VER ${SD_API_VER_NUMS}) + set(EXAMPLE_NAME "${EXAMPLE_NAME_BASE}_v${SD_API_VER}") + add_executable(${EXAMPLE_NAME} ${EXAMPLE_SOURCE_FILES}) + + target_compile_definitions(${EXAMPLE_NAME} PRIVATE -DNRF_SD_BLE_API=${SD_API_VER}) + target_include_directories(${EXAMPLE_NAME} PRIVATE ../src/sd_api_v${SD_API_VER}/sdk/components/softdevice/s130/headers) + target_include_directories(${EXAMPLE_NAME} PRIVATE ../src/sd_api_v${SD_API_VER}/sdk/components/softdevice/s132/headers) + target_include_directories(${EXAMPLE_NAME} PRIVATE ../src/sd_api_v${SD_API_VER}/sdk/components/softdevice/s140/headers) + + if(WIN32) + target_link_libraries(${EXAMPLE_NAME} PRIVATE pc_ble_driver_static_sd_api_v${SD_API_VER}) + elseif(APPLE) + target_link_libraries(${EXAMPLE_NAME} PRIVATE pc_ble_driver_static_sd_api_v${SD_API_VER}) + else() + # Assume Linux + target_link_libraries(${EXAMPLE_NAME} PRIVATE pc_ble_driver_static_sd_api_v${SD_API_VER} "pthread") + endif() + endforeach() +endfunction(setup_example) + +link_directories ( + ../build +) + +if(MSVC) + add_definitions(-DPC_BLE_DRIVER_STATIC) + add_definitions(-D_CRT_SECURE_NO_WARNINGS) +endif() + +setup_example(heart_rate_monitor) +setup_example(heart_rate_collector) diff --git a/examples/README.md b/examples/README.md index ac7e17942..29ff7b93a 100644 --- a/examples/README.md +++ b/examples/README.md @@ -2,33 +2,28 @@ #### Building -Build the examples just like you built `pc-ble-driver`. +Project files for `heart_rate_monitor` and `heart_rate_collector` examples are created and built together with `pc-ble-driver` by default. It is also possible to (re)build only the examples. -We will use `heart_rate_monitor` as the concrete example to follow along with, but building and running `hear_rate_collector` is exactly the same. +If there is no Makefile in `build/examples`, follow `Compiling pc-ble-driver from source` in [README.md](/README.md#Compiling-pc-ble-driver-from-source) to create it. - $ cd pc-ble-driver/examples/heart_rate_monitor/ - $ mkdir build/ - $ cd build/ - -Note: this step depends on your operating system [as documented here](https://github.com/NordicSemiconductor/pc-ble-driver#compiling-pc-ble-driver-from-source). - - $ cmake .. -G "Unix Makefiles" +From project root + $ cd build/examples/ $ make If everything went well, you should see: - $ ls pc-ble-driver/examples/heart_rate_monitor/build/ - > hrm_v2 hrm_v5 ... + $ ls + > heart_rate_monitor_v2 heart_rate_monitor_v3 ... -Where `hrm_v2` and `hrm_v5` are the executables you will run. +Where `heart_rate_monitor_v2` and `heart_rate_monitor_v3` etc are the executables you will run. #### Running -Plug your nRF5 DK into you're PC and [Flash the connectivity firmware](https://github.com/NordicSemiconductor/pc-ble-driver#flashing-the-connectivity-firmware). +Plug your nRF5 DK into your PC and [Program the connectivity firmware](/README.md#Programming-connectivity-HEX-files). -Note: the examples communicate with a baud rate of 115200 [by default](https://github.com/NordicSemiconductor/pc-ble-driver/blob/master/examples/heart_rate_monitor/main.c#L420), so make sure you flash your nRF5 device with `sd_api_v/connectivity__115k2_with_s13_...hex` where `115k2` corresponds to the baud rate of 115200. +Note: the examples communicate with a baud rate of 115200 [by default](https://github.com/NordicSemiconductor/pc-ble-driver/blob/master/examples/heart_rate_monitor/main.c#L420), so make sure you program your nRF5 device with `hex/sd_api_v/connectivity__115k2_with_s_...hex` where `115k2` corresponds to the baud rate of 115200. -If you are on OS X there is a known [J-Link issue](https://github.com/NordicSemiconductor/pc-ble-driver#macos-os-x) that you need to do a workaround for. +If you are on macOS or a recent version of Linux there is a known [J-Link issue](https://github.com/NordicSemiconductor/pc-ble-driver#macos-os-x) that you need to do a workaround for. Now find out which serial port your device is on: @@ -37,7 +32,7 @@ Now find out which serial port your device is on: And run the example: - $ ./hrm_v /dev/tty.usbmodem + $ ./heart_rate_monitor_v /dev/tty.usbmodem #### Evaluating @@ -61,4 +56,4 @@ After connecting to the nRF5 device from nRF Connect, you should see: From here you can play around more and experiment with `pc-ble-driver`. -When running the `heart_rate_collector` example, the nRF5 device is scanning as a BLE Master. You can experiment with this example more by flashing a separate nRF5 DK with the BLE Peripheral heart rate monitor example in the nRF5 SDK `nRF5_SDK_ROOT_PATH/examples/ble_peripheral/ble_app_hrs` so the two devices can interact. +When running the `heart_rate_collector` example, the nRF5 device is scanning as a BLE Master. You can experiment with this example more by programming a separate nRF5 DK with the BLE Peripheral heart rate monitor example in the nRF5 SDK `nRF5_SDK_ROOT_PATH/examples/ble_peripheral/ble_app_hrs` so the two devices can interact. diff --git a/examples/heart_rate_collector/CMakeLists.txt b/examples/heart_rate_collector/CMakeLists.txt deleted file mode 100644 index a03af0d0b..000000000 --- a/examples/heart_rate_collector/CMakeLists.txt +++ /dev/null @@ -1,49 +0,0 @@ -cmake_minimum_required(VERSION 3.3) - -# Use multithreaded Boost libraries -set(Boost_USE_MULTITHREADED ON) - -# Use static boost libraries so the dynamic library -# can run anywhere -set(Boost_USE_STATIC_LIBS ON) - -# Find the necessary boost components on the system. -# Minimum version required is 1.54.0 -find_package ( Boost 1.54.0 REQUIRED COMPONENTS thread system regex date_time chrono ) - -link_directories ( - ../../build -) - -include_directories ( - ../../include/common/sdk_compat - ../../include/common - ../../include/common/internal/transport -) - -if(MSVC) - add_definitions(-DPC_BLE_DRIVER_STATIC) - add_definitions(-D_CRT_SECURE_NO_WARNINGS) -endif() - -# Build executable -add_executable(hrc_v2 main.c) -add_executable(hrc_v5 main.c) - -target_compile_definitions(hrc_v2 PRIVATE -DNRF_SD_BLE_API=2) -target_compile_definitions(hrc_v5 PRIVATE -DNRF_SD_BLE_API=5) - -target_include_directories(hrc_v2 PRIVATE ../../src/sd_api_v2/sdk/components/softdevice/s132/headers) -target_include_directories(hrc_v5 PRIVATE ../../src/sd_api_v5/sdk/components/softdevice/s132/headers) - -# Specify libraries to link with -if(MSVC) - target_link_libraries(hrc_v2 PRIVATE pc_ble_driver_static_sd_api_v2) - target_link_libraries(hrc_v5 PRIVATE pc_ble_driver_static_sd_api_v5) -else() - target_link_libraries(hrc_v2 PRIVATE pc_ble_driver_shared_sd_api_v2) - target_link_libraries(hrc_v5 PRIVATE pc_ble_driver_shared_sd_api_v5) -endif() - -target_link_libraries(hrc_v2 PRIVATE ${Boost_LIBRARIES}) -target_link_libraries(hrc_v5 PRIVATE ${Boost_LIBRARIES}) diff --git a/examples/heart_rate_collector/main.c b/examples/heart_rate_collector/main.c index 9a0d3f1c4..c76a487dc 100644 --- a/examples/heart_rate_collector/main.c +++ b/examples/heart_rate_collector/main.c @@ -1,14 +1,41 @@ -/* Copyright (c) 2015 Nordic Semiconductor. All Rights Reserved. +/* + * copyright (c) 2012 - 2018, nordic semiconductor asa + * all rights reserved. * - * The information contained herein is property of Nordic Semiconductor ASA. - * Terms and conditions of usage are described in detail in NORDIC - * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. + * redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: * - * Licensees are granted free, non-transferable use of the information. NO - * WARRANTY of ANY KIND is provided. This heading must NOT be removed from - * the file. + * 1. redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. * + * 2. redistributions in binary form, except as embedded into a nordic + * semiconductor asa integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + /**@example examples/heart_rate_collector * * @brief Heart Rate Collector Sample Application main file. @@ -16,8 +43,18 @@ * This file contains the source code for a sample application that acts as a BLE Central device. * This application scans for a Heart Rate Sensor device and reads it's heart rate data. * https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth.service.heart_rate.xml + * + * Structure of this file + * - Includes + * - Definitions + * - Global variables + * - Global functions + * - Event functions + * - Event dispatcher + * - Main */ +/** Includes */ #include "ble.h" #include "sd_rpc.h" @@ -25,6 +62,8 @@ #include #include + +/** Definitions */ #ifdef _WIN32 #define DEFAULT_UART_PORT_NAME "COM1" #define DEFAULT_BAUD_RATE 1000000 /**< The baud rate to be used for serial communication with nRF5 device. */ @@ -38,7 +77,6 @@ #define DEFAULT_BAUD_RATE 1000000 #endif - enum { UNIT_0_625_MS = 625, /**< Number of microseconds in 0.625 milliseconds. */ @@ -73,30 +111,52 @@ typedef struct uint16_t data_len; /**< Length of data. */ } data_t; -static uint8_t m_connected_devices = 0; -static uint16_t m_connection_handle = 0; -static uint16_t m_service_start_handle = 0; -static uint16_t m_service_end_handle = 0; -static uint16_t m_hrm_char_handle = 0; -static uint16_t m_hrm_cccd_handle = 0; -static bool m_connection_is_in_progress = false; -static adapter_t * m_adapter = NULL; -static uint32_t m_config_id = 1; + +/** Global variables */ +static uint8_t m_connected_devices = 0; +static uint16_t m_connection_handle = 0; +static uint16_t m_service_start_handle = 0; +static uint16_t m_service_end_handle = 0; +static uint16_t m_hrm_char_handle = 0; +static uint16_t m_hrm_cccd_handle = 0; +static bool m_connection_is_in_progress = false; +static adapter_t * m_adapter = NULL; + +#if NRF_SD_BLE_API >= 5 +static uint32_t m_config_id = 1; +#endif + +#if NRF_SD_BLE_API >= 6 +static uint8_t mp_data[100] = { 0 }; +static ble_data_t m_adv_report_buffer; +#endif static const ble_gap_scan_params_t m_scan_param = { - 1, // Active scanning set. - 0, // Selective scanning not set. +#if NRF_SD_BLE_API >= 6 + 0, // Set if accept extended advertising packetets. + 0, // Set if report inomplete reports. +#endif + 0, // Set if active scanning. +#if NRF_SD_BLE_API < 6 + 0, // Set if selective scanning. +#endif +#if NRF_SD_BLE_API >= 6 + BLE_GAP_SCAN_FP_ACCEPT_ALL, + BLE_GAP_PHY_1MBPS, +#endif #if NRF_SD_BLE_API == 2 - NULL, // White-list not set. + NULL, // Set white-list. #endif -#if NRF_SD_BLE_API >= 3 - 0, // adv_dir_report not set. +#if NRF_SD_BLE_API == 3 || NRF_SD_BLE_API == 5 + 0, // Set adv_dir_report. +#endif + (uint16_t)SCAN_INTERVAL, + (uint16_t)SCAN_WINDOW, + (uint16_t)SCAN_TIMEOUT +#if NRF_SD_BLE_API >= 6 + , { 0 } // Set chennel mask. #endif - - (uint16_t)SCAN_INTERVAL, - (uint16_t)SCAN_WINDOW, - (uint16_t)SCAN_TIMEOUT }; static const ble_gap_conn_params_t m_connection_param = @@ -107,16 +167,8 @@ static const ble_gap_conn_params_t m_connection_param = (uint16_t)CONNECTION_SUPERVISION_TIMEOUT }; -/* Local function forward declarations */ -static uint32_t ble_stack_init(); -static uint32_t adv_report_parse(uint8_t type, data_t * p_advdata, data_t * p_typedata); -static bool find_adv_name(const ble_gap_evt_adv_report_t *p_adv_report, const char * name_to_find); -static uint32_t scan_start(); -static uint32_t service_discovery_start(); -static uint32_t char_discovery_start(); -static uint32_t descr_discovery_start(); -static uint32_t hrm_cccd_set(uint8_t value); -static void ble_address_to_string_convert(ble_gap_addr_t address, uint8_t * string_buffer); + +/** Global functions */ /**@brief Function for handling error message events from sd_rpc. * @@ -162,658 +214,707 @@ static void log_handler(adapter_t * adapter, sd_rpc_log_severity_t severity, con } } -/**@brief Function called on BLE_GAP_EVT_CONNECTED event. +/**@brief Function for initializing serial communication with the target nRF5 Bluetooth slave. * - * @details Update connection state and proceed to discovering the peer's GATT services. + * @param[in] serial_port The serial port the target nRF5 device is connected to. * - * @param[in] p_ble_gap_evt GAP event. + * @return The new transport adapter. */ -static void on_connected(const ble_gap_evt_t * const p_ble_gap_evt) +static adapter_t * adapter_init(char * serial_port, uint32_t baud_rate) { - printf("Connection established\n"); - fflush(stdout); + physical_layer_t * phy; + data_link_layer_t * data_link_layer; + transport_layer_t * transport_layer; - m_connected_devices++; - m_connection_handle = p_ble_gap_evt->conn_handle; - m_connection_is_in_progress = false; + phy = sd_rpc_physical_layer_create_uart(serial_port, + baud_rate, + SD_RPC_FLOW_CONTROL_NONE, + SD_RPC_PARITY_NONE); + data_link_layer = sd_rpc_data_link_layer_create_bt_three_wire(phy, 100); + transport_layer = sd_rpc_transport_layer_create(data_link_layer, 100); + return sd_rpc_adapter_create(transport_layer); +} - service_discovery_start(); +/**@brief Function for converting a BLE address to a string. + * + * @param[in] address Bluetooth Low Energy address. + * @param[out] string_buffer The serial port the target nRF5 device is connected to. + */ +static void ble_address_to_string_convert(ble_gap_addr_t address, uint8_t * string_buffer) +{ + const int address_length = 6; + char temp_str[3]; + + for (int i = address_length - 1; i >= 0; --i) + { + sprintf(temp_str, "%02X", address.addr[i]); + strcat((char *)string_buffer, temp_str); + } } -/**@brief Function called on BLE_GAP_EVT_ADV_REPORT event. +/** + * @brief Parses advertisement data, providing length and location of the field in case + * matching data is found. * - * @details Create a connection if received advertising packet corresponds to desired BLE device. + * @param[in] Type of data to be looked for in advertisement data. + * @param[in] Advertisement report length and pointer to report. + * @param[out] If data type requested is found in the data report, type data length and + * pointer to data will be populated here. * - * @param[in] p_ble_gap_evt Advertising Report Event. + * @retval NRF_SUCCESS if the data type is found in the report. + * @retval NRF_ERROR_NOT_FOUND if the data type could not be found. */ -static void on_adv_report(const ble_gap_evt_t * const p_ble_gap_evt) +static uint32_t adv_report_parse(uint8_t type, data_t * p_advdata, data_t * p_typedata) { - uint32_t err_code; - uint8_t str[STRING_BUFFER_SIZE] = {0}; + uint32_t index = 0; + uint8_t * p_data; - // Log the Bluetooth device address of advertisement packet received. - ble_address_to_string_convert(p_ble_gap_evt->params.adv_report.peer_addr, str); - printf("Received advertisement report with device address: 0x%s\n", str); - fflush(stdout); + p_data = p_advdata->p_data; - if (find_adv_name(&p_ble_gap_evt->params.adv_report, TARGET_DEV_NAME)) + while (index < p_advdata->data_len) { - if (m_connected_devices >= MAX_PEER_COUNT || m_connection_is_in_progress) - { - return; - } + uint8_t field_length = p_data[index]; + uint8_t field_type = p_data[index + 1]; - err_code = sd_ble_gap_connect(m_adapter, - &(p_ble_gap_evt->params.adv_report.peer_addr), - &m_scan_param, - &m_connection_param -#if NRF_SD_BLE_API >= 5 - , m_config_id -#endif - ); - if (err_code != NRF_SUCCESS) + if (field_type == type) { - printf("Connection Request Failed, reason %d\n", err_code); - fflush(stdout); - return; + p_typedata->p_data = &p_data[index + 2]; + p_typedata->data_len = field_length - 1; + return NRF_SUCCESS; } - - m_connection_is_in_progress = true; + index += field_length + 1; } + return NRF_ERROR_NOT_FOUND; } -/**@brief Function called on BLE_GAP_EVT_TIMEOUT event. +/**@brief Function for searching a given name in the advertisement packets. * - * @param[in] ble_gap_evt_t Timeout Event. + * @details Use this function to parse received advertising data and to find a given + * name in them either as 'complete_local_name' or as 'short_local_name'. + * + * @param[in] p_adv_report advertising data to parse. + * @param[in] name_to_find name to search. + * @return true if the given name was found, false otherwise. */ -static void on_timeout(const ble_gap_evt_t * const p_ble_gap_evt) +static bool find_adv_name(const ble_gap_evt_adv_report_t *p_adv_report, const char * name_to_find) { - if (p_ble_gap_evt->params.timeout.src == BLE_GAP_TIMEOUT_SRC_CONN) + uint32_t err_code; + data_t adv_data; + data_t dev_name; + + // Initialize advertisement report for parsing +#if NRF_SD_BLE_API >= 6 + adv_data.p_data = (uint8_t *)p_adv_report->data.p_data; + adv_data.data_len = p_adv_report->data.len; +#else + adv_data.p_data = (uint8_t *)p_adv_report->data; + adv_data.data_len = p_adv_report->dlen; +#endif + + //search for advertising names + err_code = adv_report_parse(BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME, + &adv_data, + &dev_name); + if (err_code == NRF_SUCCESS) { - m_connection_is_in_progress = false; + if (memcmp(name_to_find, dev_name.p_data, dev_name.data_len )== 0) + { + return true; + } } - else if (p_ble_gap_evt->params.timeout.src == BLE_GAP_TIMEOUT_SRC_SCAN) + else { - scan_start(); + // Look for the short local name if it was not found as complete + err_code = adv_report_parse(BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME, + &adv_data, + &dev_name); + if (err_code != NRF_SUCCESS) + { + return false; + } + if (memcmp(name_to_find, dev_name.p_data, dev_name.data_len )== 0) + { + return true; + } } + return false; } -/**@brief Function called on BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP event. - * - * @details Update service state and proceed to discovering the service's GATT characteristics. +/**@brief Function for initializing the BLE stack. * - * @param[in] p_ble_gattc_evt Primary Service Discovery Response Event. + * @return NRF_SUCCESS on success, otherwise an error code. */ -static void on_service_discovery_response(const ble_gattc_evt_t * const p_ble_gattc_evt) +static uint32_t ble_stack_init() { - int count; - int service_index; - const ble_gattc_service_t * service; - - printf("Received service discovery response\n"); - fflush(stdout); - - if (p_ble_gattc_evt->gatt_status != NRF_SUCCESS) - { - printf("Service discovery failed. Error code 0x%X\n", p_ble_gattc_evt->gatt_status); - fflush(stdout); - return; - } + uint32_t err_code; + uint32_t * app_ram_base = NULL; - count = p_ble_gattc_evt->params.prim_srvc_disc_rsp.count; +#if NRF_SD_BLE_API <= 3 + ble_enable_params_t ble_enable_params; + memset(&ble_enable_params, 0, sizeof(ble_enable_params)); +#endif - if (count == 0) - { - printf("Service not found\n"); - fflush(stdout); - return; - } +#if NRF_SD_BLE_API == 3 + ble_enable_params.gatt_enable_params.att_mtu = GATT_MTU_SIZE_DEFAULT; +#elif NRF_SD_BLE_API < 3 + ble_enable_params.gatts_enable_params.attr_tab_size = BLE_GATTS_ATTR_TAB_SIZE_DEFAULT; + ble_enable_params.gatts_enable_params.service_changed = false; + ble_enable_params.common_enable_params.p_conn_bw_counts = NULL; + ble_enable_params.common_enable_params.vs_uuid_count = 1; +#endif - if (count > 1) - { - printf("Warning, discovered multiple primary services. Ignoring all but the first\n"); - } +#if NRF_SD_BLE_API <= 3 + ble_enable_params.gap_enable_params.periph_conn_count = 1; + ble_enable_params.gap_enable_params.central_conn_count = 1; + ble_enable_params.gap_enable_params.central_sec_count = 1; - service_index = 0; /* We expect to discover only the Heart Rate service as requested. */ - service = &(p_ble_gattc_evt->params.prim_srvc_disc_rsp.services[service_index]); + err_code = sd_ble_enable(m_adapter, &ble_enable_params, app_ram_base); +#else + err_code = sd_ble_enable(m_adapter, app_ram_base); +#endif - if (service->uuid.uuid != BLE_UUID_HEART_RATE_SERVICE) - { - printf("Unknown service discovered with UUID: 0x%04X\n", service->uuid.uuid); - fflush(stdout); - return; + switch (err_code) { + case NRF_SUCCESS: + break; + case NRF_ERROR_INVALID_STATE: + printf("BLE stack already enabled\n"); + fflush(stdout); + break; + default: + printf("Failed to enable BLE stack. Error code: %d\n", err_code); + fflush(stdout); + break; } - m_service_start_handle = service->handle_range.start_handle; - m_service_end_handle = service->handle_range.end_handle; - - printf("Discovered heart rate service. UUID: 0x%04X, " - "start handle: 0x%04X, end handle: 0x%04X\n", - service->uuid.uuid, m_service_start_handle, m_service_end_handle); - fflush(stdout); - - char_discovery_start(); + return err_code; } -/**@brief Function called on BLE_GATTC_EVT_CHAR_DISC_RSP event. - * - * @details Update characteristic state and proceed to discovering the characteristicss descriptors. +#if NRF_SD_BLE_API < 5 +/**@brief Set BLE option for the BLE role and connection bandwidth. * - * @param[in] p_ble_gattc_evt Characteristic Discovery Response Event. + * @return NRF_SUCCESS on option set successfully, otherwise an error code. */ -static void on_characteristic_discovery_response(const ble_gattc_evt_t * const p_ble_gattc_evt) +static uint32_t ble_options_set() { - int count = p_ble_gattc_evt->params.char_disc_rsp.count; +#if NRF_SD_BLE_API <= 3 + ble_opt_t opt; + ble_common_opt_t common_opt; - if (p_ble_gattc_evt->gatt_status != NRF_SUCCESS) - { - printf("Characteristic discovery failed. Error code 0x%X\n", p_ble_gattc_evt->gatt_status); - fflush(stdout); - return; - } - - printf("Received characteristic discovery response, characteristics count: %d\n", count); - fflush(stdout); + common_opt.conn_bw.role = BLE_GAP_ROLE_CENTRAL; + common_opt.conn_bw.conn_bw.conn_bw_rx = BLE_CONN_BW_HIGH; + common_opt.conn_bw.conn_bw.conn_bw_tx = BLE_CONN_BW_HIGH; + opt.common_opt = common_opt; - for (int i = 0; i < count; i++) - { - printf("Characteristic handle: 0x%04X, UUID: 0x%04X\n", - p_ble_gattc_evt->params.char_disc_rsp.chars[i].handle_decl, - p_ble_gattc_evt->params.char_disc_rsp.chars[i].uuid.uuid); - fflush(stdout); - - if (p_ble_gattc_evt->params.char_disc_rsp.chars[i].uuid.uuid == - BLE_UUID_HEART_RATE_MEASUREMENT_CHAR) - { - m_hrm_char_handle = p_ble_gattc_evt->params.char_disc_rsp.chars[i].handle_decl; - } - } - - descr_discovery_start(); + return sd_ble_opt_set(m_adapter, BLE_COMMON_OPT_CONN_BW, &opt); +#else + return NRF_ERROR_NOT_SUPPORTED; +#endif } +#endif -/**@brief Function called on BLE_GATTC_EVT_DESC_DISC_RSP event. - * - * @details Update CCCD descriptor state and proceed to prompting user to toggle notifications. +#if NRF_SD_BLE_API >= 5 +/**@brief Function for setting configuration for the BLE stack. * - * @param[in] p_ble_gattc_evt Descriptor Discovery Response Event. + * @return NRF_SUCCESS on success, otherwise an error code. */ -static void on_descriptor_discovery_response(const ble_gattc_evt_t * const p_ble_gattc_evt) +static uint32_t ble_cfg_set(uint8_t conn_cfg_tag) { - int count = p_ble_gattc_evt->params.desc_disc_rsp.count; + const uint32_t ram_start = 0; // Value is not used by ble-driver + uint32_t error_code; + ble_cfg_t ble_cfg; - if (p_ble_gattc_evt->gatt_status != NRF_SUCCESS) + // Configure the connection roles. + memset(&ble_cfg, 0, sizeof(ble_cfg)); + +#if NRF_SD_BLE_API >= 6 + ble_cfg.gap_cfg.role_count_cfg.adv_set_count = BLE_GAP_ADV_SET_COUNT_DEFAULT; +#endif + ble_cfg.gap_cfg.role_count_cfg.periph_role_count = 0; + ble_cfg.gap_cfg.role_count_cfg.central_role_count = 1; + ble_cfg.gap_cfg.role_count_cfg.central_sec_count = 0; + + error_code = sd_ble_cfg_set(m_adapter, BLE_GAP_CFG_ROLE_COUNT, &ble_cfg, ram_start); + if (error_code != NRF_SUCCESS) { - printf("Descriptor discovery failed. Error code 0x%X\n", p_ble_gattc_evt->gatt_status); + printf("sd_ble_cfg_set() failed when attempting to set BLE_GAP_CFG_ROLE_COUNT. Error code: 0x%02X\n", error_code); fflush(stdout); - return; + return error_code; } - printf("Received descriptor discovery response, descriptor count: %d\n", count); - fflush(stdout); + memset(&ble_cfg, 0x00, sizeof(ble_cfg)); + ble_cfg.conn_cfg.conn_cfg_tag = conn_cfg_tag; + ble_cfg.conn_cfg.params.gatt_conn_cfg.att_mtu = 150; - for (int i = 0; i < count; i++) + error_code = sd_ble_cfg_set(m_adapter, BLE_CONN_CFG_GATT, &ble_cfg, ram_start); + if (error_code != NRF_SUCCESS) { - printf("Descriptor handle: 0x%04X, UUID: 0x%04X\n", - p_ble_gattc_evt->params.desc_disc_rsp.descs[i].handle, - p_ble_gattc_evt->params.desc_disc_rsp.descs[i].uuid.uuid); + printf("sd_ble_cfg_set() failed when attempting to set BLE_CONN_CFG_GATT. Error code: 0x%02X\n", error_code); fflush(stdout); - - if (p_ble_gattc_evt->params.desc_disc_rsp.descs[i].uuid.uuid == BLE_UUID_CCCD) - { - m_hrm_cccd_handle = p_ble_gattc_evt->params.desc_disc_rsp.descs[i].handle; - printf("Press enter to toggle notifications on the HRM characteristic\n"); - fflush(stdout); - } + return error_code; } + + return NRF_SUCCESS; } +#endif -/**@brief Function called on BLE_GATTC_EVT_WRITE_RSP event. - * - * @param[in] p_ble_gattc_evt Write Response Event. +/**@brief Start scanning (GAP Discovery procedure, Observer Procedure). + * * + * @return NRF_SUCCESS on successfully initiating scanning procedure, otherwise an error code. */ -static void on_write_response(const ble_gattc_evt_t * const p_ble_gattc_evt) +static uint32_t scan_start() { - printf("Received write response.\n"); - fflush(stdout); +#if NRF_SD_BLE_API >= 6 + m_adv_report_buffer.p_data = mp_data; + m_adv_report_buffer.len = sizeof(mp_data); +#endif - if (p_ble_gattc_evt->gatt_status != NRF_SUCCESS) + uint32_t error_code = sd_ble_gap_scan_start(m_adapter, &m_scan_param +#if NRF_SD_BLE_API >= 6 + , &m_adv_report_buffer +#endif + ); + + if (error_code != NRF_SUCCESS) { - printf("Error. Write operation failed. Error code 0x%X\n", p_ble_gattc_evt->gatt_status); + printf("Scan start failed with error code: %d\n", error_code); + fflush(stdout); + } else + { + printf("Scan started\n"); fflush(stdout); } + + return error_code; } -/**@brief Function called on BLE_GATTC_EVT_HVX event. +/**@brief Function called upon connecting to BLE peripheral. * - * @details Logs the received heart rate measurement. + * @details Initiates primary service discovery. * - * @param[in] p_ble_gattc_evt Handle Value Notification/Indication Event. + * @return NRF_SUCCESS on success, otherwise an error code. */ -static void on_hvx(const ble_gattc_evt_t * const p_ble_gattc_evt) +static uint32_t service_discovery_start() { - if (p_ble_gattc_evt->params.hvx.handle >= m_hrm_char_handle || - p_ble_gattc_evt->params.hvx.handle <= m_hrm_cccd_handle) // Heart rate measurement. - { - // We know the heart rate reading is encoded as 2 bytes [flag, value]. - printf("Received heart rate measurement: %d\n", p_ble_gattc_evt->params.hvx.data[1]); - } - else // Unknown data. - { - printf("Un-parsed data received on handle: %04X\n", p_ble_gattc_evt->params.hvx.handle); - } + uint32_t err_code; + uint16_t start_handle = 0x01; + ble_uuid_t srvc_uuid; + printf("Discovering primary services\n"); fflush(stdout); -} -/**@brief Function called on BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST event. - * - * @details Update GAP connection parameters. - * - * @param[in] p_ble_gap_evt Connection Parameter Update Event. - */ -static void on_conn_params_update_request(const ble_gap_evt_t * const p_ble_gap_evt) -{ - uint32_t err_code = sd_ble_gap_conn_param_update(m_adapter, m_connection_handle, - &(p_ble_gap_evt-> - params.conn_param_update_request.conn_params)); + srvc_uuid.type = BLE_UUID_TYPE_BLE; + srvc_uuid.uuid = BLE_UUID_HEART_RATE_SERVICE; + + // Initiate procedure to find the primary BLE_UUID_HEART_RATE_SERVICE. + err_code = sd_ble_gattc_primary_services_discover(m_adapter, + m_connection_handle, start_handle, + &srvc_uuid); if (err_code != NRF_SUCCESS) { - printf("Conn params update failed, err_code %d\n", err_code); + printf("Failed to initiate or continue a GATT Primary Service Discovery procedure\n"); fflush(stdout); } + + return err_code; } -#if NRF_SD_BLE_API >= 3 -/**@brief Function called on BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST event. +/**@brief Function called upon discovering a BLE peripheral's primary service(s). * - * @details Replies to an ATT_MTU exchange request by sending an Exchange MTU Response to the client. + * @details Initiates service's (m_service) characteristic discovery. * - * @param[in] p_ble_gatts_evt Exchange MTU Request Event. + * @return NRF_SUCCESS on success, otherwise an error code. */ -static void on_exchange_mtu_request(const ble_gatts_evt_t * const p_ble_gatts_evt) +static uint32_t char_discovery_start() { - uint32_t err_code = sd_ble_gatts_exchange_mtu_reply( - m_adapter, - m_connection_handle, -#if NRF_SD_BLE_API < 5 - GATT_MTU_SIZE_DEFAULT); -#else - BLE_GATT_ATT_MTU_DEFAULT); -#endif + ble_gattc_handle_range_t handle_range; - if (err_code != NRF_SUCCESS) - { - printf("MTU exchange request reply failed, err_code %d\n", err_code); - fflush(stdout); - } + printf("Discovering characteristics\n"); + fflush(stdout); + + handle_range.start_handle = m_service_start_handle; + handle_range.end_handle = m_service_end_handle; + + return sd_ble_gattc_characteristics_discover(m_adapter, m_connection_handle, &handle_range); } -/**@brief Function called on BLE_GATTC_EVT_EXCHANGE_MTU_RSP event. +/**@brief Function called upon discovering service's characteristics. * - * @details Logs the new BLE server RX MTU size. + * @details Initiates heart rate monitor (m_hrm_char_handle) characteristic's descriptor discovery. * - * @param[in] p_ble_gattc_evt Exchange MTU Response Event. + * @return NRF_SUCCESS on success, otherwise an error code. */ -static void on_exchange_mtu_response(const ble_gattc_evt_t * const p_ble_gattc_evt) +static uint32_t descr_discovery_start() { - uint16_t server_rx_mtu = p_ble_gattc_evt->params.exchange_mtu_rsp.server_rx_mtu; + ble_gattc_handle_range_t handle_range; - printf("MTU response received. New ATT_MTU is %d\n", server_rx_mtu); + printf("Discovering characteristic's descriptors\n"); fflush(stdout); -} -#endif -/**@brief Function for initializing serial communication with the target nRF5 Bluetooth slave. - * - * @param[in] serial_port The serial port the target nRF5 device is connected to. - * - * @return The new transport adapter. - */ -static adapter_t * adapter_init(char * serial_port, uint32_t baud_rate) -{ - physical_layer_t * phy; - data_link_layer_t * data_link_layer; - transport_layer_t * transport_layer; + if (m_hrm_char_handle == 0) + { + printf("No heart rate measurement characteristic handle found\n"); + fflush(stdout); + return NRF_ERROR_INVALID_STATE; + } - phy = sd_rpc_physical_layer_create_uart(serial_port, baud_rate, SD_RPC_FLOW_CONTROL_NONE, - SD_RPC_PARITY_NONE); - data_link_layer = sd_rpc_data_link_layer_create_bt_three_wire(phy, 100); - transport_layer = sd_rpc_transport_layer_create(data_link_layer, 100); - return sd_rpc_adapter_create(transport_layer); + handle_range.start_handle = m_hrm_char_handle; + handle_range.end_handle = m_service_end_handle; + + return sd_ble_gattc_descriptors_discover(m_adapter, m_connection_handle, &handle_range); } -/**@brief Function for converting a BLE address to a string. - * - * @param[in] address Bluetooth Low Energy address. - * @param[out] string_buffer The serial port the target nRF5 device is connected to. +/**@brief Function that write's the HRM characteristic's CCCD. + * * + * @return NRF_SUCCESS on success, otherwise an error code. */ -static void ble_address_to_string_convert(ble_gap_addr_t address, uint8_t * string_buffer) +static uint32_t hrm_cccd_set(uint8_t value) { - const int address_length = 6; - char temp_str[3]; + ble_gattc_write_params_t write_params; + uint8_t cccd_value[2] = {value, 0}; - for (int i = address_length - 1; i >= 0; --i) + printf("Setting HRM CCCD\n"); + fflush(stdout); + + if (m_hrm_cccd_handle == 0) { - sprintf(temp_str, "%02X", address.addr[i]); - strcat((char *)string_buffer, temp_str); + printf("Error. No CCCD handle has been found\n"); + fflush(stdout); + return NRF_ERROR_INVALID_STATE; } + + write_params.handle = m_hrm_cccd_handle; + write_params.len = 2; + write_params.p_value = cccd_value; + write_params.write_op = BLE_GATT_OP_WRITE_REQ; + write_params.offset = 0; + + return sd_ble_gattc_write(m_adapter, m_connection_handle, &write_params); } -/** - * @brief Parses advertisement data, providing length and location of the field in case - * matching data is found. + +/** Event functions */ + +/**@brief Function called on BLE_GAP_EVT_CONNECTED event. * - * @param[in] Type of data to be looked for in advertisement data. - * @param[in] Advertisement report length and pointer to report. - * @param[out] If data type requested is found in the data report, type data length and - * pointer to data will be populated here. + * @details Update connection state and proceed to discovering the peer's GATT services. * - * @retval NRF_SUCCESS if the data type is found in the report. - * @retval NRF_ERROR_NOT_FOUND if the data type could not be found. + * @param[in] p_ble_gap_evt GAP event. */ -static uint32_t adv_report_parse(uint8_t type, data_t * p_advdata, data_t * p_typedata) +static void on_connected(const ble_gap_evt_t * const p_ble_gap_evt) { - uint32_t index = 0; - uint8_t * p_data; - - p_data = p_advdata->p_data; + printf("Connection established\n"); + fflush(stdout); - while (index < p_advdata->data_len) - { - uint8_t field_length = p_data[index]; - uint8_t field_type = p_data[index + 1]; + m_connected_devices++; + m_connection_handle = p_ble_gap_evt->conn_handle; + m_connection_is_in_progress = false; - if (field_type == type) - { - p_typedata->p_data = &p_data[index + 2]; - p_typedata->data_len = field_length - 1; - return NRF_SUCCESS; - } - index += field_length + 1; - } - return NRF_ERROR_NOT_FOUND; + service_discovery_start(); } -/**@brief Function for searching a given name in the advertisement packets. +/**@brief Function called on BLE_GAP_EVT_ADV_REPORT event. * - * @details Use this function to parse received advertising data and to find a given - * name in them either as 'complete_local_name' or as 'short_local_name'. + * @details Create a connection if received advertising packet corresponds to desired BLE device. * - * @param[in] p_adv_report advertising data to parse. - * @param[in] name_to_find name to search. - * @return true if the given name was found, false otherwise. + * @param[in] p_ble_gap_evt Advertising Report Event. */ -static bool find_adv_name(const ble_gap_evt_adv_report_t *p_adv_report, const char * name_to_find) +static void on_adv_report(const ble_gap_evt_t * const p_ble_gap_evt) { uint32_t err_code; - data_t adv_data; - data_t dev_name; - - // Initialize advertisement report for parsing - adv_data.p_data = (uint8_t *)p_adv_report->data; - adv_data.data_len = p_adv_report->dlen; + uint8_t str[STRING_BUFFER_SIZE] = {0}; + // Log the Bluetooth device address of advertisement packet received. + ble_address_to_string_convert(p_ble_gap_evt->params.adv_report.peer_addr, str); + printf("Received advertisement report with device address: 0x%s\n", str); + fflush(stdout); - //search for advertising names - err_code = adv_report_parse(BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME, - &adv_data, - &dev_name); - if (err_code == NRF_SUCCESS) + if (find_adv_name(&p_ble_gap_evt->params.adv_report, TARGET_DEV_NAME)) { - if (memcmp(name_to_find, dev_name.p_data, dev_name.data_len )== 0) + if (m_connected_devices >= MAX_PEER_COUNT || m_connection_is_in_progress) { - return true; + return; + } + + err_code = sd_ble_gap_connect(m_adapter, + &(p_ble_gap_evt->params.adv_report.peer_addr), + &m_scan_param, + &m_connection_param +#if NRF_SD_BLE_API >= 5 + , m_config_id +#endif + ); + if (err_code != NRF_SUCCESS) + { + printf("Connection Request Failed, reason %d\n", err_code); + fflush(stdout); + return; } + + m_connection_is_in_progress = true; } - else - { - // Look for the short local name if it was not found as complete - err_code = adv_report_parse(BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME, - &adv_data, - &dev_name); +#if NRF_SD_BLE_API >= 6 + else { + err_code = sd_ble_gap_scan_start(m_adapter, NULL, &m_adv_report_buffer); + if (err_code != NRF_SUCCESS) { - return false; + printf("Scan start failed with error code: %d\n", err_code); + fflush(stdout); } - if (memcmp(name_to_find, dev_name.p_data, dev_name.data_len )== 0) + else { - return true; + printf("Scan started\n"); + fflush(stdout); } } - return false; +#endif + } -/**@brief Function for initializing the BLE stack. +/**@brief Function called on BLE_GAP_EVT_TIMEOUT event. * - * @return NRF_SUCCESS on success, otherwise an error code. + * @param[in] ble_gap_evt_t Timeout Event. */ -static uint32_t ble_stack_init() +static void on_timeout(const ble_gap_evt_t * const p_ble_gap_evt) { - uint32_t err_code; - uint32_t * app_ram_base = NULL; - -#if NRF_SD_BLE_API <= 3 - ble_enable_params_t ble_enable_params; - memset(&ble_enable_params, 0, sizeof(ble_enable_params)); -#endif - -#if NRF_SD_BLE_API == 3 - ble_enable_params.gatt_enable_params.att_mtu = GATT_MTU_SIZE_DEFAULT; -#elif NRF_SD_BLE_API < 3 - ble_enable_params.gatts_enable_params.attr_tab_size = BLE_GATTS_ATTR_TAB_SIZE_DEFAULT; - ble_enable_params.gatts_enable_params.service_changed = false; - ble_enable_params.gap_enable_params.periph_conn_count = 1; - ble_enable_params.gap_enable_params.central_conn_count = 1; - ble_enable_params.gap_enable_params.central_sec_count = 1; - ble_enable_params.common_enable_params.p_conn_bw_counts = NULL; - ble_enable_params.common_enable_params.vs_uuid_count = 1; -#endif - -#if NRF_SD_BLE_API <= 3 - err_code = sd_ble_enable(m_adapter, &ble_enable_params, app_ram_base); -#else - err_code = sd_ble_enable(m_adapter, app_ram_base); -#endif - - switch (err_code) { - case NRF_SUCCESS: - break; - case NRF_ERROR_INVALID_STATE: - printf("BLE stack already enabled\n"); - fflush(stdout); - break; - default: - printf("Failed to enable BLE stack. Error code: %d\n", err_code); - fflush(stdout); - break; + if (p_ble_gap_evt->params.timeout.src == BLE_GAP_TIMEOUT_SRC_CONN) + { + m_connection_is_in_progress = false; + } + else if (p_ble_gap_evt->params.timeout.src == BLE_GAP_TIMEOUT_SRC_SCAN) + { + scan_start(); } - - return err_code; } -/**@brief Set BLE option for the BLE role and connection bandwidth. +/**@brief Function called on BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP event. * - * @return NRF_SUCCESS on option set successfully, otherwise an error code. + * @details Update service state and proceed to discovering the service's GATT characteristics. + * + * @param[in] p_ble_gattc_evt Primary Service Discovery Response Event. */ -static uint32_t ble_options_set() +static void on_service_discovery_response(const ble_gattc_evt_t * const p_ble_gattc_evt) { -#if NRF_SD_BLE_API <= 3 - ble_opt_t opt; - ble_common_opt_t common_opt; - - common_opt.conn_bw.role = BLE_GAP_ROLE_CENTRAL; - common_opt.conn_bw.conn_bw.conn_bw_rx = BLE_CONN_BW_HIGH; - common_opt.conn_bw.conn_bw.conn_bw_tx = BLE_CONN_BW_HIGH; - opt.common_opt = common_opt; + int count; + int service_index; + const ble_gattc_service_t * service; - return sd_ble_opt_set(m_adapter, BLE_COMMON_OPT_CONN_BW, &opt); -#else - return NRF_ERROR_NOT_SUPPORTED; -#endif -} + printf("Received service discovery response\n"); + fflush(stdout); -#if NRF_SD_BLE_API >= 5 -uint32_t ble_cfg_set(uint8_t conn_cfg_tag) -{ - const uint32_t ram_start = 0; // Value is not used by ble-driver - uint32_t error_code; - ble_cfg_t ble_cfg; + if (p_ble_gattc_evt->gatt_status != NRF_SUCCESS) + { + printf("Service discovery failed. Error code 0x%X\n", p_ble_gattc_evt->gatt_status); + fflush(stdout); + return; + } - // Configure the connection roles. - memset(&ble_cfg, 0, sizeof(ble_cfg)); - ble_cfg.gap_cfg.role_count_cfg.periph_role_count = 1; - ble_cfg.gap_cfg.role_count_cfg.central_role_count = 1; - ble_cfg.gap_cfg.role_count_cfg.central_sec_count = 1; + count = p_ble_gattc_evt->params.prim_srvc_disc_rsp.count; - error_code = sd_ble_cfg_set(m_adapter, BLE_GAP_CFG_ROLE_COUNT, &ble_cfg, ram_start); - if (error_code != NRF_SUCCESS) + if (count == 0) { - printf("sd_ble_cfg_set() failed when attempting to set BLE_GAP_CFG_ROLE_COUNT. Error code: 0x%02X\n", error_code); + printf("Service not found\n"); fflush(stdout); - return error_code; + return; } - memset(&ble_cfg, 0x00, sizeof(ble_cfg)); - ble_cfg.conn_cfg.conn_cfg_tag = conn_cfg_tag; - ble_cfg.conn_cfg.params.gatt_conn_cfg.att_mtu = 150; + if (count > 1) + { + printf("Warning, discovered multiple primary services. Ignoring all but the first\n"); + } - error_code = sd_ble_cfg_set(m_adapter, BLE_CONN_CFG_GATT, &ble_cfg, ram_start); - if (error_code != NRF_SUCCESS) + service_index = 0; /* We expect to discover only the Heart Rate service as requested. */ + service = &(p_ble_gattc_evt->params.prim_srvc_disc_rsp.services[service_index]); + + if (service->uuid.uuid != BLE_UUID_HEART_RATE_SERVICE) { - printf("sd_ble_cfg_set() failed when attempting to set BLE_CONN_CFG_GATT. Error code: 0x%02X\n", error_code); + printf("Unknown service discovered with UUID: 0x%04X\n", service->uuid.uuid); fflush(stdout); - return error_code; + return; } - return NRF_SUCCESS; + m_service_start_handle = service->handle_range.start_handle; + m_service_end_handle = service->handle_range.end_handle; + + printf("Discovered heart rate service. UUID: 0x%04X, " + "start handle: 0x%04X, end handle: 0x%04X\n", + service->uuid.uuid, m_service_start_handle, m_service_end_handle); + fflush(stdout); + + char_discovery_start(); } -#endif -/**@brief Start scanning (GAP Discovery procedure, Observer Procedure). - * * - * @return NRF_SUCCESS on successfully initiating scanning procedure, otherwise an error code. +/**@brief Function called on BLE_GATTC_EVT_CHAR_DISC_RSP event. + * + * @details Update characteristic state and proceed to discovering the characteristicss descriptors. + * + * @param[in] p_ble_gattc_evt Characteristic Discovery Response Event. */ -static uint32_t scan_start() +static void on_characteristic_discovery_response(const ble_gattc_evt_t * const p_ble_gattc_evt) { - uint32_t error_code = sd_ble_gap_scan_start(m_adapter, &m_scan_param); + int count = p_ble_gattc_evt->params.char_disc_rsp.count; - if (error_code != NRF_SUCCESS) + if (p_ble_gattc_evt->gatt_status != NRF_SUCCESS) { - printf("Scan start failed\n"); + printf("Characteristic discovery failed. Error code 0x%X\n", p_ble_gattc_evt->gatt_status); fflush(stdout); - } else + return; + } + + printf("Received characteristic discovery response, characteristics count: %d\n", count); + fflush(stdout); + + for (int i = 0; i < count; i++) { - printf("Scan started\n"); + printf("Characteristic handle: 0x%04X, UUID: 0x%04X\n", + p_ble_gattc_evt->params.char_disc_rsp.chars[i].handle_decl, + p_ble_gattc_evt->params.char_disc_rsp.chars[i].uuid.uuid); fflush(stdout); + + if (p_ble_gattc_evt->params.char_disc_rsp.chars[i].uuid.uuid == + BLE_UUID_HEART_RATE_MEASUREMENT_CHAR) + { + m_hrm_char_handle = p_ble_gattc_evt->params.char_disc_rsp.chars[i].handle_decl; + } } - return error_code; + descr_discovery_start(); } -/**@brief Function called upon connecting to BLE peripheral. +/**@brief Function called on BLE_GATTC_EVT_DESC_DISC_RSP event. * - * @details Initiates primary service discovery. + * @details Update CCCD descriptor state and proceed to prompting user to toggle notifications. * - * @return NRF_SUCCESS on success, otherwise an error code. + * @param[in] p_ble_gattc_evt Descriptor Discovery Response Event. */ -static uint32_t service_discovery_start() +static void on_descriptor_discovery_response(const ble_gattc_evt_t * const p_ble_gattc_evt) { - uint32_t err_code; - uint16_t start_handle = 0x01; - ble_uuid_t srvc_uuid; + int count = p_ble_gattc_evt->params.desc_disc_rsp.count; - printf("Discovering primary services\n"); - fflush(stdout); + if (p_ble_gattc_evt->gatt_status != NRF_SUCCESS) + { + printf("Descriptor discovery failed. Error code 0x%X\n", p_ble_gattc_evt->gatt_status); + fflush(stdout); + return; + } - srvc_uuid.type = BLE_UUID_TYPE_BLE; - srvc_uuid.uuid = BLE_UUID_HEART_RATE_SERVICE; + printf("Received descriptor discovery response, descriptor count: %d\n", count); + fflush(stdout); - // Initiate procedure to find the primary BLE_UUID_HEART_RATE_SERVICE. - err_code = sd_ble_gattc_primary_services_discover(m_adapter, - m_connection_handle, start_handle, - &srvc_uuid); - if (err_code != NRF_SUCCESS) + for (int i = 0; i < count; i++) { - printf("Failed to initiate or continue a GATT Primary Service Discovery procedure\n"); + printf("Descriptor handle: 0x%04X, UUID: 0x%04X\n", + p_ble_gattc_evt->params.desc_disc_rsp.descs[i].handle, + p_ble_gattc_evt->params.desc_disc_rsp.descs[i].uuid.uuid); fflush(stdout); - } - return err_code; + if (p_ble_gattc_evt->params.desc_disc_rsp.descs[i].uuid.uuid == BLE_UUID_CCCD) + { + m_hrm_cccd_handle = p_ble_gattc_evt->params.desc_disc_rsp.descs[i].handle; + printf("Press enter to toggle notifications on the HRM characteristic\n"); + fflush(stdout); + } + } } -/**@brief Function called upon discovering a BLE peripheral's primary service(s). - * - * @details Initiates service's (m_service) characteristic discovery. +/**@brief Function called on BLE_GATTC_EVT_WRITE_RSP event. * - * @return NRF_SUCCESS on success, otherwise an error code. + * @param[in] p_ble_gattc_evt Write Response Event. */ -static uint32_t char_discovery_start() +static void on_write_response(const ble_gattc_evt_t * const p_ble_gattc_evt) { - ble_gattc_handle_range_t handle_range; - - printf("Discovering characteristics\n"); + printf("Received write response.\n"); fflush(stdout); - handle_range.start_handle = m_service_start_handle; - handle_range.end_handle = m_service_end_handle; - - return sd_ble_gattc_characteristics_discover(m_adapter, m_connection_handle, &handle_range); + if (p_ble_gattc_evt->gatt_status != NRF_SUCCESS) + { + printf("Error. Write operation failed. Error code 0x%X\n", p_ble_gattc_evt->gatt_status); + fflush(stdout); + } } -/**@brief Function called upon discovering service's characteristics. +/**@brief Function called on BLE_GATTC_EVT_HVX event. * - * @details Initiates heart rate monitor (m_hrm_char_handle) characteristic's descriptor discovery. + * @details Logs the received heart rate measurement. * - * @return NRF_SUCCESS on success, otherwise an error code. + * @param[in] p_ble_gattc_evt Handle Value Notification/Indication Event. */ -static uint32_t descr_discovery_start() +static void on_hvx(const ble_gattc_evt_t * const p_ble_gattc_evt) { - ble_gattc_handle_range_t handle_range; + if (p_ble_gattc_evt->params.hvx.handle >= m_hrm_char_handle || + p_ble_gattc_evt->params.hvx.handle <= m_hrm_cccd_handle) // Heart rate measurement. + { + // We know the heart rate reading is encoded as 2 bytes [flag, value]. + printf("Received heart rate measurement: %d\n", p_ble_gattc_evt->params.hvx.data[1]); + } + else // Unknown data. + { + printf("Un-parsed data received on handle: %04X\n", p_ble_gattc_evt->params.hvx.handle); + } - printf("Discovering characteristic's descriptors\n"); fflush(stdout); +} - if (m_hrm_char_handle == 0) +/**@brief Function called on BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST event. + * + * @details Update GAP connection parameters. + * + * @param[in] p_ble_gap_evt Connection Parameter Update Event. + */ +static void on_conn_params_update_request(const ble_gap_evt_t * const p_ble_gap_evt) +{ + uint32_t err_code = sd_ble_gap_conn_param_update(m_adapter, m_connection_handle, + &(p_ble_gap_evt-> + params.conn_param_update_request.conn_params)); + if (err_code != NRF_SUCCESS) { - printf("No heart rate measurement characteristic handle found\n"); + printf("Conn params update failed, err_code %d\n", err_code); fflush(stdout); - return NRF_ERROR_INVALID_STATE; } - - handle_range.start_handle = m_hrm_char_handle; - handle_range.end_handle = m_service_end_handle; - - return sd_ble_gattc_descriptors_discover(m_adapter, m_connection_handle, &handle_range); } -/**@brief Function that write's the HRM characteristic's CCCD. - * * - * @return NRF_SUCCESS on success, otherwise an error code. +#if NRF_SD_BLE_API >= 3 +/**@brief Function called on BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST event. + * + * @details Replies to an ATT_MTU exchange request by sending an Exchange MTU Response to the client. + * + * @param[in] p_ble_gatts_evt Exchange MTU Request Event. */ -static uint32_t hrm_cccd_set(uint8_t value) +static void on_exchange_mtu_request(const ble_gatts_evt_t * const p_ble_gatts_evt) { - ble_gattc_write_params_t write_params; - uint8_t cccd_value[2] = {value, 0}; - - printf("Setting HRM CCCD\n"); - fflush(stdout); + uint32_t err_code = sd_ble_gatts_exchange_mtu_reply( + m_adapter, + m_connection_handle, +#if NRF_SD_BLE_API < 5 + GATT_MTU_SIZE_DEFAULT); +#else + BLE_GATT_ATT_MTU_DEFAULT); +#endif - if (m_hrm_cccd_handle == 0) + if (err_code != NRF_SUCCESS) { - printf("Error. No CCCD handle has been found\n"); + printf("MTU exchange request reply failed, err_code %d\n", err_code); fflush(stdout); - return NRF_ERROR_INVALID_STATE; } +} - write_params.handle = m_hrm_cccd_handle; - write_params.len = 2; - write_params.p_value = cccd_value; - write_params.write_op = BLE_GATT_OP_WRITE_REQ; - write_params.offset = 0; +/**@brief Function called on BLE_GATTC_EVT_EXCHANGE_MTU_RSP event. + * + * @details Logs the new BLE server RX MTU size. + * + * @param[in] p_ble_gattc_evt Exchange MTU Response Event. + */ +static void on_exchange_mtu_response(const ble_gattc_evt_t * const p_ble_gattc_evt) +{ + uint16_t server_rx_mtu = p_ble_gattc_evt->params.exchange_mtu_rsp.server_rx_mtu; - return sd_ble_gattc_write(m_adapter, m_connection_handle, &write_params); + printf("MTU response received. New ATT_MTU is %d\n", server_rx_mtu); + fflush(stdout); } +#endif + + +/** Event dispatcher */ /**@brief Function for handling the Application's BLE Stack events. * @@ -892,6 +993,9 @@ static void ble_evt_dispatch(adapter_t * adapter, ble_evt_t * p_ble_evt) } } + +/** Main */ + /**@brief Function for application main entry. * * @param[in] argc Number of arguments (program expects 0 or 1 arguments). @@ -969,7 +1073,7 @@ int main(int argc, char * argv[]) } // Endlessly loop. - for (; ;) + for (;;) { char c = (char)getchar(); if (c == 'q' || c == 'Q') diff --git a/examples/heart_rate_monitor/CMakeLists.txt b/examples/heart_rate_monitor/CMakeLists.txt deleted file mode 100644 index ad6277192..000000000 --- a/examples/heart_rate_monitor/CMakeLists.txt +++ /dev/null @@ -1,49 +0,0 @@ -cmake_minimum_required(VERSION 3.3) - -# Use multithreaded Boost libraries -set(Boost_USE_MULTITHREADED ON) - -# Use static boost libraries so the dynamic library -# can run anywhere -set(Boost_USE_STATIC_LIBS ON) - -# Find the necessary boost components on the system. -# Minimum version required is 1.54.0 -find_package ( Boost 1.54.0 REQUIRED COMPONENTS thread system regex date_time chrono ) - -link_directories ( - ../../build -) - -include_directories ( - ../../include/common/sdk_compat - ../../include/common - ../../include/common/internal/transport -) - -if(MSVC) - add_definitions(-DPC_BLE_DRIVER_STATIC) - add_definitions(-D_CRT_SECURE_NO_WARNINGS) -endif() - -# Build executable -add_executable(hrm_v2 main.c) -add_executable(hrm_v5 main.c) - -target_compile_definitions(hrm_v2 PRIVATE -DNRF_SD_BLE_API=2) -target_compile_definitions(hrm_v5 PRIVATE -DNRF_SD_BLE_API=5) - -target_include_directories(hrm_v2 PRIVATE ../../src/sd_api_v2/sdk/components/softdevice/s132/headers) -target_include_directories(hrm_v5 PRIVATE ../../src/sd_api_v5/sdk/components/softdevice/s132/headers) - -# Specify libraries to link with -if (MSVC) - target_link_libraries(hrm_v2 PRIVATE pc_ble_driver_static_sd_api_v2) - target_link_libraries(hrm_v5 PRIVATE pc_ble_driver_static_sd_api_v5) - else() - target_link_libraries(hrm_v2 PRIVATE pc_ble_driver_shared_sd_api_v2) - target_link_libraries(hrm_v5 PRIVATE pc_ble_driver_shared_sd_api_v5) -endif() - -target_link_libraries(hrm_v2 PRIVATE ${Boost_LIBRARIES}) -target_link_libraries(hrm_v5 PRIVATE ${Boost_LIBRARIES}) diff --git a/examples/heart_rate_monitor/main.c b/examples/heart_rate_monitor/main.c index 66469eb43..0a18a3170 100644 --- a/examples/heart_rate_monitor/main.c +++ b/examples/heart_rate_monitor/main.c @@ -1,14 +1,41 @@ -/* Copyright (c) 2015 Nordic Semiconductor. All Rights Reserved. +/* + * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA + * All rights reserved. * - * The information contained herein is property of Nordic Semiconductor ASA. - * Terms and conditions of usage are described in detail in NORDIC - * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: * - * Licensees are granted free, non-transferable use of the information. NO - * WARRANTY of ANY KIND is provided. This heading must NOT be removed from - * the file. + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + /**@example examples/heart_rate_monitor * * @brief Heart Rate Service Sample Application main file. @@ -16,8 +43,22 @@ * This file contains the source code for a sample application using the Heart Rate service. * This service exposes heart rate data from a Heart Rate Sensor intended for fitness applications. * https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth.service.heart_rate.xml + * + * Structure of this file + * - Includes + * - Definitions + * - Global variables + * - Global functions + * - Event functions + * - Event dispatcher + * - Main */ +/** Includes */ +#ifndef _WIN32 +#define _DEFAULT_SOURCE // Get rid of usleep warnings +#endif + #include "ble.h" #include "sd_rpc.h" @@ -34,6 +75,8 @@ #define Sleep(x) usleep((x)*1000) #endif + +/** Definitions */ #ifdef _WIN32 #define DEFAULT_UART_PORT_NAME "COM1" #define DEFAULT_BAUD_RATE 1000000 /**< The baud rate to be used for serial communication with nRF5 device. */ @@ -72,6 +115,8 @@ #define GATT_MTU_SIZE_DEFAULT BLE_GATT_ATT_MTU_DEFAULT #endif + +/** Global variables */ static uint16_t m_connection_handle = BLE_CONN_HANDLE_INVALID; static uint16_t m_heart_rate_service_handle = 0; static ble_gatts_char_handles_t m_heart_rate_measurement_handle; @@ -79,9 +124,18 @@ static uint8_t m_heart_rate = HEART_RATE_BAS static bool m_send_notifications = false; static bool m_advertisement_timed_out = false; static adapter_t * m_adapter = NULL; + +#if NRF_SD_BLE_API >= 5 static uint32_t m_config_id = 1; +#endif + +#if NRF_SD_BLE_API >= 6 +static uint8_t m_adv_handle = 0; +static ble_gap_adv_params_t m_adv_params; +#endif -static uint32_t advertising_start(); + +/** Global functions */ /**@brief Function for handling error message events from sd_rpc. * @@ -127,105 +181,6 @@ static void log_handler(adapter_t * adapter, sd_rpc_log_severity_t severity, con } } -/**@brief Function for handling the Application's BLE Stack events. - * - * @param[in] adapter The transport adapter. - * @param[in] p_ble_evt Bluetooth stack event. - */ -static void ble_evt_dispatch(adapter_t * adapter, ble_evt_t * p_ble_evt) -{ - uint32_t err_code; - - if (p_ble_evt == NULL) - { - printf("Received an empty BLE event\n"); - fflush(stdout); - return; - } - - switch (p_ble_evt->header.evt_id) - { - case BLE_GAP_EVT_CONNECTED: - m_connection_handle = p_ble_evt->evt.gap_evt.conn_handle; - printf("Connected, connection handle 0x%04X\n", m_connection_handle); - fflush(stdout); - break; - - case BLE_GAP_EVT_DISCONNECTED: - printf("Disconnected\n"); - fflush(stdout); - m_connection_handle = BLE_CONN_HANDLE_INVALID; - m_send_notifications = false; - advertising_start(); - break; - - case BLE_GAP_EVT_TIMEOUT: - printf("Advertisement timed out\n"); - fflush(stdout); - m_advertisement_timed_out = true; - break; - - case BLE_GAP_EVT_SEC_PARAMS_REQUEST: - err_code = sd_ble_gap_sec_params_reply(adapter, m_connection_handle, - BLE_GAP_SEC_STATUS_SUCCESS, NULL, NULL); - - if (err_code != NRF_SUCCESS) - { - printf("Failed reply with GAP security parameters. Error code: 0x%02X\n", err_code); - fflush(stdout); - } - break; - - case BLE_GATTS_EVT_SYS_ATTR_MISSING: - err_code = sd_ble_gatts_sys_attr_set(adapter, m_connection_handle, NULL, 0, 0); - - if (err_code != NRF_SUCCESS) - { - printf("Failed updating persistent sys attr info. Error code: 0x%02X\n", err_code); - fflush(stdout); - } - break; - - case BLE_GATTS_EVT_WRITE: - if (p_ble_evt->evt.gatts_evt.params.write.handle == - m_heart_rate_measurement_handle.cccd_handle) - { - uint8_t write_data = p_ble_evt->evt.gatts_evt.params.write.data[0]; - m_send_notifications = write_data == BLE_GATT_HVX_NOTIFICATION; - } - break; - -#if NRF_SD_BLE_API >= 3 - case BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST: - err_code = sd_ble_gatts_exchange_mtu_reply(adapter, m_connection_handle, - GATT_MTU_SIZE_DEFAULT); - - if (err_code != NRF_SUCCESS) - { - printf("MTU exchange request reply failed. Error code: 0x%02X\n", err_code); - fflush(stdout); - } - break; -#endif - -#if NRF_SD_BLE_API <= 3 - case BLE_EVT_TX_COMPLETE: -#else - case BLE_GATTS_EVT_HVN_TX_COMPLETE: -#endif -#ifdef DEBUG - printf("Successfully transmitted a heart rate reading."); - fflush(stdout); -#endif - break; - - default: - printf("Received an un-handled event with ID: %d\n", p_ble_evt->header.evt_id); - fflush(stdout); - break; - } -} - /**@brief Function for initializing serial communication with the target nRF5 Bluetooth slave. * * @param[in] serial_port The serial port the target nRF5 device is connected to. @@ -238,7 +193,9 @@ static adapter_t * adapter_init(char * serial_port, uint32_t baud_rate) data_link_layer_t * data_link_layer; transport_layer_t * transport_layer; - phy = sd_rpc_physical_layer_create_uart(serial_port, baud_rate, SD_RPC_FLOW_CONTROL_NONE, + phy = sd_rpc_physical_layer_create_uart(serial_port, + baud_rate, + SD_RPC_FLOW_CONTROL_NONE, SD_RPC_PARITY_NONE); data_link_layer = sd_rpc_data_link_layer_create_bt_three_wire(phy, 100); transport_layer = sd_rpc_transport_layer_create(data_link_layer, 100); @@ -260,18 +217,19 @@ static uint32_t ble_stack_init() #endif #if NRF_SD_BLE_API == 3 - ble_enable_params.gatt_enable_params.att_mtu = GATT_MTU_SIZE_DEFAULT; + ble_enable_params.gatt_enable_params.att_mtu = GATT_MTU_SIZE_DEFAULT; #elif NRF_SD_BLE_API < 3 - ble_enable_params.gatts_enable_params.attr_tab_size = BLE_GATTS_ATTR_TAB_SIZE_DEFAULT; - ble_enable_params.gatts_enable_params.service_changed = false; - ble_enable_params.gap_enable_params.periph_conn_count = 1; - ble_enable_params.gap_enable_params.central_conn_count = 0; - ble_enable_params.gap_enable_params.central_sec_count = 0; + ble_enable_params.gatts_enable_params.attr_tab_size = BLE_GATTS_ATTR_TAB_SIZE_DEFAULT; + ble_enable_params.gatts_enable_params.service_changed = false; ble_enable_params.common_enable_params.p_conn_bw_counts = NULL; - ble_enable_params.common_enable_params.vs_uuid_count = 1; + ble_enable_params.common_enable_params.vs_uuid_count = 1; #endif #if NRF_SD_BLE_API <= 3 + ble_enable_params.gap_enable_params.periph_conn_count = 1; + ble_enable_params.gap_enable_params.central_conn_count = 1; + ble_enable_params.gap_enable_params.central_sec_count = 1; + err_code = sd_ble_enable(m_adapter, &ble_enable_params, app_ram_base); #else err_code = sd_ble_enable(m_adapter, app_ram_base); @@ -294,6 +252,10 @@ static uint32_t ble_stack_init() } #if NRF_SD_BLE_API >= 5 +/**@brief Function for setting configuration for the BLE stack. + * + * @return NRF_SUCCESS on success, otherwise an error code. + */ uint32_t ble_cfg_set(uint8_t conn_cfg_tag) { const uint32_t ram_start = 0; // Value is not used by ble-driver @@ -360,10 +322,48 @@ static uint32_t advertisement_data_set() data_buffer[index++] = (BLE_UUID_HEART_RATE_SERVICE & 0xFF00) >> 8; // No scan response. + +#if NRF_SD_BLE_API <= 5 const uint8_t * sr_data = NULL; const uint8_t sr_data_length = 0; error_code = sd_ble_gap_adv_data_set(m_adapter, data_buffer, index, sr_data, sr_data_length); +#endif +#if NRF_SD_BLE_API >= 6 + ble_gap_adv_properties_t adv_properties; + adv_properties.type = BLE_GAP_ADV_TYPE_CONNECTABLE_SCANNABLE_UNDIRECTED; + adv_properties.anonymous = 0; + adv_properties.include_tx_power = 0; + + m_adv_params.properties = adv_properties; + m_adv_params.filter_policy = BLE_GAP_ADV_FP_ANY; + m_adv_params.duration = BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED; + m_adv_params.p_peer_addr = NULL; + m_adv_params.interval = ADVERTISING_INTERVAL_40_MS; + m_adv_params.max_adv_evts = 0; + m_adv_params.primary_phy = BLE_GAP_PHY_AUTO; + m_adv_params.secondary_phy = BLE_GAP_PHY_AUTO; + m_adv_params.channel_mask[0] = 0; + m_adv_params.channel_mask[1] = 0; + m_adv_params.channel_mask[2] = 0; + m_adv_params.channel_mask[3] = 0; + m_adv_params.channel_mask[4] = 0; + + ble_gap_adv_data_t m_adv_data; + + ble_data_t adv_data; + adv_data.p_data = data_buffer; + adv_data.len = index; + + ble_data_t scan_rsp_data; + scan_rsp_data.p_data = NULL; + scan_rsp_data.len = 0; + + m_adv_data.adv_data = adv_data; + m_adv_data.scan_rsp_data = scan_rsp_data; + + error_code = sd_ble_gap_adv_set_configure(m_adapter, &m_adv_handle, &m_adv_data, &m_adv_params); +#endif if (error_code != NRF_SUCCESS) { @@ -385,20 +385,25 @@ static uint32_t advertising_start() { uint32_t error_code; ble_gap_adv_params_t adv_params; + memset(&adv_params, 0, sizeof(adv_params)); - adv_params.type = BLE_GAP_ADV_TYPE_ADV_IND; - adv_params.p_peer_addr = NULL; // Undirected advertisement. - adv_params.fp = BLE_GAP_ADV_FP_ANY; - adv_params.interval = ADVERTISING_INTERVAL_40_MS; - adv_params.timeout = ADVERTISING_TIMEOUT_3_MIN; +#if NRF_SD_BLE_API <= 5 + adv_params.type = BLE_GAP_ADV_TYPE_ADV_IND; + adv_params.fp = BLE_GAP_ADV_FP_ANY; + adv_params.timeout = ADVERTISING_TIMEOUT_3_MIN; +#endif #if NRF_SD_BLE_API == 2 adv_params.p_whitelist = NULL; #endif + adv_params.interval = ADVERTISING_INTERVAL_40_MS; + #if NRF_SD_BLE_API <= 3 error_code = sd_ble_gap_adv_start(m_adapter, &adv_params); -#else +#elif NRF_SD_BLE_API == 5 error_code = sd_ble_gap_adv_start(m_adapter, &adv_params, m_config_id); +#elif NRF_SD_BLE_API >= 6 + error_code = sd_ble_gap_adv_start(m_adapter, m_adv_handle, m_config_id); #endif if (error_code != NRF_SUCCESS) @@ -587,6 +592,102 @@ static uint32_t heart_rate_measurement_send() return NRF_SUCCESS; } + +/** Event functions */ + + +/** Event dispatcher */ + +/**@brief Function for handling the Application's BLE Stack events. + * + * @param[in] adapter The transport adapter. + * @param[in] p_ble_evt Bluetooth stack event. + */ +static void ble_evt_dispatch(adapter_t * adapter, ble_evt_t * p_ble_evt) +{ + uint32_t err_code; + + if (p_ble_evt == NULL) + { + printf("Received an empty BLE event\n"); + fflush(stdout); + return; + } + + switch (p_ble_evt->header.evt_id) + { + case BLE_GAP_EVT_CONNECTED: + m_connection_handle = p_ble_evt->evt.gap_evt.conn_handle; + printf("Connected, connection handle 0x%04X\n", m_connection_handle); + fflush(stdout); + break; + + case BLE_GAP_EVT_DISCONNECTED: + printf("Disconnected\n"); + fflush(stdout); + m_connection_handle = BLE_CONN_HANDLE_INVALID; + m_send_notifications = false; + advertising_start(); + break; + + case BLE_GAP_EVT_TIMEOUT: + printf("Advertisement timed out\n"); + fflush(stdout); + m_advertisement_timed_out = true; + break; + + case BLE_GATTS_EVT_SYS_ATTR_MISSING: + err_code = sd_ble_gatts_sys_attr_set(adapter, m_connection_handle, NULL, 0, 0); + + if (err_code != NRF_SUCCESS) + { + printf("Failed updating persistent sys attr info. Error code: 0x%02X\n", err_code); + fflush(stdout); + } + break; + + case BLE_GATTS_EVT_WRITE: + if (p_ble_evt->evt.gatts_evt.params.write.handle == + m_heart_rate_measurement_handle.cccd_handle) + { + uint8_t write_data = p_ble_evt->evt.gatts_evt.params.write.data[0]; + m_send_notifications = write_data == BLE_GATT_HVX_NOTIFICATION; + } + break; + +#if NRF_SD_BLE_API >= 3 + case BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST: + err_code = sd_ble_gatts_exchange_mtu_reply(adapter, m_connection_handle, + GATT_MTU_SIZE_DEFAULT); + + if (err_code != NRF_SUCCESS) + { + printf("MTU exchange request reply failed. Error code: 0x%02X\n", err_code); + fflush(stdout); + } + break; +#endif + +#if NRF_SD_BLE_API <= 3 + case BLE_EVT_TX_COMPLETE: +#else + case BLE_GATTS_EVT_HVN_TX_COMPLETE: +#endif +#ifdef DEBUG + printf("Successfully transmitted a heart rate reading."); + fflush(stdout); +#endif + break; + + default: + printf("Received an un-handled event with ID: %d\n", p_ble_evt->header.evt_id); + fflush(stdout); + break; + } +} + +/** Main */ + /**@brief Function for application main entry. * * @param[in] argc Number of arguments (program expects 0 or 1 arguments). @@ -597,7 +698,6 @@ int main(int argc, char * argv[]) uint32_t error_code; char * serial_port = DEFAULT_UART_PORT_NAME; uint32_t baud_rate = DEFAULT_BAUD_RATE; - uint8_t cccd_value = 0; if (argc > 2) { @@ -637,7 +737,12 @@ int main(int argc, char * argv[]) } #if NRF_SD_BLE_API >= 5 - ble_cfg_set(m_config_id); + error_code = ble_cfg_set(m_config_id); + + if (error_code != NRF_SUCCESS) + { + return error_code; + } #endif error_code = ble_stack_init(); diff --git a/hex/CMakeLists.txt b/hex/CMakeLists.txt new file mode 100644 index 000000000..9c9f03f8f --- /dev/null +++ b/hex/CMakeLists.txt @@ -0,0 +1,332 @@ +cmake_minimum_required(VERSION 3.11) +project(connectivity) + +#[[ + This CMake file uses directory structure conventions in the SDKs + supported (v11 and v15) to supply information to targets and create them. +]] + +set(GIT_REQUIRED_VERSION "2.19.0") + +include(../cmake/nrf-download-distfile.cmake) +include(../cmake/nrf-apply-patches.cmake) +include(./cmake/util.cmake) + +find_program(MAKE "make") +find_program(MERGEHEX "mergehex" HINTS "c:/Program Files (x86)/Nordic Semiconductor/nrf5x/bin") +find_program(NRFUTIL "nrfutil") +find_program(GIT "git") + +if(NOT DEFINED CONNECTIVITY_VERSION) + message(FATAL_ERROR "CONNECTIVITY_VERSION not provided, terminating compilation.") +endif() + +if(NOT DEFINED ENV{GCCARMEMB_TOOLCHAIN_PATH}) + message(FATAL_ERROR "GNU Tools ARM Embedded environment variable GCCARMEMB_TOOLCHAIN_PATH not set. Stopping build.") +else() + set(GCC_TOOLCHAIN_PATH "$ENV{GCCARMEMB_TOOLCHAIN_PATH}") +endif() + +#message(STATUS "GCC_TOOLCHAIN_PATH: ${GCC_TOOLCHAIN_PATH}") +#message(STATUS "MERGEHEX: ${MERGEHEX}") +#message(STATUS "NRFUTIL: ${NRFUTIL}") + +set(PCA_BLACKLIST "pca10036;") + +if(NOT MERGEHEX) + message(FATAL_ERROR "mergehex not found, not able to merge connectivity firmware with SoftDevice.") +endif() + +if(NOT NRFUTIL) + message(FATAL_ERROR "nrfutil not found, not able to create DFU packages of connectivity firmware.") +endif() + +if(NOT MAKE) + message(FATAL_ERROR "make not found, not able to compile connectivity firmware.") +endif() + +if(NOT GIT) + message(FATAL_ERROR "git not found, not able to compile connectivity firmware.") +endif() + +execute_process( + COMMAND ${GIT} "--version" + OUTPUT_VARIABLE version_info + RESULT_VARIABLE result +) + +string(STRIP "${version_info}" version_info) + +string(REGEX MATCH "([0-9]+\.[0-9]+\.[0-9]+)" found_version "${version_info}") + +if (found_version VERSION_LESS "2.19.0") + message(FATAL_ERROR "git version ${found_version} found, version ${GIT_REQUIRED_VERSION} or higher required.") +endif() + +function(nrf_get_hex_paths SDK_ROOT SDK_VERSION PROJECT_PATH APP_HEX_PATH SOFTDEVICE_HEX_PATH) + set(PROJECT_NAME) + set(PCA_TYPE) + set(SOFTDEVICE_TYPE_VERSION) + set(TRANSPORT) + + nrf_extract_info_from_path(${PROJECT_PATH} PROJECT_NAME PCA_TYPE SOFTDEVICE_TYPE_VERSION TRANSPORT) + set(SOFTDEVICE_SEARCH_PATH "${SDK_ROOT}/components/softdevice/${SOFTDEVICE_TYPE_VERSION}/hex/*.hex") + file(GLOB FOUND_SOFTDEVICE_HEX "${SOFTDEVICE_SEARCH_PATH}") + + if(FOUND_SOFTDEVICE_HEX STREQUAL "") + message(FATAL_ERROR "No SoftDevice found for project ${PROJECT_PATH}. Tried to locate it in ${SOFTDEVICE_SEARCH_PATH}") + endif() + + set(ALTERNATIVE_SOFTDEVICE_HEX) + nrf_find_alternative_softdevice(${FOUND_SOFTDEVICE_HEX} ALTERNATIVE_SOFTDEVICE_HEX) + + if(ALTERNATIVE_SOFTDEVICE_HEX) + set(FOUND_SOFTDEVICE_HEX "${ALTERNATIVE_SOFTDEVICE_HEX}") + endif() + + set(SOFTDEVICE_HEX_PATH "${FOUND_SOFTDEVICE_HEX}" PARENT_SCOPE) + + if(${PCA_TYPE} STREQUAL "pca10028" OR ${PCA_TYPE} STREQUAL "pca10031") + if(SDK_VERSION EQUAL 11) + set(APP_HEX_PATH "${PROJECT_PATH}/_build/nrf51422_xxac_s130.hex" PARENT_SCOPE) + else() + message(STATUS "${PCA_TYPE} is not supported in SDK ${SDK_VERSION}") + endif() + elseif(${PCA_TYPE} STREQUAL "pca10036") + if(SDK_VERSION EQUAL 11) + set(APP_HEX_PATH "${PROJECT_PATH}/_build/nrf52832_xxaa_s132.hex" PARENT_SCOPE) + else() + message(STATUS "${PCA_TYPE} is not supported in SDK ${SDK_VERSION}") + endif() + elseif(${PCA_TYPE} STREQUAL "pca10040") + if(SDK_VERSION EQUAL 11) + set(APP_HEX_PATH "${PROJECT_PATH}/_build/nrf52832_xxaa_s132.hex" PARENT_SCOPE) + else() + set(APP_HEX_PATH "${PROJECT_PATH}/_build/nrf52832_xxaa.hex" PARENT_SCOPE) + endif() + elseif(${PCA_TYPE} STREQUAL "pca10056" OR ${PCA_TYPE} STREQUAL "pca10059") + set(APP_HEX_PATH "${PROJECT_PATH}/_build/nrf52840_xxaa.hex" PARENT_SCOPE) + else() + message(STATUS "Not able to determine app hex path.") + endif() +endfunction() + +function(nrf_create_connectivity_compile_targets) + set(oneValueArgs PROJECT_DIRECTORY SDK_ROOT SDK_VERSION VERSION) + cmake_parse_arguments(nrf_create_connectivity_compile_targets "" "${oneValueArgs}" "${multipleValuesArgs}" ${ARGN}) + + if(NOT DEFINED nrf_create_connectivity_compile_targets_PROJECT_DIRECTORY) + message(FATAL_ERROR "nrf_create_connectivity_compile_targets requires a PROJECT_DIRECTORY argument.") + endif() + + if(NOT DEFINED nrf_create_connectivity_compile_targets_VERSION) + message(FATAL_ERROR "nrf_create_connectivity_compile_targets requires a VERSION argument.") + endif() + + if(NOT DEFINED nrf_create_connectivity_compile_targets_SDK_ROOT) + message(FATAL_ERROR "nrf_create_connectivity_compile_targets requires a SDK_ROOT argument.") + endif() + + if(NOT DEFINED nrf_create_connectivity_compile_targets_SDK_VERSION) + message(FATAL_ERROR "nrf_create_connectivity_compile_targets requires a SDK_VERSION argument.") + endif() + + set(SDK_ROOT "${nrf_create_connectivity_compile_targets_SDK_ROOT}") + message(STATUS "SDK_ROOT:" ${SDK_ROOT}) + set(SDK_VERSION ${nrf_create_connectivity_compile_targets_SDK_VERSION}) + set(VERSION ${nrf_create_connectivity_compile_targets_VERSION}) + + set(PROJECT_FULL_PATH "${SDK_ROOT}/${nrf_create_connectivity_compile_targets_PROJECT_DIRECTORY}") + #message(STATUS "Searching for projects within project ${PROJECT_FULL_PATH}") + file(GLOB FOUND_PCA_PATHS "${PROJECT_FULL_PATH}/pca100[1-9][0-9]") + + foreach(PCA_PATH ${FOUND_PCA_PATHS}) + file(GLOB FOUND_PROJECTS "${PCA_PATH}/*_hci") + #message(STATUS "Found projects: ${FOUND_PROJECTS}") + + foreach(PROJECT ${FOUND_PROJECTS}) + set(PROJECT_NAME) + set(PCA_TYPE) + set(SOFTDEVICE_TYPE_VERSION) + set(TRANSPORT) + nrf_extract_info_from_path(${PROJECT} PROJECT_NAME PCA_TYPE SOFTDEVICE_TYPE_VERSION TRANSPORT) + set(TRANSPORTS) + + if(PROJECT_NAME AND NOT (PCA_TYPE IN_LIST PCA_BLACKLIST)) + message(STATUS "PROJECT_NAME:${PROJECT_NAME} PCA_TYPE:${PCA_TYPE} SD_TV: ${SOFTDEVICE_TYPE_VERSION} TRANSPORT:${TRANSPORT}") + + if(TRANSPORT STREQUAL "usb") + list(APPEND TRANSPORTS "usb") + endif() + + if(TRANSPORT STREQUAL "uart") + list(APPEND TRANSPORTS "115k2") + list(APPEND TRANSPORTS "1m") + endif() + + foreach(TRANSPORT ${TRANSPORTS}) + set(ARMGCC_PROJECT_DIRECTORY "${PROJECT}/armgcc") + + set(SOFTDEVICE_HEX_PATH) + set(APP_HEX_PATH) + nrf_get_hex_paths("${SDK_ROOT}" "${SDK_VERSION}" "${ARMGCC_PROJECT_DIRECTORY}" APP_HEX_PATH SOFTDEVICE_HEX_PATH) + #message(STATUS "APP_HEX_PATH: ${APP_HEX_PATH} SOFTDEVICE_HEX_PATH: ${SOFTDEVICE_HEX_PATH}") + + set(SD_VERSION) + set(SOC_FAMILY) + set(SD_API_VERSION) + set(SD_ID) + nrf_extract_softdevice_info("${SOFTDEVICE_HEX_PATH}" SD_VERSION SOC_FAMILY SD_API_VERSION SD_ID) + + set(TARGET_NAME "connectivity_${VERSION}_${TRANSPORT}_with_${SD_VERSION}_${SD_API_VERSION}") + + # Check if target name already exists + list(FIND CONNECTIVITY_BUILD_TARGETS "compile_${TARGET_NAME}" FOUND_TARGET) + + if(FOUND_TARGET GREATER -1) + message(STATUS "Target ${TARGET_NAME} already exists.") + else() + set(COMMAND_NAME "${TARGET_NAME}_cmd") + + set(SER_CONFIG_PATH) + set(MAIN_PATH) + nrf_configure_sdk_affected_files(${SDK_VERSION} ${SDK_ROOT} SER_CONFIG_PATH MAIN_PATH) + + set(SER_CONFIG_IN_PATH "${SER_CONFIG_PATH}.in") + if(NOT EXISTS ${SER_CONFIG_IN_PATH}) + message(FATAL_ERROR "ser_config.h.in not found. The SDK needs to be prepared. Please delete the build folder and try again (${SDK_ROOT}).") + endif() + + set(MAIN_IN_PATH "${MAIN_PATH}.in") + if(NOT EXISTS ${MAIN_IN_PATH}) + message(FATAL_ERROR "main.c.in not found. The SDK needs to be prepared. Please delete the build folder and try again (${SDK_ROOT}).") + endif() + + # Setup ser_config.h + add_custom_command( + OUTPUT "${COMMAND_NAME}" + COMMAND ${CMAKE_COMMAND} -DSDK_VERSION=${SDK_VERSION} -DSER_CONFIG_IN_PATH=${SER_CONFIG_IN_PATH} -DBAUD_RATE=${TRANSPORT} -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/build_cmd_ser_config.cmake + WORKING_DIRECTORY ${ARMGCC_PROJECT_DIRECTORY} + ) + + # Setup main.c + add_custom_command( + OUTPUT "${COMMAND_NAME}" + APPEND COMMAND ${CMAKE_COMMAND} -DMAIN_IN_PATH=${MAIN_IN_PATH} -DCONNECTIVITY_VERSION=${VERSION} -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/build_cmd_main.cmake + ) + + message(STATUS "Running make:${MAKE} in ARMGCC_PROJECT_DIRECTORY:${ARMGCC_PROJECT_DIRECTORY}") + + # Compile project + add_custom_command( + OUTPUT "${COMMAND_NAME}" + APPEND COMMAND ${MAKE} + ) + + set(HEX_MERGED "${TARGET_NAME}.hex") + + # Merge SoftDevice and application + add_custom_command( + OUTPUT "${COMMAND_NAME}" + APPEND COMMAND ${MERGEHEX} -m "${APP_HEX_PATH}" "${SOFTDEVICE_HEX_PATH}" -o "${HEX_MERGED}" + ) + + set(MAJOR) + set(MINOR) + set(PATCH) + nrf_extract_version_number("${SD_API_VERSION}" MAJOR MINOR PATCH) + set(OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/sd_api_v${MAJOR}") + + message(STATUS "Storing files in ${OUTPUT_DIRECTORY}") + + if(NOT EXISTS ${OUTPUT_DIRECTORY}) + message(STATUS "Adding step to create directory ${OUTPUT_DIRECTORY} during build process") + add_custom_command( + OUTPUT "${COMMAND_NAME}" + APPEND COMMAND ${CMAKE_COMMAND} -E make_directory ${OUTPUT_DIRECTORY} + ) + endif() + + # Copy merged file to binary directory + add_custom_command( + OUTPUT "${COMMAND_NAME}" + APPEND COMMAND ${CMAKE_COMMAND} -E copy "${HEX_MERGED}" "${OUTPUT_DIRECTORY}" + ) + + # Create a DFU package if it is a nRF52 device with USB support + if(SOC_FAMILY EQUAL 52 AND TRANSPORT STREQUAL "usb") + if(PCA_TYPE STREQUAL "pca10056" OR PCA_TYPE STREQUAL "pca10059") + set(DFU_PKG "${TARGET_NAME}_dfu_pkg.zip") + + add_custom_command( + OUTPUT "${COMMAND_NAME}" + APPEND COMMAND ${NRFUTIL} pkg generate "--application" "${APP_HEX_PATH}" "--hw-version" 52 "--sd-req" 0 "--sd-id" ${SD_ID} "--debug-mode" "--softdevice" "${SOFTDEVICE_HEX_PATH}" "${DFU_PKG}" + ) + + add_custom_command( + OUTPUT "${COMMAND_NAME}" + APPEND COMMAND ${CMAKE_COMMAND} -E copy "${DFU_PKG}" "${OUTPUT_DIRECTORY}" + ) + endif() + endif() + + # Make the last target added to list of targets a dependency to this target + # We need to make sure that the targets are compiled in sequence + # since the source code changes in every target (configuration of .in files) + list(LENGTH CONNECTIVITY_BUILD_TARGETS CONNECTIVITY_BUILD_TARGETS_LENGTH) + if(CONNECTIVITY_BUILD_TARGETS_LENGTH GREATER_EQUAL 1) + list(GET CONNECTIVITY_BUILD_TARGETS -1 PREVIOUS_TARGET) + endif() + + add_custom_target("compile_${TARGET_NAME}" DEPENDS ${COMMAND_NAME} ${PREVIOUS_TARGET}) + list(APPEND CONNECTIVITY_BUILD_TARGETS "compile_${TARGET_NAME}") + endif() + endforeach() + endif() + endforeach() + endforeach() + + set(CONNECTIVITY_BUILD_TARGETS ${CONNECTIVITY_BUILD_TARGETS} PARENT_SCOPE) +endfunction(nrf_create_connectivity_compile_targets) + +set(SDK_PATH ) +set(CONNECTIVITY_BUILD_TARGETS "") + +nrf_prepare_sdk( + SDK_VERSION 11 + URLS "https://developer.nordicsemi.com/nRF5_SDK/nRF5_SDK_v11.x.x/nRF5_SDK_11.0.0_89a8197.zip" + FILENAME "nRF5_SDK_11.0.0_89a8197.zip" + SHA512 4fe84c4080e2eab664672366a5abfcd605777297835b7b864e0f51f376cd946a28178dfda7e6cefdd04b791058038711d78901ec5d260477a68eb5527c3b2c06 + PATCH_FILES "${CMAKE_CURRENT_LIST_DIR}/nRF5_SDK_11.0.0_connectivity.patch" +) + +nrf_create_connectivity_compile_targets( + SDK_VERSION 11 + SDK_ROOT "${SDK_PATH}" + PROJECT_DIRECTORY "examples/ble_central_and_peripheral/ble_connectivity" + VERSION "${CONNECTIVITY_VERSION}" +) + +nrf_prepare_sdk( + SDK_VERSION 15 + URLS "https://developer.nordicsemi.com/nRF5_SDK/nRF5_SDK_v15.x.x/nRF5_SDK_15.2.0_9412b96.zip" + FILENAME "nRF5_SDK_15.2.0_9412b96.zip" + SHA512 6ed3cbcbb798775557affc9a323f2665629e17359aaf8ae2e2f70c99645862185ae5d0f8fa46b17ade2af7e6dd7a62e6292b01f4e883107265c3c39c3eb22b46 + PATCH_FILES "${CMAKE_CURRENT_LIST_DIR}/nRF5_SDK_15.2.0_connectivity.patch" +) + +nrf_create_connectivity_compile_targets( + SDK_VERSION 15 + SDK_ROOT "${SDK_PATH}" + PROJECT_DIRECTORY "examples/connectivity/ble_connectivity" + VERSION "${CONNECTIVITY_VERSION}" +) + +# Add a connectivity compilation target that depends on the last target added to CONNECTIVITY_BUILD_TARGETS +# This target makes it easier for the developer to know which target to invoke to compile +# all versions of connectivity firmware +list(LENGTH CONNECTIVITY_BUILD_TARGETS CONNECTIVITY_BUILD_TARGETS_LENGTH) +if(CONNECTIVITY_BUILD_TARGETS_LENGTH GREATER_EQUAL 1) + list(GET CONNECTIVITY_BUILD_TARGETS -1 PREVIOUS_TARGET) + add_custom_target("compile_connectivity" DEPENDS ${PREVIOUS_TARGET}) +endif() diff --git a/hex/README.md b/hex/README.md new file mode 100644 index 000000000..460e4be37 --- /dev/null +++ b/hex/README.md @@ -0,0 +1,9 @@ +# Getting started with connectivity firmware + +Connectivity firmware is located in sd_api_v\ after compilation from source. + +## Compile connectivity firmware +[Compile instructions](/README.md#Compiling-connectivity-hex-files) + +## Program connectivity firmware to nRF5x +[Program instructions](/README.md#Programming-connectivity-hex-files) diff --git a/hex/bootstrap.sh b/hex/bootstrap.sh deleted file mode 100755 index 21d68db5b..000000000 --- a/hex/bootstrap.sh +++ /dev/null @@ -1,240 +0,0 @@ -#!/bin/bash -# -# Download an patch the nRF5 SDK in order to compile the connectivity application. -# -# The SDK download link can be configured. The SDK is downloaded and extracted to -# the configured folder. A custom patch file is then be applied. -# -# All the paths provided as arguments are relative to the location of this script. -# Usage: Usage: bootstrap -l link -d destination -p patch [-h] -# -# Adapted from 'https://github.com/NordicPlayground/nrf5-sdk-for-eddystone'. -# Version 0.5 - -ABS_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" - -# SDK download link (as zip file, full URL with extension) -function set_sdk_link () { - SDK_LINK=$1 - - SDK_FILE=${SDK_LINK##*/} # SDK file name with extension - SDK_NAME=${SDK_FILE%.zip} # SDK folder name without extension -} - -function set_familypack_link () { - FAMILYPACK_LINK=$1 - - FAMILYPACK_FILE=${FAMILYPACK_LINK##*/} - FAMILYPACK_NAME=${FAMILYPACK_FILE%.pack} -} - -# Configuration of the destination folder (relative path from this script) -function set_dl_location () { - DL_LOCATION="$ABS_PATH/$1" -} - -# Configuration of the patch file name (relative path from this script) -function set_patch_file () { - PATCH_FILE="$ABS_PATH/$1" -} - -function usage () { - echo "Usage: bootstrap -l link -d destination -p patch [-h]" - echo - echo " -l, --link SDK download link" - echo " -d, --dest Destination folder of the downloaded SDK" - echo " -p, --patch Patch file to apply to the downloaded SDK" - echo - echo " -h, --help Show this help message" -} - -# Display an error message -function error () { - printf "\e[1;31m[ERROR] $1\e[0;0m\r\n" -} - -# Display a fatal error and exit -function fatal () { - error "$@" - exit -} - -# Check if the required program are available -function check_requirements () { - command -v unzip >/dev/null 2>&1 || { fatal "Unzip is not available"; } - command -v curl >/dev/null 2>&1 || { fatal "Curl is not available"; } - command -v git >/dev/null 2>&1 || { fatal "Git is not available"; } - command -v patch >/dev/null 2>&1 || { fatal "Patch is not available"; } -} - -# Check if the required parameters have been set -function check_config () { - if [[ -z "${SDK_LINK}" ]]; then - error "Download SDK link has not been set" - usage - exit - fi - - if [[ -z "${DL_LOCATION}" ]]; then - error "Download location folder has not been set" - usage - exit - fi - - if [[ -z "${PATCH_FILE}" ]]; then - error "Patch file has not been set" - usage - exit - fi -} - -# Check if the SDK folder already exist -function sdk_exists () { - if [[ -d $DL_LOCATION && -d $DL_LOCATION/$SDK_NAME ]]; then - # Erase the existing SDK folder if needed - echo "> SDK folder '${SDK_NAME}' already available" - read -p "> Do you want to erase the existing SDK folder [Y/n]? " -n 1 -r - echo - - if [[ $REPLY =~ ^[Y]$ ]]; then - echo "> Deleting existing SDK folder..." - rm -rf $DL_LOCATION/$SDK_NAME - else - return 0 # Exists - fi - fi - - # No SDK folder available - return 1 -} - -# Patch the downloaded SDK in order to compile the connectivity application -function sdk_patch () { - # Detect which OS is running - UNAME="$(uname)" - # If OS is Linux or Darwin - # Change the format of line ending to unix - if [[ "${UNAME}" == "Linux" ]]; then - echo "> Modifying SDK line ending format..." - find $DL_LOCATION/$SDK_NAME/ -type f -exec sed -i $'s/\r//' {} \; - fi - if [[ "${UNAME}" == "Darwin" ]]; then - echo "> Modifying SDK line ending format..." - LC_CTYPE=C - find $DL_LOCATION/$SDK_NAME/ -type f -exec sed -i '' $'s/\r//' {} \; - fi - - echo "> Applying SDK patch '${PATCH_FILE}'..." - - # Apply the patch from the base nRF SDK folder (remove the first portion of the path) - # FIXME: check if the patch has been already applied - patch -d $DL_LOCATION/$SDK_NAME/ -p1 -s --ignore-whitespace -i $PATCH_FILE - - err_code=$? - if [ "$err_code" != "0" ]; then - # The patch has been probably already applied - fatal "Patch does not apply" - fi -} - -# Download and patch the SDK. Check if it is already available -function sdk_download () { - # First check if the SDK already exist - if sdk_exists $1; then - # SDK folder already available (assume patched) - return 0 - fi - - if [[ -z "${SDK_NAME}" ]]; then - fatal "Invalid SDK link" - fi - - # Create the destination folder and download the SDK - echo "> Downloading nRF SDK '${SDK_NAME}'..." - - mkdir -p $DL_LOCATION - - curl --progress-bar -o $DL_LOCATION/$SDK_FILE $SDK_LINK - - err_code=$? - if [ "$err_code" != "0" ]; then - fatal "Could not download SDK from '${SDK_LINK}'" - fi - - echo "> Unzipping SDK..." - # Disable globbing of files/directories we do not want to extract from the ZIP file - set -f - ZIP_EXCLUDE_LIST="**/*.msi **/external/cifra_AES128-EAX/** **/external/cJSON/** **/external/fatfs/** **/external/fnmatch/** **/external/freertos/** **/external/infineon/** **/external/licenses_external.txt** **/external/lwip/** **/external/mbedtls/** **/external/micro-ecc/** **/external/nano/** **/external/nano-pb/** **/external/nfc_adafruit_library/** **/external/nrf_cc310/** **/external/nrf_cc310_bl/** **/external/nrf_oberon/** **/external/nrf_tls/** **/external/protothreads/** **/external/thedotfactory_fonts/** **/components/802_15_4/** **/components/ant/** **/components/drivers_ext/** **/components/iot/** **/components/nfc/** **/components/proprietary_rf/** **/components/softdevice/s112/** **/components/softdevice/s140/** **/components/softdevice/s212/** **/examples/802_15_4/** **/examples/ant/** **/examples/ble_** **/examples/usb_** **/examples/iot/** **/examples/peripheral/** **/examples/proprietary_rf/** **/examples/dfu/** **/examples/crypto/** **/examples/nfc/** **/examples/dtm/** **/examples/multiprotocol/** **/examples/connectivity/experimental_ant/** **/examples/connectivity/ble_connectivity/**/ser_s*_spi*/** **/examples/connectivity/ble_connectivity/**/ser_s*_uart/** **/examples/connectivity/ble_connectivity/pca10040e/** **/documentation/**" - unzip -n -q $DL_LOCATION/$SDK_FILE -d $DL_LOCATION -x $ZIP_EXCLUDE_LIST - set +f - - err_code=$? - if [ "$err_code" != "0" ]; then - fatal "Could not unzip the SDK file" - fi - - echo "> Clean up. Removing SDK zip file..." - rm $DL_LOCATION/$SDK_FILE - - err_code=$? - if [ "$err_code" != "0" ]; then - fatal "Could not remove the SDK zip file" - fi - - # FIXME: unused files from the modified SDK should be deleted - # Keep only the components and the connectivity application ? -} - -function familypack_download () { - if [[ -z "${FAMILYPACK_NAME}" ]]; then - fatal "Invalid Device Family Pack link" - fi - - echo "> Downloading Device Family Pack '${FAMILYPACK_NAME}'..." - - curl --progress-bar -o $DL_LOCATION/$SDK_NAME/$FAMILYPACK_FILE $FAMILYPACK_LINK - - err_code=$? - if [ "$err_code" != "0" ]; then - fatal "Could not download Device Family Pack from '${FAMILYPACK_LINK}'" - fi -} - -function main() { - - while [ "$1" != "" ]; do - case $1 in - -l | --link ) shift - set_sdk_link $1 - ;; - -f | --familypack ) shift - set_familypack_link $1 - ;; - -d | --dest ) shift - set_dl_location $1 - ;; - -p | --patch ) shift - set_patch_file $1 - ;; - -h | --help ) usage - exit - ;; - * ) usage - exit 1 - esac - shift - done - - check_requirements - check_config - sdk_download - sdk_patch - familypack_download - - echo "> SDK ready to use. Exit." - exit -} - -if [ "${1}" != "--source-only" ]; then - main "$@" -fi diff --git a/hex/cmake/build_cmd_main.cmake b/hex/cmake/build_cmd_main.cmake new file mode 100644 index 000000000..7dd45f393 --- /dev/null +++ b/hex/cmake/build_cmd_main.cmake @@ -0,0 +1,27 @@ +#[[ + This script is invoked from CMakeLists in this directory during the build steps + for the connectivity firmware. +]] + +if(NOT DEFINED MAIN_IN_PATH) + message(FATAL_ERROR "MAIN_IN_PATH not provided.") +endif() + +if(NOT DEFINED CONNECTIVITY_VERSION) + message(FATAL_ERROR "CONNECTIVITY_VERSION not provided.") +endif() + +get_filename_component(MAIN_DIR "${MAIN_IN_PATH}" DIRECTORY) +set(MAIN_PATH "${MAIN_DIR}/main.c") + +string(REGEX MATCH "([0-9]+)\\.([0-9]+)\\.([0-9]+)" MATCHES ${CONNECTIVITY_VERSION}) + +if(CONNECTIVITY_VERSION) + set(VERSION_MAJOR "${CMAKE_MATCH_1}") + set(VERSION_MINOR "${CMAKE_MATCH_2}") + set(VERSION_PATCH "${CMAKE_MATCH_3}") + #message(STATUS "Configuring ${MAIN_IN_PATH} with version ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}, output file ${MAIN_PATH}") + configure_file(${MAIN_IN_PATH} ${MAIN_PATH} @ONLY) +else() + message(FATAL_ERROR "Not able to parse version:${CONNECTIVITY_VERSION}") +endif() diff --git a/hex/cmake/build_cmd_ser_config.cmake b/hex/cmake/build_cmd_ser_config.cmake new file mode 100644 index 000000000..e82b23031 --- /dev/null +++ b/hex/cmake/build_cmd_ser_config.cmake @@ -0,0 +1,40 @@ +#[[ + This script is invoked from CMakeLists in this directory during the build steps + for the connectivity firmware. +]] + +if(NOT DEFINED SDK_VERSION) + message(FATAL_ERROR "SDK_VERSION not provided.") +endif() + +if(NOT DEFINED SER_CONFIG_IN_PATH) + message(FATAL_ERROR "SER_CONFIG_IN_PATH not provided.") +endif() + +if(NOT DEFINED BAUD_RATE) + message(FATAL_ERROR "BAUD_RATE not provided.") +endif() + +if(SDK_VERSION STREQUAL "11") + if(BAUD_RATE STREQUAL "115k2") + set(SER_PHY_UART_BAUDRATE "UART_BAUDRATE_BAUDRATE_Baud115200") + elseif(BAUD_RATE STREQUAL "1m" OR BAUD_RATE STREQUAL "usb") + set(SER_PHY_UART_BAUDRATE "UART_BAUDRATE_BAUDRATE_Baud1M") + endif() +elseif(SDK_VERSION STREQUAL "15") + if(BAUD_RATE STREQUAL "115k2") + set(SER_PHY_UART_BAUDRATE_VAL "115200") + elseif(BAUD_RATE STREQUAL "1m" OR BAUD_RATE STREQUAL "usb") + set(SER_PHY_UART_BAUDRATE_VAL "1000000") + endif() +endif() + +if(NOT DEFINED SER_PHY_UART_BAUDRATE AND NOT DEFINED SER_PHY_UART_BAUDRATE_VAL) + message(FATAL_ERROR "Not able to find baud rate for SDK ${SDK_VERSION}.") +endif() + +get_filename_component(SER_CONFIG_DIR "${SER_CONFIG_IN_PATH}" DIRECTORY) +set(SER_CONFIG_PATH "${SER_CONFIG_DIR}/ser_config.h") + +#message(STATUS "Configuring ${SER_CONFIG_IN_PATH} with baud rate ${SER_PHY_UART_BAUDRATE}${SER_PHY_UART_BAUDRATE_VAL}, output file ${SER_CONFIG_PATH}") +configure_file(${SER_CONFIG_IN_PATH} ${SER_CONFIG_PATH} @ONLY) diff --git a/hex/cmake/util.cmake b/hex/cmake/util.cmake new file mode 100644 index 000000000..09c425975 --- /dev/null +++ b/hex/cmake/util.cmake @@ -0,0 +1,399 @@ +function(nrf_configure_sdk_affected_files SDK_VERSION SDK_DIRECTORY SER_CONFIG_PATH MAIN_PATH) + if(SDK_VERSION EQUAL 11) + set(MAIN_PATH "${SDK_DIRECTORY}/examples/ble_central_and_peripheral/ble_connectivity/main.c" PARENT_SCOPE) + elseif(SDK_VERSION EQUAL 15) + set(MAIN_PATH "${SDK_DIRECTORY}/examples/connectivity/ble_connectivity/main.c" PARENT_SCOPE) + else() + message(FATAL_ERROR "Not able to prepare SDK with configuration values because SDK v${SDK_VERSION} is unknown.") + return() + endif() + + set(SER_CONFIG_PATH "${SDK_DIRECTORY}/components/serialization/common/ser_config.h" PARENT_SCOPE) +endfunction() + +function(nrf_extract_version_number VERSION_NUMBER MAJOR MINOR PATCH) + string(REGEX MATCH "([0-9]+)\\.([0-9]+)\\.([0-9]+)" MATCHES ${VERSION_NUMBER}) + + if(VERSION) + set(MAJOR "${CMAKE_MATCH_1}" PARENT_SCOPE) + set(MINOR "${CMAKE_MATCH_2}" PARENT_SCOPE) + set(PATCH "${CMAKE_MATCH_3}" PARENT_SCOPE) + else() + message(FATAL_ERROR "Not able to parse version:${VERSION}") + endif() +endfunction() + +function(nrf_configure_sdk_values SDK_VERSION SDK_DIRECTORY) + set(SER_CONFIG_PATH) + set(MAIN_PATH) + + nrf_configure_sdk_affected_files(${SDK_VERSION} ${SDK_DIRECTORY} SER_CONFIG_PATH MAIN_PATH) + + if(NOT EXISTS ${SER_CONFIG_PATH}) + message(FATAL_ERROR "Not able to find ser_config.h in path ${SER_CONFIG_PATH}") + endif() + + if(NOT EXISTS ${MAIN_PATH}) + message(FATAL_ERROR "Not able to find main.c in path ${SER_CONFIG_PATH}") + endif() + + file(READ ${SER_CONFIG_PATH} SER_CONFIG) + file(READ ${MAIN_PATH} MAIN) + + if(SDK_VERSION STREQUAL 11) + string(REGEX REPLACE "#define (SER_PHY_UART_BAUDRATE)(.+)UART_BAUDRATE_BAUDRATE_Baud1M\n" "#cmakedefine \\1\\2@SER_PHY_UART_BAUDRATE@\n" SER_CONFIG_IN ${SER_CONFIG}) + elseif(SDK_VERSION STREQUAL 15) + string(REGEX REPLACE "#define (SER_PHY_UART_BAUDRATE_VAL)(.+)1000000\n" "#cmakedefine \\1\\2@SER_PHY_UART_BAUDRATE_VAL@\n" SER_CONFIG_IN ${SER_CONFIG}) + endif() + + file(WRITE "${SER_CONFIG_PATH}.in" "${SER_CONFIG_IN}") + + # Version number is defined the same way in supported SDKS + string(REGEX REPLACE "(\\.version_major[ ]+\\=[ ]+)0xf1(,\n)" "\\1@VERSION_MAJOR@\\2" MAIN_IN "${MAIN}") + string(REGEX REPLACE "(\\.version_minor[ ]+\\=[ ]+)0xf2(,\n)" "\\1@VERSION_MINOR@\\2" MAIN_IN "${MAIN_IN}") + string(REGEX REPLACE "(\\.version_patch[ ]+\\=[ ]+)0xf3(,\n)" "\\1@VERSION_PATCH@\\2" MAIN_IN "${MAIN_IN}") + file(WRITE "${MAIN_PATH}.in" "${MAIN_IN}") + + # Configure armgcc related files (if armgcc is available) + find_program(GCC "arm-none-eabi-gcc") + + if(DEFINED ENV{GCCARMEMB_TOOLCHAIN_PATH} OR GCC) + # Get gcc version + if(GCC) + get_filename_component(GCC_TOOLCHAIN_PATH "${GCC}" DIRECTORY) + set(GCC_TOOLCHAIN_PATH "${GCC_TOOLCHAIN_PATH}/..") + else() + set(GCC_TOOLCHAIN_PATH "$ENV{GCCARMEMB_TOOLCHAIN_PATH}") + # Environment variables are quoted, remove the quote + string(REPLACE "\"" "" GCC_TOOLCHAIN_PATH "${GCC_TOOLCHAIN_PATH}") + endif() + + file(TO_CMAKE_PATH "${GCC_TOOLCHAIN_PATH}" GCC_TOOLCHAIN_PATH) + set(GCC "${GCC_TOOLCHAIN_PATH}/bin/arm-none-eabi-gcc") + + message(STATUS "Found armgcc in path ${GCC}.") + + execute_process( + COMMAND "${GCC}" -dumpversion + RESULT_VARIABLE GCC_RUN_RESULT + OUTPUT_VARIABLE GCC_VERSION + ) + + # SDKv15 requires bin in addition to GCCARMEMB_TOOLCHAIN_PATH set by gccvar + if(SDK_VERSION EQUAL 15) + set(GCC_TOOLCHAIN_PATH "${GCC_TOOLCHAIN_PATH}/bin/") + endif() + + if(GCC_RUN_RESULT EQUAL 0) + string(STRIP "${GCC_VERSION}" GCC_VERSION) + message(STATUS "armgcc returned with version number ${GCC_VERSION}") + else() + message(FATAL_ERROR "armgcc returned ${GCC_RUN_RESULT}. Assuming armgcc is non usable (ran ${GCC} -dumpversion).") + return() + endif() + + set(TOOLCHAIN_PATH "${SDK_DIRECTORY}/components/toolchain/gcc") + if(EXISTS "${TOOLCHAIN_PATH}") + if(WIN32) + set(MAKEFILE "${TOOLCHAIN_PATH}/Makefile.windows") + if(EXISTS "${MAKEFILE}") + message(STATUS "Altering Makefile using armgcc for Windows") + else() + message(STATUS "Makefile not found: ${MAKEFILE}") + set(MAKEFILE) + endif() + + set(MAKEFILE_COMMON "${TOOLCHAIN_PATH}/Makefile.common") + + if(EXISTS "${MAKEFILE_COMMON}") + message(STATUS "Replacing \"rm -rf\" with \"cmake -E remove_directory\" on Windows") + + file(READ "${MAKEFILE_COMMON}" MAKEFILE_CONTENT) + file(WRITE "${MAKEFILE_COMMON}.pristine" "${MAKEFILE_CONTENT}") + + string( + REPLACE "RM := rm -rf" "RM := \"${CMAKE_COMMAND}\" -E remove_directory" + MAKEFILE_CONTENT_NEW "${MAKEFILE_CONTENT}" + ) + + set(MAKEFILE_CONTENT "${MAKEFILE_CONTENT_NEW}") + file(WRITE "${MAKEFILE_COMMON}" "${MAKEFILE_CONTENT}") + else() + message(STATUS "Makefile.common not found: ${MAKEFILE}") + endif() + else() + # Assume POSIX if not WIN32 + set(MAKEFILE "${TOOLCHAIN_PATH}/Makefile.posix") + if(EXISTS "${MAKEFILE}") + message(STATUS "Altering Makefile using armgcc for POSIX .") + else() + message(STATUS "Makefile not found: ${MAKEFILE}") + set(MAKEFILE) + endif() + endif() + + if(MAKEFILE) + file(READ "${MAKEFILE}" MAKEFILE_CONTENT) + file(WRITE "${MAKEFILE}.pristine" "${MAKEFILE_CONTENT}") + + string(REGEX MATCH ";" LIST_SEPARATOR_FOUND "${MAKEFILE_CONTENT}") + if(LIST_SEPARATOR_FOUND STREQUAL ";") + message(FATAL_ERROR "${MAKEFILE} contains ; which is the list split operator, cannot continue.") + endif() + + # Make the file into a list since the ^$ expressions will not work + string(REGEX REPLACE "\r?\n" ";" MAKEFILE_LINES "${MAKEFILE_CONTENT}") + set(MAKEFILE_CONTENT_NEW) + + foreach(LINE ${MAKEFILE_LINES}) + #message(STATUS "L:${LINE}") + string(REGEX REPLACE "^(GNU_INSTALL_ROOT [\\?:]= ).*$" "\\1${GCC_TOOLCHAIN_PATH}" MAKEFILE_LINE "${LINE}") + string(REGEX REPLACE "^(GNU_VERSION [\\?:]= ).*$" "\\1${GCC_VERSION}" MAKEFILE_LINE "${MAKEFILE_LINE}") + #message(STATUS "M:${MAKEFILE_LINE}") + string(APPEND MAKEFILE_CONTENT_NEW "${MAKEFILE_LINE}\n") + endforeach() + + set(MAKEFILE_CONTENT "${MAKEFILE_CONTENT_NEW}") + file(WRITE "${MAKEFILE}" "${MAKEFILE_CONTENT}") + #message(STATUS "Makefile content after change: ${MAKEFILE_CONTENT}") + endif() + endif() + endif() +endfunction() + +#[[ + Function that prepares the SDK by: + - downloading the SDK + - applying patches + - modifying the SDK source code so that baud rate and version number is configurable in the build steps + The function sets the parent scope variable SDK to location of the prepared SDK +]] +function(nrf_prepare_sdk) + set(oneValueArgs SHA512 FILENAME SDK_VERSION) + set(multipleValuesArgs URLS PATCH_FILES) + cmake_parse_arguments(nrf_prepare_sdk "" "${oneValueArgs}" "${multipleValuesArgs}" ${ARGN}) + + if(NOT DEFINED nrf_prepare_sdk_SDK_VERSION) + message(FATAL_ERROR "nrf_prepare_sdk requires a SDK_VERSION argument.") + endif() + if(NOT DEFINED nrf_prepare_sdk_URLS) + message(FATAL_ERROR "nrf_prepare_sdk requires a URLS argument.") + endif() + if(NOT DEFINED nrf_prepare_sdk_FILENAME) + message(FATAL_ERROR "nrf_prepare_sdk requires a FILENAME argument.") + endif() + if(NOT DEFINED nrf_prepare_sdk_SHA512) + message(FATAL_ERROR "nrf_prepare_sdk requires a SHA512 argument.") + endif() + + #message(STATUS "URLS: ${nrf_prepare_sdk_URLS}") + #message(STATUS "FILENAME: ${nrf_prepare_sdk_FILENAME}") + #message(STATUS "SHA512: ${nrf_prepare_sdk_SHA512}") + + if(NOT DEFINED ENV{TMP}) + message(FATAL_ERROR "Temporary directory not set, not able to proceed.") + endif() + + set(SDKS_DIRECTORY "$ENV{TMP}/pc-ble-driver/sdks") + file(TO_CMAKE_PATH "${SDKS_DIRECTORY}" SDKS_DIRECTORY) + set(SDK_DIRECTORY "${SDKS_DIRECTORY}/v${nrf_prepare_sdk_SDK_VERSION}") + set(SDK_VERSION "${nrf_prepare_sdk_SDK_VERSION}") + + SET(SDK_VERSION "${nrf_prepare_sdk_SDK_VERSION}") + + set(SDK_SETUP_SUCCESS_FILE "${SDK_DIRECTORY}/.sdk-setup-success") + + if(EXISTS "${SDK_SETUP_SUCCESS_FILE}") + message(STATUS "SDK directory already exists, reusing that.") + else() + nrf_download_distfile( + SDK + URLS ${nrf_prepare_sdk_URLS} + DOWNLOAD_DIRECTORY "${SDKS_DIRECTORY}" + FILENAME "${nrf_prepare_sdk_FILENAME}" + SHA512 ${nrf_prepare_sdk_SHA512} + ) + + execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory "${SDK_DIRECTORY}") + execute_process( + COMMAND ${CMAKE_COMMAND} -E tar xf ${SDK} + WORKING_DIRECTORY "${SDK_DIRECTORY}" + ) + + nrf_get_sdk_dir_root(${SDK_DIRECTORY}) + + message(STATUS "Patching files in directory: ${SDK_DIRECTORY}") + if(DEFINED nrf_prepare_sdk_PATCH_FILES) + nrf_apply_patches( + SOURCE_PATH "${SDK_DIRECTORY}" + PATCHES ${nrf_prepare_sdk_PATCH_FILES} + ) + + nrf_configure_sdk_values( + "${SDK_VERSION}" + "${SDK_DIRECTORY}" + ) + else() + message(STATUS "No patches to apply to public SDK.") + endif() + + file(WRITE "${SDK_SETUP_SUCCESS_FILE}" "Successfully setup SDK.") + endif() + + nrf_get_sdk_dir_root(${SDK_DIRECTORY}) + set(SDK_PATH "${SDK_DIRECTORY}" PARENT_SCOPE) +endfunction() + +function(nrf_get_sdk_dir_root SDK_DIRECTORY) + # Detect if it is an old or new directory structure in the SDK + if(NOT EXISTS "${SDK_DIRECTORY}/components") + # New structure + string(REGEX REPLACE "\\.[^.]*$" "" EXTRACTED_SDK_DIR ${nrf_prepare_sdk_FILENAME}) + set(SDK_DIRECTORY "${SDK_DIRECTORY}/${EXTRACTED_SDK_DIR}" PARENT_SCOPE) + endif() +endfunction() + +function(nrf_transport_baud_rate_to_numeric BAUD_RATE BAUD_RATE_NUMERIC) + if(BAUD_RATE STREQUAL "115k2") + set(${BAUD_RATE_NUMERIC} "115200" PARENT_SCOPE) + elseif(BAUD_RATE STREQUAL "1m" OR BAUD_RATE STREQUAL "usb") + set(${BAUD_RATE_NUMERIC} "1000000" PARENT_SCOPE) + else() + set(${BAUD_RATE_NUMERIC} "-1" PARENT_SCOPE) + endif() +endfunction() + +function(nrf_extract_softdevice_info SOFTDEVICE_FILENAME SD_VERSION SOC_FAMILY SD_API_VERSION SD_ID) + string(REGEX MATCH "(s[0-9]+)_nrf(5[0-9]+)_([0-9].[0-9].[0-9])" MATCHES ${SOFTDEVICE_FILENAME}) + + if(MATCHES) + set(_SD_VERSION "${CMAKE_MATCH_1}") + set(_SOC_FAMILY "${CMAKE_MATCH_2}") + set(_SD_API_VERSION "${CMAKE_MATCH_3}") + + set(${SD_VERSION} "${_SD_VERSION}" PARENT_SCOPE) + set(${SOC_FAMILY} "${_SOC_FAMILY}" PARENT_SCOPE) + set(${SD_API_VERSION} "${_SD_API_VERSION}" PARENT_SCOPE) + + if(_SD_VERSION STREQUAL "s130") + if(_SOC_FAMILY EQUAL 51) + if(_SD_API_VERSION STREQUAL "1.0.0") + set(_SD_ID "0x0067") + elseif(_SD_API_VERSION STREQUAL "2.0.0") + set(_SD_ID "0x0080") + elseif(_SD_API_VERSION STREQUAL "2.0.1") + set(_SD_ID "0x0087") + endif() + endif() + elseif(_SD_VERSION STREQUAL "s132") + if(_SOC_FAMILY EQUAL 52) + if(_SD_API_VERSION STREQUAL "2.0.1") + set(_SD_ID "0x0088") + elseif(_SD_API_VERSION STREQUAL "3.0.0") + set(_SD_ID "0x008C") + elseif(_SD_API_VERSION STREQUAL "3.1.0") + set(_SD_ID "0x0091") + elseif(_SD_API_VERSION STREQUAL "4.0.0") + set(_SD_ID "0x0095") + elseif(_SD_API_VERSION STREQUAL "4.0.2") + set(_SD_ID "0x0098") + elseif(_SD_API_VERSION STREQUAL "4.0.3") + set(_SD_ID "0x0099") + elseif(_SD_API_VERSION STREQUAL "4.0.4") + set(_SD_ID "0x009E") + elseif(_SD_API_VERSION STREQUAL "4.0.5") + set(_SD_ID "0x009F") + elseif(_SD_API_VERSION STREQUAL "5.0.0") + set(_SD_ID "0x009D") + elseif(_SD_API_VERSION STREQUAL "5.1.0") + set(_SD_ID "0x00A5") + elseif(_SD_API_VERSION STREQUAL "6.0.0") + set(_SD_ID "0x00A8") + elseif(_SD_API_VERSION STREQUAL "6.1.0") + set(_SD_ID "0x00AF") + endif() + endif() + elseif(_SD_VERSION STREQUAL "s140") + if(_SOC_FAMILY EQUAL 52) + if(_SD_API_VERSION STREQUAL "6.0.0") + set(_SD_ID "0x00A9") + elseif(_SD_API_VERSION STREQUAL "6.1.0") + set(_SD_ID "0x00AE") + endif() + endif() + endif() + + #message(STATUS "SD_VERSION:${_SD_VERSION} SOC_FAMILY:${_SOC_FAMILY} SD_API_VERSION:${_SD_API_VERSION} SD_ID:${_SD_ID}") + + set(${SD_ID} "${_SD_ID}" PARENT_SCOPE) + else() + message(STATUS "No SoftDevice information available in filename.") + endif() +endfunction() + +function(nrf_extract_info_from_path PROJECT_PATH PROJECT_NAME PCA_TYPE SOFTDEVICE_TYPE_VERSION TRANSPORT) + string(REGEX MATCH ".*(pca100[1-9][0-9])" MATCHES ${PROJECT_PATH}) + + if(MATCHES) + set(${PCA_TYPE} "${CMAKE_MATCH_1}" PARENT_SCOPE) + else() + message(STATUS "No PCA information available in string '${PCA_STRING}'") + endif() + + string(REGEX MATCH ".*(s1[0-9][0-9])(v[0-9])?" MATCHES ${PROJECT_PATH}) + + if(MATCHES) + set(${SOFTDEVICE_TYPE_VERSION} "${CMAKE_MATCH_1}${CMAKE_MATCH_2}" PARENT_SCOPE) + else() + message(STATUS "No SoftDevice type or version available in string '${PROJECT_PATH}'") + endif() + + get_filename_component(PROJECT_NAME "${PROJECT_PATH}" NAME) + set(PROJECT_NAME ${PROJECT_NAME} PARENT_SCOPE) + + string(REGEX MATCH ".*_usb_.*" MATCHES ${PROJECT_NAME}) + if(MATCHES) + set(${TRANSPORT} "usb" PARENT_SCOPE) + else() + set(${TRANSPORT} "uart" PARENT_SCOPE) + endif() +endfunction() + +function(nrf_find_alternative_softdevice SOFTDEVICE_HEX_PATH ALTERNATIVE_SOFTDEVICE_HEX) + set(SD_VERSION) + set(SOC_FAMILY) + set(SOC_SD_API_VERSION) + set(SD_ID) + nrf_extract_softdevice_info(${FOUND_SOFTDEVICE_HEX} SD_VERSION SOC_FAMILY SD_API_VERSION SD_ID) + #message(STATUS "SD_VERSION:${SD_VERSION} SOC_FAMILY:${SD_VERSION} SD_API_VERSION:${SD_API_VERSION} SD_ID:${SD_ID}") + + set(MAJOR) + set(MINOR) + set(PATCH) + nrf_extract_version_number("${SD_API_VERSION}" MAJOR MAJOR MINOR PATCH) + set(SOFTDEVICE_SEARCH_PATH "${CMAKE_CURRENT_SOURCE_DIR}/sd_api_v${MAJOR}/${SD_VERSION}_nrf${SOC_FAMILY}_${MAJOR}.*_softdevice.hex") + file(GLOB ALTERNATIVE_SOFTDEVICE_HEX LIST_DIRECTORIES false "${SOFTDEVICE_SEARCH_PATH}") + + if(ALTERNATIVE_SOFTDEVICE_HEX) + list(LENGTH ALTERNATIVE_SOFTDEVICE_HEX HEX_COUNT) + if(HEX_COUNT GREATER 1) + message(FATAL_ERROR "Found ${HEX_COUNT} alternative hex files, not able to process that.") + endif() + + set(ALTERNATIVE_SD_VERSION) + set(ALTERNATIVE_SOC_FAMILY) + set(ALTERNATIVE_SOC_SD_API_VERSION) + set(ALTERNATIVE_SD_ID) + + nrf_extract_softdevice_info(${ALTERNATIVE_SOFTDEVICE_HEX} ALTERNATIVE_SD_VERSION ALTERNATIVE_SOC_FAMILY ALTERNATIVE_SD_API_VERSION ALTERNATIVE_SD_ID) + + if(ALTERNATIVE_SD_API_VERSION VERSION_GREATER SD_API_VERSION) + message(STATUS "Newer SoftDevice version found (${ALTERNATIVE_SD_API_VERSION}) than the SDK provides (${SD_API_VERSION}).") + set(ALTERNATIVE_SOFTDEVICE_HEX "${ALTERNATIVE_SOFTDEVICE_HEX}" PARENT_SCOPE) + else() + message(STATUS "SoftDevice version found is the same version(${ALTERNATIVE_SOFTDEVICE_HEX}) as the one in the SDK(${SD_API_VERSION}). Using the one found in the SDK.") + endif() + else() + #message(STATUS "No newer SoftDevice found.") + endif() +endfunction() diff --git a/hex/sd_api_v2/sdk110_connectivity.patch b/hex/nRF5_SDK_11.0.0_connectivity.patch similarity index 54% rename from hex/sd_api_v2/sdk110_connectivity.patch rename to hex/nRF5_SDK_11.0.0_connectivity.patch index 9ab6cd2e2..a6078f4a2 100644 --- a/hex/sd_api_v2/sdk110_connectivity.patch +++ b/hex/nRF5_SDK_11.0.0_connectivity.patch @@ -1,16 +1,17 @@ -diff --git a/components/libraries/scheduler/app_scheduler.h b/components/libraries/scheduler/app_scheduler.h ---- a/components/libraries/scheduler/app_scheduler.h -+++ b/components/libraries/scheduler/app_scheduler.h +diff --git nRF5_SDK_11.0.0_89a8197/components/libraries/scheduler/app_scheduler.h nRF5_SDK_11.0.0_XXXXXXX/components/libraries/scheduler/app_scheduler.h +index f52e616..eeb9689 100644 +--- nRF5_SDK_11.0.0_89a8197/components/libraries/scheduler/app_scheduler.h ++++ nRF5_SDK_11.0.0_XXXXXXX/components/libraries/scheduler/app_scheduler.h @@ -54,6 +54,8 @@ #include "app_error.h" #include "app_util.h" - + +#define APP_SCHEDULER_WITH_PROFILER + #define APP_SCHED_EVENT_HEADER_SIZE 8 /**< Size of app_scheduler.event_header_t (only for use inside APP_SCHED_BUF_SIZE()). */ - + /**@brief Compute number of bytes required to hold the scheduler buffer. -@@ -142,6 +142,12 @@ uint32_t app_sched_event_put(void * p_event_data, +@@ -140,6 +142,12 @@ uint32_t app_sched_event_put(void * p_event_data, * @return Maximum number of events in queue observed so far. */ uint16_t app_sched_queue_utilization_get(void); @@ -23,9 +24,10 @@ diff --git a/components/libraries/scheduler/app_scheduler.h b/components/librari #endif #ifdef APP_SCHEDULER_WITH_PAUSE -diff --git a/components/libraries/scheduler/app_scheduler_serconn.c b/components/libraries/scheduler/app_scheduler_serconn.c ---- a/components/libraries/scheduler/app_scheduler_serconn.c -+++ b/components/libraries/scheduler/app_scheduler_serconn.c +diff --git nRF5_SDK_11.0.0_89a8197/components/libraries/scheduler/app_scheduler_serconn.c nRF5_SDK_11.0.0_XXXXXXX/components/libraries/scheduler/app_scheduler_serconn.c +index f411eff..8d505d9 100644 +--- nRF5_SDK_11.0.0_89a8197/components/libraries/scheduler/app_scheduler_serconn.c ++++ nRF5_SDK_11.0.0_XXXXXXX/components/libraries/scheduler/app_scheduler_serconn.c @@ -99,7 +99,16 @@ uint32_t app_sched_init(uint16_t event_size, uint16_t queue_size, void * p_event @@ -44,9 +46,10 @@ diff --git a/components/libraries/scheduler/app_scheduler_serconn.c b/components { uint16_t start = m_queue_start_index; uint16_t end = m_queue_end_index; -diff --git a/components/serialization/application/codecs/s130/middleware/app_mw_ble_gatts.c b/components/serialization/application/codecs/s130/middleware/app_mw_ble_gatts.c ---- a/components/serialization/application/codecs/s130/middleware/app_mw_ble_gatts.c -+++ b/components/serialization/application/codecs/s130/middleware/app_mw_ble_gatts.c +diff --git nRF5_SDK_11.0.0_89a8197/components/serialization/application/codecs/s130/middleware/app_mw_ble_gatts.c nRF5_SDK_11.0.0_XXXXXXX/components/serialization/application/codecs/s130/middleware/app_mw_ble_gatts.c +index f9ede04..0fb57f4 100644 +--- nRF5_SDK_11.0.0_89a8197/components/serialization/application/codecs/s130/middleware/app_mw_ble_gatts.c ++++ nRF5_SDK_11.0.0_XXXXXXX/components/serialization/application/codecs/s130/middleware/app_mw_ble_gatts.c @@ -586,7 +586,8 @@ static uint32_t gatts_attr_get_rsp_dec(const uint8_t * p_buffer, uint16_t length const uint32_t err_code = ble_gatts_attr_get_rsp_dec( p_buffer, @@ -67,9 +70,10 @@ diff --git a/components/serialization/application/codecs/s130/middleware/app_mw_ const uint32_t err_code = ble_gatts_attr_get_req_enc(handle, p_uuid, -diff --git a/components/serialization/application/codecs/s130/serializers/ble_gatts_attr_get.c b/components/serialization/application/codecs/s130/serializers/ble_gatts_attr_get.c ---- a/components/serialization/application/codecs/s130/serializers/ble_gatts_attr_get.c -+++ b/components/serialization/application/codecs/s130/serializers/ble_gatts_attr_get.c +diff --git nRF5_SDK_11.0.0_89a8197/components/serialization/application/codecs/s130/serializers/ble_gatts_attr_get.c nRF5_SDK_11.0.0_XXXXXXX/components/serialization/application/codecs/s130/serializers/ble_gatts_attr_get.c +index c2e7b44..9092f64 100644 +--- nRF5_SDK_11.0.0_89a8197/components/serialization/application/codecs/s130/serializers/ble_gatts_attr_get.c ++++ nRF5_SDK_11.0.0_XXXXXXX/components/serialization/application/codecs/s130/serializers/ble_gatts_attr_get.c @@ -38,7 +38,7 @@ uint32_t ble_gatts_attr_get_req_enc(uint16_t handle, err_code = uint16_t_enc(&handle, p_buf, total_len, &index); SER_ASSERT(err_code == NRF_SUCCESS, err_code); @@ -96,9 +100,10 @@ diff --git a/components/serialization/application/codecs/s130/serializers/ble_ga err_code = cond_field_dec(p_buf, packet_len, &index, (void * *)pp_md, ble_gatts_attr_md_dec); SER_ASSERT(err_code == NRF_SUCCESS, err_code); -diff --git a/components/serialization/common/ser_config.h b/components/serialization/common/ser_config.h ---- a/components/serialization/common/ser_config.h -+++ b/components/serialization/common/ser_config.h +diff --git nRF5_SDK_11.0.0_89a8197/components/serialization/common/ser_config.h nRF5_SDK_11.0.0_XXXXXXX/components/serialization/common/ser_config.h +index 67b4f8a..2faaffa 100644 +--- nRF5_SDK_11.0.0_89a8197/components/serialization/common/ser_config.h ++++ nRF5_SDK_11.0.0_XXXXXXX/components/serialization/common/ser_config.h @@ -66,7 +66,7 @@ /** UART transmission parameters */ @@ -109,15 +114,16 @@ diff --git a/components/serialization/common/ser_config.h b/components/serializa /** Find UART baudrate value based on chosen register setting. */ @@ -110,4 +110,6 @@ - + #define SER_MAX_CONNECTIONS 8 - + +#define HCI_LINK_CONTROL + #endif /* SER_CONFIG_H__ */ -diff --git a/components/serialization/common/transport/ser_phy/config/ser_phy_config_conn_nrf51.h b/components/serialization/common/transport/ser_phy/config/ser_phy_config_conn_nrf51.h ---- a/components/serialization/common/transport/ser_phy/config/ser_phy_config_conn_nrf51.h -+++ b/components/serialization/common/transport/ser_phy/config/ser_phy_config_conn_nrf51.h +diff --git nRF5_SDK_11.0.0_89a8197/components/serialization/common/transport/ser_phy/config/ser_phy_config_conn_nrf51.h nRF5_SDK_11.0.0_XXXXXXX/components/serialization/common/transport/ser_phy/config/ser_phy_config_conn_nrf51.h +index 47a9b51..9d19866 100644 +--- nRF5_SDK_11.0.0_89a8197/components/serialization/common/transport/ser_phy/config/ser_phy_config_conn_nrf51.h ++++ nRF5_SDK_11.0.0_XXXXXXX/components/serialization/common/transport/ser_phy/config/ser_phy_config_conn_nrf51.h @@ -34,9 +34,9 @@ /* UART configuration */ #define UART_IRQ_PRIORITY APP_IRQ_PRIORITY_LOW @@ -132,9 +138,10 @@ diff --git a/components/serialization/common/transport/ser_phy/config/ser_phy_co +#define SER_PHY_UART_RTS RTS_PIN_NUMBER #endif //SER_PHY_CONFIG_CONN_NRF51_H__ -diff --git a/components/serialization/common/transport/ser_phy/ser_phy_hci.c b/components/serialization/common/transport/ser_phy/ser_phy_hci.c ---- a/components/serialization/common/transport/ser_phy/ser_phy_hci.c -+++ b/components/serialization/common/transport/ser_phy/ser_phy_hci.c +diff --git nRF5_SDK_11.0.0_89a8197/components/serialization/common/transport/ser_phy/ser_phy_hci.c nRF5_SDK_11.0.0_XXXXXXX/components/serialization/common/transport/ser_phy/ser_phy_hci.c +index a83d92e..f1c62b5 100644 +--- nRF5_SDK_11.0.0_89a8197/components/serialization/common/transport/ser_phy/ser_phy_hci.c ++++ nRF5_SDK_11.0.0_XXXXXXX/components/serialization/common/transport/ser_phy/ser_phy_hci.c @@ -37,6 +37,8 @@ (SER_HAL_TRANSPORT_MAX_PKT_SIZE + PKT_HDR_SIZE + PKT_CRC_SIZE)) #define BAUD_TIME_us (1000000uL / SER_PHY_UART_BAUDRATE_VAL) @@ -168,9 +175,10 @@ diff --git a/components/serialization/common/transport/ser_phy/ser_phy_hci.c b/c if (packet_type == PKT_TYPE_ACK ) { DEBUG_EVT_SLIP_ACK_RXED(0); -diff --git a/components/serialization/connectivity/codecs/s130/middleware/conn_mw_ble_gap.c b/components/serialization/connectivity/codecs/s130/middleware/conn_mw_ble_gap.c ---- a/components/serialization/connectivity/codecs/s130/middleware/conn_mw_ble_gap.c -+++ b/components/serialization/connectivity/codecs/s130/middleware/conn_mw_ble_gap.c +diff --git nRF5_SDK_11.0.0_89a8197/components/serialization/connectivity/codecs/s130/middleware/conn_mw_ble_gap.c nRF5_SDK_11.0.0_XXXXXXX/components/serialization/connectivity/codecs/s130/middleware/conn_mw_ble_gap.c +index 8e4e2d1..fd00fe2 100644 +--- nRF5_SDK_11.0.0_89a8197/components/serialization/connectivity/codecs/s130/middleware/conn_mw_ble_gap.c ++++ nRF5_SDK_11.0.0_XXXXXXX/components/serialization/connectivity/codecs/s130/middleware/conn_mw_ble_gap.c @@ -621,6 +621,12 @@ uint32_t conn_mw_ble_gap_sec_params_reply(uint8_t const * const p_rx_buf, &p_sec_keyset); SER_ASSERT(err_code == NRF_SUCCESS, err_code); @@ -184,9 +192,10 @@ diff --git a/components/serialization/connectivity/codecs/s130/middleware/conn_m sd_err_code = sd_ble_gap_sec_params_reply(*p_conn_handle, sec_status, p_sec_params, p_sec_keyset); err_code = ble_gap_sec_params_reply_rsp_enc(sd_err_code, p_tx_buf, p_tx_buf_len, p_sec_keyset); -diff --git a/components/serialization/connectivity/codecs/s130/middleware/conn_mw_ble_gatts.c b/components/serialization/connectivity/codecs/s130/middleware/conn_mw_ble_gatts.c ---- a/components/serialization/connectivity/codecs/s130/middleware/conn_mw_ble_gatts.c -+++ b/components/serialization/connectivity/codecs/s130/middleware/conn_mw_ble_gatts.c +diff --git nRF5_SDK_11.0.0_89a8197/components/serialization/connectivity/codecs/s130/middleware/conn_mw_ble_gatts.c nRF5_SDK_11.0.0_XXXXXXX/components/serialization/connectivity/codecs/s130/middleware/conn_mw_ble_gatts.c +index f429e3e..32aa281 100644 +--- nRF5_SDK_11.0.0_89a8197/components/serialization/connectivity/codecs/s130/middleware/conn_mw_ble_gatts.c ++++ nRF5_SDK_11.0.0_XXXXXXX/components/serialization/connectivity/codecs/s130/middleware/conn_mw_ble_gatts.c @@ -430,7 +430,7 @@ uint32_t conn_mw_ble_gatts_attr_get(uint8_t const * const p_rx_buf, sd_err_code = sd_ble_gatts_attr_get(handle, p_uuid, p_md); @@ -196,18 +205,28 @@ diff --git a/components/serialization/connectivity/codecs/s130/middleware/conn_m SER_ASSERT(err_code == NRF_SUCCESS, err_code); return err_code; -diff --git a/components/serialization/connectivity/codecs/s130/middleware/conn_mw_items.c b/components/serialization/connectivity/codecs/s130/middleware/conn_mw_items.c ---- a/components/serialization/connectivity/codecs/s130/middleware/conn_mw_items.c -+++ b/components/serialization/connectivity/codecs/s130/middleware/conn_mw_items.c -@@ -80,4 +80,5 @@ static const conn_mw_item_t conn_mw_item[] = { +diff --git nRF5_SDK_11.0.0_89a8197/components/serialization/connectivity/codecs/s130/middleware/conn_mw_items.c nRF5_SDK_11.0.0_XXXXXXX/components/serialization/connectivity/codecs/s130/middleware/conn_mw_items.c +index 8c1f113..e677eda 100644 +--- nRF5_SDK_11.0.0_89a8197/components/serialization/connectivity/codecs/s130/middleware/conn_mw_items.c ++++ nRF5_SDK_11.0.0_XXXXXXX/components/serialization/connectivity/codecs/s130/middleware/conn_mw_items.c +@@ -53,6 +53,7 @@ static const conn_mw_item_t conn_mw_item[] = { + {SD_BLE_GAP_CONN_SEC_GET, conn_mw_ble_gap_conn_sec_get}, + {SD_BLE_GAP_RSSI_START, conn_mw_ble_gap_rssi_start}, + {SD_BLE_GAP_RSSI_STOP, conn_mw_ble_gap_rssi_stop}, ++ {SD_BLE_GAP_RSSI_GET, conn_mw_ble_gap_rssi_get}, + {SD_BLE_GAP_KEYPRESS_NOTIFY, conn_mw_ble_gap_keypress_notify}, + {SD_BLE_GAP_LESC_DHKEY_REPLY, conn_mw_ble_gap_lesc_dhkey_reply}, + {SD_BLE_GAP_LESC_OOB_DATA_SET, conn_mw_ble_gap_lesc_oob_data_set}, +@@ -80,4 +81,5 @@ static const conn_mw_item_t conn_mw_item[] = { {SD_BLE_GATTS_RW_AUTHORIZE_REPLY, conn_mw_ble_gatts_rw_authorize_reply}, {SD_BLE_GATTS_SYS_ATTR_SET, conn_mw_ble_gatts_sys_attr_set}, {SD_BLE_GATTS_SYS_ATTR_GET, conn_mw_ble_gatts_sys_attr_get}, + {SD_BLE_USER_MEM_REPLY, conn_mw_ble_user_mem_reply}, }; -diff --git a/components/serialization/connectivity/codecs/s130/serializers/ble_gap_evt_auth_status.c b/components/serialization/connectivity/codecs/s130/serializers/ble_gap_evt_auth_status.c ---- a/components/serialization/connectivity/codecs/s130/serializers/ble_gap_evt_auth_status.c -+++ b/components/serialization/connectivity/codecs/s130/serializers/ble_gap_evt_auth_status.c +diff --git nRF5_SDK_11.0.0_89a8197/components/serialization/connectivity/codecs/s130/serializers/ble_gap_evt_auth_status.c nRF5_SDK_11.0.0_XXXXXXX/components/serialization/connectivity/codecs/s130/serializers/ble_gap_evt_auth_status.c +index 817f269..2b50dce 100644 +--- nRF5_SDK_11.0.0_89a8197/components/serialization/connectivity/codecs/s130/serializers/ble_gap_evt_auth_status.c ++++ nRF5_SDK_11.0.0_XXXXXXX/components/serialization/connectivity/codecs/s130/serializers/ble_gap_evt_auth_status.c @@ -46,18 +46,22 @@ uint32_t ble_gap_evt_auth_status_enc(ble_evt_t const * const p_event, err_code = ble_gap_evt_auth_status_t_enc(&(p_event->evt.gap_evt.params.auth_status), p_buf, total_len, &index); SER_ASSERT(err_code == NRF_SUCCESS, err_code); @@ -234,9 +253,10 @@ diff --git a/components/serialization/connectivity/codecs/s130/serializers/ble_g *p_buf_len = index; return err_code; } -diff --git a/components/serialization/connectivity/codecs/s130/serializers/ble_gap_evt_disconnected.c b/components/serialization/connectivity/codecs/s130/serializers/ble_gap_evt_disconnected.c ---- a/components/serialization/connectivity/codecs/s130/serializers/ble_gap_evt_disconnected.c -+++ b/components/serialization/connectivity/codecs/s130/serializers/ble_gap_evt_disconnected.c +diff --git nRF5_SDK_11.0.0_89a8197/components/serialization/connectivity/codecs/s130/serializers/ble_gap_evt_disconnected.c nRF5_SDK_11.0.0_XXXXXXX/components/serialization/connectivity/codecs/s130/serializers/ble_gap_evt_disconnected.c +index 0434d1c..50471bd 100644 +--- nRF5_SDK_11.0.0_89a8197/components/serialization/connectivity/codecs/s130/serializers/ble_gap_evt_disconnected.c ++++ nRF5_SDK_11.0.0_XXXXXXX/components/serialization/connectivity/codecs/s130/serializers/ble_gap_evt_disconnected.c @@ -15,6 +15,7 @@ #include "app_util.h" #include "ble.h" @@ -261,9 +281,10 @@ diff --git a/components/serialization/connectivity/codecs/s130/serializers/ble_g + + return NRF_SUCCESS; } -diff --git a/components/serialization/connectivity/codecs/s130/serializers/ble_gatts_attr_get.c b/components/serialization/connectivity/codecs/s130/serializers/ble_gatts_attr_get.c ---- a/components/serialization/connectivity/codecs/s130/serializers/ble_gatts_attr_get.c -+++ b/components/serialization/connectivity/codecs/s130/serializers/ble_gatts_attr_get.c +diff --git nRF5_SDK_11.0.0_89a8197/components/serialization/connectivity/codecs/s130/serializers/ble_gatts_attr_get.c nRF5_SDK_11.0.0_XXXXXXX/components/serialization/connectivity/codecs/s130/serializers/ble_gatts_attr_get.c +index 824bdee..2b8c745 100644 +--- nRF5_SDK_11.0.0_89a8197/components/serialization/connectivity/codecs/s130/serializers/ble_gatts_attr_get.c ++++ nRF5_SDK_11.0.0_XXXXXXX/components/serialization/connectivity/codecs/s130/serializers/ble_gatts_attr_get.c @@ -41,7 +41,7 @@ uint32_t ble_gatts_attr_get_req_dec(uint8_t const * const p_buf, err_code = uint16_t_dec(p_buf, packet_len, &index, p_handle); SER_ASSERT(err_code == NRF_SUCCESS, err_code); @@ -292,9 +313,10 @@ diff --git a/components/serialization/connectivity/codecs/s130/serializers/ble_g err_code = cond_field_enc(p_md, p_buf, buflen, &index, ble_gatts_attr_md_enc); SER_ASSERT(err_code == NRF_SUCCESS, err_code); -diff --git a/components/serialization/connectivity/codecs/s130/serializers/ble_gatts_conn.h b/components/serialization/connectivity/codecs/s130/serializers/ble_gatts_conn.h ---- a/components/serialization/connectivity/codecs/s130/serializers/ble_gatts_conn.h -+++ b/components/serialization/connectivity/codecs/s130/serializers/ble_gatts_conn.h +diff --git nRF5_SDK_11.0.0_89a8197/components/serialization/connectivity/codecs/s130/serializers/ble_gatts_conn.h nRF5_SDK_11.0.0_XXXXXXX/components/serialization/connectivity/codecs/s130/serializers/ble_gatts_conn.h +index 7eb052f..f17df14 100644 +--- nRF5_SDK_11.0.0_89a8197/components/serialization/connectivity/codecs/s130/serializers/ble_gatts_conn.h ++++ nRF5_SDK_11.0.0_XXXXXXX/components/serialization/connectivity/codecs/s130/serializers/ble_gatts_conn.h @@ -539,7 +539,8 @@ uint32_t ble_gatts_attr_get_req_dec(uint8_t const * const p_buf, * returned. * @param[in,out] p_buf_len \c in: size of \p p_buf buffer. @@ -313,9 +335,10 @@ diff --git a/components/serialization/connectivity/codecs/s130/serializers/ble_g ble_gatts_attr_md_t * p_md); /**@brief Decodes @ref ble_gatts_initial_user_handle_get_req_dec command request. -diff --git a/components/serialization/connectivity/ser_conn_error_handling.c b/components/serialization/connectivity/ser_conn_error_handling.c ---- a/components/serialization/connectivity/ser_conn_error_handling.c -+++ b/components/serialization/connectivity/ser_conn_error_handling.c +diff --git nRF5_SDK_11.0.0_89a8197/components/serialization/connectivity/ser_conn_error_handling.c nRF5_SDK_11.0.0_XXXXXXX/components/serialization/connectivity/ser_conn_error_handling.c +index a4ca279..5a0f788 100644 +--- nRF5_SDK_11.0.0_89a8197/components/serialization/connectivity/ser_conn_error_handling.c ++++ nRF5_SDK_11.0.0_XXXXXXX/components/serialization/connectivity/ser_conn_error_handling.c @@ -74,7 +74,7 @@ void app_error_fault_handler(uint32_t id, uint32_t pc, uint32_t info) /* ble_debug_assert_handler(error_code, line_num, p_file_name); */ @@ -325,9 +348,10 @@ diff --git a/components/serialization/connectivity/ser_conn_error_handling.c b/c /* Reset the chip. Should be used in the release version. */ NVIC_SystemReset(); #else /* Debug version. */ -diff --git a/components/serialization/connectivity/ser_conn_handlers.c b/components/serialization/connectivity/ser_conn_handlers.c ---- a/components/serialization/connectivity/ser_conn_handlers.c -+++ b/components/serialization/connectivity/ser_conn_handlers.c +diff --git nRF5_SDK_11.0.0_89a8197/components/serialization/connectivity/ser_conn_handlers.c nRF5_SDK_11.0.0_XXXXXXX/components/serialization/connectivity/ser_conn_handlers.c +index e69e44e..553d61c 100644 +--- nRF5_SDK_11.0.0_89a8197/components/serialization/connectivity/ser_conn_handlers.c ++++ nRF5_SDK_11.0.0_XXXXXXX/components/serialization/connectivity/ser_conn_handlers.c @@ -124,6 +124,12 @@ void ser_conn_ble_event_handle(ble_evt_t * p_ble_evt) err_code = app_sched_event_put(p_ble_evt, sizeof (ble_evt_hdr_t) + p_ble_evt->header.evt_len, ser_conn_ble_event_encoder); @@ -341,9 +365,10 @@ diff --git a/components/serialization/connectivity/ser_conn_handlers.c b/compone } /** @} */ -diff --git a/components/softdevice/common/softdevice_handler/softdevice_handler.c b/components/softdevice/common/softdevice_handler/softdevice_handler.c ---- a/components/softdevice/common/softdevice_handler/softdevice_handler.c -+++ b/components/softdevice/common/softdevice_handler/softdevice_handler.c +diff --git nRF5_SDK_11.0.0_89a8197/components/softdevice/common/softdevice_handler/softdevice_handler.c nRF5_SDK_11.0.0_XXXXXXX/components/softdevice/common/softdevice_handler/softdevice_handler.c +index 81ee38f..705dc06 100644 +--- nRF5_SDK_11.0.0_89a8197/components/softdevice/common/softdevice_handler/softdevice_handler.c ++++ nRF5_SDK_11.0.0_XXXXXXX/components/softdevice/common/softdevice_handler/softdevice_handler.c @@ -70,6 +70,7 @@ nrf_nvic_state_t nrf_nvic_state; static softdevice_evt_schedule_func_t m_evt_schedule_func; /**< Pointer to function for propagating SoftDevice events to the scheduler. */ @@ -436,9 +461,10 @@ diff --git a/components/softdevice/common/softdevice_handler/softdevice_handler. #if defined(BLE_STACK_SUPPORT_REQD) uint32_t softdevice_enable_get_default_config(uint8_t central_links_count, uint8_t periph_links_count, -diff --git a/components/softdevice/common/softdevice_handler/softdevice_handler.h b/components/softdevice/common/softdevice_handler/softdevice_handler.h ---- a/components/softdevice/common/softdevice_handler/softdevice_handler.h -+++ b/components/softdevice/common/softdevice_handler/softdevice_handler.h +diff --git nRF5_SDK_11.0.0_89a8197/components/softdevice/common/softdevice_handler/softdevice_handler.h nRF5_SDK_11.0.0_XXXXXXX/components/softdevice/common/softdevice_handler/softdevice_handler.h +index 84d5ff8..9a72955 100644 +--- nRF5_SDK_11.0.0_89a8197/components/softdevice/common/softdevice_handler/softdevice_handler.h ++++ nRF5_SDK_11.0.0_XXXXXXX/components/softdevice/common/softdevice_handler/softdevice_handler.h @@ -150,6 +150,23 @@ uint32_t softdevice_handler_init(nrf_clock_lf_cfg_t * p_clock_lf_cf */ uint32_t softdevice_handler_sd_disable(void); @@ -463,17 +489,18 @@ diff --git a/components/softdevice/common/softdevice_handler/softdevice_handler. /**@brief Function for registering for System (SOC) events. * -diff --git a/examples/ble_central_and_peripheral/ble_connectivity/main.c b/examples/ble_central_and_peripheral/ble_connectivity/main.c ---- a/examples/ble_central_and_peripheral/ble_connectivity/main.c -+++ b/examples/ble_central_and_peripheral/ble_connectivity/main.c +diff --git nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/main.c nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/main.c +index 83241ef..1c48018 100644 +--- nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/main.c ++++ nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/main.c @@ -28,9 +28,43 @@ #include "ser_hal_transport.h" #include "ser_conn_handlers.h" #include "boards.h" +#include "ser_config.h" - + #include "ser_phy_debug_comm.h" - + +#if defined ( __CC_ARM ) +typedef struct __attribute__((packed)) +{ @@ -496,9 +523,9 @@ diff --git a/examples/ble_central_and_peripheral/ble_connectivity/main.c b/examp + .struct_version = 2, + .rfu0 = 0xFFFFFF, + .revision_hash = 0, -+ .version_major = 2, -+ .version_minor = 0, -+ .version_patch = 1, ++ .version_major = 0xf1, ++ .version_minor = 0xf2, ++ .version_patch = 0xf3, + .rfu1 = 0xFF, + .sd_ble_api_version = 2, + .transport_type = 1, @@ -510,8 +537,8 @@ diff --git a/examples/ble_central_and_peripheral/ble_connectivity/main.c b/examp /**@brief Main function of the connectivity application. */ int main(void) { -@@ -65,6 +94,15 @@ int main(void) - { +@@ -65,6 +99,15 @@ int main(void) + { /* Process SoftDevice events. */ app_sched_execute(); + if (softdevice_handler_is_suspended()) @@ -523,13 +550,13 @@ diff --git a/examples/ble_central_and_peripheral/ble_connectivity/main.c b/examp + app_sched_execute(); + } + } - + /* Process received packets. * We can NOT add received packets as events to the application scheduler queue because -diff --git a/examples/ble_central_and_peripheral/ble_connectivity/pca10028/ser_s130_hci/arm5_no_packs/ble_connectivity_s130_hci_pca10028.uvprojx b/examples/ble_central_and_peripheral/ble_connectivity/pca10028/ser_s130_hci/arm5_no_packs/ble_connectivity_s130_hci_pca10028.uvprojx -index 0f597ba..2f6bfb4 100644 ---- a/examples/ble_central_and_peripheral/ble_connectivity/pca10028/ser_s130_hci/arm5_no_packs/ble_connectivity_s130_hci_pca10028.uvprojx -+++ b/examples/ble_central_and_peripheral/ble_connectivity/pca10028/ser_s130_hci/arm5_no_packs/ble_connectivity_s130_hci_pca10028.uvprojx +diff --git nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10028/ser_s130_hci/arm5_no_packs/ble_connectivity_s130_hci_pca10028.uvprojx nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/pca10028/ser_s130_hci/arm5_no_packs/ble_connectivity_s130_hci_pca10028.uvprojx +index 0265b80..13d400b 100644 +--- nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10028/ser_s130_hci/arm5_no_packs/ble_connectivity_s130_hci_pca10028.uvprojx ++++ nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/pca10028/ser_s130_hci/arm5_no_packs/ble_connectivity_s130_hci_pca10028.uvprojx @@ -366,7 +366,7 @@ 0 0 @@ -539,3 +566,159 @@ index 0f597ba..2f6bfb4 100644 HCI_TIMER2 BLE_STACK_SUPPORT_REQD __STACK_SIZE=2048 __HEAP_SIZE=1024 BOARD_PCA10028 S130 SER_CONNECTIVITY APP_SCHEDULER_WITH_PAUSE BSP_DEFINES_ONLY NRF51 SOFTDEVICE_PRESENT SWI_DISABLE0 ..\..\..\config\ble_connectivity_s130_hci_pca10028;..\..\..\config;..\..\..\..\..\..\components\ble\ble_dtm;..\..\..\..\..\..\components\ble\common;..\..\..\..\..\..\components\drivers_nrf\common;..\..\..\..\..\..\components\drivers_nrf\config;..\..\..\..\..\..\components\drivers_nrf\delay;..\..\..\..\..\..\components\drivers_nrf\hal;..\..\..\..\..\..\components\drivers_nrf\uart;..\..\..\..\..\..\components\libraries\crc16;..\..\..\..\..\..\components\libraries\mailbox;..\..\..\..\..\..\components\libraries\scheduler;..\..\..\..\..\..\components\libraries\timer;..\..\..\..\..\..\components\libraries\uart;..\..\..\..\..\..\components\libraries\util;..\..\..\..\..\..\components\serialization\common;..\..\..\..\..\..\components\serialization\common\struct_ser\s130;..\..\..\..\..\..\components\serialization\common\transport;..\..\..\..\..\..\components\serialization\common\transport\ser_phy;..\..\..\..\..\..\components\serialization\common\transport\ser_phy\config;..\..\..\..\..\..\components\serialization\connectivity;..\..\..\..\..\..\components\serialization\connectivity\codecs\common;..\..\..\..\..\..\components\serialization\connectivity\codecs\s130\middleware;..\..\..\..\..\..\components\serialization\connectivity\codecs\s130\serializers;..\..\..\..\..\..\components\serialization\connectivity\hal;..\..\..\..\..\..\components\softdevice\common\softdevice_handler;..\..\..\..\..\..\components\softdevice\s130\headers;..\..\..\..\..\..\components\softdevice\s130\headers\nrf51;..\..\..\..\..\..\components\toolchain;..\..\..\..\..\bsp +diff --git nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10028/ser_s130_hci/armgcc/Makefile nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/pca10028/ser_s130_hci/armgcc/Makefile +index f02d9d2..cc9dd3f 100644 +--- nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10028/ser_s130_hci/armgcc/Makefile ++++ nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/pca10028/ser_s130_hci/armgcc/Makefile +@@ -13,7 +13,7 @@ include $(TEMPLATE_PATH)/Makefile.posix + endif + + MK := mkdir +-RM := rm -rf ++RM := cmake -E remove_directory + + #echo suspend + ifeq ("$(VERBOSE)","1") +diff --git nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10028/ser_s130_spi/armgcc/Makefile nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/pca10028/ser_s130_spi/armgcc/Makefile +index 39a998a..c8dc2a6 100644 +--- nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10028/ser_s130_spi/armgcc/Makefile ++++ nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/pca10028/ser_s130_spi/armgcc/Makefile +@@ -13,7 +13,7 @@ include $(TEMPLATE_PATH)/Makefile.posix + endif + + MK := mkdir +-RM := rm -rf ++RM := cmake -E remove_directory + + #echo suspend + ifeq ("$(VERBOSE)","1") +diff --git nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10028/ser_s130_spi_5W/armgcc/Makefile nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/pca10028/ser_s130_spi_5W/armgcc/Makefile +index 37dbe7c..917ae00 100644 +--- nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10028/ser_s130_spi_5W/armgcc/Makefile ++++ nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/pca10028/ser_s130_spi_5W/armgcc/Makefile +@@ -13,7 +13,7 @@ include $(TEMPLATE_PATH)/Makefile.posix + endif + + MK := mkdir +-RM := rm -rf ++RM := cmake -E remove_directory + + #echo suspend + ifeq ("$(VERBOSE)","1") +diff --git nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10028/ser_s130_uart/armgcc/Makefile nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/pca10028/ser_s130_uart/armgcc/Makefile +index 77f246a..1e6f8eb 100644 +--- nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10028/ser_s130_uart/armgcc/Makefile ++++ nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/pca10028/ser_s130_uart/armgcc/Makefile +@@ -13,7 +13,7 @@ include $(TEMPLATE_PATH)/Makefile.posix + endif + + MK := mkdir +-RM := rm -rf ++RM := cmake -E remove_directory + + #echo suspend + ifeq ("$(VERBOSE)","1") +diff --git nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10036/ser_s132_hci/armgcc/Makefile nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/pca10036/ser_s132_hci/armgcc/Makefile +index 989b76f..ca395e5 100644 +--- nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10036/ser_s132_hci/armgcc/Makefile ++++ nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/pca10036/ser_s132_hci/armgcc/Makefile +@@ -13,7 +13,7 @@ include $(TEMPLATE_PATH)/Makefile.posix + endif + + MK := mkdir +-RM := rm -rf ++RM := cmake -E remove_directory + + #echo suspend + ifeq ("$(VERBOSE)","1") +diff --git nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10036/ser_s132_spi/armgcc/Makefile nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/pca10036/ser_s132_spi/armgcc/Makefile +index 2459d52..e79a308 100644 +--- nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10036/ser_s132_spi/armgcc/Makefile ++++ nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/pca10036/ser_s132_spi/armgcc/Makefile +@@ -13,7 +13,7 @@ include $(TEMPLATE_PATH)/Makefile.posix + endif + + MK := mkdir +-RM := rm -rf ++RM := cmake -E remove_directory + + #echo suspend + ifeq ("$(VERBOSE)","1") +diff --git nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10036/ser_s132_spi_5W/armgcc/Makefile nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/pca10036/ser_s132_spi_5W/armgcc/Makefile +index 955648e..8269725 100644 +--- nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10036/ser_s132_spi_5W/armgcc/Makefile ++++ nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/pca10036/ser_s132_spi_5W/armgcc/Makefile +@@ -13,7 +13,7 @@ include $(TEMPLATE_PATH)/Makefile.posix + endif + + MK := mkdir +-RM := rm -rf ++RM := cmake -E remove_directory + + #echo suspend + ifeq ("$(VERBOSE)","1") +diff --git nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10036/ser_s132_uart/armgcc/Makefile nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/pca10036/ser_s132_uart/armgcc/Makefile +index fb5210d..9d004e8 100644 +--- nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10036/ser_s132_uart/armgcc/Makefile ++++ nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/pca10036/ser_s132_uart/armgcc/Makefile +@@ -13,7 +13,7 @@ include $(TEMPLATE_PATH)/Makefile.posix + endif + + MK := mkdir +-RM := rm -rf ++RM := cmake -E remove_directory + + #echo suspend + ifeq ("$(VERBOSE)","1") +diff --git nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10040/ser_s132_hci/armgcc/Makefile nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/pca10040/ser_s132_hci/armgcc/Makefile +index f4b3fc1..ab9016d 100644 +--- nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10040/ser_s132_hci/armgcc/Makefile ++++ nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/pca10040/ser_s132_hci/armgcc/Makefile +@@ -13,7 +13,7 @@ include $(TEMPLATE_PATH)/Makefile.posix + endif + + MK := mkdir +-RM := rm -rf ++RM := cmake -E remove_directory + + #echo suspend + ifeq ("$(VERBOSE)","1") +diff --git nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10040/ser_s132_spi/armgcc/Makefile nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/pca10040/ser_s132_spi/armgcc/Makefile +index 5ef79e6..9618498 100644 +--- nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10040/ser_s132_spi/armgcc/Makefile ++++ nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/pca10040/ser_s132_spi/armgcc/Makefile +@@ -13,7 +13,7 @@ include $(TEMPLATE_PATH)/Makefile.posix + endif + + MK := mkdir +-RM := rm -rf ++RM := cmake -E remove_directory + + #echo suspend + ifeq ("$(VERBOSE)","1") +diff --git nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10040/ser_s132_spi_5W/armgcc/Makefile nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/pca10040/ser_s132_spi_5W/armgcc/Makefile +index 86f56c1..5cc47ef 100644 +--- nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10040/ser_s132_spi_5W/armgcc/Makefile ++++ nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/pca10040/ser_s132_spi_5W/armgcc/Makefile +@@ -13,7 +13,7 @@ include $(TEMPLATE_PATH)/Makefile.posix + endif + + MK := mkdir +-RM := rm -rf ++RM := cmake -E remove_directory + + #echo suspend + ifeq ("$(VERBOSE)","1") +diff --git nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10040/ser_s132_uart/armgcc/Makefile nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/pca10040/ser_s132_uart/armgcc/Makefile +index d7efd5d..ab0e8b9 100644 +--- nRF5_SDK_11.0.0_89a8197/examples/ble_central_and_peripheral/ble_connectivity/pca10040/ser_s132_uart/armgcc/Makefile ++++ nRF5_SDK_11.0.0_XXXXXXX/examples/ble_central_and_peripheral/ble_connectivity/pca10040/ser_s132_uart/armgcc/Makefile +@@ -13,7 +13,7 @@ include $(TEMPLATE_PATH)/Makefile.posix + endif + + MK := mkdir +-RM := rm -rf ++RM := cmake -E remove_directory + + #echo suspend + ifeq ("$(VERBOSE)","1") diff --git a/hex/nRF5_SDK_15.2.0_connectivity.patch b/hex/nRF5_SDK_15.2.0_connectivity.patch new file mode 100644 index 000000000..be2d2f72a --- /dev/null +++ b/hex/nRF5_SDK_15.2.0_connectivity.patch @@ -0,0 +1,71323 @@ +diff --git nRF5_SDK_15.2.0_9412b96/components/boards/pca10056.h nRF5_SDK_15.2.0_80108de/components/boards/pca10056.h +index 6b3f92f..7fbfbca 100644 +--- nRF5_SDK_15.2.0_9412b96/components/boards/pca10056.h ++++ nRF5_SDK_15.2.0_80108de/components/boards/pca10056.h +@@ -90,6 +90,8 @@ extern "C" { + #define RTS_PIN_NUMBER 5 + #define HWFC true + ++#define BSP_SELF_PINRESET_PIN NRF_GPIO_PIN_MAP(0,24) ++ + #define BSP_QSPI_SCK_PIN 19 + #define BSP_QSPI_CSN_PIN 17 + #define BSP_QSPI_IO0_PIN 20 +diff --git nRF5_SDK_15.2.0_9412b96/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.c nRF5_SDK_15.2.0_80108de/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.c +index 755581d..23b34db 100644 +--- nRF5_SDK_15.2.0_9412b96/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.c ++++ nRF5_SDK_15.2.0_80108de/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.c +@@ -50,10 +50,6 @@ + #include "nrf_log.h" + NRF_LOG_MODULE_REGISTER(); + +-#ifndef BSP_SELF_PINRESET_PIN +-#error "This module is intended to be used with boards that have the GP pin shortened with the RESET pin." +-#endif +- + /** + * @brief Enable power USB detection. + * +@@ -71,6 +67,7 @@ NRF_LOG_MODULE_REGISTER(); + + static uint8_t m_version_string[] = APP_NAME " " VERSION_STRING; ///< Human-readable version string. + static app_usbd_nrf_dfu_trigger_nordic_info_t m_dfu_info; ///< Struct with various information about the current firmware. ++static uint32_t m_pin_reset; + + static void dfu_trigger_evt_handler(app_usbd_class_inst_t const * p_inst, + app_usbd_nrf_dfu_trigger_user_event_t event) +@@ -82,8 +79,8 @@ static void dfu_trigger_evt_handler(app_usbd_class_inst_t const * p_inst + case APP_USBD_NRF_DFU_TRIGGER_USER_EVT_DETACH: + NRF_LOG_INFO("DFU Detach request received. Triggering a pin reset."); + NRF_LOG_FINAL_FLUSH(); +- nrf_gpio_cfg_output(BSP_SELF_PINRESET_PIN); +- nrf_gpio_pin_clear(BSP_SELF_PINRESET_PIN); ++ nrf_gpio_cfg_output(m_pin_reset); ++ nrf_gpio_pin_clear(m_pin_reset); + break; + default: + break; +@@ -173,7 +170,7 @@ static void usbd_evt_handler(app_usbd_internal_evt_t const * const p_event) + } + #endif + +-ret_code_t nrf_dfu_trigger_usb_init(void) ++ret_code_t nrf_dfu_trigger_usb_init(uint32_t pin_reset) + { + ret_code_t ret; + static bool initialized = false; +@@ -183,6 +180,7 @@ ret_code_t nrf_dfu_trigger_usb_init(void) + return NRF_SUCCESS; + } + ++ m_pin_reset = pin_reset; + m_dfu_info.wAddress = CODE_START; + m_dfu_info.wFirmwareSize = CODE_SIZE; + m_dfu_info.wVersionMajor = APP_VERSION_MAJOR; +diff --git nRF5_SDK_15.2.0_9412b96/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.h nRF5_SDK_15.2.0_80108de/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.h +index 5906a80..8befbe9 100644 +--- nRF5_SDK_15.2.0_9412b96/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.h ++++ nRF5_SDK_15.2.0_80108de/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.h +@@ -63,11 +63,12 @@ + * + * @note If @ref APP_USBD_CONFIG_EVENT_QUEUE_ENABLE is on (1), USB events must be handled manually. + * See @ref app_usbd_event_queue_process. ++ * @param pin_reset Pin which is shortened with the actual pin reset. + * + * @retval NRF_SUCCESS On successful initialization. + * @return An error code on failure, for example if called at a wrong time. + */ +-ret_code_t nrf_dfu_trigger_usb_init(void); ++ret_code_t nrf_dfu_trigger_usb_init(uint32_t pin_reset); + + /** @} */ + +diff --git nRF5_SDK_15.2.0_9412b96/components/libraries/log/src/nrf_log_ctrl_internal.h nRF5_SDK_15.2.0_80108de/components/libraries/log/src/nrf_log_ctrl_internal.h +index 3478d9f..660652b 100644 +--- nRF5_SDK_15.2.0_9412b96/components/libraries/log/src/nrf_log_ctrl_internal.h ++++ nRF5_SDK_15.2.0_80108de/components/libraries/log/src/nrf_log_ctrl_internal.h +@@ -79,7 +79,7 @@ + #else // NRF_MODULE_ENABLED(NRF_LOG) + #define NRF_LOG_INTERNAL_PROCESS() false + #define NRF_LOG_INTERNAL_FLUSH() +-#define NRF_LOG_INTERNAL_INIT(timestamp_func) NRF_SUCCESS ++#define NRF_LOG_INTERNAL_INIT(...) NRF_SUCCESS + #define NRF_LOG_INTERNAL_HANDLERS_SET(default_handler, bytes_handler) \ + UNUSED_PARAMETER(default_handler); UNUSED_PARAMETER(bytes_handler) + #define NRF_LOG_INTERNAL_FINAL_FLUSH() +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/middleware/app_mw_ble.c nRF5_SDK_15.2.0_80108de/components/serialization/application/codecs/ble/middleware/app_mw_ble.c +index 033d974..94ff331 100644 +--- nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/middleware/app_mw_ble.c ++++ nRF5_SDK_15.2.0_80108de/components/serialization/application/codecs/ble/middleware/app_mw_ble.c +@@ -44,6 +44,7 @@ + #include "ser_sd_transport.h" + #include "app_error.h" + #include "app_ble_user_mem.h" ++#include "app_ble_gap_sec_keys.h" + + extern ser_ble_user_mem_t m_app_user_mem_table[]; + +@@ -467,6 +468,8 @@ uint32_t _sd_ble_enable(ble_enable_params_t * p_params, uint32_t * p_app_ram_bas + //Ignore ram_base parameter + (void)p_app_ram_base; + ++ app_ble_gap_sec_keys_init(); ++ + tx_buf_alloc(&p_buffer, &buffer_length); + mp_out_params[0] = p_params; + +@@ -490,6 +493,8 @@ uint32_t _sd_ble_enable(uint32_t * p_app_ram_base) + //Ignore ram_base parameter + (void)p_app_ram_base; + ++ app_ble_gap_sec_keys_init(); ++ + tx_buf_alloc(&p_buffer, &buffer_length); + + const uint32_t err_code = ble_enable_req_enc(&(p_buffer[1]), +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/middleware/app_mw_ble_gap.c nRF5_SDK_15.2.0_80108de/components/serialization/application/codecs/ble/middleware/app_mw_ble_gap.c +index 1fbb06f..c60d92d 100644 +--- nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/middleware/app_mw_ble_gap.c ++++ nRF5_SDK_15.2.0_80108de/components/serialization/application/codecs/ble/middleware/app_mw_ble_gap.c +@@ -1069,7 +1069,9 @@ uint32_t _sd_ble_gap_scan_stop(void) + &buffer_length); + //@note: Should never fail. + APP_ERROR_CHECK(err_code); +- ++#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 5 ++ app_ble_gap_scan_data_unset(true); ++#endif + //@note: Increment buffer length as internally managed packet type field must be included. + return ser_sd_transport_cmd_write(p_buffer, + (++buffer_length), +@@ -1195,6 +1197,11 @@ static uint32_t gap_scan_start_rsp_dec(const uint8_t * p_buffer, uint16_t length + length, + &result_code); + ++ if (result_code != NRF_SUCCESS) ++ { ++ app_ble_gap_scan_data_unset(true); ++ } ++ + //@note: Should never fail. + APP_ERROR_CHECK(err_code); + +@@ -1215,13 +1222,7 @@ uint32_t _sd_ble_gap_scan_start(ble_gap_scan_params_t const * const p_scan_param + uint32_t err_code; + + tx_buf_alloc(&p_buffer, (uint16_t *)&buffer_length); +-#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 5 +- if (p_adv_report_buffer) +- { +- err_code = app_ble_gap_scan_data_set(p_adv_report_buffer); +- APP_ERROR_CHECK(err_code); +- } +-#endif ++ + err_code = ble_gap_scan_start_req_enc(p_scan_params, + #if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 5 + p_adv_report_buffer, +@@ -1231,6 +1232,9 @@ uint32_t _sd_ble_gap_scan_start(ble_gap_scan_params_t const * const p_scan_param + //@note: Should never fail. + APP_ERROR_CHECK(err_code); + ++#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 5 ++ app_ble_gap_scan_data_set(p_adv_report_buffer->p_data); ++#endif + //@note: Increment buffer length as internally managed packet type field must be included. + return ser_sd_transport_cmd_write(p_buffer, + (++buffer_length), +@@ -1897,12 +1901,15 @@ static uint32_t gap_adv_set_configure_rsp_dec(const uint8_t * p_buffer, uint16_t + (uint8_t *)mp_out_params[0], + &result_code); + ++ if (result_code != NRF_SUCCESS) ++ { ++ app_ble_gap_adv_buf_addr_unregister(mp_out_params[0], false); ++ app_ble_gap_adv_buf_addr_unregister(mp_out_params[1], false); ++ } ++ + //@note: Should never fail. + APP_ERROR_CHECK(err_code); + +- err_code = app_ble_gap_adv_set_register(*(uint8_t *)mp_out_params[0], +- (uint8_t *)mp_out_params[1], +- (uint8_t *)mp_out_params[2]); + APP_ERROR_CHECK(err_code); + + return result_code; +@@ -1918,13 +1925,19 @@ uint32_t _sd_ble_gap_adv_set_configure(uint8_t *p_adv_handle, + uint8_t * p_buffer; + uint32_t buffer_length = 0; + +- +- + tx_buf_alloc(&p_buffer, (uint16_t *)&buffer_length); + +- mp_out_params[0] = p_adv_handle; +- mp_out_params[1] = p_adv_data ? p_adv_data->adv_data.p_data : NULL; +- mp_out_params[2] = p_adv_data ? p_adv_data->scan_rsp_data.p_data : NULL; ++ if (p_adv_handle) ++ { ++ mp_out_params[0] = p_adv_data->adv_data.p_data; ++ mp_out_params[1] = p_adv_data->scan_rsp_data.p_data; ++ } ++ else ++ { ++ mp_out_params[0] = NULL; ++ mp_out_params[1] = NULL; ++ } ++ + const uint32_t err_code = ble_gap_adv_set_configure_req_enc(p_adv_handle, p_adv_data, p_adv_params, + &(p_buffer[1]), &buffer_length); + //@note: Should never fail. +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.c nRF5_SDK_15.2.0_80108de/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.c +index cb0bd94..849a24d 100644 +--- nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.c ++++ nRF5_SDK_15.2.0_80108de/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.c +@@ -56,9 +56,22 @@ typedef struct { + static adv_set_t m_adv_sets[4]; //todo configurable number of adv sets. + + static ble_data_t m_scan_data = {0}; ++static int scan_data_id; + #endif + ser_ble_gap_app_keyset_t m_app_keys_table[SER_MAX_CONNECTIONS]; + ++static void *m_ble_gap_adv_buf_addr_storage[16]; ++ ++void app_ble_gap_sec_keys_init(void) ++{ ++#if NRF_SD_BLE_API_VERSION >= 6 ++ memset(m_ble_gap_adv_buf_addr_storage, 0, sizeof(m_ble_gap_adv_buf_addr_storage)); ++ memset(&m_scan_data, 0, sizeof(m_scan_data)); ++ memset(m_adv_sets, 0, sizeof(m_adv_sets)); ++#endif ++ memset(m_app_keys_table, 0, sizeof(m_app_keys_table)); ++} ++ + uint32_t app_ble_gap_sec_context_create(uint16_t conn_handle, uint32_t *p_index) + { + uint32_t err_code = NRF_ERROR_NO_MEM; +@@ -115,68 +128,83 @@ uint32_t app_ble_gap_sec_context_find(uint16_t conn_handle, uint32_t *p_index) + return err_code; + } + #if NRF_SD_BLE_API_VERSION >= 6 +-uint32_t app_ble_gap_scan_data_set(ble_data_t const * p_data) ++ ++int app_ble_gap_adv_buf_register(void * p_buf) + { +- if (m_scan_data.p_data) ++ int i; ++ ++ if (p_buf == NULL) + { +- return NRF_ERROR_BUSY; ++ return 0; + } +- else ++ ++ for (i = 0; i < ARRAY_SIZE(m_ble_gap_adv_buf_addr_storage); i++) + { +- memcpy(&m_scan_data, p_data, sizeof(ble_data_t)); +- return NRF_SUCCESS; ++ if (m_ble_gap_adv_buf_addr_storage[i] == NULL) { ++ m_ble_gap_adv_buf_addr_storage[i] = p_buf; ++ return i+1; ++ } + } +-} + ++ return -1; ++} + +-uint32_t app_ble_gap_scan_data_fetch_clear(ble_data_t * p_data) ++void *app_ble_gap_adv_buf_unregister(int id, bool event_context) + { +- memcpy(p_data, &m_scan_data, sizeof(ble_data_t)); +- if (m_scan_data.p_data) ++ (void)event_context; ++ if (id == 0) + { +- m_scan_data.p_data = NULL; +- return NRF_SUCCESS; +- } +- else +- { +- return NRF_ERROR_NOT_FOUND; ++ return NULL; + } ++ ++ void * ret = m_ble_gap_adv_buf_addr_storage[id-1]; ++ m_ble_gap_adv_buf_addr_storage[id-1] = NULL; ++ ++ return ret; + } + +-uint32_t app_ble_gap_adv_set_register(uint8_t adv_handle, uint8_t * p_adv_data, uint8_t * p_scan_rsp_data) ++void app_ble_gap_adv_buf_addr_unregister(void * p_buf, bool event_context) + { +- uint32_t err_code = NRF_ERROR_NO_MEM; +- uint32_t i; +- for (i = 0; i < ARRAY_SIZE(m_adv_sets); i++) ++ (void)event_context; ++ int i; ++ ++ if (p_buf == NULL) + { +- if (m_adv_sets[i].active == false) +- { +- m_adv_sets[i].active = true; +- m_adv_sets[i].adv_handle = adv_handle; +- m_adv_sets[i].p_adv_data = p_adv_data; +- m_adv_sets[i].p_scan_rsp_data = p_scan_rsp_data; +- err_code = NRF_SUCCESS; +- break; +- } ++ return; + } +- return err_code; ++ ++ for (i = 0; i < ARRAY_SIZE(m_ble_gap_adv_buf_addr_storage); i++) ++ { ++ if (m_ble_gap_adv_buf_addr_storage[i] == p_buf) { ++ m_ble_gap_adv_buf_addr_storage[i] = NULL; ++ } ++ } + } + +-uint32_t app_ble_gap_adv_set_unregister(uint8_t adv_handle, uint8_t * * pp_adv_data, uint8_t **pp_scan_rsp_data) ++void app_ble_gap_scan_data_set(uint8_t * p_scan_data) + { +- uint32_t err_code = NRF_ERROR_NOT_FOUND; +- uint32_t i; +- for (i = 0; i < ARRAY_SIZE(m_adv_sets); i++) ++ int i; ++ ++ for (i = 0; i < ARRAY_SIZE(m_ble_gap_adv_buf_addr_storage); i++) + { +- if ((m_adv_sets[i].active == true) && (m_adv_sets[i].adv_handle == adv_handle)) +- { +- m_adv_sets[i].active = false; +- *pp_adv_data = m_adv_sets[i].p_adv_data; +- *pp_scan_rsp_data = m_adv_sets[i].p_scan_rsp_data; +- err_code = NRF_SUCCESS; +- break; ++ if (m_ble_gap_adv_buf_addr_storage[i] == p_scan_data) { ++ scan_data_id = i+1; ++ return; + } + } +- return err_code; ++ scan_data_id = 0; ++} ++ ++void app_ble_gap_scan_data_unset(bool free) ++{ ++ if (scan_data_id) ++ { ++ if (free) ++ { ++ app_ble_gap_adv_buf_unregister(scan_data_id, false); ++ } ++ scan_data_id = 0; ++ } + } ++ + #endif +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.h nRF5_SDK_15.2.0_80108de/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.h +index 58a0870..f2edf11 100644 +--- nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.h ++++ nRF5_SDK_15.2.0_80108de/components/serialization/application/codecs/ble/serializers/app_ble_gap_sec_keys.h +@@ -53,6 +53,7 @@ + #include "ble_types.h" + + #include ++#include + + #ifdef __cplusplus + extern "C" { +@@ -69,6 +70,8 @@ typedef struct + ble_gap_sec_keyset_t keyset; /**< Keyset structure, see @ref ble_gap_sec_keyset_t.*/ + } ser_ble_gap_app_keyset_t; + ++void app_ble_gap_sec_keys_init(void); ++ + /**@brief Allocates the instance in m_app_keys_table[] for storage of encryption keys. + * + * @param[in] conn_handle conn_handle +@@ -101,48 +104,14 @@ uint32_t app_ble_gap_sec_context_find(uint16_t conn_handle, uint32_t *p_index); + /** @} */ + + #if NRF_SD_BLE_API_VERSION >= 6 +-/** +- * @brief Stores buffer for adv report data. +- * +- * @param p_data Pointer to the buffer. +- * +- * @return NRF_SUCCESS or error in case pointer is already set. +- */ +-uint32_t app_ble_gap_scan_data_set(ble_data_t const * p_data); + +-/** +- * @brief Returns pointer to the buffer for storing report data. Returns error if not paired with +- * @ref app_ble_gap_scan_data_set call. +- * +- * @param[out] p_data Stored data. +- * @return NRF_SUCCESS or error in case pointer is already cleared. +- */ +-uint32_t app_ble_gap_scan_data_fetch_clear(ble_data_t * p_data); ++int app_ble_gap_adv_buf_register(void * p_buf); ++void *app_ble_gap_adv_buf_unregister(int id, bool event_context); ++void app_ble_gap_adv_buf_addr_unregister(void * p_buf, bool event_context); + +-/** +- * @brief Function for registering data pointers related with given adv_handle. +- * +- * @param adv_handle Handle. +- * @param p_adv_data Adv_data buffer. +- * @param p_scan_rsp_data Scan_rsp_data buffer. +- * +- * @return NRF_SUCCESS or error. +- * +- */ +-uint32_t app_ble_gap_adv_set_register(uint8_t adv_handle, uint8_t * p_adv_data, uint8_t * p_scan_rsp_data); ++void app_ble_gap_scan_data_set(uint8_t * p_scan_data); ++void app_ble_gap_scan_data_unset(bool free); + +- +-/** +- * @brief Function for unregistering given . +- * +- * @param[in] adv_handle Handle. +- * @param[out] pp_adv_data Pointer to adv_data buffer associated with given adv_handle. +- * @param[out] pp_scan_rsp_data Pointer to adv_data buffer associated with given adv_handle. +- * +- * @return NRF_SUCCESS or error. +- * +- */ +-uint32_t app_ble_gap_adv_set_unregister(uint8_t adv_handle, uint8_t * * pp_adv_data, uint8_t **pp_scan_rsp_data); + #endif + #ifdef __cplusplus + } +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/serializers/ble_gap_app.c nRF5_SDK_15.2.0_80108de/components/serialization/application/codecs/ble/serializers/ble_gap_app.c +index 2eac945..24bd2cf 100644 +--- nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/serializers/ble_gap_app.c ++++ nRF5_SDK_15.2.0_80108de/components/serialization/application/codecs/ble/serializers/ble_gap_app.c +@@ -650,6 +650,7 @@ uint32_t ble_gap_scan_start_rsp_dec(uint8_t const * const p_buf, + uint32_t * const p_result_code) + { + SER_RSP_DEC_RESULT_ONLY(SD_BLE_GAP_SCAN_START); ++ + } + + +@@ -978,6 +979,7 @@ uint32_t ble_gap_adv_set_configure_rsp_dec(uint8_t const * const p_buf, + { + SER_RSP_DEC_BEGIN(SD_BLE_GAP_ADV_SET_CONFIGURE); + SER_PULL_COND((void **)&p_adv_handle, uint8_t_dec); ++ + SER_RSP_DEC_END; + } + +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/serializers/ble_gap_evt_app.c nRF5_SDK_15.2.0_80108de/components/serialization/application/codecs/ble/serializers/ble_gap_evt_app.c +index c8cbc94..8b83d5d 100644 +--- nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/ble/serializers/ble_gap_evt_app.c ++++ nRF5_SDK_15.2.0_80108de/components/serialization/application/codecs/ble/serializers/ble_gap_evt_app.c +@@ -42,6 +42,7 @@ + #include "app_util.h" + #include "app_ble_gap_sec_keys.h" + #include "ble_gap_struct_serialization.h" ++#include "ble_struct_serialization.h" + #include "cond_field_serialization.h" + #include + +@@ -59,11 +60,11 @@ uint32_t ble_gap_evt_adv_report_dec(uint8_t const * const p_buf, + + #if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION >= 6 + //get buffer stored during scan start. +- err_code = app_ble_gap_scan_data_fetch_clear(&p_event->evt.gap_evt.params.adv_report.data); +- SER_ASSERT(err_code == NRF_SUCCESS, err_code); ++ app_ble_gap_scan_data_unset(false); + #endif + SER_PULL_FIELD(&p_event->evt.gap_evt.params.adv_report, ble_gap_evt_adv_report_t_dec); + ++ + SER_EVT_DEC_END; + } + #endif //!S112 +@@ -161,15 +162,7 @@ uint32_t ble_gap_evt_connected_dec(uint8_t const * const p_buf, + + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gap_evt.params.connected, ble_gap_evt_connected_t_dec); +-#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 5 +- if (BLE_GAP_ROLE_PERIPH == p_event->evt.gap_evt.params.connected.role) +- { +- err_code = app_ble_gap_adv_set_unregister(p_event->evt.gap_evt.params.connected.adv_handle, +- &p_event->evt.gap_evt.params.connected.adv_data.adv_data.p_data, +- &p_event->evt.gap_evt.params.connected.adv_data.scan_rsp_data.p_data); +- SER_ASSERT(err_code == NRF_SUCCESS, err_code); +- } +-#endif ++ + SER_EVT_DEC_END; + } + +@@ -330,9 +323,7 @@ uint32_t ble_gap_evt_timeout_dec(uint8_t const * const p_buf, + #if defined(NRF_SD_BLE_API_VERSION) && (NRF_SD_BLE_API_VERSION > 5) && !defined(S112) + if (p_event->evt.gap_evt.params.timeout.src == BLE_GAP_TIMEOUT_SRC_SCAN) + { +- SER_PULL_uint16(&p_event->evt.gap_evt.params.timeout.params.adv_report_buffer.len); +- err_code = app_ble_gap_scan_data_fetch_clear(&p_event->evt.gap_evt.params.timeout.params.adv_report_buffer); +- SER_ASSERT(err_code == NRF_SUCCESS, err_code); ++ SER_PULL_FIELD(&p_event->evt.gap_evt.params.timeout.params.adv_report_buffer, ble_data_t_dec); + } + #endif + SER_EVT_DEC_END; +@@ -419,12 +410,6 @@ uint32_t ble_gap_evt_adv_set_terminated_dec(uint8_t const * const p_buf, + SER_PULL_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PULL_FIELD(&p_event->evt.gap_evt.params.adv_set_terminated, ble_gap_evt_adv_set_terminated_t_dec); + +- err_code = app_ble_gap_adv_set_unregister( +- p_event->evt.gap_evt.params.adv_set_terminated.adv_handle, +- &p_event->evt.gap_evt.params.adv_set_terminated.adv_data.adv_data.p_data, +- &p_event->evt.gap_evt.params.adv_set_terminated.adv_data.scan_rsp_data.p_data); +- SER_ERROR_CHECK(err_code == NRF_SUCCESS, err_code); +- + SER_EVT_DEC_END; + } + #endif +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/common/conn_systemreset.c nRF5_SDK_15.2.0_80108de/components/serialization/application/codecs/common/conn_systemreset.c +index ca012d2..f1088c4 100644 +--- nRF5_SDK_15.2.0_9412b96/components/serialization/application/codecs/common/conn_systemreset.c ++++ nRF5_SDK_15.2.0_80108de/components/serialization/application/codecs/common/conn_systemreset.c +@@ -56,8 +56,9 @@ uint32_t conn_systemreset(void) + } + + SER_ASSERT_LENGTH_LEQ(SER_PKT_TYPE_SIZE, tx_buf_len); +- p_tx_buf[SER_PKT_TYPE_POS] = SER_PKT_TYPE_RESET_CMD; +- tx_buf_len = SER_PKT_TYPE_SIZE; ++ p_tx_buf[SER_PKT_TYPE_POS] = SER_PKT_TYPE_GENERIC_CMD; ++ p_tx_buf[SER_PKT_TYPE_POS+1] = SER_GENERIC_CMD_RESET; ++ tx_buf_len = SER_PKT_TYPE_SIZE + 1; + + err_code = ser_sd_transport_cmd_write(p_tx_buf, tx_buf_len, NULL); + if (err_code != NRF_SUCCESS) +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/ble_serialization.h nRF5_SDK_15.2.0_80108de/components/serialization/common/ble_serialization.h +index dc37234..0787032 100644 +--- nRF5_SDK_15.2.0_9412b96/components/serialization/common/ble_serialization.h ++++ nRF5_SDK_15.2.0_80108de/components/serialization/common/ble_serialization.h +@@ -58,7 +58,7 @@ typedef enum + SER_PKT_TYPE_EVT, /**< Event packet type. */ + SER_PKT_TYPE_DTM_CMD, /**< DTM Command packet type. */ + SER_PKT_TYPE_DTM_RESP, /**< DTM Response packet type. */ +- SER_PKT_TYPE_RESET_CMD, /**< System Reset Command packet type. */ ++ SER_PKT_TYPE_GENERIC_CMD, /**< GENERIC Command packet type. */ + #if defined(ANT_STACK_SUPPORT_REQD) + SER_PKT_TYPE_ANT_CMD, /**< ANT Command packet type. */ + SER_PKT_TYPE_ANT_RESP, /**< ANT Response packet type. */ +@@ -67,6 +67,12 @@ typedef enum + SER_PKT_TYPE_MAX /**< Upper bound. */ + } ser_pkt_type_t; + ++typedef enum ++{ ++ SER_GENERIC_CMD_RESET, ++ SER_GENERIC_CMD_SOFT_RESET ++} ser_generic_cmd_t; ++ + #define LOW16(a) ((uint16_t)((a & 0x0000FFFF) >> 0)) + #define HIGH16(a) ((uint16_t)((a & 0xFFFF0000) >> 16)) + +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/ser_config.h nRF5_SDK_15.2.0_80108de/components/serialization/common/ser_config.h +index 2e6d502..0f6c4a9 100644 +--- nRF5_SDK_15.2.0_9412b96/components/serialization/common/ser_config.h ++++ nRF5_SDK_15.2.0_80108de/components/serialization/common/ser_config.h +@@ -66,8 +66,8 @@ extern "C" { + + /** Max packets size in serialization HAL Transport layer (packets before adding PHY header i.e. + * packet length). */ +-#define SER_HAL_TRANSPORT_APP_TO_CONN_MAX_PKT_SIZE (512UL) +-#define SER_HAL_TRANSPORT_CONN_TO_APP_MAX_PKT_SIZE (512UL) ++#define SER_HAL_TRANSPORT_APP_TO_CONN_MAX_PKT_SIZE (768UL) ++#define SER_HAL_TRANSPORT_CONN_TO_APP_MAX_PKT_SIZE (768UL) + + #define SER_HAL_TRANSPORT_MAX_PKT_SIZE ((SER_HAL_TRANSPORT_APP_TO_CONN_MAX_PKT_SIZE) >= \ + (SER_HAL_TRANSPORT_CONN_TO_APP_MAX_PKT_SIZE) \ +@@ -99,7 +99,7 @@ extern "C" { + + /** UART transmission parameters */ + #define SER_PHY_UART_FLOW_CTRL NRF_UART_HWFC_ENABLED +-#define SER_PHY_UART_PARITY NRF_UART_PARITY_INCLUDED ++#define SER_PHY_UART_PARITY NRF_UART_PARITY_EXCLUDED + #define SER_PHY_UART_BAUDRATE_VAL 1000000 + + #define SER_PHY_UART_BAUDRATE CONCAT_2(NRF_UART_BAUDRATE_,SER_PHY_UART_BAUDRATE_VAL) +@@ -113,7 +113,8 @@ extern "C" { + #ifndef SER_MAX_ADV_DATA + #define SER_MAX_ADV_DATA 256 + #endif +- ++ ++#define HCI_LINK_CONTROL + #ifdef __cplusplus + } + #endif +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/ser_dbg_sd_str.c nRF5_SDK_15.2.0_80108de/components/serialization/common/ser_dbg_sd_str.c +index 5fbf555..b7390f3 100644 +--- nRF5_SDK_15.2.0_9412b96/components/serialization/common/ser_dbg_sd_str.c ++++ nRF5_SDK_15.2.0_80108de/components/serialization/common/ser_dbg_sd_str.c +@@ -54,10 +54,10 @@ + + #if NRF_MODULE_ENABLED(NRF_LOG) && defined(BLE_STACK_SUPPORT_REQD) + static const char * sd_events[] = { +- "BLE_EVT_TX_COMPLETE", /*0x01*/ +- "BLE_EVT_USER_MEM_REQUEST", /*0x02*/ +- "BLE_EVT_USER_MEM_RELEASE", /*0x03*/ +- "BLE_EVT_DATA_LENGTH_CHANGED", /*0x04*/ ++ "BLE_EVT_USER_MEM_REQUEST", /*0x01*/ ++ "BLE_EVT_USER_MEM_RELEASE", /*0x02*/ ++ "SD_EVT_UNKNOWN", /*0x03*/ ++ "SD_EVT_UNKNOWN", /*0x04*/ + "SD_EVT_UNKNOWN", /*0x05*/ + "SD_EVT_UNKNOWN", /*0x06*/ + "SD_EVT_UNKNOWN", /*0x07*/ +@@ -75,7 +75,7 @@ static const char * sd_events[] = { + "BLE_GAP_EVT_SEC_PARAMS_REQUEST", /*0x13*/ + "BLE_GAP_EVT_SEC_INFO_REQUEST", /*0x14*/ + "BLE_GAP_EVT_PASSKEY_DISPLAY", /*0x15*/ +- "BLE_GAP_EVT_KEY_PRESxSED", /*0x16*/ ++ "BLE_GAP_EVT_KEY_PRESSED", /*0x16*/ + "BLE_GAP_EVT_AUTH_KEY_REQUEST", /*0x17*/ + "BLE_GAP_EVT_LESC_DHKEY_REQUEST", /*0x18*/ + "BLE_GAP_EVT_AUTH_STATUS", /*0x19*/ +@@ -86,12 +86,12 @@ static const char * sd_events[] = { + "BLE_GAP_EVT_SEC_REQUEST", /*0x1e*/ + "BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST", /*0x1f*/ + "BLE_GAP_EVT_SCAN_REQ_REPORT", /*0x20*/ +- "SD_EVT_UNKNOWN", /*0x21*/ +- "SD_EVT_UNKNOWN", /*0x22*/ +- "SD_EVT_UNKNOWN", /*0x23*/ +- "SD_EVT_UNKNOWN", /*0x24*/ +- "SD_EVT_UNKNOWN", /*0x25*/ +- "SD_EVT_UNKNOWN", /*0x26*/ ++ "BLE_GAP_EVT_PHY_UPDATE_REQUEST", /*0x21*/ ++ "BLE_GAP_EVT_PHY_UPDATE", /*0x22*/ ++ "BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST", /*0x23*/ ++ "BLE_GAP_EVT_DATA_LENGTH_UPDATE", /*0x24*/ ++ "BLE_GAP_EVT_QOS_CHANNEL_SURVEY_REPORT", /*0x25*/ ++ "BLE_GAP_EVT_ADV_SET_TERMINATED", /*0x26*/ + "SD_EVT_UNKNOWN", /*0x27*/ + "SD_EVT_UNKNOWN", /*0x28*/ + "SD_EVT_UNKNOWN", /*0x29*/ +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c nRF5_SDK_15.2.0_80108de/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c +index bd8943d..eed27e8 100644 +--- nRF5_SDK_15.2.0_9412b96/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c ++++ nRF5_SDK_15.2.0_80108de/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c +@@ -453,9 +453,7 @@ uint32_t ble_gap_evt_connected_t_enc(void const * const p_void_struct, + SER_PUSH_uint8(&p_struct->role); + SER_PUSH_FIELD(&p_struct->conn_params, ble_gap_conn_params_t_enc); + #if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 5 +- SER_PUSH_uint8(&p_struct->adv_handle); +- SER_PUSH_uint16(&p_struct->adv_data.adv_data.len); +- SER_PUSH_uint16(&p_struct->adv_data.scan_rsp_data.len); ++ SER_PUSH_FIELD(&p_struct->adv_data, ble_gap_adv_data_t_enc); + #endif + + SER_STRUCT_ENC_END; +@@ -472,9 +470,7 @@ uint32_t ble_gap_evt_connected_t_dec(uint8_t const * const p_buf, + SER_PULL_uint8(&p_struct->role); + SER_PULL_FIELD(&p_struct->conn_params, ble_gap_conn_params_t_dec); + #if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 5 +- SER_PULL_uint8(&p_struct->adv_handle); +- SER_PULL_uint16(&p_struct->adv_data.adv_data.len); +- SER_PULL_uint16(&p_struct->adv_data.scan_rsp_data.len); ++ SER_PULL_FIELD(&p_struct->adv_data, ble_gap_adv_data_t_dec); + #endif + + SER_STRUCT_DEC_END; +@@ -1721,15 +1717,8 @@ uint32_t ble_gap_evt_adv_set_terminated_t_enc(void const * const p_void_struct, + SER_PUSH_uint8(&p_struct->reason); + SER_PUSH_uint8(&p_struct->adv_handle); + SER_PUSH_uint8(&p_struct->num_completed_adv_events); +- SER_PUSH_uint16(&p_struct->adv_data.adv_data.len); +- +- uint32_t addr = (uint32_t)p_struct->adv_data.adv_data.p_data; +- SER_PUSH_uint32(&addr); + +- SER_PUSH_uint16(&p_struct->adv_data.scan_rsp_data.len); +- +- addr = (uint32_t)p_struct->adv_data.scan_rsp_data.p_data; +- SER_PUSH_uint32(&addr); ++ SER_PUSH_FIELD(&p_struct->adv_data, ble_gap_adv_data_t_enc); + + SER_STRUCT_ENC_END; + } +@@ -1744,10 +1733,8 @@ uint32_t ble_gap_evt_adv_set_terminated_t_dec(uint8_t const * const p_buf, + SER_PULL_uint8(&p_struct->reason); + SER_PULL_uint8(&p_struct->adv_handle); + SER_PULL_uint8(&p_struct->num_completed_adv_events); +- SER_PULL_uint16(&p_struct->adv_data.adv_data.len); +- SER_PULL_uint32(&p_struct->adv_data.adv_data.p_data); +- SER_PULL_uint16(&p_struct->adv_data.scan_rsp_data.len); +- SER_PULL_uint32(&p_struct->adv_data.scan_rsp_data.p_data); ++ ++ SER_PULL_FIELD(&p_struct->adv_data, ble_gap_adv_data_t_dec); + + SER_STRUCT_DEC_END; + } +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/struct_ser/ble/ble_struct_serialization.c nRF5_SDK_15.2.0_80108de/components/serialization/common/struct_ser/ble/ble_struct_serialization.c +index 37f43ac..40ddda2 100644 +--- nRF5_SDK_15.2.0_9412b96/components/serialization/common/struct_ser/ble/ble_struct_serialization.c ++++ nRF5_SDK_15.2.0_80108de/components/serialization/common/struct_ser/ble/ble_struct_serialization.c +@@ -46,8 +46,11 @@ + #include "ble_types.h" + #include "ble.h" + #include "cond_field_serialization.h" ++#include "ser_config.h" + #ifdef SER_CONNECTIVITY + #include "conn_ble_gap_sec_keys.h" ++#else ++#include "app_ble_gap_sec_keys.h" + #endif + #include + +@@ -471,7 +474,15 @@ uint32_t ble_data_t_enc(void const * const p_void_struct, + { + SER_STRUCT_ENC_BEGIN(ble_data_t); + +- uint32_t buf_id = (uint32_t)p_struct->p_data; ++ uint32_t buf_id = 0; ++#if NRF_SD_BLE_API_VERSION > 5 ++#if defined(SER_CONNECTIVITY) ++ buf_id = conn_ble_gap_ble_data_buf_free(p_struct->p_data); ++#else ++ buf_id = app_ble_gap_adv_buf_register(p_struct->p_data); ++ SER_ASSERT(buf_id >= 0, NRF_ERROR_NO_MEM); ++#endif ++#endif + SER_PUSH_uint32(&buf_id); + SER_PUSH_len16data(p_struct->p_data, p_struct->len); + +@@ -487,11 +498,16 @@ uint32_t ble_data_t_dec(uint8_t const * const p_buf, + + uint32_t buf_id; + SER_PULL_uint32(&buf_id); +-#if defined(SER_CONNECTIVITY) && NRF_SD_BLE_API_VERSION > 5 ++ p_struct->len = SER_MAX_ADV_DATA; ++#if NRF_SD_BLE_API_VERSION > 5 ++#if defined(SER_CONNECTIVITY) + if (buf_id && (p_struct->p_data == NULL)) + { + p_struct->p_data = conn_ble_gap_ble_data_buf_alloc(buf_id); + } ++#else ++ p_struct->p_data = app_ble_gap_adv_buf_unregister(buf_id, true); ++#endif + #endif + SER_PULL_len16data(&p_struct->p_data, &p_struct->len); + +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_hal_transport.c nRF5_SDK_15.2.0_80108de/components/serialization/common/transport/ser_hal_transport.c +index 9bcc818..5d97f88 100644 +--- nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_hal_transport.c ++++ nRF5_SDK_15.2.0_80108de/components/serialization/common/transport/ser_hal_transport.c +@@ -44,7 +44,7 @@ + #include "ser_config.h" + #include "ser_phy.h" + #include "ser_hal_transport.h" +- ++#include "app_scheduler.h" + #define NRF_LOG_MODULE_NAME ser_hal_transport + #if SER_HAL_TRANSPORT_CONFIG_LOG_ENABLED + #define NRF_LOG_LEVEL SER_HAL_TRANSPORT_CONFIG_LOG_LEVEL +@@ -276,6 +276,9 @@ static void phy_events_handler(ser_phy_evt_t phy_event) + m_tx_state = HAL_TRANSP_TX_STATE_TRANSMITTED; + err_code = ser_hal_transport_tx_pkt_free(phy_event.evt_params.hw_error.p_buffer); + APP_ERROR_CHECK(err_code); ++#if APP_SCHEDULER_WITH_PAUSE ++ app_sched_resume(); ++#endif + /* An event to an upper layer that a packet has been transmitted. */ + } + else if (HAL_TRANSP_RX_STATE_RECEIVING == m_rx_state) +@@ -297,6 +300,12 @@ static void phy_events_handler(ser_phy_evt_t phy_event) + } + } + ++void ser_hal_transport_reset(void) ++{ ++ m_rx_state = HAL_TRANSP_RX_STATE_IDLE; ++ m_tx_state = HAL_TRANSP_TX_STATE_IDLE; ++} ++ + uint32_t ser_hal_transport_open(ser_hal_transport_events_handler_t events_handler) + { + uint32_t err_code = NRF_SUCCESS; +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_hal_transport.h nRF5_SDK_15.2.0_80108de/components/serialization/common/transport/ser_hal_transport.h +index d4da8b4..55d99d8 100644 +--- nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_hal_transport.h ++++ nRF5_SDK_15.2.0_80108de/components/serialization/common/transport/ser_hal_transport.h +@@ -162,6 +162,8 @@ typedef void (*ser_hal_transport_events_handler_t)(ser_hal_transport_evt_t event + */ + uint32_t ser_hal_transport_open(ser_hal_transport_events_handler_t events_handler); + ++/**@brief Function for reseting ser_hal_transport. */ ++void ser_hal_transport_reset(void); + + /**@brief Function for closing a transport channel. + * +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/config/ser_phy_config_conn.h nRF5_SDK_15.2.0_80108de/components/serialization/common/transport/ser_phy/config/ser_phy_config_conn.h +index 06e7f9c..164a375 100644 +--- nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/config/ser_phy_config_conn.h ++++ nRF5_SDK_15.2.0_80108de/components/serialization/common/transport/ser_phy/config/ser_phy_config_conn.h +@@ -69,10 +69,10 @@ extern "C" { + /* UART configuration */ + #define UART_IRQ_PRIORITY APP_IRQ_PRIORITY_LOWEST + +-#define SER_PHY_UART_RX SER_CON_RX_PIN +-#define SER_PHY_UART_TX SER_CON_TX_PIN +-#define SER_PHY_UART_CTS SER_CON_CTS_PIN +-#define SER_PHY_UART_RTS SER_CON_RTS_PIN ++#define SER_PHY_UART_RX RX_PIN_NUMBER//SER_CON_RX_PIN ++#define SER_PHY_UART_TX TX_PIN_NUMBER//SER_CON_TX_PIN ++#define SER_PHY_UART_CTS CTS_PIN_NUMBER//SER_CON_CTS_PIN ++#define SER_PHY_UART_RTS RTS_PIN_NUMBER//SER_CON_RTS_PIN + + + #ifdef __cplusplus +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/ser_phy_hci.c nRF5_SDK_15.2.0_80108de/components/serialization/common/transport/ser_phy/ser_phy_hci.c +index 20e1eef..6996889 100644 +--- nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/ser_phy_hci.c ++++ nRF5_SDK_15.2.0_80108de/components/serialization/common/transport/ser_phy/ser_phy_hci.c +@@ -51,6 +51,17 @@ + #include "nrf_soc.h" + #include "ser_config.h" + #include "ser_phy_debug_comm.h" ++ ++#include "nrf_sdh.h" ++#include "ser_hal_transport.h" ++#include "app_scheduler.h" ++#ifdef SER_CONNECTIVITY ++#include "ser_conn_handlers.h" ++#include "ser_conn_reset_cmd_decoder.h" ++#endif ++#ifdef BLE_STACK_SUPPORT_REQD ++#include "nrf_sdm.h" ++#endif + #define NRF_LOG_MODULE_NAME sphy_hci + #include "nrf_log.h" + NRF_LOG_MODULE_REGISTER(); +@@ -93,6 +104,10 @@ NRF_LOG_MODULE_REGISTER(); + #define HCI_LINK_CONTROL_TIMEOUT 1u /**< Default link control timeout. */ + #endif /* HCI_LINK_CONTROL */ + ++#define PACKET_TYPE_STR(type)\ ++ ((type == PKT_TYPE_ACK) ? "ACK" :\ ++ ((type ==PKT_TYPE_LINK_CONTROL) ? "Link Control" : \ ++ ((type ==PKT_TYPE_VENDOR_SPECIFIC) ? "Vendor Specific" : "Reset"))) + + #define RETRANSMISSION_TIMEOUT_IN_TICKS (APP_TIMER_TICKS(RETRANSMISSION_TIMEOUT_IN_ms)) /**< Retransmission timeout for application packet in units of timer ticks. */ + #define MAX_RETRY_COUNT 5 /**< Max retransmission retry count for application packets. */ +@@ -191,6 +206,7 @@ _static uint8_t m_tx_ack_packet[PKT_HDR_SIZE]; + #ifdef HCI_LINK_CONTROL + _static uint8_t m_tx_link_control_header[PKT_HDR_SIZE]; + _static uint8_t m_tx_link_control_payload[HCI_PKT_CONFIG_SIZE - PKT_HDR_SIZE]; ++static bool m_cfg_sent; + #endif /* HCI_LINK_CONTROL */ + + _static uint32_t m_packet_ack_number; // Sequence number counter of the packet expected to be received +@@ -664,6 +680,7 @@ static void ack_transmit(void) + pkt_header.num_of_bytes = PKT_HDR_SIZE; + DEBUG_EVT_SLIP_ACK_TX(0); + err_code = ser_phy_hci_slip_tx_pkt_send(&pkt_header, NULL, NULL); ++ NRF_LOG_DEBUG("Start sending ACK."); + ser_phy_hci_assert(err_code == NRF_SUCCESS); + + return; +@@ -734,12 +751,12 @@ static void error_callback(void) + + DEBUG_EVT_HCI_PHY_EVT_TX_ERROR(0); + ++ NRF_LOG_DEBUG("no ack"); + event.evt_type = SER_PHY_EVT_HW_ERROR; + event.evt_params.hw_error.p_buffer = m_p_tx_payload; + ser_phy_event_callback(event); + } + +- + static void hci_slip_event_handler(ser_phy_hci_slip_evt_t * p_event) + { + hci_evt_t event; +@@ -748,7 +765,7 @@ static void hci_slip_event_handler(ser_phy_hci_slip_evt_t * p_event) + + if ( p_event->evt_type == SER_PHY_HCI_SLIP_EVT_PKT_SENT ) + { +- NRF_LOG_DEBUG("EVT_PKT_SENT"); ++ NRF_LOG_DEBUG("EVT:Tx packet sent."); + + DEBUG_EVT_SLIP_PACKET_TXED(0); + event.evt_source = HCI_SLIP_EVT; +@@ -764,7 +781,7 @@ static void hci_slip_event_handler(ser_phy_hci_slip_evt_t * p_event) + } + else if ( p_event->evt_type == SER_PHY_HCI_SLIP_EVT_ACK_SENT ) + { +- NRF_LOG_DEBUG("EVT_ACK_SENT"); ++ NRF_LOG_DEBUG("EVT:ACK sent."); + + DEBUG_EVT_SLIP_ACK_TXED(0); + event.evt_source = HCI_SLIP_EVT; +@@ -793,12 +810,16 @@ static void hci_slip_event_handler(ser_phy_hci_slip_evt_t * p_event) + event.evt.ser_phy_slip_evt.evt_params.received_pkt.p_buffer, + event.evt.ser_phy_slip_evt.evt_params.received_pkt.num_of_bytes); + +- NRF_LOG_DEBUG("EVT_PKT_RECEIVED 0x%X/%u", packet_type, ++ NRF_LOG_DEBUG("EVT:RX %s packet (length:%u)", PACKET_TYPE_STR(packet_type), + p_event->evt_params.received_pkt.num_of_bytes); + + if (packet_type == PKT_TYPE_RESET) + { ++#if defined(SER_CONNECTIVITY) && defined(SER_PHY_HCI_USB_CDC) ++ (void)soft_reset_trigger(); ++#else + NVIC_SystemReset(); ++#endif + } + else if (packet_type == PKT_TYPE_ACK ) + { +@@ -892,6 +913,7 @@ static void hci_pkt_send(void) + pkt_crc.num_of_bytes = PKT_CRC_SIZE; + DEBUG_EVT_SLIP_PACKET_TX(0); + err_code = ser_phy_hci_slip_tx_pkt_send(&pkt_header, &pkt_payload, &pkt_crc); ++ NRF_LOG_DEBUG("Started TX packet (payload %d).", m_tx_payload_length); + ser_phy_hci_assert(err_code == NRF_SUCCESS); + + return; +@@ -1055,6 +1077,7 @@ static void hci_tx_fsm_event_process(hci_evt_t * p_event) + // m_tx_retx_counter++; // global retransmissions counter + if (m_tx_retry_count) + { ++ NRF_LOG_DEBUG("Timeout, no ACK. Retrying tx packet."); + hci_pkt_send(); + DEBUG_HCI_RETX(0); + m_hci_tx_fsm_state = HCI_TX_STATE_WAIT_FOR_ACK_OR_TX_END; +@@ -1063,6 +1086,7 @@ static void hci_tx_fsm_event_process(hci_evt_t * p_event) + { + error_callback(); + m_hci_tx_fsm_state = HCI_TX_STATE_SEND; ++ NRF_LOG_WARNING("Timeout, no ACK. Dropping."); + } + } + break; +@@ -1414,6 +1438,7 @@ static void hci_link_control_event_handler(hci_evt_t * p_event) + m_hci_rx_fsm_state = HCI_RX_STATE_DISABLE; + m_hci_other_side_active = false; + } ++ NRF_LOG_DEBUG("Link control. Sync received, sending Sync Response."); + hci_link_control_pkt_send(); + hci_timeout_setup(HCI_LINK_CONTROL_TIMEOUT); // Need to trigger transmitting SYNC messages + break; +@@ -1422,14 +1447,24 @@ static void hci_link_control_event_handler(hci_evt_t * p_event) + { + m_hci_mode = HCI_MODE_INITIALIZED; + m_hci_link_control_next_pkt = HCI_PKT_CONFIG; ++ m_cfg_sent = false; + } ++ NRF_LOG_DEBUG("Link control. Sync Resposnse recieved."); + break; + case HCI_PKT_CONFIG: + if (m_hci_mode != HCI_MODE_UNINITIALIZED) + { +- m_hci_link_control_next_pkt = HCI_PKT_CONFIG_RSP; ++ if (m_cfg_sent) ++ { ++ m_hci_link_control_next_pkt = HCI_PKT_CONFIG_RSP; ++ m_hci_other_side_active = true; ++ } ++ else ++ { ++ m_hci_link_control_next_pkt = HCI_PKT_CONFIG; ++ } + hci_link_control_pkt_send(); +- m_hci_other_side_active = true; ++ m_cfg_sent = true; + } + break; + case HCI_PKT_CONFIG_RSP: +@@ -1466,6 +1501,7 @@ static void hci_link_control_event_handler(hci_evt_t * p_event) + case HCI_MODE_INITIALIZED: + m_hci_link_control_next_pkt = HCI_PKT_CONFIG; + hci_link_control_pkt_send(); ++ m_cfg_sent = true; + hci_timeout_setup(HCI_LINK_CONTROL_TIMEOUT); + break; + case HCI_MODE_ACTIVE: +@@ -1548,6 +1584,7 @@ uint32_t ser_phy_rx_buf_set(uint8_t * p_buffer) + /* ser_phy API function */ + uint32_t ser_phy_tx_pkt_send(const uint8_t * p_buffer, uint16_t num_of_bytes) + { ++ NRF_LOG_DEBUG("TX request (%d bytes)", num_of_bytes); + uint32_t status = NRF_SUCCESS; + hci_evt_t event; + +@@ -1573,14 +1610,10 @@ uint32_t ser_phy_tx_pkt_send(const uint8_t * p_buffer, uint16_t num_of_bytes) + return status; + } + +- +-static uint32_t hci_timer_init(void) ++static uint32_t hci_timer_reset(void) + { +- uint32_t err_code = NRF_SUCCESS; +- + #ifdef HCI_APP_TIMER +- +- err_code = app_timer_create(&m_app_timer_id, APP_TIMER_MODE_REPEATED, hci_timeout_handler); ++ err_code = app_timer_stop(m_app_timer_id); + + if (err_code != NRF_SUCCESS) + { +@@ -1593,7 +1626,6 @@ static uint32_t hci_timer_init(void) + { + return NRF_ERROR_INTERNAL; + } +- + #else + + // Configure TIMER for compare[1] event +@@ -1603,6 +1635,7 @@ static uint32_t hci_timer_init(void) + + // Clear TIMER + HCI_TIMER->TASKS_CLEAR = 1; ++ HCI_TIMER->TASKS_STOP = 1; + + // Enable interrupt + HCI_TIMER->INTENCLR = 0xFFFFFFFF; +@@ -1613,11 +1646,51 @@ static uint32_t hci_timer_init(void) + NVIC_EnableIRQ(HCI_TIMER_IRQn); + + #endif ++ return NRF_SUCCESS; ++} + +- return err_code; ++static uint32_t hci_timer_init(void) ++{ ++ ++#ifdef HCI_APP_TIMER ++ uint32_t err_code = NRF_SUCCESS; ++ ++ err_code = app_timer_create(&m_app_timer_id, APP_TIMER_MODE_REPEATED, hci_timeout_handler); + ++ if (err_code != NRF_SUCCESS) ++ { ++ return NRF_ERROR_INTERNAL; ++ } ++#endif ++ return hci_timer_reset(); + } + ++void ser_phy_hci_reset(void) ++{ ++ m_p_tx_payload = NULL; ++ m_p_rx_buffer = NULL; ++ ++ nrf_queue_reset(&m_tx_evt_queue); ++ nrf_queue_reset(&m_rx_evt_queue); ++ ++ hci_timer_reset(); ++ m_packet_ack_number = INITIAL_ACK_NUMBER_EXPECTED; ++ m_packet_seq_number = INITIAL_SEQ_NUMBER; ++ ++#ifndef HCI_LINK_CONTROL ++ m_hci_tx_fsm_state = HCI_TX_STATE_SEND; ++ m_hci_rx_fsm_state = HCI_RX_STATE_RECEIVE; ++#else ++ m_hci_tx_fsm_state = HCI_TX_STATE_DISABLE; ++ m_hci_rx_fsm_state = HCI_RX_STATE_DISABLE; ++ hci_timeout_setup(HCI_LINK_CONTROL_TIMEOUT);// Trigger sending SYNC messages ++ m_hci_link_control_next_pkt = HCI_PKT_SYNC; ++ m_hci_mode = HCI_MODE_UNINITIALIZED; ++ m_hci_other_side_active = false; ++ m_rx_fsm_idle_flag = true; ++ m_hci_global_enable_flag = true; ++#endif /*HCI_LINK_CONTROL*/ ++} + + /* ser_phy API function */ + uint32_t ser_phy_open(ser_phy_events_handler_t events_handler) +@@ -1634,6 +1707,8 @@ uint32_t ser_phy_open(ser_phy_events_handler_t events_handler) + return NRF_ERROR_NULL; + } + ++ m_ser_phy_callback = events_handler; ++ + err_code = hci_timer_init(); + + if (err_code != NRF_SUCCESS) +@@ -1641,9 +1716,6 @@ uint32_t ser_phy_open(ser_phy_events_handler_t events_handler) + return NRF_ERROR_INTERNAL; + } + +- nrf_queue_reset(&m_tx_evt_queue); +- nrf_queue_reset(&m_rx_evt_queue); +- + err_code = ser_phy_hci_slip_open(hci_slip_event_handler); + + if (err_code != NRF_SUCCESS) +@@ -1653,18 +1725,7 @@ uint32_t ser_phy_open(ser_phy_events_handler_t events_handler) + + if (err_code == NRF_SUCCESS) + { +- m_packet_ack_number = INITIAL_ACK_NUMBER_EXPECTED; +- m_packet_seq_number = INITIAL_SEQ_NUMBER; +- m_ser_phy_callback = events_handler; +- +-#ifndef HCI_LINK_CONTROL +- m_hci_tx_fsm_state = HCI_TX_STATE_SEND; +- m_hci_rx_fsm_state = HCI_RX_STATE_RECEIVE; +-#else +- hci_timeout_setup(HCI_LINK_CONTROL_TIMEOUT);// Trigger sending SYNC messages +- m_hci_mode = HCI_MODE_UNINITIALIZED; +- m_hci_other_side_active = false; +-#endif /*HCI_LINK_CONTROL*/ ++ ser_phy_hci_reset(); + } + return err_code; + } +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/ser_phy_hci.h nRF5_SDK_15.2.0_80108de/components/serialization/common/transport/ser_phy/ser_phy_hci.h +index ab7f337..409491d 100644 +--- nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/ser_phy_hci.h ++++ nRF5_SDK_15.2.0_80108de/components/serialization/common/transport/ser_phy/ser_phy_hci.h +@@ -129,6 +129,8 @@ typedef void (*ser_phy_hci_slip_event_handler_t)(ser_phy_hci_slip_evt_t *p_event + */ + uint32_t ser_phy_hci_slip_open(ser_phy_hci_slip_event_handler_t events_handler); + ++/**@brief Function for resetting the module.*/ ++void ser_phy_hci_slip_reset(void); + + /**@brief A function for transmitting a HCI SLIP packet. + * +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/ser_phy_hci_slip.c nRF5_SDK_15.2.0_80108de/components/serialization/common/transport/ser_phy/ser_phy_hci_slip.c +index 857792b..7ad0537 100644 +--- nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/ser_phy_hci_slip.c ++++ nRF5_SDK_15.2.0_80108de/components/serialization/common/transport/ser_phy/ser_phy_hci_slip.c +@@ -189,6 +189,7 @@ static void tx_buf_fill(void) + { + can_continue = tx_buf_put(tx_escaped_data); + tx_escaped_data = 0; ++ ++m_tx_index; + } + else switch (m_tx_phase) + { +@@ -233,21 +234,26 @@ static void tx_buf_fill(void) + + default: + ASSERT(mp_tx_data->p_buffer != NULL); +- uint8_t data = mp_tx_data->p_buffer[m_tx_index]; +- ++m_tx_index; +- +- if (data == APP_SLIP_END) +- { +- data = APP_SLIP_ESC; +- tx_escaped_data = APP_SLIP_ESC_END; +- } +- else if (data == APP_SLIP_ESC) ++ if (m_tx_index < mp_tx_data->num_of_bytes) + { +- tx_escaped_data = APP_SLIP_ESC_ESC; +- } +- can_continue = tx_buf_put(data); ++ uint8_t data = mp_tx_data->p_buffer[m_tx_index]; + +- if (m_tx_index >= mp_tx_data->num_of_bytes) ++ if (data == APP_SLIP_END) ++ { ++ data = APP_SLIP_ESC; ++ tx_escaped_data = APP_SLIP_ESC_END; ++ } ++ else if (data == APP_SLIP_ESC) ++ { ++ tx_escaped_data = APP_SLIP_ESC_ESC; ++ } ++ else ++ { ++ ++m_tx_index; ++ } ++ can_continue = tx_buf_put(data); ++ } ++ else + { + mp_tx_data->p_buffer = NULL; + +@@ -642,6 +648,18 @@ static void uart_event_handler(nrf_drv_uart_event_t * p_event, + } + } + ++void ser_phy_hci_slip_reset(void) ++{ ++ mp_tx_buf = m_tx_buf0; ++ m_tx_bytes = 0; ++ m_tx_phase = PHASE_IDLE; ++ m_tx_in_progress = false; ++ m_tx_pending = false; ++ ++ m_rx_escape = false; ++ mp_small_buffer = m_small_buffer; ++ mp_big_buffer = m_big_buffer; ++} + + uint32_t ser_phy_hci_slip_open(ser_phy_hci_slip_event_handler_t events_handler) + { +@@ -666,15 +684,7 @@ uint32_t ser_phy_hci_slip_open(ser_phy_hci_slip_event_handler_t events_handler) + return NRF_ERROR_INVALID_PARAM; + } + +- mp_tx_buf = m_tx_buf0; +- m_tx_bytes = 0; +- m_tx_phase = PHASE_IDLE; +- m_tx_in_progress = false; +- m_tx_pending = false; +- +- m_rx_escape = false; +- mp_small_buffer = m_small_buffer; +- mp_big_buffer = m_big_buffer; ++ ser_phy_hci_slip_reset(); + + APP_ERROR_CHECK(nrf_drv_uart_rx(&m_uart, m_rx_buf, 1)); + +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/ser_phy_hci_slip_cdc.c nRF5_SDK_15.2.0_80108de/components/serialization/common/transport/ser_phy/ser_phy_hci_slip_cdc.c +index ddbf926..d11c83e 100644 +--- nRF5_SDK_15.2.0_9412b96/components/serialization/common/transport/ser_phy/ser_phy_hci_slip_cdc.c ++++ nRF5_SDK_15.2.0_80108de/components/serialization/common/transport/ser_phy/ser_phy_hci_slip_cdc.c +@@ -67,10 +67,10 @@ NRF_LOG_MODULE_REGISTER(); + static void cdc_acm_user_ev_handler(app_usbd_class_inst_t const * p_inst, + app_usbd_cdc_acm_user_event_t event); + +-#define CDC_ACM_COMM_INTERFACE 0 ++#define CDC_ACM_COMM_INTERFACE 1 + #define CDC_ACM_COMM_EPIN NRF_DRV_USBD_EPIN2 + +-#define CDC_ACM_DATA_INTERFACE 1 ++#define CDC_ACM_DATA_INTERFACE 2 + #define CDC_ACM_DATA_EPIN NRF_DRV_USBD_EPIN1 + #define CDC_ACM_DATA_EPOUT NRF_DRV_USBD_EPOUT1 + +@@ -204,6 +204,7 @@ static void tx_buf_fill(void) + { + can_continue = tx_buf_put(tx_escaped_data); + tx_escaped_data = 0; ++ ++m_tx_index; + } + else switch (m_tx_phase) + { +@@ -248,21 +249,26 @@ static void tx_buf_fill(void) + + default: + ASSERT(mp_tx_data->p_buffer != NULL); +- uint8_t data = mp_tx_data->p_buffer[m_tx_index]; +- ++m_tx_index; +- +- if (data == APP_SLIP_END) +- { +- data = APP_SLIP_ESC; +- tx_escaped_data = APP_SLIP_ESC_END; +- } +- else if (data == APP_SLIP_ESC) ++ if (m_tx_index < mp_tx_data->num_of_bytes) + { +- tx_escaped_data = APP_SLIP_ESC_ESC; +- } +- can_continue = tx_buf_put(data); ++ uint8_t data = mp_tx_data->p_buffer[m_tx_index]; + +- if (m_tx_index >= mp_tx_data->num_of_bytes) ++ if (data == APP_SLIP_END) ++ { ++ data = APP_SLIP_ESC; ++ tx_escaped_data = APP_SLIP_ESC_END; ++ } ++ else if (data == APP_SLIP_ESC) ++ { ++ tx_escaped_data = APP_SLIP_ESC_ESC; ++ } ++ else ++ { ++ ++m_tx_index; ++ } ++ can_continue = tx_buf_put(data); ++ } ++ else + { + mp_tx_data->p_buffer = NULL; + +@@ -619,6 +625,12 @@ static void cdc_acm_user_ev_handler(app_usbd_class_inst_t const * p_inst, + + case APP_USBD_CDC_ACM_USER_EVT_PORT_CLOSE: + NRF_LOG_DEBUG("EVT_PORT_CLOSE"); ++ if (m_tx_in_progress) ++ { ++ m_ser_phy_hci_slip_event.evt_type = SER_PHY_HCI_SLIP_EVT_PKT_SENT; ++ m_ser_phy_hci_slip_event_handler(&m_ser_phy_hci_slip_event); ++ m_tx_in_progress = false; ++ } + m_port_open = false; + break; + +@@ -677,6 +689,19 @@ static void cdc_acm_user_ev_handler(app_usbd_class_inst_t const * p_inst, + } + } + ++void ser_phy_hci_slip_reset(void) ++{ ++ mp_tx_buf = m_tx_buf0; ++ m_tx_bytes = 0; ++ m_tx_phase = PHASE_IDLE; ++ m_tx_in_progress = false; ++ m_tx_pending = false; ++ ++ m_rx_escape = false; ++ mp_small_buffer = m_small_buffer; ++ mp_big_buffer = m_big_buffer; ++} ++ + uint32_t ser_phy_hci_slip_open(ser_phy_hci_slip_event_handler_t events_handler) + { + if (events_handler == NULL) +@@ -700,15 +725,7 @@ uint32_t ser_phy_hci_slip_open(ser_phy_hci_slip_event_handler_t events_handler) + + m_ser_phy_hci_slip_event_handler = events_handler; + +- mp_tx_buf = m_tx_buf0; +- m_tx_bytes = 0; +- m_tx_phase = PHASE_IDLE; +- m_tx_in_progress = false; +- m_tx_pending = false; +- +- m_rx_escape = false; +- mp_small_buffer = m_small_buffer; +- mp_big_buffer = m_big_buffer; ++ ser_phy_hci_slip_reset(); + + return NRF_SUCCESS; + } +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble.c nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble.c +index f8e4666..c7807ad 100644 +--- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble.c ++++ nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble.c +@@ -41,7 +41,7 @@ + #include "conn_mw_ble.h" + #include "ble_serialization.h" + #include "conn_ble_user_mem.h" +-#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION >= 5 ++#if defined(NRF_SD_BLE_API_VERSION) && ( (NRF_SD_BLE_API_VERSION >= 5) || (NRF_SD_BLE_API_VERSION == 3)) + #include "nrf_sdh_ble.h" + #endif + #include +@@ -311,7 +311,7 @@ uint32_t conn_mw_ble_enable(uint8_t const * const p_rx_buf, + err_code = ble_enable_req_dec(p_rx_buf, rx_buf_len, &p_params); + SER_ASSERT(err_code == NRF_SUCCESS, err_code); + +- sd_err_code = sd_ble_enable(p_params, &app_ram_base); ++ sd_err_code = nrf_sdh_ble_enable(p_params, &app_ram_base); + #else + err_code = ble_enable_req_dec(p_rx_buf, rx_buf_len); + SER_ASSERT(err_code == NRF_SUCCESS, err_code); +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gap.c nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gap.c +index 6999f20..940c5af 100644 +--- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gap.c ++++ nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gap.c +@@ -136,14 +136,22 @@ uint32_t conn_mw_ble_gap_scan_start(uint8_t const * const p_rx_buf, + err_code = ble_gap_scan_start_req_dec(p_rx_buf, rx_buf_len, &p_scan_params, &p_adv_report_buffer); + SER_ASSERT(err_code == NRF_SUCCESS, err_code); + ++ conn_ble_gap_scan_data_set(p_adv_report_buffer->p_data); + sd_err_code = sd_ble_gap_scan_start(p_scan_params, p_adv_report_buffer); ++ ++ if (sd_err_code != NRF_SUCCESS) ++ { ++ conn_ble_gap_scan_data_unset(true); ++ } ++ ++ err_code = ble_gap_scan_start_rsp_enc(sd_err_code, p_adv_report_buffer, p_tx_buf, p_tx_buf_len); + #else + err_code = ble_gap_scan_start_req_dec(p_rx_buf, rx_buf_len, &p_scan_params); + SER_ASSERT(err_code == NRF_SUCCESS, err_code); + + sd_err_code = sd_ble_gap_scan_start(p_scan_params); +-#endif + err_code = ble_gap_scan_start_rsp_enc(sd_err_code, p_tx_buf, p_tx_buf_len); ++#endif + SER_ASSERT(err_code == NRF_SUCCESS, err_code); + + return err_code; +@@ -163,7 +171,7 @@ uint32_t conn_mw_ble_gap_scan_stop(uint8_t const * const p_rx_buf, + uint32_t sd_err_code; + + #if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 5 +- conn_ble_gap_ble_data_buf_free(mp_scan_data); ++ conn_ble_gap_scan_data_unset(true); + #endif + + sd_err_code = sd_ble_gap_scan_stop(); +@@ -1232,7 +1240,13 @@ uint32_t conn_mw_ble_gap_adv_set_configure(uint8_t const * const p_rx_buf, + + sd_err_code = sd_ble_gap_adv_set_configure(p_adv_handle, p_adv_data, p_adv_params); + +- err_code = ble_gap_adv_set_configure_rsp_enc(sd_err_code, p_tx_buf, p_tx_buf_len, p_adv_handle); ++ if ((sd_err_code != NRF_SUCCESS) && p_adv_data) ++ { ++ conn_ble_gap_ble_data_buf_free(p_adv_data->adv_data.p_data); ++ conn_ble_gap_ble_data_buf_free(p_adv_data->scan_rsp_data.p_data); ++ } ++ ++ err_code = ble_gap_adv_set_configure_rsp_enc(sd_err_code, p_tx_buf, p_tx_buf_len, p_adv_data, p_adv_handle); + SER_ASSERT(err_code == NRF_SUCCESS, err_code); + + return err_code; +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/ble_event_enc.c nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/serializers/ble_event_enc.c +index ffe2ffe..5355070 100644 +--- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/ble_event_enc.c ++++ nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/serializers/ble_event_enc.c +@@ -46,6 +46,7 @@ + #include "ble_serialization.h" + #include "app_util.h" + #include "nrf_log.h" ++#include "ser_dbg_sd_str.h" + + uint32_t ble_event_enc(ble_evt_t const * const p_event, + uint32_t event_len, +@@ -58,6 +59,8 @@ uint32_t ble_event_enc(ble_evt_t const * const p_event, + SER_ASSERT_NOT_NULL(p_buf_len); + SER_ASSERT_NOT_NULL(p_event); + ++ NRF_LOG_DEBUG("event:%s", ser_dbg_sd_evt_str_get(p_event->header.evt_id)); ++ + switch (p_event->header.evt_id) + { + #if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 4 +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.c nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.c +index ff9a3ad..674a0bf 100644 +--- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.c ++++ nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.c +@@ -671,10 +671,14 @@ uint32_t ble_gap_scan_start_req_dec(uint8_t const * const p_buf, + } + + uint32_t ble_gap_scan_start_rsp_enc(uint32_t return_code, ++#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 5 ++ ble_data_t *p_ble_data, ++#endif + uint8_t * const p_buf, + uint32_t * const p_buf_len) + { + SER_RSP_ENC_RESULT_ONLY(SD_BLE_GAP_SCAN_START); ++ + } + + uint32_t ble_gap_scan_stop_rsp_enc(uint32_t return_code, +@@ -1065,11 +1069,13 @@ uint32_t ble_gap_adv_set_configure_req_dec(uint8_t const * const p_buf, + uint32_t ble_gap_adv_set_configure_rsp_enc(uint32_t return_code, + uint8_t * const p_buf, + uint32_t * const p_buf_len, ++ ble_gap_adv_data_t * p_ble_adv_data, + uint8_t const * const p_adv_handle) + { + SER_RSP_ENC_BEGIN(SD_BLE_GAP_ADV_SET_CONFIGURE); + + SER_PUSH_COND(p_adv_handle, uint8_t_enc); ++ + SER_RSP_ENC_END; + } + +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.h nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.h +index f1eaa4d..3bfaf36 100644 +--- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.h ++++ nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.h +@@ -850,6 +850,9 @@ uint32_t ble_gap_scan_start_req_dec(uint8_t const * const p_buf, + * @retval NRF_ERROR_INVALID_LENGTH Encoding failure. Incorrect buffer length. + */ + uint32_t ble_gap_scan_start_rsp_enc(uint32_t return_code, ++#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 5 ++ ble_data_t *p_ble_data, ++#endif + uint8_t * const p_buf, + uint32_t * const p_buf_len); + +@@ -1446,6 +1449,7 @@ uint32_t ble_gap_adv_set_configure_req_dec(uint8_t const * const p_buf, + uint32_t ble_gap_adv_set_configure_rsp_enc(uint32_t return_code, + uint8_t * const p_buf, + uint32_t * const p_buf_len, ++ ble_gap_adv_data_t * p_ble_adv_data, + uint8_t const * const p_adv_handle); + + #ifndef S112 +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/ble_gap_evt_conn.c nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/serializers/ble_gap_evt_conn.c +index 9267b39..a96cff8 100644 +--- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/ble_gap_evt_conn.c ++++ nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/serializers/ble_gap_evt_conn.c +@@ -43,6 +43,7 @@ + #include "ble_serialization.h" + #include "cond_field_serialization.h" + #include "ble_gap_struct_serialization.h" ++#include "ble_struct_serialization.h" + #include "conn_ble_gap_sec_keys.h" + #include "app_util.h" + +@@ -59,6 +60,10 @@ uint32_t ble_gap_evt_adv_report_enc(ble_evt_t const * const p_event, + SER_PUSH_uint16(&p_event->evt.gap_evt.conn_handle); + SER_PUSH_FIELD(&p_event->evt.gap_evt.params.adv_report, ble_gap_evt_adv_report_t_enc); + ++#if NRF_SD_BLE_API_VERSION > 5 ++ conn_ble_gap_scan_data_unset(false); ++#endif ++ + SER_EVT_ENC_END; + } + #endif //!S112 +@@ -313,7 +318,7 @@ uint32_t ble_gap_evt_timeout_enc(ble_evt_t const * const p_event, + #if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 5 && !defined(S112) + if (p_event->evt.gap_evt.params.timeout.src == BLE_GAP_TIMEOUT_SRC_SCAN) + { +- SER_PUSH_uint16(&p_event->evt.gap_evt.params.timeout.params.adv_report_buffer.len); ++ SER_PUSH_FIELD(&p_event->evt.gap_evt.params.timeout.params.adv_report_buffer, ble_data_t_enc); + } + #endif + SER_EVT_ENC_END; +@@ -384,17 +389,8 @@ uint32_t ble_gap_evt_adv_set_terminated_enc(ble_evt_t const * const p_event, + SER_EVT_ENC_BEGIN(BLE_GAP_EVT_ADV_SET_TERMINATED); + + SER_PUSH_uint16(&p_event->evt.gap_evt.conn_handle); +- SER_PUSH_FIELD(&p_event->evt.gap_evt.params.adv_set_terminated, ble_gap_evt_adv_set_terminated_t_enc); +- +- if (p_event->evt.gap_evt.params.adv_set_terminated.adv_data.adv_data.p_data) +- { +- conn_ble_gap_ble_data_buf_free(p_event->evt.gap_evt.params.adv_set_terminated.adv_data.adv_data.p_data); +- } + +- if (p_event->evt.gap_evt.params.adv_set_terminated.adv_data.scan_rsp_data.p_data) +- { +- conn_ble_gap_ble_data_buf_free(p_event->evt.gap_evt.params.adv_set_terminated.adv_data.scan_rsp_data.p_data); +- } ++ SER_PUSH_FIELD(&p_event->evt.gap_evt.params.adv_set_terminated, ble_gap_evt_adv_set_terminated_t_enc); + + SER_EVT_ENC_END; + } +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.c nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.c +index 3f8c122..8b21066 100644 +--- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.c ++++ nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.c +@@ -54,7 +54,25 @@ typedef struct + + ble_data_item_t m_ble_data_pool[8]; + ++static uint8_t * mp_scan_data; ++ + #endif ++ ++void conn_ble_gap_sec_keys_init(void) ++{ ++ uint32_t i; ++ for (i = 0; i < SER_MAX_CONNECTIONS; i++) ++ { ++ m_conn_keys_table[i].conn_active = 0; ++ } ++#if NRF_SD_BLE_API_VERSION >= 6 ++ for (i = 0; i < 8; i++) ++ { ++ m_ble_data_pool[i].id = 0; ++ } ++#endif ++} ++ + uint32_t conn_ble_gap_sec_context_create(uint32_t *p_index) + { + uint32_t err_code = NRF_ERROR_NO_MEM; +@@ -115,6 +133,11 @@ uint8_t * conn_ble_gap_ble_data_buf_alloc(uint32_t id) + { + uint32_t i; + ++ if (id == 0) ++ { ++ return NULL; ++ } ++ + /* First find if given id already allocated the buffer. */ + for (i = 0; i < ARRAY_SIZE(m_ble_data_pool); i++) + { +@@ -137,19 +160,43 @@ uint8_t * conn_ble_gap_ble_data_buf_alloc(uint32_t id) + } + + +-void conn_ble_gap_ble_data_buf_free(uint8_t * p_data) ++uint32_t conn_ble_gap_ble_data_buf_free(uint8_t * p_data) + { + uint32_t i; + ++ if (p_data == NULL) ++ { ++ return 0; ++ } + /* First find if given id already allocated the buffer. */ + for (i = 0; i < ARRAY_SIZE(m_ble_data_pool); i++) + { + if (m_ble_data_pool[i].ble_data == p_data) + { ++ uint32_t id = m_ble_data_pool[i].id; + m_ble_data_pool[i].id = 0; +- return; ++ return id; + } + } ++ ++ return 0; ++} ++ ++void conn_ble_gap_scan_data_set(uint8_t * p_scan_data) ++{ ++ mp_scan_data = p_scan_data; ++} ++ ++void conn_ble_gap_scan_data_unset(bool free) ++{ ++ if (mp_scan_data) ++ { ++ if (free) ++ { ++ conn_ble_gap_ble_data_buf_free(mp_scan_data); ++ } ++ mp_scan_data = NULL; ++ } + } + #endif + +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.h nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.h +index 875de9a..348b54d 100644 +--- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.h ++++ nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.h +@@ -51,7 +51,7 @@ + + #include "ble_gap.h" + #include +- ++#include + #ifdef __cplusplus + extern "C" { + #endif +@@ -79,6 +79,9 @@ typedef struct + ble_gap_lesc_p256_pk_t pk_peer; /**< Peer Public key, see @ref ble_gap_lesc_p256_pk_t. */ + } ser_ble_gap_conn_keyset_t; + ++/**@brief Initializes buffer pool. */ ++void conn_ble_gap_sec_keys_init(void); ++ + /**@brief Allocates instance in m_conn_keys_table[] for storage of encryption keys. + * + * @param[out] p_index Pointer to the index of allocated instance. +@@ -119,7 +122,10 @@ uint8_t * conn_ble_gap_ble_data_buf_alloc(uint32_t id); + /** @brief Function for freeing the buffer. + * @param p_data Buffer to be freed. + */ +-void conn_ble_gap_ble_data_buf_free(uint8_t * p_data); ++uint32_t conn_ble_gap_ble_data_buf_free(uint8_t * p_data); ++ ++void conn_ble_gap_scan_data_set(uint8_t * p_scan_data); ++void conn_ble_gap_scan_data_unset(bool free); + + #ifdef __cplusplus + } +diff --git nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.c nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.c +index 2a54512..68623e4 100644 +--- nRF5_SDK_15.2.0_9412b96/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.c ++++ nRF5_SDK_15.2.0_80108de/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.c +@@ -46,6 +46,16 @@ + + sercon_ble_user_mem_t m_conn_user_mem_table[SER_MAX_CONNECTIONS]; + ++void conn_ble_user_mem_init(void) ++{ ++ uint32_t i; ++ ++ for (i=0; i +- ++#include + #ifdef __cplusplus + extern "C" { + #endif +@@ -68,8 +68,9 @@ extern "C" { + * @details The function decodes encoded system reset command and performs software reset. + * This command does not send back the Command Response packet to the Application Chip. + */ +-void ser_conn_reset_command_process(void); ++void ser_conn_generic_command_process(uint8_t * p_command, uint16_t command_len); + ++bool soft_reset_trigger(void); + + #ifdef __cplusplus + } +diff --git nRF5_SDK_15.2.0_9412b96/components/softdevice/common/nrf_sdh.c nRF5_SDK_15.2.0_80108de/components/softdevice/common/nrf_sdh.c +index 63e7fea..f2fa7cf 100644 +--- nRF5_SDK_15.2.0_9412b96/components/softdevice/common/nrf_sdh.c ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/common/nrf_sdh.c +@@ -204,7 +204,11 @@ ret_code_t nrf_sdh_enable_request(void) + .source = NRF_SDH_CLOCK_LF_SRC, + .rc_ctiv = NRF_SDH_CLOCK_LF_RC_CTIV, + .rc_temp_ctiv = NRF_SDH_CLOCK_LF_RC_TEMP_CTIV, ++#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 3 + .accuracy = NRF_SDH_CLOCK_LF_ACCURACY ++#else ++ .xtal_accuracy = NRF_SDH_CLOCK_LF_ACCURACY ++#endif + }; + + CRITICAL_REGION_ENTER(); +@@ -224,6 +228,13 @@ ret_code_t nrf_sdh_enable_request(void) + m_nrf_sdh_continue = false; + m_nrf_sdh_suspended = false; + ++#ifdef SOFTDEVICE_PRESENT ++ ret_code = sd_nvic_ClearPendingIRQ((IRQn_Type)SD_EVT_IRQn); ++ APP_ERROR_CHECK(ret_code); ++#else ++ // In case of serialization, NVIC must be accessed directly. ++ NVIC_ClearPendingIRQ((IRQn_Type)SD_EVT_IRQn); ++#endif + // Enable event interrupt. + // Interrupt priority has already been set by the stack. + softdevices_evt_irq_enable(); +diff --git nRF5_SDK_15.2.0_9412b96/components/softdevice/common/nrf_sdh_ble.c nRF5_SDK_15.2.0_80108de/components/softdevice/common/nrf_sdh_ble.c +index d8ac161..db6379f 100644 +--- nRF5_SDK_15.2.0_9412b96/components/softdevice/common/nrf_sdh_ble.c ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/common/nrf_sdh_ble.c +@@ -102,8 +102,9 @@ ret_code_t nrf_sdh_ble_app_ram_start_get(uint32_t * p_app_ram_start) + + ret_code_t nrf_sdh_ble_default_cfg_set(uint8_t conn_cfg_tag, uint32_t * p_ram_start) + { +- uint32_t ret_code; + ++#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 3 ++ uint32_t ret_code; + ret_code = nrf_sdh_ble_app_ram_start_get(p_ram_start); + if (ret_code != NRF_SUCCESS) + { +@@ -197,7 +198,7 @@ ret_code_t nrf_sdh_ble_default_cfg_set(uint8_t conn_cfg_tag, uint32_t * p_ram_st + NRF_LOG_ERROR("sd_ble_cfg_set() returned %s when attempting to set BLE_GATTS_CFG_SERVICE_CHANGED.", + nrf_strerror_get(ret_code)); + } +- ++#endif //defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 3 + return NRF_SUCCESS; + } + +@@ -217,7 +218,7 @@ static uint32_t ram_end_address_get(void) + return RAM_START + ram_total_size; + } + +- ++#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 4 + ret_code_t nrf_sdh_ble_enable(uint32_t * const p_app_ram_start) + { + // Start of RAM, obtained from linker symbol. +@@ -256,7 +257,46 @@ ret_code_t nrf_sdh_ble_enable(uint32_t * const p_app_ram_start) + + return ret_code; + } ++#else ++ret_code_t nrf_sdh_ble_enable(ble_enable_params_t * p_ble_enable_params, uint32_t * const p_app_ram_start) ++{ ++ // Start of RAM, obtained from linker symbol. ++ uint32_t const app_ram_start_link = *p_app_ram_start; + ++ ret_code_t ret_code = sd_ble_enable(p_ble_enable_params, p_app_ram_start); ++ if (*p_app_ram_start > app_ram_start_link) ++ { ++ NRF_LOG_WARNING("Insufficient RAM allocated for the SoftDevice."); ++ ++ NRF_LOG_WARNING("Change the RAM start location from 0x%x to 0x%x.", ++ app_ram_start_link, *p_app_ram_start); ++ NRF_LOG_WARNING("Maximum RAM size for application is 0x%x.", ++ ram_end_address_get() - (*p_app_ram_start)); ++ } ++ else ++ { ++ NRF_LOG_DEBUG("RAM starts at 0x%x", app_ram_start_link); ++ if (*p_app_ram_start != app_ram_start_link) ++ { ++ NRF_LOG_DEBUG("RAM start location can be adjusted to 0x%x.", *p_app_ram_start); ++ ++ NRF_LOG_DEBUG("RAM size for application can be adjusted to 0x%x.", ++ ram_end_address_get() - (*p_app_ram_start)); ++ } ++ } ++ ++ if (ret_code == NRF_SUCCESS) ++ { ++ m_stack_is_enabled = true; ++ } ++ else ++ { ++ NRF_LOG_ERROR("sd_ble_enable() returned %s.", nrf_strerror_get(ret_code)); ++ } ++ ++ return ret_code; ++} ++#endif + + /**@brief Function for polling BLE events. + * +diff --git nRF5_SDK_15.2.0_9412b96/components/softdevice/common/nrf_sdh_ble.h nRF5_SDK_15.2.0_80108de/components/softdevice/common/nrf_sdh_ble.h +index 2970807..7c08450 100644 +--- nRF5_SDK_15.2.0_9412b96/components/softdevice/common/nrf_sdh_ble.h ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/common/nrf_sdh_ble.h +@@ -62,6 +62,12 @@ + extern "C" { + #endif + ++#ifndef BLE_EVT_LEN_MAX ++#define BLE_EVT_LEN_MAX(ATT_MTU) ( \ ++ offsetof(ble_evt_t, evt.gattc_evt.params.prim_srvc_disc_rsp.services) + ((ATT_MTU) - 1) / 4 * sizeof(ble_gattc_service_t) \ ++) ++ ++#endif + /** @brief Size of the buffer for a BLE event. */ + #define NRF_SDH_BLE_EVT_BUF_SIZE BLE_EVT_LEN_MAX(NRF_SDH_BLE_GATT_MAX_MTU_SIZE) + +@@ -172,8 +178,11 @@ ret_code_t nrf_sdh_ble_default_cfg_set(uint8_t conn_cfg_tag, uint32_t * p_ram_st + * + * @param[in] p_app_ram_start Address of the start of application's RAM. + */ ++#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 4 + ret_code_t nrf_sdh_ble_enable(uint32_t * p_app_ram_start); +- ++#else ++ret_code_t nrf_sdh_ble_enable(ble_enable_params_t * p_ble_enable_params, uint32_t * p_app_ram_start); ++#endif + + #ifdef __cplusplus + } +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble.h +new file mode 100644 +index 0000000..168d655 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble.h +@@ -0,0 +1,681 @@ ++/* ++ * Copyright (c) Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form must reproduce the above copyright notice, this ++ * list of conditions and the following disclaimer in the documentation and/or ++ * other materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other ++ * contributors to this software may be used to endorse or promote products ++ * derived from this software without specific prior written permission. ++ * ++ * 4. This software must only be used in a processor manufactured by Nordic ++ * Semiconductor ASA, or in a processor manufactured by a third party that ++ * is used in combination with a processor manufactured by Nordic Semiconductor. ++ * ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ++ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ++ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ * ++ */ ++ ++/** ++ @addtogroup BLE_COMMON BLE SoftDevice Common ++ @{ ++ @defgroup ble_api Events, type definitions and API calls ++ @{ ++ ++ @brief Module independent events, type definitions and API calls for the BLE SoftDevice. ++ ++ */ ++ ++#ifndef BLE_H__ ++#define BLE_H__ ++ ++#include "ble_ranges.h" ++#include "ble_types.h" ++#include "ble_gap.h" ++#include "ble_l2cap.h" ++#include "ble_gatt.h" ++#include "ble_gattc.h" ++#include "ble_gatts.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/** @addtogroup BLE_COMMON_ENUMERATIONS Enumerations ++ * @{ */ ++ ++/** ++ * @brief Common API SVC numbers. ++ */ ++enum BLE_COMMON_SVCS ++{ ++ SD_BLE_ENABLE = BLE_SVC_BASE, /**< Enable and initialize the BLE stack */ ++ SD_BLE_EVT_GET, /**< Get an event from the pending events queue. */ ++ SD_BLE_TX_PACKET_COUNT_GET, /**< Get the total number of available application transmission packets for a particular connection. */ ++ SD_BLE_UUID_VS_ADD, /**< Add a Vendor Specific UUID. */ ++ SD_BLE_UUID_DECODE, /**< Decode UUID bytes. */ ++ SD_BLE_UUID_ENCODE, /**< Encode UUID bytes. */ ++ SD_BLE_VERSION_GET, /**< Get the local version information (company id, Link Layer Version, Link Layer Subversion). */ ++ SD_BLE_USER_MEM_REPLY, /**< User Memory Reply. */ ++ SD_BLE_OPT_SET, /**< Set a BLE option. */ ++ SD_BLE_OPT_GET, /**< Get a BLE option. */ ++}; ++ ++ /** ++ * @brief BLE Module Independent Event IDs. ++ */ ++enum BLE_COMMON_EVTS ++{ ++ BLE_EVT_TX_COMPLETE = BLE_EVT_BASE, /**< Transmission Complete. @ref ble_evt_tx_complete_t */ ++ BLE_EVT_USER_MEM_REQUEST, /**< User Memory request. @ref ble_evt_user_mem_request_t */ ++ BLE_EVT_USER_MEM_RELEASE, /**< User Memory release. @ref ble_evt_user_mem_release_t */ ++ BLE_EVT_DATA_LENGTH_CHANGED /**< Link layer PDU length changed. @ref ble_evt_data_length_changed_t. */ ++}; ++ ++/**@brief BLE connection bandwidth types. ++ * Bandwidth types supported by the SoftDevice. The bandwidth type dictates the maximum number of full length packets per connection interval. ++ */ ++enum BLE_CONN_BWS ++{ ++ BLE_CONN_BW_INVALID = 0, /**< Invalid connection bandwidth. */ ++ BLE_CONN_BW_LOW, /**< Low connection bandwidth. */ ++ BLE_CONN_BW_MID, /**< Medium connection bandwidth. */ ++ BLE_CONN_BW_HIGH /**< High connection bandwidth. */ ++}; ++ ++/**@brief Common Option IDs. ++ * IDs that uniquely identify a common option. ++ */ ++enum BLE_COMMON_OPTS ++{ ++ BLE_COMMON_OPT_CONN_BW = BLE_OPT_BASE, /**< Bandwidth configuration @ref ble_common_opt_conn_bw_t */ ++ BLE_COMMON_OPT_PA_LNA, /**< PA and LNA options */ ++ BLE_COMMON_OPT_CONN_EVT_EXT, /**< Extended connection events option */ ++}; ++ ++/** @} */ ++ ++/** @addtogroup BLE_COMMON_DEFINES Defines ++ * @{ */ ++ ++/** @brief Required pointer alignment for BLE Events. ++*/ ++#define BLE_EVTS_PTR_ALIGNMENT 4 ++ ++/** @brief Maximum possible length for BLE Events. ++ * @note Value of @ref ble_gatt_enable_params_t::att_mtu shall be used as a parameter. ++ * If that value is set to 0 then @ref GATT_MTU_SIZE_DEFAULT must be used instead. ++*/ ++#define BLE_EVTS_LEN_MAX(ATT_MTU) (MAX( \ ++ sizeof(ble_evt_t), \ ++ MAX( \ ++ offsetof(ble_evt_t, evt.gattc_evt.params.rel_disc_rsp.includes) + ((ATT_MTU) - 2) / 6 * sizeof(ble_gattc_include_t), \ ++ offsetof(ble_evt_t, evt.gattc_evt.params.attr_info_disc_rsp.info.attr_info16) + ((ATT_MTU) - 2) / 4 * sizeof(ble_gattc_attr_info16_t) \ ++ ) \ ++)) ++ ++/** @defgroup BLE_USER_MEM_TYPES User Memory Types ++ * @{ */ ++#define BLE_USER_MEM_TYPE_INVALID 0x00 /**< Invalid User Memory Types. */ ++#define BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES 0x01 /**< User Memory for GATTS queued writes. */ ++/** @} */ ++ ++/** @defgroup BLE_UUID_VS_COUNTS Vendor Specific UUID counts ++ * @{ ++ */ ++#define BLE_UUID_VS_COUNT_MIN 1 /**< Minimum VS UUID count. */ ++#define BLE_UUID_VS_COUNT_DEFAULT 0 /**< Use the default VS UUID count (10 for this version of the SoftDevice). */ ++/** @} */ ++ ++/** @} */ ++ ++/** @addtogroup BLE_COMMON_STRUCTURES Structures ++ * @{ */ ++ ++/**@brief User Memory Block. */ ++typedef struct ++{ ++ uint8_t *p_mem; /**< Pointer to the start of the user memory block. */ ++ uint16_t len; /**< Length in bytes of the user memory block. */ ++} ble_user_mem_block_t; ++ ++/** ++ * @brief Event structure for @ref BLE_EVT_TX_COMPLETE. ++ */ ++typedef struct ++{ ++ uint8_t count; /**< Number of packets transmitted. */ ++} ble_evt_tx_complete_t; ++ ++/**@brief Event structure for @ref BLE_EVT_USER_MEM_REQUEST. */ ++typedef struct ++{ ++ uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ ++} ble_evt_user_mem_request_t; ++ ++/**@brief Event structure for @ref BLE_EVT_USER_MEM_RELEASE. */ ++typedef struct ++{ ++ uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ ++ ble_user_mem_block_t mem_block; /**< User memory block */ ++} ble_evt_user_mem_release_t; ++ ++/**@brief Event structure for @ref BLE_EVT_DATA_LENGTH_CHANGED. */ ++typedef struct ++{ ++ uint16_t max_tx_octets; /**< The maximum number of payload octets in a Link Layer Data Channel PDU that the local Controller will send. Range: 27-251 */ ++ uint16_t max_tx_time; /**< The maximum time (in microseconds) that the local Controller will take to send a Link Layer Data Channel PDU. Range: 328-2120 */ ++ uint16_t max_rx_octets; /**< The maximum number of payload octets in a Link Layer Data Channel PDU that the local controller expects to receive. Range: 27-251 */ ++ uint16_t max_rx_time; /**< The maximum time (in microseconds) that the local Controller expects to take to receive a Link Layer Data Channel PDU. Range: 328-2120 */ ++} ble_evt_data_length_changed_t; ++ ++/**@brief Event structure for events not associated with a specific function module. */ ++typedef struct ++{ ++ uint16_t conn_handle; /**< Connection Handle on which this event occurred. */ ++ union ++ { ++ ble_evt_tx_complete_t tx_complete; /**< Transmission Complete. */ ++ ble_evt_user_mem_request_t user_mem_request; /**< User Memory Request Event Parameters. */ ++ ble_evt_user_mem_release_t user_mem_release; /**< User Memory Release Event Parameters. */ ++ ble_evt_data_length_changed_t data_length_changed; /**< Data Length Changed Event Parameters. */ ++ } params; /**< Event parameter union. */ ++} ble_common_evt_t; ++ ++/**@brief BLE Event header. */ ++typedef struct ++{ ++ uint16_t evt_id; /**< Value from a BLE__EVT series. */ ++ uint16_t evt_len; /**< Length in octets including this header. */ ++} ble_evt_hdr_t; ++ ++/**@brief Common BLE Event type, wrapping the module specific event reports. */ ++typedef struct ++{ ++ ble_evt_hdr_t header; /**< Event header. */ ++ union ++ { ++ ble_common_evt_t common_evt; /**< Common Event, evt_id in BLE_EVT_* series. */ ++ ble_gap_evt_t gap_evt; /**< GAP originated event, evt_id in BLE_GAP_EVT_* series. */ ++ ble_l2cap_evt_t l2cap_evt; /**< L2CAP originated event, evt_id in BLE_L2CAP_EVT* series. */ ++ ble_gattc_evt_t gattc_evt; /**< GATT client originated event, evt_id in BLE_GATTC_EVT* series. */ ++ ble_gatts_evt_t gatts_evt; /**< GATT server originated event, evt_id in BLE_GATTS_EVT* series. */ ++ } evt; /**< Event union. */ ++} ble_evt_t; ++ ++ ++/** ++ * @brief Version Information. ++ */ ++typedef struct ++{ ++ uint8_t version_number; /**< Link Layer Version number for BT 4.1 spec is 7 (https://www.bluetooth.org/en-us/specification/assigned-numbers/link-layer). */ ++ uint16_t company_id; /**< Company ID, Nordic Semiconductor's company ID is 89 (0x0059) (https://www.bluetooth.org/apps/content/Default.aspx?doc_id=49708). */ ++ uint16_t subversion_number; /**< Link Layer Sub Version number, corresponds to the SoftDevice Config ID or Firmware ID (FWID). */ ++} ble_version_t; ++ ++/** ++ * @brief Configuration parameters for the PA and LNA. ++ */ ++typedef struct ++{ ++ uint8_t enable :1; /**< Enable toggling for this amplifier */ ++ uint8_t active_high :1; /**< Set the pin to be active high */ ++ uint8_t gpio_pin :6; /**< The GPIO pin to toggle for this amplifier */ ++} ble_pa_lna_cfg_t; ++ ++/** ++ * @brief PA & LNA GPIO toggle configuration ++ * ++ * This option configures the SoftDevice to toggle pins when the radio is active for use with a power amplifier and/or ++ * a low noise amplifier. ++ * ++ * Toggling the pins is achieved by using two PPI channels and a GPIOTE channel. The hardware channel IDs are provided ++ * by the application and should be regarded as reserved as long as any PA/LNA toggling is enabled. ++ * ++ * @note @ref sd_ble_opt_get is not supported for this option. ++ * @note This feature is only supported for nRF52, on nRF51 @ref NRF_ERROR_NOT_SUPPORTED will always be returned. ++ * @note Setting this option while the radio is in use (i.e. any of the roles are active) may have undefined consequences ++ * and must be avoided by the application. ++ */ ++typedef struct ++{ ++ ble_pa_lna_cfg_t pa_cfg; /**< Power Amplifier configuration */ ++ ble_pa_lna_cfg_t lna_cfg; /**< Low Noise Amplifier configuration */ ++ ++ uint8_t ppi_ch_id_set; /**< PPI channel used for radio pin setting */ ++ uint8_t ppi_ch_id_clr; /**< PPI channel used for radio pin clearing */ ++ uint8_t gpiote_ch_id; /**< GPIOTE channel used for radio pin toggling */ ++} ble_common_opt_pa_lna_t; ++ ++/** ++ * @brief BLE connection bandwidth configuration parameters ++ */ ++typedef struct ++{ ++ uint8_t conn_bw_tx; /**< Connection bandwidth configuration for transmission, see @ref BLE_CONN_BWS.*/ ++ uint8_t conn_bw_rx; /**< Connection bandwidth configuration for reception, see @ref BLE_CONN_BWS.*/ ++} ble_conn_bw_t; ++ ++/**@brief BLE connection specific bandwidth configuration parameters. ++ * ++ * This can be used with @ref sd_ble_opt_set to set the bandwidth configuration to be used when creating connections. ++ * ++ * Call @ref sd_ble_opt_set with this option prior to calling @ref sd_ble_gap_adv_start or @ref sd_ble_gap_connect. ++ * ++ * The bandwidth configurations set via @ref sd_ble_opt_set are maintained separately for central and peripheral ++ * connections. The given configurations are used for all future connections of the role indicated in this structure ++ * unless they are changed by subsequent @ref sd_ble_opt_set calls. ++ * ++ * @note When this option is not used, the SoftDevice will use the default options: ++ * - @ref BLE_CONN_BW_HIGH for @ref BLE_GAP_ROLE_PERIPH connections (both transmission and reception). ++ * - @ref BLE_CONN_BW_MID for @ref BLE_GAP_ROLE_CENTRAL connections (both transmisison and reception). ++ * This option allows the application to selectively override these defaults for each role. ++ * ++ * @note The global memory pool configuration can be set with the @ref ble_conn_bw_counts_t configuration parameter, which ++ * is provided to @ref sd_ble_enable. ++ * ++ * @note @ref sd_ble_opt_get is not supported for this option. ++ * @note Please refer to SoftDevice Specification for more information on bandwidth configuration. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_COMMON_CONF_BW} ++ * @endmscs ++ * ++ * @retval ::NRF_SUCCESS Set successfully. ++ * @retval ::BLE_ERROR_INVALID_ROLE The role is invalid. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid bandwidth configuration parameters. ++ * @retval ::NRF_ERROR_NOT_SUPPORTED If the combination of role and bandwidth configuration is not supported. ++ */ ++typedef struct ++{ ++ uint8_t role; /**< BLE role of the connection, see @ref BLE_GAP_ROLES. */ ++ ble_conn_bw_t conn_bw; /**< Bandwidth configuration parameters. */ ++} ble_common_opt_conn_bw_t; ++ ++/** ++ * @brief Configuration of extended BLE connection events. ++ * ++ * When enabled the SoftDevice will dynamically extend the connection event when possible. ++ * ++ * The connection event length is controlled by the bandwidth configuration as set by @ref ble_common_opt_conn_bw_t. ++ * The connection event can be extended if there is time to send another packet pair before the start of the next connection interval, ++ * and if there are no conflicts with other BLE roles requesting radio time. ++ * ++ * @note @ref sd_ble_opt_get is not supported for this option. ++ */ ++typedef struct ++{ ++ uint8_t enable : 1; /**< Enable extended BLE connection events, disabled by default. */ ++} ble_common_opt_conn_evt_ext_t; ++ ++/**@brief Option structure for common options. */ ++typedef union ++{ ++ ble_common_opt_conn_bw_t conn_bw; /**< Parameters for the connection bandwidth option. */ ++ ble_common_opt_pa_lna_t pa_lna; /**< Parameters for controlling PA and LNA pin toggling. */ ++ ble_common_opt_conn_evt_ext_t conn_evt_ext; /**< Parameters for enabling extended connection events. */ ++} ble_common_opt_t; ++ ++/**@brief Common BLE Option type, wrapping the module specific options. */ ++typedef union ++{ ++ ble_common_opt_t common_opt; /**< COMMON options, opt_id in @ref BLE_COMMON_OPTS series. */ ++ ble_gap_opt_t gap_opt; /**< GAP option, opt_id in @ref BLE_GAP_OPTS series. */ ++} ble_opt_t; ++ ++/** ++ * @brief BLE bandwidth count parameters ++ * ++ * These parameters are used to configure the memory pools allocated within the SoftDevice for application packets ++ * (both transmission and reception) for all connections. ++ * ++ * @note The sum of all three counts must add up to the sum of @ref ble_gap_enable_params_t::central_conn_count and ++ * @ref ble_gap_enable_params_t::periph_conn_count in @ref ble_gap_enable_params_t. ++ */ ++typedef struct { ++ uint8_t high_count; /**< Total number of high bandwidth TX or RX memory pools available to the application at runtime for all active connections. */ ++ uint8_t mid_count; /**< Total number of medium bandwidth TX or RX memory pools available to the application at runtime for all active connections. */ ++ uint8_t low_count; /**< Total number of low bandwidth TX or RX memory pools available to the application at runtime for all active connections. */ ++} ble_conn_bw_count_t; ++ ++/** ++ * @brief BLE bandwidth global memory pool configuration parameters ++ * ++ * These configuration parameters are used to set the amount of memory dedicated to application packets for ++ * all connections. The application should specify the most demanding configuration for the intended use. ++ * ++ * Please refer to the SoftDevice Specification for more information on bandwidth configuration. ++ * ++ * @note Each connection created at runtime requires both a TX and an RX memory pool. By the use of these configuration ++ * parameters, the application can decide the size and total number of the global memory pools that will be later ++ * available for connection creation. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_COMMON_CONF_BW} ++ * @endmscs ++ * ++ */ ++typedef struct { ++ ble_conn_bw_count_t tx_counts; /**< Global memory pool configuration for transmission.*/ ++ ble_conn_bw_count_t rx_counts; /**< Global memory pool configuration for reception.*/ ++} ble_conn_bw_counts_t; ++ ++/** ++ * @brief BLE Common Initialization parameters. ++ * ++ * @note If @ref p_conn_bw_counts is NULL the SoftDevice will assume default bandwidth configuration for all connections. ++ * To fit a custom bandwidth configuration requirement, the application developer may have to specify a custom memory ++ * pool configuration here. See @ref ble_common_opt_conn_bw_t for bandwidth configuration of individual connections. ++ * Please refer to the SoftDevice Specification for more information on bandwidth configuration. ++ */ ++typedef struct ++{ ++ uint16_t vs_uuid_count; /**< Maximum number of 128-bit, Vendor Specific UUID bases to allocate. */ ++ ble_conn_bw_counts_t *p_conn_bw_counts; /**< Bandwidth configuration parameters or NULL for defaults. */ ++} ble_common_enable_params_t; ++ ++/** ++ * @brief BLE Initialization parameters. ++ */ ++typedef struct ++{ ++ ble_common_enable_params_t common_enable_params; /**< Common init parameters @ref ble_common_enable_params_t. */ ++ ble_gap_enable_params_t gap_enable_params; /**< GAP init parameters @ref ble_gap_enable_params_t. */ ++ ble_gatt_enable_params_t gatt_enable_params; /**< GATT init parameters @ref ble_gatt_enable_params_t. */ ++ ble_gatts_enable_params_t gatts_enable_params; /**< GATTS init parameters @ref ble_gatts_enable_params_t. */ ++} ble_enable_params_t; ++ ++/** @} */ ++ ++/** @addtogroup BLE_COMMON_FUNCTIONS Functions ++ * @{ */ ++ ++/**@brief Enable the BLE stack ++ * ++ * @param[in, out] p_ble_enable_params Pointer to ble_enable_params_t ++ * @param[in, out] p_app_ram_base Pointer to a variable containing the start address of the application RAM region ++ * (APP_RAM_BASE). On return, this will contain the minimum start address of the application RAM region required by the ++ * SoftDevice for this configuration. Calling @ref sd_ble_enable() with *p_app_ram_base set to 0 can be used during ++ * development to find out how much memory a specific configuration will need. ++ * ++ * @note The memory requirement for a specific configuration will not increase between SoftDevices with the same major ++ * version number. ++ * ++ * @note At runtime the IC's RAM is split into 2 regions: The SoftDevice RAM region is located between 0x20000000 and ++ * APP_RAM_BASE-1 and the application's RAM region is located between APP_RAM_BASE and the start of the call stack. ++ * ++ * @details This call initializes the BLE stack, no other BLE related function can be called before this one. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_COMMON_ENABLE} ++ * @endmscs ++ * ++ * @retval ::NRF_SUCCESS The BLE stack has been initialized successfully. ++ * @retval ::NRF_ERROR_INVALID_STATE The BLE stack had already been initialized and cannot be reinitialized. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_LENGTH One or more of the following is true: ++ * - The specified Attribute Table size is too small. ++ * The minimum acceptable size is defined by @ref BLE_GATTS_ATTR_TAB_SIZE_MIN. ++ * - The specified Attribute Table size is not a multiple of 4. ++ * - The device name length is invalid (must be between 0 and @ref BLE_GAP_DEVNAME_MAX_LEN). ++ * - The device name length is too long for the given Attribute Table. ++ * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: ++ * - Incorrectly configured VS UUID count. ++ * - Invalid connection count parameters. ++ * - Invalid device name location (vloc). ++ * - Invalid device name security mode. ++ * - Invalid maximum ATT_MTU size, see @ref ble_gatt_enable_params_t::att_mtu. ++ * @retval ::NRF_ERROR_NOT_SUPPORTED Device name security mode is not supported. ++ * @retval ::NRF_ERROR_NO_MEM The amount of memory assigned to the SoftDevice by *p_app_ram_base is not ++ * large enough to fit this configuration's memory requirement. Check *p_app_ram_base ++ * and set the start address of the application RAM region accordingly. ++ * @retval ::NRF_ERROR_CONN_COUNT The requested number of connections exceeds the maximum supported by the SoftDevice. ++ * Please refer to the SoftDevice Specification for more information on role configuration. ++ */ ++SVCALL(SD_BLE_ENABLE, uint32_t, sd_ble_enable(ble_enable_params_t * p_ble_enable_params, uint32_t * p_app_ram_base)); ++ ++/**@brief Get an event from the pending events queue. ++ * ++ * @param[out] p_dest Pointer to buffer to be filled in with an event, or NULL to retrieve the event length. ++ * This buffer must be aligned to the extend defined by @ref BLE_EVTS_PTR_ALIGNMENT. ++ * @param[in, out] p_len Pointer the length of the buffer, on return it is filled with the event length. ++ * ++ * @details This call allows the application to pull a BLE event from the BLE stack. The application is signaled that ++ * an event is available from the BLE stack by the triggering of the SD_EVT_IRQn interrupt. ++ * The application is free to choose whether to call this function from thread mode (main context) or directly from the ++ * Interrupt Service Routine that maps to SD_EVT_IRQn. In any case however, and because the BLE stack runs at a higher ++ * priority than the application, this function should be called in a loop (until @ref NRF_ERROR_NOT_FOUND is returned) ++ * every time SD_EVT_IRQn is raised to ensure that all available events are pulled from the BLE stack. Failure to do so ++ * could potentially leave events in the internal queue without the application being aware of this fact. Sizing the ++ * p_dest buffer is equally important, since the application needs to provide all the memory necessary for the event to ++ * be copied into application memory. If the buffer provided is not large enough to fit the entire contents of the event, ++ * @ref NRF_ERROR_DATA_SIZE will be returned and the application can then call again with a larger buffer size. ++ * The maximum possible event length is defined by @ref BLE_EVTS_LEN_MAX. The application may also "peek" the event length ++ * by providing p_dest as a NULL pointer and inspecting the value of *p_len upon return: ++ * ++ * \code ++ * uint16_t len; ++ * errcode = sd_ble_evt_get(NULL, &len); ++ * \endcode ++ * ++ * @mscs ++ * @mmsc{@ref BLE_COMMON_IRQ_EVT_MSC} ++ * @mmsc{@ref BLE_COMMON_THREAD_EVT_MSC} ++ * @endmscs ++ * ++ * @retval ::NRF_SUCCESS Event pulled and stored into the supplied buffer. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. ++ * @retval ::NRF_ERROR_NOT_FOUND No events ready to be pulled. ++ * @retval ::NRF_ERROR_DATA_SIZE Event ready but could not fit into the supplied buffer. ++ */ ++SVCALL(SD_BLE_EVT_GET, uint32_t, sd_ble_evt_get(uint8_t *p_dest, uint16_t *p_len)); ++ ++ ++/**@brief Get the total number of available guaranteed application transmission packets for a particular connection. ++ * ++ * @details This call allows the application to obtain the total number of guaranteed application transmission packets ++ * available for a connection. Please note that this does not return the number of free packets, but rather the total ++ * amount of them for that particular connection. The application has two options to handle transmitting application packets: ++ * - Use a simple arithmetic calculation: after connection creation time the application should use this function to ++ * find out the total amount of guaranteed packets available to it and store it in a variable. ++ * Every time a packet is successfully queued for a transmission on this connection using any of the exposed functions in ++ * this BLE API, the application should decrement that variable. Conversely, whenever a @ref BLE_EVT_TX_COMPLETE event ++ * with the conn_handle matching the particular connection is received by the application, it should retrieve the count ++ * field in such event and add that number to the same variable storing the number of available guaranteed packets. This ++ * mechanism allows the application to be aware at any time of the number of guaranteed application packets available for ++ * each of the active connections, and therefore it can know with certainty whether it is possible to send more data or ++ * it has to wait for a @ref BLE_EVT_TX_COMPLETE event before it proceeds. ++ * The application can still pursue transmissions when the number of guaranteed application packets available is smaller ++ * than or equal to zero, but successful queuing of the tranmsission is not guaranteed. ++ * - Choose to simply not keep track of available packets at all, and instead handle the @ref BLE_ERROR_NO_TX_PACKETS error ++ * by queueing the packet to be transmitted and try again as soon as a @ref BLE_EVT_TX_COMPLETE event arrives. ++ * ++ * The API functions that may consume an application packet depending on the parameters supplied to them can be found below: ++ * - @ref sd_ble_gattc_write (write without response only) ++ * - @ref sd_ble_gatts_hvx (notifications only) ++ * - @ref sd_ble_l2cap_tx (all packets) ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[out] p_count Pointer to a uint8_t which will contain the number of application transmission packets upon ++ * successful return. ++ * @mscs ++ * @mmsc{@ref BLE_COMMON_APP_BUFF_MSC} ++ * @endmscs ++ * ++ * @retval ::NRF_SUCCESS Number of application transmission packets retrieved successfully. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ */ ++SVCALL(SD_BLE_TX_PACKET_COUNT_GET, uint32_t, sd_ble_tx_packet_count_get(uint16_t conn_handle, uint8_t *p_count)); ++ ++ ++/**@brief Add a Vendor Specific base UUID. ++ * ++ * @details This call enables the application to add a vendor specific base UUID to the BLE stack's table, for later ++ * use with all other modules and APIs. This then allows the application to use the shorter, 24-bit @ref ble_uuid_t ++ * format when dealing with both 16-bit and 128-bit UUIDs without having to check for lengths and having split code ++ * paths. This is accomplished by extending the grouping mechanism that the Bluetooth SIG standard base UUID uses ++ * for all other 128-bit UUIDs. The type field in the @ref ble_uuid_t structure is an index (relative to ++ * @ref BLE_UUID_TYPE_VENDOR_BEGIN) to the table populated by multiple calls to this function, and the uuid field ++ * in the same structure contains the 2 bytes at indices 12 and 13. The number of possible 128-bit UUIDs available to ++ * the application is therefore the number of Vendor Specific UUIDs added with the help of this function times 65536, ++ * although restricted to modifying bytes 12 and 13 for each of the entries in the supplied array. ++ * ++ * @note Bytes 12 and 13 of the provided UUID will not be used internally, since those are always replaced by ++ * the 16-bit uuid field in @ref ble_uuid_t. ++ * ++ * @note If a UUID is already present in the BLE stack's internal table, the corresponding index will be returned in ++ * p_uuid_type along with an NRF_SUCCESS error code. ++ * ++ * @param[in] p_vs_uuid Pointer to a 16-octet (128-bit) little endian Vendor Specific UUID disregarding ++ * bytes 12 and 13. ++ * @param[out] p_uuid_type Pointer to a uint8_t where the type field in @ref ble_uuid_t corresponding to this UUID will be stored. ++ * ++ * @retval ::NRF_SUCCESS Successfully added the Vendor Specific UUID. ++ * @retval ::NRF_ERROR_INVALID_ADDR If p_vs_uuid or p_uuid_type is NULL or invalid. ++ * @retval ::NRF_ERROR_NO_MEM If there are no more free slots for VS UUIDs. ++ */ ++SVCALL(SD_BLE_UUID_VS_ADD, uint32_t, sd_ble_uuid_vs_add(ble_uuid128_t const *p_vs_uuid, uint8_t *p_uuid_type)); ++ ++ ++/** @brief Decode little endian raw UUID bytes (16-bit or 128-bit) into a 24 bit @ref ble_uuid_t structure. ++ * ++ * @details The raw UUID bytes excluding bytes 12 and 13 (i.e. bytes 0-11 and 14-15) of p_uuid_le are compared ++ * to the corresponding ones in each entry of the table of vendor specific UUIDs populated with @ref sd_ble_uuid_vs_add ++ * to look for a match. If there is such a match, bytes 12 and 13 are returned as p_uuid->uuid and the index ++ * relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN as p_uuid->type. ++ * ++ * @note If the UUID length supplied is 2, then the type set by this call will always be @ref BLE_UUID_TYPE_BLE. ++ * ++ * @param[in] uuid_le_len Length in bytes of the buffer pointed to by p_uuid_le (must be 2 or 16 bytes). ++ * @param[in] p_uuid_le Pointer pointing to little endian raw UUID bytes. ++ * @param[out] p_uuid Pointer to a @ref ble_uuid_t structure to be filled in. ++ * ++ * @retval ::NRF_SUCCESS Successfully decoded into the @ref ble_uuid_t structure. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_LENGTH Invalid UUID length. ++ * @retval ::NRF_ERROR_NOT_FOUND For a 128-bit UUID, no match in the populated table of UUIDs. ++ */ ++SVCALL(SD_BLE_UUID_DECODE, uint32_t, sd_ble_uuid_decode(uint8_t uuid_le_len, uint8_t const *p_uuid_le, ble_uuid_t *p_uuid)); ++ ++ ++/** @brief Encode a @ref ble_uuid_t structure into little endian raw UUID bytes (16-bit or 128-bit). ++ * ++ * @note The pointer to the destination buffer p_uuid_le may be NULL, in which case only the validity and size of p_uuid is computed. ++ * ++ * @param[in] p_uuid Pointer to a @ref ble_uuid_t structure that will be encoded into bytes. ++ * @param[out] p_uuid_le_len Pointer to a uint8_t that will be filled with the encoded length (2 or 16 bytes). ++ * @param[out] p_uuid_le Pointer to a buffer where the little endian raw UUID bytes (2 or 16) will be stored. ++ * ++ * @retval ::NRF_SUCCESS Successfully encoded into the buffer. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid UUID type. ++ */ ++SVCALL(SD_BLE_UUID_ENCODE, uint32_t, sd_ble_uuid_encode(ble_uuid_t const *p_uuid, uint8_t *p_uuid_le_len, uint8_t *p_uuid_le)); ++ ++ ++/**@brief Get Version Information. ++ * ++ * @details This call allows the application to get the BLE stack version information. ++ * ++ * @param[out] p_version Pointer to a ble_version_t structure to be filled in. ++ * ++ * @retval ::NRF_SUCCESS Version information stored successfully. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_BUSY The BLE stack is busy (typically doing a locally-initiated disconnection procedure). ++ */ ++SVCALL(SD_BLE_VERSION_GET, uint32_t, sd_ble_version_get(ble_version_t *p_version)); ++ ++ ++/**@brief Provide a user memory block. ++ * ++ * @note This call can only be used as a response to a @ref BLE_EVT_USER_MEM_REQUEST event issued to the application. ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in,out] p_block Pointer to a user memory block structure. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_PEER_CANCEL_MSC} ++ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC} ++ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} ++ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC} ++ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_NOAUTH_MSC} ++ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} ++ * @endmscs ++ * ++ * @retval ::NRF_SUCCESS Successfully queued a response to the peer. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection state or no execute write request pending. ++ * @retval ::NRF_ERROR_BUSY The BLE stack is busy. Retry at later time. ++ */ ++SVCALL(SD_BLE_USER_MEM_REPLY, uint32_t, sd_ble_user_mem_reply(uint16_t conn_handle, ble_user_mem_block_t const *p_block)); ++ ++/**@brief Set a BLE option. ++ * ++ * @details This call allows the application to set the value of an option. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_STATIC_PK_MSC} ++ * @mmsc{@ref BLE_COMMON_CONF_BW} ++ * @endmscs ++ * ++ * @param[in] opt_id Option ID, see @ref BLE_COMMON_OPTS and @ref BLE_GAP_OPTS. ++ * @param[in] p_opt Pointer to a ble_opt_t structure containing the option value. ++ * ++ * @retval ::NRF_SUCCESS Option set successfully. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. ++ * @retval ::NRF_ERROR_INVALID_STATE Unable to set the parameter at this time. ++ * @retval ::NRF_ERROR_BUSY The BLE stack is busy or the previous procedure has not completed. ++ */ ++SVCALL(SD_BLE_OPT_SET, uint32_t, sd_ble_opt_set(uint32_t opt_id, ble_opt_t const *p_opt)); ++ ++ ++/**@brief Get a BLE option. ++ * ++ * @details This call allows the application to retrieve the value of an option. ++ * ++ * @param[in] opt_id Option ID, see @ref BLE_COMMON_OPTS and @ref BLE_GAP_OPTS. ++ * @param[out] p_opt Pointer to a ble_opt_t structure to be filled in. ++ * ++ * @retval ::NRF_SUCCESS Option retrieved successfully. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. ++ * @retval ::NRF_ERROR_INVALID_STATE Unable to retrieve the parameter at this time. ++ * @retval ::NRF_ERROR_BUSY The BLE stack is busy or the previous procedure has not completed. ++ * @retval ::NRF_ERROR_NOT_SUPPORTED This option is not supported. ++ * ++ */ ++SVCALL(SD_BLE_OPT_GET, uint32_t, sd_ble_opt_get(uint32_t opt_id, ble_opt_t *p_opt)); ++ ++/** @} */ ++#ifdef __cplusplus ++} ++#endif ++#endif /* BLE_H__ */ ++ ++/** ++ @} ++ @} ++*/ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_err.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_err.h +new file mode 100644 +index 0000000..9e70176 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_err.h +@@ -0,0 +1,90 @@ ++/* ++ * Copyright (c) Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form must reproduce the above copyright notice, this ++ * list of conditions and the following disclaimer in the documentation and/or ++ * other materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other ++ * contributors to this software may be used to endorse or promote products ++ * derived from this software without specific prior written permission. ++ * ++ * 4. This software must only be used in a processor manufactured by Nordic ++ * Semiconductor ASA, or in a processor manufactured by a third party that ++ * is used in combination with a processor manufactured by Nordic Semiconductor. ++ * ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ++ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ++ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ * ++ */ ++ ++/** ++ @addtogroup BLE_COMMON ++ @{ ++ @addtogroup nrf_error ++ @{ ++ @ingroup BLE_COMMON ++ @} ++ ++ @defgroup ble_err General error codes ++ @{ ++ ++ @brief General error code definitions for the BLE API. ++ ++ @ingroup BLE_COMMON ++*/ ++#ifndef NRF_BLE_ERR_H__ ++#define NRF_BLE_ERR_H__ ++ ++#include "nrf_error.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/* @defgroup BLE_ERRORS Error Codes ++ * @{ */ ++#define BLE_ERROR_NOT_ENABLED (NRF_ERROR_STK_BASE_NUM+0x001) /**< @ref sd_ble_enable has not been called. */ ++#define BLE_ERROR_INVALID_CONN_HANDLE (NRF_ERROR_STK_BASE_NUM+0x002) /**< Invalid connection handle. */ ++#define BLE_ERROR_INVALID_ATTR_HANDLE (NRF_ERROR_STK_BASE_NUM+0x003) /**< Invalid attribute handle. */ ++#define BLE_ERROR_NO_TX_PACKETS (NRF_ERROR_STK_BASE_NUM+0x004) /**< Not enough application packets available on this connection. */ ++#define BLE_ERROR_INVALID_ROLE (NRF_ERROR_STK_BASE_NUM+0x005) /**< Invalid role. */ ++/** @} */ ++ ++ ++/** @defgroup BLE_ERROR_SUBRANGES Module specific error code subranges ++ * @brief Assignment of subranges for module specific error codes. ++ * @note For specific error codes, see ble_.h or ble_error_.h. ++ * @{ */ ++#define NRF_L2CAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x100) /**< L2CAP specific errors. */ ++#define NRF_GAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x200) /**< GAP specific errors. */ ++#define NRF_GATTC_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x300) /**< GATT client specific errors. */ ++#define NRF_GATTS_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x400) /**< GATT server specific errors. */ ++/** @} */ ++ ++#ifdef __cplusplus ++} ++#endif ++#endif ++ ++ ++/** ++ @} ++ @} ++*/ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_gap.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_gap.h +new file mode 100644 +index 0000000..54a33f0 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_gap.h +@@ -0,0 +1,1917 @@ ++/* ++ * Copyright (c) Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form must reproduce the above copyright notice, this ++ * list of conditions and the following disclaimer in the documentation and/or ++ * other materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other ++ * contributors to this software may be used to endorse or promote products ++ * derived from this software without specific prior written permission. ++ * ++ * 4. This software must only be used in a processor manufactured by Nordic ++ * Semiconductor ASA, or in a processor manufactured by a third party that ++ * is used in combination with a processor manufactured by Nordic Semiconductor. ++ * ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ++ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ++ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ * ++ */ ++ ++/** ++ @addtogroup BLE_GAP Generic Access Profile (GAP) ++ @{ ++ @brief Definitions and prototypes for the GAP interface. ++ */ ++ ++#ifndef BLE_GAP_H__ ++#define BLE_GAP_H__ ++ ++#include "ble_types.h" ++#include "ble_ranges.h" ++#include "nrf_svc.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/**@addtogroup BLE_GAP_ENUMERATIONS Enumerations ++ * @{ */ ++ ++/**@brief GAP API SVC numbers. ++ */ ++enum BLE_GAP_SVCS ++{ ++ SD_BLE_GAP_ADDR_SET = BLE_GAP_SVC_BASE, /**< Set own Bluetooth Address. */ ++ SD_BLE_GAP_ADDR_GET, /**< Get own Bluetooth Address. */ ++ SD_BLE_GAP_WHITELIST_SET, /**< Set active whitelist. */ ++ SD_BLE_GAP_DEVICE_IDENTITIES_SET, /**< Set device identity list. */ ++ SD_BLE_GAP_PRIVACY_SET, /**< Set Privacy settings*/ ++ SD_BLE_GAP_PRIVACY_GET, /**< Get Privacy settings*/ ++ SD_BLE_GAP_ADV_DATA_SET, /**< Set Advertising Data. */ ++ SD_BLE_GAP_ADV_START, /**< Start Advertising. */ ++ SD_BLE_GAP_ADV_STOP, /**< Stop Advertising. */ ++ SD_BLE_GAP_CONN_PARAM_UPDATE, /**< Connection Parameter Update. */ ++ SD_BLE_GAP_DISCONNECT, /**< Disconnect. */ ++ SD_BLE_GAP_TX_POWER_SET, /**< Set TX Power. */ ++ SD_BLE_GAP_APPEARANCE_SET, /**< Set Appearance. */ ++ SD_BLE_GAP_APPEARANCE_GET, /**< Get Appearance. */ ++ SD_BLE_GAP_PPCP_SET, /**< Set PPCP. */ ++ SD_BLE_GAP_PPCP_GET, /**< Get PPCP. */ ++ SD_BLE_GAP_DEVICE_NAME_SET, /**< Set Device Name. */ ++ SD_BLE_GAP_DEVICE_NAME_GET, /**< Get Device Name. */ ++ SD_BLE_GAP_AUTHENTICATE, /**< Initiate Pairing/Bonding. */ ++ SD_BLE_GAP_SEC_PARAMS_REPLY, /**< Reply with Security Parameters. */ ++ SD_BLE_GAP_AUTH_KEY_REPLY, /**< Reply with an authentication key. */ ++ SD_BLE_GAP_LESC_DHKEY_REPLY, /**< Reply with an LE Secure Connections DHKey. */ ++ SD_BLE_GAP_KEYPRESS_NOTIFY, /**< Notify of a keypress during an authentication procedure. */ ++ SD_BLE_GAP_LESC_OOB_DATA_GET, /**< Get the local LE Secure Connections OOB data. */ ++ SD_BLE_GAP_LESC_OOB_DATA_SET, /**< Set the remote LE Secure Connections OOB data. */ ++ SD_BLE_GAP_ENCRYPT, /**< Initiate encryption procedure. */ ++ SD_BLE_GAP_SEC_INFO_REPLY, /**< Reply with Security Information. */ ++ SD_BLE_GAP_CONN_SEC_GET, /**< Obtain connection security level. */ ++ SD_BLE_GAP_RSSI_START, /**< Start reporting of changes in RSSI. */ ++ SD_BLE_GAP_RSSI_STOP, /**< Stop reporting of changes in RSSI. */ ++ SD_BLE_GAP_SCAN_START, /**< Start Scanning. */ ++ SD_BLE_GAP_SCAN_STOP, /**< Stop Scanning. */ ++ SD_BLE_GAP_CONNECT, /**< Connect. */ ++ SD_BLE_GAP_CONNECT_CANCEL, /**< Cancel ongoing connection procedure. */ ++ SD_BLE_GAP_RSSI_GET, /**< Get the last RSSI sample. */ ++}; ++ ++/**@brief GAP Event IDs. ++ * IDs that uniquely identify an event coming from the stack to the application. ++ */ ++enum BLE_GAP_EVTS ++{ ++ BLE_GAP_EVT_CONNECTED = BLE_GAP_EVT_BASE, /**< Connection established. \n See @ref ble_gap_evt_connected_t. */ ++ BLE_GAP_EVT_DISCONNECTED, /**< Disconnected from peer. \n See @ref ble_gap_evt_disconnected_t. */ ++ BLE_GAP_EVT_CONN_PARAM_UPDATE, /**< Connection Parameters updated. \n See @ref ble_gap_evt_conn_param_update_t. */ ++ BLE_GAP_EVT_SEC_PARAMS_REQUEST, /**< Request to provide security parameters. \n Reply with @ref sd_ble_gap_sec_params_reply. \n See @ref ble_gap_evt_sec_params_request_t. */ ++ BLE_GAP_EVT_SEC_INFO_REQUEST, /**< Request to provide security information. \n Reply with @ref sd_ble_gap_sec_info_reply. \n See @ref ble_gap_evt_sec_info_request_t. */ ++ BLE_GAP_EVT_PASSKEY_DISPLAY, /**< Request to display a passkey to the user. \n In LESC Numeric Comparison, reply with @ref sd_ble_gap_auth_key_reply. \n See @ref ble_gap_evt_passkey_display_t. */ ++ BLE_GAP_EVT_KEY_PRESSED, /**< Notification of a keypress on the remote device.\n See @ref ble_gap_evt_key_pressed_t */ ++ BLE_GAP_EVT_AUTH_KEY_REQUEST, /**< Request to provide an authentication key. \n Reply with @ref sd_ble_gap_auth_key_reply. \n See @ref ble_gap_evt_auth_key_request_t. */ ++ BLE_GAP_EVT_LESC_DHKEY_REQUEST, /**< Request to calculate an LE Secure Connections DHKey. \n Reply with @ref sd_ble_gap_lesc_dhkey_reply. \n See @ref ble_gap_evt_lesc_dhkey_request_t */ ++ BLE_GAP_EVT_AUTH_STATUS, /**< Authentication procedure completed with status. \n See @ref ble_gap_evt_auth_status_t. */ ++ BLE_GAP_EVT_CONN_SEC_UPDATE, /**< Connection security updated. \n See @ref ble_gap_evt_conn_sec_update_t. */ ++ BLE_GAP_EVT_TIMEOUT, /**< Timeout expired. \n See @ref ble_gap_evt_timeout_t. */ ++ BLE_GAP_EVT_RSSI_CHANGED, /**< RSSI report. \n See @ref ble_gap_evt_rssi_changed_t. */ ++ BLE_GAP_EVT_ADV_REPORT, /**< Advertising report. \n See @ref ble_gap_evt_adv_report_t. */ ++ BLE_GAP_EVT_SEC_REQUEST, /**< Security Request. \n See @ref ble_gap_evt_sec_request_t. */ ++ BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST, /**< Connection Parameter Update Request. \n Reply with @ref sd_ble_gap_conn_param_update. \n See @ref ble_gap_evt_conn_param_update_request_t. */ ++ BLE_GAP_EVT_SCAN_REQ_REPORT, /**< Scan request report. \n See @ref ble_gap_evt_scan_req_report_t. */ ++}; ++ ++/**@brief GAP Option IDs. ++ * IDs that uniquely identify a GAP option. ++ */ ++enum BLE_GAP_OPTS ++{ ++ BLE_GAP_OPT_CH_MAP = BLE_GAP_OPT_BASE, /**< Channel Map. @ref ble_gap_opt_ch_map_t */ ++ BLE_GAP_OPT_LOCAL_CONN_LATENCY, /**< Local connection latency. @ref ble_gap_opt_local_conn_latency_t */ ++ BLE_GAP_OPT_PASSKEY, /**< Set passkey. @ref ble_gap_opt_passkey_t */ ++ BLE_GAP_OPT_SCAN_REQ_REPORT, /**< Scan request report. @ref ble_gap_opt_scan_req_report_t */ ++ BLE_GAP_OPT_COMPAT_MODE, /**< Compatibility mode. @ref ble_gap_opt_compat_mode_t */ ++ BLE_GAP_OPT_AUTH_PAYLOAD_TIMEOUT, /**< Set Authenticated payload timeout. @ref ble_gap_opt_auth_payload_timeout_t */ ++ BLE_GAP_OPT_EXT_LEN, /**< Extended length packets. @ref ble_gap_opt_ext_len_t */ ++}; ++ ++/** @} */ ++ ++/**@addtogroup BLE_GAP_DEFINES Defines ++ * @{ */ ++ ++/**@defgroup BLE_ERRORS_GAP SVC return values specific to GAP ++ * @{ */ ++#define BLE_ERROR_GAP_UUID_LIST_MISMATCH (NRF_GAP_ERR_BASE + 0x000) /**< UUID list does not contain an integral number of UUIDs. */ ++#define BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST (NRF_GAP_ERR_BASE + 0x001) /**< Use of Whitelist not permitted with discoverable advertising. */ ++#define BLE_ERROR_GAP_INVALID_BLE_ADDR (NRF_GAP_ERR_BASE + 0x002) /**< The upper two bits of the address do not correspond to the specified address type. */ ++#define BLE_ERROR_GAP_WHITELIST_IN_USE (NRF_GAP_ERR_BASE + 0x003) /**< Attempt to modify the whitelist while already in use by another operation. */ ++#define BLE_ERROR_GAP_DEVICE_IDENTITIES_IN_USE (NRF_GAP_ERR_BASE + 0x004) /**< Attempt to modify the device identity list while already in use by another operation. */ ++#define BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE (NRF_GAP_ERR_BASE + 0x005) /**< The device identity list contains entries with duplicate identity addresses. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_ROLES GAP Roles ++ * @note Not explicitly used in peripheral API, but will be relevant for central API. ++ * @{ */ ++#define BLE_GAP_ROLE_INVALID 0x0 /**< Invalid Role. */ ++#define BLE_GAP_ROLE_PERIPH 0x1 /**< Peripheral Role. */ ++#define BLE_GAP_ROLE_CENTRAL 0x2 /**< Central Role. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_TIMEOUT_SOURCES GAP Timeout sources ++ * @{ */ ++#define BLE_GAP_TIMEOUT_SRC_ADVERTISING 0x00 /**< Advertising timeout. */ ++#define BLE_GAP_TIMEOUT_SRC_SECURITY_REQUEST 0x01 /**< Security request timeout. */ ++#define BLE_GAP_TIMEOUT_SRC_SCAN 0x02 /**< Scanning timeout. */ ++#define BLE_GAP_TIMEOUT_SRC_CONN 0x03 /**< Connection timeout. */ ++#define BLE_GAP_TIMEOUT_SRC_AUTH_PAYLOAD 0x04 /**< Authenticated payload timeout. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_ADDR_TYPES GAP Address types ++ * @{ */ ++#define BLE_GAP_ADDR_TYPE_PUBLIC 0x00 /**< Public address. */ ++#define BLE_GAP_ADDR_TYPE_RANDOM_STATIC 0x01 /**< Random static address. */ ++#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE 0x02 /**< Random private resolvable address. */ ++#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE 0x03 /**< Random private non-resolvable address. */ ++/**@} */ ++ ++ ++/**@brief The default interval in seconds at which a private address is refreshed. */ ++#define BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S (900) /* 15 minutes. */ ++/**@brief The maximum interval in seconds at which a private address can be refreshed. */ ++#define BLE_GAP_MAX_PRIVATE_ADDR_CYCLE_INTERVAL_S (41400) /* 11 hours 30 minutes. */ ++ ++ ++/** @brief BLE address length. */ ++#define BLE_GAP_ADDR_LEN (6) ++ ++ ++/**@defgroup BLE_GAP_PRIVACY_MODES Privacy modes ++ * @{ */ ++#define BLE_GAP_PRIVACY_MODE_OFF 0x00 /**< Device will send and accept its identity address for its own address. */ ++#define BLE_GAP_PRIVACY_MODE_DEVICE_PRIVACY 0x01 /**< Device will send and accept only private addresses for its own address. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_AD_TYPE_DEFINITIONS GAP Advertising and Scan Response Data format ++ * @note Found at https://www.bluetooth.org/Technical/AssignedNumbers/generic_access_profile.htm ++ * @{ */ ++#define BLE_GAP_AD_TYPE_FLAGS 0x01 /**< Flags for discoverability. */ ++#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE 0x02 /**< Partial list of 16 bit service UUIDs. */ ++#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE 0x03 /**< Complete list of 16 bit service UUIDs. */ ++#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_MORE_AVAILABLE 0x04 /**< Partial list of 32 bit service UUIDs. */ ++#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_COMPLETE 0x05 /**< Complete list of 32 bit service UUIDs. */ ++#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_MORE_AVAILABLE 0x06 /**< Partial list of 128 bit service UUIDs. */ ++#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_COMPLETE 0x07 /**< Complete list of 128 bit service UUIDs. */ ++#define BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME 0x08 /**< Short local device name. */ ++#define BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME 0x09 /**< Complete local device name. */ ++#define BLE_GAP_AD_TYPE_TX_POWER_LEVEL 0x0A /**< Transmit power level. */ ++#define BLE_GAP_AD_TYPE_CLASS_OF_DEVICE 0x0D /**< Class of device. */ ++#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C 0x0E /**< Simple Pairing Hash C. */ ++#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R 0x0F /**< Simple Pairing Randomizer R. */ ++#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_TK_VALUE 0x10 /**< Security Manager TK Value. */ ++#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_OOB_FLAGS 0x11 /**< Security Manager Out Of Band Flags. */ ++#define BLE_GAP_AD_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE 0x12 /**< Slave Connection Interval Range. */ ++#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_16BIT 0x14 /**< List of 16-bit Service Solicitation UUIDs. */ ++#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_128BIT 0x15 /**< List of 128-bit Service Solicitation UUIDs. */ ++#define BLE_GAP_AD_TYPE_SERVICE_DATA 0x16 /**< Service Data - 16-bit UUID. */ ++#define BLE_GAP_AD_TYPE_PUBLIC_TARGET_ADDRESS 0x17 /**< Public Target Address. */ ++#define BLE_GAP_AD_TYPE_RANDOM_TARGET_ADDRESS 0x18 /**< Random Target Address. */ ++#define BLE_GAP_AD_TYPE_APPEARANCE 0x19 /**< Appearance. */ ++#define BLE_GAP_AD_TYPE_ADVERTISING_INTERVAL 0x1A /**< Advertising Interval. */ ++#define BLE_GAP_AD_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS 0x1B /**< LE Bluetooth Device Address. */ ++#define BLE_GAP_AD_TYPE_LE_ROLE 0x1C /**< LE Role. */ ++#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C256 0x1D /**< Simple Pairing Hash C-256. */ ++#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R256 0x1E /**< Simple Pairing Randomizer R-256. */ ++#define BLE_GAP_AD_TYPE_SERVICE_DATA_32BIT_UUID 0x20 /**< Service Data - 32-bit UUID. */ ++#define BLE_GAP_AD_TYPE_SERVICE_DATA_128BIT_UUID 0x21 /**< Service Data - 128-bit UUID. */ ++#define BLE_GAP_AD_TYPE_URI 0x24 /**< URI */ ++#define BLE_GAP_AD_TYPE_3D_INFORMATION_DATA 0x3D /**< 3D Information Data. */ ++#define BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA 0xFF /**< Manufacturer Specific Data. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_ADV_FLAGS GAP Advertisement Flags ++ * @{ */ ++#define BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE (0x01) /**< LE Limited Discoverable Mode. */ ++#define BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE (0x02) /**< LE General Discoverable Mode. */ ++#define BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED (0x04) /**< BR/EDR not supported. */ ++#define BLE_GAP_ADV_FLAG_LE_BR_EDR_CONTROLLER (0x08) /**< Simultaneous LE and BR/EDR, Controller. */ ++#define BLE_GAP_ADV_FLAG_LE_BR_EDR_HOST (0x10) /**< Simultaneous LE and BR/EDR, Host. */ ++#define BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE (BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE Limited Discoverable Mode, BR/EDR not supported. */ ++#define BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE (BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE General Discoverable Mode, BR/EDR not supported. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_ADV_INTERVALS GAP Advertising interval max and min ++ * @{ */ ++#define BLE_GAP_ADV_INTERVAL_MIN 0x0020 /**< Minimum Advertising interval in 625 us units, i.e. 20 ms. */ ++#define BLE_GAP_ADV_NONCON_INTERVAL_MIN 0x00A0 /**< Minimum Advertising interval in 625 us units for non connectable mode, i.e. 100 ms. */ ++#define BLE_GAP_ADV_INTERVAL_MAX 0x4000 /**< Maximum Advertising interval in 625 us units, i.e. 10.24 s. */ ++ /**@} */ ++ ++ ++/**@defgroup BLE_GAP_SCAN_INTERVALS GAP Scan interval max and min ++ * @{ */ ++#define BLE_GAP_SCAN_INTERVAL_MIN 0x0004 /**< Minimum Scan interval in 625 us units, i.e. 2.5 ms. */ ++#define BLE_GAP_SCAN_INTERVAL_MAX 0x4000 /**< Maximum Scan interval in 625 us units, i.e. 10.24 s. */ ++ /** @} */ ++ ++ ++/**@defgroup BLE_GAP_SCAN_WINDOW GAP Scan window max and min ++ * @{ */ ++#define BLE_GAP_SCAN_WINDOW_MIN 0x0004 /**< Minimum Scan window in 625 us units, i.e. 2.5 ms. */ ++#define BLE_GAP_SCAN_WINDOW_MAX 0x4000 /**< Maximum Scan window in 625 us units, i.e. 10.24 s. */ ++ /** @} */ ++ ++ ++/**@defgroup BLE_GAP_SCAN_TIMEOUT GAP Scan timeout max and min ++ * @{ */ ++#define BLE_GAP_SCAN_TIMEOUT_MIN 0x0001 /**< Minimum Scan timeout in seconds. */ ++#define BLE_GAP_SCAN_TIMEOUT_MAX 0xFFFF /**< Maximum Scan timeout in seconds. */ ++ /** @} */ ++ ++ ++/**@brief Maximum size of advertising data in octets. */ ++#define BLE_GAP_ADV_MAX_SIZE (31) ++ ++ ++/**@defgroup BLE_GAP_ADV_TYPES GAP Advertising types ++ * @{ */ ++#define BLE_GAP_ADV_TYPE_ADV_IND 0x00 /**< Connectable undirected. */ ++#define BLE_GAP_ADV_TYPE_ADV_DIRECT_IND 0x01 /**< Connectable directed. */ ++#define BLE_GAP_ADV_TYPE_ADV_SCAN_IND 0x02 /**< Scannable undirected. */ ++#define BLE_GAP_ADV_TYPE_ADV_NONCONN_IND 0x03 /**< Non connectable undirected. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_ADV_FILTER_POLICIES GAP Advertising filter policies ++ * @{ */ ++#define BLE_GAP_ADV_FP_ANY 0x00 /**< Allow scan requests and connect requests from any device. */ ++#define BLE_GAP_ADV_FP_FILTER_SCANREQ 0x01 /**< Filter scan requests with whitelist. */ ++#define BLE_GAP_ADV_FP_FILTER_CONNREQ 0x02 /**< Filter connect requests with whitelist. */ ++#define BLE_GAP_ADV_FP_FILTER_BOTH 0x03 /**< Filter both scan and connect requests with whitelist. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_ADV_TIMEOUT_VALUES GAP Advertising timeout values ++ * @{ */ ++#define BLE_GAP_ADV_TIMEOUT_LIMITED_MAX (180) /**< Maximum advertising time in limited discoverable mode (TGAP(lim_adv_timeout) = 180s). */ ++#define BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED (0) /**< Unlimited advertising in general discoverable mode. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_DISC_MODES GAP Discovery modes ++ * @{ */ ++#define BLE_GAP_DISC_MODE_NOT_DISCOVERABLE 0x00 /**< Not discoverable discovery Mode. */ ++#define BLE_GAP_DISC_MODE_LIMITED 0x01 /**< Limited Discovery Mode. */ ++#define BLE_GAP_DISC_MODE_GENERAL 0x02 /**< General Discovery Mode. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_IO_CAPS GAP IO Capabilities ++ * @{ */ ++#define BLE_GAP_IO_CAPS_DISPLAY_ONLY 0x00 /**< Display Only. */ ++#define BLE_GAP_IO_CAPS_DISPLAY_YESNO 0x01 /**< Display and Yes/No entry. */ ++#define BLE_GAP_IO_CAPS_KEYBOARD_ONLY 0x02 /**< Keyboard Only. */ ++#define BLE_GAP_IO_CAPS_NONE 0x03 /**< No I/O capabilities. */ ++#define BLE_GAP_IO_CAPS_KEYBOARD_DISPLAY 0x04 /**< Keyboard and Display. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_AUTH_KEY_TYPES GAP Authentication Key Types ++ * @{ */ ++#define BLE_GAP_AUTH_KEY_TYPE_NONE 0x00 /**< No key (may be used to reject). */ ++#define BLE_GAP_AUTH_KEY_TYPE_PASSKEY 0x01 /**< 6-digit Passkey. */ ++#define BLE_GAP_AUTH_KEY_TYPE_OOB 0x02 /**< Out Of Band data. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_KP_NOT_TYPES GAP Keypress Notification Types ++ * @{ */ ++#define BLE_GAP_KP_NOT_TYPE_PASSKEY_START 0x00 /**< Passkey entry started. */ ++#define BLE_GAP_KP_NOT_TYPE_PASSKEY_DIGIT_IN 0x01 /**< Passkey digit entered. */ ++#define BLE_GAP_KP_NOT_TYPE_PASSKEY_DIGIT_OUT 0x02 /**< Passkey digit erased. */ ++#define BLE_GAP_KP_NOT_TYPE_PASSKEY_CLEAR 0x03 /**< Passkey cleared. */ ++#define BLE_GAP_KP_NOT_TYPE_PASSKEY_END 0x04 /**< Passkey entry completed. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_SEC_STATUS GAP Security status ++ * @{ */ ++#define BLE_GAP_SEC_STATUS_SUCCESS 0x00 /**< Procedure completed with success. */ ++#define BLE_GAP_SEC_STATUS_TIMEOUT 0x01 /**< Procedure timed out. */ ++#define BLE_GAP_SEC_STATUS_PDU_INVALID 0x02 /**< Invalid PDU received. */ ++#define BLE_GAP_SEC_STATUS_RFU_RANGE1_BEGIN 0x03 /**< Reserved for Future Use range #1 begin. */ ++#define BLE_GAP_SEC_STATUS_RFU_RANGE1_END 0x80 /**< Reserved for Future Use range #1 end. */ ++#define BLE_GAP_SEC_STATUS_PASSKEY_ENTRY_FAILED 0x81 /**< Passkey entry failed (user cancelled or other). */ ++#define BLE_GAP_SEC_STATUS_OOB_NOT_AVAILABLE 0x82 /**< Out of Band Key not available. */ ++#define BLE_GAP_SEC_STATUS_AUTH_REQ 0x83 /**< Authentication requirements not met. */ ++#define BLE_GAP_SEC_STATUS_CONFIRM_VALUE 0x84 /**< Confirm value failed. */ ++#define BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP 0x85 /**< Pairing not supported. */ ++#define BLE_GAP_SEC_STATUS_ENC_KEY_SIZE 0x86 /**< Encryption key size. */ ++#define BLE_GAP_SEC_STATUS_SMP_CMD_UNSUPPORTED 0x87 /**< Unsupported SMP command. */ ++#define BLE_GAP_SEC_STATUS_UNSPECIFIED 0x88 /**< Unspecified reason. */ ++#define BLE_GAP_SEC_STATUS_REPEATED_ATTEMPTS 0x89 /**< Too little time elapsed since last attempt. */ ++#define BLE_GAP_SEC_STATUS_INVALID_PARAMS 0x8A /**< Invalid parameters. */ ++#define BLE_GAP_SEC_STATUS_DHKEY_FAILURE 0x8B /**< DHKey check failure. */ ++#define BLE_GAP_SEC_STATUS_NUM_COMP_FAILURE 0x8C /**< Numeric Comparison failure. */ ++#define BLE_GAP_SEC_STATUS_BR_EDR_IN_PROG 0x8D /**< BR/EDR pairing in progress. */ ++#define BLE_GAP_SEC_STATUS_X_TRANS_KEY_DISALLOWED 0x8E /**< BR/EDR Link Key cannot be used for LE keys. */ ++#define BLE_GAP_SEC_STATUS_RFU_RANGE2_BEGIN 0x8F /**< Reserved for Future Use range #2 begin. */ ++#define BLE_GAP_SEC_STATUS_RFU_RANGE2_END 0xFF /**< Reserved for Future Use range #2 end. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_SEC_STATUS_SOURCES GAP Security status sources ++ * @{ */ ++#define BLE_GAP_SEC_STATUS_SOURCE_LOCAL 0x00 /**< Local failure. */ ++#define BLE_GAP_SEC_STATUS_SOURCE_REMOTE 0x01 /**< Remote failure. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_CP_LIMITS GAP Connection Parameters Limits ++ * @{ */ ++#define BLE_GAP_CP_MIN_CONN_INTVL_NONE 0xFFFF /**< No new minimum connection interval specified in connect parameters. */ ++#define BLE_GAP_CP_MIN_CONN_INTVL_MIN 0x0006 /**< Lowest minimum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ ++#define BLE_GAP_CP_MIN_CONN_INTVL_MAX 0x0C80 /**< Highest minimum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ ++#define BLE_GAP_CP_MAX_CONN_INTVL_NONE 0xFFFF /**< No new maximum connection interval specified in connect parameters. */ ++#define BLE_GAP_CP_MAX_CONN_INTVL_MIN 0x0006 /**< Lowest maximum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ ++#define BLE_GAP_CP_MAX_CONN_INTVL_MAX 0x0C80 /**< Highest maximum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ ++#define BLE_GAP_CP_SLAVE_LATENCY_MAX 0x01F3 /**< Highest slave latency permitted, in connection events. */ ++#define BLE_GAP_CP_CONN_SUP_TIMEOUT_NONE 0xFFFF /**< No new supervision timeout specified in connect parameters. */ ++#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MIN 0x000A /**< Lowest supervision timeout permitted, in units of 10 ms, i.e. 100 ms. */ ++#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MAX 0x0C80 /**< Highest supervision timeout permitted, in units of 10 ms, i.e. 32 s. */ ++/**@} */ ++ ++ ++/**@brief GAP device name defines. */ ++#define BLE_GAP_DEVNAME_DEFAULT "nRF5x" /**< Default device name value. */ ++#define BLE_GAP_DEVNAME_DEFAULT_LEN 31 /**< Default number of octets in device name. */ ++#define BLE_GAP_DEVNAME_MAX_LEN 248 /**< Maximum number of octets in device name. */ ++ ++ ++/**@brief Disable RSSI events for connections */ ++#define BLE_GAP_RSSI_THRESHOLD_INVALID 0xFF ++ ++ ++/**@defgroup BLE_GAP_CONN_SEC_MODE_SET_MACROS GAP attribute security requirement setters ++ * ++ * See @ref ble_gap_conn_sec_mode_t. ++ * @{ */ ++/**@brief Set sec_mode pointed to by ptr to have no access rights.*/ ++#define BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(ptr) do {(ptr)->sm = 0; (ptr)->lv = 0;} while (0) ++/**@brief Set sec_mode pointed to by ptr to require no protection, open link.*/ ++#define BLE_GAP_CONN_SEC_MODE_SET_OPEN(ptr) do {(ptr)->sm = 1; (ptr)->lv = 1;} while (0) ++/**@brief Set sec_mode pointed to by ptr to require encryption, but no MITM protection.*/ ++#define BLE_GAP_CONN_SEC_MODE_SET_ENC_NO_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 2;} while (0) ++/**@brief Set sec_mode pointed to by ptr to require encryption and MITM protection.*/ ++#define BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 3;} while (0) ++/**@brief Set sec_mode pointed to by ptr to require LESC encryption and MITM protection.*/ ++#define BLE_GAP_CONN_SEC_MODE_SET_LESC_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 4;} while (0) ++/**@brief Set sec_mode pointed to by ptr to require signing or encryption, no MITM protection needed.*/ ++#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_NO_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 1;} while (0) ++/**@brief Set sec_mode pointed to by ptr to require signing or encryption with MITM protection.*/ ++#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_WITH_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 2;} while (0) ++/**@} */ ++ ++ ++/**@brief GAP Security Random Number Length. */ ++#define BLE_GAP_SEC_RAND_LEN 8 ++ ++ ++/**@brief GAP Security Key Length. */ ++#define BLE_GAP_SEC_KEY_LEN 16 ++ ++ ++/**@brief GAP LE Secure Connections Elliptic Curve Diffie-Hellman P-256 Public Key Length. */ ++#define BLE_GAP_LESC_P256_PK_LEN 64 ++ ++ ++/**@brief GAP LE Secure Connections Elliptic Curve Diffie-Hellman DHKey Length. */ ++#define BLE_GAP_LESC_DHKEY_LEN 32 ++ ++ ++/**@brief GAP Passkey Length. */ ++#define BLE_GAP_PASSKEY_LEN 6 ++ ++ ++/**@brief Maximum amount of addresses in the whitelist. */ ++#define BLE_GAP_WHITELIST_ADDR_MAX_COUNT (8) ++ ++ ++/**@brief Maximum amount of identities in the device identities list. */ ++#define BLE_GAP_DEVICE_IDENTITIES_MAX_COUNT (8) ++ ++ ++/**@defgroup GAP_SEC_MODES GAP Security Modes ++ * @{ */ ++#define BLE_GAP_SEC_MODE 0x00 /**< No key (may be used to reject). */ ++/**@} */ ++/** @} */ ++ ++ ++/**@addtogroup BLE_GAP_STRUCTURES Structures ++ * @{ */ ++ ++/**@brief Bluetooth Low Energy address. */ ++typedef struct ++{ ++ uint8_t addr_id_peer : 1; /**< Only valid for peer addresses. ++ Reference to peer in device identities list (as set with @ref sd_ble_gap_device_identities_set) when peer is using privacy. */ ++ uint8_t addr_type : 7; /**< See @ref BLE_GAP_ADDR_TYPES. */ ++ uint8_t addr[BLE_GAP_ADDR_LEN]; /**< 48-bit address, LSB format. */ ++} ble_gap_addr_t; ++ ++ ++/**@brief GAP connection parameters. ++ * ++ * @note When ble_conn_params_t is received in an event, both min_conn_interval and ++ * max_conn_interval will be equal to the connection interval set by the central. ++ * ++ * @note If both conn_sup_timeout and max_conn_interval are specified, then the following constraint applies: ++ * conn_sup_timeout * 4 > (1 + slave_latency) * max_conn_interval ++ * that corresponds to the following Bluetooth Spec requirement: ++ * The Supervision_Timeout in milliseconds shall be larger than ++ * (1 + Conn_Latency) * Conn_Interval_Max * 2, where Conn_Interval_Max is given in milliseconds. ++ */ ++typedef struct ++{ ++ uint16_t min_conn_interval; /**< Minimum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ ++ uint16_t max_conn_interval; /**< Maximum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ ++ uint16_t slave_latency; /**< Slave Latency in number of connection events, see @ref BLE_GAP_CP_LIMITS.*/ ++ uint16_t conn_sup_timeout; /**< Connection Supervision Timeout in 10 ms units, see @ref BLE_GAP_CP_LIMITS.*/ ++} ble_gap_conn_params_t; ++ ++ ++/**@brief GAP connection security modes. ++ * ++ * Security Mode 0 Level 0: No access permissions at all (this level is not defined by the Bluetooth Core specification).\n ++ * Security Mode 1 Level 1: No security is needed (aka open link).\n ++ * Security Mode 1 Level 2: Encrypted link required, MITM protection not necessary.\n ++ * Security Mode 1 Level 3: MITM protected encrypted link required.\n ++ * Security Mode 1 Level 4: LESC MITM protected encrypted link required.\n ++ * Security Mode 2 Level 1: Signing or encryption required, MITM protection not necessary.\n ++ * Security Mode 2 Level 2: MITM protected signing required, unless link is MITM protected encrypted.\n ++ */ ++typedef struct ++{ ++ uint8_t sm : 4; /**< Security Mode (1 or 2), 0 for no permissions at all. */ ++ uint8_t lv : 4; /**< Level (1, 2, 3 or 4), 0 for no permissions at all. */ ++ ++} ble_gap_conn_sec_mode_t; ++ ++ ++/**@brief GAP connection security status.*/ ++typedef struct ++{ ++ ble_gap_conn_sec_mode_t sec_mode; /**< Currently active security mode for this connection.*/ ++ uint8_t encr_key_size; /**< Length of currently active encryption key, 7 to 16 octets (only applicable for bonding procedures). */ ++} ble_gap_conn_sec_t; ++ ++ ++/** ++ * @brief Device name and its properties ++ * @note If @ref max_len is more than @ref BLE_GAP_DEVNAME_DEFAULT_LEN and vloc is set to @ref BLE_GATTS_VLOC_STACK, the attribute table size must be increased to have room for the longer device name (see @ref ble_gatts_enable_params_t). ++ */ ++typedef struct ++{ ++ ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ ++ uint8_t vloc:2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ ++ uint8_t *p_value; /**< Pointer to where the value (device name) is stored or will be stored.*/ ++ uint16_t current_len; /**< Current length in bytes of the memory pointed to by p_value.*/ ++ uint16_t max_len; /**< Maximum length in bytes of the memory pointed to by p_value.*/ ++} ble_gap_device_name_t; ++ ++ ++/** ++ * @brief BLE GAP initialization parameters. ++ */ ++typedef struct ++{ ++ uint8_t periph_conn_count; /**< Number of connections acting as a peripheral */ ++ uint8_t central_conn_count; /**< Number of connections acting as a central */ ++ uint8_t central_sec_count; /**< Number of SMP instances for all connections acting as a central. */ ++ ble_gap_device_name_t const *p_device_name; /**< Pointer to device name instance. If NULL, @ref sd_ble_enable() will set the device name to @ref BLE_GAP_DEVNAME_DEFAULT. */ ++} ble_gap_enable_params_t; ++ ++ ++/**@brief Identity Resolving Key. */ ++typedef struct ++{ ++ uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Array containing IRK. */ ++} ble_gap_irk_t; ++ ++ ++/**@brief Channel mask for RF channels used in advertising. */ ++typedef struct ++{ ++ uint8_t ch_37_off : 1; /**< Setting this bit to 1 will turn off advertising on channel 37 */ ++ uint8_t ch_38_off : 1; /**< Setting this bit to 1 will turn off advertising on channel 38 */ ++ uint8_t ch_39_off : 1; /**< Setting this bit to 1 will turn off advertising on channel 39 */ ++} ble_gap_adv_ch_mask_t; ++ ++ ++/**@brief GAP advertising parameters. */ ++typedef struct ++{ ++ uint8_t type; /**< See @ref BLE_GAP_ADV_TYPES. */ ++ ble_gap_addr_t const *p_peer_addr; /**< Address of a known peer. ++ - When privacy is enabled and the local device use @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE addresses, the device identity list is searched for a matching ++ entry. If the local IRK for that device identity is set, the local IRK for that device will be used to generate the advertiser address field in the advertise packet. ++ - If type is @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND, this must be set to the targeted initiator. If the initiator is in the device identity list, ++ the peer IRK for that device will be used to generate the initiator address field in the ADV_DIRECT_IND packet. */ ++ uint8_t fp; /**< Filter Policy, see @ref BLE_GAP_ADV_FILTER_POLICIES. */ ++ uint16_t interval; /**< Advertising interval between 0x0020 and 0x4000 in 0.625 ms units (20ms to 10.24s), see @ref BLE_GAP_ADV_INTERVALS. ++ - If type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND, this parameter must be set to 0 for high duty cycle directed advertising. ++ - If type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND, set @ref BLE_GAP_ADV_INTERVAL_MIN <= interval <= @ref BLE_GAP_ADV_INTERVAL_MAX for low duty cycle advertising.*/ ++ uint16_t timeout; /**< Advertising timeout between 0x0001 and 0x3FFF in seconds, 0x0000 disables timeout. See also @ref BLE_GAP_ADV_TIMEOUT_VALUES. If type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND, this parameter must be set to 0 for High duty cycle directed advertising. */ ++ ble_gap_adv_ch_mask_t channel_mask; /**< Advertising channel mask. See @ref ble_gap_adv_ch_mask_t. */ ++} ble_gap_adv_params_t; ++ ++ ++/**@brief GAP scanning parameters. */ ++typedef struct ++{ ++ uint8_t active : 1; /**< If 1, perform active scanning (scan requests). */ ++ uint8_t use_whitelist : 1; /**< If 1, filter advertisers using current active whitelist. */ ++ uint8_t adv_dir_report : 1; /**< If 1, also report directed advertisements where the initiator field is set to a private resolvable address, ++ even if the address did not resolve to an entry in the device identity list. A report will be generated ++ even if the peer is not in the whitelist. */ ++ uint16_t interval; /**< Scan interval between 0x0004 and 0x4000 in 0.625ms units (2.5ms to 10.24s). */ ++ uint16_t window; /**< Scan window between 0x0004 and 0x4000 in 0.625ms units (2.5ms to 10.24s). */ ++ uint16_t timeout; /**< Scan timeout between 0x0001 and 0xFFFF in seconds, 0x0000 disables timeout. */ ++} ble_gap_scan_params_t; ++ ++ ++/**@brief Device Privacy. ++ * ++ * The privacy feature provides a way for the device to avoid being tracked over a period of time. ++ * The privacy feature, when enabled, hides the local device identity and replaces it with a private address ++ * that is automatically refreshed at a specified interval. ++ * ++ * If a device still wants to be recognized by other peers, it needs to share it's Identity Resolving Key (IRK). ++ * With this key, a device can generate a random private address that can only be recognized by peers in possession of that key, ++ * and devices can establish connections without revealing their real identities. ++ * ++ * @note If the device IRK is updated, the new IRK becomes the one to be distributed in all ++ * bonding procedures performed after @ref sd_ble_gap_privacy_set returns. ++ * The IRK distributed during bonding procedure is the device IRK that is active when @ref sd_ble_gap_sec_params_reply is called. ++ */ ++typedef struct ++{ ++ uint8_t privacy_mode; /**< Privacy mode, see @ref BLE_GAP_PRIVACY_MODES. Default is @ref BLE_GAP_PRIVACY_MODE_OFF. */ ++ uint8_t private_addr_type; /**< The private address type must be either @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE or @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE. */ ++ uint16_t private_addr_cycle_s; /**< Private address cycle interval in seconds. Providing an address cycle value of 0 will use the default value defined by @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S. */ ++ ble_gap_irk_t *p_device_irk; /**< When used as input, pointer to IRK structure that will be used as the default IRK. If NULL, the device default IRK will be used. ++ When used as output, pointer to IRK structure where the current default IRK will be written to. If NULL, this argument is ignored. ++ By default, the default IRK is used to generate random private resolvable addresses for the local device unless instructed otherwise. */ ++} ble_gap_privacy_params_t; ++ ++ ++/** @brief Keys that can be exchanged during a bonding procedure. */ ++typedef struct ++{ ++ uint8_t enc : 1; /**< Long Term Key and Master Identification. */ ++ uint8_t id : 1; /**< Identity Resolving Key and Identity Address Information. */ ++ uint8_t sign : 1; /**< Connection Signature Resolving Key. */ ++ uint8_t link : 1; /**< Derive the Link Key from the LTK. */ ++} ble_gap_sec_kdist_t; ++ ++ ++/**@brief GAP security parameters. */ ++typedef struct ++{ ++ uint8_t bond : 1; /**< Perform bonding. */ ++ uint8_t mitm : 1; /**< Enable Man In The Middle protection. */ ++ uint8_t lesc : 1; /**< Enable LE Secure Connection pairing. */ ++ uint8_t keypress : 1; /**< Enable generation of keypress notifications. */ ++ uint8_t io_caps : 3; /**< IO capabilities, see @ref BLE_GAP_IO_CAPS. */ ++ uint8_t oob : 1; /**< Out Of Band data available. */ ++ uint8_t min_key_size; /**< Minimum encryption key size in octets between 7 and 16. If 0 then not applicable in this instance. */ ++ uint8_t max_key_size; /**< Maximum encryption key size in octets between min_key_size and 16. */ ++ ble_gap_sec_kdist_t kdist_own; /**< Key distribution bitmap: keys that the local device will distribute. */ ++ ble_gap_sec_kdist_t kdist_peer; /**< Key distribution bitmap: keys that the remote device will distribute. */ ++} ble_gap_sec_params_t; ++ ++ ++/**@brief GAP Encryption Information. */ ++typedef struct ++{ ++ uint8_t ltk[BLE_GAP_SEC_KEY_LEN]; /**< Long Term Key. */ ++ uint8_t lesc : 1; /**< Key generated using LE Secure Connections. */ ++ uint8_t auth : 1; /**< Authenticated Key. */ ++ uint8_t ltk_len : 6; /**< LTK length in octets. */ ++} ble_gap_enc_info_t; ++ ++ ++/**@brief GAP Master Identification. */ ++typedef struct ++{ ++ uint16_t ediv; /**< Encrypted Diversifier. */ ++ uint8_t rand[BLE_GAP_SEC_RAND_LEN]; /**< Random Number. */ ++} ble_gap_master_id_t; ++ ++ ++/**@brief GAP Signing Information. */ ++typedef struct ++{ ++ uint8_t csrk[BLE_GAP_SEC_KEY_LEN]; /**< Connection Signature Resolving Key. */ ++} ble_gap_sign_info_t; ++ ++ ++/**@brief GAP LE Secure Connections P-256 Public Key. */ ++typedef struct ++{ ++ uint8_t pk[BLE_GAP_LESC_P256_PK_LEN]; /**< LE Secure Connections Elliptic Curve Diffie-Hellman P-256 Public Key. Stored in the standard SMP protocol format: {X,Y} both in little-endian. */ ++} ble_gap_lesc_p256_pk_t; ++ ++ ++/**@brief GAP LE Secure Connections DHKey. */ ++typedef struct ++{ ++ uint8_t key[BLE_GAP_LESC_DHKEY_LEN]; /**< LE Secure Connections Elliptic Curve Diffie-Hellman Key. Stored in little-endian. */ ++} ble_gap_lesc_dhkey_t; ++ ++ ++/**@brief GAP LE Secure Connections OOB data. */ ++typedef struct ++{ ++ ble_gap_addr_t addr; /**< Bluetooth address of the device. */ ++ uint8_t r[BLE_GAP_SEC_KEY_LEN]; /**< Random Number. */ ++ uint8_t c[BLE_GAP_SEC_KEY_LEN]; /**< Confirm Value. */ ++} ble_gap_lesc_oob_data_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_CONNECTED. */ ++typedef struct ++{ ++ ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 ++ and the address is the device's identity address. */ ++ uint8_t role; /**< BLE role for this connection, see @ref BLE_GAP_ROLES */ ++ ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ ++} ble_gap_evt_connected_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_DISCONNECTED. */ ++typedef struct ++{ ++ uint8_t reason; /**< HCI error code, see @ref BLE_HCI_STATUS_CODES. */ ++} ble_gap_evt_disconnected_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_CONN_PARAM_UPDATE. */ ++typedef struct ++{ ++ ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ ++} ble_gap_evt_conn_param_update_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST. */ ++typedef struct ++{ ++ ble_gap_sec_params_t peer_params; /**< Initiator Security Parameters. */ ++} ble_gap_evt_sec_params_request_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_SEC_INFO_REQUEST. */ ++typedef struct ++{ ++ ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ ++ ble_gap_master_id_t master_id; /**< Master Identification for LTK lookup. */ ++ uint8_t enc_info : 1; /**< If 1, Encryption Information required. */ ++ uint8_t id_info : 1; /**< If 1, Identity Information required. */ ++ uint8_t sign_info : 1; /**< If 1, Signing Information required. */ ++} ble_gap_evt_sec_info_request_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_PASSKEY_DISPLAY. */ ++typedef struct ++{ ++ uint8_t passkey[BLE_GAP_PASSKEY_LEN]; /**< 6-digit passkey in ASCII ('0'-'9' digits only). */ ++ uint8_t match_request : 1; /**< If 1 requires the application to report the match using @ref sd_ble_gap_auth_key_reply ++ with either @ref BLE_GAP_AUTH_KEY_TYPE_NONE if there is no match or ++ @ref BLE_GAP_AUTH_KEY_TYPE_PASSKEY if there is a match. */ ++} ble_gap_evt_passkey_display_t; ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_KEY_PRESSED. */ ++typedef struct ++{ ++ uint8_t kp_not; /**< Keypress notification type, see @ref BLE_GAP_KP_NOT_TYPES. */ ++} ble_gap_evt_key_pressed_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_AUTH_KEY_REQUEST. */ ++typedef struct ++{ ++ uint8_t key_type; /**< See @ref BLE_GAP_AUTH_KEY_TYPES. */ ++} ble_gap_evt_auth_key_request_t; ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST. */ ++typedef struct ++{ ++ ble_gap_lesc_p256_pk_t *p_pk_peer; /**< LE Secure Connections remote P-256 Public Key. This will point to the application-supplied memory ++ inside the keyset during the call to @ref sd_ble_gap_sec_params_reply. */ ++ uint8_t oobd_req :1; /**< LESC OOB data required. A call to @ref sd_ble_gap_lesc_oob_data_set is required to complete the procedure. */ ++} ble_gap_evt_lesc_dhkey_request_t; ++ ++ ++/**@brief Security levels supported. ++ * @note See Bluetooth Specification Version 4.2 Volume 3, Part C, Chapter 10, Section 10.2.1. ++*/ ++typedef struct ++{ ++ uint8_t lv1 : 1; /**< If 1: Level 1 is supported. */ ++ uint8_t lv2 : 1; /**< If 1: Level 2 is supported. */ ++ uint8_t lv3 : 1; /**< If 1: Level 3 is supported. */ ++ uint8_t lv4 : 1; /**< If 1: Level 4 is supported. */ ++} ble_gap_sec_levels_t; ++ ++ ++/**@brief Encryption Key. */ ++typedef struct ++{ ++ ble_gap_enc_info_t enc_info; /**< Encryption Information. */ ++ ble_gap_master_id_t master_id; /**< Master Identification. */ ++} ble_gap_enc_key_t; ++ ++ ++/**@brief Identity Key. */ ++typedef struct ++{ ++ ble_gap_irk_t id_info; /**< Identity Resolving Key. */ ++ ble_gap_addr_t id_addr_info; /**< Identity Address. */ ++} ble_gap_id_key_t; ++ ++ ++/**@brief Security Keys. */ ++typedef struct ++{ ++ ble_gap_enc_key_t *p_enc_key; /**< Encryption Key, or NULL. */ ++ ble_gap_id_key_t *p_id_key; /**< Identity Key, or NULL. */ ++ ble_gap_sign_info_t *p_sign_key; /**< Signing Key, or NULL. */ ++ ble_gap_lesc_p256_pk_t *p_pk; /**< LE Secure Connections P-256 Public Key. When in debug mode the application must use the value defined ++ in the Core Bluetooth Specification v4.2 Vol.3, Part H, Section 2.3.5.6.1 */ ++} ble_gap_sec_keys_t; ++ ++ ++/**@brief Security key set for both local and peer keys. */ ++typedef struct ++{ ++ ble_gap_sec_keys_t keys_own; /**< Keys distributed by the local device. For LE Secure Connections the encryption key will be generated locally and will always be stored if bonding. */ ++ ble_gap_sec_keys_t keys_peer; /**< Keys distributed by the remote device. For LE Secure Connections, p_enc_key must always be NULL. */ ++} ble_gap_sec_keyset_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_AUTH_STATUS. */ ++typedef struct ++{ ++ uint8_t auth_status; /**< Authentication status, see @ref BLE_GAP_SEC_STATUS. */ ++ uint8_t error_src : 2; /**< On error, source that caused the failure, see @ref BLE_GAP_SEC_STATUS_SOURCES. */ ++ uint8_t bonded : 1; /**< Procedure resulted in a bond. */ ++ ble_gap_sec_levels_t sm1_levels; /**< Levels supported in Security Mode 1. */ ++ ble_gap_sec_levels_t sm2_levels; /**< Levels supported in Security Mode 2. */ ++ ble_gap_sec_kdist_t kdist_own; /**< Bitmap stating which keys were exchanged (distributed) by the local device. If bonding with LE Secure Connections, the enc bit will be always set. */ ++ ble_gap_sec_kdist_t kdist_peer; /**< Bitmap stating which keys were exchanged (distributed) by the remote device. If bonding with LE Secure Connections, the enc bit will never be set. */ ++} ble_gap_evt_auth_status_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_CONN_SEC_UPDATE. */ ++typedef struct ++{ ++ ble_gap_conn_sec_t conn_sec; /**< Connection security level. */ ++} ble_gap_evt_conn_sec_update_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_TIMEOUT. */ ++typedef struct ++{ ++ uint8_t src; /**< Source of timeout event, see @ref BLE_GAP_TIMEOUT_SOURCES. */ ++} ble_gap_evt_timeout_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_RSSI_CHANGED. */ ++typedef struct ++{ ++ int8_t rssi; /**< Received Signal Strength Indication in dBm. */ ++} ble_gap_evt_rssi_changed_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_ADV_REPORT. */ ++typedef struct ++{ ++ ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 ++ and the address is the device's identity address. */ ++ ble_gap_addr_t direct_addr; /**< Set when the scanner is unable to resolve the private resolvable address of the initiator ++ field of a directed advertisement packet and the scanner has been enabled to report this in @ref ble_gap_scan_params_t::adv_dir_report. */ ++ int8_t rssi; /**< Received Signal Strength Indication in dBm. */ ++ uint8_t scan_rsp : 1; /**< If 1, the report corresponds to a scan response and the type field may be ignored. */ ++ uint8_t type : 2; /**< See @ref BLE_GAP_ADV_TYPES. Only valid if the scan_rsp field is 0. */ ++ uint8_t dlen : 5; /**< Advertising or scan response data length. */ ++ uint8_t data[BLE_GAP_ADV_MAX_SIZE]; /**< Advertising or scan response data. */ ++} ble_gap_evt_adv_report_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_SEC_REQUEST. */ ++typedef struct ++{ ++ uint8_t bond : 1; /**< Perform bonding. */ ++ uint8_t mitm : 1; /**< Man In The Middle protection requested. */ ++ uint8_t lesc : 1; /**< LE Secure Connections requested. */ ++ uint8_t keypress : 1; /**< Generation of keypress notifications requested. */ ++} ble_gap_evt_sec_request_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST. */ ++typedef struct ++{ ++ ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ ++} ble_gap_evt_conn_param_update_request_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_SCAN_REQ_REPORT. */ ++typedef struct ++{ ++ int8_t rssi; /**< Received Signal Strength Indication in dBm. */ ++ ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 ++ and the address is the device's identity address. */ ++} ble_gap_evt_scan_req_report_t; ++ ++ ++/**@brief GAP event structure. */ ++typedef struct ++{ ++ uint16_t conn_handle; /**< Connection Handle on which event occurred. */ ++ union /**< union alternative identified by evt_id in enclosing struct. */ ++ { ++ ble_gap_evt_connected_t connected; /**< Connected Event Parameters. */ ++ ble_gap_evt_disconnected_t disconnected; /**< Disconnected Event Parameters. */ ++ ble_gap_evt_conn_param_update_t conn_param_update; /**< Connection Parameter Update Parameters. */ ++ ble_gap_evt_sec_params_request_t sec_params_request; /**< Security Parameters Request Event Parameters. */ ++ ble_gap_evt_sec_info_request_t sec_info_request; /**< Security Information Request Event Parameters. */ ++ ble_gap_evt_passkey_display_t passkey_display; /**< Passkey Display Event Parameters. */ ++ ble_gap_evt_key_pressed_t key_pressed; /**< Key Pressed Event Parameters. */ ++ ble_gap_evt_auth_key_request_t auth_key_request; /**< Authentication Key Request Event Parameters. */ ++ ble_gap_evt_lesc_dhkey_request_t lesc_dhkey_request; /**< LE Secure Connections DHKey calculation request. */ ++ ble_gap_evt_auth_status_t auth_status; /**< Authentication Status Event Parameters. */ ++ ble_gap_evt_conn_sec_update_t conn_sec_update; /**< Connection Security Update Event Parameters. */ ++ ble_gap_evt_timeout_t timeout; /**< Timeout Event Parameters. */ ++ ble_gap_evt_rssi_changed_t rssi_changed; /**< RSSI Event parameters. */ ++ ble_gap_evt_adv_report_t adv_report; /**< Advertising Report Event Parameters. */ ++ ble_gap_evt_sec_request_t sec_request; /**< Security Request Event Parameters. */ ++ ble_gap_evt_conn_param_update_request_t conn_param_update_request; /**< Connection Parameter Update Parameters. */ ++ ble_gap_evt_scan_req_report_t scan_req_report; /**< Scan Request Report parameters. */ ++ } params; /**< Event Parameters. */ ++} ble_gap_evt_t; ++ ++ ++/**@brief Channel Map option. ++ * Used with @ref sd_ble_opt_get to get the current channel map ++ * or @ref sd_ble_opt_set to set a new channel map. When setting the ++ * channel map, it applies to all current and future connections. When getting the ++ * current channel map, it applies to a single connection and the connection handle ++ * must be supplied. ++ * ++ * @note Setting the channel map may take some time, depending on connection parameters. ++ * The time taken may be different for each connection and the get operation will ++ * return the previous channel map until the new one has taken effect. ++ * ++ * @note After setting the channel map, by spec it can not be set again until at least 1 s has passed. ++ * See Bluetooth Specification Version 4.1 Volume 2, Part E, Section 7.3.46. ++ * ++ * @retval ::NRF_SUCCESS Get or set successful. ++ * @retval ::NRF_ERROR_BUSY Channel map was set again before enough time had passed. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied for get. ++ * @retval ::NRF_ERROR_NOT_SUPPORTED Returned by sd_ble_opt_set in peripheral-only SoftDevices. ++ * ++ */ ++typedef struct ++{ ++ uint16_t conn_handle; /**< Connection Handle (only applicable for get) */ ++ uint8_t ch_map[5]; /**< Channel Map (37-bit). */ ++} ble_gap_opt_ch_map_t; ++ ++ ++/**@brief Local connection latency option. ++ * ++ * Local connection latency is a feature which enables the slave to improve ++ * current consumption by ignoring the slave latency set by the peer. The ++ * local connection latency can only be set to a multiple of the slave latency, ++ * and cannot be longer than half of the supervision timeout. ++ * ++ * Used with @ref sd_ble_opt_set to set the local connection latency. The ++ * @ref sd_ble_opt_get is not supported for this option, but the actual ++ * local connection latency (unless set to NULL) is set as a return parameter ++ * when setting the option. ++ * ++ * @note The latency set will be truncated down to the closest slave latency event ++ * multiple, or the nearest multiple before half of the supervision timeout. ++ * ++ * @note The local connection latency is disabled by default, and needs to be enabled for new ++ * connections and whenever the connection is updated. ++ * ++ * @retval ::NRF_SUCCESS Set successfully. ++ * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. ++ */ ++typedef struct ++{ ++ uint16_t conn_handle; /**< Connection Handle */ ++ uint16_t requested_latency; /**< Requested local connection latency. */ ++ uint16_t * p_actual_latency; /**< Pointer to storage for the actual local connection latency (can be set to NULL to skip return value). */ ++} ble_gap_opt_local_conn_latency_t; ++ ++ ++/**@brief Passkey Option. ++ * ++ * Structure containing the passkey to be used during pairing. This can be used with @ref ++ * sd_ble_opt_set to make the SoftDevice use a pre-programmed passkey for authentication ++ * instead of generating a random one. ++ * ++ * @note Repeated pairing attempts using the same pre-programmed passkey makes pairing vulnerable to MITM attacks. ++ * ++ * @note @ref sd_ble_opt_get is not supported for this option. ++ * ++ */ ++typedef struct ++{ ++ uint8_t * p_passkey; /**< Pointer to 6-digit ASCII string (digit 0..9 only, no NULL termination) passkey to be used during pairing. If this is NULL, the SoftDevice will generate a random passkey if required.*/ ++} ble_gap_opt_passkey_t; ++ ++ ++/**@brief Scan request report option. ++ * ++ * This can be used with @ref sd_ble_opt_set to make the SoftDevice send ++ * @ref BLE_GAP_EVT_SCAN_REQ_REPORT events. ++ * ++ * @note Due to the limited space reserved for scan request report events, ++ * not all received scan requests will be reported. ++ * ++ * @note If whitelisting is used, only whitelisted requests are reported. ++ * ++ * @retval ::NRF_SUCCESS Set successfully. ++ * @retval ::NRF_ERROR_INVALID_STATE When advertising is ongoing while the option is set. ++ */ ++typedef struct ++{ ++ uint8_t enable : 1; /**< Enable scan request reports. */ ++} ble_gap_opt_scan_req_report_t; ++ ++ ++/**@brief Compatibility mode option. ++ * ++ * This can be used with @ref sd_ble_opt_set to enable and disable ++ * compatibility modes. Compatibility modes are disabled by default. ++ * ++ * @note Compatibility mode 1 enables interoperability with devices that do not support ++ * a value of 0 for the WinOffset parameter in the Link Layer CONNECT_REQ packet. ++ * ++ * @retval ::NRF_SUCCESS Set successfully. ++ * @retval ::NRF_ERROR_INVALID_STATE When connection creation is ongoing while mode 1 is set. ++ */ ++typedef struct ++{ ++ uint8_t mode_1_enable : 1; /**< Enable compatibility mode 1.*/ ++} ble_gap_opt_compat_mode_t; ++ ++/**@brief Data length extension option. ++ * ++ * This can be used with @ref sd_ble_opt_set to enable longer data packets. ++ * ++ * @note An rxtx_max_pdu_payload_size of 0 will result in the default minimum payload size of 27. ++ * @note Not supported by SoftDevices for nRF51 Series devices. ++ * @note The parameters for a connection are applied when a connection complete ++ * event is generated for the host. ++ * ++ * ++ * @retval ::NRF_SUCCESS Set successfully. ++ * @retval ::NRF_ERROR_INVALID_PARAM If the payload size is not 0 or a valid link layer PDU payload size. ++ * @retval ::NRF_ERROR_NOT_SUPPORTED If called on a SoftDevice designed for nRF51 (e.g. s130). ++ */ ++typedef struct ++{ ++ uint8_t rxtx_max_pdu_payload_size; /**< Max PDU payload size (in octets). */ ++} ble_gap_opt_ext_len_t; ++ ++ ++ ++/**@brief Authenticated payload timeout option. ++ * ++ * This can be used with @ref sd_ble_opt_set to change the Authenticated payload timeout to a value other than the default of 8 minutes. ++ * ++ * @note The authenticated payload timeout event ::BLE_GAP_TIMEOUT_SRC_AUTH_PAYLOAD will be generated ++ * if auth_payload_timeout time has elapsed without receiving a packet with a valid MIC on an encrypted ++ * link. ++ * ++ * @note The LE ping procedure will be initiated before the timer expires to give the peer a chance ++ * to reset the timer. In addition the stack will try to prioritize running of LE ping over other ++ * activities to increase chances of finishing LE ping before timer expires. To avoid side-effects ++ * on other activities, it is recommended to use high timeout values. ++ * Recommended timeout > 2*(connInterval * (6 + connSlaveLatency)). ++ * ++ * @retval ::NRF_SUCCESS Set successfully. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. auth_payload_timeout was outside of allowed range. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. ++ */ ++typedef struct ++{ ++ uint16_t conn_handle; /**< Connection Handle */ ++ uint16_t auth_payload_timeout; /**< Requested timeout in 10 ms unit. Maximum is 48 000 (=480 000 ms =8 min). Minimum is 1 (=10ms). */ ++} ble_gap_opt_auth_payload_timeout_t; ++ ++ ++/**@brief Option structure for GAP options. */ ++typedef union ++{ ++ ble_gap_opt_ch_map_t ch_map; /**< Parameters for the Channel Map option. */ ++ ble_gap_opt_local_conn_latency_t local_conn_latency; /**< Parameters for the Local connection latency option */ ++ ble_gap_opt_passkey_t passkey; /**< Parameters for the Passkey option.*/ ++ ble_gap_opt_scan_req_report_t scan_req_report; /**< Parameters for the scan request report option.*/ ++ ble_gap_opt_compat_mode_t compat_mode; /**< Parameters for the compatibility mode option.*/ ++ ble_gap_opt_ext_len_t ext_len; /**< Parameters for the extended length option. */ ++ ble_gap_opt_auth_payload_timeout_t auth_payload_timeout; /**< Parameters for the authenticated payload timeout option.*/ ++} ble_gap_opt_t; ++/**@} */ ++ ++ ++/**@addtogroup BLE_GAP_FUNCTIONS Functions ++ * @{ */ ++ ++/**@brief Set the local Bluetooth identity address. ++ * ++ * The local Bluetooth identity address is the address that identifies this device to other peers. ++ * The address type must be either @ref BLE_GAP_ADDR_TYPE_PUBLIC or @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC. ++ * The identity address cannot be changed while roles are running. ++ * ++ * @note This address will be distributed to the peer during bonding. ++ * If the address changes, the address stored in the peer device will not be valid and the ability to ++ * reconnect using the old address will be lost. ++ * ++ * @note By default the SoftDevice will set an address of type @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC upon being ++ * enabled. The address is a random number populated during the IC manufacturing process and remains unchanged ++ * for the lifetime of each IC. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_ADV_MSC} ++ * @endmscs ++ * ++ * @param[in] p_addr Pointer to address structure. ++ * ++ * @retval ::NRF_SUCCESS Address successfully set. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address. ++ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. ++ * @retval ::NRF_ERROR_INVALID_STATE The identity address cannot be changed while the roles are running. ++ */ ++SVCALL(SD_BLE_GAP_ADDR_SET, uint32_t, sd_ble_gap_addr_set(ble_gap_addr_t const *p_addr)); ++ ++ ++/**@brief Get local Bluetooth identity address. ++ * ++ * @note This will always return the identity address irrespective of the privacy settings, ++ * i.e. the address type will always be either @ref BLE_GAP_ADDR_TYPE_PUBLIC or @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC. ++ * ++ * @param[out] p_addr Pointer to address structure to be filled in. ++ * ++ * @retval ::NRF_SUCCESS Address successfully retrieved. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid or NULL pointer supplied. ++ */ ++SVCALL(SD_BLE_GAP_ADDR_GET, uint32_t, sd_ble_gap_addr_get(ble_gap_addr_t *p_addr)); ++ ++ ++/**@brief Set the active whitelist in the SoftDevice. ++ * ++ * @note Only one whitelist can be used at a time and the whitelist is shared between the BLE roles. ++ * The whitelist cannot be set if a BLE role is using the whitelist. ++ * ++ * @note If an address is resolved using the information in the device identity list, then the whitelist ++ * filter policy applies to the peer identity address and not the resolvable address sent on air. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} ++ * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_PRIVATE_SCAN_MSC} ++ * @endmscs ++ * ++ * @param[in] pp_wl_addrs Pointer to a whitelist of peer addresses, if NULL the whitelist will be cleared. ++ * @param[in] len Length of the whitelist, maximum @ref BLE_GAP_WHITELIST_ADDR_MAX_COUNT. ++ * ++ * @retval ::NRF_SUCCESS The whitelist is successfully set/cleared. ++ * @retval ::NRF_ERROR_INVALID_ADDR The whitelist (or one of its entries) provided is invalid. ++ * @retval ::BLE_ERROR_GAP_WHITELIST_IN_USE The whitelist is in use by a BLE role and cannot be set or cleared. ++ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. ++ * @retval ::NRF_ERROR_DATA_SIZE The given whitelist size is invalid (zero or too large); this can only return when ++ * pp_wl_addrs is not NULL. ++ */ ++SVCALL(SD_BLE_GAP_WHITELIST_SET, uint32_t, sd_ble_gap_whitelist_set(ble_gap_addr_t const * const * pp_wl_addrs, uint8_t len)); ++ ++ ++/**@brief Set device identity list. ++ * ++ * @note Only one device identity list can be used at a time and the list is shared between the BLE roles. ++ * The device identity list cannot be set if a BLE role is using the list. ++ * ++ * @param[in] pp_id_keys Pointer to an array of peer identity addresses and peer IRKs, if NULL the device identity list will be cleared. ++ * @param[in] pp_local_irks Pointer to an array of local IRKs. Each entry in the array maps to the entry in pp_id_keys at the same index. ++ * To fill in the list with the currently set device IRK for all peers, set to NULL. ++ * @param[in] len Length of the device identity list, maximum @ref BLE_GAP_DEVICE_IDENTITIES_MAX_COUNT. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_PRIVACY_ADV_MSC} ++ * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_MSC} ++ * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_PRIVATE_SCAN_MSC} ++ * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_CONN_PRIV_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_CONN_PRIV_MSC} ++ * @endmscs ++ * ++ * @retval ::NRF_SUCCESS The device identity list successfully set/cleared. ++ * @retval ::NRF_ERROR_INVALID_ADDR The device identity list (or one of its entries) provided is invalid. ++ This code may be returned if the local IRK list also has an invalid entry. ++ * @retval ::BLE_ERROR_GAP_DEVICE_IDENTITIES_IN_USE The device identity list is in use and cannot be set or cleared. ++ * @retval ::BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE The device identity list contains multiple entries with the same identity address. ++ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. ++ * @retval ::NRF_ERROR_DATA_SIZE The given device identity list size invalid (zero or too large); this can ++ * only return when pp_id_keys is not NULL. ++ */ ++SVCALL(SD_BLE_GAP_DEVICE_IDENTITIES_SET, uint32_t, sd_ble_gap_device_identities_set(ble_gap_id_key_t const * const * pp_id_keys, ble_gap_irk_t const * const * pp_local_irks, uint8_t len)); ++ ++ ++/**@brief Set privacy settings. ++ * ++ * @note Privacy settings cannot be set while BLE roles are running. ++ * ++ * @param[in] p_privacy_params Privacy settings. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_PRIVACY_ADV_MSC} ++ * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_MSC} ++ * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} ++ * @endmscs ++ * ++ * @retval ::NRF_SUCCESS Set successfully. ++ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. ++ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. ++ * @retval ::NRF_ERROR_INVALID_ADDR The pointer to privacy settings is NULL or invalid. ++ Otherwise, the p_device_irk pointer in privacy parameter is an invalid pointer. ++ * @retval ::NRF_ERROR_INVALID_PARAM Out of range parameters are provided. ++ * @retval ::NRF_ERROR_INVALID_STATE Privacy settings cannot be changed while BLE roles using privacy are enabled. ++ */ ++SVCALL(SD_BLE_GAP_PRIVACY_SET, uint32_t, sd_ble_gap_privacy_set(ble_gap_privacy_params_t const *p_privacy_params)); ++ ++ ++/**@brief Get privacy settings. ++ * ++ * @note The privacy settings returned include the current device irk as well. ++ * ++ * @param[in] p_privacy_params Privacy settings. ++ * ++ * @retval ::NRF_SUCCESS Privacy settings read. ++ * @retval ::NRF_ERROR_INVALID_ADDR The pointer given for returning the privacy settings may be NULL or invalid. ++ Otherwise, the p_device_irk pointer in privacy parameter is an invalid pointer. ++ */ ++SVCALL(SD_BLE_GAP_PRIVACY_GET, uint32_t, sd_ble_gap_privacy_get(ble_gap_privacy_params_t *p_privacy_params)); ++ ++ ++/**@brief Set, clear or update advertising and scan response data. ++ * ++ * @note The format of the advertising data will be checked by this call to ensure interoperability. ++ * Limitations imposed by this API call to the data provided include having a flags data type in the scan response data and ++ * duplicating the local name in the advertising data and scan response data. ++ * ++ * @note To clear the advertising data and set it to a 0-length packet, simply provide a valid pointer (p_data/p_sr_data) with its corresponding ++ * length (dlen/srdlen) set to 0. ++ * ++ * @note The call will fail if p_data and p_sr_data are both NULL since this would have no effect. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_ADV_MSC} ++ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} ++ * @endmscs ++ * ++ * @param[in] p_data Raw data to be placed in advertising packet. If NULL, no changes are made to the current advertising packet data. ++ * @param[in] dlen Data length for p_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_data is NULL, can be 0 if p_data is not NULL. ++ * @param[in] p_sr_data Raw data to be placed in scan response packet. If NULL, no changes are made to the current scan response packet data. ++ * @param[in] srdlen Data length for p_sr_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_sr_data is NULL, can be 0 if p_data is not NULL. ++ * ++ * @retval ::NRF_SUCCESS Advertising data successfully updated or cleared. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, both p_data and p_sr_data cannot be NULL. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_FLAGS Invalid combination of advertising flags supplied. ++ * @retval ::NRF_ERROR_INVALID_DATA Invalid data type(s) supplied, check the advertising data format specification. ++ * @retval ::NRF_ERROR_INVALID_LENGTH Invalid data length(s) supplied. ++ * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported data type. ++ * @retval ::BLE_ERROR_GAP_UUID_LIST_MISMATCH Invalid UUID list supplied. ++ */ ++SVCALL(SD_BLE_GAP_ADV_DATA_SET, uint32_t, sd_ble_gap_adv_data_set(uint8_t const *p_data, uint8_t dlen, uint8_t const *p_sr_data, uint8_t srdlen)); ++ ++ ++/**@brief Start advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). ++ * ++ * @note An application can start an advertising procedure for broadcasting purposes while a connection ++ * is active. After a @ref BLE_GAP_EVT_CONNECTED event is received, this function may therefore ++ * be called to start a broadcast advertising procedure. The advertising procedure ++ * cannot however be connectable (it must be of type @ref BLE_GAP_ADV_TYPE_ADV_SCAN_IND or ++ * @ref BLE_GAP_ADV_TYPE_ADV_NONCONN_IND). @note Only one advertiser may be active at any time. ++ * ++ * @events ++ * @event{@ref BLE_GAP_EVT_CONNECTED, Generated after connection has been established through connectable advertising.} ++ * @event{@ref BLE_GAP_EVT_TIMEOUT, Advertisement has timed out.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_ADV_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_CONN_PRIV_MSC} ++ * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} ++ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} ++ * @endmscs ++ * ++ * @param[in] p_adv_params Pointer to advertising parameters structure. ++ * ++ * @retval ::NRF_SUCCESS The BLE stack has started advertising. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::NRF_ERROR_CONN_COUNT The limit of available connections has been reached; connectable advertiser cannot be started. ++ * @retval ::NRF_ERROR_NO_MEM The configured memory pools (see @ref ble_conn_bw_counts_t) are not large enough for the ++ * bandwidth selected for this connection. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check the accepted ranges and limits. ++ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Bluetooth address supplied. ++ * @retval ::BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST Discoverable mode and whitelist incompatible. ++ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. ++ * @retval ::NRF_ERROR_RESOURCES Not enough BLE role slots available. ++ * Stop one or more currently active roles (Central, Peripheral or Observer) and try again ++ */ ++SVCALL(SD_BLE_GAP_ADV_START, uint32_t, sd_ble_gap_adv_start(ble_gap_adv_params_t const *p_adv_params)); ++ ++ ++/**@brief Stop advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_ADV_MSC} ++ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} ++ * @endmscs ++ * ++ * @retval ::NRF_SUCCESS The BLE stack has stopped advertising. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation (most probably not in advertising state). ++ */ ++SVCALL(SD_BLE_GAP_ADV_STOP, uint32_t, sd_ble_gap_adv_stop(void)); ++ ++ ++/**@brief Update connection parameters. ++ * ++ * @details In the central role this will initiate a Link Layer connection parameter update procedure, ++ * otherwise in the peripheral role, this will send the corresponding L2CAP request and wait for ++ * the central to perform the procedure. In both cases, and regardless of success or failure, the application ++ * will be informed of the result with a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE event. ++ * ++ * @details This function can be used as a central both to reply to a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST or to start the procedure unrequested. ++ * ++ * @events ++ * @event{@ref BLE_GAP_EVT_CONN_PARAM_UPDATE, Result of the connection parameter update procedure.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_CPU_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} ++ * @mmsc{@ref BLE_GAP_MULTILINK_CPU_MSC} ++ * @mmsc{@ref BLE_GAP_MULTILINK_CTRL_PROC_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_CPU_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] p_conn_params Pointer to desired connection parameters. If NULL is provided on a peripheral role, ++ * the parameters in the PPCP characteristic of the GAP service will be used instead. ++ * If NULL is provided on a central role and in response to a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST, the peripheral request will be rejected ++ * ++ * @retval ::NRF_SUCCESS The Connection Update procedure has been started successfully. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::NRF_ERROR_BUSY Procedure already in progress or not allowed at this time, process pending events and wait for pending procedures to complete and retry. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. ++ */ ++SVCALL(SD_BLE_GAP_CONN_PARAM_UPDATE, uint32_t, sd_ble_gap_conn_param_update(uint16_t conn_handle, ble_gap_conn_params_t const *p_conn_params)); ++ ++ ++/**@brief Disconnect (GAP Link Termination). ++ * ++ * @details This call initiates the disconnection procedure, and its completion will be communicated to the application ++ * with a @ref BLE_GAP_EVT_DISCONNECTED event. ++ * ++ * @events ++ * @event{@ref BLE_GAP_EVT_DISCONNECTED, Generated when disconnection procedure is complete.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_CONN_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] hci_status_code HCI status code, see @ref BLE_HCI_STATUS_CODES (accepted values are @ref BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION and @ref BLE_HCI_CONN_INTERVAL_UNACCEPTABLE). ++ * ++ * @retval ::NRF_SUCCESS The disconnection procedure has been started successfully. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation (disconnection is already in progress). ++ */ ++SVCALL(SD_BLE_GAP_DISCONNECT, uint32_t, sd_ble_gap_disconnect(uint16_t conn_handle, uint8_t hci_status_code)); ++ ++ ++/**@brief Set the radio's transmit power. ++ * ++ * @param[in] tx_power Radio transmit power in dBm (accepted values are -40, -30, -20, -16, -12, -8, -4, 0, 3, and 4 dBm). ++ * ++ * @note The +3dBm setting is only available on nRF52 series ICs. ++ * @note The -30dBm setting is only available on nRF51 series ICs. ++ * @note The -40dBm setting is only available on nRF52 series ICs. ++ * ++ * @retval ::NRF_SUCCESS Successfully changed the transmit power. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ */ ++SVCALL(SD_BLE_GAP_TX_POWER_SET, uint32_t, sd_ble_gap_tx_power_set(int8_t tx_power)); ++ ++ ++/**@brief Set GAP Appearance value. ++ * ++ * @param[in] appearance Appearance (16-bit), see @ref BLE_APPEARANCES. ++ * ++ * @retval ::NRF_SUCCESS Appearance value set successfully. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ */ ++SVCALL(SD_BLE_GAP_APPEARANCE_SET, uint32_t, sd_ble_gap_appearance_set(uint16_t appearance)); ++ ++ ++/**@brief Get GAP Appearance value. ++ * ++ * @param[out] p_appearance Pointer to appearance (16-bit) to be filled in, see @ref BLE_APPEARANCES. ++ * ++ * @retval ::NRF_SUCCESS Appearance value retrieved successfully. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ */ ++SVCALL(SD_BLE_GAP_APPEARANCE_GET, uint32_t, sd_ble_gap_appearance_get(uint16_t *p_appearance)); ++ ++ ++/**@brief Set GAP Peripheral Preferred Connection Parameters. ++ * ++ * @param[in] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure with the desired parameters. ++ * ++ * @retval ::NRF_SUCCESS Peripheral Preferred Connection Parameters set successfully. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ */ ++SVCALL(SD_BLE_GAP_PPCP_SET, uint32_t, sd_ble_gap_ppcp_set(ble_gap_conn_params_t const *p_conn_params)); ++ ++ ++/**@brief Get GAP Peripheral Preferred Connection Parameters. ++ * ++ * @param[out] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure where the parameters will be stored. ++ * ++ * @retval ::NRF_SUCCESS Peripheral Preferred Connection Parameters retrieved successfully. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ */ ++SVCALL(SD_BLE_GAP_PPCP_GET, uint32_t, sd_ble_gap_ppcp_get(ble_gap_conn_params_t *p_conn_params)); ++ ++ ++/**@brief Set GAP device name. ++ * ++ * @param[in] p_write_perm Write permissions for the Device Name characteristic, see @ref ble_gap_conn_sec_mode_t. ++ * @param[in] p_dev_name Pointer to a UTF-8 encoded, non NULL-terminated string. ++ * @param[in] len Length of the UTF-8, non NULL-terminated string pointed to by p_dev_name in octets (must be smaller or equal than @ref BLE_GAP_DEVNAME_MAX_LEN). ++ * ++ * @note If the device name is located in application flash memory (see @ref ble_gap_device_name_t), it cannot be changed. Then @ref NRF_ERROR_FORBIDDEN will be returned. ++ * ++ * @retval ::NRF_SUCCESS GAP device name and permissions set successfully. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. ++ * @retval ::NRF_ERROR_FORBIDDEN Device name is not writable. ++ */ ++SVCALL(SD_BLE_GAP_DEVICE_NAME_SET, uint32_t, sd_ble_gap_device_name_set(ble_gap_conn_sec_mode_t const *p_write_perm, uint8_t const *p_dev_name, uint16_t len)); ++ ++ ++/**@brief Get GAP device name. ++ * ++ * @note If the device name is longer than the size of the supplied buffer, ++ * p_len will return the complete device name length, ++ * and not the number of bytes actually returned in p_dev_name. ++ * The application may use this information to allocate a suitable buffer size. ++ * ++ * @param[out] p_dev_name Pointer to an empty buffer where the UTF-8 non NULL-terminated string will be placed. Set to NULL to obtain the complete device name length. ++ * @param[in,out] p_len Length of the buffer pointed by p_dev_name, complete device name length on output. ++ * ++ * @retval ::NRF_SUCCESS GAP device name retrieved successfully. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. ++ */ ++SVCALL(SD_BLE_GAP_DEVICE_NAME_GET, uint32_t, sd_ble_gap_device_name_get(uint8_t *p_dev_name, uint16_t *p_len)); ++ ++ ++/**@brief Initiate the GAP Authentication procedure. ++ * ++ * @details In the central role, this function will send an SMP Pairing Request (or an SMP Pairing Failed if rejected), ++ * otherwise in the peripheral role, an SMP Security Request will be sent. ++ * ++ * @events ++ * @event{Depending on the security parameters set and the packet exchanges with the peer\, the following events may be generated:} ++ * @event{@ref BLE_GAP_EVT_SEC_PARAMS_REQUEST} ++ * @event{@ref BLE_GAP_EVT_SEC_INFO_REQUEST} ++ * @event{@ref BLE_GAP_EVT_PASSKEY_DISPLAY} ++ * @event{@ref BLE_GAP_EVT_KEY_PRESSED} ++ * @event{@ref BLE_GAP_EVT_AUTH_KEY_REQUEST} ++ * @event{@ref BLE_GAP_EVT_LESC_DHKEY_REQUEST} ++ * @event{@ref BLE_GAP_EVT_CONN_SEC_UPDATE} ++ * @event{@ref BLE_GAP_EVT_AUTH_STATUS} ++ * @event{@ref BLE_GAP_EVT_TIMEOUT} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_PERIPH_SEC_REQ_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_SEC_REQ_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_PAIRING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] p_sec_params Pointer to the @ref ble_gap_sec_params_t structure with the security parameters to be used during the pairing or bonding procedure. ++ * In the peripheral role, only the bond, mitm, lesc and keypress fields of this structure are used. ++ * In the central role, this pointer may be NULL to reject a Security Request. ++ * ++ * @retval ::NRF_SUCCESS Successfully initiated authentication procedure. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. ++ * @retval ::NRF_ERROR_NO_MEM The maximum number of authentication procedures that can run in parallel for the given role is reached. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ * @retval ::NRF_ERROR_NOT_SUPPORTED Setting of sign or link fields in @ref ble_gap_sec_kdist_t not supported. ++ * @retval ::NRF_ERROR_TIMEOUT A SMP timeout has occurred, and further SMP operations on this link is prohibited. ++ */ ++SVCALL(SD_BLE_GAP_AUTHENTICATE, uint32_t, sd_ble_gap_authenticate(uint16_t conn_handle, ble_gap_sec_params_t const *p_sec_params)); ++ ++ ++/**@brief Reply with GAP security parameters. ++ * ++ * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. ++ * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. ++ * ++ * @events ++ * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_PERIPH_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_CENTRAL_OOB_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_STATIC_PK_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_CONFIRM_FAIL_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_PAIRING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_PD_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_KS_TOO_SMALL_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_APP_ERROR_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_REMOTE_PAIRING_FAIL_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_TIMEOUT_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_PAIRING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] sec_status Security status, see @ref BLE_GAP_SEC_STATUS. ++ * @param[in] p_sec_params Pointer to a @ref ble_gap_sec_params_t security parameters structure. In the central role this must be set to NULL, as the parameters have ++ * already been provided during a previous call to @ref sd_ble_gap_authenticate. ++ * @param[in,out] p_sec_keyset Pointer to a @ref ble_gap_sec_keyset_t security keyset structure. Any keys generated and/or distributed as a result of the ongoing security procedure ++ * will be stored into the memory referenced by the pointers inside this structure. The keys will be stored and available to the application ++ * upon reception of a @ref BLE_GAP_EVT_AUTH_STATUS event. ++ * Note that the SoftDevice expects the application to provide memory for storing the ++ * peer's keys. So it must be ensured that the relevant pointers inside this structure are not NULL. The pointers to the local key ++ * can, however, be NULL, in which case, the local key data will not be available to the application upon reception of the ++ * @ref BLE_GAP_EVT_AUTH_STATUS event. ++ * ++ * @retval ::NRF_SUCCESS Successfully accepted security parameter from the application. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ * @retval ::NRF_ERROR_NOT_SUPPORTED Setting of sign or link fields in @ref ble_gap_sec_kdist_t not supported. ++ */ ++SVCALL(SD_BLE_GAP_SEC_PARAMS_REPLY, uint32_t, sd_ble_gap_sec_params_reply(uint16_t conn_handle, uint8_t sec_status, ble_gap_sec_params_t const *p_sec_params, ble_gap_sec_keyset_t const *p_sec_keyset)); ++ ++ ++/**@brief Reply with an authentication key. ++ * ++ * @details This function is only used to reply to a @ref BLE_GAP_EVT_AUTH_KEY_REQUEST or a @ref BLE_GAP_EVT_PASSKEY_DISPLAY, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. ++ * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. ++ * ++ * @events ++ * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_CENTRAL_OOB_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] key_type See @ref BLE_GAP_AUTH_KEY_TYPES. ++ * @param[in] p_key If key type is @ref BLE_GAP_AUTH_KEY_TYPE_NONE, then NULL. ++ * If key type is @ref BLE_GAP_AUTH_KEY_TYPE_PASSKEY, then a 6-byte ASCII string (digit 0..9 only, no NULL termination) ++ * or NULL when confirming LE Secure Connections Numeric Comparison. ++ * If key type is @ref BLE_GAP_AUTH_KEY_TYPE_OOB, then a 16-byte OOB key value in Little Endian format. ++ * ++ * @retval ::NRF_SUCCESS Authentication key successfully set. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ */ ++SVCALL(SD_BLE_GAP_AUTH_KEY_REPLY, uint32_t, sd_ble_gap_auth_key_reply(uint16_t conn_handle, uint8_t key_type, uint8_t const *p_key)); ++ ++/**@brief Reply with an LE Secure connections DHKey. ++ * ++ * @details This function is only used to reply to a @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. ++ * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. ++ * ++ * @events ++ * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_PAIRING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_PD_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] p_dhkey LE Secure Connections DHKey. ++ * ++ * @retval ::NRF_SUCCESS DHKey successfully set. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ */ ++SVCALL(SD_BLE_GAP_LESC_DHKEY_REPLY, uint32_t, sd_ble_gap_lesc_dhkey_reply(uint16_t conn_handle, ble_gap_lesc_dhkey_t const *p_dhkey)); ++ ++/**@brief Notify the peer of a local keypress. ++ * ++ * @details This function can only be used when an authentication procedure using LE Secure Connection is in progress. Calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] kp_not See @ref BLE_GAP_KP_NOT_TYPES. ++ * ++ * @retval ::NRF_SUCCESS Keypress notification successfully queued for transmission. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either not entering a passkey or keypresses have not been enabled by both peers. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ * @retval ::NRF_ERROR_BUSY The BLE stack is busy. Retry at later time. ++ */ ++SVCALL(SD_BLE_GAP_KEYPRESS_NOTIFY, uint32_t, sd_ble_gap_keypress_notify(uint16_t conn_handle, uint8_t kp_not)); ++ ++/**@brief Generate a set of OOB data to send to a peer out of band. ++ * ++ * @note The @ref ble_gap_addr_t included in the OOB data returned will be the currently active one (or, if a connection has already been established, ++ * the one used during connection setup). The application may manually overwrite it with an updated value. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. Can be BLE_CONN_HANDLE_INVALID if a BLE connection has not been established yet. ++ * @param[in] p_pk_own LE Secure Connections local P-256 Public Key. ++ * @param[out] p_oobd_own The OOB data to be sent out of band to a peer. ++ * ++ * @retval ::NRF_SUCCESS OOB data successfully generated. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ */ ++SVCALL(SD_BLE_GAP_LESC_OOB_DATA_GET, uint32_t, sd_ble_gap_lesc_oob_data_get(uint16_t conn_handle, ble_gap_lesc_p256_pk_t const *p_pk_own, ble_gap_lesc_oob_data_t *p_oobd_own)); ++ ++/**@brief Provide the OOB data sent/received out of band. ++ * ++ * @note At least one of the 2 pointers provided must be different from NULL. ++ * @note An authentication procedure with OOB selected as an algorithm must be in progress when calling this function. ++ * @note A @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST event with the oobd_req set to 1 must have been received prior to calling this function. ++ * ++ * @events ++ * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] p_oobd_own The OOB data sent out of band to a peer or NULL if none sent. ++ * @param[in] p_oobd_peer The OOB data received out of band from a peer or NULL if none received. ++ * ++ * @retval ::NRF_SUCCESS OOB data accepted. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ */ ++SVCALL(SD_BLE_GAP_LESC_OOB_DATA_SET, uint32_t, sd_ble_gap_lesc_oob_data_set(uint16_t conn_handle, ble_gap_lesc_oob_data_t const *p_oobd_own, ble_gap_lesc_oob_data_t const *p_oobd_peer)); ++ ++/**@brief Initiate GAP Encryption procedure. ++ * ++ * @details In the central role, this function will initiate the encryption procedure using the encryption information provided. ++ * ++ * @events ++ * @event{@ref BLE_GAP_EVT_CONN_SEC_UPDATE, The connection security has been updated.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_ENC_MSC} ++ * @mmsc{@ref BLE_GAP_MULTILINK_CTRL_PROC_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_SEC_REQ_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] p_master_id Pointer to a @ref ble_gap_master_id_t master identification structure. ++ * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. ++ * ++ * @retval ::NRF_SUCCESS Successfully initiated authentication procedure. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ * @retval ::BLE_ERROR_INVALID_ROLE Operation is not supported in the Peripheral role. ++ * @retval ::NRF_ERROR_BUSY Procedure already in progress or not allowed at this time, wait for pending procedures to complete and retry. ++ */ ++SVCALL(SD_BLE_GAP_ENCRYPT, uint32_t, sd_ble_gap_encrypt(uint16_t conn_handle, ble_gap_master_id_t const *p_master_id, ble_gap_enc_info_t const *p_enc_info)); ++ ++ ++/**@brief Reply with GAP security information. ++ * ++ * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_INFO_REQUEST, calling it at other times will result in @ref NRF_ERROR_INVALID_STATE. ++ * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. ++ * @note Data signing is not yet supported, and p_sign_info must therefore be NULL. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_PERIPH_ENC_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. May be NULL to signal none is available. ++ * @param[in] p_id_info Pointer to a @ref ble_gap_irk_t identity information structure. May be NULL to signal none is available. ++ * @param[in] p_sign_info Pointer to a @ref ble_gap_sign_info_t signing information structure. May be NULL to signal none is available. ++ * ++ * @retval ::NRF_SUCCESS Successfully accepted security information. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ */ ++SVCALL(SD_BLE_GAP_SEC_INFO_REPLY, uint32_t, sd_ble_gap_sec_info_reply(uint16_t conn_handle, ble_gap_enc_info_t const *p_enc_info, ble_gap_irk_t const *p_id_info, ble_gap_sign_info_t const *p_sign_info)); ++ ++ ++/**@brief Get the current connection security. ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[out] p_conn_sec Pointer to a @ref ble_gap_conn_sec_t structure to be filled in. ++ * ++ * @retval ::NRF_SUCCESS Current connection security successfully retrieved. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ */ ++SVCALL(SD_BLE_GAP_CONN_SEC_GET, uint32_t, sd_ble_gap_conn_sec_get(uint16_t conn_handle, ble_gap_conn_sec_t *p_conn_sec)); ++ ++ ++/**@brief Start reporting the received signal strength to the application. ++ * ++ * A new event is reported whenever the RSSI value changes, until @ref sd_ble_gap_rssi_stop is called. ++ * ++ * @events ++ * @event{@ref BLE_GAP_EVT_RSSI_CHANGED, New RSSI data available. How often the event is generated is ++ dependent on the settings of the threshold_dbm ++ and skip_count input parameters.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} ++ * @mmsc{@ref BLE_GAP_RSSI_FILT_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] threshold_dbm Minimum change in dBm before triggering the @ref BLE_GAP_EVT_RSSI_CHANGED event. Events are disabled if threshold_dbm equals @ref BLE_GAP_RSSI_THRESHOLD_INVALID. ++ * @param[in] skip_count Number of RSSI samples with a change of threshold_dbm or more before sending a new @ref BLE_GAP_EVT_RSSI_CHANGED event. ++ * ++ * @retval ::NRF_SUCCESS Successfully activated RSSI reporting. ++ * @retval ::NRF_ERROR_INVALID_STATE Disconnection in progress. Invalid state to perform operation. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ */ ++SVCALL(SD_BLE_GAP_RSSI_START, uint32_t, sd_ble_gap_rssi_start(uint16_t conn_handle, uint8_t threshold_dbm, uint8_t skip_count)); ++ ++ ++/**@brief Stop reporting the received signal strength. ++ * ++ * @note An RSSI change detected before the call but not yet received by the application ++ * may be reported after @ref sd_ble_gap_rssi_stop has been called. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} ++ * @mmsc{@ref BLE_GAP_RSSI_FILT_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * ++ * @retval ::NRF_SUCCESS Successfully deactivated RSSI reporting. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ */ ++SVCALL(SD_BLE_GAP_RSSI_STOP, uint32_t, sd_ble_gap_rssi_stop(uint16_t conn_handle)); ++ ++ ++/**@brief Get the received signal strength for the last connection event. ++ * ++ * @ref sd_ble_gap_rssi_start must be called to start reporting RSSI before using this function. @ref NRF_ERROR_NOT_FOUND ++ * will be returned until RSSI was sampled for the first time after calling @ref sd_ble_gap_rssi_start. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[out] p_rssi Pointer to the location where the RSSI measurement shall be stored. ++ * ++ * @retval ::NRF_SUCCESS Successfully read the RSSI. ++ * @retval ::NRF_ERROR_NOT_FOUND No sample is available. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is not ongoing, or disconnection in progress. ++ */ ++SVCALL(SD_BLE_GAP_RSSI_GET, uint32_t, sd_ble_gap_rssi_get(uint16_t conn_handle, int8_t *p_rssi)); ++ ++ ++/**@brief Start scanning (GAP Discovery procedure, Observer Procedure). ++ * ++ * ++ * @events ++ * @event{@ref BLE_GAP_EVT_ADV_REPORT, An advertising or scan response packet has been received.} ++ * @event{@ref BLE_GAP_EVT_TIMEOUT, Scanner has timed out.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_SCAN_MSC} ++ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} ++ * @endmscs ++ * ++ * @param[in] p_scan_params Pointer to scan parameters structure. ++ * ++ * @retval ::NRF_SUCCESS Successfully initiated scanning procedure. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. ++ * @retval ::NRF_ERROR_RESOURCES Not enough BLE role slots available. ++ * Stop one or more currently active roles (Central, Peripheral or Broadcaster) and try again ++ */ ++SVCALL(SD_BLE_GAP_SCAN_START, uint32_t, sd_ble_gap_scan_start(ble_gap_scan_params_t const *p_scan_params)); ++ ++ ++/**@brief Stop scanning (GAP Discovery procedure, Observer Procedure). ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_SCAN_MSC} ++ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} ++ * @endmscs ++ * ++ * @retval ::NRF_SUCCESS Successfully stopped scanning procedure. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation (most probably not in scanning state). ++ */ ++SVCALL(SD_BLE_GAP_SCAN_STOP, uint32_t, sd_ble_gap_scan_stop(void)); ++ ++ ++/**@brief Create a connection (GAP Link Establishment). ++ * ++ * @note If a scanning procedure is currently in progress it will be automatically stopped when calling this function. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_CONN_PRIV_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_CONN_MSC} ++ * @endmscs ++ * ++ * @param[in] p_peer_addr Pointer to peer address. If the use_whitelist bit is set in @ref ble_gap_scan_params_t, then this is ignored. ++ * If @ref ble_gap_addr_t::addr_id_peer is set then p_peer_addr must be present in the device identity list ++ * see @ref sd_ble_gap_device_identities_set. ++ * @param[in] p_scan_params Pointer to scan parameters structure. ++ * @param[in] p_conn_params Pointer to desired connection parameters. ++ * ++ * @retval ::NRF_SUCCESS Successfully initiated connection procedure. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid parameter(s) pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ - Invalid parameter(s) in p_scan_params or p_conn_params. ++ - Use of whitelist requested but whitelist has not been set, see @ref sd_ble_gap_whitelist_set. ++ - Peer address was not present in the device identity list, see @ref sd_ble_gap_device_identities_set. ++ * @retval ::NRF_ERROR_INVALID_STATE The SoftDevice is in an invalid state to perform this operation. This may be due to an ++ * existing locally initiated connect procedure, which must complete before initiating again. ++ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Peer address. ++ * @retval ::NRF_ERROR_CONN_COUNT The limit of available connections has been reached. ++ * @retval ::NRF_ERROR_NO_MEM The configured memory pool (see @ref ble_conn_bw_counts_t) is not large enough for the ++ * bandwidth selected for this connection. ++ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. If another connection is being established ++ * wait for the corresponding @ref BLE_GAP_EVT_CONNECTED event before calling again. ++ * @retval ::NRF_ERROR_RESOURCES Not enough BLE role slots available. ++ * Stop one or more currently active roles (Central, Peripheral or Broadcaster) and try again ++ */ ++SVCALL(SD_BLE_GAP_CONNECT, uint32_t, sd_ble_gap_connect(ble_gap_addr_t const *p_peer_addr, ble_gap_scan_params_t const *p_scan_params, ble_gap_conn_params_t const *p_conn_params)); ++ ++ ++/**@brief Cancel a connection establishment. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_CENTRAL_CONN_MSC} ++ * @endmscs ++ * ++ * @retval ::NRF_SUCCESS Successfully cancelled an ongoing connection procedure. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ */ ++SVCALL(SD_BLE_GAP_CONNECT_CANCEL, uint32_t, sd_ble_gap_connect_cancel(void)); ++ ++/** @} */ ++ ++#ifdef __cplusplus ++} ++#endif ++#endif // BLE_GAP_H__ ++ ++/** ++ @} ++*/ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_gatt.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_gatt.h +new file mode 100644 +index 0000000..42d6cb6 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_gatt.h +@@ -0,0 +1,220 @@ ++/* ++ * Copyright (c) Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form must reproduce the above copyright notice, this ++ * list of conditions and the following disclaimer in the documentation and/or ++ * other materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other ++ * contributors to this software may be used to endorse or promote products ++ * derived from this software without specific prior written permission. ++ * ++ * 4. This software must only be used in a processor manufactured by Nordic ++ * Semiconductor ASA, or in a processor manufactured by a third party that ++ * is used in combination with a processor manufactured by Nordic Semiconductor. ++ * ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ++ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ++ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ * ++ */ ++ ++/** ++ @addtogroup BLE_GATT Generic Attribute Profile (GATT) Common ++ @{ ++ @brief Common definitions and prototypes for the GATT interfaces. ++ */ ++ ++#ifndef BLE_GATT_H__ ++#define BLE_GATT_H__ ++ ++#include "ble_types.h" ++#include "ble_ranges.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/** @addtogroup BLE_GATT_DEFINES Defines ++ * @{ */ ++ ++/** @brief Default MTU size, in bytes. */ ++#define GATT_MTU_SIZE_DEFAULT 23 ++ ++/**@brief Invalid Attribute Handle. */ ++#define BLE_GATT_HANDLE_INVALID 0x0000 ++ ++/**@brief First Attribute Handle. */ ++#define BLE_GATT_HANDLE_START 0x0001 ++ ++/**@brief Last Attribute Handle. */ ++#define BLE_GATT_HANDLE_END 0xFFFF ++ ++/** @defgroup BLE_GATT_TIMEOUT_SOURCES GATT Timeout sources ++ * @{ */ ++#define BLE_GATT_TIMEOUT_SRC_PROTOCOL 0x00 /**< ATT Protocol timeout. */ ++/** @} */ ++ ++/** @defgroup BLE_GATT_WRITE_OPS GATT Write operations ++ * @{ */ ++#define BLE_GATT_OP_INVALID 0x00 /**< Invalid Operation. */ ++#define BLE_GATT_OP_WRITE_REQ 0x01 /**< Write Request. */ ++#define BLE_GATT_OP_WRITE_CMD 0x02 /**< Write Command. */ ++#define BLE_GATT_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ ++#define BLE_GATT_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ ++#define BLE_GATT_OP_EXEC_WRITE_REQ 0x05 /**< Execute Write Request. */ ++/** @} */ ++ ++/** @defgroup BLE_GATT_EXEC_WRITE_FLAGS GATT Execute Write flags ++ * @{ */ ++#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_CANCEL 0x00 /**< Cancel prepared write. */ ++#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE 0x01 /**< Execute prepared write. */ ++/** @} */ ++ ++/** @defgroup BLE_GATT_HVX_TYPES GATT Handle Value operations ++ * @{ */ ++#define BLE_GATT_HVX_INVALID 0x00 /**< Invalid Operation. */ ++#define BLE_GATT_HVX_NOTIFICATION 0x01 /**< Handle Value Notification. */ ++#define BLE_GATT_HVX_INDICATION 0x02 /**< Handle Value Indication. */ ++/** @} */ ++ ++/** @defgroup BLE_GATT_STATUS_CODES GATT Status Codes ++ * @{ */ ++#define BLE_GATT_STATUS_SUCCESS 0x0000 /**< Success. */ ++#define BLE_GATT_STATUS_UNKNOWN 0x0001 /**< Unknown or not applicable status. */ ++#define BLE_GATT_STATUS_ATTERR_INVALID 0x0100 /**< ATT Error: Invalid Error Code. */ ++#define BLE_GATT_STATUS_ATTERR_INVALID_HANDLE 0x0101 /**< ATT Error: Invalid Attribute Handle. */ ++#define BLE_GATT_STATUS_ATTERR_READ_NOT_PERMITTED 0x0102 /**< ATT Error: Read not permitted. */ ++#define BLE_GATT_STATUS_ATTERR_WRITE_NOT_PERMITTED 0x0103 /**< ATT Error: Write not permitted. */ ++#define BLE_GATT_STATUS_ATTERR_INVALID_PDU 0x0104 /**< ATT Error: Used in ATT as Invalid PDU. */ ++#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHENTICATION 0x0105 /**< ATT Error: Authenticated link required. */ ++#define BLE_GATT_STATUS_ATTERR_REQUEST_NOT_SUPPORTED 0x0106 /**< ATT Error: Used in ATT as Request Not Supported. */ ++#define BLE_GATT_STATUS_ATTERR_INVALID_OFFSET 0x0107 /**< ATT Error: Offset specified was past the end of the attribute. */ ++#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHORIZATION 0x0108 /**< ATT Error: Used in ATT as Insufficient Authorisation. */ ++#define BLE_GATT_STATUS_ATTERR_PREPARE_QUEUE_FULL 0x0109 /**< ATT Error: Used in ATT as Prepare Queue Full. */ ++#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_FOUND 0x010A /**< ATT Error: Used in ATT as Attribute not found. */ ++#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_LONG 0x010B /**< ATT Error: Attribute cannot be read or written using read/write blob requests. */ ++#define BLE_GATT_STATUS_ATTERR_INSUF_ENC_KEY_SIZE 0x010C /**< ATT Error: Encryption key size used is insufficient. */ ++#define BLE_GATT_STATUS_ATTERR_INVALID_ATT_VAL_LENGTH 0x010D /**< ATT Error: Invalid value size. */ ++#define BLE_GATT_STATUS_ATTERR_UNLIKELY_ERROR 0x010E /**< ATT Error: Very unlikely error. */ ++#define BLE_GATT_STATUS_ATTERR_INSUF_ENCRYPTION 0x010F /**< ATT Error: Encrypted link required. */ ++#define BLE_GATT_STATUS_ATTERR_UNSUPPORTED_GROUP_TYPE 0x0110 /**< ATT Error: Attribute type is not a supported grouping attribute. */ ++#define BLE_GATT_STATUS_ATTERR_INSUF_RESOURCES 0x0111 /**< ATT Error: Encrypted link required. */ ++#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_BEGIN 0x0112 /**< ATT Error: Reserved for Future Use range #1 begin. */ ++#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_END 0x017F /**< ATT Error: Reserved for Future Use range #1 end. */ ++#define BLE_GATT_STATUS_ATTERR_APP_BEGIN 0x0180 /**< ATT Error: Application range begin. */ ++#define BLE_GATT_STATUS_ATTERR_APP_END 0x019F /**< ATT Error: Application range end. */ ++#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_BEGIN 0x01A0 /**< ATT Error: Reserved for Future Use range #2 begin. */ ++#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_END 0x01DF /**< ATT Error: Reserved for Future Use range #2 end. */ ++#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_BEGIN 0x01E0 /**< ATT Error: Reserved for Future Use range #3 begin. */ ++#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_END 0x01FC /**< ATT Error: Reserved for Future Use range #3 end. */ ++#define BLE_GATT_STATUS_ATTERR_CPS_CCCD_CONFIG_ERROR 0x01FD /**< ATT Common Profile and Service Error: Client Characteristic Configuration Descriptor improperly configured. */ ++#define BLE_GATT_STATUS_ATTERR_CPS_PROC_ALR_IN_PROG 0x01FE /**< ATT Common Profile and Service Error: Procedure Already in Progress. */ ++#define BLE_GATT_STATUS_ATTERR_CPS_OUT_OF_RANGE 0x01FF /**< ATT Common Profile and Service Error: Out Of Range. */ ++/** @} */ ++ ++ ++/** @defgroup BLE_GATT_CPF_FORMATS Characteristic Presentation Formats ++ * @note Found at http://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.gatt.characteristic_presentation_format.xml ++ * @{ */ ++#define BLE_GATT_CPF_FORMAT_RFU 0x00 /**< Reserved For Future Use. */ ++#define BLE_GATT_CPF_FORMAT_BOOLEAN 0x01 /**< Boolean. */ ++#define BLE_GATT_CPF_FORMAT_2BIT 0x02 /**< Unsigned 2-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_NIBBLE 0x03 /**< Unsigned 4-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_UINT8 0x04 /**< Unsigned 8-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_UINT12 0x05 /**< Unsigned 12-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_UINT16 0x06 /**< Unsigned 16-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_UINT24 0x07 /**< Unsigned 24-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_UINT32 0x08 /**< Unsigned 32-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_UINT48 0x09 /**< Unsigned 48-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_UINT64 0x0A /**< Unsigned 64-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_UINT128 0x0B /**< Unsigned 128-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_SINT8 0x0C /**< Signed 2-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_SINT12 0x0D /**< Signed 12-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_SINT16 0x0E /**< Signed 16-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_SINT24 0x0F /**< Signed 24-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_SINT32 0x10 /**< Signed 32-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_SINT48 0x11 /**< Signed 48-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_SINT64 0x12 /**< Signed 64-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_SINT128 0x13 /**< Signed 128-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_FLOAT32 0x14 /**< IEEE-754 32-bit floating point. */ ++#define BLE_GATT_CPF_FORMAT_FLOAT64 0x15 /**< IEEE-754 64-bit floating point. */ ++#define BLE_GATT_CPF_FORMAT_SFLOAT 0x16 /**< IEEE-11073 16-bit SFLOAT. */ ++#define BLE_GATT_CPF_FORMAT_FLOAT 0x17 /**< IEEE-11073 32-bit FLOAT. */ ++#define BLE_GATT_CPF_FORMAT_DUINT16 0x18 /**< IEEE-20601 format. */ ++#define BLE_GATT_CPF_FORMAT_UTF8S 0x19 /**< UTF-8 string. */ ++#define BLE_GATT_CPF_FORMAT_UTF16S 0x1A /**< UTF-16 string. */ ++#define BLE_GATT_CPF_FORMAT_STRUCT 0x1B /**< Opaque Structure. */ ++/** @} */ ++ ++/** @defgroup BLE_GATT_CPF_NAMESPACES GATT Bluetooth Namespaces ++ * @{ ++ */ ++#define BLE_GATT_CPF_NAMESPACE_BTSIG 0x01 /**< Bluetooth SIG defined Namespace. */ ++#define BLE_GATT_CPF_NAMESPACE_DESCRIPTION_UNKNOWN 0x0000 /**< Namespace Description Unknown. */ ++/** @} */ ++ ++/** @} */ ++ ++/** @addtogroup BLE_GATT_STRUCTURES Structures ++ * @{ */ ++ ++/** ++ * @brief BLE GATT initialization parameters. ++ */ ++typedef struct ++{ ++ uint16_t att_mtu; /**< Maximum size of ATT packet the SoftDevice can send or receive. ++ If it is 0 then @ref GATT_MTU_SIZE_DEFAULT will be used. ++ Otherwise @ref GATT_MTU_SIZE_DEFAULT is the minimum value. ++ @mscs ++ @mmsc{@ref BLE_GATTC_MTU_EXCHANGE} ++ @mmsc{@ref BLE_GATTS_MTU_EXCHANGE} ++ @endmscs ++ */ ++} ble_gatt_enable_params_t; ++ ++/**@brief GATT Characteristic Properties. */ ++typedef struct ++{ ++ /* Standard properties */ ++ uint8_t broadcast :1; /**< Broadcasting of the value permitted. */ ++ uint8_t read :1; /**< Reading the value permitted. */ ++ uint8_t write_wo_resp :1; /**< Writing the value with Write Command permitted. */ ++ uint8_t write :1; /**< Writing the value with Write Request permitted. */ ++ uint8_t notify :1; /**< Notications of the value permitted. */ ++ uint8_t indicate :1; /**< Indications of the value permitted. */ ++ uint8_t auth_signed_wr :1; /**< Writing the value with Signed Write Command permitted. */ ++} ble_gatt_char_props_t; ++ ++/**@brief GATT Characteristic Extended Properties. */ ++typedef struct ++{ ++ /* Extended properties */ ++ uint8_t reliable_wr :1; /**< Writing the value with Queued Write operations permitted. */ ++ uint8_t wr_aux :1; /**< Writing the Characteristic User Description descriptor permitted. */ ++} ble_gatt_char_ext_props_t; ++ ++/** @} */ ++ ++#ifdef __cplusplus ++} ++#endif ++#endif // BLE_GATT_H__ ++ ++/** @} */ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_gattc.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_gattc.h +new file mode 100644 +index 0000000..859dcdf +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_gattc.h +@@ -0,0 +1,660 @@ ++/* ++ * Copyright (c) Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form must reproduce the above copyright notice, this ++ * list of conditions and the following disclaimer in the documentation and/or ++ * other materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other ++ * contributors to this software may be used to endorse or promote products ++ * derived from this software without specific prior written permission. ++ * ++ * 4. This software must only be used in a processor manufactured by Nordic ++ * Semiconductor ASA, or in a processor manufactured by a third party that ++ * is used in combination with a processor manufactured by Nordic Semiconductor. ++ * ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ++ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ++ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ * ++ */ ++ ++/** ++ @addtogroup BLE_GATTC Generic Attribute Profile (GATT) Client ++ @{ ++ @brief Definitions and prototypes for the GATT Client interface. ++ */ ++ ++#ifndef BLE_GATTC_H__ ++#define BLE_GATTC_H__ ++ ++#include "ble_gatt.h" ++#include "ble_types.h" ++#include "ble_ranges.h" ++#include "nrf_svc.h" ++#include "nrf_error.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/** @addtogroup BLE_GATTC_ENUMERATIONS Enumerations ++ * @{ */ ++ ++/**@brief GATTC API SVC numbers. */ ++enum BLE_GATTC_SVCS ++{ ++ SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER = BLE_GATTC_SVC_BASE, /**< Primary Service Discovery. */ ++ SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, /**< Relationship Discovery. */ ++ SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, /**< Characteristic Discovery. */ ++ SD_BLE_GATTC_DESCRIPTORS_DISCOVER, /**< Characteristic Descriptor Discovery. */ ++ SD_BLE_GATTC_ATTR_INFO_DISCOVER, /**< Attribute Information Discovery. */ ++ SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, /**< Read Characteristic Value by UUID. */ ++ SD_BLE_GATTC_READ, /**< Generic read. */ ++ SD_BLE_GATTC_CHAR_VALUES_READ, /**< Read multiple Characteristic Values. */ ++ SD_BLE_GATTC_WRITE, /**< Generic write. */ ++ SD_BLE_GATTC_HV_CONFIRM, /**< Handle Value Confirmation. */ ++ SD_BLE_GATTC_EXCHANGE_MTU_REQUEST, /**< Exchange MTU Request. */ ++}; ++ ++/** ++ * @brief GATT Client Event IDs. ++ */ ++enum BLE_GATTC_EVTS ++{ ++ BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP = BLE_GATTC_EVT_BASE, /**< Primary Service Discovery Response event. \n See @ref ble_gattc_evt_prim_srvc_disc_rsp_t. */ ++ BLE_GATTC_EVT_REL_DISC_RSP, /**< Relationship Discovery Response event. \n See @ref ble_gattc_evt_rel_disc_rsp_t. */ ++ BLE_GATTC_EVT_CHAR_DISC_RSP, /**< Characteristic Discovery Response event. \n See @ref ble_gattc_evt_char_disc_rsp_t. */ ++ BLE_GATTC_EVT_DESC_DISC_RSP, /**< Descriptor Discovery Response event. \n See @ref ble_gattc_evt_desc_disc_rsp_t. */ ++ BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, /**< Attribute Information Response event. \n See @ref ble_gattc_evt_attr_info_disc_rsp_t. */ ++ BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP, /**< Read By UUID Response event. \n See @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t. */ ++ BLE_GATTC_EVT_READ_RSP, /**< Read Response event. \n See @ref ble_gattc_evt_read_rsp_t. */ ++ BLE_GATTC_EVT_CHAR_VALS_READ_RSP, /**< Read multiple Response event. \n See @ref ble_gattc_evt_char_vals_read_rsp_t. */ ++ BLE_GATTC_EVT_WRITE_RSP, /**< Write Response event. \n See @ref ble_gattc_evt_write_rsp_t. */ ++ BLE_GATTC_EVT_HVX, /**< Handle Value Notification or Indication event. \n Confirm indication with @ref sd_ble_gattc_hv_confirm. \n See @ref ble_gattc_evt_hvx_t. */ ++ BLE_GATTC_EVT_EXCHANGE_MTU_RSP, /**< Exchange MTU Response event. \n See @ref ble_gattc_evt_exchange_mtu_rsp_t. */ ++ BLE_GATTC_EVT_TIMEOUT /**< Timeout event. \n See @ref ble_gattc_evt_timeout_t. */ ++}; ++ ++/** @} */ ++ ++/** @addtogroup BLE_GATTC_DEFINES Defines ++ * @{ */ ++ ++/** @defgroup BLE_ERRORS_GATTC SVC return values specific to GATTC ++ * @{ */ ++#define BLE_ERROR_GATTC_PROC_NOT_PERMITTED (NRF_GATTC_ERR_BASE + 0x000) /**< Procedure not Permitted. */ ++/** @} */ ++ ++/** @defgroup BLE_GATTC_ATTR_INFO_FORMAT Attribute Information Formats ++ * @{ */ ++#define BLE_GATTC_ATTR_INFO_FORMAT_16BIT 1 /**< 16-bit Attribute Information Format. */ ++#define BLE_GATTC_ATTR_INFO_FORMAT_128BIT 2 /**< 128-bit Attribute Information Format. */ ++/** @} */ ++ ++/** @} */ ++ ++/** @addtogroup BLE_GATTC_STRUCTURES Structures ++ * @{ */ ++ ++/**@brief Operation Handle Range. */ ++typedef struct ++{ ++ uint16_t start_handle; /**< Start Handle. */ ++ uint16_t end_handle; /**< End Handle. */ ++} ble_gattc_handle_range_t; ++ ++ ++/**@brief GATT service. */ ++typedef struct ++{ ++ ble_uuid_t uuid; /**< Service UUID. */ ++ ble_gattc_handle_range_t handle_range; /**< Service Handle Range. */ ++} ble_gattc_service_t; ++ ++ ++/**@brief GATT include. */ ++typedef struct ++{ ++ uint16_t handle; /**< Include Handle. */ ++ ble_gattc_service_t included_srvc; /**< Handle of the included service. */ ++} ble_gattc_include_t; ++ ++ ++/**@brief GATT characteristic. */ ++typedef struct ++{ ++ ble_uuid_t uuid; /**< Characteristic UUID. */ ++ ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ ++ uint8_t char_ext_props : 1; /**< Extended properties present. */ ++ uint16_t handle_decl; /**< Handle of the Characteristic Declaration. */ ++ uint16_t handle_value; /**< Handle of the Characteristic Value. */ ++} ble_gattc_char_t; ++ ++ ++/**@brief GATT descriptor. */ ++typedef struct ++{ ++ uint16_t handle; /**< Descriptor Handle. */ ++ ble_uuid_t uuid; /**< Descriptor UUID. */ ++} ble_gattc_desc_t; ++ ++ ++/**@brief Write Parameters. */ ++typedef struct ++{ ++ uint8_t write_op; /**< Write Operation to be performed, see @ref BLE_GATT_WRITE_OPS. */ ++ uint8_t flags; /**< Flags, see @ref BLE_GATT_EXEC_WRITE_FLAGS. */ ++ uint16_t handle; /**< Handle to the attribute to be written. */ ++ uint16_t offset; /**< Offset in bytes. @note For WRITE_CMD and WRITE_REQ, offset must be 0. */ ++ uint16_t len; /**< Length of data in bytes. */ ++ uint8_t const *p_value; /**< Pointer to the value data. */ ++} ble_gattc_write_params_t; ++ ++/**@brief Attribute Information for 16-bit Attribute UUID. */ ++typedef struct ++{ ++ uint16_t handle; /**< Attribute handle. */ ++ ble_uuid_t uuid; /**< 16-bit Attribute UUID. */ ++} ble_gattc_attr_info16_t; ++ ++/**@brief Attribute Information for 128-bit Attribute UUID. */ ++typedef struct ++{ ++ uint16_t handle; /**< Attribute handle. */ ++ ble_uuid128_t uuid; /**< 128-bit Attribute UUID. */ ++} ble_gattc_attr_info128_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP. */ ++typedef struct ++{ ++ uint16_t count; /**< Service count. */ ++ ble_gattc_service_t services[1]; /**< Service data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++} ble_gattc_evt_prim_srvc_disc_rsp_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_REL_DISC_RSP. */ ++typedef struct ++{ ++ uint16_t count; /**< Include count. */ ++ ble_gattc_include_t includes[1]; /**< Include data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++} ble_gattc_evt_rel_disc_rsp_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_DISC_RSP. */ ++typedef struct ++{ ++ uint16_t count; /**< Characteristic count. */ ++ ble_gattc_char_t chars[1]; /**< Characteristic data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++} ble_gattc_evt_char_disc_rsp_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_DESC_DISC_RSP. */ ++typedef struct ++{ ++ uint16_t count; /**< Descriptor count. */ ++ ble_gattc_desc_t descs[1]; /**< Descriptor data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++} ble_gattc_evt_desc_disc_rsp_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP. */ ++typedef struct ++{ ++ uint16_t count; /**< Attribute count. */ ++ uint8_t format; /**< Attribute information format, see @ref BLE_GATTC_ATTR_INFO_FORMAT. */ ++ union { ++ ble_gattc_attr_info16_t attr_info16[1]; /**< Attribute information for 16-bit Attribute UUID. ++ @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++ ble_gattc_attr_info128_t attr_info128[1]; /**< Attribute information for 128-bit Attribute UUID. ++ @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++ } info; /**< Attribute information union. */ ++} ble_gattc_evt_attr_info_disc_rsp_t; ++ ++/**@brief GATT read by UUID handle value pair. */ ++typedef struct ++{ ++ uint16_t handle; /**< Attribute Handle. */ ++ uint8_t *p_value; /**< Pointer to the Attribute Value, length is available in @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t::value_len. */ ++} ble_gattc_handle_value_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP. */ ++typedef struct ++{ ++ uint16_t count; /**< Handle-Value Pair Count. */ ++ uint16_t value_len; /**< Length of the value in Handle-Value(s) list. */ ++ uint8_t handle_value[1]; /**< Handle-Value(s) list. To iterate through the list use @ref sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter. ++ @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++} ble_gattc_evt_char_val_by_uuid_read_rsp_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_READ_RSP. */ ++typedef struct ++{ ++ uint16_t handle; /**< Attribute Handle. */ ++ uint16_t offset; /**< Offset of the attribute data. */ ++ uint16_t len; /**< Attribute data length. */ ++ uint8_t data[1]; /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++} ble_gattc_evt_read_rsp_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP. */ ++typedef struct ++{ ++ uint16_t len; /**< Concatenated Attribute values length. */ ++ uint8_t values[1]; /**< Attribute values. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++} ble_gattc_evt_char_vals_read_rsp_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_WRITE_RSP. */ ++typedef struct ++{ ++ uint16_t handle; /**< Attribute Handle. */ ++ uint8_t write_op; /**< Type of write operation, see @ref BLE_GATT_WRITE_OPS. */ ++ uint16_t offset; /**< Data offset. */ ++ uint16_t len; /**< Data length. */ ++ uint8_t data[1]; /**< Data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++} ble_gattc_evt_write_rsp_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_HVX. */ ++typedef struct ++{ ++ uint16_t handle; /**< Handle to which the HVx operation applies. */ ++ uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ ++ uint16_t len; /**< Attribute data length. */ ++ uint8_t data[1]; /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++} ble_gattc_evt_hvx_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. */ ++typedef struct ++{ ++ uint16_t server_rx_mtu; /**< Server RX MTU size. */ ++} ble_gattc_evt_exchange_mtu_rsp_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_TIMEOUT. */ ++typedef struct ++{ ++ uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ ++} ble_gattc_evt_timeout_t; ++ ++/**@brief GATTC event structure. */ ++typedef struct ++{ ++ uint16_t conn_handle; /**< Connection Handle on which event occured. */ ++ uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ ++ uint16_t error_handle; /**< In case of error: The handle causing the error. In all other cases @ref BLE_GATT_HANDLE_INVALID. */ ++ union ++ { ++ ble_gattc_evt_prim_srvc_disc_rsp_t prim_srvc_disc_rsp; /**< Primary Service Discovery Response Event Parameters. */ ++ ble_gattc_evt_rel_disc_rsp_t rel_disc_rsp; /**< Relationship Discovery Response Event Parameters. */ ++ ble_gattc_evt_char_disc_rsp_t char_disc_rsp; /**< Characteristic Discovery Response Event Parameters. */ ++ ble_gattc_evt_desc_disc_rsp_t desc_disc_rsp; /**< Descriptor Discovery Response Event Parameters. */ ++ ble_gattc_evt_char_val_by_uuid_read_rsp_t char_val_by_uuid_read_rsp; /**< Characteristic Value Read by UUID Response Event Parameters. */ ++ ble_gattc_evt_read_rsp_t read_rsp; /**< Read Response Event Parameters. */ ++ ble_gattc_evt_char_vals_read_rsp_t char_vals_read_rsp; /**< Characteristic Values Read Response Event Parameters. */ ++ ble_gattc_evt_write_rsp_t write_rsp; /**< Write Response Event Parameters. */ ++ ble_gattc_evt_hvx_t hvx; /**< Handle Value Notification/Indication Event Parameters. */ ++ ble_gattc_evt_exchange_mtu_rsp_t exchange_mtu_rsp; /**< Exchange MTU Response Event Parameters. */ ++ ble_gattc_evt_timeout_t timeout; /**< Timeout Event Parameters. */ ++ ble_gattc_evt_attr_info_disc_rsp_t attr_info_disc_rsp; /**< Attribute Information Discovery Event Parameters. */ ++ } params; /**< Event Parameters. @note Only valid if @ref gatt_status == @ref BLE_GATT_STATUS_SUCCESS. */ ++} ble_gattc_evt_t; ++/** @} */ ++ ++/** @addtogroup BLE_GATTC_FUNCTIONS Functions ++ * @{ */ ++ ++/**@brief Initiate or continue a GATT Primary Service Discovery procedure. ++ * ++ * @details This function initiates or resumes a Primary Service discovery procedure, starting from the supplied handle. ++ * If the last service has not been reached, this function must be called again with an updated start handle value to continue the search. ++ * ++ * @note If any of the discovered services have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with ++ * type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. ++ * ++ * @events ++ * @event{@ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTC_PRIM_SRVC_DISC_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] start_handle Handle to start searching from. ++ * @param[in] p_srvc_uuid Pointer to the service UUID to be found. If it is NULL, all primary services will be returned. ++ * ++ * @retval ::NRF_SUCCESS Successfully started or resumed the Primary Service Discovery procedure. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. ++ */ ++SVCALL(SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER, uint32_t, sd_ble_gattc_primary_services_discover(uint16_t conn_handle, uint16_t start_handle, ble_uuid_t const *p_srvc_uuid)); ++ ++ ++/**@brief Initiate or continue a GATT Relationship Discovery procedure. ++ * ++ * @details This function initiates or resumes the Find Included Services sub-procedure. If the last included service has not been reached, ++ * this must be called again with an updated handle range to continue the search. ++ * ++ * @events ++ * @event{@ref BLE_GATTC_EVT_REL_DISC_RSP} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTC_REL_DISC_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. ++ * ++ * @retval ::NRF_SUCCESS Successfully started or resumed the Relationship Discovery procedure. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. ++ */ ++SVCALL(SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, uint32_t, sd_ble_gattc_relationships_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); ++ ++ ++/**@brief Initiate or continue a GATT Characteristic Discovery procedure. ++ * ++ * @details This function initiates or resumes a Characteristic discovery procedure. If the last Characteristic has not been reached, ++ * this must be called again with an updated handle range to continue the discovery. ++ * ++ * @note If any of the discovered characteristics have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with ++ * type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. ++ * ++ * @events ++ * @event{@ref BLE_GATTC_EVT_CHAR_DISC_RSP} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTC_CHAR_DISC_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. ++ * ++ * @retval ::NRF_SUCCESS Successfully started or resumed the Characteristic Discovery procedure. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. ++ */ ++SVCALL(SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, uint32_t, sd_ble_gattc_characteristics_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); ++ ++ ++/**@brief Initiate or continue a GATT Characteristic Descriptor Discovery procedure. ++ * ++ * @details This function initiates or resumes a Characteristic Descriptor discovery procedure. If the last Descriptor has not been reached, ++ * this must be called again with an updated handle range to continue the discovery. ++ * ++ * @events ++ * @event{@ref BLE_GATTC_EVT_DESC_DISC_RSP} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTC_DESC_DISC_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] p_handle_range A pointer to the range of handles of the Characteristic to perform this procedure on. ++ * ++ * @retval ::NRF_SUCCESS Successfully started or resumed the Descriptor Discovery procedure. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. ++ */ ++SVCALL(SD_BLE_GATTC_DESCRIPTORS_DISCOVER, uint32_t, sd_ble_gattc_descriptors_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); ++ ++ ++/**@brief Initiate or continue a GATT Read using Characteristic UUID procedure. ++ * ++ * @details This function initiates or resumes a Read using Characteristic UUID procedure. If the last Characteristic has not been reached, ++ * this must be called again with an updated handle range to continue the discovery. ++ * ++ * @events ++ * @event{@ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTC_READ_UUID_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] p_uuid Pointer to a Characteristic value UUID to read. ++ * @param[in] p_handle_range A pointer to the range of handles to perform this procedure on. ++ * ++ * @retval ::NRF_SUCCESS Successfully started or resumed the Read using Characteristic UUID procedure. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. ++ */ ++SVCALL(SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, uint32_t, sd_ble_gattc_char_value_by_uuid_read(uint16_t conn_handle, ble_uuid_t const *p_uuid, ble_gattc_handle_range_t const *p_handle_range)); ++ ++ ++/**@brief Initiate or continue a GATT Read (Long) Characteristic or Descriptor procedure. ++ * ++ * @details This function initiates or resumes a GATT Read (Long) Characteristic or Descriptor procedure. If the Characteristic or Descriptor ++ * to be read is longer than ATT_MTU - 1, this function must be called multiple times with appropriate offset to read the ++ * complete value. ++ * ++ * @events ++ * @event{@ref BLE_GATTC_EVT_READ_RSP} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTC_VALUE_READ_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] handle The handle of the attribute to be read. ++ * @param[in] offset Offset into the attribute value to be read. ++ * ++ * @retval ::NRF_SUCCESS Successfully started or resumed the Read (Long) procedure. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. ++ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. ++ */ ++SVCALL(SD_BLE_GATTC_READ, uint32_t, sd_ble_gattc_read(uint16_t conn_handle, uint16_t handle, uint16_t offset)); ++ ++ ++/**@brief Initiate a GATT Read Multiple Characteristic Values procedure. ++ * ++ * @details This function initiates a GATT Read Multiple Characteristic Values procedure. ++ * ++ * @events ++ * @event{@ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTC_READ_MULT_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] p_handles A pointer to the handle(s) of the attribute(s) to be read. ++ * @param[in] handle_count The number of handles in p_handles. ++ * ++ * @retval ::NRF_SUCCESS Successfully started the Read Multiple Characteristic Values procedure. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. ++ */ ++SVCALL(SD_BLE_GATTC_CHAR_VALUES_READ, uint32_t, sd_ble_gattc_char_values_read(uint16_t conn_handle, uint16_t const *p_handles, uint16_t handle_count)); ++ ++ ++/**@brief Perform a Write (Characteristic Value or Descriptor, with or without response, signed or not, long or reliable) procedure. ++ * ++ * @details This function can perform all write procedures described in GATT. ++ * ++ * @note It is important to note that a write without response will consume an application buffer, and will therefore ++ * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. A write (with response) on the other hand will use the ++ * standard client internal buffer and thus will only generate a @ref BLE_GATTC_EVT_WRITE_RSP event as soon as the write response ++ * has been received from the peer. Please see the documentation of @ref sd_ble_tx_packet_count_get for more details. ++ * ++ * @events ++ * @event{@ref BLE_GATTC_EVT_WRITE_RSP, Generated when using write request or queued writes.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTC_VALUE_WRITE_MSC} ++ * @mmsc{@ref BLE_GATTC_VALUE_LONG_WRITE_MSC} ++ * @mmsc{@ref BLE_GATTC_VALUE_RELIABLE_WRITE_MSC} ++ * @mmsc{@ref BLE_COMMON_APP_BUFF_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] p_write_params A pointer to a write parameters structure. ++ * ++ * @retval ::NRF_SUCCESS Successfully started the Write procedure. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. ++ * @retval ::NRF_ERROR_BUSY Procedure already in progress. ++ * @retval ::BLE_ERROR_NO_TX_PACKETS No available application packets for this connection. ++ */ ++SVCALL(SD_BLE_GATTC_WRITE, uint32_t, sd_ble_gattc_write(uint16_t conn_handle, ble_gattc_write_params_t const *p_write_params)); ++ ++ ++/**@brief Send a Handle Value Confirmation to the GATT Server. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTC_HVI_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] handle The handle of the attribute in the indication. ++ * ++ * @retval ::NRF_SUCCESS Successfully queued the Handle Value Confirmation for transmission. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no Indication pending to be confirmed. ++ * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle. ++ */ ++SVCALL(SD_BLE_GATTC_HV_CONFIRM, uint32_t, sd_ble_gattc_hv_confirm(uint16_t conn_handle, uint16_t handle)); ++ ++/**@brief Discovers information about a range of attributes on a GATT server. ++ * ++ * @events ++ * @event{@ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, Generated when information about a range of attributes has been received.} ++ * @endevents ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] p_handle_range The range of handles to request information about. ++ * ++ * @retval ::NRF_SUCCESS Successfully started an attribute information discovery procedure. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. ++ */ ++SVCALL(SD_BLE_GATTC_ATTR_INFO_DISCOVER, uint32_t, sd_ble_gattc_attr_info_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * p_handle_range)); ++ ++/**@brief Start an ATT_MTU exchange by sending an Exchange MTU Request to the server. ++ * ++ * @details The SoftDevice sets ATT_MTU to the minimum of: ++ * - The Client RX MTU value, and ++ * - The Server RX MTU value from @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. ++ * ++ * However, the SoftDevice never sets ATT_MTU lower than @ref GATT_MTU_SIZE_DEFAULT. ++ * ++ * @events ++ * @event{@ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP} ++ * @event{@ref BLE_EVT_DATA_LENGTH_CHANGED, Generated if a data length update procedure is performed after the ATT_MTU exchange.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTC_MTU_EXCHANGE} ++ * @endmscs ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] client_rx_mtu Client RX MTU size. ++ * - The minimum value is @ref GATT_MTU_SIZE_DEFAULT. ++ * - The maximum value is @ref ble_gatt_enable_params_t::att_mtu. ++ * - The value must be equal to Server RX MTU size given in @ref sd_ble_gatts_exchange_mtu_reply ++ * if an ATT_MTU exchange has already been performed in the other direction. ++ * ++ * @retval ::NRF_SUCCESS Successfully sent request to the server. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state or an ATT_MTU exchange was already requested once. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid Client RX MTU size supplied. ++ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. ++ */ ++SVCALL(SD_BLE_GATTC_EXCHANGE_MTU_REQUEST, uint32_t, sd_ble_gattc_exchange_mtu_request(uint16_t conn_handle, uint16_t client_rx_mtu)); ++ ++/**@brief Iterate through Handle-Value(s) list in @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. ++ * ++ * @param[in] p_gattc_evt Pointer to event buffer containing @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. ++ * @note If the buffer contains different event, behavior is undefined. ++ * @param[in,out] p_iter Iterator, points to @ref ble_gattc_handle_value_t structure that will be filled in with ++ * the next Handle-Value pair in each iteration. If the function returns other than ++ * @ref NRF_SUCCESS, it will not be changed. ++ * - To start iteration, initialize the structure to zero. ++ * - To continue, pass the value from previous iteration. ++ * ++ * \code ++ * ble_gattc_handle_value_t iter; ++ * memset(&iter, 0, sizeof(ble_gattc_handle_value_t)); ++ * while (sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(&ble_evt.evt.gattc_evt, &iter) == NRF_SUCCESS) ++ * { ++ * app_handle = iter.handle; ++ * memcpy(app_value, iter.p_value, ble_evt.evt.gattc_evt.params.char_val_by_uuid_read_rsp.value_len); ++ * } ++ * \endcode ++ * ++ * @retval ::NRF_SUCCESS Successfully retrieved the next Handle-Value pair. ++ * @retval ::NRF_ERROR_NOT_FOUND No more Handle-Value pairs available in the list. ++ */ ++static inline uint32_t sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(ble_gattc_evt_t *p_gattc_evt, ble_gattc_handle_value_t *p_iter) ++{ ++ uint32_t value_len = p_gattc_evt->params.char_val_by_uuid_read_rsp.value_len; ++ uint8_t *p_first = p_gattc_evt->params.char_val_by_uuid_read_rsp.handle_value; ++ uint8_t *p_next = p_iter->p_value ? p_iter->p_value + value_len : p_first; ++ ++ if ((p_next - p_first) / (sizeof(uint16_t) + value_len) < p_gattc_evt->params.char_val_by_uuid_read_rsp.count) ++ { ++ p_iter->handle = (uint16_t)p_next[1] << 8 | p_next[0]; ++ p_iter->p_value = p_next + sizeof(uint16_t); ++ return NRF_SUCCESS; ++ } ++ else ++ { ++ return NRF_ERROR_NOT_FOUND; ++ } ++} ++ ++/** @} */ ++ ++#ifdef __cplusplus ++} ++#endif ++#endif /* BLE_GATTC_H__ */ ++ ++/** ++ @} ++*/ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_gatts.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_gatts.h +new file mode 100644 +index 0000000..535332b +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_gatts.h +@@ -0,0 +1,778 @@ ++/* ++ * Copyright (c) Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form must reproduce the above copyright notice, this ++ * list of conditions and the following disclaimer in the documentation and/or ++ * other materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other ++ * contributors to this software may be used to endorse or promote products ++ * derived from this software without specific prior written permission. ++ * ++ * 4. This software must only be used in a processor manufactured by Nordic ++ * Semiconductor ASA, or in a processor manufactured by a third party that ++ * is used in combination with a processor manufactured by Nordic Semiconductor. ++ * ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ++ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ++ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ * ++ */ ++ ++/** ++ @addtogroup BLE_GATTS Generic Attribute Profile (GATT) Server ++ @{ ++ @brief Definitions and prototypes for the GATTS interface. ++ */ ++ ++#ifndef BLE_GATTS_H__ ++#define BLE_GATTS_H__ ++ ++#include "ble_types.h" ++#include "ble_ranges.h" ++#include "ble_l2cap.h" ++#include "ble_gap.h" ++#include "ble_gatt.h" ++#include "nrf_svc.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/** @addtogroup BLE_GATTS_ENUMERATIONS Enumerations ++ * @{ */ ++ ++/** ++ * @brief GATTS API SVC numbers. ++ */ ++enum BLE_GATTS_SVCS ++{ ++ SD_BLE_GATTS_SERVICE_ADD = BLE_GATTS_SVC_BASE, /**< Add a service. */ ++ SD_BLE_GATTS_INCLUDE_ADD, /**< Add an included service. */ ++ SD_BLE_GATTS_CHARACTERISTIC_ADD, /**< Add a characteristic. */ ++ SD_BLE_GATTS_DESCRIPTOR_ADD, /**< Add a generic attribute. */ ++ SD_BLE_GATTS_VALUE_SET, /**< Set an attribute value. */ ++ SD_BLE_GATTS_VALUE_GET, /**< Get an attribute value. */ ++ SD_BLE_GATTS_HVX, /**< Handle Value Notification or Indication. */ ++ SD_BLE_GATTS_SERVICE_CHANGED, /**< Perform a Service Changed Indication to one or more peers. */ ++ SD_BLE_GATTS_RW_AUTHORIZE_REPLY, /**< Reply to an authorization request for a read or write operation on one or more attributes. */ ++ SD_BLE_GATTS_SYS_ATTR_SET, /**< Set the persistent system attributes for a connection. */ ++ SD_BLE_GATTS_SYS_ATTR_GET, /**< Retrieve the persistent system attributes. */ ++ SD_BLE_GATTS_INITIAL_USER_HANDLE_GET, /**< Retrieve the first valid user handle. */ ++ SD_BLE_GATTS_ATTR_GET, /**< Retrieve the UUID and/or metadata of an attribute. */ ++ SD_BLE_GATTS_EXCHANGE_MTU_REPLY /**< Reply to Exchange MTU Request. */ ++}; ++ ++/** ++ * @brief GATT Server Event IDs. ++ */ ++enum BLE_GATTS_EVTS ++{ ++ BLE_GATTS_EVT_WRITE = BLE_GATTS_EVT_BASE, /**< Write operation performed. \n See @ref ble_gatts_evt_write_t. */ ++ BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST, /**< Read/Write Authorization request. \n Reply with @ref sd_ble_gatts_rw_authorize_reply. \n See @ref ble_gatts_evt_rw_authorize_request_t. */ ++ BLE_GATTS_EVT_SYS_ATTR_MISSING, /**< A persistent system attribute access is pending. \n Respond with @ref sd_ble_gatts_sys_attr_set. \n See @ref ble_gatts_evt_sys_attr_missing_t. */ ++ BLE_GATTS_EVT_HVC, /**< Handle Value Confirmation. \n See @ref ble_gatts_evt_hvc_t. */ ++ BLE_GATTS_EVT_SC_CONFIRM, /**< Service Changed Confirmation. No additional event structure applies. */ ++ BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST, /**< Exchange MTU Request. \n Reply with @ref sd_ble_gatts_exchange_mtu_reply. \n See @ref ble_gatts_evt_exchange_mtu_request_t. */ ++ BLE_GATTS_EVT_TIMEOUT /**< Peer failed to resonpond to an ATT request in time. \n See @ref ble_gatts_evt_timeout_t. */ ++}; ++/** @} */ ++ ++/** @addtogroup BLE_GATTS_DEFINES Defines ++ * @{ */ ++ ++/** @defgroup BLE_ERRORS_GATTS SVC return values specific to GATTS ++ * @{ */ ++#define BLE_ERROR_GATTS_INVALID_ATTR_TYPE (NRF_GATTS_ERR_BASE + 0x000) /**< Invalid attribute type. */ ++#define BLE_ERROR_GATTS_SYS_ATTR_MISSING (NRF_GATTS_ERR_BASE + 0x001) /**< System Attributes missing. */ ++/** @} */ ++ ++/** @defgroup BLE_GATTS_ATTR_LENS_MAX Maximum attribute lengths ++ * @{ */ ++#define BLE_GATTS_FIX_ATTR_LEN_MAX (510) /**< Maximum length for fixed length Attribute Values. */ ++#define BLE_GATTS_VAR_ATTR_LEN_MAX (512) /**< Maximum length for variable length Attribute Values. */ ++/** @} */ ++ ++/** @defgroup BLE_GATTS_SRVC_TYPES GATT Server Service Types ++ * @{ */ ++#define BLE_GATTS_SRVC_TYPE_INVALID 0x00 /**< Invalid Service Type. */ ++#define BLE_GATTS_SRVC_TYPE_PRIMARY 0x01 /**< Primary Service. */ ++#define BLE_GATTS_SRVC_TYPE_SECONDARY 0x02 /**< Secondary Type. */ ++/** @} */ ++ ++ ++/** @defgroup BLE_GATTS_ATTR_TYPES GATT Server Attribute Types ++ * @{ */ ++#define BLE_GATTS_ATTR_TYPE_INVALID 0x00 /**< Invalid Attribute Type. */ ++#define BLE_GATTS_ATTR_TYPE_PRIM_SRVC_DECL 0x01 /**< Primary Service Declaration. */ ++#define BLE_GATTS_ATTR_TYPE_SEC_SRVC_DECL 0x02 /**< Secondary Service Declaration. */ ++#define BLE_GATTS_ATTR_TYPE_INC_DECL 0x03 /**< Include Declaration. */ ++#define BLE_GATTS_ATTR_TYPE_CHAR_DECL 0x04 /**< Characteristic Declaration. */ ++#define BLE_GATTS_ATTR_TYPE_CHAR_VAL 0x05 /**< Characteristic Value. */ ++#define BLE_GATTS_ATTR_TYPE_DESC 0x06 /**< Descriptor. */ ++#define BLE_GATTS_ATTR_TYPE_OTHER 0x07 /**< Other, non-GATT specific type. */ ++/** @} */ ++ ++ ++/** @defgroup BLE_GATTS_OPS GATT Server Operations ++ * @{ */ ++#define BLE_GATTS_OP_INVALID 0x00 /**< Invalid Operation. */ ++#define BLE_GATTS_OP_WRITE_REQ 0x01 /**< Write Request. */ ++#define BLE_GATTS_OP_WRITE_CMD 0x02 /**< Write Command. */ ++#define BLE_GATTS_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ ++#define BLE_GATTS_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ ++#define BLE_GATTS_OP_EXEC_WRITE_REQ_CANCEL 0x05 /**< Execute Write Request: Cancel all prepared writes. */ ++#define BLE_GATTS_OP_EXEC_WRITE_REQ_NOW 0x06 /**< Execute Write Request: Immediately execute all prepared writes. */ ++/** @} */ ++ ++/** @defgroup BLE_GATTS_VLOCS GATT Value Locations ++ * @{ */ ++#define BLE_GATTS_VLOC_INVALID 0x00 /**< Invalid Location. */ ++#define BLE_GATTS_VLOC_STACK 0x01 /**< Attribute Value is located in stack memory, no user memory is required. */ ++#define BLE_GATTS_VLOC_USER 0x02 /**< Attribute Value is located in user memory. This requires the user to maintain a valid buffer through the lifetime of the attribute, since the stack ++ will read and write directly to the memory using the pointer provided in the APIs. There are no alignment requirements for the buffer. */ ++/** @} */ ++ ++/** @defgroup BLE_GATTS_AUTHORIZE_TYPES GATT Server Authorization Types ++ * @{ */ ++#define BLE_GATTS_AUTHORIZE_TYPE_INVALID 0x00 /**< Invalid Type. */ ++#define BLE_GATTS_AUTHORIZE_TYPE_READ 0x01 /**< Authorize a Read Operation. */ ++#define BLE_GATTS_AUTHORIZE_TYPE_WRITE 0x02 /**< Authorize a Write Request Operation. */ ++/** @} */ ++ ++/** @defgroup BLE_GATTS_SYS_ATTR_FLAGS System Attribute Flags ++ * @{ */ ++#define BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS (1 << 0) /**< Restrict system attributes to system services only. */ ++#define BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS (1 << 1) /**< Restrict system attributes to user services only. */ ++/** @} */ ++ ++/** @defgroup BLE_GATTS_ATTR_TAB_SIZE Attribute Table size ++ * @{ ++ */ ++#define BLE_GATTS_ATTR_TAB_SIZE_MIN 248 /**< Minimum Attribute Table size */ ++#define BLE_GATTS_ATTR_TAB_SIZE_DEFAULT 0x0000 /**< Default Attribute Table size (0x580 bytes for this version of the SoftDevice). */ ++/** @} */ ++ ++/** @} */ ++ ++/** @addtogroup BLE_GATTS_STRUCTURES Structures ++ * @{ */ ++ ++/** ++ * @brief BLE GATTS initialization parameters. ++ */ ++typedef struct ++{ ++ uint8_t service_changed:1; /**< Include the Service Changed characteristic in the Attribute Table. */ ++ uint32_t attr_tab_size; /**< Attribute Table size in bytes. The size must be a multiple of 4. @ref BLE_GATTS_ATTR_TAB_SIZE_DEFAULT is used to set the default size. */ ++} ble_gatts_enable_params_t; ++ ++/**@brief Attribute metadata. */ ++typedef struct ++{ ++ ble_gap_conn_sec_mode_t read_perm; /**< Read permissions. */ ++ ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ ++ uint8_t vlen :1; /**< Variable length attribute. */ ++ uint8_t vloc :2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ ++ uint8_t rd_auth :1; /**< Read authorization and value will be requested from the application on every read operation. */ ++ uint8_t wr_auth :1; /**< Write authorization will be requested from the application on every Write Request operation (but not Write Command). */ ++} ble_gatts_attr_md_t; ++ ++ ++/**@brief GATT Attribute. */ ++typedef struct ++{ ++ ble_uuid_t *p_uuid; /**< Pointer to the attribute UUID. */ ++ ble_gatts_attr_md_t *p_attr_md; /**< Pointer to the attribute metadata structure. */ ++ uint16_t init_len; /**< Initial attribute value length in bytes. */ ++ uint16_t init_offs; /**< Initial attribute value offset in bytes. If different from zero, the first init_offs bytes of the attribute value will be left uninitialized. */ ++ uint16_t max_len; /**< Maximum attribute value length in bytes, see @ref BLE_GATTS_ATTR_LENS_MAX for maximum values. */ ++ uint8_t* p_value; /**< Pointer to the attribute data. Please note that if the @ref BLE_GATTS_VLOC_USER value location is selected in the attribute metadata, this will have to point to a buffer ++ that remains valid through the lifetime of the attribute. This excludes usage of automatic variables that may go out of scope or any other temporary location. ++ The stack may access that memory directly without the application's knowledge. For writable characteristics, this value must not be a location in flash memory.*/ ++} ble_gatts_attr_t; ++ ++/**@brief GATT Attribute Value. */ ++typedef struct ++{ ++ uint16_t len; /**< Length in bytes to be written or read. Length in bytes written or read after successful return.*/ ++ uint16_t offset; /**< Attribute value offset. */ ++ uint8_t *p_value; /**< Pointer to where value is stored or will be stored. ++ If value is stored in user memory, only the attribute length is updated when p_value == NULL. ++ Set to NULL when reading to obtain the complete length of the attribute value */ ++} ble_gatts_value_t; ++ ++ ++/**@brief GATT Characteristic Presentation Format. */ ++typedef struct ++{ ++ uint8_t format; /**< Format of the value, see @ref BLE_GATT_CPF_FORMATS. */ ++ int8_t exponent; /**< Exponent for integer data types. */ ++ uint16_t unit; /**< Unit from Bluetooth Assigned Numbers. */ ++ uint8_t name_space; /**< Namespace from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ ++ uint16_t desc; /**< Namespace description from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ ++} ble_gatts_char_pf_t; ++ ++ ++/**@brief GATT Characteristic metadata. */ ++typedef struct ++{ ++ ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ ++ ble_gatt_char_ext_props_t char_ext_props; /**< Characteristic Extended Properties. */ ++ uint8_t *p_char_user_desc; /**< Pointer to a UTF-8 encoded string (non-NULL terminated), NULL if the descriptor is not required. */ ++ uint16_t char_user_desc_max_size; /**< The maximum size in bytes of the user description descriptor. */ ++ uint16_t char_user_desc_size; /**< The size of the user description, must be smaller or equal to char_user_desc_max_size. */ ++ ble_gatts_char_pf_t* p_char_pf; /**< Pointer to a presentation format structure or NULL if the CPF descriptor is not required. */ ++ ble_gatts_attr_md_t* p_user_desc_md; /**< Attribute metadata for the User Description descriptor, or NULL for default values. */ ++ ble_gatts_attr_md_t* p_cccd_md; /**< Attribute metadata for the Client Characteristic Configuration Descriptor, or NULL for default values. */ ++ ble_gatts_attr_md_t* p_sccd_md; /**< Attribute metadata for the Server Characteristic Configuration Descriptor, or NULL for default values. */ ++} ble_gatts_char_md_t; ++ ++ ++/**@brief GATT Characteristic Definition Handles. */ ++typedef struct ++{ ++ uint16_t value_handle; /**< Handle to the characteristic value. */ ++ uint16_t user_desc_handle; /**< Handle to the User Description descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ ++ uint16_t cccd_handle; /**< Handle to the Client Characteristic Configuration Descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ ++ uint16_t sccd_handle; /**< Handle to the Server Characteristic Configuration Descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ ++} ble_gatts_char_handles_t; ++ ++ ++/**@brief GATT HVx parameters. */ ++typedef struct ++{ ++ uint16_t handle; /**< Characteristic Value Handle. */ ++ uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ ++ uint16_t offset; /**< Offset within the attribute value. */ ++ uint16_t *p_len; /**< Length in bytes to be written, length in bytes written after successful return. */ ++ uint8_t *p_data; /**< Actual data content, use NULL to use the current attribute value. */ ++} ble_gatts_hvx_params_t; ++ ++/**@brief GATT Authorization parameters. */ ++typedef struct ++{ ++ uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ ++ uint8_t update : 1; /**< If set, data supplied in p_data will be used to update the attribute value. ++ Please note that for @ref BLE_GATTS_AUTHORIZE_TYPE_WRITE operations this bit must always be set, ++ as the data to be written needs to be stored and later provided by the application. */ ++ uint16_t offset; /**< Offset of the attribute value being updated. */ ++ uint16_t len; /**< Length in bytes of the value in p_data pointer, see @ref BLE_GATTS_ATTR_LENS_MAX. */ ++ const uint8_t *p_data; /**< Pointer to new value used to update the attribute value. */ ++} ble_gatts_authorize_params_t; ++ ++/**@brief GATT Read or Write Authorize Reply parameters. */ ++typedef struct ++{ ++ uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ ++ union { ++ ble_gatts_authorize_params_t read; /**< Read authorization parameters. */ ++ ble_gatts_authorize_params_t write; /**< Write authorization parameters. */ ++ } params; /**< Reply Parameters. */ ++} ble_gatts_rw_authorize_reply_params_t; ++ ++ ++ ++/**@brief Event structure for @ref BLE_GATTS_EVT_WRITE. */ ++typedef struct ++{ ++ uint16_t handle; /**< Attribute Handle. */ ++ ble_uuid_t uuid; /**< Attribute UUID. */ ++ uint8_t op; /**< Type of write operation, see @ref BLE_GATTS_OPS. */ ++ uint8_t auth_required; /**< Writing operation deferred due to authorization requirement. Application may use @ref sd_ble_gatts_value_set to finalise the writing operation. */ ++ uint16_t offset; /**< Offset for the write operation. */ ++ uint16_t len; /**< Length of the received data. */ ++ uint8_t data[1]; /**< Received data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++} ble_gatts_evt_write_t; ++ ++/**@brief Event substructure for authorized read requests, see @ref ble_gatts_evt_rw_authorize_request_t. */ ++typedef struct ++{ ++ uint16_t handle; /**< Attribute Handle. */ ++ ble_uuid_t uuid; /**< Attribute UUID. */ ++ uint16_t offset; /**< Offset for the read operation. */ ++} ble_gatts_evt_read_t; ++ ++/**@brief Event structure for @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST. */ ++typedef struct ++{ ++ uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ ++ union { ++ ble_gatts_evt_read_t read; /**< Attribute Read Parameters. */ ++ ble_gatts_evt_write_t write; /**< Attribute Write Parameters. */ ++ } request; /**< Request Parameters. */ ++} ble_gatts_evt_rw_authorize_request_t; ++ ++/**@brief Event structure for @ref BLE_GATTS_EVT_SYS_ATTR_MISSING. */ ++typedef struct ++{ ++ uint8_t hint; /**< Hint (currently unused). */ ++} ble_gatts_evt_sys_attr_missing_t; ++ ++ ++/**@brief Event structure for @ref BLE_GATTS_EVT_HVC. */ ++typedef struct ++{ ++ uint16_t handle; /**< Attribute Handle. */ ++} ble_gatts_evt_hvc_t; ++ ++/**@brief Event structure for @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST. */ ++typedef struct ++{ ++ uint16_t client_rx_mtu; /**< Client RX MTU size. */ ++} ble_gatts_evt_exchange_mtu_request_t; ++ ++/**@brief Event structure for @ref BLE_GATTS_EVT_TIMEOUT. */ ++typedef struct ++{ ++ uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ ++} ble_gatts_evt_timeout_t; ++ ++ ++/**@brief GATTS event structure. */ ++typedef struct ++{ ++ uint16_t conn_handle; /**< Connection Handle on which the event occurred. */ ++ union ++ { ++ ble_gatts_evt_write_t write; /**< Write Event Parameters. */ ++ ble_gatts_evt_rw_authorize_request_t authorize_request; /**< Read or Write Authorize Request Parameters. */ ++ ble_gatts_evt_sys_attr_missing_t sys_attr_missing; /**< System attributes missing. */ ++ ble_gatts_evt_hvc_t hvc; /**< Handle Value Confirmation Event Parameters. */ ++ ble_gatts_evt_exchange_mtu_request_t exchange_mtu_request; /**< Exchange MTU Request Event Parameters. */ ++ ble_gatts_evt_timeout_t timeout; /**< Timeout Event. */ ++ } params; /**< Event Parameters. */ ++} ble_gatts_evt_t; ++ ++/** @} */ ++ ++/** @addtogroup BLE_GATTS_FUNCTIONS Functions ++ * @{ */ ++ ++/**@brief Add a service declaration to the Attribute Table. ++ * ++ * @note Secondary Services are only relevant in the context of the entity that references them, it is therefore forbidden to ++ * add a secondary service declaration that is not referenced by another service later in the Attribute Table. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} ++ * @endmscs ++ * ++ * @param[in] type Toggles between primary and secondary services, see @ref BLE_GATTS_SRVC_TYPES. ++ * @param[in] p_uuid Pointer to service UUID. ++ * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. ++ * ++ * @retval ::NRF_SUCCESS Successfully added a service declaration. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, Vendor Specific UUIDs need to be present in the table. ++ * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. ++ * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. ++ */ ++SVCALL(SD_BLE_GATTS_SERVICE_ADD, uint32_t, sd_ble_gatts_service_add(uint8_t type, ble_uuid_t const *p_uuid, uint16_t *p_handle)); ++ ++ ++/**@brief Add an include declaration to the Attribute Table. ++ * ++ * @note It is currently only possible to add an include declaration to the last added service (i.e. only sequential population is supported at this time). ++ * ++ * @note The included service must already be present in the Attribute Table prior to this call. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} ++ * @endmscs ++ * ++ * @param[in] service_handle Handle of the service where the included service is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. ++ * @param[in] inc_srvc_handle Handle of the included service. ++ * @param[out] p_include_handle Pointer to a 16-bit word where the assigned handle will be stored. ++ * ++ * @retval ::NRF_SUCCESS Successfully added an include declaration. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, handle values need to match previously added services. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::NRF_ERROR_NOT_SUPPORTED Feature is not supported, service_handle must be that of the last added service. ++ * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, self inclusions are not allowed. ++ * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. ++ * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. ++ */ ++SVCALL(SD_BLE_GATTS_INCLUDE_ADD, uint32_t, sd_ble_gatts_include_add(uint16_t service_handle, uint16_t inc_srvc_handle, uint16_t *p_include_handle)); ++ ++ ++/**@brief Add a characteristic declaration, a characteristic value declaration and optional characteristic descriptor declarations to the Attribute Table. ++ * ++ * @note It is currently only possible to add a characteristic to the last added service (i.e. only sequential population is supported at this time). ++ * ++ * @note Several restrictions apply to the parameters, such as matching permissions between the user description descriptor and the writeable auxiliaries bits, ++ * readable (no security) and writeable (selectable) CCCDs and SCCDs and valid presentation format values. ++ * ++ * @note If no metadata is provided for the optional descriptors, their permissions will be derived from the characteristic permissions. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} ++ * @endmscs ++ * ++ * @param[in] service_handle Handle of the service where the characteristic is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. ++ * @param[in] p_char_md Characteristic metadata. ++ * @param[in] p_attr_char_value Pointer to the attribute structure corresponding to the characteristic value. ++ * @param[out] p_handles Pointer to the structure where the assigned handles will be stored. ++ * ++ * @retval ::NRF_SUCCESS Successfully added a characteristic. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, service handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a service context is required. ++ * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. ++ * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. ++ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. ++ */ ++SVCALL(SD_BLE_GATTS_CHARACTERISTIC_ADD, uint32_t, sd_ble_gatts_characteristic_add(uint16_t service_handle, ble_gatts_char_md_t const *p_char_md, ble_gatts_attr_t const *p_attr_char_value, ble_gatts_char_handles_t *p_handles)); ++ ++ ++/**@brief Add a descriptor to the Attribute Table. ++ * ++ * @note It is currently only possible to add a descriptor to the last added characteristic (i.e. only sequential population is supported at this time). ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} ++ * @endmscs ++ * ++ * @param[in] char_handle Handle of the characteristic where the descriptor is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. ++ * @param[in] p_attr Pointer to the attribute structure. ++ * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. ++ * ++ * @retval ::NRF_SUCCESS Successfully added a descriptor. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, characteristic handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a characteristic context is required. ++ * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. ++ * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. ++ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. ++ */ ++SVCALL(SD_BLE_GATTS_DESCRIPTOR_ADD, uint32_t, sd_ble_gatts_descriptor_add(uint16_t char_handle, ble_gatts_attr_t const *p_attr, uint16_t *p_handle)); ++ ++/**@brief Set the value of a given attribute. ++ * ++ * @note Values other than system attributes can be set at any time, regardless of wheter any active connections exist. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} ++ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. If the value does not belong to a system attribute then @ref BLE_CONN_HANDLE_INVALID can be used. ++ * @param[in] handle Attribute handle. ++ * @param[in,out] p_value Attribute value information. ++ * ++ * @retval ::NRF_SUCCESS Successfully set the value of the attribute. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. ++ * @retval ::NRF_ERROR_FORBIDDEN Forbidden handle supplied, certain attributes are not modifiable by the application. ++ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ * @retval ::BLE_ERROR_GATTS_INVALID_ATTR_TYPE @ref BLE_CONN_HANDLE_INVALID supplied on a system attribute. ++ */ ++SVCALL(SD_BLE_GATTS_VALUE_SET, uint32_t, sd_ble_gatts_value_set(uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value)); ++ ++/**@brief Get the value of a given attribute. ++ * ++ * @note If the attribute value is longer than the size of the supplied buffer, ++ * p_len will return the total attribute value length (excluding offset), ++ * and not the number of bytes actually returned in p_data. ++ * The application may use this information to allocate a suitable buffer size. ++ * ++ * @note When retrieving system attribute values with this function, the connection handle ++ * may refer to an already disconnected connection. Refer to the documentation of ++ * @ref sd_ble_gatts_sys_attr_get for further information. ++ * ++ * @param[in] conn_handle Connection handle. If the value does not belong to a system attribute then @ref BLE_CONN_HANDLE_INVALID can be used. ++ * @param[in] handle Attribute handle. ++ * @param[in,out] p_value Attribute value information. ++ * ++ * @retval ::NRF_SUCCESS Successfully retrieved the value of the attribute. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid attribute offset supplied. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ * @retval ::BLE_ERROR_GATTS_INVALID_ATTR_TYPE @ref BLE_CONN_HANDLE_INVALID supplied on a system attribute. ++ * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. ++ */ ++SVCALL(SD_BLE_GATTS_VALUE_GET, uint32_t, sd_ble_gatts_value_get(uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value)); ++ ++/**@brief Notify or Indicate an attribute value. ++ * ++ * @details This function checks for the relevant Client Characteristic Configuration descriptor value to verify that the relevant operation ++ * (notification or indication) has been enabled by the client. It is also able to update the attribute value before issuing the PDU, so that ++ * the application can atomically perform a value update and a server initiated transaction with a single API call. ++ * If the application chooses to indicate an attribute value, a @ref BLE_GATTS_EVT_HVC event will be issued as soon as the confirmation arrives from ++ * the peer. ++ * ++ * @note The local attribute value may be updated even if an outgoing packet is not sent to the peer due to an error during execution. ++ * The Attribute Table has been updated if one of the following error codes is returned: @ref NRF_ERROR_INVALID_STATE, @ref NRF_ERROR_BUSY, ++ * @ref NRF_ERROR_FORBIDDEN, @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING and @ref BLE_ERROR_NO_TX_PACKETS. ++ * The caller can check whether the value has been updated by looking at the contents of *(p_hvx_params->p_len). ++ * ++ * @note It is important to note that a notification will consume an application buffer, and will therefore ++ * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. An indication on the other hand will use the ++ * standard server internal buffer and thus will only generate a @ref BLE_GATTS_EVT_HVC event as soon as the confirmation ++ * has been received from the peer. Please see the documentation of @ref sd_ble_tx_packet_count_get for more details. ++ * ++ * @events ++ * @event{@ref BLE_EVT_TX_COMPLETE, Transmission complete.} ++ * @event{@ref BLE_GATTS_EVT_HVC, Confirmation received from peer.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTS_HVX_SYS_ATTRS_MISSING_MSC} ++ * @mmsc{@ref BLE_GATTS_HVN_MSC} ++ * @mmsc{@ref BLE_GATTS_HVI_MSC} ++ * @mmsc{@ref BLE_GATTS_HVX_DISABLED_MSC} ++ * @mmsc{@ref BLE_COMMON_APP_BUFF_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] p_hvx_params Pointer to an HVx parameters structure. If the p_data member contains a non-NULL pointer the attribute value will be updated with ++ * the contents pointed by it before sending the notification or indication. ++ * ++ * @retval ::NRF_SUCCESS Successfully queued a notification or indication for transmission, and optionally updated the attribute value. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE One or more of the following is true: ++ * - Invalid Connection State ++ * - Notifications and/or indications not enabled in the CCCD ++ * - An ATT_MTU exchange is ongoing ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied. Only attributes added directly by the application are available to notify and indicate. ++ * @retval ::BLE_ERROR_GATTS_INVALID_ATTR_TYPE Invalid attribute type(s) supplied, only characteristic values may be notified and indicated. ++ * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. ++ * @retval ::NRF_ERROR_FORBIDDEN The connection's current security level is lower than the one required by the write permissions of the CCCD associated with this characteristic. ++ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. ++ * @retval ::NRF_ERROR_BUSY Procedure already in progress. ++ * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. ++ * @retval ::BLE_ERROR_NO_TX_PACKETS No available application packets for this connection, applies only to notifications. ++ */ ++SVCALL(SD_BLE_GATTS_HVX, uint32_t, sd_ble_gatts_hvx(uint16_t conn_handle, ble_gatts_hvx_params_t const *p_hvx_params)); ++ ++/**@brief Indicate the Service Changed attribute value. ++ * ++ * @details This call will send a Handle Value Indication to one or more peers connected to inform them that the Attribute ++ * Table layout has changed. As soon as the peer has confirmed the indication, a @ref BLE_GATTS_EVT_SC_CONFIRM event will ++ * be issued. ++ * ++ * @note Some of the restrictions and limitations that apply to @ref sd_ble_gatts_hvx also apply here. ++ * ++ * @events ++ * @event{@ref BLE_GATTS_EVT_SC_CONFIRM, Confirmation of attribute table change received from peer.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTS_SC_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] start_handle Start of affected attribute handle range. ++ * @param[in] end_handle End of affected attribute handle range. ++ * ++ * @retval ::NRF_SUCCESS Successfully queued the Service Changed indication for transmission. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_NOT_SUPPORTED Service Changed not enabled at initialization. See @ref sd_ble_enable and @ref ble_gatts_enable_params_t. ++ * @retval ::NRF_ERROR_INVALID_STATE One or more of the following is true: ++ * - Invalid Connection State ++ * - Notifications and/or indications not enabled in the CCCD ++ * - An ATT_MTU exchange is ongoing ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied, handles must be in the range populated by the application. ++ * @retval ::NRF_ERROR_BUSY Procedure already in progress. ++ * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. ++ */ ++SVCALL(SD_BLE_GATTS_SERVICE_CHANGED, uint32_t, sd_ble_gatts_service_changed(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle)); ++ ++/**@brief Respond to a Read/Write authorization request. ++ * ++ * @note This call should only be used as a response to a @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST event issued to the application. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC} ++ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC} ++ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} ++ * @mmsc{@ref BLE_GATTS_READ_REQ_AUTH_MSC} ++ * @mmsc{@ref BLE_GATTS_WRITE_REQ_AUTH_MSC} ++ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} ++ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_PEER_CANCEL_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] p_rw_authorize_reply_params Pointer to a structure with the attribute provided by the application. ++ * ++ * @note @ref ble_gatts_authorize_params_t::p_data is ignored when this function is used to respond ++ * to a @ref BLE_GATTS_AUTHORIZE_TYPE_READ event if @ref ble_gatts_authorize_params_t::update ++ * is set to 0. ++ * ++ * @retval ::NRF_SUCCESS Successfully queued a response to the peer, and in the case of a write operation, Attribute Table updated. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no authorization request pending. ++ * @retval ::NRF_ERROR_INVALID_PARAM Authorization op invalid, ++ * handle supplied does not match requested handle, ++ * or invalid data to be written provided by the application. ++ * @retval ::NRF_ERROR_BUSY The stack is busy. Retry at later time. ++ */ ++SVCALL(SD_BLE_GATTS_RW_AUTHORIZE_REPLY, uint32_t, sd_ble_gatts_rw_authorize_reply(uint16_t conn_handle, ble_gatts_rw_authorize_reply_params_t const *p_rw_authorize_reply_params)); ++ ++ ++/**@brief Update persistent system attribute information. ++ * ++ * @details Supply information about persistent system attributes to the stack, ++ * previously obtained using @ref sd_ble_gatts_sys_attr_get. ++ * This call is only allowed for active connections, and is usually ++ * made immediately after a connection is established with an known bonded device, ++ * often as a response to a @ref BLE_GATTS_EVT_SYS_ATTR_MISSING. ++ * ++ * p_sysattrs may point directly to the application's stored copy of the system attributes ++ * obtained using @ref sd_ble_gatts_sys_attr_get. ++ * If the pointer is NULL, the system attribute info is initialized, assuming that ++ * the application does not have any previously saved system attribute data for this device. ++ * ++ * @note The state of persistent system attributes is reset upon connection establishment and then remembered for its duration. ++ * ++ * @note If this call returns with an error code different from @ref NRF_SUCCESS, the storage of persistent system attributes may have been completed only partially. ++ * This means that the state of the attribute table is undefined, and the application should either provide a new set of attributes using this same call or ++ * reset the SoftDevice to return to a known state. ++ * ++ * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS is used with this function, only the system attributes included in system services will be modified. ++ * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS is used with this function, only the system attributes included in user services will be modified. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTS_HVX_SYS_ATTRS_MISSING_MSC} ++ * @mmsc{@ref BLE_GATTS_SYS_ATTRS_UNK_PEER_MSC} ++ * @mmsc{@ref BLE_GATTS_SYS_ATTRS_BONDED_PEER_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] p_sys_attr_data Pointer to a saved copy of system attributes supplied to the stack, or NULL. ++ * @param[in] len Size of data pointed by p_sys_attr_data, in octets. ++ * @param[in] flags Optional additional flags, see @ref BLE_GATTS_SYS_ATTR_FLAGS ++ * ++ * @retval ::NRF_SUCCESS Successfully set the system attribute information. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid flags supplied. ++ * @retval ::NRF_ERROR_INVALID_DATA Invalid data supplied, the data should be exactly the same as retrieved with @ref sd_ble_gatts_sys_attr_get. ++ * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. ++ * @retval ::NRF_ERROR_BUSY The stack is busy. Retry at later time. ++ */ ++SVCALL(SD_BLE_GATTS_SYS_ATTR_SET, uint32_t, sd_ble_gatts_sys_attr_set(uint16_t conn_handle, uint8_t const *p_sys_attr_data, uint16_t len, uint32_t flags)); ++ ++ ++/**@brief Retrieve persistent system attribute information from the stack. ++ * ++ * @details This call is used to retrieve information about values to be stored perisistently by the application ++ * during the lifetime of a connection or after it has been terminated. When a new connection is established with the same bonded device, ++ * the system attribute information retrieved with this function should be restored using using @ref sd_ble_gatts_sys_attr_set. ++ * If retrieved after disconnection, the data should be read before a new connection established. The connection handle for ++ * the previous, now disconnected, connection will remain valid until a new one is created to allow this API call to refer to it. ++ * Connection handles belonging to active connections can be used as well, but care should be taken since the system attributes ++ * may be written to at any time by the peer during a connection's lifetime. ++ * ++ * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS is used with this function, only the system attributes included in system services will be returned. ++ * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS is used with this function, only the system attributes included in user services will be returned. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTS_SYS_ATTRS_BONDED_PEER_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle of the recently terminated connection. ++ * @param[out] p_sys_attr_data Pointer to a buffer where updated information about system attributes will be filled in. The format of the data is described ++ * in @ref BLE_GATTS_SYS_ATTRS_FORMAT. NULL can be provided to obtain the length of the data. ++ * @param[in,out] p_len Size of application buffer if p_sys_attr_data is not NULL. Unconditially updated to actual length of system attribute data. ++ * @param[in] flags Optional additional flags, see @ref BLE_GATTS_SYS_ATTR_FLAGS ++ * ++ * @retval ::NRF_SUCCESS Successfully retrieved the system attribute information. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid flags supplied. ++ * @retval ::NRF_ERROR_DATA_SIZE The system attribute information did not fit into the provided buffer. ++ * @retval ::NRF_ERROR_NOT_FOUND No system attributes found. ++ */ ++SVCALL(SD_BLE_GATTS_SYS_ATTR_GET, uint32_t, sd_ble_gatts_sys_attr_get(uint16_t conn_handle, uint8_t *p_sys_attr_data, uint16_t *p_len, uint32_t flags)); ++ ++ ++/**@brief Retrieve the first valid user attribute handle. ++ * ++ * @param[out] p_handle Pointer to an integer where the handle will be stored. ++ * ++ * @retval ::NRF_SUCCESS Successfully retrieved the handle. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ */ ++SVCALL(SD_BLE_GATTS_INITIAL_USER_HANDLE_GET, uint32_t, sd_ble_gatts_initial_user_handle_get(uint16_t *p_handle)); ++ ++/**@brief Retrieve the attribute UUID and/or metadata. ++ * ++ * @param[in] handle Attribute handle ++ * @param[out] p_uuid UUID of the attribute. Use NULL to omit this field. ++ * @param[out] p_md Metadata of the attribute. Use NULL to omit this field. ++ * ++ * @retval ::NRF_SUCCESS Successfully retrieved the attribute metadata, ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameters supplied. Returned when both @c p_uuid and @c p_md are NULL. ++ * @retval ::NRF_ERROR_NOT_FOUND Attribute was not found. ++ */ ++SVCALL(SD_BLE_GATTS_ATTR_GET, uint32_t, sd_ble_gatts_attr_get(uint16_t handle, ble_uuid_t * p_uuid, ble_gatts_attr_md_t * p_md)); ++ ++/**@brief Reply to an ATT_MTU exchange request by sending an Exchange MTU Response to the client. ++ * ++ * @details This function is only used to reply to a @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST event. ++ * ++ * @details The SoftDevice sets ATT_MTU to the minimum of: ++ * - The Client RX MTU value from @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST, and ++ * - The Server RX MTU value. ++ * ++ * However, the SoftDevice never sets ATT_MTU lower than @ref GATT_MTU_SIZE_DEFAULT. ++ * ++ * @events ++ * @event{@ref BLE_EVT_DATA_LENGTH_CHANGED, Generated if a data length update procedure is performed after the ATT_MTU exchange.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTS_MTU_EXCHANGE} ++ * @endmscs ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] server_rx_mtu Server RX MTU size. ++ * - The minimum value is @ref GATT_MTU_SIZE_DEFAULT. ++ * - The maximum value is @ref ble_gatt_enable_params_t::att_mtu. ++ * - The value must be equal to Client RX MTU size given in @ref sd_ble_gattc_exchange_mtu_request ++ * if an ATT_MTU exchange has already been performed in the other direction. ++ * ++ * @retval ::NRF_SUCCESS Successfully sent response to the client. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no ATT_MTU exchange request pending. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid Server RX MTU size supplied. ++ * @retval ::NRF_ERROR_BUSY The stack is busy. Retry at later time. ++ */ ++SVCALL(SD_BLE_GATTS_EXCHANGE_MTU_REPLY, uint32_t, sd_ble_gatts_exchange_mtu_reply(uint16_t conn_handle, uint16_t server_rx_mtu)); ++/** @} */ ++ ++#ifdef __cplusplus ++} ++#endif ++#endif // BLE_GATTS_H__ ++ ++/** ++ @} ++*/ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_hci.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_hci.h +new file mode 100644 +index 0000000..4c7a5d5 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_hci.h +@@ -0,0 +1,131 @@ ++/* ++ * Copyright (c) Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form must reproduce the above copyright notice, this ++ * list of conditions and the following disclaimer in the documentation and/or ++ * other materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other ++ * contributors to this software may be used to endorse or promote products ++ * derived from this software without specific prior written permission. ++ * ++ * 4. This software must only be used in a processor manufactured by Nordic ++ * Semiconductor ASA, or in a processor manufactured by a third party that ++ * is used in combination with a processor manufactured by Nordic Semiconductor. ++ * ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ++ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ++ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ * ++ */ ++ ++/** ++ @addtogroup BLE_COMMON ++ @{ ++*/ ++ ++ ++#ifndef BLE_HCI_H__ ++#define BLE_HCI_H__ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/** @defgroup BLE_HCI_STATUS_CODES Bluetooth status codes ++ * @{ */ ++ ++#define BLE_HCI_STATUS_CODE_SUCCESS 0x00 /**< Success. */ ++#define BLE_HCI_STATUS_CODE_UNKNOWN_BTLE_COMMAND 0x01 /**< Unknown BLE Command. */ ++#define BLE_HCI_STATUS_CODE_UNKNOWN_CONNECTION_IDENTIFIER 0x02 /**< Unknown Connection Identifier. */ ++/*0x03 Hardware Failure ++0x04 Page Timeout ++*/ ++#define BLE_HCI_AUTHENTICATION_FAILURE 0x05 /**< Authentication Failure. */ ++#define BLE_HCI_STATUS_CODE_PIN_OR_KEY_MISSING 0x06 /**< Pin or Key missing. */ ++#define BLE_HCI_MEMORY_CAPACITY_EXCEEDED 0x07 /**< Memory Capacity Exceeded. */ ++#define BLE_HCI_CONNECTION_TIMEOUT 0x08 /**< Connection Timeout. */ ++/*0x09 Connection Limit Exceeded ++0x0A Synchronous Connection Limit To A Device Exceeded ++0x0B ACL Connection Already Exists*/ ++#define BLE_HCI_STATUS_CODE_COMMAND_DISALLOWED 0x0C /**< Command Disallowed. */ ++/*0x0D Connection Rejected due to Limited Resources ++0x0E Connection Rejected Due To Security Reasons ++0x0F Connection Rejected due to Unacceptable BD_ADDR ++0x10 Connection Accept Timeout Exceeded ++0x11 Unsupported Feature or Parameter Value*/ ++#define BLE_HCI_STATUS_CODE_INVALID_BTLE_COMMAND_PARAMETERS 0x12 /**< Invalid BLE Command Parameters. */ ++#define BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION 0x13 /**< Remote User Terminated Connection. */ ++#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES 0x14 /**< Remote Device Terminated Connection due to low resources.*/ ++#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF 0x15 /**< Remote Device Terminated Connection due to power off. */ ++#define BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTION 0x16 /**< Local Host Terminated Connection. */ ++/* ++0x17 Repeated Attempts ++0x18 Pairing Not Allowed ++0x19 Unknown LMP PDU ++*/ ++#define BLE_HCI_UNSUPPORTED_REMOTE_FEATURE 0x1A /**< Unsupported Remote Feature. */ ++/* ++0x1B SCO Offset Rejected ++0x1C SCO Interval Rejected ++0x1D SCO Air Mode Rejected*/ ++#define BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS 0x1E /**< Invalid LMP Parameters. */ ++#define BLE_HCI_STATUS_CODE_UNSPECIFIED_ERROR 0x1F /**< Unspecified Error. */ ++/*0x20 Unsupported LMP Parameter Value ++0x21 Role Change Not Allowed ++*/ ++#define BLE_HCI_STATUS_CODE_LMP_RESPONSE_TIMEOUT 0x22 /**< LMP Response Timeout. */ ++/*0x23 LMP Error Transaction Collision*/ ++#define BLE_HCI_STATUS_CODE_LMP_PDU_NOT_ALLOWED 0x24 /**< LMP PDU Not Allowed. */ ++/*0x25 Encryption Mode Not Acceptable ++0x26 Link Key Can Not be Changed ++0x27 Requested QoS Not Supported ++*/ ++#define BLE_HCI_INSTANT_PASSED 0x28 /**< Instant Passed. */ ++#define BLE_HCI_PAIRING_WITH_UNIT_KEY_UNSUPPORTED 0x29 /**< Pairing with Unit Key Unsupported. */ ++#define BLE_HCI_DIFFERENT_TRANSACTION_COLLISION 0x2A /**< Different Transaction Collision. */ ++/* ++0x2B Reserved ++0x2C QoS Unacceptable Parameter ++0x2D QoS Rejected ++0x2E Channel Classification Not Supported ++0x2F Insufficient Security ++0x30 Parameter Out Of Mandatory Range ++0x31 Reserved ++0x32 Role Switch Pending ++0x33 Reserved ++0x34 Reserved Slot Violation ++0x35 Role Switch Failed ++0x36 Extended Inquiry Response Too Large ++0x37 Secure Simple Pairing Not Supported By Host. ++0x38 Host Busy - Pairing ++0x39 Connection Rejected due to No Suitable Channel Found*/ ++#define BLE_HCI_CONTROLLER_BUSY 0x3A /**< Controller Busy. */ ++#define BLE_HCI_CONN_INTERVAL_UNACCEPTABLE 0x3B /**< Connection Interval Unacceptable. */ ++#define BLE_HCI_DIRECTED_ADVERTISER_TIMEOUT 0x3C /**< Directed Adverisement Timeout. */ ++#define BLE_HCI_CONN_TERMINATED_DUE_TO_MIC_FAILURE 0x3D /**< Connection Terminated due to MIC Failure. */ ++#define BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED 0x3E /**< Connection Failed to be Established. */ ++ ++/** @} */ ++ ++ ++#ifdef __cplusplus ++} ++#endif ++#endif // BLE_HCI_H__ ++ ++/** @} */ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_l2cap.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_l2cap.h +new file mode 100644 +index 0000000..a180840 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_l2cap.h +@@ -0,0 +1,202 @@ ++/* ++ * Copyright (c) Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form must reproduce the above copyright notice, this ++ * list of conditions and the following disclaimer in the documentation and/or ++ * other materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other ++ * contributors to this software may be used to endorse or promote products ++ * derived from this software without specific prior written permission. ++ * ++ * 4. This software must only be used in a processor manufactured by Nordic ++ * Semiconductor ASA, or in a processor manufactured by a third party that ++ * is used in combination with a processor manufactured by Nordic Semiconductor. ++ * ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ++ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ++ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ * ++ */ ++ ++/** ++ @addtogroup BLE_L2CAP Logical Link Control and Adaptation Protocol (L2CAP) ++ @{ ++ @brief Definitions and prototypes for the L2CAP interface. ++ */ ++ ++#ifndef BLE_L2CAP_H__ ++#define BLE_L2CAP_H__ ++ ++#include "ble_types.h" ++#include "ble_ranges.h" ++#include "ble_err.h" ++#include "nrf_svc.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/**@addtogroup BLE_L2CAP_ENUMERATIONS Enumerations ++ * @{ */ ++ ++/**@brief L2CAP API SVC numbers. */ ++enum BLE_L2CAP_SVCS ++{ ++ SD_BLE_L2CAP_CID_REGISTER = BLE_L2CAP_SVC_BASE, /**< Register a CID. */ ++ SD_BLE_L2CAP_CID_UNREGISTER, /**< Unregister a CID. */ ++ SD_BLE_L2CAP_TX /**< Transmit a packet. */ ++}; ++ ++/**@brief L2CAP Event IDs. */ ++enum BLE_L2CAP_EVTS ++{ ++ BLE_L2CAP_EVT_RX = BLE_L2CAP_EVT_BASE /**< L2CAP packet received. */ ++}; ++ ++/** @} */ ++ ++/**@addtogroup BLE_L2CAP_DEFINES Defines ++ * @{ */ ++ ++/**@defgroup BLE_ERRORS_L2CAP SVC return values specific to L2CAP ++ * @{ */ ++#define BLE_ERROR_L2CAP_CID_IN_USE (NRF_L2CAP_ERR_BASE + 0x000) /**< CID already in use. */ ++/** @} */ ++ ++/**@brief Default L2CAP MTU. */ ++#define BLE_L2CAP_MTU_DEF (23) ++ ++/**@brief Invalid Channel Identifier. */ ++#define BLE_L2CAP_CID_INVALID (0x0000) ++ ++/**@brief Dynamic Channel Identifier base. */ ++#define BLE_L2CAP_CID_DYN_BASE (0x0040) ++ ++/**@brief Maximum amount of dynamic CIDs. */ ++#define BLE_L2CAP_CID_DYN_MAX (8) ++ ++/** @} */ ++ ++/**@addtogroup BLE_L2CAP_STRUCTURES Structures ++ * @{ */ ++ ++/**@brief Packet header format for L2CAP transmission. */ ++typedef struct ++{ ++ uint16_t len; /**< Length of valid info in data member. */ ++ uint16_t cid; /**< Channel ID on which packet is transmitted. */ ++} ble_l2cap_header_t; ++ ++ ++/**@brief L2CAP Received packet event report. */ ++typedef struct ++{ ++ ble_l2cap_header_t header; /**< L2CAP packet header. */ ++ uint8_t data[1]; /**< Packet data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++} ble_l2cap_evt_rx_t; ++ ++ ++/**@brief L2CAP event callback event structure. */ ++typedef struct ++{ ++ uint16_t conn_handle; /**< Connection Handle on which event occured. */ ++ union ++ { ++ ble_l2cap_evt_rx_t rx; /**< RX Event parameters. */ ++ } params; /**< Event Parameters. */ ++} ble_l2cap_evt_t; ++ ++/** @} */ ++ ++/**@addtogroup BLE_L2CAP_FUNCTIONS Functions ++ * @{ */ ++ ++/**@brief Register a CID with L2CAP. ++ * ++ * @details This registers a higher protocol layer with the L2CAP multiplexer, and is requried prior to all operations on the CID. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_L2CAP_API_MSC} ++ * @endmscs ++ * ++ * @param[in] cid L2CAP CID. ++ * ++ * @retval ::NRF_SUCCESS Successfully registered a CID with the L2CAP layer. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, CID must be above @ref BLE_L2CAP_CID_DYN_BASE. ++ * @retval ::BLE_ERROR_L2CAP_CID_IN_USE L2CAP CID already in use. ++ * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. ++ */ ++SVCALL(SD_BLE_L2CAP_CID_REGISTER, uint32_t, sd_ble_l2cap_cid_register(uint16_t cid)); ++ ++/**@brief Unregister a CID with L2CAP. ++ * ++ * @details This unregisters a previously registerd higher protocol layer with the L2CAP multiplexer. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_L2CAP_API_MSC} ++ * @endmscs ++ * ++ * @param[in] cid L2CAP CID. ++ * ++ * @retval ::NRF_SUCCESS Successfully unregistered the CID. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_NOT_FOUND CID not previously registered. ++ */ ++SVCALL(SD_BLE_L2CAP_CID_UNREGISTER, uint32_t, sd_ble_l2cap_cid_unregister(uint16_t cid)); ++ ++/**@brief Transmit an L2CAP packet. ++ * ++ * @note It is important to note that a call to this function will consume an application packet, and will therefore ++ * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. ++ * Please see the documentation of @ref sd_ble_tx_packet_count_get for more details. ++ * ++ * @events ++ * @event{@ref BLE_EVT_TX_COMPLETE} ++ * @event{@ref BLE_L2CAP_EVT_RX} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_L2CAP_API_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection Handle. ++ * @param[in] p_header Pointer to a packet header containing length and CID. ++ * @param[in] p_data Pointer to the data to be transmitted. ++ * ++ * @retval ::NRF_SUCCESS Successfully queued an L2CAP packet for transmission. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, CIDs must be registered beforehand with @ref sd_ble_l2cap_cid_register. ++ * @retval ::NRF_ERROR_NOT_FOUND CID not found. ++ * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. ++ * @retval ::BLE_ERROR_NO_TX_PACKETS Not enough application packets available. ++ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, see @ref BLE_L2CAP_MTU_DEF. ++ */ ++SVCALL(SD_BLE_L2CAP_TX, uint32_t, sd_ble_l2cap_tx(uint16_t conn_handle, ble_l2cap_header_t const *p_header, uint8_t const *p_data)); ++ ++/** @} */ ++ ++#ifdef __cplusplus ++} ++#endif ++#endif // BLE_L2CAP_H__ ++ ++/** ++ @} ++*/ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_ranges.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_ranges.h +new file mode 100644 +index 0000000..854898c +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_ranges.h +@@ -0,0 +1,138 @@ ++/* ++ * Copyright (c) Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form must reproduce the above copyright notice, this ++ * list of conditions and the following disclaimer in the documentation and/or ++ * other materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other ++ * contributors to this software may be used to endorse or promote products ++ * derived from this software without specific prior written permission. ++ * ++ * 4. This software must only be used in a processor manufactured by Nordic ++ * Semiconductor ASA, or in a processor manufactured by a third party that ++ * is used in combination with a processor manufactured by Nordic Semiconductor. ++ * ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ++ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ++ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ * ++ */ ++ ++/** ++ @addtogroup BLE_COMMON ++ @{ ++ @defgroup ble_ranges Module specific SVC, event and option number subranges ++ @{ ++ ++ @brief Definition of SVC, event and option number subranges for each API module. ++ ++ @note ++ SVCs, event and option numbers are split into subranges for each API module. ++ Each module receives its entire allocated range of SVC calls, whether implemented or not, ++ but return BLE_ERROR_NOT_SUPPORTED for unimplemented or undefined calls in its range. ++ ++ Note that the symbols BLE__SVC_LAST is the end of the allocated SVC range, ++ rather than the last SVC function call actually defined and implemented. ++ ++ Specific SVC, event and option values are defined in each module's ble_.h file, ++ which defines names of each individual SVC code based on the range start value. ++*/ ++ ++#ifndef BLE_RANGES_H__ ++#define BLE_RANGES_H__ ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++#define BLE_SVC_BASE 0x60 /**< Common BLE SVC base. */ ++#define BLE_SVC_LAST 0x6B /**< Common BLE SVC last. */ ++ ++ ++#define BLE_GAP_SVC_BASE 0x6C /**< GAP BLE SVC base. */ ++#define BLE_GAP_SVC_LAST 0x93 /**< GAP BLE SVC last. */ ++ ++ ++#define BLE_GATTC_SVC_BASE 0x94 /**< GATTC BLE SVC base. */ ++#define BLE_GATTC_SVC_LAST 0x9F /**< GATTC BLE SVC last. */ ++ ++ ++#define BLE_GATTS_SVC_BASE 0xA0 /**< GATTS BLE SVC base. */ ++#define BLE_GATTS_SVC_LAST 0xAF /**< GATTS BLE SVC last. */ ++ ++ ++#define BLE_L2CAP_SVC_BASE 0xB0 /**< L2CAP BLE SVC base. */ ++#define BLE_L2CAP_SVC_LAST 0xBF /**< L2CAP BLE SVC last. */ ++ ++ ++#define BLE_EVT_INVALID 0x00 /**< Invalid BLE Event. */ ++ ++ ++#define BLE_EVT_BASE 0x01 /**< Common BLE Event base. */ ++#define BLE_EVT_LAST 0x0F /**< Common BLE Event last. */ ++ ++ ++#define BLE_GAP_EVT_BASE 0x10 /**< GAP BLE Event base. */ ++#define BLE_GAP_EVT_LAST 0x2F /**< GAP BLE Event last. */ ++ ++ ++#define BLE_GATTC_EVT_BASE 0x30 /**< GATTC BLE Event base. */ ++#define BLE_GATTC_EVT_LAST 0x4F /**< GATTC BLE Event last. */ ++ ++ ++#define BLE_GATTS_EVT_BASE 0x50 /**< GATTS BLE Event base. */ ++#define BLE_GATTS_EVT_LAST 0x6F /**< GATTS BLE Event last. */ ++ ++ ++#define BLE_L2CAP_EVT_BASE 0x70 /**< L2CAP BLE Event base. */ ++#define BLE_L2CAP_EVT_LAST 0x8F /**< L2CAP BLE Event last. */ ++ ++ ++#define BLE_OPT_INVALID 0x00 /**< Invalid BLE Option. */ ++ ++ ++#define BLE_OPT_BASE 0x01 /**< Common BLE Option base. */ ++#define BLE_OPT_LAST 0x1F /**< Common BLE Option last. */ ++ ++ ++#define BLE_GAP_OPT_BASE 0x20 /**< GAP BLE Option base. */ ++#define BLE_GAP_OPT_LAST 0x3F /**< GAP BLE Option last. */ ++ ++ ++#define BLE_GATTC_OPT_BASE 0x40 /**< GATTC BLE Option base. */ ++#define BLE_GATTC_OPT_LAST 0x5F /**< GATTC BLE Option last. */ ++ ++ ++#define BLE_GATTS_OPT_BASE 0x60 /**< GATTS BLE Option base. */ ++#define BLE_GATTS_OPT_LAST 0x7F /**< GATTS BLE Option last. */ ++ ++ ++#define BLE_L2CAP_OPT_BASE 0x80 /**< L2CAP BLE Option base. */ ++#define BLE_L2CAP_OPT_LAST 0x9F /**< L2CAP BLE Option last. */ ++ ++ ++#ifdef __cplusplus ++} ++#endif ++#endif /* BLE_RANGES_H__ */ ++ ++/** ++ @} ++ @} ++*/ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_types.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_types.h +new file mode 100644 +index 0000000..f5ccdb7 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/ble_types.h +@@ -0,0 +1,213 @@ ++/* ++ * Copyright (c) Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form must reproduce the above copyright notice, this ++ * list of conditions and the following disclaimer in the documentation and/or ++ * other materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other ++ * contributors to this software may be used to endorse or promote products ++ * derived from this software without specific prior written permission. ++ * ++ * 4. This software must only be used in a processor manufactured by Nordic ++ * Semiconductor ASA, or in a processor manufactured by a third party that ++ * is used in combination with a processor manufactured by Nordic Semiconductor. ++ * ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ++ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ++ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ * ++ */ ++ ++/** ++ @addtogroup BLE_COMMON ++ @{ ++ @defgroup ble_types Common types and macro definitions ++ @{ ++ ++ @brief Common types and macro definitions for the BLE SoftDevice. ++ */ ++ ++#ifndef BLE_TYPES_H__ ++#define BLE_TYPES_H__ ++ ++#include ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/** @addtogroup BLE_TYPES_DEFINES Defines ++ * @{ */ ++ ++/** @defgroup BLE_CONN_HANDLES BLE Connection Handles ++ * @{ */ ++#define BLE_CONN_HANDLE_INVALID 0xFFFF /**< Invalid Connection Handle. */ ++#define BLE_CONN_HANDLE_ALL 0xFFFE /**< Applies to all Connection Handles. */ ++/** @} */ ++ ++ ++/** @defgroup BLE_UUID_VALUES Assigned Values for BLE UUIDs ++ * @{ */ ++/* Generic UUIDs, applicable to all services */ ++#define BLE_UUID_UNKNOWN 0x0000 /**< Reserved UUID. */ ++#define BLE_UUID_SERVICE_PRIMARY 0x2800 /**< Primary Service. */ ++#define BLE_UUID_SERVICE_SECONDARY 0x2801 /**< Secondary Service. */ ++#define BLE_UUID_SERVICE_INCLUDE 0x2802 /**< Include. */ ++#define BLE_UUID_CHARACTERISTIC 0x2803 /**< Characteristic. */ ++#define BLE_UUID_DESCRIPTOR_CHAR_EXT_PROP 0x2900 /**< Characteristic Extended Properties Descriptor. */ ++#define BLE_UUID_DESCRIPTOR_CHAR_USER_DESC 0x2901 /**< Characteristic User Description Descriptor. */ ++#define BLE_UUID_DESCRIPTOR_CLIENT_CHAR_CONFIG 0x2902 /**< Client Characteristic Configuration Descriptor. */ ++#define BLE_UUID_DESCRIPTOR_SERVER_CHAR_CONFIG 0x2903 /**< Server Characteristic Configuration Descriptor. */ ++#define BLE_UUID_DESCRIPTOR_CHAR_PRESENTATION_FORMAT 0x2904 /**< Characteristic Presentation Format Descriptor. */ ++#define BLE_UUID_DESCRIPTOR_CHAR_AGGREGATE_FORMAT 0x2905 /**< Characteristic Aggregate Format Descriptor. */ ++/* GATT specific UUIDs */ ++#define BLE_UUID_GATT 0x1801 /**< Generic Attribute Profile. */ ++#define BLE_UUID_GATT_CHARACTERISTIC_SERVICE_CHANGED 0x2A05 /**< Service Changed Characteristic. */ ++/* GAP specific UUIDs */ ++#define BLE_UUID_GAP 0x1800 /**< Generic Access Profile. */ ++#define BLE_UUID_GAP_CHARACTERISTIC_DEVICE_NAME 0x2A00 /**< Device Name Characteristic. */ ++#define BLE_UUID_GAP_CHARACTERISTIC_APPEARANCE 0x2A01 /**< Appearance Characteristic. */ ++#define BLE_UUID_GAP_CHARACTERISTIC_RECONN_ADDR 0x2A03 /**< Reconnection Address Characteristic. */ ++#define BLE_UUID_GAP_CHARACTERISTIC_PPCP 0x2A04 /**< Peripheral Preferred Connection Parameters Characteristic. */ ++#define BLE_UUID_GAP_CHARACTERISTIC_CAR 0x2AA6 /**< Central Address Resolution Characteristic. */ ++/** @} */ ++ ++ ++/** @defgroup BLE_UUID_TYPES Types of UUID ++ * @{ */ ++#define BLE_UUID_TYPE_UNKNOWN 0x00 /**< Invalid UUID type. */ ++#define BLE_UUID_TYPE_BLE 0x01 /**< Bluetooth SIG UUID (16-bit). */ ++#define BLE_UUID_TYPE_VENDOR_BEGIN 0x02 /**< Vendor UUID types start at this index (128-bit). */ ++/** @} */ ++ ++ ++/** @defgroup BLE_APPEARANCES Bluetooth Appearance values ++ * @note Retrieved from http://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml ++ * @{ */ ++#define BLE_APPEARANCE_UNKNOWN 0 /**< Unknown. */ ++#define BLE_APPEARANCE_GENERIC_PHONE 64 /**< Generic Phone. */ ++#define BLE_APPEARANCE_GENERIC_COMPUTER 128 /**< Generic Computer. */ ++#define BLE_APPEARANCE_GENERIC_WATCH 192 /**< Generic Watch. */ ++#define BLE_APPEARANCE_WATCH_SPORTS_WATCH 193 /**< Watch: Sports Watch. */ ++#define BLE_APPEARANCE_GENERIC_CLOCK 256 /**< Generic Clock. */ ++#define BLE_APPEARANCE_GENERIC_DISPLAY 320 /**< Generic Display. */ ++#define BLE_APPEARANCE_GENERIC_REMOTE_CONTROL 384 /**< Generic Remote Control. */ ++#define BLE_APPEARANCE_GENERIC_EYE_GLASSES 448 /**< Generic Eye-glasses. */ ++#define BLE_APPEARANCE_GENERIC_TAG 512 /**< Generic Tag. */ ++#define BLE_APPEARANCE_GENERIC_KEYRING 576 /**< Generic Keyring. */ ++#define BLE_APPEARANCE_GENERIC_MEDIA_PLAYER 640 /**< Generic Media Player. */ ++#define BLE_APPEARANCE_GENERIC_BARCODE_SCANNER 704 /**< Generic Barcode Scanner. */ ++#define BLE_APPEARANCE_GENERIC_THERMOMETER 768 /**< Generic Thermometer. */ ++#define BLE_APPEARANCE_THERMOMETER_EAR 769 /**< Thermometer: Ear. */ ++#define BLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR 832 /**< Generic Heart rate Sensor. */ ++#define BLE_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT 833 /**< Heart Rate Sensor: Heart Rate Belt. */ ++#define BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE 896 /**< Generic Blood Pressure. */ ++#define BLE_APPEARANCE_BLOOD_PRESSURE_ARM 897 /**< Blood Pressure: Arm. */ ++#define BLE_APPEARANCE_BLOOD_PRESSURE_WRIST 898 /**< Blood Pressure: Wrist. */ ++#define BLE_APPEARANCE_GENERIC_HID 960 /**< Human Interface Device (HID). */ ++#define BLE_APPEARANCE_HID_KEYBOARD 961 /**< Keyboard (HID Subtype). */ ++#define BLE_APPEARANCE_HID_MOUSE 962 /**< Mouse (HID Subtype). */ ++#define BLE_APPEARANCE_HID_JOYSTICK 963 /**< Joystiq (HID Subtype). */ ++#define BLE_APPEARANCE_HID_GAMEPAD 964 /**< Gamepad (HID Subtype). */ ++#define BLE_APPEARANCE_HID_DIGITIZERSUBTYPE 965 /**< Digitizer Tablet (HID Subtype). */ ++#define BLE_APPEARANCE_HID_CARD_READER 966 /**< Card Reader (HID Subtype). */ ++#define BLE_APPEARANCE_HID_DIGITAL_PEN 967 /**< Digital Pen (HID Subtype). */ ++#define BLE_APPEARANCE_HID_BARCODE 968 /**< Barcode Scanner (HID Subtype). */ ++#define BLE_APPEARANCE_GENERIC_GLUCOSE_METER 1024 /**< Generic Glucose Meter. */ ++#define BLE_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR 1088 /**< Generic Running Walking Sensor. */ ++#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE 1089 /**< Running Walking Sensor: In-Shoe. */ ++#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE 1090 /**< Running Walking Sensor: On-Shoe. */ ++#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP 1091 /**< Running Walking Sensor: On-Hip. */ ++#define BLE_APPEARANCE_GENERIC_CYCLING 1152 /**< Generic Cycling. */ ++#define BLE_APPEARANCE_CYCLING_CYCLING_COMPUTER 1153 /**< Cycling: Cycling Computer. */ ++#define BLE_APPEARANCE_CYCLING_SPEED_SENSOR 1154 /**< Cycling: Speed Sensor. */ ++#define BLE_APPEARANCE_CYCLING_CADENCE_SENSOR 1155 /**< Cycling: Cadence Sensor. */ ++#define BLE_APPEARANCE_CYCLING_POWER_SENSOR 1156 /**< Cycling: Power Sensor. */ ++#define BLE_APPEARANCE_CYCLING_SPEED_CADENCE_SENSOR 1157 /**< Cycling: Speed and Cadence Sensor. */ ++#define BLE_APPEARANCE_GENERIC_PULSE_OXIMETER 3136 /**< Generic Pulse Oximeter. */ ++#define BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP 3137 /**< Fingertip (Pulse Oximeter subtype). */ ++#define BLE_APPEARANCE_PULSE_OXIMETER_WRIST_WORN 3138 /**< Wrist Worn(Pulse Oximeter subtype). */ ++#define BLE_APPEARANCE_GENERIC_WEIGHT_SCALE 3200 /**< Generic Weight Scale. */ ++#define BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS_ACT 5184 /**< Generic Outdoor Sports Activity. */ ++#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_DISP 5185 /**< Location Display Device (Outdoor Sports Activity subtype). */ ++#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_DISP 5186 /**< Location and Navigation Display Device (Outdoor Sports Activity subtype). */ ++#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_POD 5187 /**< Location Pod (Outdoor Sports Activity subtype). */ ++#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_POD 5188 /**< Location and Navigation Pod (Outdoor Sports Activity subtype). */ ++/** @} */ ++ ++/** @brief Set .type and .uuid fields of ble_uuid_struct to specified uuid value. */ ++#define BLE_UUID_BLE_ASSIGN(instance, value) do {\ ++ instance.type = BLE_UUID_TYPE_BLE; \ ++ instance.uuid = value;} while (0) ++ ++/** @brief Copy type and uuid members from src to dst ble_uuid_t pointer. Both pointers must be valid/non-null. */ ++#define BLE_UUID_COPY_PTR(dst, src) do {\ ++ (dst)->type = (src)->type; \ ++ (dst)->uuid = (src)->uuid;} while (0) ++ ++/** @brief Copy type and uuid members from src to dst ble_uuid_t struct. */ ++#define BLE_UUID_COPY_INST(dst, src) do {\ ++ (dst).type = (src).type; \ ++ (dst).uuid = (src).uuid;} while (0) ++ ++/** @brief Compare for equality both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ ++#define BLE_UUID_EQ(p_uuid1, p_uuid2) \ ++ (((p_uuid1)->type == (p_uuid2)->type) && ((p_uuid1)->uuid == (p_uuid2)->uuid)) ++ ++/** @brief Compare for difference both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ ++#define BLE_UUID_NEQ(p_uuid1, p_uuid2) \ ++ (((p_uuid1)->type != (p_uuid2)->type) || ((p_uuid1)->uuid != (p_uuid2)->uuid)) ++ ++/** @} */ ++ ++/** @addtogroup BLE_TYPES_STRUCTURES Structures ++ * @{ */ ++ ++/** @brief 128 bit UUID values. */ ++typedef struct ++{ ++ uint8_t uuid128[16]; /**< Little-Endian UUID bytes. */ ++} ble_uuid128_t; ++ ++/** @brief Bluetooth Low Energy UUID type, encapsulates both 16-bit and 128-bit UUIDs. */ ++typedef struct ++{ ++ uint16_t uuid; /**< 16-bit UUID value or octets 12-13 of 128-bit UUID. */ ++ uint8_t type; /**< UUID type, see @ref BLE_UUID_TYPES. If type is @ref BLE_UUID_TYPE_UNKNOWN, the value of uuid is undefined. */ ++} ble_uuid_t; ++ ++/* note: added to make the unit test work*/ ++/**@brief Data structure. */ ++typedef struct ++{ ++ uint8_t *p_data; /**< Pointer to the data buffer provided to/from the application. */ ++ uint16_t len; /**< Length of the data buffer, in bytes. */ ++} ble_data_t; ++ ++/** @} */ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif /* BLE_TYPES_H__ */ ++ ++/** ++ @} ++ @} ++*/ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf52/nrf_mbr.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf52/nrf_mbr.h +new file mode 100644 +index 0000000..31a3a23 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf52/nrf_mbr.h +@@ -0,0 +1,217 @@ ++/* ++ * Copyright (c) Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form must reproduce the above copyright notice, this ++ * list of conditions and the following disclaimer in the documentation and/or ++ * other materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other ++ * contributors to this software may be used to endorse or promote products ++ * derived from this software without specific prior written permission. ++ * ++ * 4. This software must only be used in a processor manufactured by Nordic ++ * Semiconductor ASA, or in a processor manufactured by a third party that ++ * is used in combination with a processor manufactured by Nordic Semiconductor. ++ * ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ++ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ++ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ * ++ */ ++/** ++ @defgroup nrf_mbr_api Master Boot Record API ++ @{ ++ ++ @brief APIs for updating SoftDevice and BootLoader ++ ++*/ ++ ++/* Header guard */ ++#ifndef NRF_MBR_H__ ++#define NRF_MBR_H__ ++ ++#include "nrf_svc.h" ++#include ++ ++#if !(defined(NRF52) || defined(NRF52840_XXAA)) ++#error "This header file shall only be included for nRF52 projects" ++#endif ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/** @addtogroup NRF_MBR_DEFINES Defines ++ * @{ */ ++ ++/**@brief MBR SVC Base number. */ ++#define MBR_SVC_BASE (0x18) ++ ++/**@brief Page size in words. */ ++#define MBR_PAGE_SIZE_IN_WORDS (1024) ++ ++/** @brief The size that must be reserved for the MBR when a softdevice is written to flash. ++This is the offset where the first byte of the softdevice hex file is written.*/ ++#define MBR_SIZE (0x1000) ++ ++/** @} */ ++ ++/** @addtogroup NRF_MBR_ENUMS Enumerations ++ * @{ */ ++ ++/**@brief nRF Master Boot Record API SVC numbers. */ ++enum NRF_MBR_SVCS ++{ ++ SD_MBR_COMMAND = MBR_SVC_BASE, /**< ::sd_mbr_command */ ++}; ++ ++/**@brief Possible values for ::sd_mbr_command_t.command */ ++enum NRF_MBR_COMMANDS ++{ ++ SD_MBR_COMMAND_COPY_BL, /**< Copy a new BootLoader. @see sd_mbr_command_copy_bl_t */ ++ SD_MBR_COMMAND_COPY_SD, /**< Copy a new SoftDevice. @see ::sd_mbr_command_copy_sd_t*/ ++ SD_MBR_COMMAND_INIT_SD, /**< Init forwarding interrupts to SD, and run reset function in SD*/ ++ SD_MBR_COMMAND_COMPARE, /**< This command works like memcmp. @see ::sd_mbr_command_compare_t*/ ++ SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET, /**< Start forwarding all exception to this address @see ::sd_mbr_command_vector_table_base_set_t*/ ++}; ++ ++/** @} */ ++ ++/** @addtogroup NRF_MBR_TYPES Types ++ * @{ */ ++ ++/**@brief This command copies part of a new SoftDevice ++ * The destination area is erased before copying. ++ * If dst is in the middle of a flash page, that whole flash page will be erased. ++ * If (dst+len) is in the middle of a flash page, that whole flash page will be erased. ++ * ++ * The user of this function is responsible for setting the BPROT registers. ++ * ++ * @retval ::NRF_SUCCESS indicates that the contents of the memory blocks where copied correctly. ++ * @retval ::NRF_ERROR_INTERNAL indicates that the contents of the memory blocks where not verified correctly after copying. ++ */ ++typedef struct ++{ ++ uint32_t *src; /**< Pointer to the source of data to be copied.*/ ++ uint32_t *dst; /**< Pointer to the destination where the content is to be copied.*/ ++ uint32_t len; /**< Number of 32 bit words to copy. Must be a multiple of @ref MBR_PAGE_SIZE_IN_WORDS words.*/ ++} sd_mbr_command_copy_sd_t; ++ ++ ++/**@brief This command works like memcmp, but takes the length in words. ++ * ++ * @retval ::NRF_SUCCESS indicates that the contents of both memory blocks are equal. ++ * @retval ::NRF_ERROR_NULL indicates that the contents of the memory blocks are not equal. ++ */ ++typedef struct ++{ ++ uint32_t *ptr1; /**< Pointer to block of memory. */ ++ uint32_t *ptr2; /**< Pointer to block of memory. */ ++ uint32_t len; /**< Number of 32 bit words to compare.*/ ++} sd_mbr_command_compare_t; ++ ++ ++/**@brief This command copies a new BootLoader. ++ * With this command, destination of BootLoader is always the address written in NRF_UICR->BOOTADDR. ++ * ++ * Destination is erased by this function. ++ * If (destination+bl_len) is in the middle of a flash page, that whole flash page will be erased. ++ * ++ * This function will use PROTENSET to protect the flash that is not intended to be written. ++ * ++ * On Success, this function will not return. It will start the new BootLoader from reset-vector as normal. ++ * ++ * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. ++ * @retval ::NRF_ERROR_FORBIDDEN if NRF_UICR->BOOTADDR is not set. ++ * @retval ::NRF_ERROR_INVALID_LENGTH if parameters attempts to read or write outside flash area. ++ * @retval ::NRF_ERROR_NO_MEM if no parameter page is provided (see sds for more info) ++ */ ++typedef struct ++{ ++ uint32_t *bl_src; /**< Pointer to the source of the Bootloader to be be copied.*/ ++ uint32_t bl_len; /**< Number of 32 bit words to copy for BootLoader. */ ++} sd_mbr_command_copy_bl_t; ++ ++/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the MBR ++ * ++ * Once this function has been called, this address is where the MBR will start to forward interrupts to after a reset. ++ * ++ * To restore default forwarding this function should be called with @param address set to 0. ++ * The MBR will then start forwarding to interrupts to the address in NFR_UICR->BOOTADDR or to the SoftDevice if the BOOTADDR is not set. ++ * ++ * On Success, this function will not return. It will reset the device. ++ * ++ * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. ++ * @retval ::NRF_ERROR_INVALID_ADDR if parameter address is outside of the flash size. ++ * @retval ::NRF_ERROR_NO_MEM if no parameter page is provided (see sds for more info) ++ */ ++typedef struct ++{ ++ uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ ++} sd_mbr_command_vector_table_base_set_t; ++ ++ ++typedef struct ++{ ++ uint32_t command; /**< type of command to be issued see @ref NRF_MBR_COMMANDS. */ ++ union ++ { ++ sd_mbr_command_copy_sd_t copy_sd; /**< Parameters for copy SoftDevice.*/ ++ sd_mbr_command_compare_t compare; /**< Parameters for verify.*/ ++ sd_mbr_command_copy_bl_t copy_bl; /**< Parameters for copy BootLoader. Requires parameter page. */ ++ sd_mbr_command_vector_table_base_set_t base_set; /**< Parameters for vector table base set. Requires parameter page.*/ ++ } params; ++} sd_mbr_command_t; ++ ++/** @} */ ++ ++/** @addtogroup NRF_MBR_FUNCTIONS Functions ++ * @{ */ ++ ++/**@brief Issue Master Boot Record commands ++ * ++ * Commands used when updating a SoftDevice and bootloader. ++ * ++ * The SD_MBR_COMMAND_COPY_BL and SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET requires parameters to be ++ * retained by the MBR when resetting the IC. This is done in a separate flash page ++ * provided by the application. The uicr register UICR.NRFFW[1] must be set ++ * to an address corresponding to a page in the application flash space. This page will be cleared ++ * by the MBR and used to store the command before reset. When the UICR.NRFFW[1] field is set ++ * the page it refers to must not be used by the application. If the UICR.NRFFW[1] is set to ++ * 0xFFFFFFFF (the default) MBR commands which use flash will be unavailable and return ++ * NRF_ERROR_NO_MEM. ++ * ++ * @param[in] param Pointer to a struct describing the command. ++ * ++ * @note for retvals see ::sd_mbr_command_copy_sd_t ::sd_mbr_command_copy_bl_t ::sd_mbr_command_compare_t ::sd_mbr_command_vector_table_base_set_t ++ * ++ * @retval NRF_ERROR_NO_MEM if UICR.NRFFW[1] is not set (i.e. is 0xFFFFFFFF). ++ * @retval NRF_ERROR_INVALID_PARAM if an invalid command is given. ++*/ ++SVCALL(SD_MBR_COMMAND, uint32_t, sd_mbr_command(sd_mbr_command_t* param)); ++ ++/** @} */ ++ ++#ifdef __cplusplus ++} ++#endif ++#endif // NRF_MBR_H__ ++ ++/** ++ @} ++*/ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_error.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_error.h +new file mode 100644 +index 0000000..55ce59e +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_error.h +@@ -0,0 +1,87 @@ ++/* ++ * Copyright (c) Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form must reproduce the above copyright notice, this ++ * list of conditions and the following disclaimer in the documentation and/or ++ * other materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other ++ * contributors to this software may be used to endorse or promote products ++ * derived from this software without specific prior written permission. ++ * ++ * 4. This software must only be used in a processor manufactured by Nordic ++ * Semiconductor ASA, or in a processor manufactured by a third party that ++ * is used in combination with a processor manufactured by Nordic Semiconductor. ++ * ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ++ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ++ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ * ++ */ ++ /** ++ @defgroup nrf_error SoftDevice Global Error Codes ++ @{ ++ ++ @brief Global Error definitions ++*/ ++ ++/* Header guard */ ++#ifndef NRF_ERROR_H__ ++#define NRF_ERROR_H__ ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/** @defgroup NRF_ERRORS_BASE Error Codes Base number definitions ++ * @{ */ ++#define NRF_ERROR_BASE_NUM (0x0) ///< Global error base ++#define NRF_ERROR_SDM_BASE_NUM (0x1000) ///< SDM error base ++#define NRF_ERROR_SOC_BASE_NUM (0x2000) ///< SoC error base ++#define NRF_ERROR_STK_BASE_NUM (0x3000) ///< STK error base ++/** @} */ ++ ++#define NRF_SUCCESS (NRF_ERROR_BASE_NUM + 0) ///< Successful command ++#define NRF_ERROR_SVC_HANDLER_MISSING (NRF_ERROR_BASE_NUM + 1) ///< SVC handler is missing ++#define NRF_ERROR_SOFTDEVICE_NOT_ENABLED (NRF_ERROR_BASE_NUM + 2) ///< SoftDevice has not been enabled ++#define NRF_ERROR_INTERNAL (NRF_ERROR_BASE_NUM + 3) ///< Internal Error ++#define NRF_ERROR_NO_MEM (NRF_ERROR_BASE_NUM + 4) ///< No Memory for operation ++#define NRF_ERROR_NOT_FOUND (NRF_ERROR_BASE_NUM + 5) ///< Not found ++#define NRF_ERROR_NOT_SUPPORTED (NRF_ERROR_BASE_NUM + 6) ///< Not supported ++#define NRF_ERROR_INVALID_PARAM (NRF_ERROR_BASE_NUM + 7) ///< Invalid Parameter ++#define NRF_ERROR_INVALID_STATE (NRF_ERROR_BASE_NUM + 8) ///< Invalid state, operation disallowed in this state ++#define NRF_ERROR_INVALID_LENGTH (NRF_ERROR_BASE_NUM + 9) ///< Invalid Length ++#define NRF_ERROR_INVALID_FLAGS (NRF_ERROR_BASE_NUM + 10) ///< Invalid Flags ++#define NRF_ERROR_INVALID_DATA (NRF_ERROR_BASE_NUM + 11) ///< Invalid Data ++#define NRF_ERROR_DATA_SIZE (NRF_ERROR_BASE_NUM + 12) ///< Invalid Data size ++#define NRF_ERROR_TIMEOUT (NRF_ERROR_BASE_NUM + 13) ///< Operation timed out ++#define NRF_ERROR_NULL (NRF_ERROR_BASE_NUM + 14) ///< Null Pointer ++#define NRF_ERROR_FORBIDDEN (NRF_ERROR_BASE_NUM + 15) ///< Forbidden Operation ++#define NRF_ERROR_INVALID_ADDR (NRF_ERROR_BASE_NUM + 16) ///< Bad Memory Address ++#define NRF_ERROR_BUSY (NRF_ERROR_BASE_NUM + 17) ///< Busy ++#define NRF_ERROR_CONN_COUNT (NRF_ERROR_BASE_NUM + 18) ///< Maximum connection count exceeded. ++#define NRF_ERROR_RESOURCES (NRF_ERROR_BASE_NUM + 19) ///< Not enough resources for operation ++ ++#ifdef __cplusplus ++} ++#endif ++#endif // NRF_ERROR_H__ ++ ++/** ++ @} ++*/ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_error_sdm.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_error_sdm.h +new file mode 100644 +index 0000000..3881071 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_error_sdm.h +@@ -0,0 +1,67 @@ ++/* ++ * Copyright (c) Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form must reproduce the above copyright notice, this ++ * list of conditions and the following disclaimer in the documentation and/or ++ * other materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other ++ * contributors to this software may be used to endorse or promote products ++ * derived from this software without specific prior written permission. ++ * ++ * 4. This software must only be used in a processor manufactured by Nordic ++ * Semiconductor ASA, or in a processor manufactured by a third party that ++ * is used in combination with a processor manufactured by Nordic Semiconductor. ++ * ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ++ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ++ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ * ++ */ ++ /** ++ @addtogroup nrf_sdm_api ++ @{ ++ @defgroup nrf_sdm_error SoftDevice Manager Error Codes ++ @{ ++ ++ @brief Error definitions for the SDM API ++*/ ++ ++/* Header guard */ ++#ifndef NRF_ERROR_SDM_H__ ++#define NRF_ERROR_SDM_H__ ++ ++#include "nrf_error.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++#define NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN (NRF_ERROR_SDM_BASE_NUM + 0) ///< Unknown lfclk source. ++#define NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION (NRF_ERROR_SDM_BASE_NUM + 1) ///< Incorrect interrupt configuration (can be caused by using illegal priority levels, or having enabled SoftDevice interrupts). ++#define NRF_ERROR_SDM_INCORRECT_CLENR0 (NRF_ERROR_SDM_BASE_NUM + 2) ///< Incorrect CLENR0 (can be caused by erronous SoftDevice flashing). ++ ++#ifdef __cplusplus ++} ++#endif ++#endif // NRF_ERROR_SDM_H__ ++ ++/** ++ @} ++ @} ++*/ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_error_soc.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_error_soc.h +new file mode 100644 +index 0000000..b876fc4 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_error_soc.h +@@ -0,0 +1,82 @@ ++/* ++ * Copyright (c) Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form must reproduce the above copyright notice, this ++ * list of conditions and the following disclaimer in the documentation and/or ++ * other materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other ++ * contributors to this software may be used to endorse or promote products ++ * derived from this software without specific prior written permission. ++ * ++ * 4. This software must only be used in a processor manufactured by Nordic ++ * Semiconductor ASA, or in a processor manufactured by a third party that ++ * is used in combination with a processor manufactured by Nordic Semiconductor. ++ * ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ++ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ++ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ * ++ */ ++/** ++ @addtogroup nrf_soc_api ++ @{ ++ @defgroup nrf_soc_error SoC Library Error Codes ++ @{ ++ ++ @brief Error definitions for the SoC library ++ ++*/ ++ ++/* Header guard */ ++#ifndef NRF_ERROR_SOC_H__ ++#define NRF_ERROR_SOC_H__ ++ ++#include "nrf_error.h" ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/* Mutex Errors */ ++#define NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN (NRF_ERROR_SOC_BASE_NUM + 0) ///< Mutex already taken ++ ++/* NVIC errors */ ++#define NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE (NRF_ERROR_SOC_BASE_NUM + 1) ///< NVIC interrupt not available ++#define NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED (NRF_ERROR_SOC_BASE_NUM + 2) ///< NVIC interrupt priority not allowed ++#define NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 3) ///< NVIC should not return ++ ++/* Power errors */ ++#define NRF_ERROR_SOC_POWER_MODE_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 4) ///< Power mode unknown ++#define NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 5) ///< Power POF threshold unknown ++#define NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 6) ///< Power off should not return ++ ++/* Rand errors */ ++#define NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES (NRF_ERROR_SOC_BASE_NUM + 7) ///< RAND not enough values ++ ++/* PPI errors */ ++#define NRF_ERROR_SOC_PPI_INVALID_CHANNEL (NRF_ERROR_SOC_BASE_NUM + 8) ///< Invalid PPI Channel ++#define NRF_ERROR_SOC_PPI_INVALID_GROUP (NRF_ERROR_SOC_BASE_NUM + 9) ///< Invalid PPI Group ++ ++#ifdef __cplusplus ++} ++#endif ++#endif // NRF_ERROR_SOC_H__ ++/** ++ @} ++ @} ++*/ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_nvic.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_nvic.h +new file mode 100644 +index 0000000..40a6f84 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_nvic.h +@@ -0,0 +1,485 @@ ++/* ++ * Copyright (c) Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form must reproduce the above copyright notice, this ++ * list of conditions and the following disclaimer in the documentation and/or ++ * other materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other ++ * contributors to this software may be used to endorse or promote products ++ * derived from this software without specific prior written permission. ++ * ++ * 4. This software must only be used in a processor manufactured by Nordic ++ * Semiconductor ASA, or in a processor manufactured by a third party that ++ * is used in combination with a processor manufactured by Nordic Semiconductor. ++ * ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ++ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ++ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ * ++ */ ++/** ++ * @defgroup nrf_nvic_api SoftDevice NVIC API ++ * @{ ++ * ++ * @note In order to use this module, the following code has to be added to a .c file: ++ * \code ++ * nrf_nvic_state_t nrf_nvic_state = {0}; ++ * \endcode ++ * ++ * @note Definitions and declarations starting with __ (double underscore) in this header file are ++ * not intended for direct use by the application. ++ * ++ * @brief APIs for the accessing NVIC when using a SoftDevice. ++ * ++ */ ++ ++#ifndef NRF_NVIC_H__ ++#define NRF_NVIC_H__ ++ ++#include ++#include "nrf.h" ++ ++#include "nrf_error_soc.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/**@addtogroup NRF_NVIC_DEFINES Defines ++ * @{ */ ++ ++/**@defgroup NRF_NVIC_ISER_DEFINES SoftDevice NVIC internal definitions ++ * @{ */ ++ ++#define __NRF_NVIC_NVMC_IRQn (30) /**< The peripheral ID of the NVMC. IRQ numbers are used to identify peripherals, but the NVMC doesn't have an IRQ number in the MDK. */ ++ ++#ifdef NRF51 ++ #define __NRF_NVIC_ISER_COUNT (1) /**< The number of ISER/ICER registers in the NVIC that are used. */ ++ ++ /**@brief Interrupts used by the SoftDevice. */ ++ #define __NRF_NVIC_SD_IRQS_0 ((uint32_t)( \ ++ (1U << POWER_CLOCK_IRQn) \ ++ | (1U << RADIO_IRQn) \ ++ | (1U << RTC0_IRQn) \ ++ | (1U << TIMER0_IRQn) \ ++ | (1U << RNG_IRQn) \ ++ | (1U << ECB_IRQn) \ ++ | (1U << CCM_AAR_IRQn) \ ++ | (1U << TEMP_IRQn) \ ++ | (1U << __NRF_NVIC_NVMC_IRQn) \ ++ | (1U << (uint32_t)SWI4_IRQn) \ ++ | (1U << (uint32_t)SWI5_IRQn) \ ++ )) ++ ++ /**@brief Interrupts available for to application. */ ++ #define __NRF_NVIC_APP_IRQS_0 (~__NRF_NVIC_SD_IRQS_0) ++#endif ++ ++#if (defined(NRF52) || defined(NRF52840_XXAA)) ++ #define __NRF_NVIC_ISER_COUNT (2) /**< The number of ISER/ICER registers in the NVIC that are used. */ ++ ++ /**@brief Interrupts used by the SoftDevice. */ ++ #define __NRF_NVIC_SD_IRQS_0 ((uint32_t)( \ ++ (1U << POWER_CLOCK_IRQn) \ ++ | (1U << RADIO_IRQn) \ ++ | (1U << RTC0_IRQn) \ ++ | (1U << TIMER0_IRQn) \ ++ | (1U << RNG_IRQn) \ ++ | (1U << ECB_IRQn) \ ++ | (1U << CCM_AAR_IRQn) \ ++ | (1U << TEMP_IRQn) \ ++ | (1U << __NRF_NVIC_NVMC_IRQn) \ ++ | (1U << (uint32_t)SWI4_EGU4_IRQn) \ ++ | (1U << (uint32_t)SWI5_EGU5_IRQn) \ ++ )) ++ #define __NRF_NVIC_SD_IRQS_1 ((uint32_t)0) ++ ++ /**@brief Interrupts available for to application. */ ++ #define __NRF_NVIC_APP_IRQS_0 (~__NRF_NVIC_SD_IRQS_0) ++ #define __NRF_NVIC_APP_IRQS_1 (~__NRF_NVIC_SD_IRQS_1) ++#endif ++/**@} */ ++ ++/**@} */ ++ ++/**@addtogroup NRF_NVIC_VARIABLES Variables ++ * @{ */ ++ ++/**@brief Type representing the state struct for the SoftDevice NVIC module. */ ++typedef struct ++{ ++ uint32_t volatile __irq_masks[__NRF_NVIC_ISER_COUNT]; /**< IRQs enabled by the application in the NVIC. */ ++ uint32_t volatile __cr_flag; /**< Non-zero if already in a critical region */ ++} nrf_nvic_state_t; ++ ++/**@brief Variable keeping the state for the SoftDevice NVIC module. This must be declared in an ++ * application source file. */ ++extern nrf_nvic_state_t nrf_nvic_state; ++ ++/**@} */ ++ ++/**@addtogroup NRF_NVIC_INTERNAL_FUNCTIONS SoftDevice NVIC internal functions ++ * @{ */ ++ ++/**@brief Disables IRQ interrupts globally, including the SoftDevice's interrupts. ++ * ++ * @retval The value of PRIMASK prior to disabling the interrupts. ++ */ ++static inline int __sd_nvic_irq_disable(void) ++{ ++ int pm = __get_PRIMASK(); ++ __disable_irq(); ++ return pm; ++} ++ ++/**@brief Enables IRQ interrupts globally, including the SoftDevice's interrupts. ++ */ ++static inline void __sd_nvic_irq_enable(void) ++{ ++ __enable_irq(); ++} ++ ++/**@brief Checks if IRQn is available to application ++ * @param[in] IRQn irq to check ++ * ++ * @retval 1 (true) if the irq to check is available to the application ++ */ ++static inline uint32_t __sd_nvic_app_accessible_irq(IRQn_Type IRQn) ++{ ++ if (IRQn < 32) ++ { ++ return ((1UL<= (1 << __NVIC_PRIO_BITS)) ++ { ++ return 0; ++ } ++#ifdef NRF51 ++ if ( priority == 0 ++ || priority == 2 ++ ) ++ { ++ return 0; ++ } ++#endif ++#if (defined(NRF52) || defined(NRF52840_XXAA)) ++ if ( priority == 0 ++ || priority == 1 ++ || priority == 4 ++ || priority == 5 ++ ) ++ { ++ return 0; ++ } ++#endif ++ return 1; ++} ++ ++/**@} */ ++ ++/**@addtogroup NRF_NVIC_FUNCTIONS SoftDevice NVIC public functions ++ * @{ */ ++ ++/**@brief Enable External Interrupt. ++ * @note Corresponds to NVIC_EnableIRQ in CMSIS. ++ * ++ * @pre IRQn is valid and not reserved by the stack. ++ * ++ * @param[in] IRQn See the NVIC_EnableIRQ documentation in CMSIS. ++ * ++ * @retval ::NRF_SUCCESS The interrupt was enabled. ++ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. ++ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt has a priority not available for the application. ++ */ ++static inline uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn) ++{ ++ if (!__sd_nvic_app_accessible_irq(IRQn)) ++ { ++ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; ++ } ++ if (!__sd_nvic_is_app_accessible_priority(NVIC_GetPriority(IRQn))) ++ { ++ return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED; ++ } ++ ++ if (nrf_nvic_state.__cr_flag) ++ { ++ nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] |= (uint32_t)(1 << ((uint32_t)((int32_t)IRQn) & (uint32_t)0x1F)); ++ } ++ else ++ { ++ NVIC_EnableIRQ(IRQn); ++ } ++ return NRF_SUCCESS; ++} ++ ++/**@brief Disable External Interrupt. ++ * @note Corresponds to NVIC_DisableIRQ in CMSIS. ++ * ++ * @pre IRQn is valid and not reserved by the stack. ++ * ++ * @param[in] IRQn See the NVIC_DisableIRQ documentation in CMSIS. ++ * ++ * @retval ::NRF_SUCCESS The interrupt was disabled. ++ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. ++ */ ++static inline uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn) ++{ ++ if (!__sd_nvic_app_accessible_irq(IRQn)) ++ { ++ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; ++ } ++ ++ if (nrf_nvic_state.__cr_flag) ++ { ++ nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] &= ~(1UL << ((uint32_t)(IRQn) & 0x1F)); ++ } ++ else ++ { ++ NVIC_DisableIRQ(IRQn); ++ } ++ ++ return NRF_SUCCESS; ++} ++ ++/**@brief Get Pending Interrupt. ++ * @note Corresponds to NVIC_GetPendingIRQ in CMSIS. ++ * ++ * @pre IRQn is valid and not reserved by the stack. ++ * ++ * @param[in] IRQn See the NVIC_GetPendingIRQ documentation in CMSIS. ++ * @param[out] p_pending_irq Return value from NVIC_GetPendingIRQ. ++ * ++ * @retval ::NRF_SUCCESS The interrupt is available for the application. ++ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. ++ */ ++static inline uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq) ++{ ++ if (__sd_nvic_app_accessible_irq(IRQn)) ++ { ++ *p_pending_irq = NVIC_GetPendingIRQ(IRQn); ++ return NRF_SUCCESS; ++ } ++ else ++ { ++ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; ++ } ++} ++ ++/**@brief Set Pending Interrupt. ++ * @note Corresponds to NVIC_SetPendingIRQ in CMSIS. ++ * ++ * @pre IRQn is valid and not reserved by the stack. ++ * ++ * @param[in] IRQn See the NVIC_SetPendingIRQ documentation in CMSIS. ++ * ++ * @retval ::NRF_SUCCESS The interrupt is set pending. ++ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. ++ */ ++static inline uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn) ++{ ++ if (__sd_nvic_app_accessible_irq(IRQn)) ++ { ++ NVIC_SetPendingIRQ(IRQn); ++ return NRF_SUCCESS; ++ } ++ else ++ { ++ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; ++ } ++} ++ ++/**@brief Clear Pending Interrupt. ++ * @note Corresponds to NVIC_ClearPendingIRQ in CMSIS. ++ * ++ * @pre IRQn is valid and not reserved by the stack. ++ * ++ * @param[in] IRQn See the NVIC_ClearPendingIRQ documentation in CMSIS. ++ * ++ * @retval ::NRF_SUCCESS The interrupt pending flag is cleared. ++ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. ++ */ ++static inline uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn) ++{ ++ if (__sd_nvic_app_accessible_irq(IRQn)) ++ { ++ NVIC_ClearPendingIRQ(IRQn); ++ return NRF_SUCCESS; ++ } ++ else ++ { ++ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; ++ } ++} ++ ++/**@brief Set Interrupt Priority. ++ * @note Corresponds to NVIC_SetPriority in CMSIS. ++ * ++ * @pre IRQn is valid and not reserved by the stack. ++ * @pre Priority is valid and not reserved by the stack. ++ * ++ * @param[in] IRQn See the NVIC_SetPriority documentation in CMSIS. ++ * @param[in] priority A valid IRQ priority for use by the application. ++ * ++ * @retval ::NRF_SUCCESS The interrupt and priority level is available for the application. ++ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. ++ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt priority is not available for the application. ++ */ ++static inline uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority) ++{ ++ if (!__sd_nvic_app_accessible_irq(IRQn)) ++ { ++ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; ++ } ++ ++ if (!__sd_nvic_is_app_accessible_priority(priority)) ++ { ++ return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED; ++ } ++ ++ NVIC_SetPriority(IRQn, (uint32_t)priority); ++ return NRF_SUCCESS; ++} ++ ++/**@brief Get Interrupt Priority. ++ * @note Corresponds to NVIC_GetPriority in CMSIS. ++ * ++ * @pre IRQn is valid and not reserved by the stack. ++ * ++ * @param[in] IRQn See the NVIC_GetPriority documentation in CMSIS. ++ * @param[out] p_priority Return value from NVIC_GetPriority. ++ * ++ * @retval ::NRF_SUCCESS The interrupt priority is returned in p_priority. ++ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE - IRQn is not available for the application. ++ */ ++static inline uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority) ++{ ++ if (__sd_nvic_app_accessible_irq(IRQn)) ++ { ++ *p_priority = (NVIC_GetPriority(IRQn) & 0xFF); ++ return NRF_SUCCESS; ++ } ++ else ++ { ++ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; ++ } ++} ++ ++/**@brief System Reset. ++ * @note Corresponds to NVIC_SystemReset in CMSIS. ++ * ++ * @retval ::NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN ++ */ ++static inline uint32_t sd_nvic_SystemReset(void) ++{ ++ NVIC_SystemReset(); ++ return NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN; ++} ++ ++/**@brief Enters critical region. ++ * ++ * @post Application interrupts will be disabled. ++ * @note sd_nvic_critical_region_enter() and ::sd_nvic_critical_region_exit() must be called in matching pairs inside each ++ * execution context ++ * @sa sd_nvic_critical_region_exit ++ * ++ * @param[out] p_is_nested_critical_region If 1, the application is now in a nested critical region. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++static inline uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region) ++{ ++ int was_masked = __sd_nvic_irq_disable(); ++ if (!nrf_nvic_state.__cr_flag) ++ { ++ nrf_nvic_state.__cr_flag = 1; ++ nrf_nvic_state.__irq_masks[0] = ( NVIC->ICER[0] & __NRF_NVIC_APP_IRQS_0 ); ++ NVIC->ICER[0] = __NRF_NVIC_APP_IRQS_0; ++ #if (defined(NRF52) || defined(NRF52840_XXAA)) ++ nrf_nvic_state.__irq_masks[1] = ( NVIC->ICER[1] & __NRF_NVIC_APP_IRQS_1 ); ++ NVIC->ICER[1] = __NRF_NVIC_APP_IRQS_1; ++ #endif ++ *p_is_nested_critical_region = 0; ++ } ++ else ++ { ++ *p_is_nested_critical_region = 1; ++ } ++ if (!was_masked) ++ { ++ __sd_nvic_irq_enable(); ++ } ++ return NRF_SUCCESS; ++} ++ ++/**@brief Exit critical region. ++ * ++ * @pre Application has entered a critical region using ::sd_nvic_critical_region_enter. ++ * @post If not in a nested critical region, the application interrupts will restored to the state before ::sd_nvic_critical_region_enter was called. ++ * ++ * @param[in] is_nested_critical_region If this is set to 1, the critical region won't be exited. @sa sd_nvic_critical_region_enter. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++static inline uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region) ++{ ++ if (nrf_nvic_state.__cr_flag && (is_nested_critical_region == 0)) ++ { ++ int was_masked = __sd_nvic_irq_disable(); ++ NVIC->ISER[0] = nrf_nvic_state.__irq_masks[0]; ++ #if (defined(NRF52) || defined(NRF52840_XXAA)) ++ NVIC->ISER[1] = nrf_nvic_state.__irq_masks[1]; ++ #endif ++ nrf_nvic_state.__cr_flag = 0; ++ if (!was_masked) ++ { ++ __sd_nvic_irq_enable(); ++ } ++ } ++ ++ return NRF_SUCCESS; ++} ++/**@} */ ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif // NRF_NVIC_H__ ++ ++/**@} */ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_sd_def.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_sd_def.h +new file mode 100644 +index 0000000..58e699e +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_sd_def.h +@@ -0,0 +1,28 @@ ++/* Copyright (c) 2015 - 2018 Nordic Semiconductor ASA. All Rights Reserved. ++ * ++ * The information contained herein is confidential property of Nordic Semiconductor ASA. ++ * The use, copying, transfer or disclosure of such information is prohibited except by ++ * express written agreement with Nordic Semiconductor ASA. ++ * ++ */ ++ ++#ifndef NRF_SD_DEF_H__ ++#define NRF_SD_DEF_H__ ++ ++#include ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++#define SD_PPI_CHANNELS_USED 0xFFF0C000uL /**< PPI channels utilized by SotfDevice (not available to the application). */ ++#define SD_PPI_GROUPS_USED 0x0000000CuL /**< PPI groups utilized by SoftDevice (not available to the application). */ ++#define SD_TIMERS_USED 0x00000001uL /**< Timers used by SoftDevice. */ ++#define SD_SWI_USED 0x0000003CuL /**< Software interrupts used by SoftDevice */ ++ ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif /* NRF_SD_DEF_H__ */ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_sdm.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_sdm.h +new file mode 100644 +index 0000000..bb98ce0 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_sdm.h +@@ -0,0 +1,331 @@ ++/* ++ * Copyright (c) Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form must reproduce the above copyright notice, this ++ * list of conditions and the following disclaimer in the documentation and/or ++ * other materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other ++ * contributors to this software may be used to endorse or promote products ++ * derived from this software without specific prior written permission. ++ * ++ * 4. This software must only be used in a processor manufactured by Nordic ++ * Semiconductor ASA, or in a processor manufactured by a third party that ++ * is used in combination with a processor manufactured by Nordic Semiconductor. ++ * ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ++ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ++ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ * ++ */ ++/** ++ @defgroup nrf_sdm_api SoftDevice Manager API ++ @{ ++ ++ @brief APIs for SoftDevice management. ++ ++*/ ++ ++#ifndef NRF_SDM_H__ ++#define NRF_SDM_H__ ++ ++#include "nrf_svc.h" ++#include "nrf.h" ++#include "nrf_soc.h" ++#include "nrf_error_sdm.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/** @addtogroup NRF_SDM_DEFINES Defines ++ * @{ */ ++#ifdef NRFSOC_DOXYGEN ++/// Declared in nrf_mbr.h ++#define MBR_SIZE 0 ++#warning test ++#endif ++ ++/** @brief The major version for the SoftDevice binary distributed with this header file. */ ++#define SD_MAJOR_VERSION (3) ++ ++/** @brief The minor version for the SoftDevice binary distributed with this header file. */ ++#define SD_MINOR_VERSION (0) ++ ++/** @brief The bugfix version for the SoftDevice binary distributed with this header file. */ ++#define SD_BUGFIX_VERSION (0) ++ ++/** @brief The full version number for the SoftDevice binary this header file was distributed ++ * with, as a decimal number in the form Mmmmbbb, where: ++ * - M is major version (one or more digits) ++ * - mmm is minor version (three digits) ++ * - bbb is bugfix version (three digits). */ ++#define SD_VERSION (SD_MAJOR_VERSION * 1000000 + SD_MINOR_VERSION * 1000 + SD_BUGFIX_VERSION) ++ ++/** @brief SoftDevice Manager SVC Base number. */ ++#define SDM_SVC_BASE 0x10 ++ ++/** @brief Invalid info field. Returned when an info field does not exist. */ ++#define SDM_INFO_FIELD_INVALID (0) ++ ++/** @brief Defines the SoftDevice Information Structure location (address) as an offset from ++the start of the softdevice (without MBR)*/ ++#define SOFTDEVICE_INFO_STRUCT_OFFSET (0x2000) ++ ++/** @brief Defines the absolute SoftDevice Information Structure location (address) when the ++ * SoftDevice is installed just above the MBR (the usual case). */ ++#define SOFTDEVICE_INFO_STRUCT_ADDRESS (SOFTDEVICE_INFO_STRUCT_OFFSET + MBR_SIZE) ++ ++/** @brief Defines the offset for the SoftDevice Information Structure size value relative to the ++ * SoftDevice base address. The size value is of type uint8_t. */ ++#define SD_INFO_STRUCT_SIZE_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET) ++ ++/** @brief Defines the offset for the SoftDevice size value relative to the SoftDevice base address. ++ * The size value is of type uint32_t. */ ++#define SD_SIZE_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x08) ++ ++/** @brief Defines the offset for FWID value relative to the SoftDevice base address. The FWID value ++ * is of type uint16_t. */ ++#define SD_FWID_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x0C) ++ ++/** @brief Defines the offset for the SoftDevice ID relative to the SoftDevice base address. The ID ++ * is of type uint32_t. */ ++#define SD_ID_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x10) ++ ++/** @brief Defines the offset for the SoftDevice version relative to the SoftDevice base address in ++ * the same format as @ref SD_VERSION, stored as an uint32_t. */ ++#define SD_VERSION_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x14) ++ ++/** @brief Defines a macro for retreiving the actual SoftDevice Information Structure size value ++ * from a given base address. Use @ref MBR_SIZE as the argument when the SoftDevice is ++ * installed just above the MBR (the usual case). */ ++#define SD_INFO_STRUCT_SIZE_GET(baseaddr) (*((uint8_t *) ((baseaddr) + SD_INFO_STRUCT_SIZE_OFFSET))) ++ ++/** @brief Defines a macro for retreiving the actual SoftDevice size value from a given base ++ * address. Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above ++ * the MBR (the usual case). */ ++#define SD_SIZE_GET(baseaddr) (*((uint32_t *) ((baseaddr) + SD_SIZE_OFFSET))) ++ ++/** @brief Defines a macro for retreiving the actual FWID value from a given base address. Use @ref ++ * MBR_SIZE as the argument when the SoftDevice is installed just above the MBR (the usual ++ * case). */ ++#define SD_FWID_GET(baseaddr) (*((uint16_t *) ((baseaddr) + SD_FWID_OFFSET))) ++ ++/** @brief Defines a macro for retreiving the actual SoftDevice ID from a given base address. Use ++ * @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR (the ++ * usual case). */ ++#define SD_ID_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_ID_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ ++ ? (*((uint32_t *) ((baseaddr) + SD_ID_OFFSET))) : SDM_INFO_FIELD_INVALID) ++ ++/** @brief Defines a macro for retreiving the actual FWID value from a given base address. Use @ref ++ * MBR_SIZE as the argument when the SoftDevice is installed just above the MBR (the usual ++ * case). */ ++#define SD_VERSION_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_VERSION_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ ++ ? (*((uint32_t *) ((baseaddr) + SD_VERSION_OFFSET))) : SDM_INFO_FIELD_INVALID) ++ ++/**@defgroup NRF_FAULT_ID_RANGES Fault ID ranges ++ * @{ */ ++#define NRF_FAULT_ID_SD_RANGE_START 0x00000000 /**< SoftDevice ID range start. */ ++#define NRF_FAULT_ID_APP_RANGE_START 0x00001000 /**< Application ID range start. */ ++/**@} */ ++ ++/**@defgroup NRF_FAULT_IDS Fault ID types ++ * @{ */ ++#define NRF_FAULT_ID_SD_ASSERT (NRF_FAULT_ID_SD_RANGE_START + 1) /**< SoftDevice assertion. The info parameter will be set to 0x00000000. */ ++#define NRF_FAULT_ID_APP_MEMACC (NRF_FAULT_ID_APP_RANGE_START + 1) /**< Application invalid memory access (nRF52 only). The info parameter will contain 0x00000000, in case of SoftDevice RAM ++ access violation. In case of SoftDevice peripheral register violation the info parameter will contain the sub-region number of PREGION[0], on whose address range the unallowed ++ write access caused the memory access fault. */ ++/**@} */ ++ ++/** @} */ ++ ++/** @addtogroup NRF_SDM_ENUMS Enumerations ++ * @{ */ ++ ++/**@brief nRF SoftDevice Manager API SVC numbers. */ ++enum NRF_SD_SVCS ++{ ++ SD_SOFTDEVICE_ENABLE = SDM_SVC_BASE, /**< ::sd_softdevice_enable */ ++ SD_SOFTDEVICE_DISABLE, /**< ::sd_softdevice_disable */ ++ SD_SOFTDEVICE_IS_ENABLED, /**< ::sd_softdevice_is_enabled */ ++ SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, /**< ::sd_softdevice_vector_table_base_set */ ++ SVC_SDM_LAST /**< Placeholder for last SDM SVC */ ++}; ++ ++/** @} */ ++ ++/** @addtogroup NRF_SDM_DEFINES Defines ++ * @{ */ ++ ++/**@defgroup NRF_CLOCK_LF_XTAL_ACCURACY Clock accuracy ++ * @{ */ ++ ++#define NRF_CLOCK_LF_XTAL_ACCURACY_250_PPM (0) /**< Default: 250 ppm */ ++#define NRF_CLOCK_LF_XTAL_ACCURACY_500_PPM (1) /**< 500 ppm */ ++#define NRF_CLOCK_LF_XTAL_ACCURACY_150_PPM (2) /**< 150 ppm */ ++#define NRF_CLOCK_LF_XTAL_ACCURACY_100_PPM (3) /**< 100 ppm */ ++#define NRF_CLOCK_LF_XTAL_ACCURACY_75_PPM (4) /**< 75 ppm */ ++#define NRF_CLOCK_LF_XTAL_ACCURACY_50_PPM (5) /**< 50 ppm */ ++#define NRF_CLOCK_LF_XTAL_ACCURACY_30_PPM (6) /**< 30 ppm */ ++#define NRF_CLOCK_LF_XTAL_ACCURACY_20_PPM (7) /**< 20 ppm */ ++ ++/** @} */ ++ ++/**@defgroup NRF_CLOCK_LF_SRC Possible lfclk oscillator sources ++ * @{ */ ++ ++#define NRF_CLOCK_LF_SRC_RC (0) /**< LFCLK RC oscillator. */ ++#define NRF_CLOCK_LF_SRC_XTAL (1) /**< LFCLK crystal oscillator. */ ++#define NRF_CLOCK_LF_SRC_SYNTH (2) /**< LFCLK Synthesized from HFCLK. */ ++ ++/** @} */ ++ ++/** @} */ ++ ++/** @addtogroup NRF_SDM_TYPES Types ++ * @{ */ ++ ++/**@brief Type representing lfclk oscillator source. */ ++typedef struct ++{ ++ uint8_t source; /**< LF oscillator clock source, see @ref NRF_CLOCK_LF_SRC. */ ++ uint8_t rc_ctiv; /**< Only for NRF_CLOCK_LF_SRC_RC: Calibration timer interval in 1/4 second ++ units (nRF51: 1-64, nRF52: 1-32). ++ @note To avoid excessive clock drift, 0.5 degrees Celsius is the ++ maximum temperature change allowed in one calibration timer ++ interval. The interval should be selected to ensure this. ++ ++ @note Must be 0 if source is not NRF_CLOCK_LF_SRC_RC. */ ++ uint8_t rc_temp_ctiv; /**< Only for NRF_CLOCK_LF_SRC_RC: How often (in number of calibration ++ intervals) the RC oscillator shall be calibrated if the temperature ++ hasn't changed. ++ 0: Always calibrate even if the temperature hasn't changed. ++ 1: Only calibrate if the temperature has changed (nRF51 only). ++ 2-33: Check the temperature and only calibrate if it has changed, ++ however calibration will take place every rc_temp_ctiv ++ intervals in any case. ++ ++ @note Must be 0 if source is not NRF_CLOCK_LF_SRC_RC. ++ ++ @note For nRF52, the application must ensure calibration at least once ++ every 8 seconds to ensure +/-250ppm clock stability. The ++ recommended configuration for NRF_CLOCK_LF_SRC_RC on nRF52 is ++ rc_ctiv=16 and rc_temp_ctiv=2. This will ensure calibration at ++ least once every 8 seconds and for temperature changes of 0.5 ++ degrees Celsius every 4 seconds. See the Product Specification ++ for the nRF52 device being used for more information.*/ ++ uint8_t xtal_accuracy; /**< External crystal clock accuracy used in the LL to compute timing windows. ++ ++ @note For the NRF_CLOCK_LF_SRC_RC clock source this parameter is ignored. */ ++} nrf_clock_lf_cfg_t; ++ ++/**@brief Fault Handler type. ++ * ++ * When certain unrecoverable errors occur within the application or SoftDevice the fault handler will be called back. ++ * The protocol stack will be in an undefined state when this happens and the only way to recover will be to ++ * perform a reset, using e.g. CMSIS NVIC_SystemReset(). ++ * ++ * @note This callback is executed in HardFault context, thus SVC functions cannot be called from the fault callback. ++ * ++ * @param[in] id Fault identifier. See @ref NRF_FAULT_IDS. ++ * @param[in] pc The program counter of the instruction that triggered the fault. ++ * @param[in] info Optional additional information regarding the fault. Refer to each Fault identifier for details. ++ * ++ * @note When id is set to NRF_FAULT_ID_APP_MEMACC, pc will contain the address of the instruction being executed at the time when ++ * the fault is detected by the CPU. The CPU program counter may have advanced up to 2 instructions (no branching) after the one that triggered the fault. ++ */ ++typedef void (*nrf_fault_handler_t)(uint32_t id, uint32_t pc, uint32_t info); ++ ++/** @} */ ++ ++/** @addtogroup NRF_SDM_FUNCTIONS Functions ++ * @{ */ ++ ++/**@brief Enables the SoftDevice and by extension the protocol stack. ++ * ++ * @note Some care must be taken if a low frequency clock source is already running when calling this function: ++ * If the LF clock has a different source then the one currently running, it will be stopped. Then, the new ++ * clock source will be started. ++ * ++ * @note This function has no effect when returning with an error. ++ * ++ * @post If return code is ::NRF_SUCCESS ++ * - SoC library and protocol stack APIs are made available. ++ * - A portion of RAM will be unavailable (see relevant SDS documentation). ++ * - Some peripherals will be unavailable or available only through the SoC API (see relevant SDS documentation). ++ * - Interrupts will not arrive from protected peripherals or interrupts. ++ * - nrf_nvic_ functions must be used instead of CMSIS NVIC_ functions for reliable usage of the SoftDevice. ++ * - Interrupt latency may be affected by the SoftDevice (see relevant SDS documentation). ++ * - Chosen low frequency clock source will be running. ++ * ++ * @param p_clock_lf_cfg Low frequency clock source and accuracy. ++ If NULL the clock will be configured as an rc source with rc_ctiv = 16 and .rc_temp_ctiv = 2 ++ In the case of XTAL source, the PPM accuracy of the chosen clock source must be greater than or equal to the actual characteristics of your XTAL clock. ++ * @param fault_handler Callback to be invoked in case of fault. ++ * ++ * @retval ::NRF_SUCCESS ++ * @retval ::NRF_ERROR_INVALID_STATE SoftDevice is already enabled, and the clock source and fault handler cannot be updated. ++ * @retval ::NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION SoftDevice interrupt is already enabled, or an enabled interrupt has an illegal priority level. ++ * @retval ::NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN Unknown low frequency clock source selected. ++ */ ++SVCALL(SD_SOFTDEVICE_ENABLE, uint32_t, sd_softdevice_enable(nrf_clock_lf_cfg_t const * p_clock_lf_cfg, nrf_fault_handler_t fault_handler)); ++ ++ ++/**@brief Disables the SoftDevice and by extension the protocol stack. ++ * ++ * Idempotent function to disable the SoftDevice. ++ * ++ * @post SoC library and protocol stack APIs are made unavailable. ++ * @post All interrupts that was protected by the SoftDevice will be disabled and initialized to priority 0 (highest). ++ * @post All peripherals used by the SoftDevice will be reset to default values. ++ * @post All of RAM become available. ++ * @post All interrupts are forwarded to the application. ++ * @post LFCLK source chosen in ::sd_softdevice_enable will be left running. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_SOFTDEVICE_DISABLE, uint32_t, sd_softdevice_disable(void)); ++ ++/**@brief Check if the SoftDevice is enabled. ++ * ++ * @param[out] p_softdevice_enabled If the SoftDevice is enabled: 1 else 0. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_SOFTDEVICE_IS_ENABLED, uint32_t, sd_softdevice_is_enabled(uint8_t * p_softdevice_enabled)); ++ ++/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the SoftDevice ++ * ++ * This function is only intended to be called when a bootloader is enabled. ++ * ++ * @param[in] address The base address of the interrupt vector table for forwarded interrupts. ++ ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, uint32_t, sd_softdevice_vector_table_base_set(uint32_t address)); ++ ++/** @} */ ++ ++#ifdef __cplusplus ++} ++#endif ++#endif // NRF_SDM_H__ ++ ++/** ++ @} ++*/ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_soc.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_soc.h +new file mode 100644 +index 0000000..2e9e820 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_soc.h +@@ -0,0 +1,906 @@ ++/* ++ * Copyright (c) Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form must reproduce the above copyright notice, this ++ * list of conditions and the following disclaimer in the documentation and/or ++ * other materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other ++ * contributors to this software may be used to endorse or promote products ++ * derived from this software without specific prior written permission. ++ * ++ * 4. This software must only be used in a processor manufactured by Nordic ++ * Semiconductor ASA, or in a processor manufactured by a third party that ++ * is used in combination with a processor manufactured by Nordic Semiconductor. ++ * ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ++ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ++ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ * ++ */ ++/** ++ * @defgroup nrf_soc_api SoC Library API ++ * @{ ++ * ++ * @brief APIs for the SoC library. ++ * ++ */ ++ ++#ifndef NRF_SOC_H__ ++#define NRF_SOC_H__ ++ ++#include ++#include ++#include "nrf_svc.h" ++#include "nrf.h" ++ ++#include "nrf_error_soc.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/**@addtogroup NRF_SOC_DEFINES Defines ++ * @{ */ ++ ++/**@brief The number of the lowest SVC number reserved for the SoC library. */ ++#define SOC_SVC_BASE (0x20) /**< Base value for SVCs that are available when the SoftDevice is disabled. */ ++#define SOC_SVC_BASE_NOT_AVAILABLE (0x2B) /**< Base value for SVCs that are not available when the SoftDevice is disabled. */ ++ ++/**@brief Guranteed time for application to process radio inactive notification. */ ++#define NRF_RADIO_NOTIFICATION_INACTIVE_GUARANTEED_TIME_US (62) ++ ++/**@brief The minimum allowed timeslot extension time. */ ++#define NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US (200) ++ ++#define SOC_ECB_KEY_LENGTH (16) /**< ECB key length. */ ++#define SOC_ECB_CLEARTEXT_LENGTH (16) /**< ECB cleartext length. */ ++#define SOC_ECB_CIPHERTEXT_LENGTH (SOC_ECB_CLEARTEXT_LENGTH) /**< ECB ciphertext length. */ ++ ++#ifdef NRF51 ++#define SD_EVT_IRQn (SWI2_IRQn) /**< SoftDevice Event IRQ number. Used for both protocol events and SoC events. */ ++#define SD_EVT_IRQHandler (SWI2_IRQHandler) /**< SoftDevice Event IRQ handler. Used for both protocol events and SoC events. */ ++#define RADIO_NOTIFICATION_IRQn (SWI1_IRQn) /**< The radio notification IRQ number. */ ++#define RADIO_NOTIFICATION_IRQHandler (SWI1_IRQHandler) /**< The radio notification IRQ handler. */ ++#endif ++#if (defined(NRF52) || defined(NRF52840_XXAA)) ++#define SD_EVT_IRQn (SWI2_EGU2_IRQn) /**< SoftDevice Event IRQ number. Used for both protocol events and SoC events. */ ++#define SD_EVT_IRQHandler (SWI2_EGU2_IRQHandler) /**< SoftDevice Event IRQ handler. Used for both protocol events and SoC events. */ ++#define RADIO_NOTIFICATION_IRQn (SWI1_EGU1_IRQn) /**< The radio notification IRQ number. */ ++#define RADIO_NOTIFICATION_IRQHandler (SWI1_EGU1_IRQHandler) /**< The radio notification IRQ handler. */ ++#endif ++ ++#define NRF_RADIO_LENGTH_MIN_US (100) /**< The shortest allowed radio timeslot, in microseconds. */ ++#define NRF_RADIO_LENGTH_MAX_US (100000) /**< The longest allowed radio timeslot, in microseconds. */ ++ ++#define NRF_RADIO_DISTANCE_MAX_US (128000000UL - 1UL) /**< The longest timeslot distance, in microseconds, allowed for the distance parameter (see @ref nrf_radio_request_normal_t) in the request. */ ++ ++#define NRF_RADIO_EARLIEST_TIMEOUT_MAX_US (128000000UL - 1UL) /**< The longest timeout, in microseconds, allowed when requesting the earliest possible timeslot. */ ++ ++#define NRF_RADIO_START_JITTER_US (2) /**< The maximum jitter in @ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START relative to the requested start time. */ ++ ++/**@} */ ++ ++/**@addtogroup NRF_SOC_ENUMS Enumerations ++ * @{ */ ++ ++/**@brief The SVC numbers used by the SVC functions in the SoC library. */ ++enum NRF_SOC_SVCS ++{ ++ SD_PPI_CHANNEL_ENABLE_GET = SOC_SVC_BASE, ++ SD_PPI_CHANNEL_ENABLE_SET, ++ SD_PPI_CHANNEL_ENABLE_CLR, ++ SD_PPI_CHANNEL_ASSIGN, ++ SD_PPI_GROUP_TASK_ENABLE, ++ SD_PPI_GROUP_TASK_DISABLE, ++ SD_PPI_GROUP_ASSIGN, ++ SD_PPI_GROUP_GET, ++ SD_FLASH_PAGE_ERASE, ++ SD_FLASH_WRITE, ++ SD_FLASH_PROTECT, ++ SD_MUTEX_NEW = SOC_SVC_BASE_NOT_AVAILABLE, ++ SD_MUTEX_ACQUIRE, ++ SD_MUTEX_RELEASE, ++ SD_RAND_APPLICATION_POOL_CAPACITY_GET, ++ SD_RAND_APPLICATION_BYTES_AVAILABLE_GET, ++ SD_RAND_APPLICATION_VECTOR_GET, ++ SD_POWER_MODE_SET, ++ SD_POWER_SYSTEM_OFF, ++ SD_POWER_RESET_REASON_GET, ++ SD_POWER_RESET_REASON_CLR, ++ SD_POWER_POF_ENABLE, ++ SD_POWER_POF_THRESHOLD_SET, ++ SD_POWER_RAMON_SET, ++ SD_POWER_RAMON_CLR, ++ SD_POWER_RAMON_GET, ++ SD_POWER_GPREGRET_SET, ++ SD_POWER_GPREGRET_CLR, ++ SD_POWER_GPREGRET_GET, ++ SD_POWER_DCDC_MODE_SET, ++ SD_APP_EVT_WAIT, ++ SD_CLOCK_HFCLK_REQUEST, ++ SD_CLOCK_HFCLK_RELEASE, ++ SD_CLOCK_HFCLK_IS_RUNNING, ++ SD_RADIO_NOTIFICATION_CFG_SET, ++ SD_ECB_BLOCK_ENCRYPT, ++ SD_ECB_BLOCKS_ENCRYPT, ++ SD_RADIO_SESSION_OPEN, ++ SD_RADIO_SESSION_CLOSE, ++ SD_RADIO_REQUEST, ++ SD_EVT_GET, ++ SD_TEMP_GET, ++ SVC_SOC_LAST ++}; ++ ++/**@brief Possible values of a ::nrf_mutex_t. */ ++enum NRF_MUTEX_VALUES ++{ ++ NRF_MUTEX_FREE, ++ NRF_MUTEX_TAKEN ++}; ++ ++/**@brief Power modes. */ ++enum NRF_POWER_MODES ++{ ++ NRF_POWER_MODE_CONSTLAT, /**< Constant latency mode. See power management in the reference manual. */ ++ NRF_POWER_MODE_LOWPWR /**< Low power mode. See power management in the reference manual. */ ++}; ++ ++ ++/**@brief Power failure thresholds */ ++enum NRF_POWER_THRESHOLDS ++{ ++ NRF_POWER_THRESHOLD_V21, /**< 2.1 Volts power failure threshold. */ ++ NRF_POWER_THRESHOLD_V23, /**< 2.3 Volts power failure threshold. */ ++ NRF_POWER_THRESHOLD_V25, /**< 2.5 Volts power failure threshold. */ ++ NRF_POWER_THRESHOLD_V27 /**< 2.7 Volts power failure threshold. */ ++}; ++ ++ ++/**@brief DC/DC converter modes. */ ++enum NRF_POWER_DCDC_MODES ++{ ++ NRF_POWER_DCDC_DISABLE, /**< The DCDC is disabled. */ ++ NRF_POWER_DCDC_ENABLE /**< The DCDC is enabled. */ ++}; ++ ++/**@brief Radio notification distances. */ ++enum NRF_RADIO_NOTIFICATION_DISTANCES ++{ ++ NRF_RADIO_NOTIFICATION_DISTANCE_NONE = 0, /**< The event does not have a notification. */ ++ NRF_RADIO_NOTIFICATION_DISTANCE_800US, /**< The distance from the active notification to start of radio activity. */ ++ NRF_RADIO_NOTIFICATION_DISTANCE_1740US, /**< The distance from the active notification to start of radio activity. */ ++ NRF_RADIO_NOTIFICATION_DISTANCE_2680US, /**< The distance from the active notification to start of radio activity. */ ++ NRF_RADIO_NOTIFICATION_DISTANCE_3620US, /**< The distance from the active notification to start of radio activity. */ ++ NRF_RADIO_NOTIFICATION_DISTANCE_4560US, /**< The distance from the active notification to start of radio activity. */ ++ NRF_RADIO_NOTIFICATION_DISTANCE_5500US /**< The distance from the active notification to start of radio activity. */ ++}; ++ ++ ++/**@brief Radio notification types. */ ++enum NRF_RADIO_NOTIFICATION_TYPES ++{ ++ NRF_RADIO_NOTIFICATION_TYPE_NONE = 0, /**< The event does not have a radio notification signal. */ ++ NRF_RADIO_NOTIFICATION_TYPE_INT_ON_ACTIVE, /**< Using interrupt for notification when the radio will be enabled. */ ++ NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE, /**< Using interrupt for notification when the radio has been disabled. */ ++ NRF_RADIO_NOTIFICATION_TYPE_INT_ON_BOTH, /**< Using interrupt for notification both when the radio will be enabled and disabled. */ ++}; ++ ++/**@brief The Radio signal callback types. */ ++enum NRF_RADIO_CALLBACK_SIGNAL_TYPE ++{ ++ NRF_RADIO_CALLBACK_SIGNAL_TYPE_START, /**< This signal indicates the start of the radio timeslot. */ ++ NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0, /**< This signal indicates the NRF_TIMER0 interrupt. */ ++ NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO, /**< This signal indicates the NRF_RADIO interrupt. */ ++ NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_FAILED, /**< This signal indicates extend action failed. */ ++ NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_SUCCEEDED /**< This signal indicates extend action succeeded. */ ++}; ++ ++/**@brief The actions requested by the signal callback. ++ * ++ * This code gives the SOC instructions about what action to take when the signal callback has ++ * returned. ++ */ ++enum NRF_RADIO_SIGNAL_CALLBACK_ACTION ++{ ++ NRF_RADIO_SIGNAL_CALLBACK_ACTION_NONE, /**< Return without action. */ ++ NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND, /**< Request an extension of the current timeslot (maximum execution time for this action is when the extension succeeded). */ ++ NRF_RADIO_SIGNAL_CALLBACK_ACTION_END, /**< End the current radio timeslot. */ ++ NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END /**< Request a new radio timeslot and end the current timeslot. */ ++}; ++ ++/**@brief Radio timeslot high frequency clock source configuration. */ ++enum NRF_RADIO_HFCLK_CFG ++{ ++ NRF_RADIO_HFCLK_CFG_XTAL_GUARANTEED, /**< The SoftDevice will guarantee that the high frequency clock source is the ++ external crystal for the whole duration of the timeslot. This should be the ++ preferred option for events that use the radio or require high timing accuracy. */ ++ NRF_RADIO_HFCLK_CFG_NO_GUARANTEE /**< This configuration allows for earlier and tighter scheduling of timeslots. ++ The RC oscillator may be the clock source in part or for the whole duration of the timeslot. ++ The RC oscillator's accuracy must therefore be taken into consideration. ++ @note If the application will use the radio peripheral in timeslots with this configuration, ++ it must make sure that the crystal is running and stable before starting the radio. */ ++}; ++ ++/**@brief Radio timeslot priorities. */ ++enum NRF_RADIO_PRIORITY ++{ ++ NRF_RADIO_PRIORITY_HIGH, /**< High (equal priority as the normal connection priority of the SoftDevice stack(s)). */ ++ NRF_RADIO_PRIORITY_NORMAL, /**< Normal (equal priority as the priority of secondary activites of the SoftDevice stack(s)). */ ++}; ++ ++/**@brief Radio timeslot request type. */ ++enum NRF_RADIO_REQUEST_TYPE ++{ ++ NRF_RADIO_REQ_TYPE_EARLIEST, /**< Request radio timeslot as early as possible. This should always be used for the first request in a session. */ ++ NRF_RADIO_REQ_TYPE_NORMAL /**< Normal radio timeslot request. */ ++}; ++ ++/**@brief SoC Events. */ ++enum NRF_SOC_EVTS ++{ ++ NRF_EVT_HFCLKSTARTED, /**< Event indicating that the HFCLK has started. */ ++ NRF_EVT_POWER_FAILURE_WARNING, /**< Event indicating that a power failure warning has occurred. */ ++ NRF_EVT_FLASH_OPERATION_SUCCESS, /**< Event indicating that the ongoing flash operation has completed successfully. */ ++ NRF_EVT_FLASH_OPERATION_ERROR, /**< Event indicating that the ongoing flash operation has timed out with an error. */ ++ NRF_EVT_RADIO_BLOCKED, /**< Event indicating that a radio timeslot was blocked. */ ++ NRF_EVT_RADIO_CANCELED, /**< Event indicating that a radio timeslot was canceled by SoftDevice. */ ++ NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN, /**< Event indicating that a radio timeslot signal callback handler return was invalid. */ ++ NRF_EVT_RADIO_SESSION_IDLE, /**< Event indicating that a radio timeslot session is idle. */ ++ NRF_EVT_RADIO_SESSION_CLOSED, /**< Event indicating that a radio timeslot session is closed. */ ++ NRF_EVT_NUMBER_OF_EVTS ++}; ++ ++/**@} */ ++ ++ ++/**@addtogroup NRF_SOC_STRUCTURES Structures ++ * @{ */ ++ ++/**@brief Represents a mutex for use with the nrf_mutex functions. ++ * @note Accessing the value directly is not safe, use the mutex functions! ++ */ ++typedef volatile uint8_t nrf_mutex_t; ++ ++/**@brief Parameters for a request for a timeslot as early as possible. */ ++typedef struct ++{ ++ uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ ++ uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ ++ uint32_t length_us; /**< The radio timeslot length (in the range 100 to 100,000] microseconds). */ ++ uint32_t timeout_us; /**< Longest acceptable delay until the start of the requested timeslot (up to @ref NRF_RADIO_EARLIEST_TIMEOUT_MAX_US microseconds). */ ++} nrf_radio_request_earliest_t; ++ ++/**@brief Parameters for a normal radio timeslot request. */ ++typedef struct ++{ ++ uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ ++ uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ ++ uint32_t distance_us; /**< Distance from the start of the previous radio timeslot (up to @ref NRF_RADIO_DISTANCE_MAX_US microseconds). */ ++ uint32_t length_us; /**< The radio timeslot length (in the range [100..100,000] microseconds). */ ++} nrf_radio_request_normal_t; ++ ++/**@brief Radio timeslot request parameters. */ ++typedef struct ++{ ++ uint8_t request_type; /**< Type of request, see @ref NRF_RADIO_REQUEST_TYPE. */ ++ union ++ { ++ nrf_radio_request_earliest_t earliest; /**< Parameters for requesting a radio timeslot as early as possible. */ ++ nrf_radio_request_normal_t normal; /**< Parameters for requesting a normal radio timeslot. */ ++ } params; /**< Parameter union. */ ++} nrf_radio_request_t; ++ ++/**@brief Return parameters of the radio timeslot signal callback. */ ++typedef struct ++{ ++ uint8_t callback_action; /**< The action requested by the application when returning from the signal callback, see @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION. */ ++ union ++ { ++ struct ++ { ++ nrf_radio_request_t * p_next; /**< The request parameters for the next radio timeslot. */ ++ } request; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END. */ ++ struct ++ { ++ uint32_t length_us; /**< Requested extension of the radio timeslot duration (microseconds) (for minimum time see @ref NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US). */ ++ } extend; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND. */ ++ } params; /**< Parameter union. */ ++} nrf_radio_signal_callback_return_param_t; ++ ++/**@brief The radio timeslot signal callback type. ++ * ++ * @note In case of invalid return parameters, the radio timeslot will automatically end ++ * immediately after returning from the signal callback and the ++ * @ref NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN event will be sent. ++ * @note The returned struct pointer must remain valid after the signal callback ++ * function returns. For instance, this means that it must not point to a stack variable. ++ * ++ * @param[in] signal_type Type of signal, see @ref NRF_RADIO_CALLBACK_SIGNAL_TYPE. ++ * ++ * @return Pointer to structure containing action requested by the application. ++ */ ++typedef nrf_radio_signal_callback_return_param_t * (*nrf_radio_signal_callback_t) (uint8_t signal_type); ++ ++/**@brief AES ECB parameter typedefs */ ++typedef uint8_t soc_ecb_key_t[SOC_ECB_KEY_LENGTH]; /**< Encryption key type. */ ++typedef uint8_t soc_ecb_cleartext_t[SOC_ECB_CLEARTEXT_LENGTH]; /**< Cleartext data type. */ ++typedef uint8_t soc_ecb_ciphertext_t[SOC_ECB_CIPHERTEXT_LENGTH]; /**< Ciphertext data type. */ ++ ++/**@brief AES ECB data structure */ ++typedef struct ++{ ++ soc_ecb_key_t key; /**< Encryption key. */ ++ soc_ecb_cleartext_t cleartext; /**< Cleartext data. */ ++ soc_ecb_ciphertext_t ciphertext; /**< Ciphertext data. */ ++} nrf_ecb_hal_data_t; ++ ++/**@brief AES ECB block. Used to provide multiple blocks in a single call ++ to @ref sd_ecb_blocks_encrypt.*/ ++typedef struct ++{ ++ soc_ecb_key_t* p_key; /**< Pointer to the Encryption key. */ ++ soc_ecb_cleartext_t* p_cleartext; /**< Pointer to the Cleartext data. */ ++ soc_ecb_ciphertext_t* p_ciphertext; /**< Pointer to the Ciphertext data. */ ++} nrf_ecb_hal_data_block_t; ++ ++/**@} */ ++ ++/**@addtogroup NRF_SOC_FUNCTIONS Functions ++ * @{ */ ++ ++/**@brief Initialize a mutex. ++ * ++ * @param[in] p_mutex Pointer to the mutex to initialize. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_MUTEX_NEW, uint32_t, sd_mutex_new(nrf_mutex_t * p_mutex)); ++ ++/**@brief Attempt to acquire a mutex. ++ * ++ * @param[in] p_mutex Pointer to the mutex to acquire. ++ * ++ * @retval ::NRF_SUCCESS The mutex was successfully acquired. ++ * @retval ::NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN The mutex could not be acquired. ++ */ ++SVCALL(SD_MUTEX_ACQUIRE, uint32_t, sd_mutex_acquire(nrf_mutex_t * p_mutex)); ++ ++/**@brief Release a mutex. ++ * ++ * @param[in] p_mutex Pointer to the mutex to release. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_MUTEX_RELEASE, uint32_t, sd_mutex_release(nrf_mutex_t * p_mutex)); ++ ++/**@brief Query the capacity of the application random pool. ++ * ++ * @param[out] p_pool_capacity The capacity of the pool. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_RAND_APPLICATION_POOL_CAPACITY_GET, uint32_t, sd_rand_application_pool_capacity_get(uint8_t * p_pool_capacity)); ++ ++/**@brief Get number of random bytes available to the application. ++ * ++ * @param[out] p_bytes_available The number of bytes currently available in the pool. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_RAND_APPLICATION_BYTES_AVAILABLE_GET, uint32_t, sd_rand_application_bytes_available_get(uint8_t * p_bytes_available)); ++ ++/**@brief Get random bytes from the application pool. ++ * ++ * @param[out] p_buff Pointer to unit8_t buffer for storing the bytes. ++ * @param[in] length Number of bytes to take from pool and place in p_buff. ++ * ++ * @retval ::NRF_SUCCESS The requested bytes were written to p_buff. ++ * @retval ::NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES No bytes were written to the buffer, because there were not enough bytes available. ++*/ ++SVCALL(SD_RAND_APPLICATION_VECTOR_GET, uint32_t, sd_rand_application_vector_get(uint8_t * p_buff, uint8_t length)); ++ ++/**@brief Gets the reset reason register. ++ * ++ * @param[out] p_reset_reason Contents of the NRF_POWER->RESETREAS register. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_POWER_RESET_REASON_GET, uint32_t, sd_power_reset_reason_get(uint32_t * p_reset_reason)); ++ ++/**@brief Clears the bits of the reset reason register. ++ * ++ * @param[in] reset_reason_clr_msk Contains the bits to clear from the reset reason register. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_POWER_RESET_REASON_CLR, uint32_t, sd_power_reset_reason_clr(uint32_t reset_reason_clr_msk)); ++ ++/**@brief Sets the power mode when in CPU sleep. ++ * ++ * @param[in] power_mode The power mode to use when in CPU sleep, see @ref NRF_POWER_MODES. @sa sd_app_evt_wait ++ * ++ * @retval ::NRF_SUCCESS The power mode was set. ++ * @retval ::NRF_ERROR_SOC_POWER_MODE_UNKNOWN The power mode was unknown. ++ */ ++SVCALL(SD_POWER_MODE_SET, uint32_t, sd_power_mode_set(uint8_t power_mode)); ++ ++/**@brief Puts the chip in System OFF mode. ++ * ++ * @retval ::NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN ++ */ ++SVCALL(SD_POWER_SYSTEM_OFF, uint32_t, sd_power_system_off(void)); ++ ++/**@brief Enables or disables the power-fail comparator. ++ * ++ * Enabling this will give a softdevice event (NRF_EVT_POWER_FAILURE_WARNING) when the power failure warning occurs. ++ * The event can be retrieved with sd_evt_get(); ++ * ++ * @param[in] pof_enable True if the power-fail comparator should be enabled, false if it should be disabled. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_POWER_POF_ENABLE, uint32_t, sd_power_pof_enable(uint8_t pof_enable)); ++ ++/**@brief Sets the power-fail threshold value. ++ * ++ * @param[in] threshold The power-fail threshold value to use, see @ref NRF_POWER_THRESHOLDS. ++ * ++ * @retval ::NRF_SUCCESS The power failure threshold was set. ++ * @retval ::NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN The power failure threshold is unknown. ++ */ ++SVCALL(SD_POWER_POF_THRESHOLD_SET, uint32_t, sd_power_pof_threshold_set(uint8_t threshold)); ++ ++/**@brief Sets bits in the NRF_POWER->RAMON register. ++ * ++ * @param[in] ramon Contains the bits needed to be set in the NRF_POWER->RAMON register. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_POWER_RAMON_SET, uint32_t, sd_power_ramon_set(uint32_t ramon)); ++ ++/**@brief Clears bits in the NRF_POWER->RAMON register. ++ * ++ * @param ramon Contains the bits needed to be cleared in the NRF_POWER->RAMON register. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_POWER_RAMON_CLR, uint32_t, sd_power_ramon_clr(uint32_t ramon)); ++ ++/**@brief Get contents of NRF_POWER->RAMON register, indicates power status of ram blocks. ++ * ++ * @param[out] p_ramon Content of NRF_POWER->RAMON register. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_POWER_RAMON_GET, uint32_t, sd_power_ramon_get(uint32_t * p_ramon)); ++ ++/**@brief Set bits in the general purpose retention registers (NRF_POWER->GPREGRET*). ++ * ++ * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. ++ * @param[in] gpregret_msk Bits to be set in the GPREGRET register. ++ * ++ * @note nRF51 does only have one general purpose retained register, so gpregret_id must be 0 on nRF51. ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_POWER_GPREGRET_SET, uint32_t, sd_power_gpregret_set(uint32_t gpregret_id, uint32_t gpregret_msk)); ++ ++/**@brief Clear bits in the general purpose retention registers (NRF_POWER->GPREGRET*). ++ * ++ * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. ++ * @param[in] gpregret_msk Bits to be clear in the GPREGRET register. ++ * ++ * @note nRF51 does only have one general purpose retained register, so gpregret_id must be 0 on nRF51. ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_POWER_GPREGRET_CLR, uint32_t, sd_power_gpregret_clr(uint32_t gpregret_id, uint32_t gpregret_msk)); ++ ++/**@brief Get contents of the general purpose retention registers (NRF_POWER->GPREGRET*). ++ * ++ * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. ++ * @param[out] p_gpregret Contents of the GPREGRET register. ++ * ++ * @note nRF51 does only have one general purpose retained register, so gpregret_id must be 0 on nRF51. ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_POWER_GPREGRET_GET, uint32_t, sd_power_gpregret_get(uint32_t gpregret_id, uint32_t *p_gpregret)); ++ ++/**@brief Sets the DCDC mode. ++ * ++ * Enable or disable the DCDC peripheral. ++ * ++ * @param[in] dcdc_mode The mode of the DCDC, see @ref NRF_POWER_DCDC_MODES. ++ * ++ * @retval ::NRF_SUCCESS ++ * @retval ::NRF_ERROR_INVALID_PARAM The DCDC mode is invalid. ++ */ ++SVCALL(SD_POWER_DCDC_MODE_SET, uint32_t, sd_power_dcdc_mode_set(uint8_t dcdc_mode)); ++ ++/**@brief Request the high frequency crystal oscillator. ++ * ++ * Will start the high frequency crystal oscillator, the startup time of the crystal varies ++ * and the ::sd_clock_hfclk_is_running function can be polled to check if it has started. ++ * ++ * @see sd_clock_hfclk_is_running ++ * @see sd_clock_hfclk_release ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_CLOCK_HFCLK_REQUEST, uint32_t, sd_clock_hfclk_request(void)); ++ ++/**@brief Releases the high frequency crystal oscillator. ++ * ++ * Will stop the high frequency crystal oscillator, this happens immediately. ++ * ++ * @see sd_clock_hfclk_is_running ++ * @see sd_clock_hfclk_request ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_CLOCK_HFCLK_RELEASE, uint32_t, sd_clock_hfclk_release(void)); ++ ++/**@brief Checks if the high frequency crystal oscillator is running. ++ * ++ * @see sd_clock_hfclk_request ++ * @see sd_clock_hfclk_release ++ * ++ * @param[out] p_is_running 1 if the external crystal oscillator is running, 0 if not. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_CLOCK_HFCLK_IS_RUNNING, uint32_t, sd_clock_hfclk_is_running(uint32_t * p_is_running)); ++ ++/**@brief Waits for an application event. ++ * ++ * An application event is either an application interrupt or a pended interrupt when the ++ * interrupt is disabled. When the interrupt is enabled it will be taken immediately since ++ * this function will wait in thread mode, then the execution will return in the application's ++ * main thread. When an interrupt is disabled and gets pended it will return to the application's ++ * thread main. The application must ensure that the pended flag is cleared using ++ * ::sd_nvic_ClearPendingIRQ in order to sleep using this function. This is only necessary for ++ * disabled interrupts, as the interrupt handler will clear the pending flag automatically for ++ * enabled interrupts. ++ * ++ * In order to wake up from disabled interrupts, the SEVONPEND flag has to be set in the Cortex-M0 ++ * System Control Register (SCR). @sa CMSIS_SCB ++ * ++ * @note If an application interrupt has happened since the last time sd_app_evt_wait was ++ * called this function will return immediately and not go to sleep. This is to avoid race ++ * conditions that can occur when a flag is updated in the interrupt handler and processed ++ * in the main loop. ++ * ++ * @post An application interrupt has happened or a interrupt pending flag is set. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_APP_EVT_WAIT, uint32_t, sd_app_evt_wait(void)); ++ ++/**@brief Get PPI channel enable register contents. ++ * ++ * @param[out] p_channel_enable The contents of the PPI CHEN register. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_PPI_CHANNEL_ENABLE_GET, uint32_t, sd_ppi_channel_enable_get(uint32_t * p_channel_enable)); ++ ++/**@brief Set PPI channel enable register. ++ * ++ * @param[in] channel_enable_set_msk Mask containing the bits to set in the PPI CHEN register. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_PPI_CHANNEL_ENABLE_SET, uint32_t, sd_ppi_channel_enable_set(uint32_t channel_enable_set_msk)); ++ ++/**@brief Clear PPI channel enable register. ++ * ++ * @param[in] channel_enable_clr_msk Mask containing the bits to clear in the PPI CHEN register. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_PPI_CHANNEL_ENABLE_CLR, uint32_t, sd_ppi_channel_enable_clr(uint32_t channel_enable_clr_msk)); ++ ++/**@brief Assign endpoints to a PPI channel. ++ * ++ * @param[in] channel_num Number of the PPI channel to assign. ++ * @param[in] evt_endpoint Event endpoint of the PPI channel. ++ * @param[in] task_endpoint Task endpoint of the PPI channel. ++ * ++ * @retval ::NRF_ERROR_SOC_PPI_INVALID_CHANNEL The channel number is invalid. ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_PPI_CHANNEL_ASSIGN, uint32_t, sd_ppi_channel_assign(uint8_t channel_num, const volatile void * evt_endpoint, const volatile void * task_endpoint)); ++ ++/**@brief Task to enable a channel group. ++ * ++ * @param[in] group_num Number of the channel group. ++ * ++ * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_PPI_GROUP_TASK_ENABLE, uint32_t, sd_ppi_group_task_enable(uint8_t group_num)); ++ ++/**@brief Task to disable a channel group. ++ * ++ * @param[in] group_num Number of the PPI group. ++ * ++ * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_PPI_GROUP_TASK_DISABLE, uint32_t, sd_ppi_group_task_disable(uint8_t group_num)); ++ ++/**@brief Assign PPI channels to a channel group. ++ * ++ * @param[in] group_num Number of the channel group. ++ * @param[in] channel_msk Mask of the channels to assign to the group. ++ * ++ * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_PPI_GROUP_ASSIGN, uint32_t, sd_ppi_group_assign(uint8_t group_num, uint32_t channel_msk)); ++ ++/**@brief Gets the PPI channels of a channel group. ++ * ++ * @param[in] group_num Number of the channel group. ++ * @param[out] p_channel_msk Mask of the channels assigned to the group. ++ * ++ * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_PPI_GROUP_GET, uint32_t, sd_ppi_group_get(uint8_t group_num, uint32_t * p_channel_msk)); ++ ++/**@brief Configures the Radio Notification signal. ++ * ++ * @note ++ * - The notification signal latency depends on the interrupt priority settings of SWI used ++ * for notification signal. ++ * - To ensure that the radio notification signal behaves in a consistent way, always ++ * configure radio notifications when there is no protocol stack or other SoftDevice ++ * activity in progress. It is recommended that the radio notification signal is ++ * configured directly after the SoftDevice has been enabled. ++ * - In the period between the ACTIVE signal and the start of the Radio Event, the SoftDevice ++ * will interrupt the application to do Radio Event preparation. ++ * - Using the Radio Notification feature may limit the bandwidth, as the SoftDevice may have ++ * to shorten the connection events to have time for the Radio Notification signals. ++ * ++ * @param[in] type Type of notification signal, see @ref NRF_RADIO_NOTIFICATION_TYPES. ++ * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE shall be used to turn off radio ++ * notification. Using @ref NRF_RADIO_NOTIFICATION_DISTANCE_NONE is ++ * recommended (but not required) to be used with ++ * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE. ++ * ++ * @param[in] distance Distance between the notification signal and start of radio activity, see @ref NRF_RADIO_NOTIFICATION_DISTANCES. ++ * This parameter is ignored when @ref NRF_RADIO_NOTIFICATION_TYPE_NONE or ++ * @ref NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE is used. ++ * ++ * @retval ::NRF_ERROR_INVALID_PARAM The group number is invalid. ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_RADIO_NOTIFICATION_CFG_SET, uint32_t, sd_radio_notification_cfg_set(uint8_t type, uint8_t distance)); ++ ++/**@brief Encrypts a block according to the specified parameters. ++ * ++ * 128-bit AES encryption. ++ * ++ * @note: ++ * - The application may set the SEVONPEND bit in the SCR to 1 to make the SoftDevice sleep while ++ * the ECB is running. The SEVONPEND bit should only be cleared (set to 0) from application ++ * main or low interrupt level. ++ * ++ * @param[in, out] p_ecb_data Pointer to the ECB parameters' struct (two input ++ * parameters and one output parameter). ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_ECB_BLOCK_ENCRYPT, uint32_t, sd_ecb_block_encrypt(nrf_ecb_hal_data_t * p_ecb_data)); ++ ++/**@brief Encrypts multiple data blocks provided as an array of data block structures. ++ * ++ * @details: Performs 128-bit AES encryption on multiple data blocks ++ * ++ * @note: ++ * - The application may set the SEVONPEND bit in the SCR to 1 to make the SoftDevice sleep while ++ * the ECB is running. The SEVONPEND bit should only be cleared (set to 0) from application ++ * main or low interrupt level. ++ * ++ * @param[in] block_count Count of blocks in the p_data_blocks array. ++ * @param[in,out] p_data_blocks Pointer to the first entry in a contiguous array of ++ * @ref nrf_ecb_hal_data_block_t structures. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_ECB_BLOCKS_ENCRYPT, uint32_t, sd_ecb_blocks_encrypt(uint8_t block_count, nrf_ecb_hal_data_block_t * p_data_blocks)); ++ ++/**@brief Gets any pending events generated by the SoC API. ++ * ++ * The application should keep calling this function to get events, until ::NRF_ERROR_NOT_FOUND is returned. ++ * ++ * @param[out] p_evt_id Set to one of the values in @ref NRF_SOC_EVTS, if any events are pending. ++ * ++ * @retval ::NRF_SUCCESS An event was pending. The event id is written in the p_evt_id parameter. ++ * @retval ::NRF_ERROR_NOT_FOUND No pending events. ++ */ ++SVCALL(SD_EVT_GET, uint32_t, sd_evt_get(uint32_t * p_evt_id)); ++ ++/**@brief Get the temperature measured on the chip ++ * ++ * This function will block until the temperature measurement is done. ++ * It takes around 50us from call to return. ++ * ++ * @param[out] p_temp Result of temperature measurement. Die temperature in 0.25 degrees celsius. ++ * ++ * @retval ::NRF_SUCCESS A temperature measurement was done, and the temperature was written to temp ++ */ ++SVCALL(SD_TEMP_GET, uint32_t, sd_temp_get(int32_t * p_temp)); ++ ++/**@brief Flash Write ++* ++* Commands to write a buffer to flash ++* ++* If the SoftDevice is enabled: ++* This call initiates the flash access command, and its completion will be communicated to the ++* application with exactly one of the following events: ++* - @ref NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. ++* - @ref NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. ++* ++* If the SoftDevice is not enabled no event will be generated, and this call will return @ref NRF_SUCCESS when the ++ * write has been completed ++* ++* @note ++* - This call takes control over the radio and the CPU during flash erase and write to make sure that ++* they will not interfere with the flash access. This means that all interrupts will be blocked ++* for a predictable time (depending on the NVMC specification in nRF51 Series Reference Manual ++* and the command parameters). ++* - The data in the p_src buffer should not be modified before the @ref NRF_EVT_FLASH_OPERATION_SUCCESS ++* or the @ref NRF_EVT_FLASH_OPERATION_ERROR have been received if the SoftDevice is enabled. ++* ++* ++* @param[in] p_dst Pointer to start of flash location to be written. ++* @param[in] p_src Pointer to buffer with data to be written. ++* @param[in] size Number of 32-bit words to write. Maximum size is 256 32-bit words for nRF51 and 1024 for nRF52. ++* ++* @retval ::NRF_ERROR_INVALID_ADDR Tried to write to a non existing flash address, or p_dst or p_src was unaligned. ++* @retval ::NRF_ERROR_BUSY The previous command has not yet completed. ++* @retval ::NRF_ERROR_INVALID_LENGTH Size was 0, or higher than the maximum allowed size. ++* @retval ::NRF_ERROR_FORBIDDEN Tried to write to or read from protected location. ++* @retval ::NRF_SUCCESS The command was accepted. ++*/ ++SVCALL(SD_FLASH_WRITE, uint32_t, sd_flash_write(uint32_t * const p_dst, uint32_t const * const p_src, uint32_t size)); ++ ++ ++/**@brief Flash Erase page ++* ++* Commands to erase a flash page ++* If the SoftDevice is enabled: ++* This call initiates the flash access command, and its completion will be communicated to the ++* application with exactly one of the following events: ++* - @ref NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. ++* - @ref NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. ++* ++* If the SoftDevice is not enabled no event will be generated, and this call will return @ref NRF_SUCCESS when the ++* erase has been completed ++* ++* @note ++* - This call takes control over the radio and the CPU during flash erase and write to make sure that ++* they will not interfere with the flash access. This means that all interrupts will be blocked ++* for a predictable time (depending on the NVMC specification in nRF51 Series Reference Manual ++* and the command parameters). ++* ++* ++* @param[in] page_number Pagenumber of the page to erase ++* @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. ++* @retval ::NRF_ERROR_INVALID_ADDR Tried to erase to a non existing flash page. ++* @retval ::NRF_ERROR_BUSY The previous command has not yet completed. ++* @retval ::NRF_ERROR_FORBIDDEN Tried to erase a protected page. ++* @retval ::NRF_SUCCESS The command was accepted. ++*/ ++SVCALL(SD_FLASH_PAGE_ERASE, uint32_t, sd_flash_page_erase(uint32_t page_number)); ++ ++ ++/**@brief Flash Protection set ++ * ++ * Commands to set the flash protection configuration registers. ++ On nRF51 this sets the PROTENSETx registers of the MPU peripheral. ++ On nRF52 this sets the CONFIGx registers of the BPROT peripheral. ++ * ++ * @note To read the values read them directly. They are only write-protected. ++ * ++ * @param[in] block_cfg0 Value to be written to the configuration register. ++ * @param[in] block_cfg1 Value to be written to the configuration register. ++ * @param[in] block_cfg2 Value to be written to the configuration register (ignored on nRF51). ++ * @param[in] block_cfg3 Value to be written to the configuration register (ignored on nRF51). ++ * ++ * @retval ::NRF_ERROR_FORBIDDEN Tried to protect the SoftDevice. ++ * @retval ::NRF_SUCCESS Values successfully written to configuration registers. ++ */ ++SVCALL(SD_FLASH_PROTECT, uint32_t, sd_flash_protect(uint32_t block_cfg0, uint32_t block_cfg1, uint32_t block_cfg2, uint32_t block_cfg3)); ++ ++/**@brief Opens a session for radio timeslot requests. ++ * ++ * @note Only one session can be open at a time. ++ * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) will be called when the radio timeslot ++ * starts. From this point the NRF_RADIO and NRF_TIMER0 peripherals can be freely accessed ++ * by the application. ++ * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0) is called whenever the NRF_TIMER0 ++ * interrupt occurs. ++ * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO) is called whenever the NRF_RADIO ++ * interrupt occurs. ++ * @note p_radio_signal_callback() will be called at ARM interrupt priority level 0. This ++ * implies that none of the sd_* API calls can be used from p_radio_signal_callback(). ++ * ++ * @param[in] p_radio_signal_callback The signal callback. ++ * ++ * @retval ::NRF_ERROR_INVALID_ADDR p_radio_signal_callback is an invalid function pointer. ++ * @retval ::NRF_ERROR_BUSY If session cannot be opened. ++ * @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. ++ * @retval ::NRF_SUCCESS Otherwise. ++ */ ++ SVCALL(SD_RADIO_SESSION_OPEN, uint32_t, sd_radio_session_open(nrf_radio_signal_callback_t p_radio_signal_callback)); ++ ++/**@brief Closes a session for radio timeslot requests. ++ * ++ * @note Any current radio timeslot will be finished before the session is closed. ++ * @note If a radio timeslot is scheduled when the session is closed, it will be canceled. ++ * @note The application cannot consider the session closed until the @ref NRF_EVT_RADIO_SESSION_CLOSED ++ * event is received. ++ * ++ * @retval ::NRF_ERROR_FORBIDDEN If session not opened. ++ * @retval ::NRF_ERROR_BUSY If session is currently being closed. ++ * @retval ::NRF_SUCCESS Otherwise. ++ */ ++ SVCALL(SD_RADIO_SESSION_CLOSE, uint32_t, sd_radio_session_close(void)); ++ ++/**@brief Requests a radio timeslot. ++ * ++ * @note The request type is determined by p_request->request_type, and can be one of @ref NRF_RADIO_REQ_TYPE_EARLIEST ++ * and @ref NRF_RADIO_REQ_TYPE_NORMAL. The first request in a session must always be of type @ref NRF_RADIO_REQ_TYPE_EARLIEST. ++ * @note For a normal request (@ref NRF_RADIO_REQ_TYPE_NORMAL), the start time of a radio timeslot is specified by ++ * p_request->distance_us and is given relative to the start of the previous timeslot. ++ * @note A too small p_request->distance_us will lead to a @ref NRF_EVT_RADIO_BLOCKED event. ++ * @note Timeslots scheduled too close will lead to a @ref NRF_EVT_RADIO_BLOCKED event. ++ * @note See the SoftDevice Specification for more on radio timeslot scheduling, distances and lengths. ++ * @note If an opportunity for the first radio timeslot is not found before 100ms after the call to this ++ * function, it is not scheduled, and instead a @ref NRF_EVT_RADIO_BLOCKED event is sent. ++ * The application may then try to schedule the first radio timeslot again. ++ * @note Successful requests will result in nrf_radio_signal_callback_t(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START). ++ * Unsuccessful requests will result in a @ref NRF_EVT_RADIO_BLOCKED event, see @ref NRF_SOC_EVTS. ++ * @note The jitter in the start time of the radio timeslots is +/- @ref NRF_RADIO_START_JITTER_US us. ++ * @note The nrf_radio_signal_callback_t(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) call has a latency relative to the ++ * specified radio timeslot start, but this does not affect the actual start time of the timeslot. ++ * @note NRF_TIMER0 is reset at the start of the radio timeslot, and is clocked at 1MHz from the high frequency ++ * (16 MHz) clock source. If p_request->hfclk_force_xtal is true, the high frequency clock is ++ * guaranteed to be clocked from the external crystal. ++ * @note The SoftDevice will neither access the NRF_RADIO peripheral nor the NRF_TIMER0 peripheral ++ * during the radio timeslot. ++ * ++ * @param[in] p_request Pointer to the request parameters. ++ * ++ * @retval ::NRF_ERROR_FORBIDDEN If session not opened or the session is not IDLE. ++ * @retval ::NRF_ERROR_INVALID_ADDR If the p_request pointer is invalid. ++ * @retval ::NRF_ERROR_INVALID_PARAM If the parameters of p_request are not valid. ++ * @retval ::NRF_SUCCESS Otherwise. ++ */ ++ SVCALL(SD_RADIO_REQUEST, uint32_t, sd_radio_request(nrf_radio_request_t * p_request )); ++ ++/**@} */ ++ ++#ifdef __cplusplus ++} ++#endif ++#endif // NRF_SOC_H__ ++ ++/**@} */ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_svc.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_svc.h +new file mode 100644 +index 0000000..c7e3fbe +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers/nrf_svc.h +@@ -0,0 +1,88 @@ ++/* ++ * Copyright (c) Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form must reproduce the above copyright notice, this ++ * list of conditions and the following disclaimer in the documentation and/or ++ * other materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other ++ * contributors to this software may be used to endorse or promote products ++ * derived from this software without specific prior written permission. ++ * ++ * 4. This software must only be used in a processor manufactured by Nordic ++ * Semiconductor ASA, or in a processor manufactured by a third party that ++ * is used in combination with a processor manufactured by Nordic Semiconductor. ++ * ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ++ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ++ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ * ++ */ ++ ++#ifndef NRF_SVC__ ++#define NRF_SVC__ ++ ++#include "stdint.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++#ifdef SVCALL_AS_NORMAL_FUNCTION ++#define SVCALL(number, return_type, signature) return_type signature ++#else ++ ++#ifndef SVCALL ++#if defined (__CC_ARM) ++#define SVCALL(number, return_type, signature) return_type __svc(number) signature ++#elif defined (__GNUC__) ++#ifdef __cplusplus ++#define GCC_CAST_CPP (uint8_t) ++#else ++#define GCC_CAST_CPP ++#endif ++#define SVCALL(number, return_type, signature) \ ++ _Pragma("GCC diagnostic push") \ ++ _Pragma("GCC diagnostic ignored \"-Wreturn-type\"") \ ++ __attribute__((naked)) \ ++ __attribute__((unused)) \ ++ static return_type signature \ ++ { \ ++ __asm( \ ++ "svc %0\n" \ ++ "bx r14" : : "I" (GCC_CAST_CPP number) : "r0" \ ++ ); \ ++ } \ ++ _Pragma("GCC diagnostic pop") ++ ++#elif defined (__ICCARM__) ++#define PRAGMA(x) _Pragma(#x) ++#define SVCALL(number, return_type, signature) \ ++PRAGMA(swi_number = (number)) \ ++ __swi return_type signature; ++#else ++#define SVCALL(number, return_type, signature) return_type signature ++#endif ++#endif // SVCALL ++ ++#endif // SVCALL_AS_NORMAL_FUNCTION ++ ++#ifdef __cplusplus ++} ++#endif ++#endif // NRF_SVC__ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers_replacement/ble_gap.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers_replacement/ble_gap.h +new file mode 100644 +index 0000000..e07ccef +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers_replacement/ble_gap.h +@@ -0,0 +1,1919 @@ ++/* ++ * Copyright (c) Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form must reproduce the above copyright notice, this ++ * list of conditions and the following disclaimer in the documentation and/or ++ * other materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other ++ * contributors to this software may be used to endorse or promote products ++ * derived from this software without specific prior written permission. ++ * ++ * 4. This software must only be used in a processor manufactured by Nordic ++ * Semiconductor ASA, or in a processor manufactured by a third party that ++ * is used in combination with a processor manufactured by Nordic Semiconductor. ++ * ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ++ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ++ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ * ++ */ ++ ++/** ++ @addtogroup BLE_GAP Generic Access Profile (GAP) ++ @{ ++ @brief Definitions and prototypes for the GAP interface. ++ */ ++ ++#ifndef BLE_GAP_H__ ++#define BLE_GAP_H__ ++ ++#include "ble_types.h" ++#include "ble_ranges.h" ++#include "nrf_svc.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/**@addtogroup BLE_GAP_ENUMERATIONS Enumerations ++ * @{ */ ++ ++/**@brief GAP API SVC numbers. ++ */ ++enum BLE_GAP_SVCS ++{ ++ SD_BLE_GAP_ADDR_SET = BLE_GAP_SVC_BASE, /**< Set own Bluetooth Address. */ ++ SD_BLE_GAP_ADDR_GET, /**< Get own Bluetooth Address. */ ++ SD_BLE_GAP_WHITELIST_SET, /**< Set active whitelist. */ ++ SD_BLE_GAP_DEVICE_IDENTITIES_SET, /**< Set device identity list. */ ++ SD_BLE_GAP_PRIVACY_SET, /**< Set Privacy settings*/ ++ SD_BLE_GAP_PRIVACY_GET, /**< Get Privacy settings*/ ++ SD_BLE_GAP_ADV_DATA_SET, /**< Set Advertising Data. */ ++ SD_BLE_GAP_ADV_START, /**< Start Advertising. */ ++ SD_BLE_GAP_ADV_STOP, /**< Stop Advertising. */ ++ SD_BLE_GAP_CONN_PARAM_UPDATE, /**< Connection Parameter Update. */ ++ SD_BLE_GAP_DISCONNECT, /**< Disconnect. */ ++ SD_BLE_GAP_TX_POWER_SET, /**< Set TX Power. */ ++ SD_BLE_GAP_APPEARANCE_SET, /**< Set Appearance. */ ++ SD_BLE_GAP_APPEARANCE_GET, /**< Get Appearance. */ ++ SD_BLE_GAP_PPCP_SET, /**< Set PPCP. */ ++ SD_BLE_GAP_PPCP_GET, /**< Get PPCP. */ ++ SD_BLE_GAP_DEVICE_NAME_SET, /**< Set Device Name. */ ++ SD_BLE_GAP_DEVICE_NAME_GET, /**< Get Device Name. */ ++ SD_BLE_GAP_AUTHENTICATE, /**< Initiate Pairing/Bonding. */ ++ SD_BLE_GAP_SEC_PARAMS_REPLY, /**< Reply with Security Parameters. */ ++ SD_BLE_GAP_AUTH_KEY_REPLY, /**< Reply with an authentication key. */ ++ SD_BLE_GAP_LESC_DHKEY_REPLY, /**< Reply with an LE Secure Connections DHKey. */ ++ SD_BLE_GAP_KEYPRESS_NOTIFY, /**< Notify of a keypress during an authentication procedure. */ ++ SD_BLE_GAP_LESC_OOB_DATA_GET, /**< Get the local LE Secure Connections OOB data. */ ++ SD_BLE_GAP_LESC_OOB_DATA_SET, /**< Set the remote LE Secure Connections OOB data. */ ++ SD_BLE_GAP_ENCRYPT, /**< Initiate encryption procedure. */ ++ SD_BLE_GAP_SEC_INFO_REPLY, /**< Reply with Security Information. */ ++ SD_BLE_GAP_CONN_SEC_GET, /**< Obtain connection security level. */ ++ SD_BLE_GAP_RSSI_START, /**< Start reporting of changes in RSSI. */ ++ SD_BLE_GAP_RSSI_STOP, /**< Stop reporting of changes in RSSI. */ ++ SD_BLE_GAP_SCAN_START, /**< Start Scanning. */ ++ SD_BLE_GAP_SCAN_STOP, /**< Stop Scanning. */ ++ SD_BLE_GAP_CONNECT, /**< Connect. */ ++ SD_BLE_GAP_CONNECT_CANCEL, /**< Cancel ongoing connection procedure. */ ++ SD_BLE_GAP_RSSI_GET, /**< Get the last RSSI sample. */ ++}; ++ ++/**@brief GAP Event IDs. ++ * IDs that uniquely identify an event coming from the stack to the application. ++ */ ++enum BLE_GAP_EVTS ++{ ++ BLE_GAP_EVT_CONNECTED = BLE_GAP_EVT_BASE, /**< Connection established. \n See @ref ble_gap_evt_connected_t. */ ++ BLE_GAP_EVT_DISCONNECTED, /**< Disconnected from peer. \n See @ref ble_gap_evt_disconnected_t. */ ++ BLE_GAP_EVT_CONN_PARAM_UPDATE, /**< Connection Parameters updated. \n See @ref ble_gap_evt_conn_param_update_t. */ ++ BLE_GAP_EVT_SEC_PARAMS_REQUEST, /**< Request to provide security parameters. \n Reply with @ref sd_ble_gap_sec_params_reply. \n See @ref ble_gap_evt_sec_params_request_t. */ ++ BLE_GAP_EVT_SEC_INFO_REQUEST, /**< Request to provide security information. \n Reply with @ref sd_ble_gap_sec_info_reply. \n See @ref ble_gap_evt_sec_info_request_t. */ ++ BLE_GAP_EVT_PASSKEY_DISPLAY, /**< Request to display a passkey to the user. \n In LESC Numeric Comparison, reply with @ref sd_ble_gap_auth_key_reply. \n See @ref ble_gap_evt_passkey_display_t. */ ++ BLE_GAP_EVT_KEY_PRESSED, /**< Notification of a keypress on the remote device.\n See @ref ble_gap_evt_key_pressed_t */ ++ BLE_GAP_EVT_AUTH_KEY_REQUEST, /**< Request to provide an authentication key. \n Reply with @ref sd_ble_gap_auth_key_reply. \n See @ref ble_gap_evt_auth_key_request_t. */ ++ BLE_GAP_EVT_LESC_DHKEY_REQUEST, /**< Request to calculate an LE Secure Connections DHKey. \n Reply with @ref sd_ble_gap_lesc_dhkey_reply. \n See @ref ble_gap_evt_lesc_dhkey_request_t */ ++ BLE_GAP_EVT_AUTH_STATUS, /**< Authentication procedure completed with status. \n See @ref ble_gap_evt_auth_status_t. */ ++ BLE_GAP_EVT_CONN_SEC_UPDATE, /**< Connection security updated. \n See @ref ble_gap_evt_conn_sec_update_t. */ ++ BLE_GAP_EVT_TIMEOUT, /**< Timeout expired. \n See @ref ble_gap_evt_timeout_t. */ ++ BLE_GAP_EVT_RSSI_CHANGED, /**< RSSI report. \n See @ref ble_gap_evt_rssi_changed_t. */ ++ BLE_GAP_EVT_ADV_REPORT, /**< Advertising report. \n See @ref ble_gap_evt_adv_report_t. */ ++ BLE_GAP_EVT_SEC_REQUEST, /**< Security Request. \n See @ref ble_gap_evt_sec_request_t. */ ++ BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST, /**< Connection Parameter Update Request. \n Reply with @ref sd_ble_gap_conn_param_update. \n See @ref ble_gap_evt_conn_param_update_request_t. */ ++ BLE_GAP_EVT_SCAN_REQ_REPORT, /**< Scan request report. \n See @ref ble_gap_evt_scan_req_report_t. */ ++}; ++ ++/**@brief GAP Option IDs. ++ * IDs that uniquely identify a GAP option. ++ */ ++enum BLE_GAP_OPTS ++{ ++ BLE_GAP_OPT_CH_MAP = BLE_GAP_OPT_BASE, /**< Channel Map. @ref ble_gap_opt_ch_map_t */ ++ BLE_GAP_OPT_LOCAL_CONN_LATENCY, /**< Local connection latency. @ref ble_gap_opt_local_conn_latency_t */ ++ BLE_GAP_OPT_PASSKEY, /**< Set passkey. @ref ble_gap_opt_passkey_t */ ++ BLE_GAP_OPT_SCAN_REQ_REPORT, /**< Scan request report. @ref ble_gap_opt_scan_req_report_t */ ++ BLE_GAP_OPT_COMPAT_MODE, /**< Compatibility mode. @ref ble_gap_opt_compat_mode_t */ ++ BLE_GAP_OPT_AUTH_PAYLOAD_TIMEOUT, /**< Set Authenticated payload timeout. @ref ble_gap_opt_auth_payload_timeout_t */ ++ BLE_GAP_OPT_EXT_LEN, /**< Extended length packets. @ref ble_gap_opt_ext_len_t */ ++}; ++ ++/** @} */ ++ ++/**@addtogroup BLE_GAP_DEFINES Defines ++ * @{ */ ++ ++/**@defgroup BLE_ERRORS_GAP SVC return values specific to GAP ++ * @{ */ ++#define BLE_ERROR_GAP_UUID_LIST_MISMATCH (NRF_GAP_ERR_BASE + 0x000) /**< UUID list does not contain an integral number of UUIDs. */ ++#define BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST (NRF_GAP_ERR_BASE + 0x001) /**< Use of Whitelist not permitted with discoverable advertising. */ ++#define BLE_ERROR_GAP_INVALID_BLE_ADDR (NRF_GAP_ERR_BASE + 0x002) /**< The upper two bits of the address do not correspond to the specified address type. */ ++#define BLE_ERROR_GAP_WHITELIST_IN_USE (NRF_GAP_ERR_BASE + 0x003) /**< Attempt to modify the whitelist while already in use by another operation. */ ++#define BLE_ERROR_GAP_DEVICE_IDENTITIES_IN_USE (NRF_GAP_ERR_BASE + 0x004) /**< Attempt to modify the device identity list while already in use by another operation. */ ++#define BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE (NRF_GAP_ERR_BASE + 0x005) /**< The device identity list contains entries with duplicate identity addresses. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_ROLES GAP Roles ++ * @note Not explicitly used in peripheral API, but will be relevant for central API. ++ * @{ */ ++#define BLE_GAP_ROLE_INVALID 0x0 /**< Invalid Role. */ ++#define BLE_GAP_ROLE_PERIPH 0x1 /**< Peripheral Role. */ ++#define BLE_GAP_ROLE_CENTRAL 0x2 /**< Central Role. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_TIMEOUT_SOURCES GAP Timeout sources ++ * @{ */ ++#define BLE_GAP_TIMEOUT_SRC_ADVERTISING 0x00 /**< Advertising timeout. */ ++#define BLE_GAP_TIMEOUT_SRC_SECURITY_REQUEST 0x01 /**< Security request timeout. */ ++#define BLE_GAP_TIMEOUT_SRC_SCAN 0x02 /**< Scanning timeout. */ ++#define BLE_GAP_TIMEOUT_SRC_CONN 0x03 /**< Connection timeout. */ ++#define BLE_GAP_TIMEOUT_SRC_AUTH_PAYLOAD 0x04 /**< Authenticated payload timeout. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_ADDR_TYPES GAP Address types ++ * @{ */ ++#define BLE_GAP_ADDR_TYPE_PUBLIC 0x00 /**< Public address. */ ++#define BLE_GAP_ADDR_TYPE_RANDOM_STATIC 0x01 /**< Random static address. */ ++#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE 0x02 /**< Random private resolvable address. */ ++#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE 0x03 /**< Random private non-resolvable address. */ ++/**@} */ ++ ++ ++/**@brief The default interval in seconds at which a private address is refreshed. */ ++#define BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S (900) /* 15 minutes. */ ++/**@brief The maximum interval in seconds at which a private address can be refreshed. */ ++#define BLE_GAP_MAX_PRIVATE_ADDR_CYCLE_INTERVAL_S (41400) /* 11 hours 30 minutes. */ ++ ++ ++/** @brief BLE address length. */ ++#define BLE_GAP_ADDR_LEN (6) ++ ++ ++/**@defgroup BLE_GAP_PRIVACY_MODES Privacy modes ++ * @{ */ ++#define BLE_GAP_PRIVACY_MODE_OFF 0x00 /**< Device will send and accept its identity address for its own address. */ ++#define BLE_GAP_PRIVACY_MODE_DEVICE_PRIVACY 0x01 /**< Device will send and accept only private addresses for its own address. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_AD_TYPE_DEFINITIONS GAP Advertising and Scan Response Data format ++ * @note Found at https://www.bluetooth.org/Technical/AssignedNumbers/generic_access_profile.htm ++ * @{ */ ++#define BLE_GAP_AD_TYPE_FLAGS 0x01 /**< Flags for discoverability. */ ++#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE 0x02 /**< Partial list of 16 bit service UUIDs. */ ++#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE 0x03 /**< Complete list of 16 bit service UUIDs. */ ++#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_MORE_AVAILABLE 0x04 /**< Partial list of 32 bit service UUIDs. */ ++#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_COMPLETE 0x05 /**< Complete list of 32 bit service UUIDs. */ ++#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_MORE_AVAILABLE 0x06 /**< Partial list of 128 bit service UUIDs. */ ++#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_COMPLETE 0x07 /**< Complete list of 128 bit service UUIDs. */ ++#define BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME 0x08 /**< Short local device name. */ ++#define BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME 0x09 /**< Complete local device name. */ ++#define BLE_GAP_AD_TYPE_TX_POWER_LEVEL 0x0A /**< Transmit power level. */ ++#define BLE_GAP_AD_TYPE_CLASS_OF_DEVICE 0x0D /**< Class of device. */ ++#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C 0x0E /**< Simple Pairing Hash C. */ ++#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R 0x0F /**< Simple Pairing Randomizer R. */ ++#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_TK_VALUE 0x10 /**< Security Manager TK Value. */ ++#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_OOB_FLAGS 0x11 /**< Security Manager Out Of Band Flags. */ ++#define BLE_GAP_AD_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE 0x12 /**< Slave Connection Interval Range. */ ++#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_16BIT 0x14 /**< List of 16-bit Service Solicitation UUIDs. */ ++#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_128BIT 0x15 /**< List of 128-bit Service Solicitation UUIDs. */ ++#define BLE_GAP_AD_TYPE_SERVICE_DATA 0x16 /**< Service Data - 16-bit UUID. */ ++#define BLE_GAP_AD_TYPE_PUBLIC_TARGET_ADDRESS 0x17 /**< Public Target Address. */ ++#define BLE_GAP_AD_TYPE_RANDOM_TARGET_ADDRESS 0x18 /**< Random Target Address. */ ++#define BLE_GAP_AD_TYPE_APPEARANCE 0x19 /**< Appearance. */ ++#define BLE_GAP_AD_TYPE_ADVERTISING_INTERVAL 0x1A /**< Advertising Interval. */ ++#define BLE_GAP_AD_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS 0x1B /**< LE Bluetooth Device Address. */ ++#define BLE_GAP_AD_TYPE_LE_ROLE 0x1C /**< LE Role. */ ++#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C256 0x1D /**< Simple Pairing Hash C-256. */ ++#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R256 0x1E /**< Simple Pairing Randomizer R-256. */ ++#define BLE_GAP_AD_TYPE_SERVICE_DATA_32BIT_UUID 0x20 /**< Service Data - 32-bit UUID. */ ++#define BLE_GAP_AD_TYPE_SERVICE_DATA_128BIT_UUID 0x21 /**< Service Data - 128-bit UUID. */ ++#define BLE_GAP_AD_TYPE_URI 0x24 /**< URI */ ++#define BLE_GAP_AD_TYPE_3D_INFORMATION_DATA 0x3D /**< 3D Information Data. */ ++#define BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA 0xFF /**< Manufacturer Specific Data. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_ADV_FLAGS GAP Advertisement Flags ++ * @{ */ ++#define BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE (0x01) /**< LE Limited Discoverable Mode. */ ++#define BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE (0x02) /**< LE General Discoverable Mode. */ ++#define BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED (0x04) /**< BR/EDR not supported. */ ++#define BLE_GAP_ADV_FLAG_LE_BR_EDR_CONTROLLER (0x08) /**< Simultaneous LE and BR/EDR, Controller. */ ++#define BLE_GAP_ADV_FLAG_LE_BR_EDR_HOST (0x10) /**< Simultaneous LE and BR/EDR, Host. */ ++#define BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE (BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE Limited Discoverable Mode, BR/EDR not supported. */ ++#define BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE (BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE General Discoverable Mode, BR/EDR not supported. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_ADV_INTERVALS GAP Advertising interval max and min ++ * @{ */ ++#define BLE_GAP_ADV_INTERVAL_MIN 0x0020 /**< Minimum Advertising interval in 625 us units, i.e. 20 ms. */ ++#define BLE_GAP_ADV_NONCON_INTERVAL_MIN 0x00A0 /**< Minimum Advertising interval in 625 us units for non connectable mode, i.e. 100 ms. */ ++#define BLE_GAP_ADV_INTERVAL_MAX 0x4000 /**< Maximum Advertising interval in 625 us units, i.e. 10.24 s. */ ++ /**@} */ ++ ++ ++/**@defgroup BLE_GAP_SCAN_INTERVALS GAP Scan interval max and min ++ * @{ */ ++#define BLE_GAP_SCAN_INTERVAL_MIN 0x0004 /**< Minimum Scan interval in 625 us units, i.e. 2.5 ms. */ ++#define BLE_GAP_SCAN_INTERVAL_MAX 0x4000 /**< Maximum Scan interval in 625 us units, i.e. 10.24 s. */ ++ /** @} */ ++ ++ ++/**@defgroup BLE_GAP_SCAN_WINDOW GAP Scan window max and min ++ * @{ */ ++#define BLE_GAP_SCAN_WINDOW_MIN 0x0004 /**< Minimum Scan window in 625 us units, i.e. 2.5 ms. */ ++#define BLE_GAP_SCAN_WINDOW_MAX 0x4000 /**< Maximum Scan window in 625 us units, i.e. 10.24 s. */ ++ /** @} */ ++ ++ ++/**@defgroup BLE_GAP_SCAN_TIMEOUT GAP Scan timeout max and min ++ * @{ */ ++#define BLE_GAP_SCAN_TIMEOUT_MIN 0x0001 /**< Minimum Scan timeout in seconds. */ ++#define BLE_GAP_SCAN_TIMEOUT_MAX 0xFFFF /**< Maximum Scan timeout in seconds. */ ++ /** @} */ ++ ++ ++/**@brief Maximum size of advertising data in octets. */ ++#define BLE_GAP_ADV_MAX_SIZE (31) ++ ++ ++/**@defgroup BLE_GAP_ADV_TYPES GAP Advertising types ++ * @{ */ ++#define BLE_GAP_ADV_TYPE_ADV_IND 0x00 /**< Connectable undirected. */ ++#define BLE_GAP_ADV_TYPE_ADV_DIRECT_IND 0x01 /**< Connectable directed. */ ++#define BLE_GAP_ADV_TYPE_ADV_SCAN_IND 0x02 /**< Scannable undirected. */ ++#define BLE_GAP_ADV_TYPE_ADV_NONCONN_IND 0x03 /**< Non connectable undirected. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_ADV_FILTER_POLICIES GAP Advertising filter policies ++ * @{ */ ++#define BLE_GAP_ADV_FP_ANY 0x00 /**< Allow scan requests and connect requests from any device. */ ++#define BLE_GAP_ADV_FP_FILTER_SCANREQ 0x01 /**< Filter scan requests with whitelist. */ ++#define BLE_GAP_ADV_FP_FILTER_CONNREQ 0x02 /**< Filter connect requests with whitelist. */ ++#define BLE_GAP_ADV_FP_FILTER_BOTH 0x03 /**< Filter both scan and connect requests with whitelist. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_ADV_TIMEOUT_VALUES GAP Advertising timeout values ++ * @{ */ ++#define BLE_GAP_ADV_TIMEOUT_LIMITED_MAX (180) /**< Maximum advertising time in limited discoverable mode (TGAP(lim_adv_timeout) = 180s). */ ++#define BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED (0) /**< Unlimited advertising in general discoverable mode. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_DISC_MODES GAP Discovery modes ++ * @{ */ ++#define BLE_GAP_DISC_MODE_NOT_DISCOVERABLE 0x00 /**< Not discoverable discovery Mode. */ ++#define BLE_GAP_DISC_MODE_LIMITED 0x01 /**< Limited Discovery Mode. */ ++#define BLE_GAP_DISC_MODE_GENERAL 0x02 /**< General Discovery Mode. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_IO_CAPS GAP IO Capabilities ++ * @{ */ ++#define BLE_GAP_IO_CAPS_DISPLAY_ONLY 0x00 /**< Display Only. */ ++#define BLE_GAP_IO_CAPS_DISPLAY_YESNO 0x01 /**< Display and Yes/No entry. */ ++#define BLE_GAP_IO_CAPS_KEYBOARD_ONLY 0x02 /**< Keyboard Only. */ ++#define BLE_GAP_IO_CAPS_NONE 0x03 /**< No I/O capabilities. */ ++#define BLE_GAP_IO_CAPS_KEYBOARD_DISPLAY 0x04 /**< Keyboard and Display. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_AUTH_KEY_TYPES GAP Authentication Key Types ++ * @{ */ ++#define BLE_GAP_AUTH_KEY_TYPE_NONE 0x00 /**< No key (may be used to reject). */ ++#define BLE_GAP_AUTH_KEY_TYPE_PASSKEY 0x01 /**< 6-digit Passkey. */ ++#define BLE_GAP_AUTH_KEY_TYPE_OOB 0x02 /**< Out Of Band data. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_KP_NOT_TYPES GAP Keypress Notification Types ++ * @{ */ ++#define BLE_GAP_KP_NOT_TYPE_PASSKEY_START 0x00 /**< Passkey entry started. */ ++#define BLE_GAP_KP_NOT_TYPE_PASSKEY_DIGIT_IN 0x01 /**< Passkey digit entered. */ ++#define BLE_GAP_KP_NOT_TYPE_PASSKEY_DIGIT_OUT 0x02 /**< Passkey digit erased. */ ++#define BLE_GAP_KP_NOT_TYPE_PASSKEY_CLEAR 0x03 /**< Passkey cleared. */ ++#define BLE_GAP_KP_NOT_TYPE_PASSKEY_END 0x04 /**< Passkey entry completed. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_SEC_STATUS GAP Security status ++ * @{ */ ++#define BLE_GAP_SEC_STATUS_SUCCESS 0x00 /**< Procedure completed with success. */ ++#define BLE_GAP_SEC_STATUS_TIMEOUT 0x01 /**< Procedure timed out. */ ++#define BLE_GAP_SEC_STATUS_PDU_INVALID 0x02 /**< Invalid PDU received. */ ++#define BLE_GAP_SEC_STATUS_RFU_RANGE1_BEGIN 0x03 /**< Reserved for Future Use range #1 begin. */ ++#define BLE_GAP_SEC_STATUS_RFU_RANGE1_END 0x80 /**< Reserved for Future Use range #1 end. */ ++#define BLE_GAP_SEC_STATUS_PASSKEY_ENTRY_FAILED 0x81 /**< Passkey entry failed (user cancelled or other). */ ++#define BLE_GAP_SEC_STATUS_OOB_NOT_AVAILABLE 0x82 /**< Out of Band Key not available. */ ++#define BLE_GAP_SEC_STATUS_AUTH_REQ 0x83 /**< Authentication requirements not met. */ ++#define BLE_GAP_SEC_STATUS_CONFIRM_VALUE 0x84 /**< Confirm value failed. */ ++#define BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP 0x85 /**< Pairing not supported. */ ++#define BLE_GAP_SEC_STATUS_ENC_KEY_SIZE 0x86 /**< Encryption key size. */ ++#define BLE_GAP_SEC_STATUS_SMP_CMD_UNSUPPORTED 0x87 /**< Unsupported SMP command. */ ++#define BLE_GAP_SEC_STATUS_UNSPECIFIED 0x88 /**< Unspecified reason. */ ++#define BLE_GAP_SEC_STATUS_REPEATED_ATTEMPTS 0x89 /**< Too little time elapsed since last attempt. */ ++#define BLE_GAP_SEC_STATUS_INVALID_PARAMS 0x8A /**< Invalid parameters. */ ++#define BLE_GAP_SEC_STATUS_DHKEY_FAILURE 0x8B /**< DHKey check failure. */ ++#define BLE_GAP_SEC_STATUS_NUM_COMP_FAILURE 0x8C /**< Numeric Comparison failure. */ ++#define BLE_GAP_SEC_STATUS_BR_EDR_IN_PROG 0x8D /**< BR/EDR pairing in progress. */ ++#define BLE_GAP_SEC_STATUS_X_TRANS_KEY_DISALLOWED 0x8E /**< BR/EDR Link Key cannot be used for LE keys. */ ++#define BLE_GAP_SEC_STATUS_RFU_RANGE2_BEGIN 0x8F /**< Reserved for Future Use range #2 begin. */ ++#define BLE_GAP_SEC_STATUS_RFU_RANGE2_END 0xFF /**< Reserved for Future Use range #2 end. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_SEC_STATUS_SOURCES GAP Security status sources ++ * @{ */ ++#define BLE_GAP_SEC_STATUS_SOURCE_LOCAL 0x00 /**< Local failure. */ ++#define BLE_GAP_SEC_STATUS_SOURCE_REMOTE 0x01 /**< Remote failure. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_CP_LIMITS GAP Connection Parameters Limits ++ * @{ */ ++#define BLE_GAP_CP_MIN_CONN_INTVL_NONE 0xFFFF /**< No new minimum connection interval specified in connect parameters. */ ++#define BLE_GAP_CP_MIN_CONN_INTVL_MIN 0x0006 /**< Lowest minimum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ ++#define BLE_GAP_CP_MIN_CONN_INTVL_MAX 0x0C80 /**< Highest minimum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ ++#define BLE_GAP_CP_MAX_CONN_INTVL_NONE 0xFFFF /**< No new maximum connection interval specified in connect parameters. */ ++#define BLE_GAP_CP_MAX_CONN_INTVL_MIN 0x0006 /**< Lowest maximum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ ++#define BLE_GAP_CP_MAX_CONN_INTVL_MAX 0x0C80 /**< Highest maximum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ ++#define BLE_GAP_CP_SLAVE_LATENCY_MAX 0x01F3 /**< Highest slave latency permitted, in connection events. */ ++#define BLE_GAP_CP_CONN_SUP_TIMEOUT_NONE 0xFFFF /**< No new supervision timeout specified in connect parameters. */ ++#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MIN 0x000A /**< Lowest supervision timeout permitted, in units of 10 ms, i.e. 100 ms. */ ++#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MAX 0x0C80 /**< Highest supervision timeout permitted, in units of 10 ms, i.e. 32 s. */ ++/**@} */ ++ ++ ++/**@brief GAP device name defines. */ ++#define BLE_GAP_DEVNAME_DEFAULT "nRF5x" /**< Default device name value. */ ++#define BLE_GAP_DEVNAME_DEFAULT_LEN 31 /**< Default number of octets in device name. */ ++#define BLE_GAP_DEVNAME_MAX_LEN 248 /**< Maximum number of octets in device name. */ ++ ++ ++/**@brief Disable RSSI events for connections */ ++#define BLE_GAP_RSSI_THRESHOLD_INVALID 0xFF ++ ++ ++/**@defgroup BLE_GAP_CONN_SEC_MODE_SET_MACROS GAP attribute security requirement setters ++ * ++ * See @ref ble_gap_conn_sec_mode_t. ++ * @{ */ ++/**@brief Set sec_mode pointed to by ptr to have no access rights.*/ ++#define BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(ptr) do {(ptr)->sm = 0; (ptr)->lv = 0;} while (0) ++/**@brief Set sec_mode pointed to by ptr to require no protection, open link.*/ ++#define BLE_GAP_CONN_SEC_MODE_SET_OPEN(ptr) do {(ptr)->sm = 1; (ptr)->lv = 1;} while (0) ++/**@brief Set sec_mode pointed to by ptr to require encryption, but no MITM protection.*/ ++#define BLE_GAP_CONN_SEC_MODE_SET_ENC_NO_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 2;} while (0) ++/**@brief Set sec_mode pointed to by ptr to require encryption and MITM protection.*/ ++#define BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 3;} while (0) ++/**@brief Set sec_mode pointed to by ptr to require LESC encryption and MITM protection.*/ ++#define BLE_GAP_CONN_SEC_MODE_SET_LESC_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 4;} while (0) ++/**@brief Set sec_mode pointed to by ptr to require signing or encryption, no MITM protection needed.*/ ++#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_NO_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 1;} while (0) ++/**@brief Set sec_mode pointed to by ptr to require signing or encryption with MITM protection.*/ ++#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_WITH_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 2;} while (0) ++/**@} */ ++ ++ ++/**@brief GAP Security Random Number Length. */ ++#define BLE_GAP_SEC_RAND_LEN 8 ++ ++ ++/**@brief GAP Security Key Length. */ ++#define BLE_GAP_SEC_KEY_LEN 16 ++ ++ ++/**@brief GAP LE Secure Connections Elliptic Curve Diffie-Hellman P-256 Public Key Length. */ ++#define BLE_GAP_LESC_P256_PK_LEN 64 ++ ++ ++/**@brief GAP LE Secure Connections Elliptic Curve Diffie-Hellman DHKey Length. */ ++#define BLE_GAP_LESC_DHKEY_LEN 32 ++ ++ ++/**@brief GAP Passkey Length. */ ++#define BLE_GAP_PASSKEY_LEN 6 ++ ++ ++/**@brief Maximum amount of addresses in the whitelist. */ ++#define BLE_GAP_WHITELIST_ADDR_MAX_COUNT (8) ++ ++ ++/**@brief Maximum amount of identities in the device identities list. */ ++#define BLE_GAP_DEVICE_IDENTITIES_MAX_COUNT (8) ++ ++ ++/**@defgroup GAP_SEC_MODES GAP Security Modes ++ * @{ */ ++#define BLE_GAP_SEC_MODE 0x00 /**< No key (may be used to reject). */ ++/**@} */ ++/** @} */ ++ ++ ++/**@addtogroup BLE_GAP_STRUCTURES Structures ++ * @{ */ ++ ++/**@brief Bluetooth Low Energy address. */ ++typedef struct ++{ ++ uint8_t addr_id_peer : 1; /**< Only valid for peer addresses. ++ Reference to peer in device identities list (as set with @ref sd_ble_gap_device_identities_set) when peer is using privacy. */ ++ uint8_t addr_type : 7; /**< See @ref BLE_GAP_ADDR_TYPES. */ ++ uint8_t addr[BLE_GAP_ADDR_LEN]; /**< 48-bit address, LSB format. */ ++} ble_gap_addr_t; ++ ++ ++/**@brief GAP connection parameters. ++ * ++ * @note When ble_conn_params_t is received in an event, both min_conn_interval and ++ * max_conn_interval will be equal to the connection interval set by the central. ++ * ++ * @note If both conn_sup_timeout and max_conn_interval are specified, then the following constraint applies: ++ * conn_sup_timeout * 4 > (1 + slave_latency) * max_conn_interval ++ * that corresponds to the following Bluetooth Spec requirement: ++ * The Supervision_Timeout in milliseconds shall be larger than ++ * (1 + Conn_Latency) * Conn_Interval_Max * 2, where Conn_Interval_Max is given in milliseconds. ++ */ ++typedef struct ++{ ++ uint16_t min_conn_interval; /**< Minimum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ ++ uint16_t max_conn_interval; /**< Maximum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ ++ uint16_t slave_latency; /**< Slave Latency in number of connection events, see @ref BLE_GAP_CP_LIMITS.*/ ++ uint16_t conn_sup_timeout; /**< Connection Supervision Timeout in 10 ms units, see @ref BLE_GAP_CP_LIMITS.*/ ++} ble_gap_conn_params_t; ++ ++ ++/**@brief GAP connection security modes. ++ * ++ * Security Mode 0 Level 0: No access permissions at all (this level is not defined by the Bluetooth Core specification).\n ++ * Security Mode 1 Level 1: No security is needed (aka open link).\n ++ * Security Mode 1 Level 2: Encrypted link required, MITM protection not necessary.\n ++ * Security Mode 1 Level 3: MITM protected encrypted link required.\n ++ * Security Mode 1 Level 4: LESC MITM protected encrypted link required.\n ++ * Security Mode 2 Level 1: Signing or encryption required, MITM protection not necessary.\n ++ * Security Mode 2 Level 2: MITM protected signing required, unless link is MITM protected encrypted.\n ++ */ ++typedef struct ++{ ++ uint8_t sm : 4; /**< Security Mode (1 or 2), 0 for no permissions at all. */ ++ uint8_t lv : 4; /**< Level (1, 2, 3 or 4), 0 for no permissions at all. */ ++ ++} ble_gap_conn_sec_mode_t; ++ ++ ++/**@brief GAP connection security status.*/ ++typedef struct ++{ ++ ble_gap_conn_sec_mode_t sec_mode; /**< Currently active security mode for this connection.*/ ++ uint8_t encr_key_size; /**< Length of currently active encryption key, 7 to 16 octets (only applicable for bonding procedures). */ ++} ble_gap_conn_sec_t; ++ ++ ++/** ++ * @brief Device name and its properties ++ * @note If @ref max_len is more than @ref BLE_GAP_DEVNAME_DEFAULT_LEN and vloc is set to @ref BLE_GATTS_VLOC_STACK, the attribute table size must be increased to have room for the longer device name (see @ref ble_gatts_enable_params_t). ++ */ ++typedef struct ++{ ++ ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ ++ uint8_t vloc:2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ ++ uint8_t *p_value; /**< Pointer to where the value (device name) is stored or will be stored.*/ ++ uint16_t current_len; /**< Current length in bytes of the memory pointed to by p_value.*/ ++ uint16_t max_len; /**< Maximum length in bytes of the memory pointed to by p_value.*/ ++} ble_gap_device_name_t; ++ ++ ++/** ++ * @brief BLE GAP initialization parameters. ++ */ ++typedef struct ++{ ++ uint8_t periph_conn_count; /**< Number of connections acting as a peripheral */ ++ uint8_t central_conn_count; /**< Number of connections acting as a central */ ++ uint8_t central_sec_count; /**< Number of SMP instances for all connections acting as a central. */ ++ ble_gap_device_name_t const *p_device_name; /**< Pointer to device name instance. If NULL, @ref sd_ble_enable() will set the device name to @ref BLE_GAP_DEVNAME_DEFAULT. */ ++} ble_gap_enable_params_t; ++ ++ ++/**@brief Identity Resolving Key. */ ++typedef struct ++{ ++ uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Array containing IRK. */ ++} ble_gap_irk_t; ++ ++ ++/**@brief Channel mask for RF channels used in advertising. */ ++typedef struct ++{ ++ uint8_t ch_37_off : 1; /**< Setting this bit to 1 will turn off advertising on channel 37 */ ++ uint8_t ch_38_off : 1; /**< Setting this bit to 1 will turn off advertising on channel 38 */ ++ uint8_t ch_39_off : 1; /**< Setting this bit to 1 will turn off advertising on channel 39 */ ++} ble_gap_adv_ch_mask_t; ++ ++ ++/**@brief GAP advertising parameters. */ ++typedef struct ++{ ++ uint8_t type; /**< See @ref BLE_GAP_ADV_TYPES. */ ++ ble_gap_addr_t const *p_peer_addr; /**< Address of a known peer. ++ - When privacy is enabled and the local device use @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE addresses, the device identity list is searched for a matching ++ entry. If the local IRK for that device identity is set, the local IRK for that device will be used to generate the advertiser address field in the advertise packet. ++ - If type is @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND, this must be set to the targeted initiator. If the initiator is in the device identity list, ++ the peer IRK for that device will be used to generate the initiator address field in the ADV_DIRECT_IND packet. */ ++ uint8_t fp; /**< Filter Policy, see @ref BLE_GAP_ADV_FILTER_POLICIES. */ ++ uint16_t interval; /**< Advertising interval between 0x0020 and 0x4000 in 0.625 ms units (20ms to 10.24s), see @ref BLE_GAP_ADV_INTERVALS. ++ - If type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND, this parameter must be set to 0 for high duty cycle directed advertising. ++ - If type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND, set @ref BLE_GAP_ADV_INTERVAL_MIN <= interval <= @ref BLE_GAP_ADV_INTERVAL_MAX for low duty cycle advertising.*/ ++ uint16_t timeout; /**< Advertising timeout between 0x0001 and 0x3FFF in seconds, 0x0000 disables timeout. See also @ref BLE_GAP_ADV_TIMEOUT_VALUES. If type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND, this parameter must be set to 0 for High duty cycle directed advertising. */ ++ ble_gap_adv_ch_mask_t channel_mask; /**< Advertising channel mask. See @ref ble_gap_adv_ch_mask_t. */ ++} ble_gap_adv_params_t; ++ ++ ++/**@brief GAP scanning parameters. */ ++typedef struct ++{ ++ uint8_t active : 1; /**< If 1, perform active scanning (scan requests). */ ++ uint8_t use_whitelist : 1; /**< If 1, filter advertisers using current active whitelist. */ ++ uint8_t adv_dir_report : 1; /**< If 1, also report directed advertisements where the initiator field is set to a private resolvable address, ++ even if the address did not resolve to an entry in the device identity list. A report will be generated ++ even if the peer is not in the whitelist. */ ++ uint16_t interval; /**< Scan interval between 0x0004 and 0x4000 in 0.625ms units (2.5ms to 10.24s). */ ++ uint16_t window; /**< Scan window between 0x0004 and 0x4000 in 0.625ms units (2.5ms to 10.24s). */ ++ uint16_t timeout; /**< Scan timeout between 0x0001 and 0xFFFF in seconds, 0x0000 disables timeout. */ ++} ble_gap_scan_params_t; ++ ++ ++/**@brief Device Privacy. ++ * ++ * The privacy feature provides a way for the device to avoid being tracked over a period of time. ++ * The privacy feature, when enabled, hides the local device identity and replaces it with a private address ++ * that is automatically refreshed at a specified interval. ++ * ++ * If a device still wants to be recognized by other peers, it needs to share it's Identity Resolving Key (IRK). ++ * With this key, a device can generate a random private address that can only be recognized by peers in possession of that key, ++ * and devices can establish connections without revealing their real identities. ++ * ++ * @note If the device IRK is updated, the new IRK becomes the one to be distributed in all ++ * bonding procedures performed after @ref sd_ble_gap_privacy_set returns. ++ * The IRK distributed during bonding procedure is the device IRK that is active when @ref sd_ble_gap_sec_params_reply is called. ++ */ ++typedef struct ++{ ++ uint8_t privacy_mode; /**< Privacy mode, see @ref BLE_GAP_PRIVACY_MODES. Default is @ref BLE_GAP_PRIVACY_MODE_OFF. */ ++ uint8_t private_addr_type; /**< The private address type must be either @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE or @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE. */ ++ uint16_t private_addr_cycle_s; /**< Private address cycle interval in seconds. Providing an address cycle value of 0 will use the default value defined by @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S. */ ++ ble_gap_irk_t *p_device_irk; /**< When used as input, pointer to IRK structure that will be used as the default IRK. If NULL, the device default IRK will be used. ++ When used as output, pointer to IRK structure where the current default IRK will be written to. If NULL, this argument is ignored. ++ By default, the default IRK is used to generate random private resolvable addresses for the local device unless instructed otherwise. */ ++} ble_gap_privacy_params_t; ++ ++ ++/** @brief Keys that can be exchanged during a bonding procedure. */ ++typedef struct ++{ ++ uint8_t enc : 1; /**< Long Term Key and Master Identification. */ ++ uint8_t id : 1; /**< Identity Resolving Key and Identity Address Information. */ ++ uint8_t sign : 1; /**< Connection Signature Resolving Key. */ ++ uint8_t link : 1; /**< Derive the Link Key from the LTK. */ ++} ble_gap_sec_kdist_t; ++ ++ ++/**@brief GAP security parameters. */ ++typedef struct ++{ ++ uint8_t bond : 1; /**< Perform bonding. */ ++ uint8_t mitm : 1; /**< Enable Man In The Middle protection. */ ++ uint8_t lesc : 1; /**< Enable LE Secure Connection pairing. */ ++ uint8_t keypress : 1; /**< Enable generation of keypress notifications. */ ++ uint8_t io_caps : 3; /**< IO capabilities, see @ref BLE_GAP_IO_CAPS. */ ++ uint8_t oob : 1; /**< Out Of Band data available. */ ++ uint8_t min_key_size; /**< Minimum encryption key size in octets between 7 and 16. If 0 then not applicable in this instance. */ ++ uint8_t max_key_size; /**< Maximum encryption key size in octets between min_key_size and 16. */ ++ ble_gap_sec_kdist_t kdist_own; /**< Key distribution bitmap: keys that the local device will distribute. */ ++ ble_gap_sec_kdist_t kdist_peer; /**< Key distribution bitmap: keys that the remote device will distribute. */ ++} ble_gap_sec_params_t; ++ ++ ++/**@brief GAP Encryption Information. */ ++typedef struct ++{ ++ uint8_t ltk[BLE_GAP_SEC_KEY_LEN]; /**< Long Term Key. */ ++ uint8_t lesc : 1; /**< Key generated using LE Secure Connections. */ ++ uint8_t auth : 1; /**< Authenticated Key. */ ++ uint8_t ltk_len : 6; /**< LTK length in octets. */ ++} ble_gap_enc_info_t; ++ ++ ++/**@brief GAP Master Identification. */ ++typedef struct ++{ ++ uint16_t ediv; /**< Encrypted Diversifier. */ ++ uint8_t rand[BLE_GAP_SEC_RAND_LEN]; /**< Random Number. */ ++} ble_gap_master_id_t; ++ ++ ++/**@brief GAP Signing Information. */ ++typedef struct ++{ ++ uint8_t csrk[BLE_GAP_SEC_KEY_LEN]; /**< Connection Signature Resolving Key. */ ++} ble_gap_sign_info_t; ++ ++ ++/**@brief GAP LE Secure Connections P-256 Public Key. */ ++typedef struct ++{ ++ uint8_t pk[BLE_GAP_LESC_P256_PK_LEN]; /**< LE Secure Connections Elliptic Curve Diffie-Hellman P-256 Public Key. Stored in the standard SMP protocol format: {X,Y} both in little-endian. */ ++} ble_gap_lesc_p256_pk_t; ++ ++ ++/**@brief GAP LE Secure Connections DHKey. */ ++typedef struct ++{ ++ uint8_t key[BLE_GAP_LESC_DHKEY_LEN]; /**< LE Secure Connections Elliptic Curve Diffie-Hellman Key. Stored in little-endian. */ ++} ble_gap_lesc_dhkey_t; ++ ++ ++/**@brief GAP LE Secure Connections OOB data. */ ++typedef struct ++{ ++ ble_gap_addr_t addr; /**< Bluetooth address of the device. */ ++ uint8_t r[BLE_GAP_SEC_KEY_LEN]; /**< Random Number. */ ++ uint8_t c[BLE_GAP_SEC_KEY_LEN]; /**< Confirm Value. */ ++} ble_gap_lesc_oob_data_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_CONNECTED. */ ++typedef struct ++{ ++ ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 ++ and the address is the device's identity address. */ ++ uint8_t role; /**< BLE role for this connection, see @ref BLE_GAP_ROLES */ ++ ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ ++} ble_gap_evt_connected_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_DISCONNECTED. */ ++typedef struct ++{ ++ uint8_t reason; /**< HCI error code, see @ref BLE_HCI_STATUS_CODES. */ ++} ble_gap_evt_disconnected_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_CONN_PARAM_UPDATE. */ ++typedef struct ++{ ++ ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ ++} ble_gap_evt_conn_param_update_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST. */ ++typedef struct ++{ ++ ble_gap_sec_params_t peer_params; /**< Initiator Security Parameters. */ ++} ble_gap_evt_sec_params_request_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_SEC_INFO_REQUEST. */ ++typedef struct ++{ ++ ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ ++ ble_gap_master_id_t master_id; /**< Master Identification for LTK lookup. */ ++ uint8_t enc_info : 1; /**< If 1, Encryption Information required. */ ++ uint8_t id_info : 1; /**< If 1, Identity Information required. */ ++ uint8_t sign_info : 1; /**< If 1, Signing Information required. */ ++} ble_gap_evt_sec_info_request_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_PASSKEY_DISPLAY. */ ++typedef struct ++{ ++ uint8_t passkey[BLE_GAP_PASSKEY_LEN]; /**< 6-digit passkey in ASCII ('0'-'9' digits only). */ ++ uint8_t match_request : 1; /**< If 1 requires the application to report the match using @ref sd_ble_gap_auth_key_reply ++ with either @ref BLE_GAP_AUTH_KEY_TYPE_NONE if there is no match or ++ @ref BLE_GAP_AUTH_KEY_TYPE_PASSKEY if there is a match. */ ++} ble_gap_evt_passkey_display_t; ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_KEY_PRESSED. */ ++typedef struct ++{ ++ uint8_t kp_not; /**< Keypress notification type, see @ref BLE_GAP_KP_NOT_TYPES. */ ++} ble_gap_evt_key_pressed_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_AUTH_KEY_REQUEST. */ ++typedef struct ++{ ++ uint8_t key_type; /**< See @ref BLE_GAP_AUTH_KEY_TYPES. */ ++} ble_gap_evt_auth_key_request_t; ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST. */ ++typedef struct ++{ ++ ble_gap_lesc_p256_pk_t *p_pk_peer; /**< LE Secure Connections remote P-256 Public Key. This will point to the application-supplied memory ++ inside the keyset during the call to @ref sd_ble_gap_sec_params_reply. */ ++ uint8_t oobd_req :1; /**< LESC OOB data required. A call to @ref sd_ble_gap_lesc_oob_data_set is required to complete the procedure. */ ++} ble_gap_evt_lesc_dhkey_request_t; ++ ++ ++/**@brief Security levels supported. ++ * @note See Bluetooth Specification Version 4.2 Volume 3, Part C, Chapter 10, Section 10.2.1. ++*/ ++typedef struct ++{ ++ uint8_t lv1 : 1; /**< If 1: Level 1 is supported. */ ++ uint8_t lv2 : 1; /**< If 1: Level 2 is supported. */ ++ uint8_t lv3 : 1; /**< If 1: Level 3 is supported. */ ++ uint8_t lv4 : 1; /**< If 1: Level 4 is supported. */ ++} ble_gap_sec_levels_t; ++ ++ ++/**@brief Encryption Key. */ ++typedef struct ++{ ++ ble_gap_enc_info_t enc_info; /**< Encryption Information. */ ++ ble_gap_master_id_t master_id; /**< Master Identification. */ ++} ble_gap_enc_key_t; ++ ++ ++/**@brief Identity Key. */ ++typedef struct ++{ ++ ble_gap_irk_t id_info; /**< Identity Resolving Key. */ ++ ble_gap_addr_t id_addr_info; /**< Identity Address. */ ++} ble_gap_id_key_t; ++ ++ ++/**@brief Security Keys. */ ++typedef struct ++{ ++ ble_gap_enc_key_t *p_enc_key; /**< Encryption Key, or NULL. */ ++ ble_gap_id_key_t *p_id_key; /**< Identity Key, or NULL. */ ++ ble_gap_sign_info_t *p_sign_key; /**< Signing Key, or NULL. */ ++ ble_gap_lesc_p256_pk_t *p_pk; /**< LE Secure Connections P-256 Public Key. When in debug mode the application must use the value defined ++ in the Core Bluetooth Specification v4.2 Vol.3, Part H, Section 2.3.5.6.1 */ ++} ble_gap_sec_keys_t; ++ ++ ++/**@brief Security key set for both local and peer keys. */ ++typedef struct ++{ ++ ble_gap_sec_keys_t keys_own; /**< Keys distributed by the local device. For LE Secure Connections the encryption key will be generated locally and will always be stored if bonding. */ ++ ble_gap_sec_keys_t keys_peer; /**< Keys distributed by the remote device. For LE Secure Connections, p_enc_key must always be NULL. */ ++} ble_gap_sec_keyset_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_AUTH_STATUS. */ ++typedef struct ++{ ++ uint8_t auth_status; /**< Authentication status, see @ref BLE_GAP_SEC_STATUS. */ ++ uint8_t error_src : 2; /**< On error, source that caused the failure, see @ref BLE_GAP_SEC_STATUS_SOURCES. */ ++ uint8_t bonded : 1; /**< Procedure resulted in a bond. */ ++ ble_gap_sec_levels_t sm1_levels; /**< Levels supported in Security Mode 1. */ ++ ble_gap_sec_levels_t sm2_levels; /**< Levels supported in Security Mode 2. */ ++ ble_gap_sec_kdist_t kdist_own; /**< Bitmap stating which keys were exchanged (distributed) by the local device. If bonding with LE Secure Connections, the enc bit will be always set. */ ++ ble_gap_sec_kdist_t kdist_peer; /**< Bitmap stating which keys were exchanged (distributed) by the remote device. If bonding with LE Secure Connections, the enc bit will never be set. */ ++} ble_gap_evt_auth_status_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_CONN_SEC_UPDATE. */ ++typedef struct ++{ ++ ble_gap_conn_sec_t conn_sec; /**< Connection security level. */ ++} ble_gap_evt_conn_sec_update_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_TIMEOUT. */ ++typedef struct ++{ ++ uint8_t src; /**< Source of timeout event, see @ref BLE_GAP_TIMEOUT_SOURCES. */ ++} ble_gap_evt_timeout_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_RSSI_CHANGED. */ ++typedef struct ++{ ++ int8_t rssi; /**< Received Signal Strength Indication in dBm. */ ++} ble_gap_evt_rssi_changed_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_ADV_REPORT. */ ++typedef struct ++{ ++ ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 ++ and the address is the device's identity address. */ ++ ble_gap_addr_t direct_addr; /**< Set when the scanner is unable to resolve the private resolvable address of the initiator ++ field of a directed advertisement packet and the scanner has been enabled to report this in @ref ble_gap_scan_params_t::adv_dir_report. */ ++ int8_t rssi; /**< Received Signal Strength Indication in dBm. */ ++ uint8_t scan_rsp : 1; /**< If 1, the report corresponds to a scan response and the type field may be ignored. */ ++ uint8_t type : 2; /**< See @ref BLE_GAP_ADV_TYPES. Only valid if the scan_rsp field is 0. */ ++ uint8_t dlen : 5; /**< Advertising or scan response data length. */ ++ uint8_t data[BLE_GAP_ADV_MAX_SIZE]; /**< Advertising or scan response data. */ ++} ble_gap_evt_adv_report_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_SEC_REQUEST. */ ++typedef struct ++{ ++ uint8_t bond : 1; /**< Perform bonding. */ ++ uint8_t mitm : 1; /**< Man In The Middle protection requested. */ ++ uint8_t lesc : 1; /**< LE Secure Connections requested. */ ++ uint8_t keypress : 1; /**< Generation of keypress notifications requested. */ ++} ble_gap_evt_sec_request_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST. */ ++typedef struct ++{ ++ ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ ++} ble_gap_evt_conn_param_update_request_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_SCAN_REQ_REPORT. */ ++typedef struct ++{ ++ int8_t rssi; /**< Received Signal Strength Indication in dBm. */ ++ ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 ++ and the address is the device's identity address. */ ++} ble_gap_evt_scan_req_report_t; ++ ++ ++/**@brief GAP event structure. */ ++typedef struct ++{ ++ uint16_t conn_handle; /**< Connection Handle on which event occurred. */ ++ union /**< union alternative identified by evt_id in enclosing struct. */ ++ { ++ ble_gap_evt_connected_t connected; /**< Connected Event Parameters. */ ++ ble_gap_evt_disconnected_t disconnected; /**< Disconnected Event Parameters. */ ++ ble_gap_evt_conn_param_update_t conn_param_update; /**< Connection Parameter Update Parameters. */ ++ ble_gap_evt_sec_params_request_t sec_params_request; /**< Security Parameters Request Event Parameters. */ ++ ble_gap_evt_sec_info_request_t sec_info_request; /**< Security Information Request Event Parameters. */ ++ ble_gap_evt_passkey_display_t passkey_display; /**< Passkey Display Event Parameters. */ ++ ble_gap_evt_key_pressed_t key_pressed; /**< Key Pressed Event Parameters. */ ++ ble_gap_evt_auth_key_request_t auth_key_request; /**< Authentication Key Request Event Parameters. */ ++ ble_gap_evt_lesc_dhkey_request_t lesc_dhkey_request; /**< LE Secure Connections DHKey calculation request. */ ++ ble_gap_evt_auth_status_t auth_status; /**< Authentication Status Event Parameters. */ ++ ble_gap_evt_conn_sec_update_t conn_sec_update; /**< Connection Security Update Event Parameters. */ ++ ble_gap_evt_timeout_t timeout; /**< Timeout Event Parameters. */ ++ ble_gap_evt_rssi_changed_t rssi_changed; /**< RSSI Event parameters. */ ++ ble_gap_evt_adv_report_t adv_report; /**< Advertising Report Event Parameters. */ ++ ble_gap_evt_sec_request_t sec_request; /**< Security Request Event Parameters. */ ++ ble_gap_evt_conn_param_update_request_t conn_param_update_request; /**< Connection Parameter Update Parameters. */ ++ ble_gap_evt_scan_req_report_t scan_req_report; /**< Scan Request Report parameters. */ ++ } params; /**< Event Parameters. */ ++} ble_gap_evt_t; ++ ++ ++/**@brief Channel Map option. ++ * Used with @ref sd_ble_opt_get to get the current channel map ++ * or @ref sd_ble_opt_set to set a new channel map. When setting the ++ * channel map, it applies to all current and future connections. When getting the ++ * current channel map, it applies to a single connection and the connection handle ++ * must be supplied. ++ * ++ * @note Setting the channel map may take some time, depending on connection parameters. ++ * The time taken may be different for each connection and the get operation will ++ * return the previous channel map until the new one has taken effect. ++ * ++ * @note After setting the channel map, by spec it can not be set again until at least 1 s has passed. ++ * See Bluetooth Specification Version 4.1 Volume 2, Part E, Section 7.3.46. ++ * ++ * @retval ::NRF_SUCCESS Get or set successful. ++ * @retval ::NRF_ERROR_BUSY Channel map was set again before enough time had passed. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied for get. ++ * @retval ::NRF_ERROR_NOT_SUPPORTED Returned by sd_ble_opt_set in peripheral-only SoftDevices. ++ * ++ */ ++typedef struct ++{ ++ uint16_t conn_handle; /**< Connection Handle (only applicable for get) */ ++ uint8_t ch_map[5]; /**< Channel Map (37-bit). */ ++} ble_gap_opt_ch_map_t; ++ ++ ++/**@brief Local connection latency option. ++ * ++ * Local connection latency is a feature which enables the slave to improve ++ * current consumption by ignoring the slave latency set by the peer. The ++ * local connection latency can only be set to a multiple of the slave latency, ++ * and cannot be longer than half of the supervision timeout. ++ * ++ * Used with @ref sd_ble_opt_set to set the local connection latency. The ++ * @ref sd_ble_opt_get is not supported for this option, but the actual ++ * local connection latency (unless set to NULL) is set as a return parameter ++ * when setting the option. ++ * ++ * @note The latency set will be truncated down to the closest slave latency event ++ * multiple, or the nearest multiple before half of the supervision timeout. ++ * ++ * @note The local connection latency is disabled by default, and needs to be enabled for new ++ * connections and whenever the connection is updated. ++ * ++ * @retval ::NRF_SUCCESS Set successfully. ++ * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. ++ */ ++typedef struct ++{ ++ uint16_t conn_handle; /**< Connection Handle */ ++ uint16_t requested_latency; /**< Requested local connection latency. */ ++ uint16_t * p_actual_latency; /**< Pointer to storage for the actual local connection latency (can be set to NULL to skip return value). */ ++} ble_gap_opt_local_conn_latency_t; ++ ++ ++/**@brief Passkey Option. ++ * ++ * Structure containing the passkey to be used during pairing. This can be used with @ref ++ * sd_ble_opt_set to make the SoftDevice use a pre-programmed passkey for authentication ++ * instead of generating a random one. ++ * ++ * @note Repeated pairing attempts using the same pre-programmed passkey makes pairing vulnerable to MITM attacks. ++ * ++ * @note @ref sd_ble_opt_get is not supported for this option. ++ * ++ */ ++typedef struct ++{ ++ uint8_t * p_passkey; /**< Pointer to 6-digit ASCII string (digit 0..9 only, no NULL termination) passkey to be used during pairing. If this is NULL, the SoftDevice will generate a random passkey if required.*/ ++} ble_gap_opt_passkey_t; ++ ++ ++/**@brief Scan request report option. ++ * ++ * This can be used with @ref sd_ble_opt_set to make the SoftDevice send ++ * @ref BLE_GAP_EVT_SCAN_REQ_REPORT events. ++ * ++ * @note Due to the limited space reserved for scan request report events, ++ * not all received scan requests will be reported. ++ * ++ * @note If whitelisting is used, only whitelisted requests are reported. ++ * ++ * @retval ::NRF_SUCCESS Set successfully. ++ * @retval ::NRF_ERROR_INVALID_STATE When advertising is ongoing while the option is set. ++ */ ++typedef struct ++{ ++ uint8_t enable : 1; /**< Enable scan request reports. */ ++} ble_gap_opt_scan_req_report_t; ++ ++ ++/**@brief Compatibility mode option. ++ * ++ * This can be used with @ref sd_ble_opt_set to enable and disable ++ * compatibility modes. Compatibility modes are disabled by default. ++ * ++ * @note Compatibility mode 1 enables interoperability with devices that do not support ++ * a value of 0 for the WinOffset parameter in the Link Layer CONNECT_REQ packet. ++ * ++ * @retval ::NRF_SUCCESS Set successfully. ++ * @retval ::NRF_ERROR_INVALID_STATE When connection creation is ongoing while mode 1 is set. ++ */ ++typedef struct ++{ ++ uint8_t mode_1_enable : 1; /**< Enable compatibility mode 1.*/ ++} ble_gap_opt_compat_mode_t; ++ ++/**@brief Data length extension option. ++ * ++ * This can be used with @ref sd_ble_opt_set to enable longer data packets. ++ * ++ * @note An rxtx_max_pdu_payload_size of 0 will result in the default minimum payload size of 27. ++ * @note Not supported by SoftDevices for nRF51 Series devices. ++ * @note The parameters for a connection are applied when a connection complete ++ * event is generated for the host. ++ * ++ * ++ * @retval ::NRF_SUCCESS Set successfully. ++ * @retval ::NRF_ERROR_INVALID_PARAM If the payload size is not 0 or a valid link layer PDU payload size. ++ * @retval ::NRF_ERROR_NOT_SUPPORTED If called on a SoftDevice designed for nRF51 (e.g. s130). ++ */ ++typedef struct ++{ ++ uint8_t rxtx_max_pdu_payload_size; /**< Max PDU payload size (in octets). */ ++} ble_gap_opt_ext_len_t; ++ ++ ++ ++/**@brief Authenticated payload timeout option. ++ * ++ * This can be used with @ref sd_ble_opt_set to change the Authenticated payload timeout to a value other than the default of 8 minutes. ++ * ++ * @note The authenticated payload timeout event ::BLE_GAP_TIMEOUT_SRC_AUTH_PAYLOAD will be generated ++ * if auth_payload_timeout time has elapsed without receiving a packet with a valid MIC on an encrypted ++ * link. ++ * ++ * @note The LE ping procedure will be initiated before the timer expires to give the peer a chance ++ * to reset the timer. In addition the stack will try to prioritize running of LE ping over other ++ * activities to increase chances of finishing LE ping before timer expires. To avoid side-effects ++ * on other activities, it is recommended to use high timeout values. ++ * Recommended timeout > 2*(connInterval * (6 + connSlaveLatency)). ++ * ++ * @retval ::NRF_SUCCESS Set successfully. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. auth_payload_timeout was outside of allowed range. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. ++ */ ++typedef struct ++{ ++ uint16_t conn_handle; /**< Connection Handle */ ++ uint16_t auth_payload_timeout; /**< Requested timeout in 10 ms unit. Maximum is 48 000 (=480 000 ms =8 min). Minimum is 1 (=10ms). */ ++} ble_gap_opt_auth_payload_timeout_t; ++ ++ ++/**@brief Option structure for GAP options. */ ++typedef union ++{ ++ ble_gap_opt_ch_map_t ch_map; /**< Parameters for the Channel Map option. */ ++ ble_gap_opt_local_conn_latency_t local_conn_latency; /**< Parameters for the Local connection latency option */ ++ ble_gap_opt_passkey_t passkey; /**< Parameters for the Passkey option.*/ ++ ble_gap_opt_scan_req_report_t scan_req_report; /**< Parameters for the scan request report option.*/ ++ ble_gap_opt_compat_mode_t compat_mode; /**< Parameters for the compatibility mode option.*/ ++ ble_gap_opt_ext_len_t ext_len; /**< Parameters for the extended length option. */ ++ ble_gap_opt_auth_payload_timeout_t auth_payload_timeout; /**< Parameters for the authenticated payload timeout option.*/ ++} ble_gap_opt_t; ++/**@} */ ++ ++ ++/**@addtogroup BLE_GAP_FUNCTIONS Functions ++ * @{ */ ++ ++/**@brief Set the local Bluetooth identity address. ++ * ++ * The local Bluetooth identity address is the address that identifies this device to other peers. ++ * The address type must be either @ref BLE_GAP_ADDR_TYPE_PUBLIC or @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC. ++ * The identity address cannot be changed while roles are running. ++ * ++ * @note This address will be distributed to the peer during bonding. ++ * If the address changes, the address stored in the peer device will not be valid and the ability to ++ * reconnect using the old address will be lost. ++ * ++ * @note By default the SoftDevice will set an address of type @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC upon being ++ * enabled. The address is a random number populated during the IC manufacturing process and remains unchanged ++ * for the lifetime of each IC. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_ADV_MSC} ++ * @endmscs ++ * ++ * @param[in] p_addr Pointer to address structure. ++ * ++ * @retval ::NRF_SUCCESS Address successfully set. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address. ++ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. ++ * @retval ::NRF_ERROR_INVALID_STATE The identity address cannot be changed while the roles are running. ++ */ ++SVCALL(SD_BLE_GAP_ADDR_SET, uint32_t, sd_ble_gap_addr_set(ble_gap_addr_t const *p_addr)); ++ ++ ++/**@brief Get local Bluetooth identity address. ++ * ++ * @note This will always return the identity address irrespective of the privacy settings, ++ * i.e. the address type will always be either @ref BLE_GAP_ADDR_TYPE_PUBLIC or @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC. ++ * ++ * @param[out] p_addr Pointer to address structure to be filled in. ++ * ++ * @retval ::NRF_SUCCESS Address successfully retrieved. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid or NULL pointer supplied. ++ */ ++SVCALL(SD_BLE_GAP_ADDR_GET, uint32_t, sd_ble_gap_addr_get(ble_gap_addr_t *p_addr)); ++ ++ ++/**@brief Set the active whitelist in the SoftDevice. ++ * ++ * @note Only one whitelist can be used at a time and the whitelist is shared between the BLE roles. ++ * The whitelist cannot be set if a BLE role is using the whitelist. ++ * ++ * @note If an address is resolved using the information in the device identity list, then the whitelist ++ * filter policy applies to the peer identity address and not the resolvable address sent on air. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} ++ * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_PRIVATE_SCAN_MSC} ++ * @endmscs ++ * ++ * @param[in] pp_wl_addrs Pointer to a whitelist of peer addresses, if NULL the whitelist will be cleared. ++ * @param[in] len Length of the whitelist, maximum @ref BLE_GAP_WHITELIST_ADDR_MAX_COUNT. ++ * ++ * @retval ::NRF_SUCCESS The whitelist is successfully set/cleared. ++ * @retval ::NRF_ERROR_INVALID_ADDR The whitelist (or one of its entries) provided is invalid. ++ * @retval ::BLE_ERROR_GAP_WHITELIST_IN_USE The whitelist is in use by a BLE role and cannot be set or cleared. ++ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. ++ * @retval ::NRF_ERROR_DATA_SIZE The given whitelist size is invalid (zero or too large); this can only return when ++ * pp_wl_addrs is not NULL. ++ */ ++//lint -save -esym(18, sd_ble_gap_whitelist_set) ++SVCALL(SD_BLE_GAP_WHITELIST_SET, uint32_t, sd_ble_gap_whitelist_set(ble_gap_addr_t const * const * pp_wl_addrs, uint8_t len)); ++//lint -restore ++ ++/**@brief Set device identity list. ++ * ++ * @note Only one device identity list can be used at a time and the list is shared between the BLE roles. ++ * The device identity list cannot be set if a BLE role is using the list. ++ * ++ * @param[in] pp_id_keys Pointer to an array of peer identity addresses and peer IRKs, if NULL the device identity list will be cleared. ++ * @param[in] pp_local_irks Pointer to an array of local IRKs. Each entry in the array maps to the entry in pp_id_keys at the same index. ++ * To fill in the list with the currently set device IRK for all peers, set to NULL. ++ * @param[in] len Length of the device identity list, maximum @ref BLE_GAP_DEVICE_IDENTITIES_MAX_COUNT. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_PRIVACY_ADV_MSC} ++ * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_MSC} ++ * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_PRIVATE_SCAN_MSC} ++ * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_CONN_PRIV_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_CONN_PRIV_MSC} ++ * @endmscs ++ * ++ * @retval ::NRF_SUCCESS The device identity list successfully set/cleared. ++ * @retval ::NRF_ERROR_INVALID_ADDR The device identity list (or one of its entries) provided is invalid. ++ This code may be returned if the local IRK list also has an invalid entry. ++ * @retval ::BLE_ERROR_GAP_DEVICE_IDENTITIES_IN_USE The device identity list is in use and cannot be set or cleared. ++ * @retval ::BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE The device identity list contains multiple entries with the same identity address. ++ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. ++ * @retval ::NRF_ERROR_DATA_SIZE The given device identity list size invalid (zero or too large); this can ++ * only return when pp_id_keys is not NULL. ++ */ ++//lint -save -esym(18, sd_ble_gap_device_identities_set) ++SVCALL(SD_BLE_GAP_DEVICE_IDENTITIES_SET, uint32_t, sd_ble_gap_device_identities_set(ble_gap_id_key_t const * const * pp_id_keys, ble_gap_irk_t const * const * pp_local_irks, uint8_t len)); ++//lint -restore ++ ++/**@brief Set privacy settings. ++ * ++ * @note Privacy settings cannot be set while BLE roles are running. ++ * ++ * @param[in] p_privacy_params Privacy settings. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_PRIVACY_ADV_MSC} ++ * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_MSC} ++ * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} ++ * @endmscs ++ * ++ * @retval ::NRF_SUCCESS Set successfully. ++ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. ++ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. ++ * @retval ::NRF_ERROR_INVALID_ADDR The pointer to privacy settings is NULL or invalid. ++ Otherwise, the p_device_irk pointer in privacy parameter is an invalid pointer. ++ * @retval ::NRF_ERROR_INVALID_PARAM Out of range parameters are provided. ++ * @retval ::NRF_ERROR_INVALID_STATE Privacy settings cannot be changed while BLE roles using privacy are enabled. ++ */ ++SVCALL(SD_BLE_GAP_PRIVACY_SET, uint32_t, sd_ble_gap_privacy_set(ble_gap_privacy_params_t const *p_privacy_params)); ++ ++ ++/**@brief Get privacy settings. ++ * ++ * @note The privacy settings returned include the current device irk as well. ++ * ++ * @param[in] p_privacy_params Privacy settings. ++ * ++ * @retval ::NRF_SUCCESS Privacy settings read. ++ * @retval ::NRF_ERROR_INVALID_ADDR The pointer given for returning the privacy settings may be NULL or invalid. ++ Otherwise, the p_device_irk pointer in privacy parameter is an invalid pointer. ++ */ ++SVCALL(SD_BLE_GAP_PRIVACY_GET, uint32_t, sd_ble_gap_privacy_get(ble_gap_privacy_params_t *p_privacy_params)); ++ ++ ++/**@brief Set, clear or update advertising and scan response data. ++ * ++ * @note The format of the advertising data will be checked by this call to ensure interoperability. ++ * Limitations imposed by this API call to the data provided include having a flags data type in the scan response data and ++ * duplicating the local name in the advertising data and scan response data. ++ * ++ * @note To clear the advertising data and set it to a 0-length packet, simply provide a valid pointer (p_data/p_sr_data) with its corresponding ++ * length (dlen/srdlen) set to 0. ++ * ++ * @note The call will fail if p_data and p_sr_data are both NULL since this would have no effect. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_ADV_MSC} ++ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} ++ * @endmscs ++ * ++ * @param[in] p_data Raw data to be placed in advertising packet. If NULL, no changes are made to the current advertising packet data. ++ * @param[in] dlen Data length for p_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_data is NULL, can be 0 if p_data is not NULL. ++ * @param[in] p_sr_data Raw data to be placed in scan response packet. If NULL, no changes are made to the current scan response packet data. ++ * @param[in] srdlen Data length for p_sr_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_sr_data is NULL, can be 0 if p_data is not NULL. ++ * ++ * @retval ::NRF_SUCCESS Advertising data successfully updated or cleared. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, both p_data and p_sr_data cannot be NULL. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_FLAGS Invalid combination of advertising flags supplied. ++ * @retval ::NRF_ERROR_INVALID_DATA Invalid data type(s) supplied, check the advertising data format specification. ++ * @retval ::NRF_ERROR_INVALID_LENGTH Invalid data length(s) supplied. ++ * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported data type. ++ * @retval ::BLE_ERROR_GAP_UUID_LIST_MISMATCH Invalid UUID list supplied. ++ */ ++SVCALL(SD_BLE_GAP_ADV_DATA_SET, uint32_t, sd_ble_gap_adv_data_set(uint8_t const *p_data, uint8_t dlen, uint8_t const *p_sr_data, uint8_t srdlen)); ++ ++ ++/**@brief Start advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). ++ * ++ * @note An application can start an advertising procedure for broadcasting purposes while a connection ++ * is active. After a @ref BLE_GAP_EVT_CONNECTED event is received, this function may therefore ++ * be called to start a broadcast advertising procedure. The advertising procedure ++ * cannot however be connectable (it must be of type @ref BLE_GAP_ADV_TYPE_ADV_SCAN_IND or ++ * @ref BLE_GAP_ADV_TYPE_ADV_NONCONN_IND). @note Only one advertiser may be active at any time. ++ * ++ * @events ++ * @event{@ref BLE_GAP_EVT_CONNECTED, Generated after connection has been established through connectable advertising.} ++ * @event{@ref BLE_GAP_EVT_TIMEOUT, Advertisement has timed out.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_ADV_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_CONN_PRIV_MSC} ++ * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} ++ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} ++ * @endmscs ++ * ++ * @param[in] p_adv_params Pointer to advertising parameters structure. ++ * ++ * @retval ::NRF_SUCCESS The BLE stack has started advertising. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::NRF_ERROR_CONN_COUNT The limit of available connections has been reached; connectable advertiser cannot be started. ++ * @retval ::NRF_ERROR_NO_MEM The configured memory pools (see @ref ble_conn_bw_counts_t) are not large enough for the ++ * bandwidth selected for this connection. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check the accepted ranges and limits. ++ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Bluetooth address supplied. ++ * @retval ::BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST Discoverable mode and whitelist incompatible. ++ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. ++ * @retval ::NRF_ERROR_RESOURCES Not enough BLE role slots available. ++ * Stop one or more currently active roles (Central, Peripheral or Observer) and try again ++ */ ++SVCALL(SD_BLE_GAP_ADV_START, uint32_t, sd_ble_gap_adv_start(ble_gap_adv_params_t const *p_adv_params)); ++ ++ ++/**@brief Stop advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_ADV_MSC} ++ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} ++ * @endmscs ++ * ++ * @retval ::NRF_SUCCESS The BLE stack has stopped advertising. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation (most probably not in advertising state). ++ */ ++SVCALL(SD_BLE_GAP_ADV_STOP, uint32_t, sd_ble_gap_adv_stop(void)); ++ ++ ++/**@brief Update connection parameters. ++ * ++ * @details In the central role this will initiate a Link Layer connection parameter update procedure, ++ * otherwise in the peripheral role, this will send the corresponding L2CAP request and wait for ++ * the central to perform the procedure. In both cases, and regardless of success or failure, the application ++ * will be informed of the result with a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE event. ++ * ++ * @details This function can be used as a central both to reply to a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST or to start the procedure unrequested. ++ * ++ * @events ++ * @event{@ref BLE_GAP_EVT_CONN_PARAM_UPDATE, Result of the connection parameter update procedure.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_CPU_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} ++ * @mmsc{@ref BLE_GAP_MULTILINK_CPU_MSC} ++ * @mmsc{@ref BLE_GAP_MULTILINK_CTRL_PROC_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_CPU_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] p_conn_params Pointer to desired connection parameters. If NULL is provided on a peripheral role, ++ * the parameters in the PPCP characteristic of the GAP service will be used instead. ++ * If NULL is provided on a central role and in response to a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST, the peripheral request will be rejected ++ * ++ * @retval ::NRF_SUCCESS The Connection Update procedure has been started successfully. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::NRF_ERROR_BUSY Procedure already in progress or not allowed at this time, process pending events and wait for pending procedures to complete and retry. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. ++ */ ++SVCALL(SD_BLE_GAP_CONN_PARAM_UPDATE, uint32_t, sd_ble_gap_conn_param_update(uint16_t conn_handle, ble_gap_conn_params_t const *p_conn_params)); ++ ++ ++/**@brief Disconnect (GAP Link Termination). ++ * ++ * @details This call initiates the disconnection procedure, and its completion will be communicated to the application ++ * with a @ref BLE_GAP_EVT_DISCONNECTED event. ++ * ++ * @events ++ * @event{@ref BLE_GAP_EVT_DISCONNECTED, Generated when disconnection procedure is complete.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_CONN_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] hci_status_code HCI status code, see @ref BLE_HCI_STATUS_CODES (accepted values are @ref BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION and @ref BLE_HCI_CONN_INTERVAL_UNACCEPTABLE). ++ * ++ * @retval ::NRF_SUCCESS The disconnection procedure has been started successfully. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation (disconnection is already in progress). ++ */ ++SVCALL(SD_BLE_GAP_DISCONNECT, uint32_t, sd_ble_gap_disconnect(uint16_t conn_handle, uint8_t hci_status_code)); ++ ++ ++/**@brief Set the radio's transmit power. ++ * ++ * @param[in] tx_power Radio transmit power in dBm (accepted values are -40, -30, -20, -16, -12, -8, -4, 0, 3, and 4 dBm). ++ * ++ * @note The +3dBm setting is only available on nRF52 series ICs. ++ * @note The -30dBm setting is only available on nRF51 series ICs. ++ * @note The -40dBm setting is only available on nRF52 series ICs. ++ * ++ * @retval ::NRF_SUCCESS Successfully changed the transmit power. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ */ ++SVCALL(SD_BLE_GAP_TX_POWER_SET, uint32_t, sd_ble_gap_tx_power_set(int8_t tx_power)); ++ ++ ++/**@brief Set GAP Appearance value. ++ * ++ * @param[in] appearance Appearance (16-bit), see @ref BLE_APPEARANCES. ++ * ++ * @retval ::NRF_SUCCESS Appearance value set successfully. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ */ ++SVCALL(SD_BLE_GAP_APPEARANCE_SET, uint32_t, sd_ble_gap_appearance_set(uint16_t appearance)); ++ ++ ++/**@brief Get GAP Appearance value. ++ * ++ * @param[out] p_appearance Pointer to appearance (16-bit) to be filled in, see @ref BLE_APPEARANCES. ++ * ++ * @retval ::NRF_SUCCESS Appearance value retrieved successfully. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ */ ++SVCALL(SD_BLE_GAP_APPEARANCE_GET, uint32_t, sd_ble_gap_appearance_get(uint16_t *p_appearance)); ++ ++ ++/**@brief Set GAP Peripheral Preferred Connection Parameters. ++ * ++ * @param[in] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure with the desired parameters. ++ * ++ * @retval ::NRF_SUCCESS Peripheral Preferred Connection Parameters set successfully. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ */ ++SVCALL(SD_BLE_GAP_PPCP_SET, uint32_t, sd_ble_gap_ppcp_set(ble_gap_conn_params_t const *p_conn_params)); ++ ++ ++/**@brief Get GAP Peripheral Preferred Connection Parameters. ++ * ++ * @param[out] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure where the parameters will be stored. ++ * ++ * @retval ::NRF_SUCCESS Peripheral Preferred Connection Parameters retrieved successfully. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ */ ++SVCALL(SD_BLE_GAP_PPCP_GET, uint32_t, sd_ble_gap_ppcp_get(ble_gap_conn_params_t *p_conn_params)); ++ ++ ++/**@brief Set GAP device name. ++ * ++ * @param[in] p_write_perm Write permissions for the Device Name characteristic, see @ref ble_gap_conn_sec_mode_t. ++ * @param[in] p_dev_name Pointer to a UTF-8 encoded, non NULL-terminated string. ++ * @param[in] len Length of the UTF-8, non NULL-terminated string pointed to by p_dev_name in octets (must be smaller or equal than @ref BLE_GAP_DEVNAME_MAX_LEN). ++ * ++ * @note If the device name is located in application flash memory (see @ref ble_gap_device_name_t), it cannot be changed. Then @ref NRF_ERROR_FORBIDDEN will be returned. ++ * ++ * @retval ::NRF_SUCCESS GAP device name and permissions set successfully. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. ++ * @retval ::NRF_ERROR_FORBIDDEN Device name is not writable. ++ */ ++SVCALL(SD_BLE_GAP_DEVICE_NAME_SET, uint32_t, sd_ble_gap_device_name_set(ble_gap_conn_sec_mode_t const *p_write_perm, uint8_t const *p_dev_name, uint16_t len)); ++ ++ ++/**@brief Get GAP device name. ++ * ++ * @note If the device name is longer than the size of the supplied buffer, ++ * p_len will return the complete device name length, ++ * and not the number of bytes actually returned in p_dev_name. ++ * The application may use this information to allocate a suitable buffer size. ++ * ++ * @param[out] p_dev_name Pointer to an empty buffer where the UTF-8 non NULL-terminated string will be placed. Set to NULL to obtain the complete device name length. ++ * @param[in,out] p_len Length of the buffer pointed by p_dev_name, complete device name length on output. ++ * ++ * @retval ::NRF_SUCCESS GAP device name retrieved successfully. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. ++ */ ++SVCALL(SD_BLE_GAP_DEVICE_NAME_GET, uint32_t, sd_ble_gap_device_name_get(uint8_t *p_dev_name, uint16_t *p_len)); ++ ++ ++/**@brief Initiate the GAP Authentication procedure. ++ * ++ * @details In the central role, this function will send an SMP Pairing Request (or an SMP Pairing Failed if rejected), ++ * otherwise in the peripheral role, an SMP Security Request will be sent. ++ * ++ * @events ++ * @event{Depending on the security parameters set and the packet exchanges with the peer\, the following events may be generated:} ++ * @event{@ref BLE_GAP_EVT_SEC_PARAMS_REQUEST} ++ * @event{@ref BLE_GAP_EVT_SEC_INFO_REQUEST} ++ * @event{@ref BLE_GAP_EVT_PASSKEY_DISPLAY} ++ * @event{@ref BLE_GAP_EVT_KEY_PRESSED} ++ * @event{@ref BLE_GAP_EVT_AUTH_KEY_REQUEST} ++ * @event{@ref BLE_GAP_EVT_LESC_DHKEY_REQUEST} ++ * @event{@ref BLE_GAP_EVT_CONN_SEC_UPDATE} ++ * @event{@ref BLE_GAP_EVT_AUTH_STATUS} ++ * @event{@ref BLE_GAP_EVT_TIMEOUT} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_PERIPH_SEC_REQ_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_SEC_REQ_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_PAIRING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] p_sec_params Pointer to the @ref ble_gap_sec_params_t structure with the security parameters to be used during the pairing or bonding procedure. ++ * In the peripheral role, only the bond, mitm, lesc and keypress fields of this structure are used. ++ * In the central role, this pointer may be NULL to reject a Security Request. ++ * ++ * @retval ::NRF_SUCCESS Successfully initiated authentication procedure. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. ++ * @retval ::NRF_ERROR_NO_MEM The maximum number of authentication procedures that can run in parallel for the given role is reached. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ * @retval ::NRF_ERROR_NOT_SUPPORTED Setting of sign or link fields in @ref ble_gap_sec_kdist_t not supported. ++ * @retval ::NRF_ERROR_TIMEOUT A SMP timeout has occurred, and further SMP operations on this link is prohibited. ++ */ ++SVCALL(SD_BLE_GAP_AUTHENTICATE, uint32_t, sd_ble_gap_authenticate(uint16_t conn_handle, ble_gap_sec_params_t const *p_sec_params)); ++ ++ ++/**@brief Reply with GAP security parameters. ++ * ++ * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. ++ * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. ++ * ++ * @events ++ * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_PERIPH_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_CENTRAL_OOB_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_STATIC_PK_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_CONFIRM_FAIL_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_PAIRING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_PD_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_KS_TOO_SMALL_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_APP_ERROR_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_REMOTE_PAIRING_FAIL_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_TIMEOUT_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_PAIRING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] sec_status Security status, see @ref BLE_GAP_SEC_STATUS. ++ * @param[in] p_sec_params Pointer to a @ref ble_gap_sec_params_t security parameters structure. In the central role this must be set to NULL, as the parameters have ++ * already been provided during a previous call to @ref sd_ble_gap_authenticate. ++ * @param[in,out] p_sec_keyset Pointer to a @ref ble_gap_sec_keyset_t security keyset structure. Any keys generated and/or distributed as a result of the ongoing security procedure ++ * will be stored into the memory referenced by the pointers inside this structure. The keys will be stored and available to the application ++ * upon reception of a @ref BLE_GAP_EVT_AUTH_STATUS event. ++ * Note that the SoftDevice expects the application to provide memory for storing the ++ * peer's keys. So it must be ensured that the relevant pointers inside this structure are not NULL. The pointers to the local key ++ * can, however, be NULL, in which case, the local key data will not be available to the application upon reception of the ++ * @ref BLE_GAP_EVT_AUTH_STATUS event. ++ * ++ * @retval ::NRF_SUCCESS Successfully accepted security parameter from the application. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ * @retval ::NRF_ERROR_NOT_SUPPORTED Setting of sign or link fields in @ref ble_gap_sec_kdist_t not supported. ++ */ ++SVCALL(SD_BLE_GAP_SEC_PARAMS_REPLY, uint32_t, sd_ble_gap_sec_params_reply(uint16_t conn_handle, uint8_t sec_status, ble_gap_sec_params_t const *p_sec_params, ble_gap_sec_keyset_t const *p_sec_keyset)); ++ ++ ++/**@brief Reply with an authentication key. ++ * ++ * @details This function is only used to reply to a @ref BLE_GAP_EVT_AUTH_KEY_REQUEST or a @ref BLE_GAP_EVT_PASSKEY_DISPLAY, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. ++ * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. ++ * ++ * @events ++ * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_CENTRAL_OOB_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] key_type See @ref BLE_GAP_AUTH_KEY_TYPES. ++ * @param[in] p_key If key type is @ref BLE_GAP_AUTH_KEY_TYPE_NONE, then NULL. ++ * If key type is @ref BLE_GAP_AUTH_KEY_TYPE_PASSKEY, then a 6-byte ASCII string (digit 0..9 only, no NULL termination) ++ * or NULL when confirming LE Secure Connections Numeric Comparison. ++ * If key type is @ref BLE_GAP_AUTH_KEY_TYPE_OOB, then a 16-byte OOB key value in Little Endian format. ++ * ++ * @retval ::NRF_SUCCESS Authentication key successfully set. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ */ ++SVCALL(SD_BLE_GAP_AUTH_KEY_REPLY, uint32_t, sd_ble_gap_auth_key_reply(uint16_t conn_handle, uint8_t key_type, uint8_t const *p_key)); ++ ++/**@brief Reply with an LE Secure connections DHKey. ++ * ++ * @details This function is only used to reply to a @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. ++ * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. ++ * ++ * @events ++ * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_PAIRING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_PD_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] p_dhkey LE Secure Connections DHKey. ++ * ++ * @retval ::NRF_SUCCESS DHKey successfully set. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ */ ++SVCALL(SD_BLE_GAP_LESC_DHKEY_REPLY, uint32_t, sd_ble_gap_lesc_dhkey_reply(uint16_t conn_handle, ble_gap_lesc_dhkey_t const *p_dhkey)); ++ ++/**@brief Notify the peer of a local keypress. ++ * ++ * @details This function can only be used when an authentication procedure using LE Secure Connection is in progress. Calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] kp_not See @ref BLE_GAP_KP_NOT_TYPES. ++ * ++ * @retval ::NRF_SUCCESS Keypress notification successfully queued for transmission. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either not entering a passkey or keypresses have not been enabled by both peers. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ * @retval ::NRF_ERROR_BUSY The BLE stack is busy. Retry at later time. ++ */ ++SVCALL(SD_BLE_GAP_KEYPRESS_NOTIFY, uint32_t, sd_ble_gap_keypress_notify(uint16_t conn_handle, uint8_t kp_not)); ++ ++/**@brief Generate a set of OOB data to send to a peer out of band. ++ * ++ * @note The @ref ble_gap_addr_t included in the OOB data returned will be the currently active one (or, if a connection has already been established, ++ * the one used during connection setup). The application may manually overwrite it with an updated value. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. Can be BLE_CONN_HANDLE_INVALID if a BLE connection has not been established yet. ++ * @param[in] p_pk_own LE Secure Connections local P-256 Public Key. ++ * @param[out] p_oobd_own The OOB data to be sent out of band to a peer. ++ * ++ * @retval ::NRF_SUCCESS OOB data successfully generated. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ */ ++SVCALL(SD_BLE_GAP_LESC_OOB_DATA_GET, uint32_t, sd_ble_gap_lesc_oob_data_get(uint16_t conn_handle, ble_gap_lesc_p256_pk_t const *p_pk_own, ble_gap_lesc_oob_data_t *p_oobd_own)); ++ ++/**@brief Provide the OOB data sent/received out of band. ++ * ++ * @note At least one of the 2 pointers provided must be different from NULL. ++ * @note An authentication procedure with OOB selected as an algorithm must be in progress when calling this function. ++ * @note A @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST event with the oobd_req set to 1 must have been received prior to calling this function. ++ * ++ * @events ++ * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] p_oobd_own The OOB data sent out of band to a peer or NULL if none sent. ++ * @param[in] p_oobd_peer The OOB data received out of band from a peer or NULL if none received. ++ * ++ * @retval ::NRF_SUCCESS OOB data accepted. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ */ ++SVCALL(SD_BLE_GAP_LESC_OOB_DATA_SET, uint32_t, sd_ble_gap_lesc_oob_data_set(uint16_t conn_handle, ble_gap_lesc_oob_data_t const *p_oobd_own, ble_gap_lesc_oob_data_t const *p_oobd_peer)); ++ ++/**@brief Initiate GAP Encryption procedure. ++ * ++ * @details In the central role, this function will initiate the encryption procedure using the encryption information provided. ++ * ++ * @events ++ * @event{@ref BLE_GAP_EVT_CONN_SEC_UPDATE, The connection security has been updated.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_ENC_MSC} ++ * @mmsc{@ref BLE_GAP_MULTILINK_CTRL_PROC_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_SEC_REQ_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] p_master_id Pointer to a @ref ble_gap_master_id_t master identification structure. ++ * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. ++ * ++ * @retval ::NRF_SUCCESS Successfully initiated authentication procedure. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ * @retval ::BLE_ERROR_INVALID_ROLE Operation is not supported in the Peripheral role. ++ * @retval ::NRF_ERROR_BUSY Procedure already in progress or not allowed at this time, wait for pending procedures to complete and retry. ++ */ ++SVCALL(SD_BLE_GAP_ENCRYPT, uint32_t, sd_ble_gap_encrypt(uint16_t conn_handle, ble_gap_master_id_t const *p_master_id, ble_gap_enc_info_t const *p_enc_info)); ++ ++ ++/**@brief Reply with GAP security information. ++ * ++ * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_INFO_REQUEST, calling it at other times will result in @ref NRF_ERROR_INVALID_STATE. ++ * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. ++ * @note Data signing is not yet supported, and p_sign_info must therefore be NULL. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_PERIPH_ENC_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. May be NULL to signal none is available. ++ * @param[in] p_id_info Pointer to a @ref ble_gap_irk_t identity information structure. May be NULL to signal none is available. ++ * @param[in] p_sign_info Pointer to a @ref ble_gap_sign_info_t signing information structure. May be NULL to signal none is available. ++ * ++ * @retval ::NRF_SUCCESS Successfully accepted security information. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ */ ++SVCALL(SD_BLE_GAP_SEC_INFO_REPLY, uint32_t, sd_ble_gap_sec_info_reply(uint16_t conn_handle, ble_gap_enc_info_t const *p_enc_info, ble_gap_irk_t const *p_id_info, ble_gap_sign_info_t const *p_sign_info)); ++ ++ ++/**@brief Get the current connection security. ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[out] p_conn_sec Pointer to a @ref ble_gap_conn_sec_t structure to be filled in. ++ * ++ * @retval ::NRF_SUCCESS Current connection security successfully retrieved. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ */ ++SVCALL(SD_BLE_GAP_CONN_SEC_GET, uint32_t, sd_ble_gap_conn_sec_get(uint16_t conn_handle, ble_gap_conn_sec_t *p_conn_sec)); ++ ++ ++/**@brief Start reporting the received signal strength to the application. ++ * ++ * A new event is reported whenever the RSSI value changes, until @ref sd_ble_gap_rssi_stop is called. ++ * ++ * @events ++ * @event{@ref BLE_GAP_EVT_RSSI_CHANGED, New RSSI data available. How often the event is generated is ++ dependent on the settings of the threshold_dbm ++ and skip_count input parameters.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} ++ * @mmsc{@ref BLE_GAP_RSSI_FILT_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] threshold_dbm Minimum change in dBm before triggering the @ref BLE_GAP_EVT_RSSI_CHANGED event. Events are disabled if threshold_dbm equals @ref BLE_GAP_RSSI_THRESHOLD_INVALID. ++ * @param[in] skip_count Number of RSSI samples with a change of threshold_dbm or more before sending a new @ref BLE_GAP_EVT_RSSI_CHANGED event. ++ * ++ * @retval ::NRF_SUCCESS Successfully activated RSSI reporting. ++ * @retval ::NRF_ERROR_INVALID_STATE Disconnection in progress. Invalid state to perform operation. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ */ ++SVCALL(SD_BLE_GAP_RSSI_START, uint32_t, sd_ble_gap_rssi_start(uint16_t conn_handle, uint8_t threshold_dbm, uint8_t skip_count)); ++ ++ ++/**@brief Stop reporting the received signal strength. ++ * ++ * @note An RSSI change detected before the call but not yet received by the application ++ * may be reported after @ref sd_ble_gap_rssi_stop has been called. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} ++ * @mmsc{@ref BLE_GAP_RSSI_FILT_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * ++ * @retval ::NRF_SUCCESS Successfully deactivated RSSI reporting. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ */ ++SVCALL(SD_BLE_GAP_RSSI_STOP, uint32_t, sd_ble_gap_rssi_stop(uint16_t conn_handle)); ++ ++ ++/**@brief Get the received signal strength for the last connection event. ++ * ++ * @ref sd_ble_gap_rssi_start must be called to start reporting RSSI before using this function. @ref NRF_ERROR_NOT_FOUND ++ * will be returned until RSSI was sampled for the first time after calling @ref sd_ble_gap_rssi_start. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[out] p_rssi Pointer to the location where the RSSI measurement shall be stored. ++ * ++ * @retval ::NRF_SUCCESS Successfully read the RSSI. ++ * @retval ::NRF_ERROR_NOT_FOUND No sample is available. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is not ongoing, or disconnection in progress. ++ */ ++SVCALL(SD_BLE_GAP_RSSI_GET, uint32_t, sd_ble_gap_rssi_get(uint16_t conn_handle, int8_t *p_rssi)); ++ ++ ++/**@brief Start scanning (GAP Discovery procedure, Observer Procedure). ++ * ++ * ++ * @events ++ * @event{@ref BLE_GAP_EVT_ADV_REPORT, An advertising or scan response packet has been received.} ++ * @event{@ref BLE_GAP_EVT_TIMEOUT, Scanner has timed out.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_SCAN_MSC} ++ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} ++ * @endmscs ++ * ++ * @param[in] p_scan_params Pointer to scan parameters structure. ++ * ++ * @retval ::NRF_SUCCESS Successfully initiated scanning procedure. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. ++ * @retval ::NRF_ERROR_RESOURCES Not enough BLE role slots available. ++ * Stop one or more currently active roles (Central, Peripheral or Broadcaster) and try again ++ */ ++SVCALL(SD_BLE_GAP_SCAN_START, uint32_t, sd_ble_gap_scan_start(ble_gap_scan_params_t const *p_scan_params)); ++ ++ ++/**@brief Stop scanning (GAP Discovery procedure, Observer Procedure). ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_SCAN_MSC} ++ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} ++ * @endmscs ++ * ++ * @retval ::NRF_SUCCESS Successfully stopped scanning procedure. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation (most probably not in scanning state). ++ */ ++SVCALL(SD_BLE_GAP_SCAN_STOP, uint32_t, sd_ble_gap_scan_stop(void)); ++ ++ ++/**@brief Create a connection (GAP Link Establishment). ++ * ++ * @note If a scanning procedure is currently in progress it will be automatically stopped when calling this function. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_CONN_PRIV_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_CONN_MSC} ++ * @endmscs ++ * ++ * @param[in] p_peer_addr Pointer to peer address. If the use_whitelist bit is set in @ref ble_gap_scan_params_t, then this is ignored. ++ * If @ref ble_gap_addr_t::addr_id_peer is set then p_peer_addr must be present in the device identity list ++ * see @ref sd_ble_gap_device_identities_set. ++ * @param[in] p_scan_params Pointer to scan parameters structure. ++ * @param[in] p_conn_params Pointer to desired connection parameters. ++ * ++ * @retval ::NRF_SUCCESS Successfully initiated connection procedure. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid parameter(s) pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ - Invalid parameter(s) in p_scan_params or p_conn_params. ++ - Use of whitelist requested but whitelist has not been set, see @ref sd_ble_gap_whitelist_set. ++ - Peer address was not present in the device identity list, see @ref sd_ble_gap_device_identities_set. ++ * @retval ::NRF_ERROR_INVALID_STATE The SoftDevice is in an invalid state to perform this operation. This may be due to an ++ * existing locally initiated connect procedure, which must complete before initiating again. ++ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Peer address. ++ * @retval ::NRF_ERROR_CONN_COUNT The limit of available connections has been reached. ++ * @retval ::NRF_ERROR_NO_MEM The configured memory pool (see @ref ble_conn_bw_counts_t) is not large enough for the ++ * bandwidth selected for this connection. ++ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. If another connection is being established ++ * wait for the corresponding @ref BLE_GAP_EVT_CONNECTED event before calling again. ++ * @retval ::NRF_ERROR_RESOURCES Not enough BLE role slots available. ++ * Stop one or more currently active roles (Central, Peripheral or Broadcaster) and try again ++ */ ++SVCALL(SD_BLE_GAP_CONNECT, uint32_t, sd_ble_gap_connect(ble_gap_addr_t const *p_peer_addr, ble_gap_scan_params_t const *p_scan_params, ble_gap_conn_params_t const *p_conn_params)); ++ ++ ++/**@brief Cancel a connection establishment. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_CENTRAL_CONN_MSC} ++ * @endmscs ++ * ++ * @retval ::NRF_SUCCESS Successfully cancelled an ongoing connection procedure. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ */ ++SVCALL(SD_BLE_GAP_CONNECT_CANCEL, uint32_t, sd_ble_gap_connect_cancel(void)); ++ ++/** @} */ ++ ++#ifdef __cplusplus ++} ++#endif ++#endif // BLE_GAP_H__ ++ ++/** ++ @} ++*/ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers_replacement/ble_gattc.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers_replacement/ble_gattc.h +new file mode 100644 +index 0000000..9cd75e2 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers_replacement/ble_gattc.h +@@ -0,0 +1,674 @@ ++/* ++ * Copyright (c) Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form must reproduce the above copyright notice, this ++ * list of conditions and the following disclaimer in the documentation and/or ++ * other materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other ++ * contributors to this software may be used to endorse or promote products ++ * derived from this software without specific prior written permission. ++ * ++ * 4. This software must only be used in a processor manufactured by Nordic ++ * Semiconductor ASA, or in a processor manufactured by a third party that ++ * is used in combination with a processor manufactured by Nordic Semiconductor. ++ * ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ++ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ++ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ * ++ */ ++ ++/** ++ @addtogroup BLE_GATTC Generic Attribute Profile (GATT) Client ++ @{ ++ @brief Definitions and prototypes for the GATT Client interface. ++ */ ++ ++#ifndef BLE_GATTC_H__ ++#define BLE_GATTC_H__ ++ ++#include "ble_gatt.h" ++#include "ble_types.h" ++#include "ble_ranges.h" ++#include "nrf_svc.h" ++#include "nrf_error.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++ ++/** @addtogroup BLE_GATTC_ENUMERATIONS Enumerations ++ * @{ */ ++ ++/**@brief GATTC API SVC numbers. */ ++enum BLE_GATTC_SVCS ++{ ++ SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER = BLE_GATTC_SVC_BASE, /**< Primary Service Discovery. */ ++ SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, /**< Relationship Discovery. */ ++ SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, /**< Characteristic Discovery. */ ++ SD_BLE_GATTC_DESCRIPTORS_DISCOVER, /**< Characteristic Descriptor Discovery. */ ++ SD_BLE_GATTC_ATTR_INFO_DISCOVER, /**< Attribute Information Discovery. */ ++ SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, /**< Read Characteristic Value by UUID. */ ++ SD_BLE_GATTC_READ, /**< Generic read. */ ++ SD_BLE_GATTC_CHAR_VALUES_READ, /**< Read multiple Characteristic Values. */ ++ SD_BLE_GATTC_WRITE, /**< Generic write. */ ++ SD_BLE_GATTC_HV_CONFIRM, /**< Handle Value Confirmation. */ ++ SD_BLE_GATTC_EXCHANGE_MTU_REQUEST, /**< Exchange MTU Request. */ ++}; ++ ++/** ++ * @brief GATT Client Event IDs. ++ */ ++enum BLE_GATTC_EVTS ++{ ++ BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP = BLE_GATTC_EVT_BASE, /**< Primary Service Discovery Response event. \n See @ref ble_gattc_evt_prim_srvc_disc_rsp_t. */ ++ BLE_GATTC_EVT_REL_DISC_RSP, /**< Relationship Discovery Response event. \n See @ref ble_gattc_evt_rel_disc_rsp_t. */ ++ BLE_GATTC_EVT_CHAR_DISC_RSP, /**< Characteristic Discovery Response event. \n See @ref ble_gattc_evt_char_disc_rsp_t. */ ++ BLE_GATTC_EVT_DESC_DISC_RSP, /**< Descriptor Discovery Response event. \n See @ref ble_gattc_evt_desc_disc_rsp_t. */ ++ BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, /**< Attribute Information Response event. \n See @ref ble_gattc_evt_attr_info_disc_rsp_t. */ ++ BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP, /**< Read By UUID Response event. \n See @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t. */ ++ BLE_GATTC_EVT_READ_RSP, /**< Read Response event. \n See @ref ble_gattc_evt_read_rsp_t. */ ++ BLE_GATTC_EVT_CHAR_VALS_READ_RSP, /**< Read multiple Response event. \n See @ref ble_gattc_evt_char_vals_read_rsp_t. */ ++ BLE_GATTC_EVT_WRITE_RSP, /**< Write Response event. \n See @ref ble_gattc_evt_write_rsp_t. */ ++ BLE_GATTC_EVT_HVX, /**< Handle Value Notification or Indication event. \n Confirm indication with @ref sd_ble_gattc_hv_confirm. \n See @ref ble_gattc_evt_hvx_t. */ ++ BLE_GATTC_EVT_EXCHANGE_MTU_RSP, /**< Exchange MTU Response event. \n See @ref ble_gattc_evt_exchange_mtu_rsp_t. */ ++ BLE_GATTC_EVT_TIMEOUT /**< Timeout event. \n See @ref ble_gattc_evt_timeout_t. */ ++}; ++ ++/** @} */ ++ ++/** @addtogroup BLE_GATTC_DEFINES Defines ++ * @{ */ ++ ++/** @defgroup BLE_ERRORS_GATTC SVC return values specific to GATTC ++ * @{ */ ++#define BLE_ERROR_GATTC_PROC_NOT_PERMITTED (NRF_GATTC_ERR_BASE + 0x000) /**< Procedure not Permitted. */ ++/** @} */ ++ ++/** @defgroup BLE_GATTC_ATTR_INFO_FORMAT Attribute Information Formats ++ * @{ */ ++#define BLE_GATTC_ATTR_INFO_FORMAT_16BIT 1 /**< 16-bit Attribute Information Format. */ ++#define BLE_GATTC_ATTR_INFO_FORMAT_128BIT 2 /**< 128-bit Attribute Information Format. */ ++/** @} */ ++ ++/** @} */ ++ ++/** @addtogroup BLE_GATTC_STRUCTURES Structures ++ * @{ */ ++ ++/**@brief Operation Handle Range. */ ++typedef struct ++{ ++ uint16_t start_handle; /**< Start Handle. */ ++ uint16_t end_handle; /**< End Handle. */ ++} ble_gattc_handle_range_t; ++ ++ ++/**@brief GATT service. */ ++typedef struct ++{ ++ ble_uuid_t uuid; /**< Service UUID. */ ++ ble_gattc_handle_range_t handle_range; /**< Service Handle Range. */ ++} ble_gattc_service_t; ++ ++ ++/**@brief GATT include. */ ++typedef struct ++{ ++ uint16_t handle; /**< Include Handle. */ ++ ble_gattc_service_t included_srvc; /**< Handle of the included service. */ ++} ble_gattc_include_t; ++ ++ ++/**@brief GATT characteristic. */ ++typedef struct ++{ ++ ble_uuid_t uuid; /**< Characteristic UUID. */ ++ ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ ++ uint8_t char_ext_props : 1; /**< Extended properties present. */ ++ uint16_t handle_decl; /**< Handle of the Characteristic Declaration. */ ++ uint16_t handle_value; /**< Handle of the Characteristic Value. */ ++} ble_gattc_char_t; ++ ++ ++/**@brief GATT descriptor. */ ++typedef struct ++{ ++ uint16_t handle; /**< Descriptor Handle. */ ++ ble_uuid_t uuid; /**< Descriptor UUID. */ ++} ble_gattc_desc_t; ++ ++ ++/**@brief Write Parameters. */ ++typedef struct ++{ ++ uint8_t write_op; /**< Write Operation to be performed, see @ref BLE_GATT_WRITE_OPS. */ ++ uint8_t flags; /**< Flags, see @ref BLE_GATT_EXEC_WRITE_FLAGS. */ ++ uint16_t handle; /**< Handle to the attribute to be written. */ ++ uint16_t offset; /**< Offset in bytes. @note For WRITE_CMD and WRITE_REQ, offset must be 0. */ ++ uint16_t len; /**< Length of data in bytes. */ ++ uint8_t const *p_value; /**< Pointer to the value data. */ ++} ble_gattc_write_params_t; ++ ++/**@brief Attribute Information for 16-bit Attribute UUID. */ ++typedef struct ++{ ++ uint16_t handle; /**< Attribute handle. */ ++ ble_uuid_t uuid; /**< 16-bit Attribute UUID. */ ++} ble_gattc_attr_info16_t; ++ ++/**@brief Attribute Information for 128-bit Attribute UUID. */ ++typedef struct ++{ ++ uint16_t handle; /**< Attribute handle. */ ++ ble_uuid128_t uuid; /**< 128-bit Attribute UUID. */ ++} ble_gattc_attr_info128_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP. */ ++typedef struct ++{ ++ uint16_t count; /**< Service count. */ ++ ble_gattc_service_t services[1]; /**< Service data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++} ble_gattc_evt_prim_srvc_disc_rsp_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_REL_DISC_RSP. */ ++typedef struct ++{ ++ uint16_t count; /**< Include count. */ ++ ble_gattc_include_t includes[1]; /**< Include data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++} ble_gattc_evt_rel_disc_rsp_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_DISC_RSP. */ ++typedef struct ++{ ++ uint16_t count; /**< Characteristic count. */ ++ ble_gattc_char_t chars[1]; /**< Characteristic data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++} ble_gattc_evt_char_disc_rsp_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_DESC_DISC_RSP. */ ++typedef struct ++{ ++ uint16_t count; /**< Descriptor count. */ ++ ble_gattc_desc_t descs[1]; /**< Descriptor data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++} ble_gattc_evt_desc_disc_rsp_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP. */ ++typedef struct ++{ ++ uint16_t count; /**< Attribute count. */ ++ uint8_t format; /**< Attribute information format, see @ref BLE_GATTC_ATTR_INFO_FORMAT. */ ++ union { ++ ble_gattc_attr_info16_t attr_info16[1]; /**< Attribute information for 16-bit Attribute UUID. ++ @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++ ble_gattc_attr_info128_t attr_info128[1]; /**< Attribute information for 128-bit Attribute UUID. ++ @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++ } info; /**< Attribute information union. */ ++} ble_gattc_evt_attr_info_disc_rsp_t; ++ ++/**@brief GATT read by UUID handle value pair. */ ++typedef struct ++{ ++ uint16_t handle; /**< Attribute Handle. */ ++ uint8_t *p_value; /**< Pointer to the Attribute Value, length is available in @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t::value_len. */ ++} ble_gattc_handle_value_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP. */ ++typedef struct ++{ ++ uint16_t count; /**< Handle-Value Pair Count. */ ++ uint16_t value_len; /**< Length of the value in Handle-Value(s) list. */ ++ uint8_t handle_value[1]; /**< Handle-Value(s) list. To iterate through the list use @ref sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter. ++ @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++} ble_gattc_evt_char_val_by_uuid_read_rsp_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_READ_RSP. */ ++typedef struct ++{ ++ uint16_t handle; /**< Attribute Handle. */ ++ uint16_t offset; /**< Offset of the attribute data. */ ++ uint16_t len; /**< Attribute data length. */ ++ uint8_t data[1]; /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++} ble_gattc_evt_read_rsp_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP. */ ++typedef struct ++{ ++ uint16_t len; /**< Concatenated Attribute values length. */ ++ uint8_t values[1]; /**< Attribute values. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++} ble_gattc_evt_char_vals_read_rsp_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_WRITE_RSP. */ ++typedef struct ++{ ++ uint16_t handle; /**< Attribute Handle. */ ++ uint8_t write_op; /**< Type of write operation, see @ref BLE_GATT_WRITE_OPS. */ ++ uint16_t offset; /**< Data offset. */ ++ uint16_t len; /**< Data length. */ ++ uint8_t data[1]; /**< Data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++} ble_gattc_evt_write_rsp_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_HVX. */ ++typedef struct ++{ ++ uint16_t handle; /**< Handle to which the HVx operation applies. */ ++ uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ ++ uint16_t len; /**< Attribute data length. */ ++ uint8_t data[1]; /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++} ble_gattc_evt_hvx_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. */ ++typedef struct ++{ ++ uint16_t server_rx_mtu; /**< Server RX MTU size. */ ++} ble_gattc_evt_exchange_mtu_rsp_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_TIMEOUT. */ ++typedef struct ++{ ++ uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ ++} ble_gattc_evt_timeout_t; ++ ++/**@brief GATTC event structure. */ ++typedef struct ++{ ++ uint16_t conn_handle; /**< Connection Handle on which event occured. */ ++ uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ ++ uint16_t error_handle; /**< In case of error: The handle causing the error. In all other cases @ref BLE_GATT_HANDLE_INVALID. */ ++ union ++ { ++ ble_gattc_evt_prim_srvc_disc_rsp_t prim_srvc_disc_rsp; /**< Primary Service Discovery Response Event Parameters. */ ++ ble_gattc_evt_rel_disc_rsp_t rel_disc_rsp; /**< Relationship Discovery Response Event Parameters. */ ++ ble_gattc_evt_char_disc_rsp_t char_disc_rsp; /**< Characteristic Discovery Response Event Parameters. */ ++ ble_gattc_evt_desc_disc_rsp_t desc_disc_rsp; /**< Descriptor Discovery Response Event Parameters. */ ++ ble_gattc_evt_char_val_by_uuid_read_rsp_t char_val_by_uuid_read_rsp; /**< Characteristic Value Read by UUID Response Event Parameters. */ ++ ble_gattc_evt_read_rsp_t read_rsp; /**< Read Response Event Parameters. */ ++ ble_gattc_evt_char_vals_read_rsp_t char_vals_read_rsp; /**< Characteristic Values Read Response Event Parameters. */ ++ ble_gattc_evt_write_rsp_t write_rsp; /**< Write Response Event Parameters. */ ++ ble_gattc_evt_hvx_t hvx; /**< Handle Value Notification/Indication Event Parameters. */ ++ ble_gattc_evt_exchange_mtu_rsp_t exchange_mtu_rsp; /**< Exchange MTU Response Event Parameters. */ ++ ble_gattc_evt_timeout_t timeout; /**< Timeout Event Parameters. */ ++ ble_gattc_evt_attr_info_disc_rsp_t attr_info_disc_rsp; /**< Attribute Information Discovery Event Parameters. */ ++ } params; /**< Event Parameters. @note Only valid if @ref gatt_status == @ref BLE_GATT_STATUS_SUCCESS. */ ++} ble_gattc_evt_t; ++/** @} */ ++ ++/** @addtogroup BLE_GATTC_FUNCTIONS Functions ++ * @{ */ ++ ++/**@brief Initiate or continue a GATT Primary Service Discovery procedure. ++ * ++ * @details This function initiates or resumes a Primary Service discovery procedure, starting from the supplied handle. ++ * If the last service has not been reached, this function must be called again with an updated start handle value to continue the search. ++ * ++ * @note If any of the discovered services have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with ++ * type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. ++ * ++ * @events ++ * @event{@ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTC_PRIM_SRVC_DISC_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] start_handle Handle to start searching from. ++ * @param[in] p_srvc_uuid Pointer to the service UUID to be found. If it is NULL, all primary services will be returned. ++ * ++ * @retval ::NRF_SUCCESS Successfully started or resumed the Primary Service Discovery procedure. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. ++ */ ++SVCALL(SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER, uint32_t, sd_ble_gattc_primary_services_discover(uint16_t conn_handle, uint16_t start_handle, ble_uuid_t const *p_srvc_uuid)); ++ ++ ++/**@brief Initiate or continue a GATT Relationship Discovery procedure. ++ * ++ * @details This function initiates or resumes the Find Included Services sub-procedure. If the last included service has not been reached, ++ * this must be called again with an updated handle range to continue the search. ++ * ++ * @events ++ * @event{@ref BLE_GATTC_EVT_REL_DISC_RSP} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTC_REL_DISC_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. ++ * ++ * @retval ::NRF_SUCCESS Successfully started or resumed the Relationship Discovery procedure. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. ++ */ ++SVCALL(SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, uint32_t, sd_ble_gattc_relationships_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); ++ ++ ++/**@brief Initiate or continue a GATT Characteristic Discovery procedure. ++ * ++ * @details This function initiates or resumes a Characteristic discovery procedure. If the last Characteristic has not been reached, ++ * this must be called again with an updated handle range to continue the discovery. ++ * ++ * @note If any of the discovered characteristics have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with ++ * type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. ++ * ++ * @events ++ * @event{@ref BLE_GATTC_EVT_CHAR_DISC_RSP} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTC_CHAR_DISC_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. ++ * ++ * @retval ::NRF_SUCCESS Successfully started or resumed the Characteristic Discovery procedure. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. ++ */ ++SVCALL(SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, uint32_t, sd_ble_gattc_characteristics_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); ++ ++ ++/**@brief Initiate or continue a GATT Characteristic Descriptor Discovery procedure. ++ * ++ * @details This function initiates or resumes a Characteristic Descriptor discovery procedure. If the last Descriptor has not been reached, ++ * this must be called again with an updated handle range to continue the discovery. ++ * ++ * @events ++ * @event{@ref BLE_GATTC_EVT_DESC_DISC_RSP} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTC_DESC_DISC_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] p_handle_range A pointer to the range of handles of the Characteristic to perform this procedure on. ++ * ++ * @retval ::NRF_SUCCESS Successfully started or resumed the Descriptor Discovery procedure. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. ++ */ ++SVCALL(SD_BLE_GATTC_DESCRIPTORS_DISCOVER, uint32_t, sd_ble_gattc_descriptors_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); ++ ++ ++/**@brief Initiate or continue a GATT Read using Characteristic UUID procedure. ++ * ++ * @details This function initiates or resumes a Read using Characteristic UUID procedure. If the last Characteristic has not been reached, ++ * this must be called again with an updated handle range to continue the discovery. ++ * ++ * @events ++ * @event{@ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTC_READ_UUID_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] p_uuid Pointer to a Characteristic value UUID to read. ++ * @param[in] p_handle_range A pointer to the range of handles to perform this procedure on. ++ * ++ * @retval ::NRF_SUCCESS Successfully started or resumed the Read using Characteristic UUID procedure. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. ++ */ ++SVCALL(SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, uint32_t, sd_ble_gattc_char_value_by_uuid_read(uint16_t conn_handle, ble_uuid_t const *p_uuid, ble_gattc_handle_range_t const *p_handle_range)); ++ ++ ++/**@brief Initiate or continue a GATT Read (Long) Characteristic or Descriptor procedure. ++ * ++ * @details This function initiates or resumes a GATT Read (Long) Characteristic or Descriptor procedure. If the Characteristic or Descriptor ++ * to be read is longer than ATT_MTU - 1, this function must be called multiple times with appropriate offset to read the ++ * complete value. ++ * ++ * @events ++ * @event{@ref BLE_GATTC_EVT_READ_RSP} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTC_VALUE_READ_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] handle The handle of the attribute to be read. ++ * @param[in] offset Offset into the attribute value to be read. ++ * ++ * @retval ::NRF_SUCCESS Successfully started or resumed the Read (Long) procedure. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. ++ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. ++ */ ++SVCALL(SD_BLE_GATTC_READ, uint32_t, sd_ble_gattc_read(uint16_t conn_handle, uint16_t handle, uint16_t offset)); ++ ++ ++/**@brief Initiate a GATT Read Multiple Characteristic Values procedure. ++ * ++ * @details This function initiates a GATT Read Multiple Characteristic Values procedure. ++ * ++ * @events ++ * @event{@ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTC_READ_MULT_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] p_handles A pointer to the handle(s) of the attribute(s) to be read. ++ * @param[in] handle_count The number of handles in p_handles. ++ * ++ * @retval ::NRF_SUCCESS Successfully started the Read Multiple Characteristic Values procedure. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. ++ */ ++SVCALL(SD_BLE_GATTC_CHAR_VALUES_READ, uint32_t, sd_ble_gattc_char_values_read(uint16_t conn_handle, uint16_t const *p_handles, uint16_t handle_count)); ++ ++ ++/**@brief Perform a Write (Characteristic Value or Descriptor, with or without response, signed or not, long or reliable) procedure. ++ * ++ * @details This function can perform all write procedures described in GATT. ++ * ++ * @note It is important to note that a write without response will consume an application buffer, and will therefore ++ * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. A write (with response) on the other hand will use the ++ * standard client internal buffer and thus will only generate a @ref BLE_GATTC_EVT_WRITE_RSP event as soon as the write response ++ * has been received from the peer. Please see the documentation of @ref sd_ble_tx_packet_count_get for more details. ++ * ++ * @events ++ * @event{@ref BLE_GATTC_EVT_WRITE_RSP, Generated when using write request or queued writes.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTC_VALUE_WRITE_MSC} ++ * @mmsc{@ref BLE_GATTC_VALUE_LONG_WRITE_MSC} ++ * @mmsc{@ref BLE_GATTC_VALUE_RELIABLE_WRITE_MSC} ++ * @mmsc{@ref BLE_COMMON_APP_BUFF_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] p_write_params A pointer to a write parameters structure. ++ * ++ * @retval ::NRF_SUCCESS Successfully started the Write procedure. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. ++ * @retval ::NRF_ERROR_BUSY Procedure already in progress. ++ * @retval ::BLE_ERROR_NO_TX_PACKETS No available application packets for this connection. ++ */ ++SVCALL(SD_BLE_GATTC_WRITE, uint32_t, sd_ble_gattc_write(uint16_t conn_handle, ble_gattc_write_params_t const *p_write_params)); ++ ++ ++/**@brief Send a Handle Value Confirmation to the GATT Server. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTC_HVI_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] handle The handle of the attribute in the indication. ++ * ++ * @retval ::NRF_SUCCESS Successfully queued the Handle Value Confirmation for transmission. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no Indication pending to be confirmed. ++ * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle. ++ */ ++SVCALL(SD_BLE_GATTC_HV_CONFIRM, uint32_t, sd_ble_gattc_hv_confirm(uint16_t conn_handle, uint16_t handle)); ++ ++/**@brief Discovers information about a range of attributes on a GATT server. ++ * ++ * @events ++ * @event{@ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, Generated when information about a range of attributes has been received.} ++ * @endevents ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] p_handle_range The range of handles to request information about. ++ * ++ * @retval ::NRF_SUCCESS Successfully started an attribute information discovery procedure. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. ++ */ ++SVCALL(SD_BLE_GATTC_ATTR_INFO_DISCOVER, uint32_t, sd_ble_gattc_attr_info_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * p_handle_range)); ++ ++/**@brief Start an ATT_MTU exchange by sending an Exchange MTU Request to the server. ++ * ++ * @details The SoftDevice sets ATT_MTU to the minimum of: ++ * - The Client RX MTU value, and ++ * - The Server RX MTU value from @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. ++ * ++ * However, the SoftDevice never sets ATT_MTU lower than @ref GATT_MTU_SIZE_DEFAULT. ++ * ++ * @events ++ * @event{@ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP} ++ * @event{@ref BLE_EVT_DATA_LENGTH_CHANGED, Generated if a data length update procedure is performed after the ATT_MTU exchange.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTC_MTU_EXCHANGE} ++ * @endmscs ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] client_rx_mtu Client RX MTU size. ++ * - The minimum value is @ref GATT_MTU_SIZE_DEFAULT. ++ * - The maximum value is @ref ble_gatt_enable_params_t::att_mtu. ++ * - The value must be equal to Server RX MTU size given in @ref sd_ble_gatts_exchange_mtu_reply ++ * if an ATT_MTU exchange has already been performed in the other direction. ++ * ++ * @retval ::NRF_SUCCESS Successfully sent request to the server. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state or an ATT_MTU exchange was already requested once. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid Client RX MTU size supplied. ++ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. ++ */ ++SVCALL(SD_BLE_GATTC_EXCHANGE_MTU_REQUEST, uint32_t, sd_ble_gattc_exchange_mtu_request(uint16_t conn_handle, uint16_t client_rx_mtu)); ++ ++/**@brief Iterate through Handle-Value(s) list in @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. ++ * ++ * @param[in] p_gattc_evt Pointer to event buffer containing @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. ++ * @note If the buffer contains different event, behavior is undefined. ++ * @param[in,out] p_iter Iterator, points to @ref ble_gattc_handle_value_t structure that will be filled in with ++ * the next Handle-Value pair in each iteration. If the function returns other than ++ * @ref NRF_SUCCESS, it will not be changed. ++ * - To start iteration, initialize the structure to zero. ++ * - To continue, pass the value from previous iteration. ++ * ++ * \code ++ * ble_gattc_handle_value_t iter; ++ * memset(&iter, 0, sizeof(ble_gattc_handle_value_t)); ++ * while (sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(&ble_evt.evt.gattc_evt, &iter) == NRF_SUCCESS) ++ * { ++ * app_handle = iter.handle; ++ * memcpy(app_value, iter.p_value, ble_evt.evt.gattc_evt.params.char_val_by_uuid_read_rsp.value_len); ++ * } ++ * \endcode ++ * ++ * @retval ::NRF_SUCCESS Successfully retrieved the next Handle-Value pair. ++ * @retval ::NRF_ERROR_NOT_FOUND No more Handle-Value pairs available in the list. ++ */ ++ ++#ifndef __STATIC_INLINE ++#define __STATIC_INLINE static inline ++#endif ++#if (__LINT__ != 1) ++__STATIC_INLINE uint32_t sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(ble_gattc_evt_t *p_gattc_evt, ble_gattc_handle_value_t *p_iter); ++#endif // #ifdef (__LINT__ != 1) ++ ++ ++#ifndef SUPPRESS_INLINE_IMPLEMENTATION ++ ++__STATIC_INLINE uint32_t sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(ble_gattc_evt_t *p_gattc_evt, ble_gattc_handle_value_t *p_iter) ++{ ++ uint32_t value_len = p_gattc_evt->params.char_val_by_uuid_read_rsp.value_len; ++ uint8_t *p_first = p_gattc_evt->params.char_val_by_uuid_read_rsp.handle_value; ++ uint8_t *p_next = p_iter->p_value ? p_iter->p_value + value_len : p_first; ++ ++ if ((p_next - p_first) / (sizeof(uint16_t) + value_len) < p_gattc_evt->params.char_val_by_uuid_read_rsp.count) ++ { ++ p_iter->handle = (uint16_t)p_next[1] << 8 | p_next[0]; ++ p_iter->p_value = p_next + sizeof(uint16_t); ++ return NRF_SUCCESS; ++ } ++ else ++ { ++ return NRF_ERROR_NOT_FOUND; ++ } ++} ++ ++#endif // #ifndef SUPPRESS_INLINE_IMPLEMENTATION ++ ++/** @} */ ++ ++#ifdef __cplusplus ++} ++#endif ++#endif /* BLE_GATTC_H__ */ ++ ++/** ++ @} ++*/ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers_replacement/nrf_nvic.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers_replacement/nrf_nvic.h +new file mode 100644 +index 0000000..a29d008 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers_replacement/nrf_nvic.h +@@ -0,0 +1,546 @@ ++/* ++ * Copyright (c) Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form must reproduce the above copyright notice, this ++ * list of conditions and the following disclaimer in the documentation and/or ++ * other materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other ++ * contributors to this software may be used to endorse or promote products ++ * derived from this software without specific prior written permission. ++ * ++ * 4. This software must only be used in a processor manufactured by Nordic ++ * Semiconductor ASA, or in a processor manufactured by a third party that ++ * is used in combination with a processor manufactured by Nordic Semiconductor. ++ * ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ++ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ++ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ * ++ */ ++/** ++ * @defgroup nrf_nvic_api SoftDevice NVIC API ++ * @{ ++ * ++ * @note In order to use this module, the following code has to be added to a .c file: ++ * \code ++ * nrf_nvic_state_t nrf_nvic_state = {0}; ++ * \endcode ++ * ++ * @note Definitions and declarations starting with __ (double underscore) in this header file are ++ * not intended for direct use by the application. ++ * ++ * @brief APIs for the accessing NVIC when using a SoftDevice. ++ * ++ */ ++ ++#ifndef NRF_NVIC_H__ ++#define NRF_NVIC_H__ ++ ++#include ++#include "nrf.h" ++ ++#include "nrf_error_soc.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++ ++/**@addtogroup NRF_NVIC_DEFINES Defines ++ * @{ */ ++ ++/**@defgroup NRF_NVIC_ISER_DEFINES SoftDevice NVIC internal definitions ++ * @{ */ ++ ++#define __NRF_NVIC_NVMC_IRQn (30) /**< The peripheral ID of the NVMC. IRQ numbers are used to identify peripherals, but the NVMC doesn't have an IRQ number in the MDK. */ ++ ++#ifdef NRF51 ++ #define __NRF_NVIC_ISER_COUNT (1) /**< The number of ISER/ICER registers in the NVIC that are used. */ ++ ++ /**@brief Interrupts used by the SoftDevice. */ ++ #define __NRF_NVIC_SD_IRQS_0 ((uint32_t)( \ ++ (1U << POWER_CLOCK_IRQn) \ ++ | (1U << RADIO_IRQn) \ ++ | (1U << RTC0_IRQn) \ ++ | (1U << TIMER0_IRQn) \ ++ | (1U << RNG_IRQn) \ ++ | (1U << ECB_IRQn) \ ++ | (1U << CCM_AAR_IRQn) \ ++ | (1U << TEMP_IRQn) \ ++ | (1U << __NRF_NVIC_NVMC_IRQn) \ ++ | (1U << (uint32_t)SWI4_IRQn) \ ++ | (1U << (uint32_t)SWI5_IRQn) \ ++ )) ++ ++ /**@brief Interrupts available for to application. */ ++ #define __NRF_NVIC_APP_IRQS_0 (~__NRF_NVIC_SD_IRQS_0) ++#endif ++ ++#if (defined(NRF52) || defined(NRF52840_XXAA)) ++ #define __NRF_NVIC_ISER_COUNT (2) /**< The number of ISER/ICER registers in the NVIC that are used. */ ++ ++ /**@brief Interrupts used by the SoftDevice. */ ++ #define __NRF_NVIC_SD_IRQS_0 ((uint32_t)( \ ++ (1U << POWER_CLOCK_IRQn) \ ++ | (1U << RADIO_IRQn) \ ++ | (1U << RTC0_IRQn) \ ++ | (1U << TIMER0_IRQn) \ ++ | (1U << RNG_IRQn) \ ++ | (1U << ECB_IRQn) \ ++ | (1U << CCM_AAR_IRQn) \ ++ | (1U << TEMP_IRQn) \ ++ | (1U << __NRF_NVIC_NVMC_IRQn) \ ++ | (1U << (uint32_t)SWI4_EGU4_IRQn) \ ++ | (1U << (uint32_t)SWI5_EGU5_IRQn) \ ++ )) ++ #define __NRF_NVIC_SD_IRQS_1 ((uint32_t)0) ++ ++ /**@brief Interrupts available for to application. */ ++ #define __NRF_NVIC_APP_IRQS_0 (~__NRF_NVIC_SD_IRQS_0) ++ #define __NRF_NVIC_APP_IRQS_1 (~__NRF_NVIC_SD_IRQS_1) ++#endif ++/**@} */ ++ ++/**@} */ ++ ++/**@addtogroup NRF_NVIC_VARIABLES Variables ++ * @{ */ ++ ++/**@brief Type representing the state struct for the SoftDevice NVIC module. */ ++typedef struct ++{ ++ uint32_t volatile __irq_masks[__NRF_NVIC_ISER_COUNT]; /**< IRQs enabled by the application in the NVIC. */ ++ uint32_t volatile __cr_flag; /**< Non-zero if already in a critical region */ ++} nrf_nvic_state_t; ++ ++/**@brief Variable keeping the state for the SoftDevice NVIC module. This must be declared in an ++ * application source file. */ ++extern nrf_nvic_state_t nrf_nvic_state; ++ ++ ++/**@} */ ++ ++#if (__LINT__ != 1) ++ ++/**@addtogroup NRF_NVIC_INTERNAL_FUNCTIONS SoftDevice NVIC internal functions ++ * @{ */ ++ ++/**@brief Disables IRQ interrupts globally, including the SoftDevice's interrupts. ++ * ++ * @retval The value of PRIMASK prior to disabling the interrupts. ++ */ ++__STATIC_INLINE int __sd_nvic_irq_disable(void); ++ ++ ++/**@brief Enables IRQ interrupts globally, including the SoftDevice's interrupts. ++ */ ++__STATIC_INLINE void __sd_nvic_irq_enable(void); ++ ++ ++/**@brief Checks if IRQn is available to application ++ * @param[in] IRQn irq to check ++ * ++ * @retval 1 (true) if the irq to check is available to the application ++ */ ++__STATIC_INLINE uint32_t __sd_nvic_app_accessible_irq(IRQn_Type IRQn); ++ ++ ++/**@brief Checks if IRQn is available to application ++ * @param[in] priority priority to check ++ * ++ * @retval 1 (true) if the priority to check is available to the application ++ */ ++__STATIC_INLINE uint32_t __sd_nvic_is_app_accessible_priority(uint32_t priority); ++ ++ ++/**@} */ ++ ++ ++/**@addtogroup NRF_NVIC_FUNCTIONS SoftDevice NVIC public functions ++ * @{ */ ++ ++/**@brief Enable External Interrupt. ++ * @note Corresponds to NVIC_EnableIRQ in CMSIS. ++ * ++ * @pre IRQn is valid and not reserved by the stack. ++ * ++ * @param[in] IRQn See the NVIC_EnableIRQ documentation in CMSIS. ++ * ++ * @retval ::NRF_SUCCESS The interrupt was enabled. ++ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. ++ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt has a priority not available for the application. ++ */ ++__STATIC_INLINE uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn); ++ ++ ++/**@brief Disable External Interrupt. ++ * @note Corresponds to NVIC_DisableIRQ in CMSIS. ++ * ++ * @pre IRQn is valid and not reserved by the stack. ++ * ++ * @param[in] IRQn See the NVIC_DisableIRQ documentation in CMSIS. ++ * ++ * @retval ::NRF_SUCCESS The interrupt was disabled. ++ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. ++ */ ++__STATIC_INLINE uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn); ++ ++ ++/**@brief Get Pending Interrupt. ++ * @note Corresponds to NVIC_GetPendingIRQ in CMSIS. ++ * ++ * @pre IRQn is valid and not reserved by the stack. ++ * ++ * @param[in] IRQn See the NVIC_GetPendingIRQ documentation in CMSIS. ++ * @param[out] p_pending_irq Return value from NVIC_GetPendingIRQ. ++ * ++ * @retval ::NRF_SUCCESS The interrupt is available for the application. ++ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. ++ */ ++__STATIC_INLINE uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq); ++ ++ ++/**@brief Set Pending Interrupt. ++ * @note Corresponds to NVIC_SetPendingIRQ in CMSIS. ++ * ++ * @pre IRQn is valid and not reserved by the stack. ++ * ++ * @param[in] IRQn See the NVIC_SetPendingIRQ documentation in CMSIS. ++ * ++ * @retval ::NRF_SUCCESS The interrupt is set pending. ++ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. ++ */ ++__STATIC_INLINE uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn); ++ ++ ++/**@brief Clear Pending Interrupt. ++ * @note Corresponds to NVIC_ClearPendingIRQ in CMSIS. ++ * ++ * @pre IRQn is valid and not reserved by the stack. ++ * ++ * @param[in] IRQn See the NVIC_ClearPendingIRQ documentation in CMSIS. ++ * ++ * @retval ::NRF_SUCCESS The interrupt pending flag is cleared. ++ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. ++ */ ++__STATIC_INLINE uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn); ++ ++ ++/**@brief Set Interrupt Priority. ++ * @note Corresponds to NVIC_SetPriority in CMSIS. ++ * ++ * @pre IRQn is valid and not reserved by the stack. ++ * @pre Priority is valid and not reserved by the stack. ++ * ++ * @param[in] IRQn See the NVIC_SetPriority documentation in CMSIS. ++ * @param[in] priority A valid IRQ priority for use by the application. ++ * ++ * @retval ::NRF_SUCCESS The interrupt and priority level is available for the application. ++ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. ++ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt priority is not available for the application. ++ */ ++__STATIC_INLINE uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority); ++ ++ ++/**@brief Get Interrupt Priority. ++ * @note Corresponds to NVIC_GetPriority in CMSIS. ++ * ++ * @pre IRQn is valid and not reserved by the stack. ++ * ++ * @param[in] IRQn See the NVIC_GetPriority documentation in CMSIS. ++ * @param[out] p_priority Return value from NVIC_GetPriority. ++ * ++ * @retval ::NRF_SUCCESS The interrupt priority is returned in p_priority. ++ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE - IRQn is not available for the application. ++ */ ++__STATIC_INLINE uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority); ++ ++ ++/**@brief System Reset. ++ * @note Corresponds to NVIC_SystemReset in CMSIS. ++ * ++ * @retval ::NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN ++ */ ++__STATIC_INLINE uint32_t sd_nvic_SystemReset(void); ++ ++ ++/**@brief Enters critical region. ++ * ++ * @post Application interrupts will be disabled. ++ * @note sd_nvic_critical_region_enter() and ::sd_nvic_critical_region_exit() must be called in matching pairs inside each ++ * execution context ++ * @sa sd_nvic_critical_region_exit ++ * ++ * @param[out] p_is_nested_critical_region If 1, the application is now in a nested critical region. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++__STATIC_INLINE uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region); ++ ++ ++/**@brief Exit critical region. ++ * ++ * @pre Application has entered a critical region using ::sd_nvic_critical_region_enter. ++ * @post If not in a nested critical region, the application interrupts will restored to the state before ::sd_nvic_critical_region_enter was called. ++ * ++ * @param[in] is_nested_critical_region If this is set to 1, the critical region won't be exited. @sa sd_nvic_critical_region_enter. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++__STATIC_INLINE uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region); ++ ++#endif //#if (__LINT__ != 1) ++ ++/**@} */ ++ ++#ifndef SUPPRESS_INLINE_IMPLEMENTATION ++ ++__STATIC_INLINE int __sd_nvic_irq_disable(void) ++{ ++ int pm = __get_PRIMASK(); ++ __disable_irq(); ++ return pm; ++} ++ ++__STATIC_INLINE void __sd_nvic_irq_enable(void) ++{ ++ __enable_irq(); ++} ++ ++ ++__STATIC_INLINE uint32_t __sd_nvic_app_accessible_irq(IRQn_Type IRQn) ++{ ++ if (IRQn < 32) ++ { ++ return ((1UL<= (1 << __NVIC_PRIO_BITS)) ++ { ++ return 0; ++ } ++#ifdef NRF51 ++ if ( priority == 0 ++ || priority == 2 ++ ) ++ { ++ return 0; ++ } ++#endif ++#if (defined(NRF52) || defined(NRF52840_XXAA)) ++ if ( priority == 0 ++ || priority == 1 ++ || priority == 4 ++ || priority == 5 ++ ) ++ { ++ return 0; ++ } ++#endif ++ return 1; ++} ++ ++__STATIC_INLINE uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn) ++{ ++ if (!__sd_nvic_app_accessible_irq(IRQn)) ++ { ++ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; ++ } ++ if (!__sd_nvic_is_app_accessible_priority(NVIC_GetPriority(IRQn))) ++ { ++ return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED; ++ } ++ ++ if (nrf_nvic_state.__cr_flag) ++ { ++ nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] |= (uint32_t)(1 << ((uint32_t)((int32_t)IRQn) & (uint32_t)0x1F)); ++ } ++ else ++ { ++ NVIC_EnableIRQ(IRQn); ++ } ++ return NRF_SUCCESS; ++} ++ ++ ++__STATIC_INLINE uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn) ++{ ++ if (!__sd_nvic_app_accessible_irq(IRQn)) ++ { ++ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; ++ } ++ ++ if (nrf_nvic_state.__cr_flag) ++ { ++ nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] &= ~(1UL << ((uint32_t)(IRQn) & 0x1F)); ++ } ++ else ++ { ++ NVIC_DisableIRQ(IRQn); ++ } ++ ++ return NRF_SUCCESS; ++} ++ ++__STATIC_INLINE uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq) ++{ ++ if (__sd_nvic_app_accessible_irq(IRQn)) ++ { ++ *p_pending_irq = NVIC_GetPendingIRQ(IRQn); ++ return NRF_SUCCESS; ++ } ++ else ++ { ++ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; ++ } ++} ++ ++__STATIC_INLINE uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn) ++{ ++ if (__sd_nvic_app_accessible_irq(IRQn)) ++ { ++ NVIC_SetPendingIRQ(IRQn); ++ return NRF_SUCCESS; ++ } ++ else ++ { ++ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; ++ } ++} ++ ++ ++__STATIC_INLINE uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn) ++{ ++ if (__sd_nvic_app_accessible_irq(IRQn)) ++ { ++ NVIC_ClearPendingIRQ(IRQn); ++ return NRF_SUCCESS; ++ } ++ else ++ { ++ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; ++ } ++} ++ ++__STATIC_INLINE uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority) ++{ ++ if (!__sd_nvic_app_accessible_irq(IRQn)) ++ { ++ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; ++ } ++ ++ if (!__sd_nvic_is_app_accessible_priority(priority)) ++ { ++ return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED; ++ } ++ ++ NVIC_SetPriority(IRQn, (uint32_t)priority); ++ return NRF_SUCCESS; ++} ++ ++ ++__STATIC_INLINE uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority) ++{ ++ if (__sd_nvic_app_accessible_irq(IRQn)) ++ { ++ *p_priority = (NVIC_GetPriority(IRQn) & 0xFF); ++ return NRF_SUCCESS; ++ } ++ else ++ { ++ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; ++ } ++} ++ ++ ++__STATIC_INLINE uint32_t sd_nvic_SystemReset(void) ++{ ++ NVIC_SystemReset(); ++ return NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN; ++} ++ ++ ++__STATIC_INLINE uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region) ++{ ++ int was_masked = __sd_nvic_irq_disable(); ++ if (!nrf_nvic_state.__cr_flag) ++ { ++ nrf_nvic_state.__cr_flag = 1; ++ nrf_nvic_state.__irq_masks[0] = ( NVIC->ICER[0] & __NRF_NVIC_APP_IRQS_0 ); ++ NVIC->ICER[0] = __NRF_NVIC_APP_IRQS_0; ++ #if (defined(NRF52) || defined(NRF52840_XXAA)) ++ nrf_nvic_state.__irq_masks[1] = ( NVIC->ICER[1] & __NRF_NVIC_APP_IRQS_1 ); ++ NVIC->ICER[1] = __NRF_NVIC_APP_IRQS_1; ++ #endif ++ *p_is_nested_critical_region = 0; ++ } ++ else ++ { ++ *p_is_nested_critical_region = 1; ++ } ++ if (!was_masked) ++ { ++ __sd_nvic_irq_enable(); ++ } ++ return NRF_SUCCESS; ++} ++ ++ ++__STATIC_INLINE uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region) ++{ ++ if (nrf_nvic_state.__cr_flag && (is_nested_critical_region == 0)) ++ { ++ int was_masked = __sd_nvic_irq_disable(); ++ NVIC->ISER[0] = nrf_nvic_state.__irq_masks[0]; ++ #if (defined(NRF52) || defined(NRF52840_XXAA)) ++ NVIC->ISER[1] = nrf_nvic_state.__irq_masks[1]; ++ #endif ++ nrf_nvic_state.__cr_flag = 0; ++ if (!was_masked) ++ { ++ __sd_nvic_irq_enable(); ++ } ++ } ++ ++ return NRF_SUCCESS; ++} ++ ++#endif // #ifdef SUPPRESS_INLINE_IMPLEMENTATION ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif // NRF_NVIC_H__ ++ ++/**@} */ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers_replacement/test.rb nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers_replacement/test.rb +new file mode 100644 +index 0000000..f58ae1e +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/headers_replacement/test.rb +@@ -0,0 +1,2 @@ ++a = 'xxx const * const*' ++puts a.gsub('const','') +\ No newline at end of file +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/hex/s132_nrf52_3.0.0_softdevice.hex nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/hex/s132_nrf52_3.0.0_softdevice.hex +new file mode 100644 +index 0000000..126407c +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/hex/s132_nrf52_3.0.0_softdevice.hex +@@ -0,0 +1,7694 @@ ++:020000040000FA ++:1000000000040020E508000079050000C508000094 ++:10001000830500008D05000097050000000000002A ++:1000200000000000000000000000000009090000BE ++:10003000A105000000000000AB050000B5050000B0 ++:10004000BF050000C9050000D3050000DD05000064 ++:10005000E7050000F1050000FB05000005060000B3 ++:100060000F06000019060000230600002D06000000 ++:1000700037060000410600004B0600005506000050 ++:100080005F06000069060000730600007D060000A0 ++:1000900087060000910600009B060000A5060000F0 ++:1000A000AF060000B9060000C3060000CD06000040 ++:1000B000D7060000E1060000EB060000F506000090 ++:1000C000FF06000009070000130700001D070000DD ++:1000D00027070000310700003B070000450700002C ++:1000E0004F07000059070000630700006D0700007C ++:1000F00077070000810700008B07000095070000CC ++:100100009F0700001FB500F003F88DE80F001FBD2A ++:1001100000F0DEBB1FB56FF00100009040100390AF ++:10012000029001904FF010208069000B420900F00E ++:100130001F045DF822300120A04083434DF8223097 ++:10014000684600F044F91FBDF0B54FF6FF734FF459 ++:10015000B4751A466E1E11E0A94201D3344600E080 ++:100160000C46091B30F8027B641E3B441A44F9D14B ++:100170009CB204EB134394B204EB12420029EBD17E ++:1001800098B200EB134002EB124140EA0140F0BD8F ++:10019000DD4992B00446D1E90001CDE91001FF220A ++:1001A0004021684600F03AFB94E80F008DE80F000C ++:1001B000684610A902E004C841F8042D8842FAD12B ++:1001C00010216846FFF7C0FF1090AA208DF8440068 ++:1001D000FFF7A0FF00F0F2F84FF01024A069102202 ++:1001E0006946803000F001F9A069082210A900F0EA ++:1001F000FCF800F0D7F84FF080510A6949690068AF ++:100200004A43824201D8102070470020704710B541 ++:10021000D0E900214FF0805002EB8103026944696C ++:100220006243934209D84FF01022536903EB8103D4 ++:100230000169406941438B4201D9092010BD5069D1 ++:10024000401C01D0002010BD0F2010BD70B501680A ++:100250000446AE4D4FF01020062951D2DFE801F0E0 ++:10026000320318283B1DD4E90265646829463046EC ++:1002700000F0CDF82A462146304600F0B6F8AA0034 ++:100280002146304600F09EFA002800D0032070BDC1 ++:1002900000F050FB4FF4805007E0201DFFF7ABFF4C ++:1002A0000028F4D100F046FB60682860002070BD93 ++:1002B000241D94E80700920000F084FA0028F6D08C ++:1002C0000E2070BD8069401C12D0201DFFF79FFFDB ++:1002D0000028F6D109E08069401C09D0201DFFF7F5 ++:1002E0008AFF0028EDD1606820B12046FFF750FF5B ++:1002F000042070BDFFF70EFF00F060F800F052F828 ++:10030000072070BD10B50C46182802D001200860E7 ++:1003100010BD2068FFF79AFF206010BD4FF0102439 ++:10032000A069401C05D0A569A66980353079AA2846 ++:1003300008D06069401C2DD060690068401C29D03D ++:1003400060692CE010212846FFF7FEFE31688142EB ++:100350001CD1A16901F18002C03105E030B108CAA9 ++:1003600051F8040D984201D1012000E000208A429A ++:10037000F4D158B1286810B1042803D0FEE728460C ++:1003800000F057F861496868086008E000F016F866 ++:1003900000F008F84FF480500168491C01D000F0CB ++:1003A000A3FAFEE7BFF34F8F59480168594A01F499 ++:1003B000E06111430160BFF34F8FFEE74FF0102063 ++:1003C0008169491C02D0806900F0ADB87047524A7B ++:1003D00001681160121D416811604F4A8168103236 ++:1003E0001160111DC068086070472DE9F041174683 ++:1003F0000D460646002406E03046296800F0A6F8BF ++:10040000641C2D1D361DBC42F6D3BDE8F08170B5CD ++:100410000C4605464FF4806608E0284600F083F855 ++:10042000B44205D3A4F5806405F58055002CF4D1C1 ++:1004300070BD4168044609B1012500E000254FF078 ++:1004400010267069A268920000F0BCF9C8B120467D ++:1004500000F01AF89DB17669A56864684FF4002031 ++:1004600084420AD2854208D229463046FFF7CFFFA0 ++:100470002A4621463046FFF7B8FFFFF79FFFFFF7F8 ++:1004800091FFFFF747FEF8E72DE9FF414FF01024F9 ++:10049000616980680D0B01EB800000F6FF70010BB5 ++:1004A00000200090019002900246039068460123CC ++:1004B0000BE0560902F01F0C50F8267003FA0CFCF2 ++:1004C00047EA0C0740F82670521CAA42F1D30AE012 ++:1004D0004A0901F01F0650F8225003FA06F6354388 ++:1004E00040F82250491C8029F2D3A169090B4A091E ++:1004F00001F01F0150F822408B409C4340F82240FD ++:10050000FFF765FFBDE8FF815809000000000020EB ++:100510000CED00E00400FA050006004014480168F4 ++:100520000029FCD07047134A0221116010490B6862 ++:10053000002BFCD00F4B1B1D186008680028FCD056 ++:100540000020106008680028FCD07047094B10B5E7 ++:1005500001221A60064A1468002CFCD00160106861 ++:100560000028FCD00020186010680028FCD010BDC6 ++:1005700000E4014004E5014008208F49096809585A ++:10058000084710208C4909680958084714208A49EF ++:100590000968095808471820874909680958084711 ++:1005A0003020854909680958084738208249096878 ++:1005B000095808473C2080490968095808474020E5 ++:1005C0007D4909680958084744207B49096809584A ++:1005D0000847482078490968095808474C20764957 ++:1005E000096809580847502073490968095808479D ++:1005F0005420714909680958084758206E4909680C ++:10060000095808475C206C49096809580847602068 ++:100610006949096809580847642067490968095801 ++:100620000847682064490968095808476C206249EE ++:1006300009680958084770205F4909680958084740 ++:1006400074205D4909680958084778205A490968A3 ++:10065000095808477C2058490968095808478020EC ++:1006600055490968095808478420534909680958B9 ++:100670000847882050490968095808478C204E4986 ++:1006800009680958084790204B49096809580847E4 ++:10069000942049490968095808479820464909683B ++:1006A000095808479C204449096809580847A02070 ++:1006B0004149096809580847A4203F490968095871 ++:1006C0000847A8203C49096809580847AC203A491E ++:1006D000096809580847B020374909680958084788 ++:1006E000B4203549096809580847B82032490968D3 ++:1006F00009580847BC203049096809580847C020F4 ++:100700002D49096809580847C4202B490968095828 ++:100710000847C8202849096809580847CC202649B5 ++:10072000096809580847D02023490968095808472B ++:10073000D4202149096809580847D8201E4909686A ++:1007400009580847DC201C49096809580847E02077 ++:100750001949096809580847E420174909680958E0 ++:100760000847E8201449096809580847EC2012494D ++:10077000096809580847F0200F49096809580847CF ++:10078000F4200D49096809580847F8200A49096802 ++:1007900009580847FC2008490968095808475FF4C8 ++:1007A0008070054909680958084700000348044952 ++:1007B000024A034B70470000000000206809000057 ++:1007C0006809000040EA010310B59B070FD1042A15 ++:1007D0000DD310C808C9121F9C42F8D020BA19BA0C ++:1007E000884201D9012010BD4FF0FF3010BD1AB171 ++:1007F000D30703D0521C07E0002010BD10F8013BC6 ++:1008000011F8014B1B1B07D110F8013B11F8014BEC ++:100810001B1B01D1921EF1D1184610BD02F0FF033F ++:1008200043EA032242EA024200F005B870477047EB ++:1008300070474FF000020429C0F0128010F0030C42 ++:1008400000F01B80CCF1040CBCF1020F18BF00F8C3 ++:10085000012BA8BF20F8022BA1EB0C0100F00DB872 ++:100860005FEAC17C24BF00F8012B00F8012B48BFD0 ++:1008700000F8012B70474FF0000200B51346944674 ++:100880009646203922BFA0E80C50A0E80C50B1F1E8 ++:100890002001BFF4F7AF090728BFA0E80C5048BFFC ++:1008A0000CC05DF804EB890028BF40F8042B08BF9A ++:1008B000704748BF20F8022B11F0804F18BF00F896 ++:1008C000012B7047014B1B68DB68184700000020B4 ++:1008D00009480A497047FFF7FBFFFFF713FC00BD0B ++:1008E00020BFFDE7064B1847064A1060016881F3F8 ++:1008F0000888406800470000680900006809000097 ++:100900001D030000000000201EF0040F0CBFEFF3D9 ++:100910000881EFF30981886902380078182803D12B ++:1009200000E00000074A1047074A12682C3212689C ++:100930001047000000B5054B1B68054A9B589847B7 ++:1009400000BD000005030000000000205409000065 ++:1009500004000000001000000000000000FFFFFF86 ++:040960000090D00330 ++:1010000048120020D1E001006D9F000041E0010086 ++:101010006D9F00006D9F00006D9F000000000000AC ++:1010200000000000000000000000000029E10100B5 ++:101030006D9F0000000000006D9F00006D9F00008C ++:1010400091E1010097E101006D9F00006D9F00009C ++:101050006D9F00006D9F00006D9F00006D9F000060 ++:101060009DE101006D9F00006D9F0000A3E1010064 ++:101070006D9F0000A9E10100AFE10100B5E10100B1 ++:101080006D9F00006D9F00006D9F00006D9F000030 ++:101090006D9F00006D9F00006D9F00006D9F000020 ++:1010A000BBE10100C1E101006D9F00006D9F0000E8 ++:1010B0006D9F00006D9F00006D9F00006D9F000000 ++:1010C000C7E101006D9F00006D9F00006D9F000053 ++:1010D0006D9F00006D9F00006D9F00006D9F0000E0 ++:1010E0006D9F00006D9F00006D9F00006D9F0000D0 ++:1010F0006D9F00006D9F00006D9F00006D9F0000C0 ++:101100006D9F00006D9F000000F002F81CF0CDFF05 ++:101110000AA090E8000C82448344AAF10107DA4552 ++:1011200001D11CF0C2FFAFF2090EBAE80F0013F0B4 ++:10113000010F18BFFB1A43F001031847BCD501008B ++:10114000DCD501000A4410F8014B14F00F0508BF6C ++:1011500010F8015B240908BF10F8014B6D1E05D083 ++:1011600010F8013B6D1E01F8013BF9D1641E03D05C ++:10117000641E01F8015BFBD19142E4D3704700008B ++:101180000023002400250026103A28BF78C1FBD890 ++:10119000520728BF30C148BF0B6070471FB500F031 ++:1011A0003DF88DE80F001FBD1EF0040F0CBFEFF3DC ++:1011B0000880EFF30980014A10470000BF9D00003E ++:1011C0008269034981614FF00100104470470000BB ++:1011D000D511000001B41EB400B511F043F901B4FB ++:1011E0000198864601BC01B01EBD0000F0B4404627 ++:1011F000494652465B460FB402A0013001B506488D ++:10120000004700BF01BC86460FBC80468946924617 ++:101210009B46F0BC70470000091100001CF042BF63 ++:1012200070B51C4C054608202070A01C00F065F825 ++:101230005920A08029462046BDE8704007F01CB820 ++:1012400010B507F024F813490020891E087010BD5E ++:1012500070B50C460F49891E097829B1A0F16001CB ++:10126000532906D3012011E0602802D043F2010087 ++:101270000CE020CC084E94E80E0006EB8000A0F5B0 ++:101280008050241FD0F8806E2846B047206070BD83 ++:10129000012070470A00002014E2010010B5044646 ++:1012A0000021012000F03FF80021182000F03BF859 ++:1012B00000210B2000F037F80421192000F033F84A ++:1012C00004210D2000F02FF804210E2000F02BF84F ++:1012D00004210F2000F027F80421C84300F023F870 ++:1012E0000721162000F01FF80721152000F01BF839 ++:1012F0002046FFF795FF002010BD8C21018070472C ++:10130000FFF79EBF10487047104A10B514680F4B86 ++:101310000F4A08331A60FFF79BFF0C48001D04605A ++:1013200010BD704770474907090E002806DA00F023 ++:101330000F0000F1E02080F8141D704700F1E0205C ++:1013400080F800147047000003F9004310050240C4 ++:101350000100000130B5F74D044610280AD0112CC9 ++:1013600006D02846122C817806D0132C08D0FFDF37 ++:10137000AC7030BDFFDFFBE71129F9D0FFDFF7E7E5 ++:101380001129F5D0FFDFF3E770B50FF05AFA0446E4 ++:1013900010F030FE201AC4B206200DF02DFC0546D8 ++:1013A00006200DF031FC2E1A07200DF025FC054615 ++:1013B00007200DF029FCDF49281A321888781228F6 ++:1013C0000DD000231A4413280BD0002002440878C3 ++:1013D000022808D000201044201AC0B270BD01239A ++:1013E000F0E70120F2E70120F5E7D24800B50079E7 ++:1013F000D049420897B051F8050F89880CD01722C0 ++:101400008DF80020CDF80200ADF806100BA9684653 ++:101410000AF02BFF17B000BD4022F1E702210DF0CA ++:1014200040BC2DE9F04196B01D4690460E46074659 ++:10143000FFF7F4FF04000BD02078222804D3A07F0C ++:10144000C0F34010A84206D1082016B0BDE8F081D4 ++:1014500043F20200F9E745208DF80000ADF8027074 ++:101460003DB101208DF804008DF805608DF80680EF ++:1014700002E000208DF804000BA968460AF0F5FE92 ++:10148000A07F65F34510A0770020DEE730B5044665 ++:10149000A1F120000D460A284AD2DFE800F0050736 ++:1014A0000C1C2328353A3F44FFDF42E020782028F7 ++:1014B0003FD1FFDF3DE09F480178032939D0807894 ++:1014C000132836D02078242833D0252831D023285B ++:1014D0002FD0FFDF2DE0207822282AD0232828D8FB ++:1014E000FFDF26E02078222823D0FFDF21E02078CC ++:1014F00022281ED024281CD026281AD0272818D00D ++:10150000292816D0FFDF14E02078252811D0FFDF2E ++:101510000FE0207825280CD0FFDF0AE0207825286E ++:1015200007D0FFDF05E02078282802D0FFDF00E0A9 ++:10153000FFDF257030BD30B50B8840F67B444FF699 ++:10154000FF72022801D0934204D09D1FA54224D2ED ++:10155000022802D04D88954203D04D88AD1FA54288 ++:101560001BD24C88A34218D88B88B3F5FA7F14D2CB ++:10157000022802D0C888904205D0C88840F6774536 ++:101580000A38A84209D2C888904208D0944206D0AE ++:101590005B1C6343B3EB800F01DB072030BD0020F1 ++:1015A00030BD70B514460D46064611F0C9F960B954 ++:1015B0000DB1A54201D90C2070BD002409E000BF87 ++:1015C00056F8240011F0BCF908B1102070BD641C5D ++:1015D000E4B2AC42F4D3002070BDF0B50024059D08 ++:1015E00010B1A94203D851E009B90020F0BD09208B ++:1015F000F0BD055D8DB107197E78112E3FD00FDC4F ++:101600000A2E3CD2DFE806F03B1624242A2A2C2C92 ++:101610003333025D72BB641CE4B28C42F9D3E4E75D ++:101620001D2E2CDAA6F11206042E28D2DFE806F0D1 ++:1016300027271018022DDAD1BD781D70072D01D291 ++:101640006D0701D40A20F0BD157845F0010515E0BD ++:10165000EE43F60707E0012D07D010E00620F0BDAD ++:101660002E07A6F18056002EF5D06046F0BD157805 ++:10167000AE0701D50B20F0BD45F002051570055DE4 ++:10168000641C2C44E4B28C4202D9B0E74FF4485CAD ++:101690008C42AED3A9E710B50278540809D00122D4 ++:1016A00043F20223012C07D0022C0DD0032C13D1BE ++:1016B0000FE00020087005E080790324B4EB901F50 ++:1016C0000AD10A70002010BD8079B2EB901F03D1BF ++:1016D000F7E780798009F4D0184610BD154A917B50 ++:1016E00039B1D17B022908D0032908D043F2022066 ++:1016F00070470146101D01F03FBB032100E00121AE ++:1017000001700020704738B50C460546694601F067 ++:1017100033FB00280DD19DF80010207861F34700BD ++:10172000207055F8010FC4F80100A888A4F805003E ++:10173000002038BDB401002038B51378C0B10228AC ++:1017400016D0F6A46D46246800944C7905EB9414E9 ++:10175000247864F34703137003280ED003F0FE00CF ++:1017600010700868C2F801008888A2F8050038BD2A ++:1017700023F0FE0313700228EED1D8B240F001002E ++:10178000EEE730B50C46097897B0222902D208203E ++:1017900017B030BD28218DF80010ADF80200132AD3 ++:1017A00003D03B2A01D00720F2E78DF804200BA9D3 ++:1017B00068460AF05AFD050003D121212046FFF7B3 ++:1017C00065FE2846E4E700B597B023218DF80010A8 ++:1017D000ADF802001088ADF804005088ADF806009E ++:1017E000D088ADF80A009088ADF808000020ADF868 ++:1017F0000C00ADF80E000BA968460AF036FD09E6AC ++:101800002DE9FF470220C64E8DF804000027708A9C ++:10181000ADF80600B84643F202094DE001A80DF00C ++:10182000AAF9050006D0708AA8B3A6F81280ADF810 ++:1018300006803FE0039CA07F01072DD504F1240022 ++:101840000090A28EBDF80800214604F1360301F095 ++:10185000A2FF050005D04D452BD0112D3DD0FFDF57 ++:101860003BE0A07F20F00800A077E07F810861F3D3 ++:101870000000C10861F34100E07794F8210000F016 ++:101880001F0084F820002078282827D1292120460D ++:10189000FFF7FCFD22E015E040070BD5BDF808007E ++:1018A000214604F10E02FFF78EFF05000DD04D45D5 ++:1018B00010D100257F1CFFB202200DF09DF9401CC5 ++:1018C000B842ABD8052D12D008E0A07F20F004006C ++:1018D000A07703E0112D00D0FFDF0025BDF8060042 ++:1018E0007082052D05D0284604B0BDE8F087A6F823 ++:1018F00012800020F8E72DE9F047040000D1FFDF57 ++:101900002078874E20F00F00801C20F0F00070300F ++:10191000207060680178091F1429E6D2DFE801F021 ++:10192000F00A0B4FEF0B0CEFEF36F00B0BF074F0EF ++:101930000B0BF0F0FFDFD8E787883846FFF76EFD26 ++:10194000050000D1FFDF6078212140F008006070C1 ++:10195000707C40F0040070742846FFF797FD38460D ++:1019600007F0C2FA384603F092FF384605F01DF83A ++:101970003946022010F0A1FFA87F20F01000A877C0 ++:10198000FFF73EFF0028B0D0FFDFAEE7858828468E ++:10199000FFF744FD00B9FFDF60688078012800D0C0 ++:1019A000FFDF60688179284607F00EFC00289CD094 ++:1019B000617841F0080161706168C88095E78688A8 ++:1019C0003046FFF72BFD050000D1FFDF6078314680 ++:1019D00040F0080060706068C088288160680089F5 ++:1019E000688160684089A881022010F066FF0020AD ++:1019F000A875A87F00F0030002289CD1FFF700FF24 ++:101A0000002898D0FFDF70E780783C2803D00025BD ++:101A100002280AD000E00125002720B13C2802D08E ++:101A2000022800D0FFDF17B1A3E00127F5E76078B7 ++:101A3000002D40F008006070707C40F00800707469 ++:101A40006BD165680221B5F80480AD1C4746384665 ++:101A50000DF01EF90446032138460DF019F98246AF ++:101A6000052138460DF014F98146042138460DF061 ++:101A70000FF9074604B9FFDFBAF1000F00D1FFDF0D ++:101A8000B9F1000F00D1FFDF07B9FFDF22212046A7 ++:101A9000FFF7FCFC2879012833D00227A07F06211C ++:101AA00067F30100A077288B2081688B6081A88B69 ++:101AB000A08105F1120001F096F920B36879800742 ++:101AC00000D5FFDF6979E07D61F34700E075D5F867 ++:101AD0000600A0616889A083062105F10C0001F0D1 ++:101AE00082F9F8B130794108607861F3470060709D ++:101AF000D6F80500C4F80200B6F809001BE045E07E ++:101B000049E00127CAE7E07D20F0FE00801CE07577 ++:101B1000D5F81200A061E88ADDE71DE00302FF01AD ++:101B2000B4010020607820F0FE00801C6070E8683E ++:101B3000C4F80200288AE080FE48007884F8220079 ++:101B4000A07F00F00301404607F0C0F9012F03D049 ++:101B5000022F0ED0FFDFC8E63078032800D0FFDF69 ++:101B60000021084610F0A9FEBDE8F047012001F071 ++:101B7000DDB8B078132800D0FFDF0021072010F077 ++:101B80009CFEBDE8F0471120FFF7E4BB2046BDE80E ++:101B9000F04702F0D3B8607840F008006070A4E627 ++:101BA0002DE9F04705460078914600270209DFF845 ++:101BB00088A30C463E46012A75D000214FF6FF70DF ++:101BC000022A71D0072A0AD00A2A6ED0FFDF00BF8E ++:101BD000A9F800600CB127806680002085E6D5F862 ++:101BE00004C004F1080204F118089CF80060361FD4 ++:101BF000142E5AD2DFE806F09859594559590A5916 ++:101C0000593C5A5959C263FA59594DE811270926C6 ++:101C1000002C7CD0BCF80480A4F80480686880792B ++:101C200020729AF81110404621F004018AF8111030 ++:101C300004210DF048F8052140460DF044F800213C ++:101C400040460DF040F8012140460DF03CF80321DC ++:101C500040460DF038F8022140460DF034F80621D8 ++:101C600040460DF030F8072140460DF02CF8AFE764 ++:101C700001270926F4B3BCF80400A08068688079C5 ++:101C80000FE012271026BCF80400214601F08CF862 ++:101C90009EE71C2709266CB3BCF80200A080686888 ++:101CA0000079207294E7B5E0DFE004E11B27092604 ++:101CB00004B30420207268684088A08088E79CF8FC ++:101CC00002003C2826D0102718260CF1020C8CB1FB ++:101CD000BCF80200A080BCF818006082BCF81800B4 ++:101CE0002082BCF81A00A082BCF81C00E0829CF89C ++:101CF000050000E00BE00CF10601FFF71DFD9CF86C ++:101D0000040010B10120E07309E00220FBE7A9F80C ++:101D1000006062E71B270926002CF8D021729AF890 ++:101D2000111021F00801B2E01D273726002CEED05B ++:101D3000A08069680879491DFFF7FEFC686890F883 ++:101D40002B00A0756868C0780428E07D13D020F0CF ++:101D50000100E07569681F22C97861F34200E075EF ++:101D60006968C97A61F3C700E075696840460C315B ++:101D70001CF09AF82CE740F00100EAE71D2737260F ++:101D8000002CC4D0A0806968481D0B790146184614 ++:101D9000FFF7D2FC696804F10F0201F10C00CB7A65 ++:101DA00001461846FFF7C8FC6868807CA075686823 ++:101DB000C178E07D61F3420020F0F900E0751F2159 ++:101DC00040461CF00AF903E720271026002C9ED07D ++:101DD000A080686804F10902407A20726968CB1C0F ++:101DE00088781946FFF7A8FCF2E6FFE704271026DB ++:101DF000002C8CD0BCF80200A0806868808820810C ++:101E00006868C088608168680089A08168684089C6 ++:101E1000E081DDE6287A012803D0022814D0FFDF14 ++:101E2000D6E61F271026002CABD06888A0806889D2 ++:101E30002081A8896081E889A081288AE0819AF8B8 ++:101E4000111021F0200122E012271026688800F0EE ++:101E5000ABFF002C95D0687800F00700032889D1EB ++:101E60009AF8111021F0020111E02A7A062A29D2EB ++:101E7000DFE802F00310102121211B270926002C86 ++:101E8000A5D0A08021729AF8111021F001018AF8E2 ++:101E900011109DE61B270926002C98D0A080287AD7 ++:101EA000012806D0032020729AF8111021F01001A9 ++:101EB000EDE70220F7E74A4621462846BDE8F0470D ++:101EC00002F0B7B8FFDF83E610B51B4896B0807804 ++:101ED000132802D0082016B010BD22208DF8000073 ++:101EE0000BA968460AF0C1F904460021072010F04A ++:101EF000E4FC2046EFE700B50F4897B08078122841 ++:101F000001D008207BE41E208DF8000000208DF811 ++:101F100002008DF803000BA968460AF0A6F9002814 ++:101F2000F0D10021072010F0C8FC1120FFF712FAB1 ++:101F3000002064E410000020B401002000B5F9483E ++:101F400097B00078012814D01B208DF800000020E5 ++:101F50008DF802000BA968460AF087F9002807D11E ++:101F60000021084610F0A9FC012000F0DFFE00204F ++:101F700045E4082043E42DE9F041EA4C002740B154 ++:101F800002281DD0072842D0082800D0FFDFBDE876 ++:101F9000F081FFF7D3FF0028F9D106F0B4F800284C ++:101FA000F5D0017821F00F01891C21F0F0012031DA ++:101FB0000170077206F087F8607C40F001001DE0B8 ++:101FC0008EB23046FFF72AFA050000D1FFDF2878ED ++:101FD0002128DCD006F097F890B1017821F00F01AC ++:101FE000891C21F0F001103101700221017246803C ++:101FF000AF7506F068F8607C40F002006074C6E7D8 ++:1020000029463046BDE8F0411322FFF7BABBA57858 ++:10201000122D03D0132D04D0FFDFB8E7FFF76BFFBD ++:1020200001E0FFF751FF0028B1D106F06CF800285D ++:10203000ADD0017821F00F01891C21F0F001203191 ++:102040000170122D07D00221017206F03CF8607C6D ++:1020500040F01000D2E70121F6E72DE9F0411446E7 ++:102060000D00074600D1FFDF2878012803D00228A1 ++:1020700021D0FFDF8BE73846FFF7D0F9060000D10B ++:10208000FFDF0220B075207820F00F00801C20F0C8 ++:10209000F00010302070607840F008006070286810 ++:1020A000A0606868E060288920829E48417C41F0F9 ++:1020B000200141746BE73846FFF7B0F9060000D104 ++:1020C000FFDF69884FF6FF70814209D1AA888242FA ++:1020D00006D131463846BDE8F0411322FFF751BB27 ++:1020E000814201D1A88898B1207820F00F00801C8F ++:1020F00020F0F00010302070607840F00800607030 ++:102100002868A0606868E06028892082002006E0D6 ++:10211000782300223946022010F032FB0120B075EE ++:1021200035E730B5054697B00C46084610F008FC78 ++:1021300080BB00200121203D072D6ED2DFE805F095 ++:1021400004264145515D67000021082010F08EFBF8 ++:1021500010B1112017B030BD24208DF80000D4F844 ++:102160000200CDF80200A0798DF806000BA96846A0 ++:102170000AF07BF8050056D10823002211461846C4 ++:1021800010F0FEFA08284ED0FFDF4CE0606810F037 ++:1021900019FC08B11020DDE748208DF800002088E8 ++:1021A000ADF802006088ADF804000BA968460AF09B ++:1021B0005CF8050037D1606880B3BDF8301001804D ++:1021C00031E0206802F0D6F909E049220AE000BFB8 ++:1021D0008DF802100CE000BF8DF8020008E0054603 ++:1021E00021E042228DF800202278D207F4D0EFE7D8 ++:1021F0000BA968460AF039F8F1E738208DF800009D ++:102200002088ADF802006088ADF80400F0E720787F ++:1022100028B1A0F11B01E12902D3072503E01B200F ++:10222000414900250870284694E730B5054697B027 ++:102230000C46084610F0A8FB08B110208AE7202DB4 ++:1022400007D0212D25D0222D23D0232D21D00720CA ++:1022500080E72088FFF7E2F820B10078222804D236 ++:10226000082077E743F2020074E725208DF800008C ++:102270002088ADF802000BA9684609F0F6FF002897 ++:10228000DCD1DDF83210C4F802109DF83610A171CF ++:1022900060E706205EE72348001D70472149087467 ++:1022A00070472048007C00F00100704738B51421C9 ++:1022B0001C481BF070FE012000F038FD1120FFF7D4 ++:1022C00049F81949FB20174C0870611D684605F054 ++:1022D000E2FF9DF80010207961F3470020F0010033 ++:1022E00020710020A0734FF46170A0810220E07380 ++:1022F000FFF77BF800B1FFDF00F08EFE01F0D9FCA4 ++:1023000038BD10B50C463E2120461BF044FEA07F90 ++:1023100020F00300A077202020700020A07584F812 ++:10232000230010BDB40100201000002070477CB5D0 ++:10233000054610F005FB08B110207CBDFE4C211DA8 ++:1023400060680090A06801902846FFF7DCF900283B ++:10235000F3D1FFF74AF80028EFD000996160BDF88B ++:10236000041021819DF80610A1727CBD10B50446B1 ++:1023700010F00AFB08B11020D3E7EF492246087994 ++:10238000491D4008FFF7D8F90020CAE72DE9F047BA ++:102390009CB00D4604004FF0000812D00822FFF751 ++:1023A00000F900281CD1002609E000BF54F82600DF ++:1023B00004A9FFF770F9002812D1761CF6B2AE42DC ++:1023C000F4D32F460A2006AD0DF1440A8DF818000B ++:1023D00026465146284609F048FF20B143F2032023 ++:1023E0001CB0BDE8F0874046DFF84C8388F8030056 ++:1023F0002EB300244FF00B091DE000BF56F8240057 ++:1024000005A9FFF748F900B1FFDF9DF81400A87097 ++:1024100056F8240050F8011FC5F803108088A5F86D ++:10242000070085F800905146284609F01EFF00B1CC ++:10243000FFDF641CE4B2BC42E0D388F803700020E4 ++:10244000CEE72DE9F0479EB01546894604001ED020 ++:102450000F4608222946FFF7A4F8002811D10026CC ++:1024600013E000BF54F8260005A9103000F084FCEA ++:10247000002806D13FB157F8260010F061FA10B1DC ++:1024800010201EB0ADE7761CF6B2AE42EAD30026AD ++:10249000A5F101081CE000BF06F1010A0AF0FF07E0 ++:1024A00012E000BF54F82600017C4A0854F82710B7 ++:1024B0000B7CB2EB530F05D10622113011311BF00A ++:1024C000C7FCC0B17F1CFFB2AF42EBD30AF0FF06DE ++:1024D0004645E1DBC8462F46342007AD0DF14809DB ++:1024E0008DF81C0026464946284609F0BEFE28B154 ++:1024F00043F20420C5E743F20520C2E796B3002467 ++:102500002CE000BF56F82400A91C103000F034FC69 ++:1025100000B1FFDF56F82400102250F8111FC5F853 ++:1025200003108088A5F8070056F8241005F109006B ++:102530001BF0BAFCB8F1000F15D058F82410102287 ++:1025400005F119001BF0B0FC3220287049462846DE ++:1025500009F08BFE00B1FFDF641CE4B2BC42D1D3B2 ++:10256000012206E004E005F1190001F0F7FFEBE7B6 ++:1025700000224946284600F02AFC002081E770B579 ++:1025800096B0044610F0DCF918B9606810F023FA30 ++:1025900010B1102016B070BD60884AF2B8118842A0 ++:1025A00005D82078644D6E4618B1012804D0072064 ++:1025B000F0E7FEF71AFF1AE06078022804D003283B ++:1025C00002D043F20220E5E7E87317208DF80000FF ++:1025D000E97B0020CDF80200ADF80600022932D0D8 ++:1025E00003292DD0FFDF0BA9684609F03EFE002825 ++:1025F000D0D1606801F0A5FF207870B101208DF87E ++:102600000200F01C01F0AAFF4B208DF800000BA97E ++:10261000684609F02AFE00B1FFDF6088A8B1A881F2 ++:1026200080B2ADF8020030208DF800000BA968469A ++:1026300009F01BFE00B1FFDF2078A8730020A9E796 ++:102640008DF80700CFE74020FAE74FF46170E6E726 ++:1026500010B5044610F098F920B9606838B110F050 ++:10266000B1F908B110205CE6606801F077FF3248EC ++:1026700081896180C17B6170807B2070002050E681 ++:102680002DE9F0419CB0054600208DF864008DF8DE ++:1026900060008DF830008DF868001E4614468846AC ++:1026A000284610F098F918B9204610F094F910B1A6 ++:1026B00010201CB06BE455EA040018D01F270CABA7 ++:1026C00019AA414628460097FEF787FF0028F0D157 ++:1026D0001AAB18AA314620460097FEF77EFF002865 ++:1026E000E7D19DF86000C00703D00A20E1E707208A ++:1026F000DFE701AF7DB11A208DF804008DF8068068 ++:1027000042462946F81C1BF0CFFB0DA901A809F091 ++:10271000ACFD0028CDD194B120208DF804008DF8B7 ++:10272000066032462146F81C1BF0BEFB0DA901A82D ++:1027300009F09BFD002801E0B4010020B9D1FF4958 ++:102740009DF8300048700020B3E72DE9F0439BB0BE ++:102750004FF00008FAA104468DF83480D1E9000159 ++:10276000CDE91901204610F0EBF890B92078012846 ++:1027700003D1606810F0E4F858B9F04D4FF001094A ++:10278000A87B50B1E87B022807D1606810F023F9DC ++:1027900018B110201BB0BDE8F0832878012801D0C3 ++:1027A0000820F7E707200CF02FFA18B9207848B175 ++:1027B000012807D0FEF7E8FD30B1687C10F00C0F5F ++:1027C00008D103E01220E5E71320E3E7C10701D1B8 ++:1027D000800701D51120DDE7608943F6E172A0F1A1 ++:1027E00020019142217807D301297CD100287AD198 ++:1027F000A189002977D10FE0022901D0032901D155 ++:10280000A02870D3012907D06978C90704D0A1890D ++:10281000002968D0B42966D8217831B1012908D0BF ++:10282000022904D003295ED10AE0002609E002262D ++:1028300007E008B9A08908B1042609E0012607E0ED ++:102840000326A87B50B1E87B022807D1606828B135 ++:102850000DA96068FEF71FFF00289BD1207A30B1D8 ++:10286000012806D0022806D003286DD105E00027F4 ++:1028700004E0012702E0022700E003270EB1022E48 ++:102880000ED16FB1E87870B36878800702D043F258 ++:1028900001207FE7022E03D1022F55D0032F53D002 ++:1028A00018208DF838006089ADF83A006089ADF8DD ++:1028B0003C008DF83E600DF13F00FEF70FFF00B1C8 ++:1028C000FFDF9DF834008DF840002078012806D005 ++:1028D000A87B68B1E87B02280AD1606840B16068D3 ++:1028E00050F8011F00E02FE0CDF84110808802E091 ++:1028F0004046CDF84180ADF845008DF84870A07B8A ++:10290000C0F34002014662F35F01C0F3800041EA78 ++:10291000800019A9085C8DF84700A8B169460EA887 ++:1029200009F0A3FC0028B4D11B208DF838008DF8E5 ++:102930003A9069460EA809F098FC0028A9D19DF8A4 ++:1029400001001B2819D101E0072023E7052E09D239 ++:10295000DFE806F0030305050300032000E0022082 ++:1029600000F0E4F9012E0AD0A08940B100228300D2 ++:10297000114610460FF004FF08B103200AE70020BB ++:1029800008E72DE9FC4107460D460326084610F0EE ++:1029900022F8002864D13846FEF740FD040005D037 ++:1029A0002078222805D20820BDE8FC8143F20200ED ++:1029B000FAE7A07F00F0030C2DB129466046FEF730 ++:1029C000BAFD0600F0D15D48BCF1010F05D0BCF1A5 ++:1029D000020F17D0FFDF3046E6E7A27D2946012A25 ++:1029E00002D0407C800701D51120DDE729B9684677 ++:1029F00000F01FFC0028D7D16946384606F067FB77 ++:102A00000646E8E7A17D022914D1407C800611D456 ++:102A100025B1A07F40070BD4002100E001213846FA ++:102A200006F09DFB0600D6D1A075002DD3D002E0A4 ++:102A30001126D0E7A5B12A4621463846FEF7C3FE47 ++:102A400006461128C7D1A07F4107C4D4296844F89D ++:102A50000E1F6968616040F0040020740026BAE728 ++:102A60001020A1E770B50C460546FEF7D7FC010023 ++:102A700005D022462846BDE87040FEF782BE43F2EC ++:102A8000020070BD00B597B03F218DF800108DF8A1 ++:102A900002000BA9684609F0E8FB17B000BD01234E ++:102AA000FEF7BFBC00231A461946FEF7BABC30B584 ++:102AB00097B004460FF044FF10B1102017B030BD9E ++:102AC000204600F047F90028F8D11C4DA8781128BD ++:102AD00001D00820F2E7FEF757FC20B1687CC00661 ++:102AE00003D51120EAE71320E8E72078800701D515 ++:102AF000E87848B31D208DF800002078022200F00D ++:102B000001008DF802006088ADF80400A088ADF8DF ++:102B100006002078C0F3400102EA500001438DF81E ++:102B2000091002A8FEF7DAFD00B1FFDF0BA9684625 ++:102B300009F09BFB0028C1D11E2006E0B401002053 ++:102B4000070605040302010017E08DF800000120CC ++:102B50008DF8020000208DF803000BA9684609F0EB ++:102B600084FB0028AAD1E08800F010F90400A5D168 ++:102B70001220FEF7EFFB2046A0E707209EE7F0B506 ++:102B800097B015460C4607460FF025FF38B920468A ++:102B90000FF0D6FE18B928460FF0D2FE10B1102063 ++:102BA00017B0F0BD974E707C10F0180F01D14007A0 ++:102BB00001D51120F4E7204600F0CCF80028EFD131 ++:102BC00029460220FEF7B7FC0028E9D1B078112889 ++:102BD00003D0122801D00820E2E72078C0F340019A ++:102BE000394311D0800700D577B906200CF00CF8D6 ++:102BF00040B12078800701D5F07828B1B07812284C ++:102C000004D007E01220CBE70720C9E7FFF773F9EC ++:102C10000028C5D1FEF7B8FB022801D21320BFE778 ++:102C200021208DF800006088ADF80200A088ADF882 ++:102C300004002078C0F340008DF80600207880075B ++:102C400016D43878420808D0012A18D043F202215D ++:102C5000022A18D0032A18D115E0C00700D002209C ++:102C60008DF8070057F8010F0290B888ADF80C00F6 ++:102C70000DF10E00FEF732FD58B1032090E7C007BA ++:102C800005D00320ECE7C00701D0084688E7012003 ++:102C9000E6E72888ADF810006888ADF81200A8882B ++:102CA000ADF81400E888ADF816000020ADF8180063 ++:102CB000ADF81A000BA9684609F0D7FA00288BD1A5 ++:102CC000E08800F063F8040086D11320FEF742FB91 ++:102CD000204665E730B5054697B00C4608460FF02C ++:102CE00053FE08B11020E9E62846FEF797FB38B1FD ++:102CF0000178222902D3807F800604D40820DDE6F3 ++:102D000043F20200DAE613208DF80000ADF802501D ++:102D10000BA9684609F0A9FA0028E4D19DF9321000 ++:102D20007F2901D02170C9E60520C7E630B5354DB1 ++:102D3000040008D0012C04D0022C06D0032C04D0AF ++:102D4000FFDF2C7030BDFFDFFBE728780128F8D0CB ++:102D5000FFDFF6E7418843F6FD730A1F9A4209D266 ++:102D60008088042806D3B0F5804F03D8884201D864 ++:102D700000207047072070470278520804D0012ACB ++:102D800002D043F202207047FEF785BC10B548B16F ++:102D900083000022114607200FF0F2FC072801D023 ++:102DA000032060E400205EE470B50C0006460DD000 ++:102DB000FEF734FB050000D1FFDFA68028892081C3 ++:102DC000288960816889A081A889E08170BD10B5DB ++:102DD00002F0010282703122027009F046FA0028E6 ++:102DE00000D0FFDF3FE410B500231A4603E0845C07 ++:102DF0002343521CD2B28A42F9D30BB1002032E4F1 ++:102E0000012030E4B40100204FF0E0224FF40041F3 ++:102E10000020C2F880112049087020499002086003 ++:102E2000704730B51C4D04462878A04218BF002CCE ++:102E300002D0002818BFFFDF2878A04208BF30BDAD ++:102E40002C701749154A0020ECB1164DDFF858C018 ++:102E5000131F012C0DD0022C1CBFFFDF30BD0860FA ++:102E600003200860CCF800504FF400001060186098 ++:102E700030BD086002200860CCF800504FF0407070 ++:102E80001060186030BD086008604FF0607010601E ++:102E900030BD00B5FFDF00BD1A00002008F501407D ++:102EA00000F500401C03002014F50040094810B54F ++:102EB00004680A49084808600EF0FDF908480460F3 ++:102EC00010BD0849002008604FF0E0210220C1F841 ++:102ED0008002704710050240010000011805024001 ++:102EE00014050240FC1F004010B50D2000F06FF8E3 ++:102EF000C4B26FF0040000F06AF8C0B2844200D09F ++:102F0000FFDF3A490120086010BD70B50D2000F0C8 ++:102F100048F8374C0020C4F800010125C4F80453D8 ++:102F20000D2000F049F825604FF0E0216014C1F851 ++:102F3000000170BD10B50D2000F033F82C480121C0 ++:102F400041600021C0F80011BDE810400D2000F0E4 ++:102F500033B8284810B50468264927480831086066 ++:102F60002349D1F80001012804D0FFDF2148001DCA ++:102F7000046010BD1D48001D00680022C0B2C1F8E9 ++:102F800000210FF0A8F9F1E710B51948D0F80011A9 ++:102F90000029FBD0FFF7DDFFBDE810400D2000F059 ++:102FA0000BB800F01F02012191404009800000F1A0 ++:102FB000E020C0F88011704700F01F02012191400D ++:102FC0004009800000F1E020C0F88012704700281E ++:102FD00006DA00F00F0000F1E02090F8140D03E095 ++:102FE00000F1E02090F800044009704704D500404B ++:102FF00000D00040100502400100000170477047FA ++:1030000018FFFFFFDBE5B15100F001008C00FFFF6E ++:1030100084000000C0C62D00FE4800210160416010 ++:1030200070472DE9F743044692B091460120FFF71F ++:1030300035F960680FF0C6FC58B160680FF0CBFC42 ++:1030400038B9607800F00300022802D10020FFF7B1 ++:1030500025F94D4648460FF073FC18B1102015B005 ++:10306000BDE8F08329460120FEF765FA0028F6D175 ++:1030700001258DF842504FF4C050ADF840000022B9 ++:1030800010A9284603F035FF0028E8D18DF84250FA ++:103090004FF42850ADF8400000261C2168460796E2 ++:1030A0001AF09BFF9DF81C0007AF20F00F00401C9A ++:1030B00020F0F00010308DF81C0020788DF81D00F5 ++:1030C00061789DF81E000DF1400861F3420040F068 ++:1030D00001008DF81E009DF8000008AA40F00200D3 ++:1030E0008DF800002089ADF83000ADF832606089BD ++:1030F000ADF834000B9760680E900AA9CDF82880CF ++:10310000684603F0F5FC0028A9D1C24CBDF82000A8 ++:1031100008AA20808DF8425042F60120ADF8400008 ++:103120009DF81E000AA920F00600801C20F0010076 ++:103130008DF81E000220ADF83000ADF8340013A861 ++:103140000E90684603F0D4FC002888D1BDF820001A ++:103150006080211D484600F032F9002887D18DF8A3 ++:10316000425042F6A620ADF840001C216846079662 ++:103170001AF033FF9DF81C00ADF8345020F00F001A ++:10318000401C20F0F00010308DF81C009DF81D0050 ++:1031900008AA20F0FF008DF81D009DF81E000AA966 ++:1031A00020F0060040F00100801C8DF81E009DF804 ++:1031B00000008DF8445040F002008DF80000CDE989 ++:1031C0000A8711A80E90ADF83050684603F090FCC5 ++:1031D000002899D1BDF82000E08000203FE73EB5EF ++:1031E00004460820ADF8000020460FF0A9FB08B106 ++:1031F00010203EBD21460120FEF79DF90028F8D1A0 ++:103200002088ADF804006088ADF80600A088ADF80D ++:103210000800E088ADF80A007E4801AB6A46808865 ++:10322000002104F061F8BDF800100829E1D0032066 ++:103230003EBD1FB50446002002900820ADF80800EE ++:10324000CDF80CD020460FF07BFB10B1102004B05D ++:1032500010BD704802AA81884FF6FF7004F029FA69 ++:103260000028F4D1BDF80810082901D00320EEE7AA ++:10327000BDF800102180BDF802106180BDF8041077 ++:10328000A180BDF80610E180E1E701B582B002201F ++:10329000ADF800005F4802AB6A464088002104F0A8 ++:1032A00023F8BDF80010022900D003200EBD1CB584 ++:1032B000002100910221ADF8001001900FF064FB95 ++:1032C00008B110201CBD53486A4641884FF6FF7074 ++:1032D00004F0EFF9BDF800100229F3D003201CBD63 ++:1032E000FEB514460E460746FEF7DBFF28B1304612 ++:1032F0000FF026FB18B11020FEBD0F20FEBDF82CEC ++:1033000001D90C20FEBD38460FF01AFB414D18BB09 ++:10331000288801A903F05BF90028F3D138788DF8EB ++:103320000500288801A903F0C1FF0028EAD1009018 ++:103330009DF800009DF8051040F002008DF8000097 ++:10334000090703D040F008008DF80000288869467E ++:1033500003F04AFF0028D5D1ADF80840288833464D ++:1033600002AA002103F0C0FFBDF80810A142C9D095 ++:103370000320FEBD7CB50546002000900190088822 ++:10338000ADF800000C46284601950FF01BFB18B95C ++:1033900020460FF0F9FA08B110207CBD15B1BDF838 ++:1033A000000050B11B486A4601884FF6FF7004F0D8 ++:1033B00080F9BDF8001021807CBD0C207CBD30B5AB ++:1033C00093B0044600200D460090142101A81AF085 ++:1033D00004FE1C2108A81AF000FE9DF80000CDF89C ++:1033E00008D020F00F00401C20F0F00010308DF8C5 ++:1033F00000009DF8010020F0FF008DF801009DF80D ++:10340000200040F002008DF8200001208DF84600D9 ++:1034100002E000001200002042F60420ADF8440053 ++:1034200011A801902088ADF83C006088ADF83E00FE ++:10343000A088ADF84000E088ADF842009DF8020099 ++:1034400006AA20F00600801C20F001008DF8020082 ++:103450000820ADF80C00ADF810000FA8059001A9E8 ++:1034600008A803F045FB002803D1BDF81800288008 ++:10347000002013B030BD000010B504460FF060FA14 ++:1034800008B1102010BD2078C0F30210042807D81E ++:103490006078072804D3A178102901D8814201D28D ++:1034A000072010BDE078410706D421794A0703D4EC ++:1034B000000701D4080701D5062010BD002010BD6B ++:1034C00010B513785C08C37F64F30003C3771478E6 ++:1034D000A40864F34103C3771078C309887863F3C1 ++:1034E0004100887013781C094B7864F347134B70C4 ++:1034F0001378DB0863F3000088705078487110BDC2 ++:1035000010B5C4780B7864F300030B70C4786408BA ++:1035100064F341030B70C478A40864F382030B7056 ++:10352000C478E40864F3C3030B700379117863F380 ++:103530000001117003795B0863F341011170037995 ++:103540009B0863F3820111700079C00860F3C30126 ++:10355000117010BD70B514460D46064604F0D3FD3B ++:1035600080B10178142221F00F01891C21F0F001B3 ++:10357000A03100F8081B21461AF0DBFCBDE87040C2 ++:1035800004F0A1BD29463046BDE870401322FEF785 ++:10359000F8B870B514460E46054604F0B4FD70B197 ++:1035A000017821F00F01891C21F0F0012031017018 ++:1035B000458021688160BDE8704004F084BD3146DB ++:1035C0002846BDE870401322FEF7DBB810B5FE4C6C ++:1035D00094F8300000280CD104F120014FF6FF725E ++:1035E000A1F110000CF0A3FF00B1FFDF012084F86F ++:1035F000300010BD2DE9F047064608A8894690E83E ++:1036000030041F469046142128461AF0E6FC00219B ++:10361000CAF80010B8F1000F03D0B9F1000F03D1C0 ++:1036200014E03878C00711D020680FF0ADF9E8BB7E ++:10363000B8F1000F07D120681230286020681430DC ++:1036400068602068A8602168CAF800103878800790 ++:1036500028D560680FF0B6F940BBB9F1000F2DD046 ++:10366000FEF719FE0168C6F8B4118188A6F8B811F2 ++:10367000807986F8BA01FFF7A9FFDFF84C8308F1DB ++:103680002008C5F80C80626862B196F8B40106F2B1 ++:10369000B51140081032FEF74FF81022414660681D ++:1036A0001AF002FC3878400712D500E003E0A06869 ++:1036B0000FF06AF950B11020BDE8F087606800286B ++:1036C000F9D0E8606068C6F8B001EBE7A06828614F ++:1036D0000020F1E730B5054608780C4620F00F00D1 ++:1036E000401C20F0F001103121700020607095F82E ++:1036F000230030B104280FD0052811D0062814D09B ++:10370000FFDF20780121B1EB101F04D295F82000D3 ++:1037100000F01F00607030BD21F0F000203002E0AA ++:1037200021F0F00030302070EBE721F0F000403065 ++:10373000F9E710B510B190F8A94044B1A24890F84B ++:10374000354000205CB108601060186010BD00F1C9 ++:10375000A8040C6000F1D001F8301160F5E79A4C34 ++:1037600034340C60F0E700B58BB00723CDE90212CA ++:103770008DF801300191944900236431059109933A ++:1037800001468DF8103068460CF0A9FE002800D0E4 ++:10379000FFDF0BB000BD30B597B00C462C251A9951 ++:1037A0008DF80050ADF80200B3B118680190586868 ++:1037B0000290ADF80C2010220DF10E001AF074FBEF ++:1037C0000BA9684608F051FD002803D1A17F41F004 ++:1037D0001001A17717B030BD00200190E8E72DE976 ++:1037E000F0470646008A8CB080B20D468146FDF750 ++:1037F00015FE0446744F3078283FDFF8CC814FF037 ++:10380000000A122873D2DFE800F072E93509367732 ++:103810007E98A8F3E7E6E5E4E35BE3E3A07F00F04E ++:103820000300012806D0002148460BF03AFA0500B3 ++:1038300003D101E00121F7E7FFDF98F85C100906EA ++:1038400002D5D8F860000BE0032105F121000EF04D ++:1038500023FDD5F821005D49B0FBF1F201FB120018 ++:10386000C5F8210070686866B068A86620782528C9 ++:1038700000D0FFDFECE0A07F00F00300012806D0BD ++:10388000002148460BF00DFA060003D101E00121AA ++:10389000F7E7FFDF7078810702D52178252904D06A ++:1038A00040F0010070700CB006E70220287096F816 ++:1038B0002000287106F121003136C5E90206F2E741 ++:1038C000A07F00F00300012806D0002148460BF03D ++:1038D000E8F9040003D101E00121F7E7FFDF607898 ++:1038E000C10605D51320287041346C60DBE7DEE1AA ++:1038F00040F008006070D6E73348082128380EF001 ++:10390000CBFC032016E02A208DF8000010220DF1D8 ++:10391000020071681AF0C8FA10220DF11200B168A5 ++:103920001AF0C2FA284968462C3908F09EFC00B10A ++:10393000FFDF042028706F60B5E7E07FC00600D588 ++:10394000FFDFB0680090B38806220321484605F0E7 ++:1039500024FB0028A7D0FFDFA5E704B9FFDF7168CB ++:1039600021B1102204F124001AF09EFA28212046E9 ++:10397000FDF78CFDA07F00F0030002280ED104F1BA ++:103980002400002300901A4621464846FFF703FF13 ++:10399000112807D029212046FDF778FD307A84F8D8 ++:1039A000200080E7A07F000700D5FFDF14F81E0F7E ++:1039B00040F008002070A4F816A0C4F818A0C4F8BD ++:1039C0001CA0617808460AE01402002040420F0063 ++:1039D00030E068E196E08CE062E009E03FE061F30E ++:1039E0008200410861F3C3006070307AE0705AE7EA ++:1039F000A07F00F00300012806D0002148460BF00C ++:103A000050F9040003D101E00121F7E7FFDF0221B3 ++:103A100004F175000EF040FC1020287004F5DA70F7 ++:103A20006860B4F875002882FA486C346C61C5E9A6 ++:103A3000028038E7A07F00F00300012805D00021B4 ++:103A400048460BF02EF918B901E00121F8E7FFDF35 ++:103A50000CB0324621464846BDE8F0477AE504B945 ++:103A6000FFDF207821289CD93079012802D0022854 ++:103A70000AD103E0E07F40F01000E07798F85C1096 ++:103A800041F0010188F85C10324621464846FFF7B4 ++:103A900061FD0CB02046BDE8F0472321FDF7F6BCE0 ++:103AA000327901230321484605F086F878B11120C8 ++:103AB0002870327905F10800AA80031D00900321C7 ++:103AC000484605F0F6F8002891D0FFDFEBE6A07F2E ++:103AD00000F00300012806D0002148460BF0E1F871 ++:103AE000040003D101E00121F7E7FFDF3079207006 ++:103AF000D9E60321484605F0FDFB002899D11220A4 ++:103B00002870D0E6A07F00F00300012806D0002135 ++:103B100048460BF0C6F8050003D101E00121F7E7A4 ++:103B2000FFDF95F8740000F00300012878D1A07F32 ++:103B300000F00307E07FC0F3400616B1012F04D068 ++:103B40002BE095F89000C0072AD0D5F8AC1119B336 ++:103B500095F87320087C62F387000874E27FD5F83B ++:103B6000AC1162F341000874D5F8AC1166F30000A3 ++:103B70000874AEB1D5F8AC01102204F124017835F7 ++:103B80001AF092F9287E40F001002876287820F07B ++:103B9000010005F8780900E016B1022F04D02CE0EE ++:103BA00095F87800C00726D0D5F8A81119B395F874 ++:103BB0007320087C62F387000874E27FD5F8A811AF ++:103BC00062F341000874D5F8A81166F30000087488 ++:103BD0008EB1D5F8A801102204F1240178351AF02D ++:103BE00063F9287840F0010005F8180B287820F0D8 ++:103BF000010005F89009022F51D0002000EB400091 ++:103C000005EBC00090F87800800709D595F86C00A6 ++:103C1000D5F8B021400805F16D011032FDF78CFD9B ++:103C2000052060F3070815F8740F00F0030060F337 ++:103C30000F28287960F31748287F60F31F687548BC ++:103C40005C38027822F00F02921C22F0F00220323F ++:103C50000270427822F00702D21C4270A0F8029053 ++:103C6000C0F8088004F0B7FB2078252805D021286B ++:103C700007D0FFDF2078222803D922212046FDF734 ++:103C800005FCA07F00F0030001280AD0002148466F ++:103C90000BF019F800283FF412AEFFDF03E6012015 ++:103CA000ACE70121F3E7716881F801A0FBE5FFDFD4 ++:103CB000F9E570B5574C0025103C14F85C0F20F066 ++:103CC0008000207065600CF0D2FB5249A1F1100019 ++:103CD00004F013FB04F82C5C062060724D487C3025 ++:103CE00020615030A0611030E06170BD70B50D46AC ++:103CF000FDF794FB040000D1FFDF4FF4DE7128468E ++:103D00001AF06BF943485430686104F124002861CB ++:103D1000A07F00F00300012808D0022105F5907073 ++:103D20000CF0A6FB002800D0FFDF70BD0121F5E7F5 ++:103D30000A46014602F590700CF0BABB70B5054614 ++:103D400040689CB0017808290DD00B2903D00C29BC ++:103D500036D101218171686886883046FDF75EFBA7 ++:103D6000040035D133E046883046FDF757FB0400A8 ++:103D700000D1FFDF2078212822D0282822D16868AE ++:103D800002210C3001F0B8F9E0B168680821001D8B ++:103D900001F0B2F9B0B12D208DF80000ADF802604D ++:103DA000102204F1240101A81AF07EF80BA968463C ++:103DB00008F05BFA00B1FFDF29212046FDF766FB22 ++:103DC0001CB070BD687840F008006870F8E7FFDF4D ++:103DD000A07F00F00301022902D120F01000A0779B ++:103DE000207821280AD06868817909B1807898B153 ++:103DF000A07F00F0030002285BD0FFDFA07F00F06F ++:103E000003000228DCD1FDF7FBFC0028D8D0FFDF3F ++:103E1000D6E7000024020020687840F008006870AF ++:103E2000E07FC10720D0800701D5062000E00520F3 ++:103E300084F823002078292818D02428DED13146A0 ++:103E400006200EF03AFD22212046FDF71FFBA07F41 ++:103E500000F0030001282AD0002130460AF033FF89 ++:103E60000028CBD0FFDFC9E70420E1E7A07F00F006 ++:103E70000300012806D0002130460AF012FF050099 ++:103E800003D101E00121F7E7FFDF25212046FDF7FF ++:103E9000FDFA0F208DF8580016A905F590700CF06A ++:103EA000FEFA0228AAD00028A8D0FFDFA6E7012149 ++:103EB000D3E7687840F0080068709FE72DE9F04389 ++:103EC0008BB09946154688460646FDF7A7FA0400CA ++:103ED0004ED0207822284BD3232849D0E07FC0063B ++:103EE00046D4A07F00F00300012806D00021304610 ++:103EF0000AF0D7FE070002D00BE00121F7E7A07F10 ++:103F000000F00300012804D1012130460AF0C0FE70 ++:103F1000074601AB02AA03A93846FFF70AFC03983B ++:103F200000B9FFDF4FB1039807F5907787612078DC ++:103F3000222806D0242804D007E0039900208861B5 ++:103F400003E025212046FDF7A1FA03980B214170DB ++:103F500046628580C0E90289029901610199416147 ++:103F600004A90CF0BCFA022802D0002800D0FFDF20 ++:103F70000BB0BDE8F08330B587B00546FDF74EFACB ++:103F8000017822292FD9807F00F00300012806D074 ++:103F9000002128460AF085FE040003D101E001213A ++:103FA000F7E7FFDF227801230321284604F004FE0F ++:103FB000002818D011208DF80400227803A8009062 ++:103FC000ADF8082004AB0321284604F072FE00B1CE ++:103FD000FFDF01A904F590700CF061FA022802D00D ++:103FE000002800D0FFDF07B030BD10B586B0044612 ++:103FF000FDF714FA0178222919D9807F00F0030017 ++:10400000012806D0002120460AF04BFE040003D10F ++:1040100001E00121F7E7FFDF12208DF8000069467B ++:1040200004F590700CF03BFA002800D0FFDF06B0DA ++:1040300010BD2DE9F05F05460C460027007890463C ++:1040400001093E46BB4604F1080A02297ED0072931 ++:1040500002D00A2909D142E068680178082905D010 ++:104060000B292CD00C292AD0FFDFC6E114271C26EF ++:10407000002C6CD04088A080FDF7D0F95FEA0009E1 ++:1040800000D1FFDF99F817005246400809F11801E6 ++:10409000FDF752FB68688089208268684168C4F82F ++:1040A00012108068C4F81600A07E20F0060040F0D0 ++:1040B0000100A07699F81E0040F040014DE01A275B ++:1040C0000A26002CD5D08088A080FDF7A7F905002E ++:1040D00000D1FFDF51462846FFF7FCFA8DE10CB115 ++:1040E000288BA080287A0E287ED006DC01287CD080 ++:1040F000022808D0032804D135E0102876D01128F2 ++:1041000075D0FFDF79E11E270926002CB1D0A088E9 ++:10411000FDF784F95FEA000900D1FFDF287B00F09A ++:1041200003000128207A1BD020F001002072297B97 ++:10413000890861F341002072297BC90861F382007C ++:104140002072297B090961F3C30001E04AE117E10C ++:10415000207299F81E0040F0800189F81E104CE191 ++:1041600040F00100E2E713270D26002CAAD0A0881A ++:10417000FDF754F98146807F00F00300012806D046 ++:104180000021A0880AF08DFD050003D101E0012186 ++:10419000F7E7FFDF99F81E0000F00302012A59D06B ++:1041A000A86E817801F003010129217A54D021F011 ++:1041B0000101217283789B0863F3410121728378A6 ++:1041C000DB0863F38201217283781B0963F3C30167 ++:1041D0002172037863F306112172437863F3C711E8 ++:1041E000217284F809B003E05EE0A4E08CE09CE07A ++:1041F000C178A172012A32D04279E17A62F30001DA ++:10420000E1724279520862F34101E1724279920807 ++:1042100062F38201E1724279D20862F3C301E17272 ++:104220000279217B62F3000121730279520862F363 ++:10423000410121730279920862F3820121730079AE ++:10424000C00860F3C301217399F8000023285AD9EC ++:10425000262168E0686EA4E741F00101A9E7027930 ++:10426000E17A62F30001E1720279520862F34101DE ++:10427000E1720279920862F38201E1720279D20856 ++:1042800062F3C301E1724279217B62F30001217381 ++:104290004279520862F3410121734279920862F334 ++:1042A000820121734079CBE718271026002C67D0B4 ++:1042B000A088FDF7B3F88246807F00F00300012854 ++:1042C00007D00021A0880AF0ECFC5FEA000903D1C6 ++:1042D00001E00121F6E7FFDFE868A06099F801003E ++:1042E00040F0040189F8011099F80200800708D510 ++:1042F000012020739AF8000023287ED927215046F8 ++:1043000063E084F80CB078E015270F26C4B3A088CA ++:10431000FDF784F8814606225146E86808F00DF85A ++:104320000120A073AEE048464FE0162709263CB3B3 ++:10433000287B207261E0297BFE4802290CD01927D6 ++:104340000E26ECB101290DD003291AD004291BD067 ++:10435000052919D0FFDF23E01B270926BCB3012163 ++:10436000217205E001212172617A21F0030161725D ++:1043700010F85C1F4A08520062F3060101700FE05A ++:104380002BE00220207207E0687B052900F00F0077 ++:1043900040F0800020721BD0607A20F00300607231 ++:1043A000A088FDF73BF805460078212825D0232872 ++:1043B00000D0FFDFA87F00F00300012810D000210B ++:1043C000A0880AF080FC22212846FDF75FF814E05F ++:1043D000607A20F00300401CE1E7A8F8006011E0DB ++:1043E0000121EDE70CB16888A080287A03282BD042 ++:1043F00004280AD005284BD0FFDFA8F800600CB1D4 ++:10440000278066800020BDE8F09F15270F26002C2E ++:10441000E3D0A088FDF702F8807F00F003000128B8 ++:1044200006D00021A0880AF03CFC050003D101E081 ++:104430000121F7E7FFDFD5F821000622514607F0FA ++:104440007CFF84F80EB0D8E717270926002CC4D0CB ++:10445000A088FCF7E3FF8146807F00F0030001287D ++:1044600006D00021A0880AF01CFC050003D101E061 ++:104470000121F7E7FFDFA878800701D5022000E0DF ++:104480000120207299F800002328B6D927214AE795 ++:1044900019270E26002CA0D0A088FCF7BFFF5FEAEA ++:1044A000000900D1FFDFC4F808B0A4F80CB084F80C ++:1044B00008B0A07A40F00300A07299F81F1061F3D1 ++:1044C0008200A07299F81F1001EA510161F3C30044 ++:1044D000A072687A00F0030001288ED1607A40F063 ++:1044E0000400607299F81E00E97A00F003000128C8 ++:1044F00013D0607B61F300006073AA7A217B62F3C2 ++:1045000000012173EA7A520862F341006073A87ACD ++:10451000400860F3410121736FE7207B61F30000E5 ++:104520002073AA7A617B62F300016173EA7A520810 ++:1045300062F341002073A87A400860F3410161737F ++:104540005BE710B57B4C30B10146102204F120002E ++:1045500019F0AAFC012084F8300010BD10B5044603 ++:10456000FFF734F8734920461022BDE8104020318F ++:1045700019F09ABC70B56F4C06004FF0000514D0CE ++:104580000EF0DEF908B110250DE00621304607F0E7 ++:10459000BBFE411C06D0206614F85C0F40F0800082 ++:1045A000207000E00725284670BD14F85C0F20F04D ++:1045B0008000F5E7007810F00F0204D0012A05D042 ++:1045C000022A0CD110E0000909D10AE000090128F3 ++:1045D00007D0022805D0032803D0042801D00720E3 ++:1045E00070470870002070470620704705282AD2BF ++:1045F000DFE800F003070F171F00087820F0FF0026 ++:104600001EE0087820F00F00401C20F0F000103071 ++:1046100016E0087820F00F00401C20F0F000203059 ++:104620000EE0087820F00F00401C20F0F000303041 ++:1046300006E0087820F00F00401C20F0F000403029 ++:10464000087000207047072070472DE9F041804630 ++:1046500088B00D46002708460EF0BDF9A8B94046BF ++:10466000FCF7DCFE040003D02078222815D104E0FA ++:1046700043F2020008B0BDE8F08145B9A07F010611 ++:1046800003D500F00300022801D01020F2E7A07F3C ++:10469000C10601D4010702D50DB10820EAE725497A ++:1046A00091F85C10C90701D01120E3E7E17FC9064A ++:1046B00001D50D20DEE700F00300022805D125B169 ++:1046C0002846FEF7D9FE0700D4D1A07F00F00300F2 ++:1046D000012806D0002140460AF0E3FA060002D085 ++:1046E0000CE00121F7E7A07F00F0030001280BD0C8 ++:1046F000002140460AF0CCFA060007D0A07F00F067 ++:104700000300022804D009E00121F2E70420B1E708 ++:1047100025B12A4631462046FEF7D2FE07AB1A469F ++:1047200069463046FFF705F8009800B9FFDF0C2016 ++:10473000009901E014020020487006F59070C1F85D ++:104740002480486100200881A07F00F00300012838 ++:1047500028D0EDB302200871301D886170784009BF ++:104760000877B078C0F340004877287800F001025D ++:10477000887F62F301008877E27F62F382008877A6 ++:10478000E27F520862F3C3008877B27862F30410C4 ++:104790008877A878C87701F1210228462031FEF7F2 ++:1047A000AFFE22E001200871287800F00102087EA7 ++:1047B00062F3010008762A78520862F382000876D4 ++:1047C0002A78920862F3C30008762A78D20800E0BB ++:1047D00007E062F30410087624212046FCF756FE19 ++:1047E0000BE0032008710520087625212046FCF700 ++:1047F0004DFEA07F20F08000A07701A900980BF06B ++:104800006EFE022801D000B1FFDF384632E72DE905 ++:10481000FF4FF94A0D4699B09A4607CA14AB0027D4 ++:1048200083E807001998FCF7F9FD060006D03078F8 ++:10483000262806D008201DB0BDE8F08F43F2020004 ++:10484000F9E7B07F00F00309B9F1010F03D0B9F126 ++:10485000020F07D008E03DB91B98FEF70DFE0028B7 ++:10486000E9D101E01B9878BBB07F00F0030001287C ++:1048700006D0002119980AF014FA040003D101E0CF ++:104880000121F7E7FFDF852D25D007DCD5B1812D8C ++:104890001BD0822D1BD0832D08D11AE0862D1CD071 ++:1048A000882D1CD0892D1CD08A2D1CD00F20207162 ++:1048B0000F281AD001208DF83400201D0E90207989 ++:1048C000A8B158E10020F2E70FE00120EFE7022055 ++:1048D000EDE70320EBE70520E9E70620E7E70820FE ++:1048E000E5E70920E3E70A20E1E70720A3E7B9F1BC ++:1048F000010F17D0D4E91950804602200190012001 ++:104900000090A87898F80210C0F3C000C1F3C0016D ++:1049100008405FEA000B5DD050460EF011F8002809 ++:104920006CD12DE0D4E9198501200190022000907E ++:10493000214630461B9AFEF7C3FD1B98007800F015 ++:104940000101A87861F30100A870F17F61F3820092 ++:10495000A870F17F490861F3C300A870A17861F3E2 ++:104960000410A870607840092870A078C0F3400057 ++:1049700068701B988078E870002068712871C0E723 ++:10498000DAF80C000DF0DCFFC0BBDAF81C000DF00B ++:10499000D7FF98BBDAF80C00A060DAF81C00E060E2 ++:1049A00098F80100A17800F0010041EA4000A070F1 ++:1049B00098F80210C0B2C1F30011891E0840A0701F ++:1049C000002084F82000009906F1170002290BD07E ++:1049D00001210AE098F80110A07801F00101FD2200 ++:1049E00042EA41010840E2E7002104EB81018861CD ++:1049F0000199701C022902D0012101E028E0002168 ++:104A000004EB81018861A87800F00300012849D1F6 ++:104A100098F8020000F00300012843D1B9F1010F1A ++:104A200004D12A1D691D1B98FEF76AFD297998F8A3 ++:104A3000040001408DF82C10687998F8052010408A ++:104A40008DF8300001432DD050460DF079FF08B1AC ++:104A50001020F0E60AF1100004F5D47104F17C0294 ++:104A60000490B9F1020F3CD00090CDE90121002162 ++:104A70000BAB5A462046FEF7BDFD0028E9D104F5F0 ++:104A8000D67104F19402B9F1010F30D0049800906E ++:104A9000CDE9012100210CAB5A462046FEF7AAFDC4 ++:104AA0000028D6D1A078800740D4A87898F80210C2 ++:104AB000C0F38000C1F38001084337D0297898F80B ++:104AC000000014AAB9F1010F17D032F810204B00E2 ++:104AD000DA4012F0030718D0012F1ED0022F12D196 ++:104AE0001DE0CDF800A0CDE901210121C0E7CDF8FE ++:104AF00000A0CDE901210121CDE732F811204300CA ++:104B0000DA4002F00307032F07D0BBF1000F0DD0EE ++:104B1000012906D0042904D008E00227F5E701277F ++:104B2000F3E7012801D0042800D10427F07F40F0EA ++:104B300001006BF34100F077A07881074FF003008C ++:104B40000CD5A071BBF1000F15D100BF8DF85C0032 ++:104B500017AA31461998FEF71CFD0CE00221022F1E ++:104B600018D0012F18D0042F22D00020A071F07F80 ++:104B700020F00100F07725213046FCF787FC0DA9D5 ++:104B800004F590700BF08BFC10B1022800D0FFDF11 ++:104B9000002050E6A171D9E7A1710D2104F1240094 ++:104BA00019F01BFA607840F0020060700420CDE735 ++:104BB0000120A071DFE72DE9F04387B091468846D8 ++:104BC0000446FCF72BFC070006D03878272806D0CF ++:104BD000082007B0BDE8F08343F20200F9E7B87F90 ++:104BE00000F00300012809D0002120460AF059F8FE ++:104BF000040006D104E0000060E301000121F4E7B5 ++:104C0000FFDFA679012E08D0B8F1000F0FD048467B ++:104C10000DF096FEB8B11020DBE7B9F1000F25D1F9 ++:104C2000B8F1000F09D0B8F1010F1FD120E0022E1A ++:104C300005D0032E05D0FFDF28E00C2526E0012556 ++:104C400024E0022522E0B8F1020F03D0B8F1010FF1 ++:104C50000AD00BE0032E09D100251022494604F1A9 ++:104C6000210019F021F911E0022E01D00720B0E750 ++:104C70000025102104F1210019F08DF95FEA0900E7 ++:104C800004D0062107F040FBC4F8210060782521FC ++:104C900040F0020060703846FCF7F8FB6078C1070E ++:104CA00013D020F00100607002208DF8000004F1A4 ++:104CB000210002908DF804506946FF300BF0EFFBA5 ++:104CC000022804D018B1FFDF01E084F82050002052 ++:104CD0007FE730B587B00D460446FCF79FFB88B1EF ++:104CE000807F00F0030001280FD00021204609F04A ++:104CF000D8FF04000ED028460DF022FE38B1102057 ++:104D000007B030BD43F20200FAE70121EEE7607818 ++:104D1000400701D40820F3E7294604F1410020228E ++:104D2000054619F0C1F8607840F010006070010786 ++:104D30000FD520F00800607013208DF80000694640 ++:104D400004F5907001950BF0AAFB022801D000B188 ++:104D5000FFDF0020D4E770B592B00D460646FCF7A1 ++:104D60005DFB18B10178272940D103E043F202002E ++:104D700012B070BD807F00F00300012806D0002132 ++:104D8000304609F08EFF040003D101E00121F7E76E ++:104D9000FFDFA079022829D1A078C00726D0002300 ++:104DA00002220321304603F007FF08B30C208DF8E0 ++:104DB00005000A9604A804F5907402220090069457 ++:104DC000ADF80C2005AB0321304603F072FF00B1B3 ++:104DD000FFDF04208DF808008DF81C500BA901A8F6 ++:104DE0000BF07DFB00B1FFDF0020C1E70820BFE72B ++:104DF0001120BDE770B5064686B014460D4608463C ++:104E00000DF09EFD18B920460DF0BEFD10B110202A ++:104E100006B070BDA6F57F40FF380ED03046FCF7D7 ++:104E2000FDFA38B1417822464B08811C1846FCF740 ++:104E300083FC07E043F20200EAE72046FDF796FA1A ++:104E40000028E5D11021E01D0DF026FAE21D2946CB ++:104E50006846FEF788FC102204F11700019919F04A ++:104E600023F80020D4E72DE9F041044690B0154620 ++:104E70008846002708460DF0AEFD18B928460DF00B ++:104E8000AAFD18B1102010B0BDE8F0812046FCF753 ++:104E9000C5FA060003D03078272818D102E043F283 ++:104EA0000200F0E7B07F00F00300012806D00021E7 ++:104EB000204609F0F6FE040003D101E00121F7E7E6 ++:104EC000FFDF6078400702D5A078800701D4082072 ++:104ED000D9E7B07F00F00300012818D0D4E9190108 ++:104EE000407800B1B5B1487810B1B8F1000F11D0D9 ++:104EF000C5B1EA1D02A8E168FEF735FC102205F1F4 ++:104F00001700039918F0A4FF30B104270AE0D4E990 ++:104F10001910E5E70720B6E71022E91D04F131007A ++:104F200018F0C2FFB8F1000F06D0102208F10701F7 ++:104F300004F1210018F0B8FF6078252140F002004C ++:104F400060703046FCF7A2FA6078C10715D020F0F7 ++:104F50000100607002208DF8200004F121000A9009 ++:104F600010300B908DF8247008A9EF300BF097FAF1 ++:104F7000022804D018B1FFDF01E084F8207000207F ++:104F800081E7F8B515460E460746FCF747FA0400D8 ++:104F900004D02078222804D00820F8BD43F2020073 ++:104FA000F8BDA07F00F00300022802D043F2050004 ++:104FB000F8BD30460DF0C4FC18B928460DF0C0FC11 ++:104FC00008B11020F8BD00953288B31C2146384640 ++:104FD000FEF7E1FB112814D00028F3D1297C4A0800 ++:104FE000E17F62F30001E1772A7C62F34101E1771E ++:104FF000297C890884F82010A17F21F08001A17705 ++:10500000F8BDA17F0907FBD4D6F80200C4F836002A ++:10501000D6F80600C4F83A003088A0861022294647 ++:1050200004F1240018F040FF287C4108E07F61F380 ++:105030008200E077297C61F3C300E077287C800858 ++:1050400084F82100A07F40F00800A0770020D3E77B ++:1050500070B596B00D46064613B1072016B070BD68 ++:10506000FCF7DCF9040007D02078222802D3A07FC7 ++:10507000400604D40820F1E743F20200EEE7C5B190 ++:105080002D208DF80000ADF802601022294601A8FD ++:1050900018F00AFF287C4108E07F61F30000E07708 ++:1050A000297C61F34100E077287C800884F82000A7 ++:1050B00004E02E208DF80000ADF802600BA96846D0 ++:1050C00007F0D3F8A17F21F04001A177C6E770B5C2 ++:1050D0000D46FCF7A3F9040005D028460DF054FC5A ++:1050E00020B1102070BD43F2020070BD2946204659 ++:1050F000FEF7F0FA002070BD05E000BF10F8012BAC ++:105100000AB100207047491E89B2F7D201207047CA ++:10511000F0B50078059F1E4614460D46012800D0C4 ++:10512000FFDF0C2030803A203880002C08D0287A0D ++:10513000052806D0287B012800D0FFDF17206081DA ++:10514000F0BDA889FBE72DE9F04786B0144691F839 ++:105150000C900E9A0D46B9F1010F0BD0102100787A ++:105160002E8A8846052807D0062833D0FFDF06B0F0 ++:10517000BDE8F0870221F2E7E8890C2100EB40004E ++:1051800001EB4000188033201080002CEFD0E8891C ++:10519000608100271AE00096688808F1020301AADE ++:1051A000696900F092FE06EB0800801C07EB4701DE ++:1051B00086B204EB4102BDF8040090810DF10601B6 ++:1051C00040460E320BF02CFA7F1CBFB26089B84209 ++:1051D000E1D8CCE734201080E889B9F1010F11D073 ++:1051E000122148430E301880002CC0D0E88960811D ++:1051F0004846B9F1010F00D00220207300270DF1BD ++:10520000040A1FE00621ECE70096688808F1020313 ++:1052100001AA696900F059FE06EB0800801C86B2FD ++:10522000B9F1010F12D007EBC70004EB4000BDF845 ++:105230000410C18110220AF10201103018F034FE6E ++:105240007F1CBFB26089B842DED890E707EB470108 ++:1052500004EB4102BDF80400D0810AF1020140468E ++:1052600010320BF0DDF9EBE72DE9F0470E4688B080 ++:1052700090F800C096F80C80378AF5890C201099B8 ++:1052800002F10C044FF0000ABCF1030F08D0BCF18E ++:10529000040F3ED0BCF1070F7DD0FFDF08B067E7F9 ++:1052A00005EB850C00EB4C00188031200880002AAB ++:1052B000F4D0A8F1060000F0FF09558125E018217F ++:1052C00001A818F08AFE00977088434601AA716908 ++:1052D00000F0FBFDBDF804002080BDF80600E08072 ++:1052E000BDF808002081A21C0DF10A0148460BF010 ++:1052F00097F9B9F1000F00D018B184F804A0A4F810 ++:1053000002A007EB080087B20A346D1EADB2D6D2F8 ++:10531000C4E705EB850C00EB4C00188032200880B8 ++:10532000002ABBD0A8F1050000F0FF09558137E045 ++:1053300000977088434601AA716900F0C6FD9DF888 ++:105340000600BDF80410E1802179420860F30001F5 ++:1053500062F34101820862F38201C20862F3C30171 ++:10536000020962F30411420962F34511820962F3F2 ++:1053700086112171C0096071BDF8070020812246A5 ++:105380000DF1090148460BF04BF918B184F802A061 ++:10539000A4F800A000E007E007EB080087B20A3499 ++:1053A0006D1EADB2C4D279E7A8F1020084B205FB4C ++:1053B00008F000F10E0CA3F800C035230B80002A82 ++:1053C000A6D055819481009783B270880E3271699E ++:1053D00000F07BFD62E72DE9F84F1E460A9D0C4662 ++:1053E00081462AB1607A00F58070D080E089108112 ++:1053F00099F800000C274FF000084FF00E0A0D2816 ++:1054000073D2DFE800F09E070E1C28303846556A3C ++:1054100073737300214648460095FFF779FEBDE897 ++:10542000F88F207B9146082802D0032800D0FFDFA8 ++:10543000378030200AE000BFA9F80A80EFE7207B20 ++:105440009146042800D0FFDF378031202880B9F151 ++:10545000000FF1D1E3E7207B9146042800D0FFDF65 ++:1054600037803220F2E7207B9146022800D0FFDF10 ++:1054700037803320EAE7207B1746022800D0FFDF81 ++:105480003420A6F800A02880002FC8D0A7F80A80F2 ++:10549000C5E7207B1746042800D0FFDF3520A6F89B ++:1054A00000A02880002FBAD04046A7F80A8012E05A ++:1054B000207B1746052802D0062800D0FFDF1020E9 ++:1054C000308036202880002FA9D0E0897881A7F885 ++:1054D0000E80B9F80200B881A1E7207B9146072829 ++:1054E00000D0FFDF37803720B0E72AE04FF012000E ++:1054F00018804FF038001700288090D0E08978811C ++:10550000A7F80E80A7F8108099F800000A2805D0A7 ++:105510000B2809D00C280DD0FFDF80E7207B0C285A ++:1055200000D0FFDF01200AE0207B0D2800D0FFDF44 ++:10553000042004E0207B0E2800D0FFDF0520387314 ++:105540006DE7FFDF6BE770B50C460546FBF766FFBE ++:1055500020B10078222804D2082070BD43F2020056 ++:1055600070BD0521284609F09CFB206008B1002091 ++:1055700070BD032070BDFFB585B00746089814467E ++:105580000D46022628B908A93846FFF7DCFF002897 ++:1055900040D108980121801D04F074FDADF8080089 ++:1055A00002464DB100233146384603F005FB98B35F ++:1055B0000898007880BB05E02078092820D00F28C3 ++:1055C0002BD0FFDF03A8009004ABBDF808203146C4 ++:1055D000384603F06EFB00281CD1089802A9801DF4 ++:1055E000C4E90107DDE90332204604F058FD40B369 ++:1055F000072824D2DFE800F01A182323211C1E00FC ++:10560000072600233146384603F0D6FA0028D9D1C0 ++:1056100043F2040009B0F0BD06E0002331463846ED ++:1056200003F0CAFA0028CDD11120F3E70020F1E7FA ++:105630000820EFE743F20300ECE70720EAE7032046 ++:10564000E8E703980090BDF8083004223146384658 ++:1056500003F0A3FC0028DDD1002DDBD008990D70EC ++:10566000D8E710B588B01C46AAB104238DF80030E5 ++:105670001388ADF80C305288ADF80E208A788DF87A ++:1056800012200988ADF8101000236A462146FFF762 ++:1056900072FF08B010BD1020FBE770B50D46052164 ++:1056A00009F0FFFA040000D1FFDF2946A01DBDE884 ++:1056B000704004F0D0BC70B596B00C460646FFF7BB ++:1056C000ECFF05462146304601F036FE012130460A ++:1056D00001F050FE002D25D13046FBF79FFE05005E ++:1056E00000D1FFDF95F822001B281BD9172C19D9F0 ++:1056F0003A208DF80000ADF8026095F82200211DD7 ++:10570000884201D9241D00E00446ADF8044040F66B ++:105710004800ADF806000BA9684606F0A6FD002873 ++:1057200000D0FFDF16B070BD2DE9F84305460078C4 ++:1057300000260C4612287BD2DFE800F0896464431F ++:105740003B663737133737370937373737372879D5 ++:10575000001FC0B2022801D010281FD104BBFFDFF8 ++:105760001EE004B9FFDF6088052109F09AFA00788D ++:10577000032805D004280AD0072811D0FFDF0DE048 ++:105780002879801FC0B202280AD048B106E02879E3 ++:10579000401FC0B2022803D0102801D0072657E0CE ++:1057A000607840F00800607052E0002CF8D1FFDF14 ++:1057B000F6E704B9FFDF28790128F1D160881721C5 ++:1057C00042E0A888052180B2804609F06AFA0746BF ++:1057D00004B1FFDF07B9FFDF4146B81D04F015FC37 ++:1057E00002F091FC040008D0607840F0080060707E ++:1057F000A4F8028002F067FC2BE013214046FDF77D ++:1058000031F937E0FFDF23E004B9FFDF60880521CD ++:1058100009F047FA070000D1FFDF6946B81D04F020 ++:10582000FBFB00B1FFDFA988172902D2172201E094 ++:105830000DE00A46BDF80000824201D9014602E0AF ++:10584000172900D217216088FFF735FFA8E7FFDF8F ++:1058500084B1607800070DD52078182220F00F0061 ++:10586000C01C20F0F00090302070294604F10800A0 ++:1058700018F05FFB3046BDE8F88300200870881DF3 ++:1058800004F0B7BB0A460146901D04F0C4BB70B5D6 ++:105890000546052109F005FA040000D1FFDF29467D ++:1058A000A01DBDE8704004F0B0BB2DE9F74F90B0EB ++:1058B0004FF0000AADF830A0ADF804A047880C46C0 ++:1058C00005460521384609F0ECF9060000D1FFDF56 ++:1058D00024B1A780A4F806A0A4F808A0297A04F1AE ++:1058E00010003827C91E4FF00C0B4FF001084FF085 ++:1058F000120902900F297DD2DFE801F0F1F0EF7F6D ++:1059000008D2888D9F3DDBF2EDB6B60030780228D4 ++:1059100000D0FFDFA8890BEBC001ADF804103021E7 ++:10592000ADF83010002C25D06081B5F80E8000272E ++:105930001DE004EBC709317989F80E107188A9F8C8 ++:105940000C10CDF800806888042305AA296900F0AE ++:10595000BCFABDF81410A9F8101008F10400BDF845 ++:1059600016107F1C1FFA80F8A9F81210BFB26089C8 ++:10597000B842DED808E13078022800D0FFDFE9899C ++:105980000BEBC100ADF804003020ADF8300095F805 ++:105990000CB0002CABF10400C0B20F90EAD06181D2 ++:1059A000B5F81090002722E0CDF8009068885B469B ++:1059B00003AA696900F089FA09EB0B001FFA80F964 ++:1059C00004EBC70808F10C0204A90F980AF028FE9E ++:1059D00018B188F80EA0A8F80CA0BDF80C10A8F813 ++:1059E0001010BDF80E107F1CA8F81210BFB260890D ++:1059F000B84200E0C7E0D7D8C6E00CA8009001ABE1 ++:105A0000224629463046FFF79EFBBDE03078082845 ++:105A100005D0FFDF03E03078082800D0FFDFE889F9 ++:105A20001030ADF804003620ADF83000002C3FD027 ++:105A3000A98961817188A18127E03078092800D087 ++:105A4000FFDFA88900F10C01ADF804103721ADF893 ++:105A50003010002C2CD06081E8890090AB896888D8 ++:105A600004F10C02296955E0E8893921103080B22F ++:105A7000ADF80400ADF83010002C72D0A989618116 ++:105A8000287A10280AD002212173E989E181288A25 ++:105A90000090EB8968886969029A3BE00121F3E78D ++:105AA0000CA8009001AB224629463046FFF7DCFBEC ++:105AB0006AE030780A2800D0FFDFADF80490ADF836 ++:105AC00030704CB3A9896181A4F810A0A4F80EA08D ++:105AD00084F80C8058E020E002E030E038E041E05B ++:105AE00030780B2800D0FFDF288AADF830701230F4 ++:105AF000ADF8040084B104212173A9896181E98989 ++:105B0000E181298A2182688A00902B8A688804F1C1 ++:105B10001202696900F0D9F936E030780C2800D01B ++:105B2000FFDFADF80490ADF8307044B30521217368 ++:105B3000A4F80AA0A4F80EA0A4F810A024E00CA8D1 ++:105B4000009001AB224629463046FFF7E1FA1BE000 ++:105B50000CA8009001AB224629463046FFF73BFCDB ++:105B600012E00DE00B203B21ADF80400ADF8301041 ++:105B700034B1A4F80680A4F808A084F80AA003E0D1 ++:105B80001299088014E0FFDF1299BDF80400088024 ++:105B900074B1BDF830002080BDF804006080287A20 ++:105BA000032805D0102803D0112801D086F800A0C2 ++:105BB00013B00020BDE8F08F2DE9FC4156880F4658 ++:105BC000804615460521304609F06BF8040000D1E7 ++:105BD000FFDFA41DCDE900642B463A4640466968C4 ++:105BE00004F011FCBDE8FC8170B50D46052109F0FB ++:105BF00058F8040000D1FFDF2946A01DBDE8704021 ++:105C000004F015BA70B50D46052109F04AF80400F4 ++:105C100000D1FFDF2946A01DBDE8704004F03ABA6C ++:105C20002DE9F0438DB00D461446814607A9FFF7D4 ++:105C30008AFC002814D14FF6FF7601274FF4205834 ++:105C40008CB103208DF800001020ADF8140008A8D6 ++:105C5000069008AA204605A90AF001FD78B10720A0 ++:105C60000DB0BDE8F0830820ADF80C508DF812702F ++:105C70008DF80000ADF80E60ADF810800CE00798CC ++:105C8000A1780171218841808DF81270ADF80C5017 ++:105C9000ADF81080ADF80E606A4602214846079BB9 ++:105CA000FFF769FCDCE708B501228DF8022042F617 ++:105CB0000202ADF800200A4603236946FFF7D1FC33 ++:105CC00008BD08B501228DF8022042F60302ADF8A6 ++:105CD00000200A4604236946FFF7C3FC08BD00B54F ++:105CE00087B079B102228DF800200A88ADF80C2027 ++:105CF0004988ADF80E1000236A460521FFF73BFCEA ++:105D000007B000BD1020FBE709B10723A9E4072075 ++:105D1000704770B588B00D461446064607A9FFF7D0 ++:105D200012FC00280ED17CB10620ADF80C508DF885 ++:105D30000000ADF80E40079B6A4608215C803046A3 ++:105D4000FFF719FC08B070BD05208DF80000ADF814 ++:105D50000C50F0E700B587B059B107238DF800303B ++:105D6000ADF80C20049100236A460921FFF703FCDB ++:105D7000C6E71020C4E770B588B00C46064600257B ++:105D800007A9FFF7E0FB0028DCD107980121801D5F ++:105D900004F078F99CB12178062921D2DFE801F0DE ++:105DA000200505160318801E80B2C01EE28880B24E ++:105DB0000AB1A3681BB1824203D90C20C2E71020AC ++:105DC000C0E7042904D0A08850B901E00620B9E753 ++:105DD000012913D0022905D004291CD005292AD075 ++:105DE0000720AFE709208DF800006088ADF80C00AF ++:105DF000E088ADF80E00A068049023E00C208DF838 ++:105E000000006088ADF80C00E088ADF80E00A068D6 ++:105E10000A25049016E00D208DF800006088ADF88A ++:105E20000C00A088ADF80E00E088ADF81000A06866 ++:105E30000B25059006E00E208DF8000060788DF8A7 ++:105E40000C000C256A4629463046079BFFF793FB5A ++:105E500078E700B587B00F228DF80020ADF80C1060 ++:105E600000236A461946FFF786FB49E700B587B06D ++:105E700071B102228DF800200A88ADF80C20498803 ++:105E8000ADF80E1000236A460621FFF774FB37E7D2 ++:105E9000102035E770B588B0064601200D46ADF8F4 ++:105EA0000C108DF80000014600236A463046FFF7CB ++:105EB00062FB040008D12946304601F02EFA002189 ++:105EC000304601F057FA20463CE7F8B51C46154627 ++:105ED0000E46069F09F048F82346FF1DBCB2314626 ++:105EE0002A46009408F060FCF8BD000018B18178E3 ++:105EF000012938D101E010207047018842F60112D3 ++:105F0000881A914231D018DC42F60102A1EB02005E ++:105F100091422AD00CDC41B3B1F5C05F25D06FF4BB ++:105F2000C050081821D0A0F57060FF381BD11CE0CC ++:105F300001281AD002280AD117E0B0F5807F14D0CA ++:105F400008DC012811D002280FD003280DD0FF282B ++:105F500009D10AE0B0F5817F07D0A0F58070033841 ++:105F600003D0012801D0002070470F2070470B2874 ++:105F700026D008DC1BD2DFE800F01C2025251A25DE ++:105F8000292325271E0011281CD008DC0C2817D037 ++:105F90000D281DD00F2815D0102808D110E0822818 ++:105FA00009D0842810D0852810D0872812D003204B ++:105FB0007047002070470520704743F20300704788 ++:105FC000072070470F207047042070470620704755 ++:105FD0000C2070474FF45050704708280DD2DFE86E ++:105FE00000F00406040C0C080C0A00207047112075 ++:105FF000704707207047082070470320704738B566 ++:106000000C46050041D06946FEF7D4FA002819D1A4 ++:106010009DF80010607861F3020060706946681CAA ++:10602000FEF7C8FA00280DD19DF80010607861F3E2 ++:10603000C5006070A978C1F34101012903D002298C ++:1060400005D0072038BD217821F0200102E0217819 ++:1060500041F020012170410704D0A978C90861F3FB ++:1060600086106070607810F0380F07D0A9780909A1 ++:1060700061F3C710607010F0380F02D160784006ED ++:1060800003D5207840F040002070002038BD70B566 ++:1060900004460020088015466068FFF7B0FF00281E ++:1060A00016D12089A189884211D860688078C007FC ++:1060B0000AD0B1F5007F0AD840F20120B1FBF0F21E ++:1060C00000FB1210288007E0B1F5FF7F01D90C20FA ++:1060D00070BD01F201212980002070BD10B5047847 ++:1060E000137864F3000313700478640864F34103C5 ++:1060F00013700478A40864F3820313700478E4082E ++:1061000064F3C30313700478240964F30413137055 ++:106110000478640964F3451313700078800960F310 ++:106120008613137031B10878C10701D1800701D5FA ++:10613000012000E0002060F3C713137010BD427807 ++:10614000530702D002F0070306E012F0380F02D026 ++:10615000C2F3C20300E001234A7863F302024A70EB ++:10616000407810F0380F02D0C0F3C20005E04307BA ++:1061700002D000F0070000E0012060F3C5024A7081 ++:1061800070472DE9F04796B00D00804613D0B8F166 ++:10619000000F14D01221284617F0FDFE06AAFF2199 ++:1061A000012005F09DFE0024264637464FF4205975 ++:1061B0006FF4205A78E0102016B0BDE8F087072071 ++:1061C000FAE700BF9DF8220001280AD1BDF820009F ++:1061D00048450BD010EB0A000AD001280CD0022849 ++:1061E0000CD0042C0ED0052C0FD10DE0012400E0C2 ++:1061F0000224BDF81E6008E0032406E00424BDF874 ++:106200001E7002E0052400E00624BDF81E10414582 ++:106210004AD12C74D6B30DF140094FF0000811AAF1 ++:10622000CDF81490CDF80880CDE903824FF0070A2D ++:10623000CDE900A810234246FF21304605F0FEFEBE ++:1062400010BBBDF840002A46C0B211A90AF0E8F917 ++:10625000D0B9AE81D7B103A90BAE4046CDF80880C6 ++:1062600081E84102CDE900A813230022FF2138462E ++:1062700005F0E4FE40B9BDF84000F11CC01EC0B2FC ++:106280002A1D0AF0CDF910B1032095E70AE0BDF808 ++:106290002D00E881062C05D19DF82200A872BDF8DA ++:1062A00020002881002087E706A805F021FE0028AD ++:1062B00088D0FFF75CFE7FE72DE9F8439846DDE9DB ++:1062C000087614460D00814600D1FFDF0CB1012194 ++:1062D00000E0002105F1080004F0DEFC30800246F9 ++:1062E00000232146484602F067FC40B100973288FF ++:1062F00043462146484602F0DCFCBDE8F883072C03 ++:1063000001D01120F9E743F20400F6E72DE9F0434C ++:106310008DB00E46DDE9149805461C46174614213B ++:1063200006A817F05AFE012002218DF81C108DF8E6 ++:1063300018008DF81D80ADF8207064B1A178C907F0 ++:1063400009D08DF82200E088ADF82600A088ADF8CD ++:106350002400A0680A9001F0D6FE040023D06580D6 ++:106360000BA904A8CDE900010CAB00223146284658 ++:10637000FFF7A2FF002813D1049808368DE87100BA ++:106380000BAA494606A80C9B05F057F8064660780C ++:10639000000701D501F097FE5EB13046FFF71DFE04 ++:1063A0000DB0BDE8F08313212846FCF75BFB03200A ++:1063B000F6E704980090BDF82C300422002128460E ++:1063C00002F0EBFDECE7F0B58DB000240746099430 ++:1063D00006A80A94CDE904400725CDE900540794A6 ++:1063E00008940E460294039410232246384605F082 ++:1063F00025FE80B90BA8059007A90294CDE90341B9 ++:10640000CDE90054BDF8183000223146384605F079 ++:10641000F8FB002801D0FFF7AAFD0DB0F0BD05F094 ++:106420009DBA2DE9FC470546002600780C46B0468B ++:106430000D2871D2DFE800F0B2070EAA30C853531E ++:106440007188A68C970004B1FFDFA88880B201F0A4 ++:10645000CCFFA4E0A888042180B2814608F021FC8A ++:10646000074604B1FFDF07B9FFDF494607F108001F ++:1064700004F0ABFB01F047FE040008D0607840F068 ++:1064800008006070A4F8029001F01DFE88E013215E ++:106490004846FCF7E7FA97E004B9FFDF608804217B ++:1064A00008F0FFFB070000D1FFDFE888ADF800002F ++:1064B000002038809DF80000010704D5C00602D5F1 ++:1064C000A888388005E09DF80100400667D5A888B7 ++:1064D00078806078022640F0080060705FE0E8880D ++:1064E000ADF8000004B9FFDF9DF80100000604D5F7 ++:1064F0002878072806D0062828D0607840F00800C1 ++:1065000060704CE06088042108F0CBFB060000D1ED ++:10651000FFDFA888708019E040E004B9FFDF6088E1 ++:10652000042108F0BEFB070000D1FFDF07F10800DF ++:1065300005F04CFA90F0010F02D1E87900062ED553 ++:1065400060880226B880D8E704B9FFDF0226D4E7C6 ++:1065500004B9FFDF022661880122204601F089FF8D ++:106560004FF00108C9E7A88987B204B1FFDF686866 ++:1065700000902889ADF8040001226946384601F0F0 ++:1065800093FF0CE0002CB8D1FFDFB6E704B9FFDFC2 ++:10659000022660880021FFF735FBAEE7FFDF9CB1E4 ++:1065A0006078000710D5B8F1000F0DD120781422C3 ++:1065B00020F00F00001D20F0F000803020702946F0 ++:1065C00004F1080017F0B5FC3046BDE8FC873EB585 ++:1065D0000C0008D06B4601AA002105F0AEFD20B1E9 ++:1065E000FFF7C5FC3EBD10203EBD00202080A070FE ++:1065F0009DF8050002A900F00700FDF7F7FF50B96C ++:106600009DF8080020709DF8050002A9C0F3C200A3 ++:10661000FDF7ECFF08B103203EBD9DF80800607057 ++:106620009DF80500C109A07861F30410A0709DF8E1 ++:106630000510890961F3C300A0709DF80410890654 ++:1066400001D5022100E0012161F342009DF8001014 ++:1066500061F30000A07000203EBD70B514460646F0 ++:106660000D4651EA040005D075B108460CF0AAF9B0 ++:1066700078B901E0072070BD2946304605F0B8FD25 ++:1066800010B1BDE8704072E454B120460CF09AF9A4 ++:1066900008B1102070BD21463046BDE8704096E735 ++:1066A000002070BD2DE9FE4F05460C46007A0A31E8 ++:1066B000009104F108010291904600270C31821EDE ++:1066C0003E464FF0020B4FF0010A0191092A75D2A4 ++:1066D000DFE802F0F3F20574252577B6F400688848 ++:1066E000042108F0DEFA060000D1FFDF308810B187 ++:1066F00052270726E9E051271026002C7ED0688813 ++:10670000A08084F806A0A88900220099FFF7A5FFC1 ++:10671000002874D1A8892081288AE081F8E0B5F8A2 ++:106720001290072825D1E87B000622D5512709F1D0 ++:10673000140086B2002CE1D0A88900220099FFF74E ++:106740008CFF00287AD16888A08084F806B0A889D8 ++:10675000208184F80EA0288A2082A4F81290A88AAA ++:10676000009068884B46A969DDF8042001F0C1FA61 ++:10677000CEE0502709F1120086B2002C3ED0A88945 ++:1067800000220299FFF769FF002857D16888A0808E ++:10679000A889E080287A072811D002202073288A4F ++:1067A000E081E87B4B46C0096073A4F81090A88A8A ++:1067B0000090688804F11202A969D7E7A7E00120D8 ++:1067C000ECE76888042108F06CFAB5F812A05FEADB ++:1067D000000900D1FFDF09F1080005F0F7F890F09B ++:1067E000010F02D1E87B000627D50AF114005127DA ++:1067F00086B2002C7FD06888A08001E070E01DE0A8 ++:10680000A88900220099FFF728FF002816D184F8F4 ++:1068100006B0A88920810420A073288A2082A4F8C9 ++:1068200012A0A88A009068885346A969019A01F0CD ++:1068300060FAA989A9F802106AE00320BDE8FE8F7A ++:106840006888FAF7EBFD82466888042108F029FA87 ++:106850008146BAF1000F00D1FFDFB9F1000F00D17E ++:10686000FFDFB9F80400A0F57F41FF3902D05127BE ++:10687000142601E05027122694B36888A080502F78 ++:1068800006D084F806B0287B029901F042FA3FE076 ++:10689000287BA11D01F03DFA00219AF82300CDE9E3 ++:1068A00000010B46B9F8022068884946FFF72EFD23 ++:1068B0000028C3D12CE001E013E01FE0FE49A889C5 ++:1068C000C988814205D1542706264CB16888A0802A ++:1068D0001EE053270CE06888A080A889E08017E0BC ++:1068E00009E06888042108F0DCF900B9FFDF5527CA ++:1068F0000826002CEFD1A8F800600EE056270726E6 ++:10690000002CF8D0A889A0800020A07100E0FFDF53 ++:10691000A8F800600CB12780668000208EE7E64969 ++:1069200000200870704730B587B00C4608F082F937 ++:106930000546FF2800D1FFDF0020208060804FF651 ++:10694000FF70A080294604F1080004F025F902AA8E ++:106950002946012005F0C4FA1AE000BF9DF80B009B ++:10696000000715D5BDF80E002946FFF72CFD9DF850 ++:106970000B00FF2340F010008DF80B00BDF80B005A ++:10698000ADF80400BDF80E002946019A05F0FEFBA3 ++:1069900002A805F0ADFA0028E0D007B030BD0A46E5 ++:1069A000014602F1080004F016B970B5054604214D ++:1069B00008F077F9040000D1FFDF294604F1080050 ++:1069C000BDE8704004F001B9F0B58FB00C46074641 ++:1069D000FAF724FD060005D03078222805D20820D9 ++:1069E0000FB0F0BD43F20200FAE70CB1A08870B11D ++:1069F00001208DF81C0003208DF8200000208DF868 ++:106A0000210034B1A088ADF82800206803E00920F7 ++:106A1000E6E7ADF82800099001F075FB050007D006 ++:106A20006F800421384608F03CF9040007D105E0E6 ++:106A300013213846FCF716F80320D1E7FFDF06A93B ++:106A400004A8CDE900010CAB002221463846FFF72F ++:106A500033FC0028C4D104F10800049903908DE8A8 ++:106A6000A20096F8231006AA07A80C9B04F0E5FCE8 ++:106A700006466878000701D501F025FB1EB13046B7 ++:106A8000FFF7ABFAACE704980090BDF81830042289 ++:106A90000021384602F081FA4FF6FF71A1809FE78E ++:106AA0002DE9FF4F87B09846DDE9159793467E881C ++:106AB000DDF850A03046FAF7B1FC05460421304617 ++:106AC00008F0EFF8044605B9FFDF04B9FFDF08342A ++:106AD000CDE90464CDE90297CDE9008ADDE907023A ++:106AE00095F823105B4604F0E7F80BB0BDE8F08F93 ++:106AF0002DE9F04F9BB004464FF000086E48ADF80A ++:106B00005880ADF83080ADF85480A0F80480ADF81E ++:106B10001880ADF81C80ADF82480ADF82080007896 ++:106B200016460D464746012808D0022806D00328FD ++:106B300004D0042802D008201BB0D7E720460BF071 ++:106B4000FFFED0BB28460BF0FBFEB0BB60680BF02D ++:106B500042FF90BB606848B160892189884202D8B1 ++:106B6000B1F5007F01D90C20E6E780460BAA07A902 ++:106B70002846FFF78CFA0028DED168688078C0F3D9 ++:106B80004100022808D19DF81D0010F0380F03D0F5 ++:106B900028690BF017FF80B906A92069FFF72FFAC3 ++:106BA0000028C9D1206950B1607880079DF819008C ++:106BB00000F0380002D5E8B301E011E0D0BB9DF849 ++:106BC000180080060ED59DF8190010F0380F03D07C ++:106BD00060680BF0F7FE18B960680BF0FCFE08B1B6 ++:106BE0001020A9E708A96069FFF709FA0028A3D1D6 ++:106BF000606940B19DF8210000F0070101293BD1F7 ++:106C000010F0380F38D009A9A069FFF7F8F900286B ++:106C100092D19DF8200080062ED49DF82400800695 ++:106C20002AD4A06950B19DF8250000F00701012980 ++:106C300022D100E020E010F0380F1DD0E06818B13C ++:106C40000078C8B11C2817D20FAA611C2046FFF794 ++:106C500045FA0120B94660F30F27BA4607468DF87A ++:106C6000520042F60300ADF850000DF13F0218A9A2 ++:106C7000286809F0F4FC08B107205DE79DF8600082 ++:106C800017A9CDF80090C01CCDE9019100F0FF0BD1 ++:106C900000230BF20122514614A805F066F8E8BB68 ++:106CA000BDF85C000E9004492A892869091D0092EC ++:106CB000CDE901016B8901E010030020BDF82C2013 ++:106CC0002868079905F051F801007DD120784FF030 ++:106CD000020AC10601D480062BD5ADF80C9060697C ++:106CE00050B908A907A8FFF72AFA9DF8210020F05B ++:106CF0000700401C8DF821009DF820008DF852708F ++:106D000040F0C8008DF8200042F60210ADF85000A7 ++:106D10000CA903AA0023CDF800A000E021E0CDE9F2 ++:106D2000012140F2032214A8089905F01EF8010081 ++:106D30004AD1FE484D465B468088ADF83D000FA81D ++:106D4000CDF80890CDE90390CDF814904FF00709E5 ++:106D5000CDE900950022FF21BDF85C0004F051FF51 ++:106D600010B1FFF704F9E7E69DF83C00000625D5D1 ++:106D70002946012060F30F218DF852704FF4245002 ++:106D8000ADF85000ADF8105062789DF81000002367 ++:106D900062F300008DF810006278CDF800A0520870 ++:106DA00062F341008DF8100004AACDE9012540F2FC ++:106DB000032214A804F0D9FF010005D1606850B384 ++:106DC000206970B906A900E07EE007A8FFF7B7F9CF ++:106DD0006078800705D49DF8190020F038008DF800 ++:106DE00019008DF8527042F60110ADF8500020895C ++:106DF00040F20121B0FBF1F201FB1202606815AB19 ++:106E0000CDF80080CDE90103002314A8069904F011 ++:106E1000ACFF010058D12078C00729D0ADF80C5044 ++:106E2000A06950B909A907A8FFF789F99DF82500BD ++:106E300020F00700401C8DF825009DF824008DF8F7 ++:106E4000527040F040008DF8240042F60310ADF877 ++:106E5000500016A903AACDF800A0CDE90121002316 ++:106E600040F2032214A8099904F07FFF01002BD1FE ++:106E7000E06868B32946012060F30F218DF8527055 ++:106E800042F60410ADF85000E068002302788DF857 ++:106E9000102040788DF81100E06804AA4088ADF811 ++:106EA0001200E06800798DF81400E068C088ADF841 ++:106EB0001500CDF80090CDE901254FF4027214A819 ++:106EC00004F053FF010003D00E9800F035FF33E6C5 ++:106ED00096480321017056B180883080BDF8540077 ++:106EE0007080BDF83000B080BDF85800F080002000 ++:106EF00022E670B501258AB016460B46012802D05D ++:106F0000022816D104E08DF80E504FF4205003E013 ++:106F10008DF80E5042F60100ADF80C0063B100246C ++:106F2000601C60F30F2404AA08A9184609F097FB17 ++:106F300020B107200AB070BD1020FBE704A99DF81E ++:106F400020207A48CDE90021801C029000232146B0 ++:106F500003A802F2012204F008FF10B1FFF707F8BE ++:106F6000E8E772480EB14188318005700020E1E702 ++:106F700070B594B0044601268DF83E6041F60100DC ++:106F8000ADF83C0012AA0FA93046FFF7B2FF002867 ++:106F900048D12078654CC0074FF0000544D01C2133 ++:106FA00002A817F01AF89DF808008DF83E6040F02E ++:106FB00020008DF8080042F60520ADF83C000E9543 ++:106FC0009DF83A00119520F00600801C8DF83A00DB ++:106FD0009DF838006A4620F0FF008DF838009DF8D3 ++:106FE000390009A920F0FF008DF839000420ADF820 ++:106FF0002C00ADF830000EA80A9011A80D900FA833 ++:107000000990ADF82E5002A8FFF772FD002809D1B3 ++:10701000BDF80000E080BDF804002081401C6081C4 ++:107020002570002014B070BDE5802581BDF84800B2 ++:10703000F4E72DE9F74F3D49A2B04FF000080A7878 ++:10704000012A04D0022A02D0082025B04EE54A8841 ++:10705000824201D00620F8E723988A46824201D175 ++:107060000720F2E701208DF8760042F6020B00249B ++:10707000ADF874B0ADF84C004FF6FF702146621CBD ++:1070800062F30F21ADF84E00ADF8560007918DF870 ++:107090007A40FF20ADF878401EA98DF85400149175 ++:1070A00013A804F049FF00252E462F460DF12809AC ++:1070B0000EAB4FF6FF72072113A804F040FF78B122 ++:1070C00082285FD1A5B39EB39DF86600ADF86C50E1 ++:1070D0008DF81840ADF86E601BAC012866D06DE0ED ++:1070E0009DF83E002FB301285BD1BDF83C105945F7 ++:1070F00021D11AA8CDE904900720CDE9000402941B ++:107100000394BDF83A0010230022FF2104F096FFFB ++:10711000C0BBBDF86800042801D006284CD1BDF8DA ++:107120002810239881423CD10F208EE710030020C5 ++:107130003AE0012835D1BDF83C00B0F5205F03D01E ++:1071400042F6010188422CD1BAF80210BDF83A008B ++:10715000814201D1012700E0002705B19EB12399AA ++:1071600088421ED11AA9CDE904910721CDE9001466 ++:1071700005460294039410230022FF2104F05EFFD1 ++:1071800000B902E02DE046460BE0BDF86800022899 ++:1071900001D0102810D1C0B219AA0AA909F040FAEA ++:1071A00050B9BDF83A8083E705204EE706A919A833 ++:1071B000221D09F054FA08B1032046E79DF8180093 ++:1071C0000023001DC2B28DF8182024980092CDE94A ++:1071D00001401DA8079904F0C8FD10B902228AF8E1 ++:1071E0000020FEF7C4FE30E710B50B46401E88B005 ++:1071F00084B206AA00211846FEF770FF07A906AA66 ++:10720000CDE9042100200721CDE900100290039070 ++:1072100002460123FF21204604F0F3FC0446BDF89A ++:107220001C00012800D0FFDF2046FEF7A0FE08B0BA ++:1072300010BDF0B5F84F044687B038780E460328E5 ++:1072400004D0042802D0082007B0F0BD04AA03A986 ++:107250002046FEF71CFF0500F6D160688078C0F379 ++:10726000410002280AD19DF80D0010F0380F05D01A ++:1072700020690BF0A7FB08B11020E5E7208905AADB ++:1072800021698DE807006389BDF810202068039903 ++:1072900004F06BFD10B1FEF76AFED5E716B1BDF83C ++:1072A00014003080042038702846CDE738B50C0033 ++:1072B000054608D000236A46FF2104F03EFF20B1B6 ++:1072C000FEF755FE38BD102038BD69462046FEF752 ++:1072D00096FE0028F8D1A078FF2100F0010328468F ++:1072E000009A04F053FFEBE730B587B01446002254 ++:1072F0000DF10C0C06AD02928CE82C000723CDE9B1 ++:1073000000320A462388FF2104F07BFCBDF81810E8 ++:107310002180FEF72CFE07B030BD70B50D4604216C ++:1073200007F0BFFC040000D1FFDF294604F108008C ++:10733000BDE8704003F070BC70B50D46042107F045 ++:10734000B0FC040000D1FFDF294604F10800BDE8CD ++:10735000704003F084BC70B50D46042107F0A1FC19 ++:10736000040000D1FFDF294604F10800BDE87040A9 ++:1073700003F092BC70B50D46042107F092FC0400A6 ++:1073800000D1FFDF294604F10800BDE8704003F09A ++:107390008DBC0121FEF736BC2DE9F04196B04FF0CF ++:1073A00000050C008046ADF818501CD0E06828B1EC ++:1073B000A068C0B10188ADF8181005804046FAF702 ++:1073C0002DF8070011D03878222861D3404607F005 ++:1073D00031FC0146A07801280AD0022808D00720F5 ++:1073E00016B0BDE8F0811020FAE743F20200F7E79B ++:1073F000208830B1401C80B207AA04F071FD50BB58 ++:1074000002E043F20300EBE707A804F071FD9DF8EA ++:1074100026204FF45051012A09D1BDF82420A2F5AD ++:107420002453023B03D1822801D0A0B901E00846D1 ++:10743000D6E7E068B0B106A9CDE904010720CDE99F ++:10744000000502950395A2882088BDF81830FF2119 ++:1074500004F0D7FB10B1FEF78AFDC1E7A168BDF8C3 ++:10746000180008809DF81F00C00602D543F20140B5 ++:10747000B6E70B9818B1BDF82800022801D0032008 ++:10748000AEE70B98A1780078012903D0800706D4D5 ++:107490000820A5E7C007FBD00726022001E001264F ++:1074A00003208DF83C009DF8200010F0380F00D12B ++:1074B000FFDF9DF820005949C0F3C200084497F847 ++:1074C000231010F8010C884201D90F2088E720888A ++:1074D000ADF840000421404607F0E3FB040000D172 ++:1074E000FFDF0DA90CA8CDE900010EAB3246214605 ++:1074F0004046FEF7E1FE002885D108340C9903943C ++:107500008DE822010DAA07210FA80E9B03F095FF1D ++:1075100010B1FEF762FD63E70C980090BDF83430BF ++:1075200004223146404601F038FD59E770B5064661 ++:1075300015460C460846FEF7D9FC002805D12A4618 ++:1075400021463046BDE87040D3E470BD71E570B5AA ++:107550001E4614460D0009D044B1616831B138B1FE ++:107560002D494988814203D0072070BD102070BD8D ++:107570002068FEF7BBFC0028F9D132462146284698 ++:10758000BDE87040FFF7B4BA70B515460C0006D0E0 ++:1075900038B121498988814203D0072070BD10206D ++:1075A00070BD2068FEF7A2FC0028F9D129462046CC ++:1075B000BDE870403DE670B5054686B00E461446FF ++:1075C00010460BF0E1F930BB60680BF004FA10BB19 ++:1075D000A5F57F40FF3803D02846F9F71FFFA0B17B ++:1075E000284607F027FB054630466946FEF7C9FDE9 ++:1075F00000280CD19DF810100F2008293FD2DFE899 ++:1076000001F008060606060F0F0843F2020006B056 ++:1076100070BD0320FBE743E0100300206AE3010094 ++:107620009DF80210012908D1BDF80010B1F5C05F26 ++:10763000EDD06FF4C052D142E9D09DF80610012977 ++:107640000BD1BDF80410A1F52851062905D2DFE8B9 ++:1076500001F0030304030303D9E79DF80A1001298D ++:107660000ED1BDF80810B1F5245FD0D0A1F524519A ++:107670000239CCD00129CAD0022901D1C7E7FFDFE6 ++:10768000606878B9002305AA2946304604F055FD04 ++:1076900010B1FEF76CFCBAE79DF81400800601D427 ++:1076A0001020B4E76188224630466368FFF71CFE6D ++:1076B000ADE72DE9F043044689B0894615461046EA ++:1076C0000BF062F918B1102009B0BDE8F083204634 ++:1076D00007F0B0FA4FF6FF770646BC4201D0FF2E06 ++:1076E00009D00146002307AA484604F026FD28B128 ++:1076F000FEF73DFCE8E743F20200E5E79DF81C00D9 ++:10770000C00602D543F20140DEE7002406A8CDE919 ++:1077100004404FF00708CDE90084029403946A887E ++:107720003B463146484604F089FC070014D168689E ++:107730000BF02AF968B968680294CDE90340059412 ++:10774000CDE900842B886A883146484604F076FCEF ++:107750000746BDF8180028803846C9E739B1FA4B0A ++:107760000A881B899A4202D843F20300704713E645 ++:1077700010B586B0F44C0423ADF81430E38843B15F ++:1077800024898C4201D2914205D943F2030006B00C ++:1077900010BD0620FBE7ADF810100021009101910B ++:1077A000ADF8003002218DF8021005A9029104A95C ++:1077B0000391ADF812206946FFF7EEFDE7E72DE9EA ++:1077C000FC4781460F4608460BF0BAF888BB48468E ++:1077D000F9F724FE5FEA00080AD098F80000222892 ++:1077E00029D30421484607F05CFA060005D103E0DE ++:1077F00043F20200BDE8FC87FFDF06F1080003F05A ++:1078000012FA05463878012803D0022804D0072050 ++:10781000F0E7A8070FD502E015F0340F0BD0B879C8 ++:107820003C1DC00709D0E08838B1A0680BF088F88B ++:1078300018B11020DEE70820DCE73A782088002124 ++:1078400028B3A0F201130721112B18D20CD2DFE8C4 ++:1078500003F00B090D0B1D0B121D100B0B1D1D1D35 ++:107860001D0B1D00022A11D10846C3E7012AFBD0D7 ++:107870000CE0EA0600E0AA06002AF5DA06E0A0F528 ++:10788000C0721F2A02D97D3A022AEDD8C1B298F8F7 ++:107890002300CDE900017288234631464846FEF7B1 ++:1078A00035FDA7E72DE9FF4F8DB01E4615460C4666 ++:1078B0004FF000080F460D98F9F7B0FD30B1007891 ++:1078C000222806D2082011B0BDE8F08F43F2020052 ++:1078D000F9E7B00801D00720F5E7032E00D1002614 ++:1078E0000D9807F0A7F94FF6FF7A0690CCB1022D5C ++:1078F00074D320460BF06FF830B904EB0509A9F1F9 ++:1079000001000BF068F808B11020DCE7AD1EAAB248 ++:107910002146504604F022FD39F8021C88425DD110 ++:10792000ADB28948B10702D50189491C00E00121A7 ++:107930001FFA81F9F10701D0068900E0564607AA2F ++:107940004846069904F0CCFA4FF0070B4FF0000AB6 ++:107950000BE07888102841D808F1040108441FFA88 ++:1079600080F8A8453AD804EB08077FB33988494521 ++:10797000EFD353E09DF81F100A074FD544B304EB33 ++:10798000080708F104027B881FFA82F8102B25D81B ++:1079900003EB0802AA4221D83A8890421ED1C806B9 ++:1079A0001ED50DF10C090CAA04EB08015046CDF8C8 ++:1079B00008A089E80700CDE900BA388800220699B6 ++:1079C00004F01FF928B1FEF7D2FA7CE726E005E0C3 ++:1079D0000CE07888BDF83010884201D00B2072E7A7 ++:1079E000798801EB08001FFA80F806E0C90604D583 ++:1079F0000699FEF7E8FC002887D19DF81F00FF23B9 ++:107A000020F010008DF81F00BDF81F00ADF8000039 ++:107A1000BDF82200009A069904F0B8FB07A804F00C ++:107A200067FA18B9BDF82200B042A3D904210D9815 ++:107A300007F037F9040000D1FFDF22885AB1CDE901 ++:107A400000BA5546002321460D98FEF75FFC00283A ++:107A5000BBD1258037E7002035E72DE9F04F8DB009 ++:107A60001E4617000D464FF000041BD0B10802D08F ++:107A700007200DB028E7032E00D1002607F0DAF822 ++:107A80008046FF2805D07DB128460AF09BFF48B903 ++:107A900002E043F20200ECE73988681E08440AF06D ++:107AA00091FF08B11020E4E72749B00701D54889C4 ++:107AB00000E00120F2074FF6FF7902D04989491E04 ++:107AC00000E049468EB207AA414604F009FA4FF099 ++:107AD000000B4FF0070A3EE09DF81F0000073AD563 ++:107AE00006A9CDE904B1CDF808B0CDF80CB04B46ED ++:107AF00000224146CDE900AB604604F09FFA08BB86 ++:107B000025B3BDF818103A8821442819091D8A4266 ++:107B100034D3BDF8222020F8022BBDF8182020F81D ++:107B2000022B06AA0592CDF808B0CDE903B0CDE945 ++:107B300000ABBDF82200BDF818300022414604F029 ++:107B40007DFA18B1032094E710030020BDF8180057 ++:107B50002044001D84B207A804F0CAF920B182288D ++:107B600006D0FEF704FA84E7BDF822C0B445B3D9C5 ++:107B700034B175B13988A01C814203D20C2078E75A ++:107B8000052076E722462946484604F0E7FB2919F6 ++:107B90000880A41C3C8000206BE710B504460AF066 ++:107BA000F3FE08B1102010BD6948408920800020F4 ++:107BB00010BD2DE9F041A4B00C4606464FF0000878 ++:107BC000142105A816F009FA01208DF818008DF887 ++:107BD000140000278DF81970ADF81C403046F9F7F5 ++:107BE0001DFC30B10078222806D2082024B0BDE860 ++:107BF000F08143F20200F9E70421304607F051F822 ++:107C0000050000D1FFDF0AA904A8CDE9000116ABE9 ++:107C1000002229463046FEF74FFB0028E6D10498A3 ++:107C20000835CDE90007CDE902650AAA072105A8B4 ++:107C3000169B03F002FC10B1FEF7CFF9D6E70498CB ++:107C40000090BDF8283004224146304601F0A5F9E5 ++:107C500000B1FFDF21463046FDF7C6FF17A92846D1 ++:107C600002F0D0FF00B1FFDFBDF85C00172801D2A1 ++:107C7000172100E00146A14204D8172801D2172499 ++:107C800000E0044621463046FFF756FB05462146F4 ++:107C90003046FDF702FD4146304601F02BFB00B9AE ++:107CA000FFDF25BB3046F9F7B9FB050000D1FFDF48 ++:107CB00095F822001B281AD9172C18D93A208DF8CC ++:107CC0002C00ADF82E6095F82200211D884201D9C4 ++:107CD000241D00E00446ADF8304040F64800ADF801 ++:107CE000320018A90BA804F0C0FA00B1FFDF002091 ++:107CF0007CE7F8B51C4615460E46069F07F034F99A ++:107D00002346FF1DBCB231462A46009406F04CFDC6 ++:107D1000F8BD70B50C4605460E21204616F03BF91D ++:107D2000002020802DB1012D01D0FFDF70BD062085 ++:107D300000E00520A07170BD10B50C4604F09DF860 ++:107D400000B1FFDF2046BDE81040FEF710B900008B ++:107D50001003002010B50446007896B0022805D024 ++:107D6000012803D043F2050016B010BDA17889297F ++:107D70000AD06078892807D021B1032902D808B138 ++:107D8000032801D90720EFE74D208DF80000207867 ++:107D9000022801D0012000E000208DF80200607868 ++:107DA00000F0D7FDC01D8DF80300A078012815D084 ++:107DB00000F0CFFD10F101008DF80400607800F0B4 ++:107DC000C8FD8DF80500A07800F0C3FD8DF8060011 ++:107DD0009DF805200621102A04D005E0022000F0BD ++:107DE000B8FDE9E78DF80510102801D18DF80610CF ++:107DF0002078012804D19DF80300401C8DF8030071 ++:107E000002F0E0F8001DADF808000BA9684604F088 ++:107E10002CFA00B1FFDF0020A6E72DE9FF4FFF4954 ++:107E200091B00600D1E900010396CDE90C01507A2A ++:107E3000117A9B4608441546C7B222D05FF0000471 ++:107E40004FF00009CDF81C900520ADF81C001F2054 ++:107E5000ADF81E00F2A00690CDF81490F01D8DF83C ++:107E600014904FF0010A20F007008DF815A0B042E1 ++:107E700000D0FFDF28880399401C1FFA80F814B156 ++:107E800007E00124DCE708F0FF0008F06FFB00B119 ++:107E9000FFDF03993A4601EB0810C01C20F00301F4 ++:107EA000D5F8188003913CB981F800901FFA88F04A ++:107EB00003F06EFE00B1FFDF0399234601EB0800DB ++:107EC0000390A87A297A3A460844C1B203A800F080 ++:107ED0008EFD0398C01C20F003000390697A009186 ++:107EE0002B7AAA7A04B1002002A906F0B6FD00B1EF ++:107EF000FFDFBDF8081003980DF1780808443A46F2 ++:107F000098E88A00C01C20F00300CDE90270CDE99A ++:107F1000001304B100205B4608A906F029FF00B158 ++:107F2000FFDF089903980844C01D20F00700039064 ++:107F30001299821B002C0A603AD1BC4ABA491160DE ++:107F4000111D401E086001232C220EA9B84806F01E ++:107F500005FD00F00CFD00211E22084602F042F84B ++:107F6000FAF7A4F900F075FFFEF7D9FCE8680CAA4F ++:107F7000214620B1FBF755F830B1FFDF04E005A83A ++:107F8000FBF74FF800B1FFDF05F11400FEF7F0FF3B ++:107F900000B1FFDF4FF49671A64816F01EF8A54811 ++:107FA000022180F829A180F82A11062180F82B11DE ++:107FB00015B0BDE8F08F10B59E4CA078092800D30D ++:107FC000FFDF207804EB401010F8041F21F0FF01C0 ++:107FD0000170417821F00701C91C21F0180141709E ++:107FE0000121E17010BD2DE9F04105460C46002746 ++:107FF0000078052190463E46B1EB101F00D0FFDF10 ++:10800000287A58B1012810D0FFDF00BFA8F800601F ++:108010000CB1278066800020BDE8F0810227092688 ++:108020007CB1A889A080A87B09E00327142644B16D ++:108030006888A0802869E060A88A2082287B207256 ++:10804000E4E7A8F80060E6E700B597B04E218DF8A8 ++:10805000001000780BA900F001008DF802006846BE ++:1080600004F003F917B000BD00B5017897B001F036 ++:1080700001018DF80210417801F001018DF8031023 ++:108080000178C1F340018DF804104178C1F340013B ++:108090008DF80510017889088DF806104178890857 ++:1080A0008DF8071081788DF80810C1788DF80910C7 ++:1080B00000798DF80A004A208DF800000BA9684667 ++:1080C00004F0D3F8CEE770B55A4CE078002819D008 ++:1080D0002078002504EB4010407900F007000119DA ++:1080E00091F82801401E81F828012078401CC0B278 ++:1080F0002070092800D12570A078401CA07009F0DC ++:10810000BAFFE57070BD4B4890F82B01002800D0F5 ++:1081100051E770472DE9F043464D9BB05FF00006F4 ++:10812000D5F8240168B1FFF7EEFF002875D02022B2 ++:10813000D5F8241115F0FDFEFFF7C5FFC5F8246141 ++:10814000EEE795F82901002867D0FFF734FF0446D1 ++:10815000374806F034FC606000B9FFDF606804F067 ++:10816000D1F888B12046F9F7C6FB6078010706D53B ++:1081700020F00700401C6070FFF7A5FFD0E72C48F7 ++:10818000616806F025FCCBE72948616806F020FC11 ++:1081900001A800F0B9FC00286BD10321BDF8040050 ++:1081A00006F07FFD8046BDF8040006F0DDFE0746C0 ++:1081B000B8F1000F00D1FFDFD8F8040010B100784B ++:1081C000FF2856D0FFF7F7FE0446384606F08FFA30 ++:1081D000606000B9FFDF606800F104090671BDF856 ++:1081E00004006080204600F02CFF384606F04FFB6C ++:1081F00000B9FFDF47208DF81000BDF80400ADF88E ++:10820000120004A805F0D9FE10A804F0DEFA607888 ++:10821000010711D4C00615D417E02AE070E301006D ++:108220006E52463578000000000000200006024033 ++:10823000780500204C04002020F00700801C6070AE ++:10824000FFF741FFC8F804906AE7D8F8040038B196 ++:108250000178491C11F0FF0101708FD1FFDF5FE74A ++:1082600000221146384600F072FB002886D1FFDF5D ++:1082700056E71BB0BDE8F08310B5FE4CA06008685F ++:10828000E060AFF26F1001F0F6FD607010BDF949CB ++:1082900000200870704730B505464FF080500C46FE ++:1082A000D0F8A41097B0491C05D1D0F8A810C94344 ++:1082B0000904090C08D050F8A01F01F00101297031 ++:1082C0004168216080680EE02B208DF800000BA92A ++:1082D000684603F0CAFF00B1FFDF012028700C9848 ++:1082E0002060BDF83400A0802878002803D0607991 ++:1082F00040F0C000607117B030BDF0B54FF0805451 ++:108300000746D4F8800097B00D462B26401C0BD1B1 ++:10831000D4F88400401C07D1D4F88800401C03D155 ++:10832000D4F88C00401C0BD0D4F880003860D4F80E ++:1083300084007860D4F88800B860D4F88C0016E027 ++:108340008DF82C6069460BA803F08FFF00B1FFDFAA ++:1083500001983860029878608DF82C6069460BA807 ++:1083600003F083FF00B1FFDF0198B8600298F86066 ++:10837000D4F89000401C0BD1D4F89400401C07D1D5 ++:10838000D4F89800401C03D1D4F89C00401C08D0BD ++:1083900054F8900F286060686860A068A860E06882 ++:1083A00016E08DF800600BA9684603F05EFF00B18F ++:1083B000FFDF0C9828600D9868608DF800600BA9AD ++:1083C000684603F052FF00B1FFDF0C98A8600D98DB ++:1083D000E86017B0F0BD30B5A74C0546D4F82401CD ++:1083E00000B1FFDFC4F8245130BD3EB5054603217E ++:1083F00006F057FC0446284606F0B6FD054604B9CB ++:10840000FFDF606818B10078FF2800D1FFDF01AA04 ++:108410006946284600F09BFA60B9FFDF0AE00022B7 ++:1084200002A9284600F093FA00B9FFDF9DF8080082 ++:1084300000B1FFDF9DF80000411E8DF80010EED264 ++:1084400060680199884201D1002060608A4C94F8EC ++:108450002A01022800D3FFDF94F82A01401CC0B291 ++:1084600084F82A01012803D18248407801F022FDD6 ++:108470003EBD70B50446A1F57F4016460D46FF3857 ++:1084800000D1FFDF012E01D0FFDF70BD207820F08A ++:108490000F00401D20F0F0005030207000202072AE ++:1084A000A5810120A07370BD70B515460C46064627 ++:1084B000FFF729FE90B1017821F00F01491D21F04D ++:1084C000F001503101704680012101722168016183 ++:1084D000A18881820573BDE87040F4E53046BDE8AF ++:1084E00070401321FAF7BEBA70B505460C4608462F ++:1084F0000AF04AFA08B1102070BD2846F8F78EFF3E ++:1085000028B1284600F0E7FE2070002070BD43F23D ++:10851000020070BD2DE9F04F04465648894687B0E9 ++:10852000017811B1082007B043E552485349416032 ++:1085300020460AF029FA002875D148460AF024FAA4 ++:10854000002870D1637A217A5818FF287DD82088B6 ++:10855000FE287AD800B90A202080A06908B94FF413 ++:10856000B060A0616068A0B14578827805EB4505F0 ++:108570002A440578067905EB450502EB4502457965 ++:10858000C07805EB450505EB8605C0EBC000284427 ++:1085900009E003EB430001EB410200EB4202C1EBB7 ++:1085A000C10505EB830086B2C3EBC3001044C1EBE9 ++:1085B000C1021044084487B2208A01F0F9FC002867 ++:1085C000B1D101F0FFFC001D7843059001F0FAFCE9 ++:1085D000001D00FB06F8E168A06900F041FA5FEABF ++:1085E000000AA0D1A17A607A81422ED84FF0120BF6 ++:1085F00008280ED8207A01280BD808F022F9054661 ++:1086000009F0F8FC2A1A217A607A521E0B189A4255 ++:1086100001DA584687E765688B460090BDB1284669 ++:108620000AF0D9F908B110207DE7A97868780844E4 ++:108630002978421800985844904206D16A792979DD ++:108640001144EA781144884201D007206BE7CDF845 ++:108650000080CDE90176224603A90020059BFFF7A3 ++:10866000DCFB044D039AD9F8003068681118994270 ++:1086700009D805E01C0000204C040020481300200D ++:10868000B2F5803F03D30420C9F800104BE7CDF8C2 ++:108690000080CDE90176224604A9059BFFF7BDFBCA ++:1086A000DDE90301884200D0FFDF049869680844CF ++:1086B0006860C9F80000FF49012028700870504622 ++:1086C00031E72DE9F04707460C4608460AF05CF909 ++:1086D00040B938460AF076F920B9F81C20F00300BA ++:1086E000B84202D01020BDE8F087F3484FF00008F0 ++:1086F000817889B14178824600EB4115B4F8009049 ++:1087000015F8040F234600F00F000022294600F060 ++:1087100037FA060004D013E0A4F800800520E2E751 ++:1087200097B12188494501D90C260DE028782346C8 ++:1087300000F00F003A46294600F022FA060005D064 ++:108740000C2E01D0A4F800803046CCE79AF8010046 ++:108750005446401CC0B28AF80100092801D184F8AF ++:108760000180A078401EA070687800F00701012900 ++:108770000BD0022903D0032918D0FFDFE4E7C0069D ++:10878000E2D46888FFF731FEDEE7CC48696806F07E ++:108790001FF994F82901401CC0B284F8290101286E ++:1087A000D2D1C748407801F085FBCDE794F82B0182 ++:1087B000401C8AF82B01C7E770B50D4604460AF045 ++:1087C000BFF818B928460AF0DFF808B1102070BDCC ++:1087D00029462046BDE8704007F0FFBE70B504464C ++:1087E00015460E4608460AF0ABF818B928460AF0B6 ++:1087F000CBF808B1102070BD022C03D0102C01D092 ++:10880000092070BD2A463146204607F009FF00289E ++:10881000F7D0052070BD70B514460D4606460AF027 ++:108820008FF838B928460AF0AFF818B920460AF090 ++:10883000C9F808B1102070BD22462946304607F01D ++:108840000EFF0028F7D0072070BD10B596B0044683 ++:108850000AF09AF810B1102016B010BD0F208DF854 ++:1088600000000BA9684603F000FD0028F4D19DF834 ++:1088700034002070BDF836006080BDF83800A0805C ++:108880000020E9E770B505460C4608460AF09AF85C ++:1088900020B93CB120680AF077F808B1102070BD0B ++:1088A000A08828B121462846BDE87040FEF78CB864 ++:1088B000092070BD70B504460D4608460AF040F820 ++:1088C00030B9601E1E2814D828460AF039F808B1BD ++:1088D000102070BD032C01D9072070BD04B9FFDF43 ++:1088E000784800EB840050F8041C2846BDE870402E ++:1088F0000847A4F120001F28EED829462046BDE8ED ++:108900007040F9F70EBC70B504460D4608460AF0F3 ++:108910003BF830B9601E1E280FD828460AF010F820 ++:1089200008B1102070BD012C03D0022C01D0032C03 ++:1089300001D1062070BD072070BDA4F120001F28C2 ++:10894000F9D829462046BDE87040F9F76EBC05F01D ++:108950006ABD892805D0032805D0022805D001204A ++:10896000704710207047062070470320704710B5ED ++:1089700096B003F06BFC52484178806803F064FEC7 ++:108980004F4801240C300178012916D13E218DF881 ++:108990000010C0788DF8020010B1012803D005E066 ++:1089A0008DF8024002E000208DF80200684605F0D4 ++:1089B00004FB10B10BA803F008FF02208DF82C0077 ++:1089C0008DF82D008DF82E000BA8FFF7C3F900B12C ++:1089D000FFDF8DF82C4003208DF82D008DF82E0040 ++:1089E0000BA8FFF7B7F9002800D0FFDF34E72DE927 ++:1089F000F0410646022012B101EB4200401DC7B211 ++:108A00003068C01C20F0030232601BBB2A483B4682 ++:108A10000921243809F085FE002408E0092C11D230 ++:108A2000DFE804F005070509090B0B0505002648DA ++:108A300004E0264802E0264800E0264809F090FEBF ++:108A4000054600E0FFDFA54200D0FFDF641CE4B272 ++:108A5000092CE3D3306800EB07103060BDE8F081EB ++:108A600038B50C00054604D0084609F069FF00BB84 ++:108A700002E0F62844D345E0606809F061FFC0B920 ++:108A8000607800F00300012803D0022801D00720FD ++:108A900038BD69462046FBF78DFD0028F8D1607887 ++:108AA00000F0030002281CD19DF80000C8B16068E6 ++:108AB00012E014E0080000204C040020780500209B ++:108AC0001C00002090E30100771F0000F18E0000E1 ++:108AD000CB9F00002103010009F074FF08B11020B2 ++:108AE00038BD6089F8280BD82189814208D861787F ++:108AF00001F00301012905D1D73080B2A84201D984 ++:108B0000092038BD002038BD2DE9F04397B08146DB ++:108B100046208DF82C0069460BA803F0A6FB00B197 ++:108B2000FFDF43F2040600246D46DFF884801FE077 ++:108B30002F19B87DC10706D0400704D405EB4400C7 ++:108B4000C08800F0B9FB98F82A0178B1B87D800799 ++:108B50000CD505EB4400C08800F037FA30B105EBC6 ++:108B600044000026C188A9F8001005E0641CE4B2A6 ++:108B70009DF80400A042DBD817B03046BDE8F08372 ++:108B80002DE9F041044600201880601E1D4616465F ++:108B90000F46052800D3FFDF06482A4600EB840075 ++:108BA000314650F8043C3846BDE8F0411847000013 ++:108BB0004C04002078E301002DE9F0478A469846EE ++:108BC00015460646032106F06CF80446304606F0CA ++:108BD000DDF90C35AFB2002581462E4604B9FFDF22 ++:108BE000B9F1000F00D1FFDF04EB8A000189B9421F ++:108BF00000D30125218CB94202D2BAF1060F00D36D ++:108C0000012638EA050104D0817A41F0020181721F ++:108C10000BE038EA060108D0817A41F00401817244 ++:108C200014F8220F40F00400207005EA0600BDE8A9 ++:108C3000F0872DE9F0478246DDE90846174604F142 ++:108C40000C0099460D461FFA80F80023224639464B ++:108C50005046FFF7B1FF60B1A87800061BD426F894 ++:108C6000044C26F8029C504606F090F9060008D104 ++:108C700006E0072F01D01120D9E743F20400D6E720 ++:108C8000FFDF241D3046A1B205F0CCFA00B9FFDFAA ++:108C9000504603F03DFC05EB8700062F0289A2EB4E ++:108CA0000801018103D2298CA1EB0800288400204F ++:108CB000BDE72DE9F8431D4617460E46DDF8208036 ++:108CC00006F064F9040019D03F1DB9B205F05AFA54 ++:108CD0002860B0B1067120466A46296805F016FD85 ++:108CE000009800210A460180817003F0D1FC0098B1 ++:108CF000C01DC8F800000020BDE8F88343F2020060 ++:108D0000FAE7072E01D01120F6E743F20400F3E75B ++:108D10002DE9F04F0F46054687B0164650880321CF ++:108D200005F0BFFF040000D1FFDF4FF000098DF810 ++:108D30000890A078400600D1FFDF042F53D3297894 ++:108D400041F30000401C06D162786B789A424AD108 ++:108D50002278120747D04FF0010B4FF00208142978 ++:108D600039DA4FF6FF7A012933D0122902D01329BC ++:108D700031D11CE00C2F2ED1A17801F07F01012907 ++:108D800029D0207820F00F00401C20706878607097 ++:108D90008DF808B0A888ADF80A00E888ADF80C0096 ++:108DA0002889ADF80E006889ADF8100016E0062F8E ++:108DB00011D1207820F00F0020707188012009F077 ++:108DC0007CFD8DF80880ADF80AA0A888ADF80C00ED ++:108DD00004E0062F0AD09DF80810B9B17088324619 ++:108DE00002A9F9F73AF907B0BDE8F08F207820F032 ++:108DF0000F0020707188012009F05FFD8DF8088058 ++:108E0000A888ADF80A00ADF80CA0E7E70028EAD082 ++:108E1000768805A8009006AB062204213046FFF7AD ++:108E200048FF00B1FFDF05980523042280F800B059 ++:108E300069784170A0F80280A0F804900621CDE97D ++:108E4000001021463046FFF7F4FE0028CBD0FFDFAC ++:108E5000C9E710B501F0B6F80021FF4B0A4600BF84 ++:108E600023F81120491C0829FAD3FB4A00F10C0110 ++:108E70001032400011805180183090804D20D080F9 ++:108E800011815181C1EBC100908110BD70B50C46BC ++:108E9000897821F0FF01A170217821F00F01217064 ++:108EA000012161700021616006F070F8050000D1B9 ++:108EB000FFDF284605F064F9E74910318989401A37 ++:108EC00020852046BDE8704000F014BB70B50D460B ++:108ED000032105F0E6FE040000D1FFDFA07865F372 ++:108EE0000600A07070BD70470146012009F0E5BC86 ++:108EF0003EB58DB20321284605F0D3FE040000D113 ++:108F0000FFDF2078002220F00F00207002208DF873 ++:108F100000004FF6FF70ADF80200ADF8040069469E ++:108F20002846F9F79AF83EBD2DE9F84F05460C465C ++:108F300000270078012192463E46B1EB101F00D079 ++:108F4000FFDF287A032809D0FFDF00BFAAF80060FE ++:108F50000CB1278066800020BDE8F88FB5F80C8042 ++:108F6000702708F10A0086B2A4B16888A0806889D9 ++:108F70002081A4F806806888D5F8049004F10A05D9 ++:108F800005F0F2FF2A46072549464346009505F0BD ++:108F90000BFCDBE7AAF80060DDE72DE9FC410F469A ++:108FA0001C46164680460321089D05F07AFE010006 ++:108FB00008D033463A464046CDE90045FFF739FE32 ++:108FC000BDE8FC8143F20200FAE7F8B50646A0F5D9 ++:108FD0007F40FF3816D0304605F0C6FF040000D1B0 ++:108FE000FFDF204605F083FB050000D1FFDF2046B0 ++:108FF00029466A4605F08AFB009CB4F80500E41C8B ++:10900000052801D00120F8BD0321304605F049FEB6 ++:10901000050000D1FFDF2079122807D120880C2815 ++:1090200004D1A87800F07F00022806D00023062291 ++:1090300004213046FFF7C0FDF8BD002306220521BC ++:10904000F7E7F8B50446408805F08EFF050000D12B ++:10905000FFDF6A462846616800F0CCF902460098B6 ++:10906000121F30F8031F458891421DD1042D1CD0DA ++:10907000052D27D0062D1DD0402D15D30E46284690 ++:1090800000F0D4F908280FD0207820F00F00401C01 ++:1090900020F0F00010302070032020726581A6813E ++:1090A000607840F008006070F8BD2246001D00F0B6 ++:1090B000C9F9F8BD636864880A46011D2046FAF7BD ++:1090C000FDFEF8BD2246001DFFF722FEF8BD7FB56C ++:1090D0000D460646032105F0E4FD04003AD0207851 ++:1090E00000F00F00012838D002A8009003AB0C223A ++:1090F00005213046FFF7DDFD002829D10298122115 ++:109100000523017061781A46891C4170082141804D ++:10911000298881806988C180A9880181E988418185 ++:109120000C21CDE9001021463046FFF782FD00B149 ++:10913000FFDFF02300223146012009F021FB2078D7 ++:1091400020F00F00401C20706078801C60700020B0 ++:1091500004B070BD43F20200FAE71120F8E77FB5D2 ++:109160000D460646032105F09CFD040006D020783C ++:1091700000F00F00012804D00820E9E743F20200C4 ++:10918000E6E702A8009003AB062205213046FFF770 ++:1091900090FD0028DCD1029813210523017061782D ++:1091A00041700221418085800621CDE900101A46D8 ++:1091B00021463046FFF73DFD00B1FFDF207820F06B ++:1091C0000F0020700020C3E72DE9F84F0F468346BB ++:1091D000032105F066FD0546584605F0D7FE80469A ++:1091E0004FF0000A05B9FFDFB8F1000F58D1FFDFDB ++:1091F00056E040466946002205F015F99DF800400A ++:109200008146082C00D3FFDF05EB840609F1080036 ++:109210003189062C0144318102D2298C08442884EA ++:10922000072C03D10AF1010000F0FF0AB07AC00751 ++:109230000DD02146284600F0DFF840B9B07A20F082 ++:109240000100B072584684B3032C2FD0FFDFB07AF0 ++:1092500081070AD502E00000A805002020F00200E6 ++:10926000B0722146584600F0D8F8062C18D895F868 ++:109270002200410714D520F0040085F822000024C4 ++:1092800005EB8400817A4A0706D521F0040181723A ++:109290002146584600F0C1F8641CE4B2062CEFD316 ++:1092A0007F1EFFB2A5D2504656E602E0FAF79DFEB9 ++:1092B000CDE7FEF76EF8CAE710B5032105F0F1FC23 ++:1092C000040000D1FFDF204600F014F9A07840F040 ++:1092D0008000A07010BD10B5032105F0E2FC040071 ++:1092E00000D1FFDF00F06EFE218D0C30B1FBF0F0FD ++:1092F000C0B210BD70B50D46032105F0D2FC0400CC ++:1093000000D1FFDF062D00D9FFDF2946204600F0FF ++:1093100073F8002805D004EB85018A7A42F0010237 ++:109320008A7270BD10B50446402801D2072010BDD6 ++:1093300000F07CF8082802D04FF4445010BD002102 ++:10934000774802E0491C082903D230F81120002A8E ++:10935000F8D1082903D020F81140002010BD0420C6 ++:1093600010BD10B5402801D2072010BD00F05EF8F6 ++:10937000082805D06A4A002122F81010084610BDBE ++:10938000052010BD2DE9FE4315460C00804606D091 ++:109390002DB16088402804D20720BDE8FE8310204C ++:1093A000FBE7218811B300F041F8082820D002A87B ++:1093B0000090228801AB07214046FFF77AFC002885 ++:1093C000EBD140462788019E05F0E0FD2A4607259F ++:1093D00031463B46009505F020FA0298009023881C ++:1093E000628807214046FFF7D8FDD6E70C20D4E776 ++:1093F0000520D2E705F08AB9072904D0484A10327F ++:1094000032F8112000E0028D00EB810000899042CB ++:1094100001D2012070470020704710B5032901D008 ++:10942000FFDF10BDBDE81040FAF7A5BD01460020E2 ++:109430003B4A02E0401C082803D232F810308B422D ++:10944000F8D17047F0B50F460646014687B014467E ++:109450003846FCF7B1FBC0B2082842D10020ADF875 ++:10946000100003906088032105F01BFC050000D16B ++:10947000FFDF00212846FFF7BFFF78B96088002191 ++:10948000FDF769FFADF81000024603A80090608860 ++:1094900005AB0021FFF70DFC00B1FFDF0398059934 ++:1094A000CDE90010029404AB324638466168FDF7FE ++:1094B000F7FAC0B205281BD2DFE800F0031A131533 ++:1094C0001300BDF8100000280BD003990423CDE948 ++:1094D0000001608800222946FFF7ABFB002800D07E ++:1094E000FFDF07B0F0BD607840F010006070F8E773 ++:1094F000FFDFF6E710B504462021083014F06DFDBB ++:109500000748002110F1100004EB810330F811200E ++:10951000491C1A810629F7D9208DA08410BD0000AE ++:10952000A805002030B44FF0E02001234FF4006C78 ++:109530000021C0F880C11D02C0F880511C06C0F88F ++:109540008041E84A82F80014D21E82F80014E64AEC ++:1095500082F80014E54A53609360C2F84011C2F8E3 ++:109560004411C2F84811C0F880C2C0F88052C0F857 ++:109570008042C0F800C1C0F80041136030BC7047A1 ++:1095800070B401204FF0E023C6024FF0000CC3F886 ++:1095900080610402C3F880410506C3F88051D34AB4 ++:1095A00050609060D24801680029FCD1C2F840C1E7 ++:1095B000C2F844C1C2F848C1C3F88062C3F880420F ++:1095C000C3F8805270BC70474FF0E0204FF4006148 ++:1095D000C0F88012C910C0F880127047002804BF7C ++:1095E000C4487047012804BFC3487047022804BF1D ++:1095F000C248704700B5FFDF002000BD08B5BB4979 ++:10960000002298B101282FD002281CBFFFDF08BD1F ++:109610004FF48020C1F80803C1F84803B84802603D ++:10962000C1F84821B5480068009008BD4FF480306B ++:10963000C1F80803C1F84803B24B1A60C1F84021D1 ++:10964000B14BC1031960B149C1F808034FF0E023E1 ++:109650000012C3F88001AE480260C1F84021C1F891 ++:109660000022AC48027008BD4FF40030C1F8080376 ++:10967000C1F84803A8480260C1F844219E48006828 ++:10968000009008BD70B5DFF864C2042600240125EF ++:10969000B0B101284CD002281CBFFFDF70BD9F482D ++:1096A0004FF48022012BC0F8401518BFCCF80823D6 ++:1096B000C0F8404108BFCCF80423CCF8442370BD67 ++:1096C000881E20F07F40CCF840054FF48030CCF865 ++:1096D0000803CCF84041CCF84403012B14BF00210F ++:1096E00001218C4B597089490D61DFF834C2CCF8E7 ++:1096F00000408C4C4FF0020CC4F800C0DFF828C2C8 ++:10970000CCF80060DFF808C23D32CCF80020C1F888 ++:1097100000524FF0E0224FF4807CC2F880C2C1F8C2 ++:109720000403C2F800C10804804908601D7070BDC0 ++:109730007F4A4FF40030012BC2F8401518BFCCF817 ++:109740000803C2F8404108BFCCF80403CCF8440336 ++:1097500070BD67480068704770B5764805687749FE ++:1097600075480860614CD4F84001002601280AD1F0 ++:10977000D4F8080310F4803F05D04FF48030C4F8CB ++:109780000803C4F84061D4F8440101280DD1D4F88D ++:10979000080310F4003F08D04FF40030C4F8080369 ++:1097A000C4F84461012007F088FCD4F8480101287E ++:1097B0000DD1D4F8080310F4802F08D04FF4802086 ++:1097C000C4F80803C4F84861022007F076FC5C483E ++:1097D000056070BD574810B5046858495648086080 ++:1097E0004C490878002808BF03201AD0464A4FF099 ++:1097F00000401060454AC00BC2F8080303124FF046 ++:10980000E02C0020CCF88031414B1860C2F84001B8 ++:10981000C2F8000208704A78002A1CBF4870002075 ++:1098200001D007F04AFC4648046010BD4FF0E0212B ++:109830004FF08070C1F8000270474FF0E0214FF008 ++:109840008070C1F8800270474FF0E0214FF40010A3 ++:10985000C1F8000270474FF0E0214FF40010C1F84A ++:10986000800270472949012008614FF0E021000281 ++:10987000C1F880027047410A43F609525143C0F3D0 ++:10988000080010FB02F000F5807001EB50207047DB ++:10989000430B48F2376C03FB0CF31B0C4FEA432CD1 ++:1098A000C1F800C0DFF89CC003FB0C0326484CF253 ++:1098B000F72C5843400D10FB0CFC0CEB432303F535 ++:1098C00080735B1213700A6810440860704719486F ++:1098D00010B5046819491848086007F087FF184850 ++:1098E000046010BD0BE000E018E000E000B00040B4 ++:1098F00004B500404081004044B1004048B1004000 ++:1099000048B5004040B5004008F5014000800040E7 ++:10991000408500402C00002044B5004008B00040C5 ++:1099200004850040088500401085004004F5014092 ++:1099300004B000401005024001000001180502407B ++:1099400014050240F7C2FFFF6F0C010010B5EFF3E2 ++:10995000108000F0010472B6EB484178491C417058 ++:109960004078012801D108F0A5FB002C00D162B697 ++:1099700010BD70B5E44CE07848B90125E570FFF7FB ++:10998000E5FF08F09FFB20B1002008F07BFB0020E2 ++:1099900070BD4FF080406571C0F80453F7E770B5B3 ++:1099A000EFF3108000F0010572B6D74C607800B973 ++:1099B000FFDF6078401E6070607808B908F07EFBB9 ++:1099C000002D00D162B670BDCF4810B5C17821B16D ++:1099D00000214171C170FFF7E2FF002010BD10B5FA ++:1099E000044608F06FFBC849C978084000D0012040 ++:1099F0002060002010BD2DE9F05FDFF80C93427865 ++:109A0000817889F80620002589F80710064689F82C ++:109A1000085000782F4620B101280FD002280FD01F ++:109A2000FFDF08F05CFB98B108F060FBA8420FD1A3 ++:109A3000284608F05FFB0028FAD047E00125F0E750 ++:109A4000FFF784FF08F03EFB0028FBD00225E8E783 ++:109A500001208407E060C4F80471AC490D6001077F ++:109A6000D1F84412A94AC1F3423124321160A74906 ++:109A70004FF0020B34310860C4F804B3A060DFF883 ++:109A800090A2DAF80010C94341F3001101F1010876 ++:109A9000DAF8001041F01001CAF8001000E020BF11 ++:109AA000D4F804010028FAD0284608F023FB002847 ++:109AB000FAD0B8F1000F05D1DAF8001021F010014A ++:109AC000CAF80010C4F808B3C4F8047199F8070084 ++:109AD0004C4670B1307860B908F0F4FA064608F0E8 ++:109AE000E5FC6FF0004116B1C4E9031001E0C4E9E0 ++:109AF000030115B12771BDE8F09F01202071BDE879 ++:109B0000F05F00F0DFB870B5050000D1FFDF4FF067 ++:109B100080424FF0FF30C2F808030021C2F8001164 ++:109B2000C2F80411C2F80C11C2F81011764C617021 ++:109B300008F0CEFA10B10120E07060702846BDE850 ++:109B4000704058E72DE9F0410125AF077D616E4C6B ++:109B5000E079F0B1012803D0217A401E814218DA61 ++:109B600008F0B0FA064608F0A1FCE179012902D913 ++:109B7000217A491C21720EB1216900E0E168411A85 ++:109B8000022902DA11F1020F0EDC0EB1206100E0B1 ++:109B9000E060FFF7DBFE08F095FA10B13D61A570BB ++:109BA00000E0257000202072BDE8F0812DE9F05F13 ++:109BB0005848D0F800B0574A574908321160840617 ++:109BC000D4F8080110B14FF0010801E04FF000088F ++:109BD000D4F8000100B101208146D4F8040108B195 ++:109BE000012600E00026D4F80C0100B101208246D5 ++:109BF000D4F8100108B1012700E0002748EA090164 ++:109C000026EA010020EA0A00B84300D0FFDF002561 ++:109C1000B8F1000F04D0C4F80851012008F032FA5E ++:109C2000DFF8E480B9F1000F13D0C4F8005198F8C0 ++:109C3000050020B188F80550002008F023FA98F8B4 ++:109C4000000030B108F03EFA18B1012088F8020097 ++:109C500020610EB1C4F80451BAF1000F0AD0C4F863 ++:109C60000C5198F80200464600B9FFDFB570357018 ++:109C7000FFF795FE37B1C4F8105198F8040008B109 ++:109C8000FFF760FF2349091DC1F800B033E770B545 ++:109C90001D4DE87808B908F011FA01208407A06189 ++:109CA000A87850B1D4F80C0120B9002008F022FAAD ++:109CB0000028F7D10020C4F80C014FF0FF30C4F8A1 ++:109CC000080370BD2DE9F0411926B507C5F80863F2 ++:109CD0000124AC610020C5F80001C5F80C01C5F8ED ++:109CE000100108F0EFF9084F10B1BC702C6100E0D2 ++:109CF0003C70FFF72BFE0549B87920310860C5F8A4 ++:109D000004636C6150E7000030000020180500403B ++:109D100010ED00E0100502400100000110B5202008 ++:109D200000F075F8202000F07DF84449202081F8EB ++:109D30000004434900060860091D42480860F7F71F ++:109D4000E1FA3F49C83108603F48D0F8041341F0B8 ++:109D50000101C0F80413D0F8041341F08071C0F879 ++:109D60000413364901201C39C1F8000110BD10B59B ++:109D7000202000F04CF8324800210160001D0160F5 ++:109D80002F4A481EE83A10602F4AC2F808032C4BAD ++:109D9000C8331960C2F80001C2F860012B4908609D ++:109DA000BDE81040202000F03DB825492848EC3996 ++:109DB0000860704722492648E8390860704770B546 ++:109DC0001F4A8069E83A224911601F49D1F80061B1 ++:109DD0000023204D1D4A5C1E1EB1A84206D300215F ++:109DE0000FE0D1F8606186B1A84209D2C1F8003114 ++:109DF000C1F860311460BDE87040202000F012B856 ++:109E00001168BDE8704014F01AB9FFDF70BD00F0B2 ++:109E10001F02012191404009800000F1E020C0F8BC ++:109E20008011704700F01F0201219140400980001D ++:109E300000F1E020C0F880127047000020E000E050 ++:109E400000060240441300200000024000040240CB ++:109E50000100000100F001004FF0E0214FF0007020 ++:109E6000C1F88001C1F88002384B802283F80024B9 ++:109E7000C1F80001704700B502460420344903E0F0 ++:109E800001EBC0031B792BB1401EC0B2F8D2FFDF3B ++:109E9000FF2000BD41F8302001EBC00100224A71D3 ++:109EA0008A7101220A7100BD294A002102EBC0001B ++:109EB0000171704710B50446042800D3FFDF244821 ++:109EC00000EBC4042079012800D0FFDF6079A1797C ++:109ED000401CC0B2814200D060714FF0E0214FF0D1 ++:109EE0000070C1F8000210BD2DE9F0411948056865 ++:109EF00018491948083108601448042690F80004ED ++:109F0000134F4009154C042818D0FFDF16E02178C4 ++:109F100007EBC1000279012A08D1427983799A427C ++:109F200004D04279827157F8310080472078401C74 ++:109F3000C0B22070042801D300202070761EF6B233 ++:109F4000E5D20448001D0560BDE8F08119E000E09D ++:109F5000C805002010050240010000014400002057 ++:109F60000F4A12680D498A420CD118470C4A1268F0 ++:109F70000A4B9A4206D101B508F066FAFFF715FFC1 ++:109F8000BDE80140074909680958084706480749DC ++:109F9000054A064B7047000000000000BEBAFECA2A ++:109FA00098000020040000204812002048120020E1 ++:109FB00018B1172802D207207047172008490880D7 ++:109FC0000020704706480088704770B50C4605466B ++:109FD00000F0B5FB21462846BDE8704001F0B0BC5A ++:109FE00046000020FE4B586019721A80C90013F019 ++:109FF000F4BF10B504460E2113F0CDFF17202081C9 ++:10A00000207B40F00A00207310BD4FF6FF720280E3 ++:10A01000032008F052BC7047027BD30701D192079E ++:10A0200003D4408908800020704705207047027BD8 ++:10A03000920700D54181704701460020098847F208 ++:10A04000FE12114200D00120E549497A002901D0D1 ++:10A0500040F00800704700B50346007BC00701D000 ++:10A06000052000BD19811846FFF7E6FFC00703D0A1 ++:10A07000187B40F004001873187B40F0010018733F ++:10A08000002000BD027B520700D509B1008970474E ++:10A0900017207047027B61F3C302027370472DE9FA ++:10A0A000F04F0E46017804464FF0010B0BFA01F019 ++:10A0B00047F2FF1100EA010961681D464FF6FF7380 ++:10A0C000088887B09646984206D0B9F1000F07D0AD ++:10A0D00047F2FE12104203D0012007B0BDE8F08F16 ++:10A0E00040EA090008804FF0000A8DB185F800A011 ++:10A0F0002278002705200221102A72D2DFE802F020 ++:10A10000710D323B506A727C50C7C399CBFDFCFB8A ++:10A1100020780B28ECD00420DFE76068B4F80C80CE ++:10A12000007B80077ED5B8F1170F4BD3FFF74AFFAE ++:10A130004045FAD360684089172801D3404541D192 ++:10A14000287820F03F00801C2870A5F801800320AB ++:10A1500030806168A1F80A806068017B21F002010B ++:10A16000017334E104212970A189A5F80110E18966 ++:10A17000A5F8031085E0A08A3188C01D1FFA80F879 ++:10A180004145D2D3062005F8010BA0892880E0893B ++:10A190006880208AA88007200090A38AA2693EE0F8 ++:10A1A000082A10D008212970A189A5F80110E18999 ++:10A1B000A5F8031030806A1D694604F1100006F00E ++:10A1C0004EFA10B1CCE01021EDE730889DF8001078 ++:10A1D000084456E00A202870A089A5F80100032051 ++:10A1E00008E006E10C212970A189A5F80110E18998 ++:10A1F000A5F803103080A8E0A089B6F800C00BEBEA ++:10A2000040021FFA82F8C44578D3B8F1050F75D320 ++:10A210000E222A70CDF800B0226903EA400320899B ++:10A2200080B200E079E0714600F096FAA6F800806E ++:10A23000CDE06B48427A002A6FD0521E42724068CD ++:10A24000227B236900EBC205AA882868D3F800C0E6 ++:10A250001044A0F1080240F808CC586850608DF80E ++:10A2600000108DF801A028680290A888ADF80400BD ++:10A2700000216846FBF758FAA5F804A0002E01D08B ++:10A2800050463080A3E0287840F08001297028787B ++:10A2900040F040012970E0893188C01C1FFA80F825 ++:10A2A00041455DD3287820F03F0012302870A18905 ++:10A2B000A5F80110032000902089E38980B271463F ++:10A2C000226900F049FAA6F80080287841063CD5BA ++:10A2D00000067CD58DF800B08DF801A03188CDE95D ++:10A2E000025A091DDFF8F8800420ADF8041004902C ++:10A2F00098F8080003E055E04BE02AE030E08DF8E4 ++:10A30000140000216846FBF70FFA074630880C302E ++:10A310003080022F02D0DFB36EE047E09DF81420BA ++:10A32000D8F8041098F80830404601EBC2019A4270 ++:10A3300016D28A88A2B9427A521C88F809200D6088 ++:10A3400030888880A6F800A056E06168A0898880DF ++:10A350003DE0218A3288491D1FFA81F8424501D229 ++:10A36000042749E0297821F03F0116312970A1899D ++:10A37000A5F80110E189A5F8031000902089238A2F ++:10A3800080B27146626900F0E7F9A6F80080DCE768 ++:10A390001DE0287820F03F0018302870207B68707E ++:10A3A000318014E060680188090401D4052723E0A6 ++:10A3B000C088A189884201D006271DE01E20287090 ++:10A3C000A6F800B06068018821F400410180B9F16D ++:10A3D000000F11D00248002200888300032001E012 ++:10A3E000E8050020A16808F0CBF961682078887042 ++:10A3F00007E0A6F800A003276068018821EA0901A8 ++:10A400000180384669E62DE9F04F87B09B46119CE4 ++:10A410000D46030016461AD03078C10703D000F06D ++:10A420003F00192801D9012100E000212046FFF753 ++:10A4300029FE98420BD32088A0F57F41FF3906D032 ++:10A440003078410601D4000603D5082045E60720F0 ++:10A4500043E600208DF800008DF8010030785F1E83 ++:10A4600000F03F0C0122981E4FF0050A4FF0020940 ++:10A47000B9B2BCF1200F76D2DFE80CF08C10755F1A ++:10A480007569758D759E75B775BC75CA75D675E39A ++:10A49000757575F375F175F075EF758C052B79D1C0 ++:10A4A00004208DF80000A0788DF804007088ADF8C5 ++:10A4B000060030798DF80100707800F03F000C281C ++:10A4C00029D00ADCA0F10200092863D2DFE800F0FD ++:10A4D000126215621A621D622000122824D004DC68 ++:10A4E0000E281BD01028DAD11BE016281FD0182800 ++:10A4F000D5D11FE02078800701E0207840070028B0 ++:10A5000048DAF0E020780007F9E72078C006F6E79F ++:10A5100020788006F3E720784006F0E720780006F0 ++:10A52000EDE72088C005EAE72088C004E7E7208837 ++:10A530008004E4E720884004E1E72078800729D5FB ++:10A54000032B27D18DF800A0B6F8010082E0217816 ++:10A5500049071FD5062B1DD381B27078012803D07F ++:10A56000022817D102E0CBE0022000E010200622F2 ++:10A570008DF8002072788DF80420801CB1FBF0F279 ++:10A58000ADF8062092B242438A4203D10395ADF85A ++:10A590000890A8E07AE02078000777D50721B8B2C4 ++:10A5A0008DF800108108ADF80410B0EB810F6DD16B ++:10A5B0000295ADF8062096E02178C90666D5022BF3 ++:10A5C00064D381B208208DF80000707802285DD332 ++:10A5D000B1FBF0F28DF80400ADF8062092B24243D0 ++:10A5E0008A4253D1ADF808907CE0207880064DD5A2 ++:10A5F000092003E02078400648D50A208DF80000A5 ++:10A60000A088ADF80400ADF80610ADF8082069E0A8 ++:10A610002078000672D50B20ADF804108DF80000EC ++:10A62000ADF8062002955EE02188C90566D5022BAB ++:10A6300064D381B20C208DF80000707804285DD3BB ++:10A64000C6E72088C00459D5012B57D10D208DF8BD ++:10A650000000A088ADF8040045E021E026E016E007 ++:10A66000FFE72088800449D5052B47D30E208DF8BD ++:10A670000000A088ADF80400B6F803005B1FADF839 ++:10A680000830ADF80600ADF80AA02BE036E02088CF ++:10A69000400433D5012B31D10F208DF8000022E08A ++:10A6A000208800042AD4B6F80100E080207B00074F ++:10A6B00024D5032B22D3307800F03F001B2819D07B ++:10A6C00011208DF80000208840F40040A4F800001C ++:10A6D000B6F80100ADF80400DB1E0320ADF806302B ++:10A6E000ADF80800039559466846FBF71DF80500CC ++:10A6F00008D016E010208DF80000E9E7072510E0EB ++:10A7000008250EE0307800F03F001B2809D01D28F6 ++:10A7100007D00320109908F0D0F8208800F40040FA ++:10A720002080207B400708D52046FFF785FCC00726 ++:10A7300003D1207B20F0040020732846CDE400B52F ++:10A7400087B0032806D18DF80000019100216846EA ++:10A75000FAF7EAFF07B000BDF8B51C4615460E46ED ++:10A76000069F04F013FC2346FF1DBCB231462A4667 ++:10A77000009404F052F8F8BD2DE9FF4F8FB0054664 ++:10A78000DDE91C471198DDF880B0082805D0E8699C ++:10A7900001F031F950B11020CDE02088092140F0BE ++:10A7A000100020808BF80010022017E0E9690120DA ++:10A7B0008871EA694FF420519180E9698872E969EA ++:10A7C00042F601000881E969002088732088112180 ++:10A7D00040F0200020808BF800100420814638785B ++:10A7E0000B900A2038704FF0020A05F11800564607 ++:10A7F0000D9001F0A1FB4C467CE0119810280DD182 ++:10A80000022E0BD0AAEB0400801C80B2009021988D ++:10A81000022380B206AA1F9901F0DDF8BDF81A10D4 ++:10A820001298814203D9F648007A109004E003D1CF ++:10A830000B9808B1387031E02198CDF800A080B2B3 ++:10A840004FF002030DF11A021F9901F0C4F81E988F ++:10A850000088811BA1EB090083B2C9F1FF00984277 ++:10A8600000D203460AEB090292B20DF130080292BF ++:10A8700000202199CDF81480CDE903101F9910987C ++:10A88000CDE9000195F82010BDF81A00002201F072 ++:10A89000D5FB387050B1C0B2832803D0BDF81A0080 ++:10A8A000288334E0022013B0BDE8F08FBDF83000FB ++:10A8B000022E00EB0901CCB20CD09BF80110A14292 ++:10A8C00005D1BDF82410814206D0FF2C04D09BF89E ++:10A8D00001401EE08BF80140C94800680178052955 ++:10A8E00002D1BDF81A1081800AEB04001FFA80FA29 ++:10A8F000301986B206AB219A10990D9801F01FFB12 ++:10A9000028B91E980088801BA042BFF676AF022EA1 ++:10A9100012D0119810280BD1AAEB0400801C80B231 ++:10A9200000902198022380B206AA1F9901F053F8E3 ++:10A930001E980680002038700020B4E72DE9F84307 ++:10A940009446089E02460027F06BB0B3521F94B2A3 ++:10A95000B6F84220A2F57F45FF3D05D08518AD88A9 ++:10A960002A44921D95B200E000252A19B6F84080CD ++:10A970000832424522D84219BCF8010022F8020BE5 ++:10A98000BCF8030022F8020B98B222F8024B894669 ++:10A99000904604F0E9FA4FF00C0C49464246234633 ++:10A9A000CDF800C003F000FFA6F84250F16B002084 ++:10A9B0002944A41D2144088003E001E0092700E0A8 ++:10A9C00083273846BDE8F88310B50B88B0F84040BF ++:10A9D0009C420CD9C46BE018048844B1848824F4E8 ++:10A9E0000044A41D23440B801060002010BD822071 ++:10A9F00010BD2DE9F0478AB0002590468946824671 ++:10AA0000ADF81C5007274DE00698068880880004A2 ++:10AA100048D4A8F8006008A8CDE90450CDE9007535 ++:10AA2000029503954FF4007300224946304601F029 ++:10AA300005FB04003DD1BDF81C00ADF824000699CB ++:10AA400008888A88B04216D1130414D40595CDE93C ++:10AA5000007522F4004202950395049542F4804368 ++:10AA60004A88494601F0CDF804000BD10698818848 ++:10AA700041F40041818006AA09A95046FFF7A4FFCE ++:10AA80000400DCD00595CDE9007506980395029584 ++:10AA900004950088BDF820300022494601F0B1F845 ++:10AAA000822C06D106AA07A95046FFF78DFF0400A5 ++:10AAB000AAD0ADF81C5004E00698818821F400412A ++:10AAC000818006AA07A95046FFF77EFF0028F3D031 ++:10AAD000822C03D020460AB0BDE8F0870020FAE7B8 ++:10AAE00030B50446C06B85B0002578B10C208DF8D8 ++:10AAF0000000B4F84000ADF80800E06B039101904D ++:10AB000000216846FBF78DFC8DF8005044F83C5F4F ++:10AB10004FF6FF70E080A58005B030BD2DE9F04113 ++:10AB200005460F46E96B0020069E1446002911D009 ++:10AB3000012B0FD1324639462846FFF75AFF00282D ++:10AB400008D1002C06D0324639462846BDE8F041EF ++:10AB500000F060BFBDE8F081F8B51D46DDF818C013 ++:10AB6000DDE907634C1DBCF800E0A4B2099FA645CF ++:10AB700001D20720F8BDACF80040172403F8014BC0 ++:10AB800018805A80052000900B46B8B22A463146FC ++:10AB900000F021FF0020F8BD70B50D4604464C21A1 ++:10ABA00013F01BFA04F1080044F81C0F00204FF6C4 ++:10ABB000FF712062E184A08425711720208514F89C ++:10ABC0002C0F40F00A00207070BD4FF6FF7202801B ++:10ABD000042007F072BE30B585B00D460446FFF77D ++:10ABE0007FFF208F38B101208DF8000000216846DA ++:10ABF0000195FBF716FC002020636063A0638BE7E0 ++:10AC0000F405002090F84820920703D4408808807B ++:10AC1000002070470620704790F84820920701D521 ++:10AC2000A0F8461070470146002009880A0700D5A1 ++:10AC3000012011F0F00F01D040F00200CA0501D54B ++:10AC400040F004008A0501D540F010004A0501D506 ++:10AC500040F02000090501D540F04000704700B5E4 ++:10AC6000034690F84800C00701D0062000BDA3F8B5 ++:10AC700044101846FFF7D7FF10F0760F05D093F871 ++:10AC8000480040F0040083F8480013F8480F40F0F3 ++:10AC900001001870002000BD90F84820520700D530 ++:10ACA00011B1B0F8440070471720704710F8482FD2 ++:10ACB00061F3C302027070472DE9FF4F9BB006009D ++:10ACC000DDE92CB4289F1E9D2A9B25D02878C1073A ++:10ACD00003D000F03F00192801D9012100E0002134 ++:10ACE0002046FFF7D9FFB04216D3287841060FD48B ++:10ACF00000F03F011E2909D0218811F47F6F0BD18C ++:10AD00003A884AB1A1F57F42FF3A05D0010606D53F ++:10AD100000F03F00122802D004201FB0C4E5F8491B ++:10AD20001C984FF0000908728DF818908DF83C902F ++:10AD30000FAA0A602B9A4A60ADF81C90ADF85090AB ++:10AD40002A789A4602F03F0C0420711F04F1180380 ++:10AD50004FF007084FF0030E1693BCF11F0F7DD282 ++:10AD6000DFE80CF07C7C107C257CA97CFD7CFC7CE5 ++:10AD7000FB7CFA7CFD7CF97C7C7CF87CF77C7C7C21 ++:10AD80007C7CF60094F84820B5F80110920701D5B4 ++:10AD9000032E02D08DF8180039E34FF40060ADF8AF ++:10ADA000500061808DF83CE0ADF84010F1E2052ED6 ++:10ADB000F0D1B5F801002083ADF81C00B5F8031000 ++:10ADC000618300286BD0884269D80020A07220815E ++:10ADD0004FF6FF706084169801F0AEF805208AF8EF ++:10ADE00000000220804601900AAB5A461C99169832 ++:10ADF00001F0A5F898BB9DF82E00012804D002218F ++:10AE00008AF80110102003E001208AF801000220D6 ++:10AE10000490002203A90BA805F021FCF0BB9DF8CB ++:10AE20000C00049981423CD13A88801CA2EB0801B5 ++:10AE3000814236DB019800901FFA8BF002230DF15E ++:10AE40002A02299900F0C7FD019808F10208801C28 ++:10AE500081B2019117AA03A90BA801E0B8E223E08F ++:10AE600005F0FDFB019900911FFA8BF09DF80C3065 ++:10AE700017AA299900F0AFFD9DF80C000AAB08EB6A ++:10AE800000011FFA81F801995A46084480B20190E6 ++:10AE90001C99169801F053F8002801E001E095E0B4 ++:10AEA000B7D0B8F1020F03D10A208DF818006DE277 ++:10AEB000A7F800806AE2072EFFF46CAFB5F8010036 ++:10AEC0002083ADF81C00B5F80310618300287DD005 ++:10AED00088427BD80120A072B5F8050020810020AF ++:10AEE000A073E06900F087FD78B9E16901208871FD ++:10AEF000E2694FF420519180E1698872E16942F67C ++:10AF000001000881E16900208873F01F60841D98AA ++:10AF1000A062A4F82480169801F00EF88AF8008048 ++:10AF20000120804602900020ADF82A002BE000BFEF ++:10AF3000B8F1010F1DD0E0698079012803D1BDF877 ++:10AF40002800ADF80E00029800901FFA8BF007E081 ++:10AF50002BE2ADE13BE1DCE025E29FE076E03BE087 ++:10AF6000042303AA299900F036FD0298001D80B23F ++:10AF70000290BDF82A00ADF80C00ADF80E0008F103 ++:10AF800004001FFA80F80AAB5A461C99169800F084 ++:10AF9000D6FF20B93988A1EB08000428C8D2B8F13F ++:10AFA000010F81D0E0698079012805D0BDF8281013 ++:10AFB000A1F57F40FF3803D1BDF82800ADF80E00A1 ++:10AFC000029800901FFA8BF0042300E014E003AA1B ++:10AFD000299900F000FD6BE7072E02D0152E7FF4B3 ++:10AFE000D9AEB5F801002083ADF81C00B5F80320F8 ++:10AFF000628308B1904201D90120CBE60120A07202 ++:10B0000000202081A073052E07D0C8B2691DE26917 ++:10B0100005F006FB00287FF447AF4FF6FF70608411 ++:10B02000299803A9029781E8010C06A814A9CDE983 ++:10B0300000102878002300F03F0220461C99FFF7FB ++:10B040009BFB8146208BADF81C009FE1032ED4D1E1 ++:10B050004020ADF85000B5F801002083ADF81C0089 ++:10B060000DF1300C01230021CDF814C00293CDE97D ++:10B0700003B1299A1C99CDE9001239880022491E92 ++:10B080008BB294F8201000F0D9FF8DF8180090BB17 ++:10B090000B208AF80000BDF8300038E0052EACD156 ++:10B0A0008020ADF85000B5F801002083B5F80310FA ++:10B0B0006184ADF81C00B1F5007F02D98DF81880CD ++:10B0C000A5E141F47C4262840DF1280800214FF093 ++:10B0D000010CCDE90418CDE902CB299B1C99CDE9DF ++:10B0E00000133988491E8BB294F8201000F0A6FF97 ++:10B0F0008DF8180030B18328A7D10220D6E00000D7 ++:10B10000F40500200D218AF80010BDF82800401C2D ++:10B110003BE1D10901EB41030EEB8301B14204D9BC ++:10B1200051067FF56AAF00202FE1B5F80100ADF8B8 ++:10B130001C002A78520609D506228DF83C202A7870 ++:10B14000120605D500208DF83C0043E18DF83C80C7 ++:10B150004FF0030C4FF00008CDF808C0CDE903B85C ++:10B16000DDE91C23CDF81480CDE90023A6EB010B0B ++:10B170001FFA8BF394F82010424600F042FD8DF840 ++:10B1800018008DF83C80297849060DD52088C00527 ++:10B1900006D5208BBDF81C10884201D1C4F8288048 ++:10B1A00040468DF81880F0E0832801D14FF0020965 ++:10B1B0004FF48070ADF85000BDF81C002083A4F857 ++:10B1C00022B01D98A0620320A0841321DAE0052E8E ++:10B1D000FFF413AFB5F80100ADF81C00B4F840203F ++:10B1E0007AB3A2F57F43FE3B2CD008228DF83C2099 ++:10B1F0004FF0050C4FF00008CDF808C0CDE903B8BA ++:10B20000DDE91C23CDF81480CDE9002389B241F497 ++:10B210000043B5F8032094F8201000F0F2FC8DF8FC ++:10B220003C804FF400718DF81800ADF85010832861 ++:10B2300013D010B3B4F84010A1F57F40FE3809D008 ++:10B24000E5E0FFE70B228DF83C204FF6FE72A4F8F4 ++:10B250004020CDE7A4F84080D9E05B462A46009420 ++:10B2600030461D99FFF76AFB8DF8180008B1832856 ++:10B270004CD1BDF81C0020833FE75B462A46009472 ++:10B2800030461D99FFF75AFB8DF81800F0BBB4F853 ++:10B290004210E06B299A431801A8009780E8040C3B ++:10B2A0005A88998833F8060BFFF756FC81466DE003 ++:10B2B00095F80180022E75D15FEA080002D0B8F13E ++:10B2C000010F6FD109208DF83C0007A800908DF880 ++:10B2D000408094F82010434600222046FFF71EFCD1 ++:10B2E0008DF8410000218DF8421058B9B8F1010FD6 ++:10B2F00015D0B8F1000F05D1B4F84010A1F57F408A ++:10B30000FF380CD0B4F8400048B100E03EE0002027 ++:10B310008DF83C004FF48060ADF850000EE00FA8AF ++:10B320002B99FBF77EF8814600208DF83C004FF406 ++:10B330008060ADF85000B9F1020F06D0F8480068FF ++:10B34000807928B18DF8180028E0A4F8188043E02F ++:10B35000B9F1000F03D081208DF818003CE007A858 ++:10B36000009094F82010434601222046FFF7D6FBB8 ++:10B370008DF8180059462046FFF7B2FB9DF81800DB ++:10B3800020B919218AF80010012038809DF83C006E ++:10B3900020B10FA82B99FBF744F88146B9F1000FB3 ++:10B3A00032D019E016E00620F4E42078000711D529 ++:10B3B000012E0FD10A208DF83C00E088ADF8400046 ++:10B3C0005946042007F079FA0820ADF85000AAE6A3 ++:10B3D0005106E9D54FF004092088BDF85010084304 ++:10B3E0002080BDF8500080050CD5B4F84010A1F5C0 ++:10B3F0007F40FE3806D11D9820631E986063268723 ++:10B400004FF00309484688E49DF8180078B1012000 ++:10B410008AF8000029788AF80110BDF81C10AAF8F3 ++:10B4200002109DF818108AF8041005203880208832 ++:10B43000BDF8501088432080E4E72DE9FF4F97B016 ++:10B44000804601780120DDE926A488404FF20901F9 ++:10B450000840ADF8200021889B46A1F57F424FF0BF ++:10B460000009FF3A02D028B1080703D501201BB01C ++:10B47000BDE8F08F249E0020054630701999189A77 ++:10B480000988ADF84010A6498DF81C000A728DF8A5 ++:10B490002C000BA808602598486098F80000012847 ++:10B4A00037D0022809D003287ED1307820F03F0021 ++:10B4B0001D303070B8F80400E08098F800000228D1 ++:10B4C00004D1307820F03F001B30307094F84800F1 ++:10B4D000000769D513AB0020CDE904030721CDE9AE ++:10B4E000001B0322CDE9022ABDF8400094F8201089 ++:10B4F000C01E83B2B8F80400002200F09FFD0028AF ++:10B50000D2D1B8F80400A6F80100BDF84C00C01C68 ++:10B5100003E198F805108DF81C1098F80400012834 ++:10B5200006D04FF4007902282BD00328BCD171E15A ++:10B530002088B8F8087010F40060ADF8200033D00F ++:10B54000172F1CD3FEF73EFDB84218D3B4F84600BF ++:10B55000172801D3B84212D1307820F03F00C01C28 ++:10B560003070A6F801700320ADF84000A4F84670D2 ++:10B5700094F8480020F0020084F848006CE10525AA ++:10B5800085E1208808F1080700F4FE60ADF820008E ++:10B5900010F0F00F1ED010F0C00F03D03888228BAF ++:10B5A0009042ECD1B1B900E06BE1B878C00711D09E ++:10B5B0000020B9680290CDE9030107210590CDE98B ++:10B5C0000010FB88BA8894F82010388800F019FB26 ++:10B5D0000028D4D1BDF8200080284CD006DC1028EB ++:10B5E0000DD020280BD040288AD124E0B0F5807FF0 ++:10B5F0006AD048457ED0B0F5806F97D1E2E0C006B2 ++:10B6000001D5082000E01020814605208DF82C008F ++:10B61000002008A9ADF8300001AB009110AA07A8DE ++:10B6200083E80508CDE9046A3B884A46072120469D ++:10B63000FFF7A2F8A8E09DF81C004FF00A090028C7 ++:10B640009CD113ABCDE904030721CDE9001B0122F6 ++:10B65000CDE9022ABDF8400094F82010401E83B2C4 ++:10B66000208B002200F0EAFC8DF81C000B203070CB ++:10B67000BDF84C001EE09DF81C004FF00C0900289E ++:10B6800021D115ABCDE904030721CDE9001B01222F ++:10B69000CDE9022ABDF84000628C401E83B294F8C6 ++:10B6A0002010208B00F0CAFC8DF81C000D2030709B ++:10B6B000BDF85400401CADF8400005208DF82C006A ++:10B6C000208BADF83000C7E03888B4F818C060456A ++:10B6D0007FF455AF9DF81C004FF0120900281ED1D1 ++:10B6E000A06AB8B1B878C0073FF449AF0020B96884 ++:10B6F000029000E016E0CDE9030107210590CDE9B5 ++:10B700000010FB88BA8894F82010604600F079FA9F ++:10B710008DF81C00132030700120ADF840009BE034 ++:10B72000F4050020B7F800C0208B8445D0D19DF8E7 ++:10B730001C004FF016090028E06B06D0F0B3002083 ++:10B74000ADF808004FF6FF7729E078B1B978C9075E ++:10B75000BED1B4F8421010AACDE9002BCDE9026A9F ++:10B7600043185A88998833F8060B0BE0B878C0075D ++:10B77000BAD010AACDE9002BCDE9026ABA88F988BF ++:10B780006046BB68FFF7E8F9050065D0072D79D062 ++:10B790007DE00F4605AA02A92046FFF715F9B4F887 ++:10B7A0004220BDF808108A4201D00028F1D0B4F838 ++:10B7B0004210E26B00201144088000E04CE0A4F845 ++:10B7C000427049E09DF81C004FF0180940B1208BF1 ++:10B7D000D0B13888208351462046FFF781F93BE0FD ++:10B7E00004F118000090237E94F8201001222046D6 ++:10B7F000FFF794F98DF81C000028ECD11920307067 ++:10B800000120ADF84000E6E7052551462046FFF748 ++:10B8100067F93CE0208800F40070ADF8200048454E ++:10B820002FD1B4F84000A0F57F41FE3990D1D8F86F ++:10B8300008004FF0160958B1E063B8F80C10A4F8EE ++:10B8400040104FF6FF71A4F842100021018003E080 ++:10B850004FF6FF70A4F84000BDF8200030F47F617F ++:10B860001AD0782300225146042006F089FF98F868 ++:10B87000000020712088BDF82010084320800EE0D1 ++:10B8800000E007252088BDF820108843208020880C ++:10B8900010F47F6F1DD03EE02188814321809DF808 ++:10B8A0002C0028B16F4841680BA8FAF7BAFD05468D ++:10B8B0009DF81C000028EAD086F801900120307025 ++:10B8C000208B70809DF81C0030710520ADF8400081 ++:10B8D000DDE7208FF8B119990988ADF84010DDE94E ++:10B8E000242302A9059481E80C0410AACDE9002BB9 ++:10B8F000D4E90C231899FFF7DFF9054601208DF8EC ++:10B900002C0000210BA8CDF830A0FAF78AFD00B179 ++:10B9100005460020208794F8480040070AD52046B5 ++:10B92000FFF781F910F0760F04D114F8480F20F0DA ++:10B93000040020701998BDF840100180284696E553 ++:10B9400000B585B0042807D102208DF800000191D0 ++:10B9500000216846FAF765FD05B000BD10B5414A03 ++:10B9600003781168012B02D0022B2BD112E00B7847 ++:10B970000BB1052B01D104230B70136881889980CA ++:10B980001168C388CB8013680189198111684089C7 ++:10B9900048810FE083888B801168C388CB8013684F ++:10B9A00001891981136841895981116883898B81C3 ++:10B9B00000690861D2E90001FAF733FD022803D0DB ++:10B9C000002800D0812010BD832010BDC06B00284E ++:10B9D00000D001207047F8B51C4615460E46069F5C ++:10B9E00003F0D4FA2346FF1DBCB231462A46009428 ++:10B9F00002F013FFF8BD8178012909D10088B0F564 ++:10BA0000205F03D042F60101884201D10020704737 ++:10BA100007207047F0B589B0002415460E4607464A ++:10BA2000ADF8184011E0079801882980811D029423 ++:10BA3000CDE9034107210594CDE9001483884288AC ++:10BA40000088314600F0DDF830B907AA06A938466B ++:10BA5000FEF7BAFF0028E6D0822800D1002009B006 ++:10BA6000F0BD0000F405002010B58B7883B102789A ++:10BA70009A4205D10B885BB102E08B79091D4BB16D ++:10BA80008B789A42F9D1B0F801300C88A342F4D1F6 ++:10BA9000002010BD812010BD072826D012B1012A38 ++:10BAA00027D103E0497801F0070102E04978C1F3AA ++:10BAB000C20105291DD2DFE801F00318080C1200AD ++:10BAC0000AB1032070470220704704280DD250B1FC ++:10BAD0000DE0052809D2801E022808D303E00628BD ++:10BAE00003D0032803D005207047002070470F20A3 ++:10BAF00070478120704710B513880B800B781C06A7 ++:10BB00001FD5F64CA47A844204D843F01000087084 ++:10BB1000002010BD94682478C44064F304130B70B3 ++:10BB20001378D17803F0030341EA032140F20123A3 ++:10BB3000B1FBF3F403FB1411926800FB0120401CDD ++:10BB400010BD906810BD37B5BDF8041011809DF888 ++:10BB5000045029061BD5E14901239468897A814262 ++:10BB600009D8FE280FD1E80602D58B405B1E00E005 ++:10BB70000023237007E0217883409943C5F3001325 ++:10BB8000834019432170107820F0100010703EBDE2 ++:10BB90002DE9F0410746C81C0E4620F00300B042D4 ++:10BBA00002D08620BDE8F081082A01D90E20F9E7ED ++:10BBB000CA4D002034462E60AF802881AA72E880EA ++:10BBC0001AE0E988491CE980810614D4E17800F084 ++:10BBD000030041EA002040F20121B0FBF1F201FB39 ++:10BBE0001201206800F021FB2989084480B22881D5 ++:10BBF000381A3044A0600C3420784107E1D400208A ++:10BC0000D0E72DE9FF4F87B01646DDE9147A80466C ++:10BC1000994623F4404500F0F8FA04000BD0207850 ++:10BC200000060AD5AD48817A0898814205D8872058 ++:10BC30000BB0BDE8F08F0120FAE7224601A9089871 ++:10BC4000FFF759FF834600208DF80800072F1BD00F ++:10BC5000012221463846FFF71FFF0028E8D120784F ++:10BC6000400611D502208DF80800BDF80400ADF89B ++:10BC70000C80ADF80E00ADF810601698ADF81250BB ++:10BC8000CDF818A0ADF814005FEA094004D50025EE ++:10BC90002E46A84601270CE02178E07801F0030148 ++:10BCA00040EA012040F20122B0FBF2F1804602FBA3 ++:10BCB00011875FEA494009D5B84507D1A1782079B5 ++:10BCC00001F0030140EA0120B04201D3BE4201D994 ++:10BCD0000720ADE7A8191FFA80F9B94501D90D2051 ++:10BCE000A6E79DF8080020B102A8FAF798FB002803 ++:10BCF0009ED1B84507D1A0784FEA192161F3010020 ++:10BD0000A07084F80490199800B10580189850EA42 ++:10BD10000A0028D0189830B10BEB06002A46189973 ++:10BD200012F0C2F80FE017980BEB060880B25746E6 ++:10BD3000169E03F019F92B46F61DB5B23946424658 ++:10BD4000009502F031FD224601A90898FFF7D3FEC5 ++:10BD50009DF80400224620F010008DF8040001999F ++:10BD60000898FFF7F0FE002062E72DE9FF4FDFF8AB ++:10BD70006C9182461746B9F80610D9F8000001EB1D ++:10BD8000410100EB810440F20120B2FBF0F187B0E9 ++:10BD900000FB11754E46DDF854802946089800F0E6 ++:10BDA00044FA316832898B46611A0C3101441144DE ++:10BDB000B38889B28B4201D8842039E70899CEB282 ++:10BDC000310603D5B10601D5852031E7B9F806C0A3 ++:10BDD0000CF1010C1FFA8CFCA9F806C0169909B1E8 ++:10BDE000A1F800C0B10602D5C4F8088007E01044ED ++:10BDF00080B2A9F80800191A01EB0B00A0602246D6 ++:10BE0000FE200899FFF79FFEE77025712078390A18 ++:10BE100061F301002A0AA17840F0040062F30101F5 ++:10BE2000A17020709AF802006071BAF80000E080FA ++:10BE300000252573300602D599F80A7000E0012725 ++:10BE4000B00601D54FF000084E4600244FF0070918 ++:10BE50000FE00295CDE903580595CDE90095F088EE ++:10BE60002146149B0A9AFFF7CCFE0028A5D1641C3A ++:10BE7000E4B2BC42EDD30020DAE62DE9F04780467B ++:10BE800000F0C3F9070005D000264446134D40F2E8 ++:10BE9000012916E00120BDE8F087204600F0B5F941 ++:10BEA0000278C17802F0030241EA0222B2FBF9F300 ++:10BEB00009FB1321006800F0B8F93044641C86B215 ++:10BEC000A4B2E988601E8142E7DCA8F10100E880A5 ++:10BED0002889801B288100203870DCE700060020BC ++:10BEE00020B1401E108091700020704701207047E3 ++:10BEF00010B5D54904460088CA88904201D38220F3 ++:10BF000010BD096800EB400001EB80025079A0727F ++:10BF1000D08820819178107901F0030140EA012056 ++:10BF2000A081A078E11CFFF7E6FD20612088401C7D ++:10BF30002080E080002010BD0121818270472DE922 ++:10BF4000FF4F83B04FF6FF780546A3F800804068A6 ++:10BF50001F4680788DF8060068680088ADF80400F8 ++:10BF600000208DF80A00A88A2C88A04200D304463D ++:10BF7000AC8242E0A88A401CA882701D6968FFF765 ++:10BF800073FDC0BB3988414501D1601E3880688887 ++:10BF9000A04237D3B178307901F0030140EA01299A ++:10BFA00001A9701DFFF760FD28BB698941452ED0AE ++:10BFB000002231460498FFF76FFDE0B969894945D1 ++:10BFC00019D10598D5F810B0B5F80CC0D6F808A06E ++:10BFD00080B2CDF800C002F0C7FFDDF800C05946BE ++:10BFE0000CF1070C1FFA8CFC52464B46CDF800C0F2 ++:10BFF00002F09DFB58B1641CA4B2204600F005F984 ++:10C000000600B7D1641EAC82822007B011E67C80A6 ++:10C010007079B871F088B8803178F07801F0030158 ++:10C0200040EA01207881A7F80C90287A324607F17F ++:10C030000801FFF760FD38610020E6E72DE9FF4FBA ++:10C0400087B01C46DDE9158B91460F46DDF864A0EC ++:10C05000079800F0DAF8050008D02878000607D520 ++:10C060007948807AB84203D88720E1E50120DFE5EE ++:10C07000C9F309062A4601A93846FFF73CFD0746E1 ++:10C08000149807281BD000222946FFF705FD002839 ++:10C09000EBD12878400612D501208DF808000798CA ++:10C0A000ADF80C00BDF80400ADF80E00ADF810605E ++:10C0B000ADF8124002A8FAF7B2F90028D5D12978D4 ++:10C0C000E87801F0030140EA0121AA78287902F01A ++:10C0D000030240EA02204E4507D0B1F5007F04D9A3 ++:10C0E000611E814201DD0B20A2E5864201D90720B5 ++:10C0F0009EE5801B85B2A54200D92546BAF1000F06 ++:10C1000001D0AAF80050189818B1B9192A4611F0B0 ++:10C11000CBFEB8F1000F0ED017983E4480B24446D3 ++:10C120005F4602F033FF2146FF1DBCB232462B466C ++:10C13000009402F072FB00207AE52DE9F0411D46E3 ++:10C1400017460E4600F061F8040008D0207800067B ++:10C1500007D53D48807AB04203D8872022E50120E8 ++:10C1600020E5224639463046FFF7C5FC65B1217807 ++:10C17000E07801F0030140EA0120B0F5007F01D82A ++:10C18000012000E00020287000200BE52DE9F0419F ++:10C190001D4617460E4600F038F8040008D02078F7 ++:10C1A000000607D52848807AB04203D88720F9E4F2 ++:10C1B0000120F7E4224639463046FFF7C4FCFF2D44 ++:10C1C00014D02178E07801F0030240EA022040F226 ++:10C1D0000122B0FBF2F302FB130015B900F20120BB ++:10C1E00080B2E070000A60F3010121700020D9E400 ++:10C1F00010B50C4600F009F828B1C18821804079BB ++:10C20000A070002010BD012010BD0F49CA888242D5 ++:10C2100009D340B1096800EB40006FF00B0202EB5C ++:10C2200080000844704700207047C0B2820609D4DD ++:10C23000000605D50448807A4843401C80B2704708 ++:10C2400008467047002070470006002010B506F031 ++:10C250001BFD05F088FFF6F7D7FD10F011FE06F084 ++:10C26000EBFBBDE8104006F09DBC10B50C4601F09C ++:10C27000A4FE80B3204600F0A8FA68B322780F2A03 ++:10C2800009D0102A07D0022A05D0032A03D0142A85 ++:10C290002ED0FFDF1DE0A0781E282DD00EDC0C284C ++:10C2A00024D008DC092827D2DFE800F0132617265F ++:10C2B000261E1E1A1C0012281ED11BE0302819D081 ++:10C2C0001ADDA0F13A00032816D2DFE800F01115BC ++:10C2D0000B00002010BD13E010E043F20200F9E76C ++:10C2E0000420F7E70D20F5E70F20F3E70820F1E73A ++:10C2F0001120EFE70720EDE70320EBE7FFDFE8E79A ++:10C30000FFDFE6E700F061BA70B5034600200246A1 ++:10C310006FF02F050EE09C5CA4F130060A2E02D3CC ++:10C320004FF0FF3070BD00EB800005EB4000521C69 ++:10C330002044D2B28A42EED370BD30B50A240AE05E ++:10C34000B0FBF4F304FB13008D18303005F8010C3A ++:10C35000521E1846D2B2002AF2D130BD30B50023A9 ++:10C360004FF6FF7510E0040A44EA002084B2C85C6E ++:10C370006040C0F30314604005EA00344440E0B27A ++:10C380005B1C84EA40109BB29342ECD330BD0000AA ++:10C3900010B50AF04CF8042803D00AF048F8052834 ++:10C3A00002D108F05FFD50B90AF0FEF8032803D06F ++:10C3B0000AF000F9032804D107F0EFFC08B10120CE ++:10C3C00010BD002010BD70B50C460546062102F0D8 ++:10C3D00068FC606008B1002006E00721284602F0F2 ++:10C3E00060FC606018B101202070002070BD022048 ++:10C3F00070BD2DE9FC470C4606466946FFF7E3FF92 ++:10C4000000287DD19DF8000050B107F022FCB04219 ++:10C410007CD0214630460DF020F9002873D115E07C ++:10C4200008F039FAB04271D0214630460BF0CAFF0D ++:10C43000002868D1019D95F8C000503518B9687E74 ++:10C4400008B1012000E00020804603E0019D95F83E ++:10C45000698050354FF0010A95F835004FF000091A ++:10C46000A0B195F83600800710D584F8019084F8C3 ++:10C4700000A084F80290A68095F83710A171298F4A ++:10C480002181698F618185F835903CE0304602F06A ++:10C490007DFD070000D1FFDF384601F078FF10F086 ++:10C4A000FF0008D084F801900D212170A680E08063 ++:10C4B00084F802A027E0304602F056FD070000D1C4 ++:10C4C000FFDFB8F1000F21D0384601F0F0FFB8B11E ++:10C4D0009DF8000038B90198D0F8E4004188B142D5 ++:10C4E00001D180F80090304607F075FA84F8019089 ++:10C4F0000A21217084F80290A680A97EA17100E033 ++:10C5000004E085F819900120BDE8FC870020FBE7D6 ++:10C510001CB56946FFF757FF00B1FFDF684601F021 ++:10C52000A0FDFF4900208968A1F8C2001CBD2DE9CB ++:10C53000FC4104460E46062002F05EFB054607203D ++:10C5400002F05AFB2844C7B20025A8463E4417E033 ++:10C550002088401C80B22080B04202D34046A4F81C ++:10C56000008080B2B84204D3B04202D20020BDE8BD ++:10C57000FC816946FFF727FF0028F8D06D1CEDB25B ++:10C58000AE42E5D84FF6FF7020801220EFE738B5B5 ++:10C590004FF6FF70ADF800000DE00621BDF8000079 ++:10C5A00002F091FB04460721BDF8000002F08BFB6E ++:10C5B0000CB100B1FFDF00216846FFF7B8FF00288B ++:10C5C000EBD038BD2DE9F041D6A00679076807F019 ++:10C5D0006FFA0EF047FCD54C4FF004081020A4F879 ++:10C5E000388060874FF6FF70A4F85600002584F865 ++:10C5F0005850A4F85A0084F8315004F8345BCB4901 ++:10C6000004F8065C25702572C4F809703D31667324 ++:10C61000481E0CF051F8A5731B2020824FF4A47122 ++:10C620006182A082E1820A21217684F819800321A7 ++:10C63000A176E1760E212177072161770621A17786 ++:10C64000E1772084BDE8F08170B5B54C0D4660609F ++:10C65000217007F0A8F9FFF79AFFFFF7B3FF2078E2 ++:10C6600009F099FC08F03CFA217860680BF043FF70 ++:10C6700020780DF0A9FF28460AF04EFB07F029FBB1 ++:10C68000217860680DF094F8BDE870400EF0EABBC8 ++:10C6900010B501240AB1002010BD21B1012903D039 ++:10C6A0000024204610BD02210FF030FEF9E72DE9ED ++:10C6B000F047040000D1FFDF9C4D002695F83100C3 ++:10C6C00058B166701420207095F83200A07095F86B ++:10C6D0003300E07085F8316068E0287840B12C22A2 ++:10C6E000A91C204611F0E0FB0F2020702E705DE0A9 ++:10C6F00095F82E0060B10120E07095F82F00A07031 ++:10C7000095F8300060701020207085F82E604DE0A4 ++:10C71000864802215A308246FFF709FF00B1FFDF49 ++:10C72000B5F85A90062002F067FA0746072002F093 ++:10C7300063FA3844C7B2781C00F0FF08B5F85A0015 ++:10C74000B84212D1204608F039F850BB95F83400B1 ++:10C7500078B36670122020702021A01C11F01BFC01 ++:10C760000220A07085F8346020E040451AD12046B0 ++:10C7700007F044FAE8B12078122817D1A0783C28B5 ++:10C7800014D1A088072102F08CFA050000D1FFDF48 ++:10C79000288807F020F9A088072102F094FA00B158 ++:10C7A000FFDF03E02146FFF724FE10B10120BDE8C2 ++:10C7B000F087FFE702215046FFF7B9FE18B9B5F838 ++:10C7C0005A104945BAD10020F1E770E710B509F0D9 ++:10C7D0005FFB00B1FFDF0BF08CFE00B1FFDF08F064 ++:10C7E00049F90AF082FA00B1FFDF0CF0DFFF00B177 ++:10C7F000FFDF07F038FA00B1FFDF0DF0DFFE00B118 ++:10C80000FFDFFFF7C4FEFFF7DDFE07F0B5F802F02B ++:10C810009AFB0EF027FB454800210171012141716F ++:10C820000222C270017010BD10B5404C207828B1B2 ++:10C830000A21BDE810400F2001F0D8BBFFF7A8FD8A ++:10C8400008B10C2002E00EF053FB00202071012003 ++:10C8500060710A21E170207010BD70B5334D04463F ++:10C86000287828B1BDE8704032210F2001F0BEBB0E ++:10C87000207818B1012801D0122010E001F0C3FB8C ++:10C8800020B10EF080FC08B10C2008E0207801F007 ++:10C89000A2FB04F11703E21D611C0EF081FB28715D ++:10C8A000012068713221E970287070BD70B51F4C8D ++:10C8B0000546207828B1BDE870400B210F2001F01B ++:10C8C00095BB287818B1012801D012200EE0FFF79F ++:10C8D0005FFD08B10C2009E0287801F07CFB691CA1 ++:10C8E0000EF0CDFA08B1002000E0072020710120F1 ++:10C8F00060710B21E170207070BD10B50B4C217878 ++:10C9000029B13021BDE810400F2001F06FBB008835 ++:10C910000EF03CFC302158B10020207109E00000ED ++:10C9200048000020FFFFFFFF1F0000000C06002052 ++:10C93000217101206071E170207010BD70B5FF4C55 ++:10C940000546207828B1BDE8704031210F2001F064 ++:10C950004DBB01F058FB08B10C2005E0287800F031 ++:10C9600001000EF00DFC00202071012060713121CA ++:10C97000E170207070BD10B5F04C207828B13421E2 ++:10C98000BDE810400F2001F031BB01F03CFB20B1AD ++:10C990000EF0F9FB08B10C2002E00EF058FB00206D ++:10C9A0002071012060713421E170207010BD10B53C ++:10C9B000E24C217829B13621BDE810400F2001F06A ++:10C9C00015BB0378411CA21D18460EF041FC08B1AE ++:10C9D000002000E002202071012060713621E1700A ++:10C9E000207010BD70B5D54C0546207828B1BDE843 ++:10C9F000704037210F2001F0F9BA287801F0EBFAE6 ++:10CA0000691C0EF0D1FB022508280AD00EF00FFD9C ++:10CA100038B10168C4F80610808860810020207158 ++:10CA200000E02571012060713721E170207070BD38 ++:10CA3000C248017819B10F21084601F0D7BA002188 ++:10CA400001710F218170C170FF2181714FF6FF715B ++:10CA50000181BB4949680A7882728A888281498843 ++:10CA6000C1810121417101707047B4490A781AB13E ++:10CA700047210F2001F0BABA0088A1F85600012022 ++:10CA800081F8580000220A7148714722CA70087064 ++:10CA9000704710B5A94C207828B12B21BDE8104073 ++:10CAA0000F2001F0A3BA0821A01D05F0F5FB00201E ++:10CAB0002071012060712B21E170207010BD70B5D4 ++:10CAC0009E4C217829B1BDE870403F210F2001F034 ++:10CAD0008DBA90F90000042816D0032814D098B11C ++:10CAE000011D11D010F1080F0ED010F10C0F0BD05A ++:10CAF00010F1100F08D010F1140F05D010F1280F0D ++:10CB000002D01220207103E0002506F0DEF9257125 ++:10CB10003F20E07001206071207070BD10B5874C1F ++:10CB2000217829B12A21BDE810400F2001F05EBA1A ++:10CB3000A31D012200F110010FF097F800202071D1 ++:10CB40000F20A0702A20E07001206071207010BDBD ++:10CB50002DE9FF41794C207828B146210F2001F0C2 ++:10CB600045FABDE8FF814FF0000884F80680B4F86C ++:10CB70005600ADF8040002A9FFF725FC20B1002102 ++:10CB800001A8FFF7D4FCE8BBBDF80400ADF8000035 ++:10CB900002A980B2FFF717FC00B1FFDFBDF800006B ++:10CBA00002F0F4F9050000D1FFDF2846039F01F0F1 ++:10CBB00085FC80F0010697F86950BDF8000002F08E ++:10CBC000D3F9070000D1FFDF384601F070FC80F098 ++:10CBD000010255EA020019D0A179BDF8000004EB6A ++:10CBE000410108815549A3791831585C65F300006B ++:10CBF0005854A37962F341005854A27966F3820035 ++:10CC0000505400E00DE0A079401CA071002168465E ++:10CC1000FFF78DFC28B9BDF80000BDF8041088426C ++:10CC2000B6D1012084F8048060714621E170207043 ++:10CC300097E770B5414C0546207828B1BDE87040B3 ++:10CC400042210F2001F0D2B909F0F1FB052804D0F0 ++:10CC5000284609F08DF9002000E00C202071012009 ++:10CC600060714221E170207070BD10B5334C2078A6 ++:10CC700028B10E21BDE810400F2001F0B7B9A11D69 ++:10CC8000002006F029FF00202071012060710E2194 ++:10CC9000E170207010BD70B5284C0546207828B191 ++:10CCA000BDE8704040210F2001F0A0B901F0ABF9C0 ++:10CCB00038B10C202071012060714021E17020709A ++:10CCC00070BD2946002006F0F4FE0020F2E770B5A2 ++:10CCD0001A4C0546207828B1BDE870403E210F204F ++:10CCE00001F084B909F0C4F910B90AF0EBFA68B19F ++:10CCF00028780AF060F8287808F0EBF80020207116 ++:10CD0000012060713E21E170207070BD0C20F6E7BB ++:10CD100070B50A4C0546207828B1BDE8704017214F ++:10CD20000F2001F063B901F06EF958B10C202071A9 ++:10CD3000012060711721E170207070BD0C06002089 ++:10CD4000480000202946012006F0B3FE0020EEE74F ++:10CD500038B5FF4D0446287828B1BDE838404A214F ++:10CD60000F2001F043B9227961798A4215D0A07968 ++:10CD7000E379984211D01F2A0FD81F290DD800221D ++:10CD8000114610F0D7FB40B90022E079114610F0AF ++:10CD9000D1FB10B9207A072801D9122015E04FF6EF ++:10CDA000FF70ADF8000009F0FFFBA8B909F002FC24 ++:10CDB00090B909F03CFB78B900216846FFF7B7FB52 ++:10CDC00050B1204605F09AFF0020287101206871BB ++:10CDD0004A21E970287038BD0C20F6E72DE9FC47A0 ++:10CDE000DB4C054694F82E0028B12821102001F0D4 ++:10CDF000FDF8BDE8FC87282084F83000012184F884 ++:10CE00002E10A8784FF000091A2825D00EDC16281D ++:10CE100031D2DFE800F03030303030213030303087 ++:10CE20003030303030303030302121212A2822D0AB ++:10CE30000BDCA0F11E000C281DD2DFE800F01C1C4A ++:10CE40001C1C1C1C1C1C1C1C1C0D3A38042812D257 ++:10CE5000DFE800F0110211022888B0F5706F0AD2E5 ++:10CE60001F20884684F82F0028886946FFF7ABFA10 ++:10CE700018B1022019E0122017E09DF80000019F70 ++:10CE8000002806D007F1F607019E05D106F1DD0660 ++:10CE900004E007F1DC07F7E706F1F706684601F062 ++:10CEA000D5F808B1387818B10C2084F82F00A0E725 ++:10CEB00087F80080A878307084F82F90684601F0D9 ++:10CEC000D0F896E77CB5A24C0546207820B1252104 ++:10CED0000F2001F08BF87CBD28886946FFF773FAB4 ++:10CEE000002160B102202071A1602173E1800F2038 ++:10CEF000A0702520E0700120607120707CBD019A37 ++:10CF00001046503282F83E108368A360037B23737F ++:10CF100092F83E30002BF5D12888E080E7E710B585 ++:10CF200040B10478406813B1B0F8440003E0B0F8B1 ++:10CF3000460000E0FB201B2908D3814206D8B2F549 ++:10CF4000A47F03D340F64800824201D9122010BDCD ++:10CF5000002010BD70B57E4C0546207828B1BDE894 ++:10CF600070404C210F2001F041B8012666711F204E ++:10CF700020710F20A0704C20E0702670EA88A988EC ++:10CF800033460020FFF7CBFF30B900236A88298899 ++:10CF90001846FFF7C4FF08B12071CEE604F8426FCF ++:10CFA000A888E080E8882081288860806888A08040 ++:10CFB0000020207004F83E0CBFE67CB5644D0446AA ++:10CFC000287820B13A210F2001F010F87CBD01260D ++:10CFD0006E711F2028710F20A8703A20E8702E7003 ++:10CFE00020886946FFF7EFF908B102200DE0A2881A ++:10CFF000618801236846FFF792FF30B9A2886188F3 ++:10D0000000236846FFF78BFF08B128717CBD9DF8AF ++:10D0100000100020002901990988E98028710199F0 ++:10D0200018D081F81961019A6188A2F81E11019A3D ++:10D03000A188A2F82011019A6188A2F81A11019A18 ++:10D04000A188A2F81C11019981F81861019981F851 ++:10D0500019017CBD81F8F160019A6188A2F8F6108F ++:10D06000019AA188A2F8F810019A6188A2F8F2103A ++:10D07000019AA188A2F8F410019981F8F060019951 ++:10D0800081F8F1007CBD70B5314C0546207828B19F ++:10D09000BDE870403C210F2000F0A8BF012666715A ++:10D0A0000F20A0703C20E07026706A8829883346E3 ++:10D0B0000020FFF734FF30B900236A88298818461A ++:10D0C000FFF72DFF08B1207137E604F8426F28887A ++:10D0D00060806888A0802888E0806888208100209F ++:10D0E000207004F83E0C28E670B5194D287828B158 ++:10D0F000BDE870403B210F2000F078BF95F842005A ++:10D100002C1D00B1FFDFB5F848006080B5F84A007B ++:10D11000A08001206070002121700F21A9703B21A7 ++:10D12000E970287009E670B5094D287828B1BDE886 ++:10D1300070403D210F2000F059BFFB262C1DEE80D2 ++:10D14000304600F04FFFA080E680304602E000004D ++:10D150000C06002000F046FF2081012060700021B5 ++:10D1600021700F21A9703D21E9702870E5E52DE9B6 ++:10D17000FC41FC4C064694F82E0028B110210846CC ++:10D1800000F034FFBDE8FC811F2084F82F00102040 ++:10D1900084F83000012784F82E7030886946FFF744 ++:10D1A00012F978B9684600F051FF58B1019D9DF819 ++:10D1B000000050350028019806D000F585700178F0 ++:10D1C00041B904E0022006E0D0F8E400F7E795F862 ++:10D1D000351019B13A2084F82F00D3E795F83610AE ++:10D1E00089070CD1042101709DF8000020B9019934 ++:10D1F0003088D1F8E4104880684600F032FF002003 ++:10D2000084F82F0085F83570BCE72DE9F041D54C46 ++:10D210000546207828B1BDE8F0411D210F2000F01F ++:10D22000E5BE1F202071012060711D21E17020707A ++:10D2300009F0FDF80C2604283CD005283AD0A9793D ++:10D240001220012904D019B1022901D0032926D1C5 ++:10D25000297809B1012922D1E97929B1012903D01D ++:10D26000022901D003291AD1698843F6FD720B1FE8 ++:10D270003020934213D2AB881B1F93420FD22187D9 ++:10D28000A88860870027A87907F05DFD90B1E8794C ++:10D2900007F0B0FD2878012804D030B10CE02071EF ++:10D2A000BDE8F0810021022001E00021012007F00B ++:10D2B000D0FD08B12671F3E72771F1E770B5A94CED ++:10D2C000217829B1BDE870401E210F2000F08EBEEC ++:10D2D0001F212171012161711E22E27021700278EB ++:10D2E0001221012A00D01AB9407818B1012801D0C2 ++:10D2F000217122E500260C25012A08D009F097F8B3 ++:10D30000052802D008F071FD40B1257115E507F040 ++:10D3100031FD618F208F08F0B8FEF5E726710CE52E ++:10D320002DE9F0478F4C0746B0F84600B4F844505A ++:10D330000E46854200D3054600F054FE0146B4F87F ++:10D340004600814203D8B7F8460000F04BFE804605 ++:10D35000A146B4F84840B7F84400844200D30446DC ++:10D3600000F040FE0146B9F84A00814203D8B7F800 ++:10D37000440000F037FE4FF4A4721B2C01D0904201 ++:10D3800003D11B2D08D0904506D0F580A6F8088063 ++:10D390007480B08001203070BDE8F0872DE9FC5F1B ++:10D3A0000546AFF680216F4ED1E900A196F82E0018 ++:10D3B000884628B1BDE8FC5F2121102000F016BE90 ++:10D3C0001F2086F82F00212086F830004FF0010B37 ++:10D3D00086F82EB0284600F052FE002811D109F040 ++:10D3E00026F805280CD009F022F8042808D096F871 ++:10D3F000340028B907F04FFAA0F57F41FF3901D07A ++:10D400000C20D0E0062101A801F01CFC04007DD016 ++:10D4100003210EF061FAB6F85400A4F84400B6F8FF ++:10D420005400A4F8460096F84D000090B6F8541049 ++:10D4300096F84C3020880A4601F0E1FC04287CD0A4 ++:10D4400000B1FFDF208806F0C5FA04F10D07B4F83B ++:10D4500000900421384604F01FFF494638460EF07C ++:10D4600078FB41A03F1D006800900321684604F04E ++:10D470009EFE002069460A5C3A54401CC0B2032854 ++:10D48000F9D3288A6080688AA080A88AE08096F80C ++:10D490004F2096F84E1020460EF0FFFC0146204625 ++:10D4A0000EF034FD4FF0000984F8569084F8579040 ++:10D4B0004F46687900F08FFD6076D5F80600C4F815 ++:10D4C0001A006889E083C4F808A084F80C8084F806 ++:10D4D000ECB004F1F0012046FFF722FF8DF8007058 ++:10D4E0000121684604F063FE9DF8000000F007018A ++:10D4F000C0F3C1021144C0F3401008448DF800008D ++:10D50000401D2076092804D2083001E013E014E021 ++:10D510002076002120460EF0DFF9287B07F013FC6F ++:10D5200098B107F027FC69792879AA1D07F06DFCEE ++:10D5300007001BD027E0092035E02088062101F0F4 ++:10D54000C2FB00B1FFDF07202DE0208806F043FA80 ++:10D550002088062101F0B7FB00283FF451AFFFDF20 ++:10D560004EE700000C060020112233002146032064 ++:10D5700007F06FFC070006D16A882988204608F06A ++:10D5800036FD07000CD0208806F025FA20880621F9 ++:10D5900001F099FB00B1FFDF86F82F70BDE8FC9F1A ++:10D5A000484684F8E09086F82F00F7E738B5FE4C3F ++:10D5B000207820B122210F2000F018FD38BD1F2057 ++:10D5C0002071012565712220E070257094F83400E7 ++:10D5D00010BB08F02CFF052805D007F05CF9A0F57A ++:10D5E0007F41FF3918D000202071684608F083FD84 ++:10D5F0000028E3D10098008806F0EDF90098062194 ++:10D60000008801F060FB00B1FFDFE84884F8345087 ++:10D610000078FCF74FFC38BD0C20207138BD2DE997 ++:10D62000F041E14D044695F82E0028B1BDE8F041E7 ++:10D630002321102000F0DABC1F2085F82F002320C2 ++:10D6400085F83000012085F82E00618840F67B4384 ++:10D650008A1F30209A4251D2A288961F9E424DD2F4 ++:10D6600091424BD8E188B1F5FA7F47D2218940F643 ++:10D670007746A1F10A03B34240D2B1EBD20F3DD9B4 ++:10D680006189A289914239D84FF00008208806218B ++:10D6900001F007FB06004FF0020707D000F0C8FCBE ++:10D6A00020B1D6F8E400017839B902E085F82F708E ++:10D6B000F6E5D6F81011097809B13A201EE00521E7 ++:10D6C0008171D6F8E4004146A0F80880D6F8E4203D ++:10D6D000A0885081D6F8E420E0889081D6F8E42034 ++:10D6E0002089D081D6F8E400028943899A4204D87F ++:10D6F0008279082A01D89A4203D3122085F82F0094 ++:10D70000CEE522884280D6F8E400077085F82F1015 ++:10D71000C6E52DE9FE43A44C0646207830B103B09F ++:10D720002421BDE8F0430F2000F060BC01256571A5 ++:10D730002420E070257030460EF02DFA08B100204C ++:10D7400000E01220207100282CD184F83C50306871 ++:10D75000C4F83D00307984F841004FF0000884F8A7 ++:10D760003C806946062001F028FA00B1FFDF6846D8 ++:10D7700001F001FAA0B9BDF8047000BFBDF80400C3 ++:10D78000062101F08EFA060000D1FFDF86F8EC508A ++:10D79000684601F0F0F918B9BDF80400B842EDD1BF ++:10D7A00084F80480BDE8FE8370B57F4D064695F889 ++:10D7B0002E0028B1BDE870402621102000F016BCD4 ++:10D7C0001F2085F82F00262085F83000012085F8DD ++:10D7D0002E003088062101F064FA040007D000F022 ++:10D7E00027FC20B1D4F8E400017831B901E002202F ++:10D7F0000CE0D4F81011097809B13A2006E00521AF ++:10D800000170D4F8E41030884880002085F82F009B ++:10D810005AE46548017819B106210F2000F0E6BBF3 ++:10D82000002202710F2181700621C170C0F806200C ++:10D83000C0F80A20F1218171012141710170704706 ++:10D840002DE9F041584D064695F82E0028B1BDE867 ++:10D85000F0412C21102000F0C9BB1F2085F82F00BB ++:10D860002C2085F83000012085F82E003088062114 ++:10D8700001F017FA040007D000F0DAFB20B1D4F869 ++:10D88000E410087830B901E0022026E0D4F8100155 ++:10D89000007808B13A2020E08C200027005D10F0CD ++:10D8A000010F19D0D6F802004860D6F8060088604B ++:10D8B00054F8E40F718910228181206806F10C016F ++:10D8C0000E3010F0F1FA21680320087021683088CA ++:10D8D000488085F82F70E3E40C2085F82F00DFE402 ++:10D8E00070B5314D04460C26287828B1BDE870404B ++:10D8F00018210F2000F07ABB08F056FE03284BD009 ++:10D9000008F058FE032847D0A07908B101282DD18E ++:10D91000607928B1012803D0022801D0032825D13D ++:10D92000A07B28B1012803D0022801D003281DD1F3 ++:10D93000607BD8B1C00819D162884FF48040824220 ++:10D9400002D82188814203D9207901280ED118E01C ++:10D95000207930B1012814D0022805D0032805D140 ++:10D9600002E0202A0BD30CE0A0290AD22079042857 ++:10D9700005D12088202802D36188884201D9122647 ++:10D980000AE0607906F010FA30B1207985F83600A7 ++:10D99000204606F073FA064601202E7168711821A0 ++:10D9A000E9702870A5E400000C0600204800002063 ++:10D9B00010B5FE4C217829B11A21BDE810400F2086 ++:10D9C00000F014BB01781F2902D91220207106E053 ++:10D9D000002121710278411C104606F0C6FA012090 ++:10D9E00060711A21E170207010BD10B5EF4C2178E4 ++:10D9F00029B12021BDE810400F2000F0F7BA0178CE ++:10DA00001F2902D91220207106E00021217102781D ++:10DA1000411C104606F098FA012060712021E17047 ++:10DA2000207010BD2DE9FC41E04C217829B1BDE802 ++:10DA3000FC411B210F2000F0D9BA012767710C218E ++:10DA4000217100780026012804D0002879D0122006 ++:10DA5000207190E006F072F9002819D006F0B7F9AD ++:10DA600094F83600A8B1012813D0042811D008F08A ++:10DA7000A1FD00287FD108F097FD18B108F094FDB2 ++:10DA8000022878D1002009F099F900B1FFDF267152 ++:10DA900071E008F089FD00286DD108F08BFD0028A9 ++:10DAA00069D106F0D6F8A0F57F41FF3963D107218F ++:10DAB00001A801F0C7F8BE4905468860280000D1DA ++:10DAC000FFDF032128460DF00BFE284606F081FB00 ++:10DAD00034F8540FA5F8440034F80409A5F84600BA ++:10DAE000E278A17828460EF043FA01460022284643 ++:10DAF0000EF077FA6078009014F8043B288834F828 ++:10DB000054190A4601F07BF980B1042800D0FFDFE8 ++:10DB10002888072101F0D7F800B1FFDF0720207126 ++:10DB200005F58C712846FFF7FBFB24E0288805F0FB ++:10DB300051FF284609F042F900B1FFDF2671EFE7F7 ++:10DB4000FFE708F031FD032803D008F033FD032878 ++:10DB500011D108F02CFD0546002009F052F850B90B ++:10DB6000267145B1288805F036FF2888072101F085 ++:10DB7000AAF800B1FFDF1B20E0702770BDE8FC8130 ++:10DB80002DE9F041894C0646207828B1BDE8F041E6 ++:10DB90002D210F2000F02ABA3088072101F081F8EA ++:10DBA00005004FF0010720D095F8F90040B995F82D ++:10DBB0005C00112801D0122802D195F8360150B12D ++:10DBC0000C2020710F20A0702D20E0703088E080A4 ++:10DBD000677127706CE51022B11C05F1FA0010F096 ++:10DBE00063F985F8F9700020EBE70220E9E770B5EA ++:10DBF0006E4C0546207828B1BDE870402E210F20DC ++:10DC000000F0F4B92888072101F04BF8022178B11F ++:10DC100090F8F9202AB990F85C20112A04D0122A31 ++:10DC200002D00C20207104E080F8F9100020F9E700 ++:10DC300021710F20A0702E20E0702888E080012044 ++:10DC400060712070E4E52DE9FC47584C06462078C9 ++:10DC500028B138210F2000F0C9F9BDE8FC87708891 ++:10DC60004BF68032122190420AD848B14FF000089A ++:10DC700030886946FEF7A7FB20B10220207110E032 ++:10DC800021710EE0019800F15009851C2F887288DF ++:10DC9000394648460DF01AFD2888B842F6D184F876 ++:10DCA0000480012060713821E1702070D5E77CB5D7 ++:10DCB0003E4C0546207820B145210F2000F096F912 ++:10DCC0007CBD28886946FEF77EFB38B102202071B2 ++:10DCD000012060714521E17020707CBD01987F2298 ++:10DCE000014680F8582080F85920002280F85A20F8 ++:10DCF000A87801F8280FE878487028798870227190 ++:10DD0000E6E71CB5294C217821B113210F2000F042 ++:10DD10006DF91CBD00886946FEF755FB08B102206D ++:10DD200005E0019890F82810012902D00C202071FC ++:10DD300006E0582100222271095C21720088E080EF ++:10DD4000012060711321E1700F21A17020701CBDB2 ++:10DD50002DE9F041154C0546207828B1BDE8F04189 ++:10DD600043210F2000F042B9A87808B1012803D15F ++:10DD7000A888B0F5FA7F01D91220207128880721E0 ++:10DD800000F08FFF0126C8B1002780F8F070A98845 ++:10DD9000A0F8F21080F8CC60A978012900D0002109 ++:10DDA00080F8F01090F8CD0030B103E00C060020B0 ++:10DDB0004800002009F04EF9277101E0022020718F ++:10DDC00066714320E070267072E42DE9F041CF4C7B ++:10DDD0000546207828B1BDE8F04148210F2000F029 ++:10DDE00005B92888072100F05CFF012358B3828819 ++:10DDF0006D88C688418803EB4207BD4217D342F2C3 ++:10DE000010777E43BF107943B6FBF1F1491E89B20A ++:10DE10004FF4FA76B14200D931468D4200D22946FC ++:10DE2000491C521CB1FBF2F15143491E8AB290F8D1 ++:10DE3000221101B90284E280002020716371482020 ++:10DE4000E070237034E40220F7E770B5AF4C05466C ++:10DE5000207828B1BDE8704041210F2000F0C6B8FD ++:10DE600008F0A2FB08B10C2017E0297889B10A2933 ++:10DE70000FD014290DD01E290BD0282909D0322902 ++:10DE800007D04B2905D0642903D0FF2901D01220E7 ++:10DE900003E0284609F04FF800202071012060714E ++:10DEA0004121E1702070B3E498490A781AB14D21FC ++:10DEB0000F2000F09BB8427862B1827852B1C278EC ++:10DEC00042B1027932B1C2881B2A03D303781BB155 ++:10DED000012B01D0122007E0A1F854200278D0F8DD ++:10DEE000010042B1086500200871012048714D22EF ++:10DEF000CA7008707047C864F5E770B5834C054672 ++:10DF0000207828B1BDE870404E210F2000F06EB897 ++:10DF1000287800F0010008F019F9287800F00100D5 ++:10DF200009F061F800202071012060714E21E1703C ++:10DF300020706DE470B5754D0446287828B1BDE8B1 ++:10DF400070404B210F2000F051B800F05CF808B190 ++:10DF50000C200DE0601C0DF063FA207800F0010049 ++:10DF600005F031FF207800F0010006F0FFFE0020F0 ++:10DF70002871012068714B21E970287048E470B560 ++:10DF8000624C0546207828B1BDE8704049210F2039 ++:10DF900000F02CB808F008FB10B908F00BFB08B132 ++:10DFA0000C2003E0287805F0F0FF0020207101200C ++:10DFB00060714921E17020702AE410B501784F2981 ++:10DFC00007D2534A52F8211019B1801C884701200A ++:10DFD00010BD002010BD18B1022801D001207047EB ++:10DFE00000207047C000703080B27047474A92F8F6 ++:10DFF0003130002B06D182F8320082F83310012034 ++:10E0000082F83100704710B508F011FA04280DD0DD ++:10E0100008F00DFA052809D008F0C6FA032805D043 ++:10E0200008F0C8FA032801D0002010BD012010BD5F ++:10E0300090F8691041B990F8C01029B190F8C0006B ++:10E04000042801D001207047002070470178406803 ++:10E0500021B190F8690010B100207047E8E7012075 ++:10E0600070470178012909D1406890F8CD10002946 ++:10E0700004D0002180F8CD1008F0ECBF704710B537 ++:10E08000038843F6FD711A1F8A4223D24288141F67 ++:10E090008C421FD29A421DD8C28940F67B43911F01 ++:10E0A000994217D2018A8C1F9C4213D28A4211D8FE ++:10E0B000428AB2F5FA7F0DD2828A40F67744A2F105 ++:10E0C0000A03A34206D2B2EBD10F03D9C18A028B55 ++:10E0D000914201D9302010BD017911B1012910D12F ++:10E0E00007E0417929B1012903D0022901D0032990 ++:10E0F00007D1007B38B1012805D0022803D00328BE ++:10E1000001D0122010BD002010BD00000C06002020 ++:10E110009CE301003F3070470844C01D424301F1B9 ++:10E120003F00104480B2704770B51D460446A818E1 ++:10E13000049BC01D00FB03F205F13F00104486B2B2 ++:10E14000B14238BFFFDF1E2120460FF024FFA6F1A9 ++:10E150001E0080B2A5756080B0F5004F88BFFFDF5C ++:10E16000608805F13B01884238BFFFDF6088401BB3 ++:10E17000A0F13B011B2934BF1B203B38208070BD20 ++:10E18000408870472DE9F04F0D46C188044600F1E4 ++:10E190001E08008921F4004320F4004221F40046C7 ++:10E1A00020F400474FF0010A4FF000099A4208D1CD ++:10E1B00000F4004001F4004188421CBF0020BDE88B ++:10E1C000F08FB7420BD9A17DB81B401AC01F854202 ++:10E1D0001BDC08EB06000021058041801EE0608802 ++:10E1E000A17D801B401AB0F1070B0ED4BBF11B0FB1 ++:10E1F000B8BFFFDF5D45D4BF29461FFA8BF1681A0F ++:10E200000204120C18BFBA4204DD84F814900020F6 ++:10E21000BDE8F08F08EB06000180428084F814A06E ++:10E22000BDE8F08F2DE9F041044600F11E02C088E0 ++:10E2300020F40043207D002808BFBDE8F081D018FD ++:10E240000288438813448B423CBF0020BDE8F08124 ++:10E25000002791429CBF0180478013D9891A0D0481 ++:10E260002D0C45800ED0E088A61D20F4004085428C ++:10E2700088BFFFDF30884FF4004121EA00002843C7 ++:10E28000308009E0A27D0088D31D1044C01D81B2FA ++:10E290006288A01D00F044FB27750120BDE8F081D5 ++:10E2A00030B4B0F804C0C488034600F11E052CF455 ++:10E2B00000402844A44503D10020188230BC704798 ++:10E2C000B3F80CC00488A44509D34088ACEB040C17 ++:10E2D000A0EB0C0084B20CEB0500C01E06E0A4EB22 ++:10E2E0000C049D7DA4B2AC446044001DB1F800C094 ++:10E2F000A44588BF0C80B3F80CC0BCF1000F0CBF64 ++:10E300004FF0010C4FF0000C82F800C00988198210 ++:10E3100030BC70472DE9F041044600F11E018088B1 ++:10E3200020F400404518208A002808BFBDE8F0818D ++:10E33000A189084480B2A08129886A881144814259 ++:10E3400038BFFFDF28886D88A289411900279142D4 ++:10E3500019D175B1A088261D20F40040A84238BF0D ++:10E36000FFDF30884FF4004121EA0000284330806D ++:10E3700008E0A27D1044C01D81B2D31D6288201D1B ++:10E3800000F0CEFAA78127820120BDE8F0812DE9B7 ++:10E39000F0474189B0F804800027044600F11E0AC6 ++:10E3A000414518BF4FF400493AD000BF21F4004066 ++:10E3B000504446886EB1608904F10A0520F400409B ++:10E3C000B04238BFFFDF288829EA000030432880A8 ++:10E3D00021E0A37D008803F1070C18446389C01D68 ++:10E3E00023F400456288284480B204F10A01904277 ++:10E3F0000BD2121A92B20CF11B0C62452CBF03F423 ++:10E40000004229EA030004D204E0801A80B229EA1B ++:10E41000030210430880781C618987B24145C5D149 ++:10E420003846BDE8F0872DE9F047B0F808800B4684 ++:10E43000044600F11E01B0F80A90808828F4004CD0 ++:10E4400001EB0C05804504BF0020BDE8F087002AE1 ++:10E450001CBF281D106023B1A27D291D18460FF096 ++:10E4600023FD2F886D888DB1E81987B2208904F1CA ++:10E47000080620F40040A84238BFFFDF30884FF480 ++:10E48000004121EA00002843308009E0A07D628835 ++:10E49000C119C91DC31D89B204F1080000F040FA7A ++:10E4A000C84504BF208960813846BDE8F08781886F ++:10E4B000C08881420CBF01200020704781880089FC ++:10E4C00088420CBF01200020704730B48488C28885 ++:10E4D00000F11E0324F4004C22F4004163449442F2 ++:10E4E0001BD08289048A15191C885A88A3189D425A ++:10E4F00016D312B18A4210D212E0837D0CF1070CC0 ++:10E500001A196244408892B2801A80B2223398422B ++:10E5100001D211B104E08A4202D130BC0020704720 ++:10E5200030BC012070472DE9F007B0F806C004891F ++:10E5300000F11E0702462CF400457E1924F4004920 ++:10E540002CF4004A002024F400434FF00108D14588 ++:10E550000AD104F400440CF4004C644504D0508209 ++:10E56000BDE8F00700207047AB4207D992F816C00B ++:10E570005B1BA3EB0C03DC1F002308E0B2F802C016 ++:10E58000947DACEB050CACEB040CACF10704002C57 ++:10E59000E5DBB2F80EC0BCF1000F0DD0B6F800C03C ++:10E5A00075884DB15B1B50758B42D8DBD0893844E0 ++:10E5B000A0EB0C00C01E09E0A4EB0C0450758C42CB ++:10E5C00008DB907DD38918443044001D5182BDE89A ++:10E5D000F00770478B42A8BF82F81580E6DABEE7E5 ++:10E5E0002DE9F05F044600F11E0AC088934620F42E ++:10E5F00000400AEB0005608A894608B1484502D20E ++:10E600000020BDE8F09FE089002804BF4FF000081B ++:10E61000464607D0B5F800806E8808EB06018842B0 ++:10E6200018BFFFDF607D4FF0000750EA060101D000 ++:10E6300048B332E0E08938B1A17D01444819B4F80B ++:10E6400017108180617E8171E18908EB09004944DE ++:10E65000E18128806F80BBF1000F0BD0A07D29885D ++:10E66000C31D0144C91D89B26288A01D00F058F97C ++:10E67000E78137E0A07DE189084428448188A4F837 ++:10E68000171080792DE0E089B4F817105044A0EB02 ++:10E69000080020F8031D617E817006EB090086B238 ++:10E6A000E089BBF1000F4844E081A5F800806E804E ++:10E6B0000ED0E088A51D20F40040B04238BFFFDF37 ++:10E6C00028884FF4004121EA000030432880CFE73A ++:10E6D000E0895044A0EB080030F8031DA4F817109F ++:10E6E00080786076678227750120BDE8F09F01463B ++:10E6F0001E308A88CB8822F4004C60449A4203D0B2 ++:10E700008989002908BF70470020704700F11E0367 ++:10E71000807D01F1040C604410600888002804BF6B ++:10E72000D81E106008884988084480B270472DE9D7 ++:10E73000F04115460A4600F11E061C46807D131D59 ++:10E74000034410885788069900281CBFC01C80B25B ++:10E7500026D088429CBF081A80B213D9401AA04222 ++:10E76000A8BF20461FFA80F85818424629460FF0E5 ++:10E770006FFB002818BFBDE8F0814544A4EB0800FA ++:10E7800084B2002001198F423CBF4FF0FF30BDE83A ++:10E79000F081304422462946BDE8F0410FF058BBD5 ++:10E7A000FA1C97B2F61ED4E72DE9F04100F11E07DE ++:10E7B0001D46807D0B1D0344164608880024B1F8D1 ++:10E7C0000280069A00281CBFC01C80B21FD0904255 ++:10E7D0009CBF101A80B20DD9801AA842A8BF284643 ++:10E7E00084B29918224630460FF05EFB281B85B292 ++:10E7F000264400204119414506D839182A4630469A ++:10E800000FF052FB601984B22046BDE8F08108F198 ++:10E8100003011FFA81F8FF1ED9E72DE9F0411646E2 ++:10E820000A4600F11E071D46807D131D0344108813 ++:10E830000024B2F80280069900281CBFC01C80B2D8 ++:10E840001FD088429CBF081A80B20DD9401AA84236 ++:10E85000A8BF284684B25818224631460FF024FB40 ++:10E86000281B85B2264400204119414506D838446A ++:10E870002A4631460FF018FB601984B22046BDE8E5 ++:10E88000F08108F103021FFA82F8FF1ED9E770B584 ++:10E89000044600F11E01C288808820F40043194418 ++:10E8A000904205D0A289002A04BF228A002A01D002 ++:10E8B000002070BDB1F800C04D8885B1261D20F440 ++:10E8C0000040A84238BFFFDF30884FF4004121EA02 ++:10E8D00000002843308000202082012070BDA07DF0 ++:10E8E0000CF10701C31D084481B26288201D00F0AD ++:10E8F00017F8F0E70021C181417541820175704729 ++:10E9000003881380C289002A04BF00207047C28890 ++:10E9100000F11E0322F400421A440A60C0897047C5 ++:10E9200010B4B0F800C02CF40044214489B24FF474 ++:10E93000004491420AD2521A92B21B339A422CBF1F ++:10E940000CF4004224EA0C0104D204E0891A89B2D2 ++:10E9500024EA0C021143018010BC70472DE9F041FC ++:10E9600088464FF6FC7102F103021E46040002EADB ++:10E97000010509D00027E01C20F00300A04200D0D0 ++:10E98000FFDF201D01210CE00127F4E702462844A7 ++:10E990002FB9B14201D2034600E000231360491CA5 ++:10E9A000C9B2B142F2D9011BC8F80010002F04D13E ++:10E9B0000EB1201D00E000202060BDE8F08102467D ++:10E9C00000201168002902D00846096811607047CC ++:10E9D00002680A60016070474FF6FC73C91C194059 ++:10E9E000101A001F90FBF1F0C0B270474FF6FC7395 ++:10E9F000C91C1940001D01FB02007047F8B5D24D3B ++:10EA000004460E46A878A04200D8FFDF05EB860733 ++:10EA1000B86A50F8240000B1FFDFB868FFF7CFFFF5 ++:10EA200005000DD0B86A062E40F824500AD0082EF2 ++:10EA300000D3FFDFC548294650F8262020469047DE ++:10EA40002846F8BDC048C24B7A30A0F12E02009093 ++:10EA50002946204609F0A0FCF2E72DE9F84F804650 ++:10EA6000DDF828901E4603EB090093468A46C4B29F ++:10EA70005FEA080707D00025FF2800D9FFDFBAF1B9 ++:10EA8000000F03D101E00125F6E7FFDF08F10300E5 ++:10EA900020F00301414500D0FFDFCB4500D9FFDF67 ++:10EAA00065B9A94A00204C324FF6FF7110705180B1 ++:10EAB000A74A1070A44A7A3210705180A24880F898 ++:10EAC00000B046708470C4700471447180F8069080 ++:10EAD000DFF878B2C67100260BF1400B8146FF1CAF ++:10EAE00027F003000746002D02D109EB860188605C ++:10EAF0003BF8162019F8063001D04FF000006946A7 ++:10EB0000FFF72CFF0098761CF6B20744082EE6D3D8 ++:10EB1000FF1C27F003002346064675B100200222A1 ++:10EB20006946FFF71BFF00983118002003464E4648 ++:10EB3000C91C21F003021DB110E0C9F84800EEE73E ++:10EB400006EB80070021BA6206E000BFD7F828C0B4 ++:10EB50004CF82130491CC9B2A142F7D3401CC0B2C5 ++:10EB600002EB84010828E3D3A1EB0800AAF8000017 ++:10EB70000020BDE8F88F10B5044603F005FF08B18A ++:10EB8000102010BD2078704A618802EB80009278D6 ++:10EB90000EE0836A53F8213043B14A1C6280A180A1 ++:10EBA000806A50F82100A060002010BD491C89B285 ++:10EBB0008A42EED86180052010BD70B505460C462E ++:10EBC000084603F0E1FE08B1102070BD082D01D306 ++:10EBD000072070BD25700020608070BD0EB56946AD ++:10EBE000FFF7EBFF00B1FFDF6846FFF7C4FF08B196 ++:10EBF00000200EBD01200EBD10B50446082800D32C ++:10EC0000FFDF5148005D10BD3EB505460024694652 ++:10EC1000FFF7D3FF18B1FFDF01E0641CE4B26846E0 ++:10EC2000FFF7A9FF0028F8D02846FFF7E5FF001BF3 ++:10EC3000C0B23EBD44498978814201D9C0B2704713 ++:10EC4000FF2070472DE9F0410C460546062901D00A ++:10EC5000072C10D13C4FB86CFFF7B1FE02004FF605 ++:10EC6000FF7604D00221B86CFFF7B6FE00E0304614 ++:10EC70002880B04202D10020BDE8F0812146FFF794 ++:10EC8000BDFE040002D1288800F050F82046F3E7CA ++:10EC9000A0F57F42FF3A01D0082901D30020704738 ++:10ECA000ACE6A0F57F42FF3A0BD0082909D2264AEC ++:10ECB0009378834205D902EB8101896A51F82000DB ++:10ECC0007047002070472DE9F04104460D46A4F539 ++:10ECD0007F4143F20200FF39CED0082D01D3072037 ++:10ECE000CAE719494FF000088A78A242C4D901EB5B ++:10ECF00085072146BA6A52F82460002EBCD0134A18 ++:10ED000008462032314652F825209047B96A062D30 ++:10ED100041F8248001D0072D02D1204600F006F8EA ++:10ED20003146B868FFF754FE0020A5E710B5064C41 ++:10ED3000C2B20221A06CFFF759FE0146A06CBDE8EB ++:10ED40001040FFF745BE000068060020D8E401002F ++:10ED50005400002001469F48002200680260037AA8 ++:10ED600000EB830040F80C2F8180114600F022B99F ++:10ED70002DE9F05F9846DDF830B0DDF828A01546A3 ++:10ED8000894604004FF0000623D00027E01C20F045 ++:10ED90000300A04200D0FFDF65B30120FFF7BAF9FE ++:10EDA00000FB05620AEBCB0016180120FFF7B2F951 ++:10EDB00000FB05620B9805EB450108EBC000104411 ++:10EDC00000EB4100143000EB850000EB850617B125 ++:10EDD00010E00127DAE77F48A6EB8507A900046069 ++:10EDE000257204F10C000C3F60600FF0F6F8B8B229 ++:10EDF000FFF7B0FF0020C9F80060BDE8F09F2DE9E3 ++:10EE0000FF4F744C814681B020689A468B4600B90A ++:10EE1000FFDF2068027A4A4503D9426852F8291078 ++:10EE200021B143F2020005B0BDE8F08F006800B9DF ++:10EE3000FFDF01210E9A0398FFF76EF9C61C4FF60B ++:10EE4000FC752E40584601215246FFF765F9C01C5B ++:10EE500000EA050808EB0600001D85B25D480027A2 ++:10EE60000068046801E027460446206838B1A1889C ++:10EE7000A942F8D13946204600F0A4F813E005F184 ++:10EE80000800A18880B2814229D33946204600F08B ++:10EE900099F8A0880022411B6019026081803946E0 ++:10EEA00000F088F8A580A08860802680251D0E9F30 ++:10EEB0000123039A314628460097FFF735F9208849 ++:10EEC000414628445A460123CDF800A0FFF72CF90B ++:10EED000404800684168002041F82940A3E7042029 ++:10EEE000A1E770B53B4C0546206800B9FFDF2068FC ++:10EEF000017AA94210D9426852F8250060B14188D0 ++:10EF0000002342F8253003608180194600F052F852 ++:10EF1000216800200A7A08E043F2020070BD4B68C5 ++:10EF200053F820306BB9401CC0B28242F7D80020A1 ++:10EF300002E08A88104480B209680029F9D1FFF7FD ++:10EF400009FF002070BD70B5224D286800280AD046 ++:10EF5000002404E02046FFF7C4FF641CE4B22868E4 ++:10EF6000007AA042F6D870BD70B51A4E054600244E ++:10EF7000306800B9FFDF3068017AA94204D94068DF ++:10EF800050F8250000B1041D204670BD70B5114E2B ++:10EF900005460024306800B9FFDF3068017AA942D5 ++:10EFA00006D9406850F8251011B131F8040B441807 ++:10EFB000204670BD19B10A680260086070470549B3 ++:10EFC0000968F8E7006809B10860704701490968F5 ++:10EFD000FAE700005C00002070B5044600780E4699 ++:10EFE00001281AD0072802D00C281AD115E0A068F1 ++:10EFF000216905780B2D0CD0052003F05EFC052D52 ++:10F000000FD0782300220520D4F8101003F0B8FBAD ++:10F0100007E0782300220620F8E70520216903F0A5 ++:10F020004CFC31462046BDE8704001F0A7B910B550 ++:10F0300000F13902C3799478411D64F00304234040 ++:10F04000C371DB070DD04B79547923404B710B7999 ++:10F05000127913400B718278C9788A4200D9817085 ++:10F0600010BD00224A710A71F5E74178012900D0EC ++:10F070000C21017070472DE9F74F86B000208C6994 ++:10F080000D468DF8040009780127FA4816464FF01E ++:10F09000070A4FF011094FF00A0B2A2978D2DFE84E ++:10F0A00011F02A00110352036903A803B303CC0330 ++:10F0B000FA030F043B04620481049A04D504E604B5 ++:10F0C000050510053005540577059C05C605E005C6 ++:10F0D000EE050F062706300663068506D6060D07E1 ++:10F0E0001B074B076A0779078A07C407FB0727082E ++:10F0F000E407E807ED0714B120781D2829D0D5F8DA ++:10F1000008805FEA080043D001208DF80400686A97 ++:10F11000059003208DF808008DF809B0286A039047 ++:10F12000A8880028EFD098F8001091B10F2910D2CC ++:10F130007ED2DFE801F07D144CDCFDFCFBFAF9F82F ++:10F14000F7089FF6F500022822D124B120780C2878 ++:10F1500001D0002770E302208DF80400ACE1062006 ++:10F16000696A03F0AAFBA8880728EDD1204601F0C0 ++:10F1700000F9022809D0204601F0FBF8032808D93D ++:10F18000204601F0F6F8072803D20120207005E0A0 ++:10F1900011E2002CB7D020780128D5D198F80400CE ++:10F1A000C11F0A2903D300BF85F81CB089E2A070F3 ++:10F1B000D8F80010A163B8F80410A18798F80600E9 ++:10F1C00084F83E00012028700320207046E00728C4 ++:10F1D000BAD1002C97D020780D28B5D198F803101B ++:10F1E00094F83B20C1F3C000C2F3C002104201D02A ++:10F1F0000E2000E00F20890707D198F80510014282 ++:10F20000D2D198F806100142CED194F83D2098F85A ++:10F21000051020EA02021142C6D194F83E2098F867 ++:10F22000061090430142BFD198F80400C11F00E0CE ++:10F2300045E20A29B8D2617F814201D90620C2E3A2 ++:10F24000D8F800106160B8F80410218198F8060021 ++:10F25000A072012028700E20207003208DF8040079 ++:10F26000686A059004F139000290601D0390173020 ++:10F27000049067E2412890D1204601F07AF80428F2 ++:10F2800002D1E078C00704D1204601F072F80F28BF ++:10F290009ED1A88CEF6880B24FF0400AD4F8248049 ++:10F2A000FFF762FE39460827424653460097FFF7AC ++:10F2B0007BFA0E208DF80400686A0590606A02905F ++:10F2C000002101A8FFF788FE2078042806D0A07F3F ++:10F2D00038B1012805D0032806D0AEE30520207000 ++:10F2E0000BE284F8009034E71220207066E01128C9 ++:10F2F000C1D1204601F03DF8042802D1E078C007D2 ++:10F3000019D0204601F035F8062805D1E078C0076D ++:10F3100011D1A07F02280ED0204601F02AF808E083 ++:10F32000AFE07DE09AE16EE14EE106E1E5E0CBE0A1 ++:10F330001CE011289FD1102208F1010104F14800BE ++:10F340000EF0B2FD607801280DD012202070E07818 ++:10F35000C00703D0A07F88B301282FD085F800B064 ++:10F360008DF804B0F0E384F800A027E011288FD1D5 ++:10F37000204600F0FEFF082804D0204600F0F9FFE8 ++:10F38000132885D12869D8B16869C8B104F178001B ++:10F39000102208F1010107460EF086FD20780828AA ++:10F3A00012D014202070E078C0070FD0A07F022870 ++:10F3B00018D06178022912D00328CFD10420FDE3B0 ++:10F3C00000208DF80400F6E00920EBE70B20287000 ++:10F3D000296901204870206CC1E9010792E208B157 ++:10F3E000012870D10B202870296981F801A0606A7A ++:10F3F0004860206AC1E9020778E2206CE278006880 ++:10F40000C2F34402521ED04000F0010040F08000E0 ++:10F4100000E000200874E06A48617CE20746F9E3F6 ++:10F420001128D0D1204600F0A4FF0A2802D1E078AC ++:10F43000C00704D1204600F09CFF1528C3D110223C ++:10F4400008F1010104F148000EF02EFD20780A2891 ++:10F4500012D01620207012202870296909204870C7 ++:10F4600004F158004860203088601038C860206C73 ++:10F470000861ACE314E601000B202070E4E2287080 ++:10F48000D9E102289FD1204600F073FF042804D35D ++:10F49000204600F06EFF082809D3204600F069FFDF ++:10F4A0000E2890D3204600F064FF12288BD2A07F54 ++:10F4B000022888D18DF80490686A059098F80100B8 ++:10F4C0008DF80800FBE36CE20228AAD1204600F088 ++:10F4D00050FF00286FD0204600F04BFF0128F9D0E4 ++:10F4E000204600F046FF0C28F4D005208DF80800D7 ++:10F4F00098F801008DF8090065E71128FCD1002C6F ++:10F50000FAD020781728F7D16178E06A022912D062 ++:10F510005FF0000101EB4101182606EBC10110224A ++:10F52000405808F101010EF0BFFC0520696A00F0A7 ++:10F5300013FF26700DE60121ECE70B28DCD1002C2F ++:10F54000DAD020781828D7D16178E06A02292CD047 ++:10F550005FF0000101EB4101102202EBC1014158B3 ++:10F56000B8F8010008806078E16A022820D0002005 ++:10F5700000EB4002142000EBC2000958404650F84E ++:10F58000032F0A60406848600520696A00F0E4FEC5 ++:10F590006078022810D04FF000002044407A20F01C ++:10F5A00001000CD14FF001010BE04FF00101D1E758 ++:10F5B0004FF00100DCE77FE24FF00100EDE74FF094 ++:10F5C00000012144487279E3112895D1002C93D091 ++:10F5D0002078192890D16078E16A022811D00020A3 ++:10F5E00000EB40021C2000EBC2001022085808F17A ++:10F5F00001010EF059FC0520696A00F0ADFE1A20E9 ++:10F60000F5E00120ECE7082898D1002C98D020786C ++:10F610001A2893D1E06A98F80120017862F3470133 ++:10F620000170E16AD8F8022041F8012FB8F806000D ++:10F6300088800520696A00F08FFE6078022807D074 ++:10F640004FF000002044407A20F002012BD033E03C ++:10F650004FF00100F6E7204441722FE31128B4D1A6 ++:10F66000002CB4D020781B28AFD16178E06A022941 ++:10F670001CD0002101EB4101202202EBC10110222C ++:10F68000405808F101010EF00FFC0520696A00F0F6 ++:10F6900063FE607802280CD04FF000002044407ACE ++:10F6A00020F0040108D14FF00100D4E74FF0010130 ++:10F6B000E0E74FF00100F1E74FF00000CBE785F8FD ++:10F6C0001CA0FAE33078012884D11C2204F11C002C ++:10F6D00071680EF02EFCE079C10894F83B0001EA55 ++:10F6E000D001E07861F30000E070217FF1BB217868 ++:10F6F00003290AD0C0073FF4F9AD032028708DF824 ++:10F7000004B0686A059041209EE3607FA17888423A ++:10F710003FF694AD02272771E179204621F0E00100 ++:10F72000E171617A21F0F0016172A17A21F0F001BA ++:10F73000A172FFF77CFC2F708DF804B0686A059009 ++:10F740008DF808A0F2E33078112888D18DF804A054 ++:10F75000696A0591B1680391ADF808A0084661682F ++:10F76000016021898180A17A817100E06AE0042032 ++:10F770002070A4E230781128A6D18DF804A0686A20 ++:10F780000590301D02AB07C883E807004120ADF8A3 ++:10F79000080008460C210170A88CD6F80C8080B2B5 ++:10F7A0004027D4F82090FFF7F1FB41464FF00808BE ++:10F7B0004A463B46CDF80080FFF72FF8002101A80C ++:10F7C000FFF70AFCE07820F03E00801CE070207813 ++:10F7D000052801D00F200AE0A07F00283FF4C3AD28 ++:10F7E0000128FBD003287DD184F80080B1E420708B ++:10F7F000AFE430780328A8D170680168A16640683A ++:10F80000E0660520287035E2317803299DD17168C2 ++:10F810000A68226749686167216C51B9A17F19B1F3 ++:10F82000012901D0062029E185F800A02064606448 ++:10F8300001E085F800A00327F3E33178022984D1A1 ++:10F84000317909B1297737E1A17F022910D0032945 ++:10F85000EFD16178012910D0A17994F83A200129DB ++:10F860000FD02064E178C90713D0012A0ED010E030 ++:10F87000B0680028E7D020640BE0A27994F83A1031 ++:10F88000EDE7B1680029DED02164EBE7F0680028DD ++:10F89000D9D06064CDE78DF804B0696A0591E1784C ++:10F8A0005846C90709D06178022903D1A17F29B13F ++:10F8B000012903D0A17F032900D00820287012E27B ++:10F8C00030781128BFD1B068286209202870E0780C ++:10F8D0002969C0070FD081F801A0206A4860606ADA ++:10F8E000886000E0ABE004F16800C860A07F0228F7 ++:10F8F0007FF48FAD81E501204870206C486004F1F1 ++:10F900006800886004F13800C860201D0861206B21 ++:10F910004861606B88611FE2E1783078C90701D0E7 ++:10F92000062100E00A2188428DD12078072817D0CF ++:10F9300084F800908DF804A0686A0590286A039006 ++:10F94000ADF80890032100F8011B102271680EF039 ++:10F95000ABFA002101A8FFF73FFB00202862C2E4B8 ++:10F9600008202070E6E730781128ABD18DF804A08C ++:10F97000686A0590B0680390ADF80890042100F81B ++:10F98000011B102204F168010EF08EFA002101A87B ++:10F99000FFF722FB2078092801D0132027E784F8FD ++:10F9A00000B016E0E1783078C90701D0062100E008 ++:10F9B0000A21884286D1102204F1480071680EF0B5 ++:10F9C00047FA10B104202877A2E3207809283FF4F1 ++:10F9D000C5AC0C2053E5E078C10735D0A17F0129E3 ++:10F9E00002D002291BD02CE00D202870296981F853 ++:10F9F00001B06078012809D0206A4860606A886098 ++:10FA000004F16800C8601030086104E5606A48606D ++:10FA1000206A886004F17800C8601038F4E7C0F309 ++:10FA2000440114290DD24FF0006101EBB0104FEAF0 ++:10FA3000B060E0706078012801D0102055E4062005 ++:10FA4000D5E6607801288AD00E2018E5307809289C ++:10FA50008BD185F800B010208DF80400686A0590FD ++:10FA600070680290002101A8FFF7B6FAE9E7E07894 ++:10FA7000C00706D0A07F01281FD10F2028700420C6 ++:10FA8000F8E015202870296902204870206C486031 ++:10FA90006078012805D004F1780088601038C860CB ++:10FAA0005AE104F1680088601030F8E730780228E5 ++:10FAB000CED1307908B1287728E3102028700F20A4 ++:10FAC000D8E030781328F7D185F80090296908200C ++:10FAD000487070684860607801280DD004F16800B3 ++:10FAE00088601030C860206B0861606B486104F169 ++:10FAF00058008861A06A21E004F17800886010381D ++:10FB0000F0E730780728D7D1607801281AD1A0789B ++:10FB1000A16A0A18C0F1100110460EF03CFA12203A ++:10FB2000287029690920487004F158004860203085 ++:10FB300088601038C860206C086141E0C861E06AE4 ++:10FB4000086209E11320C9E0CBE030780828B3D17E ++:10FB5000102204F1480071680EF07AF908B10B2008 ++:10FB600031E720780B28EDD02046FFF760FAA07827 ++:10FB7000A16A0A18C0F1100110460EF00CFA162006 ++:10FB8000287008208DF80400686A0590002049E07C ++:10FB90003078112890D1B068286214202870296923 ++:10FBA0000920487004F15800486010308860103017 ++:10FBB000C860606C08616078012800E09EE006D0B3 ++:10FBC00004F139004861206B8861606BB6E7601D05 ++:10FBD0004861606B8861206BB0E73078082892D16B ++:10FBE0008DF804A0686A0590286A0390ADF8089023 ++:10FBF0000D2100F8011B102271680EF055F900214B ++:10FC000001A8FFF7E9F9002028626178012902D0F4 ++:10FC10001520ECE569E21621297008218DF8041001 ++:10FC2000696A05910290A0788DF80C007EE1307829 ++:10FC30000B288CD1162028706078022802D120462B ++:10FC4000FFF7F5F9A07871680A18C0F110011046A5 ++:10FC50000EF0A1F908208DF80400686A059070681C ++:10FC6000E0E730780F2895D1E079C0077BD01720E6 ++:10FC7000287009208DF80400686A059056E13078F4 ++:10FC8000102887D11422311D04F11C000EF051F907 ++:10FC9000E16A208DA1F80900E16AA078C871E179D4 ++:10FCA000E26A01F003011172E16A627A0A73E16AA1 ++:10FCB000A07A81F824006078012876D0B3E13EE292 ++:10FCC0006078022801D0012000E000202044407A22 ++:10FCD000C0070BD0E078C00708D1192028708DF834 ++:10FCE00004B0686A05908DF808901FE11E2071E647 ++:10FCF0003078112874D1B06828621A202870052045 ++:10FD0000B8E7307803286BD16078E26A022801D026 ++:10FD1000012000E0002000EB4001142000EBC101B5 ++:10FD20005158726813680B6052684A601B21297031 ++:10FD3000D5E9041205234B70636A4B606778E36A68 ++:10FD4000022F01D0012700E0002707EB470700EB57 ++:10FD5000C7001858C1E90202686A4862069800F0B4 ++:10FD600024FBFFF75BBB87E130780E2838D1607841 ++:10FD7000E26A022801D0012000E0002000EB4000F0 ++:10FD8000102101EBC00002231058093271680CF0F9 ++:10FD90006DFC1C202870296904204870206A486086 ++:10FDA000E06A09308860F84879E65AE130780D2831 ++:10FDB00016D16178E06A022901D0012100E000211A ++:10FDC00001EB4101182707EBC101A2784058716887 ++:10FDD0000EF06AF86178E06A022902D0012101E0A0 ++:10FDE000A9E0002101EB410107EBC1014058A178D6 ++:10FDF0000844C1F110010EF0CEF88DF804A0686A35 ++:10FE00000590286A0390ADF8089006210170627889 ++:10FE1000E16A022A01D0012200E0002202EB420244 ++:10FE200007EBC202401C895810220EF03DF8002159 ++:10FE300001A8FFF7D1F8002028621D2028708DF856 ++:10FE400004B0686A05900B208DF808006EE03078E9 ++:10FE5000112870D18DF804A0686A0590B0680390ED ++:10FE60000B20ADF80800039880F800A06278E16AE2 ++:10FE7000022A01D0012200E0002202EB42021023FC ++:10FE800003EBC20289580988A0F801106178E26A80 ++:10FE9000022901D0012100E0002101EB41031421DE ++:10FEA00001EBC30151580A6840F8032F49684160CB ++:10FEB000002101A8FFF790F818E729E160780228EF ++:10FEC00001D0012000E000202044407A800701D5C5 ++:10FED0001F2003E721207DE5307811282BD18DF8F4 ++:10FEE00004A0686A0590B0680390ADF808900827F0 ++:10FEF00007706178E26A022901D0012100E0002147 ++:10FF000001EB41031C2101EBC301401C515810229D ++:10FF10000DF0CAFF002101A8FFF75EF8202028702D ++:10FF20008DF804B0686A05908DF80870314601A814 ++:10FF3000FFF752F815E775E03078112872D18DF887 ++:10FF400004A0686A0590B06803900820ADF8080026 ++:10FF5000039809210170E169097849084170E16954 ++:10FF600051F8012FC0F802208988C180002101A822 ++:10FF7000FFF732F8AEE76078022801D0012100E0F7 ++:10FF800000212144497A490701D52220A6E601280B ++:10FF900049D068E03078112844D1B0682862232025 ++:10FFA0002870296904204870206A4860E06A093096 ++:10FFB0008860764873E530780D2833D16178E06A3F ++:10FFC000022901D0012100E0002101EB410120279D ++:10FFD00007EBC1011022405871680DF065FF8DF8E4 ++:10FFE00004A0686A0590286A0390ADF8089080F82C ++:10FFF00000B06278E16A022A01D0012200E000220A ++:020000040001F9 ++:1000000002EB420207EBC202401C895810220DF09D ++:100010004BFF002101A8FEF7DFFF00202862607877 ++:10002000B5E791E037E02420D4E4607802280BD0D3 ++:1000300000202044407AC10702D0E178C90705D0EA ++:10004000810705D51920A9E40120F2E71720A5E4CE ++:10005000400701D51B20A1E41C20207060780128F6 ++:1000600001D01820B6E42720B4E4282028700B2003 ++:1000700000E63078122849D12920ABE42078012805 ++:1000800044D00C2842D02046FEF7EFFF0C208DF81C ++:100090000400686A059039E030784FF0260811288E ++:1000A00005D012203070032785F800804CE08DF8D1 ++:1000B00004A0686A0590B06803900220ADF80800BB ++:1000C000039805210170297F4170002101A8FEF7E6 ++:1000D00083FF0B208DF80400686A0590314601A863 ++:1000E000FEF77AFF074685F80080012F0ED02BE03F ++:1000F00001208DF80400686A059004208DF808003E ++:10010000287F8DF809000020287712E0287F80B131 ++:100110001D202070252028708DF804B0686A059095 ++:1001200002208DF80800314601A8FEF755FF07466A ++:100130000AE00CB1FE2020709DF8040020B10021DF ++:1001400001A8FEF749FF0AE409B03846BDE8F08F80 ++:100150002DE9F04F0C4601274E69097885B090468D ++:10016000BA464FF00209072021B101294ED00229D9 ++:100170001FD1C8E0217901290AD0022915D003290D ++:1001800010D0042915D11BE00CE6010028E5010080 ++:10019000707801280CD10620616A02F067FB002804 ++:1001A00007D11AE01D20307017E07178022901D0C4 ++:1001B000052796E031780C2927D18DF804000EE050 ++:1001C0003078011F042902D30E3803281DD2B07FD6 ++:1001D00002281AD12089022817D38DF8049084F8B8 ++:1001E00000A020899DF80410884203D20A208DF8CF ++:1001F00000003FE01121083488F8001094E80E0058 ++:10020000C8E901120327C8F80C306AE098F800101A ++:10021000112966D18DF80000616A0491D8F8085060 ++:10022000029521794FF00B0B012906D0022929D024 ++:10023000032911D0042954D15AE0ADF8049085F86F ++:1002400000B0207E4F4600F01F0068700021684615 ++:10025000FEF7C2FE377043E0ADF804900520287029 ++:10026000207E68704E4600216846FEF7B5FE267077 ++:100270008DF800B0606A049041466846FEF7ACFE17 ++:1002800007462EE0ADF8040085F800A0207F6870D6 ++:10029000607F00F00100A870A07F00F01F00E870F0 ++:1002A000E17F2971C0071FD094F8200000F00F00F3 ++:1002B000687194F8210000F00F00A87100216846D1 ++:1002C000FEF78AFE2868B063A888B087A87986F808 ++:1002D0003E00A069407870772879B0700D203070AA ++:1002E0000027384605B031E70020A8716871E5E7BE ++:1002F000ADF804900E202870207E687000216846BA ++:10030000FEF76AFEECE7FE2030708DF800A0606A10 ++:10031000049004208DF80400207E8DF80500EDE7A0 ++:1003200000B50023012285B005280FD006280BD187 ++:1003300002208DF8002004918DF804008DF805301E ++:1003400000216846FEF748FE05B000BD8DF800208C ++:1003500004918DF80420F1E770B50C46054602F0D3 ++:10036000ACFA21462846BDE870407823002202F00E ++:1003700007BA08B1007870470C20704770B50C00C0 ++:1003800005784FF000010CD021702146F3F727FAD1 ++:1003900074482178405D884201D1032070BD02205D ++:1003A00070BDF3F71CFA002070BD027B032A05D054 ++:1003B00000220A704B780B2B02D003E00420704718 ++:1003C0000A770A62027B9300521C0273C150032019 ++:1003D0007047F0B585B00F4605460124287B05EB34 ++:1003E000800050F8046C7078411E0C290AD25D49D7 ++:1003F0003A46123101EB8000314650F8043C284661 ++:10040000984704460CB1012C11D1287B401E10F0F6 ++:10041000FF00287301D00324E0E70D208DF80000D1 ++:10042000706A0490002101966846FFF7A7FF032C2D ++:10043000D4D005B02046F0BD70B515460A46044636 ++:1004400029461046FFF7C5FF064674B12078FE28FE ++:100450000BD1207E30B100202870294604F10C0019 ++:10046000FFF7B7FF2046FEF700FE304670BD70472D ++:1004700070B50E46044688210DF0AFFD0225012E11 ++:1004800003D0022E04D0052070BD0120607000E072 ++:1004900065702046FEF7E9FDA577002070BD28B104 ++:1004A000027E1AB10A4600F10C01C5E7012070472F ++:1004B00030B5044687B00D46062002F0FEF9294605 ++:1004C000052002F0FAF92078FE2806D000208DF8E9 ++:1004D000000069462046FFF7E2FF07B030BD7FB558 ++:1004E0000E4600218DF80C1041780B2903D00C2901 ++:1004F00003D0002405E0846900E044690CB1217E4A ++:1005000091B16D4601462846FFF74FFF032809D1F8 ++:10051000324629462046FFF78FFF9DF80C10002930 ++:1005200000D0042004B070BD04F10C05EAE710B55A ++:1005300090B00C4607900B480421801E08900A4892 ++:100540008DF8191009900F92694606A8FFF7C7FFAA ++:10055000002805D11022204601990DF0A5FC0020AD ++:1005600010B010BD2EE501000CE6010070B50D467F ++:10057000040011D085B1210128460DF00CFD102298 ++:100580004E4928460DF090FC4C4801210838018066 ++:1005900044804560002070BD012070BD70B5474E9D ++:1005A00000240546083E10E07068AA7B00EB0410AA ++:1005B000817B914208D1C17BEA7B914204D10C221C ++:1005C00029460DF045FC30B1641C30888442EBDBD9 ++:1005D0004FF0FF3070BD204670BD70B50D4606006F ++:1005E00006D02DB1FFF7DAFF002803DB401C14E032 ++:1005F000102070BD314C083C20886288411C91421B ++:1006000001D9042070BD6168102201EB0010314651 ++:100610000DF04AFC2088401C20802870002070BD0E ++:1006200070B514460D0018D0BCB10021A17002288D ++:1006300002D0102811D105E0288870B10121A170E5 ++:10064000108008E02846FFF7A9FF002805DB401CC2 ++:10065000A070A8892080002070BD012070BD70B5F9 ++:10066000054614460E000BD000203070A8780128F3 ++:1006700008D005D91149A1F108010A8890420AD988 ++:10068000012070BD24B1287820702888000A50709D ++:10069000022008700FE064B14968102201EB0011DC ++:1006A000204610390DF000FC287820732888000AB5 ++:1006B000607310203070002070BD000068000020C2 ++:1006C0002DE9F041FE4C207EE17D884208BFBDE867 ++:1006D000F0810126FB4D0027E07D215C01EB8102CA ++:1006E00005EB8200037C052B18D0037C062B23D05E ++:1006F000037C072B34D0437C002B08BFFFDF29D0BD ++:100700004774E07D16280EBF0020E07D401CE07598 ++:10071000481CC0B255F8222007211AE00674E07D7B ++:1007200016281ABFE07D401C0020E075481CC0B2AE ++:1007300055F8222002210CE00674E07D16281ABF2D ++:10074000E07D401C0020E075481C55F82220C0B216 ++:1007500003219047207EE17D8842BDD1BDE8F08134 ++:100760000674E07D16281ABFE07D401C0020E0756D ++:10077000481CC0B255F822200821EAE770B5D24DD6 ++:100780000C2085F82900A5F53B70002480F8CD41A8 ++:1007900080F8CC4100F5F4700476C47505F12C00A6 ++:1007A0000CF0C0FDA5F58E70047585F82B40601E19 ++:1007B0002C60A86085F8254085F8224085F8234004 ++:1007C00085F8244085F82140C048A5F1E80104706F ++:1007D0004470002000EB800201EB82021474401C84 ++:1007E000C0B20B28F6D30120F8F708FF0020F8F775 ++:1007F00005FF012085F82600F9F72EFBB448F9F72C ++:100800003AFBB44C2070B448F9F735FB6070BDE892 ++:100810007040F8F787BE10B5F8F7B2FEAD4C2078FF ++:10082000F9F742FB6078F9F73FFBA74C94F82800F2 ++:10083000002808BF10BDF9F7B2F8002084F828009E ++:1008400010BD0B20704770B59F4C94F8260000280F ++:100850001CBFFFDF70BD94F82B00002808BFFFDF2E ++:10086000F8F777FF62690025811A6FF07F43B1F5D1 ++:10087000800F24BFA2EB000CBCF5800F0DD38B4280 ++:1008800003D2991A0844411C07E0634528BFFFDFE3 ++:1008900005D2181A1044401C4142002900DBFFDF3A ++:1008A000012684F8266084F82B5094F8291004203F ++:1008B000844A01EB810102EB81010874A068B0F168 ++:1008C000FF3F04D0B01EA0600120F8F797FE002083 ++:1008D000F8F794FEF8F778FE25600CF0C7FEF8F7FD ++:1008E000C1FF7E48056005604FF0E0214FF40040F5 ++:1008F000C1F88002F2F7E5FA74480078022804D0C3 ++:10090000032805D194F8230010B184F8226001E097 ++:1009100084F82250BDE87040F8F788BF0346694963 ++:100920000B2000BF00EB800201EB820212F8042CC6 ++:1009300022B1401E10F0FF00F4D1704700EB80029E ++:1009400001EB8201012241F8143C01F8042C7047AC ++:10095000012804D0032808BF002926D000E021B3D5 ++:10096000594B4FF0000C83F821C0584A0028907072 ++:1009700014BF022882F803C00BD0072915D2DFE884 ++:1009800001F01404060C0E1012001B2000E03A20A7 ++:10099000D070012083F8210070475820F8E77720B5 ++:1009A000F6E79620F4E7B520F2E7002070474748C5 ++:1009B00010B54078F8F75FFF80B210BD30B5421E29 ++:1009C0004049002500EB800001EB80040A2A02D890 ++:1009D00014F8040C00B9FFDF14F8040C012818BF48 ++:1009E000FFDF04F8045C30BD70B53D4C94F8CD01D8 ++:1009F00094F8CC1188420CBF01250025F8F7A9FE18 ++:100A0000F8F739FF94F8CD1194F8CC2191420CBF3E ++:100A100001210021A942E9D170BD30B50D46314A0E ++:100A200044190021101A71EB010038BFFFDF2E4876 ++:100A30008542C8BFFFDF2D488542B8BFFFDF2C4885 ++:100A40008442A8BF2B4804DA002CAABF20462848BD ++:100A500030BD201830BD70B51A4900EB800001EBA5 ++:100A60008004254A54F8101D607A002852F820208E ++:100A700011440CBF04200220084420F07F40F8F706 ++:100A8000FAFE94F90850174A44190021101A71EB24 ++:100A9000010038BFFFDF14488542C8BFFFDF13489D ++:100AA0008542B8BFFFDF12488442A8BF114804DA6C ++:100AB000002CAABF20460E4870BD201870BD000053 ++:100AC000DC080020F8080020E00900207A0000205F ++:100AD0002D26010078000020C106010000F500402D ++:100AE000F4060020FF7F841E0020A10700E05EF8CE ++:100AF0000080841E00807BE170E501002DE9F04F4D ++:100B00000646FF4885B00068C005C00D11D01038FA ++:100B100040B20028B8BF00F00F0000F1E020B4BFE1 ++:100B200090F8140D90F80004400908BF4FF0010A36 ++:100B300001D04FF0000A307800281FBF01280020A4 ++:100B400005B0BDE8F08F307900280CBF04210221E8 ++:100B5000EC4ABAF1000F52F8200001EB000903D172 ++:100B6000E949002081F827006C4602AA2146B068B6 ++:100B7000F8F78EFE9DF90820F068211D104401222F ++:100B8000C01C1F28B8BF019208DB03AAF8F780FE3B ++:100B90009DF80C0010B10198401C0190DDE9001097 ++:100BA0000844401D20F07F400190A1EB090020F097 ++:100BB0007F40009070798DF80A0000980390F8F754 ++:100BC000C8FD009A019B121A181AD04922F07F42E0 ++:100BD00020F07F40B2F5800F26D2814224D3CA484C ++:100BE00090F82950009CCA4F181B20F07F486FF0E6 ++:100BF0007F40001BAB4604900C2D24D005EB8500F4 ++:100C000007EB80026FF07F435068011BB1F5800F46 ++:100C100012D3A4EB000CBCF5800F0DD38B4205D290 ++:100C200004990844411C07E000205FE0634509D2B5 ++:100C3000191A0819401C41420029BCBFAB46957CDB ++:100C4000DADB00E0FFDF5D4525D00BEB8B0007EB27 ++:100C500080026FF07F4091680B1BB3F5800F12D3B9 ++:100C6000A4EB010CBCF5800F0DD3984203D204987D ++:100C70000844431C07E0604528BFFFDF0BD2431A3E ++:100C80001819401C4342002B05DD9DF80A00927B99 ++:100C9000904228BF0C460C2D18BF9DF80A1010D0AA ++:100CA00005EB850007EB80004268121B22F07F42B3 ++:100CB000424506D2827B914228BF8468857C0C2DF8 ++:100CC000EED10098A04205D004EB080020F07F4050 ++:100CD0000094019000990398814206D001EB09002D ++:100CE00020F07F40F8F7C7FDB0600120864991F8F9 ++:100CF0002710002904BF05B0BDE8F08FBAF1000F3E ++:100D00003FF42EAF05B0BDE8F08F2DE9F04F064659 ++:100D100087B00C467F480CF00DFB4FF0010800280F ++:100D200035D07D4F387D002818BFFFDF3E74207915 ++:100D3000794D05F10C022872607968722946A06825 ++:100D4000F8F7A6FD95F90C000F2804DD1F3828736D ++:100D50002868401C286095F90C00E1682E1D0844A5 ++:100D6000C01C1F28B8BFC6F8008009DB6A463146A0 ++:100D7000F8F78EFD9DF8000010B13068401C30601F ++:100D80002078A87287F8148007B0BDE8F08F634D13 ++:100D900095F8CD0116281ED095F8CD0195F8CC1107 ++:100DA000401C884200D1FFDF55480068C005C00DD7 ++:100DB0001AD0103841B20029BDBF01F00F0000F178 ++:100DC000E02090F8140D01F1E020A8BF90F8000495 ++:100DD000400909D104E095F8CC010028E4D1E2E70C ++:100DE0002078002818BFFFDF4C4890F8CD1101EBA8 ++:100DF000810100EB810006742078012800F04A810F ++:100E0000022843D0454890F8CD1101EB810100EB59 ++:100E10008105207928726079687205F10C022946F3 ++:100E2000A068F8F735FD95F90C000F2804DD1F3890 ++:100E300028732868401C286095F90C10E0682E1D66 ++:100E40000844C01C1F28B8BFC6F8008009DB6A46EA ++:100E50003146F8F71DFD9DF8000010B13068401CC8 ++:100E600030602078A8722D4890F8CD1116290EBF59 ++:100E7000002190F8CD11491C80F8CD1125480CF0C7 ++:100E80006FFA07B0BDE8F04FF8F7D0BC234890F8F0 ++:100E9000CD1101AA01EB810100EB81076946E068F1 ++:100EA000F8F7F6FC9DF904000F28CCBF01200020C4 ++:100EB00000993D1D08440190A068C01C1F28B8BFC0 ++:100EC000C5F8008009DB6A462946F8F7E1FC9DF881 ++:100ED000000010B12868401C28600220B8726079B8 ++:100EE00078722079387200280CBF04210221054A4B ++:100EF00052F82000014403917A68481D10440FE025 ++:100F000004ED00E070E50100E0090020FFFF3F0074 ++:100F1000F80800200C0A0020C4080020F406002075 ++:100F20000199009008440399401A0590FD4C002057 ++:100F300084F82700F8F70DFC3860019980460844D2 ++:100F400020F07F40F86094F829000C287ED02146DC ++:100F500091F8290000EB8002A1F1E80000EB820289 ++:100F60005668009A324422F07F42029297F809B004 ++:100F700091F829503446111B21F07F4A6FF07F41D0 ++:100F8000891BA94604910C2D23D0E74805EB850168 ++:100F900000EB81026FF07F435068011BB1F5800FB9 ++:100FA00024BFA4EB000CBCF5800F0BD38B4203D203 ++:100FB00004990844411C05E0634509D2191A08192F ++:100FC000401C41420029BCBFA946957CDBDB00E008 ++:100FD000FFDF4D4524D0D44809EB890100EB8103A4 ++:100FE0006FF07F429868011BB1F5800F12D3A4EB1C ++:100FF000000CBCF5800F0DD38A4203D20499014442 ++:10100000491C07E0624528BFFFDF09D2121A1119F7 ++:10101000491C4942002903DD997B8B4528BF0446C2 ++:101020000C2D18BFC04910D005EB850001EB8000E6 ++:101030004268121B22F07F42524506D2827B9345C2 ++:1010400028BF8468857C0C2DEED100E01BE0A64211 ++:1010500005D004EB0A0020F07F4026460290029A59 ++:10106000A6EB080020F07F40A2EB0802059922F0D1 ++:101070007F42B0F5800F06D2914204D303983044EA ++:1010800020F07F403860A74890F8270000287FF4C0 ++:101090004DAFE8E6A548851915F8010C002818BFE2 ++:1010A000FFDF05F8018CADE60020F8F797BA0120C4 ++:1010B000F8F794BA9E48007870472DE9F0419A4EAF ++:1010C00000274FF00308012506F1E80450B301287A ++:1010D0005BD0022800F0E98003281CBFFFDFBDE8D9 ++:1010E000F08194F829000C2808BFFFDF84F82670EF ++:1010F00084F82B5094F8290000EB800006EB800068 ++:1011000080F81080F8F799FB94F8290094F82910DA ++:10111000401CC0B201EB810156F82120BDE8F0412E ++:101120000521104794F829000C2808BFFFDF84F838 ++:10113000267084F82B5094F8290000EB800006EB11 ++:10114000800080F81080F8F778FB207F002818BF17 ++:10115000FFDF84F825500020F8F750FAA168B1F1BC ++:10116000FF3F04D0012300221846F8F78BFA94F8C9 ++:10117000290094F82910401CC0B201EB810156F8F7 ++:101180002120BDE8F0410121104794F829000C28E6 ++:1011900008BFFFDF84F8267084F82B5094F82900EC ++:1011A00000EB800006EB800080F81080F8F745FB2C ++:1011B0000120F8F723FA94F8250000281CBFA06846 ++:1011C000B0F1FF3F0DD094F8290094F82910401C8D ++:1011D000C0B201EB810156F82120BDE8F0410621A3 ++:1011E0001047207F012815D002281FD0032833D0B4 ++:1011F00004281CBFFFDFBDE8F08194F82010606870 ++:101200000123411A00221846F8F73CFA94F8280006 ++:10121000B8BB37E094F8240028B184F82470F8F7BC ++:1012200013FB84F823502777BDE8F08194F8280059 ++:1012300018B9F8F78BFB84F8285094F8290094F833 ++:101240002910401CC0B201EB810156F82120002179 ++:1012500090472777BDE8F081217B60680123411A20 ++:1012600000221846F8F70EFA94F8240028B184F802 ++:101270002470F8F7E9FA84F8235002202077BDE8BB ++:10128000F08103E0F8F762FB84F8285094F8290015 ++:1012900094F82910401CC0B201EB810156F82120BE ++:1012A000002190472577BDE8F08121480078BDE80E ++:1012B000F041F8F7FFBD10B51A4C94F829000C283E ++:1012C00008BFFFDF94F8290094F82910401CC0B231 ++:1012D000154A01EB810152F82120BDE8104004219C ++:1012E00010472DE9F84F8046087C104C401EC6B2CE ++:1012F0000D46A05D01281DD0022825D0297CDFF8ED ++:1013000028A0481EC4B204EB84020AEB8206371DF3 ++:101310000A2821D801EB81000AEB800010F8040CA8 ++:10132000D8B919E0E0090020F8080020D40900200D ++:1013300078000020A87A012814BF02200020A055C0 ++:1013400018BFBDE8F88FD9E7A87A012818BFFFDFDA ++:101350000021A972A155D1E7FFDF307CDFF8289486 ++:1013600007280BD11720009099F8172009F11803CE ++:10137000494620460BF02AFD01203074307C0128BC ++:1013800004D0A87A012818BFFFDF02D0A87A01286C ++:101390004BD1FE4B307C022818D099F81800162843 ++:1013A00072D099F8180099F81710401C884200D1A3 ++:1013B000FFDF0120707499F8180009F8004099F8CF ++:1013C0001800162800F09E8100F093B9F04A92F8B8 ++:1013D00029000146A04207D0014600EB810003EB43 ++:1013E0008000807CA042F7D192F829C084450CD1BE ++:1013F00092F8291001EB810103EB8101897C82F8CD ++:101400002910012182F82A1009E000EB800203EB89 ++:10141000820201EB810103EB8101927C8A7400EB73 ++:10142000800003EB80000C218174287AD9490028C0 ++:1014300051F820A02968A1EB0A010CBF042002206A ++:10144000081A20F07F423A60D5E90001084420F0F4 ++:101450007F407860A87A022818BF287B1ED0387297 ++:101460007868401D20F07F407860687AB872287AEA ++:1014700006257872032872D2002870D000F022FE70 ++:1014800000286DD0A1E0FFE799F81700002890D15F ++:101490008EE700BF89F81800BDE8F88F287A002889 ++:1014A0000CBF0420022000EB0A036868591D00EB02 ++:1014B000010BB9484078504503D9B54991F823103C ++:1014C00011B10BF1060003E0A0EB0A005844801DA7 ++:1014D000AF4991F829C0BCF10C0F25D091F829C073 ++:1014E0000CEB8C0EA1F1E80C0CEB8E0CDCF804C0BC ++:1014F000624519D0DFF8A4C291F8291001EB8102EE ++:10150000A24901EB82014A688968A2EB080222F035 ++:101510007F42A1EB080121F07F41904298BFB2F5D4 ++:10152000800F9DD28C459BD34044A0EB0B0020F054 ++:101530007F4139601944E86821F07F410A1A6FF051 ++:101540007F4CB2F5800F24BF431AB3F5800F11D33F ++:10155000944506D2ACEB00000844421C0AE034E09B ++:101560002FE09C4528BFFFDF1DD2ACEB01010844F2 ++:10157000401C4242002A16DD0520307499F81800FC ++:10158000162819D099F8180099F81710401C8842AD ++:1015900000D1FFDF99F8180009F8004099F8180009 ++:1015A00016287BD0A5E03868ABF10501084420F08F ++:1015B0007F407860002052E799F817000028E9D1B1 ++:1015C000E7E7CAF138054FF0320A7348017801297C ++:1015D00018BF03290AD14078504507D96C4991F8C2 ++:1015E0002310002904BFA0EB0A0005446B4B3868A8 ++:1015F000A0EB0802786822F07F41A0EB080020F001 ++:101600007F4C8D4298BFB1F5800F1BD2634519D333 ++:101610005F4991F829300C2B30D091F829504FF0C8 ++:101620000C0BDA46594905EB850301EB8303D3F82C ++:1016300008C0ACEB080C944531D8AB469D7C0C2D12 ++:10164000F0D193E00520307499F81800162810D0D6 ++:1016500099F8180099F81710401C884200D1FFDF54 ++:1016600099F8180009F8004099F81800162849D090 ++:101670003FE099F817000028F2D1F0E7022030741B ++:1016800091F829000C2818BF91F82900B07481F84E ++:101690002940012081F82A00BDE8F88F32E00C2DA6 ++:1016A0001CBFAA46002261D00AEB8A0301EB830328 ++:1016B000D3F804C0ACEB080C84452CD29A7B97F885 ++:1016C0000AC0944520D30520307499F818001628D4 ++:1016D00013D099F8180099F81710401C884200D1CF ++:1016E000FFDF99F8180009F8004099F8180016284B ++:1016F00008D099F81800401CCCE699F8170000288B ++:10170000EFD1EDE70020C5E693F812A00122BAF16F ++:101710000C0FC9D103E0002A08BFAA4626D02F46E5 ++:101720001A4807EB870100EB8108062288F8102091 ++:1017300099F81800162838D099F81800411C99F823 ++:101740001700814200D1FFDF99F8180009F80070F6 ++:1017500099F8180016280EBF002099F81800401CB0 ++:1017600089F8180098F81270BA45D9D10220074FAD ++:10177000307407F1E80090F82910A9421AD186F8D0 ++:1017800012A080F829400BE0DC080020F8080020B7 ++:10179000E009002070E501007A000020FFFF3F0013 ++:1017A000012180F82A10BDE8F88F99F81700002869 ++:1017B000CAD1C8E70C2D0CD0BBF10C0F08BFFFDF5E ++:1017C0000BEB8B0007EB8000847486F812A0BDE859 ++:1017D000F88FBBF10C0F08BFFFDF0BEB8B0007EBA3 ++:1017E000800084740C20B074BDE8F88F2DE9F04FB0 ++:1017F00083B0F7F7AEFF05464FF00C0BFE4C94F8A4 ++:1018000029100026A4F1E8094FF001080C292FD077 ++:1018100094F82920214602EB820209EB8202127C15 ++:10182000042A25D091F8292002EB820209EB8202DA ++:10183000127C032A04BF03B0BDE8F08F2A4620695A ++:101840006169801A491BED4B20F07F4021F07F41F8 ++:1018500006283CBF03B0BDE8F08FB0F5800F24BF71 ++:1018600003B0BDE8F08F8B423CBF03B0BDE8F08F02 ++:10187000A068B0F1FF3F18BFFFDF84F8256094F83F ++:101880002900DF4F0C2809D094F8290000EB8000D4 ++:1018900009EB8000007C042808D01AE094F82100AD ++:1018A000B8B1F8787870B878387012E094F829B048 ++:1018B0000BEB8B0009EB800080F8108094F8290076 ++:1018C00000EB800009EB8000807C84F8290084F81C ++:1018D0002A80DFF830A39AF8CD019AF8CC1188421B ++:1018E00019D000BF9AF8CC0100EB80000AEB800110 ++:1018F0002846FFF7F6FC9AF8CC0116280EBF002008 ++:101900009AF8CC01401C8AF8CC019AF8CD019AF8DB ++:10191000CC118842E6D1DFF8F0A29AF8140028B181 ++:1019200051462846FFF7DDFC8AF81460BBF10C0F26 ++:1019300006D00BEB8B0009EB8000017C01292BD03A ++:1019400094F829000C2800F0ED8094F82A00002873 ++:1019500000F0F78084F82A6094F8290000EB8001F9 ++:10196000AA4800EB8102A0F50173D2E90101D26817 ++:10197000C3F80423C3E9BF01607E00280CBF4FF009 ++:1019800004094FF00209A249022811F8201021731E ++:1019900018BF012834D123E007210174DFF874A2B5 ++:1019A0009AF81800162816D09AF818009AF8171006 ++:1019B000401C884200D1FFDF9AF818000AF800B0F6 ++:1019C0009AF8180016280EBF00209AF81800401C3C ++:1019D0008AF81800B4E79AF817000028ECD1EAE773 ++:1019E00020690844421B22F07F42382A08D903218B ++:1019F0003238617620F07F4020613220207309E088 ++:101A0000322907D294F8280058B9F7F79FFF84F8D5 ++:101A1000288006E094F8280018B1F7F7C0FF84F892 ++:101A200028607B7884F8203094F80CA03878062160 ++:101A3000A3EB0A02012818BF032804D184F82480EC ++:101A4000002AC8BF911D94F822B0BBF1000F18BF47 ++:101A5000891C206901905044484420F07F40606018 ++:101A6000BAF1000F14BF02200020207794F8240060 ++:101A7000002808BFBBF1000F37D060480090D4F8B1 ++:101A800010E0D4F814C0AEEB050E2EF07F4EACEB98 ++:101A9000050C20462CF07F4C714598BFBEF5800F99 ++:101AA0001FD2009961451CD3002A0FDD0199BAF1BC ++:101AB000000FA1EB020101611944494421F07F416B ++:101AC00041600CBF0121032121770EE004DA002BD5 ++:101AD0000CBF02210421F7E7BBF1000F08BFFFDFB5 ++:101AE00003E080F8246084F82260207F40B1206900 ++:101AF000012300EB090100221846F7F7C3FD02E0BD ++:101B00000120F7F77BFD94F82900012300EB800109 ++:101B10003E4800EB8100616890F90C200020F7F747 ++:101B2000B1FD0EE00120F7F769FD0020F7F766FD33 ++:101B3000F7F74AFD94F8280018B1F7F730FF84F85A ++:101B4000286094F8220028B1F7F77EFE84F823601D ++:101B500084F8226094F8210018B1F8787870B87889 ++:101B6000387094F8240030B184F823603878002865 ++:101B700008BF84F824602748017EC07D814203D0DD ++:101B800025484078F8F796F984F8278003B0BDE837 ++:101B9000F08F70B5184C054682B094F829000C28D7 ++:101BA00008BFFFDF94F8290000EB8000174E06EB1A ++:101BB0008000007C032818BFFFDFA068B0F1FF3F62 ++:101BC00018BFFFDF94F8290001AA00EB800006EBA4 ++:101BD0008000694690F90C002844F7F759FE9DF9FA ++:101BE00004000F28CCBF0120002000990844616840 ++:101BF000084420F07F4111E0E0090020FFFF3F0092 ++:101C00007A000020F4060020C4080020F808002014 ++:101C100070E50100DC08002078000020A16094F845 ++:101C20002500002804BF02B070BD012302B00022CD ++:101C3000BDE870401846F7F725BD744A0B1A02F14B ++:101C4000010CB3EB9C0F3CBF1846704710B5441A0B ++:101C5000B4EB9C0F3CBF184610BD9A4203D2101A39 ++:101C60000844401C10BD94429EBFFFDF002010BD01 ++:101C7000511A0844401C404210BD01230022014675 ++:101C80000220F7F7FFBC0220F7F7B8BCF7F761BDF9 ++:101C90002DE9F0415E4C054682B094F82B000028F7 ++:101CA00008BFFFDF642D50D35A480022401B72EB5F ++:101CB00002004AD3584890F8CD1190F8CC018142E7 ++:101CC00043D15648007D00283FD194F82900DFF821 ++:101CD000508100EB800008EB8006206801AA2844B0 ++:101CE0006946F7F7D5FD9DF90400002802DD00984C ++:101CF000401C0090B168009872680F18BA1A22F060 ++:101D00007F42B2F5800F20D2B27C0C2A09D002EBC0 ++:101D1000820208EB82025268511A21F07F4181420F ++:101D200013D3A068B0F1FF3F05D00120F7F766FCA0 ++:101D30004FF0FF30A06020682844206027F07F40EB ++:101D4000606102B00120BDE8F08102B00020BDE872 ++:101D5000F0812DE9F8430646401EC7B2304807EB34 ++:101D6000870100EB8104207C002808BFFFDF2A4A9E ++:101D700092F8CC1192F8CD0181420DD001EB810394 ++:101D800002EB83031B7CB34210D016290CBF002149 ++:101D9000491CC9B28142F1D120484FF0170800F127 ++:101DA0001805017D29B3007CB04222D10020BDE896 ++:101DB000F883207C05281FBF207C0628207C07286C ++:101DC0000AD184F81090CDF80080EA7D05F118035F ++:101DD000144938460AF0FAFF607C68B16674CDF8A1 ++:101DE0000080EA7D05F118030E4938460AF0EEFF3F ++:101DF00002E04FF001090026207C012804BF607C2E ++:101E00000028D6D10120BDE8F8830000FF7F841EA2 ++:101E1000E0090020FF1FA107F4060020C4080020ED ++:101E2000F8080020DC080020F0B5734AD2F8003230 ++:101E3000724D002401212E7856B9714E3460704FD6 ++:101E400003263F1D3E606E4F04260C373E6029700E ++:101E5000C2F80042D1601160694C4834D1642568F1 ++:101E60008542FBD35160D160C2F80032F0BD2DE94C ++:101E7000F041044680074FF000054FF0010604D5FD ++:101E800060480560066024F00204E0044FF0FF376C ++:101E900005D55D484660C0F8087324F4805460009E ++:101EA00003D55A48056024F08044E0050FD5524818 ++:101EB000C0F80052C0F8087351490D60091D0D604B ++:101EC0004F4A04210C321160066124F48074A0048E ++:101ED00009D54F484660C0F80052C0F808734D4815 ++:101EE000056024F40054C4F38030C4F3C031884248 ++:101EF00000D0FFDF14F4404F14D047484660C0F8CC ++:101F0000087346488660C0F80052C0F80873444918 ++:101F10000D600A1D16608660C0F808730D601660BB ++:101F200024F4404420050AD53E4846608660C0F847 ++:101F30000873C0F848733C48056024F400640BF053 ++:101F40006FFB3A48044200D0FFDFBDE8F08170B576 ++:101F5000202500224FEA020320FA02F1C90719D016 ++:101F600051B201F01F060124B4404E09B60006F13B ++:101F7000E026C6F88041C6F88042002906DA01F062 ++:101F80000F0101F1E02181F8143D03E001F1E021AE ++:101F900081F80034521CAA42DED370BD70B5174CD4 ++:101FA0000D466060FFF763FF6068FFF7D0FF2846CB ++:101FB000F7F7A9FD0AF064FF00F0D5F80BF030FB4D ++:101FC0000BF07BFAF7F748FFBDE870400BF006B85E ++:101FD00010B50A4C6068FFF74AFF6068FFF7B7FF6B ++:101FE0000BF01EFBF7F753FE0020606010BD0348A6 ++:101FF0004068704702207047008000408000002049 ++:1020000004850040FC1F004000C0004004E5014082 ++:1020100000D0004004D5004000E0004000F0004047 ++:1020200000F5004000B0004008B50040FEFF0FFC86 ++:1020300070B51F490A68BAB100231D4601244A68D9 ++:10204000521C4A60092A00D34D600E7904FA06F248 ++:102050000E6816420AD072B60B6893430B6062B6E4 ++:1020600049680160002070BD052070BD5B1C092B14 ++:10207000E5D3FFDFF8E74FF0E0214FF48000C1F82F ++:1020800000027047EFF3108111F0010F72B64FF0AC ++:10209000010202FA00F20648036842EA0302026003 ++:1020A00000D162B6E7E70248002101604160704755 ++:1020B0008800002001208107086070470120810707 ++:1020C0004860704712480068C00700D00120704780 ++:1020D0000F48001F0068C00700D0012070470C485F ++:1020E00008300068C00700D0012070470848103051 ++:1020F0000068704706490C310A68D20306D50968A2 ++:1021000001F00301814201D1012070470020704796 ++:102110000C040040C84911F8210F4978884201D3C6 ++:10212000401A02E0C1F121010844C0B27047C2491F ++:10213000233111F8210F4978884201D3401A02E077 ++:10214000C1F121010844C0B27047BB49463111F8C2 ++:10215000210F4978884201D3401A02E0C1F12101E0 ++:102160000844C0B27047B54910B5802081F800041A ++:10217000B1490020233101F8210F4870AE4901F820 ++:10218000210F4870AC49463101F8210F4870AC4826 ++:102190000BF0C8F8AA48401C0BF0C4F8F0F7A4FEF6 ++:1021A000BDE8104000F03DB920207047B2E770B59F ++:1021B0000C4605460026FFF7ADFF01469E48A142AA ++:1021C00012D30022641EE4B20DD390F82210435CB7 ++:1021D000491CC9B205F8013B80F822102129F1D130 ++:1021E00080F82220EEE7012600F01BF9304670BD92 ++:1021F000202070479BE770B50C4605460026FFF788 ++:1022000096FF01468C482330A14212D30022641E5F ++:10221000E4B20DD390F82210435C491CC9B205F812 ++:10222000013B80F822102129F1D180F82220EEE72D ++:10223000012600F0F6F8304670BD20210170002024 ++:10224000704710B50446FFF780FF2070002010BDD6 ++:1022500070B50C460546FFF778FF014676484630D4 ++:10226000A14213D30022641EE4B20DD390F82210D1 ++:10227000435C491CC9B205F8013B80F822102129B2 ++:10228000F1D180F82220EEE7002401E042F20704B9 ++:1022900000F0C7F8204670BD70B50C4605462129F0 ++:1022A00000D9FFDF67480068103840B200F0A0F89E ++:1022B000C6B20D2000F09CF8C0B2864204D2FFDF07 ++:1022C00002E000BFF0F760FE21462846FFF76FFFEF ++:1022D0000028F7D070BD2DE9F047DFF86481564C37 ++:1022E000A8F101080746233498F80000DFF8489168 ++:1022F000002604F1230A38B994F8221094F821003A ++:10230000212200F084F890B14D4699F8221099F8F6 ++:102310002100212200F07BF8B8B155469AF822102E ++:102320009AF82100212200F072F848B335E094F8C1 ++:102330002100275494F82100401CC0B284F82100E9 ++:1023400021282AD184F8216027E095F821002F5414 ++:1023500095F82100401CC0B285F82100212801D148 ++:1023600085F8216098F800004746B0B195F8221032 ++:1023700095F82100212200F04AF870B13E700CE07F ++:1023800095F821002F5495F82100401CC0B285F823 ++:102390002100212801D185F8216094F8221094F8B9 ++:1023A0002100212200F033F800281FD099F82210D4 ++:1023B00099F82100212200F02AF8002816D09AF876 ++:1023C00022109AF82100212200F021F800280DD0D7 ++:1023D000F0F7B0FD1A480AF0ADFFB0F5005F00D08D ++:1023E000FFDFBDE8F04716480AF0BABFBDE8F08746 ++:1023F000002806DA00F00F0000F1E02090F8140D3C ++:1024000003E000F1E02090F8000440097047401C10 ++:10241000884204D0904200D109B1002070470120C9 ++:10242000704710B506480AF085FF002803D1BDE8C3 ++:102430001040F0F76ABD10BD100A00200DE000E06A ++:102440009100002004ED00E0164908784A78401C0D ++:10245000C0B2904205D0144B01221A60BFF34F8FD7 ++:10246000087070472DE9F0410E4C4FF0E02600BF98 ++:10247000F7F7A0FC20BF40BF20BF677820786070CE ++:10248000D6F80052EEF73EFF854305D1D6F8040298 ++:1024900010B92078B842EBD0F7F787FC0020BDE8F0 ++:1024A000F081000093000020180502402DE9F04162 ++:1024B000012528034FF0E0210026C1F880011E4CC1 ++:1024C000C4F800610C2000F02CF81C480168026878 ++:1024D000C94341F3001142F010020260C4F80453F2 ++:1024E0002560491C00E020BFD4F80021002AFAD062 ++:1024F00019B9016821F01001016011480768656091 ++:10250000C4F80853C4F800610C2000F00AF83846FB ++:10251000BDE8F08110B50446FFF7C8FF2060002039 ++:1025200010BD00F01F02012191404009800000F120 ++:10253000E020C0F88012704700C0004010ED00E0BD ++:1025400008C500402DE9F047F84C0646FF216068B9 ++:1025500000EB061211702178FF2916D04FF0080900 ++:1025600009EB011109EB06174158C059491E21F02A ++:102570007F4100F0DDF918B194F80080454614E081 ++:102580006168207801EB061108702670BDE8F087BD ++:10259000626809EB0510D159105800F0C9F930B93B ++:1025A0006068A84600EB08100578FF2DF0D1606840 ++:1025B00000EB061100EB08100D700670E6E7F0B5B1 ++:1025C000DA4B0446002001255A680C261B7A0BE0E2 ++:1025D00005EB0017D75DA74204D106EB0017D759CA ++:1025E0008F4204D0401CC0B28342F1D8FF20F0BD1E ++:1025F00070B5FFF74BFBCD4C01460825227860688B ++:1026000005EB0212805800F093F9012808D92178CF ++:10261000606805EB01114058BDE87040FFF72DBB25 ++:10262000FEF748FDBDE87040F7F744BC2DE9F041E6 ++:10263000BE4C2578FFF72AFB0146FF2D6FD04FF0E7 ++:102640000808626808EB0516905900F071F9022835 ++:10265000606801D980595EE000EB051109782170AE ++:10266000022101EB0511425C5AB1521E42548159BC ++:1026700001F5000121F07F4181512846FFF762FFFB ++:1026800034E00423012203EB051302EB051250F89A ++:1026900003C0875CBCF1000F10D0BCF5806F10D96F ++:1026A000CCF3090250F806C00CEB423C2CF07F4CF6 ++:1026B00040F806C0C3589A1A920A09E0FF218154D3 ++:1026C0000AE0825902EB4C3222F07F428251002212 ++:1026D00042542846FFF736FF0C21606801EB0511D4 ++:1026E0004158E06850F82720384690472078FF2866 ++:1026F00015D0FFF7CBFA01462278606808EB02128A ++:102700004546805800F014F9012891D92178606875 ++:1027100005EB01114058BDE8F041FFF7AEBABDE846 ++:10272000F081F0B51D4614460E460746FF2B00D338 ++:10273000FFDFA00700D0FFDF7C48FF210022C76039 ++:10274000446005720674017042701046012204E074 ++:1027500002EB0013401CE154C0B2A842F8D3F0BD14 ++:1027600070B5724C06466578207C854200D3FFDF49 ++:10277000E06840F825606078401C6070284670BDB5 ++:102780002DE9FF5F1D468B460746FF24FFF77EFAC3 ++:10279000DFF89891064699F80100B84200D8FFDFAB ++:1027A00000214FF001084FF00C0A99F80820D9F8E1 ++:1027B00004000EE008EB0113C35CFF2B27D0BB42E3 ++:1027C00005D10AEB011350F803C0DC4521D0491CA8 ++:1027D000C9B28A42EED8FF2C1BD008EB04110AEBD9 ++:1027E0000412475440F802B00421029B0022012B3E ++:1027F00001EB041111D042504FF4806808234FF0D0 ++:10280000020C454519D9A905890D08D008E00C46E8 ++:10281000DDE7FF2004B0BDE8F09F4550ECE74146FE ++:1028200006EB413203EB041322F07F42C250691AD7 ++:102830000CEB0412890A81540BE005B9012506EB63 ++:10284000453103EB041321F07F41C1500CEB04111F ++:10285000425499F800502046FFF774FE99F80000A2 ++:10286000A84201D0FFF7C4FE3846D3E770B50C4646 ++:102870000546FFF70BFA064621462846FFF79FFE5E ++:102880000446FF2817D0294D082101EB0411686880 ++:102890004058314600F04CF800F58050400B0221C2 ++:1028A0006A6801EB0411515C09B100EB812000283A ++:1028B00000D1012070BD002070BD2DE9F0410F4610 ++:1028C0008046FFF77CFEFF281BD0184E35787168D4 ++:1028D0002A462C4605E0844206D0254601EB051326 ++:1028E0001C78FF2CF7D10CE0FF2C0AD0A5420CD1AC ++:1028F00001EB021000783070FF2804D0FFF778FE5B ++:1029000003E000200BE7FFF7BEF939464046FFF72A ++:10291000ADFFFF220123716803EB0413CA5401EBDE ++:10292000041201EB051112780A70F8E67C0A002007 ++:10293000401A20F07F40B0F5000F00D9002070470A ++:1029400070B50446A0F500002C4EB0F1786F02D2AD ++:102950003444A4F500042A48844201D2012500E051 ++:10296000002500F041F830B1B4420BD3254800688F ++:1029700004E0284370BDB44204D32348844201D20A ++:102980000120F6E70020F4E710B50446A0F50000AA ++:10299000B0F1786F03D219480444A4F5000400F0A4 ++:1029A00023F84FF0804130B11648006804E08C42B3 ++:1029B00004D2012003E014488442F8D2002080F0C1 ++:1029C000010010BD10B520B1FFF7DEFF08B10120F6 ++:1029D00010BD002010BD10B520B1FFF7B1FF08B148 ++:1029E000012010BD002010BD084809490068884238 ++:1029F00001D1012070470020704700000000002036 ++:102A000000F00100200000200800002098000020B5 ++:102A1000BEBAFECA0548064A0168914201D10021AA ++:102A20000160044901200860704700009800002000 ++:102A3000BEBAFECA40E50140534800210170417012 ++:102A400010218170704770B5054616460C4602206D ++:102A5000F0F7E7F94C49012008704C49F01E086076 ++:102A60004B480560001F046070BD10B50220F0F7F0 ++:102A7000D8F945490120087046480021C0F80011E6 ++:102A8000C0F80411C0F8081143494FF40000086071 ++:102A900010BD3D480178C9B1404A4FF400011160B2 ++:102AA0003C49D1F800310022002B1CBFD1F8043181 ++:102AB000002B02D0D1F8081111B14270102103E0AF ++:102AC0000121417036490968817002700020F0F7D9 ++:102AD000A8B92D480178002904BF407870472D48D7 ++:102AE000D0F80011002904BF02207047D0F800116F ++:102AF00000291CBFD0F80411002905D0D0F8080126 ++:102B0000002804BF01207047002070471E4800B510 ++:102B10000278204B4078C821491EC9B282B1D3F84F ++:102B200000C1BCF1000F10D0D3F8000100281CBF79 ++:102B3000D3F8040100280BD0D3F8080150B107E006 ++:102B4000022802D0012805D002E00029E4D1FFDFED ++:102B5000002000BD012000BD0B480178002904BF02 ++:102B6000807870470B48D0F8001100291CBFD0F8BE ++:102B70000411002902D0D0F8080108B110207047D4 ++:102B800007480068C0B270479C00002010F5004064 ++:102B900008F5004000F0004004F5014008F5014050 ++:102BA00000F400403148002101704170704770B559 ++:102BB000064614460D460120F0F733F92B49012053 ++:102BC00008702B480660001D0460001D056070BD84 ++:102BD0002DE9F04105460120F0F723F923480126AD ++:102BE0002449067045F080700860234C0027C4F823 ++:102BF000047122494FF040700860002D02BFC4F8F4 ++:102C000000622660BDE8F081012D18BFFFDFC4F827 ++:102C1000007226604FF0007019490860BDE8F0812D ++:102C20001248017879B1154A4FF04071116012498C ++:102C3000D1F804210021002A08BF417002D0114AB6 ++:102C40001268427001700020F0F7EBB80748017875 ++:102C5000002904BF407870470748D0F804010028D5 ++:102C600008BF704707480068C0B270479F00002047 ++:102C700008F5004004F5004000F0004008F5014070 ++:102C800004F5014000F4004070B5FE4C0025012021 ++:102C90006570257025626572A572E07284F829500E ++:102CA000256304F13C00A5630AF03CFB002818BF33 ++:102CB000FFDF84F82450F4480BF0A2FAF3494FF0F8 ++:102CC00011300860091D0860091D0860091D0860B1 ++:102CD000091D0D60091D0860091D0860091D0860B7 ++:102CE000091D0860091D0860091D0860091D0860AC ++:102CF000091D0860091D0860657770BD30B4E149A1 ++:102D00000268DFF890C34A6142688A61007A0877F6 ++:102D10000A7DDF4BACF1040401204AB10A7E00FABF ++:102D200002F21A608D7D002D0CBF2260CCF80020CD ++:102D30004A7D002A04BF30BC70474A7E904018602C ++:102D4000C97D00290CBF2060CCF8000030BC704762 ++:102D5000D249D1480860091DD14808607047CF4A60 ++:102D600000B5D0491160C0B240F44030111D40F0B0 ++:102D700000700860CC48D0F80001002818BFFFDFC1 ++:102D800000BD012070B502244FF0E0250022C5F8F7 ++:102D90008041C6490A600860C5490B6823F0770383 ++:102DA00043F0880343F000430B60C24B40F25B6189 ++:102DB00019601B1F40F203111960191F0860BE48FB ++:102DC00003230360BD4996200860AE4EBC4896F9C7 ++:102DD000241011F1080F08BFF8213CD014DC11F1C8 ++:102DE000280F08BFD82136D011F1140F08BFEC21ED ++:102DF00031D011F1100F08BFF0212CD011F10C0FC0 ++:102E000008BFF42127D010E011F1040F08BFFC2106 ++:102E100021D0002908BF026008D0032908BF036041 ++:102E200004D0042908BF016000D0FFDF707F0028B4 ++:102E300014BF4FF4C020A348A3490860A449A34885 ++:102E40000860091FA3480860C5F880429649102011 ++:102E5000C1F8040370BD0160E8E78A4A0368C2F85C ++:102E600002308088D08011727047864890F829001F ++:102E70007047844A517010707047F0B50546800065 ++:102E800000F1804000F580508B88C0F820360B7828 ++:102E9000D1F8011043EA0121C0F8001605F108003D ++:102EA000012707FA00F68C4C002A04BF2068B043C3 ++:102EB00004D0012A18BFFFDF20683043206020685B ++:102EC00007FA05F108432060F0BD10B57C490446BF ++:102ED00010F1080F08BFF8202CD014DC14F1280FD3 ++:102EE00008BFD82026D014F1140F08BFEC2021D041 ++:102EF00014F1100F08BFF0201CD014F10C0F08BF04 ++:102F0000F42017D011E014F1040F08BFFC2011D0F9 ++:102F1000002C08BF00200DD0032C08BF032009D0CF ++:102F2000042C04BF0420086000D0FFDF554880F85F ++:102F3000244010BD0860F9E7524890F8340070470B ++:102F4000504890F836007047644AC17811600068B4 ++:102F50006349000208607047252808BF02210ED08F ++:102F6000262808BF1A210AD0272808BF502106D0DA ++:102F70000A2894BF0422062202EB4001C9B2594A32 ++:102F800011605949086070473E49086270473D49E1 ++:102F90008A7A012A49D0022A18BF70474B7D002B3C ++:102FA00008BF7047DFF844C1012A42D0CA7D4B7E7A ++:102FB000002A18BF01227D30CCF80000DFF830C1B4 ++:102FC0000020CCF84C01180282F0010240EA0250C5 ++:102FD00040F00312087F830003F1804303F5C043F0 ++:102FE000C3F81025434A02EB8002887EC30003F138 ++:102FF000804303F5F833C3F81425DFF8FCC0C3F8A9 ++:1030000010C5C97ECB0003F1804303F5F833C3F844 ++:103010001425304AC3F81025012202FA00F002FA02 ++:1030200001F108433549086070470B7D002BB9D189 ++:1030300070478A7D0B7E002A18BF01227E30BBE7D5 ++:103040002DE9F84F00280CBF012202220D4D164C2D ++:103050000320AA72C4F80002687F002814BF4FF44E ++:10306000C0201848254F38604FF00108002974D05F ++:10307000012971D002291CBFFFDFBDE8F88F286A43 ++:1030800000283DE0900A0020A40A0020000E004025 ++:10309000180500500C0500500601020014150040F0 ++:1030A000250003020801100000100040FC1F004032 ++:1030B0003C170040381500401015004044150040F2 ++:1030C0000C1500400000040408F501404080004059 ++:1030D000A4F50140101100404016004024150040A6 ++:1030E0001C15004008150040541500404C85004058 ++:1030F00000800040006000404C81004004F5014029 ++:1031000008BFFFDF296A286B0844FC490860FD49B5 ++:10311000FB480860A97AFC4801290EBF0460FB49FE ++:103120000160A86B40F40020A863D4F800924FF02F ++:10313000100AC4F808A30026C4F80062F4484FF44B ++:10314000802BC0F800B0FF208DF80000C4F810619B ++:10315000C4F810803DE000E01CE0012A13D0C4F860 ++:103160000480022A18BFBDE8F88F687D002808BFD8 ++:10317000BDE8F88FE748C0F84C80E7480068BDE834 ++:10318000F84F0A3003E7C4F80080287D0028F1D109 ++:10319000BDE8F88FE148012A806B07D0022A18BFEA ++:1031A000FFDF09D0BDE8F84F0A20F0E640F48010B8 ++:1031B000A8634FF4801004E040F40010A8634FF4BB ++:1031C00000103860EEE700BF9DF80000401E8DF84B ++:1031D00000009DF8000018B1D4F810010028F3D0C9 ++:1031E0009DF80000002808BFFFDFC4F80061C4F8A4 ++:1031F0000C61C4F81061C4F80461C4F81461C4F827 ++:103200001861C4F82861C64800680090C4F80092AC ++:10321000C7F800B0C4F804A34FF400203860296A4E ++:10322000286BBDE8F84F08440A30B0E62DE9F847AE ++:10323000BC4CD4F8000220F00309D4F804034FF08A ++:10324000100AC0F30018C4F808A30026C4F80062EE ++:10325000B24D687F002814BF4FF4C020B248AC497B ++:103260000860A87A0127012802D0022803D014E0C0 ++:10327000287D10B911E0687D78B1A87EEA7E07FA52 ++:1032800000F007FA02F210430860287F800000F186 ++:10329000804000F5C040C0F81065FF208DF80000A8 ++:1032A000C4F81061276104E09DF80000401E8DF80D ++:1032B00000009DF8000018B1D4F810010028F3D0E8 ++:1032C0009DF80000002808BFFFDFC4F81061C4F8B3 ++:1032D00028616E72AE72EF72C4F80092B8F1000FFE ++:1032E00018BFC4F804A3BDE8F88700688F4920F030 ++:1032F0007F40086070474FF0E0200221C0F8801145 ++:10330000C0F8801270474FF0E0210220C1F80001A0 ++:10331000704787490870704710B586480AF00AF868 ++:10332000002818BFFFDF10BD82480AF019B8824993 ++:103330000860704730B5794C0546206BA84228BF1D ++:10334000FFDF012020732561607F40B1A81C206150 ++:103350007448D0F8001241F04001C0F800126D49E5 ++:103360000020C1F84401754920690860A06B7449C8 ++:1033700040F48000A0634FF48000086030BD6748CF ++:1033800002210173CA210161417F41B1CC21016158 ++:103390006449D1F8002242F04002C1F800225D4A9F ++:1033A0000021C2F844110269016B1144634A1160A3 ++:1033B000816B41F48001816361494FF480000860B2 ++:1033C00070475649012048775E49022008605F49EE ++:1033D0005D480860091F5E48086070474F4900203B ++:1033E000487770474A494FF4800008604B48816B2A ++:1033F00021F4800181630021017370474548012158 ++:103400004160C1600021C0F844114C48016043484C ++:1034100001637047414800B5407F002818BFFFDFB7 ++:103420004020484908603F48D0F8001241F0400170 ++:10343000C0F8001200BD394800B5407F002818BF11 ++:10344000FFDF3848D0F8001221F04001C0F8001228 ++:103450003C490020086000BD3248D0F8001221F03D ++:103460001001C0F800120121816170472D48002130 ++:10347000C0F81C11D0F8001241F01001C0F8001281 ++:103480007047284981B0D1F81C21012A1EBF0020B5 ++:1034900001B070472F4A126802F07F025242027058 ++:1034A0000020C1F81C012C4800680090012001B0E8 ++:1034B000704730B50C00054608BFFFDF14F0010F60 ++:1034C0001CBF012CFFDF002D0CBF0120022013497F ++:1034D00001284872CC72134904BFD1F8000240F0B1 ++:1034E000040007D0022807BFD1F8000240F008000E ++:1034F000FFDF30BDC1F8000230BD0000488500404C ++:1035000048810040A8F50140ACF50140041000409E ++:1035100008F50140008000404C850040900A0020E2 ++:103520001811004000100040000004043C15004049 ++:10353000A1000020CC0A0020041500404485004072 ++:1035400004F5014060150040448000409CF50140B6 ++:1035500028110040481500401C11004070B5EF4C88 ++:103560000022E17A11F0020F18BF10F0040F16D1FB ++:1035700011F0100F1CBF94F83530002B02D094F8D6 ++:10358000373063B111F0080F1CBF94F82830002BBE ++:1035900005D111F0040F03D094F8291001B90122CC ++:1035A000657ADF4900234FF0010C35B100F00200CD ++:1035B000104314D0BDE8704038E6607F002814BF87 ++:1035C0004FF4C020D748D84A1060D1F8000220F04C ++:1035D0000300C1F80002A37284F80BC070BD012D76 ++:1035E00014D0022D18BFFFDF1CD0A07A01280CBF19 ++:1035F000CE48CF484FF47A7100F2E730B0FBF1F0DB ++:10360000216BBDE87040081A8C30C0E4D1F800028C ++:1036100020F00400C1F80002637284F80BC084F843 ++:103620000AC0E2E7D1F8000220F00800C1F8000269 ++:10363000637284F80BC00220A072D6E72DE9F84F20 ++:10364000BC4FD7F84C21B54CB7494FF00108A07AD0 ++:103650000026CAB1012802D0022803D014E0227D3E ++:1036600012B911E0627D7AB1A27EE37E08FA02F21D ++:1036700008FA03F31A430A60227F920002F18042A3 ++:1036800002F5C042C2F81065A26B0A60A663217BF6 ++:1036900029B1D7F84411012908BF012200D0002226 ++:1036A0009F4DD5F8101101290CBF402100210128A0 ++:1036B00005BFD5F80C31012B002320231943012825 ++:1036C00005BFD5F80431012B002310230B439A4981 ++:1036D000022804BFD1F800C0BCF1010F07D1D5F812 ++:1036E0000CC1BCF1010F08BF4FF0080C01D04FF026 ++:1036F000000C4CEA0303022804BF0968002905D125 ++:10370000D5F80C11012908BF042100D0002119436C ++:10371000022803D1002A18BF022200D1002211433F ++:10372000022804BFD5F80401012805D1D7F84401C7 ++:10373000012818BF012000D1002040EA01097F487C ++:10374000016811F0FF0F03D0D5F81411012900D042 ++:10375000002184F83410006810F0FF0F03D0D5F872 ++:103760001801012800D0002084F835007448006852 ++:1037700084F836007348006818B1FFF7AAF90128E9 ++:1037800000D0002084F83700C5F80061C5F80C614E ++:10379000C5F81061C5F80461C5F81461C5F8186171 ++:1037A000C5F82861684800680090C7F84461674818 ++:1037B00000684D46DFF898910090D9F80000E0626B ++:1037C000617F00291CBF801EE062624800682063A0 ++:1037D000A07ADFF884A102280CD1607850B1DAF821 ++:1037E000001009780840217831EA000008BF84F809 ++:1037F000288001D084F82860DFF8608115F0010F7F ++:1038000016D098F80010564A4908E06A52F821107C ++:103810008847012198F80020524B5208206B53F83A ++:103820002220904798F8000010F0010F0BD01FE005 ++:1038300015F0200F18BF0221ECD115F0020F18BFB0 ++:103840000021E7D1EEE7DAF80000062200F10901D5 ++:10385000A01C0AF0FDFA40B9207ADAF800100978C5 ++:10386000B0EBD11F08BF012000D0002084F8290050 ++:103870002846FFF773FE15F0020F05D03A4898F876 ++:10388000001050F82100804715F00C0F07D0374882 ++:1038900098F8001050F82110C5F3C000884715F0C3 ++:1038A000200F05D0324898F8001050F821008047CA ++:1038B00098F80000022805D105F06E00402806D1D6 ++:1038C00001F00BFB98F80000042828BFFFDFA07A66 ++:1038D000022818BFBDE8F88F207B002808BFBDE88C ++:1038E000F88FC7F84461022814D0012818BFFFDF01 ++:1038F000216B2069884298BFFFDF2069C9F800006A ++:10390000A06B1C4940F48000A0634FF48000086065 ++:10391000BDE8F88F2169206B0844EFE7900A00208A ++:10392000001000400000040408F50140F0FE010012 ++:10393000B0F8010000800040001400404016004034 ++:1039400008140040601500401811004044810040F8 ++:10395000448500404085004004150040A10000203F ++:1039600088E5010090E5010098E50100A8E5010067 ++:10397000B8E5010004F5014010B54A4808F0C3FC61 ++:103980000021484808F0EEFC0121464808F0BEFC42 ++:103990004549002081F822004FF6FF708884434992 ++:1039A0000880488010BD10B53E4808F0ACFC0021EE ++:1039B0003C4808F0D7FC01213A4808F0A7FC3A49F6 ++:1039C000002081F822004FF6FF7088843749088074 ++:1039D000488010BD704734498A8C824218BF7047B6 ++:1039E000002081F822004FF6FF70888470472D492F ++:1039F000016070472D49088070472B498A8CA2F5D9 ++:103A00007F43FF3B03D0002101600846704791F8D7 ++:103A100022202549012A1ABF016001200020704799 ++:103A2000214901F1220091F82220012A04BF00203F ++:103A30007047012202701D48008888841046704734 ++:103A40001A49488070471849184B8A8C5B889A42FB ++:103A500006D191F82220002A1EBF01600120704784 ++:103A6000002070471048114A818C5288914209D138 ++:103A70004FF6FF71818410F8221F19B100210170E7 ++:103A800001207047002070470748084A818C5288FF ++:103A9000914205D190F8220000281CBF00207047F9 ++:103AA00001207047F60A0020D00A0020A200002062 ++:103AB0007047514A012340B1012818BF7047137065 ++:103AC0000868906088889081704753700868C2F8D1 ++:103AD00002008888D0807047474A10B1012807D07B ++:103AE0000EE0507860B1D2F802000860D08804E09F ++:103AF000107828B19068086090898880012070470C ++:103B0000002070473C4910B1012803D006E04878F6 ++:103B100010B903E0087808B1012070470020704711 ++:103B200030B58DB00C4605460D2104A80AF055FAB3 ++:103B3000E0788DF81F0020798DF81E0060798DF8EF ++:103B40001D002868009068680190A8680290E868E5 ++:103B50000390684609F02EFA20789DF82F108842CD ++:103B60000CD160789DF82E10884207D1A0789DF87E ++:103B70002D10884202BF01200DB030BD00200DB0D5 ++:103B800030BD30B50C4605468DB00321E01CFEF774 ++:103B900032FB60790D2120F0C00040F040006071E0 ++:103BA00004A80AF01AFAE0788DF81F0020798DF841 ++:103BB0001E0060798DF81D002868009068680190EB ++:103BC000A8680290E8680390684609F0F3F99DF848 ++:103BD0002F0020709DF82E0060709DF82D00A070C1 ++:103BE0000DB030BD10B504460621FEF704FB607928 ++:103BF00020F0C000607110BDA600002070B5F94D26 ++:103C0000044695F88C000026012814D095F86A0027 ++:103C100001281CBF002070BD667012202070202279 ++:103C200005F16C01A01C0AF03FF90120A07185F894 ++:103C30006A60012070BD667017202070D5F88D0075 ++:103C4000C4F80200D5F89100C4F8060085F88C602D ++:103C5000EFE7E44890F86A10002914BFB0F86E004E ++:103C60004FF6FF70704770B5DF480178002918BF24 ++:103C70000C2601D0304670BDDA4D0026344685F85A ++:103C8000626085F8636085F8646085F8656085F832 ++:103C9000666085F85E6085F8606085F8566085F836 ++:103CA000366085F868607F21817095F8670028B1DB ++:103CB000FFF7C1FBFEF7EDFE85F8674085F86A4027 ++:103CC00085F88C40C94808F0C1F9C94808F0BEF928 ++:103CD000D0E770B5C44800240470017800291CBFE7 ++:103CE000FFDF70BDBF4D85F8624085F8634085F801 ++:103CF000644085F8654085F8664085F85E4085F843 ++:103D0000604085F8564085F8364085F868407F2148 ++:103D1000817095F8670028B1FFF78DFBFEF7B9FEBB ++:103D200085F8674085F86A4085F88C40AF4808F010 ++:103D30008DF9BDE87040AE4808F088B9A94890F800 ++:103D400062007047A74900B591F8580091F85710E4 ++:103D5000C0F38002C0F340031A4400F00100104495 ++:103D6000052910D2DFE801F00B070B030900A14978 ++:103D700031F8100000BDA04800BDA04900E0A049F6 ++:103D800031F8100000BDFFDF002000BD954840F273 ++:103D90007121B0F85A0048437047924890F8690082 ++:103DA000002818BF0120704710B5040016BF022C70 ++:103DB00000200120FFF7A6FE002808BF10BD89489B ++:103DC0000472012010BD874981F86000704710B56A ++:103DD000844C207A002816BF02280020012060723F ++:103DE00004F10A01FFF778FE207A022816BF0328A3 ++:103DF0000121002184F85F10082084F85D00607ABA ++:103E000004F10A02012804BF527912F0C00F0AD04F ++:103E100004F10A02012804D1507900F0C0004028C2 ++:103E200001D0002000E0012084F85E0029B994F858 ++:103E30005700012818BF042806D1207C04F1110185 ++:103E400007F0B2F984F85D004AF2B8102060FCF780 ++:103E5000CBFD606004F10A01644808F01DF9617A45 ++:103E6000624808F035F904F10A01614808F014F9D4 ++:103E7000617ABDE810405E4808F02AB970B5594C27 ++:103E8000417B84F85810017984F8571001290CBF40 ++:103E900000220288A4F85A20827B84F86920827963 ++:103EA000002A16BF022A002201222274D0F807201D ++:103EB000C4F81120B0F80B00A4F8150094F85600CF ++:103EC0000125002818BF84F8635094F836000028B4 ++:103ED00018BF84F8645005292DD2DFE801F00308EB ++:103EE000222708000021414808F0B3F824E001210E ++:103EF0003E4808F0AEF804F111013C4808F0DAF849 ++:103F0000207C20B1012818BFFFDF05D014E000217C ++:103F1000364808F0EAF80FE00121344808F0E5F8E7 ++:103F20000AE00621314808F094F805E002212F4804 ++:103F300008F08FF800E0FFDF04212D4808F089F831 ++:103F400084F86250002070BD70B5264C05460020F4 ++:103F500084F864002A4604F1170009F0A5FF84F8EC ++:103F60003650012084F8640070BD10B51D4C00224D ++:103F700084F8632084F85600024604F1370009F003 ++:103F800093FF012084F8630010BD164981F8680092 ++:103F90007047F0B5144E83B0307810BB114C94F8D4 ++:103FA0006200F0B1FFF7B8F9002584F86150757030 ++:103FB0002846FFF7AEF9FEF7E4FEFEF7C9FE11480A ++:103FC000FEF7C2FF1048FFF790F9FFF7D8F994F811 ++:103FD000580010F0010F1CD02520FEF7BDFF012670 ++:103FE00026E013E0180B0020B4000020B00B0020E6 ++:103FF000D80B0020D8E5010091891300E0E501000D ++:10400000D0E50100CBE50100C8E5010003B00C20BC ++:10401000F0BD10F0020F04D02620FEF79DFF02260F ++:1040200006E010F0040F03D02720FEF795FF0426CA ++:10403000FEF78EFE84F85C60FFF765F90121002031 ++:10404000FEF7FEFF0F210520FEF713FF94F85E0038 ++:10405000002804BF94F85F00002805D194F85700A9 ++:10406000012818BF04286ED1FCF7BEFC0646314675 ++:104070006068FDF7E2FDF949B0FBF1F701FB1700BD ++:1040800041423046FCF7C9FC60602068384420603B ++:1040900007F087F8216888426CD8C4E9005694F884 ++:1040A0005D0007F09DF8064694F85F0001270028A0 ++:1040B00018BF002E04D01021304607F0A1FD68B1D2 ++:1040C00094F8600000281CBF94F85E0000281AD005 ++:1040D000607A04F10A0101280DD011E0677204F141 ++:1040E0000A013046FFF74DFD94F85D1004F10A0017 ++:1040F00007F067F907E0487900F0C00040281BD0BE ++:104100000846FFF76FFD04F10A01D54807F0C4FF28 ++:10411000617AD34807F0DCFF04F10A01D14807F0C7 ++:10412000BBFF617ACF4807F0D3FF94F8570001280E ++:1041300018BF04281ED107E007F077F904F10A013F ++:10414000FFF71FFDDFE715E094F85D0007F051F879 ++:1041500006000FD0102107F053FD58B969463046CC ++:10416000FFF70FFD6946BE4807F0A4FF0121BC48D8 ++:1041700007F0BBFF617A04F10A00FEF76EFE94F8C7 ++:10418000570001281EBF042894F86300002808D0B7 ++:1041900094F8562004F13701B14807F0C4FF84F8C1 ++:1041A000635094F8640040B194F8362004F117018C ++:1041B000AC4807F0E4FF84F8645007F076F8AA48AA ++:1041C00007F0F0F884F86700FFF7AEF803B00020BE ++:1041D000F0BDA6494860704770B5A54C06002AD0CE ++:1041E00094F8582094F85C1022EA010010F0010FB6 ++:1041F00004D02520FEF7B0FE012515E012F0020FD5 ++:1042000002D011F0020F06D012F0040F0CD011F002 ++:10421000040F05D008E02620FEF79EFE022503E0ED ++:104220002720FEF799FE0425FEF792FD94F85C0026 ++:10423000284384F85C0094F8610040B194F857007A ++:10424000012808BFFFDFBDE8704000F067BA1EB16B ++:1042500002210020FEF7F4FE94F865008048FFF785 ++:1042600066F894F85700052809D2DFE800F0030348 ++:104270000309030001210846FFF71BF900E0FFDFF7 ++:1042800094F8580094F85C1030EA01014FF00100F6 ++:1042900002D07649087070BD94F85710012912BFFA ++:1042A00084F86100002184F85C10F2E710B5FFF794 ++:1042B00033F86E48007840B96D4890F8620020B13C ++:1042C0000020FFF789FF002010BDFFF797F8FFF7E8 ++:1042D00089F8FEF7ABFFFFF70EF8FFF725F80C2083 ++:1042E00010BD6249012048707047614981F866003D ++:1042F000704770B5002502F07AFE68B14FF49670F1 ++:10430000FEF742FE594E3078012809D0022801D02C ++:1043100003282ED0FFDF70BDBDE8704000F0FEB96D ++:10432000534C94F85700032823D094F8670018B131 ++:10433000FEF79BFBFFF76EF84B48FEF7F8FF94F88B ++:104340005700012818BF04280AD094F869000128F2 ++:1043500014BF0328102545F00E010020FFF7A9F82F ++:1043600094F86800012808BFFFF780F80220307039 ++:1043700070BDBDE8704001202EE770B53C4C3B4D50 ++:1043800094F8680001281FD094F8670018B1FFF76F ++:1043900052F8FEF77EFB02F02AFEF8B128780228D8 ++:1043A00018BFFFDF94F85700012804BF4FF41970BD ++:1043B000FEF7EAFD0120FFF70FFF287800281EBF57 ++:1043C00028780128FFDF70BD2A48FFF75AF8002837 ++:1043D00004BF7F20A870FFF73FF8D5E7BDE8704025 ++:1043E00000F09CB92DE9F05F07464FF00009FEF799 ++:1043F000A3FD1E4E82463078022818BFFFDF1C4DF9 ++:104400007F2495F8680001283BD0174807F040FE4C ++:1044100083464FF0FF08002F7ED0134807F03FFF80 ++:10442000002879D0FEF721FD002875D095F86700A7 ++:104430000D4F68B106F01EFF8046FF2808D00146E8 ++:10444000F81C06F0F6FE404606F01FFF40EA0A0A96 ++:1044500058464FF0010B06285ED20DE040420F0097 ++:10446000B00B0020D80B0020000C0020B40000206E ++:10447000180B0020B6000020DFE800F08888880CC8 ++:104480008857C848FEF7FDFF002808BFB470FEF744 ++:10449000E3FFBAE795F85700012818BF042875D044 ++:1044A000BAF1000F05D195F86900002818BF02285D ++:1044B0006CD195F86800012804BF95F88C0000289D ++:1044C00005D0B948FEF733FF0320307060E085F86F ++:1044D0008CB0B8F1FF0F0FD005F18E02511E40468F ++:1044E00006F090FE002808BFFFDF95F88D0040F031 ++:1044F000020085F88D000CE03878C0F3801085F854 ++:104500008D00D5F8EB00C5F88E00B5F8EF00A5F8E2 ++:10451000920005F1940700E038E0B0787F2808BFEA ++:10452000FFDFB0783870B470CBE73878297CC0F3FF ++:1045300080102C46884209D1062204F11101F81C92 ++:1045400009F086FC002808BF012000D0002094F864 ++:104550005D10414504D1B8F1FF0F18BF012100D112 ++:104560000021014394F85700012818BF042800D106 ++:1045700049B958B9BAF1000F05D194F8690000287B ++:1045800018BF012802D194F86600D8B14FF0010994 ++:1045900095F8670018B1FEF74EFFFEF77AFAB9F109 ++:1045A000000F1CBF0120FFF717FE307800281ABF4C ++:1045B00030780128BDE8F09F3078032818BFFFDF6E ++:1045C000BDE8F09F7068D4F8F710C0F80D10B4F88B ++:1045D000FB10A0F8111094F8FD10C174B97D01759D ++:1045E000B7F81710C182B7F819104180B7F81B103F ++:1045F0008180B7F81D10C1806C49083009F005FEB4 ++:1046000097F8240000F01F017068017697F82410D5 ++:10461000490980F8F41094F86A00002818BFFFDFF9 ++:104620004FF0000A204684F86CA074682188A0F836 ++:104630006E106188A0F88410A188A0F88610E18827 ++:10464000A0F8881094F8F41080F88A1090F85F10A1 ++:1046500049B1417A00F10A02012904D1517901F0EE ++:10466000C001402934D090F8601041B1427A00F185 ++:104670000A01012A04BF497911F0C00F28D0C0F8FF ++:1046800078A0A0F87CA039780546C1F38011617646 ++:10469000D0F8EB00C4F81A00B5F8EF10E183B8F1D8 ++:1046A000FF0F1CD0C5F87E00E08BA5F8820005F155 ++:1046B00072022F46511E404606F0A4FD002808BF96 ++:1046C000FFDF97F8710040F0020087F8710013E0F7 ++:1046D000D0F80A108167C189A0F87C10D3E734486C ++:1046E00009F08AFD617E85F87110D4F81A10C5F8BA ++:1046F0007210E18BA5F8761085F86AB086F800A0F4 ++:10470000FEF77CFEFEF76EFEFEF790FDFEF7F3FD72 ++:10471000FEF70AFE012002F076FD39E770B5FEF7DC ++:104720006DFEFEF75FFEFEF781FDFEF7E4FD214C16 ++:10473000002694F8670028B1FEF77DFEFEF7A9F980 ++:1047400084F867601C4D2E70FEF7EEFD94F857005C ++:10475000012804D0BDE87040002002F054BD0220C2 ++:1047600002F051FD94F86A00002818BFFFDF687856 ++:10477000002808BF70BD207C84F87100D4F81100B7 ++:10478000C4F87200B4F81500A4F876003C2084F850 ++:104790006C0068680088A4F86E00012084F86A0044 ++:1047A0006E7070BDB6000020D80B00201F0C0020DA ++:1047B000960B0020180B0020B40000202DE9F041DA ++:1047C000FA4F044600207978F94D4FF0010806466B ++:1047D00011B1012925D007E095F84D10002918BF27 ++:1047E00087F8018000D0012079782B2211FB02F19B ++:1047F000294491F8222010431AD02A22A01C2331E8 ++:1048000009F052FB66700420207084F802807878EA ++:104810002B2110FB01F0284480F822600120BDE824 ++:10482000F08195F82210002918BF7E70DBD1DBE7FC ++:1048300095F87800D0B1D5F87900C4F80200D5F821 ++:104840007D00C4F80600D5F88100C4F80A00D5F848 ++:104850008500C4F80E0095F88900A07466701120D8 ++:10486000207084F8028085F8786011E028780128AB ++:104870001CBF0020BDE8F08166701220207020224D ++:10488000A91CA01C09F010FBA6712E7085F8A86069 ++:104890000120BDE8F081C6480178002914BF808856 ++:1048A0004FF6FF7070472DE9F041C14C064694F871 ++:1048B0002200002818BFBDE8F081304607F0E8FB71 ++:1048C000014601250020072938D2DFE801F00A045B ++:1048D00007373737090084F8245009E0032000E047 ++:1048E000022084F8240004F12D01304607F031FC49 ++:1048F00084F82C0094F8AD0018B1FEF7EAF801280E ++:1049000020D0304607F0EDFB84F8250004F12601A5 ++:10491000304607F0C8FB00BFA44E04F14C073078C6 ++:104920007F2808BFFFDF307838707F20307084F830 ++:104930002250BDE8F041032001F0A2BC84F82C0015 ++:10494000BDE8F081FEF708F904F12602511E06F0D9 ++:1049500059FC002808BFFFDF94F8251041F0020140 ++:1049600084F82510D8E710B5002001F0F2FB904C38 ++:10497000A0B1FEF7C8FC00210120FEF761FB04F1A5 ++:10498000BC00FEF7D4FCD4F8B400FEF7D3FC94F8D6 ++:104990009C00032818BF02281FD022E0FEF72EFD3E ++:1049A000FEF720FDFEF742FCFEF7A5FC94F8AD00F3 ++:1049B00030B1FEF740FDFEF76CF8002084F8AD0042 ++:1049C000012084F8B800022084F8B000FEF7ACFCA7 ++:1049D000BDE81040002001F053BC01210020FEF78B ++:1049E00068FDFEF743FD94F8AD0018B1FEF73DF801 ++:1049F000FEF710FD032084F8B00010BD6C490028BC ++:104A0000B1F8BA202DD0FF2A0CD24FF6FF7000EA81 ++:104A10004200A1F8BA00FF2888BFFF2002D900BFDA ++:104A2000A1F8BA0061484268012A12BF002A0D228B ++:104A30004260D243C2EBC20303EB021291F8B930D9 ++:104A4000DB4303EB830CCCEB83131A444260900CE2 ++:104A5000B1F8BA20B0FBF2F302FB130081F8B90001 ++:104A60007047012ADED95008A1F8BA0008BF01201A ++:104A7000D8D1D5E770B54E4C94F8B000022819BFD4 ++:104A800094F8B0000128002005461CBF0C2070BD22 ++:104A90002B2101FB004181F82250401CC0B20228AA ++:104AA000F6D3257094F8AD0028B1FEF7C4FCFDF7ED ++:104AB000F0FF84F8AD5084F8A85084F8A95084F829 ++:104AC000AC50012084F89700394884F89C5084F851 ++:104AD000AF5040F2011120F8941F8170002070BD8A ++:104AE00070B5334C002584F8B050012684F8B060CE ++:104AF00094F8B00002281BBF94F8B00001280020F1 ++:104B0000FFDF18BF70BD2B2101FB004181F822504F ++:104B1000401CC0B20228F6D3257094F8AD0028B12D ++:104B2000FEF789FCFDF7B5FF84F8AD5084F8A85076 ++:104B300084F8A95084F8AC5084F897601C4884F835 ++:104B40009C5084F8AF5040F2011120F8941F8170FE ++:104B500070BD2DE9F041164C05460C2794F8B000C5 ++:104B600001281FBF94F8B00002280C20BDE8F08196 ++:104B7000FEF7D2FBFEF705F9FEF7EAF894F8940089 ++:104B80000126002801BF94F89500002894F89600AB ++:104B900000281CBF94F8A900002873D094F89C004A ++:104BA000032807D002280AD00DE00000BC00002036 ++:104BB000280C00200521FE4800F07BFE03E00321C5 ++:104BC000FB4800F076FE94F8AA00002804BF94F891 ++:104BD000AB0000283CD0FBF707FF07463946D4F866 ++:104BE000A400FDF72AF8F349B0FBF1F801FB180027 ++:104BF00041423846FBF711FFC4F8A400D4F8A000E6 ++:104C00004044C4F8A00006F0CCFAD4F8A0108842C2 ++:104C10001ED80020C4E9280794F8AB00002818BF6C ++:104C200006F0DBFB94F8AC0000281CBF94F8AA0047 ++:104C300000280DD094F88D0004F18E01012804D1D4 ++:104C4000487900F0C00040280ED00846FEF7CAFFA1 ++:104C500094F88D1004F18E00FEF7FFF894F8B00080 ++:104C60000027012817D106E006F0DFFB04F18E01D2 ++:104C7000FEF787FFECE784F8B860022084F8B00004 ++:104C800009E0FFE794F8B000022802BF84F8B060A2 ++:104C90000C20BDE8F08194F89700A0B194F89C0036 ++:104CA000032818BF06F022FBC34806F07BFB84F8FC ++:104CB000AD00C248C4F8B450FEF717FBFEF734FB52 ++:104CC0003846BDE8F08106F0F0FAEDE770B5FEF782 ++:104CD00023FBBB4C94F8B000022803D0FEF724FB62 ++:104CE0000C2070BD012084F8B900A4F8BA0002209D ++:104CF000FEF70FFBB348FEF727F9B34B002004F192 ++:104D0000940200BF94F8AF10491CA3FB015C4FEA6A ++:104D10005C0CACEB8C0C6144C9B284F8AF10895CBC ++:104D2000012907D0401CC0B20328EBD3FFF71BFEBC ++:104D3000002070BD94F8AF00A449085CFEF70CF9A0 ++:104D4000FEF706F8F2E710B5040016BF022C0020AB ++:104D50000120FEF7D7FE002808BF10BD98480021AB ++:104D600080F88C4080F8A910012010BD944981F88A ++:104D7000AC00704710B5924C94F88C00002816BF18 ++:104D800002280020012084F88D0004F18E01FEF736 ++:104D9000A3FE012084F8A90094F88C00022816BF15 ++:104DA00003280121002184F8AB1094F88D0004F150 ++:104DB0008E02012804BF527912F0C00F0AD004F10C ++:104DC0008E02012804D1507900F0C000402801D0A3 ++:104DD000002000E0012084F8AA00002804BF002978 ++:104DE00010BDFBF701FEC4F8A4004AF2B810C4F8E5 ++:104DF000A00010BD002816BF022801220022704921 ++:104E000081F8972081F89D00704770B56C4D0C4675 ++:104E100000280CBF0121002185F8971085F89E001D ++:104E20004FF0080085F89F000BD1002C1ABF022C10 ++:104E300001200020114606F0B7F985F89F000828E8 ++:104E400001D0002070BD022C14BF032C1220F8D119 ++:104E500070BD5B4A032808BFC2F8981082F89C0016 ++:104E600000207047564991F89C00032804D001287F ++:104E700018BF022807D004E091F89E00012808BF5F ++:104E800070470020704791F89D00012814BF032847 ++:104E90000120F6D1704710B5FEF7B0FAFEF7A2FA7E ++:104EA000FEF7C4F9FEF727FA454C94F8AD0030B18F ++:104EB000FEF7C1FAFDF7EDFD002084F8AD000120FA ++:104EC00084F8B800022084F8B000FEF72DFA002024 ++:104ED00010BD3B4981F8B100704710B5FEF78EFA5E ++:104EE000FEF780FAFEF7A2F9FEF705FA344C94F8C3 ++:104EF000AD0030B1FEF79FFAFDF7CBFD002084F83E ++:104F0000AD00012084F8B800022084F8B000FEF75C ++:104F10000BFABDE81040002001F0B2B92DE9F84FBE ++:104F2000274DFF2100247F27DFF8A48085F8AE10ED ++:104F3000002800F0D78205F1BC0007F080F930B9F5 ++:104F400005F1BC0007F09BF9002800F0CB8295F832 ++:104F5000B000194E052880F0C282DFE800F0F0F0C2 ++:104F6000F003EF00144807F093F888F8020095F872 ++:104F7000970028B9FDF7E0FF002808BF002400D003 ++:104F8000012495F8AD0070B106F074F985F8AE0013 ++:104F9000FF280CD00146F01C06F04BF995F8AE0046 ++:104FA00006F073F9044395F8AE00FF281ED111E016 ++:104FB0000C0D002040420F00E40C0020E8E5010049 ++:104FC000280C0020EEE50100ABAAAAAAEBE501003F ++:104FD000BC00002095F8970098B195F89C00032834 ++:104FE00004D006F0D4F900BF85F8AE0098F80200AE ++:104FF000072880F0B181DFE800F03FAA07FCFCFC45 ++:10500000240006F092F9EFE795F8AD0018B1FEF72D ++:1050100012FAFDF73EFDFE48FEF733FA002808BFFE ++:1050200088F80070FEF718FA002C00F03F8195F820 ++:105030009C00012818BF022840F03881FEF7F6F8DE ++:1050400068E095F8AD0018B1FEF7F5F9FDF721FD20 ++:10505000EF48FEF716FA002808BF88F80070FEF740 ++:10506000FBF9002C00F0228195F89C0002284AD020 ++:1050700001284FD000F01AB995F8AD0018B1FEF72D ++:10508000DAF9FDF706FDE248FEF7FBF9002808BF54 ++:1050900088F80070FEF7E0F9002C00F0078195F821 ++:1050A0009C0002282FD0012834D003281CBFFFDF2A ++:1050B000BDE8F88FF178D5F89800827E91421BD137 ++:1050C0003179C27E914217D17179027F914213D119 ++:1050D000B179427F91420FD1F179827F91420BD118 ++:1050E000317AC27F914207D13178427EC1F380117B ++:1050F000914208BF012100D0002195F89E20012A8D ++:105100000ED0E9B1CEE0C348FFF7CDFBBDE8F84FC4 ++:1051100000F0F4BABF48FFF7C6FBBDE8F84F22E441 ++:10512000002967D100F11A01BA4806F0BCFFB9485E ++:1051300006F0D7FFD5F898104876B3E01BE1CEE132 ++:1051400095F8AE0095F89F1088427DD1AAE095F8B9 ++:10515000AD0018B1FEF76FF9FDF79BFCAC48FEF708 ++:1051600090F9002808BF88F80070FEF775F995F8E7 ++:10517000AB0000280CBF4FF0010B4FF0000B4FF0BD ++:105180000009307806F10901C00907D0487900F01C ++:10519000C000402808BF4FF0010A01D04FF0000ABC ++:1051A00095F89C00032806D195F89700002818BFB1 ++:1051B00095F89F0001D195F8AE0006F011F8009027 ++:1051C00078B1102106F01CFD002818BF4FF0010B2C ++:1051D000BAF1000F05D006F109010098FEF7A0FC16 ++:1051E000814695F89C0003280FD0FEF71FF864B3A2 ++:1051F00001E0B1E056E0FDF738FE50EA09005BD06F ++:105200008448FFF750FB00F03EB9D5F89800F178DC ++:10521000827E91421ED13179C27E91421AD171793A ++:10522000027F914216D1B179427F914212D1F17938 ++:10523000827F91420ED1317AC27F91420AD1317878 ++:10524000407EC1F3801101E030E035E0814208BFCB ++:10525000012600D00026B9F1000F05D1BBF1000FE7 ++:1052600004D0FDF702FE08B1012200E0002295F80B ++:105270009E00012801D010B10AE03CB908E02EB927 ++:1052800095F8AE1095F89F30994201D1012100E0C8 ++:1052900000210A420AD0012804BF002ED5F8980048 ++:1052A0003FF440AFBDE8F84F00F089BAFDF7BEFF0C ++:1052B000BDE8F84FFFF757BB95F89D00032818BFCE ++:1052C00002287DD1BAF1000F7AD0B9F1000F77D161 ++:1052D000504E95F87800002872D1012485F87A4064 ++:1052E00095F8AD0018B1FDF7F4FB012823D0304646 ++:1052F00006F0F7FE85F87B0005F17C01304606F0EC ++:10530000D2FE304606F0FAFE85F8820005F18301F0 ++:10531000304606F0D6FE98F8000005F189067F2891 ++:1053200008BFFFDF98F80000307088F8007085F83B ++:1053300078400320A5E0FDF70FFC05F17C02511E2B ++:1053400005F060FF002808BFFFDF95F87B0040F004 ++:10535000020085F87B00D4E795F8AD0018B1FEF7A0 ++:105360006AF8FDF796FB2A48FEF78BF8002872D101 ++:1053700088F80070CFE0274806F08AFE88F802001F ++:105380002548F178427A91421ED13179827A914250 ++:105390001AD17179C27A914216D1B179027B9142C8 ++:1053A00012D1F179427B91420ED1317A827B9142C6 ++:1053B0000AD131780078C1F38011B1EBD01F00E041 ++:1053C0004AE008BF012600D00026FDF72FFF98F81D ++:1053D000020004286DD1EEB30D48FEF752F8002804 ++:1053E00008BF88F80070FEF737F895F8B800002875 ++:1053F0001CBF0020FFF702FB4FF0010985F8B890B1 ++:10540000044E95F84D0038BB042085F84F0005E0A8 ++:10541000BC000020E40C00200C0D002095F8AD002D ++:10542000A6F1910418B1FDF754FB01282FD03046A6 ++:1054300006F057FEFE4981F8500004F1260130467F ++:1054400006F031FE05F15801304606F0AEFE85F853 ++:10545000570002E02DE05EE015E01F2884BF1F200A ++:1054600085F8570005F1770498F800007F2808BFF9 ++:10547000FFDF98F80000207088F8007085F84D90E4 ++:10548000042000F0FDFEBDE8F84FFFF76CBAFDF711 ++:1054900063FB04F12602511E05F0B4FE002808BF8C ++:1054A000FFDFE34890F8500040F0020084F8250048 ++:1054B000C8E7E048FDF7E5FF002808BF88F800705E ++:1054C000FDF7CAFF95F8B800002804BF0120FFF7D8 ++:1054D00095FA85F8B840BDE8F84FFFF744BAFFDF0A ++:1054E000BDE8F88F95F8B000052828BFBDE8F88F13 ++:1054F000DFE800F0030303041900F1E795F8AD00BD ++:1055000018B1FDF798FFFDF7C4FACA48FDF7B9FFD7 ++:1055100000283FF42DAFFDF79FFFFDF787FEBDE8A4 ++:10552000F84FFFF720BAC348FDF7ABFF002808BFCC ++:1055300088F80070FDF790FF95F8B800002804BFC8 ++:105540000120FFF75BFA85F8B840FDF76FFEBDE874 ++:10555000F84FFFF708BA70B5B54C94F8B0000728BB ++:1055600070D2DFE800F08585858585040D00B2489E ++:10557000FDF7DDFEFDF77AFF042084F8B00070BD72 ++:10558000FDF73CFFFDF72EFFFDF750FEFDF7B3FEE4 ++:10559000012584F8B850022084F8B000FDF7C4FE5D ++:1055A0002078002818BFFFDF0026A670D4F89800E6 ++:1055B0000188A180418861838188A183C088E083BC ++:1055C00094F8B10084F8200094F8AB109B4849B1DE ++:1055D0000178C21CC1F3801121B1517901F0C001E1 ++:1055E000402927D094F8AC1041B110F8031BC1F347 ++:1055F000801119B1407910F0C00F1BD0904808F00D ++:10560000FBFD00BF94F8AD0018B1FDF762FA012868 ++:1056100019D0D4F89800417EE171D0F81A10A16039 ++:10562000C08BA081666126832570BDE87040022092 ++:1056300000F026BED4F8E700C4F80E00B4F8EB0082 ++:105640006082DFE714E0FDF787FA04F10802E11D4C ++:1056500005F0D8FD002808BFFFDFE07940F0020028 ++:10566000E071D4F8BF006061B4F8C3002083DBE7C9 ++:10567000FFDF70BD70B56E4C94F8B00000250528B2 ++:1056800028BF70BDDFE800F03939391B03006948D5 ++:10569000FDF7F7FE10B967497F200870FDF7DCFEC3 ++:1056A00094F8B800002804BF0120FFF7A7F984F898 ++:1056B000B850FDF7BBFDBDE87040FFF754B9FDF7EA ++:1056C0009DFEFDF78FFEFDF7B1FDFDF714FE94F88A ++:1056D000AD0028B1FDF7AFFEFDF7DBF984F8AD5062 ++:1056E000012084F8B800022084F8B000FDF71CFE09 ++:1056F000BDE87040002000F0C3BD70BD70B5012052 ++:1057000000F027FD4A4CC8B104F1E401A1F12800E2 ++:1057100006F0F7FC04F1E40694F88D10304606F02C ++:10572000D7FC04F18E01304606F0B6FC94F8AB00CD ++:10573000C0B394F89C0003281FD025E0FDF75EFE5F ++:10574000FDF750FEFDF772FDFDF7D5FD94F8AD00B5 ++:1057500030B1FDF770FEFDF79CF9002084F8AD0034 ++:10576000012084F8B800022084F8B000FDF7DCFDC9 ++:10577000BDE87040002000F083BD94F89700002839 ++:1057800018BF94F89F0001D194F8AE0005F04FFEC9 ++:10579000050007D00121304606F09AFC2946304624 ++:1057A00006F07AFC2548FDF7C2FD01210846FDF709 ++:1057B00080FEFDF7E4FD052084F8B00070BD2DE902 ++:1057C000F041022000F0C5FC194C0126E0B1012097 ++:1057D00000F056FD04F1E401A1F1280006F091FC6F ++:1057E00004F1E40794F88D10384606F071FC04F1DA ++:1057F0008E01384606F050FC94F8AB00B8B194F82E ++:105800009C0003282AD030E0FDF7F8FDFDF7EAFD03 ++:10581000FDF70CFDFDF76FFD94F8AD0030B1FDF71D ++:105820000AFEFDF736F9002084F8AD000AE02AE010 ++:10583000280C0020BC000020E40C00200C0D0020EF ++:10584000360C002084F8B860022084F8B000FDF720 ++:105850006BFDBDE8F041002000F012BD94F8970008 ++:10586000002818BF94F89F0001D194F8AE0005F00D ++:10587000DEFD050007D00121384606F029FC294647 ++:10588000384606F009FCD4F89800C18A334806F07F ++:10589000B8FCD4F89800017D304806F0B6FC2F48DB ++:1058A000FDF745FD84F8A860062084F8B000BDE847 ++:1058B000F08170B50C46054606F0C8FB032C47D0B6 ++:1058C000052C18BF70BD0521284606F0C2FB244CEC ++:1058D000D4F8980000F10D01284606F07CFCD4F8BD ++:1058E000980000F11101284606F079FCD4F89800E0 ++:1058F000017D284606F089FCD4F89800C18A284624 ++:1059000006F07FFCD4F898004188284606F06DFC2C ++:10591000D4F898008188284606F06BFCD4F89800EB ++:10592000C188284606F069FCD4F8980000F1080107 ++:10593000284606F081FCD4F89800017E284606F03F ++:1059400066FC94F8B1102846BDE8704006F069BCCA ++:105950002846BDE87040032106F07BBB0C0D0020FB ++:10596000280C00202DE9F047FA4E054684B096F841 ++:1059700000040C46DFF8E0A340099AF80014490936 ++:10598000884218BFFFDF96F800044009F34991F8F8 ++:1059900000144909884218BFFFDFF14F6E1E07F15E ++:1059A0003C0909EB45054FF00008092C80F0CF8039 ++:1059B000DFE804F005444E4E49CDCDCD7A000B2EE4 ++:1059C000A8BFFFDF35F8020C0621F9F76AF90400D9 ++:1059D00008BFFFDF0B2EA8BFFFDF35F8020C2188C0 ++:1059E000884218BFFFDF94F8C000002808BFFFDF1F ++:1059F000C7F80480A7F8028021460020C7F810806D ++:105A000006F02AFA616A9830814284BF081A00F1D0 ++:105A10008D0821460020C7F8088006F01DFA61882D ++:105A200040F2E24251439830081AA0F20F30F86079 ++:105A300004B02046BDE8F04702F0FEBB04B0BDE86C ++:105A4000F04702F078BC04B0BDE8F047FDF7F6BDC2 ++:105A50009AF8140DC349400991F800144909884285 ++:105A600018BFFFDF0B2EA8BFFFDF35F8020C0621A1 ++:105A7000F9F717F9040008BFFFDF0B2EA8BFFFDFFF ++:105A800035F8020C2188884218BFFFDF002201236D ++:105A90002146684600F0CEFC94F8CA006946FBF740 ++:105AA00034F904B0BDE8F0870B2EA8BFFFDF35F84E ++:105AB000020C0621F9F7F5F8040008BFFFDF0B2EF2 ++:105AC000A8BFFFDF35F8020C2188884218BFFFDF2E ++:105AD00094F8C000042818BFFFDF84F8C08094F851 ++:105AE000CA504FF6FF76681E0B28A8BFFFDF09EBF0 ++:105AF000450020F8026C94F8CA00FAF75FFF84F8BA ++:105B0000CA80D4F8D000002804BFD4F8CC00786153 ++:105B100008D0D4E935121144826911448161D4E975 ++:105B20003301C860D4F8CC0000281CBFD4F8D010D2 ++:105B3000016105D1D4F8D000002818BFC0F8188042 ++:105B40008948007804B0BDE8F047F4F7B3B9FFDF47 ++:105B500004B0BDE8F0872DE9F047844D0746E88B97 ++:105B60006C68401CE88328784FF00008002808BFC4 ++:105B7000FFDF07D0DFF8E8A1042814D0052818BFFC ++:105B8000FFDF40D021462869FAF747FFB86087F861 ++:105B9000008001203871A86800F22710F86028788A ++:105BA00004287CD185E00029ECD02E69DAF81410A5 ++:105BB00039B38946C9680029FBD1B9F1000F20D05B ++:105BC00099F80000002808BFFFDFD9F81410D9F8B1 ++:105BD000040001443046FCF730F8002807DA211AA7 ++:105BE0004A1E92FBF4F202FB0406214604E090FBFD ++:105BF000F4F202FB140621468E4288BFFFDF3446D2 ++:105C0000C0E74446BEE70029BCD0D5F81890B9F1EA ++:105C1000000F08BFFFDF0026D9F8D410DAF81440CF ++:105C20003046721E5CB1A069884228BF824284BFA0 ++:105C3000024626462046E468002CF4D106B9064602 ++:105C400009F1C004C9F8D060002E04BFC4F80C806C ++:105C5000CAF8144005D0F068F460E060002818BF6E ++:105C60000461D4F81090C4F81880B9F1000F0ED078 ++:105C7000D9F8180048B1D4F814A0504538BFFFDF58 ++:105C8000D9F81800A0EB0A00A061C9F81880002E0E ++:105C900008BFC5F8208009D03078002800E00DE06A ++:105CA00008BFFFDF716970680844286240F6B834A5 ++:105CB00068E7E88B0A2838BF032000D302207871F8 ++:105CC000E88B012806D93846696806F08AF8E98B1E ++:105CD0000844E883B8682861BDE8F0872DE9F04101 ++:105CE0001C4C804684B094F800040E461A4F4109BB ++:105CF00097F800044009814218BFFFDF94F80004C0 ++:105D00004009164991F800144909884218BFFFDF7D ++:105D100000250122092E154C65D2DFE806F0052981 ++:105D200042423D6464185500627322736078002813 ++:105D30001CBF04B0BDE8F0810948456005612573CA ++:105D4000A068CD38FEF705FF002818BFFFDF04B0BC ++:105D5000BDE8F08101E000E00BE000E018E000E0C9 ++:105D6000340D002019E000E0C40000204C0D00209C ++:105D7000607850B1207B002808BFFFF78CF865736E ++:105D800004B0BDE8F041FAF75EBDA273FEF79EFFD6 ++:105D9000002818BFFFDFDAE704B0BDE8F041FDF7E7 ++:105DA0004DBC97F8140DF849400991F800144909C1 ++:105DB000884218BFFFDF00216846FFF7CCFE694626 ++:105DC0004046FAF7A2FFC2E72078052818BFFFDF98 ++:105DD000207F002808BFFFDF25772570207DFAF798 ++:105DE000EDFD2575B3E7FFDFB1E72DE9F041E74CA5 ++:105DF00084B00025207804281FBF207805280C20B7 ++:105E000004B018BFBDE8F08101276770607B0026F1 ++:105E100090B172B6607B00281CBFA07B002805D023 ++:105E2000FFF739F86673A673FAF70DFD62B6207DA9 ++:105E3000FBF78FFFD0B913E094F8148003208DF89E ++:105E400004008DF80500FAF7CFFD02904FF0FF3007 ++:105E500003908DF8007069464046FAF756FFE6E772 ++:105E600020BF207DFBF775FF0028F9D0207F28B1E7 ++:105E700026772078052818BFFFDF0C25667026706E ++:105E8000207DFAF79BFD267504B02846BDE8F08119 ++:105E90002DE9F047BD4884B00078002818BFFFF70F ++:105EA000A4FF0120BA4E307069460620F8F785FE3F ++:105EB000002818BFFFDF00254FF6FF7718E0029893 ++:105EC00000281CBF90F8C010002911D00088B842EB ++:105ED00018BFDFF8C08245D00621F8F7E2FE0400C3 ++:105EE00008BFFFDF94F8CA00FBF733FF68B905E08D ++:105EF0006846F8F740FE0028E1D033E020BF94F870 ++:105F0000CA00FBF726FF0028F8D084F8C05094F8A8 ++:105F1000CA904FF6FF7AA9F101000B28A8BFFFDF56 ++:105F200008EB490020F802AC94F8CA00FAF746FDE5 ++:105F300084F8CA5069460620F8F73FFE002818BFCB ++:105F4000FFDF0AE0029800281CBF90F8C01000296B ++:105F500003D00088B842BFD104E06846F8F70BFED2 ++:105F60000028EFD03570756104B00020BDE8F087DF ++:105F700010B50078884C60B101280CBF40F6C41001 ++:105F8000FFDF06D0A06841F66A01884228BFFFDF24 ++:105F900010BDA060F6E710B57F4C002320707B4851 ++:105FA00003704370037703734373837383610375D3 ++:105FB000183843703C304FF6FF7101800522418054 ++:105FC00020F8041F521EFAD1180008BFA36005D0A4 ++:105FD000002B0EBFFFDF40F6C410A060A06841F6A2 ++:105FE0006A01884228BFFFDFBDE8104050E770B566 ++:105FF000664C0E4684B02178154600291EBF0C2041 ++:1060000004B070BD416A01F29731C0F8D410A061AC ++:1060100090F8C000002818BFFFDF40F2712006FB97 ++:1060200000F168430A30C4E90110A1F53D718842CE ++:1060300088BF0846A06056490020086105212170EC ++:1060400060702077E0835548FAF768FC20750028D7 ++:1060500008BFFFDFFAF7C8FC206101216846FFF79F ++:106060007AFD207D6946FAF750FE04B0002070BD2D ++:106070004648007800281CBF0020704710B5062055 ++:10608000F8F7ACFD80F0010010BD10B53F4C84B0B6 ++:106090002278002A1EBF0C2004B010BD40F27122ED ++:1060A000424340F2712048430A30C4E90120A2F57E ++:1060B0003D71884298BF01460020A16060700421B4 ++:1060C0002170E0833548FAF729FC2075002808BFC5 ++:1060D000FFDFFAF789FC40F6B831FAF79EFC206141 ++:1060E00001216846FFF737FD207D6946FAF70DFE6E ++:1060F00004B0002010BD70B5244CA1690160FFF709 ++:1061000074FE002300BBA169D1F8D0205AB1D1E9B7 ++:1061100035C5AC449569AC44C2F818C0D1E9332CFC ++:10612000CCF80C2005E0DFF868C0D1F8CC20CCF822 ++:106130001420D1F8CC20D1F8D010002A18BF11615A ++:1061400002D1002918BF8B61A36170BD104948704E ++:1061500070470F4910B54968002801F1980408BF3D ++:1061600004F5BC7409D0012808BF04F5317404D0CB ++:10617000022814BFFFDF04F5B07404488068A04211 ++:106180008CBF0120002010BD19E000E04C0D002064 ++:10619000340D0020700D0020C4000020DD5C0100E3 ++:1061A00010B5FB4C607828B1D4E90201626805F0B3 ++:1061B0003FFEA060D4E9010188429CBF20780028FE ++:1061C00014BF0020012010BD042210B584B00029A6 ++:1061D00038D0012901BF032180F8C01004B010BDE0 ++:1061E000022928D003291EBFFFDF04B010BD0446DA ++:1061F000408840F2E2414843E6490860D4F8E400B0 ++:106200000089E082D4F8E40080792075D4F8E400B5 ++:1062100040896080D4F8E4008089A080D4F8E4004C ++:10622000C089E0802046616A05F070FE022084F893 ++:10623000C00004B010BD80F8C02004B0BDE810401C ++:10624000FAF701BB0446D2480078002818BF84F84A ++:10625000C02004D004B0BDE81040FAF7F4BA01221F ++:1062600000232146684600F0E5F894F8CA00694624 ++:10627000FAF74BFDB4F85000401CA4F85000E9E7D1 ++:106280002DE9F041C44F0025C44C397884B005286D ++:1062900080F0B780DFE800F0031363AFAF00E58361 ++:1062A0000846F3F707FE6078002869D100216846A8 ++:1062B000FFF751FC207D6946FAF727FD60E0DFF823 ++:1062C000D082206940F2E243D8F804100844A16962 ++:1062D00000F251604A88C03102FB03F5D8F814205F ++:1062E0008A4208BF002614D0216AFBF7A6FC0028CA ++:1062F00007DA291A4A1E92FBF5F202FB0506294627 ++:1063000004E090FBF5F202FB150629468E4288BF99 ++:10631000FFDFB868864208D2A06940F27122418846 ++:10632000C1824A4306EB420605E040F2E240B6FB7A ++:10633000F0F0A169C882A06905210175C08A6FF4D7 ++:106340001C71484306EB400040F63541C8F8100088 ++:10635000B0EB410F28BFFFDF04B0BDE8F081E5835B ++:106360000846F3F7A7FD01202077A0692169C0F84E ++:10637000C41080F8C0502178052918BFFFDF06D06F ++:10638000FAF761FA6573A57304B0BDE8F0810028DF ++:1063900008BFFFDFA06990F8C000002818BFFFDF2A ++:1063A000A06990F8CA00002818BFFFDF7C48FAF700 ++:1063B000B5FAA169064681F8CA000F88401E0B286D ++:1063C000A8BFFFDF774800EB460020F8027CA069F9 ++:1063D00090F8CA00002808BFFFDF002301226846AA ++:1063E000A16900F027F8A069694690F8CA00FAF799 ++:1063F0008CFCA561C4E704B00846BDE8F041F3F7A2 ++:1064000059BDFFDF04B0BDE8F081704700B5604AB8 ++:1064100059B1012908BF401E07D002291CBFFFDF68 ++:1064200000BD5188491C5180C01F506000BD5B48B1 ++:10643000007870472DE9F05F05460C46488840F229 ++:10644000E24100FB01FBE08A002600FB01FA94F820 ++:106450005B0099461746082816BF07284FF0010829 ++:106460004FF00008B9F1000F03D00121204602F0DF ++:1064700046F894F8C00040B101282FD0022815D06A ++:10648000032818BFFFDF29D038E0002F08BFFFDF47 ++:106490003F4E7068002808BFFFDF70683169C01D7B ++:1064A00008440AF25D414618012014E0DFF8E0B02C ++:1064B000791EDBF80400084308BFFFDF3548006899 ++:1064C00000EB0A0637B1DBF8040000F20F30B042EF ++:1064D00088BFFFDF032084F8C0000EE05E4667B18E ++:1064E0002B4F786818B97888002818BFFFDF7868C4 ++:1064F00000F20F30B04288BFFFDF06B9FFDF314640 ++:10650000D4F8C400FAF789FAC4F8C400A8600020DF ++:10651000287001272F71204602F0D2F8A8F101015E ++:10652000084208BF6F7106D094F8C00001280CBF64 ++:10653000022003206871606A00F5E570E86039EABE ++:10654000080008BFBDE8F09F3146284605F049FC29 ++:106550001FFA80F8204602F0B3F840450FD8804675 ++:106560006F7106FB08F1D4F8C400FAF756FAA86078 ++:106570003146284605F035FC40441FFA80F8414674 ++:10658000204601F0BCFFA868C4F8C400BDE8F09F35 ++:10659000340D0020C8000020C40000204C0D002055 ++:1065A00065590100700D0020F948C07E7047F94818 ++:1065B00040687047F848C07E70472DE9FF4FF44FA0 ++:1065C00083B05FEA0309786A3C6805682069009037 ++:1065D000B5F8D6A0D7F820801CBF94F83400002866 ++:1065E00003D007B00220BDE8F08FB5F85010059831 ++:1065F000401A1FFA80FBB9F1000F19BF04F13806E9 ++:1066000004F148003E1D05F1D000019003203071D7 ++:106610000398002834D0012800F0E28002287FD0BF ++:10662000032818BFFFDF00F0198100BFB9F1000F88 ++:106630001EBF30790328FFDF616A7869FAF7EDF948 ++:10664000B060D4E90710814287BF019908600198C2 ++:1066500001600198696A0068084400F24F10F06018 ++:10666000B5F8C0100598081A00B2002840F335812B ++:106670000398022818BF032040F0308100F02DB9A4 ++:10668000B8F1000F08BFFFDFE98A40F271204843EC ++:1066900040F2E24101EB400204990020002906D0BB ++:1066A000BE4801FB02F1B1FBF0F000F101006061B6 ++:1066B000698840F2E24201FB02F3049A4FF00001C4 ++:1066C00006D0B64902FB03F2B2FBF1F101F1010180 ++:1066D000A16108F101016162EA8A40F2712302FBC3 ++:1066E00003F2C0EB420202F237420A446262297DA1 ++:1066F00040F2E24311FB03F101EB400000F2151000 ++:10670000E0612062A2EB0800A549A0F10100091890 ++:106710008CD2B0F5387F00E002E098BFFFDF57E091 ++:10672000E98A40F271226068514300EB410204980B ++:106730000021002806D000FB02F19848B1FBF0F0E0 ++:1067400000F101016161688840F2E24100FB01F261 ++:1067500004994FF0000006D0904801FB02F1B1FB14 ++:10676000F0F000F10100A061B8F1000F08BFFFDFF9 ++:10677000BAF1000FE98A40F27122606801FB02F170 ++:1067800000EB4100616918BF401A24D06062A26822 ++:106790002168606901FB0200297D40F2E24211FBA1 ++:1067A00002F101EB400000F21310E0616988521021 ++:1067B000A0695143C0EB4100A0F547702062606AB8 ++:1067C000A0EB0800A0F5AA7176484018BFF42EAFE0 ++:1067D000012030712AE7411A00980844D338D5E7E0 ++:1067E000BAF1000F08BFFFDF698840F27122514300 ++:1067F000A0690AEB0B02C0EB410101FB0BF16162E6 ++:10680000A368D4F814C0D21AD4F800A0521E0AFB10 ++:1068100003C302FB00302A7D40F2E24312FB03F285 ++:1068200002EB400000F21310E061A1F54770206216 ++:106830005D48406800283FF4F9AE4FF0010AB8F116 ++:10684000000F08BFFFDF606AA0EB0800A0F5AA7187 ++:106850005448401838BF86F804A0E7E6698840F23B ++:106860007122A0695143C0EB410000FB0BF0606254 ++:106870000098BAF1000F25D0002818BFFFDF0AEBFF ++:106880000B00A1690022484302EB400000F2131004 ++:10689000E061688840F271225043C1EB4000A0F5EE ++:1068A000477020624048406800283FF4BFAE616AEC ++:1068B0000120A1EB0801A1F5AA723A49891838BF55 ++:1068C0003071B3E6002814BFB8F1000FFFDF616A32 ++:1068D0000098D33808446062D1E7002070711098A6 ++:1068E00080B3B5F8E81000290CBF0020B5F8EA0025 ++:1068F000A5F8EA0095F8EC20401C504388420AD2E3 ++:106900007079401E002806DD01207071B5F8EA009C ++:10691000401CA5F8EA0086F80090B9F1000F1CBFF2 ++:1069200094F8340000287FF45CAE89F0010084F80C ++:106930003500387FF97EBA7E914219D03146FAF798 ++:10694000E4F91AE0FFE7698840F27122A069514337 ++:10695000C0EB4101304605F044FA0004000CDAD0E7 ++:106960001199002918BF0880012007B0BDE8F08FF9 ++:106970000020F876B8763860786207B00020BDE86D ++:10698000F08F70B5084D0929D5E9003270D20DE0BD ++:10699000880D0020E8000020B00D002040420F00CC ++:1069A000DBF7FFFFF4F8FFFFD8000020DFE801F07D ++:1069B000056178807493935D8F0000201062D17E12 ++:1069C000042953D2DFE801F05252024A516A0C689E ++:1069D0001168C88111680861106890F8350040B9E5 ++:1069E000FAF702F869680968096CFBF726F90028CC ++:1069F0001BDC686801684A8EB4F850108A4207D1DF ++:106A0000B4F8C420511AA4F8C610A4F8502006E027 ++:106A1000511AA4F8C6100168498EA4F850100268F3 ++:106A2000C1681164C168416113E068680168098E3A ++:106A3000B4F85020891AA4F8C6100168098EA4F889 ++:106A4000501001680A6CC2600A6C4261886CC4F81C ++:106A5000D0002046BDE8704003F086B9D068506190 ++:106A6000FDF797FA002818BFFFDF70BDFFDF70BD8C ++:106A700031E0D07E04280DD2DFE800F00C0C0206D5 ++:106A8000BDE8704003F086BAFDF710FC002818BF7F ++:106A9000FFDF70BDFFDF70BDBDE87040FCF7CEBD0D ++:106AA000D87E02280FD0D87E032818BFFFDF06E06B ++:106AB000D87E022807D0D87E032818BFFFDFBDE8A4 ++:106AC000704000F023BCBDE8704000F077BCBDE82A ++:106AD0007040F9F773BFFFDF70BD2DE9F047002666 ++:106AE000F74DF84F82460C464FF0010909295CD258 ++:106AF000DFE801F005495454495B5B545400686871 ++:106B0000DFF8C083002818BFFFDF21465046C5F8D4 ++:106B10000480FFF736FFF87E022818BFBDE8F08733 ++:106B20006868D0F80080406A0568F9F740FF6A8815 ++:106B300040F271235A43D8F81810B728C1EB42012C ++:106B4000A1F1AB0A8CBF0446B7242946012005F009 ++:106B500083F92044AAEB0000A0F201342946012069 ++:106B600005F07AF9696A9C30814288BF0E1AC8F82C ++:106B70002C40A64238BF3446C8F82840386880F810 ++:106B80003490BDE8F0875046FFF7FBFEF87E022800 ++:106B900004BF386880F83490BDE8F08750462F6015 ++:106BA000FFF7EFFE2E60BDE8F087FFDFBDE8F0875E ++:106BB0002DE9F041C24C07460D4609291ED2DFE8F7 ++:106BC00001F005101414101D1D1414006068BE4E51 ++:106BD000002818BFFFDF294638466660BDE8F0414F ++:106BE000CFE63846BDE8F041CBE6B74820603846EE ++:106BF000FFF7C7FE00202060BDE8F081FFDFBDE8A1 ++:106C0000F081F0B5AF4985B00026CA7EAC4C032AAE ++:106C100003D02831CA7E032A64D10025216000B345 ++:106C2000012806BF03208876FFDF0AD02068002EE7 ++:106C300005604562256055D0A448456005B0002038 ++:106C4000F0BD2068C17E29B1C17E827E914208BF1D ++:106C500020BFF6D0C17E00290CBF01260026857614 ++:106C6000E4E70026032708468F76C97E032904D06F ++:106C7000C07E002808BF012631E00120FDF735FB6A ++:106C80002068007F002808BFFFDF2068067F8DF89E ++:106C900004708DF80570F9F7A7FE02904FF4FA70B2 ++:106CA000039001208DF8000069463046FAF72DF870 ++:106CB0002068007FFBF74DF830B920BF2068007FC7 ++:106CC000FBF747F80028F8D02068007FF9F776FE38 ++:106CD00020680577C57685760560012645622068BF ++:106CE0008576A3E705B00C20F0BD10B5754800F01F ++:106CF000EDFB754800F0EAFB754900200873734905 ++:106D000048707049486101F1280250618876907698 ++:106D10006B494860086010BD2DE9F0416D4E054695 ++:106D200096F800046C4C400994F800144909884214 ++:106D300018BFFFDF96F800044009684991F8001475 ++:106D40004909884218BFFFDF94F8140D40096449CF ++:106D500091F800144909884218BFFFDF61480024F8 ++:106D60000570584DEC76AC7605F12806F476B476CD ++:106D70000121103000F10807017104606C62746237 ++:106D80002C60346005F150087C6088F83740284654 ++:106D900000F09CFB05F1280000F098FB88F80C40FF ++:106DA0007C706C617461AC76B476A7F110004460BD ++:106DB0000460BDE8F0814C49087170472DE9F84343 ++:106DC00040490546CA7E3E4C01F12800002A04BF16 ++:106DD000C27E002A72D0C97E022907BFC17E002967 ++:106DE0000C20BDE8F88320604048F9F797FD216842 ++:106DF0000877364845602168086014384862ADB1AC ++:106E0000012105F1EC00FBF747FA0620F7F7F4FE45 ++:106E100006460720F7F7F0FE95F8EC103044B1FB7A ++:106E2000F0F200FB1210401C85F8EC002068007F97 ++:106E3000002808BFFFDFF9F7BAFD2D49091838BF50 ++:106E400040F2F65000F26B1087B220680326C67637 ++:106E5000FCF778FF21680861FCF798FF00254FF0E8 ++:106E6000010800284DD0FCF791FF21684A6A1060A4 ++:106E70000868012180F800806846FBF798F99DF8C2 ++:106E8000000042F210710002B0FBF1F201FB1200AF ++:106E90000744F9F7A9FD3946F9F7BFFD2168C86035 ++:106EA0002268167256721571107FD37E111D92F8EA ++:106EB0001AC0634532D0F9F728FF33E01AE000002A ++:106EC000D8000020880D0020B00D0020E800002030 ++:106ED000D80D002001E000E00BE000E018E000E049 ++:106EE00019E000E0D0000020E0000020B16B0100BC ++:106EF0000AFAFFFFFA482160F9F710FD21680877C8 ++:106F000077E7F9F771FD3946F9F787FD2168C86021 ++:106F100008680570086880F80180C1E7D576957625 ++:106F200015605562206805830020FDF7DEF900201A ++:106F30002560BDE8F88370472DE9F041E94F82B044 ++:106F4000F97E19B907F12801C97E19B102B00C20E8 ++:106F5000BDE8F0810221F976E34EE44D3E607D62AA ++:106F6000002428603473DFF88883297990F8F420AE ++:106F7000438838F8111038F8122011440A04120C12 ++:106F8000214605D002FB03F1DA4AB1FBF2F1491CBC ++:106F90008AB2416A05F025F800940194296828799D ++:106FA000002391F8F41038F810001A4638F8111040 ++:106FB000084481B21846FFF700FB002818BFFFDF26 ++:106FC000B4600120346030737486348686F83640AD ++:106FD0002868B0F85010491EA0F850103C8302B049 ++:106FE0000020BDE8F081C04981F837007047C248F1 ++:106FF00010B540680124817E032908BF002409D010 ++:107000000168497831B1006ABC49884284BF0024D4 ++:10701000FDF767F9204610BD70B5B7484468206891 ++:10702000C189491CC1812268D2E90A0192F837203E ++:10703000256A002A1CBF2A4604F0FAFE2168854210 ++:10704000886205D82068007B01281CBF012070BD24 ++:10705000002070BD2DE9F043A74CA24883B020600A ++:10706000416A006800260D6880F8346095F8CE10FB ++:10707000002904BF007B032856D1F9F7B5FC01466F ++:1070800020684069FAF7D9FD00F2617000284BDDF5 ++:10709000216840F271274A6A0B681268D3F818C059 ++:1070A00052887A43CCEB4202B0FBF2F0B5F85020A4 ++:1070B000401C104418860868B5F8C420018E511A87 ++:1070C00009B2002930DD012180F83610B5F87600CC ++:1070D000B5F87410DFF81882401AB5F85010401E49 ++:1070E000084487B20DF1080917E0516A097938F8A8 ++:1070F0001110CDE90069028E95F8F430007B38F864 ++:107100001330194489B20123FFF757FA60B10128FF ++:107110000ED0022818BFFFDF06D022681068018E4B ++:10712000791A09B20029E0DA266003B0BDE8F083DD ++:1071300020680068018EBDF8082011440186ECE744 ++:1071400070B56D4C0025062861685AD2DFE800F062 ++:10715000141C030E200D002000F0F5F96068C576C0 ++:1071600085760560456268B1656070BD2068C5764A ++:1071700085760560456270BD012000F0E4F9606825 ++:107180000028F1D1FFDFEFE709680320087370BD25 ++:10719000486A0A680068936913604288096840F287 ++:1071A000E2435A434A60B0F81011C18290F80E11C0 ++:1071B0000175B0F812114180B0F814218280B0F846 ++:1071C0001621C280494A4A4B92F804C0126833F82B ++:1071D0001CC092F8F42033F81220624413041B0CF4 ++:1071E0004FF0000204D0434A5943B1FBF2F14A1C6C ++:1071F00092B2416A04F0F5FE6168022009680873E2 ++:1072000070BDFFDF70BD70B53B4D002470B101282B ++:1072100012D002281CBFFFDF70BD00F0F2F96868D1 ++:10722000C47684760460446220B924E000F0E9F971 ++:10723000686800B36C6070BD686801684C70C476A3 ++:1072400084762F4E046044620021706804F048FA8E ++:10725000706880F80A4180F80B41FFF76DFE002846 ++:1072600018BFFFDFF9F7EFFA26486C600078F2F7F5 ++:1072700021FE6C6070BDFFDFDCE71F494968CA7EF4 ++:10728000022A18BF70470A68D389002B18BF7047BD ++:1072900010610A682838936A034493620968CA6ACD ++:1072A0001044C8627047144A00B5526841B10129C0 ++:1072B00008BF401E04D0022916BFFFDFC01F00BD5B ++:1072C000106200BD1048C07E00281CBF002070471F ++:1072D00010B50720F7F782FC80F0010010BD000018 ++:1072E000DB6A0100880D0020D80D0020E00000209E ++:1072F000F2E5010040420F00D8000020CF821300C9 ++:10730000E8000020D0000020B00D00202DE9F84357 ++:10731000DB4D4FF00308002728680126041D80F884 ++:107320000880077100684078012836D0012168463E ++:10733000FAF73DFF9DF8000042F210710002B0FB29 ++:10734000F1F201FB12002968496A09680E183146FA ++:10735000A068F9F762FBA0603146204604F041FDC9 ++:10736000461C2868018B0A299CBF31440183C5490A ++:1073700088421CBF018B0A2992BF84F80580022134 ++:107380006171027FC37E214690F81AC063450FD019 ++:10739000BDE8F8431046F9F7B8BC4FF47A71A0681D ++:1073A000F9F73BFBA0600021204604F01AFDD8E766 ++:1073B000C776877607604762BDE8F8832DE9F04716 ++:1073C000AF4E84B03068416A04680D6894F8351097 ++:1073D00039B1618EB5F85020914202BF407A002841 ++:1073E000FFDFF9F701FB3268526901461046FAF7F0 ++:1073F00024FC31684FF0000900284A6A126808BF6F ++:1074000048460AD00B68528840F2712C9B6902FBF7 ++:107410000CF2C3EB4202B0FBF2F0B5F85020638EE1 ++:1074200002EB000C6345AEBF581C401C1044608644 ++:1074300094F8360030B9608EB5F8C420904204BF8D ++:10744000401C6086088B904F401C0883B5F876007E ++:10745000B5F874100DF1080A401AB5F85010401E26 ++:1074600008441FFA80F819E03068406A007937F85C ++:107470001000CDE9009A95F8F41037F8111008447F ++:1074800081B2207B0023FFF798F8002804BF04B0E6 ++:10749000BDE8F087012818BFFFDF11D0628EA8EB8E ++:1074A000020000B20028DFDA082085F86A00012017 ++:1074B00085F8690004B02846BDE8F04702F07CB9C1 ++:1074C000608EBDF8081008446086E7E72DE9F047B4 ++:1074D000DFF8B8816A4C05464FF01F090027EE7EA1 ++:1074E000042E23D2DFE806F02922021D454518BFED ++:1074F000FFDF02202560A8762168C87E28B1C87EFB ++:107500008A7E904208BF20BFF6D0C87E8F760028C2 ++:107510001CBF4FF00C0927600CD10F604F62276031 ++:107520000BE00120FFF76DFB814600E0FFDFB9F1C2 ++:10753000000F02D0E87EB042D1D1E87E002818BF0B ++:10754000FFDFBDE8F087F0B54D4E002583B07268CF ++:107550000128516A0C6847D108794B4B33F8101059 ++:10756000106890F80CC00127BCF1030F06D0027B15 ++:10757000022A13D0007B012825D035E085601068F1 ++:107580000560CDE9007594F8F400B4F8C42033F830 ++:1075900010000023084481B2032020E0B4F8D62074 ++:1075A0008260CDE9007594F8F400B4F8C42033F893 ++:1075B00010000023084481B20220FEF7FEFF71682C ++:1075C00009680F730DE0CDE9007594F8F400B4F884 ++:1075D000C42033F810000023084481B20120FEF7D4 ++:1075E000ECFF002818BFFFDFF9F72DF9706805835D ++:1075F0000268B4F850105186006880F8365003B025 ++:10760000F0BD38B51E4C00200546616809684A780F ++:10761000002A18BF4D702AD1097861B1012168464E ++:10762000FAF7E9FD9DF8000042F210710002B0FB8C ++:10763000F1F201FB12006268516A09680144D068E6 ++:10764000F9F7EBF96268D060157103205072107F72 ++:10765000D37E111D92F81AC0634502D0F9F755FB8D ++:1076600003E0D57695761560556260680583F9F775 ++:10767000EAF807480078BDE83840F2F71BBC000084 ++:10768000D8000020B00D0020F2E50100880D002098 ++:10769000D000002010B584B004466846FCF7ADF970 ++:1076A000002808BFFFDF009804F02DFE032100989A ++:1076B00004F040FE0098017821F01001017021468D ++:1076C00004F09FFE162C80F0E380DFE804F03627FC ++:1076D0000B61E1E1E2199DE1E2E284E1E1E1E1E156 ++:1076E000E2E2ABC6FE48806890F8DD10009804F036 ++:1076F00007FFFCF795F900281CBF04B010BD80E01F ++:10770000F748806890F8B910009804F049FFFCF73A ++:1077100087F9002840F0DE8000F0DBB8F048806890 ++:10772000D0F8E800411C009804F0DBFEFCF778F983 ++:1077300000281CBF04B010BD63E0E94CA068D0F87D ++:10774000E4008179009804F0A0FEA068D0F8E4007D ++:107750000189009804F092FEA068D0F8E400418905 ++:10776000009804F076FEA068D0F8E40081890098C3 ++:1077700004F076FEA068D0F8E400C189009804F017 ++:1077800076FEFCF74DF900281CBF04B010BD38E0B0 ++:10779000D34CA068D0F8E400011D009804F0B4FEBA ++:1077A000A068D0F8E40000F10C01009804F0B6FEE7 ++:1077B000A068D0F8E40000F11E01009804F0B4FEC7 ++:1077C000A06800F1B001009804F0BCFEFCF728F9B5 ++:1077D000002872D17BE0C24C60690178009804F007 ++:1077E000C9FE60698188009804F0C6FE606941881E ++:1077F000009804F0C5FEFCF713F900281CBF04B084 ++:1078000010BDFFDF04B010BDB648D0E90010CDE9CF ++:10781000021002A9009804F0C5FEFCF701F9002847 ++:107820004BD154E0AE4CA068B0F84010009804F082 ++:10783000C3FEA068B0F84210009804F0C1FEA06832 ++:10784000818F009804F0C0FEA068C18F009804F0FA ++:10785000BFFEFCF7E5F880BB39E0A14CA068818F42 ++:10786000009804F0B1FEA068C18F009804F0B0FE4B ++:10787000A068B0F84010009804F09EFEA068B0F830 ++:107880004210009804F09CFEFCF7CAF810BB20E000 ++:10789000FFDFFCF7C5F8002808BFFFDF0C2C12BF84 ++:1078A000132C04B010BD072C18BF152C12D0012CBE ++:1078B00019BF002C022C04B010BD0021884880683C ++:1078C000A0F87A10012180F87E1004B010BDFFDF0F ++:1078D000F3E7FFDF824900208968A1F8800004B047 ++:1078E00010BD2DE9F0437E4C83B0207910F0010FDC ++:1078F00004BF03B0BDE8F083206900230521C578EB ++:10790000A06890F85B20503004F01AFA002818BFE5 ++:10791000022D0CD00B2D18BF042D08D0052D1CBF37 ++:10792000062D0D2D03D0607840F00800607060785F ++:1079300000281CBF03B0BDE8F0832069C078801E1A ++:10794000142880F00983DFE800F00AF16482E4255E ++:10795000F1F0F157EF9BF1F1F1F1EEEDECEBA068F6 ++:107960000023012190F85D20503004F0E9F900284F ++:1079700040F0FF82206904F0C5FDA16881F8DE00B7 ++:10798000022081F85D00002081F8820081F87E00ED ++:1079900000F0EFBAA0680023092190F85B20503076 ++:1079A00004F0CEF90028A06816D090F85B200023E0 ++:1079B0000921503004F0C4F9002800F0E582607815 ++:1079C000002840F0D682A16881F8720081F87E001C ++:1079D00081F85B0000F0CDBA90F85B10192940F0F7 ++:1079E000C882002180F88F1080F85B10A0F87A1010 ++:1079F00080F87E1000F0BDBAA06890F85B100C29EA ++:107A00006DD1002180F85F100F2180F85B1000F02D ++:107A1000B0BAA06890F85B1010297FD1D0F8E410BC ++:107A200000884988814218BFFFDFA068D0F8E400D1 ++:107A300000F12601206904F092FDA06800F1B40174 ++:107A4000206904F094FD1320A16800F07DBAA268BB ++:107A500092F85B00132861D1D2F8E40002F1A00390 ++:107A600000F11E0100220E3004F0FFF8A068002192 ++:107A7000C0E92411012180F85F10152100F072B9CE ++:107A8000A06890F85B10132912BF102990F88400A9 ++:107A9000002843D102E0607000F06BBA206904F066 ++:107AA0007DFDA168002581F8B80081F8835081F838 ++:107AB0007E50D1F8E40009884088884218BFFFDF73 ++:107AC000A068D0F8E4100D70D0F810110A78002AE0 ++:107AD00018BFFFDF40F02B810288CA8004E01DE060 ++:107AE000F000002004E60100D0F8102190F8B81052 ++:107AF0001171D0F810110D72D0F810210B211170F6 ++:107B00000188D0F810014180E078F2F7D3F900F055 ++:107B10000EB9A06890F85B10172908D00220BAE7C8 ++:107B2000A2E13BE108E121E141E0B8E014E20025F7 ++:107B300080F8835080F87E50D0F8E410008849889F ++:107B4000814218BFFFDFA068D0F8E4100D70D0F8B4 ++:107B500010110A78002A18BFFFDF40F0E88090F883 ++:107B600084207AB180F884500288CA80D0F810113D ++:107B70000D71D0F810210C2111700188D0F810017E ++:107B8000418010E00288CA80D0F810110D71D0F841 ++:107B9000102101211172D0F810210B2111700188E0 ++:107BA000D0F810014180E078F2F784F9BFE0A068D6 ++:107BB0000023194690F85C20503004F0C1F850B909 ++:107BC000A0680023082190F85B20503004F0B8F83A ++:107BD000002800F0D9816078002840F0CA81A068B0 ++:107BE00090F8860010F0020F17D1206904F0CCFC49 ++:107BF000A16881F88700206904F0C8FCA168A1F899 ++:107C00008800206904F0C5FCA168A1F88A0091F8F9 ++:107C1000860040F0020081F88600A06890F8861087 ++:107C200011F0010F15D190F85C2000231946503057 ++:107C300004F086F8002808BFFFDF0121A0680422B5 ++:107C400080F85C1080F8E02080F882100021A0F815 ++:107C50008010A06890F85B10012907D1002180F8FE ++:107C60005B1080F87E10E078F2F724F9A168D1F873 ++:107C7000E400098842888A4204BF0178042940F060 ++:107C8000788100250570E078F2F714F9A06890F883 ++:107C90005B10002908BF80F87E5000F06AB9A06828 ++:107CA0000023072190F85B20503004F049F80028A9 ++:107CB00000F06A816078002840F05B8169462069A5 ++:107CC00004F0B1FCA0689DF80020002590F88C100D ++:107CD000114001F02F0180F88C1080F87E50D0F810 ++:107CE000E41000884988814218BFFFDFA068D0F8FF ++:107CF000E4100D70D0F810110A78002A18BFFFDFC9 ++:107D000015D10288CA80D0F810110D71D0F8101169 ++:107D1000009A8A60019ACA60D0F810210621117079 ++:107D20000188D0F810014180E078F2F7C3F8A0682C ++:107D300080F85B5000F01DB9A0680023092190F87D ++:107D40005B20503003F0FCFF002800F01D816078BC ++:107D5000002840F00E81A068002180F8721080F8A1 ++:107D60007E1000BF80F85B1000F003B9A06800230C ++:107D7000194690F85C20503003F0E2FF002800F034 ++:107D800003816078002840F0F480A0680021A0F80A ++:107D90008010012180F882100B2162E0A06800238E ++:107DA000194690F85C20503003F0CAFF00287CD0C0 ++:107DB000206904F019FC28B3206904F00DFC064684 ++:107DC000206904F00BFC0546206904F009FC074615 ++:107DD000206904F007FCA1688F86CE8608874D874E ++:107DE00091F88F0000281CBF91F85B00192830D053 ++:107DF0006846FBF728FE40B3009804F028FB1428DF ++:107E00001DD022E0A0680023194690F85C20503075 ++:107E100003F096FF002873D06078002871D12069A4 ++:107E200004F015FBA16881F8B900052081F85C0019 ++:107E30000020A1F88000012081F8820099E0A1686B ++:107E4000002081F87E00FBF70DFEA168002081F87C ++:107E50008F00A0680021A0F88010012180F8821016 ++:107E60001A2180F85C1084E0A06800230A2190F8B1 ++:107E70005B20503003F064FFB8B1206904F0B4FB1C ++:107E8000E8B3206904F0ACFB0646206904F0AAFBC5 ++:107E90000546206904F0A0FB0746206904F09EFB1C ++:107EA000A168B1F82C80CB8D00E050E0B1F830C073 ++:107EB0004A8E8E86CF860D874887B1F83C90B945AB ++:107EC00098BF4F468F85B1F84090B14598BF4E4658 ++:107ED000CE85B1F83E90814598BF48460886B1F8F6 ++:107EE0004290A94598BF4D464D869E4238BF1E46DA ++:107EF000CE85954238BF15464D86474502E01DE0C8 ++:107F000042E036E008BF9E4203D1604508BF95427B ++:107F100014D00A88A1F806218A8DA1F808210A8EBA ++:107F2000A1F80A21CA8D01F1FC00A1F80C21498EAB ++:107F3000418201210172E078F1F7BCFFA1680020C5 ++:107F400081F88F0081F87E0081F85B0011E0607895 ++:107F500040F0010060700CE0A0680023194690F822 ++:107F60005C20503003F0ECFE70B1607800283FF4E4 ++:107F700056AFA068D0E926134A1C43F10001C0E9BE ++:107F8000262103B0BDE8F083012084E52DE9F0410E ++:107F9000FD4D04464FF00007687808436870294695 ++:107FA0002879D1F808C010F0200F18BFACF8747011 ++:107FB00004D1BCF87400401CACF874009CF860005C ++:107FC000012640B99CF85B20002306210CF15000EB ++:107FD00003F0B6FE58B3A88810F4006F07D0A86865 ++:107FE00090F86010002918BFA0F86C701FD1A96824 ++:107FF000B1F86C00401C80B2A1F86C00B1F86E20A2 ++:1080000082422CBF101A00208A88521D824228BF4B ++:1080100081F87260B1F86C00B1F86E20904206D31E ++:10802000A1F86C7081F80261E878F1F743FF2879D4 ++:1080300010F0600F08D0A86890F85E1021B980F8A1 ++:108040005E600121FEF7C0F81CB900F007FD00F0EA ++:108050006FFBA868A04600F1500490F8DC0030B92E ++:10806000627B00230121204603F06AFE10B1208DBF ++:10807000401C20853D21B8F1000F01D0A17614E00D ++:108080002878022808BF16200ED0012804BFA8684F ++:1080900090F8DE0008D06878A0B110F0140F06D078 ++:1080A0001E20A076667640E0A07666763DE010F071 ++:1080B000080FE3D110F0030F08BFFFDF2A20A076DE ++:1080C000667632E094F82E0028B1608D411C6185FF ++:1080D000A18D884213D294F8320028B1208E411C21 ++:1080E0002186A18D88420AD2208DE18C884203D35B ++:1080F000AA6892F8DC2012B9A28D904203D3222004 ++:10810000A076667611E0A07B0028A08C05D088427E ++:1081100009D30820A076667607E0062803D33E2020 ++:10812000A076667601E0607E58B1E7722773A77388 ++:108130000221A868FEF748F8E878BDE8F041F1F7B9 ++:10814000B9BEA868BDE8F0410021FEF73DB88E49F0 ++:108150004A788B781A430ED101280AD0087910F09A ++:10816000040F04D0886890F85D00022803D0012035 ++:108170007047FEF715B80020704770B5824C054671 ++:108180000E46A0882843A08015F0020F04D015F0F9 ++:10819000010F18BFFFDFE66015F0010F18BF266161 ++:1081A00015F0020F12D0304604F051F9062802D023 ++:1081B0000B2830D00AE0A06890F85B10152905D193 ++:1081C0000021C0E92611012180F8601015F0800F10 ++:1081D0001CBF0820A07015F4806F08BF70BDA16897 ++:1081E000B1F8500089880844801D85B2304604F0FB ++:1081F0002EF9012817D0304604F029F9002818BFBD ++:1082000070BDA0682946D0F8E40085803046BDE8FE ++:10821000704004F03EB9A06890F85B100F2908BFC9 ++:108220000021D3D1D0E7A0682946A0F8EE5030460F ++:10823000BDE8704004F05DB9F8B5534D0024064622 ++:10824000A860AC806C70AC702C700088FBF7D2FB1F ++:10825000A8680088FBF7F4FBB6F8C800A968401CC2 ++:1082600082B201F1500003F018FC002818BFFFDFB4 ++:108270002746A6F8C840A86890F87E1029B1B0F843 ++:108280007A10B0F87C2091422AD290F8821029B15D ++:10829000B0F88010B0F87C20914221D2B0F878205C ++:1082A000B0F876108A421BD290F85E20B0F87400C5 ++:1082B000002A3DD0884213D234480090344B354ACE ++:1082C0003146204602F08DF9A8680023052190F878 ++:1082D0005B20503003F034FD002818BF02F07DF918 ++:1082E000A86890F8F010002908BFF8BD90F8F110C8 ++:1082F000002906BF90F88F100029F8BD90F85C1097 ++:108300001A2908BFF8BDB0F8F2108187B0F8F41050 ++:10831000C187B0F8F61029B1A0F84010B0F8F810F5 ++:10832000A0F84210012180F88F1080F8F070F8BD9D ++:108330000628D5D2C0E71448806890F87E1029B18D ++:10834000B0F87A10B0F87C20914219D290F88210DF ++:1083500029B1B0F88010B0F87C20914210D2B0F86A ++:108360007820B0F876108A420AD290F85E20B0F8F1 ++:1083700074001AB1884203D202F041BB0628FBD335 ++:108380000020014602E60000F00000208D7F010081 ++:108390004F8101007B8101002DE9F0410C46074629 ++:1083A0001D4616464FF48C712046DDF8188005F006 ++:1083B00014FE2780C4F81081C4E93965BDE8F08156 ++:1083C000F6F78FBD70B50C4605460621F6F769FC39 ++:1083D000002808BF70BDD0F810110A780021072AC4 ++:1083E00011D00C2A21D00B2A2CD0062A39D090F893 ++:1083F0000221002A48D061700E22227080F80211FA ++:108400006580012070BD617007222270D0F81021B4 ++:108410005368C4F802309368C4F8063092896281C8 ++:10842000D0F810010170012070BD61700C22227023 ++:10843000D0F810215268C4F80220D0F81001017061 ++:10844000012070BD61700B222270D0F8102153689A ++:10845000C4F802301289E280D0F8100101700120C6 ++:1084600070BD617006222270D0F810215368D2F8D6 ++:1084700008C0D268C4F80230C4F806C0C4F80A20A4 ++:10848000D0F810010170BCE790F80421C2B161700E ++:108490001322227090F80421002AB2D080F804112F ++:1084A000D0F80621C4F80220D0F80A21C4F806202A ++:1084B000B0F80E21628190F80421002AEED1A0E7E5 ++:1084C00090F8FC20002A04BF002070BD61701622C5 ++:1084D000227090F8FC20002A93D000BF80F8FC1096 ++:1084E000D0F8FE20C4F8022090F8FC20002AF5D134 ++:1084F00087E700207047FD4A5061D17070472DE931 ++:10850000F0470446481E85B238BFBDE8F087012712 ++:10851000DFF8D89304F108084FF0070A5FF000066F ++:10852000B4F8C800401CA4F8C800B4F87400401C9B ++:10853000A4F8740094F8600040B994F85B2000231C ++:10854000062104F1500003F0FBFBD8B1B4F86C0035 ++:10855000401C80B2A4F86C00B4F86E1081422CBFAD ++:108560000A1A0022A3885B1D934228BF84F8727008 ++:10857000884207D3A4F86C6084F8027199F803006C ++:10858000F1F798FC94F87E0020B1B4F87A00401C12 ++:10859000A4F87A0094F8820020B1B4F88000401C5E ++:1085A000A4F8800094F8DC0040B994F85D20002322 ++:1085B000012104F1500003F0C3FB20B1B4F87800AE ++:1085C000401CA4F8780094F85B0007281FD1B4F889 ++:1085D0005000411CB4F8EE00814262D1D4F8E800AA ++:1085E000411C404605F011FE0221204603F074F9BB ++:1085F00084F85B6084F88E70D4F8E8000078002876 ++:1086000008BFFFDFD4F8E8000178491E017094F834 ++:108610005B00082845D1B4F85000411CD4F8E400B0 ++:10862000808881423DD1D4F810010178002918BF1B ++:10863000FFDF22D12188C180D4F8E4004189D4F839 ++:1086400010010181D4F8E4008189D4F8100141813E ++:10865000D4F8E400C189D4F810018181D4F8100164 ++:108660000671D4F8100180F800A0D4F81001218818 ++:10867000418099F80300F1F71DFC0121204603F029 ++:108680002BF903212046FDF79FFDD4F8E400418833 ++:108690002088814218BFFFDFD4F8E400067084F818 ++:1086A0005B60B4F85000401C691EA4F850008DB205 ++:1086B000BFF436AFBDE8F0878C4AC2E906017047C7 ++:1086C00070B50446B0F8740094F85E10002908BF35 ++:1086D000C0F1020503D0B4F87610081A051F94F80B ++:1086E000720040B194F85B200023092104F150008E ++:1086F00003F026FBA0B1B4F86C6094F8600058B9A0 ++:1087000094F85B200023062104F1500003F018FBCD ++:10871000002808BF284603D0B4F86E00801B001F55 ++:108720008542C8BF0546002DD4BF0020A8B270BD49 ++:108730002DE9F84F6846FBF760F9002808BFBDE84F ++:10874000F88F6A4C6078002818BFBDE8F88FA068E1 ++:108750000023012190F85D20503003F0F1FA002849 ++:1087600018BFBDE8F88FA06890F8DC10002918BF8A ++:1087700002206CD190F85B2000231946503003F0A2 ++:10878000DFFA30B1A06890F87200002818BF1220FC ++:108790005DD1A06890F85B200E2A42D00F2A08BF56 ++:1087A0000B2054D0152A08BF062050D000230421E6 ++:1087B000503003F0C5FA002818BFBDE8F88FA06854 ++:1087C000002590F85C1001294AD0052943D00B29D7 ++:1087D00053D001261A2957D0D0F8E4100A78002A7D ++:1087E00000F0DD8049880288914240F0D88090F8FE ++:1087F0005B2000231946503003F0A2FA002877D0FE ++:10880000A068D0F8E4100978022908BF002070D0D1 ++:1088100003296FD004296ED0052908BF082068D02D ++:10882000BDE0F9F7E7FC0C2838BFBDE8F88FA06879 ++:108830000821D0F8E4001E30F9F7DDFC28B1A0686B ++:108840000421B030F9F7D7FC00B9FFDF0320FEF7B1 ++:1088500021FFBDE8F88F0720FEF71CFFA06866E047 ++:108860000C20FEF717FFA068A0F8805090F8861043 ++:1088700041F0010180F8861059E01320FEF70AFF4D ++:10888000A068A0F8805052E0C18E828FB0F82CA072 ++:10889000B0F82E80B0F83090478E914238BF0A462B ++:1088A0008285838EB0F840108B4238BF1946C1854F ++:1088B000038FB0F842C0634538BF9C46A0F832C071 ++:1088C000B0F83AB0C38F9B4538BF5B46038641453D ++:1088D00038BF4146C185BC4538BFBC46A0F832C050 ++:1088E000524508BF41450AD14B4505E0F000002044 ++:1088F00055E029E01FE03FE008BFBC4513D00288E7 ++:10890000A0F80621828DA0F80821028EA0F80A2185 ++:10891000C28D00F1FC01A0F80C21408E48820E723D ++:10892000E078F1F7C7FA1520FEF7B4FEA06880F8EA ++:108930005C50BDE8F88F90F85F1041B190F860008E ++:10894000002808BFFFDF0A20FEF7A4FE27E0F9F7A2 ++:1089500051FC0C2823D3A0680821D0F8E4001E3075 ++:10896000F9F749FC28B1A0680421B030F9F743FCBD ++:1089700000B9FFDF0320E7E790F8860010F0030F4F ++:108980000DD10C20FEF786FEA068A0F87A5080F882 ++:108990007E6090F8861041F0010180F886106846EC ++:1089A000FBF72BF8002808BFBDE8F88FA06800236C ++:1089B000194690F85B20503003F0C2F9002808BF38 ++:1089C000BDE8F88FA06890F8EC10D1B3A1690978E0 ++:1089D000B9BBB0F850100A2934D900F108010522BA ++:1089E000E06905F035FA0028A06804BF80F8EC5073 ++:1089F000BDE8F88FD0F8E800017869B1411C052284 ++:108A0000E06905F025FA002818BFBDE8F88FA068D6 ++:108A1000D0F8E800007830B9A068E169D0F8E80043 ++:108A2000401C05F0F2FBA068D0F8E8000178491C72 ++:108A300001700120FEF72EFEA06880F8EC50BDE822 ++:108A4000F88FFFE790F88F1000291EBF90F85C00A8 ++:108A50001A2814207FF4FBAEBDE8F88F2DE9F04111 ++:108A6000E94C6078002818BFBDE8F08120794FF00C ++:108A7000010710F0040F4FF000050DD0A06890F82A ++:108A80005B00052808BFFFDFA06890F85D10022991 ++:108A900004BF277080F85D5020794FF0080610F071 ++:108AA000020F00F00B816078002840F00781E06839 ++:108AB000C078162880F00181DFE800F04D3C0B798A ++:108AC000FFFF8F1E2BFF5C6E9AFFFFFFFFFFC7FBB0 ++:108AD000D7F0A0680023012190F85D20503003F00A ++:108AE0002FF9002840F0EA80A068032180F85D108B ++:108AF00080F87E5000F0DEB8A0680023194690F898 ++:108B00005C20503003F01CF9002840F0D28000F0C7 ++:108B1000D5B8A0680023194690F85B20503003F0C8 ++:108B20000FF9002808BFFFDF0920A16881F85B006A ++:108B300000F0C4B8A0680023194690F85B205030BC ++:108B400003F0FEF8002808BFFFDF0720A16881F8C6 ++:108B50005B0000F0B3B8A0680023194690F85B20D2 ++:108B6000503003F0EDF8002808BFFFDFA06880F860 ++:108B70005B60A3E0A0680023194690F85B205030AA ++:108B800003F0DEF8002808BFFFDFA0680C2180F8A2 ++:108B9000837080F85B1091E0A06890F85B000F286C ++:108BA00018BFFFDFA0680E2180F8847012E0A06873 ++:108BB0000023194690F85B20503003F0C1F828B923 ++:108BC000A06890F88400002808BFFFDFA06810218B ++:108BD00080F8837080F85B1070E0A06890F85B000C ++:108BE000152818BFFFDF1720A16881F85B0065E03A ++:108BF000A068D0F8E41003884A889A4204BF097834 ++:108C000004290AD0A0680023194690F85C2050304F ++:108C100003F096F800284CD150E090F85B20002338 ++:108C20001946503003F08CF8002808BFFFDFA06819 ++:108C300090F8861011F0020F0FBF80F85B7080F87B ++:108C40007E50D0F8E4000570DCE7A06800231946E8 ++:108C500090F85B20503003F073F8002808BFFFDF66 ++:108C60000A20A16881F85B0028E0A06890F88F00D6 ++:108C7000012818BFFFDFA0680023194690F85B2089 ++:108C8000503003F05DF8002808BFFFDF1920A1680D ++:108C900081F85B0012E001E00BE00EE0A068002329 ++:108CA000194690F85C20503003F04AF8002808BFBD ++:108CB000FFDFA06880F8825000E0FFDF207910F02D ++:108CC000080F0AD0607840B9A06890F85D100329B9 ++:108CD00003D10221217080F85D50FEF702FEA078DA ++:108CE00010F0080F14D0A0680023052190F85B2035 ++:108CF000503003F025F848B16670A068D0F8101124 ++:108D000008780B2808BF0020087001E001F0A5FEDC ++:108D1000A068BDE8F041AFF3008070B5044690F85C ++:108D20005B000025072822D1B4F85000B4F8EE10FB ++:108D3000401C884218BF70BDD4F8E800411C04F103 ++:108D4000080005F062FA0221204602F0C5FD84F811 ++:108D50005B50012084F88E00D4F8E80000780028E9 ++:108D600008BFFFDFD4F8E8000178491E017094F8CD ++:108D70005B00082818BF70BDB4F85000D4F8E410A8 ++:108D8000401C8988884218BF70BDD4F81001017852 ++:108D9000002918BFFFDF22D12188C180D4F8E40068 ++:108DA000D4F8101140890881D4F8E400D4F81011E7 ++:108DB00080894881D4F8E400D4F81011C0898881F2 ++:108DC000D4F810010571D4F8101107200870D4F8F8 ++:108DD0001011208848800C48C078F1F76BF8012109 ++:108DE000204602F079FD03212046FDF7EDF9D4F885 ++:108DF000E40021884088884218BFFFDFD4F8E400EF ++:108E0000057084F85B5070BDF00000202DE9F04340 ++:108E1000F84C83B0207910F0010F04BF03B0BDE817 ++:108E2000F083606901230521C578E06890F85C2033 ++:108E3000503002F085FF002818BF022D0BD00A2DFC ++:108E400018BF0B2D07D0032D18BF062D03D0607857 ++:108E500040F008006070607800281CBF03B0BDE8D7 ++:108E6000F0836069C078162880F0F582DFE800F0B2 ++:108E70004C260BCEFEFEFDFCFBFEAAC3FAFEFEFE58 ++:108E8000FEFEF9F8F7F6E0680123194690F85D2038 ++:108E9000503002F055FF002840F0EC82606903F08A ++:108EA00031FBE16881F8F800022081F85D000020C4 ++:108EB00081F8820081F87E0000F0DCBAE0680123CE ++:108EC000002190F85C20503002F03AFF002870D06A ++:108ED0006078002840F0CE82606903F00EFBE16804 ++:108EE000A1F80C01B1F85020801A00B247F6FE72CA ++:108EF0008242A8BF00285DDD01F58771606903F03B ++:108F0000F3FA0620E16840E0E0680123002190F8D0 ++:108F10005C20503002F014FF002860D060780028F8 ++:108F200040F0A882606903F0BBFA90B3606903F077 ++:108F3000B4FAE168A1F80C01B1F85020801A00B22F ++:108F400047F6FE728242A8BF002833DD606903F055 ++:108F50009EFAE16881F80E01606903F093FAE16816 ++:108F6000A1F81001606903F078FAE168A1F8120134 ++:108F7000606903F079FAE168A1F81401606903F00F ++:108F80007AFAE168A1F81601082081F85C0000F087 ++:108F900071BAFFE7E0680123002190F85C205030AF ++:108FA00002F0CEFE28B16078002800F09E8100F02B ++:108FB00061BA14E0282081F86A00012081F8690074 ++:108FC00000F058BAE0680123002190F85C2050308E ++:108FD00002F0B6FE18B1607820B100F04BBA012063 ++:108FE00000F073B9E0680021A0F88010012180F83A ++:108FF00082100D2106E0E06890F85C100E2908BF91 ++:109000000F2156D180F85C1000F034BAE0680123DB ++:10901000002190F85C20503002F092FE20B9E06808 ++:1090200090F884000028DAD06078002840F022828E ++:10903000E06800210125A0F8801080F8825000F13E ++:10904000D801606903F077FAE06800F1B001606967 ++:1090500003F07CFAE06890F8360108E055E1F4E0AE ++:10906000CAE0DAE02DE0A0E0C7E11DE0F3E100286E ++:1090700018BFFFDFE0680188A0F8381100F59D7186 ++:10908000606903F046FAE06800F5A171606903F0D9 ++:1090900048FAE06880F83651112180F85C10E078D9 ++:1090A000F0F708FF00F0E6B9E06890F85C101429CA ++:1090B00002D0022000F009B9002180F882101821A6 ++:1090C000A0E7E0680123002190F85C20503002F016 ++:1090D00037FE50B9E0680123082190F85B2050303A ++:1090E00002F02EFE00283FF47AAF6078002840F0AE ++:1090F000C181E06890F8860010F0020F17D1606916 ++:1091000003F042FAE16881F88700606903F03EFAF3 ++:10911000E168A1F88800606903F03BFAE168A1F812 ++:109120008A0091F8860040F0020081F88600E0682D ++:1091300090F8861011F0010F15D190F85C200123F2 ++:109140000021503002F0FCFD002808BFFFDF0121A4 ++:10915000E068042280F85C1080F80B2180F882100F ++:109160000021A0F88010E06890F85B10012907D179 ++:10917000002180F85B1080F87E10E078F0F79AFE0E ++:10918000E06890F80A11042940F07481002580F805 ++:109190000A51E078F0F78EFEE06890F85B10002945 ++:1091A00008BF80F87E5000F065B9E0680123002117 ++:1091B00090F85C20503002F0C3FD00283FF40FAF60 ++:1091C0006078002840F056816946606903F0EFF945 ++:1091D000E0689DF8002090F88C10114001F02F01FC ++:1091E00080F88C100021A0F88010012180F88210F6 ++:1091F000092107E710010020E0680123092190F808 ++:109200005B20503002F09CFD00283FF4E8AE60780F ++:10921000002800F0098100F02DB9E0680123002149 ++:1092200090F85C20503002F08BFD00283FF4D7AE60 ++:109230006078002840F01E81E0680021A0F88010CE ++:10924000012180F882100B21DCE6E0680123002177 ++:1092500090F85C20503002F073FD00287DD06069EA ++:1092600003F0C2F980B3606903F0B6F9064660699D ++:1092700003F0B4F90546606903F0B2F90746606986 ++:1092800003F0B0F9E1688F86CE8608874D8791F8A4 ++:109290008F0000281CBF91F85B0019280BD068468E ++:1092A000FAF7D1FB38B10098C078142803D0E168F0 ++:1092B000002081F88F00E0680021A0F880100121D3 ++:1092C00080F882101A219DE601E06070D2E0E0682B ++:1092D0000123002190F85C20503002F031FD00287D ++:1092E0003FF47DAE607800287DD1606903F0AFF86F ++:1092F000E16881F8B900052081F85C000020A1F840 ++:109300008000012081F88200B4E0E06801230A2196 ++:1093100090F85B20503002F013FDF0B1606903F06B ++:1093200063F9E8B3606903F05BF90746606903F02D ++:1093300059F90546606903F04FF90646606903F084 ++:109340004DF9E168B1F82C80CB8DB1F830C04A8E70 ++:109350008F86CE860D87488700E04AE0B1F83C90C2 ++:10936000B14598BF4E468E85B1F84090B94598BF3B ++:109370004F46CF85B1F84290A94598BF4D464D86DE ++:10938000B1F83E90814598BF484608869F4238BF55 ++:109390001F46CF85954238BF15464D86464500E0AD ++:1093A0001CE008BF9F4203D1604508BF954215D01D ++:1093B0000A88A1F84A218A8DA1F84C210A8EA1F8C9 ++:1093C0004E21CA8D01F59170A1F85021498E018678 ++:1093D000012180F82610E078F0F76CFDE1680020AC ++:1093E00081F88F0000E045E081F87E0081F85B00A5 ++:1093F00040E0607840F0010067E7E0680123092160 ++:1094000090F85B20503002F09BFC0028E06814D0FC ++:1094100090F85B2001230921503002F091FC0028D4 ++:109420003FF4DDAD607828BBE168002081F8720070 ++:1094300081F87E0081F85B001CE090F85B10192930 ++:1094400018D1002180F88F1080F85B10A0F87A10F6 ++:1094500080F87E100EE0E0680123002190F85C2087 ++:10946000503002F06DFC00283FF4B9AD6078002860 ++:109470003FF43BAFE068D0E92612491C42F10002FC ++:10948000C0E9261203B0BDE8F08330B585B00446CC ++:109490006846FAF7B2FA002808BFFFDF009802F02A ++:1094A00032FF0321009802F045FF0098017821F077 ++:1094B00010010170214602F0A4FFA01E14286FD2F3 ++:1094C000DFE800F00A872288881A874687883530C7 ++:1094D000878787878888566FF848C06890F88D100E ++:1094E00021B10621009803F00BF873E090F8F71013 ++:1094F000009803F005F86DE0F048C06890F8B910E6 ++:10950000009803F04DF865E0EC4DE86800F1E001EB ++:10951000009803F01FF8E86800F1B401009803F028 ++:1095200023F857E00621009803F036F852E0E34DA7 ++:10953000A8680178009803F01DF8A8688188009851 ++:1095400003F01AF8A8684188009803F019F841E080 ++:10955000002002900390D94802A9C06890F88C00BE ++:1095600000F0F1008DF80800009803F057F831E0A2 ++:10957000D24DE868B0F84010009803F01DF8E86894 ++:10958000B0F84210009803F01BF8E868818F00984B ++:1095900003F01AF8E868C18F009803F019F819E091 ++:1095A00017E0C64DE868818F009803F00DF8E86871 ++:1095B000C18F009803F00CF8E868B0F840100098EC ++:1095C00002F0FAFFE868B0F84210009802F0F8FFE5 ++:1095D00000E0FFDFFAF724FA002808BFFFDF0C2CB9 ++:1095E00004BF05B030BD072C11D0122C18BF142CAD ++:1095F00014D0022C04BF05B030BD0021AF48C068B4 ++:10960000A0F88010012180F8821005B030BDAB4970 ++:109610000020C968A1F8800005B030BDA74800212E ++:10962000C068A0F87A10012180F87E1005B030BD26 ++:1096300070B50C4605464FF4B071204604F0CDFCE1 ++:109640002580002084F8220184F82E0184F8360158 ++:1096500084F8440170BDF5F744BC70B50C4605466E ++:109660000721F5F71EFB002808BF70BD90F82221E6 ++:109670000021CAB161700722227090F822218AB1BC ++:10968000018480F82211D0F82421C4F80220D0F8F7 ++:109690002821C4F80620B0F82C21628190F82221FC ++:1096A000002AEDD1A1702AE090F82E21F2B190F8B5 ++:1096B0002E210B2A0CD00C2A18BFFFDF1FD161709E ++:1096C0000C22227090F83021A2700288A2800AE059 ++:1096D00061700B22227090F83021A2700288A28063 ++:1096E00090F83421A27180F82E1108E090F85A21E8 ++:1096F0003AB161700E22227080F85A116580012003 ++:1097000070BD90F8362182B1617008222270028803 ++:109710006280D0F83A21D0F83E316260A360B0F8A0 ++:109720004221A28180F83611E9E790F8442142B144 ++:10973000617015222270B0F84621628080F84411D1 ++:10974000DDE790F8542192B161701622227090F8F2 ++:109750005421002AD3D000BF80F85411D0F85621EC ++:10976000C4F8022090F85421002AF5D1C7E790F8F8 ++:109770004821002A04BF002070BD617013222270AE ++:1097800090F84821002ABAD080F84811D0F84A2130 ++:10979000C4F80220D0F84E21C4F80620B0F85221B7 ++:1097A000628190F84821002AEED1A8E70020704796 ++:1097B000424A9060D170704710B5002180F85B106C ++:1097C00080F85C1080F85E1090F8CE00002814BF7E ++:1097D00002200320FDF7B4FC3848C078BDE81040F3 ++:1097E000F0F768BB2DE9F047344C07460D46E068BA ++:1097F0000088F5F7CBFB5FEA000808BFFFDF607861 ++:109800002843607020794FF0000510F0200FE068C9 ++:109810001CBFA0F8745080F8D45004D1B0F8741074 ++:10982000491CA0F87410E068012690F8601039B95E ++:1098300090F85C2001230621503002F081FA48B3F1 ++:10984000A08810F4006F07D0E06890F8601000293D ++:1098500018BFA0F86C501DD1E168B1F86C00401C35 ++:1098600080B2A1F86C00B1F86E3083422CBF1A1A96 ++:109870000022B4F806C00CF1050C624598BF81F8CF ++:109880007260984206D3A1F86C5081F85A61E07872 ++:10989000F0F710FB20794FF0020910F0600F14D0A0 ++:1098A000E06890F85E1011B1032909D00DE080F84E ++:1098B0005E600120FDF744FC07E00000100100207D ++:1098C00080F85E900120FDF73BFCE06890F85E10A8 ++:1098D000012905D1A18811F4807F18BF80F85E901E ++:1098E000002F7DD1A18811F4007F18BFA0F8E850A7 ++:1098F00004D1B0F8E810491CA0F8E81000F04CFBC7 ++:1099000000F0F7FC01F09FF80028E06818BFA0F80D ++:10991000C85004D1B0F8C810491CA0F8C81001F014 ++:1099200095F840B1E16891F8D40002289CBF401C32 ++:1099300081F8D40004D8E06890F8D400022806D951 ++:10994000E068A0F8C850A0F8CA5080F8D450E06889 ++:109950000123002190F85C20503002F0F1F920B989 ++:10996000E06890F85C0007285AD1E06801230021E4 ++:1099700090F85B20503002F0E3F9002850D0E06806 ++:109980000123002190F85D20503002F0D9F9002821 ++:1099900046D0E06890F85E10022904BF90F8D40029 ++:1099A00000283DD14046F4F782FDC0B3FAF76CF8C9 ++:1099B000A8B3E268B2F8C200012831D982F8CD60BC ++:1099C000B2F87600B2F87410831E9942A8BF012144 ++:1099D00002DA401A401E81B2B2F8C800E38800E003 ++:1099E00035E098422FBF0120181A401C80B28142F6 ++:1099F00088BF0146012908BF82F8CD5092F8F000D7 ++:109A000090B1B2F8CA00B2F8F22090422FBF012004 ++:109A1000101A401C80B2814288BF014604E0FFE773 ++:109A2000E068012180F8CD50D4F80CC0BCF850207B ++:109A3000501880B2ACF8C4009CF85E10002918BF22 ++:109A400001290ED002291CBF0329FFDF0CD0A088FA ++:109A5000C0F340200028E06818BFA0F8D6506DD1B0 ++:109A600065E0ACF8C000F2E79CF85D1003292CD04B ++:109A70009CF85C100829F4D0BCF87410BCF876008F ++:109A80008A1C4FF0000890420AD3401A801E1FFA29 ++:109A900080F8B8F1000F1CBFA8F101001FFA80F890 ++:109AA0009CF8720060B19CF85B20012309210CF145 ++:109AB000500002F045F9002808BF4FF000082FD0F1 ++:109AC000E06890F8601099B90AE0BCF874100329B6 ++:109AD000C7D3BCF876001044401CACF8C000B6E711 ++:109AE00090F85C2001230621503002F029F980B162 ++:109AF000E2680020B2F86E10B2F86C20931C994214 ++:109B000003D3881A801E18BF401E404538BF1FFA75 ++:109B100080F8B8F1000F1CBFA8F101001FFA80F80F ++:109B2000E068B0F8C4104144A0F8C0108FE7B0F866 ++:109B3000D610B0F8C6201144A0F8D610E06890F80E ++:109B4000F61039B990F85D2001231946503002F023 ++:109B5000F7F838B1E068B0F87810B0F8C6201144D2 ++:109B6000A0F87810E06890F87E3033B1B0F87A1041 ++:109B7000B0F8C6201144A0F87A1090F8822032B1D3 ++:109B8000B0F88010B0F8C6C06144A0F880104FF063 ++:109B90003D0C17B180F86AC010E02178022910D07E ++:109BA000012908BF90F8F81006D06178F1B111F0E2 ++:109BB000140F18BF1E210BD080F86A1080F869605E ++:109BC0004BE090F88D10002914BF06211621F3E711 ++:109BD00011F0080FDED111F0030F08BFFFDF2A21BB ++:109BE000E06880F86A1080F8696036E02BB1B0F860 ++:109BF0007A10B0F87C3099420FD22AB1B0F88010B8 ++:109C0000B0F87C20914208D2B0F87820B0F87610F5 ++:109C10008A4208D390F8F6202AB1222180F86A10EF ++:109C200080F8696019E090F85E204AB1B0F87420BD ++:109C30008A420FD3082180F86A1080F869600CE02E ++:109C4000B0F87410062905D33E2180F86A1080F818 ++:109C5000696002E090F8690090B1E06880F85B50BC ++:109C600080F85C5080F85E5090F8CE00002814BF59 ++:109C700002200320FDF764FAE078F0F71BF902E018 ++:109C80000020FDF75DFAE06880F8CE50BDE8F0876F ++:109C9000F7494A788B781A430DD150B1087910F002 ++:109CA000080F04D0C86890F85D00032803D0012095 ++:109CB0007047FDF7B1B9002070472DE9F041EC4C39 ++:109CC00005460E46A0882843A08015F0020F04D058 ++:109CD00015F0010F18BFFFDF266115F0010F4FF0DF ++:109CE00000084FF001071CD03046666102F0AFFB60 ++:109CF000062802D00B280BD013E0E06890F85C1027 ++:109D000014290ED10021C0E9241180F85F7008E009 ++:109D1000E06890F85C100E2904BF80F85F8080F83E ++:109D2000847015F0020F18D02069C078052802D081 ++:109D30000B280BD011E0E06890F85C1012290CD1D0 ++:109D40000021C0E9261180F8607006E0E06890F814 ++:109D50005C100D2908BF80F8608015F0800F1CBFD3 ++:109D60000820A070BDE8F0812DE9F047C04C82B01A ++:109D70000127216900250191A5806570A5702570D6 ++:109D8000E06067F30708064680F8CE700088F5F7B4 ++:109D9000FDF85FEA000908BFFFDFE0680088F9F717 ++:109DA00029FEE0680088F9F74BFEE068B0F8C200D1 ++:109DB000D0B101A8F9F721FEB0B1E06890F8F61033 ++:109DC00091B190F85D2001231946503001F0B8FFA1 ++:109DD00050B9E068A0F8785080F88D500220FFF765 ++:109DE00054FBE06880F8CD50D4F80CC09CF82201F8 ++:109DF00038B9BCF82000BCF80410884288BFE08065 ++:109E000002D8BCF80400E080BCF8C600401E1FFA6F ++:109E100080FABCF8C8005044ACF8C8009CF8CC00EC ++:109E200000281CBFACF8CA508CF8CC5004D1BCF848 ++:109E3000CA005044ACF8CA00BCF874005044ACF8F6 ++:109E400074009CF8600040B99CF85C200123062156 ++:109E50000CF1500001F074FF28B1E068B0F86C100C ++:109E60005144A0F86C10E068B0F8C21001299CBF02 ++:109E7000491CA0F8C210BAF1000F18BF80F8D450E6 ++:109E800090F8CD10A1B1B0F8C800E18888420FD297 ++:109E90004846F4F70CFB58B1E06890F8F01039B17F ++:109EA000B0F8CA10B0F8F200814228BF00F0D1FD2E ++:109EB000E06880F8CD5090F85C10062918BF07299B ++:109EC00017D1B0F85010B0F80C21891A09B2002946 ++:109ED0000FDB00F58771083004F097F90221E06884 ++:109EE00001F0FEFBE06880F80B5180F85C5080F8D0 ++:109EF0008E70E16801F15000B1F8C62001F0CDFD8F ++:109F0000E06890F8F010002918BFA0F8CA5059482E ++:109F10000090594B594A3146404600F062FBE068D8 ++:109F20000123052190F85C20503001F009FF002842 ++:109F300018BF00F052FBE06890F81811002904BF28 ++:109F400002B0BDE8F08790F81911002907BF90F81A ++:109F50008F10002902B0BDE8F08790F85C101A2934 ++:109F600004BF02B0BDE8F087B0F81A118187B0F8DD ++:109F70001C11C187B0F81E1129B1A0F84010B0F82B ++:109F80002011A0F8421080F88F7080F8185102B0AC ++:109F9000BDE8F08700F033BD2DE9F041344C4FF0BF ++:109FA00002074FF00005207910F0080F13D06078F9 ++:109FB00088B9E06890F85C10162905D180F88350C4 ++:109FC00080F8825080F85C5090F85D10032904BF3F ++:109FD000277080F85D50FEF719FFA1884FF0010649 ++:109FE00011F0040F14D0607890B9E06890F85C200C ++:109FF000062A08BF80F80B6103D0082A08BF80F842 ++:10A000000B7190F85D20022A04BF267080F85D5025 ++:10A0100011F0020F4FF0030700F00581607800286F ++:10A0200040F001812069C078801E142880F0FA80F9 ++:10A03000DFE800F00AF84B566C26F831F83E9B61D9 ++:10A04000F8F8F8F8C6F2D6ECE0680123194690F863 ++:10A050005D20503001F074FE002840F0E480E0689C ++:10A0600080F85D7080F87E5080F8825000F0DBB898 ++:10A0700010010020E5970100919C0100BB9C0100AC ++:10A08000E06890F85C00052818BFFFDFE06880F802 ++:10A090005C5000F0C3B8E06890F85C00092818BF75 ++:10A0A000FFDFE06880F8825080F85C5000F0BBB8B9 ++:10A0B000E06890F85C000D2818BFFFDFE0680E2113 ++:10A0C00080F8836080F85C10ADE0E06890F85C0098 ++:10A0D000112818BFFFDFE068122180F88360F1E7E4 ++:10A0E000E06890F85C00122818BFFFDF1420E168D8 ++:10A0F00081F85C0097E0E06890F85C00122818BFD7 ++:10A10000FFDF1620E16881F85C008CE0E06890F8E1 ++:10A110005C00182818BFFFDFE06880F8835080F8E3 ++:10A12000825090F82E01002818BFFFDFE06890F8F9 ++:10A13000841041B180F884500188A0F8321180F871 ++:10A1400030510C2107E00188A0F8321180F830511D ++:10A1500080F834610B2180F82E11E078EFF7AAFE29 ++:10A16000D4F80C0080F85C505DE0E06890F80A11CB ++:10A1700004290ED0E0680123082190F85C205030BB ++:10A1800001F0DEFD00281CBFE06880F882504AD054 ++:10A19000E8E790F85B2001230021503001F0D0FD6A ++:10A1A000002808BFFFDFE06890F8861011F0020F6A ++:10A1B0000EBF80F85B6080F87E5080F80A51D9E7C6 ++:10A1C000E0680123002190F85B20503001F0B8FDD9 ++:10A1D000002808BFFFDF0A20E16881F85B0022E069 ++:10A1E000E06890F88F00012818BFFFDFE0680123C6 ++:10A1F000002190F85B20503001F0A2FD002808BF3C ++:10A20000FFDF1920E16881F85B000CE0E06890F85E ++:10A210005C00002818BFFFDFD4F80C0080F88250E3 ++:10A2200001E0FFE7FFDF207910F0100F09D0607820 ++:10A2300038B9E06890F85C10062904BF072180F85F ++:10A240005C10A07810F0080F10D0E0680123052101 ++:10A2500090F85C20503001F073FD28B10820607048 ++:10A26000E06880F82E5101E000F0F7FBE06890F81C ++:10A270005C10082918BFBDE8F081B0F85010B0F8A4 ++:10A280000C21491C914206BF61780029BDE8F0818C ++:10A29000B0F812114288914209D1B0F81421838894 ++:10A2A0009A4204D1B0F81621C3889A4211D002888C ++:10A2B000A0F82621A0F82811B0F81411A0F82A114E ++:10A2C000B0F81611A0F82C1180F82261E078EFF7B1 ++:10A2D000F1FD0121E06801F003FA0420FCF730FFF2 ++:10A2E000E06880F80B5180F85C5080F85E70BDE843 ++:10A2F000F0812DE9F84F6846F9F77FFB002808BF89 ++:10A30000BDE8F88FAC4C6078002818BFBDE8F88F26 ++:10A31000E0680123194690F85D20503001F010FDEF ++:10A32000002818BFBDE8F88FE068002590F8F61007 ++:10A3300029B1A0F8785080F88D5002206DE090F897 ++:10A340005B2001230021503001F0FAFC88B1E06865 ++:10A350000123042190F85C20503001F0F1FC40B959 ++:10A36000E06890F8720020B11220FFF78EF8BDE887 ++:10A37000F88FE068012690F85C200D2A08BF0B20BA ++:10A380004BD00CDC012A79D0052A08BF072044D025 ++:10A39000092A08BF092040D00B2A70D007E0112AF3 ++:10A3A00027D0122A3DD0182A6CD01A2A69D001234E ++:10A3B0000421503001F0C4FC002818BFBDE8F88F1C ++:10A3C000E06890F80A11002970D090F85B20012312 ++:10A3D0000021503001F0B4FC002867D0E06890F80C ++:10A3E0000A11042904BF90F8860010F0030F7CD0F6 ++:10A3F000C5E0F7F7FFFE0C2838BFBDE8F88F08214D ++:10A40000E068E030F7F7F7FE28B1E0680421B430E7 ++:10A41000F7F7F1FE00B9FFDF0420FFF736F8BDE8DB ++:10A42000F88F90F8F910012912D0022918BFBDE861 ++:10A43000F88F90F8841000291ABF80F88D600220F0 ++:10A440000D20FFF722F8E06880F8F950BDE8F88F9A ++:10A4500090F82E11002918BFBDE8F88F00F1A00375 ++:10A4600000F1D8010022FA3001F0FFFB0520FFF7D0 ++:10A470000CF8E06880F8F950BDE8F88F09E016E0C4 ++:10A4800000E01BE00620FFF700F8E06880F882504B ++:10A49000F2E70C20FEF7F9FFE068A0F8805090F892 ++:10A4A000861041F0010180F88610E5E767E013208F ++:10A4B000FEF7EBFFE068A0F880504FE0C18E838F7D ++:10A4C000B0F82CA0B0F82E80B0F83090478E9942AA ++:10A4D00038BF0B468385828EB0F840108A4238BF61 ++:10A4E0001146C185B0F838C000E03AE0B0F842202B ++:10A4F000944538BF62464286B0F83AB0B0F83EC0E4 ++:10A50000E34538BFDC46A0F830C0414538BF41467E ++:10A51000C185BA4238BF3A464286534508BF4145D5 ++:10A5200003D1CC4508BFBA4214D00288A0F84A2112 ++:10A53000828DA0F84C21028EA0F84E21C28D00F52C ++:10A540009171A0F85021408E088681F82660E0784D ++:10A55000EFF7B0FC1520FEF798FFE06880F85C503C ++:10A560008AE70C20FEF791FFE068A0F87A5080F8A7 ++:10A570007E6090F8861041F0010180F886106846F0 ++:10A58000F9F73BFA00283FF477AFE0680123002198 ++:10A5900090F85B20503001F0D3FB00283FF46CAF03 ++:10A5A000E06890F88F1000291EBF90F85C001A2810 ++:10A5B00014207FF432AF5FE710010020FB480078E1 ++:10A5C000002818BF0C20704730B5F84C054620789D ++:10A5D000002818BFFFDF657230BDF4490120087202 ++:10A5E00070472DE9F047F14C8146DDF82080207856 ++:10A5F0001E4617460D4628B9002F1CBF002EB8F185 ++:10A60000000F00D1FFDFC4F81C80C4E90C95C4E939 ++:10A61000057600202072E0712071E0706071A071F9 ++:10A62000E34EA07060813078012705F1500828883A ++:10A63000F4F7ACFCA0622888F4F796FCE062F8F727 ++:10A640006BFEF8F79EFBF8F7BCFE05F11100F8F77A ++:10A650004CFE05F10D00F8F777FC307800280CBFB0 ++:10A6600003200120F8F755FE98F81800F8F774FC5D ++:10A67000F8F749FE30786FF00D01F8B16A8EE88D79 ++:10A6800001EBD20198F810308AB2824298BF88B2AA ++:10A690000BB1001D80B2F8F762FB30784FF001017A ++:10A6A000C8B10120F8F7CCFC7068D0F8D000F8F7FA ++:10A6B00041FE2770BDE8F047F8F736BE2A8EA88D18 ++:10A6C00001EBD20198F80F308AB2824298BF88B26B ++:10A6D000002BE0D0DDE70020F8F7B2FCE9E72DE938 ++:10A6E000F041B34C6FF00D072046012640684FF053 ++:10A6F0000008418E07EBD102C18D93B28B4298BF07 ++:10A7000091B2AA4DE86AF3F70EFF6862002811BF04 ++:10A7100085F801806E70A7486862207860680146FD ++:10A7200000F15006498E90F86020C08D07EBD101F2 ++:10A730008BB2834298BF88B2002A1CBF001D80B232 ++:10A74000F8F70DFB307C40B306F15001994891E8D1 ++:10A750000E1000F5027787E80E10316EC0F8211256 ++:10A76000716EC0F8251200F58170F8F7E0FD2078D1 ++:10A7700000280CBF0120002080F001018E480176E6 ++:10A78000D6E91212C0E90412A0F58372696AF8F7DB ++:10A790000EFA0120F8F71CFA04E0686AF8F7C7FD22 ++:10A7A000F8F73EFA01210020F8F783FE0320287015 ++:10A7B000BDE8F0812DE9F04F7D4E83B030464FF07B ++:10A7C000000B40684FF0010800F1500490F855105C ++:10A7D000A6F1100A4FF002096FF00D07A6F130053F ++:10A7E00071B3012969D002296BD0032918BFFFDF9B ++:10A7F00076D0286A0823017821F008010170A27937 ++:10A8000003EAC202114321F004010170E27904233A ++:10A8100003EA8202114321F01001017094F805B09F ++:10A82000A86AF3F752FE8246F9F72EF9BBF1020F40 ++:10A830005DD0BBF1010F5ED0BBF1030F5FD063E0D1 ++:10A84000018E07EBD102818D93B28B4298BF91B2FA ++:10A85000ADF80410A0F848105046F9F7F4F848B1E4 ++:10A86000296A85F802806A694FF480609047032066 ++:10A870006071BEE76A4601A9A86AF3F711FD286274 ++:10A8800010B194F8331029B15046F9F7B0F884F8B4 ++:10A890000580AEE79DF8001031B9A0F800B080F84F ++:10A8A00002B0012101F046FDBDF80400C1B2286AE2 ++:10A8B00001F0BEFE84F805909BE75046F9F797F843 ++:10A8C00097E7B0F84800ADF804006A4601A9A86A05 ++:10A8D000F3F7E6FC2862002808BFFFDF89E7FFE7FF ++:10A8E0005046F9F7B0F8002808BFFFDF81E730EAEB ++:10A8F0000A0009D106E030EA0A0005D102E0BAF107 ++:10A90000000F01D0012100E00021286A027842EA0C ++:10A9100001110170716891F85F20888D098E07EB35 ++:10A92000D1018BB2834298BF88B2002A1CBF001DA0 ++:10A9300080B2F8F714FAE07B00281CBF6079012888 ++:10A9400026D004F150011B4891E80E1000F5027763 ++:10A9500087E80E10216EC0F82112616EC0F8251232 ++:10A9600000F58170F8F7E3FC307800280CBF012176 ++:10A97000002111480176D4E91012C0E90412A0F5B3 ++:10A9800083712A6AF8F713F90020F8F721F904E037 ++:10A99000286AF8F7CCFCF8F743F9307870B1286AE8 ++:10A9A000007810F0100F0ED015E0000028010020F4 ++:10A9B00058010020280E00203010002001210846F8 ++:10A9C000F8F777FD0AE0FE48007810F0100F04BF9A ++:10A9D0002879002802D0A8780028EFD068790028CC ++:10A9E00004BF85F80580F8F7CAFC286A0188A981A8 ++:10A9F0008078A87385F8009003B0BDE8F08FF14827 ++:10AA000010B50078012818BFFFDFF8F785FCEE4885 ++:10AA10000178446811B9FFF7CDFE01E0FFF75FFE52 ++:10AA200094F82800012818BF10BDBDE81040F8F7C1 ++:10AA30001DBDE44810B50078032818BFFFDFBDE84E ++:10AA4000104000F09DB9DF4840797047DD4800793B ++:10AA50007047DC490120887170472DE9F041DA48E0 ++:10AA6000D84D012601784068002700F15004686A3B ++:10AA7000E96A90F8018002F0EDFE68B1012821D06A ++:10AA8000022834D003281CBFFFDFBDE8F081E86A4C ++:10AA9000BDE8F041F3F72EBF01224146E86AF3F723 ++:10AAA0009FFDD4E91210491C40F10000C4E91210C6 ++:10AAB000E079012814BFE671E771687ABDE8F041DA ++:10AAC000EFF7F8B900224146E86AF3F789FDD4E9C7 ++:10AAD0001201401C41F10001C4E91201E079012892 ++:10AAE00002D1E771BDE8F081E671BDE8F081E86A66 ++:10AAF000F3F700FFD4E91201401C41F10001C4E961 ++:10AB00001201E0790128EFD1EBE72DE9F041AE4FDA ++:10AB10004FF000083846A7F130044068012600F1E4 ++:10AB200050052078022818BFFFDFA87850B185F8BB ++:10AB30000280A67062694146042090473878002858 ++:10AB400018BF2E71206A0321007831EA000004BF8B ++:10AB5000E878002805D1EE70216AA67062690220AB ++:10AB600090470121002000F035F918B1BDE8F0410F ++:10AB700000F006B9BDE8F041B1E52DE9F05F924E75 ++:10AB800082463046A6F130054068317800F1500920 ++:10AB900028784FF000080127032818BFFFDF6889D5 ++:10ABA000BAF1000F40F40070688104BF40F040002B ++:10ABB000688100F0D580F8F749F888B999F8100055 ++:10ABC00070B1686A417859B1007899F80710C0F3FC ++:10ABD000C000884204D1EF70BDE8F05F00F0D0B84B ++:10ABE000686A0188A5F80F1080786874688940F059 ++:10ABF0002000688185F804803078706800F1500B7F ++:10AC0000044690F82800012816D1F8F725FC59468B ++:10AC1000204601F06AF878B13078002870680CBFDF ++:10AC2000FC3000F5AA70218841809BF80810017162 ++:10AC30000770687AEFF73EF9686A99F806100078AD ++:10AC4000C0F38000884234D03078706800F150043E ++:10AC500090F8550048B3022845D000BF84F805801D ++:10AC6000307838B12079414620B12171AF706A69DE ++:10AC700010209047E07890B184F80380F8F7F2FE56 ++:10AC8000002808BFFFDF0820AF706A6900219047E5 ++:10AC9000D4E91002411C42F10000C4E91010A0796F ++:10ACA00001280CBF84F80680A771688940F4807081 ++:10ACB0006881686A99F807300178C1F3C0029A4246 ++:10ACC0004ED13278726801F0030102F1500401297B ++:10ACD00018BF022931D003291CBFE87940F00400D5 ++:10ACE00012D0E8713CE0A86AF3F714FB002808BF13 ++:10ACF000FFDFD4E91010491C40F10000C4E9101036 ++:10AD0000687AEFF7D7F8A9E701F035FB88B1A770AB ++:10AD10006989384641F400616981696AAF706A697E ++:10AD20009047E079012802D184F8078018E0E771A4 ++:10AD300016E0E87940F01000D3E74078C8B169899F ++:10AD400041F400616981697839B9FB28F1D8287A22 ++:10AD500020B180206A690021904701E0FFF77DFE65 ++:10AD60005146012000F036F838B1BDE8F05F00F040 ++:10AD700007B8E0790128DAD1D6E7BDE8F05F19E538 ++:10AD800070B5114900254C68F8F738FBF8F72AFB35 ++:10AD9000F8F74CFAF8F7AFFAF7F742FFF8F71EFBAF ++:10ADA000F8F7C2FA94F82800012808BFF8F754FB16 ++:10ADB000044C0021626960899047E179E07805E000 ++:10ADC000370100202801002058010020E269904747 ++:10ADD000257070BD70B51F4C0546002908BF012DB8 ++:10ADE00005D12079401CC0B22071012830D8A1695A ++:10ADF0002846884700282BD0A179174839B1012D62 ++:10AE000001BF41780029017811F0100F20D0E179BD ++:10AE1000F1B912490978002918BF002102D029434D ++:10AE200004D013E0012D18BF0121F8D10C49097895 ++:10AE300011F0100F04BF007810F0100F08D0A078A8 ++:10AE400030B9607810B111F0100F01D0002070BD42 ++:10AE5000012070BD2801002037010020580100208A ++:10AE60003401002010B540F2BB11F74803F093F80D ++:10AE7000F648002141704FF46171418010BD2DE909 ++:10AE8000F0410F46064600F0E8FAEF4C102817D0C4 ++:10AE900004EBC00191F8421111F0010F1CBF012019 ++:10AEA000BDE8F081617808291FD2617804EBC00009 ++:10AEB000491C6170012180F842110846BDE8F0810B ++:10AEC0006178082911D22578681C207004EBC50828 ++:10AED0003868C8F83C01B888A8F84001102D28BF90 ++:10AEE000FFDF88F83B612846DFE70020BDE8F081FE ++:10AEF000D5480178491E4BB2002BB8BF704770B4DB ++:10AF00005FF0000500EBC30191F8421111F0010F51 ++:10AF10003BD04278D9B2521E427000EBC10282F897 ++:10AF2000425190F802C00022BCF1000F0BD98418E6 ++:10AF300094F803618E4202D1102A26D103E0521CFC ++:10AF4000D2B29445F3D80278521ED2B202708A422D ++:10AF50001BD000EBC20200EBC10CD2F83B41CCF895 ++:10AF60003B41D2F83F21CCF83F21847890F800C0D3 ++:10AF70000022002C09D9861896F8036166450AD18B ++:10AF8000102A1CBF024482F80311591E4BB2002B39 ++:10AF9000B8DA70BC7047521CD2B29442EBD8F4E7D6 ++:10AFA0002DE9F0471E4617468846814600F055FABF ++:10AFB000A54C0546102831D0A078002100280ED9D4 ++:10AFC000621892F80331AB4205D110291CBF122040 ++:10AFD000BDE8F08703E0491CC9B28842F0D80828D0 ++:10AFE00032D2102D1DD000BF94F80280102208F13B ++:10AFF0000100A07004EB081909F10300394600F0C4 ++:10B0000023FE09F183001022314600F01DFE04EBFF ++:10B01000080080F803510020BDE8F087A0780828D8 ++:10B0200012D22578681C207004EBC50AD8F80000FD ++:10B03000CAF83C01B8F80400AAF84001102D28BF56 ++:10B04000FFDF8AF83B91CFE70720BDE8F08770B4B7 ++:10B050007D488178491E4BB2002BBCBF70BC704745 ++:10B0600003F0FF0C8178491ECAB2827050FA83F156 ++:10B0700091F8031194453AD000EB021400EB0C1543 ++:10B08000D4F80360C5F80360D4F80760C5F807601A ++:10B09000D4F80B60C5F80B60D4F80F60C5F80F60EA ++:10B0A000D4F88360C5F88360D4F88760C5F88760FA ++:10B0B000D4F88B60C5F88B60D4F88F40C5F88F400A ++:10B0C000841800EB0C0502EB420294F803410CEBF0 ++:10B0D0004C0C00EB420285F8034100EB4C0CD2F81B ++:10B0E0000B41CCF80B41B2F80F21ACF80F2100EB6B ++:10B0F000C10292F8422112F0010F35D190F802C03E ++:10B1000000220C46BCF1000F0BD9851895F80351AD ++:10B110008D4202D1102A27D103E0521CD2B29445AD ++:10B12000F3D80178491EC9B20170A1421CD000EBCE ++:10B13000C10100EBC402D1F83BC1C2F83BC1D1F858 ++:10B140003F11C2F83F1190F802C002780021BCF113 ++:10B15000000F09D9451895F8035195420BD11029D4 ++:10B160001CBF014481F80341591E4BB2002BBFF6AE ++:10B1700077AF70BC7047491CC9B28C45EAD8F3E779 ++:10B1800032494870704731484078704738B14AF2C8 ++:10B19000B811884203D82D4948800120704700200B ++:10B1A00070472A484088704710B500F056F91028BB ++:10B1B00014D0254A0146002092F802C0BCF1000FCD ++:10B1C0000CD9131893F803318B4203D1102818BF00 ++:10B1D00010BD03E0401CC0B28445F2D8082010BD69 ++:10B1E00019498A78824286BF01EB00108330002023 ++:10B1F000704715498A78824286BF01EB0010C01C57 ++:10B2000000207047104B93F802C084459CBF00207B ++:10B210007047184490F8030103EBC00090F83B31ED ++:10B220000B70D0F83C111160B0F840019080012003 ++:10B230007047054A114491F8032104490A700268D5 ++:10B240004A60808808817047581000206001002003 ++:10B2500010B5144600F001F9102809D0F9490A7810 ++:10B26000824205D1486820600889A080012010BD75 ++:10B27000002010BD10B5F7F749FC002804BFFF20DF ++:10B2800010BDBDE81040F7F767BCEF498A788242ED ++:10B290009CBF00207047084490F8030101EBC000F8 ++:10B2A00090F8420100F00100704770B5E64E0024AE ++:10B2B00025463078002814D906EBC50090F84211D5 ++:10B2C00011F0010F08D090F83B2100F59E71204647 ++:10B2D000631CDCB2F7F7D1FD681CC5B23078A84218 ++:10B2E000EAD87078A04218BFFFDF70BD70B5D64CA9 ++:10B2F00000263546A078002812D96019731C90F8F2 ++:10B30000030104EBC00000F59E7190F83B2130462C ++:10B31000DEB2F7F7B2FD681CC5B2A078A842ECD83F ++:10B32000C0B2B04218BFFFDF70BD10B5F7F704FE22 ++:10B3300058B30024F7F704FEC34A00211378002B0A ++:10B3400023D900BF02EBC10C9CF842C11CF0010FD5 ++:10B3500017D084421CBF04F1010C0CF0FF0410D183 ++:10B3600093780020002B0AD902EB000C9CF803C153 ++:10B370008C4508BF10BD401CC0B28342F4D81020D9 ++:10B3800010BD491CC9B28B42DCD8082010BD10B5D5 ++:10B39000F7F7D2FD002804BF082010BDBDE810401B ++:10B3A000F7F7CEBDA74910B5497841B1A64B9978BA ++:10B3B00029B1C21CD81CF7F746FB012010BD0020A4 ++:10B3C00010BDA14A01EB410102EB41010268C1F845 ++:10B3D0000B218088A1F80F01704770B59A4D0024A9 ++:10B3E000A878002898BF70BDC0B2A04212D905EB62 ++:10B3F000041010F183060DD01021304600F000FC3F ++:10B4000040B904EB440005EB400000F20B1130465C ++:10B41000F8F7B7FB601CC4B2A878A042E4D870BDAE ++:10B4200001461022894800F00FBC8848704770B56B ++:10B43000854D0446A878A04206D905EB04101021DA ++:10B44000833000F0DDFB08B1002070BD04EB440048 ++:10B4500005EB400000F20B1070BD2DE9F0417A4D74 ++:10B460000646002428780F46002811D905EBC400B1 ++:10B4700090F83B11B14206D10622394600F59E7084 ++:10B4800002F0E6FC38B1601CC4B22878A042EDD8C6 ++:10B490001020BDE8F0812046BDE8F0816A4910B473 ++:10B4A0004A7801EBC003521E4A70002283F8422101 ++:10B4B00091F802C0BCF1000F0DD98B1893F803412D ++:10B4C000844204D1102A1CBF10BC704703E0521CF8 ++:10B4D000D2B29445F1D80A78521ED2B20A70824292 ++:10B4E00004BF10BC704701EBC00301EBC202D2F8ED ++:10B4F0003BC1C3F83BC1D2F83F21C3F83F218C7850 ++:10B5000091F800C00022002C9CBF10BC70478B1823 ++:10B5100093F80331634506D1102A1CBF114481F80A ++:10B52000030110BC7047521CD2B29442EFD810BC39 ++:10B53000704770B444490D188A78521ED3B28B708C ++:10B5400095F80321984239D001EB001C01EB03145C ++:10B5500000EB4000D4F80360CCF80360D4F8076037 ++:10B56000CCF80760D4F80B60CCF80B60D4F80F600F ++:10B57000CCF80F60D4F88360CCF88360D4F887608F ++:10B58000CCF88760D4F88B60CCF88B60D4F88F400F ++:10B59000CCF88F4001EB030C03EB43039CF803C191 ++:10B5A00001EB430385F803C101EB4000D3F80BC165 ++:10B5B000C0F80BC1B3F80F31A0F80F3101EBC20096 ++:10B5C00090F8420110F0010F1CBF70BC70470020C2 ++:10B5D0008C78002C0DD90B1893F803C1944504D135 ++:10B5E00010281CBF70BC704703E0401CC0B28442EE ++:10B5F000F1D80878401EC0B20870904204BF70BCF9 ++:10B60000704701EBC20301EBC000D0F83BC1C3F8A7 ++:10B610003BC1D0F83F01C3F83F018C780B78002084 ++:10B62000002C9CBF70BC704701EB000C9CF803C160 ++:10B630009C450DD110281CBF084480F8032170BC24 ++:10B6400070470000600100205810002013120020F5 ++:10B65000401CC0B28442E7D8F1E7000010B50A7B75 ++:10B6600002F01F020A73002282758B181B7A03F006 ++:10B67000010C5B0803F00104A4445B0803F001041F ++:10B68000A4445B0803F00104A4445B0803F0010434 ++:10B6900064444FEA530C0CF0010323444FEA5C0C62 ++:10B6A0000CF00104234403EB5C0300EB020C521C7E ++:10B6B0008CF8113090F816C0D2B263448375052A15 ++:10B6C000D3D3D8B2252888BFFFDF10BD00238383E2 ++:10B6D000028401EBC202521EB2FBF1F1C18370473A ++:10B6E0000A4630B40021032A0DD04FF4FA4C002A48 ++:10B6F0007ED0012A7DD0022A1CBF30BC7047014693 ++:10B7000030BC5030AAE7A0F8501080F8561080F8EE ++:10B71000571080F85B1080F85C1080F85D1080F89E ++:10B720005E1080F8521080F8531080F8541080F8A2 ++:10B73000551080F86910A0F86C1080F87210A0F80D ++:10B740007410A0F87A1080F87E10A0F8801080F8AD ++:10B75000821080F8671080F8681080F85F1080F819 ++:10B76000601080F8831080F8841080F88610F12231 ++:10B7700080F88C20A0F8781080F88E10A0F8C01007 ++:10B78000A0F8C210A0F8C410A0F8C610A0F8C81005 ++:10B79000A0F8CA1080F8CD10A0F8D61080F8D41008 ++:10B7A000A0F8E810A0F8EA1080F8281001844FF4FF ++:10B7B000486242801B228286C2864FF4A47343876C ++:10B7C00003878285C28543860386A0F84020A0F8BF ++:10B7D00042308287C387A0F84420A0F84620A0F812 ++:10B7E000482080F88F1080F8181180F8F01001E0E0 ++:10B7F00006E043E080F8F61080F8F91030BC70479E ++:10B80000A0F8D61080F8CE104288FB4B1344B3FB4F ++:10B81000F2F3A0F86E304BF68033A0F87030C48895 ++:10B82000A0F87410B0F8781000F15003514391FB68 ++:10B83000F2F1A0F87810E100B1FBF2F1491C89B2F5 ++:10B8400001FB02F4A0F87610B4F5C84FC4BF491E3E ++:10B85000D984BCFBF2F1491C998502F5802101F5E0 ++:10B86000EE31A1F1010CBCFBF2F1D983B3F81CC09D ++:10B870000CFB02F1B1FBF2F1998340E7A0F8D6107E ++:10B8800000F150024488B0F81231B0F816019184EA ++:10B89000118DC0006143B0FBF3F091FBF3F1401C4C ++:10B8A000118580B200FB03F1D084B1F5C84FC4BF4D ++:10B8B000401ED084BCFBF3F0401C9085108C03EB41 ++:10B8C000C000401EB0FBF3F0D083908B6043B0FB10 ++:10B8D000F3F0908330BC70470A4630B40021032A4D ++:10B8E0000DD04FF4FA4C002A71D0012A6ED0022AF2 ++:10B8F0001CBF30BC7047014630BC5030AEE6A0F8EB ++:10B90000501080F8561080F8571080F85B1080F8BF ++:10B910005C1080F85D1080F85E1080F8521080F89E ++:10B92000531080F8541080F8551080F86910A0F872 ++:10B930006C1080F87210A0F87410A0F87A1080F8DB ++:10B940007E10A0F8801080F8821080F8671080F8D0 ++:10B95000681080F85F1080F8601080F8831080F81D ++:10B96000841080F88610F12280F88C20A0F87810DE ++:10B9700080F88E10A0F8C81080F8CA1080F8C010A7 ++:10B98000C0F8C41080F828101B228286C2864FF4AB ++:10B99000A473438703878285C28543860386A0F804 ++:10B9A0004020A0F842308287C387A0F84420A0F846 ++:10B9B0004620A0F8482080F88F1080F8F01080F81A ++:10B9C000DC1080F8EC1030BC704700E039E04288B1 ++:10B9D000894B1344B3FBF2F3A0F86E304BF680337F ++:10B9E000A0F87030C488A0F87410B0F8781000F196 ++:10B9F0005003514391FBF2F1A0F87810E100B1FB44 ++:10BA0000F2F1491C89B201FB02F4A0F87610B4F5FA ++:10BA1000C84FC4BF491ED984BCFBF2F1491C9985AB ++:10BA200002F5802101F5EE31A1F1010CBCFBF2F130 ++:10BA3000D983B3F81CC00CFB02F1B1FBF2F199837E ++:10BA400059E7D0F8E44000F1500243886089E48966 ++:10BA50009184118D594391FBF0F11185E100B1FB07 ++:10BA6000F0F1491C89B201FB00F4D184B4F5C84F50 ++:10BA7000C4BF491ED184BCFBF0F1491C9185118CD7 ++:10BA800000EBC101491EB1FBF0F1D183918B594309 ++:10BA9000B1FBF0F0908330BC7047837D0BB1252B58 ++:10BAA00001D912207047002A04BF0020704770B4EB ++:10BAB00090F817C00C7E514D04FB02C22C464FF08B ++:10BAC000000CE2FB054C4FEA1C1C6FF024040CFB3D ++:10BAD0000422D2B201EBD20CC27502F007059CF829 ++:10BAE00008C0012404FA05F51CEA050F18BF027608 ++:10BAF0002CD1B2FBF3FC03FB1C22521CD2B24FF040 ++:10BB0000000C00BF00EB0C035B7C93423CBFD21ADD ++:10BB1000D2B20ED301EB0C0500232D7A04FA03F602 ++:10BB200035421CBF521ED2B26AB15B1CDBB2082B7D ++:10BB3000F4D30CF1010303F0FF0CBCF1050FE1D3CA ++:10BB400070BC1F20704703EBCC01017670BC002055 ++:10BB5000704730B50D460446072988BFFFDFE078FF ++:10BB600005F0070100F05000084340F08800E07045 ++:10BB7000A07800F0A70040F01800A070607800F0F6 ++:10BB80005E0040F020006070207800F0BC0040F0C3 ++:10BB90004000207030BD017931F01F0113BF00203B ++:10BBA00000221146704710B4435C491C03F0010C9D ++:10BBB0005B0803F00104A4445B0803F00104A444FF ++:10BBC0005B0803F00104A4445B0803F00104A444EF ++:10BBD0005B0803F001045B08A44403F00104A444DF ++:10BBE0000CEB53031A44D2B20529DDDB012A8CBFCA ++:10BBF0000120002010BC7047FFDB050053E4B36E4A ++:10BC000030B40022A1F1010CBCF1000F12DD431E83 ++:10BC100011F0010F08BF13F8012F5C785FEA6C0C7C ++:10BC200008D000BF13F8025F22435C782A43BCF1BE ++:10BC3000010CF7D1491E5CBF405C0243002A0CBFD7 ++:10BC40000120002030BC7047130008BF704710B4BB ++:10BC500001EB030CD41A1CF801CC5B1E00F804C0E5 ++:10BC600013F0FF03F4D110BC7047F0B58DB0164649 ++:10BC700010251C466A46AC4600EB0C03A5EB0C07EE ++:10BC800013F8013CD355ACF1010313F0FF0CF3D1D1 ++:10BC900015461032102084460B18ACEB000713F841 ++:10BCA000013C401ED35510F0FF00F5D1284601F0AD ++:10BCB00081F986B1102005F1200201461318A1EB8D ++:10BCC000000C13F8013C401E04F80C3010F0FF008B ++:10BCD000F4D10DB0F0BD08982060099860600A9812 ++:10BCE000A0600B98E0600DB0F0BD38B505460C467D ++:10BCF0006846F7F7C6FB002808BF38BD9DF900204D ++:10BD0000227294F909100020511A48BF494295F84F ++:10BD100029308B42C8BF38BDFF2B08BF38BDA17A80 ++:10BD2000491CC9B2A17295F82A30994203D8617AA8 ++:10BD30007F2918BF38BD62720020A072012038BD73 ++:10BD40000B294AD2DFE801F006090E13161B323C1C ++:10BD50003F474200002A42D03FE0022A18BF032A90 ++:10BD60003DD03AE0072A18BF062A38D035E0082A25 ++:10BD700035D032E0A2F10C000C2830D92DE023B1EF ++:10BD8000A2F10D000B282AD927E00F2A18BF0E2A8E ++:10BD900025D090F8340020B10F2A1ED3172A1ED9BF ++:10BDA0001BE0132A19D3172A19D916E0A2F10C01A6 ++:10BDB000032914D990F8340078B1182A0FD90CE06F ++:10BDC000092A0CD009E0012A09D006E0192A18BF77 ++:10BDD0001A2A04D001E00A2A01D00020704701206D ++:10BDE00070472DE9F04187680D4604462046F4F778 ++:10BDF00085FE90B1CDB13846A168F5F71EFFA0B120 ++:10BE0000401EB0FBF5F0461C06FB05F13846F4F782 ++:10BE100004FEA0603046BDE8F081F4F7E5FD40F295 ++:10BE20006171F4F7FAFDA060E0E70020BDE8F08161 ++:10BE3000904228BF704770B50446101B642838BF75 ++:10BE4000642025188D4205D8F5F722FF00281CBF75 ++:10BE5000284670BD204670BD8A8D0B8ED200703290 ++:10BE600092B2934238BF1A46CB8D498EDB007033B5 ++:10BE70009BB2994238BF0B46012100280CBF01201C ++:10BE8000002003FB01210023702212FB03119831D3 ++:10BE9000002818BF04200844704710B4B0F844309C ++:10BEA000FB2B28BFFB23DB007033B0F846009BB2AE ++:10BEB000FB2828BFFB20C00070301FFA80FC914295 ++:10BEC00034BF012000200844C4B28A4234BF01209C ++:10BED00000201044C1B28C4234BF0A4622460020E2 ++:10BEE000002A04BF10BC704703FB04F00CFB0100E8 ++:10BEF00021447023C1EB420113FB01004D2112FBD1 ++:10BF000001F100EB810010BC98387047828DD2009F ++:10BF1000703293B2028E9A4238BF1346C28DB0F887 ++:10BF200032C0D200703292B2944538BF62464FF0B0 ++:10BF3000010C02FB0C324FF0000C702313FB0C229F ++:10BF400002F19C03428840F2712C02FB0CF2DFF8F4 ++:10BF5000F8C099420CEB420234BF9C468C46944593 ++:10BF600028BF114602D2994238BF19464162704734 ++:10BF700010B4B0F84430FB2B28BFFB23DB00703338 ++:10BF8000B0F846009BB2FB2828BFFB20C0007030F1 ++:10BF90001FFA80FC914234BF012000200844C4B243 ++:10BFA0008A4234BF012000201044C1B28C4234BF09 ++:10BFB0000A4622460020002A04BF10BC704703FB3B ++:10BFC00004F00CFB010021447023C1EB420113FB80 ++:10BFD00001004D2112FB01F100EB810010BC9C38E7 ++:10BFE000704710B4838DDB0070339CB2038EA34284 ++:10BFF00038BF1C46C38DDB0070331FFA83FC438EB1 ++:10C00000634538BF9C4601230CFB034300244FF0DB ++:10C01000700C1CFB0433B0F802C040F271240CFB1E ++:10C0200004FCC2EB4C029833A2F22132994234BF95 ++:10C030009C468C46944528BF114602D2994238BF8F ++:10C040001946416210BC7047F1FCFFFF282101F046 ++:10C05000A2BF30B50546007801F00F0220F00F00B6 ++:10C060001043287007290BD2DFE801F0040604060C ++:10C0700004080400062405E00C2403E0222401E067 ++:10C080000024FFDF687820F03F002043687030BD57 ++:10C09000007800F00F0070470A68C0F80320898814 ++:10C0A000A0F807107047D0F803200A60B0F8070026 ++:10C0B000888070470A68C0F809208988A0F80D10A8 ++:10C0C0007047D0F809200A60B0F80D0088807047EA ++:10C0D0000278402322F0400203EA811111430170EB ++:10C0E00070470078C0F3801070470278802322F0F8 ++:10C0F000800203EAC1111143017070470078C00942 ++:10C100007047D0F80320C1F80920B0F80720A1F843 ++:10C110000D200A7822F080020A700078800942EA35 ++:10C12000C0100870704770B515460E4604461F2AA9 ++:10C1300088BFFFDF2A46314604F1090001F0B4FE52 ++:10C140006078A91D20F03F0001F03F0108436070B6 ++:10C1500070BD70B5054640780E4600F03F04062CD1 ++:10C1600038BFFFDFA01FC4B21F2C88BF1F24224688 ++:10C1700005F10901304601F097FE204670BD70B50B ++:10C1800015460E4604461F2A88BFFFDF2A46314661 ++:10C1900004F1090001F088FE6078A91D20F03F003D ++:10C1A00001F03F010843607070BD70B505464078EE ++:10C1B0000E4600F03F04062C38BFFFDFA01FC4B2BC ++:10C1C0001F2C88BFFFDF224605F10901304601F030 ++:10C1D0006BFE204670BD0968C0F80F1070470A88D2 ++:10C1E000A0F813208978417570474176090A817655 ++:10C1F0007047C176090A017770474177090A81774C ++:10C200007047C175090A017670478175704790F8CB ++:10C21000242001F01F0122F01F02114380F8241096 ++:10C22000704790F82420E02322F0E00203EA411155 ++:10C23000114380F8241070471F3001F0E6BF4178A9 ++:10C24000007801F03F0110F00F0006D0012808D05F ++:10C25000022809D006280BD00FE0881F1F280AD912 ++:10C260000BE00C2909D106E0881F1F2803D904E040 ++:10C27000881F1F2801D8012070470020704741788F ++:10C28000007801F03F0100F00F00042805D10629D5 ++:10C2900003D325299CBF012070470020704710B4AC ++:10C2A000017801F00F01032922D0052925D1447816 ++:10C2B000B0F81910B0F81BC0B0F81730827D04F048 ++:10C2C0003F04222C19D1062917D3B1F5486F98BF26 ++:10C2D000BCF5FA7F11D282B1082A98BF8A420CD2EB ++:10C2E0008B429CBFB0F81D00B0F5486F05D807E041 ++:10C2F000407800F03F000C2802D010BC00207047AE ++:10C3000010BC01207047222101F045BE00B5027823 ++:10C3100001F0030322F003021A430270002242706C ++:10C32000012914BF022900BD032912BFFFDF01212B ++:10C33000417000BD01F0030300B5027822F0030252 ++:10C340001A43027000224270012914BF022900BD65 ++:10C35000032912BFFFDF0121417000BD007800F00A ++:10C36000030070470278102322F0100203EA011143 ++:10C370001143017070474178C07814283BD2DFE840 ++:10C3800000F00A0D101316191C1F2225282B2E3120 ++:10C390003A3A3A3A34370C292FD030E008292CD0D9 ++:10C3A0002DE0022929D02AE0172926D027E00D29DF ++:10C3B00023D024E0012920D021E001291DD01EE056 ++:10C3C00002291AD01BE0092917D018E0092914D036 ++:10C3D00015E0012911D012E001290ED00FE0062945 ++:10C3E0000BD00CE0022908D009E0012905D006E0B5 ++:10C3F000012902D003E0FB2901D801207047002069 ++:10C40000704730B50546C17016291CD2DFE801F02F ++:10C410000B0D0F111315150F17171515190F1B1BE2 ++:10C420001B1B151517170C240FE008240DE0022420 ++:10C430000BE0172409E00D2407E0012405E009249E ++:10C4400003E0062401E00024FFDF6C7030BDC078FB ++:10C450007047C171090A01727047B0F80700704750 ++:10C460004172090A81727047B0F809007047C172C1 ++:10C47000090A01737047B0F80B0070474171090A4F ++:10C4800081717047B0F805007047017170470079FD ++:10C4900070474173090A81737047B0F80D00704707 ++:10C4A00030B4B0F80720664DB0F809C0B0F80530D8 ++:10C4B0000179941F2D1998BFBCF5FA7F0ED269B18E ++:10C4C000082998BF914209D293429FBFB0F80B0050 ++:10C4D000B0F5486F012030BC98BF7047002030BCD9 ++:10C4E0007047001D01F091BE021D0846114601F083 ++:10C4F0008CBE4172090A81727047B0F8090070471A ++:10C5000001717047007970470A684260496881602C ++:10C51000704742680A608068486070470988818176 ++:10C5200070478089088070470A68C0F80E20496803 ++:10C53000C0F812107047D0F80E200A60D0F8120030 ++:10C54000486070470968C0F816107047D0F81600A8 ++:10C55000086070470A6842604968816070474268B5 ++:10C560000A608068486070470968C1607047C068A9 ++:10C5700008607047017170474171090A8171704705 ++:10C58000C171090A0172704700797047B0F805005F ++:10C590007047B0F807007047017170470079704725 ++:10C5A000017170470A68426049688160704742685B ++:10C5B0000A608068486070470171090A41717047DC ++:10C5C0008171090AC17170470172090A417270478D ++:10C5D0008172090AC172704780887047C0887047AD ++:10C5E000008970474089704701891B2914D3FB29B2 ++:10C5F00012D84189B1F5A47F21BF40F648028A4292 ++:10C6000081881B2908D3FB2906D8C088B0F5A47FF0 ++:10C6100022BF824201207047002070470A684260B2 ++:10C6200049688160704742680A6080684860704766 ++:10C6300030B50C460546FB2988BFFFDF6C7030BD66 ++:10C6400086F3FFFF70B50446C2F11005281901F00A ++:10C650002BFC15F0FF0108D0491EC9B280206054A0 ++:10C660002046BDE8704001F096BC70BD30B505E0D5 ++:10C670005B1EDBB2CC5CD55C6C40C454002BF7D1A4 ++:10C6800030BD10B5002409E00B78521E44EA430384 ++:10C6900000F8013B11F8013BD2B2DC09002AF3D1CA ++:10C6A00010BD2DE9F0410C4601200978FF4E92B0F3 ++:10C6B000154602274FF006084FF0040C71B101290E ++:10C6C0001ED0022945D0032905D12978042902D199 ++:10C6D00005201070002012B0BDE8F081606850B1F4 ++:10C6E000CDE90106012020708DF80080606A049079 ++:10C6F0001146684663E0277085F800C0566026E062 ++:10C7000029780429E7D1696810222069FFF7B9FF69 ++:10C710006868C07B000606D5E44A20691023103201 ++:10C720000146FFF7A3FFD4E904101022FFF7A9FF89 ++:10C730002069C07B000606D5DC4A606910231032F0 ++:10C740000146FFF793FF277085F800C06E60032055 ++:10C75000C1E729780429BED1A08910280CD9A0F1FD ++:10C76000100080B2A081A1684FF010030144684618 ++:10C770006A68FFF77BFF18E004D14FF010032269CD ++:10C78000A16807E0C2B20DA8A168FFF75BFF62696C ++:10C7900010230DA909A8FFF769FF102309A968460E ++:10C7A0006A68FFF763FF0320207060680590CDF88A ++:10C7B00018D08DF81080606A0890294604A8F3F715 ++:10C7C000DDFD88E72DE9F04107460D4601200B7895 ++:10C7D00006213BB1012B04D11378052B01D1117037 ++:10C7E000002079E76C69012620226170E8686060AA ++:10C7F000686A6062A168287C0870A681A068A96840 ++:10C80000401C01F051FBA08920222030A081A068AB ++:10C810006968213001F048FBA08921462030A081C1 ++:10C820002E703846BDE8F041F3F7BFBD2DE9F05F4B ++:10C830000D46834601200978174606464FF0060844 ++:10C84000D1B1DFF868A24FF00009AAF1080A012966 ++:10C8500023D002297ED003290CD13978052909D1AA ++:10C8600079681022E86901F01FFB0720387018353D ++:10C8700000207D60BDE8F09F2C6A8C48202284F85F ++:10C880000180203060602020A081686A6062696851 ++:10C89000A06801F009FB2E70D4E039780529E9D1B0 ++:10C8A0002C6A84F80180686A606251681022E86925 ++:10C8B00001F0FAFAE8696060A0684F4680F80090DD ++:10C8C000A681A0684670A089401C80B2A081A168A2 ++:10C8D0000844696951F8012F026089888180A08924 ++:10C8E000801D80B2A0816969A2680978C1F3400106 ++:10C8F0001154A089401C80B2A081A1680844296914 ++:10C9000051F8012F026089888180A089801D80B242 ++:10C91000A0812969A2680978C1F340011154A08956 ++:10C920001022401C80B2A081A1680844E96801F08F ++:10C93000BBFAA0891022103080B2A081A1680844FF ++:10C94000A96801F0B1FAA089103080B2A081A16875 ++:10C95000014400E00DE0DAF804000860A089001D41 ++:10C9600080B2A081A1680F54A089401CA081022040 ++:10C9700067E03978052992D151681022A86901F041 ++:10C9800093FA2C6A84F80180E8696060686A6062E2 ++:10C99000A16881F80090A681A0684670A089401C1B ++:10C9A00080B2A081A1680844696951F8012F026032 ++:10C9B00089888180A089801D80B2A0816969A26870 ++:10C9C0000978C1F340011154A089401C80B2A081B4 ++:10C9D000A1680844296951F8012F02608988818083 ++:10C9E000A089801D80B2A0812969A2680978C1F35D ++:10C9F00040011154A0891022401C80B2A081A1687E ++:10CA00000844E96801F050FAA0891022103080B281 ++:10CA1000A081A1680844A96801F046FAA0891030F5 ++:10CA200080B2A081A1680144DAF804000860A089FE ++:10CA3000001D80B2A081A1680E54A089401CA08175 ++:10CA40000320287021465846BDE8F05FF3F7ADBCDF ++:10CA500070B50D4606460978012041B1012905D17E ++:10CA60001178052902D108201070002070BD2C6AB1 ++:10CA70000620607069686160696A6162EA69A1683C ++:10CA800052F8013F0B6092888A80A081E869A16812 ++:10CA90000078C0F340008871A089401C80B2A0815A ++:10CAA000A1680844A96951F8012F01E014E60100CA ++:10CAB000026089888180A089801D80B2A081A969D7 ++:10CAC000A2680978C1F340011154A089401C80B2CA ++:10CAD000A081A168084469690A8802808978817008 ++:10CAE000A0891022C01C80B2A081A16808442969D5 ++:10CAF00001F0DAF9A0891022103080B2A081A1687B ++:10CB00000844E96801F0D0F9A0891022103080B201 ++:10CB1000A081A1680844A96801F0C6F9A08921464E ++:10CB20001030A081012028703046BDE87040F3F736 ++:10CB30003CBC70B50D4606460978012059B1012963 ++:10CB400008D11178052905D10920107050680068B6 ++:10CB50005060002070BD6C69062010226070E8688B ++:10CB60006060686A60622969A06801F09DF9102020 ++:10CB7000A081A06820221030A96801F095F9A08951 ++:10CB80002022203080B2A081A1680844696801F0A9 ++:10CB90008BF9A08921462030A081012028703046E1 ++:10CBA000BDE87040F3F701BC70B50C460120097870 ++:10CBB0008EB01546062659B1012934D0022905D177 ++:10CBC0002978042902D10A20107000200EB070BD0F ++:10CBD000606910236A460078C0F340008DF80000B9 ++:10CBE000A0690078C0F340008DF80100E06801689A ++:10CBF000CDF802108188ADF8061080798DF8080014 ++:10CC000020690168CDF809108188ADF80D10807990 ++:10CC10008DF80F006068059009A80690A168FFF7DD ++:10CC200025FD01201DE029780429CFD1A06910231A ++:10CC30006A4650F8011F00918088ADF804006069D1 ++:10CC400050F8011FCDF806108088ADF80A000020CA ++:10CC500003906068059009A806906968FFF706FDD3 ++:10CC6000022020708DF81060606A0890294604A8A0 ++:10CC7000F3F784FBAAE700B50B7889B001204BB12C ++:10CC8000012B05D11178042902D10B20107000204E ++:10CC900009B000BD4868019005A80290C868036803 ++:10CCA0000593406806908868036807934068089079 ++:10CCB0000120087006208DF80000486A0490114693 ++:10CCC0006846F3F75BFBE3E700B50B7889B001201A ++:10CCD00043B1012BDCD111780429D9D10C2010707B ++:10CCE0000020D5E74868019005A80290886803688D ++:10CCF0000593406806900020079008900120087076 ++:10CD000006208DF80000486A049011466846F3F743 ++:10CD100035FBBDE700B50B7889B0012043B1012B8D ++:10CD2000B6D111780429B3D10D2010700020AFE7DF ++:10CD300048680590CDF818D088680088ADF80000E4 ++:10CD4000C8680088ADF802000020019002900390AE ++:10CD50000120087006208DF81000486A08901146DE ++:10CD600004A8F3F70BFB93E730B403460C780120DB ++:10CD70005CB1012C15D0022C05D111780C2902D1FF ++:10CD80000E201070002030BC704701200870C86869 ++:10CD9000042242704A6842600B4A8260921EC2605E ++:10CDA0000BE014780D2CEED102200870C868032423 ++:10CDB0004470526842608A688260496A41620146F2 ++:10CDC00030BC1846F3F7F1BA0EE6010070B41D78D6 ++:10CDD000039C4FF0000CAA4204BF70BC70478E5CED ++:10CDE000864208BF4FF0010C02D0BCF1000F05D005 ++:10CDF000561CA64208BF00268E5D8E54561CA642C5 ++:10CE00000CBF0022521CD2B2AA42E8D1BCF1000FE2 ++:10CE100004BF70BC70471878411E19703CBF601E7B ++:10CE2000187070BC704700002DE9F0410C461149A4 ++:10CE30000D68104A104908321160A0F120012A291A ++:10CE400001D301200CE03E2810D040CC0B4F94E8D9 ++:10CE50000E0007EB8000241F50F8807C3046B84756 ++:10CE600020600448001D0560BDE8F0812046E4F71D ++:10CE7000A7F9F5E7100502400100000144E60100B2 ++:10CE800010B5524800F04EFA00B1FFDF4F48401C89 ++:10CE900000F048FA002800D0FFDF10BD2DE9F14F67 ++:10CEA0004B4ED6F800B00127484800F043FADFF8AF ++:10CEB0001C8128B95FF0000708F1010000F050FA6A ++:10CEC000444C00254FF0030901206060C4F8005174 ++:10CED000C4F80451009931602060DFF8FCA018E02C ++:10CEE000DAF80000C00614D50E2000F064F8EFF365 ++:10CEF000108010F0010072B600D00120C4F8049335 ++:10CF0000D4F8001119B9D4F8041101B920BF00B93F ++:10CF100062B6D4F8000118B9D4F804010028DFD0B3 ++:10CF2000D4F804010028CFD137B1C6F800B008F119 ++:10CF3000010000F0FFF911E008F1010000F0FAF93A ++:10CF40000028B9D1C4F80893C4F80451C4F80051BA ++:10CF50000E2000F030F81D4800F002FA0020BDE875 ++:10CF6000F88F2DE9F0438DB00D46064600240DF1F3 ++:10CF700010090DF1200817E004EB4407102255F8C2 ++:10CF80002710684600F090FF05EB870710224846FF ++:10CF9000796800F089FF6846FFF780FF102241465C ++:10CFA000B86800F081FF641CB442E5DB0DB00020DE ++:10CFB000BDE8F08372E700F01F02012191404009B3 ++:10CFC000800000F1E020C0F8801270476A01002064 ++:10CFD00004E5004000E0004010ED00E0C7480021FB ++:10CFE00001708170704770B5C54D01232B60C54B32 ++:10CFF0001C68002CFCD0002407E00E6806601E6848 ++:10D00000002EFCD0001D091D641C9442F5D30020A5 ++:10D01000286018680028FCD070BD70B5B74E044673 ++:10D02000B94D3078022800D0FFDFAC4200D3FFDFDB ++:10D030007169B648012903D847F23052944201DDA4 ++:10D0400003224271491C7161291BC160AF4970788C ++:10D05000BDE87040F3F759BE70B5A84C0D46617835 ++:10D06000884200D0FFDFA84E092D4FD2DFE805F03F ++:10D070004E0522314E4E4E4E3C002078022800D004 ++:10D08000FFDF03202070A078022802D0012804D0FE ++:10D0900008E0A06800F01AFC04E004F1080007C8EA ++:10D0A000FFF7A1FF052020700020A070BDE87040B0 ++:10D0B000F3F7C9BBF3F798FC01466068F4F7BDFDD0 ++:10D0C000B04202D2616902290BD30320F4F7DAFFE0 ++:10D0D00012E0F3F789FC01466068F4F7AEFDB04258 ++:10D0E000F3D2BDE8704098E7207802280AD00528DE ++:10D0F00006D0FFDF04202070BDE8704000F0F4B8D7 ++:10D10000022000E00320F4F7BDFFF3E7FFDF70BD6E ++:10D1100070B50546F3F768FC784C6060207801280C ++:10D1200000D0FFDF79490220087000220A718D606B ++:10D1300004224A71744ACA6020706078BDE8704069 ++:10D14000F3F7E3BD10B56D4CA07808B9207808B1AD ++:10D15000112010BD6E48F3F7E1FB6070607820B1DC ++:10D16000012020700020606110BD032010BD024628 ++:10D17000010B0120B2F5003F02D2884000F020BE32 ++:10D18000B2F5802F03D22039884000F021BEB2F5DD ++:10D19000C02F03D24039884000F023BEB2F5002FE3 ++:10D1A00003D26039884000F025BE002070472DE989 ++:10D1B000F041144600EB84070E4605463F1F00F081 ++:10D1C00098FB4FF080510A69504306EB8402121F0E ++:10D1D000B24201D2012200E000221CB10969B4EB85 ++:10D1E000910F02D90920BDE8F0814A498D4216D33A ++:10D1F000AF4214D3854205D2874203D245EA0600E6 ++:10D20000800701D01020EEE78E4208D33AB92846B5 ++:10D21000FFF7ADFF18B93846FFF7A9FF08B10F2097 ++:10D22000E1E73D483D490068884205D02246314645 ++:10D230002846FFF7D8FE10E0FFF784FF0028D2D180 ++:10D240002E4801218560C0E9036481704FF4A97103 ++:10D2500004FB01F01830FFF75BFF0020C3E770B557 ++:10D260004FF08055044628692A49B1FBF0F084420A ++:10D270000AD300F03EFBA04201D8102070BD2869FF ++:10D280006043FFF774FF08B10F2070BD22482349A7 ++:10D290000068884204D02869604300F017FB0CE066 ++:10D2A000FFF750FF0028F0D12969144861438160DD ++:10D2B000022181701A48FFF72BFF002070BD15482E ++:10D2C000010B01208840401E704770B50D46044692 ++:10D2D000FFF7F5FF204201D00F2070BD2946204600 ++:10D2E000BDE8704000F08FBD10B5044C6078F3F7D6 ++:10D2F00065FB00202070A07010BD00006C010020B4 ++:10D3000004E5014000E40140105C0C002412002000 ++:10D3100059D0010000F0010098000020BEBAFECAFA ++:10D320007C5E010000210170084670470146002024 ++:10D3300008707047EFF3108101F0010172B60278B6 ++:10D34000012A01D0012200E000220123037001B96B ++:10D3500062B60AB1002070474FF400507047E9E709 ++:10D36000EFF3108111F0010F72B64FF0000202705E ++:10D3700000D162B600207047F2E700005649096804 ++:10D380000160002070475449086000207047012167 ++:10D390008A0720B1012804D042F204007047916747 ++:10D3A00000E0D167002070474C490120086042F23C ++:10D3B0000600704708B50423484A1907103230B1F7 ++:10D3C000C1F80433106840F0010010600BE01068F1 ++:10D3D00020F001001060C1F808330020C1F80801F6 ++:10D3E0003F4800680090002008BD3C49103140B122 ++:10D3F00001280CD0022812D0032816D042F20500D2 ++:10D400007047086820F01E0040F0100004E0086833 ++:10D4100020F01E0040F014000860002070470868EB ++:10D4200020F01E0040F01800F6E7086820F01E000B ++:10D4300040F01C00F0E7294924310A6802430A60E1 ++:10D4400000207047254924310A6882430A60002081 ++:10D450007047224924310968016000207047012883 ++:10D4600001D9072070471F4A52F8200002680A437A ++:10D47000026000207047012801D907207047194A2F ++:10D4800052F8200002688A43026000207047012899 ++:10D4900001D907207047134A52F82000006808603D ++:10D4A00000207047020010494FF0000003D0012A0D ++:10D4B00001D0072070470A6070474FF0804100207C ++:10D4C000C1F808014FF0E020802180F8001401210C ++:10D4D000C0F8001170470000000400400005004043 ++:10D4E00008010040ECE60100780500406249634B0A ++:10D4F0000A6863499A42096801D1C1F310010160C9 ++:10D50000002070475C495D4B0A685D49091D9A42DD ++:10D5100001D1C0F310000860002070475649574BF6 ++:10D520000A68574908319A4201D1C0F310000860D7 ++:10D530000020704730B5504B504D1C6842F2080334 ++:10D54000AC4202D0142802D203E0112801D31846BD ++:10D5500030BDC3004B481844C0F81015C0F814255E ++:10D56000002030BD4449454B0A6842F209019A4205 ++:10D5700002D0062802D203E0042801D308467047EF ++:10D58000404A012142F83010002070473A493B4B95 ++:10D590000A6842F209019A4202D0062802D203E048 ++:10D5A000042801D308467047364A012102EBC00027 ++:10D5B00041600020704770B52F4A304E314C1568DD ++:10D5C00042F2090304EB8002B54204D0062804D2DB ++:10D5D000C2F8001807E0042801D3184670BDC1F353 ++:10D5E0001000C2F80008002070BD70B5224A234E1A ++:10D5F000244C156842F2090304EB8002B54204D0C2 ++:10D60000062804D2D2F8000807E0042801D31846FF ++:10D6100070BDD2F80008C0F310000860002070BD93 ++:10D62000174910B50831184808601120154A002123 ++:10D6300002EBC003C3F81015C3F81415401C1428DE ++:10D64000F6D3002006E0042804D302EB8003C3F8DD ++:10D65000001807E002EB8003D3F80048C4F310047D ++:10D66000C3F80048401C0628EDD310BD0449064805 ++:10D67000083108607047000098000020BEBAFECA5A ++:10D6800000F5014000F001400000FEFF10B572B649 ++:10D6900000F0C6F850B1E3F733FEF3F7BCF8F4F747 ++:10D6A00097FCECF764FB63490020086062B6002039 ++:10D6B00010BD70B50D46044672B600F0B1F810B159 ++:10D6C00062B6082070BDE3F791FDE3F71BFE02464A ++:10D6D000002043099B0003F1E02300F01F01D3F871 ++:10D6E0000031CB40D9071DD0202803D222FA00F107 ++:10D6F000C9071CD141B2002906DA01F00F0101F17E ++:10D70000E02191F8141D03E001F1E02191F80014EB ++:10D71000490908290BD251B1012908D0042906D0A2 ++:10D72000052904D0401C6428D3D324B104E062B698 ++:10D7300041F2010070BD404C2078022803D962B646 ++:10D740004FF4805070BD3D49802081F8140DECF7F6 ++:10D75000E5FA20780028607801D058B908E048B18F ++:10D76000202807D8A078212804D8012802D003E077 ++:10D77000A07808B1072070BD2E49314808603148B3 ++:10D780000560E3F7BFFD2146F4F708FCF2F7F6FF6A ++:10D7900000F0E6F8FFF722FC2046E3F77FFD0400E7 ++:10D7A00062B603D0FFF772FF204670BD002070BD47 ++:10D7B00010B5044600F034F800B1012020700020BC ++:10D7C00010BD214908600020704770B50C461F4904 ++:10D7D0000D681E491E4E08310E60102807D0112812 ++:10D7E0000CD012280FD0132811D0012013E0D4E957 ++:10D7F0000001FFF75EFF354620600DE0FFF746FFB2 ++:10D800000025206008E02068FFF7D2FF03E00E4902 ++:10D8100020680860002020600C48001D056070BD75 ++:10D82000044807490068884201D101207047002060 ++:10D830007047000098000020F4E601000BE000E0D3 ++:10D84000BEBAFECA84010020040000201005024078 ++:10D85000010000012DE9F04184B088460746FEF73B ++:10D860007DFD05467E786A4601A94046F1F748F8F5 ++:10D8700004000ED0012D1EBF032004B0BDE8F081CE ++:10D8800002AA40460199F0F741FF0298B0F8030060 ++:10D890000AE0022D14D1042E12D3B7F80300BDF80C ++:10D8A0000020011D8A420BD3001D80B2A1198142C4 ++:10D8B00038BF012008BF00209CBF04B0BDE8F08144 ++:10D8C0004FF0020004B0BDE8F08100000B4A0221D5 ++:10D8D00011600B490B68002BFCD0084B1B1D186016 ++:10D8E00008680028FCD00020106008680028FCD0E0 ++:10D8F00070474FF0805040697047000004E50140D8 ++:10D9000000E4014010B54FF000040B460200204631 ++:10D9100021461ED0012A04D0022A04D0032A1DD198 ++:10D9200003E0012002E0022013E00320072B15D2C0 ++:10D93000DFE803F0140406080A0C0E00012108E0D9 ++:10D94000022106E0032104E0042102E0052100E0B9 ++:10D950000621F2F7FDFF08B1204610BD0724FBE7C2 ++:10D96000FE4805218170002101704170C170816005 ++:10D970007047FB490A78022A06D0CA681044C8607A ++:10D98000C8683238F4F705B98A6810448860886836 ++:10D99000F7E70378F349F44A13B1012B0ED011E0F5 ++:10D9A0000379012B00D06BB943790BB1012B09D15D ++:10D9B0008368643B8B4205D2C0680EE00379012B7B ++:10D9C00002D00BB10020704743790BB1012BF9D184 ++:10D9D000C368643B8B42F5D280689042F2D8012044 ++:10D9E00070472DE9F04704460226F3F760FB006814 ++:10D9F00000B1FFDFD94D01273CB12078B0B101283B ++:10DA000005D0022810D0032813D02F710CE06068D5 ++:10DA1000C82807D3F4F73CF920B16068FFF7A9FFE5 ++:10DA2000012603E0002601E000F0AFF93046BDE832 ++:10DA3000F08728780028F7D16068FFF7AAFF002850 ++:10DA4000E3D06068DFF81883007810B3A878042862 ++:10DA500000D0FFDF0020474688F8000060680079AA ++:10DA6000C0B30020387160684079A0B30420787199 ++:10DA700060688168E868F2F7D0FFB8606068C068E5 ++:10DA80003230F8600320A870B549E878F3F73DF923 ++:10DA9000CAE74FF00209404688F8009061680979AA ++:10DAA000D1B10021017161684979B9B10421417195 ++:10DAB00061688968323181606168C968C160C06825 ++:10DAC000A64C14346060F2F78FFF20606F7085F809 ++:10DAD0000290A9E704E005E00321E3E70321E6E77C ++:10DAE0000120BFE70320C2E72DE9F0479B4C8846A1 ++:10DAF000E178884200D0FFDFDFF86092002501273F ++:10DB0000974E09F11409B8F1090F76D2DFE808F051 ++:10DB1000050D2A3D646A769E7E00A078032886D093 ++:10DB2000A078022883D0FFDF81E7A078032803D004 ++:10DB3000A078022800D0FFDF0420A0702571207893 ++:10DB400000285FD1FFF715FF3078022806D0B068B3 ++:10DB5000E06000F06CF92061002048E0E078F2F726 ++:10DB60007AFFF5E7A078032803D0A078022800D038 ++:10DB7000FFDF207878BBA078032812D1042026E0AC ++:10DB80000420F4F77FFAA57051E7A078032803D0AA ++:10DB9000A078022800D0FFDF2078E0B9A078032821 ++:10DBA00014D0F2F721FF01464F46D9F80000F4F7F0 ++:10DBB00044F80028E4DB79688142E1DB081AF06070 ++:10DBC0006749E078BDE8F047F3F79FB80520F4F720 ++:10DBD00059FAA7702BE724E0A078042800D0FFDFD3 ++:10DBE000022004E0A078042800D0FFDF0120A16813 ++:10DBF0008847FFF7F6FE05462EE027E0A0780428C8 ++:10DC000000D0FFDFBDE8F04700F0BFB8A0780428DF ++:10DC100005D0607810B1A078022800D0FFDF20780E ++:10DC200018B1BDE8F04700F0B9B8207920B106205E ++:10DC3000F4F728FA2571CCE7607828B14849E078F4 ++:10DC4000F3F763F86570F2E60720C0E7FFDFEEE662 ++:10DC50003DB1012D03D0FFDF022DF9D1E7E604200D ++:10DC6000C5E70320C3E770B5050005D03B4CA0789D ++:10DC7000052803D0112070BD102070BD3B48F2F77D ++:10DC80004DFEE070E07818B1A5600020A07070BD76 ++:10DC9000032070BD314810B5017809B1112010BDC5 ++:10DCA000817805290CD0817801290BD0817849B180 ++:10DCB000012101708178012904D0807810B103E03E ++:10DCC0000F2010BD00F06AF8002010BD2DE9F041D2 ++:10DCD000224E0446B07808B101280AD164B120462A ++:10DCE000FFF757FE50B120781D4D48B1B07801289C ++:10DCF00022D00F20BDE8F0811020FBE70720F9E7D4 ++:10DD000002272F70207998B100202871607988B19E ++:10DD100004206871A0683230A860E068E860E868B4 ++:10DD20000E4C14346060F2F75FFE2060B77022E0A2 ++:10DD30000320EAE70320ECE700202870207900B3F5 ++:10DD4000002028716079F0B104206871A168F06842 ++:10DD5000F2F763FEA860E068323009E08801002035 ++:10DD6000341200203D860100FF1FA107E9DA0100FF ++:10DD7000E8600320B0701049F078F2F7C6FF002089 ++:10DD8000B8E70320DDE70320DFE70C4810B50069A2 ++:10DD900000F045F8BDE81040F2F755BD10B5074C4E ++:10DDA000E078F2F70BFE0820F4F76CF90520A0707C ++:10DDB00000202070607010BD341200208801002007 ++:10DDC0001F490968014201D00120704700207047B7 ++:10DDD0001B49091D0968014201D00120704700203C ++:10DDE0007047174910310968014201D0012070477E ++:10DDF00000207047124914310968014201D0012006 ++:10DE000070470020704710B50D4C2060201D016048 ++:10DE10000B4810300260001D0360002010BD09494E ++:10DE20000A6848F202139A4302430A607047054A9F ++:10DE3000116848F2021301EA030099431160704728 ++:10DE400000060040C80602407047704770477047A0 ++:10DE500040EA010310B59B070FD1042A0DD310C867 ++:10DE600008C9121F9C42F8D020BA19BA884201D9B9 ++:10DE7000012010BD4FF0FF3010BD1AB1D30703D001 ++:10DE8000521C07E0002010BD10F8013B11F8014BB7 ++:10DE90001B1B07D110F8013B11F8014B1B1B01D1D3 ++:10DEA000921EF1D1184610BD032A40F2308010F0C6 ++:10DEB000030C00F0158011F8013BBCF1020F624425 ++:10DEC00098BF11F801CB00F8013B38BF11F8013BB6 ++:10DED000A2F1040298BF00F801CB38BF00F8013B63 ++:10DEE00011F0030300F02580083AC0F0088051F8D3 ++:10DEF000043B083A51F804CBA0E80810F5E7121DDE ++:10DF00005CBF51F8043B40F8043BAFF30080D207FC ++:10DF100024BF11F8013B11F801CB48BF11F8012BC8 ++:10DF200024BF00F8013B00F801CB48BF00F8012BEB ++:10DF3000704710B5203AC0F00B80B1E81850203A75 ++:10DF4000A0E81850B1E81850A0E81850BFF4F5AF99 ++:10DF50005FEA027C24BFB1E81850A0E8185044BF23 ++:10DF600018C918C0BDE810405FEA827C24BF51F890 ++:10DF7000043B40F8043B08BF7047D20728BF31F884 ++:10DF8000023B48BF11F8012B28BF20F8023B48BFD5 ++:10DF900000F8012B70474FF000020429C0F01280F6 ++:10DFA00010F0030C00F01B80CCF1040CBCF1020F4C ++:10DFB00018BF00F8012BA8BF20F8022BA1EB0C0121 ++:10DFC00000F00DB85FEAC17C24BF00F8012B00F817 ++:10DFD000012B48BF00F8012B70474FF0000200B53D ++:10DFE000134694469646203922BFA0E80C50A0E87C ++:10DFF0000C50B1F12001BFF4F7AF090728BFA0E82A ++:10E000000C5048BF0CC05DF804EB890028BF40F8F5 ++:10E01000042B08BF704748BF20F8022B11F0804F37 ++:10E0200018BF00F8012B7047704770477047000019 ++:10E03000164B1860164B1960164B1A607047FEDFBE ++:10E040000420714608421BD10699134A914217DCFD ++:10E05000069902394878DF2812D10878FE2808D0BE ++:10E06000FF280DD14FF001004FF000020B4B1B6851 ++:10E07000184741F201000099019A084B1B681847A4 ++:10E0800006980599064B1B68DB681847A801002015 ++:10E09000AC010020B001002000F00100840100204C ++:10E0A00004000020184819497047FFF7FBFFE3F709 ++:10E0B00075F800BD4FF4805015490968884203D1B6 ++:10E0C000144A13605B68184700BD000020BFFDE7DD ++:10E0D0004FF480500E490968884210D10E4B1868E1 ++:10E0E0004FF0FF318842F1D080F308884FF02021B3 ++:10E0F000884204DD0948026802210A430260084898 ++:10E10000804708488047FFDF48120020481200205F ++:10E11000000000200400002000F001002405004061 ++:10E12000152A0100B5E0010004207146084202D022 ++:10E13000EFF3098101E0EFF3088188690238007884 ++:10E14000102813DB20280FDB2B280BDB0A4A126870 ++:10E150000A4B9A4203D1602804DB094A1047022087 ++:10E1600008607047074A1047074A1047074A126875 ++:10E170002C3212681047000098000020BEBAFECA78 ++:10E180000913000029CE0100CBD7010004000020B4 ++:10E190000E4B0F4908470F4B0D4908470E4B0C49D2 ++:10E1A00008470E4B0A4908470D4B094908470D4BD4 ++:10E1B000074908470C4B064908470C4B04490847D8 ++:10E1C0000B4B034908470B4B01490847AD9B000027 ++:10E1D000619F0000AD2E0000D59700005997000008 ++:10E1E000532F000025130000932E0000CF9800004D ++:10E1F000E99E0000A91100000021016081807047A4 ++:10E20000002101604160017270470A6802600B7969 ++:10E210000371704715850000C3860000E984000083 ++:10E22000B9870000DD870000178800004B880000D8 ++:10E2300085880000B5880000078900009112000061 ++:10E24000911200002F2300006D2300008D23000099 ++:10E25000432400007F250000512600008126000095 ++:10E260004B2700003D1F000083290000652A0000A5 ++:10E27000852A00008B320000AF320000DF31000041 ++:10E2800033320000E1320000753300004B460000DD ++:10E290000F480000B74B0000D34C0000574D000062 ++:10E2A000F54D0000674E0000834F00005150000004 ++:10E2B000CF5000009F2A0000A52A0000AF2A0000CE ++:10E2C000F71E00007F2B0000C91E0000D52C0000A7 ++:10E2D00091120000911200009112000091120000B2 ++:10E2E00091120000215C0000A75C0000C35C0000EC ++:10E2F000DF5C00006D5E0000095D0000135D000042 ++:10E30000555D0000775D0000535E0000955E0000E3 ++:10E31000911200002D7500004D7500004F75000032 ++:10E3200089750000B7750000B37600005D770000C6 ++:10E3300071770000BF770000A57800005B7A0000CD ++:10E340009B7B00005B660000B37B00009112000025 ++:10E350009112000025930000639300008593000054 ++:10E36000100110013A0200001A0200040506000024 ++:10E37000FFFFFFFF0000FFFF298F0000A11B00002F ++:10E38000AB580000A5660000E77F00000000000019 ++:10E39000557D0000698000004980000000000000F9 ++:10E3A00000000000CDC700000000000000000000D9 ++:10E3B0000000000013D80000000000000000000072 ++:10E3C0000000000029C80000ADC8000000000000E7 ++:10E3D000000000006BCC000031CA00006FD10000CB ++:10E3E000000000000000000003DD0000000000004D ++:10E3F000000000000000000011CD0000E1D8000086 ++:10E4000000000000B1D9000025DA00000000000083 ++:10E410000BD20000BDD2000000000000EBD90000CC ++:10E420009DD30000ADD500001FD6000013D700001B ++:10E43000C5CE0000A9D7000000000000DDCD00001F ++:10E44000000000001DCB000093CA000041D800006E ++:10E4500081DB0000EFDB000000000000FBC80000D3 ++:10E460003DC900005BC800000000000077C9000043 ++:10E4700000000000AFC90000E5C9000047DC000053 ++:10E4800000000000BBCF0000E9D0000087D00000F2 ++:10E4900027D10000CFCC0000BFCA000097CC0000FD ++:10E4A0004BDE000033CC000051DD00000000000016 ++:10E4B000AFDC000051CB00006BCA0000CBDD0000D8 ++:10E4C0007FDF000051CD000035DF000055CF000098 ++:10E4D000A9DE0000FBDE0000ED3C0000ED3C00008A ++:10E4E000032300008D8E0000276900007B58000088 ++:10E4F0000000000031960100313D0000313D000078 ++:10E500002D230000E78E00009F6900008558000061 ++:10E51000C183010057960100BC01BC013E002C00E4 ++:10E520005400140018016001010000000100000007 ++:10E530000001020304000F1011120000001300007C ++:10E54000A9CB010077CC0100C9CC010015CD010099 ++:10E5500069CD0100A3C60100C5C701002DC8010097 ++:10E5600051CA010033CB010077F0000051010100D6 ++:10E5700000000000060000000A0000003200000059 ++:10E5800073000000B40000007B7201000B64010006 ++:10E59000A77201000D6401007B43010033AA010052 ++:10E5A0007556010033AA0100E54301007BAB010071 ++:10E5B0001D4F01007BAB0100F34201000BAB0100DA ++:10E5C000575501000BAB0100555555D6BE898E003D ++:10E5D00000006606F30C801300000A033B066C097A ++:10E5E00000005604D308500D555555252627D6BE94 ++:10E5F000898EF401FA00960064004B0032001E0080 ++:10E6000014000000210000000000000000000300D2 ++:10E61000656C746200000000000000000000000053 ++:10E620000000000087000000000000000000000063 ++:10E6300000000000BE83605ADB0B376038A5F5AAE6 ++:10E640009183886CEDD4010005D501001DD5010032 ++:10E6500035D5010065D501008DD50100B7D5010084 ++:10E66000EBD501005FD20100AFD10100CBD2010098 ++:10E6700025D3010035D3010061D301003B22010005 ++:10E6800043220100512201008FD30100A9D30100D0 ++:10E690007DD3010087D30100B5D30100EBD3010086 ++:10E6A00037D4010045D4010053D401005FD40100E8 ++:10E6B00077D401008FD40100A5D401000000000030 ++:10E6C00073990000C9990000DF99000005D9010085 ++:10E6D0009DCE010063CF010067DC010095DC0100E5 ++:10E6E000CDDC010031200100152501001C05004092 ++:10E6F000200500400010020018E70100080000207B ++:10E70000AC0100004411000040E70100B40100200A ++:10E710009410000080110000013F021A173601001A ++:10E720000100683720FB349B5F80041F80001002CB ++:10E730002C01337F0102A029024410E431E00100E2 ++:00000001FF +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/toolchain/armgcc/armgcc_s132v3_nrf52832_xxaa.ld nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/toolchain/armgcc/armgcc_s132v3_nrf52832_xxaa.ld +new file mode 100644 +index 0000000..74140a9 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/toolchain/armgcc/armgcc_s132v3_nrf52832_xxaa.ld +@@ -0,0 +1,33 @@ ++/* Linker script to configure memory regions. */ ++ ++SEARCH_DIR(.) ++GROUP(-lgcc -lc -lnosys) ++ ++MEMORY ++{ ++ FLASH (rx) : ORIGIN = 0x1f000, LENGTH = 0x61000 ++ RAM (rwx) : ORIGIN = 0x200019c0, LENGTH = 0xe640 ++} ++ ++SECTIONS ++{ ++} ++ ++SECTIONS ++{ ++ . = ALIGN(4); ++ .mem_section_dummy_ram : ++ { ++ } ++ ++} INSERT AFTER .data; ++ ++SECTIONS ++{ ++ .mem_section_dummy_rom : ++ { ++ } ++ ++} INSERT AFTER .text ++ ++INCLUDE "nrf_common.ld" +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/toolchain/iar/iar_s132v3_nrf52832_xxaa.icf nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/toolchain/iar/iar_s132v3_nrf52832_xxaa.icf +new file mode 100644 +index 0000000..0cc668a +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v3/toolchain/iar/iar_s132v3_nrf52832_xxaa.icf +@@ -0,0 +1,36 @@ ++/*###ICF### Section handled by ICF editor, don't touch! ****/ ++/*-Editor annotation file-*/ ++/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ ++/*-Specials-*/ ++define symbol __ICFEDIT_intvec_start__ = 0x1f000; ++/*-Memory Regions-*/ ++define symbol __ICFEDIT_region_ROM_start__ = 0x1f000; ++define symbol __ICFEDIT_region_ROM_end__ = 0x7ffff; ++define symbol __ICFEDIT_region_RAM_start__ = 0x200019c0; ++define symbol __ICFEDIT_region_RAM_end__ = 0x2000ffff; ++export symbol __ICFEDIT_region_RAM_start__; ++export symbol __ICFEDIT_region_RAM_end__; ++/*-Sizes-*/ ++define symbol __ICFEDIT_size_cstack__ = ; ++define symbol __ICFEDIT_size_heap__ = ; ++/**** End of ICF editor section. ###ICF###*/ ++ ++define memory mem with size = 4G; ++define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; ++define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; ++ ++define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; ++define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; ++define block RO_END with alignment = 8, size = 0 { }; ++ ++initialize by copy { readwrite }; ++do not initialize { section .noinit }; ++ ++keep { section .intvec }; ++place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; ++place in ROM_region { readonly, ++ block RO_END }; ++place in RAM_region { readwrite, ++ block CSTACK, ++ block HEAP }; ++ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble.h +new file mode 100644 +index 0000000..ed16f6d +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble.h +@@ -0,0 +1,628 @@ ++/* ++ * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form, except as embedded into a Nordic ++ * Semiconductor ASA integrated circuit in a product or a software update for ++ * such product, must reproduce the above copyright notice, this list of ++ * conditions and the following disclaimer in the documentation and/or other ++ * materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its ++ * contributors may be used to endorse or promote products derived from this ++ * software without specific prior written permission. ++ * ++ * 4. This software, with or without modification, must only be used with a ++ * Nordic Semiconductor ASA integrated circuit. ++ * ++ * 5. Any software provided in binary form under this license must not be reverse ++ * engineered, decompiled, modified and/or disassembled. ++ * ++ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS ++ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE ++ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ++ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ++ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ */ ++ ++/** ++ @addtogroup BLE_COMMON BLE SoftDevice Common ++ @{ ++ @defgroup ble_api Events, type definitions and API calls ++ @{ ++ ++ @brief Module independent events, type definitions and API calls for the BLE SoftDevice. ++ ++ */ ++ ++#ifndef BLE_H__ ++#define BLE_H__ ++ ++#include ++#include "nrf_svc.h" ++#include "nrf_error.h" ++#include "ble_hci.h" ++#include "ble_ranges.h" ++#include "ble_types.h" ++#include "ble_err.h" ++#include "ble_gap.h" ++#include "ble_l2cap.h" ++#include "ble_gatt.h" ++#include "ble_gattc.h" ++#include "ble_gatts.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/** @addtogroup BLE_COMMON_ENUMERATIONS Enumerations ++ * @{ */ ++ ++/** ++ * @brief Common API SVC numbers. ++ */ ++enum BLE_COMMON_SVCS ++{ ++ SD_BLE_ENABLE = BLE_SVC_BASE, /**< Enable and initialize the BLE stack */ ++ SD_BLE_EVT_GET, /**< Get an event from the pending events queue. */ ++ SD_BLE_UUID_VS_ADD, /**< Add a Vendor Specific UUID. */ ++ SD_BLE_UUID_DECODE, /**< Decode UUID bytes. */ ++ SD_BLE_UUID_ENCODE, /**< Encode UUID bytes. */ ++ SD_BLE_VERSION_GET, /**< Get the local version information (company ID, Link Layer Version, Link Layer Subversion). */ ++ SD_BLE_USER_MEM_REPLY, /**< User Memory Reply. */ ++ SD_BLE_OPT_SET, /**< Set a BLE option. */ ++ SD_BLE_OPT_GET, /**< Get a BLE option. */ ++ SD_BLE_CFG_SET, /**< Add a configuration to the BLE stack. */ ++}; ++ ++/** ++ * @brief BLE Module Independent Event IDs. ++ */ ++enum BLE_COMMON_EVTS ++{ ++ BLE_EVT_USER_MEM_REQUEST = BLE_EVT_BASE + 0, /**< User Memory request. @ref ble_evt_user_mem_request_t */ ++ BLE_EVT_USER_MEM_RELEASE = BLE_EVT_BASE + 1, /**< User Memory release. @ref ble_evt_user_mem_release_t */ ++}; ++ ++/**@brief BLE Connection Configuration IDs. ++ * ++ * IDs that uniquely identify a connection configuration. ++ */ ++enum BLE_CONN_CFGS ++{ ++ BLE_CONN_CFG_GAP = BLE_CONN_CFG_BASE + 0, /**< BLE GAP specific connection configuration. */ ++ BLE_CONN_CFG_GATTC = BLE_CONN_CFG_BASE + 1, /**< BLE GATTC specific connection configuration. */ ++ BLE_CONN_CFG_GATTS = BLE_CONN_CFG_BASE + 2, /**< BLE GATTS specific connection configuration. */ ++ BLE_CONN_CFG_GATT = BLE_CONN_CFG_BASE + 3, /**< BLE GATT specific connection configuration. */ ++ BLE_CONN_CFG_L2CAP = BLE_CONN_CFG_BASE + 4, /**< BLE L2CAP specific connection configuration. */ ++}; ++ ++/**@brief BLE Common Configuration IDs. ++ * ++ * IDs that uniquely identify a common configuration. ++ */ ++enum BLE_COMMON_CFGS ++{ ++ BLE_COMMON_CFG_VS_UUID = BLE_CFG_BASE, /**< Vendor specific UUID configuration */ ++}; ++ ++/**@brief Common Option IDs. ++ * IDs that uniquely identify a common option. ++ */ ++enum BLE_COMMON_OPTS ++{ ++ BLE_COMMON_OPT_PA_LNA = BLE_OPT_BASE + 0, /**< PA and LNA options */ ++ BLE_COMMON_OPT_CONN_EVT_EXT = BLE_OPT_BASE + 1, /**< Extended connection events option */ ++}; ++ ++/** @} */ ++ ++/** @addtogroup BLE_COMMON_DEFINES Defines ++ * @{ */ ++ ++/** @brief Required pointer alignment for BLE Events. ++*/ ++#define BLE_EVT_PTR_ALIGNMENT 4 ++ ++/** @brief Leaves the maximum of the two arguments. ++*/ ++#define BLE_MAX(a, b) ((a) < (b) ? (b) : (a)) ++ ++/** @brief Maximum possible length for BLE Events. ++ * @note The highest value used for @ref ble_gatt_conn_cfg_t::att_mtu in any connection configuration shall be used as a parameter. ++ * If that value has not been configured for any connections then @ref BLE_GATT_ATT_MTU_DEFAULT must be used instead. ++*/ ++#define BLE_EVT_LEN_MAX(ATT_MTU) ( \ ++ BLE_MAX( \ ++ sizeof(ble_evt_t), \ ++ offsetof(ble_evt_t, evt.gattc_evt.params.prim_srvc_disc_rsp.services) + ((ATT_MTU) - 1) / 4 * sizeof(ble_gattc_service_t) \ ++ ) \ ++) ++ ++/** @defgroup BLE_USER_MEM_TYPES User Memory Types ++ * @{ */ ++#define BLE_USER_MEM_TYPE_INVALID 0x00 /**< Invalid User Memory Types. */ ++#define BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES 0x01 /**< User Memory for GATTS queued writes. */ ++/** @} */ ++ ++/** @defgroup BLE_UUID_VS_COUNTS Vendor Specific UUID counts ++ * @{ ++ */ ++#define BLE_UUID_VS_COUNT_DEFAULT 10 /**< Default VS UUID count. */ ++#define BLE_UUID_VS_COUNT_MAX 254 /**< Maximum VS UUID count. */ ++/** @} */ ++ ++/** @defgroup BLE_COMMON_CFG_DEFAULTS Configuration defaults. ++ * @{ ++ */ ++#define BLE_CONN_CFG_TAG_DEFAULT 0 /**< Default configuration tag, SoftDevice default connection configuration. */ ++ ++/** @} */ ++ ++/** @} */ ++ ++/** @addtogroup BLE_COMMON_STRUCTURES Structures ++ * @{ */ ++ ++/**@brief User Memory Block. */ ++typedef struct ++{ ++ uint8_t *p_mem; /**< Pointer to the start of the user memory block. */ ++ uint16_t len; /**< Length in bytes of the user memory block. */ ++} ble_user_mem_block_t; ++ ++/**@brief Event structure for @ref BLE_EVT_USER_MEM_REQUEST. */ ++typedef struct ++{ ++ uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ ++} ble_evt_user_mem_request_t; ++ ++/**@brief Event structure for @ref BLE_EVT_USER_MEM_RELEASE. */ ++typedef struct ++{ ++ uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ ++ ble_user_mem_block_t mem_block; /**< User memory block */ ++} ble_evt_user_mem_release_t; ++ ++/**@brief Event structure for events not associated with a specific function module. */ ++typedef struct ++{ ++ uint16_t conn_handle; /**< Connection Handle on which this event occurred. */ ++ union ++ { ++ ble_evt_user_mem_request_t user_mem_request; /**< User Memory Request Event Parameters. */ ++ ble_evt_user_mem_release_t user_mem_release; /**< User Memory Release Event Parameters. */ ++ } params; /**< Event parameter union. */ ++} ble_common_evt_t; ++ ++/**@brief BLE Event header. */ ++typedef struct ++{ ++ uint16_t evt_id; /**< Value from a BLE__EVT series. */ ++ uint16_t evt_len; /**< Length in octets including this header. */ ++} ble_evt_hdr_t; ++ ++/**@brief Common BLE Event type, wrapping the module specific event reports. */ ++typedef struct ++{ ++ ble_evt_hdr_t header; /**< Event header. */ ++ union ++ { ++ ble_common_evt_t common_evt; /**< Common Event, evt_id in BLE_EVT_* series. */ ++ ble_gap_evt_t gap_evt; /**< GAP originated event, evt_id in BLE_GAP_EVT_* series. */ ++ ble_gattc_evt_t gattc_evt; /**< GATT client originated event, evt_id in BLE_GATTC_EVT* series. */ ++ ble_gatts_evt_t gatts_evt; /**< GATT server originated event, evt_id in BLE_GATTS_EVT* series. */ ++ ble_l2cap_evt_t l2cap_evt; /**< L2CAP originated event, evt_id in BLE_L2CAP_EVT* series. */ ++ } evt; /**< Event union. */ ++} ble_evt_t; ++ ++ ++/** ++ * @brief Version Information. ++ */ ++typedef struct ++{ ++ uint8_t version_number; /**< Link Layer Version number. See https://www.bluetooth.org/en-us/specification/assigned-numbers/link-layer for assigned values. */ ++ uint16_t company_id; /**< Company ID, Nordic Semiconductor's company ID is 89 (0x0059) (https://www.bluetooth.org/apps/content/Default.aspx?doc_id=49708). */ ++ uint16_t subversion_number; /**< Link Layer Sub Version number, corresponds to the SoftDevice Config ID or Firmware ID (FWID). */ ++} ble_version_t; ++ ++/** ++ * @brief Configuration parameters for the PA and LNA. ++ */ ++typedef struct ++{ ++ uint8_t enable :1; /**< Enable toggling for this amplifier */ ++ uint8_t active_high :1; /**< Set the pin to be active high */ ++ uint8_t gpio_pin :6; /**< The GPIO pin to toggle for this amplifier */ ++} ble_pa_lna_cfg_t; ++ ++/** ++ * @brief PA & LNA GPIO toggle configuration ++ * ++ * This option configures the SoftDevice to toggle pins when the radio is active for use with a power amplifier and/or ++ * a low noise amplifier. ++ * ++ * Toggling the pins is achieved by using two PPI channels and a GPIOTE channel. The hardware channel IDs are provided ++ * by the application and should be regarded as reserved as long as any PA/LNA toggling is enabled. ++ * ++ * @note @ref sd_ble_opt_get is not supported for this option. ++ * @note Setting this option while the radio is in use (i.e. any of the roles are active) may have undefined consequences ++ * and must be avoided by the application. ++ */ ++typedef struct ++{ ++ ble_pa_lna_cfg_t pa_cfg; /**< Power Amplifier configuration */ ++ ble_pa_lna_cfg_t lna_cfg; /**< Low Noise Amplifier configuration */ ++ ++ uint8_t ppi_ch_id_set; /**< PPI channel used for radio pin setting */ ++ uint8_t ppi_ch_id_clr; /**< PPI channel used for radio pin clearing */ ++ uint8_t gpiote_ch_id; /**< GPIOTE channel used for radio pin toggling */ ++} ble_common_opt_pa_lna_t; ++ ++/** ++ * @brief Configuration of extended BLE connection events. ++ * ++ * When enabled the SoftDevice will dynamically extend the connection event when possible. ++ * ++ * The connection event length is controlled by the connection configuration as set by @ref ble_gap_conn_cfg_t::event_length. ++ * The connection event can be extended if there is time to send another packet pair before the start of the next connection interval, ++ * and if there are no conflicts with other BLE roles requesting radio time. ++ * ++ * @note @ref sd_ble_opt_get is not supported for this option. ++ */ ++typedef struct ++{ ++ uint8_t enable : 1; /**< Enable extended BLE connection events, disabled by default. */ ++} ble_common_opt_conn_evt_ext_t; ++ ++/**@brief Option structure for common options. */ ++typedef union ++{ ++ ble_common_opt_pa_lna_t pa_lna; /**< Parameters for controlling PA and LNA pin toggling. */ ++ ble_common_opt_conn_evt_ext_t conn_evt_ext; /**< Parameters for enabling extended connection events. */ ++} ble_common_opt_t; ++ ++/**@brief Common BLE Option type, wrapping the module specific options. */ ++typedef union ++{ ++ ble_common_opt_t common_opt; /**< COMMON options, opt_id in @ref BLE_COMMON_OPTS series. */ ++ ble_gap_opt_t gap_opt; /**< GAP option, opt_id in @ref BLE_GAP_OPTS series. */ ++} ble_opt_t; ++ ++/**@brief BLE connection configuration type, wrapping the module specific configurations, set with ++ * @ref sd_ble_cfg_set. ++ * ++ * @note Connection configurations don't have to be set. ++ * In the case that no configurations has been set, or fewer connection configurations has been set than enabled connections, ++ * the default connection configuration will be automatically added for the remaining connections. ++ * When creating connections with the default configuration, @ref BLE_CONN_CFG_TAG_DEFAULT should be used in ++ * place of @ref ble_conn_cfg_t::conn_cfg_tag. ++ * ++ * @sa sd_ble_gap_adv_start() ++ * @sa sd_ble_gap_connect() ++ * ++ * @mscs ++ * @mmsc{@ref BLE_CONN_CFG} ++ * @endmscs ++ ++ */ ++typedef struct ++{ ++ uint8_t conn_cfg_tag; /**< The application chosen tag it can use with the ++ @ref sd_ble_gap_adv_start() and @ref sd_ble_gap_connect() calls ++ to select this configuration when creating a connection. ++ Must be different for all connection configurations added and not @ref BLE_CONN_CFG_TAG_DEFAULT. */ ++ union { ++ ble_gap_conn_cfg_t gap_conn_cfg; /**< GAP connection configuration, cfg_id is @ref BLE_CONN_CFG_GAP. */ ++ ble_gattc_conn_cfg_t gattc_conn_cfg; /**< GATTC connection configuration, cfg_id is @ref BLE_CONN_CFG_GATTC. */ ++ ble_gatts_conn_cfg_t gatts_conn_cfg; /**< GATTS connection configuration, cfg_id is @ref BLE_CONN_CFG_GATTS. */ ++ ble_gatt_conn_cfg_t gatt_conn_cfg; /**< GATT connection configuration, cfg_id is @ref BLE_CONN_CFG_GATT. */ ++ ble_l2cap_conn_cfg_t l2cap_conn_cfg; /**< L2CAP connection configuration, cfg_id is @ref BLE_CONN_CFG_L2CAP. */ ++ } params; /**< Connection configuration union. */ ++} ble_conn_cfg_t; ++ ++/** ++ * @brief Configuration of Vendor Specific UUIDs, set with @ref sd_ble_cfg_set. ++ * ++ * @retval ::NRF_ERROR_INVALID_PARAM Too many UUIDs configured. ++ */ ++typedef struct ++{ ++ uint8_t vs_uuid_count; /**< Number of 128-bit Vendor Specific UUID bases to allocate memory for. ++ Default value is @ref BLE_UUID_VS_COUNT_DEFAULT. Maximum value is ++ @ref BLE_UUID_VS_COUNT_MAX. */ ++} ble_common_cfg_vs_uuid_t; ++ ++/**@brief Common BLE Configuration type, wrapping the common configurations. */ ++typedef union ++{ ++ ble_common_cfg_vs_uuid_t vs_uuid_cfg; /**< Vendor specific UUID configuration, cfg_id is @ref BLE_COMMON_CFG_VS_UUID. */ ++} ble_common_cfg_t; ++ ++/**@brief BLE Configuration type, wrapping the module specific configurations. */ ++typedef union ++{ ++ ble_conn_cfg_t conn_cfg; /**< Connection specific configurations, cfg_id in @ref BLE_CONN_CFGS series. */ ++ ble_common_cfg_t common_cfg; /**< Global common configurations, cfg_id in @ref BLE_COMMON_CFGS series. */ ++ ble_gap_cfg_t gap_cfg; /**< Global GAP configurations, cfg_id in @ref BLE_GAP_CFGS series. */ ++ ble_gatts_cfg_t gatts_cfg; /**< Global GATTS configuration, cfg_id in @ref BLE_GATTS_CFGS series. */ ++} ble_cfg_t; ++ ++/** @} */ ++ ++/** @addtogroup BLE_COMMON_FUNCTIONS Functions ++ * @{ */ ++ ++/**@brief Enable the BLE stack ++ * ++ * @param[in, out] p_app_ram_base Pointer to a variable containing the start address of the ++ * application RAM region (APP_RAM_BASE). On return, this will ++ * contain the minimum start address of the application RAM region ++ * required by the SoftDevice for this configuration. ++ * ++ * @note The memory requirement for a specific configuration will not increase between SoftDevices ++ * with the same major version number. ++ * ++ * @note The value of *p_app_ram_base when the app has done no custom configuration of the ++ * SoftDevice, i.e. the app has not called @ref sd_ble_cfg_set before @ref sd_ble_enable, can ++ * be found in the release notes. ++ * ++ * @note At runtime the IC's RAM is split into 2 regions: The SoftDevice RAM region is located ++ * between 0x20000000 and APP_RAM_BASE-1 and the application's RAM region is located between ++ * APP_RAM_BASE and the start of the call stack. ++ * ++ * @details This call initializes the BLE stack, no BLE related function other than @ref ++ * sd_ble_cfg_set can be called before this one. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_COMMON_ENABLE} ++ * @endmscs ++ * ++ * @retval ::NRF_SUCCESS The BLE stack has been initialized successfully. ++ * @retval ::NRF_ERROR_INVALID_STATE The BLE stack had already been initialized and cannot be reinitialized. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. ++ * @retval ::NRF_ERROR_NO_MEM The amount of memory assigned to the SoftDevice by *p_app_ram_base is not ++ * large enough to fit this configuration's memory requirement. Check *p_app_ram_base ++ * and set the start address of the application RAM region accordingly. ++ */ ++SVCALL(SD_BLE_ENABLE, uint32_t, sd_ble_enable(uint32_t * p_app_ram_base)); ++ ++/**@brief Add configurations for the BLE stack ++ * ++ * @param[in] cfg_id Config ID, see @ref BLE_CONN_CFGS, @ref BLE_COMMON_CFGS, @ref ++ * BLE_GAP_CFGS or @ref BLE_GATTS_CFGS. ++ * @param[in] p_cfg Pointer to a ble_cfg_t structure containing the configuration value. ++ * @param[in] app_ram_base The start address of the application RAM region (APP_RAM_BASE). ++ * See @ref sd_ble_enable for details about APP_RAM_BASE. ++ * ++ * @note The memory requirement for a specific configuration will not increase between SoftDevices ++ * with the same major version number. ++ * ++ * @note If a configuration is set more than once, the last one set is the one that takes effect on ++ * @ref sd_ble_enable. ++ * ++ * @note Any part of the BLE stack that is NOT configured with @ref sd_ble_cfg_set will have default ++ * configuration. ++ * ++ * @note @ref sd_ble_cfg_set may be called at any time when the SoftDevice is enabled (see @ref ++ * sd_softdevice_enable) while the BLE part of the SoftDevice is not enabled (see @ref ++ * sd_ble_enable). ++ * ++ * @note Error codes for the configurations are described in the configuration structs. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_COMMON_ENABLE} ++ * @endmscs ++ * ++ * @retval ::NRF_SUCCESS The configuration has been added successfully. ++ * @retval ::NRF_ERROR_INVALID_STATE The BLE stack had already been initialized. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid cfg_id supplied. ++ * @retval ::NRF_ERROR_NO_MEM The amount of memory assigned to the SoftDevice by app_ram_base is not ++ * large enough to fit this configuration's memory requirement. ++ */ ++SVCALL(SD_BLE_CFG_SET, uint32_t, sd_ble_cfg_set(uint32_t cfg_id, ble_cfg_t const * p_cfg, uint32_t app_ram_base)); ++ ++/**@brief Get an event from the pending events queue. ++ * ++ * @param[out] p_dest Pointer to buffer to be filled in with an event, or NULL to retrieve the event length. ++ * This buffer must be aligned to the extend defined by @ref BLE_EVT_PTR_ALIGNMENT. ++ * The buffer should be interpreted as a @ref ble_evt_t struct. ++ * @param[in, out] p_len Pointer the length of the buffer, on return it is filled with the event length. ++ * ++ * @details This call allows the application to pull a BLE event from the BLE stack. The application is signaled that ++ * an event is available from the BLE stack by the triggering of the SD_EVT_IRQn interrupt. ++ * The application is free to choose whether to call this function from thread mode (main context) or directly from the ++ * Interrupt Service Routine that maps to SD_EVT_IRQn. In any case however, and because the BLE stack runs at a higher ++ * priority than the application, this function should be called in a loop (until @ref NRF_ERROR_NOT_FOUND is returned) ++ * every time SD_EVT_IRQn is raised to ensure that all available events are pulled from the BLE stack. Failure to do so ++ * could potentially leave events in the internal queue without the application being aware of this fact. ++ * ++ * Sizing the p_dest buffer is equally important, since the application needs to provide all the memory necessary for the event to ++ * be copied into application memory. If the buffer provided is not large enough to fit the entire contents of the event, ++ * @ref NRF_ERROR_DATA_SIZE will be returned and the application can then call again with a larger buffer size. ++ * The maximum possible event length is defined by @ref BLE_EVT_LEN_MAX. The application may also "peek" the event length ++ * by providing p_dest as a NULL pointer and inspecting the value of *p_len upon return: ++ * ++ * \code ++ * uint16_t len; ++ * errcode = sd_ble_evt_get(NULL, &len); ++ * \endcode ++ * ++ * @mscs ++ * @mmsc{@ref BLE_COMMON_IRQ_EVT_MSC} ++ * @mmsc{@ref BLE_COMMON_THREAD_EVT_MSC} ++ * @endmscs ++ * ++ * @retval ::NRF_SUCCESS Event pulled and stored into the supplied buffer. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. ++ * @retval ::NRF_ERROR_NOT_FOUND No events ready to be pulled. ++ * @retval ::NRF_ERROR_DATA_SIZE Event ready but could not fit into the supplied buffer. ++ */ ++SVCALL(SD_BLE_EVT_GET, uint32_t, sd_ble_evt_get(uint8_t *p_dest, uint16_t *p_len)); ++ ++ ++/**@brief Add a Vendor Specific base UUID. ++ * ++ * @details This call enables the application to add a vendor specific base UUID to the BLE stack's table, for later ++ * use with all other modules and APIs. This then allows the application to use the shorter, 24-bit @ref ble_uuid_t ++ * format when dealing with both 16-bit and 128-bit UUIDs without having to check for lengths and having split code ++ * paths. This is accomplished by extending the grouping mechanism that the Bluetooth SIG standard base UUID uses ++ * for all other 128-bit UUIDs. The type field in the @ref ble_uuid_t structure is an index (relative to ++ * @ref BLE_UUID_TYPE_VENDOR_BEGIN) to the table populated by multiple calls to this function, and the UUID field ++ * in the same structure contains the 2 bytes at indexes 12 and 13. The number of possible 128-bit UUIDs available to ++ * the application is therefore the number of Vendor Specific UUIDs added with the help of this function times 65536, ++ * although restricted to modifying bytes 12 and 13 for each of the entries in the supplied array. ++ * ++ * @note Bytes 12 and 13 of the provided UUID will not be used internally, since those are always replaced by ++ * the 16-bit uuid field in @ref ble_uuid_t. ++ * ++ * @note If a UUID is already present in the BLE stack's internal table, the corresponding index will be returned in ++ * p_uuid_type along with an @ref NRF_SUCCESS error code. ++ * ++ * @param[in] p_vs_uuid Pointer to a 16-octet (128-bit) little endian Vendor Specific UUID disregarding ++ * bytes 12 and 13. ++ * @param[out] p_uuid_type Pointer to a uint8_t where the type field in @ref ble_uuid_t corresponding to this UUID will be stored. ++ * ++ * @retval ::NRF_SUCCESS Successfully added the Vendor Specific UUID. ++ * @retval ::NRF_ERROR_INVALID_ADDR If p_vs_uuid or p_uuid_type is NULL or invalid. ++ * @retval ::NRF_ERROR_NO_MEM If there are no more free slots for VS UUIDs. ++ */ ++SVCALL(SD_BLE_UUID_VS_ADD, uint32_t, sd_ble_uuid_vs_add(ble_uuid128_t const *p_vs_uuid, uint8_t *p_uuid_type)); ++ ++ ++/** @brief Decode little endian raw UUID bytes (16-bit or 128-bit) into a 24 bit @ref ble_uuid_t structure. ++ * ++ * @details The raw UUID bytes excluding bytes 12 and 13 (i.e. bytes 0-11 and 14-15) of p_uuid_le are compared ++ * to the corresponding ones in each entry of the table of vendor specific UUIDs populated with @ref sd_ble_uuid_vs_add ++ * to look for a match. If there is such a match, bytes 12 and 13 are returned as p_uuid->uuid and the index ++ * relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN as p_uuid->type. ++ * ++ * @note If the UUID length supplied is 2, then the type set by this call will always be @ref BLE_UUID_TYPE_BLE. ++ * ++ * @param[in] uuid_le_len Length in bytes of the buffer pointed to by p_uuid_le (must be 2 or 16 bytes). ++ * @param[in] p_uuid_le Pointer pointing to little endian raw UUID bytes. ++ * @param[out] p_uuid Pointer to a @ref ble_uuid_t structure to be filled in. ++ * ++ * @retval ::NRF_SUCCESS Successfully decoded into the @ref ble_uuid_t structure. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_LENGTH Invalid UUID length. ++ * @retval ::NRF_ERROR_NOT_FOUND For a 128-bit UUID, no match in the populated table of UUIDs. ++ */ ++SVCALL(SD_BLE_UUID_DECODE, uint32_t, sd_ble_uuid_decode(uint8_t uuid_le_len, uint8_t const *p_uuid_le, ble_uuid_t *p_uuid)); ++ ++ ++/** @brief Encode a @ref ble_uuid_t structure into little endian raw UUID bytes (16-bit or 128-bit). ++ * ++ * @note The pointer to the destination buffer p_uuid_le may be NULL, in which case only the validity and size of p_uuid is computed. ++ * ++ * @param[in] p_uuid Pointer to a @ref ble_uuid_t structure that will be encoded into bytes. ++ * @param[out] p_uuid_le_len Pointer to a uint8_t that will be filled with the encoded length (2 or 16 bytes). ++ * @param[out] p_uuid_le Pointer to a buffer where the little endian raw UUID bytes (2 or 16) will be stored. ++ * ++ * @retval ::NRF_SUCCESS Successfully encoded into the buffer. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid UUID type. ++ */ ++SVCALL(SD_BLE_UUID_ENCODE, uint32_t, sd_ble_uuid_encode(ble_uuid_t const *p_uuid, uint8_t *p_uuid_le_len, uint8_t *p_uuid_le)); ++ ++ ++/**@brief Get Version Information. ++ * ++ * @details This call allows the application to get the BLE stack version information. ++ * ++ * @param[out] p_version Pointer to a ble_version_t structure to be filled in. ++ * ++ * @retval ::NRF_SUCCESS Version information stored successfully. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_BUSY The BLE stack is busy (typically doing a locally-initiated disconnection procedure). ++ */ ++SVCALL(SD_BLE_VERSION_GET, uint32_t, sd_ble_version_get(ble_version_t *p_version)); ++ ++ ++/**@brief Provide a user memory block. ++ * ++ * @note This call can only be used as a response to a @ref BLE_EVT_USER_MEM_REQUEST event issued to the application. ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] p_block Pointer to a user memory block structure or NULL if memory is managed by the application. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_PEER_CANCEL_MSC} ++ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC} ++ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} ++ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC} ++ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_NOAUTH_MSC} ++ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} ++ * @endmscs ++ * ++ * @retval ::NRF_SUCCESS Successfully queued a response to the peer. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_LENGTH Invalid user memory block length supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection state or no user memory request pending. ++ */ ++SVCALL(SD_BLE_USER_MEM_REPLY, uint32_t, sd_ble_user_mem_reply(uint16_t conn_handle, ble_user_mem_block_t const *p_block)); ++ ++/**@brief Set a BLE option. ++ * ++ * @details This call allows the application to set the value of an option. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_STATIC_PK_MSC} ++ * @endmscs ++ * ++ * @param[in] opt_id Option ID, see @ref BLE_COMMON_OPTS and @ref BLE_GAP_OPTS. ++ * @param[in] p_opt Pointer to a ble_opt_t structure containing the option value. ++ * ++ * @retval ::NRF_SUCCESS Option set successfully. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. ++ * @retval ::NRF_ERROR_INVALID_STATE Unable to set the parameter at this time. ++ * @retval ::NRF_ERROR_BUSY The BLE stack is busy or the previous procedure has not completed. ++ */ ++SVCALL(SD_BLE_OPT_SET, uint32_t, sd_ble_opt_set(uint32_t opt_id, ble_opt_t const *p_opt)); ++ ++ ++/**@brief Get a BLE option. ++ * ++ * @details This call allows the application to retrieve the value of an option. ++ * ++ * @param[in] opt_id Option ID, see @ref BLE_COMMON_OPTS and @ref BLE_GAP_OPTS. ++ * @param[out] p_opt Pointer to a ble_opt_t structure to be filled in. ++ * ++ * @retval ::NRF_SUCCESS Option retrieved successfully. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. ++ * @retval ::NRF_ERROR_INVALID_STATE Unable to retrieve the parameter at this time. ++ * @retval ::NRF_ERROR_BUSY The BLE stack is busy or the previous procedure has not completed. ++ * @retval ::NRF_ERROR_NOT_SUPPORTED This option is not supported. ++ * ++ */ ++SVCALL(SD_BLE_OPT_GET, uint32_t, sd_ble_opt_get(uint32_t opt_id, ble_opt_t *p_opt)); ++ ++/** @} */ ++#ifdef __cplusplus ++} ++#endif ++#endif /* BLE_H__ */ ++ ++/** ++ @} ++ @} ++*/ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_err.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_err.h +new file mode 100644 +index 0000000..2699abc +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_err.h +@@ -0,0 +1,91 @@ ++/* ++ * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form, except as embedded into a Nordic ++ * Semiconductor ASA integrated circuit in a product or a software update for ++ * such product, must reproduce the above copyright notice, this list of ++ * conditions and the following disclaimer in the documentation and/or other ++ * materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its ++ * contributors may be used to endorse or promote products derived from this ++ * software without specific prior written permission. ++ * ++ * 4. This software, with or without modification, must only be used with a ++ * Nordic Semiconductor ASA integrated circuit. ++ * ++ * 5. Any software provided in binary form under this license must not be reverse ++ * engineered, decompiled, modified and/or disassembled. ++ * ++ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS ++ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE ++ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ++ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ++ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ */ ++ ++/** ++ @addtogroup BLE_COMMON ++ @{ ++ @addtogroup nrf_error ++ @{ ++ @ingroup BLE_COMMON ++ @} ++ ++ @defgroup ble_err General error codes ++ @{ ++ ++ @brief General error code definitions for the BLE API. ++ ++ @ingroup BLE_COMMON ++*/ ++#ifndef NRF_BLE_ERR_H__ ++#define NRF_BLE_ERR_H__ ++ ++#include "nrf_error.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/* @defgroup BLE_ERRORS Error Codes ++ * @{ */ ++#define BLE_ERROR_NOT_ENABLED (NRF_ERROR_STK_BASE_NUM+0x001) /**< @ref sd_ble_enable has not been called. */ ++#define BLE_ERROR_INVALID_CONN_HANDLE (NRF_ERROR_STK_BASE_NUM+0x002) /**< Invalid connection handle. */ ++#define BLE_ERROR_INVALID_ATTR_HANDLE (NRF_ERROR_STK_BASE_NUM+0x003) /**< Invalid attribute handle. */ ++#define BLE_ERROR_INVALID_ROLE (NRF_ERROR_STK_BASE_NUM+0x004) /**< Invalid role. */ ++/** @} */ ++ ++ ++/** @defgroup BLE_ERROR_SUBRANGES Module specific error code subranges ++ * @brief Assignment of subranges for module specific error codes. ++ * @note For specific error codes, see ble_.h or ble_error_.h. ++ * @{ */ ++#define NRF_L2CAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x100) /**< L2CAP specific errors. */ ++#define NRF_GAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x200) /**< GAP specific errors. */ ++#define NRF_GATTC_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x300) /**< GATT client specific errors. */ ++#define NRF_GATTS_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x400) /**< GATT server specific errors. */ ++/** @} */ ++ ++#ifdef __cplusplus ++} ++#endif ++#endif ++ ++ ++/** ++ @} ++ @} ++*/ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_gap.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_gap.h +new file mode 100644 +index 0000000..fa61bb9 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_gap.h +@@ -0,0 +1,2189 @@ ++/* ++ * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form, except as embedded into a Nordic ++ * Semiconductor ASA integrated circuit in a product or a software update for ++ * such product, must reproduce the above copyright notice, this list of ++ * conditions and the following disclaimer in the documentation and/or other ++ * materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its ++ * contributors may be used to endorse or promote products derived from this ++ * software without specific prior written permission. ++ * ++ * 4. This software, with or without modification, must only be used with a ++ * Nordic Semiconductor ASA integrated circuit. ++ * ++ * 5. Any software provided in binary form under this license must not be reverse ++ * engineered, decompiled, modified and/or disassembled. ++ * ++ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS ++ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE ++ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ++ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ++ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ */ ++ ++/** ++ @addtogroup BLE_GAP Generic Access Profile (GAP) ++ @{ ++ @brief Definitions and prototypes for the GAP interface. ++ */ ++ ++#ifndef BLE_GAP_H__ ++#define BLE_GAP_H__ ++ ++#include ++#include "nrf_svc.h" ++#include "nrf_error.h" ++#include "ble_hci.h" ++#include "ble_ranges.h" ++#include "ble_types.h" ++#include "ble_err.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/**@addtogroup BLE_GAP_ENUMERATIONS Enumerations ++ * @{ */ ++ ++/**@brief GAP API SVC numbers. ++ */ ++enum BLE_GAP_SVCS ++{ ++ SD_BLE_GAP_ADDR_SET = BLE_GAP_SVC_BASE, /**< Set own Bluetooth Address. */ ++ SD_BLE_GAP_ADDR_GET = BLE_GAP_SVC_BASE + 1, /**< Get own Bluetooth Address. */ ++ SD_BLE_GAP_WHITELIST_SET = BLE_GAP_SVC_BASE + 2, /**< Set active whitelist. */ ++ SD_BLE_GAP_DEVICE_IDENTITIES_SET = BLE_GAP_SVC_BASE + 3, /**< Set device identity list. */ ++ SD_BLE_GAP_PRIVACY_SET = BLE_GAP_SVC_BASE + 4, /**< Set Privacy settings*/ ++ SD_BLE_GAP_PRIVACY_GET = BLE_GAP_SVC_BASE + 5, /**< Get Privacy settings*/ ++ SD_BLE_GAP_ADV_DATA_SET = BLE_GAP_SVC_BASE + 6, /**< Set Advertising Data. */ ++ SD_BLE_GAP_ADV_START = BLE_GAP_SVC_BASE + 7, /**< Start Advertising. */ ++ SD_BLE_GAP_ADV_STOP = BLE_GAP_SVC_BASE + 8, /**< Stop Advertising. */ ++ SD_BLE_GAP_CONN_PARAM_UPDATE = BLE_GAP_SVC_BASE + 9, /**< Connection Parameter Update. */ ++ SD_BLE_GAP_DISCONNECT = BLE_GAP_SVC_BASE + 10, /**< Disconnect. */ ++ SD_BLE_GAP_TX_POWER_SET = BLE_GAP_SVC_BASE + 11, /**< Set TX Power. */ ++ SD_BLE_GAP_APPEARANCE_SET = BLE_GAP_SVC_BASE + 12, /**< Set Appearance. */ ++ SD_BLE_GAP_APPEARANCE_GET = BLE_GAP_SVC_BASE + 13, /**< Get Appearance. */ ++ SD_BLE_GAP_PPCP_SET = BLE_GAP_SVC_BASE + 14, /**< Set PPCP. */ ++ SD_BLE_GAP_PPCP_GET = BLE_GAP_SVC_BASE + 15, /**< Get PPCP. */ ++ SD_BLE_GAP_DEVICE_NAME_SET = BLE_GAP_SVC_BASE + 16, /**< Set Device Name. */ ++ SD_BLE_GAP_DEVICE_NAME_GET = BLE_GAP_SVC_BASE + 17, /**< Get Device Name. */ ++ SD_BLE_GAP_AUTHENTICATE = BLE_GAP_SVC_BASE + 18, /**< Initiate Pairing/Bonding. */ ++ SD_BLE_GAP_SEC_PARAMS_REPLY = BLE_GAP_SVC_BASE + 19, /**< Reply with Security Parameters. */ ++ SD_BLE_GAP_AUTH_KEY_REPLY = BLE_GAP_SVC_BASE + 20, /**< Reply with an authentication key. */ ++ SD_BLE_GAP_LESC_DHKEY_REPLY = BLE_GAP_SVC_BASE + 21, /**< Reply with an LE Secure Connections DHKey. */ ++ SD_BLE_GAP_KEYPRESS_NOTIFY = BLE_GAP_SVC_BASE + 22, /**< Notify of a keypress during an authentication procedure. */ ++ SD_BLE_GAP_LESC_OOB_DATA_GET = BLE_GAP_SVC_BASE + 23, /**< Get the local LE Secure Connections OOB data. */ ++ SD_BLE_GAP_LESC_OOB_DATA_SET = BLE_GAP_SVC_BASE + 24, /**< Set the remote LE Secure Connections OOB data. */ ++ SD_BLE_GAP_ENCRYPT = BLE_GAP_SVC_BASE + 25, /**< Initiate encryption procedure. */ ++ SD_BLE_GAP_SEC_INFO_REPLY = BLE_GAP_SVC_BASE + 26, /**< Reply with Security Information. */ ++ SD_BLE_GAP_CONN_SEC_GET = BLE_GAP_SVC_BASE + 27, /**< Obtain connection security level. */ ++ SD_BLE_GAP_RSSI_START = BLE_GAP_SVC_BASE + 28, /**< Start reporting of changes in RSSI. */ ++ SD_BLE_GAP_RSSI_STOP = BLE_GAP_SVC_BASE + 29, /**< Stop reporting of changes in RSSI. */ ++ SD_BLE_GAP_SCAN_START = BLE_GAP_SVC_BASE + 30, /**< Start Scanning. */ ++ SD_BLE_GAP_SCAN_STOP = BLE_GAP_SVC_BASE + 31, /**< Stop Scanning. */ ++ SD_BLE_GAP_CONNECT = BLE_GAP_SVC_BASE + 32, /**< Connect. */ ++ SD_BLE_GAP_CONNECT_CANCEL = BLE_GAP_SVC_BASE + 33, /**< Cancel ongoing connection procedure. */ ++ SD_BLE_GAP_RSSI_GET = BLE_GAP_SVC_BASE + 34, /**< Get the last RSSI sample. */ ++ SD_BLE_GAP_PHY_UPDATE = BLE_GAP_SVC_BASE + 35, /**< Initiate or respond to a PHY Update Procedure. */ ++ SD_BLE_GAP_DATA_LENGTH_UPDATE = BLE_GAP_SVC_BASE + 36, /**< Initiate or respond to a Data Length Update Procedure. */ ++}; ++ ++/**@brief GAP Event IDs. ++ * IDs that uniquely identify an event coming from the stack to the application. ++ */ ++enum BLE_GAP_EVTS ++{ ++ BLE_GAP_EVT_CONNECTED = BLE_GAP_EVT_BASE, ++ BLE_GAP_EVT_DISCONNECTED = BLE_GAP_EVT_BASE + 1, /**< Disconnected from peer. \n See @ref ble_gap_evt_disconnected_t. */ ++ BLE_GAP_EVT_CONN_PARAM_UPDATE = BLE_GAP_EVT_BASE + 2, /**< Connection Parameters updated. \n See @ref ble_gap_evt_conn_param_update_t. */ ++ BLE_GAP_EVT_SEC_PARAMS_REQUEST = BLE_GAP_EVT_BASE + 3, /**< Request to provide security parameters. \n Reply with @ref sd_ble_gap_sec_params_reply. \n See @ref ble_gap_evt_sec_params_request_t. */ ++ BLE_GAP_EVT_SEC_INFO_REQUEST = BLE_GAP_EVT_BASE + 4, /**< Request to provide security information. \n Reply with @ref sd_ble_gap_sec_info_reply. \n See @ref ble_gap_evt_sec_info_request_t. */ ++ BLE_GAP_EVT_PASSKEY_DISPLAY = BLE_GAP_EVT_BASE + 5, /**< Request to display a passkey to the user. \n In LESC Numeric Comparison, reply with @ref sd_ble_gap_auth_key_reply. \n See @ref ble_gap_evt_passkey_display_t. */ ++ BLE_GAP_EVT_KEY_PRESSED = BLE_GAP_EVT_BASE + 6, /**< Notification of a keypress on the remote device.\n See @ref ble_gap_evt_key_pressed_t */ ++ BLE_GAP_EVT_AUTH_KEY_REQUEST = BLE_GAP_EVT_BASE + 7, /**< Request to provide an authentication key. \n Reply with @ref sd_ble_gap_auth_key_reply. \n See @ref ble_gap_evt_auth_key_request_t. */ ++ BLE_GAP_EVT_LESC_DHKEY_REQUEST = BLE_GAP_EVT_BASE + 8, /**< Request to calculate an LE Secure Connections DHKey. \n Reply with @ref sd_ble_gap_lesc_dhkey_reply. \n See @ref ble_gap_evt_lesc_dhkey_request_t */ ++ BLE_GAP_EVT_AUTH_STATUS = BLE_GAP_EVT_BASE + 9, /**< Authentication procedure completed with status. \n See @ref ble_gap_evt_auth_status_t. */ ++ BLE_GAP_EVT_CONN_SEC_UPDATE = BLE_GAP_EVT_BASE + 10, /**< Connection security updated. \n See @ref ble_gap_evt_conn_sec_update_t. */ ++ BLE_GAP_EVT_TIMEOUT = BLE_GAP_EVT_BASE + 11, /**< Timeout expired. \n See @ref ble_gap_evt_timeout_t. */ ++ BLE_GAP_EVT_RSSI_CHANGED = BLE_GAP_EVT_BASE + 12, /**< RSSI report. \n See @ref ble_gap_evt_rssi_changed_t. */ ++ BLE_GAP_EVT_ADV_REPORT = BLE_GAP_EVT_BASE + 13, /**< Advertising report. \n See @ref ble_gap_evt_adv_report_t. */ ++ BLE_GAP_EVT_SEC_REQUEST = BLE_GAP_EVT_BASE + 14, /**< Security Request. \n See @ref ble_gap_evt_sec_request_t. */ ++ BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST = BLE_GAP_EVT_BASE + 15, /**< Connection Parameter Update Request. \n Reply with @ref sd_ble_gap_conn_param_update. \n See @ref ble_gap_evt_conn_param_update_request_t. */ ++ BLE_GAP_EVT_SCAN_REQ_REPORT = BLE_GAP_EVT_BASE + 16, /**< Scan request report. \n See @ref ble_gap_evt_scan_req_report_t. */ ++ BLE_GAP_EVT_PHY_UPDATE_REQUEST = BLE_GAP_EVT_BASE + 17, /**< PHY Update Request. \n Reply with @ref sd_ble_gap_phy_update. \n See @ref ble_gap_evt_phy_update_request_t. */ ++ BLE_GAP_EVT_PHY_UPDATE = BLE_GAP_EVT_BASE + 18, /**< PHY Update Procedure is complete. \n See @ref ble_gap_evt_phy_update_t. */ ++ BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST = BLE_GAP_EVT_BASE + 19, /**< Data Length Update Request. \n Reply with @ref sd_ble_gap_data_length_update.\n See @ref ble_gap_evt_data_length_update_request_t. */ ++ BLE_GAP_EVT_DATA_LENGTH_UPDATE = BLE_GAP_EVT_BASE + 20, /**< LL Data Channel PDU payload length updated. \n See @ref ble_gap_evt_data_length_update_t. */ ++}; ++ ++/**@brief GAP Option IDs. ++ * IDs that uniquely identify a GAP option. ++ */ ++enum BLE_GAP_OPTS ++{ ++ BLE_GAP_OPT_CH_MAP = BLE_GAP_OPT_BASE, /**< Channel Map. @ref ble_gap_opt_ch_map_t */ ++ BLE_GAP_OPT_LOCAL_CONN_LATENCY = BLE_GAP_OPT_BASE + 1, /**< Local connection latency. @ref ble_gap_opt_local_conn_latency_t */ ++ BLE_GAP_OPT_PASSKEY = BLE_GAP_OPT_BASE + 2, /**< Set passkey. @ref ble_gap_opt_passkey_t */ ++ BLE_GAP_OPT_SCAN_REQ_REPORT = BLE_GAP_OPT_BASE + 3, /**< Scan request report. @ref ble_gap_opt_scan_req_report_t */ ++ BLE_GAP_OPT_COMPAT_MODE_1 = BLE_GAP_OPT_BASE + 4, /**< Compatibility mode. @ref ble_gap_opt_compat_mode_1_t */ ++ BLE_GAP_OPT_AUTH_PAYLOAD_TIMEOUT = BLE_GAP_OPT_BASE + 5, /**< Set Authenticated payload timeout. @ref ble_gap_opt_auth_payload_timeout_t */ ++ BLE_GAP_OPT_SLAVE_LATENCY_DISABLE = BLE_GAP_OPT_BASE + 6, /**< Disable slave latency. @ref ble_gap_opt_slave_latency_disable_t */ ++}; ++ ++/**@brief GAP Configuration IDs. ++ * ++ * IDs that uniquely identify a GAP configuration. ++ */ ++enum BLE_GAP_CFGS ++{ ++ BLE_GAP_CFG_ROLE_COUNT = BLE_GAP_CFG_BASE, /**< Role count configuration. */ ++ BLE_GAP_CFG_DEVICE_NAME = BLE_GAP_CFG_BASE + 1, /**< Device name configuration. */ ++}; ++ ++/** @} */ ++ ++/**@addtogroup BLE_GAP_DEFINES Defines ++ * @{ */ ++ ++/**@defgroup BLE_ERRORS_GAP SVC return values specific to GAP ++ * @{ */ ++#define BLE_ERROR_GAP_UUID_LIST_MISMATCH (NRF_GAP_ERR_BASE + 0x000) /**< UUID list does not contain an integral number of UUIDs. */ ++#define BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST (NRF_GAP_ERR_BASE + 0x001) /**< Use of Whitelist not permitted with discoverable advertising. */ ++#define BLE_ERROR_GAP_INVALID_BLE_ADDR (NRF_GAP_ERR_BASE + 0x002) /**< The upper two bits of the address do not correspond to the specified address type. */ ++#define BLE_ERROR_GAP_WHITELIST_IN_USE (NRF_GAP_ERR_BASE + 0x003) /**< Attempt to modify the whitelist while already in use by another operation. */ ++#define BLE_ERROR_GAP_DEVICE_IDENTITIES_IN_USE (NRF_GAP_ERR_BASE + 0x004) /**< Attempt to modify the device identity list while already in use by another operation. */ ++#define BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE (NRF_GAP_ERR_BASE + 0x005) /**< The device identity list contains entries with duplicate identity addresses. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_ROLES GAP Roles ++ * @{ */ ++#define BLE_GAP_ROLE_INVALID 0x0 /**< Invalid Role. */ ++#define BLE_GAP_ROLE_PERIPH 0x1 /**< Peripheral Role. */ ++#define BLE_GAP_ROLE_CENTRAL 0x2 /**< Central Role. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_TIMEOUT_SOURCES GAP Timeout sources ++ * @{ */ ++#define BLE_GAP_TIMEOUT_SRC_ADVERTISING 0x00 /**< Advertising timeout. */ ++#define BLE_GAP_TIMEOUT_SRC_SCAN 0x01 /**< Scanning timeout. */ ++#define BLE_GAP_TIMEOUT_SRC_CONN 0x02 /**< Connection timeout. */ ++#define BLE_GAP_TIMEOUT_SRC_AUTH_PAYLOAD 0x03 /**< Authenticated payload timeout. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_ADDR_TYPES GAP Address types ++ * @{ */ ++#define BLE_GAP_ADDR_TYPE_PUBLIC 0x00 /**< Public address. */ ++#define BLE_GAP_ADDR_TYPE_RANDOM_STATIC 0x01 /**< Random static address. */ ++#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE 0x02 /**< Random private resolvable address. */ ++#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE 0x03 /**< Random private non-resolvable address. */ ++/**@} */ ++ ++ ++/**@brief The default interval in seconds at which a private address is refreshed. */ ++#define BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S (900) /* 15 minutes. */ ++/**@brief The maximum interval in seconds at which a private address can be refreshed. */ ++#define BLE_GAP_MAX_PRIVATE_ADDR_CYCLE_INTERVAL_S (41400) /* 11 hours 30 minutes. */ ++ ++ ++/** @brief BLE address length. */ ++#define BLE_GAP_ADDR_LEN (6) ++ ++ ++/**@defgroup BLE_GAP_PRIVACY_MODES Privacy modes ++ * @{ */ ++#define BLE_GAP_PRIVACY_MODE_OFF 0x00 /**< Device will send and accept its identity address for its own address. */ ++#define BLE_GAP_PRIVACY_MODE_DEVICE_PRIVACY 0x01 /**< Device will send and accept only private addresses for its own address. */ ++#define BLE_GAP_PRIVACY_MODE_NETWORK_PRIVACY 0x02 /**< Device will send and accept only private addresses for its own address, ++ and will not accept a peer using identity address as sender address when ++ the peer IRK is exchanged, non-zero and added to the identity list. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_AD_TYPE_DEFINITIONS GAP Advertising and Scan Response Data format ++ * @note Found at https://www.bluetooth.org/Technical/AssignedNumbers/generic_access_profile.htm ++ * @{ */ ++#define BLE_GAP_AD_TYPE_FLAGS 0x01 /**< Flags for discoverability. */ ++#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE 0x02 /**< Partial list of 16 bit service UUIDs. */ ++#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE 0x03 /**< Complete list of 16 bit service UUIDs. */ ++#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_MORE_AVAILABLE 0x04 /**< Partial list of 32 bit service UUIDs. */ ++#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_COMPLETE 0x05 /**< Complete list of 32 bit service UUIDs. */ ++#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_MORE_AVAILABLE 0x06 /**< Partial list of 128 bit service UUIDs. */ ++#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_COMPLETE 0x07 /**< Complete list of 128 bit service UUIDs. */ ++#define BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME 0x08 /**< Short local device name. */ ++#define BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME 0x09 /**< Complete local device name. */ ++#define BLE_GAP_AD_TYPE_TX_POWER_LEVEL 0x0A /**< Transmit power level. */ ++#define BLE_GAP_AD_TYPE_CLASS_OF_DEVICE 0x0D /**< Class of device. */ ++#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C 0x0E /**< Simple Pairing Hash C. */ ++#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R 0x0F /**< Simple Pairing Randomizer R. */ ++#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_TK_VALUE 0x10 /**< Security Manager TK Value. */ ++#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_OOB_FLAGS 0x11 /**< Security Manager Out Of Band Flags. */ ++#define BLE_GAP_AD_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE 0x12 /**< Slave Connection Interval Range. */ ++#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_16BIT 0x14 /**< List of 16-bit Service Solicitation UUIDs. */ ++#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_128BIT 0x15 /**< List of 128-bit Service Solicitation UUIDs. */ ++#define BLE_GAP_AD_TYPE_SERVICE_DATA 0x16 /**< Service Data - 16-bit UUID. */ ++#define BLE_GAP_AD_TYPE_PUBLIC_TARGET_ADDRESS 0x17 /**< Public Target Address. */ ++#define BLE_GAP_AD_TYPE_RANDOM_TARGET_ADDRESS 0x18 /**< Random Target Address. */ ++#define BLE_GAP_AD_TYPE_APPEARANCE 0x19 /**< Appearance. */ ++#define BLE_GAP_AD_TYPE_ADVERTISING_INTERVAL 0x1A /**< Advertising Interval. */ ++#define BLE_GAP_AD_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS 0x1B /**< LE Bluetooth Device Address. */ ++#define BLE_GAP_AD_TYPE_LE_ROLE 0x1C /**< LE Role. */ ++#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C256 0x1D /**< Simple Pairing Hash C-256. */ ++#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R256 0x1E /**< Simple Pairing Randomizer R-256. */ ++#define BLE_GAP_AD_TYPE_SERVICE_DATA_32BIT_UUID 0x20 /**< Service Data - 32-bit UUID. */ ++#define BLE_GAP_AD_TYPE_SERVICE_DATA_128BIT_UUID 0x21 /**< Service Data - 128-bit UUID. */ ++#define BLE_GAP_AD_TYPE_LESC_CONFIRMATION_VALUE 0x22 /**< LE Secure Connections Confirmation Value */ ++#define BLE_GAP_AD_TYPE_LESC_RANDOM_VALUE 0x23 /**< LE Secure Connections Random Value */ ++#define BLE_GAP_AD_TYPE_URI 0x24 /**< URI */ ++#define BLE_GAP_AD_TYPE_3D_INFORMATION_DATA 0x3D /**< 3D Information Data. */ ++#define BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA 0xFF /**< Manufacturer Specific Data. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_ADV_FLAGS GAP Advertisement Flags ++ * @{ */ ++#define BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE (0x01) /**< LE Limited Discoverable Mode. */ ++#define BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE (0x02) /**< LE General Discoverable Mode. */ ++#define BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED (0x04) /**< BR/EDR not supported. */ ++#define BLE_GAP_ADV_FLAG_LE_BR_EDR_CONTROLLER (0x08) /**< Simultaneous LE and BR/EDR, Controller. */ ++#define BLE_GAP_ADV_FLAG_LE_BR_EDR_HOST (0x10) /**< Simultaneous LE and BR/EDR, Host. */ ++#define BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE (BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE Limited Discoverable Mode, BR/EDR not supported. */ ++#define BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE (BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE General Discoverable Mode, BR/EDR not supported. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_ADV_INTERVALS GAP Advertising interval max and min ++ * @{ */ ++#define BLE_GAP_ADV_INTERVAL_MIN 0x0020 /**< Minimum Advertising interval in 625 us units, i.e. 20 ms. */ ++#define BLE_GAP_ADV_INTERVAL_MAX 0x4000 /**< Maximum Advertising interval in 625 us units, i.e. 10.24 s. */ ++ /**@} */ ++ ++ ++/**@defgroup BLE_GAP_SCAN_INTERVALS GAP Scan interval max and min ++ * @{ */ ++#define BLE_GAP_SCAN_INTERVAL_MIN 0x0004 /**< Minimum Scan interval in 625 us units, i.e. 2.5 ms. */ ++#define BLE_GAP_SCAN_INTERVAL_MAX 0x4000 /**< Maximum Scan interval in 625 us units, i.e. 10.24 s. */ ++ /** @} */ ++ ++ ++/**@defgroup BLE_GAP_SCAN_WINDOW GAP Scan window max and min ++ * @{ */ ++#define BLE_GAP_SCAN_WINDOW_MIN 0x0004 /**< Minimum Scan window in 625 us units, i.e. 2.5 ms. */ ++#define BLE_GAP_SCAN_WINDOW_MAX 0x4000 /**< Maximum Scan window in 625 us units, i.e. 10.24 s. */ ++ /** @} */ ++ ++ ++/**@defgroup BLE_GAP_SCAN_TIMEOUT GAP Scan timeout max and min ++ * @{ */ ++#define BLE_GAP_SCAN_TIMEOUT_MIN 0x0001 /**< Minimum Scan timeout in seconds. */ ++#define BLE_GAP_SCAN_TIMEOUT_MAX 0xFFFF /**< Maximum Scan timeout in seconds. */ ++ /** @} */ ++ ++ ++/**@brief Maximum size of advertising data in octets. */ ++#define BLE_GAP_ADV_MAX_SIZE (31) ++ ++ ++/**@defgroup BLE_GAP_ADV_TYPES GAP Advertising types ++ * @{ */ ++#define BLE_GAP_ADV_TYPE_ADV_IND 0x00 /**< Connectable undirected. */ ++#define BLE_GAP_ADV_TYPE_ADV_DIRECT_IND 0x01 /**< Connectable directed. */ ++#define BLE_GAP_ADV_TYPE_ADV_SCAN_IND 0x02 /**< Scannable undirected. */ ++#define BLE_GAP_ADV_TYPE_ADV_NONCONN_IND 0x03 /**< Non connectable undirected. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_ADV_FILTER_POLICIES GAP Advertising filter policies ++ * @{ */ ++#define BLE_GAP_ADV_FP_ANY 0x00 /**< Allow scan requests and connect requests from any device. */ ++#define BLE_GAP_ADV_FP_FILTER_SCANREQ 0x01 /**< Filter scan requests with whitelist. */ ++#define BLE_GAP_ADV_FP_FILTER_CONNREQ 0x02 /**< Filter connect requests with whitelist. */ ++#define BLE_GAP_ADV_FP_FILTER_BOTH 0x03 /**< Filter both scan and connect requests with whitelist. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_ADV_TIMEOUT_VALUES GAP Advertising timeout values ++ * @{ */ ++#define BLE_GAP_ADV_TIMEOUT_LIMITED_MAX (180) /**< Maximum advertising time in limited discoverable mode (TGAP(lim_adv_timeout) = 180 s). */ ++#define BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED (0) /**< Unlimited advertising in general discoverable mode. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_DISC_MODES GAP Discovery modes ++ * @{ */ ++#define BLE_GAP_DISC_MODE_NOT_DISCOVERABLE 0x00 /**< Not discoverable discovery Mode. */ ++#define BLE_GAP_DISC_MODE_LIMITED 0x01 /**< Limited Discovery Mode. */ ++#define BLE_GAP_DISC_MODE_GENERAL 0x02 /**< General Discovery Mode. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_IO_CAPS GAP IO Capabilities ++ * @{ */ ++#define BLE_GAP_IO_CAPS_DISPLAY_ONLY 0x00 /**< Display Only. */ ++#define BLE_GAP_IO_CAPS_DISPLAY_YESNO 0x01 /**< Display and Yes/No entry. */ ++#define BLE_GAP_IO_CAPS_KEYBOARD_ONLY 0x02 /**< Keyboard Only. */ ++#define BLE_GAP_IO_CAPS_NONE 0x03 /**< No I/O capabilities. */ ++#define BLE_GAP_IO_CAPS_KEYBOARD_DISPLAY 0x04 /**< Keyboard and Display. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_AUTH_KEY_TYPES GAP Authentication Key Types ++ * @{ */ ++#define BLE_GAP_AUTH_KEY_TYPE_NONE 0x00 /**< No key (may be used to reject). */ ++#define BLE_GAP_AUTH_KEY_TYPE_PASSKEY 0x01 /**< 6-digit Passkey. */ ++#define BLE_GAP_AUTH_KEY_TYPE_OOB 0x02 /**< Out Of Band data. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_KP_NOT_TYPES GAP Keypress Notification Types ++ * @{ */ ++#define BLE_GAP_KP_NOT_TYPE_PASSKEY_START 0x00 /**< Passkey entry started. */ ++#define BLE_GAP_KP_NOT_TYPE_PASSKEY_DIGIT_IN 0x01 /**< Passkey digit entered. */ ++#define BLE_GAP_KP_NOT_TYPE_PASSKEY_DIGIT_OUT 0x02 /**< Passkey digit erased. */ ++#define BLE_GAP_KP_NOT_TYPE_PASSKEY_CLEAR 0x03 /**< Passkey cleared. */ ++#define BLE_GAP_KP_NOT_TYPE_PASSKEY_END 0x04 /**< Passkey entry completed. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_SEC_STATUS GAP Security status ++ * @{ */ ++#define BLE_GAP_SEC_STATUS_SUCCESS 0x00 /**< Procedure completed with success. */ ++#define BLE_GAP_SEC_STATUS_TIMEOUT 0x01 /**< Procedure timed out. */ ++#define BLE_GAP_SEC_STATUS_PDU_INVALID 0x02 /**< Invalid PDU received. */ ++#define BLE_GAP_SEC_STATUS_RFU_RANGE1_BEGIN 0x03 /**< Reserved for Future Use range #1 begin. */ ++#define BLE_GAP_SEC_STATUS_RFU_RANGE1_END 0x80 /**< Reserved for Future Use range #1 end. */ ++#define BLE_GAP_SEC_STATUS_PASSKEY_ENTRY_FAILED 0x81 /**< Passkey entry failed (user canceled or other). */ ++#define BLE_GAP_SEC_STATUS_OOB_NOT_AVAILABLE 0x82 /**< Out of Band Key not available. */ ++#define BLE_GAP_SEC_STATUS_AUTH_REQ 0x83 /**< Authentication requirements not met. */ ++#define BLE_GAP_SEC_STATUS_CONFIRM_VALUE 0x84 /**< Confirm value failed. */ ++#define BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP 0x85 /**< Pairing not supported. */ ++#define BLE_GAP_SEC_STATUS_ENC_KEY_SIZE 0x86 /**< Encryption key size. */ ++#define BLE_GAP_SEC_STATUS_SMP_CMD_UNSUPPORTED 0x87 /**< Unsupported SMP command. */ ++#define BLE_GAP_SEC_STATUS_UNSPECIFIED 0x88 /**< Unspecified reason. */ ++#define BLE_GAP_SEC_STATUS_REPEATED_ATTEMPTS 0x89 /**< Too little time elapsed since last attempt. */ ++#define BLE_GAP_SEC_STATUS_INVALID_PARAMS 0x8A /**< Invalid parameters. */ ++#define BLE_GAP_SEC_STATUS_DHKEY_FAILURE 0x8B /**< DHKey check failure. */ ++#define BLE_GAP_SEC_STATUS_NUM_COMP_FAILURE 0x8C /**< Numeric Comparison failure. */ ++#define BLE_GAP_SEC_STATUS_BR_EDR_IN_PROG 0x8D /**< BR/EDR pairing in progress. */ ++#define BLE_GAP_SEC_STATUS_X_TRANS_KEY_DISALLOWED 0x8E /**< BR/EDR Link Key cannot be used for LE keys. */ ++#define BLE_GAP_SEC_STATUS_RFU_RANGE2_BEGIN 0x8F /**< Reserved for Future Use range #2 begin. */ ++#define BLE_GAP_SEC_STATUS_RFU_RANGE2_END 0xFF /**< Reserved for Future Use range #2 end. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_SEC_STATUS_SOURCES GAP Security status sources ++ * @{ */ ++#define BLE_GAP_SEC_STATUS_SOURCE_LOCAL 0x00 /**< Local failure. */ ++#define BLE_GAP_SEC_STATUS_SOURCE_REMOTE 0x01 /**< Remote failure. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_CP_LIMITS GAP Connection Parameters Limits ++ * @{ */ ++#define BLE_GAP_CP_MIN_CONN_INTVL_NONE 0xFFFF /**< No new minimum connection interval specified in connect parameters. */ ++#define BLE_GAP_CP_MIN_CONN_INTVL_MIN 0x0006 /**< Lowest minimum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ ++#define BLE_GAP_CP_MIN_CONN_INTVL_MAX 0x0C80 /**< Highest minimum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ ++#define BLE_GAP_CP_MAX_CONN_INTVL_NONE 0xFFFF /**< No new maximum connection interval specified in connect parameters. */ ++#define BLE_GAP_CP_MAX_CONN_INTVL_MIN 0x0006 /**< Lowest maximum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ ++#define BLE_GAP_CP_MAX_CONN_INTVL_MAX 0x0C80 /**< Highest maximum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ ++#define BLE_GAP_CP_SLAVE_LATENCY_MAX 0x01F3 /**< Highest slave latency permitted, in connection events. */ ++#define BLE_GAP_CP_CONN_SUP_TIMEOUT_NONE 0xFFFF /**< No new supervision timeout specified in connect parameters. */ ++#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MIN 0x000A /**< Lowest supervision timeout permitted, in units of 10 ms, i.e. 100 ms. */ ++#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MAX 0x0C80 /**< Highest supervision timeout permitted, in units of 10 ms, i.e. 32 s. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_DEVNAME GAP device name defines. ++ * @{ */ ++#define BLE_GAP_DEVNAME_DEFAULT "nRF5x" /**< Default device name value. */ ++#define BLE_GAP_DEVNAME_DEFAULT_LEN 31 /**< Default number of octets in device name. */ ++#define BLE_GAP_DEVNAME_MAX_LEN 248 /**< Maximum number of octets in device name. */ ++/**@} */ ++ ++ ++/**@brief Disable RSSI events for connections */ ++#define BLE_GAP_RSSI_THRESHOLD_INVALID 0xFF ++ ++/**@defgroup BLE_GAP_PHYS GAP PHYs ++ * @{ */ ++#define BLE_GAP_PHY_AUTO 0x00 /**< Automatic PHY selection. Refer @ref sd_ble_gap_phy_update for more information.*/ ++#define BLE_GAP_PHY_1MBPS 0x01 /**< 1 Mbps PHY. */ ++#define BLE_GAP_PHY_2MBPS 0x02 /**< 2 Mbps PHY. */ ++#define BLE_GAP_PHY_CODED 0x04 /**< Coded PHY. */ ++ ++/**@} */ ++ ++/**@defgroup BLE_GAP_CONN_SEC_MODE_SET_MACROS GAP attribute security requirement setters ++ * ++ * See @ref ble_gap_conn_sec_mode_t. ++ * @{ */ ++/**@brief Set sec_mode pointed to by ptr to have no access rights.*/ ++#define BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(ptr) do {(ptr)->sm = 0; (ptr)->lv = 0;} while(0) ++/**@brief Set sec_mode pointed to by ptr to require no protection, open link.*/ ++#define BLE_GAP_CONN_SEC_MODE_SET_OPEN(ptr) do {(ptr)->sm = 1; (ptr)->lv = 1;} while(0) ++/**@brief Set sec_mode pointed to by ptr to require encryption, but no MITM protection.*/ ++#define BLE_GAP_CONN_SEC_MODE_SET_ENC_NO_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 2;} while(0) ++/**@brief Set sec_mode pointed to by ptr to require encryption and MITM protection.*/ ++#define BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 3;} while(0) ++/**@brief Set sec_mode pointed to by ptr to require LESC encryption and MITM protection.*/ ++#define BLE_GAP_CONN_SEC_MODE_SET_LESC_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 4;} while(0) ++/**@brief Set sec_mode pointed to by ptr to require signing or encryption, no MITM protection needed.*/ ++#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_NO_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 1;} while(0) ++/**@brief Set sec_mode pointed to by ptr to require signing or encryption with MITM protection.*/ ++#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_WITH_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 2;} while(0) ++/**@} */ ++ ++ ++/**@brief GAP Security Random Number Length. */ ++#define BLE_GAP_SEC_RAND_LEN 8 ++ ++ ++/**@brief GAP Security Key Length. */ ++#define BLE_GAP_SEC_KEY_LEN 16 ++ ++ ++/**@brief GAP LE Secure Connections Elliptic Curve Diffie-Hellman P-256 Public Key Length. */ ++#define BLE_GAP_LESC_P256_PK_LEN 64 ++ ++ ++/**@brief GAP LE Secure Connections Elliptic Curve Diffie-Hellman DHKey Length. */ ++#define BLE_GAP_LESC_DHKEY_LEN 32 ++ ++ ++/**@brief GAP Passkey Length. */ ++#define BLE_GAP_PASSKEY_LEN 6 ++ ++ ++/**@brief Maximum amount of addresses in the whitelist. */ ++#define BLE_GAP_WHITELIST_ADDR_MAX_COUNT (8) ++ ++ ++/**@brief Maximum amount of identities in the device identities list. */ ++#define BLE_GAP_DEVICE_IDENTITIES_MAX_COUNT (8) ++ ++ ++/**@brief Default connection count for a configuration. */ ++#define BLE_GAP_CONN_COUNT_DEFAULT (1) ++ ++ ++/**@defgroup BLE_GAP_EVENT_LENGTH GAP event length defines. ++ * @{ */ ++#define BLE_GAP_EVENT_LENGTH_MIN (2) /**< Minimum event length, in 1.25 ms units. */ ++#define BLE_GAP_EVENT_LENGTH_DEFAULT (3) /**< Default event length, in 1.25 ms units. */ ++/**@} */ ++ ++ ++/**@defgroup BLE_GAP_ROLE_COUNT GAP concurrent connection count defines. ++ * @{ */ ++#define BLE_GAP_ROLE_COUNT_PERIPH_DEFAULT (1) /**< Default maximum number of connections concurrently acting as peripherals. */ ++#define BLE_GAP_ROLE_COUNT_CENTRAL_DEFAULT (3) /**< Default maximum number of connections concurrently acting as centrals. */ ++#define BLE_GAP_ROLE_COUNT_CENTRAL_SEC_DEFAULT (1) /**< Default number of SMP instances shared between all connections acting as centrals. */ ++#define BLE_GAP_ROLE_COUNT_COMBINED_MAX (20) /**< Maximum supported number of concurrent connections in the peripheral and central roles combined. */ ++ ++/**@} */ ++ ++/**@brief Automatic data length parameter. */ ++#define BLE_GAP_DATA_LENGTH_AUTO 0 ++ ++/**@defgroup BLE_GAP_AUTH_PAYLOAD_TIMEOUT Authenticated payload timeout defines. ++ * @{ */ ++#define BLE_GAP_AUTH_PAYLOAD_TIMEOUT_MAX (48000) /**< Maximum authenticated payload timeout in 10 ms units, i.e. 8 minutes. */ ++#define BLE_GAP_AUTH_PAYLOAD_TIMEOUT_MIN (1) /**< Minimum authenticated payload timeout in 10 ms units, i.e. 10 ms. */ ++/**@} */ ++ ++/**@defgroup GAP_SEC_MODES GAP Security Modes ++ * @{ */ ++#define BLE_GAP_SEC_MODE 0x00 /**< No key (may be used to reject). */ ++/**@} */ ++/** @} */ ++ ++ ++/**@addtogroup BLE_GAP_STRUCTURES Structures ++ * @{ */ ++ ++/**@brief Bluetooth Low Energy address. */ ++typedef struct ++{ ++ uint8_t addr_id_peer : 1; /**< Only valid for peer addresses. ++ Reference to peer in device identities list (as set with @ref sd_ble_gap_device_identities_set) when peer is using privacy. */ ++ uint8_t addr_type : 7; /**< See @ref BLE_GAP_ADDR_TYPES. */ ++ uint8_t addr[BLE_GAP_ADDR_LEN]; /**< 48-bit address, LSB format. */ ++} ble_gap_addr_t; ++ ++ ++/**@brief GAP connection parameters. ++ * ++ * @note When ble_conn_params_t is received in an event, both min_conn_interval and ++ * max_conn_interval will be equal to the connection interval set by the central. ++ * ++ * @note If both conn_sup_timeout and max_conn_interval are specified, then the following constraint applies: ++ * conn_sup_timeout * 4 > (1 + slave_latency) * max_conn_interval ++ * that corresponds to the following Bluetooth Spec requirement: ++ * The Supervision_Timeout in milliseconds shall be larger than ++ * (1 + Conn_Latency) * Conn_Interval_Max * 2, where Conn_Interval_Max is given in milliseconds. ++ */ ++typedef struct ++{ ++ uint16_t min_conn_interval; /**< Minimum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ ++ uint16_t max_conn_interval; /**< Maximum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ ++ uint16_t slave_latency; /**< Slave Latency in number of connection events, see @ref BLE_GAP_CP_LIMITS.*/ ++ uint16_t conn_sup_timeout; /**< Connection Supervision Timeout in 10 ms units, see @ref BLE_GAP_CP_LIMITS.*/ ++} ble_gap_conn_params_t; ++ ++ ++/**@brief GAP connection security modes. ++ * ++ * Security Mode 0 Level 0: No access permissions at all (this level is not defined by the Bluetooth Core specification).\n ++ * Security Mode 1 Level 1: No security is needed (aka open link).\n ++ * Security Mode 1 Level 2: Encrypted link required, MITM protection not necessary.\n ++ * Security Mode 1 Level 3: MITM protected encrypted link required.\n ++ * Security Mode 1 Level 4: LESC MITM protected encrypted link using a 128-bit strength encryption key required.\n ++ * Security Mode 2 Level 1: Signing or encryption required, MITM protection not necessary.\n ++ * Security Mode 2 Level 2: MITM protected signing required, unless link is MITM protected encrypted.\n ++ */ ++typedef struct ++{ ++ uint8_t sm : 4; /**< Security Mode (1 or 2), 0 for no permissions at all. */ ++ uint8_t lv : 4; /**< Level (1, 2, 3 or 4), 0 for no permissions at all. */ ++ ++} ble_gap_conn_sec_mode_t; ++ ++ ++/**@brief GAP connection security status.*/ ++typedef struct ++{ ++ ble_gap_conn_sec_mode_t sec_mode; /**< Currently active security mode for this connection.*/ ++ uint8_t encr_key_size; /**< Length of currently active encryption key, 7 to 16 octets (only applicable for bonding procedures). */ ++} ble_gap_conn_sec_t; ++ ++/**@brief Identity Resolving Key. */ ++typedef struct ++{ ++ uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Array containing IRK. */ ++} ble_gap_irk_t; ++ ++ ++/**@brief Channel mask for RF channels used in advertising. */ ++typedef struct ++{ ++ uint8_t ch_37_off : 1; /**< Setting this bit to 1 will turn off advertising on channel 37 */ ++ uint8_t ch_38_off : 1; /**< Setting this bit to 1 will turn off advertising on channel 38 */ ++ uint8_t ch_39_off : 1; /**< Setting this bit to 1 will turn off advertising on channel 39 */ ++} ble_gap_adv_ch_mask_t; ++ ++ ++/**@brief GAP advertising parameters. */ ++typedef struct ++{ ++ uint8_t type; /**< See @ref BLE_GAP_ADV_TYPES. */ ++ ble_gap_addr_t const *p_peer_addr; /**< Address of a known peer. ++ - When privacy is enabled and the local device use @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE addresses, the device identity list is searched for a matching ++ entry. If the local IRK for that device identity is set, the local IRK for that device will be used to generate the advertiser address field in the advertise packet. ++ - If type is @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND, this must be set to the targeted initiator. If the initiator is in the device identity list, ++ the peer IRK for that device will be used to generate the initiator address field in the ADV_DIRECT_IND packet. */ ++ uint8_t fp; /**< Filter Policy, see @ref BLE_GAP_ADV_FILTER_POLICIES. */ ++ uint16_t interval; /**< Advertising interval between 0x0020 and 0x4000 in 0.625 ms units (20 ms to 10.24 s), see @ref BLE_GAP_ADV_INTERVALS. ++ - If type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND, this parameter must be set to 0 for high duty cycle directed advertising. ++ - If type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND, set @ref BLE_GAP_ADV_INTERVAL_MIN <= interval <= @ref BLE_GAP_ADV_INTERVAL_MAX for low duty cycle advertising.*/ ++ uint16_t timeout; /**< Advertising timeout between 0x0001 and 0x3FFF in seconds, 0x0000 disables timeout. See also @ref BLE_GAP_ADV_TIMEOUT_VALUES. If type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND, this parameter must be set to 0 for High duty cycle directed advertising. */ ++ ble_gap_adv_ch_mask_t channel_mask; /**< Advertising channel mask. See @ref ble_gap_adv_ch_mask_t. */ ++} ble_gap_adv_params_t; ++ ++ ++/**@brief GAP scanning parameters. */ ++typedef struct ++{ ++ uint8_t active : 1; /**< If 1, perform active scanning (scan requests). */ ++ uint8_t use_whitelist : 1; /**< If 1, filter advertisers using current active whitelist. */ ++ uint8_t adv_dir_report : 1; /**< If 1, also report directed advertisements where the initiator field is set to a private resolvable address, ++ even if the address did not resolve to an entry in the device identity list. A report will be generated ++ even if the peer is not in the whitelist. */ ++ uint16_t interval; /**< Scan interval between 0x0004 and 0x4000 in 0.625 ms units (2.5 ms to 10.24 s). */ ++ uint16_t window; /**< Scan window between 0x0004 and 0x4000 in 0.625 ms units (2.5 ms to 10.24 s). */ ++ uint16_t timeout; /**< Scan timeout between 0x0001 and 0xFFFF in seconds, 0x0000 disables timeout. */ ++} ble_gap_scan_params_t; ++ ++ ++/**@brief Privacy. ++ * ++ * The privacy feature provides a way for the device to avoid being tracked over a period of time. ++ * The privacy feature, when enabled, hides the local device identity and replaces it with a private address ++ * that is automatically refreshed at a specified interval. ++ * ++ * If a device still wants to be recognized by other peers, it needs to share it's Identity Resolving Key (IRK). ++ * With this key, a device can generate a random private address that can only be recognized by peers in possession of that key, ++ * and devices can establish connections without revealing their real identities. ++ * ++ * Both network privacy (@ref BLE_GAP_PRIVACY_MODE_NETWORK_PRIVACY) and device privacy (@ref BLE_GAP_PRIVACY_MODE_DEVICE_PRIVACY) ++ * are supported. ++ * ++ * @note If the device IRK is updated, the new IRK becomes the one to be distributed in all ++ * bonding procedures performed after @ref sd_ble_gap_privacy_set returns. ++ * The IRK distributed during bonding procedure is the device IRK that is active when @ref sd_ble_gap_sec_params_reply is called. ++ */ ++typedef struct ++{ ++ uint8_t privacy_mode; /**< Privacy mode, see @ref BLE_GAP_PRIVACY_MODES. Default is @ref BLE_GAP_PRIVACY_MODE_OFF. */ ++ uint8_t private_addr_type; /**< The private address type must be either @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE or @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE. */ ++ uint16_t private_addr_cycle_s; /**< Private address cycle interval in seconds. Providing an address cycle value of 0 will use the default value defined by @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S. */ ++ ble_gap_irk_t *p_device_irk; /**< When used as input, pointer to IRK structure that will be used as the default IRK. If NULL, the device default IRK will be used. ++ When used as output, pointer to IRK structure where the current default IRK will be written to. If NULL, this argument is ignored. ++ By default, the default IRK is used to generate random private resolvable addresses for the local device unless instructed otherwise. */ ++} ble_gap_privacy_params_t; ++ ++ ++/**@brief PHY preferences for TX and RX ++ * @note tx_phys and rx_phys are bit fields. Multiple bits can be set in them to indicate multiple preferred PHYs for each direction. ++ * @code ++ * p_gap_phys->tx_phys = BLE_GAP_PHY_1MBPS | BLE_GAP_PHY_2MBPS; ++ * p_gap_phys->rx_phys = BLE_GAP_PHY_1MBPS | BLE_GAP_PHY_2MBPS; ++ * @endcode ++ * ++ */ ++typedef struct ++{ ++ uint8_t tx_phys; /**< Preferred transmit PHYs, see @ref BLE_GAP_PHYS. */ ++ uint8_t rx_phys; /**< Preferred receive PHYs, see @ref BLE_GAP_PHYS. */ ++} ble_gap_phys_t; ++ ++/** @brief Keys that can be exchanged during a bonding procedure. */ ++typedef struct ++{ ++ uint8_t enc : 1; /**< Long Term Key and Master Identification. */ ++ uint8_t id : 1; /**< Identity Resolving Key and Identity Address Information. */ ++ uint8_t sign : 1; /**< Connection Signature Resolving Key. */ ++ uint8_t link : 1; /**< Derive the Link Key from the LTK. */ ++} ble_gap_sec_kdist_t; ++ ++ ++/**@brief GAP security parameters. */ ++typedef struct ++{ ++ uint8_t bond : 1; /**< Perform bonding. */ ++ uint8_t mitm : 1; /**< Enable Man In The Middle protection. */ ++ uint8_t lesc : 1; /**< Enable LE Secure Connection pairing. */ ++ uint8_t keypress : 1; /**< Enable generation of keypress notifications. */ ++ uint8_t io_caps : 3; /**< IO capabilities, see @ref BLE_GAP_IO_CAPS. */ ++ uint8_t oob : 1; /**< The OOB data flag. ++ - In LE legacy pairing, this flag is set if a device has out of band authentication data. ++ The OOB method is used if both of the devices have out of band authentication data. ++ - In LE Secure Connections pairing, this flag is set if a device has the peer device's out of band authentication data. ++ The OOB method is used if at least one device has the peer device's OOB data available. */ ++ uint8_t min_key_size; /**< Minimum encryption key size in octets between 7 and 16. If 0 then not applicable in this instance. */ ++ uint8_t max_key_size; /**< Maximum encryption key size in octets between min_key_size and 16. */ ++ ble_gap_sec_kdist_t kdist_own; /**< Key distribution bitmap: keys that the local device will distribute. */ ++ ble_gap_sec_kdist_t kdist_peer; /**< Key distribution bitmap: keys that the remote device will distribute. */ ++} ble_gap_sec_params_t; ++ ++ ++/**@brief GAP Encryption Information. */ ++typedef struct ++{ ++ uint8_t ltk[BLE_GAP_SEC_KEY_LEN]; /**< Long Term Key. */ ++ uint8_t lesc : 1; /**< Key generated using LE Secure Connections. */ ++ uint8_t auth : 1; /**< Authenticated Key. */ ++ uint8_t ltk_len : 6; /**< LTK length in octets. */ ++} ble_gap_enc_info_t; ++ ++ ++/**@brief GAP Master Identification. */ ++typedef struct ++{ ++ uint16_t ediv; /**< Encrypted Diversifier. */ ++ uint8_t rand[BLE_GAP_SEC_RAND_LEN]; /**< Random Number. */ ++} ble_gap_master_id_t; ++ ++ ++/**@brief GAP Signing Information. */ ++typedef struct ++{ ++ uint8_t csrk[BLE_GAP_SEC_KEY_LEN]; /**< Connection Signature Resolving Key. */ ++} ble_gap_sign_info_t; ++ ++ ++/**@brief GAP LE Secure Connections P-256 Public Key. */ ++typedef struct ++{ ++ uint8_t pk[BLE_GAP_LESC_P256_PK_LEN]; /**< LE Secure Connections Elliptic Curve Diffie-Hellman P-256 Public Key. Stored in the standard SMP protocol format: {X,Y} both in little-endian. */ ++} ble_gap_lesc_p256_pk_t; ++ ++ ++/**@brief GAP LE Secure Connections DHKey. */ ++typedef struct ++{ ++ uint8_t key[BLE_GAP_LESC_DHKEY_LEN]; /**< LE Secure Connections Elliptic Curve Diffie-Hellman Key. Stored in little-endian. */ ++} ble_gap_lesc_dhkey_t; ++ ++ ++/**@brief GAP LE Secure Connections OOB data. */ ++typedef struct ++{ ++ ble_gap_addr_t addr; /**< Bluetooth address of the device. */ ++ uint8_t r[BLE_GAP_SEC_KEY_LEN]; /**< Random Number. */ ++ uint8_t c[BLE_GAP_SEC_KEY_LEN]; /**< Confirm Value. */ ++} ble_gap_lesc_oob_data_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_CONNECTED. */ ++typedef struct ++{ ++ ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 ++ and the address is the device's identity address. */ ++ uint8_t role; /**< BLE role for this connection, see @ref BLE_GAP_ROLES */ ++ ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ ++} ble_gap_evt_connected_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_DISCONNECTED. */ ++typedef struct ++{ ++ uint8_t reason; /**< HCI error code, see @ref BLE_HCI_STATUS_CODES. */ ++} ble_gap_evt_disconnected_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_CONN_PARAM_UPDATE. */ ++typedef struct ++{ ++ ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ ++} ble_gap_evt_conn_param_update_t; ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_PHY_UPDATE_REQUEST. */ ++typedef struct ++{ ++ ble_gap_phys_t peer_preferred_phys; /**< The PHYs the peer prefers to use. */ ++} ble_gap_evt_phy_update_request_t; ++ ++/**@brief Event Structure for @ref BLE_GAP_EVT_PHY_UPDATE. */ ++typedef struct ++{ ++ uint8_t status; /**< Status of the procedure, see @ref BLE_HCI_STATUS_CODES.*/ ++ uint8_t tx_phy; /**< TX PHY for this connection, see @ref BLE_GAP_PHYS. */ ++ uint8_t rx_phy; /**< RX PHY for this connection, see @ref BLE_GAP_PHYS. */ ++} ble_gap_evt_phy_update_t; ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST. */ ++typedef struct ++{ ++ ble_gap_sec_params_t peer_params; /**< Initiator Security Parameters. */ ++} ble_gap_evt_sec_params_request_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_SEC_INFO_REQUEST. */ ++typedef struct ++{ ++ ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ ++ ble_gap_master_id_t master_id; /**< Master Identification for LTK lookup. */ ++ uint8_t enc_info : 1; /**< If 1, Encryption Information required. */ ++ uint8_t id_info : 1; /**< If 1, Identity Information required. */ ++ uint8_t sign_info : 1; /**< If 1, Signing Information required. */ ++} ble_gap_evt_sec_info_request_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_PASSKEY_DISPLAY. */ ++typedef struct ++{ ++ uint8_t passkey[BLE_GAP_PASSKEY_LEN]; /**< 6-digit passkey in ASCII ('0'-'9' digits only). */ ++ uint8_t match_request : 1; /**< If 1 requires the application to report the match using @ref sd_ble_gap_auth_key_reply ++ with either @ref BLE_GAP_AUTH_KEY_TYPE_NONE if there is no match or ++ @ref BLE_GAP_AUTH_KEY_TYPE_PASSKEY if there is a match. */ ++} ble_gap_evt_passkey_display_t; ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_KEY_PRESSED. */ ++typedef struct ++{ ++ uint8_t kp_not; /**< Keypress notification type, see @ref BLE_GAP_KP_NOT_TYPES. */ ++} ble_gap_evt_key_pressed_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_AUTH_KEY_REQUEST. */ ++typedef struct ++{ ++ uint8_t key_type; /**< See @ref BLE_GAP_AUTH_KEY_TYPES. */ ++} ble_gap_evt_auth_key_request_t; ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST. */ ++typedef struct ++{ ++ ble_gap_lesc_p256_pk_t *p_pk_peer; /**< LE Secure Connections remote P-256 Public Key. This will point to the application-supplied memory ++ inside the keyset during the call to @ref sd_ble_gap_sec_params_reply. */ ++ uint8_t oobd_req :1; /**< LESC OOB data required. A call to @ref sd_ble_gap_lesc_oob_data_set is required to complete the procedure. */ ++} ble_gap_evt_lesc_dhkey_request_t; ++ ++ ++/**@brief Security levels supported. ++ * @note See Bluetooth Specification Version 4.2 Volume 3, Part C, Chapter 10, Section 10.2.1. ++*/ ++typedef struct ++{ ++ uint8_t lv1 : 1; /**< If 1: Level 1 is supported. */ ++ uint8_t lv2 : 1; /**< If 1: Level 2 is supported. */ ++ uint8_t lv3 : 1; /**< If 1: Level 3 is supported. */ ++ uint8_t lv4 : 1; /**< If 1: Level 4 is supported. */ ++} ble_gap_sec_levels_t; ++ ++ ++/**@brief Encryption Key. */ ++typedef struct ++{ ++ ble_gap_enc_info_t enc_info; /**< Encryption Information. */ ++ ble_gap_master_id_t master_id; /**< Master Identification. */ ++} ble_gap_enc_key_t; ++ ++ ++/**@brief Identity Key. */ ++typedef struct ++{ ++ ble_gap_irk_t id_info; /**< Identity Resolving Key. */ ++ ble_gap_addr_t id_addr_info; /**< Identity Address. */ ++} ble_gap_id_key_t; ++ ++ ++/**@brief Security Keys. */ ++typedef struct ++{ ++ ble_gap_enc_key_t *p_enc_key; /**< Encryption Key, or NULL. */ ++ ble_gap_id_key_t *p_id_key; /**< Identity Key, or NULL. */ ++ ble_gap_sign_info_t *p_sign_key; /**< Signing Key, or NULL. */ ++ ble_gap_lesc_p256_pk_t *p_pk; /**< LE Secure Connections P-256 Public Key. When in debug mode the application must use the value defined ++ in the Core Bluetooth Specification v4.2 Vol.3, Part H, Section 2.3.5.6.1 */ ++} ble_gap_sec_keys_t; ++ ++ ++/**@brief Security key set for both local and peer keys. */ ++typedef struct ++{ ++ ble_gap_sec_keys_t keys_own; /**< Keys distributed by the local device. For LE Secure Connections the encryption key will be generated locally and will always be stored if bonding. */ ++ ble_gap_sec_keys_t keys_peer; /**< Keys distributed by the remote device. For LE Secure Connections, p_enc_key must always be NULL. */ ++} ble_gap_sec_keyset_t; ++ ++ ++/**@brief Data Length Update Procedure parameters. */ ++typedef struct ++{ ++ uint16_t max_tx_octets; /**< Maximum number of payload octets that a Controller supports for transmission of a single Link Layer Data Channel PDU. */ ++ uint16_t max_rx_octets; /**< Maximum number of payload octets that a Controller supports for reception of a single Link Layer Data Channel PDU. */ ++ uint16_t max_tx_time_us; /**< Maximum time, in microseconds, that a Controller supports for transmission of a single Link Layer Data Channel PDU. */ ++ uint16_t max_rx_time_us; /**< Maximum time, in microseconds, that a Controller supports for reception of a single Link Layer Data Channel PDU. */ ++} ble_gap_data_length_params_t; ++ ++ ++/**@brief Data Length Update Procedure local limitation. */ ++typedef struct ++{ ++ uint16_t tx_payload_limited_octets; /**< If > 0, the requested TX packet length is too long by this many octets. */ ++ uint16_t rx_payload_limited_octets; /**< If > 0, the requested RX packet length is too long by this many octets. */ ++ uint16_t tx_rx_time_limited_us; /**< If > 0, the requested combination of TX and RX packet lengths is too long by this many microseconds. */ ++} ble_gap_data_length_limitation_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_AUTH_STATUS. */ ++typedef struct ++{ ++ uint8_t auth_status; /**< Authentication status, see @ref BLE_GAP_SEC_STATUS. */ ++ uint8_t error_src : 2; /**< On error, source that caused the failure, see @ref BLE_GAP_SEC_STATUS_SOURCES. */ ++ uint8_t bonded : 1; /**< Procedure resulted in a bond. */ ++ uint8_t lesc : 1; /**< Procedure resulted in a LE Secure Connection. */ ++ ble_gap_sec_levels_t sm1_levels; /**< Levels supported in Security Mode 1. */ ++ ble_gap_sec_levels_t sm2_levels; /**< Levels supported in Security Mode 2. */ ++ ble_gap_sec_kdist_t kdist_own; /**< Bitmap stating which keys were exchanged (distributed) by the local device. If bonding with LE Secure Connections, the enc bit will be always set. */ ++ ble_gap_sec_kdist_t kdist_peer; /**< Bitmap stating which keys were exchanged (distributed) by the remote device. If bonding with LE Secure Connections, the enc bit will never be set. */ ++} ble_gap_evt_auth_status_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_CONN_SEC_UPDATE. */ ++typedef struct ++{ ++ ble_gap_conn_sec_t conn_sec; /**< Connection security level. */ ++} ble_gap_evt_conn_sec_update_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_TIMEOUT. */ ++typedef struct ++{ ++ uint8_t src; /**< Source of timeout event, see @ref BLE_GAP_TIMEOUT_SOURCES. */ ++} ble_gap_evt_timeout_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_RSSI_CHANGED. */ ++typedef struct ++{ ++ int8_t rssi; /**< Received Signal Strength Indication in dBm. */ ++} ble_gap_evt_rssi_changed_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_ADV_REPORT. */ ++typedef struct ++{ ++ ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 ++ and the address is the device's identity address. */ ++ ble_gap_addr_t direct_addr; /**< Set when the scanner is unable to resolve the private resolvable address of the initiator ++ field of a directed advertisement packet and the scanner has been enabled to report this in @ref ble_gap_scan_params_t::adv_dir_report. */ ++ int8_t rssi; /**< Received Signal Strength Indication in dBm. */ ++ uint8_t scan_rsp : 1; /**< If 1, the report corresponds to a scan response and the type field may be ignored. */ ++ uint8_t type : 2; /**< See @ref BLE_GAP_ADV_TYPES. Only valid if the scan_rsp field is 0. */ ++ uint8_t dlen : 5; /**< Advertising or scan response data length. */ ++ uint8_t data[BLE_GAP_ADV_MAX_SIZE]; /**< Advertising or scan response data. */ ++} ble_gap_evt_adv_report_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_SEC_REQUEST. */ ++typedef struct ++{ ++ uint8_t bond : 1; /**< Perform bonding. */ ++ uint8_t mitm : 1; /**< Man In The Middle protection requested. */ ++ uint8_t lesc : 1; /**< LE Secure Connections requested. */ ++ uint8_t keypress : 1; /**< Generation of keypress notifications requested. */ ++} ble_gap_evt_sec_request_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST. */ ++typedef struct ++{ ++ ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ ++} ble_gap_evt_conn_param_update_request_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_SCAN_REQ_REPORT. */ ++typedef struct ++{ ++ int8_t rssi; /**< Received Signal Strength Indication in dBm. */ ++ ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 ++ and the address is the device's identity address. */ ++} ble_gap_evt_scan_req_report_t; ++ ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST. */ ++typedef struct ++{ ++ ble_gap_data_length_params_t peer_params; /**< Peer data length parameters. */ ++} ble_gap_evt_data_length_update_request_t; ++ ++/**@brief Event structure for @ref BLE_GAP_EVT_DATA_LENGTH_UPDATE. */ ++typedef struct ++{ ++ ble_gap_data_length_params_t effective_params; /**< The effective data length parameters. */ ++} ble_gap_evt_data_length_update_t; ++ ++ ++/**@brief GAP event structure. */ ++typedef struct ++{ ++ uint16_t conn_handle; /**< Connection Handle on which event occurred. */ ++ union /**< union alternative identified by evt_id in enclosing struct. */ ++ { ++ ble_gap_evt_connected_t connected; /**< Connected Event Parameters. */ ++ ble_gap_evt_disconnected_t disconnected; /**< Disconnected Event Parameters. */ ++ ble_gap_evt_conn_param_update_t conn_param_update; /**< Connection Parameter Update Parameters. */ ++ ble_gap_evt_sec_params_request_t sec_params_request; /**< Security Parameters Request Event Parameters. */ ++ ble_gap_evt_sec_info_request_t sec_info_request; /**< Security Information Request Event Parameters. */ ++ ble_gap_evt_passkey_display_t passkey_display; /**< Passkey Display Event Parameters. */ ++ ble_gap_evt_key_pressed_t key_pressed; /**< Key Pressed Event Parameters. */ ++ ble_gap_evt_auth_key_request_t auth_key_request; /**< Authentication Key Request Event Parameters. */ ++ ble_gap_evt_lesc_dhkey_request_t lesc_dhkey_request; /**< LE Secure Connections DHKey calculation request. */ ++ ble_gap_evt_auth_status_t auth_status; /**< Authentication Status Event Parameters. */ ++ ble_gap_evt_conn_sec_update_t conn_sec_update; /**< Connection Security Update Event Parameters. */ ++ ble_gap_evt_timeout_t timeout; /**< Timeout Event Parameters. */ ++ ble_gap_evt_rssi_changed_t rssi_changed; /**< RSSI Event Parameters. */ ++ ble_gap_evt_adv_report_t adv_report; /**< Advertising Report Event Parameters. */ ++ ble_gap_evt_sec_request_t sec_request; /**< Security Request Event Parameters. */ ++ ble_gap_evt_conn_param_update_request_t conn_param_update_request; /**< Connection Parameter Update Parameters. */ ++ ble_gap_evt_scan_req_report_t scan_req_report; /**< Scan Request Report Parameters. */ ++ ble_gap_evt_phy_update_request_t phy_update_request; /**< PHY Update Request Event Parameters. */ ++ ble_gap_evt_phy_update_t phy_update; /**< PHY Update Parameters. */ ++ ble_gap_evt_data_length_update_request_t data_length_update_request; /**< Data Length Update Request Event Parameters. */ ++ ble_gap_evt_data_length_update_t data_length_update; /**< Data Length Update Event Parameters. */ ++ } params; /**< Event Parameters. */ ++} ble_gap_evt_t; ++ ++ ++/** ++ * @brief BLE GAP connection configuration parameters, set with @ref sd_ble_cfg_set. ++ * ++ * @retval ::NRF_ERROR_CONN_COUNT The connection count for the connection configurations is zero. ++ * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: ++ * - The sum of conn_count for all connection configurations combined exceeds UINT8_MAX. ++ * - The event length is smaller than @ref BLE_GAP_EVENT_LENGTH_MIN. ++ */ ++typedef struct ++{ ++ uint8_t conn_count; /**< The number of concurrent connections the application can create with this configuration. ++ The default and minimum value is @ref BLE_GAP_CONN_COUNT_DEFAULT. */ ++ uint16_t event_length; /**< The time set aside for this connection on every connection interval in 1.25 ms units. ++ The default value is @ref BLE_GAP_EVENT_LENGTH_DEFAULT, the minimum value is @ref BLE_GAP_EVENT_LENGTH_MIN. ++ The event length and the connection interval are the primary parameters ++ for setting the throughput of a connection. ++ See the SoftDevice Specification for details on throughput. */ ++} ble_gap_conn_cfg_t; ++ ++ ++/** ++ * @brief Configuration of maximum concurrent connections in the different connected roles, set with ++ * @ref sd_ble_cfg_set. ++ * ++ * @retval ::NRF_ERROR_CONN_COUNT The sum of periph_role_count and central_role_count is too ++ * large. The maximum supported sum of concurrent connections is ++ * @ref BLE_GAP_ROLE_COUNT_COMBINED_MAX. ++ * @retval ::NRF_ERROR_INVALID_PARAM central_sec_count is larger than central_role_count. ++ */ ++typedef struct ++{ ++ uint8_t periph_role_count; /**< Maximum number of connections concurrently acting as a peripheral. Default value is @ref BLE_GAP_ROLE_COUNT_PERIPH_DEFAULT. */ ++ uint8_t central_role_count; /**< Maximum number of connections concurrently acting as a central. Default value is @ref BLE_GAP_ROLE_COUNT_CENTRAL_DEFAULT. */ ++ uint8_t central_sec_count; /**< Number of SMP instances shared between all connections acting as a central. Default value is @ref BLE_GAP_ROLE_COUNT_CENTRAL_SEC_DEFAULT. */ ++} ble_gap_cfg_role_count_t; ++ ++ ++/** ++ * @brief Device name and its properties, set with @ref sd_ble_cfg_set. ++ * ++ * @note If the device name is not configured, the default device name will be ++ * @ref BLE_GAP_DEVNAME_DEFAULT, the maximum device name length will be ++ * @ref BLE_GAP_DEVNAME_DEFAULT_LEN, vloc will be set to @ref BLE_GATTS_VLOC_STACK and the device name ++ * will have no write access. ++ * ++ * @note If @ref max_len is more than @ref BLE_GAP_DEVNAME_DEFAULT_LEN and vloc is set to @ref BLE_GATTS_VLOC_STACK, ++ * the attribute table size must be increased to have room for the longer device name (see ++ * @ref sd_ble_cfg_set and @ref ble_gatts_cfg_attr_tab_size_t). ++ * ++ * @note If vloc is @ref BLE_GATTS_VLOC_STACK : ++ * - p_value must point to non-volatile memory (flash) or be NULL. ++ * - If p_value is NULL, the device name will initially be empty. ++ * ++ * @note If vloc is @ref BLE_GATTS_VLOC_USER : ++ * - p_value cannot be NULL. ++ * - If the device name is writable, p_value must point to volatile memory (RAM). ++ * ++ * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: ++ * - Invalid device name location (vloc). ++ * - Invalid device name security mode. ++ * @retval ::NRF_ERROR_INVALID_LENGTH One or more of the following is true: ++ * - The device name length is invalid (must be between 0 and @ref BLE_GAP_DEVNAME_MAX_LEN). ++ * - The device name length is too long for the given Attribute Table. ++ * @retval ::NRF_ERROR_NOT_SUPPORTED Device name security mode is not supported. ++ */ ++typedef struct ++{ ++ ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ ++ uint8_t vloc:2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ ++ uint8_t *p_value; /**< Pointer to where the value (device name) is stored or will be stored. */ ++ uint16_t current_len; /**< Current length in bytes of the memory pointed to by p_value.*/ ++ uint16_t max_len; /**< Maximum length in bytes of the memory pointed to by p_value.*/ ++} ble_gap_cfg_device_name_t; ++ ++ ++/**@brief Configuration structure for GAP configurations. */ ++typedef union ++{ ++ ble_gap_cfg_role_count_t role_count_cfg; /**< Role count configuration, cfg_id is @ref BLE_GAP_CFG_ROLE_COUNT. */ ++ ble_gap_cfg_device_name_t device_name_cfg; /**< Device name configuration, cfg_id is @ref BLE_GAP_CFG_DEVICE_NAME. */ ++} ble_gap_cfg_t; ++ ++ ++/**@brief Channel Map option. ++ * Used with @ref sd_ble_opt_get to get the current channel map ++ * or @ref sd_ble_opt_set to set a new channel map. When setting the ++ * channel map, it applies to all current and future connections. When getting the ++ * current channel map, it applies to a single connection and the connection handle ++ * must be supplied. ++ * ++ * @note Setting the channel map may take some time, depending on connection parameters. ++ * The time taken may be different for each connection and the get operation will ++ * return the previous channel map until the new one has taken effect. ++ * ++ * @note After setting the channel map, by spec it can not be set again until at least 1 s has passed. ++ * See Bluetooth Specification Version 4.1 Volume 2, Part E, Section 7.3.46. ++ * ++ * @retval ::NRF_SUCCESS Get or set successful. ++ * @retval ::NRF_ERROR_BUSY Channel map was set again before enough time had passed. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied for get. ++ * @retval ::NRF_ERROR_NOT_SUPPORTED Returned by sd_ble_opt_set in peripheral-only SoftDevices. ++ * ++ */ ++typedef struct ++{ ++ uint16_t conn_handle; /**< Connection Handle (only applicable for get) */ ++ uint8_t ch_map[5]; /**< Channel Map (37-bit). */ ++} ble_gap_opt_ch_map_t; ++ ++ ++/**@brief Local connection latency option. ++ * ++ * Local connection latency is a feature which enables the slave to improve ++ * current consumption by ignoring the slave latency set by the peer. The ++ * local connection latency can only be set to a multiple of the slave latency, ++ * and cannot be longer than half of the supervision timeout. ++ * ++ * Used with @ref sd_ble_opt_set to set the local connection latency. The ++ * @ref sd_ble_opt_get is not supported for this option, but the actual ++ * local connection latency (unless set to NULL) is set as a return parameter ++ * when setting the option. ++ * ++ * @note The latency set will be truncated down to the closest slave latency event ++ * multiple, or the nearest multiple before half of the supervision timeout. ++ * ++ * @note The local connection latency is disabled by default, and needs to be enabled for new ++ * connections and whenever the connection is updated. ++ * ++ * @retval ::NRF_SUCCESS Set successfully. ++ * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. ++ */ ++typedef struct ++{ ++ uint16_t conn_handle; /**< Connection Handle */ ++ uint16_t requested_latency; /**< Requested local connection latency. */ ++ uint16_t * p_actual_latency; /**< Pointer to storage for the actual local connection latency (can be set to NULL to skip return value). */ ++} ble_gap_opt_local_conn_latency_t; ++ ++/**@brief Disable slave latency ++ * ++ * Used with @ref sd_ble_opt_set to temporarily disable slave latency of a peripheral connection (see @ref ble_gap_conn_params_t::slave_latency). And to re-enable it again. ++ * When disabled, the peripheral will ignore the slave_latency set by the central. ++ * ++ * @note Shall only be called on peripheral links. ++ * ++ * @retval ::NRF_SUCCESS Set successfully. ++ * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. ++ */ ++typedef struct ++{ ++ uint16_t conn_handle; /**< Connection Handle */ ++ uint8_t disable : 1; /**< Set to 1 to disable slave latency. Set to 0 enable it again.*/ ++} ble_gap_opt_slave_latency_disable_t; ++ ++/**@brief Passkey Option. ++ * ++ * Structure containing the passkey to be used during pairing. This can be used with @ref ++ * sd_ble_opt_set to make the SoftDevice use a preprogrammed passkey for authentication ++ * instead of generating a random one. ++ * ++ * @note Repeated pairing attempts using the same preprogrammed passkey makes pairing vulnerable to MITM attacks. ++ * ++ * @note @ref sd_ble_opt_get is not supported for this option. ++ * ++ */ ++typedef struct ++{ ++ uint8_t const * p_passkey; /**< Pointer to 6-digit ASCII string (digit 0..9 only, no NULL termination) passkey to be used during pairing. If this is NULL, the SoftDevice will generate a random passkey if required.*/ ++} ble_gap_opt_passkey_t; ++ ++ ++/**@brief Scan request report option. ++ * ++ * This can be used with @ref sd_ble_opt_set to make the SoftDevice send ++ * @ref BLE_GAP_EVT_SCAN_REQ_REPORT events. ++ * ++ * @note Due to the limited space reserved for scan request report events, ++ * not all received scan requests will be reported. ++ * ++ * @note If whitelisting is used, only whitelisted requests are reported. ++ * ++ * @retval ::NRF_SUCCESS Set successfully. ++ * @retval ::NRF_ERROR_INVALID_STATE When advertising is ongoing while the option is set. ++ */ ++typedef struct ++{ ++ uint8_t enable : 1; /**< Enable scan request reports. */ ++} ble_gap_opt_scan_req_report_t; ++ ++ ++/**@brief Compatibility mode 1 option. ++ * ++ * This can be used with @ref sd_ble_opt_set to enable and disable ++ * compatibility mode 1. Compatibility mode 1 is disabled by default. ++ * ++ * @note Compatibility mode 1 enables interoperability with devices that do not support a value of ++ * 0 for the WinOffset parameter in the Link Layer CONNECT_IND packet. This applies to a ++ * limited set of legacy peripheral devices from another vendor. Enabling this compatibility ++ * mode will only have an effect if the local device will act as a central device and ++ * initiate a connection to a peripheral device. In that case it may lead to the connection ++ * creation taking up to one connection interval longer to complete for all connections. ++ * ++ * @retval ::NRF_SUCCESS Set successfully. ++ * @retval ::NRF_ERROR_INVALID_STATE When connection creation is ongoing while mode 1 is set. ++ */ ++typedef struct ++{ ++ uint8_t enable : 1; /**< Enable compatibility mode 1.*/ ++} ble_gap_opt_compat_mode_1_t; ++ ++ ++/**@brief Authenticated payload timeout option. ++ * ++ * This can be used with @ref sd_ble_opt_set to change the Authenticated payload timeout to a value other ++ * than the default of @ref BLE_GAP_AUTH_PAYLOAD_TIMEOUT_MAX. ++ * ++ * @note The authenticated payload timeout event ::BLE_GAP_TIMEOUT_SRC_AUTH_PAYLOAD will be generated ++ * if auth_payload_timeout time has elapsed without receiving a packet with a valid MIC on an encrypted ++ * link. ++ * ++ * @note The LE ping procedure will be initiated before the timer expires to give the peer a chance ++ * to reset the timer. In addition the stack will try to prioritize running of LE ping over other ++ * activities to increase chances of finishing LE ping before timer expires. To avoid side-effects ++ * on other activities, it is recommended to use high timeout values. ++ * Recommended timeout > 2*(connInterval * (6 + connSlaveLatency)). ++ * ++ * @retval ::NRF_SUCCESS Set successfully. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. auth_payload_timeout was outside of allowed range. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. ++ */ ++typedef struct ++{ ++ uint16_t conn_handle; /**< Connection Handle */ ++ uint16_t auth_payload_timeout; /**< Requested timeout in 10 ms unit, see @ref BLE_GAP_AUTH_PAYLOAD_TIMEOUT. */ ++} ble_gap_opt_auth_payload_timeout_t; ++ ++ ++/**@brief Option structure for GAP options. */ ++typedef union ++{ ++ ble_gap_opt_ch_map_t ch_map; /**< Parameters for the Channel Map option. */ ++ ble_gap_opt_local_conn_latency_t local_conn_latency; /**< Parameters for the Local connection latency option */ ++ ble_gap_opt_passkey_t passkey; /**< Parameters for the Passkey option.*/ ++ ble_gap_opt_scan_req_report_t scan_req_report; /**< Parameters for the scan request report option.*/ ++ ble_gap_opt_compat_mode_1_t compat_mode_1; /**< Parameters for the compatibility mode 1 option.*/ ++ ble_gap_opt_auth_payload_timeout_t auth_payload_timeout; /**< Parameters for the authenticated payload timeout option.*/ ++ ble_gap_opt_slave_latency_disable_t slave_latency_disable; /**< Parameters for the Disable slave latency option */ ++} ble_gap_opt_t; ++/**@} */ ++ ++ ++/**@addtogroup BLE_GAP_FUNCTIONS Functions ++ * @{ */ ++ ++/**@brief Set the local Bluetooth identity address. ++ * ++ * The local Bluetooth identity address is the address that identifies this device to other peers. ++ * The address type must be either @ref BLE_GAP_ADDR_TYPE_PUBLIC or @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC. ++ * ++ * @note The identity address cannot be changed while advertising, scanning or creating a connection. ++ * ++ * @note This address will be distributed to the peer during bonding. ++ * If the address changes, the address stored in the peer device will not be valid and the ability to ++ * reconnect using the old address will be lost. ++ * ++ * @note By default the SoftDevice will set an address of type @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC upon being ++ * enabled. The address is a random number populated during the IC manufacturing process and remains unchanged ++ * for the lifetime of each IC. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_ADV_MSC} ++ * @endmscs ++ * ++ * @param[in] p_addr Pointer to address structure. ++ * ++ * @retval ::NRF_SUCCESS Address successfully set. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address. ++ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. ++ * @retval ::NRF_ERROR_INVALID_STATE The identity address cannot be changed while advertising, ++ * scanning or creating a connection. ++ */ ++SVCALL(SD_BLE_GAP_ADDR_SET, uint32_t, sd_ble_gap_addr_set(ble_gap_addr_t const *p_addr)); ++ ++ ++/**@brief Get local Bluetooth identity address. ++ * ++ * @note This will always return the identity address irrespective of the privacy settings, ++ * i.e. the address type will always be either @ref BLE_GAP_ADDR_TYPE_PUBLIC or @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC. ++ * ++ * @param[out] p_addr Pointer to address structure to be filled in. ++ * ++ * @retval ::NRF_SUCCESS Address successfully retrieved. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid or NULL pointer supplied. ++ */ ++SVCALL(SD_BLE_GAP_ADDR_GET, uint32_t, sd_ble_gap_addr_get(ble_gap_addr_t *p_addr)); ++ ++ ++/**@brief Set the active whitelist in the SoftDevice. ++ * ++ * @note Only one whitelist can be used at a time and the whitelist is shared between the BLE roles. ++ * The whitelist cannot be set if a BLE role is using the whitelist. ++ * ++ * @note If an address is resolved using the information in the device identity list, then the whitelist ++ * filter policy applies to the peer identity address and not the resolvable address sent on air. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} ++ * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_PRIVATE_SCAN_MSC} ++ * @endmscs ++ * ++ * @param[in] pp_wl_addrs Pointer to a whitelist of peer addresses, if NULL the whitelist will be cleared. ++ * @param[in] len Length of the whitelist, maximum @ref BLE_GAP_WHITELIST_ADDR_MAX_COUNT. ++ * ++ * @retval ::NRF_SUCCESS The whitelist is successfully set/cleared. ++ * @retval ::NRF_ERROR_INVALID_ADDR The whitelist (or one of its entries) provided is invalid. ++ * @retval ::BLE_ERROR_GAP_WHITELIST_IN_USE The whitelist is in use by a BLE role and cannot be set or cleared. ++ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. ++ * @retval ::NRF_ERROR_DATA_SIZE The given whitelist size is invalid (zero or too large); this can only return when ++ * pp_wl_addrs is not NULL. ++ */ ++SVCALL(SD_BLE_GAP_WHITELIST_SET, uint32_t, sd_ble_gap_whitelist_set(ble_gap_addr_t const * const * pp_wl_addrs, uint8_t len)); ++ ++ ++/**@brief Set device identity list. ++ * ++ * @note Only one device identity list can be used at a time and the list is shared between the BLE roles. ++ * The device identity list cannot be set if a BLE role is using the list. ++ * ++ * @param[in] pp_id_keys Pointer to an array of peer identity addresses and peer IRKs, if NULL the device identity list will be cleared. ++ * @param[in] pp_local_irks Pointer to an array of local IRKs. Each entry in the array maps to the entry in pp_id_keys at the same index. ++ * To fill in the list with the currently set device IRK for all peers, set to NULL. ++ * @param[in] len Length of the device identity list, maximum @ref BLE_GAP_DEVICE_IDENTITIES_MAX_COUNT. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_PRIVACY_ADV_MSC} ++ * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_MSC} ++ * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_PRIVATE_SCAN_MSC} ++ * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_CONN_PRIV_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_CONN_PRIV_MSC} ++ * @endmscs ++ * ++ * @retval ::NRF_SUCCESS The device identity list successfully set/cleared. ++ * @retval ::NRF_ERROR_INVALID_ADDR The device identity list (or one of its entries) provided is invalid. ++ * This code may be returned if the local IRK list also has an invalid entry. ++ * @retval ::BLE_ERROR_GAP_DEVICE_IDENTITIES_IN_USE The device identity list is in use and cannot be set or cleared. ++ * @retval ::BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE The device identity list contains multiple entries with the same identity address. ++ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. ++ * @retval ::NRF_ERROR_DATA_SIZE The given device identity list size invalid (zero or too large); this can ++ * only return when pp_id_keys is not NULL. ++ */ ++SVCALL(SD_BLE_GAP_DEVICE_IDENTITIES_SET, uint32_t, sd_ble_gap_device_identities_set(ble_gap_id_key_t const * const * pp_id_keys, ble_gap_irk_t const * const * pp_local_irks, uint8_t len)); ++ ++ ++/**@brief Set privacy settings. ++ * ++ * @note Privacy settings cannot be changed while advertising, scanning or creating a connection. ++ * ++ * @param[in] p_privacy_params Privacy settings. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_PRIVACY_ADV_MSC} ++ * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_MSC} ++ * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} ++ * @endmscs ++ * ++ * @retval ::NRF_SUCCESS Set successfully. ++ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. ++ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. ++ * @retval ::NRF_ERROR_INVALID_ADDR The pointer to privacy settings is NULL or invalid. ++ * Otherwise, the p_device_irk pointer in privacy parameter is an invalid pointer. ++ * @retval ::NRF_ERROR_INVALID_PARAM Out of range parameters are provided. ++ * @retval ::NRF_ERROR_INVALID_STATE Privacy settings cannot be changed while advertising, scanning ++ * or creating a connection. ++ */ ++SVCALL(SD_BLE_GAP_PRIVACY_SET, uint32_t, sd_ble_gap_privacy_set(ble_gap_privacy_params_t const *p_privacy_params)); ++ ++ ++/**@brief Get privacy settings. ++ * ++ * @note ::ble_gap_privacy_params_t::p_device_irk must be initialized to NULL or a valid address before this function is called. ++ * If it is initialized to a valid address, the address pointed to will contain the current device IRK on return. ++ * ++ * @param[in,out] p_privacy_params Privacy settings. ++ * ++ * @retval ::NRF_SUCCESS Privacy settings read. ++ * @retval ::NRF_ERROR_INVALID_ADDR The pointer given for returning the privacy settings may be NULL or invalid. ++ * Otherwise, the p_device_irk pointer in privacy parameter is an invalid pointer. ++ */ ++SVCALL(SD_BLE_GAP_PRIVACY_GET, uint32_t, sd_ble_gap_privacy_get(ble_gap_privacy_params_t *p_privacy_params)); ++ ++ ++/**@brief Set, clear or update advertising and scan response data. ++ * ++ * @note The format of the advertising data will be checked by this call to ensure interoperability. ++ * Limitations imposed by this API call to the data provided include having a flags data type in the scan response data and ++ * duplicating the local name in the advertising data and scan response data. ++ * ++ * @note To clear the advertising data and set it to a 0-length packet, simply provide a valid pointer (p_data/p_sr_data) with its corresponding ++ * length (dlen/srdlen) set to 0. ++ * ++ * @note The call will fail if p_data and p_sr_data are both NULL since this would have no effect. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_ADV_MSC} ++ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} ++ * @endmscs ++ * ++ * @param[in] p_data Raw data to be placed in advertising packet. If NULL, no changes are made to the current advertising packet data. ++ * @param[in] dlen Data length for p_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_data is NULL, can be 0 if p_data is not NULL. ++ * @param[in] p_sr_data Raw data to be placed in scan response packet. If NULL, no changes are made to the current scan response packet data. ++ * @param[in] srdlen Data length for p_sr_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_sr_data is NULL, can be 0 if p_data is not NULL. ++ * ++ * @retval ::NRF_SUCCESS Advertising data successfully updated or cleared. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, both p_data and p_sr_data cannot be NULL. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_FLAGS Invalid combination of advertising flags supplied. ++ * @retval ::NRF_ERROR_INVALID_DATA Invalid data type(s) supplied, check the advertising data format specification. ++ * @retval ::NRF_ERROR_INVALID_LENGTH Invalid data length(s) supplied. ++ * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported data type. ++ * @retval ::BLE_ERROR_GAP_UUID_LIST_MISMATCH Invalid UUID list supplied. ++ */ ++SVCALL(SD_BLE_GAP_ADV_DATA_SET, uint32_t, sd_ble_gap_adv_data_set(uint8_t const *p_data, uint8_t dlen, uint8_t const *p_sr_data, uint8_t srdlen)); ++ ++ ++/**@brief Start advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). ++ * ++ * @note Only one advertiser may be active at any time. ++ * ++ * @events ++ * @event{@ref BLE_GAP_EVT_CONNECTED, Generated after connection has been established through connectable advertising.} ++ * @event{@ref BLE_GAP_EVT_TIMEOUT, Advertisement has timed out.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_ADV_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_CONN_PRIV_MSC} ++ * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} ++ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} ++ * @endmscs ++ * ++ * @param[in] p_adv_params Pointer to advertising parameters structure. ++ * @param[in] conn_cfg_tag Tag identifying a configuration set by @ref sd_ble_cfg_set or ++ * @ref BLE_CONN_CFG_TAG_DEFAULT to use the default connection configuration. If ++ * @ref ble_gap_adv_params_t::type is @ref BLE_GAP_ADV_TYPE_ADV_NONCONN_IND, ++ * this is ignored. ++ * ++ * @retval ::NRF_SUCCESS The BLE stack has started advertising. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::NRF_ERROR_CONN_COUNT The limit of available connections has been reached; connectable advertiser cannot be started. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check the accepted ranges and limits. ++ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Bluetooth address supplied. ++ * @retval ::BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST Discoverable mode and whitelist incompatible. ++ * @retval ::NRF_ERROR_RESOURCES Not enough BLE role slots available. ++ * Stop one or more currently active roles (Central, Peripheral, Broadcaster or Observer) and try again ++ */ ++SVCALL(SD_BLE_GAP_ADV_START, uint32_t, sd_ble_gap_adv_start(ble_gap_adv_params_t const *p_adv_params, uint8_t conn_cfg_tag)); ++ ++ ++/**@brief Stop advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_ADV_MSC} ++ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} ++ * @endmscs ++ * ++ * @retval ::NRF_SUCCESS The BLE stack has stopped advertising. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation (most probably not in advertising state). ++ */ ++SVCALL(SD_BLE_GAP_ADV_STOP, uint32_t, sd_ble_gap_adv_stop(void)); ++ ++ ++ ++/**@brief Update connection parameters. ++ * ++ * @details In the central role this will initiate a Link Layer connection parameter update procedure, ++ * otherwise in the peripheral role, this will send the corresponding L2CAP request and wait for ++ * the central to perform the procedure. In both cases, and regardless of success or failure, the application ++ * will be informed of the result with a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE event. ++ * ++ * @details This function can be used as a central both to reply to a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST or to start the procedure unrequested. ++ * ++ * @events ++ * @event{@ref BLE_GAP_EVT_CONN_PARAM_UPDATE, Result of the connection parameter update procedure.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_CPU_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} ++ * @mmsc{@ref BLE_GAP_MULTILINK_CPU_MSC} ++ * @mmsc{@ref BLE_GAP_MULTILINK_CTRL_PROC_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_CPU_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] p_conn_params Pointer to desired connection parameters. If NULL is provided on a peripheral role, ++ * the parameters in the PPCP characteristic of the GAP service will be used instead. ++ * If NULL is provided on a central role and in response to a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST, the peripheral request will be rejected ++ * ++ * @retval ::NRF_SUCCESS The Connection Update procedure has been started successfully. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::NRF_ERROR_BUSY Procedure already in progress, wait for pending procedures to complete and retry. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. ++ */ ++SVCALL(SD_BLE_GAP_CONN_PARAM_UPDATE, uint32_t, sd_ble_gap_conn_param_update(uint16_t conn_handle, ble_gap_conn_params_t const *p_conn_params)); ++ ++ ++/**@brief Disconnect (GAP Link Termination). ++ * ++ * @details This call initiates the disconnection procedure, and its completion will be communicated to the application ++ * with a @ref BLE_GAP_EVT_DISCONNECTED event. ++ * ++ * @events ++ * @event{@ref BLE_GAP_EVT_DISCONNECTED, Generated when disconnection procedure is complete.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_CONN_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] hci_status_code HCI status code, see @ref BLE_HCI_STATUS_CODES (accepted values are @ref BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION and @ref BLE_HCI_CONN_INTERVAL_UNACCEPTABLE). ++ * ++ * @retval ::NRF_SUCCESS The disconnection procedure has been started successfully. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation (disconnection is already in progress). ++ */ ++SVCALL(SD_BLE_GAP_DISCONNECT, uint32_t, sd_ble_gap_disconnect(uint16_t conn_handle, uint8_t hci_status_code)); ++ ++ ++/**@brief Set the radio's transmit power. ++ * ++ * @param[in] tx_power Radio transmit power in dBm (accepted values are -40, -20, -16, -12, -8, -4, 0, 3, and 4 dBm). ++ * ++ * @retval ::NRF_SUCCESS Successfully changed the transmit power. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ */ ++SVCALL(SD_BLE_GAP_TX_POWER_SET, uint32_t, sd_ble_gap_tx_power_set(int8_t tx_power)); ++ ++ ++/**@brief Set GAP Appearance value. ++ * ++ * @param[in] appearance Appearance (16-bit), see @ref BLE_APPEARANCES. ++ * ++ * @retval ::NRF_SUCCESS Appearance value set successfully. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ */ ++SVCALL(SD_BLE_GAP_APPEARANCE_SET, uint32_t, sd_ble_gap_appearance_set(uint16_t appearance)); ++ ++ ++/**@brief Get GAP Appearance value. ++ * ++ * @param[out] p_appearance Pointer to appearance (16-bit) to be filled in, see @ref BLE_APPEARANCES. ++ * ++ * @retval ::NRF_SUCCESS Appearance value retrieved successfully. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ */ ++SVCALL(SD_BLE_GAP_APPEARANCE_GET, uint32_t, sd_ble_gap_appearance_get(uint16_t *p_appearance)); ++ ++ ++/**@brief Set GAP Peripheral Preferred Connection Parameters. ++ * ++ * @param[in] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure with the desired parameters. ++ * ++ * @retval ::NRF_SUCCESS Peripheral Preferred Connection Parameters set successfully. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ */ ++SVCALL(SD_BLE_GAP_PPCP_SET, uint32_t, sd_ble_gap_ppcp_set(ble_gap_conn_params_t const *p_conn_params)); ++ ++ ++/**@brief Get GAP Peripheral Preferred Connection Parameters. ++ * ++ * @param[out] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure where the parameters will be stored. ++ * ++ * @retval ::NRF_SUCCESS Peripheral Preferred Connection Parameters retrieved successfully. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ */ ++SVCALL(SD_BLE_GAP_PPCP_GET, uint32_t, sd_ble_gap_ppcp_get(ble_gap_conn_params_t *p_conn_params)); ++ ++ ++/**@brief Set GAP device name. ++ * ++ * @note If the device name is located in application flash memory (see @ref ble_gap_cfg_device_name_t), ++ * it cannot be changed. Then @ref NRF_ERROR_FORBIDDEN will be returned. ++ * ++ * @param[in] p_write_perm Write permissions for the Device Name characteristic, see @ref ble_gap_conn_sec_mode_t. ++ * @param[in] p_dev_name Pointer to a UTF-8 encoded, non NULL-terminated string. ++ * @param[in] len Length of the UTF-8, non NULL-terminated string pointed to by p_dev_name in octets (must be smaller or equal than @ref BLE_GAP_DEVNAME_MAX_LEN). ++ * ++ * @retval ::NRF_SUCCESS GAP device name and permissions set successfully. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. ++ * @retval ::NRF_ERROR_FORBIDDEN Device name is not writable. ++ */ ++SVCALL(SD_BLE_GAP_DEVICE_NAME_SET, uint32_t, sd_ble_gap_device_name_set(ble_gap_conn_sec_mode_t const *p_write_perm, uint8_t const *p_dev_name, uint16_t len)); ++ ++ ++/**@brief Get GAP device name. ++ * ++ * @note If the device name is longer than the size of the supplied buffer, ++ * p_len will return the complete device name length, ++ * and not the number of bytes actually returned in p_dev_name. ++ * The application may use this information to allocate a suitable buffer size. ++ * ++ * @param[out] p_dev_name Pointer to an empty buffer where the UTF-8 non NULL-terminated string will be placed. Set to NULL to obtain the complete device name length. ++ * @param[in,out] p_len Length of the buffer pointed by p_dev_name, complete device name length on output. ++ * ++ * @retval ::NRF_SUCCESS GAP device name retrieved successfully. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. ++ */ ++SVCALL(SD_BLE_GAP_DEVICE_NAME_GET, uint32_t, sd_ble_gap_device_name_get(uint8_t *p_dev_name, uint16_t *p_len)); ++ ++ ++/**@brief Initiate the GAP Authentication procedure. ++ * ++ * @details In the central role, this function will send an SMP Pairing Request (or an SMP Pairing Failed if rejected), ++ * otherwise in the peripheral role, an SMP Security Request will be sent. ++ * ++ * @events ++ * @event{Depending on the security parameters set and the packet exchanges with the peer\, the following events may be generated:} ++ * @event{@ref BLE_GAP_EVT_SEC_PARAMS_REQUEST} ++ * @event{@ref BLE_GAP_EVT_SEC_INFO_REQUEST} ++ * @event{@ref BLE_GAP_EVT_PASSKEY_DISPLAY} ++ * @event{@ref BLE_GAP_EVT_KEY_PRESSED} ++ * @event{@ref BLE_GAP_EVT_AUTH_KEY_REQUEST} ++ * @event{@ref BLE_GAP_EVT_LESC_DHKEY_REQUEST} ++ * @event{@ref BLE_GAP_EVT_CONN_SEC_UPDATE} ++ * @event{@ref BLE_GAP_EVT_AUTH_STATUS} ++ * @event{@ref BLE_GAP_EVT_TIMEOUT} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_PERIPH_SEC_REQ_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_SEC_REQ_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_PAIRING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] p_sec_params Pointer to the @ref ble_gap_sec_params_t structure with the security parameters to be used during the pairing or bonding procedure. ++ * In the peripheral role, only the bond, mitm, lesc and keypress fields of this structure are used. ++ * In the central role, this pointer may be NULL to reject a Security Request. ++ * ++ * @retval ::NRF_SUCCESS Successfully initiated authentication procedure. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::NRF_ERROR_NO_MEM The maximum number of authentication procedures that can run in parallel for the given role is reached. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ * @retval ::NRF_ERROR_NOT_SUPPORTED Setting of sign or link fields in @ref ble_gap_sec_kdist_t not supported. ++ * @retval ::NRF_ERROR_TIMEOUT A SMP timeout has occurred, and further SMP operations on this link is prohibited. ++ */ ++SVCALL(SD_BLE_GAP_AUTHENTICATE, uint32_t, sd_ble_gap_authenticate(uint16_t conn_handle, ble_gap_sec_params_t const *p_sec_params)); ++ ++ ++/**@brief Reply with GAP security parameters. ++ * ++ * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. ++ * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. ++ * ++ * @events ++ * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_PERIPH_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_CENTRAL_OOB_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_STATIC_PK_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_CONFIRM_FAIL_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_PAIRING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_PD_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_KS_TOO_SMALL_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_APP_ERROR_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_REMOTE_PAIRING_FAIL_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_TIMEOUT_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_PAIRING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] sec_status Security status, see @ref BLE_GAP_SEC_STATUS. ++ * @param[in] p_sec_params Pointer to a @ref ble_gap_sec_params_t security parameters structure. In the central role this must be set to NULL, as the parameters have ++ * already been provided during a previous call to @ref sd_ble_gap_authenticate. ++ * @param[in,out] p_sec_keyset Pointer to a @ref ble_gap_sec_keyset_t security keyset structure. Any keys generated and/or distributed as a result of the ongoing security procedure ++ * will be stored into the memory referenced by the pointers inside this structure. The keys will be stored and available to the application ++ * upon reception of a @ref BLE_GAP_EVT_AUTH_STATUS event. ++ * Note that the SoftDevice expects the application to provide memory for storing the ++ * peer's keys. So it must be ensured that the relevant pointers inside this structure are not NULL. The pointers to the local key ++ * can, however, be NULL, in which case, the local key data will not be available to the application upon reception of the ++ * @ref BLE_GAP_EVT_AUTH_STATUS event. ++ * ++ * @retval ::NRF_SUCCESS Successfully accepted security parameter from the application. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ * @retval ::NRF_ERROR_NOT_SUPPORTED Setting of sign or link fields in @ref ble_gap_sec_kdist_t not supported. ++ */ ++SVCALL(SD_BLE_GAP_SEC_PARAMS_REPLY, uint32_t, sd_ble_gap_sec_params_reply(uint16_t conn_handle, uint8_t sec_status, ble_gap_sec_params_t const *p_sec_params, ble_gap_sec_keyset_t const *p_sec_keyset)); ++ ++ ++/**@brief Reply with an authentication key. ++ * ++ * @details This function is only used to reply to a @ref BLE_GAP_EVT_AUTH_KEY_REQUEST or a @ref BLE_GAP_EVT_PASSKEY_DISPLAY, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. ++ * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. ++ * ++ * @events ++ * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_CENTRAL_OOB_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] key_type See @ref BLE_GAP_AUTH_KEY_TYPES. ++ * @param[in] p_key If key type is @ref BLE_GAP_AUTH_KEY_TYPE_NONE, then NULL. ++ * If key type is @ref BLE_GAP_AUTH_KEY_TYPE_PASSKEY, then a 6-byte ASCII string (digit 0..9 only, no NULL termination) ++ * or NULL when confirming LE Secure Connections Numeric Comparison. ++ * If key type is @ref BLE_GAP_AUTH_KEY_TYPE_OOB, then a 16-byte OOB key value in little-endian format. ++ * ++ * @retval ::NRF_SUCCESS Authentication key successfully set. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ */ ++SVCALL(SD_BLE_GAP_AUTH_KEY_REPLY, uint32_t, sd_ble_gap_auth_key_reply(uint16_t conn_handle, uint8_t key_type, uint8_t const *p_key)); ++ ++ ++/**@brief Reply with an LE Secure connections DHKey. ++ * ++ * @details This function is only used to reply to a @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. ++ * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. ++ * ++ * @events ++ * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_PAIRING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_PD_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] p_dhkey LE Secure Connections DHKey. ++ * ++ * @retval ::NRF_SUCCESS DHKey successfully set. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ */ ++SVCALL(SD_BLE_GAP_LESC_DHKEY_REPLY, uint32_t, sd_ble_gap_lesc_dhkey_reply(uint16_t conn_handle, ble_gap_lesc_dhkey_t const *p_dhkey)); ++ ++ ++/**@brief Notify the peer of a local keypress. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] kp_not See @ref BLE_GAP_KP_NOT_TYPES. ++ * ++ * @retval ::NRF_SUCCESS Keypress notification successfully queued for transmission. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either not entering a passkey or keypresses have not been enabled by both peers. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ * @retval ::NRF_ERROR_BUSY The BLE stack is busy. Retry at later time. ++ */ ++SVCALL(SD_BLE_GAP_KEYPRESS_NOTIFY, uint32_t, sd_ble_gap_keypress_notify(uint16_t conn_handle, uint8_t kp_not)); ++ ++ ++/**@brief Generate a set of OOB data to send to a peer out of band. ++ * ++ * @note The @ref ble_gap_addr_t included in the OOB data returned will be the currently active one (or, if a connection has already been established, ++ * the one used during connection setup). The application may manually overwrite it with an updated value. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. Can be @ref BLE_CONN_HANDLE_INVALID if a BLE connection has not been established yet. ++ * @param[in] p_pk_own LE Secure Connections local P-256 Public Key. ++ * @param[out] p_oobd_own The OOB data to be sent out of band to a peer. ++ * ++ * @retval ::NRF_SUCCESS OOB data successfully generated. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ */ ++SVCALL(SD_BLE_GAP_LESC_OOB_DATA_GET, uint32_t, sd_ble_gap_lesc_oob_data_get(uint16_t conn_handle, ble_gap_lesc_p256_pk_t const *p_pk_own, ble_gap_lesc_oob_data_t *p_oobd_own)); ++ ++/**@brief Provide the OOB data sent/received out of band. ++ * ++ * @note An authentication procedure with OOB selected as an algorithm must be in progress when calling this function. ++ * @note A @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST event with the oobd_req set to 1 must have been received prior to calling this function. ++ * ++ * @events ++ * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] p_oobd_own The OOB data sent out of band to a peer or NULL if the peer has not received OOB data. ++ * Must correspond to @ref ble_gap_sec_params_t::oob flag in @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST. ++ * @param[in] p_oobd_peer The OOB data received out of band from a peer or NULL if none received. ++ * Must correspond to @ref ble_gap_sec_params_t::oob flag in @ref sd_ble_gap_authenticate in the central role ++ * or @ref sd_ble_gap_sec_params_reply in the peripheral role. ++ * ++ * @retval ::NRF_SUCCESS OOB data accepted. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ */ ++SVCALL(SD_BLE_GAP_LESC_OOB_DATA_SET, uint32_t, sd_ble_gap_lesc_oob_data_set(uint16_t conn_handle, ble_gap_lesc_oob_data_t const *p_oobd_own, ble_gap_lesc_oob_data_t const *p_oobd_peer)); ++ ++ ++/**@brief Initiate GAP Encryption procedure. ++ * ++ * @details In the central role, this function will initiate the encryption procedure using the encryption information provided. ++ * ++ * @events ++ * @event{@ref BLE_GAP_EVT_CONN_SEC_UPDATE, The connection security has been updated.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_ENC_MSC} ++ * @mmsc{@ref BLE_GAP_MULTILINK_CTRL_PROC_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_SEC_REQ_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] p_master_id Pointer to a @ref ble_gap_master_id_t master identification structure. ++ * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. ++ * ++ * @retval ::NRF_SUCCESS Successfully initiated authentication procedure. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ * @retval ::BLE_ERROR_INVALID_ROLE Operation is not supported in the Peripheral role. ++ * @retval ::NRF_ERROR_BUSY Procedure already in progress or not allowed at this time, wait for pending procedures to complete and retry. ++ */ ++SVCALL(SD_BLE_GAP_ENCRYPT, uint32_t, sd_ble_gap_encrypt(uint16_t conn_handle, ble_gap_master_id_t const *p_master_id, ble_gap_enc_info_t const *p_enc_info)); ++ ++ ++/**@brief Reply with GAP security information. ++ * ++ * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_INFO_REQUEST, calling it at other times will result in @ref NRF_ERROR_INVALID_STATE. ++ * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. ++ * @note Data signing is not yet supported, and p_sign_info must therefore be NULL. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_PERIPH_ENC_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. May be NULL to signal none is available. ++ * @param[in] p_id_info Pointer to a @ref ble_gap_irk_t identity information structure. May be NULL to signal none is available. ++ * @param[in] p_sign_info Pointer to a @ref ble_gap_sign_info_t signing information structure. May be NULL to signal none is available. ++ * ++ * @retval ::NRF_SUCCESS Successfully accepted security information. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ */ ++SVCALL(SD_BLE_GAP_SEC_INFO_REPLY, uint32_t, sd_ble_gap_sec_info_reply(uint16_t conn_handle, ble_gap_enc_info_t const *p_enc_info, ble_gap_irk_t const *p_id_info, ble_gap_sign_info_t const *p_sign_info)); ++ ++ ++/**@brief Get the current connection security. ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[out] p_conn_sec Pointer to a @ref ble_gap_conn_sec_t structure to be filled in. ++ * ++ * @retval ::NRF_SUCCESS Current connection security successfully retrieved. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ */ ++SVCALL(SD_BLE_GAP_CONN_SEC_GET, uint32_t, sd_ble_gap_conn_sec_get(uint16_t conn_handle, ble_gap_conn_sec_t *p_conn_sec)); ++ ++ ++/**@brief Start reporting the received signal strength to the application. ++ * ++ * A new event is reported whenever the RSSI value changes, until @ref sd_ble_gap_rssi_stop is called. ++ * ++ * @events ++ * @event{@ref BLE_GAP_EVT_RSSI_CHANGED, New RSSI data available. How often the event is generated is ++ * dependent on the settings of the threshold_dbm ++ * and skip_count input parameters.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} ++ * @mmsc{@ref BLE_GAP_RSSI_FILT_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] threshold_dbm Minimum change in dBm before triggering the @ref BLE_GAP_EVT_RSSI_CHANGED event. Events are disabled if threshold_dbm equals @ref BLE_GAP_RSSI_THRESHOLD_INVALID. ++ * @param[in] skip_count Number of RSSI samples with a change of threshold_dbm or more before sending a new @ref BLE_GAP_EVT_RSSI_CHANGED event. ++ * ++ * @retval ::NRF_SUCCESS Successfully activated RSSI reporting. ++ * @retval ::NRF_ERROR_INVALID_STATE Disconnection in progress. Invalid state to perform operation. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ */ ++SVCALL(SD_BLE_GAP_RSSI_START, uint32_t, sd_ble_gap_rssi_start(uint16_t conn_handle, uint8_t threshold_dbm, uint8_t skip_count)); ++ ++ ++/**@brief Stop reporting the received signal strength. ++ * ++ * @note An RSSI change detected before the call but not yet received by the application ++ * may be reported after @ref sd_ble_gap_rssi_stop has been called. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} ++ * @mmsc{@ref BLE_GAP_RSSI_FILT_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * ++ * @retval ::NRF_SUCCESS Successfully deactivated RSSI reporting. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ */ ++SVCALL(SD_BLE_GAP_RSSI_STOP, uint32_t, sd_ble_gap_rssi_stop(uint16_t conn_handle)); ++ ++ ++/**@brief Get the received signal strength for the last connection event. ++ * ++ * @ref sd_ble_gap_rssi_start must be called to start reporting RSSI before using this function. @ref NRF_ERROR_NOT_FOUND ++ * will be returned until RSSI was sampled for the first time after calling @ref sd_ble_gap_rssi_start. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[out] p_rssi Pointer to the location where the RSSI measurement shall be stored. ++ * ++ * @retval ::NRF_SUCCESS Successfully read the RSSI. ++ * @retval ::NRF_ERROR_NOT_FOUND No sample is available. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is not ongoing, or disconnection in progress. ++ */ ++SVCALL(SD_BLE_GAP_RSSI_GET, uint32_t, sd_ble_gap_rssi_get(uint16_t conn_handle, int8_t *p_rssi)); ++ ++ ++/**@brief Start scanning (GAP Discovery procedure, Observer Procedure). ++ * ++ * @events ++ * @event{@ref BLE_GAP_EVT_ADV_REPORT, An advertising or scan response packet has been received.} ++ * @event{@ref BLE_GAP_EVT_TIMEOUT, Scanner has timed out.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_SCAN_MSC} ++ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} ++ * @endmscs ++ * ++ * @param[in] p_scan_params Pointer to scan parameters structure. ++ * ++ * @retval ::NRF_SUCCESS Successfully initiated scanning procedure. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_RESOURCES Not enough BLE role slots available. ++ * Stop one or more currently active roles (Central, Peripheral or Broadcaster) and try again ++ */ ++SVCALL(SD_BLE_GAP_SCAN_START, uint32_t, sd_ble_gap_scan_start(ble_gap_scan_params_t const *p_scan_params)); ++ ++ ++/**@brief Stop scanning (GAP Discovery procedure, Observer Procedure). ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_SCAN_MSC} ++ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} ++ * @endmscs ++ * ++ * @retval ::NRF_SUCCESS Successfully stopped scanning procedure. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation (most probably not in scanning state). ++ */ ++SVCALL(SD_BLE_GAP_SCAN_STOP, uint32_t, sd_ble_gap_scan_stop(void)); ++ ++ ++/**@brief Create a connection (GAP Link Establishment). ++ * ++ * @note If a scanning procedure is currently in progress it will be automatically stopped when calling this function. ++ * The scanning procedure will be stopped even if the function returns an error. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_CONN_PRIV_MSC} ++ * @mmsc{@ref BLE_GAP_CENTRAL_CONN_MSC} ++ * @endmscs ++ * ++ * @param[in] p_peer_addr Pointer to peer address. If the use_whitelist bit is set in @ref ble_gap_scan_params_t, then this is ignored. ++ * @param[in] p_scan_params Pointer to scan parameters structure. ++ * @param[in] p_conn_params Pointer to desired connection parameters. ++ * @param[in] conn_cfg_tag Tag identifying a configuration set by @ref sd_ble_cfg_set or ++ * @ref BLE_CONN_CFG_TAG_DEFAULT to use the default connection configuration. ++ * ++ * @retval ::NRF_SUCCESS Successfully initiated connection procedure. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid parameter(s) pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * - Invalid parameter(s) in p_scan_params or p_conn_params. ++ * - Use of whitelist requested but whitelist has not been set, see @ref sd_ble_gap_whitelist_set. ++ * - Peer address was not present in the device identity list, see @ref sd_ble_gap_device_identities_set. ++ * @retval ::NRF_ERROR_INVALID_STATE The SoftDevice is in an invalid state to perform this operation. This may be due to an ++ * existing locally initiated connect procedure, which must complete before initiating again. ++ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Peer address. ++ * @retval ::NRF_ERROR_CONN_COUNT The limit of available connections has been reached. ++ * @retval ::NRF_ERROR_RESOURCES Not enough BLE role slots available. ++ * Stop one or more currently active roles (Central, Peripheral or Broadcaster) and try again ++ */ ++SVCALL(SD_BLE_GAP_CONNECT, uint32_t, sd_ble_gap_connect(ble_gap_addr_t const *p_peer_addr, ble_gap_scan_params_t const *p_scan_params, ble_gap_conn_params_t const *p_conn_params, uint8_t conn_cfg_tag)); ++ ++ ++/**@brief Cancel a connection establishment. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_CENTRAL_CONN_MSC} ++ * @endmscs ++ * ++ * @retval ::NRF_SUCCESS Successfully canceled an ongoing connection procedure. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ */ ++SVCALL(SD_BLE_GAP_CONNECT_CANCEL, uint32_t, sd_ble_gap_connect_cancel(void)); ++ ++ ++/**@brief Initiate or respond to a PHY Update Procedure ++ * ++ * @details This function is used to initiate or respond to a PHY Update Procedure. It will always ++ * generate a @ref BLE_GAP_EVT_PHY_UPDATE event if successfully executed. ++ * If this function is used to initiate a PHY Update procedure and the only option ++ * provided in @ref ble_gap_phys_t::tx_phys and @ref ble_gap_phys_t::rx_phys is the ++ * currently active PHYs in the respective directions, the SoftDevice will generate a ++ * @ref BLE_GAP_EVT_PHY_UPDATE with the current PHYs set and will not initiate the ++ * procedure in the Link Layer. ++ * If @ref ble_gap_phys_t::tx_phys or @ref ble_gap_phys_t::rx_phys is ++ * @ref BLE_GAP_PHY_AUTO, then the stack will select a PHY for the respective direction ++ * based on the peer's PHY preferences and the local stack configuration. ++ * If the peer does not support the PHY Update Procedure, then the resulting ++ * @ref BLE_GAP_EVT_PHY_UPDATE event will have a status set to ++ * @ref BLE_HCI_UNSUPPORTED_REMOTE_FEATURE. ++ * If the PHY procedure was rejected by the peer due to a procedure collision, the status ++ * will be @ref BLE_HCI_STATUS_CODE_LMP_ERROR_TRANSACTION_COLLISION or ++ * @ref BLE_HCI_DIFFERENT_TRANSACTION_COLLISION. ++ * If the peer responds to the PHY Update procedure with invalid parameters, the status ++ * will be @ref BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS. ++ * If the PHY procedure was rejected by the peer for a different reason, the status will ++ * contain the reason as specified by the peer. ++ * ++ * @events ++ * @event{@ref BLE_GAP_EVT_PHY_UPDATE, Result of the PHY Update Procedure.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_CENTRAL_PHY_UPDATE} ++ * @mmsc{@ref BLE_GAP_PERIPHERAL_PHY_UPDATE} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle to indicate the connection for which the PHY Update is requested. ++ * @param[in] p_gap_phys Pointer to PHY structure. ++ * ++ * @retval ::NRF_SUCCESS Successfully requested a PHY Update. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Unsupported PHYs supplied to the call. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::NRF_ERROR_BUSY Procedure is already in progress or not allowed at this time. Process pending events and wait for the pending procedure to complete and retry. ++ * ++ */ ++SVCALL(SD_BLE_GAP_PHY_UPDATE, uint32_t, sd_ble_gap_phy_update(uint16_t conn_handle, ble_gap_phys_t const *p_gap_phys)); ++ ++ ++/**@brief Initiate or respond to a Data Length Update Procedure. ++ * ++ * @note Only symmetric input parameters for the Data Length Update is supported. Only ++ * @ref BLE_GAP_DATA_LENGTH_AUTO for max_tx_time_us and max_rx_time_us is supported. ++ * ++ * @note If the application uses @ref BLE_GAP_DATA_LENGTH_AUTO for one or more members of ++ * p_dl_params, the SoftDevice will choose the highest value supported in current ++ * configuration and connection parameters. ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] p_dl_params Pointer to local parameters to be used in Data Length Update ++ * Procedure. Set any member to @ref BLE_GAP_DATA_LENGTH_AUTO to let ++ * the SoftDevice automatically decide the value for that member. ++ * Set to NULL to use automatic values for all members. ++ * @param[out] p_dl_limitation Pointer to limitation to be written when local device does not ++ * have enough resources to accommodate the requested Data Length ++ * Update parameters. Ignored if NULL. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GAP_DATA_LENGTH_UPDATE_PROCEDURE_MSC} ++ * @endmscs ++ * ++ * @retval ::NRF_SUCCESS Successfully set Data Length Extension initiation/response parameters. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameters supplied. ++ * @retval ::NRF_ERROR_NOT_SUPPORTED The requested parameters are not supported by the SoftDevice. ++ * @retval ::NRF_ERROR_RESOURCES The requested parameters can not be accommodated. Inspect ++ * p_dl_limitation so see where the limitation is. ++ * @retval ::NRF_ERROR_BUSY Peer has already initiated a Data Length Update Procedure. Process the ++ * pending @ref BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST event to respond. ++ */ ++SVCALL(SD_BLE_GAP_DATA_LENGTH_UPDATE, uint32_t, sd_ble_gap_data_length_update(uint16_t conn_handle, ble_gap_data_length_params_t const *p_dl_params, ble_gap_data_length_limitation_t *p_dl_limitation)); ++ ++ ++/** @} */ ++ ++#ifdef __cplusplus ++} ++#endif ++#endif // BLE_GAP_H__ ++ ++/** ++ @} ++*/ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_gatt.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_gatt.h +new file mode 100644 +index 0000000..f1651c8 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_gatt.h +@@ -0,0 +1,228 @@ ++/* ++ * Copyright (c) 2013 - 2017, Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form, except as embedded into a Nordic ++ * Semiconductor ASA integrated circuit in a product or a software update for ++ * such product, must reproduce the above copyright notice, this list of ++ * conditions and the following disclaimer in the documentation and/or other ++ * materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its ++ * contributors may be used to endorse or promote products derived from this ++ * software without specific prior written permission. ++ * ++ * 4. This software, with or without modification, must only be used with a ++ * Nordic Semiconductor ASA integrated circuit. ++ * ++ * 5. Any software provided in binary form under this license must not be reverse ++ * engineered, decompiled, modified and/or disassembled. ++ * ++ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS ++ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE ++ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ++ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ++ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ */ ++ ++/** ++ @addtogroup BLE_GATT Generic Attribute Profile (GATT) Common ++ @{ ++ @brief Common definitions and prototypes for the GATT interfaces. ++ */ ++ ++#ifndef BLE_GATT_H__ ++#define BLE_GATT_H__ ++ ++#include ++#include "nrf_svc.h" ++#include "nrf_error.h" ++#include "ble_hci.h" ++#include "ble_ranges.h" ++#include "ble_types.h" ++#include "ble_err.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/** @addtogroup BLE_GATT_DEFINES Defines ++ * @{ */ ++ ++/** @brief Default ATT MTU, in bytes. */ ++#define BLE_GATT_ATT_MTU_DEFAULT 23 ++ ++/**@brief Invalid Attribute Handle. */ ++#define BLE_GATT_HANDLE_INVALID 0x0000 ++ ++/**@brief First Attribute Handle. */ ++#define BLE_GATT_HANDLE_START 0x0001 ++ ++/**@brief Last Attribute Handle. */ ++#define BLE_GATT_HANDLE_END 0xFFFF ++ ++/** @defgroup BLE_GATT_TIMEOUT_SOURCES GATT Timeout sources ++ * @{ */ ++#define BLE_GATT_TIMEOUT_SRC_PROTOCOL 0x00 /**< ATT Protocol timeout. */ ++/** @} */ ++ ++/** @defgroup BLE_GATT_WRITE_OPS GATT Write operations ++ * @{ */ ++#define BLE_GATT_OP_INVALID 0x00 /**< Invalid Operation. */ ++#define BLE_GATT_OP_WRITE_REQ 0x01 /**< Write Request. */ ++#define BLE_GATT_OP_WRITE_CMD 0x02 /**< Write Command. */ ++#define BLE_GATT_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ ++#define BLE_GATT_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ ++#define BLE_GATT_OP_EXEC_WRITE_REQ 0x05 /**< Execute Write Request. */ ++/** @} */ ++ ++/** @defgroup BLE_GATT_EXEC_WRITE_FLAGS GATT Execute Write flags ++ * @{ */ ++#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_CANCEL 0x00 /**< Cancel prepared write. */ ++#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE 0x01 /**< Execute prepared write. */ ++/** @} */ ++ ++/** @defgroup BLE_GATT_HVX_TYPES GATT Handle Value operations ++ * @{ */ ++#define BLE_GATT_HVX_INVALID 0x00 /**< Invalid Operation. */ ++#define BLE_GATT_HVX_NOTIFICATION 0x01 /**< Handle Value Notification. */ ++#define BLE_GATT_HVX_INDICATION 0x02 /**< Handle Value Indication. */ ++/** @} */ ++ ++/** @defgroup BLE_GATT_STATUS_CODES GATT Status Codes ++ * @{ */ ++#define BLE_GATT_STATUS_SUCCESS 0x0000 /**< Success. */ ++#define BLE_GATT_STATUS_UNKNOWN 0x0001 /**< Unknown or not applicable status. */ ++#define BLE_GATT_STATUS_ATTERR_INVALID 0x0100 /**< ATT Error: Invalid Error Code. */ ++#define BLE_GATT_STATUS_ATTERR_INVALID_HANDLE 0x0101 /**< ATT Error: Invalid Attribute Handle. */ ++#define BLE_GATT_STATUS_ATTERR_READ_NOT_PERMITTED 0x0102 /**< ATT Error: Read not permitted. */ ++#define BLE_GATT_STATUS_ATTERR_WRITE_NOT_PERMITTED 0x0103 /**< ATT Error: Write not permitted. */ ++#define BLE_GATT_STATUS_ATTERR_INVALID_PDU 0x0104 /**< ATT Error: Used in ATT as Invalid PDU. */ ++#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHENTICATION 0x0105 /**< ATT Error: Authenticated link required. */ ++#define BLE_GATT_STATUS_ATTERR_REQUEST_NOT_SUPPORTED 0x0106 /**< ATT Error: Used in ATT as Request Not Supported. */ ++#define BLE_GATT_STATUS_ATTERR_INVALID_OFFSET 0x0107 /**< ATT Error: Offset specified was past the end of the attribute. */ ++#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHORIZATION 0x0108 /**< ATT Error: Used in ATT as Insufficient Authorization. */ ++#define BLE_GATT_STATUS_ATTERR_PREPARE_QUEUE_FULL 0x0109 /**< ATT Error: Used in ATT as Prepare Queue Full. */ ++#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_FOUND 0x010A /**< ATT Error: Used in ATT as Attribute not found. */ ++#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_LONG 0x010B /**< ATT Error: Attribute cannot be read or written using read/write blob requests. */ ++#define BLE_GATT_STATUS_ATTERR_INSUF_ENC_KEY_SIZE 0x010C /**< ATT Error: Encryption key size used is insufficient. */ ++#define BLE_GATT_STATUS_ATTERR_INVALID_ATT_VAL_LENGTH 0x010D /**< ATT Error: Invalid value size. */ ++#define BLE_GATT_STATUS_ATTERR_UNLIKELY_ERROR 0x010E /**< ATT Error: Very unlikely error. */ ++#define BLE_GATT_STATUS_ATTERR_INSUF_ENCRYPTION 0x010F /**< ATT Error: Encrypted link required. */ ++#define BLE_GATT_STATUS_ATTERR_UNSUPPORTED_GROUP_TYPE 0x0110 /**< ATT Error: Attribute type is not a supported grouping attribute. */ ++#define BLE_GATT_STATUS_ATTERR_INSUF_RESOURCES 0x0111 /**< ATT Error: Encrypted link required. */ ++#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_BEGIN 0x0112 /**< ATT Error: Reserved for Future Use range #1 begin. */ ++#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_END 0x017F /**< ATT Error: Reserved for Future Use range #1 end. */ ++#define BLE_GATT_STATUS_ATTERR_APP_BEGIN 0x0180 /**< ATT Error: Application range begin. */ ++#define BLE_GATT_STATUS_ATTERR_APP_END 0x019F /**< ATT Error: Application range end. */ ++#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_BEGIN 0x01A0 /**< ATT Error: Reserved for Future Use range #2 begin. */ ++#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_END 0x01DF /**< ATT Error: Reserved for Future Use range #2 end. */ ++#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_BEGIN 0x01E0 /**< ATT Error: Reserved for Future Use range #3 begin. */ ++#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_END 0x01FC /**< ATT Error: Reserved for Future Use range #3 end. */ ++#define BLE_GATT_STATUS_ATTERR_CPS_CCCD_CONFIG_ERROR 0x01FD /**< ATT Common Profile and Service Error: Client Characteristic Configuration Descriptor improperly configured. */ ++#define BLE_GATT_STATUS_ATTERR_CPS_PROC_ALR_IN_PROG 0x01FE /**< ATT Common Profile and Service Error: Procedure Already in Progress. */ ++#define BLE_GATT_STATUS_ATTERR_CPS_OUT_OF_RANGE 0x01FF /**< ATT Common Profile and Service Error: Out Of Range. */ ++/** @} */ ++ ++ ++/** @defgroup BLE_GATT_CPF_FORMATS Characteristic Presentation Formats ++ * @note Found at http://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.gatt.characteristic_presentation_format.xml ++ * @{ */ ++#define BLE_GATT_CPF_FORMAT_RFU 0x00 /**< Reserved For Future Use. */ ++#define BLE_GATT_CPF_FORMAT_BOOLEAN 0x01 /**< Boolean. */ ++#define BLE_GATT_CPF_FORMAT_2BIT 0x02 /**< Unsigned 2-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_NIBBLE 0x03 /**< Unsigned 4-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_UINT8 0x04 /**< Unsigned 8-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_UINT12 0x05 /**< Unsigned 12-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_UINT16 0x06 /**< Unsigned 16-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_UINT24 0x07 /**< Unsigned 24-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_UINT32 0x08 /**< Unsigned 32-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_UINT48 0x09 /**< Unsigned 48-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_UINT64 0x0A /**< Unsigned 64-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_UINT128 0x0B /**< Unsigned 128-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_SINT8 0x0C /**< Signed 2-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_SINT12 0x0D /**< Signed 12-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_SINT16 0x0E /**< Signed 16-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_SINT24 0x0F /**< Signed 24-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_SINT32 0x10 /**< Signed 32-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_SINT48 0x11 /**< Signed 48-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_SINT64 0x12 /**< Signed 64-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_SINT128 0x13 /**< Signed 128-bit integer. */ ++#define BLE_GATT_CPF_FORMAT_FLOAT32 0x14 /**< IEEE-754 32-bit floating point. */ ++#define BLE_GATT_CPF_FORMAT_FLOAT64 0x15 /**< IEEE-754 64-bit floating point. */ ++#define BLE_GATT_CPF_FORMAT_SFLOAT 0x16 /**< IEEE-11073 16-bit SFLOAT. */ ++#define BLE_GATT_CPF_FORMAT_FLOAT 0x17 /**< IEEE-11073 32-bit FLOAT. */ ++#define BLE_GATT_CPF_FORMAT_DUINT16 0x18 /**< IEEE-20601 format. */ ++#define BLE_GATT_CPF_FORMAT_UTF8S 0x19 /**< UTF-8 string. */ ++#define BLE_GATT_CPF_FORMAT_UTF16S 0x1A /**< UTF-16 string. */ ++#define BLE_GATT_CPF_FORMAT_STRUCT 0x1B /**< Opaque Structure. */ ++/** @} */ ++ ++/** @defgroup BLE_GATT_CPF_NAMESPACES GATT Bluetooth Namespaces ++ * @{ ++ */ ++#define BLE_GATT_CPF_NAMESPACE_BTSIG 0x01 /**< Bluetooth SIG defined Namespace. */ ++#define BLE_GATT_CPF_NAMESPACE_DESCRIPTION_UNKNOWN 0x0000 /**< Namespace Description Unknown. */ ++/** @} */ ++ ++/** @} */ ++ ++/** @addtogroup BLE_GATT_STRUCTURES Structures ++ * @{ */ ++ ++/** ++ * @brief BLE GATT connection configuration parameters, set with @ref sd_ble_cfg_set. ++ * ++ * @retval ::NRF_ERROR_INVALID_PARAM att_mtu is smaller than @ref BLE_GATT_ATT_MTU_DEFAULT. ++ */ ++typedef struct ++{ ++ uint16_t att_mtu; /**< Maximum size of ATT packet the SoftDevice can send or receive. ++ The default and minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. ++ @mscs ++ @mmsc{@ref BLE_GATTC_MTU_EXCHANGE} ++ @mmsc{@ref BLE_GATTS_MTU_EXCHANGE} ++ @endmscs ++ */ ++} ble_gatt_conn_cfg_t; ++ ++/**@brief GATT Characteristic Properties. */ ++typedef struct ++{ ++ /* Standard properties */ ++ uint8_t broadcast :1; /**< Broadcasting of the value permitted. */ ++ uint8_t read :1; /**< Reading the value permitted. */ ++ uint8_t write_wo_resp :1; /**< Writing the value with Write Command permitted. */ ++ uint8_t write :1; /**< Writing the value with Write Request permitted. */ ++ uint8_t notify :1; /**< Notification of the value permitted. */ ++ uint8_t indicate :1; /**< Indications of the value permitted. */ ++ uint8_t auth_signed_wr :1; /**< Writing the value with Signed Write Command permitted. */ ++} ble_gatt_char_props_t; ++ ++/**@brief GATT Characteristic Extended Properties. */ ++typedef struct ++{ ++ /* Extended properties */ ++ uint8_t reliable_wr :1; /**< Writing the value with Queued Write operations permitted. */ ++ uint8_t wr_aux :1; /**< Writing the Characteristic User Description descriptor permitted. */ ++} ble_gatt_char_ext_props_t; ++ ++/** @} */ ++ ++#ifdef __cplusplus ++} ++#endif ++#endif // BLE_GATT_H__ ++ ++/** @} */ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_gattc.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_gattc.h +new file mode 100644 +index 0000000..f1428cd +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_gattc.h +@@ -0,0 +1,707 @@ ++/* ++ * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form, except as embedded into a Nordic ++ * Semiconductor ASA integrated circuit in a product or a software update for ++ * such product, must reproduce the above copyright notice, this list of ++ * conditions and the following disclaimer in the documentation and/or other ++ * materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its ++ * contributors may be used to endorse or promote products derived from this ++ * software without specific prior written permission. ++ * ++ * 4. This software, with or without modification, must only be used with a ++ * Nordic Semiconductor ASA integrated circuit. ++ * ++ * 5. Any software provided in binary form under this license must not be reverse ++ * engineered, decompiled, modified and/or disassembled. ++ * ++ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS ++ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE ++ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ++ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ++ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ */ ++ ++/** ++ @addtogroup BLE_GATTC Generic Attribute Profile (GATT) Client ++ @{ ++ @brief Definitions and prototypes for the GATT Client interface. ++ */ ++ ++#ifndef BLE_GATTC_H__ ++#define BLE_GATTC_H__ ++ ++#include ++#include "nrf.h" ++#include "nrf_svc.h" ++#include "nrf_error.h" ++#include "ble_hci.h" ++#include "ble_ranges.h" ++#include "ble_types.h" ++#include "ble_err.h" ++#include "ble_gatt.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/** @addtogroup BLE_GATTC_ENUMERATIONS Enumerations ++ * @{ */ ++ ++/**@brief GATTC API SVC numbers. */ ++enum BLE_GATTC_SVCS ++{ ++ SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER = BLE_GATTC_SVC_BASE, /**< Primary Service Discovery. */ ++ SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, /**< Relationship Discovery. */ ++ SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, /**< Characteristic Discovery. */ ++ SD_BLE_GATTC_DESCRIPTORS_DISCOVER, /**< Characteristic Descriptor Discovery. */ ++ SD_BLE_GATTC_ATTR_INFO_DISCOVER, /**< Attribute Information Discovery. */ ++ SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, /**< Read Characteristic Value by UUID. */ ++ SD_BLE_GATTC_READ, /**< Generic read. */ ++ SD_BLE_GATTC_CHAR_VALUES_READ, /**< Read multiple Characteristic Values. */ ++ SD_BLE_GATTC_WRITE, /**< Generic write. */ ++ SD_BLE_GATTC_HV_CONFIRM, /**< Handle Value Confirmation. */ ++ SD_BLE_GATTC_EXCHANGE_MTU_REQUEST, /**< Exchange MTU Request. */ ++}; ++ ++/** ++ * @brief GATT Client Event IDs. ++ */ ++enum BLE_GATTC_EVTS ++{ ++ BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP = BLE_GATTC_EVT_BASE, /**< Primary Service Discovery Response event. \n See @ref ble_gattc_evt_prim_srvc_disc_rsp_t. */ ++ BLE_GATTC_EVT_REL_DISC_RSP, /**< Relationship Discovery Response event. \n See @ref ble_gattc_evt_rel_disc_rsp_t. */ ++ BLE_GATTC_EVT_CHAR_DISC_RSP, /**< Characteristic Discovery Response event. \n See @ref ble_gattc_evt_char_disc_rsp_t. */ ++ BLE_GATTC_EVT_DESC_DISC_RSP, /**< Descriptor Discovery Response event. \n See @ref ble_gattc_evt_desc_disc_rsp_t. */ ++ BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, /**< Attribute Information Response event. \n See @ref ble_gattc_evt_attr_info_disc_rsp_t. */ ++ BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP, /**< Read By UUID Response event. \n See @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t. */ ++ BLE_GATTC_EVT_READ_RSP, /**< Read Response event. \n See @ref ble_gattc_evt_read_rsp_t. */ ++ BLE_GATTC_EVT_CHAR_VALS_READ_RSP, /**< Read multiple Response event. \n See @ref ble_gattc_evt_char_vals_read_rsp_t. */ ++ BLE_GATTC_EVT_WRITE_RSP, /**< Write Response event. \n See @ref ble_gattc_evt_write_rsp_t. */ ++ BLE_GATTC_EVT_HVX, /**< Handle Value Notification or Indication event. \n Confirm indication with @ref sd_ble_gattc_hv_confirm. \n See @ref ble_gattc_evt_hvx_t. */ ++ BLE_GATTC_EVT_EXCHANGE_MTU_RSP, /**< Exchange MTU Response event. \n See @ref ble_gattc_evt_exchange_mtu_rsp_t. */ ++ BLE_GATTC_EVT_TIMEOUT, /**< Timeout event. \n See @ref ble_gattc_evt_timeout_t. */ ++ BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE /**< Write without Response transmission complete. \n See @ref ble_gattc_evt_write_cmd_tx_complete_t. */ ++}; ++ ++/** @} */ ++ ++/** @addtogroup BLE_GATTC_DEFINES Defines ++ * @{ */ ++ ++/** @defgroup BLE_ERRORS_GATTC SVC return values specific to GATTC ++ * @{ */ ++#define BLE_ERROR_GATTC_PROC_NOT_PERMITTED (NRF_GATTC_ERR_BASE + 0x000) /**< Procedure not Permitted. */ ++/** @} */ ++ ++/** @defgroup BLE_GATTC_ATTR_INFO_FORMAT Attribute Information Formats ++ * @{ */ ++#define BLE_GATTC_ATTR_INFO_FORMAT_16BIT 1 /**< 16-bit Attribute Information Format. */ ++#define BLE_GATTC_ATTR_INFO_FORMAT_128BIT 2 /**< 128-bit Attribute Information Format. */ ++/** @} */ ++ ++/** @defgroup BLE_GATTC_DEFAULTS GATT Client defaults ++ * @{ */ ++#define BLE_GATTC_WRITE_CMD_TX_QUEUE_SIZE_DEFAULT 1 /**< Default number of Write without Response that can be queued for transmission. */ ++/** @} */ ++ ++/** @} */ ++ ++/** @addtogroup BLE_GATTC_STRUCTURES Structures ++ * @{ */ ++ ++/** ++ * @brief BLE GATTC connection configuration parameters, set with @ref sd_ble_cfg_set. ++ */ ++typedef struct ++{ ++ uint8_t write_cmd_tx_queue_size; /**< The guaranteed minimum number of Write without Response that can be queued for transmission. ++ The default value is @ref BLE_GATTC_WRITE_CMD_TX_QUEUE_SIZE_DEFAULT */ ++} ble_gattc_conn_cfg_t; ++ ++/**@brief Operation Handle Range. */ ++typedef struct ++{ ++ uint16_t start_handle; /**< Start Handle. */ ++ uint16_t end_handle; /**< End Handle. */ ++} ble_gattc_handle_range_t; ++ ++ ++/**@brief GATT service. */ ++typedef struct ++{ ++ ble_uuid_t uuid; /**< Service UUID. */ ++ ble_gattc_handle_range_t handle_range; /**< Service Handle Range. */ ++} ble_gattc_service_t; ++ ++ ++/**@brief GATT include. */ ++typedef struct ++{ ++ uint16_t handle; /**< Include Handle. */ ++ ble_gattc_service_t included_srvc; /**< Handle of the included service. */ ++} ble_gattc_include_t; ++ ++ ++/**@brief GATT characteristic. */ ++typedef struct ++{ ++ ble_uuid_t uuid; /**< Characteristic UUID. */ ++ ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ ++ uint8_t char_ext_props : 1; /**< Extended properties present. */ ++ uint16_t handle_decl; /**< Handle of the Characteristic Declaration. */ ++ uint16_t handle_value; /**< Handle of the Characteristic Value. */ ++} ble_gattc_char_t; ++ ++ ++/**@brief GATT descriptor. */ ++typedef struct ++{ ++ uint16_t handle; /**< Descriptor Handle. */ ++ ble_uuid_t uuid; /**< Descriptor UUID. */ ++} ble_gattc_desc_t; ++ ++ ++/**@brief Write Parameters. */ ++typedef struct ++{ ++ uint8_t write_op; /**< Write Operation to be performed, see @ref BLE_GATT_WRITE_OPS. */ ++ uint8_t flags; /**< Flags, see @ref BLE_GATT_EXEC_WRITE_FLAGS. */ ++ uint16_t handle; /**< Handle to the attribute to be written. */ ++ uint16_t offset; /**< Offset in bytes. @note For WRITE_CMD and WRITE_REQ, offset must be 0. */ ++ uint16_t len; /**< Length of data in bytes. */ ++ uint8_t const *p_value; /**< Pointer to the value data. */ ++} ble_gattc_write_params_t; ++ ++/**@brief Attribute Information for 16-bit Attribute UUID. */ ++typedef struct ++{ ++ uint16_t handle; /**< Attribute handle. */ ++ ble_uuid_t uuid; /**< 16-bit Attribute UUID. */ ++} ble_gattc_attr_info16_t; ++ ++/**@brief Attribute Information for 128-bit Attribute UUID. */ ++typedef struct ++{ ++ uint16_t handle; /**< Attribute handle. */ ++ ble_uuid128_t uuid; /**< 128-bit Attribute UUID. */ ++} ble_gattc_attr_info128_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP. */ ++typedef struct ++{ ++ uint16_t count; /**< Service count. */ ++ ble_gattc_service_t services[1]; /**< Service data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++} ble_gattc_evt_prim_srvc_disc_rsp_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_REL_DISC_RSP. */ ++typedef struct ++{ ++ uint16_t count; /**< Include count. */ ++ ble_gattc_include_t includes[1]; /**< Include data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++} ble_gattc_evt_rel_disc_rsp_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_DISC_RSP. */ ++typedef struct ++{ ++ uint16_t count; /**< Characteristic count. */ ++ ble_gattc_char_t chars[1]; /**< Characteristic data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++} ble_gattc_evt_char_disc_rsp_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_DESC_DISC_RSP. */ ++typedef struct ++{ ++ uint16_t count; /**< Descriptor count. */ ++ ble_gattc_desc_t descs[1]; /**< Descriptor data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++} ble_gattc_evt_desc_disc_rsp_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP. */ ++typedef struct ++{ ++ uint16_t count; /**< Attribute count. */ ++ uint8_t format; /**< Attribute information format, see @ref BLE_GATTC_ATTR_INFO_FORMAT. */ ++ union { ++ ble_gattc_attr_info16_t attr_info16[1]; /**< Attribute information for 16-bit Attribute UUID. ++ @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++ ble_gattc_attr_info128_t attr_info128[1]; /**< Attribute information for 128-bit Attribute UUID. ++ @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++ } info; /**< Attribute information union. */ ++} ble_gattc_evt_attr_info_disc_rsp_t; ++ ++/**@brief GATT read by UUID handle value pair. */ ++typedef struct ++{ ++ uint16_t handle; /**< Attribute Handle. */ ++ uint8_t *p_value; /**< Pointer to the Attribute Value, length is available in @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t::value_len. */ ++} ble_gattc_handle_value_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP. */ ++typedef struct ++{ ++ uint16_t count; /**< Handle-Value Pair Count. */ ++ uint16_t value_len; /**< Length of the value in Handle-Value(s) list. */ ++ uint8_t handle_value[1]; /**< Handle-Value(s) list. To iterate through the list use @ref sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter. ++ @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++} ble_gattc_evt_char_val_by_uuid_read_rsp_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_READ_RSP. */ ++typedef struct ++{ ++ uint16_t handle; /**< Attribute Handle. */ ++ uint16_t offset; /**< Offset of the attribute data. */ ++ uint16_t len; /**< Attribute data length. */ ++ uint8_t data[1]; /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++} ble_gattc_evt_read_rsp_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP. */ ++typedef struct ++{ ++ uint16_t len; /**< Concatenated Attribute values length. */ ++ uint8_t values[1]; /**< Attribute values. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++} ble_gattc_evt_char_vals_read_rsp_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_WRITE_RSP. */ ++typedef struct ++{ ++ uint16_t handle; /**< Attribute Handle. */ ++ uint8_t write_op; /**< Type of write operation, see @ref BLE_GATT_WRITE_OPS. */ ++ uint16_t offset; /**< Data offset. */ ++ uint16_t len; /**< Data length. */ ++ uint8_t data[1]; /**< Data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++} ble_gattc_evt_write_rsp_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_HVX. */ ++typedef struct ++{ ++ uint16_t handle; /**< Handle to which the HVx operation applies. */ ++ uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ ++ uint16_t len; /**< Attribute data length. */ ++ uint8_t data[1]; /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++} ble_gattc_evt_hvx_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. */ ++typedef struct ++{ ++ uint16_t server_rx_mtu; /**< Server RX MTU size. */ ++} ble_gattc_evt_exchange_mtu_rsp_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_TIMEOUT. */ ++typedef struct ++{ ++ uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ ++} ble_gattc_evt_timeout_t; ++ ++/**@brief Event structure for @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE. */ ++typedef struct ++{ ++ uint8_t count; /**< Number of write without response transmissions completed. */ ++} ble_gattc_evt_write_cmd_tx_complete_t; ++ ++/**@brief GATTC event structure. */ ++typedef struct ++{ ++ uint16_t conn_handle; /**< Connection Handle on which event occurred. */ ++ uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ ++ uint16_t error_handle; /**< In case of error: The handle causing the error. In all other cases @ref BLE_GATT_HANDLE_INVALID. */ ++ union ++ { ++ ble_gattc_evt_prim_srvc_disc_rsp_t prim_srvc_disc_rsp; /**< Primary Service Discovery Response Event Parameters. */ ++ ble_gattc_evt_rel_disc_rsp_t rel_disc_rsp; /**< Relationship Discovery Response Event Parameters. */ ++ ble_gattc_evt_char_disc_rsp_t char_disc_rsp; /**< Characteristic Discovery Response Event Parameters. */ ++ ble_gattc_evt_desc_disc_rsp_t desc_disc_rsp; /**< Descriptor Discovery Response Event Parameters. */ ++ ble_gattc_evt_char_val_by_uuid_read_rsp_t char_val_by_uuid_read_rsp; /**< Characteristic Value Read by UUID Response Event Parameters. */ ++ ble_gattc_evt_read_rsp_t read_rsp; /**< Read Response Event Parameters. */ ++ ble_gattc_evt_char_vals_read_rsp_t char_vals_read_rsp; /**< Characteristic Values Read Response Event Parameters. */ ++ ble_gattc_evt_write_rsp_t write_rsp; /**< Write Response Event Parameters. */ ++ ble_gattc_evt_hvx_t hvx; /**< Handle Value Notification/Indication Event Parameters. */ ++ ble_gattc_evt_exchange_mtu_rsp_t exchange_mtu_rsp; /**< Exchange MTU Response Event Parameters. */ ++ ble_gattc_evt_timeout_t timeout; /**< Timeout Event Parameters. */ ++ ble_gattc_evt_attr_info_disc_rsp_t attr_info_disc_rsp; /**< Attribute Information Discovery Event Parameters. */ ++ ble_gattc_evt_write_cmd_tx_complete_t write_cmd_tx_complete; /**< Write without Response transmission complete Event Parameters. */ ++ } params; /**< Event Parameters. @note Only valid if @ref gatt_status == @ref BLE_GATT_STATUS_SUCCESS. */ ++} ble_gattc_evt_t; ++/** @} */ ++ ++/** @addtogroup BLE_GATTC_FUNCTIONS Functions ++ * @{ */ ++ ++/**@brief Initiate or continue a GATT Primary Service Discovery procedure. ++ * ++ * @details This function initiates or resumes a Primary Service discovery procedure, starting from the supplied handle. ++ * If the last service has not been reached, this function must be called again with an updated start handle value to continue the search. ++ * ++ * @note If any of the discovered services have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with ++ * type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. ++ * ++ * @events ++ * @event{@ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTC_PRIM_SRVC_DISC_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] start_handle Handle to start searching from. ++ * @param[in] p_srvc_uuid Pointer to the service UUID to be found. If it is NULL, all primary services will be returned. ++ * ++ * @retval ::NRF_SUCCESS Successfully started or resumed the Primary Service Discovery procedure. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_BUSY GATT Client procedure already in progress or blocked because of a previous GATT procedure timeout. ++ */ ++SVCALL(SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER, uint32_t, sd_ble_gattc_primary_services_discover(uint16_t conn_handle, uint16_t start_handle, ble_uuid_t const *p_srvc_uuid)); ++ ++ ++/**@brief Initiate or continue a GATT Relationship Discovery procedure. ++ * ++ * @details This function initiates or resumes the Find Included Services sub-procedure. If the last included service has not been reached, ++ * this must be called again with an updated handle range to continue the search. ++ * ++ * @events ++ * @event{@ref BLE_GATTC_EVT_REL_DISC_RSP} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTC_REL_DISC_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. ++ * ++ * @retval ::NRF_SUCCESS Successfully started or resumed the Relationship Discovery procedure. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_BUSY GATT Client procedure already in progress or blocked because of a previous GATT procedure timeout. ++ */ ++SVCALL(SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, uint32_t, sd_ble_gattc_relationships_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); ++ ++ ++/**@brief Initiate or continue a GATT Characteristic Discovery procedure. ++ * ++ * @details This function initiates or resumes a Characteristic discovery procedure. If the last Characteristic has not been reached, ++ * this must be called again with an updated handle range to continue the discovery. ++ * ++ * @note If any of the discovered characteristics have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with ++ * type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. ++ * ++ * @events ++ * @event{@ref BLE_GATTC_EVT_CHAR_DISC_RSP} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTC_CHAR_DISC_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. ++ * ++ * @retval ::NRF_SUCCESS Successfully started or resumed the Characteristic Discovery procedure. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_BUSY GATT Client procedure already in progress or blocked because of a previous GATT procedure timeout. ++ */ ++SVCALL(SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, uint32_t, sd_ble_gattc_characteristics_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); ++ ++ ++/**@brief Initiate or continue a GATT Characteristic Descriptor Discovery procedure. ++ * ++ * @details This function initiates or resumes a Characteristic Descriptor discovery procedure. If the last Descriptor has not been reached, ++ * this must be called again with an updated handle range to continue the discovery. ++ * ++ * @events ++ * @event{@ref BLE_GATTC_EVT_DESC_DISC_RSP} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTC_DESC_DISC_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] p_handle_range A pointer to the range of handles of the Characteristic to perform this procedure on. ++ * ++ * @retval ::NRF_SUCCESS Successfully started or resumed the Descriptor Discovery procedure. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_BUSY GATT Client procedure already in progress or blocked because of a previous GATT procedure timeout. ++ */ ++SVCALL(SD_BLE_GATTC_DESCRIPTORS_DISCOVER, uint32_t, sd_ble_gattc_descriptors_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); ++ ++ ++/**@brief Initiate or continue a GATT Read using Characteristic UUID procedure. ++ * ++ * @details This function initiates or resumes a Read using Characteristic UUID procedure. If the last Characteristic has not been reached, ++ * this must be called again with an updated handle range to continue the discovery. ++ * ++ * @events ++ * @event{@ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTC_READ_UUID_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] p_uuid Pointer to a Characteristic value UUID to read. ++ * @param[in] p_handle_range A pointer to the range of handles to perform this procedure on. ++ * ++ * @retval ::NRF_SUCCESS Successfully started or resumed the Read using Characteristic UUID procedure. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_BUSY GATT Client procedure already in progress or blocked because of a previous GATT procedure timeout. ++ */ ++SVCALL(SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, uint32_t, sd_ble_gattc_char_value_by_uuid_read(uint16_t conn_handle, ble_uuid_t const *p_uuid, ble_gattc_handle_range_t const *p_handle_range)); ++ ++ ++/**@brief Initiate or continue a GATT Read (Long) Characteristic or Descriptor procedure. ++ * ++ * @details This function initiates or resumes a GATT Read (Long) Characteristic or Descriptor procedure. If the Characteristic or Descriptor ++ * to be read is longer than ATT_MTU - 1, this function must be called multiple times with appropriate offset to read the ++ * complete value. ++ * ++ * @events ++ * @event{@ref BLE_GATTC_EVT_READ_RSP} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTC_VALUE_READ_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] handle The handle of the attribute to be read. ++ * @param[in] offset Offset into the attribute value to be read. ++ * ++ * @retval ::NRF_SUCCESS Successfully started or resumed the Read (Long) procedure. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. ++ * @retval ::NRF_ERROR_BUSY GATT Client procedure already in progress or blocked because of a previous GATT procedure timeout. ++ */ ++SVCALL(SD_BLE_GATTC_READ, uint32_t, sd_ble_gattc_read(uint16_t conn_handle, uint16_t handle, uint16_t offset)); ++ ++ ++/**@brief Initiate a GATT Read Multiple Characteristic Values procedure. ++ * ++ * @details This function initiates a GATT Read Multiple Characteristic Values procedure. ++ * ++ * @events ++ * @event{@ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTC_READ_MULT_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] p_handles A pointer to the handle(s) of the attribute(s) to be read. ++ * @param[in] handle_count The number of handles in p_handles. ++ * ++ * @retval ::NRF_SUCCESS Successfully started the Read Multiple Characteristic Values procedure. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_BUSY GATT Client procedure already in progress or blocked because of a previous GATT procedure timeout. ++ */ ++SVCALL(SD_BLE_GATTC_CHAR_VALUES_READ, uint32_t, sd_ble_gattc_char_values_read(uint16_t conn_handle, uint16_t const *p_handles, uint16_t handle_count)); ++ ++ ++/**@brief Perform a Write (Characteristic Value or Descriptor, with or without response, signed or not, long or reliable) procedure. ++ * ++ * @details This function can perform all write procedures described in GATT. ++ * ++ * @note Only one write with response procedure can be ongoing per connection at a time. ++ * If the application tries to write with response while another write with response procedure is ongoing, ++ * the function call will return @ref NRF_ERROR_BUSY. ++ * A @ref BLE_GATTC_EVT_WRITE_RSP event will be issued as soon as the write response arrives from the peer. ++ * ++ * @note The number of Write without Response that can be queued is configured by @ref ble_gattc_conn_cfg_t::write_cmd_tx_queue_size ++ * When the queue is full, the function call will return @ref NRF_ERROR_RESOURCES. ++ * A @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event will be issued as soon as the transmission of the write without response is complete. ++ * ++ * @note The application can keep track of the available queue element count for writes without responses by following the procedure below: ++ * - Store initial queue element count in a variable. ++ * - Decrement the variable, which stores the currently available queue element count, by one when a call to this function returns @ref NRF_SUCCESS. ++ * - Increment the variable, which stores the current available queue element count, by the count variable in @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event. ++ * ++ * @events ++ * @event{@ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE, Write without response transmission complete.} ++ * @event{@ref BLE_GATTC_EVT_WRITE_RSP, Write response received from the peer.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTC_VALUE_WRITE_WITHOUT_RESP_MSC} ++ * @mmsc{@ref BLE_GATTC_VALUE_WRITE_MSC} ++ * @mmsc{@ref BLE_GATTC_VALUE_LONG_WRITE_MSC} ++ * @mmsc{@ref BLE_GATTC_VALUE_RELIABLE_WRITE_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] p_write_params A pointer to a write parameters structure. ++ * ++ * @retval ::NRF_SUCCESS Successfully started the Write procedure. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. ++ * @retval ::NRF_ERROR_BUSY For write with response, GATT Client procedure already in progress or blocked because of a previous GATT procedure timeout. ++ Wait for a @ref BLE_GATTC_EVT_WRITE_RSP event and retry. ++ For write without response it can only mean GATT procedure timeout. ++ * @retval ::NRF_ERROR_RESOURCES Too many writes without responses queued. ++ * Wait for a @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event and retry. ++ */ ++SVCALL(SD_BLE_GATTC_WRITE, uint32_t, sd_ble_gattc_write(uint16_t conn_handle, ble_gattc_write_params_t const *p_write_params)); ++ ++ ++/**@brief Send a Handle Value Confirmation to the GATT Server. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTC_HVI_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] handle The handle of the attribute in the indication. ++ * ++ * @retval ::NRF_SUCCESS Successfully queued the Handle Value Confirmation for transmission. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no Indication pending to be confirmed. ++ * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle. ++ */ ++SVCALL(SD_BLE_GATTC_HV_CONFIRM, uint32_t, sd_ble_gattc_hv_confirm(uint16_t conn_handle, uint16_t handle)); ++ ++/**@brief Discovers information about a range of attributes on a GATT server. ++ * ++ * @events ++ * @event{@ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, Generated when information about a range of attributes has been received.} ++ * @endevents ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] p_handle_range The range of handles to request information about. ++ * ++ * @retval ::NRF_SUCCESS Successfully started an attribute information discovery procedure. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_BUSY GATT Client procedure already in progress or blocked because of a previous GATT procedure timeout. ++ */ ++SVCALL(SD_BLE_GATTC_ATTR_INFO_DISCOVER, uint32_t, sd_ble_gattc_attr_info_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * p_handle_range)); ++ ++/**@brief Start an ATT_MTU exchange by sending an Exchange MTU Request to the server. ++ * ++ * @details The SoftDevice sets ATT_MTU to the minimum of: ++ * - The Client RX MTU value, and ++ * - The Server RX MTU value from @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. ++ * ++ * However, the SoftDevice never sets ATT_MTU lower than @ref BLE_GATT_ATT_MTU_DEFAULT. ++ * ++ * @events ++ * @event{@ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTC_MTU_EXCHANGE} ++ * @endmscs ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] client_rx_mtu Client RX MTU size. ++ * - The minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. ++ * - The maximum value is @ref ble_gatt_conn_cfg_t::att_mtu in the connection configuration ++ used for this connection. ++ * - The value must be equal to Server RX MTU size given in @ref sd_ble_gatts_exchange_mtu_reply ++ * if an ATT_MTU exchange has already been performed in the other direction. ++ * ++ * @retval ::NRF_SUCCESS Successfully sent request to the server. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state or an ATT_MTU exchange was already requested once. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid Client RX MTU size supplied. ++ * @retval ::NRF_ERROR_BUSY GATT Client procedure already in progress or blocked because of a previous GATT procedure timeout. ++ */ ++SVCALL(SD_BLE_GATTC_EXCHANGE_MTU_REQUEST, uint32_t, sd_ble_gattc_exchange_mtu_request(uint16_t conn_handle, uint16_t client_rx_mtu)); ++ ++/**@brief Iterate through Handle-Value(s) list in @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. ++ * ++ * @param[in] p_gattc_evt Pointer to event buffer containing @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. ++ * @note If the buffer contains different event, behavior is undefined. ++ * @param[in,out] p_iter Iterator, points to @ref ble_gattc_handle_value_t structure that will be filled in with ++ * the next Handle-Value pair in each iteration. If the function returns other than ++ * @ref NRF_SUCCESS, it will not be changed. ++ * - To start iteration, initialize the structure to zero. ++ * - To continue, pass the value from previous iteration. ++ * ++ * \code ++ * ble_gattc_handle_value_t iter; ++ * memset(&iter, 0, sizeof(ble_gattc_handle_value_t)); ++ * while (sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(&ble_evt.evt.gattc_evt, &iter) == NRF_SUCCESS) ++ * { ++ * app_handle = iter.handle; ++ * memcpy(app_value, iter.p_value, ble_evt.evt.gattc_evt.params.char_val_by_uuid_read_rsp.value_len); ++ * } ++ * \endcode ++ * ++ * @retval ::NRF_SUCCESS Successfully retrieved the next Handle-Value pair. ++ * @retval ::NRF_ERROR_NOT_FOUND No more Handle-Value pairs available in the list. ++ */ ++__STATIC_INLINE uint32_t sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(ble_gattc_evt_t *p_gattc_evt, ble_gattc_handle_value_t *p_iter); ++ ++/** @} */ ++ ++#ifndef SUPPRESS_INLINE_IMPLEMENTATION ++ ++__STATIC_INLINE uint32_t sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(ble_gattc_evt_t *p_gattc_evt, ble_gattc_handle_value_t *p_iter) ++{ ++ uint32_t value_len = p_gattc_evt->params.char_val_by_uuid_read_rsp.value_len; ++ uint8_t *p_first = p_gattc_evt->params.char_val_by_uuid_read_rsp.handle_value; ++ uint8_t *p_next = p_iter->p_value ? p_iter->p_value + value_len : p_first; ++ ++ if ((p_next - p_first) / (sizeof(uint16_t) + value_len) < p_gattc_evt->params.char_val_by_uuid_read_rsp.count) ++ { ++ p_iter->handle = (uint16_t)p_next[1] << 8 | p_next[0]; ++ p_iter->p_value = p_next + sizeof(uint16_t); ++ return NRF_SUCCESS; ++ } ++ else ++ { ++ return NRF_ERROR_NOT_FOUND; ++ } ++} ++ ++#endif /* SUPPRESS_INLINE_IMPLEMENTATION */ ++ ++#ifdef __cplusplus ++} ++#endif ++#endif /* BLE_GATTC_H__ */ ++ ++/** ++ @} ++*/ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_gatts.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_gatts.h +new file mode 100644 +index 0000000..1bba73d +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_gatts.h +@@ -0,0 +1,841 @@ ++/* ++ * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form, except as embedded into a Nordic ++ * Semiconductor ASA integrated circuit in a product or a software update for ++ * such product, must reproduce the above copyright notice, this list of ++ * conditions and the following disclaimer in the documentation and/or other ++ * materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its ++ * contributors may be used to endorse or promote products derived from this ++ * software without specific prior written permission. ++ * ++ * 4. This software, with or without modification, must only be used with a ++ * Nordic Semiconductor ASA integrated circuit. ++ * ++ * 5. Any software provided in binary form under this license must not be reverse ++ * engineered, decompiled, modified and/or disassembled. ++ * ++ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS ++ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE ++ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ++ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ++ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ */ ++ ++/** ++ @addtogroup BLE_GATTS Generic Attribute Profile (GATT) Server ++ @{ ++ @brief Definitions and prototypes for the GATTS interface. ++ */ ++ ++#ifndef BLE_GATTS_H__ ++#define BLE_GATTS_H__ ++ ++#include ++#include "nrf_svc.h" ++#include "nrf_error.h" ++#include "ble_hci.h" ++#include "ble_ranges.h" ++#include "ble_types.h" ++#include "ble_err.h" ++#include "ble_gatt.h" ++#include "ble_gap.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/** @addtogroup BLE_GATTS_ENUMERATIONS Enumerations ++ * @{ */ ++ ++/** ++ * @brief GATTS API SVC numbers. ++ */ ++enum BLE_GATTS_SVCS ++{ ++ SD_BLE_GATTS_SERVICE_ADD = BLE_GATTS_SVC_BASE, /**< Add a service. */ ++ SD_BLE_GATTS_INCLUDE_ADD, /**< Add an included service. */ ++ SD_BLE_GATTS_CHARACTERISTIC_ADD, /**< Add a characteristic. */ ++ SD_BLE_GATTS_DESCRIPTOR_ADD, /**< Add a generic attribute. */ ++ SD_BLE_GATTS_VALUE_SET, /**< Set an attribute value. */ ++ SD_BLE_GATTS_VALUE_GET, /**< Get an attribute value. */ ++ SD_BLE_GATTS_HVX, /**< Handle Value Notification or Indication. */ ++ SD_BLE_GATTS_SERVICE_CHANGED, /**< Perform a Service Changed Indication to one or more peers. */ ++ SD_BLE_GATTS_RW_AUTHORIZE_REPLY, /**< Reply to an authorization request for a read or write operation on one or more attributes. */ ++ SD_BLE_GATTS_SYS_ATTR_SET, /**< Set the persistent system attributes for a connection. */ ++ SD_BLE_GATTS_SYS_ATTR_GET, /**< Retrieve the persistent system attributes. */ ++ SD_BLE_GATTS_INITIAL_USER_HANDLE_GET, /**< Retrieve the first valid user handle. */ ++ SD_BLE_GATTS_ATTR_GET, /**< Retrieve the UUID and/or metadata of an attribute. */ ++ SD_BLE_GATTS_EXCHANGE_MTU_REPLY /**< Reply to Exchange MTU Request. */ ++}; ++ ++/** ++ * @brief GATT Server Event IDs. ++ */ ++enum BLE_GATTS_EVTS ++{ ++ BLE_GATTS_EVT_WRITE = BLE_GATTS_EVT_BASE, /**< Write operation performed. \n See @ref ble_gatts_evt_write_t. */ ++ BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST, /**< Read/Write Authorization request. \n Reply with @ref sd_ble_gatts_rw_authorize_reply. \n See @ref ble_gatts_evt_rw_authorize_request_t. */ ++ BLE_GATTS_EVT_SYS_ATTR_MISSING, /**< A persistent system attribute access is pending. \n Respond with @ref sd_ble_gatts_sys_attr_set. \n See @ref ble_gatts_evt_sys_attr_missing_t. */ ++ BLE_GATTS_EVT_HVC, /**< Handle Value Confirmation. \n See @ref ble_gatts_evt_hvc_t. */ ++ BLE_GATTS_EVT_SC_CONFIRM, /**< Service Changed Confirmation. \n No additional event structure applies. */ ++ BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST, /**< Exchange MTU Request. \n Reply with @ref sd_ble_gatts_exchange_mtu_reply. \n See @ref ble_gatts_evt_exchange_mtu_request_t. */ ++ BLE_GATTS_EVT_TIMEOUT, /**< Peer failed to respond to an ATT request in time. \n See @ref ble_gatts_evt_timeout_t. */ ++ BLE_GATTS_EVT_HVN_TX_COMPLETE /**< Handle Value Notification transmission complete. \n See @ref ble_gatts_evt_hvn_tx_complete_t. */ ++}; ++ ++/**@brief GATTS Configuration IDs. ++ * ++ * IDs that uniquely identify a GATTS configuration. ++ */ ++enum BLE_GATTS_CFGS ++{ ++ BLE_GATTS_CFG_SERVICE_CHANGED = BLE_GATTS_CFG_BASE, /**< Service changed configuration. */ ++ BLE_GATTS_CFG_ATTR_TAB_SIZE, /**< Attribute table size configuration. */ ++}; ++ ++/** @} */ ++ ++/** @addtogroup BLE_GATTS_DEFINES Defines ++ * @{ */ ++ ++/** @defgroup BLE_ERRORS_GATTS SVC return values specific to GATTS ++ * @{ */ ++#define BLE_ERROR_GATTS_INVALID_ATTR_TYPE (NRF_GATTS_ERR_BASE + 0x000) /**< Invalid attribute type. */ ++#define BLE_ERROR_GATTS_SYS_ATTR_MISSING (NRF_GATTS_ERR_BASE + 0x001) /**< System Attributes missing. */ ++/** @} */ ++ ++/** @defgroup BLE_GATTS_ATTR_LENS_MAX Maximum attribute lengths ++ * @{ */ ++#define BLE_GATTS_FIX_ATTR_LEN_MAX (510) /**< Maximum length for fixed length Attribute Values. */ ++#define BLE_GATTS_VAR_ATTR_LEN_MAX (512) /**< Maximum length for variable length Attribute Values. */ ++/** @} */ ++ ++/** @defgroup BLE_GATTS_SRVC_TYPES GATT Server Service Types ++ * @{ */ ++#define BLE_GATTS_SRVC_TYPE_INVALID 0x00 /**< Invalid Service Type. */ ++#define BLE_GATTS_SRVC_TYPE_PRIMARY 0x01 /**< Primary Service. */ ++#define BLE_GATTS_SRVC_TYPE_SECONDARY 0x02 /**< Secondary Type. */ ++/** @} */ ++ ++ ++/** @defgroup BLE_GATTS_ATTR_TYPES GATT Server Attribute Types ++ * @{ */ ++#define BLE_GATTS_ATTR_TYPE_INVALID 0x00 /**< Invalid Attribute Type. */ ++#define BLE_GATTS_ATTR_TYPE_PRIM_SRVC_DECL 0x01 /**< Primary Service Declaration. */ ++#define BLE_GATTS_ATTR_TYPE_SEC_SRVC_DECL 0x02 /**< Secondary Service Declaration. */ ++#define BLE_GATTS_ATTR_TYPE_INC_DECL 0x03 /**< Include Declaration. */ ++#define BLE_GATTS_ATTR_TYPE_CHAR_DECL 0x04 /**< Characteristic Declaration. */ ++#define BLE_GATTS_ATTR_TYPE_CHAR_VAL 0x05 /**< Characteristic Value. */ ++#define BLE_GATTS_ATTR_TYPE_DESC 0x06 /**< Descriptor. */ ++#define BLE_GATTS_ATTR_TYPE_OTHER 0x07 /**< Other, non-GATT specific type. */ ++/** @} */ ++ ++ ++/** @defgroup BLE_GATTS_OPS GATT Server Operations ++ * @{ */ ++#define BLE_GATTS_OP_INVALID 0x00 /**< Invalid Operation. */ ++#define BLE_GATTS_OP_WRITE_REQ 0x01 /**< Write Request. */ ++#define BLE_GATTS_OP_WRITE_CMD 0x02 /**< Write Command. */ ++#define BLE_GATTS_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ ++#define BLE_GATTS_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ ++#define BLE_GATTS_OP_EXEC_WRITE_REQ_CANCEL 0x05 /**< Execute Write Request: Cancel all prepared writes. */ ++#define BLE_GATTS_OP_EXEC_WRITE_REQ_NOW 0x06 /**< Execute Write Request: Immediately execute all prepared writes. */ ++/** @} */ ++ ++/** @defgroup BLE_GATTS_VLOCS GATT Value Locations ++ * @{ */ ++#define BLE_GATTS_VLOC_INVALID 0x00 /**< Invalid Location. */ ++#define BLE_GATTS_VLOC_STACK 0x01 /**< Attribute Value is located in stack memory, no user memory is required. */ ++#define BLE_GATTS_VLOC_USER 0x02 /**< Attribute Value is located in user memory. This requires the user to maintain a valid buffer through the lifetime of the attribute, since the stack ++ will read and write directly to the memory using the pointer provided in the APIs. There are no alignment requirements for the buffer. */ ++/** @} */ ++ ++/** @defgroup BLE_GATTS_AUTHORIZE_TYPES GATT Server Authorization Types ++ * @{ */ ++#define BLE_GATTS_AUTHORIZE_TYPE_INVALID 0x00 /**< Invalid Type. */ ++#define BLE_GATTS_AUTHORIZE_TYPE_READ 0x01 /**< Authorize a Read Operation. */ ++#define BLE_GATTS_AUTHORIZE_TYPE_WRITE 0x02 /**< Authorize a Write Request Operation. */ ++/** @} */ ++ ++/** @defgroup BLE_GATTS_SYS_ATTR_FLAGS System Attribute Flags ++ * @{ */ ++#define BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS (1 << 0) /**< Restrict system attributes to system services only. */ ++#define BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS (1 << 1) /**< Restrict system attributes to user services only. */ ++/** @} */ ++ ++/** @defgroup BLE_GATTS_SERVICE_CHANGED Service Changed Inclusion Values ++ * @{ ++ */ ++#define BLE_GATTS_SERVICE_CHANGED_DEFAULT (1) /**< Default is to include the Service Changed characteristic in the Attribute Table. */ ++/** @} */ ++ ++/** @defgroup BLE_GATTS_ATTR_TAB_SIZE Attribute Table size ++ * @{ ++ */ ++#define BLE_GATTS_ATTR_TAB_SIZE_MIN (248) /**< Minimum Attribute Table size */ ++#define BLE_GATTS_ATTR_TAB_SIZE_DEFAULT (1408) /**< Default Attribute Table size. */ ++/** @} */ ++ ++/** @defgroup BLE_GATTS_DEFAULTS GATT Server defaults ++ * @{ ++ */ ++#define BLE_GATTS_HVN_TX_QUEUE_SIZE_DEFAULT 1 /**< Default number of Handle Value Notifications that can be queued for transmission. */ ++/** @} */ ++ ++/** @} */ ++ ++/** @addtogroup BLE_GATTS_STRUCTURES Structures ++ * @{ */ ++ ++/** ++ * @brief BLE GATTS connection configuration parameters, set with @ref sd_ble_cfg_set. ++ */ ++typedef struct ++{ ++ uint8_t hvn_tx_queue_size; /**< Minimum guaranteed number of Handle Value Notifications that can be queued for transmission. ++ The default value is @ref BLE_GATTS_HVN_TX_QUEUE_SIZE_DEFAULT */ ++} ble_gatts_conn_cfg_t; ++ ++/**@brief Attribute metadata. */ ++typedef struct ++{ ++ ble_gap_conn_sec_mode_t read_perm; /**< Read permissions. */ ++ ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ ++ uint8_t vlen :1; /**< Variable length attribute. */ ++ uint8_t vloc :2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ ++ uint8_t rd_auth :1; /**< Read authorization and value will be requested from the application on every read operation. */ ++ uint8_t wr_auth :1; /**< Write authorization will be requested from the application on every Write Request operation (but not Write Command). */ ++} ble_gatts_attr_md_t; ++ ++ ++/**@brief GATT Attribute. */ ++typedef struct ++{ ++ ble_uuid_t const *p_uuid; /**< Pointer to the attribute UUID. */ ++ ble_gatts_attr_md_t const *p_attr_md; /**< Pointer to the attribute metadata structure. */ ++ uint16_t init_len; /**< Initial attribute value length in bytes. */ ++ uint16_t init_offs; /**< Initial attribute value offset in bytes. If different from zero, the first init_offs bytes of the attribute value will be left uninitialized. */ ++ uint16_t max_len; /**< Maximum attribute value length in bytes, see @ref BLE_GATTS_ATTR_LENS_MAX for maximum values. */ ++ uint8_t *p_value; /**< Pointer to the attribute data. Please note that if the @ref BLE_GATTS_VLOC_USER value location is selected in the attribute metadata, this will have to point to a buffer ++ that remains valid through the lifetime of the attribute. This excludes usage of automatic variables that may go out of scope or any other temporary location. ++ The stack may access that memory directly without the application's knowledge. For writable characteristics, this value must not be a location in flash memory.*/ ++} ble_gatts_attr_t; ++ ++/**@brief GATT Attribute Value. */ ++typedef struct ++{ ++ uint16_t len; /**< Length in bytes to be written or read. Length in bytes written or read after successful return.*/ ++ uint16_t offset; /**< Attribute value offset. */ ++ uint8_t *p_value; /**< Pointer to where value is stored or will be stored. ++ If value is stored in user memory, only the attribute length is updated when p_value == NULL. ++ Set to NULL when reading to obtain the complete length of the attribute value */ ++} ble_gatts_value_t; ++ ++ ++/**@brief GATT Characteristic Presentation Format. */ ++typedef struct ++{ ++ uint8_t format; /**< Format of the value, see @ref BLE_GATT_CPF_FORMATS. */ ++ int8_t exponent; /**< Exponent for integer data types. */ ++ uint16_t unit; /**< Unit from Bluetooth Assigned Numbers. */ ++ uint8_t name_space; /**< Namespace from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ ++ uint16_t desc; /**< Namespace description from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ ++} ble_gatts_char_pf_t; ++ ++ ++/**@brief GATT Characteristic metadata. */ ++typedef struct ++{ ++ ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ ++ ble_gatt_char_ext_props_t char_ext_props; /**< Characteristic Extended Properties. */ ++ uint8_t const *p_char_user_desc; /**< Pointer to a UTF-8 encoded string (non-NULL terminated), NULL if the descriptor is not required. */ ++ uint16_t char_user_desc_max_size; /**< The maximum size in bytes of the user description descriptor. */ ++ uint16_t char_user_desc_size; /**< The size of the user description, must be smaller or equal to char_user_desc_max_size. */ ++ ble_gatts_char_pf_t const *p_char_pf; /**< Pointer to a presentation format structure or NULL if the CPF descriptor is not required. */ ++ ble_gatts_attr_md_t const *p_user_desc_md; /**< Attribute metadata for the User Description descriptor, or NULL for default values. */ ++ ble_gatts_attr_md_t const *p_cccd_md; /**< Attribute metadata for the Client Characteristic Configuration Descriptor, or NULL for default values. */ ++ ble_gatts_attr_md_t const *p_sccd_md; /**< Attribute metadata for the Server Characteristic Configuration Descriptor, or NULL for default values. */ ++} ble_gatts_char_md_t; ++ ++ ++/**@brief GATT Characteristic Definition Handles. */ ++typedef struct ++{ ++ uint16_t value_handle; /**< Handle to the characteristic value. */ ++ uint16_t user_desc_handle; /**< Handle to the User Description descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ ++ uint16_t cccd_handle; /**< Handle to the Client Characteristic Configuration Descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ ++ uint16_t sccd_handle; /**< Handle to the Server Characteristic Configuration Descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ ++} ble_gatts_char_handles_t; ++ ++ ++/**@brief GATT HVx parameters. */ ++typedef struct ++{ ++ uint16_t handle; /**< Characteristic Value Handle. */ ++ uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ ++ uint16_t offset; /**< Offset within the attribute value. */ ++ uint16_t *p_len; /**< Length in bytes to be written, length in bytes written after successful return. */ ++ uint8_t const *p_data; /**< Actual data content, use NULL to use the current attribute value. */ ++} ble_gatts_hvx_params_t; ++ ++/**@brief GATT Authorization parameters. */ ++typedef struct ++{ ++ uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ ++ uint8_t update : 1; /**< If set, data supplied in p_data will be used to update the attribute value. ++ Please note that for @ref BLE_GATTS_AUTHORIZE_TYPE_WRITE operations this bit must always be set, ++ as the data to be written needs to be stored and later provided by the application. */ ++ uint16_t offset; /**< Offset of the attribute value being updated. */ ++ uint16_t len; /**< Length in bytes of the value in p_data pointer, see @ref BLE_GATTS_ATTR_LENS_MAX. */ ++ uint8_t const *p_data; /**< Pointer to new value used to update the attribute value. */ ++} ble_gatts_authorize_params_t; ++ ++/**@brief GATT Read or Write Authorize Reply parameters. */ ++typedef struct ++{ ++ uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ ++ union { ++ ble_gatts_authorize_params_t read; /**< Read authorization parameters. */ ++ ble_gatts_authorize_params_t write; /**< Write authorization parameters. */ ++ } params; /**< Reply Parameters. */ ++} ble_gatts_rw_authorize_reply_params_t; ++ ++/**@brief Service Changed Inclusion configuration parameters, set with @ref sd_ble_cfg_set. */ ++typedef struct ++{ ++ uint8_t service_changed : 1; /**< If 1, include the Service Changed characteristic in the Attribute Table. Default is @ref BLE_GATTS_SERVICE_CHANGED_DEFAULT. */ ++} ble_gatts_cfg_service_changed_t; ++ ++/**@brief Attribute table size configuration parameters, set with @ref sd_ble_cfg_set. ++ * ++ * @retval ::NRF_ERROR_INVALID_LENGTH One or more of the following is true: ++ * - The specified Attribute Table size is too small. ++ * The minimum acceptable size is defined by @ref BLE_GATTS_ATTR_TAB_SIZE_MIN. ++ * - The specified Attribute Table size is not a multiple of 4. ++ */ ++typedef struct ++{ ++ uint32_t attr_tab_size; /**< Attribute table size. Default is @ref BLE_GATTS_ATTR_TAB_SIZE_DEFAULT, minimum is @ref BLE_GATTS_ATTR_TAB_SIZE_MIN. */ ++} ble_gatts_cfg_attr_tab_size_t; ++ ++/**@brief Config structure for GATTS configurations. */ ++typedef union ++{ ++ ble_gatts_cfg_service_changed_t service_changed; /**< Include service changed characteristic, cfg_id is @ref BLE_GATTS_CFG_SERVICE_CHANGED. */ ++ ble_gatts_cfg_attr_tab_size_t attr_tab_size; /**< Attribute table size, cfg_id is @ref BLE_GATTS_CFG_ATTR_TAB_SIZE. */ ++} ble_gatts_cfg_t; ++ ++ ++/**@brief Event structure for @ref BLE_GATTS_EVT_WRITE. */ ++typedef struct ++{ ++ uint16_t handle; /**< Attribute Handle. */ ++ ble_uuid_t uuid; /**< Attribute UUID. */ ++ uint8_t op; /**< Type of write operation, see @ref BLE_GATTS_OPS. */ ++ uint8_t auth_required; /**< Writing operation deferred due to authorization requirement. Application may use @ref sd_ble_gatts_value_set to finalize the writing operation. */ ++ uint16_t offset; /**< Offset for the write operation. */ ++ uint16_t len; /**< Length of the received data. */ ++ uint8_t data[1]; /**< Received data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. ++ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ ++} ble_gatts_evt_write_t; ++ ++/**@brief Event substructure for authorized read requests, see @ref ble_gatts_evt_rw_authorize_request_t. */ ++typedef struct ++{ ++ uint16_t handle; /**< Attribute Handle. */ ++ ble_uuid_t uuid; /**< Attribute UUID. */ ++ uint16_t offset; /**< Offset for the read operation. */ ++} ble_gatts_evt_read_t; ++ ++/**@brief Event structure for @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST. */ ++typedef struct ++{ ++ uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ ++ union { ++ ble_gatts_evt_read_t read; /**< Attribute Read Parameters. */ ++ ble_gatts_evt_write_t write; /**< Attribute Write Parameters. */ ++ } request; /**< Request Parameters. */ ++} ble_gatts_evt_rw_authorize_request_t; ++ ++/**@brief Event structure for @ref BLE_GATTS_EVT_SYS_ATTR_MISSING. */ ++typedef struct ++{ ++ uint8_t hint; /**< Hint (currently unused). */ ++} ble_gatts_evt_sys_attr_missing_t; ++ ++ ++/**@brief Event structure for @ref BLE_GATTS_EVT_HVC. */ ++typedef struct ++{ ++ uint16_t handle; /**< Attribute Handle. */ ++} ble_gatts_evt_hvc_t; ++ ++/**@brief Event structure for @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST. */ ++typedef struct ++{ ++ uint16_t client_rx_mtu; /**< Client RX MTU size. */ ++} ble_gatts_evt_exchange_mtu_request_t; ++ ++/**@brief Event structure for @ref BLE_GATTS_EVT_TIMEOUT. */ ++typedef struct ++{ ++ uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ ++} ble_gatts_evt_timeout_t; ++ ++/**@brief Event structure for @ref BLE_GATTS_EVT_HVN_TX_COMPLETE. */ ++typedef struct ++{ ++ uint8_t count; /**< Number of notification transmissions completed. */ ++} ble_gatts_evt_hvn_tx_complete_t; ++ ++/**@brief GATTS event structure. */ ++typedef struct ++{ ++ uint16_t conn_handle; /**< Connection Handle on which the event occurred. */ ++ union ++ { ++ ble_gatts_evt_write_t write; /**< Write Event Parameters. */ ++ ble_gatts_evt_rw_authorize_request_t authorize_request; /**< Read or Write Authorize Request Parameters. */ ++ ble_gatts_evt_sys_attr_missing_t sys_attr_missing; /**< System attributes missing. */ ++ ble_gatts_evt_hvc_t hvc; /**< Handle Value Confirmation Event Parameters. */ ++ ble_gatts_evt_exchange_mtu_request_t exchange_mtu_request; /**< Exchange MTU Request Event Parameters. */ ++ ble_gatts_evt_timeout_t timeout; /**< Timeout Event. */ ++ ble_gatts_evt_hvn_tx_complete_t hvn_tx_complete; /**< Handle Value Notification transmission complete Event Parameters. */ ++ } params; /**< Event Parameters. */ ++} ble_gatts_evt_t; ++ ++/** @} */ ++ ++/** @addtogroup BLE_GATTS_FUNCTIONS Functions ++ * @{ */ ++ ++/**@brief Add a service declaration to the Attribute Table. ++ * ++ * @note Secondary Services are only relevant in the context of the entity that references them, it is therefore forbidden to ++ * add a secondary service declaration that is not referenced by another service later in the Attribute Table. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} ++ * @endmscs ++ * ++ * @param[in] type Toggles between primary and secondary services, see @ref BLE_GATTS_SRVC_TYPES. ++ * @param[in] p_uuid Pointer to service UUID. ++ * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. ++ * ++ * @retval ::NRF_SUCCESS Successfully added a service declaration. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, Vendor Specific UUIDs need to be present in the table. ++ * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. ++ * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. ++ */ ++SVCALL(SD_BLE_GATTS_SERVICE_ADD, uint32_t, sd_ble_gatts_service_add(uint8_t type, ble_uuid_t const *p_uuid, uint16_t *p_handle)); ++ ++ ++/**@brief Add an include declaration to the Attribute Table. ++ * ++ * @note It is currently only possible to add an include declaration to the last added service (i.e. only sequential population is supported at this time). ++ * ++ * @note The included service must already be present in the Attribute Table prior to this call. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} ++ * @endmscs ++ * ++ * @param[in] service_handle Handle of the service where the included service is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. ++ * @param[in] inc_srvc_handle Handle of the included service. ++ * @param[out] p_include_handle Pointer to a 16-bit word where the assigned handle will be stored. ++ * ++ * @retval ::NRF_SUCCESS Successfully added an include declaration. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, handle values need to match previously added services. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. ++ * @retval ::NRF_ERROR_NOT_SUPPORTED Feature is not supported, service_handle must be that of the last added service. ++ * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, self inclusions are not allowed. ++ * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. ++ * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. ++ */ ++SVCALL(SD_BLE_GATTS_INCLUDE_ADD, uint32_t, sd_ble_gatts_include_add(uint16_t service_handle, uint16_t inc_srvc_handle, uint16_t *p_include_handle)); ++ ++ ++/**@brief Add a characteristic declaration, a characteristic value declaration and optional characteristic descriptor declarations to the Attribute Table. ++ * ++ * @note It is currently only possible to add a characteristic to the last added service (i.e. only sequential population is supported at this time). ++ * ++ * @note Several restrictions apply to the parameters, such as matching permissions between the user description descriptor and the writable auxiliaries bits, ++ * readable (no security) and writable (selectable) CCCDs and SCCDs and valid presentation format values. ++ * ++ * @note If no metadata is provided for the optional descriptors, their permissions will be derived from the characteristic permissions. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} ++ * @endmscs ++ * ++ * @param[in] service_handle Handle of the service where the characteristic is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. ++ * @param[in] p_char_md Characteristic metadata. ++ * @param[in] p_attr_char_value Pointer to the attribute structure corresponding to the characteristic value. ++ * @param[out] p_handles Pointer to the structure where the assigned handles will be stored. ++ * ++ * @retval ::NRF_SUCCESS Successfully added a characteristic. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, service handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a service context is required. ++ * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. ++ * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. ++ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. ++ */ ++SVCALL(SD_BLE_GATTS_CHARACTERISTIC_ADD, uint32_t, sd_ble_gatts_characteristic_add(uint16_t service_handle, ble_gatts_char_md_t const *p_char_md, ble_gatts_attr_t const *p_attr_char_value, ble_gatts_char_handles_t *p_handles)); ++ ++ ++/**@brief Add a descriptor to the Attribute Table. ++ * ++ * @note It is currently only possible to add a descriptor to the last added characteristic (i.e. only sequential population is supported at this time). ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} ++ * @endmscs ++ * ++ * @param[in] char_handle Handle of the characteristic where the descriptor is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. ++ * @param[in] p_attr Pointer to the attribute structure. ++ * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. ++ * ++ * @retval ::NRF_SUCCESS Successfully added a descriptor. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, characteristic handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a characteristic context is required. ++ * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. ++ * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. ++ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. ++ */ ++SVCALL(SD_BLE_GATTS_DESCRIPTOR_ADD, uint32_t, sd_ble_gatts_descriptor_add(uint16_t char_handle, ble_gatts_attr_t const *p_attr, uint16_t *p_handle)); ++ ++/**@brief Set the value of a given attribute. ++ * ++ * @note Values other than system attributes can be set at any time, regardless of whether any active connections exist. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} ++ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. Ignored if the value does not belong to a system attribute. ++ * @param[in] handle Attribute handle. ++ * @param[in,out] p_value Attribute value information. ++ * ++ * @retval ::NRF_SUCCESS Successfully set the value of the attribute. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. ++ * @retval ::NRF_ERROR_FORBIDDEN Forbidden handle supplied, certain attributes are not modifiable by the application. ++ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied on a system attribute. ++ */ ++SVCALL(SD_BLE_GATTS_VALUE_SET, uint32_t, sd_ble_gatts_value_set(uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value)); ++ ++/**@brief Get the value of a given attribute. ++ * ++ * @note If the attribute value is longer than the size of the supplied buffer, ++ * p_len will return the total attribute value length (excluding offset), ++ * and not the number of bytes actually returned in p_data. ++ * The application may use this information to allocate a suitable buffer size. ++ * ++ * @note When retrieving system attribute values with this function, the connection handle ++ * may refer to an already disconnected connection. Refer to the documentation of ++ * @ref sd_ble_gatts_sys_attr_get for further information. ++ * ++ * @param[in] conn_handle Connection handle. Ignored if the value does not belong to a system attribute. ++ * @param[in] handle Attribute handle. ++ * @param[in,out] p_value Attribute value information. ++ * ++ * @retval ::NRF_SUCCESS Successfully retrieved the value of the attribute. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid attribute offset supplied. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied on a system attribute. ++ * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. ++ */ ++SVCALL(SD_BLE_GATTS_VALUE_GET, uint32_t, sd_ble_gatts_value_get(uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value)); ++ ++/**@brief Notify or Indicate an attribute value. ++ * ++ * @details This function checks for the relevant Client Characteristic Configuration descriptor value to verify that the relevant operation ++ * (notification or indication) has been enabled by the client. It is also able to update the attribute value before issuing the PDU, so that ++ * the application can atomically perform a value update and a server initiated transaction with a single API call. ++ * ++ * @note The local attribute value may be updated even if an outgoing packet is not sent to the peer due to an error during execution. ++ * The Attribute Table has been updated if one of the following error codes is returned: @ref NRF_ERROR_INVALID_STATE, @ref NRF_ERROR_BUSY, ++ * @ref NRF_ERROR_FORBIDDEN, @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING and @ref NRF_ERROR_RESOURCES. ++ * The caller can check whether the value has been updated by looking at the contents of *(p_hvx_params->p_len). ++ * ++ * @note Only one indication procedure can be ongoing per connection at a time. ++ * If the application tries to indicate an attribute value while another indication procedure is ongoing, ++ * the function call will return @ref NRF_ERROR_BUSY. ++ * A @ref BLE_GATTS_EVT_HVC event will be issued as soon as the confirmation arrives from the peer. ++ * ++ * @note The number of Handle Value Notifications that can be queued is configured by @ref ble_gatts_conn_cfg_t::hvn_tx_queue_size ++ * When the queue is full, the function call will return @ref NRF_ERROR_RESOURCES. ++ * A @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event will be issued as soon as the transmission of the notification is complete. ++ * ++ * @note The application can keep track of the available queue element count for notifications by following the procedure below: ++ * - Store initial queue element count in a variable. ++ * - Decrement the variable, which stores the currently available queue element count, by one when a call to this function returns @ref NRF_SUCCESS. ++ * - Increment the variable, which stores the current available queue element count, by the count variable in @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event. ++ * ++ * @events ++ * @event{@ref BLE_GATTS_EVT_HVN_TX_COMPLETE, Notification transmission complete.} ++ * @event{@ref BLE_GATTS_EVT_HVC, Confirmation received from the peer.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTS_HVX_SYS_ATTRS_MISSING_MSC} ++ * @mmsc{@ref BLE_GATTS_HVN_MSC} ++ * @mmsc{@ref BLE_GATTS_HVI_MSC} ++ * @mmsc{@ref BLE_GATTS_HVX_DISABLED_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] p_hvx_params Pointer to an HVx parameters structure. If the p_data member contains a non-NULL pointer the attribute value will be updated with ++ * the contents pointed by it before sending the notification or indication. ++ * ++ * @retval ::NRF_SUCCESS Successfully queued a notification or indication for transmission, and optionally updated the attribute value. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE One or more of the following is true: ++ * - Invalid Connection State ++ * - Notifications and/or indications not enabled in the CCCD ++ * - An ATT_MTU exchange is ongoing ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied. Only attributes added directly by the application are available to notify and indicate. ++ * @retval ::BLE_ERROR_GATTS_INVALID_ATTR_TYPE Invalid attribute type(s) supplied, only characteristic values may be notified and indicated. ++ * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. ++ * @retval ::NRF_ERROR_FORBIDDEN The connection's current security level is lower than the one required by the write permissions of the CCCD associated with this characteristic. ++ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. ++ * @retval ::NRF_ERROR_BUSY For @ref BLE_GATT_HVX_INDICATION, GATT Server procedure already in progress or blocked because of a previous GATT procedure timeout. ++ Wait for a @ref BLE_GATTS_EVT_HVC event and retry. ++ For @ref BLE_GATT_HVX_NOTIFICATION it can only mean GATT procedure timeout. ++ * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. ++ * @retval ::NRF_ERROR_RESOURCES Too many notifications queued. ++ * Wait for a @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event and retry. ++ */ ++SVCALL(SD_BLE_GATTS_HVX, uint32_t, sd_ble_gatts_hvx(uint16_t conn_handle, ble_gatts_hvx_params_t const *p_hvx_params)); ++ ++/**@brief Indicate the Service Changed attribute value. ++ * ++ * @details This call will send a Handle Value Indication to one or more peers connected to inform them that the Attribute ++ * Table layout has changed. As soon as the peer has confirmed the indication, a @ref BLE_GATTS_EVT_SC_CONFIRM event will ++ * be issued. ++ * ++ * @note Some of the restrictions and limitations that apply to @ref sd_ble_gatts_hvx also apply here. ++ * ++ * @events ++ * @event{@ref BLE_GATTS_EVT_SC_CONFIRM, Confirmation of attribute table change received from peer.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTS_SC_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] start_handle Start of affected attribute handle range. ++ * @param[in] end_handle End of affected attribute handle range. ++ * ++ * @retval ::NRF_SUCCESS Successfully queued the Service Changed indication for transmission. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_NOT_SUPPORTED Service Changed not enabled at initialization. See @ref ++ * sd_ble_cfg_set and @ref ble_gatts_cfg_service_changed_t. ++ * @retval ::NRF_ERROR_INVALID_STATE One or more of the following is true: ++ * - Invalid Connection State ++ * - Notifications and/or indications not enabled in the CCCD ++ * - An ATT_MTU exchange is ongoing ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied, handles must be in the range populated by the application. ++ * @retval ::NRF_ERROR_BUSY GATT Server procedure already in progress or blocked because of a previous GATT procedure timeout. ++ * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. ++ */ ++SVCALL(SD_BLE_GATTS_SERVICE_CHANGED, uint32_t, sd_ble_gatts_service_changed(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle)); ++ ++/**@brief Respond to a Read/Write authorization request. ++ * ++ * @note This call should only be used as a response to a @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST event issued to the application. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC} ++ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC} ++ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} ++ * @mmsc{@ref BLE_GATTS_READ_REQ_AUTH_MSC} ++ * @mmsc{@ref BLE_GATTS_WRITE_REQ_AUTH_MSC} ++ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} ++ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_PEER_CANCEL_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] p_rw_authorize_reply_params Pointer to a structure with the attribute provided by the application. ++ * ++ * @note @ref ble_gatts_authorize_params_t::p_data is ignored when this function is used to respond ++ * to a @ref BLE_GATTS_AUTHORIZE_TYPE_READ event if @ref ble_gatts_authorize_params_t::update ++ * is set to 0. ++ * ++ * @retval ::NRF_SUCCESS Successfully queued a response to the peer, and in the case of a write operation, Attribute Table updated. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no authorization request pending. ++ * @retval ::NRF_ERROR_INVALID_PARAM Authorization op invalid, ++ * handle supplied does not match requested handle, ++ * or invalid data to be written provided by the application. ++ */ ++SVCALL(SD_BLE_GATTS_RW_AUTHORIZE_REPLY, uint32_t, sd_ble_gatts_rw_authorize_reply(uint16_t conn_handle, ble_gatts_rw_authorize_reply_params_t const *p_rw_authorize_reply_params)); ++ ++ ++/**@brief Update persistent system attribute information. ++ * ++ * @details Supply information about persistent system attributes to the stack, ++ * previously obtained using @ref sd_ble_gatts_sys_attr_get. ++ * This call is only allowed for active connections, and is usually ++ * made immediately after a connection is established with an known bonded device, ++ * often as a response to a @ref BLE_GATTS_EVT_SYS_ATTR_MISSING. ++ * ++ * p_sysattrs may point directly to the application's stored copy of the system attributes ++ * obtained using @ref sd_ble_gatts_sys_attr_get. ++ * If the pointer is NULL, the system attribute info is initialized, assuming that ++ * the application does not have any previously saved system attribute data for this device. ++ * ++ * @note The state of persistent system attributes is reset upon connection establishment and then remembered for its duration. ++ * ++ * @note If this call returns with an error code different from @ref NRF_SUCCESS, the storage of persistent system attributes may have been completed only partially. ++ * This means that the state of the attribute table is undefined, and the application should either provide a new set of attributes using this same call or ++ * reset the SoftDevice to return to a known state. ++ * ++ * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS is used with this function, only the system attributes included in system services will be modified. ++ * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS is used with this function, only the system attributes included in user services will be modified. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTS_HVX_SYS_ATTRS_MISSING_MSC} ++ * @mmsc{@ref BLE_GATTS_SYS_ATTRS_UNK_PEER_MSC} ++ * @mmsc{@ref BLE_GATTS_SYS_ATTRS_BONDED_PEER_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle. ++ * @param[in] p_sys_attr_data Pointer to a saved copy of system attributes supplied to the stack, or NULL. ++ * @param[in] len Size of data pointed by p_sys_attr_data, in octets. ++ * @param[in] flags Optional additional flags, see @ref BLE_GATTS_SYS_ATTR_FLAGS ++ * ++ * @retval ::NRF_SUCCESS Successfully set the system attribute information. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid flags supplied. ++ * @retval ::NRF_ERROR_INVALID_DATA Invalid data supplied, the data should be exactly the same as retrieved with @ref sd_ble_gatts_sys_attr_get. ++ * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. ++ */ ++SVCALL(SD_BLE_GATTS_SYS_ATTR_SET, uint32_t, sd_ble_gatts_sys_attr_set(uint16_t conn_handle, uint8_t const *p_sys_attr_data, uint16_t len, uint32_t flags)); ++ ++ ++/**@brief Retrieve persistent system attribute information from the stack. ++ * ++ * @details This call is used to retrieve information about values to be stored persistently by the application ++ * during the lifetime of a connection or after it has been terminated. When a new connection is established with the same bonded device, ++ * the system attribute information retrieved with this function should be restored using using @ref sd_ble_gatts_sys_attr_set. ++ * If retrieved after disconnection, the data should be read before a new connection established. The connection handle for ++ * the previous, now disconnected, connection will remain valid until a new one is created to allow this API call to refer to it. ++ * Connection handles belonging to active connections can be used as well, but care should be taken since the system attributes ++ * may be written to at any time by the peer during a connection's lifetime. ++ * ++ * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS is used with this function, only the system attributes included in system services will be returned. ++ * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS is used with this function, only the system attributes included in user services will be returned. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTS_SYS_ATTRS_BONDED_PEER_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection handle of the recently terminated connection. ++ * @param[out] p_sys_attr_data Pointer to a buffer where updated information about system attributes will be filled in. The format of the data is described ++ * in @ref BLE_GATTS_SYS_ATTRS_FORMAT. NULL can be provided to obtain the length of the data. ++ * @param[in,out] p_len Size of application buffer if p_sys_attr_data is not NULL. Unconditionally updated to actual length of system attribute data. ++ * @param[in] flags Optional additional flags, see @ref BLE_GATTS_SYS_ATTR_FLAGS ++ * ++ * @retval ::NRF_SUCCESS Successfully retrieved the system attribute information. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid flags supplied. ++ * @retval ::NRF_ERROR_DATA_SIZE The system attribute information did not fit into the provided buffer. ++ * @retval ::NRF_ERROR_NOT_FOUND No system attributes found. ++ */ ++SVCALL(SD_BLE_GATTS_SYS_ATTR_GET, uint32_t, sd_ble_gatts_sys_attr_get(uint16_t conn_handle, uint8_t *p_sys_attr_data, uint16_t *p_len, uint32_t flags)); ++ ++ ++/**@brief Retrieve the first valid user attribute handle. ++ * ++ * @param[out] p_handle Pointer to an integer where the handle will be stored. ++ * ++ * @retval ::NRF_SUCCESS Successfully retrieved the handle. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ */ ++SVCALL(SD_BLE_GATTS_INITIAL_USER_HANDLE_GET, uint32_t, sd_ble_gatts_initial_user_handle_get(uint16_t *p_handle)); ++ ++/**@brief Retrieve the attribute UUID and/or metadata. ++ * ++ * @param[in] handle Attribute handle ++ * @param[out] p_uuid UUID of the attribute. Use NULL to omit this field. ++ * @param[out] p_md Metadata of the attribute. Use NULL to omit this field. ++ * ++ * @retval ::NRF_SUCCESS Successfully retrieved the attribute metadata, ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameters supplied. Returned when both @c p_uuid and @c p_md are NULL. ++ * @retval ::NRF_ERROR_NOT_FOUND Attribute was not found. ++ */ ++SVCALL(SD_BLE_GATTS_ATTR_GET, uint32_t, sd_ble_gatts_attr_get(uint16_t handle, ble_uuid_t * p_uuid, ble_gatts_attr_md_t * p_md)); ++ ++/**@brief Reply to an ATT_MTU exchange request by sending an Exchange MTU Response to the client. ++ * ++ * @details This function is only used to reply to a @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST event. ++ * ++ * @details The SoftDevice sets ATT_MTU to the minimum of: ++ * - The Client RX MTU value from @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST, and ++ * - The Server RX MTU value. ++ * ++ * However, the SoftDevice never sets ATT_MTU lower than @ref BLE_GATT_ATT_MTU_DEFAULT. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_GATTS_MTU_EXCHANGE} ++ * @endmscs ++ * ++ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. ++ * @param[in] server_rx_mtu Server RX MTU size. ++ * - The minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. ++ * - The maximum value is @ref ble_gatt_conn_cfg_t::att_mtu in the connection configuration ++ * used for this connection. ++ * - The value must be equal to Client RX MTU size given in @ref sd_ble_gattc_exchange_mtu_request ++ * if an ATT_MTU exchange has already been performed in the other direction. ++ * ++ * @retval ::NRF_SUCCESS Successfully sent response to the client. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no ATT_MTU exchange request pending. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid Server RX MTU size supplied. ++ * @retval ::NRF_ERROR_BUSY GATT Blocked because of a previous GATT procedure timeout. ++ */ ++SVCALL(SD_BLE_GATTS_EXCHANGE_MTU_REPLY, uint32_t, sd_ble_gatts_exchange_mtu_reply(uint16_t conn_handle, uint16_t server_rx_mtu)); ++/** @} */ ++ ++#ifdef __cplusplus ++} ++#endif ++#endif // BLE_GATTS_H__ ++ ++/** ++ @} ++*/ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_hci.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_hci.h +new file mode 100644 +index 0000000..b48d706 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_hci.h +@@ -0,0 +1,135 @@ ++/* ++ * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form, except as embedded into a Nordic ++ * Semiconductor ASA integrated circuit in a product or a software update for ++ * such product, must reproduce the above copyright notice, this list of ++ * conditions and the following disclaimer in the documentation and/or other ++ * materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its ++ * contributors may be used to endorse or promote products derived from this ++ * software without specific prior written permission. ++ * ++ * 4. This software, with or without modification, must only be used with a ++ * Nordic Semiconductor ASA integrated circuit. ++ * ++ * 5. Any software provided in binary form under this license must not be reverse ++ * engineered, decompiled, modified and/or disassembled. ++ * ++ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS ++ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE ++ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ++ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ++ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ */ ++ ++/** ++ @addtogroup BLE_COMMON ++ @{ ++*/ ++ ++ ++#ifndef BLE_HCI_H__ ++#define BLE_HCI_H__ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/** @defgroup BLE_HCI_STATUS_CODES Bluetooth status codes ++ * @{ */ ++ ++#define BLE_HCI_STATUS_CODE_SUCCESS 0x00 /**< Success. */ ++#define BLE_HCI_STATUS_CODE_UNKNOWN_BTLE_COMMAND 0x01 /**< Unknown BLE Command. */ ++#define BLE_HCI_STATUS_CODE_UNKNOWN_CONNECTION_IDENTIFIER 0x02 /**< Unknown Connection Identifier. */ ++/*0x03 Hardware Failure ++0x04 Page Timeout ++*/ ++#define BLE_HCI_AUTHENTICATION_FAILURE 0x05 /**< Authentication Failure. */ ++#define BLE_HCI_STATUS_CODE_PIN_OR_KEY_MISSING 0x06 /**< Pin or Key missing. */ ++#define BLE_HCI_MEMORY_CAPACITY_EXCEEDED 0x07 /**< Memory Capacity Exceeded. */ ++#define BLE_HCI_CONNECTION_TIMEOUT 0x08 /**< Connection Timeout. */ ++/*0x09 Connection Limit Exceeded ++0x0A Synchronous Connection Limit To A Device Exceeded ++0x0B ACL Connection Already Exists*/ ++#define BLE_HCI_STATUS_CODE_COMMAND_DISALLOWED 0x0C /**< Command Disallowed. */ ++/*0x0D Connection Rejected due to Limited Resources ++0x0E Connection Rejected Due To Security Reasons ++0x0F Connection Rejected due to Unacceptable BD_ADDR ++0x10 Connection Accept Timeout Exceeded ++0x11 Unsupported Feature or Parameter Value*/ ++#define BLE_HCI_STATUS_CODE_INVALID_BTLE_COMMAND_PARAMETERS 0x12 /**< Invalid BLE Command Parameters. */ ++#define BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION 0x13 /**< Remote User Terminated Connection. */ ++#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES 0x14 /**< Remote Device Terminated Connection due to low resources.*/ ++#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF 0x15 /**< Remote Device Terminated Connection due to power off. */ ++#define BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTION 0x16 /**< Local Host Terminated Connection. */ ++/* ++0x17 Repeated Attempts ++0x18 Pairing Not Allowed ++0x19 Unknown LMP PDU ++*/ ++#define BLE_HCI_UNSUPPORTED_REMOTE_FEATURE 0x1A /**< Unsupported Remote Feature. */ ++/* ++0x1B SCO Offset Rejected ++0x1C SCO Interval Rejected ++0x1D SCO Air Mode Rejected*/ ++#define BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS 0x1E /**< Invalid LMP Parameters. */ ++#define BLE_HCI_STATUS_CODE_UNSPECIFIED_ERROR 0x1F /**< Unspecified Error. */ ++/*0x20 Unsupported LMP Parameter Value ++0x21 Role Change Not Allowed ++*/ ++#define BLE_HCI_STATUS_CODE_LMP_RESPONSE_TIMEOUT 0x22 /**< LMP Response Timeout. */ ++#define BLE_HCI_STATUS_CODE_LMP_ERROR_TRANSACTION_COLLISION 0x23 /**< LMP Error Transaction Collision/LL Procedure Collision. */ ++#define BLE_HCI_STATUS_CODE_LMP_PDU_NOT_ALLOWED 0x24 /**< LMP PDU Not Allowed. */ ++/*0x25 Encryption Mode Not Acceptable ++0x26 Link Key Can Not be Changed ++0x27 Requested QoS Not Supported ++*/ ++#define BLE_HCI_INSTANT_PASSED 0x28 /**< Instant Passed. */ ++#define BLE_HCI_PAIRING_WITH_UNIT_KEY_UNSUPPORTED 0x29 /**< Pairing with Unit Key Unsupported. */ ++#define BLE_HCI_DIFFERENT_TRANSACTION_COLLISION 0x2A /**< Different Transaction Collision. */ ++/* ++0x2B Reserved ++0x2C QoS Unacceptable Parameter ++0x2D QoS Rejected ++0x2E Channel Classification Not Supported ++0x2F Insufficient Security ++*/ ++#define BLE_HCI_PARAMETER_OUT_OF_MANDATORY_RANGE 0x30 /**< Parameter Out Of Mandatory Range. */ ++/* ++0x31 Reserved ++0x32 Role Switch Pending ++0x33 Reserved ++0x34 Reserved Slot Violation ++0x35 Role Switch Failed ++0x36 Extended Inquiry Response Too Large ++0x37 Secure Simple Pairing Not Supported By Host. ++0x38 Host Busy - Pairing ++0x39 Connection Rejected due to No Suitable Channel Found*/ ++#define BLE_HCI_CONTROLLER_BUSY 0x3A /**< Controller Busy. */ ++#define BLE_HCI_CONN_INTERVAL_UNACCEPTABLE 0x3B /**< Connection Interval Unacceptable. */ ++#define BLE_HCI_DIRECTED_ADVERTISER_TIMEOUT 0x3C /**< Directed Advertisement Timeout. */ ++#define BLE_HCI_CONN_TERMINATED_DUE_TO_MIC_FAILURE 0x3D /**< Connection Terminated due to MIC Failure. */ ++#define BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED 0x3E /**< Connection Failed to be Established. */ ++ ++/** @} */ ++ ++ ++#ifdef __cplusplus ++} ++#endif ++#endif // BLE_HCI_H__ ++ ++/** @} */ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_l2cap.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_l2cap.h +new file mode 100644 +index 0000000..96d833a +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_l2cap.h +@@ -0,0 +1,507 @@ ++/* ++ * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form, except as embedded into a Nordic ++ * Semiconductor ASA integrated circuit in a product or a software update for ++ * such product, must reproduce the above copyright notice, this list of ++ * conditions and the following disclaimer in the documentation and/or other ++ * materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its ++ * contributors may be used to endorse or promote products derived from this ++ * software without specific prior written permission. ++ * ++ * 4. This software, with or without modification, must only be used with a ++ * Nordic Semiconductor ASA integrated circuit. ++ * ++ * 5. Any software provided in binary form under this license must not be reverse ++ * engineered, decompiled, modified and/or disassembled. ++ * ++ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS ++ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE ++ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ++ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ++ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ */ ++ ++/** ++ @addtogroup BLE_L2CAP Logical Link Control and Adaptation Protocol (L2CAP) ++ @{ ++ @brief Definitions and prototypes for the L2CAP interface. ++ */ ++ ++#ifndef BLE_L2CAP_H__ ++#define BLE_L2CAP_H__ ++ ++#include ++#include "nrf_svc.h" ++#include "nrf_error.h" ++#include "ble_hci.h" ++#include "ble_ranges.h" ++#include "ble_types.h" ++#include "ble_err.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/**@addtogroup BLE_L2CAP_TERMINOLOGY Terminology ++ * @{ ++ * @details ++ * ++ * L2CAP SDU ++ * - A data unit that the application can send/receive to/from a peer. ++ * ++ * L2CAP PDU ++ * - A data unit that is exchanged between local and remote L2CAP entities. ++ * It consists of L2CAP protocol control information and payload fields. ++ * The payload field can contain an L2CAP SDU or a part of an L2CAP SDU. ++ * ++ * L2CAP MTU ++ * - The maximum length of an L2CAP SDU. ++ * ++ * L2CAP MPS ++ * - The maximum length of an L2CAP PDU payload field. ++ * ++ * Credits ++ * - A value indicating the number of L2CAP PDUs that the receiver of the credit can send to the peer. ++ * @} */ ++ ++/**@addtogroup BLE_L2CAP_ENUMERATIONS Enumerations ++ * @{ */ ++ ++/**@brief L2CAP API SVC numbers. */ ++enum BLE_L2CAP_SVCS ++{ ++ SD_BLE_L2CAP_CH_SETUP = BLE_L2CAP_SVC_BASE + 0, /**< Set up an L2CAP channel. */ ++ SD_BLE_L2CAP_CH_RELEASE = BLE_L2CAP_SVC_BASE + 1, /**< Release an L2CAP channel. */ ++ SD_BLE_L2CAP_CH_RX = BLE_L2CAP_SVC_BASE + 2, /**< Receive an SDU on an L2CAP channel. */ ++ SD_BLE_L2CAP_CH_TX = BLE_L2CAP_SVC_BASE + 3, /**< Transmit an SDU on an L2CAP channel. */ ++ SD_BLE_L2CAP_CH_FLOW_CONTROL = BLE_L2CAP_SVC_BASE + 4, /**< Advanced SDU reception flow control. */ ++}; ++ ++/**@brief L2CAP Event IDs. */ ++enum BLE_L2CAP_EVTS ++{ ++ BLE_L2CAP_EVT_CH_SETUP_REQUEST = BLE_L2CAP_EVT_BASE + 0, /**< L2CAP Channel Setup Request event. ++ \n See @ref ble_l2cap_evt_ch_setup_request_t. */ ++ BLE_L2CAP_EVT_CH_SETUP_REFUSED = BLE_L2CAP_EVT_BASE + 1, /**< L2CAP Channel Setup Refused event. ++ \n See @ref ble_l2cap_evt_ch_setup_refused_t. */ ++ BLE_L2CAP_EVT_CH_SETUP = BLE_L2CAP_EVT_BASE + 2, /**< L2CAP Channel Setup Completed event. ++ \n See @ref ble_l2cap_evt_ch_setup_t. */ ++ BLE_L2CAP_EVT_CH_RELEASED = BLE_L2CAP_EVT_BASE + 3, /**< L2CAP Channel Released event. ++ \n No additional event structure applies. */ ++ BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED = BLE_L2CAP_EVT_BASE + 4, /**< L2CAP Channel SDU data buffer released event. ++ \n See @ref ble_l2cap_evt_ch_sdu_buf_released_t. */ ++ BLE_L2CAP_EVT_CH_CREDIT = BLE_L2CAP_EVT_BASE + 5, /**< L2CAP Channel Credit received. ++ \n See @ref ble_l2cap_evt_ch_credit_t. */ ++ BLE_L2CAP_EVT_CH_RX = BLE_L2CAP_EVT_BASE + 6, /**< L2CAP Channel SDU received. ++ \n See @ref ble_l2cap_evt_ch_rx_t. */ ++ BLE_L2CAP_EVT_CH_TX = BLE_L2CAP_EVT_BASE + 7, /**< L2CAP Channel SDU transmitted. ++ \n See @ref ble_l2cap_evt_ch_tx_t. */ ++}; ++ ++/** @} */ ++ ++/**@addtogroup BLE_L2CAP_DEFINES Defines ++ * @{ */ ++ ++/**@brief Maximum number of L2CAP channels per connection. */ ++#define BLE_L2CAP_CH_COUNT_MAX (64) ++ ++/**@brief Minimum L2CAP MTU, in bytes. */ ++#define BLE_L2CAP_MTU_MIN (23) ++ ++/**@brief Minimum L2CAP MPS, in bytes. */ ++#define BLE_L2CAP_MPS_MIN (23) ++ ++/**@brief Invalid CID. */ ++#define BLE_L2CAP_CID_INVALID (0x0000) ++ ++/**@brief Default number of credits for @ref sd_ble_l2cap_ch_flow_control. */ ++#define BLE_L2CAP_CREDITS_DEFAULT (1) ++ ++/**@defgroup BLE_L2CAP_CH_SETUP_REFUSED_SRCS L2CAP channel setup refused sources ++ * @{ */ ++#define BLE_L2CAP_CH_SETUP_REFUSED_SRC_LOCAL (0x01) /**< Local. */ ++#define BLE_L2CAP_CH_SETUP_REFUSED_SRC_REMOTE (0x02) /**< Remote. */ ++ /** @} */ ++ ++ /** @defgroup BLE_L2CAP_CH_STATUS_CODES L2CAP channel status codes ++ * @{ */ ++#define BLE_L2CAP_CH_STATUS_CODE_SUCCESS (0x0000) /**< Success. */ ++#define BLE_L2CAP_CH_STATUS_CODE_LE_PSM_NOT_SUPPORTED (0x0002) /**< LE_PSM not supported. */ ++#define BLE_L2CAP_CH_STATUS_CODE_NO_RESOURCES (0x0004) /**< No resources available. */ ++#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_AUTHENTICATION (0x0005) /**< Insufficient authentication. */ ++#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_AUTHORIZATION (0x0006) /**< Insufficient authorization. */ ++#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_ENC_KEY_SIZE (0x0007) /**< Insufficient encryption key size. */ ++#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_ENC (0x0008) /**< Insufficient encryption. */ ++#define BLE_L2CAP_CH_STATUS_CODE_INVALID_SCID (0x0009) /**< Invalid Source CID. */ ++#define BLE_L2CAP_CH_STATUS_CODE_SCID_ALLOCATED (0x000A) /**< Source CID already allocated. */ ++#define BLE_L2CAP_CH_STATUS_CODE_UNACCEPTABLE_PARAMS (0x000B) /**< Unacceptable parameters. */ ++#define BLE_L2CAP_CH_STATUS_CODE_NOT_UNDERSTOOD (0x8000) /**< Command Reject received instead of LE Credit Based Connection Response. */ ++#define BLE_L2CAP_CH_STATUS_CODE_TIMEOUT (0xC000) /**< Operation timed out. */ ++/** @} */ ++ ++/** @} */ ++ ++/**@addtogroup BLE_L2CAP_STRUCTURES Structures ++ * @{ */ ++ ++/** ++ * @brief BLE L2CAP connection configuration parameters, set with @ref sd_ble_cfg_set. ++ * ++ * @note These parameters are set per connection, so all L2CAP channels created on this connection ++ * will have the same parameters. ++ * ++ * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: ++ * - rx_mps is smaller than @ref BLE_L2CAP_MPS_MIN. ++ * - tx_mps is smaller than @ref BLE_L2CAP_MPS_MIN. ++ * - ch_count is greater than @ref BLE_L2CAP_CH_COUNT_MAX. ++ * @retval ::NRF_ERROR_NO_MEM rx_mps or tx_mps is set too high. ++ */ ++typedef struct ++{ ++ uint16_t rx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall ++ be able to receive on L2CAP channels on connections with this ++ configuration. The minimum value is @ref BLE_L2CAP_MPS_MIN. */ ++ uint16_t tx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall ++ be able to transmit on L2CAP channels on connections with this ++ configuration. The minimum value is @ref BLE_L2CAP_MPS_MIN. */ ++ uint8_t rx_queue_size; /**< Number of SDU data buffers that can be queued for reception per ++ L2CAP channel. The minimum value is one. */ ++ uint8_t tx_queue_size; /**< Number of SDU data buffers that can be queued for transmission ++ per L2CAP channel. The minimum value is one. */ ++ uint8_t ch_count; /**< Number of L2CAP channels the application can create per connection ++ with this configuration. The default value is zero, the maximum ++ value is @ref BLE_L2CAP_CH_COUNT_MAX. ++ @note if this parameter is set to zero, all other parameters in ++ @ref ble_l2cap_conn_cfg_t are ignored. */ ++} ble_l2cap_conn_cfg_t; ++ ++/**@brief L2CAP channel RX parameters. */ ++typedef struct ++{ ++ uint16_t rx_mtu; /**< The maximum L2CAP SDU size, in bytes, that L2CAP shall be able to ++ receive on this L2CAP channel. ++ - Must be equal to or greater than @ref BLE_L2CAP_MTU_MIN. */ ++ uint16_t rx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall be ++ able to receive on this L2CAP channel. ++ - Must be equal to or greater than @ref BLE_L2CAP_MPS_MIN. ++ - Must be equal to or less than @ref ble_l2cap_conn_cfg_t::rx_mps. */ ++ ble_data_t sdu_buf; /**< SDU data buffer for reception. ++ - If @ref ble_data_t::p_data is non-NULL, initial credits are ++ issued to the peer. ++ - If @ref ble_data_t::p_data is NULL, no initial credits are ++ issued to the peer. */ ++} ble_l2cap_ch_rx_params_t; ++ ++/**@brief L2CAP channel setup parameters. */ ++typedef struct ++{ ++ ble_l2cap_ch_rx_params_t rx_params; /**< L2CAP channel RX parameters. */ ++ uint16_t le_psm; /**< LE Protocol/Service Multiplexer. Used when requesting ++ setup of an L2CAP channel, ignored otherwise. */ ++ uint16_t status; /**< Status code, see @ref BLE_L2CAP_CH_STATUS_CODES. ++ Used when replying to a setup request of an L2CAP ++ channel, ignored otherwise. */ ++} ble_l2cap_ch_setup_params_t; ++ ++/**@brief L2CAP channel TX parameters. */ ++typedef struct ++{ ++ uint16_t tx_mtu; /**< The maximum L2CAP SDU size, in bytes, that L2CAP is able to ++ transmit on this L2CAP channel. */ ++ uint16_t peer_mps; /**< The maximum L2CAP PDU payload size, in bytes, that the peer is ++ able to receive on this L2CAP channel. */ ++ uint16_t tx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP is able ++ to transmit on this L2CAP channel. This is effective tx_mps, ++ selected by the SoftDevice as ++ MIN( @ref ble_l2cap_ch_tx_params_t::peer_mps, @ref ble_l2cap_conn_cfg_t::tx_mps ) */ ++ uint16_t credits; /**< Initial credits given by the peer. */ ++} ble_l2cap_ch_tx_params_t; ++ ++/**@brief L2CAP Channel Setup Request event. */ ++typedef struct ++{ ++ ble_l2cap_ch_tx_params_t tx_params; /**< L2CAP channel TX parameters. */ ++ uint16_t le_psm; /**< LE Protocol/Service Multiplexer. */ ++} ble_l2cap_evt_ch_setup_request_t; ++ ++/**@brief L2CAP Channel Setup Refused event. */ ++typedef struct ++{ ++ uint8_t source; /**< Source, see @ref BLE_L2CAP_CH_SETUP_REFUSED_SRCS */ ++ uint16_t status; /**< Status code, see @ref BLE_L2CAP_CH_STATUS_CODES */ ++} ble_l2cap_evt_ch_setup_refused_t; ++ ++/**@brief L2CAP Channel Setup Completed event. */ ++typedef struct ++{ ++ ble_l2cap_ch_tx_params_t tx_params; /**< L2CAP channel TX parameters. */ ++} ble_l2cap_evt_ch_setup_t; ++ ++/**@brief L2CAP Channel SDU Data Duffer Released event. */ ++typedef struct ++{ ++ ble_data_t sdu_buf; /**< Returned reception or transmission SDU data buffer. The SoftDevice ++ returns SDU data buffers supplied by the application, which have ++ not yet been returned previously via a @ref BLE_L2CAP_EVT_CH_RX or ++ @ref BLE_L2CAP_EVT_CH_TX event. */ ++} ble_l2cap_evt_ch_sdu_buf_released_t; ++ ++/**@brief L2CAP Channel Credit received event. */ ++typedef struct ++{ ++ uint16_t credits; /**< Additional credits given by the peer. */ ++} ble_l2cap_evt_ch_credit_t; ++ ++/**@brief L2CAP Channel received SDU event. */ ++typedef struct ++{ ++ uint16_t sdu_len; /**< Total SDU length, in bytes. */ ++ ble_data_t sdu_buf; /**< SDU data buffer. ++ @note If there is not enough space in the buffer ++ (sdu_buf.len < sdu_len) then the rest of the SDU will be ++ silently discarded by the SoftDevice. */ ++} ble_l2cap_evt_ch_rx_t; ++ ++/**@brief L2CAP Channel transmitted SDU event. */ ++typedef struct ++{ ++ ble_data_t sdu_buf; /**< SDU data buffer. */ ++} ble_l2cap_evt_ch_tx_t; ++ ++/**@brief L2CAP event structure. */ ++typedef struct ++{ ++ uint16_t conn_handle; /**< Connection Handle on which the event occured. */ ++ uint16_t local_cid; /**< Local Channel ID of the L2CAP channel, or ++ @ref BLE_L2CAP_CID_INVALID if not present. */ ++ union ++ { ++ ble_l2cap_evt_ch_setup_request_t ch_setup_request; /**< L2CAP Channel Setup Request Event Parameters. */ ++ ble_l2cap_evt_ch_setup_refused_t ch_setup_refused; /**< L2CAP Channel Setup Refused Event Parameters. */ ++ ble_l2cap_evt_ch_setup_t ch_setup; /**< L2CAP Channel Setup Completed Event Parameters. */ ++ ble_l2cap_evt_ch_sdu_buf_released_t ch_sdu_buf_released;/**< L2CAP Channel SDU Data Buffer Released Event Parameters. */ ++ ble_l2cap_evt_ch_credit_t credit; /**< L2CAP Channel Credit Received Event Parameters. */ ++ ble_l2cap_evt_ch_rx_t rx; /**< L2CAP Channel SDU Received Event Parameters. */ ++ ble_l2cap_evt_ch_tx_t tx; /**< L2CAP Channel SDU Transmitted Event Parameters. */ ++ } params; /**< Event Parameters. */ ++} ble_l2cap_evt_t; ++ ++/** @} */ ++ ++/**@addtogroup BLE_L2CAP_FUNCTIONS Functions ++ * @{ */ ++ ++/**@brief Set up an L2CAP channel. ++ * ++ * @details This function is used to: ++ * - Request setup of an L2CAP channel: sends an LE Credit Based Connection Request packet to a peer. ++ * - Reply to a setup request of an L2CAP channel (if called in response to a ++ * @ref BLE_L2CAP_EVT_CH_SETUP_REQUEST event): sends an LE Credit Based Connection ++ * Response packet to a peer. ++ * ++ * @note A call to this function will require the application to keep the SDU data buffer alive ++ * until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_RX or ++ * @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. ++ * ++ * @events ++ * @event{@ref BLE_L2CAP_EVT_CH_SETUP, Setup successful.} ++ * @event{@ref BLE_L2CAP_EVT_CH_SETUP_REFUSED, Setup failed.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_L2CAP_CH_SETUP_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection Handle. ++ * @param[in,out] p_local_cid Pointer to a uint16_t containing Local Channel ID of the L2CAP channel: ++ * - As input: @ref BLE_L2CAP_CID_INVALID when requesting setup of an L2CAP ++ * channel or local_cid provided in the @ref BLE_L2CAP_EVT_CH_SETUP_REQUEST ++ * event when replying to a setup request of an L2CAP channel. ++ * - As output: local_cid for this channel. ++ * @param[in] p_params L2CAP channel parameters. ++ * ++ * @retval ::NRF_SUCCESS Successfully queued request or response for transmission. ++ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. ++ * @retval ::NRF_ERROR_INVALID_LENGTH Supplied higher rx_mps than has been configured on this link. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (L2CAP channel already set up). ++ * @retval ::NRF_ERROR_NOT_FOUND CID not found. ++ * @retval ::NRF_ERROR_RESOURCES The limit has been reached for available L2CAP channels, ++ * see @ref ble_l2cap_conn_cfg_t::ch_count. ++ */ ++SVCALL(SD_BLE_L2CAP_CH_SETUP, uint32_t, sd_ble_l2cap_ch_setup(uint16_t conn_handle, uint16_t *p_local_cid, ble_l2cap_ch_setup_params_t const *p_params)); ++ ++/**@brief Release an L2CAP channel. ++ * ++ * @details This sends a Disconnection Request packet to a peer. ++ * ++ * @events ++ * @event{@ref BLE_L2CAP_EVT_CH_RELEASED, Release complete.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_L2CAP_CH_RELEASE_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection Handle. ++ * @param[in] local_cid Local Channel ID of the L2CAP channel. ++ * ++ * @retval ::NRF_SUCCESS Successfully queued request for transmission. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is ++ * in progress for the L2CAP channel). ++ * @retval ::NRF_ERROR_NOT_FOUND CID not found. ++ */ ++SVCALL(SD_BLE_L2CAP_CH_RELEASE, uint32_t, sd_ble_l2cap_ch_release(uint16_t conn_handle, uint16_t local_cid)); ++ ++/**@brief Receive an SDU on an L2CAP channel. ++ * ++ * @details This may issue additional credits to the peer using an LE Flow Control Credit packet. ++ * ++ * @note A call to this function will require the application to keep the memory pointed by ++ * @ref ble_data_t::p_data alive until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_RX ++ * or @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. ++ * ++ * @note The SoftDevice can queue up to @ref ble_l2cap_conn_cfg_t::rx_queue_size SDU data buffers ++ * for reception per L2CAP channel. ++ * ++ * @events ++ * @event{@ref BLE_L2CAP_EVT_CH_RX, The SDU is received.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_L2CAP_CH_RX_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection Handle. ++ * @param[in] local_cid Local Channel ID of the L2CAP channel. ++ * @param[in] p_sdu_buf Pointer to the SDU data buffer. ++ * ++ * @retval ::NRF_SUCCESS Buffer accepted. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is ++ * in progress for an L2CAP channel). ++ * @retval ::NRF_ERROR_NOT_FOUND CID not found. ++ * @retval ::NRF_ERROR_RESOURCES Too many SDU data buffers supplied. Wait for a ++ * @ref BLE_L2CAP_EVT_CH_RX event and retry. ++ */ ++SVCALL(SD_BLE_L2CAP_CH_RX, uint32_t, sd_ble_l2cap_ch_rx(uint16_t conn_handle, uint16_t local_cid, ble_data_t const *p_sdu_buf)); ++ ++/**@brief Transmit an SDU on an L2CAP channel. ++ * ++ * @note A call to this function will require the application to keep the memory pointed by ++ * @ref ble_data_t::p_data alive until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_TX ++ * or @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. ++ * ++ * @note The SoftDevice can queue up to @ref ble_l2cap_conn_cfg_t::tx_queue_size SDUs for ++ * transmission per L2CAP channel. ++ * ++ * @note The application can keep track of the available credits for transmission by following ++ * the procedure below: ++ * - Store initial credits given by the peer in a variable. ++ * (Initial credits are provided in a @ref BLE_L2CAP_EVT_CH_SETUP event.) ++ * - Decrement the variable, which stores the currently available credits, by ++ * ceiling((@ref ble_data_t::len + 2) / tx_mps) when a call to this function returns ++ * @ref NRF_SUCCESS. (tx_mps is provided in a @ref BLE_L2CAP_EVT_CH_SETUP event.) ++ * - Increment the variable, which stores the currently available credits, by additional ++ * credits given by the peer in a @ref BLE_L2CAP_EVT_CH_CREDIT event. ++ * ++ * @events ++ * @event{@ref BLE_L2CAP_EVT_CH_TX, The SDU is transmitted.} ++ * @endevents ++ * ++ * @mscs ++ * @mmsc{@ref BLE_L2CAP_CH_TX_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection Handle. ++ * @param[in] local_cid Local Channel ID of the L2CAP channel. ++ * @param[in] p_sdu_buf Pointer to the SDU data buffer. ++ * ++ * @retval ::NRF_SUCCESS Successfully queued L2CAP SDU for transmission. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is ++ * in progress for the L2CAP channel). ++ * @retval ::NRF_ERROR_NOT_FOUND CID not found. ++ * @retval ::NRF_ERROR_DATA_SIZE Invalid SDU length supplied, must not be more than ++ * @ref ble_l2cap_ch_tx_params_t::tx_mtu provided in ++ * @ref BLE_L2CAP_EVT_CH_SETUP event. ++ * @retval ::NRF_ERROR_RESOURCES Too many SDUs queued for transmission. Wait for a ++ * @ref BLE_L2CAP_EVT_CH_TX event and retry. ++ */ ++SVCALL(SD_BLE_L2CAP_CH_TX, uint32_t, sd_ble_l2cap_ch_tx(uint16_t conn_handle, uint16_t local_cid, ble_data_t const *p_sdu_buf)); ++ ++/**@brief Advanced SDU reception flow control. ++ * ++ * @details Adjust the way the SoftDevice issues credits to the peer. ++ * This may issue additional credits to the peer using an LE Flow Control Credit packet. ++ * ++ * @mscs ++ * @mmsc{@ref BLE_L2CAP_CH_FLOW_CONTROL_MSC} ++ * @endmscs ++ * ++ * @param[in] conn_handle Connection Handle. ++ * @param[in] local_cid Local Channel ID of the L2CAP channel or @ref BLE_L2CAP_CID_INVALID to set ++ * the value that will be used for newly created channels. ++ * @param[in] credits Number of credits that the SoftDevice will make sure the peer has every ++ * time it starts using a new reception buffer. ++ * - @ref BLE_L2CAP_CREDITS_DEFAULT is the default value the SoftDevice will ++ * use if this function is not called. ++ * - If set to zero, the SoftDevice will stop issuing credits for new reception ++ * buffers the application provides or has provided. SDU reception that is ++ * currently ongoing will be allowed to complete. ++ * @param[out] p_credits NULL or pointer to a uint16_t. If a valid pointer is provided, it will be ++ * written by the SoftDevice with the number of credits that is or will be ++ * available to the peer. If the value written by the SoftDevice is 0 when ++ * credits parameter was set to 0, the peer will not be able to send more ++ * data until more credits are provided by calling this function again with ++ * credits > 0. This parameter is ignored when local_cid is set to ++ * @ref BLE_L2CAP_CID_INVALID. ++ * ++ * @note Application should take care when setting number of credits higher than default value. In ++ * this case the application must make sure that the SoftDevice always has reception buffers ++ * available (see @ref sd_ble_l2cap_ch_rx) for that channel. If the SoftDevice does not have ++ * such buffers available, packets may be NACKed on the Link Layer and all Bluetooth traffic ++ * on the connection handle may be stalled until the SoftDevice again has an available ++ * reception buffer. This applies even if the application has used this call to set the ++ * credits back to default, or zero. ++ * ++ * @retval ::NRF_SUCCESS Flow control parameters accepted. ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. ++ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. ++ * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is ++ * in progress for an L2CAP channel). ++ * @retval ::NRF_ERROR_NOT_FOUND CID not found. ++ */ ++SVCALL(SD_BLE_L2CAP_CH_FLOW_CONTROL, uint32_t, sd_ble_l2cap_ch_flow_control(uint16_t conn_handle, uint16_t local_cid, uint16_t credits, uint16_t *p_credits)); ++ ++/** @} */ ++ ++#ifdef __cplusplus ++} ++#endif ++#endif // BLE_L2CAP_H__ ++ ++/** ++ @} ++*/ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_ranges.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_ranges.h +new file mode 100644 +index 0000000..9bff917 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_ranges.h +@@ -0,0 +1,156 @@ ++/* ++ * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form, except as embedded into a Nordic ++ * Semiconductor ASA integrated circuit in a product or a software update for ++ * such product, must reproduce the above copyright notice, this list of ++ * conditions and the following disclaimer in the documentation and/or other ++ * materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its ++ * contributors may be used to endorse or promote products derived from this ++ * software without specific prior written permission. ++ * ++ * 4. This software, with or without modification, must only be used with a ++ * Nordic Semiconductor ASA integrated circuit. ++ * ++ * 5. Any software provided in binary form under this license must not be reverse ++ * engineered, decompiled, modified and/or disassembled. ++ * ++ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS ++ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE ++ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ++ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ++ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ */ ++ ++/** ++ @addtogroup BLE_COMMON ++ @{ ++ @defgroup ble_ranges Module specific SVC, event and option number subranges ++ @{ ++ ++ @brief Definition of SVC, event and option number subranges for each API module. ++ ++ @note ++ SVCs, event and option numbers are split into subranges for each API module. ++ Each module receives its entire allocated range of SVC calls, whether implemented or not, ++ but return BLE_ERROR_NOT_SUPPORTED for unimplemented or undefined calls in its range. ++ ++ Note that the symbols BLE__SVC_LAST is the end of the allocated SVC range, ++ rather than the last SVC function call actually defined and implemented. ++ ++ Specific SVC, event and option values are defined in each module's ble_.h file, ++ which defines names of each individual SVC code based on the range start value. ++*/ ++ ++#ifndef BLE_RANGES_H__ ++#define BLE_RANGES_H__ ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++#define BLE_SVC_BASE 0x60 /**< Common BLE SVC base. */ ++#define BLE_SVC_LAST 0x6B /**< Common BLE SVC last. */ ++ ++#define BLE_GAP_SVC_BASE 0x6C /**< GAP BLE SVC base. */ ++#define BLE_GAP_SVC_LAST 0x93 /**< GAP BLE SVC last. */ ++ ++#define BLE_GATTC_SVC_BASE 0x94 /**< GATTC BLE SVC base. */ ++#define BLE_GATTC_SVC_LAST 0x9F /**< GATTC BLE SVC last. */ ++ ++#define BLE_GATTS_SVC_BASE 0xA0 /**< GATTS BLE SVC base. */ ++#define BLE_GATTS_SVC_LAST 0xAF /**< GATTS BLE SVC last. */ ++ ++#define BLE_L2CAP_SVC_BASE 0xB0 /**< L2CAP BLE SVC base. */ ++#define BLE_L2CAP_SVC_LAST 0xBF /**< L2CAP BLE SVC last. */ ++ ++ ++#define BLE_EVT_INVALID 0x00 /**< Invalid BLE Event. */ ++ ++#define BLE_EVT_BASE 0x01 /**< Common BLE Event base. */ ++#define BLE_EVT_LAST 0x0F /**< Common BLE Event last. */ ++ ++#define BLE_GAP_EVT_BASE 0x10 /**< GAP BLE Event base. */ ++#define BLE_GAP_EVT_LAST 0x2F /**< GAP BLE Event last. */ ++ ++#define BLE_GATTC_EVT_BASE 0x30 /**< GATTC BLE Event base. */ ++#define BLE_GATTC_EVT_LAST 0x4F /**< GATTC BLE Event last. */ ++ ++#define BLE_GATTS_EVT_BASE 0x50 /**< GATTS BLE Event base. */ ++#define BLE_GATTS_EVT_LAST 0x6F /**< GATTS BLE Event last. */ ++ ++#define BLE_L2CAP_EVT_BASE 0x70 /**< L2CAP BLE Event base. */ ++#define BLE_L2CAP_EVT_LAST 0x8F /**< L2CAP BLE Event last. */ ++ ++ ++#define BLE_OPT_INVALID 0x00 /**< Invalid BLE Option. */ ++ ++#define BLE_OPT_BASE 0x01 /**< Common BLE Option base. */ ++#define BLE_OPT_LAST 0x1F /**< Common BLE Option last. */ ++ ++#define BLE_GAP_OPT_BASE 0x20 /**< GAP BLE Option base. */ ++#define BLE_GAP_OPT_LAST 0x3F /**< GAP BLE Option last. */ ++ ++#define BLE_GATT_OPT_BASE 0x40 /**< GATT BLE Option base. */ ++#define BLE_GATT_OPT_LAST 0x5F /**< GATT BLE Option last. */ ++ ++#define BLE_GATTC_OPT_BASE 0x60 /**< GATTC BLE Option base. */ ++#define BLE_GATTC_OPT_LAST 0x7F /**< GATTC BLE Option last. */ ++ ++#define BLE_GATTS_OPT_BASE 0x80 /**< GATTS BLE Option base. */ ++#define BLE_GATTS_OPT_LAST 0x9F /**< GATTS BLE Option last. */ ++ ++#define BLE_L2CAP_OPT_BASE 0xA0 /**< L2CAP BLE Option base. */ ++#define BLE_L2CAP_OPT_LAST 0xBF /**< L2CAP BLE Option last. */ ++ ++ ++#define BLE_CFG_INVALID 0x00 /**< Invalid BLE configuration. */ ++ ++#define BLE_CFG_BASE 0x01 /**< Common BLE configuration base. */ ++#define BLE_CFG_LAST 0x1F /**< Common BLE configuration last. */ ++ ++#define BLE_CONN_CFG_BASE 0x20 /**< BLE connection configuration base. */ ++#define BLE_CONN_CFG_LAST 0x3F /**< BLE connection configuration last. */ ++ ++#define BLE_GAP_CFG_BASE 0x40 /**< GAP BLE configuration base. */ ++#define BLE_GAP_CFG_LAST 0x5F /**< GAP BLE configuration last. */ ++ ++#define BLE_GATT_CFG_BASE 0x60 /**< GATT BLE configuration base. */ ++#define BLE_GATT_CFG_LAST 0x7F /**< GATT BLE configuration last. */ ++ ++#define BLE_GATTC_CFG_BASE 0x80 /**< GATTC BLE configuration base. */ ++#define BLE_GATTC_CFG_LAST 0x9F /**< GATTC BLE configuration last. */ ++ ++#define BLE_GATTS_CFG_BASE 0xA0 /**< GATTS BLE configuration base. */ ++#define BLE_GATTS_CFG_LAST 0xBF /**< GATTS BLE configuration last. */ ++ ++#define BLE_L2CAP_CFG_BASE 0xC0 /**< L2CAP BLE configuration base. */ ++#define BLE_L2CAP_CFG_LAST 0xDF /**< L2CAP BLE configuration last. */ ++ ++ ++ ++ ++ ++#ifdef __cplusplus ++} ++#endif ++#endif /* BLE_RANGES_H__ */ ++ ++/** ++ @} ++ @} ++*/ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_types.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_types.h +new file mode 100644 +index 0000000..cd5fbaf +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/ble_types.h +@@ -0,0 +1,215 @@ ++/* ++ * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form, except as embedded into a Nordic ++ * Semiconductor ASA integrated circuit in a product or a software update for ++ * such product, must reproduce the above copyright notice, this list of ++ * conditions and the following disclaimer in the documentation and/or other ++ * materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its ++ * contributors may be used to endorse or promote products derived from this ++ * software without specific prior written permission. ++ * ++ * 4. This software, with or without modification, must only be used with a ++ * Nordic Semiconductor ASA integrated circuit. ++ * ++ * 5. Any software provided in binary form under this license must not be reverse ++ * engineered, decompiled, modified and/or disassembled. ++ * ++ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS ++ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE ++ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ++ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ++ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ */ ++ ++/** ++ @addtogroup BLE_COMMON ++ @{ ++ @defgroup ble_types Common types and macro definitions ++ @{ ++ ++ @brief Common types and macro definitions for the BLE SoftDevice. ++ */ ++ ++#ifndef BLE_TYPES_H__ ++#define BLE_TYPES_H__ ++ ++#include ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/** @addtogroup BLE_TYPES_DEFINES Defines ++ * @{ */ ++ ++/** @defgroup BLE_CONN_HANDLES BLE Connection Handles ++ * @{ */ ++#define BLE_CONN_HANDLE_INVALID 0xFFFF /**< Invalid Connection Handle. */ ++#define BLE_CONN_HANDLE_ALL 0xFFFE /**< Applies to all Connection Handles. */ ++/** @} */ ++ ++ ++/** @defgroup BLE_UUID_VALUES Assigned Values for BLE UUIDs ++ * @{ */ ++/* Generic UUIDs, applicable to all services */ ++#define BLE_UUID_UNKNOWN 0x0000 /**< Reserved UUID. */ ++#define BLE_UUID_SERVICE_PRIMARY 0x2800 /**< Primary Service. */ ++#define BLE_UUID_SERVICE_SECONDARY 0x2801 /**< Secondary Service. */ ++#define BLE_UUID_SERVICE_INCLUDE 0x2802 /**< Include. */ ++#define BLE_UUID_CHARACTERISTIC 0x2803 /**< Characteristic. */ ++#define BLE_UUID_DESCRIPTOR_CHAR_EXT_PROP 0x2900 /**< Characteristic Extended Properties Descriptor. */ ++#define BLE_UUID_DESCRIPTOR_CHAR_USER_DESC 0x2901 /**< Characteristic User Description Descriptor. */ ++#define BLE_UUID_DESCRIPTOR_CLIENT_CHAR_CONFIG 0x2902 /**< Client Characteristic Configuration Descriptor. */ ++#define BLE_UUID_DESCRIPTOR_SERVER_CHAR_CONFIG 0x2903 /**< Server Characteristic Configuration Descriptor. */ ++#define BLE_UUID_DESCRIPTOR_CHAR_PRESENTATION_FORMAT 0x2904 /**< Characteristic Presentation Format Descriptor. */ ++#define BLE_UUID_DESCRIPTOR_CHAR_AGGREGATE_FORMAT 0x2905 /**< Characteristic Aggregate Format Descriptor. */ ++/* GATT specific UUIDs */ ++#define BLE_UUID_GATT 0x1801 /**< Generic Attribute Profile. */ ++#define BLE_UUID_GATT_CHARACTERISTIC_SERVICE_CHANGED 0x2A05 /**< Service Changed Characteristic. */ ++/* GAP specific UUIDs */ ++#define BLE_UUID_GAP 0x1800 /**< Generic Access Profile. */ ++#define BLE_UUID_GAP_CHARACTERISTIC_DEVICE_NAME 0x2A00 /**< Device Name Characteristic. */ ++#define BLE_UUID_GAP_CHARACTERISTIC_APPEARANCE 0x2A01 /**< Appearance Characteristic. */ ++#define BLE_UUID_GAP_CHARACTERISTIC_RECONN_ADDR 0x2A03 /**< Reconnection Address Characteristic. */ ++#define BLE_UUID_GAP_CHARACTERISTIC_PPCP 0x2A04 /**< Peripheral Preferred Connection Parameters Characteristic. */ ++#define BLE_UUID_GAP_CHARACTERISTIC_CAR 0x2AA6 /**< Central Address Resolution Characteristic. */ ++#define BLE_UUID_GAP_CHARACTERISTIC_RPA_ONLY 0x2AC9 /**< Resolvable Private Address Only Characteristic. */ ++/** @} */ ++ ++ ++/** @defgroup BLE_UUID_TYPES Types of UUID ++ * @{ */ ++#define BLE_UUID_TYPE_UNKNOWN 0x00 /**< Invalid UUID type. */ ++#define BLE_UUID_TYPE_BLE 0x01 /**< Bluetooth SIG UUID (16-bit). */ ++#define BLE_UUID_TYPE_VENDOR_BEGIN 0x02 /**< Vendor UUID types start at this index (128-bit). */ ++/** @} */ ++ ++ ++/** @defgroup BLE_APPEARANCES Bluetooth Appearance values ++ * @note Retrieved from http://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml ++ * @{ */ ++#define BLE_APPEARANCE_UNKNOWN 0 /**< Unknown. */ ++#define BLE_APPEARANCE_GENERIC_PHONE 64 /**< Generic Phone. */ ++#define BLE_APPEARANCE_GENERIC_COMPUTER 128 /**< Generic Computer. */ ++#define BLE_APPEARANCE_GENERIC_WATCH 192 /**< Generic Watch. */ ++#define BLE_APPEARANCE_WATCH_SPORTS_WATCH 193 /**< Watch: Sports Watch. */ ++#define BLE_APPEARANCE_GENERIC_CLOCK 256 /**< Generic Clock. */ ++#define BLE_APPEARANCE_GENERIC_DISPLAY 320 /**< Generic Display. */ ++#define BLE_APPEARANCE_GENERIC_REMOTE_CONTROL 384 /**< Generic Remote Control. */ ++#define BLE_APPEARANCE_GENERIC_EYE_GLASSES 448 /**< Generic Eye-glasses. */ ++#define BLE_APPEARANCE_GENERIC_TAG 512 /**< Generic Tag. */ ++#define BLE_APPEARANCE_GENERIC_KEYRING 576 /**< Generic Keyring. */ ++#define BLE_APPEARANCE_GENERIC_MEDIA_PLAYER 640 /**< Generic Media Player. */ ++#define BLE_APPEARANCE_GENERIC_BARCODE_SCANNER 704 /**< Generic Barcode Scanner. */ ++#define BLE_APPEARANCE_GENERIC_THERMOMETER 768 /**< Generic Thermometer. */ ++#define BLE_APPEARANCE_THERMOMETER_EAR 769 /**< Thermometer: Ear. */ ++#define BLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR 832 /**< Generic Heart rate Sensor. */ ++#define BLE_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT 833 /**< Heart Rate Sensor: Heart Rate Belt. */ ++#define BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE 896 /**< Generic Blood Pressure. */ ++#define BLE_APPEARANCE_BLOOD_PRESSURE_ARM 897 /**< Blood Pressure: Arm. */ ++#define BLE_APPEARANCE_BLOOD_PRESSURE_WRIST 898 /**< Blood Pressure: Wrist. */ ++#define BLE_APPEARANCE_GENERIC_HID 960 /**< Human Interface Device (HID). */ ++#define BLE_APPEARANCE_HID_KEYBOARD 961 /**< Keyboard (HID Subtype). */ ++#define BLE_APPEARANCE_HID_MOUSE 962 /**< Mouse (HID Subtype). */ ++#define BLE_APPEARANCE_HID_JOYSTICK 963 /**< Joystick (HID Subtype). */ ++#define BLE_APPEARANCE_HID_GAMEPAD 964 /**< Gamepad (HID Subtype). */ ++#define BLE_APPEARANCE_HID_DIGITIZERSUBTYPE 965 /**< Digitizer Tablet (HID Subtype). */ ++#define BLE_APPEARANCE_HID_CARD_READER 966 /**< Card Reader (HID Subtype). */ ++#define BLE_APPEARANCE_HID_DIGITAL_PEN 967 /**< Digital Pen (HID Subtype). */ ++#define BLE_APPEARANCE_HID_BARCODE 968 /**< Barcode Scanner (HID Subtype). */ ++#define BLE_APPEARANCE_GENERIC_GLUCOSE_METER 1024 /**< Generic Glucose Meter. */ ++#define BLE_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR 1088 /**< Generic Running Walking Sensor. */ ++#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE 1089 /**< Running Walking Sensor: In-Shoe. */ ++#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE 1090 /**< Running Walking Sensor: On-Shoe. */ ++#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP 1091 /**< Running Walking Sensor: On-Hip. */ ++#define BLE_APPEARANCE_GENERIC_CYCLING 1152 /**< Generic Cycling. */ ++#define BLE_APPEARANCE_CYCLING_CYCLING_COMPUTER 1153 /**< Cycling: Cycling Computer. */ ++#define BLE_APPEARANCE_CYCLING_SPEED_SENSOR 1154 /**< Cycling: Speed Sensor. */ ++#define BLE_APPEARANCE_CYCLING_CADENCE_SENSOR 1155 /**< Cycling: Cadence Sensor. */ ++#define BLE_APPEARANCE_CYCLING_POWER_SENSOR 1156 /**< Cycling: Power Sensor. */ ++#define BLE_APPEARANCE_CYCLING_SPEED_CADENCE_SENSOR 1157 /**< Cycling: Speed and Cadence Sensor. */ ++#define BLE_APPEARANCE_GENERIC_PULSE_OXIMETER 3136 /**< Generic Pulse Oximeter. */ ++#define BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP 3137 /**< Fingertip (Pulse Oximeter subtype). */ ++#define BLE_APPEARANCE_PULSE_OXIMETER_WRIST_WORN 3138 /**< Wrist Worn(Pulse Oximeter subtype). */ ++#define BLE_APPEARANCE_GENERIC_WEIGHT_SCALE 3200 /**< Generic Weight Scale. */ ++#define BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS_ACT 5184 /**< Generic Outdoor Sports Activity. */ ++#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_DISP 5185 /**< Location Display Device (Outdoor Sports Activity subtype). */ ++#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_DISP 5186 /**< Location and Navigation Display Device (Outdoor Sports Activity subtype). */ ++#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_POD 5187 /**< Location Pod (Outdoor Sports Activity subtype). */ ++#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_POD 5188 /**< Location and Navigation Pod (Outdoor Sports Activity subtype). */ ++/** @} */ ++ ++/** @brief Set .type and .uuid fields of ble_uuid_struct to specified UUID value. */ ++#define BLE_UUID_BLE_ASSIGN(instance, value) do {\ ++ instance.type = BLE_UUID_TYPE_BLE; \ ++ instance.uuid = value;} while(0) ++ ++/** @brief Copy type and uuid members from src to dst ble_uuid_t pointer. Both pointers must be valid/non-null. */ ++#define BLE_UUID_COPY_PTR(dst, src) do {\ ++ (dst)->type = (src)->type; \ ++ (dst)->uuid = (src)->uuid;} while(0) ++ ++/** @brief Copy type and uuid members from src to dst ble_uuid_t struct. */ ++#define BLE_UUID_COPY_INST(dst, src) do {\ ++ (dst).type = (src).type; \ ++ (dst).uuid = (src).uuid;} while(0) ++ ++/** @brief Compare for equality both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ ++#define BLE_UUID_EQ(p_uuid1, p_uuid2) \ ++ (((p_uuid1)->type == (p_uuid2)->type) && ((p_uuid1)->uuid == (p_uuid2)->uuid)) ++ ++/** @brief Compare for difference both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ ++#define BLE_UUID_NEQ(p_uuid1, p_uuid2) \ ++ (((p_uuid1)->type != (p_uuid2)->type) || ((p_uuid1)->uuid != (p_uuid2)->uuid)) ++ ++/** @} */ ++ ++/** @addtogroup BLE_TYPES_STRUCTURES Structures ++ * @{ */ ++ ++/** @brief 128 bit UUID values. */ ++typedef struct ++{ ++ uint8_t uuid128[16]; /**< Little-Endian UUID bytes. */ ++} ble_uuid128_t; ++ ++/** @brief Bluetooth Low Energy UUID type, encapsulates both 16-bit and 128-bit UUIDs. */ ++typedef struct ++{ ++ uint16_t uuid; /**< 16-bit UUID value or octets 12-13 of 128-bit UUID. */ ++ uint8_t type; /**< UUID type, see @ref BLE_UUID_TYPES. If type is @ref BLE_UUID_TYPE_UNKNOWN, the value of uuid is undefined. */ ++} ble_uuid_t; ++ ++/**@brief Data structure. */ ++typedef struct ++{ ++ uint8_t *p_data; /**< Pointer to the data buffer provided to/from the application. */ ++ uint16_t len; /**< Length of the data buffer, in bytes. */ ++} ble_data_t; ++ ++/** @} */ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif /* BLE_TYPES_H__ */ ++ ++/** ++ @} ++ @} ++*/ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf52/nrf_mbr.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf52/nrf_mbr.h +new file mode 100644 +index 0000000..ea231b3 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf52/nrf_mbr.h +@@ -0,0 +1,241 @@ ++/* ++ * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form, except as embedded into a Nordic ++ * Semiconductor ASA integrated circuit in a product or a software update for ++ * such product, must reproduce the above copyright notice, this list of ++ * conditions and the following disclaimer in the documentation and/or other ++ * materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its ++ * contributors may be used to endorse or promote products derived from this ++ * software without specific prior written permission. ++ * ++ * 4. This software, with or without modification, must only be used with a ++ * Nordic Semiconductor ASA integrated circuit. ++ * ++ * 5. Any software provided in binary form under this license must not be reverse ++ * engineered, decompiled, modified and/or disassembled. ++ * ++ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS ++ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE ++ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ++ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ++ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ */ ++ ++/** ++ @defgroup nrf_mbr_api Master Boot Record API ++ @{ ++ ++ @brief APIs for updating SoftDevice and BootLoader ++ ++*/ ++ ++#ifndef NRF_MBR_H__ ++#define NRF_MBR_H__ ++ ++#include "nrf_svc.h" ++#include ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/** @addtogroup NRF_MBR_DEFINES Defines ++ * @{ */ ++ ++/**@brief MBR SVC Base number. */ ++#define MBR_SVC_BASE (0x18) ++ ++/**@brief Page size in words. */ ++#define MBR_PAGE_SIZE_IN_WORDS (1024) ++ ++/** @brief The size that must be reserved for the MBR when a SoftDevice is written to flash. ++This is the offset where the first byte of the SoftDevice hex file is written.*/ ++#define MBR_SIZE (0x1000) ++ ++/** @} */ ++ ++/** @addtogroup NRF_MBR_ENUMS Enumerations ++ * @{ */ ++ ++/**@brief nRF Master Boot Record API SVC numbers. */ ++enum NRF_MBR_SVCS ++{ ++ SD_MBR_COMMAND = MBR_SVC_BASE, /**< ::sd_mbr_command */ ++}; ++ ++/**@brief Possible values for ::sd_mbr_command_t.command */ ++enum NRF_MBR_COMMANDS ++{ ++ SD_MBR_COMMAND_COPY_BL, /**< Copy a new BootLoader. @see ::sd_mbr_command_copy_bl_t*/ ++ SD_MBR_COMMAND_COPY_SD, /**< Copy a new SoftDevice. @see ::sd_mbr_command_copy_sd_t*/ ++ SD_MBR_COMMAND_INIT_SD, /**< Initialize forwarding interrupts to SD, and run reset function in SD. Does not require any parameters in ::sd_mbr_command_t params.*/ ++ SD_MBR_COMMAND_COMPARE, /**< This command works like memcmp. @see ::sd_mbr_command_compare_t*/ ++ SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET, /**< Change the address the MBR starts after a reset. @see ::sd_mbr_command_vector_table_base_set_t*/ ++ SD_MBR_COMMAND_RESERVED, ++ SD_MBR_COMMAND_IRQ_FORWARD_ADDRESS_SET, /**< Start forwarding all interrupts to this address. @see ::sd_mbr_command_irq_forward_address_set_t*/ ++}; ++ ++/** @} */ ++ ++/** @addtogroup NRF_MBR_TYPES Types ++ * @{ */ ++ ++/**@brief This command copies part of a new SoftDevice ++ * ++ * The destination area is erased before copying. ++ * If dst is in the middle of a flash page, that whole flash page will be erased. ++ * If (dst+len) is in the middle of a flash page, that whole flash page will be erased. ++ * ++ * The user of this function is responsible for setting the BPROT registers. ++ * ++ * @retval ::NRF_SUCCESS indicates that the contents of the memory blocks where copied correctly. ++ * @retval ::NRF_ERROR_INTERNAL indicates that the contents of the memory blocks where not verified correctly after copying. ++ */ ++typedef struct ++{ ++ uint32_t *src; /**< Pointer to the source of data to be copied.*/ ++ uint32_t *dst; /**< Pointer to the destination where the content is to be copied.*/ ++ uint32_t len; /**< Number of 32 bit words to copy. Must be a multiple of @ref MBR_PAGE_SIZE_IN_WORDS words.*/ ++} sd_mbr_command_copy_sd_t; ++ ++ ++/**@brief This command works like memcmp, but takes the length in words. ++ * ++ * @retval ::NRF_SUCCESS indicates that the contents of both memory blocks are equal. ++ * @retval ::NRF_ERROR_NULL indicates that the contents of the memory blocks are not equal. ++ */ ++typedef struct ++{ ++ uint32_t *ptr1; /**< Pointer to block of memory. */ ++ uint32_t *ptr2; /**< Pointer to block of memory. */ ++ uint32_t len; /**< Number of 32 bit words to compare.*/ ++} sd_mbr_command_compare_t; ++ ++ ++/**@brief This command copies a new BootLoader. ++ * ++ * With this command, destination of BootLoader is always the address written in ++ * NRF_UICR->BOOTADDR. ++ * ++ * Destination is erased by this function. ++ * If (destination+bl_len) is in the middle of a flash page, that whole flash page will be erased. ++ * ++ * This function will use PROTENSET to protect the flash that is not intended to be written. ++ * ++ * On success, this function will not return. It will start the new BootLoader from reset-vector as normal. ++ * ++ * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. ++ * @retval ::NRF_ERROR_FORBIDDEN if NRF_UICR->BOOTADDR is not set. ++ * @retval ::NRF_ERROR_INVALID_LENGTH if parameters attempts to read or write outside flash area. ++ * @retval ::NRF_ERROR_NO_MEM if no parameter page is provided (see SoftDevice Specification for more info) ++ */ ++typedef struct ++{ ++ uint32_t *bl_src; /**< Pointer to the source of the Bootloader to be be copied.*/ ++ uint32_t bl_len; /**< Number of 32 bit words to copy for BootLoader. */ ++} sd_mbr_command_copy_bl_t; ++ ++/**@brief Change the address the MBR starts after a reset ++ * ++ * Once this function has been called, this address is where the MBR will start to forward ++ * interrupts to after a reset. ++ * ++ * To restore default forwarding this function should be called with @ref address set to 0. The ++ * MBR will then start forwarding interrupts to the address in NFR_UICR->BOOTADDR or to the ++ * SoftDevice if the BOOTADDR is not set. ++ * ++ * On success, this function will not return. It will reset the device. ++ * ++ * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. ++ * @retval ::NRF_ERROR_INVALID_ADDR if parameter address is outside of the flash size. ++ * @retval ::NRF_ERROR_NO_MEM if no parameter page is provided (see SoftDevice Specification for more info) ++ */ ++typedef struct ++{ ++ uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ ++} sd_mbr_command_vector_table_base_set_t; ++ ++/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the MBR ++ * ++ * Unlike sd_mbr_command_vector_table_base_set_t, this function does not reset, and it does not ++ * change where the MBR starts after reset. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++typedef struct ++{ ++ uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ ++} sd_mbr_command_irq_forward_address_set_t; ++ ++/**@brief Input structure containing data used when calling ::sd_mbr_command ++ * ++ * Depending on what command value that is set, the corresponding params value type must also be ++ * set. See @ref NRF_MBR_COMMANDS for command types and corresponding params value type. If command ++ * @ref SD_MBR_COMMAND_INIT_SD is set, it is not necessary to set any values under params. ++ */ ++typedef struct ++{ ++ uint32_t command; /**< Type of command to be issued. See @ref NRF_MBR_COMMANDS. */ ++ union ++ { ++ sd_mbr_command_copy_sd_t copy_sd; /**< Parameters for copy SoftDevice.*/ ++ sd_mbr_command_compare_t compare; /**< Parameters for verify.*/ ++ sd_mbr_command_copy_bl_t copy_bl; /**< Parameters for copy BootLoader. Requires parameter page. */ ++ sd_mbr_command_vector_table_base_set_t base_set; /**< Parameters for vector table base set. Requires parameter page.*/ ++ sd_mbr_command_irq_forward_address_set_t irq_forward_address_set; /**< Parameters for irq forward address set*/ ++ } params; /**< Command parameters. */ ++} sd_mbr_command_t; ++ ++/** @} */ ++ ++/** @addtogroup NRF_MBR_FUNCTIONS Functions ++ * @{ */ ++ ++/**@brief Issue Master Boot Record commands ++ * ++ * Commands used when updating a SoftDevice and bootloader. ++ * ++ * The @ref SD_MBR_COMMAND_COPY_BL and @ref SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET requires ++ * parameters to be retained by the MBR when resetting the IC. This is done in a separate flash ++ * page provided by the application. The UICR register UICR.NRFFW[1] must be set to an address ++ * corresponding to a page in the application flash space. This page will be cleared by the MBR and ++ * used to store the command before reset. When the UICR.NRFFW[1] field is set the page it refers ++ * to must not be used by the application. If the UICR.NRFFW[1] is set to 0xFFFFFFFF (the default) ++ * MBR commands which use flash will be unavailable and return @ref NRF_ERROR_NO_MEM. ++ * ++ * @param[in] param Pointer to a struct describing the command. ++ * ++ * @note For return values, see ::sd_mbr_command_copy_sd_t, ::sd_mbr_command_copy_bl_t, ++ * ::sd_mbr_command_compare_t, ::sd_mbr_command_vector_table_base_set_t, ++ * ::sd_mbr_command_irq_forward_address_set_t ++ * ++ * @retval ::NRF_ERROR_NO_MEM if UICR.NRFFW[1] is not set (i.e. is 0xFFFFFFFF). ++ * @retval ::NRF_ERROR_INVALID_PARAM if an invalid command is given. ++*/ ++SVCALL(SD_MBR_COMMAND, uint32_t, sd_mbr_command(sd_mbr_command_t* param)); ++ ++/** @} */ ++ ++#ifdef __cplusplus ++} ++#endif ++#endif // NRF_MBR_H__ ++ ++/** ++ @} ++*/ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_error.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_error.h +new file mode 100644 +index 0000000..09d3044 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_error.h +@@ -0,0 +1,90 @@ ++/* ++ * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form, except as embedded into a Nordic ++ * Semiconductor ASA integrated circuit in a product or a software update for ++ * such product, must reproduce the above copyright notice, this list of ++ * conditions and the following disclaimer in the documentation and/or other ++ * materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its ++ * contributors may be used to endorse or promote products derived from this ++ * software without specific prior written permission. ++ * ++ * 4. This software, with or without modification, must only be used with a ++ * Nordic Semiconductor ASA integrated circuit. ++ * ++ * 5. Any software provided in binary form under this license must not be reverse ++ * engineered, decompiled, modified and/or disassembled. ++ * ++ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS ++ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE ++ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ++ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ++ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ */ ++ ++ /** ++ @defgroup nrf_error SoftDevice Global Error Codes ++ @{ ++ ++ @brief Global Error definitions ++*/ ++ ++/* Header guard */ ++#ifndef NRF_ERROR_H__ ++#define NRF_ERROR_H__ ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/** @defgroup NRF_ERRORS_BASE Error Codes Base number definitions ++ * @{ */ ++#define NRF_ERROR_BASE_NUM (0x0) ///< Global error base ++#define NRF_ERROR_SDM_BASE_NUM (0x1000) ///< SDM error base ++#define NRF_ERROR_SOC_BASE_NUM (0x2000) ///< SoC error base ++#define NRF_ERROR_STK_BASE_NUM (0x3000) ///< STK error base ++/** @} */ ++ ++#define NRF_SUCCESS (NRF_ERROR_BASE_NUM + 0) ///< Successful command ++#define NRF_ERROR_SVC_HANDLER_MISSING (NRF_ERROR_BASE_NUM + 1) ///< SVC handler is missing ++#define NRF_ERROR_SOFTDEVICE_NOT_ENABLED (NRF_ERROR_BASE_NUM + 2) ///< SoftDevice has not been enabled ++#define NRF_ERROR_INTERNAL (NRF_ERROR_BASE_NUM + 3) ///< Internal Error ++#define NRF_ERROR_NO_MEM (NRF_ERROR_BASE_NUM + 4) ///< No Memory for operation ++#define NRF_ERROR_NOT_FOUND (NRF_ERROR_BASE_NUM + 5) ///< Not found ++#define NRF_ERROR_NOT_SUPPORTED (NRF_ERROR_BASE_NUM + 6) ///< Not supported ++#define NRF_ERROR_INVALID_PARAM (NRF_ERROR_BASE_NUM + 7) ///< Invalid Parameter ++#define NRF_ERROR_INVALID_STATE (NRF_ERROR_BASE_NUM + 8) ///< Invalid state, operation disallowed in this state ++#define NRF_ERROR_INVALID_LENGTH (NRF_ERROR_BASE_NUM + 9) ///< Invalid Length ++#define NRF_ERROR_INVALID_FLAGS (NRF_ERROR_BASE_NUM + 10) ///< Invalid Flags ++#define NRF_ERROR_INVALID_DATA (NRF_ERROR_BASE_NUM + 11) ///< Invalid Data ++#define NRF_ERROR_DATA_SIZE (NRF_ERROR_BASE_NUM + 12) ///< Invalid Data size ++#define NRF_ERROR_TIMEOUT (NRF_ERROR_BASE_NUM + 13) ///< Operation timed out ++#define NRF_ERROR_NULL (NRF_ERROR_BASE_NUM + 14) ///< Null Pointer ++#define NRF_ERROR_FORBIDDEN (NRF_ERROR_BASE_NUM + 15) ///< Forbidden Operation ++#define NRF_ERROR_INVALID_ADDR (NRF_ERROR_BASE_NUM + 16) ///< Bad Memory Address ++#define NRF_ERROR_BUSY (NRF_ERROR_BASE_NUM + 17) ///< Busy ++#define NRF_ERROR_CONN_COUNT (NRF_ERROR_BASE_NUM + 18) ///< Maximum connection count exceeded. ++#define NRF_ERROR_RESOURCES (NRF_ERROR_BASE_NUM + 19) ///< Not enough resources for operation ++ ++#ifdef __cplusplus ++} ++#endif ++#endif // NRF_ERROR_H__ ++ ++/** ++ @} ++*/ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_error_sdm.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_error_sdm.h +new file mode 100644 +index 0000000..85e08f3 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_error_sdm.h +@@ -0,0 +1,70 @@ ++/* ++ * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form, except as embedded into a Nordic ++ * Semiconductor ASA integrated circuit in a product or a software update for ++ * such product, must reproduce the above copyright notice, this list of ++ * conditions and the following disclaimer in the documentation and/or other ++ * materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its ++ * contributors may be used to endorse or promote products derived from this ++ * software without specific prior written permission. ++ * ++ * 4. This software, with or without modification, must only be used with a ++ * Nordic Semiconductor ASA integrated circuit. ++ * ++ * 5. Any software provided in binary form under this license must not be reverse ++ * engineered, decompiled, modified and/or disassembled. ++ * ++ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS ++ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE ++ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ++ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ++ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ */ ++ ++ /** ++ @addtogroup nrf_sdm_api ++ @{ ++ @defgroup nrf_sdm_error SoftDevice Manager Error Codes ++ @{ ++ ++ @brief Error definitions for the SDM API ++*/ ++ ++/* Header guard */ ++#ifndef NRF_ERROR_SDM_H__ ++#define NRF_ERROR_SDM_H__ ++ ++#include "nrf_error.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++#define NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN (NRF_ERROR_SDM_BASE_NUM + 0) ///< Unknown LFCLK source. ++#define NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION (NRF_ERROR_SDM_BASE_NUM + 1) ///< Incorrect interrupt configuration (can be caused by using illegal priority levels, or having enabled SoftDevice interrupts). ++#define NRF_ERROR_SDM_INCORRECT_CLENR0 (NRF_ERROR_SDM_BASE_NUM + 2) ///< Incorrect CLENR0 (can be caused by erroneous SoftDevice flashing). ++ ++#ifdef __cplusplus ++} ++#endif ++#endif // NRF_ERROR_SDM_H__ ++ ++/** ++ @} ++ @} ++*/ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_error_soc.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_error_soc.h +new file mode 100644 +index 0000000..ea9825e +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_error_soc.h +@@ -0,0 +1,85 @@ ++/* ++ * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form, except as embedded into a Nordic ++ * Semiconductor ASA integrated circuit in a product or a software update for ++ * such product, must reproduce the above copyright notice, this list of ++ * conditions and the following disclaimer in the documentation and/or other ++ * materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its ++ * contributors may be used to endorse or promote products derived from this ++ * software without specific prior written permission. ++ * ++ * 4. This software, with or without modification, must only be used with a ++ * Nordic Semiconductor ASA integrated circuit. ++ * ++ * 5. Any software provided in binary form under this license must not be reverse ++ * engineered, decompiled, modified and/or disassembled. ++ * ++ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS ++ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE ++ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ++ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ++ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ */ ++ ++/** ++ @addtogroup nrf_soc_api ++ @{ ++ @defgroup nrf_soc_error SoC Library Error Codes ++ @{ ++ ++ @brief Error definitions for the SoC library ++ ++*/ ++ ++/* Header guard */ ++#ifndef NRF_ERROR_SOC_H__ ++#define NRF_ERROR_SOC_H__ ++ ++#include "nrf_error.h" ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/* Mutex Errors */ ++#define NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN (NRF_ERROR_SOC_BASE_NUM + 0) ///< Mutex already taken ++ ++/* NVIC errors */ ++#define NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE (NRF_ERROR_SOC_BASE_NUM + 1) ///< NVIC interrupt not available ++#define NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED (NRF_ERROR_SOC_BASE_NUM + 2) ///< NVIC interrupt priority not allowed ++#define NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 3) ///< NVIC should not return ++ ++/* Power errors */ ++#define NRF_ERROR_SOC_POWER_MODE_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 4) ///< Power mode unknown ++#define NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 5) ///< Power POF threshold unknown ++#define NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 6) ///< Power off should not return ++ ++/* Rand errors */ ++#define NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES (NRF_ERROR_SOC_BASE_NUM + 7) ///< RAND not enough values ++ ++/* PPI errors */ ++#define NRF_ERROR_SOC_PPI_INVALID_CHANNEL (NRF_ERROR_SOC_BASE_NUM + 8) ///< Invalid PPI Channel ++#define NRF_ERROR_SOC_PPI_INVALID_GROUP (NRF_ERROR_SOC_BASE_NUM + 9) ///< Invalid PPI Group ++ ++#ifdef __cplusplus ++} ++#endif ++#endif // NRF_ERROR_SOC_H__ ++/** ++ @} ++ @} ++*/ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_nvic.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_nvic.h +new file mode 100644 +index 0000000..1705cb6 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_nvic.h +@@ -0,0 +1,486 @@ ++/* ++ * Copyright (c) 2016 - 2017, Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form, except as embedded into a Nordic ++ * Semiconductor ASA integrated circuit in a product or a software update for ++ * such product, must reproduce the above copyright notice, this list of ++ * conditions and the following disclaimer in the documentation and/or other ++ * materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its ++ * contributors may be used to endorse or promote products derived from this ++ * software without specific prior written permission. ++ * ++ * 4. This software, with or without modification, must only be used with a ++ * Nordic Semiconductor ASA integrated circuit. ++ * ++ * 5. Any software provided in binary form under this license must not be reverse ++ * engineered, decompiled, modified and/or disassembled. ++ * ++ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS ++ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE ++ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ++ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ++ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ */ ++ ++/** ++ * @defgroup nrf_nvic_api SoftDevice NVIC API ++ * @{ ++ * ++ * @note In order to use this module, the following code has to be added to a .c file: ++ * \code ++ * nrf_nvic_state_t nrf_nvic_state = {0}; ++ * \endcode ++ * ++ * @note Definitions and declarations starting with __ (double underscore) in this header file are ++ * not intended for direct use by the application. ++ * ++ * @brief APIs for the accessing NVIC when using a SoftDevice. ++ * ++ */ ++ ++#ifndef NRF_NVIC_H__ ++#define NRF_NVIC_H__ ++ ++#include ++#include "nrf.h" ++#include "nrf_svc.h" ++#include "nrf_error.h" ++#include "nrf_error_soc.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/**@addtogroup NRF_NVIC_DEFINES Defines ++ * @{ */ ++ ++/**@defgroup NRF_NVIC_ISER_DEFINES SoftDevice NVIC internal definitions ++ * @{ */ ++ ++#define __NRF_NVIC_NVMC_IRQn (30) /**< The peripheral ID of the NVMC. IRQ numbers are used to identify peripherals, but the NVMC doesn't have an IRQ number in the MDK. */ ++ ++#define __NRF_NVIC_ISER_COUNT (2) /**< The number of ISER/ICER registers in the NVIC that are used. */ ++ ++/**@brief Interrupts used by the SoftDevice, with IRQn in the range 0-31. */ ++#define __NRF_NVIC_SD_IRQS_0 ((uint32_t)( \ ++ (1U << POWER_CLOCK_IRQn) \ ++ | (1U << RADIO_IRQn) \ ++ | (1U << RTC0_IRQn) \ ++ | (1U << TIMER0_IRQn) \ ++ | (1U << RNG_IRQn) \ ++ | (1U << ECB_IRQn) \ ++ | (1U << CCM_AAR_IRQn) \ ++ | (1U << TEMP_IRQn) \ ++ | (1U << __NRF_NVIC_NVMC_IRQn) \ ++ | (1U << (uint32_t)SWI5_IRQn) \ ++ )) ++ ++/**@brief Interrupts used by the SoftDevice, with IRQn in the range 32-63. */ ++#define __NRF_NVIC_SD_IRQS_1 ((uint32_t)0) ++ ++/**@brief Interrupts available for to application, with IRQn in the range 0-31. */ ++#define __NRF_NVIC_APP_IRQS_0 (~__NRF_NVIC_SD_IRQS_0) ++ ++/**@brief Interrupts available for to application, with IRQn in the range 32-63. */ ++#define __NRF_NVIC_APP_IRQS_1 (~__NRF_NVIC_SD_IRQS_1) ++ ++/**@} */ ++ ++/**@} */ ++ ++/**@addtogroup NRF_NVIC_VARIABLES Variables ++ * @{ */ ++ ++/**@brief Type representing the state struct for the SoftDevice NVIC module. */ ++typedef struct ++{ ++ uint32_t volatile __irq_masks[__NRF_NVIC_ISER_COUNT]; /**< IRQs enabled by the application in the NVIC. */ ++ uint32_t volatile __cr_flag; /**< Non-zero if already in a critical region */ ++} nrf_nvic_state_t; ++ ++/**@brief Variable keeping the state for the SoftDevice NVIC module. This must be declared in an ++ * application source file. */ ++extern nrf_nvic_state_t nrf_nvic_state; ++ ++/**@} */ ++ ++/**@addtogroup NRF_NVIC_INTERNAL_FUNCTIONS SoftDevice NVIC internal functions ++ * @{ */ ++ ++/**@brief Disables IRQ interrupts globally, including the SoftDevice's interrupts. ++ * ++ * @retval The value of PRIMASK prior to disabling the interrupts. ++ */ ++__STATIC_INLINE int __sd_nvic_irq_disable(void); ++ ++/**@brief Enables IRQ interrupts globally, including the SoftDevice's interrupts. ++ */ ++__STATIC_INLINE void __sd_nvic_irq_enable(void); ++ ++/**@brief Checks if IRQn is available to application ++ * @param[in] IRQn IRQ to check ++ * ++ * @retval 1 (true) if the IRQ to check is available to the application ++ */ ++__STATIC_INLINE uint32_t __sd_nvic_app_accessible_irq(IRQn_Type IRQn); ++ ++/**@brief Checks if priority is available to application ++ * @param[in] priority priority to check ++ * ++ * @retval 1 (true) if the priority to check is available to the application ++ */ ++__STATIC_INLINE uint32_t __sd_nvic_is_app_accessible_priority(uint32_t priority); ++ ++/**@} */ ++ ++/**@addtogroup NRF_NVIC_FUNCTIONS SoftDevice NVIC public functions ++ * @{ */ ++ ++/**@brief Enable External Interrupt. ++ * @note Corresponds to NVIC_EnableIRQ in CMSIS. ++ * ++ * @pre IRQn is valid and not reserved by the stack. ++ * ++ * @param[in] IRQn See the NVIC_EnableIRQ documentation in CMSIS. ++ * ++ * @retval ::NRF_SUCCESS The interrupt was enabled. ++ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. ++ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt has a priority not available for the application. ++ */ ++__STATIC_INLINE uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn); ++ ++/**@brief Disable External Interrupt. ++ * @note Corresponds to NVIC_DisableIRQ in CMSIS. ++ * ++ * @pre IRQn is valid and not reserved by the stack. ++ * ++ * @param[in] IRQn See the NVIC_DisableIRQ documentation in CMSIS. ++ * ++ * @retval ::NRF_SUCCESS The interrupt was disabled. ++ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. ++ */ ++__STATIC_INLINE uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn); ++ ++/**@brief Get Pending Interrupt. ++ * @note Corresponds to NVIC_GetPendingIRQ in CMSIS. ++ * ++ * @pre IRQn is valid and not reserved by the stack. ++ * ++ * @param[in] IRQn See the NVIC_GetPendingIRQ documentation in CMSIS. ++ * @param[out] p_pending_irq Return value from NVIC_GetPendingIRQ. ++ * ++ * @retval ::NRF_SUCCESS The interrupt is available for the application. ++ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. ++ */ ++__STATIC_INLINE uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq); ++ ++/**@brief Set Pending Interrupt. ++ * @note Corresponds to NVIC_SetPendingIRQ in CMSIS. ++ * ++ * @pre IRQn is valid and not reserved by the stack. ++ * ++ * @param[in] IRQn See the NVIC_SetPendingIRQ documentation in CMSIS. ++ * ++ * @retval ::NRF_SUCCESS The interrupt is set pending. ++ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. ++ */ ++__STATIC_INLINE uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn); ++ ++/**@brief Clear Pending Interrupt. ++ * @note Corresponds to NVIC_ClearPendingIRQ in CMSIS. ++ * ++ * @pre IRQn is valid and not reserved by the stack. ++ * ++ * @param[in] IRQn See the NVIC_ClearPendingIRQ documentation in CMSIS. ++ * ++ * @retval ::NRF_SUCCESS The interrupt pending flag is cleared. ++ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. ++ */ ++__STATIC_INLINE uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn); ++ ++/**@brief Set Interrupt Priority. ++ * @note Corresponds to NVIC_SetPriority in CMSIS. ++ * ++ * @pre IRQn is valid and not reserved by the stack. ++ * @pre Priority is valid and not reserved by the stack. ++ * ++ * @param[in] IRQn See the NVIC_SetPriority documentation in CMSIS. ++ * @param[in] priority A valid IRQ priority for use by the application. ++ * ++ * @retval ::NRF_SUCCESS The interrupt and priority level is available for the application. ++ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. ++ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt priority is not available for the application. ++ */ ++__STATIC_INLINE uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority); ++ ++/**@brief Get Interrupt Priority. ++ * @note Corresponds to NVIC_GetPriority in CMSIS. ++ * ++ * @pre IRQn is valid and not reserved by the stack. ++ * ++ * @param[in] IRQn See the NVIC_GetPriority documentation in CMSIS. ++ * @param[out] p_priority Return value from NVIC_GetPriority. ++ * ++ * @retval ::NRF_SUCCESS The interrupt priority is returned in p_priority. ++ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE - IRQn is not available for the application. ++ */ ++__STATIC_INLINE uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority); ++ ++/**@brief System Reset. ++ * @note Corresponds to NVIC_SystemReset in CMSIS. ++ * ++ * @retval ::NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN ++ */ ++__STATIC_INLINE uint32_t sd_nvic_SystemReset(void); ++ ++/**@brief Enter critical region. ++ * ++ * @post Application interrupts will be disabled. ++ * @note sd_nvic_critical_region_enter() and ::sd_nvic_critical_region_exit() must be called in matching pairs inside each ++ * execution context ++ * @sa sd_nvic_critical_region_exit ++ * ++ * @param[out] p_is_nested_critical_region If 1, the application is now in a nested critical region. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++__STATIC_INLINE uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region); ++ ++/**@brief Exit critical region. ++ * ++ * @pre Application has entered a critical region using ::sd_nvic_critical_region_enter. ++ * @post If not in a nested critical region, the application interrupts will restored to the state before ::sd_nvic_critical_region_enter was called. ++ * ++ * @param[in] is_nested_critical_region If this is set to 1, the critical region won't be exited. @sa sd_nvic_critical_region_enter. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++__STATIC_INLINE uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region); ++ ++/**@} */ ++ ++#ifndef SUPPRESS_INLINE_IMPLEMENTATION ++ ++__STATIC_INLINE int __sd_nvic_irq_disable(void) ++{ ++ int pm = __get_PRIMASK(); ++ __disable_irq(); ++ return pm; ++} ++ ++__STATIC_INLINE void __sd_nvic_irq_enable(void) ++{ ++ __enable_irq(); ++} ++ ++__STATIC_INLINE uint32_t __sd_nvic_app_accessible_irq(IRQn_Type IRQn) ++{ ++ if (IRQn < 32) ++ { ++ return ((1UL<= (1 << __NVIC_PRIO_BITS)) ++ { ++ return 0; ++ } ++ if( priority == 0 ++ || priority == 1 ++ || priority == 4 ++ ) ++ { ++ return 0; ++ } ++ return 1; ++} ++ ++ ++__STATIC_INLINE uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn) ++{ ++ if (!__sd_nvic_app_accessible_irq(IRQn)) ++ { ++ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; ++ } ++ if (!__sd_nvic_is_app_accessible_priority(NVIC_GetPriority(IRQn))) ++ { ++ return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED; ++ } ++ ++ if (nrf_nvic_state.__cr_flag) ++ { ++ nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] |= (uint32_t)(1 << ((uint32_t)((int32_t)IRQn) & (uint32_t)0x1F)); ++ } ++ else ++ { ++ NVIC_EnableIRQ(IRQn); ++ } ++ return NRF_SUCCESS; ++} ++ ++__STATIC_INLINE uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn) ++{ ++ if (!__sd_nvic_app_accessible_irq(IRQn)) ++ { ++ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; ++ } ++ ++ if (nrf_nvic_state.__cr_flag) ++ { ++ nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] &= ~(1UL << ((uint32_t)(IRQn) & 0x1F)); ++ } ++ else ++ { ++ NVIC_DisableIRQ(IRQn); ++ } ++ ++ return NRF_SUCCESS; ++} ++ ++__STATIC_INLINE uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq) ++{ ++ if (__sd_nvic_app_accessible_irq(IRQn)) ++ { ++ *p_pending_irq = NVIC_GetPendingIRQ(IRQn); ++ return NRF_SUCCESS; ++ } ++ else ++ { ++ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; ++ } ++} ++ ++__STATIC_INLINE uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn) ++{ ++ if (__sd_nvic_app_accessible_irq(IRQn)) ++ { ++ NVIC_SetPendingIRQ(IRQn); ++ return NRF_SUCCESS; ++ } ++ else ++ { ++ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; ++ } ++} ++ ++__STATIC_INLINE uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn) ++{ ++ if (__sd_nvic_app_accessible_irq(IRQn)) ++ { ++ NVIC_ClearPendingIRQ(IRQn); ++ return NRF_SUCCESS; ++ } ++ else ++ { ++ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; ++ } ++} ++ ++__STATIC_INLINE uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority) ++{ ++ if (!__sd_nvic_app_accessible_irq(IRQn)) ++ { ++ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; ++ } ++ ++ if (!__sd_nvic_is_app_accessible_priority(priority)) ++ { ++ return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED; ++ } ++ ++ NVIC_SetPriority(IRQn, (uint32_t)priority); ++ return NRF_SUCCESS; ++} ++ ++__STATIC_INLINE uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority) ++{ ++ if (__sd_nvic_app_accessible_irq(IRQn)) ++ { ++ *p_priority = (NVIC_GetPriority(IRQn) & 0xFF); ++ return NRF_SUCCESS; ++ } ++ else ++ { ++ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; ++ } ++} ++ ++__STATIC_INLINE uint32_t sd_nvic_SystemReset(void) ++{ ++ NVIC_SystemReset(); ++ return NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN; ++} ++ ++__STATIC_INLINE uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region) ++{ ++ int was_masked = __sd_nvic_irq_disable(); ++ if (!nrf_nvic_state.__cr_flag) ++ { ++ nrf_nvic_state.__cr_flag = 1; ++ nrf_nvic_state.__irq_masks[0] = ( NVIC->ICER[0] & __NRF_NVIC_APP_IRQS_0 ); ++ NVIC->ICER[0] = __NRF_NVIC_APP_IRQS_0; ++ nrf_nvic_state.__irq_masks[1] = ( NVIC->ICER[1] & __NRF_NVIC_APP_IRQS_1 ); ++ NVIC->ICER[1] = __NRF_NVIC_APP_IRQS_1; ++ *p_is_nested_critical_region = 0; ++ } ++ else ++ { ++ *p_is_nested_critical_region = 1; ++ } ++ if (!was_masked) ++ { ++ __sd_nvic_irq_enable(); ++ } ++ return NRF_SUCCESS; ++} ++ ++__STATIC_INLINE uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region) ++{ ++ if (nrf_nvic_state.__cr_flag && (is_nested_critical_region == 0)) ++ { ++ int was_masked = __sd_nvic_irq_disable(); ++ NVIC->ISER[0] = nrf_nvic_state.__irq_masks[0]; ++ NVIC->ISER[1] = nrf_nvic_state.__irq_masks[1]; ++ nrf_nvic_state.__cr_flag = 0; ++ if (!was_masked) ++ { ++ __sd_nvic_irq_enable(); ++ } ++ } ++ ++ return NRF_SUCCESS; ++} ++ ++#endif /* SUPPRESS_INLINE_IMPLEMENTATION */ ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif // NRF_NVIC_H__ ++ ++/**@} */ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_sd_def.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_sd_def.h +new file mode 100644 +index 0000000..7bf0ff0 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_sd_def.h +@@ -0,0 +1,28 @@ ++/* Copyright (c) 2015 - 2018 Nordic Semiconductor ASA. All Rights Reserved. ++ * ++ * The information contained herein is confidential property of Nordic Semiconductor ASA. ++ * The use, copying, transfer or disclosure of such information is prohibited except by ++ * express written agreement with Nordic Semiconductor ASA. ++ * ++ */ ++ ++#ifndef NRF_SD_DEF_H__ ++#define NRF_SD_DEF_H__ ++ ++#include ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++#define SD_PPI_CHANNELS_USED 0xFFFE0000uL /**< PPI channels utilized by SotfDevice (not available to the application). */ ++#define SD_PPI_GROUPS_USED 0x0000000CuL /**< PPI groups utilized by SoftDevice (not available to the application). */ ++#define SD_TIMERS_USED 0x00000001uL /**< Timers used by SoftDevice. */ ++#define SD_SWI_USED 0x0000003CuL /**< Software interrupts used by SoftDevice */ ++ ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif /* NRF_SD_DEF_H__ */ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_sdm.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_sdm.h +new file mode 100644 +index 0000000..09eaecb +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_sdm.h +@@ -0,0 +1,357 @@ ++/* ++ * Copyright (c) 2015 - 2017, Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form, except as embedded into a Nordic ++ * Semiconductor ASA integrated circuit in a product or a software update for ++ * such product, must reproduce the above copyright notice, this list of ++ * conditions and the following disclaimer in the documentation and/or other ++ * materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its ++ * contributors may be used to endorse or promote products derived from this ++ * software without specific prior written permission. ++ * ++ * 4. This software, with or without modification, must only be used with a ++ * Nordic Semiconductor ASA integrated circuit. ++ * ++ * 5. Any software provided in binary form under this license must not be reverse ++ * engineered, decompiled, modified and/or disassembled. ++ * ++ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS ++ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE ++ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ++ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ++ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ */ ++ ++/** ++ @defgroup nrf_sdm_api SoftDevice Manager API ++ @{ ++ ++ @brief APIs for SoftDevice management. ++ ++*/ ++ ++#ifndef NRF_SDM_H__ ++#define NRF_SDM_H__ ++ ++#include ++#include "nrf.h" ++#include "nrf_svc.h" ++#include "nrf_error.h" ++#include "nrf_error_sdm.h" ++#include "nrf_soc.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/** @addtogroup NRF_SDM_DEFINES Defines ++ * @{ */ ++#ifdef NRFSOC_DOXYGEN ++/// Declared in nrf_mbr.h ++#define MBR_SIZE 0 ++#warning test ++#endif ++ ++/** @brief The major version for the SoftDevice binary distributed with this header file. */ ++#define SD_MAJOR_VERSION (5) ++ ++/** @brief The minor version for the SoftDevice binary distributed with this header file. */ ++#define SD_MINOR_VERSION (1) ++ ++/** @brief The bugfix version for the SoftDevice binary distributed with this header file. */ ++#define SD_BUGFIX_VERSION (0) ++ ++/** @brief The full version number for the SoftDevice binary this header file was distributed ++ * with, as a decimal number in the form Mmmmbbb, where: ++ * - M is major version (one or more digits) ++ * - mmm is minor version (three digits) ++ * - bbb is bugfix version (three digits). */ ++#define SD_VERSION (SD_MAJOR_VERSION * 1000000 + SD_MINOR_VERSION * 1000 + SD_BUGFIX_VERSION) ++ ++/** @brief SoftDevice Manager SVC Base number. */ ++#define SDM_SVC_BASE 0x10 ++ ++/** @brief SoftDevice unique string size in bytes. */ ++#define SD_UNIQUE_STR_SIZE 20 ++ ++/** @brief Invalid info field. Returned when an info field does not exist. */ ++#define SDM_INFO_FIELD_INVALID (0) ++ ++/** @brief Defines the SoftDevice Information Structure location (address) as an offset from ++the start of the SoftDevice (without MBR)*/ ++#define SOFTDEVICE_INFO_STRUCT_OFFSET (0x2000) ++ ++/** @brief Defines the absolute SoftDevice Information Structure location (address) when the ++ * SoftDevice is installed just above the MBR (the usual case). */ ++#define SOFTDEVICE_INFO_STRUCT_ADDRESS (SOFTDEVICE_INFO_STRUCT_OFFSET + MBR_SIZE) ++ ++/** @brief Defines the offset for the SoftDevice Information Structure size value relative to the ++ * SoftDevice base address. The size value is of type uint8_t. */ ++#define SD_INFO_STRUCT_SIZE_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET) ++ ++/** @brief Defines the offset for the SoftDevice size value relative to the SoftDevice base address. ++ * The size value is of type uint32_t. */ ++#define SD_SIZE_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x08) ++ ++/** @brief Defines the offset for FWID value relative to the SoftDevice base address. The FWID value ++ * is of type uint16_t. */ ++#define SD_FWID_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x0C) ++ ++/** @brief Defines the offset for the SoftDevice ID relative to the SoftDevice base address. The ID ++ * is of type uint32_t. */ ++#define SD_ID_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x10) ++ ++/** @brief Defines the offset for the SoftDevice version relative to the SoftDevice base address in ++ * the same format as @ref SD_VERSION, stored as an uint32_t. */ ++#define SD_VERSION_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x14) ++ ++/** @brief Defines the offset for the SoftDevice unique string relative to the SoftDevice base address. ++ * The SD_UNIQUE_STR is stored as an array of uint8_t. The size of array is @ref SD_UNIQUE_STR_SIZE. ++ */ ++#define SD_UNIQUE_STR_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x18) ++ ++/** @brief Defines a macro for retrieving the actual SoftDevice Information Structure size value ++ * from a given base address. Use @ref MBR_SIZE as the argument when the SoftDevice is ++ * installed just above the MBR (the usual case). */ ++#define SD_INFO_STRUCT_SIZE_GET(baseaddr) (*((uint8_t *) ((baseaddr) + SD_INFO_STRUCT_SIZE_OFFSET))) ++ ++/** @brief Defines a macro for retrieving the actual SoftDevice size value from a given base ++ * address. Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above ++ * the MBR (the usual case). */ ++#define SD_SIZE_GET(baseaddr) (*((uint32_t *) ((baseaddr) + SD_SIZE_OFFSET))) ++ ++/** @brief Defines a macro for retrieving the actual FWID value from a given base address. Use ++ * @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR (the usual ++ * case). */ ++#define SD_FWID_GET(baseaddr) (*((uint16_t *) ((baseaddr) + SD_FWID_OFFSET))) ++ ++/** @brief Defines a macro for retrieving the actual SoftDevice ID from a given base address. Use ++ * @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR (the ++ * usual case). */ ++#define SD_ID_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_ID_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ ++ ? (*((uint32_t *) ((baseaddr) + SD_ID_OFFSET))) : SDM_INFO_FIELD_INVALID) ++ ++/** @brief Defines a macro for retrieving the actual SoftDevice version from a given base address. ++ * Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR ++ * (the usual case). */ ++#define SD_VERSION_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_VERSION_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ ++ ? (*((uint32_t *) ((baseaddr) + SD_VERSION_OFFSET))) : SDM_INFO_FIELD_INVALID) ++ ++/** @brief Defines a macro for retrieving the address of SoftDevice unique str based on a given base address. ++ * Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR ++ * (the usual case). */ ++#define SD_UNIQUE_STR_ADDR_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_UNIQUE_STR_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ ++ ? (((uint8_t *) ((baseaddr) + SD_UNIQUE_STR_OFFSET))) : SDM_INFO_FIELD_INVALID) ++ ++/**@defgroup NRF_FAULT_ID_RANGES Fault ID ranges ++ * @{ */ ++#define NRF_FAULT_ID_SD_RANGE_START 0x00000000 /**< SoftDevice ID range start. */ ++#define NRF_FAULT_ID_APP_RANGE_START 0x00001000 /**< Application ID range start. */ ++/**@} */ ++ ++/**@defgroup NRF_FAULT_IDS Fault ID types ++ * @{ */ ++#define NRF_FAULT_ID_SD_ASSERT (NRF_FAULT_ID_SD_RANGE_START + 1) /**< SoftDevice assertion. The info parameter is reserved for future used. */ ++#define NRF_FAULT_ID_APP_MEMACC (NRF_FAULT_ID_APP_RANGE_START + 1) /**< Application invalid memory access. The info parameter will contain 0x00000000, ++ in case of SoftDevice RAM access violation. In case of SoftDevice peripheral ++ register violation the info parameter will contain the sub-region number of ++ PREGION[0], on whose address range the disallowed write access caused the ++ memory access fault. */ ++/**@} */ ++ ++/** @} */ ++ ++/** @addtogroup NRF_SDM_ENUMS Enumerations ++ * @{ */ ++ ++/**@brief nRF SoftDevice Manager API SVC numbers. */ ++enum NRF_SD_SVCS ++{ ++ SD_SOFTDEVICE_ENABLE = SDM_SVC_BASE, /**< ::sd_softdevice_enable */ ++ SD_SOFTDEVICE_DISABLE, /**< ::sd_softdevice_disable */ ++ SD_SOFTDEVICE_IS_ENABLED, /**< ::sd_softdevice_is_enabled */ ++ SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, /**< ::sd_softdevice_vector_table_base_set */ ++ SVC_SDM_LAST /**< Placeholder for last SDM SVC */ ++}; ++ ++/** @} */ ++ ++/** @addtogroup NRF_SDM_DEFINES Defines ++ * @{ */ ++ ++/**@defgroup NRF_CLOCK_LF_ACCURACY Clock accuracy ++ * @{ */ ++ ++#define NRF_CLOCK_LF_ACCURACY_250_PPM (0) /**< Default: 250 ppm */ ++#define NRF_CLOCK_LF_ACCURACY_500_PPM (1) /**< 500 ppm */ ++#define NRF_CLOCK_LF_ACCURACY_150_PPM (2) /**< 150 ppm */ ++#define NRF_CLOCK_LF_ACCURACY_100_PPM (3) /**< 100 ppm */ ++#define NRF_CLOCK_LF_ACCURACY_75_PPM (4) /**< 75 ppm */ ++#define NRF_CLOCK_LF_ACCURACY_50_PPM (5) /**< 50 ppm */ ++#define NRF_CLOCK_LF_ACCURACY_30_PPM (6) /**< 30 ppm */ ++#define NRF_CLOCK_LF_ACCURACY_20_PPM (7) /**< 20 ppm */ ++#define NRF_CLOCK_LF_ACCURACY_10_PPM (8) /**< 10 ppm */ ++#define NRF_CLOCK_LF_ACCURACY_5_PPM (9) /**< 5 ppm */ ++#define NRF_CLOCK_LF_ACCURACY_2_PPM (10) /**< 2 ppm */ ++#define NRF_CLOCK_LF_ACCURACY_1_PPM (11) /**< 1 ppm */ ++ ++/** @} */ ++ ++/**@defgroup NRF_CLOCK_LF_SRC Possible LFCLK oscillator sources ++ * @{ */ ++ ++#define NRF_CLOCK_LF_SRC_RC (0) /**< LFCLK RC oscillator. */ ++#define NRF_CLOCK_LF_SRC_XTAL (1) /**< LFCLK crystal oscillator. */ ++#define NRF_CLOCK_LF_SRC_SYNTH (2) /**< LFCLK Synthesized from HFCLK. */ ++ ++/** @} */ ++ ++/** @} */ ++ ++/** @addtogroup NRF_SDM_TYPES Types ++ * @{ */ ++ ++/**@brief Type representing LFCLK oscillator source. */ ++typedef struct ++{ ++ uint8_t source; /**< LF oscillator clock source, see @ref NRF_CLOCK_LF_SRC. */ ++ uint8_t rc_ctiv; /**< Only for ::NRF_CLOCK_LF_SRC_RC: Calibration timer interval in 1/4 second ++ units (nRF52: 1-32). ++ @note To avoid excessive clock drift, 0.5 degrees Celsius is the ++ maximum temperature change allowed in one calibration timer ++ interval. The interval should be selected to ensure this. ++ ++ @note Must be 0 if source is not ::NRF_CLOCK_LF_SRC_RC. */ ++ uint8_t rc_temp_ctiv; /**< Only for ::NRF_CLOCK_LF_SRC_RC: How often (in number of calibration ++ intervals) the RC oscillator shall be calibrated if the temperature ++ hasn't changed. ++ 0: Always calibrate even if the temperature hasn't changed. ++ 1: Only calibrate if the temperature has changed (legacy - nRF51 only). ++ 2-33: Check the temperature and only calibrate if it has changed, ++ however calibration will take place every rc_temp_ctiv ++ intervals in any case. ++ ++ @note Must be 0 if source is not ::NRF_CLOCK_LF_SRC_RC. ++ ++ @note For nRF52, the application must ensure calibration at least once ++ every 8 seconds to ensure +/-500 ppm clock stability. The ++ recommended configuration for ::NRF_CLOCK_LF_SRC_RC on nRF52 is ++ rc_ctiv=16 and rc_temp_ctiv=2. This will ensure calibration at ++ least once every 8 seconds and for temperature changes of 0.5 ++ degrees Celsius every 4 seconds. See the Product Specification ++ for the nRF52 device being used for more information.*/ ++ uint8_t accuracy; /**< External clock accuracy used in the LL to compute timing ++ windows, see @ref NRF_CLOCK_LF_ACCURACY.*/ ++} nrf_clock_lf_cfg_t; ++ ++/**@brief Fault Handler type. ++ * ++ * When certain unrecoverable errors occur within the application or SoftDevice the fault handler will be called back. ++ * The protocol stack will be in an undefined state when this happens and the only way to recover will be to ++ * perform a reset, using e.g. CMSIS NVIC_SystemReset(). ++ * If the application returns from the fault handler the SoftDevice will call NVIC_SystemReset(). ++ * ++ * @note This callback is executed in HardFault context, thus SVC functions cannot be called from the fault callback. ++ * ++ * @param[in] id Fault identifier. See @ref NRF_FAULT_IDS. ++ * @param[in] pc The program counter of the instruction that triggered the fault. ++ * @param[in] info Optional additional information regarding the fault. Refer to each Fault identifier for details. ++ * ++ * @note When id is set to @ref NRF_FAULT_ID_APP_MEMACC, pc will contain the address of the instruction being executed at the time when ++ * the fault is detected by the CPU. The CPU program counter may have advanced up to 2 instructions (no branching) after the one that triggered the fault. ++ */ ++typedef void (*nrf_fault_handler_t)(uint32_t id, uint32_t pc, uint32_t info); ++ ++/** @} */ ++ ++/** @addtogroup NRF_SDM_FUNCTIONS Functions ++ * @{ */ ++ ++/**@brief Enables the SoftDevice and by extension the protocol stack. ++ * ++ * @note Some care must be taken if a low frequency clock source is already running when calling this function: ++ * If the LF clock has a different source then the one currently running, it will be stopped. Then, the new ++ * clock source will be started. ++ * ++ * @note This function has no effect when returning with an error. ++ * ++ * @post If return code is ::NRF_SUCCESS ++ * - SoC library and protocol stack APIs are made available. ++ * - A portion of RAM will be unavailable (see relevant SDS documentation). ++ * - Some peripherals will be unavailable or available only through the SoC API (see relevant SDS documentation). ++ * - Interrupts will not arrive from protected peripherals or interrupts. ++ * - nrf_nvic_ functions must be used instead of CMSIS NVIC_ functions for reliable usage of the SoftDevice. ++ * - Interrupt latency may be affected by the SoftDevice (see relevant SDS documentation). ++ * - Chosen low frequency clock source will be running. ++ * ++ * @param p_clock_lf_cfg Low frequency clock source and accuracy. ++ If NULL the clock will be configured as an RC source with rc_ctiv = 16 and .rc_temp_ctiv = 2 ++ In the case of XTAL source, the PPM accuracy of the chosen clock source must be greater than or equal to the actual characteristics of your XTAL clock. ++ * @param fault_handler Callback to be invoked in case of fault, cannot be NULL. ++ * ++ * @retval ::NRF_SUCCESS ++ * @retval ::NRF_ERROR_INVALID_ADDR Invalid or NULL pointer supplied. ++ * @retval ::NRF_ERROR_INVALID_STATE SoftDevice is already enabled, and the clock source and fault handler cannot be updated. ++ * @retval ::NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION SoftDevice interrupt is already enabled, or an enabled interrupt has an illegal priority level. ++ * @retval ::NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN Unknown low frequency clock source selected. ++ */ ++SVCALL(SD_SOFTDEVICE_ENABLE, uint32_t, sd_softdevice_enable(nrf_clock_lf_cfg_t const * p_clock_lf_cfg, nrf_fault_handler_t fault_handler)); ++ ++ ++/**@brief Disables the SoftDevice and by extension the protocol stack. ++ * ++ * Idempotent function to disable the SoftDevice. ++ * ++ * @post SoC library and protocol stack APIs are made unavailable. ++ * @post All interrupts that was protected by the SoftDevice will be disabled and initialized to priority 0 (highest). ++ * @post All peripherals used by the SoftDevice will be reset to default values. ++ * @post All of RAM become available. ++ * @post All interrupts are forwarded to the application. ++ * @post LFCLK source chosen in ::sd_softdevice_enable will be left running. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_SOFTDEVICE_DISABLE, uint32_t, sd_softdevice_disable(void)); ++ ++/**@brief Check if the SoftDevice is enabled. ++ * ++ * @param[out] p_softdevice_enabled If the SoftDevice is enabled: 1 else 0. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_SOFTDEVICE_IS_ENABLED, uint32_t, sd_softdevice_is_enabled(uint8_t * p_softdevice_enabled)); ++ ++/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the SoftDevice ++ * ++ * This function is only intended to be called when a bootloader is enabled. ++ * ++ * @param[in] address The base address of the interrupt vector table for forwarded interrupts. ++ ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, uint32_t, sd_softdevice_vector_table_base_set(uint32_t address)); ++ ++/** @} */ ++ ++#ifdef __cplusplus ++} ++#endif ++#endif // NRF_SDM_H__ ++ ++/** ++ @} ++*/ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_soc.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_soc.h +new file mode 100644 +index 0000000..60fff94 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_soc.h +@@ -0,0 +1,934 @@ ++/* ++ * Copyright (c) 2015 - 2017, Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form, except as embedded into a Nordic ++ * Semiconductor ASA integrated circuit in a product or a software update for ++ * such product, must reproduce the above copyright notice, this list of ++ * conditions and the following disclaimer in the documentation and/or other ++ * materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its ++ * contributors may be used to endorse or promote products derived from this ++ * software without specific prior written permission. ++ * ++ * 4. This software, with or without modification, must only be used with a ++ * Nordic Semiconductor ASA integrated circuit. ++ * ++ * 5. Any software provided in binary form under this license must not be reverse ++ * engineered, decompiled, modified and/or disassembled. ++ * ++ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS ++ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE ++ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ++ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ++ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ */ ++ ++/** ++ * @defgroup nrf_soc_api SoC Library API ++ * @{ ++ * ++ * @brief APIs for the SoC library. ++ * ++ */ ++ ++#ifndef NRF_SOC_H__ ++#define NRF_SOC_H__ ++ ++#include ++#include "nrf.h" ++#include "nrf_svc.h" ++#include "nrf_error.h" ++#include "nrf_error_soc.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/**@addtogroup NRF_SOC_DEFINES Defines ++ * @{ */ ++ ++/**@brief The number of the lowest SVC number reserved for the SoC library. */ ++#define SOC_SVC_BASE (0x20) /**< Base value for SVCs that are available when the SoftDevice is disabled. */ ++#define SOC_SVC_BASE_NOT_AVAILABLE (0x2B) /**< Base value for SVCs that are not available when the SoftDevice is disabled. */ ++ ++/**@brief Guaranteed time for application to process radio inactive notification. */ ++#define NRF_RADIO_NOTIFICATION_INACTIVE_GUARANTEED_TIME_US (62) ++ ++/**@brief The minimum allowed timeslot extension time. */ ++#define NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US (200) ++ ++/**@brief The maximum processing time to handle a timeslot extension. */ ++#define NRF_RADIO_MAX_EXTENSION_PROCESSING_TIME_US (17) ++ ++/**@brief The latest time before the end of a timeslot the timeslot can be extended. */ ++#define NRF_RADIO_MIN_EXTENSION_MARGIN_US (79) ++ ++#define SOC_ECB_KEY_LENGTH (16) /**< ECB key length. */ ++#define SOC_ECB_CLEARTEXT_LENGTH (16) /**< ECB cleartext length. */ ++#define SOC_ECB_CIPHERTEXT_LENGTH (SOC_ECB_CLEARTEXT_LENGTH) /**< ECB ciphertext length. */ ++ ++#define SD_EVT_IRQn (SWI2_IRQn) /**< SoftDevice Event IRQ number. Used for both protocol events and SoC events. */ ++#define SD_EVT_IRQHandler (SWI2_IRQHandler) /**< SoftDevice Event IRQ handler. Used for both protocol events and SoC events. ++ The default interrupt priority for this handler is set to 4 */ ++#define RADIO_NOTIFICATION_IRQn (SWI1_IRQn) /**< The radio notification IRQ number. */ ++#define RADIO_NOTIFICATION_IRQHandler (SWI1_IRQHandler) /**< The radio notification IRQ handler. ++ The default interrupt priority for this handler is set to 4 */ ++#define NRF_RADIO_LENGTH_MIN_US (100) /**< The shortest allowed radio timeslot, in microseconds. */ ++#define NRF_RADIO_LENGTH_MAX_US (100000) /**< The longest allowed radio timeslot, in microseconds. */ ++ ++#define NRF_RADIO_DISTANCE_MAX_US (128000000UL - 1UL) /**< The longest timeslot distance, in microseconds, allowed for the distance parameter (see @ref nrf_radio_request_normal_t) in the request. */ ++ ++#define NRF_RADIO_EARLIEST_TIMEOUT_MAX_US (128000000UL - 1UL) /**< The longest timeout, in microseconds, allowed when requesting the earliest possible timeslot. */ ++ ++#define NRF_RADIO_START_JITTER_US (2) /**< The maximum jitter in @ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START relative to the requested start time. */ ++ ++/**@} */ ++ ++/**@addtogroup NRF_SOC_ENUMS Enumerations ++ * @{ */ ++ ++/**@brief The SVC numbers used by the SVC functions in the SoC library. */ ++enum NRF_SOC_SVCS ++{ ++ SD_PPI_CHANNEL_ENABLE_GET = SOC_SVC_BASE, ++ SD_PPI_CHANNEL_ENABLE_SET, ++ SD_PPI_CHANNEL_ENABLE_CLR, ++ SD_PPI_CHANNEL_ASSIGN, ++ SD_PPI_GROUP_TASK_ENABLE, ++ SD_PPI_GROUP_TASK_DISABLE, ++ SD_PPI_GROUP_ASSIGN, ++ SD_PPI_GROUP_GET, ++ SD_FLASH_PAGE_ERASE, ++ SD_FLASH_WRITE, ++ SD_FLASH_PROTECT, ++ SD_MUTEX_NEW = SOC_SVC_BASE_NOT_AVAILABLE, ++ SD_MUTEX_ACQUIRE, ++ SD_MUTEX_RELEASE, ++ SD_RAND_APPLICATION_POOL_CAPACITY_GET, ++ SD_RAND_APPLICATION_BYTES_AVAILABLE_GET, ++ SD_RAND_APPLICATION_VECTOR_GET, ++ SD_POWER_MODE_SET, ++ SD_POWER_SYSTEM_OFF, ++ SD_POWER_RESET_REASON_GET, ++ SD_POWER_RESET_REASON_CLR, ++ SD_POWER_POF_ENABLE, ++ SD_POWER_POF_THRESHOLD_SET, ++ SD_POWER_RAM_POWER_SET, ++ SD_POWER_RAM_POWER_CLR, ++ SD_POWER_RAM_POWER_GET, ++ SD_POWER_GPREGRET_SET, ++ SD_POWER_GPREGRET_CLR, ++ SD_POWER_GPREGRET_GET, ++ SD_POWER_DCDC_MODE_SET, ++ SD_APP_EVT_WAIT, ++ SD_CLOCK_HFCLK_REQUEST, ++ SD_CLOCK_HFCLK_RELEASE, ++ SD_CLOCK_HFCLK_IS_RUNNING, ++ SD_RADIO_NOTIFICATION_CFG_SET, ++ SD_ECB_BLOCK_ENCRYPT, ++ SD_ECB_BLOCKS_ENCRYPT, ++ SD_RADIO_SESSION_OPEN, ++ SD_RADIO_SESSION_CLOSE, ++ SD_RADIO_REQUEST, ++ SD_EVT_GET, ++ SD_TEMP_GET, ++ SVC_SOC_LAST ++}; ++ ++/**@brief Possible values of a ::nrf_mutex_t. */ ++enum NRF_MUTEX_VALUES ++{ ++ NRF_MUTEX_FREE, ++ NRF_MUTEX_TAKEN ++}; ++ ++/**@brief Power modes. */ ++enum NRF_POWER_MODES ++{ ++ NRF_POWER_MODE_CONSTLAT, /**< Constant latency mode. See power management in the reference manual. */ ++ NRF_POWER_MODE_LOWPWR /**< Low power mode. See power management in the reference manual. */ ++}; ++ ++ ++/**@brief Power failure thresholds */ ++enum NRF_POWER_THRESHOLDS ++{ ++ NRF_POWER_THRESHOLD_V17 = 4UL, /**< 1.7 Volts power failure threshold. */ ++ NRF_POWER_THRESHOLD_V18, /**< 1.8 Volts power failure threshold. */ ++ NRF_POWER_THRESHOLD_V19, /**< 1.9 Volts power failure threshold. */ ++ NRF_POWER_THRESHOLD_V20, /**< 2.0 Volts power failure threshold. */ ++ NRF_POWER_THRESHOLD_V21, /**< 2.1 Volts power failure threshold. */ ++ NRF_POWER_THRESHOLD_V22, /**< 2.2 Volts power failure threshold. */ ++ NRF_POWER_THRESHOLD_V23, /**< 2.3 Volts power failure threshold. */ ++ NRF_POWER_THRESHOLD_V24, /**< 2.4 Volts power failure threshold. */ ++ NRF_POWER_THRESHOLD_V25, /**< 2.5 Volts power failure threshold. */ ++ NRF_POWER_THRESHOLD_V26, /**< 2.6 Volts power failure threshold. */ ++ NRF_POWER_THRESHOLD_V27, /**< 2.7 Volts power failure threshold. */ ++ NRF_POWER_THRESHOLD_V28 /**< 2.8 Volts power failure threshold. */ ++}; ++ ++ ++/**@brief DC/DC converter modes. */ ++enum NRF_POWER_DCDC_MODES ++{ ++ NRF_POWER_DCDC_DISABLE, /**< The DCDC is disabled. */ ++ NRF_POWER_DCDC_ENABLE /**< The DCDC is enabled. */ ++}; ++ ++/**@brief Radio notification distances. */ ++enum NRF_RADIO_NOTIFICATION_DISTANCES ++{ ++ NRF_RADIO_NOTIFICATION_DISTANCE_NONE = 0, /**< The event does not have a notification. */ ++ NRF_RADIO_NOTIFICATION_DISTANCE_800US, /**< The distance from the active notification to start of radio activity. */ ++ NRF_RADIO_NOTIFICATION_DISTANCE_1740US, /**< The distance from the active notification to start of radio activity. */ ++ NRF_RADIO_NOTIFICATION_DISTANCE_2680US, /**< The distance from the active notification to start of radio activity. */ ++ NRF_RADIO_NOTIFICATION_DISTANCE_3620US, /**< The distance from the active notification to start of radio activity. */ ++ NRF_RADIO_NOTIFICATION_DISTANCE_4560US, /**< The distance from the active notification to start of radio activity. */ ++ NRF_RADIO_NOTIFICATION_DISTANCE_5500US /**< The distance from the active notification to start of radio activity. */ ++}; ++ ++ ++/**@brief Radio notification types. */ ++enum NRF_RADIO_NOTIFICATION_TYPES ++{ ++ NRF_RADIO_NOTIFICATION_TYPE_NONE = 0, /**< The event does not have a radio notification signal. */ ++ NRF_RADIO_NOTIFICATION_TYPE_INT_ON_ACTIVE, /**< Using interrupt for notification when the radio will be enabled. */ ++ NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE, /**< Using interrupt for notification when the radio has been disabled. */ ++ NRF_RADIO_NOTIFICATION_TYPE_INT_ON_BOTH, /**< Using interrupt for notification both when the radio will be enabled and disabled. */ ++}; ++ ++/**@brief The Radio signal callback types. */ ++enum NRF_RADIO_CALLBACK_SIGNAL_TYPE ++{ ++ NRF_RADIO_CALLBACK_SIGNAL_TYPE_START, /**< This signal indicates the start of the radio timeslot. */ ++ NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0, /**< This signal indicates the NRF_TIMER0 interrupt. */ ++ NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO, /**< This signal indicates the NRF_RADIO interrupt. */ ++ NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_FAILED, /**< This signal indicates extend action failed. */ ++ NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_SUCCEEDED /**< This signal indicates extend action succeeded. */ ++}; ++ ++/**@brief The actions requested by the signal callback. ++ * ++ * This code gives the SOC instructions about what action to take when the signal callback has ++ * returned. ++ */ ++enum NRF_RADIO_SIGNAL_CALLBACK_ACTION ++{ ++ NRF_RADIO_SIGNAL_CALLBACK_ACTION_NONE, /**< Return without action. */ ++ NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND, /**< Request an extension of the current ++ timeslot. Maximum execution time for this action: ++ @ref NRF_RADIO_MAX_EXTENSION_PROCESSING_TIME_US. ++ This action must be started at least ++ @ref NRF_RADIO_MIN_EXTENSION_MARGIN_US before ++ the end of the timeslot. */ ++ NRF_RADIO_SIGNAL_CALLBACK_ACTION_END, /**< End the current radio timeslot. */ ++ NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END /**< Request a new radio timeslot and end the current timeslot. */ ++}; ++ ++/**@brief Radio timeslot high frequency clock source configuration. */ ++enum NRF_RADIO_HFCLK_CFG ++{ ++ NRF_RADIO_HFCLK_CFG_XTAL_GUARANTEED, /**< The SoftDevice will guarantee that the high frequency clock source is the ++ external crystal for the whole duration of the timeslot. This should be the ++ preferred option for events that use the radio or require high timing accuracy. ++ @note The SoftDevice will automatically turn on and off the external crystal, ++ at the beginning and end of the timeslot, respectively. The crystal may also ++ intentionally be left running after the timeslot, in cases where it is needed ++ by the SoftDevice shortly after the end of the timeslot. */ ++ NRF_RADIO_HFCLK_CFG_NO_GUARANTEE /**< This configuration allows for earlier and tighter scheduling of timeslots. ++ The RC oscillator may be the clock source in part or for the whole duration of the timeslot. ++ The RC oscillator's accuracy must therefore be taken into consideration. ++ @note If the application will use the radio peripheral in timeslots with this configuration, ++ it must make sure that the crystal is running and stable before starting the radio. */ ++}; ++ ++/**@brief Radio timeslot priorities. */ ++enum NRF_RADIO_PRIORITY ++{ ++ NRF_RADIO_PRIORITY_HIGH, /**< High (equal priority as the normal connection priority of the SoftDevice stack(s)). */ ++ NRF_RADIO_PRIORITY_NORMAL, /**< Normal (equal priority as the priority of secondary activities of the SoftDevice stack(s)). */ ++}; ++ ++/**@brief Radio timeslot request type. */ ++enum NRF_RADIO_REQUEST_TYPE ++{ ++ NRF_RADIO_REQ_TYPE_EARLIEST, /**< Request radio timeslot as early as possible. This should always be used for the first request in a session. */ ++ NRF_RADIO_REQ_TYPE_NORMAL /**< Normal radio timeslot request. */ ++}; ++ ++/**@brief SoC Events. */ ++enum NRF_SOC_EVTS ++{ ++ NRF_EVT_HFCLKSTARTED, /**< Event indicating that the HFCLK has started. */ ++ NRF_EVT_POWER_FAILURE_WARNING, /**< Event indicating that a power failure warning has occurred. */ ++ NRF_EVT_FLASH_OPERATION_SUCCESS, /**< Event indicating that the ongoing flash operation has completed successfully. */ ++ NRF_EVT_FLASH_OPERATION_ERROR, /**< Event indicating that the ongoing flash operation has timed out with an error. */ ++ NRF_EVT_RADIO_BLOCKED, /**< Event indicating that a radio timeslot was blocked. */ ++ NRF_EVT_RADIO_CANCELED, /**< Event indicating that a radio timeslot was canceled by SoftDevice. */ ++ NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN, /**< Event indicating that a radio timeslot signal callback handler return was invalid. */ ++ NRF_EVT_RADIO_SESSION_IDLE, /**< Event indicating that a radio timeslot session is idle. */ ++ NRF_EVT_RADIO_SESSION_CLOSED, /**< Event indicating that a radio timeslot session is closed. */ ++ NRF_EVT_NUMBER_OF_EVTS ++}; ++ ++/**@} */ ++ ++ ++/**@addtogroup NRF_SOC_STRUCTURES Structures ++ * @{ */ ++ ++/**@brief Represents a mutex for use with the nrf_mutex functions. ++ * @note Accessing the value directly is not safe, use the mutex functions! ++ */ ++typedef volatile uint8_t nrf_mutex_t; ++ ++/**@brief Parameters for a request for a timeslot as early as possible. */ ++typedef struct ++{ ++ uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ ++ uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ ++ uint32_t length_us; /**< The radio timeslot length (in the range 100 to 100,000] microseconds). */ ++ uint32_t timeout_us; /**< Longest acceptable delay until the start of the requested timeslot (up to @ref NRF_RADIO_EARLIEST_TIMEOUT_MAX_US microseconds). */ ++} nrf_radio_request_earliest_t; ++ ++/**@brief Parameters for a normal radio timeslot request. */ ++typedef struct ++{ ++ uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ ++ uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ ++ uint32_t distance_us; /**< Distance from the start of the previous radio timeslot (up to @ref NRF_RADIO_DISTANCE_MAX_US microseconds). */ ++ uint32_t length_us; /**< The radio timeslot length (in the range [100..100,000] microseconds). */ ++} nrf_radio_request_normal_t; ++ ++/**@brief Radio timeslot request parameters. */ ++typedef struct ++{ ++ uint8_t request_type; /**< Type of request, see @ref NRF_RADIO_REQUEST_TYPE. */ ++ union ++ { ++ nrf_radio_request_earliest_t earliest; /**< Parameters for requesting a radio timeslot as early as possible. */ ++ nrf_radio_request_normal_t normal; /**< Parameters for requesting a normal radio timeslot. */ ++ } params; /**< Parameter union. */ ++} nrf_radio_request_t; ++ ++/**@brief Return parameters of the radio timeslot signal callback. */ ++typedef struct ++{ ++ uint8_t callback_action; /**< The action requested by the application when returning from the signal callback, see @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION. */ ++ union ++ { ++ struct ++ { ++ nrf_radio_request_t * p_next; /**< The request parameters for the next radio timeslot. */ ++ } request; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END. */ ++ struct ++ { ++ uint32_t length_us; /**< Requested extension of the radio timeslot duration (microseconds) (for minimum time see @ref NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US). */ ++ } extend; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND. */ ++ } params; /**< Parameter union. */ ++} nrf_radio_signal_callback_return_param_t; ++ ++/**@brief The radio timeslot signal callback type. ++ * ++ * @note In case of invalid return parameters, the radio timeslot will automatically end ++ * immediately after returning from the signal callback and the ++ * @ref NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN event will be sent. ++ * @note The returned struct pointer must remain valid after the signal callback ++ * function returns. For instance, this means that it must not point to a stack variable. ++ * ++ * @param[in] signal_type Type of signal, see @ref NRF_RADIO_CALLBACK_SIGNAL_TYPE. ++ * ++ * @return Pointer to structure containing action requested by the application. ++ */ ++typedef nrf_radio_signal_callback_return_param_t * (*nrf_radio_signal_callback_t) (uint8_t signal_type); ++ ++/**@brief AES ECB parameter typedefs */ ++typedef uint8_t soc_ecb_key_t[SOC_ECB_KEY_LENGTH]; /**< Encryption key type. */ ++typedef uint8_t soc_ecb_cleartext_t[SOC_ECB_CLEARTEXT_LENGTH]; /**< Cleartext data type. */ ++typedef uint8_t soc_ecb_ciphertext_t[SOC_ECB_CIPHERTEXT_LENGTH]; /**< Ciphertext data type. */ ++ ++/**@brief AES ECB data structure */ ++typedef struct ++{ ++ soc_ecb_key_t key; /**< Encryption key. */ ++ soc_ecb_cleartext_t cleartext; /**< Cleartext data. */ ++ soc_ecb_ciphertext_t ciphertext; /**< Ciphertext data. */ ++} nrf_ecb_hal_data_t; ++ ++/**@brief AES ECB block. Used to provide multiple blocks in a single call ++ to @ref sd_ecb_blocks_encrypt.*/ ++typedef struct ++{ ++ soc_ecb_key_t const * p_key; /**< Pointer to the Encryption key. */ ++ soc_ecb_cleartext_t const * p_cleartext; /**< Pointer to the Cleartext data. */ ++ soc_ecb_ciphertext_t * p_ciphertext; /**< Pointer to the Ciphertext data. */ ++} nrf_ecb_hal_data_block_t; ++ ++/**@} */ ++ ++/**@addtogroup NRF_SOC_FUNCTIONS Functions ++ * @{ */ ++ ++/**@brief Initialize a mutex. ++ * ++ * @param[in] p_mutex Pointer to the mutex to initialize. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_MUTEX_NEW, uint32_t, sd_mutex_new(nrf_mutex_t * p_mutex)); ++ ++/**@brief Attempt to acquire a mutex. ++ * ++ * @param[in] p_mutex Pointer to the mutex to acquire. ++ * ++ * @retval ::NRF_SUCCESS The mutex was successfully acquired. ++ * @retval ::NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN The mutex could not be acquired. ++ */ ++SVCALL(SD_MUTEX_ACQUIRE, uint32_t, sd_mutex_acquire(nrf_mutex_t * p_mutex)); ++ ++/**@brief Release a mutex. ++ * ++ * @param[in] p_mutex Pointer to the mutex to release. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_MUTEX_RELEASE, uint32_t, sd_mutex_release(nrf_mutex_t * p_mutex)); ++ ++/**@brief Query the capacity of the application random pool. ++ * ++ * @param[out] p_pool_capacity The capacity of the pool. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_RAND_APPLICATION_POOL_CAPACITY_GET, uint32_t, sd_rand_application_pool_capacity_get(uint8_t * p_pool_capacity)); ++ ++/**@brief Get number of random bytes available to the application. ++ * ++ * @param[out] p_bytes_available The number of bytes currently available in the pool. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_RAND_APPLICATION_BYTES_AVAILABLE_GET, uint32_t, sd_rand_application_bytes_available_get(uint8_t * p_bytes_available)); ++ ++/**@brief Get random bytes from the application pool. ++ * ++ * @param[out] p_buff Pointer to unit8_t buffer for storing the bytes. ++ * @param[in] length Number of bytes to take from pool and place in p_buff. ++ * ++ * @retval ::NRF_SUCCESS The requested bytes were written to p_buff. ++ * @retval ::NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES No bytes were written to the buffer, because there were not enough bytes available. ++*/ ++SVCALL(SD_RAND_APPLICATION_VECTOR_GET, uint32_t, sd_rand_application_vector_get(uint8_t * p_buff, uint8_t length)); ++ ++/**@brief Gets the reset reason register. ++ * ++ * @param[out] p_reset_reason Contents of the NRF_POWER->RESETREAS register. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_POWER_RESET_REASON_GET, uint32_t, sd_power_reset_reason_get(uint32_t * p_reset_reason)); ++ ++/**@brief Clears the bits of the reset reason register. ++ * ++ * @param[in] reset_reason_clr_msk Contains the bits to clear from the reset reason register. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_POWER_RESET_REASON_CLR, uint32_t, sd_power_reset_reason_clr(uint32_t reset_reason_clr_msk)); ++ ++/**@brief Sets the power mode when in CPU sleep. ++ * ++ * @param[in] power_mode The power mode to use when in CPU sleep, see @ref NRF_POWER_MODES. @sa sd_app_evt_wait ++ * ++ * @retval ::NRF_SUCCESS The power mode was set. ++ * @retval ::NRF_ERROR_SOC_POWER_MODE_UNKNOWN The power mode was unknown. ++ */ ++SVCALL(SD_POWER_MODE_SET, uint32_t, sd_power_mode_set(uint8_t power_mode)); ++ ++/**@brief Puts the chip in System OFF mode. ++ * ++ * @retval ::NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN ++ */ ++SVCALL(SD_POWER_SYSTEM_OFF, uint32_t, sd_power_system_off(void)); ++ ++/**@brief Enables or disables the power-fail comparator. ++ * ++ * Enabling this will give a SoftDevice event (NRF_EVT_POWER_FAILURE_WARNING) when the power failure warning occurs. ++ * The event can be retrieved with sd_evt_get(); ++ * ++ * @param[in] pof_enable True if the power-fail comparator should be enabled, false if it should be disabled. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_POWER_POF_ENABLE, uint32_t, sd_power_pof_enable(uint8_t pof_enable)); ++ ++/**@brief Sets the power-fail threshold value. ++ * ++ * @param[in] threshold The power-fail threshold value to use, see @ref NRF_POWER_THRESHOLDS. ++ * ++ * @retval ::NRF_SUCCESS The power failure threshold was set. ++ * @retval ::NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN The power failure threshold is unknown. ++ */ ++SVCALL(SD_POWER_POF_THRESHOLD_SET, uint32_t, sd_power_pof_threshold_set(uint8_t threshold)); ++ ++/**@brief Writes the NRF_POWER->RAM[index].POWERSET register. ++ * ++ * @param[in] index Contains the index in the NRF_POWER->RAM[index].POWERSET register to write to. ++ * @param[in] ram_powerset Contains the word to write to the NRF_POWER->RAM[index].POWERSET register. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_POWER_RAM_POWER_SET, uint32_t, sd_power_ram_power_set(uint8_t index, uint32_t ram_powerset)); ++ ++/**@brief Writes the NRF_POWER->RAM[index].POWERCLR register. ++ * ++ * @param[in] index Contains the index in the NRF_POWER->RAM[index].POWERCLR register to write to. ++ * @param[in] ram_powerclr Contains the word to write to the NRF_POWER->RAM[index].POWERCLR register. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_POWER_RAM_POWER_CLR, uint32_t, sd_power_ram_power_clr(uint8_t index, uint32_t ram_powerclr)); ++ ++/**@brief Get contents of NRF_POWER->RAM[index].POWER register, indicates power status of RAM[index] blocks. ++ * ++ * @param[in] index Contains the index in the NRF_POWER->RAM[index].POWER register to read from. ++ * @param[out] p_ram_power Content of NRF_POWER->RAM[index].POWER register. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_POWER_RAM_POWER_GET, uint32_t, sd_power_ram_power_get(uint8_t index, uint32_t * p_ram_power)); ++ ++/**@brief Set bits in the general purpose retention registers (NRF_POWER->GPREGRET*). ++ * ++ * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. ++ * @param[in] gpregret_msk Bits to be set in the GPREGRET register. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_POWER_GPREGRET_SET, uint32_t, sd_power_gpregret_set(uint32_t gpregret_id, uint32_t gpregret_msk)); ++ ++/**@brief Clear bits in the general purpose retention registers (NRF_POWER->GPREGRET*). ++ * ++ * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. ++ * @param[in] gpregret_msk Bits to be clear in the GPREGRET register. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_POWER_GPREGRET_CLR, uint32_t, sd_power_gpregret_clr(uint32_t gpregret_id, uint32_t gpregret_msk)); ++ ++/**@brief Get contents of the general purpose retention registers (NRF_POWER->GPREGRET*). ++ * ++ * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. ++ * @param[out] p_gpregret Contents of the GPREGRET register. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_POWER_GPREGRET_GET, uint32_t, sd_power_gpregret_get(uint32_t gpregret_id, uint32_t *p_gpregret)); ++ ++/**@brief Sets the DCDC mode. ++ * ++ * Enable or disable the DCDC peripheral. ++ * ++ * @param[in] dcdc_mode The mode of the DCDC, see @ref NRF_POWER_DCDC_MODES. ++ * ++ * @retval ::NRF_SUCCESS ++ * @retval ::NRF_ERROR_INVALID_PARAM The DCDC mode is invalid. ++ */ ++SVCALL(SD_POWER_DCDC_MODE_SET, uint32_t, sd_power_dcdc_mode_set(uint8_t dcdc_mode)); ++ ++/**@brief Request the high frequency crystal oscillator. ++ * ++ * Will start the high frequency crystal oscillator, the startup time of the crystal varies ++ * and the ::sd_clock_hfclk_is_running function can be polled to check if it has started. ++ * ++ * @see sd_clock_hfclk_is_running ++ * @see sd_clock_hfclk_release ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_CLOCK_HFCLK_REQUEST, uint32_t, sd_clock_hfclk_request(void)); ++ ++/**@brief Releases the high frequency crystal oscillator. ++ * ++ * Will stop the high frequency crystal oscillator, this happens immediately. ++ * ++ * @see sd_clock_hfclk_is_running ++ * @see sd_clock_hfclk_request ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_CLOCK_HFCLK_RELEASE, uint32_t, sd_clock_hfclk_release(void)); ++ ++/**@brief Checks if the high frequency crystal oscillator is running. ++ * ++ * @see sd_clock_hfclk_request ++ * @see sd_clock_hfclk_release ++ * ++ * @param[out] p_is_running 1 if the external crystal oscillator is running, 0 if not. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_CLOCK_HFCLK_IS_RUNNING, uint32_t, sd_clock_hfclk_is_running(uint32_t * p_is_running)); ++ ++/**@brief Waits for an application event. ++ * ++ * An application event is either an application interrupt or a pended interrupt when the interrupt ++ * is disabled. ++ * ++ * When the application waits for an application event by calling this function, an interrupt that ++ * is enabled will be taken immediately on pending since this function will wait in thread mode, ++ * then the execution will return in the application's main thread. ++ * ++ * In order to wake up from disabled interrupts, the SEVONPEND flag has to be set in the Cortex-M ++ * MCU's System Control Register (SCR), CMSIS_SCB. In that case, when a disabled interrupt gets ++ * pended, this function will return to the application's main thread. ++ * ++ * @note The application must ensure that the pended flag is cleared using ::sd_nvic_ClearPendingIRQ ++ * in order to sleep using this function. This is only necessary for disabled interrupts, as ++ * the interrupt handler will clear the pending flag automatically for enabled interrupts. ++ * ++ * @note If an application interrupt has happened since the last time sd_app_evt_wait was ++ * called this function will return immediately and not go to sleep. This is to avoid race ++ * conditions that can occur when a flag is updated in the interrupt handler and processed ++ * in the main loop. ++ * ++ * @post An application interrupt has happened or a interrupt pending flag is set. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_APP_EVT_WAIT, uint32_t, sd_app_evt_wait(void)); ++ ++/**@brief Get PPI channel enable register contents. ++ * ++ * @param[out] p_channel_enable The contents of the PPI CHEN register. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_PPI_CHANNEL_ENABLE_GET, uint32_t, sd_ppi_channel_enable_get(uint32_t * p_channel_enable)); ++ ++/**@brief Set PPI channel enable register. ++ * ++ * @param[in] channel_enable_set_msk Mask containing the bits to set in the PPI CHEN register. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_PPI_CHANNEL_ENABLE_SET, uint32_t, sd_ppi_channel_enable_set(uint32_t channel_enable_set_msk)); ++ ++/**@brief Clear PPI channel enable register. ++ * ++ * @param[in] channel_enable_clr_msk Mask containing the bits to clear in the PPI CHEN register. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_PPI_CHANNEL_ENABLE_CLR, uint32_t, sd_ppi_channel_enable_clr(uint32_t channel_enable_clr_msk)); ++ ++/**@brief Assign endpoints to a PPI channel. ++ * ++ * @param[in] channel_num Number of the PPI channel to assign. ++ * @param[in] evt_endpoint Event endpoint of the PPI channel. ++ * @param[in] task_endpoint Task endpoint of the PPI channel. ++ * ++ * @retval ::NRF_ERROR_SOC_PPI_INVALID_CHANNEL The channel number is invalid. ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_PPI_CHANNEL_ASSIGN, uint32_t, sd_ppi_channel_assign(uint8_t channel_num, const volatile void * evt_endpoint, const volatile void * task_endpoint)); ++ ++/**@brief Task to enable a channel group. ++ * ++ * @param[in] group_num Number of the channel group. ++ * ++ * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_PPI_GROUP_TASK_ENABLE, uint32_t, sd_ppi_group_task_enable(uint8_t group_num)); ++ ++/**@brief Task to disable a channel group. ++ * ++ * @param[in] group_num Number of the PPI group. ++ * ++ * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_PPI_GROUP_TASK_DISABLE, uint32_t, sd_ppi_group_task_disable(uint8_t group_num)); ++ ++/**@brief Assign PPI channels to a channel group. ++ * ++ * @param[in] group_num Number of the channel group. ++ * @param[in] channel_msk Mask of the channels to assign to the group. ++ * ++ * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_PPI_GROUP_ASSIGN, uint32_t, sd_ppi_group_assign(uint8_t group_num, uint32_t channel_msk)); ++ ++/**@brief Gets the PPI channels of a channel group. ++ * ++ * @param[in] group_num Number of the channel group. ++ * @param[out] p_channel_msk Mask of the channels assigned to the group. ++ * ++ * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_PPI_GROUP_GET, uint32_t, sd_ppi_group_get(uint8_t group_num, uint32_t * p_channel_msk)); ++ ++/**@brief Configures the Radio Notification signal. ++ * ++ * @note ++ * - The notification signal latency depends on the interrupt priority settings of SWI used ++ * for notification signal. ++ * - To ensure that the radio notification signal behaves in a consistent way, the radio ++ * notifications must be configured when there is no protocol stack or other SoftDevice ++ * activity in progress. It is recommended that the radio notification signal is ++ * configured directly after the SoftDevice has been enabled. ++ * - In the period between the ACTIVE signal and the start of the Radio Event, the SoftDevice ++ * will interrupt the application to do Radio Event preparation. ++ * - Using the Radio Notification feature may limit the bandwidth, as the SoftDevice may have ++ * to shorten the connection events to have time for the Radio Notification signals. ++ * ++ * @param[in] type Type of notification signal, see @ref NRF_RADIO_NOTIFICATION_TYPES. ++ * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE shall be used to turn off radio ++ * notification. Using @ref NRF_RADIO_NOTIFICATION_DISTANCE_NONE is ++ * recommended (but not required) to be used with ++ * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE. ++ * ++ * @param[in] distance Distance between the notification signal and start of radio activity, see @ref NRF_RADIO_NOTIFICATION_DISTANCES. ++ * This parameter is ignored when @ref NRF_RADIO_NOTIFICATION_TYPE_NONE or ++ * @ref NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE is used. ++ * ++ * @retval ::NRF_ERROR_INVALID_PARAM The group number is invalid. ++ * @retval ::NRF_ERROR_INVALID_STATE A protocol stack or other SoftDevice is running. Stop all ++ * running activities and retry. ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_RADIO_NOTIFICATION_CFG_SET, uint32_t, sd_radio_notification_cfg_set(uint8_t type, uint8_t distance)); ++ ++/**@brief Encrypts a block according to the specified parameters. ++ * ++ * 128-bit AES encryption. ++ * ++ * @note: ++ * - The application may set the SEVONPEND bit in the SCR to 1 to make the SoftDevice sleep while ++ * the ECB is running. The SEVONPEND bit should only be cleared (set to 0) from application ++ * main or low interrupt level. ++ * ++ * @param[in, out] p_ecb_data Pointer to the ECB parameters' struct (two input ++ * parameters and one output parameter). ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_ECB_BLOCK_ENCRYPT, uint32_t, sd_ecb_block_encrypt(nrf_ecb_hal_data_t * p_ecb_data)); ++ ++/**@brief Encrypts multiple data blocks provided as an array of data block structures. ++ * ++ * @details: Performs 128-bit AES encryption on multiple data blocks ++ * ++ * @note: ++ * - The application may set the SEVONPEND bit in the SCR to 1 to make the SoftDevice sleep while ++ * the ECB is running. The SEVONPEND bit should only be cleared (set to 0) from application ++ * main or low interrupt level. ++ * ++ * @param[in] block_count Count of blocks in the p_data_blocks array. ++ * @param[in,out] p_data_blocks Pointer to the first entry in a contiguous array of ++ * @ref nrf_ecb_hal_data_block_t structures. ++ * ++ * @retval ::NRF_SUCCESS ++ */ ++SVCALL(SD_ECB_BLOCKS_ENCRYPT, uint32_t, sd_ecb_blocks_encrypt(uint8_t block_count, nrf_ecb_hal_data_block_t * p_data_blocks)); ++ ++/**@brief Gets any pending events generated by the SoC API. ++ * ++ * The application should keep calling this function to get events, until ::NRF_ERROR_NOT_FOUND is returned. ++ * ++ * @param[out] p_evt_id Set to one of the values in @ref NRF_SOC_EVTS, if any events are pending. ++ * ++ * @retval ::NRF_SUCCESS An event was pending. The event id is written in the p_evt_id parameter. ++ * @retval ::NRF_ERROR_NOT_FOUND No pending events. ++ */ ++SVCALL(SD_EVT_GET, uint32_t, sd_evt_get(uint32_t * p_evt_id)); ++ ++/**@brief Get the temperature measured on the chip ++ * ++ * This function will block until the temperature measurement is done. ++ * It takes around 50 us from call to return. ++ * ++ * @param[out] p_temp Result of temperature measurement. Die temperature in 0.25 degrees Celsius. ++ * ++ * @retval ::NRF_SUCCESS A temperature measurement was done, and the temperature was written to temp ++ */ ++SVCALL(SD_TEMP_GET, uint32_t, sd_temp_get(int32_t * p_temp)); ++ ++/**@brief Flash Write ++* ++* Commands to write a buffer to flash ++* ++* If the SoftDevice is enabled: ++* This call initiates the flash access command, and its completion will be communicated to the ++* application with exactly one of the following events: ++* - @ref NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. ++* - @ref NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. ++* ++* If the SoftDevice is not enabled no event will be generated, and this call will return @ref NRF_SUCCESS when the ++ * write has been completed ++* ++* @note ++* - This call takes control over the radio and the CPU during flash erase and write to make sure that ++* they will not interfere with the flash access. This means that all interrupts will be blocked ++* for a predictable time (depending on the NVMC specification in the device's Product Specification ++* and the command parameters). ++* - The data in the p_src buffer should not be modified before the @ref NRF_EVT_FLASH_OPERATION_SUCCESS ++* or the @ref NRF_EVT_FLASH_OPERATION_ERROR have been received if the SoftDevice is enabled. ++* ++* ++* @param[in] p_dst Pointer to start of flash location to be written. ++* @param[in] p_src Pointer to buffer with data to be written. ++* @param[in] size Number of 32-bit words to write. Maximum size is the number of words in one ++* flash page. See the device's Product Specification for details. ++* ++* @retval ::NRF_ERROR_INVALID_ADDR Tried to write to a non existing flash address, or p_dst or p_src was unaligned. ++* @retval ::NRF_ERROR_BUSY The previous command has not yet completed. ++* @retval ::NRF_ERROR_INVALID_LENGTH Size was 0, or higher than the maximum allowed size. ++* @retval ::NRF_ERROR_FORBIDDEN Tried to write to or read from protected location. ++* @retval ::NRF_SUCCESS The command was accepted. ++*/ ++SVCALL(SD_FLASH_WRITE, uint32_t, sd_flash_write(uint32_t * p_dst, uint32_t const * p_src, uint32_t size)); ++ ++ ++/**@brief Flash Erase page ++* ++* Commands to erase a flash page ++* If the SoftDevice is enabled: ++* This call initiates the flash access command, and its completion will be communicated to the ++* application with exactly one of the following events: ++* - @ref NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. ++* - @ref NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. ++* ++* If the SoftDevice is not enabled no event will be generated, and this call will return @ref NRF_SUCCESS when the ++* erase has been completed ++* ++* @note ++* - This call takes control over the radio and the CPU during flash erase and write to make sure that ++* they will not interfere with the flash access. This means that all interrupts will be blocked ++* for a predictable time (depending on the NVMC specification in the device's Product Specification ++* and the command parameters). ++* ++* ++* @param[in] page_number Page number of the page to erase ++* ++* @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. ++* @retval ::NRF_ERROR_INVALID_ADDR Tried to erase to a non existing flash page. ++* @retval ::NRF_ERROR_BUSY The previous command has not yet completed. ++* @retval ::NRF_ERROR_FORBIDDEN Tried to erase a protected page. ++* @retval ::NRF_SUCCESS The command was accepted. ++*/ ++SVCALL(SD_FLASH_PAGE_ERASE, uint32_t, sd_flash_page_erase(uint32_t page_number)); ++ ++ ++/**@brief Flash Protection set ++ * ++ * Commands to set the flash protection configuration registers. ++ This sets the CONFIGx registers of the BPROT peripheral. ++ * ++ * @note Not all parameters are valid for all products. Some bits in each parameter may not be ++ * valid for your product. Please refer your Product Specification for more details. ++ * ++ * @note To read the values read them directly. They are only write-protected. ++ * ++ * @param[in] block_cfg0 Value to be written to the configuration register. ++ * @param[in] block_cfg1 Value to be written to the configuration register. ++ * @param[in] block_cfg2 Value to be written to the configuration register. ++ * @param[in] block_cfg3 Value to be written to the configuration register. ++ * ++ * @retval ::NRF_ERROR_NOT_SUPPORTED Non-zero value supplied to one or more of the unsupported parameters. ++ * @retval ::NRF_ERROR_FORBIDDEN Tried to protect the flash region used by the SoftDevice. ++ * @retval ::NRF_SUCCESS Values successfully written to configuration registers. ++ */ ++SVCALL(SD_FLASH_PROTECT, uint32_t, sd_flash_protect(uint32_t block_cfg0, uint32_t block_cfg1, uint32_t block_cfg2, uint32_t block_cfg3)); ++ ++/**@brief Opens a session for radio timeslot requests. ++ * ++ * @note Only one session can be open at a time. ++ * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) will be called when the radio timeslot ++ * starts. From this point the NRF_RADIO and NRF_TIMER0 peripherals can be freely accessed ++ * by the application. ++ * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0) is called whenever the NRF_TIMER0 ++ * interrupt occurs. ++ * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO) is called whenever the NRF_RADIO ++ * interrupt occurs. ++ * @note p_radio_signal_callback() will be called at ARM interrupt priority level 0. This ++ * implies that none of the sd_* API calls can be used from p_radio_signal_callback(). ++ * ++ * @param[in] p_radio_signal_callback The signal callback. ++ * ++ * @retval ::NRF_ERROR_INVALID_ADDR p_radio_signal_callback is an invalid function pointer. ++ * @retval ::NRF_ERROR_BUSY If session cannot be opened. ++ * @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. ++ * @retval ::NRF_SUCCESS Otherwise. ++ */ ++ SVCALL(SD_RADIO_SESSION_OPEN, uint32_t, sd_radio_session_open(nrf_radio_signal_callback_t p_radio_signal_callback)); ++ ++/**@brief Closes a session for radio timeslot requests. ++ * ++ * @note Any current radio timeslot will be finished before the session is closed. ++ * @note If a radio timeslot is scheduled when the session is closed, it will be canceled. ++ * @note The application cannot consider the session closed until the @ref NRF_EVT_RADIO_SESSION_CLOSED ++ * event is received. ++ * ++ * @retval ::NRF_ERROR_FORBIDDEN If session not opened. ++ * @retval ::NRF_ERROR_BUSY If session is currently being closed. ++ * @retval ::NRF_SUCCESS Otherwise. ++ */ ++ SVCALL(SD_RADIO_SESSION_CLOSE, uint32_t, sd_radio_session_close(void)); ++ ++/**@brief Requests a radio timeslot. ++ * ++ * @note The request type is determined by p_request->request_type, and can be one of @ref NRF_RADIO_REQ_TYPE_EARLIEST ++ * and @ref NRF_RADIO_REQ_TYPE_NORMAL. The first request in a session must always be of type @ref NRF_RADIO_REQ_TYPE_EARLIEST. ++ * @note For a normal request (@ref NRF_RADIO_REQ_TYPE_NORMAL), the start time of a radio timeslot is specified by ++ * p_request->distance_us and is given relative to the start of the previous timeslot. ++ * @note A too small p_request->distance_us will lead to a @ref NRF_EVT_RADIO_BLOCKED event. ++ * @note Timeslots scheduled too close will lead to a @ref NRF_EVT_RADIO_BLOCKED event. ++ * @note See the SoftDevice Specification for more on radio timeslot scheduling, distances and lengths. ++ * @note If an opportunity for the first radio timeslot is not found before 100 ms after the call to this ++ * function, it is not scheduled, and instead a @ref NRF_EVT_RADIO_BLOCKED event is sent. ++ * The application may then try to schedule the first radio timeslot again. ++ * @note Successful requests will result in nrf_radio_signal_callback_t(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START). ++ * Unsuccessful requests will result in a @ref NRF_EVT_RADIO_BLOCKED event, see @ref NRF_SOC_EVTS. ++ * @note The jitter in the start time of the radio timeslots is +/- @ref NRF_RADIO_START_JITTER_US us. ++ * @note The nrf_radio_signal_callback_t(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) call has a latency relative to the ++ * specified radio timeslot start, but this does not affect the actual start time of the timeslot. ++ * @note NRF_TIMER0 is reset at the start of the radio timeslot, and is clocked at 1MHz from the high frequency ++ * (16 MHz) clock source. If p_request->hfclk_force_xtal is true, the high frequency clock is ++ * guaranteed to be clocked from the external crystal. ++ * @note The SoftDevice will neither access the NRF_RADIO peripheral nor the NRF_TIMER0 peripheral ++ * during the radio timeslot. ++ * ++ * @param[in] p_request Pointer to the request parameters. ++ * ++ * @retval ::NRF_ERROR_FORBIDDEN If session not opened or the session is not IDLE. ++ * @retval ::NRF_ERROR_INVALID_ADDR If the p_request pointer is invalid. ++ * @retval ::NRF_ERROR_INVALID_PARAM If the parameters of p_request are not valid. ++ * @retval ::NRF_SUCCESS Otherwise. ++ */ ++ SVCALL(SD_RADIO_REQUEST, uint32_t, sd_radio_request(nrf_radio_request_t const * p_request)); ++ ++/**@} */ ++ ++#ifdef __cplusplus ++} ++#endif ++#endif // NRF_SOC_H__ ++ ++/**@} */ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_svc.h nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_svc.h +new file mode 100644 +index 0000000..c26ce74 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers/nrf_svc.h +@@ -0,0 +1,90 @@ ++/* ++ * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form, except as embedded into a Nordic ++ * Semiconductor ASA integrated circuit in a product or a software update for ++ * such product, must reproduce the above copyright notice, this list of ++ * conditions and the following disclaimer in the documentation and/or other ++ * materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its ++ * contributors may be used to endorse or promote products derived from this ++ * software without specific prior written permission. ++ * ++ * 4. This software, with or without modification, must only be used with a ++ * Nordic Semiconductor ASA integrated circuit. ++ * ++ * 5. Any software provided in binary form under this license must not be reverse ++ * engineered, decompiled, modified and/or disassembled. ++ * ++ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS ++ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE ++ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ++ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ++ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ */ ++ ++#ifndef NRF_SVC__ ++#define NRF_SVC__ ++ ++#include "stdint.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++#ifdef SVCALL_AS_NORMAL_FUNCTION ++#define SVCALL(number, return_type, signature) return_type signature ++#else ++ ++#ifndef SVCALL ++#if defined (__CC_ARM) ++#define SVCALL(number, return_type, signature) return_type __svc(number) signature ++#elif defined (__GNUC__) ++#ifdef __cplusplus ++#define GCC_CAST_CPP (uint16_t) ++#else ++#define GCC_CAST_CPP ++#endif ++#define SVCALL(number, return_type, signature) \ ++ _Pragma("GCC diagnostic push") \ ++ _Pragma("GCC diagnostic ignored \"-Wreturn-type\"") \ ++ __attribute__((naked)) \ ++ __attribute__((unused)) \ ++ static return_type signature \ ++ { \ ++ __asm( \ ++ "svc %0\n" \ ++ "bx r14" : : "I" (GCC_CAST_CPP number) : "r0" \ ++ ); \ ++ } \ ++ _Pragma("GCC diagnostic pop") ++ ++#elif defined (__ICCARM__) ++#define PRAGMA(x) _Pragma(#x) ++#define SVCALL(number, return_type, signature) \ ++PRAGMA(swi_number = (number)) \ ++ __swi return_type signature; ++#else ++#define SVCALL(number, return_type, signature) return_type signature ++#endif ++#endif // SVCALL ++ ++#endif // SVCALL_AS_NORMAL_FUNCTION ++ ++#ifdef __cplusplus ++} ++#endif ++#endif // NRF_SVC__ +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers_replacement/test.rb nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers_replacement/test.rb +new file mode 100644 +index 0000000..f58ae1e +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/headers_replacement/test.rb +@@ -0,0 +1,2 @@ ++a = 'xxx const * const*' ++puts a.gsub('const','') +\ No newline at end of file +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/hex/s132_nrf52_5.1.0_softdevice.hex nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/hex/s132_nrf52_5.1.0_softdevice.hex +new file mode 100644 +index 0000000..757b5f6 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/hex/s132_nrf52_5.1.0_softdevice.hex +@@ -0,0 +1,7843 @@ ++:020000040000FA ++:1000000000040020E90800007D050000C908000088 ++:1000100087050000910500009B050000000000001E ++:100020000000000000000000000000000D090000BA ++:10003000A505000000000000AF050000B9050000A4 ++:10004000C3050000CD050000D7050000E105000054 ++:10005000EB050000F5050000FF05000009060000A3 ++:10006000130600001D0600002706000031060000F0 ++:100070003B060000450600004F0600005906000040 ++:10008000630600006D060000770600008106000090 ++:100090008B060000950600009F060000A9060000E0 ++:1000A000B3060000BD060000C7060000D106000030 ++:1000B000DB060000E5060000EF060000F906000080 ++:1000C000030700000D0700001707000021070000CC ++:1000D0002B070000350700003F070000490700001C ++:1000E000530700005D07000067070000710700006C ++:1000F0007B070000850700008F07000099070000BC ++:10010000A30700001FB500F003F88DE80F001FBD26 ++:1001100000F0E0BB1FB56FF00100009040100390AD ++:10012000029001904FF010208069000B420900F00E ++:100130001F045DF822300120A04083434DF8223097 ++:10014000684600F045F91FBDF0B54FF6FF734FF458 ++:10015000B4751A466E1E11E0A94201D3344600E080 ++:100160000C46091B30F8027B641E3B441A44F9D14B ++:100170009CB204EB134394B204EB12420029EBD17E ++:1001800098B200EB134002EB124140EA0140F0BD8F ++:10019000DE4992B00446D1E90001CDE91001FF2209 ++:1001A0004021684600F03CFB94E80F008DE80F000A ++:1001B000684610A902E004C841F8042D8842FAD12B ++:1001C00010216846FFF7C0FF1090AA208DF8440068 ++:1001D000FFF7A0FF00F0F3F84FF01024A069102201 ++:1001E0006946803000F002F9A069082210A900F0E9 ++:1001F000FDF800F0D8F84FF080510A6949690068AD ++:100200004A43824201D8102070470020704710B541 ++:10021000D0E900214FF0805002EB8103026944696C ++:100220006243934209D84FF01022536903EB8103D4 ++:100230000169406941438B4201D9092010BD5069D1 ++:10024000401C01D0002010BD0F2010BD70B501680A ++:100250000446AF4D4FF01020072952D2DFE801F0DD ++:10026000330419293C1E2500D4E902656468294637 ++:10027000304600F0CDF82A462146304600F0B6F868 ++:10028000AA002146304600F09FFA002800D0032043 ++:1002900070BD00F051FB4FF4805007E0201DFFF7C8 ++:1002A000AAFF0028F4D100F047FB60682860002016 ++:1002B00070BD241D94E80700920000F085FA002824 ++:1002C000F6D00E2070BD8069401C12D0201DFFF7B3 ++:1002D0009EFF0028F6D109E08069401C09D0201D4E ++:1002E000FFF789FF0028EDD1606820B12046FFF7B5 ++:1002F0004FFF042070BDFFF70DFF00F060F800F025 ++:1003000052F8072070BD10B50C46182802D0012005 ++:10031000086010BD2068FFF799FF206010BD4FF006 ++:100320001024A069401C05D0A569A66980353079E4 ++:10033000AA2808D06069401C2DD060690068401C64 ++:1003400029D060692CE010212846FFF7FDFE3168B6 ++:1003500081421CD1A16901F18002C03105E030B1B8 ++:1003600008CA51F8040D984201D1012000E0002094 ++:100370008A42F4D158B1286810B1042803D0FEE7AE ++:10038000284600F057F862496868086008E000F005 ++:1003900016F800F008F84FF480500168491C01D0AD ++:1003A00000F0A4FAFEE7BFF34F8F5A4801685A4A9B ++:1003B00001F4E06111430160BFF34F8FFEE74FF09E ++:1003C00010208169491C02D0806900F0AEB87047E6 ++:1003D000524A01681160121D416811604F4A8168DC ++:1003E00010321160111DC068086070472DE9F0419E ++:1003F00017460D460646002406E03046296800F000 ++:10040000A7F8641C2D1D361DBC42F6D3BDE8F08153 ++:1004100070B50C4605464FF4806608E0284600F0AB ++:1004200084F8B44205D3A4F5806405F58055002C0A ++:10043000F4D170BD4168044609B1012500E00025F2 ++:100440004FF010267069A268920000F0BDF9C8B1A3 ++:10045000204600F01AF89DB17669A56864684FF4EB ++:10046000002084420AD2854208D229463046FFF74E ++:10047000CFFF2A4621463046FFF7B8FFFFF79FFF20 ++:10048000FFF791FFFFF746FEF8E72DE9FF414FF038 ++:100490001024616980680D0B01EB800000F6FF708D ++:1004A000010B0020009001900290024603906846E4 ++:1004B00001230BE0560902F01F0C50F8267003FAD6 ++:1004C0000CFC47EA0C0740F82670521CAA42F1D3F4 ++:1004D0000AE04A0901F01F0650F8225003FA06F616 ++:1004E000354340F82250491C8029F2D3A169090BF9 ++:1004F0004A0901F01F0150F822408B409C4340F80C ++:100500002240FFF765FFBDE8FF8100005C090000A5 ++:10051000000000200CED00E00400FA050006004099 ++:10052000144801680029FCD07047134A0221116069 ++:1005300010490B68002BFCD00F4B1B1D186008687E ++:100540000028FCD00020106008680028FCD070470C ++:10055000094B10B501221A60064A1468002CFCD021 ++:10056000016010680028FCD0002018601068002886 ++:10057000FCD010BD00E4014004E5014008208F4993 ++:1005800009680958084710208C4909680958084724 ++:1005900014208A49096809580847182087490968BA ++:1005A0000958084730208549096809580847382004 ++:1005B00082490968095808473C2080490968095858 ++:1005C000084740207D4909680958084744207B496D ++:1005D00009680958084748207849096809580847B0 ++:1005E0004C20764909680958084750207349096822 ++:1005F0000958084754207149096809580847582084 ++:100600006E490968095808475C206C49096809580F ++:100610000847602069490968095808476420674904 ++:100620000968095808476820644909680958084753 ++:100630006C20624909680958084770205F490968B9 ++:100640000958084774205D49096809580847782007 ++:100650005A490968095808477C20584909680958C7 ++:10066000084780205549096809580847842053499C ++:1006700009680958084788205049096809580847F7 ++:100680008C204E4909680958084790204B49096851 ++:10069000095808479420494909680958084798208B ++:1006A00046490968095808479C204449096809587F ++:1006B0000847A0204149096809580847A4203F4934 ++:1006C000096809580847A8203C490968095808479B ++:1006D000AC203A49096809580847B02037490968E9 ++:1006E00009580847B4203549096809580847B8200F ++:1006F0003249096809580847BC2030490968095837 ++:100700000847C0202D49096809580847C4202B49CB ++:10071000096809580847C82028490968095808473E ++:10072000CC202649096809580847D0202349096880 ++:1007300009580847D4202149096809580847D82092 ++:100740001E49096809580847DC201C4909680958EE ++:100750000847E0201949096809580847E420174963 ++:10076000096809580847E8201449096809580847E2 ++:10077000EC201249096809580847F0200F49096818 ++:1007800009580847F4200D49096809580847F82016 ++:100790000A49096809580847FC20084909680958A6 ++:1007A00008475FF480700549096809580847000048 ++:1007B00003480449024A034B704700000000002030 ++:1007C000680900006809000040EA010310B59B07B2 ++:1007D0000FD1042A0DD310C808C9121F9C42F8D0AB ++:1007E00020BA19BA884201D9012010BD4FF0FF305C ++:1007F00010BD1AB1D30703D0521C07E0002010BD72 ++:1008000010F8013B11F8014B1B1B07D110F8013BFD ++:1008100011F8014B1B1B01D1921EF1D1184610BDDE ++:1008200002F0FF0343EA032242EA024200F005B865 ++:100830007047704770474FF000020429C0F01280E3 ++:1008400010F0030C00F01B80CCF1040CBCF1020F83 ++:1008500018BF00F8012BA8BF20F8022BA1EB0C0158 ++:1008600000F00DB85FEAC17C24BF00F8012B00F84E ++:10087000012B48BF00F8012B70474FF0000200B574 ++:10088000134694469646203922BFA0E80C50A0E8B3 ++:100890000C50B1F12001BFF4F7AF090728BFA0E861 ++:1008A0000C5048BF0CC05DF804EB890028BF40F82D ++:1008B000042B08BF704748BF20F8022B11F0804F6F ++:1008C00018BF00F8012B7047014B1B68DB68184705 ++:1008D0000000002009480A497047FFF7FBFFFFF7B7 ++:1008E00011FC00BD20BFFDE7064B1847064A10600B ++:1008F000016881F30888406800470000680900002B ++:10090000680900001F030000000000201EF0040F13 ++:100910000CBFEFF30881EFF3098188690238007892 ++:10092000182803D100E00000074A1047074A126860 ++:100930002C3212681047000000B5054B1B68054AB1 ++:100940009B58984700BD00000703000000000020EE ++:100950005809000004000000001000000000000022 ++:0809600000FFFFFF0090D0032F ++:10100000A8110020F5EA0100BD2F000067EA0100E9 ++:10101000BD2F0000BD2F0000BD2F0000000000000C ++:101020000000000000000000000000004DEB010087 ++:10103000BD2F000000000000BD2F0000BD2F0000EC ++:10104000B5EB0100BBEB0100BD2F0000BD2F000080 ++:10105000BD2F0000BD2F0000BD2F0000BD2F0000E0 ++:10106000C1EB0100BD2F0000BD2F0000C7EB010048 ++:10107000BD2F0000CDEB0100D3EB0100D9EB010047 ++:10108000BD2F0000BD2F0000BD2F0000BD2F0000B0 ++:10109000BD2F0000BD2F0000BD2F0000BD2F0000A0 ++:1010A000BD2F0000DFEB0100BD2F0000BD2F0000B1 ++:1010B000BD2F0000BD2F0000BD2F0000BD2F000080 ++:1010C000E5EB0100BD2F0000BD2F0000BD2F00008B ++:1010D000BD2F0000BD2F0000BD2F0000BD2F000060 ++:1010E000BD2F0000BD2F0000BD2F0000BD2F000050 ++:1010F000BD2F0000BD2F0000BD2F0000BD2F000040 ++:10110000BD2F0000BD2F000000F002F81DF0DFFC35 ++:101110000AA090E8000C82448344AAF10107DA4552 ++:1011200001D11DF0D4FCAFF2090EBAE80F0013F0A4 ++:10113000010F18BFFB1A43F001031847F8DE010046 ++:1011400018DF01000A444FF0000C10F8013B13F0C7 ++:10115000070408BF10F8014B1D1108BF10F8015B10 ++:10116000641E05D010F8016B641E01F8016BF9D103 ++:1011700013F0080F1EBF10F8014BAD1C0C1B09D15A ++:101180006D1E58BF01F801CBFAD505E014F8016BCC ++:1011900001F8016B6D1EF9D59142D6D3704700005E ++:1011A0000023002400250026103A28BF78C1FBD870 ++:1011B000520728BF30C148BF0B6070471FB500F011 ++:1011C0003DF88DE80F001FBD1EF0040F0CBFEFF3BC ++:1011D0000880EFF30980014A1047000011B80000B1 ++:1011E0008269034981614FF001001044704700009B ++:1011F000F511000001B41EB400B511F01DFF01B4DB ++:101200000198864601BC01B01EBD0000F0B4404606 ++:10121000494652465B460FB402A0013001B506486C ++:10122000004700BF01BC86460FBC804689469246F7 ++:101230009B46F0BC70470000091100001DF044BC43 ++:1012400070B51A4C054609202070A01C00F05FF80C ++:101250005920A08029462046BDE8704007F02CBBED ++:1012600007F035BB70B50C461149097829B1A0F1DA ++:101270006001562908D3012013E0602804D06928B2 ++:1012800002D043F201000CE020CC0A4E94E80E009C ++:1012900006EB8000A0F58050241FD0F8806E284611 ++:1012A000B047206070BD012070470000080000209A ++:1012B0001C00002014EC010010B5044600210120A0 ++:1012C00000F03DF800210B2000F039F8042119202E ++:1012D00000F035F804210D2000F031F804210E2033 ++:1012E00000F02DF804210F2000F029F80421C84354 ++:1012F00000F025F80621162000F021F8062115201F ++:1013000000F01DF82046FFF79BFF002010BDA5212F ++:1013100001807047FFF7A4BF11487047104870471D ++:10132000104A10B514680F4B0F4A08331A60FFF7C4 ++:1013300099FF0C48001D046010BD704770474907B5 ++:10134000090E002806DA00F00F0000F1E02080F816 ++:10135000141D704700F1E02080F800147047000071 ++:1013600003F90042100502400100000130B5FA4DBA ++:10137000044610280AD0112C06D02846122CC17819 ++:1013800006D0132C08D0FFDFEC7030BDFFDFFBE789 ++:101390001129F9D0FFDFF7E71129F5D0FFDFF3E7D7 ++:1013A0002DE9F04110F000FB044611F094FC201AE6 ++:1013B000C5B206200EF094FB044606200EF098FB02 ++:1013C000211AE54CE078132818D000200F180720C8 ++:1013D0000EF086FB064607200EF08AFB301A3918FD ++:1013E000E07812280CD0002001442078022809D08F ++:1013F00000200844281AC0B2BDE8F0810120E5E7CA ++:101400000120F1E70120F4E7D34810B5817900F11C ++:101410000700490805D00CF079FEBDE8104007F040 ++:10142000FFB80CF054FEF8E702210EF0B1BB2DE935 ++:10143000FC411D4690460E460746FFF7F5FF0400A7 ++:101440000AD02078222804D3A07FC0F34010A842FD ++:1014500005D10820BDE8FC8143F20200FAE7ADF8AF ++:1014600000703DB101208DF802008DF803608DF809 ++:10147000048002E000208DF8020068460DF015FCA3 ++:10148000A07F65F34510A0770020E3E730B5044660 ++:10149000A1F120000D460A284AD2DFE800F0050736 ++:1014A0000C1C2328353A3F44FFDF42E020782028F7 ++:1014B0003FD1FFDF3DE0A8480178032939D0C0784B ++:1014C000132836D02078242833D0252831D023285B ++:1014D0002FD0FFDF2DE0207822282AD0232828D8FB ++:1014E000FFDF26E02078222823D0FFDF21E02078CC ++:1014F00022281ED024281CD026281AD0272818D00D ++:10150000292816D0FFDF14E02078252811D0FFDF2E ++:101510000FE0207825280CD0FFDF0AE0207825286E ++:1015200007D0FFDF05E02078282802D0FFDF00E0A9 ++:10153000FFDF257030BD1FB504466A46002001F06C ++:101540005EFCB4B1BDF802204FF6FF700621824266 ++:1015500001D1ADF80210BDF80420824201D1ADF8EE ++:101560000410BDF80810814203D14FF44860ADF873 ++:10157000080068460DF067F807F052F804B010BD97 ++:1015800070B514460D46064611F0D6FF58B90DB198 ++:10159000A54201D90C2070BD002408E056F82400B3 ++:1015A00011F0CAFF08B1102070BD641CE4B2AC4257 ++:1015B000F4D3002070BDF0B50024059D10B1A94200 ++:1015C00003D850E009B90020F0BD0920F0BD055D49 ++:1015D000D5B1071997F801C0BCF1150F2DD03BDC30 ++:1015E000BCF1150F38D2DFE80CF037122020262688 ++:1015F00028282F2F373737373737373737372000F7 ++:10160000025D22BB641CE4B28C42F9D3DBE7022DFD ++:10161000DBD1BD781D70072D01D26D0701D40A20E2 ++:10162000F0BD157845F0010515E0EF43FF0707E031 ++:10163000012D07D010E00620F0BD2F07A7F180573D ++:10164000002FF5D03046F0BD1578AF0701D50B203F ++:10165000F0BD45F002051570055D641C2C44E4B234 ++:101660008C4202D9B1E74FF448568C42AFD3AAE777 ++:1016700010B50278540809D0012243F20223012C4C ++:1016800007D0022C0DD0032C13D10FE000200870DE ++:1016900005E080790324B4EB901F0AD10A70002082 ++:1016A00010BD8079B2EB901F03D1F7E780798009F4 ++:1016B000F4D0184610BD284A117C39B1517C02295A ++:1016C00008D0032908D043F2022070470146901D3C ++:1016D00001F002BC032100E00121017000207047ED ++:1016E00038B50C460546694601F0F6FB00280DD1D9 ++:1016F0009DF80010207861F34700207055F8010F25 ++:10170000C4F80100A888A4F80500002038BD38B549 ++:101710001378C0B1022816D010A46D462468009436 ++:101720004C7905EB9414247864F347031370032871 ++:101730000ED003F0FE0010700868C2F8010088881F ++:10174000A2F8050038BD23F0FE0313700228EED185 ++:10175000D8B240F00100EEE7C80100200302FF010B ++:1017600038B50C460978222901D2082038BDADF8D9 ++:1017700000008DF8022068460CF010FD06F050FFC6 ++:10178000050003D121212046FFF780FE284638BD01 ++:101790001CB500208DF80000CDF80100ADF8050063 ++:1017A000FE48007C022801D0012000E000208DF8D6 ++:1017B000070068460CF030FE002800D0FFDF1CBD9B ++:1017C0002DE9FF470220F54E8DF804000027B08A6E ++:1017D000ADF80600B84643F202094CE001A80EF04D ++:1017E0003EF9050006D0B08AA8B3A6F81480ADF87B ++:1017F00006803EE0039CA07F01072DD504F1240064 ++:101800000090A28EBDF80800214604F1360301F0D5 ++:101810007DFF050005D04D452AD0112D3CD0FFDFBE ++:101820003AE0A07F20F00800A077E07F810861F314 ++:101830000000C10861F34100E07794F8210000F056 ++:101840001F0084F820002078282826D1292120464E ++:10185000FFF71CFE21E014E040070AD5BDF80800A0 ++:1018600004F10E0101F050FB05000DD04D4510D1E3 ++:1018700000257F1CFFB202200EF032F9401CB84256 ++:10188000ACD8052D12D008E0A07F20F00400A0778E ++:1018900003E0112D00D0FFDF0025BDF80600B08267 ++:1018A000052D05D0284604B0BDE8F087A6F81480C1 ++:1018B0000020F8E770B50646FFF7B6FD054607F0CD ++:1018C00079F8040000D1FFDF6680207820F00F0057 ++:1018D000801C20F0F000203020700620207295F847 ++:1018E0003E006072BDE8704007F067B82DE9F04730 ++:1018F00086B0040000D1FFDF2078A84E20F00F0052 ++:10190000801C20F0F0007030207060680178091FA2 ++:10191000182931D2DFE801F0FD30303053FC300CB3 ++:10192000FCFC40FD3030FD76FDFD3030FDFDFBFA66 ++:1019300086883046FFF778FD0546304608F0E0FB24 ++:10194000E0B16068807985F83E0021212846FFF7E4 ++:101950009DFD304603F0CBFF304605F037F93146A8 ++:10196000022011F09DFDA87F20F01000A877FFF75E ++:1019700027FF002800D0FFDF06B095E7207820F091 ++:10198000F000203020700620207266806068807928 ++:10199000607207F012F8D8E785882846FFF744FD03 ++:1019A00000B9FFDF60688078012800D0FFDF606841 ++:1019B000817906B02846BDE8F04708F07DBF8688EB ++:1019C0003046FFF731FD050000D1FFDF06F0F5FFDF ++:1019D00060683146C08828816068008968816068D5 ++:1019E0004089A881022011F05BFD0020A875A87F26 ++:1019F00000F003000228BFD1FFF7E2FE0028BBD0B1 ++:101A0000FFDFB9E780783C2803D0002502280AD000 ++:101A100000E00125002720B13C2802D0022800D098 ++:101A2000FFDF17B1B3E00127F5E706F0C6FF1DB1F0 ++:101A3000B07801F022FA9CE06568B5F804A0A879B6 ++:101A4000AD1C012806D03079814606F055FD07000F ++:101A500003D101E0B078F7E7FFDF00220221504612 ++:101A60000EF08DF8040000D1FFDF22212046FFF7A1 ++:101A70000DFD2879012800D00220A17F804668F35F ++:101A80000101A177288B2081688B6081A88BA081C0 ++:101A900084F822908DF80880B8680090F86801906A ++:101AA0006A46032150460EF06AF800B9FFDFB88895 ++:101AB000ADF81000B8788DF8120004AA0521504640 ++:101AC0000EF05DF800B9FFDFB888ADF80C00F878CB ++:101AD0008DF80E0003AA042150460EF050F800B90C ++:101AE000FFDF062105F1120001F02CFA28B3687916 ++:101AF000800700D5FFDF6979E07D61F34700E0757D ++:101B0000D5F80600A0616889A08303E05CE055E099 ++:101B10004EE060E0062105F10C0001F013FAB0B1CF ++:101B2000B0794108607861F347006070D6F807002B ++:101B3000C4F80200B6F80B0012E0E07D20F0FE00D1 ++:101B4000801CE075D5F81200A061E88ADCE76078B7 ++:101B500020F0FE00801C6070E868C4F80200288A4B ++:101B6000E080B8F1010F04D0B8F1020F0FD0FFDF11 ++:101B700002E73078032800D0FFDF0021084611F08B ++:101B80008FFC06B00120BDE8F04701F045B9F078C0 ++:101B9000132800D0FFDF0021062001E0C80100204B ++:101BA00011F07EFC06B01120BDE8F047FFF7DEBB68 ++:101BB00006B02046BDE8F04702F030B806F0FDFE62 ++:101BC000B07C40F0020004E006F0F7FEB07C40F08C ++:101BD0000400B074D0E606B0BDE8F04706F0EDBEF4 ++:101BE0002DE9F04705460078914600270209FB4899 ++:101BF0000C463E46012A6DD000234FF6FF71022AA3 ++:101C000069D0072A09D00A2A71D0FFDFA9F800603D ++:101C10000CB127806680002046E6D5F804C09CF809 ++:101C20000060142E7DD010DC04F1080204F11808C5 ++:101C30000F2E21D004DC042E5AD0082E57D10DE0EF ++:101C4000122E6FD0132EF9D11FE0153E072E4ED263 ++:101C5000DFE806F0C14D4D099FEAB00012271026BB ++:101C6000BCF8040014E11C27092694B3BCF8020058 ++:101C7000A080686800795AE11B2709264CB303202D ++:101C8000207268684088A080C0E79CF802003C2869 ++:101C900027D0102718260CF1020CD4B1BCF8020092 ++:101CA000A080BCF818006082BCF818002082BCF844 ++:101CB0001A00A082BCF81C00E0829CF805000CF120 ++:101CC0000601FFF724FD9CF8040028B10120E07311 ++:101CD0009CE703E0BFE0DFE00220F8E7A9F800603E ++:101CE00099E71B270926002CF8D023728EE720E104 ++:101CF0001D273726002CF1D0A18069680879491D7D ++:101D0000FFF705FD686890F82B00A0756868C0783B ++:101D10000428E07D16D020F00100E0756968C978DC ++:101D200001E06DE011E061F34200E07569681F2297 ++:101D3000C97A61F3C700E075696840460C311CF050 ++:101D4000C4FD63E740F00100E7E71D273726002CBC ++:101D5000C4D0A1806868411D0079FFF7D8FC69688C ++:101D600004F10F0201F10C00CB7A01461846FFF78F ++:101D7000CEFC6868807CA0756868C178E07D61F3FE ++:101D8000420020F0F900E0751F2140461CF03EFEA5 ++:101D90003CE720271026002CA0D0A180686804F121 ++:101DA0000902407A20726968CB1C88781946FFF7CF ++:101DB000AEFC2BE721270A26002C8FD0BCF802109E ++:101DC000A180696809792172696849796172817CA9 ++:101DD00021F0040157E022270B26002C84D0BCF808 ++:101DE0000400A0806868807820726868807901F0BB ++:101DF000B8F860726868C07901F0B3F8A07205E7BE ++:101E000024271026002CA3D0BCF80200A08068680C ++:101E1000007920816868007A60816868C088A08144 ++:101E200068684089E081F1E623271026002C8FD0D6 ++:101E3000BCF80210A1806968898821816968C98815 ++:101E4000618169680989A18169684989E181817C29 ++:101E500021F0020117E0297A012903D0022914D0C8 ++:101E6000FFDFD3E61F271026002C95D06988A180BC ++:101E7000A9892181E9896181298AA181698AE18110 ++:101E8000817C21F001018174C0E612276888102648 ++:101E9000214601F044F8B9E6287A072850D2DFE855 ++:101EA00000F0373D3D484848040011270926002C22 ++:101EB00094D0B5F802804046FFF7B6FA90F822A019 ++:101EC000A4F80480687A2072042140460DF072FE66 ++:101ED000052140460DF06EFE002140460DF06AFEE1 ++:101EE000012140460DF066FE032140460DF062FEE2 ++:101EF000022140460DF05EFE062140460DF05AFEDE ++:101F0000072140460DF056FE504600F0B6FF7DE634 ++:101F10001B270926002C8AD0A180E6E61B2709266C ++:101F2000002C84D0A180287A012800D002202072C1 ++:101F30006CE64A4621462846BDE8F04701F0F8BF66 ++:101F4000FFDF63E670B5254DE878132801D008203F ++:101F500070BD0CF0B3FC06F063FB040002D12879DD ++:101F600000F08BFF0021062011F09AFA204670BD88 ++:101F70001A4810B5C078122801D0082010BD0021E1 ++:101F800008460CF0FAFA06F04BFB0028F6D10021C7 ++:101F9000062011F085FA1120FFF7E8F9002010BDA6 ++:101FA00010B50E4C207801280ED000200CF0A1FDB9 ++:101FB00006F036FB002808D10021084611F070FA1F ++:101FC0002078032802D004E0082010BDA07800F09B ++:101FD00054FF012000F020FF002010BDC8010020A8 ++:101FE00070B5002538B1022817D0062836D007284A ++:101FF00000D0FFDF70BDFFF7D3FF0028FAD106F055 ++:10200000D9FC0028F6D0017821F00F01891C21F0BD ++:10201000F0012031017005723FE08EB23046FFF7CB ++:1020200003FA040000D1FFDF20782128E2D006F077 ++:10203000C1FC60B1017821F00F01891C21F0F00191 ++:1020400010310170022101724680A57525E02146FC ++:102050003046BDE870401322FFF782BBFE48C478CB ++:10206000122C03D0132C04D0FFDF70BDFFF780FFCC ++:1020700001E0FFF767FF0028F7D106F09BFC00287E ++:10208000F3D0017821F00F01891C21F0F0012031FB ++:102090000170122C05D002210172BDE8704006F0DB ++:1020A0008CBC0121F8E72DE9F04116460C00804672 ++:1020B00000D1FFDF307820F00F00801C20F0F0000E ++:1020C000103030702078012804D0022817D0FFDFAC ++:1020D000BDE8F0814046FFF7A7F9050000D1FFDF1A ++:1020E0000320A87506F069FC94E80F00083686E81E ++:1020F0000F00D948817C41F001018174E8E7404636 ++:10210000FFF792F9050000D1FFDFA1884FF6FF70BD ++:102110000027814202D1E288824203D0814201D16C ++:10212000E08840B106F049FC94E80F00083686E8E4 ++:102130000F00AF75CCE7A87D0128C9D17823002214 ++:102140004146022011F002F90220A875C0E738B517 ++:1021500005460C46084611F0EFF920BB203D072D3F ++:1021600051D2DFE805F0041C383D4349310000211D ++:10217000072011F06BF908B1112038BDA01C0CF03C ++:1021800010FC06F04DFA05003ED10022082311464E ++:10219000072011F0DBF8072836D0FFDF34E0606855 ++:1021A00011F00EFA08B1102038BD618820886A4607 ++:1021B0000CF0CBFD06F034FA050025D1606818B3A9 ++:1021C000BDF8001001801FE0A07800F00101208818 ++:1021D0000CF0F1FD14E0206802F057F9054613E019 ++:1021E000207800F001000CF058FE09E0207800F0A3 ++:1021F00001000BF05FFF03E0618820880CF02DFDEB ++:1022000006F00EFAEAE70725284638BD70B5054600 ++:102210000C46084611F0B6F908B1102070BD203DFB ++:10222000072D1BD2DFE805F0041818181A1A180039 ++:102230002088FFF7F9F820B10078222804D208207E ++:1022400070BD43F2020070BD2088A11C0CF003F8A1 ++:10225000BDE8704006F0E4B9062070BD072070BDEF ++:102260007D48801D704738B516217B481CF0ACFBBB ++:10227000012000F0D1FD1120FFF778F8764C684678 ++:10228000E11D06F02DFB9DF80010A07961F34700D9 ++:1022900020F00100A071002020744FF46170E081F3 ++:1022A00002206074FFF7B0F800B1FFDF00F0BEFE5F ++:1022B00001F07FFC38BD10B50C46402120461CF0D3 ++:1022C00083FBA07F20F00300A07720202070002057 ++:1022D000A07584F8230080E670477CB5054611F0B0 ++:1022E0002BF908B110207CBD5B4CA11DD4F8060071 ++:1022F0000090D4F80A0001902846FFF7F1F9002871 ++:10230000F1D1FFF781F80028EDD00099C4F806104C ++:10231000BDF8041061819DF8061021737CBD10B5D5 ++:10232000044611F02FF908B1102056E64A4922461A ++:102330008879C91D4008FFF7EAF900204DE6FEB58F ++:102340000D4604004FF0000711D00822FFF718F9DE ++:10235000002811D1002608E054F826006946FFF74E ++:1023600087F9002808D1761CF6B2AE42F4D30BF000 ++:102370000BFE10B143F20320FEBD374E7771FCB166 ++:1023800000271AE054F8270002A9FFF771F900B1FD ++:10239000FFDF9DF808008DF8000054F8270050F882 ++:1023A000011FCDF801108088ADF8050068460BF0DC ++:1023B00010FE00B1FFDF7F1CFFB2AF42E2D37571A8 ++:1023C0000020FEBD2DE9F0478AB01546894604007D ++:1023D0001DD00F4608222946FFF7D2F8002810D159 ++:1023E000002612E054F826006946103000F074FD13 ++:1023F000002806D13FB157F8260011F09DF810B122 ++:1024000010200AB008E4761CF6B2AE42EAD30026E9 ++:10241000A5F101081CE000BF06F1010A0AF0FF0760 ++:1024200012E000BF54F82600017C4A0854F8271037 ++:102430000B7CB2EB530F05D10622113011311CF089 ++:1024400018FA70B17F1CFFB2AF42EBD30AF0FF065F ++:102450004645E1DB4E4601E0C801002024B10120E1 ++:1024600003E043F20520CCE700200BF0D2FD10B9C9 ++:102470000BF0DBFD10B143F20420C2E764B3002788 ++:102480000DF1170826E000BF54F827006946103008 ++:1024900000F022FD00B1FFDF54F82700102250F8B1 ++:1024A000111FCDF801108088ADF8050054F82710F1 ++:1024B0000DF107001CF009FA96B156F8271010220A ++:1024C00040461CF002FA68460BF068FD00B1FFDFE1 ++:1024D0007F1CFFB2AF42D7D3FFF75AF9002090E735 ++:1024E000404601F0C6FFEEE730B585B0044611F076 ++:1024F00023F818B9606811F06CF810B1102005B01D ++:1025000030BD60884AF2B811884206D82078F74D6D ++:1025100028B1012806D0022804D00720EFE7FEF7F3 ++:1025200073FF17E06078022804D0032802D043F23A ++:102530000220E4E76874C1B200200090ADF8040006 ++:1025400002292BD0032926D0FFDF68460BF0DEFDE1 ++:1025500006F066F80028D2D1606801F07DFF20788F ++:1025600058B101208DF800000DF1010001F081FF4C ++:1025700068460CF07CFC00B1FFDF20782874FFF780 ++:1025800007F9608860B1E88180B20BF03AFD00B1D4 ++:10259000FFDF0020B3E78DF80500D6E74020FAE71B ++:1025A0004FF46170EFE710B5044610F0EBFF20B96F ++:1025B000606838B111F004F808B110200DE56068CA ++:1025C00001F057FFC948C1896180417C6170007C7E ++:1025D0002070002001E52DE9F04186B0054600207D ++:1025E0008DF80C008DF804008DF808008DF81000AF ++:1025F0001E4614468846284610F0EBFF18B92046C0 ++:1026000010F0E7FF10B1102006B061E555EA0400B4 ++:1026100018D01F2702AB03AA414628460097FEF7B1 ++:10262000CAFF0028F0D104AB01AA3146204600972A ++:10263000FEF7C1FF0028E7D19DF80400C00703D0D2 ++:102640000A20E1E70720DFE73DB1294640460CF0CC ++:102650003EFA05F0E5FF0028D6D13CB121463046D0 ++:102660000CF03EFA05F0DCFF0028CDD19F499DF823 ++:10267000080048700020C7E72DE9F04387B089467D ++:102680004FF000089AA104468DF81080D1E90001AE ++:10269000CDE90501204610F04FFF80B920780128D0 ++:1026A00003D1606810F048FF48B9904D287C50B1C4 ++:1026B000687C022807D1606810F08BFF18B11020E9 ++:1026C00007B0BDE8F0832878012801D00820F7E79B ++:1026D00007200DF00DFA18B9207878B101280DD037 ++:1026E000FEF75EFE60B1608943F6E172A0F1200161 ++:1026F000914221780CD3012904D0B2E01220DFE707 ++:102700001320DDE700287CD1A189002979D109E0D7 ++:10271000012907D06978C90704D0A189002970D0A0 ++:10272000B4296ED8217831B1012908D0022904D00A ++:10273000032966D10AE0002609E0022607E008B96D ++:10274000A08908B1042609E0012607E00326287CB9 ++:1027500050B1687C022807D1606828B104A960687C ++:10276000FEF786FF0028ABD1207A30B1012806D0D1 ++:10277000022806D0032874D105E0002704E00127D1 ++:1027800002E0022700E003270EB1022E0ED16FB146 ++:102790006879B0B36878800702D043F201208FE7F0 ++:1027A000022E03D1022F5CD0032F5AD0207808B11B ++:1027B000012806D1484600F043FB002880D185F867 ++:1027C00002906089ADF800006089ADF802008DF8D4 ++:1027D00004600DF10500FEF76EFF00B1FFDF9DF80C ++:1027E00010008DF806002078012806D0287C68B1FA ++:1027F000687C02280AD1606840B1606850F8011F07 ++:1028000000E02EE0CDF80710808802E04046CDF8C9 ++:102810000780ADF80B008DF80E70A07BC0F340026E ++:10282000014662F35F01C0F3800041EA800005A920 ++:10283000085C8DF80D00A0B168460CF017F905F0A2 ++:10284000EFFE0028ABD101200CF053F905F0E8FEB3 ++:102850000028A4D1052E0ED2DFE806F005050A0AED ++:10286000050007202CE7A87800F0FAFA032000E022 ++:10287000022000F0D1FA012E0AD0A08940B1002236 ++:1028800083001146104610F061FD08B1032017E7E0 ++:10289000002015E72DE9FC4180460E460325084639 ++:1028A00010F097FE00286DD14046FEF7BDFD0400F4 ++:1028B00005D02078222805D20820BDE8FC8143F20B ++:1028C0000200FAE7A07F00F003073EB1012F13D00A ++:1028D00000203146FEF72FFE0500EED1012F0DD06E ++:1028E000022F21D0FFDF2846E7E70000C8010020C3 ++:1028F00007060504030201000120EAE7A07D314636 ++:10290000022801D011B107E01120D6E7684600F097 ++:102910009AFC0028D1D16946404607F090FF050097 ++:10292000E1D10120A075DEE7A07D032803D1FE4898 ++:10293000807CC00701D02EB30EE026B1A07F4007F7 ++:102940001ED4002100E00121404607F098FF050059 ++:10295000C9D1A075002EC6D03146404600F0D4FA49 ++:1029600005461128BFD1A07F4107BCD4316844F887 ++:102970000E1F7168616040F0040020740025B2E70A ++:102980001125B0E7102098E770B50C460546FEF714 ++:102990004BFD010005D022462846BDE87040FEF7F9 ++:1029A000DFBE43F2020070BD10B50BF05CFBBDE86A ++:1029B000104005F035BE0123FEF739BD00231A464D ++:1029C0001946FEF734BD7CB5044610F0B5FD08B1DC ++:1029D00010207CBD628843F6FD73111F07209942C9 ++:1029E000F7D2A1880429F4D3B1F5804FF1D89142F0 ++:1029F000EFD8CD4DE878112801D008207CBDFEF736 ++:102A0000CFFCB0B32078810701D5697991B300F08C ++:102A100001008DF800006088ADF80200A088ADF8D4 ++:102A2000040020780222C0F3400102EA5000014372 ++:102A30008DF807100DF10600FEF73DFE00B1FFDF37 ++:102A400068460BF05EFD05F0EBFD0028D6D10021B5 ++:102A500001200BF092FD05F0E3FD0028CED1E088C7 ++:102A600000F044FA0400C9D11220FEF77FFC204692 ++:102A70007CBD00E001E01320FAE70720F8E72DE92C ++:102A8000F043DFF8A482074687B098F80300994620 ++:102A900015460C46122803D1FFF76AFA00281CD10C ++:102AA000204610F049FDB8B9284610F045FD98B908 ++:102AB0006088ADF80000A088ADF8020020784FF0E3 ++:102AC0000006C0F340008DF80400207880071ED473 ++:102AD000384610F031FD08B11020F1E53878400893 ++:102AE00008D0012809D0022807D0032805D043F2D6 ++:102AF0000220E5E58DF8056002E001208DF8050073 ++:102B000057F8010FCDF80600B888ADF80A0003A801 ++:102B1000FEF7D1FD08B10320D2E52888ADF80E00FC ++:102B20006888ADF81000A888ADF81200E888ADF804 ++:102B30001400ADF81660ADF8186068460BF0A8FDFB ++:102B4000B8B998F803004546112801D00820B7E528 ++:102B500006200CF0CDFF50B12078800701D56879B0 ++:102B600038B1FEF71DFC022805D21320A8E512207B ++:102B7000A6E50720A4E5484600F062F90028ACD19C ++:102B800085F8049068460BF0C0FD05F049FD00286B ++:102B9000A3D1287900F064F9E08800F0A7F90400D7 ++:102BA0009BD11320FEF7E2FB204689E570B5054670 ++:102BB0000C46084610F0E6FC08B1102070BD28460F ++:102BC000FEF732FC38B10178222902D3807F8006DB ++:102BD00004D4082070BD43F2020070BD214628468F ++:102BE0000CF097F8BDE8704005F01ABD38B5054601 ++:102BF0000C46084610F0A0FC08B1102038BD28464D ++:102C0000FEF712FC20B10078222804D2082038BD3B ++:102C100043F2020038BD4448807C400701D51120B2 ++:102C200038BD2078800802D16078800801D0072064 ++:102C300038BDADF8005020788DF8020060788DF82E ++:102C4000030068460BF04EFC05F0EAFC38BD2DE9A8 ++:102C5000F0418EB014460D460646FEF7E5FB070030 ++:102C600006D03878222806D208200EB0BDE8F081C0 ++:102C700043F20200F9E7284610F0ABFC30B94FF000 ++:102C800000084CB1204610F09BFC08B11020ECE786 ++:102C9000C4F80080A4F804802348807C800701D514 ++:102CA0001120E2E797F8220005F026FC8088011D3C ++:102CB000FB2901D2001D00E0FB20C0B26A46294674 ++:102CC00000F0E5F8ADF81060BDF80200ADF81200B4 ++:102CD000BDF80600ADF81400BDF80000ADF8160010 ++:102CE000BDF80400ADF8180007A904A80BF03FFBDD ++:102CF00000B1FFDFBDF81E00ADF80800BDF82000F0 ++:102D0000ADF80A00BDF82200BDF82410BDF800207F ++:102D10000844ADF80C0007201B2AA6D3BDF802100A ++:102D20001B29A2D3FB2A01E0C80100209DD8FB2962 ++:102D30009BD806278A4210D10121104600F056F890 ++:102D4000BDF80410884208D1BDF80200012100F04E ++:102D50004DF8BDF80610884201D0384685E7BDF829 ++:102D6000080028B9BDF80A1011B9BDF80C1029B334 ++:102D70005DB1298849B1698839B124B102982060D0 ++:102D8000BDF80C00A08013206FE7BDF80010BDF85F ++:102D90000A20081A80B2ADF80000BDF80210891AA6 ++:102DA000ADF80210012100F021F8ADF80400BDF8E3 ++:102DB0000200012100F01AF8ADF80600ADF8286015 ++:102DC000BDF80200ADF82A00BDF80600ADF82C00F1 ++:102DD000BDF80000ADF82E00BDF80400ADF83000DD ++:102DE0000AA80BF076FA05F01BFC3EE7022903D097 ++:102DF000C000703080B2704780003C30FAE710802D ++:102E00000888508048889080C88810818888D08041 ++:102E1000002050819081704730B5564D040008D095 ++:102E2000012C04D0022C06D0032C04D0FFDF2C7020 ++:102E300030BDFFDFFBE728780128F8D0FFDFF6E799 ++:102E400010B5044605F058FB30B1407830B120464B ++:102E500005F057FE002010BD072010BD122010BD48 ++:102E600010B505F049FB040000D1FFDF607800B920 ++:102E7000FFDF6078401E607010BD10B505F03CFBB0 ++:102E8000040000D1FFDF6078401C607010BD10B5F9 ++:102E9000144631B10A68226049686160218839B1FD ++:102EA00007E0208060800121FFF7A0FFA0800DE0F7 ++:102EB0002080618801B96080A08820B92088012124 ++:102EC000FFF794FFA080E088002804D160880121EA ++:102ED000FFF78CFFE08010BD0278520804D0012A71 ++:102EE00002D043F202207047FEF7C2BB10B548B1D2 ++:102EF000830000221146062010F028FA062801D08F ++:102F0000032010BD002010BD1FB56A46FFF777FFF4 ++:102F100068460BF0FCFC05F083FB04B010BD70B5F7 ++:102F20000C0006460DD0FEF77FFA050000D1FFDF4A ++:102F3000A68028892081288960816889A081A88944 ++:102F4000E08170BD10B500231A4603E0845C234382 ++:102F5000521CD2B28A42F9D30BB1002010BD01201D ++:102F600010BD00B5012803D0022801D0FFDF0020EA ++:102F700000BD0000C80100200A4810B504680949D6 ++:102F80000948083108600FF0FCFB0648001D04608A ++:102F900010BD0649002008604FF0E0210220C1F872 ++:102FA000800270471005024001000001FC1F004034 ++:102FB0000F4A12680D498A420CD118470C4A126810 ++:102FC0000A4B9A4206D101B510F02AF808F009FC24 ++:102FD000BDE80140074909680958084706480749FC ++:102FE000054A064B7047000000000000BEBAFECA4A ++:102FF000B000002004000020A8110020A81100202B ++:103000002CFFFFFFDBE5B15100300200A500FFFF00 ++:1030100084000000284F4C00DA0D499A2F95338424 ++:1030200077AC2F1307CD6F7D177A70DEFE48002135 ++:1030300001604160018170472DE9F743044692B079 ++:103040009146406810F0BCFA40B1606810F0C1FAD7 ++:1030500020B9607800F00300022801D0012000E0D0 ++:103060000020F14E3072484610F066FA18B1102078 ++:1030700015B0BDE8F08349460120FEF75CFA002850 ++:10308000F6D101258DF842504FF4C050ADF8400004 ++:10309000002210A9284604F061F80028E8D18DF834 ++:1030A00042504FF428504FF00008ADF8400047461A ++:1030B0001C216846CDF81C801BF0A8FC9DF81C0064 ++:1030C00008AA20F00F00401C20F0F00010308DF80E ++:1030D0001C0020788DF81D0061789DF81E0061F3BA ++:1030E000420040F001008DF81E009DF800000AA982 ++:1030F00040F002008DF800002089ADF83000ADF8F6 ++:103100003270608907AFADF834000B97606810AC7F ++:103110000E900A94684603F016FE0028A8D1BDF868 ++:10312000200030808DF8425042F60120ADF840007A ++:103130009DF81E0008AA20F00600801C20F0010067 ++:103140008DF81E000220ADF83000ADF8340013A851 ++:103150000E900AA9684603F0F6FD002888D1BDF854 ++:1031600020007080311D484600F033F9002887D1D7 ++:103170008DF8425042F6A620ADF840001C2168466A ++:10318000CDF81C801BF042FC9DF81C00ADF83450BB ++:1031900020F00F00401C20F0F00010308DF81C00D3 ++:1031A0009DF81D0008AA20F0FF008DF81D009DF875 ++:1031B0001E000AA920F0060040F00100801C8DF8D6 ++:1031C0001E009DF800008DF8445040F002008DF87C ++:1031D0000000CDE90A4711A80E90ADF830506846BE ++:1031E00003F0B1FD002899D1BDF82000F080002047 ++:1031F0003EE73EB504460820ADF80000204610F03A ++:103200009BF908B110203EBD21460120FEF793F93D ++:103210000028F8D12088ADF804006088ADF80600D9 ++:10322000A088ADF80800E088ADF80A007E4801AB40 ++:103230006A468088002104F08BF9BDF80010082947 ++:10324000E1D003203EBD1FB50446002002900820B7 ++:10325000ADF80800CDF80CD0204610F06DF910B193 ++:10326000102004B010BD704802AA81884FF6FF708C ++:1032700004F0B0FB0028F4D1BDF80810082901D0F3 ++:103280000320EEE7BDF800102180BDF80210618038 ++:10329000BDF80410A180BDF80610E180E1E701B59A ++:1032A00082B00220ADF800005F4802AB6A46408859 ++:1032B000002104F04DF9BDF80010022900D00320D0 ++:1032C0000EBD1CB5002100910221ADF80010019047 ++:1032D00010F058F908B110201CBD53486A464188C7 ++:1032E0004FF6FF7004F076FBBDF800100229F3D012 ++:1032F00003201CBDFEB54C4C06461546207A0F46F1 ++:10330000C00705D0084610F017F918B11020FEBD0F ++:103310000F20FEBDF82D01D90C20FEBD304610F067 ++:103320000BF918BB208801A903F053FA0028F4D147 ++:1033300030788DF80500208801A904F0E8F800280D ++:10334000EBD100909DF800009DF8051040F00200C0 ++:103350008DF80000090703D040F008008DF8000048 ++:103360002088694604F070F80028D6D1ADF80850DE ++:1033700020883B4602AA002104F0EAF8BDF80810B4 ++:10338000A942CAD00320FEBD7CB5054600200090AE ++:1033900001900888ADF800000C462846019510F011 ++:1033A0000FF918B9204610F0EDF808B110207CBDD7 ++:1033B00015B1BDF8000050B11B486A4601884FF6B0 ++:1033C000FF7004F007FBBDF8001021807CBD0C20CD ++:1033D0007CBD30B593B0044600200D46009014210A ++:1033E00001A81BF013FB1C2108A81BF00FFB9DF884 ++:1033F0000000CDF808D020F00F00401C20F0F000B5 ++:1034000010308DF800009DF8010020F0FF008DF8CD ++:1034100001009DF8200040F002008DF820000120FE ++:103420008DF8460002E00000DE01002042F6042094 ++:10343000ADF8440011A801902088ADF83C006088E8 ++:10344000ADF83E00A088ADF84000E088ADF842003D ++:103450009DF8020006AA20F00600801C20F0010062 ++:103460008DF802000820ADF80C00ADF810000FA890 ++:10347000059001A908A803F066FC002803D1BDF857 ++:1034800018002880002013B030BD000010B504469D ++:1034900010F052F808B1102010BD2078C0F30210CF ++:1034A000042807D86078072804D3A178102901D808 ++:1034B000814201D2072010BDE078410706D421796E ++:1034C0004A0703D4000701D4080701D5062010BD20 ++:1034D000002010BD10B513785C08C37F64F30003AF ++:1034E000C3771478A40864F34103C3771078C30941 ++:1034F000487863F34100487013781C090B7864F333 ++:1035000047130B701378DB0863F3000048705078A2 ++:10351000487110BD10B5C4780B7864F300030B70CC ++:10352000C478640864F341030B70C478A40864F39E ++:1035300082030B70C478E40864F3C3030B7003794F ++:10354000117863F30001117003795B0863F34101A3 ++:10355000117003799B0863F3820111700079C00830 ++:1035600060F3C301117010BD70B514460D460646D8 ++:1035700005F020FA80B10178182221F00F01891C92 ++:1035800021F0F001A03100F8081B21461BF0E2F900 ++:10359000BDE8704005F011BA29463046BDE87040DC ++:1035A0001322FEF7DDB82DE9F047064608A8894644 ++:1035B00090E830041F469046142128461BF026FA56 ++:1035C0000021CAF80010B8F1000F03D0B9F1000FC4 ++:1035D00003D114E03878C00711D020680FF0D2FF73 ++:1035E000C0BBB8F1000F07D12068123028602068F6 ++:1035F000143068602068A8602168CAF80010387824 ++:10360000800724D560680FF0DBFF18BBB9F1000F0D ++:1036100021D0FEF725FE0168C6F868118188A6F85A ++:103620006C11807986F86E0101F0FBFCF94FEF60B8 ++:10363000626862B196F8680106F2691140081032BA ++:10364000FEF765F81022394660681BF03EF900204D ++:10365000BDE8F08706E0606820B1E8606068C6F801 ++:103660006401F4E71020F3E730B5054608780C460E ++:1036700020F00F00401C20F0F001103121700020DC ++:10368000607095F8230030B104280FD0052811D0C0 ++:10369000062814D0FFDF20780121B1EB101F04D2DF ++:1036A00095F8200000F01F00607030BD21F0F000A0 ++:1036B000203002E021F0F00030302070EBE721F004 ++:1036C000F0004030F9E7F0B591B0022715460C46FE ++:1036D00006463A46ADF80870092103AB05F089FFAC ++:1036E0000490002810D004208DF804008DF801709B ++:1036F000E034099605948DF818500AA968460DF033 ++:1037000039FF00B1FFDF012011B0F0BD10B588B066 ++:103710000C460A99ADF80000CBB11868CDF802004C ++:10372000D3F80400CDF80600ADF80A20102203A853 ++:103730001BF0CBF868460BF061F904F071FF00282C ++:1037400003D1A17F41F01001A17708B010BD002086 ++:10375000CDF80200E6E72DE9F84F0646808A0D46CF ++:1037600080B28246FDF760FE04463078DFF8A4821E ++:1037700000274FF00509A8F120080F2870D2DFE8D4 ++:1037800000F06FF23708387D8CC8F1F0EFF35FF38B ++:10379000F300A07F00F00300022809D05FF00000D2 ++:1037A00080F0010150460CF0F3F9050003D101E06F ++:1037B0000120F5E7FFDF98F85C10C90702D0D8F8C0 ++:1037C00060000BE0032105F11D000FF090FBD5F820 ++:1037D0001D009149B0FBF1F201FB1200C5F81D007C ++:1037E00070686867B068A8672078252800D0FFDF78 ++:1037F000CAE0A07F00F00300022809D05FF00000BB ++:1038000080F0010150460CF0C3F9060003D101E03D ++:103810000120F5E7FFDF3078810702D521782529DF ++:1038200004D040F001003070BDE8F88F022028700D ++:10383000307F287106F11D002D36C5E90206F3E739 ++:10384000A07F00F00300022808D0002080F00101D2 ++:1038500050460CF09DF9040004D102E00120F5E788 ++:10386000A5E1FFDF2078C10604D5072028703D348C ++:103870006C60D9E740F008002070D5E7E07FC00613 ++:1038800000D5FFDF307CB28800F0010301B0504664 ++:10389000BDE8F04F092106F035BD04B9FFDF7168BE ++:1038A00021B1102204F124001BF00FF8282120463A ++:1038B000FDF7ECFDA07F00F0030002280ED104F11B ++:1038C0002400002300901A4621465046FFF71EFFB1 ++:1038D000112807D029212046FDF7D8FD307A84F839 ++:1038E0002000A1E7A07F000700D5FFDF14F81E0F1E ++:1038F00040F008002070E782A761E7616178084620 ++:1039000061F38200410861F3C3006070307AE070B7 ++:103910008AE7A07F00F00300022809D05FF00000D2 ++:1039200080F0010150460CF033F9040003D101E0AE ++:103930000120F5E7FFDF022104F185000FF0D7FA3F ++:103940000420287004F5B4706860B4F885002882FB ++:10395000304810387C346C61C5E9028064E703E0CC ++:1039600022E15BE02DE015E0A07F00F003000228DB ++:1039700007D0002080F0010150460CF009F918B979 ++:1039800001E00120F6E7FFDF324621465046BDE860 ++:10399000F84FE9E504B9FFDF20782128A1D9307973 ++:1039A000012803D1E07F40F01000E0773246214645 ++:1039B0005046FFF7D9FD2046BDE8F84F2321FDF71B ++:1039C00065BD3279AA8005F108030921504605F04A ++:1039D00010FEE86010B185F8009025E7A07F00F0A8 ++:1039E0000300022808D0002080F0010150460CF0AE ++:1039F000CFF8040003D101E00120F5E7FFDF04F177 ++:103A0000620102231022081F0BF049FF0770317971 ++:103A1000417009E70802002040420F00A07F00F03B ++:103A20000300022808D0002080F0010150460CF06D ++:103A3000AFF8050003D101E00120F5E7FFDF95F8BD ++:103A4000840000F00300012878D1A07F00F0030774 ++:103A5000E07FC0F3400616B1022F04D132E095F8A2 ++:103A6000A000C0072AD0D5F8601119B395F88320BB ++:103A7000087C62F387000874E27FD5F8601162F376 ++:103A800041000874D5F8601166F300000874AEB107 ++:103A9000D5F86001102204F1240188351AF015FFD1 ++:103AA000287E40F001002876287820F0010005F8F3 ++:103AB000880900E016B1022F04D02CE095F88800A8 ++:103AC000C00726D0D5F85C1119B395F88320087C7F ++:103AD00062F387000874E27FD5F85C1162F341005D ++:103AE0000874D5F85C1166F3000008748EB1D5F83F ++:103AF0005C01102204F1240188351AF0E6FE2878D2 ++:103B000040F0010005F8180B287820F0010005F8B6 ++:103B1000A009022F44D0002000EB400005EBC000BC ++:103B200090F88800800709D595F87C00D5F86421C5 ++:103B3000400805F17D011032FDF7E9FD8DF8009098 ++:103B400095F884006A4600F003008DF8010095F8AE ++:103B500088108DF8021095F8A0008DF8030021461A ++:103B6000504601F047FA2078252805D0212807D0B3 ++:103B7000FFDF2078222803D922212046FDF786FC8A ++:103B8000A07F00F0030002280CD0002080F001018B ++:103B900050460CF00FF800283FF451AEFFDF43E62B ++:103BA0000120B9E70120F1E7706847703CE6FFDFCC ++:103BB0003AE670B5FE4C002584F85C5025660DF0A1 ++:103BC000A6FC04F11001204604F0B0FE84F8305049 ++:103BD00070BD70B50D46FDF727FC040000D1FFDF76 ++:103BE0004FF4B87128461AF011FF04F1240028613F ++:103BF000A07F00F00300022808D0012105F1E000B9 ++:103C00000DF086FC002800D0FFDF70BD0221F5E733 ++:103C10000A46014602F1E0000DF09ABC70B5054677 ++:103C2000406886B00178092906D00C2933D00D29C7 ++:103C30002FD0FFDF06B070BD46883046FDF7F4FB9D ++:103C4000040000D1FFDF20782128F3D028281BD1E1 ++:103C5000686802210C3001F0C2F9A8B16868082137 ++:103C6000001D01F0BCF978B104F1240130460AF0DE ++:103C7000B9FF04F0D5FC00B1FFDF06B02046BDE877 ++:103C800070402921FDF702BC06B0BDE8704004F089 ++:103C900094BE01218171686886883046FDF7C4FBB7 ++:103CA000040000D1FFDFA07F00F00301022902D150 ++:103CB00020F01000A077207821280AD06868817948 ++:103CC00009B1807880B1A07F00F00300022862D0A3 ++:103CD000FFDFA07F00F003000228ABD1FDF770FDED ++:103CE0000028A7D0FFDFA5E704F067FEE07FC1074B ++:103CF00029D0800705D594F8200000F01F00102877 ++:103D00001FD0052084F82300207829281DD02428DE ++:103D1000DFD1314605200FF0C3FB22212046FDF7FD ++:103D2000B5FBA07F00F00300022832D05FF0000056 ++:103D300080F0010130460BF03DFF0028C9D0FFDFC5 ++:103D4000C7E70620DEE70420DCE7A07F00F00300E1 ++:103D5000022809D05FF0000080F0010130460BF02E ++:103D600017FF050003D101E00120F5E7FFDF252162 ++:103D70002046FDF78BFB03208DF80000694605F116 ++:103D8000E0000DF0DCFB0228A3D00028A1D0FFDF6B ++:103D90009FE70120CCE704F010FE9AE72DE9F043FD ++:103DA00087B09946164688460746FDF73DFB040056 ++:103DB0004BD02078222848D3232846D0E07FC00665 ++:103DC00043D4A07F00F00300022809D05FF0000078 ++:103DD00080F0010138460BF0DBFE050002D00CE05C ++:103DE0000120F5E7A07F00F00300022805D00121A3 ++:103DF000002238460BF0C3FE05466946284601F00E ++:103E000020F9009800B9FFDF45B10098E035056161 ++:103E10002078222806D0242804D007E0009900202A ++:103E2000086103E025212046FDF730FB00980121C1 ++:103E300041704762868001A9C0E902890DF09AFBB2 ++:103E4000022802D0002800D0FFDF07B0BDE8F083D1 ++:103E500070B586B00546FDF7E7FA017822291ED92C ++:103E6000807F00F00300022808D0002080F00101CC ++:103E700028460BF08DFE04002FD101E00120F5E76C ++:103E8000FFDF2AE0B4F85E0004F1620630440178F6 ++:103E9000427829B121462846FFF715FCB0B9C9E69A ++:103EA000ADF804200921284602AB05F0A2FB0390DF ++:103EB0000028F4D005208DF80000694604F1E000E8 ++:103EC0000DF03DFB022801D000B1FFDF02231022DC ++:103ED000314604F15E000BF018FDB4F860000028D4 ++:103EE000D0D1A7E610B586B00446FDF79DFA01785B ++:103EF00022291BD9807F00F00300022808D000206F ++:103F000080F0010120460BF043FE040003D101E0E4 ++:103F10000120F5E7FFDF06208DF80000694604F177 ++:103F2000E0000DF00CFB002800D0FFDF06B010BD54 ++:103F30002DE9F05F05460C46002700789046010900 ++:103F40003E4604F1080BBA4602297DD0072902D06B ++:103F50000A2909D146E068680178092905D00C29A9 ++:103F600030D00D292ED0FFDFBCE114271C26002CF9 ++:103F70006BD04088A080FDF757FA5FEA000900D1B6 ++:103F8000FFDF99F817005A46400809F11801FDF7BC ++:103F9000BEFB68688089208269684868C4F812009E ++:103FA0008868C4F81600A07E20F0060002E0000039 ++:103FB000E801002040F00100A07699F81E0040F0D2 ++:103FC00040014DE01A270A26002CD1D08088A0801D ++:103FD000FDF72AFA050000D1FFDF59462846FFF712 ++:103FE00043FB7FE10CB1A88BA080287A0B287DD001 ++:103FF00006DC01287BD0022808D0032804D135E054 ++:104000000D2875D00E2874D0FFDF6BE11E2709261E ++:10401000002CADD0A088FDF707FA5FEA000900D1B7 ++:10402000FFDF287B00F003000128207A1BD020F05E ++:1040300001002072297B890861F341002072297BED ++:10404000C90861F3820001E041E1F2E02072297BBE ++:10405000090961F3C300207299F81E0040F0800145 ++:1040600089F81E103EE140F00100E2E713270D261B ++:10407000002CAAD0A088FDF7D7F98146807F00F0F8 ++:104080000300022808D0002080F00101A0880BF076 ++:104090007FFD050003D101E00120F5E7FFDF99F87E ++:1040A0001E0000F00302022A50D0686F817801F0F0 ++:1040B00003010129217A4BD021F00101217283787B ++:1040C0009B0863F3410121728378DB0863F382016B ++:1040D000217283781B0963F3C3012172037863F3B0 ++:1040E00006112172437863F3C71103E061E0A9E090 ++:1040F00090E0A1E0217284F809A0C178A172022A9F ++:1041000029D00279E17A62F30001E1720279520862 ++:1041100062F34101E1720279920862F38201E17275 ++:104120000279D20862F3C301E1724279217B62F322 ++:10413000000121734279520862F3410121734279EF ++:10414000920862F382012173407928E0A86FADE7FD ++:1041500041F00101B2E74279E17A62F30001E172D4 ++:104160004279520862F34101E1724279920862F3A6 ++:104170008201E1724279D20862F3C301E1720279ED ++:10418000217B62F3000121730279520862F341013D ++:1041900021730279920862F3820121730079C008C9 ++:1041A00060F3C301217399F80000232831D9262137 ++:1041B00040E018271026E4B3A088FDF735F98346C0 ++:1041C000807F00F00300022809D0002080F0010168 ++:1041D000A0880BF0DDFC5FEA000903D101E00120BB ++:1041E000F4E7FFDFE868A06099F8000040F0040100 ++:1041F00089F8001099F80100800708D50120207384 ++:104200009BF8000023286DD92721584651E084F8F7 ++:104210000CA067E015270F265CB1A088FDF704F914 ++:10422000814606225946E86809F0A8FC0120A073DF ++:10423000A2E041E048463CE016270926E4B3287B8B ++:1042400020724FE0287B19270E26ACB3C4F808A0D3 ++:10425000A4F80CA0012807D0022805D0032805D017 ++:10426000042803D0FFDF0DE0207207E0697B0428FB ++:1042700001F00F0141F0800121721ED0607A20F020 ++:1042800003006072A088FDF7CFF80546007821286A ++:1042900028D0232800D0FFDFA87F00F003000228E9 ++:1042A00013D0002080F00101A0880BF083FC2221B4 ++:1042B0002846FDF7EBF815E004E0607A20F00300F3 ++:1042C000401CDEE7A8F8006011E00120EAE70CB12D ++:1042D0006888A080287A03282ED004280AD00528D0 ++:1042E00050D0FFDFA8F800600CB127806680002066 ++:1042F000BDE8F09F15270F26002CE3D0A088FDF71E ++:1043000093F8807F00F00300022809D05FF00000DE ++:1043100080F00101A0880BF03BFC050003D101E017 ++:104320000120F5E7FFDFD5F81D000622594609F008 ++:1043300025FC84F80EA0D5E717270926002CC1D04C ++:10434000A088FDF771F88146807F00F00300022805 ++:1043500008D0002080F00101A0880BF019FC0500B6 ++:1043600003D101E00120F5E7FFDF6878800701D580 ++:10437000022000E00120207299F800002328B1D922 ++:10438000272157E719270E26002C9BD0A088FDF780 ++:104390004BF85FEA000900D1FFDFC4F808A0A4F8D9 ++:1043A0000CA084F808A0A07A40F00300A07299F84D ++:1043B0001F1061F38200A07299F81F10C1F3400230 ++:1043C000114205D099F8201001F01F0110292CD0BE ++:1043D00020F00800A07299F81F004108607A61F38C ++:1043E000C3006072697A01F003010129A3D140F092 ++:1043F0000400607299F81E0000F003000228E87AB9 ++:1044000016D0217B60F300012173AA7A607B62F3EE ++:1044100000006073EA7A520862F341012173A97ABD ++:10442000490861F3410060735CE740F00800D1E7A0 ++:10443000617B60F300016173AA7A207B62F3000064 ++:104440002073EA7A520862F341016173A97A49083C ++:1044500061F34100207345E710B5FE4C30B10146D1 ++:10446000102204F120001AF030FA012084F8300004 ++:1044700010BD10B5044600F0D4FDF64920461022C8 ++:10448000BDE8104020311AF020BA70B5F14D060099 ++:104490004FF0000412D00FF04FF808B110240BE0D9 ++:1044A0000621304609F051FB411C04D0286601204A ++:1044B00085F85C0000E00724204670BD0020F7E787 ++:1044C000007810F00F0204D0012A05D0022A0CD186 ++:1044D00010E0000909D10AE00009012807D00228EC ++:1044E00005D0032803D0042801D0072070470870A6 ++:1044F000002070470620704705282AD2DFE800F028 ++:1045000003070F171F00087820F0FF001EE008784F ++:1045100020F00F00401C20F0F000103016E008786A ++:1045200020F00F00401C20F0F00020300EE0087852 ++:1045300020F00F00401C20F0F000303006E008783A ++:1045400020F00F00401C20F0F000403008700020E8 ++:104550007047072070472DE9F041804688B00D462E ++:10456000002708460FF035F8A8B94046FCF75CFF75 ++:10457000040003D02078222815D104E043F2020081 ++:1045800008B0BDE8F08145B9A07F010603D500F071 ++:104590000300022801D01020F2E7A07FC10601D459 ++:1045A000010702D50DB10820EAE7E17FC90601D570 ++:1045B0000D20E5E700F00300022805D125B12846CB ++:1045C000FEF764FF0700DBD1A07F00F003000228A4 ++:1045D00008D0002080F0010140460BF0D9FA060017 ++:1045E00002D00FE00120F5E7A07F00F003000228D1 ++:1045F0000ED0002080F00101002240460BF0BFFAEF ++:10460000060007D0A07F00F00300022804D009E0D4 ++:104610000120EFE70420B3E725B12A4631462046C2 ++:10462000FEF758FF6946304600F00BFD009800B9D0 ++:10463000FFDF0099022006F1E0024870C1F82480F3 ++:104640004A6100220A81A27F02F00302022A1CD0E2 ++:1046500001200871287800F00102087E62F3010051 ++:1046600008762A78520862F3820008762A7892083F ++:1046700062F3C30008762A78D20862F30410087641 ++:1046800024212046FCF702FF33E035B30871301DCA ++:1046900088613078400908777078C0F34000487727 ++:1046A000287800F00102887F62F301008877E27FBA ++:1046B00062F382008877E27F520862F3C300887752 ++:1046C000727862F304108877A878C87701F1210224 ++:1046D00028462031FEF71EFF03E003200871052065 ++:1046E000087625212046FCF7D1FEA07F20F080002F ++:1046F000A07701A900980CF03DFF022801D000B17D ++:10470000FFDF38463CE72DE9FF4F534A0D4699B08D ++:104710009A4607CA0BAB002783E807001998FCF7F5 ++:1047200083FE060006D03078262806D008201DB06B ++:10473000BDE8F08F43F20200F9E7B07F00F0030913 ++:10474000B9F1020F03D00020284302D006E0012077 ++:10475000FAE71B98FEF79AFE0028E8D1B07F00F038 ++:104760000300022801D11B9979BB022808D0002040 ++:1047700080F0010119980BF00BFA040003D101E05D ++:104780000120F5E7FFDF852D28D007DCF5B1812D6D ++:104790001ED0822D1ED0832D08D11DE0862D1FD066 ++:1047A000882D1FD0892D1FD08A2D1FD00F2020715A ++:1047B0000F281DD004F0FEF8E0B101208DF8400074 ++:1047C000201D11902079B8B165E111E00020EEE7DD ++:1047D0000120ECE70220EAE70320E8E70520E6E70E ++:1047E0000620E4E70820E2E70920E0E70A20DEE708 ++:1047F00007209CE711209AE7B9F1020F03D0A56FBB ++:1048000003D1A06F02E0656FFAE7606F804632D097 ++:104810004FF0010000904FF0020001902146304619 ++:104820001B9AFEF757FE1B98007800F00101A8784C ++:1048300061F30100A870F17F61F38200A870F17F3D ++:10484000490861F3C300A870617861F30410A8708F ++:10485000207803E0E801002068ED0100400928709D ++:104860006078C0F3400068701B988078E870002082 ++:104870006871287103E00220009001200190A8785F ++:1048800098F80210C0F3C000C1F3C00108405FEA0D ++:10489000000B2CD050460EF04FFE90BBDAF80C0007 ++:1048A0000EF04AFE68BBDAF81C000EF045FE40BB75 ++:1048B000DAF80C00A060DAF81C00E06098F801005B ++:1048C000617800F0010041EA4000607098F8021041 ++:1048D000C0B2C1F30011891E08406070002020772B ++:1048E000019906F1170002290CD001210BE098F87C ++:1048F0000110607801F00101FD2242EA4101084007 ++:10490000E3E732E0002104EB810148610099701C6B ++:10491000022901D0012100E0002104EB810148615E ++:10492000A87800F00300012858D198F8020000F0A0 ++:104930000300012852D1B9F1020F04D02A1D691DCC ++:104940001B98FEF7E7FD297998F8040001408DF8DF ++:104950003810687998F8052010408DF83C00014324 ++:104960003CD050460EF0E8FD08B11020DFE60AF119 ++:1049700010010491B9F1020F18D008465FF0000150 ++:1049800004F18C03CDE9000304F5AE7202920EAB84 ++:104990005A462046FEF707FE0028E7D1B9F1020F7C ++:1049A00008D0504608D14FF0010107E050464FF0C3 ++:1049B0000101E5E70498F5E74FF0000104F1A403D5 ++:1049C000CDE9000304F5B072029281F001010FAB52 ++:1049D0005A462046FEF7E7FD0028C7D160788007D9 ++:1049E00034D4A87898F80210C0F38000C1F3800195 ++:1049F00008432BD0297898F800000BAAB9F1020FD0 ++:104A000006D032F811204300DA4002F003070AE032 ++:104A100032F810204B00DA4012F0030705D0012FC6 ++:104A20000BD0022F0BD0032F07D0BBF1000F0DD0FE ++:104A3000012906D0042904D008E00227F5E7012760 ++:104A4000F3E7012801D0042800D10427F07F40F0CB ++:104A500001006BF34100F077607881074FF00300AD ++:104A60000CD5A071BBF1000F15D100BF8DF85C0013 ++:104A700017AA3146199800F0BDFA0CE00221022F66 ++:104A800018D0012F18D0042F22D00020A071F07F61 ++:104A900020F00100F07725213046FCF7F7FC10A943 ++:104AA00004F1E0000CF04BFD10B1022800D0FFDF54 ++:104AB00000203CE6A171D9E7A1710D2104F120008D ++:104AC00019F0A4FF207840F0020020700420CDE708 ++:104AD0000120A071DFE72DE9F04387B090468946B9 ++:104AE00004460025FCF7A0FC060006D030782728F5 ++:104AF00006D0082007B0BDE8F08343F20200F9E7D2 ++:104B0000B07F00F00300022808D0002080F00101EF ++:104B100020460BF03DF8040003D101E00120F5E749 ++:104B2000FFDFA7795FEA090005D0012821D0B9F19C ++:104B3000020F26D110E0B8F1000F22D1012F05D0CD ++:104B4000022F05D0032F05D0FFDF2DE00C252BE031 ++:104B5000012529E0022527E040460EF0EDFCB0B922 ++:104B6000032F0ED11022414604F11D0019F0ADFEB5 ++:104B70001AE0012F02D0022F03D104E0B8F1000F98 ++:104B800012D00720B6E740460EF0D6FC08B1102040 ++:104B9000B0E7102104F11D0019F016FF0621404670 ++:104BA00008F0D3FFC4F81D002078252140F0020052 ++:104BB00020703046FCF76AFC2078C10713D020F043 ++:104BC0000100207002208DF8000004F11D00029009 ++:104BD0008DF804506946C3300CF0B1FC022803D0B4 ++:104BE00010B1FFDF00E02577002083E730B587B004 ++:104BF0000D460446FCF718FCA0B1807F00F00300CE ++:104C0000022812D05FF0000080F0010120460AF077 ++:104C1000BFFF04000ED028460EF08EFC38B11020E5 ++:104C200007B030BD43F20200FAE70120ECE720783C ++:104C3000400701D40820F3E7294604F13D00202273 ++:104C4000054619F042FE207840F010002070010760 ++:104C50000FD520F00800207007208DF8000069466D ++:104C600004F1E00001950CF06AFC022801D000B1CB ++:104C7000FFDF0020D4E770B50D460646FCF7D4FBF5 ++:104C800018B10178272921D102E043F2020070BD5A ++:104C9000807F00F00300022808D0002080F001018E ++:104CA00030460AF075FF040003D101E00120F5E76A ++:104CB000FFDFA079022809D16078C00706D02A4614 ++:104CC00021463046FEF7FFFC10B10FE0082070BD12 ++:104CD000B4F860000E280BD204F162010223102206 ++:104CE000081F0AF0DCFD012101704570002070BD35 ++:104CF000112070BD70B5064614460D4608460EF0EC ++:104D00001BFC18B920460EF03DFC08B1102070BD08 ++:104D1000A6F57F40FF380ED03046FCF785FB38B152 ++:104D2000417822464B08811C1846FCF7F0FC07E04E ++:104D300043F2020070BD2046FDF7F1FA0028F9D1D8 ++:104D40001021E01D0EF0D3F8E21D294604F11700F2 ++:104D500000F087F9002070BD2DE9F04104468AB0CB ++:104D600015468846002708460EF033FC18B9284639 ++:104D70000EF02FFC18B110200AB0BDE8F0812046DB ++:104D8000FCF752FB060003D0307827281BD102E045 ++:104D900043F20200F0E7B07F00F00300022809D0E0 ++:104DA0005FF0000080F0010120460AF0F1FE0400EF ++:104DB00003D101E00120F5E7FFDF2078400702D5AD ++:104DC0006078800701D40820D6E7B07F00F00300A8 ++:104DD000022803D0A06F03D1A16F02E0606FFAE751 ++:104DE000616F407800B19DB1487810B1B8F1000F03 ++:104DF0000ED0ADB1EA1D06A8E16800F032F910222C ++:104E000006A905F1170019F034FD18B1042707E0D1 ++:104E10000720B1E71022E91D04F12D0019F055FD1E ++:104E2000B8F1000F06D0102208F1070104F11D00AF ++:104E300019F04BFD2078252140F00200207030460B ++:104E4000FCF724FB2078C10715D020F0010020706A ++:104E500002208DF8000004F11D0002901030039034 ++:104E60008DF804706946B3300CF069FB022803D05A ++:104E700010B1FFDF00E0277700207DE7F8B5154689 ++:104E80000E460746FCF7D0FA040004D0207822280A ++:104E900004D00820F8BD43F20200F8BDA07F00F066 ++:104EA0000300022802D043F20400F8BD30460EF0A1 ++:104EB00043FB18B928460EF03FFB08B11020F8BD9F ++:104EC00000953288B31C21463846FEF71FFC112896 ++:104ED00014D00028F3D1297C4A08E17F62F3000155 ++:104EE000E1772A7C62F34101E177297C890884F823 ++:104EF0002010A17F21F08001A177F8BDA17F0907D3 ++:104F0000FBD4D6F80200C4F83600D6F80600C4F880 ++:104F10003A003088A0861022294604F1240019F0B6 ++:104F2000D4FC287C4108E07F61F38200E077297C93 ++:104F300061F3C300E077287C800884F82100A07F1B ++:104F400040F00800A0770020D3E770B50D46064674 ++:104F50000BB1072070BDFCF767FA040007D020787A ++:104F6000222802D3A07F400604D4082070BD43F25B ++:104F7000020070BDA5B12946304609F033FE03F0AA ++:104F80004FFB297C4A08E17F62F30001E1772A7C2C ++:104F900062F34101E177297C890884F8201004E05C ++:104FA000304609F042FE03F03BFBA17F21F04001B7 ++:104FB000A17770BD70B50D46FCF736FA040005D038 ++:104FC00028460EF0DFFA20B1102070BD43F2020037 ++:104FD00070BD29462046FEF747FB002070BD04E067 ++:104FE00010F8012B0AB100207047491E89B2F7D290 ++:104FF0000120704770B51546064603F0DBFC04003F ++:1050000000D1FFDF207820F00F00801C20F0F0009E ++:105010002030207066802868A060BDE8704003F0F2 ++:10502000CCBC10B5134C94F83000002808D104F122 ++:105030002001A1F110000CF0C4FA012084F8300026 ++:1050400010BD10B190F8B9202AB10A4890F8350087 ++:1050500018B1002003E0B83001E0064834300860A1 ++:10506000704708B50023009313460A460AF08BFFE9 ++:1050700008BD0000E8010020F0B5007B059F1E463A ++:1050800014460D46012800D0FFDF0C2030803A2066 ++:105090003880002C08D0287A032806D0287B0128E5 ++:1050A00000D0FFDF17206081F0BDA889FBE72DE964 ++:1050B000F04786B0144691F80C900E9A0D46B9F15F ++:1050C000010F0BD01021007B2E8A8846052807D0BF ++:1050D000062833D0FFDF06B0BDE8F0870221F2E7F3 ++:1050E000E8890C2100EB400001EB400018803320E0 ++:1050F0001080002CEFD0E889608100271AE000962C ++:10510000688808F1020301AA696900F085FF06EBCF ++:105110000800801C07EB470186B204EB4102BDF892 ++:10512000040090810DF1060140460E320CF0B2FAF7 ++:105130007F1CBFB26089B842E1D8CCE73420108030 ++:10514000E889B9F1010F11D0122148430E301880BF ++:10515000002CC0D0E88960814846B9F1010F00D029 ++:105160000220207300270DF1040A1FE00621ECE75E ++:105170000096688808F1020301AA696900F04CFFF3 ++:1051800006EB0800801C86B2B9F1010F12D007EBC4 ++:10519000C70004EB4000BDF80410C18110220AF1E1 ++:1051A0000201103019F091FB7F1CBFB26089B84238 ++:1051B000DED890E707EB470104EB4102BDF804009D ++:1051C000D0810AF10201404610320CF063FAEBE79D ++:1051D0002DE9F0470E4688B090F80CC096F80C8088 ++:1051E000378AF5890C20109902F10C044FF0000A5F ++:1051F000BCF1030F08D0BCF1040F3ED0BCF1070F87 ++:105200007DD0FFDF08B067E705EB850C00EB4C00B5 ++:10521000188031200880002AF4D0A8F1060000F0A0 ++:10522000FF09558125E0182101A819F0EFFB00972F ++:105230007088434601AA716900F0EEFEBDF80400D3 ++:105240002080BDF80600E080BDF808002081A21C87 ++:105250000DF10A0148460CF01DFAB9F1000F00D01B ++:1052600018B184F804A0A4F802A007EB080087B2E4 ++:105270000A346D1EADB2D6D2C4E705EB850C00EB47 ++:105280004C00188032200880002ABBD0A8F105000D ++:1052900000F0FF09558137E000977088434601AA66 ++:1052A000716900F0B9FE9DF80600BDF80410E180B8 ++:1052B0002179420860F3000162F34101820862F340 ++:1052C0008201C20862F3C301020962F304114209B8 ++:1052D00062F34511820962F386112171C009607180 ++:1052E000BDF80700208122460DF1090148460CF067 ++:1052F000D1F918B184F802A0A4F800A000E007E0FA ++:1053000007EB080087B20A346D1EADB2C4D279E74C ++:10531000A8F1020084B205FB08F000F10E0CA3F81E ++:1053200000C035230B80002AA6D0558194810097B8 ++:1053300083B270880E32716900F06EFE62E72DE96B ++:10534000F84F1E460A9D0C4681462AB1607A00F548 ++:105350008070D080E089108199F80C000C274FF004 ++:1053600000084FF00E0A0D2873D2DFE800F09E0708 ++:105370000E1C28303846556A737373002146484620 ++:105380000095FFF779FEBDE8F88F207B914608284D ++:1053900002D0032800D0FFDF378030200AE000BFB2 ++:1053A000A9F80A80EFE7207B9146042800D0FFDFB0 ++:1053B000378031202880B9F1000FF1D1E3E7207B5D ++:1053C0009146042800D0FFDF37803220F2E7207BAF ++:1053D0009146022800D0FFDF37803320EAE7207BA8 ++:1053E0001746022800D0FFDF3420A6F800A028804E ++:1053F000002FC8D0A7F80A80C5E7207B17460428ED ++:1054000000D0FFDF3520A6F800A02880002FBAD0FA ++:105410004046A7F80A8012E0207B1746052802D0F4 ++:10542000062800D0FFDF1020308036202880002F93 ++:10543000A9D0E0897881A7F80E80B9F80E00B8816C ++:10544000A1E7207B9146072800D0FFDF3780372077 ++:10545000B0E72AE04FF0120018804FF03800170034 ++:10546000288090D0E0897881A7F80E80A7F8108076 ++:1054700099F80C000A2805D00B2809D00C280DD06B ++:10548000FFDF80E7207B0A2800D0FFDF01200AE051 ++:10549000207B0B2800D0FFDF042004E0207B0C28B9 ++:1054A00000D0FFDF052038736DE7FFDF6BE770B5D5 ++:1054B0000C460546FBF7B8FF20B10078222804D23D ++:1054C000082070BD43F2020070BD052128460AF095 ++:1054D0005FFB206008B1002070BD032070BD30B4B8 ++:1054E0004880087820F00F00C01C20F0F0009030B9 ++:1054F00001F8080B1DCA81E81D0030BC03F05DBA3D ++:105500002DE9FF4784B0002782460297079890460E ++:105510008946123006F086FA401D20F003060798EF ++:1055200028B907A95046FFF7C2FF002853D1B9F1A7 ++:10553000000F05D00798017B19BB052504681BE007 ++:1055400098F80000092803D00D2812D0FFDF45E0AD ++:10555000079903254868B0B3497B4288714391425B ++:1055600038D98AB2B3B2011D0AF085F90446078022 ++:1055700002E0079C042508340CB1208810B1032DEB ++:1055800028D02BE007980121123006F07DFAADF803 ++:105590000C00024602AB2946504604F02AF80700E8 ++:1055A00001D1A01C029007983A461230C8F80400B6 ++:1055B000A8F802A003A94046029B06F072FAC0B107 ++:1055C000072814D200E005E0DFE800F0060811111A ++:1055D0000F0A0C00132015E6002013E6112011E637 ++:1055E00008200FE643F203000CE607200AE603203A ++:1055F00008E6BDF80C002346CDE900702A46504667 ++:10560000079900F019FD57B9032D08D10798B3B2D7 ++:10561000417B406871438AB2011D0AF040F9B9F13B ++:10562000000FD9D0079981F80C90D5E72DE9FE4FEE ++:1056300091461A881C468A468046FAB102AB494612 ++:1056400003F0D7FF050019D04046A61C27880AF0B2 ++:10565000E3FB3246072629463B46009609F0F1FF58 ++:1056600020882346CDE900504A465146404600F086 ++:10567000E3FC002020800120BDE8FE8F0020FBE736 ++:1056800010B586B01C46AAB104238DF800301388EB ++:10569000ADF808305288ADF80A208A788DF80E20CF ++:1056A0000988ADF80C1000236A462146FFF728FF51 ++:1056B00006B010BD1020FBE770B50D4605210AF0BD ++:1056C00067FA040000D1FFDF294604F11200BDE8AB ++:1056D000704006F0C2B92DE9F8430D468046002619 ++:1056E00003F068F904462878102878D2DFE800F043 ++:1056F000773B34533131123131310831313131316D ++:105700002879001FC0B2022801D0102810D114BB84 ++:10571000FFDF35E004B9FFDF052140460AF038FA23 ++:10572000007B032806D004280BD0072828D0FFDFF1 ++:10573000072655E02879801FC0B2022820D050B13A ++:10574000F6E72879401FC0B2022819D0102817D0D8 ++:10575000EEE704B9FFDF13E004B9FFDF2879012881 ++:105760000ED1172137E0052140460AF011FA070053 ++:1057700000D1FFDF07F11201404606F04BF92CB1D2 ++:105780002A4621464046FFF7AAFE29E0132140465B ++:10579000FDF7FAF824E004B9FFDF052140460AF0DE ++:1057A000F7F9060000D1FFDF694606F1120006F0A6 ++:1057B0003BF9060000D0FFDFA988172901D2172284 ++:1057C00000E00A46BDF80000824202D9014602E02C ++:1057D00005E01729C5D3404600F03EFCD0E7FFDFC7 ++:1057E0003046BDE8F883401D20F0030219B102FBEA ++:1057F00001F0001D00E000201044704713B5009830 ++:1058000050B100244FEA0D0009F0DFFF002C02D157 ++:10581000F74A009911601CBD01240020F4E72DE92E ++:10582000F0470C4615462421204619F0EFF805B93B ++:10583000FFDFA87860732888DFF8B4A3401D20F04C ++:105840000301AF788946DAF8000009F0DCFF0600B2 ++:1058500000D1FFDF4FF000082660A6F8008077B186 ++:1058600009FB07F1091D0AD0DAF8000009F0CBFFA7 ++:10587000060000D1FFDF6660C6F8008001E0C4F8D2 ++:105880000480298804F11200BDE8F04706F0B4B89E ++:105890002DE9F047804601F112000D46814606F0E1 ++:1058A000C1F8401DD24F20F003026E7B14462968D8 ++:1058B000386809F0D3FF3EB104FB06F2121D03D095 ++:1058C0006968386809F0CAFF05200AF009F904463A ++:1058D00005200AF00DF9201A012802D1386809F0D4 ++:1058E00087FF49464046BDE8F04706F09AB870B5D4 ++:1058F000054605210AF04CF9040000D1FFDF04F150 ++:1059000012012846BDE8704006F084B82DE9F04F3A ++:1059100091B04FF0000BADF834B0ADF804B047884B ++:105920000C4605469246052138460AF031F9060034 ++:1059300000D1FFDF24B1A780A4F806B0A4F808B016 ++:10594000297809220B20B2EB111F7DD12A7A04F1AC ++:10595000100138274FF00C084FF001090391102A6D ++:1059600073D2DFE802F072F2F1F07F08D2888D9FE7 ++:105970003DDBF3EEB6B6307B022800D0FFDFA8890E ++:1059800008EBC001ADF804103021ADF83410002C44 ++:1059900025D06081B5F80E9000271DE004EBC70804 ++:1059A000317C88F80E10F189A8F80C10CDF8009021 ++:1059B0006888042304AA296900F02EFBBDF81010A2 ++:1059C000A8F8101009F10400BDF812107F1C1FFA8E ++:1059D00080F9A8F81210BFB26089B842DED80DE194 ++:1059E000307B022800D0FFDFE98908EBC100ADF869 ++:1059F00004003020ADF83400287B0A90001FC0B2AC ++:105A00000F90002CEBD06181B5F81090002725E0B5 ++:105A1000CDF800906888696903AA0A9B00F0FCFA37 ++:105A20000A9804EBC70848441FFA80F908F10C02F1 ++:105A300004A90F980BF02EFE18B188F80EB0A8F844 ++:105A40000CB0BDF80C1001E0D4E0CFE0A8F81010C5 ++:105A5000BDF80E107F1CA8F81210BFB26089B842C2 ++:105A6000D6D8CBE00DA8009001AB2246294630469F ++:105A7000FFF71DFBC2E0307B082805D0FFDF03E005 ++:105A8000307B082800D0FFDFE8891030ADF8040033 ++:105A90003620ADF83400002C3FD0A9896181F1890E ++:105AA000A18127E0307B092800D0FFDFA88900F121 ++:105AB0000C01ADF804103721ADF83410002C2CD0B7 ++:105AC0006081E8890090AB89688804F10C0229693B ++:105AD00056E0E8893921103080B2ADF80400ADF805 ++:105AE0003410002C74D0A9896181287A0E280AD03C ++:105AF00002212173E989E181288A0090EB89688875 ++:105B00006969039A3CE00121F3E70DA8009001AB1D ++:105B1000224629463046FFF75BFB6FE0307B0A28C0 ++:105B200000D0FFDF1220ADF80400ADF834704CB3A4 ++:105B3000A9896181A4F810B0A4F80EB084F80C9083 ++:105B40005CE020E002E031E039E042E0307B0B280D ++:105B500000D0FFDF288AADF834701230ADF80400B1 ++:105B600084B104212173A9896181E989E181298AAC ++:105B70002182688A00902B8A688804F11202696980 ++:105B800000F04AFA3AE0307B0C2800D0FFDF122008 ++:105B9000ADF80400ADF834703CB305212173A4F8CE ++:105BA0000AB0A4F80EB0A4F810B027E00DA8009039 ++:105BB00001AB224629463046FFF75EFA1EE00DA8EB ++:105BC000009001AB224629463046FFF7B8FB15E0AE ++:105BD00036E03B21ADF80400ADF8341084B3A4F8EE ++:105BE0000690A4F808B084F80AB007E0FFDF05E0EB ++:105BF00010000020297A012919D0FFDFBDF8040028 ++:105C0000AAF800007CB1BDF834002080BDF8040083 ++:105C10006080BDF83400392805D03B2803D03C28EB ++:105C200001D086F80CB011B00020BDE8F08F3C2107 ++:105C3000ADF80400ADF8341014B1697AA172DDE753 ++:105C4000FFE7AAF80000EEE72DE9F84356880F4673 ++:105C5000804615460521304609F09AFF040000D120 ++:105C6000FFDF123400943B46414630466A6806F036 ++:105C70004AF8B6E570B50D46052109F089FF040024 ++:105C800000D1FFDF294604F11200BDE8704005F0A5 ++:105C9000D6BE70B50D46052109F07AFF040000D18B ++:105CA000FFDF294604F11200BDE8704005F0F4BEA4 ++:105CB00070B50546052109F06BFF040000D1FFDF38 ++:105CC00004F1080321462846BDE870400422ADE4F3 ++:105CD00070B50546052109F05BFF040000D1FFDF28 ++:105CE000214628462368BDE8704005229EE470B531 ++:105CF0000646052109F04CFF040000D1FFDF04F146 ++:105D0000120005F08FFE401D20F0030511E0011D7B ++:105D100000880322431821463046FFF787FC0028FD ++:105D20000BD0607BABB2684382B26068011D09F0A2 ++:105D3000ECFD606841880029E9D170BD70B50E4660 ++:105D4000054602F037FE040000D1FFDF012020727B ++:105D500066726580207820F00F00C01C20F0F000F3 ++:105D600030302070BDE8704002F027BE2DE9F043CE ++:105D70008BB00D461446814606A9FFF798FB002814 ++:105D800014D14FF6FF7601274FF420588CB1032031 ++:105D90008DF800001020ADF8100007A8059007AAA4 ++:105DA000204604A90BF095FC78B107200BB0BDE8A4 ++:105DB000F0830820ADF808508DF80E708DF80000C3 ++:105DC000ADF80A60ADF80C800CE00698A17801747B ++:105DD0002188C1818DF80E70ADF80850ADF80C80A7 ++:105DE000ADF80A606A4602214846069BFFF788FB29 ++:105DF000DCE708B501228DF8022042F60202ADF878 ++:105E000000200A4603236946FFF73AFC08BD08B59F ++:105E100001228DF8022042F60302ADF800200A4666 ++:105E200004236946FFF72CFC08BD00B587B079B1A3 ++:105E300002228DF800200A88ADF808204988ADF8C4 ++:105E40000A1000236A460521FFF75AFB07B000BD80 ++:105E50001020FBE709B1072312E40720704770B553 ++:105E600088B00D461446064606A9FFF720FB002819 ++:105E70000ED17CB10620ADF808508DF80000ADF8C9 ++:105E80000A40069B6A460821DC813046FFF738FB52 ++:105E900008B070BD05208DF80000ADF80850F0E79F ++:105EA00000B587B059B107238DF80030ADF8082050 ++:105EB000039100236A460921FFF722FBC6E7102061 ++:105EC000C4E770B588B00C460646002506A9FFF762 ++:105ED000EEFA0028DCD106980121123005F0D4FD3D ++:105EE0009CB12178062921D2DFE801F020050516B2 ++:105EF0000318801E80B2C01EE28880B20AB1A36877 ++:105F00001BB1824203D90C20C2E71020C0E704294C ++:105F100004D0A08850B901E00620B9E7012913D0C8 ++:105F2000022905D004291CD005292AD00720AFE773 ++:105F300009208DF800006088ADF80800E088ADF811 ++:105F40000A00A068039023E00A208DF80000608812 ++:105F5000ADF80800E088ADF80A00A0680A250390B3 ++:105F600016E00B208DF800006088ADF80800A088CE ++:105F7000ADF80A00E088ADF80C00A0680B2504908D ++:105F800006E00C208DF8000060788DF808000C25E4 ++:105F90006A4629463046069BFFF7B2FA78E700B515 ++:105FA00087B00D228DF80020ADF8081000236A4656 ++:105FB0001946FFF7A5FA49E700B587B071B102228B ++:105FC0008DF800200A88ADF808204988ADF80A103D ++:105FD00000236A460621FFF793FA37E7102035E7DA ++:105FE00070B586B0064601200D46ADF808108DF854 ++:105FF0000000014600236A463046FFF781FA04009C ++:1060000008D12946304601F0BDFA0021304601F0A2 ++:10601000D7FA204606B070BDF8B51C4615460E46A8 ++:10602000069F09F0E7FE2346FF1DBCB231462A4613 ++:10603000009409F0D2FAF8BD30B41146DDE902420D ++:106040003CB1032903D0002330BC04F05BB9012329 ++:10605000FAE71A8030BC704770B50C460546FFF76A ++:106060002BFB2146284601F09CFA2846BDE87040EB ++:10607000012101F0A5BA000018B18178012938D1B9 ++:1060800001E010207047018842F60112881A9142FF ++:1060900031D018DC42F60102A1EB020091422AD075 ++:1060A0000CDC41B3B1F5C05F25D06FF4C0500818C7 ++:1060B00021D0A0F57060FF381BD11CE001281AD058 ++:1060C00002280AD117E0B0F5807F14D008DC01283F ++:1060D00011D002280FD003280DD0FF2809D10AE0E3 ++:1060E000B0F5817F07D0A0F58070033803D0012878 ++:1060F00001D0002070470F2070470A281ED007DC0F ++:1061000018D2DFE800F0191B1F1F171F231D1F21C6 ++:10611000102815D008DC0B2812D00C2810D00D2820 ++:1061200016D00F2806D10DE011280BD084280BD0F3 ++:1061300087280FD003207047002070470520704744 ++:10614000072070470F2070470420704706207047D3 ++:106150000C20704743F20200704738B50C4605002A ++:1061600041D06946FEF7ACF9002819D19DF800101E ++:10617000607861F3020060706946681CFEF7A0F960 ++:1061800000280DD19DF80010607861F3C5006070A3 ++:10619000A978C1F34101012903D0022905D00720C4 ++:1061A00038BD217821F0200102E0217841F0200162 ++:1061B0002170410704D0A978C90861F38610607086 ++:1061C000607810F0380F07D0A978090961F3C7107B ++:1061D000607010F0380F02D16078400603D5207847 ++:1061E00040F040002070002038BD70B5044600200B ++:1061F000088015466068FFF7B0FF002816D1208997 ++:10620000A189884211D860688078C0070AD0B1F5AA ++:10621000007F0AD840F20120B1FBF0F200FB12101F ++:10622000288007E0B1F5FF7F01D90C2070BD01F295 ++:1062300001212980002070BD10B50478137864F323 ++:10624000000313700478640864F341031370047846 ++:10625000A40864F3820313700478E40864F3C303AE ++:1062600013700478240964F3041313700478640928 ++:1062700064F3451313700078800960F3861313707C ++:1062800031B10878C10701D1800701D5012000E0B4 ++:10629000002060F3C713137010BD4278530702D07B ++:1062A00002F0070306E012F0380F02D0C2F3C20377 ++:1062B00000E001234A7863F302024A70407810F04C ++:1062C000380F02D0C0F3C20005E0430702D000F04F ++:1062D000070000E0012060F3C5024A7070472DE915 ++:1062E000F04F95B00D00824612D01221284618F0CA ++:1062F0006BFB4FF6FF7B05AA0121584607F065FAB4 ++:106300000024264637464FF420586FF4205972E097 ++:10631000102015B0BDE8F08F9DF81E0001280AD1AD ++:10632000BDF81C1041450BD011EB09000AD0012823 ++:106330000CD002280CD0042C0ED0052C0FD10DE06F ++:10634000012400E00224BDF81A6008E0032406E0FE ++:106350000424BDF81A7002E0052400E00624BDF80C ++:106360001A10514547D12C74BEB34FF0000810AA43 ++:106370004FF0070ACDE90282CDE900A80DF13C09F2 ++:106380001023CDF8109042463146584607F0D0FA17 ++:1063900008BBBDF83C002A46C0B210A90BF07AF940 ++:1063A000C8B9AE81CFB1CDE900A80DF1080C0AAE95 ++:1063B00040468CE84102132300223946584607F034 ++:1063C000B7FA40B9BDF83C00F11CC01EC0B22A1D8E ++:1063D0000BF060F910B103209BE70AE0BDF829003B ++:1063E000E881062C05D19DF81E00A872BDF81C009E ++:1063F000288100208DE705A807F0F3F900288BD04D ++:10640000FFF77BFE85E72DE9F0471C46DDE90978BB ++:10641000DDF8209015460E00824600D1FFDF0CB15A ++:10642000208818B1D5B11120BDE8F087022D01D028 ++:10643000012100E0002106F1140006F0B7F8A8F8E9 ++:10644000000002463B462946504603F0D2F8C9F800 ++:10645000000008B9A41C3C600020E5E71320E3E736 ++:10646000F0B41446DDE904528DB1002314B1022CBE ++:1064700009D101E0012306E00D7CEE0703D025F0F1 ++:10648000010501230D742146F0BC03F03BBF1A80C7 ++:10649000F0BC70472DE9FE4F91461A881C468A468B ++:1064A0008046FAB102AB494603F0A3F8050019D0C3 ++:1064B0004046A61C278809F0AFFC3246072629462D ++:1064C0003B46009609F0BDF820882346CDE90050F0 ++:1064D0004A4651464046FFF7C3FF00202080012076 ++:1064E000BDE8FE8F0020FBE72DE9F04786B091461E ++:1064F000DDE90E460F46824603AA05A904A8109DB1 ++:106500008DE807009846324621465046FFF77BFF4C ++:10651000049909B1012200E000222A70002817D155 ++:10652000F84A03AB1060059A009104F11400CDE91C ++:1065300001204A463946504606F0EFFB90B1082844 ++:106540000ED2DFE800F00407040D0D090B0B00204C ++:1065500006B069E71120FBE70720F9E70820F7E715 ++:106560000320F5E7BDF80C100498CDE9000143467F ++:10657000324621465046FFF773FFE8E72DE9F04326 ++:1065800089B00D46DDE9108781461C461646142168 ++:1065900003A818F03BFA012002218DF810108DF8A5 ++:1065A0000C008DF81170ADF8146064B1A278D207B8 ++:1065B00009D08DF81600E088ADF81A00A088ADF873 ++:1065C0001800A068079008A80095CDE90110424680 ++:1065D00003A948466B68FFF787FF09B0BDE8F08361 ++:1065E000F0B58BB00024064606940794072708945C ++:1065F00005A80994019400970294CDE903400D4643 ++:1066000010232246304607F093F978B90AA806A964 ++:10661000019400970294CDE90310BDF814300022D4 ++:106620002946304606F05AFF002801D0FFF765FDE5 ++:106630000BB0F0BD06F0FABD2DE9FC410C468046DA ++:10664000002602F0B7F9054620780D287ED2DFE853 ++:1066500000F0BC0713B325BD49496383AF959B0088 ++:10666000A848006820B1417841F010014170ADE0C8 ++:10667000404602F0CFF9A9E00421404609F088FA2B ++:10668000070000D1FFDF07F11401404605F022FFAB ++:10669000A5BB13214046FCF777F997E0042140465B ++:1066A00009F076FA070000D1FFDFE088ADF80000BE ++:1066B0000020B8819DF80000010704D5C00602D56E ++:1066C000A088B88105E09DF8010040067ED5A0882D ++:1066D000F88105B9FFDF22462946404601F066FCF5 ++:1066E000022673E0E188ADF800109DF8011009065C ++:1066F0000FD5072803D006280AD00AE024E0042199 ++:10670000404609F045FA060000D1FFDFA088F0817D ++:106710000226CDB9FFDF17E00421404609F038FA20 ++:10672000070000D1FFDF07F1140006F0B6FD90F07E ++:10673000010F02D1E079000648D5387C022640F0EE ++:106740000200387405B9FFDF224600E03DE029462B ++:10675000404601F02BFC39E00421404609F018FACC ++:10676000017C002D01F00206C1F340016171017C42 ++:1067700021F002010174E7D1FFDFE5E702260121E4 ++:10678000404602F079F921E00421404609F000FA80 ++:106790000546606800902089ADF804000122694632 ++:1067A000404602F08AF9287C20F0020028740DE0AF ++:1067B000002DC9D1FFDFC7E7022600214046FFF7C1 ++:1067C00068FA002DC0D1FFDFBEE7FFDF3046BDE82D ++:1067D000FC813EB50C0009D001466B4601AA0020A1 ++:1067E00007F028F920B1FFF788FC3EBD10203EBD20 ++:1067F00000202080A0709DF8050002A900F007008D ++:10680000FDF77AFE50B99DF8080020709DF805004C ++:1068100002A9C0F3C200FDF76FFE08B103203EBD20 ++:106820009DF8080060709DF80500C109A07861F32B ++:106830000410A0709DF80510890961F3C300A070D1 ++:106840009DF80410890601D5022100E0012161F3C1 ++:1068500042009DF8001061F30000A07000203EBDD2 ++:1068600070B5144606460D4651EA040005D075B1D0 ++:1068700008460CF0A5FE78B901E0072070BD294656 ++:10688000304607F038F910B1BDE8704035E454B136 ++:1068900020460CF095FE08B1102070BD2146304610 ++:1068A000BDE8704095E7002070BD2DE9FC5F0C4607 ++:1068B00090460546002701780822007A3E46B2EB52 ++:1068C000111F7DD104F10A0100910A31821E4FF09F ++:1068D000020A04F1080B0191092A72D2DFE802F0E2 ++:1068E000EDE005F528287BAACE006888042109F090 ++:1068F0004FF9060000D1FFDFB08928B152270726E3 ++:10690000C3E000004C02002051271026002C7DD04F ++:106910006888A0800120A071A88900220099FFF753 ++:106920009FFF002873D1A8892081288AE081D1E0C7 ++:10693000B5F81290072824D1E87B000621D551270D ++:1069400009F1140086B2002CE1D0A8890022009938 ++:10695000FFF786FF00285AD16888A08084F806A037 ++:10696000A88920810120A073288A2082A4F812908F ++:10697000A88A009068884B46A969019A01F0F3FA49 ++:10698000A8E0502709F1120086B2002C3ED0A88959 ++:1069900000225946FFF764FF002838D16888A0809C ++:1069A000A889E080287A072813D002202073288A3B ++:1069B000E081E87BC0096073A4F81090A88A01E028 ++:1069C00085E082E0009068884B4604F11202A969D4 ++:1069D000D4E70120EAE7B5F81290512709F1140035 ++:1069E00086B2002C66D06888042109F0D1F883466D ++:1069F0006888A080A88900220099FFF731FF00284D ++:106A00006ED184F806A0A889208101E052E067E0F9 ++:106A10000420A073288A2082A4F81290A88A0090EB ++:106A200068884B46A969019A01F09DFAA989ABF8DB ++:106A30000E104FE06888FAF7F7FC074668880421D3 ++:106A400009F0A6F8064607B9FFDF06B9FFDF687B45 ++:106A5000C00702D05127142601E0502712264CB35C ++:106A60006888A080502F06D084F806A0287B59465D ++:106A700001F089FA2EE0287BA11DF9E7FE49A889DB ++:106A80004989814205D1542706269CB16888A08097 ++:106A900020E053270BE06888A080A889E08019E0F7 ++:106AA0006888042109F074F800B9FFDF552708262B ++:106AB000002CF0D1A8F8006011E056270726002C22 ++:106AC000F8D06888A080002013E0FFDF02E00128F2 ++:106AD00008D0FFDFA8F800600CB127806680002096 ++:106AE000BDE8FC9F57270726002CE3D06888A080CC ++:106AF000687AA071EEE7401D20F0030009B1414320 ++:106B0000091D01EB4000704713B5DB4A00201071EE ++:106B1000009848B10024684608F057FE002C02D1C6 ++:106B2000D64A009911601CBD01240020F4E770B51D ++:106B30000D46064686B014465C21284617F066FFCF ++:106B400004B9FFDFA0786874A2782188284601F094 ++:106B500044FA0020A881E881228805F1140130461A ++:106B600005F09DFC6A460121304606F02EFE19E034 ++:106B70009DF80300000715D5BDF806103046FFF755 ++:106B80002FFD9DF80300BDF8061040F010008DF8B1 ++:106B90000300BDF80300ADF81400FF233046059A4A ++:106BA00006F074FF684606F01CFE0028E0D006B030 ++:106BB00070BD10B50C4601F1140005F0A7FC0146AC ++:106BC000627C2046BDE8104001F03CBA70B5054635 ++:106BD000042108F0DDFF040000D1FFDF04F11401FF ++:106BE0000C46284605F076FC21462846BDE8704054 ++:106BF00005F077BC70B58AB00C460646FAF714FC6F ++:106C0000050014D02878222827D30CB1A08890B191 ++:106C100001208DF80C0003208DF8100000208DF865 ++:106C2000110054B1A088ADF81800206807E043F2C5 ++:106C300002000AB070BD0920FBE7ADF8180005900E ++:106C40000421304608F0A4FF040000D1FFDF04F166 ++:106C5000140005F072FC000701D40820E9E701F0F8 ++:106C6000A9FE60B108A802210094CDE9011095F8B1 ++:106C7000232003A930466368FFF736FCD9E71120CB ++:106C8000D7E72DE9F04FB2F802A0834689B0154648 ++:106C900089465046FAF7C8FB07460421504608F0DB ++:106CA00077FF0026044605964FF002080696ADF8D9 ++:106CB0001C6007B9FFDF04B9FFDF4146504603F00F ++:106CC00088FE60B907AA06A905A88DE80700424614 ++:106CD000214650466368FFF796FB00B1FFDF664828 ++:106CE00007AB0660DDE9051204F11400CDF8009051 ++:106CF000CDE90320CDE9013197F8232059465046CC ++:106D00006B6805F063FC06000AD0022E04D0032E47 ++:106D100014D0042E00D0FFDF09B03046BDE8F08F5C ++:106D2000BDF81C000028F7D00599CDE900104246B7 ++:106D3000214650466368FFF793FBEDE7687840F023 ++:106D400008006870E8E72DE9F04F9BB004464FF06B ++:106D500000084948ADF85480ADF83080ADF8508057 ++:106D6000A0F80880ADF81480ADF81880ADF8208048 ++:106D7000ADF81C80007916460D464746012808D01C ++:106D8000022806D0032804D0042802D008201BB013 ++:106D9000C4E720460CF0D0FBD0BB28460CF0CCFB5F ++:106DA000B0BB60680CF015FC90BB606848B16089AE ++:106DB0002189884202D8B1F5007F01D90C20E6E78D ++:106DC00080460BAA06A92846FFF70FFA0028DED155 ++:106DD00068688078C0F34100022808D19DF8190046 ++:106DE00010F0380F03D028690CF0EAFB80B905A930 ++:106DF0002069FFF7B2F90028C9D1206950B1607845 ++:106E000080079DF8150000F0380002D5C0B301E0FE ++:106E100011E0A8BB9DF8140080060ED59DF8150062 ++:106E200010F0380F03D060680CF0CAFB18B9606826 ++:106E30000CF0CFFB08B11020A9E707A96069FFF7A4 ++:106E40008CF90028A3D1606940B19DF81D0000F0C5 ++:106E5000070101293FD110F0380F3CD008A9A069E3 ++:106E6000FFF77BF9002892D19DF81C00800632D4F0 ++:106E70009DF82000800604E04C0200201400002051 ++:106E800029E028D4A06940B19DF8210000F0070155 ++:106E9000012920D110F0380F1DD0E06818B100781A ++:106EA000C8B11C2817D20EAA611C2046FFF7C4F9EE ++:106EB0000120B94660F30F27BA4607468DF84E0009 ++:106EC00042F60300ADF84C000DF13B0217A928680B ++:106ED0000AF0FFFB08B1072059E79DF85C0016A9EE ++:106EE000CDF80090C01CCDE9019100F0FF0B00230C ++:106EF0000BF20122514613A806F0AAFBF0BBBDF825 ++:106F000058000990FE482A8929690092CDE90110AC ++:106F10006B89BDF82C202868069906F099FB0100C2 ++:106F20007ED120784FF0020AC10601D480062BD50D ++:106F3000ADF80C90606950B907A906A8FFF7ADF944 ++:106F40009DF81D0020F00700401C8DF81D009DF8E5 ++:106F50001C008DF84E7040F0C8008DF81C0042F601 ++:106F60000210ADF84C000CA903AACDF800A0CDE9A1 ++:106F70000121002340F2032213A800E01EE007993C ++:106F800006F066FB01004BD1DD484D4608385B46F4 ++:106F90000089ADF839000EA8CDE90290CDF8049033 ++:106FA000CDF810904FF007090022CDF80090BDF801 ++:106FB00058104FF6FF7006F091FA10B1FFF79DF8E8 ++:106FC000E5E69DF83800000625D52946012060F346 ++:106FD0000F218DF84E704FF42450ADF84C00ADF8F1 ++:106FE000105062789DF81000002362F300008DF8C5 ++:106FF00010006278CDF800A0520862F341008DF8CD ++:10700000100004AACDE9012540F2032213A806F0DE ++:107010001FFB010004D1606888B32069A8B900E0B3 ++:1070200086E005A906A8FFF738F96078800706D43E ++:107030009DF8150020F038008DF8150005E09DF84A ++:10704000140040F040008DF814008DF84E7042F6A8 ++:107050000110ADF84C00208940F20121B0FBF1F2A3 ++:1070600001FB1202606814ABCDF80080CDE901038A ++:10707000002313A8059906F0EBFA010058D12078F7 ++:10708000C00729D0ADF80C50A06950B908A906A8CE ++:10709000FFF703F99DF8210020F00700401C8DF850 ++:1070A00021009DF820008DF84E7040F040008DF8D2 ++:1070B000200042F60310ADF84C0015A903AACDF844 ++:1070C00000A0CDE90121002340F2032213A8089972 ++:1070D00006F0BEFA01002BD1E06868B32946012012 ++:1070E00060F30F218DF84E7042F60410ADF84C009D ++:1070F000E068002302788DF8602040788DF8610008 ++:10710000E06818AA4088ADF86200E06800798DF860 ++:107110006400E068C088ADF86500CDF80090CDE966 ++:1071200001254FF4027213A806F092FA010003D071 ++:10713000099800F0B3FF2AE671480321083801716D ++:1071400056B100893080BDF850007080BDF8300025 ++:10715000B080BDF85400F080002018E670B501251D ++:107160008AB016460B46012802D0022816D104E048 ++:107170008DF80E504FF4205003E08DF80E5042F67B ++:107180000100ADF80C005BB10024601C60F30F241B ++:1071900004AA08A918460AF09CFA18B1072048E585 ++:1071A000102046E504A99DF820205548CDE900218E ++:1071B000801E02900023214603A802F2012206F05D ++:1071C00047FA10B1FEF799FF33E54D4808380EB184 ++:1071D000C1883180057100202BE5F0B593B00746DA ++:1071E00001268DF83E6041F60100ADF83C0012AA80 ++:1071F0000FA93046FFF7B2FF002848D1404C0025C8 ++:10720000083CE7B31C2102A817F000FC9DF8080019 ++:107210008DF83E6040F020008DF8080042F6052011 ++:10722000ADF83C000E959DF83A00119520F006004F ++:10723000801C8DF83A009DF838006A4620F0FF0067 ++:107240008DF838009DF8390009A920F0FF008DF86D ++:1072500039000420ADF82C00ADF830000EA80A90DB ++:1072600011A80D900FA80990ADF82E5002A8FFF7B5 ++:107270006AFD00280BD1BDF80000608100E008E045 ++:10728000BDF80400A081401CE0812571002013B0EE ++:10729000F0BD6581A581BDF84800F4E72DE9F74F01 ++:1072A0001749A0B00024083917940A79A146012A89 ++:1072B00004D0022A02D0082023B02FE5CA888242D7 ++:1072C00001D00620F8E721988A46824201D10720A2 ++:1072D000F2E701202146ADF848004FF6FF7860F351 ++:1072E0000F21ADF84A808DF86E0042F6020B069130 ++:1072F0008DF87240ADF86CB0ADF870401CA901E09B ++:10730000540200201391ADF8508012A806F08DFAB7 ++:1073100000252E462F460DAB072212A9404606F047 ++:1073200087FA78B10A285DD195B38EB3ADF8645071 ++:10733000ADF866609DF85E008DF8144019AC012828 ++:1073400064D06BE09DF83A001FB3012859D1BDF815 ++:10735000381059451FD118A809A901940294CDE904 ++:10736000031007200090BDF836101023002240467D ++:1073700006F0DEFAB0BBBDF86000042801D0062894 ++:107380004AD1BDF82410219881423AD10F2093E7C9 ++:107390003AE0012835D1BDF83800B0F5205F03D0C0 ++:1073A00042F6010188422CD1BAF80600BDF8361029 ++:1073B000884201D1012700E0002705B19EB1219844 ++:1073C00081421ED118A809AA01940294CDE9032094 ++:1073D000072000900D4610230022404606F0A8FA30 ++:1073E00000B902E02DE04E460BE0BDF86000022837 ++:1073F00001D0102810D1C0B217AA09A90AF04AF981 ++:1074000050B9BDF8369086E7052055E705A917A8BD ++:10741000221D0AF05EF908B103204DE79DF8140023 ++:107420000023001DC2B28DF8142022980092CDE9ED ++:1074300001401BA8069906F00BF910B902228AF840 ++:107440000420FEF75AFE37E710B50B46401E88B001 ++:1074500084B205AA00211846FEF7EEFE00200DF1C9 ++:10746000080C06AA05A901908CE8070007200090E7 ++:107470000123002221464FF6FF7006F02FF8044644 ++:10748000BDF81800012800D0FFDF2046FEF735FECA ++:1074900008B010BDF0B5FF4F044687B038790E46EE ++:1074A000032804D0042802D0082007B0F0BD04AAA5 ++:1074B00003A92046FEF799FE0500F6D160688078A2 ++:1074C000C0F3410002280AD19DF80D0010F0380FDA ++:1074D00005D020690CF074F808B11020E5E7208988 ++:1074E00005AA21698DE807006389BDF8102020688E ++:1074F000039906F0ADF810B1FEF7FFFDD5E716B120 ++:10750000BDF814003080042038712846CDE7F8B566 ++:107510000C0006460BD001464FF6FF7500236A4665 ++:10752000284606F087FA20B1FEF7E7FDF8BD1020E7 ++:10753000F8BD69462046FEF710FE0028F8D1A07875 ++:10754000314600F001032846009A06F09FFAEBE767 ++:1075500030B587B0144600220DF1080C05AD01923C ++:107560008CE82C00072200920A46014623884FF639 ++:10757000FF7005F0B3FFBDF814102180FEF7BDFDCC ++:1075800007B030BD70B50D46042108F001FB0400C2 ++:1075900000D1FFDF294604F11400BDE8704004F07B ++:1075A000C5BF70B50D46042108F0F2FA040000D101 ++:1075B000FFDF294604F11400BDE8704004F0D9BF94 ++:1075C00070B50D46042108F0E3FA040000D1FFDF96 ++:1075D000294604F11400BDE8704004F0F1BF70B515 ++:1075E0000546042108F0D4FA040000D1FFDF21464B ++:1075F00028462368BDE870400122FEF74BBF70B5F6 ++:107600000646042108F0C4FA040000D1FFDF04F1AB ++:10761000140004F07BFF401D20F0030511E0011D64 ++:1076200000880022431821463046FEF733FF002829 ++:107630000BD0607CABB2684382B2A068011D08F039 ++:1076400064F9A06841880029E9D170BD70B505468C ++:10765000042108F09DFA040000D1FFDF21462846EE ++:107660006368BDE870400222FEF714BF70B50E4695 ++:10767000054601F09FF9040000D1FFDF01202072D0 ++:1076800066726580207820F00F00001D20F0F00069 ++:1076900040302070BDE8704001F08FB910B504464D ++:1076A000012900D0FFDF2046BDE810400121FEF790 ++:1076B000F0BA2DE9F04F97B04FF0000A0C00834666 ++:1076C000ADF814A0D04619D0E06830B1A068A8B1D8 ++:1076D0000188ADF81410A0F800A05846F9F7A4FEF0 ++:1076E000070043F2020961D0387822285CD30421D4 ++:1076F000584608F04DFA050005D103E0102017B0F8 ++:10770000BDE8F08FFFDF05F1140004F0FFFE401D1F ++:1077100020F00306A078012803D0022801D007201A ++:10772000EDE7218807AA584606F04FF830BB07A8B6 ++:1077300006F057F810BB07A806F053F848B99DF8B3 ++:107740002600012805D1BDF82400A0F524510239F6 ++:1077500002D04FF45050D2E7E068B0B1CDE902A0BA ++:107760000720009005AACDF804A00492A2882188E1 ++:10777000BDF81430584605F0B1FE10B1FEF7BDFC5F ++:10778000BDE7A168BDF8140008809DF81F00C00681 ++:1077900002D543F20140B2E70B9838B1A1780078E6 ++:1077A000012905D080071AD40820A8E74846A6E793 ++:1077B000C007F9D002208DF83C00A8684FF00009FE ++:1077C000A0B1697C4288714391420FD98AB2B3B2A9 ++:1077D000011D08F050F88046A0F800A006E0032044 ++:1077E0008DF83C00D5F800804FF001099DF820008D ++:1077F00010F0380F00D1FFDF9DF820002649C0F3BC ++:10780000C200084497F8231010F8010C884201D9EF ++:107810000F2074E72088ADF8400014A90095CDE949 ++:107820000191434607220FA95846FEF75DFE002846 ++:1078300091D19DF8500050B9A078012807D1687CFB ++:10784000B3B2704382B2A868011D08F028F8002086 ++:1078500055E770B5064615460C460846FEF70CFC83 ++:10786000002805D12A4621463046BDE8704075E41F ++:1078700070BD13E570B51E4614460D000ED06CB1F8 ++:10788000616859B160B10349C988814208D00720B5 ++:1078900070BD00004C02002072ED01001020F7E7DF ++:1078A0002068FEF7E9FB0028F2D13246214628463F ++:1078B000BDE87040FFF747BA70B515460C0006D01A ++:1078C00038B1FE490989814203D00720E0E7102042 ++:1078D000DEE72068FEF7D0FB0028D9D129462046F4 ++:1078E000BDE87040D6E570B5064686B00D46144634 ++:1078F00010460BF047FED0BB60680BF06AFEB0BBD1 ++:10790000A6F57F40FF3803D03046F9F78DFD80B1F2 ++:1079100028466946FEF7E3FC00280CD19DF81010BC ++:107920000F2008293CD2DFE801F008060606060A07 ++:107930000A0843F2020006B0AAE70320FBE79DF81D ++:107940000210012908D1BDF80010B1F5C05FF2D0D6 ++:107950006FF4C052D142EED09DF8061001290DD12E ++:10796000BDF80410A1F52851062907D200E028E04F ++:10797000DFE801F0030304030303DCE79DF80A10CA ++:1079800001290ED1BDF80810B1F5245FD3D0A1F5BF ++:1079900024510239CFD00129CDD0022901D1CAE723 ++:1079A000FFDF606878B9002305AA2946304606F053 ++:1079B00041F810B1FEF7A1FBBDE79DF81400800669 ++:1079C00001D41020B7E76188224628466368FFF794 ++:1079D000BFFDB0E72DE9F043814687B088461446E5 ++:1079E00010460BF0CFFD18B1102007B0BDE8F083B2 ++:1079F000002306AA4146484606F01CF818B100BF0D ++:107A0000FEF77BFBF1E79DF81800C00602D543F2B4 ++:107A10000140EAE70025072705A801950097029590 ++:107A2000CDE9035062884FF6FF734146484605F0A2 ++:107A30007FFF060013D160680BF0A4FD60B9606899 ++:107A40000195CDE90250009704952388628841464C ++:107A5000484605F06DFF0646BDF81400208030460C ++:107A6000CEE739B1954B0A889B899A4202D843F2F6 ++:107A7000030070471DE610B586B0904C0423ADF8A6 ++:107A80001430638943B1A4898C4201D2914205D953 ++:107A900043F2030006B010BD0620FBE7ADF810105E ++:107AA000002100910191ADF8003002218DF8021003 ++:107AB00005A9029104A90391ADF812206946FFF7C8 ++:107AC000F8FDE7E72DE9FC4781460E4608460BF036 ++:107AD00033FD88BB4846F9F7A7FC5FEA00080AD0E7 ++:107AE00098F80000222829D30421484608F050F8CD ++:107AF000070005D103E043F20200BDE8FC87FFDF89 ++:107B000007F1140004F019FD05463078012803D070 ++:107B1000022804D00720F0E7A8070FD502E015F0EF ++:107B20001C0F0BD0B079341DC00709D0E08838B1E4 ++:107B3000A0680BF001FD18B11020DEE70820DCE79B ++:107B400032782088002628B3A0F201130721112BD8 ++:107B500018D20CD2DFE803F00B090D0B1D0B121D20 ++:107B6000100B0B1D1D1D1D0B1D00022A11D10846F7 ++:107B7000C3E7012AFBD00CE02A0700E0EA06002A4E ++:107B8000F5DA06E0A0F5C0721F2A02D97D3A022A72 ++:107B9000EDD8C6B200F00EFF50B198F82300CDE941 ++:107BA0000006FA89234639464846FEF7E7FCA4E773 ++:107BB0001120A2E72DE9F04F8BB01F4615460C4669 ++:107BC00083460026F9F730FC28B10078222805D238 ++:107BD00008200BB094E543F20200FAE7B80801D0A0 ++:107BE0000720F6E7032F00D100274FF6FF79CCB12D ++:107BF000022D73D320460BF0ECFC30B904EB0508E2 ++:107C0000A8F101000BF0E5FC08B11020E1E7AD1E82 ++:107C1000AAB22146484605F0C2FF38F8021C884245 ++:107C20005CD1ADB22549B80702D58889401C00E077 ++:107C300001201FFA80F8F80701D08F8900E04F4635 ++:107C400005AA4146584605F0C0FD4FF0070A4FF01F ++:107C50000009ACB3204608E0408810283ED8361D05 ++:107C6000304486B2AE4239D2A01902884245F3D3DD ++:107C700054E000BF9DF8170002074FD584B304EB12 ++:107C80000608361DB8F80230B6B2102B26D89A195D ++:107C9000AA4223D8B8F8002091421FD1C00620D5AF ++:107CA000CDE900A90DF1080C0AAAA11948468CE8F3 ++:107CB0000700B8F800100022584603E04C020020EC ++:107CC0002CE00BE005F00AFC10B1FEF716FA80E795 ++:107CD000B8F80200BDF82810884202D00B2078E7DF ++:107CE00004E0B8F80200304486B206E0C00604D5CD ++:107CF0005846FEF775FC002888D19DF81700BDF89E ++:107D00001A1020F010008DF81700BDF81700ADF81C ++:107D10000000FF235846009A05F0B8FE05A805F0BC ++:107D200060FD18B9BDF81A10B942A3D9042158460C ++:107D300007F02EFF040000D1FFDFA2895AB1CDE980 ++:107D400000A94D46002321465846FEF717FC00289F ++:107D5000BDD1A5813DE700203BE72DE9FF4F8BB06A ++:107D60001E4617000D464FF0000412D0B00802D096 ++:107D700007200FB0C4E4032E00D100265DB10846F1 ++:107D80000BF01EFC28B93888691E08440BF018FC5B ++:107D900008B11020EDE7C74AB00701D5D18900E04E ++:107DA0000121F0074FF6FF7802D0D089401E00E095 ++:107DB000404686B206AA0B9805F007FD4FF0000971 ++:107DC0004FF0070B0DF1140A39E000BF9DF81B00BE ++:107DD000000734D5CDF80490CDF800B0CDF8089068 ++:107DE000CDE9039A434600220B9805F0A1FD60BB44 ++:107DF00005B3BDF814103A8821442819091D8A4298 ++:107E000030D3BDF81E2020F8022BBDF8142020F836 ++:107E1000022BCDE900B9CDE90290CDF810A0BDF854 ++:107E20001E10BDF8143000220B9805F081FD08B13A ++:107E300003209EE7BDF814002044001D84B206A86C ++:107E400005F0CFFC20B10A2806D0FEF756F990E7DE ++:107E5000BDF81E10B142B9D934B17DB13888A11C2A ++:107E6000884203D20C2084E7052082E72246294677 ++:107E7000404605F094FE014628190180A41C3C8070 ++:107E8000002076E710B504460BF07CFB08B110200B ++:107E900010BD8848C0892080002010BDF0B58BB08F ++:107EA0000D460646142103A816F0B0FD01208DF8FA ++:107EB0000C008DF8100000208DF81100ADF8145062 ++:107EC0003046F9F7B1FA48B10078222812D30421DC ++:107ED000304607F05DFE040005D103E043F20200E6 ++:107EE0000BB0F0BDFFDF04F11400074604F025FBE2 ++:107EF000800601D40820F3E7207C022140F0010035 ++:107F0000207409A80094CDE90110072203A9304686 ++:107F10006368FEF7E9FA20B1217C21F001012174A8 ++:107F2000DEE729463046FDF7A5FE08A9384604F0ED ++:107F3000F3FA00B1FFDFBDF82040172C01D2172063 ++:107F400000E02046A84201D92C4602E0172C00D2BE ++:107F5000172421463046FFF724FB21463046FDF723 ++:107F6000ABFB0020BCE7F8B51C4615460E46069F45 ++:107F700007F040FF2346FF1DBCB231462A4600945D ++:107F800007F02BFBF8BD70B50C4605460E212046C8 ++:107F900016F01AFD002020802DB1012D01D0FFDF49 ++:107FA00076E4062000E00520A07171E410B5488059 ++:107FB0000878134620F00F00001D20F0F0008030FC ++:107FC0000C4608701422194604F1080016F0C2FC91 ++:107FD00000F0F3FC3748046010BD2DE9F047DFF8EE ++:107FE000D890491D064621F0030117460C46D9F8E2 ++:107FF000000007F008FC050000D1FFDF4FF000088B ++:108000003560A5F800802146D9F8000007F0FBFB99 ++:10801000050000D1FFDF7560A5F800807FB104FB8B ++:1080200007F1091D0BD0D9F8000007F0ECFB0400A4 ++:1080300000D1FFDFB460C4F80080BDE8F087C6F867 ++:108040000880FAE72DE9F0411746491D21F00302A7 ++:10805000194D064601681446286807F0FFFB2246C2 ++:108060007168286807F0FAFB3FB104FB07F2121DA4 ++:1080700003D0B168286807F0F1FB042007F030FD59 ++:108080000446042007F034FD201A012804D1286892 ++:10809000BDE8F04107F0ACBBBDE8F08110B50C467F ++:1080A00005F05FFB00B1FFDF2046BDE81040FEF7A2 ++:1080B00024B800004C020020140000204FF0E02201 ++:1080C0004FF400410020C2F880111D4908701D497D ++:1080D00090020860704770B5194D04462878A04298 ++:1080E00002D00CB100B1FFDF2878A0420DD01649B4 ++:1080F000144A2C700020CCB1134E144B1436151FAB ++:10810000012C03D0022C08D0FFDF70BD08600220D4 ++:10811000086033604FF0407005E00860032008609D ++:1081200033604FF400001060286070BD0860086084 ++:108130004FF06070106070BD00B5FFDF00BD000043 ++:108140001800002008F5014000F500405C02002006 ++:1081500038B50C468288817B19B14189914200D99A ++:108160000A462280C188121D90B26A4606F054FE6B ++:10817000BDF80000032800D30320C1B2208800F01E ++:1081800095FF38BD38B50C468288817B19B10189CD ++:10819000914200D90A462280C188121D90B26A46D7 ++:1081A00006F03AFEBDF80000022800D30220C1B25A ++:1081B000208800F07BFF401CC0B238BD2DE9FF5F76 ++:1081C0000C46FB4981462C22D1E90201CDE902018E ++:1081D00009F1030020F00301C91C21F00301009103 ++:1081E0006846114607F0F1FAF24E002C02D1F2492E ++:1081F000009A8A60009901440091357E05F10105DD ++:1082000004D1E8B209F0ECF900B1FFDF00984FF0BB ++:10821000000B00EB0510C01C20F0030100915CB9BD ++:10822000307A727A81F800B01044C2B2B08B80B25A ++:1082300005F01FF900B1FFDF0098F16908440090D4 ++:108240002146684600F0FCFE0098C01C20F00300A8 ++:108250000090737AB27A317A04B1002007F0ABFB58 ++:108260000099084400902146684600F02AFF002744 ++:108270003D46B24696F801800CE0284600F0C3FE69 ++:10828000064681788088FDF7AEFA71786D1C00FB98 ++:108290000177EDB24545F0D10098C01C20F00300F5 ++:1082A000009004B100203946FDF7A8FA0099002794 ++:1082B000084400903D469AF801800CE0284600F002 ++:1082C000A2FE0646C1788088FEF715FC71786D1C09 ++:1082D00000FB0177EDB24545F0D10098C01C20F0BD ++:1082E0000300009004B100203946FEF70DFC009910 ++:1082F0004FF000080844009045469AF801700EE0DF ++:10830000284600F080FE0646807B30B106F108006A ++:1083100001F0A7FE727800FB02886D1CEDB2BD4231 ++:10832000EED10098C01C20F00300009004B10020A2 ++:10833000414601F09AFE00990844C01D20F0070252 ++:108340000092ECBB9D49002003F055FA05F0F2FBCA ++:1083500099484178C06805F085FD97481030C0788D ++:108360008DF8040010B1012804D005E001208DF83B ++:10837000040001E08DF804B001A805F0B5FEF9F79E ++:1083800072FF8C4802AA00210C30FAF755FE00B1AA ++:10839000FFDF9AF81900FEF720FF00B1FFDF8548E4 ++:1083A0004FF4F671443016F031FB8248042144301A ++:1083B00080F8E91180F8EA11062180F8EB1100E05D ++:1083C00001E003210171009904B0A1EB0900BDE8AF ++:1083D000F09F70B5774C06464434207804EB401586 ++:1083E000E078083590B9A01990F8E80100280ED07F ++:1083F000A0780F2800D3FFDF2021284616F006FBC7 ++:10840000687866F3020068700120E070284670BD4D ++:108410002DE9F04105460C460027007805219046DD ++:108420003E46B1EB101F00D0FFDF287A50B1012883 ++:108430000ED0FFDFA8F800600CB127806680002016 ++:10844000BDE8F0810127092674B16888A08008E0A2 ++:108450000227142644B16888A0802869E060A88AB1 ++:108460002082287B2072E5E7A8F80060E7E710B5D6 ++:10847000514C6068C11D21F00701814200D0FFDF2F ++:108480004C480121002201704270017203234372A3 ++:1084900081720273052282821F22C282417348A226 ++:1084A00002610A22027641764FF4B061C1616168CF ++:1084B000416010BD30B5404C1568636810339D4273 ++:1084C00002D20420136030BD3A4B5D785A6802EB4B ++:1084D0000512107051700320D08017209080012069 ++:1084E000D0709070002090735878401C587060686D ++:1084F00010306060002030BD70B506462D48002465 ++:10850000457807E0204600F07EFD0178B14204D0B6 ++:10851000641CE4B2AC42F5D1002070BDF7B507464B ++:1085200008780C4610B3FFF7E7FF0546A7F12006D1 ++:10853000202F06D0052E19D2DFE806F00F2B2B15C1 ++:108540001A0000F06BFD0DB1697800E00021401ABF ++:10855000A17880B20844FF2808D8A07830B1A0885C ++:10856000022831D202E0608817282DD20720FEBDF4 ++:10857000207AE0B161881729F8D3A1881729F5D3AB ++:10858000A1790029F2D0E1790029EFD0402804D95F ++:10859000ECE7242F18D1207A48B161884FF6FB70A0 ++:1085A000814202D8A18881420ED90420FEBD0BE091 ++:1085B00078ED0100680300201C000020000000206E ++:1085C0006E5246357800000065B9207802AA012174 ++:1085D000FFF770FF0028E9D12078FFF78DFF050035 ++:1085E00000D1FFDF052E18D2DFE806F0030B0E08DE ++:1085F0001100A0786870A088E8800FE06088A880EB ++:108600000CE0A078A87009E0A078E87006E054F8C3 ++:10861000020FA8606068E86000E0FFDF0020C5E7A7 ++:108620001E2829D00EDC0C2822D008DC092825D2EF ++:10863000DFE800F013241524241C1C181A0012284B ++:108640001CD119E0302817D018DDA0F13A0003281A ++:1086500014D2DFE800F00F1309000020704743F246 ++:1086600002007047042070470D2070470F207047AC ++:10867000082070471120704707207047032070477B ++:1086800010B5007800F0010006F0BDFBBDE8104019 ++:10869000C6E70EB5017801F001018DF800104178B0 ++:1086A00001F001018DF801100178C1F340018DF84E ++:1086B00002104178C1F340018DF803100178890858 ++:1086C0008DF80410417889088DF8051081788DF8AF ++:1086D0000610C1788DF8071000798DF808006846FB ++:1086E00005F021FDFFF79CFF0EBD2DE9F84FDFF8E7 ++:1086F000F883FE4C00261FE0012000F025FD01203C ++:10870000FFF767FE05462C214746D8F8080007F01A ++:108710007AF8686000B9FFDF686805F0D6FBA8B199 ++:108720002846F9F7E3F8284600F014FD20B92C227A ++:108730006968B86807F092F894F9E9010428DBDA6F ++:10874000022007F0CDF907460025A6E02C22696833 ++:10875000D8F8080007F082F8F2E7B8F802104046AF ++:10876000491C89B2A8F80210B94201D30021418006 ++:108770000221B8F8020007F00BFA002865D0B8F81B ++:108780000200694606F0B2FAFFF74AFF00B1FFDFC8 ++:108790009DF8000078B1B8F8020007F03DFB5FEAF1 ++:1087A000000900D1FFDF484606F0ABFD18B1B8F86C ++:1087B000020002F0FDF8B8F8020007F01BFB5FEAC8 ++:1087C000000900D1FFDF484606F093FDE8BB032116 ++:1087D000B8F8020007F0DCF95FEA000B48D1FFDFD0 ++:1087E00046E000BFDBF8100010B10078FF2849D048 ++:1087F000022000F0A9FC0220FFF7EBFD824648466C ++:1088000006F083FECAF8040000B9FFDFDAF80400BE ++:1088100006F04BFF002100900170B8F8021050469E ++:10882000AAF8021001F0CAFD484606F040FF00B960 ++:10883000FFDF504600F08EFC18B99AF801000007DF ++:1088400004D50099CBF8101012E024E0DBF81000FA ++:1088500038B10178491C11F0FF01017008D1FFDF28 ++:1088600006E000221146484600F0CBFB00B9FFDFCE ++:1088700094F9EA01022805DBB8F8020001F063FD73 ++:108880000028AFD194F9E901042804DB484606F03A ++:1088900072FF00B101266D1CEDB2BD4204D294F905 ++:1088A000EA010228BFF659AF002E7FF423AFBDE8DE ++:1088B000F84F032000F048BC10B58B4CE06008680E ++:1088C0002061AFF2D91002F0FEFF607010BD874842 ++:1088D0000021443801708448017085494160704727 ++:1088E00070B505464FF080500C46D0F8A410491CD6 ++:1088F00005D1D0F8A810C9430904090C0BD050F8D1 ++:10890000A01F01F001012970416821608068A080EA ++:10891000287830B970BD062120460AF0E8FA012017 ++:108920002870607940F0C000607170BD70B54FF084 ++:1089300080540D46D4F88010491C0BD1D4F8841013 ++:10894000491C07D1D4F88810491C03D1D4F88C10E5 ++:10895000491C0CD0D4F880100160D4F88410416018 ++:10896000D4F888108160D4F88C10C16002E0102126 ++:108970000AF0BDFAD4F89000401C0BD1D4F8940052 ++:10898000401C07D1D4F89800401C03D1D4F89C00B7 ++:10899000401C09D054F8900F286060686860A06897 ++:1089A000A860E068E86070BD2846BDE8704010210E ++:1089B0000AF09DBA4D4800790BE570B54B4CE07854 ++:1089C00030B3207804EB4010407A00F007002044D8 ++:1089D00090F9E801002800DCFFDF2078002504EB97 ++:1089E0004010407A00F00700011991F8E801401E9C ++:1089F00081F8E8012078401CC0B220700F2800D117 ++:108A00002570A078401CA0700AF0ACF9E57070BD2C ++:108A1000FFDF70BD3EB50546032107F0B9F80446F7 ++:108A2000284607F0E7F9054604B9FFDF206918B1C9 ++:108A30000078FF2800D1FFDF01AA6946284600F030 ++:108A4000E0FA60B9FFDF0AE0002202A9284600F040 ++:108A5000D8FA00B9FFDF9DF8080000B1FFDF9DF8EC ++:108A60000000411E8DF80010EED220690199884265 ++:108A700001D1002020613EBD70B50546A0F57F40C4 ++:108A80000C46FF3800D1FFDF012C01D0FFDF70BDA5 ++:108A9000FFF790FF040000D1FFDF207820F00F00E7 ++:108AA000401D20F0F00050302070658000202072C2 ++:108AB00001202073BDE870407FE72DE9F0411646A4 ++:108AC0000D460746FFF776FF040000D1FFDF207850 ++:108AD00020F00F00401D20F0F00050302070678023 ++:108AE00001202072286805E01C000020AC03002053 ++:108AF000281200202061A888A0822673BDE8F041DA ++:108B00005BE77FB5FFF7F8FC040000D1FFDF02A9A7 ++:108B10002046FFF71DFB054603A92046FFF732FB61 ++:108B20008DF800508DF80100BDF80800001DADF86B ++:108B30000200BDF80C00001DADF80400E088ADF89F ++:108B40000600684606F049F9002800D0FFDF7FBD27 ++:108B50002DE9F047DFF8F8930546002799F8000063 ++:108B600010B10820BDE8F08728460AF00BFD08B1D7 ++:108B70001020F7E7F74C207808B9FFF778FC607A07 ++:108B8000217A0844C6B200F049FAB04207D2301A3E ++:108B9000C1B22A460020FFF78DFC0700E2D1D9F8C8 ++:108BA00004004E46C01C20F00300C9F8040000F089 ++:108BB00044FB716800EB010801214046FFF7FEFA13 ++:108BC000064629684044884202D8B6F5803F15D34E ++:108BD00028600020FFF790FC05000DD005F1130080 ++:108BE000D9F8041020F003004E46884200D0FFDF81 ++:108BF0006078401E607075600420B3E70021404635 ++:108C0000FFF7DCFA0446A64200D0FFDF04EB0801C0 ++:108C1000C9F8041029604FF6FF71A9F8021001216C ++:108C200089F8001038469DE72DE9F0410446C84810 ++:108C300017460D46007810B10820BDE8F0810846BF ++:108C40000AF07AFC08B11020F7E7C24E307808B974 ++:108C5000FFF70DFC601E1E2807D8012C3FD1287895 ++:108C6000FE283CD830760020E7E7A4F120001F283A ++:108C700005D8E0B23A462946BDE8F0414EE4A4F1F9 ++:108C800040004FF000081F2821D8402C02D0412C72 ++:108C900025D117E0687829780C18A97881421ED868 ++:108CA000FF2C08D808F080FE07460AF014F8381A9E ++:108CB000801EA04201DA1220BFE728883081A87800 ++:108CC000B07224E02846BDE8F04100F06BBAA4F190 ++:108CD000A0001F2803D8A02C03D0A12C06D0072069 ++:108CE000ABE7287800F00100707610E029680920D1 ++:108CF000F829A2D38A07A0D1727B02F00302012ACD ++:108D000004D1F28AD73293B28B4296D8F1614046B1 ++:108D100093E72DE9F04781460E4608460AF032FCFB ++:108D200048B948460AF04CFC28B909F1030020F084 ++:108D30000301494501D0102014E786484FF0000A8E ++:108D40004430817869B14178804600EB41140834A1 ++:108D5000378832460021204600F00AFA050004D088 ++:108D600027E0A6F800A00520FCE6B9F1000F24D00A ++:108D70003088B84201D90C251FE0607800F0070563 ++:108D8000284600F0E1F908EB0507324697F8E801BC ++:108D90004946401C87F8E801204607F5F47700F0C3 ++:108DA000E7F905463878401E3870032000F0CCF90A ++:108DB0002DB10C2D01D0A6F800A02846D2E660788F ++:108DC000634E00F00701012923D002290CD00329AA ++:108DD00033D0FFDF98F801104046491CC9B288F82B ++:108DE00001100F2934D035E0616821B1000702D4A9 ++:108DF0006088FFF70FFE98F8EA014746012802D184 ++:108E0000707802F07FFD97F9EA010428E2DBFFDFCA ++:108E1000E0E7616819B12C22B06806F01FFD98F8F0 ++:108E2000E9014746032802D1707802F06BFD97F9FB ++:108E3000E9010428CEDBFFDFCCE7C00602D560885D ++:108E4000FFF7E8FD98F9EB010628C3DBFFDFC1E778 ++:108E500080F801A08178491E8170617801F00701D6 ++:108E600001EB080090F8E811491C80F8E811A4E72C ++:108E700070B50D4604460AF05FFB18B928460AF0A3 ++:108E800081FB08B1102070BD29462046BDE8704026 ++:108E900008F0DDBB70B5044615460E4608460AF0DC ++:108EA0004BFB18B928460AF06DFB08B1102070BDC5 ++:108EB000022C03D0102C01D0092070BD2A46314667 ++:108EC000204608F0E7FB0028F7D0052070BD70B5FC ++:108ED00014460D4606460AF02FFB38B928460AF01C ++:108EE00051FB18B920460AF06BFB08B1102070BD89 ++:108EF00022462946304608F0ECFB0028F7D0072030 ++:108F000070BD3EB504460AF03DFB08B110203EBDE1 ++:108F1000684605F097F8FFF783FB0028F7D19DF826 ++:108F200006002070BDF808006080BDF80A00A0802F ++:108F300000203EBD70B505460C4608460AF040FBD1 ++:108F400020B95CB120680AF01DFB28B1102070BD6B ++:108F50001C00002068030020A08828B12146284674 ++:108F6000BDE87040FDF746BE0920F0E770B5044645 ++:108F70000D4608460AF0E0FA30B9601E1E2814D8E3 ++:108F800028460AF0D9FA08B11020E0E7022C01D9EE ++:108F90000720DCE704B9FFDFDC4800EB840050F871 ++:108FA000041C2846BDE870400847A4F120001F2893 ++:108FB000EED829462046BDE87040F9F7C8B870B52C ++:108FC00004460D4608460AF0DDFA30B9601E1E2838 ++:108FD0000DD828460AF0B0FA08B11020B7E7012CE6 ++:108FE00001D0022C01D10620B1E70720AFE7A4F1A0 ++:108FF00020001F28F9D829462046BDE87040F9F71F ++:1090000005B906F045B930B5C14D04466878A042AF ++:1090100000D8FFDF686800EB041030BD70B5BC48B5 ++:1090200000252C46467807E02046FFF7ECFF407805 ++:10903000641C2844C5B2E4B2B442F5D1284686E7A0 ++:109040002DE9F0410C46064600F02FF9074630683E ++:10905000C01C20F0030232601CBBAD483B46092116 ++:1090600020300AF043F9002408E0092C11D2DFE88F ++:1090700004F005070509090B05050700A54804E0EC ++:10908000A54802E0A54800E0A5480AF04FF90546CA ++:1090900000E0FFDFA54200D0FFDF641CE4B2092C32 ++:1090A000E3D3306800EB07103060C6E5021D514382 ++:1090B000452900D245210844C01CB0FBF2F0C0B2E3 ++:1090C00070472DE9FC5F064691484FF000088B463B ++:1090D0004746444690F8019022E02046FFF793FF70 ++:1090E000050000D1FFDF687869463844C7B22846DA ++:1090F000FFF72EF8824601A92846FFF743F80346FA ++:10910000BDF804005246001D81B2BDF80000001DEC ++:1091100080B206F0BBFD6A78641C00FB0288E4B2F2 ++:109120004C45DAD13068C01C20F003003060BBF140 ++:10913000000F00D000204246394606F0B5FD3168E8 ++:1091400008443060BDE8FC9F71494431087100203B ++:10915000C87070476E494431CA782AB10A7801EB69 ++:1091600042110831814201D0012070470020704730 ++:109170002DE9F04106460078154600F00F04002066 ++:109180001080601E0F46052800D3FFDF5F482A4687 ++:10919000103000EB8400394650F8043C3046BDE8FE ++:1091A000F041184738B50446407800F00300012824 ++:1091B00003D002280BD0072038BD606858B10AF0F0 ++:1091C00008FAD0B960680AF0FBF920B915E06068C8 ++:1091D0000AF0B2F988B969462046FBF771F9002810 ++:1091E000EAD1607800F00300022808D19DF8000061 ++:1091F00028B160680AF0E4F908B1102038BD61892F ++:10920000F8290DD8208988420AD8607800F0030236 ++:109210003F48012A06D1D731C26989B28A4201D2B8 ++:10922000092038BD94E80E0000F10C0585E80E0019 ++:109230000AB900218182002038BD2DE9F05F4FF08E ++:1092400000093348C8464F464E464D46CB464C462D ++:1092500090F801A011E02046FFF7D5FE4178827812 ++:1092600009F10109884412FB0177C27812FB0166FB ++:10927000807B10FB0155641CE4B25445EBD10BEB31 ++:10928000890000EBC80000EB870000EB860000EBD4 ++:10929000C5011F48027A01EBC201427A807A01EBD4 ++:1092A000C20101EBC000BDE8F09F2DE9F047DFF8F7 ++:1092B00060900026344699F8080099F8092099F83A ++:1092C00001700244D5B299F80A20104400F0FF085A ++:1092D00008E02046FFF797FE817B407811FB00668F ++:1092E000641CE4B2BC42F4D199F8080099F8091062 ++:1092F000401C284428444044401C01B1012108443A ++:109300008419FF2C00D9FFDFE0B22BE478ED0100D7 ++:1093100068030020E11F000037A10000B1B9000080 ++:10932000D31301002DE9F04107461446884608464C ++:1093300001F020FD064608EB88001C22796802EB4C ++:10934000C0000D18688C58B14146384601F01AFD2E ++:10935000014678680078C200082305F120000CE07F ++:10936000E88CA8B14146384601F013FD0146786803 ++:1093700008234078C20005F1240006F0C6FA38B18F ++:10938000062121726681D0E90010C4E9031009E0CA ++:10939000287809280BD00520207266816868E06073 ++:1093A000002028702046BDE8F04101F0D9BC07201C ++:1093B00020726681F4E72DE9F04116460D46074616 ++:1093C000406801EB85011C2202EBC10144182046D4 ++:1093D00001F001FD40B10021708865F30F2160F3B9 ++:1093E0001F4108200AF05CF8092020703246294607 ++:1093F0003846BDE8F04195E72DE9F0410E460746B5 ++:1094000000241C21F07816E004EB8403726801EB61 ++:10941000C303D25C6AB1FFF7CDFA050000D1FFDFCC ++:109420006F802A4621463046FFF7C5FF0120BDE880 ++:10943000F081641CE4B2A042E6D80020F7E770B5E2 ++:10944000064600241C21C0780AE000BF04EB840318 ++:10945000726801EBC303D5182A782AB1641CE4B200 ++:10946000A042F3D8402070BD2821284615F0ACFA60 ++:10947000706880892881204670BD70B50346002041 ++:109480001C25DC780DE000BF00EB80065A6805EB78 ++:10949000C6063244167816B1128A8A4204D0401C9D ++:1094A000C0B28442F0D8402070BDF0B50446002020 ++:1094B0001C26E5780EE000BF00EB8007636806EB32 ++:1094C000C7073B441F788F4202D15B78934204D098 ++:1094D000401CC0B28542EFD84020F0BD0078032880 ++:1094E00001D000207047012070470078022801D089 ++:1094F00000207047012070470078072801D0002025 ++:109500007047012070472DE9F041064688461078E3 ++:10951000F1781546884200D3FFDF2C781C27641CA5 ++:10952000F078E4B2A04201D8201AC4B204EB84015E ++:10953000706807EBC1010844017821B141468847B2 ++:1095400008B12C7073E72878A042E8D14020287039 ++:109550006DE770B514460B880122A240134207D173 ++:1095600013430B8001230A22011D06F098F90470B1 ++:1095700070BD2DE9FF4F81B00878DDE90E7B9A467A ++:1095800091460E4640072CD4019806F045FC040095 ++:1095900000D1FFDF07F1040820461FFA88F105F02B ++:1095A00084FD050000D1FFDF204629466A4605F00C ++:1095B000CEFF0098A0F80370A0F805A0284606F09A ++:1095C00074F8017869F306016BF3C7110170204646 ++:1095D0001FFA88F105F0ACFD00B9FFDF019804F037 ++:1095E000AEFB06EB0900017F491C017705B0BDE821 ++:1095F000F08F2DE9F84F0E469A4691460746032113 ++:1096000006F0C6FA0446008DDFF8B485002518B1CF ++:1096100098F80000B0421ED1384606F0FDFB070066 ++:1096200000D1FFDF09F10401384689B205F03DFDA4 ++:10963000050010D0384629466A4605F088FF009894 ++:1096400000210A460180817004F030FC0098C01DA2 ++:10965000CAF8000021E098F80000B04216D104F1E9 ++:10966000260734F8341F012000FA06F911EA090F21 ++:1096700000D0FFDF2088012340EA090020800A2271 ++:10968000391D384606F026F9067006E0324604F128 ++:10969000340104F12600FFF75CFF0A2188F800106E ++:1096A0002846BDE8F88FFEB514460D46064602ABC7 ++:1096B0000C220621FFF79DFF002826D0029968782A ++:1096C00012220A70801C487008224A80A8702088E4 ++:1096D00088806088C880A0880881E088488100244C ++:1096E0000C20CDE900040523062229463046FFF769 ++:1096F00040FF214666F31F41F0230022012009F0BC ++:1097000025FE6878801C68700120FEBDFEB51446F9 ++:109710000D460622064602AB1146FFF76AFF0028F7 ++:1097200012D0029B132000211870A87858700220D4 ++:1097300058809C800620CDE9000102460523294679 ++:109740003046FFF716FF0120FEBD2DE9FE430C4613 ++:10975000804644E002AB0E2207214046FFF749FF56 ++:10976000002841D060681C2267788678BF1C06EB11 ++:10977000860102EBC101451802981421017047705F ++:109780000A214180698A0181E98A4181A988818011 ++:10979000A9898181304601F0EDFA0299052307225B ++:1097A000C8806F700420287000250E20CDE90005C8 ++:1097B00021464046FFF7DDFE294666F30F2168F398 ++:1097C0001F41F0230022082009F0C0FD6078FD4908 ++:1097D000801C607062682046921CFFF794FE6068EF ++:1097E00080784028B6D10120BDE8FE83FEB50D4645 ++:1097F000064638E002AB0E2207213046FFF7F9FE9D ++:10980000002835D068681C23C17801EB810203EB86 ++:10981000C2028418029815220270627842700A22ED ++:109820004280A2894281A2888281084601F0A2FA80 ++:10983000014602988180618AC180E18A0181A08805 ++:10984000B8B10020207000210E20CDE900010523D1 ++:10985000072229463046FFF78CFE6A68DA49284617 ++:10986000D21CFFF750FE6868C0784028C2D10120A2 ++:10987000FEBD0620E6E72DE9FE430C46814644E0A6 ++:10988000204601F092FAD0B302AB082207214846E5 ++:10989000FFF7AFFE0028A7D060681C226578067924 ++:1098A000AD1C06EB860102EBC10147180298B7F820 ++:1098B000108006210170457004214180304601F07E ++:1098C00059FA0146029805230722C180A0F80480B6 ++:1098D0007D70082038700025CDE9000521464846F6 ++:1098E000FFF747FE294666F30F2169F31F41F02376 ++:1098F0000022082009F02AFD6078801C60706268F0 ++:10990000B2492046121DFFF7FEFD6068017940292B ++:10991000B6D1012068E72DE9F34F83B00E4680E011 ++:10992000304601F042FA002875D071681C2091F889 ++:10993000068008EB880200EBC2000C184146304656 ++:1099400001F027FA0146A078C30070684078C20091 ++:1099500004F1240005F0F5FF07468088E18B401AEA ++:1099600080B2002581B3AA46218B814200D80846E7 ++:109970008146024602AB07210398FFF73AFE010039 ++:1099800028D0BAF1000F03D0029AB88802251080BF ++:109990008B46E28B3968A9EB05001FFA80FA0A446E ++:1099A0000398009206F038FAED1D009A5946534686 ++:1099B000009505F046FEE08B504480B2E083B98804 ++:1099C000884209D1012508E0FFE7801C4FF0010A19 ++:1099D00080B2C9E7002009E60025CDE90095238A79 ++:1099E000072231460398FFF7C4FDE089401EE0815D ++:1099F0008DB1A078401CA0707068F178427811FB9E ++:109A000002F1CAB2816901230E3005F048FF80F8E7 ++:109A100000800020E08372686D493046921DFFF798 ++:109A200072FD7068817940297FF47AAF0120DDE50D ++:109A300070B5064648680D4614468179402910D114 ++:109A400004EB84011C2202EBC101084401F0E4F99B ++:109A5000002806D06868294684713046BDE8704009 ++:109A600059E770BDFEB50C460746002645E0204686 ++:109A700001F09BF9D8B360681C22417901EB8101A8 ++:109A800002EBC1014518688900B9FFDF02AB08226B ++:109A900007213846FFF7ADFD002833D002996078E2 ++:109AA00016220A70801C4870042048806068407943 ++:109AB00001F060F901460298052307228180698937 ++:109AC000C1800820CDE9000621463846FFF751FD48 ++:109AD0006078801C6070A88969890844B0F5803F6F ++:109AE00000D3FFDFA88969890844A8816E81626874 ++:109AF00038492046521DFFF706FD6068417940292C ++:109B0000B5D10120FEBD30B5438C458BC3F3C704EE ++:109B1000002345B1838B641EED1AC38A6D1E1D445C ++:109B200095FBF3F3E4B22CB1008918B1A04200D840 ++:109B3000204603444FF6FF70834200D30346138050 ++:109B40000C7030BD2DE9FC41074616460D464868AD ++:109B500002EB86011C2202EBC10144186A4601A9EE ++:109B60002046FFF7D0FFA089618901448AB2BDF881 ++:109B70000010914212D0081A00D500206081686858 ++:109B8000407940280AD1204601F03CF9002805D050 ++:109B90006868294646713846FFF764FFBDE8FC81D6 ++:109BA0002DE9FE4F8946804615465088032105F071 ++:109BB000EFFF8346B8F8020040280DD240200CE0A9 ++:109BC00030000020DD940000EB940000F9940000C8 ++:109BD00019AE000005AE0000403880B28246014652 ++:109BE000584601F0E2F800287ED00AEB8A001C22D9 ++:109BF000DBF8041002EBC0000C18204601F0EBF873 ++:109C0000002877D1B8F80000E18A88423CD8A189C1 ++:109C1000D1B348456ED100265146584601F0B2F8FE ++:109C2000218C0F18608B48B9B9F1020F62D3B8F8D4 ++:109C300004006083618A884226D80226A9EB0600C8 ++:109C40001FFA80F9B888A28B801A002814DD4946D3 ++:109C5000814500DA084683B26888696802913968EC ++:109C60000A44CDE9003206F0C5F8DDE90121F61D10 ++:109C7000009B009605F0B1FCA18B01EB090080B2BE ++:109C8000A083618B884207D9688803B05246594641 ++:109C9000BDE8F04F01F0DDB81FD14FF00900287288 ++:109CA000B8F802006881D7E90001C5E90401608BBA ++:109CB000A881284601F054F85146584601F062F850 ++:109CC0000146DBF8040008230078C20004F12000FC ++:109CD00005F01BFE0020A0836083A0890AF0FF022C ++:109CE000401EA081688800E004E003B05946BDE84A ++:109CF000F04F27E7BDE8FE8F2DE9F04106461546F7 ++:109D00000F461C46184609F017FC18B9206809F0E0 ++:109D100039FC08B1102015E47168688C0978B0EB43 ++:109D2000C10F01D313200DE43946304601F02AF863 ++:109D30000146706808230078C20005F1200005F094 ++:109D4000AEFDD4E90012C0E900120020E3E710B52F ++:109D50000446032105F01CFF0146007800F00300D3 ++:109D6000022805D02046BDE8104001F114029AE413 ++:109D70008A8A2046BDE81040C8E470B50446032135 ++:109D800005F006FF054601462046FFF774FD002852 ++:109D900016D029462046FFF765FE002810D0294638 ++:109DA0002046FFF723FD00280AD029462046FFF76A ++:109DB000CCFC002804D029462046BDE87040AAE526 ++:109DC00070BD2DE9F0410C4680461EE0E1784278F6 ++:109DD00011FB02F1CAB2816901230E3005F095FD35 ++:109DE000077860681C22C179491EC17107EB8701A1 ++:109DF000606802EBC10146183946204600F0D5FFE5 ++:109E000018B1304600F0E0FF20B16068C179002948 ++:109E1000DCD180E7FEF7CEFD050000D1FFDF0A2090 ++:109E20002872384600F0A6FF68813946204600F0C7 ++:109E3000B0FF0146606808234078C20006F12400A4 ++:109E400005F063FDD0E90010C5E90310A5F8028014 ++:109E5000284600F085FFB07800B9FFDFB078401EDB ++:109E6000B07058E770B50C460546032105F090FE2A ++:109E700001464068C2792244C2712846BDE870405C ++:109E80009FE72DE9FE4F8246507814460F464FF06B ++:109E9000000800284FD0012807D0022822D0FFDF79 ++:109EA0002068B8606068F86024E702AB0E220821E1 ++:109EB0005046FFF79EFB0028F2D00298152105239B ++:109EC0000170217841700A214180C0F80480C0F8F7 ++:109ED0000880A0F80C80628882810E20CDE90008FD ++:109EE000082221E0A678304600F044FF054606EB44 ++:109EF00086012C22786802EBC1010822465A02AB87 ++:109F000011465046FFF775FB0028C9D0029807217B ++:109F10000170217841700421418008218580C6802C ++:109F2000CDE9001805230A4639465046FFF721FBC4 ++:109F300087F80880DEE6A678022516B1022E13D037 ++:109F4000FFDF2A1D914602AB08215046FFF751FB67 ++:109F50000028A5D002980121022E017021784170BD ++:109F60004580868002D005E00625EAE7A188C18009 ++:109F7000E1880181CDE90098052308223946504641 ++:109F8000D4E710B50446032105F002FE014600F1B6 ++:109F900008022046BDE8104073E72DE9F05F0C464B ++:109FA00001281DD0957992F80480567905EB85013A ++:109FB0001F2202EBC10121F0030B08EB060111FB8C ++:109FC00005F14FF6FF7202EAC10909F1030115FB21 ++:109FD0000611F94F21F0031A40B101283DD124E0C8 ++:109FE0006168E57891F800804E78DFE75946786837 ++:109FF00005F009FC606000B9FFDF5946606814F0A5 ++:10A0000005FDE5705146786805F0FDFB6168486123 ++:10A0100000B9FFDF6068426902EB09018161606895 ++:10A0200080F800806068467017E0606852464169B9 ++:10A03000786805F013FC5A466168786805F00EFCF4 ++:10A04000032005F04DFD0446032005F051FD201AC4 ++:10A05000012802D1786805F0CBFB0BEB0A00BDE8C4 ++:10A06000F09F02460021022097E773B5D24D0A20E7 ++:10A070002870009848B100244FEA0D0005F0A5FBB8 ++:10A08000002C01D1009969607CBD01240020F5E716 ++:10A0900070B50C4615463821204614F0B7FC012651 ++:10A0A00066700A2104F11C0014F0B0FC05B9FFDF52 ++:10A0B000297A207861F301002070A879002817D050 ++:10A0C0002A4621460020FFF768FF6168402088701B ++:10A0D0006168C870616808716168487161688871F9 ++:10A0E000616828880881616868884881606886811D ++:10A0F00070BDC878002802D0002201204DE77047CB ++:10A1000070B50546002165F31F41012009F0C8F92B ++:10A110000321284605F03CFD040000D1FFDF214665 ++:10A120002846FFF769F9002804D0207840F0100095 ++:10A130002070012070BD2DE9FF4180460E460F0CB6 ++:10A14000FEF738FC050007D06F800321384605F084 ++:10A150001FFD040008D106E004B03846BDE8F04118 ++:10A160001321F8F711BCFFDFB8F1010F05D0B8F1EA ++:10A17000080F18D0FFDFBDE8FF8120782A4620F0C5 ++:10A18000080020700020ADF8020002208DF80000C9 ++:10A190004FF6FF70ADF80400ADF80600694638468A ++:10A1A000F7F781FFE7E7C6F3072101EB81021C23E4 ++:10A1B000606803EBC202805C042803D008280AD040 ++:10A1C000FFDFD8E7012000904FF440432A462046A5 ++:10A1D00000F008FECFE704B02A462046BDE8F04173 ++:10A1E000FFF7E9B82DE9F05F0027B0F80A90904634 ++:10A1F0000C4605463E46B9F1400F01D2402001E031 ++:10A20000A9F140001FFA80FA287AC01E08286BD2F4 ++:10A21000DFE800F00D04192058363C47722710265D ++:10A22000002C6CD0D5E90301C4E902015CE0702781 ++:10A230001226002C63D00A2205F10C0104F108005B ++:10A2400014F088FB50E071270C26002C57D0E868EA ++:10A25000A06049E0742710269CB3D5E90301C4E946 ++:10A2600002016888032105F093FC8346FEF7A2FBF8 ++:10A2700002466888508051465846FFF753F833E04D ++:10A2800075270A26ECB1A88920812DE076271426AF ++:10A29000BCB105F10C0004F1080307C883E807000E ++:10A2A00022E07727102664B1D5E90301C4E9020151 ++:10A2B0006888032105F06CFC01466888FFF781FD82 ++:10A2C00012E01CE073270826CCB16888032105F052 ++:10A2D0005FFC01460078C00606D56888FFF78CF859 ++:10A2E00010B96888F7F7E6FAA8F800602CB1278063 ++:10A2F000A4F8069066806888A0800020AFE6A8F8E1 ++:10A300000060FAE72DE9FC410C461E4617468046E0 ++:10A31000032105F03DFC05460A2C0AD2DFE804F0D3 ++:10A3200005050505050509090907042303E00623BA ++:10A3300001E0FFDF0023CDE90076224629464046B2 ++:10A34000FFF717F92AE438B50546A0F57F40FF3836 ++:10A3500030D0284605F04EFD040000D1FFDF204636 ++:10A3600005F0D3F8002815D001466A46204605F0CE ++:10A37000EEF800980321B0F80540284605F008FCE7 ++:10A380000546052C03D0402C05D2402404E0007A79 ++:10A3900080B1002038BD403CA4B2214600F005FD4C ++:10A3A00040B1686804EB84013E2202EBC101405ACF ++:10A3B0000028EFD0012038BD300000202DE9F04FFB ++:10A3C000044689B0408805F015FD050000D1FFDF87 ++:10A3D00006AA2846616800F0C1FC069D001F81B2F4 ++:10A3E00035F8032F6B888A4205D1042B0AD0052B40 ++:10A3F0001DD0062B15D022462846FFF7D1FB09B009 ++:10A40000BDE8F08F16462D1D224629463046FBF743 ++:10A410001BFC0828F3D1224629463046FCF731FCC4 ++:10A42000EDE76088291D6368F9F7B8FCE7E7174690 ++:10A430006088032105F0ACFB4FF000088DF8048024 ++:10A440000646ADF80680042FD9D36A79002AD6D003 ++:10A4500028794FF6FF794FF01C0A13282CD008DC1E ++:10A46000012878D0062847D0072875D0122874D143 ++:10A4700006E0142872D0152871D016286DD1ACE1F1 ++:10A480000C2F6AD1307800F00301022965D140F029 ++:10A49000080030706879B07001208DF804002889B8 ++:10A4A000ADF808006889ADF80A00A889ADF80C007D ++:10A4B000E889ADF80E0019E0B07890429FD130786D ++:10A4C00001079CD5062F9AD120F0080030706088D3 ++:10A4D000414660F31F41012008F0E2FF02208DF8A1 ++:10A4E0000400ADF808902889ADF80A00608822467B ++:10A4F00001A9F7F7D8FD82E7082F80D12F89B5F899 ++:10A500000A90402F01D2402001E0A7F1400080B224 ++:10A5100080460146304600F048FC08B3716808EBFD ++:10A5200088002C2202EBC000095A4945E3D1FE48BD ++:10A5300007AAD0E90210CDE9071068798DF81C0050 ++:10A5400008F0FF058DF81E5060883146FFF799FC32 ++:10A550002246294639E0B6E014E03CE039E0E6E086 ++:10A56000F148D0E90010CDE907106879ADF8207006 ++:10A570008DF81C00ADF82290608807AA3146FFF7DD ++:10A5800080FC3CE7082FB6D16889B5F808804028E0 ++:10A5900001D2402000E0403887B23946304600F012 ++:10A5A00004FC0028A7D007EB870271680AEBC20001 ++:10A5B0000844028A42459ED1017808299BD14078FF ++:10A5C0006979884297D1F9B222463046FEF7F3FE08 ++:10A5D00015E70E2F07D0CDF81C80CDF820806879C4 ++:10A5E0008DF81C00C8E76989EF898B46B5F80C9097 ++:10A5F0003046FEF742FFABF14001402901D309206C ++:10A600004AE0B9F1170F01D3172F01D20B2043E015 ++:10A6100040280ED000EB800271680AEBC2000844AB ++:10A620000178012903D1407869798842A9D00A20AC ++:10A6300032E03046FEF703FF014640282BD001EB05 ++:10A64000810372680AEBC30002EB0008012288F85C ++:10A6500000206A7988F8012070682A894089B84208 ++:10A6600000D938462D8A03232372A282E7812082F3 ++:10A67000A4F80C906582084600F07CFB6081A8F885 ++:10A680001490A8F81870A8F80E50A8F810B020463A ++:10A6900000F066FBB3E6042005212172A4F80A80CD ++:10A6A000E08101212173A049D1E90421CDE90721ED ++:10A6B00069798DF81C10ADF81E00608807AA314634 ++:10A6C000FFF7DFFBE3E7062FE4D3B078904215D124 ++:10A6D0003078010712D520F00800307060884146BC ++:10A6E00060F31F41012008F0DBFE02208DF804001A ++:10A6F0002889ADF80800ADF80A90F7E60421304645 ++:10A70000FEF7D3FE05464028C4D002208303009004 ++:10A7100022462946304600F065FB4146608865F3D5 ++:10A720000F2160F31F41082008F0BAFE67E60E2FE4 ++:10A73000B0D104213046FEF7B8FE81464028A9D0AA ++:10A740004146608869F30F2160F31F41082008F03B ++:10A75000A7FE288A0790E88900907068AF89408931 ++:10A76000B84200D938468346B5F80A802889059052 ++:10A77000484600F0FFFA6081079840B10220079B2D ++:10A78000009022464946304600F02CFB37E6B8F1EF ++:10A79000170F1ED3172F1CD304202072009860823D ++:10A7A000E781A4F810B0A4F80C8009EB8902716865 ++:10A7B0000AEBC2000D1800990598A5F81480A5F8B9 ++:10A7C00018B0E9812882204600F0CAFA06202870D5 ++:10A7D00015E601200B230090D3E7082FA6D1298985 ++:10A7E0003046FEF74AFE074640289FD007EB870217 ++:10A7F00071680AEBC2000844804600F0ECFA0028B9 ++:10A8000094D16D89B8F80E002844B0F5803F05D387 ++:10A8100060883A46314600F01CFBF0E5002D85D0FB ++:10A82000A8F80E0060883A463146FFF701F9082083 ++:10A830002072384600F09EFA6081A58127E770B546 ++:10A840000D460646032105F0A3F9040004D0207844 ++:10A85000000704D5112070BD43F2020070BD2A46E6 ++:10A8600021463046FEF71FFF18B928686061686806 ++:10A87000A061207840F008002070002070BD70B505 ++:10A880000D460646032105F083F9040004D0207824 ++:10A89000000704D4082070BD43F2020070BD2A46B0 ++:10A8A00021463046FEF732FF00B9A582207820F01D ++:10A8B00008002070002070BD2DE9F04F0E4691B0C9 ++:10A8C0008046032105F064F90446404605F0A4FAE9 ++:10A8D00007460020079008900990ADF830000A90D4 ++:10A8E00002900390049004B9FFDF0DF1080917BB33 ++:10A8F000FFDF20E038460BA9002204F0C9FC9DF8D8 ++:10A900002C0000F07F050A2D00D3FFDF6019017FC6 ++:10A91000491E01779DF82C0000060CD52A460CA98B ++:10A9200007A8FEF716FE01E0A0ED010019F80510DA ++:10A93000491C09F80510761EF6B2DBD204F134008A ++:10A94000FC4D04F1260BDFF8F0A304F12A07069072 ++:10A9500010E05846069900F06EFA064628700A285C ++:10A9600000D3FFDF5AF8261040468847E08CC05DD0 ++:10A97000B04202D0208D0028EBD10A202870EE4D85 ++:10A980004E4628350EE00CA907A800F054FA0446FC ++:10A99000375D55F8240000B9FFDF55F8242039460B ++:10A9A00040469047BDF81E000028ECD111B027E5C5 ++:10A9B00010B5032105F0ECF8040000D1FFDF0A21F7 ++:10A9C00004F11C0014F022F8207840F004002070FC ++:10A9D00010BD10B50C46032105F0DAF801190A7F05 ++:10A9E00001211AB9808EA140084000D0012010BD7D ++:10A9F0002DE9F84F894615468246032105F0C8F82F ++:10AA0000070004D0284608F097FD40B903E043F260 ++:10AA10000200BDE8F88F484608F0B4FD08B11020E8 ++:10AA2000F7E7786828B169880089814201D909204F ++:10AA3000EFE7B9F800001C2418B1402809D24020E3 ++:10AA400008E03846FEF7FBFC8046402819D1132069 ++:10AA5000DFE7403880B280460146384600F0A5F96D ++:10AA600048B108EB8800796804EBC000085C012855 ++:10AA700003D00820CDE70520CBE7FDF79BFF0600BC ++:10AA80000BD008EB8800796804EBC0000C18B9F80B ++:10AA9000000020B1E88910B113E01120B9E728883F ++:10AAA000172802D36888172801D20720B1E7686801 ++:10AAB00038B12B1D224641463846FFF71DF90028C4 ++:10AAC000A7D104F10C0269462046FFF71CF828883C ++:10AAD00060826888E082B9F8000030B102202070FE ++:10AAE000E889A080E889A0B12BE003202070A88924 ++:10AAF000A08078688178402905D180F802803946A5 ++:10AB00005046FEF722FE404600F034F9A9F8000056 ++:10AB100021E07868218B4089884200D9084620834B ++:10AB2000A6F802A004203072B9F800007081E08914 ++:10AB30007082F181208B3082A08AB081304600F093 ++:10AB40000FF97868C178402905D180F8038039462B ++:10AB50005046FEF74BFE00205BE770B50D460646FB ++:10AB6000032105F015F8040003D0402D04D2402540 ++:10AB700003E043F2020070BD403DADB2294600F053 ++:10AB800014F958B105EB85011C22606802EBC10184 ++:10AB9000084400F020F918B1082070BD052070BDF0 ++:10ABA0002A462146304600F054F9002070BD2DE9B8 ++:10ABB000F0410D4616468046032104F0E9FF0446A5 ++:10ABC000402D01D2402500E0403DADB28CB1294678 ++:10ABD00000F0EBF880B105EB85011C22606802EB08 ++:10ABE000C1014718384600F0F6F838B10820BDE832 ++:10ABF000F08143F20200FAE70520F8E733463A46CF ++:10AC000029462046FFF778F80028F0D1EAB221461D ++:10AC10004046FEF797FF0020E9E72DE9F0410D4699 ++:10AC200016468046032104F0B3FF0446402D01D2AE ++:10AC3000402500E0403DAFB224B1304608F07CFC36 ++:10AC400038B902E043F20200D1E7306808F074FC42 ++:10AC500008B11020CBE73946204600F0A6F860B1D5 ++:10AC600007EB87011C22606802EBC10145182846EA ++:10AC700000F0B1F818B10820B9E70520B7E7B088AF ++:10AC8000A98A884201D90C20B1E76168E88C49782B ++:10AC9000B0EBC10F01D31320A9E73946204600F0DD ++:10ACA00078F80146606808234078C20005F1240066 ++:10ACB00004F0F5FDD6E90012C0E90012FAB221460F ++:10ACC0004046FEF7B5FE002091E72DE9F0470D461E ++:10ACD0001F4690468146032104F05AFF0446402D4A ++:10ACE00001D2402001E0A5F1400086B23CB14DB157 ++:10ACF000384608F065FC50B11020BDE8F08743F2FB ++:10AD00000200FAE76068C8B1A0F80C8024E0314680 ++:10AD1000204600F04AF888B106EB86011C226068E4 ++:10AD200002EBC1014518284600F055F840B1082053 ++:10AD3000E3E7000030000020B8ED01000520DCE76B ++:10AD4000A5F80880F2B221464846FEF7FBFE1FB187 ++:10AD5000A8896989084438800020CEE704F0F7BB51 ++:10AD6000017821F00F01491C21F0F0011031017030 ++:10AD7000FDF723BE10B50446402800D9FFDF40345C ++:10AD8000A0B210BD406842690078484302EBC000A1 ++:10AD90007047C2784068037812FB03F24378406939 ++:10ADA00001FB032100EBC1007047C2788A4209D938 ++:10ADB000406801EB81011C2202EBC101405C08B13B ++:10ADC00001207047002070470078062801D9012033 ++:10ADD0007047002070470078062801D00120704796 ++:10ADE00000207047F0B401EB81061C27446807EB94 ++:10ADF000C6063444049D05262670E3802571F0BC08 ++:10AE0000FEF790BA10B5418911B1FFF7DDFF08B127 ++:10AE1000002010BD012010BD10B5C18C8278B1EBAF ++:10AE2000C20F04D9C18911B1FFF7CEFF08B10020CC ++:10AE300010BD012010BD10B50C4601230A22011DD2 ++:10AE400004F063FD00782188012282409143218033 ++:10AE500010BDF0B402EB82051C264C6806EBC5055C ++:10AE6000072363554B681C79402C03D11A71F0BC41 ++:10AE7000FEF701BDF0BC704770B50B2000F0B5F9CE ++:10AE8000082000F0B2F900210B2000F0C4F90021E5 ++:10AE9000082000F0C0F9EC4C01256560A560002099 ++:10AEA000C4F84001C4F84401C4F848010B2000F084 ++:10AEB000A7F9082000F0A4F90B2000F08BF9256019 ++:10AEC00070BD10B50B2000F090F9082000F08DF94E ++:10AED000DD48012141608160DC490A68002AFCD11B ++:10AEE0000021C0F84011C0F84411C0F848110B20EF ++:10AEF00000F086F9BDE81040082000F081B910B5D7 ++:10AF00000B2000F07DF9BDE81040082000F078B972 ++:10AF100000B530B1012806D0022806D0FFDF00209E ++:10AF200000BDCB4800BDCB4800BDCA48001D00BDD8 ++:10AF300070B5C9494FF000400860C84DC00BC5F856 ++:10AF40000803C74800240460C5F840410820C43500 ++:10AF500000F04BF9C5F83C41C248047070BD08B51B ++:10AF6000B94A002128B1012811D002281CD0FFDFE6 ++:10AF700008BD4FF48030C2F80803C2F84803B34854 ++:10AF80003C300160C2F84011BDE80840D0E74FF402 ++:10AF90000030C2F80803C2F84803AC4840300160F2 ++:10AFA000C2F84411AB480CE04FF48020C2F808030B ++:10AFB000C2F84803A54844300160C2F84811A548CA ++:10AFC000001D0068009008BD70B516460D46044689 ++:10AFD000022800D9FFDF00229B48012304F1100161 ++:10AFE0008B4000EB8401C1F8405526B1C1F84021E7 ++:10AFF000C0F8043303E0C0F80833C1F84021C0F8BA ++:10B00000443370BD2DE9F0411C46154630B101288E ++:10B0100034D0022839D0FFDFBDE8F081891E00223C ++:10B0200021F07F411046FFF7CFFF012C24D00020F4 ++:10B030008C4E8A4F012470703C61894900203C3954 ++:10B0400008600220091D0860854904203039086025 ++:10B0500083483D350560C7F80042082000F0D0F86D ++:10B060002004C7F80403082000F0B4F87A49E00788 ++:10B07000091F08603470CFE70120D9E7012B02D007 ++:10B080000022012005E00122FBE7012B04D0002271 ++:10B090000220BDE8F04197E70122F9E76B4800681C ++:10B0A000704770B500F0C7F8674C0546D4F840010A ++:10B0B0000026012809D1D4F80803C00305D54FF4B0 ++:10B0C0008030C4F80803C4F84061D4F84401012872 ++:10B0D0000CD1D4F80803800308D54FF40030C4F82D ++:10B0E0000803C4F84461012007F0B7FAD4F8480116 ++:10B0F00001280CD1D4F80803400308D54FF4802070 ++:10B10000C4F80803C4F84861022007F0A6FA5648BC ++:10B11000056070BD70B500F08EF8524D0446287879 ++:10B1200058B1FFF705FF687820B1002085F80100CD ++:10B1300007F093FA4C48046070BD0320F8E74FF025 ++:10B14000E0214FF40010C1F800027047152000F014 ++:10B1500057B8424901200861082000F051B83F4922 ++:10B160004FF47C10C1F808030020024601EB800375 ++:10B17000C3F84025C3F84021401CC0B20628F5D3CF ++:10B180007047410A43F609525143C0F3080010FBCF ++:10B1900002F000F5807001EB5020704710B5430BB2 ++:10B1A00048F2376463431B0C5C020C602F4C03FBBA ++:10B1B00004002F4B4CF2F72443435B0D13FB04F4C4 ++:10B1C00004EB402000F580704012107008681844AD ++:10B1D000086010BD00F01F0201219140400980006D ++:10B1E00000F1E020C0F80011704700F01F020121BB ++:10B1F00091404009800000F1E020C0F880117047C4 ++:10B2000000F01F02012191404009800000F1E02080 ++:10B21000C0F8801270474907090E002806DA00F0CE ++:10B220000F0000F1E02080F8141D704700F1E020CD ++:10B2300080F8001470470C48001F00680A4A0D4946 ++:10B24000121D11607047000000B0004004B50040BE ++:10B250004081004044B1004008F5014000800040BA ++:10B26000408500403800002014050240F7C2FFFF6F ++:10B270006F0C01000100000110B5EFF3108000F029 ++:10B28000010472B6E9484178491C417040780128B0 ++:10B2900001D107F087FD002C00D162B610BD70B55A ++:10B2A000E24CE07848B90125E570FFF7E5FF07F0CB ++:10B2B00081FD20B1002007F05CFD002070BD4FF043 ++:10B2C00080406571C0F80453F7E770B5EFF3108064 ++:10B2D00000F0010572B6D54C607800B9FFDF6078E8 ++:10B2E000401E6070607808B907F060FD002D00D145 ++:10B2F00062B670BDCD4810B5C17821B10021417151 ++:10B30000C170FFF7E2FF002010BD10B5044607F042 ++:10B3100051FDC649C978084000D0012020600020B6 ++:10B3200010BD2DE9F05FDFF804934278817889F849 ++:10B330000620002689F80710074689F8086000787B ++:10B34000354620B101280FD002280FD0FFDF07F0CB ++:10B350003EFD98B107F042FDB0420FD1304607F0F4 ++:10B3600041FD0028FAD047E00126F0E7FFF784FF0F ++:10B3700007F020FD0028FBD00226E8E70120840723 ++:10B38000E060C4F80451AA490E600107D1F84412E4 ++:10B39000A74AC1F3423124321160A5493431086013 ++:10B3A0004FF0020BC4F804B3A060DFF888A2DAF80B ++:10B3B0000010C94341F3001101F10108DAF800104F ++:10B3C00041F01001CAF8001000E020BFD4F80401D9 ++:10B3D0000028FAD0304607F005FD0028FAD0B8F171 ++:10B3E000000F05D1DAF8001021F01001CAF80010A2 ++:10B3F000C4F808B3C4F8045199F807004C4670B17A ++:10B40000387860B907F0D6FC074607F037FE6FF0D2 ++:10B41000004117B1C4E9031001E0C4E9030116B10A ++:10B420002571BDE8F09F0127BE0727714FF019086D ++:10B43000C6F80883B761C6F80051C6F80C51C6F8C3 ++:10B44000105107F0B7FC10B1A770376100E027700A ++:10B45000FFF712FF7649A07920310860C6F804830F ++:10B46000DFE770B5050000D1FFDF4FF080424FF0FD ++:10B47000FF30C2F808030021C2F80011C2F804111D ++:10B48000C2F80C11C2F81011684C617007F098FCFA ++:10B4900010B10120E07060702846BDE8704040E7C0 ++:10B4A0002DE9F05F6448D0F800B0634A6349083280 ++:10B4B00011608406D4F8080110B14FF0010801E0D2 ++:10B4C0004FF00008D4F8000100B101208146D4F803 ++:10B4D000040108B1012600E00026D4F80C0100B1F7 ++:10B4E00001208246D4F8100108B1012700E00027AE ++:10B4F00048EA090126EA010020EA0A00B84300D020 ++:10B50000FFDF0025B8F1000F04D0C4F80851012076 ++:10B5100007F02FFC5FEA0900DFF810814FF0010906 ++:10B5200013D0C4F8005198F8050020B188F80550F0 ++:10B53000002007F01EFC98F8000030B107F03AFC3C ++:10B5400018B188F80290C4F810900EB1C4F80451F4 ++:10B55000BAF1000F0CD0C4F80C5198F8020046461E ++:10B5600000B9FFDFB5703570C4F81490FFF7ADFE79 ++:10B5700037B1C4F8105198F8040008B100F020F871 ++:10B580002D49091DC1F800B04BE770B5274DE8788B ++:10B5900008B907F00BFC01208407A061A87850B11E ++:10B5A000D4F80C0120B9002007F01CFC0028F7D1CA ++:10B5B0000020C4F80C014FF0FF30C4F8080370BD40 ++:10B5C0002DE9F041194C4FF080470125E079F0B1A9 ++:10B5D000012803D0217A401E814218DA07F0EAFBE5 ++:10B5E000064607F04BFDE179012902D9217A491C71 ++:10B5F00021720EB1216900E0E168411A022902DAE4 ++:10B6000011F1020F0BDC0EB1206100E0E060FFF7EA ++:10B6100033FE07F0CFFB28B13D61A57003E07D61EB ++:10B62000BDE8F081257000202072F9E73C00002081 ++:10B630001805004010ED00E0100502400100000177 ++:10B6400010B50D2000F06FF8C4B26FF0040000F0E8 ++:10B650006AF8C0B2844200D0FFDF3A490120086096 ++:10B6600010BD70B50D2000F048F8374C0020C4F82C ++:10B6700000010125C4F804530D2000F049F82560AD ++:10B680004FF0E0216014C1F8000170BD10B50D202D ++:10B6900000F033F82C48012141600021C0F800116E ++:10B6A000BDE810400D2000F033B8284810B50468FC ++:10B6B00026492748083108602349D1F800010128AC ++:10B6C00004D0FFDF2148001D046010BD1D48001D8F ++:10B6D00000680022C0B2C1F8002107F027FCF1E7A2 ++:10B6E00010B51948D0F800110029FBD0FFF7DDFF95 ++:10B6F000BDE810400D2000F00BB800F01F02012142 ++:10B7000091404009800000F1E020C0F880117047AE ++:10B7100000F01F02012191404009800000F1E0206B ++:10B72000C0F880127047002806DA00F00F0000F120 ++:10B73000E02090F8140D03E000F1E02090F8000400 ++:10B740004009704704D5004000D000401005024079 ++:10B750000100000110B5202000F082F8202000F048 ++:10B760008AF84A49202081F8000449490006086007 ++:10B77000091D48480860F5F7CFFD4549C831086004 ++:10B780004548D0F8041341F00101C0F80413D0F883 ++:10B79000041341F08071C0F804133C4901201C39A6 ++:10B7A000C1F8000110BD10B5202000F059F838484C ++:10B7B00000210160001D0160354A481EE83A106012 ++:10B7C000354AC2F80803324BC8331960C2F8000189 ++:10B7D000C2F8600131490860BDE81040202000F047 ++:10B7E0004AB82B492E48EC390860704728492C4844 ++:10B7F000E8390860704726480160001D521E02604B ++:10B80000704723490120E8390860BFF34F8F704724 ++:10B8100070B51F4A8069E83A214911601E49D1F884 ++:10B82000006100231F4D1D4A5C1E1EB1A84206D3B5 ++:10B8300000210FE0D1F8606186B1A84209D2C1F8B9 ++:10B840000031C1F860311460BDE87040202000F084 ++:10B8500012B81168BDE8704013F004B9FFDF70BD85 ++:10B8600000F01F02012191404009800000F1E0201A ++:10B87000C0F88011704700F01F020121914040097B ++:10B88000800000F1E020C0F88012704720E000E066 ++:10B890000006024024120020000002400004024082 ++:10B8A00001000001003002004FF0E0214FF0007075 ++:10B8B000C1F88001C1F88002384B802283F800244F ++:10B8C000C1F80001704700B502460420344903E086 ++:10B8D00001EBC0031B792BB1401EC0B2F8D2FFDFD1 ++:10B8E000FF2000BD41F8302001EBC00100224A7169 ++:10B8F0008A7101220A7100BD294A002102EBC000B1 ++:10B900000171704710B50446042800D3FFDF2448B6 ++:10B9100000EBC4042079012800D0FFDF6079A17911 ++:10B92000401CC0B2814200D060714FF0E0214FF066 ++:10B930000070C1F8000210BD2DE9F04119480568FA ++:10B9400018491948083108601448042690F8000482 ++:10B95000134F4009154C042818D0FFDF16E021785A ++:10B9600007EBC1000279012A08D1427983799A4212 ++:10B9700004D04279827157F8310080472078401C0A ++:10B98000C0B22070042801D300202070761EF6B2C9 ++:10B99000E5D20448001D0560BDE8F08119E000E033 ++:10B9A0009805002010050240010000015000002011 ++:10B9B00070B50C46054600F043FB21462846BDE81D ++:10B9C000704001F026BC0000F8B51D46DDE90647D1 ++:10B9D0000E000AD004F020FA2346FF1DBCB2314607 ++:10B9E0002A46009403F02DFEF8BDD01922461946D0 ++:10B9F00012F06BFF2046F8BD70B50D4604461021CD ++:10BA000012F0E2FF258117206081A07B40F00A0040 ++:10BA1000A07370BD4FF6FF720A800146032007F045 ++:10BA20003FBD704700897047827BD30701D19207E1 ++:10BA300003D4808908800020704705207047827BEE ++:10BA4000920700D58181704701460020098841F6A0 ++:10BA5000FE52114200D00120704700B50346807BA2 ++:10BA6000C00701D0052000BD59811846FFF7ECFF43 ++:10BA7000C00703D0987B40F004009873987B40F097 ++:10BA800001009873002000BD827B520700D509B1E8 ++:10BA90004089704717207047827B61F3C30282732D ++:10BAA00070472DE9FC5F0E4604460178964601205A ++:10BAB00000FA01F14DF6FF5201EA020962684FF601 ++:10BAC000FF7B1188594506D0B9F1000F06D041F629 ++:10BAD000FE55294202D00120BDE8FC9F41EA090140 ++:10BAE00011801D0014D04FF0000C85F800C02378A1 ++:10BAF0000521032267464FF0020A0E2B74D2DFE8BD ++:10BB000003F0F809252F47626974479092B3D0D7A4 ++:10BB10000420E1E7616820898B7B9B077DD517288E ++:10BB200048D30B89834245D38989172901D38142A0 ++:10BB300040D185F800A0A5F80100328061688881B5 ++:10BB40006068817B21F002018173C5E004202870C8 ++:10BB50002089A5F801006089A5F803003180BBE0C9 ++:10BB6000208A3188C01D1FFA80F8414522D3062063 ++:10BB700028702089A5F801006089A5F80300A08934 ++:10BB8000A5F805000721208ACDE9000163693EE0A0 ++:10BB9000082B10D0082028702089A5F801006089A2 ++:10BBA000A5F8030031806A1D694604F10C0005F018 ++:10BBB00090FD10B15FE01020EDE730889DF8001097 ++:10BBC0000844308088E00A2028702089A5F8010008 ++:10BBD000328045E00C2028702089A5F8010060899A ++:10BBE000A5F8030031803BE083E02189338800EB36 ++:10BBF00041021FFA82F843453DD3B8F1050F3AD30D ++:10BC00000E222A700BEA4101CDE90010E36860883A ++:10BC10002A467146FFF7D8FE00E04DE0A6F8008006 ++:10BC20005AE04020287060893188C01C1FFA80F8D3 ++:10BC3000414520D32878714620F03F00123028700B ++:10BC40002089A5F801006089CDE9000260882A46B4 ++:10BC5000E368FFF7B9FEA6F80080287840063BD4D9 ++:10BC600061682089888037E0A0893288401D1FFAEA ++:10BC700080F8424501D204273EE016202870208932 ++:10BC8000A5F801006089A5F80300A089CDE90001AD ++:10BC900060882A4671462369FFF796FEA6F8008061 ++:10BCA000DEE718202870207A6870A6F800A013E05C ++:10BCB00061680A88920401D405271DE0C988228999 ++:10BCC000914201D0062717E01E212970308060685C ++:10BCD000018821F400510180B9F1000F0CD0618876 ++:10BCE00078230022032007F031FB616820788870F8 ++:10BCF00007E0A6F800C003276068018821EA09016F ++:10BD000001803846E8E62DE9FF4F85B01746129CC2 ++:10BD10000D001E461CD03078C10703D000F03F0054 ++:10BD2000192801D9012100E000212046FFF7ACFECF ++:10BD3000A8420DD32088A0F57F41FF3908D0307884 ++:10BD4000410601D4000605D5082009B0BDE8F08FF2 ++:10BD50000720FAE700208DF800008DF80100307808 ++:10BD60006B1E00F03F0C0121A81E4FF0050A4FF09A ++:10BD700002094FF0030B9AB2BCF1200F75D2DFE835 ++:10BD80000CF08B10745E7468748C749C74B674BB05 ++:10BD900074C974D574E2747474F274F074EF74EE50 ++:10BDA000748B052D78D18DF80090A0788DF8040063 ++:10BDB0007088ADF8060030798DF80100707800F0D9 ++:10BDC0003F000C2829D00ADCA0F10200092863D228 ++:10BDD000DFE800F0126215621A621D62200012286C ++:10BDE00024D004DC0E281BD01028DBD11BE0162841 ++:10BDF0001FD01828D6D11FE02078800701E02078D6 ++:10BE00004007002848DAEFE020780007F9E72078BB ++:10BE1000C006F6E720788006F3E720784006F0E7D2 ++:10BE200020780006EDE72088C005EAE72088400575 ++:10BE3000E7E720880005E4E72088C004E1E72078F0 ++:10BE4000800729D5032D27D18DF800B0B6F8010061 ++:10BE500082E0217849071FD5062D1DD381B2707865 ++:10BE6000012803D0022817D102E0CAE0022000E036 ++:10BE7000102004228DF8002072788DF80420801C98 ++:10BE8000B1FBF0F2ADF8062092B242438A4203D1F0 ++:10BE90000397ADF80890A7E07AE02078000777D5FF ++:10BEA00098B282088DF800A0ADF80420B0EB820FA4 ++:10BEB0006ED10297ADF8061096E02178C90667D5D5 ++:10BEC000022D65D381B206208DF80000707802281B ++:10BED0005ED300BFB1FBF0F28DF80400ADF8062090 ++:10BEE00092B242438A4253D1ADF808907BE0207869 ++:10BEF00080064DD5072003E0207840067FD5082036 ++:10BF00008DF80000A088ADF80400ADF80620ADF86B ++:10BF1000081068E02078000671D50920ADF80420EB ++:10BF20008DF80000ADF8061002975DE02188C90584 ++:10BF300065D5022D63D381B20A208DF80000707898 ++:10BF400004285CD3C6E72088400558D5012D56D17A ++:10BF50000B208DF80000A088ADF8040044E021E03B ++:10BF600026E016E0FFE72088000548D5052D46D3DA ++:10BF70000C208DF80000A088ADF80400B6F803008E ++:10BF80006D1FADF80850ADF80600ADF80AA02AE024 ++:10BF900035E02088C00432D5012D30D10D208DF838 ++:10BFA000000021E02088800429D4B6F80100E08058 ++:10BFB000A07B000723D5032D21D3307800F03F006C ++:10BFC0001B2818D00F208DF80000208840F4005066 ++:10BFD000A4F80000B6F80100ADF80400ED1EADF8BD ++:10BFE0000650ADF808B0039769460598F9F773FB5A ++:10BFF000050008D016E00E208DF80000EAE70725BE ++:10C0000010E008250EE0307800F03F001B2809D032 ++:10C010001D2807D00320059907F042FA208800F474 ++:10C0200000502080A07B400708D52046FFF70CFD7C ++:10C03000C00703D1A07B20F00400A073284684E64B ++:10C040001FB5032806D101208DF8000088B269468B ++:10C05000F9F741FB1FBD0000F8B51D46DDE90647B5 ++:10C060000E000AD003F0D8FE2346FF1DBCB23146B5 ++:10C070002A46009403F0E5FAF8BDD0192246194685 ++:10C0800012F023FC2046F8BD2DE9FF4F8DB09B46F2 ++:10C09000DDE91B57DDF87CA00C46082B05D0E069D4 ++:10C0A00001F000F950B11020D2E02888092140F0B9 ++:10C0B000100028808AF80010022617E0E1690120AC ++:10C0C0008871E2694FF420519180E1698872E069DA ++:10C0D00042F601010181E069002181732888112164 ++:10C0E00040F0200028808AF80010042638780A9052 ++:10C0F0000A2038704FF0020904F118004D460C90E8 ++:10C1000001F093FBB04681E0BBF1100F0ED1022D80 ++:10C110000CD0A9EB0800801C80B20221CDE90010F0 ++:10C1200005AB52461E990D98FFF796FFBDF8161005 ++:10C130001A98814203D9F74800790F9004E003D19F ++:10C140000A9808B138702FE04FF00201CDE90019CC ++:10C150000DF1160352461E990D98FFF77DFF1D98AD ++:10C160000088401B801B83B2C6F1FF00984200D2BA ++:10C1700003461E990BA8D9B15FF00002DDF878C024 ++:10C18000CDE9032009EB060189B2CDE901C10F9881 ++:10C190000090BDF8161000220D9801F0C9FB387010 ++:10C1A00070B1C0B2832807D0BDF8160020833AE0F2 ++:10C1B0000AEB09018A19E1E7022011B0BDE8F08F0E ++:10C1C000BDF82C00811901F0FF08022D0DD09AF85E ++:10C1D0000120424506D1BDF82010814207D0B8F1B8 ++:10C1E000FF0F04D09AF801801FE08AF80180C94847 ++:10C1F00000680178052902D1BDF81610818009EB8D ++:10C2000008001FFA80F905EB080085B2DDE90C1083 ++:10C2100005AB0F9A01F00CFB28B91D980088411B53 ++:10C220004145BFF671AF022D13D0BBF1100F0CD1F9 ++:10C23000A9EB0800801C81B20220CDE9000105AB0A ++:10C2400052461E990D98FFF707FF1D9805800020A4 ++:10C2500038700020B1E72DE9F8439C46089E13464C ++:10C260000027B26B9AB3491F8CB2F18FA1F57F45BD ++:10C27000FF3D05D05518AD882944891D8DB200E0D9 ++:10C2800000252919B6F83C800831414520D82A44B8 ++:10C29000BCF8011022F8021BBCF8031022F8021BA4 ++:10C2A000984622F8024B914603F0A4FD4FF00C0C87 ++:10C2B00041464A462346CDF800C003F08EF9F58783 ++:10C2C000B16B00202944A41D2144088003E001E053 ++:10C2D000092700E083273846BDE8F88310B50B88AE ++:10C2E000848F9C420CD9846BE018048844B1848804 ++:10C2F00024F40044A41D23440B801060002010BDD2 ++:10C300000A2010BD2DE9F0478AB0002590468946E5 ++:10C310008246ADF8185007274BE0059806888088BC ++:10C32000000446D4A8F8006007A80195009702957C ++:10C33000CDE903504FF4007300223146504601F01E ++:10C34000F7FA04003CD1BDF81800ADF820000598BC ++:10C3500004888188B44216D10A0414D40195029548 ++:10C36000039521F400410097049541F480434288ED ++:10C370002146504601F0B2F804000BD1059881889F ++:10C3800041F40041818005AA08A94846FFF7A6FFAD ++:10C390000400DCD00097059802950195039504955B ++:10C3A0000188BDF81C300022504601F097F80A2C95 ++:10C3B00006D105AA06A94846FFF790FF0400ACD0B5 ++:10C3C000ADF8185004E00598818821F4004181807F ++:10C3D00005AA06A94846FFF781FF0028F3D00A2CDA ++:10C3E00003D020460AB0BDE8F0870020FAE710B578 ++:10C3F0000C46896B86B051B10C218DF80010A18FCD ++:10C40000ADF80810A16B01916946FAF715F9002003 ++:10C410004FF6FF71A063E187A08706B010BD2DE93C ++:10C42000F0410D460746896B0020069E1446002900 ++:10C4300011D0012B0FD1324629463846FFF762FF53 ++:10C44000002808D1002C06D0324629463846BDE8DF ++:10C45000F04100F036BFBDE8F0812DE9FC41144603 ++:10C46000DDE9087C0E46DDE90A15521DBCF800E046 ++:10C4700092B2964502D20720BDE8FC81ACF80020BC ++:10C4800017222A70A5F80160A5F803300522CDE92E ++:10C4900000423B462A46FFF7DFFD0020ECE770B57F ++:10C4A0000C4615464821204612F0B0FA04F1080067 ++:10C4B00044F81C0F00204FF6FF71E0616184208476 ++:10C4C000A5841720E08494F82A0040F00A0084F83C ++:10C4D0002A0070BD4FF6FF720A800146042006F064 ++:10C4E000DFBF30B585B00C460546FFF780FFA18E53 ++:10C4F000284629B101218DF800106946FAF79CF809 ++:10C500000020E0622063606305B030BDB0F84000F9 ++:10C51000704700005400002090F84620920703D492 ++:10C52000408808800020F3E70620F1E790F84620D5 ++:10C530009207EDD5A0F84410EAE7014600200988EB ++:10C540000A0700D5012011F0F00F01D040F00200E1 ++:10C55000CA0501D540F004008A0501D540F0080065 ++:10C560004A0501D540F010000905D1D540F0200062 ++:10C57000CEE700B5034690F84600C00701D006207C ++:10C5800000BDA3F842101846FFF7D7FF10F03E0F8A ++:10C5900005D093F8460040F0040083F8460013F8F5 ++:10C5A000460F40F001001870002000BD90F84620B2 ++:10C5B000520700D511B1B0F84200A9E71720A7E74C ++:10C5C00010F8462F61F3C3020270A1E72DE9FF4F77 ++:10C5D0009BB00E00DDE92B34DDE92978289D24D0BD ++:10C5E0002878C10703D000F03F00192801D90121A4 ++:10C5F00000E000212046FFF7D9FFB04215D328788C ++:10C60000410600F03F010CD41E290CD0218811F402 ++:10C610007F6F0AD13A8842B1A1F57F42FF3A04D038 ++:10C6200001E0122901D1000602D504201FB0C5E5A2 ++:10C63000F9491D984FF0000A08718DF818A08DF87F ++:10C640003CA00FAA0A60ADF81CA0ADF850A0297854 ++:10C65000994601F03F02701F5B1C04F1180C4FF06B ++:10C66000060E4FF0040BCDF858C01F2A7ED2DFE82B ++:10C6700002F07D7D107D267DAC7DF47DF37DF27D25 ++:10C68000F17DF47DF07D7D7DEF7DEE7D7D7D7D7D99 ++:10C69000ED0094F84610B5F80100890701D5032E86 ++:10C6A00002D08DF818B022E34FF40061ADF85010BD ++:10C6B000608003218DF83C10ADF84000D8E2052ED3 ++:10C6C000EFD1B5F801002083ADF81C00B5F80310D8 ++:10C6D000618308B1884201D901207FE10020A07266 ++:10C6E00020814FF6FF702084169801F09EF80520F7 ++:10C6F00089F800000220029083460AAB1D9A169921 ++:10C700001B9801F095F890BB9DF82E00012804D0ED ++:10C71000022089F80100102003E0012089F80100BF ++:10C7200002200590002203A90BA804F0D2FFE8BB69 ++:10C730009DF80C00059981423DD13A88801CA2EBFE ++:10C740000B01814237DB02990220CDE900010DF196 ++:10C750002A034A4641461B98FFF77EFC02980BF1DC ++:10C76000020B801C80B217AA03A901E0A0E228E016 ++:10C7700002900BA804F0ADFF02999DF80C00CDE9E2 ++:10C78000000117AB4A4641461B98FFF765FC9DF830 ++:10C790000C100AAB0BEB01001FFA80FB02981D9AEC ++:10C7A000084480B2029016991B9800E003E001F063 ++:10C7B0003FF80028B6D0BBF1020F02D0A7F800B0B6 ++:10C7C00053E20A208DF818004FE200210391072E52 ++:10C7D000FFF467AFB5F801002083ADF81C00B5F891 ++:10C7E0000320628300283FF477AF90423FF674AF96 ++:10C7F0000120A072B5F8050020810020A073E06937 ++:10C8000000F050FD78B9E16901208871E2694FF4C8 ++:10C8100020519180E1698872E06942F6010101814D ++:10C82000E06900218173F01F20841E986062072058 ++:10C830006084169800F0F9FF072089F800000120B5 ++:10C84000049002900020ADF82A0028E01DE2A3E148 ++:10C850003AE1EAE016E2AEE086E049E0029801281B ++:10C8600014D0E0698079012803D1BDF82800ADF823 ++:10C870000E00049803ABCDE900B04A4641461B9830 ++:10C88000FFF7EAFB0498001D80B20490BDF82A006F ++:10C89000ADF80C00ADF80E00059880B202900AAB1E ++:10C8A0001D9A16991B9800F0C3FF28B90298398881 ++:10C8B000001D05908142D1D20298012881D0E06903 ++:10C8C0008079012805D0BDF82810A1F57F40FF38F8 ++:10C8D00003D1BDF82800ADF80E00049803ABCDE9F4 ++:10C8E00000B04A4641461B98FFF7B6FB0298BBE1F1 ++:10C8F000072E02D0152E7FF4D4AEB5F80110218397 ++:10C90000ADF81C10B5F80320628300293FF4E4AEB3 ++:10C9100091423FF6E1AE0121A1724FF0000BA4F865 ++:10C9200008B084F80EB0052E07D0C0B2691DE269C8 ++:10C9300004F0B0FE00287FF444AF4FF6FF7020846F ++:10C9400001A906AA14A8CDF800B081E885032878CB ++:10C95000214600F03F031D9A1B98FFF795FB824686 ++:10C96000208BADF81C0080E10120032EC3D14021B3 ++:10C97000ADF85010B5F801102183ADF81C100AAACB ++:10C98000B8F1000F00D00023CDE9020304921D98F6 ++:10C99000CDF80480009038880022401E83B21B9896 ++:10C9A00000F0C6FF8DF8180090BB0B2089F800003E ++:10C9B000BDF8280037E04FF0010C052E9BD18020F8 ++:10C9C000ADF85000B5F801102183B5F803002084BC ++:10C9D000ADF81C10B0F5007F03D907208DF81800C2 ++:10C9E00085E140F47C4222840CA8B8F1000F00D00D ++:10C9F0000023CDE90330CDE9018C1D9800903888E3 ++:10CA0000401E83B21B9800F093FF8DF8180028B1E8 ++:10CA10008328A8D10220BDE0540000200D2189F810 ++:10CA20000010BDF83000401C1EE1032E04D2480661 ++:10CA30007FF537AE002017E1B5F80110ADF81C10F6 ++:10CA40002878400602D58DF83CE002E007208DF8FA ++:10CA50003C004FF000080320CDE902081E9BCDF8F2 ++:10CA600010801D980193A6F1030B00901FFA8BF321 ++:10CA700042461B9800F032FD8DF818008DF83C807E ++:10CA8000297849060DD52088C00506D5208BBDF82C ++:10CA90001C10884201D1C4F8248040468DF81880CB ++:10CAA000E2E0832801D14FF0020A4FF48070ADF824 ++:10CAB0005000BDF81C002083A4F820B01E986062CE ++:10CAC000032060841321CCE0052EFFF4EAADB5F815 ++:10CAD0000110ADF81C10A28F62B3A2F57F43FE3B9C ++:10CAE00028D008228DF83C204FF0000B0523CDE91B ++:10CAF000023BDDF878C0CDF810B01D9A80B2CDF8B9 ++:10CB000004C040F400430092B5F803201B9800F0E5 ++:10CB1000E5FC8DF83CB04FF400718DF81800ADF8CD ++:10CB20005010832810D0F8B1A18FA1F57F40FE38B6 ++:10CB300007D0DCE00B228DF83C204FF6FE72A28776 ++:10CB4000D2E7A4F83CB0D2E000942B4631461E9ABE ++:10CB50001B98FFF780FB8DF8180008B183284BD194 ++:10CB6000BDF81C00208355E700942B4631461E9AE1 ++:10CB70001B98FFF770FB8DF81800E8BBE18FA06BE6 ++:10CB80000844811D8DE882034388828801881B98B0 ++:10CB9000FFF763FC824668E095F80180022E70D1B1 ++:10CBA0005FEA080002D0B8F1010F6AD109208DF8C0 ++:10CBB0003C0007A800908DF84080434600222146A3 ++:10CBC0001B98FFF72CFC8DF842004FF0000B8DF8FE ++:10CBD00043B050B9B8F1010F12D0B8F1000F04D131 ++:10CBE000A18FA1F57F40FF380AD0A08F40B18DF80A ++:10CBF0003CB04FF4806000E037E0ADF850000DE04D ++:10CC00000FA91B98F9F718FD82468DF83CB04FF438 ++:10CC10008060ADF85000BAF1020F06D0FB48006802 ++:10CC2000C07928B18DF8180027E0A4F8188044E0F6 ++:10CC3000BAF1000F03D081208DF818003DE007A85D ++:10CC400000904346012221461B98FFF7E8FB8DF830 ++:10CC5000180021461B98FFF7CAFB9DF8180020B961 ++:10CC6000192189F80010012038809DF83C0020B17E ++:10CC70000FA91B98F9F7E0FC8246BAF1000F33D0F8 ++:10CC80001BE018E08DF818E031E02078000712D59D ++:10CC9000012E10D10A208DF83C00E088ADF840004C ++:10CCA00004201B9906F0FCFB0820ADF85000C1E6FB ++:10CCB00048067FF5F6AC4FF0040A2088BDF8501006 ++:10CCC00008432080BDF8500080050BD5A18FA1F549 ++:10CCD0007F40FE3806D11E98E06228982063A68621 ++:10CCE0004FF0030A5046A1E49DF8180078B10120E6 ++:10CCF00089F80000297889F80110BDF81C10A9F8FE ++:10CD000002109DF8181089F804100520388020883A ++:10CD1000BDF8501088432080E4E72DE9FF4F884696 ++:10CD2000087895B0012181404FF20900249C014010 ++:10CD3000ADF820102088DDF88890A0F57F424FF0F4 ++:10CD4000000AFF3A02D029B1000703D5012019B02B ++:10CD5000BDE8F08F239E4FF0000B0EA886F800B0C0 ++:10CD600018995D460988ADF83410A8498DF81CB0B3 ++:10CD7000179A0A718DF838B0086098F800000128F9 ++:10CD80003BD0022809D003286FD1307820F03F0033 ++:10CD90001D303070B8F80400E08098F800100320CF ++:10CDA000022904D1317821F03F011B31317094F810 ++:10CDB0004610090759D505ABB9F1000F13D0002172 ++:10CDC00002AA82E80B000720CDE90009BDF8340073 ++:10CDD000B8F80410C01E83B20022159800F0A8FD18 ++:10CDE0000028D1D101E0F11CEAE7B8F80400A6F868 ++:10CDF0000100BDF81400C01C04E198F805108DF87E ++:10CE00001C1098F80400012806D04FF4007A02287C ++:10CE10002CD00328B8D16CE12188B8F8080011F4AF ++:10CE20000061ADF8201020D017281CD3B4F84010B2 ++:10CE3000814218D3B4F84410172901D3814212D18A ++:10CE4000317821F03F01C91C3170A6F8010003219F ++:10CE5000ADF83410A4F8440094F8460020F0020025 ++:10CE600084F8460065E105257EE177E1208808F138 ++:10CE7000080700F4FE60ADF8200010F0F00F1BD0A2 ++:10CE800010F0C00F03D03888228B9042EBD199B9B3 ++:10CE9000B878C00710D0B9680720CDE902B1CDF845 ++:10CEA00004B00090CDF810B0FB88BA883988159886 ++:10CEB00000F014FB0028D6D12398BDF82010401CA8 ++:10CEC00080294ED006DC10290DD020290BD0402916 ++:10CED00087D124E0B1F5807F6ED051457ED0B1F589 ++:10CEE000806F97D1DEE0C80601D5082000E0102051 ++:10CEF00082460DA907AA0520CDE902218DF8380048 ++:10CF0000ADF83CB0CDE9049608A93888CDE9000118 ++:10CF10005346072221461598FFF7B6F8A8E09DF87A ++:10CF20001C2001214FF00A0A002A9BD105ABB9F160 ++:10CF3000000F00D00020CDE902100720CDE9000944 ++:10CF4000BDF834000493401E83B2218B0022159853 ++:10CF500000F0EEFC8DF81C000B203070BDF81400C2 ++:10CF600020E09DF81C2001214FF00C0A002A22D15C ++:10CF700013ABB9F1000F00D00020CDE9021007205B ++:10CF8000CDE900090493BDF83400228C401E83B221 ++:10CF9000218B159800F0CCFC8DF81C000D20307012 ++:10CFA000BDF84C00401CADF8340005208DF8380069 ++:10CFB000208BADF83C00BCE03888218B88427FF4A0 ++:10CFC00052AF9DF81C004FF0120A00281CD1606A75 ++:10CFD000A8B1B878C0073FF446AF00E018E0BA68DF ++:10CFE0000720CDE902B2CDF804B00090CDF810B022 ++:10CFF000FB88BA88159800F071FA8DF81C00132090 ++:10D0000030700120ADF8340093E00000540000209F ++:10D010003988208B8142D2D19DF81C004FF0160A2E ++:10D020000028A06B08D0E0B34FF6FF7000215F46E8 ++:10D03000ADF808B0019027E068B1B978C907BED152 ++:10D04000E18F0DAB0844821D03968DE80C024388E6 ++:10D050008288018809E0B878C007BCD0BA680DABF7 ++:10D0600003968DE80C02BB88FA881598FFF7F5F94E ++:10D0700005005ED0072D72D076E0019005AA02A9C6 ++:10D080002046FFF72BF90146E28FBDF808008242E7 ++:10D0900001D00029F1D0E08FA16B084407800198EE ++:10D0A000E08746E09DF81C004FF0180A40B1208B45 ++:10D0B000C8B13888208321461598FFF798F938E0E1 ++:10D0C00004F118000090237E012221461598FFF7F5 ++:10D0D000A6F98DF81C000028EDD119203070012030 ++:10D0E000ADF83400E7E7052521461598FFF77FF9ED ++:10D0F0003AE0208800F40070ADF8200050452DD1B2 ++:10D10000A08FA0F57F41FE3901D006252CE0D8F88C ++:10D1100008004FF0160A48B1A063B8F80C10A187B8 ++:10D120004FF6FF71E187A0F800B002E04FF6FF7004 ++:10D13000A087BDF8200030F47F611AD07823002248 ++:10D140000420159906F002F998F800002071208853 ++:10D15000BDF82010084320800EE000E0072520885D ++:10D16000BDF8201088432080208810F47F6F1CD0E9 ++:10D170003AE02188814321809DF8380020B10EA932 ++:10D180001598F9F759FA05469DF81C000028EBD0D0 ++:10D1900086F801A001203070208B70809DF81C0063 ++:10D1A00030710520ADF83400DEE7A18EE1B11898AA ++:10D1B0000DAB0088ADF834002398CDE90304CDE928 ++:10D1C0000139206B0090E36A179A1598FFF7FEF972 ++:10D1D000054601208DF838000EA91598F9F72CFAAC ++:10D1E00000B10546A4F834B094F8460040070AD5CB ++:10D1F0002046FFF7A2F910F03E0F04D114F8460FB5 ++:10D2000020F0040020701898BDF8341001802846E2 ++:10D210009DE500B585B0042806D102208DF80000F8 ++:10D2200088B26946F9F708FA05B000BD10B5384C68 ++:10D230000B782268012B02D0022B2AD111E013783F ++:10D240000BB1052B01D10423137023688A889A80BF ++:10D250002268CB88D38022680B8913814989518148 ++:10D260000DE08B8893802268CB88D38022680B895D ++:10D2700013814B8953818B899381096911612168DD ++:10D28000F9F7DAF9226800210228117003D000288A ++:10D2900000D0812010BD832010BD806B002800D0FD ++:10D2A000012070478178012909D10088B0F5205FFD ++:10D2B00003D042F60101884201D1002070470720C7 ++:10D2C0007047F0B587B0002415460E460746ADF806 ++:10D2D000144010E0069801882980811DCDE90241A3 ++:10D2E000072101940494009183884288018838467C ++:10D2F00000F0F4F830B906AA05A93046FEF7EEFFB3 ++:10D300000028E7D00A2800D1002007B0F0BD0000B7 ++:10D310005400002010B58B7883B102789A4205D171 ++:10D320000B885BB102E08B79091D4BB18B789A4277 ++:10D33000F9D1B0F801300C88A342F4D1002010BD1F ++:10D34000812010BD072826D012B1012A27D103E081 ++:10D35000497801F0070102E04978C1F3C2010529CB ++:10D360001DD2DFE801F00318080C12000AB10320F7 ++:10D3700070470220704704280DD250B10DE00528F7 ++:10D3800009D2801E022808D303E0062803D0032810 ++:10D3900003D005207047002070470F207047812080 ++:10D3A0007047C0B282060BD4000607D5FE48807ACB ++:10D3B0004143C01D01EBD00080B270470846704762 ++:10D3C0000020704770B513880B800B781C0625D59C ++:10D3D000F54CA47A844204D843F010000870002071 ++:10D3E00070BD956800F0070605EBD0052D78F54077 ++:10D3F00065F304130B701378D17803F0030341EA4B ++:10D40000032140F20123B1FBF3F503FB15119268F0 ++:10D41000E41D00FB012000EBD40070BD906870BDDE ++:10D4200037B51446BDF8041011809DF804100A06A3 ++:10D430001ED5C1F30013DC49A568897A814208D85A ++:10D44000FE2811D1C91DC9085A42284611F0B4FA64 ++:10D450000AE005EBD00100F00702012508789540AD ++:10D46000A843934018430870207820F010002070E3 ++:10D470003EBD2DE9F0410746C81C0E4620F00300D2 ++:10D48000B04202D08620BDE8F081C74D002034466E ++:10D490002E60AF802881AA72E8801AE0E988491CD2 ++:10D4A000E980810614D4E17800F0030041EA00200D ++:10D4B00040F20121B0FBF1F201FB12012068FFF7FD ++:10D4C00070FF2989084480B22881381A3044A0604E ++:10D4D0000C3420784107E1D40020D4E72DE9FF4F38 ++:10D4E00089B01646DDE9168A0F46994623F4404571 ++:10D4F000084600F00DFB04000FD0099802F00EFB67 ++:10D500000290207800060AD5A748817A02988142C5 ++:10D5100005D887200DB0BDE8F08F0120FAE722463C ++:10D5200001A90298FFF74EFF834600208DF80C00FA ++:10D530004046B8F1070F1AD001222146FFF702FF3B ++:10D540000028E7D12078400611D502208DF80C0084 ++:10D55000ADF81070BDF80400ADF81200ADF814601D ++:10D560001898ADF81650CDF81CA0ADF818005FEA79 ++:10D57000094004D500252E46A84601270CE0217855 ++:10D58000E07801F0030140EA012040F20121B0FB04 ++:10D59000F1F2804601FB12875FEA494009D5B845A0 ++:10D5A00007D1A178207901F0030140EA0120B042BF ++:10D5B00001D3BE4201D90720ACE7A8191FFA80F9B0 ++:10D5C000B94501D90D20A5E79DF80C0028B103A9A4 ++:10D5D0000998F9F72FF800289CD1B84507D1A07811 ++:10D5E0004FEA192161F30100A07084F804901A98A1 ++:10D5F00000B10580199850EA0A0027D0199830B177 ++:10D600000BEB06002A46199911F05FF90EE00BEBBF ++:10D6100006085746189E099802F0ECFB2B46F61DAB ++:10D62000B5B239464246009501F0D7FF224601A91E ++:10D630000298FFF7C7FE9DF80400224620F0100074 ++:10D640008DF80400DDE90110FFF7EAFE002061E734 ++:10D650002DE9FF4FDFF8509182461746B9F80610C2 ++:10D66000D9F8000001EB410100EB810440F20120F8 ++:10D67000B2FBF0F185B000FB11764D46DDF84C8031 ++:10D6800031460698FFF78DFE29682A898B46611A74 ++:10D690000C3101441144AB8889B28B4202D88420FA ++:10D6A00009B038E70699CDB2290603D5A90601D5F8 ++:10D6B0000620F5E7B9F806C00CF1010C1FFA8CFC46 ++:10D6C000A9F806C0149909B1A1F800C0A90602D5AD ++:10D6D000C4F8088007E0104480B2A9F80800191ABD ++:10D6E00001EB0B00A0602246FE200699FFF798FE92 ++:10D6F000E77026712078390A61F30100320AA178B7 ++:10D7000040F0040062F30101A17020709AF8020059 ++:10D710006071BAF80000E08000262673280602D562 ++:10D7200099F80A7000E00127A80601D54FF000081B ++:10D730004D4600244FF007090FE0CDE9026801963D ++:10D74000CDF800900496E9882046129B089AFFF7CE ++:10D75000C5FE0028A4D1641CE4B2BC42EDD3002075 ++:10D760009EE72DE9F047804600F0D2F9070005D08A ++:10D77000002644460C4D40F2012919E00120BDE885 ++:10D78000F087204600F0C4F90278C17802F0030265 ++:10D7900041EA0222B2FBF9F309FB13210068FFF70B ++:10D7A00000FE304486B201E0B8050020641CA4B23B ++:10D7B000E988601E8142E4DCA8F10100E880288944 ++:10D7C000801B288100203870D9E710B5144631B18C ++:10D7D000491E218002F0A2F9A070002010BD012096 ++:10D7E00010BD10B5D24904460088CA88904201D3C2 ++:10D7F0000A2010BD096800EB400001EB800250795F ++:10D80000A072D08820819178107901F0030140EA5C ++:10D810000120A081A078E11CFFF7D4FD20612088C1 ++:10D82000401C2080E080002010BD01210182704753 ++:10D830002DE9FF4F85B04FF6FF788246A3F80080B0 ++:10D8400048681F460D4680788DF8060048680088B5 ++:10D85000ADF8040000208DF80A00088A0C88A04268 ++:10D8600000D304462C8241E0288A401C2882701D87 ++:10D870006968FFF74FFDB8BB3988414501D1601E8B ++:10D8800038806888A04236D3B178307901F003013E ++:10D8900040EA012901A9701DFFF73CFD20BB298941 ++:10D8A00041452CD0002231460798FFF74BFDD8B9EF ++:10D8B0002989494518D1E9680391B5F80AC0D6F815 ++:10D8C00008B05046CDF800C002F094FADDF800C070 ++:10D8D0005A460CF1070C1FFA8CFC4B460399CDF805 ++:10D8E00000C001F044FE50B1641CA4B2204600F018 ++:10D8F0000FF90600B8D1641E2C820A20D0E67C8085 ++:10D900007079B871F088B8803178F07801F003014F ++:10D9100040EA01207881A7F80C90504602F0FEF80A ++:10D92000324607F10801FFF74DFD38610020B7E6E8 ++:10D930002DE9FF4F87B081461C469246DDF860B066 ++:10D94000DDF85480089800F0E3F805000CD0484654 ++:10D9500002F0E4F82978090608D57549897A8142E8 ++:10D9600004D887200BB0D6E50120FBE7CAF30906EF ++:10D970002A4601A9FFF726FD0746149807281CD060 ++:10D9800000222946FFF7DEFC0028EBD1287840066C ++:10D9900013D501208DF808000898ADF80C00BDF8EB ++:10D9A0000400ADF80E00ADF81060ADF8124002A909 ++:10D9B0004846F8F73FFE0028D4D12978E87801F0EE ++:10D9C000030140EA0121AA78287902F0030240EA23 ++:10D9D0000220564507D0B1F5007F04D9611E81426F ++:10D9E00001DD0B20BEE7864201D90720BAE7801B84 ++:10D9F00085B2A54200D92546BBF1000F01D0ABF896 ++:10DA00000050179818B1B9192A4610F05EFFB8F106 ++:10DA1000000F0DD03E4448464446169F02F0FCF9E4 ++:10DA20002146FF1DBCB232462B46009401F009FE90 ++:10DA3000002097E72DE9F04107461D4616460846A7 ++:10DA400000F066F804000BD0384602F067F8217841 ++:10DA5000090607D53649897A814203D8872012E51D ++:10DA6000012010E522463146FFF7ACFC65B1217874 ++:10DA7000E07801F0030140EA0120B0F5007F01D811 ++:10DA8000012000E0002028700020FCE42DE9F04196 ++:10DA900007461D461646084600F03AF804000BD02B ++:10DAA000384602F03BF82178090607D52049897AE3 ++:10DAB000814203D88720E6E40120E4E4224631468F ++:10DAC000FFF7AEFCFF2D14D02178E07801F00302BF ++:10DAD00040EA022040F20122B0FBF2F302FB130005 ++:10DAE00015B900F2012080B2E070000A60F3010174 ++:10DAF00021700020C7E410B50C4600F009F828B1E9 ++:10DB0000C18821804079A070002010BD012010BD87 ++:10DB10000749CA88824209D340B1096800EB400036 ++:10DB20006FF00B0202EB8000084470470020704742 ++:10DB3000B805002010B505F0BCFEFAF7BFFA05F0F5 ++:10DB400079FDBDE8104005F007BE70B50346002022 ++:10DB500002466FF02F050EE09C5CA4F130060A2E01 ++:10DB600002D34FF0FF3070BD00EB800005EB4000AA ++:10DB7000521C2044D2B28A42EED370BD30B50A2482 ++:10DB80000AE0B0FBF4F304FB13008D18303005F805 ++:10DB9000010C521E1846D2B2002AF2D130BD30B567 ++:10DBA00000234FF6FF7510E0040A44EA002084B217 ++:10DBB000C85C6040C0F30314604005EA0034444090 ++:10DBC000E0B25B1C84EA40109BB29342ECD330BDC0 ++:10DBD0000178406829B190F8041190F8720038B9C2 ++:10DBE00001E001F0EFB919B1042901D0012070471B ++:10DBF0000020704770B50C460546062101F0C8FFAD ++:10DC0000606008B1002006E00721284601F0C0FF4F ++:10DC1000606018B101202070002070BD022070BD2E ++:10DC20002DE9FC470C4606466946FFF7E3FF00284E ++:10DC30007DD19DF8000050B106F016FEB0427CD0B8 ++:10DC40002146304609F0B8FB002873D12DE00CF0D6 ++:10DC500067F9B04271D0214630460FF024FA00280F ++:10DC600068D1019D95F8C80022E0012000E0002065 ++:10DC7000804695F835004FF0010A4FF00009F0B1E9 ++:10DC800095F8360080071AD584F8019084F800A032 ++:10DC900084F80290A68095F83710A171298F218110 ++:10DCA000698F618185F8359044E0019D95F8040104 ++:10DCB00058350028DBD1A87E0028D8D0D5E73046DB ++:10DCC00002F0AAF8070000D1FFDF384601F0BAFAE7 ++:10DCD00040B184F801900E212170A680E08084F884 ++:10DCE00002A027E0304602F085F8070000D1FFDFF0 ++:10DCF000B8F1000F21D0384601F0FBFAB8B19DF819 ++:10DD0000000038B90198D0F8F0004188B14201D143 ++:10DD100080F80090304606F046FC84F801900B2114 ++:10DD2000217084F80290A680E97EA17100E004E0F1 ++:10DD300085F81A900120BDE8FC870020FBE71CB5A0 ++:10DD40006946FFF757FF00B1FFDF684601F046F96B ++:10DD5000FE4900208968A1F8CA001CBD2DE9FC41DC ++:10DD600004460E46062001F0BBFE0546072001F0E2 ++:10DD7000B7FE2844C7B20025A8463E4417E02088D5 ++:10DD8000401C80B22080B04202D34046A4F80080FC ++:10DD900080B2B84204D3B04202D20020BDE8FC8178 ++:10DDA0006946FFF727FF0028F8D06D1CEDB2AE42A0 ++:10DDB000E5D84FF6FF7020801220EFE738B54FF618 ++:10DDC000FF70ADF800000DE00621BDF8000001F085 ++:10DDD000F1FE04460721BDF8000001F0EBFE0CB196 ++:10DDE00000B1FFDF00216846FFF7B8FF0028EBD045 ++:10DDF00038BD2DE9F04106F047FC0AF0C7FED44CCF ++:10DE0000042710206780A0804FF6FF76E6832684E3 ++:10DE10000025D0A0257001680079A4F13E02A5710B ++:10DE200042F8451FE11D1071A01D0FF06CFA25731B ++:10DE30001B21E1814FF4A47020826182A082032221 ++:10DE4000A2752046E775018341833E38A2830570A1 ++:10DE50004680BE480C300570A4F110000570468065 ++:10DE6000BDE8F08170B5B94C0D466060217006F0D8 ++:10DE700098FBFFF7A3FFFFF7BCFF20780DF0B0FA87 ++:10DE80000CF04EFA217860680FF0E1F920780AF082 ++:10DE9000F9F8284607F08BFE06F026FD2178606829 ++:10DEA00009F079FBBDE870400AF070BE10B501249E ++:10DEB0000AB1002010BD21B1012903D00024204661 ++:10DEC00010BD02210BF066FEF9E72DE9F0470400D2 ++:10DED00000D1FFDF9E48022120308146FFF73EFF40 ++:10DEE00000B1FFDF9A4D0620B5F8208001F0F8FD63 ++:10DEF0000646072001F0F4FD3044C6B2701CC7B2DC ++:10DF0000288CB04211D120460BF094FF48BB2878F2 ++:10DF100078B300266670132020702021A01C10F01A ++:10DF200053FD0220A0702E7020E0B8421AD1204686 ++:10DF300006F052FCE8B12078132817D1A0783C28CD ++:10DF400014D1A088072101F023FE050000D1FFDFD6 ++:10DF5000288806F028FBA088072101F02BFE00B1DD ++:10DF6000FFDF03E02146FFF75BFE10B10120BDE8B3 ++:10DF7000F087FFE702214846FFF7F0FE10B9298C31 ++:10DF80004145BDD10020F2E710B500F0C3FF08B154 ++:10DF90000C2010BD0AF031FE002010BD10B5044663 ++:10DFA000007818B1012801D0122010BD00F0C3FF85 ++:10DFB00020B10AF07FFE08B10C2010BD207800F0DF ++:10DFC00078FFE21D04F11703611CBDE810400AF060 ++:10DFD00029BE10B50446007818B1012801D01220DE ++:10DFE00010BD00F097FF08B10C2010BD207800F0A4 ++:10DFF00060FF611C0AF0DDFD08B1002010BD0720A4 ++:10E0000010BD10B50AF05AFE08B1002010BD302036 ++:10E0100010BD10B5044600F08EFF08B10C2010BDF5 ++:10E0200020460AF043FE002010BD10B500F083FF2B ++:10E0300020B10AF03FFE08B10C2010BD0AF028FE06 ++:10E04000002010BDFF2181704FF6FF7181803F4994 ++:10E0500049680A7882718A88028149884181012150 ++:10E0600041700020704710B510F1080F17D00CDC7C ++:10E0700010F1280F13D010F1140F10D010F1100F61 ++:10E080000DD010F10C0F08D109E010F1040F06D0EB ++:10E0900028B1032803D0042801D0122010BD05F0B8 ++:10E0A00014FD002010BD10B5134601220BF08AF9B3 ++:10E0B000002010BD10B504460DF005FC052804D065 ++:10E0C00020460DF07CF9002010BD0C2010BD10B5CD ++:10E0D000044600F030FF08B10C2010BD214600209E ++:10E0E00006F0D3FA002010BD10B504460DF0F0F98B ++:10E0F00050B107F0AAFF38B1207807F08AFD2078E8 ++:10E100000CF0ACFA002010BD0C2010BD10B5044678 ++:10E1100000F011FF08B10C2010BD2146012006F0CF ++:10E12000B4FA002010BD38B504464FF6FF70ADF8C4 ++:10E130000000A079E17988421CD021791F2919D8E3 ++:10E1400061791F2916D80022114607E05C000020E3 ++:10E1500002060020FFFFFFFF1F0000000FF026FE59 ++:10E1600040B90022E07911460FF020FE10B9207A64 ++:10E17000072801D9122038BD07F073FF60B90DF0F0 ++:10E18000A2FB48B900216846FFF7E8FD20B1204610 ++:10E1900005F0BEFB002038BD0C2038BD2DE9FC4148 ++:10E1A000817805461A2925D00EDC16292DD2DFE804 ++:10E1B00001F02C2C2C2C2C212C2C2C2C2C2C2C2C11 ++:10E1C0002C2C2C2C2C2121212A291ED00BDCA1F156 ++:10E1D0001E010C2919D2DFE801F0181818181818B8 ++:10E1E00018181818180D3A3904290ED2DFE801F072 ++:10E1F0000D020D022888B0F5706F06D2012769461E ++:10E20000FFF7F8FC18B10220C8E51220C6E59DF81A ++:10E21000000000F055FE019C08B1EC3401E004F56B ++:10E22000B3749DF8000000F04BFE019E08B1ED367E ++:10E2300001E006F267166846FFF7CAFC08B12078CD ++:10E2400008B10C20AAE52770A8783070684600F065 ++:10E25000C5FE0020A2E57CB50D466946FFF7CAFC65 ++:10E26000002618B12E602E7102207CBD9DF80000A2 ++:10E2700000F026FE019C9DF80000583400F020FEBE ++:10E28000DDF8040084F83E6081682960017B297113 ++:10E2900094F83E100029F5D100207CBD10B540B1A6 ++:10E2A0000478406813B1B0F84A0003E0B0F84C00BD ++:10E2B00000E0FB201B2908D3814206D8B2F5A47FD9 ++:10E2C00003D340F64800824201D9122010BD00203D ++:10E2D00010BD2DE9FC41044600886946FFF78AFC21 ++:10E2E000002843D12289E18801236846FFF7D6FF41 ++:10E2F00000283BD1A288618800236846FFF7CEFF43 ++:10E30000070033D19DF80000019DB846012640B1B9 ++:10E3100085F88961019890F8C80105F5C47538B988 ++:10E3200013E085F8FD60019890F82001FC3508B1F4 ++:10E330003A2718E0E08868802089A8806088E88013 ++:10E34000A08828810122019909E0E088688020895D ++:10E35000A8806088E880A08828810199002228464A ++:10E360000BF03CF92E7085F80180384616E530B583 ++:10E3700085B00D460446008803A9FFF73BFC002842 ++:10E3800048D19DF80C0040B100220499E388B1F80F ++:10E390004A00984203D2181A02E00122F5E7002051 ++:10E3A0006880B1F84C006388984201D2181A00E0E6 ++:10E3B0000020A8800020009001900290E088ADF835 ++:10E3C00002002089ADF804006088ADF80600A0883E ++:10E3D000ADF8080068460BF001F92089BDF804107B ++:10E3E000401AE880A088BDF80810401A2881E0880B ++:10E3F000BDF80210411A6888814200DD0846688035 ++:10E400006088BDF80610411AA888814200DD0846E0 ++:10E41000A880002005B030BD10B5044600F08BFD8B ++:10E4200020B10AF047FC08B10C2010BD207800F0A4 ++:10E4300040FDE279611C0AF082FD08B1002010BDA8 ++:10E44000022010BD7CB5044600886946FFF7D2FB68 ++:10E4500000282FD1A17801B90321E27802B9032263 ++:10E460009DF8005000240123002D019D06D085F861 ++:10E470009331019D95F8DC512DBB1CE085F80731E7 ++:10E48000019D95F82C513DB9019D95F806511DB996 ++:10E49000019D95F87B500DB13A2008E0019D85F86B ++:10E4A0000631019B83F80811019981F8092101992E ++:10E4B00081F807417CBD019D95F892511DB9019DE0 ++:10E4C00095F87B500DB13A2008E0019D85F8923116 ++:10E4D000019B83F89411019981F89521019981F8A4 ++:10E4E00093417CBD8178CA0802D1C278D30801D09B ++:10E4F00012207047490701D4510701D511207047F8 ++:10E50000A0E710B5044600F0F8FC08B10C2010BDDF ++:10E51000A1791220012904D019B1022901D00329BF ++:10E52000F5D1217809B10129F1D1E17929B1012988 ++:10E5300003D0022901D00329E9D1618843F6FD7295 ++:10E540000B1F30209342E2D2A3881B1F9342DED2DE ++:10E55000F9484180A1888180A0790BF0D3FFE07950 ++:10E560000CF00CF82078012805D00120BDE81040FF ++:10E5700000210CF036B80220F8E710B5122201286D ++:10E5800002D008B1104610BD09B10129FAD1012805 ++:10E5900007D00DF098F9052811D0BDE810400CF017 ++:10E5A000C7BE0BF0A5FF40B10BF0B4FFE248818875 ++:10E5B0004088BDE810400CF097BF122010BD0C2021 ++:10E5C00010BD2DE9F047DC4E92460C46B0F84C20C9 ++:10E5D0000546F1891046814200D20846074695F863 ++:10E5E0005210104600F080FC318A814200D2084669 ++:10E5F000B5F84A208046718A1046B146814200D261 ++:10E600000846064695F85110104600F06DFCB9F822 ++:10E610001410814200D208464FF4A4721B2E01D080 ++:10E62000904203D11B2F0DD090450BD0E780A4F86A ++:10E6300008806680A0805246294620460AF0CEFF18 ++:10E640000120207093E430B5428840F67B43911F4F ++:10E65000994219D281888C1F9C4215D28A4213D8C4 ++:10E66000C288B2F5FA7F0FD2038940F67745A3F14D ++:10E670000A04AC4208D2521C4A43B2EB830F03DABD ++:10E6800041898089814201D9302030BD002030BDD0 ++:10E690001FB5018843F6FD720B1F934205D24388D4 ++:10E6A0001C1F944201D28B4202D9302004B010BD0D ++:10E6B000017911B1012910D107E0417929B101296E ++:10E6C00003D0022901D0032907D1017B39B10129E7 ++:10E6D00005D0022903D0032901D01220E6E7C18921 ++:10E6E000ADF80210018AADF80410418AADF80610A9 ++:10E6F000818AADF80810C18AADF80A10008BADF818 ++:10E700000C006846FFF79FFFD0E72DE9F04385B086 ++:10E710000546AFF2C051D1E90086FFF7B9FF0028E6 ++:10E7200011D10DF0D0F805280CD00DF0CCF804284C ++:10E7300008D0814F387828B90BF0F2FBA0F57F4163 ++:10E74000FF3903D00C2005B0BDE8F0837A4801AA58 ++:10E750003E3801907948029077480621103803909E ++:10E7600004A801F0E3F904007ED003210AF07BFD48 ++:10E770007148B946018BA4F84A10418BA4F84C109B ++:10E78000428B018BFB7D0093BB7D208801F0BBFA9F ++:10E7900000B1FFDF208805F005FF218804F10E009D ++:10E7A00000F0D3FB66A004F112070068009003217B ++:10E7B000684604F073FB002069460A5C3A54401C2A ++:10E7C000C0B20328F9D3288A6080688AA080A88A0A ++:10E7D000E08094F8522094F85110B9F81C000CF025 ++:10E7E00009FF0146A06220460CF012FF002784F8C2 ++:10E7F0005E7084F85F70687900F05BFB6076D5F836 ++:10E800000600C4F81A006889E083C4F808802673FB ++:10E81000012084F8F800024604F1FC012046FFF7CD ++:10E82000D0FE8DF800700121684604F037FB9DF89A ++:10E83000000000F00701C0F3C1021144C0F3401012 ++:10E8400008448DF80000401D2076092801D20830C8 ++:10E850002076002120460AF006FD287B0BF052FEB0 ++:10E8600069792879AA1D00E00CE00BF023FE58B16D ++:10E870000BF050FE69792879AA1D0BF08AFE06007C ++:10E8800004D010E009205EE712260CE021460320A8 ++:10E890000BF0A7FE060006D16A88298820460CF0F6 ++:10E8A000DBFD060008D0208805F07DFE20880621CB ++:10E8B00001F080F900B1FFDF304644E738B51E4C67 ++:10E8C000207870B90CF0FFFF052805D00BF028FB6D ++:10E8D000A0F57F41FF3904D068460CF033FE10B13B ++:10E8E00013E00C2038BD0098008805F05CFE00980D ++:10E8F0000621008801F05EF900B1FFDF01202070E1 ++:10E900000E480C380078FCF7FDFF002038BD70B5CC ++:10E910000546FFF798FE002815D12888062101F04A ++:10E9200037F904000ED000F04DFB58B1D4F8F000D8 ++:10E93000017869B908E000000206002068000020A4 ++:10E9400011223300022070BDD4F83C11097809B1BE ++:10E950003A2070BD05218171D4F8F01000200881A3 ++:10E96000D4F8F010A8884881D4F8F010E88888819D ++:10E97000D4F8F0102889C881D4F8F00002894189C0 ++:10E980008A4204D88279082A01D88A4201D3122007 ++:10E9900070BD29884180D4F8F01002200870002052 ++:10E9A00070BD3EB504460AF0DBFCB0B1FC48012561 ++:10E9B000A0F13E028571236842F8453F237900218A ++:10E9C000137181716946062001F06BF800B1FFDF19 ++:10E9D000684601F044F810B10EE012203EBDBDF8CB ++:10E9E0000440029880F8F850684601F038F818B9E9 ++:10E9F000BDF80400A042F4D100203EBD70B505462C ++:10EA00000088062101F0C4F8040007D000F0DAFA0B ++:10EA100020B1D4F8F010087830B901E0022070BDC0 ++:10EA2000D4F83C01007808B13A2070BD9420005D14 ++:10EA300010F0010F18D0D5F802004860D5F8060094 ++:10EA4000886054F8F00F698910228181206805F1EF ++:10EA50000C010E300FF039FF216803200870216887 ++:10EA600028884880002070BD0C2070BD10B5044679 ++:10EA700007F0F7FA08B10C2010BD6079032824D8FC ++:10EA8000A179012921D8A17B03291ED8617BE1B19D ++:10EA900007291AD82179052917D2DFE801F0030CDC ++:10EAA000030303002288202A0FD361888A420CD8EE ++:10EAB000B1F5804F09D805F071FFB9492079487048 ++:10EAC0002046BDE8104006F031B8122010BD10B548 ++:10EAD0001F2801D9122010BD06F0A2F8002010BD99 ++:10EAE00010B51F2801D9122010BD06F088F80020AB ++:10EAF00010BD7CB5012802D000285DD070E005F083 ++:10EB0000FDFE00286CD005F02FFF002868D007F02C ++:10EB1000A8FA002856D105F0A7FEA0F57F41FF39DD ++:10EB200050D105F0B9FF9E4E707848B1012807D04A ++:10EB3000042805D0002007F06FF8D0B3FFDF4DE0C8 ++:10EB40000022072101A800F0F1FF040032D095480F ++:10EB50000321846020460AF013FB204606F065F985 ++:10EB60008F4D0121288BA4F84A00688BA4F84C0033 ++:10EB7000B08B07F019F90146A0620022204606F08A ++:10EB800052FC6A8B298BF07D0090B37D208801F0C8 ++:10EB9000BAF800B1FFDF208805F004FD204607F039 ++:10EBA0003BF800B1FFDF002204F5C4712046FFF7F7 ++:10EBB00008FD13E009207CBD06F016FC044606F0B3 ++:10EBC000CFFF08B10C207CBD44B1208805F0EBFCE0 ++:10EBD0002088072100F0EEFF00B1FFDF00207CBDA0 ++:10EBE00012207CBD70B50D46072100F0D1FF040056 ++:10EBF00003D094F8690110B10AE0022070BD94F8C6 ++:10EC00006400142801D0152802D194F8AA0108B193 ++:10EC10000C2070BD1022294604F5B5700FF055FE8A ++:10EC2000012084F86901002070BD10B5072100F0B3 ++:10EC3000AFFF18B190F8691111B107E0022010BDC3 ++:10EC400090F86410142903D0152901D00C2010BDB0 ++:10EC5000022180F86911002010BD2DE9FC410C460D ++:10EC60004BF68032122194421DD8E4B16946FEF77A ++:10EC7000C1FF002815D19DF8000000F021F9019E88 ++:10EC80009DF80000583600F01BF9019DAD1C2F883F ++:10EC90002246394630460AF036FA2888B842F6D17C ++:10ECA0000020BDE8FC810846FBE77CB504460088EF ++:10ECB0006946FEF79FFF002817D19DF8000000F07D ++:10ECC000FFF8019D9DF80000583500F0F9F87F210C ++:10ECD0000198297269720021A972A17800F82C1F8D ++:10ECE000E17841702179817000207CBD1CB50C4613 ++:10ECF0006946FEF77FFF00280AD19DF8000000F06A ++:10ED0000DFF8019890F8720000B101202070002017 ++:10ED10001CBD1CB50C466946FEF76CFF002809D1E6 ++:10ED20009DF8000000F0CCF8019890F82C00012824 ++:10ED300001D00C201CBD9DF8000000F0C1F8019826 ++:10ED400090F86000207000201CBD70B50D4616467E ++:10ED5000072100F01DFF38B381880124C388428851 ++:10ED600004EB4104AC4217D842F210746343A41080 ++:10ED70006243B3FBF2F2521E94B24FF4FA72944221 ++:10ED800000D91446A54200D22C46491C641CB4FB91 ++:10ED9000F1F24A43521E91B290F8962142B906E030 ++:10EDA000020600205C000020FFE7022070BD018405 ++:10EDB0003180002070BD10B50C46072100F0E8FE40 ++:10EDC00048B180F8D74024B190F8D51009B107F0C8 ++:10EDD00008F8002010BD022010BD017889B14178EB ++:10EDE00079B141881B290CD381881B2909D3C1889B ++:10EDF000022906D3814902684A6540688865002077 ++:10EE000070471220704710B504460CF0EFFB204607 ++:10EE100006F099FF002010BD2DE9F04115460F4680 ++:10EE200006460122114638460CF0E4FB0446012157 ++:10EE3000384606F0B9FF844200D20446012130462C ++:10EE400000F043F806460121002000F03EF831189A ++:10EE5000012096318C4206D901F19600611AB1FB6E ++:10EE6000F0F0401C80B228800020BDE8F08110B591 ++:10EE7000044600F060F808B10C2010BD601C0AF0D8 ++:10EE800035F8207800F0010005F08BFD207800F0C7 ++:10EE900001000BF03BFB002010BD10B5044607F04D ++:10EEA000E0F808B10C2010BD204605F0C9FE002096 ++:10EEB00010BD18B1022801D0012070470020704712 ++:10EEC00008B1002070470120704710B5012904D017 ++:10EED000022905D0FFDF204610BDC000503001E000 ++:10EEE00080002C3084B2F6E7022903D0C0007030D5 ++:10EEF00080B2704780003C30FAE710B50CF0E3FCBC ++:10EF0000042805D00CF0DFFC052801D0002010BD3E ++:10EF1000012010BD10B5FFF7F0FF10B10BF06AFB38 ++:10EF200028B907F09EF820B105F017FD08B10120BF ++:10EF300010BD002010BD10B5FFF7DFFF18B907F0B6 ++:10EF400090F8002800D0012010BD2DE9FE430025D7 ++:10EF50000F4680460A260421404603F0C8FF40467B ++:10EF60000AF0DCF9062000F0BBFD044615E0694616 ++:10EF7000062000F096FD0AE0BDF80400B84206D075 ++:10EF80000298042241460E300FF073FC50B16846DF ++:10EF900000F065FD0500EFD0641E002C06DD002D9D ++:10EFA000E5D005E040460AF0C3F9F5E705B9FFDF13 ++:10EFB000D8F800000AF0B1F8761E01D00028CAD0B7 ++:10EFC000BDE8FE8390F8C81090F8720020B919B11E ++:10EFD000042901D0012070470020704701780029E2 ++:10EFE0000AD0416891F8D520002A05D0002281F886 ++:10EFF000D520406806F0F5BE70470000C40500202B ++:10F0000030B5058825F4004421448CB24FF400410A ++:10F0100094420AD2121B92B21B339A4201D2A943E4 ++:10F0200007E005F40041214303E0A21A92B2A9438C ++:10F030001143018030BD0844083050434A31084430 ++:10F0400080B2704770B51D4616460B4604462946E9 ++:10F050003046049AFFF7EFFF0646B34200D2FFDFC7 ++:10F06000282120460FF0D2FC4FF6FF70A082283EE8 ++:10F07000B0B265776080B0F5004F00D9FFDF6188DE ++:10F0800005F13C00814200D2FFDF60880835401B5B ++:10F09000343880B220801B2800D21B202080002022 ++:10F0A000A07770BD8161886170472DE9F05F0D46E2 ++:10F0B000C188044600F12809008921F4004620F4A3 ++:10F0C000004800F062FB10B10020BDE8F09F4FF057 ++:10F0D000000A4FF0010BB0450CD9617FA8EB060088 ++:10F0E000401A0838854219DC09EB0600002105802A ++:10F0F00041801AE06088617F801B471A083F0DD469 ++:10F100001B2F00DAFFDFBD4201DC294600E0B9B267 ++:10F11000681A0204120C04D0424502DD84F817A0DC ++:10F12000D2E709EB06000180428084F817B0CCE7F3 ++:10F1300070B5044600F12802C088E37D20F4004049 ++:10F140002BB110440288438813448B4201D2002023 ++:10F1500070BD00258A4202D30180458008E0891AEB ++:10F160000904090C418003D0A01D00F01EFB08E03B ++:10F17000637F00880833184481B26288A01DFFF7BE ++:10F180003FFFE575012070BD70B5034600F128040E ++:10F19000C588808820F400462644A84202D1002079 ++:10F1A000188270BD98893588A84206D3401B75889F ++:10F1B0002D1A2044ADB2C01E05E02C1AA5B25C7F0A ++:10F1C00020443044401D0C88AC4200D90D809C89FD ++:10F1D00024B1002414700988198270BD0124F9E754 ++:10F1E00070B5044600F12801808820F400404518DD ++:10F1F000208A002825D0A189084480B2A0812988CE ++:10F200006A881144814200D2FFDF2888698800267D ++:10F210000844A189884212D1A069807F2871698839 ++:10F2200019B1201D00F0C1FA08E0637F2888083377 ++:10F23000184481B26288201DFFF7E2FEA681268273 ++:10F24000012070BD2DE9F0414189878800260446E0 ++:10F2500000F12805B94218D004F10A0821F4004051 ++:10F260002844418819B1404600F09FFA08E0637FC6 ++:10F2700000880833184481B262884046FFF7C0FE18 ++:10F28000761C6189B6B2B942E8D13046BDE8F0815A ++:10F290002DE9F04104460B4627892830A68827F43B ++:10F2A0000041B4F80A8001440D46B74201D1002064 ++:10F2B000ECE70AB1481D106023B1627F691D184652 ++:10F2C0000FF003FB2E88698804F1080021B18A1928 ++:10F2D00096B200F06AFA06E0637F628808339919F3 ++:10F2E00089B2FFF78DFE474501D120896081304604 ++:10F2F000CCE78188C088814201D10120704700207D ++:10F30000704701898088814201D101207047002027 ++:10F31000704770B58588C38800F1280425F4004241 ++:10F3200023F4004114449D421AD08389058A5E1952 ++:10F3300025886388EC18A64214D313B18B4211D3ED ++:10F340000EE0437F08325C192244408892B2801A52 ++:10F3500080B22333984201D211B103E08A4201D135 ++:10F36000002070BD012070BD2DE9F0478846C1889E ++:10F370000446008921F4004604F1280720F40045E2 ++:10F3800007EB060900F001FA002178BBB54204D969 ++:10F39000627FA81B801A002503E06088627F801BC3 ++:10F3A000801A083823D4E28962B1B9F80020B9F88C ++:10F3B00002303BB1E81A2177404518DBE089384438 ++:10F3C000801A09E0801A217740450ADB607FE189D5 ++:10F3D0000830304439440844C01EA4F81280BDE807 ++:10F3E000F087454503DB01202077E7E7FFE76182EF ++:10F3F0000020F4E72DE9F74F044600F12805C08806 ++:10F40000884620F4004A608A05EB0A0608B14045A8 ++:10F4100002D20020BDE8FE8FE08978B13788B6F8C7 ++:10F42000029007EB0901884200D0FFDF207F4FF0F8 ++:10F43000000B50EA090106D088B33BE00027A07F0B ++:10F44000B9463071F2E7E18959B1607F294408304B ++:10F4500050440844B4F81F1020F8031D94F82110FC ++:10F460008170E28907EB080002EB0801E18130803E ++:10F47000A6F802B002985F4650B1637F3088083327 ++:10F48000184481B26288A01DFFF7BAFDE78121E030 ++:10F49000607FE18908305044294408442DE0FFE7AB ++:10F4A000E089B4F81F102844C01B20F8031D94F80D ++:10F4B0002110817009EB0800E28981B202EB08009B ++:10F4C000E081378071800298A0B1A01D00F06DF935 ++:10F4D000A4F80EB0A07F401CA077A07D08B1E08802 ++:10F4E000A08284F816B000BFA4F812B084F817B058 ++:10F4F00001208FE7E0892844C01B30F8031DA4F8E1 ++:10F500001F10807884F82100EEE710B5818800F1A3 ++:10F51000280321F400442344848AC288A14212D0E3 ++:10F52000914210D0818971B9826972B11046FFF79A ++:10F53000E8FE50B91089283220F4004010441979AF ++:10F540000079884201D1002010BD184610BD00F19D ++:10F550002803407F08300844C01E1060088808B99E ++:10F56000DB1E136008884988084480B270472DE983 ++:10F57000F04100F12806407F1C46083090464318B1 ++:10F5800008884D88069ADB1EA0B1C01C80B290424C ++:10F5900014D9801AA04200DB204687B298183A4658 ++:10F5A00041460FF066F9002816D1E01B84B2B8443A ++:10F5B000002005E0ED1CADB2F61EE8E7101A80B29F ++:10F5C0000119A94206D8304422464146BDE8F0411F ++:10F5D0000FF04FB94FF0FF3058E62DE9F04100F140 ++:10F5E0002804407F1E4608309046431800250888AE ++:10F5F0004F88069ADB1E90B1C01C80B2904212D98F ++:10F60000801AB04200DB304685B299182A4640463F ++:10F610000FF05BF9701B86B2A844002005E0FF1CC8 ++:10F62000BFB2E41EEAE7101A80B28119B94206D8C7 ++:10F630002118324640460FF048F9A81985B22846ED ++:10F6400024E62DE9F04100F12804407F1E460830F1 ++:10F6500090464318002508884F88069ADB1E90B113 ++:10F66000C01C80B2904212D9801AB04200DB3046F2 ++:10F6700085B298182A4641460FF027F9701B86B2CA ++:10F68000A844002005E0FF1CBFB2E41EEAE7101A00 ++:10F6900080B28119B94206D82044324641460FF063 ++:10F6A00014F9A81985B22846F0E5401D704710B539 ++:10F6B000044600F12801C288808820F400431944E0 ++:10F6C000904206D0A28922B9228A12B9A28A904217 ++:10F6D00001D1002010BD0888498831B1201D00F0FB ++:10F6E00064F800202082012010BD637F6288083307 ++:10F6F000184481B2201DFFF783FCF2E70021C1818D ++:10F7000001774182C1758175704703881380C28972 ++:10F7100042B1C28822F4004300F128021A440A6070 ++:10F72000C08970470020704710B50446808AA0F554 ++:10F730007F41FF3900D0FFDFE088A082E08900B17F ++:10F740000120A07510BD4FF6FF71818200218175E7 ++:10F75000704710B50446808AA0F57F41FF3900D17B ++:10F76000FFDFA07D28B9A088A18A884201D10020AE ++:10F7700010BD012010BD8188828A914201D1807D17 ++:10F7800008B1002070470120704720F4004221F4A6 ++:10F7900000439A4207D100F4004001F4004188423E ++:10F7A00001D0012070470020704730B50446008822 ++:10F7B0000D4620F40040A84200D2FFDF21884FF41C ++:10F7C000004088432843208030BD70B50C000546BA ++:10F7D00009D0082C00D2FFDF1DB1A1B2286800F0CB ++:10F7E00044F8201D70BD0DB100202860002070BDC0 ++:10F7F0000021026803E093881268194489B2002A44 ++:10F80000F9D100F032B870B500260D46044608293B ++:10F8100000D2FFDF206808B91EE004462068818816 ++:10F82000A94202D001680029F7D181880646A94281 ++:10F8300001D100680DE005F1080293B2002299425F ++:10F8400009D32844491B026081802168096821602E ++:10F850000160206000E00026304670BD00230B6090 ++:10F860008A8002680A600160704700234360021DBD ++:10F87000018102607047F0B50F4601884088154647 ++:10F880000C181E46AC4200D3641B3044A84200D979 ++:10F89000FFDFA019A84200D9FFDF3819F0BD2DE91C ++:10F8A000F041884606460188408815460C181F46D8 ++:10F8B000AC4200D3641B3844A84200D9FFDFE019F2 ++:10F8C000A84200D9FFDF70883844708008EB04003C ++:10F8D000BDE8F0812DE9F041054600881E46174637 ++:10F8E000841B8846BC4200D33C442C80688830444A ++:10F8F000B84200D9FFDFA019B84200D9FFDF6888FD ++:10F900003044688008EB0400E2E72DE9F041068806 ++:10F910001D460446701980B2174688462080B842BA ++:10F9200001D3C01B20806088A84200D2FFDF70197D ++:10F93000B84200D9FFDF6088401B608008EB0600FA ++:10F94000C6E730B50D460188CC18944200D3A41AFE ++:10F950004088984200D8FFDF281930BD2DE9F041DA ++:10F96000C84D04469046A8780E46A04200D8FFDF56 ++:10F9700005EB8607B86A50F8240000B1FFDFB868CD ++:10F98000002816D0304600F044F90146B868FFF769 ++:10F990003AFF05000CD0B86A082E40F8245000D376 ++:10F9A000FFDFB9484246294650F82630204698479E ++:10F9B0002846BDE8F0812DE9F8431E468C19914692 ++:10F9C0000F460546FF2C00D9FFDFB14500D9FFDF08 ++:10F9D000E4B200954DB300208046E81C20F00300FF ++:10F9E000A84200D0FFDF4946DFF89892684689F8C0 ++:10F9F000001089F8017089F8024089F8034089F8FD ++:10FA0000044089F8054089F8066089F80770414686 ++:10FA100000F008F9002142460F464B460098C01CF2 ++:10FA200020F00300009012B10EE00120D4E703EBB8 ++:10FA30008106B062002005E0D6F828C04CF820709E ++:10FA4000401CC0B2A042F7D30098491C00EB8400D0 ++:10FA5000C9B200900829E1D3401BBDE8F88310B576 ++:10FA6000044603F08FFD08B1102010BD2078854AB0 ++:10FA7000618802EB800092780EE0836A53F82130AF ++:10FA800043B14A1C6280A180806A50F82100A060C6 ++:10FA9000002010BD491C89B28A42EED86180052041 ++:10FAA00010BD70B505460C46084603F06BFD08B165 ++:10FAB000102070BD082D01D3072070BD25700020D7 ++:10FAC000608070BD0EB56946FFF7EBFF00B1FFDF48 ++:10FAD0006846FFF7C4FF08B100200EBD01200EBD2F ++:10FAE00010B50446082800D3FFDF6648005D10BD4E ++:10FAF0003EB5054600246946FFF7D3FF18B1FFDF86 ++:10FB000001E0641CE4B26846FFF7A9FF0028F8D0C2 ++:10FB10002846FFF7E5FF001BC0B23EBD5949897872 ++:10FB2000814201D9C0B27047FF2070472DE9F041F2 ++:10FB3000544B062903D007291CD19D7900E00025EC ++:10FB400000244FF6FF7603EB810713F801C00AE0AB ++:10FB50006319D7F828E09BB25EF823E0BEF1000FEE ++:10FB600004D0641CA4B2A445F2D8334603801846DE ++:10FB7000B34201D100201CE7BDE8F041EEE6A0F55C ++:10FB80007F43FF3B01D0082901D300207047E5E601 ++:10FB9000A0F57F42FF3A0BD0082909D2394A937861 ++:10FBA000834205D902EB8101896A51F82000704730 ++:10FBB000002070472DE9F04104460D46A4F57F4131 ++:10FBC00043F20200FF3902D0082D01D30720F0E6EE ++:10FBD0002C494FF000088A78A242F8D901EB85063B ++:10FBE000B26A52F82470002FF1D0274839462030ED ++:10FBF00050F8252020469047B16A284641F82480D5 ++:10FC000000F007F802463946B068FFF727FE0020EB ++:10FC1000CFE61D49403131F810004FF6FC71C01C91 ++:10FC2000084070472DE9F843164E884605460024E3 ++:10FC30002868C01C20F0030028602046FFF7E9FF79 ++:10FC4000315D4843B8F1000F01D0002200E02A687E ++:10FC50000146009232B100274FEA0D00FFF7B5FDD3 ++:10FC60001FB106E001270020F8E706EB8401009AA7 ++:10FC70008A602968641C0844E4B22860082CD7D341 ++:10FC8000EBE600002406002008EE010070B50E46E9 ++:10FC90001D46114600F0D4F804462946304600F0CF ++:10FCA000D8F82044001D70BD2DE9F04190460D4666 ++:10FCB00004004FF0000610D00027E01C20F00300E5 ++:10FCC000A04200D0FFDFDDB141460020FFF77DFDFF ++:10FCD0000C3000EB850617B112E00127EDE7614F0C ++:10FCE00004F10C00A9003C602572606000EB850007 ++:10FCF000206060680EF08AFE41463868FFF765FDB7 ++:10FD00003046BDE8F0812DE9FF4F564C804681B06A ++:10FD100020689A46934600B9FFDF2068027A424580 ++:10FD200003D9416851F8280020B143F2020005B020 ++:10FD3000BDE8F08F5146029800F082F886B258462E ++:10FD40000E9900F086F885B27019001D87B2206800 ++:10FD5000A14639460068FFF756FD04001FD06780B2 ++:10FD600025802946201D0E9D07465A4601230095F1 ++:10FD7000FFF768F92088314638440123029ACDF80C ++:10FD800000A0FFF75FF92088C1193846FFF78AF90C ++:10FD9000D9F800004168002041F82840C7E7042056 ++:10FDA000C5E770B52F4C0546206800B9FFDF206815 ++:10FDB000017AA9420ED9426852F8251051B10023A8 ++:10FDC00042F825304A880068FFF748FD2168002086 ++:10FDD0000A7A08E043F2020070BD4B6853F8203005 ++:10FDE00033B9401CC0B28242F7D80868FFF700FD63 ++:10FDF000002070BD70B51B4E05460024306800B968 ++:10FE0000FFDF3068017AA94204D9406850F8250024 ++:10FE100000B1041D204670BD70B5124E0546002489 ++:10FE2000306800B9FFDF3068017AA94206D940681E ++:10FE300050F8251011B131F8040B4418204670BD5C ++:10FE400010B50A460121FFF7F6F8C01C20F00300A8 ++:10FE500010BD10B50A460121FFF7EDF8C01C20F0D7 ++:10FE6000030010BD7000002070B50446C2F11005FB ++:10FE700028190EF02AFD15F0FF0108D0491EC9B25D ++:10FE8000802060542046BDE870400EF09DBD70BDDE ++:10FE900030B505E05B1EDBB2CC5CD55C6C40C45475 ++:10FEA000002BF7D130BD10B5002409E00B78521EAD ++:10FEB00044EA430300F8013B11F8013BD2B2DC09EC ++:10FEC000002AF3D110BD2DE9F04389B01E46DDE9CB ++:10FED000107990460D00044622D002460846F949A2 ++:10FEE000FEF7E1F8102221463846FFF7DCFFE07B01 ++:10FEF000000606D5F34A3946102310320846FFF7AC ++:10FF0000C7FF102239464846FFF7CDFFF87B0006B1 ++:10FF100006D5EC4A4946102310320846FFF7B8FFD1 ++:10FF2000102120460EF050FD0DE0103EB6B208EB59 ++:10FF30000601102322466846FFF7AAFF22462846FC ++:10FF40006946FEF7B0F8102EEFD818D0F2B241464D ++:10FF50006846FFF789FF10234A46694604A8FFF761 ++:10FF600097FF1023224604A96846FFF791FF224617 ++:10FF700028466946FEF797F809B0BDE8F0831023DC ++:10FF80003A464146EAE770B59CB01E460546134620 ++:10FF900020980C468DF80800202219460DF1090022 ++:10FFA0000EF093FC202221460DF129000EF08DFC6D ++:10FFB00017A913A8CDE90001412302AA314628461A ++:10FFC000FFF781FF1CB070BD2DE9FF4F9FB014AE4D ++:10FFD000DDE92D5410AFBB49CDE900762023203157 ++:10FFE0001AA8FFF770FF4FF000088DF808804FF057 ++:10FFF00001098DF8099054F8010FCDF80A00A08886 ++:020000040001F9 ++:10000000ADF80E0014F8010C1022C0F340008DF87A ++:10001000100055F8010FCDF81100A888ADF81500B3 ++:1000200015F8010C2C99C0F340008DF8170006A8B4 ++:1000300082460EF04AFC0AA88346102222990EF04E ++:1000400044FCA0483523083802AA40688DF83C805B ++:10005000CDE900760E901AA91F98FFF734FF8DF8AE ++:1000600008808DF809902068CDF80A00A088ADF8C6 ++:100070000E0014F8010C1022C0F340008DF810009F ++:100080002868CDF81100A888ADF8150015F8010C06 ++:100090002C99C0F340008DF8170050460EF015FC67 ++:1000A0005846102222990EF010FC86483523083855 ++:1000B00002AA40688DF83C90CDE900760E901AA90E ++:1000C0002098FFF700FF23B0BDE8F08FF0B59BB09C ++:1000D0000C460546DDE922101E461746DDE92032B2 ++:1000E000D0F801C0CDF808C0B0F805C0ADF80CC01C ++:1000F0000078C0F340008DF80E00D1F80100CDF873 ++:100100000F00B1F80500ADF8130008781946C0F3E8 ++:1001100040008DF815001088ADF8160090788DF825 ++:1001200018000DF1190010220EF0CFFB0DF129007F ++:10013000102231460EF0C9FB0DF13900102239466C ++:100140000EF0C3FB17A913A8CDE90001412302AAB1 ++:1001500021462846FFF7B7FE1BB0F0BDF0B5A3B0AF ++:1001600017460D4604461E46102202A828990EF096 ++:10017000ACFB06A8202239460EF0A7FB0EA82022D1 ++:1001800029460EF0A2FB1EA91AA8CDE900015023B2 ++:1001900002AA314616A8FFF796FE1698206023B0F3 ++:1001A000F0BDF0B589B00446DDE90E070D4639789B ++:1001B000109EC1F340018DF8001031789446C1F3D0 ++:1001C00040018DF801101968CDF802109988ADF83A ++:1001D000061099798DF808100168CDF8091081880A ++:1001E000ADF80D1080798DF80F0010236A46614636 ++:1001F00004A8FFF74DFE2246284604A9FDF753FF49 ++:10020000D6F801000090B6F80500ADF80400D7F864 ++:100210000100CDF80600B7F80500ADF80A0000208F ++:10022000039010236A46214604A8FFF731FE2246B8 ++:10023000284604A9FDF737FF09B0F0BD1FB51C68BB ++:1002400000945B680193136802935268039202461C ++:1002500008466946FDF727FF1FBD10B588B0044664 ++:10026000106804905068059000200690079008469A ++:100270006A4604A9FDF717FFBDF80000208008B00A ++:1002800010BD1FB51288ADF800201A88ADF8022005 ++:100290000022019202920392024608466946FDF747 ++:1002A00002FF1FBD7FB5074B14460546083B9A1C4D ++:1002B0006846FFF7E6FF224669462846FFF7CDFF6E ++:1002C0007FBD000060EE010070B5044600780E4668 ++:1002D000012813D0052802D0092813D10EE0A06808 ++:1002E00061690578052003F0DBF8052D0AD0782335 ++:1002F00000220520616903F029F803E00520616907 ++:1003000003F0CEF831462046BDE8704001F086B8D3 ++:1003100010B500F12D02C3799478411D64F00304F7 ++:100320002340C371DB070DD04B79547923404B71C7 ++:100330000B79127913400B718278C9788A4200D9FF ++:10034000817010BD00224A710A71F5E741780129D8 ++:1003500000D00C21017070472DE9F04F93B04FF0A1 ++:10036000000B0C690D468DF820B0097801260C2091 ++:1003700017464FF00D084FF0110A4FF008091B29DE ++:1003800075D2DFE811F01B00C30206031E035D03F4 ++:100390007003A203B703F803190461049304A004D3 ++:1003A000EC042A05340552055D05EE0531063406D8 ++:1003B00063067F06F9061D07E606EB0614B12078F2 ++:1003C0001D282AD0D5F808805FEA08004FD0012008 ++:1003D0008DF82000686A02220D908DF824200A20F2 ++:1003E0008DF82500A8690A90A8880028EED098F812 ++:1003F000001091B10F2910D27ED2DFE801F07D13F9 ++:1004000049DEFEFDFCFBFAF938089CF8F7000228EB ++:100410002DD124B120780C2801D00026EFE38DF8EF ++:100420002020CBE10520696A03F03AF8A888072864 ++:10043000EED1204600F0EDFF022809D0204600F062 ++:10044000E8FF032807D9204600F0E3FF072802D27F ++:100450000120207004E0002CB8D020780128D7D1EA ++:1004600098F80400C11F0A2902D30A2061E0C4E100 ++:10047000A070D8F80010E162B8F80410218698F84E ++:10048000060084F83200012028700320207044E028 ++:100490000728BDD1002C99D020780D28B8D198F824 ++:1004A000031094F82F20C1F3C000C2F3C002104221 ++:1004B00001D0062000E00720890707D198F8051031 ++:1004C0000142D2D198F806100142CED194F83120E1 ++:1004D00098F8051020EA02021142C6D194F83220A1 ++:1004E00098F8061090430142BFD198F80400C11F4C ++:1004F0000A29BAD2617D00E006E281427ED8D8F8AE ++:1005000000106160B8F80410218198F80600A0720C ++:10051000012028700E20207003208DF82000686ACA ++:100520000D9004F12D000990601D0A900F300B9082 ++:1005300022E12875FDE3412891D1204600F069FFB2 ++:10054000042802D1E078C00704D1204600F061FF02 ++:100550000F2884D1A88CD5F80C8080B24FF0400BC6 ++:10056000E669FFF747FC324641465B464E46CDF80A ++:100570000090FFF732F80B208DF82000686A0D908C ++:10058000E0690990002108A8FFF79EFE2078042862 ++:1005900006D0A07D58B1012809D003280AD049E32C ++:1005A00005202070032028708DF82060CDE184F8AC ++:1005B00000A032E712202070E9E11128BCD12046CA ++:1005C00000F027FF042802D1E078C00719D02046A8 ++:1005D00000F01FFF062805D1E078C00711D1A07DEB ++:1005E00002280ED0204600F014FF08E0CAE081E0A7 ++:1005F0006FE14EE121E101E1E7E017E0ADE1112813 ++:100600009AD1102208F1010104F13C000EF05DF9CD ++:10061000607801287ED012202070E078C00760D07A ++:10062000A07D0028C8D00128C6D05AE0112890D15A ++:10063000204600F0EEFE082804D0204600F0E9FE37 ++:10064000132886D104F16C00102208F1010106463E ++:100650000EF03BF9207808280DD014202070E178A6 ++:10066000C8070DD0A07D02280AD06278022A04D0E3 ++:100670000328A1D035E00920F0E708B1012837D1DF ++:10068000C80713D0A07D02281DD000200090D4E917 ++:10069000062133460EA8FFF776FC10220EA904F1BE ++:1006A0003C000EF0E6F8C8B1042042E7D4E9091294 ++:1006B000201D8DE8070004F12C0332460EA8616B63 ++:1006C000FFF76FFDE9E7606BC1F34401491E006865 ++:1006D000C84000F0010040F08000D7E720780928EA ++:1006E00006D185F800908DF8209033E32870ECE374 ++:1006F0000920FBE711289AD1204600F08AFE0A283B ++:1007000002D1E078C00704D1204600F082FE15280F ++:100710008DD100E08DE104F13C00102208F10101CF ++:1007200006460EF0D2F820780A2816D0162020703F ++:10073000D4E90932606B611D8DE80F0004F15C03A0 ++:1007400004F16C0247310EA8FFF7C0FC10220EA97D ++:1007500030460EF08EF818B1F5E20B20207071E2F1 ++:100760002046FFF7D5FDA078216A0A18C0F11001D4 ++:1007700010460EF029F923E3394608A8FFF7A4FD37 ++:1007800006463BE20228B6D1204600F042FE04288D ++:1007900004D3204600F03DFE082809D3204600F08F ++:1007A00038FE0E2829D3204600F033FE122824D22A ++:1007B000A07D02289FD10E208DF82000686A0D9040 ++:1007C00098F801008DF82400F0E3022893D1204628 ++:1007D00000F01FFE002810D0204600F01AFE01286D ++:1007E000F9D0204600F015FE0C28F4D004208DF836 ++:1007F000240098F801008DF825005EE21128FCD154 ++:10080000002CFAD020781728F7D16178606A022985 ++:1008100011D0002101EB4101182606EBC101102285 ++:10082000405808F101010EF050F80520696A00F007 ++:10083000E3FD2670F1E50121ECE70B28DDD1002C6A ++:10084000DBD020781828D8D16078616A02281CD0C3 ++:100850005FF0000000EB4002102000EBC2000958DE ++:10086000B8F8010008806078616A02280FD0002083 ++:1008700000EB4002142000EBC2000958404650F83B ++:10088000032F0A604068486039E00120E2E7012058 ++:10089000EEE71128B1D1002CAFD020781928ACD1C7 ++:1008A0006178606A022912D05FF0000101EB41011A ++:1008B0001C2202EBC1011022405808F101010EF088 ++:1008C00004F80520696A00F097FD1A20B6E00121BE ++:1008D000ECE7082891D1002C8FD020781A288CD1F1 ++:1008E000606A98F80120017862F347010170616A3B ++:1008F000D8F8022041F8012FB8F8060088800520BA ++:10090000696A00F079FD8EE2072012E63878012846 ++:1009100094D1182204F1140079680EF01BF8E079E4 ++:10092000C10894F82F0001EAD001E07861F30000DB ++:10093000E070217D002974D12178032909D0C007F6 ++:1009400025D0032028708DF82090686A0D904120F2 ++:1009500004E3607DA178884201D90620E9E50226FA ++:100960002671E179204621F0E001E171617A21F000 ++:10097000F0016172A17A21F0F001A172FFF7C8FCC9 ++:100980002E708DF82090686A0D900720E6E2042012 ++:10099000ACE6387805289DD18DF82000686A0D9066 ++:1009A000B8680A900720ADF824000A988DF830B096 ++:1009B0006168016021898180A17A817104202070A1 ++:1009C000F4E23978052985D18DF82010696A0D91F6 ++:1009D000391D09AE0EC986E80E004121ADF824107C ++:1009E0008DF830B01070A88CD7F80C8080B24026FB ++:1009F000A769FFF711FA41463A463346C846CDF893 ++:100A00000090FEF71EFE002108A8FFF75DFCE078CD ++:100A100020F03E00801CE0702078052802D00F20D6 ++:100A20000CE049E1A07D20B1012802D0032802D0CA ++:100A300002E10720BFE584F80080EEE42070ECE4DA ++:100A4000102104F15C0002F052FA606BB0BBA07D93 ++:100A500018B1012801D00520FDE006202870F748D4 ++:100A60006063A063BEE23878022894D1387908B177 ++:100A70002875B3E3A07D022802D0032805D022E028 ++:100A8000B8680028F5D060631CE06078012806D0C3 ++:100A9000A07994F82E10012805D0E84806E0A17945 ++:100AA00094F82E00F7E7B8680028E2D06063E07899 ++:100AB000C00701D0012902D0E04803E003E0F86854 ++:100AC0000028D6D0A063062010E68DF82090696A31 ++:100AD0000D91E1784846C90709D06178022903D110 ++:100AE000A17D29B1012903D0A17D032900D00720D0 ++:100AF000287031E138780528BBD1207807281ED02E ++:100B000084F800A005208DF82000686A0D90B86870 ++:100B10000A90ADF824A08DF830B003210170E1787F ++:100B2000CA070FD0A27D022A1AD000210091D4E971 ++:100B3000061204F15C03401CFFF725FA67E384F812 ++:100B40000090DFE7D4E90923211D8DE80E0004F1B0 ++:100B50002C0304F15C02401C616BFFF722FB56E39F ++:100B6000626BC1F34401491E1268CA4002F00101E0 ++:100B700041F08001DAE738780528BDD18DF82000F2 ++:100B8000686A0D90B8680A90ADF824A08DF830B06E ++:100B9000042100F8011B102204F15C010DF095FE08 ++:100BA000002108A8FFF790FB2078092801D0132026 ++:100BB00044E70A2020709BE5E078C10742D0A17D80 ++:100BC000012902D0022927D038E0617808A801293C ++:100BD00016D004F16C010091D4E9061204F15C0313 ++:100BE000001DFFF7BBFA0A20287003268DF820802D ++:100BF000686A0D90002108A8FFF766FBDDE2C3E2FA ++:100C000004F15C010091D4E9062104F16C03001D9C ++:100C1000FFF7A4FA0026E9E7C0F3440114290DD236 ++:100C20004FF0006101EBB0104FEAB060E070607807 ++:100C3000012801D01020BEE40620FFE660780128DC ++:100C40003FF4B7AC0A2051E5E178C90708D0A17D8F ++:100C5000012903D10B20287004202FE028702DE0FB ++:100C60000E2028706078616B012817D004F15C03B6 ++:100C700004F16C020EA8FFF7E1FA2046FFF748FBEB ++:100C8000A0780EAEC0F1100130440DF09DFE06209C ++:100C90008DF82000686A09960D909AE004F16C03C3 ++:100CA00004F15C020EA8FFF7C9FAE9E739780229D6 ++:100CB00003D139790029D1D029758FE28DF8200030 ++:100CC000686A0D9058E538780728F6D1D4E90921EB ++:100CD0006078012808D004F16C00CDE9000202918F ++:100CE00005D104F16C0304E004F15C00F5E704F1C4 ++:100CF0005C0304F14C007A680646216AFFF764F948 ++:100D00006078012821D1A078216A0A18C0F1100169 ++:100D100010460DF059FED4E90923606B04F12D0152 ++:100D20008DE80F0004F15C0304F16C0231460EA85B ++:100D300000E055E2FFF7CAF910220EA904F13C00C9 ++:100D40000DF097FD08B10B20AFE485F8008000BFDF ++:100D50008DF82090686A0D908DF824A00CE5387805 ++:100D60000528AAD18DF82000686A0D90B8680A900D ++:100D7000ADF824A08DF830B080F8008061780129AA ++:100D80001AD0D4E9093204F12D01A66B0392009622 ++:100D9000CDE9011304F16C0304F15C0204F14C0190 ++:100DA000401CFFF793F9002108A8FFF78DFA60783F ++:100DB000012805D0152041E6D4E90923611DE4E7A7 ++:100DC0000E20287006208DF82000686ACDF824B027 ++:100DD0000D90A0788DF82800CEE438780328C0D193 ++:100DE000E079C00770D00F202870072066E73878B8 ++:100DF00004286BD11422391D04F114000DF0AAFD52 ++:100E0000616A208CA1F80900616AA078C871E17953 ++:100E1000626A01F003011172616A627A0A73616A9F ++:100E2000A07A81F82400162060E485F800A08DF8EF ++:100E30002090696A50460D9190E0000060EE01003C ++:100E40003878052842D1B868A8616178606A0229BB ++:100E500001D0012100E0002101EB4101142606EB45 ++:100E6000C1014058082102F042F86178606A022905 ++:100E700001D0012100E0002101EB410106EBC1019D ++:100E8000425802A8E169FFF70DFA6078626A022809 ++:100E900001D0012000E0002000EB4001102000EB19 ++:100EA000C1000223105802A90932FEF7F1FF626A5D ++:100EB000FD4B0EA80932A169FFF7E3F96178606A7A ++:100EC000022904D0012103E042E18BE0BDE00021D2 ++:100ED00001EB4101182606EBC101A27840580EA98A ++:100EE0000DF0F3FC6178606A022901D0012100E075 ++:100EF000002101EB410106EBC1014058A1780844F3 ++:100F0000C1F110010DF060FD05208DF82000686A28 ++:100F10000D90A8690A90ADF824A08DF830B0062194 ++:100F200001706278616A022A01D0012200E0002289 ++:100F300002EB420206EBC202401C895810220DF05F ++:100F4000C4FC002108A8FFF7BFF91220C5F818B0AB ++:100F500028708DF82090686A0D900B208DF8240081 ++:100F60000AE43878052870D18DF82000686A0D9061 ++:100F7000B8680A900B20ADF824000A980721017088 ++:100F80006178626A022901D0012100E0002101EBB1 ++:100F90004103102101EBC30151580988A0F8011049 ++:100FA0006178626A022902D0012101E02FE100216B ++:100FB00001EB4103142101EBC30151580A6840F8C9 ++:100FC000032F4968416059E01920287001208DF8ED ++:100FD000300077E6162028708DF830B0002108A880 ++:100FE000FFF772F9032617E114202870B0E638786D ++:100FF00005282AD18DF82000686A0D90B8680A90FB ++:10100000ADF824A08DF830B080F800906278616A65 ++:101010004E46022A01D0012200E0002202EB4202E9 ++:101020001C2303EBC202401C895810220DF04DFC1A ++:10103000002108A8FFF748F9152028708DF82060D6 ++:10104000686A0D908DF824603CE680E038780528C9 ++:101050007DD18DF82000686A0D90B8680A90ADF8CF ++:10106000249009210170616909784908417061691A ++:1010700051F8012FC0F802208988C18020781C28EF ++:10108000A8D1A1E7E078C00702D04FF0060C01E03C ++:101090004FF0070C607802280AD04FF0000000BF24 ++:1010A00000EB040101F1090105D04FF0010004E05B ++:1010B0004FF00100F4E74FF000000B78204413EAF2 ++:1010C0000C030B7010F8092F02EA0C02027004D115 ++:1010D0004FF01B0C84F800C0D2B394F801C0BCF1EF ++:1010E000010F00D09BB990F800C0E0465FEACC7CCD ++:1010F00004D028F001060670102606E05FEA887C1E ++:1011000005D528F00206067013262E70032694F8E3 ++:1011100001C0BCF1020F00D092B991F800C05FEAA3 ++:10112000CC7804D02CF001060E70172106E05FEA9F ++:101130008C7805D52CF002060E701921217000263E ++:101140000078D0BBCAB3C3BB1C20207035E012E0CE ++:1011500002E03878062841D11A2019E420780128C5 ++:101160003CD00C283AD02046FFF7F0F809208DF843 ++:101170002000686A0D9031E03878052805D00620F7 ++:10118000387003261820287046E005218DF82010BD ++:10119000686A0D90B8680A900220ADF8240001201A ++:1011A0008DF830000A980170297D4170394608A8F1 ++:1011B000FFF78AF8064618202870012E0ED02BE083 ++:1011C00001208DF82000686A0D9003208DF824001E ++:1011D000287D8DF8250085F814B012E0287D80B1B7 ++:1011E0001D202070172028708DF82090686A0D90BF ++:1011F00002208DF82400394608A8FFF765F8064656 ++:101200000AE00CB1FE2020709DF8200020B10021E2 ++:1012100008A8FFF759F810E413B03046BDE8F08F86 ++:101220002DE9F04387B00C464E6900218DF804107B ++:1012300001202578034602274FF007094FF0050CDF ++:1012400085B1012D53D0022D39D1FE2030708DF89B ++:101250000030606A059003208DF80400207E8DF830 ++:10126000050063E02179012925D002292DD0032929 ++:1012700028D0042923D1B17D022920D131780D1F36 ++:10128000042D04D30A3D032D01D31D2917D1218933 ++:10129000022914D38DF80470237020899DF804105E ++:1012A00088421BD2082001E058EE01008DF80000B2 ++:1012B000606A059057E070780128EBD0052007B0F0 ++:1012C000BDE8F0831D203070E4E771780229F5D184 ++:1012D00031780C29F3D18DF80490DDE7083402F859 ++:1012E00004CB94E80B0082E80B000320E7E71578B5 ++:1012F000052DE4D18DF800C0656A059595680295C5 ++:101300008DF8101094F80480B8F1010F13D0B8F1E3 ++:10131000020F2DD0B8F1030F1CD0B8F1040FCED1BD ++:10132000ADF804700E202870207E68700021684699 ++:10133000FEF7CAFF0CE0ADF804700B202870207E89 ++:10134000002100F01F0068706846FEF7BDFF37708F ++:101350000020B4E7ADF804708DF8103085F800C0B7 ++:10136000207E6870277011466846FEF7ADFFA6E73D ++:10137000ADF804902B70207F6870607F00F0010052 ++:10138000A870A07F00F01F00E870E27F2A71C007FC ++:101390001CD094F8200000F00700687194F8210038 ++:1013A00000F00700A87100216846FEF78DFF28684D ++:1013B000F062A8883086A87986F83200A069407863 ++:1013C00070752879B0700D203070C1E7A97169710E ++:1013D000E9E700B587B005280CD101208DF80000A1 ++:1013E0008DF80400002005918DF80500014668463F ++:1013F000FEF76AFF07B000BD70B50C46054602F067 ++:101400004FF821462846BDE870407823002201F0BD ++:101410009DBF08B1007870470C20704770B50C0074 ++:1014200005784FF000010CD021702146F2F793F9B6 ++:1014300069482178405D884201D1032070BD0220B7 ++:1014400070BDF2F788F9002070BD0279012A05D03D ++:1014500000220A704B78012B02D003E00420704771 ++:101460000A758A6102799300521C0271C1500320EF ++:101470007047F0B587B00F4605460124287905EB83 ++:10148000800050F8046C7078411E02290AD252493B ++:101490003A46083901EB8000314650F8043C2846B2 ++:1014A000984704460CB1012C11D12879401E10F048 ++:1014B000FF00287101D00324E0E70A208DF8000026 ++:1014C000706A0590002101966846FFF7A7FF032C7C ++:1014D000D4D007B02046F0BD70B515460A46044684 ++:1014E00029461046FFF7C5FF064674B12078FE284E ++:1014F0000BD1207C30B100202870294604F10C006B ++:10150000FFF7B7FF2046FEF721FF304670BD70475A ++:1015100070B50E4604467C210DF078FA0225012EA6 ++:1015200003D0022E04D0052070BD0120607000E0C1 ++:1015300065702046FEF70AFFA575002070BD28B132 ++:10154000027C1AB10A4600F10C01C5E70120704780 ++:1015500010B5044686B0052001F0A2FF2078FE28D1 ++:1015600006D000208DF8000069462046FFF7E7FF0F ++:1015700006B010BD7CB50E4600218DF804104178F0 ++:10158000012903D0022903D0002405E0046900E00A ++:1015900044690CB1217C89B16D4601462846FFF7AC ++:1015A00054FF032809D1324629462046FFF794FF0D ++:1015B0009DF80410002900D004207CBD04F10C0526 ++:1015C000EBE730B40C460146034A204630BC034BDF ++:1015D0000C3AFEF756BE00009CEE010058EE0100EA ++:1015E00070B50D46040011D085B1210128460DF0DB ++:1015F000EBF910224E4928460DF067F94C480121BD ++:101600000838018044804560002070BD012070BD15 ++:1016100070B5474E00240546083E10E07068AA7B6E ++:1016200000EB0410817B914208D1C17BEA7B91429F ++:1016300004D10C2229460DF01CF930B1641C30880D ++:101640008442EBDB4FF0FF3070BD204670BD70B5BB ++:101650000D46060006D02DB1FFF7DAFF002803DBA8 ++:10166000401C14E0102070BD314C083C208862887A ++:10167000411C914201D9042070BD6168102201EB28 ++:10168000001031460DF021F92088401C2080287080 ++:10169000002070BD70B514460D0018D0BCB10021FB ++:1016A000A170022802D0102811D105E0288870B15D ++:1016B0000121A170108008E02846FFF7A9FF00284B ++:1016C00005DB401CA070A8892080002070BD01208F ++:1016D00070BD70B5054614460E000BD0002030706A ++:1016E000A878012808D005D91149A1F108010A8874 ++:1016F00090420AD9012070BD24B128782070288832 ++:10170000000A5070022008700FE064B1496810228E ++:1017100001EB0011204610390DF0D7F8287820731E ++:101720002888000A607310203070002070BD00000F ++:101730007C0000202DE9F04190460C46074600252C ++:10174000FE48072F00EB881607D2DFE807F00707EF ++:10175000070704040400012500E0FFDF06F8147009 ++:10176000002D13D0F548803000EB880191F8270058 ++:10177000202803D006EB4000447001E081F82640A9 ++:1017800006EB44022020507081F82740BDE8F0812C ++:10179000F0B51F4614460E460546202A00D1FFDF4D ++:1017A000E649E648803100EB871C0CEB440001EB76 ++:1017B0008702202E07D00CEB460140784B7848700A ++:1017C000184620210AE092F82530407882F825005A ++:1017D000F6E701460CEB410005704078A142F8D1D4 ++:1017E00092F82740202C03D00CEB4404637001E0F6 ++:1017F00082F826300CEB41042023637082F8271016 ++:10180000F0BD30B50D46CE4B44190022181A72EBCC ++:10181000020100D2FFDFCB48854200DDFFDFC9486F ++:101820004042854200DAFFDFC548401C844207DAA7 ++:10183000002C01DB204630BDC148401C201830BDC3 ++:10184000BF48C043FAE710B504460168407ABE4A73 ++:1018500052F82020114450B10220084420F07F406B ++:10186000F9F78FFC94F90810BDE81040C9E704208F ++:10187000F3E72DE9F047B14E803696F82D50DFF8AA ++:10188000BC9206EB850090F8264034E009EB851702 ++:101890004FF0070817F81400012806D004282ED0AE ++:1018A00005282ED0062800D0FFDF01F0E3F801461E ++:1018B00007EB4400427806EB850080F8262090F87C ++:1018C0002720A24202D1202280F82720084601F0DA ++:1018D000DCF82A4621460120FFF72CFF9B484146B1 ++:1018E00000EB041002682046904796F82D5006EB56 ++:1018F000850090F82640202CC8D1BDE8F087022052 ++:1019000000E003208046D0E710B58C4C20218034C5 ++:1019100084F8251084F8261084F82710002084F815 ++:10192000280084F82D0084F82E10411EA16044F890 ++:10193000100B2074607420736073A0738449E07787 ++:1019400020750870487000217C4A103C02F8110094 ++:10195000491CC9B22029F9D30120F9F700FB002066 ++:10196000F9F7FDFA012084F82200F9F79DFF794884 ++:10197000F9F7A9FF764CA41E20707748F9F7A3FF6A ++:101980006070BDE81040F9F777BA10B5F9F799FA29 ++:101990006F4CA41E2078F9F7AFFF6078F9F7ACFF21 ++:1019A000BDE8104001F09EB8202070472DE9F34FAC ++:1019B000624E0025803606EB810A89B09AF8250030 ++:1019C000202822D0691E02916049009501EB001089 ++:1019D0008146D0E90112C0680391CDE90420B08BA3 ++:1019E000ADF81C00B07F8DF81E009DF81500C8B141 ++:1019F0000227554951F820400399E219114421F07A ++:101A00007F41019184B102210FE00120F9F7A7FA8B ++:101A10000020F9F7A4FAF9F772FA01F063F886F8F2 ++:101A20002F50A0E00427E4E700218DF818100228C9 ++:101A300001D0012820D10398391901440998081AC6 ++:101A40009DF81C1020F07F4001B10221333181420A ++:101A50000BD203208DF815000398C4F13201401A0F ++:101A600020F07F40322403900CE096F8240018B94F ++:101A700001F0A0F900284CD0322C03D214B101F0AF ++:101A800025F801E001F02EF8314A107818B393469A ++:101A90005278039B121B00219DF81840984601289C ++:101AA0001AD0032818D000208DF81E00002A04DD6B ++:101AB000981A039001208DF818009DF81C0000B1C1 ++:101AC00002210398254A20F07F40039003AB099838 ++:101AD00001F014F810B110E00120E5E79DF81D00B9 ++:101AE00018B99BF80000032812D08DF81C50CDF8CF ++:101AF0000C808DF818408DF81E509DF8180058B1D4 ++:101B000003980123C11900221846F9F77BFA06E071 ++:101B100000200BB0BDE8F08F0120F9F720FA99F909 ++:101B20000C20012300200199F9F76CFA012086F8B6 ++:101B30002F008AF828502022694611E06C08002006 ++:101B4000FF7F841E0020A107ACEE01006C06002080 ++:101B50008E000020FB31010073180100FFFF3F00E1 ++:101B6000F9480CF0F7FE0120D3E72DE9F05FDFF82C ++:101B7000D883064608EB860090F82550202D1FD00C ++:101B8000A8F180002C4600EB8617A0F50079DFF85D ++:101B9000BCB305E0A24607EB4A004478202C0AD0EB ++:101BA000F9F77CFA09EB04135A4601211B1D00F0DA ++:101BB000A5FF0028EED0AC4202D0334652461EE0CC ++:101BC000E34808B1AFF30080F9F768FA98F82F20DE ++:101BD0006AB1D8F80C20411C891A0902CA1701EB16 ++:101BE00012610912002902DD0020BDE8F09F314694 ++:101BF000FFF7DCFE08B10120F7E733462A46202133 ++:101C00000420FFF7C5FDEFE72DE9F041CE4C256933 ++:101C1000F9F744FA401B0002C11700EB11600012F3 ++:101C200000D4FFDF94F8220000B1FFDF012784F821 ++:101C3000227094F82E00202800D1FFDF94F82E6047 ++:101C4000202084F82E00002584F82F5084F820509E ++:101C500084F82150BF4825600078022833D003283B ++:101C600031D000202077A068401C05D04FF0FF3015 ++:101C7000A0600120F9F773F90020F9F770F9F9F77E ++:101C80006EFAF9F766FAF9F73AF90CF02BF9B2485F ++:101C9000056005604FF0E0214FF40040B846C1F800 ++:101CA0008002F1F776F994F82D703846FFF75DFF62 ++:101CB0000028FAD0A448803800EB871010F81600EE ++:101CC000022802D006E00120CCE73A463146062041 ++:101CD000FFF730FD84F8238004EB870090F826009E ++:101CE000202804D09B48801E4078F9F70BFE207F07 ++:101CF000002803D0F9F723FA2577657746E50146F2 ++:101D0000914810B590F82D200024803800EB821007 ++:101D100010F814302BB1641CE4B2202CF8D320202E ++:101D200010BD8E4800EB0410016021460120FFF732 ++:101D300001FD204610BD10B5012801D0032800D1B7 ++:101D400071B3814A92F82D307F4C0022803C04EB25 ++:101D5000831300BF13F812400CB1082010BD521CB1 ++:101D6000D2B2202AF6D37B4A48B1022807D00729ED ++:101D700016D2DFE801F01506080A0C0E100000214B ++:101D80000AE01B2108E03A2106E0582104E077210F ++:101D900002E0962100E0B52151701070002010BDC6 ++:101DA000072010BD6B4810B54078F9F7EAF980B20A ++:101DB00010BD10B5202811D2634991F82D30A1F142 ++:101DC000800202EB831414F810303BB191F82D30EF ++:101DD00002EB831212F81020012A01D0002010BD5E ++:101DE00091F82D2001460020FFF7A4FC012010BD32 ++:101DF00010B5F9F753F9BDE81040F9F7C2B92DE96C ++:101E0000F0410E46504F01782025803F0C4607EBED ++:101E1000831303E0254603EB45046478944202D023 ++:101E2000202CF7D108E0202C06D0A14206D103EBEC ++:101E300041014978017007E00020A7E403EB44006A ++:101E400003EB450140784870454F7EB127B1002132 ++:101E500040F2DA30AFF300803078A04206D127B1EB ++:101E6000002140F2DD30AFF30080357027B1002152 ++:101E700040F2E230AFF30080012087E410B5426801 ++:101E80000B689A1A1202D41702EB1462121216D4BB ++:101E9000497A91B1427A82B9324A006852F82110E7 ++:101EA000126819441044001D891C081A0002C11749 ++:101EB00000EB11600012322801DB012010BD002070 ++:101EC00010BD2DE9F04781461F48244E00EB8100EC ++:101ED000984690F825402020107006F500701546B1 ++:101EE00000EB81170BE000BF06EB04104946001D14 ++:101EF000FFF7C4FF28B107EB44002C704478202C76 ++:101F0000F2D1297888F8001013E000BF06EB041521 ++:101F1000291D4846FFF7B2FF68B988F80040A97B41 ++:101F200099F80A00814201D80020E6E407EB44005A ++:101F30004478202CEAD10120DFE42DE9FC410E4653 ++:101F400007460024054D18E0EC080020FFFF3F0085 ++:101F5000000000008E00002000F500406C0600200C ++:101F600000000000ACEE01009DF8000005EB001041 ++:101F70008168384600F0D6FD01246B4601AA31463F ++:101F80003846FFF79EFF0028EED02046BDE8FC81D2 ++:101F900070B50446FF480125A54300EB841100EB12 ++:101FA000851040220CF091FCFB4E26B1002140F23E ++:101FB0005C40AFF30080F748803000EB850100EB18 ++:101FC0008400D0F82500C1F8250026B100214FF487 ++:101FD0008C60AFF30080284670BD2DE9FC4184463B ++:101FE000EC481546089C00EB85170E4617F81400C0 ++:101FF000012803D0022801D00020C7E70B46E74A9A ++:102000000121604600F07AFDA8B101AB6A4629467D ++:102010003046FFF756FF70B1DE489DF804209DF86A ++:102020000010803000EB85068A4208D02B46052040 ++:10203000FFF7AEFB0BE02A462146042014E02029DE ++:1020400003D007EB4100407801E096F8250007EB4C ++:10205000440148709DF80000202809D007EB40009B ++:1020600044702A4621460320FFF764FB01208DE7D8 ++:1020700006F8254F0120F070F3E7C94901EB001085 ++:10208000001DFFF7E0BB7CB51D46134604460E4617 ++:1020900000F1080221461846F9F780F894F9080083 ++:1020A0000F2804DD1F3820722068401C206096B184 ++:1020B0000220BC4951F82610461820686946801B4A ++:1020C00020F07F40206094F908002844C01C1F289D ++:1020D00003DA012009E00420EBE701AAF9F75EF832 ++:1020E0009DF8040010B10098401C009000992068F1 ++:1020F00031440844C01C20F07F4060607CBD2DE965 ++:10210000FE430C460646097860799072207998461D ++:102110001546507241B19F48803090F82E1020290A ++:102120000AD00069401D0BE0D4E90223217903B0F5 ++:102130002846BDE8F043A6E79B484178701D084457 ++:1021400020F07F47217900222846A368FFF79BFFF4 ++:102150003946284600F0E6FCD4E902322179684687 ++:10216000FFF791FF41462846019CFFF7E6FE2B460C ++:1021700022460021304600F0C1FC002803D1314640 ++:10218000284600F0CFFCBDE8FE832DE9FE4F8146D6 ++:1021900000F084FC30B1002799F8000020B1002045 ++:1021A000BDE8FE8F0127F7E77A4D7B4C4FF0000A20 ++:1021B000803524B1002140F2D340AFF3008095F880 ++:1021C0002D8085F823A0002624B100214FF49B60C8 ++:1021D000AFF300801FB94046FFF7DAFE804624B116 ++:1021E00000214FF49C60AFF30080F8F757FF43469F ++:1021F0006A464946FFF783FF24B1002140F2E640DA ++:10220000AFF3008095F82E0020280CD029690098A3 ++:10221000401A0002C21700EB1260001203D5684694 ++:1022200000F080FC012624B100214FF49E60AFF342 ++:10223000008095F823000028BBD124B1002140F292 ++:10224000F640AFF30080F8F729FF6B46534A0021B0 ++:1022500000F054FC0028A3D027B941466846FFF798 ++:102260006CFE064326B16846FFF7EDFAC9F8080090 ++:1022700024B1002140F20950AFF3008001208FE724 ++:102280002DE9FF5F8A46814600F008FC414C80340E ++:1022900010B39AF80000002710B1012800D0FFDF2A ++:1022A0003D4D25B1002140F27F50AFF30080012069 ++:1022B000A84600905FEA080604D0002140F287504B ++:1022C000AFF30080009800F0E0FB94F82D50002060 ++:1022D00084F8230067B119E094F82E000127202824 ++:1022E00000D1FFDF9AF800000028D9D0FFDFD7E740 ++:1022F0002846FFF74DFE054626B1002140F29150D9 ++:10230000AFF3008094F823000028D3D126B1002138 ++:1023100040F29B50AFF30080F8F7C0FE83462B4697 ++:1023200001AA5146FFF7EBFE5FEA060804D0002140 ++:1023300040F2A250AFF300803B462A4601A958461E ++:10234000CDF80090FFF749FE064604EB850090F8B3 ++:1023500028B0B8F1000F04D0002140F2A950AFF32B ++:10236000008000F087FB0090B8F1000F04D000213E ++:1023700040F2AF50AFF3008094F82300002899D1C9 ++:10238000B8F1000F04D0002140F2B750AFF3008045 ++:1023900003490BE06C08002000000000FFFF3F0035 ++:1023A0006C060020ACEE01008E00002001EB09104D ++:1023B0000DF1040C00F104009CE80E0080E80E0012 ++:1023C0004EB35FEA080604D0002140F2C450AFF3D8 ++:1023D00000803BEA070012D094F82E0020280ED18E ++:1023E00026B1002140F2C950AFF300802846FFF724 ++:1023F000BCFB20B99AF80000D8B3012849D0B8F145 ++:10240000000F04D0002140F2E650AFF300802846D0 ++:1024100000F029FB01265FEA080504D0002140F204 ++:10242000EF50AFF30080009800F02FFB25B10021A2 ++:1024300040F2F350AFF300808EB194F82D0004EB1E ++:10244000800090F82600202809D025B1002140F214 ++:10245000FA50AFF30080F9484078F9F753FA25B104 ++:10246000002140F2FF50AFF3008004B03046BDE8D9 ++:10247000F09FFFE7B8F1000F04D0002140F2D150E7 ++:10248000AFF3008094F82D2049460420FFF752F95D ++:10249000C0E7002E3FF40EAF002140F2DC50AFF356 ++:1024A000008007E72DE9F84FE54D814695F82D00AE ++:1024B0004FF00008E34C4FF0010B474624B10021D8 ++:1024C00040F20D60AFF30080584600F0DEFA85F868 ++:1024D000237024B1002140F21260AFF3008095F820 ++:1024E0002D00FFF755FD064695F8230028B1002C76 ++:1024F000E4D000214FF4C3604BE024B1002140F24E ++:102500001C60AFF30080CE48803800EB861111F8D4 ++:102510001900032856D1334605EB830A4A469AF838 ++:102520002500904201D1012000E0002000900AF136 ++:1025300025000021FFF763FC01460098014203D00B ++:1025400001228AF82820AF77E1B324B1002140F2BC ++:102550002160AFF30080324649460120FFF7EAF8D8 ++:102560009AF828A024B1002140F22C60AFF300803B ++:1025700000F080FA834624B1002140F23160AFF3CD ++:10258000008095F8230038B1002C97D0002140F24C ++:102590003560AFF3008091E7BAF1000F07D095F8EE ++:1025A0002E00202803D13046FFF7DFFAE0B124B136 ++:1025B000002140F24960AFF30080304600F053FA4A ++:1025C0004FF0010824B1002140F25260AFF30080C7 ++:1025D000584600F05AFA24B1002140F25660AFF399 ++:1025E00000804046BDE8F88F002CF1D0002140F279 ++:1025F0004460AFF30080E6E70020F8F789BC0120D3 ++:10260000F8F786BC8D48007870472DE9F0418C4C76 ++:1026100094F82E0020281FD194F82D6004EB860733 ++:1026200097F82550202D00D1FFDF8549803901EB37 ++:10263000861000EB4500407807F8250F0120F87060 ++:1026400084F82300294684F82E5032460220223492 ++:10265000FFF770F8002020700FE42DE9F0417A4E6A ++:10266000774C012538B1012821D0022879D00328E0 ++:102670007DD0FFDFF0E700F029FAFFF7C6FF207EEC ++:1026800000B1FFDF84F821500020F8F768FCA16852 ++:10269000481C04D0012300221846F8F7B3FC14F8B4 ++:1026A0002E0F217806EB01110A68012154E0FFF793 ++:1026B000ACFF0120F8F753FC94F8210050B1A0685A ++:1026C000401C07D014F82E0F217806EB01110A6880 ++:1026D000062141E0207EDFF86481002708F102082E ++:1026E000012803D002281ED0FFDFB5E7A777F8F74F ++:1026F00026FD98F80000032801D165772577607DD5 ++:10270000524951F8200094F8201051B948B161683D ++:102710000123091A00221846F8F774FC02202076DB ++:102720009AE7277698E784F8205000F0CFF9A07F49 ++:1027300050B198F8010061680123091A0022184677 ++:10274000F8F760FC257600E0277614F82E0F217844 ++:1027500006EB01110A680021BDE8F041104700E0D6 ++:1027600005E036480078BDE8F041F9F7CBB8FFF74F ++:102770004CFF14F82E0F217806EB01110A68052191 ++:10278000EAE710B52E4C94F82E00202800D1FFDF88 ++:1027900014F82E0F21782C4A02EB01110A68BDE8CB ++:1027A0001040042110477CB5254C054694F82E00B6 ++:1027B000202800D1FFDFA068401C00D0FFDF94F884 ++:1027C0002E00214901AA01EB0010694690F90C0086 ++:1027D0002844F8F7E3FC9DF904000F2801DD0120EF ++:1027E00000E00020009908446168084420F07F411F ++:1027F000A16094F82100002807D002B00123BDE8B1 ++:10280000704000221846F8F7FDBB7CBD30B5104A79 ++:102810000B1A541CB3EB940F1ED3451AB5EB940F4F ++:102820001AD3934203D9101A43185B1C14E0954243 ++:1028300010D9511A0844401C43420DE08C0000207E ++:10284000EC080020000000006C060020ACEE010047 ++:10285000FF7F841EFFDF0023184630BD01230022C6 ++:1028600001460220F8F7CEBB0220F8F778BBF8F754 ++:1028700015BC2DE9FC47B14C054694F82E002028E4 ++:1028800000D1FFDF642D58D3AD4A0021521B71EBFC ++:10289000010052D394F82E20A0462046DFF8A492DF ++:1028A00090F82D7009EB0214D8F8000001AA284412 ++:1028B0006946F8F773FC9DF90400002802DD0098D2 ++:1028C000401C0090A068009962684618B21A22F075 ++:1028D0007F42B2F5800F30D208EB8702444692F86F ++:1028E0002520202A0AD009EB02125268101A000291 ++:1028F000C21700EB1260001288421EDBA068401C69 ++:1029000010D0F8F7CBFBA168081A0002C11700EB42 ++:1029100011600012022810DD0120F8F720FB4FF0B3 ++:10292000FF30A06020682844206026F07F402061AE ++:10293000012084F82300BDE8FC870020FBE72DE997 ++:10294000F0477E4C074694F82D00A4F1800606EB74 ++:10295000801010F8170000B9FFDF94F82D50A04642 ++:10296000794C24B1002140F66500AFF3008040F6B9 ++:10297000710940F67A0A06EB851600BF16F81700B3 ++:10298000012818D0042810D005280ED006280CD015 ++:102990001CB100214846AFF3008020BF002CEDD0D1 ++:1029A00000215046AFF30080E8E72A46394601206F ++:1029B000FEF7C0FEF2E74FF0010A4FF0000945466E ++:1029C00024B1002140F68100AFF30080504600F0B2 ++:1029D0005CF885F8239024B1002140F68600AFF31F ++:1029E000008095F82D00FFF7D3FA064695F82300EE ++:1029F00028B1002CE4D0002140F68C001FE024B167 ++:102A000000214FF40960AFF3008005EB860000F170 ++:102A1000270133463A462630FFF7F1F924B1002169 ++:102A200040F69400AFF3008000F024F8824695F859 ++:102A3000230038B1002CC3D0002140F69A00AFF338 ++:102A40000080BDE785F82D60012085F82300504601 ++:102A500000F01BF8002C04D0002140F6A700AFF3D3 ++:102A60000080BDE8F087354981F82D00012081F80C ++:102A70002300704710B5354808B1AFF30080EFF37D ++:102A8000108000F0010072B610BD10B5002804D10E ++:102A90002F4808B1AFF3008062B610BD2D48006822 ++:102AA000C005C00D10D0103840B2002806DA00F082 ++:102AB0000F0000F1E02090F8140D03E000F1E02099 ++:102AC00090F80004400970470820704710B51B4C6F ++:102AD00094F82400002804D1F8F7CEFB012084F8F4 ++:102AE000240010BD10B5154C94F82400002804D023 ++:102AF000F8F7EBFB002084F8240010BD10B51C682B ++:102B00005B68241A181A24F07F4420F07F40A14209 ++:102B100006D8B4F5800F03D2904201D8012010BD31 ++:102B2000002010BDD0E90032D21A21F07F431144B9 ++:102B300021F07F41C0E9003170470000EC0800201F ++:102B4000FF1FA1076C06002000000000000000002D ++:102B50000000000004ED00E02DE9F041044680078C ++:102B60004FF000054FF0010604D55C480560066093 ++:102B700024F00204E0044FF0FF3705D558484660C2 ++:102B8000C0F8087324F48054600003D555480560EC ++:102B900024F08044E0050FD55348C0F80052C0F837 ++:102BA000087352490D60091D0D60504A04210C3212 ++:102BB0001160066124F48074A00409D54C48466075 ++:102BC000C0F80052C0F808734A48056024F4005465 ++:102BD000C4F38030C4F3C031884200D0FFDF14F466 ++:102BE000404F14D044484660C0F80873434886609C ++:102BF000C0F80052C0F8087341490D600A1D166004 ++:102C00008660C0F808730D60166024F44044200507 ++:102C10000AD53C4846608660C0F80873C0F848731F ++:102C20003948056024F400640BF036F93748044253 ++:102C300000D0FFDFBDE8F08170B5202500221346EB ++:102C400020FA02F1C90719D051B201F01F06012480 ++:102C5000B4404E09B60006F1E026C6F88041C6F839 ++:102C60008042002906DA01F00F0101F1E02181F82C ++:102C7000143D03E001F1E02181F80034521CAA4226 ++:102C8000DED370BD70B5224C0D462060FFF764FFA7 ++:102C90002068FFF7D1FF2846F8F7E3FB0AF01EFD96 ++:102CA00000F0D5F80BF0F8F80BF043F8F8F7FCFD5E ++:102CB000BDE870400AF0C0BD10B5154C2068FFF7A4 ++:102CC0004BFF2068FFF7B8FF0BF0E6F8F8F75DFC64 ++:102CD0000020206010BD0A2070470000FC1F00404B ++:102CE00000C0004004E50140008000400485004031 ++:102CF00000D0004004D5004000E0004000F000405B ++:102D000000F5004000B0004008B50040FEFF0FFD98 ++:102D10009000002070B522490A680AB300221546C7 ++:102D200001244B685B1C4B60092B00D34D600E796E ++:102D300004FA06F30E681E420FD0EFF3108212F071 ++:102D4000010272B600D001220C689C430C6002B9EB ++:102D500062B649680160002070BD521C092AE0D3A8 ++:102D6000052070BD4FF0E0214FF48000C1F8000253 ++:102D70007047EFF3108111F0010F72B64FF00102AE ++:102D800002FA00F20648036842EA0302026000D138 ++:102D900062B6E7E702480021016041607047000029 ++:102DA00094000020012081070860704701208107FE ++:102DB0004860704712480068C00700D00120704783 ++:102DC0000F48001F0068C00700D0012070470C4862 ++:102DD00008300068C00700D0012070470848103054 ++:102DE0000068704706490C310A68D20306D50968A5 ++:102DF00001F00301814201D101207047002070479A ++:102E00000C0400402DE9F04115460E46044600270B ++:102E100000F0E7F8A84215D3002341200FE000BFDF ++:102E200094F84220A25CF25494F84210491CB1FB81 ++:102E3000F0F200FB12115B1C84F84210DBB2AB42D3 ++:102E4000EED3012700F0D9F83846BDE8F08170498B ++:102E500010B5802081F800046E49002081F84200FE ++:102E600081F84100433181F8420081F8410043314B ++:102E700081F8420081F8410067480AF0A3FE6648E5 ++:102E8000401C0AF09FFEF8F7DBFBBDE8104000F0A5 ++:102E9000B4B8402070475F4800F0A3B80A46014626 ++:102EA0005C48AFE7402070475A48433000F099B87B ++:102EB0000A46014657484330A4E7402101700020EC ++:102EC000704710B504465348863000F08AF82070E9 ++:102ED000002010BD0A4601464E4810B58630FFF767 ++:102EE00091FF08B1002010BD42F2070010BD70B57F ++:102EF0000C460546412900D9FFDF484800681038D4 ++:102F000040B200F050F8C6B20D2000F04CF8C0B24C ++:102F1000864203D2FFDF01E0F8F7E2FB22462946B2 ++:102F20003C48FFF76FFF0028F6D070BD2DE9F04157 ++:102F3000394F002506463F1D57F82540204600F032 ++:102F400041F810B36D1CEDB2032DF5D33148433079 ++:102F500000F038F8002825D02E4800F033F800287B ++:102F600020D02C48863000F02DF800281AD0F8F731 ++:102F70008DFB29480AF02EFEB0F5005F00D0FFDF80 ++:102F8000BDE8F04124480AF03BBE94F841004121DD ++:102F9000265414F8410F401CB0FBF1F201FB120063 ++:102FA0002070D3E751E7002806DA00F00F0000F1A7 ++:102FB000E02090F8140D03E000F1E02090F8000408 ++:102FC0004009704710F8411F4122491CB1FBF2F340 ++:102FD00002FB13114078814201D10120704700208B ++:102FE000704710F8411F4078814201D3081A02E06F ++:102FF000C0F141000844C0B2704710B506480AF05D ++:10300000E9FD002803D1BDE81040F8F72ABB10BD48 ++:103010000DE000E01C0900209C00002004ED00E011 ++:1030200070B5154D2878401CC4B26878844202D02F ++:10303000F8F7E7FB2C7070BD2DE9F0410E4C4FF016 ++:10304000E02600BFF8F7D2FB20BF40BF20BF677863 ++:1030500020786070D6F80052EEF760F9854305D10C ++:10306000D6F8040210B92078B842EBD0F8F7B9FBD3 ++:103070000020BDE8F0810000AC0000202DE9F04107 ++:10308000012528034FF0E0210026C1F880011E4CE5 ++:10309000C4F800610C2000F02CF81C48016802689C ++:1030A000C94341F3001142F010020260C4F8045316 ++:1030B0002560491C00E020BFD4F80021002AFAD086 ++:1030C00019B9016821F010010160114807686560B5 ++:1030D000C4F80853C4F800610C2000F00AF8384620 ++:1030E000BDE8F08110B50446FFF7C8FF206000205E ++:1030F00010BD00F01F02012191404009800000F145 ++:10310000E020C0F88012704700C0004010ED00E0E1 ++:1031100008C500402DE9F047FF4C0646FF21A06896 ++:1031200000EB061211702178FF2910D04FF008092A ++:1031300009EB011109EB06174158C05900F0F4F9E9 ++:10314000002807DDA168207801EB061108702670C1 ++:10315000BDE8F08794F8008045460DE0A06809EBD3 ++:1031600005114158C05900F0DFF9002806DCA068BD ++:10317000A84600EB08100578FF2DEFD1A06800EB02 ++:10318000061100EB08100D700670E1E7F0B5E24B98 ++:103190000446002001259A680C269B780CE000BFAD ++:1031A00005EB0017D75DA74204D106EB0017D759EE ++:1031B0008F4204D0401CC0B28342F1D8FF20F0BD42 ++:1031C00070B5FFF754FBD44C08252278A16805EBB5 ++:1031D0000212895800F0A8F9012808DD2178A068BA ++:1031E00005EB01114058BDE87040FFF737BBFFF712 ++:1031F00009FABDE87040F8F785BB2DE9F041C64CEF ++:103200002578FFF734FBFF2D6ED04FF00808A26839 ++:1032100008EB0516915900F087F90228A06801DD36 ++:1032200080595DE000EB051109782170022101EB66 ++:103230000511425C5AB1521E4254815901F5800178 ++:1032400021F07F4181512846FFF764FF34E00423D9 ++:10325000012203EB051302EB051250F803C0875C53 ++:10326000BCF1000F10D0BCF5007F10D9CCF30802E0 ++:1032700050F806C00CEB423C2CF07F4C40F806C0E6 ++:10328000C3589A1A520A09E0FF2181540AE0825970 ++:1032900002EB4C3222F07F428251002242542846F7 ++:1032A000FFF738FF0C21A06801EB05114158E068D9 ++:1032B00050F82720384690472078FF2814D0FFF791 ++:1032C000D6FA2278A16808EB02124546895800F028 ++:1032D0002BF9012893DD2178A06805EB01114058F6 ++:1032E000BDE8F041FFF7BABABDE8F081F0B51D4680 ++:1032F00014460E460746FF2B00D3FFDFA00700D081 ++:10330000FFDF8548FF210022C0E90247C570067132 ++:103310000170427082701046012204E002EB00133B ++:10332000401CE154C0B2A842F8D3F0BD70B57A4C4D ++:10333000064665782079854200D3FFDFE06840F8D3 ++:1033400025606078401C6070284670BD2DE9FF5FE5 ++:103350001D468B460746FF24FFF789FADFF8B89130 ++:10336000064699F80100B84200D8FFDF00214FF06F ++:1033700001084FF00C0A99F80220D9F808000EE075 ++:1033800008EB0113C35CFF2B0ED0BB4205D10AEB47 ++:10339000011350F803C0DC450CD0491CC9B28A4265 ++:1033A000EED8FF2C02D00DE00C46F6E799F803109A ++:1033B0008A4203D1FF2004B0BDE8F09F1446521C9E ++:1033C00089F8022008EB04110AEB0412475440F874 ++:1033D00002B00421029B0022012B01EB04110CD04E ++:1033E00040F801204FF4007808234FF0020C4545C7 ++:1033F00013D9E905C90D02D002E04550F2E7414674 ++:1034000006EB413203EB041322F07F42C250691AEB ++:103410000CEB0412490A81540BE005B9012506EBB7 ++:10342000453103EB041321F07F41C1500CEB041133 ++:10343000425499F800502046FFF76CFE99F80000BE ++:10344000A84201D0FFF7BCFE3846B4E770B50C4681 ++:103450000546FFF70CFA064621462846FFF796FE7A ++:103460000446FF281AD02C4D082101EB0411A8684E ++:103470004158304600F058F800F58050C11700EB75 ++:10348000D14040130221AA6801EB0411515C09B13B ++:1034900000EB4120002800DC012070BD002070BD41 ++:1034A0002DE9F04788468146FFF770FE0746FF2862 ++:1034B0001BD0194D2E78A8683146344605E0BC4231 ++:1034C00006D0264600EB06121478FF2CF7D10CE04C ++:1034D000FF2C0AD0A6420CD100EB01100078287016 ++:1034E000FF2804D0FFF76CFE03E0002030E6FFF772 ++:1034F000BBF941464846FFF7A9FF0123A9680246E8 ++:1035000003EB0413FF20C854A878401EB84200D132 ++:10351000A87001EB041001E0E809002001EB06119E ++:1035200000780870104613E6081A0002C11700EB75 ++:10353000116000127047000070B50446A0F500004D ++:103540002D4EB0F1786F02D23444A4F500042B481C ++:10355000844201D2012500E0002500F043F848B183 ++:1035600025B9B44204D32648006808E0012070BDA4 ++:10357000002070BD002DF9D1B442F9D32148844216 ++:10358000F6D2F3E710B50446A0F50000B0F1786F6D ++:1035900003D219480444A4F5000400F023F84FF0C6 ++:1035A000804130B11648006804E08C4204D201200A ++:1035B00003E014488442F8D2002080F0010010BDDE ++:1035C00010B520B1FFF7DEFF08B1012010BD0020CB ++:1035D00010BD10B520B1FFF7AFFF08B1012010BD3D ++:1035E000002010BD084809490068884201D1012027 ++:1035F00070470020704700000000002000300200EB ++:103600002000002008000020B0000020BEBAFECA42 ++:103610000548064A0168914201D100210160044930 ++:103620000120086070470000B0000020BEBAFECA4A ++:1036300040E5014043480021017041701021817034 ++:10364000704770B5054616460C460220F4F743FD58 ++:103650003C490120F61E08703B4806603A4808388D ++:103660000560001F046070BD10B50220F4F733FD43 ++:1036700034490120087035480021C0F80011C0F815 ++:103680000411C0F8081132494FF40000086010BD61 ++:1036900010B52C4C207888B12D494FF40000091D3D ++:1036A000086000F041F8002120B101206070294835 ++:1036B000006801E061701020A0702170BDE810402A ++:1036C0000020F4F708BD1F4810B5017859B11F4814 ++:1036D000D0F8000128B100F027F8002800D0012020 ++:1036E00010BD022010BD407810BD10B5C824641E66 ++:1036F000E4B2FFF7E8FF022803D0012800D0002041 ++:1037000010BD002CF3D1FFDFF9E70E4810B50178AA ++:1037100041B100F009F818B10E480068C0B210BD00 ++:10372000102010BD807810BD0848D0F8001129B1D4 ++:10373000D0F8041111B1D0F8080108B10020704789 ++:1037400001207047B400002010F5004000F0004058 ++:1037500004F5014000F4004045480021017041702B ++:10376000704770B5064614460D460120F4F7B3FCC9 ++:1037700040480660001D0460001D056070BD70B506 ++:103780003B4A012540EA014115703A4A41F08071F7 ++:10379000121F1160384C0026C4F80461374A4FF0FC ++:1037A0004071116058B1012800D0FFDFC4F80062F9 ++:1037B000256032494FF00070091F086070BDC4F8E1 ++:1037C0000052256070BD2A48017871B12B4A4FF034 ++:1037D000407111602849D1F8042100211AB1284A0A ++:1037E0001268427000E0417001700020F4F773BC71 ++:1037F0001F48017841B12048D0F80401002802D0C8 ++:103800001F480068C0B270474078704770B5002804 ++:1038100028D01748007800B9FFDF1748D0F8041106 ++:1038200000291FD10223C0F8043316490A680C6826 ++:10383000D24342F3001244F010040C609C034FF09A ++:10384000E025521C03E000BFC5F8804220BFD0F83D ++:103850000461002EF8D01AB90A6822F010020A603A ++:10386000C0F8083370BD044901208860704700002B ++:10387000B700002008F5004000F0004008F50140C6 ++:1038800000F4004010ED00E0F84808B50021C0F851 ++:103890000011C0F80C11C0F81011C0F80411C0F8E4 ++:1038A0001411C0F81811C0F82811F14800680090F0 ++:1038B00008BD70B5EF4D00246C702C7000F02EFE2A ++:1038C00085F82140AC626C63AC77092105F11400E6 ++:1038D0000BF09CF8E849601E0860091D0860091D8E ++:1038E0000C60091D0860091D0C60091D0860091D98 ++:1038F0000860091D0860091D0860091D0860091D90 ++:103900000860091D0860091D0860091D086070BD78 ++:1039100070B5D8490268D94C4A6142688A61007A18 ++:1039200008770C3C0A7DD54B251F012042B10E7E45 ++:1039300000FA06F21A608E7D0EB1226000E02A6065 ++:103940004A7D002A05D04A7E90401860C97D09B1A1 ++:10395000206070BD286070BDCA49C9480860091D53 ++:10396000C9480860704710B50446012902D00229F1 ++:1039700002D0FFDF002101E04FF08071C348014316 ++:10398000C0480160C049E0B225390843BD49091D5E ++:103990000860B648D0F80001002800D0FFDF10BD55 ++:1039A00070B5012000F0A4FDB94900250D6001208B ++:1039B0000860B8490A68B84B22F077021A430A60D7 ++:1039C000091D0A6822F47F4242F4B0520A60A94CF1 ++:1039D000AC4A02214C3261771160B14AAF491160A3 ++:1039E000A3491031121F1160A64A40F25B612432D4 ++:1039F0001160121F40F203111160111F0860A149EC ++:103A00000320091F08609F4996203031086094F90F ++:103A10001E000AF087FB607F10B14FF4C02000E069 ++:103A2000A0489F49943908609C489D49001F08316F ++:103A300008608F480838091F0860012000F063FD06 ++:103A40008A491020C1F8040384F82D5070BD9148B4 ++:103A50003830016821F0010141F080710160704748 ++:103A6000844A0368C2F802308088D080117270479F ++:103A7000804890F8210070477E4A5170107070475E ++:103A8000F0B50546840079488B882044C0F820367C ++:103A90000B78D1F8011043EA0121C0F8001605F1B6 ++:103AA000080001277B4C07FA00F6FC3C52B1012AC2 ++:103AB00000D0FFDF2068304320602068AF403843EB ++:103AC0002060F0BD2068B043F6E710B504460AF068 ++:103AD00029FB6848847710BD664890F82E0070472F ++:103AE000644890F830007047664AC178103211601F ++:103AF000006864490002083108607047252807D033 ++:103B0000262807D0272807D00A2807D8042206E04D ++:103B1000022107E01A2105E0502103E0062202EB12 ++:103B20004001C9B2574A0C3A116056494031086009 ++:103B300070475048817A012916D0022913D1417D5E ++:103B4000002910D0827E0121C37E01FA02F2994041 ++:103B50000A43534994390A60007F534A002102EB1B ++:103B60008000C0F810157047017DE9E7F0B5414BC2 ++:103B70009C7A012C12D0022C67D15D7D002D64D07F ++:103B80004A4F4FF47A76012C0AD05D7EDC7D04B179 ++:103B9000012401291FD0022A1FD020E01D7DEDE75E ++:103BA0001D7E9C7D04B101244FF4C86C012902D014 ++:103BB000022A07D008E0022A00D1B44649F6FC6187 ++:103BC000614405E03A4FB44607EB0C0101F5FA7188 ++:103BD000B1FBF6F107E0292105E0354F643F07F21C ++:103BE000E147B7FBF6F1491F0844324908602B4909 ++:103BF00000204439C1F84C01280284F0010140EA58 ++:103C0000015040F00312197F274800EB8104C4F8EB ++:103C100010259C7E284A00EB810102EBC400C0F80D ++:103C20001415264DC0F81055DB7E02EBC300C0F81A ++:103C300014150F490839C0F81015012000FA04F1D5 ++:103C400098400143164898380160F0BD2DE9F047CF ++:103C5000064D0746032090468946C5F80002054EEA ++:103C6000707F10B14FF4C0202BE029E0001000401D ++:103C700018110040F8090020000E004018050050FF ++:103C8000060102001415004025000302080110007F ++:103C9000FC1F00403C17004088000080448000402A ++:103CA0009CF501400000040400600040A2240200D2 ++:103CB000683602004C85004000F001404C81004015 ++:103CC000F948FA49086048460AF076FA40460AF090 ++:103CD00053FA012417B1012F06D008E0404600F046 ++:103CE00024FCB4722C6002E00220B0726C60F048D8 ++:103CF000C464F048006842464946BDE8F04735E7ED ++:103D00002DE9F0418846EC49074603201646C1F8E4 ++:103D10000002EA4C607F10B14FF4C02000E0E2489E ++:103D2000E24D286040460AF047FA30460AF024FA8D ++:103D300017B1012F0CD014E0304600F0F6FB012043 ++:103D4000A072606B40F4801060634FF4801007E055 ++:103D50000220A072606B40F4001060634FF400100A ++:103D6000286032464146BDE8F0410020FEE608B535 ++:103D7000FF208DF80000D0480021C0F8101101216B ++:103D8000016104E09DF80010491E8DF800109DF8B7 ++:103D9000001019B1D0F810110029F3D09DF80000DF ++:103DA000002800D1FFDF08BD2DE9FF5FC24D0746A7 ++:103DB000002603209B46C5F80002C04C607F10B16E ++:103DC0004FF4C02100E0B849DFF8E082C8F80010E5 ++:103DD00002980AF0F1F958460AF0CEF9DFF8CC92D1 ++:103DE0004FF0010A09F1A80917B1012F21D02BE0EA ++:103DF000584600F09AFBC9F8005094F82D000128AD ++:103E000005D002280BD0FFDF84F80AA01CE094F84C ++:103E10002C20DDE901015B460AF022FA06E094F865 ++:103E20002C30DDE901015A460AF0D1F9A16A4618A1 ++:103E3000EAE7A149091DC9F8001094F82D000128EE ++:103E400038D0FFDF0220A0729A48001F0660974911 ++:103E50009B48A4310860606B40F400206063D5F893 ++:103E600000724FF01009C5F808930020C5F8000251 ++:103E70008E484FF48024001D046005F50075FFF79F ++:103E800076FFFFF701FD2F60C8F80040C5F80491E8 ++:103E90006100C8F800108649C1F84CA08548006848 ++:103EA000B04200D3FFDF029904B05A463046BDE865 ++:103EB000F05F5BE694F82C20DDE901015B460AF037 ++:103EC000ADF9A16A4618BDE72DE9F0417A4CD4F866 ++:103ED000000220F00307D4F804034FF01008C0F3E9 ++:103EE0000016C4F808830025C4F800527348407FC8 ++:103EF00010B14FF4C02000E06B486C49091D086008 ++:103F0000FFF717FEFFF733FFC4F81051C4F828512C ++:103F100000F004FBC4F80072002E01D0C4F8048342 ++:103F2000BDE8F0810068674920F07F400860704775 ++:103F300010B5012000F0DCFABDE81040012000F0CF ++:103F4000E2BA4FF0E0210220C1F8000170475E495B ++:103F5000087070475B4938390860704770B5574C36 ++:103F60000546A06AA84200D3FFDF01202073256127 ++:103F7000607F40B1284420614F48D0F8001241F0E2 ++:103F80004001C0F800124A490020C1F844014949E3 ++:103F9000206908390860BDE8704000F0D8BA70B5F3 ++:103FA000464C0546022020730AF0F4F8024694F8C5 ++:103FB0002C1028460AF07CF92061617F41B1084449 ++:103FC00020613D48D0F8001241F04001C0F80012D5 ++:103FD00037490020C1F844012169A06A08443549E5 ++:103FE0000839086070BD31494FF48000091D086030 ++:103FF0003248416B21F48001416300210173704715 ++:104000002B4801214160C1600021C0F844112948BA ++:104010000838016029488162704728494020487764 ++:104020002849243108602448D0F8001241F04001AA ++:10403000C0F8001270472048D0F8001221F040016B ++:10404000C0F800121F4902202431086070471A4846 ++:10405000D0F8001221F01001C0F800120121816196 ++:10406000704715480021C0F81C11D0F8001241F02B ++:104070001001C0F8001270470F4908B5D1F81C2193 ++:10408000012A01D0002008BD0E4A0C32126802F04D ++:104090007F02524202700020C1F81C010B480068E8 ++:1040A0000090012008BD00000000040404F5014058 ++:1040B000008000404C85004000100040F8090020BE ++:1040C000488100403C150040B90000201C11004010 ++:1040D000F8B5F74CF74D207B18B1D5F8440101280D ++:1040E0000AD00026F449D1F81001012806D0002298 ++:1040F000A07A012804D007E00126F3E74022F7E781 ++:10410000D1F80C31012B04D000231343012802D035 ++:1041100005E02023F9E7D1F80421012A05D0002287 ++:104120001A43E64F022802D008E01022F8E73B6865 ++:10413000012B03D1D1F80C31012B04D00023134300 ++:10414000022802D007E00823F9E73A681AB9D1F843 ++:104150000C21012A04D000221A43022802D004E0D4 ++:104160000422F9E70EB1022300E0002313430228E2 ++:1041700009D1D1F80401012805D1D5F8440101285D ++:1041800001D0012600E00026CD481E43026812F04F ++:10419000FF0F03D0D1F81421012A00D0002284F8A7 ++:1041A0002E20006810F0FF0F03D0D1F8180101286D ++:1041B00000D0002084F82F00C0481030006884F838 ++:1041C0003000BF48E0380068402803D1FFF77BFA91 ++:1041D000012800D0002084F83100FFF755FB0020B3 ++:1041E000C5F84401B748006800903046F8BD30B5C6 ++:1041F0000C00054600D1FFDFE00702D0012C00D003 ++:10420000FFDF55B10221AA4801294172C472AA48B0 ++:1042100005D0022908D0FFDF30BD0121F3E7D0F837 ++:10422000001241F0040103E0D0F8001241F008014F ++:10423000C0F8001230BD70B59D4C0022E17A8B07AA ++:1042400001D5430711D4CB0605D594F82F3013B10F ++:1042500094F831304BB10B0702D594F8203023B9D4 ++:10426000490703D594F8211001B90122637A9249D4 ++:10427000012533B100F00200104312D0BDE87040B8 ++:1042800022E6607F10B14FF4C02000E08E488F4AD4 ++:104290001060D1F8000220F00300C1F80002E572BE ++:1042A00070BD0026012B09D0022B17D0FFDFA06ABA ++:1042B00001223044BDE87040002157E4D1F80002EB ++:1042C00020F00400C1F8000200F028F90123A572D3 ++:1042D0001A460021962009F07AFF0FE0D1F800027B ++:1042E00020F00800C1F8000200F018F90220A072C6 ++:1042F00001231A460021962009F090FF0646D6E7D2 ++:104300002DE9F047DFF8ACA1DAF84C0108B1FFF76E ++:1043100010FC674C6D49606B086000266663FFF710 ++:10432000D7FEDFF8AC810546D8F800006062617FF7 ++:1043300009B1401A60626648001F0068A06209F077 ++:1043400029FF84F82C00A07ADFF8889184F82D00EA ++:10435000022808D1607830B1D9F8001009780140FE ++:10436000207888430DD084F820605B4FE8070CD09C ++:1043700039785A4A4908606A52F821108847012161 ++:104380000AE0012084F82000EFE7A80601D5022109 ++:1043900002E0A80707D50021504A3B783832A06ACE ++:1043A00052F8232090473878C00713D1D9F800106D ++:1043B0000622A01C09310AF05CFA40B9217AD9F82A ++:1043C00000000078B1EBD01F01D1012000E00020F7 ++:1043D00084F821002846FFF72EFFA80705D53F489F ++:1043E0003978083050F82100804715F00C0F07D0BD ++:1043F0003A483978183050F82110C5F3C000884782 ++:10440000A80605D535483978283050F8210080476E ++:104410003878022805D105F06E00402805D106F055 ++:1044200021F93878042800D3FFDFA07A022819D1B7 ++:10443000207B002816D0CAF8446102280ED001283B ++:1044400000D0FFDFA16A2069884200D8FFDF216920 ++:10445000C8F80010BDE8F04700F079B82169A06AFB ++:104460000144F5E7BDE8F08700B5012802D0022835 ++:1044700002D0FFDF282000BD182000BD10B541F696 ++:10448000A474012802D0022802D0FFDF204610BD0C ++:1044900041F2883010BD10B541F2D474012802D029 ++:1044A000022802D0FFDF204610BD41F2040010BDFB ++:1044B000F809002000800040001000400014004077 ++:1044C00040160040448100400000040408F501400B ++:1044D0004485004004150040B9000020C4EE0100EE ++:1044E00000B5012802D0022800D0FFDF002000BD67 ++:1044F00000F01F02012191404009800000F1E020FE ++:10450000C0F88011704700F01F020121914040095E ++:10451000800000F1E020C0F88012704711480021AF ++:10452000417281720121C17270470F4A11685306AE ++:104530000228D3F8200307D0C0F3062021F4FE415F ++:1045400041EA002010607047C0F30660F6E70548B6 ++:10455000416B41F48001416304494FF480000860DD ++:1045600070470000F80900208815004004F501405C ++:1045700010B5434822210AF027FA41480024017867 ++:1045800021F010010170012105F004FB3C494FF6B8 ++:10459000FF70263981F8224088843A490880488093 ++:1045A00010BDE5E7704700F05FB83549016070471E ++:1045B000344908807047324926398A8CA2F57F43F6 ++:1045C000FF3B02D00021016008E091F822202C4935 ++:1045D0002639012A02D0016001207047002070476F ++:1045E0002748263810F8221F012908D00121017020 ++:1045F00024482349263900888884012070470020F8 ++:1046000070472049488070471D491E4B26398A8CC7 ++:104610005B889A4205D191F8222012B101600120F5 ++:104620007047002070471648164A2638818C5288F9 ++:10463000914209D14FF6FF71818410F8221F19B100 ++:104640000021017001207047002070470C480D4A7E ++:104650002638818C5288914204D190F8220008B10A ++:104660000020704701207047054926398A8C824214 ++:1046700005D1002081F822004FF6FF708884704732 ++:10468000560A0020BA0000207047524A012338B170 ++:10469000012804D113700868906088889081704761 ++:1046A00053700868C2F802008888D0807047494A71 ++:1046B00010B1012807D00EE0507860B1D2F80200A6 ++:1046C0000860D08804E0107828B19068086090896C ++:1046D000888001207047002070473E4910B10128B2 ++:1046E00002D005E0487800E0087808B10120704762 ++:1046F0000020704730B58DB00C4605460D2104A84A ++:104700000AF084F9E0788DF81F0020798DF81E00FA ++:1047100060798DF81D001022294668460AF0D5F808 ++:10472000684609F075F820789DF82F1088420CD162 ++:1047300060789DF82E10884207D1A0789DF82D1042 ++:10474000884202D101200DB030BD0020FBE730B51A ++:104750000C4605468DB04FF0030104F1030012B181 ++:10476000FEF7A6FB01E0FEF7C2FB60790D2120F009 ++:10477000C00040F04000607104A80AF047F9E078FA ++:104780008DF81F0020798DF81E0060798DF81D00CE ++:104790001022294668460AF098F8684609F038F869 ++:1047A0009DF82F0020709DF82E0060709DF82D0060 ++:1047B000A070C8E710B5002904464FF0060102D0EA ++:1047C000FEF776FB01E0FEF792FB607920F0C00077 ++:1047D000607110BDBE00002070B5FC4E044696F816 ++:1047E0009210002506F18000012909D096F88C105E ++:1047F000012912D096F86A00012818D0002070BD57 ++:1048000065701921217050F8131FC4F80210406818 ++:10481000C4F8060086F8925024E0657006212170E5 ++:10482000D0F80E00C4F8020086F88C501AE06570CB ++:104830001320E649207020226C31A01C0AF045F8B4 ++:104840000120A07106F86A5FB188B184E049496827 ++:104850004A7B86F8262086F822000888FBF7CAFAE9 ++:10486000FAF771FF012070BDD84890F86A1011B1B5 ++:10487000B0F86E0070474FF6FF70704770B5D448BF ++:10488000017811B10C26304670BDD04C002635465B ++:1048900084F8626084F8636084F8646084F865601A ++:1048A00084F85E6084F8606084F8566084F836604E ++:1048B00084F867607F21817094F8660028B1FFF763 ++:1048C000BAFBFEF7E5FE84F8665084F86A5084F877 ++:1048D0008C5084F89250BD489C3005F01FF8BB48BE ++:1048E000C43005F01BF8CEE7B94910B500200870B8 ++:1048F000FFF7C4FF002800D0FFDF10BDB34890F8D9 ++:1049000062007047B14900B591F8580091F857100E ++:10491000C0F38002C0F340031A4400F001001044C9 ++:10492000052910D2DFE801F00A050A030700A949AA ++:1049300006E0A94800BDA749083101E0A5490839AA ++:1049400031F8100000BDFFDF002000BD9F4840F29D ++:104950007121B0F85A00484370479C4890F86800AD ++:10496000002800D00120704710B5984C207A00F044 ++:10497000EDFC40B1207C04F1110104F0AFF90828EE ++:1049800001D0012010BD207A30B1022804D00120CE ++:10499000BDE81040FFF7A1BE0020F9E78B4908727F ++:1049A00070478A4981F8600070477CB505468748A2 ++:1049B00090F85D0004F0A7F9040013D0102104F072 ++:1049C000E5FC00280ED12A4669462046FFF7BFFEC7 ++:1049D0007E4869469C3004F0D3FF7C4801219C301E ++:1049E00004F0E7FF7CBD70B578490A310D4601F14E ++:1049F000920004F0B9FF754C04F19C00617A04F058 ++:104A0000CBFF294604F1C40004F0AEFF617A04F143 ++:104A1000C400BDE8704004F0BFBF2DE9F0416B4C0D ++:104A2000074694F85D0004F064F9064694F85F00C8 ++:104A300004F10A0528B126B11021304604F0A6FC85 ++:104A4000A0B194F86000002824D094F85E000028FB ++:104A500020D0607A294600F08AFCA8B104F04BFA15 ++:104A60003A462946BDE8F041FFF771BE0120607269 ++:104A70003A4629463046FFF76AFE94F85D1028460C ++:104A8000BDE8F04104F002BA39462846BDE8F041DD ++:104A9000FFF790BEBDE8F08170B54C4C207AB0B104 ++:104AA000022814D00120494960720A310D46FFF7EF ++:104AB000FEFD207A00F04AFC84F85F00082084F8AC ++:104AC0005D00607A294600F049FC38B901E0002019 ++:104AD000E9E7607A294600F04AFC00B1012084F839 ++:104AE0005E0094F85F0028B994F85700012801D0BF ++:104AF000042806D13549207C113104F0EFF884F800 ++:104B00005D0000202060FDF773F960600020FFF772 ++:104B100084FFFFF768FF94F85700012801D00428AC ++:104B200003D1BDE8704000203FE770BD70B5274C51 ++:104B3000417B84F85810017984F85710012925D059 ++:104B4000B0F80020A4F85A20827B84F8682082798B ++:104B5000F2B1022A1CD00122227450F8072FC4F8A7 ++:104B600011208088A4F8150094F85600012508B19A ++:104B700084F8635094F8360008B184F8645005292D ++:104B800033D2DFE801F0070D2B2D0D000022D9E70D ++:104B90000022E1E70D4800219C3004F0C2FE0FE046 ++:104BA0000A4801219C3004F0BCFE0849113101F192 ++:104BB0008B0004F0E5FE0548217C9C3004F0F9FEF2 ++:104BC000024801219C3000F0DDFB0FE0780A002054 ++:104BD000CC0000201CEF0100D0891300062100E06A ++:104BE0000221FA4804F09DFE00E0FFDFF7480421AF ++:104BF000283004F096FE84F86250002070BD70B535 ++:104C00000546F24C00209C3C04F8640FEF482A460D ++:104C1000853809F05AFE04F82E5C0120207070BD22 ++:104C200010B5EA4C00229C3C84F8632004F8560F2F ++:104C30000246E648653809F048FE0120607310BD61 ++:104C4000E2499C3981F86700704770B500F0ADFB10 ++:104C5000DE4C9C3C002694F8660028B1FFF7EBF987 ++:104C6000FEF716FD84F86660D94D2E7094F8570053 ++:104C7000012804D0BDE87040002001F08EB9022068 ++:104C800001F08BF994F86A0000B1FFDF6878002822 ++:104C900017D0207C84F87100D4F81100C4F8720099 ++:104CA000B4F81500A4F876003C2084F86C0068681D ++:104CB0000088A4F86E00012084F86A0000F06BFB05 ++:104CC0006E7070BD10B50024C20701D0CA0708D0AD ++:104CD00082070BD58A0709D42620FEF70FFF02248E ++:104CE0000CE02520FEF70AFF012407E0400705D568 ++:104CF000480703D42720FEF701FF0424FEF72CFE0B ++:104D0000204610BD2DE9F041B148017859BBAF4CA8 ++:104D10009C3C94F8621031B3002584F861504570D2 ++:104D200028465834FFF713F9FEF73AFEFEF714FE53 ++:104D3000A848FEF7D9FEA748C01EFFF7F3F8207871 ++:104D40000021FFF7BFFF2071FFF7FBF800210122D0 ++:104D50000846FEF7D5FF0F210520FEF78DFEA0794E ++:104D6000583C58B901E00C2094E694F85F0028B94B ++:104D700094F85700012801D0042828D1FDF738F80D ++:104D8000064631466068FDF741FD934990FBF1F717 ++:104D900001FB170041423046FCF733FD606020689C ++:104DA0003844206003F096FF216888420FD8C4E998 ++:104DB00000560120FFF731FEFFF715FE94F857006B ++:104DC000012801D0042802D10120FFF7EEFD7F4821 ++:104DD000617A9238FEF744FE94F8570001280DD00E ++:104DE00004280BD094F8630040B1784994F8562019 ++:104DF0006539764804F0F9FD84F8635094F864004E ++:104E000048B1724994F83620853901F1AD0004F0BB ++:104E100018FE84F8645003F0BDFF6C48503004F075 ++:104E200024F884F86600002034E669494860704739 ++:104E300070B5664C0500A4F19C040AD094F85C108F ++:104E400014F8580FFFF73EFF14F8041F084304F846 ++:104E50005C0994F8610038B194F85700012800D13A ++:104E6000FFDFBDE87040F0E635B1002201234FF4CA ++:104E700096711046FEF798FF5448FFF76BF894F8C8 ++:104E80005700052809D2DFE800F0030303090300F7 ++:104E900001210846FFF7ABF900E0FFDF94F8581056 ++:104EA00094F85C0081434FF0010005D194F857104D ++:104EB000012904D084F861004549087070BD0021C3 ++:104EC00084F85C10F8E7424810B5007848B93F48CC ++:104ED0009C3890F8620020B10020FFF7A9FF002065 ++:104EE00010BD00F062FA0C2010BD39490120487055 ++:104EF000704736499C3981F86500704770B50025C8 ++:104F000000F024FF48B1324E3078012808D0022842 ++:104F100001D0032833D0FFDF70BDBDE8704094E6B8 ++:104F20002A4C9C3C94F85700032828D094F866003B ++:104F300018B1FEF799FBFFF770F824485030FFF7DF ++:104F400009F89620FFF72BF894F8570001280DD0A8 ++:104F500004280BD094F86800012801D0032800D160 ++:104F6000102545F00E010020FFF741F994F8670085 ++:104F7000012801D1FFF775F80220307070BDBDE83F ++:104F80007040012054E710B5104C9C3C94F8670029 ++:104F9000012801D100F014FA94F8660018B1FFF767 ++:104FA0004AF8FEF775FB00F0D1FEB8B1084C207846 ++:104FB000022800D0FFDF0120FFF73AFF2078002809 ++:104FC00003D02078012800D0FFDF10BD140B002093 ++:104FD000CC0000200FEF010040420F00BDE8104060 ++:104FE00033E610B503F07AFE044603F09CFF38B1B7 ++:104FF000204603F088FE18B1102104F0C7F908B16B ++:105000000020E2E70120E0E72DE9F84F0446002602 ++:10501000FEF762FDDFF8C493074699F80000022806 ++:1050200000D0FFDFDFF8B8A39AF86700012801D1AC ++:1050300000F0C6F9EA48EC3004F092FCFF25804607 ++:10504000002C78D0E648EC3004F072FD002872D0D5 ++:10505000FEF70EFD00286ED0E14C9AF86600EC34A5 ++:1050600060B103F07DFE0546FF2807D00146E01C35 ++:1050700003F06AFE284603F07DFE0743DFF860B3C5 ++:10508000B8F1060F0BF1800B55D2DFE808F09797C7 ++:10509000970397559AF8571001294CD0D046042908 ++:1050A00049D067B998F8680008B1022843D1207840 ++:1050B000E11CC0F38010FFF794FF00287ED198F820 ++:1050C0006700474601282ED197F8920058BB01206F ++:1050D00087F89200FF2D0DD0C14A28469432511E08 ++:1050E00003F01BFE00B9FFDF17F8930F40F002003A ++:1050F00038700CE02078C0F3801088F89300DBF85B ++:105100006F10CBF81410BBF87310ABF81810B44D37 ++:1051100099F802009A354C467F2800D1FFDFA0782D ++:1051200028707F20A070AE48C430FEF713FF032123 ++:1051300089F8001043E041E020789AF81010A0466A ++:10514000C0F380105446884207D1A5490622113188 ++:1051500008F1030009F08DFB20B10020FF2D08D0DD ++:1051600088B901E00120F9E794F85D00A8420AD06F ++:105170000FE070B198F8000008F10301C0F380104F ++:10518000FFF72FFF28B994F85700012813D00428FF ++:1051900011D094F8570088B96FB994F8680008B135 ++:1051A00001280BD198F8000008F10301C0F380102A ++:1051B000FFF717FF10B994F86500C8B101269AF8F7 ++:1051C000660018B1FEF737FFFEF762FA16B101204C ++:1051D000FFF72EFE99F800104846002906D0017806 ++:1051E000012903D00078032800D0FFDFBDE8F88F45 ++:1051F0007B49D9F804008031C34651F87B2FC0F8B1 ++:105200000E208A8842828979017598F816204275A5 ++:10521000B8F81720C282B8F819204280B8F81B20CD ++:105220008280B8F81D20C2806E4A4146D2F80B3009 ++:105230008360D27B027311F8242F02F01F020276E2 ++:1052400011F81F29520980F8642111F8051C427BCE ++:10525000C1F340110A40427394F86A0000B1FFDFC5 ++:10526000002784F86C70D9F80400C8460188A4F8B7 ++:105270006E104188A4F884108188A4F88610C18833 ++:10528000A4F8881090F8640184F88A00544894F8CF ++:105290005F100A30009021B1607A009900F067F841 ++:1052A00038B994F8600058B1607A009900F056F867 ++:1052B00030B1D4F80A00A067E089A4F87C0002E0CD ++:1052C000A767A4F87C709BF80000454AC0F38011E2 ++:1052D000D8F804008032FF2D417652F86F1FC0F8D5 ++:1052E0001A109288C28313D0C4F87E103C4AC08B37 ++:1052F000A4F882007232511E284603F00EFD00B958 ++:10530000FFDF94F8710040F0020084F871000DE0B6 ++:10531000C4F87E70A4F88270417E84F87110D0F8D1 ++:105320001A10C4F87210C08BA4F87600012084F81B ++:105330006A0000F030F888F8007000F036F80120BC ++:1053400000F02BFE3BE7012200F04FBE022803D005 ++:10535000032801D00020704701207047012802D1A6 ++:105360004879800901D0002070470120704701284A ++:1053700006D148790121B1EB901F01D1012070477E ++:10538000002070470278202322F0200203EA411116 ++:105390000A4302707047114810B540680088FAF758 ++:1053A00029FDBDE81040FAF7BFB910B5FEF728FE99 ++:1053B000FEF719FEFEF788FDBDE81040FEF7B8BD08 ++:1053C000064810B5801CFEF757FE10B903497F2030 ++:1053D0008870BDE81040FEF73ABE0000CC00002007 ++:1053E000780A0020780B0020FE484068704770B5AE ++:1053F00006460D4614461046FFF740F8022C10D022 ++:10540000F94908444FF47A7100F2E140B0FBF1F041 ++:1054100000EB460005442046FFF726F8284460309C ++:1054200070BDF249EDE72DE9F0410D460646014613 ++:105430001746012004F0B1F8044696F85200FFF731 ++:105440001DF896F85210022914D0E74940F2712253 ++:1054500008444FF47A7100F2E140B0FBF1F170883A ++:105460005043C1EB4000C01BA0F55970A54203D2C8 ++:10547000214602E0DD49E9E72946814204D2A542FE ++:1054800001D2204600E028467062BDE8F0812DE997 ++:10549000FF4F89B0044690F85200DDF858909A46C4 ++:1054A000039049EA0A00089094F864000025164623 ++:1054B00019460D2803D00020069011B131E00120DB ++:1054C000FAE794F8040103282BD1069848B3B4F8FE ++:1054D0007C01B04225D1D4F80C01C4F8F8006088F2 ++:1054E00040F2E2414843C4F8FC00B4F85201B4F879 ++:1054F000DE100844C4F80001204602F093FBB4F823 ++:105500008001E08294F87E016075B4F882016080C9 ++:10551000B4F88401A080B4F88601E080022084F809 ++:105520000401D4F85C010290B4F8DE00D4F858818C ++:105530000090B4F85011D4F84C010590BAF1000F66 ++:1055400004D094F8180100287ED108E004F5A67074 ++:10555000049004F59C7704F1D80B001D07E004F5D6 ++:105560009870049004F58E7704F5967B001D0790E3 ++:10557000B4F85800301A00B20190701A00B2002836 ++:1055800005DAD4F84801059001200890019894F8B4 ++:105590000411E9B101297DD002297CD003297BD0F7 ++:1055A000FFDF29460598FCF72CF904990860079855 ++:1055B0000121068000203870397104980068B860B5 ++:1055C0008B48D0E90520824267D9CBF8000082E100 ++:1055D000B8F1000F00D1FFDFE08A40F271214843AB ++:1055E000490001EB40000A9900F074FDC4F808017D ++:1055F000608840F2E24148430A9900F06BFDC4F82C ++:105600000C0182B22046A16AFFF70DFF14F8520F79 ++:10561000FEF766FF4FF47A7100F2E140B0FBF1F162 ++:1056200001EB080000902078FEF75AFF14F8521999 ++:10563000024602293FD06C4815180846FEF71EFFA7 ++:1056400029184FF47A7000E076E101F2DB51B1FBEA ++:10565000F0F1E08A40F271225043C1EB4001D4F8EE ++:10566000080140F2E2430A1A0099551894F85220B2 ++:10567000617D11FB03F105F2C245FFF7B8FE5C49FD ++:10568000801C4861886194F85200FEF729FF4FF4AE ++:105690007A7103E087E010E0BEE019E100F2E1403A ++:1056A000B0FBF1F101EB0800281AB0F53D7FBFF423 ++:1056B00078AFFFDF75E74D48BEE7E08A40F2712220 ++:1056C000D4F8FC10504301EB40000A9900F002FDB1 ++:1056D000C4F80801608840F2E24148430A9900F0AA ++:1056E000F9FCC4F80C0182B22046A16AFFF79BFEC8 ++:1056F000009848BBB9F1000F26D094F85200FEF78D ++:10570000BDFE94F85210024602291BD0364840F2E2 ++:10571000712510444FF47A7200F2E140B0FBF2F0D0 ++:10572000D4F80821D4F8FC300244E08A684303EB43 ++:105730004000851A0846FEF797FE0299081A0544AC ++:10574000203D0CE02948E2E7E08A40F27122D4F8DB ++:10575000FC10504301EB4000D4F80811451AD4F86E ++:105760000021D4F8F810D4F8080140F2E24301FB1C ++:10577000020094F85220617D11FB03F1E834FFF739 ++:1057800036FE01461A4840F27123416134F8E61CA6 ++:10579000626A5943C2EB4101A1F2133181610120D8 ++:1057A0002077E83CFDE6628840F27123D4F80C11C2 ++:1057B0005A43C1EB42054543DDE900021044D4F8E9 ++:1057C0000021D4F8F8C0801AD4F80831401E0CFB30 ++:1057D000023200FB012094F85220617D40F2E24346 ++:1057E00008E000008C0B0020A22402000436020016 ++:1057F000D400002011FB03F1FFF7F9FD0146FE483C ++:10580000B9F1000F4161A5F213318161CAD0B8F13D ++:10581000000FC7D1FFDFC4E6618840F27123D4F8DE ++:105820000C215943C2EB4105454394F863002428F9 ++:1058300003D094F86400242809D1B4F87C01301A0C ++:1058400000B2002803DB94F87F0100B103900898B0 ++:1058500028B10098002802981AD000B1FFDFDDE9D6 ++:1058600000010844D4F80C11039A48430021FFF7C3 ++:10587000BEFD0146E04840F2712341616188D4F8E1 ++:105880000C215943C2EB4101A1F21331816188E639 ++:1058900010B1B8F1000F00D1FFDF0398FEF7EEFD65 ++:1058A00001460398022811D0D44808444FF47A7175 ++:1058B00000F2E140B0FBF1F02D1A94F85200FEF72F ++:1058C000D3FD0299081A0544203DC8E7CC48ECE70F ++:1058D0001046CBF80020626A104400F28310F86092 ++:1058E0007971B4F8C800801B00B2002801DD0320E4 ++:1058F0007871069820B3B9F1000F17D0B4F8F020F2 ++:10590000C2B3B4F8F20000BFA4F8F20094F8F43087 ++:10591000401C4343934209D27879401E002805DD9C ++:105920007971B4F8F200401CA4F8F200BAF1000F4B ++:1059300027D094F8180100B302200DB0BDE8F08F15 ++:10594000B9F1000FDAD194F804010028EED0608894 ++:1059500040F27122D4F80C115043C1EB400138469B ++:1059600003F0DFFD0004000CE0D0179901B10880BE ++:105970000120E2E7FFE70020C6E794F85401FCF7B6 ++:1059800091FD94F85401394600F08AFB18B18AF071 ++:10599000010084F819010020CFE7FEB50446FCF7AA ++:1059A00027FA0146D4F84801FCF730FF214600F001 ++:1059B0009BFB94F864100D290AD0B4F85820B4F871 ++:1059C00016111318994206DB491CA4F8161106E0BB ++:1059D000B4F816010CE0401C1044A4F8160194F829 ++:1059E0001A0140B9B4F81601B4F8CC10884202D1BB ++:1059F000401CA4F81601B4F852017F4D401CA4F8D5 ++:105A00005201B4F87E00B4F87C10401AB4F8581073 ++:105A1000401E084486B216E07A48297802AF002377 ++:105A200030F81110CDE9003794F8643130F81300E4 ++:105A30000023084481B22046FFF729FD002821D029 ++:105A4000012817D0FFDFB4F81621B01A00B20028E1 ++:105A5000E2DA082084F87300012084F872002046FE ++:105A600001F09DFD204600F01DFB2879BDE8FE40B9 ++:105A7000F5F748BFB4F81601BDF808100844A4F8BB ++:105A80001601E0E7FEBD2DE9F0415F4C032701253B ++:105A9000277500202074E07A04F1100650B14FF40D ++:105AA0007A71A069FBF7ADFEA0610021304603F0DA ++:105AB00038FD10E0002000F056FB0546FEF746FFDB ++:105AC00005442946A069FBF79CFEA06129463046A3 ++:105AD00003F027FD451C208C411C0A2901D22844D3 ++:105AE0002084606830B1208C401C0A2802D3022038 ++:105AF000607500E06775607A002806D1207B31462A ++:105B000000F0CEFA002800D1FFDFBEE42DE9F0411D ++:105B100006463D480F460178374D032909D1017BE0 ++:105B2000B14206D1406828613846BDE8F04100F036 ++:105B30002FBB304600F0AAFA0721FAF729F8040033 ++:105B400000D1FFDF304600F0A1FA2188884200D062 ++:105B5000FFDF214638462C61BDE8F04100F0D1BAA4 ++:105B600010B5294C207848B101206072FFF7C1F9C7 ++:105B70002078032804D0207A002800D00C2010BD03 ++:105B8000207BFCF78FFC207BFCF7D9FE207BFCF709 ++:105B900010F900B9FFDF0020207010BD10B5FFF72D ++:105BA000DFFF00F022FB18490020C87210BD70B55D ++:105BB0000446012000F05BFAC5B20B2000F057FA52 ++:105BC000C0B2854200D0FFDF6FF0040000F04FFA52 ++:105BD000C5B2192000F04BFAC0B2854200D0FFDFF9 ++:105BE0000549002001220C7188700A704870C87045 ++:105BF000054908700AE00000D4000020A224020039 ++:105C0000043602002CEF01008C0B0020BDE8704030 ++:105C1000C4E7FD49087070472DE9F041FB4C06468A ++:105C2000207800284CD1FA48FCF769F82073202826 ++:105C300046D04FF00308666084F800800025657246 ++:105C40002572A6B1012106F1F400FDF750F90620F6 ++:105C5000F9F746FF07460720F9F742FF16F8F41F49 ++:105C60003844B1FBF0F200FB1210401C3070FCF71E ++:105C700099F840F2F651884200D2084600F23D10F1 ++:105C800086B2FEF73FFEE061FEF760FE0127C8B175 ++:105C9000A772002000F067FA0644FCF7A9F8314625 ++:105CA000FBF7AFFDC4F8180084F8148084F8158061 ++:105CB000D6492574207B103100F0F2F960B90AE072 ++:105CC0000C2022E7FCF794F83146FBF79AFDA0611F ++:105CD000A572E772E8E7FFDF25840020FFF709F9E6 ++:105CE000002012E77CB50025044680F80451A0F896 ++:105CF0005051C54900950195C648097894F864212A ++:105D00002B4630F8111030F812002A46084481B2B0 ++:105D10002046FFF7BCFB00B1FFDFC4F800510120B3 ++:105D2000C4F8F85084F80401A4F81651A4F81451EA ++:105D300084F81A5134F8580F401E24F8900B0020B4 ++:105D4000A4F86A507CBDB04948707047AF4810B5A0 ++:105D5000417A012409B1002408E0C17A31B1406AD6 ++:105D6000AD49884202D90024FFF7BFF8204610BD94 ++:105D700070B5A54C0646E088401CE080D4E90201DD ++:105D80006278D6F8585112B12A4603F0F4FBA060AD ++:105D9000854205D896F80401012801D0E07808B1C1 ++:105DA000002070BD012070BD70B504460D46084648 ++:105DB000FEF764FB022D10D0984908444FF47A7125 ++:105DC00000F2E140B0FBF1F040F2E2414C4300F55B ++:105DD0004D70844203D9201A70BD9149EDE700202F ++:105DE00070BDFEB50025044680F8185190F8D60025 ++:105DF00000284AD194F80401032846D1FBF7F8FFA4 ++:105E00000146D4F84801FCF701FD00283DDD21469C ++:105E100000F06AF9411CB4F858000144A4F81411C8 ++:105E2000B4F81411B4F8CC20511A09B200292CDDB1 ++:105E3000012184F81A11B4F87E10B4F87C20891A74 ++:105E4000491E084486B21AE06F49724802AA0978CE ++:105E500030F81110CDE90052B4F8142194F86431EF ++:105E600030F813000123084481B22046FFF70FFBEE ++:105E700000280AD0012809D0022806D0FFDFB4F894 ++:105E80001401301A00B20028DEDAFEBDB4F81401A5 ++:105E9000BDF808100844A4F81401F0E77CB500250B ++:105EA0000446012902D15848C17871B1042084F810 ++:105EB000040100BFFBF7A8FEA4F85251B4F8580043 ++:105EC000A4F8160184F81A517CBD5249007894F860 ++:105ED000042131F810000123032A13D0012AE9D14B ++:105EE000CDE9003594F86431B4F8CC2031F81310C2 ++:105EF0000023084481B22046FFF7C9FA0028D9D010 ++:105F0000FFDFD7E7C4F80051C4F8F850E8E770B5F0 ++:105F10003E4C00263546E07A08B1E57219E0A07AD9 ++:105F200018B1012000F01FF90646FEF70FFD811998 ++:105F3000A069FBF766FCA061257403206075607A98 ++:105F400030B93249207B103100F0AAF800B9FFDFE8 ++:105F50002584FBF759FE2C480079BDE87040F5F721 ++:105F6000D1BC10B5062916D2DFE801F00509030CF3 ++:105F70000C0D002100E00121BDE810408EE7032157 ++:105F800080F8041110BDB0F80C118AB2816ABDE826 ++:105F90001040FFF748BAFFDF10BD10B548B1012827 ++:105FA00003D0022805D0FFDF10BDBDE8104000F08F ++:105FB00048B9BDE81040AAE770B5134CA178022992 ++:105FC00012D1E18800290FD12569C5F85C0195F847 ++:105FD0005200E035FEF748FAE96F081AA16801445B ++:105FE000A160E1680844E06070BD70B505460648F0 ++:105FF0008378022B16D0054C2434C1B1012915D069 ++:10600000022916D0FFDF70BDD40000208C0B0020C9 ++:106010000D5B01002CEF0100DB821300A2240200C3 ++:1060200004360200046904F5AC74E6E76D1E2560D1 ++:10603000E9E71046FEF72FFA4FF47A7100F2E140DB ++:10604000B0FBF1F0281A2060DDE7D74810B50078E2 ++:1060500008B1002010BD0720F9F734FD80F00100E1 ++:1060600010BDD1480078002800D0012070470028DA ++:1060700006DA00F00F0000F1E02090F8140D03E0C4 ++:1060800000F1E02090F800044009704710B5044684 ++:10609000202800D3FFDFC448283030F8140010BD9A ++:1060A000FCF7EEB870B50446002084F8040194F8BB ++:1060B00054514FF6FF76202D00D3FFDFBA48283029 ++:1060C00020F8156094F85401FBF773FE202084F843 ++:1060D000540198E702460020002904D0B3485143F8 ++:1060E000B1FBF0F0401C7047002809D0D1F80C211A ++:1060F000498840F271235943C2EB4101B0FBF1F0F2 ++:10610000704770B50125AA4E0C46082829D2DFE851 ++:1061100000F0040F17171228281B204600F0FAF889 ++:10612000204600F0BAF884F818510220B0706AE7EF ++:1061300001F076FD01E0FEF7E3F884F8185162E71C ++:106140002046BDE8704028E494F80401042800D0FB ++:10615000FFDF2046FFF7A6FF3079BDE87040F5F776 ++:10616000D1BBFFDF4FE708B500284FF001016846BB ++:1061700002D0FCF79DFE01E0FCF790FE9DF80000C8 ++:1061800042F210710002B0FBF1F201FB120008BDF7 ++:1061900070B5854C05462078032800D0FFDF002627 ++:1061A000082D20D2DFE805F0040D1717131F1F1A62 ++:1061B0006662FEF7A7FD00B1FFDF7D49032088700E ++:1061C00021E7FEF780FE0028FAD0FFDF1BE7BDE8DD ++:1061D0007040FEF795B8BDE8704054E4207BFBF7B3 ++:1061E000E8FD26700FE7FFDF0DE7FEB5704C0120DC ++:1061F000E0704FF6FF750CE00721F9F7C9FC0600C7 ++:1062000000D1FFDF96F85401FCF799FB3046FFF709 ++:1062100049FF69460720F9F744FC50B1FFDF08E069 ++:10622000029830B190F8041119B10088A842E3D166 ++:1062300004E06846F9F713FC0028F1D00020E07074 ++:10624000FEBD70B5584C0020E072A6692070012098 ++:1062500020720021606802F093FF6068C0F8486116 ++:10626000257B80F85451616AC0F84C61C0F8581120 ++:106270000688202D00D3FFDF4B48283020F815601A ++:106280006068FFF72FFD00B1FFDFFBF7BDFC48485A ++:106290000079BDE87040F5F735BB70B50546FBF7F2 ++:1062A00081FD95F8526004463046FEF7E7F8022E6D ++:1062B00026D0404940F2712208444FF47A7100F22E ++:1062C000E140B0FBF1F0D5F80C110144688850436F ++:1062D000C1EB4006303EB72C00D8B7242946012038 ++:1062E00003F05BF92044341A29460120A4F2193442 ++:1062F00003F053F9696A9C30814203D9081A02E01D ++:106300002D49D7E700202A49A042CC6000D320467F ++:10631000886078E610B5044625490020C4F8580185 ++:10632000C880C4F85C0194F8190138B9FBF760FD26 ++:10633000D4F82411FCF76AFA002813DCB4F816111B ++:10634000B4F85800814201D1B4F8CC10081AA4F86E ++:10635000CE00A4F85810D4F84001C4F82401C4F8C1 ++:1063600048011CE0B4F81401B4F85810401AA4F81D ++:10637000CE00B4F81401A4F85800D4F82401C4F8ED ++:106380004001C4F84801D4F82C01C4F8D800D4F86E ++:106390003001C4F84C01B4F83401A4F8500120468F ++:1063A000BDE8104001F030BB8C0B002040420F00D4 ++:1063B000D4000020A224020004360200012806D0E6 ++:1063C000022807D0042808D0082808D105E00129B0 ++:1063D00007D004E0022904D001E0042901D0002004 ++:1063E00070470120704770B5FE4CE06890F864007B ++:1063F0001B2800D0FFDFE068002580F88B5090F864 ++:10640000A20100B1FFDFE06890F88C1041B180F884 ++:106410008C500188A0F8A61180F8A4510D2108E045 ++:106420000188A0F8A61180F8A451012180F8A811D4 ++:106430000C2180F8A2110088F9F7DCFCF9F774F957 ++:10644000E078F5F75FFAE06880F8645070BD70B5E9 ++:10645000E44C2079800725D56078002822D1216975 ++:1064600020460126CA78C568921E05F15800162AF2 ++:1064700079D2DFE802F00BAF4A566718AF32AF406F ++:106480006A5DAFAFAF5D6E797F8C9DA7012395F8F4 ++:106490006620194602F0E9FF002803D1E1680820D0 ++:1064A00081F8660070BD087995F863100A2909D152 ++:1064B00095F8C210814205D1002085F8630085F867 ++:1064C000860070BD95F86500010704D520F008002E ++:1064D00085F8650068E0FFDF70BD95F86500C007CE ++:1064E00000D1FFDF01F031FCE06810F8651F21F0FA ++:1064F0000101017070BD95F86400102800D0FFDF25 ++:10650000E068112180F88B6008E095F86400142899 ++:1065100000D0FFDFE068152180F88B6080F8641000 ++:1065200070BD95F86400152800D0FFDF172005E046 ++:1065300095F86400152800D0FFDF1920E16881F884 ++:10654000640070BDBDE870404DE7BDE8704001F0EB ++:1065500008BC95F863200123002102F086FF00B9F2 ++:10656000FFDF0E200FE035E015F8650F20F0040086 ++:10657000287019E095F863200123002102F075FFCF ++:1065800000B9FFDF1C20E16881F8630070BD95F859 ++:106590006500C0F30110012800D0FFDFE06810F8AB ++:1065A000651F21F010010170BDE8704001F0CDBB06 ++:1065B00095F863200123002102F057FF00B9FFDFA7 ++:1065C0001F20E0E795F86400212801D000B1FFDF2B ++:1065D0002220B3E7FFDF70BD8248C16891F86520D3 ++:1065E000130702D501214170704742F0080281F87B ++:1065F00065204069C07881F8C10001F09DBB10B5ED ++:10660000784CE1680A88A1F8E62181F8E40191F864 ++:10661000510001F03EFBE16881F8E80191F8520079 ++:1066200001F037FBE16881F8E901012081F8E2011E ++:10663000002081F89201E078BDE81040F5F762B9DA ++:1066400010B5684C0521E068FFF78BFCE06890F816 ++:106650004E10012913D000F5CB7102880A85028EF5 ++:106660004A85828E8A85428ECA85C08E0886012020 ++:1066700081F82600E078BDE81040F5F743B9022123 ++:1066800080F84E1010BD10B5564C01230921E0686A ++:1066900090F86320583002F0E8FE38B1E16800203D ++:1066A00001F87A0F087301F8170C10BD0120607013 ++:1066B00010BD70B54B4D2946E868496990F86320D4 ++:1066C00009790E2A01D1122903D000241C2A03D0F3 ++:1066D00004E0BDE87040D6E7142902D0202A07D094 ++:1066E00008E080F8634080F88640BDE87040A7E786 ++:1066F000162914D0172918D190F86410222914D122 ++:1067000080F8644001F021FBE86880F87B4090F855 ++:106710009201002809D00020BDE870406FE780F8A2 ++:10672000634080F886401A20F6E770BD2DE9F843F3 ++:106730002C4CE06890F86310202909D05FF0000726 ++:1067400090F86410222905D07FB300F1630503E0BF ++:106750000127F5E700F1640510F8941F41F00401EA ++:106760000170606903F038FB4FF00108002608B3A0 ++:106770003946606901F09FFAE0B16A466169E068F4 ++:1067800002F064FF80B3606903F024FBE168A1F8C4 ++:106790007C01B1F8581001F070FA30B3E06828219C ++:1067A00080F8731080F8728045E0FFE70220607087 ++:1067B000BDE8F883E06890F8920110B11E20FFF761 ++:1067C0001EFFC7B16069E168C07881F8C20008FAAD ++:1067D00000F1C1F3006000B9FFDFE0680A2180F832 ++:1067E000631003E0F00000200EE019E090F886004E ++:1067F00030B9FFDF04E02E7001F0A7FAFFF7ECFEDE ++:10680000E06880F87B60D3E7E06890F8920110B10F ++:106810000020FFF7F4FE2E70E06880F87B600AE04D ++:10682000E0689DF8001080F87E119DF8011080F856 ++:106830007F1124202870E06800F164018D4203D1AB ++:10684000BDE8F84301F081BA80F88660B0E770B522 ++:10685000FC4C01230B21E06890F86420583002F0D2 ++:1068600004FE202650BBE0680123002190F864203C ++:10687000583002F0FAFD0125F0B1E06890F86300AD ++:1068800024281BD0606903F085FAC8B1E06890F84D ++:10689000941041F0040180F8941061694A7902F083 ++:1068A000070280F85020097901F0070180F84F10A5 ++:1068B00090F893311BBB06E0657070BD667070BDCB ++:1068C000BDE8704088E690F89231C3B900F15103F9 ++:1068D0005E788E4205D11978914202D180F87B50C2 ++:1068E0000DE000F5EE710D7002884A8090F84F209F ++:1068F0000A7190F850004871E078F5F703F8E16804 ++:10690000212081F86400BDE8704001F015BA70B52F ++:10691000CC48C06890F84E20448EC38E418FB0F8AA ++:106920004050022A23D0A94200D329460186C18FB4 ++:10693000B0F84220914200D311468186018FB0F811 ++:106940004420914200D311464186818FB0F8462001 ++:10695000914200D31146C186418EA14200D90C4616 ++:106960004486C18E994200D90B46C38670BD028E03 ++:10697000914200D31146C68F828E964200D2324693 ++:10698000A94200D329460186B0F842108A4200D3BA ++:106990000A468286002180F84E10CFE770B5A94CD8 ++:1069A000E06890F8650010F0300F04D0607840F097 ++:1069B0000100607070BD606903F0D0F948B3E5680C ++:1069C000606903F0C7F92887E568606903F0BEF9DC ++:1069D0006887E568606903F0BFF9A887E5686069C2 ++:1069E00003F0B6F9E88720794FF00102800703D55C ++:1069F0002069C07814280FD0E06890F863101C2933 ++:106A00000AD090F84E1001290DD090F8891151B993 ++:106A100006E0BDE87040DFE5E06880F84E2002E067 ++:106A200090F8881131B1E06810F8651F41F010014D ++:106A3000017016E090F8651041F0200180F86510B3 ++:106A400000F5CB7103888B86038FCB86438F0B8732 ++:106A5000838F4B87C08F888781F83220E078F4F7E6 ++:106A600051FFBDE8704001F067B970B5754CE06842 ++:106A700090F86510890707D590F863200123082155 ++:106A8000583002F0F2FCE8B1E06890F88E00800720 ++:106A900012D4606903F03EF9E16881F88F00606903 ++:106AA00030F8052FA1F890204088A1F8920011F845 ++:106AB0008E0F40F002000870E06890F88E10C90751 ++:106AC00003D00FE00120607070BD90F86500800772 ++:106AD00000D5FFDFE06810F8651F41F0020101708A ++:106AE00001F02AF9E068002590F86310062906D124 ++:106AF00080F8635080F88650E078F4F703FFE06890 ++:106B000090F87A110429DFD180F87A51E078F4F70F ++:106B1000F9FEE06890F863100029D5D180F886501E ++:106B200070BD70B5474C01230021E06890F86420E7 ++:106B3000583002F09AFC012578B9E06890F864209A ++:106B4000122A0AD001230521583002F08EFC10B120 ++:106B50000820607070BD657070BDE06890F88C00B2 ++:106B600008B901F0E9F8E1686069E03103F0B4F8D0 ++:106B7000E1686069B83103F0B9F8E06890F8AA01FB ++:106B800000B1FFDFE1680888A1F8AC0101F5D77119 ++:106B9000606903F090F8E168606901F5DB7103F06A ++:106BA00092F8E06880F8AA51142180F86410E07827 ++:106BB000BDE87040F4F7A6BE70B5224C0123002159 ++:106BC000E06890F86420583002F04FFC0125A8B12D ++:106BD000606903F03CF898B16069E168B0F80D00B5 ++:106BE000A1F87C01B1F8581001F047F858B1E068FD ++:106BF000282180F8731080F8725070BD657070BDE8 ++:106C0000BDE87040E8E46069E168027981F87E21BE ++:106C1000B0F80520A1F8802103F00CF8E168A1F894 ++:106C20008201606903F009F8E168A1F884016069F4 ++:106C300003F00AF8E168A1F886010D2081F86400EC ++:106C400070BD0000F00000207CB5F84C2079C00732 ++:106C500033D0606901230521C578E06890F864208D ++:106C6000583002F002FC68B1022D0BD00A2D09D079 ++:106C70000B2D07D0032D05D0062D03D0607840F0F2 ++:106C8000080060706078002817D160690226C57816 ++:106C90001DB1012D01D0162D18D1E06890F86300C8 ++:106CA00002F0D6FB90B1E16891F863001F280DD087 ++:106CB000202803D0162D1AD066707CBD252081F8BF ++:106CC0006300162D70D02A20FFF799FC192D6CD285 ++:106CD000DFE805F0262310359292388F4992292C4F ++:106CE00046929292928C6F6C8083869289002020CB ++:106CF00060707CBDE0680123194690F8662058302A ++:106D000002F0B3FB20BB606902F0CEFFE16881F8BE ++:106D10006801072081F8660070E001F0CBF86DE0B3 ++:106D2000FFF74AFF6AE001F0A5F867E0E06890F835 ++:106D3000641011290BD1122180F864105EE0FFF776 ++:106D4000F0FE5BE0E06890F86400172801D0667000 ++:106D500054E000F0FAFFE1681B2081F864004DE088 ++:106D6000FFF783FE4AE0E06890F86500C00703D0B3 ++:106D7000607840F0010022E06946606902F0D1FFCE ++:106D80009DF8000000F02501E06800F8941F9DF8D0 ++:106D9000011001F04101417000F0CEFFE06810F8F1 ++:106DA000651F41F0010113E01AE025E0FFF76BFCDD ++:106DB00024E0E06890F86500400702D5012060708B ++:106DC0001CE000F0B9FFE06810F8651F41F0040115 ++:106DD000017013E0FFF7E2FD10E001F017F80DE09D ++:106DE000FFF735FD0AE0FFF7A1FC07E000F0E5FF43 ++:106DF00004E0FFF75EFC01E0FFF7EEFBE168F1E97C ++:106E00002802401C42F10002C1E900027CBD70B5BD ++:106E1000864C207900073FD5607800283CD1E06897 ++:106E200090F8C300FF2800D1FFDFE068FF2180F861 ++:106E3000C31090F86410192907D1002580F88B50F1 ++:106E400000F083FFE06880F86450E06890F8631019 ++:106E50001F2918D190F8640002F0FAFA78B1E068BE ++:106E60002521012380F8631090F864200B2158300D ++:106E700002F0FBFA38B92A20FFF7C1FB03E0E16812 ++:106E8000202081F86300E06890F86610082903D19B ++:106E90000221217080F8C310D2E66449C96891F8D4 ++:106EA0007E210AB991F8512081F8512091F87F2173 ++:106EB0000AB991F8522081F85220002802D000200F ++:106EC000FFF79DBB704770B5584C06460D46E0680D ++:106ED00090F8C300FF2800D0FFDFE268002082F8AE ++:106EE000C36015B1A2F88800AAE622F8820F01203B ++:106EF0001071A5E610B54D4C01230021E06890F813 ++:106F00006320583002F0B1FA00284AD0E06890F8C7 ++:106F1000881111B190F8891129B390F892110029C4 ++:106F20003FD090F8931100293BD190F864200123C1 ++:106F30000B21583002F099FA002832D1E06890F81D ++:106F4000941190F85100FFF739FA70B3E06890F8A7 ++:106F5000951190F85200FFF731FA30B3BDE81040B8 ++:106F60000020FFF74CBBB0F88A1120F8401FB0F8A2 ++:106F70004C114180B0F84E118180B0F85011C180A1 ++:106F8000002180F8481190F8250080060AD500F00D ++:106F9000F5FFE06810F8651F21F0200141F01001B5 ++:106FA000017010BD0021142016E0FFE7E068012306 ++:106FB000032190F86420583002F057FA0028F0D1ED ++:106FC000E0680123022190F86420583002F04DFA65 ++:106FD0000028E6D100211620BDE8104073E710B567 ++:106FE00058BB124CE06890F86510CA0702D0012126 ++:106FF000092018E08A070AD501210C20FFF763FF5A ++:10700000E06810F88E1F41F0010101702CE04A0782 ++:1070100002D50121132006E00A0709D510F8C11F87 ++:10702000C17001210720FFF74EFF1DE0F000002096 ++:10703000C90602D590F8891109B1002010BD90F859 ++:10704000881179B1B0F88A1120F8401FB0F84C11BE ++:107050004180B0F84E118180B0F85011C1800021FC ++:1070600080F8481100F08AFF012010BD70B5F74C80 ++:10707000E06890F8C310FF296FD1617800296CD1C6 ++:1070800090F8662001231946583002F0EEF90028E6 ++:1070900063D1E06890F8661149B10021A0F8801032 ++:1070A00090F8671180F8C4100021022041E090F8A8 ++:1070B000642001230421583002F0D7F90546FFF778 ++:1070C0008EFF002849D1284600F063FF002844D1F4 ++:1070D000E0680123002190F86320583002F0C5F9E0 ++:1070E00078B1E0680123042190F86420583002F060 ++:1070F000BCF930B9E06890F87A0010B10021122094 ++:1071000017E0E06890F863200A2A0DD0002D24D102 ++:1071100001230021583002F0A8F988B1E06890F806 ++:107120007A1104290CD107E010F8C21F81700021E8 ++:107130000720BDE87040C6E690F88E00800702D0B8 ++:10714000BDE87040D6E600210C20FFF7BCFEE068E9 ++:1071500010F88E1F41F00101017071E53EB5054642 ++:107160006846FDF728FA00B9FFDF2221009807F0F2 ++:107170002BFC0321009802F022FD0098017821F0F9 ++:1071800010010170294602F049FDB04CAD1E162DCC ++:107190006FD2DFE805F00B9352949411935D9394B2 ++:1071A000162C939393239494306F4988E068009948 ++:1071B00090F8C400087182E0E168009891F8C4106A ++:1071C00017E0A26800981178017191884171090A4D ++:1071D00081715188C171090A017270E00321009820 ++:1071E00002F012FE0621009802F012FE67E00098FD ++:1071F0000621017163E0E068B0F84410009802F0E5 ++:1072000095FDE068B0F84610009802F093FDE06844 ++:10721000B0F84010009802F091FDE068B0F842101C ++:10722000009802F08FFD4AE00098E16891F89421FF ++:10723000027191F89511417141E0E1680098E831DF ++:1072400002F058FDE1680098BC3102F05DFD36E0C7 ++:107250007F49D1E90001CDE90101E06801A990F879 ++:10726000940000F025008DF80400009802F088FDDD ++:1072700025E023E0E068B0F84010009802F05EFDE1 ++:10728000E068B0F84210009802F05CFDE068B0F8E9 ++:107290004410009802F04AFDE068B0F846100098EB ++:1072A00002F048FD0BE0E16891F892010028009897 ++:1072B000BCD111F8512F02714978BCE7FFDFFDF70F ++:1072C0008FF9002800D1FFDF3EBD604810B5C068CF ++:1072D00090F8691041B990F86420012306215830D4 ++:1072E00002F0C3F8002800D0012010BD70B5574D42 ++:1072F000E86890F8671039B1012905D0022906D055 ++:10730000032904D0FFDF9BE4B0F8CC1037E090F8FD ++:107310006610082936D0B0F87C10B0F87E20002422 ++:107320008B1C9A4206D3511A891E0C04240C01D0DE ++:10733000641EA4B290F87A1039B190F8632001234A ++:107340000921583002F091F840B3FFF7BEFF78B141 ++:10735000E9680020B1F87620B1F874108B1C9A42CD ++:1073600003D3501A801E00D0401EA04200D284B227 ++:107370000CB1641EA4B2E868B0F8CC102144A0F8A7 ++:10738000C8105DE4B0F87C100329BDD330F8581F55 ++:10739000C28C1144491CA0F8701051E40024EAE7A3 ++:1073A00070B50C4605464FF4F871204607F02EFBE9 ++:1073B000258045E4F8F7F5BC2DE9F0410D46074678 ++:1073C0000721F8F7E5FB04003ED094F8960100266B ++:1073D000B8B16E70082028700DE0268484F896619C ++:1073E000D4F89801C5F80200D4F89C01C5F806004D ++:1073F000B4F8A001688194F896010028EDD1AE7030 ++:10740000C7E094F8A201B0B394F8A2010C2813D0FD ++:107410000D2801D0FFDFBCE02088F8F7EBFC074621 ++:10742000F8F797F978B96E700D20287094F8A401D8 ++:10743000A8702088A88018E02088F8F7DBFC0746B1 ++:10744000F8F787F930B10020BDE8F081F0000020A6 ++:1074500044EF01006E700C20287094F8A401A8700D ++:107460002088A88094F8A801A87184F8A261384601 ++:10747000F8F769F98DE0FFE794F8DA0130B16E7042 ++:107480000F20287084F8DA616F8082E094F8AA01F6 ++:1074900080B16E700920287020886880D4F8AE1101 ++:1074A0006960D4F8B211A960B4F8B601A88184F873 ++:1074B000AA616EE094F8B80140B16E701720287090 ++:1074C000B4F8BA01688084F8B86162E094F8D40135 ++:1074D00078B16E701820287006E000BF84F8D4617F ++:1074E000D4F8D601C5F8020094F8D4010028F5D1EB ++:1074F0004FE094F8BC01A8B16E70142028700CE025 ++:1075000084F8BC61D4F8BE01C5F80200D4F8C20109 ++:10751000C5F80600B4F8C601688194F8BC010028DB ++:10752000EED136E094F8C80180B16E701A20287050 ++:1075300084F8C861D4F8CA01C5F80200D4F8CE01B5 ++:10754000C5F80600B4F8D201688122E094F8DC01A5 ++:1075500040B11B20287084F8DC61D4F8DE01C5F846 ++:10756000020016E094F8E20100283FF46DAF6E705F ++:107570001520287009E000BF84F8E261D4F8E40126 ++:10758000C5F80200B4F8E801E88094F8E2010028A8 ++:10759000F2D1012058E7FE4A9060D1707047002177 ++:1075A00080F8631080F8641080F8671090F8D610A7 ++:1075B00009B1022100E00321FEF7D3BC2DE9F0411F ++:1075C000F34C0546E06809B1002104E0B0F8DE1094 ++:1075D000B0F8CE201144A0F8DE1090F8661139B949 ++:1075E00090F8662001231946583001F03EFF30B173 ++:1075F000E06830F8801FB0F84E2011440180E06848 ++:1076000090F8863033B1B0F88210B0F8CE20114433 ++:10761000A0F8821090F98A70002F06DDB0F888106B ++:10762000B0F8CE201144A0F8881001213D2615B1F4 ++:1076300080F8736013E02278022A0AD0012A11D060 ++:1076400062782AB380F8721012F0140F0DD01E2148 ++:1076500013E090F8C420062A3CD016223AE080F8C5 ++:10766000721044E090F8682134E0110702D580F8E8 ++:1076700073603CE0910603D5232180F8731036E057 ++:10768000900700D1FFDFE1682A2081F873002AE02B ++:107690002BB1B0F88220B0F884309A4210D2002F7B ++:1076A00005DDB0F88820B0F884309A4208D2B0F8EE ++:1076B0008030B0F87E20934204D390F866310BB14D ++:1076C000222207E090F867303BB1B0F87C3093425B ++:1076D00009D3082280F87320C1E7B0F87C20062A7D ++:1076E00001D33E22F6E7E06890F8721019B1E06825 ++:1076F000BDE8F04153E7BDE8F0410021FEF731BCA1 ++:107700002DE9F047A24C81460D46E0680088F8F765 ++:1077100083FB060000D1FFDF60782843607020798A ++:107720004FF000058006E06804D5A0F87C5080F892 ++:10773000DC5003E030F87C1F491C0180FFF7C5FDD9 ++:10774000012740B3A088000506D5E06890F86910CD ++:1077500011B1A0F874501EE0E068B0F87410491C34 ++:1077600089B2A0F87410B0F876208A4201D3531A77 ++:1077700000E00023B4F806C00CF1050C634501D805 ++:1077800080F87A70914206D3A0F8745080F8DA71CC ++:10779000E078F4F7B7F820794FF0020810F0600FA6 ++:1077A0000ED0E06890F8671011B1032908D102E00B ++:1077B00080F8677001E080F867800121FEF7D1FB57 ++:1077C000E06890F86710012904D1A188C90501D5A6 ++:1077D00080F86780B9F1000F78D1A188890502D5BA ++:1077E000A0F8F05003E030F8F01F491C018000F0D1 ++:1077F0008CFBFFF73BFC00F05FFE0028E06802D046 ++:10780000A0F8D05003E030F8D01F491C018000F0F0 ++:1078100056FE38B1E16891F8DC00022807D8401C18 ++:1078200081F8DC00E06890F8DC00022804D9E06808 ++:1078300020F8D05F45800573E0680123002190F8AF ++:107840006420583001F011FE20B9E06890F864001F ++:107850000C2859D1E0680123002190F863205830AA ++:1078600001F003FE98B3E0680123002190F8662040 ++:10787000583001F0FAFD50B3E06890F86710022923 ++:1078800042D190F8DC0010BB3046F7F732FDF0B182 ++:10789000E16891F8C300FF2836D1B1F8CA00012889 ++:1078A00032D981F8D570B1F87E00B1F87C20831E02 ++:1078B0009A4201DB012002E0801A401E80B2B1F83A ++:1078C000D020E3889A4203D3012204E028E01BE0A1 ++:1078D0009A1A521C92B2904200D91046012801D146 ++:1078E00081F8D55091F8612192B1B1F8D220B1F868 ++:1078F00062118A4201D3012102E0891A491C89B22E ++:10790000884205D9084603E0E168012081F8D55096 ++:10791000E168B1F858201044A1F8CC00FFF7E6FC6C ++:10792000A088C0F340214846FFF748FEE06880F891 ++:10793000D650BDE8F047FCF776BE154902464878B8 ++:107940008B7818430DD10846C06842B10979090700 ++:1079500003D590F86600082803D001207047FEF791 ++:1079600007BA0020704770B5094C05460E46A0883E ++:107970002843A080A80703D5E80700D0FFDF2661D1 ++:10798000EA074FF000014FF001001DD0666101E0F1 ++:10799000F0000020F278062A02D00B2A14D10AE067 ++:1079A000E26892F86430172B0ED10023C2E9263327 ++:1079B00082F8680008E0E26892F86430112B03D185 ++:1079C00082F8681082F88C00AA0718D52269D2784C ++:1079D000052A02D00B2A12D10AE0E16891F864204E ++:1079E000152A0CD10022E1E9282201F8370C06E023 ++:1079F000E06890F86420102A01D180F86910280608 ++:107A000001D50820A0707EE42DE9F84FFB4C00253D ++:107A10004FF00108A5806570A5704146257061F39F ++:107A20000702E0609246814680F8D6800088F8F729 ++:107A3000F3F9070000D1FFDFE0680088FCF7B8FD2C ++:107A4000E0680088FCF7DDFDE068B0F8CA1071B1AD ++:107A500090F8C310FF290FD190F8661191B190F8FA ++:107A6000662001231946583001F0FFFC80B1E06820 ++:107A700090F8C300FF2805D0E06890F8C30000BF6D ++:107A8000FFF76CFBE06890F8D71089B1E58018E04B ++:107A9000E068A0F8805090F8671180F8C4100021C9 ++:107AA0000220FFF710FAE06880F8D5500220E7E7DF ++:107AB00090F8961119B9018C8288914200D881887A ++:107AC000E180B0F8CE10491E8EB2B0F8D01031442B ++:107AD000A0F8D01090F8D41021B1A0F8D25080F8BE ++:107AE000D45004E0B0F8D2103144A0F8D21030F8ED ++:107AF0007C1F31440180FFF7E8FB20B1E06830F8DB ++:107B0000741F31440180E068B0F8CA10012902D81E ++:107B1000491CA0F8CA100EB180F8DC5090F8D510BE ++:107B2000A1B1B0F8D000E18888420FD23846F7F70B ++:107B3000E0FB58B1E06890F8611139B1B0F8D210AB ++:107B4000B0F86201814201D300F0BCFCE06880F82B ++:107B5000D55090F864100B2901D00C2916D1B0F83B ++:107B60005820B0F87C31D21A12B2002A0EDBD0F8BD ++:107B70007E11816090F882110173022101F000FBF7 ++:107B8000E06880F8645080F8968024E0242910D1C1 ++:107B9000B0F85810B0F87C21891A09B2002908DB26 ++:107BA00090F89201FFF779F9E06800F8645FC57515 ++:107BB00011E090F8631024290DD1B0F85810B0F8F6 ++:107BC0007C01081A00B2002805DB0120FFF765F9E7 ++:107BD000E06880F86350E0680146B0F8CE20583085 ++:107BE00001F089FBE06890F8611109B1A0F8D2506A ++:107BF00083480090834B844A4946504600F0A9FBD5 ++:107C0000E0680123052190F86420583001F02DFC34 ++:107C1000002803D0BDE8F84F00F03DBABDE8F88F6A ++:107C200000F00CBC10B50446B0F882214388B0F8CF ++:107C30008411B0F886019A4205D1A388994202D1F5 ++:107C4000E38898420FD02388A4F89A31A4F89C21A5 ++:107C5000A4F89E11A4F8A001012084F896016748B9 ++:107C6000C078F3F74FFE0121204601F089FA002089 ++:107C700004F8640F0320E07010BD401A00B247F60C ++:107C8000FE71884201DC002801DC012070470020E1 ++:107C9000704710B5012808D0022808D0042808D061 ++:107CA000082806D0FFDF204610BD0124FBE7022490 ++:107CB000F9E70324F7E72DE9F0478946044602F087 ++:107CC0007FF88046204602F07FF84C4D0446E86875 ++:107CD00090F8921121B190F8947190F8956101E0BB ++:107CE00000273E46204601F0A3FCA0B1EA6892F8C6 ++:107CF000511081420FD03C420AD0B9F1000F0AD195 ++:107D0000012808D1022906D192F85000204202D160 ++:107D10000020BDE8F087404601F08AFC50B14046A3 ++:107D200001F086FCE96891F85210884202D018EA06 ++:107D30000600EED00120ECE730480021C06820F8B2 ++:107D4000881F8178491C817070472C4800B5C16834 ++:107D500011F88A0F401E40B20870002800DAFFDFD9 ++:107D600000BD10B5254CE06890F87A11042916D1B1 ++:107D700090F8632001230021583001F076FB00B910 ++:107D8000FFDFE06890F88E10890703D4062180F8A1 ++:107D9000631004E0002180F8861080F87A11E06812 ++:107DA00090F86500800707D5FFF7CFFFE06810F86F ++:107DB000651F21F00201017010BD10B50F4CE06885 ++:107DC00010F8941F41F004010170606902F01EF880 ++:107DD000162806D1E06890F86300202802D02528F4 ++:107DE00005D010BD606902F015F8FEF708FCE168E7 ++:107DF000002081F8630081F8860010BDF0000020AB ++:107E0000017701003B7901006779010070B5994C59 ++:107E100001230A21E06890F86320583001F025FB27 ++:107E200018B3606901F09AFFA8B1E568606901F0D4 ++:107E300091FF2887E568606901F088FF6887E56839 ++:107E4000606901F089FFA887E568606901F080FF3B ++:107E5000E887FEF75CFDE168002081F8860081F884 ++:107E60006300BDE87040FEF7EBBB607840F00100B6 ++:107E70006070C8E510B57F4C01230021E06890F8E0 ++:107E80006420583001F0F1FA30B1FFF755FFE16896 ++:107E9000102081F86400B0E7E0680123052190F824 ++:107EA0006420583001F0E1FA08B1082000E0012018 ++:107EB0006070A2E770B56F4C01230021E06890F874 ++:107EC0006420583001F0D1FA012588B1606901F0D1 ++:107ED000E8FEE168A1F87C01B1F85810FFF7CDFE8B ++:107EE00040B1E068282180F8731080F872508AE56C ++:107EF000657088E5E168606901F5BF7101F0CCFE4D ++:107F0000E1680B2081F864007DE510B5FEF77FFF86 ++:107F1000FEF79AFE574C2079400708D5607830B9B3 ++:107F2000E06890F86600072801D101202070FEF774 ++:107F30008EFA2079C00609D5607838B9E06890F8E3 ++:107F400064100B2902D10C2180F86410A07800077E ++:107F50000ED5E0680123052190F86420583001F027 ++:107F600084FA30B108206070E168002081F8A20135 ++:107F700043E7BDE81040002000F0F4BA10B5FEF76A ++:107F8000C6FCFEF75DFB0121BDE810401520FEF7A1 ++:107F90009ABF10B5374CE16891F8642040B3102ABD ++:107FA00006D0142A07D0152A19D01B2A2BD119E084 ++:107FB00001210B2018E0FAF777FF0C2816D3E068B0 ++:107FC0000821E830FAF774FF28B1E0680421BC30DA ++:107FD000FAF76EFF00B9FFDF0121042004E000F092 ++:107FE00017F803E001210620FEF76DFF012004E7EA ++:107FF000212A08D191F87B0038B991F8920110B18B ++:1080000091F8930108B10020F7E601211720EBE772 ++:1080100070B5184C0025E06890F8691101290AD064 ++:10802000022925D190F88C10A9B1062180F8C4103E ++:108030000121022017E090F8A211002918D100F1C7 ++:10804000A80300F1E001002200F5B57001F0BAF9D3 ++:108050000121052007E090F89400400701D5112088 ++:1080600000E00D200121FEF72EFFE06880F8695145 ++:10807000C9E40000F0000020F8480078002800D093 ++:108080000C20704710B50446FFF7F6FF00B1FFDF84 ++:10809000F248447210BDF14901200872704770B572 ++:1080A000054600F02CFC044600F025FC65B1E28E8C ++:1080B000618E94F85230407C00F00EFC94F852101F ++:1080C000BDE87040FBF74FBCFF2094F85110F7E774 ++:1080D0002DE9F041074600F012FCE04E0546E0486D ++:1080E000706200F008FC04460120FFF7D8FF607CB6 ++:1080F00068B304F15001DB4891E80E1000F1080864 ++:1081000088E80E10216EC0F82110616EC0F82510AD ++:10811000FE38FBF71FFF06F13400007800F0C0FBCB ++:1081200080F00101CF4808300176D4E91212C0E98D ++:108130000412A0F58372716AFBF713FB95F85200E5 ++:1081400000F0C0FB01460120FBF719FB04E0706A58 ++:10815000FBF700FFFBF737FB4FB9012295F85230D0 ++:1081600096211046FBF720FE9620FBF718FF95F8A6 ++:108170002C00012801D1FBF774FF02203070BDE80C ++:10818000F0812DE9FC47824600F0B5FB044600F083 ++:10819000B6FB0546B14F6079B04E20374FF001096C ++:1081A00058B3012863D0022865D0032872D0FFDFBE ++:1081B000306AB0460826027822F008020270A379DD ++:1081C00006EAC3031A4322F004020270E37904268C ++:1081D00006EA83031A4322F0100202706779D8F886 ++:1081E0002C00F7F796F80646FCF730FA022F58D025 ++:1081F000012F56D0032F57D059E000F089FB0146DC ++:10820000A88E00F052FB298E814200D20846ADF8BC ++:108210000400A5F848003846FCF7F6F930B14FF4F1 ++:108220008060316A00F06EFB03201EE06A4601A9FF ++:10823000F06A00F033FB306210B194F8331029B1CA ++:108240003846FCF7B2F984F80590B1E79DF80010C4 ++:1082500029B9002101808170012101F0B0FCBDF835 ++:108260000410306A01F0D8FD02206071A0E73846A2 ++:10827000FCF79BF99CE7B5F84800ADF804006A46A6 ++:1082800001A9F06A00F00AFB3062002890D1FFDFFC ++:108290008EE7FFE73846FCF7B7F9002888D1FFDF03 ++:1082A00086E7B04301D002E00EB1012100E00021D9 ++:1082B000D8F820004646027842EA01110170217C7C ++:1082C00071B3617901292BD004F1500165488EC941 ++:1082D00000F1080888E88E00216EC0F82110616E58 ++:1082E000C0F82510FE38FBF735FE5C4834300078C6 ++:1082F00000F0D6FA01465B4808300176D4E9101246 ++:10830000C0E90412A0F58371326AFBF72AFA95F8E6 ++:10831000510000F0D7FA01460020FBF730FA03E0E5 ++:10832000FBF718FEFBF74FFABAF1000F06D195F8EC ++:108330005130012296210020FBF736FD86F805908A ++:10834000316A0A88F2818978317486F80090BDE834 ++:10835000FC872DE9F047414C8046089F20781D4658 ++:108360001646894610B90EB105B107B9FFDFE761BE ++:10837000C4E905650020C4E90D892072E07120710F ++:10838000E0706071A071A070A08100F0B4FA0646A0 ++:1083900000F0B5FA05460088F7F73EFDE062288850 ++:1083A000F7F728FD2063FBF7FBFA05F11200FBF756 ++:1083B000B9FD05F10E00FBF797FB284C343420780B ++:1083C00000F06EFA08B1032000E00120FBF7BFFDCA ++:1083D000707EFBF793FBFBF7B4FD207808B3EA8EC1 ++:1083E000698E95F85230707C00F076FA95F852500C ++:1083F0002946FBF7B8FA2078B8B1606890F86001B8 ++:1084000008B1FBF724FB2A4600210120FBF778FC8A ++:108410006068D0F8D800FBF7A1FDBDE8F047012067 ++:1084200056E6FF2095F85150E2E700212A4608461B ++:10843000FBF766FCBDE8F0470120A2E6074800B55F ++:10844000343001783438007819B1022800D0FFDFC9 ++:1084500000BD0128FCD0FFDF00BD000008010020A6 ++:10846000F80B0020F80D002010B500F048FA044683 ++:10847000FBF7C6FDFBF7B7FDFBF726FDFBF758FD45 ++:10848000FBF7A1F994F82C00012801D1FBF7DFFDDF ++:10849000FE4CA08900F076FAE269E179E078904735 ++:1084A0000020207010BDF94810B50078022800D0D7 ++:1084B000FFDFBDE81040D7E7F44840797047F34844 ++:1084C00000797047F1490120887170472DE9F0412A ++:1084D000EE4C054639B9012D05D12079401CC0B2BA ++:1084E000207101282CD8A1692846884740B3A0797B ++:1084F000E74E30B1012D04D1707810B93078C00644 ++:108500001ED5E079E0B9E14F3437387800F0C8F98A ++:1085100008B1012D04D0387800F0C2F9284311D1F8 ++:10852000DA480E300078C10602D43178C90607D582 ++:10853000A17829B9A16A29B9618919B1C00601D404 ++:1085400001201CE600201AE610B5D04CA06A00B944 ++:10855000FFDF6289D4E90910D21C06F0B6F9A06ADF ++:10856000606210BD2DE9F047064600F0C4F9C74D22 ++:108570000446686A47780EB1012E03D1296B05F0D5 ++:10858000C3FE687068784FF000084FF0010940B1F1 ++:10859000012818D0022831D0032846D0FFDFBDE8DB ++:1085A000F087012E31D0FFF7CFFF39460122286B2B ++:1085B000F6F720FF27E000BF84F8078030E000BF17 ++:1085C00084F807902CE0012E08D0FFF7BDFF394654 ++:1085D0000022286BF6F70EFF022EE0D0D4E912013C ++:1085E000401C41F10001C4E91201E079012802D0E8 ++:1085F00084F80790D3E784F80780D0E7012E04D0F1 ++:10860000286BF7F77BF8022EC9D0D4E91201401C81 ++:1086100041F10001C4E91201E0790128D0D1CBE792 ++:10862000687ABDE8F047F3F76DB9012EB7D0286B33 ++:10863000F7F764F8F4E72DE9F041074600F05BF93D ++:108640000446924800260125416A0A7802F0030296 ++:10865000012A1FD0022A1DD0032A03D0C17941F07C ++:1086600004012EE00746084601F0C2FA68B1A57081 ++:10867000B88940F40060B8810120796A00F042F9BD ++:1086800021E0E6717BE5E57179E5F87940F01000CD ++:10869000F87174E54978B1B1828942F4006282814F ++:1086A000826A002AEED0FB2908D8007A20B1BDE802 ++:1086B000F041802000F066B93D7060E5C17941F07D ++:1086C0001001C1715BE5E0790128DCD1D9E770B513 ++:1086D00000F011F96D4D04462878012800D0FFDF25 ++:1086E000A078012650B10020A0700146042000F0BF ++:1086F00009F966483430007800B12671286A00789C ++:10870000C043800706D1E07820B9E6700220296ACC ++:1087100000F0F8F801210020FFF7D8FE10B1BDE805 ++:108720007040A1E6BDE870400020D1E42DE9F84397 ++:10873000814600F0E0F8554C002605468DF80060B3 ++:108740002078022800D0FFDFA08940F40070A081CB ++:108750000020FFF7A4FC687CB9F1000F5DD0FBF7A7 ++:1087600055F8FBF745F8012760B9687C50B1606A9D ++:10877000417839B10078E979C0F3C000884201D16D ++:10878000E7705DE0606A4178618121B1206BF6F7A6 ++:10879000EBFDA06200E0A662A08940F02000A0816D ++:1087A000267100F0A8F8804600F0A9F8064690F877 ++:1087B0002C00012816D1FBF74AFC4146304600F058 ++:1087C0001FFE78B1314834300178406811B300F5AC ++:1087D000EA703188418098F8081001710770607A5A ++:1087E000F3F790F8606AA9790078C0F380008842B6 ++:1087F00005D000F0CCF8A08940F48070A081606AB8 ++:10880000E9790078C0F3C00088420DD16846FFF7CF ++:1088100012FF09E000F58670DBE708B1FBF723F8EB ++:10882000A08940F04000A08149460120FFF74EFE9C ++:1088300000289DF8000007D010B10020FFF792FE3D ++:10884000FFF712FEBDE8F88310B10120FFF78AFEA2 ++:108850000020FFF796FC9DF800000028F2D00220CF ++:10886000FFF780FEEEE770B50C46054600F047F8CE ++:10887000064990F8512034312846097800292146CC ++:1088800003D0BDE87040FDF7B0BB03E00801002055 ++:10889000F80B0020BDE8704002F0FBBFF6F774BC97 ++:1088A00008B10020704701207047022905D06FF001 ++:1088B0000D0101EBD00080B270476FF00E0101EBAB ++:1088C0009000F8E700B5012802D0022802D0FFDFAF ++:1088D0000020C1E50120BFE570B50C4605461946EC ++:1088E0001046FFF7E2FF844200D22046002D01D05F ++:1088F000001D80B270BD56484068583070475448DB ++:1089000040687047524A0123343A937052691047C5 ++:1089100010B5FFF7F4FF0446FFF7EDFF0146C27AFA ++:108920004B48242A09D0097B242906D01F2A0DD0C0 ++:10893000202A0BD0222911D021E00178406811B102 ++:1089400090F87E1115E090F8E81012E0222905D089 ++:108950000178A1B1406890F8940107E0017871B105 ++:10896000416891F8940191F85010084000F04FF8D8 ++:10897000014694F85100BDE8104000F052B894F858 ++:10898000510010BD324A0021343A5269104770B587 ++:10899000FFF7B1FF04464079002835D0022810D1F6 ++:1089A0002B4D343DE86AF6F71BFC00B9FFDFD4E934 ++:1089B0001001401C41F10001C4E91001687AF2F78E ++:1089C000A1FF234800256571007830B1207920B1DE ++:1089D000257100211020FFF795FFE07878B1E57050 ++:1089E000FBF721FE00B9FFDF00210820FFF78AFF17 ++:1089F000D4E91001401C41F10001C4E91001A07943 ++:108A0000012802D00120A07170BDA57170BDC10701 ++:108A100001D001207047800701D502207047002057 ++:108A2000704700B500290CD008280BD0042809D0C5 ++:108A3000082907D0042905D0012806D0012904D02F ++:108A4000022009E5FFDF082006E5012004E500001B ++:108A50003C0100202DE9F0410F4606460024FB4D65 ++:108A60000FE000BF05EBC40090F84311B14206D1FE ++:108A70000622394600F5A27005F0FBFE38B1641CF1 ++:108A8000E4B22878A042EDD81020BDE8F08120465D ++:108A9000FBE770B50546ED480478621C027000EBF8 ++:108AA000C4060868C6F844018888A6F84801102C56 ++:108AB00000D3FFDF86F84351204670BD70B50546F0 ++:108AC00000F060FA10281CD1E04C2078401EC0B2A3 ++:108AD0002070A84215D004EBC00204EBC50102F5DA ++:108AE0008070D2F84321C1F84321D0F84700C1F883 ++:108AF0004701207800F046FA102802D0204480F880 ++:108B0000035170BD2DE9F047D04C0646A719A07857 ++:108B1000401EC5B2A57097F80381AE422AD004EB7F ++:108B2000051A04EB06190AF1030109F103001022EA ++:108B300005F0CBFE0AF1830109F18300102205F054 ++:108B4000C4FE601905EB450290F8031187F8031184 ++:108B500006EB460104EB420204EB4101D2F80B3173 ++:108B6000C1F80B31B2F80F21A1F80F2190F83B01A9 ++:108B700087F83B0104EBC80090F84A01C00703D115 ++:108B80004046BDE8F04799E7BDE8F08710B540F2F0 ++:108B9000C311AE4805F018FFFF220821AC4805F0CC ++:108BA0000BFFAB4800210A3841704FF461714180DE ++:108BB00010BD70B50D460646FFF74CFFA34C1028BC ++:108BC00007D004EBC00191F84A11C90701D0012078 ++:108BD00070BD617808290ED2102803D1294630468D ++:108BE000FFF757FF617804EBC000491C6170012159 ++:108BF00080F84A11EBE7002070BD70B5934D2878DE ++:108C0000401E44B20BE000BF05EBC40090F84A01DF ++:108C1000C00702D0E0B200F0C6F9641E64B2002CB6 ++:108C2000F2DA70BD2DE9F047984691460C460746AA ++:108C3000FFF710FF0546102805D000F0A3F9102813 ++:108C400001D01220A0E7814EB07808281ED2102D46 ++:108C500004D121463846FFF71CFF0546B4781022A0 ++:108C6000601CB07006EB0417F81C494600F09DFB31 ++:108C700007F183001022414600F097FB30190021D4 ++:108C800080F8035180F83B1108467DE707207BE719 ++:108C90006E4810B58078401E44B204E0E0B2FFF7A1 ++:108CA00031FF641E64B2002CF8DA10BD68490A393D ++:108CB0004870704766480A384078704740B14AF2B9 ++:108CC000B811884204D862490A39488001207047A7 ++:108CD000002070475E480A384088704710B5FFF79B ++:108CE000B9FE102803D000F04DF9102800D108205B ++:108CF00010BD56498A78824203D901EB00108330B7 ++:108D000070470020704751498A78824203D901EBAD ++:108D10000010C01C7047002070474C4B10B59C7869 ++:108D200084420FD9184490F8030103EBC00090F877 ++:108D300043310B70D0F844111160B0F848019080B5 ++:108D4000012010BD002010BD404A114491F80321BC ++:108D50003F490A390A7002684A6080880881704772 ++:108D600010B5FAF7C2FC18B1BDE81040FAF7CDBC57 ++:108D7000FF2010BD35498A78824209D9084490F80D ++:108D8000030101EBC00090F84A0100F001007047B8 ++:108D9000002070472DE9F04700252F462B4E2AE092 ++:108DA00006EBC70404F5A271884694F84301FFF767 ++:108DB00095FF8146FFF7A7FF94F84A11C90718D01D ++:108DC00060B1B9F1080F05D206EB090191F83B112A ++:108DD000012903D0102100F0D9FA50B11C492846CE ++:108DE00001F805906D1C94F843214146EDB2FAF765 ++:108DF00047FE7F1CFFB23078B842D1D8C4E62DE9D7 ++:108E0000F04100252C46114E1CE03319204693F802 ++:108E10000371FFF778FF93F83B11012903D010216C ++:108E200000F0B4FA60B10A4806EBC7014455284681 ++:108E300091F843216D1CEDB201F5A271FAF720FE05 ++:108E4000641CE4B2B078A042DFD81EE6280E0020F1 ++:108E50004E01002010B5FAF73FFE20B1FAF740FEB0 ++:108E60005649085C10BD082010BD0246534810B595 ++:108E70000A38407840B15248817829B1C01CD21CD0 ++:108E8000FAF7DFFB012010BD002010BD4C4A01EBBA ++:108E9000410102EB41010268C1F80B218088A1F871 ++:108EA0000F0170472DE9F04180460024444D19E040 ++:108EB0002046FFF71EFF060012D0102100F066FAD0 ++:108EC00070B904EB440005EB400707F20B1742466C ++:108ED00039463046FBF73BFC38462146FFF7D6FFC4 ++:108EE000641CE4B2A878A042E2D8CEE50146102284 ++:108EF000344800F05ABA3348704770B5304D0446D4 ++:108F0000A878A04206D905EB04101021833000F0A8 ++:108F10003DFA08B1002070BD04EB440005EB4000B1 ++:108F200000F20B1070BD26498A78824203D90844AA ++:108F300090F83B0108B100207047012070472DE9EF ++:108F4000F0410E46074615460621304600F01EFA4F ++:108F50001B4C58B1002004E02118401C81F83B5103 ++:108F6000C0B2A1788142F7D801208EE5314638465B ++:108F7000FFF7B4FE082803D0204480F83B51F3E704 ++:108F8000002082E50E4910B5034600208A7806E0ED ++:108F90000C1894F803419C4204D0401CC0B2824299 ++:108FA000F6D8102010BD06494A78521E4A7001EBCF ++:108FB000C001002281F84A2180E500004E01002016 ++:108FC000280E0020EB0F002000F00101400800F007 ++:108FD00001021144400800F001021144400800F071 ++:108FE00001021144400800F001021144400800F061 ++:108FF00001021144400800F00102114401EB50004D ++:10900000704710B50446702105F000FD0020A071E6 ++:10901000E071E0722073A073E07360712076607677 ++:10902000212084F83C00412084F83D00FF2084F892 ++:109030006B0010BD002180F82C100184012280F803 ++:1090400051201B2180F85220018741874FF4A471E1 ++:10905000C18781871B2303864386C1868186A0F84A ++:109060004030A0F84430A0F84610A0F84210A0F814 ++:109070004A30A0F84C30A0F848304273704710B521 ++:1090800000248484048DDB004C43B3FBF2F394FB97 ++:10909000F2F45B1C04859BB203FB02F4C384B4F5B9 ++:1090A000C84F01DD5B1EC3844FF4FA43B3FBF2F3F8 ++:1090B0005B1C8385038C02EBC3035B1EB3FBF2F3E3 ++:1090C000C383838B4B43B3FBF2F1818310BD70B537 ++:1090D0000546087B0E4600F01F0008730020E87567 ++:1090E00004463019007AFFF76FFF2919641C887451 ++:1090F000E97DE4B20844E875052CF2D3C0B2252816 ++:1091000000D9FFDF70BD00238383028401EBC2021C ++:10911000521EB2FBF1F1C1837047F0B56FF01F0230 ++:10912000010C02EA90261F25A1F5AA4054380AD066 ++:10913000401E08D0A1F52850AA3804D0B0F5004050 ++:1091400001D0012000E00020002213464FEA020473 ++:1091500082EA0107FF431F437F1C0FD006F001077F ++:10916000520842EAC73205F001075B0876086D082D ++:10917000641C43EAC733162CEAD3F0BD0020F0BDCF ++:1091800070B50025044600F15806032909D0D1B373 ++:1091900001295DD0022935D101463046BDE8704035 ++:1091A00095E73046FFF72DFF2046FFF743FF4FF4CA ++:1091B00048606080A4F8C850A4F8CA50A4F8CC5005 ++:1091C000A4F8CE50A4F8D050A4F8D25084F8D550CA ++:1091D00084F8D750A4F8DE5084F8DC50A4F8F0509E ++:1091E000A4F8F25084F8885184F8895184F8925197 ++:1091F00084F8935184F8615184F8665184F8695178 ++:1092000084F87A5170BDFFE7A4F8DE5084F8D65098 ++:109210006188FE480A460844B0FBF1F0A4F87600E5 ++:109220004BF68030A4F87800E3883046FFF727FF3C ++:1092300021463046FFF74BFFD4F80E00FFF76DFFD5 ++:1092400010B184F86051DDE7012084F86001D9E7AE ++:10925000A4F8DE504188B4F88631B4F88221304653 ++:10926000BDE870400BE770B5044600F158050329CE ++:1092700009D029B3012935D00229C3D10146284696 ++:10928000BDE8704023E72846FFF7BBFE2046FFF706 ++:10929000D1FE0020A4F8D000202184F8D21084F858 ++:1092A000C800C4F8CC0084F8FC0084F8FD0084F801 ++:1092B000060184F8070184F8EC0084F8F800A1E7BF ++:1092C0006188D2480A460844B0FBF1F0A4F8760061 ++:1092D0004BF68030A4F87800E3882846FFF7CFFEED ++:1092E0002146CCE7D4F8F0006188C389428928463A ++:1092F000BDE87040C3E6C37D0BB1252B01D9122018 ++:1093000070472AB14B7B2BB1012B05D01F20704732 ++:109310000020704700F09FBA00F045BABC4A0168CF ++:1093200012681140BA4A121D126811430160704759 ++:1093300070B50025B749B64C01220B785B1CDBB237 ++:109340000B70202B00D10D700E78236802FA06F600 ++:109350003342F2D0097803688A405340036051E7F2 ++:1093600070B50646007940090ED100252C46305DC7 ++:10937000FFF72AFE641C2844E4B2C5B2052CF6D3DC ++:10938000012D01D901203DE700203BE710B5002366 ++:109390001A4603E0845C2343521CD2B28A42F9D3BA ++:1093A0000BB1002010BD012010BD30B5134606E002 ++:1093B000CC18D51A14F8014C5B1E4455DBB2002BB7 ++:1093C000F6D130BD70B50E468CB0144601461D4630 ++:1093D00010226846FFF7E9FF1022314604A8FFF784 ++:1093E000E4FF684604F014FA08A94FF0100228467A ++:1093F0001CB1FFF7DAFF0CB004E705F066FAFAE7F4 ++:1094000038B505460C466846FAF736FE00281ED0E9 ++:109410009DF90000207294F909100022411A00D52C ++:10942000494295F82D308B4210DCFF2B0ED0A17AEB ++:10943000491CC9B2A17295F82E30994202D8617ABE ++:109440007F2903D160720020A0720122104638BD2E ++:109450000C2806D00B2804D00D2802D01F3806286F ++:1094600001D8012070470020704730B5A2F10F04E9 ++:109470000C2952D2DFE801F006080D1215182C3421 ++:10948000394B404782B348E0072A48D0082A46D0E3 ++:1094900043E00C2A43D00B2A41D03EE00D2A3ED0B7 ++:1094A0003BE00C2C3BD938E01BB1103A0B2A36D9E3 ++:1094B00033E0122A33D0112A31D090F8340020B191 ++:1094C000122A2AD31A2A2AD927E0162AFAD224E005 ++:1094D000032C24D990F83400F8B11B2A1FD91CE0C2 ++:1094E000DBB9042A1BD018E019E013B1062A16D004 ++:1094F00013E0012A13D010E01C2A10D01D2A0ED030 ++:109500001E2A0CD009E01F3A062A08D905E013B13B ++:109510000E2A04D001E0052A01D0002030BD012030 ++:1095200030BD2DE9F0410C46054640F233778668A0 ++:1095300006E000BFF8F75CFC3946F8F762F9A8606E ++:109540002846F8F722FE0028F4D094B13046A968E6 ++:10955000F9F75CF900280CDD2044401EB0FBF4F75D ++:1095600007FB04F13046F8F74CF9A8603846BDE82F ++:10957000F0810020FBE770B5044690420AD2101B30 ++:10958000642800D2642025188D4204D8F9F771F9B7 ++:1095900008B1284636E6204634E670B505460C4646 ++:1095A000088E91F8511000F0E0F8A18E814200D2AF ++:1095B00008460646608E94F8521000F0D6F8E18E08 ++:1095C000814200D20846024635B100233146BDE84B ++:1095D0007040012000F07FB90123F7E770B5044621 ++:1095E000008913460D460246A188012000F073F958 ++:1095F000696A81421BD2401A401CA1884008091A9E ++:109600008AB2A2802189081A208105E0FFDB0500CB ++:109610004CEF01005601002015F8511F104600F0D4 ++:10962000ADF860806978208900F0A8F8E080E9E56D ++:10963000C10701D001207047810701D50220704782 ++:10964000400701D508207047002070472DE9F04100 ++:109650000546164688460124084600F0B1FB074639 ++:10966000404600F0B1FB0346FFF7E2FF02463846F2 ++:10967000FFF7DEFF52EA000100D10024990700D174 ++:109680000022B90700D1002095F85110914200D175 ++:109690000022327095F85210814200D10020707083 ++:1096A00072B968B9404600F095FBB5F85810401AF9 ++:1096B00000B247F6FE71884201DC002800DC00247D ++:1096C000204654E7012802D0022800D0002070472D ++:1096D000F8B5CFB20646C1F307242146384600F05C ++:1096E0000AF9F5B2C6F3072620B93146284600F03C ++:1096F00002F940B1274035403D40444665F3070438 ++:1097000065F30F2406E02540444665F307043E4018 ++:1097100066F30F24E0B200F03EF88DF80000C4F3C9 ++:10972000072000F038F88DF80100BDF80000F8BD02 ++:1097300030B52A242325162A05D10C2807D00D2858 ++:1097400005D01F2805D071B1162A0CD104E01C7079 ++:1097500000E01D70012030BD08780128F7D00028F6 ++:10976000F5D01628F5D0002030BD022903D0C00066 ++:10977000703080B2704780003C30FAE7022905D093 ++:109780006FF00D0101EBD00080B270476FF00E0159 ++:1097900001EB9000F8E7810701D502207047C00770 ++:1097A000FCD001207047F0B50C7C8B7BCD7B5C40FE ++:1097B0004B7C02886B4044EA0323C67D5A40002458 ++:1097C000D5B2120A95FAA5F592FAA2F22D0E120E52 ++:1097D00045EA022202EB0212641C1A44E4B292B27D ++:1097E000032CEDD35A402523B2FBF3F403FB1423DF ++:1097F00001EBD30503762F7A03F00704012505FA60 ++:1098000004F4274201D043761BE05643320C521C2D ++:10981000D2B20023C418A47C944214D30024CE18DE ++:1098200096F8086005FA04F73E4201D0521ED2B203 ++:1098300022B1641CE4B2082CF4D306E004EBC301AB ++:1098400041760020F0BD121BD2B25B1CDBB2052BAF ++:10985000E0D31F20F0BDF0B5037E0C7E012504FB94 ++:1098600002322523B2FBF3F403FB142201EBD204F2 ++:10987000027602F00703247A05FA03F31C4201D0B2 ++:1098800042761EE0C37DB2FBF3F403FB1422521CAC ++:10989000D2B20023C418A47C944214D30024CE185E ++:1098A00096F8086005FA04F73E4201D0521ED2B283 ++:1098B00022B1641CE4B2082CF4D306E004EBC3012B ++:1098C00041760020F0BD121BD2B25B1CDBB2052B2F ++:1098D000E0D31F20F0BD00280CD0114441434D229D ++:1098E00010FB02F001EB80009C380BB1042100E07A ++:1098F000002108447047012804D0022805D004281C ++:1099000006D007E0012907D004E0022904D001E0D5 ++:10991000042901D00020704701207047282105F05C ++:1099200053B830B50546007801F00F0220F00F0063 ++:109930001043287007290BD2DFE801F00406040663 ++:1099400004080400062405E00C2403E0222401E0BE ++:109950000024FFDF687820F03F002043687030BDAE ++:10996000007800F00F0070470A6840F8032F8988DC ++:109970008180704750F8032F0A6080888880704784 ++:109980000A6840F8092F89888180704750F8092FAC ++:109990000A608088888070470278402322F0400265 ++:1099A00003EA81110A43027070470078C0F3801007 ++:1099B0007047027822F0800242EAC11202707047BA ++:1099C0000078C0097047D0F80320C1F80920B0F82A ++:1099D0000720A1F80D200A7822F080020A70007892 ++:1099E000800942EAC0100870704770B515460E46EF ++:1099F00004461F2A00D9FFDF2A46314604F1090038 ++:109A000004F063FF6078AD1D20F03F0005F03F01DA ++:109A10000843607070BD70B5054640780E4600F092 ++:109A20003F04062C00D2FFDFA41FE4B21F2C00D994 ++:109A30001F24224605F10901304604F046FF204666 ++:109A400070BD70B515460E4604461F2A00D9FFDFCB ++:109A50002A46314604F1090004F037FF6078AD1D55 ++:109A600020F03F0005F03F010843607070BD70B505 ++:109A7000044640780E4600F03F05062D00D2FFDF79 ++:109A8000AD1FEDB21F2D00D9FFDF2A4604F10901F9 ++:109A9000304604F01AFF284670BD0968C0F80F1060 ++:109AA00070470A88A0F8132089784175704710F82C ++:109AB000242F01F01F0122F01F020A430270704799 ++:109AC000072900D9072110F8242F22F0E00242EAEA ++:109AD0004112027070470A6840F81F2F097901711E ++:109AE00070474178007801F03F0110F00F0005D079 ++:109AF000012807D0022801D0062805D1891F1F2977 ++:109B000004D901E00C2901D00020704701207047E2 ++:109B10004178007801F03F0100F00F00042805D1E2 ++:109B2000062903D3252901D801207047002070475A ++:109B300030B5017801F00F01032922D0052925D184 ++:109B40004578B0F81910B0F81B40B0F81730827D96 ++:109B500005F03F05222D19D1062917D34FF448658A ++:109B6000A94213D8B4F5FA7F10D27AB1082A0DD8D9 ++:109B70008A420BD28B4209D8B0F81D00A84207D9FF ++:109B800004E0407800F03F000C2801D0002030BDF8 ++:109B9000012030BD00B5027801F0030322F003027A ++:109BA0001A43027000224270012904D0022902D017 ++:109BB000032901D0FFDF00BD0121417000BD00B5C8 ++:109BC000027801F0030322F003021A43027000221C ++:109BD0004270012904D0022902D0032901D0FFDFFD ++:109BE00000BD0121417000BD007800F00300704706 ++:109BF000417889B1C0780E2805D00F2803D01028ED ++:109C000001D0192802D3FB2904D905E0864A105C4B ++:109C1000884201D1012070470020704730B50546C9 ++:109C2000C170192902D28048445C01E00024FFDFA2 ++:109C30006C7030BDB0F807007047B0F8090070478D ++:109C4000C172090A01737047B0F80B00704770B514 ++:109C5000B0F80720B0F80940B0F805300179951F39 ++:109C600040F67A46B54210D8B4F5FA7F0DD261B10C ++:109C700008290AD8914208D2934206D8B0F80B00BE ++:109C8000B0F5486F01D8012070BD002070BD0A6892 ++:109C9000426009790172704742680A60007A08716F ++:109CA0007047B0F809007047007970470A68426051 ++:109CB00049688160704742680A6080684860704700 ++:109CC0000988818170478089088070470A6840F858 ++:109CD0000E2F49684160704750F80E2F0A604068A7 ++:109CE000486070470968C0F816107047D0F8160031 ++:109CF000086070470A68426049688160704742683E ++:109D00000A608068486070470968C1607047C06831 ++:109D100008607047007970470A684260496881604E ++:109D2000704742680A608068486070470171090A9C ++:109D3000417170478171090AC17170470172090A46 ++:109D4000417270478172090AC172704780887047FA ++:109D5000C0887047008970474089704701891B2976 ++:109D60000CD341894FF4A472914207D381881B29F7 ++:109D700004D3C088904201D301207047002070476F ++:109D80000A68426049688160704742680A6080687A ++:109D9000486070470179490704D04079400701D0F5 ++:109DA00001207047002070470179490704D04079AD ++:109DB000400701D0012070470020704701717047B3 ++:109DC0000079704741717047407970478171090A85 ++:109DD000C1717047C08870470CB514A2D2E9001257 ++:109DE000CDE900120179407901F0070269461DF8BA ++:109DF0000220012A04D800F00700085C012801D9DC ++:109E000000200CBD01200CBD017170470079704726 ++:109E1000417170474079704730B50C460546FB29C3 ++:109E200000D9FFDF6C7030BD54EF0100000101026A ++:109E3000010202032DE9F041FF4E04460020717833 ++:109E4000DFF8F8830127054611B1012905D009E0A3 ++:109E500098F8531031B1777003E098F8281009B1E1 ++:109E60007570012071782B2211FB02F1414491F8A9 ++:109E70002820024311D02A22A01C293104F025FDFC ++:109E8000657004202070A77070782B2110FB01F101 ++:109E900001EB080080F8285040E098F87E0060B19F ++:109EA000E64911227F31A01C04F00FFD65701220DD ++:109EB0002070A77088F87E5030E098F822000128C2 ++:109EC00006D098F8000001280CD00020BDE8F081F1 ++:109ED000657006202070D8F82400C4F8020088F8C5 ++:109EE00022501BE0657013202070202208F102012F ++:109EF000A01C04F0EAFCA57188F80050B8F8040032 ++:109F0000A8F82400D8F89C00417B88F8261088F82F ++:109F100022700088F5F76EFFF5F715FC0120D5E7F4 ++:109F2000C648017809B1808870474FF6FF707047C6 ++:109F300070B50446C14890F8AE10002919D090F8C9 ++:109F4000AC10002915D0BD4990F8910092310D4612 ++:109F500000F05FFE38B1FEF7CEFF22462946BDE88D ++:109F60007040FAF7F4BB21462846BDE87040FAF786 ++:109F700021BC70BD70B50646B0482B2290F8AF00EA ++:109F800011FB02F1AD4A8D1805F12C0418B1F9F757 ++:109F90009AFB01280AD03046FFF707FD85F82B0011 ++:109FA00021463046BDE87040FFF7E4BCF9F7ADFB51 ++:109FB000224605F12B01FEF7B0FE00B9FFDF15F8D0 ++:109FC0002B0F40F00200287070BD70B59B4C064608 ++:109FD00094F82800002832D13046FFF7C1FC014632 ++:109FE00000200125072916D2DFE801F00B0408152F ++:109FF00015150A0084F82A5001210DE0032000E025 ++:10A0000002208E4984F82A0033313046FFF703FDE1 ++:10A0100084F8320004E0002184F8320000290ED0D8 ++:10A0200000213046FFF7A6FF8448523000F011FEB1 ++:10A0300084F82850BDE87040032001F0F0BB70BDEB ++:10A0400010B5002001F019FB98B1F9F77AFF012251 ++:10A0500000211046F9F7FAFD7848BC30F9F77AFF8D ++:10A06000764CD4F8B400F9F779FF00F0DDFD40B983 ++:10A0700003E0BDE8104000F04EBE94F8A0000228B6 ++:10A0800003D101210020FAF7B2F8F9F7EAFF94F8BA ++:10A09000AF0018B1F9F7E8FAF9F7BFFF032084F829 ++:10A0A000B20010BD70B5654C054694F89110FFF7ED ++:10A0B00073FC04F192012846FFF756FC94F8AD00BA ++:10A0C000002818D000F0B0FD28B194F89B0010B122 ++:10A0D00094F8A30001E094F8B000FEF70EFF04002E ++:10A0E00009D001212846FFF757FC21462846BDE844 ++:10A0F0007040FFF739BC70BD10B5012001F0BDFA0A ++:10A10000B0B14E49E431A1F12800FFF75CFC4B48A7 ++:10A11000E430FFF7C7FF4948E430F9F71BFF01219E ++:10A120000846FAF764F84549052081F8B20010BDE9 ++:10A13000BDE8104000F0EFBD10B5022001F09DFA1F ++:10A1400098B3012001F06BFB3C49E431A1F12800F8 ++:10A15000FFF739FC394C3948202354F89C1FE43070 ++:10A160004A7B017803EA421221F020011143334A6D ++:10A1700001702068BC321278417BC2F3401211405A ++:10A1800041732E48E430FFF78DFF2C492068E431FD ++:10A19000C08AC875000A087608462168497D81751D ++:10A1A000F9F7D8FE0620A07510BDFFE7BDE8104006 ++:10A1B00000F0B1BD70B50D460446FFF7AFFB032DAF ++:10A1C00038D0052D41D105212046FFF7AAFB1B4DB4 ++:10A1D000204655F89C1F0E31FFF75FFC296820468A ++:10A1E0001231FFF75EFC2868407DA0752868C08AA0 ++:10A1F000E075000A2076286840886076000AA0761C ++:10A2000028688088E076000A20772868C088607710 ++:10A21000000AA077296820460831FFF75CFC28680F ++:10A22000017E2046FFF743FCE97D2046BDE87040F3 ++:10A23000FFF746BC032103E058010020FC0F00207B ++:10A240002046BDE87040FFF76CBB70BDF64910B505 ++:10A25000B1F8BA2058B1FF2A12D24FF6FF7000EAC7 ++:10A260004200A1F8BA00FF280AD9FF2006E0012A1F ++:10A2700006D95008A1F8BA0002D10120A1F8BA000D ++:10A28000EA484268012A00D00AB90D224260D2434E ++:10A29000C2EBC20303EB021211F8B93FDB4303EB3D ++:10A2A0008304C4EB83131A444260900CB1F801207C ++:10A2B000B0FBF2F302FB1300087075E770B5DA4CDF ++:10A2C00094F8B200022805D094F8B200012801D019 ++:10A2D0000C2070BD002005462B2101FB004181F8B8 ++:10A2E0002850401CC0B20228F6D3257084F82250B2 ++:10A2F00094F8AF0028B1F9F79EFEF9F7C9F984F890 ++:10A30000AF5084F8AE50012004F89B0FC648657129 ++:10A31000A57540F2011120F8981F8170002070BDD2 ++:10A32000C14810B5002100F8B21F01210170FFF7EC ++:10A33000C5FF002800D0FFDF36E72DE9F041BA4C19 ++:10A3400007460C2594F8B200012805D094F8B20015 ++:10A35000022801D00C20B9E5F9F722FBF9F7FCFA45 ++:10A3600094F8980028B994F8990010B994F89A00D4 ++:10A37000F0B300F059FC08B1052104E094F8A00006 ++:10A38000022804D10321A848E430FFF713FF94F812 ++:10A39000AC0010B994F8AD0038B3F7F729FD0546C5 ++:10A3A000D4F8A8002946A434F8F730FAA04990FB65 ++:10A3B000F1F601FB160041422846F7F722FA6060E9 ++:10A3C000206830442060FEF785FC54F8A4198842C8 ++:10A3D0000BD80020C4E9290594F8AD0010B1012084 ++:10A3E000FEF760FD0120FFF7A3FD94F8911000E057 ++:10A3F00009E08D489230F9F733FB94F8B20000255C ++:10A40000012805D006E094F8B200022814D001E03B ++:10A4100000F06EFC94F89B0090B1FEF7F0FC8248CF ++:10A42000BC30FEF722FD84F8AF008248C4F8B47057 ++:10A43000F9F778FD284649E5012084F8B20089E75C ++:10A44000FEF7A8FCEBE770B5774C94F8B200022851 ++:10A4500001D00C2070BD012084F8B900A4F8BA0026 ++:10A460000220F9F774FD7348801DF9F73DFB0020C9 ++:10A47000032304F1980100BF94F8B120521CB2FBF1 ++:10A48000F3F503FB152284F8B120525C012A07D0B2 ++:10A49000401CC0B20328EFD3FFF7D2FD002070BDEF ++:10A4A000644994F8B100C91C085CF9F727FBF9F777 ++:10A4B00053FAF1E72DE9F0415B4C054616460F468D ++:10A4C00094F8900000F094FB50B14DB9384600F07C ++:10A4D00088FB3146FEF702FC082801D00120F5E494 ++:10A4E00094F8900000F07DFBBDE8F041FAF7F5B874 ++:10A4F0004D4810B590F8900000F073FBBDE8104097 ++:10A50000FAF7EBB8484981F890007047464981F85E ++:10A51000AE00704770B5444C14F8900F00F061FB2A ++:10A520004149607092310D46FAF7C1F8207800F089 ++:10A530005FFB607760782946903C00F061FB28B9AA ++:10A5400094F89100294600F064FB00B1012084F8E2 ++:10A55000AC0018B994F8AD0000280ED0002044F8E3 ++:10A56000A40FF7F745FC6060607A10B10020FEF799 ++:10A5700099FCBDE870400020DAE470BD38B10228D3 ++:10A5800005D00022284901F89B2F887170470122CD ++:10A59000F8E770B5244C15460E46002816D04FF04B ++:10A5A000000100BF84F89B1084F8A2004FF008005F ++:10A5B00084F8A30013D1304600F013FB2946FEF7C0 ++:10A5C0008DFB84F8A300082803D008E04FF00101B8 ++:10A5D000E8E7304600F00CFB08B1122070BD002007 ++:10A5E00070BD114A032801D1C2F89C1082F8A00066 ++:10A5F0000020704710B500F017FB0B4920B191F80F ++:10A60000A20001280DD00BE091F8A000012801D094 ++:10A61000022805D191F8A100012803D0032801D018 ++:10A620000020C1E50120BFE5FC0F002058010020FB ++:10A6300040420F006DEF010010B500F061FBFB4CD4 ++:10A6400094F8AF0030B1F9F7F6FCF9F721F80020E3 ++:10A6500084F8AF0000F04CFB0020A5E5F34981F839 ++:10A66000B300704700F057BB2DE9F05FEF4CFF21BE ++:10A67000002684F8B010002873D004F1BC00FFF766 ++:10A6800030FA28B904F1BC00FFF742FA0028F3D0F1 ++:10A6900094F8B200E54DE64FBC3505287ED2DFE8E0 ++:10A6A00000F07D7D7D03FD00E048BC30FFF758F9E8 ++:10A6B000B87094F89B0010B9F9F70EFA08B10126AA ++:10A6C00000E0002694F8AF0070B1FEF749FB84F873 ++:10A6D000B0000146FF280BD0E81CFEF735FB94F8CC ++:10A6E000B000FEF747FB064394F8B000FF2811D1F5 ++:10A6F000FEF7B0FB84F8B00094F89B1051B1082825 ++:10A7000008D12878E91CC0F38010FEF7E7FA082882 ++:10A7100000D00026B878072872D2DFE800F0237E48 ++:10A7200004717171130000F00BFB46B194F8A000A6 ++:10A73000012801D0022802D1F9F7C6FB0CE0F9F795 ++:10A74000C3FB82E100F0FCFA002EF8D094F8A000E0 ++:10A75000022838D00128F2D1B448BC30FFF735FCCC ++:10A7600073E178E100F0ECFA002EE8D094F8A00054 ++:10A77000022828D00128EFD000F056FA88B3D4F888 ++:10A780009C10E8788A7E904224D12879CA7E904233 ++:10A7900020D168790A7F90421CD100E059E1A87964 ++:10A7A0004A7F904216D1E8798A7F904212D1287A66 ++:10A7B000CA7F90420ED128784A7EC0F38010904222 ++:10A7C00008D1012007E09948BC30FFF7FEFBBDE847 ++:10A7D000F05F91E4002094F8A220012A02D080B119 ++:10A7E000ADE017E0002814D190481A31BC30FFF7D3 ++:10A7F000C1F88E48BC30FFF7D8F8D4F89C109DE023 ++:10A8000033E194F8A300082899D094F8B01081425D ++:10A8100095D194E0FFDFBDE8F09F00F091FA94F845 ++:10A82000AD00A0B10020804680492878C5310027BE ++:10A83000AA46C0098B4600F0ECF9054600F0F4F991 ++:10A8400038B194F89B0020B194F8A30003E00120F4 ++:10A85000E9E794F8B000FEF74CFA5FEA00090BD084 ++:10A860001021FEF793FD08B14FF0010825B15946BC ++:10A870004846F9F73FFF074600F0D6F988B3D4F809 ++:10A880009C109AF8032050468B7E9A421ED1027982 ++:10A89000CB7E9A421AD142790B7F00E068E09A425F ++:10A8A00014D182794B7F9A4210D1C2798B7F9A4220 ++:10A8B0000CD1027ACB7F9A4208D19AF80000497EE7 ++:10A8C000C0F38010884201D1012500E0002594F8F2 ++:10A8D000B000082806D094F8A310884202D10120C5 ++:10A8E00001E030E0002081462FB9B8F1000F04D01C ++:10A8F000F9F7BEF808B1012000E000204EB194F84D ++:10A90000A210012903D021B955EA090101D0012182 ++:10A9100000E0002108423FF412AF94F8A2000128A1 ++:10A920000DD165B954F89C1F40481A31BC30FFF76F ++:10A9300021F83E48BC30FFF738F821684876BDE87A ++:10A94000F05FFFF7F9BBF9F7BFFA26B1F9F790F816 ++:10A9500038437FF4F3AE94F8A100032801D0022815 ++:10A9600073D1EDB3E7BB3148BC3000F07EF96CE049 ++:10A970002E48BC30FEF7F4FFB8702C48E978E4307C ++:10A98000427A91421CD12979827A914218D169790F ++:10A99000C27A914214D1A979027B914210D1E9790E ++:10A9A000427B91420CD1297A827B914208D129784D ++:10A9B0000078C1F38011B1EBD01F01D1012500E077 ++:10A9C0000025F9F781FAB878042834D195B300F05E ++:10A9D00034F994F8B80010B10020FFF737FC00E01C ++:10A9E00033E0012584F8B850104E94F85300BC367B ++:10A9F00058BB042084F8550001213046FFF7BAFA0D ++:10AA0000A6F15E013046FFF732F884F85D001F289A ++:10AA100002D91F2084F85D0004487D3000F019F948 ++:10AA200084F85350042000F0FAFE0EE0FC0F0020E2 ++:10AA300058010020FFE700F000F994F8B80010B9C1 ++:10AA40000120FFF703FC84F8B860BDE8F05FFFF772 ++:10AA5000F7BAFFDFDFE694F8B2000528FAD2DFE8A4 ++:10AA600000F0030303040700D5E600F069F966E689 ++:10AA700000F0E3F894F8B80010B90120FFF7E6FB06 ++:10AA800084F8B8605BE62DE9F041B34C94F8B2006D ++:10AA900007287DD2DFE800F07F7F7F7F7F041100F1 ++:10AAA000AD48BC30F9F756FAF9F7DBFA9620F9F71A ++:10AAB00076FA042084F8B2004DE400F021F900F0A9 ++:10AAC00017F9207800B1FFDF0025A570D4F89C00AD ++:10AAD000A14F0188A180418861838188A183C088BA ++:10AAE000E08384F8205094F8AD00E437A7F16406C1 ++:10AAF00030B13878F91CC0F3801000F08AF848B9FA ++:10AB000094F8AE0070B13878F91CC0F3801000F0F2 ++:10AB100077F838B1D6F86700C4F80E00B6F86B00C5 ++:10AB2000608202E0C4F80E50658294F8AF0018B15C ++:10AB3000F8F7C9FD012819D0D4F89C00417EE171D5 ++:10AB4000D0F81A10A160C08BA081834845610583AD ++:10AB500001202070D4F89C000088F5F74BF9F4F739 ++:10AB6000E3FDBDE8F041022000F059BEF8F7CDFD4D ++:10AB7000794AE11D0832FEF7D0F800B9FFDFE0792D ++:10AB800040F00200E07156F83F0F6061B08800E0CD ++:10AB900001E02083DCE7FFDF4DE410B56E4C94F854 ++:10ABA000B200052819D2DFE800F0181818140300C5 ++:10ABB00000F043F894F8B80010B90120FFF746FB05 ++:10ABC000002084F8B800F9F77FF9BDE81040FFF7DE ++:10ABD00037BABDE8104000F09EB822E5012200F02F ++:10ABE00058BE18B1022801D00120704700207047DC ++:10ABF000022803D0032801D00020704701207047AD ++:10AC0000012802D14879800901D000207047012035 ++:10AC10007047012806D148790121B1EB901F01D17D ++:10AC200001207047002070474B4890F8A00003288F ++:10AC300001D0002070470120704710B54748F9F750 ++:10AC40001BFA10B945497F200870BDE81040F9F79C ++:10AC5000FEB930B5414C054620787F2800D1FFDF92 ++:10AC6000207828707F20207030BD2DE9F0413A4CCB ++:10AC7000074694F87E00002839D1012684F88060C8 ++:10AC800094F8AF0004F1820518B1F8F71CFD012813 ++:10AC90001DD03846FEF789FE84F8810029463846E3 ++:10ACA000FEF768FE3846FEF78BFE84F888002A49D6 ++:10ACB000384689317E34FEF769FE27488F30FFF72A ++:10ACC000C8FF2670BDE8F041032000F0A8BDF8F7EA ++:10ACD0001CFD21492A468131FEF71FF800B9FFDF2C ++:10ACE00094F8810040F0020084F88100DAE7E3E69E ++:10ACF0001948012180F8B810022180F8B21070477D ++:10AD000010B5F9F77DF9F9F76EF9F9F7DDF8BDE857 ++:10AD10001040F9F70DB910B5FFF7F2FF0E4C94F89B ++:10AD2000AF0030B1F9F787F9F8F7B2FC002084F8EA ++:10AD3000AF00FFF7DDFFBDE81040002000F06FBD61 ++:10AD4000054810B590F8AF0018B1F9F774F9F8F7A5 ++:10AD50009FFCBDE8104070E7FC0F00205801002068 ++:10AD6000D0F8D81049B1D0E937231A448B691A4476 ++:10AD70008A61D0E93512D16003E0FE4AD0F8D410E0 ++:10AD80005161D0E9351009B1086170470028FCD045 ++:10AD900000218161704770B505460C461046F9F7F1 ++:10ADA0006DFB4FF47A71022C0CD0F34A4FF4C86358 ++:10ADB0001A44104400F23F60B0FBF1F0284400F563 ++:10ADC000C97070BDED4A0B46F2E72DE9FF4F06460C ++:10ADD0000C46488883B040F2E24148430190E08A43 ++:10ADE000002500FB01FA94F8630017460D2822D0D5 ++:10ADF0000C2820D024281ED094F8640024281AD0CF ++:10AE000000208346069818B10121204602F023FA5B ++:10AE100094F8512094F85200009094F8C81091468C ++:10AE20004FF47A7849B1012951D0022937D003294A ++:10AE30004DD0FFDF96E00120E3E707B9FFDFCD4FFC ++:10AE4000786800B9FFDF14F8510FF9F724FB454685 ++:10AE500000F2E730B0FBF5F17868B8460F182078BB ++:10AE6000F9F719FB024614F85109022814D0C24818 ++:10AE70004FF4C8610844104400F2E730B0FBF5F12C ++:10AE8000D8F81000411A01EB0A00C519012084F816 ++:10AE9000C80005F2E64564E0B8482946EAE7DFF86D ++:10AEA000D482791ED8F80400084300D1FFDFB448EB ++:10AEB000016801EB0A0537B1D8F8040000F222302E ++:10AEC000A84200D9FFDF032084F8C80049E094F8C5 ++:10AED0006310019D242903D094F86410242933D1F0 ++:10AEE000B4F85810B4F8EA30C91A491C09B200295C ++:10AEF0002ADB94F8E81039B3894694F8E91001B1D7 ++:10AF000008460090022A13D09B484FF4C8610844B9 ++:10AF1000B9F1020F0FD098494FF4C862114488422A ++:10AF20000CD9401A00F5FA70B0FBF8F005440BE0BC ++:10AF300092484146EBE791494246EFE7081A00F58F ++:10AF4000FA70B0FBF8F02D1A5FB18A4F786810B92B ++:10AF5000788800B1FFDF786800F22230A84200D97B ++:10AF6000FFDF05B9FFDF2946D4F8CC00F6F749FC2E ++:10AF7000C4F8CC00B060002030704FF0010886F8B3 ++:10AF80000480204602F0C3F9ABF10101084202D16E ++:10AF900086F8058005E094F8C80001282FD003202A ++:10AFA0007071606A4946009AFFF7F5FEF0600698F6 ++:10AFB00030EA0B0020D029463046FEF7B2FA87B2BD ++:10AFC000204602F0A4F9B8420FD8074686F805805B ++:10AFD00005FB07F1D4F8CC00F6F713FCB060294666 ++:10AFE0003046FEF79EFA384487B23946204602F0D2 ++:10AFF00032F9B068C4F8CC0007B0BDE8F08F022089 ++:10B00000CEE72DE9F04106460C46012000F05FFC3A ++:10B01000C5B20B2000F05BFCC0B2854200D0FFDF60 ++:10B020000025082C7DD2DFE804F004525A5A56BDA0 ++:10B03000BD7F304600F05AFC0621F4F7A9FD04005C ++:10B0400000D1FFDF304600F051FC2188884200D05B ++:10B05000FFDF94F8C80000B9FFDF204601F098FF39 ++:10B06000444E21460020756075803561FEF795FAE3 ++:10B0700000F19807606AB84216D994F85200F9F7BF ++:10B08000FDF994F8512001464FF47A70022A1BD042 ++:10B09000394A4FF4C8631A44114401F23F61B1FBCD ++:10B0A000F0F1606A0844C51B21460020B560FEF738 ++:10B0B00074FA618840F2E24251439830081AA0F2D3 ++:10B0C0002230F060BDE8F0812C4A0346E3E7BDE89A ++:10B0D000F04101F0C5BFBDE8F041F9F711B96FF0DB ++:10B0E000040000F0F4FBC4B2192000F0F0FBC0B281 ++:10B0F000844200D0FFDF304600F0F8FB0621F4F771 ++:10B1000047FD040000D1FFDF304600F0EFFB21884F ++:10B11000884200D0FFDF2046BDE8F0410122002137 ++:10B1200000E03FE000F0EBBB304600F0DFFB062123 ++:10B13000F4F72EFD040000D1FFDF304600F0D6FB0F ++:10B140002188884200D0FFDF94F8C800042800D08E ++:10B15000FFDF84F8C85094F8D2504FF6FF76202DC8 ++:10B1600000D3FFDF03483C3020F8156094F8D2008C ++:10B1700008E0000008110020A22402006836020046 ++:10B1800064010020F6F715FE00B9FFDF202084F8E7 ++:10B19000D2002046FFF7E4FDFE480078BDE8F0410C ++:10B1A000F0F7B0BBFFDF8DE72DE9F047FA4C06461C ++:10B1B000E08B6568401CE08320784FF00008A8B160 ++:10B1C000042815D005282DD0FFDF29462069F6F781 ++:10B1D00018FBB06086F8008001203071A06800F58F ++:10B1E000B370F0602078042824D028E0FFDFECE77B ++:10B1F0000029EAD02F46D4F8109000F001FC050099 ++:10B200000ED0287800B9FFDF696968684A460844AB ++:10B21000394600F0E1FB0546B842D6D9FFDFD4E756 ++:10B220004546D2E70029D0D0A06900F085FB40F662 ++:10B23000B835CAE7E08B0A2801D2032000E00220DB ++:10B240007071E08B012806D930466168FEF769F914 ++:10B25000E18B0844E083B0682061BDE8F0872DE908 ++:10B26000FF4107460E46012000F031FBC4B20B201F ++:10B2700000F02DFBC0B2844200D0FFDF002501208A ++:10B28000C54C082E52D2DFE806F004172D2D2951A7 ++:10B29000514560732073607800280BD1BE48183880 ++:10B2A000456005612573A068C138FFF746F800289E ++:10B2B00000D0FFDFBDE8FF81617841B1207B08B994 ++:10B2C000FFF7BAF96573BDE8FF41F6F79DBCA073BF ++:10B2D000FFF7B9F80028EDD0FFDFEBE7BDE8FF414D ++:10B2E000F9F70EB86FF0040000F0F1FAC4B21920BB ++:10B2F00000F0EDFAC0B2844200D0FFDF00216846C2 ++:10B30000FFF752FF69463846F6F7BAFF0028D1D159 ++:10B31000FFDFCFE72078052800D0FFDF207F00B9CE ++:10B32000FFDF2577BDE8FF4100F0FABAFFDFC1E794 ++:10B330002DE9F041984C00262078042804D020788C ++:10B34000052801D00C20BDE601206070607B00253F ++:10B3500038B1EFF3108010F0010F72B605D001275D ++:10B3600004E0207DF7F79EF80CE00027607B38B101 ++:10B37000A07B28B1FFF760F96573A573F6F744FC6D ++:10B3800007B962B6207DF7F7DAFA207F28B1257772 ++:10B390002078052800D0FFDF0C26657000F0C0FA89 ++:10B3A00030468FE67C4810B5007808B1FFF7C0FF43 ++:10B3B00000F02FFB784900201839486110BD10B506 ++:10B3C000744C58B1012807D0FFDFA06841F66A012C ++:10B3D000884200D3FFDF10BD40F6C410A060F4E740 ++:10B3E0006C4910B508706C490020087048700877E7 ++:10B3F000087348738873202288610A751839487069 ++:10B40000654A4FF6FF71243222F81010401CC0B27A ++:10B410002028F9D30020FFF7D2FFBDE81040C1E794 ++:10B4200070B50D465C4C40F27121484360600120CC ++:10B43000F9F724F84FF47A7100F2E730B0FBF1F03D ++:10B4400040F2712101FB0501A1606068A0F2F620C5 ++:10B45000814200D9A06070BD2DE9FF414E4C0546E8 ++:10B46000164620780F4610B10C2004B02AE695F855 ++:10B47000522095F85110686A00F00DFBC5F8DC0009 ++:10B48000A56195F8C80000B1FFDF31463846FFF7E7 ++:10B49000C7FF4149002018390861052121706070FB ++:10B4A0002077E0833D48F6F72AFC2075202800D15C ++:10B4B000FFDFF6F79DFC206101216846FFF774FE6F ++:10B4C000207D6946F6F7DCFE00B9FFDF0020CCE7FF ++:10B4D000314810B5007808B1002010BD0620F4F7FF ++:10B4E000F1FA80F0010010BD1FB52B4C227812B18B ++:10B4F0000C2004B010BDFFF793FF00206070042102 ++:10B500002170E0832548F6F7FAFB2075202800D14A ++:10B51000FFDF00F075FA10B1F6F76AFC05E0F6F708 ++:10B5200067FC40F6B831F6F76CF9206101216846F6 ++:10B53000FFF73AFE207D6946F6F7A2FE00B9FFDF6D ++:10B540000020D6E770B5144CA1690160FFF7F0FE4A ++:10B55000050002D1A069FFF703FC0020A061284686 ++:10B5600070BD7FB50C4C2078052802D00C2004B0AB ++:10B5700070BDA06900B9FFDFA06990F8C80000B1F4 ++:10B58000FFDFA06990F8D200202800D0FFDF044838 ++:10B5900008E0000060010020201100205FB20100DF ++:10B5A00003B00100F6F7ABFBA1690546202881F83E ++:10B5B000D2000E8800D3FFDFFC4820F81560A06998 ++:10B5C00090F8D200202800D1FFDF00230122684636 ++:10B5D000A169FFF7FAFBA069694690F8D200F6F777 ++:10B5E0004FFE00B9FFDF0020A061C0E7EF493C3902 ++:10B5F0004870704710B540F2E24300FB03F40020AE ++:10B6000000F049FA844201D9201A10BD002010BD73 ++:10B6100070B50D46064601460020FDF7BEFF044604 ++:10B6200096F85200F8F72AFF96F8512001464FF499 ++:10B630007A70022A14D0DE4A4FF4C8631A441144C7 ++:10B6400001F23F61B1FBF0F1708840F2712250438A ++:10B65000C1EB4000A0F22230A54204D2214603E013 ++:10B66000D44A0346EAE72946814204D2A54201D2E0 ++:10B67000204600E02846706270BDCC4910B53C39C8 ++:10B680004C68983458B101280CD002280DD0FFDF47 ++:10B69000C64824388068A0420AD9012010BD04F5AC ++:10B6A000BC74F5E704F53174F2E704F5B074EFE724 ++:10B6B000002010BD10B5BD4C3C3C607828B1D4E9E9 ++:10B6C00002016268FDF757FFA060D4E901018842DA ++:10B6D00001D8207808B1002010BD012010BD10B5A0 ++:10B6E0000446012903D1B1483C38007830B1042028 ++:10B6F00084F8C800BDE81040F6F786BA00220121A0 ++:10B70000204600F0FCF834F8580F401C2080F1E788 ++:10B710002DE9F0410120F8F7B1FEA749A34C0844F8 ++:10B720004FF47A71B0FBF1F0243CA4F118062169C2 ++:10B73000726811440A1AA06940F2E24102F2DE6224 ++:10B740004788C8304F437169814208D03946206A22 ++:10B7500000F042F90546B84202D9FFDF00E00025BB ++:10B7600096488068854207D2A16940F271224888D4 ++:10B77000424305EB420504E040F2E240B5FBF0F045 ++:10B78000A169C882A06905214175C08A6FF41C7146 ++:10B79000484305EB400040F635413061B0EB410FC6 ++:10B7A00000D3FFDF8EE410B5052936D2DFE801F0C3 ++:10B7B0000509030D3100002100E00121BDE8104022 ++:10B7C0008DE7032180F8C81010BD0446408840F280 ++:10B7D000E24148437949091D0860D4F8F000008926 ++:10B7E000E082D4F8F00080796075D4F8F0004089E8 ++:10B7F0006080D4F8F0008089A080D4F8F000C0897F ++:10B80000E0802046A16AFFF703FF022084F8C80009 ++:10B8100010BD816ABDE81040FAE6FFDF10BD7FB5BC ++:10B82000624C0025243C052830D2DFE800F00312EA ++:10B830001528280000F035F96078D8B9002168464D ++:10B84000FFF7B2FC207D6946F6F71AFD90B9FFDFDD ++:10B8500010E0BDE87F405BE700F023F9012020778E ++:10B86000A0692169C0F8CC1080F8C850FFF779FEB4 ++:10B8700000B1FFDFF6F7C8F96573A5737FBD4F48C8 ++:10B88000007804B0BDE87040F0F73CB8FFDF7FBD42 ++:10B89000704770B5454D04463C3D91B1012910D02B ++:10B8A000022901D0FFDF70BD6888401C6880104607 ++:10B8B000F8F7F1FD4FF47A7100F2E730B0FBF1F0E8 ++:10B8C000201A686070BD3948243800787047002815 ++:10B8D00006DA00F00F0000F1E02090F8140D03E00C ++:10B8E00000F1E02090F800044009704710B50446CC ++:10B8F000202800D3FFDF2D4830F8140010BD1FB5FD ++:10B9000013460A46044601466846FFF75EFA94F875 ++:10B91000D2006946F6F7B4FC002800D1FFDF1FBD56 ++:10B9200070B5224C0025243C2570207DF6F741FAA5 ++:10B9300000B9FFDF257570BD2DE9F041050000D18C ++:10B94000FFDF1A4A00243C3AD5F8DC602046631E2B ++:10B95000516908E08869B04203D3984201D2034696 ++:10B960000C460846C9680029F4D104B904460021F0 ++:10B97000C5F8D840C8351CB3E068E560E86000B1A0 ++:10B9800005612E698846A96156B1B06930B16F6909 ++:10B99000B84200D2FFDFB069C01BA861C6F81880AA ++:10B9A000024D243DACB1207870B90CE04411002068 ++:10B9B000A224020068360200C92E020060010020A5 ++:10B9C000E9605561DDE7FFDF61696068084428626E ++:10B9D000B9E4C5F82080B6E410B50C46014610461F ++:10B9E000F6F714FF002806DA211A491E91FBF4F13C ++:10B9F00001FB040010BD90FBF4F101FB140010BD2D ++:10BA00002C484169002001E00846C9680029FBD1A3 ++:10BA100070472DE9FE43274D0120287000264FF680 ++:10BA2000FF7420E00621F4F7B3F8070000D1FFDF30 ++:10BA300097F8D200C837F6F782FF07F80A6BA146DD ++:10BA400017F8D289B8F1200F00D3FFDF194A3C3232 ++:10BA500022F8189097F8D200F6F7ABF900B9FFDF9B ++:10BA6000202087F8D20069460620F4F71AF850B172 ++:10BA7000FFDF08E0029830B190F8C81019B10088D3 ++:10BA8000A042CFD104E06846F3F7E9FF0028F1D0E7 ++:10BA90002E70BDE8FE8310B5FFF77DF900F5C87084 ++:10BAA00010BD044900201831C88303480078EFF71F ++:10BAB00029BF00000811002060010020012806D0E5 ++:10BAC000022807D0042808D0082808D105E0012959 ++:10BAD00007D004E0022904D001E0042901D00020AD ++:10BAE000704701207047FE48806890F8861029B1A1 ++:10BAF000B0F88210B0F88420914215D290F88A10E4 ++:10BB000029B1B0F88810B0F8842091420CD2B0F876 ++:10BB10008020B0F87E108A4206D290F86720B0F8F4 ++:10BB20007C001AB1884203D3012070470628FBD25B ++:10BB3000002070472DE9F041E94D0746A86800F163 ++:10BB4000580490F8EC0030B9A27B00230121204674 ++:10BB5000FDF78BFC10B1208D401C208501263D2176 ++:10BB6000AFB92878022808D001280AD06878C8B16F ++:10BB700010F0140F09D01E2039E0162037E0A67609 ++:10BB80003EE0A86890F8EE0031E0020701D5E176CA ++:10BB9000F5E7810701D02A2029E0800600D4FFDFE5 ++:10BBA000232024E094F82E0028B1608D411C61858B ++:10BBB000A18D884213D294F8320028B1208E411C06 ++:10BBC0002186A18D88420AD2218DE08C814203D347 ++:10BBD000AA6892F8EC2012B9A28D914201D32220DA ++:10BBE00005E0E17B29B1A18C814207D30820E076F2 ++:10BBF000C5E7A08C062801D33E20F8E7A07EB0B1AF ++:10BC00000020E0722073E0730221A868FFF7CBFDEB ++:10BC1000A86890F8C310012904D1D0F8F41008786E ++:10BC2000401E0870E878BDE8F041EFF76BBEA868E9 ++:10BC3000BDE8F0410021FFF7B6BDA9490C2889688D ++:10BC400081F8C30014D0132812D0182810D0002275 ++:10BC500011280ED007280BD015280AD0012807D0AC ++:10BC6000002805D0022803D021F8822F0120087176 ++:10BC70007047A1F88820704710B5994CA1680A88D0 ++:10BC8000A1F8362181F8340191F8510001F077FBD9 ++:10BC9000A16881F8380191F8520001F070FBA168A9 ++:10BCA00081F83901012081F83201002081F8060174 ++:10BCB000E078BDE81040EFF725BE10B5884C0421B0 ++:10BCC000A068FFF770FDA06890F84E10012912D00F ++:10BCD00000F5867102884A81028E8A81828ECA812D ++:10BCE000428E0A82C08E488201200872E078BDE848 ++:10BCF0001040EFF707BE022180F84E1010BD70B55E ++:10BD00007748806890F84E20448EC38E418FB0F8FB ++:10BD10004050022A23D0A94200D329460186C18F70 ++:10BD2000B0F84220914200D311468186018FB0F8CD ++:10BD30004420914200D311464186818FB0F84620BD ++:10BD4000914200D31146C186418EA14200D90C46D2 ++:10BD50004486C18E994200D90B46C38670BD028EBF ++:10BD6000914200D31146C68F828E964200D232464F ++:10BD7000A94200D329460186B0F842108A4200D376 ++:10BD80000A468286002180F84E10CFE770B5544CE9 ++:10BD900000231946A06890F863205830FDF765FB32 ++:10BDA00000283DD0A06890F8F8100025C9B3A1691B ++:10BDB0000978B1BB90F86400FDF74AFB88BBA16825 ++:10BDC000B1F858000A282DD905220831E06902F09F ++:10BDD00050FD10B3A068D0F8F410087858B10522CF ++:10BDE000491CE06902F045FD002819D1A068D0F88F ++:10BDF000F400007840B9A068E169D0F8F4000A685E ++:10BE0000C0F8012009794171A068D0F8F4000178E8 ++:10BE1000491C01700120FFF710FFA06880F8F8505E ++:10BE200070BDFFE7A06890F8FC1011B190F8FD100C ++:10BE300009B390F806110029F2D090F807110029F3 ++:10BE4000EED190F86400FDF703FB0028E8D1A0686C ++:10BE500090F8081190F85100FFF730FE48B3A06841 ++:10BE600090F8091190F85200FFF728FE08B3BDE8DA ++:10BE70007040002000E7B0F8FE10A0F84010B0F8C5 ++:10BE80000011A0F84210B0F80211A0F84410B0F868 ++:10BE90000411A0F8461080F8FC5090F864001D28AA ++:10BEA00001D0142006E001F07CFAA06880F864500C ++:10BEB000B6E71620BDE87040BFE610B5F6F7F4FF10 ++:10BEC0000C2817D3064C0821A068D0F8F0001E30CB ++:10BED000F6F7EEFF48B1A0680421B83002E0000098 ++:10BEE0006C010020F6F7E4FF00B9FFDFBDE8104069 ++:10BEF0000320A2E610BD10B5F94CA068D0F8F010F0 ++:10BF00000A78002A1FD04988028891421BD190F8F4 ++:10BF10006320002319465830FDF7A7FA002812D0F5 ++:10BF2000A068D0F8F0100978022907D003290BD0B7 ++:10BF3000042917D0052906D108200DE090F86400E7 ++:10BF4000FDF786FA40B110BD90F8681039B190F84D ++:10BF5000690000B9FFDF0A20BDE810406DE6BDE8CA ++:10BF60001040AAE790F88E008007ECD10C20FFF774 ++:10BF700064FEA068002120F8821F01210171017B6D ++:10BF800041F00101017310BD38B5D54CA268B2F87B ++:10BF90005120ADF80020FDF79BFB9DF80030C2B2A8 ++:10BFA0000021934203D0A36883F8E82002E0A2684E ++:10BFB00082F8E8109DF80120C0F30720824203D0E8 ++:10BFC000A16881F8E90038BDA06880F8E91038BDA3 ++:10BFD00038B5C34DA86890F8C310FF2953D16978CC ++:10BFE000002950D190F86620002301215830FDF738 ++:10BFF0003CFA002847D1A86890F8EC1009B102205B ++:10C00000ACE090F86320002319465830FDF72DFA74 ++:10C0100028B1A86890F87A0008B112209EE0A868BC ++:10C02000002490F86320122A1DD004DC032A21D0BA ++:10C03000112A04D119E0182A1AD0232A24D0002367 ++:10C0400004215830FDF711FA00281CD1A86890F897 ++:10C05000641019296FD01EDC01292FD002293AD093 ++:10C0600003291CD125E00B2078E0BDE8384024E707 ++:10C07000062073E010F8C21F81700720FFF7DDFD76 ++:10C08000A86880F8634038BD1820FFF7D6FDA8687F ++:10C09000A0F8824038BD1E2921D021293ED0FFF7CB ++:10C0A0002AFFA86890F8C300FF28F3D1BDE8384004 ++:10C0B0006CE610F8C11FC170072053E00C20FFF799 ++:10C0C000BCFDA86820F8884F817941F00101817199 ++:10C0D00000F8244C38BD1320FFF7AFFD1AE090F8AC ++:10C0E000FD100029F6D190F8FC1089B1B0F8FE10CF ++:10C0F000A0F84010B0F80011A0F84210B0F80211FA ++:10C10000A0F84410B0F80411A0F8461080F8FC40E4 ++:10C1100001F047F9A868A0F8884026E090F87B1065 ++:10C1200051B100F8E84F44701820FFF786FDA86869 ++:10C13000A0F8884038BD14E090F807110029F9D123 ++:10C1400090F806110029F5D0B0F84F10ADF80010A6 ++:10C150000099D0F80801FFF717FF1820BDE8384014 ++:10C160006BE51120FFF769FDA86880F86440E1E7FE ++:10C170005B4A0129926819D0002302290FD00329B4 ++:10C180001ED010B301282BD0032807D192F86300EA ++:10C19000132803D0162801D0182804D1704792F82C ++:10C1A000C3000028FAD0D2F8F00017E092F8C300DC ++:10C1B0000128F3D0D2F8F4100878401E08707047B8 ++:10C1C00092F8C3000328EED17047D2F8F000B2F81D ++:10C1D00058108288891A09B20029F5DB037070476C ++:10C1E000B2F85800B2F8FA10401A00B20028F6DB94 ++:10C1F000D2F8F4000178491E0170704770B504460A ++:10C2000090F8630000250C2810D00D282ED1D4F80A ++:10C21000F010B4F858008988401C884226D1D4F820 ++:10C220003C012F4E017811B3FFDF42E0B4F8580013 ++:10C23000B4F8FA10401C884218D1D4F8F400D0F8B1 ++:10C240000110A1604079207302212046FDF70BF810 ++:10C25000D4F8F400007800B9FFDF0121FF20FFF7D8 ++:10C2600087FF84F86350012084F89600D8E5218880 ++:10C27000C180D4F8F000D4F83C1140890881D4F88A ++:10C28000F000D4F83C1180894881D4F8F000D4F84B ++:10C290003C11C0898881D4F83C010571D4F83C1167 ++:10C2A00008200870D4F83C1120884880F078EFF717 ++:10C2B00029FB01212046FCF7D6FF03212046FFF78A ++:10C2C00072FAB068D0F8F0000078022800D0FFDFE2 ++:10C2D0000221FF20FFF74CFF84F86350A0E5000027 ++:10C2E0006C0100202DE9F041FF4C00260327D4F813 ++:10C2F00008C0012590B12069C0788CF8C20005FA09 ++:10C3000000F0C0F3C05000B9FFDFA06880F8637090 ++:10C31000A0F8826080F88650BDE8F08100239CF888 ++:10C32000642019460CF15800FDF79FF868B1607859 ++:10C330000028F1D12069C178A06880F8C11000F808 ++:10C34000647F868480F82650E6E76570E4E7F0B500 ++:10C35000E54C002385B0A068194690F86420583059 ++:10C36000FDF783F8012580B1A06890F863002328C9 ++:10C370000ED024280CD06846F8F746F968B100982A ++:10C3800001A9C0788DF8040008E0657005B0F0BD23 ++:10C39000607840F020006070F8E70021A06803ABEF ++:10C3A000162290F86300FDF7C3F9002670B1A0686B ++:10C3B0009DF80C20162100F8E42F4170192100F897 ++:10C3C000801C00F85A5C20F85C6CDFE72069FDF700 ++:10C3D000E1FC78B12169087900F00702A06880F8D3 ++:10C3E0004F20497901F0070180F8501090F807318B ++:10C3F0000BBB03E00020FFF775FFC7E790F806319D ++:10C40000CBB900F151035F78974205D11A788A427F ++:10C4100002D180F87B500EE000F59771028821F878 ++:10C42000022990F84F200A7190F8500048710D7061 ++:10C43000E078EFF767FAA068212100F8641F80F820 ++:10C4400026508684A2E770B5A74C00231946A06841 ++:10C4500090F864205830FDF708F828B32069FDF7FC ++:10C460007DFC30B3A5682069FDF774FC2887A568BA ++:10C470002069FDF76BFC6887A5682069FDF76CFCF7 ++:10C48000A887A5682069FDF763FCE887A0680125F7 ++:10C4900090F863101C2910D090F84E10012912D08A ++:10C4A00090F8FD1079B90BE0607840F00100607001 ++:10C4B000B6E4BDE87040002014E780F84E5002E07A ++:10C4C00090F8FC1019B11E2180F8641012E01D21B3 ++:10C4D00080F8641000F586710288CA82028F0A8390 ++:10C4E000428F4A83828F8A83C08FC8830D75E0781C ++:10C4F000EFF708FAA068002120F8881F85708FE404 ++:10C5000010B5794C00230921A06890F863205830B9 ++:10C51000FCF7ABFF48B16078002805D1A16801F8AD ++:10C520007A0F087301F8170C10BD0120607010BD60 ++:10C530007CB56D4C00230721A06890F8632058302B ++:10C54000FCF793FF38B36078002826D1694620694C ++:10C55000FDF71BFC9DF80000002500F02501A068F8 ++:10C5600080F894109DF8011001F0410180F89510B9 ++:10C5700080F88650D0F8F01000884988814200D0B9 ++:10C58000FFDFA068D0F8F0100D70D0F83C110A78E9 ++:10C5900022B1FFDF16E0012060707CBD30F8C02BB7 ++:10C5A000CA80C16F0D71C16F009A8A60019ACA601A ++:10C5B000C26F0721117030F8C01CC06F4180E07855 ++:10C5C000EFF7A0F9A06880F863507CBD70B5464CC9 ++:10C5D00000231946A06890F864205830FCF745FF06 ++:10C5E000012540B9A0680023082190F86320583045 ++:10C5F000FCF73BFF10B36078002820D1A06890F8CA ++:10C600008E00800712D42069FDF784FBA16881F8B1 ++:10C610008F00206930F8052FA1F890204088A1F8FC ++:10C62000920011F88E0F40F002000870A0684FF0E1 ++:10C63000000690F88E10C90702D010E0657037E44C ++:10C6400090F86420002319465830FCF70EFF00B91B ++:10C65000FFDFA06800F8645F80F826508684A06839 ++:10C6600090F86310012906D180F8636080F8866035 ++:10C67000E078EFF747F9A168D1F8F000098842881F ++:10C680008A42DCD101780429D9D10670E078EFF72D ++:10C6900039F9A06890F863100029D0D180F886603D ++:10C6A00006E470B5104DA86890F863101A2902D0FE ++:10C6B00002206870DAE569780029FBD1002480F84F ++:10C6C0008B4080F88640D0F8F0100088498881427D ++:10C6D00000D0FFDFA868D0F8F0100C70D0F83C1143 ++:10C6E0000A781AB1FFDF27E06C01002090F88C2057 ++:10C6F00072B180F88C400288CA80D0F83C110C716D ++:10C70000D0F83C210D2111700188D0F83C010DE0DA ++:10C7100030F8C02BCA80C16F0C71C26F0121117239 ++:10C72000C26F0C21117030F8C01CC06F418000F046 ++:10C73000AAFEE878EFF7E6F8A86880F8634095E588 ++:10C7400070B5FC4CA16891F86320162A01D0132A19 ++:10C7500002D191F88C2012B10220607086E56278D7 ++:10C76000002AFBD181F8C000002581F88B5081F8A8 ++:10C770008650D1F8F00009884088884200D0FFDF59 ++:10C78000A068D0F8F0000078032800D0FFDF032174 ++:10C79000FF20FFF7EDFCA068D0F83C110A780AB141 ++:10C7A000FFDF13E030F8C02BCA80C26F017811712F ++:10C7B000C16F0D72C26F0C21117030F8C01CC06FB8 ++:10C7C000418000F060FEE078EFF79CF8A06880F808 ++:10C7D00063504BE570B5D74C09210023A06890F851 ++:10C7E00063205830FCF741FE002518B1206900791C ++:10C7F00012281ED0A0680A21002390F86320583028 ++:10C80000FCF733FE18B120690079142814D0206990 ++:10C81000007916281BD1A06890F863101F2916D143 ++:10C8200080F8635080F88650BDE870401A20FFF70A ++:10C8300023BABDE8704063E6A06880F86350A0F8B2 ++:10C84000825080F88650BDE87040FFF736BA0DE59B ++:10C8500070B5B84C2079C00770D02069002305213D ++:10C86000C578A06890F863205830FCF7FEFD88B1C9 ++:10C87000022D0FD00B2D0DD0042D0BD0052D09D07E ++:10C88000062D07D00D2D05D0112D03D0607840F076 ++:10C89000080060706078002850D1206900250226C9 ++:10C8A000C178891E162976D2DFE801F00B75323582 ++:10C8B0004522754C7525494375757538524F686B1F ++:10C8C0006F72A0680023012190F866205830FCF7B1 ++:10C8D000CCFDF8B92069FDF7E7F9A16881F8EE0011 ++:10C8E000072081F8660081F88A5081F8865055E06B ++:10C8F000FFF770FF52E0A06890F863100F2901D095 ++:10C9000066704BE080F86850122180F8631045E0B3 ++:10C9100000F0E4FD42E000F0C0FD3FE0FDF776FAF4 ++:10C9200003283BD12069FDF775FA00BFFFF708FF28 ++:10C9300034E00079FAE7FFF7B4FE2FE036E0FFF7C6 ++:10C9400045FE2BE0FFF7F4FD28E0FFF7D9FD25E0D9 ++:10C95000A0680023194690F864205830FCF785FD44 ++:10C96000012110B16078C8B901E0617016E0A068DB ++:10C9700020F8885F817000F8246C0FE0FFF763FDFA ++:10C980000CE000F04CFD09E005E0FFF7E0FC05E0FD ++:10C9900000F011FD02E00020FFF7A4FCA068F0E920 ++:10C9A0002812491C42F10002C0E900125EE42DE9A0 ++:10C9B000F041604C2079800741D5607800283ED155 ++:10C9C000E06801270026C17820461929856805F10D ++:10C9D00058006FD2DFE801F04B3E0D6FC1C1801CE3 ++:10C9E00034C1556287C1C1C1C1BE8B9598A2B0C187 ++:10C9F000BA0095F8662000230121FCF736FD0028D7 ++:10CA00001DD1A068082180F8661080F886608EE04D ++:10CA1000002395F864201946FCF727FD10B1A068A3 ++:10CA200080F88A60A0680023194690F86320583087 ++:10CA3000FCF71BFD002802D0A06880F886606BE43C ++:10CA4000002395F863201946FCF70FFD00B9FFDFBE ++:10CA5000042008E0002395F863201946FCF705FD43 ++:10CA600000B9FFDF0C20A16881F8630054E40023C3 ++:10CA700095F863201946FCF7F8FC00B9FFDF0D209C ++:10CA8000F1E7002395F863201946FCF7EEFC00B9A6 ++:10CA9000FFDFA0680F2180F88B7008E095F8630035 ++:10CAA000122800D0FFDFA068112180F88C7080F878 ++:10CAB000631031E451E0002395F863201946FCF738 ++:10CAC000D4FC20B9A06890F88C0000B9FFDFA06802 ++:10CAD000132180F88B70EAE795F86300182800D0DE ++:10CAE000FFDF1A20BFE7BDE8F04100F076BD00236C ++:10CAF00095F863201946FCF7B8FC00B9FFDF052064 ++:10CB0000B1E785F88A6007E4002395F863201946A9 ++:10CB1000FCF7ABFC00B9FFDF1C20A4E7002395F86D ++:10CB200064201946FCF7A1FC00B9FFDFA06880F87B ++:10CB30008A6009E46C010020002395F863201946FF ++:10CB4000FCF793FC00B9FFDF1F208CE7BDE8F04144 ++:10CB500000F00BBD85F86460D3E7FFDF6FE710B529 ++:10CB6000FB4C6078002837D1207940070FD5A068AA ++:10CB700090F86300032800D1FFDFA06890F86610EA ++:10CB8000072904D101212170002180F86610FFF7E8 ++:10CB90000EFF00F0C8FCFFF75BFEA078000716D57B ++:10CBA000A0680023052190F863205830FCF75DFC55 ++:10CBB00050B108206070A068D0F83C1108780C28AB ++:10CBC00000D10020087002E00020FBF7CBFCA06839 ++:10CBD000BDE81040FFF712BB10BD2DE9F041DC4C61 ++:10CBE00007464FF0000560780843607020798106A1 ++:10CBF0002046806802D5A0F87C5004E0B0F87C1094 ++:10CC0000491CA0F87C1000F02BFD0126F8B1A0888B ++:10CC1000000506D5A06890F8691011B1A0F874500D ++:10CC200015E0A068B0F87410491CA0F8741000F06A ++:10CC300006FDA068B0F87410B0F87620914206D3D3 ++:10CC4000A0F8745080F81261E078EEF75BFE20796E ++:10CC500010F0600F08D0A06890F8671021B980F834 ++:10CC600067600121FEF79FFD1FB9FFF778FFFFF70F ++:10CC7000AFF93846FEF75EFFBDE8F041F7F7D3BCE9 ++:10CC8000B3494A788B781A430DD1012809D0087925 ++:10CC9000400704D5886890F86600072803D0012073 ++:10CCA0007047FEF707BD00207047A949C278896820 ++:10CCB000012A06D05AB1182A08D1B1F8EA10FDF7B6 ++:10CCC00085B8B1F8FA104172090A81727047D1F83B ++:10CCD000F01089884173090A8173704770B59C4CC4 ++:10CCE00005460E46A0882843A080A80703D5E8077C ++:10CCF00000D0FFDFE660E80700D02661A80719D55D ++:10CD0000F078062802D00B2814D10BE0A06890F828 ++:10CD1000631018290ED10021E0E92811012100F843 ++:10CD2000371C07E0A06890F86310122902D1002197 ++:10CD300080F86910280601D50820A070680521D563 ++:10CD4000A068B0F8581082881144891DF27889B221 ++:10CD5000012A03D02AB1182A07D00FE0A0F8FA1050 ++:10CD60000CE0D0F8F000818008E090F8E8201AB9D3 ++:10CD700090F8E92002B90021A0F8EA103046BDE899 ++:10CD8000704092E75BE43EB505466846F7F713FC52 ++:10CD900000B9FFDF2221009801F016FE0321009860 ++:10CDA000FCF70DFF0098017821F010010170294671 ++:10CDB000FCF734FF664C192D7ED2DFE805F0201811 ++:10CDC0000D3ACDCDCE1262CDCECE55CDCDCDCDBC92 ++:10CDD000CECE6C87A0CDA900A168009891F8ED1087 ++:10CDE00003E0A168009891F8C4100171B5E0A06853 ++:10CDF000D0F8F4100098491CFCF749FFADE0A16899 ++:10CE0000009851F8F02F927902710A6812894271E4 ++:10CE1000120A82710A685289C271120A02720A6881 ++:10CE200092894272120A82720968C989FCF708FF66 ++:10CE300093E0A068D0F8F0100098091DFCF736FFC9 ++:10CE4000A068D0F8F01000980C31FCF739FFA0680A ++:10CE5000D0F8F01000981E31FCF738FFA168009858 ++:10CE6000B831FCF73FFF78E06269009811780171F2 ++:10CE700091884171090A81715188C171090A017251 ++:10CE80006BE03449D1E90001CDE9010101A9009825 ++:10CE9000FCF742FF61E0A068B0F844100098FCF78E ++:10CEA00045FFA068B0F846100098FCF743FFA06863 ++:10CEB000B0F84010009800E04EE0FCF73FFFA0689B ++:10CEC000B0F842100098FCF73DFF46E0A068B0F8CB ++:10CED00040100098FCF732FFA068B0F842100098AC ++:10CEE000FCF730FFA068B0F844100098FCF71EFF74 ++:10CEF000A068B0F846100098FCF71CFF2DE0A16870 ++:10CF0000009891F80821027191F80911417124E00B ++:10CF1000A06890F8E800FCF7D5FB01460098FCF704 ++:10CF20004DFFA06890F8E900FCF7CCFB01460098A3 ++:10CF3000FCF748FF11E0A06890F8E5100098FCF7B6 ++:10CF400063FFA06890F8E4100098FCF761FF04E02C ++:10CF50006C01002078EF0100FFDFF7F741FB00B91B ++:10CF6000FFDF0098FFF7A1FE3EBDFA48806890F809 ++:10CF7000E81009B990F8511080F8511090F8E910B4 ++:10CF800009B990F8521080F852100020FEF774BED4 ++:10CF9000F8B5F04E00250446B060B5807570B570E8 ++:10CFA00035700088F7F704FBB0680088F7F729FBB5 ++:10CFB000B4F8D000B168401C82B201F15800FCF70F ++:10CFC0009AF900B1FFDF94F86400242809D1B4F87D ++:10CFD0005810B4F8EA00081A00B2002801DB707893 ++:10CFE00020B194F86300242808D015E0FFF7BDFFB6 ++:10CFF00084F86450B16881F87B500DE0B4F85810A3 ++:10D00000B4F8EA00081A00B2002805DB707818B9F5 ++:10D01000FFF7ABFF84F86350A4F8D050FEF763FD30 ++:10D0200000281CD1B06890F8C300FF2801D0FFF79A ++:10D03000AAFEC9480090C94BC94A21462846FBF7B9 ++:10D0400088F9B0680023052190F863205830FCF778 ++:10D050000CFA002803D0BDE8F840FBF71CB8F8BD77 ++:10D0600010B5FEF740FD20B10020BDE8104001469C ++:10D07000B3E5BDE81040FBF7E1B970B50C460646D4 ++:10D0800015464FF4A071204601F0C0FC268005B97A ++:10D09000FFDF286844F8F00F68686060A868E06403 ++:10D0A00084E4F2F77EBE2DE9F0410D4607460621E5 ++:10D0B000F2F76EFD040040D0D4F83C110026087849 ++:10D0C00058B14A8821888A4207D108280FD00D28F4 ++:10D0D0001BD00C2829D0072843D094F81201E0B3C4 ++:10D0E0006E700F20287084F812616F80ADE06E7052 ++:10D0F00008202870D4F83C014168C5F80210816806 ++:10D10000C5F806108089688139E00846F2F772FE9A ++:10D110000746F2F71EFB78B96E700D202870D4F820 ++:10D120003C014068C5F8020012E00846F2F762FED2 ++:10D130000746F2F70EFB08B1002080E46E700C2069 ++:10D140002870D4F83C014168C5F802100089E880D5 ++:10D15000D4F83C010670384600E014E0F2F7F3FA28 ++:10D1600073E06E7007202870D4F83C014168C5F860 ++:10D1700002108168C5F80610C068C5F80A00D4F826 ++:10D180003C01067061E094F81401A8B16E7014209F ++:10D1900028700CE084F81461D4F81601C5F8020078 ++:10D1A000D4F81A01C5F80600B4F81E01688194F895 ++:10D1B00014010028EED148E094F8200180B16E708F ++:10D1C0001A20287084F82061D4F82201C5F80200E2 ++:10D1D000D4F82601C5F80600B4F82A01688134E0C5 ++:10D1E00094F82C0148B16E701B20287084F82C61D3 ++:10D1F000D4F82E01C5F8020027E094F80C0170B1B4 ++:10D200006E701820287005E084F80C61D4F80E01C7 ++:10D21000C5F8020094F80C010028F5D115E094F847 ++:10D220003201002889D06E701520287009E000BFF7 ++:10D2300084F83261D4F83401C5F80200B4F838013A ++:10D24000E88094F832010028F2D101200EE4414A2E ++:10D250005061D170704770B50D4604464FE000BF75 ++:10D26000B4F8D000401CA4F8D000B4F87C00401CF6 ++:10D27000A4F87C00204600F0F3F9B8B1B4F87400CB ++:10D28000401CA4F87400204600F0D9F9B4F87400EA ++:10D29000B4F87610884209D30020A4F87400012065 ++:10D2A00084F812012B48C078EEF72CFB94F8860026 ++:10D2B00020B1B4F88200401CA4F8820094F88A00DF ++:10D2C00020B1B4F88800401CA4F8880094F8EC0061 ++:10D2D00040B994F866200023012104F15800FCF7BE ++:10D2E000C4F820B1B4F88000401CA4F880002046A7 ++:10D2F000FEF784FFB4F85800401CA4F858006D1ED7 ++:10D30000ADB2ADD23EE5134AC2E90601704770B531 ++:10D310000446B0F87C0094F86710D1B1B4F87E10E0 ++:10D320000D1A2D1F94F87A0040B194F86320002361 ++:10D33000092104F15800FCF798F8B8B1B4F874600A ++:10D34000204600F08DF980B1B4F87600801B001FF4 ++:10D350000CE007E06C010020DBCB010081CC010078 ++:10D36000DDCC0100C0F10205DCE72846A84200DA66 ++:10D370000546002D01DC002004E5A8B202E510B549 ++:10D38000012808D0022808D0042808D0082806D090 ++:10D39000FFDF204610BD0124FBE70224F9E7032448 ++:10D3A000F7E710B5FEF7ABFCFEF787FCBDE81040D1 ++:10D3B0001520FEF742BC70B5B14CA06890F8630030 ++:10D3C0001F2804D0607840F001006070DAE4206922 ++:10D3D000FCF7EAFCD8B1206901220179407901F01B ++:10D3E000070161F30705294600F0070060F30F21EC ++:10D3F000A06880F886200022A0F88220232280F8EE ++:10D400006320D0F80801BDE87040FEF7BDBD0120E3 ++:10D41000FEF768FFBDE870401E20FEF72DBC70B51A ++:10D42000974C00230A21A06890F863205830FCF73D ++:10D430001CF818B32069FCF791FCA8B1A568206915 ++:10D44000FCF788FC2887A5682069FCF77FFC6887C3 ++:10D45000A5682069FCF780FCA887A5682069FCF70F ++:10D4600077FCE887FEF74BFCA168002081F8860076 ++:10D4700081F86300BDE87040FEF71FBC607840F0A3 ++:10D48000010060707EE47E4810B580680088F2F785 ++:10D49000B1FCBDE81040F2F747B910B5784CA3686D ++:10D4A00093F86300162802D00220607010BD6078E7 ++:10D4B0000028FBD1D3F8F000002200F11E010E304D ++:10D4C000A833FBF77FFFA0680021C0E926110121E6 ++:10D4D00080F86810182180F8631010BD10B5684CF2 ++:10D4E000A06890F86310132902D00220607010BD6C ++:10D4F00061780029FBD1D0F8F0100088498881427A ++:10D5000000D0FFDFA068D0F8F01020692631FCF7CA ++:10D51000F6FBA1682069BC31FCF7F9FBA168162075 ++:10D5200081F8630010BD10B5554C207900071BD55C ++:10D530006078002818D1A068002190F8C300FEF799 ++:10D5400017FEA06890F8C300FF2800D1FFDFA06895 ++:10D55000FF2180F8C31090F86610082904D1022139 ++:10D560002170002180F8661010BD70B5444D242153 ++:10D570000024A86890F86420212A05D090F8632040 ++:10D58000232A18D0FFDF8BE590F8E82012B990F835 ++:10D59000E9202AB180F86410A86880F88A407FE505 ++:10D5A00000F8644FC47590F8A2000028F4D0002061 ++:10D5B000FEF762FBF0E790F8E82012B990F8E92056 ++:10D5C0002AB180F86310A86880F8864068E580F882 ++:10D5D00063400020FEF750FBF5E770B5284C0025AE ++:10D5E000A068D0F8F01003884A889A4219D10978C7 ++:10D5F000042916D190F86320002319465830FBF710 ++:10D6000034FF00B9FFDFA06890F88E10890703D4BB ++:10D61000012180F8631004E080F88650D0F8F00013 ++:10D620000570A0680023194690F864205830FBF775 ++:10D630001CFF002802D0A06880F88A5030E5B0F8BE ++:10D640007620B0F874108A4201D3511A00E000210C ++:10D650008288521D8A4202D3012180F87A107047D5 ++:10D6600010B590F8691041B990F8632000230621A5 ++:10D670005830FBF7FAFE002800D0012010BD000052 ++:10D680006C0100202DE9F0410C4611490D68104A4B ++:10D69000104908321160A0F120012A2901D301208C ++:10D6A0000CE03E2810D040CC0B4F94E80E0007EB66 ++:10D6B0008000241F50F8807C3046B8472060044822 ++:10D6C000001D0560BDE8F0812046E3F789FDF5E720 ++:10D6D000100502400100000180EF010010B5524822 ++:10D6E00000F070FA00B1FFDF4F48401C00F06AFA0A ++:10D6F000002800D0FFDF10BD2DE9F14F4B4ED6F8CA ++:10D7000000B00127484800F065FADFF81C8128B90D ++:10D710005FF0000708F1010000F072FA444C0025A8 ++:10D720004FF0030901206060C4F80051C4F80451AF ++:10D73000009931602060DFF8FCA018E0DAF8000002 ++:10D74000C00614D50E2000F064F8EFF3108010F03E ++:10D75000010072B600D00120C4F80493D4F800117F ++:10D7600019B9D4F8041101B920BF00B962B6D4F8D0 ++:10D77000000118B9D4F804010028DFD0D4F804015E ++:10D780000028CFD137B1C6F800B008F1010000F091 ++:10D7900021FA11E008F1010000F01CFA0028B9D1CB ++:10D7A000C4F80893C4F80451C4F800510E2000F0E6 ++:10D7B00030F81D4800F024FA0020BDE8F88F2DE96C ++:10D7C000F0438DB00D46064600240DF110090DF111 ++:10D7D000200817E004EB4407102255F8271068468C ++:10D7E00001F073F805EB870710224846796801F0CD ++:10D7F0006CF86846FFF780FF10224146B86801F0D8 ++:10D8000064F8641CB442E5DB0DB00020BDE8F08391 ++:10D8100072E700F01F02012191404009800000F1F1 ++:10D82000E020C0F8801270478C01002004E5004021 ++:10D8300000E0004010ED00E0D7490020087070477C ++:10D8400070B5D64D01232B60D54B1C68002CFCD045 ++:10D85000002407E00E6806601E68002EFCD0001D44 ++:10D86000091D641C9442F5D3002028601868002824 ++:10D87000FCD070BD70B5C84E0446CA4D3078022841 ++:10D8800000D0FFDFAC4200D3FFDF7169C648012939 ++:10D8900003D847F23052944201DD03224271491C01 ++:10D8A0007161291BC160C0497078F4F7E9FC002858 ++:10D8B00000D1FFDF70BD70B5B74C0D46617888426E ++:10D8C00000D0FFDFB74E082D4BD2DFE805F04A0449 ++:10D8D0001E2D4A4A4A382078022800D0FFDF032054 ++:10D8E0002070A078012801D020B108E0A06800F0E5 ++:10D8F00043FD04E004F1080007C8FFF7A1FF05207D ++:10D900002070BDE87040F4F77FB9F4F771FA014672 ++:10D910006068F4F77BFFB04202D2616902290BD341 ++:10D920000320F5F726FA12E0F4F762FA0146606880 ++:10D93000F4F76CFFB042F3D2BDE870409AE720786C ++:10D9400002280AD0052806D0FFDF04202070BDE899 ++:10D95000704000F017B9022000E00320F5F709FA43 ++:10D96000F3E7FFDF70BD70B50546F4F741FA8A4C66 ++:10D9700060602078012800D0FFDF8B49012008700B ++:10D980000020087104208D6048718648C86002201C ++:10D9900020706078F4F774FC002800D1FFDF70BDC0 ++:10D9A00010B57D4C207808B1112010BD7F48F4F7E8 ++:10D9B000A6F96070202804D001202070002060614A ++:10D9C00010BD032010BD020B0121B0F5003F02D2B3 ++:10D9D0009140774816E0B0F5802F04D2203A744881 ++:10D9E0009140001D0EE0B0F5C02F04D2403A7048BF ++:10D9F0009140103006E0B0F5002F08D2603A6C4834 ++:10DA0000914014300068084000D001207047002089 ++:10DA100070472DE9F041144600EB84070E46054699 ++:10DA20003F1F00F0BCFC4FF080510A69504306EBE9 ++:10DA30008402121FB24201D2012200E000221CB176 ++:10DA40000969B4EB910F02D90920BDE8F081594969 ++:10DA50008D4216D3AF4214D3854205D2874203D2FA ++:10DA600045EA0600800701D01020EEE78E4208D379 ++:10DA70003AB92846FFF7A7FF18B93846FFF7A3FFC2 ++:10DA800008B10F20E1E74C484C490068884205D0B6 ++:10DA9000224631462846FFF7D3FE10E0FFF780FF0D ++:10DAA0000028D2D13C4800218560C0E90364817020 ++:10DAB0004FF4A97104FB01F01830FFF754FF002068 ++:10DAC000C3E770B54FF08055044628693949B1FB6A ++:10DAD000F0F084420AD300F062FCA04201D810208A ++:10DAE00070BD28696043FFF76EFF08B10F2070BD5D ++:10DAF000314832490068884204D02869604300F008 ++:10DB00003BFC0CE0FFF74CFF0028F0D129692248CC ++:10DB100061438160012181702948FFF724FF0020C3 ++:10DB200070BD2449090BB1EB401F07D9404201EBFE ++:10DB30004011202903D34FF0FF307047002101200E ++:10DB40008840401E704770B505460C460020FFF720 ++:10DB5000E8FF28420ED10120FFF7E3FF204209D160 ++:10DB60000220FFF7DEFF104204D10320FFF7D9FFA8 ++:10DB7000184201D00F2070BD21462846BDE87040F4 ++:10DB800000F050BE10B5044C6078F4F712F900B9FB ++:10DB9000FFDF0020207010BD9001002004E501404F ++:10DBA00000E40140105C0C0084110020B7D8010093 ++:10DBB0000006004000300200B0000020BEBAFECADD ++:10DBC0007C5E01000021017008467047014600207C ++:10DBD00008707047EFF3108101F0010172B602780E ++:10DBE000012A01D0012200E000220123037001B9C3 ++:10DBF00062B60AB1002070474FF400507047E9E761 ++:10DC0000EFF3108111F0010F72B64FF000020270B5 ++:10DC100000D162B600207047F2E700004C49096865 ++:10DC20000160002070474A490860002070470121C8 ++:10DC30008A0720B1012804D042F20400704791679E ++:10DC400000E0D1670020704742490120086042F29D ++:10DC50000600704708B504233E4A1907103230B158 ++:10DC6000C1F80433106840F0010010600BE0106848 ++:10DC700020F001001060C1F808330020C1F808014D ++:10DC8000354800680090002008BD011F0B2909D805 ++:10DC9000304910310A6822F01E0242EA4000086052 ++:10DCA0000020704742F205007047000100F18040FB ++:10DCB000C0F8041900207047000100F18040C0F84E ++:10DCC000081900207047000100F18040D0F80009D9 ++:10DCD000086000207047012801D9072070471F4ABB ++:10DCE00052F8200002680A430260002070470128B1 ++:10DCF00001D907207047194A52F8200002688A4368 ++:10DD0000026000207047012801D907207047134A9C ++:10DD100052F8200000680860002070470200104997 ++:10DD20004FF0000003D0012A01D0072070470A609D ++:10DD300070474FF080410020C1F808014FF0E0200B ++:10DD4000802180F800140121C0F800117047000004 ++:10DD500000040040000500400801004028F00100D8 ++:10DD6000780500406249634B0A6863499A42096832 ++:10DD700001D1C1F310010160002070475C495D4B87 ++:10DD80000A685D49091D9A4201D1C0F3100008607C ++:10DD9000002070475649574B0A68574908319A4244 ++:10DDA00001D1C0F3100008600020704730B5504B1F ++:10DDB000504D1C6842F20803AC4202D0142802D233 ++:10DDC00003E0112801D3184630BDC3004B48184466 ++:10DDD000C0F81015C0F81425002030BD4449454B4B ++:10DDE0000A6842F209019A4202D0062802D203E0F0 ++:10DDF000042801D308467047404A012142F83010F8 ++:10DE0000002070473A493B4B0A6842F209019A42A6 ++:10DE100002D0062802D203E0042801D30846704746 ++:10DE2000364A012102EBC00041600020704770B506 ++:10DE30002F4A304E314C156842F2090304EB800240 ++:10DE4000B54204D0062804D2C2F8001807E004281E ++:10DE500001D3184670BDC1F31000C2F800080020BD ++:10DE600070BD70B5224A234E244C156842F2090356 ++:10DE700004EB8002B54204D0062804D2D2F8000890 ++:10DE800007E0042801D3184670BDD2F80008C0F39B ++:10DE900010000860002070BD174910B508311848FF ++:10DEA00008601120154A002102EBC003C3F81015C9 ++:10DEB000C3F81415401C1428F6D3002006E00428EB ++:10DEC00004D302EB8003C3F8001807E002EB8003E1 ++:10DED000D3F80048C4F31004C3F80048401C0628D7 ++:10DEE000EDD310BD044906480831086070470000B2 ++:10DEF000B0000020BEBAFECA00F5014000F00140AB ++:10DF00000000FEFF7D4B1B6803B19847BFF34F8FA6 ++:10DF10007B4801687B4A01F4E06111430160BFF373 ++:10DF20004F8FFEE710B5EFF3108010F0010F72B6BF ++:10DF300001D0012400E0002400F0D6F850B1E3F74E ++:10DF4000E9F9F3F722FDF4F7B7FEEDF72CFC6E4983 ++:10DF50000020086004B962B6002010BD70B50C4600 ++:10DF60000646EFF3108010F0010F72B601D00125C4 ++:10DF700000E0002500F0B8F818B105B962B6082035 ++:10DF800070BDE3F743F9E3F7C9F9024600204309FE ++:10DF90009B0003F1E02300F01F01D3F80031CB40D8 ++:10DFA000D9071BD0202803D222FA00F1C90722D1B9 ++:10DFB00041B2002906DA01F00F0101F1E02191F8E8 ++:10DFC000141D03E001F1E02191F80014490908292A ++:10DFD00011D281B101290ED004290CD0401C642833 ++:10DFE000D5D3EDF7B7FB4849484808602046F5F718 ++:10DFF000A3FA60B904E005B962B641F2010070BD50 ++:10E000003E4804602EB13046F5F7E3FA18B110240B ++:10E0100029E03F4E16E03078022802D94FF48054B0 ++:10E0200021E007240028707801D0E0B908E0D0B1E1 ++:10E03000202818D8B078212815D8012813D001E05D ++:10E04000B07880B93349802081F8140DE3F766F980 ++:10E050003146F4F717FEF3F757FC00F0D3F93046DA ++:10E06000E3F72AF9044605B962B61CB1FFF75AFF77 ++:10E07000204670BD002070BD10B5044600F034F895 ++:10E0800000B101202070002010BD2349086000204D ++:10E09000704770B50C4621490D682049204E083163 ++:10E0A0000E60102807D011280CD012280FD013288A ++:10E0B00011D0012013E0D4E90001FFF74FFF3546EE ++:10E0C00020600DE0FFF72EFF0025206008E02068AB ++:10E0D000FFF7D2FF03E010492068086000202060AD ++:10E0E0000E48001D056070BD074808490068884259 ++:10E0F00001D101207047002070470000A8010020D6 ++:10E100000CED00E00400FA05B0000020BEBAFECA23 ++:10E1100030F001000BE000E0040000201005024098 ++:10E120000100000100B5744910F1080F19D00CDC92 ++:10E1300010F1280F1DD010F1140F18D010F1100F8E ++:10E1400013D010F10C0F08D10DE010F1040F06D020 ++:10E1500080B103280ED004280CD0FFDF00BDFC20C6 ++:10E1600008E0F82006E0F42004E0F02002E0EC20D3 ++:10E1700000E0D820086000BD5F4900B5091D0128F6 ++:10E1800003D0022803D0FFDF00BD032000E00420FD ++:10E19000086000BD584800B5001D016801F00F017E ++:10E1A000032905D0006800F00F00042802D0FFDF2B ++:10E1B000012000BD022000BD504930B1012803D12B ++:10E1C000086840F00100086070470868FBE72DE927 ++:10E1D000F04105461F464FF4C8604FF47A76012996 ++:10E1E00012D0022A17D046490C181846F6F746F9FD ++:10E1F00004443846F6F774F9204400F27120B0FB6D ++:10E20000F6F0281ABDE8F081022A00D1304649F61E ++:10E2100008514418E9E73B493046E5E770B5154633 ++:10E220000646012914D0022B15D0354CFA3410467D ++:10E23000F6F731F94FF47A71012D0FD04A10A21A76 ++:10E24000104400F28920B0FBF1F0301A801E70BD3E ++:10E2500049F6CA64EBE72B4C643CE7E70A46EEE775 ++:10E260002DE9F041054614464FF4C8604FF47A7624 ++:10E27000012911D0022B16D021490F181046F6F7AC ++:10E280000AF9012C12D04FF4FA71791A0844643853 ++:10E29000B0FBF6F0281AB5E7022B00D1304649F65C ++:10E2A00008514718EAE717493046E6E73146ECE7F8 ++:10E2B0002DE9F04105460C4616461046F6F7DEF805 ++:10E2C00005EB4501C1EBC51100EBC1004FF47A75B8 ++:10E2D000012C0FD0691047182046F6F7DCF8381AE1 ++:10E2E00000F60F60B0FBF5F43046F6F7BDF82044B9 ++:10E2F000401D87E72946EEE70C1500405016004008 ++:10E30000A2240200683602002DE9FE430C46804636 ++:10E31000FBF76AFC074698F80160204601A96A46A7 ++:10E32000F1F7F3F905000DD0012F02D00320BDE86D ++:10E33000FE83204602AA0199F1F709F90298B0F884 ++:10E3400003000AE0022F14D1042E12D3B8F8030000 ++:10E35000BDF80020011D914204D8001D80B2A9190A ++:10E36000814202D14FF00000E1E702D24FF00100FC ++:10E37000DDE74FF00200DAE70B4A022111600B499A ++:10E380000B68002BFCD0084B1B1D18600868002888 ++:10E39000FCD00020106008680028FCD070474FF0C7 ++:10E3A000805040697047000004E5014000E40140EE ++:10E3B00002000B464FF00000014620D0012A04D095 ++:10E3C000022A04D0032A0DD103E0012002E002203A ++:10E3D00015E00320072B05D2DFE803F00406080A46 ++:10E3E0000C0E100007207047012108E0022106E012 ++:10E3F000032104E0042102E0052100E00621F3F7F7 ++:10E400009ABC0000F648052181700021017041701E ++:10E410007047F4490A78012A05D0CA681044C860D8 ++:10E420004038F4F7C0B98A6810448860F8E70028DB ++:10E4300019D00378EC49ED4A13B1012B0ED011E04D ++:10E440000379012B00D06BB943790BB1012B09D1B2 ++:10E450008368643B8B4205D2C0680EE00379012BD0 ++:10E4600002D00BB10020704743790BB1012BF9D1D9 ++:10E47000C368643B8B42F5D280689042F2D8012099 ++:10E480007047D84910B501220A700279A2B1002262 ++:10E490000A71427992B104224A718268D04C523298 ++:10E4A0008A60C0681434C8606060F3F7A1FCCC498E ++:10E4B00020600220887010BD0322E9E70322EBE709 ++:10E4C00070B5044609B1012000E00320C54D0021CC ++:10E4D0002970217901B100202871607968B1042088 ++:10E4E000BF4E6871A168F068F3F78BF9A860E06827 ++:10E4F0005230E8600320B07070BD0320F0E72DE9D2 ++:10E50000F04105460226F4F77AF8006800B1FFDF13 ++:10E51000B34C01273DB12878B0B1012805D00228BD ++:10E5200010D0032813D027710CE06868C82807D3DF ++:10E53000F4F79FF920B16868FFF76BFF012603E04D ++:10E54000002601E000F056F93046BDE8F081207861 ++:10E550000028F7D16868FFF76AFF0028E3D06868F1 ++:10E56000017879B1A078042800D0FFDF0121686824 ++:10E57000FFF7A6FF9B49E078F3F782FE0028E1D180 ++:10E58000FFDFDFE7FFF77DFF6770DBE72DE9F0478F ++:10E59000934C8846E178884200D0FFDFDFF8409254 ++:10E5A000002501278F4E09F11409B8F1080F75D223 ++:10E5B000DFE808F0040C28527A808D95A0780328B3 ++:10E5C00002D0022800D0FFDFBDE8F087A078032842 ++:10E5D00002D0022800D0FFDF0420A070257120782F ++:10E5E000002878D1FFF715FF3078012806D0B068F1 ++:10E5F000E06000F02BF92061002060E0E078F3F7A4 ++:10E600003CFDF5E7A078032802D0022800D0FFDF08 ++:10E61000207800286DD1A078032816D0F3F7E8FB06 ++:10E6200001464F46D9F80000F4F7F0F800280EDB59 ++:10E63000796881420BDB081AF0606A49E078F3F7E9 ++:10E640001FFE0028C0D1FFDFBEE7042028E0042021 ++:10E65000F4F78FFBA570B7E7A078032802D0022853 ++:10E6600000D0FFDF207888BBA078032817D0F3F70D ++:10E67000BFFB01464F46D9F80000F4F7C7F8002861 ++:10E68000E5DB79688142E2DB081AF0605549E07801 ++:10E69000F3F7F6FD002897D1FFDF95E740E005206E ++:10E6A000F4F767FBA7708FE7A078042800D0FFDF9E ++:10E6B000022004E0A078042800D0FFDF0120A16838 ++:10E6C0008847FFF71CFF054630E004E011E0A07822 ++:10E6D000042800D0FFDFBDE8F04700F08BB8A07839 ++:10E6E000042804D0617809B1022800D0FFDF207827 ++:10E6F00018B1BDE8F04700F086B8207920B10620B7 ++:10E70000F4F737FB2571CDE7607838B13549E0780B ++:10E71000F3F7B6FD00B9FFDF657055E70720BFE7E7 ++:10E72000FFDF51E73DB1012D03D0FFDF022DF9D10D ++:10E730004AE70420C3E70320C1E770B5050005D010 ++:10E74000274CA078052803D0112070BD102070BD83 ++:10E750002748F3F7D4FAE070202803D00020A56002 ++:10E76000A07070BD032070BD1D4810B5017809B1BF ++:10E77000112010BD8178052906D0012906D029B1C4 ++:10E7800001210170002010BD0F2010BD00F03BF8EA ++:10E79000F8E770B5124C0546A07808B1012809D1F8 ++:10E7A00055B12846FFF743FE40B1287840B1A07824 ++:10E7B000012809D00F2070BD102070BD072070BD4A ++:10E7C0002846FFF75EFE03E000212846FFF778FEAB ++:10E7D0000449E078F3F754FD00B9FFDF002070BD75 ++:10E7E000AC010020941100203D860100FF1FA1070D ++:10E7F0008DE501000A4810B5006900F01FF8BDE87A ++:10E800001040F3F701BA064810B5C078F3F7D1FA13 ++:10E8100000B9FFDF0820F4F7ACFABDE81040F1E5DD ++:10E82000AC01002010B50E4C2060201D01600C488A ++:10E8300010300260001D0360002010BD09490A6805 ++:10E8400048F202139A4302430A607047054A11686E ++:10E8500048F2021301EA0300994311607047000077 ++:10E8600000060040C8060240704770477047704776 ++:10E87000704740EA010310B59B070FD1042A0DD35E ++:10E8800010C808C9121F9C42F8D020BA19BA884291 ++:10E8900001D9012010BD4FF0FF3010BD1AB1D307D0 ++:10E8A00003D0521C07E0002010BD10F8013B11F806 ++:10E8B000014B1B1B07D110F8013B11F8014B1B1B2F ++:10E8C00001D1921EF1D1184610BD032A40F23080CA ++:10E8D00010F0030C00F0158011F8013BBCF1020FA1 ++:10E8E000624498BF11F801CB00F8013B38BF11F822 ++:10E8F000013BA2F1040298BF00F801CB38BF00F839 ++:10E90000013B11F0030300F02580083AC0F00880B5 ++:10E9100051F8043B083A51F804CBA0E80810F5E799 ++:10E92000121D5CBF51F8043B40F8043BAFF300807C ++:10E93000D20724BF11F8013B11F801CB48BF11F8F1 ++:10E94000012B24BF00F8013B00F801CB48BF00F8C1 ++:10E95000012B704710B5203AC0F00B80B1E8185079 ++:10E96000203AA0E81850B1E81850A0E81850BFF4B9 ++:10E97000F5AF5FEA027C24BFB1E81850A0E8185058 ++:10E9800044BF18C918C0BDE810405FEA827C24BFAC ++:10E9900051F8043B40F8043B08BF7047D20728BF3A ++:10E9A00031F8023B48BF11F8012B28BF20F8023B89 ++:10E9B00048BF00F8012B704702F0FF0343EA03222F ++:10E9C00042EA024200F002B84FF000020429C0F00F ++:10E9D000128010F0030C00F01B80CCF1040CBCF191 ++:10E9E000020F18BF00F8012BA8BF20F8022BA1EBE3 ++:10E9F0000C0100F00DB85FEAC17C24BF00F8012BC8 ++:10EA000000F8012B48BF00F8012B70474FF00002BF ++:10EA100000B5134694469646203922BFA0E80C5014 ++:10EA2000A0E80C50B1F12001BFF4F7AF090728BFEF ++:10EA3000A0E80C5048BF0CC05DF804EB890028BF6B ++:10EA400040F8042B08BF704748BF20F8022B11F094 ++:10EA5000804F18BF00F8012B704770477047704710 ++:10EA600070470000FEDF04207146084219D1069964 ++:10EA7000124A914215DC069902394878DF2810D1F4 ++:10EA80000878FE2807D0FF280BD14FF001004FF087 ++:10EA900000020B4B184741F201000099019A084B04 ++:10EAA0001847084B002B02D01B68DB6818474FF053 ++:10EAB000FF3071464FF00002014B18470030020052 ++:10EAC00005DF010004000020184819497047FFF7CE ++:10EAD000FBFFE2F773FB00BD4FF480501549096856 ++:10EAE000884203D1144A13605B68184700BD0000D8 ++:10EAF00020BFFDE74FF480500E490968884210D1CD ++:10EB00000E4B18684FF0FF318842F1D080F308882F ++:10EB10004FF02021884204DD0948026803210A439E ++:10EB200002600848804708488047FFDFA81100209E ++:10EB3000A811002000000020040000200030020086 ++:10EB40001409004011360100D9EA01000420714681 ++:10EB5000084202D0EFF3098101E0EFF308818869F0 ++:10EB600002380078102813DB20280FDB2B280BDB62 ++:10EB70000A4A12680A4B9A4203D1602804DB094A08 ++:10EB80001047022008607047074A1047074A10479D ++:10EB9000074A12682C32126810470000B0000020AB ++:10EBA000BEBAFECA2113000085D6010093E0010021 ++:10EBB000040000200D4B0E4908470E4B0C49084736 ++:10EBC0000D4B0B4908470D4B094908470C4B0849A9 ++:10EBD00008470C4B064908470B4B054908470B4BA8 ++:10EBE000034908470A4B024908470000A1B4000046 ++:10EBF000B12F0000792F000015B10000A3B0000074 ++:10EC0000ABB600003D1300003981000039B90000A7 ++:10EC1000C9110000518B0000138D0000718E00009F ++:10EC2000958E0000CF8E0000038F0000358F00000E ++:10EC30006D8F0000BF8F0000298C0000A71200001C ++:10EC4000A7120000DB2200001F2300003F2300006A ++:10EC5000C5230000E9240000A7250000D7250000F7 ++:10EC600079260000A11F00009528000089290000D6 ++:10EC7000A92900009F320000C3320000F3310000D8 ++:10EC800047320000F532000089330000574500008C ++:10EC900007470000D74A0000ED4B0000774C00000A ++:10ECA000F54C0000594D00007D4E00004B4F000018 ++:10ECB000B54F0000B7290000BD290000C72900009A ++:10ECC000711F00007F2A0000451F0000AD2B0000CF ++:10ECD000ED2B00004F2C0000A7120000A71200002F ++:10ECE000A71200006D5D0000F35D00000F5E0000E4 ++:10ECF0002B5E0000B95F0000555E00005F5E000003 ++:10ED0000A15E0000C35E00009F5F0000E15F0000A5 ++:10ED1000A712000053780000737800007578000097 ++:10ED2000B9780000E7780000D5790000637A000028 ++:10ED3000777A0000C57A0000B57B00005B7D00009B ++:10ED4000857E0000616800009D7E0000A712000023 ++:10ED5000A7120000F1A900005BAB0000AFAB000000 ++:10ED60001BAC0000CBAC0000100110013A02000007 ++:10ED70001A02000405060000938600008186000048 ++:10ED8000FFFFFFFF0000FFFFE5A10000E11B000007 ++:10ED90000D590000AB680000118400000000000065 ++:10EDA000000002000000000000020000000000005F ++:10EDB0000001000000000000FF750000DF7500008A ++:10EDC0004D760000EF5C0000B15C0000D15C0000FB ++:10EDD0004F9D00007B9D0000839F0000513E00007E ++:10EDE0006D760000000000009D7600003D5D000093 ++:10EDF000000000000000000000000000659E000010 ++:10EE000000000000E53E0000D33B0000D33B0000C3 ++:10EE1000B722000091A000002F6B00001F580000D7 ++:10EE20007BD00100A1730100113C0000113C0000E7 ++:10EE3000D9220000F3A00000B36B0000915800003D ++:10EE4000A3D00100B57301007001700140003800CB ++:10EE50005C0024004001F00100000300656C746256 ++:10EE600000000000000000000000000000000000A2 ++:10EE7000870000000000000000000000000000000B ++:10EE8000BE83605ADB0B376038A5F5AA9183886C86 ++:10EE900001000000590301002112010000000001DF ++:10EEA0000206030405000000070000000000000047 ++:10EEB000060000000A00000032000000730000009D ++:10EEC000B4000000B95F010091B80100874F010054 ++:10EED000A78401009BAB0100A78401000950010039 ++:10EEE0002D87010069A601002D870100FD4E01005C ++:10EEF000CF86010087AA0100CF8601004753010099 ++:10EF000067880100DDAB010067880100555555D6C3 ++:10EF1000BE898E000000A606340DC21300004A030D ++:10EF2000EE059208000096041409920DF401FA000F ++:10EF3000960064004B0032001E0014000A00050019 ++:10EF4000020001000041000000000000AAAED7ABA3 ++:10EF5000154120100C0802170D01010209090101D9 ++:10EF6000060209181803010109090303055555553F ++:10EF7000252627D6BE898E0025410000000000000E ++:10EF800065DD01007DDD010095DD0100ADDD0100E5 ++:10EF9000DDDD010005DE01002FDE010063DE010082 ++:10EFA000C3DA010013DA010047DB0100C5DB010011 ++:10EFB000D5DB010001DC0100BB2E0100C32E0100E6 ++:10EFC000D52E01002FDC010049DC01001DDC010011 ++:10EFD00027DC010055DC01008BDC0100ABDC01000B ++:10EFE000B9DC0100C7DC0100D7DC0100EFDC010067 ++:10EFF00007DD01001DDD0100000000009FB20000E0 ++:10F00000F5B200000BB30000B1E30100F9D6010036 ++:10F01000BFD701003BE7010069E7010093E701006A ++:10F02000152D0100E53001001C05004020050040C1 ++:10F030000010020054F0010008000020C001000090 ++:10F040004411000084F00100C8010020E00F00001E ++:10F05000A011000001181328120250201A010222E8 ++:10F060007C2720FB349B5F801280021A10135F09FB ++:10F070001B201C041AA20401980912BF237F01025D ++:04F080006B290000F8 ++:00000001FF +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/toolchain/armgcc/armgcc_s132v5_nrf52832_xxaa.ld nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/toolchain/armgcc/armgcc_s132v5_nrf52832_xxaa.ld +new file mode 100644 +index 0000000..cb45d8b +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/toolchain/armgcc/armgcc_s132v5_nrf52832_xxaa.ld +@@ -0,0 +1,33 @@ ++/* Linker script to configure memory regions. */ ++ ++SEARCH_DIR(.) ++GROUP(-lgcc -lc -lnosys) ++ ++MEMORY ++{ ++ FLASH (rx) : ORIGIN = 0x23000, LENGTH = 0x5d000 ++ RAM (rwx) : ORIGIN = 0x20001380, LENGTH = 0xec80 ++} ++ ++SECTIONS ++{ ++} ++ ++SECTIONS ++{ ++ . = ALIGN(4); ++ .mem_section_dummy_ram : ++ { ++ } ++ ++} INSERT AFTER .data; ++ ++SECTIONS ++{ ++ .mem_section_dummy_rom : ++ { ++ } ++ ++} INSERT AFTER .text ++ ++INCLUDE "nrf_common.ld" +diff --git nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/toolchain/iar/iar_s132v5_nrf52832_xxaa.icf nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/toolchain/iar/iar_s132v5_nrf52832_xxaa.icf +new file mode 100644 +index 0000000..55701b7 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/components/softdevice/s132v5/toolchain/iar/iar_s132v5_nrf52832_xxaa.icf +@@ -0,0 +1,36 @@ ++/*###ICF### Section handled by ICF editor, don't touch! ****/ ++/*-Editor annotation file-*/ ++/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ ++/*-Specials-*/ ++define symbol __ICFEDIT_intvec_start__ = 0x23000; ++/*-Memory Regions-*/ ++define symbol __ICFEDIT_region_ROM_start__ = 0x23000; ++define symbol __ICFEDIT_region_ROM_end__ = 0x7ffff; ++define symbol __ICFEDIT_region_RAM_start__ = 0x20001380; ++define symbol __ICFEDIT_region_RAM_end__ = 0x2000ffff; ++export symbol __ICFEDIT_region_RAM_start__; ++export symbol __ICFEDIT_region_RAM_end__; ++/*-Sizes-*/ ++define symbol __ICFEDIT_size_cstack__ = ; ++define symbol __ICFEDIT_size_heap__ = ; ++/**** End of ICF editor section. ###ICF###*/ ++ ++define memory mem with size = 4G; ++define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; ++define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; ++ ++define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; ++define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; ++define block RO_END with alignment = 8, size = 0 { }; ++ ++initialize by copy { readwrite }; ++do not initialize { section .noinit }; ++ ++keep { section .intvec }; ++place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; ++place in ROM_region { readonly, ++ block RO_END }; ++place in RAM_region { readwrite, ++ block CSTACK, ++ block HEAP }; ++ +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/main.c nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/main.c +index fc7996c..24df30a 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/main.c ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/main.c +@@ -57,23 +57,34 @@ + #include "ser_conn_handlers.h" + #include "boards.h" + #include "nrf_drv_clock.h" +- ++#include "app_timer.h" + #include "nrf_log.h" + #include "nrf_log_ctrl.h" + #include "nrf_log_default_backends.h" + + #include "ser_phy_debug_comm.h" ++#include "ser_config.h" + +-#if defined(APP_USBD_ENABLED) && APP_USBD_ENABLED +-#include "app_usbd_serial_num.h" +-#ifdef BOARD_PCA10059 ++#if defined(NRF_DFU_TRIGGER_USB_INTERFACE_NUM) && defined(QSPI_ENABLED) ++#define BOARD_DETECTION 1 ++#else ++#define BOARD_DETECTION 0 ++#endif ++ ++#if BOARD_DETECTION + #include "nrf_dfu_trigger_usb.h" ++#include "nrf_drv_qspi.h" ++#define PCA10056_PIN_RESET 24 ++#define PCA10059_PIN_RESET 19 + #endif ++ ++ ++#if defined(APP_USBD_ENABLED) && APP_USBD_ENABLED ++#include "app_usbd_serial_num.h" + #include "app_usbd.h" + + static volatile bool m_usb_started; + +- + static void usbd_user_evt_handler(app_usbd_event_type_t event) + { + switch (event) +@@ -120,9 +131,6 @@ static void usbd_init(void) + + static void usbd_enable(void) + { +-#ifdef BOARD_PCA10059 +- APP_ERROR_CHECK(nrf_dfu_trigger_usb_init()); +-#endif + APP_ERROR_CHECK(app_usbd_power_events_enable()); + + /* Process USB events until USB is started. This is related to the fact that +@@ -138,16 +146,68 @@ static void usbd_enable(void) + } + #endif //APP_USBD_ENABLED + ++ ++typedef struct __attribute__((packed)) ++{ ++ uint32_t magic_number; /* Magic number to verify the presence of this structure in memory */ ++ uint32_t struct_version : 8; /* Version of this struct format */ ++ uint32_t rfu0 : 24; /* Reserved for future use, shall be 0xFFFFFF */ ++ uint32_t revision_hash; /* Unique revision identifier */ ++ uint32_t version_major : 8; /* Major version number */ ++ uint32_t version_minor : 8; /* Minor version number */ ++ uint32_t version_patch : 8; /* Patch version number */ ++ uint32_t rfu1 : 8; /* Reserved for future use, shall be 0xFF */ ++ uint32_t sd_ble_api_version : 8; /* SoftDevice BLE API version number */ ++ uint32_t transport_type : 8; /* Connectivity transport type, 1 = UART HCI */ ++ uint32_t rfu2 : 16; /* Reserved for future use, shall be 0xFFFF */ ++ uint32_t baud_rate; /* UART transport baud rate */ ++} version_info_t; ++#if defined ( __CC_ARM ) ++static const version_info_t version_info __attribute__((at(0x50000))) = ++#elif defined ( __GNUC__ ) || defined ( __SES_ARM ) ++volatile static const version_info_t version_info __attribute__ ((section(".connectivity_version_info"))) = ++#elif defined ( __ICCARM__ ) ++__root const version_info_t version_info @ 0x50000 = ++#endif ++{ ++ .magic_number = 0x46D8A517, ++ .struct_version = 2, ++ .rfu0 = 0xFFFFFF, ++ .revision_hash = 0, ++ .version_major = 2, ++ .version_minor = 0, ++ .version_patch = 1, ++ .rfu1 = 0xFF, ++ .sd_ble_api_version = NRF_SD_BLE_API_VERSION, ++ .transport_type = 1, ++ .rfu2 = 0xFFFF, ++ .baud_rate = SER_PHY_UART_BAUDRATE_VAL, ++}; ++ + static void on_idle(void) + { ++ + if (!NRF_LOG_PROCESS()) + { +- /* Sleep waiting for an application event. */ +- uint32_t err_code = sd_app_evt_wait(); +- APP_ERROR_CHECK(err_code); ++ // Wait for an event. ++ if (nrf_sdh_is_enabled()) ++ { ++ ret_code_t ret_code = sd_app_evt_wait(); ++ ASSERT((ret_code == NRF_SUCCESS) || (ret_code == NRF_ERROR_SOFTDEVICE_NOT_ENABLED)); ++ UNUSED_VARIABLE(ret_code); ++ } ++ else ++ { ++ // Wait for an event. ++ __WFE(); ++ // Clear the internal event register. ++ __SEV(); ++ __WFE(); ++ } + } + + #if defined(APP_USBD_ENABLED) && APP_USBD_ENABLED ++ + while (app_usbd_event_queue_process()) + { + /* Nothing to do */ +@@ -155,18 +215,64 @@ static void on_idle(void) + #endif + } + ++uint32_t timestamp(void) ++{ ++ return DWT->CYCCNT; ++} ++ ++#if BOARD_DETECTION ++void pin_to_default(uint8_t pin) ++{ ++ if (pin != NRF_QSPI_PIN_NOT_CONNECTED) ++ { ++ nrf_gpio_cfg_default(pin); ++ } ++} ++#endif ++ + /**@brief Main function of the connectivity application. */ + int main(void) + { ++ ++ ++ CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; ++ DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk; ++ + uint32_t err_code = NRF_SUCCESS; + +- APP_ERROR_CHECK(NRF_LOG_INIT(NULL)); ++ APP_ERROR_CHECK(NRF_LOG_INIT(timestamp, 64000000)); ++ + + NRF_LOG_DEFAULT_BACKENDS_INIT(); + + NRF_LOG_INFO("BLE connectivity started"); + +- bsp_board_init(BSP_INIT_LEDS); ++#if BOARD_DETECTION ++ uint32_t pin_reset = PCA10059_PIN_RESET; ++ ++ nrf_drv_qspi_config_t config = NRF_DRV_QSPI_DEFAULT_CONFIG; ++ ++ //Using qspi memory to de ++ err_code = nrf_drv_qspi_init(&config, NULL, NULL); ++ if (err_code == NRF_SUCCESS) ++ { ++ //qspi memory is present on pca10056 ++ pin_reset = PCA10056_PIN_RESET; ++ nrf_drv_qspi_uninit(); ++ } ++ else if (err_code == NRF_ERROR_TIMEOUT) ++ { ++ //pca10059 assumed when no qspi memory ++ nrf_drv_qspi_uninit(); ++ pin_reset = PCA10059_PIN_RESET; ++ pin_to_default(config.pins.csn_pin); ++ pin_to_default(config.pins.io0_pin); ++ pin_to_default(config.pins.io1_pin); ++ pin_to_default(config.pins.io2_pin); ++ pin_to_default(config.pins.io3_pin); ++ pin_to_default(config.pins.sck_pin); ++ } ++#endif //BOARD_DETECTION + + #if (defined(SER_PHY_HCI_DEBUG_ENABLE) || defined(SER_PHY_DEBUG_APP_ENABLE)) + debug_init(NULL); +@@ -192,6 +298,8 @@ int main(void) + } + + nrf_drv_clock_hfclk_request(NULL); ++ nrf_drv_clock_lfclk_request(NULL); ++ + while (!nrf_drv_clock_hfclk_is_running()) + {} + +@@ -199,6 +307,10 @@ int main(void) + usbd_init(); + #endif + ++#if BOARD_DETECTION ++ APP_ERROR_CHECK(nrf_dfu_trigger_usb_init(pin_reset)); ++#endif ++ + /* Open serialization HAL Transport layer and subscribe for HAL Transport events. */ + err_code = ser_hal_transport_open(ser_conn_hal_transport_event_handle); + APP_ERROR_CHECK(err_code); +@@ -210,12 +322,14 @@ int main(void) + err_code = nrf_sdh_enable_request(); + APP_ERROR_CHECK(err_code); + ++ err_code = app_timer_init(); ++ APP_ERROR_CHECK(err_code); ++ + ser_conn_on_no_mem_handler_set(on_idle); + + /* Enter main loop. */ + for (;;) + { +- + /* Process SoftDevice events. */ + app_sched_execute(); + if (nrf_sdh_is_suspended()) +@@ -235,6 +349,7 @@ int main(void) + APP_ERROR_CHECK(err_code); + + on_idle(); ++ + } + } + /** @} */ +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/armgcc/ble_connectivity_gcc_nrf52.ld +index 611a3b6..1584391 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/armgcc/ble_connectivity_gcc_nrf52.ld +@@ -6,11 +6,18 @@ GROUP(-lgcc -lc -lnosys) + MEMORY + { + FLASH (rx) : ORIGIN = 0x26000, LENGTH = 0x5a000 +- RAM (rwx) : ORIGIN = 0x2000b8a8, LENGTH = 0x4758 ++ RAM (rwx) : ORIGIN = 0x2000a8a8, LENGTH = 0x5758 ++ connectivity_version_info (r) : ORIGIN = 0x50000, LENGTH = 0x18 + } + + SECTIONS + { ++ .connectivity_version_info : ++ { ++ PROVIDE(__start_connectivity_version_info = .); ++ KEEP(*(SORT(.connectivity_version_info*))) ++ PROVIDE(__stop_connectivity_version_info = .); ++ } > connectivity_version_info + } + + SECTIONS +@@ -69,6 +76,12 @@ SECTIONS + KEEP(*(.nrf_balloc)) + PROVIDE(__stop_nrf_balloc = .); + } > FLASH ++ .sdh_state_observers : ++ { ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); ++ } > FLASH + .sdh_stack_observers : + { + PROVIDE(__start_sdh_stack_observers = .); +@@ -81,12 +94,6 @@ SECTIONS + KEEP(*(SORT(.sdh_req_observers*))) + PROVIDE(__stop_sdh_req_observers = .); + } > FLASH +- .sdh_state_observers : +- { +- PROVIDE(__start_sdh_state_observers = .); +- KEEP(*(SORT(.sdh_state_observers*))) +- PROVIDE(__stop_sdh_state_observers = .); +- } > FLASH + .log_backends : + { + PROVIDE(__start_log_backends = .); +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/config/sdk_config.h +index c5caa64..19a16d1 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/config/sdk_config.h ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/config/sdk_config.h +@@ -518,6 +518,136 @@ + + // + ++// QSPI_ENABLED - nrf_drv_qspi - QSPI peripheral driver - legacy layer ++//========================================================== ++#ifndef QSPI_ENABLED ++#define QSPI_ENABLED 0 ++#endif ++// QSPI_CONFIG_SCK_DELAY - tSHSL, tWHSL and tSHWL in number of 16 MHz periods (62.5 ns). <0-255> ++ ++ ++#ifndef QSPI_CONFIG_SCK_DELAY ++#define QSPI_CONFIG_SCK_DELAY 1 ++#endif ++ ++// QSPI_CONFIG_XIP_OFFSET - Address offset in the external memory for Execute in Place operation. ++#ifndef QSPI_CONFIG_XIP_OFFSET ++#define QSPI_CONFIG_XIP_OFFSET 0 ++#endif ++ ++// QSPI_CONFIG_READOC - Number of data lines and opcode used for reading. ++ ++// <0=> FastRead ++// <1=> Read2O ++// <2=> Read2IO ++// <3=> Read4O ++// <4=> Read4IO ++ ++#ifndef QSPI_CONFIG_READOC ++#define QSPI_CONFIG_READOC 0 ++#endif ++ ++// QSPI_CONFIG_WRITEOC - Number of data lines and opcode used for writing. ++ ++// <0=> PP ++// <1=> PP2O ++// <2=> PP4O ++// <3=> PP4IO ++ ++#ifndef QSPI_CONFIG_WRITEOC ++#define QSPI_CONFIG_WRITEOC 0 ++#endif ++ ++// QSPI_CONFIG_ADDRMODE - Addressing mode. ++ ++// <0=> 24bit ++// <1=> 32bit ++ ++#ifndef QSPI_CONFIG_ADDRMODE ++#define QSPI_CONFIG_ADDRMODE 0 ++#endif ++ ++// QSPI_CONFIG_MODE - SPI mode. ++ ++// <0=> Mode 0 ++// <1=> Mode 1 ++ ++#ifndef QSPI_CONFIG_MODE ++#define QSPI_CONFIG_MODE 0 ++#endif ++ ++// QSPI_CONFIG_FREQUENCY - Frequency divider. ++ ++// <0=> 32MHz/1 ++// <1=> 32MHz/2 ++// <2=> 32MHz/3 ++// <3=> 32MHz/4 ++// <4=> 32MHz/5 ++// <5=> 32MHz/6 ++// <6=> 32MHz/7 ++// <7=> 32MHz/8 ++// <8=> 32MHz/9 ++// <9=> 32MHz/10 ++// <10=> 32MHz/11 ++// <11=> 32MHz/12 ++// <12=> 32MHz/13 ++// <13=> 32MHz/14 ++// <14=> 32MHz/15 ++// <15=> 32MHz/16 ++ ++#ifndef QSPI_CONFIG_FREQUENCY ++#define QSPI_CONFIG_FREQUENCY 15 ++#endif ++ ++// QSPI_PIN_SCK - SCK pin value. ++#ifndef QSPI_PIN_SCK ++#define QSPI_PIN_SCK NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_CSN - CSN pin value. ++#ifndef QSPI_PIN_CSN ++#define QSPI_PIN_CSN NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO0 - IO0 pin value. ++#ifndef QSPI_PIN_IO0 ++#define QSPI_PIN_IO0 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO1 - IO1 pin value. ++#ifndef QSPI_PIN_IO1 ++#define QSPI_PIN_IO1 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO2 - IO2 pin value. ++#ifndef QSPI_PIN_IO2 ++#define QSPI_PIN_IO2 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO3 - IO3 pin value. ++#ifndef QSPI_PIN_IO3 ++#define QSPI_PIN_IO3 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef QSPI_CONFIG_IRQ_PRIORITY ++#define QSPI_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ + // UART_ENABLED - nrf_drv_uart - UART/UARTE peripheral driver - legacy layer + //========================================================== + #ifndef UART_ENABLED +@@ -4133,132 +4263,6 @@ + #define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 + #endif + +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- + // NRF_BLE_BMS_BLE_OBSERVER_PRIO + // Priority with which BLE events are dispatched to the Bond Management Service. + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/ble_connectivity_s132_hci_pca10040.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/ble_connectivity_s132_hci_pca10040.emProject +index 7eccb28..8a0e048 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/ble_connectivity_s132_hci_pca10040.emProject ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/ble_connectivity_s132_hci_pca10040.emProject +@@ -27,8 +27,8 @@ + linker_printf_width_precision_supported="Yes" + linker_printf_fmt_level="long" + linker_section_placement_file="flash_placement.xml" +- linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x80000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x10000;FLASH_START=0x26000;FLASH_SIZE=0x5a000;RAM_START=0x2000b8a8;RAM_SIZE=0x4758" +- linker_section_placements_segments="FLASH RX 0x0 0x80000;RAM RWX 0x20000000 0x10000" ++ linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x80000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x10000;FLASH_START=0x26000;FLASH_SIZE=0x5a000;RAM_START=0x2000a8a8;RAM_SIZE=0x5758" ++ linker_section_placements_segments="FLASH RX 0x0 0x80000;RAM RWX 0x20000000 0x10000;connectivity_version_info RX 0x50000 0x18" + project_directory="" + project_type="Executable" /> + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/flash_placement.xml +index 6b7653b..c9cc513 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/flash_placement.xml +@@ -11,9 +11,9 @@ + + + ++ + + +- + + + +@@ -43,4 +43,7 @@ + + + ++ ++ ++ + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/armgcc/ble_connectivity_gcc_nrf52.ld +index f67446c..5b7dc28 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/armgcc/ble_connectivity_gcc_nrf52.ld +@@ -6,11 +6,18 @@ GROUP(-lgcc -lc -lnosys) + MEMORY + { + FLASH (rx) : ORIGIN = 0x26000, LENGTH = 0x5a000 +- RAM (rwx) : ORIGIN = 0x2000b8a8, LENGTH = 0x4758 ++ RAM (rwx) : ORIGIN = 0x2000a8a8, LENGTH = 0x5758 ++ connectivity_version_info (r) : ORIGIN = 0x50000, LENGTH = 0x18 + } + + SECTIONS + { ++ .connectivity_version_info : ++ { ++ PROVIDE(__start_connectivity_version_info = .); ++ KEEP(*(SORT(.connectivity_version_info*))) ++ PROVIDE(__stop_connectivity_version_info = .); ++ } > connectivity_version_info + } + + SECTIONS +@@ -63,6 +70,12 @@ SECTIONS + KEEP(*(SORT(.log_const_data*))) + PROVIDE(__stop_log_const_data = .); + } > FLASH ++ .sdh_state_observers : ++ { ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); ++ } > FLASH + .sdh_stack_observers : + { + PROVIDE(__start_sdh_stack_observers = .); +@@ -75,12 +88,6 @@ SECTIONS + KEEP(*(SORT(.sdh_req_observers*))) + PROVIDE(__stop_sdh_req_observers = .); + } > FLASH +- .sdh_state_observers : +- { +- PROVIDE(__start_sdh_state_observers = .); +- KEEP(*(SORT(.sdh_state_observers*))) +- PROVIDE(__stop_sdh_state_observers = .); +- } > FLASH + .log_backends : + { + PROVIDE(__start_log_backends = .); +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/config/sdk_config.h +index 878122b..9342e94 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/config/sdk_config.h ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/config/sdk_config.h +@@ -747,6 +747,136 @@ + + // + ++// QSPI_ENABLED - nrf_drv_qspi - QSPI peripheral driver - legacy layer ++//========================================================== ++#ifndef QSPI_ENABLED ++#define QSPI_ENABLED 0 ++#endif ++// QSPI_CONFIG_SCK_DELAY - tSHSL, tWHSL and tSHWL in number of 16 MHz periods (62.5 ns). <0-255> ++ ++ ++#ifndef QSPI_CONFIG_SCK_DELAY ++#define QSPI_CONFIG_SCK_DELAY 1 ++#endif ++ ++// QSPI_CONFIG_XIP_OFFSET - Address offset in the external memory for Execute in Place operation. ++#ifndef QSPI_CONFIG_XIP_OFFSET ++#define QSPI_CONFIG_XIP_OFFSET 0 ++#endif ++ ++// QSPI_CONFIG_READOC - Number of data lines and opcode used for reading. ++ ++// <0=> FastRead ++// <1=> Read2O ++// <2=> Read2IO ++// <3=> Read4O ++// <4=> Read4IO ++ ++#ifndef QSPI_CONFIG_READOC ++#define QSPI_CONFIG_READOC 0 ++#endif ++ ++// QSPI_CONFIG_WRITEOC - Number of data lines and opcode used for writing. ++ ++// <0=> PP ++// <1=> PP2O ++// <2=> PP4O ++// <3=> PP4IO ++ ++#ifndef QSPI_CONFIG_WRITEOC ++#define QSPI_CONFIG_WRITEOC 0 ++#endif ++ ++// QSPI_CONFIG_ADDRMODE - Addressing mode. ++ ++// <0=> 24bit ++// <1=> 32bit ++ ++#ifndef QSPI_CONFIG_ADDRMODE ++#define QSPI_CONFIG_ADDRMODE 0 ++#endif ++ ++// QSPI_CONFIG_MODE - SPI mode. ++ ++// <0=> Mode 0 ++// <1=> Mode 1 ++ ++#ifndef QSPI_CONFIG_MODE ++#define QSPI_CONFIG_MODE 0 ++#endif ++ ++// QSPI_CONFIG_FREQUENCY - Frequency divider. ++ ++// <0=> 32MHz/1 ++// <1=> 32MHz/2 ++// <2=> 32MHz/3 ++// <3=> 32MHz/4 ++// <4=> 32MHz/5 ++// <5=> 32MHz/6 ++// <6=> 32MHz/7 ++// <7=> 32MHz/8 ++// <8=> 32MHz/9 ++// <9=> 32MHz/10 ++// <10=> 32MHz/11 ++// <11=> 32MHz/12 ++// <12=> 32MHz/13 ++// <13=> 32MHz/14 ++// <14=> 32MHz/15 ++// <15=> 32MHz/16 ++ ++#ifndef QSPI_CONFIG_FREQUENCY ++#define QSPI_CONFIG_FREQUENCY 15 ++#endif ++ ++// QSPI_PIN_SCK - SCK pin value. ++#ifndef QSPI_PIN_SCK ++#define QSPI_PIN_SCK NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_CSN - CSN pin value. ++#ifndef QSPI_PIN_CSN ++#define QSPI_PIN_CSN NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO0 - IO0 pin value. ++#ifndef QSPI_PIN_IO0 ++#define QSPI_PIN_IO0 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO1 - IO1 pin value. ++#ifndef QSPI_PIN_IO1 ++#define QSPI_PIN_IO1 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO2 - IO2 pin value. ++#ifndef QSPI_PIN_IO2 ++#define QSPI_PIN_IO2 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO3 - IO3 pin value. ++#ifndef QSPI_PIN_IO3 ++#define QSPI_PIN_IO3 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef QSPI_CONFIG_IRQ_PRIORITY ++#define QSPI_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ + // SPIS_ENABLED - nrf_drv_spis - SPIS peripheral driver - legacy layer + //========================================================== + #ifndef SPIS_ENABLED +@@ -4339,132 +4469,6 @@ + #define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 + #endif + +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- + // NRF_BLE_BMS_BLE_OBSERVER_PRIO + // Priority with which BLE events are dispatched to the Bond Management Service. + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/ble_connectivity_s132_spi_pca10040.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/ble_connectivity_s132_spi_pca10040.emProject +index 918459a..0eb8650 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/ble_connectivity_s132_spi_pca10040.emProject ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/ble_connectivity_s132_spi_pca10040.emProject +@@ -27,8 +27,8 @@ + linker_printf_width_precision_supported="Yes" + linker_printf_fmt_level="long" + linker_section_placement_file="flash_placement.xml" +- linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x80000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x10000;FLASH_START=0x26000;FLASH_SIZE=0x5a000;RAM_START=0x2000b8a8;RAM_SIZE=0x4758" +- linker_section_placements_segments="FLASH RX 0x0 0x80000;RAM RWX 0x20000000 0x10000" ++ linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x80000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x10000;FLASH_START=0x26000;FLASH_SIZE=0x5a000;RAM_START=0x2000a8a8;RAM_SIZE=0x5758" ++ linker_section_placements_segments="FLASH RX 0x0 0x80000;RAM RWX 0x20000000 0x10000;connectivity_version_info RX 0x50000 0x18" + project_directory="" + project_type="Executable" /> + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/flash_placement.xml +index a801e6e..0708731 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi/ses/flash_placement.xml +@@ -10,9 +10,9 @@ + + + ++ + + +- + + + +@@ -42,4 +42,7 @@ + + + ++ ++ ++ + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld +index f67446c..5b7dc28 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld +@@ -6,11 +6,18 @@ GROUP(-lgcc -lc -lnosys) + MEMORY + { + FLASH (rx) : ORIGIN = 0x26000, LENGTH = 0x5a000 +- RAM (rwx) : ORIGIN = 0x2000b8a8, LENGTH = 0x4758 ++ RAM (rwx) : ORIGIN = 0x2000a8a8, LENGTH = 0x5758 ++ connectivity_version_info (r) : ORIGIN = 0x50000, LENGTH = 0x18 + } + + SECTIONS + { ++ .connectivity_version_info : ++ { ++ PROVIDE(__start_connectivity_version_info = .); ++ KEEP(*(SORT(.connectivity_version_info*))) ++ PROVIDE(__stop_connectivity_version_info = .); ++ } > connectivity_version_info + } + + SECTIONS +@@ -63,6 +70,12 @@ SECTIONS + KEEP(*(SORT(.log_const_data*))) + PROVIDE(__stop_log_const_data = .); + } > FLASH ++ .sdh_state_observers : ++ { ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); ++ } > FLASH + .sdh_stack_observers : + { + PROVIDE(__start_sdh_stack_observers = .); +@@ -75,12 +88,6 @@ SECTIONS + KEEP(*(SORT(.sdh_req_observers*))) + PROVIDE(__stop_sdh_req_observers = .); + } > FLASH +- .sdh_state_observers : +- { +- PROVIDE(__start_sdh_state_observers = .); +- KEEP(*(SORT(.sdh_state_observers*))) +- PROVIDE(__stop_sdh_state_observers = .); +- } > FLASH + .log_backends : + { + PROVIDE(__start_log_backends = .); +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/config/sdk_config.h +index 878122b..9342e94 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/config/sdk_config.h ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/config/sdk_config.h +@@ -747,6 +747,136 @@ + + // + ++// QSPI_ENABLED - nrf_drv_qspi - QSPI peripheral driver - legacy layer ++//========================================================== ++#ifndef QSPI_ENABLED ++#define QSPI_ENABLED 0 ++#endif ++// QSPI_CONFIG_SCK_DELAY - tSHSL, tWHSL and tSHWL in number of 16 MHz periods (62.5 ns). <0-255> ++ ++ ++#ifndef QSPI_CONFIG_SCK_DELAY ++#define QSPI_CONFIG_SCK_DELAY 1 ++#endif ++ ++// QSPI_CONFIG_XIP_OFFSET - Address offset in the external memory for Execute in Place operation. ++#ifndef QSPI_CONFIG_XIP_OFFSET ++#define QSPI_CONFIG_XIP_OFFSET 0 ++#endif ++ ++// QSPI_CONFIG_READOC - Number of data lines and opcode used for reading. ++ ++// <0=> FastRead ++// <1=> Read2O ++// <2=> Read2IO ++// <3=> Read4O ++// <4=> Read4IO ++ ++#ifndef QSPI_CONFIG_READOC ++#define QSPI_CONFIG_READOC 0 ++#endif ++ ++// QSPI_CONFIG_WRITEOC - Number of data lines and opcode used for writing. ++ ++// <0=> PP ++// <1=> PP2O ++// <2=> PP4O ++// <3=> PP4IO ++ ++#ifndef QSPI_CONFIG_WRITEOC ++#define QSPI_CONFIG_WRITEOC 0 ++#endif ++ ++// QSPI_CONFIG_ADDRMODE - Addressing mode. ++ ++// <0=> 24bit ++// <1=> 32bit ++ ++#ifndef QSPI_CONFIG_ADDRMODE ++#define QSPI_CONFIG_ADDRMODE 0 ++#endif ++ ++// QSPI_CONFIG_MODE - SPI mode. ++ ++// <0=> Mode 0 ++// <1=> Mode 1 ++ ++#ifndef QSPI_CONFIG_MODE ++#define QSPI_CONFIG_MODE 0 ++#endif ++ ++// QSPI_CONFIG_FREQUENCY - Frequency divider. ++ ++// <0=> 32MHz/1 ++// <1=> 32MHz/2 ++// <2=> 32MHz/3 ++// <3=> 32MHz/4 ++// <4=> 32MHz/5 ++// <5=> 32MHz/6 ++// <6=> 32MHz/7 ++// <7=> 32MHz/8 ++// <8=> 32MHz/9 ++// <9=> 32MHz/10 ++// <10=> 32MHz/11 ++// <11=> 32MHz/12 ++// <12=> 32MHz/13 ++// <13=> 32MHz/14 ++// <14=> 32MHz/15 ++// <15=> 32MHz/16 ++ ++#ifndef QSPI_CONFIG_FREQUENCY ++#define QSPI_CONFIG_FREQUENCY 15 ++#endif ++ ++// QSPI_PIN_SCK - SCK pin value. ++#ifndef QSPI_PIN_SCK ++#define QSPI_PIN_SCK NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_CSN - CSN pin value. ++#ifndef QSPI_PIN_CSN ++#define QSPI_PIN_CSN NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO0 - IO0 pin value. ++#ifndef QSPI_PIN_IO0 ++#define QSPI_PIN_IO0 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO1 - IO1 pin value. ++#ifndef QSPI_PIN_IO1 ++#define QSPI_PIN_IO1 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO2 - IO2 pin value. ++#ifndef QSPI_PIN_IO2 ++#define QSPI_PIN_IO2 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO3 - IO3 pin value. ++#ifndef QSPI_PIN_IO3 ++#define QSPI_PIN_IO3 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef QSPI_CONFIG_IRQ_PRIORITY ++#define QSPI_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ + // SPIS_ENABLED - nrf_drv_spis - SPIS peripheral driver - legacy layer + //========================================================== + #ifndef SPIS_ENABLED +@@ -4339,132 +4469,6 @@ + #define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 + #endif + +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- + // NRF_BLE_BMS_BLE_OBSERVER_PRIO + // Priority with which BLE events are dispatched to the Bond Management Service. + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/ble_connectivity_s132_spi_5W_pca10040.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/ble_connectivity_s132_spi_5W_pca10040.emProject +index 4f3e9db..13cae61 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/ble_connectivity_s132_spi_5W_pca10040.emProject ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/ble_connectivity_s132_spi_5W_pca10040.emProject +@@ -27,8 +27,8 @@ + linker_printf_width_precision_supported="Yes" + linker_printf_fmt_level="long" + linker_section_placement_file="flash_placement.xml" +- linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x80000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x10000;FLASH_START=0x26000;FLASH_SIZE=0x5a000;RAM_START=0x2000b8a8;RAM_SIZE=0x4758" +- linker_section_placements_segments="FLASH RX 0x0 0x80000;RAM RWX 0x20000000 0x10000" ++ linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x80000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x10000;FLASH_START=0x26000;FLASH_SIZE=0x5a000;RAM_START=0x2000a8a8;RAM_SIZE=0x5758" ++ linker_section_placements_segments="FLASH RX 0x0 0x80000;RAM RWX 0x20000000 0x10000;connectivity_version_info RX 0x50000 0x18" + project_directory="" + project_type="Executable" /> + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/flash_placement.xml +index a801e6e..0708731 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_spi_5W/ses/flash_placement.xml +@@ -10,9 +10,9 @@ + + + ++ + + +- + + + +@@ -42,4 +42,7 @@ + + + ++ ++ ++ + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/armgcc/ble_connectivity_gcc_nrf52.ld +index f67446c..5b7dc28 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/armgcc/ble_connectivity_gcc_nrf52.ld +@@ -6,11 +6,18 @@ GROUP(-lgcc -lc -lnosys) + MEMORY + { + FLASH (rx) : ORIGIN = 0x26000, LENGTH = 0x5a000 +- RAM (rwx) : ORIGIN = 0x2000b8a8, LENGTH = 0x4758 ++ RAM (rwx) : ORIGIN = 0x2000a8a8, LENGTH = 0x5758 ++ connectivity_version_info (r) : ORIGIN = 0x50000, LENGTH = 0x18 + } + + SECTIONS + { ++ .connectivity_version_info : ++ { ++ PROVIDE(__start_connectivity_version_info = .); ++ KEEP(*(SORT(.connectivity_version_info*))) ++ PROVIDE(__stop_connectivity_version_info = .); ++ } > connectivity_version_info + } + + SECTIONS +@@ -63,6 +70,12 @@ SECTIONS + KEEP(*(SORT(.log_const_data*))) + PROVIDE(__stop_log_const_data = .); + } > FLASH ++ .sdh_state_observers : ++ { ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); ++ } > FLASH + .sdh_stack_observers : + { + PROVIDE(__start_sdh_stack_observers = .); +@@ -75,12 +88,6 @@ SECTIONS + KEEP(*(SORT(.sdh_req_observers*))) + PROVIDE(__stop_sdh_req_observers = .); + } > FLASH +- .sdh_state_observers : +- { +- PROVIDE(__start_sdh_state_observers = .); +- KEEP(*(SORT(.sdh_state_observers*))) +- PROVIDE(__stop_sdh_state_observers = .); +- } > FLASH + .log_backends : + { + PROVIDE(__start_log_backends = .); +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/config/sdk_config.h +index 17cad13..cad5969 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/config/sdk_config.h ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/config/sdk_config.h +@@ -518,6 +518,136 @@ + + // + ++// QSPI_ENABLED - nrf_drv_qspi - QSPI peripheral driver - legacy layer ++//========================================================== ++#ifndef QSPI_ENABLED ++#define QSPI_ENABLED 0 ++#endif ++// QSPI_CONFIG_SCK_DELAY - tSHSL, tWHSL and tSHWL in number of 16 MHz periods (62.5 ns). <0-255> ++ ++ ++#ifndef QSPI_CONFIG_SCK_DELAY ++#define QSPI_CONFIG_SCK_DELAY 1 ++#endif ++ ++// QSPI_CONFIG_XIP_OFFSET - Address offset in the external memory for Execute in Place operation. ++#ifndef QSPI_CONFIG_XIP_OFFSET ++#define QSPI_CONFIG_XIP_OFFSET 0 ++#endif ++ ++// QSPI_CONFIG_READOC - Number of data lines and opcode used for reading. ++ ++// <0=> FastRead ++// <1=> Read2O ++// <2=> Read2IO ++// <3=> Read4O ++// <4=> Read4IO ++ ++#ifndef QSPI_CONFIG_READOC ++#define QSPI_CONFIG_READOC 0 ++#endif ++ ++// QSPI_CONFIG_WRITEOC - Number of data lines and opcode used for writing. ++ ++// <0=> PP ++// <1=> PP2O ++// <2=> PP4O ++// <3=> PP4IO ++ ++#ifndef QSPI_CONFIG_WRITEOC ++#define QSPI_CONFIG_WRITEOC 0 ++#endif ++ ++// QSPI_CONFIG_ADDRMODE - Addressing mode. ++ ++// <0=> 24bit ++// <1=> 32bit ++ ++#ifndef QSPI_CONFIG_ADDRMODE ++#define QSPI_CONFIG_ADDRMODE 0 ++#endif ++ ++// QSPI_CONFIG_MODE - SPI mode. ++ ++// <0=> Mode 0 ++// <1=> Mode 1 ++ ++#ifndef QSPI_CONFIG_MODE ++#define QSPI_CONFIG_MODE 0 ++#endif ++ ++// QSPI_CONFIG_FREQUENCY - Frequency divider. ++ ++// <0=> 32MHz/1 ++// <1=> 32MHz/2 ++// <2=> 32MHz/3 ++// <3=> 32MHz/4 ++// <4=> 32MHz/5 ++// <5=> 32MHz/6 ++// <6=> 32MHz/7 ++// <7=> 32MHz/8 ++// <8=> 32MHz/9 ++// <9=> 32MHz/10 ++// <10=> 32MHz/11 ++// <11=> 32MHz/12 ++// <12=> 32MHz/13 ++// <13=> 32MHz/14 ++// <14=> 32MHz/15 ++// <15=> 32MHz/16 ++ ++#ifndef QSPI_CONFIG_FREQUENCY ++#define QSPI_CONFIG_FREQUENCY 15 ++#endif ++ ++// QSPI_PIN_SCK - SCK pin value. ++#ifndef QSPI_PIN_SCK ++#define QSPI_PIN_SCK NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_CSN - CSN pin value. ++#ifndef QSPI_PIN_CSN ++#define QSPI_PIN_CSN NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO0 - IO0 pin value. ++#ifndef QSPI_PIN_IO0 ++#define QSPI_PIN_IO0 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO1 - IO1 pin value. ++#ifndef QSPI_PIN_IO1 ++#define QSPI_PIN_IO1 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO2 - IO2 pin value. ++#ifndef QSPI_PIN_IO2 ++#define QSPI_PIN_IO2 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO3 - IO3 pin value. ++#ifndef QSPI_PIN_IO3 ++#define QSPI_PIN_IO3 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef QSPI_CONFIG_IRQ_PRIORITY ++#define QSPI_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ + // UART_ENABLED - nrf_drv_uart - UART/UARTE peripheral driver - legacy layer + //========================================================== + #ifndef UART_ENABLED +@@ -4017,132 +4147,6 @@ + #define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 + #endif + +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- + // NRF_BLE_BMS_BLE_OBSERVER_PRIO + // Priority with which BLE events are dispatched to the Bond Management Service. + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/ble_connectivity_s132_uart_pca10040.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/ble_connectivity_s132_uart_pca10040.emProject +index 400fec8..8c8b417 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/ble_connectivity_s132_uart_pca10040.emProject ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/ble_connectivity_s132_uart_pca10040.emProject +@@ -27,8 +27,8 @@ + linker_printf_width_precision_supported="Yes" + linker_printf_fmt_level="long" + linker_section_placement_file="flash_placement.xml" +- linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x80000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x10000;FLASH_START=0x26000;FLASH_SIZE=0x5a000;RAM_START=0x2000b8a8;RAM_SIZE=0x4758" +- linker_section_placements_segments="FLASH RX 0x0 0x80000;RAM RWX 0x20000000 0x10000" ++ linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x80000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x10000;FLASH_START=0x26000;FLASH_SIZE=0x5a000;RAM_START=0x2000a8a8;RAM_SIZE=0x5758" ++ linker_section_placements_segments="FLASH RX 0x0 0x80000;RAM RWX 0x20000000 0x10000;connectivity_version_info RX 0x50000 0x18" + project_directory="" + project_type="Executable" /> + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/flash_placement.xml +index a801e6e..0708731 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132_uart/ses/flash_placement.xml +@@ -10,9 +10,9 @@ + + + ++ + + +- + + + +@@ -42,4 +42,7 @@ + + + ++ ++ ++ + +diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/Makefile nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/Makefile +new file mode 100644 +index 0000000..c33f1b4 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/Makefile +@@ -0,0 +1,262 @@ ++PROJECT_NAME := ble_connectivity_132v3_hci_pca10040 ++TARGETS := nrf52832_xxaa ++OUTPUT_DIRECTORY := _build ++ ++SDK_ROOT := ../../../../../.. ++PROJ_DIR := ../../.. ++ ++$(OUTPUT_DIRECTORY)/nrf52832_xxaa.out: \ ++ LINKER_SCRIPT := ble_connectivity_gcc_nrf52.ld ++ ++# Source files common to all targets ++SRC_FILES += \ ++ $(SDK_ROOT)/modules/nrfx/mdk/gcc_startup_nrf52.S \ ++ $(SDK_ROOT)/components/libraries/log/src/nrf_log_backend_rtt.c \ ++ $(SDK_ROOT)/components/libraries/log/src/nrf_log_backend_serial.c \ ++ $(SDK_ROOT)/components/libraries/log/src/nrf_log_backend_uart.c \ ++ $(SDK_ROOT)/components/libraries/log/src/nrf_log_default_backends.c \ ++ $(SDK_ROOT)/components/libraries/log/src/nrf_log_frontend.c \ ++ $(SDK_ROOT)/components/libraries/log/src/nrf_log_str_formatter.c \ ++ $(SDK_ROOT)/components/libraries/util/app_error.c \ ++ $(SDK_ROOT)/components/libraries/util/app_error_handler_gcc.c \ ++ $(SDK_ROOT)/components/libraries/util/app_error_weak.c \ ++ $(SDK_ROOT)/components/libraries/scheduler/app_scheduler.c \ ++ $(SDK_ROOT)/components/libraries/timer/app_timer.c \ ++ $(SDK_ROOT)/components/libraries/util/app_util_platform.c \ ++ $(SDK_ROOT)/components/libraries/crc16/crc16.c \ ++ $(SDK_ROOT)/components/libraries/util/nrf_assert.c \ ++ $(SDK_ROOT)/components/libraries/atomic/nrf_atomic.c \ ++ $(SDK_ROOT)/components/libraries/balloc/nrf_balloc.c \ ++ $(SDK_ROOT)/external/fprintf/nrf_fprintf.c \ ++ $(SDK_ROOT)/external/fprintf/nrf_fprintf_format.c \ ++ $(SDK_ROOT)/components/libraries/memobj/nrf_memobj.c \ ++ $(SDK_ROOT)/components/libraries/queue/nrf_queue.c \ ++ $(SDK_ROOT)/components/libraries/ringbuf/nrf_ringbuf.c \ ++ $(SDK_ROOT)/components/libraries/experimental_section_vars/nrf_section_iter.c \ ++ $(SDK_ROOT)/components/libraries/strerror/nrf_strerror.c \ ++ $(SDK_ROOT)/modules/nrfx/mdk/system_nrf52.c \ ++ $(SDK_ROOT)/components/boards/boards.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_conn.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/common/ble_dtm_init.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_event_enc.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_evt_conn.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gap_evt_conn.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_gatt_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gattc_conn.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gattc_evt_conn.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_gattc_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gatts_conn.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gatts_evt_conn.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_gatts_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_l2cap_conn.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_l2cap_evt_conn.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_l2cap_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/common/ble_serialization.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/common/cond_field_serialization.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/conn_ble_l2cap_sdu_pool.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/common/conn_mw.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gap.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gattc.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gatts.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_l2cap.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/common/conn_mw_nrf_soc.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/hal/dtm_uart.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/nrf_soc_conn.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/nrf_soc_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_cmd_decoder.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_dtm_cmd_decoder.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_error_handling.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_event_encoder.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_handlers.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_pkt_decoder.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_reset_cmd_decoder.c \ ++ $(SDK_ROOT)/components/serialization/common/ser_dbg_sd_str.c \ ++ $(SDK_ROOT)/components/serialization/common/transport/ser_hal_transport.c \ ++ $(SDK_ROOT)/components/serialization/common/transport/ser_phy/ser_phy_hci.c \ ++ $(SDK_ROOT)/components/serialization/common/transport/ser_phy/ser_phy_hci_slip.c \ ++ $(SDK_ROOT)/integration/nrfx/legacy/nrf_drv_clock.c \ ++ $(SDK_ROOT)/integration/nrfx/legacy/nrf_drv_uart.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_clock.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power_clock.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/prs/nrfx_prs.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uart.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uarte.c \ ++ $(PROJ_DIR)/main.c \ ++ $(SDK_ROOT)/external/segger_rtt/SEGGER_RTT.c \ ++ $(SDK_ROOT)/external/segger_rtt/SEGGER_RTT_Syscalls_GCC.c \ ++ $(SDK_ROOT)/external/segger_rtt/SEGGER_RTT_printf.c \ ++ $(SDK_ROOT)/components/ble/common/ble_advdata.c \ ++ $(SDK_ROOT)/components/ble/ble_dtm/ble_dtm.c \ ++ $(SDK_ROOT)/components/ble/ble_dtm/ble_dtm_hw_nrf52.c \ ++ $(SDK_ROOT)/components/ble/common/ble_srv_common.c \ ++ $(SDK_ROOT)/components/softdevice/common/nrf_sdh.c \ ++ $(SDK_ROOT)/components/softdevice/common/nrf_sdh_ble.c \ ++ $(SDK_ROOT)/components/softdevice/common/nrf_sdh_soc.c \ ++ ++# Include folders common to all targets ++INC_FOLDERS += \ ++ $(SDK_ROOT)/components \ ++ $(SDK_ROOT)/components/serialization/connectivity/hal \ ++ $(SDK_ROOT)/modules/nrfx/mdk \ ++ $(SDK_ROOT)/components/libraries/scheduler \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers \ ++ $(SDK_ROOT)/components/toolchain/cmsis/include \ ++ $(SDK_ROOT)/components/libraries/queue \ ++ $(SDK_ROOT)/components/libraries/timer \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/common \ ++ $(SDK_ROOT)/components/serialization/connectivity \ ++ $(SDK_ROOT)/components/libraries/strerror \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware \ ++ $(SDK_ROOT)/components/libraries/crc16 \ ++ $(SDK_ROOT)/components/ble/ble_dtm \ ++ $(SDK_ROOT)/components/serialization/common \ ++ $(SDK_ROOT)/components/libraries/util \ ++ ../config \ ++ $(SDK_ROOT)/components/ble/common \ ++ $(SDK_ROOT)/integration/nrfx \ ++ $(SDK_ROOT)/components/libraries/balloc \ ++ $(SDK_ROOT)/components/libraries/ringbuf \ ++ $(SDK_ROOT)/modules/nrfx/hal \ ++ $(SDK_ROOT)/components/libraries/bsp \ ++ $(SDK_ROOT)/components/softdevice/s132v3/headers/nrf52 \ ++ $(SDK_ROOT)/components/libraries/log \ ++ $(SDK_ROOT)/modules/nrfx \ ++ $(SDK_ROOT)/components/libraries/experimental_section_vars \ ++ $(SDK_ROOT)/integration/nrfx/legacy \ ++ $(SDK_ROOT)/components/serialization/common/transport/ser_phy \ ++ $(SDK_ROOT)/components/libraries/delay \ ++ $(SDK_ROOT)/external/segger_rtt \ ++ $(SDK_ROOT)/components/libraries/atomic \ ++ $(SDK_ROOT)/components/boards \ ++ $(SDK_ROOT)/components/libraries/memobj \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble \ ++ $(SDK_ROOT)/components/softdevice/s132v3/headers \ ++ $(SDK_ROOT)/components/serialization/common/transport \ ++ $(SDK_ROOT)/components/softdevice/common \ ++ $(SDK_ROOT)/components/serialization/common/transport/ser_phy/config \ ++ $(SDK_ROOT)/modules/nrfx/drivers/include \ ++ $(SDK_ROOT)/external/fprintf \ ++ $(SDK_ROOT)/components/libraries/log/src \ ++ ++# Libraries common to all targets ++LIB_FILES += \ ++ ++# Optimization flags ++OPT = -Os -g3 ++# Uncomment the line below to enable link time optimization ++#OPT += -flto ++ ++# C flags common to all targets ++CFLAGS += $(OPT) ++CFLAGS += -DBLE_STACK_SUPPORT_REQD ++CFLAGS += -DBOARD_PCA10040 ++CFLAGS += -DBSP_DEFINES_ONLY ++CFLAGS += -DCONFIG_GPIO_AS_PINRESET ++CFLAGS += -DFLOAT_ABI_HARD ++CFLAGS += -DHCI_TIMER2 ++CFLAGS += -DNRF52 ++CFLAGS += -DNRF52832_XXAA ++CFLAGS += -DNRF52_PAN_74 ++CFLAGS += -DNRF_SD_BLE_API_VERSION=3 ++CFLAGS += -DS132 ++CFLAGS += -DSER_CONNECTIVITY ++CFLAGS += -DSOFTDEVICE_PRESENT ++CFLAGS += -DSWI_DISABLE0 ++CFLAGS += -mcpu=cortex-m4 ++CFLAGS += -mthumb -mabi=aapcs ++CFLAGS += -Wall -Werror ++CFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16 ++# keep every function in a separate section, this allows linker to discard unused ones ++CFLAGS += -ffunction-sections -fdata-sections -fno-strict-aliasing ++CFLAGS += -fno-builtin -fshort-enums ++ ++# C++ flags common to all targets ++CXXFLAGS += $(OPT) ++ ++# Assembler flags common to all targets ++ASMFLAGS += -g3 ++ASMFLAGS += -mcpu=cortex-m4 ++ASMFLAGS += -mthumb -mabi=aapcs ++ASMFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16 ++ASMFLAGS += -DBLE_STACK_SUPPORT_REQD ++ASMFLAGS += -DBOARD_PCA10040 ++ASMFLAGS += -DBSP_DEFINES_ONLY ++ASMFLAGS += -DCONFIG_GPIO_AS_PINRESET ++ASMFLAGS += -DFLOAT_ABI_HARD ++ASMFLAGS += -DHCI_TIMER2 ++ASMFLAGS += -DNRF52 ++ASMFLAGS += -DNRF52832_XXAA ++ASMFLAGS += -DNRF52_PAN_74 ++ASMFLAGS += -DNRF_SD_BLE_API_VERSION=3 ++ASMFLAGS += -DS132 ++ASMFLAGS += -DSER_CONNECTIVITY ++ASMFLAGS += -DSOFTDEVICE_PRESENT ++ASMFLAGS += -DSWI_DISABLE0 ++ ++# Linker flags ++LDFLAGS += $(OPT) ++LDFLAGS += -mthumb -mabi=aapcs -L$(SDK_ROOT)/modules/nrfx/mdk -T$(LINKER_SCRIPT) ++LDFLAGS += -mcpu=cortex-m4 ++LDFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16 ++# let linker dump unused sections ++LDFLAGS += -Wl,--gc-sections ++# use newlib in nano version ++LDFLAGS += --specs=nano.specs ++ ++nrf52832_xxaa: CFLAGS += -D__HEAP_SIZE=512 ++nrf52832_xxaa: CFLAGS += -D__STACK_SIZE=2048 ++nrf52832_xxaa: ASMFLAGS += -D__HEAP_SIZE=512 ++nrf52832_xxaa: ASMFLAGS += -D__STACK_SIZE=2048 ++ ++# Add standard libraries at the very end of the linker input, after all objects ++# that may need symbols provided by these libraries. ++LIB_FILES += -lc -lnosys -lm ++ ++ ++.PHONY: default help ++ ++# Default target - first one defined ++default: nrf52832_xxaa ++ ++# Print all targets that can be built ++help: ++ @echo following targets are available: ++ @echo nrf52832_xxaa ++ @echo flash_softdevice ++ @echo sdk_config - starting external tool for editing sdk_config.h ++ @echo flash - flashing binary ++ ++TEMPLATE_PATH := $(SDK_ROOT)/components/toolchain/gcc ++ ++ ++include $(TEMPLATE_PATH)/Makefile.common ++ ++$(foreach target, $(TARGETS), $(call define_target, $(target))) ++ ++.PHONY: flash flash_softdevice erase ++ ++# Flash the program ++flash: default ++ @echo Flashing: $(OUTPUT_DIRECTORY)/nrf52832_xxaa.hex ++ nrfjprog -f nrf52 --program $(OUTPUT_DIRECTORY)/nrf52832_xxaa.hex --sectorerase ++ nrfjprog -f nrf52 --reset ++ ++# Flash softdevice ++flash_softdevice: ++ @echo Flashing: s132_nrf52_3.0.0_softdevice.hex ++ nrfjprog -f nrf52 --program $(SDK_ROOT)/components/softdevice/s132v3/hex/s132_nrf52_3.0.0_softdevice.hex --sectorerase ++ nrfjprog -f nrf52 --reset ++ ++erase: ++ nrfjprog -f nrf52 --eraseall ++ ++SDK_CONFIG_FILE := ../config/sdk_config.h ++CMSIS_CONFIG_TOOL := $(SDK_ROOT)/external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar ++sdk_config: ++ java -jar $(CMSIS_CONFIG_TOOL) $(SDK_CONFIG_FILE) +diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/ble_connectivity_gcc_nrf52.ld +new file mode 100644 +index 0000000..12b76c1 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/armgcc/ble_connectivity_gcc_nrf52.ld +@@ -0,0 +1,106 @@ ++/* Linker script to configure memory regions. */ ++ ++SEARCH_DIR(.) ++GROUP(-lgcc -lc -lnosys) ++ ++MEMORY ++{ ++ FLASH (rx) : ORIGIN = 0x1f000, LENGTH = 0x61000 ++ RAM (rwx) : ORIGIN = 0x2000a9c0, LENGTH = 0x5640 ++ connectivity_version_info (r) : ORIGIN = 0x50000, LENGTH = 0x18 ++} ++ ++SECTIONS ++{ ++ .connectivity_version_info : ++ { ++ PROVIDE(__start_connectivity_version_info = .); ++ KEEP(*(SORT(.connectivity_version_info*))) ++ PROVIDE(__stop_connectivity_version_info = .); ++ } > connectivity_version_info ++} ++ ++SECTIONS ++{ ++ . = ALIGN(4); ++ .mem_section_dummy_ram : ++ { ++ } ++ .log_dynamic_data : ++ { ++ PROVIDE(__start_log_dynamic_data = .); ++ KEEP(*(SORT(.log_dynamic_data*))) ++ PROVIDE(__stop_log_dynamic_data = .); ++ } > RAM ++ .log_filter_data : ++ { ++ PROVIDE(__start_log_filter_data = .); ++ KEEP(*(SORT(.log_filter_data*))) ++ PROVIDE(__stop_log_filter_data = .); ++ } > RAM ++ ++} INSERT AFTER .data; ++ ++SECTIONS ++{ ++ .mem_section_dummy_rom : ++ { ++ } ++ .sdh_ble_observers : ++ { ++ PROVIDE(__start_sdh_ble_observers = .); ++ KEEP(*(SORT(.sdh_ble_observers*))) ++ PROVIDE(__stop_sdh_ble_observers = .); ++ } > FLASH ++ .sdh_soc_observers : ++ { ++ PROVIDE(__start_sdh_soc_observers = .); ++ KEEP(*(SORT(.sdh_soc_observers*))) ++ PROVIDE(__stop_sdh_soc_observers = .); ++ } > FLASH ++ .nrf_queue : ++ { ++ PROVIDE(__start_nrf_queue = .); ++ KEEP(*(.nrf_queue)) ++ PROVIDE(__stop_nrf_queue = .); ++ } > FLASH ++ .log_const_data : ++ { ++ PROVIDE(__start_log_const_data = .); ++ KEEP(*(SORT(.log_const_data*))) ++ PROVIDE(__stop_log_const_data = .); ++ } > FLASH ++ .nrf_balloc : ++ { ++ PROVIDE(__start_nrf_balloc = .); ++ KEEP(*(.nrf_balloc)) ++ PROVIDE(__stop_nrf_balloc = .); ++ } > FLASH ++ .sdh_state_observers : ++ { ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); ++ } > FLASH ++ .sdh_stack_observers : ++ { ++ PROVIDE(__start_sdh_stack_observers = .); ++ KEEP(*(SORT(.sdh_stack_observers*))) ++ PROVIDE(__stop_sdh_stack_observers = .); ++ } > FLASH ++ .sdh_req_observers : ++ { ++ PROVIDE(__start_sdh_req_observers = .); ++ KEEP(*(SORT(.sdh_req_observers*))) ++ PROVIDE(__stop_sdh_req_observers = .); ++ } > FLASH ++ .log_backends : ++ { ++ PROVIDE(__start_log_backends = .); ++ KEEP(*(SORT(.log_backends*))) ++ PROVIDE(__stop_log_backends = .); ++ } > FLASH ++ ++} INSERT AFTER .text ++ ++INCLUDE "nrf_common.ld" +diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/config/sdk_config.h +new file mode 100644 +index 0000000..19a16d1 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/config/sdk_config.h +@@ -0,0 +1,4558 @@ ++/** ++ * Copyright (c) 2017 - 2018, Nordic Semiconductor ASA ++ * ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form, except as embedded into a Nordic ++ * Semiconductor ASA integrated circuit in a product or a software update for ++ * such product, must reproduce the above copyright notice, this list of ++ * conditions and the following disclaimer in the documentation and/or other ++ * materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its ++ * contributors may be used to endorse or promote products derived from this ++ * software without specific prior written permission. ++ * ++ * 4. This software, with or without modification, must only be used with a ++ * Nordic Semiconductor ASA integrated circuit. ++ * ++ * 5. Any software provided in binary form under this license must not be reverse ++ * engineered, decompiled, modified and/or disassembled. ++ * ++ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS ++ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE ++ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ++ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ++ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ * ++ */ ++ ++ ++ ++#ifndef SDK_CONFIG_H ++#define SDK_CONFIG_H ++// <<< Use Configuration Wizard in Context Menu >>>\n ++#ifdef USE_APP_CONFIG ++#include "app_config.h" ++#endif ++// nRF_BLE ++ ++//========================================================== ++// BLE_DTM_ENABLED - ble_dtm - Module for testing RF/PHY using DTM commands ++ ++ ++#ifndef BLE_DTM_ENABLED ++#define BLE_DTM_ENABLED 1 ++#endif ++ ++// ++//========================================================== ++ ++// nRF_Drivers ++ ++//========================================================== ++// NRFX_CLOCK_ENABLED - nrfx_clock - CLOCK peripheral driver ++//========================================================== ++#ifndef NRFX_CLOCK_ENABLED ++#define NRFX_CLOCK_ENABLED 1 ++#endif ++// NRFX_CLOCK_CONFIG_LF_SRC - LF Clock Source ++ ++// <0=> RC ++// <1=> XTAL ++// <2=> Synth ++// <131073=> External Low Swing ++// <196609=> External Full Swing ++ ++#ifndef NRFX_CLOCK_CONFIG_LF_SRC ++#define NRFX_CLOCK_CONFIG_LF_SRC 1 ++#endif ++ ++// NRFX_CLOCK_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef NRFX_CLOCK_CONFIG_IRQ_PRIORITY ++#define NRFX_CLOCK_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// NRFX_CLOCK_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRFX_CLOCK_CONFIG_LOG_ENABLED ++#define NRFX_CLOCK_CONFIG_LOG_ENABLED 0 ++#endif ++// NRFX_CLOCK_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRFX_CLOCK_CONFIG_LOG_LEVEL ++#define NRFX_CLOCK_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRFX_CLOCK_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_CLOCK_CONFIG_INFO_COLOR ++#define NRFX_CLOCK_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRFX_CLOCK_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_CLOCK_CONFIG_DEBUG_COLOR ++#define NRFX_CLOCK_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++ ++// NRFX_PRS_ENABLED - nrfx_prs - Peripheral Resource Sharing module ++//========================================================== ++#ifndef NRFX_PRS_ENABLED ++#define NRFX_PRS_ENABLED 1 ++#endif ++// NRFX_PRS_BOX_0_ENABLED - Enables box 0 in the module. ++ ++ ++#ifndef NRFX_PRS_BOX_0_ENABLED ++#define NRFX_PRS_BOX_0_ENABLED 0 ++#endif ++ ++// NRFX_PRS_BOX_1_ENABLED - Enables box 1 in the module. ++ ++ ++#ifndef NRFX_PRS_BOX_1_ENABLED ++#define NRFX_PRS_BOX_1_ENABLED 0 ++#endif ++ ++// NRFX_PRS_BOX_2_ENABLED - Enables box 2 in the module. ++ ++ ++#ifndef NRFX_PRS_BOX_2_ENABLED ++#define NRFX_PRS_BOX_2_ENABLED 0 ++#endif ++ ++// NRFX_PRS_BOX_3_ENABLED - Enables box 3 in the module. ++ ++ ++#ifndef NRFX_PRS_BOX_3_ENABLED ++#define NRFX_PRS_BOX_3_ENABLED 0 ++#endif ++ ++// NRFX_PRS_BOX_4_ENABLED - Enables box 4 in the module. ++ ++ ++#ifndef NRFX_PRS_BOX_4_ENABLED ++#define NRFX_PRS_BOX_4_ENABLED 1 ++#endif ++ ++// NRFX_PRS_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRFX_PRS_CONFIG_LOG_ENABLED ++#define NRFX_PRS_CONFIG_LOG_ENABLED 0 ++#endif ++// NRFX_PRS_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRFX_PRS_CONFIG_LOG_LEVEL ++#define NRFX_PRS_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRFX_PRS_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_PRS_CONFIG_INFO_COLOR ++#define NRFX_PRS_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRFX_PRS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_PRS_CONFIG_DEBUG_COLOR ++#define NRFX_PRS_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++ ++// NRFX_UARTE_ENABLED - nrfx_uarte - UARTE peripheral driver ++//========================================================== ++#ifndef NRFX_UARTE_ENABLED ++#define NRFX_UARTE_ENABLED 1 ++#endif ++// NRFX_UARTE0_ENABLED - Enable UARTE0 instance ++#ifndef NRFX_UARTE0_ENABLED ++#define NRFX_UARTE0_ENABLED 0 ++#endif ++ ++// NRFX_UARTE_DEFAULT_CONFIG_HWFC - Hardware Flow Control ++ ++// <0=> Disabled ++// <1=> Enabled ++ ++#ifndef NRFX_UARTE_DEFAULT_CONFIG_HWFC ++#define NRFX_UARTE_DEFAULT_CONFIG_HWFC 0 ++#endif ++ ++// NRFX_UARTE_DEFAULT_CONFIG_PARITY - Parity ++ ++// <0=> Excluded ++// <14=> Included ++ ++#ifndef NRFX_UARTE_DEFAULT_CONFIG_PARITY ++#define NRFX_UARTE_DEFAULT_CONFIG_PARITY 0 ++#endif ++ ++// NRFX_UARTE_DEFAULT_CONFIG_BAUDRATE - Default Baudrate ++ ++// <323584=> 1200 baud ++// <643072=> 2400 baud ++// <1290240=> 4800 baud ++// <2576384=> 9600 baud ++// <3862528=> 14400 baud ++// <5152768=> 19200 baud ++// <7716864=> 28800 baud ++// <8388608=> 31250 baud ++// <10289152=> 38400 baud ++// <15007744=> 56000 baud ++// <15400960=> 57600 baud ++// <20615168=> 76800 baud ++// <30801920=> 115200 baud ++// <61865984=> 230400 baud ++// <67108864=> 250000 baud ++// <121634816=> 460800 baud ++// <251658240=> 921600 baud ++// <268435456=> 1000000 baud ++ ++#ifndef NRFX_UARTE_DEFAULT_CONFIG_BAUDRATE ++#define NRFX_UARTE_DEFAULT_CONFIG_BAUDRATE 30801920 ++#endif ++ ++// NRFX_UARTE_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef NRFX_UARTE_DEFAULT_CONFIG_IRQ_PRIORITY ++#define NRFX_UARTE_DEFAULT_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// NRFX_UARTE_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRFX_UARTE_CONFIG_LOG_ENABLED ++#define NRFX_UARTE_CONFIG_LOG_ENABLED 0 ++#endif ++// NRFX_UARTE_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRFX_UARTE_CONFIG_LOG_LEVEL ++#define NRFX_UARTE_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRFX_UARTE_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_UARTE_CONFIG_INFO_COLOR ++#define NRFX_UARTE_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRFX_UARTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_UARTE_CONFIG_DEBUG_COLOR ++#define NRFX_UARTE_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++ ++// NRFX_UART_ENABLED - nrfx_uart - UART peripheral driver ++//========================================================== ++#ifndef NRFX_UART_ENABLED ++#define NRFX_UART_ENABLED 1 ++#endif ++// NRFX_UART0_ENABLED - Enable UART0 instance ++#ifndef NRFX_UART0_ENABLED ++#define NRFX_UART0_ENABLED 0 ++#endif ++ ++// NRFX_UART_DEFAULT_CONFIG_HWFC - Hardware Flow Control ++ ++// <0=> Disabled ++// <1=> Enabled ++ ++#ifndef NRFX_UART_DEFAULT_CONFIG_HWFC ++#define NRFX_UART_DEFAULT_CONFIG_HWFC 0 ++#endif ++ ++// NRFX_UART_DEFAULT_CONFIG_PARITY - Parity ++ ++// <0=> Excluded ++// <14=> Included ++ ++#ifndef NRFX_UART_DEFAULT_CONFIG_PARITY ++#define NRFX_UART_DEFAULT_CONFIG_PARITY 0 ++#endif ++ ++// NRFX_UART_DEFAULT_CONFIG_BAUDRATE - Default Baudrate ++ ++// <323584=> 1200 baud ++// <643072=> 2400 baud ++// <1290240=> 4800 baud ++// <2576384=> 9600 baud ++// <3866624=> 14400 baud ++// <5152768=> 19200 baud ++// <7729152=> 28800 baud ++// <8388608=> 31250 baud ++// <10309632=> 38400 baud ++// <15007744=> 56000 baud ++// <15462400=> 57600 baud ++// <20615168=> 76800 baud ++// <30924800=> 115200 baud ++// <61845504=> 230400 baud ++// <67108864=> 250000 baud ++// <123695104=> 460800 baud ++// <247386112=> 921600 baud ++// <268435456=> 1000000 baud ++ ++#ifndef NRFX_UART_DEFAULT_CONFIG_BAUDRATE ++#define NRFX_UART_DEFAULT_CONFIG_BAUDRATE 30924800 ++#endif ++ ++// NRFX_UART_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef NRFX_UART_DEFAULT_CONFIG_IRQ_PRIORITY ++#define NRFX_UART_DEFAULT_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// NRFX_UART_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRFX_UART_CONFIG_LOG_ENABLED ++#define NRFX_UART_CONFIG_LOG_ENABLED 0 ++#endif ++// NRFX_UART_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRFX_UART_CONFIG_LOG_LEVEL ++#define NRFX_UART_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRFX_UART_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_UART_CONFIG_INFO_COLOR ++#define NRFX_UART_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRFX_UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_UART_CONFIG_DEBUG_COLOR ++#define NRFX_UART_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++ ++// NRF_CLOCK_ENABLED - nrf_drv_clock - CLOCK peripheral driver - legacy layer ++//========================================================== ++#ifndef NRF_CLOCK_ENABLED ++#define NRF_CLOCK_ENABLED 1 ++#endif ++// CLOCK_CONFIG_LF_SRC - LF Clock Source ++ ++// <0=> RC ++// <1=> XTAL ++// <2=> Synth ++// <131073=> External Low Swing ++// <196609=> External Full Swing ++ ++#ifndef CLOCK_CONFIG_LF_SRC ++#define CLOCK_CONFIG_LF_SRC 1 ++#endif ++ ++// CLOCK_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef CLOCK_CONFIG_IRQ_PRIORITY ++#define CLOCK_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ ++// QSPI_ENABLED - nrf_drv_qspi - QSPI peripheral driver - legacy layer ++//========================================================== ++#ifndef QSPI_ENABLED ++#define QSPI_ENABLED 0 ++#endif ++// QSPI_CONFIG_SCK_DELAY - tSHSL, tWHSL and tSHWL in number of 16 MHz periods (62.5 ns). <0-255> ++ ++ ++#ifndef QSPI_CONFIG_SCK_DELAY ++#define QSPI_CONFIG_SCK_DELAY 1 ++#endif ++ ++// QSPI_CONFIG_XIP_OFFSET - Address offset in the external memory for Execute in Place operation. ++#ifndef QSPI_CONFIG_XIP_OFFSET ++#define QSPI_CONFIG_XIP_OFFSET 0 ++#endif ++ ++// QSPI_CONFIG_READOC - Number of data lines and opcode used for reading. ++ ++// <0=> FastRead ++// <1=> Read2O ++// <2=> Read2IO ++// <3=> Read4O ++// <4=> Read4IO ++ ++#ifndef QSPI_CONFIG_READOC ++#define QSPI_CONFIG_READOC 0 ++#endif ++ ++// QSPI_CONFIG_WRITEOC - Number of data lines and opcode used for writing. ++ ++// <0=> PP ++// <1=> PP2O ++// <2=> PP4O ++// <3=> PP4IO ++ ++#ifndef QSPI_CONFIG_WRITEOC ++#define QSPI_CONFIG_WRITEOC 0 ++#endif ++ ++// QSPI_CONFIG_ADDRMODE - Addressing mode. ++ ++// <0=> 24bit ++// <1=> 32bit ++ ++#ifndef QSPI_CONFIG_ADDRMODE ++#define QSPI_CONFIG_ADDRMODE 0 ++#endif ++ ++// QSPI_CONFIG_MODE - SPI mode. ++ ++// <0=> Mode 0 ++// <1=> Mode 1 ++ ++#ifndef QSPI_CONFIG_MODE ++#define QSPI_CONFIG_MODE 0 ++#endif ++ ++// QSPI_CONFIG_FREQUENCY - Frequency divider. ++ ++// <0=> 32MHz/1 ++// <1=> 32MHz/2 ++// <2=> 32MHz/3 ++// <3=> 32MHz/4 ++// <4=> 32MHz/5 ++// <5=> 32MHz/6 ++// <6=> 32MHz/7 ++// <7=> 32MHz/8 ++// <8=> 32MHz/9 ++// <9=> 32MHz/10 ++// <10=> 32MHz/11 ++// <11=> 32MHz/12 ++// <12=> 32MHz/13 ++// <13=> 32MHz/14 ++// <14=> 32MHz/15 ++// <15=> 32MHz/16 ++ ++#ifndef QSPI_CONFIG_FREQUENCY ++#define QSPI_CONFIG_FREQUENCY 15 ++#endif ++ ++// QSPI_PIN_SCK - SCK pin value. ++#ifndef QSPI_PIN_SCK ++#define QSPI_PIN_SCK NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_CSN - CSN pin value. ++#ifndef QSPI_PIN_CSN ++#define QSPI_PIN_CSN NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO0 - IO0 pin value. ++#ifndef QSPI_PIN_IO0 ++#define QSPI_PIN_IO0 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO1 - IO1 pin value. ++#ifndef QSPI_PIN_IO1 ++#define QSPI_PIN_IO1 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO2 - IO2 pin value. ++#ifndef QSPI_PIN_IO2 ++#define QSPI_PIN_IO2 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO3 - IO3 pin value. ++#ifndef QSPI_PIN_IO3 ++#define QSPI_PIN_IO3 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef QSPI_CONFIG_IRQ_PRIORITY ++#define QSPI_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ ++// UART_ENABLED - nrf_drv_uart - UART/UARTE peripheral driver - legacy layer ++//========================================================== ++#ifndef UART_ENABLED ++#define UART_ENABLED 1 ++#endif ++// UART_DEFAULT_CONFIG_HWFC - Hardware Flow Control ++ ++// <0=> Disabled ++// <1=> Enabled ++ ++#ifndef UART_DEFAULT_CONFIG_HWFC ++#define UART_DEFAULT_CONFIG_HWFC 0 ++#endif ++ ++// UART_DEFAULT_CONFIG_PARITY - Parity ++ ++// <0=> Excluded ++// <14=> Included ++ ++#ifndef UART_DEFAULT_CONFIG_PARITY ++#define UART_DEFAULT_CONFIG_PARITY 0 ++#endif ++ ++// UART_DEFAULT_CONFIG_BAUDRATE - Default Baudrate ++ ++// <323584=> 1200 baud ++// <643072=> 2400 baud ++// <1290240=> 4800 baud ++// <2576384=> 9600 baud ++// <3862528=> 14400 baud ++// <5152768=> 19200 baud ++// <7716864=> 28800 baud ++// <10289152=> 38400 baud ++// <15400960=> 57600 baud ++// <20615168=> 76800 baud ++// <30801920=> 115200 baud ++// <61865984=> 230400 baud ++// <67108864=> 250000 baud ++// <121634816=> 460800 baud ++// <251658240=> 921600 baud ++// <268435456=> 1000000 baud ++ ++#ifndef UART_DEFAULT_CONFIG_BAUDRATE ++#define UART_DEFAULT_CONFIG_BAUDRATE 30801920 ++#endif ++ ++// UART_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef UART_DEFAULT_CONFIG_IRQ_PRIORITY ++#define UART_DEFAULT_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// UART_EASY_DMA_SUPPORT - Driver supporting EasyDMA ++ ++ ++#ifndef UART_EASY_DMA_SUPPORT ++#define UART_EASY_DMA_SUPPORT 1 ++#endif ++ ++// UART_LEGACY_SUPPORT - Driver supporting Legacy mode ++ ++ ++#ifndef UART_LEGACY_SUPPORT ++#define UART_LEGACY_SUPPORT 1 ++#endif ++ ++// UART0_ENABLED - Enable UART0 instance ++//========================================================== ++#ifndef UART0_ENABLED ++#define UART0_ENABLED 1 ++#endif ++// UART0_CONFIG_USE_EASY_DMA - Default setting for using EasyDMA ++ ++ ++#ifndef UART0_CONFIG_USE_EASY_DMA ++#define UART0_CONFIG_USE_EASY_DMA 1 ++#endif ++ ++// ++ ++// ++ ++// ++//========================================================== ++ ++// nRF_Libraries ++ ++//========================================================== ++// APP_SCHEDULER_ENABLED - app_scheduler - Events scheduler ++//========================================================== ++#ifndef APP_SCHEDULER_ENABLED ++#define APP_SCHEDULER_ENABLED 1 ++#endif ++// APP_SCHEDULER_WITH_PAUSE - Enabling pause feature ++ ++ ++#ifndef APP_SCHEDULER_WITH_PAUSE ++#define APP_SCHEDULER_WITH_PAUSE 1 ++#endif ++ ++// APP_SCHEDULER_WITH_PROFILER - Enabling scheduler profiling ++ ++ ++#ifndef APP_SCHEDULER_WITH_PROFILER ++#define APP_SCHEDULER_WITH_PROFILER 1 ++#endif ++ ++// ++ ++// APP_TIMER_ENABLED - app_timer - Application timer functionality ++//========================================================== ++#ifndef APP_TIMER_ENABLED ++#define APP_TIMER_ENABLED 1 ++#endif ++// APP_TIMER_CONFIG_RTC_FREQUENCY - Configure RTC prescaler. ++ ++// <0=> 32768 Hz ++// <1=> 16384 Hz ++// <3=> 8192 Hz ++// <7=> 4096 Hz ++// <15=> 2048 Hz ++// <31=> 1024 Hz ++ ++#ifndef APP_TIMER_CONFIG_RTC_FREQUENCY ++#define APP_TIMER_CONFIG_RTC_FREQUENCY 0 ++#endif ++ ++// APP_TIMER_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef APP_TIMER_CONFIG_IRQ_PRIORITY ++#define APP_TIMER_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// APP_TIMER_CONFIG_OP_QUEUE_SIZE - Capacity of timer requests queue. ++// Size of the queue depends on how many timers are used ++// in the system, how often timers are started and overall ++// system latency. If queue size is too small app_timer calls ++// will fail. ++ ++#ifndef APP_TIMER_CONFIG_OP_QUEUE_SIZE ++#define APP_TIMER_CONFIG_OP_QUEUE_SIZE 10 ++#endif ++ ++// APP_TIMER_CONFIG_USE_SCHEDULER - Enable scheduling app_timer events to app_scheduler ++ ++ ++#ifndef APP_TIMER_CONFIG_USE_SCHEDULER ++#define APP_TIMER_CONFIG_USE_SCHEDULER 0 ++#endif ++ ++// APP_TIMER_KEEPS_RTC_ACTIVE - Enable RTC always on ++ ++ ++// If option is enabled RTC is kept running even if there is no active timers. ++// This option can be used when app_timer is used for timestamping. ++ ++#ifndef APP_TIMER_KEEPS_RTC_ACTIVE ++#define APP_TIMER_KEEPS_RTC_ACTIVE 0 ++#endif ++ ++// APP_TIMER_SAFE_WINDOW_MS - Maximum possible latency (in milliseconds) of handling app_timer event. ++// Maximum possible timeout that can be set is reduced by safe window. ++// Example: RTC frequency 16384 Hz, maximum possible timeout 1024 seconds - APP_TIMER_SAFE_WINDOW_MS. ++// Since RTC is not stopped when processor is halted in debugging session, this value ++// must cover it if debugging is needed. It is possible to halt processor for APP_TIMER_SAFE_WINDOW_MS ++// without corrupting app_timer behavior. ++ ++#ifndef APP_TIMER_SAFE_WINDOW_MS ++#define APP_TIMER_SAFE_WINDOW_MS 300000 ++#endif ++ ++// App Timer Legacy configuration - Legacy configuration. ++ ++//========================================================== ++// APP_TIMER_WITH_PROFILER - Enable app_timer profiling ++ ++ ++#ifndef APP_TIMER_WITH_PROFILER ++#define APP_TIMER_WITH_PROFILER 0 ++#endif ++ ++// APP_TIMER_CONFIG_SWI_NUMBER - Configure SWI instance used. ++ ++ ++#ifndef APP_TIMER_CONFIG_SWI_NUMBER ++#define APP_TIMER_CONFIG_SWI_NUMBER 0 ++#endif ++ ++// ++//========================================================== ++ ++// ++ ++// CRC16_ENABLED - crc16 - CRC16 calculation routines ++ ++ ++#ifndef CRC16_ENABLED ++#define CRC16_ENABLED 1 ++#endif ++ ++// NRF_BALLOC_ENABLED - nrf_balloc - Block allocator module ++//========================================================== ++#ifndef NRF_BALLOC_ENABLED ++#define NRF_BALLOC_ENABLED 1 ++#endif ++// NRF_BALLOC_CONFIG_DEBUG_ENABLED - Enables debug mode in the module. ++//========================================================== ++#ifndef NRF_BALLOC_CONFIG_DEBUG_ENABLED ++#define NRF_BALLOC_CONFIG_DEBUG_ENABLED 0 ++#endif ++// NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS - Number of words used as head guard. <0-255> ++ ++ ++#ifndef NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS ++#define NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS 1 ++#endif ++ ++// NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS - Number of words used as tail guard. <0-255> ++ ++ ++#ifndef NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS ++#define NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS 1 ++#endif ++ ++// NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED - Enables basic checks in this module. ++ ++ ++#ifndef NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED ++#define NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED 0 ++#endif ++ ++// NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED - Enables double memory free check in this module. ++ ++ ++#ifndef NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED ++#define NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED 0 ++#endif ++ ++// NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED - Enables free memory corruption check in this module. ++ ++ ++#ifndef NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED ++#define NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED 0 ++#endif ++ ++// NRF_BALLOC_CLI_CMDS - Enable CLI commands specific to the module ++ ++ ++#ifndef NRF_BALLOC_CLI_CMDS ++#define NRF_BALLOC_CLI_CMDS 0 ++#endif ++ ++// ++ ++// ++ ++// NRF_FPRINTF_ENABLED - nrf_fprintf - fprintf function. ++ ++ ++#ifndef NRF_FPRINTF_ENABLED ++#define NRF_FPRINTF_ENABLED 1 ++#endif ++ ++// NRF_MEMOBJ_ENABLED - nrf_memobj - Linked memory allocator module ++ ++ ++#ifndef NRF_MEMOBJ_ENABLED ++#define NRF_MEMOBJ_ENABLED 1 ++#endif ++ ++// NRF_QUEUE_ENABLED - nrf_queue - Queue module ++//========================================================== ++#ifndef NRF_QUEUE_ENABLED ++#define NRF_QUEUE_ENABLED 1 ++#endif ++// NRF_QUEUE_CLI_CMDS - Enable CLI commands specific to the module ++ ++ ++#ifndef NRF_QUEUE_CLI_CMDS ++#define NRF_QUEUE_CLI_CMDS 0 ++#endif ++ ++// ++ ++// NRF_SECTION_ITER_ENABLED - nrf_section_iter - Section iterator ++ ++ ++#ifndef NRF_SECTION_ITER_ENABLED ++#define NRF_SECTION_ITER_ENABLED 1 ++#endif ++ ++// NRF_STRERROR_ENABLED - nrf_strerror - Library for converting error code to string. ++ ++ ++#ifndef NRF_STRERROR_ENABLED ++#define NRF_STRERROR_ENABLED 1 ++#endif ++ ++// ++//========================================================== ++ ++// nRF_Log ++ ++//========================================================== ++// NRF_LOG_BACKEND_RTT_ENABLED - nrf_log_backend_rtt - Log RTT backend ++//========================================================== ++#ifndef NRF_LOG_BACKEND_RTT_ENABLED ++#define NRF_LOG_BACKEND_RTT_ENABLED 0 ++#endif ++// NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE - Size of buffer for partially processed strings. ++// Size of the buffer is a trade-off between RAM usage and processing. ++// if buffer is smaller then strings will often be fragmented. ++// It is recommended to use size which will fit typical log and only the ++// longer one will be fragmented. ++ ++#ifndef NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE ++#define NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE 64 ++#endif ++ ++// NRF_LOG_BACKEND_RTT_TX_RETRY_DELAY_MS - Period before retrying writing to RTT ++#ifndef NRF_LOG_BACKEND_RTT_TX_RETRY_DELAY_MS ++#define NRF_LOG_BACKEND_RTT_TX_RETRY_DELAY_MS 1 ++#endif ++ ++// NRF_LOG_BACKEND_RTT_TX_RETRY_CNT - Writing to RTT retries. ++// If RTT fails to accept any new data after retries ++// module assumes that host is not active and on next ++// request it will perform only one write attempt. ++// On successful writing, module assumes that host is active ++// and scheme with retry is applied again. ++ ++#ifndef NRF_LOG_BACKEND_RTT_TX_RETRY_CNT ++#define NRF_LOG_BACKEND_RTT_TX_RETRY_CNT 3 ++#endif ++ ++// ++ ++// NRF_LOG_BACKEND_UART_ENABLED - nrf_log_backend_uart - Log UART backend ++//========================================================== ++#ifndef NRF_LOG_BACKEND_UART_ENABLED ++#define NRF_LOG_BACKEND_UART_ENABLED 0 ++#endif ++// NRF_LOG_BACKEND_UART_TX_PIN - UART TX pin ++#ifndef NRF_LOG_BACKEND_UART_TX_PIN ++#define NRF_LOG_BACKEND_UART_TX_PIN 6 ++#endif ++ ++// NRF_LOG_BACKEND_UART_BAUDRATE - Default Baudrate ++ ++// <323584=> 1200 baud ++// <643072=> 2400 baud ++// <1290240=> 4800 baud ++// <2576384=> 9600 baud ++// <3862528=> 14400 baud ++// <5152768=> 19200 baud ++// <7716864=> 28800 baud ++// <10289152=> 38400 baud ++// <15400960=> 57600 baud ++// <20615168=> 76800 baud ++// <30801920=> 115200 baud ++// <61865984=> 230400 baud ++// <67108864=> 250000 baud ++// <121634816=> 460800 baud ++// <251658240=> 921600 baud ++// <268435456=> 1000000 baud ++ ++#ifndef NRF_LOG_BACKEND_UART_BAUDRATE ++#define NRF_LOG_BACKEND_UART_BAUDRATE 30801920 ++#endif ++ ++// NRF_LOG_BACKEND_UART_TEMP_BUFFER_SIZE - Size of buffer for partially processed strings. ++// Size of the buffer is a trade-off between RAM usage and processing. ++// if buffer is smaller then strings will often be fragmented. ++// It is recommended to use size which will fit typical log and only the ++// longer one will be fragmented. ++ ++#ifndef NRF_LOG_BACKEND_UART_TEMP_BUFFER_SIZE ++#define NRF_LOG_BACKEND_UART_TEMP_BUFFER_SIZE 64 ++#endif ++ ++// ++ ++// NRF_LOG_ENABLED - nrf_log - Logger ++//========================================================== ++#ifndef NRF_LOG_ENABLED ++#define NRF_LOG_ENABLED 0 ++#endif ++// Log message pool - Configuration of log message pool ++ ++//========================================================== ++// NRF_LOG_MSGPOOL_ELEMENT_SIZE - Size of a single element in the pool of memory objects. ++// If a small value is set, then performance of logs processing ++// is degraded because data is fragmented. Bigger value impacts ++// RAM memory utilization. The size is set to fit a message with ++// a timestamp and up to 2 arguments in a single memory object. ++ ++#ifndef NRF_LOG_MSGPOOL_ELEMENT_SIZE ++#define NRF_LOG_MSGPOOL_ELEMENT_SIZE 20 ++#endif ++ ++// NRF_LOG_MSGPOOL_ELEMENT_COUNT - Number of elements in the pool of memory objects ++// If a small value is set, then it may lead to a deadlock ++// in certain cases if backend has high latency and holds ++// multiple messages for long time. Bigger value impacts ++// RAM memory usage. ++ ++#ifndef NRF_LOG_MSGPOOL_ELEMENT_COUNT ++#define NRF_LOG_MSGPOOL_ELEMENT_COUNT 8 ++#endif ++ ++// ++//========================================================== ++ ++// NRF_LOG_ALLOW_OVERFLOW - Configures behavior when circular buffer is full. ++ ++ ++// If set then oldest logs are overwritten. Otherwise a ++// marker is injected informing about overflow. ++ ++#ifndef NRF_LOG_ALLOW_OVERFLOW ++#define NRF_LOG_ALLOW_OVERFLOW 1 ++#endif ++ ++// NRF_LOG_BUFSIZE - Size of the buffer for storing logs (in bytes). ++ ++ ++// Must be power of 2 and multiple of 4. ++// If NRF_LOG_DEFERRED = 0 then buffer size can be reduced to minimum. ++// <128=> 128 ++// <256=> 256 ++// <512=> 512 ++// <1024=> 1024 ++// <2048=> 2048 ++// <4096=> 4096 ++// <8192=> 8192 ++// <16384=> 16384 ++ ++#ifndef NRF_LOG_BUFSIZE ++#define NRF_LOG_BUFSIZE 1024 ++#endif ++ ++// NRF_LOG_CLI_CMDS - Enable CLI commands for the module. ++ ++ ++#ifndef NRF_LOG_CLI_CMDS ++#define NRF_LOG_CLI_CMDS 0 ++#endif ++ ++// NRF_LOG_DEFAULT_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_LOG_DEFAULT_LEVEL ++#define NRF_LOG_DEFAULT_LEVEL 3 ++#endif ++ ++// NRF_LOG_DEFERRED - Enable deffered logger. ++ ++ ++// Log data is buffered and can be processed in idle. ++ ++#ifndef NRF_LOG_DEFERRED ++#define NRF_LOG_DEFERRED 1 ++#endif ++ ++// NRF_LOG_FILTERS_ENABLED - Enable dynamic filtering of logs. ++ ++ ++#ifndef NRF_LOG_FILTERS_ENABLED ++#define NRF_LOG_FILTERS_ENABLED 0 ++#endif ++ ++// NRF_LOG_STR_PUSH_BUFFER_SIZE - Size of the buffer dedicated for strings stored using @ref NRF_LOG_PUSH. ++ ++// <16=> 16 ++// <32=> 32 ++// <64=> 64 ++// <128=> 128 ++// <256=> 256 ++// <512=> 512 ++// <1024=> 1024 ++ ++#ifndef NRF_LOG_STR_PUSH_BUFFER_SIZE ++#define NRF_LOG_STR_PUSH_BUFFER_SIZE 128 ++#endif ++ ++// NRF_LOG_STR_PUSH_BUFFER_SIZE - Size of the buffer dedicated for strings stored using @ref NRF_LOG_PUSH. ++ ++// <16=> 16 ++// <32=> 32 ++// <64=> 64 ++// <128=> 128 ++// <256=> 256 ++// <512=> 512 ++// <1024=> 1024 ++ ++#ifndef NRF_LOG_STR_PUSH_BUFFER_SIZE ++#define NRF_LOG_STR_PUSH_BUFFER_SIZE 128 ++#endif ++ ++// NRF_LOG_USES_COLORS - If enabled then ANSI escape code for colors is prefixed to every string ++//========================================================== ++#ifndef NRF_LOG_USES_COLORS ++#define NRF_LOG_USES_COLORS 0 ++#endif ++// NRF_LOG_COLOR_DEFAULT - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_LOG_COLOR_DEFAULT ++#define NRF_LOG_COLOR_DEFAULT 0 ++#endif ++ ++// NRF_LOG_ERROR_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_LOG_ERROR_COLOR ++#define NRF_LOG_ERROR_COLOR 2 ++#endif ++ ++// NRF_LOG_WARNING_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_LOG_WARNING_COLOR ++#define NRF_LOG_WARNING_COLOR 4 ++#endif ++ ++// ++ ++// NRF_LOG_USES_TIMESTAMP - Enable timestamping ++ ++// Function for getting the timestamp is provided by the user ++//========================================================== ++#ifndef NRF_LOG_USES_TIMESTAMP ++#define NRF_LOG_USES_TIMESTAMP 0 ++#endif ++// NRF_LOG_TIMESTAMP_DEFAULT_FREQUENCY - Default frequency of the timestamp (in Hz) or 0 to use app_timer frequency. ++#ifndef NRF_LOG_TIMESTAMP_DEFAULT_FREQUENCY ++#define NRF_LOG_TIMESTAMP_DEFAULT_FREQUENCY 0 ++#endif ++ ++// ++ ++// nrf_log module configuration ++ ++//========================================================== ++// nrf_log in nRF_Core ++ ++//========================================================== ++// NRF_MPU_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_MPU_CONFIG_LOG_ENABLED ++#define NRF_MPU_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_MPU_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_MPU_CONFIG_LOG_LEVEL ++#define NRF_MPU_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_MPU_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_MPU_CONFIG_INFO_COLOR ++#define NRF_MPU_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_MPU_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_MPU_CONFIG_DEBUG_COLOR ++#define NRF_MPU_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_STACK_GUARD_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_STACK_GUARD_CONFIG_LOG_ENABLED ++#define NRF_STACK_GUARD_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_STACK_GUARD_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_STACK_GUARD_CONFIG_LOG_LEVEL ++#define NRF_STACK_GUARD_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_STACK_GUARD_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_STACK_GUARD_CONFIG_INFO_COLOR ++#define NRF_STACK_GUARD_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_STACK_GUARD_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_STACK_GUARD_CONFIG_DEBUG_COLOR ++#define NRF_STACK_GUARD_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// TASK_MANAGER_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef TASK_MANAGER_CONFIG_LOG_ENABLED ++#define TASK_MANAGER_CONFIG_LOG_ENABLED 0 ++#endif ++// TASK_MANAGER_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef TASK_MANAGER_CONFIG_LOG_LEVEL ++#define TASK_MANAGER_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// TASK_MANAGER_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TASK_MANAGER_CONFIG_INFO_COLOR ++#define TASK_MANAGER_CONFIG_INFO_COLOR 0 ++#endif ++ ++// TASK_MANAGER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TASK_MANAGER_CONFIG_DEBUG_COLOR ++#define TASK_MANAGER_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++//========================================================== ++ ++// nrf_log in nRF_Drivers ++ ++//========================================================== ++// CLOCK_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef CLOCK_CONFIG_LOG_ENABLED ++#define CLOCK_CONFIG_LOG_ENABLED 0 ++#endif ++// CLOCK_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef CLOCK_CONFIG_LOG_LEVEL ++#define CLOCK_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// CLOCK_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef CLOCK_CONFIG_INFO_COLOR ++#define CLOCK_CONFIG_INFO_COLOR 0 ++#endif ++ ++// CLOCK_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef CLOCK_CONFIG_DEBUG_COLOR ++#define CLOCK_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// COMP_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef COMP_CONFIG_LOG_ENABLED ++#define COMP_CONFIG_LOG_ENABLED 0 ++#endif ++// COMP_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef COMP_CONFIG_LOG_LEVEL ++#define COMP_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// COMP_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef COMP_CONFIG_INFO_COLOR ++#define COMP_CONFIG_INFO_COLOR 0 ++#endif ++ ++// COMP_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef COMP_CONFIG_DEBUG_COLOR ++#define COMP_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// GPIOTE_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef GPIOTE_CONFIG_LOG_ENABLED ++#define GPIOTE_CONFIG_LOG_ENABLED 0 ++#endif ++// GPIOTE_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef GPIOTE_CONFIG_LOG_LEVEL ++#define GPIOTE_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// GPIOTE_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef GPIOTE_CONFIG_INFO_COLOR ++#define GPIOTE_CONFIG_INFO_COLOR 0 ++#endif ++ ++// GPIOTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef GPIOTE_CONFIG_DEBUG_COLOR ++#define GPIOTE_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// LPCOMP_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef LPCOMP_CONFIG_LOG_ENABLED ++#define LPCOMP_CONFIG_LOG_ENABLED 0 ++#endif ++// LPCOMP_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef LPCOMP_CONFIG_LOG_LEVEL ++#define LPCOMP_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// LPCOMP_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef LPCOMP_CONFIG_INFO_COLOR ++#define LPCOMP_CONFIG_INFO_COLOR 0 ++#endif ++ ++// LPCOMP_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef LPCOMP_CONFIG_DEBUG_COLOR ++#define LPCOMP_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// MAX3421E_HOST_CONFIG_LOG_ENABLED - Enable logging in the module ++//========================================================== ++#ifndef MAX3421E_HOST_CONFIG_LOG_ENABLED ++#define MAX3421E_HOST_CONFIG_LOG_ENABLED 0 ++#endif ++// MAX3421E_HOST_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef MAX3421E_HOST_CONFIG_LOG_LEVEL ++#define MAX3421E_HOST_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// MAX3421E_HOST_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef MAX3421E_HOST_CONFIG_INFO_COLOR ++#define MAX3421E_HOST_CONFIG_INFO_COLOR 0 ++#endif ++ ++// MAX3421E_HOST_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef MAX3421E_HOST_CONFIG_DEBUG_COLOR ++#define MAX3421E_HOST_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// PDM_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef PDM_CONFIG_LOG_ENABLED ++#define PDM_CONFIG_LOG_ENABLED 0 ++#endif ++// PDM_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef PDM_CONFIG_LOG_LEVEL ++#define PDM_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// PDM_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PDM_CONFIG_INFO_COLOR ++#define PDM_CONFIG_INFO_COLOR 0 ++#endif ++ ++// PDM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PDM_CONFIG_DEBUG_COLOR ++#define PDM_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// PPI_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef PPI_CONFIG_LOG_ENABLED ++#define PPI_CONFIG_LOG_ENABLED 0 ++#endif ++// PPI_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef PPI_CONFIG_LOG_LEVEL ++#define PPI_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// PPI_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PPI_CONFIG_INFO_COLOR ++#define PPI_CONFIG_INFO_COLOR 0 ++#endif ++ ++// PPI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PPI_CONFIG_DEBUG_COLOR ++#define PPI_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// PWM_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef PWM_CONFIG_LOG_ENABLED ++#define PWM_CONFIG_LOG_ENABLED 0 ++#endif ++// PWM_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef PWM_CONFIG_LOG_LEVEL ++#define PWM_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// PWM_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PWM_CONFIG_INFO_COLOR ++#define PWM_CONFIG_INFO_COLOR 0 ++#endif ++ ++// PWM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PWM_CONFIG_DEBUG_COLOR ++#define PWM_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// QDEC_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef QDEC_CONFIG_LOG_ENABLED ++#define QDEC_CONFIG_LOG_ENABLED 0 ++#endif ++// QDEC_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef QDEC_CONFIG_LOG_LEVEL ++#define QDEC_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// QDEC_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef QDEC_CONFIG_INFO_COLOR ++#define QDEC_CONFIG_INFO_COLOR 0 ++#endif ++ ++// QDEC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef QDEC_CONFIG_DEBUG_COLOR ++#define QDEC_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// RNG_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef RNG_CONFIG_LOG_ENABLED ++#define RNG_CONFIG_LOG_ENABLED 0 ++#endif ++// RNG_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef RNG_CONFIG_LOG_LEVEL ++#define RNG_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// RNG_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef RNG_CONFIG_INFO_COLOR ++#define RNG_CONFIG_INFO_COLOR 0 ++#endif ++ ++// RNG_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef RNG_CONFIG_DEBUG_COLOR ++#define RNG_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED - Enables logging of random numbers. ++ ++ ++#ifndef RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED ++#define RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED 0 ++#endif ++ ++// ++ ++// RTC_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef RTC_CONFIG_LOG_ENABLED ++#define RTC_CONFIG_LOG_ENABLED 0 ++#endif ++// RTC_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef RTC_CONFIG_LOG_LEVEL ++#define RTC_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// RTC_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef RTC_CONFIG_INFO_COLOR ++#define RTC_CONFIG_INFO_COLOR 0 ++#endif ++ ++// RTC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef RTC_CONFIG_DEBUG_COLOR ++#define RTC_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// SAADC_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef SAADC_CONFIG_LOG_ENABLED ++#define SAADC_CONFIG_LOG_ENABLED 0 ++#endif ++// SAADC_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef SAADC_CONFIG_LOG_LEVEL ++#define SAADC_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// SAADC_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SAADC_CONFIG_INFO_COLOR ++#define SAADC_CONFIG_INFO_COLOR 0 ++#endif ++ ++// SAADC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SAADC_CONFIG_DEBUG_COLOR ++#define SAADC_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// SPIS_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef SPIS_CONFIG_LOG_ENABLED ++#define SPIS_CONFIG_LOG_ENABLED 0 ++#endif ++// SPIS_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef SPIS_CONFIG_LOG_LEVEL ++#define SPIS_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// SPIS_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SPIS_CONFIG_INFO_COLOR ++#define SPIS_CONFIG_INFO_COLOR 0 ++#endif ++ ++// SPIS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SPIS_CONFIG_DEBUG_COLOR ++#define SPIS_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// SPI_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef SPI_CONFIG_LOG_ENABLED ++#define SPI_CONFIG_LOG_ENABLED 0 ++#endif ++// SPI_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef SPI_CONFIG_LOG_LEVEL ++#define SPI_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// SPI_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SPI_CONFIG_INFO_COLOR ++#define SPI_CONFIG_INFO_COLOR 0 ++#endif ++ ++// SPI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SPI_CONFIG_DEBUG_COLOR ++#define SPI_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// TIMER_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef TIMER_CONFIG_LOG_ENABLED ++#define TIMER_CONFIG_LOG_ENABLED 0 ++#endif ++// TIMER_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef TIMER_CONFIG_LOG_LEVEL ++#define TIMER_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// TIMER_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TIMER_CONFIG_INFO_COLOR ++#define TIMER_CONFIG_INFO_COLOR 0 ++#endif ++ ++// TIMER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TIMER_CONFIG_DEBUG_COLOR ++#define TIMER_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// TWIS_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef TWIS_CONFIG_LOG_ENABLED ++#define TWIS_CONFIG_LOG_ENABLED 0 ++#endif ++// TWIS_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef TWIS_CONFIG_LOG_LEVEL ++#define TWIS_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// TWIS_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TWIS_CONFIG_INFO_COLOR ++#define TWIS_CONFIG_INFO_COLOR 0 ++#endif ++ ++// TWIS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TWIS_CONFIG_DEBUG_COLOR ++#define TWIS_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// TWI_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef TWI_CONFIG_LOG_ENABLED ++#define TWI_CONFIG_LOG_ENABLED 0 ++#endif ++// TWI_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef TWI_CONFIG_LOG_LEVEL ++#define TWI_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// TWI_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TWI_CONFIG_INFO_COLOR ++#define TWI_CONFIG_INFO_COLOR 0 ++#endif ++ ++// TWI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TWI_CONFIG_DEBUG_COLOR ++#define TWI_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// UART_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef UART_CONFIG_LOG_ENABLED ++#define UART_CONFIG_LOG_ENABLED 0 ++#endif ++// UART_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef UART_CONFIG_LOG_LEVEL ++#define UART_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// UART_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef UART_CONFIG_INFO_COLOR ++#define UART_CONFIG_INFO_COLOR 0 ++#endif ++ ++// UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef UART_CONFIG_DEBUG_COLOR ++#define UART_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// USBD_CONFIG_LOG_ENABLED - Enable logging in the module ++//========================================================== ++#ifndef USBD_CONFIG_LOG_ENABLED ++#define USBD_CONFIG_LOG_ENABLED 0 ++#endif ++// USBD_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef USBD_CONFIG_LOG_LEVEL ++#define USBD_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// USBD_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef USBD_CONFIG_INFO_COLOR ++#define USBD_CONFIG_INFO_COLOR 0 ++#endif ++ ++// USBD_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef USBD_CONFIG_DEBUG_COLOR ++#define USBD_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// WDT_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef WDT_CONFIG_LOG_ENABLED ++#define WDT_CONFIG_LOG_ENABLED 0 ++#endif ++// WDT_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef WDT_CONFIG_LOG_LEVEL ++#define WDT_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// WDT_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef WDT_CONFIG_INFO_COLOR ++#define WDT_CONFIG_INFO_COLOR 0 ++#endif ++ ++// WDT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef WDT_CONFIG_DEBUG_COLOR ++#define WDT_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++//========================================================== ++ ++// nrf_log in nRF_Libraries ++ ++//========================================================== ++// APP_TIMER_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef APP_TIMER_CONFIG_LOG_ENABLED ++#define APP_TIMER_CONFIG_LOG_ENABLED 0 ++#endif ++// APP_TIMER_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_TIMER_CONFIG_LOG_LEVEL ++#define APP_TIMER_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// APP_TIMER_CONFIG_INITIAL_LOG_LEVEL - Initial severity level if dynamic filtering is enabled. ++ ++ ++// If module generates a lot of logs, initial log level can ++// be decreased to prevent flooding. Severity level can be ++// increased on instance basis. ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_TIMER_CONFIG_INITIAL_LOG_LEVEL ++#define APP_TIMER_CONFIG_INITIAL_LOG_LEVEL 3 ++#endif ++ ++// APP_TIMER_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_TIMER_CONFIG_INFO_COLOR ++#define APP_TIMER_CONFIG_INFO_COLOR 0 ++#endif ++ ++// APP_TIMER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_TIMER_CONFIG_DEBUG_COLOR ++#define APP_TIMER_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// APP_USBD_CDC_ACM_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef APP_USBD_CDC_ACM_CONFIG_LOG_ENABLED ++#define APP_USBD_CDC_ACM_CONFIG_LOG_ENABLED 0 ++#endif ++// APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL ++#define APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// APP_USBD_CDC_ACM_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_CDC_ACM_CONFIG_INFO_COLOR ++#define APP_USBD_CDC_ACM_CONFIG_INFO_COLOR 0 ++#endif ++ ++// APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR ++#define APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// APP_USBD_CONFIG_LOG_ENABLED - Enable logging in the module. ++//========================================================== ++#ifndef APP_USBD_CONFIG_LOG_ENABLED ++#define APP_USBD_CONFIG_LOG_ENABLED 0 ++#endif ++// APP_USBD_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_USBD_CONFIG_LOG_LEVEL ++#define APP_USBD_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// APP_USBD_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_CONFIG_INFO_COLOR ++#define APP_USBD_CONFIG_INFO_COLOR 0 ++#endif ++ ++// APP_USBD_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_CONFIG_DEBUG_COLOR ++#define APP_USBD_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// APP_USBD_DUMMY_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef APP_USBD_DUMMY_CONFIG_LOG_ENABLED ++#define APP_USBD_DUMMY_CONFIG_LOG_ENABLED 0 ++#endif ++// APP_USBD_DUMMY_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_USBD_DUMMY_CONFIG_LOG_LEVEL ++#define APP_USBD_DUMMY_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// APP_USBD_DUMMY_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_DUMMY_CONFIG_INFO_COLOR ++#define APP_USBD_DUMMY_CONFIG_INFO_COLOR 0 ++#endif ++ ++// APP_USBD_DUMMY_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_DUMMY_CONFIG_DEBUG_COLOR ++#define APP_USBD_DUMMY_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// APP_USBD_MSC_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef APP_USBD_MSC_CONFIG_LOG_ENABLED ++#define APP_USBD_MSC_CONFIG_LOG_ENABLED 0 ++#endif ++// APP_USBD_MSC_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_USBD_MSC_CONFIG_LOG_LEVEL ++#define APP_USBD_MSC_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// APP_USBD_MSC_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_MSC_CONFIG_INFO_COLOR ++#define APP_USBD_MSC_CONFIG_INFO_COLOR 0 ++#endif ++ ++// APP_USBD_MSC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_MSC_CONFIG_DEBUG_COLOR ++#define APP_USBD_MSC_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_ENABLED ++#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_ENABLED 0 ++#endif ++// APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_LEVEL ++#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// APP_USBD_NRF_DFU_TRIGGER_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_INFO_COLOR ++#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_INFO_COLOR 0 ++#endif ++ ++// APP_USBD_NRF_DFU_TRIGGER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_DEBUG_COLOR ++#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_ATFIFO_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_ATFIFO_CONFIG_LOG_ENABLED ++#define NRF_ATFIFO_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_ATFIFO_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_ATFIFO_CONFIG_LOG_LEVEL ++#define NRF_ATFIFO_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_ATFIFO_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_ATFIFO_CONFIG_LOG_INIT_FILTER_LEVEL ++#define NRF_ATFIFO_CONFIG_LOG_INIT_FILTER_LEVEL 3 ++#endif ++ ++// NRF_ATFIFO_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_ATFIFO_CONFIG_INFO_COLOR ++#define NRF_ATFIFO_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_ATFIFO_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_ATFIFO_CONFIG_DEBUG_COLOR ++#define NRF_ATFIFO_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_BALLOC_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_BALLOC_CONFIG_LOG_ENABLED ++#define NRF_BALLOC_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_BALLOC_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BALLOC_CONFIG_LOG_LEVEL ++#define NRF_BALLOC_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_BALLOC_CONFIG_INITIAL_LOG_LEVEL - Initial severity level if dynamic filtering is enabled. ++ ++ ++// If module generates a lot of logs, initial log level can ++// be decreased to prevent flooding. Severity level can be ++// increased on instance basis. ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BALLOC_CONFIG_INITIAL_LOG_LEVEL ++#define NRF_BALLOC_CONFIG_INITIAL_LOG_LEVEL 3 ++#endif ++ ++// NRF_BALLOC_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BALLOC_CONFIG_INFO_COLOR ++#define NRF_BALLOC_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_BALLOC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BALLOC_CONFIG_DEBUG_COLOR ++#define NRF_BALLOC_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_ENABLED ++#define NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_LEVEL ++#define NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_INIT_FILTER_LEVEL ++#define NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_INIT_FILTER_LEVEL 3 ++#endif ++ ++// NRF_BLOCK_DEV_EMPTY_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BLOCK_DEV_EMPTY_CONFIG_INFO_COLOR ++#define NRF_BLOCK_DEV_EMPTY_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_BLOCK_DEV_EMPTY_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BLOCK_DEV_EMPTY_CONFIG_DEBUG_COLOR ++#define NRF_BLOCK_DEV_EMPTY_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_BLOCK_DEV_QSPI_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_BLOCK_DEV_QSPI_CONFIG_LOG_ENABLED ++#define NRF_BLOCK_DEV_QSPI_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_BLOCK_DEV_QSPI_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BLOCK_DEV_QSPI_CONFIG_LOG_LEVEL ++#define NRF_BLOCK_DEV_QSPI_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_BLOCK_DEV_QSPI_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BLOCK_DEV_QSPI_CONFIG_LOG_INIT_FILTER_LEVEL ++#define NRF_BLOCK_DEV_QSPI_CONFIG_LOG_INIT_FILTER_LEVEL 3 ++#endif ++ ++// NRF_BLOCK_DEV_QSPI_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BLOCK_DEV_QSPI_CONFIG_INFO_COLOR ++#define NRF_BLOCK_DEV_QSPI_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_BLOCK_DEV_QSPI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BLOCK_DEV_QSPI_CONFIG_DEBUG_COLOR ++#define NRF_BLOCK_DEV_QSPI_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_BLOCK_DEV_RAM_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_BLOCK_DEV_RAM_CONFIG_LOG_ENABLED ++#define NRF_BLOCK_DEV_RAM_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_BLOCK_DEV_RAM_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BLOCK_DEV_RAM_CONFIG_LOG_LEVEL ++#define NRF_BLOCK_DEV_RAM_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_BLOCK_DEV_RAM_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BLOCK_DEV_RAM_CONFIG_LOG_INIT_FILTER_LEVEL ++#define NRF_BLOCK_DEV_RAM_CONFIG_LOG_INIT_FILTER_LEVEL 3 ++#endif ++ ++// NRF_BLOCK_DEV_RAM_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BLOCK_DEV_RAM_CONFIG_INFO_COLOR ++#define NRF_BLOCK_DEV_RAM_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_BLOCK_DEV_RAM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BLOCK_DEV_RAM_CONFIG_DEBUG_COLOR ++#define NRF_BLOCK_DEV_RAM_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_CLI_BLE_UART_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_CLI_BLE_UART_CONFIG_LOG_ENABLED ++#define NRF_CLI_BLE_UART_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL ++#define NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_CLI_BLE_UART_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_CLI_BLE_UART_CONFIG_INFO_COLOR ++#define NRF_CLI_BLE_UART_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR ++#define NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_CLI_LIBUARTE_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_CLI_LIBUARTE_CONFIG_LOG_ENABLED ++#define NRF_CLI_LIBUARTE_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_CLI_LIBUARTE_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_CLI_LIBUARTE_CONFIG_LOG_LEVEL ++#define NRF_CLI_LIBUARTE_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_CLI_LIBUARTE_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_CLI_LIBUARTE_CONFIG_INFO_COLOR ++#define NRF_CLI_LIBUARTE_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_CLI_LIBUARTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_CLI_LIBUARTE_CONFIG_DEBUG_COLOR ++#define NRF_CLI_LIBUARTE_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_CLI_UART_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_CLI_UART_CONFIG_LOG_ENABLED ++#define NRF_CLI_UART_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_CLI_UART_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_CLI_UART_CONFIG_LOG_LEVEL ++#define NRF_CLI_UART_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_CLI_UART_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_CLI_UART_CONFIG_INFO_COLOR ++#define NRF_CLI_UART_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_CLI_UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_CLI_UART_CONFIG_DEBUG_COLOR ++#define NRF_CLI_UART_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_LIBUARTE_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_LIBUARTE_CONFIG_LOG_ENABLED ++#define NRF_LIBUARTE_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_LIBUARTE_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_LIBUARTE_CONFIG_LOG_LEVEL ++#define NRF_LIBUARTE_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_LIBUARTE_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_LIBUARTE_CONFIG_INFO_COLOR ++#define NRF_LIBUARTE_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_LIBUARTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_LIBUARTE_CONFIG_DEBUG_COLOR ++#define NRF_LIBUARTE_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_MEMOBJ_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_MEMOBJ_CONFIG_LOG_ENABLED ++#define NRF_MEMOBJ_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_MEMOBJ_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_MEMOBJ_CONFIG_LOG_LEVEL ++#define NRF_MEMOBJ_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_MEMOBJ_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_MEMOBJ_CONFIG_INFO_COLOR ++#define NRF_MEMOBJ_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_MEMOBJ_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_MEMOBJ_CONFIG_DEBUG_COLOR ++#define NRF_MEMOBJ_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_PWR_MGMT_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_PWR_MGMT_CONFIG_LOG_ENABLED ++#define NRF_PWR_MGMT_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_PWR_MGMT_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_PWR_MGMT_CONFIG_LOG_LEVEL ++#define NRF_PWR_MGMT_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_PWR_MGMT_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_PWR_MGMT_CONFIG_INFO_COLOR ++#define NRF_PWR_MGMT_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_PWR_MGMT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_PWR_MGMT_CONFIG_DEBUG_COLOR ++#define NRF_PWR_MGMT_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_QUEUE_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_QUEUE_CONFIG_LOG_ENABLED ++#define NRF_QUEUE_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_QUEUE_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_QUEUE_CONFIG_LOG_LEVEL ++#define NRF_QUEUE_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_QUEUE_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_QUEUE_CONFIG_LOG_INIT_FILTER_LEVEL ++#define NRF_QUEUE_CONFIG_LOG_INIT_FILTER_LEVEL 3 ++#endif ++ ++// NRF_QUEUE_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_QUEUE_CONFIG_INFO_COLOR ++#define NRF_QUEUE_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_QUEUE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_QUEUE_CONFIG_DEBUG_COLOR ++#define NRF_QUEUE_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_SDH_ANT_LOG_ENABLED - Enable logging in SoftDevice handler (ANT) module. ++//========================================================== ++#ifndef NRF_SDH_ANT_LOG_ENABLED ++#define NRF_SDH_ANT_LOG_ENABLED 0 ++#endif ++// NRF_SDH_ANT_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_SDH_ANT_LOG_LEVEL ++#define NRF_SDH_ANT_LOG_LEVEL 3 ++#endif ++ ++// NRF_SDH_ANT_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_ANT_INFO_COLOR ++#define NRF_SDH_ANT_INFO_COLOR 0 ++#endif ++ ++// NRF_SDH_ANT_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_ANT_DEBUG_COLOR ++#define NRF_SDH_ANT_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_SDH_BLE_LOG_ENABLED - Enable logging in SoftDevice handler (BLE) module. ++//========================================================== ++#ifndef NRF_SDH_BLE_LOG_ENABLED ++#define NRF_SDH_BLE_LOG_ENABLED 1 ++#endif ++// NRF_SDH_BLE_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_SDH_BLE_LOG_LEVEL ++#define NRF_SDH_BLE_LOG_LEVEL 3 ++#endif ++ ++// NRF_SDH_BLE_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_BLE_INFO_COLOR ++#define NRF_SDH_BLE_INFO_COLOR 0 ++#endif ++ ++// NRF_SDH_BLE_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_BLE_DEBUG_COLOR ++#define NRF_SDH_BLE_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_SDH_LOG_ENABLED - Enable logging in SoftDevice handler module. ++//========================================================== ++#ifndef NRF_SDH_LOG_ENABLED ++#define NRF_SDH_LOG_ENABLED 1 ++#endif ++// NRF_SDH_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_SDH_LOG_LEVEL ++#define NRF_SDH_LOG_LEVEL 3 ++#endif ++ ++// NRF_SDH_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_INFO_COLOR ++#define NRF_SDH_INFO_COLOR 0 ++#endif ++ ++// NRF_SDH_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_DEBUG_COLOR ++#define NRF_SDH_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_SDH_SOC_LOG_ENABLED - Enable logging in SoftDevice handler (SoC) module. ++//========================================================== ++#ifndef NRF_SDH_SOC_LOG_ENABLED ++#define NRF_SDH_SOC_LOG_ENABLED 1 ++#endif ++// NRF_SDH_SOC_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_SDH_SOC_LOG_LEVEL ++#define NRF_SDH_SOC_LOG_LEVEL 3 ++#endif ++ ++// NRF_SDH_SOC_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_SOC_INFO_COLOR ++#define NRF_SDH_SOC_INFO_COLOR 0 ++#endif ++ ++// NRF_SDH_SOC_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_SOC_DEBUG_COLOR ++#define NRF_SDH_SOC_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_SORTLIST_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_SORTLIST_CONFIG_LOG_ENABLED ++#define NRF_SORTLIST_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_SORTLIST_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_SORTLIST_CONFIG_LOG_LEVEL ++#define NRF_SORTLIST_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_SORTLIST_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SORTLIST_CONFIG_INFO_COLOR ++#define NRF_SORTLIST_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_SORTLIST_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SORTLIST_CONFIG_DEBUG_COLOR ++#define NRF_SORTLIST_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_TWI_SENSOR_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_TWI_SENSOR_CONFIG_LOG_ENABLED ++#define NRF_TWI_SENSOR_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_TWI_SENSOR_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_TWI_SENSOR_CONFIG_LOG_LEVEL ++#define NRF_TWI_SENSOR_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_TWI_SENSOR_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_TWI_SENSOR_CONFIG_INFO_COLOR ++#define NRF_TWI_SENSOR_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_TWI_SENSOR_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_TWI_SENSOR_CONFIG_DEBUG_COLOR ++#define NRF_TWI_SENSOR_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// PM_LOG_ENABLED - Enable logging in Peer Manager and its submodules. ++//========================================================== ++#ifndef PM_LOG_ENABLED ++#define PM_LOG_ENABLED 1 ++#endif ++// PM_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef PM_LOG_LEVEL ++#define PM_LOG_LEVEL 3 ++#endif ++ ++// PM_LOG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PM_LOG_INFO_COLOR ++#define PM_LOG_INFO_COLOR 0 ++#endif ++ ++// PM_LOG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PM_LOG_DEBUG_COLOR ++#define PM_LOG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++//========================================================== ++ ++// nrf_log in nRF_Serialization ++ ++//========================================================== ++// SER_HAL_TRANSPORT_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef SER_HAL_TRANSPORT_CONFIG_LOG_ENABLED ++#define SER_HAL_TRANSPORT_CONFIG_LOG_ENABLED 0 ++#endif ++// SER_HAL_TRANSPORT_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef SER_HAL_TRANSPORT_CONFIG_LOG_LEVEL ++#define SER_HAL_TRANSPORT_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// SER_HAL_TRANSPORT_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SER_HAL_TRANSPORT_CONFIG_INFO_COLOR ++#define SER_HAL_TRANSPORT_CONFIG_INFO_COLOR 0 ++#endif ++ ++// SER_HAL_TRANSPORT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SER_HAL_TRANSPORT_CONFIG_DEBUG_COLOR ++#define SER_HAL_TRANSPORT_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++// ++ ++// NRF_LOG_STR_FORMATTER_TIMESTAMP_FORMAT_ENABLED - nrf_log_str_formatter - Log string formatter ++ ++ ++#ifndef NRF_LOG_STR_FORMATTER_TIMESTAMP_FORMAT_ENABLED ++#define NRF_LOG_STR_FORMATTER_TIMESTAMP_FORMAT_ENABLED 1 ++#endif ++ ++// ++//========================================================== ++ ++// nRF_Segger_RTT ++ ++//========================================================== ++// segger_rtt - SEGGER RTT ++ ++//========================================================== ++// SEGGER_RTT_CONFIG_BUFFER_SIZE_UP - Size of upstream buffer. ++// Note that either @ref NRF_LOG_BACKEND_RTT_OUTPUT_BUFFER_SIZE ++// or this value is actually used. It depends on which one is bigger. ++ ++#ifndef SEGGER_RTT_CONFIG_BUFFER_SIZE_UP ++#define SEGGER_RTT_CONFIG_BUFFER_SIZE_UP 512 ++#endif ++ ++// SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS - Size of upstream buffer. ++#ifndef SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS ++#define SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS 2 ++#endif ++ ++// SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN - Size of upstream buffer. ++#ifndef SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN ++#define SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN 16 ++#endif ++ ++// SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS - Size of upstream buffer. ++#ifndef SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS ++#define SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS 2 ++#endif ++ ++// SEGGER_RTT_CONFIG_DEFAULT_MODE - RTT behavior if the buffer is full. ++ ++ ++// The following modes are supported: ++// - SKIP - Do not block, output nothing. ++// - TRIM - Do not block, output as much as fits. ++// - BLOCK - Wait until there is space in the buffer. ++// <0=> SKIP ++// <1=> TRIM ++// <2=> BLOCK_IF_FIFO_FULL ++ ++#ifndef SEGGER_RTT_CONFIG_DEFAULT_MODE ++#define SEGGER_RTT_CONFIG_DEFAULT_MODE 0 ++#endif ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++// nRF_SoftDevice ++ ++//========================================================== ++// NRF_SDH_BLE_ENABLED - nrf_sdh_ble - SoftDevice BLE event handler ++//========================================================== ++#ifndef NRF_SDH_BLE_ENABLED ++#define NRF_SDH_BLE_ENABLED 1 ++#endif ++// BLE Stack configuration - Stack configuration parameters ++ ++// The SoftDevice handler will configure the stack with these parameters when calling @ref nrf_sdh_ble_default_cfg_set. ++// Other libraries might depend on these values; keep them up-to-date even if you are not explicitely calling @ref nrf_sdh_ble_default_cfg_set. ++//========================================================== ++// NRF_SDH_BLE_GAP_DATA_LENGTH <27-251> ++ ++ ++// Requested BLE GAP data length to be negotiated. ++ ++#ifndef NRF_SDH_BLE_GAP_DATA_LENGTH ++#define NRF_SDH_BLE_GAP_DATA_LENGTH 27 ++#endif ++ ++// NRF_SDH_BLE_PERIPHERAL_LINK_COUNT - Maximum number of peripheral links. ++#ifndef NRF_SDH_BLE_PERIPHERAL_LINK_COUNT ++#define NRF_SDH_BLE_PERIPHERAL_LINK_COUNT 8 ++#endif ++ ++// NRF_SDH_BLE_CENTRAL_LINK_COUNT - Maximum number of central links. ++#ifndef NRF_SDH_BLE_CENTRAL_LINK_COUNT ++#define NRF_SDH_BLE_CENTRAL_LINK_COUNT 8 ++#endif ++ ++// NRF_SDH_BLE_TOTAL_LINK_COUNT - Total link count. ++// Maximum number of total concurrent connections using the default configuration. ++ ++#ifndef NRF_SDH_BLE_TOTAL_LINK_COUNT ++#define NRF_SDH_BLE_TOTAL_LINK_COUNT 1 ++#endif ++ ++// NRF_SDH_BLE_GAP_EVENT_LENGTH - GAP event length. ++// The time set aside for this connection on every connection interval in 1.25 ms units. ++ ++#ifndef NRF_SDH_BLE_GAP_EVENT_LENGTH ++#define NRF_SDH_BLE_GAP_EVENT_LENGTH 6 ++#endif ++ ++// NRF_SDH_BLE_GATT_MAX_MTU_SIZE - Static maximum MTU size. ++#ifndef NRF_SDH_BLE_GATT_MAX_MTU_SIZE ++#define NRF_SDH_BLE_GATT_MAX_MTU_SIZE 250 ++#endif ++ ++// NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE - Attribute Table size in bytes. The size must be a multiple of 4. ++#ifndef NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE ++#define NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE 1408 ++#endif ++ ++// NRF_SDH_BLE_VS_UUID_COUNT - The number of vendor-specific UUIDs. ++#ifndef NRF_SDH_BLE_VS_UUID_COUNT ++#define NRF_SDH_BLE_VS_UUID_COUNT 0 ++#endif ++ ++// NRF_SDH_BLE_SERVICE_CHANGED - Include the Service Changed characteristic in the Attribute Table. ++ ++ ++#ifndef NRF_SDH_BLE_SERVICE_CHANGED ++#define NRF_SDH_BLE_SERVICE_CHANGED 0 ++#endif ++ ++// ++//========================================================== ++ ++// BLE Observers - Observers and priority levels ++ ++//========================================================== ++// NRF_SDH_BLE_OBSERVER_PRIO_LEVELS - Total number of priority levels for BLE observers. ++// This setting configures the number of priority levels available for BLE event handlers. ++// The priority level of a handler determines the order in which it receives events, with respect to other handlers. ++ ++#ifndef NRF_SDH_BLE_OBSERVER_PRIO_LEVELS ++#define NRF_SDH_BLE_OBSERVER_PRIO_LEVELS 4 ++#endif ++ ++// BLE Observers priorities - Invididual priorities ++ ++//========================================================== ++// BLE_ADV_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Advertising module. ++ ++#ifndef BLE_ADV_BLE_OBSERVER_PRIO ++#define BLE_ADV_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// BLE_ANCS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Apple Notification Service Client. ++ ++#ifndef BLE_ANCS_C_BLE_OBSERVER_PRIO ++#define BLE_ANCS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_ANS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Alert Notification Service Client. ++ ++#ifndef BLE_ANS_C_BLE_OBSERVER_PRIO ++#define BLE_ANS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_BAS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Battery Service. ++ ++#ifndef BLE_BAS_BLE_OBSERVER_PRIO ++#define BLE_BAS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_BAS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Battery Service Client. ++ ++#ifndef BLE_BAS_C_BLE_OBSERVER_PRIO ++#define BLE_BAS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_BPS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Blood Pressure Service. ++ ++#ifndef BLE_BPS_BLE_OBSERVER_PRIO ++#define BLE_BPS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_CONN_PARAMS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Connection parameters module. ++ ++#ifndef BLE_CONN_PARAMS_BLE_OBSERVER_PRIO ++#define BLE_CONN_PARAMS_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// BLE_CONN_STATE_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Connection State module. ++ ++#ifndef BLE_CONN_STATE_BLE_OBSERVER_PRIO ++#define BLE_CONN_STATE_BLE_OBSERVER_PRIO 0 ++#endif ++ ++// BLE_CSCS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Cycling Speed and Cadence Service. ++ ++#ifndef BLE_CSCS_BLE_OBSERVER_PRIO ++#define BLE_CSCS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_CTS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Current Time Service Client. ++ ++#ifndef BLE_CTS_C_BLE_OBSERVER_PRIO ++#define BLE_CTS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_DB_DISC_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Database Discovery module. ++ ++#ifndef BLE_DB_DISC_BLE_OBSERVER_PRIO ++#define BLE_DB_DISC_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// BLE_DFU_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the DFU Service. ++ ++#ifndef BLE_DFU_BLE_OBSERVER_PRIO ++#define BLE_DFU_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_DIS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Device Information Client. ++ ++#ifndef BLE_DIS_C_BLE_OBSERVER_PRIO ++#define BLE_DIS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_GLS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Glucose Service. ++ ++#ifndef BLE_GLS_BLE_OBSERVER_PRIO ++#define BLE_GLS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_HIDS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Human Interface Device Service. ++ ++#ifndef BLE_HIDS_BLE_OBSERVER_PRIO ++#define BLE_HIDS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_HRS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Heart Rate Service. ++ ++#ifndef BLE_HRS_BLE_OBSERVER_PRIO ++#define BLE_HRS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_HRS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Heart Rate Service Client. ++ ++#ifndef BLE_HRS_C_BLE_OBSERVER_PRIO ++#define BLE_HRS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_HTS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Health Thermometer Service. ++ ++#ifndef BLE_HTS_BLE_OBSERVER_PRIO ++#define BLE_HTS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_IAS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Immediate Alert Service. ++ ++#ifndef BLE_IAS_BLE_OBSERVER_PRIO ++#define BLE_IAS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_IAS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Immediate Alert Service Client. ++ ++#ifndef BLE_IAS_C_BLE_OBSERVER_PRIO ++#define BLE_IAS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_LBS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the LED Button Service. ++ ++#ifndef BLE_LBS_BLE_OBSERVER_PRIO ++#define BLE_LBS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_LBS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the LED Button Service Client. ++ ++#ifndef BLE_LBS_C_BLE_OBSERVER_PRIO ++#define BLE_LBS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_LLS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Link Loss Service. ++ ++#ifndef BLE_LLS_BLE_OBSERVER_PRIO ++#define BLE_LLS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_LNS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Location Navigation Service. ++ ++#ifndef BLE_LNS_BLE_OBSERVER_PRIO ++#define BLE_LNS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_NUS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the UART Service. ++ ++#ifndef BLE_NUS_BLE_OBSERVER_PRIO ++#define BLE_NUS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_NUS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the UART Central Service. ++ ++#ifndef BLE_NUS_C_BLE_OBSERVER_PRIO ++#define BLE_NUS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_OTS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Object transfer service. ++ ++#ifndef BLE_OTS_BLE_OBSERVER_PRIO ++#define BLE_OTS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_OTS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Object transfer service client. ++ ++#ifndef BLE_OTS_C_BLE_OBSERVER_PRIO ++#define BLE_OTS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_RSCS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Running Speed and Cadence Service. ++ ++#ifndef BLE_RSCS_BLE_OBSERVER_PRIO ++#define BLE_RSCS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_RSCS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Running Speed and Cadence Client. ++ ++#ifndef BLE_RSCS_C_BLE_OBSERVER_PRIO ++#define BLE_RSCS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_TPS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the TX Power Service. ++ ++#ifndef BLE_TPS_BLE_OBSERVER_PRIO ++#define BLE_TPS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BSP_BTN_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Button Control module. ++ ++#ifndef BSP_BTN_BLE_OBSERVER_PRIO ++#define BSP_BTN_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the NFC pairing library. ++ ++#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO ++#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the NFC pairing library. ++ ++#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO ++#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the NFC pairing library. ++ ++#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO ++#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// NRF_BLE_BMS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Bond Management Service. ++ ++#ifndef NRF_BLE_BMS_BLE_OBSERVER_PRIO ++#define NRF_BLE_BMS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// NRF_BLE_CGMS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Contiuon Glucose Monitoring Service. ++ ++#ifndef NRF_BLE_CGMS_BLE_OBSERVER_PRIO ++#define NRF_BLE_CGMS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// NRF_BLE_ES_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Eddystone module. ++ ++#ifndef NRF_BLE_ES_BLE_OBSERVER_PRIO ++#define NRF_BLE_ES_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the GATT Service Client. ++ ++#ifndef NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO ++#define NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// NRF_BLE_GATT_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the GATT module. ++ ++#ifndef NRF_BLE_GATT_BLE_OBSERVER_PRIO ++#define NRF_BLE_GATT_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// NRF_BLE_QWR_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Queued writes module. ++ ++#ifndef NRF_BLE_QWR_BLE_OBSERVER_PRIO ++#define NRF_BLE_QWR_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// NRF_BLE_SCAN_OBSERVER_PRIO ++// Priority for dispatching the BLE events to the Scanning Module. ++ ++#ifndef NRF_BLE_SCAN_OBSERVER_PRIO ++#define NRF_BLE_SCAN_OBSERVER_PRIO 1 ++#endif ++ ++// PM_BLE_OBSERVER_PRIO - Priority with which BLE events are dispatched to the Peer Manager module. ++#ifndef PM_BLE_OBSERVER_PRIO ++#define PM_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++ ++// ++ ++// NRF_SDH_ENABLED - nrf_sdh - SoftDevice handler ++//========================================================== ++#ifndef NRF_SDH_ENABLED ++#define NRF_SDH_ENABLED 1 ++#endif ++// Dispatch model ++ ++// This setting configures how Stack events are dispatched to the application. ++//========================================================== ++// NRF_SDH_DISPATCH_MODEL ++ ++ ++// NRF_SDH_DISPATCH_MODEL_INTERRUPT: SoftDevice events are passed to the application from the interrupt context. ++// NRF_SDH_DISPATCH_MODEL_APPSH: SoftDevice events are scheduled using @ref app_scheduler. ++// NRF_SDH_DISPATCH_MODEL_POLLING: SoftDevice events are to be fetched manually. ++// <0=> NRF_SDH_DISPATCH_MODEL_INTERRUPT ++// <1=> NRF_SDH_DISPATCH_MODEL_APPSH ++// <2=> NRF_SDH_DISPATCH_MODEL_POLLING ++ ++#ifndef NRF_SDH_DISPATCH_MODEL ++#define NRF_SDH_DISPATCH_MODEL 0 ++#endif ++ ++// ++//========================================================== ++ ++// Clock - SoftDevice clock configuration ++ ++//========================================================== ++// NRF_SDH_CLOCK_LF_SRC - SoftDevice clock source. ++ ++// <0=> NRF_CLOCK_LF_SRC_RC ++// <1=> NRF_CLOCK_LF_SRC_XTAL ++// <2=> NRF_CLOCK_LF_SRC_SYNTH ++ ++#ifndef NRF_SDH_CLOCK_LF_SRC ++#define NRF_SDH_CLOCK_LF_SRC 1 ++#endif ++ ++// NRF_SDH_CLOCK_LF_RC_CTIV - SoftDevice calibration timer interval. ++#ifndef NRF_SDH_CLOCK_LF_RC_CTIV ++#define NRF_SDH_CLOCK_LF_RC_CTIV 0 ++#endif ++ ++// NRF_SDH_CLOCK_LF_RC_TEMP_CTIV - SoftDevice calibration timer interval under constant temperature. ++// How often (in number of calibration intervals) the RC oscillator shall be calibrated ++// if the temperature has not changed. ++ ++#ifndef NRF_SDH_CLOCK_LF_RC_TEMP_CTIV ++#define NRF_SDH_CLOCK_LF_RC_TEMP_CTIV 0 ++#endif ++ ++// NRF_SDH_CLOCK_LF_ACCURACY - External clock accuracy used in the LL to compute timing. ++ ++// <0=> NRF_CLOCK_LF_ACCURACY_250_PPM ++// <1=> NRF_CLOCK_LF_ACCURACY_500_PPM ++// <2=> NRF_CLOCK_LF_ACCURACY_150_PPM ++// <3=> NRF_CLOCK_LF_ACCURACY_100_PPM ++// <4=> NRF_CLOCK_LF_ACCURACY_75_PPM ++// <5=> NRF_CLOCK_LF_ACCURACY_50_PPM ++// <6=> NRF_CLOCK_LF_ACCURACY_30_PPM ++// <7=> NRF_CLOCK_LF_ACCURACY_20_PPM ++// <8=> NRF_CLOCK_LF_ACCURACY_10_PPM ++// <9=> NRF_CLOCK_LF_ACCURACY_5_PPM ++// <10=> NRF_CLOCK_LF_ACCURACY_2_PPM ++// <11=> NRF_CLOCK_LF_ACCURACY_1_PPM ++ ++#ifndef NRF_SDH_CLOCK_LF_ACCURACY ++#define NRF_SDH_CLOCK_LF_ACCURACY 7 ++#endif ++ ++// ++//========================================================== ++ ++// SDH Observers - Observers and priority levels ++ ++//========================================================== ++// NRF_SDH_REQ_OBSERVER_PRIO_LEVELS - Total number of priority levels for request observers. ++// This setting configures the number of priority levels available for the SoftDevice request event handlers. ++// The priority level of a handler determines the order in which it receives events, with respect to other handlers. ++ ++#ifndef NRF_SDH_REQ_OBSERVER_PRIO_LEVELS ++#define NRF_SDH_REQ_OBSERVER_PRIO_LEVELS 2 ++#endif ++ ++// NRF_SDH_STATE_OBSERVER_PRIO_LEVELS - Total number of priority levels for state observers. ++// This setting configures the number of priority levels available for the SoftDevice state event handlers. ++// The priority level of a handler determines the order in which it receives events, with respect to other handlers. ++ ++#ifndef NRF_SDH_STATE_OBSERVER_PRIO_LEVELS ++#define NRF_SDH_STATE_OBSERVER_PRIO_LEVELS 2 ++#endif ++ ++// NRF_SDH_STACK_OBSERVER_PRIO_LEVELS - Total number of priority levels for stack event observers. ++// This setting configures the number of priority levels available for the SoftDevice stack event handlers (ANT, BLE, SoC). ++// The priority level of a handler determines the order in which it receives events, with respect to other handlers. ++ ++#ifndef NRF_SDH_STACK_OBSERVER_PRIO_LEVELS ++#define NRF_SDH_STACK_OBSERVER_PRIO_LEVELS 2 ++#endif ++ ++ ++// State Observers priorities - Invididual priorities ++ ++//========================================================== ++// CLOCK_CONFIG_STATE_OBSERVER_PRIO ++// Priority with which state events are dispatched to the Clock driver. ++ ++#ifndef CLOCK_CONFIG_STATE_OBSERVER_PRIO ++#define CLOCK_CONFIG_STATE_OBSERVER_PRIO 0 ++#endif ++ ++// POWER_CONFIG_STATE_OBSERVER_PRIO ++// Priority with which state events are dispatched to the Power driver. ++ ++#ifndef POWER_CONFIG_STATE_OBSERVER_PRIO ++#define POWER_CONFIG_STATE_OBSERVER_PRIO 0 ++#endif ++ ++// RNG_CONFIG_STATE_OBSERVER_PRIO ++// Priority with which state events are dispatched to this module. ++ ++#ifndef RNG_CONFIG_STATE_OBSERVER_PRIO ++#define RNG_CONFIG_STATE_OBSERVER_PRIO 0 ++#endif ++ ++// ++//========================================================== ++ ++// Stack Event Observers priorities - Invididual priorities ++ ++//========================================================== ++// NRF_SDH_ANT_STACK_OBSERVER_PRIO ++// This setting configures the priority with which ANT events are processed with respect to other events coming from the stack. ++// Modify this setting if you need to have ANT events dispatched before or after other stack events, such as BLE or SoC. ++// Zero is the highest priority. ++ ++#ifndef NRF_SDH_ANT_STACK_OBSERVER_PRIO ++#define NRF_SDH_ANT_STACK_OBSERVER_PRIO 0 ++#endif ++ ++// NRF_SDH_BLE_STACK_OBSERVER_PRIO ++// This setting configures the priority with which BLE events are processed with respect to other events coming from the stack. ++// Modify this setting if you need to have BLE events dispatched before or after other stack events, such as ANT or SoC. ++// Zero is the highest priority. ++ ++#ifndef NRF_SDH_BLE_STACK_OBSERVER_PRIO ++#define NRF_SDH_BLE_STACK_OBSERVER_PRIO 0 ++#endif ++ ++// NRF_SDH_SOC_STACK_OBSERVER_PRIO ++// This setting configures the priority with which SoC events are processed with respect to other events coming from the stack. ++// Modify this setting if you need to have SoC events dispatched before or after other stack events, such as ANT or BLE. ++// Zero is the highest priority. ++ ++#ifndef NRF_SDH_SOC_STACK_OBSERVER_PRIO ++#define NRF_SDH_SOC_STACK_OBSERVER_PRIO 0 ++#endif ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++ ++// ++ ++// NRF_SDH_SOC_ENABLED - nrf_sdh_soc - SoftDevice SoC event handler ++//========================================================== ++#ifndef NRF_SDH_SOC_ENABLED ++#define NRF_SDH_SOC_ENABLED 1 ++#endif ++// SoC Observers - Observers and priority levels ++ ++//========================================================== ++// NRF_SDH_SOC_OBSERVER_PRIO_LEVELS - Total number of priority levels for SoC observers. ++// This setting configures the number of priority levels available for the SoC event handlers. ++// The priority level of a handler determines the order in which it receives events, with respect to other handlers. ++ ++#ifndef NRF_SDH_SOC_OBSERVER_PRIO_LEVELS ++#define NRF_SDH_SOC_OBSERVER_PRIO_LEVELS 2 ++#endif ++ ++// SoC Observers priorities - Invididual priorities ++ ++//========================================================== ++// BLE_ADV_SOC_OBSERVER_PRIO ++// Priority with which SoC events are dispatched to the Advertising module. ++ ++#ifndef BLE_ADV_SOC_OBSERVER_PRIO ++#define BLE_ADV_SOC_OBSERVER_PRIO 1 ++#endif ++ ++// BLE_DFU_SOC_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the DFU Service. ++ ++#ifndef BLE_DFU_SOC_OBSERVER_PRIO ++#define BLE_DFU_SOC_OBSERVER_PRIO 1 ++#endif ++ ++// CLOCK_CONFIG_SOC_OBSERVER_PRIO ++// Priority with which SoC events are dispatched to the Clock driver. ++ ++#ifndef CLOCK_CONFIG_SOC_OBSERVER_PRIO ++#define CLOCK_CONFIG_SOC_OBSERVER_PRIO 0 ++#endif ++ ++// POWER_CONFIG_SOC_OBSERVER_PRIO ++// Priority with which SoC events are dispatched to the Power driver. ++ ++#ifndef POWER_CONFIG_SOC_OBSERVER_PRIO ++#define POWER_CONFIG_SOC_OBSERVER_PRIO 0 ++#endif ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++ ++// ++ ++// ++//========================================================== ++ ++// <<< end of configuration section >>> ++#endif //SDK_CONFIG_H ++ +diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_132v3_hci_pca10040.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_132v3_hci_pca10040.emProject +new file mode 100644 +index 0000000..e320c53 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_132v3_hci_pca10040.emProject +@@ -0,0 +1,154 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_132v3_hci_pca10040.emSession nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_132v3_hci_pca10040.emSession +new file mode 100644 +index 0000000..c05cfb5 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/ble_connectivity_132v3_hci_pca10040.emSession +@@ -0,0 +1,7 @@ ++ ++ ++ ++ ++ ++ ++ +\ No newline at end of file +diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/flash_placement.xml +new file mode 100644 +index 0000000..c9cc513 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/ses/flash_placement.xml +@@ -0,0 +1,49 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/Makefile nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/Makefile +new file mode 100644 +index 0000000..25fcc18 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/Makefile +@@ -0,0 +1,263 @@ ++PROJECT_NAME := ble_connectivity_132v5_hci_pca10040 ++TARGETS := nrf52832_xxaa ++OUTPUT_DIRECTORY := _build ++ ++SDK_ROOT := ../../../../../.. ++PROJ_DIR := ../../.. ++ ++$(OUTPUT_DIRECTORY)/nrf52832_xxaa.out: \ ++ LINKER_SCRIPT := ble_connectivity_gcc_nrf52.ld ++ ++# Source files common to all targets ++SRC_FILES += \ ++ $(SDK_ROOT)/modules/nrfx/mdk/gcc_startup_nrf52.S \ ++ $(SDK_ROOT)/components/libraries/log/src/nrf_log_backend_rtt.c \ ++ $(SDK_ROOT)/components/libraries/log/src/nrf_log_backend_serial.c \ ++ $(SDK_ROOT)/components/libraries/log/src/nrf_log_backend_uart.c \ ++ $(SDK_ROOT)/components/libraries/log/src/nrf_log_default_backends.c \ ++ $(SDK_ROOT)/components/libraries/log/src/nrf_log_frontend.c \ ++ $(SDK_ROOT)/components/libraries/log/src/nrf_log_str_formatter.c \ ++ $(SDK_ROOT)/components/libraries/util/app_error.c \ ++ $(SDK_ROOT)/components/libraries/util/app_error_handler_gcc.c \ ++ $(SDK_ROOT)/components/libraries/util/app_error_weak.c \ ++ $(SDK_ROOT)/components/libraries/scheduler/app_scheduler.c \ ++ $(SDK_ROOT)/components/libraries/timer/app_timer.c \ ++ $(SDK_ROOT)/components/libraries/util/app_util_platform.c \ ++ $(SDK_ROOT)/components/libraries/crc16/crc16.c \ ++ $(SDK_ROOT)/components/libraries/util/nrf_assert.c \ ++ $(SDK_ROOT)/components/libraries/atomic/nrf_atomic.c \ ++ $(SDK_ROOT)/components/libraries/balloc/nrf_balloc.c \ ++ $(SDK_ROOT)/external/fprintf/nrf_fprintf.c \ ++ $(SDK_ROOT)/external/fprintf/nrf_fprintf_format.c \ ++ $(SDK_ROOT)/components/libraries/memobj/nrf_memobj.c \ ++ $(SDK_ROOT)/components/libraries/queue/nrf_queue.c \ ++ $(SDK_ROOT)/components/libraries/ringbuf/nrf_ringbuf.c \ ++ $(SDK_ROOT)/components/libraries/experimental_section_vars/nrf_section_iter.c \ ++ $(SDK_ROOT)/components/libraries/strerror/nrf_strerror.c \ ++ $(SDK_ROOT)/modules/nrfx/mdk/system_nrf52.c \ ++ $(SDK_ROOT)/components/boards/boards.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_conn.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/common/ble_dtm_init.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_event_enc.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_evt_conn.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gap_evt_conn.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_gatt_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gattc_conn.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gattc_evt_conn.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_gattc_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gatts_conn.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gatts_evt_conn.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_gatts_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_l2cap_conn.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_l2cap_evt_conn.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_l2cap_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/common/ble_serialization.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/common/cond_field_serialization.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/conn_ble_l2cap_sdu_pool.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/common/conn_mw.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gap.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gattc.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gatts.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_l2cap.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/common/conn_mw_nrf_soc.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/hal/dtm_uart.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/nrf_soc_conn.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/nrf_soc_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_cmd_decoder.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_dtm_cmd_decoder.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_error_handling.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_event_encoder.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_handlers.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_pkt_decoder.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_reset_cmd_decoder.c \ ++ $(SDK_ROOT)/components/serialization/common/ser_dbg_sd_str.c \ ++ $(SDK_ROOT)/components/serialization/common/transport/ser_hal_transport.c \ ++ $(SDK_ROOT)/components/serialization/common/transport/ser_phy/ser_phy_hci.c \ ++ $(SDK_ROOT)/components/serialization/common/transport/ser_phy/ser_phy_hci_slip.c \ ++ $(SDK_ROOT)/integration/nrfx/legacy/nrf_drv_clock.c \ ++ $(SDK_ROOT)/integration/nrfx/legacy/nrf_drv_uart.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_clock.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power_clock.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/prs/nrfx_prs.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uart.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uarte.c \ ++ $(PROJ_DIR)/main.c \ ++ $(SDK_ROOT)/external/segger_rtt/SEGGER_RTT.c \ ++ $(SDK_ROOT)/external/segger_rtt/SEGGER_RTT_Syscalls_GCC.c \ ++ $(SDK_ROOT)/external/segger_rtt/SEGGER_RTT_printf.c \ ++ $(SDK_ROOT)/components/ble/common/ble_advdata.c \ ++ $(SDK_ROOT)/components/ble/common/ble_conn_params.c \ ++ $(SDK_ROOT)/components/ble/ble_dtm/ble_dtm.c \ ++ $(SDK_ROOT)/components/ble/ble_dtm/ble_dtm_hw_nrf52.c \ ++ $(SDK_ROOT)/components/ble/common/ble_srv_common.c \ ++ $(SDK_ROOT)/components/softdevice/common/nrf_sdh.c \ ++ $(SDK_ROOT)/components/softdevice/common/nrf_sdh_ble.c \ ++ $(SDK_ROOT)/components/softdevice/common/nrf_sdh_soc.c \ ++ ++# Include folders common to all targets ++INC_FOLDERS += \ ++ $(SDK_ROOT)/components \ ++ $(SDK_ROOT)/components/serialization/connectivity/hal \ ++ $(SDK_ROOT)/modules/nrfx/mdk \ ++ $(SDK_ROOT)/components/libraries/scheduler \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers \ ++ $(SDK_ROOT)/components/toolchain/cmsis/include \ ++ $(SDK_ROOT)/components/libraries/queue \ ++ $(SDK_ROOT)/components/libraries/timer \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/common \ ++ $(SDK_ROOT)/components/serialization/connectivity \ ++ $(SDK_ROOT)/components/libraries/strerror \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware \ ++ $(SDK_ROOT)/components/libraries/crc16 \ ++ $(SDK_ROOT)/components/ble/ble_dtm \ ++ $(SDK_ROOT)/components/serialization/common \ ++ $(SDK_ROOT)/components/libraries/util \ ++ ../config \ ++ $(SDK_ROOT)/components/ble/common \ ++ $(SDK_ROOT)/components/libraries/balloc \ ++ $(SDK_ROOT)/components/libraries/ringbuf \ ++ $(SDK_ROOT)/modules/nrfx/hal \ ++ $(SDK_ROOT)/components/libraries/bsp \ ++ $(SDK_ROOT)/components/libraries/log \ ++ $(SDK_ROOT)/modules/nrfx \ ++ $(SDK_ROOT)/components/libraries/experimental_section_vars \ ++ $(SDK_ROOT)/integration/nrfx/legacy \ ++ $(SDK_ROOT)/components/serialization/common/transport/ser_phy \ ++ $(SDK_ROOT)/components/softdevice/s132v5/headers \ ++ $(SDK_ROOT)/components/libraries/delay \ ++ $(SDK_ROOT)/external/segger_rtt \ ++ $(SDK_ROOT)/components/libraries/atomic \ ++ $(SDK_ROOT)/components/boards \ ++ $(SDK_ROOT)/components/libraries/memobj \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble \ ++ $(SDK_ROOT)/integration/nrfx \ ++ $(SDK_ROOT)/components/serialization/common/transport \ ++ $(SDK_ROOT)/components/softdevice/common \ ++ $(SDK_ROOT)/components/serialization/common/transport/ser_phy/config \ ++ $(SDK_ROOT)/modules/nrfx/drivers/include \ ++ $(SDK_ROOT)/components/softdevice/s132v5/headers/nrf52 \ ++ $(SDK_ROOT)/external/fprintf \ ++ $(SDK_ROOT)/components/libraries/log/src \ ++ ++# Libraries common to all targets ++LIB_FILES += \ ++ ++# Optimization flags ++OPT = -Os -g3 ++# Uncomment the line below to enable link time optimization ++#OPT += -flto ++ ++# C flags common to all targets ++CFLAGS += $(OPT) ++CFLAGS += -DBLE_STACK_SUPPORT_REQD ++CFLAGS += -DBOARD_PCA10040 ++CFLAGS += -DBSP_DEFINES_ONLY ++CFLAGS += -DCONFIG_GPIO_AS_PINRESET ++CFLAGS += -DFLOAT_ABI_HARD ++CFLAGS += -DHCI_TIMER2 ++CFLAGS += -DNRF52 ++CFLAGS += -DNRF52832_XXAA ++CFLAGS += -DNRF52_PAN_74 ++CFLAGS += -DNRF_SD_BLE_API_VERSION=5 ++CFLAGS += -DS132 ++CFLAGS += -DSER_CONNECTIVITY ++CFLAGS += -DSOFTDEVICE_PRESENT ++CFLAGS += -DSWI_DISABLE0 ++CFLAGS += -mcpu=cortex-m4 ++CFLAGS += -mthumb -mabi=aapcs ++CFLAGS += -Wall -Werror ++CFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16 ++# keep every function in a separate section, this allows linker to discard unused ones ++CFLAGS += -ffunction-sections -fdata-sections -fno-strict-aliasing ++CFLAGS += -fno-builtin -fshort-enums ++ ++# C++ flags common to all targets ++CXXFLAGS += $(OPT) ++ ++# Assembler flags common to all targets ++ASMFLAGS += -g3 ++ASMFLAGS += -mcpu=cortex-m4 ++ASMFLAGS += -mthumb -mabi=aapcs ++ASMFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16 ++ASMFLAGS += -DBLE_STACK_SUPPORT_REQD ++ASMFLAGS += -DBOARD_PCA10040 ++ASMFLAGS += -DBSP_DEFINES_ONLY ++ASMFLAGS += -DCONFIG_GPIO_AS_PINRESET ++ASMFLAGS += -DFLOAT_ABI_HARD ++ASMFLAGS += -DHCI_TIMER2 ++ASMFLAGS += -DNRF52 ++ASMFLAGS += -DNRF52832_XXAA ++ASMFLAGS += -DNRF52_PAN_74 ++ASMFLAGS += -DNRF_SD_BLE_API_VERSION=5 ++ASMFLAGS += -DS132 ++ASMFLAGS += -DSER_CONNECTIVITY ++ASMFLAGS += -DSOFTDEVICE_PRESENT ++ASMFLAGS += -DSWI_DISABLE0 ++ ++# Linker flags ++LDFLAGS += $(OPT) ++LDFLAGS += -mthumb -mabi=aapcs -L$(SDK_ROOT)/modules/nrfx/mdk -T$(LINKER_SCRIPT) ++LDFLAGS += -mcpu=cortex-m4 ++LDFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16 ++# let linker dump unused sections ++LDFLAGS += -Wl,--gc-sections ++# use newlib in nano version ++LDFLAGS += --specs=nano.specs ++ ++nrf52832_xxaa: CFLAGS += -D__HEAP_SIZE=512 ++nrf52832_xxaa: CFLAGS += -D__STACK_SIZE=2048 ++nrf52832_xxaa: ASMFLAGS += -D__HEAP_SIZE=512 ++nrf52832_xxaa: ASMFLAGS += -D__STACK_SIZE=2048 ++ ++# Add standard libraries at the very end of the linker input, after all objects ++# that may need symbols provided by these libraries. ++LIB_FILES += -lc -lnosys -lm ++ ++ ++.PHONY: default help ++ ++# Default target - first one defined ++default: nrf52832_xxaa ++ ++# Print all targets that can be built ++help: ++ @echo following targets are available: ++ @echo nrf52832_xxaa ++ @echo flash_softdevice ++ @echo sdk_config - starting external tool for editing sdk_config.h ++ @echo flash - flashing binary ++ ++TEMPLATE_PATH := $(SDK_ROOT)/components/toolchain/gcc ++ ++ ++include $(TEMPLATE_PATH)/Makefile.common ++ ++$(foreach target, $(TARGETS), $(call define_target, $(target))) ++ ++.PHONY: flash flash_softdevice erase ++ ++# Flash the program ++flash: default ++ @echo Flashing: $(OUTPUT_DIRECTORY)/nrf52832_xxaa.hex ++ nrfjprog -f nrf52 --program $(OUTPUT_DIRECTORY)/nrf52832_xxaa.hex --sectorerase ++ nrfjprog -f nrf52 --reset ++ ++# Flash softdevice ++flash_softdevice: ++ @echo Flashing: s132_nrf52_5.1.0_softdevice.hex ++ nrfjprog -f nrf52 --program $(SDK_ROOT)/components/softdevice/s132v5/hex/s132_nrf52_5.1.0_softdevice.hex --sectorerase ++ nrfjprog -f nrf52 --reset ++ ++erase: ++ nrfjprog -f nrf52 --eraseall ++ ++SDK_CONFIG_FILE := ../config/sdk_config.h ++CMSIS_CONFIG_TOOL := $(SDK_ROOT)/external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar ++sdk_config: ++ java -jar $(CMSIS_CONFIG_TOOL) $(SDK_CONFIG_FILE) +diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/ble_connectivity_gcc_nrf52.ld +new file mode 100644 +index 0000000..9877300 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/armgcc/ble_connectivity_gcc_nrf52.ld +@@ -0,0 +1,106 @@ ++/* Linker script to configure memory regions. */ ++ ++SEARCH_DIR(.) ++GROUP(-lgcc -lc -lnosys) ++ ++MEMORY ++{ ++ FLASH (rx) : ORIGIN = 0x23000, LENGTH = 0x5d000 ++ RAM (rwx) : ORIGIN = 0x2000a380, LENGTH = 0x5c80 ++ connectivity_version_info (r) : ORIGIN = 0x50000, LENGTH = 0x18 ++} ++ ++SECTIONS ++{ ++ .connectivity_version_info : ++ { ++ PROVIDE(__start_connectivity_version_info = .); ++ KEEP(*(SORT(.connectivity_version_info*))) ++ PROVIDE(__stop_connectivity_version_info = .); ++ } > connectivity_version_info ++} ++ ++SECTIONS ++{ ++ . = ALIGN(4); ++ .mem_section_dummy_ram : ++ { ++ } ++ .log_dynamic_data : ++ { ++ PROVIDE(__start_log_dynamic_data = .); ++ KEEP(*(SORT(.log_dynamic_data*))) ++ PROVIDE(__stop_log_dynamic_data = .); ++ } > RAM ++ .log_filter_data : ++ { ++ PROVIDE(__start_log_filter_data = .); ++ KEEP(*(SORT(.log_filter_data*))) ++ PROVIDE(__stop_log_filter_data = .); ++ } > RAM ++ ++} INSERT AFTER .data; ++ ++SECTIONS ++{ ++ .mem_section_dummy_rom : ++ { ++ } ++ .sdh_ble_observers : ++ { ++ PROVIDE(__start_sdh_ble_observers = .); ++ KEEP(*(SORT(.sdh_ble_observers*))) ++ PROVIDE(__stop_sdh_ble_observers = .); ++ } > FLASH ++ .sdh_soc_observers : ++ { ++ PROVIDE(__start_sdh_soc_observers = .); ++ KEEP(*(SORT(.sdh_soc_observers*))) ++ PROVIDE(__stop_sdh_soc_observers = .); ++ } > FLASH ++ .nrf_queue : ++ { ++ PROVIDE(__start_nrf_queue = .); ++ KEEP(*(.nrf_queue)) ++ PROVIDE(__stop_nrf_queue = .); ++ } > FLASH ++ .log_const_data : ++ { ++ PROVIDE(__start_log_const_data = .); ++ KEEP(*(SORT(.log_const_data*))) ++ PROVIDE(__stop_log_const_data = .); ++ } > FLASH ++ .nrf_balloc : ++ { ++ PROVIDE(__start_nrf_balloc = .); ++ KEEP(*(.nrf_balloc)) ++ PROVIDE(__stop_nrf_balloc = .); ++ } > FLASH ++ .sdh_state_observers : ++ { ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); ++ } > FLASH ++ .sdh_stack_observers : ++ { ++ PROVIDE(__start_sdh_stack_observers = .); ++ KEEP(*(SORT(.sdh_stack_observers*))) ++ PROVIDE(__stop_sdh_stack_observers = .); ++ } > FLASH ++ .sdh_req_observers : ++ { ++ PROVIDE(__start_sdh_req_observers = .); ++ KEEP(*(SORT(.sdh_req_observers*))) ++ PROVIDE(__stop_sdh_req_observers = .); ++ } > FLASH ++ .log_backends : ++ { ++ PROVIDE(__start_log_backends = .); ++ KEEP(*(SORT(.log_backends*))) ++ PROVIDE(__stop_log_backends = .); ++ } > FLASH ++ ++} INSERT AFTER .text ++ ++INCLUDE "nrf_common.ld" +diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/config/sdk_config.h +new file mode 100644 +index 0000000..ffe8c67 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/config/sdk_config.h +@@ -0,0 +1,4579 @@ ++/** ++ * Copyright (c) 2017 - 2018, Nordic Semiconductor ASA ++ * ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form, except as embedded into a Nordic ++ * Semiconductor ASA integrated circuit in a product or a software update for ++ * such product, must reproduce the above copyright notice, this list of ++ * conditions and the following disclaimer in the documentation and/or other ++ * materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its ++ * contributors may be used to endorse or promote products derived from this ++ * software without specific prior written permission. ++ * ++ * 4. This software, with or without modification, must only be used with a ++ * Nordic Semiconductor ASA integrated circuit. ++ * ++ * 5. Any software provided in binary form under this license must not be reverse ++ * engineered, decompiled, modified and/or disassembled. ++ * ++ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS ++ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE ++ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ++ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ++ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ * ++ */ ++ ++ ++ ++#ifndef SDK_CONFIG_H ++#define SDK_CONFIG_H ++// <<< Use Configuration Wizard in Context Menu >>>\n ++#ifdef USE_APP_CONFIG ++#include "app_config.h" ++#endif ++// nRF_BLE ++ ++//========================================================== ++// BLE_DTM_ENABLED - ble_dtm - Module for testing RF/PHY using DTM commands ++ ++ ++#ifndef BLE_DTM_ENABLED ++#define BLE_DTM_ENABLED 1 ++#endif ++ ++// NRF_BLE_CONN_PARAMS_ENABLED - ble_conn_params - Initiating and executing a connection parameters negotiation procedure ++//========================================================== ++#ifndef NRF_BLE_CONN_PARAMS_ENABLED ++#define NRF_BLE_CONN_PARAMS_ENABLED 1 ++#endif ++// NRF_BLE_CONN_PARAMS_MAX_SLAVE_LATENCY_DEVIATION - The largest acceptable deviation in slave latency. ++// The largest deviation (+ or -) from the requested slave latency that will not be renegotiated. ++ ++#ifndef NRF_BLE_CONN_PARAMS_MAX_SLAVE_LATENCY_DEVIATION ++#define NRF_BLE_CONN_PARAMS_MAX_SLAVE_LATENCY_DEVIATION 499 ++#endif ++ ++// NRF_BLE_CONN_PARAMS_MAX_SUPERVISION_TIMEOUT_DEVIATION - The largest acceptable deviation (in 10 ms units) in supervision timeout. ++// The largest deviation (+ or -, in 10 ms units) from the requested supervision timeout that will not be renegotiated. ++ ++#ifndef NRF_BLE_CONN_PARAMS_MAX_SUPERVISION_TIMEOUT_DEVIATION ++#define NRF_BLE_CONN_PARAMS_MAX_SUPERVISION_TIMEOUT_DEVIATION 65535 ++#endif ++ ++// ++ ++// ++//========================================================== ++ ++// nRF_Drivers ++ ++//========================================================== ++// NRFX_CLOCK_ENABLED - nrfx_clock - CLOCK peripheral driver ++//========================================================== ++#ifndef NRFX_CLOCK_ENABLED ++#define NRFX_CLOCK_ENABLED 1 ++#endif ++// NRFX_CLOCK_CONFIG_LF_SRC - LF Clock Source ++ ++// <0=> RC ++// <1=> XTAL ++// <2=> Synth ++// <131073=> External Low Swing ++// <196609=> External Full Swing ++ ++#ifndef NRFX_CLOCK_CONFIG_LF_SRC ++#define NRFX_CLOCK_CONFIG_LF_SRC 1 ++#endif ++ ++// NRFX_CLOCK_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef NRFX_CLOCK_CONFIG_IRQ_PRIORITY ++#define NRFX_CLOCK_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// NRFX_CLOCK_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRFX_CLOCK_CONFIG_LOG_ENABLED ++#define NRFX_CLOCK_CONFIG_LOG_ENABLED 0 ++#endif ++// NRFX_CLOCK_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRFX_CLOCK_CONFIG_LOG_LEVEL ++#define NRFX_CLOCK_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRFX_CLOCK_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_CLOCK_CONFIG_INFO_COLOR ++#define NRFX_CLOCK_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRFX_CLOCK_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_CLOCK_CONFIG_DEBUG_COLOR ++#define NRFX_CLOCK_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++ ++// NRFX_PRS_ENABLED - nrfx_prs - Peripheral Resource Sharing module ++//========================================================== ++#ifndef NRFX_PRS_ENABLED ++#define NRFX_PRS_ENABLED 1 ++#endif ++// NRFX_PRS_BOX_0_ENABLED - Enables box 0 in the module. ++ ++ ++#ifndef NRFX_PRS_BOX_0_ENABLED ++#define NRFX_PRS_BOX_0_ENABLED 0 ++#endif ++ ++// NRFX_PRS_BOX_1_ENABLED - Enables box 1 in the module. ++ ++ ++#ifndef NRFX_PRS_BOX_1_ENABLED ++#define NRFX_PRS_BOX_1_ENABLED 0 ++#endif ++ ++// NRFX_PRS_BOX_2_ENABLED - Enables box 2 in the module. ++ ++ ++#ifndef NRFX_PRS_BOX_2_ENABLED ++#define NRFX_PRS_BOX_2_ENABLED 0 ++#endif ++ ++// NRFX_PRS_BOX_3_ENABLED - Enables box 3 in the module. ++ ++ ++#ifndef NRFX_PRS_BOX_3_ENABLED ++#define NRFX_PRS_BOX_3_ENABLED 0 ++#endif ++ ++// NRFX_PRS_BOX_4_ENABLED - Enables box 4 in the module. ++ ++ ++#ifndef NRFX_PRS_BOX_4_ENABLED ++#define NRFX_PRS_BOX_4_ENABLED 1 ++#endif ++ ++// NRFX_PRS_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRFX_PRS_CONFIG_LOG_ENABLED ++#define NRFX_PRS_CONFIG_LOG_ENABLED 0 ++#endif ++// NRFX_PRS_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRFX_PRS_CONFIG_LOG_LEVEL ++#define NRFX_PRS_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRFX_PRS_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_PRS_CONFIG_INFO_COLOR ++#define NRFX_PRS_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRFX_PRS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_PRS_CONFIG_DEBUG_COLOR ++#define NRFX_PRS_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++ ++// NRFX_UARTE_ENABLED - nrfx_uarte - UARTE peripheral driver ++//========================================================== ++#ifndef NRFX_UARTE_ENABLED ++#define NRFX_UARTE_ENABLED 1 ++#endif ++// NRFX_UARTE0_ENABLED - Enable UARTE0 instance ++#ifndef NRFX_UARTE0_ENABLED ++#define NRFX_UARTE0_ENABLED 0 ++#endif ++ ++// NRFX_UARTE_DEFAULT_CONFIG_HWFC - Hardware Flow Control ++ ++// <0=> Disabled ++// <1=> Enabled ++ ++#ifndef NRFX_UARTE_DEFAULT_CONFIG_HWFC ++#define NRFX_UARTE_DEFAULT_CONFIG_HWFC 0 ++#endif ++ ++// NRFX_UARTE_DEFAULT_CONFIG_PARITY - Parity ++ ++// <0=> Excluded ++// <14=> Included ++ ++#ifndef NRFX_UARTE_DEFAULT_CONFIG_PARITY ++#define NRFX_UARTE_DEFAULT_CONFIG_PARITY 0 ++#endif ++ ++// NRFX_UARTE_DEFAULT_CONFIG_BAUDRATE - Default Baudrate ++ ++// <323584=> 1200 baud ++// <643072=> 2400 baud ++// <1290240=> 4800 baud ++// <2576384=> 9600 baud ++// <3862528=> 14400 baud ++// <5152768=> 19200 baud ++// <7716864=> 28800 baud ++// <8388608=> 31250 baud ++// <10289152=> 38400 baud ++// <15007744=> 56000 baud ++// <15400960=> 57600 baud ++// <20615168=> 76800 baud ++// <30801920=> 115200 baud ++// <61865984=> 230400 baud ++// <67108864=> 250000 baud ++// <121634816=> 460800 baud ++// <251658240=> 921600 baud ++// <268435456=> 1000000 baud ++ ++#ifndef NRFX_UARTE_DEFAULT_CONFIG_BAUDRATE ++#define NRFX_UARTE_DEFAULT_CONFIG_BAUDRATE 30801920 ++#endif ++ ++// NRFX_UARTE_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef NRFX_UARTE_DEFAULT_CONFIG_IRQ_PRIORITY ++#define NRFX_UARTE_DEFAULT_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// NRFX_UARTE_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRFX_UARTE_CONFIG_LOG_ENABLED ++#define NRFX_UARTE_CONFIG_LOG_ENABLED 0 ++#endif ++// NRFX_UARTE_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRFX_UARTE_CONFIG_LOG_LEVEL ++#define NRFX_UARTE_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRFX_UARTE_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_UARTE_CONFIG_INFO_COLOR ++#define NRFX_UARTE_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRFX_UARTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_UARTE_CONFIG_DEBUG_COLOR ++#define NRFX_UARTE_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++ ++// NRFX_UART_ENABLED - nrfx_uart - UART peripheral driver ++//========================================================== ++#ifndef NRFX_UART_ENABLED ++#define NRFX_UART_ENABLED 1 ++#endif ++// NRFX_UART0_ENABLED - Enable UART0 instance ++#ifndef NRFX_UART0_ENABLED ++#define NRFX_UART0_ENABLED 0 ++#endif ++ ++// NRFX_UART_DEFAULT_CONFIG_HWFC - Hardware Flow Control ++ ++// <0=> Disabled ++// <1=> Enabled ++ ++#ifndef NRFX_UART_DEFAULT_CONFIG_HWFC ++#define NRFX_UART_DEFAULT_CONFIG_HWFC 0 ++#endif ++ ++// NRFX_UART_DEFAULT_CONFIG_PARITY - Parity ++ ++// <0=> Excluded ++// <14=> Included ++ ++#ifndef NRFX_UART_DEFAULT_CONFIG_PARITY ++#define NRFX_UART_DEFAULT_CONFIG_PARITY 0 ++#endif ++ ++// NRFX_UART_DEFAULT_CONFIG_BAUDRATE - Default Baudrate ++ ++// <323584=> 1200 baud ++// <643072=> 2400 baud ++// <1290240=> 4800 baud ++// <2576384=> 9600 baud ++// <3866624=> 14400 baud ++// <5152768=> 19200 baud ++// <7729152=> 28800 baud ++// <8388608=> 31250 baud ++// <10309632=> 38400 baud ++// <15007744=> 56000 baud ++// <15462400=> 57600 baud ++// <20615168=> 76800 baud ++// <30924800=> 115200 baud ++// <61845504=> 230400 baud ++// <67108864=> 250000 baud ++// <123695104=> 460800 baud ++// <247386112=> 921600 baud ++// <268435456=> 1000000 baud ++ ++#ifndef NRFX_UART_DEFAULT_CONFIG_BAUDRATE ++#define NRFX_UART_DEFAULT_CONFIG_BAUDRATE 30924800 ++#endif ++ ++// NRFX_UART_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef NRFX_UART_DEFAULT_CONFIG_IRQ_PRIORITY ++#define NRFX_UART_DEFAULT_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// NRFX_UART_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRFX_UART_CONFIG_LOG_ENABLED ++#define NRFX_UART_CONFIG_LOG_ENABLED 0 ++#endif ++// NRFX_UART_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRFX_UART_CONFIG_LOG_LEVEL ++#define NRFX_UART_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRFX_UART_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_UART_CONFIG_INFO_COLOR ++#define NRFX_UART_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRFX_UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_UART_CONFIG_DEBUG_COLOR ++#define NRFX_UART_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++ ++// NRF_CLOCK_ENABLED - nrf_drv_clock - CLOCK peripheral driver - legacy layer ++//========================================================== ++#ifndef NRF_CLOCK_ENABLED ++#define NRF_CLOCK_ENABLED 1 ++#endif ++// CLOCK_CONFIG_LF_SRC - LF Clock Source ++ ++// <0=> RC ++// <1=> XTAL ++// <2=> Synth ++// <131073=> External Low Swing ++// <196609=> External Full Swing ++ ++#ifndef CLOCK_CONFIG_LF_SRC ++#define CLOCK_CONFIG_LF_SRC 1 ++#endif ++ ++// CLOCK_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef CLOCK_CONFIG_IRQ_PRIORITY ++#define CLOCK_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ ++// QSPI_ENABLED - nrf_drv_qspi - QSPI peripheral driver - legacy layer ++//========================================================== ++#ifndef QSPI_ENABLED ++#define QSPI_ENABLED 0 ++#endif ++// QSPI_CONFIG_SCK_DELAY - tSHSL, tWHSL and tSHWL in number of 16 MHz periods (62.5 ns). <0-255> ++ ++ ++#ifndef QSPI_CONFIG_SCK_DELAY ++#define QSPI_CONFIG_SCK_DELAY 1 ++#endif ++ ++// QSPI_CONFIG_XIP_OFFSET - Address offset in the external memory for Execute in Place operation. ++#ifndef QSPI_CONFIG_XIP_OFFSET ++#define QSPI_CONFIG_XIP_OFFSET 0 ++#endif ++ ++// QSPI_CONFIG_READOC - Number of data lines and opcode used for reading. ++ ++// <0=> FastRead ++// <1=> Read2O ++// <2=> Read2IO ++// <3=> Read4O ++// <4=> Read4IO ++ ++#ifndef QSPI_CONFIG_READOC ++#define QSPI_CONFIG_READOC 0 ++#endif ++ ++// QSPI_CONFIG_WRITEOC - Number of data lines and opcode used for writing. ++ ++// <0=> PP ++// <1=> PP2O ++// <2=> PP4O ++// <3=> PP4IO ++ ++#ifndef QSPI_CONFIG_WRITEOC ++#define QSPI_CONFIG_WRITEOC 0 ++#endif ++ ++// QSPI_CONFIG_ADDRMODE - Addressing mode. ++ ++// <0=> 24bit ++// <1=> 32bit ++ ++#ifndef QSPI_CONFIG_ADDRMODE ++#define QSPI_CONFIG_ADDRMODE 0 ++#endif ++ ++// QSPI_CONFIG_MODE - SPI mode. ++ ++// <0=> Mode 0 ++// <1=> Mode 1 ++ ++#ifndef QSPI_CONFIG_MODE ++#define QSPI_CONFIG_MODE 0 ++#endif ++ ++// QSPI_CONFIG_FREQUENCY - Frequency divider. ++ ++// <0=> 32MHz/1 ++// <1=> 32MHz/2 ++// <2=> 32MHz/3 ++// <3=> 32MHz/4 ++// <4=> 32MHz/5 ++// <5=> 32MHz/6 ++// <6=> 32MHz/7 ++// <7=> 32MHz/8 ++// <8=> 32MHz/9 ++// <9=> 32MHz/10 ++// <10=> 32MHz/11 ++// <11=> 32MHz/12 ++// <12=> 32MHz/13 ++// <13=> 32MHz/14 ++// <14=> 32MHz/15 ++// <15=> 32MHz/16 ++ ++#ifndef QSPI_CONFIG_FREQUENCY ++#define QSPI_CONFIG_FREQUENCY 15 ++#endif ++ ++// QSPI_PIN_SCK - SCK pin value. ++#ifndef QSPI_PIN_SCK ++#define QSPI_PIN_SCK NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_CSN - CSN pin value. ++#ifndef QSPI_PIN_CSN ++#define QSPI_PIN_CSN NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO0 - IO0 pin value. ++#ifndef QSPI_PIN_IO0 ++#define QSPI_PIN_IO0 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO1 - IO1 pin value. ++#ifndef QSPI_PIN_IO1 ++#define QSPI_PIN_IO1 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO2 - IO2 pin value. ++#ifndef QSPI_PIN_IO2 ++#define QSPI_PIN_IO2 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO3 - IO3 pin value. ++#ifndef QSPI_PIN_IO3 ++#define QSPI_PIN_IO3 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef QSPI_CONFIG_IRQ_PRIORITY ++#define QSPI_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ ++// UART_ENABLED - nrf_drv_uart - UART/UARTE peripheral driver - legacy layer ++//========================================================== ++#ifndef UART_ENABLED ++#define UART_ENABLED 1 ++#endif ++// UART_DEFAULT_CONFIG_HWFC - Hardware Flow Control ++ ++// <0=> Disabled ++// <1=> Enabled ++ ++#ifndef UART_DEFAULT_CONFIG_HWFC ++#define UART_DEFAULT_CONFIG_HWFC 0 ++#endif ++ ++// UART_DEFAULT_CONFIG_PARITY - Parity ++ ++// <0=> Excluded ++// <14=> Included ++ ++#ifndef UART_DEFAULT_CONFIG_PARITY ++#define UART_DEFAULT_CONFIG_PARITY 0 ++#endif ++ ++// UART_DEFAULT_CONFIG_BAUDRATE - Default Baudrate ++ ++// <323584=> 1200 baud ++// <643072=> 2400 baud ++// <1290240=> 4800 baud ++// <2576384=> 9600 baud ++// <3862528=> 14400 baud ++// <5152768=> 19200 baud ++// <7716864=> 28800 baud ++// <10289152=> 38400 baud ++// <15400960=> 57600 baud ++// <20615168=> 76800 baud ++// <30801920=> 115200 baud ++// <61865984=> 230400 baud ++// <67108864=> 250000 baud ++// <121634816=> 460800 baud ++// <251658240=> 921600 baud ++// <268435456=> 1000000 baud ++ ++#ifndef UART_DEFAULT_CONFIG_BAUDRATE ++#define UART_DEFAULT_CONFIG_BAUDRATE 30801920 ++#endif ++ ++// UART_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef UART_DEFAULT_CONFIG_IRQ_PRIORITY ++#define UART_DEFAULT_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// UART_EASY_DMA_SUPPORT - Driver supporting EasyDMA ++ ++ ++#ifndef UART_EASY_DMA_SUPPORT ++#define UART_EASY_DMA_SUPPORT 1 ++#endif ++ ++// UART_LEGACY_SUPPORT - Driver supporting Legacy mode ++ ++ ++#ifndef UART_LEGACY_SUPPORT ++#define UART_LEGACY_SUPPORT 1 ++#endif ++ ++// UART0_ENABLED - Enable UART0 instance ++//========================================================== ++#ifndef UART0_ENABLED ++#define UART0_ENABLED 1 ++#endif ++// UART0_CONFIG_USE_EASY_DMA - Default setting for using EasyDMA ++ ++ ++#ifndef UART0_CONFIG_USE_EASY_DMA ++#define UART0_CONFIG_USE_EASY_DMA 1 ++#endif ++ ++// ++ ++// ++ ++// ++//========================================================== ++ ++// nRF_Libraries ++ ++//========================================================== ++// APP_SCHEDULER_ENABLED - app_scheduler - Events scheduler ++//========================================================== ++#ifndef APP_SCHEDULER_ENABLED ++#define APP_SCHEDULER_ENABLED 1 ++#endif ++// APP_SCHEDULER_WITH_PAUSE - Enabling pause feature ++ ++ ++#ifndef APP_SCHEDULER_WITH_PAUSE ++#define APP_SCHEDULER_WITH_PAUSE 1 ++#endif ++ ++// APP_SCHEDULER_WITH_PROFILER - Enabling scheduler profiling ++ ++ ++#ifndef APP_SCHEDULER_WITH_PROFILER ++#define APP_SCHEDULER_WITH_PROFILER 1 ++#endif ++ ++// ++ ++// APP_TIMER_ENABLED - app_timer - Application timer functionality ++//========================================================== ++#ifndef APP_TIMER_ENABLED ++#define APP_TIMER_ENABLED 1 ++#endif ++// APP_TIMER_CONFIG_RTC_FREQUENCY - Configure RTC prescaler. ++ ++// <0=> 32768 Hz ++// <1=> 16384 Hz ++// <3=> 8192 Hz ++// <7=> 4096 Hz ++// <15=> 2048 Hz ++// <31=> 1024 Hz ++ ++#ifndef APP_TIMER_CONFIG_RTC_FREQUENCY ++#define APP_TIMER_CONFIG_RTC_FREQUENCY 0 ++#endif ++ ++// APP_TIMER_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef APP_TIMER_CONFIG_IRQ_PRIORITY ++#define APP_TIMER_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// APP_TIMER_CONFIG_OP_QUEUE_SIZE - Capacity of timer requests queue. ++// Size of the queue depends on how many timers are used ++// in the system, how often timers are started and overall ++// system latency. If queue size is too small app_timer calls ++// will fail. ++ ++#ifndef APP_TIMER_CONFIG_OP_QUEUE_SIZE ++#define APP_TIMER_CONFIG_OP_QUEUE_SIZE 10 ++#endif ++ ++// APP_TIMER_CONFIG_USE_SCHEDULER - Enable scheduling app_timer events to app_scheduler ++ ++ ++#ifndef APP_TIMER_CONFIG_USE_SCHEDULER ++#define APP_TIMER_CONFIG_USE_SCHEDULER 0 ++#endif ++ ++// APP_TIMER_KEEPS_RTC_ACTIVE - Enable RTC always on ++ ++ ++// If option is enabled RTC is kept running even if there is no active timers. ++// This option can be used when app_timer is used for timestamping. ++ ++#ifndef APP_TIMER_KEEPS_RTC_ACTIVE ++#define APP_TIMER_KEEPS_RTC_ACTIVE 0 ++#endif ++ ++// APP_TIMER_SAFE_WINDOW_MS - Maximum possible latency (in milliseconds) of handling app_timer event. ++// Maximum possible timeout that can be set is reduced by safe window. ++// Example: RTC frequency 16384 Hz, maximum possible timeout 1024 seconds - APP_TIMER_SAFE_WINDOW_MS. ++// Since RTC is not stopped when processor is halted in debugging session, this value ++// must cover it if debugging is needed. It is possible to halt processor for APP_TIMER_SAFE_WINDOW_MS ++// without corrupting app_timer behavior. ++ ++#ifndef APP_TIMER_SAFE_WINDOW_MS ++#define APP_TIMER_SAFE_WINDOW_MS 300000 ++#endif ++ ++// App Timer Legacy configuration - Legacy configuration. ++ ++//========================================================== ++// APP_TIMER_WITH_PROFILER - Enable app_timer profiling ++ ++ ++#ifndef APP_TIMER_WITH_PROFILER ++#define APP_TIMER_WITH_PROFILER 0 ++#endif ++ ++// APP_TIMER_CONFIG_SWI_NUMBER - Configure SWI instance used. ++ ++ ++#ifndef APP_TIMER_CONFIG_SWI_NUMBER ++#define APP_TIMER_CONFIG_SWI_NUMBER 0 ++#endif ++ ++// ++//========================================================== ++ ++// ++ ++// CRC16_ENABLED - crc16 - CRC16 calculation routines ++ ++ ++#ifndef CRC16_ENABLED ++#define CRC16_ENABLED 1 ++#endif ++ ++// NRF_BALLOC_ENABLED - nrf_balloc - Block allocator module ++//========================================================== ++#ifndef NRF_BALLOC_ENABLED ++#define NRF_BALLOC_ENABLED 1 ++#endif ++// NRF_BALLOC_CONFIG_DEBUG_ENABLED - Enables debug mode in the module. ++//========================================================== ++#ifndef NRF_BALLOC_CONFIG_DEBUG_ENABLED ++#define NRF_BALLOC_CONFIG_DEBUG_ENABLED 0 ++#endif ++// NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS - Number of words used as head guard. <0-255> ++ ++ ++#ifndef NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS ++#define NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS 1 ++#endif ++ ++// NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS - Number of words used as tail guard. <0-255> ++ ++ ++#ifndef NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS ++#define NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS 1 ++#endif ++ ++// NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED - Enables basic checks in this module. ++ ++ ++#ifndef NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED ++#define NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED 0 ++#endif ++ ++// NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED - Enables double memory free check in this module. ++ ++ ++#ifndef NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED ++#define NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED 0 ++#endif ++ ++// NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED - Enables free memory corruption check in this module. ++ ++ ++#ifndef NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED ++#define NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED 0 ++#endif ++ ++// NRF_BALLOC_CLI_CMDS - Enable CLI commands specific to the module ++ ++ ++#ifndef NRF_BALLOC_CLI_CMDS ++#define NRF_BALLOC_CLI_CMDS 0 ++#endif ++ ++// ++ ++// ++ ++// NRF_FPRINTF_ENABLED - nrf_fprintf - fprintf function. ++ ++ ++#ifndef NRF_FPRINTF_ENABLED ++#define NRF_FPRINTF_ENABLED 1 ++#endif ++ ++// NRF_MEMOBJ_ENABLED - nrf_memobj - Linked memory allocator module ++ ++ ++#ifndef NRF_MEMOBJ_ENABLED ++#define NRF_MEMOBJ_ENABLED 1 ++#endif ++ ++// NRF_QUEUE_ENABLED - nrf_queue - Queue module ++//========================================================== ++#ifndef NRF_QUEUE_ENABLED ++#define NRF_QUEUE_ENABLED 1 ++#endif ++// NRF_QUEUE_CLI_CMDS - Enable CLI commands specific to the module ++ ++ ++#ifndef NRF_QUEUE_CLI_CMDS ++#define NRF_QUEUE_CLI_CMDS 0 ++#endif ++ ++// ++ ++// NRF_SECTION_ITER_ENABLED - nrf_section_iter - Section iterator ++ ++ ++#ifndef NRF_SECTION_ITER_ENABLED ++#define NRF_SECTION_ITER_ENABLED 1 ++#endif ++ ++// NRF_STRERROR_ENABLED - nrf_strerror - Library for converting error code to string. ++ ++ ++#ifndef NRF_STRERROR_ENABLED ++#define NRF_STRERROR_ENABLED 1 ++#endif ++ ++// ++//========================================================== ++ ++// nRF_Log ++ ++//========================================================== ++// NRF_LOG_BACKEND_RTT_ENABLED - nrf_log_backend_rtt - Log RTT backend ++//========================================================== ++#ifndef NRF_LOG_BACKEND_RTT_ENABLED ++#define NRF_LOG_BACKEND_RTT_ENABLED 0 ++#endif ++// NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE - Size of buffer for partially processed strings. ++// Size of the buffer is a trade-off between RAM usage and processing. ++// if buffer is smaller then strings will often be fragmented. ++// It is recommended to use size which will fit typical log and only the ++// longer one will be fragmented. ++ ++#ifndef NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE ++#define NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE 64 ++#endif ++ ++// NRF_LOG_BACKEND_RTT_TX_RETRY_DELAY_MS - Period before retrying writing to RTT ++#ifndef NRF_LOG_BACKEND_RTT_TX_RETRY_DELAY_MS ++#define NRF_LOG_BACKEND_RTT_TX_RETRY_DELAY_MS 1 ++#endif ++ ++// NRF_LOG_BACKEND_RTT_TX_RETRY_CNT - Writing to RTT retries. ++// If RTT fails to accept any new data after retries ++// module assumes that host is not active and on next ++// request it will perform only one write attempt. ++// On successful writing, module assumes that host is active ++// and scheme with retry is applied again. ++ ++#ifndef NRF_LOG_BACKEND_RTT_TX_RETRY_CNT ++#define NRF_LOG_BACKEND_RTT_TX_RETRY_CNT 3 ++#endif ++ ++// ++ ++// NRF_LOG_BACKEND_UART_ENABLED - nrf_log_backend_uart - Log UART backend ++//========================================================== ++#ifndef NRF_LOG_BACKEND_UART_ENABLED ++#define NRF_LOG_BACKEND_UART_ENABLED 0 ++#endif ++// NRF_LOG_BACKEND_UART_TX_PIN - UART TX pin ++#ifndef NRF_LOG_BACKEND_UART_TX_PIN ++#define NRF_LOG_BACKEND_UART_TX_PIN 6 ++#endif ++ ++// NRF_LOG_BACKEND_UART_BAUDRATE - Default Baudrate ++ ++// <323584=> 1200 baud ++// <643072=> 2400 baud ++// <1290240=> 4800 baud ++// <2576384=> 9600 baud ++// <3862528=> 14400 baud ++// <5152768=> 19200 baud ++// <7716864=> 28800 baud ++// <10289152=> 38400 baud ++// <15400960=> 57600 baud ++// <20615168=> 76800 baud ++// <30801920=> 115200 baud ++// <61865984=> 230400 baud ++// <67108864=> 250000 baud ++// <121634816=> 460800 baud ++// <251658240=> 921600 baud ++// <268435456=> 1000000 baud ++ ++#ifndef NRF_LOG_BACKEND_UART_BAUDRATE ++#define NRF_LOG_BACKEND_UART_BAUDRATE 30801920 ++#endif ++ ++// NRF_LOG_BACKEND_UART_TEMP_BUFFER_SIZE - Size of buffer for partially processed strings. ++// Size of the buffer is a trade-off between RAM usage and processing. ++// if buffer is smaller then strings will often be fragmented. ++// It is recommended to use size which will fit typical log and only the ++// longer one will be fragmented. ++ ++#ifndef NRF_LOG_BACKEND_UART_TEMP_BUFFER_SIZE ++#define NRF_LOG_BACKEND_UART_TEMP_BUFFER_SIZE 64 ++#endif ++ ++// ++ ++// NRF_LOG_ENABLED - nrf_log - Logger ++//========================================================== ++#ifndef NRF_LOG_ENABLED ++#define NRF_LOG_ENABLED 0 ++#endif ++// Log message pool - Configuration of log message pool ++ ++//========================================================== ++// NRF_LOG_MSGPOOL_ELEMENT_SIZE - Size of a single element in the pool of memory objects. ++// If a small value is set, then performance of logs processing ++// is degraded because data is fragmented. Bigger value impacts ++// RAM memory utilization. The size is set to fit a message with ++// a timestamp and up to 2 arguments in a single memory object. ++ ++#ifndef NRF_LOG_MSGPOOL_ELEMENT_SIZE ++#define NRF_LOG_MSGPOOL_ELEMENT_SIZE 20 ++#endif ++ ++// NRF_LOG_MSGPOOL_ELEMENT_COUNT - Number of elements in the pool of memory objects ++// If a small value is set, then it may lead to a deadlock ++// in certain cases if backend has high latency and holds ++// multiple messages for long time. Bigger value impacts ++// RAM memory usage. ++ ++#ifndef NRF_LOG_MSGPOOL_ELEMENT_COUNT ++#define NRF_LOG_MSGPOOL_ELEMENT_COUNT 8 ++#endif ++ ++// ++//========================================================== ++ ++// NRF_LOG_ALLOW_OVERFLOW - Configures behavior when circular buffer is full. ++ ++ ++// If set then oldest logs are overwritten. Otherwise a ++// marker is injected informing about overflow. ++ ++#ifndef NRF_LOG_ALLOW_OVERFLOW ++#define NRF_LOG_ALLOW_OVERFLOW 1 ++#endif ++ ++// NRF_LOG_BUFSIZE - Size of the buffer for storing logs (in bytes). ++ ++ ++// Must be power of 2 and multiple of 4. ++// If NRF_LOG_DEFERRED = 0 then buffer size can be reduced to minimum. ++// <128=> 128 ++// <256=> 256 ++// <512=> 512 ++// <1024=> 1024 ++// <2048=> 2048 ++// <4096=> 4096 ++// <8192=> 8192 ++// <16384=> 16384 ++ ++#ifndef NRF_LOG_BUFSIZE ++#define NRF_LOG_BUFSIZE 1024 ++#endif ++ ++// NRF_LOG_CLI_CMDS - Enable CLI commands for the module. ++ ++ ++#ifndef NRF_LOG_CLI_CMDS ++#define NRF_LOG_CLI_CMDS 0 ++#endif ++ ++// NRF_LOG_DEFAULT_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_LOG_DEFAULT_LEVEL ++#define NRF_LOG_DEFAULT_LEVEL 3 ++#endif ++ ++// NRF_LOG_DEFERRED - Enable deffered logger. ++ ++ ++// Log data is buffered and can be processed in idle. ++ ++#ifndef NRF_LOG_DEFERRED ++#define NRF_LOG_DEFERRED 1 ++#endif ++ ++// NRF_LOG_FILTERS_ENABLED - Enable dynamic filtering of logs. ++ ++ ++#ifndef NRF_LOG_FILTERS_ENABLED ++#define NRF_LOG_FILTERS_ENABLED 0 ++#endif ++ ++// NRF_LOG_STR_PUSH_BUFFER_SIZE - Size of the buffer dedicated for strings stored using @ref NRF_LOG_PUSH. ++ ++// <16=> 16 ++// <32=> 32 ++// <64=> 64 ++// <128=> 128 ++// <256=> 256 ++// <512=> 512 ++// <1024=> 1024 ++ ++#ifndef NRF_LOG_STR_PUSH_BUFFER_SIZE ++#define NRF_LOG_STR_PUSH_BUFFER_SIZE 128 ++#endif ++ ++// NRF_LOG_STR_PUSH_BUFFER_SIZE - Size of the buffer dedicated for strings stored using @ref NRF_LOG_PUSH. ++ ++// <16=> 16 ++// <32=> 32 ++// <64=> 64 ++// <128=> 128 ++// <256=> 256 ++// <512=> 512 ++// <1024=> 1024 ++ ++#ifndef NRF_LOG_STR_PUSH_BUFFER_SIZE ++#define NRF_LOG_STR_PUSH_BUFFER_SIZE 128 ++#endif ++ ++// NRF_LOG_USES_COLORS - If enabled then ANSI escape code for colors is prefixed to every string ++//========================================================== ++#ifndef NRF_LOG_USES_COLORS ++#define NRF_LOG_USES_COLORS 0 ++#endif ++// NRF_LOG_COLOR_DEFAULT - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_LOG_COLOR_DEFAULT ++#define NRF_LOG_COLOR_DEFAULT 0 ++#endif ++ ++// NRF_LOG_ERROR_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_LOG_ERROR_COLOR ++#define NRF_LOG_ERROR_COLOR 2 ++#endif ++ ++// NRF_LOG_WARNING_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_LOG_WARNING_COLOR ++#define NRF_LOG_WARNING_COLOR 4 ++#endif ++ ++// ++ ++// NRF_LOG_USES_TIMESTAMP - Enable timestamping ++ ++// Function for getting the timestamp is provided by the user ++//========================================================== ++#ifndef NRF_LOG_USES_TIMESTAMP ++#define NRF_LOG_USES_TIMESTAMP 0 ++#endif ++// NRF_LOG_TIMESTAMP_DEFAULT_FREQUENCY - Default frequency of the timestamp (in Hz) or 0 to use app_timer frequency. ++#ifndef NRF_LOG_TIMESTAMP_DEFAULT_FREQUENCY ++#define NRF_LOG_TIMESTAMP_DEFAULT_FREQUENCY 0 ++#endif ++ ++// ++ ++// nrf_log module configuration ++ ++//========================================================== ++// nrf_log in nRF_Core ++ ++//========================================================== ++// NRF_MPU_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_MPU_CONFIG_LOG_ENABLED ++#define NRF_MPU_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_MPU_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_MPU_CONFIG_LOG_LEVEL ++#define NRF_MPU_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_MPU_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_MPU_CONFIG_INFO_COLOR ++#define NRF_MPU_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_MPU_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_MPU_CONFIG_DEBUG_COLOR ++#define NRF_MPU_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_STACK_GUARD_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_STACK_GUARD_CONFIG_LOG_ENABLED ++#define NRF_STACK_GUARD_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_STACK_GUARD_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_STACK_GUARD_CONFIG_LOG_LEVEL ++#define NRF_STACK_GUARD_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_STACK_GUARD_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_STACK_GUARD_CONFIG_INFO_COLOR ++#define NRF_STACK_GUARD_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_STACK_GUARD_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_STACK_GUARD_CONFIG_DEBUG_COLOR ++#define NRF_STACK_GUARD_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// TASK_MANAGER_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef TASK_MANAGER_CONFIG_LOG_ENABLED ++#define TASK_MANAGER_CONFIG_LOG_ENABLED 0 ++#endif ++// TASK_MANAGER_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef TASK_MANAGER_CONFIG_LOG_LEVEL ++#define TASK_MANAGER_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// TASK_MANAGER_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TASK_MANAGER_CONFIG_INFO_COLOR ++#define TASK_MANAGER_CONFIG_INFO_COLOR 0 ++#endif ++ ++// TASK_MANAGER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TASK_MANAGER_CONFIG_DEBUG_COLOR ++#define TASK_MANAGER_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++//========================================================== ++ ++// nrf_log in nRF_Drivers ++ ++//========================================================== ++// CLOCK_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef CLOCK_CONFIG_LOG_ENABLED ++#define CLOCK_CONFIG_LOG_ENABLED 0 ++#endif ++// CLOCK_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef CLOCK_CONFIG_LOG_LEVEL ++#define CLOCK_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// CLOCK_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef CLOCK_CONFIG_INFO_COLOR ++#define CLOCK_CONFIG_INFO_COLOR 0 ++#endif ++ ++// CLOCK_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef CLOCK_CONFIG_DEBUG_COLOR ++#define CLOCK_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// COMP_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef COMP_CONFIG_LOG_ENABLED ++#define COMP_CONFIG_LOG_ENABLED 0 ++#endif ++// COMP_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef COMP_CONFIG_LOG_LEVEL ++#define COMP_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// COMP_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef COMP_CONFIG_INFO_COLOR ++#define COMP_CONFIG_INFO_COLOR 0 ++#endif ++ ++// COMP_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef COMP_CONFIG_DEBUG_COLOR ++#define COMP_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// GPIOTE_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef GPIOTE_CONFIG_LOG_ENABLED ++#define GPIOTE_CONFIG_LOG_ENABLED 0 ++#endif ++// GPIOTE_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef GPIOTE_CONFIG_LOG_LEVEL ++#define GPIOTE_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// GPIOTE_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef GPIOTE_CONFIG_INFO_COLOR ++#define GPIOTE_CONFIG_INFO_COLOR 0 ++#endif ++ ++// GPIOTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef GPIOTE_CONFIG_DEBUG_COLOR ++#define GPIOTE_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// LPCOMP_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef LPCOMP_CONFIG_LOG_ENABLED ++#define LPCOMP_CONFIG_LOG_ENABLED 0 ++#endif ++// LPCOMP_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef LPCOMP_CONFIG_LOG_LEVEL ++#define LPCOMP_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// LPCOMP_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef LPCOMP_CONFIG_INFO_COLOR ++#define LPCOMP_CONFIG_INFO_COLOR 0 ++#endif ++ ++// LPCOMP_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef LPCOMP_CONFIG_DEBUG_COLOR ++#define LPCOMP_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// MAX3421E_HOST_CONFIG_LOG_ENABLED - Enable logging in the module ++//========================================================== ++#ifndef MAX3421E_HOST_CONFIG_LOG_ENABLED ++#define MAX3421E_HOST_CONFIG_LOG_ENABLED 0 ++#endif ++// MAX3421E_HOST_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef MAX3421E_HOST_CONFIG_LOG_LEVEL ++#define MAX3421E_HOST_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// MAX3421E_HOST_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef MAX3421E_HOST_CONFIG_INFO_COLOR ++#define MAX3421E_HOST_CONFIG_INFO_COLOR 0 ++#endif ++ ++// MAX3421E_HOST_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef MAX3421E_HOST_CONFIG_DEBUG_COLOR ++#define MAX3421E_HOST_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// PDM_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef PDM_CONFIG_LOG_ENABLED ++#define PDM_CONFIG_LOG_ENABLED 0 ++#endif ++// PDM_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef PDM_CONFIG_LOG_LEVEL ++#define PDM_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// PDM_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PDM_CONFIG_INFO_COLOR ++#define PDM_CONFIG_INFO_COLOR 0 ++#endif ++ ++// PDM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PDM_CONFIG_DEBUG_COLOR ++#define PDM_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// PPI_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef PPI_CONFIG_LOG_ENABLED ++#define PPI_CONFIG_LOG_ENABLED 0 ++#endif ++// PPI_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef PPI_CONFIG_LOG_LEVEL ++#define PPI_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// PPI_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PPI_CONFIG_INFO_COLOR ++#define PPI_CONFIG_INFO_COLOR 0 ++#endif ++ ++// PPI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PPI_CONFIG_DEBUG_COLOR ++#define PPI_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// PWM_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef PWM_CONFIG_LOG_ENABLED ++#define PWM_CONFIG_LOG_ENABLED 0 ++#endif ++// PWM_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef PWM_CONFIG_LOG_LEVEL ++#define PWM_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// PWM_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PWM_CONFIG_INFO_COLOR ++#define PWM_CONFIG_INFO_COLOR 0 ++#endif ++ ++// PWM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PWM_CONFIG_DEBUG_COLOR ++#define PWM_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// QDEC_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef QDEC_CONFIG_LOG_ENABLED ++#define QDEC_CONFIG_LOG_ENABLED 0 ++#endif ++// QDEC_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef QDEC_CONFIG_LOG_LEVEL ++#define QDEC_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// QDEC_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef QDEC_CONFIG_INFO_COLOR ++#define QDEC_CONFIG_INFO_COLOR 0 ++#endif ++ ++// QDEC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef QDEC_CONFIG_DEBUG_COLOR ++#define QDEC_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// RNG_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef RNG_CONFIG_LOG_ENABLED ++#define RNG_CONFIG_LOG_ENABLED 0 ++#endif ++// RNG_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef RNG_CONFIG_LOG_LEVEL ++#define RNG_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// RNG_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef RNG_CONFIG_INFO_COLOR ++#define RNG_CONFIG_INFO_COLOR 0 ++#endif ++ ++// RNG_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef RNG_CONFIG_DEBUG_COLOR ++#define RNG_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED - Enables logging of random numbers. ++ ++ ++#ifndef RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED ++#define RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED 0 ++#endif ++ ++// ++ ++// RTC_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef RTC_CONFIG_LOG_ENABLED ++#define RTC_CONFIG_LOG_ENABLED 0 ++#endif ++// RTC_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef RTC_CONFIG_LOG_LEVEL ++#define RTC_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// RTC_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef RTC_CONFIG_INFO_COLOR ++#define RTC_CONFIG_INFO_COLOR 0 ++#endif ++ ++// RTC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef RTC_CONFIG_DEBUG_COLOR ++#define RTC_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// SAADC_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef SAADC_CONFIG_LOG_ENABLED ++#define SAADC_CONFIG_LOG_ENABLED 0 ++#endif ++// SAADC_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef SAADC_CONFIG_LOG_LEVEL ++#define SAADC_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// SAADC_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SAADC_CONFIG_INFO_COLOR ++#define SAADC_CONFIG_INFO_COLOR 0 ++#endif ++ ++// SAADC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SAADC_CONFIG_DEBUG_COLOR ++#define SAADC_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// SPIS_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef SPIS_CONFIG_LOG_ENABLED ++#define SPIS_CONFIG_LOG_ENABLED 0 ++#endif ++// SPIS_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef SPIS_CONFIG_LOG_LEVEL ++#define SPIS_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// SPIS_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SPIS_CONFIG_INFO_COLOR ++#define SPIS_CONFIG_INFO_COLOR 0 ++#endif ++ ++// SPIS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SPIS_CONFIG_DEBUG_COLOR ++#define SPIS_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// SPI_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef SPI_CONFIG_LOG_ENABLED ++#define SPI_CONFIG_LOG_ENABLED 0 ++#endif ++// SPI_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef SPI_CONFIG_LOG_LEVEL ++#define SPI_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// SPI_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SPI_CONFIG_INFO_COLOR ++#define SPI_CONFIG_INFO_COLOR 0 ++#endif ++ ++// SPI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SPI_CONFIG_DEBUG_COLOR ++#define SPI_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// TIMER_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef TIMER_CONFIG_LOG_ENABLED ++#define TIMER_CONFIG_LOG_ENABLED 0 ++#endif ++// TIMER_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef TIMER_CONFIG_LOG_LEVEL ++#define TIMER_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// TIMER_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TIMER_CONFIG_INFO_COLOR ++#define TIMER_CONFIG_INFO_COLOR 0 ++#endif ++ ++// TIMER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TIMER_CONFIG_DEBUG_COLOR ++#define TIMER_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// TWIS_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef TWIS_CONFIG_LOG_ENABLED ++#define TWIS_CONFIG_LOG_ENABLED 0 ++#endif ++// TWIS_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef TWIS_CONFIG_LOG_LEVEL ++#define TWIS_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// TWIS_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TWIS_CONFIG_INFO_COLOR ++#define TWIS_CONFIG_INFO_COLOR 0 ++#endif ++ ++// TWIS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TWIS_CONFIG_DEBUG_COLOR ++#define TWIS_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// TWI_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef TWI_CONFIG_LOG_ENABLED ++#define TWI_CONFIG_LOG_ENABLED 0 ++#endif ++// TWI_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef TWI_CONFIG_LOG_LEVEL ++#define TWI_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// TWI_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TWI_CONFIG_INFO_COLOR ++#define TWI_CONFIG_INFO_COLOR 0 ++#endif ++ ++// TWI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TWI_CONFIG_DEBUG_COLOR ++#define TWI_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// UART_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef UART_CONFIG_LOG_ENABLED ++#define UART_CONFIG_LOG_ENABLED 0 ++#endif ++// UART_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef UART_CONFIG_LOG_LEVEL ++#define UART_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// UART_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef UART_CONFIG_INFO_COLOR ++#define UART_CONFIG_INFO_COLOR 0 ++#endif ++ ++// UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef UART_CONFIG_DEBUG_COLOR ++#define UART_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// USBD_CONFIG_LOG_ENABLED - Enable logging in the module ++//========================================================== ++#ifndef USBD_CONFIG_LOG_ENABLED ++#define USBD_CONFIG_LOG_ENABLED 0 ++#endif ++// USBD_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef USBD_CONFIG_LOG_LEVEL ++#define USBD_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// USBD_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef USBD_CONFIG_INFO_COLOR ++#define USBD_CONFIG_INFO_COLOR 0 ++#endif ++ ++// USBD_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef USBD_CONFIG_DEBUG_COLOR ++#define USBD_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// WDT_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef WDT_CONFIG_LOG_ENABLED ++#define WDT_CONFIG_LOG_ENABLED 0 ++#endif ++// WDT_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef WDT_CONFIG_LOG_LEVEL ++#define WDT_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// WDT_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef WDT_CONFIG_INFO_COLOR ++#define WDT_CONFIG_INFO_COLOR 0 ++#endif ++ ++// WDT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef WDT_CONFIG_DEBUG_COLOR ++#define WDT_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++//========================================================== ++ ++// nrf_log in nRF_Libraries ++ ++//========================================================== ++// APP_TIMER_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef APP_TIMER_CONFIG_LOG_ENABLED ++#define APP_TIMER_CONFIG_LOG_ENABLED 0 ++#endif ++// APP_TIMER_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_TIMER_CONFIG_LOG_LEVEL ++#define APP_TIMER_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// APP_TIMER_CONFIG_INITIAL_LOG_LEVEL - Initial severity level if dynamic filtering is enabled. ++ ++ ++// If module generates a lot of logs, initial log level can ++// be decreased to prevent flooding. Severity level can be ++// increased on instance basis. ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_TIMER_CONFIG_INITIAL_LOG_LEVEL ++#define APP_TIMER_CONFIG_INITIAL_LOG_LEVEL 3 ++#endif ++ ++// APP_TIMER_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_TIMER_CONFIG_INFO_COLOR ++#define APP_TIMER_CONFIG_INFO_COLOR 0 ++#endif ++ ++// APP_TIMER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_TIMER_CONFIG_DEBUG_COLOR ++#define APP_TIMER_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// APP_USBD_CDC_ACM_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef APP_USBD_CDC_ACM_CONFIG_LOG_ENABLED ++#define APP_USBD_CDC_ACM_CONFIG_LOG_ENABLED 0 ++#endif ++// APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL ++#define APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// APP_USBD_CDC_ACM_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_CDC_ACM_CONFIG_INFO_COLOR ++#define APP_USBD_CDC_ACM_CONFIG_INFO_COLOR 0 ++#endif ++ ++// APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR ++#define APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// APP_USBD_CONFIG_LOG_ENABLED - Enable logging in the module. ++//========================================================== ++#ifndef APP_USBD_CONFIG_LOG_ENABLED ++#define APP_USBD_CONFIG_LOG_ENABLED 0 ++#endif ++// APP_USBD_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_USBD_CONFIG_LOG_LEVEL ++#define APP_USBD_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// APP_USBD_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_CONFIG_INFO_COLOR ++#define APP_USBD_CONFIG_INFO_COLOR 0 ++#endif ++ ++// APP_USBD_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_CONFIG_DEBUG_COLOR ++#define APP_USBD_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// APP_USBD_DUMMY_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef APP_USBD_DUMMY_CONFIG_LOG_ENABLED ++#define APP_USBD_DUMMY_CONFIG_LOG_ENABLED 0 ++#endif ++// APP_USBD_DUMMY_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_USBD_DUMMY_CONFIG_LOG_LEVEL ++#define APP_USBD_DUMMY_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// APP_USBD_DUMMY_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_DUMMY_CONFIG_INFO_COLOR ++#define APP_USBD_DUMMY_CONFIG_INFO_COLOR 0 ++#endif ++ ++// APP_USBD_DUMMY_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_DUMMY_CONFIG_DEBUG_COLOR ++#define APP_USBD_DUMMY_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// APP_USBD_MSC_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef APP_USBD_MSC_CONFIG_LOG_ENABLED ++#define APP_USBD_MSC_CONFIG_LOG_ENABLED 0 ++#endif ++// APP_USBD_MSC_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_USBD_MSC_CONFIG_LOG_LEVEL ++#define APP_USBD_MSC_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// APP_USBD_MSC_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_MSC_CONFIG_INFO_COLOR ++#define APP_USBD_MSC_CONFIG_INFO_COLOR 0 ++#endif ++ ++// APP_USBD_MSC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_MSC_CONFIG_DEBUG_COLOR ++#define APP_USBD_MSC_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_ENABLED ++#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_ENABLED 0 ++#endif ++// APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_LEVEL ++#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// APP_USBD_NRF_DFU_TRIGGER_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_INFO_COLOR ++#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_INFO_COLOR 0 ++#endif ++ ++// APP_USBD_NRF_DFU_TRIGGER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_DEBUG_COLOR ++#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_ATFIFO_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_ATFIFO_CONFIG_LOG_ENABLED ++#define NRF_ATFIFO_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_ATFIFO_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_ATFIFO_CONFIG_LOG_LEVEL ++#define NRF_ATFIFO_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_ATFIFO_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_ATFIFO_CONFIG_LOG_INIT_FILTER_LEVEL ++#define NRF_ATFIFO_CONFIG_LOG_INIT_FILTER_LEVEL 3 ++#endif ++ ++// NRF_ATFIFO_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_ATFIFO_CONFIG_INFO_COLOR ++#define NRF_ATFIFO_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_ATFIFO_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_ATFIFO_CONFIG_DEBUG_COLOR ++#define NRF_ATFIFO_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_BALLOC_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_BALLOC_CONFIG_LOG_ENABLED ++#define NRF_BALLOC_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_BALLOC_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BALLOC_CONFIG_LOG_LEVEL ++#define NRF_BALLOC_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_BALLOC_CONFIG_INITIAL_LOG_LEVEL - Initial severity level if dynamic filtering is enabled. ++ ++ ++// If module generates a lot of logs, initial log level can ++// be decreased to prevent flooding. Severity level can be ++// increased on instance basis. ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BALLOC_CONFIG_INITIAL_LOG_LEVEL ++#define NRF_BALLOC_CONFIG_INITIAL_LOG_LEVEL 3 ++#endif ++ ++// NRF_BALLOC_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BALLOC_CONFIG_INFO_COLOR ++#define NRF_BALLOC_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_BALLOC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BALLOC_CONFIG_DEBUG_COLOR ++#define NRF_BALLOC_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_ENABLED ++#define NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_LEVEL ++#define NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_INIT_FILTER_LEVEL ++#define NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_INIT_FILTER_LEVEL 3 ++#endif ++ ++// NRF_BLOCK_DEV_EMPTY_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BLOCK_DEV_EMPTY_CONFIG_INFO_COLOR ++#define NRF_BLOCK_DEV_EMPTY_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_BLOCK_DEV_EMPTY_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BLOCK_DEV_EMPTY_CONFIG_DEBUG_COLOR ++#define NRF_BLOCK_DEV_EMPTY_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_BLOCK_DEV_QSPI_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_BLOCK_DEV_QSPI_CONFIG_LOG_ENABLED ++#define NRF_BLOCK_DEV_QSPI_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_BLOCK_DEV_QSPI_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BLOCK_DEV_QSPI_CONFIG_LOG_LEVEL ++#define NRF_BLOCK_DEV_QSPI_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_BLOCK_DEV_QSPI_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BLOCK_DEV_QSPI_CONFIG_LOG_INIT_FILTER_LEVEL ++#define NRF_BLOCK_DEV_QSPI_CONFIG_LOG_INIT_FILTER_LEVEL 3 ++#endif ++ ++// NRF_BLOCK_DEV_QSPI_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BLOCK_DEV_QSPI_CONFIG_INFO_COLOR ++#define NRF_BLOCK_DEV_QSPI_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_BLOCK_DEV_QSPI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BLOCK_DEV_QSPI_CONFIG_DEBUG_COLOR ++#define NRF_BLOCK_DEV_QSPI_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_BLOCK_DEV_RAM_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_BLOCK_DEV_RAM_CONFIG_LOG_ENABLED ++#define NRF_BLOCK_DEV_RAM_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_BLOCK_DEV_RAM_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BLOCK_DEV_RAM_CONFIG_LOG_LEVEL ++#define NRF_BLOCK_DEV_RAM_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_BLOCK_DEV_RAM_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BLOCK_DEV_RAM_CONFIG_LOG_INIT_FILTER_LEVEL ++#define NRF_BLOCK_DEV_RAM_CONFIG_LOG_INIT_FILTER_LEVEL 3 ++#endif ++ ++// NRF_BLOCK_DEV_RAM_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BLOCK_DEV_RAM_CONFIG_INFO_COLOR ++#define NRF_BLOCK_DEV_RAM_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_BLOCK_DEV_RAM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BLOCK_DEV_RAM_CONFIG_DEBUG_COLOR ++#define NRF_BLOCK_DEV_RAM_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_CLI_BLE_UART_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_CLI_BLE_UART_CONFIG_LOG_ENABLED ++#define NRF_CLI_BLE_UART_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL ++#define NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_CLI_BLE_UART_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_CLI_BLE_UART_CONFIG_INFO_COLOR ++#define NRF_CLI_BLE_UART_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR ++#define NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_CLI_LIBUARTE_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_CLI_LIBUARTE_CONFIG_LOG_ENABLED ++#define NRF_CLI_LIBUARTE_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_CLI_LIBUARTE_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_CLI_LIBUARTE_CONFIG_LOG_LEVEL ++#define NRF_CLI_LIBUARTE_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_CLI_LIBUARTE_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_CLI_LIBUARTE_CONFIG_INFO_COLOR ++#define NRF_CLI_LIBUARTE_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_CLI_LIBUARTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_CLI_LIBUARTE_CONFIG_DEBUG_COLOR ++#define NRF_CLI_LIBUARTE_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_CLI_UART_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_CLI_UART_CONFIG_LOG_ENABLED ++#define NRF_CLI_UART_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_CLI_UART_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_CLI_UART_CONFIG_LOG_LEVEL ++#define NRF_CLI_UART_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_CLI_UART_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_CLI_UART_CONFIG_INFO_COLOR ++#define NRF_CLI_UART_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_CLI_UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_CLI_UART_CONFIG_DEBUG_COLOR ++#define NRF_CLI_UART_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_LIBUARTE_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_LIBUARTE_CONFIG_LOG_ENABLED ++#define NRF_LIBUARTE_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_LIBUARTE_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_LIBUARTE_CONFIG_LOG_LEVEL ++#define NRF_LIBUARTE_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_LIBUARTE_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_LIBUARTE_CONFIG_INFO_COLOR ++#define NRF_LIBUARTE_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_LIBUARTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_LIBUARTE_CONFIG_DEBUG_COLOR ++#define NRF_LIBUARTE_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_MEMOBJ_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_MEMOBJ_CONFIG_LOG_ENABLED ++#define NRF_MEMOBJ_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_MEMOBJ_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_MEMOBJ_CONFIG_LOG_LEVEL ++#define NRF_MEMOBJ_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_MEMOBJ_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_MEMOBJ_CONFIG_INFO_COLOR ++#define NRF_MEMOBJ_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_MEMOBJ_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_MEMOBJ_CONFIG_DEBUG_COLOR ++#define NRF_MEMOBJ_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_PWR_MGMT_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_PWR_MGMT_CONFIG_LOG_ENABLED ++#define NRF_PWR_MGMT_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_PWR_MGMT_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_PWR_MGMT_CONFIG_LOG_LEVEL ++#define NRF_PWR_MGMT_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_PWR_MGMT_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_PWR_MGMT_CONFIG_INFO_COLOR ++#define NRF_PWR_MGMT_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_PWR_MGMT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_PWR_MGMT_CONFIG_DEBUG_COLOR ++#define NRF_PWR_MGMT_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_QUEUE_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_QUEUE_CONFIG_LOG_ENABLED ++#define NRF_QUEUE_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_QUEUE_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_QUEUE_CONFIG_LOG_LEVEL ++#define NRF_QUEUE_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_QUEUE_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_QUEUE_CONFIG_LOG_INIT_FILTER_LEVEL ++#define NRF_QUEUE_CONFIG_LOG_INIT_FILTER_LEVEL 3 ++#endif ++ ++// NRF_QUEUE_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_QUEUE_CONFIG_INFO_COLOR ++#define NRF_QUEUE_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_QUEUE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_QUEUE_CONFIG_DEBUG_COLOR ++#define NRF_QUEUE_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_SDH_ANT_LOG_ENABLED - Enable logging in SoftDevice handler (ANT) module. ++//========================================================== ++#ifndef NRF_SDH_ANT_LOG_ENABLED ++#define NRF_SDH_ANT_LOG_ENABLED 0 ++#endif ++// NRF_SDH_ANT_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_SDH_ANT_LOG_LEVEL ++#define NRF_SDH_ANT_LOG_LEVEL 3 ++#endif ++ ++// NRF_SDH_ANT_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_ANT_INFO_COLOR ++#define NRF_SDH_ANT_INFO_COLOR 0 ++#endif ++ ++// NRF_SDH_ANT_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_ANT_DEBUG_COLOR ++#define NRF_SDH_ANT_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_SDH_BLE_LOG_ENABLED - Enable logging in SoftDevice handler (BLE) module. ++//========================================================== ++#ifndef NRF_SDH_BLE_LOG_ENABLED ++#define NRF_SDH_BLE_LOG_ENABLED 1 ++#endif ++// NRF_SDH_BLE_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_SDH_BLE_LOG_LEVEL ++#define NRF_SDH_BLE_LOG_LEVEL 3 ++#endif ++ ++// NRF_SDH_BLE_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_BLE_INFO_COLOR ++#define NRF_SDH_BLE_INFO_COLOR 0 ++#endif ++ ++// NRF_SDH_BLE_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_BLE_DEBUG_COLOR ++#define NRF_SDH_BLE_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_SDH_LOG_ENABLED - Enable logging in SoftDevice handler module. ++//========================================================== ++#ifndef NRF_SDH_LOG_ENABLED ++#define NRF_SDH_LOG_ENABLED 1 ++#endif ++// NRF_SDH_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_SDH_LOG_LEVEL ++#define NRF_SDH_LOG_LEVEL 3 ++#endif ++ ++// NRF_SDH_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_INFO_COLOR ++#define NRF_SDH_INFO_COLOR 0 ++#endif ++ ++// NRF_SDH_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_DEBUG_COLOR ++#define NRF_SDH_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_SDH_SOC_LOG_ENABLED - Enable logging in SoftDevice handler (SoC) module. ++//========================================================== ++#ifndef NRF_SDH_SOC_LOG_ENABLED ++#define NRF_SDH_SOC_LOG_ENABLED 1 ++#endif ++// NRF_SDH_SOC_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_SDH_SOC_LOG_LEVEL ++#define NRF_SDH_SOC_LOG_LEVEL 3 ++#endif ++ ++// NRF_SDH_SOC_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_SOC_INFO_COLOR ++#define NRF_SDH_SOC_INFO_COLOR 0 ++#endif ++ ++// NRF_SDH_SOC_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_SOC_DEBUG_COLOR ++#define NRF_SDH_SOC_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_SORTLIST_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_SORTLIST_CONFIG_LOG_ENABLED ++#define NRF_SORTLIST_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_SORTLIST_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_SORTLIST_CONFIG_LOG_LEVEL ++#define NRF_SORTLIST_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_SORTLIST_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SORTLIST_CONFIG_INFO_COLOR ++#define NRF_SORTLIST_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_SORTLIST_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SORTLIST_CONFIG_DEBUG_COLOR ++#define NRF_SORTLIST_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_TWI_SENSOR_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_TWI_SENSOR_CONFIG_LOG_ENABLED ++#define NRF_TWI_SENSOR_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_TWI_SENSOR_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_TWI_SENSOR_CONFIG_LOG_LEVEL ++#define NRF_TWI_SENSOR_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_TWI_SENSOR_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_TWI_SENSOR_CONFIG_INFO_COLOR ++#define NRF_TWI_SENSOR_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_TWI_SENSOR_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_TWI_SENSOR_CONFIG_DEBUG_COLOR ++#define NRF_TWI_SENSOR_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// PM_LOG_ENABLED - Enable logging in Peer Manager and its submodules. ++//========================================================== ++#ifndef PM_LOG_ENABLED ++#define PM_LOG_ENABLED 1 ++#endif ++// PM_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef PM_LOG_LEVEL ++#define PM_LOG_LEVEL 3 ++#endif ++ ++// PM_LOG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PM_LOG_INFO_COLOR ++#define PM_LOG_INFO_COLOR 0 ++#endif ++ ++// PM_LOG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PM_LOG_DEBUG_COLOR ++#define PM_LOG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++//========================================================== ++ ++// nrf_log in nRF_Serialization ++ ++//========================================================== ++// SER_HAL_TRANSPORT_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef SER_HAL_TRANSPORT_CONFIG_LOG_ENABLED ++#define SER_HAL_TRANSPORT_CONFIG_LOG_ENABLED 0 ++#endif ++// SER_HAL_TRANSPORT_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef SER_HAL_TRANSPORT_CONFIG_LOG_LEVEL ++#define SER_HAL_TRANSPORT_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// SER_HAL_TRANSPORT_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SER_HAL_TRANSPORT_CONFIG_INFO_COLOR ++#define SER_HAL_TRANSPORT_CONFIG_INFO_COLOR 0 ++#endif ++ ++// SER_HAL_TRANSPORT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SER_HAL_TRANSPORT_CONFIG_DEBUG_COLOR ++#define SER_HAL_TRANSPORT_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++// ++ ++// NRF_LOG_STR_FORMATTER_TIMESTAMP_FORMAT_ENABLED - nrf_log_str_formatter - Log string formatter ++ ++ ++#ifndef NRF_LOG_STR_FORMATTER_TIMESTAMP_FORMAT_ENABLED ++#define NRF_LOG_STR_FORMATTER_TIMESTAMP_FORMAT_ENABLED 1 ++#endif ++ ++// ++//========================================================== ++ ++// nRF_Segger_RTT ++ ++//========================================================== ++// segger_rtt - SEGGER RTT ++ ++//========================================================== ++// SEGGER_RTT_CONFIG_BUFFER_SIZE_UP - Size of upstream buffer. ++// Note that either @ref NRF_LOG_BACKEND_RTT_OUTPUT_BUFFER_SIZE ++// or this value is actually used. It depends on which one is bigger. ++ ++#ifndef SEGGER_RTT_CONFIG_BUFFER_SIZE_UP ++#define SEGGER_RTT_CONFIG_BUFFER_SIZE_UP 512 ++#endif ++ ++// SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS - Size of upstream buffer. ++#ifndef SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS ++#define SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS 2 ++#endif ++ ++// SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN - Size of upstream buffer. ++#ifndef SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN ++#define SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN 16 ++#endif ++ ++// SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS - Size of upstream buffer. ++#ifndef SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS ++#define SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS 2 ++#endif ++ ++// SEGGER_RTT_CONFIG_DEFAULT_MODE - RTT behavior if the buffer is full. ++ ++ ++// The following modes are supported: ++// - SKIP - Do not block, output nothing. ++// - TRIM - Do not block, output as much as fits. ++// - BLOCK - Wait until there is space in the buffer. ++// <0=> SKIP ++// <1=> TRIM ++// <2=> BLOCK_IF_FIFO_FULL ++ ++#ifndef SEGGER_RTT_CONFIG_DEFAULT_MODE ++#define SEGGER_RTT_CONFIG_DEFAULT_MODE 0 ++#endif ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++// nRF_SoftDevice ++ ++//========================================================== ++// NRF_SDH_BLE_ENABLED - nrf_sdh_ble - SoftDevice BLE event handler ++//========================================================== ++#ifndef NRF_SDH_BLE_ENABLED ++#define NRF_SDH_BLE_ENABLED 1 ++#endif ++// BLE Stack configuration - Stack configuration parameters ++ ++// The SoftDevice handler will configure the stack with these parameters when calling @ref nrf_sdh_ble_default_cfg_set. ++// Other libraries might depend on these values; keep them up-to-date even if you are not explicitely calling @ref nrf_sdh_ble_default_cfg_set. ++//========================================================== ++// NRF_SDH_BLE_GAP_DATA_LENGTH <27-251> ++ ++ ++// Requested BLE GAP data length to be negotiated. ++ ++#ifndef NRF_SDH_BLE_GAP_DATA_LENGTH ++#define NRF_SDH_BLE_GAP_DATA_LENGTH 27 ++#endif ++ ++// NRF_SDH_BLE_PERIPHERAL_LINK_COUNT - Maximum number of peripheral links. ++#ifndef NRF_SDH_BLE_PERIPHERAL_LINK_COUNT ++#define NRF_SDH_BLE_PERIPHERAL_LINK_COUNT 8 ++#endif ++ ++// NRF_SDH_BLE_CENTRAL_LINK_COUNT - Maximum number of central links. ++#ifndef NRF_SDH_BLE_CENTRAL_LINK_COUNT ++#define NRF_SDH_BLE_CENTRAL_LINK_COUNT 8 ++#endif ++ ++// NRF_SDH_BLE_TOTAL_LINK_COUNT - Total link count. ++// Maximum number of total concurrent connections using the default configuration. ++ ++#ifndef NRF_SDH_BLE_TOTAL_LINK_COUNT ++#define NRF_SDH_BLE_TOTAL_LINK_COUNT 1 ++#endif ++ ++// NRF_SDH_BLE_GAP_EVENT_LENGTH - GAP event length. ++// The time set aside for this connection on every connection interval in 1.25 ms units. ++ ++#ifndef NRF_SDH_BLE_GAP_EVENT_LENGTH ++#define NRF_SDH_BLE_GAP_EVENT_LENGTH 6 ++#endif ++ ++// NRF_SDH_BLE_GATT_MAX_MTU_SIZE - Static maximum MTU size. ++#ifndef NRF_SDH_BLE_GATT_MAX_MTU_SIZE ++#define NRF_SDH_BLE_GATT_MAX_MTU_SIZE 250 ++#endif ++ ++// NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE - Attribute Table size in bytes. The size must be a multiple of 4. ++#ifndef NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE ++#define NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE 1408 ++#endif ++ ++// NRF_SDH_BLE_VS_UUID_COUNT - The number of vendor-specific UUIDs. ++#ifndef NRF_SDH_BLE_VS_UUID_COUNT ++#define NRF_SDH_BLE_VS_UUID_COUNT 0 ++#endif ++ ++// NRF_SDH_BLE_SERVICE_CHANGED - Include the Service Changed characteristic in the Attribute Table. ++ ++ ++#ifndef NRF_SDH_BLE_SERVICE_CHANGED ++#define NRF_SDH_BLE_SERVICE_CHANGED 0 ++#endif ++ ++// ++//========================================================== ++ ++// BLE Observers - Observers and priority levels ++ ++//========================================================== ++// NRF_SDH_BLE_OBSERVER_PRIO_LEVELS - Total number of priority levels for BLE observers. ++// This setting configures the number of priority levels available for BLE event handlers. ++// The priority level of a handler determines the order in which it receives events, with respect to other handlers. ++ ++#ifndef NRF_SDH_BLE_OBSERVER_PRIO_LEVELS ++#define NRF_SDH_BLE_OBSERVER_PRIO_LEVELS 4 ++#endif ++ ++// BLE Observers priorities - Invididual priorities ++ ++//========================================================== ++// BLE_ADV_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Advertising module. ++ ++#ifndef BLE_ADV_BLE_OBSERVER_PRIO ++#define BLE_ADV_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// BLE_ANCS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Apple Notification Service Client. ++ ++#ifndef BLE_ANCS_C_BLE_OBSERVER_PRIO ++#define BLE_ANCS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_ANS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Alert Notification Service Client. ++ ++#ifndef BLE_ANS_C_BLE_OBSERVER_PRIO ++#define BLE_ANS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_BAS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Battery Service. ++ ++#ifndef BLE_BAS_BLE_OBSERVER_PRIO ++#define BLE_BAS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_BAS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Battery Service Client. ++ ++#ifndef BLE_BAS_C_BLE_OBSERVER_PRIO ++#define BLE_BAS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_BPS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Blood Pressure Service. ++ ++#ifndef BLE_BPS_BLE_OBSERVER_PRIO ++#define BLE_BPS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_CONN_PARAMS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Connection parameters module. ++ ++#ifndef BLE_CONN_PARAMS_BLE_OBSERVER_PRIO ++#define BLE_CONN_PARAMS_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// BLE_CONN_STATE_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Connection State module. ++ ++#ifndef BLE_CONN_STATE_BLE_OBSERVER_PRIO ++#define BLE_CONN_STATE_BLE_OBSERVER_PRIO 0 ++#endif ++ ++// BLE_CSCS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Cycling Speed and Cadence Service. ++ ++#ifndef BLE_CSCS_BLE_OBSERVER_PRIO ++#define BLE_CSCS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_CTS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Current Time Service Client. ++ ++#ifndef BLE_CTS_C_BLE_OBSERVER_PRIO ++#define BLE_CTS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_DB_DISC_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Database Discovery module. ++ ++#ifndef BLE_DB_DISC_BLE_OBSERVER_PRIO ++#define BLE_DB_DISC_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// BLE_DFU_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the DFU Service. ++ ++#ifndef BLE_DFU_BLE_OBSERVER_PRIO ++#define BLE_DFU_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_DIS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Device Information Client. ++ ++#ifndef BLE_DIS_C_BLE_OBSERVER_PRIO ++#define BLE_DIS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_GLS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Glucose Service. ++ ++#ifndef BLE_GLS_BLE_OBSERVER_PRIO ++#define BLE_GLS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_HIDS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Human Interface Device Service. ++ ++#ifndef BLE_HIDS_BLE_OBSERVER_PRIO ++#define BLE_HIDS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_HRS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Heart Rate Service. ++ ++#ifndef BLE_HRS_BLE_OBSERVER_PRIO ++#define BLE_HRS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_HRS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Heart Rate Service Client. ++ ++#ifndef BLE_HRS_C_BLE_OBSERVER_PRIO ++#define BLE_HRS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_HTS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Health Thermometer Service. ++ ++#ifndef BLE_HTS_BLE_OBSERVER_PRIO ++#define BLE_HTS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_IAS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Immediate Alert Service. ++ ++#ifndef BLE_IAS_BLE_OBSERVER_PRIO ++#define BLE_IAS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_IAS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Immediate Alert Service Client. ++ ++#ifndef BLE_IAS_C_BLE_OBSERVER_PRIO ++#define BLE_IAS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_LBS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the LED Button Service. ++ ++#ifndef BLE_LBS_BLE_OBSERVER_PRIO ++#define BLE_LBS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_LBS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the LED Button Service Client. ++ ++#ifndef BLE_LBS_C_BLE_OBSERVER_PRIO ++#define BLE_LBS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_LLS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Link Loss Service. ++ ++#ifndef BLE_LLS_BLE_OBSERVER_PRIO ++#define BLE_LLS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_LNS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Location Navigation Service. ++ ++#ifndef BLE_LNS_BLE_OBSERVER_PRIO ++#define BLE_LNS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_NUS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the UART Service. ++ ++#ifndef BLE_NUS_BLE_OBSERVER_PRIO ++#define BLE_NUS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_NUS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the UART Central Service. ++ ++#ifndef BLE_NUS_C_BLE_OBSERVER_PRIO ++#define BLE_NUS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_OTS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Object transfer service. ++ ++#ifndef BLE_OTS_BLE_OBSERVER_PRIO ++#define BLE_OTS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_OTS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Object transfer service client. ++ ++#ifndef BLE_OTS_C_BLE_OBSERVER_PRIO ++#define BLE_OTS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_RSCS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Running Speed and Cadence Service. ++ ++#ifndef BLE_RSCS_BLE_OBSERVER_PRIO ++#define BLE_RSCS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_RSCS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Running Speed and Cadence Client. ++ ++#ifndef BLE_RSCS_C_BLE_OBSERVER_PRIO ++#define BLE_RSCS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_TPS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the TX Power Service. ++ ++#ifndef BLE_TPS_BLE_OBSERVER_PRIO ++#define BLE_TPS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BSP_BTN_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Button Control module. ++ ++#ifndef BSP_BTN_BLE_OBSERVER_PRIO ++#define BSP_BTN_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the NFC pairing library. ++ ++#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO ++#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the NFC pairing library. ++ ++#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO ++#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the NFC pairing library. ++ ++#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO ++#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// NRF_BLE_BMS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Bond Management Service. ++ ++#ifndef NRF_BLE_BMS_BLE_OBSERVER_PRIO ++#define NRF_BLE_BMS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// NRF_BLE_CGMS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Contiuon Glucose Monitoring Service. ++ ++#ifndef NRF_BLE_CGMS_BLE_OBSERVER_PRIO ++#define NRF_BLE_CGMS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// NRF_BLE_ES_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Eddystone module. ++ ++#ifndef NRF_BLE_ES_BLE_OBSERVER_PRIO ++#define NRF_BLE_ES_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the GATT Service Client. ++ ++#ifndef NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO ++#define NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// NRF_BLE_GATT_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the GATT module. ++ ++#ifndef NRF_BLE_GATT_BLE_OBSERVER_PRIO ++#define NRF_BLE_GATT_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// NRF_BLE_QWR_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Queued writes module. ++ ++#ifndef NRF_BLE_QWR_BLE_OBSERVER_PRIO ++#define NRF_BLE_QWR_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// NRF_BLE_SCAN_OBSERVER_PRIO ++// Priority for dispatching the BLE events to the Scanning Module. ++ ++#ifndef NRF_BLE_SCAN_OBSERVER_PRIO ++#define NRF_BLE_SCAN_OBSERVER_PRIO 1 ++#endif ++ ++// PM_BLE_OBSERVER_PRIO - Priority with which BLE events are dispatched to the Peer Manager module. ++#ifndef PM_BLE_OBSERVER_PRIO ++#define PM_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++ ++// ++ ++// NRF_SDH_ENABLED - nrf_sdh - SoftDevice handler ++//========================================================== ++#ifndef NRF_SDH_ENABLED ++#define NRF_SDH_ENABLED 1 ++#endif ++// Dispatch model ++ ++// This setting configures how Stack events are dispatched to the application. ++//========================================================== ++// NRF_SDH_DISPATCH_MODEL ++ ++ ++// NRF_SDH_DISPATCH_MODEL_INTERRUPT: SoftDevice events are passed to the application from the interrupt context. ++// NRF_SDH_DISPATCH_MODEL_APPSH: SoftDevice events are scheduled using @ref app_scheduler. ++// NRF_SDH_DISPATCH_MODEL_POLLING: SoftDevice events are to be fetched manually. ++// <0=> NRF_SDH_DISPATCH_MODEL_INTERRUPT ++// <1=> NRF_SDH_DISPATCH_MODEL_APPSH ++// <2=> NRF_SDH_DISPATCH_MODEL_POLLING ++ ++#ifndef NRF_SDH_DISPATCH_MODEL ++#define NRF_SDH_DISPATCH_MODEL 0 ++#endif ++ ++// ++//========================================================== ++ ++// Clock - SoftDevice clock configuration ++ ++//========================================================== ++// NRF_SDH_CLOCK_LF_SRC - SoftDevice clock source. ++ ++// <0=> NRF_CLOCK_LF_SRC_RC ++// <1=> NRF_CLOCK_LF_SRC_XTAL ++// <2=> NRF_CLOCK_LF_SRC_SYNTH ++ ++#ifndef NRF_SDH_CLOCK_LF_SRC ++#define NRF_SDH_CLOCK_LF_SRC 1 ++#endif ++ ++// NRF_SDH_CLOCK_LF_RC_CTIV - SoftDevice calibration timer interval. ++#ifndef NRF_SDH_CLOCK_LF_RC_CTIV ++#define NRF_SDH_CLOCK_LF_RC_CTIV 0 ++#endif ++ ++// NRF_SDH_CLOCK_LF_RC_TEMP_CTIV - SoftDevice calibration timer interval under constant temperature. ++// How often (in number of calibration intervals) the RC oscillator shall be calibrated ++// if the temperature has not changed. ++ ++#ifndef NRF_SDH_CLOCK_LF_RC_TEMP_CTIV ++#define NRF_SDH_CLOCK_LF_RC_TEMP_CTIV 0 ++#endif ++ ++// NRF_SDH_CLOCK_LF_ACCURACY - External clock accuracy used in the LL to compute timing. ++ ++// <0=> NRF_CLOCK_LF_ACCURACY_250_PPM ++// <1=> NRF_CLOCK_LF_ACCURACY_500_PPM ++// <2=> NRF_CLOCK_LF_ACCURACY_150_PPM ++// <3=> NRF_CLOCK_LF_ACCURACY_100_PPM ++// <4=> NRF_CLOCK_LF_ACCURACY_75_PPM ++// <5=> NRF_CLOCK_LF_ACCURACY_50_PPM ++// <6=> NRF_CLOCK_LF_ACCURACY_30_PPM ++// <7=> NRF_CLOCK_LF_ACCURACY_20_PPM ++// <8=> NRF_CLOCK_LF_ACCURACY_10_PPM ++// <9=> NRF_CLOCK_LF_ACCURACY_5_PPM ++// <10=> NRF_CLOCK_LF_ACCURACY_2_PPM ++// <11=> NRF_CLOCK_LF_ACCURACY_1_PPM ++ ++#ifndef NRF_SDH_CLOCK_LF_ACCURACY ++#define NRF_SDH_CLOCK_LF_ACCURACY 7 ++#endif ++ ++// ++//========================================================== ++ ++// SDH Observers - Observers and priority levels ++ ++//========================================================== ++// NRF_SDH_REQ_OBSERVER_PRIO_LEVELS - Total number of priority levels for request observers. ++// This setting configures the number of priority levels available for the SoftDevice request event handlers. ++// The priority level of a handler determines the order in which it receives events, with respect to other handlers. ++ ++#ifndef NRF_SDH_REQ_OBSERVER_PRIO_LEVELS ++#define NRF_SDH_REQ_OBSERVER_PRIO_LEVELS 2 ++#endif ++ ++// NRF_SDH_STATE_OBSERVER_PRIO_LEVELS - Total number of priority levels for state observers. ++// This setting configures the number of priority levels available for the SoftDevice state event handlers. ++// The priority level of a handler determines the order in which it receives events, with respect to other handlers. ++ ++#ifndef NRF_SDH_STATE_OBSERVER_PRIO_LEVELS ++#define NRF_SDH_STATE_OBSERVER_PRIO_LEVELS 2 ++#endif ++ ++// NRF_SDH_STACK_OBSERVER_PRIO_LEVELS - Total number of priority levels for stack event observers. ++// This setting configures the number of priority levels available for the SoftDevice stack event handlers (ANT, BLE, SoC). ++// The priority level of a handler determines the order in which it receives events, with respect to other handlers. ++ ++#ifndef NRF_SDH_STACK_OBSERVER_PRIO_LEVELS ++#define NRF_SDH_STACK_OBSERVER_PRIO_LEVELS 2 ++#endif ++ ++ ++// State Observers priorities - Invididual priorities ++ ++//========================================================== ++// CLOCK_CONFIG_STATE_OBSERVER_PRIO ++// Priority with which state events are dispatched to the Clock driver. ++ ++#ifndef CLOCK_CONFIG_STATE_OBSERVER_PRIO ++#define CLOCK_CONFIG_STATE_OBSERVER_PRIO 0 ++#endif ++ ++// POWER_CONFIG_STATE_OBSERVER_PRIO ++// Priority with which state events are dispatched to the Power driver. ++ ++#ifndef POWER_CONFIG_STATE_OBSERVER_PRIO ++#define POWER_CONFIG_STATE_OBSERVER_PRIO 0 ++#endif ++ ++// RNG_CONFIG_STATE_OBSERVER_PRIO ++// Priority with which state events are dispatched to this module. ++ ++#ifndef RNG_CONFIG_STATE_OBSERVER_PRIO ++#define RNG_CONFIG_STATE_OBSERVER_PRIO 0 ++#endif ++ ++// ++//========================================================== ++ ++// Stack Event Observers priorities - Invididual priorities ++ ++//========================================================== ++// NRF_SDH_ANT_STACK_OBSERVER_PRIO ++// This setting configures the priority with which ANT events are processed with respect to other events coming from the stack. ++// Modify this setting if you need to have ANT events dispatched before or after other stack events, such as BLE or SoC. ++// Zero is the highest priority. ++ ++#ifndef NRF_SDH_ANT_STACK_OBSERVER_PRIO ++#define NRF_SDH_ANT_STACK_OBSERVER_PRIO 0 ++#endif ++ ++// NRF_SDH_BLE_STACK_OBSERVER_PRIO ++// This setting configures the priority with which BLE events are processed with respect to other events coming from the stack. ++// Modify this setting if you need to have BLE events dispatched before or after other stack events, such as ANT or SoC. ++// Zero is the highest priority. ++ ++#ifndef NRF_SDH_BLE_STACK_OBSERVER_PRIO ++#define NRF_SDH_BLE_STACK_OBSERVER_PRIO 0 ++#endif ++ ++// NRF_SDH_SOC_STACK_OBSERVER_PRIO ++// This setting configures the priority with which SoC events are processed with respect to other events coming from the stack. ++// Modify this setting if you need to have SoC events dispatched before or after other stack events, such as ANT or BLE. ++// Zero is the highest priority. ++ ++#ifndef NRF_SDH_SOC_STACK_OBSERVER_PRIO ++#define NRF_SDH_SOC_STACK_OBSERVER_PRIO 0 ++#endif ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++ ++// ++ ++// NRF_SDH_SOC_ENABLED - nrf_sdh_soc - SoftDevice SoC event handler ++//========================================================== ++#ifndef NRF_SDH_SOC_ENABLED ++#define NRF_SDH_SOC_ENABLED 1 ++#endif ++// SoC Observers - Observers and priority levels ++ ++//========================================================== ++// NRF_SDH_SOC_OBSERVER_PRIO_LEVELS - Total number of priority levels for SoC observers. ++// This setting configures the number of priority levels available for the SoC event handlers. ++// The priority level of a handler determines the order in which it receives events, with respect to other handlers. ++ ++#ifndef NRF_SDH_SOC_OBSERVER_PRIO_LEVELS ++#define NRF_SDH_SOC_OBSERVER_PRIO_LEVELS 2 ++#endif ++ ++// SoC Observers priorities - Invididual priorities ++ ++//========================================================== ++// BLE_ADV_SOC_OBSERVER_PRIO ++// Priority with which SoC events are dispatched to the Advertising module. ++ ++#ifndef BLE_ADV_SOC_OBSERVER_PRIO ++#define BLE_ADV_SOC_OBSERVER_PRIO 1 ++#endif ++ ++// BLE_DFU_SOC_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the DFU Service. ++ ++#ifndef BLE_DFU_SOC_OBSERVER_PRIO ++#define BLE_DFU_SOC_OBSERVER_PRIO 1 ++#endif ++ ++// CLOCK_CONFIG_SOC_OBSERVER_PRIO ++// Priority with which SoC events are dispatched to the Clock driver. ++ ++#ifndef CLOCK_CONFIG_SOC_OBSERVER_PRIO ++#define CLOCK_CONFIG_SOC_OBSERVER_PRIO 0 ++#endif ++ ++// POWER_CONFIG_SOC_OBSERVER_PRIO ++// Priority with which SoC events are dispatched to the Power driver. ++ ++#ifndef POWER_CONFIG_SOC_OBSERVER_PRIO ++#define POWER_CONFIG_SOC_OBSERVER_PRIO 0 ++#endif ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++ ++// ++ ++// ++//========================================================== ++ ++// <<< end of configuration section >>> ++#endif //SDK_CONFIG_H ++ +diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_132v5_hci_pca10040.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_132v5_hci_pca10040.emProject +new file mode 100644 +index 0000000..ec91733 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_132v5_hci_pca10040.emProject +@@ -0,0 +1,155 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_132v5_hci_pca10040.emSession nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_132v5_hci_pca10040.emSession +new file mode 100644 +index 0000000..811c3c5 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/ble_connectivity_132v5_hci_pca10040.emSession +@@ -0,0 +1,7 @@ ++ ++ ++ ++ ++ ++ ++ +\ No newline at end of file +diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/flash_placement.xml +new file mode 100644 +index 0000000..c9cc513 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/flash_placement.xml +@@ -0,0 +1,49 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/armgcc/ble_connectivity_gcc_nrf52.ld +index e8a3735..7161fc8 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/armgcc/ble_connectivity_gcc_nrf52.ld +@@ -7,10 +7,17 @@ MEMORY + { + FLASH (rx) : ORIGIN = 0x19000, LENGTH = 0x17000 + RAM (rwx) : ORIGIN = 0x20002750, LENGTH = 0x38b0 ++ connectivity_version_info (r) : ORIGIN = 0x50000, LENGTH = 0x18 + } + + SECTIONS + { ++ .connectivity_version_info : ++ { ++ PROVIDE(__start_connectivity_version_info = .); ++ KEEP(*(SORT(.connectivity_version_info*))) ++ PROVIDE(__stop_connectivity_version_info = .); ++ } > connectivity_version_info + } + + SECTIONS +@@ -69,6 +76,12 @@ SECTIONS + KEEP(*(.nrf_balloc)) + PROVIDE(__stop_nrf_balloc = .); + } > FLASH ++ .sdh_state_observers : ++ { ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); ++ } > FLASH + .sdh_stack_observers : + { + PROVIDE(__start_sdh_stack_observers = .); +@@ -81,12 +94,6 @@ SECTIONS + KEEP(*(SORT(.sdh_req_observers*))) + PROVIDE(__stop_sdh_req_observers = .); + } > FLASH +- .sdh_state_observers : +- { +- PROVIDE(__start_sdh_state_observers = .); +- KEEP(*(SORT(.sdh_state_observers*))) +- PROVIDE(__stop_sdh_state_observers = .); +- } > FLASH + .log_backends : + { + PROVIDE(__start_log_backends = .); +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/config/sdk_config.h +index 6539e77..3119381 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/config/sdk_config.h ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/config/sdk_config.h +@@ -397,6 +397,136 @@ + + // + ++// QSPI_ENABLED - nrf_drv_qspi - QSPI peripheral driver - legacy layer ++//========================================================== ++#ifndef QSPI_ENABLED ++#define QSPI_ENABLED 0 ++#endif ++// QSPI_CONFIG_SCK_DELAY - tSHSL, tWHSL and tSHWL in number of 16 MHz periods (62.5 ns). <0-255> ++ ++ ++#ifndef QSPI_CONFIG_SCK_DELAY ++#define QSPI_CONFIG_SCK_DELAY 1 ++#endif ++ ++// QSPI_CONFIG_XIP_OFFSET - Address offset in the external memory for Execute in Place operation. ++#ifndef QSPI_CONFIG_XIP_OFFSET ++#define QSPI_CONFIG_XIP_OFFSET 0 ++#endif ++ ++// QSPI_CONFIG_READOC - Number of data lines and opcode used for reading. ++ ++// <0=> FastRead ++// <1=> Read2O ++// <2=> Read2IO ++// <3=> Read4O ++// <4=> Read4IO ++ ++#ifndef QSPI_CONFIG_READOC ++#define QSPI_CONFIG_READOC 0 ++#endif ++ ++// QSPI_CONFIG_WRITEOC - Number of data lines and opcode used for writing. ++ ++// <0=> PP ++// <1=> PP2O ++// <2=> PP4O ++// <3=> PP4IO ++ ++#ifndef QSPI_CONFIG_WRITEOC ++#define QSPI_CONFIG_WRITEOC 0 ++#endif ++ ++// QSPI_CONFIG_ADDRMODE - Addressing mode. ++ ++// <0=> 24bit ++// <1=> 32bit ++ ++#ifndef QSPI_CONFIG_ADDRMODE ++#define QSPI_CONFIG_ADDRMODE 0 ++#endif ++ ++// QSPI_CONFIG_MODE - SPI mode. ++ ++// <0=> Mode 0 ++// <1=> Mode 1 ++ ++#ifndef QSPI_CONFIG_MODE ++#define QSPI_CONFIG_MODE 0 ++#endif ++ ++// QSPI_CONFIG_FREQUENCY - Frequency divider. ++ ++// <0=> 32MHz/1 ++// <1=> 32MHz/2 ++// <2=> 32MHz/3 ++// <3=> 32MHz/4 ++// <4=> 32MHz/5 ++// <5=> 32MHz/6 ++// <6=> 32MHz/7 ++// <7=> 32MHz/8 ++// <8=> 32MHz/9 ++// <9=> 32MHz/10 ++// <10=> 32MHz/11 ++// <11=> 32MHz/12 ++// <12=> 32MHz/13 ++// <13=> 32MHz/14 ++// <14=> 32MHz/15 ++// <15=> 32MHz/16 ++ ++#ifndef QSPI_CONFIG_FREQUENCY ++#define QSPI_CONFIG_FREQUENCY 15 ++#endif ++ ++// QSPI_PIN_SCK - SCK pin value. ++#ifndef QSPI_PIN_SCK ++#define QSPI_PIN_SCK NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_CSN - CSN pin value. ++#ifndef QSPI_PIN_CSN ++#define QSPI_PIN_CSN NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO0 - IO0 pin value. ++#ifndef QSPI_PIN_IO0 ++#define QSPI_PIN_IO0 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO1 - IO1 pin value. ++#ifndef QSPI_PIN_IO1 ++#define QSPI_PIN_IO1 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO2 - IO2 pin value. ++#ifndef QSPI_PIN_IO2 ++#define QSPI_PIN_IO2 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO3 - IO3 pin value. ++#ifndef QSPI_PIN_IO3 ++#define QSPI_PIN_IO3 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef QSPI_CONFIG_IRQ_PRIORITY ++#define QSPI_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ + // UART_ENABLED - nrf_drv_uart - UART/UARTE peripheral driver - legacy layer + //========================================================== + #ifndef UART_ENABLED +@@ -3998,132 +4128,6 @@ + #define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 + #endif + +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- + // NRF_BLE_BMS_BLE_OBSERVER_PRIO + // Priority with which BLE events are dispatched to the Bond Management Service. + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/ble_connectivity_s112_hci_pca10040e.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/ble_connectivity_s112_hci_pca10040e.emProject +index bbf3d52..2a6c303 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/ble_connectivity_s112_hci_pca10040e.emProject ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/ble_connectivity_s112_hci_pca10040e.emProject +@@ -28,7 +28,7 @@ + linker_printf_fmt_level="long" + linker_section_placement_file="flash_placement.xml" + linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x30000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x6000;FLASH_START=0x19000;FLASH_SIZE=0x17000;RAM_START=0x20002750;RAM_SIZE=0x38b0" +- linker_section_placements_segments="FLASH RX 0x0 0x30000;RAM RWX 0x20000000 0x6000" ++ linker_section_placements_segments="FLASH RX 0x0 0x30000;RAM RWX 0x20000000 0x6000;connectivity_version_info RX 0x50000 0x18" + project_directory="" + project_type="Executable" /> + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/flash_placement.xml +index 6b7653b..c9cc513 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_hci/ses/flash_placement.xml +@@ -11,9 +11,9 @@ + + + ++ + + +- + + + +@@ -43,4 +43,7 @@ + + + ++ ++ ++ + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/armgcc/ble_connectivity_gcc_nrf52.ld +index 40d23f1..ce61515 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/armgcc/ble_connectivity_gcc_nrf52.ld +@@ -7,10 +7,17 @@ MEMORY + { + FLASH (rx) : ORIGIN = 0x19000, LENGTH = 0x17000 + RAM (rwx) : ORIGIN = 0x20002750, LENGTH = 0x38b0 ++ connectivity_version_info (r) : ORIGIN = 0x50000, LENGTH = 0x18 + } + + SECTIONS + { ++ .connectivity_version_info : ++ { ++ PROVIDE(__start_connectivity_version_info = .); ++ KEEP(*(SORT(.connectivity_version_info*))) ++ PROVIDE(__stop_connectivity_version_info = .); ++ } > connectivity_version_info + } + + SECTIONS +@@ -63,6 +70,12 @@ SECTIONS + KEEP(*(SORT(.log_const_data*))) + PROVIDE(__stop_log_const_data = .); + } > FLASH ++ .sdh_state_observers : ++ { ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); ++ } > FLASH + .sdh_stack_observers : + { + PROVIDE(__start_sdh_stack_observers = .); +@@ -75,12 +88,6 @@ SECTIONS + KEEP(*(SORT(.sdh_req_observers*))) + PROVIDE(__stop_sdh_req_observers = .); + } > FLASH +- .sdh_state_observers : +- { +- PROVIDE(__start_sdh_state_observers = .); +- KEEP(*(SORT(.sdh_state_observers*))) +- PROVIDE(__stop_sdh_state_observers = .); +- } > FLASH + .log_backends : + { + PROVIDE(__start_log_backends = .); +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/config/sdk_config.h +index 4adb2af..00e28ae 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/config/sdk_config.h ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/config/sdk_config.h +@@ -598,6 +598,136 @@ + + // + ++// QSPI_ENABLED - nrf_drv_qspi - QSPI peripheral driver - legacy layer ++//========================================================== ++#ifndef QSPI_ENABLED ++#define QSPI_ENABLED 0 ++#endif ++// QSPI_CONFIG_SCK_DELAY - tSHSL, tWHSL and tSHWL in number of 16 MHz periods (62.5 ns). <0-255> ++ ++ ++#ifndef QSPI_CONFIG_SCK_DELAY ++#define QSPI_CONFIG_SCK_DELAY 1 ++#endif ++ ++// QSPI_CONFIG_XIP_OFFSET - Address offset in the external memory for Execute in Place operation. ++#ifndef QSPI_CONFIG_XIP_OFFSET ++#define QSPI_CONFIG_XIP_OFFSET 0 ++#endif ++ ++// QSPI_CONFIG_READOC - Number of data lines and opcode used for reading. ++ ++// <0=> FastRead ++// <1=> Read2O ++// <2=> Read2IO ++// <3=> Read4O ++// <4=> Read4IO ++ ++#ifndef QSPI_CONFIG_READOC ++#define QSPI_CONFIG_READOC 0 ++#endif ++ ++// QSPI_CONFIG_WRITEOC - Number of data lines and opcode used for writing. ++ ++// <0=> PP ++// <1=> PP2O ++// <2=> PP4O ++// <3=> PP4IO ++ ++#ifndef QSPI_CONFIG_WRITEOC ++#define QSPI_CONFIG_WRITEOC 0 ++#endif ++ ++// QSPI_CONFIG_ADDRMODE - Addressing mode. ++ ++// <0=> 24bit ++// <1=> 32bit ++ ++#ifndef QSPI_CONFIG_ADDRMODE ++#define QSPI_CONFIG_ADDRMODE 0 ++#endif ++ ++// QSPI_CONFIG_MODE - SPI mode. ++ ++// <0=> Mode 0 ++// <1=> Mode 1 ++ ++#ifndef QSPI_CONFIG_MODE ++#define QSPI_CONFIG_MODE 0 ++#endif ++ ++// QSPI_CONFIG_FREQUENCY - Frequency divider. ++ ++// <0=> 32MHz/1 ++// <1=> 32MHz/2 ++// <2=> 32MHz/3 ++// <3=> 32MHz/4 ++// <4=> 32MHz/5 ++// <5=> 32MHz/6 ++// <6=> 32MHz/7 ++// <7=> 32MHz/8 ++// <8=> 32MHz/9 ++// <9=> 32MHz/10 ++// <10=> 32MHz/11 ++// <11=> 32MHz/12 ++// <12=> 32MHz/13 ++// <13=> 32MHz/14 ++// <14=> 32MHz/15 ++// <15=> 32MHz/16 ++ ++#ifndef QSPI_CONFIG_FREQUENCY ++#define QSPI_CONFIG_FREQUENCY 15 ++#endif ++ ++// QSPI_PIN_SCK - SCK pin value. ++#ifndef QSPI_PIN_SCK ++#define QSPI_PIN_SCK NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_CSN - CSN pin value. ++#ifndef QSPI_PIN_CSN ++#define QSPI_PIN_CSN NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO0 - IO0 pin value. ++#ifndef QSPI_PIN_IO0 ++#define QSPI_PIN_IO0 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO1 - IO1 pin value. ++#ifndef QSPI_PIN_IO1 ++#define QSPI_PIN_IO1 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO2 - IO2 pin value. ++#ifndef QSPI_PIN_IO2 ++#define QSPI_PIN_IO2 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO3 - IO3 pin value. ++#ifndef QSPI_PIN_IO3 ++#define QSPI_PIN_IO3 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef QSPI_CONFIG_IRQ_PRIORITY ++#define QSPI_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ + // SPIS_ENABLED - nrf_drv_spis - SPIS peripheral driver - legacy layer + //========================================================== + #ifndef SPIS_ENABLED +@@ -4148,132 +4278,6 @@ + #define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 + #endif + +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- + // NRF_BLE_BMS_BLE_OBSERVER_PRIO + // Priority with which BLE events are dispatched to the Bond Management Service. + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/ble_connectivity_s112_spi_pca10040e.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/ble_connectivity_s112_spi_pca10040e.emProject +index 89c1d8f..0dc51b4 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/ble_connectivity_s112_spi_pca10040e.emProject ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/ble_connectivity_s112_spi_pca10040e.emProject +@@ -28,7 +28,7 @@ + linker_printf_fmt_level="long" + linker_section_placement_file="flash_placement.xml" + linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x30000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x6000;FLASH_START=0x19000;FLASH_SIZE=0x17000;RAM_START=0x20002750;RAM_SIZE=0x38b0" +- linker_section_placements_segments="FLASH RX 0x0 0x30000;RAM RWX 0x20000000 0x6000" ++ linker_section_placements_segments="FLASH RX 0x0 0x30000;RAM RWX 0x20000000 0x6000;connectivity_version_info RX 0x50000 0x18" + project_directory="" + project_type="Executable" /> + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/flash_placement.xml +index a801e6e..0708731 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi/ses/flash_placement.xml +@@ -10,9 +10,9 @@ + + + ++ + + +- + + + +@@ -42,4 +42,7 @@ + + + ++ ++ ++ + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld +index 40d23f1..ce61515 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld +@@ -7,10 +7,17 @@ MEMORY + { + FLASH (rx) : ORIGIN = 0x19000, LENGTH = 0x17000 + RAM (rwx) : ORIGIN = 0x20002750, LENGTH = 0x38b0 ++ connectivity_version_info (r) : ORIGIN = 0x50000, LENGTH = 0x18 + } + + SECTIONS + { ++ .connectivity_version_info : ++ { ++ PROVIDE(__start_connectivity_version_info = .); ++ KEEP(*(SORT(.connectivity_version_info*))) ++ PROVIDE(__stop_connectivity_version_info = .); ++ } > connectivity_version_info + } + + SECTIONS +@@ -63,6 +70,12 @@ SECTIONS + KEEP(*(SORT(.log_const_data*))) + PROVIDE(__stop_log_const_data = .); + } > FLASH ++ .sdh_state_observers : ++ { ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); ++ } > FLASH + .sdh_stack_observers : + { + PROVIDE(__start_sdh_stack_observers = .); +@@ -75,12 +88,6 @@ SECTIONS + KEEP(*(SORT(.sdh_req_observers*))) + PROVIDE(__stop_sdh_req_observers = .); + } > FLASH +- .sdh_state_observers : +- { +- PROVIDE(__start_sdh_state_observers = .); +- KEEP(*(SORT(.sdh_state_observers*))) +- PROVIDE(__stop_sdh_state_observers = .); +- } > FLASH + .log_backends : + { + PROVIDE(__start_log_backends = .); +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/config/sdk_config.h +index 4adb2af..00e28ae 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/config/sdk_config.h ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/config/sdk_config.h +@@ -598,6 +598,136 @@ + + // + ++// QSPI_ENABLED - nrf_drv_qspi - QSPI peripheral driver - legacy layer ++//========================================================== ++#ifndef QSPI_ENABLED ++#define QSPI_ENABLED 0 ++#endif ++// QSPI_CONFIG_SCK_DELAY - tSHSL, tWHSL and tSHWL in number of 16 MHz periods (62.5 ns). <0-255> ++ ++ ++#ifndef QSPI_CONFIG_SCK_DELAY ++#define QSPI_CONFIG_SCK_DELAY 1 ++#endif ++ ++// QSPI_CONFIG_XIP_OFFSET - Address offset in the external memory for Execute in Place operation. ++#ifndef QSPI_CONFIG_XIP_OFFSET ++#define QSPI_CONFIG_XIP_OFFSET 0 ++#endif ++ ++// QSPI_CONFIG_READOC - Number of data lines and opcode used for reading. ++ ++// <0=> FastRead ++// <1=> Read2O ++// <2=> Read2IO ++// <3=> Read4O ++// <4=> Read4IO ++ ++#ifndef QSPI_CONFIG_READOC ++#define QSPI_CONFIG_READOC 0 ++#endif ++ ++// QSPI_CONFIG_WRITEOC - Number of data lines and opcode used for writing. ++ ++// <0=> PP ++// <1=> PP2O ++// <2=> PP4O ++// <3=> PP4IO ++ ++#ifndef QSPI_CONFIG_WRITEOC ++#define QSPI_CONFIG_WRITEOC 0 ++#endif ++ ++// QSPI_CONFIG_ADDRMODE - Addressing mode. ++ ++// <0=> 24bit ++// <1=> 32bit ++ ++#ifndef QSPI_CONFIG_ADDRMODE ++#define QSPI_CONFIG_ADDRMODE 0 ++#endif ++ ++// QSPI_CONFIG_MODE - SPI mode. ++ ++// <0=> Mode 0 ++// <1=> Mode 1 ++ ++#ifndef QSPI_CONFIG_MODE ++#define QSPI_CONFIG_MODE 0 ++#endif ++ ++// QSPI_CONFIG_FREQUENCY - Frequency divider. ++ ++// <0=> 32MHz/1 ++// <1=> 32MHz/2 ++// <2=> 32MHz/3 ++// <3=> 32MHz/4 ++// <4=> 32MHz/5 ++// <5=> 32MHz/6 ++// <6=> 32MHz/7 ++// <7=> 32MHz/8 ++// <8=> 32MHz/9 ++// <9=> 32MHz/10 ++// <10=> 32MHz/11 ++// <11=> 32MHz/12 ++// <12=> 32MHz/13 ++// <13=> 32MHz/14 ++// <14=> 32MHz/15 ++// <15=> 32MHz/16 ++ ++#ifndef QSPI_CONFIG_FREQUENCY ++#define QSPI_CONFIG_FREQUENCY 15 ++#endif ++ ++// QSPI_PIN_SCK - SCK pin value. ++#ifndef QSPI_PIN_SCK ++#define QSPI_PIN_SCK NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_CSN - CSN pin value. ++#ifndef QSPI_PIN_CSN ++#define QSPI_PIN_CSN NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO0 - IO0 pin value. ++#ifndef QSPI_PIN_IO0 ++#define QSPI_PIN_IO0 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO1 - IO1 pin value. ++#ifndef QSPI_PIN_IO1 ++#define QSPI_PIN_IO1 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO2 - IO2 pin value. ++#ifndef QSPI_PIN_IO2 ++#define QSPI_PIN_IO2 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO3 - IO3 pin value. ++#ifndef QSPI_PIN_IO3 ++#define QSPI_PIN_IO3 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef QSPI_CONFIG_IRQ_PRIORITY ++#define QSPI_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ + // SPIS_ENABLED - nrf_drv_spis - SPIS peripheral driver - legacy layer + //========================================================== + #ifndef SPIS_ENABLED +@@ -4148,132 +4278,6 @@ + #define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 + #endif + +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- + // NRF_BLE_BMS_BLE_OBSERVER_PRIO + // Priority with which BLE events are dispatched to the Bond Management Service. + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/ble_connectivity_s112_spi_5W_pca10040e.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/ble_connectivity_s112_spi_5W_pca10040e.emProject +index d1b0172..552d665 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/ble_connectivity_s112_spi_5W_pca10040e.emProject ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/ble_connectivity_s112_spi_5W_pca10040e.emProject +@@ -28,7 +28,7 @@ + linker_printf_fmt_level="long" + linker_section_placement_file="flash_placement.xml" + linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x30000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x6000;FLASH_START=0x19000;FLASH_SIZE=0x17000;RAM_START=0x20002750;RAM_SIZE=0x38b0" +- linker_section_placements_segments="FLASH RX 0x0 0x30000;RAM RWX 0x20000000 0x6000" ++ linker_section_placements_segments="FLASH RX 0x0 0x30000;RAM RWX 0x20000000 0x6000;connectivity_version_info RX 0x50000 0x18" + project_directory="" + project_type="Executable" /> + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/flash_placement.xml +index a801e6e..0708731 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_spi_5W/ses/flash_placement.xml +@@ -10,9 +10,9 @@ + + + ++ + + +- + + + +@@ -42,4 +42,7 @@ + + + ++ ++ ++ + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/armgcc/ble_connectivity_gcc_nrf52.ld +index 40d23f1..ce61515 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/armgcc/ble_connectivity_gcc_nrf52.ld +@@ -7,10 +7,17 @@ MEMORY + { + FLASH (rx) : ORIGIN = 0x19000, LENGTH = 0x17000 + RAM (rwx) : ORIGIN = 0x20002750, LENGTH = 0x38b0 ++ connectivity_version_info (r) : ORIGIN = 0x50000, LENGTH = 0x18 + } + + SECTIONS + { ++ .connectivity_version_info : ++ { ++ PROVIDE(__start_connectivity_version_info = .); ++ KEEP(*(SORT(.connectivity_version_info*))) ++ PROVIDE(__stop_connectivity_version_info = .); ++ } > connectivity_version_info + } + + SECTIONS +@@ -63,6 +70,12 @@ SECTIONS + KEEP(*(SORT(.log_const_data*))) + PROVIDE(__stop_log_const_data = .); + } > FLASH ++ .sdh_state_observers : ++ { ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); ++ } > FLASH + .sdh_stack_observers : + { + PROVIDE(__start_sdh_stack_observers = .); +@@ -75,12 +88,6 @@ SECTIONS + KEEP(*(SORT(.sdh_req_observers*))) + PROVIDE(__stop_sdh_req_observers = .); + } > FLASH +- .sdh_state_observers : +- { +- PROVIDE(__start_sdh_state_observers = .); +- KEEP(*(SORT(.sdh_state_observers*))) +- PROVIDE(__stop_sdh_state_observers = .); +- } > FLASH + .log_backends : + { + PROVIDE(__start_log_backends = .); +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/config/sdk_config.h +index 7b74df4..f0c345a 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/config/sdk_config.h ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/config/sdk_config.h +@@ -397,6 +397,136 @@ + + // + ++// QSPI_ENABLED - nrf_drv_qspi - QSPI peripheral driver - legacy layer ++//========================================================== ++#ifndef QSPI_ENABLED ++#define QSPI_ENABLED 0 ++#endif ++// QSPI_CONFIG_SCK_DELAY - tSHSL, tWHSL and tSHWL in number of 16 MHz periods (62.5 ns). <0-255> ++ ++ ++#ifndef QSPI_CONFIG_SCK_DELAY ++#define QSPI_CONFIG_SCK_DELAY 1 ++#endif ++ ++// QSPI_CONFIG_XIP_OFFSET - Address offset in the external memory for Execute in Place operation. ++#ifndef QSPI_CONFIG_XIP_OFFSET ++#define QSPI_CONFIG_XIP_OFFSET 0 ++#endif ++ ++// QSPI_CONFIG_READOC - Number of data lines and opcode used for reading. ++ ++// <0=> FastRead ++// <1=> Read2O ++// <2=> Read2IO ++// <3=> Read4O ++// <4=> Read4IO ++ ++#ifndef QSPI_CONFIG_READOC ++#define QSPI_CONFIG_READOC 0 ++#endif ++ ++// QSPI_CONFIG_WRITEOC - Number of data lines and opcode used for writing. ++ ++// <0=> PP ++// <1=> PP2O ++// <2=> PP4O ++// <3=> PP4IO ++ ++#ifndef QSPI_CONFIG_WRITEOC ++#define QSPI_CONFIG_WRITEOC 0 ++#endif ++ ++// QSPI_CONFIG_ADDRMODE - Addressing mode. ++ ++// <0=> 24bit ++// <1=> 32bit ++ ++#ifndef QSPI_CONFIG_ADDRMODE ++#define QSPI_CONFIG_ADDRMODE 0 ++#endif ++ ++// QSPI_CONFIG_MODE - SPI mode. ++ ++// <0=> Mode 0 ++// <1=> Mode 1 ++ ++#ifndef QSPI_CONFIG_MODE ++#define QSPI_CONFIG_MODE 0 ++#endif ++ ++// QSPI_CONFIG_FREQUENCY - Frequency divider. ++ ++// <0=> 32MHz/1 ++// <1=> 32MHz/2 ++// <2=> 32MHz/3 ++// <3=> 32MHz/4 ++// <4=> 32MHz/5 ++// <5=> 32MHz/6 ++// <6=> 32MHz/7 ++// <7=> 32MHz/8 ++// <8=> 32MHz/9 ++// <9=> 32MHz/10 ++// <10=> 32MHz/11 ++// <11=> 32MHz/12 ++// <12=> 32MHz/13 ++// <13=> 32MHz/14 ++// <14=> 32MHz/15 ++// <15=> 32MHz/16 ++ ++#ifndef QSPI_CONFIG_FREQUENCY ++#define QSPI_CONFIG_FREQUENCY 15 ++#endif ++ ++// QSPI_PIN_SCK - SCK pin value. ++#ifndef QSPI_PIN_SCK ++#define QSPI_PIN_SCK NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_CSN - CSN pin value. ++#ifndef QSPI_PIN_CSN ++#define QSPI_PIN_CSN NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO0 - IO0 pin value. ++#ifndef QSPI_PIN_IO0 ++#define QSPI_PIN_IO0 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO1 - IO1 pin value. ++#ifndef QSPI_PIN_IO1 ++#define QSPI_PIN_IO1 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO2 - IO2 pin value. ++#ifndef QSPI_PIN_IO2 ++#define QSPI_PIN_IO2 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO3 - IO3 pin value. ++#ifndef QSPI_PIN_IO3 ++#define QSPI_PIN_IO3 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef QSPI_CONFIG_IRQ_PRIORITY ++#define QSPI_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ + // UART_ENABLED - nrf_drv_uart - UART/UARTE peripheral driver - legacy layer + //========================================================== + #ifndef UART_ENABLED +@@ -3882,132 +4012,6 @@ + #define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 + #endif + +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- + // NRF_BLE_BMS_BLE_OBSERVER_PRIO + // Priority with which BLE events are dispatched to the Bond Management Service. + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/ble_connectivity_s112_uart_pca10040e.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/ble_connectivity_s112_uart_pca10040e.emProject +index 79da171..3d7b71f 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/ble_connectivity_s112_uart_pca10040e.emProject ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/ble_connectivity_s112_uart_pca10040e.emProject +@@ -28,7 +28,7 @@ + linker_printf_fmt_level="long" + linker_section_placement_file="flash_placement.xml" + linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x30000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x6000;FLASH_START=0x19000;FLASH_SIZE=0x17000;RAM_START=0x20002750;RAM_SIZE=0x38b0" +- linker_section_placements_segments="FLASH RX 0x0 0x30000;RAM RWX 0x20000000 0x6000" ++ linker_section_placements_segments="FLASH RX 0x0 0x30000;RAM RWX 0x20000000 0x6000;connectivity_version_info RX 0x50000 0x18" + project_directory="" + project_type="Executable" /> + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/flash_placement.xml +index a801e6e..0708731 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10040e/ser_s112_uart/ses/flash_placement.xml +@@ -10,9 +10,9 @@ + + + ++ + + +- + + + +@@ -42,4 +42,7 @@ + + + ++ ++ ++ + +diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/armgcc/Makefile nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/armgcc/Makefile +new file mode 100644 +index 0000000..29138b1 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/armgcc/Makefile +@@ -0,0 +1,282 @@ ++PROJECT_NAME := ble_connectivity_132v3_usb_hci_pca10056 ++TARGETS := nrf52840_xxaa ++OUTPUT_DIRECTORY := _build ++ ++SDK_ROOT := ../../../../../.. ++PROJ_DIR := ../../.. ++ ++$(OUTPUT_DIRECTORY)/nrf52840_xxaa.out: \ ++ LINKER_SCRIPT := ble_connectivity_gcc_nrf52.ld ++ ++# Source files common to all targets ++SRC_FILES += \ ++ $(SDK_ROOT)/modules/nrfx/mdk/gcc_startup_nrf52840.S \ ++ $(SDK_ROOT)/components/libraries/log/src/nrf_log_backend_rtt.c \ ++ $(SDK_ROOT)/components/libraries/log/src/nrf_log_backend_serial.c \ ++ $(SDK_ROOT)/components/libraries/log/src/nrf_log_backend_uart.c \ ++ $(SDK_ROOT)/components/libraries/log/src/nrf_log_default_backends.c \ ++ $(SDK_ROOT)/components/libraries/log/src/nrf_log_frontend.c \ ++ $(SDK_ROOT)/components/libraries/log/src/nrf_log_str_formatter.c \ ++ $(SDK_ROOT)/components/libraries/util/app_error.c \ ++ $(SDK_ROOT)/components/libraries/util/app_error_handler_gcc.c \ ++ $(SDK_ROOT)/components/libraries/util/app_error_weak.c \ ++ $(SDK_ROOT)/components/libraries/scheduler/app_scheduler.c \ ++ $(SDK_ROOT)/components/libraries/timer/app_timer.c \ ++ $(SDK_ROOT)/components/libraries/usbd/app_usbd.c \ ++ $(SDK_ROOT)/components/libraries/usbd/class/cdc/acm/app_usbd_cdc_acm.c \ ++ $(SDK_ROOT)/components/libraries/usbd/app_usbd_core.c \ ++ $(SDK_ROOT)/components/libraries/usbd/class/nrf_dfu_trigger/app_usbd_nrf_dfu_trigger.c \ ++ $(SDK_ROOT)/components/libraries/usbd/app_usbd_serial_num.c \ ++ $(SDK_ROOT)/components/libraries/usbd/app_usbd_string_desc.c \ ++ $(SDK_ROOT)/components/libraries/util/app_util_platform.c \ ++ $(SDK_ROOT)/components/libraries/crc16/crc16.c \ ++ $(SDK_ROOT)/components/libraries/util/nrf_assert.c \ ++ $(SDK_ROOT)/components/libraries/atomic_fifo/nrf_atfifo.c \ ++ $(SDK_ROOT)/components/libraries/atomic/nrf_atomic.c \ ++ $(SDK_ROOT)/components/libraries/balloc/nrf_balloc.c \ ++ $(SDK_ROOT)/external/fprintf/nrf_fprintf.c \ ++ $(SDK_ROOT)/external/fprintf/nrf_fprintf_format.c \ ++ $(SDK_ROOT)/components/libraries/memobj/nrf_memobj.c \ ++ $(SDK_ROOT)/components/libraries/queue/nrf_queue.c \ ++ $(SDK_ROOT)/components/libraries/ringbuf/nrf_ringbuf.c \ ++ $(SDK_ROOT)/components/libraries/experimental_section_vars/nrf_section_iter.c \ ++ $(SDK_ROOT)/components/libraries/strerror/nrf_strerror.c \ ++ $(SDK_ROOT)/modules/nrfx/mdk/system_nrf52840.c \ ++ $(SDK_ROOT)/components/boards/boards.c \ ++ $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_conn.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/common/ble_dtm_init.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_event_enc.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_evt_conn.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gap_evt_conn.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_gatt_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gattc_conn.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gattc_evt_conn.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_gattc_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gatts_conn.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gatts_evt_conn.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_gatts_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_l2cap_conn.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_l2cap_evt_conn.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_l2cap_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/common/ble_serialization.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/common/cond_field_serialization.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/conn_ble_l2cap_sdu_pool.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/common/conn_mw.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gap.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gattc.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gatts.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_l2cap.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/common/conn_mw_nrf_soc.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/hal/dtm_uart.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/nrf_soc_conn.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/nrf_soc_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_cmd_decoder.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_dtm_cmd_decoder.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_error_handling.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_event_encoder.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_handlers.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_pkt_decoder.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_reset_cmd_decoder.c \ ++ $(SDK_ROOT)/components/serialization/common/ser_dbg_sd_str.c \ ++ $(SDK_ROOT)/components/serialization/common/transport/ser_hal_transport.c \ ++ $(SDK_ROOT)/components/serialization/common/transport/ser_phy/ser_phy_hci.c \ ++ $(SDK_ROOT)/components/serialization/common/transport/ser_phy/ser_phy_hci_slip_cdc.c \ ++ $(SDK_ROOT)/integration/nrfx/legacy/nrf_drv_clock.c \ ++ $(SDK_ROOT)/integration/nrfx/legacy/nrf_drv_power.c \ ++ $(SDK_ROOT)/integration/nrfx/legacy/nrf_drv_uart.c \ ++ $(SDK_ROOT)/components/drivers_nrf/usbd/nrf_drv_usbd.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_clock.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power_clock.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/prs/nrfx_prs.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_qspi.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uart.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uarte.c \ ++ $(PROJ_DIR)/main.c \ ++ $(SDK_ROOT)/external/segger_rtt/SEGGER_RTT.c \ ++ $(SDK_ROOT)/external/segger_rtt/SEGGER_RTT_Syscalls_GCC.c \ ++ $(SDK_ROOT)/external/segger_rtt/SEGGER_RTT_printf.c \ ++ $(SDK_ROOT)/components/ble/common/ble_advdata.c \ ++ $(SDK_ROOT)/components/ble/ble_dtm/ble_dtm.c \ ++ $(SDK_ROOT)/components/ble/ble_dtm/ble_dtm_hw_nrf52.c \ ++ $(SDK_ROOT)/components/ble/common/ble_srv_common.c \ ++ $(SDK_ROOT)/external/utf_converter/utf.c \ ++ $(SDK_ROOT)/components/softdevice/common/nrf_sdh.c \ ++ $(SDK_ROOT)/components/softdevice/common/nrf_sdh_ble.c \ ++ $(SDK_ROOT)/components/softdevice/common/nrf_sdh_soc.c \ ++ ++# Include folders common to all targets ++INC_FOLDERS += \ ++ $(SDK_ROOT)/components \ ++ $(SDK_ROOT)/components/serialization/connectivity/hal \ ++ $(SDK_ROOT)/modules/nrfx/mdk \ ++ $(SDK_ROOT)/components/libraries/scheduler \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers \ ++ $(SDK_ROOT)/components/toolchain/cmsis/include \ ++ $(SDK_ROOT)/components/libraries/queue \ ++ $(SDK_ROOT)/components/libraries/timer \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/common \ ++ $(SDK_ROOT)/components/serialization/connectivity \ ++ $(SDK_ROOT)/components/libraries/strerror \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware \ ++ $(SDK_ROOT)/components/libraries/crc16 \ ++ $(SDK_ROOT)/components/libraries/bootloader/dfu \ ++ $(SDK_ROOT)/components/serialization/common \ ++ $(SDK_ROOT)/components/libraries/util \ ++ $(SDK_ROOT)/components/libraries/usbd/class/cdc/acm \ ++ ../config \ ++ $(SDK_ROOT)/components/libraries/usbd/class/cdc \ ++ $(SDK_ROOT)/components/ble/common \ ++ $(SDK_ROOT)/integration/nrfx \ ++ $(SDK_ROOT)/components/libraries/balloc \ ++ $(SDK_ROOT)/components/drivers_nrf/usbd \ ++ $(SDK_ROOT)/components/libraries/ringbuf \ ++ $(SDK_ROOT)/modules/nrfx/hal \ ++ $(SDK_ROOT)/components/libraries/bsp \ ++ $(SDK_ROOT)/components/softdevice/s132v3/headers/nrf52 \ ++ $(SDK_ROOT)/components/libraries/log \ ++ $(SDK_ROOT)/external/utf_converter \ ++ $(SDK_ROOT)/modules/nrfx \ ++ $(SDK_ROOT)/components/libraries/experimental_section_vars \ ++ $(SDK_ROOT)/integration/nrfx/legacy \ ++ $(SDK_ROOT)/components/serialization/common/transport/ser_phy \ ++ $(SDK_ROOT)/components/libraries/usbd \ ++ $(SDK_ROOT)/components/libraries/delay \ ++ $(SDK_ROOT)/external/segger_rtt \ ++ $(SDK_ROOT)/components/libraries/atomic_fifo \ ++ $(SDK_ROOT)/components/ble/ble_dtm \ ++ $(SDK_ROOT)/components/libraries/atomic \ ++ $(SDK_ROOT)/components/boards \ ++ $(SDK_ROOT)/components/libraries/memobj \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble \ ++ $(SDK_ROOT)/components/softdevice/s132v3/headers \ ++ $(SDK_ROOT)/components/libraries/usbd/class/nrf_dfu_trigger \ ++ $(SDK_ROOT)/components/serialization/common/transport \ ++ $(SDK_ROOT)/components/softdevice/common \ ++ $(SDK_ROOT)/components/serialization/common/transport/ser_phy/config \ ++ $(SDK_ROOT)/modules/nrfx/drivers/include \ ++ $(SDK_ROOT)/components/libraries/block_dev \ ++ $(SDK_ROOT)/external/fprintf \ ++ $(SDK_ROOT)/components/libraries/log/src \ ++ ++# Libraries common to all targets ++LIB_FILES += \ ++ ++# Optimization flags ++OPT = -Os -g3 ++# Uncomment the line below to enable link time optimization ++#OPT += -flto ++ ++# C flags common to all targets ++CFLAGS += $(OPT) ++CFLAGS += -DBLE_STACK_SUPPORT_REQD ++CFLAGS += -DBOARD_PCA10056 ++CFLAGS += -DBSP_DEFINES_ONLY ++CFLAGS += -DCONFIG_GPIO_AS_PINRESET ++CFLAGS += -DFLOAT_ABI_HARD ++CFLAGS += -DHCI_TIMER2 ++CFLAGS += -DNRF52840_XXAA ++CFLAGS += -DNRF_SD_BLE_API_VERSION=3 ++CFLAGS += -DS132 ++CFLAGS += -DSER_CONNECTIVITY ++CFLAGS += -DSER_PHY_HCI_USB_CDC ++CFLAGS += -DSOFTDEVICE_PRESENT ++CFLAGS += -DSWI_DISABLE0 ++CFLAGS += -mcpu=cortex-m4 ++CFLAGS += -mthumb -mabi=aapcs ++CFLAGS += -Wall -Werror ++CFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16 ++# keep every function in a separate section, this allows linker to discard unused ones ++CFLAGS += -ffunction-sections -fdata-sections -fno-strict-aliasing ++CFLAGS += -fno-builtin -fshort-enums ++ ++# C++ flags common to all targets ++CXXFLAGS += $(OPT) ++ ++# Assembler flags common to all targets ++ASMFLAGS += -g3 ++ASMFLAGS += -mcpu=cortex-m4 ++ASMFLAGS += -mthumb -mabi=aapcs ++ASMFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16 ++ASMFLAGS += -DBLE_STACK_SUPPORT_REQD ++ASMFLAGS += -DBOARD_PCA10056 ++ASMFLAGS += -DBSP_DEFINES_ONLY ++ASMFLAGS += -DCONFIG_GPIO_AS_PINRESET ++ASMFLAGS += -DFLOAT_ABI_HARD ++ASMFLAGS += -DHCI_TIMER2 ++ASMFLAGS += -DNRF52840_XXAA ++ASMFLAGS += -DNRF_SD_BLE_API_VERSION=3 ++ASMFLAGS += -DS132 ++ASMFLAGS += -DSER_CONNECTIVITY ++ASMFLAGS += -DSER_PHY_HCI_USB_CDC ++ASMFLAGS += -DSOFTDEVICE_PRESENT ++ASMFLAGS += -DSWI_DISABLE0 ++ ++# Linker flags ++LDFLAGS += $(OPT) ++LDFLAGS += -mthumb -mabi=aapcs -L$(SDK_ROOT)/modules/nrfx/mdk -T$(LINKER_SCRIPT) ++LDFLAGS += -mcpu=cortex-m4 ++LDFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16 ++# let linker dump unused sections ++LDFLAGS += -Wl,--gc-sections ++# use newlib in nano version ++LDFLAGS += --specs=nano.specs ++ ++nrf52840_xxaa: CFLAGS += -D__HEAP_SIZE=512 ++nrf52840_xxaa: CFLAGS += -D__STACK_SIZE=2048 ++nrf52840_xxaa: ASMFLAGS += -D__HEAP_SIZE=512 ++nrf52840_xxaa: ASMFLAGS += -D__STACK_SIZE=2048 ++ ++# Add standard libraries at the very end of the linker input, after all objects ++# that may need symbols provided by these libraries. ++LIB_FILES += -lc -lnosys -lm ++ ++ ++.PHONY: default help ++ ++# Default target - first one defined ++default: nrf52840_xxaa ++ ++# Print all targets that can be built ++help: ++ @echo following targets are available: ++ @echo nrf52840_xxaa ++ @echo flash_softdevice ++ @echo sdk_config - starting external tool for editing sdk_config.h ++ @echo flash - flashing binary ++ ++TEMPLATE_PATH := $(SDK_ROOT)/components/toolchain/gcc ++ ++ ++include $(TEMPLATE_PATH)/Makefile.common ++ ++$(foreach target, $(TARGETS), $(call define_target, $(target))) ++ ++.PHONY: flash flash_softdevice erase ++ ++# Flash the program ++flash: default ++ @echo Flashing: $(OUTPUT_DIRECTORY)/nrf52840_xxaa.hex ++ nrfjprog -f nrf52 --program $(OUTPUT_DIRECTORY)/nrf52840_xxaa.hex --sectorerase ++ nrfjprog -f nrf52 --reset ++ ++# Flash softdevice ++flash_softdevice: ++ @echo Flashing: s132_nrf52_3.0.0_softdevice.hex ++ nrfjprog -f nrf52 --program $(SDK_ROOT)/components/softdevice/s132v3/hex/s132_nrf52_3.0.0_softdevice.hex --sectorerase ++ nrfjprog -f nrf52 --reset ++ ++erase: ++ nrfjprog -f nrf52 --eraseall ++ ++SDK_CONFIG_FILE := ../config/sdk_config.h ++CMSIS_CONFIG_TOOL := $(SDK_ROOT)/external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar ++sdk_config: ++ java -jar $(CMSIS_CONFIG_TOOL) $(SDK_CONFIG_FILE) +diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld +new file mode 100644 +index 0000000..0267096 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld +@@ -0,0 +1,106 @@ ++/* Linker script to configure memory regions. */ ++ ++SEARCH_DIR(.) ++GROUP(-lgcc -lc -lnosys) ++ ++MEMORY ++{ ++ FLASH (rx) : ORIGIN = 0x1f000, LENGTH = 0xe1000 ++ RAM (rwx) : ORIGIN = 0x200199c0, LENGTH = 0x26640 ++ connectivity_version_info (r) : ORIGIN = 0x50000, LENGTH = 0x18 ++} ++ ++SECTIONS ++{ ++ .connectivity_version_info : ++ { ++ PROVIDE(__start_connectivity_version_info = .); ++ KEEP(*(SORT(.connectivity_version_info*))) ++ PROVIDE(__stop_connectivity_version_info = .); ++ } > connectivity_version_info ++} ++ ++SECTIONS ++{ ++ . = ALIGN(4); ++ .mem_section_dummy_ram : ++ { ++ } ++ .log_dynamic_data : ++ { ++ PROVIDE(__start_log_dynamic_data = .); ++ KEEP(*(SORT(.log_dynamic_data*))) ++ PROVIDE(__stop_log_dynamic_data = .); ++ } > RAM ++ .log_filter_data : ++ { ++ PROVIDE(__start_log_filter_data = .); ++ KEEP(*(SORT(.log_filter_data*))) ++ PROVIDE(__stop_log_filter_data = .); ++ } > RAM ++ ++} INSERT AFTER .data; ++ ++SECTIONS ++{ ++ .mem_section_dummy_rom : ++ { ++ } ++ .sdh_ble_observers : ++ { ++ PROVIDE(__start_sdh_ble_observers = .); ++ KEEP(*(SORT(.sdh_ble_observers*))) ++ PROVIDE(__stop_sdh_ble_observers = .); ++ } > FLASH ++ .sdh_soc_observers : ++ { ++ PROVIDE(__start_sdh_soc_observers = .); ++ KEEP(*(SORT(.sdh_soc_observers*))) ++ PROVIDE(__stop_sdh_soc_observers = .); ++ } > FLASH ++ .nrf_queue : ++ { ++ PROVIDE(__start_nrf_queue = .); ++ KEEP(*(.nrf_queue)) ++ PROVIDE(__stop_nrf_queue = .); ++ } > FLASH ++ .log_const_data : ++ { ++ PROVIDE(__start_log_const_data = .); ++ KEEP(*(SORT(.log_const_data*))) ++ PROVIDE(__stop_log_const_data = .); ++ } > FLASH ++ .nrf_balloc : ++ { ++ PROVIDE(__start_nrf_balloc = .); ++ KEEP(*(.nrf_balloc)) ++ PROVIDE(__stop_nrf_balloc = .); ++ } > FLASH ++ .sdh_state_observers : ++ { ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); ++ } > FLASH ++ .sdh_stack_observers : ++ { ++ PROVIDE(__start_sdh_stack_observers = .); ++ KEEP(*(SORT(.sdh_stack_observers*))) ++ PROVIDE(__stop_sdh_stack_observers = .); ++ } > FLASH ++ .sdh_req_observers : ++ { ++ PROVIDE(__start_sdh_req_observers = .); ++ KEEP(*(SORT(.sdh_req_observers*))) ++ PROVIDE(__stop_sdh_req_observers = .); ++ } > FLASH ++ .log_backends : ++ { ++ PROVIDE(__start_log_backends = .); ++ KEEP(*(SORT(.log_backends*))) ++ PROVIDE(__stop_log_backends = .); ++ } > FLASH ++ ++} INSERT AFTER .text ++ ++INCLUDE "nrf_common.ld" +diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/config/sdk_config.h +new file mode 100644 +index 0000000..14a8586 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/config/sdk_config.h +@@ -0,0 +1,5223 @@ ++/** ++ * Copyright (c) 2017 - 2018, Nordic Semiconductor ASA ++ * ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form, except as embedded into a Nordic ++ * Semiconductor ASA integrated circuit in a product or a software update for ++ * such product, must reproduce the above copyright notice, this list of ++ * conditions and the following disclaimer in the documentation and/or other ++ * materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its ++ * contributors may be used to endorse or promote products derived from this ++ * software without specific prior written permission. ++ * ++ * 4. This software, with or without modification, must only be used with a ++ * Nordic Semiconductor ASA integrated circuit. ++ * ++ * 5. Any software provided in binary form under this license must not be reverse ++ * engineered, decompiled, modified and/or disassembled. ++ * ++ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS ++ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE ++ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ++ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ++ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ * ++ */ ++ ++ ++ ++#ifndef SDK_CONFIG_H ++#define SDK_CONFIG_H ++// <<< Use Configuration Wizard in Context Menu >>>\n ++#ifdef USE_APP_CONFIG ++#include "app_config.h" ++#endif ++// Application ++ ++//========================================================== ++// application_info - Software Component ++ ++//========================================================== ++// APP_NAME - Application name ++#ifndef APP_NAME ++#define APP_NAME "ble-connectivity" ++#endif ++ ++// APP_ID - Application ID ++#ifndef APP_ID ++#define APP_ID 0 ++#endif ++ ++// APP_VERSION - Application version (semantic versioning) ++ ++//========================================================== ++// APP_VERSION_MAJOR - Major version <0-1000> ++ ++ ++#ifndef APP_VERSION_MAJOR ++#define APP_VERSION_MAJOR 0 ++#endif ++ ++// APP_VERSION_MINOR - Minor version <0-1000> ++ ++ ++#ifndef APP_VERSION_MINOR ++#define APP_VERSION_MINOR 1 ++#endif ++ ++// APP_VERSION_PATCH - Patch version <0-1000> ++ ++ ++#ifndef APP_VERSION_PATCH ++#define APP_VERSION_PATCH 0 ++#endif ++ ++// APP_VERSION_PRERELEASE - Prerelease, eg. "-1.alpha" ++ ++// If not empty, this string should include the leading hyphen (-). ++// This string might be normalized at run-time to not contain characters ++// illegal in Semantic Versioning. ++#ifndef APP_VERSION_PRERELEASE ++#define APP_VERSION_PRERELEASE "" ++#endif ++ ++// APP_VERSION_METADATA - Metadata, e.g. "+some-string.01-01-2018-23-59-59" ++ ++// If not empty, this string should include the leading plus (+). ++// This string might be normalized at run-time to not contain characters ++// illegal in Semantic Versioning. ++#ifndef APP_VERSION_METADATA ++#define APP_VERSION_METADATA "+" __DATE__ " " __TIME__ ++#endif ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++// Board Definition ++ ++//========================================================== ++// nrf_dfu_trigger_usb - USB DFU Trigger library ++ ++//========================================================== ++// NRF_DFU_TRIGGER_USB_USB_SHARED - Flag indicating whether USB is used for other purposes in the application. ++ ++ ++#ifndef NRF_DFU_TRIGGER_USB_USB_SHARED ++#define NRF_DFU_TRIGGER_USB_USB_SHARED 1 ++#endif ++ ++// NRF_DFU_TRIGGER_USB_INTERFACE_NUM - The USB interface to use for the DFU Trigger library. <0-255> ++ ++ ++// According to the USB Specification, interface numbers cannot have ++// gaps. Tailor this value to adhere to this limitation. ++ ++#ifndef NRF_DFU_TRIGGER_USB_INTERFACE_NUM ++#define NRF_DFU_TRIGGER_USB_INTERFACE_NUM 0 ++#endif ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++// nRF_BLE ++ ++//========================================================== ++// BLE_DTM_ENABLED - ble_dtm - Module for testing RF/PHY using DTM commands ++ ++ ++#ifndef BLE_DTM_ENABLED ++#define BLE_DTM_ENABLED 1 ++#endif ++ ++// ++//========================================================== ++ ++// nRF_Drivers ++ ++//========================================================== ++// NRFX_CLOCK_ENABLED - nrfx_clock - CLOCK peripheral driver ++//========================================================== ++#ifndef NRFX_CLOCK_ENABLED ++#define NRFX_CLOCK_ENABLED 1 ++#endif ++// NRFX_CLOCK_CONFIG_LF_SRC - LF Clock Source ++ ++// <0=> RC ++// <1=> XTAL ++// <2=> Synth ++// <131073=> External Low Swing ++// <196609=> External Full Swing ++ ++#ifndef NRFX_CLOCK_CONFIG_LF_SRC ++#define NRFX_CLOCK_CONFIG_LF_SRC 1 ++#endif ++ ++// NRFX_CLOCK_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef NRFX_CLOCK_CONFIG_IRQ_PRIORITY ++#define NRFX_CLOCK_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// NRFX_CLOCK_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRFX_CLOCK_CONFIG_LOG_ENABLED ++#define NRFX_CLOCK_CONFIG_LOG_ENABLED 0 ++#endif ++// NRFX_CLOCK_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRFX_CLOCK_CONFIG_LOG_LEVEL ++#define NRFX_CLOCK_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRFX_CLOCK_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_CLOCK_CONFIG_INFO_COLOR ++#define NRFX_CLOCK_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRFX_CLOCK_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_CLOCK_CONFIG_DEBUG_COLOR ++#define NRFX_CLOCK_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++ ++// NRFX_POWER_ENABLED - nrfx_power - POWER peripheral driver ++//========================================================== ++#ifndef NRFX_POWER_ENABLED ++#define NRFX_POWER_ENABLED 1 ++#endif ++// NRFX_POWER_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef NRFX_POWER_CONFIG_IRQ_PRIORITY ++#define NRFX_POWER_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// NRFX_POWER_CONFIG_DEFAULT_DCDCEN - The default configuration of main DCDC regulator ++ ++ ++// This settings means only that components for DCDC regulator are installed and it can be enabled. ++ ++#ifndef NRFX_POWER_CONFIG_DEFAULT_DCDCEN ++#define NRFX_POWER_CONFIG_DEFAULT_DCDCEN 0 ++#endif ++ ++// NRFX_POWER_CONFIG_DEFAULT_DCDCENHV - The default configuration of High Voltage DCDC regulator ++ ++ ++// This settings means only that components for DCDC regulator are installed and it can be enabled. ++ ++#ifndef NRFX_POWER_CONFIG_DEFAULT_DCDCENHV ++#define NRFX_POWER_CONFIG_DEFAULT_DCDCENHV 0 ++#endif ++ ++// ++ ++// NRFX_PRS_ENABLED - nrfx_prs - Peripheral Resource Sharing module ++//========================================================== ++#ifndef NRFX_PRS_ENABLED ++#define NRFX_PRS_ENABLED 1 ++#endif ++// NRFX_PRS_BOX_0_ENABLED - Enables box 0 in the module. ++ ++ ++#ifndef NRFX_PRS_BOX_0_ENABLED ++#define NRFX_PRS_BOX_0_ENABLED 0 ++#endif ++ ++// NRFX_PRS_BOX_1_ENABLED - Enables box 1 in the module. ++ ++ ++#ifndef NRFX_PRS_BOX_1_ENABLED ++#define NRFX_PRS_BOX_1_ENABLED 0 ++#endif ++ ++// NRFX_PRS_BOX_2_ENABLED - Enables box 2 in the module. ++ ++ ++#ifndef NRFX_PRS_BOX_2_ENABLED ++#define NRFX_PRS_BOX_2_ENABLED 0 ++#endif ++ ++// NRFX_PRS_BOX_3_ENABLED - Enables box 3 in the module. ++ ++ ++#ifndef NRFX_PRS_BOX_3_ENABLED ++#define NRFX_PRS_BOX_3_ENABLED 0 ++#endif ++ ++// NRFX_PRS_BOX_4_ENABLED - Enables box 4 in the module. ++ ++ ++#ifndef NRFX_PRS_BOX_4_ENABLED ++#define NRFX_PRS_BOX_4_ENABLED 1 ++#endif ++ ++// NRFX_PRS_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRFX_PRS_CONFIG_LOG_ENABLED ++#define NRFX_PRS_CONFIG_LOG_ENABLED 0 ++#endif ++// NRFX_PRS_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRFX_PRS_CONFIG_LOG_LEVEL ++#define NRFX_PRS_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRFX_PRS_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_PRS_CONFIG_INFO_COLOR ++#define NRFX_PRS_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRFX_PRS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_PRS_CONFIG_DEBUG_COLOR ++#define NRFX_PRS_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++ ++// NRFX_QSPI_ENABLED - nrfx_qspi - QSPI peripheral driver ++//========================================================== ++#ifndef NRFX_QSPI_ENABLED ++#define NRFX_QSPI_ENABLED 1 ++#endif ++// NRFX_QSPI_CONFIG_SCK_DELAY - tSHSL, tWHSL and tSHWL in number of 16 MHz periods (62.5 ns). <0-255> ++ ++ ++#ifndef NRFX_QSPI_CONFIG_SCK_DELAY ++#define NRFX_QSPI_CONFIG_SCK_DELAY 1 ++#endif ++ ++// NRFX_QSPI_CONFIG_XIP_OFFSET - Address offset in the external memory for Execute in Place operation. ++#ifndef NRFX_QSPI_CONFIG_XIP_OFFSET ++#define NRFX_QSPI_CONFIG_XIP_OFFSET 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_READOC - Number of data lines and opcode used for reading. ++ ++// <0=> FastRead ++// <1=> Read2O ++// <2=> Read2IO ++// <3=> Read4O ++// <4=> Read4IO ++ ++#ifndef NRFX_QSPI_CONFIG_READOC ++#define NRFX_QSPI_CONFIG_READOC 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_WRITEOC - Number of data lines and opcode used for writing. ++ ++// <0=> PP ++// <1=> PP2O ++// <2=> PP4O ++// <3=> PP4IO ++ ++#ifndef NRFX_QSPI_CONFIG_WRITEOC ++#define NRFX_QSPI_CONFIG_WRITEOC 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_ADDRMODE - Addressing mode. ++ ++// <0=> 24bit ++// <1=> 32bit ++ ++#ifndef NRFX_QSPI_CONFIG_ADDRMODE ++#define NRFX_QSPI_CONFIG_ADDRMODE 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_MODE - SPI mode. ++ ++// <0=> Mode 0 ++// <1=> Mode 1 ++ ++#ifndef NRFX_QSPI_CONFIG_MODE ++#define NRFX_QSPI_CONFIG_MODE 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_FREQUENCY - Frequency divider. ++ ++// <0=> 32MHz/1 ++// <1=> 32MHz/2 ++// <2=> 32MHz/3 ++// <3=> 32MHz/4 ++// <4=> 32MHz/5 ++// <5=> 32MHz/6 ++// <6=> 32MHz/7 ++// <7=> 32MHz/8 ++// <8=> 32MHz/9 ++// <9=> 32MHz/10 ++// <10=> 32MHz/11 ++// <11=> 32MHz/12 ++// <12=> 32MHz/13 ++// <13=> 32MHz/14 ++// <14=> 32MHz/15 ++// <15=> 32MHz/16 ++ ++#ifndef NRFX_QSPI_CONFIG_FREQUENCY ++#define NRFX_QSPI_CONFIG_FREQUENCY 15 ++#endif ++ ++// NRFX_QSPI_PIN_SCK - SCK pin value. ++#ifndef NRFX_QSPI_PIN_SCK ++#define NRFX_QSPI_PIN_SCK NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_CSN - CSN pin value. ++#ifndef NRFX_QSPI_PIN_CSN ++#define NRFX_QSPI_PIN_CSN NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO0 - IO0 pin value. ++#ifndef NRFX_QSPI_PIN_IO0 ++#define NRFX_QSPI_PIN_IO0 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO1 - IO1 pin value. ++#ifndef NRFX_QSPI_PIN_IO1 ++#define NRFX_QSPI_PIN_IO1 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO2 - IO2 pin value. ++#ifndef NRFX_QSPI_PIN_IO2 ++#define NRFX_QSPI_PIN_IO2 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO3 - IO3 pin value. ++#ifndef NRFX_QSPI_PIN_IO3 ++#define NRFX_QSPI_PIN_IO3 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef NRFX_QSPI_CONFIG_IRQ_PRIORITY ++#define NRFX_QSPI_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ ++// NRFX_UARTE_ENABLED - nrfx_uarte - UARTE peripheral driver ++//========================================================== ++#ifndef NRFX_UARTE_ENABLED ++#define NRFX_UARTE_ENABLED 1 ++#endif ++// NRFX_UARTE0_ENABLED - Enable UARTE0 instance ++#ifndef NRFX_UARTE0_ENABLED ++#define NRFX_UARTE0_ENABLED 0 ++#endif ++ ++// NRFX_UARTE1_ENABLED - Enable UARTE1 instance ++#ifndef NRFX_UARTE1_ENABLED ++#define NRFX_UARTE1_ENABLED 0 ++#endif ++ ++// NRFX_UARTE_DEFAULT_CONFIG_HWFC - Hardware Flow Control ++ ++// <0=> Disabled ++// <1=> Enabled ++ ++#ifndef NRFX_UARTE_DEFAULT_CONFIG_HWFC ++#define NRFX_UARTE_DEFAULT_CONFIG_HWFC 0 ++#endif ++ ++// NRFX_UARTE_DEFAULT_CONFIG_PARITY - Parity ++ ++// <0=> Excluded ++// <14=> Included ++ ++#ifndef NRFX_UARTE_DEFAULT_CONFIG_PARITY ++#define NRFX_UARTE_DEFAULT_CONFIG_PARITY 0 ++#endif ++ ++// NRFX_UARTE_DEFAULT_CONFIG_BAUDRATE - Default Baudrate ++ ++// <323584=> 1200 baud ++// <643072=> 2400 baud ++// <1290240=> 4800 baud ++// <2576384=> 9600 baud ++// <3862528=> 14400 baud ++// <5152768=> 19200 baud ++// <7716864=> 28800 baud ++// <8388608=> 31250 baud ++// <10289152=> 38400 baud ++// <15007744=> 56000 baud ++// <15400960=> 57600 baud ++// <20615168=> 76800 baud ++// <30801920=> 115200 baud ++// <61865984=> 230400 baud ++// <67108864=> 250000 baud ++// <121634816=> 460800 baud ++// <251658240=> 921600 baud ++// <268435456=> 1000000 baud ++ ++#ifndef NRFX_UARTE_DEFAULT_CONFIG_BAUDRATE ++#define NRFX_UARTE_DEFAULT_CONFIG_BAUDRATE 30801920 ++#endif ++ ++// NRFX_UARTE_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef NRFX_UARTE_DEFAULT_CONFIG_IRQ_PRIORITY ++#define NRFX_UARTE_DEFAULT_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// NRFX_UARTE_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRFX_UARTE_CONFIG_LOG_ENABLED ++#define NRFX_UARTE_CONFIG_LOG_ENABLED 0 ++#endif ++// NRFX_UARTE_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRFX_UARTE_CONFIG_LOG_LEVEL ++#define NRFX_UARTE_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRFX_UARTE_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_UARTE_CONFIG_INFO_COLOR ++#define NRFX_UARTE_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRFX_UARTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_UARTE_CONFIG_DEBUG_COLOR ++#define NRFX_UARTE_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++ ++// NRFX_UART_ENABLED - nrfx_uart - UART peripheral driver ++//========================================================== ++#ifndef NRFX_UART_ENABLED ++#define NRFX_UART_ENABLED 1 ++#endif ++// NRFX_UART0_ENABLED - Enable UART0 instance ++#ifndef NRFX_UART0_ENABLED ++#define NRFX_UART0_ENABLED 0 ++#endif ++ ++// NRFX_UART_DEFAULT_CONFIG_HWFC - Hardware Flow Control ++ ++// <0=> Disabled ++// <1=> Enabled ++ ++#ifndef NRFX_UART_DEFAULT_CONFIG_HWFC ++#define NRFX_UART_DEFAULT_CONFIG_HWFC 0 ++#endif ++ ++// NRFX_UART_DEFAULT_CONFIG_PARITY - Parity ++ ++// <0=> Excluded ++// <14=> Included ++ ++#ifndef NRFX_UART_DEFAULT_CONFIG_PARITY ++#define NRFX_UART_DEFAULT_CONFIG_PARITY 0 ++#endif ++ ++// NRFX_UART_DEFAULT_CONFIG_BAUDRATE - Default Baudrate ++ ++// <323584=> 1200 baud ++// <643072=> 2400 baud ++// <1290240=> 4800 baud ++// <2576384=> 9600 baud ++// <3866624=> 14400 baud ++// <5152768=> 19200 baud ++// <7729152=> 28800 baud ++// <8388608=> 31250 baud ++// <10309632=> 38400 baud ++// <15007744=> 56000 baud ++// <15462400=> 57600 baud ++// <20615168=> 76800 baud ++// <30924800=> 115200 baud ++// <61845504=> 230400 baud ++// <67108864=> 250000 baud ++// <123695104=> 460800 baud ++// <247386112=> 921600 baud ++// <268435456=> 1000000 baud ++ ++#ifndef NRFX_UART_DEFAULT_CONFIG_BAUDRATE ++#define NRFX_UART_DEFAULT_CONFIG_BAUDRATE 30924800 ++#endif ++ ++// NRFX_UART_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef NRFX_UART_DEFAULT_CONFIG_IRQ_PRIORITY ++#define NRFX_UART_DEFAULT_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// NRFX_UART_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRFX_UART_CONFIG_LOG_ENABLED ++#define NRFX_UART_CONFIG_LOG_ENABLED 0 ++#endif ++// NRFX_UART_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRFX_UART_CONFIG_LOG_LEVEL ++#define NRFX_UART_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRFX_UART_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_UART_CONFIG_INFO_COLOR ++#define NRFX_UART_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRFX_UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_UART_CONFIG_DEBUG_COLOR ++#define NRFX_UART_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++ ++// NRF_CLOCK_ENABLED - nrf_drv_clock - CLOCK peripheral driver - legacy layer ++//========================================================== ++#ifndef NRF_CLOCK_ENABLED ++#define NRF_CLOCK_ENABLED 1 ++#endif ++// CLOCK_CONFIG_LF_SRC - LF Clock Source ++ ++// <0=> RC ++// <1=> XTAL ++// <2=> Synth ++// <131073=> External Low Swing ++// <196609=> External Full Swing ++ ++#ifndef CLOCK_CONFIG_LF_SRC ++#define CLOCK_CONFIG_LF_SRC 1 ++#endif ++ ++// CLOCK_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef CLOCK_CONFIG_IRQ_PRIORITY ++#define CLOCK_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ ++// POWER_ENABLED - nrf_drv_power - POWER peripheral driver - legacy layer ++//========================================================== ++#ifndef POWER_ENABLED ++#define POWER_ENABLED 1 ++#endif ++// POWER_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef POWER_CONFIG_IRQ_PRIORITY ++#define POWER_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// POWER_CONFIG_DEFAULT_DCDCEN - The default configuration of main DCDC regulator ++ ++ ++// This settings means only that components for DCDC regulator are installed and it can be enabled. ++ ++#ifndef POWER_CONFIG_DEFAULT_DCDCEN ++#define POWER_CONFIG_DEFAULT_DCDCEN 0 ++#endif ++ ++// POWER_CONFIG_DEFAULT_DCDCENHV - The default configuration of High Voltage DCDC regulator ++ ++ ++// This settings means only that components for DCDC regulator are installed and it can be enabled. ++ ++#ifndef POWER_CONFIG_DEFAULT_DCDCENHV ++#define POWER_CONFIG_DEFAULT_DCDCENHV 0 ++#endif ++ ++// ++ ++// QSPI_ENABLED - nrf_drv_qspi - QSPI peripheral driver - legacy layer ++//========================================================== ++#ifndef QSPI_ENABLED ++#define QSPI_ENABLED 1 ++#endif ++// QSPI_CONFIG_SCK_DELAY - tSHSL, tWHSL and tSHWL in number of 16 MHz periods (62.5 ns). <0-255> ++ ++ ++#ifndef QSPI_CONFIG_SCK_DELAY ++#define QSPI_CONFIG_SCK_DELAY 1 ++#endif ++ ++// QSPI_CONFIG_XIP_OFFSET - Address offset in the external memory for Execute in Place operation. ++#ifndef QSPI_CONFIG_XIP_OFFSET ++#define QSPI_CONFIG_XIP_OFFSET 0 ++#endif ++ ++// QSPI_CONFIG_READOC - Number of data lines and opcode used for reading. ++ ++// <0=> FastRead ++// <1=> Read2O ++// <2=> Read2IO ++// <3=> Read4O ++// <4=> Read4IO ++ ++#ifndef QSPI_CONFIG_READOC ++#define QSPI_CONFIG_READOC 0 ++#endif ++ ++// QSPI_CONFIG_WRITEOC - Number of data lines and opcode used for writing. ++ ++// <0=> PP ++// <1=> PP2O ++// <2=> PP4O ++// <3=> PP4IO ++ ++#ifndef QSPI_CONFIG_WRITEOC ++#define QSPI_CONFIG_WRITEOC 0 ++#endif ++ ++// QSPI_CONFIG_ADDRMODE - Addressing mode. ++ ++// <0=> 24bit ++// <1=> 32bit ++ ++#ifndef QSPI_CONFIG_ADDRMODE ++#define QSPI_CONFIG_ADDRMODE 0 ++#endif ++ ++// QSPI_CONFIG_MODE - SPI mode. ++ ++// <0=> Mode 0 ++// <1=> Mode 1 ++ ++#ifndef QSPI_CONFIG_MODE ++#define QSPI_CONFIG_MODE 0 ++#endif ++ ++// QSPI_CONFIG_FREQUENCY - Frequency divider. ++ ++// <0=> 32MHz/1 ++// <1=> 32MHz/2 ++// <2=> 32MHz/3 ++// <3=> 32MHz/4 ++// <4=> 32MHz/5 ++// <5=> 32MHz/6 ++// <6=> 32MHz/7 ++// <7=> 32MHz/8 ++// <8=> 32MHz/9 ++// <9=> 32MHz/10 ++// <10=> 32MHz/11 ++// <11=> 32MHz/12 ++// <12=> 32MHz/13 ++// <13=> 32MHz/14 ++// <14=> 32MHz/15 ++// <15=> 32MHz/16 ++ ++#ifndef QSPI_CONFIG_FREQUENCY ++#define QSPI_CONFIG_FREQUENCY 15 ++#endif ++ ++// QSPI_PIN_SCK - SCK pin value. ++#ifndef QSPI_PIN_SCK ++#define QSPI_PIN_SCK NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_CSN - CSN pin value. ++#ifndef QSPI_PIN_CSN ++#define QSPI_PIN_CSN NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO0 - IO0 pin value. ++#ifndef QSPI_PIN_IO0 ++#define QSPI_PIN_IO0 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO1 - IO1 pin value. ++#ifndef QSPI_PIN_IO1 ++#define QSPI_PIN_IO1 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO2 - IO2 pin value. ++#ifndef QSPI_PIN_IO2 ++#define QSPI_PIN_IO2 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO3 - IO3 pin value. ++#ifndef QSPI_PIN_IO3 ++#define QSPI_PIN_IO3 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef QSPI_CONFIG_IRQ_PRIORITY ++#define QSPI_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ ++// UART_ENABLED - nrf_drv_uart - UART/UARTE peripheral driver - legacy layer ++//========================================================== ++#ifndef UART_ENABLED ++#define UART_ENABLED 1 ++#endif ++// UART_DEFAULT_CONFIG_HWFC - Hardware Flow Control ++ ++// <0=> Disabled ++// <1=> Enabled ++ ++#ifndef UART_DEFAULT_CONFIG_HWFC ++#define UART_DEFAULT_CONFIG_HWFC 0 ++#endif ++ ++// UART_DEFAULT_CONFIG_PARITY - Parity ++ ++// <0=> Excluded ++// <14=> Included ++ ++#ifndef UART_DEFAULT_CONFIG_PARITY ++#define UART_DEFAULT_CONFIG_PARITY 0 ++#endif ++ ++// UART_DEFAULT_CONFIG_BAUDRATE - Default Baudrate ++ ++// <323584=> 1200 baud ++// <643072=> 2400 baud ++// <1290240=> 4800 baud ++// <2576384=> 9600 baud ++// <3862528=> 14400 baud ++// <5152768=> 19200 baud ++// <7716864=> 28800 baud ++// <10289152=> 38400 baud ++// <15400960=> 57600 baud ++// <20615168=> 76800 baud ++// <30801920=> 115200 baud ++// <61865984=> 230400 baud ++// <67108864=> 250000 baud ++// <121634816=> 460800 baud ++// <251658240=> 921600 baud ++// <268435456=> 1000000 baud ++ ++#ifndef UART_DEFAULT_CONFIG_BAUDRATE ++#define UART_DEFAULT_CONFIG_BAUDRATE 30801920 ++#endif ++ ++// UART_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef UART_DEFAULT_CONFIG_IRQ_PRIORITY ++#define UART_DEFAULT_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// UART_EASY_DMA_SUPPORT - Driver supporting EasyDMA ++ ++ ++#ifndef UART_EASY_DMA_SUPPORT ++#define UART_EASY_DMA_SUPPORT 1 ++#endif ++ ++// UART_LEGACY_SUPPORT - Driver supporting Legacy mode ++ ++ ++#ifndef UART_LEGACY_SUPPORT ++#define UART_LEGACY_SUPPORT 1 ++#endif ++ ++// UART0_ENABLED - Enable UART0 instance ++//========================================================== ++#ifndef UART0_ENABLED ++#define UART0_ENABLED 1 ++#endif ++// UART0_CONFIG_USE_EASY_DMA - Default setting for using EasyDMA ++ ++ ++#ifndef UART0_CONFIG_USE_EASY_DMA ++#define UART0_CONFIG_USE_EASY_DMA 1 ++#endif ++ ++// ++ ++// UART1_ENABLED - Enable UART1 instance ++//========================================================== ++#ifndef UART1_ENABLED ++#define UART1_ENABLED 0 ++#endif ++// ++ ++// ++ ++// USBD_ENABLED - nrf_drv_usbd - USB driver ++//========================================================== ++#ifndef USBD_ENABLED ++#define USBD_ENABLED 1 ++#endif ++// USBD_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef USBD_CONFIG_IRQ_PRIORITY ++#define USBD_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// USBD_CONFIG_DMASCHEDULER_MODE - USBD SMA scheduler working scheme ++ ++// <0=> Prioritized access ++// <1=> Round Robin ++ ++#ifndef USBD_CONFIG_DMASCHEDULER_MODE ++#define USBD_CONFIG_DMASCHEDULER_MODE 0 ++#endif ++ ++// USBD_CONFIG_DMASCHEDULER_ISO_BOOST - Give priority to isochronous transfers ++ ++ ++// This option gives priority to isochronous transfers. ++// Enabling it assures that isochronous transfers are always processed, ++// even if multiple other transfers are pending. ++// Isochronous endpoints are prioritized before the usbd_dma_scheduler_algorithm ++// function is called, so the option is independent of the algorithm chosen. ++ ++#ifndef USBD_CONFIG_DMASCHEDULER_ISO_BOOST ++#define USBD_CONFIG_DMASCHEDULER_ISO_BOOST 1 ++#endif ++ ++// USBD_CONFIG_ISO_IN_ZLP - Respond to an IN token on ISO IN endpoint with ZLP when no data is ready ++ ++ ++// If set, ISO IN endpoint will respond to an IN token with ZLP when no data is ready to be sent. ++// Else, there will be no response. ++ ++#ifndef USBD_CONFIG_ISO_IN_ZLP ++#define USBD_CONFIG_ISO_IN_ZLP 0 ++#endif ++ ++// ++ ++// ++//========================================================== ++ ++// nRF_Libraries ++ ++//========================================================== ++// APP_SCHEDULER_ENABLED - app_scheduler - Events scheduler ++//========================================================== ++#ifndef APP_SCHEDULER_ENABLED ++#define APP_SCHEDULER_ENABLED 1 ++#endif ++// APP_SCHEDULER_WITH_PAUSE - Enabling pause feature ++ ++ ++#ifndef APP_SCHEDULER_WITH_PAUSE ++#define APP_SCHEDULER_WITH_PAUSE 1 ++#endif ++ ++// APP_SCHEDULER_WITH_PROFILER - Enabling scheduler profiling ++ ++ ++#ifndef APP_SCHEDULER_WITH_PROFILER ++#define APP_SCHEDULER_WITH_PROFILER 1 ++#endif ++ ++// ++ ++// APP_TIMER_ENABLED - app_timer - Application timer functionality ++//========================================================== ++#ifndef APP_TIMER_ENABLED ++#define APP_TIMER_ENABLED 1 ++#endif ++// APP_TIMER_CONFIG_RTC_FREQUENCY - Configure RTC prescaler. ++ ++// <0=> 32768 Hz ++// <1=> 16384 Hz ++// <3=> 8192 Hz ++// <7=> 4096 Hz ++// <15=> 2048 Hz ++// <31=> 1024 Hz ++ ++#ifndef APP_TIMER_CONFIG_RTC_FREQUENCY ++#define APP_TIMER_CONFIG_RTC_FREQUENCY 0 ++#endif ++ ++// APP_TIMER_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef APP_TIMER_CONFIG_IRQ_PRIORITY ++#define APP_TIMER_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// APP_TIMER_CONFIG_OP_QUEUE_SIZE - Capacity of timer requests queue. ++// Size of the queue depends on how many timers are used ++// in the system, how often timers are started and overall ++// system latency. If queue size is too small app_timer calls ++// will fail. ++ ++#ifndef APP_TIMER_CONFIG_OP_QUEUE_SIZE ++#define APP_TIMER_CONFIG_OP_QUEUE_SIZE 10 ++#endif ++ ++// APP_TIMER_CONFIG_USE_SCHEDULER - Enable scheduling app_timer events to app_scheduler ++ ++ ++#ifndef APP_TIMER_CONFIG_USE_SCHEDULER ++#define APP_TIMER_CONFIG_USE_SCHEDULER 0 ++#endif ++ ++// APP_TIMER_KEEPS_RTC_ACTIVE - Enable RTC always on ++ ++ ++// If option is enabled RTC is kept running even if there is no active timers. ++// This option can be used when app_timer is used for timestamping. ++ ++#ifndef APP_TIMER_KEEPS_RTC_ACTIVE ++#define APP_TIMER_KEEPS_RTC_ACTIVE 0 ++#endif ++ ++// APP_TIMER_SAFE_WINDOW_MS - Maximum possible latency (in milliseconds) of handling app_timer event. ++// Maximum possible timeout that can be set is reduced by safe window. ++// Example: RTC frequency 16384 Hz, maximum possible timeout 1024 seconds - APP_TIMER_SAFE_WINDOW_MS. ++// Since RTC is not stopped when processor is halted in debugging session, this value ++// must cover it if debugging is needed. It is possible to halt processor for APP_TIMER_SAFE_WINDOW_MS ++// without corrupting app_timer behavior. ++ ++#ifndef APP_TIMER_SAFE_WINDOW_MS ++#define APP_TIMER_SAFE_WINDOW_MS 300000 ++#endif ++ ++// App Timer Legacy configuration - Legacy configuration. ++ ++//========================================================== ++// APP_TIMER_WITH_PROFILER - Enable app_timer profiling ++ ++ ++#ifndef APP_TIMER_WITH_PROFILER ++#define APP_TIMER_WITH_PROFILER 0 ++#endif ++ ++// APP_TIMER_CONFIG_SWI_NUMBER - Configure SWI instance used. ++ ++ ++#ifndef APP_TIMER_CONFIG_SWI_NUMBER ++#define APP_TIMER_CONFIG_SWI_NUMBER 0 ++#endif ++ ++// ++//========================================================== ++ ++// ++ ++// APP_USBD_ENABLED - app_usbd - USB Device library ++//========================================================== ++#ifndef APP_USBD_ENABLED ++#define APP_USBD_ENABLED 1 ++#endif ++// APP_USBD_VID - Vendor ID. ++ ++// Note: This value is not editable in Configuration Wizard. ++// Vendor ID ordered from USB IF: http://www.usb.org/developers/vendor/ ++#ifndef APP_USBD_VID ++#define APP_USBD_VID 0x1915 ++#endif ++ ++// APP_USBD_PID - Product ID. ++ ++// Note: This value is not editable in Configuration Wizard. ++// Selected Product ID ++#ifndef APP_USBD_PID ++#define APP_USBD_PID 0xC00A ++#endif ++ ++// APP_USBD_DEVICE_VER_MAJOR - Device version, major part. <0-99> ++ ++ ++// Device version, will be converted automatically to BCD notation. Use just decimal values. ++ ++#ifndef APP_USBD_DEVICE_VER_MAJOR ++#define APP_USBD_DEVICE_VER_MAJOR 1 ++#endif ++ ++// APP_USBD_DEVICE_VER_MINOR - Device version, minor part. <0-99> ++ ++ ++// Device version, will be converted automatically to BCD notation. Use just decimal values. ++ ++#ifndef APP_USBD_DEVICE_VER_MINOR ++#define APP_USBD_DEVICE_VER_MINOR 0 ++#endif ++ ++// APP_USBD_CONFIG_SELF_POWERED - Self-powered device, as opposed to bus-powered. ++ ++ ++#ifndef APP_USBD_CONFIG_SELF_POWERED ++#define APP_USBD_CONFIG_SELF_POWERED 1 ++#endif ++ ++// APP_USBD_CONFIG_MAX_POWER - MaxPower field in configuration descriptor in milliamps. <0-500> ++ ++ ++#ifndef APP_USBD_CONFIG_MAX_POWER ++#define APP_USBD_CONFIG_MAX_POWER 500 ++#endif ++ ++// APP_USBD_CONFIG_POWER_EVENTS_PROCESS - Process power events. ++ ++ ++// Enable processing power events in USB event handler. ++ ++#ifndef APP_USBD_CONFIG_POWER_EVENTS_PROCESS ++#define APP_USBD_CONFIG_POWER_EVENTS_PROCESS 1 ++#endif ++ ++// APP_USBD_CONFIG_EVENT_QUEUE_ENABLE - Enable event queue. ++ ++// This is the default configuration when all the events are placed into internal queue. ++// Disable it when an external queue is used like app_scheduler or if you wish to process all events inside interrupts. ++// Processing all events from the interrupt level adds requirement not to call any functions that modifies the USBD library state from the context higher than USB interrupt context. ++// Functions that modify USBD state are functions for sleep, wakeup, start, stop, enable, and disable. ++//========================================================== ++#ifndef APP_USBD_CONFIG_EVENT_QUEUE_ENABLE ++#define APP_USBD_CONFIG_EVENT_QUEUE_ENABLE 1 ++#endif ++// APP_USBD_CONFIG_EVENT_QUEUE_SIZE - The size of the event queue. <16-64> ++ ++ ++// The size of the queue for the events that would be processed in the main loop. ++ ++#ifndef APP_USBD_CONFIG_EVENT_QUEUE_SIZE ++#define APP_USBD_CONFIG_EVENT_QUEUE_SIZE 32 ++#endif ++ ++// APP_USBD_CONFIG_SOF_HANDLING_MODE - Change SOF events handling mode. ++ ++ ++// Normal queue - SOF events are pushed normally into the event queue. ++// Compress queue - SOF events are counted and binded with other events or executed when the queue is empty. ++// This prevents the queue from filling up with SOF events. ++// Interrupt - SOF events are processed in interrupt. ++// <0=> Normal queue ++// <1=> Compress queue ++// <2=> Interrupt ++ ++#ifndef APP_USBD_CONFIG_SOF_HANDLING_MODE ++#define APP_USBD_CONFIG_SOF_HANDLING_MODE 1 ++#endif ++ ++// ++ ++// APP_USBD_CONFIG_SOF_TIMESTAMP_PROVIDE - Provide a function that generates timestamps for logs based on the current SOF. ++ ++ ++// The function app_usbd_sof_timestamp_get is implemented if the logger is enabled. ++// Use it when initializing the logger. ++// SOF processing is always enabled when this configuration parameter is active. ++// Note: This option is configured outside of APP_USBD_CONFIG_LOG_ENABLED. ++// This means that it works even if the logging in this very module is disabled. ++ ++#ifndef APP_USBD_CONFIG_SOF_TIMESTAMP_PROVIDE ++#define APP_USBD_CONFIG_SOF_TIMESTAMP_PROVIDE 0 ++#endif ++ ++// APP_USBD_CONFIG_DESC_STRING_SIZE - Maximum size of the NULL-terminated string of the string descriptor. <31-254> ++ ++ ++// 31 characters can be stored in the internal USB buffer used for transfers. ++// Any value higher than 31 creates an additional buffer just for descriptor strings. ++ ++#ifndef APP_USBD_CONFIG_DESC_STRING_SIZE ++#define APP_USBD_CONFIG_DESC_STRING_SIZE 31 ++#endif ++ ++// APP_USBD_CONFIG_DESC_STRING_UTF_ENABLED - Enable UTF8 conversion. ++ ++ ++// Enable UTF8-encoded characters. In normal processing, only ASCII characters are available. ++ ++#ifndef APP_USBD_CONFIG_DESC_STRING_UTF_ENABLED ++#define APP_USBD_CONFIG_DESC_STRING_UTF_ENABLED 0 ++#endif ++ ++// APP_USBD_STRINGS_LANGIDS - Supported languages identifiers. ++ ++// Note: This value is not editable in Configuration Wizard. ++// Comma-separated list of supported languages. ++#ifndef APP_USBD_STRINGS_LANGIDS ++#define APP_USBD_STRINGS_LANGIDS APP_USBD_LANG_AND_SUBLANG(APP_USBD_LANG_ENGLISH, APP_USBD_SUBLANG_ENGLISH_US) ++#endif ++ ++// APP_USBD_STRING_ID_MANUFACTURER - Define manufacturer string ID. ++ ++// Setting ID to 0 disables the string. ++//========================================================== ++#ifndef APP_USBD_STRING_ID_MANUFACTURER ++#define APP_USBD_STRING_ID_MANUFACTURER 1 ++#endif ++// APP_USBD_STRINGS_MANUFACTURER_EXTERN - Define whether @ref APP_USBD_STRINGS_MANUFACTURER is created by macro or declared as a global variable. ++ ++ ++#ifndef APP_USBD_STRINGS_MANUFACTURER_EXTERN ++#define APP_USBD_STRINGS_MANUFACTURER_EXTERN 0 ++#endif ++ ++// APP_USBD_STRINGS_MANUFACTURER - String descriptor for the manufacturer name. ++ ++// Note: This value is not editable in Configuration Wizard. ++// Comma-separated list of manufacturer names for each defined language. ++// Use @ref APP_USBD_STRING_DESC macro to create string descriptor from a NULL-terminated string. ++// Use @ref APP_USBD_STRING_RAW8_DESC macro to create string descriptor from comma-separated uint8_t values. ++// Use @ref APP_USBD_STRING_RAW16_DESC macro to create string descriptor from comma-separated uint16_t values. ++// Alternatively, configure the macro to point to any internal variable pointer that already contains the descriptor. ++// Setting string to NULL disables that string. ++// The order of manufacturer names must be the same like in @ref APP_USBD_STRINGS_LANGIDS. ++#ifndef APP_USBD_STRINGS_MANUFACTURER ++#define APP_USBD_STRINGS_MANUFACTURER APP_USBD_STRING_DESC("Nordic Semiconductor") ++#endif ++ ++// ++ ++// APP_USBD_STRING_ID_PRODUCT - Define product string ID. ++ ++// Setting ID to 0 disables the string. ++//========================================================== ++#ifndef APP_USBD_STRING_ID_PRODUCT ++#define APP_USBD_STRING_ID_PRODUCT 2 ++#endif ++// APP_USBD_STRINGS_PRODUCT_EXTERN - Define whether @ref APP_USBD_STRINGS_PRODUCT is created by macro or declared as a global variable. ++ ++ ++#ifndef APP_USBD_STRINGS_PRODUCT_EXTERN ++#define APP_USBD_STRINGS_PRODUCT_EXTERN 0 ++#endif ++ ++// APP_USBD_STRINGS_PRODUCT - String descriptor for the product name. ++ ++// Note: This value is not editable in Configuration Wizard. ++// List of product names that is defined the same way like in @ref APP_USBD_STRINGS_MANUFACTURER. ++#ifndef APP_USBD_STRINGS_PRODUCT ++#define APP_USBD_STRINGS_PRODUCT APP_USBD_STRING_DESC("nRF52 Connectivity") ++#endif ++ ++// ++ ++// APP_USBD_STRING_ID_SERIAL - Define serial number string ID. ++ ++// Setting ID to 0 disables the string. ++//========================================================== ++#ifndef APP_USBD_STRING_ID_SERIAL ++#define APP_USBD_STRING_ID_SERIAL 3 ++#endif ++// APP_USBD_STRING_SERIAL_EXTERN - Define whether @ref APP_USBD_STRING_SERIAL is created by macro or declared as a global variable. ++ ++ ++#ifndef APP_USBD_STRING_SERIAL_EXTERN ++#define APP_USBD_STRING_SERIAL_EXTERN 1 ++#endif ++ ++// APP_USBD_STRING_SERIAL - String descriptor for the serial number. ++ ++// Note: This value is not editable in Configuration Wizard. ++// Serial number that is defined the same way like in @ref APP_USBD_STRINGS_MANUFACTURER. ++#ifndef APP_USBD_STRING_SERIAL ++#define APP_USBD_STRING_SERIAL g_extern_serial_number ++#endif ++ ++// ++ ++// APP_USBD_STRING_ID_CONFIGURATION - Define configuration string ID. ++ ++// Setting ID to 0 disables the string. ++//========================================================== ++#ifndef APP_USBD_STRING_ID_CONFIGURATION ++#define APP_USBD_STRING_ID_CONFIGURATION 4 ++#endif ++// APP_USBD_STRING_CONFIGURATION_EXTERN - Define whether @ref APP_USBD_STRINGS_CONFIGURATION is created by macro or declared as global variable. ++ ++ ++#ifndef APP_USBD_STRING_CONFIGURATION_EXTERN ++#define APP_USBD_STRING_CONFIGURATION_EXTERN 0 ++#endif ++ ++// APP_USBD_STRINGS_CONFIGURATION - String descriptor for the device configuration. ++ ++// Note: This value is not editable in Configuration Wizard. ++// Configuration string that is defined the same way like in @ref APP_USBD_STRINGS_MANUFACTURER. ++#ifndef APP_USBD_STRINGS_CONFIGURATION ++#define APP_USBD_STRINGS_CONFIGURATION APP_USBD_STRING_DESC("Default configuration") ++#endif ++ ++// ++ ++// APP_USBD_STRINGS_USER - Default values for user strings. ++ ++// Note: This value is not editable in Configuration Wizard. ++// This value stores all application specific user strings with the default initialization. ++// The setup is done by X-macros. ++// Expected macro parameters: ++// @code ++// X(mnemonic, [=str_idx], ...) ++// @endcode ++// - @c mnemonic: Mnemonic of the string descriptor that would be added to ++// @ref app_usbd_string_desc_idx_t enumerator. ++// - @c str_idx : String index value, can be set or left empty. ++// For example, WinUSB driver requires descriptor to be present on 0xEE index. ++// Then use X(USBD_STRING_WINUSB, =0xEE, (APP_USBD_STRING_DESC(...))) ++// - @c ... : List of string descriptors for each defined language. ++#ifndef APP_USBD_STRINGS_USER ++#define APP_USBD_STRINGS_USER X(APP_USER_1, , APP_USBD_STRING_DESC("User 1")) ++#endif ++ ++// ++ ++// APP_USBD_NRF_DFU_TRIGGER_ENABLED - app_usbd_nrf_dfu_trigger - USBD Nordic DFU Trigger class ++ ++ ++#ifndef APP_USBD_NRF_DFU_TRIGGER_ENABLED ++#define APP_USBD_NRF_DFU_TRIGGER_ENABLED 1 ++#endif ++ ++// CRC16_ENABLED - crc16 - CRC16 calculation routines ++ ++ ++#ifndef CRC16_ENABLED ++#define CRC16_ENABLED 1 ++#endif ++ ++// NRF_BALLOC_ENABLED - nrf_balloc - Block allocator module ++//========================================================== ++#ifndef NRF_BALLOC_ENABLED ++#define NRF_BALLOC_ENABLED 1 ++#endif ++// NRF_BALLOC_CONFIG_DEBUG_ENABLED - Enables debug mode in the module. ++//========================================================== ++#ifndef NRF_BALLOC_CONFIG_DEBUG_ENABLED ++#define NRF_BALLOC_CONFIG_DEBUG_ENABLED 0 ++#endif ++// NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS - Number of words used as head guard. <0-255> ++ ++ ++#ifndef NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS ++#define NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS 1 ++#endif ++ ++// NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS - Number of words used as tail guard. <0-255> ++ ++ ++#ifndef NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS ++#define NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS 1 ++#endif ++ ++// NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED - Enables basic checks in this module. ++ ++ ++#ifndef NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED ++#define NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED 0 ++#endif ++ ++// NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED - Enables double memory free check in this module. ++ ++ ++#ifndef NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED ++#define NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED 0 ++#endif ++ ++// NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED - Enables free memory corruption check in this module. ++ ++ ++#ifndef NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED ++#define NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED 0 ++#endif ++ ++// NRF_BALLOC_CLI_CMDS - Enable CLI commands specific to the module ++ ++ ++#ifndef NRF_BALLOC_CLI_CMDS ++#define NRF_BALLOC_CLI_CMDS 0 ++#endif ++ ++// ++ ++// ++ ++// NRF_FPRINTF_ENABLED - nrf_fprintf - fprintf function. ++ ++ ++#ifndef NRF_FPRINTF_ENABLED ++#define NRF_FPRINTF_ENABLED 1 ++#endif ++ ++// NRF_MEMOBJ_ENABLED - nrf_memobj - Linked memory allocator module ++ ++ ++#ifndef NRF_MEMOBJ_ENABLED ++#define NRF_MEMOBJ_ENABLED 1 ++#endif ++ ++// NRF_QUEUE_ENABLED - nrf_queue - Queue module ++//========================================================== ++#ifndef NRF_QUEUE_ENABLED ++#define NRF_QUEUE_ENABLED 1 ++#endif ++// NRF_QUEUE_CLI_CMDS - Enable CLI commands specific to the module ++ ++ ++#ifndef NRF_QUEUE_CLI_CMDS ++#define NRF_QUEUE_CLI_CMDS 0 ++#endif ++ ++// ++ ++// NRF_SECTION_ITER_ENABLED - nrf_section_iter - Section iterator ++ ++ ++#ifndef NRF_SECTION_ITER_ENABLED ++#define NRF_SECTION_ITER_ENABLED 1 ++#endif ++ ++// NRF_STRERROR_ENABLED - nrf_strerror - Library for converting error code to string. ++ ++ ++#ifndef NRF_STRERROR_ENABLED ++#define NRF_STRERROR_ENABLED 1 ++#endif ++ ++// app_usbd_cdc_acm - USB CDC ACM class ++ ++//========================================================== ++// APP_USBD_CDC_ACM_ENABLED - Enabling USBD CDC ACM Class library ++ ++ ++#ifndef APP_USBD_CDC_ACM_ENABLED ++#define APP_USBD_CDC_ACM_ENABLED 1 ++#endif ++ ++// APP_USBD_CDC_ACM_ZLP_ON_EPSIZE_WRITE - Send ZLP on write with same size as endpoint ++ ++ ++// If enabled, CDC ACM class will automatically send a zero length packet after transfer which has the same size as endpoint. ++// This may limit throughput if a lot of binary data is sent, but in terminal mode operation it makes sure that the data is always displayed right after it is sent. ++ ++#ifndef APP_USBD_CDC_ACM_ZLP_ON_EPSIZE_WRITE ++#define APP_USBD_CDC_ACM_ZLP_ON_EPSIZE_WRITE 1 ++#endif ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++// nRF_Log ++ ++//========================================================== ++// NRF_LOG_BACKEND_RTT_ENABLED - nrf_log_backend_rtt - Log RTT backend ++//========================================================== ++#ifndef NRF_LOG_BACKEND_RTT_ENABLED ++#define NRF_LOG_BACKEND_RTT_ENABLED 0 ++#endif ++// NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE - Size of buffer for partially processed strings. ++// Size of the buffer is a trade-off between RAM usage and processing. ++// if buffer is smaller then strings will often be fragmented. ++// It is recommended to use size which will fit typical log and only the ++// longer one will be fragmented. ++ ++#ifndef NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE ++#define NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE 64 ++#endif ++ ++// NRF_LOG_BACKEND_RTT_TX_RETRY_DELAY_MS - Period before retrying writing to RTT ++#ifndef NRF_LOG_BACKEND_RTT_TX_RETRY_DELAY_MS ++#define NRF_LOG_BACKEND_RTT_TX_RETRY_DELAY_MS 1 ++#endif ++ ++// NRF_LOG_BACKEND_RTT_TX_RETRY_CNT - Writing to RTT retries. ++// If RTT fails to accept any new data after retries ++// module assumes that host is not active and on next ++// request it will perform only one write attempt. ++// On successful writing, module assumes that host is active ++// and scheme with retry is applied again. ++ ++#ifndef NRF_LOG_BACKEND_RTT_TX_RETRY_CNT ++#define NRF_LOG_BACKEND_RTT_TX_RETRY_CNT 3 ++#endif ++ ++// ++ ++// NRF_LOG_BACKEND_UART_ENABLED - nrf_log_backend_uart - Log UART backend ++//========================================================== ++#ifndef NRF_LOG_BACKEND_UART_ENABLED ++#define NRF_LOG_BACKEND_UART_ENABLED 0 ++#endif ++// NRF_LOG_BACKEND_UART_TX_PIN - UART TX pin ++#ifndef NRF_LOG_BACKEND_UART_TX_PIN ++#define NRF_LOG_BACKEND_UART_TX_PIN 6 ++#endif ++ ++// NRF_LOG_BACKEND_UART_BAUDRATE - Default Baudrate ++ ++// <323584=> 1200 baud ++// <643072=> 2400 baud ++// <1290240=> 4800 baud ++// <2576384=> 9600 baud ++// <3862528=> 14400 baud ++// <5152768=> 19200 baud ++// <7716864=> 28800 baud ++// <10289152=> 38400 baud ++// <15400960=> 57600 baud ++// <20615168=> 76800 baud ++// <30801920=> 115200 baud ++// <61865984=> 230400 baud ++// <67108864=> 250000 baud ++// <121634816=> 460800 baud ++// <251658240=> 921600 baud ++// <268435456=> 1000000 baud ++ ++#ifndef NRF_LOG_BACKEND_UART_BAUDRATE ++#define NRF_LOG_BACKEND_UART_BAUDRATE 30801920 ++#endif ++ ++// NRF_LOG_BACKEND_UART_TEMP_BUFFER_SIZE - Size of buffer for partially processed strings. ++// Size of the buffer is a trade-off between RAM usage and processing. ++// if buffer is smaller then strings will often be fragmented. ++// It is recommended to use size which will fit typical log and only the ++// longer one will be fragmented. ++ ++#ifndef NRF_LOG_BACKEND_UART_TEMP_BUFFER_SIZE ++#define NRF_LOG_BACKEND_UART_TEMP_BUFFER_SIZE 64 ++#endif ++ ++// ++ ++// NRF_LOG_ENABLED - nrf_log - Logger ++//========================================================== ++#ifndef NRF_LOG_ENABLED ++#define NRF_LOG_ENABLED 0 ++#endif ++// Log message pool - Configuration of log message pool ++ ++//========================================================== ++// NRF_LOG_MSGPOOL_ELEMENT_SIZE - Size of a single element in the pool of memory objects. ++// If a small value is set, then performance of logs processing ++// is degraded because data is fragmented. Bigger value impacts ++// RAM memory utilization. The size is set to fit a message with ++// a timestamp and up to 2 arguments in a single memory object. ++ ++#ifndef NRF_LOG_MSGPOOL_ELEMENT_SIZE ++#define NRF_LOG_MSGPOOL_ELEMENT_SIZE 20 ++#endif ++ ++// NRF_LOG_MSGPOOL_ELEMENT_COUNT - Number of elements in the pool of memory objects ++// If a small value is set, then it may lead to a deadlock ++// in certain cases if backend has high latency and holds ++// multiple messages for long time. Bigger value impacts ++// RAM memory usage. ++ ++#ifndef NRF_LOG_MSGPOOL_ELEMENT_COUNT ++#define NRF_LOG_MSGPOOL_ELEMENT_COUNT 8 ++#endif ++ ++// ++//========================================================== ++ ++// NRF_LOG_ALLOW_OVERFLOW - Configures behavior when circular buffer is full. ++ ++ ++// If set then oldest logs are overwritten. Otherwise a ++// marker is injected informing about overflow. ++ ++#ifndef NRF_LOG_ALLOW_OVERFLOW ++#define NRF_LOG_ALLOW_OVERFLOW 1 ++#endif ++ ++// NRF_LOG_BUFSIZE - Size of the buffer for storing logs (in bytes). ++ ++ ++// Must be power of 2 and multiple of 4. ++// If NRF_LOG_DEFERRED = 0 then buffer size can be reduced to minimum. ++// <128=> 128 ++// <256=> 256 ++// <512=> 512 ++// <1024=> 1024 ++// <2048=> 2048 ++// <4096=> 4096 ++// <8192=> 8192 ++// <16384=> 16384 ++ ++#ifndef NRF_LOG_BUFSIZE ++#define NRF_LOG_BUFSIZE 1024 ++#endif ++ ++// NRF_LOG_CLI_CMDS - Enable CLI commands for the module. ++ ++ ++#ifndef NRF_LOG_CLI_CMDS ++#define NRF_LOG_CLI_CMDS 0 ++#endif ++ ++// NRF_LOG_DEFAULT_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_LOG_DEFAULT_LEVEL ++#define NRF_LOG_DEFAULT_LEVEL 3 ++#endif ++ ++// NRF_LOG_DEFERRED - Enable deffered logger. ++ ++ ++// Log data is buffered and can be processed in idle. ++ ++#ifndef NRF_LOG_DEFERRED ++#define NRF_LOG_DEFERRED 1 ++#endif ++ ++// NRF_LOG_FILTERS_ENABLED - Enable dynamic filtering of logs. ++ ++ ++#ifndef NRF_LOG_FILTERS_ENABLED ++#define NRF_LOG_FILTERS_ENABLED 0 ++#endif ++ ++// NRF_LOG_STR_PUSH_BUFFER_SIZE - Size of the buffer dedicated for strings stored using @ref NRF_LOG_PUSH. ++ ++// <16=> 16 ++// <32=> 32 ++// <64=> 64 ++// <128=> 128 ++// <256=> 256 ++// <512=> 512 ++// <1024=> 1024 ++ ++#ifndef NRF_LOG_STR_PUSH_BUFFER_SIZE ++#define NRF_LOG_STR_PUSH_BUFFER_SIZE 128 ++#endif ++ ++// NRF_LOG_STR_PUSH_BUFFER_SIZE - Size of the buffer dedicated for strings stored using @ref NRF_LOG_PUSH. ++ ++// <16=> 16 ++// <32=> 32 ++// <64=> 64 ++// <128=> 128 ++// <256=> 256 ++// <512=> 512 ++// <1024=> 1024 ++ ++#ifndef NRF_LOG_STR_PUSH_BUFFER_SIZE ++#define NRF_LOG_STR_PUSH_BUFFER_SIZE 128 ++#endif ++ ++// NRF_LOG_USES_COLORS - If enabled then ANSI escape code for colors is prefixed to every string ++//========================================================== ++#ifndef NRF_LOG_USES_COLORS ++#define NRF_LOG_USES_COLORS 0 ++#endif ++// NRF_LOG_COLOR_DEFAULT - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_LOG_COLOR_DEFAULT ++#define NRF_LOG_COLOR_DEFAULT 0 ++#endif ++ ++// NRF_LOG_ERROR_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_LOG_ERROR_COLOR ++#define NRF_LOG_ERROR_COLOR 2 ++#endif ++ ++// NRF_LOG_WARNING_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_LOG_WARNING_COLOR ++#define NRF_LOG_WARNING_COLOR 4 ++#endif ++ ++// ++ ++// NRF_LOG_USES_TIMESTAMP - Enable timestamping ++ ++// Function for getting the timestamp is provided by the user ++//========================================================== ++#ifndef NRF_LOG_USES_TIMESTAMP ++#define NRF_LOG_USES_TIMESTAMP 0 ++#endif ++// NRF_LOG_TIMESTAMP_DEFAULT_FREQUENCY - Default frequency of the timestamp (in Hz) or 0 to use app_timer frequency. ++#ifndef NRF_LOG_TIMESTAMP_DEFAULT_FREQUENCY ++#define NRF_LOG_TIMESTAMP_DEFAULT_FREQUENCY 0 ++#endif ++ ++// ++ ++// nrf_log module configuration ++ ++//========================================================== ++// nrf_log in nRF_Core ++ ++//========================================================== ++// NRF_MPU_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_MPU_CONFIG_LOG_ENABLED ++#define NRF_MPU_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_MPU_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_MPU_CONFIG_LOG_LEVEL ++#define NRF_MPU_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_MPU_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_MPU_CONFIG_INFO_COLOR ++#define NRF_MPU_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_MPU_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_MPU_CONFIG_DEBUG_COLOR ++#define NRF_MPU_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_STACK_GUARD_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_STACK_GUARD_CONFIG_LOG_ENABLED ++#define NRF_STACK_GUARD_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_STACK_GUARD_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_STACK_GUARD_CONFIG_LOG_LEVEL ++#define NRF_STACK_GUARD_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_STACK_GUARD_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_STACK_GUARD_CONFIG_INFO_COLOR ++#define NRF_STACK_GUARD_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_STACK_GUARD_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_STACK_GUARD_CONFIG_DEBUG_COLOR ++#define NRF_STACK_GUARD_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// TASK_MANAGER_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef TASK_MANAGER_CONFIG_LOG_ENABLED ++#define TASK_MANAGER_CONFIG_LOG_ENABLED 0 ++#endif ++// TASK_MANAGER_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef TASK_MANAGER_CONFIG_LOG_LEVEL ++#define TASK_MANAGER_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// TASK_MANAGER_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TASK_MANAGER_CONFIG_INFO_COLOR ++#define TASK_MANAGER_CONFIG_INFO_COLOR 0 ++#endif ++ ++// TASK_MANAGER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TASK_MANAGER_CONFIG_DEBUG_COLOR ++#define TASK_MANAGER_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++//========================================================== ++ ++// nrf_log in nRF_Drivers ++ ++//========================================================== ++// CLOCK_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef CLOCK_CONFIG_LOG_ENABLED ++#define CLOCK_CONFIG_LOG_ENABLED 0 ++#endif ++// CLOCK_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef CLOCK_CONFIG_LOG_LEVEL ++#define CLOCK_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// CLOCK_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef CLOCK_CONFIG_INFO_COLOR ++#define CLOCK_CONFIG_INFO_COLOR 0 ++#endif ++ ++// CLOCK_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef CLOCK_CONFIG_DEBUG_COLOR ++#define CLOCK_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// COMP_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef COMP_CONFIG_LOG_ENABLED ++#define COMP_CONFIG_LOG_ENABLED 0 ++#endif ++// COMP_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef COMP_CONFIG_LOG_LEVEL ++#define COMP_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// COMP_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef COMP_CONFIG_INFO_COLOR ++#define COMP_CONFIG_INFO_COLOR 0 ++#endif ++ ++// COMP_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef COMP_CONFIG_DEBUG_COLOR ++#define COMP_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// GPIOTE_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef GPIOTE_CONFIG_LOG_ENABLED ++#define GPIOTE_CONFIG_LOG_ENABLED 0 ++#endif ++// GPIOTE_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef GPIOTE_CONFIG_LOG_LEVEL ++#define GPIOTE_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// GPIOTE_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef GPIOTE_CONFIG_INFO_COLOR ++#define GPIOTE_CONFIG_INFO_COLOR 0 ++#endif ++ ++// GPIOTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef GPIOTE_CONFIG_DEBUG_COLOR ++#define GPIOTE_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// LPCOMP_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef LPCOMP_CONFIG_LOG_ENABLED ++#define LPCOMP_CONFIG_LOG_ENABLED 0 ++#endif ++// LPCOMP_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef LPCOMP_CONFIG_LOG_LEVEL ++#define LPCOMP_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// LPCOMP_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef LPCOMP_CONFIG_INFO_COLOR ++#define LPCOMP_CONFIG_INFO_COLOR 0 ++#endif ++ ++// LPCOMP_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef LPCOMP_CONFIG_DEBUG_COLOR ++#define LPCOMP_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// MAX3421E_HOST_CONFIG_LOG_ENABLED - Enable logging in the module ++//========================================================== ++#ifndef MAX3421E_HOST_CONFIG_LOG_ENABLED ++#define MAX3421E_HOST_CONFIG_LOG_ENABLED 0 ++#endif ++// MAX3421E_HOST_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef MAX3421E_HOST_CONFIG_LOG_LEVEL ++#define MAX3421E_HOST_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// MAX3421E_HOST_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef MAX3421E_HOST_CONFIG_INFO_COLOR ++#define MAX3421E_HOST_CONFIG_INFO_COLOR 0 ++#endif ++ ++// MAX3421E_HOST_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef MAX3421E_HOST_CONFIG_DEBUG_COLOR ++#define MAX3421E_HOST_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// PDM_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef PDM_CONFIG_LOG_ENABLED ++#define PDM_CONFIG_LOG_ENABLED 0 ++#endif ++// PDM_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef PDM_CONFIG_LOG_LEVEL ++#define PDM_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// PDM_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PDM_CONFIG_INFO_COLOR ++#define PDM_CONFIG_INFO_COLOR 0 ++#endif ++ ++// PDM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PDM_CONFIG_DEBUG_COLOR ++#define PDM_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// PPI_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef PPI_CONFIG_LOG_ENABLED ++#define PPI_CONFIG_LOG_ENABLED 0 ++#endif ++// PPI_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef PPI_CONFIG_LOG_LEVEL ++#define PPI_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// PPI_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PPI_CONFIG_INFO_COLOR ++#define PPI_CONFIG_INFO_COLOR 0 ++#endif ++ ++// PPI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PPI_CONFIG_DEBUG_COLOR ++#define PPI_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// PWM_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef PWM_CONFIG_LOG_ENABLED ++#define PWM_CONFIG_LOG_ENABLED 0 ++#endif ++// PWM_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef PWM_CONFIG_LOG_LEVEL ++#define PWM_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// PWM_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PWM_CONFIG_INFO_COLOR ++#define PWM_CONFIG_INFO_COLOR 0 ++#endif ++ ++// PWM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PWM_CONFIG_DEBUG_COLOR ++#define PWM_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// QDEC_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef QDEC_CONFIG_LOG_ENABLED ++#define QDEC_CONFIG_LOG_ENABLED 0 ++#endif ++// QDEC_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef QDEC_CONFIG_LOG_LEVEL ++#define QDEC_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// QDEC_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef QDEC_CONFIG_INFO_COLOR ++#define QDEC_CONFIG_INFO_COLOR 0 ++#endif ++ ++// QDEC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef QDEC_CONFIG_DEBUG_COLOR ++#define QDEC_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// RNG_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef RNG_CONFIG_LOG_ENABLED ++#define RNG_CONFIG_LOG_ENABLED 0 ++#endif ++// RNG_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef RNG_CONFIG_LOG_LEVEL ++#define RNG_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// RNG_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef RNG_CONFIG_INFO_COLOR ++#define RNG_CONFIG_INFO_COLOR 0 ++#endif ++ ++// RNG_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef RNG_CONFIG_DEBUG_COLOR ++#define RNG_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED - Enables logging of random numbers. ++ ++ ++#ifndef RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED ++#define RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED 0 ++#endif ++ ++// ++ ++// RTC_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef RTC_CONFIG_LOG_ENABLED ++#define RTC_CONFIG_LOG_ENABLED 0 ++#endif ++// RTC_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef RTC_CONFIG_LOG_LEVEL ++#define RTC_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// RTC_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef RTC_CONFIG_INFO_COLOR ++#define RTC_CONFIG_INFO_COLOR 0 ++#endif ++ ++// RTC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef RTC_CONFIG_DEBUG_COLOR ++#define RTC_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// SAADC_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef SAADC_CONFIG_LOG_ENABLED ++#define SAADC_CONFIG_LOG_ENABLED 0 ++#endif ++// SAADC_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef SAADC_CONFIG_LOG_LEVEL ++#define SAADC_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// SAADC_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SAADC_CONFIG_INFO_COLOR ++#define SAADC_CONFIG_INFO_COLOR 0 ++#endif ++ ++// SAADC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SAADC_CONFIG_DEBUG_COLOR ++#define SAADC_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// SPIS_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef SPIS_CONFIG_LOG_ENABLED ++#define SPIS_CONFIG_LOG_ENABLED 0 ++#endif ++// SPIS_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef SPIS_CONFIG_LOG_LEVEL ++#define SPIS_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// SPIS_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SPIS_CONFIG_INFO_COLOR ++#define SPIS_CONFIG_INFO_COLOR 0 ++#endif ++ ++// SPIS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SPIS_CONFIG_DEBUG_COLOR ++#define SPIS_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// SPI_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef SPI_CONFIG_LOG_ENABLED ++#define SPI_CONFIG_LOG_ENABLED 0 ++#endif ++// SPI_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef SPI_CONFIG_LOG_LEVEL ++#define SPI_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// SPI_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SPI_CONFIG_INFO_COLOR ++#define SPI_CONFIG_INFO_COLOR 0 ++#endif ++ ++// SPI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SPI_CONFIG_DEBUG_COLOR ++#define SPI_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// TIMER_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef TIMER_CONFIG_LOG_ENABLED ++#define TIMER_CONFIG_LOG_ENABLED 0 ++#endif ++// TIMER_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef TIMER_CONFIG_LOG_LEVEL ++#define TIMER_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// TIMER_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TIMER_CONFIG_INFO_COLOR ++#define TIMER_CONFIG_INFO_COLOR 0 ++#endif ++ ++// TIMER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TIMER_CONFIG_DEBUG_COLOR ++#define TIMER_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// TWIS_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef TWIS_CONFIG_LOG_ENABLED ++#define TWIS_CONFIG_LOG_ENABLED 0 ++#endif ++// TWIS_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef TWIS_CONFIG_LOG_LEVEL ++#define TWIS_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// TWIS_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TWIS_CONFIG_INFO_COLOR ++#define TWIS_CONFIG_INFO_COLOR 0 ++#endif ++ ++// TWIS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TWIS_CONFIG_DEBUG_COLOR ++#define TWIS_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// TWI_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef TWI_CONFIG_LOG_ENABLED ++#define TWI_CONFIG_LOG_ENABLED 0 ++#endif ++// TWI_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef TWI_CONFIG_LOG_LEVEL ++#define TWI_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// TWI_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TWI_CONFIG_INFO_COLOR ++#define TWI_CONFIG_INFO_COLOR 0 ++#endif ++ ++// TWI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TWI_CONFIG_DEBUG_COLOR ++#define TWI_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// UART_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef UART_CONFIG_LOG_ENABLED ++#define UART_CONFIG_LOG_ENABLED 0 ++#endif ++// UART_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef UART_CONFIG_LOG_LEVEL ++#define UART_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// UART_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef UART_CONFIG_INFO_COLOR ++#define UART_CONFIG_INFO_COLOR 0 ++#endif ++ ++// UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef UART_CONFIG_DEBUG_COLOR ++#define UART_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// USBD_CONFIG_LOG_ENABLED - Enable logging in the module ++//========================================================== ++#ifndef USBD_CONFIG_LOG_ENABLED ++#define USBD_CONFIG_LOG_ENABLED 0 ++#endif ++// USBD_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef USBD_CONFIG_LOG_LEVEL ++#define USBD_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// USBD_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef USBD_CONFIG_INFO_COLOR ++#define USBD_CONFIG_INFO_COLOR 0 ++#endif ++ ++// USBD_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef USBD_CONFIG_DEBUG_COLOR ++#define USBD_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// WDT_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef WDT_CONFIG_LOG_ENABLED ++#define WDT_CONFIG_LOG_ENABLED 0 ++#endif ++// WDT_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef WDT_CONFIG_LOG_LEVEL ++#define WDT_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// WDT_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef WDT_CONFIG_INFO_COLOR ++#define WDT_CONFIG_INFO_COLOR 0 ++#endif ++ ++// WDT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef WDT_CONFIG_DEBUG_COLOR ++#define WDT_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++//========================================================== ++ ++// nrf_log in nRF_Libraries ++ ++//========================================================== ++// APP_TIMER_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef APP_TIMER_CONFIG_LOG_ENABLED ++#define APP_TIMER_CONFIG_LOG_ENABLED 0 ++#endif ++// APP_TIMER_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_TIMER_CONFIG_LOG_LEVEL ++#define APP_TIMER_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// APP_TIMER_CONFIG_INITIAL_LOG_LEVEL - Initial severity level if dynamic filtering is enabled. ++ ++ ++// If module generates a lot of logs, initial log level can ++// be decreased to prevent flooding. Severity level can be ++// increased on instance basis. ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_TIMER_CONFIG_INITIAL_LOG_LEVEL ++#define APP_TIMER_CONFIG_INITIAL_LOG_LEVEL 3 ++#endif ++ ++// APP_TIMER_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_TIMER_CONFIG_INFO_COLOR ++#define APP_TIMER_CONFIG_INFO_COLOR 0 ++#endif ++ ++// APP_TIMER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_TIMER_CONFIG_DEBUG_COLOR ++#define APP_TIMER_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// APP_USBD_CDC_ACM_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef APP_USBD_CDC_ACM_CONFIG_LOG_ENABLED ++#define APP_USBD_CDC_ACM_CONFIG_LOG_ENABLED 0 ++#endif ++// APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL ++#define APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// APP_USBD_CDC_ACM_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_CDC_ACM_CONFIG_INFO_COLOR ++#define APP_USBD_CDC_ACM_CONFIG_INFO_COLOR 0 ++#endif ++ ++// APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR ++#define APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// APP_USBD_CONFIG_LOG_ENABLED - Enable logging in the module. ++//========================================================== ++#ifndef APP_USBD_CONFIG_LOG_ENABLED ++#define APP_USBD_CONFIG_LOG_ENABLED 0 ++#endif ++// APP_USBD_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_USBD_CONFIG_LOG_LEVEL ++#define APP_USBD_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// APP_USBD_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_CONFIG_INFO_COLOR ++#define APP_USBD_CONFIG_INFO_COLOR 0 ++#endif ++ ++// APP_USBD_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_CONFIG_DEBUG_COLOR ++#define APP_USBD_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// APP_USBD_DUMMY_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef APP_USBD_DUMMY_CONFIG_LOG_ENABLED ++#define APP_USBD_DUMMY_CONFIG_LOG_ENABLED 0 ++#endif ++// APP_USBD_DUMMY_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_USBD_DUMMY_CONFIG_LOG_LEVEL ++#define APP_USBD_DUMMY_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// APP_USBD_DUMMY_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_DUMMY_CONFIG_INFO_COLOR ++#define APP_USBD_DUMMY_CONFIG_INFO_COLOR 0 ++#endif ++ ++// APP_USBD_DUMMY_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_DUMMY_CONFIG_DEBUG_COLOR ++#define APP_USBD_DUMMY_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// APP_USBD_MSC_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef APP_USBD_MSC_CONFIG_LOG_ENABLED ++#define APP_USBD_MSC_CONFIG_LOG_ENABLED 0 ++#endif ++// APP_USBD_MSC_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_USBD_MSC_CONFIG_LOG_LEVEL ++#define APP_USBD_MSC_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// APP_USBD_MSC_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_MSC_CONFIG_INFO_COLOR ++#define APP_USBD_MSC_CONFIG_INFO_COLOR 0 ++#endif ++ ++// APP_USBD_MSC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_MSC_CONFIG_DEBUG_COLOR ++#define APP_USBD_MSC_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_ENABLED ++#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_ENABLED 0 ++#endif ++// APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_LEVEL ++#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// APP_USBD_NRF_DFU_TRIGGER_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_INFO_COLOR ++#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_INFO_COLOR 0 ++#endif ++ ++// APP_USBD_NRF_DFU_TRIGGER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_DEBUG_COLOR ++#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_ATFIFO_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_ATFIFO_CONFIG_LOG_ENABLED ++#define NRF_ATFIFO_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_ATFIFO_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_ATFIFO_CONFIG_LOG_LEVEL ++#define NRF_ATFIFO_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_ATFIFO_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_ATFIFO_CONFIG_LOG_INIT_FILTER_LEVEL ++#define NRF_ATFIFO_CONFIG_LOG_INIT_FILTER_LEVEL 3 ++#endif ++ ++// NRF_ATFIFO_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_ATFIFO_CONFIG_INFO_COLOR ++#define NRF_ATFIFO_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_ATFIFO_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_ATFIFO_CONFIG_DEBUG_COLOR ++#define NRF_ATFIFO_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_BALLOC_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_BALLOC_CONFIG_LOG_ENABLED ++#define NRF_BALLOC_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_BALLOC_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BALLOC_CONFIG_LOG_LEVEL ++#define NRF_BALLOC_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_BALLOC_CONFIG_INITIAL_LOG_LEVEL - Initial severity level if dynamic filtering is enabled. ++ ++ ++// If module generates a lot of logs, initial log level can ++// be decreased to prevent flooding. Severity level can be ++// increased on instance basis. ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BALLOC_CONFIG_INITIAL_LOG_LEVEL ++#define NRF_BALLOC_CONFIG_INITIAL_LOG_LEVEL 3 ++#endif ++ ++// NRF_BALLOC_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BALLOC_CONFIG_INFO_COLOR ++#define NRF_BALLOC_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_BALLOC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BALLOC_CONFIG_DEBUG_COLOR ++#define NRF_BALLOC_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_ENABLED ++#define NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_LEVEL ++#define NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_INIT_FILTER_LEVEL ++#define NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_INIT_FILTER_LEVEL 3 ++#endif ++ ++// NRF_BLOCK_DEV_EMPTY_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BLOCK_DEV_EMPTY_CONFIG_INFO_COLOR ++#define NRF_BLOCK_DEV_EMPTY_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_BLOCK_DEV_EMPTY_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BLOCK_DEV_EMPTY_CONFIG_DEBUG_COLOR ++#define NRF_BLOCK_DEV_EMPTY_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_BLOCK_DEV_QSPI_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_BLOCK_DEV_QSPI_CONFIG_LOG_ENABLED ++#define NRF_BLOCK_DEV_QSPI_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_BLOCK_DEV_QSPI_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BLOCK_DEV_QSPI_CONFIG_LOG_LEVEL ++#define NRF_BLOCK_DEV_QSPI_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_BLOCK_DEV_QSPI_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BLOCK_DEV_QSPI_CONFIG_LOG_INIT_FILTER_LEVEL ++#define NRF_BLOCK_DEV_QSPI_CONFIG_LOG_INIT_FILTER_LEVEL 3 ++#endif ++ ++// NRF_BLOCK_DEV_QSPI_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BLOCK_DEV_QSPI_CONFIG_INFO_COLOR ++#define NRF_BLOCK_DEV_QSPI_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_BLOCK_DEV_QSPI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BLOCK_DEV_QSPI_CONFIG_DEBUG_COLOR ++#define NRF_BLOCK_DEV_QSPI_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_BLOCK_DEV_RAM_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_BLOCK_DEV_RAM_CONFIG_LOG_ENABLED ++#define NRF_BLOCK_DEV_RAM_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_BLOCK_DEV_RAM_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BLOCK_DEV_RAM_CONFIG_LOG_LEVEL ++#define NRF_BLOCK_DEV_RAM_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_BLOCK_DEV_RAM_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BLOCK_DEV_RAM_CONFIG_LOG_INIT_FILTER_LEVEL ++#define NRF_BLOCK_DEV_RAM_CONFIG_LOG_INIT_FILTER_LEVEL 3 ++#endif ++ ++// NRF_BLOCK_DEV_RAM_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BLOCK_DEV_RAM_CONFIG_INFO_COLOR ++#define NRF_BLOCK_DEV_RAM_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_BLOCK_DEV_RAM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BLOCK_DEV_RAM_CONFIG_DEBUG_COLOR ++#define NRF_BLOCK_DEV_RAM_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_CLI_BLE_UART_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_CLI_BLE_UART_CONFIG_LOG_ENABLED ++#define NRF_CLI_BLE_UART_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL ++#define NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_CLI_BLE_UART_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_CLI_BLE_UART_CONFIG_INFO_COLOR ++#define NRF_CLI_BLE_UART_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR ++#define NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_CLI_LIBUARTE_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_CLI_LIBUARTE_CONFIG_LOG_ENABLED ++#define NRF_CLI_LIBUARTE_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_CLI_LIBUARTE_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_CLI_LIBUARTE_CONFIG_LOG_LEVEL ++#define NRF_CLI_LIBUARTE_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_CLI_LIBUARTE_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_CLI_LIBUARTE_CONFIG_INFO_COLOR ++#define NRF_CLI_LIBUARTE_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_CLI_LIBUARTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_CLI_LIBUARTE_CONFIG_DEBUG_COLOR ++#define NRF_CLI_LIBUARTE_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_CLI_UART_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_CLI_UART_CONFIG_LOG_ENABLED ++#define NRF_CLI_UART_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_CLI_UART_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_CLI_UART_CONFIG_LOG_LEVEL ++#define NRF_CLI_UART_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_CLI_UART_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_CLI_UART_CONFIG_INFO_COLOR ++#define NRF_CLI_UART_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_CLI_UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_CLI_UART_CONFIG_DEBUG_COLOR ++#define NRF_CLI_UART_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_LIBUARTE_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_LIBUARTE_CONFIG_LOG_ENABLED ++#define NRF_LIBUARTE_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_LIBUARTE_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_LIBUARTE_CONFIG_LOG_LEVEL ++#define NRF_LIBUARTE_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_LIBUARTE_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_LIBUARTE_CONFIG_INFO_COLOR ++#define NRF_LIBUARTE_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_LIBUARTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_LIBUARTE_CONFIG_DEBUG_COLOR ++#define NRF_LIBUARTE_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_MEMOBJ_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_MEMOBJ_CONFIG_LOG_ENABLED ++#define NRF_MEMOBJ_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_MEMOBJ_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_MEMOBJ_CONFIG_LOG_LEVEL ++#define NRF_MEMOBJ_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_MEMOBJ_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_MEMOBJ_CONFIG_INFO_COLOR ++#define NRF_MEMOBJ_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_MEMOBJ_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_MEMOBJ_CONFIG_DEBUG_COLOR ++#define NRF_MEMOBJ_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_PWR_MGMT_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_PWR_MGMT_CONFIG_LOG_ENABLED ++#define NRF_PWR_MGMT_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_PWR_MGMT_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_PWR_MGMT_CONFIG_LOG_LEVEL ++#define NRF_PWR_MGMT_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_PWR_MGMT_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_PWR_MGMT_CONFIG_INFO_COLOR ++#define NRF_PWR_MGMT_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_PWR_MGMT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_PWR_MGMT_CONFIG_DEBUG_COLOR ++#define NRF_PWR_MGMT_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_QUEUE_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_QUEUE_CONFIG_LOG_ENABLED ++#define NRF_QUEUE_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_QUEUE_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_QUEUE_CONFIG_LOG_LEVEL ++#define NRF_QUEUE_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_QUEUE_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_QUEUE_CONFIG_LOG_INIT_FILTER_LEVEL ++#define NRF_QUEUE_CONFIG_LOG_INIT_FILTER_LEVEL 3 ++#endif ++ ++// NRF_QUEUE_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_QUEUE_CONFIG_INFO_COLOR ++#define NRF_QUEUE_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_QUEUE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_QUEUE_CONFIG_DEBUG_COLOR ++#define NRF_QUEUE_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_SDH_ANT_LOG_ENABLED - Enable logging in SoftDevice handler (ANT) module. ++//========================================================== ++#ifndef NRF_SDH_ANT_LOG_ENABLED ++#define NRF_SDH_ANT_LOG_ENABLED 0 ++#endif ++// NRF_SDH_ANT_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_SDH_ANT_LOG_LEVEL ++#define NRF_SDH_ANT_LOG_LEVEL 3 ++#endif ++ ++// NRF_SDH_ANT_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_ANT_INFO_COLOR ++#define NRF_SDH_ANT_INFO_COLOR 0 ++#endif ++ ++// NRF_SDH_ANT_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_ANT_DEBUG_COLOR ++#define NRF_SDH_ANT_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_SDH_BLE_LOG_ENABLED - Enable logging in SoftDevice handler (BLE) module. ++//========================================================== ++#ifndef NRF_SDH_BLE_LOG_ENABLED ++#define NRF_SDH_BLE_LOG_ENABLED 1 ++#endif ++// NRF_SDH_BLE_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_SDH_BLE_LOG_LEVEL ++#define NRF_SDH_BLE_LOG_LEVEL 3 ++#endif ++ ++// NRF_SDH_BLE_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_BLE_INFO_COLOR ++#define NRF_SDH_BLE_INFO_COLOR 0 ++#endif ++ ++// NRF_SDH_BLE_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_BLE_DEBUG_COLOR ++#define NRF_SDH_BLE_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_SDH_LOG_ENABLED - Enable logging in SoftDevice handler module. ++//========================================================== ++#ifndef NRF_SDH_LOG_ENABLED ++#define NRF_SDH_LOG_ENABLED 1 ++#endif ++// NRF_SDH_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_SDH_LOG_LEVEL ++#define NRF_SDH_LOG_LEVEL 3 ++#endif ++ ++// NRF_SDH_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_INFO_COLOR ++#define NRF_SDH_INFO_COLOR 0 ++#endif ++ ++// NRF_SDH_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_DEBUG_COLOR ++#define NRF_SDH_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_SDH_SOC_LOG_ENABLED - Enable logging in SoftDevice handler (SoC) module. ++//========================================================== ++#ifndef NRF_SDH_SOC_LOG_ENABLED ++#define NRF_SDH_SOC_LOG_ENABLED 1 ++#endif ++// NRF_SDH_SOC_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_SDH_SOC_LOG_LEVEL ++#define NRF_SDH_SOC_LOG_LEVEL 3 ++#endif ++ ++// NRF_SDH_SOC_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_SOC_INFO_COLOR ++#define NRF_SDH_SOC_INFO_COLOR 0 ++#endif ++ ++// NRF_SDH_SOC_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_SOC_DEBUG_COLOR ++#define NRF_SDH_SOC_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_SORTLIST_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_SORTLIST_CONFIG_LOG_ENABLED ++#define NRF_SORTLIST_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_SORTLIST_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_SORTLIST_CONFIG_LOG_LEVEL ++#define NRF_SORTLIST_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_SORTLIST_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SORTLIST_CONFIG_INFO_COLOR ++#define NRF_SORTLIST_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_SORTLIST_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SORTLIST_CONFIG_DEBUG_COLOR ++#define NRF_SORTLIST_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_TWI_SENSOR_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_TWI_SENSOR_CONFIG_LOG_ENABLED ++#define NRF_TWI_SENSOR_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_TWI_SENSOR_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_TWI_SENSOR_CONFIG_LOG_LEVEL ++#define NRF_TWI_SENSOR_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_TWI_SENSOR_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_TWI_SENSOR_CONFIG_INFO_COLOR ++#define NRF_TWI_SENSOR_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_TWI_SENSOR_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_TWI_SENSOR_CONFIG_DEBUG_COLOR ++#define NRF_TWI_SENSOR_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// PM_LOG_ENABLED - Enable logging in Peer Manager and its submodules. ++//========================================================== ++#ifndef PM_LOG_ENABLED ++#define PM_LOG_ENABLED 1 ++#endif ++// PM_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef PM_LOG_LEVEL ++#define PM_LOG_LEVEL 3 ++#endif ++ ++// PM_LOG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PM_LOG_INFO_COLOR ++#define PM_LOG_INFO_COLOR 0 ++#endif ++ ++// PM_LOG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PM_LOG_DEBUG_COLOR ++#define PM_LOG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++//========================================================== ++ ++// nrf_log in nRF_Serialization ++ ++//========================================================== ++// SER_HAL_TRANSPORT_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef SER_HAL_TRANSPORT_CONFIG_LOG_ENABLED ++#define SER_HAL_TRANSPORT_CONFIG_LOG_ENABLED 0 ++#endif ++// SER_HAL_TRANSPORT_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef SER_HAL_TRANSPORT_CONFIG_LOG_LEVEL ++#define SER_HAL_TRANSPORT_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// SER_HAL_TRANSPORT_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SER_HAL_TRANSPORT_CONFIG_INFO_COLOR ++#define SER_HAL_TRANSPORT_CONFIG_INFO_COLOR 0 ++#endif ++ ++// SER_HAL_TRANSPORT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SER_HAL_TRANSPORT_CONFIG_DEBUG_COLOR ++#define SER_HAL_TRANSPORT_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++// ++ ++// NRF_LOG_STR_FORMATTER_TIMESTAMP_FORMAT_ENABLED - nrf_log_str_formatter - Log string formatter ++ ++ ++#ifndef NRF_LOG_STR_FORMATTER_TIMESTAMP_FORMAT_ENABLED ++#define NRF_LOG_STR_FORMATTER_TIMESTAMP_FORMAT_ENABLED 1 ++#endif ++ ++// ++//========================================================== ++ ++// nRF_Segger_RTT ++ ++//========================================================== ++// segger_rtt - SEGGER RTT ++ ++//========================================================== ++// SEGGER_RTT_CONFIG_BUFFER_SIZE_UP - Size of upstream buffer. ++// Note that either @ref NRF_LOG_BACKEND_RTT_OUTPUT_BUFFER_SIZE ++// or this value is actually used. It depends on which one is bigger. ++ ++#ifndef SEGGER_RTT_CONFIG_BUFFER_SIZE_UP ++#define SEGGER_RTT_CONFIG_BUFFER_SIZE_UP 512 ++#endif ++ ++// SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS - Size of upstream buffer. ++#ifndef SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS ++#define SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS 2 ++#endif ++ ++// SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN - Size of upstream buffer. ++#ifndef SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN ++#define SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN 16 ++#endif ++ ++// SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS - Size of upstream buffer. ++#ifndef SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS ++#define SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS 2 ++#endif ++ ++// SEGGER_RTT_CONFIG_DEFAULT_MODE - RTT behavior if the buffer is full. ++ ++ ++// The following modes are supported: ++// - SKIP - Do not block, output nothing. ++// - TRIM - Do not block, output as much as fits. ++// - BLOCK - Wait until there is space in the buffer. ++// <0=> SKIP ++// <1=> TRIM ++// <2=> BLOCK_IF_FIFO_FULL ++ ++#ifndef SEGGER_RTT_CONFIG_DEFAULT_MODE ++#define SEGGER_RTT_CONFIG_DEFAULT_MODE 0 ++#endif ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++// nRF_SoftDevice ++ ++//========================================================== ++// NRF_SDH_BLE_ENABLED - nrf_sdh_ble - SoftDevice BLE event handler ++//========================================================== ++#ifndef NRF_SDH_BLE_ENABLED ++#define NRF_SDH_BLE_ENABLED 1 ++#endif ++// BLE Stack configuration - Stack configuration parameters ++ ++// The SoftDevice handler will configure the stack with these parameters when calling @ref nrf_sdh_ble_default_cfg_set. ++// Other libraries might depend on these values; keep them up-to-date even if you are not explicitely calling @ref nrf_sdh_ble_default_cfg_set. ++//========================================================== ++// NRF_SDH_BLE_GAP_DATA_LENGTH <27-251> ++ ++ ++// Requested BLE GAP data length to be negotiated. ++ ++#ifndef NRF_SDH_BLE_GAP_DATA_LENGTH ++#define NRF_SDH_BLE_GAP_DATA_LENGTH 27 ++#endif ++ ++// NRF_SDH_BLE_PERIPHERAL_LINK_COUNT - Maximum number of peripheral links. ++#ifndef NRF_SDH_BLE_PERIPHERAL_LINK_COUNT ++#define NRF_SDH_BLE_PERIPHERAL_LINK_COUNT 8 ++#endif ++ ++// NRF_SDH_BLE_CENTRAL_LINK_COUNT - Maximum number of central links. ++#ifndef NRF_SDH_BLE_CENTRAL_LINK_COUNT ++#define NRF_SDH_BLE_CENTRAL_LINK_COUNT 8 ++#endif ++ ++// NRF_SDH_BLE_TOTAL_LINK_COUNT - Total link count. ++// Maximum number of total concurrent connections using the default configuration. ++ ++#ifndef NRF_SDH_BLE_TOTAL_LINK_COUNT ++#define NRF_SDH_BLE_TOTAL_LINK_COUNT 1 ++#endif ++ ++// NRF_SDH_BLE_GAP_EVENT_LENGTH - GAP event length. ++// The time set aside for this connection on every connection interval in 1.25 ms units. ++ ++#ifndef NRF_SDH_BLE_GAP_EVENT_LENGTH ++#define NRF_SDH_BLE_GAP_EVENT_LENGTH 6 ++#endif ++ ++// NRF_SDH_BLE_GATT_MAX_MTU_SIZE - Static maximum MTU size. ++#ifndef NRF_SDH_BLE_GATT_MAX_MTU_SIZE ++#define NRF_SDH_BLE_GATT_MAX_MTU_SIZE 250 ++#endif ++ ++// NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE - Attribute Table size in bytes. The size must be a multiple of 4. ++#ifndef NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE ++#define NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE 1408 ++#endif ++ ++// NRF_SDH_BLE_VS_UUID_COUNT - The number of vendor-specific UUIDs. ++#ifndef NRF_SDH_BLE_VS_UUID_COUNT ++#define NRF_SDH_BLE_VS_UUID_COUNT 0 ++#endif ++ ++// NRF_SDH_BLE_SERVICE_CHANGED - Include the Service Changed characteristic in the Attribute Table. ++ ++ ++#ifndef NRF_SDH_BLE_SERVICE_CHANGED ++#define NRF_SDH_BLE_SERVICE_CHANGED 0 ++#endif ++ ++// ++//========================================================== ++ ++// BLE Observers - Observers and priority levels ++ ++//========================================================== ++// NRF_SDH_BLE_OBSERVER_PRIO_LEVELS - Total number of priority levels for BLE observers. ++// This setting configures the number of priority levels available for BLE event handlers. ++// The priority level of a handler determines the order in which it receives events, with respect to other handlers. ++ ++#ifndef NRF_SDH_BLE_OBSERVER_PRIO_LEVELS ++#define NRF_SDH_BLE_OBSERVER_PRIO_LEVELS 4 ++#endif ++ ++// BLE Observers priorities - Invididual priorities ++ ++//========================================================== ++// BLE_ADV_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Advertising module. ++ ++#ifndef BLE_ADV_BLE_OBSERVER_PRIO ++#define BLE_ADV_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// BLE_ANCS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Apple Notification Service Client. ++ ++#ifndef BLE_ANCS_C_BLE_OBSERVER_PRIO ++#define BLE_ANCS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_ANS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Alert Notification Service Client. ++ ++#ifndef BLE_ANS_C_BLE_OBSERVER_PRIO ++#define BLE_ANS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_BAS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Battery Service. ++ ++#ifndef BLE_BAS_BLE_OBSERVER_PRIO ++#define BLE_BAS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_BAS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Battery Service Client. ++ ++#ifndef BLE_BAS_C_BLE_OBSERVER_PRIO ++#define BLE_BAS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_BPS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Blood Pressure Service. ++ ++#ifndef BLE_BPS_BLE_OBSERVER_PRIO ++#define BLE_BPS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_CONN_PARAMS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Connection parameters module. ++ ++#ifndef BLE_CONN_PARAMS_BLE_OBSERVER_PRIO ++#define BLE_CONN_PARAMS_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// BLE_CONN_STATE_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Connection State module. ++ ++#ifndef BLE_CONN_STATE_BLE_OBSERVER_PRIO ++#define BLE_CONN_STATE_BLE_OBSERVER_PRIO 0 ++#endif ++ ++// BLE_CSCS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Cycling Speed and Cadence Service. ++ ++#ifndef BLE_CSCS_BLE_OBSERVER_PRIO ++#define BLE_CSCS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_CTS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Current Time Service Client. ++ ++#ifndef BLE_CTS_C_BLE_OBSERVER_PRIO ++#define BLE_CTS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_DB_DISC_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Database Discovery module. ++ ++#ifndef BLE_DB_DISC_BLE_OBSERVER_PRIO ++#define BLE_DB_DISC_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// BLE_DFU_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the DFU Service. ++ ++#ifndef BLE_DFU_BLE_OBSERVER_PRIO ++#define BLE_DFU_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_DIS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Device Information Client. ++ ++#ifndef BLE_DIS_C_BLE_OBSERVER_PRIO ++#define BLE_DIS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_GLS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Glucose Service. ++ ++#ifndef BLE_GLS_BLE_OBSERVER_PRIO ++#define BLE_GLS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_HIDS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Human Interface Device Service. ++ ++#ifndef BLE_HIDS_BLE_OBSERVER_PRIO ++#define BLE_HIDS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_HRS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Heart Rate Service. ++ ++#ifndef BLE_HRS_BLE_OBSERVER_PRIO ++#define BLE_HRS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_HRS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Heart Rate Service Client. ++ ++#ifndef BLE_HRS_C_BLE_OBSERVER_PRIO ++#define BLE_HRS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_HTS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Health Thermometer Service. ++ ++#ifndef BLE_HTS_BLE_OBSERVER_PRIO ++#define BLE_HTS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_IAS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Immediate Alert Service. ++ ++#ifndef BLE_IAS_BLE_OBSERVER_PRIO ++#define BLE_IAS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_IAS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Immediate Alert Service Client. ++ ++#ifndef BLE_IAS_C_BLE_OBSERVER_PRIO ++#define BLE_IAS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_LBS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the LED Button Service. ++ ++#ifndef BLE_LBS_BLE_OBSERVER_PRIO ++#define BLE_LBS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_LBS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the LED Button Service Client. ++ ++#ifndef BLE_LBS_C_BLE_OBSERVER_PRIO ++#define BLE_LBS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_LLS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Link Loss Service. ++ ++#ifndef BLE_LLS_BLE_OBSERVER_PRIO ++#define BLE_LLS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_LNS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Location Navigation Service. ++ ++#ifndef BLE_LNS_BLE_OBSERVER_PRIO ++#define BLE_LNS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_NUS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the UART Service. ++ ++#ifndef BLE_NUS_BLE_OBSERVER_PRIO ++#define BLE_NUS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_NUS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the UART Central Service. ++ ++#ifndef BLE_NUS_C_BLE_OBSERVER_PRIO ++#define BLE_NUS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_OTS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Object transfer service. ++ ++#ifndef BLE_OTS_BLE_OBSERVER_PRIO ++#define BLE_OTS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_OTS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Object transfer service client. ++ ++#ifndef BLE_OTS_C_BLE_OBSERVER_PRIO ++#define BLE_OTS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_RSCS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Running Speed and Cadence Service. ++ ++#ifndef BLE_RSCS_BLE_OBSERVER_PRIO ++#define BLE_RSCS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_RSCS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Running Speed and Cadence Client. ++ ++#ifndef BLE_RSCS_C_BLE_OBSERVER_PRIO ++#define BLE_RSCS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_TPS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the TX Power Service. ++ ++#ifndef BLE_TPS_BLE_OBSERVER_PRIO ++#define BLE_TPS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BSP_BTN_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Button Control module. ++ ++#ifndef BSP_BTN_BLE_OBSERVER_PRIO ++#define BSP_BTN_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the NFC pairing library. ++ ++#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO ++#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the NFC pairing library. ++ ++#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO ++#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the NFC pairing library. ++ ++#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO ++#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// NRF_BLE_BMS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Bond Management Service. ++ ++#ifndef NRF_BLE_BMS_BLE_OBSERVER_PRIO ++#define NRF_BLE_BMS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// NRF_BLE_CGMS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Contiuon Glucose Monitoring Service. ++ ++#ifndef NRF_BLE_CGMS_BLE_OBSERVER_PRIO ++#define NRF_BLE_CGMS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// NRF_BLE_ES_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Eddystone module. ++ ++#ifndef NRF_BLE_ES_BLE_OBSERVER_PRIO ++#define NRF_BLE_ES_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the GATT Service Client. ++ ++#ifndef NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO ++#define NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// NRF_BLE_GATT_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the GATT module. ++ ++#ifndef NRF_BLE_GATT_BLE_OBSERVER_PRIO ++#define NRF_BLE_GATT_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// NRF_BLE_QWR_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Queued writes module. ++ ++#ifndef NRF_BLE_QWR_BLE_OBSERVER_PRIO ++#define NRF_BLE_QWR_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// NRF_BLE_SCAN_OBSERVER_PRIO ++// Priority for dispatching the BLE events to the Scanning Module. ++ ++#ifndef NRF_BLE_SCAN_OBSERVER_PRIO ++#define NRF_BLE_SCAN_OBSERVER_PRIO 1 ++#endif ++ ++// PM_BLE_OBSERVER_PRIO - Priority with which BLE events are dispatched to the Peer Manager module. ++#ifndef PM_BLE_OBSERVER_PRIO ++#define PM_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++ ++// ++ ++// NRF_SDH_ENABLED - nrf_sdh - SoftDevice handler ++//========================================================== ++#ifndef NRF_SDH_ENABLED ++#define NRF_SDH_ENABLED 1 ++#endif ++// Dispatch model ++ ++// This setting configures how Stack events are dispatched to the application. ++//========================================================== ++// NRF_SDH_DISPATCH_MODEL ++ ++ ++// NRF_SDH_DISPATCH_MODEL_INTERRUPT: SoftDevice events are passed to the application from the interrupt context. ++// NRF_SDH_DISPATCH_MODEL_APPSH: SoftDevice events are scheduled using @ref app_scheduler. ++// NRF_SDH_DISPATCH_MODEL_POLLING: SoftDevice events are to be fetched manually. ++// <0=> NRF_SDH_DISPATCH_MODEL_INTERRUPT ++// <1=> NRF_SDH_DISPATCH_MODEL_APPSH ++// <2=> NRF_SDH_DISPATCH_MODEL_POLLING ++ ++#ifndef NRF_SDH_DISPATCH_MODEL ++#define NRF_SDH_DISPATCH_MODEL 0 ++#endif ++ ++// ++//========================================================== ++ ++// Clock - SoftDevice clock configuration ++ ++//========================================================== ++// NRF_SDH_CLOCK_LF_SRC - SoftDevice clock source. ++ ++// <0=> NRF_CLOCK_LF_SRC_RC ++// <1=> NRF_CLOCK_LF_SRC_XTAL ++// <2=> NRF_CLOCK_LF_SRC_SYNTH ++ ++#ifndef NRF_SDH_CLOCK_LF_SRC ++#define NRF_SDH_CLOCK_LF_SRC 1 ++#endif ++ ++// NRF_SDH_CLOCK_LF_RC_CTIV - SoftDevice calibration timer interval. ++#ifndef NRF_SDH_CLOCK_LF_RC_CTIV ++#define NRF_SDH_CLOCK_LF_RC_CTIV 0 ++#endif ++ ++// NRF_SDH_CLOCK_LF_RC_TEMP_CTIV - SoftDevice calibration timer interval under constant temperature. ++// How often (in number of calibration intervals) the RC oscillator shall be calibrated ++// if the temperature has not changed. ++ ++#ifndef NRF_SDH_CLOCK_LF_RC_TEMP_CTIV ++#define NRF_SDH_CLOCK_LF_RC_TEMP_CTIV 0 ++#endif ++ ++// NRF_SDH_CLOCK_LF_ACCURACY - External clock accuracy used in the LL to compute timing. ++ ++// <0=> NRF_CLOCK_LF_ACCURACY_250_PPM ++// <1=> NRF_CLOCK_LF_ACCURACY_500_PPM ++// <2=> NRF_CLOCK_LF_ACCURACY_150_PPM ++// <3=> NRF_CLOCK_LF_ACCURACY_100_PPM ++// <4=> NRF_CLOCK_LF_ACCURACY_75_PPM ++// <5=> NRF_CLOCK_LF_ACCURACY_50_PPM ++// <6=> NRF_CLOCK_LF_ACCURACY_30_PPM ++// <7=> NRF_CLOCK_LF_ACCURACY_20_PPM ++// <8=> NRF_CLOCK_LF_ACCURACY_10_PPM ++// <9=> NRF_CLOCK_LF_ACCURACY_5_PPM ++// <10=> NRF_CLOCK_LF_ACCURACY_2_PPM ++// <11=> NRF_CLOCK_LF_ACCURACY_1_PPM ++ ++#ifndef NRF_SDH_CLOCK_LF_ACCURACY ++#define NRF_SDH_CLOCK_LF_ACCURACY 7 ++#endif ++ ++// ++//========================================================== ++ ++// SDH Observers - Observers and priority levels ++ ++//========================================================== ++// NRF_SDH_REQ_OBSERVER_PRIO_LEVELS - Total number of priority levels for request observers. ++// This setting configures the number of priority levels available for the SoftDevice request event handlers. ++// The priority level of a handler determines the order in which it receives events, with respect to other handlers. ++ ++#ifndef NRF_SDH_REQ_OBSERVER_PRIO_LEVELS ++#define NRF_SDH_REQ_OBSERVER_PRIO_LEVELS 2 ++#endif ++ ++// NRF_SDH_STATE_OBSERVER_PRIO_LEVELS - Total number of priority levels for state observers. ++// This setting configures the number of priority levels available for the SoftDevice state event handlers. ++// The priority level of a handler determines the order in which it receives events, with respect to other handlers. ++ ++#ifndef NRF_SDH_STATE_OBSERVER_PRIO_LEVELS ++#define NRF_SDH_STATE_OBSERVER_PRIO_LEVELS 2 ++#endif ++ ++// NRF_SDH_STACK_OBSERVER_PRIO_LEVELS - Total number of priority levels for stack event observers. ++// This setting configures the number of priority levels available for the SoftDevice stack event handlers (ANT, BLE, SoC). ++// The priority level of a handler determines the order in which it receives events, with respect to other handlers. ++ ++#ifndef NRF_SDH_STACK_OBSERVER_PRIO_LEVELS ++#define NRF_SDH_STACK_OBSERVER_PRIO_LEVELS 2 ++#endif ++ ++ ++// State Observers priorities - Invididual priorities ++ ++//========================================================== ++// CLOCK_CONFIG_STATE_OBSERVER_PRIO ++// Priority with which state events are dispatched to the Clock driver. ++ ++#ifndef CLOCK_CONFIG_STATE_OBSERVER_PRIO ++#define CLOCK_CONFIG_STATE_OBSERVER_PRIO 0 ++#endif ++ ++// POWER_CONFIG_STATE_OBSERVER_PRIO ++// Priority with which state events are dispatched to the Power driver. ++ ++#ifndef POWER_CONFIG_STATE_OBSERVER_PRIO ++#define POWER_CONFIG_STATE_OBSERVER_PRIO 0 ++#endif ++ ++// RNG_CONFIG_STATE_OBSERVER_PRIO ++// Priority with which state events are dispatched to this module. ++ ++#ifndef RNG_CONFIG_STATE_OBSERVER_PRIO ++#define RNG_CONFIG_STATE_OBSERVER_PRIO 0 ++#endif ++ ++// ++//========================================================== ++ ++// Stack Event Observers priorities - Invididual priorities ++ ++//========================================================== ++// NRF_SDH_ANT_STACK_OBSERVER_PRIO ++// This setting configures the priority with which ANT events are processed with respect to other events coming from the stack. ++// Modify this setting if you need to have ANT events dispatched before or after other stack events, such as BLE or SoC. ++// Zero is the highest priority. ++ ++#ifndef NRF_SDH_ANT_STACK_OBSERVER_PRIO ++#define NRF_SDH_ANT_STACK_OBSERVER_PRIO 0 ++#endif ++ ++// NRF_SDH_BLE_STACK_OBSERVER_PRIO ++// This setting configures the priority with which BLE events are processed with respect to other events coming from the stack. ++// Modify this setting if you need to have BLE events dispatched before or after other stack events, such as ANT or SoC. ++// Zero is the highest priority. ++ ++#ifndef NRF_SDH_BLE_STACK_OBSERVER_PRIO ++#define NRF_SDH_BLE_STACK_OBSERVER_PRIO 0 ++#endif ++ ++// NRF_SDH_SOC_STACK_OBSERVER_PRIO ++// This setting configures the priority with which SoC events are processed with respect to other events coming from the stack. ++// Modify this setting if you need to have SoC events dispatched before or after other stack events, such as ANT or BLE. ++// Zero is the highest priority. ++ ++#ifndef NRF_SDH_SOC_STACK_OBSERVER_PRIO ++#define NRF_SDH_SOC_STACK_OBSERVER_PRIO 0 ++#endif ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++ ++// ++ ++// NRF_SDH_SOC_ENABLED - nrf_sdh_soc - SoftDevice SoC event handler ++//========================================================== ++#ifndef NRF_SDH_SOC_ENABLED ++#define NRF_SDH_SOC_ENABLED 1 ++#endif ++// SoC Observers - Observers and priority levels ++ ++//========================================================== ++// NRF_SDH_SOC_OBSERVER_PRIO_LEVELS - Total number of priority levels for SoC observers. ++// This setting configures the number of priority levels available for the SoC event handlers. ++// The priority level of a handler determines the order in which it receives events, with respect to other handlers. ++ ++#ifndef NRF_SDH_SOC_OBSERVER_PRIO_LEVELS ++#define NRF_SDH_SOC_OBSERVER_PRIO_LEVELS 2 ++#endif ++ ++// SoC Observers priorities - Invididual priorities ++ ++//========================================================== ++// BLE_ADV_SOC_OBSERVER_PRIO ++// Priority with which SoC events are dispatched to the Advertising module. ++ ++#ifndef BLE_ADV_SOC_OBSERVER_PRIO ++#define BLE_ADV_SOC_OBSERVER_PRIO 1 ++#endif ++ ++// BLE_DFU_SOC_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the DFU Service. ++ ++#ifndef BLE_DFU_SOC_OBSERVER_PRIO ++#define BLE_DFU_SOC_OBSERVER_PRIO 1 ++#endif ++ ++// CLOCK_CONFIG_SOC_OBSERVER_PRIO ++// Priority with which SoC events are dispatched to the Clock driver. ++ ++#ifndef CLOCK_CONFIG_SOC_OBSERVER_PRIO ++#define CLOCK_CONFIG_SOC_OBSERVER_PRIO 0 ++#endif ++ ++// POWER_CONFIG_SOC_OBSERVER_PRIO ++// Priority with which SoC events are dispatched to the Power driver. ++ ++#ifndef POWER_CONFIG_SOC_OBSERVER_PRIO ++#define POWER_CONFIG_SOC_OBSERVER_PRIO 0 ++#endif ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++ ++// ++ ++// ++//========================================================== ++ ++// <<< end of configuration section >>> ++#endif //SDK_CONFIG_H ++ +diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10056.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10056.emProject +new file mode 100644 +index 0000000..bd45579 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10056.emProject +@@ -0,0 +1,169 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10056.emSession nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10056.emSession +new file mode 100644 +index 0000000..ce75e3c +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10056.emSession +@@ -0,0 +1,7 @@ ++ ++ ++ ++ ++ ++ ++ +\ No newline at end of file +diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/flash_placement.xml +new file mode 100644 +index 0000000..c9cc513 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v3_usb_hci/ses/flash_placement.xml +@@ -0,0 +1,49 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/armgcc/Makefile nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/armgcc/Makefile +new file mode 100644 +index 0000000..8d850ae +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/armgcc/Makefile +@@ -0,0 +1,283 @@ ++PROJECT_NAME := ble_connectivity_132v5_usb_hci_pca10056 ++TARGETS := nrf52840_xxaa ++OUTPUT_DIRECTORY := _build ++ ++SDK_ROOT := ../../../../../.. ++PROJ_DIR := ../../.. ++ ++$(OUTPUT_DIRECTORY)/nrf52840_xxaa.out: \ ++ LINKER_SCRIPT := ble_connectivity_gcc_nrf52.ld ++ ++# Source files common to all targets ++SRC_FILES += \ ++ $(SDK_ROOT)/modules/nrfx/mdk/gcc_startup_nrf52840.S \ ++ $(SDK_ROOT)/components/libraries/log/src/nrf_log_backend_rtt.c \ ++ $(SDK_ROOT)/components/libraries/log/src/nrf_log_backend_serial.c \ ++ $(SDK_ROOT)/components/libraries/log/src/nrf_log_backend_uart.c \ ++ $(SDK_ROOT)/components/libraries/log/src/nrf_log_default_backends.c \ ++ $(SDK_ROOT)/components/libraries/log/src/nrf_log_frontend.c \ ++ $(SDK_ROOT)/components/libraries/log/src/nrf_log_str_formatter.c \ ++ $(SDK_ROOT)/components/libraries/util/app_error.c \ ++ $(SDK_ROOT)/components/libraries/util/app_error_handler_gcc.c \ ++ $(SDK_ROOT)/components/libraries/util/app_error_weak.c \ ++ $(SDK_ROOT)/components/libraries/scheduler/app_scheduler.c \ ++ $(SDK_ROOT)/components/libraries/timer/app_timer.c \ ++ $(SDK_ROOT)/components/libraries/usbd/app_usbd.c \ ++ $(SDK_ROOT)/components/libraries/usbd/class/cdc/acm/app_usbd_cdc_acm.c \ ++ $(SDK_ROOT)/components/libraries/usbd/app_usbd_core.c \ ++ $(SDK_ROOT)/components/libraries/usbd/class/nrf_dfu_trigger/app_usbd_nrf_dfu_trigger.c \ ++ $(SDK_ROOT)/components/libraries/usbd/app_usbd_serial_num.c \ ++ $(SDK_ROOT)/components/libraries/usbd/app_usbd_string_desc.c \ ++ $(SDK_ROOT)/components/libraries/util/app_util_platform.c \ ++ $(SDK_ROOT)/components/libraries/crc16/crc16.c \ ++ $(SDK_ROOT)/components/libraries/util/nrf_assert.c \ ++ $(SDK_ROOT)/components/libraries/atomic_fifo/nrf_atfifo.c \ ++ $(SDK_ROOT)/components/libraries/atomic/nrf_atomic.c \ ++ $(SDK_ROOT)/components/libraries/balloc/nrf_balloc.c \ ++ $(SDK_ROOT)/external/fprintf/nrf_fprintf.c \ ++ $(SDK_ROOT)/external/fprintf/nrf_fprintf_format.c \ ++ $(SDK_ROOT)/components/libraries/memobj/nrf_memobj.c \ ++ $(SDK_ROOT)/components/libraries/queue/nrf_queue.c \ ++ $(SDK_ROOT)/components/libraries/ringbuf/nrf_ringbuf.c \ ++ $(SDK_ROOT)/components/libraries/experimental_section_vars/nrf_section_iter.c \ ++ $(SDK_ROOT)/components/libraries/strerror/nrf_strerror.c \ ++ $(SDK_ROOT)/modules/nrfx/mdk/system_nrf52840.c \ ++ $(SDK_ROOT)/components/boards/boards.c \ ++ $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_conn.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/common/ble_dtm_init.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_event_enc.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_evt_conn.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gap_evt_conn.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_gatt_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gattc_conn.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gattc_evt_conn.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_gattc_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gatts_conn.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gatts_evt_conn.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_gatts_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_l2cap_conn.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_l2cap_evt_conn.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_l2cap_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/common/ble_serialization.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/common/cond_field_serialization.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/conn_ble_l2cap_sdu_pool.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/common/conn_mw.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gap.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gattc.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gatts.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_l2cap.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/common/conn_mw_nrf_soc.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/hal/dtm_uart.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/nrf_soc_conn.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/nrf_soc_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_cmd_decoder.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_dtm_cmd_decoder.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_error_handling.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_event_encoder.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_handlers.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_pkt_decoder.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_reset_cmd_decoder.c \ ++ $(SDK_ROOT)/components/serialization/common/ser_dbg_sd_str.c \ ++ $(SDK_ROOT)/components/serialization/common/transport/ser_hal_transport.c \ ++ $(SDK_ROOT)/components/serialization/common/transport/ser_phy/ser_phy_hci.c \ ++ $(SDK_ROOT)/components/serialization/common/transport/ser_phy/ser_phy_hci_slip_cdc.c \ ++ $(SDK_ROOT)/integration/nrfx/legacy/nrf_drv_clock.c \ ++ $(SDK_ROOT)/integration/nrfx/legacy/nrf_drv_power.c \ ++ $(SDK_ROOT)/integration/nrfx/legacy/nrf_drv_uart.c \ ++ $(SDK_ROOT)/components/drivers_nrf/usbd/nrf_drv_usbd.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_clock.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power_clock.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/prs/nrfx_prs.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_qspi.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uart.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uarte.c \ ++ $(PROJ_DIR)/main.c \ ++ $(SDK_ROOT)/external/segger_rtt/SEGGER_RTT.c \ ++ $(SDK_ROOT)/external/segger_rtt/SEGGER_RTT_Syscalls_GCC.c \ ++ $(SDK_ROOT)/external/segger_rtt/SEGGER_RTT_printf.c \ ++ $(SDK_ROOT)/components/ble/common/ble_advdata.c \ ++ $(SDK_ROOT)/components/ble/common/ble_conn_params.c \ ++ $(SDK_ROOT)/components/ble/ble_dtm/ble_dtm.c \ ++ $(SDK_ROOT)/components/ble/ble_dtm/ble_dtm_hw_nrf52.c \ ++ $(SDK_ROOT)/components/ble/common/ble_srv_common.c \ ++ $(SDK_ROOT)/external/utf_converter/utf.c \ ++ $(SDK_ROOT)/components/softdevice/common/nrf_sdh.c \ ++ $(SDK_ROOT)/components/softdevice/common/nrf_sdh_ble.c \ ++ $(SDK_ROOT)/components/softdevice/common/nrf_sdh_soc.c \ ++ ++# Include folders common to all targets ++INC_FOLDERS += \ ++ $(SDK_ROOT)/components \ ++ $(SDK_ROOT)/components/serialization/connectivity/hal \ ++ $(SDK_ROOT)/modules/nrfx/mdk \ ++ $(SDK_ROOT)/components/libraries/scheduler \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers \ ++ $(SDK_ROOT)/components/toolchain/cmsis/include \ ++ $(SDK_ROOT)/components/libraries/queue \ ++ $(SDK_ROOT)/components/libraries/timer \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/common \ ++ $(SDK_ROOT)/components/serialization/connectivity \ ++ $(SDK_ROOT)/components/libraries/strerror \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware \ ++ $(SDK_ROOT)/components/libraries/crc16 \ ++ $(SDK_ROOT)/components/libraries/bootloader/dfu \ ++ $(SDK_ROOT)/components/serialization/common \ ++ $(SDK_ROOT)/components/libraries/util \ ++ $(SDK_ROOT)/components/libraries/usbd/class/cdc/acm \ ++ ../config \ ++ $(SDK_ROOT)/components/libraries/usbd/class/cdc \ ++ $(SDK_ROOT)/components/ble/common \ ++ $(SDK_ROOT)/components/libraries/balloc \ ++ $(SDK_ROOT)/components/drivers_nrf/usbd \ ++ $(SDK_ROOT)/components/libraries/ringbuf \ ++ $(SDK_ROOT)/modules/nrfx/hal \ ++ $(SDK_ROOT)/components/libraries/bsp \ ++ $(SDK_ROOT)/components/libraries/log \ ++ $(SDK_ROOT)/external/utf_converter \ ++ $(SDK_ROOT)/modules/nrfx \ ++ $(SDK_ROOT)/components/libraries/experimental_section_vars \ ++ $(SDK_ROOT)/integration/nrfx/legacy \ ++ $(SDK_ROOT)/components/serialization/common/transport/ser_phy \ ++ $(SDK_ROOT)/components/libraries/usbd \ ++ $(SDK_ROOT)/components/libraries/delay \ ++ $(SDK_ROOT)/external/segger_rtt \ ++ $(SDK_ROOT)/components/libraries/atomic_fifo \ ++ $(SDK_ROOT)/components/ble/ble_dtm \ ++ $(SDK_ROOT)/components/softdevice/s132v5/headers \ ++ $(SDK_ROOT)/components/libraries/atomic \ ++ $(SDK_ROOT)/components/boards \ ++ $(SDK_ROOT)/components/libraries/memobj \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble \ ++ $(SDK_ROOT)/integration/nrfx \ ++ $(SDK_ROOT)/components/libraries/usbd/class/nrf_dfu_trigger \ ++ $(SDK_ROOT)/components/serialization/common/transport \ ++ $(SDK_ROOT)/components/softdevice/common \ ++ $(SDK_ROOT)/components/serialization/common/transport/ser_phy/config \ ++ $(SDK_ROOT)/modules/nrfx/drivers/include \ ++ $(SDK_ROOT)/components/softdevice/s132v5/headers/nrf52 \ ++ $(SDK_ROOT)/components/libraries/block_dev \ ++ $(SDK_ROOT)/external/fprintf \ ++ $(SDK_ROOT)/components/libraries/log/src \ ++ ++# Libraries common to all targets ++LIB_FILES += \ ++ ++# Optimization flags ++OPT = -Os -g3 ++# Uncomment the line below to enable link time optimization ++#OPT += -flto ++ ++# C flags common to all targets ++CFLAGS += $(OPT) ++CFLAGS += -DBLE_STACK_SUPPORT_REQD ++CFLAGS += -DBOARD_PCA10056 ++CFLAGS += -DBSP_DEFINES_ONLY ++CFLAGS += -DCONFIG_GPIO_AS_PINRESET ++CFLAGS += -DFLOAT_ABI_HARD ++CFLAGS += -DHCI_TIMER2 ++CFLAGS += -DNRF52840_XXAA ++CFLAGS += -DNRF_SD_BLE_API_VERSION=5 ++CFLAGS += -DS132 ++CFLAGS += -DSER_CONNECTIVITY ++CFLAGS += -DSER_PHY_HCI_USB_CDC ++CFLAGS += -DSOFTDEVICE_PRESENT ++CFLAGS += -DSWI_DISABLE0 ++CFLAGS += -mcpu=cortex-m4 ++CFLAGS += -mthumb -mabi=aapcs ++CFLAGS += -Wall -Werror ++CFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16 ++# keep every function in a separate section, this allows linker to discard unused ones ++CFLAGS += -ffunction-sections -fdata-sections -fno-strict-aliasing ++CFLAGS += -fno-builtin -fshort-enums ++ ++# C++ flags common to all targets ++CXXFLAGS += $(OPT) ++ ++# Assembler flags common to all targets ++ASMFLAGS += -g3 ++ASMFLAGS += -mcpu=cortex-m4 ++ASMFLAGS += -mthumb -mabi=aapcs ++ASMFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16 ++ASMFLAGS += -DBLE_STACK_SUPPORT_REQD ++ASMFLAGS += -DBOARD_PCA10056 ++ASMFLAGS += -DBSP_DEFINES_ONLY ++ASMFLAGS += -DCONFIG_GPIO_AS_PINRESET ++ASMFLAGS += -DFLOAT_ABI_HARD ++ASMFLAGS += -DHCI_TIMER2 ++ASMFLAGS += -DNRF52840_XXAA ++ASMFLAGS += -DNRF_SD_BLE_API_VERSION=5 ++ASMFLAGS += -DS132 ++ASMFLAGS += -DSER_CONNECTIVITY ++ASMFLAGS += -DSER_PHY_HCI_USB_CDC ++ASMFLAGS += -DSOFTDEVICE_PRESENT ++ASMFLAGS += -DSWI_DISABLE0 ++ ++# Linker flags ++LDFLAGS += $(OPT) ++LDFLAGS += -mthumb -mabi=aapcs -L$(SDK_ROOT)/modules/nrfx/mdk -T$(LINKER_SCRIPT) ++LDFLAGS += -mcpu=cortex-m4 ++LDFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16 ++# let linker dump unused sections ++LDFLAGS += -Wl,--gc-sections ++# use newlib in nano version ++LDFLAGS += --specs=nano.specs ++ ++nrf52840_xxaa: CFLAGS += -D__HEAP_SIZE=512 ++nrf52840_xxaa: CFLAGS += -D__STACK_SIZE=2048 ++nrf52840_xxaa: ASMFLAGS += -D__HEAP_SIZE=512 ++nrf52840_xxaa: ASMFLAGS += -D__STACK_SIZE=2048 ++ ++# Add standard libraries at the very end of the linker input, after all objects ++# that may need symbols provided by these libraries. ++LIB_FILES += -lc -lnosys -lm ++ ++ ++.PHONY: default help ++ ++# Default target - first one defined ++default: nrf52840_xxaa ++ ++# Print all targets that can be built ++help: ++ @echo following targets are available: ++ @echo nrf52840_xxaa ++ @echo flash_softdevice ++ @echo sdk_config - starting external tool for editing sdk_config.h ++ @echo flash - flashing binary ++ ++TEMPLATE_PATH := $(SDK_ROOT)/components/toolchain/gcc ++ ++ ++include $(TEMPLATE_PATH)/Makefile.common ++ ++$(foreach target, $(TARGETS), $(call define_target, $(target))) ++ ++.PHONY: flash flash_softdevice erase ++ ++# Flash the program ++flash: default ++ @echo Flashing: $(OUTPUT_DIRECTORY)/nrf52840_xxaa.hex ++ nrfjprog -f nrf52 --program $(OUTPUT_DIRECTORY)/nrf52840_xxaa.hex --sectorerase ++ nrfjprog -f nrf52 --reset ++ ++# Flash softdevice ++flash_softdevice: ++ @echo Flashing: s132_nrf52_5.1.0_softdevice.hex ++ nrfjprog -f nrf52 --program $(SDK_ROOT)/components/softdevice/s132v5/hex/s132_nrf52_5.1.0_softdevice.hex --sectorerase ++ nrfjprog -f nrf52 --reset ++ ++erase: ++ nrfjprog -f nrf52 --eraseall ++ ++SDK_CONFIG_FILE := ../config/sdk_config.h ++CMSIS_CONFIG_TOOL := $(SDK_ROOT)/external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar ++sdk_config: ++ java -jar $(CMSIS_CONFIG_TOOL) $(SDK_CONFIG_FILE) +diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld +new file mode 100644 +index 0000000..211f001 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld +@@ -0,0 +1,106 @@ ++/* Linker script to configure memory regions. */ ++ ++SEARCH_DIR(.) ++GROUP(-lgcc -lc -lnosys) ++ ++MEMORY ++{ ++ FLASH (rx) : ORIGIN = 0x23000, LENGTH = 0xdd000 ++ RAM (rwx) : ORIGIN = 0x20019380, LENGTH = 0x26c80 ++ connectivity_version_info (r) : ORIGIN = 0x50000, LENGTH = 0x18 ++} ++ ++SECTIONS ++{ ++ .connectivity_version_info : ++ { ++ PROVIDE(__start_connectivity_version_info = .); ++ KEEP(*(SORT(.connectivity_version_info*))) ++ PROVIDE(__stop_connectivity_version_info = .); ++ } > connectivity_version_info ++} ++ ++SECTIONS ++{ ++ . = ALIGN(4); ++ .mem_section_dummy_ram : ++ { ++ } ++ .log_dynamic_data : ++ { ++ PROVIDE(__start_log_dynamic_data = .); ++ KEEP(*(SORT(.log_dynamic_data*))) ++ PROVIDE(__stop_log_dynamic_data = .); ++ } > RAM ++ .log_filter_data : ++ { ++ PROVIDE(__start_log_filter_data = .); ++ KEEP(*(SORT(.log_filter_data*))) ++ PROVIDE(__stop_log_filter_data = .); ++ } > RAM ++ ++} INSERT AFTER .data; ++ ++SECTIONS ++{ ++ .mem_section_dummy_rom : ++ { ++ } ++ .sdh_ble_observers : ++ { ++ PROVIDE(__start_sdh_ble_observers = .); ++ KEEP(*(SORT(.sdh_ble_observers*))) ++ PROVIDE(__stop_sdh_ble_observers = .); ++ } > FLASH ++ .sdh_soc_observers : ++ { ++ PROVIDE(__start_sdh_soc_observers = .); ++ KEEP(*(SORT(.sdh_soc_observers*))) ++ PROVIDE(__stop_sdh_soc_observers = .); ++ } > FLASH ++ .nrf_queue : ++ { ++ PROVIDE(__start_nrf_queue = .); ++ KEEP(*(.nrf_queue)) ++ PROVIDE(__stop_nrf_queue = .); ++ } > FLASH ++ .log_const_data : ++ { ++ PROVIDE(__start_log_const_data = .); ++ KEEP(*(SORT(.log_const_data*))) ++ PROVIDE(__stop_log_const_data = .); ++ } > FLASH ++ .nrf_balloc : ++ { ++ PROVIDE(__start_nrf_balloc = .); ++ KEEP(*(.nrf_balloc)) ++ PROVIDE(__stop_nrf_balloc = .); ++ } > FLASH ++ .sdh_state_observers : ++ { ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); ++ } > FLASH ++ .sdh_stack_observers : ++ { ++ PROVIDE(__start_sdh_stack_observers = .); ++ KEEP(*(SORT(.sdh_stack_observers*))) ++ PROVIDE(__stop_sdh_stack_observers = .); ++ } > FLASH ++ .sdh_req_observers : ++ { ++ PROVIDE(__start_sdh_req_observers = .); ++ KEEP(*(SORT(.sdh_req_observers*))) ++ PROVIDE(__stop_sdh_req_observers = .); ++ } > FLASH ++ .log_backends : ++ { ++ PROVIDE(__start_log_backends = .); ++ KEEP(*(SORT(.log_backends*))) ++ PROVIDE(__stop_log_backends = .); ++ } > FLASH ++ ++} INSERT AFTER .text ++ ++INCLUDE "nrf_common.ld" +diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/config/sdk_config.h +new file mode 100644 +index 0000000..f0b6542 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/config/sdk_config.h +@@ -0,0 +1,5244 @@ ++/** ++ * Copyright (c) 2017 - 2018, Nordic Semiconductor ASA ++ * ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form, except as embedded into a Nordic ++ * Semiconductor ASA integrated circuit in a product or a software update for ++ * such product, must reproduce the above copyright notice, this list of ++ * conditions and the following disclaimer in the documentation and/or other ++ * materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its ++ * contributors may be used to endorse or promote products derived from this ++ * software without specific prior written permission. ++ * ++ * 4. This software, with or without modification, must only be used with a ++ * Nordic Semiconductor ASA integrated circuit. ++ * ++ * 5. Any software provided in binary form under this license must not be reverse ++ * engineered, decompiled, modified and/or disassembled. ++ * ++ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS ++ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE ++ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ++ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ++ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ * ++ */ ++ ++ ++ ++#ifndef SDK_CONFIG_H ++#define SDK_CONFIG_H ++// <<< Use Configuration Wizard in Context Menu >>>\n ++#ifdef USE_APP_CONFIG ++#include "app_config.h" ++#endif ++// Application ++ ++//========================================================== ++// application_info - Software Component ++ ++//========================================================== ++// APP_NAME - Application name ++#ifndef APP_NAME ++#define APP_NAME "ble-connectivity" ++#endif ++ ++// APP_ID - Application ID ++#ifndef APP_ID ++#define APP_ID 0 ++#endif ++ ++// APP_VERSION - Application version (semantic versioning) ++ ++//========================================================== ++// APP_VERSION_MAJOR - Major version <0-1000> ++ ++ ++#ifndef APP_VERSION_MAJOR ++#define APP_VERSION_MAJOR 0 ++#endif ++ ++// APP_VERSION_MINOR - Minor version <0-1000> ++ ++ ++#ifndef APP_VERSION_MINOR ++#define APP_VERSION_MINOR 1 ++#endif ++ ++// APP_VERSION_PATCH - Patch version <0-1000> ++ ++ ++#ifndef APP_VERSION_PATCH ++#define APP_VERSION_PATCH 0 ++#endif ++ ++// APP_VERSION_PRERELEASE - Prerelease, eg. "-1.alpha" ++ ++// If not empty, this string should include the leading hyphen (-). ++// This string might be normalized at run-time to not contain characters ++// illegal in Semantic Versioning. ++#ifndef APP_VERSION_PRERELEASE ++#define APP_VERSION_PRERELEASE "" ++#endif ++ ++// APP_VERSION_METADATA - Metadata, e.g. "+some-string.01-01-2018-23-59-59" ++ ++// If not empty, this string should include the leading plus (+). ++// This string might be normalized at run-time to not contain characters ++// illegal in Semantic Versioning. ++#ifndef APP_VERSION_METADATA ++#define APP_VERSION_METADATA "+" __DATE__ " " __TIME__ ++#endif ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++// Board Definition ++ ++//========================================================== ++// nrf_dfu_trigger_usb - USB DFU Trigger library ++ ++//========================================================== ++// NRF_DFU_TRIGGER_USB_USB_SHARED - Flag indicating whether USB is used for other purposes in the application. ++ ++ ++#ifndef NRF_DFU_TRIGGER_USB_USB_SHARED ++#define NRF_DFU_TRIGGER_USB_USB_SHARED 1 ++#endif ++ ++// NRF_DFU_TRIGGER_USB_INTERFACE_NUM - The USB interface to use for the DFU Trigger library. <0-255> ++ ++ ++// According to the USB Specification, interface numbers cannot have ++// gaps. Tailor this value to adhere to this limitation. ++ ++#ifndef NRF_DFU_TRIGGER_USB_INTERFACE_NUM ++#define NRF_DFU_TRIGGER_USB_INTERFACE_NUM 0 ++#endif ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++// nRF_BLE ++ ++//========================================================== ++// BLE_DTM_ENABLED - ble_dtm - Module for testing RF/PHY using DTM commands ++ ++ ++#ifndef BLE_DTM_ENABLED ++#define BLE_DTM_ENABLED 1 ++#endif ++ ++// NRF_BLE_CONN_PARAMS_ENABLED - ble_conn_params - Initiating and executing a connection parameters negotiation procedure ++//========================================================== ++#ifndef NRF_BLE_CONN_PARAMS_ENABLED ++#define NRF_BLE_CONN_PARAMS_ENABLED 1 ++#endif ++// NRF_BLE_CONN_PARAMS_MAX_SLAVE_LATENCY_DEVIATION - The largest acceptable deviation in slave latency. ++// The largest deviation (+ or -) from the requested slave latency that will not be renegotiated. ++ ++#ifndef NRF_BLE_CONN_PARAMS_MAX_SLAVE_LATENCY_DEVIATION ++#define NRF_BLE_CONN_PARAMS_MAX_SLAVE_LATENCY_DEVIATION 499 ++#endif ++ ++// NRF_BLE_CONN_PARAMS_MAX_SUPERVISION_TIMEOUT_DEVIATION - The largest acceptable deviation (in 10 ms units) in supervision timeout. ++// The largest deviation (+ or -, in 10 ms units) from the requested supervision timeout that will not be renegotiated. ++ ++#ifndef NRF_BLE_CONN_PARAMS_MAX_SUPERVISION_TIMEOUT_DEVIATION ++#define NRF_BLE_CONN_PARAMS_MAX_SUPERVISION_TIMEOUT_DEVIATION 65535 ++#endif ++ ++// ++ ++// ++//========================================================== ++ ++// nRF_Drivers ++ ++//========================================================== ++// NRFX_CLOCK_ENABLED - nrfx_clock - CLOCK peripheral driver ++//========================================================== ++#ifndef NRFX_CLOCK_ENABLED ++#define NRFX_CLOCK_ENABLED 1 ++#endif ++// NRFX_CLOCK_CONFIG_LF_SRC - LF Clock Source ++ ++// <0=> RC ++// <1=> XTAL ++// <2=> Synth ++// <131073=> External Low Swing ++// <196609=> External Full Swing ++ ++#ifndef NRFX_CLOCK_CONFIG_LF_SRC ++#define NRFX_CLOCK_CONFIG_LF_SRC 1 ++#endif ++ ++// NRFX_CLOCK_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef NRFX_CLOCK_CONFIG_IRQ_PRIORITY ++#define NRFX_CLOCK_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// NRFX_CLOCK_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRFX_CLOCK_CONFIG_LOG_ENABLED ++#define NRFX_CLOCK_CONFIG_LOG_ENABLED 0 ++#endif ++// NRFX_CLOCK_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRFX_CLOCK_CONFIG_LOG_LEVEL ++#define NRFX_CLOCK_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRFX_CLOCK_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_CLOCK_CONFIG_INFO_COLOR ++#define NRFX_CLOCK_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRFX_CLOCK_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_CLOCK_CONFIG_DEBUG_COLOR ++#define NRFX_CLOCK_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++ ++// NRFX_POWER_ENABLED - nrfx_power - POWER peripheral driver ++//========================================================== ++#ifndef NRFX_POWER_ENABLED ++#define NRFX_POWER_ENABLED 1 ++#endif ++// NRFX_POWER_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef NRFX_POWER_CONFIG_IRQ_PRIORITY ++#define NRFX_POWER_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// NRFX_POWER_CONFIG_DEFAULT_DCDCEN - The default configuration of main DCDC regulator ++ ++ ++// This settings means only that components for DCDC regulator are installed and it can be enabled. ++ ++#ifndef NRFX_POWER_CONFIG_DEFAULT_DCDCEN ++#define NRFX_POWER_CONFIG_DEFAULT_DCDCEN 0 ++#endif ++ ++// NRFX_POWER_CONFIG_DEFAULT_DCDCENHV - The default configuration of High Voltage DCDC regulator ++ ++ ++// This settings means only that components for DCDC regulator are installed and it can be enabled. ++ ++#ifndef NRFX_POWER_CONFIG_DEFAULT_DCDCENHV ++#define NRFX_POWER_CONFIG_DEFAULT_DCDCENHV 0 ++#endif ++ ++// ++ ++// NRFX_PRS_ENABLED - nrfx_prs - Peripheral Resource Sharing module ++//========================================================== ++#ifndef NRFX_PRS_ENABLED ++#define NRFX_PRS_ENABLED 1 ++#endif ++// NRFX_PRS_BOX_0_ENABLED - Enables box 0 in the module. ++ ++ ++#ifndef NRFX_PRS_BOX_0_ENABLED ++#define NRFX_PRS_BOX_0_ENABLED 0 ++#endif ++ ++// NRFX_PRS_BOX_1_ENABLED - Enables box 1 in the module. ++ ++ ++#ifndef NRFX_PRS_BOX_1_ENABLED ++#define NRFX_PRS_BOX_1_ENABLED 0 ++#endif ++ ++// NRFX_PRS_BOX_2_ENABLED - Enables box 2 in the module. ++ ++ ++#ifndef NRFX_PRS_BOX_2_ENABLED ++#define NRFX_PRS_BOX_2_ENABLED 0 ++#endif ++ ++// NRFX_PRS_BOX_3_ENABLED - Enables box 3 in the module. ++ ++ ++#ifndef NRFX_PRS_BOX_3_ENABLED ++#define NRFX_PRS_BOX_3_ENABLED 0 ++#endif ++ ++// NRFX_PRS_BOX_4_ENABLED - Enables box 4 in the module. ++ ++ ++#ifndef NRFX_PRS_BOX_4_ENABLED ++#define NRFX_PRS_BOX_4_ENABLED 1 ++#endif ++ ++// NRFX_PRS_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRFX_PRS_CONFIG_LOG_ENABLED ++#define NRFX_PRS_CONFIG_LOG_ENABLED 0 ++#endif ++// NRFX_PRS_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRFX_PRS_CONFIG_LOG_LEVEL ++#define NRFX_PRS_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRFX_PRS_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_PRS_CONFIG_INFO_COLOR ++#define NRFX_PRS_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRFX_PRS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_PRS_CONFIG_DEBUG_COLOR ++#define NRFX_PRS_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++ ++// NRFX_QSPI_ENABLED - nrfx_qspi - QSPI peripheral driver ++//========================================================== ++#ifndef NRFX_QSPI_ENABLED ++#define NRFX_QSPI_ENABLED 1 ++#endif ++// NRFX_QSPI_CONFIG_SCK_DELAY - tSHSL, tWHSL and tSHWL in number of 16 MHz periods (62.5 ns). <0-255> ++ ++ ++#ifndef NRFX_QSPI_CONFIG_SCK_DELAY ++#define NRFX_QSPI_CONFIG_SCK_DELAY 1 ++#endif ++ ++// NRFX_QSPI_CONFIG_XIP_OFFSET - Address offset in the external memory for Execute in Place operation. ++#ifndef NRFX_QSPI_CONFIG_XIP_OFFSET ++#define NRFX_QSPI_CONFIG_XIP_OFFSET 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_READOC - Number of data lines and opcode used for reading. ++ ++// <0=> FastRead ++// <1=> Read2O ++// <2=> Read2IO ++// <3=> Read4O ++// <4=> Read4IO ++ ++#ifndef NRFX_QSPI_CONFIG_READOC ++#define NRFX_QSPI_CONFIG_READOC 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_WRITEOC - Number of data lines and opcode used for writing. ++ ++// <0=> PP ++// <1=> PP2O ++// <2=> PP4O ++// <3=> PP4IO ++ ++#ifndef NRFX_QSPI_CONFIG_WRITEOC ++#define NRFX_QSPI_CONFIG_WRITEOC 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_ADDRMODE - Addressing mode. ++ ++// <0=> 24bit ++// <1=> 32bit ++ ++#ifndef NRFX_QSPI_CONFIG_ADDRMODE ++#define NRFX_QSPI_CONFIG_ADDRMODE 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_MODE - SPI mode. ++ ++// <0=> Mode 0 ++// <1=> Mode 1 ++ ++#ifndef NRFX_QSPI_CONFIG_MODE ++#define NRFX_QSPI_CONFIG_MODE 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_FREQUENCY - Frequency divider. ++ ++// <0=> 32MHz/1 ++// <1=> 32MHz/2 ++// <2=> 32MHz/3 ++// <3=> 32MHz/4 ++// <4=> 32MHz/5 ++// <5=> 32MHz/6 ++// <6=> 32MHz/7 ++// <7=> 32MHz/8 ++// <8=> 32MHz/9 ++// <9=> 32MHz/10 ++// <10=> 32MHz/11 ++// <11=> 32MHz/12 ++// <12=> 32MHz/13 ++// <13=> 32MHz/14 ++// <14=> 32MHz/15 ++// <15=> 32MHz/16 ++ ++#ifndef NRFX_QSPI_CONFIG_FREQUENCY ++#define NRFX_QSPI_CONFIG_FREQUENCY 15 ++#endif ++ ++// NRFX_QSPI_PIN_SCK - SCK pin value. ++#ifndef NRFX_QSPI_PIN_SCK ++#define NRFX_QSPI_PIN_SCK NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_CSN - CSN pin value. ++#ifndef NRFX_QSPI_PIN_CSN ++#define NRFX_QSPI_PIN_CSN NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO0 - IO0 pin value. ++#ifndef NRFX_QSPI_PIN_IO0 ++#define NRFX_QSPI_PIN_IO0 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO1 - IO1 pin value. ++#ifndef NRFX_QSPI_PIN_IO1 ++#define NRFX_QSPI_PIN_IO1 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO2 - IO2 pin value. ++#ifndef NRFX_QSPI_PIN_IO2 ++#define NRFX_QSPI_PIN_IO2 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO3 - IO3 pin value. ++#ifndef NRFX_QSPI_PIN_IO3 ++#define NRFX_QSPI_PIN_IO3 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef NRFX_QSPI_CONFIG_IRQ_PRIORITY ++#define NRFX_QSPI_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ ++// NRFX_UARTE_ENABLED - nrfx_uarte - UARTE peripheral driver ++//========================================================== ++#ifndef NRFX_UARTE_ENABLED ++#define NRFX_UARTE_ENABLED 1 ++#endif ++// NRFX_UARTE0_ENABLED - Enable UARTE0 instance ++#ifndef NRFX_UARTE0_ENABLED ++#define NRFX_UARTE0_ENABLED 0 ++#endif ++ ++// NRFX_UARTE1_ENABLED - Enable UARTE1 instance ++#ifndef NRFX_UARTE1_ENABLED ++#define NRFX_UARTE1_ENABLED 0 ++#endif ++ ++// NRFX_UARTE_DEFAULT_CONFIG_HWFC - Hardware Flow Control ++ ++// <0=> Disabled ++// <1=> Enabled ++ ++#ifndef NRFX_UARTE_DEFAULT_CONFIG_HWFC ++#define NRFX_UARTE_DEFAULT_CONFIG_HWFC 0 ++#endif ++ ++// NRFX_UARTE_DEFAULT_CONFIG_PARITY - Parity ++ ++// <0=> Excluded ++// <14=> Included ++ ++#ifndef NRFX_UARTE_DEFAULT_CONFIG_PARITY ++#define NRFX_UARTE_DEFAULT_CONFIG_PARITY 0 ++#endif ++ ++// NRFX_UARTE_DEFAULT_CONFIG_BAUDRATE - Default Baudrate ++ ++// <323584=> 1200 baud ++// <643072=> 2400 baud ++// <1290240=> 4800 baud ++// <2576384=> 9600 baud ++// <3862528=> 14400 baud ++// <5152768=> 19200 baud ++// <7716864=> 28800 baud ++// <8388608=> 31250 baud ++// <10289152=> 38400 baud ++// <15007744=> 56000 baud ++// <15400960=> 57600 baud ++// <20615168=> 76800 baud ++// <30801920=> 115200 baud ++// <61865984=> 230400 baud ++// <67108864=> 250000 baud ++// <121634816=> 460800 baud ++// <251658240=> 921600 baud ++// <268435456=> 1000000 baud ++ ++#ifndef NRFX_UARTE_DEFAULT_CONFIG_BAUDRATE ++#define NRFX_UARTE_DEFAULT_CONFIG_BAUDRATE 30801920 ++#endif ++ ++// NRFX_UARTE_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef NRFX_UARTE_DEFAULT_CONFIG_IRQ_PRIORITY ++#define NRFX_UARTE_DEFAULT_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// NRFX_UARTE_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRFX_UARTE_CONFIG_LOG_ENABLED ++#define NRFX_UARTE_CONFIG_LOG_ENABLED 0 ++#endif ++// NRFX_UARTE_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRFX_UARTE_CONFIG_LOG_LEVEL ++#define NRFX_UARTE_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRFX_UARTE_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_UARTE_CONFIG_INFO_COLOR ++#define NRFX_UARTE_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRFX_UARTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_UARTE_CONFIG_DEBUG_COLOR ++#define NRFX_UARTE_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++ ++// NRFX_UART_ENABLED - nrfx_uart - UART peripheral driver ++//========================================================== ++#ifndef NRFX_UART_ENABLED ++#define NRFX_UART_ENABLED 1 ++#endif ++// NRFX_UART0_ENABLED - Enable UART0 instance ++#ifndef NRFX_UART0_ENABLED ++#define NRFX_UART0_ENABLED 0 ++#endif ++ ++// NRFX_UART_DEFAULT_CONFIG_HWFC - Hardware Flow Control ++ ++// <0=> Disabled ++// <1=> Enabled ++ ++#ifndef NRFX_UART_DEFAULT_CONFIG_HWFC ++#define NRFX_UART_DEFAULT_CONFIG_HWFC 0 ++#endif ++ ++// NRFX_UART_DEFAULT_CONFIG_PARITY - Parity ++ ++// <0=> Excluded ++// <14=> Included ++ ++#ifndef NRFX_UART_DEFAULT_CONFIG_PARITY ++#define NRFX_UART_DEFAULT_CONFIG_PARITY 0 ++#endif ++ ++// NRFX_UART_DEFAULT_CONFIG_BAUDRATE - Default Baudrate ++ ++// <323584=> 1200 baud ++// <643072=> 2400 baud ++// <1290240=> 4800 baud ++// <2576384=> 9600 baud ++// <3866624=> 14400 baud ++// <5152768=> 19200 baud ++// <7729152=> 28800 baud ++// <8388608=> 31250 baud ++// <10309632=> 38400 baud ++// <15007744=> 56000 baud ++// <15462400=> 57600 baud ++// <20615168=> 76800 baud ++// <30924800=> 115200 baud ++// <61845504=> 230400 baud ++// <67108864=> 250000 baud ++// <123695104=> 460800 baud ++// <247386112=> 921600 baud ++// <268435456=> 1000000 baud ++ ++#ifndef NRFX_UART_DEFAULT_CONFIG_BAUDRATE ++#define NRFX_UART_DEFAULT_CONFIG_BAUDRATE 30924800 ++#endif ++ ++// NRFX_UART_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef NRFX_UART_DEFAULT_CONFIG_IRQ_PRIORITY ++#define NRFX_UART_DEFAULT_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// NRFX_UART_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRFX_UART_CONFIG_LOG_ENABLED ++#define NRFX_UART_CONFIG_LOG_ENABLED 0 ++#endif ++// NRFX_UART_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRFX_UART_CONFIG_LOG_LEVEL ++#define NRFX_UART_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRFX_UART_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_UART_CONFIG_INFO_COLOR ++#define NRFX_UART_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRFX_UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_UART_CONFIG_DEBUG_COLOR ++#define NRFX_UART_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++ ++// NRF_CLOCK_ENABLED - nrf_drv_clock - CLOCK peripheral driver - legacy layer ++//========================================================== ++#ifndef NRF_CLOCK_ENABLED ++#define NRF_CLOCK_ENABLED 1 ++#endif ++// CLOCK_CONFIG_LF_SRC - LF Clock Source ++ ++// <0=> RC ++// <1=> XTAL ++// <2=> Synth ++// <131073=> External Low Swing ++// <196609=> External Full Swing ++ ++#ifndef CLOCK_CONFIG_LF_SRC ++#define CLOCK_CONFIG_LF_SRC 1 ++#endif ++ ++// CLOCK_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef CLOCK_CONFIG_IRQ_PRIORITY ++#define CLOCK_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ ++// POWER_ENABLED - nrf_drv_power - POWER peripheral driver - legacy layer ++//========================================================== ++#ifndef POWER_ENABLED ++#define POWER_ENABLED 1 ++#endif ++// POWER_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef POWER_CONFIG_IRQ_PRIORITY ++#define POWER_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// POWER_CONFIG_DEFAULT_DCDCEN - The default configuration of main DCDC regulator ++ ++ ++// This settings means only that components for DCDC regulator are installed and it can be enabled. ++ ++#ifndef POWER_CONFIG_DEFAULT_DCDCEN ++#define POWER_CONFIG_DEFAULT_DCDCEN 0 ++#endif ++ ++// POWER_CONFIG_DEFAULT_DCDCENHV - The default configuration of High Voltage DCDC regulator ++ ++ ++// This settings means only that components for DCDC regulator are installed and it can be enabled. ++ ++#ifndef POWER_CONFIG_DEFAULT_DCDCENHV ++#define POWER_CONFIG_DEFAULT_DCDCENHV 0 ++#endif ++ ++// ++ ++// QSPI_ENABLED - nrf_drv_qspi - QSPI peripheral driver - legacy layer ++//========================================================== ++#ifndef QSPI_ENABLED ++#define QSPI_ENABLED 1 ++#endif ++// QSPI_CONFIG_SCK_DELAY - tSHSL, tWHSL and tSHWL in number of 16 MHz periods (62.5 ns). <0-255> ++ ++ ++#ifndef QSPI_CONFIG_SCK_DELAY ++#define QSPI_CONFIG_SCK_DELAY 1 ++#endif ++ ++// QSPI_CONFIG_XIP_OFFSET - Address offset in the external memory for Execute in Place operation. ++#ifndef QSPI_CONFIG_XIP_OFFSET ++#define QSPI_CONFIG_XIP_OFFSET 0 ++#endif ++ ++// QSPI_CONFIG_READOC - Number of data lines and opcode used for reading. ++ ++// <0=> FastRead ++// <1=> Read2O ++// <2=> Read2IO ++// <3=> Read4O ++// <4=> Read4IO ++ ++#ifndef QSPI_CONFIG_READOC ++#define QSPI_CONFIG_READOC 0 ++#endif ++ ++// QSPI_CONFIG_WRITEOC - Number of data lines and opcode used for writing. ++ ++// <0=> PP ++// <1=> PP2O ++// <2=> PP4O ++// <3=> PP4IO ++ ++#ifndef QSPI_CONFIG_WRITEOC ++#define QSPI_CONFIG_WRITEOC 0 ++#endif ++ ++// QSPI_CONFIG_ADDRMODE - Addressing mode. ++ ++// <0=> 24bit ++// <1=> 32bit ++ ++#ifndef QSPI_CONFIG_ADDRMODE ++#define QSPI_CONFIG_ADDRMODE 0 ++#endif ++ ++// QSPI_CONFIG_MODE - SPI mode. ++ ++// <0=> Mode 0 ++// <1=> Mode 1 ++ ++#ifndef QSPI_CONFIG_MODE ++#define QSPI_CONFIG_MODE 0 ++#endif ++ ++// QSPI_CONFIG_FREQUENCY - Frequency divider. ++ ++// <0=> 32MHz/1 ++// <1=> 32MHz/2 ++// <2=> 32MHz/3 ++// <3=> 32MHz/4 ++// <4=> 32MHz/5 ++// <5=> 32MHz/6 ++// <6=> 32MHz/7 ++// <7=> 32MHz/8 ++// <8=> 32MHz/9 ++// <9=> 32MHz/10 ++// <10=> 32MHz/11 ++// <11=> 32MHz/12 ++// <12=> 32MHz/13 ++// <13=> 32MHz/14 ++// <14=> 32MHz/15 ++// <15=> 32MHz/16 ++ ++#ifndef QSPI_CONFIG_FREQUENCY ++#define QSPI_CONFIG_FREQUENCY 15 ++#endif ++ ++// QSPI_PIN_SCK - SCK pin value. ++#ifndef QSPI_PIN_SCK ++#define QSPI_PIN_SCK NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_CSN - CSN pin value. ++#ifndef QSPI_PIN_CSN ++#define QSPI_PIN_CSN NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO0 - IO0 pin value. ++#ifndef QSPI_PIN_IO0 ++#define QSPI_PIN_IO0 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO1 - IO1 pin value. ++#ifndef QSPI_PIN_IO1 ++#define QSPI_PIN_IO1 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO2 - IO2 pin value. ++#ifndef QSPI_PIN_IO2 ++#define QSPI_PIN_IO2 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO3 - IO3 pin value. ++#ifndef QSPI_PIN_IO3 ++#define QSPI_PIN_IO3 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef QSPI_CONFIG_IRQ_PRIORITY ++#define QSPI_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ ++// UART_ENABLED - nrf_drv_uart - UART/UARTE peripheral driver - legacy layer ++//========================================================== ++#ifndef UART_ENABLED ++#define UART_ENABLED 1 ++#endif ++// UART_DEFAULT_CONFIG_HWFC - Hardware Flow Control ++ ++// <0=> Disabled ++// <1=> Enabled ++ ++#ifndef UART_DEFAULT_CONFIG_HWFC ++#define UART_DEFAULT_CONFIG_HWFC 0 ++#endif ++ ++// UART_DEFAULT_CONFIG_PARITY - Parity ++ ++// <0=> Excluded ++// <14=> Included ++ ++#ifndef UART_DEFAULT_CONFIG_PARITY ++#define UART_DEFAULT_CONFIG_PARITY 0 ++#endif ++ ++// UART_DEFAULT_CONFIG_BAUDRATE - Default Baudrate ++ ++// <323584=> 1200 baud ++// <643072=> 2400 baud ++// <1290240=> 4800 baud ++// <2576384=> 9600 baud ++// <3862528=> 14400 baud ++// <5152768=> 19200 baud ++// <7716864=> 28800 baud ++// <10289152=> 38400 baud ++// <15400960=> 57600 baud ++// <20615168=> 76800 baud ++// <30801920=> 115200 baud ++// <61865984=> 230400 baud ++// <67108864=> 250000 baud ++// <121634816=> 460800 baud ++// <251658240=> 921600 baud ++// <268435456=> 1000000 baud ++ ++#ifndef UART_DEFAULT_CONFIG_BAUDRATE ++#define UART_DEFAULT_CONFIG_BAUDRATE 30801920 ++#endif ++ ++// UART_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef UART_DEFAULT_CONFIG_IRQ_PRIORITY ++#define UART_DEFAULT_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// UART_EASY_DMA_SUPPORT - Driver supporting EasyDMA ++ ++ ++#ifndef UART_EASY_DMA_SUPPORT ++#define UART_EASY_DMA_SUPPORT 1 ++#endif ++ ++// UART_LEGACY_SUPPORT - Driver supporting Legacy mode ++ ++ ++#ifndef UART_LEGACY_SUPPORT ++#define UART_LEGACY_SUPPORT 1 ++#endif ++ ++// UART0_ENABLED - Enable UART0 instance ++//========================================================== ++#ifndef UART0_ENABLED ++#define UART0_ENABLED 1 ++#endif ++// UART0_CONFIG_USE_EASY_DMA - Default setting for using EasyDMA ++ ++ ++#ifndef UART0_CONFIG_USE_EASY_DMA ++#define UART0_CONFIG_USE_EASY_DMA 1 ++#endif ++ ++// ++ ++// UART1_ENABLED - Enable UART1 instance ++//========================================================== ++#ifndef UART1_ENABLED ++#define UART1_ENABLED 0 ++#endif ++// ++ ++// ++ ++// USBD_ENABLED - nrf_drv_usbd - USB driver ++//========================================================== ++#ifndef USBD_ENABLED ++#define USBD_ENABLED 1 ++#endif ++// USBD_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef USBD_CONFIG_IRQ_PRIORITY ++#define USBD_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// USBD_CONFIG_DMASCHEDULER_MODE - USBD SMA scheduler working scheme ++ ++// <0=> Prioritized access ++// <1=> Round Robin ++ ++#ifndef USBD_CONFIG_DMASCHEDULER_MODE ++#define USBD_CONFIG_DMASCHEDULER_MODE 0 ++#endif ++ ++// USBD_CONFIG_DMASCHEDULER_ISO_BOOST - Give priority to isochronous transfers ++ ++ ++// This option gives priority to isochronous transfers. ++// Enabling it assures that isochronous transfers are always processed, ++// even if multiple other transfers are pending. ++// Isochronous endpoints are prioritized before the usbd_dma_scheduler_algorithm ++// function is called, so the option is independent of the algorithm chosen. ++ ++#ifndef USBD_CONFIG_DMASCHEDULER_ISO_BOOST ++#define USBD_CONFIG_DMASCHEDULER_ISO_BOOST 1 ++#endif ++ ++// USBD_CONFIG_ISO_IN_ZLP - Respond to an IN token on ISO IN endpoint with ZLP when no data is ready ++ ++ ++// If set, ISO IN endpoint will respond to an IN token with ZLP when no data is ready to be sent. ++// Else, there will be no response. ++ ++#ifndef USBD_CONFIG_ISO_IN_ZLP ++#define USBD_CONFIG_ISO_IN_ZLP 0 ++#endif ++ ++// ++ ++// ++//========================================================== ++ ++// nRF_Libraries ++ ++//========================================================== ++// APP_SCHEDULER_ENABLED - app_scheduler - Events scheduler ++//========================================================== ++#ifndef APP_SCHEDULER_ENABLED ++#define APP_SCHEDULER_ENABLED 1 ++#endif ++// APP_SCHEDULER_WITH_PAUSE - Enabling pause feature ++ ++ ++#ifndef APP_SCHEDULER_WITH_PAUSE ++#define APP_SCHEDULER_WITH_PAUSE 1 ++#endif ++ ++// APP_SCHEDULER_WITH_PROFILER - Enabling scheduler profiling ++ ++ ++#ifndef APP_SCHEDULER_WITH_PROFILER ++#define APP_SCHEDULER_WITH_PROFILER 1 ++#endif ++ ++// ++ ++// APP_TIMER_ENABLED - app_timer - Application timer functionality ++//========================================================== ++#ifndef APP_TIMER_ENABLED ++#define APP_TIMER_ENABLED 1 ++#endif ++// APP_TIMER_CONFIG_RTC_FREQUENCY - Configure RTC prescaler. ++ ++// <0=> 32768 Hz ++// <1=> 16384 Hz ++// <3=> 8192 Hz ++// <7=> 4096 Hz ++// <15=> 2048 Hz ++// <31=> 1024 Hz ++ ++#ifndef APP_TIMER_CONFIG_RTC_FREQUENCY ++#define APP_TIMER_CONFIG_RTC_FREQUENCY 0 ++#endif ++ ++// APP_TIMER_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef APP_TIMER_CONFIG_IRQ_PRIORITY ++#define APP_TIMER_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// APP_TIMER_CONFIG_OP_QUEUE_SIZE - Capacity of timer requests queue. ++// Size of the queue depends on how many timers are used ++// in the system, how often timers are started and overall ++// system latency. If queue size is too small app_timer calls ++// will fail. ++ ++#ifndef APP_TIMER_CONFIG_OP_QUEUE_SIZE ++#define APP_TIMER_CONFIG_OP_QUEUE_SIZE 10 ++#endif ++ ++// APP_TIMER_CONFIG_USE_SCHEDULER - Enable scheduling app_timer events to app_scheduler ++ ++ ++#ifndef APP_TIMER_CONFIG_USE_SCHEDULER ++#define APP_TIMER_CONFIG_USE_SCHEDULER 0 ++#endif ++ ++// APP_TIMER_KEEPS_RTC_ACTIVE - Enable RTC always on ++ ++ ++// If option is enabled RTC is kept running even if there is no active timers. ++// This option can be used when app_timer is used for timestamping. ++ ++#ifndef APP_TIMER_KEEPS_RTC_ACTIVE ++#define APP_TIMER_KEEPS_RTC_ACTIVE 0 ++#endif ++ ++// APP_TIMER_SAFE_WINDOW_MS - Maximum possible latency (in milliseconds) of handling app_timer event. ++// Maximum possible timeout that can be set is reduced by safe window. ++// Example: RTC frequency 16384 Hz, maximum possible timeout 1024 seconds - APP_TIMER_SAFE_WINDOW_MS. ++// Since RTC is not stopped when processor is halted in debugging session, this value ++// must cover it if debugging is needed. It is possible to halt processor for APP_TIMER_SAFE_WINDOW_MS ++// without corrupting app_timer behavior. ++ ++#ifndef APP_TIMER_SAFE_WINDOW_MS ++#define APP_TIMER_SAFE_WINDOW_MS 300000 ++#endif ++ ++// App Timer Legacy configuration - Legacy configuration. ++ ++//========================================================== ++// APP_TIMER_WITH_PROFILER - Enable app_timer profiling ++ ++ ++#ifndef APP_TIMER_WITH_PROFILER ++#define APP_TIMER_WITH_PROFILER 0 ++#endif ++ ++// APP_TIMER_CONFIG_SWI_NUMBER - Configure SWI instance used. ++ ++ ++#ifndef APP_TIMER_CONFIG_SWI_NUMBER ++#define APP_TIMER_CONFIG_SWI_NUMBER 0 ++#endif ++ ++// ++//========================================================== ++ ++// ++ ++// APP_USBD_ENABLED - app_usbd - USB Device library ++//========================================================== ++#ifndef APP_USBD_ENABLED ++#define APP_USBD_ENABLED 1 ++#endif ++// APP_USBD_VID - Vendor ID. ++ ++// Note: This value is not editable in Configuration Wizard. ++// Vendor ID ordered from USB IF: http://www.usb.org/developers/vendor/ ++#ifndef APP_USBD_VID ++#define APP_USBD_VID 0x1915 ++#endif ++ ++// APP_USBD_PID - Product ID. ++ ++// Note: This value is not editable in Configuration Wizard. ++// Selected Product ID ++#ifndef APP_USBD_PID ++#define APP_USBD_PID 0xC00A ++#endif ++ ++// APP_USBD_DEVICE_VER_MAJOR - Device version, major part. <0-99> ++ ++ ++// Device version, will be converted automatically to BCD notation. Use just decimal values. ++ ++#ifndef APP_USBD_DEVICE_VER_MAJOR ++#define APP_USBD_DEVICE_VER_MAJOR 1 ++#endif ++ ++// APP_USBD_DEVICE_VER_MINOR - Device version, minor part. <0-99> ++ ++ ++// Device version, will be converted automatically to BCD notation. Use just decimal values. ++ ++#ifndef APP_USBD_DEVICE_VER_MINOR ++#define APP_USBD_DEVICE_VER_MINOR 0 ++#endif ++ ++// APP_USBD_CONFIG_SELF_POWERED - Self-powered device, as opposed to bus-powered. ++ ++ ++#ifndef APP_USBD_CONFIG_SELF_POWERED ++#define APP_USBD_CONFIG_SELF_POWERED 1 ++#endif ++ ++// APP_USBD_CONFIG_MAX_POWER - MaxPower field in configuration descriptor in milliamps. <0-500> ++ ++ ++#ifndef APP_USBD_CONFIG_MAX_POWER ++#define APP_USBD_CONFIG_MAX_POWER 500 ++#endif ++ ++// APP_USBD_CONFIG_POWER_EVENTS_PROCESS - Process power events. ++ ++ ++// Enable processing power events in USB event handler. ++ ++#ifndef APP_USBD_CONFIG_POWER_EVENTS_PROCESS ++#define APP_USBD_CONFIG_POWER_EVENTS_PROCESS 1 ++#endif ++ ++// APP_USBD_CONFIG_EVENT_QUEUE_ENABLE - Enable event queue. ++ ++// This is the default configuration when all the events are placed into internal queue. ++// Disable it when an external queue is used like app_scheduler or if you wish to process all events inside interrupts. ++// Processing all events from the interrupt level adds requirement not to call any functions that modifies the USBD library state from the context higher than USB interrupt context. ++// Functions that modify USBD state are functions for sleep, wakeup, start, stop, enable, and disable. ++//========================================================== ++#ifndef APP_USBD_CONFIG_EVENT_QUEUE_ENABLE ++#define APP_USBD_CONFIG_EVENT_QUEUE_ENABLE 1 ++#endif ++// APP_USBD_CONFIG_EVENT_QUEUE_SIZE - The size of the event queue. <16-64> ++ ++ ++// The size of the queue for the events that would be processed in the main loop. ++ ++#ifndef APP_USBD_CONFIG_EVENT_QUEUE_SIZE ++#define APP_USBD_CONFIG_EVENT_QUEUE_SIZE 32 ++#endif ++ ++// APP_USBD_CONFIG_SOF_HANDLING_MODE - Change SOF events handling mode. ++ ++ ++// Normal queue - SOF events are pushed normally into the event queue. ++// Compress queue - SOF events are counted and binded with other events or executed when the queue is empty. ++// This prevents the queue from filling up with SOF events. ++// Interrupt - SOF events are processed in interrupt. ++// <0=> Normal queue ++// <1=> Compress queue ++// <2=> Interrupt ++ ++#ifndef APP_USBD_CONFIG_SOF_HANDLING_MODE ++#define APP_USBD_CONFIG_SOF_HANDLING_MODE 1 ++#endif ++ ++// ++ ++// APP_USBD_CONFIG_SOF_TIMESTAMP_PROVIDE - Provide a function that generates timestamps for logs based on the current SOF. ++ ++ ++// The function app_usbd_sof_timestamp_get is implemented if the logger is enabled. ++// Use it when initializing the logger. ++// SOF processing is always enabled when this configuration parameter is active. ++// Note: This option is configured outside of APP_USBD_CONFIG_LOG_ENABLED. ++// This means that it works even if the logging in this very module is disabled. ++ ++#ifndef APP_USBD_CONFIG_SOF_TIMESTAMP_PROVIDE ++#define APP_USBD_CONFIG_SOF_TIMESTAMP_PROVIDE 0 ++#endif ++ ++// APP_USBD_CONFIG_DESC_STRING_SIZE - Maximum size of the NULL-terminated string of the string descriptor. <31-254> ++ ++ ++// 31 characters can be stored in the internal USB buffer used for transfers. ++// Any value higher than 31 creates an additional buffer just for descriptor strings. ++ ++#ifndef APP_USBD_CONFIG_DESC_STRING_SIZE ++#define APP_USBD_CONFIG_DESC_STRING_SIZE 31 ++#endif ++ ++// APP_USBD_CONFIG_DESC_STRING_UTF_ENABLED - Enable UTF8 conversion. ++ ++ ++// Enable UTF8-encoded characters. In normal processing, only ASCII characters are available. ++ ++#ifndef APP_USBD_CONFIG_DESC_STRING_UTF_ENABLED ++#define APP_USBD_CONFIG_DESC_STRING_UTF_ENABLED 0 ++#endif ++ ++// APP_USBD_STRINGS_LANGIDS - Supported languages identifiers. ++ ++// Note: This value is not editable in Configuration Wizard. ++// Comma-separated list of supported languages. ++#ifndef APP_USBD_STRINGS_LANGIDS ++#define APP_USBD_STRINGS_LANGIDS APP_USBD_LANG_AND_SUBLANG(APP_USBD_LANG_ENGLISH, APP_USBD_SUBLANG_ENGLISH_US) ++#endif ++ ++// APP_USBD_STRING_ID_MANUFACTURER - Define manufacturer string ID. ++ ++// Setting ID to 0 disables the string. ++//========================================================== ++#ifndef APP_USBD_STRING_ID_MANUFACTURER ++#define APP_USBD_STRING_ID_MANUFACTURER 1 ++#endif ++// APP_USBD_STRINGS_MANUFACTURER_EXTERN - Define whether @ref APP_USBD_STRINGS_MANUFACTURER is created by macro or declared as a global variable. ++ ++ ++#ifndef APP_USBD_STRINGS_MANUFACTURER_EXTERN ++#define APP_USBD_STRINGS_MANUFACTURER_EXTERN 0 ++#endif ++ ++// APP_USBD_STRINGS_MANUFACTURER - String descriptor for the manufacturer name. ++ ++// Note: This value is not editable in Configuration Wizard. ++// Comma-separated list of manufacturer names for each defined language. ++// Use @ref APP_USBD_STRING_DESC macro to create string descriptor from a NULL-terminated string. ++// Use @ref APP_USBD_STRING_RAW8_DESC macro to create string descriptor from comma-separated uint8_t values. ++// Use @ref APP_USBD_STRING_RAW16_DESC macro to create string descriptor from comma-separated uint16_t values. ++// Alternatively, configure the macro to point to any internal variable pointer that already contains the descriptor. ++// Setting string to NULL disables that string. ++// The order of manufacturer names must be the same like in @ref APP_USBD_STRINGS_LANGIDS. ++#ifndef APP_USBD_STRINGS_MANUFACTURER ++#define APP_USBD_STRINGS_MANUFACTURER APP_USBD_STRING_DESC("Nordic Semiconductor") ++#endif ++ ++// ++ ++// APP_USBD_STRING_ID_PRODUCT - Define product string ID. ++ ++// Setting ID to 0 disables the string. ++//========================================================== ++#ifndef APP_USBD_STRING_ID_PRODUCT ++#define APP_USBD_STRING_ID_PRODUCT 2 ++#endif ++// APP_USBD_STRINGS_PRODUCT_EXTERN - Define whether @ref APP_USBD_STRINGS_PRODUCT is created by macro or declared as a global variable. ++ ++ ++#ifndef APP_USBD_STRINGS_PRODUCT_EXTERN ++#define APP_USBD_STRINGS_PRODUCT_EXTERN 0 ++#endif ++ ++// APP_USBD_STRINGS_PRODUCT - String descriptor for the product name. ++ ++// Note: This value is not editable in Configuration Wizard. ++// List of product names that is defined the same way like in @ref APP_USBD_STRINGS_MANUFACTURER. ++#ifndef APP_USBD_STRINGS_PRODUCT ++#define APP_USBD_STRINGS_PRODUCT APP_USBD_STRING_DESC("nRF52 Connectivity") ++#endif ++ ++// ++ ++// APP_USBD_STRING_ID_SERIAL - Define serial number string ID. ++ ++// Setting ID to 0 disables the string. ++//========================================================== ++#ifndef APP_USBD_STRING_ID_SERIAL ++#define APP_USBD_STRING_ID_SERIAL 3 ++#endif ++// APP_USBD_STRING_SERIAL_EXTERN - Define whether @ref APP_USBD_STRING_SERIAL is created by macro or declared as a global variable. ++ ++ ++#ifndef APP_USBD_STRING_SERIAL_EXTERN ++#define APP_USBD_STRING_SERIAL_EXTERN 1 ++#endif ++ ++// APP_USBD_STRING_SERIAL - String descriptor for the serial number. ++ ++// Note: This value is not editable in Configuration Wizard. ++// Serial number that is defined the same way like in @ref APP_USBD_STRINGS_MANUFACTURER. ++#ifndef APP_USBD_STRING_SERIAL ++#define APP_USBD_STRING_SERIAL g_extern_serial_number ++#endif ++ ++// ++ ++// APP_USBD_STRING_ID_CONFIGURATION - Define configuration string ID. ++ ++// Setting ID to 0 disables the string. ++//========================================================== ++#ifndef APP_USBD_STRING_ID_CONFIGURATION ++#define APP_USBD_STRING_ID_CONFIGURATION 4 ++#endif ++// APP_USBD_STRING_CONFIGURATION_EXTERN - Define whether @ref APP_USBD_STRINGS_CONFIGURATION is created by macro or declared as global variable. ++ ++ ++#ifndef APP_USBD_STRING_CONFIGURATION_EXTERN ++#define APP_USBD_STRING_CONFIGURATION_EXTERN 0 ++#endif ++ ++// APP_USBD_STRINGS_CONFIGURATION - String descriptor for the device configuration. ++ ++// Note: This value is not editable in Configuration Wizard. ++// Configuration string that is defined the same way like in @ref APP_USBD_STRINGS_MANUFACTURER. ++#ifndef APP_USBD_STRINGS_CONFIGURATION ++#define APP_USBD_STRINGS_CONFIGURATION APP_USBD_STRING_DESC("Default configuration") ++#endif ++ ++// ++ ++// APP_USBD_STRINGS_USER - Default values for user strings. ++ ++// Note: This value is not editable in Configuration Wizard. ++// This value stores all application specific user strings with the default initialization. ++// The setup is done by X-macros. ++// Expected macro parameters: ++// @code ++// X(mnemonic, [=str_idx], ...) ++// @endcode ++// - @c mnemonic: Mnemonic of the string descriptor that would be added to ++// @ref app_usbd_string_desc_idx_t enumerator. ++// - @c str_idx : String index value, can be set or left empty. ++// For example, WinUSB driver requires descriptor to be present on 0xEE index. ++// Then use X(USBD_STRING_WINUSB, =0xEE, (APP_USBD_STRING_DESC(...))) ++// - @c ... : List of string descriptors for each defined language. ++#ifndef APP_USBD_STRINGS_USER ++#define APP_USBD_STRINGS_USER X(APP_USER_1, , APP_USBD_STRING_DESC("User 1")) ++#endif ++ ++// ++ ++// APP_USBD_NRF_DFU_TRIGGER_ENABLED - app_usbd_nrf_dfu_trigger - USBD Nordic DFU Trigger class ++ ++ ++#ifndef APP_USBD_NRF_DFU_TRIGGER_ENABLED ++#define APP_USBD_NRF_DFU_TRIGGER_ENABLED 1 ++#endif ++ ++// CRC16_ENABLED - crc16 - CRC16 calculation routines ++ ++ ++#ifndef CRC16_ENABLED ++#define CRC16_ENABLED 1 ++#endif ++ ++// NRF_BALLOC_ENABLED - nrf_balloc - Block allocator module ++//========================================================== ++#ifndef NRF_BALLOC_ENABLED ++#define NRF_BALLOC_ENABLED 1 ++#endif ++// NRF_BALLOC_CONFIG_DEBUG_ENABLED - Enables debug mode in the module. ++//========================================================== ++#ifndef NRF_BALLOC_CONFIG_DEBUG_ENABLED ++#define NRF_BALLOC_CONFIG_DEBUG_ENABLED 0 ++#endif ++// NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS - Number of words used as head guard. <0-255> ++ ++ ++#ifndef NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS ++#define NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS 1 ++#endif ++ ++// NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS - Number of words used as tail guard. <0-255> ++ ++ ++#ifndef NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS ++#define NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS 1 ++#endif ++ ++// NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED - Enables basic checks in this module. ++ ++ ++#ifndef NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED ++#define NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED 0 ++#endif ++ ++// NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED - Enables double memory free check in this module. ++ ++ ++#ifndef NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED ++#define NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED 0 ++#endif ++ ++// NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED - Enables free memory corruption check in this module. ++ ++ ++#ifndef NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED ++#define NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED 0 ++#endif ++ ++// NRF_BALLOC_CLI_CMDS - Enable CLI commands specific to the module ++ ++ ++#ifndef NRF_BALLOC_CLI_CMDS ++#define NRF_BALLOC_CLI_CMDS 0 ++#endif ++ ++// ++ ++// ++ ++// NRF_FPRINTF_ENABLED - nrf_fprintf - fprintf function. ++ ++ ++#ifndef NRF_FPRINTF_ENABLED ++#define NRF_FPRINTF_ENABLED 1 ++#endif ++ ++// NRF_MEMOBJ_ENABLED - nrf_memobj - Linked memory allocator module ++ ++ ++#ifndef NRF_MEMOBJ_ENABLED ++#define NRF_MEMOBJ_ENABLED 1 ++#endif ++ ++// NRF_QUEUE_ENABLED - nrf_queue - Queue module ++//========================================================== ++#ifndef NRF_QUEUE_ENABLED ++#define NRF_QUEUE_ENABLED 1 ++#endif ++// NRF_QUEUE_CLI_CMDS - Enable CLI commands specific to the module ++ ++ ++#ifndef NRF_QUEUE_CLI_CMDS ++#define NRF_QUEUE_CLI_CMDS 0 ++#endif ++ ++// ++ ++// NRF_SECTION_ITER_ENABLED - nrf_section_iter - Section iterator ++ ++ ++#ifndef NRF_SECTION_ITER_ENABLED ++#define NRF_SECTION_ITER_ENABLED 1 ++#endif ++ ++// NRF_STRERROR_ENABLED - nrf_strerror - Library for converting error code to string. ++ ++ ++#ifndef NRF_STRERROR_ENABLED ++#define NRF_STRERROR_ENABLED 1 ++#endif ++ ++// app_usbd_cdc_acm - USB CDC ACM class ++ ++//========================================================== ++// APP_USBD_CDC_ACM_ENABLED - Enabling USBD CDC ACM Class library ++ ++ ++#ifndef APP_USBD_CDC_ACM_ENABLED ++#define APP_USBD_CDC_ACM_ENABLED 1 ++#endif ++ ++// APP_USBD_CDC_ACM_ZLP_ON_EPSIZE_WRITE - Send ZLP on write with same size as endpoint ++ ++ ++// If enabled, CDC ACM class will automatically send a zero length packet after transfer which has the same size as endpoint. ++// This may limit throughput if a lot of binary data is sent, but in terminal mode operation it makes sure that the data is always displayed right after it is sent. ++ ++#ifndef APP_USBD_CDC_ACM_ZLP_ON_EPSIZE_WRITE ++#define APP_USBD_CDC_ACM_ZLP_ON_EPSIZE_WRITE 1 ++#endif ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++// nRF_Log ++ ++//========================================================== ++// NRF_LOG_BACKEND_RTT_ENABLED - nrf_log_backend_rtt - Log RTT backend ++//========================================================== ++#ifndef NRF_LOG_BACKEND_RTT_ENABLED ++#define NRF_LOG_BACKEND_RTT_ENABLED 0 ++#endif ++// NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE - Size of buffer for partially processed strings. ++// Size of the buffer is a trade-off between RAM usage and processing. ++// if buffer is smaller then strings will often be fragmented. ++// It is recommended to use size which will fit typical log and only the ++// longer one will be fragmented. ++ ++#ifndef NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE ++#define NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE 64 ++#endif ++ ++// NRF_LOG_BACKEND_RTT_TX_RETRY_DELAY_MS - Period before retrying writing to RTT ++#ifndef NRF_LOG_BACKEND_RTT_TX_RETRY_DELAY_MS ++#define NRF_LOG_BACKEND_RTT_TX_RETRY_DELAY_MS 1 ++#endif ++ ++// NRF_LOG_BACKEND_RTT_TX_RETRY_CNT - Writing to RTT retries. ++// If RTT fails to accept any new data after retries ++// module assumes that host is not active and on next ++// request it will perform only one write attempt. ++// On successful writing, module assumes that host is active ++// and scheme with retry is applied again. ++ ++#ifndef NRF_LOG_BACKEND_RTT_TX_RETRY_CNT ++#define NRF_LOG_BACKEND_RTT_TX_RETRY_CNT 3 ++#endif ++ ++// ++ ++// NRF_LOG_BACKEND_UART_ENABLED - nrf_log_backend_uart - Log UART backend ++//========================================================== ++#ifndef NRF_LOG_BACKEND_UART_ENABLED ++#define NRF_LOG_BACKEND_UART_ENABLED 0 ++#endif ++// NRF_LOG_BACKEND_UART_TX_PIN - UART TX pin ++#ifndef NRF_LOG_BACKEND_UART_TX_PIN ++#define NRF_LOG_BACKEND_UART_TX_PIN 6 ++#endif ++ ++// NRF_LOG_BACKEND_UART_BAUDRATE - Default Baudrate ++ ++// <323584=> 1200 baud ++// <643072=> 2400 baud ++// <1290240=> 4800 baud ++// <2576384=> 9600 baud ++// <3862528=> 14400 baud ++// <5152768=> 19200 baud ++// <7716864=> 28800 baud ++// <10289152=> 38400 baud ++// <15400960=> 57600 baud ++// <20615168=> 76800 baud ++// <30801920=> 115200 baud ++// <61865984=> 230400 baud ++// <67108864=> 250000 baud ++// <121634816=> 460800 baud ++// <251658240=> 921600 baud ++// <268435456=> 1000000 baud ++ ++#ifndef NRF_LOG_BACKEND_UART_BAUDRATE ++#define NRF_LOG_BACKEND_UART_BAUDRATE 30801920 ++#endif ++ ++// NRF_LOG_BACKEND_UART_TEMP_BUFFER_SIZE - Size of buffer for partially processed strings. ++// Size of the buffer is a trade-off between RAM usage and processing. ++// if buffer is smaller then strings will often be fragmented. ++// It is recommended to use size which will fit typical log and only the ++// longer one will be fragmented. ++ ++#ifndef NRF_LOG_BACKEND_UART_TEMP_BUFFER_SIZE ++#define NRF_LOG_BACKEND_UART_TEMP_BUFFER_SIZE 64 ++#endif ++ ++// ++ ++// NRF_LOG_ENABLED - nrf_log - Logger ++//========================================================== ++#ifndef NRF_LOG_ENABLED ++#define NRF_LOG_ENABLED 0 ++#endif ++// Log message pool - Configuration of log message pool ++ ++//========================================================== ++// NRF_LOG_MSGPOOL_ELEMENT_SIZE - Size of a single element in the pool of memory objects. ++// If a small value is set, then performance of logs processing ++// is degraded because data is fragmented. Bigger value impacts ++// RAM memory utilization. The size is set to fit a message with ++// a timestamp and up to 2 arguments in a single memory object. ++ ++#ifndef NRF_LOG_MSGPOOL_ELEMENT_SIZE ++#define NRF_LOG_MSGPOOL_ELEMENT_SIZE 20 ++#endif ++ ++// NRF_LOG_MSGPOOL_ELEMENT_COUNT - Number of elements in the pool of memory objects ++// If a small value is set, then it may lead to a deadlock ++// in certain cases if backend has high latency and holds ++// multiple messages for long time. Bigger value impacts ++// RAM memory usage. ++ ++#ifndef NRF_LOG_MSGPOOL_ELEMENT_COUNT ++#define NRF_LOG_MSGPOOL_ELEMENT_COUNT 8 ++#endif ++ ++// ++//========================================================== ++ ++// NRF_LOG_ALLOW_OVERFLOW - Configures behavior when circular buffer is full. ++ ++ ++// If set then oldest logs are overwritten. Otherwise a ++// marker is injected informing about overflow. ++ ++#ifndef NRF_LOG_ALLOW_OVERFLOW ++#define NRF_LOG_ALLOW_OVERFLOW 1 ++#endif ++ ++// NRF_LOG_BUFSIZE - Size of the buffer for storing logs (in bytes). ++ ++ ++// Must be power of 2 and multiple of 4. ++// If NRF_LOG_DEFERRED = 0 then buffer size can be reduced to minimum. ++// <128=> 128 ++// <256=> 256 ++// <512=> 512 ++// <1024=> 1024 ++// <2048=> 2048 ++// <4096=> 4096 ++// <8192=> 8192 ++// <16384=> 16384 ++ ++#ifndef NRF_LOG_BUFSIZE ++#define NRF_LOG_BUFSIZE 1024 ++#endif ++ ++// NRF_LOG_CLI_CMDS - Enable CLI commands for the module. ++ ++ ++#ifndef NRF_LOG_CLI_CMDS ++#define NRF_LOG_CLI_CMDS 0 ++#endif ++ ++// NRF_LOG_DEFAULT_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_LOG_DEFAULT_LEVEL ++#define NRF_LOG_DEFAULT_LEVEL 3 ++#endif ++ ++// NRF_LOG_DEFERRED - Enable deffered logger. ++ ++ ++// Log data is buffered and can be processed in idle. ++ ++#ifndef NRF_LOG_DEFERRED ++#define NRF_LOG_DEFERRED 1 ++#endif ++ ++// NRF_LOG_FILTERS_ENABLED - Enable dynamic filtering of logs. ++ ++ ++#ifndef NRF_LOG_FILTERS_ENABLED ++#define NRF_LOG_FILTERS_ENABLED 0 ++#endif ++ ++// NRF_LOG_STR_PUSH_BUFFER_SIZE - Size of the buffer dedicated for strings stored using @ref NRF_LOG_PUSH. ++ ++// <16=> 16 ++// <32=> 32 ++// <64=> 64 ++// <128=> 128 ++// <256=> 256 ++// <512=> 512 ++// <1024=> 1024 ++ ++#ifndef NRF_LOG_STR_PUSH_BUFFER_SIZE ++#define NRF_LOG_STR_PUSH_BUFFER_SIZE 128 ++#endif ++ ++// NRF_LOG_STR_PUSH_BUFFER_SIZE - Size of the buffer dedicated for strings stored using @ref NRF_LOG_PUSH. ++ ++// <16=> 16 ++// <32=> 32 ++// <64=> 64 ++// <128=> 128 ++// <256=> 256 ++// <512=> 512 ++// <1024=> 1024 ++ ++#ifndef NRF_LOG_STR_PUSH_BUFFER_SIZE ++#define NRF_LOG_STR_PUSH_BUFFER_SIZE 128 ++#endif ++ ++// NRF_LOG_USES_COLORS - If enabled then ANSI escape code for colors is prefixed to every string ++//========================================================== ++#ifndef NRF_LOG_USES_COLORS ++#define NRF_LOG_USES_COLORS 0 ++#endif ++// NRF_LOG_COLOR_DEFAULT - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_LOG_COLOR_DEFAULT ++#define NRF_LOG_COLOR_DEFAULT 0 ++#endif ++ ++// NRF_LOG_ERROR_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_LOG_ERROR_COLOR ++#define NRF_LOG_ERROR_COLOR 2 ++#endif ++ ++// NRF_LOG_WARNING_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_LOG_WARNING_COLOR ++#define NRF_LOG_WARNING_COLOR 4 ++#endif ++ ++// ++ ++// NRF_LOG_USES_TIMESTAMP - Enable timestamping ++ ++// Function for getting the timestamp is provided by the user ++//========================================================== ++#ifndef NRF_LOG_USES_TIMESTAMP ++#define NRF_LOG_USES_TIMESTAMP 0 ++#endif ++// NRF_LOG_TIMESTAMP_DEFAULT_FREQUENCY - Default frequency of the timestamp (in Hz) or 0 to use app_timer frequency. ++#ifndef NRF_LOG_TIMESTAMP_DEFAULT_FREQUENCY ++#define NRF_LOG_TIMESTAMP_DEFAULT_FREQUENCY 0 ++#endif ++ ++// ++ ++// nrf_log module configuration ++ ++//========================================================== ++// nrf_log in nRF_Core ++ ++//========================================================== ++// NRF_MPU_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_MPU_CONFIG_LOG_ENABLED ++#define NRF_MPU_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_MPU_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_MPU_CONFIG_LOG_LEVEL ++#define NRF_MPU_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_MPU_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_MPU_CONFIG_INFO_COLOR ++#define NRF_MPU_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_MPU_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_MPU_CONFIG_DEBUG_COLOR ++#define NRF_MPU_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_STACK_GUARD_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_STACK_GUARD_CONFIG_LOG_ENABLED ++#define NRF_STACK_GUARD_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_STACK_GUARD_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_STACK_GUARD_CONFIG_LOG_LEVEL ++#define NRF_STACK_GUARD_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_STACK_GUARD_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_STACK_GUARD_CONFIG_INFO_COLOR ++#define NRF_STACK_GUARD_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_STACK_GUARD_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_STACK_GUARD_CONFIG_DEBUG_COLOR ++#define NRF_STACK_GUARD_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// TASK_MANAGER_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef TASK_MANAGER_CONFIG_LOG_ENABLED ++#define TASK_MANAGER_CONFIG_LOG_ENABLED 0 ++#endif ++// TASK_MANAGER_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef TASK_MANAGER_CONFIG_LOG_LEVEL ++#define TASK_MANAGER_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// TASK_MANAGER_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TASK_MANAGER_CONFIG_INFO_COLOR ++#define TASK_MANAGER_CONFIG_INFO_COLOR 0 ++#endif ++ ++// TASK_MANAGER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TASK_MANAGER_CONFIG_DEBUG_COLOR ++#define TASK_MANAGER_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++//========================================================== ++ ++// nrf_log in nRF_Drivers ++ ++//========================================================== ++// CLOCK_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef CLOCK_CONFIG_LOG_ENABLED ++#define CLOCK_CONFIG_LOG_ENABLED 0 ++#endif ++// CLOCK_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef CLOCK_CONFIG_LOG_LEVEL ++#define CLOCK_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// CLOCK_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef CLOCK_CONFIG_INFO_COLOR ++#define CLOCK_CONFIG_INFO_COLOR 0 ++#endif ++ ++// CLOCK_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef CLOCK_CONFIG_DEBUG_COLOR ++#define CLOCK_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// COMP_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef COMP_CONFIG_LOG_ENABLED ++#define COMP_CONFIG_LOG_ENABLED 0 ++#endif ++// COMP_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef COMP_CONFIG_LOG_LEVEL ++#define COMP_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// COMP_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef COMP_CONFIG_INFO_COLOR ++#define COMP_CONFIG_INFO_COLOR 0 ++#endif ++ ++// COMP_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef COMP_CONFIG_DEBUG_COLOR ++#define COMP_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// GPIOTE_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef GPIOTE_CONFIG_LOG_ENABLED ++#define GPIOTE_CONFIG_LOG_ENABLED 0 ++#endif ++// GPIOTE_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef GPIOTE_CONFIG_LOG_LEVEL ++#define GPIOTE_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// GPIOTE_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef GPIOTE_CONFIG_INFO_COLOR ++#define GPIOTE_CONFIG_INFO_COLOR 0 ++#endif ++ ++// GPIOTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef GPIOTE_CONFIG_DEBUG_COLOR ++#define GPIOTE_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// LPCOMP_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef LPCOMP_CONFIG_LOG_ENABLED ++#define LPCOMP_CONFIG_LOG_ENABLED 0 ++#endif ++// LPCOMP_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef LPCOMP_CONFIG_LOG_LEVEL ++#define LPCOMP_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// LPCOMP_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef LPCOMP_CONFIG_INFO_COLOR ++#define LPCOMP_CONFIG_INFO_COLOR 0 ++#endif ++ ++// LPCOMP_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef LPCOMP_CONFIG_DEBUG_COLOR ++#define LPCOMP_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// MAX3421E_HOST_CONFIG_LOG_ENABLED - Enable logging in the module ++//========================================================== ++#ifndef MAX3421E_HOST_CONFIG_LOG_ENABLED ++#define MAX3421E_HOST_CONFIG_LOG_ENABLED 0 ++#endif ++// MAX3421E_HOST_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef MAX3421E_HOST_CONFIG_LOG_LEVEL ++#define MAX3421E_HOST_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// MAX3421E_HOST_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef MAX3421E_HOST_CONFIG_INFO_COLOR ++#define MAX3421E_HOST_CONFIG_INFO_COLOR 0 ++#endif ++ ++// MAX3421E_HOST_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef MAX3421E_HOST_CONFIG_DEBUG_COLOR ++#define MAX3421E_HOST_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// PDM_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef PDM_CONFIG_LOG_ENABLED ++#define PDM_CONFIG_LOG_ENABLED 0 ++#endif ++// PDM_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef PDM_CONFIG_LOG_LEVEL ++#define PDM_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// PDM_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PDM_CONFIG_INFO_COLOR ++#define PDM_CONFIG_INFO_COLOR 0 ++#endif ++ ++// PDM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PDM_CONFIG_DEBUG_COLOR ++#define PDM_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// PPI_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef PPI_CONFIG_LOG_ENABLED ++#define PPI_CONFIG_LOG_ENABLED 0 ++#endif ++// PPI_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef PPI_CONFIG_LOG_LEVEL ++#define PPI_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// PPI_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PPI_CONFIG_INFO_COLOR ++#define PPI_CONFIG_INFO_COLOR 0 ++#endif ++ ++// PPI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PPI_CONFIG_DEBUG_COLOR ++#define PPI_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// PWM_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef PWM_CONFIG_LOG_ENABLED ++#define PWM_CONFIG_LOG_ENABLED 0 ++#endif ++// PWM_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef PWM_CONFIG_LOG_LEVEL ++#define PWM_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// PWM_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PWM_CONFIG_INFO_COLOR ++#define PWM_CONFIG_INFO_COLOR 0 ++#endif ++ ++// PWM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PWM_CONFIG_DEBUG_COLOR ++#define PWM_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// QDEC_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef QDEC_CONFIG_LOG_ENABLED ++#define QDEC_CONFIG_LOG_ENABLED 0 ++#endif ++// QDEC_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef QDEC_CONFIG_LOG_LEVEL ++#define QDEC_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// QDEC_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef QDEC_CONFIG_INFO_COLOR ++#define QDEC_CONFIG_INFO_COLOR 0 ++#endif ++ ++// QDEC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef QDEC_CONFIG_DEBUG_COLOR ++#define QDEC_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// RNG_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef RNG_CONFIG_LOG_ENABLED ++#define RNG_CONFIG_LOG_ENABLED 0 ++#endif ++// RNG_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef RNG_CONFIG_LOG_LEVEL ++#define RNG_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// RNG_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef RNG_CONFIG_INFO_COLOR ++#define RNG_CONFIG_INFO_COLOR 0 ++#endif ++ ++// RNG_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef RNG_CONFIG_DEBUG_COLOR ++#define RNG_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED - Enables logging of random numbers. ++ ++ ++#ifndef RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED ++#define RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED 0 ++#endif ++ ++// ++ ++// RTC_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef RTC_CONFIG_LOG_ENABLED ++#define RTC_CONFIG_LOG_ENABLED 0 ++#endif ++// RTC_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef RTC_CONFIG_LOG_LEVEL ++#define RTC_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// RTC_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef RTC_CONFIG_INFO_COLOR ++#define RTC_CONFIG_INFO_COLOR 0 ++#endif ++ ++// RTC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef RTC_CONFIG_DEBUG_COLOR ++#define RTC_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// SAADC_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef SAADC_CONFIG_LOG_ENABLED ++#define SAADC_CONFIG_LOG_ENABLED 0 ++#endif ++// SAADC_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef SAADC_CONFIG_LOG_LEVEL ++#define SAADC_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// SAADC_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SAADC_CONFIG_INFO_COLOR ++#define SAADC_CONFIG_INFO_COLOR 0 ++#endif ++ ++// SAADC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SAADC_CONFIG_DEBUG_COLOR ++#define SAADC_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// SPIS_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef SPIS_CONFIG_LOG_ENABLED ++#define SPIS_CONFIG_LOG_ENABLED 0 ++#endif ++// SPIS_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef SPIS_CONFIG_LOG_LEVEL ++#define SPIS_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// SPIS_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SPIS_CONFIG_INFO_COLOR ++#define SPIS_CONFIG_INFO_COLOR 0 ++#endif ++ ++// SPIS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SPIS_CONFIG_DEBUG_COLOR ++#define SPIS_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// SPI_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef SPI_CONFIG_LOG_ENABLED ++#define SPI_CONFIG_LOG_ENABLED 0 ++#endif ++// SPI_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef SPI_CONFIG_LOG_LEVEL ++#define SPI_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// SPI_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SPI_CONFIG_INFO_COLOR ++#define SPI_CONFIG_INFO_COLOR 0 ++#endif ++ ++// SPI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SPI_CONFIG_DEBUG_COLOR ++#define SPI_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// TIMER_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef TIMER_CONFIG_LOG_ENABLED ++#define TIMER_CONFIG_LOG_ENABLED 0 ++#endif ++// TIMER_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef TIMER_CONFIG_LOG_LEVEL ++#define TIMER_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// TIMER_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TIMER_CONFIG_INFO_COLOR ++#define TIMER_CONFIG_INFO_COLOR 0 ++#endif ++ ++// TIMER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TIMER_CONFIG_DEBUG_COLOR ++#define TIMER_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// TWIS_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef TWIS_CONFIG_LOG_ENABLED ++#define TWIS_CONFIG_LOG_ENABLED 0 ++#endif ++// TWIS_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef TWIS_CONFIG_LOG_LEVEL ++#define TWIS_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// TWIS_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TWIS_CONFIG_INFO_COLOR ++#define TWIS_CONFIG_INFO_COLOR 0 ++#endif ++ ++// TWIS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TWIS_CONFIG_DEBUG_COLOR ++#define TWIS_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// TWI_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef TWI_CONFIG_LOG_ENABLED ++#define TWI_CONFIG_LOG_ENABLED 0 ++#endif ++// TWI_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef TWI_CONFIG_LOG_LEVEL ++#define TWI_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// TWI_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TWI_CONFIG_INFO_COLOR ++#define TWI_CONFIG_INFO_COLOR 0 ++#endif ++ ++// TWI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TWI_CONFIG_DEBUG_COLOR ++#define TWI_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// UART_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef UART_CONFIG_LOG_ENABLED ++#define UART_CONFIG_LOG_ENABLED 0 ++#endif ++// UART_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef UART_CONFIG_LOG_LEVEL ++#define UART_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// UART_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef UART_CONFIG_INFO_COLOR ++#define UART_CONFIG_INFO_COLOR 0 ++#endif ++ ++// UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef UART_CONFIG_DEBUG_COLOR ++#define UART_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// USBD_CONFIG_LOG_ENABLED - Enable logging in the module ++//========================================================== ++#ifndef USBD_CONFIG_LOG_ENABLED ++#define USBD_CONFIG_LOG_ENABLED 0 ++#endif ++// USBD_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef USBD_CONFIG_LOG_LEVEL ++#define USBD_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// USBD_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef USBD_CONFIG_INFO_COLOR ++#define USBD_CONFIG_INFO_COLOR 0 ++#endif ++ ++// USBD_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef USBD_CONFIG_DEBUG_COLOR ++#define USBD_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// WDT_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef WDT_CONFIG_LOG_ENABLED ++#define WDT_CONFIG_LOG_ENABLED 0 ++#endif ++// WDT_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef WDT_CONFIG_LOG_LEVEL ++#define WDT_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// WDT_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef WDT_CONFIG_INFO_COLOR ++#define WDT_CONFIG_INFO_COLOR 0 ++#endif ++ ++// WDT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef WDT_CONFIG_DEBUG_COLOR ++#define WDT_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++//========================================================== ++ ++// nrf_log in nRF_Libraries ++ ++//========================================================== ++// APP_TIMER_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef APP_TIMER_CONFIG_LOG_ENABLED ++#define APP_TIMER_CONFIG_LOG_ENABLED 0 ++#endif ++// APP_TIMER_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_TIMER_CONFIG_LOG_LEVEL ++#define APP_TIMER_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// APP_TIMER_CONFIG_INITIAL_LOG_LEVEL - Initial severity level if dynamic filtering is enabled. ++ ++ ++// If module generates a lot of logs, initial log level can ++// be decreased to prevent flooding. Severity level can be ++// increased on instance basis. ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_TIMER_CONFIG_INITIAL_LOG_LEVEL ++#define APP_TIMER_CONFIG_INITIAL_LOG_LEVEL 3 ++#endif ++ ++// APP_TIMER_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_TIMER_CONFIG_INFO_COLOR ++#define APP_TIMER_CONFIG_INFO_COLOR 0 ++#endif ++ ++// APP_TIMER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_TIMER_CONFIG_DEBUG_COLOR ++#define APP_TIMER_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// APP_USBD_CDC_ACM_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef APP_USBD_CDC_ACM_CONFIG_LOG_ENABLED ++#define APP_USBD_CDC_ACM_CONFIG_LOG_ENABLED 0 ++#endif ++// APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL ++#define APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// APP_USBD_CDC_ACM_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_CDC_ACM_CONFIG_INFO_COLOR ++#define APP_USBD_CDC_ACM_CONFIG_INFO_COLOR 0 ++#endif ++ ++// APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR ++#define APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// APP_USBD_CONFIG_LOG_ENABLED - Enable logging in the module. ++//========================================================== ++#ifndef APP_USBD_CONFIG_LOG_ENABLED ++#define APP_USBD_CONFIG_LOG_ENABLED 0 ++#endif ++// APP_USBD_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_USBD_CONFIG_LOG_LEVEL ++#define APP_USBD_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// APP_USBD_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_CONFIG_INFO_COLOR ++#define APP_USBD_CONFIG_INFO_COLOR 0 ++#endif ++ ++// APP_USBD_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_CONFIG_DEBUG_COLOR ++#define APP_USBD_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// APP_USBD_DUMMY_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef APP_USBD_DUMMY_CONFIG_LOG_ENABLED ++#define APP_USBD_DUMMY_CONFIG_LOG_ENABLED 0 ++#endif ++// APP_USBD_DUMMY_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_USBD_DUMMY_CONFIG_LOG_LEVEL ++#define APP_USBD_DUMMY_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// APP_USBD_DUMMY_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_DUMMY_CONFIG_INFO_COLOR ++#define APP_USBD_DUMMY_CONFIG_INFO_COLOR 0 ++#endif ++ ++// APP_USBD_DUMMY_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_DUMMY_CONFIG_DEBUG_COLOR ++#define APP_USBD_DUMMY_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// APP_USBD_MSC_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef APP_USBD_MSC_CONFIG_LOG_ENABLED ++#define APP_USBD_MSC_CONFIG_LOG_ENABLED 0 ++#endif ++// APP_USBD_MSC_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_USBD_MSC_CONFIG_LOG_LEVEL ++#define APP_USBD_MSC_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// APP_USBD_MSC_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_MSC_CONFIG_INFO_COLOR ++#define APP_USBD_MSC_CONFIG_INFO_COLOR 0 ++#endif ++ ++// APP_USBD_MSC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_MSC_CONFIG_DEBUG_COLOR ++#define APP_USBD_MSC_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_ENABLED ++#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_ENABLED 0 ++#endif ++// APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_LEVEL ++#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// APP_USBD_NRF_DFU_TRIGGER_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_INFO_COLOR ++#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_INFO_COLOR 0 ++#endif ++ ++// APP_USBD_NRF_DFU_TRIGGER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_DEBUG_COLOR ++#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_ATFIFO_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_ATFIFO_CONFIG_LOG_ENABLED ++#define NRF_ATFIFO_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_ATFIFO_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_ATFIFO_CONFIG_LOG_LEVEL ++#define NRF_ATFIFO_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_ATFIFO_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_ATFIFO_CONFIG_LOG_INIT_FILTER_LEVEL ++#define NRF_ATFIFO_CONFIG_LOG_INIT_FILTER_LEVEL 3 ++#endif ++ ++// NRF_ATFIFO_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_ATFIFO_CONFIG_INFO_COLOR ++#define NRF_ATFIFO_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_ATFIFO_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_ATFIFO_CONFIG_DEBUG_COLOR ++#define NRF_ATFIFO_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_BALLOC_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_BALLOC_CONFIG_LOG_ENABLED ++#define NRF_BALLOC_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_BALLOC_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BALLOC_CONFIG_LOG_LEVEL ++#define NRF_BALLOC_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_BALLOC_CONFIG_INITIAL_LOG_LEVEL - Initial severity level if dynamic filtering is enabled. ++ ++ ++// If module generates a lot of logs, initial log level can ++// be decreased to prevent flooding. Severity level can be ++// increased on instance basis. ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BALLOC_CONFIG_INITIAL_LOG_LEVEL ++#define NRF_BALLOC_CONFIG_INITIAL_LOG_LEVEL 3 ++#endif ++ ++// NRF_BALLOC_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BALLOC_CONFIG_INFO_COLOR ++#define NRF_BALLOC_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_BALLOC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BALLOC_CONFIG_DEBUG_COLOR ++#define NRF_BALLOC_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_ENABLED ++#define NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_LEVEL ++#define NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_INIT_FILTER_LEVEL ++#define NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_INIT_FILTER_LEVEL 3 ++#endif ++ ++// NRF_BLOCK_DEV_EMPTY_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BLOCK_DEV_EMPTY_CONFIG_INFO_COLOR ++#define NRF_BLOCK_DEV_EMPTY_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_BLOCK_DEV_EMPTY_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BLOCK_DEV_EMPTY_CONFIG_DEBUG_COLOR ++#define NRF_BLOCK_DEV_EMPTY_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_BLOCK_DEV_QSPI_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_BLOCK_DEV_QSPI_CONFIG_LOG_ENABLED ++#define NRF_BLOCK_DEV_QSPI_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_BLOCK_DEV_QSPI_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BLOCK_DEV_QSPI_CONFIG_LOG_LEVEL ++#define NRF_BLOCK_DEV_QSPI_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_BLOCK_DEV_QSPI_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BLOCK_DEV_QSPI_CONFIG_LOG_INIT_FILTER_LEVEL ++#define NRF_BLOCK_DEV_QSPI_CONFIG_LOG_INIT_FILTER_LEVEL 3 ++#endif ++ ++// NRF_BLOCK_DEV_QSPI_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BLOCK_DEV_QSPI_CONFIG_INFO_COLOR ++#define NRF_BLOCK_DEV_QSPI_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_BLOCK_DEV_QSPI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BLOCK_DEV_QSPI_CONFIG_DEBUG_COLOR ++#define NRF_BLOCK_DEV_QSPI_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_BLOCK_DEV_RAM_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_BLOCK_DEV_RAM_CONFIG_LOG_ENABLED ++#define NRF_BLOCK_DEV_RAM_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_BLOCK_DEV_RAM_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BLOCK_DEV_RAM_CONFIG_LOG_LEVEL ++#define NRF_BLOCK_DEV_RAM_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_BLOCK_DEV_RAM_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BLOCK_DEV_RAM_CONFIG_LOG_INIT_FILTER_LEVEL ++#define NRF_BLOCK_DEV_RAM_CONFIG_LOG_INIT_FILTER_LEVEL 3 ++#endif ++ ++// NRF_BLOCK_DEV_RAM_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BLOCK_DEV_RAM_CONFIG_INFO_COLOR ++#define NRF_BLOCK_DEV_RAM_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_BLOCK_DEV_RAM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BLOCK_DEV_RAM_CONFIG_DEBUG_COLOR ++#define NRF_BLOCK_DEV_RAM_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_CLI_BLE_UART_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_CLI_BLE_UART_CONFIG_LOG_ENABLED ++#define NRF_CLI_BLE_UART_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL ++#define NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_CLI_BLE_UART_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_CLI_BLE_UART_CONFIG_INFO_COLOR ++#define NRF_CLI_BLE_UART_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR ++#define NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_CLI_LIBUARTE_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_CLI_LIBUARTE_CONFIG_LOG_ENABLED ++#define NRF_CLI_LIBUARTE_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_CLI_LIBUARTE_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_CLI_LIBUARTE_CONFIG_LOG_LEVEL ++#define NRF_CLI_LIBUARTE_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_CLI_LIBUARTE_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_CLI_LIBUARTE_CONFIG_INFO_COLOR ++#define NRF_CLI_LIBUARTE_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_CLI_LIBUARTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_CLI_LIBUARTE_CONFIG_DEBUG_COLOR ++#define NRF_CLI_LIBUARTE_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_CLI_UART_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_CLI_UART_CONFIG_LOG_ENABLED ++#define NRF_CLI_UART_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_CLI_UART_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_CLI_UART_CONFIG_LOG_LEVEL ++#define NRF_CLI_UART_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_CLI_UART_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_CLI_UART_CONFIG_INFO_COLOR ++#define NRF_CLI_UART_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_CLI_UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_CLI_UART_CONFIG_DEBUG_COLOR ++#define NRF_CLI_UART_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_LIBUARTE_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_LIBUARTE_CONFIG_LOG_ENABLED ++#define NRF_LIBUARTE_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_LIBUARTE_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_LIBUARTE_CONFIG_LOG_LEVEL ++#define NRF_LIBUARTE_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_LIBUARTE_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_LIBUARTE_CONFIG_INFO_COLOR ++#define NRF_LIBUARTE_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_LIBUARTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_LIBUARTE_CONFIG_DEBUG_COLOR ++#define NRF_LIBUARTE_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_MEMOBJ_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_MEMOBJ_CONFIG_LOG_ENABLED ++#define NRF_MEMOBJ_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_MEMOBJ_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_MEMOBJ_CONFIG_LOG_LEVEL ++#define NRF_MEMOBJ_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_MEMOBJ_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_MEMOBJ_CONFIG_INFO_COLOR ++#define NRF_MEMOBJ_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_MEMOBJ_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_MEMOBJ_CONFIG_DEBUG_COLOR ++#define NRF_MEMOBJ_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_PWR_MGMT_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_PWR_MGMT_CONFIG_LOG_ENABLED ++#define NRF_PWR_MGMT_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_PWR_MGMT_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_PWR_MGMT_CONFIG_LOG_LEVEL ++#define NRF_PWR_MGMT_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_PWR_MGMT_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_PWR_MGMT_CONFIG_INFO_COLOR ++#define NRF_PWR_MGMT_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_PWR_MGMT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_PWR_MGMT_CONFIG_DEBUG_COLOR ++#define NRF_PWR_MGMT_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_QUEUE_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_QUEUE_CONFIG_LOG_ENABLED ++#define NRF_QUEUE_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_QUEUE_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_QUEUE_CONFIG_LOG_LEVEL ++#define NRF_QUEUE_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_QUEUE_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_QUEUE_CONFIG_LOG_INIT_FILTER_LEVEL ++#define NRF_QUEUE_CONFIG_LOG_INIT_FILTER_LEVEL 3 ++#endif ++ ++// NRF_QUEUE_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_QUEUE_CONFIG_INFO_COLOR ++#define NRF_QUEUE_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_QUEUE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_QUEUE_CONFIG_DEBUG_COLOR ++#define NRF_QUEUE_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_SDH_ANT_LOG_ENABLED - Enable logging in SoftDevice handler (ANT) module. ++//========================================================== ++#ifndef NRF_SDH_ANT_LOG_ENABLED ++#define NRF_SDH_ANT_LOG_ENABLED 0 ++#endif ++// NRF_SDH_ANT_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_SDH_ANT_LOG_LEVEL ++#define NRF_SDH_ANT_LOG_LEVEL 3 ++#endif ++ ++// NRF_SDH_ANT_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_ANT_INFO_COLOR ++#define NRF_SDH_ANT_INFO_COLOR 0 ++#endif ++ ++// NRF_SDH_ANT_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_ANT_DEBUG_COLOR ++#define NRF_SDH_ANT_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_SDH_BLE_LOG_ENABLED - Enable logging in SoftDevice handler (BLE) module. ++//========================================================== ++#ifndef NRF_SDH_BLE_LOG_ENABLED ++#define NRF_SDH_BLE_LOG_ENABLED 1 ++#endif ++// NRF_SDH_BLE_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_SDH_BLE_LOG_LEVEL ++#define NRF_SDH_BLE_LOG_LEVEL 3 ++#endif ++ ++// NRF_SDH_BLE_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_BLE_INFO_COLOR ++#define NRF_SDH_BLE_INFO_COLOR 0 ++#endif ++ ++// NRF_SDH_BLE_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_BLE_DEBUG_COLOR ++#define NRF_SDH_BLE_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_SDH_LOG_ENABLED - Enable logging in SoftDevice handler module. ++//========================================================== ++#ifndef NRF_SDH_LOG_ENABLED ++#define NRF_SDH_LOG_ENABLED 1 ++#endif ++// NRF_SDH_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_SDH_LOG_LEVEL ++#define NRF_SDH_LOG_LEVEL 3 ++#endif ++ ++// NRF_SDH_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_INFO_COLOR ++#define NRF_SDH_INFO_COLOR 0 ++#endif ++ ++// NRF_SDH_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_DEBUG_COLOR ++#define NRF_SDH_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_SDH_SOC_LOG_ENABLED - Enable logging in SoftDevice handler (SoC) module. ++//========================================================== ++#ifndef NRF_SDH_SOC_LOG_ENABLED ++#define NRF_SDH_SOC_LOG_ENABLED 1 ++#endif ++// NRF_SDH_SOC_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_SDH_SOC_LOG_LEVEL ++#define NRF_SDH_SOC_LOG_LEVEL 3 ++#endif ++ ++// NRF_SDH_SOC_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_SOC_INFO_COLOR ++#define NRF_SDH_SOC_INFO_COLOR 0 ++#endif ++ ++// NRF_SDH_SOC_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_SOC_DEBUG_COLOR ++#define NRF_SDH_SOC_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_SORTLIST_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_SORTLIST_CONFIG_LOG_ENABLED ++#define NRF_SORTLIST_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_SORTLIST_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_SORTLIST_CONFIG_LOG_LEVEL ++#define NRF_SORTLIST_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_SORTLIST_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SORTLIST_CONFIG_INFO_COLOR ++#define NRF_SORTLIST_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_SORTLIST_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SORTLIST_CONFIG_DEBUG_COLOR ++#define NRF_SORTLIST_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_TWI_SENSOR_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_TWI_SENSOR_CONFIG_LOG_ENABLED ++#define NRF_TWI_SENSOR_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_TWI_SENSOR_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_TWI_SENSOR_CONFIG_LOG_LEVEL ++#define NRF_TWI_SENSOR_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_TWI_SENSOR_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_TWI_SENSOR_CONFIG_INFO_COLOR ++#define NRF_TWI_SENSOR_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_TWI_SENSOR_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_TWI_SENSOR_CONFIG_DEBUG_COLOR ++#define NRF_TWI_SENSOR_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// PM_LOG_ENABLED - Enable logging in Peer Manager and its submodules. ++//========================================================== ++#ifndef PM_LOG_ENABLED ++#define PM_LOG_ENABLED 1 ++#endif ++// PM_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef PM_LOG_LEVEL ++#define PM_LOG_LEVEL 3 ++#endif ++ ++// PM_LOG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PM_LOG_INFO_COLOR ++#define PM_LOG_INFO_COLOR 0 ++#endif ++ ++// PM_LOG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PM_LOG_DEBUG_COLOR ++#define PM_LOG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++//========================================================== ++ ++// nrf_log in nRF_Serialization ++ ++//========================================================== ++// SER_HAL_TRANSPORT_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef SER_HAL_TRANSPORT_CONFIG_LOG_ENABLED ++#define SER_HAL_TRANSPORT_CONFIG_LOG_ENABLED 0 ++#endif ++// SER_HAL_TRANSPORT_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef SER_HAL_TRANSPORT_CONFIG_LOG_LEVEL ++#define SER_HAL_TRANSPORT_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// SER_HAL_TRANSPORT_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SER_HAL_TRANSPORT_CONFIG_INFO_COLOR ++#define SER_HAL_TRANSPORT_CONFIG_INFO_COLOR 0 ++#endif ++ ++// SER_HAL_TRANSPORT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SER_HAL_TRANSPORT_CONFIG_DEBUG_COLOR ++#define SER_HAL_TRANSPORT_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++// ++ ++// NRF_LOG_STR_FORMATTER_TIMESTAMP_FORMAT_ENABLED - nrf_log_str_formatter - Log string formatter ++ ++ ++#ifndef NRF_LOG_STR_FORMATTER_TIMESTAMP_FORMAT_ENABLED ++#define NRF_LOG_STR_FORMATTER_TIMESTAMP_FORMAT_ENABLED 1 ++#endif ++ ++// ++//========================================================== ++ ++// nRF_Segger_RTT ++ ++//========================================================== ++// segger_rtt - SEGGER RTT ++ ++//========================================================== ++// SEGGER_RTT_CONFIG_BUFFER_SIZE_UP - Size of upstream buffer. ++// Note that either @ref NRF_LOG_BACKEND_RTT_OUTPUT_BUFFER_SIZE ++// or this value is actually used. It depends on which one is bigger. ++ ++#ifndef SEGGER_RTT_CONFIG_BUFFER_SIZE_UP ++#define SEGGER_RTT_CONFIG_BUFFER_SIZE_UP 512 ++#endif ++ ++// SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS - Size of upstream buffer. ++#ifndef SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS ++#define SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS 2 ++#endif ++ ++// SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN - Size of upstream buffer. ++#ifndef SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN ++#define SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN 16 ++#endif ++ ++// SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS - Size of upstream buffer. ++#ifndef SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS ++#define SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS 2 ++#endif ++ ++// SEGGER_RTT_CONFIG_DEFAULT_MODE - RTT behavior if the buffer is full. ++ ++ ++// The following modes are supported: ++// - SKIP - Do not block, output nothing. ++// - TRIM - Do not block, output as much as fits. ++// - BLOCK - Wait until there is space in the buffer. ++// <0=> SKIP ++// <1=> TRIM ++// <2=> BLOCK_IF_FIFO_FULL ++ ++#ifndef SEGGER_RTT_CONFIG_DEFAULT_MODE ++#define SEGGER_RTT_CONFIG_DEFAULT_MODE 0 ++#endif ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++// nRF_SoftDevice ++ ++//========================================================== ++// NRF_SDH_BLE_ENABLED - nrf_sdh_ble - SoftDevice BLE event handler ++//========================================================== ++#ifndef NRF_SDH_BLE_ENABLED ++#define NRF_SDH_BLE_ENABLED 1 ++#endif ++// BLE Stack configuration - Stack configuration parameters ++ ++// The SoftDevice handler will configure the stack with these parameters when calling @ref nrf_sdh_ble_default_cfg_set. ++// Other libraries might depend on these values; keep them up-to-date even if you are not explicitely calling @ref nrf_sdh_ble_default_cfg_set. ++//========================================================== ++// NRF_SDH_BLE_GAP_DATA_LENGTH <27-251> ++ ++ ++// Requested BLE GAP data length to be negotiated. ++ ++#ifndef NRF_SDH_BLE_GAP_DATA_LENGTH ++#define NRF_SDH_BLE_GAP_DATA_LENGTH 27 ++#endif ++ ++// NRF_SDH_BLE_PERIPHERAL_LINK_COUNT - Maximum number of peripheral links. ++#ifndef NRF_SDH_BLE_PERIPHERAL_LINK_COUNT ++#define NRF_SDH_BLE_PERIPHERAL_LINK_COUNT 8 ++#endif ++ ++// NRF_SDH_BLE_CENTRAL_LINK_COUNT - Maximum number of central links. ++#ifndef NRF_SDH_BLE_CENTRAL_LINK_COUNT ++#define NRF_SDH_BLE_CENTRAL_LINK_COUNT 8 ++#endif ++ ++// NRF_SDH_BLE_TOTAL_LINK_COUNT - Total link count. ++// Maximum number of total concurrent connections using the default configuration. ++ ++#ifndef NRF_SDH_BLE_TOTAL_LINK_COUNT ++#define NRF_SDH_BLE_TOTAL_LINK_COUNT 1 ++#endif ++ ++// NRF_SDH_BLE_GAP_EVENT_LENGTH - GAP event length. ++// The time set aside for this connection on every connection interval in 1.25 ms units. ++ ++#ifndef NRF_SDH_BLE_GAP_EVENT_LENGTH ++#define NRF_SDH_BLE_GAP_EVENT_LENGTH 6 ++#endif ++ ++// NRF_SDH_BLE_GATT_MAX_MTU_SIZE - Static maximum MTU size. ++#ifndef NRF_SDH_BLE_GATT_MAX_MTU_SIZE ++#define NRF_SDH_BLE_GATT_MAX_MTU_SIZE 250 ++#endif ++ ++// NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE - Attribute Table size in bytes. The size must be a multiple of 4. ++#ifndef NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE ++#define NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE 1408 ++#endif ++ ++// NRF_SDH_BLE_VS_UUID_COUNT - The number of vendor-specific UUIDs. ++#ifndef NRF_SDH_BLE_VS_UUID_COUNT ++#define NRF_SDH_BLE_VS_UUID_COUNT 0 ++#endif ++ ++// NRF_SDH_BLE_SERVICE_CHANGED - Include the Service Changed characteristic in the Attribute Table. ++ ++ ++#ifndef NRF_SDH_BLE_SERVICE_CHANGED ++#define NRF_SDH_BLE_SERVICE_CHANGED 0 ++#endif ++ ++// ++//========================================================== ++ ++// BLE Observers - Observers and priority levels ++ ++//========================================================== ++// NRF_SDH_BLE_OBSERVER_PRIO_LEVELS - Total number of priority levels for BLE observers. ++// This setting configures the number of priority levels available for BLE event handlers. ++// The priority level of a handler determines the order in which it receives events, with respect to other handlers. ++ ++#ifndef NRF_SDH_BLE_OBSERVER_PRIO_LEVELS ++#define NRF_SDH_BLE_OBSERVER_PRIO_LEVELS 4 ++#endif ++ ++// BLE Observers priorities - Invididual priorities ++ ++//========================================================== ++// BLE_ADV_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Advertising module. ++ ++#ifndef BLE_ADV_BLE_OBSERVER_PRIO ++#define BLE_ADV_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// BLE_ANCS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Apple Notification Service Client. ++ ++#ifndef BLE_ANCS_C_BLE_OBSERVER_PRIO ++#define BLE_ANCS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_ANS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Alert Notification Service Client. ++ ++#ifndef BLE_ANS_C_BLE_OBSERVER_PRIO ++#define BLE_ANS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_BAS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Battery Service. ++ ++#ifndef BLE_BAS_BLE_OBSERVER_PRIO ++#define BLE_BAS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_BAS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Battery Service Client. ++ ++#ifndef BLE_BAS_C_BLE_OBSERVER_PRIO ++#define BLE_BAS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_BPS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Blood Pressure Service. ++ ++#ifndef BLE_BPS_BLE_OBSERVER_PRIO ++#define BLE_BPS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_CONN_PARAMS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Connection parameters module. ++ ++#ifndef BLE_CONN_PARAMS_BLE_OBSERVER_PRIO ++#define BLE_CONN_PARAMS_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// BLE_CONN_STATE_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Connection State module. ++ ++#ifndef BLE_CONN_STATE_BLE_OBSERVER_PRIO ++#define BLE_CONN_STATE_BLE_OBSERVER_PRIO 0 ++#endif ++ ++// BLE_CSCS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Cycling Speed and Cadence Service. ++ ++#ifndef BLE_CSCS_BLE_OBSERVER_PRIO ++#define BLE_CSCS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_CTS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Current Time Service Client. ++ ++#ifndef BLE_CTS_C_BLE_OBSERVER_PRIO ++#define BLE_CTS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_DB_DISC_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Database Discovery module. ++ ++#ifndef BLE_DB_DISC_BLE_OBSERVER_PRIO ++#define BLE_DB_DISC_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// BLE_DFU_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the DFU Service. ++ ++#ifndef BLE_DFU_BLE_OBSERVER_PRIO ++#define BLE_DFU_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_DIS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Device Information Client. ++ ++#ifndef BLE_DIS_C_BLE_OBSERVER_PRIO ++#define BLE_DIS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_GLS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Glucose Service. ++ ++#ifndef BLE_GLS_BLE_OBSERVER_PRIO ++#define BLE_GLS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_HIDS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Human Interface Device Service. ++ ++#ifndef BLE_HIDS_BLE_OBSERVER_PRIO ++#define BLE_HIDS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_HRS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Heart Rate Service. ++ ++#ifndef BLE_HRS_BLE_OBSERVER_PRIO ++#define BLE_HRS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_HRS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Heart Rate Service Client. ++ ++#ifndef BLE_HRS_C_BLE_OBSERVER_PRIO ++#define BLE_HRS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_HTS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Health Thermometer Service. ++ ++#ifndef BLE_HTS_BLE_OBSERVER_PRIO ++#define BLE_HTS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_IAS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Immediate Alert Service. ++ ++#ifndef BLE_IAS_BLE_OBSERVER_PRIO ++#define BLE_IAS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_IAS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Immediate Alert Service Client. ++ ++#ifndef BLE_IAS_C_BLE_OBSERVER_PRIO ++#define BLE_IAS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_LBS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the LED Button Service. ++ ++#ifndef BLE_LBS_BLE_OBSERVER_PRIO ++#define BLE_LBS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_LBS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the LED Button Service Client. ++ ++#ifndef BLE_LBS_C_BLE_OBSERVER_PRIO ++#define BLE_LBS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_LLS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Link Loss Service. ++ ++#ifndef BLE_LLS_BLE_OBSERVER_PRIO ++#define BLE_LLS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_LNS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Location Navigation Service. ++ ++#ifndef BLE_LNS_BLE_OBSERVER_PRIO ++#define BLE_LNS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_NUS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the UART Service. ++ ++#ifndef BLE_NUS_BLE_OBSERVER_PRIO ++#define BLE_NUS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_NUS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the UART Central Service. ++ ++#ifndef BLE_NUS_C_BLE_OBSERVER_PRIO ++#define BLE_NUS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_OTS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Object transfer service. ++ ++#ifndef BLE_OTS_BLE_OBSERVER_PRIO ++#define BLE_OTS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_OTS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Object transfer service client. ++ ++#ifndef BLE_OTS_C_BLE_OBSERVER_PRIO ++#define BLE_OTS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_RSCS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Running Speed and Cadence Service. ++ ++#ifndef BLE_RSCS_BLE_OBSERVER_PRIO ++#define BLE_RSCS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_RSCS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Running Speed and Cadence Client. ++ ++#ifndef BLE_RSCS_C_BLE_OBSERVER_PRIO ++#define BLE_RSCS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_TPS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the TX Power Service. ++ ++#ifndef BLE_TPS_BLE_OBSERVER_PRIO ++#define BLE_TPS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BSP_BTN_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Button Control module. ++ ++#ifndef BSP_BTN_BLE_OBSERVER_PRIO ++#define BSP_BTN_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the NFC pairing library. ++ ++#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO ++#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the NFC pairing library. ++ ++#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO ++#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the NFC pairing library. ++ ++#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO ++#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// NRF_BLE_BMS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Bond Management Service. ++ ++#ifndef NRF_BLE_BMS_BLE_OBSERVER_PRIO ++#define NRF_BLE_BMS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// NRF_BLE_CGMS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Contiuon Glucose Monitoring Service. ++ ++#ifndef NRF_BLE_CGMS_BLE_OBSERVER_PRIO ++#define NRF_BLE_CGMS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// NRF_BLE_ES_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Eddystone module. ++ ++#ifndef NRF_BLE_ES_BLE_OBSERVER_PRIO ++#define NRF_BLE_ES_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the GATT Service Client. ++ ++#ifndef NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO ++#define NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// NRF_BLE_GATT_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the GATT module. ++ ++#ifndef NRF_BLE_GATT_BLE_OBSERVER_PRIO ++#define NRF_BLE_GATT_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// NRF_BLE_QWR_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Queued writes module. ++ ++#ifndef NRF_BLE_QWR_BLE_OBSERVER_PRIO ++#define NRF_BLE_QWR_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// NRF_BLE_SCAN_OBSERVER_PRIO ++// Priority for dispatching the BLE events to the Scanning Module. ++ ++#ifndef NRF_BLE_SCAN_OBSERVER_PRIO ++#define NRF_BLE_SCAN_OBSERVER_PRIO 1 ++#endif ++ ++// PM_BLE_OBSERVER_PRIO - Priority with which BLE events are dispatched to the Peer Manager module. ++#ifndef PM_BLE_OBSERVER_PRIO ++#define PM_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++ ++// ++ ++// NRF_SDH_ENABLED - nrf_sdh - SoftDevice handler ++//========================================================== ++#ifndef NRF_SDH_ENABLED ++#define NRF_SDH_ENABLED 1 ++#endif ++// Dispatch model ++ ++// This setting configures how Stack events are dispatched to the application. ++//========================================================== ++// NRF_SDH_DISPATCH_MODEL ++ ++ ++// NRF_SDH_DISPATCH_MODEL_INTERRUPT: SoftDevice events are passed to the application from the interrupt context. ++// NRF_SDH_DISPATCH_MODEL_APPSH: SoftDevice events are scheduled using @ref app_scheduler. ++// NRF_SDH_DISPATCH_MODEL_POLLING: SoftDevice events are to be fetched manually. ++// <0=> NRF_SDH_DISPATCH_MODEL_INTERRUPT ++// <1=> NRF_SDH_DISPATCH_MODEL_APPSH ++// <2=> NRF_SDH_DISPATCH_MODEL_POLLING ++ ++#ifndef NRF_SDH_DISPATCH_MODEL ++#define NRF_SDH_DISPATCH_MODEL 0 ++#endif ++ ++// ++//========================================================== ++ ++// Clock - SoftDevice clock configuration ++ ++//========================================================== ++// NRF_SDH_CLOCK_LF_SRC - SoftDevice clock source. ++ ++// <0=> NRF_CLOCK_LF_SRC_RC ++// <1=> NRF_CLOCK_LF_SRC_XTAL ++// <2=> NRF_CLOCK_LF_SRC_SYNTH ++ ++#ifndef NRF_SDH_CLOCK_LF_SRC ++#define NRF_SDH_CLOCK_LF_SRC 1 ++#endif ++ ++// NRF_SDH_CLOCK_LF_RC_CTIV - SoftDevice calibration timer interval. ++#ifndef NRF_SDH_CLOCK_LF_RC_CTIV ++#define NRF_SDH_CLOCK_LF_RC_CTIV 0 ++#endif ++ ++// NRF_SDH_CLOCK_LF_RC_TEMP_CTIV - SoftDevice calibration timer interval under constant temperature. ++// How often (in number of calibration intervals) the RC oscillator shall be calibrated ++// if the temperature has not changed. ++ ++#ifndef NRF_SDH_CLOCK_LF_RC_TEMP_CTIV ++#define NRF_SDH_CLOCK_LF_RC_TEMP_CTIV 0 ++#endif ++ ++// NRF_SDH_CLOCK_LF_ACCURACY - External clock accuracy used in the LL to compute timing. ++ ++// <0=> NRF_CLOCK_LF_ACCURACY_250_PPM ++// <1=> NRF_CLOCK_LF_ACCURACY_500_PPM ++// <2=> NRF_CLOCK_LF_ACCURACY_150_PPM ++// <3=> NRF_CLOCK_LF_ACCURACY_100_PPM ++// <4=> NRF_CLOCK_LF_ACCURACY_75_PPM ++// <5=> NRF_CLOCK_LF_ACCURACY_50_PPM ++// <6=> NRF_CLOCK_LF_ACCURACY_30_PPM ++// <7=> NRF_CLOCK_LF_ACCURACY_20_PPM ++// <8=> NRF_CLOCK_LF_ACCURACY_10_PPM ++// <9=> NRF_CLOCK_LF_ACCURACY_5_PPM ++// <10=> NRF_CLOCK_LF_ACCURACY_2_PPM ++// <11=> NRF_CLOCK_LF_ACCURACY_1_PPM ++ ++#ifndef NRF_SDH_CLOCK_LF_ACCURACY ++#define NRF_SDH_CLOCK_LF_ACCURACY 7 ++#endif ++ ++// ++//========================================================== ++ ++// SDH Observers - Observers and priority levels ++ ++//========================================================== ++// NRF_SDH_REQ_OBSERVER_PRIO_LEVELS - Total number of priority levels for request observers. ++// This setting configures the number of priority levels available for the SoftDevice request event handlers. ++// The priority level of a handler determines the order in which it receives events, with respect to other handlers. ++ ++#ifndef NRF_SDH_REQ_OBSERVER_PRIO_LEVELS ++#define NRF_SDH_REQ_OBSERVER_PRIO_LEVELS 2 ++#endif ++ ++// NRF_SDH_STATE_OBSERVER_PRIO_LEVELS - Total number of priority levels for state observers. ++// This setting configures the number of priority levels available for the SoftDevice state event handlers. ++// The priority level of a handler determines the order in which it receives events, with respect to other handlers. ++ ++#ifndef NRF_SDH_STATE_OBSERVER_PRIO_LEVELS ++#define NRF_SDH_STATE_OBSERVER_PRIO_LEVELS 2 ++#endif ++ ++// NRF_SDH_STACK_OBSERVER_PRIO_LEVELS - Total number of priority levels for stack event observers. ++// This setting configures the number of priority levels available for the SoftDevice stack event handlers (ANT, BLE, SoC). ++// The priority level of a handler determines the order in which it receives events, with respect to other handlers. ++ ++#ifndef NRF_SDH_STACK_OBSERVER_PRIO_LEVELS ++#define NRF_SDH_STACK_OBSERVER_PRIO_LEVELS 2 ++#endif ++ ++ ++// State Observers priorities - Invididual priorities ++ ++//========================================================== ++// CLOCK_CONFIG_STATE_OBSERVER_PRIO ++// Priority with which state events are dispatched to the Clock driver. ++ ++#ifndef CLOCK_CONFIG_STATE_OBSERVER_PRIO ++#define CLOCK_CONFIG_STATE_OBSERVER_PRIO 0 ++#endif ++ ++// POWER_CONFIG_STATE_OBSERVER_PRIO ++// Priority with which state events are dispatched to the Power driver. ++ ++#ifndef POWER_CONFIG_STATE_OBSERVER_PRIO ++#define POWER_CONFIG_STATE_OBSERVER_PRIO 0 ++#endif ++ ++// RNG_CONFIG_STATE_OBSERVER_PRIO ++// Priority with which state events are dispatched to this module. ++ ++#ifndef RNG_CONFIG_STATE_OBSERVER_PRIO ++#define RNG_CONFIG_STATE_OBSERVER_PRIO 0 ++#endif ++ ++// ++//========================================================== ++ ++// Stack Event Observers priorities - Invididual priorities ++ ++//========================================================== ++// NRF_SDH_ANT_STACK_OBSERVER_PRIO ++// This setting configures the priority with which ANT events are processed with respect to other events coming from the stack. ++// Modify this setting if you need to have ANT events dispatched before or after other stack events, such as BLE or SoC. ++// Zero is the highest priority. ++ ++#ifndef NRF_SDH_ANT_STACK_OBSERVER_PRIO ++#define NRF_SDH_ANT_STACK_OBSERVER_PRIO 0 ++#endif ++ ++// NRF_SDH_BLE_STACK_OBSERVER_PRIO ++// This setting configures the priority with which BLE events are processed with respect to other events coming from the stack. ++// Modify this setting if you need to have BLE events dispatched before or after other stack events, such as ANT or SoC. ++// Zero is the highest priority. ++ ++#ifndef NRF_SDH_BLE_STACK_OBSERVER_PRIO ++#define NRF_SDH_BLE_STACK_OBSERVER_PRIO 0 ++#endif ++ ++// NRF_SDH_SOC_STACK_OBSERVER_PRIO ++// This setting configures the priority with which SoC events are processed with respect to other events coming from the stack. ++// Modify this setting if you need to have SoC events dispatched before or after other stack events, such as ANT or BLE. ++// Zero is the highest priority. ++ ++#ifndef NRF_SDH_SOC_STACK_OBSERVER_PRIO ++#define NRF_SDH_SOC_STACK_OBSERVER_PRIO 0 ++#endif ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++ ++// ++ ++// NRF_SDH_SOC_ENABLED - nrf_sdh_soc - SoftDevice SoC event handler ++//========================================================== ++#ifndef NRF_SDH_SOC_ENABLED ++#define NRF_SDH_SOC_ENABLED 1 ++#endif ++// SoC Observers - Observers and priority levels ++ ++//========================================================== ++// NRF_SDH_SOC_OBSERVER_PRIO_LEVELS - Total number of priority levels for SoC observers. ++// This setting configures the number of priority levels available for the SoC event handlers. ++// The priority level of a handler determines the order in which it receives events, with respect to other handlers. ++ ++#ifndef NRF_SDH_SOC_OBSERVER_PRIO_LEVELS ++#define NRF_SDH_SOC_OBSERVER_PRIO_LEVELS 2 ++#endif ++ ++// SoC Observers priorities - Invididual priorities ++ ++//========================================================== ++// BLE_ADV_SOC_OBSERVER_PRIO ++// Priority with which SoC events are dispatched to the Advertising module. ++ ++#ifndef BLE_ADV_SOC_OBSERVER_PRIO ++#define BLE_ADV_SOC_OBSERVER_PRIO 1 ++#endif ++ ++// BLE_DFU_SOC_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the DFU Service. ++ ++#ifndef BLE_DFU_SOC_OBSERVER_PRIO ++#define BLE_DFU_SOC_OBSERVER_PRIO 1 ++#endif ++ ++// CLOCK_CONFIG_SOC_OBSERVER_PRIO ++// Priority with which SoC events are dispatched to the Clock driver. ++ ++#ifndef CLOCK_CONFIG_SOC_OBSERVER_PRIO ++#define CLOCK_CONFIG_SOC_OBSERVER_PRIO 0 ++#endif ++ ++// POWER_CONFIG_SOC_OBSERVER_PRIO ++// Priority with which SoC events are dispatched to the Power driver. ++ ++#ifndef POWER_CONFIG_SOC_OBSERVER_PRIO ++#define POWER_CONFIG_SOC_OBSERVER_PRIO 0 ++#endif ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++ ++// ++ ++// ++//========================================================== ++ ++// <<< end of configuration section >>> ++#endif //SDK_CONFIG_H ++ +diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/ble_connectivity_132v5_usb_hci_pca10056.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/ble_connectivity_132v5_usb_hci_pca10056.emProject +new file mode 100644 +index 0000000..d93607c +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/ble_connectivity_132v5_usb_hci_pca10056.emProject +@@ -0,0 +1,170 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/ble_connectivity_132v5_usb_hci_pca10056.emSession nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/ble_connectivity_132v5_usb_hci_pca10056.emSession +new file mode 100644 +index 0000000..6c26dd1 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/ble_connectivity_132v5_usb_hci_pca10056.emSession +@@ -0,0 +1,7 @@ ++ ++ ++ ++ ++ ++ ++ +\ No newline at end of file +diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/flash_placement.xml +new file mode 100644 +index 0000000..c9cc513 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s132v5_usb_hci/ses/flash_placement.xml +@@ -0,0 +1,49 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/Makefile nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/Makefile +index 87059cc..0d8cc08 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/Makefile ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/Makefile +@@ -85,6 +85,7 @@ SRC_FILES += \ + $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_clock.c \ + $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power_clock.c \ + $(SDK_ROOT)/modules/nrfx/drivers/src/prs/nrfx_prs.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_qspi.c \ + $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uart.c \ + $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uarte.c \ + $(PROJ_DIR)/main.c \ +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/ble_connectivity_gcc_nrf52.ld +index b877f5a..f354cbc 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/armgcc/ble_connectivity_gcc_nrf52.ld +@@ -7,10 +7,17 @@ MEMORY + { + FLASH (rx) : ORIGIN = 0x26000, LENGTH = 0xda000 + RAM (rwx) : ORIGIN = 0x2001ad58, LENGTH = 0x252a8 ++ connectivity_version_info (r) : ORIGIN = 0x50000, LENGTH = 0x18 + } + + SECTIONS + { ++ .connectivity_version_info : ++ { ++ PROVIDE(__start_connectivity_version_info = .); ++ KEEP(*(SORT(.connectivity_version_info*))) ++ PROVIDE(__stop_connectivity_version_info = .); ++ } > connectivity_version_info + } + + SECTIONS +@@ -69,6 +76,12 @@ SECTIONS + KEEP(*(.nrf_balloc)) + PROVIDE(__stop_nrf_balloc = .); + } > FLASH ++ .sdh_state_observers : ++ { ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); ++ } > FLASH + .sdh_stack_observers : + { + PROVIDE(__start_sdh_stack_observers = .); +@@ -81,12 +94,6 @@ SECTIONS + KEEP(*(SORT(.sdh_req_observers*))) + PROVIDE(__stop_sdh_req_observers = .); + } > FLASH +- .sdh_state_observers : +- { +- PROVIDE(__start_sdh_state_observers = .); +- KEEP(*(SORT(.sdh_state_observers*))) +- PROVIDE(__stop_sdh_state_observers = .); +- } > FLASH + .log_backends : + { + PROVIDE(__start_log_backends = .); +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/config/sdk_config.h +index 793e569..d43945e 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/config/sdk_config.h ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/config/sdk_config.h +@@ -240,6 +240,134 @@ + + // + ++// NRFX_QSPI_ENABLED - nrfx_qspi - QSPI peripheral driver ++//========================================================== ++#ifndef NRFX_QSPI_ENABLED ++#define NRFX_QSPI_ENABLED 1 ++#endif ++// NRFX_QSPI_CONFIG_SCK_DELAY - tSHSL, tWHSL and tSHWL in number of 16 MHz periods (62.5 ns). <0-255> ++ ++ ++#ifndef NRFX_QSPI_CONFIG_SCK_DELAY ++#define NRFX_QSPI_CONFIG_SCK_DELAY 1 ++#endif ++ ++// NRFX_QSPI_CONFIG_XIP_OFFSET - Address offset in the external memory for Execute in Place operation. ++#ifndef NRFX_QSPI_CONFIG_XIP_OFFSET ++#define NRFX_QSPI_CONFIG_XIP_OFFSET 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_READOC - Number of data lines and opcode used for reading. ++ ++// <0=> FastRead ++// <1=> Read2O ++// <2=> Read2IO ++// <3=> Read4O ++// <4=> Read4IO ++ ++#ifndef NRFX_QSPI_CONFIG_READOC ++#define NRFX_QSPI_CONFIG_READOC 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_WRITEOC - Number of data lines and opcode used for writing. ++ ++// <0=> PP ++// <1=> PP2O ++// <2=> PP4O ++// <3=> PP4IO ++ ++#ifndef NRFX_QSPI_CONFIG_WRITEOC ++#define NRFX_QSPI_CONFIG_WRITEOC 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_ADDRMODE - Addressing mode. ++ ++// <0=> 24bit ++// <1=> 32bit ++ ++#ifndef NRFX_QSPI_CONFIG_ADDRMODE ++#define NRFX_QSPI_CONFIG_ADDRMODE 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_MODE - SPI mode. ++ ++// <0=> Mode 0 ++// <1=> Mode 1 ++ ++#ifndef NRFX_QSPI_CONFIG_MODE ++#define NRFX_QSPI_CONFIG_MODE 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_FREQUENCY - Frequency divider. ++ ++// <0=> 32MHz/1 ++// <1=> 32MHz/2 ++// <2=> 32MHz/3 ++// <3=> 32MHz/4 ++// <4=> 32MHz/5 ++// <5=> 32MHz/6 ++// <6=> 32MHz/7 ++// <7=> 32MHz/8 ++// <8=> 32MHz/9 ++// <9=> 32MHz/10 ++// <10=> 32MHz/11 ++// <11=> 32MHz/12 ++// <12=> 32MHz/13 ++// <13=> 32MHz/14 ++// <14=> 32MHz/15 ++// <15=> 32MHz/16 ++ ++#ifndef NRFX_QSPI_CONFIG_FREQUENCY ++#define NRFX_QSPI_CONFIG_FREQUENCY 15 ++#endif ++ ++// NRFX_QSPI_PIN_SCK - SCK pin value. ++#ifndef NRFX_QSPI_PIN_SCK ++#define NRFX_QSPI_PIN_SCK NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_CSN - CSN pin value. ++#ifndef NRFX_QSPI_PIN_CSN ++#define NRFX_QSPI_PIN_CSN NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO0 - IO0 pin value. ++#ifndef NRFX_QSPI_PIN_IO0 ++#define NRFX_QSPI_PIN_IO0 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO1 - IO1 pin value. ++#ifndef NRFX_QSPI_PIN_IO1 ++#define NRFX_QSPI_PIN_IO1 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO2 - IO2 pin value. ++#ifndef NRFX_QSPI_PIN_IO2 ++#define NRFX_QSPI_PIN_IO2 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO3 - IO3 pin value. ++#ifndef NRFX_QSPI_PIN_IO3 ++#define NRFX_QSPI_PIN_IO3 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef NRFX_QSPI_CONFIG_IRQ_PRIORITY ++#define NRFX_QSPI_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ + // NRFX_UARTE_ENABLED - nrfx_uarte - UARTE peripheral driver + //========================================================== + #ifndef NRFX_UARTE_ENABLED +@@ -523,6 +651,136 @@ + + // + ++// QSPI_ENABLED - nrf_drv_qspi - QSPI peripheral driver - legacy layer ++//========================================================== ++#ifndef QSPI_ENABLED ++#define QSPI_ENABLED 1 ++#endif ++// QSPI_CONFIG_SCK_DELAY - tSHSL, tWHSL and tSHWL in number of 16 MHz periods (62.5 ns). <0-255> ++ ++ ++#ifndef QSPI_CONFIG_SCK_DELAY ++#define QSPI_CONFIG_SCK_DELAY 1 ++#endif ++ ++// QSPI_CONFIG_XIP_OFFSET - Address offset in the external memory for Execute in Place operation. ++#ifndef QSPI_CONFIG_XIP_OFFSET ++#define QSPI_CONFIG_XIP_OFFSET 0 ++#endif ++ ++// QSPI_CONFIG_READOC - Number of data lines and opcode used for reading. ++ ++// <0=> FastRead ++// <1=> Read2O ++// <2=> Read2IO ++// <3=> Read4O ++// <4=> Read4IO ++ ++#ifndef QSPI_CONFIG_READOC ++#define QSPI_CONFIG_READOC 0 ++#endif ++ ++// QSPI_CONFIG_WRITEOC - Number of data lines and opcode used for writing. ++ ++// <0=> PP ++// <1=> PP2O ++// <2=> PP4O ++// <3=> PP4IO ++ ++#ifndef QSPI_CONFIG_WRITEOC ++#define QSPI_CONFIG_WRITEOC 0 ++#endif ++ ++// QSPI_CONFIG_ADDRMODE - Addressing mode. ++ ++// <0=> 24bit ++// <1=> 32bit ++ ++#ifndef QSPI_CONFIG_ADDRMODE ++#define QSPI_CONFIG_ADDRMODE 0 ++#endif ++ ++// QSPI_CONFIG_MODE - SPI mode. ++ ++// <0=> Mode 0 ++// <1=> Mode 1 ++ ++#ifndef QSPI_CONFIG_MODE ++#define QSPI_CONFIG_MODE 0 ++#endif ++ ++// QSPI_CONFIG_FREQUENCY - Frequency divider. ++ ++// <0=> 32MHz/1 ++// <1=> 32MHz/2 ++// <2=> 32MHz/3 ++// <3=> 32MHz/4 ++// <4=> 32MHz/5 ++// <5=> 32MHz/6 ++// <6=> 32MHz/7 ++// <7=> 32MHz/8 ++// <8=> 32MHz/9 ++// <9=> 32MHz/10 ++// <10=> 32MHz/11 ++// <11=> 32MHz/12 ++// <12=> 32MHz/13 ++// <13=> 32MHz/14 ++// <14=> 32MHz/15 ++// <15=> 32MHz/16 ++ ++#ifndef QSPI_CONFIG_FREQUENCY ++#define QSPI_CONFIG_FREQUENCY 15 ++#endif ++ ++// QSPI_PIN_SCK - SCK pin value. ++#ifndef QSPI_PIN_SCK ++#define QSPI_PIN_SCK NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_CSN - CSN pin value. ++#ifndef QSPI_PIN_CSN ++#define QSPI_PIN_CSN NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO0 - IO0 pin value. ++#ifndef QSPI_PIN_IO0 ++#define QSPI_PIN_IO0 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO1 - IO1 pin value. ++#ifndef QSPI_PIN_IO1 ++#define QSPI_PIN_IO1 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO2 - IO2 pin value. ++#ifndef QSPI_PIN_IO2 ++#define QSPI_PIN_IO2 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO3 - IO3 pin value. ++#ifndef QSPI_PIN_IO3 ++#define QSPI_PIN_IO3 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef QSPI_CONFIG_IRQ_PRIORITY ++#define QSPI_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ + // UART_ENABLED - nrf_drv_uart - UART/UARTE peripheral driver - legacy layer + //========================================================== + #ifndef UART_ENABLED +@@ -3839,12 +4097,12 @@ + + // NRF_SDH_BLE_PERIPHERAL_LINK_COUNT - Maximum number of peripheral links. + #ifndef NRF_SDH_BLE_PERIPHERAL_LINK_COUNT +-#define NRF_SDH_BLE_PERIPHERAL_LINK_COUNT 0 ++#define NRF_SDH_BLE_PERIPHERAL_LINK_COUNT 8 + #endif + + // NRF_SDH_BLE_CENTRAL_LINK_COUNT - Maximum number of central links. + #ifndef NRF_SDH_BLE_CENTRAL_LINK_COUNT +-#define NRF_SDH_BLE_CENTRAL_LINK_COUNT 0 ++#define NRF_SDH_BLE_CENTRAL_LINK_COUNT 8 + #endif + + // NRF_SDH_BLE_TOTAL_LINK_COUNT - Total link count. +@@ -4145,132 +4403,6 @@ + #define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 + #endif + +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- + // NRF_BLE_BMS_BLE_OBSERVER_PRIO + // Priority with which BLE events are dispatched to the Bond Management Service. + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/ble_connectivity_s140_hci_pca10056.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/ble_connectivity_s140_hci_pca10056.emProject +index f64c3a0..0221ede 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/ble_connectivity_s140_hci_pca10056.emProject ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/ble_connectivity_s140_hci_pca10056.emProject +@@ -28,7 +28,7 @@ + linker_printf_fmt_level="long" + linker_section_placement_file="flash_placement.xml" + linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x100000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x40000;FLASH_START=0x26000;FLASH_SIZE=0xda000;RAM_START=0x2001ad58;RAM_SIZE=0x252a8" +- linker_section_placements_segments="FLASH RX 0x0 0x100000;RAM RWX 0x20000000 0x40000" ++ linker_section_placements_segments="FLASH RX 0x0 0x100000;RAM RWX 0x20000000 0x40000;connectivity_version_info RX 0x50000 0x18" + project_directory="" + project_type="Executable" /> + +@@ -121,6 +121,7 @@ + + + ++ + + + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/flash_placement.xml +index 6b7653b..c9cc513 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_hci/ses/flash_placement.xml +@@ -11,9 +11,9 @@ + + + ++ + + +- + + + +@@ -43,4 +43,7 @@ + + + ++ ++ ++ + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/Makefile nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/Makefile +index f5648fe..98f1192 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/Makefile ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/Makefile +@@ -83,6 +83,7 @@ SRC_FILES += \ + $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_gpiote.c \ + $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power_clock.c \ + $(SDK_ROOT)/modules/nrfx/drivers/src/prs/nrfx_prs.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_qspi.c \ + $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_spis.c \ + $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uart.c \ + $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uarte.c \ +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/ble_connectivity_gcc_nrf52.ld +index d3acaad..a5e33ee 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/armgcc/ble_connectivity_gcc_nrf52.ld +@@ -7,10 +7,17 @@ MEMORY + { + FLASH (rx) : ORIGIN = 0x26000, LENGTH = 0xda000 + RAM (rwx) : ORIGIN = 0x2001ad58, LENGTH = 0x252a8 ++ connectivity_version_info (r) : ORIGIN = 0x50000, LENGTH = 0x18 + } + + SECTIONS + { ++ .connectivity_version_info : ++ { ++ PROVIDE(__start_connectivity_version_info = .); ++ KEEP(*(SORT(.connectivity_version_info*))) ++ PROVIDE(__stop_connectivity_version_info = .); ++ } > connectivity_version_info + } + + SECTIONS +@@ -63,6 +70,12 @@ SECTIONS + KEEP(*(SORT(.log_const_data*))) + PROVIDE(__stop_log_const_data = .); + } > FLASH ++ .sdh_state_observers : ++ { ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); ++ } > FLASH + .sdh_stack_observers : + { + PROVIDE(__start_sdh_stack_observers = .); +@@ -75,12 +88,6 @@ SECTIONS + KEEP(*(SORT(.sdh_req_observers*))) + PROVIDE(__stop_sdh_req_observers = .); + } > FLASH +- .sdh_state_observers : +- { +- PROVIDE(__start_sdh_state_observers = .); +- KEEP(*(SORT(.sdh_state_observers*))) +- PROVIDE(__stop_sdh_state_observers = .); +- } > FLASH + .log_backends : + { + PROVIDE(__start_log_backends = .); +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/config/sdk_config.h +index ba4721d..0c83e4d 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/config/sdk_config.h ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/config/sdk_config.h +@@ -347,6 +347,134 @@ + + // + ++// NRFX_QSPI_ENABLED - nrfx_qspi - QSPI peripheral driver ++//========================================================== ++#ifndef NRFX_QSPI_ENABLED ++#define NRFX_QSPI_ENABLED 1 ++#endif ++// NRFX_QSPI_CONFIG_SCK_DELAY - tSHSL, tWHSL and tSHWL in number of 16 MHz periods (62.5 ns). <0-255> ++ ++ ++#ifndef NRFX_QSPI_CONFIG_SCK_DELAY ++#define NRFX_QSPI_CONFIG_SCK_DELAY 1 ++#endif ++ ++// NRFX_QSPI_CONFIG_XIP_OFFSET - Address offset in the external memory for Execute in Place operation. ++#ifndef NRFX_QSPI_CONFIG_XIP_OFFSET ++#define NRFX_QSPI_CONFIG_XIP_OFFSET 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_READOC - Number of data lines and opcode used for reading. ++ ++// <0=> FastRead ++// <1=> Read2O ++// <2=> Read2IO ++// <3=> Read4O ++// <4=> Read4IO ++ ++#ifndef NRFX_QSPI_CONFIG_READOC ++#define NRFX_QSPI_CONFIG_READOC 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_WRITEOC - Number of data lines and opcode used for writing. ++ ++// <0=> PP ++// <1=> PP2O ++// <2=> PP4O ++// <3=> PP4IO ++ ++#ifndef NRFX_QSPI_CONFIG_WRITEOC ++#define NRFX_QSPI_CONFIG_WRITEOC 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_ADDRMODE - Addressing mode. ++ ++// <0=> 24bit ++// <1=> 32bit ++ ++#ifndef NRFX_QSPI_CONFIG_ADDRMODE ++#define NRFX_QSPI_CONFIG_ADDRMODE 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_MODE - SPI mode. ++ ++// <0=> Mode 0 ++// <1=> Mode 1 ++ ++#ifndef NRFX_QSPI_CONFIG_MODE ++#define NRFX_QSPI_CONFIG_MODE 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_FREQUENCY - Frequency divider. ++ ++// <0=> 32MHz/1 ++// <1=> 32MHz/2 ++// <2=> 32MHz/3 ++// <3=> 32MHz/4 ++// <4=> 32MHz/5 ++// <5=> 32MHz/6 ++// <6=> 32MHz/7 ++// <7=> 32MHz/8 ++// <8=> 32MHz/9 ++// <9=> 32MHz/10 ++// <10=> 32MHz/11 ++// <11=> 32MHz/12 ++// <12=> 32MHz/13 ++// <13=> 32MHz/14 ++// <14=> 32MHz/15 ++// <15=> 32MHz/16 ++ ++#ifndef NRFX_QSPI_CONFIG_FREQUENCY ++#define NRFX_QSPI_CONFIG_FREQUENCY 15 ++#endif ++ ++// NRFX_QSPI_PIN_SCK - SCK pin value. ++#ifndef NRFX_QSPI_PIN_SCK ++#define NRFX_QSPI_PIN_SCK NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_CSN - CSN pin value. ++#ifndef NRFX_QSPI_PIN_CSN ++#define NRFX_QSPI_PIN_CSN NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO0 - IO0 pin value. ++#ifndef NRFX_QSPI_PIN_IO0 ++#define NRFX_QSPI_PIN_IO0 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO1 - IO1 pin value. ++#ifndef NRFX_QSPI_PIN_IO1 ++#define NRFX_QSPI_PIN_IO1 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO2 - IO2 pin value. ++#ifndef NRFX_QSPI_PIN_IO2 ++#define NRFX_QSPI_PIN_IO2 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO3 - IO3 pin value. ++#ifndef NRFX_QSPI_PIN_IO3 ++#define NRFX_QSPI_PIN_IO3 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef NRFX_QSPI_CONFIG_IRQ_PRIORITY ++#define NRFX_QSPI_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ + // NRFX_SPIS_ENABLED - nrfx_spis - SPIS peripheral driver + //========================================================== + #ifndef NRFX_SPIS_ENABLED +@@ -738,6 +866,136 @@ + + // + ++// QSPI_ENABLED - nrf_drv_qspi - QSPI peripheral driver - legacy layer ++//========================================================== ++#ifndef QSPI_ENABLED ++#define QSPI_ENABLED 1 ++#endif ++// QSPI_CONFIG_SCK_DELAY - tSHSL, tWHSL and tSHWL in number of 16 MHz periods (62.5 ns). <0-255> ++ ++ ++#ifndef QSPI_CONFIG_SCK_DELAY ++#define QSPI_CONFIG_SCK_DELAY 1 ++#endif ++ ++// QSPI_CONFIG_XIP_OFFSET - Address offset in the external memory for Execute in Place operation. ++#ifndef QSPI_CONFIG_XIP_OFFSET ++#define QSPI_CONFIG_XIP_OFFSET 0 ++#endif ++ ++// QSPI_CONFIG_READOC - Number of data lines and opcode used for reading. ++ ++// <0=> FastRead ++// <1=> Read2O ++// <2=> Read2IO ++// <3=> Read4O ++// <4=> Read4IO ++ ++#ifndef QSPI_CONFIG_READOC ++#define QSPI_CONFIG_READOC 0 ++#endif ++ ++// QSPI_CONFIG_WRITEOC - Number of data lines and opcode used for writing. ++ ++// <0=> PP ++// <1=> PP2O ++// <2=> PP4O ++// <3=> PP4IO ++ ++#ifndef QSPI_CONFIG_WRITEOC ++#define QSPI_CONFIG_WRITEOC 0 ++#endif ++ ++// QSPI_CONFIG_ADDRMODE - Addressing mode. ++ ++// <0=> 24bit ++// <1=> 32bit ++ ++#ifndef QSPI_CONFIG_ADDRMODE ++#define QSPI_CONFIG_ADDRMODE 0 ++#endif ++ ++// QSPI_CONFIG_MODE - SPI mode. ++ ++// <0=> Mode 0 ++// <1=> Mode 1 ++ ++#ifndef QSPI_CONFIG_MODE ++#define QSPI_CONFIG_MODE 0 ++#endif ++ ++// QSPI_CONFIG_FREQUENCY - Frequency divider. ++ ++// <0=> 32MHz/1 ++// <1=> 32MHz/2 ++// <2=> 32MHz/3 ++// <3=> 32MHz/4 ++// <4=> 32MHz/5 ++// <5=> 32MHz/6 ++// <6=> 32MHz/7 ++// <7=> 32MHz/8 ++// <8=> 32MHz/9 ++// <9=> 32MHz/10 ++// <10=> 32MHz/11 ++// <11=> 32MHz/12 ++// <12=> 32MHz/13 ++// <13=> 32MHz/14 ++// <14=> 32MHz/15 ++// <15=> 32MHz/16 ++ ++#ifndef QSPI_CONFIG_FREQUENCY ++#define QSPI_CONFIG_FREQUENCY 15 ++#endif ++ ++// QSPI_PIN_SCK - SCK pin value. ++#ifndef QSPI_PIN_SCK ++#define QSPI_PIN_SCK NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_CSN - CSN pin value. ++#ifndef QSPI_PIN_CSN ++#define QSPI_PIN_CSN NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO0 - IO0 pin value. ++#ifndef QSPI_PIN_IO0 ++#define QSPI_PIN_IO0 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO1 - IO1 pin value. ++#ifndef QSPI_PIN_IO1 ++#define QSPI_PIN_IO1 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO2 - IO2 pin value. ++#ifndef QSPI_PIN_IO2 ++#define QSPI_PIN_IO2 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO3 - IO3 pin value. ++#ifndef QSPI_PIN_IO3 ++#define QSPI_PIN_IO3 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef QSPI_CONFIG_IRQ_PRIORITY ++#define QSPI_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ + // SPIS_ENABLED - nrf_drv_spis - SPIS peripheral driver - legacy layer + //========================================================== + #ifndef SPIS_ENABLED +@@ -4017,12 +4275,12 @@ + + // NRF_SDH_BLE_PERIPHERAL_LINK_COUNT - Maximum number of peripheral links. + #ifndef NRF_SDH_BLE_PERIPHERAL_LINK_COUNT +-#define NRF_SDH_BLE_PERIPHERAL_LINK_COUNT 0 ++#define NRF_SDH_BLE_PERIPHERAL_LINK_COUNT 8 + #endif + + // NRF_SDH_BLE_CENTRAL_LINK_COUNT - Maximum number of central links. + #ifndef NRF_SDH_BLE_CENTRAL_LINK_COUNT +-#define NRF_SDH_BLE_CENTRAL_LINK_COUNT 0 ++#define NRF_SDH_BLE_CENTRAL_LINK_COUNT 8 + #endif + + // NRF_SDH_BLE_TOTAL_LINK_COUNT - Total link count. +@@ -4323,132 +4581,6 @@ + #define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 + #endif + +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- + // NRF_BLE_BMS_BLE_OBSERVER_PRIO + // Priority with which BLE events are dispatched to the Bond Management Service. + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/ble_connectivity_s140_spi_pca10056.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/ble_connectivity_s140_spi_pca10056.emProject +index a71ed2f..430528f 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/ble_connectivity_s140_spi_pca10056.emProject ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/ble_connectivity_s140_spi_pca10056.emProject +@@ -28,7 +28,7 @@ + linker_printf_fmt_level="long" + linker_section_placement_file="flash_placement.xml" + linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x100000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x40000;FLASH_START=0x26000;FLASH_SIZE=0xda000;RAM_START=0x2001ad58;RAM_SIZE=0x252a8" +- linker_section_placements_segments="FLASH RX 0x0 0x100000;RAM RWX 0x20000000 0x40000" ++ linker_section_placements_segments="FLASH RX 0x0 0x100000;RAM RWX 0x20000000 0x40000;connectivity_version_info RX 0x50000 0x18" + project_directory="" + project_type="Executable" /> + +@@ -119,6 +119,7 @@ + + + ++ + + + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/flash_placement.xml +index a801e6e..0708731 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi/ses/flash_placement.xml +@@ -10,9 +10,9 @@ + + + ++ + + +- + + + +@@ -42,4 +42,7 @@ + + + ++ ++ ++ + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/Makefile nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/Makefile +index e498e6c..1147b6f 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/Makefile ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/Makefile +@@ -83,6 +83,7 @@ SRC_FILES += \ + $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_gpiote.c \ + $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power_clock.c \ + $(SDK_ROOT)/modules/nrfx/drivers/src/prs/nrfx_prs.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_qspi.c \ + $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_spis.c \ + $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uart.c \ + $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uarte.c \ +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld +index d3acaad..a5e33ee 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/armgcc/ble_connectivity_gcc_nrf52.ld +@@ -7,10 +7,17 @@ MEMORY + { + FLASH (rx) : ORIGIN = 0x26000, LENGTH = 0xda000 + RAM (rwx) : ORIGIN = 0x2001ad58, LENGTH = 0x252a8 ++ connectivity_version_info (r) : ORIGIN = 0x50000, LENGTH = 0x18 + } + + SECTIONS + { ++ .connectivity_version_info : ++ { ++ PROVIDE(__start_connectivity_version_info = .); ++ KEEP(*(SORT(.connectivity_version_info*))) ++ PROVIDE(__stop_connectivity_version_info = .); ++ } > connectivity_version_info + } + + SECTIONS +@@ -63,6 +70,12 @@ SECTIONS + KEEP(*(SORT(.log_const_data*))) + PROVIDE(__stop_log_const_data = .); + } > FLASH ++ .sdh_state_observers : ++ { ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); ++ } > FLASH + .sdh_stack_observers : + { + PROVIDE(__start_sdh_stack_observers = .); +@@ -75,12 +88,6 @@ SECTIONS + KEEP(*(SORT(.sdh_req_observers*))) + PROVIDE(__stop_sdh_req_observers = .); + } > FLASH +- .sdh_state_observers : +- { +- PROVIDE(__start_sdh_state_observers = .); +- KEEP(*(SORT(.sdh_state_observers*))) +- PROVIDE(__stop_sdh_state_observers = .); +- } > FLASH + .log_backends : + { + PROVIDE(__start_log_backends = .); +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/config/sdk_config.h +index ba4721d..0c83e4d 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/config/sdk_config.h ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/config/sdk_config.h +@@ -347,6 +347,134 @@ + + // + ++// NRFX_QSPI_ENABLED - nrfx_qspi - QSPI peripheral driver ++//========================================================== ++#ifndef NRFX_QSPI_ENABLED ++#define NRFX_QSPI_ENABLED 1 ++#endif ++// NRFX_QSPI_CONFIG_SCK_DELAY - tSHSL, tWHSL and tSHWL in number of 16 MHz periods (62.5 ns). <0-255> ++ ++ ++#ifndef NRFX_QSPI_CONFIG_SCK_DELAY ++#define NRFX_QSPI_CONFIG_SCK_DELAY 1 ++#endif ++ ++// NRFX_QSPI_CONFIG_XIP_OFFSET - Address offset in the external memory for Execute in Place operation. ++#ifndef NRFX_QSPI_CONFIG_XIP_OFFSET ++#define NRFX_QSPI_CONFIG_XIP_OFFSET 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_READOC - Number of data lines and opcode used for reading. ++ ++// <0=> FastRead ++// <1=> Read2O ++// <2=> Read2IO ++// <3=> Read4O ++// <4=> Read4IO ++ ++#ifndef NRFX_QSPI_CONFIG_READOC ++#define NRFX_QSPI_CONFIG_READOC 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_WRITEOC - Number of data lines and opcode used for writing. ++ ++// <0=> PP ++// <1=> PP2O ++// <2=> PP4O ++// <3=> PP4IO ++ ++#ifndef NRFX_QSPI_CONFIG_WRITEOC ++#define NRFX_QSPI_CONFIG_WRITEOC 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_ADDRMODE - Addressing mode. ++ ++// <0=> 24bit ++// <1=> 32bit ++ ++#ifndef NRFX_QSPI_CONFIG_ADDRMODE ++#define NRFX_QSPI_CONFIG_ADDRMODE 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_MODE - SPI mode. ++ ++// <0=> Mode 0 ++// <1=> Mode 1 ++ ++#ifndef NRFX_QSPI_CONFIG_MODE ++#define NRFX_QSPI_CONFIG_MODE 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_FREQUENCY - Frequency divider. ++ ++// <0=> 32MHz/1 ++// <1=> 32MHz/2 ++// <2=> 32MHz/3 ++// <3=> 32MHz/4 ++// <4=> 32MHz/5 ++// <5=> 32MHz/6 ++// <6=> 32MHz/7 ++// <7=> 32MHz/8 ++// <8=> 32MHz/9 ++// <9=> 32MHz/10 ++// <10=> 32MHz/11 ++// <11=> 32MHz/12 ++// <12=> 32MHz/13 ++// <13=> 32MHz/14 ++// <14=> 32MHz/15 ++// <15=> 32MHz/16 ++ ++#ifndef NRFX_QSPI_CONFIG_FREQUENCY ++#define NRFX_QSPI_CONFIG_FREQUENCY 15 ++#endif ++ ++// NRFX_QSPI_PIN_SCK - SCK pin value. ++#ifndef NRFX_QSPI_PIN_SCK ++#define NRFX_QSPI_PIN_SCK NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_CSN - CSN pin value. ++#ifndef NRFX_QSPI_PIN_CSN ++#define NRFX_QSPI_PIN_CSN NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO0 - IO0 pin value. ++#ifndef NRFX_QSPI_PIN_IO0 ++#define NRFX_QSPI_PIN_IO0 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO1 - IO1 pin value. ++#ifndef NRFX_QSPI_PIN_IO1 ++#define NRFX_QSPI_PIN_IO1 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO2 - IO2 pin value. ++#ifndef NRFX_QSPI_PIN_IO2 ++#define NRFX_QSPI_PIN_IO2 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO3 - IO3 pin value. ++#ifndef NRFX_QSPI_PIN_IO3 ++#define NRFX_QSPI_PIN_IO3 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef NRFX_QSPI_CONFIG_IRQ_PRIORITY ++#define NRFX_QSPI_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ + // NRFX_SPIS_ENABLED - nrfx_spis - SPIS peripheral driver + //========================================================== + #ifndef NRFX_SPIS_ENABLED +@@ -738,6 +866,136 @@ + + // + ++// QSPI_ENABLED - nrf_drv_qspi - QSPI peripheral driver - legacy layer ++//========================================================== ++#ifndef QSPI_ENABLED ++#define QSPI_ENABLED 1 ++#endif ++// QSPI_CONFIG_SCK_DELAY - tSHSL, tWHSL and tSHWL in number of 16 MHz periods (62.5 ns). <0-255> ++ ++ ++#ifndef QSPI_CONFIG_SCK_DELAY ++#define QSPI_CONFIG_SCK_DELAY 1 ++#endif ++ ++// QSPI_CONFIG_XIP_OFFSET - Address offset in the external memory for Execute in Place operation. ++#ifndef QSPI_CONFIG_XIP_OFFSET ++#define QSPI_CONFIG_XIP_OFFSET 0 ++#endif ++ ++// QSPI_CONFIG_READOC - Number of data lines and opcode used for reading. ++ ++// <0=> FastRead ++// <1=> Read2O ++// <2=> Read2IO ++// <3=> Read4O ++// <4=> Read4IO ++ ++#ifndef QSPI_CONFIG_READOC ++#define QSPI_CONFIG_READOC 0 ++#endif ++ ++// QSPI_CONFIG_WRITEOC - Number of data lines and opcode used for writing. ++ ++// <0=> PP ++// <1=> PP2O ++// <2=> PP4O ++// <3=> PP4IO ++ ++#ifndef QSPI_CONFIG_WRITEOC ++#define QSPI_CONFIG_WRITEOC 0 ++#endif ++ ++// QSPI_CONFIG_ADDRMODE - Addressing mode. ++ ++// <0=> 24bit ++// <1=> 32bit ++ ++#ifndef QSPI_CONFIG_ADDRMODE ++#define QSPI_CONFIG_ADDRMODE 0 ++#endif ++ ++// QSPI_CONFIG_MODE - SPI mode. ++ ++// <0=> Mode 0 ++// <1=> Mode 1 ++ ++#ifndef QSPI_CONFIG_MODE ++#define QSPI_CONFIG_MODE 0 ++#endif ++ ++// QSPI_CONFIG_FREQUENCY - Frequency divider. ++ ++// <0=> 32MHz/1 ++// <1=> 32MHz/2 ++// <2=> 32MHz/3 ++// <3=> 32MHz/4 ++// <4=> 32MHz/5 ++// <5=> 32MHz/6 ++// <6=> 32MHz/7 ++// <7=> 32MHz/8 ++// <8=> 32MHz/9 ++// <9=> 32MHz/10 ++// <10=> 32MHz/11 ++// <11=> 32MHz/12 ++// <12=> 32MHz/13 ++// <13=> 32MHz/14 ++// <14=> 32MHz/15 ++// <15=> 32MHz/16 ++ ++#ifndef QSPI_CONFIG_FREQUENCY ++#define QSPI_CONFIG_FREQUENCY 15 ++#endif ++ ++// QSPI_PIN_SCK - SCK pin value. ++#ifndef QSPI_PIN_SCK ++#define QSPI_PIN_SCK NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_CSN - CSN pin value. ++#ifndef QSPI_PIN_CSN ++#define QSPI_PIN_CSN NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO0 - IO0 pin value. ++#ifndef QSPI_PIN_IO0 ++#define QSPI_PIN_IO0 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO1 - IO1 pin value. ++#ifndef QSPI_PIN_IO1 ++#define QSPI_PIN_IO1 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO2 - IO2 pin value. ++#ifndef QSPI_PIN_IO2 ++#define QSPI_PIN_IO2 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO3 - IO3 pin value. ++#ifndef QSPI_PIN_IO3 ++#define QSPI_PIN_IO3 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef QSPI_CONFIG_IRQ_PRIORITY ++#define QSPI_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ + // SPIS_ENABLED - nrf_drv_spis - SPIS peripheral driver - legacy layer + //========================================================== + #ifndef SPIS_ENABLED +@@ -4017,12 +4275,12 @@ + + // NRF_SDH_BLE_PERIPHERAL_LINK_COUNT - Maximum number of peripheral links. + #ifndef NRF_SDH_BLE_PERIPHERAL_LINK_COUNT +-#define NRF_SDH_BLE_PERIPHERAL_LINK_COUNT 0 ++#define NRF_SDH_BLE_PERIPHERAL_LINK_COUNT 8 + #endif + + // NRF_SDH_BLE_CENTRAL_LINK_COUNT - Maximum number of central links. + #ifndef NRF_SDH_BLE_CENTRAL_LINK_COUNT +-#define NRF_SDH_BLE_CENTRAL_LINK_COUNT 0 ++#define NRF_SDH_BLE_CENTRAL_LINK_COUNT 8 + #endif + + // NRF_SDH_BLE_TOTAL_LINK_COUNT - Total link count. +@@ -4323,132 +4581,6 @@ + #define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 + #endif + +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- + // NRF_BLE_BMS_BLE_OBSERVER_PRIO + // Priority with which BLE events are dispatched to the Bond Management Service. + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/ble_connectivity_s140_spi_5W_pca10056.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/ble_connectivity_s140_spi_5W_pca10056.emProject +index a95d1a5..44ff831 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/ble_connectivity_s140_spi_5W_pca10056.emProject ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/ble_connectivity_s140_spi_5W_pca10056.emProject +@@ -28,7 +28,7 @@ + linker_printf_fmt_level="long" + linker_section_placement_file="flash_placement.xml" + linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x100000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x40000;FLASH_START=0x26000;FLASH_SIZE=0xda000;RAM_START=0x2001ad58;RAM_SIZE=0x252a8" +- linker_section_placements_segments="FLASH RX 0x0 0x100000;RAM RWX 0x20000000 0x40000" ++ linker_section_placements_segments="FLASH RX 0x0 0x100000;RAM RWX 0x20000000 0x40000;connectivity_version_info RX 0x50000 0x18" + project_directory="" + project_type="Executable" /> + +@@ -119,6 +119,7 @@ + + + ++ + + + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/flash_placement.xml +index a801e6e..0708731 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_spi_5W/ses/flash_placement.xml +@@ -10,9 +10,9 @@ + + + ++ + + +- + + + +@@ -42,4 +42,7 @@ + + + ++ ++ ++ + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/Makefile nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/Makefile +index aad2de3..d3b8468 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/Makefile ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/Makefile +@@ -81,6 +81,7 @@ SRC_FILES += \ + $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_clock.c \ + $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power_clock.c \ + $(SDK_ROOT)/modules/nrfx/drivers/src/prs/nrfx_prs.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_qspi.c \ + $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uart.c \ + $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uarte.c \ + $(PROJ_DIR)/main.c \ +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/ble_connectivity_gcc_nrf52.ld +index d3acaad..a5e33ee 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/armgcc/ble_connectivity_gcc_nrf52.ld +@@ -7,10 +7,17 @@ MEMORY + { + FLASH (rx) : ORIGIN = 0x26000, LENGTH = 0xda000 + RAM (rwx) : ORIGIN = 0x2001ad58, LENGTH = 0x252a8 ++ connectivity_version_info (r) : ORIGIN = 0x50000, LENGTH = 0x18 + } + + SECTIONS + { ++ .connectivity_version_info : ++ { ++ PROVIDE(__start_connectivity_version_info = .); ++ KEEP(*(SORT(.connectivity_version_info*))) ++ PROVIDE(__stop_connectivity_version_info = .); ++ } > connectivity_version_info + } + + SECTIONS +@@ -63,6 +70,12 @@ SECTIONS + KEEP(*(SORT(.log_const_data*))) + PROVIDE(__stop_log_const_data = .); + } > FLASH ++ .sdh_state_observers : ++ { ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); ++ } > FLASH + .sdh_stack_observers : + { + PROVIDE(__start_sdh_stack_observers = .); +@@ -75,12 +88,6 @@ SECTIONS + KEEP(*(SORT(.sdh_req_observers*))) + PROVIDE(__stop_sdh_req_observers = .); + } > FLASH +- .sdh_state_observers : +- { +- PROVIDE(__start_sdh_state_observers = .); +- KEEP(*(SORT(.sdh_state_observers*))) +- PROVIDE(__stop_sdh_state_observers = .); +- } > FLASH + .log_backends : + { + PROVIDE(__start_log_backends = .); +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/config/sdk_config.h +index 36b0fe4..bc8c8d0 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/config/sdk_config.h ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/config/sdk_config.h +@@ -240,6 +240,134 @@ + + // + ++// NRFX_QSPI_ENABLED - nrfx_qspi - QSPI peripheral driver ++//========================================================== ++#ifndef NRFX_QSPI_ENABLED ++#define NRFX_QSPI_ENABLED 1 ++#endif ++// NRFX_QSPI_CONFIG_SCK_DELAY - tSHSL, tWHSL and tSHWL in number of 16 MHz periods (62.5 ns). <0-255> ++ ++ ++#ifndef NRFX_QSPI_CONFIG_SCK_DELAY ++#define NRFX_QSPI_CONFIG_SCK_DELAY 1 ++#endif ++ ++// NRFX_QSPI_CONFIG_XIP_OFFSET - Address offset in the external memory for Execute in Place operation. ++#ifndef NRFX_QSPI_CONFIG_XIP_OFFSET ++#define NRFX_QSPI_CONFIG_XIP_OFFSET 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_READOC - Number of data lines and opcode used for reading. ++ ++// <0=> FastRead ++// <1=> Read2O ++// <2=> Read2IO ++// <3=> Read4O ++// <4=> Read4IO ++ ++#ifndef NRFX_QSPI_CONFIG_READOC ++#define NRFX_QSPI_CONFIG_READOC 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_WRITEOC - Number of data lines and opcode used for writing. ++ ++// <0=> PP ++// <1=> PP2O ++// <2=> PP4O ++// <3=> PP4IO ++ ++#ifndef NRFX_QSPI_CONFIG_WRITEOC ++#define NRFX_QSPI_CONFIG_WRITEOC 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_ADDRMODE - Addressing mode. ++ ++// <0=> 24bit ++// <1=> 32bit ++ ++#ifndef NRFX_QSPI_CONFIG_ADDRMODE ++#define NRFX_QSPI_CONFIG_ADDRMODE 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_MODE - SPI mode. ++ ++// <0=> Mode 0 ++// <1=> Mode 1 ++ ++#ifndef NRFX_QSPI_CONFIG_MODE ++#define NRFX_QSPI_CONFIG_MODE 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_FREQUENCY - Frequency divider. ++ ++// <0=> 32MHz/1 ++// <1=> 32MHz/2 ++// <2=> 32MHz/3 ++// <3=> 32MHz/4 ++// <4=> 32MHz/5 ++// <5=> 32MHz/6 ++// <6=> 32MHz/7 ++// <7=> 32MHz/8 ++// <8=> 32MHz/9 ++// <9=> 32MHz/10 ++// <10=> 32MHz/11 ++// <11=> 32MHz/12 ++// <12=> 32MHz/13 ++// <13=> 32MHz/14 ++// <14=> 32MHz/15 ++// <15=> 32MHz/16 ++ ++#ifndef NRFX_QSPI_CONFIG_FREQUENCY ++#define NRFX_QSPI_CONFIG_FREQUENCY 15 ++#endif ++ ++// NRFX_QSPI_PIN_SCK - SCK pin value. ++#ifndef NRFX_QSPI_PIN_SCK ++#define NRFX_QSPI_PIN_SCK NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_CSN - CSN pin value. ++#ifndef NRFX_QSPI_PIN_CSN ++#define NRFX_QSPI_PIN_CSN NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO0 - IO0 pin value. ++#ifndef NRFX_QSPI_PIN_IO0 ++#define NRFX_QSPI_PIN_IO0 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO1 - IO1 pin value. ++#ifndef NRFX_QSPI_PIN_IO1 ++#define NRFX_QSPI_PIN_IO1 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO2 - IO2 pin value. ++#ifndef NRFX_QSPI_PIN_IO2 ++#define NRFX_QSPI_PIN_IO2 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO3 - IO3 pin value. ++#ifndef NRFX_QSPI_PIN_IO3 ++#define NRFX_QSPI_PIN_IO3 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef NRFX_QSPI_CONFIG_IRQ_PRIORITY ++#define NRFX_QSPI_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ + // NRFX_UARTE_ENABLED - nrfx_uarte - UARTE peripheral driver + //========================================================== + #ifndef NRFX_UARTE_ENABLED +@@ -523,6 +651,136 @@ + + // + ++// QSPI_ENABLED - nrf_drv_qspi - QSPI peripheral driver - legacy layer ++//========================================================== ++#ifndef QSPI_ENABLED ++#define QSPI_ENABLED 1 ++#endif ++// QSPI_CONFIG_SCK_DELAY - tSHSL, tWHSL and tSHWL in number of 16 MHz periods (62.5 ns). <0-255> ++ ++ ++#ifndef QSPI_CONFIG_SCK_DELAY ++#define QSPI_CONFIG_SCK_DELAY 1 ++#endif ++ ++// QSPI_CONFIG_XIP_OFFSET - Address offset in the external memory for Execute in Place operation. ++#ifndef QSPI_CONFIG_XIP_OFFSET ++#define QSPI_CONFIG_XIP_OFFSET 0 ++#endif ++ ++// QSPI_CONFIG_READOC - Number of data lines and opcode used for reading. ++ ++// <0=> FastRead ++// <1=> Read2O ++// <2=> Read2IO ++// <3=> Read4O ++// <4=> Read4IO ++ ++#ifndef QSPI_CONFIG_READOC ++#define QSPI_CONFIG_READOC 0 ++#endif ++ ++// QSPI_CONFIG_WRITEOC - Number of data lines and opcode used for writing. ++ ++// <0=> PP ++// <1=> PP2O ++// <2=> PP4O ++// <3=> PP4IO ++ ++#ifndef QSPI_CONFIG_WRITEOC ++#define QSPI_CONFIG_WRITEOC 0 ++#endif ++ ++// QSPI_CONFIG_ADDRMODE - Addressing mode. ++ ++// <0=> 24bit ++// <1=> 32bit ++ ++#ifndef QSPI_CONFIG_ADDRMODE ++#define QSPI_CONFIG_ADDRMODE 0 ++#endif ++ ++// QSPI_CONFIG_MODE - SPI mode. ++ ++// <0=> Mode 0 ++// <1=> Mode 1 ++ ++#ifndef QSPI_CONFIG_MODE ++#define QSPI_CONFIG_MODE 0 ++#endif ++ ++// QSPI_CONFIG_FREQUENCY - Frequency divider. ++ ++// <0=> 32MHz/1 ++// <1=> 32MHz/2 ++// <2=> 32MHz/3 ++// <3=> 32MHz/4 ++// <4=> 32MHz/5 ++// <5=> 32MHz/6 ++// <6=> 32MHz/7 ++// <7=> 32MHz/8 ++// <8=> 32MHz/9 ++// <9=> 32MHz/10 ++// <10=> 32MHz/11 ++// <11=> 32MHz/12 ++// <12=> 32MHz/13 ++// <13=> 32MHz/14 ++// <14=> 32MHz/15 ++// <15=> 32MHz/16 ++ ++#ifndef QSPI_CONFIG_FREQUENCY ++#define QSPI_CONFIG_FREQUENCY 15 ++#endif ++ ++// QSPI_PIN_SCK - SCK pin value. ++#ifndef QSPI_PIN_SCK ++#define QSPI_PIN_SCK NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_CSN - CSN pin value. ++#ifndef QSPI_PIN_CSN ++#define QSPI_PIN_CSN NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO0 - IO0 pin value. ++#ifndef QSPI_PIN_IO0 ++#define QSPI_PIN_IO0 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO1 - IO1 pin value. ++#ifndef QSPI_PIN_IO1 ++#define QSPI_PIN_IO1 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO2 - IO2 pin value. ++#ifndef QSPI_PIN_IO2 ++#define QSPI_PIN_IO2 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO3 - IO3 pin value. ++#ifndef QSPI_PIN_IO3 ++#define QSPI_PIN_IO3 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef QSPI_CONFIG_IRQ_PRIORITY ++#define QSPI_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ + // UART_ENABLED - nrf_drv_uart - UART/UARTE peripheral driver - legacy layer + //========================================================== + #ifndef UART_ENABLED +@@ -3723,12 +3981,12 @@ + + // NRF_SDH_BLE_PERIPHERAL_LINK_COUNT - Maximum number of peripheral links. + #ifndef NRF_SDH_BLE_PERIPHERAL_LINK_COUNT +-#define NRF_SDH_BLE_PERIPHERAL_LINK_COUNT 0 ++#define NRF_SDH_BLE_PERIPHERAL_LINK_COUNT 8 + #endif + + // NRF_SDH_BLE_CENTRAL_LINK_COUNT - Maximum number of central links. + #ifndef NRF_SDH_BLE_CENTRAL_LINK_COUNT +-#define NRF_SDH_BLE_CENTRAL_LINK_COUNT 0 ++#define NRF_SDH_BLE_CENTRAL_LINK_COUNT 8 + #endif + + // NRF_SDH_BLE_TOTAL_LINK_COUNT - Total link count. +@@ -4029,132 +4287,6 @@ + #define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 + #endif + +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- + // NRF_BLE_BMS_BLE_OBSERVER_PRIO + // Priority with which BLE events are dispatched to the Bond Management Service. + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/ble_connectivity_s140_uart_pca10056.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/ble_connectivity_s140_uart_pca10056.emProject +index 228cf40..29b2865 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/ble_connectivity_s140_uart_pca10056.emProject ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/ble_connectivity_s140_uart_pca10056.emProject +@@ -28,7 +28,7 @@ + linker_printf_fmt_level="long" + linker_section_placement_file="flash_placement.xml" + linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x100000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x40000;FLASH_START=0x26000;FLASH_SIZE=0xda000;RAM_START=0x2001ad58;RAM_SIZE=0x252a8" +- linker_section_placements_segments="FLASH RX 0x0 0x100000;RAM RWX 0x20000000 0x40000" ++ linker_section_placements_segments="FLASH RX 0x0 0x100000;RAM RWX 0x20000000 0x40000;connectivity_version_info RX 0x50000 0x18" + project_directory="" + project_type="Executable" /> + +@@ -117,6 +117,7 @@ + + + ++ + + + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/flash_placement.xml +index a801e6e..0708731 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_uart/ses/flash_placement.xml +@@ -10,9 +10,9 @@ + + + ++ + + +- + + + +@@ -42,4 +42,7 @@ + + + ++ ++ ++ + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/Makefile nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/Makefile +index 07cf7c6..b4c2628 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/Makefile ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/Makefile +@@ -25,6 +25,7 @@ SRC_FILES += \ + $(SDK_ROOT)/components/libraries/usbd/app_usbd.c \ + $(SDK_ROOT)/components/libraries/usbd/class/cdc/acm/app_usbd_cdc_acm.c \ + $(SDK_ROOT)/components/libraries/usbd/app_usbd_core.c \ ++ $(SDK_ROOT)/components/libraries/usbd/class/nrf_dfu_trigger/app_usbd_nrf_dfu_trigger.c \ + $(SDK_ROOT)/components/libraries/usbd/app_usbd_serial_num.c \ + $(SDK_ROOT)/components/libraries/usbd/app_usbd_string_desc.c \ + $(SDK_ROOT)/components/libraries/util/app_util_platform.c \ +@@ -42,6 +43,7 @@ SRC_FILES += \ + $(SDK_ROOT)/components/libraries/strerror/nrf_strerror.c \ + $(SDK_ROOT)/modules/nrfx/mdk/system_nrf52840.c \ + $(SDK_ROOT)/components/boards/boards.c \ ++ $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.c \ + $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_conn.c \ + $(SDK_ROOT)/components/serialization/connectivity/codecs/common/ble_dtm_init.c \ + $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_event_enc.c \ +@@ -94,6 +96,7 @@ SRC_FILES += \ + $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power.c \ + $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power_clock.c \ + $(SDK_ROOT)/modules/nrfx/drivers/src/prs/nrfx_prs.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_qspi.c \ + $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uart.c \ + $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uarte.c \ + $(PROJ_DIR)/main.c \ +@@ -123,7 +126,7 @@ INC_FOLDERS += \ + $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware \ + $(SDK_ROOT)/integration/nrfx/legacy \ + $(SDK_ROOT)/components/libraries/crc16 \ +- $(SDK_ROOT)/components/ble/ble_dtm \ ++ $(SDK_ROOT)/components/libraries/bootloader/dfu \ + $(SDK_ROOT)/components/serialization/common \ + $(SDK_ROOT)/components/libraries/util \ + $(SDK_ROOT)/components/libraries/usbd/class/cdc/acm \ +@@ -145,15 +148,18 @@ INC_FOLDERS += \ + $(SDK_ROOT)/components/libraries/delay \ + $(SDK_ROOT)/external/segger_rtt \ + $(SDK_ROOT)/components/libraries/atomic_fifo \ ++ $(SDK_ROOT)/components/ble/ble_dtm \ + $(SDK_ROOT)/components/libraries/atomic \ + $(SDK_ROOT)/components/boards \ + $(SDK_ROOT)/components/libraries/memobj \ + $(SDK_ROOT)/components/serialization/common/struct_ser/ble \ + $(SDK_ROOT)/integration/nrfx \ ++ $(SDK_ROOT)/components/libraries/usbd/class/nrf_dfu_trigger \ + $(SDK_ROOT)/components/serialization/common/transport \ + $(SDK_ROOT)/components/softdevice/common \ + $(SDK_ROOT)/components/softdevice/s140/headers/nrf52 \ + $(SDK_ROOT)/modules/nrfx/drivers/include \ ++ $(SDK_ROOT)/components/libraries/block_dev \ + $(SDK_ROOT)/external/fprintf \ + $(SDK_ROOT)/components/libraries/log/src \ + +@@ -177,6 +183,7 @@ CFLAGS += -DNRF52840_XXAA + CFLAGS += -DNRF_SD_BLE_API_VERSION=6 + CFLAGS += -DS140 + CFLAGS += -DSER_CONNECTIVITY ++CFLAGS += -DSER_PHY_HCI_USB_CDC + CFLAGS += -DSOFTDEVICE_PRESENT + CFLAGS += -DSWI_DISABLE0 + CFLAGS += -mcpu=cortex-m4 +@@ -205,6 +212,7 @@ ASMFLAGS += -DNRF52840_XXAA + ASMFLAGS += -DNRF_SD_BLE_API_VERSION=6 + ASMFLAGS += -DS140 + ASMFLAGS += -DSER_CONNECTIVITY ++ASMFLAGS += -DSER_PHY_HCI_USB_CDC + ASMFLAGS += -DSOFTDEVICE_PRESENT + ASMFLAGS += -DSWI_DISABLE0 + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld +index b877f5a..f354cbc 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld +@@ -7,10 +7,17 @@ MEMORY + { + FLASH (rx) : ORIGIN = 0x26000, LENGTH = 0xda000 + RAM (rwx) : ORIGIN = 0x2001ad58, LENGTH = 0x252a8 ++ connectivity_version_info (r) : ORIGIN = 0x50000, LENGTH = 0x18 + } + + SECTIONS + { ++ .connectivity_version_info : ++ { ++ PROVIDE(__start_connectivity_version_info = .); ++ KEEP(*(SORT(.connectivity_version_info*))) ++ PROVIDE(__stop_connectivity_version_info = .); ++ } > connectivity_version_info + } + + SECTIONS +@@ -69,6 +76,12 @@ SECTIONS + KEEP(*(.nrf_balloc)) + PROVIDE(__stop_nrf_balloc = .); + } > FLASH ++ .sdh_state_observers : ++ { ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); ++ } > FLASH + .sdh_stack_observers : + { + PROVIDE(__start_sdh_stack_observers = .); +@@ -81,12 +94,6 @@ SECTIONS + KEEP(*(SORT(.sdh_req_observers*))) + PROVIDE(__stop_sdh_req_observers = .); + } > FLASH +- .sdh_state_observers : +- { +- PROVIDE(__start_sdh_state_observers = .); +- KEEP(*(SORT(.sdh_state_observers*))) +- PROVIDE(__stop_sdh_state_observers = .); +- } > FLASH + .log_backends : + { + PROVIDE(__start_log_backends = .); +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/config/sdk_config.h +index 994863b..14a8586 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/config/sdk_config.h ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/config/sdk_config.h +@@ -46,6 +46,102 @@ + #ifdef USE_APP_CONFIG + #include "app_config.h" + #endif ++// Application ++ ++//========================================================== ++// application_info - Software Component ++ ++//========================================================== ++// APP_NAME - Application name ++#ifndef APP_NAME ++#define APP_NAME "ble-connectivity" ++#endif ++ ++// APP_ID - Application ID ++#ifndef APP_ID ++#define APP_ID 0 ++#endif ++ ++// APP_VERSION - Application version (semantic versioning) ++ ++//========================================================== ++// APP_VERSION_MAJOR - Major version <0-1000> ++ ++ ++#ifndef APP_VERSION_MAJOR ++#define APP_VERSION_MAJOR 0 ++#endif ++ ++// APP_VERSION_MINOR - Minor version <0-1000> ++ ++ ++#ifndef APP_VERSION_MINOR ++#define APP_VERSION_MINOR 1 ++#endif ++ ++// APP_VERSION_PATCH - Patch version <0-1000> ++ ++ ++#ifndef APP_VERSION_PATCH ++#define APP_VERSION_PATCH 0 ++#endif ++ ++// APP_VERSION_PRERELEASE - Prerelease, eg. "-1.alpha" ++ ++// If not empty, this string should include the leading hyphen (-). ++// This string might be normalized at run-time to not contain characters ++// illegal in Semantic Versioning. ++#ifndef APP_VERSION_PRERELEASE ++#define APP_VERSION_PRERELEASE "" ++#endif ++ ++// APP_VERSION_METADATA - Metadata, e.g. "+some-string.01-01-2018-23-59-59" ++ ++// If not empty, this string should include the leading plus (+). ++// This string might be normalized at run-time to not contain characters ++// illegal in Semantic Versioning. ++#ifndef APP_VERSION_METADATA ++#define APP_VERSION_METADATA "+" __DATE__ " " __TIME__ ++#endif ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++// Board Definition ++ ++//========================================================== ++// nrf_dfu_trigger_usb - USB DFU Trigger library ++ ++//========================================================== ++// NRF_DFU_TRIGGER_USB_USB_SHARED - Flag indicating whether USB is used for other purposes in the application. ++ ++ ++#ifndef NRF_DFU_TRIGGER_USB_USB_SHARED ++#define NRF_DFU_TRIGGER_USB_USB_SHARED 1 ++#endif ++ ++// NRF_DFU_TRIGGER_USB_INTERFACE_NUM - The USB interface to use for the DFU Trigger library. <0-255> ++ ++ ++// According to the USB Specification, interface numbers cannot have ++// gaps. Tailor this value to adhere to this limitation. ++ ++#ifndef NRF_DFU_TRIGGER_USB_INTERFACE_NUM ++#define NRF_DFU_TRIGGER_USB_INTERFACE_NUM 0 ++#endif ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ + // nRF_BLE + + //========================================================== +@@ -280,6 +376,134 @@ + + // + ++// NRFX_QSPI_ENABLED - nrfx_qspi - QSPI peripheral driver ++//========================================================== ++#ifndef NRFX_QSPI_ENABLED ++#define NRFX_QSPI_ENABLED 1 ++#endif ++// NRFX_QSPI_CONFIG_SCK_DELAY - tSHSL, tWHSL and tSHWL in number of 16 MHz periods (62.5 ns). <0-255> ++ ++ ++#ifndef NRFX_QSPI_CONFIG_SCK_DELAY ++#define NRFX_QSPI_CONFIG_SCK_DELAY 1 ++#endif ++ ++// NRFX_QSPI_CONFIG_XIP_OFFSET - Address offset in the external memory for Execute in Place operation. ++#ifndef NRFX_QSPI_CONFIG_XIP_OFFSET ++#define NRFX_QSPI_CONFIG_XIP_OFFSET 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_READOC - Number of data lines and opcode used for reading. ++ ++// <0=> FastRead ++// <1=> Read2O ++// <2=> Read2IO ++// <3=> Read4O ++// <4=> Read4IO ++ ++#ifndef NRFX_QSPI_CONFIG_READOC ++#define NRFX_QSPI_CONFIG_READOC 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_WRITEOC - Number of data lines and opcode used for writing. ++ ++// <0=> PP ++// <1=> PP2O ++// <2=> PP4O ++// <3=> PP4IO ++ ++#ifndef NRFX_QSPI_CONFIG_WRITEOC ++#define NRFX_QSPI_CONFIG_WRITEOC 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_ADDRMODE - Addressing mode. ++ ++// <0=> 24bit ++// <1=> 32bit ++ ++#ifndef NRFX_QSPI_CONFIG_ADDRMODE ++#define NRFX_QSPI_CONFIG_ADDRMODE 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_MODE - SPI mode. ++ ++// <0=> Mode 0 ++// <1=> Mode 1 ++ ++#ifndef NRFX_QSPI_CONFIG_MODE ++#define NRFX_QSPI_CONFIG_MODE 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_FREQUENCY - Frequency divider. ++ ++// <0=> 32MHz/1 ++// <1=> 32MHz/2 ++// <2=> 32MHz/3 ++// <3=> 32MHz/4 ++// <4=> 32MHz/5 ++// <5=> 32MHz/6 ++// <6=> 32MHz/7 ++// <7=> 32MHz/8 ++// <8=> 32MHz/9 ++// <9=> 32MHz/10 ++// <10=> 32MHz/11 ++// <11=> 32MHz/12 ++// <12=> 32MHz/13 ++// <13=> 32MHz/14 ++// <14=> 32MHz/15 ++// <15=> 32MHz/16 ++ ++#ifndef NRFX_QSPI_CONFIG_FREQUENCY ++#define NRFX_QSPI_CONFIG_FREQUENCY 15 ++#endif ++ ++// NRFX_QSPI_PIN_SCK - SCK pin value. ++#ifndef NRFX_QSPI_PIN_SCK ++#define NRFX_QSPI_PIN_SCK NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_CSN - CSN pin value. ++#ifndef NRFX_QSPI_PIN_CSN ++#define NRFX_QSPI_PIN_CSN NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO0 - IO0 pin value. ++#ifndef NRFX_QSPI_PIN_IO0 ++#define NRFX_QSPI_PIN_IO0 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO1 - IO1 pin value. ++#ifndef NRFX_QSPI_PIN_IO1 ++#define NRFX_QSPI_PIN_IO1 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO2 - IO2 pin value. ++#ifndef NRFX_QSPI_PIN_IO2 ++#define NRFX_QSPI_PIN_IO2 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO3 - IO3 pin value. ++#ifndef NRFX_QSPI_PIN_IO3 ++#define NRFX_QSPI_PIN_IO3 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef NRFX_QSPI_CONFIG_IRQ_PRIORITY ++#define NRFX_QSPI_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ + // NRFX_UARTE_ENABLED - nrfx_uarte - UARTE peripheral driver + //========================================================== + #ifndef NRFX_UARTE_ENABLED +@@ -605,6 +829,136 @@ + + // + ++// QSPI_ENABLED - nrf_drv_qspi - QSPI peripheral driver - legacy layer ++//========================================================== ++#ifndef QSPI_ENABLED ++#define QSPI_ENABLED 1 ++#endif ++// QSPI_CONFIG_SCK_DELAY - tSHSL, tWHSL and tSHWL in number of 16 MHz periods (62.5 ns). <0-255> ++ ++ ++#ifndef QSPI_CONFIG_SCK_DELAY ++#define QSPI_CONFIG_SCK_DELAY 1 ++#endif ++ ++// QSPI_CONFIG_XIP_OFFSET - Address offset in the external memory for Execute in Place operation. ++#ifndef QSPI_CONFIG_XIP_OFFSET ++#define QSPI_CONFIG_XIP_OFFSET 0 ++#endif ++ ++// QSPI_CONFIG_READOC - Number of data lines and opcode used for reading. ++ ++// <0=> FastRead ++// <1=> Read2O ++// <2=> Read2IO ++// <3=> Read4O ++// <4=> Read4IO ++ ++#ifndef QSPI_CONFIG_READOC ++#define QSPI_CONFIG_READOC 0 ++#endif ++ ++// QSPI_CONFIG_WRITEOC - Number of data lines and opcode used for writing. ++ ++// <0=> PP ++// <1=> PP2O ++// <2=> PP4O ++// <3=> PP4IO ++ ++#ifndef QSPI_CONFIG_WRITEOC ++#define QSPI_CONFIG_WRITEOC 0 ++#endif ++ ++// QSPI_CONFIG_ADDRMODE - Addressing mode. ++ ++// <0=> 24bit ++// <1=> 32bit ++ ++#ifndef QSPI_CONFIG_ADDRMODE ++#define QSPI_CONFIG_ADDRMODE 0 ++#endif ++ ++// QSPI_CONFIG_MODE - SPI mode. ++ ++// <0=> Mode 0 ++// <1=> Mode 1 ++ ++#ifndef QSPI_CONFIG_MODE ++#define QSPI_CONFIG_MODE 0 ++#endif ++ ++// QSPI_CONFIG_FREQUENCY - Frequency divider. ++ ++// <0=> 32MHz/1 ++// <1=> 32MHz/2 ++// <2=> 32MHz/3 ++// <3=> 32MHz/4 ++// <4=> 32MHz/5 ++// <5=> 32MHz/6 ++// <6=> 32MHz/7 ++// <7=> 32MHz/8 ++// <8=> 32MHz/9 ++// <9=> 32MHz/10 ++// <10=> 32MHz/11 ++// <11=> 32MHz/12 ++// <12=> 32MHz/13 ++// <13=> 32MHz/14 ++// <14=> 32MHz/15 ++// <15=> 32MHz/16 ++ ++#ifndef QSPI_CONFIG_FREQUENCY ++#define QSPI_CONFIG_FREQUENCY 15 ++#endif ++ ++// QSPI_PIN_SCK - SCK pin value. ++#ifndef QSPI_PIN_SCK ++#define QSPI_PIN_SCK NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_CSN - CSN pin value. ++#ifndef QSPI_PIN_CSN ++#define QSPI_PIN_CSN NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO0 - IO0 pin value. ++#ifndef QSPI_PIN_IO0 ++#define QSPI_PIN_IO0 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO1 - IO1 pin value. ++#ifndef QSPI_PIN_IO1 ++#define QSPI_PIN_IO1 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO2 - IO2 pin value. ++#ifndef QSPI_PIN_IO2 ++#define QSPI_PIN_IO2 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO3 - IO3 pin value. ++#ifndef QSPI_PIN_IO3 ++#define QSPI_PIN_IO3 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef QSPI_CONFIG_IRQ_PRIORITY ++#define QSPI_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ + // UART_ENABLED - nrf_drv_uart - UART/UARTE peripheral driver - legacy layer + //========================================================== + #ifndef UART_ENABLED +@@ -901,7 +1255,7 @@ + // Note: This value is not editable in Configuration Wizard. + // Selected Product ID + #ifndef APP_USBD_PID +-#define APP_USBD_PID 0x521B ++#define APP_USBD_PID 0xC00A + #endif + + // APP_USBD_DEVICE_VER_MAJOR - Device version, major part. <0-99> +@@ -1144,6 +1498,13 @@ + + // + ++// APP_USBD_NRF_DFU_TRIGGER_ENABLED - app_usbd_nrf_dfu_trigger - USBD Nordic DFU Trigger class ++ ++ ++#ifndef APP_USBD_NRF_DFU_TRIGGER_ENABLED ++#define APP_USBD_NRF_DFU_TRIGGER_ENABLED 1 ++#endif ++ + // CRC16_ENABLED - crc16 - CRC16 calculation routines + + +@@ -4261,12 +4622,12 @@ + + // NRF_SDH_BLE_PERIPHERAL_LINK_COUNT - Maximum number of peripheral links. + #ifndef NRF_SDH_BLE_PERIPHERAL_LINK_COUNT +-#define NRF_SDH_BLE_PERIPHERAL_LINK_COUNT 0 ++#define NRF_SDH_BLE_PERIPHERAL_LINK_COUNT 8 + #endif + + // NRF_SDH_BLE_CENTRAL_LINK_COUNT - Maximum number of central links. + #ifndef NRF_SDH_BLE_CENTRAL_LINK_COUNT +-#define NRF_SDH_BLE_CENTRAL_LINK_COUNT 0 ++#define NRF_SDH_BLE_CENTRAL_LINK_COUNT 8 + #endif + + // NRF_SDH_BLE_TOTAL_LINK_COUNT - Total link count. +@@ -4567,132 +4928,6 @@ + #define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 + #endif + +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- + // NRF_BLE_BMS_BLE_OBSERVER_PRIO + // Priority with which BLE events are dispatched to the Bond Management Service. + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10056.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10056.emProject +index 571ebbb..6be7f69 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10056.emProject ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10056.emProject +@@ -15,8 +15,8 @@ + arm_simulator_memory_simulation_parameter="RWX 00000000,00100000,FFFFFFFF;RWX 20000000,00010000,CDCDCDCD" + arm_target_device_name="nRF52840_xxAA" + arm_target_interface_type="SWD" +- c_user_include_directories="../../../config;../../../../../../components;../../../../../../components/ble/ble_dtm;../../../../../../components/boards;../../../../../../components/drivers_nrf/usbd;../../../../../../components/libraries/atomic;../../../../../../components/libraries/atomic_fifo;../../../../../../components/libraries/balloc;../../../../../../components/libraries/bsp;../../../../../../components/libraries/crc16;../../../../../../components/libraries/delay;../../../../../../components/libraries/experimental_section_vars;../../../../../../components/libraries/log;../../../../../../components/libraries/log/src;../../../../../../components/libraries/memobj;../../../../../../components/libraries/queue;../../../../../../components/libraries/ringbuf;../../../../../../components/libraries/scheduler;../../../../../../components/libraries/strerror;../../../../../../components/libraries/timer;../../../../../../components/libraries/usbd;../../../../../../components/libraries/usbd/class/cdc;../../../../../../components/libraries/usbd/class/cdc/acm;../../../../../../components/libraries/util;../../../../../../components/serialization/common;../../../../../../components/serialization/common/struct_ser/ble;../../../../../../components/serialization/common/transport;../../../../../../components/serialization/common/transport/ser_phy;../../../../../../components/serialization/common/transport/ser_phy/config;../../../../../../components/serialization/connectivity;../../../../../../components/serialization/connectivity/codecs/ble/middleware;../../../../../../components/serialization/connectivity/codecs/ble/serializers;../../../../../../components/serialization/connectivity/codecs/common;../../../../../../components/serialization/connectivity/hal;../../../../../../components/softdevice/common;../../../../../../components/softdevice/s140/headers;../../../../../../components/softdevice/s140/headers/nrf52;../../../../../../components/toolchain/cmsis/include;../../../../../../external/fprintf;../../../../../../external/segger_rtt;../../../../../../external/utf_converter;../../../../../../integration/nrfx;../../../../../../integration/nrfx/legacy;../../../../../../modules/nrfx;../../../../../../modules/nrfx/drivers/include;../../../../../../modules/nrfx/hal;../../../../../../modules/nrfx/mdk;../config;" +- c_preprocessor_definitions="BLE_STACK_SUPPORT_REQD;BOARD_PCA10056;BSP_DEFINES_ONLY;CONFIG_GPIO_AS_PINRESET;FLOAT_ABI_HARD;HCI_TIMER2;INITIALIZE_USER_SECTIONS;NO_VTOR_CONFIG;NRF52840_XXAA;NRF_SD_BLE_API_VERSION=6;S140;SER_CONNECTIVITY;SOFTDEVICE_PRESENT;SWI_DISABLE0;" ++ c_user_include_directories="../../../config;../../../../../../components;../../../../../../components/ble/ble_dtm;../../../../../../components/boards;../../../../../../components/drivers_nrf/usbd;../../../../../../components/libraries/atomic;../../../../../../components/libraries/atomic_fifo;../../../../../../components/libraries/balloc;../../../../../../components/libraries/block_dev;../../../../../../components/libraries/bootloader/dfu;../../../../../../components/libraries/bsp;../../../../../../components/libraries/crc16;../../../../../../components/libraries/delay;../../../../../../components/libraries/experimental_section_vars;../../../../../../components/libraries/log;../../../../../../components/libraries/log/src;../../../../../../components/libraries/memobj;../../../../../../components/libraries/queue;../../../../../../components/libraries/ringbuf;../../../../../../components/libraries/scheduler;../../../../../../components/libraries/strerror;../../../../../../components/libraries/timer;../../../../../../components/libraries/usbd;../../../../../../components/libraries/usbd/class/cdc;../../../../../../components/libraries/usbd/class/cdc/acm;../../../../../../components/libraries/usbd/class/nrf_dfu_trigger;../../../../../../components/libraries/util;../../../../../../components/serialization/common;../../../../../../components/serialization/common/struct_ser/ble;../../../../../../components/serialization/common/transport;../../../../../../components/serialization/common/transport/ser_phy;../../../../../../components/serialization/common/transport/ser_phy/config;../../../../../../components/serialization/connectivity;../../../../../../components/serialization/connectivity/codecs/ble/middleware;../../../../../../components/serialization/connectivity/codecs/ble/serializers;../../../../../../components/serialization/connectivity/codecs/common;../../../../../../components/serialization/connectivity/hal;../../../../../../components/softdevice/common;../../../../../../components/softdevice/s140/headers;../../../../../../components/softdevice/s140/headers/nrf52;../../../../../../components/toolchain/cmsis/include;../../../../../../external/fprintf;../../../../../../external/segger_rtt;../../../../../../external/utf_converter;../../../../../../integration/nrfx;../../../../../../integration/nrfx/legacy;../../../../../../modules/nrfx;../../../../../../modules/nrfx/drivers/include;../../../../../../modules/nrfx/hal;../../../../../../modules/nrfx/mdk;../config;" ++ c_preprocessor_definitions="BLE_STACK_SUPPORT_REQD;BOARD_PCA10056;BSP_DEFINES_ONLY;CONFIG_GPIO_AS_PINRESET;FLOAT_ABI_HARD;HCI_TIMER2;INITIALIZE_USER_SECTIONS;NO_VTOR_CONFIG;NRF52840_XXAA;NRF_SD_BLE_API_VERSION=6;S140;SER_CONNECTIVITY;SER_PHY_HCI_USB_CDC;SOFTDEVICE_PRESENT;SWI_DISABLE0;" + debug_target_connection="J-Link" + gcc_entry_point="Reset_Handler" + macros="CMSIS_CONFIG_TOOL=../../../../../../external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar" +@@ -28,7 +28,7 @@ + linker_printf_fmt_level="long" + linker_section_placement_file="flash_placement.xml" + linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x100000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x40000;FLASH_START=0x26000;FLASH_SIZE=0xda000;RAM_START=0x2001ad58;RAM_SIZE=0x252a8" +- linker_section_placements_segments="FLASH RX 0x0 0x100000;RAM RWX 0x20000000 0x40000" ++ linker_section_placements_segments="FLASH RX 0x0 0x100000;RAM RWX 0x20000000 0x40000;connectivity_version_info RX 0x50000 0x18" + project_directory="" + project_type="Executable" /> + +@@ -51,6 +51,7 @@ + + + ++ + + + +@@ -74,6 +75,7 @@ + + + ++ + + + +@@ -130,6 +132,7 @@ + + + ++ + + + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/flash_placement.xml +index 6b7653b..c9cc513 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10056/ser_s140_usb_hci/ses/flash_placement.xml +@@ -11,9 +11,9 @@ + + + ++ + + +- + + + +@@ -43,4 +43,7 @@ + + + ++ ++ ++ + +diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/Makefile nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/Makefile +new file mode 100644 +index 0000000..b704d10 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/Makefile +@@ -0,0 +1,282 @@ ++PROJECT_NAME := ble_connectivity_132v3_usb_hci_pca10059 ++TARGETS := nrf52840_xxaa ++OUTPUT_DIRECTORY := _build ++ ++SDK_ROOT := ../../../../../.. ++PROJ_DIR := ../../.. ++ ++$(OUTPUT_DIRECTORY)/nrf52840_xxaa.out: \ ++ LINKER_SCRIPT := ble_connectivity_gcc_nrf52.ld ++ ++# Source files common to all targets ++SRC_FILES += \ ++ $(SDK_ROOT)/modules/nrfx/mdk/gcc_startup_nrf52840.S \ ++ $(SDK_ROOT)/components/libraries/log/src/nrf_log_backend_rtt.c \ ++ $(SDK_ROOT)/components/libraries/log/src/nrf_log_backend_serial.c \ ++ $(SDK_ROOT)/components/libraries/log/src/nrf_log_backend_uart.c \ ++ $(SDK_ROOT)/components/libraries/log/src/nrf_log_default_backends.c \ ++ $(SDK_ROOT)/components/libraries/log/src/nrf_log_frontend.c \ ++ $(SDK_ROOT)/components/libraries/log/src/nrf_log_str_formatter.c \ ++ $(SDK_ROOT)/components/libraries/util/app_error.c \ ++ $(SDK_ROOT)/components/libraries/util/app_error_handler_gcc.c \ ++ $(SDK_ROOT)/components/libraries/util/app_error_weak.c \ ++ $(SDK_ROOT)/components/libraries/scheduler/app_scheduler.c \ ++ $(SDK_ROOT)/components/libraries/timer/app_timer.c \ ++ $(SDK_ROOT)/components/libraries/usbd/app_usbd.c \ ++ $(SDK_ROOT)/components/libraries/usbd/class/cdc/acm/app_usbd_cdc_acm.c \ ++ $(SDK_ROOT)/components/libraries/usbd/app_usbd_core.c \ ++ $(SDK_ROOT)/components/libraries/usbd/class/nrf_dfu_trigger/app_usbd_nrf_dfu_trigger.c \ ++ $(SDK_ROOT)/components/libraries/usbd/app_usbd_serial_num.c \ ++ $(SDK_ROOT)/components/libraries/usbd/app_usbd_string_desc.c \ ++ $(SDK_ROOT)/components/libraries/util/app_util_platform.c \ ++ $(SDK_ROOT)/components/libraries/crc16/crc16.c \ ++ $(SDK_ROOT)/components/libraries/util/nrf_assert.c \ ++ $(SDK_ROOT)/components/libraries/atomic_fifo/nrf_atfifo.c \ ++ $(SDK_ROOT)/components/libraries/atomic/nrf_atomic.c \ ++ $(SDK_ROOT)/components/libraries/balloc/nrf_balloc.c \ ++ $(SDK_ROOT)/external/fprintf/nrf_fprintf.c \ ++ $(SDK_ROOT)/external/fprintf/nrf_fprintf_format.c \ ++ $(SDK_ROOT)/components/libraries/memobj/nrf_memobj.c \ ++ $(SDK_ROOT)/components/libraries/queue/nrf_queue.c \ ++ $(SDK_ROOT)/components/libraries/ringbuf/nrf_ringbuf.c \ ++ $(SDK_ROOT)/components/libraries/experimental_section_vars/nrf_section_iter.c \ ++ $(SDK_ROOT)/components/libraries/strerror/nrf_strerror.c \ ++ $(SDK_ROOT)/modules/nrfx/mdk/system_nrf52840.c \ ++ $(SDK_ROOT)/components/boards/boards.c \ ++ $(SDK_ROOT)/components/libraries/bootloader/dfu/nrf_dfu_trigger_usb.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_conn.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/common/ble_dtm_init.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_event_enc.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_evt_conn.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gap_conn.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gap_evt_conn.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_gap_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_gatt_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gattc_conn.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gattc_evt_conn.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_gattc_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gatts_conn.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_gatts_evt_conn.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_gatts_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_l2cap_conn.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/ble_l2cap_evt_conn.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_l2cap_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/common/ble_serialization.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/ble_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/common/cond_field_serialization.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/conn_ble_l2cap_sdu_pool.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/common/conn_mw.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gap.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gattc.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_gatts.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble_l2cap.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/common/conn_mw_nrf_soc.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/hal/dtm_uart.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers/nrf_soc_conn.c \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble/nrf_soc_struct_serialization.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_cmd_decoder.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_dtm_cmd_decoder.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_error_handling.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_event_encoder.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_handlers.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_pkt_decoder.c \ ++ $(SDK_ROOT)/components/serialization/connectivity/ser_conn_reset_cmd_decoder.c \ ++ $(SDK_ROOT)/components/serialization/common/ser_dbg_sd_str.c \ ++ $(SDK_ROOT)/components/serialization/common/transport/ser_hal_transport.c \ ++ $(SDK_ROOT)/components/serialization/common/transport/ser_phy/ser_phy_hci.c \ ++ $(SDK_ROOT)/components/serialization/common/transport/ser_phy/ser_phy_hci_slip_cdc.c \ ++ $(SDK_ROOT)/integration/nrfx/legacy/nrf_drv_clock.c \ ++ $(SDK_ROOT)/integration/nrfx/legacy/nrf_drv_power.c \ ++ $(SDK_ROOT)/integration/nrfx/legacy/nrf_drv_uart.c \ ++ $(SDK_ROOT)/components/drivers_nrf/usbd/nrf_drv_usbd.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_clock.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power_clock.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/prs/nrfx_prs.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_qspi.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uart.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uarte.c \ ++ $(PROJ_DIR)/main.c \ ++ $(SDK_ROOT)/external/segger_rtt/SEGGER_RTT.c \ ++ $(SDK_ROOT)/external/segger_rtt/SEGGER_RTT_Syscalls_GCC.c \ ++ $(SDK_ROOT)/external/segger_rtt/SEGGER_RTT_printf.c \ ++ $(SDK_ROOT)/components/ble/common/ble_advdata.c \ ++ $(SDK_ROOT)/components/ble/ble_dtm/ble_dtm.c \ ++ $(SDK_ROOT)/components/ble/ble_dtm/ble_dtm_hw_nrf52.c \ ++ $(SDK_ROOT)/components/ble/common/ble_srv_common.c \ ++ $(SDK_ROOT)/external/utf_converter/utf.c \ ++ $(SDK_ROOT)/components/softdevice/common/nrf_sdh.c \ ++ $(SDK_ROOT)/components/softdevice/common/nrf_sdh_ble.c \ ++ $(SDK_ROOT)/components/softdevice/common/nrf_sdh_soc.c \ ++ ++# Include folders common to all targets ++INC_FOLDERS += \ ++ $(SDK_ROOT)/components \ ++ $(SDK_ROOT)/components/serialization/connectivity/hal \ ++ $(SDK_ROOT)/modules/nrfx/mdk \ ++ $(SDK_ROOT)/components/libraries/scheduler \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/serializers \ ++ $(SDK_ROOT)/components/toolchain/cmsis/include \ ++ $(SDK_ROOT)/components/libraries/queue \ ++ $(SDK_ROOT)/components/libraries/timer \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/common \ ++ $(SDK_ROOT)/components/serialization/connectivity \ ++ $(SDK_ROOT)/components/libraries/strerror \ ++ $(SDK_ROOT)/components/serialization/connectivity/codecs/ble/middleware \ ++ $(SDK_ROOT)/components/libraries/crc16 \ ++ $(SDK_ROOT)/components/libraries/bootloader/dfu \ ++ $(SDK_ROOT)/components/serialization/common \ ++ $(SDK_ROOT)/components/libraries/util \ ++ $(SDK_ROOT)/components/libraries/usbd/class/cdc/acm \ ++ ../config \ ++ $(SDK_ROOT)/components/libraries/usbd/class/cdc \ ++ $(SDK_ROOT)/components/ble/common \ ++ $(SDK_ROOT)/integration/nrfx \ ++ $(SDK_ROOT)/components/libraries/balloc \ ++ $(SDK_ROOT)/components/drivers_nrf/usbd \ ++ $(SDK_ROOT)/components/libraries/ringbuf \ ++ $(SDK_ROOT)/modules/nrfx/hal \ ++ $(SDK_ROOT)/components/libraries/bsp \ ++ $(SDK_ROOT)/components/softdevice/s132v3/headers/nrf52 \ ++ $(SDK_ROOT)/components/libraries/log \ ++ $(SDK_ROOT)/external/utf_converter \ ++ $(SDK_ROOT)/modules/nrfx \ ++ $(SDK_ROOT)/components/libraries/experimental_section_vars \ ++ $(SDK_ROOT)/integration/nrfx/legacy \ ++ $(SDK_ROOT)/components/serialization/common/transport/ser_phy \ ++ $(SDK_ROOT)/components/libraries/usbd \ ++ $(SDK_ROOT)/components/libraries/delay \ ++ $(SDK_ROOT)/external/segger_rtt \ ++ $(SDK_ROOT)/components/libraries/atomic_fifo \ ++ $(SDK_ROOT)/components/ble/ble_dtm \ ++ $(SDK_ROOT)/components/libraries/atomic \ ++ $(SDK_ROOT)/components/boards \ ++ $(SDK_ROOT)/components/libraries/memobj \ ++ $(SDK_ROOT)/components/serialization/common/struct_ser/ble \ ++ $(SDK_ROOT)/components/softdevice/s132v3/headers \ ++ $(SDK_ROOT)/components/libraries/usbd/class/nrf_dfu_trigger \ ++ $(SDK_ROOT)/components/serialization/common/transport \ ++ $(SDK_ROOT)/components/softdevice/common \ ++ $(SDK_ROOT)/components/serialization/common/transport/ser_phy/config \ ++ $(SDK_ROOT)/modules/nrfx/drivers/include \ ++ $(SDK_ROOT)/components/libraries/block_dev \ ++ $(SDK_ROOT)/external/fprintf \ ++ $(SDK_ROOT)/components/libraries/log/src \ ++ ++# Libraries common to all targets ++LIB_FILES += \ ++ ++# Optimization flags ++OPT = -Os -g3 ++# Uncomment the line below to enable link time optimization ++#OPT += -flto ++ ++# C flags common to all targets ++CFLAGS += $(OPT) ++CFLAGS += -DBLE_STACK_SUPPORT_REQD ++CFLAGS += -DBOARD_PCA10059 ++CFLAGS += -DBSP_DEFINES_ONLY ++CFLAGS += -DCONFIG_GPIO_AS_PINRESET ++CFLAGS += -DFLOAT_ABI_HARD ++CFLAGS += -DHCI_TIMER2 ++CFLAGS += -DNRF52840_XXAA ++CFLAGS += -DNRF_SD_BLE_API_VERSION=3 ++CFLAGS += -DS132 ++CFLAGS += -DSER_CONNECTIVITY ++CFLAGS += -DSER_PHY_HCI_USB_CDC ++CFLAGS += -DSOFTDEVICE_PRESENT ++CFLAGS += -DSWI_DISABLE0 ++CFLAGS += -mcpu=cortex-m4 ++CFLAGS += -mthumb -mabi=aapcs ++CFLAGS += -Wall -Werror ++CFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16 ++# keep every function in a separate section, this allows linker to discard unused ones ++CFLAGS += -ffunction-sections -fdata-sections -fno-strict-aliasing ++CFLAGS += -fno-builtin -fshort-enums ++ ++# C++ flags common to all targets ++CXXFLAGS += $(OPT) ++ ++# Assembler flags common to all targets ++ASMFLAGS += -g3 ++ASMFLAGS += -mcpu=cortex-m4 ++ASMFLAGS += -mthumb -mabi=aapcs ++ASMFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16 ++ASMFLAGS += -DBLE_STACK_SUPPORT_REQD ++ASMFLAGS += -DBOARD_PCA10059 ++ASMFLAGS += -DBSP_DEFINES_ONLY ++ASMFLAGS += -DCONFIG_GPIO_AS_PINRESET ++ASMFLAGS += -DFLOAT_ABI_HARD ++ASMFLAGS += -DHCI_TIMER2 ++ASMFLAGS += -DNRF52840_XXAA ++ASMFLAGS += -DNRF_SD_BLE_API_VERSION=3 ++ASMFLAGS += -DS132 ++ASMFLAGS += -DSER_CONNECTIVITY ++ASMFLAGS += -DSER_PHY_HCI_USB_CDC ++ASMFLAGS += -DSOFTDEVICE_PRESENT ++ASMFLAGS += -DSWI_DISABLE0 ++ ++# Linker flags ++LDFLAGS += $(OPT) ++LDFLAGS += -mthumb -mabi=aapcs -L$(SDK_ROOT)/modules/nrfx/mdk -T$(LINKER_SCRIPT) ++LDFLAGS += -mcpu=cortex-m4 ++LDFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16 ++# let linker dump unused sections ++LDFLAGS += -Wl,--gc-sections ++# use newlib in nano version ++LDFLAGS += --specs=nano.specs ++ ++nrf52840_xxaa: CFLAGS += -D__HEAP_SIZE=512 ++nrf52840_xxaa: CFLAGS += -D__STACK_SIZE=2048 ++nrf52840_xxaa: ASMFLAGS += -D__HEAP_SIZE=512 ++nrf52840_xxaa: ASMFLAGS += -D__STACK_SIZE=2048 ++ ++# Add standard libraries at the very end of the linker input, after all objects ++# that may need symbols provided by these libraries. ++LIB_FILES += -lc -lnosys -lm ++ ++ ++.PHONY: default help ++ ++# Default target - first one defined ++default: nrf52840_xxaa ++ ++# Print all targets that can be built ++help: ++ @echo following targets are available: ++ @echo nrf52840_xxaa ++ @echo flash_softdevice ++ @echo sdk_config - starting external tool for editing sdk_config.h ++ @echo flash - flashing binary ++ ++TEMPLATE_PATH := $(SDK_ROOT)/components/toolchain/gcc ++ ++ ++include $(TEMPLATE_PATH)/Makefile.common ++ ++$(foreach target, $(TARGETS), $(call define_target, $(target))) ++ ++.PHONY: flash flash_softdevice erase ++ ++# Flash the program ++flash: default ++ @echo Flashing: $(OUTPUT_DIRECTORY)/nrf52840_xxaa.hex ++ nrfjprog -f nrf52 --program $(OUTPUT_DIRECTORY)/nrf52840_xxaa.hex --sectorerase ++ nrfjprog -f nrf52 --reset ++ ++# Flash softdevice ++flash_softdevice: ++ @echo Flashing: s132_nrf52_3.0.0_softdevice.hex ++ nrfjprog -f nrf52 --program $(SDK_ROOT)/components/softdevice/s132v3/hex/s132_nrf52_3.0.0_softdevice.hex --sectorerase ++ nrfjprog -f nrf52 --reset ++ ++erase: ++ nrfjprog -f nrf52 --eraseall ++ ++SDK_CONFIG_FILE := ../config/sdk_config.h ++CMSIS_CONFIG_TOOL := $(SDK_ROOT)/external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar ++sdk_config: ++ java -jar $(CMSIS_CONFIG_TOOL) $(SDK_CONFIG_FILE) +diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld +new file mode 100644 +index 0000000..0267096 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld +@@ -0,0 +1,106 @@ ++/* Linker script to configure memory regions. */ ++ ++SEARCH_DIR(.) ++GROUP(-lgcc -lc -lnosys) ++ ++MEMORY ++{ ++ FLASH (rx) : ORIGIN = 0x1f000, LENGTH = 0xe1000 ++ RAM (rwx) : ORIGIN = 0x200199c0, LENGTH = 0x26640 ++ connectivity_version_info (r) : ORIGIN = 0x50000, LENGTH = 0x18 ++} ++ ++SECTIONS ++{ ++ .connectivity_version_info : ++ { ++ PROVIDE(__start_connectivity_version_info = .); ++ KEEP(*(SORT(.connectivity_version_info*))) ++ PROVIDE(__stop_connectivity_version_info = .); ++ } > connectivity_version_info ++} ++ ++SECTIONS ++{ ++ . = ALIGN(4); ++ .mem_section_dummy_ram : ++ { ++ } ++ .log_dynamic_data : ++ { ++ PROVIDE(__start_log_dynamic_data = .); ++ KEEP(*(SORT(.log_dynamic_data*))) ++ PROVIDE(__stop_log_dynamic_data = .); ++ } > RAM ++ .log_filter_data : ++ { ++ PROVIDE(__start_log_filter_data = .); ++ KEEP(*(SORT(.log_filter_data*))) ++ PROVIDE(__stop_log_filter_data = .); ++ } > RAM ++ ++} INSERT AFTER .data; ++ ++SECTIONS ++{ ++ .mem_section_dummy_rom : ++ { ++ } ++ .sdh_ble_observers : ++ { ++ PROVIDE(__start_sdh_ble_observers = .); ++ KEEP(*(SORT(.sdh_ble_observers*))) ++ PROVIDE(__stop_sdh_ble_observers = .); ++ } > FLASH ++ .sdh_soc_observers : ++ { ++ PROVIDE(__start_sdh_soc_observers = .); ++ KEEP(*(SORT(.sdh_soc_observers*))) ++ PROVIDE(__stop_sdh_soc_observers = .); ++ } > FLASH ++ .nrf_queue : ++ { ++ PROVIDE(__start_nrf_queue = .); ++ KEEP(*(.nrf_queue)) ++ PROVIDE(__stop_nrf_queue = .); ++ } > FLASH ++ .log_const_data : ++ { ++ PROVIDE(__start_log_const_data = .); ++ KEEP(*(SORT(.log_const_data*))) ++ PROVIDE(__stop_log_const_data = .); ++ } > FLASH ++ .nrf_balloc : ++ { ++ PROVIDE(__start_nrf_balloc = .); ++ KEEP(*(.nrf_balloc)) ++ PROVIDE(__stop_nrf_balloc = .); ++ } > FLASH ++ .sdh_state_observers : ++ { ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); ++ } > FLASH ++ .sdh_stack_observers : ++ { ++ PROVIDE(__start_sdh_stack_observers = .); ++ KEEP(*(SORT(.sdh_stack_observers*))) ++ PROVIDE(__stop_sdh_stack_observers = .); ++ } > FLASH ++ .sdh_req_observers : ++ { ++ PROVIDE(__start_sdh_req_observers = .); ++ KEEP(*(SORT(.sdh_req_observers*))) ++ PROVIDE(__stop_sdh_req_observers = .); ++ } > FLASH ++ .log_backends : ++ { ++ PROVIDE(__start_log_backends = .); ++ KEEP(*(SORT(.log_backends*))) ++ PROVIDE(__stop_log_backends = .); ++ } > FLASH ++ ++} INSERT AFTER .text ++ ++INCLUDE "nrf_common.ld" +diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/config/sdk_config.h +new file mode 100644 +index 0000000..c244199 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/config/sdk_config.h +@@ -0,0 +1,5223 @@ ++/** ++ * Copyright (c) 2017 - 2018, Nordic Semiconductor ASA ++ * ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form, except as embedded into a Nordic ++ * Semiconductor ASA integrated circuit in a product or a software update for ++ * such product, must reproduce the above copyright notice, this list of ++ * conditions and the following disclaimer in the documentation and/or other ++ * materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its ++ * contributors may be used to endorse or promote products derived from this ++ * software without specific prior written permission. ++ * ++ * 4. This software, with or without modification, must only be used with a ++ * Nordic Semiconductor ASA integrated circuit. ++ * ++ * 5. Any software provided in binary form under this license must not be reverse ++ * engineered, decompiled, modified and/or disassembled. ++ * ++ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS ++ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE ++ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ++ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ++ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ * ++ */ ++ ++ ++ ++#ifndef SDK_CONFIG_H ++#define SDK_CONFIG_H ++// <<< Use Configuration Wizard in Context Menu >>>\n ++#ifdef USE_APP_CONFIG ++#include "app_config.h" ++#endif ++// Application ++ ++//========================================================== ++// application_info - Software Component ++ ++//========================================================== ++// APP_NAME - Application name ++#ifndef APP_NAME ++#define APP_NAME "ble-connectivity" ++#endif ++ ++// APP_ID - Application ID ++#ifndef APP_ID ++#define APP_ID 0 ++#endif ++ ++// APP_VERSION - Application version (semantic versioning) ++ ++//========================================================== ++// APP_VERSION_MAJOR - Major version <0-1000> ++ ++ ++#ifndef APP_VERSION_MAJOR ++#define APP_VERSION_MAJOR 0 ++#endif ++ ++// APP_VERSION_MINOR - Minor version <0-1000> ++ ++ ++#ifndef APP_VERSION_MINOR ++#define APP_VERSION_MINOR 1 ++#endif ++ ++// APP_VERSION_PATCH - Patch version <0-1000> ++ ++ ++#ifndef APP_VERSION_PATCH ++#define APP_VERSION_PATCH 0 ++#endif ++ ++// APP_VERSION_PRERELEASE - Prerelease, eg. "-1.alpha" ++ ++// If not empty, this string should include the leading hyphen (-). ++// This string might be normalized at run-time to not contain characters ++// illegal in Semantic Versioning. ++#ifndef APP_VERSION_PRERELEASE ++#define APP_VERSION_PRERELEASE "" ++#endif ++ ++// APP_VERSION_METADATA - Metadata, e.g. "+some-string.01-01-2018-23-59-59" ++ ++// If not empty, this string should include the leading plus (+). ++// This string might be normalized at run-time to not contain characters ++// illegal in Semantic Versioning. ++#ifndef APP_VERSION_METADATA ++#define APP_VERSION_METADATA "+" __DATE__ " " __TIME__ ++#endif ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++// Board Definition ++ ++//========================================================== ++// nrf_dfu_trigger_usb - USB DFU Trigger library ++ ++//========================================================== ++// NRF_DFU_TRIGGER_USB_USB_SHARED - Flag indicating whether USB is used for other purposes in the application. ++ ++ ++#ifndef NRF_DFU_TRIGGER_USB_USB_SHARED ++#define NRF_DFU_TRIGGER_USB_USB_SHARED 1 ++#endif ++ ++// NRF_DFU_TRIGGER_USB_INTERFACE_NUM - The USB interface to use for the DFU Trigger library. <0-255> ++ ++ ++// According to the USB Specification, interface numbers cannot have ++// gaps. Tailor this value to adhere to this limitation. ++ ++#ifndef NRF_DFU_TRIGGER_USB_INTERFACE_NUM ++#define NRF_DFU_TRIGGER_USB_INTERFACE_NUM 0 ++#endif ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++// nRF_BLE ++ ++//========================================================== ++// BLE_DTM_ENABLED - ble_dtm - Module for testing RF/PHY using DTM commands ++ ++ ++#ifndef BLE_DTM_ENABLED ++#define BLE_DTM_ENABLED 1 ++#endif ++ ++// ++//========================================================== ++ ++// nRF_Drivers ++ ++//========================================================== ++// NRFX_CLOCK_ENABLED - nrfx_clock - CLOCK peripheral driver ++//========================================================== ++#ifndef NRFX_CLOCK_ENABLED ++#define NRFX_CLOCK_ENABLED 1 ++#endif ++// NRFX_CLOCK_CONFIG_LF_SRC - LF Clock Source ++ ++// <0=> RC ++// <1=> XTAL ++// <2=> Synth ++// <131073=> External Low Swing ++// <196609=> External Full Swing ++ ++#ifndef NRFX_CLOCK_CONFIG_LF_SRC ++#define NRFX_CLOCK_CONFIG_LF_SRC 1 ++#endif ++ ++// NRFX_CLOCK_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef NRFX_CLOCK_CONFIG_IRQ_PRIORITY ++#define NRFX_CLOCK_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// NRFX_CLOCK_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRFX_CLOCK_CONFIG_LOG_ENABLED ++#define NRFX_CLOCK_CONFIG_LOG_ENABLED 0 ++#endif ++// NRFX_CLOCK_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRFX_CLOCK_CONFIG_LOG_LEVEL ++#define NRFX_CLOCK_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRFX_CLOCK_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_CLOCK_CONFIG_INFO_COLOR ++#define NRFX_CLOCK_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRFX_CLOCK_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_CLOCK_CONFIG_DEBUG_COLOR ++#define NRFX_CLOCK_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++ ++// NRFX_POWER_ENABLED - nrfx_power - POWER peripheral driver ++//========================================================== ++#ifndef NRFX_POWER_ENABLED ++#define NRFX_POWER_ENABLED 1 ++#endif ++// NRFX_POWER_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef NRFX_POWER_CONFIG_IRQ_PRIORITY ++#define NRFX_POWER_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// NRFX_POWER_CONFIG_DEFAULT_DCDCEN - The default configuration of main DCDC regulator ++ ++ ++// This settings means only that components for DCDC regulator are installed and it can be enabled. ++ ++#ifndef NRFX_POWER_CONFIG_DEFAULT_DCDCEN ++#define NRFX_POWER_CONFIG_DEFAULT_DCDCEN 0 ++#endif ++ ++// NRFX_POWER_CONFIG_DEFAULT_DCDCENHV - The default configuration of High Voltage DCDC regulator ++ ++ ++// This settings means only that components for DCDC regulator are installed and it can be enabled. ++ ++#ifndef NRFX_POWER_CONFIG_DEFAULT_DCDCENHV ++#define NRFX_POWER_CONFIG_DEFAULT_DCDCENHV 0 ++#endif ++ ++// ++ ++// NRFX_PRS_ENABLED - nrfx_prs - Peripheral Resource Sharing module ++//========================================================== ++#ifndef NRFX_PRS_ENABLED ++#define NRFX_PRS_ENABLED 1 ++#endif ++// NRFX_PRS_BOX_0_ENABLED - Enables box 0 in the module. ++ ++ ++#ifndef NRFX_PRS_BOX_0_ENABLED ++#define NRFX_PRS_BOX_0_ENABLED 0 ++#endif ++ ++// NRFX_PRS_BOX_1_ENABLED - Enables box 1 in the module. ++ ++ ++#ifndef NRFX_PRS_BOX_1_ENABLED ++#define NRFX_PRS_BOX_1_ENABLED 0 ++#endif ++ ++// NRFX_PRS_BOX_2_ENABLED - Enables box 2 in the module. ++ ++ ++#ifndef NRFX_PRS_BOX_2_ENABLED ++#define NRFX_PRS_BOX_2_ENABLED 0 ++#endif ++ ++// NRFX_PRS_BOX_3_ENABLED - Enables box 3 in the module. ++ ++ ++#ifndef NRFX_PRS_BOX_3_ENABLED ++#define NRFX_PRS_BOX_3_ENABLED 0 ++#endif ++ ++// NRFX_PRS_BOX_4_ENABLED - Enables box 4 in the module. ++ ++ ++#ifndef NRFX_PRS_BOX_4_ENABLED ++#define NRFX_PRS_BOX_4_ENABLED 1 ++#endif ++ ++// NRFX_PRS_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRFX_PRS_CONFIG_LOG_ENABLED ++#define NRFX_PRS_CONFIG_LOG_ENABLED 0 ++#endif ++// NRFX_PRS_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRFX_PRS_CONFIG_LOG_LEVEL ++#define NRFX_PRS_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRFX_PRS_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_PRS_CONFIG_INFO_COLOR ++#define NRFX_PRS_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRFX_PRS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_PRS_CONFIG_DEBUG_COLOR ++#define NRFX_PRS_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++ ++// NRFX_QSPI_ENABLED - nrfx_qspi - QSPI peripheral driver ++//========================================================== ++#ifndef NRFX_QSPI_ENABLED ++#define NRFX_QSPI_ENABLED 1 ++#endif ++// NRFX_QSPI_CONFIG_SCK_DELAY - tSHSL, tWHSL and tSHWL in number of 16 MHz periods (62.5 ns). <0-255> ++ ++ ++#ifndef NRFX_QSPI_CONFIG_SCK_DELAY ++#define NRFX_QSPI_CONFIG_SCK_DELAY 1 ++#endif ++ ++// NRFX_QSPI_CONFIG_XIP_OFFSET - Address offset in the external memory for Execute in Place operation. ++#ifndef NRFX_QSPI_CONFIG_XIP_OFFSET ++#define NRFX_QSPI_CONFIG_XIP_OFFSET 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_READOC - Number of data lines and opcode used for reading. ++ ++// <0=> FastRead ++// <1=> Read2O ++// <2=> Read2IO ++// <3=> Read4O ++// <4=> Read4IO ++ ++#ifndef NRFX_QSPI_CONFIG_READOC ++#define NRFX_QSPI_CONFIG_READOC 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_WRITEOC - Number of data lines and opcode used for writing. ++ ++// <0=> PP ++// <1=> PP2O ++// <2=> PP4O ++// <3=> PP4IO ++ ++#ifndef NRFX_QSPI_CONFIG_WRITEOC ++#define NRFX_QSPI_CONFIG_WRITEOC 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_ADDRMODE - Addressing mode. ++ ++// <0=> 24bit ++// <1=> 32bit ++ ++#ifndef NRFX_QSPI_CONFIG_ADDRMODE ++#define NRFX_QSPI_CONFIG_ADDRMODE 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_MODE - SPI mode. ++ ++// <0=> Mode 0 ++// <1=> Mode 1 ++ ++#ifndef NRFX_QSPI_CONFIG_MODE ++#define NRFX_QSPI_CONFIG_MODE 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_FREQUENCY - Frequency divider. ++ ++// <0=> 32MHz/1 ++// <1=> 32MHz/2 ++// <2=> 32MHz/3 ++// <3=> 32MHz/4 ++// <4=> 32MHz/5 ++// <5=> 32MHz/6 ++// <6=> 32MHz/7 ++// <7=> 32MHz/8 ++// <8=> 32MHz/9 ++// <9=> 32MHz/10 ++// <10=> 32MHz/11 ++// <11=> 32MHz/12 ++// <12=> 32MHz/13 ++// <13=> 32MHz/14 ++// <14=> 32MHz/15 ++// <15=> 32MHz/16 ++ ++#ifndef NRFX_QSPI_CONFIG_FREQUENCY ++#define NRFX_QSPI_CONFIG_FREQUENCY 15 ++#endif ++ ++// NRFX_QSPI_PIN_SCK - SCK pin value. ++#ifndef NRFX_QSPI_PIN_SCK ++#define NRFX_QSPI_PIN_SCK NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_CSN - CSN pin value. ++#ifndef NRFX_QSPI_PIN_CSN ++#define NRFX_QSPI_PIN_CSN NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO0 - IO0 pin value. ++#ifndef NRFX_QSPI_PIN_IO0 ++#define NRFX_QSPI_PIN_IO0 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO1 - IO1 pin value. ++#ifndef NRFX_QSPI_PIN_IO1 ++#define NRFX_QSPI_PIN_IO1 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO2 - IO2 pin value. ++#ifndef NRFX_QSPI_PIN_IO2 ++#define NRFX_QSPI_PIN_IO2 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO3 - IO3 pin value. ++#ifndef NRFX_QSPI_PIN_IO3 ++#define NRFX_QSPI_PIN_IO3 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef NRFX_QSPI_CONFIG_IRQ_PRIORITY ++#define NRFX_QSPI_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ ++// NRFX_UARTE_ENABLED - nrfx_uarte - UARTE peripheral driver ++//========================================================== ++#ifndef NRFX_UARTE_ENABLED ++#define NRFX_UARTE_ENABLED 1 ++#endif ++// NRFX_UARTE0_ENABLED - Enable UARTE0 instance ++#ifndef NRFX_UARTE0_ENABLED ++#define NRFX_UARTE0_ENABLED 0 ++#endif ++ ++// NRFX_UARTE1_ENABLED - Enable UARTE1 instance ++#ifndef NRFX_UARTE1_ENABLED ++#define NRFX_UARTE1_ENABLED 0 ++#endif ++ ++// NRFX_UARTE_DEFAULT_CONFIG_HWFC - Hardware Flow Control ++ ++// <0=> Disabled ++// <1=> Enabled ++ ++#ifndef NRFX_UARTE_DEFAULT_CONFIG_HWFC ++#define NRFX_UARTE_DEFAULT_CONFIG_HWFC 0 ++#endif ++ ++// NRFX_UARTE_DEFAULT_CONFIG_PARITY - Parity ++ ++// <0=> Excluded ++// <14=> Included ++ ++#ifndef NRFX_UARTE_DEFAULT_CONFIG_PARITY ++#define NRFX_UARTE_DEFAULT_CONFIG_PARITY 0 ++#endif ++ ++// NRFX_UARTE_DEFAULT_CONFIG_BAUDRATE - Default Baudrate ++ ++// <323584=> 1200 baud ++// <643072=> 2400 baud ++// <1290240=> 4800 baud ++// <2576384=> 9600 baud ++// <3862528=> 14400 baud ++// <5152768=> 19200 baud ++// <7716864=> 28800 baud ++// <8388608=> 31250 baud ++// <10289152=> 38400 baud ++// <15007744=> 56000 baud ++// <15400960=> 57600 baud ++// <20615168=> 76800 baud ++// <30801920=> 115200 baud ++// <61865984=> 230400 baud ++// <67108864=> 250000 baud ++// <121634816=> 460800 baud ++// <251658240=> 921600 baud ++// <268435456=> 1000000 baud ++ ++#ifndef NRFX_UARTE_DEFAULT_CONFIG_BAUDRATE ++#define NRFX_UARTE_DEFAULT_CONFIG_BAUDRATE 30801920 ++#endif ++ ++// NRFX_UARTE_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef NRFX_UARTE_DEFAULT_CONFIG_IRQ_PRIORITY ++#define NRFX_UARTE_DEFAULT_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// NRFX_UARTE_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRFX_UARTE_CONFIG_LOG_ENABLED ++#define NRFX_UARTE_CONFIG_LOG_ENABLED 0 ++#endif ++// NRFX_UARTE_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRFX_UARTE_CONFIG_LOG_LEVEL ++#define NRFX_UARTE_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRFX_UARTE_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_UARTE_CONFIG_INFO_COLOR ++#define NRFX_UARTE_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRFX_UARTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_UARTE_CONFIG_DEBUG_COLOR ++#define NRFX_UARTE_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++ ++// NRFX_UART_ENABLED - nrfx_uart - UART peripheral driver ++//========================================================== ++#ifndef NRFX_UART_ENABLED ++#define NRFX_UART_ENABLED 1 ++#endif ++// NRFX_UART0_ENABLED - Enable UART0 instance ++#ifndef NRFX_UART0_ENABLED ++#define NRFX_UART0_ENABLED 0 ++#endif ++ ++// NRFX_UART_DEFAULT_CONFIG_HWFC - Hardware Flow Control ++ ++// <0=> Disabled ++// <1=> Enabled ++ ++#ifndef NRFX_UART_DEFAULT_CONFIG_HWFC ++#define NRFX_UART_DEFAULT_CONFIG_HWFC 0 ++#endif ++ ++// NRFX_UART_DEFAULT_CONFIG_PARITY - Parity ++ ++// <0=> Excluded ++// <14=> Included ++ ++#ifndef NRFX_UART_DEFAULT_CONFIG_PARITY ++#define NRFX_UART_DEFAULT_CONFIG_PARITY 0 ++#endif ++ ++// NRFX_UART_DEFAULT_CONFIG_BAUDRATE - Default Baudrate ++ ++// <323584=> 1200 baud ++// <643072=> 2400 baud ++// <1290240=> 4800 baud ++// <2576384=> 9600 baud ++// <3866624=> 14400 baud ++// <5152768=> 19200 baud ++// <7729152=> 28800 baud ++// <8388608=> 31250 baud ++// <10309632=> 38400 baud ++// <15007744=> 56000 baud ++// <15462400=> 57600 baud ++// <20615168=> 76800 baud ++// <30924800=> 115200 baud ++// <61845504=> 230400 baud ++// <67108864=> 250000 baud ++// <123695104=> 460800 baud ++// <247386112=> 921600 baud ++// <268435456=> 1000000 baud ++ ++#ifndef NRFX_UART_DEFAULT_CONFIG_BAUDRATE ++#define NRFX_UART_DEFAULT_CONFIG_BAUDRATE 30924800 ++#endif ++ ++// NRFX_UART_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef NRFX_UART_DEFAULT_CONFIG_IRQ_PRIORITY ++#define NRFX_UART_DEFAULT_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// NRFX_UART_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRFX_UART_CONFIG_LOG_ENABLED ++#define NRFX_UART_CONFIG_LOG_ENABLED 0 ++#endif ++// NRFX_UART_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRFX_UART_CONFIG_LOG_LEVEL ++#define NRFX_UART_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRFX_UART_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_UART_CONFIG_INFO_COLOR ++#define NRFX_UART_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRFX_UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRFX_UART_CONFIG_DEBUG_COLOR ++#define NRFX_UART_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++ ++// NRF_CLOCK_ENABLED - nrf_drv_clock - CLOCK peripheral driver - legacy layer ++//========================================================== ++#ifndef NRF_CLOCK_ENABLED ++#define NRF_CLOCK_ENABLED 1 ++#endif ++// CLOCK_CONFIG_LF_SRC - LF Clock Source ++ ++// <0=> RC ++// <1=> XTAL ++// <2=> Synth ++// <131073=> External Low Swing ++// <196609=> External Full Swing ++ ++#ifndef CLOCK_CONFIG_LF_SRC ++#define CLOCK_CONFIG_LF_SRC 1 ++#endif ++ ++// CLOCK_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef CLOCK_CONFIG_IRQ_PRIORITY ++#define CLOCK_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ ++// POWER_ENABLED - nrf_drv_power - POWER peripheral driver - legacy layer ++//========================================================== ++#ifndef POWER_ENABLED ++#define POWER_ENABLED 1 ++#endif ++// POWER_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef POWER_CONFIG_IRQ_PRIORITY ++#define POWER_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// POWER_CONFIG_DEFAULT_DCDCEN - The default configuration of main DCDC regulator ++ ++ ++// This settings means only that components for DCDC regulator are installed and it can be enabled. ++ ++#ifndef POWER_CONFIG_DEFAULT_DCDCEN ++#define POWER_CONFIG_DEFAULT_DCDCEN 0 ++#endif ++ ++// POWER_CONFIG_DEFAULT_DCDCENHV - The default configuration of High Voltage DCDC regulator ++ ++ ++// This settings means only that components for DCDC regulator are installed and it can be enabled. ++ ++#ifndef POWER_CONFIG_DEFAULT_DCDCENHV ++#define POWER_CONFIG_DEFAULT_DCDCENHV 0 ++#endif ++ ++// ++ ++// QSPI_ENABLED - nrf_drv_qspi - QSPI peripheral driver - legacy layer ++//========================================================== ++#ifndef QSPI_ENABLED ++#define QSPI_ENABLED 1 ++#endif ++// QSPI_CONFIG_SCK_DELAY - tSHSL, tWHSL and tSHWL in number of 16 MHz periods (62.5 ns). <0-255> ++ ++ ++#ifndef QSPI_CONFIG_SCK_DELAY ++#define QSPI_CONFIG_SCK_DELAY 1 ++#endif ++ ++// QSPI_CONFIG_XIP_OFFSET - Address offset in the external memory for Execute in Place operation. ++#ifndef QSPI_CONFIG_XIP_OFFSET ++#define QSPI_CONFIG_XIP_OFFSET 0 ++#endif ++ ++// QSPI_CONFIG_READOC - Number of data lines and opcode used for reading. ++ ++// <0=> FastRead ++// <1=> Read2O ++// <2=> Read2IO ++// <3=> Read4O ++// <4=> Read4IO ++ ++#ifndef QSPI_CONFIG_READOC ++#define QSPI_CONFIG_READOC 0 ++#endif ++ ++// QSPI_CONFIG_WRITEOC - Number of data lines and opcode used for writing. ++ ++// <0=> PP ++// <1=> PP2O ++// <2=> PP4O ++// <3=> PP4IO ++ ++#ifndef QSPI_CONFIG_WRITEOC ++#define QSPI_CONFIG_WRITEOC 0 ++#endif ++ ++// QSPI_CONFIG_ADDRMODE - Addressing mode. ++ ++// <0=> 24bit ++// <1=> 32bit ++ ++#ifndef QSPI_CONFIG_ADDRMODE ++#define QSPI_CONFIG_ADDRMODE 0 ++#endif ++ ++// QSPI_CONFIG_MODE - SPI mode. ++ ++// <0=> Mode 0 ++// <1=> Mode 1 ++ ++#ifndef QSPI_CONFIG_MODE ++#define QSPI_CONFIG_MODE 0 ++#endif ++ ++// QSPI_CONFIG_FREQUENCY - Frequency divider. ++ ++// <0=> 32MHz/1 ++// <1=> 32MHz/2 ++// <2=> 32MHz/3 ++// <3=> 32MHz/4 ++// <4=> 32MHz/5 ++// <5=> 32MHz/6 ++// <6=> 32MHz/7 ++// <7=> 32MHz/8 ++// <8=> 32MHz/9 ++// <9=> 32MHz/10 ++// <10=> 32MHz/11 ++// <11=> 32MHz/12 ++// <12=> 32MHz/13 ++// <13=> 32MHz/14 ++// <14=> 32MHz/15 ++// <15=> 32MHz/16 ++ ++#ifndef QSPI_CONFIG_FREQUENCY ++#define QSPI_CONFIG_FREQUENCY 15 ++#endif ++ ++// QSPI_PIN_SCK - SCK pin value. ++#ifndef QSPI_PIN_SCK ++#define QSPI_PIN_SCK NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_CSN - CSN pin value. ++#ifndef QSPI_PIN_CSN ++#define QSPI_PIN_CSN NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO0 - IO0 pin value. ++#ifndef QSPI_PIN_IO0 ++#define QSPI_PIN_IO0 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO1 - IO1 pin value. ++#ifndef QSPI_PIN_IO1 ++#define QSPI_PIN_IO1 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO2 - IO2 pin value. ++#ifndef QSPI_PIN_IO2 ++#define QSPI_PIN_IO2 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO3 - IO3 pin value. ++#ifndef QSPI_PIN_IO3 ++#define QSPI_PIN_IO3 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef QSPI_CONFIG_IRQ_PRIORITY ++#define QSPI_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ ++// UART_ENABLED - nrf_drv_uart - UART/UARTE peripheral driver - legacy layer ++//========================================================== ++#ifndef UART_ENABLED ++#define UART_ENABLED 1 ++#endif ++// UART_DEFAULT_CONFIG_HWFC - Hardware Flow Control ++ ++// <0=> Disabled ++// <1=> Enabled ++ ++#ifndef UART_DEFAULT_CONFIG_HWFC ++#define UART_DEFAULT_CONFIG_HWFC 0 ++#endif ++ ++// UART_DEFAULT_CONFIG_PARITY - Parity ++ ++// <0=> Excluded ++// <14=> Included ++ ++#ifndef UART_DEFAULT_CONFIG_PARITY ++#define UART_DEFAULT_CONFIG_PARITY 0 ++#endif ++ ++// UART_DEFAULT_CONFIG_BAUDRATE - Default Baudrate ++ ++// <323584=> 1200 baud ++// <643072=> 2400 baud ++// <1290240=> 4800 baud ++// <2576384=> 9600 baud ++// <3862528=> 14400 baud ++// <5152768=> 19200 baud ++// <7716864=> 28800 baud ++// <10289152=> 38400 baud ++// <15400960=> 57600 baud ++// <20615168=> 76800 baud ++// <30801920=> 115200 baud ++// <61865984=> 230400 baud ++// <67108864=> 250000 baud ++// <121634816=> 460800 baud ++// <251658240=> 921600 baud ++// <268435456=> 1000000 baud ++ ++#ifndef UART_DEFAULT_CONFIG_BAUDRATE ++#define UART_DEFAULT_CONFIG_BAUDRATE 30801920 ++#endif ++ ++// UART_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef UART_DEFAULT_CONFIG_IRQ_PRIORITY ++#define UART_DEFAULT_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// UART_EASY_DMA_SUPPORT - Driver supporting EasyDMA ++ ++ ++#ifndef UART_EASY_DMA_SUPPORT ++#define UART_EASY_DMA_SUPPORT 1 ++#endif ++ ++// UART_LEGACY_SUPPORT - Driver supporting Legacy mode ++ ++ ++#ifndef UART_LEGACY_SUPPORT ++#define UART_LEGACY_SUPPORT 1 ++#endif ++ ++// UART0_ENABLED - Enable UART0 instance ++//========================================================== ++#ifndef UART0_ENABLED ++#define UART0_ENABLED 1 ++#endif ++// UART0_CONFIG_USE_EASY_DMA - Default setting for using EasyDMA ++ ++ ++#ifndef UART0_CONFIG_USE_EASY_DMA ++#define UART0_CONFIG_USE_EASY_DMA 1 ++#endif ++ ++// ++ ++// UART1_ENABLED - Enable UART1 instance ++//========================================================== ++#ifndef UART1_ENABLED ++#define UART1_ENABLED 0 ++#endif ++// ++ ++// ++ ++// USBD_ENABLED - nrf_drv_usbd - USB driver ++//========================================================== ++#ifndef USBD_ENABLED ++#define USBD_ENABLED 1 ++#endif ++// USBD_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef USBD_CONFIG_IRQ_PRIORITY ++#define USBD_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// USBD_CONFIG_DMASCHEDULER_MODE - USBD SMA scheduler working scheme ++ ++// <0=> Prioritized access ++// <1=> Round Robin ++ ++#ifndef USBD_CONFIG_DMASCHEDULER_MODE ++#define USBD_CONFIG_DMASCHEDULER_MODE 0 ++#endif ++ ++// USBD_CONFIG_DMASCHEDULER_ISO_BOOST - Give priority to isochronous transfers ++ ++ ++// This option gives priority to isochronous transfers. ++// Enabling it assures that isochronous transfers are always processed, ++// even if multiple other transfers are pending. ++// Isochronous endpoints are prioritized before the usbd_dma_scheduler_algorithm ++// function is called, so the option is independent of the algorithm chosen. ++ ++#ifndef USBD_CONFIG_DMASCHEDULER_ISO_BOOST ++#define USBD_CONFIG_DMASCHEDULER_ISO_BOOST 1 ++#endif ++ ++// USBD_CONFIG_ISO_IN_ZLP - Respond to an IN token on ISO IN endpoint with ZLP when no data is ready ++ ++ ++// If set, ISO IN endpoint will respond to an IN token with ZLP when no data is ready to be sent. ++// Else, there will be no response. ++ ++#ifndef USBD_CONFIG_ISO_IN_ZLP ++#define USBD_CONFIG_ISO_IN_ZLP 0 ++#endif ++ ++// ++ ++// ++//========================================================== ++ ++// nRF_Libraries ++ ++//========================================================== ++// APP_SCHEDULER_ENABLED - app_scheduler - Events scheduler ++//========================================================== ++#ifndef APP_SCHEDULER_ENABLED ++#define APP_SCHEDULER_ENABLED 1 ++#endif ++// APP_SCHEDULER_WITH_PAUSE - Enabling pause feature ++ ++ ++#ifndef APP_SCHEDULER_WITH_PAUSE ++#define APP_SCHEDULER_WITH_PAUSE 1 ++#endif ++ ++// APP_SCHEDULER_WITH_PROFILER - Enabling scheduler profiling ++ ++ ++#ifndef APP_SCHEDULER_WITH_PROFILER ++#define APP_SCHEDULER_WITH_PROFILER 1 ++#endif ++ ++// ++ ++// APP_TIMER_ENABLED - app_timer - Application timer functionality ++//========================================================== ++#ifndef APP_TIMER_ENABLED ++#define APP_TIMER_ENABLED 1 ++#endif ++// APP_TIMER_CONFIG_RTC_FREQUENCY - Configure RTC prescaler. ++ ++// <0=> 32768 Hz ++// <1=> 16384 Hz ++// <3=> 8192 Hz ++// <7=> 4096 Hz ++// <15=> 2048 Hz ++// <31=> 1024 Hz ++ ++#ifndef APP_TIMER_CONFIG_RTC_FREQUENCY ++#define APP_TIMER_CONFIG_RTC_FREQUENCY 0 ++#endif ++ ++// APP_TIMER_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef APP_TIMER_CONFIG_IRQ_PRIORITY ++#define APP_TIMER_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// APP_TIMER_CONFIG_OP_QUEUE_SIZE - Capacity of timer requests queue. ++// Size of the queue depends on how many timers are used ++// in the system, how often timers are started and overall ++// system latency. If queue size is too small app_timer calls ++// will fail. ++ ++#ifndef APP_TIMER_CONFIG_OP_QUEUE_SIZE ++#define APP_TIMER_CONFIG_OP_QUEUE_SIZE 10 ++#endif ++ ++// APP_TIMER_CONFIG_USE_SCHEDULER - Enable scheduling app_timer events to app_scheduler ++ ++ ++#ifndef APP_TIMER_CONFIG_USE_SCHEDULER ++#define APP_TIMER_CONFIG_USE_SCHEDULER 0 ++#endif ++ ++// APP_TIMER_KEEPS_RTC_ACTIVE - Enable RTC always on ++ ++ ++// If option is enabled RTC is kept running even if there is no active timers. ++// This option can be used when app_timer is used for timestamping. ++ ++#ifndef APP_TIMER_KEEPS_RTC_ACTIVE ++#define APP_TIMER_KEEPS_RTC_ACTIVE 0 ++#endif ++ ++// APP_TIMER_SAFE_WINDOW_MS - Maximum possible latency (in milliseconds) of handling app_timer event. ++// Maximum possible timeout that can be set is reduced by safe window. ++// Example: RTC frequency 16384 Hz, maximum possible timeout 1024 seconds - APP_TIMER_SAFE_WINDOW_MS. ++// Since RTC is not stopped when processor is halted in debugging session, this value ++// must cover it if debugging is needed. It is possible to halt processor for APP_TIMER_SAFE_WINDOW_MS ++// without corrupting app_timer behavior. ++ ++#ifndef APP_TIMER_SAFE_WINDOW_MS ++#define APP_TIMER_SAFE_WINDOW_MS 300000 ++#endif ++ ++// App Timer Legacy configuration - Legacy configuration. ++ ++//========================================================== ++// APP_TIMER_WITH_PROFILER - Enable app_timer profiling ++ ++ ++#ifndef APP_TIMER_WITH_PROFILER ++#define APP_TIMER_WITH_PROFILER 0 ++#endif ++ ++// APP_TIMER_CONFIG_SWI_NUMBER - Configure SWI instance used. ++ ++ ++#ifndef APP_TIMER_CONFIG_SWI_NUMBER ++#define APP_TIMER_CONFIG_SWI_NUMBER 0 ++#endif ++ ++// ++//========================================================== ++ ++// ++ ++// APP_USBD_ENABLED - app_usbd - USB Device library ++//========================================================== ++#ifndef APP_USBD_ENABLED ++#define APP_USBD_ENABLED 1 ++#endif ++// APP_USBD_VID - Vendor ID. ++ ++// Note: This value is not editable in Configuration Wizard. ++// Vendor ID ordered from USB IF: http://www.usb.org/developers/vendor/ ++#ifndef APP_USBD_VID ++#define APP_USBD_VID 0x1915 ++#endif ++ ++// APP_USBD_PID - Product ID. ++ ++// Note: This value is not editable in Configuration Wizard. ++// Selected Product ID ++#ifndef APP_USBD_PID ++#define APP_USBD_PID 0xC00A ++#endif ++ ++// APP_USBD_DEVICE_VER_MAJOR - Device version, major part. <0-99> ++ ++ ++// Device version, will be converted automatically to BCD notation. Use just decimal values. ++ ++#ifndef APP_USBD_DEVICE_VER_MAJOR ++#define APP_USBD_DEVICE_VER_MAJOR 1 ++#endif ++ ++// APP_USBD_DEVICE_VER_MINOR - Device version, minor part. <0-99> ++ ++ ++// Device version, will be converted automatically to BCD notation. Use just decimal values. ++ ++#ifndef APP_USBD_DEVICE_VER_MINOR ++#define APP_USBD_DEVICE_VER_MINOR 0 ++#endif ++ ++// APP_USBD_CONFIG_SELF_POWERED - Self-powered device, as opposed to bus-powered. ++ ++ ++#ifndef APP_USBD_CONFIG_SELF_POWERED ++#define APP_USBD_CONFIG_SELF_POWERED 1 ++#endif ++ ++// APP_USBD_CONFIG_MAX_POWER - MaxPower field in configuration descriptor in milliamps. <0-500> ++ ++ ++#ifndef APP_USBD_CONFIG_MAX_POWER ++#define APP_USBD_CONFIG_MAX_POWER 500 ++#endif ++ ++// APP_USBD_CONFIG_POWER_EVENTS_PROCESS - Process power events. ++ ++ ++// Enable processing power events in USB event handler. ++ ++#ifndef APP_USBD_CONFIG_POWER_EVENTS_PROCESS ++#define APP_USBD_CONFIG_POWER_EVENTS_PROCESS 1 ++#endif ++ ++// APP_USBD_CONFIG_EVENT_QUEUE_ENABLE - Enable event queue. ++ ++// This is the default configuration when all the events are placed into internal queue. ++// Disable it when an external queue is used like app_scheduler or if you wish to process all events inside interrupts. ++// Processing all events from the interrupt level adds requirement not to call any functions that modifies the USBD library state from the context higher than USB interrupt context. ++// Functions that modify USBD state are functions for sleep, wakeup, start, stop, enable, and disable. ++//========================================================== ++#ifndef APP_USBD_CONFIG_EVENT_QUEUE_ENABLE ++#define APP_USBD_CONFIG_EVENT_QUEUE_ENABLE 1 ++#endif ++// APP_USBD_CONFIG_EVENT_QUEUE_SIZE - The size of the event queue. <16-64> ++ ++ ++// The size of the queue for the events that would be processed in the main loop. ++ ++#ifndef APP_USBD_CONFIG_EVENT_QUEUE_SIZE ++#define APP_USBD_CONFIG_EVENT_QUEUE_SIZE 32 ++#endif ++ ++// APP_USBD_CONFIG_SOF_HANDLING_MODE - Change SOF events handling mode. ++ ++ ++// Normal queue - SOF events are pushed normally into the event queue. ++// Compress queue - SOF events are counted and binded with other events or executed when the queue is empty. ++// This prevents the queue from filling up with SOF events. ++// Interrupt - SOF events are processed in interrupt. ++// <0=> Normal queue ++// <1=> Compress queue ++// <2=> Interrupt ++ ++#ifndef APP_USBD_CONFIG_SOF_HANDLING_MODE ++#define APP_USBD_CONFIG_SOF_HANDLING_MODE 1 ++#endif ++ ++// ++ ++// APP_USBD_CONFIG_SOF_TIMESTAMP_PROVIDE - Provide a function that generates timestamps for logs based on the current SOF. ++ ++ ++// The function app_usbd_sof_timestamp_get is implemented if the logger is enabled. ++// Use it when initializing the logger. ++// SOF processing is always enabled when this configuration parameter is active. ++// Note: This option is configured outside of APP_USBD_CONFIG_LOG_ENABLED. ++// This means that it works even if the logging in this very module is disabled. ++ ++#ifndef APP_USBD_CONFIG_SOF_TIMESTAMP_PROVIDE ++#define APP_USBD_CONFIG_SOF_TIMESTAMP_PROVIDE 0 ++#endif ++ ++// APP_USBD_CONFIG_DESC_STRING_SIZE - Maximum size of the NULL-terminated string of the string descriptor. <31-254> ++ ++ ++// 31 characters can be stored in the internal USB buffer used for transfers. ++// Any value higher than 31 creates an additional buffer just for descriptor strings. ++ ++#ifndef APP_USBD_CONFIG_DESC_STRING_SIZE ++#define APP_USBD_CONFIG_DESC_STRING_SIZE 31 ++#endif ++ ++// APP_USBD_CONFIG_DESC_STRING_UTF_ENABLED - Enable UTF8 conversion. ++ ++ ++// Enable UTF8-encoded characters. In normal processing, only ASCII characters are available. ++ ++#ifndef APP_USBD_CONFIG_DESC_STRING_UTF_ENABLED ++#define APP_USBD_CONFIG_DESC_STRING_UTF_ENABLED 0 ++#endif ++ ++// APP_USBD_STRINGS_LANGIDS - Supported languages identifiers. ++ ++// Note: This value is not editable in Configuration Wizard. ++// Comma-separated list of supported languages. ++#ifndef APP_USBD_STRINGS_LANGIDS ++#define APP_USBD_STRINGS_LANGIDS APP_USBD_LANG_AND_SUBLANG(APP_USBD_LANG_ENGLISH, APP_USBD_SUBLANG_ENGLISH_US) ++#endif ++ ++// APP_USBD_STRING_ID_MANUFACTURER - Define manufacturer string ID. ++ ++// Setting ID to 0 disables the string. ++//========================================================== ++#ifndef APP_USBD_STRING_ID_MANUFACTURER ++#define APP_USBD_STRING_ID_MANUFACTURER 1 ++#endif ++// APP_USBD_STRINGS_MANUFACTURER_EXTERN - Define whether @ref APP_USBD_STRINGS_MANUFACTURER is created by macro or declared as a global variable. ++ ++ ++#ifndef APP_USBD_STRINGS_MANUFACTURER_EXTERN ++#define APP_USBD_STRINGS_MANUFACTURER_EXTERN 0 ++#endif ++ ++// APP_USBD_STRINGS_MANUFACTURER - String descriptor for the manufacturer name. ++ ++// Note: This value is not editable in Configuration Wizard. ++// Comma-separated list of manufacturer names for each defined language. ++// Use @ref APP_USBD_STRING_DESC macro to create string descriptor from a NULL-terminated string. ++// Use @ref APP_USBD_STRING_RAW8_DESC macro to create string descriptor from comma-separated uint8_t values. ++// Use @ref APP_USBD_STRING_RAW16_DESC macro to create string descriptor from comma-separated uint16_t values. ++// Alternatively, configure the macro to point to any internal variable pointer that already contains the descriptor. ++// Setting string to NULL disables that string. ++// The order of manufacturer names must be the same like in @ref APP_USBD_STRINGS_LANGIDS. ++#ifndef APP_USBD_STRINGS_MANUFACTURER ++#define APP_USBD_STRINGS_MANUFACTURER APP_USBD_STRING_DESC("Nordic Semiconductor") ++#endif ++ ++// ++ ++// APP_USBD_STRING_ID_PRODUCT - Define product string ID. ++ ++// Setting ID to 0 disables the string. ++//========================================================== ++#ifndef APP_USBD_STRING_ID_PRODUCT ++#define APP_USBD_STRING_ID_PRODUCT 2 ++#endif ++// APP_USBD_STRINGS_PRODUCT_EXTERN - Define whether @ref APP_USBD_STRINGS_PRODUCT is created by macro or declared as a global variable. ++ ++ ++#ifndef APP_USBD_STRINGS_PRODUCT_EXTERN ++#define APP_USBD_STRINGS_PRODUCT_EXTERN 0 ++#endif ++ ++// APP_USBD_STRINGS_PRODUCT - String descriptor for the product name. ++ ++// Note: This value is not editable in Configuration Wizard. ++// List of product names that is defined the same way like in @ref APP_USBD_STRINGS_MANUFACTURER. ++#ifndef APP_USBD_STRINGS_PRODUCT ++#define APP_USBD_STRINGS_PRODUCT APP_USBD_STRING_DESC("nRF52 Connectivity") ++#endif ++ ++// ++ ++// APP_USBD_STRING_ID_SERIAL - Define serial number string ID. ++ ++// Setting ID to 0 disables the string. ++//========================================================== ++#ifndef APP_USBD_STRING_ID_SERIAL ++#define APP_USBD_STRING_ID_SERIAL 3 ++#endif ++// APP_USBD_STRING_SERIAL_EXTERN - Define whether @ref APP_USBD_STRING_SERIAL is created by macro or declared as a global variable. ++ ++ ++#ifndef APP_USBD_STRING_SERIAL_EXTERN ++#define APP_USBD_STRING_SERIAL_EXTERN 1 ++#endif ++ ++// APP_USBD_STRING_SERIAL - String descriptor for the serial number. ++ ++// Note: This value is not editable in Configuration Wizard. ++// Serial number that is defined the same way like in @ref APP_USBD_STRINGS_MANUFACTURER. ++#ifndef APP_USBD_STRING_SERIAL ++#define APP_USBD_STRING_SERIAL g_extern_serial_number ++#endif ++ ++// ++ ++// APP_USBD_STRING_ID_CONFIGURATION - Define configuration string ID. ++ ++// Setting ID to 0 disables the string. ++//========================================================== ++#ifndef APP_USBD_STRING_ID_CONFIGURATION ++#define APP_USBD_STRING_ID_CONFIGURATION 4 ++#endif ++// APP_USBD_STRING_CONFIGURATION_EXTERN - Define whether @ref APP_USBD_STRINGS_CONFIGURATION is created by macro or declared as global variable. ++ ++ ++#ifndef APP_USBD_STRING_CONFIGURATION_EXTERN ++#define APP_USBD_STRING_CONFIGURATION_EXTERN 0 ++#endif ++ ++// APP_USBD_STRINGS_CONFIGURATION - String descriptor for the device configuration. ++ ++// Note: This value is not editable in Configuration Wizard. ++// Configuration string that is defined the same way like in @ref APP_USBD_STRINGS_MANUFACTURER. ++#ifndef APP_USBD_STRINGS_CONFIGURATION ++#define APP_USBD_STRINGS_CONFIGURATION APP_USBD_STRING_DESC("Default configuration") ++#endif ++ ++// ++ ++// APP_USBD_STRINGS_USER - Default values for user strings. ++ ++// Note: This value is not editable in Configuration Wizard. ++// This value stores all application specific user strings with the default initialization. ++// The setup is done by X-macros. ++// Expected macro parameters: ++// @code ++// X(mnemonic, [=str_idx], ...) ++// @endcode ++// - @c mnemonic: Mnemonic of the string descriptor that would be added to ++// @ref app_usbd_string_desc_idx_t enumerator. ++// - @c str_idx : String index value, can be set or left empty. ++// For example, WinUSB driver requires descriptor to be present on 0xEE index. ++// Then use X(USBD_STRING_WINUSB, =0xEE, (APP_USBD_STRING_DESC(...))) ++// - @c ... : List of string descriptors for each defined language. ++#ifndef APP_USBD_STRINGS_USER ++#define APP_USBD_STRINGS_USER X(APP_USER_1, , APP_USBD_STRING_DESC("User 1")) ++#endif ++ ++// ++ ++// APP_USBD_NRF_DFU_TRIGGER_ENABLED - app_usbd_nrf_dfu_trigger - USBD Nordic DFU Trigger class ++ ++ ++#ifndef APP_USBD_NRF_DFU_TRIGGER_ENABLED ++#define APP_USBD_NRF_DFU_TRIGGER_ENABLED 1 ++#endif ++ ++// CRC16_ENABLED - crc16 - CRC16 calculation routines ++ ++ ++#ifndef CRC16_ENABLED ++#define CRC16_ENABLED 1 ++#endif ++ ++// NRF_BALLOC_ENABLED - nrf_balloc - Block allocator module ++//========================================================== ++#ifndef NRF_BALLOC_ENABLED ++#define NRF_BALLOC_ENABLED 1 ++#endif ++// NRF_BALLOC_CONFIG_DEBUG_ENABLED - Enables debug mode in the module. ++//========================================================== ++#ifndef NRF_BALLOC_CONFIG_DEBUG_ENABLED ++#define NRF_BALLOC_CONFIG_DEBUG_ENABLED 0 ++#endif ++// NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS - Number of words used as head guard. <0-255> ++ ++ ++#ifndef NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS ++#define NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS 1 ++#endif ++ ++// NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS - Number of words used as tail guard. <0-255> ++ ++ ++#ifndef NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS ++#define NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS 1 ++#endif ++ ++// NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED - Enables basic checks in this module. ++ ++ ++#ifndef NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED ++#define NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED 0 ++#endif ++ ++// NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED - Enables double memory free check in this module. ++ ++ ++#ifndef NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED ++#define NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED 0 ++#endif ++ ++// NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED - Enables free memory corruption check in this module. ++ ++ ++#ifndef NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED ++#define NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED 0 ++#endif ++ ++// NRF_BALLOC_CLI_CMDS - Enable CLI commands specific to the module ++ ++ ++#ifndef NRF_BALLOC_CLI_CMDS ++#define NRF_BALLOC_CLI_CMDS 0 ++#endif ++ ++// ++ ++// ++ ++// NRF_FPRINTF_ENABLED - nrf_fprintf - fprintf function. ++ ++ ++#ifndef NRF_FPRINTF_ENABLED ++#define NRF_FPRINTF_ENABLED 1 ++#endif ++ ++// NRF_MEMOBJ_ENABLED - nrf_memobj - Linked memory allocator module ++ ++ ++#ifndef NRF_MEMOBJ_ENABLED ++#define NRF_MEMOBJ_ENABLED 1 ++#endif ++ ++// NRF_QUEUE_ENABLED - nrf_queue - Queue module ++//========================================================== ++#ifndef NRF_QUEUE_ENABLED ++#define NRF_QUEUE_ENABLED 1 ++#endif ++// NRF_QUEUE_CLI_CMDS - Enable CLI commands specific to the module ++ ++ ++#ifndef NRF_QUEUE_CLI_CMDS ++#define NRF_QUEUE_CLI_CMDS 0 ++#endif ++ ++// ++ ++// NRF_SECTION_ITER_ENABLED - nrf_section_iter - Section iterator ++ ++ ++#ifndef NRF_SECTION_ITER_ENABLED ++#define NRF_SECTION_ITER_ENABLED 1 ++#endif ++ ++// NRF_STRERROR_ENABLED - nrf_strerror - Library for converting error code to string. ++ ++ ++#ifndef NRF_STRERROR_ENABLED ++#define NRF_STRERROR_ENABLED 1 ++#endif ++ ++// app_usbd_cdc_acm - USB CDC ACM class ++ ++//========================================================== ++// APP_USBD_CDC_ACM_ENABLED - Enabling USBD CDC ACM Class library ++ ++ ++#ifndef APP_USBD_CDC_ACM_ENABLED ++#define APP_USBD_CDC_ACM_ENABLED 1 ++#endif ++ ++// APP_USBD_CDC_ACM_ZLP_ON_EPSIZE_WRITE - Send ZLP on write with same size as endpoint ++ ++ ++// If enabled, CDC ACM class will automatically send a zero length packet after transfer which has the same size as endpoint. ++// This may limit throughput if a lot of binary data is sent, but in terminal mode operation it makes sure that the data is always displayed right after it is sent. ++ ++#ifndef APP_USBD_CDC_ACM_ZLP_ON_EPSIZE_WRITE ++#define APP_USBD_CDC_ACM_ZLP_ON_EPSIZE_WRITE 1 ++#endif ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++// nRF_Log ++ ++//========================================================== ++// NRF_LOG_BACKEND_RTT_ENABLED - nrf_log_backend_rtt - Log RTT backend ++//========================================================== ++#ifndef NRF_LOG_BACKEND_RTT_ENABLED ++#define NRF_LOG_BACKEND_RTT_ENABLED 0 ++#endif ++// NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE - Size of buffer for partially processed strings. ++// Size of the buffer is a trade-off between RAM usage and processing. ++// if buffer is smaller then strings will often be fragmented. ++// It is recommended to use size which will fit typical log and only the ++// longer one will be fragmented. ++ ++#ifndef NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE ++#define NRF_LOG_BACKEND_RTT_TEMP_BUFFER_SIZE 64 ++#endif ++ ++// NRF_LOG_BACKEND_RTT_TX_RETRY_DELAY_MS - Period before retrying writing to RTT ++#ifndef NRF_LOG_BACKEND_RTT_TX_RETRY_DELAY_MS ++#define NRF_LOG_BACKEND_RTT_TX_RETRY_DELAY_MS 1 ++#endif ++ ++// NRF_LOG_BACKEND_RTT_TX_RETRY_CNT - Writing to RTT retries. ++// If RTT fails to accept any new data after retries ++// module assumes that host is not active and on next ++// request it will perform only one write attempt. ++// On successful writing, module assumes that host is active ++// and scheme with retry is applied again. ++ ++#ifndef NRF_LOG_BACKEND_RTT_TX_RETRY_CNT ++#define NRF_LOG_BACKEND_RTT_TX_RETRY_CNT 3 ++#endif ++ ++// ++ ++// NRF_LOG_BACKEND_UART_ENABLED - nrf_log_backend_uart - Log UART backend ++//========================================================== ++#ifndef NRF_LOG_BACKEND_UART_ENABLED ++#define NRF_LOG_BACKEND_UART_ENABLED 0 ++#endif ++// NRF_LOG_BACKEND_UART_TX_PIN - UART TX pin ++#ifndef NRF_LOG_BACKEND_UART_TX_PIN ++#define NRF_LOG_BACKEND_UART_TX_PIN 31 ++#endif ++ ++// NRF_LOG_BACKEND_UART_BAUDRATE - Default Baudrate ++ ++// <323584=> 1200 baud ++// <643072=> 2400 baud ++// <1290240=> 4800 baud ++// <2576384=> 9600 baud ++// <3862528=> 14400 baud ++// <5152768=> 19200 baud ++// <7716864=> 28800 baud ++// <10289152=> 38400 baud ++// <15400960=> 57600 baud ++// <20615168=> 76800 baud ++// <30801920=> 115200 baud ++// <61865984=> 230400 baud ++// <67108864=> 250000 baud ++// <121634816=> 460800 baud ++// <251658240=> 921600 baud ++// <268435456=> 1000000 baud ++ ++#ifndef NRF_LOG_BACKEND_UART_BAUDRATE ++#define NRF_LOG_BACKEND_UART_BAUDRATE 30801920 ++#endif ++ ++// NRF_LOG_BACKEND_UART_TEMP_BUFFER_SIZE - Size of buffer for partially processed strings. ++// Size of the buffer is a trade-off between RAM usage and processing. ++// if buffer is smaller then strings will often be fragmented. ++// It is recommended to use size which will fit typical log and only the ++// longer one will be fragmented. ++ ++#ifndef NRF_LOG_BACKEND_UART_TEMP_BUFFER_SIZE ++#define NRF_LOG_BACKEND_UART_TEMP_BUFFER_SIZE 64 ++#endif ++ ++// ++ ++// NRF_LOG_ENABLED - nrf_log - Logger ++//========================================================== ++#ifndef NRF_LOG_ENABLED ++#define NRF_LOG_ENABLED 0 ++#endif ++// Log message pool - Configuration of log message pool ++ ++//========================================================== ++// NRF_LOG_MSGPOOL_ELEMENT_SIZE - Size of a single element in the pool of memory objects. ++// If a small value is set, then performance of logs processing ++// is degraded because data is fragmented. Bigger value impacts ++// RAM memory utilization. The size is set to fit a message with ++// a timestamp and up to 2 arguments in a single memory object. ++ ++#ifndef NRF_LOG_MSGPOOL_ELEMENT_SIZE ++#define NRF_LOG_MSGPOOL_ELEMENT_SIZE 20 ++#endif ++ ++// NRF_LOG_MSGPOOL_ELEMENT_COUNT - Number of elements in the pool of memory objects ++// If a small value is set, then it may lead to a deadlock ++// in certain cases if backend has high latency and holds ++// multiple messages for long time. Bigger value impacts ++// RAM memory usage. ++ ++#ifndef NRF_LOG_MSGPOOL_ELEMENT_COUNT ++#define NRF_LOG_MSGPOOL_ELEMENT_COUNT 8 ++#endif ++ ++// ++//========================================================== ++ ++// NRF_LOG_ALLOW_OVERFLOW - Configures behavior when circular buffer is full. ++ ++ ++// If set then oldest logs are overwritten. Otherwise a ++// marker is injected informing about overflow. ++ ++#ifndef NRF_LOG_ALLOW_OVERFLOW ++#define NRF_LOG_ALLOW_OVERFLOW 1 ++#endif ++ ++// NRF_LOG_BUFSIZE - Size of the buffer for storing logs (in bytes). ++ ++ ++// Must be power of 2 and multiple of 4. ++// If NRF_LOG_DEFERRED = 0 then buffer size can be reduced to minimum. ++// <128=> 128 ++// <256=> 256 ++// <512=> 512 ++// <1024=> 1024 ++// <2048=> 2048 ++// <4096=> 4096 ++// <8192=> 8192 ++// <16384=> 16384 ++ ++#ifndef NRF_LOG_BUFSIZE ++#define NRF_LOG_BUFSIZE 1024 ++#endif ++ ++// NRF_LOG_CLI_CMDS - Enable CLI commands for the module. ++ ++ ++#ifndef NRF_LOG_CLI_CMDS ++#define NRF_LOG_CLI_CMDS 0 ++#endif ++ ++// NRF_LOG_DEFAULT_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_LOG_DEFAULT_LEVEL ++#define NRF_LOG_DEFAULT_LEVEL 3 ++#endif ++ ++// NRF_LOG_DEFERRED - Enable deffered logger. ++ ++ ++// Log data is buffered and can be processed in idle. ++ ++#ifndef NRF_LOG_DEFERRED ++#define NRF_LOG_DEFERRED 1 ++#endif ++ ++// NRF_LOG_FILTERS_ENABLED - Enable dynamic filtering of logs. ++ ++ ++#ifndef NRF_LOG_FILTERS_ENABLED ++#define NRF_LOG_FILTERS_ENABLED 0 ++#endif ++ ++// NRF_LOG_STR_PUSH_BUFFER_SIZE - Size of the buffer dedicated for strings stored using @ref NRF_LOG_PUSH. ++ ++// <16=> 16 ++// <32=> 32 ++// <64=> 64 ++// <128=> 128 ++// <256=> 256 ++// <512=> 512 ++// <1024=> 1024 ++ ++#ifndef NRF_LOG_STR_PUSH_BUFFER_SIZE ++#define NRF_LOG_STR_PUSH_BUFFER_SIZE 128 ++#endif ++ ++// NRF_LOG_STR_PUSH_BUFFER_SIZE - Size of the buffer dedicated for strings stored using @ref NRF_LOG_PUSH. ++ ++// <16=> 16 ++// <32=> 32 ++// <64=> 64 ++// <128=> 128 ++// <256=> 256 ++// <512=> 512 ++// <1024=> 1024 ++ ++#ifndef NRF_LOG_STR_PUSH_BUFFER_SIZE ++#define NRF_LOG_STR_PUSH_BUFFER_SIZE 128 ++#endif ++ ++// NRF_LOG_USES_COLORS - If enabled then ANSI escape code for colors is prefixed to every string ++//========================================================== ++#ifndef NRF_LOG_USES_COLORS ++#define NRF_LOG_USES_COLORS 0 ++#endif ++// NRF_LOG_COLOR_DEFAULT - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_LOG_COLOR_DEFAULT ++#define NRF_LOG_COLOR_DEFAULT 0 ++#endif ++ ++// NRF_LOG_ERROR_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_LOG_ERROR_COLOR ++#define NRF_LOG_ERROR_COLOR 2 ++#endif ++ ++// NRF_LOG_WARNING_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_LOG_WARNING_COLOR ++#define NRF_LOG_WARNING_COLOR 4 ++#endif ++ ++// ++ ++// NRF_LOG_USES_TIMESTAMP - Enable timestamping ++ ++// Function for getting the timestamp is provided by the user ++//========================================================== ++#ifndef NRF_LOG_USES_TIMESTAMP ++#define NRF_LOG_USES_TIMESTAMP 0 ++#endif ++// NRF_LOG_TIMESTAMP_DEFAULT_FREQUENCY - Default frequency of the timestamp (in Hz) or 0 to use app_timer frequency. ++#ifndef NRF_LOG_TIMESTAMP_DEFAULT_FREQUENCY ++#define NRF_LOG_TIMESTAMP_DEFAULT_FREQUENCY 0 ++#endif ++ ++// ++ ++// nrf_log module configuration ++ ++//========================================================== ++// nrf_log in nRF_Core ++ ++//========================================================== ++// NRF_MPU_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_MPU_CONFIG_LOG_ENABLED ++#define NRF_MPU_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_MPU_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_MPU_CONFIG_LOG_LEVEL ++#define NRF_MPU_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_MPU_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_MPU_CONFIG_INFO_COLOR ++#define NRF_MPU_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_MPU_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_MPU_CONFIG_DEBUG_COLOR ++#define NRF_MPU_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_STACK_GUARD_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_STACK_GUARD_CONFIG_LOG_ENABLED ++#define NRF_STACK_GUARD_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_STACK_GUARD_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_STACK_GUARD_CONFIG_LOG_LEVEL ++#define NRF_STACK_GUARD_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_STACK_GUARD_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_STACK_GUARD_CONFIG_INFO_COLOR ++#define NRF_STACK_GUARD_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_STACK_GUARD_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_STACK_GUARD_CONFIG_DEBUG_COLOR ++#define NRF_STACK_GUARD_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// TASK_MANAGER_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef TASK_MANAGER_CONFIG_LOG_ENABLED ++#define TASK_MANAGER_CONFIG_LOG_ENABLED 0 ++#endif ++// TASK_MANAGER_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef TASK_MANAGER_CONFIG_LOG_LEVEL ++#define TASK_MANAGER_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// TASK_MANAGER_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TASK_MANAGER_CONFIG_INFO_COLOR ++#define TASK_MANAGER_CONFIG_INFO_COLOR 0 ++#endif ++ ++// TASK_MANAGER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TASK_MANAGER_CONFIG_DEBUG_COLOR ++#define TASK_MANAGER_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++//========================================================== ++ ++// nrf_log in nRF_Drivers ++ ++//========================================================== ++// CLOCK_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef CLOCK_CONFIG_LOG_ENABLED ++#define CLOCK_CONFIG_LOG_ENABLED 0 ++#endif ++// CLOCK_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef CLOCK_CONFIG_LOG_LEVEL ++#define CLOCK_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// CLOCK_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef CLOCK_CONFIG_INFO_COLOR ++#define CLOCK_CONFIG_INFO_COLOR 0 ++#endif ++ ++// CLOCK_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef CLOCK_CONFIG_DEBUG_COLOR ++#define CLOCK_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// COMP_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef COMP_CONFIG_LOG_ENABLED ++#define COMP_CONFIG_LOG_ENABLED 0 ++#endif ++// COMP_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef COMP_CONFIG_LOG_LEVEL ++#define COMP_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// COMP_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef COMP_CONFIG_INFO_COLOR ++#define COMP_CONFIG_INFO_COLOR 0 ++#endif ++ ++// COMP_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef COMP_CONFIG_DEBUG_COLOR ++#define COMP_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// GPIOTE_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef GPIOTE_CONFIG_LOG_ENABLED ++#define GPIOTE_CONFIG_LOG_ENABLED 0 ++#endif ++// GPIOTE_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef GPIOTE_CONFIG_LOG_LEVEL ++#define GPIOTE_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// GPIOTE_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef GPIOTE_CONFIG_INFO_COLOR ++#define GPIOTE_CONFIG_INFO_COLOR 0 ++#endif ++ ++// GPIOTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef GPIOTE_CONFIG_DEBUG_COLOR ++#define GPIOTE_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// LPCOMP_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef LPCOMP_CONFIG_LOG_ENABLED ++#define LPCOMP_CONFIG_LOG_ENABLED 0 ++#endif ++// LPCOMP_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef LPCOMP_CONFIG_LOG_LEVEL ++#define LPCOMP_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// LPCOMP_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef LPCOMP_CONFIG_INFO_COLOR ++#define LPCOMP_CONFIG_INFO_COLOR 0 ++#endif ++ ++// LPCOMP_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef LPCOMP_CONFIG_DEBUG_COLOR ++#define LPCOMP_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// MAX3421E_HOST_CONFIG_LOG_ENABLED - Enable logging in the module ++//========================================================== ++#ifndef MAX3421E_HOST_CONFIG_LOG_ENABLED ++#define MAX3421E_HOST_CONFIG_LOG_ENABLED 0 ++#endif ++// MAX3421E_HOST_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef MAX3421E_HOST_CONFIG_LOG_LEVEL ++#define MAX3421E_HOST_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// MAX3421E_HOST_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef MAX3421E_HOST_CONFIG_INFO_COLOR ++#define MAX3421E_HOST_CONFIG_INFO_COLOR 0 ++#endif ++ ++// MAX3421E_HOST_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef MAX3421E_HOST_CONFIG_DEBUG_COLOR ++#define MAX3421E_HOST_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// PDM_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef PDM_CONFIG_LOG_ENABLED ++#define PDM_CONFIG_LOG_ENABLED 0 ++#endif ++// PDM_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef PDM_CONFIG_LOG_LEVEL ++#define PDM_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// PDM_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PDM_CONFIG_INFO_COLOR ++#define PDM_CONFIG_INFO_COLOR 0 ++#endif ++ ++// PDM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PDM_CONFIG_DEBUG_COLOR ++#define PDM_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// PPI_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef PPI_CONFIG_LOG_ENABLED ++#define PPI_CONFIG_LOG_ENABLED 0 ++#endif ++// PPI_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef PPI_CONFIG_LOG_LEVEL ++#define PPI_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// PPI_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PPI_CONFIG_INFO_COLOR ++#define PPI_CONFIG_INFO_COLOR 0 ++#endif ++ ++// PPI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PPI_CONFIG_DEBUG_COLOR ++#define PPI_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// PWM_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef PWM_CONFIG_LOG_ENABLED ++#define PWM_CONFIG_LOG_ENABLED 0 ++#endif ++// PWM_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef PWM_CONFIG_LOG_LEVEL ++#define PWM_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// PWM_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PWM_CONFIG_INFO_COLOR ++#define PWM_CONFIG_INFO_COLOR 0 ++#endif ++ ++// PWM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PWM_CONFIG_DEBUG_COLOR ++#define PWM_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// QDEC_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef QDEC_CONFIG_LOG_ENABLED ++#define QDEC_CONFIG_LOG_ENABLED 0 ++#endif ++// QDEC_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef QDEC_CONFIG_LOG_LEVEL ++#define QDEC_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// QDEC_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef QDEC_CONFIG_INFO_COLOR ++#define QDEC_CONFIG_INFO_COLOR 0 ++#endif ++ ++// QDEC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef QDEC_CONFIG_DEBUG_COLOR ++#define QDEC_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// RNG_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef RNG_CONFIG_LOG_ENABLED ++#define RNG_CONFIG_LOG_ENABLED 0 ++#endif ++// RNG_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef RNG_CONFIG_LOG_LEVEL ++#define RNG_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// RNG_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef RNG_CONFIG_INFO_COLOR ++#define RNG_CONFIG_INFO_COLOR 0 ++#endif ++ ++// RNG_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef RNG_CONFIG_DEBUG_COLOR ++#define RNG_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED - Enables logging of random numbers. ++ ++ ++#ifndef RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED ++#define RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED 0 ++#endif ++ ++// ++ ++// RTC_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef RTC_CONFIG_LOG_ENABLED ++#define RTC_CONFIG_LOG_ENABLED 0 ++#endif ++// RTC_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef RTC_CONFIG_LOG_LEVEL ++#define RTC_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// RTC_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef RTC_CONFIG_INFO_COLOR ++#define RTC_CONFIG_INFO_COLOR 0 ++#endif ++ ++// RTC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef RTC_CONFIG_DEBUG_COLOR ++#define RTC_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// SAADC_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef SAADC_CONFIG_LOG_ENABLED ++#define SAADC_CONFIG_LOG_ENABLED 0 ++#endif ++// SAADC_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef SAADC_CONFIG_LOG_LEVEL ++#define SAADC_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// SAADC_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SAADC_CONFIG_INFO_COLOR ++#define SAADC_CONFIG_INFO_COLOR 0 ++#endif ++ ++// SAADC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SAADC_CONFIG_DEBUG_COLOR ++#define SAADC_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// SPIS_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef SPIS_CONFIG_LOG_ENABLED ++#define SPIS_CONFIG_LOG_ENABLED 0 ++#endif ++// SPIS_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef SPIS_CONFIG_LOG_LEVEL ++#define SPIS_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// SPIS_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SPIS_CONFIG_INFO_COLOR ++#define SPIS_CONFIG_INFO_COLOR 0 ++#endif ++ ++// SPIS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SPIS_CONFIG_DEBUG_COLOR ++#define SPIS_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// SPI_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef SPI_CONFIG_LOG_ENABLED ++#define SPI_CONFIG_LOG_ENABLED 0 ++#endif ++// SPI_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef SPI_CONFIG_LOG_LEVEL ++#define SPI_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// SPI_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SPI_CONFIG_INFO_COLOR ++#define SPI_CONFIG_INFO_COLOR 0 ++#endif ++ ++// SPI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SPI_CONFIG_DEBUG_COLOR ++#define SPI_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// TIMER_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef TIMER_CONFIG_LOG_ENABLED ++#define TIMER_CONFIG_LOG_ENABLED 0 ++#endif ++// TIMER_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef TIMER_CONFIG_LOG_LEVEL ++#define TIMER_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// TIMER_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TIMER_CONFIG_INFO_COLOR ++#define TIMER_CONFIG_INFO_COLOR 0 ++#endif ++ ++// TIMER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TIMER_CONFIG_DEBUG_COLOR ++#define TIMER_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// TWIS_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef TWIS_CONFIG_LOG_ENABLED ++#define TWIS_CONFIG_LOG_ENABLED 0 ++#endif ++// TWIS_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef TWIS_CONFIG_LOG_LEVEL ++#define TWIS_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// TWIS_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TWIS_CONFIG_INFO_COLOR ++#define TWIS_CONFIG_INFO_COLOR 0 ++#endif ++ ++// TWIS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TWIS_CONFIG_DEBUG_COLOR ++#define TWIS_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// TWI_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef TWI_CONFIG_LOG_ENABLED ++#define TWI_CONFIG_LOG_ENABLED 0 ++#endif ++// TWI_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef TWI_CONFIG_LOG_LEVEL ++#define TWI_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// TWI_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TWI_CONFIG_INFO_COLOR ++#define TWI_CONFIG_INFO_COLOR 0 ++#endif ++ ++// TWI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef TWI_CONFIG_DEBUG_COLOR ++#define TWI_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// UART_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef UART_CONFIG_LOG_ENABLED ++#define UART_CONFIG_LOG_ENABLED 0 ++#endif ++// UART_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef UART_CONFIG_LOG_LEVEL ++#define UART_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// UART_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef UART_CONFIG_INFO_COLOR ++#define UART_CONFIG_INFO_COLOR 0 ++#endif ++ ++// UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef UART_CONFIG_DEBUG_COLOR ++#define UART_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// USBD_CONFIG_LOG_ENABLED - Enable logging in the module ++//========================================================== ++#ifndef USBD_CONFIG_LOG_ENABLED ++#define USBD_CONFIG_LOG_ENABLED 0 ++#endif ++// USBD_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef USBD_CONFIG_LOG_LEVEL ++#define USBD_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// USBD_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef USBD_CONFIG_INFO_COLOR ++#define USBD_CONFIG_INFO_COLOR 0 ++#endif ++ ++// USBD_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef USBD_CONFIG_DEBUG_COLOR ++#define USBD_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// WDT_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef WDT_CONFIG_LOG_ENABLED ++#define WDT_CONFIG_LOG_ENABLED 0 ++#endif ++// WDT_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef WDT_CONFIG_LOG_LEVEL ++#define WDT_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// WDT_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef WDT_CONFIG_INFO_COLOR ++#define WDT_CONFIG_INFO_COLOR 0 ++#endif ++ ++// WDT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef WDT_CONFIG_DEBUG_COLOR ++#define WDT_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++//========================================================== ++ ++// nrf_log in nRF_Libraries ++ ++//========================================================== ++// APP_TIMER_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef APP_TIMER_CONFIG_LOG_ENABLED ++#define APP_TIMER_CONFIG_LOG_ENABLED 0 ++#endif ++// APP_TIMER_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_TIMER_CONFIG_LOG_LEVEL ++#define APP_TIMER_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// APP_TIMER_CONFIG_INITIAL_LOG_LEVEL - Initial severity level if dynamic filtering is enabled. ++ ++ ++// If module generates a lot of logs, initial log level can ++// be decreased to prevent flooding. Severity level can be ++// increased on instance basis. ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_TIMER_CONFIG_INITIAL_LOG_LEVEL ++#define APP_TIMER_CONFIG_INITIAL_LOG_LEVEL 3 ++#endif ++ ++// APP_TIMER_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_TIMER_CONFIG_INFO_COLOR ++#define APP_TIMER_CONFIG_INFO_COLOR 0 ++#endif ++ ++// APP_TIMER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_TIMER_CONFIG_DEBUG_COLOR ++#define APP_TIMER_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// APP_USBD_CDC_ACM_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef APP_USBD_CDC_ACM_CONFIG_LOG_ENABLED ++#define APP_USBD_CDC_ACM_CONFIG_LOG_ENABLED 0 ++#endif ++// APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL ++#define APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// APP_USBD_CDC_ACM_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_CDC_ACM_CONFIG_INFO_COLOR ++#define APP_USBD_CDC_ACM_CONFIG_INFO_COLOR 0 ++#endif ++ ++// APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR ++#define APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// APP_USBD_CONFIG_LOG_ENABLED - Enable logging in the module. ++//========================================================== ++#ifndef APP_USBD_CONFIG_LOG_ENABLED ++#define APP_USBD_CONFIG_LOG_ENABLED 0 ++#endif ++// APP_USBD_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_USBD_CONFIG_LOG_LEVEL ++#define APP_USBD_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// APP_USBD_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_CONFIG_INFO_COLOR ++#define APP_USBD_CONFIG_INFO_COLOR 0 ++#endif ++ ++// APP_USBD_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_CONFIG_DEBUG_COLOR ++#define APP_USBD_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// APP_USBD_DUMMY_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef APP_USBD_DUMMY_CONFIG_LOG_ENABLED ++#define APP_USBD_DUMMY_CONFIG_LOG_ENABLED 0 ++#endif ++// APP_USBD_DUMMY_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_USBD_DUMMY_CONFIG_LOG_LEVEL ++#define APP_USBD_DUMMY_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// APP_USBD_DUMMY_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_DUMMY_CONFIG_INFO_COLOR ++#define APP_USBD_DUMMY_CONFIG_INFO_COLOR 0 ++#endif ++ ++// APP_USBD_DUMMY_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_DUMMY_CONFIG_DEBUG_COLOR ++#define APP_USBD_DUMMY_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// APP_USBD_MSC_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef APP_USBD_MSC_CONFIG_LOG_ENABLED ++#define APP_USBD_MSC_CONFIG_LOG_ENABLED 0 ++#endif ++// APP_USBD_MSC_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_USBD_MSC_CONFIG_LOG_LEVEL ++#define APP_USBD_MSC_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// APP_USBD_MSC_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_MSC_CONFIG_INFO_COLOR ++#define APP_USBD_MSC_CONFIG_INFO_COLOR 0 ++#endif ++ ++// APP_USBD_MSC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_MSC_CONFIG_DEBUG_COLOR ++#define APP_USBD_MSC_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_ENABLED ++#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_ENABLED 0 ++#endif ++// APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_LEVEL ++#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// APP_USBD_NRF_DFU_TRIGGER_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_INFO_COLOR ++#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_INFO_COLOR 0 ++#endif ++ ++// APP_USBD_NRF_DFU_TRIGGER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_DEBUG_COLOR ++#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_ATFIFO_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_ATFIFO_CONFIG_LOG_ENABLED ++#define NRF_ATFIFO_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_ATFIFO_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_ATFIFO_CONFIG_LOG_LEVEL ++#define NRF_ATFIFO_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_ATFIFO_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_ATFIFO_CONFIG_LOG_INIT_FILTER_LEVEL ++#define NRF_ATFIFO_CONFIG_LOG_INIT_FILTER_LEVEL 3 ++#endif ++ ++// NRF_ATFIFO_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_ATFIFO_CONFIG_INFO_COLOR ++#define NRF_ATFIFO_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_ATFIFO_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_ATFIFO_CONFIG_DEBUG_COLOR ++#define NRF_ATFIFO_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_BALLOC_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_BALLOC_CONFIG_LOG_ENABLED ++#define NRF_BALLOC_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_BALLOC_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BALLOC_CONFIG_LOG_LEVEL ++#define NRF_BALLOC_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_BALLOC_CONFIG_INITIAL_LOG_LEVEL - Initial severity level if dynamic filtering is enabled. ++ ++ ++// If module generates a lot of logs, initial log level can ++// be decreased to prevent flooding. Severity level can be ++// increased on instance basis. ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BALLOC_CONFIG_INITIAL_LOG_LEVEL ++#define NRF_BALLOC_CONFIG_INITIAL_LOG_LEVEL 3 ++#endif ++ ++// NRF_BALLOC_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BALLOC_CONFIG_INFO_COLOR ++#define NRF_BALLOC_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_BALLOC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BALLOC_CONFIG_DEBUG_COLOR ++#define NRF_BALLOC_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_ENABLED ++#define NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_LEVEL ++#define NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_INIT_FILTER_LEVEL ++#define NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_INIT_FILTER_LEVEL 3 ++#endif ++ ++// NRF_BLOCK_DEV_EMPTY_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BLOCK_DEV_EMPTY_CONFIG_INFO_COLOR ++#define NRF_BLOCK_DEV_EMPTY_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_BLOCK_DEV_EMPTY_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BLOCK_DEV_EMPTY_CONFIG_DEBUG_COLOR ++#define NRF_BLOCK_DEV_EMPTY_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_BLOCK_DEV_QSPI_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_BLOCK_DEV_QSPI_CONFIG_LOG_ENABLED ++#define NRF_BLOCK_DEV_QSPI_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_BLOCK_DEV_QSPI_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BLOCK_DEV_QSPI_CONFIG_LOG_LEVEL ++#define NRF_BLOCK_DEV_QSPI_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_BLOCK_DEV_QSPI_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BLOCK_DEV_QSPI_CONFIG_LOG_INIT_FILTER_LEVEL ++#define NRF_BLOCK_DEV_QSPI_CONFIG_LOG_INIT_FILTER_LEVEL 3 ++#endif ++ ++// NRF_BLOCK_DEV_QSPI_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BLOCK_DEV_QSPI_CONFIG_INFO_COLOR ++#define NRF_BLOCK_DEV_QSPI_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_BLOCK_DEV_QSPI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BLOCK_DEV_QSPI_CONFIG_DEBUG_COLOR ++#define NRF_BLOCK_DEV_QSPI_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_BLOCK_DEV_RAM_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_BLOCK_DEV_RAM_CONFIG_LOG_ENABLED ++#define NRF_BLOCK_DEV_RAM_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_BLOCK_DEV_RAM_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BLOCK_DEV_RAM_CONFIG_LOG_LEVEL ++#define NRF_BLOCK_DEV_RAM_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_BLOCK_DEV_RAM_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_BLOCK_DEV_RAM_CONFIG_LOG_INIT_FILTER_LEVEL ++#define NRF_BLOCK_DEV_RAM_CONFIG_LOG_INIT_FILTER_LEVEL 3 ++#endif ++ ++// NRF_BLOCK_DEV_RAM_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BLOCK_DEV_RAM_CONFIG_INFO_COLOR ++#define NRF_BLOCK_DEV_RAM_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_BLOCK_DEV_RAM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_BLOCK_DEV_RAM_CONFIG_DEBUG_COLOR ++#define NRF_BLOCK_DEV_RAM_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_CLI_BLE_UART_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_CLI_BLE_UART_CONFIG_LOG_ENABLED ++#define NRF_CLI_BLE_UART_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL ++#define NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_CLI_BLE_UART_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_CLI_BLE_UART_CONFIG_INFO_COLOR ++#define NRF_CLI_BLE_UART_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR ++#define NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_CLI_LIBUARTE_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_CLI_LIBUARTE_CONFIG_LOG_ENABLED ++#define NRF_CLI_LIBUARTE_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_CLI_LIBUARTE_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_CLI_LIBUARTE_CONFIG_LOG_LEVEL ++#define NRF_CLI_LIBUARTE_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_CLI_LIBUARTE_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_CLI_LIBUARTE_CONFIG_INFO_COLOR ++#define NRF_CLI_LIBUARTE_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_CLI_LIBUARTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_CLI_LIBUARTE_CONFIG_DEBUG_COLOR ++#define NRF_CLI_LIBUARTE_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_CLI_UART_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_CLI_UART_CONFIG_LOG_ENABLED ++#define NRF_CLI_UART_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_CLI_UART_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_CLI_UART_CONFIG_LOG_LEVEL ++#define NRF_CLI_UART_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_CLI_UART_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_CLI_UART_CONFIG_INFO_COLOR ++#define NRF_CLI_UART_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_CLI_UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_CLI_UART_CONFIG_DEBUG_COLOR ++#define NRF_CLI_UART_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_LIBUARTE_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_LIBUARTE_CONFIG_LOG_ENABLED ++#define NRF_LIBUARTE_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_LIBUARTE_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_LIBUARTE_CONFIG_LOG_LEVEL ++#define NRF_LIBUARTE_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_LIBUARTE_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_LIBUARTE_CONFIG_INFO_COLOR ++#define NRF_LIBUARTE_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_LIBUARTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_LIBUARTE_CONFIG_DEBUG_COLOR ++#define NRF_LIBUARTE_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_MEMOBJ_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_MEMOBJ_CONFIG_LOG_ENABLED ++#define NRF_MEMOBJ_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_MEMOBJ_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_MEMOBJ_CONFIG_LOG_LEVEL ++#define NRF_MEMOBJ_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_MEMOBJ_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_MEMOBJ_CONFIG_INFO_COLOR ++#define NRF_MEMOBJ_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_MEMOBJ_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_MEMOBJ_CONFIG_DEBUG_COLOR ++#define NRF_MEMOBJ_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_PWR_MGMT_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_PWR_MGMT_CONFIG_LOG_ENABLED ++#define NRF_PWR_MGMT_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_PWR_MGMT_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_PWR_MGMT_CONFIG_LOG_LEVEL ++#define NRF_PWR_MGMT_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_PWR_MGMT_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_PWR_MGMT_CONFIG_INFO_COLOR ++#define NRF_PWR_MGMT_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_PWR_MGMT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_PWR_MGMT_CONFIG_DEBUG_COLOR ++#define NRF_PWR_MGMT_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_QUEUE_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_QUEUE_CONFIG_LOG_ENABLED ++#define NRF_QUEUE_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_QUEUE_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_QUEUE_CONFIG_LOG_LEVEL ++#define NRF_QUEUE_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_QUEUE_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_QUEUE_CONFIG_LOG_INIT_FILTER_LEVEL ++#define NRF_QUEUE_CONFIG_LOG_INIT_FILTER_LEVEL 3 ++#endif ++ ++// NRF_QUEUE_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_QUEUE_CONFIG_INFO_COLOR ++#define NRF_QUEUE_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_QUEUE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_QUEUE_CONFIG_DEBUG_COLOR ++#define NRF_QUEUE_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_SDH_ANT_LOG_ENABLED - Enable logging in SoftDevice handler (ANT) module. ++//========================================================== ++#ifndef NRF_SDH_ANT_LOG_ENABLED ++#define NRF_SDH_ANT_LOG_ENABLED 0 ++#endif ++// NRF_SDH_ANT_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_SDH_ANT_LOG_LEVEL ++#define NRF_SDH_ANT_LOG_LEVEL 3 ++#endif ++ ++// NRF_SDH_ANT_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_ANT_INFO_COLOR ++#define NRF_SDH_ANT_INFO_COLOR 0 ++#endif ++ ++// NRF_SDH_ANT_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_ANT_DEBUG_COLOR ++#define NRF_SDH_ANT_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_SDH_BLE_LOG_ENABLED - Enable logging in SoftDevice handler (BLE) module. ++//========================================================== ++#ifndef NRF_SDH_BLE_LOG_ENABLED ++#define NRF_SDH_BLE_LOG_ENABLED 1 ++#endif ++// NRF_SDH_BLE_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_SDH_BLE_LOG_LEVEL ++#define NRF_SDH_BLE_LOG_LEVEL 3 ++#endif ++ ++// NRF_SDH_BLE_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_BLE_INFO_COLOR ++#define NRF_SDH_BLE_INFO_COLOR 0 ++#endif ++ ++// NRF_SDH_BLE_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_BLE_DEBUG_COLOR ++#define NRF_SDH_BLE_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_SDH_LOG_ENABLED - Enable logging in SoftDevice handler module. ++//========================================================== ++#ifndef NRF_SDH_LOG_ENABLED ++#define NRF_SDH_LOG_ENABLED 1 ++#endif ++// NRF_SDH_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_SDH_LOG_LEVEL ++#define NRF_SDH_LOG_LEVEL 3 ++#endif ++ ++// NRF_SDH_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_INFO_COLOR ++#define NRF_SDH_INFO_COLOR 0 ++#endif ++ ++// NRF_SDH_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_DEBUG_COLOR ++#define NRF_SDH_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_SDH_SOC_LOG_ENABLED - Enable logging in SoftDevice handler (SoC) module. ++//========================================================== ++#ifndef NRF_SDH_SOC_LOG_ENABLED ++#define NRF_SDH_SOC_LOG_ENABLED 1 ++#endif ++// NRF_SDH_SOC_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_SDH_SOC_LOG_LEVEL ++#define NRF_SDH_SOC_LOG_LEVEL 3 ++#endif ++ ++// NRF_SDH_SOC_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_SOC_INFO_COLOR ++#define NRF_SDH_SOC_INFO_COLOR 0 ++#endif ++ ++// NRF_SDH_SOC_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SDH_SOC_DEBUG_COLOR ++#define NRF_SDH_SOC_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_SORTLIST_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_SORTLIST_CONFIG_LOG_ENABLED ++#define NRF_SORTLIST_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_SORTLIST_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_SORTLIST_CONFIG_LOG_LEVEL ++#define NRF_SORTLIST_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_SORTLIST_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SORTLIST_CONFIG_INFO_COLOR ++#define NRF_SORTLIST_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_SORTLIST_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_SORTLIST_CONFIG_DEBUG_COLOR ++#define NRF_SORTLIST_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// NRF_TWI_SENSOR_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef NRF_TWI_SENSOR_CONFIG_LOG_ENABLED ++#define NRF_TWI_SENSOR_CONFIG_LOG_ENABLED 0 ++#endif ++// NRF_TWI_SENSOR_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef NRF_TWI_SENSOR_CONFIG_LOG_LEVEL ++#define NRF_TWI_SENSOR_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// NRF_TWI_SENSOR_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_TWI_SENSOR_CONFIG_INFO_COLOR ++#define NRF_TWI_SENSOR_CONFIG_INFO_COLOR 0 ++#endif ++ ++// NRF_TWI_SENSOR_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef NRF_TWI_SENSOR_CONFIG_DEBUG_COLOR ++#define NRF_TWI_SENSOR_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// PM_LOG_ENABLED - Enable logging in Peer Manager and its submodules. ++//========================================================== ++#ifndef PM_LOG_ENABLED ++#define PM_LOG_ENABLED 1 ++#endif ++// PM_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef PM_LOG_LEVEL ++#define PM_LOG_LEVEL 3 ++#endif ++ ++// PM_LOG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PM_LOG_INFO_COLOR ++#define PM_LOG_INFO_COLOR 0 ++#endif ++ ++// PM_LOG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef PM_LOG_DEBUG_COLOR ++#define PM_LOG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++//========================================================== ++ ++// nrf_log in nRF_Serialization ++ ++//========================================================== ++// SER_HAL_TRANSPORT_CONFIG_LOG_ENABLED - Enables logging in the module. ++//========================================================== ++#ifndef SER_HAL_TRANSPORT_CONFIG_LOG_ENABLED ++#define SER_HAL_TRANSPORT_CONFIG_LOG_ENABLED 0 ++#endif ++// SER_HAL_TRANSPORT_CONFIG_LOG_LEVEL - Default Severity level ++ ++// <0=> Off ++// <1=> Error ++// <2=> Warning ++// <3=> Info ++// <4=> Debug ++ ++#ifndef SER_HAL_TRANSPORT_CONFIG_LOG_LEVEL ++#define SER_HAL_TRANSPORT_CONFIG_LOG_LEVEL 3 ++#endif ++ ++// SER_HAL_TRANSPORT_CONFIG_INFO_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SER_HAL_TRANSPORT_CONFIG_INFO_COLOR ++#define SER_HAL_TRANSPORT_CONFIG_INFO_COLOR 0 ++#endif ++ ++// SER_HAL_TRANSPORT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. ++ ++// <0=> Default ++// <1=> Black ++// <2=> Red ++// <3=> Green ++// <4=> Yellow ++// <5=> Blue ++// <6=> Magenta ++// <7=> Cyan ++// <8=> White ++ ++#ifndef SER_HAL_TRANSPORT_CONFIG_DEBUG_COLOR ++#define SER_HAL_TRANSPORT_CONFIG_DEBUG_COLOR 0 ++#endif ++ ++// ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++// ++ ++// NRF_LOG_STR_FORMATTER_TIMESTAMP_FORMAT_ENABLED - nrf_log_str_formatter - Log string formatter ++ ++ ++#ifndef NRF_LOG_STR_FORMATTER_TIMESTAMP_FORMAT_ENABLED ++#define NRF_LOG_STR_FORMATTER_TIMESTAMP_FORMAT_ENABLED 1 ++#endif ++ ++// ++//========================================================== ++ ++// nRF_Segger_RTT ++ ++//========================================================== ++// segger_rtt - SEGGER RTT ++ ++//========================================================== ++// SEGGER_RTT_CONFIG_BUFFER_SIZE_UP - Size of upstream buffer. ++// Note that either @ref NRF_LOG_BACKEND_RTT_OUTPUT_BUFFER_SIZE ++// or this value is actually used. It depends on which one is bigger. ++ ++#ifndef SEGGER_RTT_CONFIG_BUFFER_SIZE_UP ++#define SEGGER_RTT_CONFIG_BUFFER_SIZE_UP 512 ++#endif ++ ++// SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS - Size of upstream buffer. ++#ifndef SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS ++#define SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS 2 ++#endif ++ ++// SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN - Size of upstream buffer. ++#ifndef SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN ++#define SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN 16 ++#endif ++ ++// SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS - Size of upstream buffer. ++#ifndef SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS ++#define SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS 2 ++#endif ++ ++// SEGGER_RTT_CONFIG_DEFAULT_MODE - RTT behavior if the buffer is full. ++ ++ ++// The following modes are supported: ++// - SKIP - Do not block, output nothing. ++// - TRIM - Do not block, output as much as fits. ++// - BLOCK - Wait until there is space in the buffer. ++// <0=> SKIP ++// <1=> TRIM ++// <2=> BLOCK_IF_FIFO_FULL ++ ++#ifndef SEGGER_RTT_CONFIG_DEFAULT_MODE ++#define SEGGER_RTT_CONFIG_DEFAULT_MODE 0 ++#endif ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++// nRF_SoftDevice ++ ++//========================================================== ++// NRF_SDH_BLE_ENABLED - nrf_sdh_ble - SoftDevice BLE event handler ++//========================================================== ++#ifndef NRF_SDH_BLE_ENABLED ++#define NRF_SDH_BLE_ENABLED 1 ++#endif ++// BLE Stack configuration - Stack configuration parameters ++ ++// The SoftDevice handler will configure the stack with these parameters when calling @ref nrf_sdh_ble_default_cfg_set. ++// Other libraries might depend on these values; keep them up-to-date even if you are not explicitely calling @ref nrf_sdh_ble_default_cfg_set. ++//========================================================== ++// NRF_SDH_BLE_GAP_DATA_LENGTH <27-251> ++ ++ ++// Requested BLE GAP data length to be negotiated. ++ ++#ifndef NRF_SDH_BLE_GAP_DATA_LENGTH ++#define NRF_SDH_BLE_GAP_DATA_LENGTH 27 ++#endif ++ ++// NRF_SDH_BLE_PERIPHERAL_LINK_COUNT - Maximum number of peripheral links. ++#ifndef NRF_SDH_BLE_PERIPHERAL_LINK_COUNT ++#define NRF_SDH_BLE_PERIPHERAL_LINK_COUNT 8 ++#endif ++ ++// NRF_SDH_BLE_CENTRAL_LINK_COUNT - Maximum number of central links. ++#ifndef NRF_SDH_BLE_CENTRAL_LINK_COUNT ++#define NRF_SDH_BLE_CENTRAL_LINK_COUNT 8 ++#endif ++ ++// NRF_SDH_BLE_TOTAL_LINK_COUNT - Total link count. ++// Maximum number of total concurrent connections using the default configuration. ++ ++#ifndef NRF_SDH_BLE_TOTAL_LINK_COUNT ++#define NRF_SDH_BLE_TOTAL_LINK_COUNT 1 ++#endif ++ ++// NRF_SDH_BLE_GAP_EVENT_LENGTH - GAP event length. ++// The time set aside for this connection on every connection interval in 1.25 ms units. ++ ++#ifndef NRF_SDH_BLE_GAP_EVENT_LENGTH ++#define NRF_SDH_BLE_GAP_EVENT_LENGTH 6 ++#endif ++ ++// NRF_SDH_BLE_GATT_MAX_MTU_SIZE - Static maximum MTU size. ++#ifndef NRF_SDH_BLE_GATT_MAX_MTU_SIZE ++#define NRF_SDH_BLE_GATT_MAX_MTU_SIZE 250 ++#endif ++ ++// NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE - Attribute Table size in bytes. The size must be a multiple of 4. ++#ifndef NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE ++#define NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE 1408 ++#endif ++ ++// NRF_SDH_BLE_VS_UUID_COUNT - The number of vendor-specific UUIDs. ++#ifndef NRF_SDH_BLE_VS_UUID_COUNT ++#define NRF_SDH_BLE_VS_UUID_COUNT 0 ++#endif ++ ++// NRF_SDH_BLE_SERVICE_CHANGED - Include the Service Changed characteristic in the Attribute Table. ++ ++ ++#ifndef NRF_SDH_BLE_SERVICE_CHANGED ++#define NRF_SDH_BLE_SERVICE_CHANGED 0 ++#endif ++ ++// ++//========================================================== ++ ++// BLE Observers - Observers and priority levels ++ ++//========================================================== ++// NRF_SDH_BLE_OBSERVER_PRIO_LEVELS - Total number of priority levels for BLE observers. ++// This setting configures the number of priority levels available for BLE event handlers. ++// The priority level of a handler determines the order in which it receives events, with respect to other handlers. ++ ++#ifndef NRF_SDH_BLE_OBSERVER_PRIO_LEVELS ++#define NRF_SDH_BLE_OBSERVER_PRIO_LEVELS 4 ++#endif ++ ++// BLE Observers priorities - Invididual priorities ++ ++//========================================================== ++// BLE_ADV_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Advertising module. ++ ++#ifndef BLE_ADV_BLE_OBSERVER_PRIO ++#define BLE_ADV_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// BLE_ANCS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Apple Notification Service Client. ++ ++#ifndef BLE_ANCS_C_BLE_OBSERVER_PRIO ++#define BLE_ANCS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_ANS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Alert Notification Service Client. ++ ++#ifndef BLE_ANS_C_BLE_OBSERVER_PRIO ++#define BLE_ANS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_BAS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Battery Service. ++ ++#ifndef BLE_BAS_BLE_OBSERVER_PRIO ++#define BLE_BAS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_BAS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Battery Service Client. ++ ++#ifndef BLE_BAS_C_BLE_OBSERVER_PRIO ++#define BLE_BAS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_BPS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Blood Pressure Service. ++ ++#ifndef BLE_BPS_BLE_OBSERVER_PRIO ++#define BLE_BPS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_CONN_PARAMS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Connection parameters module. ++ ++#ifndef BLE_CONN_PARAMS_BLE_OBSERVER_PRIO ++#define BLE_CONN_PARAMS_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// BLE_CONN_STATE_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Connection State module. ++ ++#ifndef BLE_CONN_STATE_BLE_OBSERVER_PRIO ++#define BLE_CONN_STATE_BLE_OBSERVER_PRIO 0 ++#endif ++ ++// BLE_CSCS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Cycling Speed and Cadence Service. ++ ++#ifndef BLE_CSCS_BLE_OBSERVER_PRIO ++#define BLE_CSCS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_CTS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Current Time Service Client. ++ ++#ifndef BLE_CTS_C_BLE_OBSERVER_PRIO ++#define BLE_CTS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_DB_DISC_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Database Discovery module. ++ ++#ifndef BLE_DB_DISC_BLE_OBSERVER_PRIO ++#define BLE_DB_DISC_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// BLE_DFU_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the DFU Service. ++ ++#ifndef BLE_DFU_BLE_OBSERVER_PRIO ++#define BLE_DFU_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_DIS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Device Information Client. ++ ++#ifndef BLE_DIS_C_BLE_OBSERVER_PRIO ++#define BLE_DIS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_GLS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Glucose Service. ++ ++#ifndef BLE_GLS_BLE_OBSERVER_PRIO ++#define BLE_GLS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_HIDS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Human Interface Device Service. ++ ++#ifndef BLE_HIDS_BLE_OBSERVER_PRIO ++#define BLE_HIDS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_HRS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Heart Rate Service. ++ ++#ifndef BLE_HRS_BLE_OBSERVER_PRIO ++#define BLE_HRS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_HRS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Heart Rate Service Client. ++ ++#ifndef BLE_HRS_C_BLE_OBSERVER_PRIO ++#define BLE_HRS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_HTS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Health Thermometer Service. ++ ++#ifndef BLE_HTS_BLE_OBSERVER_PRIO ++#define BLE_HTS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_IAS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Immediate Alert Service. ++ ++#ifndef BLE_IAS_BLE_OBSERVER_PRIO ++#define BLE_IAS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_IAS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Immediate Alert Service Client. ++ ++#ifndef BLE_IAS_C_BLE_OBSERVER_PRIO ++#define BLE_IAS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_LBS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the LED Button Service. ++ ++#ifndef BLE_LBS_BLE_OBSERVER_PRIO ++#define BLE_LBS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_LBS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the LED Button Service Client. ++ ++#ifndef BLE_LBS_C_BLE_OBSERVER_PRIO ++#define BLE_LBS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_LLS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Link Loss Service. ++ ++#ifndef BLE_LLS_BLE_OBSERVER_PRIO ++#define BLE_LLS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_LNS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Location Navigation Service. ++ ++#ifndef BLE_LNS_BLE_OBSERVER_PRIO ++#define BLE_LNS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_NUS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the UART Service. ++ ++#ifndef BLE_NUS_BLE_OBSERVER_PRIO ++#define BLE_NUS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_NUS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the UART Central Service. ++ ++#ifndef BLE_NUS_C_BLE_OBSERVER_PRIO ++#define BLE_NUS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_OTS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Object transfer service. ++ ++#ifndef BLE_OTS_BLE_OBSERVER_PRIO ++#define BLE_OTS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_OTS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Object transfer service client. ++ ++#ifndef BLE_OTS_C_BLE_OBSERVER_PRIO ++#define BLE_OTS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_RSCS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Running Speed and Cadence Service. ++ ++#ifndef BLE_RSCS_BLE_OBSERVER_PRIO ++#define BLE_RSCS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_RSCS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Running Speed and Cadence Client. ++ ++#ifndef BLE_RSCS_C_BLE_OBSERVER_PRIO ++#define BLE_RSCS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BLE_TPS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the TX Power Service. ++ ++#ifndef BLE_TPS_BLE_OBSERVER_PRIO ++#define BLE_TPS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// BSP_BTN_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Button Control module. ++ ++#ifndef BSP_BTN_BLE_OBSERVER_PRIO ++#define BSP_BTN_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the NFC pairing library. ++ ++#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO ++#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the NFC pairing library. ++ ++#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO ++#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the NFC pairing library. ++ ++#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO ++#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// NRF_BLE_BMS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Bond Management Service. ++ ++#ifndef NRF_BLE_BMS_BLE_OBSERVER_PRIO ++#define NRF_BLE_BMS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// NRF_BLE_CGMS_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Contiuon Glucose Monitoring Service. ++ ++#ifndef NRF_BLE_CGMS_BLE_OBSERVER_PRIO ++#define NRF_BLE_CGMS_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// NRF_BLE_ES_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Eddystone module. ++ ++#ifndef NRF_BLE_ES_BLE_OBSERVER_PRIO ++#define NRF_BLE_ES_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the GATT Service Client. ++ ++#ifndef NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO ++#define NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// NRF_BLE_GATT_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the GATT module. ++ ++#ifndef NRF_BLE_GATT_BLE_OBSERVER_PRIO ++#define NRF_BLE_GATT_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// NRF_BLE_QWR_BLE_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the Queued writes module. ++ ++#ifndef NRF_BLE_QWR_BLE_OBSERVER_PRIO ++#define NRF_BLE_QWR_BLE_OBSERVER_PRIO 2 ++#endif ++ ++// NRF_BLE_SCAN_OBSERVER_PRIO ++// Priority for dispatching the BLE events to the Scanning Module. ++ ++#ifndef NRF_BLE_SCAN_OBSERVER_PRIO ++#define NRF_BLE_SCAN_OBSERVER_PRIO 1 ++#endif ++ ++// PM_BLE_OBSERVER_PRIO - Priority with which BLE events are dispatched to the Peer Manager module. ++#ifndef PM_BLE_OBSERVER_PRIO ++#define PM_BLE_OBSERVER_PRIO 1 ++#endif ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++ ++// ++ ++// NRF_SDH_ENABLED - nrf_sdh - SoftDevice handler ++//========================================================== ++#ifndef NRF_SDH_ENABLED ++#define NRF_SDH_ENABLED 1 ++#endif ++// Dispatch model ++ ++// This setting configures how Stack events are dispatched to the application. ++//========================================================== ++// NRF_SDH_DISPATCH_MODEL ++ ++ ++// NRF_SDH_DISPATCH_MODEL_INTERRUPT: SoftDevice events are passed to the application from the interrupt context. ++// NRF_SDH_DISPATCH_MODEL_APPSH: SoftDevice events are scheduled using @ref app_scheduler. ++// NRF_SDH_DISPATCH_MODEL_POLLING: SoftDevice events are to be fetched manually. ++// <0=> NRF_SDH_DISPATCH_MODEL_INTERRUPT ++// <1=> NRF_SDH_DISPATCH_MODEL_APPSH ++// <2=> NRF_SDH_DISPATCH_MODEL_POLLING ++ ++#ifndef NRF_SDH_DISPATCH_MODEL ++#define NRF_SDH_DISPATCH_MODEL 0 ++#endif ++ ++// ++//========================================================== ++ ++// Clock - SoftDevice clock configuration ++ ++//========================================================== ++// NRF_SDH_CLOCK_LF_SRC - SoftDevice clock source. ++ ++// <0=> NRF_CLOCK_LF_SRC_RC ++// <1=> NRF_CLOCK_LF_SRC_XTAL ++// <2=> NRF_CLOCK_LF_SRC_SYNTH ++ ++#ifndef NRF_SDH_CLOCK_LF_SRC ++#define NRF_SDH_CLOCK_LF_SRC 1 ++#endif ++ ++// NRF_SDH_CLOCK_LF_RC_CTIV - SoftDevice calibration timer interval. ++#ifndef NRF_SDH_CLOCK_LF_RC_CTIV ++#define NRF_SDH_CLOCK_LF_RC_CTIV 0 ++#endif ++ ++// NRF_SDH_CLOCK_LF_RC_TEMP_CTIV - SoftDevice calibration timer interval under constant temperature. ++// How often (in number of calibration intervals) the RC oscillator shall be calibrated ++// if the temperature has not changed. ++ ++#ifndef NRF_SDH_CLOCK_LF_RC_TEMP_CTIV ++#define NRF_SDH_CLOCK_LF_RC_TEMP_CTIV 0 ++#endif ++ ++// NRF_SDH_CLOCK_LF_ACCURACY - External clock accuracy used in the LL to compute timing. ++ ++// <0=> NRF_CLOCK_LF_ACCURACY_250_PPM ++// <1=> NRF_CLOCK_LF_ACCURACY_500_PPM ++// <2=> NRF_CLOCK_LF_ACCURACY_150_PPM ++// <3=> NRF_CLOCK_LF_ACCURACY_100_PPM ++// <4=> NRF_CLOCK_LF_ACCURACY_75_PPM ++// <5=> NRF_CLOCK_LF_ACCURACY_50_PPM ++// <6=> NRF_CLOCK_LF_ACCURACY_30_PPM ++// <7=> NRF_CLOCK_LF_ACCURACY_20_PPM ++// <8=> NRF_CLOCK_LF_ACCURACY_10_PPM ++// <9=> NRF_CLOCK_LF_ACCURACY_5_PPM ++// <10=> NRF_CLOCK_LF_ACCURACY_2_PPM ++// <11=> NRF_CLOCK_LF_ACCURACY_1_PPM ++ ++#ifndef NRF_SDH_CLOCK_LF_ACCURACY ++#define NRF_SDH_CLOCK_LF_ACCURACY 7 ++#endif ++ ++// ++//========================================================== ++ ++// SDH Observers - Observers and priority levels ++ ++//========================================================== ++// NRF_SDH_REQ_OBSERVER_PRIO_LEVELS - Total number of priority levels for request observers. ++// This setting configures the number of priority levels available for the SoftDevice request event handlers. ++// The priority level of a handler determines the order in which it receives events, with respect to other handlers. ++ ++#ifndef NRF_SDH_REQ_OBSERVER_PRIO_LEVELS ++#define NRF_SDH_REQ_OBSERVER_PRIO_LEVELS 2 ++#endif ++ ++// NRF_SDH_STATE_OBSERVER_PRIO_LEVELS - Total number of priority levels for state observers. ++// This setting configures the number of priority levels available for the SoftDevice state event handlers. ++// The priority level of a handler determines the order in which it receives events, with respect to other handlers. ++ ++#ifndef NRF_SDH_STATE_OBSERVER_PRIO_LEVELS ++#define NRF_SDH_STATE_OBSERVER_PRIO_LEVELS 2 ++#endif ++ ++// NRF_SDH_STACK_OBSERVER_PRIO_LEVELS - Total number of priority levels for stack event observers. ++// This setting configures the number of priority levels available for the SoftDevice stack event handlers (ANT, BLE, SoC). ++// The priority level of a handler determines the order in which it receives events, with respect to other handlers. ++ ++#ifndef NRF_SDH_STACK_OBSERVER_PRIO_LEVELS ++#define NRF_SDH_STACK_OBSERVER_PRIO_LEVELS 2 ++#endif ++ ++ ++// State Observers priorities - Invididual priorities ++ ++//========================================================== ++// CLOCK_CONFIG_STATE_OBSERVER_PRIO ++// Priority with which state events are dispatched to the Clock driver. ++ ++#ifndef CLOCK_CONFIG_STATE_OBSERVER_PRIO ++#define CLOCK_CONFIG_STATE_OBSERVER_PRIO 0 ++#endif ++ ++// POWER_CONFIG_STATE_OBSERVER_PRIO ++// Priority with which state events are dispatched to the Power driver. ++ ++#ifndef POWER_CONFIG_STATE_OBSERVER_PRIO ++#define POWER_CONFIG_STATE_OBSERVER_PRIO 0 ++#endif ++ ++// RNG_CONFIG_STATE_OBSERVER_PRIO ++// Priority with which state events are dispatched to this module. ++ ++#ifndef RNG_CONFIG_STATE_OBSERVER_PRIO ++#define RNG_CONFIG_STATE_OBSERVER_PRIO 0 ++#endif ++ ++// ++//========================================================== ++ ++// Stack Event Observers priorities - Invididual priorities ++ ++//========================================================== ++// NRF_SDH_ANT_STACK_OBSERVER_PRIO ++// This setting configures the priority with which ANT events are processed with respect to other events coming from the stack. ++// Modify this setting if you need to have ANT events dispatched before or after other stack events, such as BLE or SoC. ++// Zero is the highest priority. ++ ++#ifndef NRF_SDH_ANT_STACK_OBSERVER_PRIO ++#define NRF_SDH_ANT_STACK_OBSERVER_PRIO 0 ++#endif ++ ++// NRF_SDH_BLE_STACK_OBSERVER_PRIO ++// This setting configures the priority with which BLE events are processed with respect to other events coming from the stack. ++// Modify this setting if you need to have BLE events dispatched before or after other stack events, such as ANT or SoC. ++// Zero is the highest priority. ++ ++#ifndef NRF_SDH_BLE_STACK_OBSERVER_PRIO ++#define NRF_SDH_BLE_STACK_OBSERVER_PRIO 0 ++#endif ++ ++// NRF_SDH_SOC_STACK_OBSERVER_PRIO ++// This setting configures the priority with which SoC events are processed with respect to other events coming from the stack. ++// Modify this setting if you need to have SoC events dispatched before or after other stack events, such as ANT or BLE. ++// Zero is the highest priority. ++ ++#ifndef NRF_SDH_SOC_STACK_OBSERVER_PRIO ++#define NRF_SDH_SOC_STACK_OBSERVER_PRIO 0 ++#endif ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++ ++// ++ ++// NRF_SDH_SOC_ENABLED - nrf_sdh_soc - SoftDevice SoC event handler ++//========================================================== ++#ifndef NRF_SDH_SOC_ENABLED ++#define NRF_SDH_SOC_ENABLED 1 ++#endif ++// SoC Observers - Observers and priority levels ++ ++//========================================================== ++// NRF_SDH_SOC_OBSERVER_PRIO_LEVELS - Total number of priority levels for SoC observers. ++// This setting configures the number of priority levels available for the SoC event handlers. ++// The priority level of a handler determines the order in which it receives events, with respect to other handlers. ++ ++#ifndef NRF_SDH_SOC_OBSERVER_PRIO_LEVELS ++#define NRF_SDH_SOC_OBSERVER_PRIO_LEVELS 2 ++#endif ++ ++// SoC Observers priorities - Invididual priorities ++ ++//========================================================== ++// BLE_ADV_SOC_OBSERVER_PRIO ++// Priority with which SoC events are dispatched to the Advertising module. ++ ++#ifndef BLE_ADV_SOC_OBSERVER_PRIO ++#define BLE_ADV_SOC_OBSERVER_PRIO 1 ++#endif ++ ++// BLE_DFU_SOC_OBSERVER_PRIO ++// Priority with which BLE events are dispatched to the DFU Service. ++ ++#ifndef BLE_DFU_SOC_OBSERVER_PRIO ++#define BLE_DFU_SOC_OBSERVER_PRIO 1 ++#endif ++ ++// CLOCK_CONFIG_SOC_OBSERVER_PRIO ++// Priority with which SoC events are dispatched to the Clock driver. ++ ++#ifndef CLOCK_CONFIG_SOC_OBSERVER_PRIO ++#define CLOCK_CONFIG_SOC_OBSERVER_PRIO 0 ++#endif ++ ++// POWER_CONFIG_SOC_OBSERVER_PRIO ++// Priority with which SoC events are dispatched to the Power driver. ++ ++#ifndef POWER_CONFIG_SOC_OBSERVER_PRIO ++#define POWER_CONFIG_SOC_OBSERVER_PRIO 0 ++#endif ++ ++// ++//========================================================== ++ ++// ++//========================================================== ++ ++ ++// ++ ++// ++//========================================================== ++ ++// <<< end of configuration section >>> ++#endif //SDK_CONFIG_H ++ +diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10059.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10059.emProject +new file mode 100644 +index 0000000..735cba9 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10059.emProject +@@ -0,0 +1,169 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10059.emSession nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10059.emSession +new file mode 100644 +index 0000000..22c73f1 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/ble_connectivity_132v3_usb_hci_pca10059.emSession +@@ -0,0 +1,7 @@ ++ ++ ++ ++ ++ ++ ++ +\ No newline at end of file +diff --git nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/flash_placement.xml +new file mode 100644 +index 0000000..c9cc513 +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s132v3_usb_hci/ses/flash_placement.xml +@@ -0,0 +1,49 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/Makefile nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/Makefile +index 33053bc..b4bde15 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/Makefile ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/Makefile +@@ -96,6 +96,7 @@ SRC_FILES += \ + $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power.c \ + $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_power_clock.c \ + $(SDK_ROOT)/modules/nrfx/drivers/src/prs/nrfx_prs.c \ ++ $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_qspi.c \ + $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uart.c \ + $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uarte.c \ + $(PROJ_DIR)/main.c \ +@@ -182,6 +183,7 @@ CFLAGS += -DNRF52840_XXAA + CFLAGS += -DNRF_SD_BLE_API_VERSION=6 + CFLAGS += -DS140 + CFLAGS += -DSER_CONNECTIVITY ++CFLAGS += -DSER_PHY_HCI_USB_CDC + CFLAGS += -DSOFTDEVICE_PRESENT + CFLAGS += -DSWI_DISABLE0 + CFLAGS += -mcpu=cortex-m4 +@@ -210,6 +212,7 @@ ASMFLAGS += -DNRF52840_XXAA + ASMFLAGS += -DNRF_SD_BLE_API_VERSION=6 + ASMFLAGS += -DS140 + ASMFLAGS += -DSER_CONNECTIVITY ++ASMFLAGS += -DSER_PHY_HCI_USB_CDC + ASMFLAGS += -DSOFTDEVICE_PRESENT + ASMFLAGS += -DSWI_DISABLE0 + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld +index b877f5a..f354cbc 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/armgcc/ble_connectivity_gcc_nrf52.ld +@@ -7,10 +7,17 @@ MEMORY + { + FLASH (rx) : ORIGIN = 0x26000, LENGTH = 0xda000 + RAM (rwx) : ORIGIN = 0x2001ad58, LENGTH = 0x252a8 ++ connectivity_version_info (r) : ORIGIN = 0x50000, LENGTH = 0x18 + } + + SECTIONS + { ++ .connectivity_version_info : ++ { ++ PROVIDE(__start_connectivity_version_info = .); ++ KEEP(*(SORT(.connectivity_version_info*))) ++ PROVIDE(__stop_connectivity_version_info = .); ++ } > connectivity_version_info + } + + SECTIONS +@@ -69,6 +76,12 @@ SECTIONS + KEEP(*(.nrf_balloc)) + PROVIDE(__stop_nrf_balloc = .); + } > FLASH ++ .sdh_state_observers : ++ { ++ PROVIDE(__start_sdh_state_observers = .); ++ KEEP(*(SORT(.sdh_state_observers*))) ++ PROVIDE(__stop_sdh_state_observers = .); ++ } > FLASH + .sdh_stack_observers : + { + PROVIDE(__start_sdh_stack_observers = .); +@@ -81,12 +94,6 @@ SECTIONS + KEEP(*(SORT(.sdh_req_observers*))) + PROVIDE(__stop_sdh_req_observers = .); + } > FLASH +- .sdh_state_observers : +- { +- PROVIDE(__start_sdh_state_observers = .); +- KEEP(*(SORT(.sdh_state_observers*))) +- PROVIDE(__stop_sdh_state_observers = .); +- } > FLASH + .log_backends : + { + PROVIDE(__start_log_backends = .); +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/config/sdk_config.h nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/config/sdk_config.h +index bb385de..c244199 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/config/sdk_config.h ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/config/sdk_config.h +@@ -133,7 +133,7 @@ + // gaps. Tailor this value to adhere to this limitation. + + #ifndef NRF_DFU_TRIGGER_USB_INTERFACE_NUM +-#define NRF_DFU_TRIGGER_USB_INTERFACE_NUM 2 ++#define NRF_DFU_TRIGGER_USB_INTERFACE_NUM 0 + #endif + + // +@@ -376,6 +376,134 @@ + + // + ++// NRFX_QSPI_ENABLED - nrfx_qspi - QSPI peripheral driver ++//========================================================== ++#ifndef NRFX_QSPI_ENABLED ++#define NRFX_QSPI_ENABLED 1 ++#endif ++// NRFX_QSPI_CONFIG_SCK_DELAY - tSHSL, tWHSL and tSHWL in number of 16 MHz periods (62.5 ns). <0-255> ++ ++ ++#ifndef NRFX_QSPI_CONFIG_SCK_DELAY ++#define NRFX_QSPI_CONFIG_SCK_DELAY 1 ++#endif ++ ++// NRFX_QSPI_CONFIG_XIP_OFFSET - Address offset in the external memory for Execute in Place operation. ++#ifndef NRFX_QSPI_CONFIG_XIP_OFFSET ++#define NRFX_QSPI_CONFIG_XIP_OFFSET 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_READOC - Number of data lines and opcode used for reading. ++ ++// <0=> FastRead ++// <1=> Read2O ++// <2=> Read2IO ++// <3=> Read4O ++// <4=> Read4IO ++ ++#ifndef NRFX_QSPI_CONFIG_READOC ++#define NRFX_QSPI_CONFIG_READOC 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_WRITEOC - Number of data lines and opcode used for writing. ++ ++// <0=> PP ++// <1=> PP2O ++// <2=> PP4O ++// <3=> PP4IO ++ ++#ifndef NRFX_QSPI_CONFIG_WRITEOC ++#define NRFX_QSPI_CONFIG_WRITEOC 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_ADDRMODE - Addressing mode. ++ ++// <0=> 24bit ++// <1=> 32bit ++ ++#ifndef NRFX_QSPI_CONFIG_ADDRMODE ++#define NRFX_QSPI_CONFIG_ADDRMODE 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_MODE - SPI mode. ++ ++// <0=> Mode 0 ++// <1=> Mode 1 ++ ++#ifndef NRFX_QSPI_CONFIG_MODE ++#define NRFX_QSPI_CONFIG_MODE 0 ++#endif ++ ++// NRFX_QSPI_CONFIG_FREQUENCY - Frequency divider. ++ ++// <0=> 32MHz/1 ++// <1=> 32MHz/2 ++// <2=> 32MHz/3 ++// <3=> 32MHz/4 ++// <4=> 32MHz/5 ++// <5=> 32MHz/6 ++// <6=> 32MHz/7 ++// <7=> 32MHz/8 ++// <8=> 32MHz/9 ++// <9=> 32MHz/10 ++// <10=> 32MHz/11 ++// <11=> 32MHz/12 ++// <12=> 32MHz/13 ++// <13=> 32MHz/14 ++// <14=> 32MHz/15 ++// <15=> 32MHz/16 ++ ++#ifndef NRFX_QSPI_CONFIG_FREQUENCY ++#define NRFX_QSPI_CONFIG_FREQUENCY 15 ++#endif ++ ++// NRFX_QSPI_PIN_SCK - SCK pin value. ++#ifndef NRFX_QSPI_PIN_SCK ++#define NRFX_QSPI_PIN_SCK NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_CSN - CSN pin value. ++#ifndef NRFX_QSPI_PIN_CSN ++#define NRFX_QSPI_PIN_CSN NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO0 - IO0 pin value. ++#ifndef NRFX_QSPI_PIN_IO0 ++#define NRFX_QSPI_PIN_IO0 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO1 - IO1 pin value. ++#ifndef NRFX_QSPI_PIN_IO1 ++#define NRFX_QSPI_PIN_IO1 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO2 - IO2 pin value. ++#ifndef NRFX_QSPI_PIN_IO2 ++#define NRFX_QSPI_PIN_IO2 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_PIN_IO3 - IO3 pin value. ++#ifndef NRFX_QSPI_PIN_IO3 ++#define NRFX_QSPI_PIN_IO3 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// NRFX_QSPI_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef NRFX_QSPI_CONFIG_IRQ_PRIORITY ++#define NRFX_QSPI_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ + // NRFX_UARTE_ENABLED - nrfx_uarte - UARTE peripheral driver + //========================================================== + #ifndef NRFX_UARTE_ENABLED +@@ -701,6 +829,136 @@ + + // + ++// QSPI_ENABLED - nrf_drv_qspi - QSPI peripheral driver - legacy layer ++//========================================================== ++#ifndef QSPI_ENABLED ++#define QSPI_ENABLED 1 ++#endif ++// QSPI_CONFIG_SCK_DELAY - tSHSL, tWHSL and tSHWL in number of 16 MHz periods (62.5 ns). <0-255> ++ ++ ++#ifndef QSPI_CONFIG_SCK_DELAY ++#define QSPI_CONFIG_SCK_DELAY 1 ++#endif ++ ++// QSPI_CONFIG_XIP_OFFSET - Address offset in the external memory for Execute in Place operation. ++#ifndef QSPI_CONFIG_XIP_OFFSET ++#define QSPI_CONFIG_XIP_OFFSET 0 ++#endif ++ ++// QSPI_CONFIG_READOC - Number of data lines and opcode used for reading. ++ ++// <0=> FastRead ++// <1=> Read2O ++// <2=> Read2IO ++// <3=> Read4O ++// <4=> Read4IO ++ ++#ifndef QSPI_CONFIG_READOC ++#define QSPI_CONFIG_READOC 0 ++#endif ++ ++// QSPI_CONFIG_WRITEOC - Number of data lines and opcode used for writing. ++ ++// <0=> PP ++// <1=> PP2O ++// <2=> PP4O ++// <3=> PP4IO ++ ++#ifndef QSPI_CONFIG_WRITEOC ++#define QSPI_CONFIG_WRITEOC 0 ++#endif ++ ++// QSPI_CONFIG_ADDRMODE - Addressing mode. ++ ++// <0=> 24bit ++// <1=> 32bit ++ ++#ifndef QSPI_CONFIG_ADDRMODE ++#define QSPI_CONFIG_ADDRMODE 0 ++#endif ++ ++// QSPI_CONFIG_MODE - SPI mode. ++ ++// <0=> Mode 0 ++// <1=> Mode 1 ++ ++#ifndef QSPI_CONFIG_MODE ++#define QSPI_CONFIG_MODE 0 ++#endif ++ ++// QSPI_CONFIG_FREQUENCY - Frequency divider. ++ ++// <0=> 32MHz/1 ++// <1=> 32MHz/2 ++// <2=> 32MHz/3 ++// <3=> 32MHz/4 ++// <4=> 32MHz/5 ++// <5=> 32MHz/6 ++// <6=> 32MHz/7 ++// <7=> 32MHz/8 ++// <8=> 32MHz/9 ++// <9=> 32MHz/10 ++// <10=> 32MHz/11 ++// <11=> 32MHz/12 ++// <12=> 32MHz/13 ++// <13=> 32MHz/14 ++// <14=> 32MHz/15 ++// <15=> 32MHz/16 ++ ++#ifndef QSPI_CONFIG_FREQUENCY ++#define QSPI_CONFIG_FREQUENCY 15 ++#endif ++ ++// QSPI_PIN_SCK - SCK pin value. ++#ifndef QSPI_PIN_SCK ++#define QSPI_PIN_SCK NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_CSN - CSN pin value. ++#ifndef QSPI_PIN_CSN ++#define QSPI_PIN_CSN NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO0 - IO0 pin value. ++#ifndef QSPI_PIN_IO0 ++#define QSPI_PIN_IO0 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO1 - IO1 pin value. ++#ifndef QSPI_PIN_IO1 ++#define QSPI_PIN_IO1 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO2 - IO2 pin value. ++#ifndef QSPI_PIN_IO2 ++#define QSPI_PIN_IO2 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_PIN_IO3 - IO3 pin value. ++#ifndef QSPI_PIN_IO3 ++#define QSPI_PIN_IO3 NRF_QSPI_PIN_NOT_CONNECTED ++#endif ++ ++// QSPI_CONFIG_IRQ_PRIORITY - Interrupt priority ++ ++ ++// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice ++// <0=> 0 (highest) ++// <1=> 1 ++// <2=> 2 ++// <3=> 3 ++// <4=> 4 ++// <5=> 5 ++// <6=> 6 ++// <7=> 7 ++ ++#ifndef QSPI_CONFIG_IRQ_PRIORITY ++#define QSPI_CONFIG_IRQ_PRIORITY 6 ++#endif ++ ++// ++ + // UART_ENABLED - nrf_drv_uart - UART/UARTE peripheral driver - legacy layer + //========================================================== + #ifndef UART_ENABLED +@@ -997,7 +1255,7 @@ + // Note: This value is not editable in Configuration Wizard. + // Selected Product ID + #ifndef APP_USBD_PID +-#define APP_USBD_PID 0x521B ++#define APP_USBD_PID 0xC00A + #endif + + // APP_USBD_DEVICE_VER_MAJOR - Device version, major part. <0-99> +@@ -4364,12 +4622,12 @@ + + // NRF_SDH_BLE_PERIPHERAL_LINK_COUNT - Maximum number of peripheral links. + #ifndef NRF_SDH_BLE_PERIPHERAL_LINK_COUNT +-#define NRF_SDH_BLE_PERIPHERAL_LINK_COUNT 0 ++#define NRF_SDH_BLE_PERIPHERAL_LINK_COUNT 8 + #endif + + // NRF_SDH_BLE_CENTRAL_LINK_COUNT - Maximum number of central links. + #ifndef NRF_SDH_BLE_CENTRAL_LINK_COUNT +-#define NRF_SDH_BLE_CENTRAL_LINK_COUNT 0 ++#define NRF_SDH_BLE_CENTRAL_LINK_COUNT 8 + #endif + + // NRF_SDH_BLE_TOTAL_LINK_COUNT - Total link count. +@@ -4670,132 +4928,6 @@ + #define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 + #endif + +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- +-// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-// Priority with which BLE events are dispatched to the NFC pairing library. +- +-#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +-#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +-#endif +- + // NRF_BLE_BMS_BLE_OBSERVER_PRIO + // Priority with which BLE events are dispatched to the Bond Management Service. + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10059.emProject nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10059.emProject +index c7771fd..e6a0b2c 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10059.emProject ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/ble_connectivity_s140_usb_hci_pca10059.emProject +@@ -16,7 +16,7 @@ + arm_target_device_name="nRF52840_xxAA" + arm_target_interface_type="SWD" + c_user_include_directories="../../../config;../../../../../../components;../../../../../../components/ble/ble_dtm;../../../../../../components/boards;../../../../../../components/drivers_nrf/usbd;../../../../../../components/libraries/atomic;../../../../../../components/libraries/atomic_fifo;../../../../../../components/libraries/balloc;../../../../../../components/libraries/block_dev;../../../../../../components/libraries/bootloader/dfu;../../../../../../components/libraries/bsp;../../../../../../components/libraries/crc16;../../../../../../components/libraries/delay;../../../../../../components/libraries/experimental_section_vars;../../../../../../components/libraries/log;../../../../../../components/libraries/log/src;../../../../../../components/libraries/memobj;../../../../../../components/libraries/queue;../../../../../../components/libraries/ringbuf;../../../../../../components/libraries/scheduler;../../../../../../components/libraries/strerror;../../../../../../components/libraries/timer;../../../../../../components/libraries/usbd;../../../../../../components/libraries/usbd/class/cdc;../../../../../../components/libraries/usbd/class/cdc/acm;../../../../../../components/libraries/usbd/class/nrf_dfu_trigger;../../../../../../components/libraries/util;../../../../../../components/serialization/common;../../../../../../components/serialization/common/struct_ser/ble;../../../../../../components/serialization/common/transport;../../../../../../components/serialization/common/transport/ser_phy;../../../../../../components/serialization/common/transport/ser_phy/config;../../../../../../components/serialization/connectivity;../../../../../../components/serialization/connectivity/codecs/ble/middleware;../../../../../../components/serialization/connectivity/codecs/ble/serializers;../../../../../../components/serialization/connectivity/codecs/common;../../../../../../components/serialization/connectivity/hal;../../../../../../components/softdevice/common;../../../../../../components/softdevice/s140/headers;../../../../../../components/softdevice/s140/headers/nrf52;../../../../../../components/toolchain/cmsis/include;../../../../../../external/fprintf;../../../../../../external/segger_rtt;../../../../../../external/utf_converter;../../../../../../integration/nrfx;../../../../../../integration/nrfx/legacy;../../../../../../modules/nrfx;../../../../../../modules/nrfx/drivers/include;../../../../../../modules/nrfx/hal;../../../../../../modules/nrfx/mdk;../config;" +- c_preprocessor_definitions="BLE_STACK_SUPPORT_REQD;BOARD_PCA10059;BSP_DEFINES_ONLY;CONFIG_GPIO_AS_PINRESET;FLOAT_ABI_HARD;HCI_TIMER2;INITIALIZE_USER_SECTIONS;NO_VTOR_CONFIG;NRF52840_XXAA;NRF_SD_BLE_API_VERSION=6;S140;SER_CONNECTIVITY;SOFTDEVICE_PRESENT;SWI_DISABLE0;" ++ c_preprocessor_definitions="BLE_STACK_SUPPORT_REQD;BOARD_PCA10059;BSP_DEFINES_ONLY;CONFIG_GPIO_AS_PINRESET;FLOAT_ABI_HARD;HCI_TIMER2;INITIALIZE_USER_SECTIONS;NO_VTOR_CONFIG;NRF52840_XXAA;NRF_SD_BLE_API_VERSION=6;S140;SER_CONNECTIVITY;SER_PHY_HCI_USB_CDC;SOFTDEVICE_PRESENT;SWI_DISABLE0;" + debug_target_connection="J-Link" + gcc_entry_point="Reset_Handler" + macros="CMSIS_CONFIG_TOOL=../../../../../../external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar" +@@ -28,7 +28,7 @@ + linker_printf_fmt_level="long" + linker_section_placement_file="flash_placement.xml" + linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x100000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x40000;FLASH_START=0x26000;FLASH_SIZE=0xda000;RAM_START=0x2001ad58;RAM_SIZE=0x252a8" +- linker_section_placements_segments="FLASH RX 0x0 0x100000;RAM RWX 0x20000000 0x40000" ++ linker_section_placements_segments="FLASH RX 0x0 0x100000;RAM RWX 0x20000000 0x40000;connectivity_version_info RX 0x50000 0x18" + project_directory="" + project_type="Executable" /> + +@@ -132,6 +132,7 @@ + + + ++ + + + +diff --git nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/flash_placement.xml nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/flash_placement.xml +index 6b7653b..c9cc513 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/flash_placement.xml ++++ nRF5_SDK_15.2.0_80108de/examples/connectivity/ble_connectivity/pca10059/ser_s140_usb_hci/ses/flash_placement.xml +@@ -11,9 +11,9 @@ + + + ++ + + +- + + + +@@ -43,4 +43,7 @@ + + + ++ ++ ++ + +diff --git nRF5_SDK_15.2.0_9412b96/examples/dfu/dfu_public_key.c nRF5_SDK_15.2.0_80108de/examples/dfu/dfu_public_key.c +index e483589..8629005 100644 +--- nRF5_SDK_15.2.0_9412b96/examples/dfu/dfu_public_key.c ++++ nRF5_SDK_15.2.0_80108de/examples/dfu/dfu_public_key.c +@@ -1,30 +1,51 @@ ++/** ++ * Copyright (c) 2010 - 2018, Nordic Semiconductor ASA ++ * ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without modification, ++ * are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, this ++ * list of conditions and the following disclaimer. ++ * ++ * 2. Redistributions in binary form, except as embedded into a Nordic ++ * Semiconductor ASA integrated circuit in a product or a software update for ++ * such product, must reproduce the above copyright notice, this list of ++ * conditions and the following disclaimer in the documentation and/or other ++ * materials provided with the distribution. ++ * ++ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its ++ * contributors may be used to endorse or promote products derived from this ++ * software without specific prior written permission. ++ * ++ * 4. This software, with or without modification, must only be used with a ++ * Nordic Semiconductor ASA integrated circuit. ++ * ++ * 5. Any software provided in binary form under this license must not be reverse ++ * engineered, decompiled, modified and/or disassembled. ++ * ++ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS ++ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE ++ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ++ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ++ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ * ++ */ ++/* This file was automatically generated by nrfutil on 2016-11-23 (YY-MM-DD) at 13:02:58 */ + +-/* This file was automatically generated by nrfutil on 2018-09-08 (YY-MM-DD) at 06:07:33 */ +- +-#include "sdk_config.h" + #include "stdint.h" + #include "compiler_abstraction.h" + +-#if NRF_CRYPTO_BACKEND_OBERON_ENABLED +-/* Oberon backend is changing endianness thus public key must be kept in RAM. */ +-#define _PK_CONST +-#else +-#define _PK_CONST const +-#endif +- +- +-/* This file was generated with a throwaway private key, that is only inteded for a debug version of the DFU project. +- Please see https://github.com/NordicSemiconductor/pc-nrfutil/blob/master/README.md to generate a valid public key. */ +- +-#ifdef NRF_DFU_DEBUG_VERSION +- + /** @brief Public key used to verify DFU images */ +-__ALIGN(4) _PK_CONST uint8_t pk[64] = ++__ALIGN(4) const uint8_t pk[64] = + { +- 0x40, 0xe5, 0x14, 0xb4, 0x6d, 0xb9, 0x83, 0xc7, 0x1c, 0x33, 0x92, 0x17, 0x35, 0x11, 0xe2, 0x00, 0x8b, 0x52, 0x24, 0xbd, 0xbb, 0x6b, 0x6a, 0xe8, 0x68, 0x1a, 0x32, 0xfb, 0x77, 0x15, 0xe1, 0xe1, +- 0xd9, 0xbc, 0x43, 0xbb, 0x55, 0x6f, 0xf6, 0x9e, 0x3d, 0x04, 0x49, 0x5b, 0xbc, 0x47, 0xa3, 0x69, 0x68, 0x24, 0x15, 0x4b, 0x5e, 0x9c, 0x9d, 0x6b, 0xf4, 0x4e, 0x62, 0x59, 0xd7, 0x24, 0xc4, 0x71 ++ 0xd4, 0x10, 0xff, 0xaa, 0x50, 0xff, 0x31, 0xc4, 0xb2, 0x6f, 0xca, 0x1c, 0x44, 0x68, 0x72, 0xf9, 0xb1, 0x40, 0xea, 0x3c, 0x22, 0xd1, 0x75, 0xe6, 0x29, 0xa5, 0xd3, 0xe5, 0x34, 0x87, 0x59, 0xd0, ++ 0x44, 0x08, 0xa6, 0x27, 0xb9, 0x9d, 0x34, 0x44, 0x44, 0xff, 0xa3, 0x4b, 0x1c, 0xb5, 0xc7, 0xb3, 0x81, 0x2a, 0x80, 0xfe, 0x10, 0xd1, 0xbf, 0x6a, 0xa1, 0xdc, 0xb9, 0x4f, 0xbc, 0xc3, 0x22, 0x17 + }; + +-#else +-#error "Debug public key not valid for production. Please see https://github.com/NordicSemiconductor/pc-nrfutil/blob/master/README.md to generate it" +-#endif +diff --git nRF5_SDK_15.2.0_80108de/examples/readme.txt nRF5_SDK_15.2.0_80108de/examples/readme.txt +new file mode 100644 +index 0000000..ac71eca +--- /dev/null ++++ nRF5_SDK_15.2.0_80108de/examples/readme.txt +@@ -0,0 +1,14 @@ ++Matrix shows which board is supported by given example ++ ++Example | pca10028 | pca10040 | pca10040e | pca10056 | ++----------------------------------------------------------------------------- ++connectivity\ble_connectivity | | * | * | * | ++----------------------------------------------------------------------------- ++ ++ ++Matrix shows which SoftDevice is supported by given example ++ ++Example | s112 | s130 | s132 | s140 | s212 | None | ++-------------------------------------------------------------------------- ++connectivity\ble_connectivity | * | | * | * | | * | ++-------------------------------------------------------------------------- +diff --git nRF5_SDK_15.2.0_9412b96/integration/nrfx/legacy/nrf_drv_power.c nRF5_SDK_15.2.0_80108de/integration/nrfx/legacy/nrf_drv_power.c +index bba3d13..139d375 100644 +--- nRF5_SDK_15.2.0_9412b96/integration/nrfx/legacy/nrf_drv_power.c ++++ nRF5_SDK_15.2.0_80108de/integration/nrfx/legacy/nrf_drv_power.c +@@ -47,6 +47,14 @@ + #include "nrf_sdh_soc.h" + #endif + ++#if defined(SOFTDEVICE_PRESENT) ++#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION < 6 ++#define POWER_USB_SD_API 0 ++#else ++#define POWER_USB_SD_API 1 ++#endif ++#endif ++ + #include + + // The structure with default configuration data. +@@ -219,7 +227,7 @@ void nrf_drv_power_sleepevt_uninit(void) + + #if NRF_POWER_HAS_USBREG + +-#ifdef SOFTDEVICE_PRESENT ++#if POWER_USB_SD_API + static ret_code_t nrf_drv_power_sd_usbevt_enable(bool enable) + { + ret_code_t err_code; +@@ -247,7 +255,7 @@ ret_code_t nrf_drv_power_usbevt_init(nrf_drv_power_usbevt_config_t const * p_con + { + nrf_drv_power_usbevt_uninit(); + nrfx_power_usbevt_init(p_config); +-#ifdef SOFTDEVICE_PRESENT ++#if POWER_USB_SD_API + if (nrf_sdh_is_enabled()) + { + ret_code_t err_code = nrf_drv_power_sd_usbevt_enable(true); +@@ -282,7 +290,7 @@ ret_code_t nrf_drv_power_usbevt_init(nrf_drv_power_usbevt_config_t const * p_con + + void nrf_drv_power_usbevt_uninit(void) + { +-#ifdef SOFTDEVICE_PRESENT ++#if POWER_USB_SD_API + CRITICAL_REGION_ENTER(); + if (nrf_sdh_is_enabled()) + { +@@ -295,7 +303,7 @@ void nrf_drv_power_usbevt_uninit(void) + { + nrfx_power_usbevt_disable(); + } +-#ifdef SOFTDEVICE_PRESENT ++#if POWER_USB_SD_API + CRITICAL_REGION_EXIT(); + #endif + nrfx_power_usbevt_uninit(); +@@ -325,7 +333,7 @@ static void nrf_drv_power_sdh_soc_evt_handler(uint32_t evt_id, void * p_context) + pofwarn_handler(); + } + +-#if NRF_POWER_HAS_USBREG ++#if NRF_POWER_HAS_USBREG && POWER_USB_SD_API + nrfx_power_usb_event_handler_t usbevt_handler = nrfx_power_usb_handler_get(); + if (usbevt_handler != NULL) + { +@@ -363,7 +371,7 @@ static void nrf_drv_power_on_sd_enable(void) + } + CRITICAL_REGION_EXIT(); + +-#if NRF_POWER_HAS_USBREG ++#if NRF_POWER_HAS_USBREG && POWER_USB_SD_API + if (nrfx_power_usb_handler_get() != NULL) + { + ret_code_t err_code = nrf_drv_power_sd_usbevt_enable(true); diff --git a/hex/sd_api_v2/bootstrap_sd_api_v2.sh b/hex/sd_api_v2/bootstrap_sd_api_v2.sh deleted file mode 100644 index 068c07a1f..000000000 --- a/hex/sd_api_v2/bootstrap_sd_api_v2.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash -# -# Download an patch the nRF5 SDK to compile the connectivity application. -# Use the nRF5 SDK 11 and the SoftDevice API version 2. - -ABS_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" - -source $ABS_PATH/../bootstrap.sh \ - -l 'https://developer.nordicsemi.com/nRF5_SDK/nRF5_SDK_v11.x.x/nRF5_SDK_11.0.0_89a8197.zip' \ - -f 'https://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.8.5.0.pack' \ - -d "../sdk" \ - -p 'sd_api_v2/sdk110_connectivity.patch' diff --git a/hex/sd_api_v2/connectivity_2.0.1_115k2_with_s130_2.0.1.hex b/hex/sd_api_v2/connectivity_2.0.1_115k2_with_s130_2.0.1.hex deleted file mode 100644 index a5725b62a..000000000 --- a/hex/sd_api_v2/connectivity_2.0.1_115k2_with_s130_2.0.1.hex +++ /dev/null @@ -1,9272 +0,0 @@ -:020000040000FA -:10000000C0070000D1060000D1000000B1060000CA -:1000100000000000000000000000000000000000E0 -:100020000000000000000000000000005107000078 -:100030000000000000000000DB000000E500000000 -:10004000EF000000F9000000030100000D010000B6 -:1000500017010000210100002B0100003501000004 -:100060003F01000049010000530100005D01000054 -:1000700067010000710100007B01000085010000A4 -:100080008F01000099010000A3010000AD010000F4 -:10009000B7010000C1010000CB010000D501000044 -:1000A000DF010000E9010000F3010000FD01000094 -:1000B00007020000110200001B02000025020000E0 -:1000C0001FB5C046C04600F0EFFA04B00FB41FBD24 -:1000D00008205A49096809580847382057490968CB -:1000E000095808473C2055490968095808474020E5 -:1000F0005249096809580847442050490968095875 -:10010000084748204D490968095808474C204B4981 -:10011000096809580847502048490968095808479C -:100120005420464909680958084758204349096836 -:10013000095808475C204149096809580847602068 -:100140003E4909680958084764203C49096809582C -:100150000847682039490968095808476C20374919 -:100160000968095808477020344909680958084740 -:100170007420324909680958084778202F490968CE -:10018000095808477C202D490968095808478020EC -:100190002A490968095808478420284909680958E4 -:1001A0000847882025490968095808478C202349B1 -:1001B00009680958084790202049096809580847E4 -:1001C00094201E4909680958084798201B49096866 -:1001D000095808479C201949096809580847A02070 -:1001E0001649096809580847A4201449096809589C -:1001F0000847A8201149096809580847AC200F4949 -:10020000096809580847B0200C4909680958084787 -:10021000B4200A49096809580847B82007490968FD -:1002200009580847BC2005490968095808470000D3 -:1002300003480449024A034B7047000000000020B5 -:10024000C0070000C00700000122D84B5A6000BF61 -:10025000D74A1268002AFBD0016000BFD44A126856 -:10026000002AFBD00022D14B5A6000BFD04A12684E -:10027000002AFBD07047F0B505460E46174600240D -:1002800006E0A200B158A2005019FFF7DDFF641C80 -:10029000BC42F6D30020F0BD0120C043C549086030 -:1002A000401048607047014601229204086890425D -:1002B00001D9102070470020FCE7F0B505460C4638 -:1002C0001646002706E028462168FFF7BDFF2D1DD2 -:1002D000241D7F1CB742F6D3F0BD70B505460C4611 -:1002E0002E460BE0304600F075F9FF2C01D80024B3 -:1002F00001E0FF3C013C012080023618002CF1D1C6 -:1003000070BD0146012212044868904201D90920BB -:100310007047A9484069401C01D10F20F8E7002030 -:10032000F6E7FEB504462068030000F037FA05043E -:100330002B4249598B00201DFFF7E3FF0546002D96 -:1003400001D02846FEBDFFF7A7FF0120C00200F044 -:1003500041F9042221469948FFF78DFF002801D07A -:100360000320EFE708222146944800F06DF90028A9 -:1003700006D1002192480068FFF766FF00F00CF9F3 -:100380000320DFE7A768E6686068019031463846D9 -:10039000FFF7A3FF324638460199FFF78EFFB20000 -:1003A0003846019900F050F9002800D1CAE703202F -:1003B000C8E700F0E3F9834800688349086041E03A -:1003C00060680190E668A0680090B200009901980A -:1003D00000F03AF90746002F00D1B3E70E20B1E74D -:1003E000201DFFF760FF0546002D01D02846A9E734 -:1003F0006068002807D1FFF74FFF0320800200F05C -:10040000E9F800F0C9F8FFF747FF0120C00200F04B -:10041000E1F8042221466948FFF72DFF002801D0AA -:1004200003208FE708222146644800F00DF90028D8 -:1004300006D1002162480068FFF706FF00F0ACF823 -:1004400003207FE700BF00207CE770B505460C461F -:10045000182D04D12068FFF764FF206002E001201E -:10046000206000BF00BF70BDF0B589B05248406940 -:1004700003905248806881000398081802900398FE -:10048000000B01900121090302984018401E000B47 -:1004900000900124002520462946019A00F0C4F866 -:1004A0000022401E91410791069001260027304608 -:1004B0003946009A00F0B8F80022401E914105919B -:1004C0000490049BDB43059AD2430698184307998E -:1004D00011430791069037490698086007984860CD -:1004E00009B0F0BD70B53448446934488568466841 -:1004F000AA003146204600F0A7F8002801D00020CD -:1005000070BD0120FCE72D484068002801D0012083 -:1005100000E000200546FFF7E5FF002807D0FFF7C1 -:10052000BBFE0320800200F055F800F035F8FFF71D -:100530009BFF002D0ED020484669204884684768FC -:1005400021463046FFF7C9FE224639463046FFF7BE -:10055000B4FE00BF00F020F810B5184844681A48EF -:100560000460204600F0DCF810BD15480068006803 -:10057000401C01D100BFFEE710480068002802D0EF -:10058000042806D101E0FFF7BEFFFFF7E5FF00BF3B -:10059000FEE700BF00BFFEE7BFF34F8F0B480C49DB -:1005A000C860BFF34F8F00BFFEE7000000E50140C9 -:1005B00000E40140000600400010001000080000A8 -:1005C000B8070000BC070000000000200400FA0586 -:1005D00000ED00E010B50146104B1A6808460223F2 -:1005E0000F4C636000BF0F4B1B68002BFBD0531CEC -:1005F00004D0904202D20A4B186101E0084B986087 -:1006000000BF084B1B68002BFBD00023044C636029 -:1006100000BF044B1B68002BFBD010BD0010001066 -:1006200000E5014000E4014010B5202A04DB01464A -:10063000203A9140002010BD914020239C1A03468F -:10064000E3401943904010BD034610B50B439B0790 -:100650000FD1042A0DD308C810C9121FA342F8D025 -:1006600018BA21BA884201D9012010BD0020C04328 -:1006700010BD002A03D0D30703D0521C07E000208E -:1006800010BD03780C78401C491C1B1B07D1037854 -:100690000C78401C491C1B1B01D1921EF1D118463D -:1006A00010BD70477047704710B500F007F810BDD7 -:1006B000014B1B68DB6818470000002019481A49E5 -:1006C0007047FFF7FBFFFFF7FBFC00BD20BFFDE716 -:1006D0001649174C24688C420BD1164B1B68994263 -:1006E0000CD1154B154A1360186810498842EDD09B -:1006F0000AE0134880F30888124B18470F4A13602A -:1007000018680A498842E1D080F308880E49884277 -:1007100004DD0E48026802210A4302605B68184744 -:100720000346DFE7C0070000C0070000FFFFFFFF30 -:10073000000C000014100010001000000000002049 -:10074000000400206B05000000200020240500406C -:100750000D48704502D1EFF3098101E0EFF3088104 -:10076000886902380078182802D1C046074A104725 -:10077000074A12682C3212681047000000B5054B7A -:10078000054A9B58984700BDFDFFFFFF4B04000042 -:1007900000000020001000000400000030B4744687 -:1007A000641E2578641CAB4204D3635D5B00E318D0 -:1007B00030BC18471D46F8E7000C00000010000090 -:101000007811002031A90100752F000081A801008E -:1010100000000000000000000000000000000000D0 -:101020000000000000000000000000009DA9010079 -:101030000000000000000000752F0000752F000068 -:1010400005AA01000BAA0100752F0000752F0000F2 -:10105000752F0000752F0000752F0000752F000000 -:1010600011AA0100752F0000752F000017AA0100BA -:10107000752F00001DAA010023AA010029AA010062 -:10108000752F0000752F0000752F0000752F0000D0 -:10109000752F0000752F0000752F0000752F0000C0 -:1010A0002FAA010035AA0100752F0000752F00003E -:1010B000752F0000752F0000752F0000752F0000A0 -:1010C00000F002F819F015FC0CA030C808382418FC -:1010D0002D18A246671EAB4654465D46AC4201D170 -:1010E00019F007FC7E460F3E0FCCB6460126334270 -:1010F00000D0FB1AA246AB4633431847A09E01001E -:10110000C09E01000023002400250026103A01D3D0 -:1011100078C1FBD8520700D330C100D50B607047AF -:101120001FB5C046C04619F081FB04B00FB41FBD07 -:1011300082690249816102481044704745110000EC -:101140000100000001B41EB400B510F070F901B444 -:101150000198864601BC01B01EBD0000F0B44046B7 -:10116000494652465B460FB402A0013001B506481D -:10117000004700BF01BC86460FBC804689469246A8 -:101180009B46F0BC70470000C110000070B50546DA -:101190000C46164602E00FCC0FC5103E102EFAD2B8 -:1011A000082E02D303CC03C5083E042E07D301CC7E -:1011B00001C5361F03E021782970641C6D1C761E62 -:1011C000F9D270BD70B505461A4C08202070A01CDD -:1011D00000F083F85920A0802946204606F081FCC3 -:1011E00070BD10B506F08AFC12490020891E0870F7 -:1011F00010BD70B50C460F49891E0978002905D02D -:1012000001466039532905D301200EE0602801D042 -:1012100009480AE0094E211D80008019FF380EC9D7 -:101220008138256806682846B047206070BD0120D7 -:10123000704700000A00002001300000E8AA010009 -:101240008307FF22DB0E9A408907090E9940002888 -:101250000BDA0007000F0838830827489B0018188E -:10126000C36993430B43C3617047830823489B00C2 -:101270001B181868904308431860704710B504465F -:1012800000210120FFF7DCFF00211820FFF7D8FF25 -:1012900000210B20FFF7D4FF02211920FFF7D0FF18 -:1012A00002210D20FFF7CCFF02210E20FFF7C8FF1F -:1012B00002210F20FFF7C4FF0221C81FFFF7C0FF64 -:1012C00003211620FFF7BCFF03211520FFF7B8FF0D -:1012D0002046FFF777FF002010BD8721018070476F -:1012E00010B5FFF77EFF10BD0548704710B5FFF73A -:1012F00080FF10BD7047704700ED00E000E400E0A3 -:1013000003F9004330B5FD4D044610280AD0112CD6 -:1013100006D028468178122C06D0132C08D0FFDF87 -:10132000AC7030BDFFDFFBE71129F9D0FFDFF7E735 -:101330001129F5D0FFDFF3E770B50EF0EAF90446A6 -:101340000FF035FE201AC4B206200CF0DDFB054676 -:1013500006200CF0E1FB2E1A07200CF0D5FB054609 -:1013600007200CF0D9FB281AE44932188878122893 -:101370000DD00023D21813280BD0002012180878A3 -:10138000022808D000201018201AC0B270BD012316 -:10139000F0E70120F2E70120F5E710B5D74994B056 -:1013A000C878002815D017206A46107000A80622B9 -:1013B0000230091D19F0C9F809A968460AF052F966 -:1013C0000446112802D0002C00D0FFDF204614B0C4 -:1013D00010BD3220E8E710B502210CF0E7FB10BD8C -:1013E000FFB595B01D460E460746FFF7F4FF040013 -:1013F0000AD02078222804D3A07F8006C00FA842FC -:1014000004D1082019B0F0BDBD48FBE7372168467C -:1014100001704780002D05D0012101714671179997 -:10142000817102E000206946087109A968460AF046 -:1014300019F9A07FDF21084069010843A077002047 -:10144000E0E730B50446084620380D46030019F0A1 -:101450003DFB0A06080D1D2429363B40454AFFDFA7 -:1014600042E0207820283FD1FFDF3DE0A34801780B -:10147000032939D08078132836D02078242833D017 -:10148000252831D023282FD0FFDF2DE020782228F7 -:101490002AD0232828D8FFDF26E02078222823D04E -:1014A000FFDF21E0207822281ED024281CD0262807 -:1014B0001AD0272818D0292816D0FFDF14E020786A -:1014C000252811D0FFDF0FE0207825280CD0FFDF82 -:1014D0000AE02078252807D0FFDF05E020782828BB -:1014E00002D0FFDF00E0FFDF257030BD30B5854C56 -:1014F0000B88854A022801D0934204D09D1FA54243 -:1015000025D2022802D04D88954203D04D88AD1FC8 -:10151000A5421CD24C88A34219D88B88FF25F435EC -:10152000AB4214D8022802D0C888904205D0C8889F -:10153000744D0A382D1FA84209D2C888904208D09D -:10154000944206D05B1C63438000834201DB07208A -:1015500030BD002030BD70B5044610F097F900286A -:1015600033D12079002806D0082802D8217B082909 -:1015700005D9072070BD217B0029FAD0F6E70028A5 -:1015800004D0206810F082F900281ED1207B0028AA -:1015900004D0A06810F07AF9002816D1002508E0E0 -:1015A0002068A900405810F071F900280DD16D1C79 -:1015B000EDB22079A842F3D800250AE0A068A9007E -:1015C000405810F063F9002801D0102070BD6D1C48 -:1015D000EDB2207BA842F1D8002070BD10B5028981 -:1015E0004A4B111F994213D24189042910D3DB1CA5 -:1015F00099420DD891420BD80178890706D54068E9 -:10160000002803D0FFF7A7FF002800D1002010BD5D -:10161000072010BDFFB50022099B002802D0994287 -:1016200005D858E0002902D1002004B0F0BD0920FF -:10163000FBE7845C002C12D087187D78112D43D0F5 -:1016400010DC2B0019F042FA0A401726262C2C2E0B -:101650002E363640835C002B30D1521CD2B28A42E7 -:10166000F8D3E1E71D2D2FDA123D2B0019F02EFAE9 -:10167000042C2C121A2C022CD9D1BB78039C072BDA -:10168000237001D25B0701D40A20CEE7029B01241C -:101690001B7816E0E343DB0708E0012C08D013E0D9 -:1016A0000620C2E70F2523072D075B19002BF4D076 -:1016B0003046BAE7029B1B789C0701D50B20B4E7A4 -:1016C00002242343029C2370835C521C9A18D2B2DA -:1016D0008A4202D9ABE7192676028A42A9D3A3E748 -:1016E00010B504780B46002C14D00121084A012CB7 -:1016F00013D0022C17D0032C1FD11AE0A801002010 -:10170000023000007B0C0000FFFF0000FD3F0000E6 -:10171000023200000021197011E0197081798909E5 -:1017200003290AD10BE0197081798909012904D1B3 -:1017300005E019708179890901D0104610BD411C5E -:101740000622581C18F001FF002010BD08B51346F2 -:10175000002806D0F6A00068009048796A46800903 -:10176000105C18700622581C18F0EFFE08BD30B54A -:101770000C46097895B0222902D2082015B030BD58 -:10178000282369460B704880132A03D03B2A01D0D6 -:101790000720F3E708460A7109A909F063FF05006D -:1017A00003D121212046FFF74CFE2846E6E700B58D -:1017B00095B0232369460B70488010888880508834 -:1017C000C880D08848819088088100208881C8819D -:1017D00009A9684609F046FF15B000BD70B50E4670 -:1017E000050003D00021092010F011F80120D14C90 -:1017F000022EE0701BD0032E00D0FFDF0621201D3B -:101800000FF056FD607A8006800E6072FFF7C5FD0E -:10181000608A00280AD0002D08D083000122002110 -:1018200009200FF065FF092800D0FFDF70BD0321FC -:10183000E01D0FF03DFD607A40218006800E0843D8 -:101840006072E01C02F0E7FCE0E7F0B585B0022131 -:101850006846B84E0171F18AC18000275AE001A89C -:101860000CF00CF9050007D0F08A002858D00020B1 -:10187000F0826946C8804BE0039C2078212847D03D -:10188000A07F01072FD520462330009068462346CD -:10189000A28E00892146363301F051FD050003D0A8 -:1018A00011282ED0FFDF2CE0A07FF7210840A07781 -:1018B000E17F480849074000C90F0843FD21014066 -:1018C0000007C00F400001432046E17720304178F7 -:1018D000C906C90E01702078282823D12921204665 -:1018E000FFF7AFFD1EE0400712D56846224600898B -:1018F00021460E32FFF75BFF050004D0112800D00F -:10190000FFDF00250EE0A07FFB210840A07709E063 -:101910007F1CFFB202200CF0F7F8401CB8429ED8A2 -:10192000052D07D06846C088F082052D04D02846D2 -:1019300005B0F0BD0020F0820020F9E7FEB50400FC -:1019400000D1FFDF72202070606808250178794E91 -:10195000091F0B0019F0BAF811F10A0B4EF00B0C2D -:10196000F0F0350B0B0B0BF172F10B00FFDFFEBD3E -:1019700080880090FFF72FFD070000D1FFDF60781F -:10198000042128436070307D08433075212138469A -:10199000FFF757FD009806F001FE009803F018FDD0 -:1019A000009804F03DFD022000990FF030FFB87F51 -:1019B000EF210840B877FFF748FF0028D7D0FFDFB6 -:1019C000FEBD86883046FFF706FD002800D1FFDF08 -:1019D00060688078012800D0FFDF60688179304638 -:1019E00007F060F80028EBD06178294361706168E6 -:1019F000C880FEBD87883846FFF7EDFC060000D1A1 -:101A0000FFDF60783946284360706068C0883081A5 -:101A100060680089708160684089B08102200FF0A1 -:101A2000F6FE0020B075B07F8007800F0228E0D15D -:101A3000FFF70BFF0028DCD0FFDFFEBD80783C28DD -:101A400003D0002702280ED000E0012700210091DA -:101A5000002804D03C2802D0022800D0FFDF0098E4 -:101A6000002802D078E00121F1E760782843607017 -:101A7000307D28433075002F62D16068022187884D -:101A8000009738460CF08AF80546032138460CF0DA -:101A900085F80290052138460CF080F80190042169 -:101AA00038460CF07BF80746002D00D1FFDF029886 -:101AB000002800D1FFDF0198002800D1FFDF002FB0 -:101AC00000D1FFDF22212846FFF7BBFC6068807948 -:101AD000012833D00227A87F0622800880003843DF -:101AE000A8776068C08A28816068008B6881606818 -:101AF000408BA8816068C079E87561682846183015 -:101B0000083118F022FD60680622807B68706168E9 -:101B1000A81C0F3118F019FDA87F8107890F0098C4 -:101B200006F02BFD012F0BD0022F15D0FFDFFEBDDD -:101B30000302FF01A80100201AE01DE00127CAE707 -:101B40003078032800D0FFDF002108460FF05FFE49 -:101B5000012000F065FFEAE7B078132800D0FFDF2E -:101B6000002107200FF053FE1120FFF7CBFBDEE72B -:101B7000204601F0DFFEDAE7607828436070D6E7A0 -:101B8000F7B505460078002700090C463E460128B7 -:101B90007ED0F84902287CD007280AD00A2879D0BC -:101BA000FFDF0298002C068001D02780668000208D -:101BB000BDE768682246037808320D2B3DD006DC6D -:101BC000042B68D0072B41D00A2B63D106E0122BDF -:101BD00043D0132B4BD0142BF7D1C8E01127092683 -:101BE000002C7DD08088A0806968FB2389792172D0 -:101BF000E14905460A7D1A400A7504210BF0E7FF0A -:101C0000052128460BF0E3FF002128460BF0DFFFFB -:101C1000012128460BF0DBFF032128460BF0D7FFFC -:101C2000022128460BF0D3FF062128460BF0CFFFF8 -:101C3000072128460BF0CBFFB3E701270926002C2C -:101C4000CFD08088A080686880790EE012271026A7 -:101C50008088214600F007FFA3E71C270926002CF7 -:101C6000BFD04088A08068680079207299E78178A9 -:101C70003C2941D010272026002CB2D08088A0809B -:101C80006868C08A60836868C08A2083686803E0E7 -:101C90007EE0A7E0CBE03AE0008BA0836868408B51 -:101CA000E0836968E07D497F4008C9074000C90FAB -:101CB0000843E0756968C007497FC00F49084900BB -:101CC0000843E0756968C8790831FFF73FFD696826 -:101CD000224608460F308B7B01460F32184600E043 -:101CE0007FE0FFF733FD68688079002802D001208B -:101CF000A07507E00220FBE71B270926002C70D007 -:101D0000002020729C48F722017D11407DE01D27B4 -:101D10003026002C65D0A18069680879491DFFF73D -:101D200015FD68682030C07AE0736868C0780428C0 -:101D3000207C19D0400840002074F92108406968CF -:101D40001F22C9788907490F084320746968400732 -:101D5000C97A400FC90008432074696820461130D1 -:101D60000C3118F0F2FB1CE701210843E4E72027BF -:101D70001026002C63D0A18068682246407A207229 -:101D800069680932CB1C88781946FFF7DFFC08E741 -:101D9000287E012803D0022813D0FFDF01E71F2788 -:101DA0001026002C4BD06888A080688B2081A88BDF -:101DB0006081E88BA081288CE0816F48DF22017D63 -:101DC000A3E712271026688800F04DFE002C36D0BD -:101DD00068784007400F0328C5D16748FD22017D80 -:101DE00093E72CE0287E030018F070FE0604111122 -:101DF000212121271B270926002C20D0A18000208B -:101E000020725D48017D490849000175C9E61B271C -:101E10000926002C13D0A180287E012805D003209C -:101E200020725548EF22017D6FE70220F8E7214636 -:101E30002846029A01F003FF79E6FFDFB1E6029837 -:101E40000680B4E610B54C4894B08078132802D0D0 -:101E5000082014B010BD22206946087009A9684600 -:101E600009F000FC0446002107200FF0D0FC2046BA -:101E7000EFE700B5404895B08078122801D00820DF -:101E8000AAE41E216846017000218170C17009A971 -:101E900009F0E8FB0028F3D1002107200FF0B7FC80 -:101EA0001120FFF72FFA002096E400B5324895B0D4 -:101EB0000078022803D0032801D008208CE41B21DD -:101EC000684601700021817009A909F0CBFB002848 -:101ED000F4D1002108460FF09AFC012000F0A0FD8B -:101EE000002079E4F8B5244C030018F0EFFD0A0651 -:101EF0006B176B6B6B6B38315D6BFFF7D6FF002890 -:101F000026D105F030FD002822D0222101700021C9 -:101F1000017605F006FD207D012141E08EB23046BC -:101F2000FFF759FA050000D1FFDF287821280FD0EC -:101F300005F019FD00280CD0122101700227077648 -:101F400046800020A87505F0ECFC207D3843207504 -:101F5000F8BD132229463046FFF709FCF8BDA578E5 -:101F6000122D03D0132D09D0FFDFF8BDFFF781FF3D -:101F700006E00000FFFF0000A8010020FFF762FF5D -:101F80000028F2D105F0EFFC0028EED022210170EC -:101F9000122D07D00221017605F0C3FC207D10210F -:101FA0000843D4E70121F6E7607A8109012907D0C7 -:101FB000800900D0FFDF03210020FFF70FFCF8BDF0 -:101FC0000221F9E7FFDFF8BDF7B582B014460D0036 -:101FD00000D1FFDF2046297818300827009001291A -:101FE00003D0022919D0FFDFA2E40298FFF7F3F92A -:101FF000060000D1FFDF0220B0751030207060783D -:102000000A22384360702946009818F09EFAF84872 -:102010002022017D114301758AE40298FFF7DBF964 -:10202000060000D1FFDF6988F248814208D1AA8802 -:10203000824205D1132231460298FFF798FB77E4DC -:10204000814202D1A88800280BD01220207060782D -:102050000A22384360702946009818F076FA00206A -:1020600006E078230022022002990FF041FB0120B4 -:10207000B0755DE430B5054695B00C4608460FF0E6 -:1020800005FC00282FD1203D01212B0018F01EFD5A -:1020900006042640444A545B002108200FF091FBBF -:1020A000002802D0112015B030BD242069460870E8 -:1020B00000A80522A11C023018F047FA09A96846B9 -:1020C00009F0D0FA05002BD108230022114618464A -:1020D0000FF00EFB082823D0FFDF21E060680FF02F -:1020E00008FC002801D01020DDE73C216846017083 -:1020F000218841806188818009A909F0B3FA05002F -:102100000ED1606800280BD06946098D018007E078 -:10211000206802F0BCF802E0204600F0B7FC05465B -:102120002846C0E73D2208E0997000E0987009A9B0 -:10213000184609F097FAF2E734226B461A702278B3 -:10214000D207F3D0F0E70720ADE730B5054695B0EC -:102150000C4608460FF0B7FB002801D01020A2E77C -:10216000203D2B0018F0B2FC05042121232135006D -:102170002088FFF730F9002804D00078222803D205 -:10218000082090E79C488EE7252168460170218849 -:10219000418009A909F066FA050018D10AA90522AB -:1021A0000231A01C18F0D1F911E006250FE02068DB -:1021B000002808D00FF09DFB002801D0102506E074 -:1021C000206802F059F88A480025408AA0802846F5 -:1021D00069E7072067E786480A30704710B518217D -:1021E000834818F00FFA012000F01AFC1120FFF7C5 -:1021F00089F87F4C00206074E12080006082211DFE -:10220000E01C05F07FFCE11C0722C81D18F09DF9B9 -:10221000FFF7C3F8002800D0FFDF00F09FFC01F0BB -:102220003FFB10BD10B50C463E21204618F0EAF9E0 -:10223000A07F80088000A077202020700020A0755B -:102240002034A07010BD7047FEB505460E46084606 -:102250000FF01CFB002801D0102068E4644C002D16 -:1022600002D0012D31D125E00722E11C684618F08B -:102270006CF9E11C3046FFF733FA0028EDD1FFF787 -:102280008CF8070006D007226946E01C18F05DF9BB -:1022900038464CE43078002801D0012805D1544854 -:1022A0000722E11C0A3018F050F9002109200FF034 -:1022B000AEFA0FE03178002907D0012905D00229B4 -:1022C00005D0032903D04D4831E407202FE4012035 -:1022D000FFF784FA6574002029E410B504460FF076 -:1022E000F2FA002801D0102010BD41492246C878DA -:1022F000091DFFF72BFA002010BDFFB599B0054668 -:10230000002008A908746946087108A908730875AF -:102310001E46144628460FF0F7FA002804D120463E -:102320000FF0F2FA002802D010201DB0F0BD2846B0 -:10233000204318D01F270BAB0CAA009728461A99E8 -:10234000FFF768F90028F0D10DAB01AA314620460D -:102350000097FFF75FF90028E7D168460079C007CA -:1023600003D00A20E1E70720DFE702AF002D0FD0FE -:102370001A20694608721A9888722946F81C1A9A17 -:1023800018F0E3F80EA902A809F06CF90028CCD1E6 -:10239000002C0ED0202168460172867232462146FA -:1023A000F81C18F0D2F80EA902A809F05BF9002871 -:1023B000BBD108A80E49007B48700020B5E770B576 -:1023C00006460A200C46087015461146204609F0BC -:1023D00049F9002807D1382121702046294609F003 -:1023E00041F900280CD0082801D10448401C70BDD8 -:1023F000A8010020FFFF00000230000002320000B0 -:102400002A462146304600F067FB0446082800D1E2 -:10241000FFDF2046EBE7F0B50446F9A103C997B00A -:1024200014900027159120460FF030FA002807D1AC -:102430002078012807D160680FF028FA002802D020 -:10244000102017B0F0BDF04D2878012801D00820E9 -:10245000F7E707200BF060FB002804D12078002864 -:102460000AD0012808D0FEF767FF002806D0287D93 -:102470000107890F08D103E01220E2E71320E0E70B -:10248000C10701D1800701D51120DAE7208ADF4A90 -:10249000014620399142217807D301297ED10028B5 -:1024A0007CD1618A002979D110E0022901D0032969 -:1024B00001D1A02872D3012908D0D3494978C9078E -:1024C00004D0618A002969D0B42967D8217800290D -:1024D00006D0012908D0022904D003295ED117E0D3 -:1024E000002518E0022516E0002802D1608A0028A5 -:1024F0000CD004256068007800280CD0012809D091 -:10250000022807D0032805D0C1489AE70125F1E742 -:10251000032500E00127207A002806D0012806D0F4 -:10252000022806D0032860D105E0002604E0012639 -:1025300002E0022600E00326002D01D0022D15D175 -:10254000002E13D0E068002803D0FFF704F800281D -:1025500093D1AD484078800702D0AD48401E70E767 -:10256000022D03D1022E40D0032E3ED01821684602 -:102570000170218A4180218A81808571A248C078BA -:10258000002801D0012865D16946C87168460772E4 -:1025900021780930012922D0062100E025E018F039 -:1025A00031F869460E74207D8207C107D20F4007BB -:1025B000C90F5200C00F11438000014314A8405CB2 -:1025C0006946C873002810D009A9684609F04AF87E -:1025D00000289AD1002D0AD0022D08D012E061689F -:1025E0000622491C17F0B1FFDBE7072029E7002E80 -:1025F00008D0E068002805D009AA6946FFF7DFFE89 -:102600000028ACD11B20694608700120887009A9F8 -:10261000684609F027F80028A1D108A840791B28AE -:1026200018D12B0018F052FA05040406060409001C -:10263000032000E0022000F0F3F9012D0CD0608AA5 -:10264000002809D000228300114610460FF050F8F0 -:10265000002801D00320F4E60020F2E6F3B583B0B1 -:102660000E46032508460FF04FF9002866D103985F -:10267000FEF7B1FE040004D02078222803D20820FF -:10268000B2E46448B0E4A07F8707BF0F002E05D0F6 -:1026900031463846FEF72AFF0500F1D15A48012F8E -:1026A00004D0022F18D0FFDF28469DE4A27D3146DA -:1026B000012A02D0007D800701D5112094E4002971 -:1026C00005D1684600F0E7FA0028D9D16946039899 -:1026D00006F057F90546E7E7A17D022915D1007DEF -:1026E000800612D4002E04D0A07F40070BD4002116 -:1026F00000E00121039806F099F90500D4D1A075F6 -:10270000002ED1D003E01125CEE7002E16D03246A0 -:1027100021460398FFF74BF805461128C4D1A07F46 -:102720004007C1D42046082231460E3017F00DFF75 -:10273000A07F04210843A0770025B5E7102053E4CB -:1027400070B50C460546FEF746FE010004D0224651 -:102750002846FFF70CF84AE62E4848E600B595B043 -:10276000312269460A70887009A9684608F07AFF24 -:1027700015B000BD10B50123FEF732FE10BD0023D9 -:1027800010B51A461946FEF72BFE10BD70B594B071 -:1027900004460FF07BF8002802D0102014B026E683 -:1027A0002046FEF71BFF0028F8D1174DA878112806 -:1027B00001D00820F2E7FEF7BFFD002804D0287DF5 -:1027C000C00603D51120E9E71320E7E71D2168467D -:1027D000017020780126C107C90F684681702189E0 -:1027E00081806189C18020788007C10F684641726D -:1027F000E878002500280FD0012810D00320CDE76D -:102800000706050403020100A8010020E13F0000C3 -:1028100002320000023000006846057201E068469E -:10282000067209A908F01EFF0028B7D1207880079A -:1028300008D56068002805D009AA6946FFF7BFFDE2 -:102840000028ABD11E21684601708670C57009A9A9 -:1028500008F008FF0028A1D1A08900F0F5F80400D5 -:102860009CD11220FEF74EFD204697E7F0B595B0BB -:1028700015460C4606460FF047F8002809D12046B9 -:102880000FF004F8002804D128460EF0FFFF0028BE -:1028900002D0102015B0F0BDAD4F387DC106890FB4 -:1028A00001D1400701D51120F4E72046FEF796FE3E -:1028B0000028EFD120788107C90F314303D080076A -:1028C00003D5002E01D00720E4E729460220FEF7B9 -:1028D0000DFE0028DED1B878112803D0122801D0CF -:1028E0000820D7E706200BF017F9002804D09848F5 -:1028F0008078122802D005E01220CBE7FFF7B9FA62 -:102900000028C7D1FEF718FD022801D21320C1E725 -:102910002078800708D56068002805D009AA694694 -:10292000FFF74DFD0028B5D12121684601702189AE -:10293000418061898180207800278007C10F684627 -:10294000817120788007002815DB3078002807D0B7 -:10295000012808D0022806D0032804D07D4899E732 -:102960006846C77102E001206946C8710622711CE1 -:1029700002A817F0EAFD7648C078002803D00128A5 -:1029800004D0032086E76846877302E00120694689 -:10299000887329886846018269884182A988818272 -:1029A000E988C1820783478309A908F05BFE0028F4 -:1029B0008AD1A08900F048F8040085D11320FEF7E1 -:1029C000A1FC204666E730B5054695B00C460846A2 -:1029D0000EF079FF002802D0102015B030BD284637 -:1029E000FEF7F9FC002807D00178222902D3807F66 -:1029F000800603D40820F0E75748EEE71321684625 -:102A00000170458009A908F02DFE0028E5D108AA2B -:102A10000A2151567F2901D02170DEE70520DCE72D -:102A200030B54B4D040008D0012C04D0022C06D048 -:102A3000032C04D0FFDF2C7030BDFFDFFBE72878CC -:102A40000128F8D0FFDFF6E710B5002809D0830091 -:102A50000022114607200EF04BFE072801D003206C -:102A600010BD002010BD70B50C0006460DD0FEF75D -:102A7000B2FC050000D1FFDFA680288920812889CB -:102A800060816889A081A889E081B0E410B504461E -:102A90000068002806D00EF037FF002801D0102073 -:102AA00010BD206801F0DBFBA088294C6082607CAF -:102AB00001280DD1002109200EF083FE002800D04E -:102AC0000120617A8909012904D00321FEF786FEDD -:102AD000002010BD0221F9E7F7B500260C46054697 -:102AE0000B271AE02968B00009580978002903D09B -:102AF000012901D00720FEBDA170296806220958CE -:102B0000E01C491C17F021FD27702046029908F0AF -:102B1000A9FD0028EFD1761CF6B22879B042E1D8A1 -:102B2000002639270FE0A868B10041581022A01CE8 -:102B300017F00BFD27702046029908F093FD00283E -:102B4000D9D1761CF6B2287BB042ECD80020FEBD6D -:102B5000A8010020023200000230000010B506215A -:102B6000D04817F04FFD10BDFFB591B0149C204622 -:102B70000EF08CFE002802D0102015B0F0BD2146CA -:102B80000120FEF7B3FC0028F7D101246846032199 -:102B90008471C9028180002201A9204603F0EFFE62 -:102BA0000028EAD1684615218471490281800026F7 -:102BB0001C2102A8009617F027FD01200146684657 -:102BC0001031017000200146684641708178F92774 -:102BD0003940891C21438170017A02252943017201 -:102BE00012998186C6861F2101870C9011980F903B -:102BF00001A80B9009AA0BA902A803F0ABFC0028BE -:102C0000BBD16846A74E808C308068468471A64947 -:102C10008180807809AA3840801C410849006846B4 -:102C200081708586058713A80F900BA902A803F071 -:102C300091FC0028A1D16846808C7080311D1498C9 -:102C400000F0EDF899E73EB5044608206946088093 -:102C500020460EF01BFE002801D010203EBD21466C -:102C60000120FEF743FC0028F8D1208869468880BF -:102C70006088C880A0880881E0884881894801ABC5 -:102C800080886A46002104F081F86946098808298D -:102C9000E4D003203EBD1FB504460020029008206A -:102CA00069460881204603910EF0F0FD002802D00D -:102CB000102004B010BD7B4802AA81887B4804F034 -:102CC00009FA0028F5D169460989082901D00320AD -:102CD000EFE769460988218069464988618069462D -:102CE0008988A1806946C988E180E2E701B582B0A0 -:102CF0000220694608806B4802AB40886A46002182 -:102D000004F044F869460988022900D003200EBD6A -:102D10001CB50021009102216A46118001900EF03D -:102D2000D2FD002801D010201CBD5E486A464188B3 -:102D30005E4804F0CFF9694609880229F4D00320DF -:102D40001CBDFEB5064615460F4608460EF09EFD14 -:102D5000002801D01020FEBD1F2D01D90C20FEBD82 -:102D600030460EF093FD4F4C002822D1208801A957 -:102D700003F05AF90028F2D130786946487120886A -:102D800001A903F0E4FF0028E9D169460090087822 -:102D900002210843694608704979090703D00821D0 -:102DA0000843694608702088694603F06FFF0028D1 -:102DB000D5D169460D8120883B4602AA002103F047 -:102DC000E5FF69460989A942C9D00320FEBD7CB54B -:102DD00005460020009001900C460888694608804E -:102DE000284601950EF085FD002804D120460EF0FE -:102DF0006AFD002801D010207CBD002D03D068465C -:102E00000088002809D027486A460188274804F02E -:102E100061F96946098821807CBD0C207CBD30B5F4 -:102E2000044693B000200D46079014210BA817F01C -:102E3000EBFB1C21684617F0E7FB6A461120107770 -:102E400000205077107802210843107007A80C90DA -:102E5000012008AA907214486A46C01C10850AA86E -:102E60000B902088108460885084A0889084E0882B -:102E7000D084907FF9210840801C40084000907762 -:102E800008209086108708A80F9010AA0BA9684602 -:102E900003F060FB002803D110A8008828800020E0 -:102EA00013B030BD10000020012A0000FFFF000019 -:102EB00001202049C00308601F4900200870072036 -:102EC0001E49C0058860704730B51B4D0446287800 -:102ED000A04204D0002C02D0002800D0FFDF2878C8 -:102EE000A0420BD00021164A14482C70002C18D098 -:102EF000144B012C03D0022C0AD0FFDF30BD11602F -:102F0000022111605361032109068160416030BDD7 -:102F100011600321116053610121C9058160416085 -:102F200030BD116011600721C905816030BD00B559 -:102F3000FFDF00BD80E100E01600002000F5014049 -:102F400000F500406403002010B50DF03CFB10BDFF -:102F500003490020C863034902200860704700004D -:102F6000C01F004080E200E00E4A12680C498A420D -:102F70000AD118470B4A1268094B9A4204D101B58D -:102F80000EF04CFA03BC8E460749096809580847F9 -:102F900006480749054A064B70470000000000003C -:102FA000BEBAFECA9800002004000020781100205C -:102FB0007811002070B50C46054606F09FFE2146AC -:102FC000284607F002FF70BD10B50EF0A5FD0EF00B -:102FD000D3F8FFF76DFF16F0A1F90EF0B5FC0EF077 -:102FE00035FD10BD0348044A0168914201D100211A -:102FF0000160704798000020BEBAFECA7047704753 -:1030000010FFFFFFDBE5B15100B001008700FFFFBB -:1030100010B504460EF03AFC002801D0102010BD77 -:1030200020784006400F042807D86078072804D38A -:10303000A178102901D8814201D2072010BDE07883 -:10304000410706D421794A0703D4000701D40807B1 -:1030500001D5062010BD002010BD30B5C37F147807 -:103060005B08A4075B00E40F2343C3771578FD24B6 -:103070006D07ED0F23406D002B43C37713788878DD -:10308000DB0920405B001843887014784B78640695 -:10309000DB06640FDB0E640123434B70137840089A -:1030A00040001B07DB0F184388705078487130BD13 -:1030B000F0B50B78C4785B08E4075B00E40F2343AA -:1030C0000B70C478FD26A407E40F3340640023434B -:1030D0000B70C478FB256407E40F2B40A400234346 -:1030E0000B70C778F7243F07FF0F2340FF003B43D7 -:1030F0000B70117803794908DB074900DB0F19438E -:103100001170037931409B07DB0F5B00194311708D -:10311000037929405B07DB0F9B001943117000798D -:1031200021400007C00FC00001431170F0BD70B511 -:1031300014460D46064604F016FC002809D0A221CC -:103140000170142221461830FEF720F804F0E9FB44 -:1031500070BD132229463046FEF709FB70BD70B5DD -:1031600015460E46044604F0FEFB00280AD0222134 -:103170000170448004222946183017F0E6F904F063 -:10318000D0FB70BD132231462046FEF7F0FA70BD29 -:1031900010B5FE4C207C00280AD12046FC4A21466E -:1031A00010380CF03AF9002800D0FFDF012020741D -:1031B00010BDFFB581B00B9E05461F461421304659 -:1031C0000A9C17F021FA0C9800210160039800284E -:1031D00001D0029801E03878C007002812D020689A -:1031E0000EF071FB00283FD10398002807D120681A -:1031F000123030602068143070602068B0600C9825 -:10320000216801603878800726D560680EF071FB70 -:10321000002829D10298002829D0FEF7DCFF0146BA -:103220002846FF300722B53017F08FF9FFF7B0FFBF -:10323000D6480090F0606268002A0DD0FF20294631 -:10324000B530FF31405DB6311032FEF77FFA102203 -:103250006068009917F079F93878400712D5A068AE -:103260000EF031FB00280BD0102005B0F0BD6068D7 -:103270000028F9D0F060FF35813560682863EBE7FE -:10328000A06830610020F0E730B50C4611212170B4 -:103290000022054662702035A878002806D0042850 -:1032A0000DD005280FD0062812D0FFDF20780009A6 -:1032B000012803D92878C006C00E607030BD080709 -:1032C000000F203002E00807000F30302070EDE7DB -:1032D0000807000F4030F9E710B5002803D0A924F3 -:1032E000245C002C08D0A948447D0020002C0BD081 -:1032F00008601060186010BD0446A8340C600146D8 -:10330000D031F8301160F5E7A04C14340C60F0E7D0 -:1033100010B58AB008236C466370019102910023B6 -:103320009A490993039223744431059101466846F2 -:103330000CF049F8002800D0FFDF0AB010BD70B5CE -:1033400094B015460C462C226946189E0A70488097 -:10335000002B17D00822194601A817F0F6F8684686 -:103360008581102231460E3017F0EFF809A9684622 -:1033700008F078F9002803D1A17F10221143A1772A -:1033800014B070BD002001900290E8E7F0B5064649 -:10339000008A8BB080B20D460390FEF71CF87B4983 -:1033A0000446483930780F4668370091030017F01B -:1033B0008DFB12FAF93A0A3B7A819DADF8F7F6F5E2 -:1033C000F4F360F3F3FAA07F8007800F012806D0A2 -:1033D000002103980AF0EAFB050003D101E0012176 -:1033E000F7E7FFDF387FC00905D068482946203855 -:1033F000006E21310DE028462130032107460DF0F3 -:1034000057FF384617F002F9624917F018F90846D5 -:10341000394617F00CF970686866B068A8662078BD -:10342000252800D0FFDFFCE0A07F8007800F012867 -:1034300006D0002103980AF0B9FB060003D101E091 -:103440000121F7E7FFDF7078810702D52178252970 -:1034500004D00121084370700BB0F0BD0220287029 -:103460002020805D2871304621303136EE60A86022 -:10347000F2E7A07F8007800F012806D00021039883 -:103480000AF094FB040003D101E00121F7E7FFDF1C -:103490006078C10604D51420287041346C60DBE7E5 -:1034A0000821084385E03948082148380DF000FF1D -:1034B000032017E02A206946087101A81022023073 -:1034C000716817F042F805A810220230B16817F0B1 -:1034D0003CF82E4901A84C3908F0C4F8002800D067 -:1034E000FFDF0420287000986860B5E7E07FC00621 -:1034F00000D5FFDFB0680090B3880622032103984F -:1035000005F0A8F80028A7D0FFDFA5E7002C00D120 -:10351000FFDF7168002904D020461022233017F005 -:1035200014F828212046FDF78CFFA07F8007800F2C -:1035300002280ED120462330002300901A4621464F -:103540000398FFF7FCFE112806D029212046FDF73D -:1035500078FF307A2034B4E0A07F000700D5FFDF89 -:10356000A07F08210843A0770020A086204636309F -:1035700017F048F8E07FFB220146C9071040490FC9 -:103580000843F72101408007C00F0DE07C020020B6 -:10359000FFFF000040420F0034E07BE19CE092E03E -:1035A00063E008E043E079E1C0000143E177307A6D -:1035B0002034607050E7A07F8007800F012806D07C -:1035C000002103980AF0F2FA040003D101E001217E -:1035D000F7E7FFDF2046022175300DF069FE11206C -:1035E00028702046FF30B530686020466130017D8C -:1035F0002974407D6874FE48A86010306C346C619A -:10360000E86029E7A07F8007800F012806D000210D -:1036100003980AF0CBFA002803D101E00121F7E773 -:10362000FFDF324621460398FFF781FD14E7002CA7 -:1036300000D1FFDF20782128BCD93079012802D0C1 -:10364000022808D103E0E07F10210843E077387FAB -:10365000012108433877324621460398FFF767FD7A -:1036600023212046FDF7EDFEF6E632790123032102 -:10367000039804F099FE002813D0122028703279A4 -:10368000AA802846A91D0C3008350191029000231C -:1036900000950321039804F006FF00288AD0FFDF7D -:1036A000DAE6A07F8007800F012806D0002103986A -:1036B0000AF07CFA040003D101E00121F7E7FFDF03 -:1036C00030792070C8E60321039805F082FA0028BB -:1036D00097D113202870BFE6A07F8007800F0128B4 -:1036E00006D0002103980AF061FA050003D101E039 -:1036F0000121F7E7FFDF2E466036307D8007800F1F -:1037000001287DD1A07F8007800F0890E07F80078F -:10371000C70F03D00898012804D031E09020405D05 -:10372000C00731D02946FF318131CA6A002A25D02D -:10373000107CF37C8007800F9B0018431074FD23DE -:103740001840E37FCA6ADB079B0F184310744008D8 -:1037500040003843CA6A002F107415D0C86A214649 -:103760001022233116F0F1FE28468030017C012220 -:1037700011430174307E9043307601E0002F03D076 -:103780000898022803D031E0307EC0072BD02846AD -:10379000FF308130826A002A25D0117CF37C8907B2 -:1037A000890F9B0019431174FD231940E37F826A3E -:1037B000DB079B0F19431174490849003943826A9A -:1037C000002F11740FD02146806A1022233116F089 -:1037D000BCFE307E01210843307628468030017CD3 -:1037E000490849000174089802284FD00020182188 -:1037F000484340196030007E80070AD5FF2000E072 -:1038000007E0B13042592946307B6D311032FDF767 -:103810009DFF052168460175307D80358107890F40 -:1038200068464175317E8175297CC17570482221B9 -:103830009C38039A0170417805ABC908C900C91CBE -:103840004170428004221946183016F07EFE684806 -:103850009C3804F00BFA2078252805D0212807D0C1 -:10386000FFDF2078222803D922212046FDF7E9FD39 -:10387000A07F8007800F01280AD0002103980AF05A -:10388000A6F9002800D1E7E5FFDFE5E50120AEE776 -:103890000121F3E7716800204870DDE5FFDFDBE51B -:1038A00070B55348524C4030017F00254906490EFF -:1038B000017725660BF050FD21461031204604F0BB -:1038C00054F92046203005740721403041712C30D6 -:1038D000E066503060671030A06770BD70B50D466F -:1038E000FDF779FD040000D1FFDFFF21BD3128463F -:1038F00016F08AFE3E486430686120462330286115 -:10390000A07F8007800F012809D002212846FF30C0 -:1039100021300BF022FD002800D0FFDF70BD012117 -:10392000F4E70A460146104610B5FF3021300BF08F -:1039300034FD10BDF0B505464068082601789BB0FF -:1039400008290DD00B2903D00C2938D10121817110 -:10395000686887883846FDF73EFD040036D134E0BC -:1039600047883846FDF737FD040000D1FFDF207897 -:10397000212824D0282824D1686802210C3001F0A5 -:1039800034FA00281DD068680821001D01F02DFAC6 -:10399000002816D02D21684601704780214610224C -:1039A000233101A816F0D1FD0FA9684607F05AFE91 -:1039B000002800D0FFDF29212046FDF742FD1BB083 -:1039C000F0BD687830436870F9E7FFDFA07F8107BA -:1039D000890F022902D1EF210840A0772078212801 -:1039E0000FD068688179002905D08078002801E02F -:1039F0005C02002010D0A07F8007800F022858D0E2 -:103A0000FFDFA07F8007800F0228D8D1FDF71DFFC0 -:103A10000028D4D0FFDFD2E7687830436870E07FB9 -:103A2000C10720D0800701D5062100E00521222012 -:103A300001552078292818D02428E2D139460620BB -:103A40000DF0E5FE22212046FDF7FBFCA07F80075C -:103A5000800F01282BD0002138460AF0B8F8002842 -:103A6000CFD0FFDFCDE70421E1E7A07F8007800F03 -:103A7000012806D0002138460AF098F8050003D145 -:103A800001E00121F7E7FFDF25212046FDF7D9FC02 -:103A9000102008A908712846FF3009A921300BF031 -:103AA00071FC0228ADD00028ABD0FFDFA9E70121CF -:103AB000D2E7687830436870A3E7FFB58BB01D4646 -:103AC0000646FDF788FC040054D02078222851D304 -:103AD00023284FD0E07FC0064CD4A07F8007800F02 -:103AE000012806D0002130460AF060F8070002D015 -:103AF0000BE00121F7E7A07F8007800F012804D1A8 -:103B0000012130460AF04AF8074601AB02AA03A990 -:103B10003846FFF7E1FB0398002800D1FFDF002FB4 -:103B200009D0FF370398213787612078222806D0F3 -:103B3000242804D007E003990020886103E02521B0 -:103B40002046FDF77EFC03980C21417046620D99DA -:103B500081800C9981601499C180C56002990161CE -:103B60000199416104A90BF02EFC022802D0002823 -:103B700000D0FFDF0FB0F0BD30B589B00546FDF7CE -:103B80002AFC0178222934D9807F8007800F012800 -:103B900006D0002128460AF009F8040003D101E00C -:103BA0000121F7E7FFDF227801230321284604F0F3 -:103BB000FBFB00281DD01221684601732278028287 -:103BC00006A8694405AB00930191029000230321EC -:103BD000284604F068FC002800D0FFDF2046FF30B4 -:103BE00003A921300BF0CEFB022802D0002800D020 -:103BF000FFDF09B030BD10B586B00446FDF7EBFB22 -:103C00000178222919D9807F8007800F012806D0EA -:103C10000021204609F0CAFF040003D101E0012180 -:103C2000F7E7FFDF1320694608702046FF30213098 -:103C30000BF0A8FB002800D0FFDF06B010BDF7B5E1 -:103C4000054600780C46010920460027083082B05E -:103C50003E46019002297DD0072902D00A2909D1C8 -:103C600040E068680178082905D00B292AD00C2982 -:103C700028D0FFDF0BE214271C26002C6BD04088D5 -:103C8000A080FDF7A8FB0090002800D1FFDF00987E -:103C90000099C07D1831019AFDF758FD6868082227 -:103CA00080892082696820461230091D16F04DFC7B -:103CB000A07E01210843F9210840A0760098402108 -:103CC000807F56E01A270A26002CD7D08088A08053 -:103CD000FDF781FB050000D1FFDF28460199FFF7C2 -:103CE000D3FAD4E1002C01D0288DA080287E0E28A4 -:103CF0007ED006DC01287CD0022808D0032804D11D -:103D00003EE0102876D0112875D0FFDFBFE11E27D6 -:103D10000926002CB2D0A088FDF75DFB009000289A -:103D200000D1FFDF287F8007800F0128207A24D070 -:103D3000400840002072FD210840297F4907C90F33 -:103D4000490008432072FB210840297F0907C90F59 -:103D5000890001E08FE160E108432072F72108400B -:103D6000297FC906C90FC900084320720098802125 -:103D7000807F08430099887789E101210843D9E7CA -:103D800013270D26002CA0D0A088FDF724FB00905F -:103D9000807F8007800F012806D00021A08809F0CD -:103DA00005FF050003D101E00121F7E7FFDF0098DF -:103DB000807F8207920F012A7ED0A86E81788907C2 -:103DC000890F0129217A79D0490849002172857823 -:103DD000FD236D07ED0F19406D0029432172FB256E -:103DE000294085782D07ED0FAD002943217203E0AE -:103DF0009FE0E7E0CDE0DEE0F72529408578ED069D -:103E0000ED0FED00294321728F25294005786D07BC -:103E10006D0E2943217245784906490EED0129436B -:103E2000217200216172C178A172E17A012A48D021 -:103E300042794908D2074900D20F1143E172427911 -:103E400019409207D20F52001143E1724579FB22CB -:103E50006D07ED0F1140AD002943E172F7252940B0 -:103E600045792D07ED0FED002943E172217B05799E -:103E70004908ED074900ED0F2943217319400379E3 -:103E80009B07DB0F5B001943217311400279520736 -:103E9000D20F920011432173F722007911400007DD -:103EA000C00FC000014321730098007823286FD908 -:103EB00026217EE000E001E0686E7FE701231943E0 -:103EC00084E702794908D2074900D20F1143E17211 -:103ED000027919409207D20F52001143E17205791D -:103EE000FB226D07ED0F1140AD002943E172F7256C -:103EF000294005792D07ED0FED002943E172217B63 -:103F000045794908ED074900ED0F29432173194010 -:103F100043799B07DB0F5B00194321731140427902 -:103F20005207D20F920011432173F72211404079BA -:103F3000B5E718271026002C6FD0A088FDF74BFAA4 -:103F40000190807F8007800F012807D00021A08882 -:103F500009F02CFE0090002803D101E00121F6E7D2 -:103F6000FFDFE869A06000980421407808430099C9 -:103F7000487000988078800708D501202073019848 -:103F80000078232804D92721019867E0002020E148 -:103F900066E015270F26002C68D0A088FDF71BFAD5 -:103FA00000900622E869019907F0C2FB0120A07386 -:103FB000B5E0009852E016270926002C56D0287F3D -:103FC000207264E0297FFE4802290DD019270E26B1 -:103FD000002C4BD001290ED003291BD004291DD061 -:103FE00005291BD0FFDF24E01B270926002C4ED01B -:103FF0000121217205E001212172617A890889007D -:104000006172017FCA094906D201890E49000A433B -:1040100002770EE00220207207E027E0687F0007A9 -:10402000000F8030207205291BD0607A8008800044 -:104030006072A088FDF7CFF905460078212826D0C8 -:10404000232800D0FFDFA87F8007800F012810D031 -:104050000021A08809F0BBFD22212846FDF7F1F9D7 -:1040600015E0607A80088000401CE1E70498068033 -:1040700013E00121EDE7002C01D06888A080287EA4 -:1040800003282ED004280BD005284ED0FFDF04983B -:10409000002C068001D027806680002005B0F0BD8E -:1040A00015270F26002CE1D0A088FDF794F9807F1A -:1040B0008007800F012806D00021A08809F076FD36 -:1040C000050003D101E00121F7E7FFDF2846213099 -:1040D00016F09CFA0622019907F02AFB0020A07333 -:1040E000D5E717270926002CC0D0A088FDF773F963 -:1040F0000090807F8007800F012806D00021A088D3 -:1041000009F054FD050003D101E00121F7E7FFDFCD -:10411000A878800701D5022000E0012020720098D5 -:1041200000782328B3D9272143E719270E26002C2E -:104130009CD0A088FDF74FF90090002800D1FFDF48 -:104140000621019816F060FA00202072A07A03215F -:104150000843A072FB2108400099C97FC907490F95 -:104160000843A0720099C97F8A07D20F1140F72235 -:10417000C90010400143A172687E8007800F0128AA -:1041800085D1607A0421084360720098807F80079F -:10419000800F01281FD0607B4108E87E4900C007DE -:1041A000C00F01436173207BAA7E4008D207400004 -:1041B000D20F10432073EB7EFD229B07DB0F1140D3 -:1041C0005B0019436173A97E10408907C90F49003C -:1041D000084320735BE7207BE97E4008C907400065 -:1041E000C90F08432073617BAA7E4908D2074900A2 -:1041F000D20F11436173EB7EFD229B07DB0F104052 -:104200005B0018432073A87E11408007C00F400058 -:10421000014361733BE710B50446807990B0800993 -:10422000012800D0FFDFFEF7B3FF01206946487088 -:104230006448099062480AA920380190201D029024 -:10424000601C0B9068460BF0BEF8002800D0FFDF22 -:104250000322601C0B9916F078F910B010BD10B550 -:10426000574C203C002805D001461022204616F06D -:104270006CF90120207410BD10B50446FEF788FFCC -:104280004F4910222039204616F05FF910BD70B555 -:1042900000254B4C0646002816D00DF0F7FA0028F2 -:1042A00001D010250EE00621304607F02BFA411C04 -:1042B00007D0434940390866207F80210843207792 -:1042C00000E00725284670BD207F4006400EF6E737 -:1042D000F3B589B00D46002708460DF015FB002800 -:1042E00014D10998FDF777F8040003D0207822282C -:1042F00015D102E034480BB0F0BD002D08D1A07FED -:10430000C10903D08007800F022801D01020F2E7F6 -:10431000A07FC10601D4010703D5002D01D00820DC -:10432000E9E72749097FC90701D01120E3E7E17FC9 -:10433000C90601D50D20DEE78007800F022806D1CF -:10434000002D04D02846FEF763FE0700D3D1A07FDE -:104350008007800F012806D00021099809F026FC6B -:10436000060002D00CE00121F7E7A07F8007800F54 -:1043700001280BD00021099809F010FC060007D095 -:10438000A07F8007800F022804D00AE00121F2E715 -:104390000420B0E7002D04D02A4631462046FEF71F -:1043A0005CFE07AB1A4669463046FEF795FF00985B -:1043B000002800D1FFDF00990D204870099805E022 -:1043C0009C020020FFFF00000230000048623046DF -:1043D000FF302130486100200881A07FFB22800748 -:1043E000800F012832D0002D56D002200871301DD8 -:1043F0008861707840090877B0788007C00F4877E7 -:10440000887F2B788008DB078000DB0F18438877D4 -:104410001040E27FD207520F10438877F7221040F6 -:10442000E27F9207D20FD20010438877EF2210402C -:10443000B278D207D20E10438877A878C8770A4698 -:10444000213228462031FEF733FE29E00120087191 -:10445000087E2B788008DB078000DB0F1843087686 -:1044600010402A789207D20F920010430876F72264 -:1044700010402A785207D20FD20010430876EF225C -:1044800010402A781207D20F120110430876242117 -:104490002046FCF7D6FF0BE00320087105200876C4 -:1044A00025212046FCF7CDFFA07F4006400EA077D7 -:1044B00001A900980AF087FF022802D0002800D046 -:1044C000FFDF384617E7FFB5FB4A0D4607CA99B02C -:1044D00003AB07C300271998FCF77DFF060005D042 -:1044E0003078262804D008201DB0F0BDF348FBE743 -:1044F000B07F8007800F1590012802D0022808D0D5 -:104500000AE0002D08D11B98FEF782FD0028EBD1B0 -:1045100002E01B98002841D1B07F8007800F01285E -:1045200006D00021199809F041FB040003D101E0F5 -:104530000121F7E7FFDF852D26D008DC002D1BD0F9 -:10454000812D1BD0822D1BD0832D08D11AE0862D02 -:104550001CD0882D1CD0892D1CD08A2D1CD00F205A -:1045600020710F281AD0012069460877201D089075 -:104570002079002814D062E10020F1E70120EFE764 -:104580000220EDE70320EBE70520E9E70620E7E757 -:104590000820E5E70920E3E70A20E1E70720A3E791 -:1045A0001598012814D0656EA06E16900220019017 -:1045B000012000901699A878897808400007C00F5C -:1045C000109069D01C980DF061F9002878D138E07E -:1045D000A56E606E16900120019002200090214689 -:1045E00030461B9AFEF739FD1B99A8780978800898 -:1045F000C9078000C90F0843A870FB210840F17F5C -:10460000C907490F0843A870F7210840F17F8907BF -:10461000C90FC9000843A870EF210840A178C90755 -:10462000C90E0843A870607840092870A0788007F8 -:10463000C00F68701B988078E8700020687128713E -:10464000B8E71C98C0680DF021F9002863D11C98C8 -:10465000C0690DF01BF900285DD11C98C068A060EE -:104660001C98C069E0601699A0784978C907890F3D -:104670000843A0701699C0B28978C906C90F891E6F -:104680000840A070002020210855304600991730BE -:1046900002290BD001210AE0169902224978A0785C -:1046A000C907890FD24311430840E2E7002189007E -:1046B000091988610199701C022902D0012101E0C9 -:1046C00029E00021890009198861A8788007800FF6 -:1046D00001284CD1169880788007800F012846D198 -:1046E0001598012804D12A1D691D1B98FEF7E0FCCE -:1046F00016982979007908AA01401175169A6879E7 -:104700005279104008AA1076014330D01C980DF061 -:10471000BDF8002801D01020E6E61C982146FF31A4 -:1047200022461030159BA9317C321790022B3AD0CB -:1047300002910192009000210DAB2046109AFEF7E5 -:1047400038FD0028E8D12146FF3122461598AD31C9 -:10475000943201282DD017980291019200900021E7 -:104760000EAB2046109AFEF724FD0028D4D1A07885 -:1047700080073DD41699A87889780843400737D533 -:104780001698159B2978007803AA012B17D04300AF -:10479000D25A4B00DA409707BF0F18D0012F1ED016 -:1047A000022F12D11DE01C9802910192009001216C -:1047B000C2E71C980291019200900121D0E74B00C2 -:1047C000D25A4300DA409707BF0F032F07D0109A41 -:1047D000002A0DD0012906D0042904D008E00227C0 -:1047E000F5E70127F3E7012801D0042800D10427C9 -:1047F000F07F01210843FD221040109A520010431F -:10480000F077A07882070320002A0BDAA0711099B4 -:10481000002914D16946087606AA31461998FEF790 -:104820009EFC0CE00225022F1AD0012F1AD0042F73 -:1048300023D00020A071F07F40084000F0772521B0 -:104840003046FCF7FEFD2046FF3007A921300AF074 -:1048500099FD002802D0022800D0FFDF002043E6A7 -:10486000A571D7E72046A5710D21243015F0CCFEA7 -:104870006078284360700420CCE7A171DFE7F7B5CA -:1048800086B00D460446FCF7A6FD070005D0387833 -:10489000272804D0082009B0F0BD0848FBE7B87FFE -:1048A0008007800F01280BD00021204609F07EF9F7 -:1048B000040008D106E0000034AC01000230000022 -:1048C0000121F2E7FFDFA679012E08D0002D0ED0DE -:1048D00008980CF0DBFF002815D01020DBE70898C3 -:1048E000002821D1002D08D0012D1DD11EE0022E5F -:1048F00005D0032E05D0FFDF28E00C2526E001259A -:1049000024E0022522E0022D02D0012D0AD00BE086 -:10491000032E09D12046002510222130089915F0D8 -:1049200014FE13E0022E01D00720B4E72046213008 -:1049300000251021064615F065FE0898002805D0D0 -:10494000062106F0DFFE314615F071FE6078022682 -:104950003043607025213846FCF773FD6078C1074D -:1049600012D040084000607068460670057120460D -:10497000213002906946FF300AF004FD022805D07C -:10498000002803D0FFDF01E020342570002082E7FB -:1049900030B587B00D460446FCF71DFD002812D047 -:1049A000807F8007800F01280FD00021204609F06A -:1049B000FDF804000ED028460CF068FF002806D051 -:1049C000102007B030BDFC48FBE70121EEE760781E -:1049D000400701D40820F4E7204629464130202230 -:1049E000054615F0B2FD607810210843607001079C -:1049F00010D5F721084060701420694608702046E1 -:104A0000FF30213001950AF0BDFC022802D00028B9 -:104A100000D0FFDF0020D4E770B594B00D46064605 -:104A2000FCF7D9FC002803D00178272945D102E002 -:104A3000E14814B070BD807F8007800F012806D048 -:104A40000021304609F0B2F8040003D101E0012151 -:104A5000F7E7FFDFA07902282FD1A078C0072CD07C -:104A6000002302220321304603F09EFC002826D0BA -:104A70000D2168464173FF34213402220C960894BC -:104A8000828207A8811F06AB009301910290002348 -:104A90000321304603F007FD002800D0FFDF04218A -:104AA0006846017408A805710DA903A80AF08BFCDB -:104AB000002800D0FFDF0020BBE70820B9E7112065 -:104AC000B7E770B5064686B014460D4608460CF0AA -:104AD000DDFE002804D120460CF0F5FE002802D0AF -:104AE000102006B070BDB54886420DD03046FCF7A8 -:104AF00072FC002806D04378811C22461846FCF739 -:104B000025FE06E0AC48ECE72046FDF7E6FB002872 -:104B1000E7D11021E01D0CF0CBFBE21D29466846D1 -:104B2000FEF7F6FB204610221730019915F00DFD17 -:104B30000020D6E7F7B58CB00446154600270D983F -:104B40000CF0E2FE002804D128460CF0DDFE00281F -:104B500002D010200FB0F0BD2046FCF73CFC060050 -:104B600003D03078272817D101E09348F2E7B07FCF -:104B70008007800F012806D00021204609F016F892 -:104B8000040003D101E00121F7E7FFDF607840076F -:104B900002D5A078800701D40820DBE7B07F80072A -:104BA000800F01281DD0616EA06E4978002901D0C8 -:104BB000002D19D04078002802D00D98002813D07D -:104BC000002D19D0EA1D06A8E168FEF7A1FB2846D2 -:104BD00010221730079915F08BFC002806D0042707 -:104BE0000AE0A16E606EE0E70720B3E720461022DE -:104BF000E91D313015F0A9FC0D98002805D0C11D24 -:104C000020461022213015F0A0FC607802252843B0 -:104C1000607025213046FCF714FC6078C10714D081 -:104C200040084000607068460570077120462130DA -:104C30000290103003906946EF300AF0A3FB02287F -:104C400005D0002803D0FFDF01E0203427700020CA -:104C500080E7F8B515460E460746FCF7BCFB040096 -:104C600004D02078222803D00820F8BD5248F8BD8F -:104C7000A07F8007800F022802D04F48C01CF8BDDB -:104C800030460CF003FE002804D128460CF0FEFD4F -:104C9000002801D01020F8BD00953288B31C2146B1 -:104CA0003846FEF74CFB112819D00028F3D1E17FDC -:104CB0002A7C490892074900D20F1143E177FD226F -:104CC00011402A7CD207920F1143E177297C8A0890 -:104CD00020210A55A17F4906490EA177F8BDA17F81 -:104CE0000907FBD420460822B11C363015F02DFCF4 -:104CF0003088A086204610222946233015F025FC56 -:104D0000E07FFB210840297C8907C90F89000843FF -:104D1000E077F7210840297CC907090F0843E077AD -:104D2000287C810821200155A07F08210843A07715 -:104D30000020CFE770B594B00D460646002B01D099 -:104D4000072076E6FCF747FB040007D020782228EE -:104D500002D3A07F400603D408206AE6164868E61E -:104D6000002D1CD02D216846017046801022294656 -:104D700001A815F0EAFBE07F297C40088907400084 -:104D8000C90F0843E077FD210840297CC907890F36 -:104D90000843E077287C81082020015503E02E217C -:104DA00068460170468009A9684606F05BFCA17F51 -:104DB000BF221140A1773CE602300000FFFF000057 -:104DC00070B50D46FCF707FB040006D028460CF032 -:104DD0007AFD002803D0102070BD0B4870BD294615 -:104DE0002046FEF751FA002070BD05E00278401C15 -:104DF000002A01D0002070470A46491E89B2002AC5 -:104E0000F4D10120704700000230000070B50D465B -:104E1000007804991446042803D005282DD0FFDF1C -:104E200070BDA88B062250430E30188033200880B6 -:104E3000002CF5D0A88BA081002611E0A87F0128C6 -:104E400012D012207043411906227243088C1219A5 -:104E5000D0811020223110320AF05BFB761CB6B2F2 -:104E6000A089B042EAD870BDB00041190622724351 -:104E7000088C1219D0810220ECE7A88B1222504333 -:104E80001030188034200880A87F012808D002281C -:104E900006D0FFDF002CE6D0A88BA081002612E010 -:104EA000A073F7E7A87F012811D0304612214843AC -:104EB00041190A8C0019028210221230223115F099 -:104EC00044FB761CB6B2A089B042EBD870BDB000EE -:104ED00041191222088C72431219108202202231C9 -:104EE00012320AF016FBECE7F8B500780C461646CD -:104EF00020340E36069F022805D0032832D006281B -:104F00007ED0FFDFF8BDCD8B0A2068430E301880BD -:104F100031203880002AF5D0087F9581801FC7B2E4 -:104F20001AE020886168308048780A7800021043CF -:104F3000F080C8788A78000210433081B21C38466D -:104F4000091D0AF0E6FA002F01D0002802D0002047 -:104F50003071708008340A3628466D1EADB20028C4 -:104F6000DFD1F8BDCD8B0A2068430E301880322087 -:104F70003880002AF5D0087F9581401FC7B243E0F2 -:104F8000616822880878F2803279C307520852009B -:104F9000DB0F1A43FD231A408307DB0F5B001A4324 -:104FA000FB231A404307DB0F9B001A43F7231A40E9 -:104FB0000307DB0FDB001A43EF231A40C306DB0FA6 -:104FC0001B011A43DF231A408306DB0F5B011A43E0 -:104FD000BF231A404306DB0F9B011A433271C009FD -:104FE00070718A784B781002184330813246384607 -:104FF000C91C0AF08EFA002804D00020B07000E02E -:1050000008E0308008340A3628466D1EADB200280C -:10501000B6D1F8BD087FCD8B801E86B230460830F1 -:1050200068431030188035203880002AF1D01746A8 -:1050300095811037E800D681C01900900DE02088D6 -:1050400038800098786032466168009815F07DFAE3 -:105050000098083480190837009028466D1EADB2BC -:105060000028ECD1F8BDFFB5099E1D460C46002A6C -:1050700005D0607EFF300130D080E08B1081009839 -:105080000078030015F022FD0C900715212A333C0F -:105090004A5F68686890087F1746082802D003288E -:1050A00000D0FFDF0E20288030200AE00020B881E9 -:1050B000FFBD087F1746042800D0FFDF0E202880A0 -:1050C00031203080002FF1D1FFBD087F1746042822 -:1050D00000D0FFDF0E2028803220F2E7087F17463D -:1050E000022800D0FFDF0E2028803320E9E7087F68 -:1050F0001746022800D0FFDF102028803420E0E788 -:10510000087F1746042800D0FFDF102028803520B4 -:105110003080002FD8D00020B88112E0207F1746C1 -:10512000052802D0062800D0FFDF12202880362074 -:105130003080002FC8D0E08BB881002038820098E2 -:105140004088F881FFBD087F1746072800D0FFDFA1 -:105150000E2028803720B4E71420288038201746F6 -:105160003080002AEED0E08BB88100207882009851 -:105170000078092805D00A2809D00B280DD0FFDFB8 -:10518000FFBD087F0C2800D0FFDF01200AE0087F68 -:105190000D2800D0FFDF042004E0087F0E2800D097 -:1051A000FFDF0520B873FFBDFFDFFFBD70B50C4604 -:1051B0000546FCF710F9002804D00078222803D215 -:1051C000082070BDFA4870BD0521284608F0EEFCA5 -:1051D0002060002801D0002070BD032070BDFFB505 -:1051E00085B00D4607461720694688810898022633 -:1051F0001446002805D108A93846FFF7D7FF002834 -:1052000042D1002D0DD068468289002331463846B0 -:1052100003F0CAF8002842D00898007800283ED150 -:1052200005E02078092823D00F282FD0FFDF0020A9 -:1052300004A9019003460091029068468289314694 -:10524000384603F030F900281ED10898A760801D69 -:10525000606003A92046049A04F0E7F900282BD0E7 -:10526000030015F033FC071E1C27272520222700EA -:1052700068460726828900233146384603F094F8B1 -:105280000028D4D1CA48801C09B0F0BD6846828984 -:1052900000233146384603F087F80028C7D1112093 -:1052A000F2E70020F0E70820EEE7C148401CEBE7FA -:1052B0000720E9E70320E7E7049800906846838920 -:1052C00004223146384603F0C5F90028DCD1002D10 -:1052D000DAD008990D70D7E730B587B01D460C4677 -:1052E000002A11D0042369460B7013888B815288E1 -:1052F000CA81A2788A7422880A8200236A462946D3 -:10530000FFF76DFF07B030BD1020FBE7F3B581B0AC -:1053100001980C4600780826030015F0D7FB123BD5 -:1053200037371511390A0A0A0A0A0A0A0A0A0A0A42 -:105330000A3B002C00D1FFDF6078304360702AE028 -:10534000002CF9D1FFDFF7E701980521808887B2AB -:10535000384608F02BFC0546002C00D0FFDF002D5E -:1053600000D1FFDF3946A81D04F056F902F0FBFA20 -:10537000040006D0607830436070678002F0D1FA94 -:105380000BE013213846FDF7DBF911E0FFDF02E007 -:10539000FFDF00E0FFDF002C0AD06078000707D5B0 -:1053A000932020702046582218300199FBF7EEFE1A -:1053B0000020FEBD10B500200870881D04F029F9FA -:1053C00010BD0A4610B50146901D04F02DF910BD20 -:1053D00070B50546052108F0E9FB040000D1FFDFA8 -:1053E0002946A01D04F018F970BDF7B586B00C462B -:1053F000054600206946088188806F880521384667 -:1054000008F0D4FB060000D1FFDF002C03D0A780FA -:105410000020E0802081297E20461230C91E1427FA -:1054200000900B0015F052FB0FFEF5F25E09A86725 -:105430006C7D2BB1C6E19090F2003078012800D04D -:10544000FFDFA88B6A46C1000E31918030211181A7 -:10545000002C13D0A08100200DE0C1003279091981 -:105460000A747288CA8182005319DA8B4A821A8CB4 -:10547000401C8A8280B2A1898142EED8E4E0307873 -:10548000012800D0FFDFE88B6A46C1000E31918011 -:1054900030211181297F091FC9B20491002CEDD060 -:1054A000A08100271AE0F800021940190092039029 -:1054B000416A0E3204980AF02CF8002804D00099B2 -:1054C000002008740099C88103987F1C018C009803 -:1054D000BFB241820398418C00988182A089B84272 -:1054E000E1D8B1E002A8009001AB2246294630463F -:1054F000FFF78CFCA8E03078072805D0FFDF03E039 -:105500003078072800D0FFDFE88B694612308880AA -:1055100036200881002C37D0A98BA1817188E181C8 -:1055200022E03078082800D0FFDFA88B6A460146C9 -:105530000E30908037201081002C25D0A18120468C -:10554000AA8B0E30296A4DE0E88B6946123080B292 -:10555000392288800A81002C72D0A98BA181287EF3 -:10556000102807D00221A173E98B2182EA8B296AD6 -:10557000009837E00121F6E702A8009001AB22462F -:1055800029463046FFF7B0FC5EE03078092800D0AD -:10559000FFDF694638208F800881002C54D0A98B0A -:1055A000A1810020608220820120A0734CE00000D5 -:1055B0000230000030780A2800D0FFDF288C6946CE -:1055C0001430888038200881002C3DD00421A1733C -:1055D000A98BA181E98B2182298C618220462A8CAA -:1055E0001430696A14F0B1FF2EE030780B2800D037 -:1055F000FFDF694638208F800881002C24D00521E8 -:10560000A1730020A081208260821DE01BE000E0E9 -:1056100008E002A8009001AB224629463046FFF779 -:1056200022FD11E00D2069463A2288800A81002C73 -:1056300006D00120E08000202081207304E0FFE7F5 -:105640000899088015E0FFDF68460899808808807F -:10565000002C0ED0684600892080684680886080D3 -:10566000287E032805D0102803D0112801D000205F -:105670003070002008E6F7B556880F4682B0154610 -:105680000521304608F092FA040000D1FFDFA41D86 -:1056900033462A4639460094029804F04CF905B086 -:1056A000F0BDF7B58CB00D46144607A90C98FFF76E -:1056B0007DFD002812D1884E0127002C10D0032137 -:1056C000684601701021818208A802460690204693 -:1056D00005A909F044FF00280CD007200FB0F0BD49 -:1056E0000821684601708581C68105218774C90239 -:1056F00001820BE00798A1780171218841806846FA -:1057000005218774C90201828581C6810246012173 -:10571000079B0C98FFF763FDE0E708B501236A4695 -:1057200093706E4B13800A4602236946FFF7D4FD3F -:1057300008BD08B501236A469370684B5B1C138053 -:105740000A4603236946FFF7C7FD08BD00B587B0C9 -:1057500000290CD002236A4613700B889381498874 -:10576000D18100230421FFF73AFD07B000BD1020CE -:10577000FBE710B5002903D00623FFF7ADFD10BDF0 -:10578000072010BD70B588B00D461446064607A91F -:10579000FFF70CFD00280DD1002C0DD00621684626 -:1057A00001708581C481079B02465C8007213046D9 -:1057B000FFF715FD08B070BD0521684601708581B1 -:1057C000F1E710B588B000290BD007246B461C7098 -:1057D0009A81049100236A460821FFF700FD08B072 -:1057E00010BD1020FBE770B50024172288B00029F7 -:1057F00014D00D782B0015F069F90623050519045E -:105800001B231522D21E93B2CA88002A02D08E68AA -:10581000002E03D09A4203D90C20CBE71020C9E711 -:10582000042D05D08A88002A0AD101E00620C1E7AC -:10583000012D11D0022D05D0042D18D0052D23D017 -:105840000720B7E709236A4613704B889381CB88FA -:10585000D381896804911DE00C236A4613704B883C -:105860009381CB88D38189680924049112E00D23A8 -:105870006A4613704B8893818B88D381CB881382BF -:1058800089680A24059105E00E236A461370497859 -:1058900011730B2400232146FFF7A1FC8AE700B512 -:1058A00087B00F236A461370918100231946FFF7D2 -:1058B00096FC5AE700B587B000290BD002236A4650 -:1058C00013700B8893814988D18100230521FFF74C -:1058D00086FC4AE7102048E7FFFF0000022800008E -:1058E000002803D08178012939D101E010207047C8 -:1058F0000188FE4A881A914233D01BDCFC4A881A80 -:1059000091422ED00BDC00292BD00320C002081AB4 -:1059100027D0012825D001210903401A07E00128DA -:105920001FD002281DD0FF281BD0FF3801380028C7 -:1059300015D116E0FF220132811A904211D008DC05 -:1059400001280ED002280CD0FE280AD0FF2806D14C -:1059500007E0012905D0022903D0032901D0002046 -:1059600070470F20704700B50B2826D009DC0300D4 -:1059700015F0ACF80B1D2125251B25292325271FF4 -:105980001B0011281BD008DC0C2816D00D281CD0B9 -:105990000F2814D0102808D10FE0822809D08428BD -:1059A0000FD085280FD0872811D0032000BD0020FC -:1059B00000BD052000BDCF4800BD072000BD0F2061 -:1059C00000BD042000BD062000BD0C2000BD0D2040 -:1059D000800200BD00B5030015F078F80705070543 -:1059E0000D0D090B0D00002000BD112000BD07208A -:1059F00000BD082000BD032000BD00780207120F83 -:105A000004D0012A05D0022A0CD110E0000909D1E6 -:105A10000AE00009012807D0022805D0032803D096 -:105A2000042801D007207047087000207047062026 -:105A3000704700B5030015F049F8050406080A0C84 -:105A40001000002006E0112004E0212002E03120B7 -:105A500000E041200870002000BD072000BD38B5DF -:105A60000C4605004DD06946FFF7C7FF00281FD13F -:105A7000694660780978C0084907C000490F0843A3 -:105A800060706946681CFFF7B8FF002810D1607885 -:105A9000C7210840694609784907890E08436070A4 -:105AA000A9784907890F012903D0022905D00720C9 -:105AB00038BD2178DF22114002E0217820221143F5 -:105AC0002170410707D0BF210840A9780907C90FF5 -:105AD00089010843607060788106490F0AD0A9786F -:105AE0004006C906C90F400EC90108436070800610 -:105AF000400F02D16078400603D52078402108434A -:105B00002070002038BD70B504460020088015467E -:105B10006068FFF7A4FF002815D12189A089814280 -:105B200010D861688978C90708D0012149028842E4 -:105B300008D8491C14F083FD298009E0FF21FF31BA -:105B4000884201D90C2070BDFF30FF30033028801F -:105B5000002070BD10B5137804785B08E4075B0083 -:105B6000E40F23431370FD2423400478A407E40FBB -:105B7000640023431370FB24234004786407E40F7C -:105B8000A40023431370F724234004782407E40F70 -:105B9000E40023431370EF2423400478E406E40F69 -:105BA000240123431370DF2423400478A406E40F68 -:105BB0006401234313700078BF244006C00F2340C4 -:105BC000800103431370002906D00878C10701D172 -:105BD000800701D5012000E00020C0015906490ED0 -:105BE0000843107010BD10B54A784378D208D2002F -:105BF0005C0702D05B075B0F05E09B065C0F01D0E2 -:105C00005B0F00E001231A434A70C72340781A4013 -:105C100083065C0F01D0580F05E0430702D0400710 -:105C2000400F00E00120C00002434A7010BDF3B5F0 -:105C300093B00D000FD0139800280FD012212846E2 -:105C400014F0E0FC03AAFF21012005F07EFB0024F4 -:105C5000264637467BE0102015B0F0BD0720FBE755 -:105C60006846807D01280BD16846818A0520C002E4 -:105C7000081A0AD001280AD002280CD003280CD018 -:105C8000042C0ED0052C0FD10DE0012400E00224DD -:105C90006846468A08E0032406E068460424478AEA -:105CA00002E0052400E006246846418A13988142F8 -:105CB0004DD12C74002E48D00DAA0EA907200292B7 -:105CC0000191009010230022FF21304605F0DCFBFB -:105CD00000282AD16846808E2A46C0B20EA909F053 -:105CE00018FC002821D1AE81002F05E00229000018 -:105CF000012800000330000027D00DA9072008AEBE -:105D000002910090132300220196FF21384605F0EE -:105D1000BBFB002809D16846808EF11CC01EC0B2B2 -:105D20002A1D09F0F6FB002801D0032094E708A8FB -:105D30008178427808021043E881062C05D1684634 -:105D4000807DA8726846808A2881002084E703A8A5 -:105D500005F004FB002883D0FFF705FE7CE7F0B5D3 -:105D60008BB00E4605461C461746142103A814F0B6 -:105D70004BFC0120694608730874119A4A748F829B -:105D8000002C0AD0A178C90707D069468875E08839 -:105D90004883A0880883A068079001F0E4FD040010 -:105DA00024D06580172268460284002009A900914A -:105DB0000190034602900146284602F074FB002839 -:105DC00012D16846083670C008AA099B109904F0E1 -:105DD000AEFD06466078000701D501F0A2FD002E59 -:105DE0000AD03046FFF7F6FD0BB0F0BD1321284670 -:105DF000FCF7A6FC0320F7E7099800906846038C9F -:105E000004220021284602F025FCEDE770B5064685 -:105E10008AB000200D4607900590069003A90490D3 -:105E2000072402460291019010230094294630462F -:105E300005F02AFB00280DD108A804A900910290C2 -:105E400001946846838900222946304605F03DF9D1 -:105E5000002801D0FFF787FD0AB070BD10B504F02F -:105E6000C2FF10BDFEB500260546029600780C461E -:105E70000827030014F02AFE0CC5070F33D6686804 -:105E800087A1C1A6B2C5002C00D0FFDF288980B24F -:105E900001F0F5FEB6E0A888042180B2009007F07A -:105EA00085FE0190002C00D0FFDF0198002800D172 -:105EB000FFDF01980099083004F057F901F053FD15 -:105EC000040007D06078384360700098608001F06B -:105ED00028FD99E013210098FCF732FCA2E0002C89 -:105EE00000D1FFDF6088042107F060FE00900028E9 -:105EF00000D1FFDF0099002008802A79944620E035 -:105F0000C3005B199B6800936B461B781A0708D582 -:105F1000DB0606D56046C20050194038C08F0880A5 -:105F200008E06B465B785B0609D50871C200501922 -:105F3000C0884880607838436070022662E0401C68 -:105F4000C0B28445DCD85DE0E88869460880002C52 -:105F500000D1FFDF68464078C00904D028780628C1 -:105F600005D005282CD06078384360704AE06088FE -:105F7000042107F01BFE060000D1FFDF0020307176 -:105F8000A88870801CE0002C00D1FFDF608804210D -:105F900007F00CFE0090002800D1FFDF00980830C9 -:105FA00004F073FF0121484002D1E879C00929D0EB -:105FB000009861880226C180D5E7002C00D1FFDF60 -:105FC0000226D0E7002C00D1FFDF022661880122E3 -:105FD000204601F09AFE01200290C4E7A889002C17 -:105FE00087B200D0FFDF6868009028896946888002 -:105FF0000122384601F09DFE04E0002CB3D1FFDF02 -:10600000B1E7FFDF002C0DD0607800070AD50298B9 -:10601000002807D1842020702046582229461830B5 -:10602000FBF7B4F83046FEBD3EB50C0009D002AB1C -:106030006A46002105F08AFA002804D0FFF793FC95 -:106040003EBD10203EBD0321204614F0DBFA684619 -:10605000407801A94007400FFFF7EBFC00280BD167 -:106060006846007920706846407801A98006400F94 -:10607000FFF7DFFC002801D003203EBD6846007911 -:106080006070A278EF20024068464078C0090001A5 -:106090000243A270F7200240684640784006C00FD5 -:1060A000C0000243A270F9200240684600788006D2 -:1060B00001D5022000E00120400069460243097A30 -:1060C00050084000C907C90F0843A07000203EBD1A -:1060D00070B50646144608460D46204307D0002DED -:1060E00010D028460BF005FC002812D101E0072053 -:1060F00070BD2946304605F082FA002802D0FFF72D -:1061000032FC70BD002C0BD020460BF0F2FB0028B7 -:1061100001D0102070BD21463046FFF785FF70BDCD -:10612000002070BDF7B50C460546007E22468AB0B9 -:106130000A320092921E05920027811E0C323E46C2 -:1061400003920B0014F0C2FC08FC05FB34347EBE45 -:10615000FDFB6888042107F029FD0190002800D18B -:10616000FFDF01980088002802D052270726EFE0C1 -:1061700051271026002C7DD06888A0800120A071B6 -:106180000198002200790099C0004019C08BFFF7E8 -:106190009FFF00286FD101980079C0004019C08B83 -:1061A000208101980079C0004019408CE081EBE02B -:1061B000698C0191062821D1E87FC0091ED00846CC -:1061C0001430512786B2002CD5D0A88B002200991C -:1061D000FFF77EFF002873D16888A0800220A0719D -:1061E000A88B20810120A073288C208201986082D6 -:1061F000696A019A039814F0A8F9C5E008461230BC -:10620000502786B2002CB6D0A88B00220599FFF744 -:106210005FFF002854D16888A080A88BE080287E8A -:1062200006280DD002202073288CE081E87FC00969 -:106230006073019820822046696A1230019ADAE779 -:106240000120F0E76888042107F0B0FC0290688C18 -:1062500005900298002800D1FFDF0298083004F072 -:1062600014FE0121484002D1E87FC00927D00598DB -:10627000143001E07AE023E0512786B2002C76D07A -:106280006888A080A88B00220099FFF721FF0028D2 -:1062900016D10220A071A88B20810420A073288C25 -:1062A000208205986082696A059A039814F04DF976 -:1062B0000299002008710298A98B418064E00320B4 -:1062C0000DB0F0BD6888FBF786F80090688804215F -:1062D00007F06CFC03900098002800D1FFDF0398C2 -:1062E000002800D1FFDF0398FE49C088884202D011 -:1062F0005127142601E050271226002C37D0688839 -:10630000A080502F06D00220A071287F059901F0AF -:106310008BF939E0287FA11D01F086F90098002152 -:10632000203080780090019103980B46428868885D -:106330000399FFF714FD0028C2D125E001E022E017 -:1063400018E0E949A88BC988814206D1542706265E -:10635000002C0CD06888A08016E053270826002C5B -:1063600005D06888A080A88BE0800DE0FFE70C983E -:1063700006800FE055270726002CF8D0A88BA080B8 -:106380000020A07100E0FFDF0C98002C068001D0F7 -:1063900027806680002093E7D3490020087070476B -:1063A00030B587B00C4607F0CEFB0546FF2800D17C -:1063B000FFDF0020208020716080401EE0802046AA -:1063C0002946083003F0C4FE01AA2946012004F042 -:1063D000BCFF102415E06846C079000711D5684657 -:1063E00040892946FFF712FD6846C179FF23214302 -:1063F000C1710170017A417040892946009A05F007 -:10640000CDF801A804F0AAFF0028E4D007B030BD01 -:106410000A46014610B51046083003F0AEFE10BD26 -:1064200070B50546042107F0C1FB040000D1FFDF71 -:1064300020462946083003F098FE70BDF3B58BB0B6 -:106440000D460B98FAF7C7FF060004D030782228D3 -:1064500003D2082034E7A54832E704210B9807F05F -:10646000A5FB0746002D02D0A88800280ED00121E8 -:10647000684601730221002401744474002D07D082 -:10648000A888694608832868059003E0092017E773 -:106490000483059401F067FA050028D00B98688002 -:1064A00017226846028409A8019400230090194627 -:1064B00002940B9801F0F7FF0028CBD13846083042 -:1064C0000B990290203600950191B17808AA03A893 -:1064D000099B04F02CFA04466878000701D501F006 -:1064E00020FA002C09D02046FFF774FAE8E61321C1 -:1064F0000B98FCF725F90320E2E60998009068461E -:10650000038C042200210B9802F0A4F80021C94357 -:10651000F980D5E6FFB585B00E9E77883846FAF744 -:106520005AFF05460421384607F040FB0446002D7B -:1065300000D1FFDF002C00D1FFDF08340898694646 -:106540000394C1C105A80DC82035A97803F044FE05 -:1065500009B0F0BDF0B50446002099B007460E9092 -:1065600010A887810D46078187805F4968468F8024 -:1065700007858784878707868785087816460128D8 -:1065800008D0022806D0032804D0042802D008200E -:1065900019B0F0BD20460BF079F9002856D12846F5 -:1065A0000BF074F9002851D160680BF0ADF90028A8 -:1065B0004CD1606800280AD060892189884203D8BC -:1065C00001225202914201D90C20E1E70E9015AA56 -:1065D0000FA92846FFF797FA0028D9D16868807874 -:1065E0004007800F022809D108A8407F8006400F8D -:1065F00004D028690BF07DF9002827D10AA9206969 -:10660000FFF72DFA0028C3D1206900280BD060784D -:10661000800708A8407A03D58006400F6FD002E0BB -:106620008006400F6BD108A8007A800610D508A814 -:10663000407A8006400F04D060680BF05AF90028B9 -:1066400004D160680BF060F9002801D010209FE7AA -:106650000BA96069FFF703FA002899D16069002847 -:1066600008D008A8407B4107490F012947D180067F -:10667000400F44D00CA9A069FFF7F1F9002887D199 -:1066800008A8007B80063AD408A8007C800636D48F -:10669000A069002808D008A8407C4107490F0129BB -:1066A0002DD18006400F2AD0E068002804D0007861 -:1066B000002824D01C2822D204AA611C2046FFF7FF -:1066C00049FA08A840790127C108C900491C08A84F -:1066D0004171684687730649818104AA033217A96C -:1066E000286808E0FFFF0000580300200230000087 -:1066F0000328000003E008F032FF002801D0072043 -:1067000046E710A8007F14A9C01CC2B200200D9259 -:10671000FF320090034602910190FF3203A803323A -:10672000099904F06AFD002852D110A9088A109036 -:106730002A892969FD4801910092029010A98A8A4C -:106740006B8928680F9904F058FD01007ED12078EC -:10675000C10601D4800626D5002010A908836069EF -:10676000002809D10BA90FA8FFF73DFA08A9487B1B -:10677000C008C000401C487308A9087BC821084312 -:1067800008A9087369468F73E948888112AA16A977 -:1067900002206D4607C50023E64A03A80B9904F0C2 -:1067A0002CFD0100D2D1E1480025001F81886846F8 -:1067B0004174090A8174072104A86A4623C210A8FB -:1067C0002A46FF21008A0D9B04F07FFC002802D09E -:1067D000FFF7C9F8DCE66846007CC0092ED06846A1 -:1067E000858408A840790023C108C90008A8491C6D -:1067F000417168462921877309028181858608A82D -:10680000007DCC4A410860784900C007C00F0143B1 -:1068100008A80175FD20014060788007C00F400086 -:10682000014308A801750DA902200191009002956D -:1068300003A8099904F0E1FC010007D16068002871 -:1068400029D0206900280ED10AA900E080E00FA815 -:10685000FFF7C9F96078800705D408A9487AC721ED -:10686000084008A94872B24968468773491E818169 -:10687000B0492089891E13F0E2FE0A4661680E982D -:1068800011AB009002930191002303A80A9904F030 -:10689000B4FC01005CD12078C00727D0684685860B -:1068A000A069002809D10CA90FA8FFF79CF908A935 -:1068B000487CC008C000401C487408A8017C4020E7 -:1068C000014308A801749A4968468773491C81816D -:1068D00013AA0DA902200292019100900023954A6B -:1068E00003A80C9904F089FC010031D1E06800286C -:1068F00032D06846858408A840790023C108C900C1 -:1069000008A8491C41718A4968468773891C81819E -:10691000E16808A80A78027549784175E068412263 -:1069200041886846C186E068D200017908A80176EE -:10693000E0686C46C18808A84176090A81760DA9ED -:10694000072023C403A8099904F057FC010003D0D1 -:10695000109800F07DFE1BE674480321001F0170B3 -:10696000002E0AD08088308010A88088708010A8FF -:106970000089B08010A88089F080002008E630B53A -:1069800001248BB015460B46012802D002281AD1EB -:1069900004E0684605218473C90202E0684666493E -:1069A00084738181002B11D000210182407C06AAD2 -:1069B000C108C9006846491C417405A9184608F079 -:1069C000CEFD002804D007200BB030BD1020FBE71F -:1069D0006A46127D55480092801E06A9FF32019139 -:1069E0000290FF32002303A80332049904F005FC4F -:1069F000002802D0FEF7B7FFE6E74C48001F002D45 -:106A000001D04188298004700020DDE770B592B084 -:106A10000446012608A8867048496846018410AAE1 -:106A200008A93046FFF7ABFF002840D120783F4D42 -:106A3000C00700242D1F00283BD01C21684613F0FE -:106A4000E3FD68460178202001436846017008A8EC -:106A500086703B496846018411940794817FF92030 -:106A600001406846891C817700200146684601770D -:106A7000002001466846417704218185C48501864E -:106A800007A80A9011A80D9008A809900EAA09A9B4 -:106A90006846FFF75FFD002809D16846008FE8804F -:106AA0006846808F2881401C68812C70002012B0BD -:106AB00070BDEC802C8110A80088F4E7F7B51B4965 -:106AC0000026091F0A789EB0012A04D0022A02D0AB -:106AD000082021B0F0BD4A88824201D00620F8E7A4 -:106AE0001F98824201D10720F3E7012218A812491A -:106AF0008271491C10A8818400210182407CC30856 -:106B0000DB0010A85B1C4374684682810D4AC28179 -:106B100018A8817310A881851BA804906846C282BA -:106B20000691FF21017503A80EE000005C03002020 -:106B300002290000030200000128000001180000E3 -:106B4000052A0000FFFF000004F02AFC002425466F -:106B5000274608AA072103A804F025FC002810D026 -:106B600082286FD1002C6FD0002D6DD010A88480AA -:106B7000C5800021017518A8807C11AC012865D062 -:106B80006DE008A88079002F21D0012857D16846F0 -:106B9000818CFE4881421CD113AA0DA907206B46A7 -:106BA00007C36846408C10230022FF2104F06CFCD0 -:106BB000002868D110A88089042801D006284CD16B -:106BC0006846818E1F98814239D10F2081E70128C4 -:106BD00035D16846808C0521C902884202D0491C03 -:106BE00088422CD1EA4841886846408C814201D1D4 -:106BF000012700E00027002C01D0002D10D01F99A4 -:106C000088421CD113AB0DAA07216E460EC604465E -:106C100010230022FF2104F037FC002833D101E0CB -:106C200035460CE010A88089022801D0102814D124 -:106C3000C0B21CAA0DA908F06CFC00280DD1684652 -:106C4000468C86E71FE0FFE7052042E715A91CA850 -:106C5000221D08F084FC002801D0032039E710A889 -:106C6000007D0023001DC2B210A80275209800927A -:106C70000290019419A8149904F0BFFA002802D1D7 -:106C8000C34A02211170FEF76EFE22E710B50B46D3 -:106C9000401E86B084B203AA00211846FEF75AFFB0 -:106CA00004AA072103A80292019100900123002267 -:106CB000FF21204604F009FA04466846008A0128AC -:106CC00000D0FFDF2046FEF74EFE06B010BDF0B547 -:106CD000AF4F0446387887B00E46032804D0042806 -:106CE00002D0082007B0F0BD04AA03A92046FEF791 -:106CF0000AFF0500F6D1606880784007800F0228FF -:106D00000BD16846407B8006400F06D020690AF010 -:106D1000F0FD002801D01020E4E7208905AA6B4689 -:106D2000216907C369460A8A63892068039904F0C8 -:106D300064FA002802D0FEF716FED3E7002E02D038 -:106D40006846808A3080042038702846CAE738B503 -:106D50000C00054609D000236A46FF2104F0F6FB2B -:106D6000002804D0FEF7FFFD38BD102038BD69466D -:106D70002046FEF774FE0028F8D1A078FF21C30753 -:106D8000DB0F2846009A04F009FCEBE77FB51446B8 -:106D90000722019203AD029500930A462388FF2142 -:106DA00004F093F9694689892180FEF7DCFD04B07F -:106DB00070BDF0B591B00746002568460C46858643 -:106DC00000291CD0E068002806D0A068002816D052 -:106DD00001886A46918605803846FAF7FCFA002851 -:106DE00010D0007822286CD3384606F0ACFE009014 -:106DF0000421384606F0DAFE060006D104E0102031 -:106E000011B0F0BD6348FBE7FFDFA078012803D095 -:106E1000022801D00720F3E72088002808D0401C72 -:106E200080B203AA009904F090FA002829D102E068 -:106E30005848401CE4E703A804F090FA69468A7DAC -:106E40000D218902012A09D16A46928A524B9A423F -:106E500004D1822802D0002813D101E00846CFE7F0 -:106E6000E068002814D00DA9072202910192009039 -:106E700069468B8EA2882088FF2104F026F900281D -:106E800002D0FEF770FDBBE76846A168808E0880DF -:106E90006846C07BC00601D54048B1E70798002886 -:106EA00003D06846008B022801D00320A8E71722F0 -:106EB000694607980A87A1780078012903D08007DE -:106EC00011D408209CE7C007FBD0002307213846D7 -:106ED00001F06AFA002803D007200F90022005E095 -:106EE0002C48801C8CE701200F90032008A9087013 -:106EF00021886846818410A8009001950295684613 -:106F0000028F002338460F9901F0CDFA002891D165 -:106F100008360197029600950EAA072108A8109B33 -:106F200003F005FD002802D0FEF754FD68E7109835 -:106F300000906846038F042238460F9901F08AFBBF -:106F40005EE770B5064615460C460846FEF7C8FCD7 -:106F5000002804D12A4621463046FFF710FD70BDB7 -:106F600010B5FFF7ABFD10BD70B51E4614460D0001 -:106F700016D0002C14D06168002911D0002811D03F -:106F80000349498881420DD0072070BD02280000C6 -:106F900058030020023000000229000001340000E4 -:106FA0001020F2E72068FEF79BFC0028EDD1324666 -:106FB00021462846FFF7CEFAE7E770B515460C00E4 -:106FC00007D0002807D0FE498988814203D00720D6 -:106FD000DBE71020D9E72068FEF782FC0028D4D137 -:106FE00029462046FFF773FECFE770B5054686B009 -:106FF0000E46144610460AF066FC002861D160680F -:107000000AF082FC00285CD1EE48854204D0284674 -:10701000FAF7E1F9002814D0284606F094FD054659 -:10702000304601A9FEF703FE00280BD16846017D1A -:107030000F200B0013F04AFD0808060606060A0A90 -:107040000832E14806B0A0E70320FBE769468979EA -:10705000012907D1694689880322D202891AF1D011 -:107060000129EFD06946897A012906D16946098943 -:1070700015225202891A0529E4D96946897B01291A -:107080000DD16946898929221202891ADAD002298A -:10709000D8D00329D6D0042901D1D3E7FFDF606817 -:1070A000002810D100236A462946304604F04EFAE3 -:1070B000002802D0FEF757FCC4E768460078800637 -:1070C00001D41020BEE76188224630466368FFF78E -:1070D0005DFEB7E7F7B5074686B0144610460AF0DE -:1070E000F2FB002802D0102009B0F0BD384606F0AF -:1070F0002AFDB44E0546B74201D0FF2D0AD0014605 -:10710000002303AA079804F021FA002804D0FEF710 -:107110002AFCE9E7AC48E7E76846007BC00601D5F2 -:10712000AA48E1E704A907200291002700900197EF -:10713000628833462946079804F0A6F9060013D161 -:1071400060680AF0C0FB00280BD160680721029735 -:1071500000910190238862882946079804F094F9E9 -:1071600006466846008A20803046D0E710B50029E0 -:1071700007D0934B0A881B899A4202D89248401C38 -:1071800010BDFFF716FE10BD10B586B004236C4687 -:10719000A3828B4BDC88002C07D01B898B4201D249 -:1071A000914204D98848401C8FE506208DE56B4646 -:1071B00019825A820021009101911C80022199704C -:1071C00005A9029104A903916946FFF7F2FD7CE548 -:1071D000F3B583B08126684606700F4608460AF06C -:1071E00055FB00283ED10398FAF7F5F801900028E6 -:1071F00012D00078222827D300231722194603989B -:1072000001F0D2F800280AD00421039806F0CEFC41 -:107210000290002806D104E06B4805B0F0BD1120B3 -:10722000FBE7FFDF0298083002F0BEFF0546387822 -:10723000012803D0022804D00720EEE7A80703D5D1 -:1072400004E03420054201D10820E6E7B8793C1D6E -:10725000C00709D0E088002806D0A0680AF016FB15 -:10726000002801D01020D8E720883F78002100288E -:1072700011D0C21FFA3A0721112A1ED2130013F0AF -:1072800025FC110F0D130F240F1824160F0F2424A3 -:1072900024240F240F006846017018E0022F14D137 -:1072A000684606700846B8E7012FF9D00DE0EA06F7 -:1072B00000E0AA06002AF3DA07E00246FF3A813A24 -:1072C0001F2A02D97D3A022AEAD869460870684620 -:1072D000017801982346203080780090029801912F -:1072E000428801460398FEF73AFD96E7FFB58BB05A -:1072F000002001901F4615460C460E460B98FAF7E3 -:107300006AF8002805D00078222804D208200FB09F -:10731000F0BD2D48FBE7B80801D00720F7E7032FA1 -:1073200000D100270B9806F00EFC0890002C1FD00F -:10733000022D7DD320460AF0E7FA002806D1601915 -:107340000090401E0AF0E0FA002801D01020DEE78D -:10735000AD1EAAB221461B4804F0FAF90146009876 -:107360001E38427F037F10021843814271D1ADB2B3 -:107370001348B90702D50189491C00E0012189B2EF -:107380000091F90701D0078900E00E4F03AA089980 -:10739000009803F0DAFF0DE0F078B17800020843BE -:1073A000102856D80199091D401880B20190A842B2 -:1073B0004FD82618002E6ED070783278010207E080 -:1073C00058030020FFFF00000230000001340000DD -:1073D000009811438142DFD35DE0C07B01075AD59D -:1073E000002C41D001996618091D89B20991F178E4 -:1073F000B378090219438C4610292AD809996144A7 -:10740000A94226D871783378090219438A4220D1DB -:10741000C00620D509990AAA072061180292009196 -:10742000019070783178000208436346002200E042 -:107430000FE0089903F049FE002802D0FEF793FA06 -:1074400065E7F078B178000208436946098D884203 -:1074500001D00B205BE7F078B1780002084309996E -:10746000401880B2019007E0C00605D51046089983 -:10747000FEF7CCFC0028E3D16946C87BEF21084029 -:107480006946C8730870087C4870488AFF23009AD0 -:10749000089904F083F803A803F060FF002803D1E3 -:1074A0006846428ABA4298D904210B9806F07EFBBE -:1074B000040000D1FFDF2288002A0CD0002507201D -:1074C000019500902B4621460B98FEF748FC0028BA -:1074D000B6D125801BE7002019E7F0B500248DB058 -:1074E0001F4616460D46002A1DD0B90802D00720B7 -:1074F0000DB0F0BD032F00D1002706F024FB08904B -:10750000FF2807D0002D10D028460AF0F2F90028F5 -:1075100009D101E05448EBE73188681E08180AF0E9 -:10752000E8F9002801D01020E2E75049B80701D55A -:10753000488900E00120FA0702D04989491E00E08D -:107540004B4903AA8FB2089903F0FFFE38E0694661 -:10755000C97B090734D509AB0721002202930091AA -:107560000192434B089903F08FFF002821D1002D91 -:1075700021D06A46928C3188A2182819121D914296 -:1075800034D369464A8A0270120A42708A8C827029 -:10759000120AC27009A90722001D009202910190EF -:1075A0006946488A8B8C0022089903F06DFF0028F9 -:1075B00001D003209CE76846808C2018001D84B20F -:1075C00003A803F0CBFE002804D0822806D0FEF7E3 -:1075D000CAF98DE76846408AB842B8D9002C07D06E -:1075E000002D10D03188A01C814203D20C207FE7EF -:1075F00005207DE7224629461D4804F0A9F82919EF -:107600000870000A4870A41C3480002070E710B590 -:1076100004460AF058F9002801D0102010BD134884 -:1076200040892080002010BD70B50C4605460E2113 -:10763000204612F0E7FF00202080002D05D0012D0C -:1076400001D0FFDFA1E4062000E00520A0719CE44A -:1076500010B50C4603F04CFE002800D0FFDF20469A -:10766000FEF781F910BD0000023000005803002031 -:10767000FFFF000010B50446007894B0022804D043 -:10768000012802D0FD4814B010BDA078002806D013 -:10769000032804D86078002801D0032801D90720E6 -:1076A000F1E73F20694608702078022801D00120C8 -:1076B00000E000208870607800F090FD6946C01DF1 -:1076C000C870A078012800D1022000F087FD69462B -:1076D0000871607800F082FD69464871A07800F07A -:1076E0007DFD694688712078012802D1C878401C48 -:1076F000C87009A9684603F0B5FF002800D0FFDF75 -:107700000020C0E7FFB5DE4906468DB01546886803 -:10771000C96803AA43C2687A297A4018C7B2002E02 -:107720000ED00024F01DC008C000B04200D0FFDF22 -:1077300028880599401C80B20090002C02D007E0F8 -:107740000124EFE7C0B207F087FE002800D0FFDF7A -:1077500000980599000108182969C01C0191810849 -:1077600089003A460591002C08D100200870019844 -:1077700080B203F077FC002800D0FFDF0599019864 -:10778000234608180590A87A297A3A464018C1B2CB -:1077900005A800F069FD0598C01C800880000590D0 -:1077A000697A00912B7AAA7A002C00D0002001A9D6 -:1077B00006F0D6F8002800D0FFDF694689880598D2 -:1077C000169B4018C01C8008BC468000109F179A6A -:1077D00018990093019202910590002C00D000208E -:1077E0003B46624607A906F047FA002800D0FFDFB3 -:1077F0006946898B05984018C01DC008C000821BCF -:107800000E9905900A60002C3ED101210907C96A32 -:10781000C9430906090E03D19A490968491C03D0D6 -:107820009949401A9949C86201232C220BA998480A -:1078300006F014F800F0DCFC00211E22084601F0DE -:10784000DFFEFAF7CBFC00F075FEFEF7A5FD03ABFB -:10785000002205218FA0FBF787F9002800D0FFDF69 -:1078600028460C30FFF7D2F8002800D0FFDFFF21B8 -:1078700089008A4812F0C8FE854801211C384176EB -:10788000022181760621C17611B0F0BD10B5834C7E -:10789000A078092800D3FFDF207870214843001921 -:1078A000002101714179F722C908C900C91C1140A2 -:1078B000EF22114041710121E170001D10BDF7B5AB -:1078C00005460078002700090C463E46052800D0F2 -:1078D000FFDF287E00280AD0012810D0FFDF0298A1 -:1078E000002C068001D0278066800020FEBD022784 -:1078F0000926002C10D0A88BA080A87F0AE00327BF -:107900001426002C08D06888A080286AE060A88C23 -:107910002082287F2072E2E702980680E5E70620B1 -:10792000704770B55D4CE07800281BD0207870213E -:1079300048430019407900254007400F01191F20D6 -:1079400040010918087E401E08762078401CC0B20D -:107950002070092800D12570A078401CA07009F083 -:1079600085FBE57070BD4A481C38C07E002800D0F9 -:107970008CE77047F0B5464D00269BB07C3D686FA4 -:1079800000280BD0FFF7EFFF002876D07022696F38 -:10799000F9F7FCFBFFF7C5FF6E67F0E73C481C38C2 -:1079A000407E002869D0FFF771FF0446384805F093 -:1079B00084FF6060002800D1FFDF606803F09BFE59 -:1079C000002811D02046F9F7B9FF6078010706D5E5 -:1079D000C008C000401C6070FFF7A3FFCFE72C4831 -:1079E000616805F073FFCAE72948616805F06EFF1A -:1079F00001A800F072FC002871D16846032180883C -:107A000006F0D4F802906846808806F02CFA074603 -:107A10000298002800D1FFDF02984068002802D0B9 -:107A20000078FF285BD0FFF731FF04463846211D60 -:107A300005F078FE002800D1FFDF60680C9006702A -:107A4000684680886080204600F05BFE384605F07E -:107A500094FE002800D1FFDF3B2168460173818836 -:107A6000C18103A805F0D1FA0DA804F0A8F8607848 -:107A7000010715D4C00619D41CE030E00530000021 -:107A800040AC010000100010000000200005004084 -:107A9000B40700206E52463578000000B80300207D -:107AA000C008C000801C6070FFF73BFF02990C9873 -:107AB000486064E702984068002807D00178491CB4 -:107AC0000906090E017089D1FFDF58E7002211462F -:107AD000384600F07FFB002885D1FFDF4FE71BB061 -:107AE000F0BD10B5FE4C0422A06020460C3012F010 -:107AF0002CFDFC4801F018FD607010BDF849002015 -:107B00000870704770B5F84E0546706A94B00C4620 -:107B1000401C04D1B06AC0430004000C0BD0306A92 -:107B2000C007C00F2870706A12F081FDB06A207122 -:107B3000000A607110E02B206946087009A96846A8 -:107B400003F090FD002800D0FFDF012028700622FE -:107B50000AA9204612F0F9FC2878002803D06079A1 -:107B6000C0210843607114B070BDF0B5DE4C06460C -:107B7000206895B00D4637460837401C08D160682C -:107B8000401C05D1A068401C02D1E068401C11D007 -:107B90002068314612F04BFD6068311D12F047FD40 -:107BA000A068394612F043FDE06831460C3112F00E -:107BB0003EFD1DE02B206946087009A9684603F0C8 -:107BC00051FD002800D0FFDF08220AA9304612F03C -:107BD000BCFC2B206946087009A9684603F042FDE9 -:107BE000002800D0FFDF08220AA9384612F0ADFCB9 -:107BF00020692E460836401C08D16069401C05D11A -:107C0000A069401C02D1E069401C12D020692946BD -:107C100012F00DFD6069291D12F009FDA0693146C1 -:107C200012F005FDE06929460C3112F000FD15B097 -:107C3000F0BD2B246846047009A903F013FD002849 -:107C400000D0FFDF082209AF28460AA912F07DFC08 -:107C50006846047009A903F005FD002800D0FFDF85 -:107C60000822391D304612F070FCE0E730B59F4C19 -:107C70000546606F002800D0FFDF656730BD3EB568 -:107C80000546032105F092FF0446284606F0EBF86E -:107C90000546002C00D1FFDF6068002803D0007883 -:107CA000FF2800D1FFDF01AA6946284600F092FABA -:107CB00000280ED1FFDF0CE0002202A9284600F0C8 -:107CC00089FA002800D1FFDF6846007A002800D03A -:107CD000FFDF6A461078411E1170EDD2606801998D -:107CE000884201D100206060804C6034A07E022870 -:107CF00000D3FFDFA07E401CC0B2A076012803D1D4 -:107D00007748407801F031FC3EBD70B504467848B4 -:107D100016460D46814200D1FFDF012E01D0FFDF64 -:107D200070BD5520207000202076A5830120A0770B -:107D300070BD70B515460C460646FFF714FE0028C8 -:107D40000CD0552101704680012101762168016225 -:107D5000A18881840577FFF7E4FD70BD13213046CB -:107D6000FAF7EEFC70BD70B505460C46084609F002 -:107D7000AAFD002801D0102070BD2846F9F72BFB82 -:107D8000002805D0284600F017FF2070002070BDA5 -:107D9000584870BDF3B5044687B00020069050489F -:107DA0000178002902D0082009B0F0BD4C485249A2 -:107DB0004160204609F087FD002867D1089809F046 -:107DC00082FD002862D1677A237AF818FF2870D8DC -:107DD0002088FE286DD8002800D10A202080216943 -:107DE000002901D10B21C90121616268002A15D047 -:107DF000557890786E00AD192818157806267543C9 -:107E0000281855796E00AE191579B4466E00AD1973 -:107E1000D278062665447243551905E0780006229B -:107E200038185A4310180546FA00D21B1018DA0009 -:107E3000D21A1018181886B21B20704305902846D5 -:107E40001B2250430290D82901D20920ACE7A07A26 -:107E5000B8422ED8082F0DD8012B0BD807F059FCAB -:107E6000074609F0A4F83A1A207A617A521E43189C -:107E70009A4201DA122097E7676801910090002F7B -:107E800019D0384609F040FD002801D010208BE7BA -:107E9000B8787978401839784218009901984018D4 -:107EA000904206D179793A798918FA788918884206 -:107EB00001D0072078E70298019687B200970598CD -:107EC000029583B2224603A90020FFF71BFC044859 -:107ED000089A0399406812680918914212D90DE076 -:107EE000180000207579000080000010380700207D -:107EF000FFFF000002300000881200200898016097 -:107F0000042051E70097059922468BB2019602950D -:107F100004A9FA4CFFF7F6FB04990398884200D0B5 -:107F2000FFDF0498616840186060089908600120CC -:107F3000F34920700870069836E7F8B507460E46F4 -:107F4000084609F0C0FC002809D1384609F0D1FCE8 -:107F5000002804D1F81C80088000B84201D010200D -:107F6000F8BDE8488178002911D031880091417826 -:107F7000702251430C182079241D0007000F33464E -:107F80000022214600F0F6F9050004D015E000209B -:107F900030800520F8BD002F13D031880098814231 -:107FA00001D90C250DE0207833460007000F3A4632 -:107FB000214600F0DFF9050005D00C2D01D000208E -:107FC00030802846F8BDCF484178491CC9B241707D -:107FD000092901D1002141708178CB4E491E817061 -:107FE00060784107490F01290BD0022903D00329EA -:107FF00017D0FFDFE5E7C006E3D46088FFF73FFE58 -:10800000DFE7C14861681C3005F060FC707E401CF1 -:10801000C0B270760128D4D1B848407801F0A5FAF2 -:10802000CFE7F07E401CF076CBE770B50D460446F6 -:1080300009F02CFC002804D1284609F044FC002853 -:1080400001D0102070BD2946204607F03EFA70BDD1 -:1080500070B5044615460E46084609F017FC002880 -:1080600004D1284609F02FFC002801D0102070BD53 -:10807000022C03D0102C01D0092070BD2A463146B5 -:10808000204607F046FA0028F7D0052070BD70B5ED -:1080900014460D46064609F0F9FB002809D128468A -:1080A00009F011FC002804D1204609F022FC002828 -:1080B00001D0102070BD22462946304607F04FFA05 -:1080C0000028F7D0072070BD10B594B0044609F021 -:1080D000FAFB002802D0102014B010BD0F2008A910 -:1080E000087369460BA803F0BDFA0028F4D168466E -:1080F000007A207068464089608068468089A08048 -:108100000020E9E770B505460C46084609F0F1FB8A -:10811000002806D1002C09D0206809F0D4FB0028E3 -:1081200001D0102070BDA088002804D02146284628 -:10813000FEF784F970BD092070BD70B504460D4688 -:10814000084609F0A3FB002807D1601E1E2815D899 -:10815000284609F09BFB002801D0102070BD022C9E -:1081600001D9072070BD002C00D1FFDF6749A000B6 -:1081700040188038C16F2846884770BD2046203897 -:108180001F28EED829462046F9F774FF70BD70B558 -:1081900004460D46084609F096FB002807D1601EEC -:1081A0001E280ED8284609F071FB002801D01020A7 -:1081B00070BD012C01D0022C01D1062070BD07201A -:1081C00070BD204620381F28F9D829462046F9F7E7 -:1081D000BCFF70BD10B505F018F910BD032803D021 -:1081E000022803D001207047062070470320704703 -:1081F00010B594B0FAF7E8FE40484178806803F083 -:108200000CFC3E4801240C300178012915D13022A4 -:1082100069460A70C0788870002802D0012802D010 -:1082200003E08C7001E000208870084604F0EDFE49 -:10823000002802D009A803F0C2FC022008A9087196 -:108240004871887109A8FFF715FA002800D0FFDFF0 -:1082500008A8047103214171817109A8FFF70AFA86 -:10826000002800D0FFDF37E7F8B506460220002AD5 -:1082700002D050004018401DC7B23068C01C8208B0 -:1082800092003260002B23D11E483B460A21283839 -:1082900009F000FA002408E0230012F017FC0A0697 -:1082A00008060A0A0C0C06060611194804E01948CB -:1082B00002E0194800E0194809F00AFA054600E012 -:1082C000FFDFA54200D0FFDF641CE4B20A2CE3D339 -:1082D0003068390140183060F8BDF1B594B03A20EB -:1082E00008A9087369460BA803F0BCF9002800D060 -:1082F000FFDF0B4E00246D4636E000001800002022 -:1083000008000020B80300209807002040AC0100BE -:10831000E51E0000A9850000B52F00000DF2000049 -:10832000043000002F19B87DC10706D0400704D4DF -:1083300060004019C08800F030FC1948807E002899 -:1083400010D0B87D80070DD560004019C08800F0BE -:1083500099F9002806D060004019C18814980026B9 -:10836000018005E0641CE4B268460079A042D9D8D7 -:1083700030465CE4F8B5044600201880601E1D46B7 -:1083800016460F46052800D3FFDF0649A000401817 -:108390008038C36F2A46314638469847F8BD0000FA -:1083A0009807002050AC0100FFB581B01546064685 -:1083B000032105F0FBFB0446304605F068FD0C3553 -:1083C000AFB200252E460090002C00D1FFDF0098B0 -:1083D000002800D1FFDF0298800000190189B9420E -:1083E00000D30125218CB94202D20299062900D37B -:1083F00001260499A94304D0817A02221143817293 -:108400000AE00499B14307D0827A04210A438272B8 -:108410002034A0780843A0702846304005B0F0BD55 -:10842000FFB581B00A9D174628460C3080B20E4633 -:1084300000900B9C00232A4639460198FFF7B4FFB1 -:10844000002803D0B078C00906D01EE0072F01D065 -:108450001120E3E7FE48E1E7241F2570280A607039 -:108460000498A070000AE070019805F010FD040067 -:1084700000D1FFDF2D1D2046A9B204F0B5FE002873 -:1084800000D1FFDF019803F03AFAB80080190289A1 -:108490000099511A0181062F03D2318C0098081AD5 -:1084A00030840020BAE7FFB585B01E460F460F9D09 -:1084B000109C05F0ECFC002833D0079A6946121D89 -:1084C00092B204F028FE00282ED00098077068466B -:1084D0000089042800D2FFDF0321019812F092F8EE -:1084E00000221146019803F0C4FA002E03D068461A -:1084F0000089001F30800E98002803D001980E9943 -:10850000C01D0860002D02D06846008A2880002C1B -:1085100004D02888002800D003982060002009B0EB -:10852000F0BDCB48801EFAE7072F01D01120F6E7F7 -:10853000C748F4E70020C74902464300401CCA521E -:108540000828FAD3704770B50C460021A170217835 -:10855000090909012170012161700021616005F0A4 -:1085600096FC050000D1FFDF284604F0D2FDF53867 -:108570002085204600F0C8FB70BD70B50D46032174 -:1085800005F014FB040000D1FFDFA0786906C009E4 -:10859000C001490E0843A07070BD704710B5014678 -:1085A000012009F034F910BD3EB58DB203212846F3 -:1085B00005F0FCFA040000D1FFDF207869460009CD -:1085C0000001207002200870A348488088800022A3 -:1085D0002846F9F7F9FC3EBDF7B50546002082B004 -:1085E0000746019028780C460009012800D0FFDFDB -:1085F000287E032809D0FFDF0498002C078002D0D2 -:10860000019820806780002008E7AE8B70200190E1 -:1086100030460A3087B2002C19D06888A080688B59 -:108620002081E680A889001F80B200900246A968D8 -:1086300020460A30C91D11F088FF00988642DBD918 -:10864000321A20180A30296911F07FFFD4E7049804 -:108650000780D8E7FFB583B00F461C4616460321B6 -:108660000C9D039805F0A2FA010008D033463A4663 -:10867000019500940398FFF7D3FE07B0F0BD74484E -:10868000801EFAE770B50546734886B0854214D05F -:10869000284605F0E8FB040000D1FFDF20466946CC -:1086A00005F040F8002800D1FFDF019CA079617936 -:1086B00000020843E41C052802D0012006B070BD6A -:1086C0002E460321284605F071FA050000D1FFDF90 -:1086D000207912280AD160782178000208430C28FA -:1086E00004D1A8784006400E022806D000230622B6 -:1086F00004213046FFF758FEE0E70023062205215B -:10870000F7E7F0B584688BB02179E3780A02A179A4 -:108710001A4363790D021D438389818AE41C5B1827 -:108720001B1F934218D1042D18D0052D6ED0062D95 -:1087300065D0402D10D304461646284600F0D8FADE -:10874000082809D011202070032020766583A68395 -:1087500060780821084360700BB0F0BD241D0394BD -:1087600016460446024630460399FCF784FFC0B221 -:108770000828F1D1002768460784069760880321FE -:1087800005F014FA050000D1FFDF3448298900887C -:1087900081420ED317226846028406A801970297E9 -:1087A0000090002360881946FFF77DFE002800D066 -:1087B000FFDF009408AA3046069B0399FDF7AAFE46 -:1087C000C0B2030012F082F905051904160419005D -:1087D000C2E76846008C0028BED00699019100903F -:1087E0006088042300222946FFF71AFE0028B3D030 -:1087F000FFDFB1E760781021ACE7FFDFACE7009165 -:1088000003694088211DFBF758F9A5E7074616467E -:108810004088032105F0CAF9050000D1FFDF0020E0 -:1088200069460873A878400600D1FFDF042E93D371 -:108830002179C807C017401C06D16A7863799A422B -:108840008AD12A78120787D0142950DA012907E043 -:1088500004300000E4070020FFFF000068AC0100C6 -:1088600043D0122902D0132941D129E00C2E3ED148 -:10887000A9784906490E012939D028780121000933 -:108880000001401C28706079687068460173607A46 -:10889000227A010211436846C181E07AA27A01027C -:1088A000114368460182607B227B010211436846C6 -:1088B0004182E07BA27B01021143684681821AE07B -:1088C000062E14D12878000900012870798801202B -:1088D00008F09DFF022168460173C91EC181607ABC -:1088E000227A0102114368461EE0062E09D069462D -:1088F000097B00291AD078883A4603A9F9F764FB66 -:108900002AE728780009000128707988012008F0FA -:108910007EFF022168460173607A227A01021143C8 -:108920006846C1810021C9430182E4E70028E7D0FD -:108930007E882F46002509A8009001952B46062227 -:10894000042102953046FFF7AEFD002800D0FFDF7E -:108950000998012101706179417002218170002123 -:10896000C1700571290A417106210091019005230A -:10897000042239463046FFF753FD0028C0D0FFDF00 -:10898000EAE67FB50D460646032105F00FF904001F -:1089900048D020780007000F012845D0002003A907 -:1089A00001900346009102900C2205213046FFF70A -:1089B0007AFD002834D103981221017061780523D3 -:1089C000891C4170082181700021C17029880171C2 -:1089D000090A417169888171090AC171A988017206 -:1089E000090A4172E9888172090AC1720C21009159 -:1089F00001901A4621463046FFF712FD002800D0AC -:108A0000FFDFF02300223146012008F071FE2078BC -:108A100000090001401C20706078801C60700020FC -:108A200004B070BDC248FBE71120F9E77FB50D46E1 -:108A30000646032105F0BAF8040006D020780007A6 -:108A4000000F012803D00820EAE7B948E8E7002032 -:108A500003A90190034600910290062205213046A9 -:108A6000FFF721FD0028DBD1039813210170617805 -:108A70004170022181700021C1700571290A417184 -:108A800006210523009101901A4621463046FFF742 -:108A9000C7FC002800D0FFDF20780009000120700B -:108AA0000020BDE7F3B585B00E460321059805F01B -:108AB0007DF80546059805F0EAF901900020009040 -:108AC000002D00D1FFDF0198002856D1FFDF54E0D0 -:108AD00002A90022019804F098FC03906846047AE9 -:108AE000082C00D3FFDFA00047190398398908300C -:108AF00009183981062C02D2298C08182884072CE1 -:108B000003D10098401CC0B20090B97AC80710D0B9 -:108B1000072C03D0874A6000105A00E0288D3A895C -:108B2000824206D348084000B8720598032C2BD027 -:108B3000FFDFB87A810706D5FD210840B872059895 -:108B4000032C24D0FFDF062C17D82846203081784C -:108B50004A0712D5FB27394081700024A000411933 -:108B6000887A420705D5384088720598032C11D0C1 -:108B7000FFDF641CE4B2062CF0D33046761EF6B25A -:108B80000028A5D1009878E5FBF735F8D1E7FAF78A -:108B9000F3FFDAE7FAF7F0FFEBE710B5032105F092 -:108BA00005F8040000D1FFDF204600F0ADF8A07802 -:108BB00080210843A07010BD10B5032104F0F6FF1A -:108BC000040000D1FFDF208D232111F038FDC0B259 -:108BD00010BD70B50D46032104F0E8FF040000D17C -:108BE000FFDF062D00D9FFDF072D03D051496800B4 -:108BF000085A00E0208DA90009190A89824204D28E -:108C00008A7A012002438A7270BD002070BD10B5BF -:108C10000446402801D2072010BD00F069F808285A -:108C200002D03120000210BD0021434802E0491C5F -:108C3000082903D24A00825A002AF8D1082903D011 -:108C400049004452002010BD042010BD10B540283A -:108C500001D2072010BD00F04BF8082805D00021F4 -:108C6000354A40001152084610BD052010BD70B5B0 -:108C700088B015460C00064607D0002D05D0608848 -:108C8000402804D2072008B070BD1020FBE72188DF -:108C9000002929D000F02CF8082827D003AA06A91B -:108CA00005A86B4607C3228804AB07213046FFF7AF -:108CB000FAFB0028E7D16846028A2946059811F098 -:108CC00044FC68462188008A814204D90A1A29187E -:108CD000039811F03AFC05980090238862880721D8 -:108CE0003046FFF7B7FCCEE70C20CCE70520CAE7FB -:108CF00001460020104A02E0401C082803D243002D -:108D0000D35A8B42F8D1704710B504462021083061 -:108D100011F07AFC074800214A008B001B19825A87 -:108D2000491C1A810629F7D9208DA08410BD0000A6 -:108D30000230000068AC0100E407002030B40121DB -:108D4000B848C9020160CD1005604A030260B64808 -:108D500003681C02240A002304600468240A240215 -:108D60000460B2480468240A24020460B048012464 -:108D700044608460AF4C23606360A360AE4B1960B5 -:108D80001D601A60AD4B19601A600121016030BC92 -:108D9000704710B40121A348CA0202600B020360AD -:108DA0000C060460A24841608160A5484168002922 -:108DB000FCD1A04900200860486088609E4802609D -:108DC0000360046010BC704701219B48C902016028 -:108DD000C91001607047002805D0012805D002287D -:108DE00005D198487047984870479848704700B533 -:108DF000FFDF002000BD30B50021954C954D964A0F -:108E00008C4B002805D001281AD002281FD0FFDF84 -:108E100030BD01200004A060A860116019608F4B74 -:108E2000C2039A608E4A90607E4A001210608D489C -:108E30000160854801608C4801608C48017030BD3C -:108E400001204004A060A8605160596030BD01203D -:108E50008004A060A8609160996030BDF0B5944630 -:108E60007B4A834F7B4D00240126002805D0012832 -:108E70002ED002283CD0FFDFF0BD891E0902090A6E -:108E80000120000490603C6468606D4A1164012B0D -:108E90001CD00021754B774A597061461661764A9D -:108EA000546002249460042414616E4A3D311160C0 -:108EB0006D490E60604A89151160694A50605F48CB -:108EC00001606649C00548601E70F0BD0121E1E700 -:108ED00001206A4E40046A4F012B04D13464506073 -:108EE00068603964F0BD9060346468603964F0BDD6 -:108EF0000120644E8004644F012BF4D1EEE750480A -:108F00004068704770B54B4D28680026504C0128CA -:108F100006D1A068C00303D501200004A0602E6024 -:108F20006868012809D1A068800306D501204004A3 -:108F3000A0606E60012007F092FAA868012809D1AC -:108F4000A068400306D501208004A060AE60022026 -:108F500007F085FA70BD10B544490878002818D08C -:108F600001203E4AC00790603D4AC00B90602D4AE8 -:108F7000001210603B4A00201060334A10603A4AE9 -:108F8000106008704A78002A02D0487007F067FA2B -:108F900010BD0320FAE701203C4900060860704735 -:108FA0000120254900060860704701203749400527 -:108FB00008607047012020494005086070472D492E -:108FC000012008611C49000208607047410A304ACC -:108FD000C005C00D5043FF3001305143400A08180E -:108FE000704710B42B4C430B63431B0C5C020C60AA -:108FF000274C6343C31A28485C025843244B400D56 -:109000004343E31A0124DB03E4051B191B16137009 -:109010000A681018086010BC704710B507F0E4FA31 -:1090200010BD000080E100E008E400E018E400E08A -:1090300000B0004040B1004080E200E000E100E00C -:1090400000B5004048B100404081004044B10040BC -:1090500000B3004040B3004040B5004000F501407F -:10906000008300404085004000820040280000202E -:1090700000B10040008000400085004004B1004085 -:1090800004B5004008B1004008B5004000E200E02F -:10909000093D0000378600006F0C010010B5EFF3AA -:1090A0001080C407E40F72B6D8484178491C41705B -:1090B0004078012801D107F0F7FF002C00D162B6FB -:1090C00010BD70B5D14CE07800280AD10125E570BB -:1090D000FFF7E4FF07F0F0FF002804D0002007F0BE -:1090E000CAFF002070BDCA4865714560F9E770B5D8 -:1090F000EFF31080C507ED0F72B6C44C60780028FE -:1091000000D1FFDF6078401E60706078002801D1D8 -:1091100007F0CEFF002D00D162B670BD10B5BB4880 -:10912000C178002904D000214171C170FFF7DFFF31 -:10913000002010BD10B5044607F0BEFFB349C97842 -:10914000084000D001202060002010BDF8B5054681 -:1091500041788278AD4800248171C2710472287808 -:109160002646002804D0012810D0022810D0FFDFA6 -:1091700007F0AEFF002813D007F0B0FFA0420FD1D8 -:10918000204607F0AEFF0028FAD035E00124EFE7D3 -:10919000FFF784FF07F090FF0028FBD00224E7E7E9 -:1091A00001208107C8609B4F7E609B4A9461984B69 -:1091B00002225A60886099480169C943C906C917E3 -:1091C000491C0091016910221143016100E020BF98 -:1091D00078680028FBD0204607F083FF0028FAD0EB -:1091E0000098002804D18D48026910218A43026149 -:1091F0008749022088607E60844FF87900280FD06C -:10920000287800280CD107F057FF054608F024F90C -:109210008349002D02D0F960386101E03961F860BE -:10922000002C01D03E71F8BD0120387100F0CFF85C -:10923000F8BD10B5040000D1FFDF00207449C04321 -:109240008860744A002111605160D160116107F09B -:1092500039FF002805D06D490120C8704878401CAE -:1092600048702046FFF772FF10BDF8B50125AF0723 -:109270007D61664CE07900281FD0012803D0217A57 -:10928000401E814219DA07F017FF064608F0E4F89D -:10929000E179012902D9217A491C2172002E01D0DD -:1092A000216900E0E168411A022901DA8A1C10DC18 -:1092B000002E01D0206100E0E060FFF7EFFE07F034 -:1092C000FBFE002802D03D61A57000E02570002063 -:1092D0002072F8BDFEB54F4CA068002801D00126D1 -:1092E00000E000262068002801D0012500E00025CC -:1092F0006068002801D0012700E00027E06800280E -:1093000000D0012001902069002801D0012100E057 -:10931000002100913146294338468843019988430A -:109320000099884300D0FFDF30460026002803D094 -:10933000A660012007F09FFE2800344D12D0266061 -:109340006879002803D06E71002007F094FE287819 -:10935000002807D007F0B0FE002803D00120A87035 -:1093600081070861002F00D066600198002808D0AE -:10937000E660A878002800D1FFDFAE702E70FFF7FE -:10938000B6FE0098002805D026612879002801D073 -:10939000FFF76BFFFEBD10B51C4CE078002801D133 -:1093A00007F086FE012081078861A078002809D097 -:1093B000184CE068002803D107F093FE0028F8D18C -:1093C0000020E06000201249C043886010BDF8B55D -:1093D0000F48192787600124A507AC610D490020BB -:1093E0000860C860086107F067FE084E002802D0D8 -:1093F000B4702C6100E03470FFF750FE0649B0797C -:109400008863034847606C61F8BD00002C000020B1 -:1094100000030040000100400005004000ED00E0B6 -:10942000FFFFFF7F8107C90E002808DA0007000F41 -:10943000083880082B4A80008018C06904E0800842 -:10944000294A800080180068C8400006800F7047D5 -:1094500010B50D20FFF7E6FFC4B20420C043FFF7AC -:10946000E1FFC0B2844200D0FFDF20490120486004 -:1094700010BD01211E4A480310601E4B00221A60D5 -:109480001D4A51601D4A10601D4A116018498039FB -:10949000086070470121164A48031060184A51605D -:1094A000144A0021116015490860704710B5114930 -:1094B0000868012801D0FFDF10BD0C488068002239 -:1094C000C0B20A6007F012FF10BD10B5094801686C -:1094D0000029FCD0FFF7EAFF01200849400308609B -:1094E00010BD000000ED00E000E400E000D5004009 -:1094F00080E100E000D1004000D3004080E200E0C5 -:1095000000D0004001203949400608603849086011 -:1095100038490A68FF231B029A4383121A430A60E0 -:10952000324980390860704700B50246042032494C -:1095300004E0C3005B181B79002B07D00346401ED4 -:10954000C0B2002BF5D1FFDFFF2000BDC300CA5021 -:10955000002259184A718A7101220A7100BD264AF7 -:109560000021C00080180171704710B5044604281E -:1095700000D3FFDF2048E1000C182079012800D03B -:10958000FFDF6079A179401CC0B2814200D06071D8 -:109590000120164940068031086010BD70B515489D -:1095A00004250068144E0004800F144C022817D0C4 -:1095B000FFDF15E02078C10088190279012A07D160 -:1095C000427983799A4203D04279827170588047F8 -:1095D0002078401CC0B22070042801D300202070E5 -:1095E00028466D1EEDB20028E4D170BD80E100E098 -:1095F00080E200E018E400E0F407002040000020D2 -:1096000010B5FE4B586019721A80C90010F0FCFFAB -:1096100010BD00210180704710B50022D2430280A6 -:10962000032008F0F4F810BD7047F0B50E4604466C -:10963000017801208840F24999B0084000906168A3 -:1096400015460888EF4A904206D0009A002A06D0B4 -:10965000EB4A521E104202D0012019B0F0BD009A10 -:1096600010430880002D12D0002028702178EA1CB9 -:109670000027681C01920B0011F028FA10F30E1657 -:10968000233A59616F3CB4B08AB8F2F1F0F3207814 -:109690000B28EBD00420E0E702212970A18901709A -:1096A000090A4170032097E004212970A189017003 -:1096B000090A41700198E1890170090A4170052089 -:1096C0008AE006212970A1890170090A4170019977 -:1096D000E2890A70120A4A70218A0171090A4171ED -:1096E000A28AE81DA16910F030FFA08AC01D73E0B6 -:1096F000082129702178082901D110212970A18918 -:109700000170090A41700198E1890170090A4170EC -:109710000520308020466A1D02A9103005F01FFF89 -:1097200000287DD169463088097A401854E00A2122 -:109730002970A1890170090A417003200BE00C21F6 -:109740002970A1890170090A41700198E1890170AD -:10975000090A4170052030809CE0A08984464000C1 -:10976000401C81B2308888425AD3052958D30E2034 -:109770002870002008E0236942009B5A5219537058 -:109780001B0A401C937080B26045F4D33180B9E06D -:109790009A48417A002973D0491E4172217B406862 -:1097A000C9004518A9882868082240180838216986 -:1097B00010F0CBFE0221684601710021417128683A -:1097C0000390A98868460181002101A8FBF79EFD4E -:1097D0000020A880002E00D0308093E029788022DD -:1097E0001143297029784022114329702978890969 -:1097F000890112312970A1890170090A4170E28939 -:10980000E81C216910F0A1FEE089C01C3080287896 -:1098100041063FD5C00975D001216846017200E0BC -:109820002CE0002141723188091D81810495E18974 -:10983000019808180590001D06907048017A684646 -:109840000177002102A8FBF761FD074630880C3044 -:109850003080022F06D0002F54D065E03DE033E089 -:109860001CE05EE065486946097F4268CB00D2187B -:10987000037A994202D29188002902D0042753E04A -:109880002FE0417A491C4172156030889080002099 -:10989000308049E06168A089888033E029788909AF -:1098A000890116312970A1890170090A4170019856 -:1098B000E1890170090A4170228A681D616910F00E -:1098C00044FE208A401D46E7287880098001183030 -:1098D0002870207B687002207EE760680188090498 -:1098E00001D4052720E0C088A189884201D006273D -:1098F0001AE01E2028700120308060680188490429 -:10990000490C0180009800280ED03C4800220088B5 -:10991000A1688300032007F0EBFE6168207888705F -:1099200007E00020308003276068009902888A439E -:109930000280384691E6FFB59BB0249D0E46002874 -:1099400005D0172803D82A882E4B9A4202D1072027 -:109950001FB0F0BD3278530601D4D20901D00820DF -:10996000F6E700226B461A705A701446327802AB42 -:109970001793431E19939BB216939706CB1CBF0EE9 -:109980001893821E711C3B0011F0A0F8209011F07A -:1099900066F074F0B4F0D6F0EFF0EEF0EDF0ECF02D -:1099A000EBF0F0F0EAF0E9F0E8F0E7F090F00528ED -:1099B0007CD1042168460170A9780171F078B278F1 -:1099C000010211436846C180317941707078800688 -:1099D000800E0C282ED009DC801E030011F076F8D2 -:1099E0000919661C662166246627660012282AD09B -:1099F0000ADC0E2821D01028DAD121E0140800203A -:109A0000FF710000FFFF000016281FD01828CFD1DB -:109A10001FE02878800701E028784007002845DA11 -:109A20004FE128780007F9E72878C006F6E728789C -:109A30008006F3E728784006F0E728780006EDE78F -:109A40002888C005EAE72888C004E7E7288880045A -:109A5000E4E728884004E1E72A78920726D503281E -:109A6000A6D105206A46107048780978000208439C -:109A7000908026E129784907F0D5062816D370781A -:109A800091B2012802D0022892D101E0022700E021 -:109A90001027062268460270727882710022828046 -:109AA000179AB01C1692BA1C18921EE0BDE04278BC -:109AB0000378801C17901202891E16981A43199178 -:109AC000028016983A46801C179910F03EFD169AAF -:109AD0001798D219921C19996B4616929A88C01938 -:109AE000C91B521C9A80189A89B28A42DFD9002970 -:109AF0008DD1E6E028780007B0D519986A4681B282 -:109B00000720107000209080701C921D11E0437897 -:109B100007781B023B431380C37887781B023B43C3 -:109B200053806F46BB88091F5B1C001D89B2BB8038 -:109B3000121D0429EBD2DAE72978C90675D5022867 -:109B400073D30821684601700021C18071780171CA -:109B50008C4692B2B01C179919E091E098E086E02B -:109B60006FE063E038E02DE021E015E0C4E04378E9 -:109B700007781B023B430B80831C4B606346D21A61 -:109B80006F46FB8860445B1C92B2FB8008319445B1 -:109B9000EDD9002A49D194E02878800645D50922DC -:109BA00068460270AA888280169AC28012E02878DD -:109BB00040063AD50A206A461070A8889080169808 -:109BC000D08007E0287800062FD50B206A46107059 -:109BD00016989080029174E02988C90525D502283D -:109BE00023D30C20694608700020C8807078087163 -:109BF000844692B2B01C179914E0437807781B0290 -:109C00003B430B80C37887781B023B434B80031D8B -:109C10004B606346D21A6F46FB8860445B1C92B26D -:109C2000FB8008319445E8D9B3E763E02988C9048B -:109C300060D501285ED10D2168460170A988818018 -:109C40003FE02988890455D5052853D30E2269465B -:109C50000A70AA888A801899401F4A7809781202E7 -:109C60000A436946CA800881701D039029E029884B -:109C700049043FD501283DD10F206946087020E0F6 -:109C80002A88120436D44A780B7812021A43EA80E2 -:109C900003282FD332789206920E1B2A26D0112247 -:109CA0006B461A702A880123DB031A432A804A78FC -:109CB0000B78110219436A469180C01ED080189813 -:109CC000029030788006800E1B2809D01D2807D00E -:109CD00003201E9907F09BFD2888C00BC003288035 -:109CE00068461D99FBF712FB204631E610226B46B1 -:109CF0001A70DCE70724F7E70824F5E700B597B00A -:109D0000032806D16A461070019100216846FBF7CE -:109D1000FDFA17B000BD0000FFB593B00446002067 -:109D20001D9E049015981C9D1027082806D0E069F8 -:109D300001F0B0F8002809D03770CCE0288809215C -:109D4000384328801F980227017016E0E16901203E -:109D500088710521E269C9029180E1698872E1692F -:109D6000F8480881E1690020887328882021084389 -:109D7000288011211F98042701701F980225801C3C -:109D80000390307810900A203070204618301190DF -:109D900001F006FB00206FE01598102809D1022D74 -:109DA00007D06846828A04990398401A8270110A83 -:109DB000C1706846C08A1699884203D9E249097A77 -:109DC000149106E0884204D11099002901D0317025 -:109DD00021E003990870000A48701E980088401B13 -:109DE000C01B83B2FF20C01B984200D203460398D9 -:109DF000149AC0190CA90092019002912020015DD3 -:109E00006846C08A002201F03FFB3070002806D06F -:109E1000C0B2832862D06846C08A208345E00F988C -:109E2000002805D0C848006800790A2830D33CE0F3 -:109E30006846008EC119C9B20491022D0FD01F9936 -:109E4000049A4978914203D16A46128C824209D021 -:109E5000BD48049100680178032909D027E008462D -:109E60001F994870B84800680178042906D008E0B6 -:109E700000790A281BD201200F9009E06946C98A9F -:109E8000818003990498081803900498281885B2D3 -:109E900005AA1499119801F086FA002805D11E9898 -:109EA0000088401BB84200DB76E7022D0ED01598E3 -:109EB000102807D1049A03996846808A891A887005 -:109EC000000AC8701E980580002030709E48006807 -:109ED0000078032802D0002017B0F0BD0220FBE775 -:109EE000F8B50546406B00271346002836D0491FB9 -:109EF0008EB2698F954A914208D0421854791279EE -:109F0000240214430919891D8CB200E00024A11910 -:109F10002A8F083191421FD899785A78090200197E -:109F200011430170090A41701979DA780902114365 -:109F30008170090AC1700671310A41713246591D9A -:109F4000801D10F002FB6C87696B00200919B61D9B -:109F500089190870487002E0092700E08327384615 -:109F6000F8BD30B50B88048F9C4212D9446BE018C1 -:109F70004478057824022C430BD0447905792402D7 -:109F80002C436404640CA41D1B190B80106000207A -:109F900030BD822030BDF7B588B000256846058207 -:109FA00007275DE00398417802780E021643417955 -:109FB000027908021043000452D40A980123068053 -:109FC00005A802905B02002200970195304609998E -:109FD00001F05AFA04004AD16846018A01830398C5 -:109FE0004179027909021143437802781C02144333 -:109FF000B4421ED10A041CD44B0401215B0C89031A -:10A0000000950B4301970295C17880780A020243BC -:10A010002046099901F059F8040011D103994879B3 -:10A020000A79000210430122D20310430871000A8A -:10A03000487103AA06A90898FFF793FF0400CED041 -:10A040000399009501970295487809780002084322 -:10A0500069468B8A0022099901F037F8822C06D1D3 -:10A0600003AA04A90898FFF77CFF04009AD0684669 -:10A07000058209E0039841790279090211434904F4 -:10A08000490C0171090A417103AA04A90898FFF754 -:10A0900068FF0028EED0822C02D020460BB0F0BD25 -:10A0A0000020FBE730B50446406B002597B0002840 -:10A0B0000DD00B2268460270228F0281606B0391E3 -:10A0C000019000216846FBF7CDFE68460570002030 -:10A0D000C04365636087258717B030BDF8B50F466C -:10A0E0000546696B0020069E144600290FD0012BFF -:10A0F0000DD1324639462846FFF74DFF002806D1DC -:10A10000002C04D032463946284600F0D2FEF8BD75 -:10A11000F8B5069E4D1D3788ADB2079CAF4201D2FF -:10A120000620F8BD3580172525706070000AA070E4 -:10A13000E270100A20710A461946601D10F005FAF7 -:10A140000020F8BD0128000020080020FFFF0000CB -:10A1500000220280C262831D0263C3614263531EF8 -:10A160004387028720300170704710B50022D24328 -:10A170000280042007F04BFB10BD30B597B00D46B0 -:10A180000446FFF78FFF208E002809D00120694682 -:10A190000870E06A0190002102956846FBF762FEB4 -:10A1A0000020E062206397E70146098800200A0743 -:10A1B00000D501200A06120F01D002221043CA0561 -:10A1C00001D5042210438A0501D510221043490508 -:10A1D00001D5202108437047FFB5A7B00700309D87 -:10A1E000339C29981E46229016D0007841060FD441 -:10A1F0008106890E1E2909D021884A05520E0BD1ED -:10A200003288172A08D3FB4A914205D0C10906D0EB -:10A210008006800E122802D004202BB0F0BDF64933 -:10A2200028980872002018AA039010726A461074C9 -:10A2300004AA0A60319A4A6020AA908090812298EC -:10A2400000781C908106681C0190781F1D90299849 -:10A25000890EC21C2492224620321B92083A401CCE -:10A2600002920B0010F032FC1FFEFE11FE1FFE8E4C -:10A27000FEFDFEFCFEFBFEFAFEFDFEF9FEFEFEF814 -:10A28000FEF7FEFEFEFEFEF6FE00032F76D102E094 -:10A2900018A9087236E303202870019917220A7062 -:10A2A00000224A70ECE2052FF0D1417802780802D2 -:10A2B0001043208320A98880249A517812780902BB -:10A2C0001143618300287DD088427BD80020207212 -:10A2D000E080401E6084029801F062F8052028703A -:10A2E000A81C0190022000901BAA2899029801F056 -:10A2F0005AF8002867D118A8807C012803D00220D2 -:10A300006870102002E00120687002202490002272 -:10A3100025A91CA805F023F900282BD120A8007D31 -:10A320002499814226D132880099801C511A814299 -:10A3300020DB10A8C18D01980170090A41700199B4 -:10A340001CA8891C01910099019A891C009125A9DA -:10A3500005F005F920A8007D01991BAA09180191B3 -:10A360000099081880B200902899029801F01BF813 -:10A370000028CCD00098022825D081E273E018A9EB -:10A3800008727EE2072F6ED34178027809021143EA -:10A39000218320AA9180249B5A781B7812021A43A9 -:10A3A000628300290ED091420CD80121217241799B -:10A3B000027908021043E08000202073E06900F079 -:10A3C00069FD01E098E0A9E000280ED1E1690120D3 -:10A3D00088710521E269C9029180E1698872E169A9 -:10A3E00086480881E16900208873F81F60842298FC -:10A3F000C01D6062029800F0D3FF07202870681C1F -:10A40000009001200190002010A9C8852FE001983C -:10A41000012814D0E0698079012830D000981E38D6 -:10A42000417F007F0902014300980170090A4170D1 -:10A430000098801C00900198801C80B2019010A8A8 -:10A44000C18D00980170090A41700098801C00902D -:10A45000019809E025E2A9E135E1D9E01FE297E0A2 -:10A4600075E034E02FE2ABE0801C80B201901BAAC3 -:10A470002899029800F097FF002803D007E010A861 -:10A48000818DD1E731880198081A0428BFDA019834 -:10A49000012843D0E0698079012804D010A8818D7B -:10A4A0005448814206D110A8818D00980170090A94 -:10A4B000417009E000981E38417F027F0802009930 -:10A4C00010430870000A48700198801CD8E1072FDB -:10A4D00001D0152F74D141780278080210432083EF -:10A4E00020A98880249A5178127809021143618347 -:10A4F000002801D0884201D9012040E701202072C4 -:10A500000020E0802073052F0AD01D982299E2696F -:10A51000C0B2491D04F0FDFF002801D00A202EE73B -:10A520000020C04360841AA8019023A922980296B3 -:10A5300003950091007800238206920E2046289908 -:10A54000FFF7EAFB0390208B20A9888099E1032F75 -:10A55000C0D1402220A98A814178027808021043A4 -:10A56000208320A988801EAB289A0293009231880C -:10A570000022491E8BB21B99097800F085FF18A9AB -:10A580000872002831D10B20287010A8008F3DE000 -:10A59000052F9FD1802220A98A8141780278080264 -:10A5A00010432083249984464A78097812020A438A -:10A5B000628420A988801248824202D30720DEE606 -:10A5C000ADE03F208002024362841FAB28990293D2 -:10A5D00000913088401E83B21B980178604600F0DD -:10A5E00053FF18A9087200280CD08328AED102208E -:10A5F000DAE00000FFFF0000200800200128000032 -:10A60000010200000D20287010A8808F401C37E147 -:10A610001C990C22C9095143C91CB94204D91C9880 -:10A6200040067CD500202BE14278037810021843C5 -:10A6300020AA9080844622980078400609D50520FB -:10A640006A46107422980078C00905D00020107462 -:10A650003CE106206A4610742498289A1F900090C6 -:10A660000023781A029383B21E9001921B98002255 -:10A670000178604600F029FD18A908720022694699 -:10A680000A742299097849060DD52088C00506D597 -:10A6900020A9208B8988884201D100206062002097 -:10A6A00018A90872ECE0832801D102200390FF2151 -:10A6B000013120A88181808820831E9860841F98A2 -:10A6C00060621320DAE0052F29D34178027808026E -:10A6D000104320A98880218F002902D0F94A914295 -:10A6E00006D10A216A4611740121C943218702E07B -:10A6F00007216A46117422990022491D289B029263 -:10A70000009101221D99D203019311438BB2249928 -:10A710004A78097812020A431B99097800E0EBE0B5 -:10A7200000F0D3FC18A90872002269460A740122BD -:10A73000520220A98A81832808D0002815D0218FB1 -:10A74000E04881427BD1002020879AE039462046AC -:10A75000229AFFF7C5FB18A90872002801D08328A8 -:10A7600023D120A88088208341E739462046229AB9 -:10A77000FFF7B6FB18A90872002816D1618F606B2D -:10A78000009643180195D8789978000208438446CA -:10A7900058791A790102114358781A780002104347 -:10A7A00062469B1DFFF7B4FC03906AE02298022FDB -:10A7B0004078019072D1002801D001286ED1082084 -:10A7C000694608740198087521A800901B9800221A -:10A7D00001782046019BFFF781FC694600224875FD -:10A7E0008A75002809D10198012811D0002804D1C8 -:10A7F000B448218F401C81420AD0208F002807D006 -:10A800000020694608740120800220A988810EE09A -:10A8100004A83199FBF726FB0390002069460874D1 -:10A820000120800220A988810398022808D0A64828 -:10A8300000688079002806D018A908722AE061E033 -:10A84000019820831DE00398002803D0812018A9D7 -:10A8500008723DE021A800901B9801220178204653 -:10A86000019BFFF73BFC18A9087220463299FFF7BD -:10A8700019FC18A9087A002803D119202870012092 -:10A8800030806846007C002804D004A83199FBF78A -:10A89000E9FA03900398002830D019E016E006206A -:10A8A000F6E42078000711D5012F0FD10921684661 -:10A8B0000174A18881820420329906F0A8FF082142 -:10A8C00020A88181AEE61C98400615D5042003908F -:10A8D00020A9208889890843208020A988898005AB -:10A8E00008D5218F7748814204D12998E0622786D4 -:10A8F00003200390039890E40420C9E418A8007A88 -:10A9000000280ED00120287022980078687020A8B6 -:10A910008088A870000AE87018A8007A28710520BD -:10A92000308020A92088898988432080E2E7FFB50C -:10A93000A1B000201C902198012100782C9C81401E -:10A940006248604A014010A881862088521C9042CB -:10A9500003D0002904D0000702D5012025B0F0BDA6 -:10A96000249E00203070239910AA0988118518AA06 -:10A9700010735549229A0A726A460546107404A853 -:10A9800008602A9848602198249E0178701C1E90C7 -:10A99000204620300390012930D0022909D0032914 -:10A9A00075D13078800980011D3030702198808801 -:10A9B000A08021980078022804D130788009800195 -:10A9C0001B3030701FAAF11C07206B4607C310A86C -:10A9D000008D0022C01E83B20398017821988088E0 -:10A9E00000F052FD0028DBD1219881881E9801706B -:10A9F000090A417010A9888FC01CCDE021984179C7 -:10AA000018A8017321980079012802D00228C7D123 -:10AA100044E120887F2212011040219F10AA9086D5 -:10AA200002060837120F1BD00006800F05D03888A9 -:10AA3000228B904201D0052597E1002910D1B878EA -:10AA4000C0070DD0B868002207216B4607C30398E2 -:10AA5000FB880178BA88388800F037FB002875D168 -:10AA600010A8808E80284DD006DC102810D0202819 -:10AA70000ED0402894D12BE0FF38013868D0FF3841 -:10AA800001387DD0FF38FF38022889D1D8E00FE1A6 -:10AA9000C00601D5082000E010201C900420694663 -:10AAA0000874002088821AA81BA91DAA0396009288 -:10AAB000019102903B88072120461C9AFFF72CF950 -:10AAC000A2E00000FEFF00002008002009F80000BE -:10AAD0000A201C9018A8007B002836D11FAA072046 -:10AAE0006B461E9907C310A8008D0022401E83B23A -:10AAF00003980178208B00F0C7FC014618A8017369 -:10AB00000B2018E00C201C9018A8007B0028E4D132 -:10AB10001FAA07206B461E9907C310A8008D628CE0 -:10AB2000401E83B203980178208B00F0ADFC0146F3 -:10AB300018A801730D20307010A8818F491C018561 -:10AB4000042168460174218B8182D2E061E0FFE735 -:10AB50003988208B81425CD112211C9118A9097B74 -:10AB600000291AD1616A002912D0B978C90750D0DA -:10AB70000023B9680722029301920091FB8800E04C -:10AB80000CE00399BA88097800F09FFA18A90873B5 -:10AB900013203070012010A90885AAE03888218B85 -:10ABA000884236D116211C9118A9097B002907D0AB -:10ABB000606B002843D000206A461080D54F30E0FB -:10ABC000616B002915D0B878C00722D1608F01963B -:10ABD0000B181AA80090D8789978020258790A437D -:10ABE0001D790102294358781D78000228439B1DD6 -:10ABF00008E0B978C9070CD01AA901960091BA8863 -:10AC0000F988BB68FFF784FA050072D0062D50D092 -:10AC10003FE005253DE00F4601AA69462046FFF7C3 -:10AC2000A0F96946628F09888A4201D00028F2D0D3 -:10AC3000618F626B0020511808704870678758E078 -:10AC400018201C9018A8007B002809D0208B002811 -:10AC50001AD03888208320462B99FFF723FA48E042 -:10AC60002046183000900398237E01780122204668 -:10AC7000FFF734FA18A908730028ECD119203070B6 -:10AC8000012010A90885E6E7052520462B99FFF746 -:10AC900009FA6846007C032861D066E0208801211B -:10ACA0004902084010A98886FF38FF38022806D0DC -:10ACB000062510A92088898E8843208055E0954973 -:10ACC000208F491E884200D0B5E616201C9021989E -:10ACD000806800280AD06063219989892187002132 -:10ACE000C943618700210170417002E00020C04328 -:10ACF000208710A8808E7F21090102468A430ED04A -:10AD00007823002204202B9906F0F2FC219810A948 -:10AD10000078A0702088898E0843208002E0218876 -:10AD2000814321806846007C002805D07A4841682C -:10AD300004A8FBF797F8054618A8007B002814D054 -:10AD40001C98707001203070208BB070000AF07079 -:10AD500018A8007B3071052110A8018505E06E4818 -:10AD6000416804A8FBF77EF8054620884005400EA0 -:10AD700025D1208E002822D0239910AA0988118578 -:10AD800024992A9B2B9A01930091039402921AAB67 -:10AD9000E26A2299FFF720FA054603280FD0012026 -:10ADA00069460874E06A05902B980690002104A873 -:10ADB000FBF758F8002800D005460020208610A890 -:10ADC000018D239801802846C8E500B597B0042876 -:10ADD00007D102206A461070019100216846FBF7F6 -:10ADE00041F817B000BD10B54B4C03780022216824 -:10ADF000012B02D0022B42D126E00B78002B01D090 -:10AE0000042B03D10A712268032111702168838801 -:10AE10000A79D200921D8B5221680A79D200083239 -:10AE20008918C2880A80216803890A79D2000A3207 -:10AE30008B52428920680179C9000C314252216845 -:10AE40000879401C08711EE00A7482888A80216893 -:10AE5000C288CA8022680189118122684189518192 -:10AE6000C1682068C1606168FAF7FCFF01460228EA -:10AE700007D02068007C002802D1002903D081205F -:10AE800010BD832010BD002010BD406B002800D0F5 -:10AE9000012070478178012909D100880521C90264 -:10AEA000884202D0491C884201D100207047062008 -:10AEB0007047F7B586B00024684615460F46848172 -:10AEC00007261AE004984178027809021143298084 -:10AED000811D019602940091417902790B0213437E -:10AEE000C178827809020A43417800780902084350 -:10AEF000394600F0EAF8002806D104AA03A906980A -:10AF0000FFF72FF80028DDD0822800D1002009B0FB -:10AF1000F0BD0000FFFF00002008002010B58B7876 -:10AF2000002B16D002789A4202D10B88002B10D049 -:10AF3000401C8B789A4206D1437804781B02234345 -:10AF40000C88A34205D08B79091D002BF1D18120FB -:10AF500010BD002010BD00B507282ED0002A02D059 -:10AF6000012A2ED103E049784907490F02E04978C8 -:10AF70008906490F0B000FF0A9FD0504200A131ADA -:10AF80002400002A01D0032000BD022000BD0428B7 -:10AF900013D0052811D006280FD000280BD00EE0C2 -:10AFA00005280AD0062808D0022808D003E0062881 -:10AFB00003D0032803D0052000BD002000BD0F20D2 -:10AFC00000BD812000BD70B5137805460B70507828 -:10AFD00048701446D8091ED0FE48807AA84204D88A -:10AFE000102003430B70002070BDA068EF22007892 -:10AFF0001340E840C007C00E03430B702078E1788F -:10B000008007800D0843F4490FF019FBA0686943DD -:10B010000818401C70BD906870BD37B569468988B6 -:10B02000118069460D79E9091BD0EA4993688C7A49 -:10B030000121844209D8FE280FD1E80602D5A1409B -:10B04000491E00E00021197007E01C7881408C4304 -:10B05000E906C90F81400C431C701078EF210840AD -:10B0600010703EBDF8B50746C81C80080E4680002B -:10B07000B04201D08620F8BD082A01D90E20F8BDC3 -:10B08000D44D00202E60AF802881AA723446E8801B -:10B0900016E0E988491CE980810610D48007E17830 -:10B0A000800D0843CC490FF0CAFA206800F0C3FABB -:10B0B0002989401880B22881381A8019A0600C3480 -:10B0C00020784107E5D40020F8BDFFB589B09F0482 -:10B0D0001646139DBF0C0193099800F09EFA0400D8 -:10B0E0000AD02078C00909D0BA48817A0A988142EA -:10B0F00004D887200DB0F0BD0120FBE72246694649 -:10B100000A98FFF760FF0021069068460172072D3C -:10B1100014D0012221462846FFF71DFF0028E9D15F -:10B12000207840060AD5022168460172099981817A -:10B130000188C18106824782129805900198000417 -:10B1400004D500273E460125079709E02078E178DD -:10B150008007800D0843A04907900FF070FA0D4654 -:10B160000198400409D50798A84206D1A078217912 -:10B170008007800D0843B04201D3AE4201D90720B9 -:10B18000B8E7B81980B20190A84201D90D20B1E703 -:10B190006846007A002804D002A8FAF75FFE00286B -:10B1A000A8D10798A84209D1A07801998008800009 -:10B1B0008905890F0843A070019820711498002810 -:10B1C00000D007801298002815D006983A468019BA -:10B1D00012990FF0BAF9224669460A98FFF7F3FE72 -:10B1E00069460878EF2108406946087022460099B0 -:10B1F0000A98FFF712FF00207CE7FFB5754D0C227F -:10B20000E8882968504383B00C180D9F724905984F -:10B210000FF015FA0091049800F00DFA29682A89B8 -:10B220008E46611A0C310918944651188AB2A988C1 -:10B23000914202D8842007B0F0BD6A46167CF2091C -:10B2400003D0B20601D58520F5E7EA88521C92B2F8 -:10B25000EA800E9B002B00D01A80B20601D5A760B1 -:10B2600006E0604480B22881091A70460818A06080 -:10B270002246FE200499FFF7D0FE0598E070009862 -:10B28000207120780599800889058000890F08437E -:10B29000A178009A890892058900920F1143A17044 -:10B2A0000421084320700398807860710398008817 -:10B2B000E08000202073F10901D0AC7A00E0012485 -:10B2C000B10600D5002700260EE0072100200191DD -:10B2D00002900097E88831460C9B069AFFF7F5FE2E -:10B2E0000028A8D1761CF6B2A642EED30020A2E731 -:10B2F000F1B5009800F091F9060002D00025009CFD -:10B3000014E00120F8BD204600F087F907460078D8 -:10B3100031498007820DF87810430FF090F93868B2 -:10B3200000F089F94019641C85B2A4B22948C1888B -:10B33000601E8142E7DC00992648491EC1800189D0 -:10B34000491B018100203070F8BD002804D0401E48 -:10B3500010809170002070470120704710B504469E -:10B3600001881C48C288914201D3822010BD006828 -:10B370000C22514342185079A072D08820819078D5 -:10B3800011798007800D0843A081A078E11CFFF7A8 -:10B390001AFE20612088401C2080E080002010BD23 -:10B3A000012101827047F7B50546002084B0C043F3 -:10B3B00010806868174681786846817068680188DF -:10B3C0006846018000218171288A2C88A04200D320 -:10B3D000044603E02C080020010200002C8234E027 -:10B3E000288A401C2882701D6968FFF797FD002895 -:10B3F00029D139889848814201D1601E38806888F7 -:10B40000A04227D3B07831798007800D084302909D -:10B410006946701DFFF782FD002814D169898E48A6 -:10B4200081421BD0002231460598FFF794FD002889 -:10B4300009D16A890298824205D1E968B0680FF0A3 -:10B4400057F800280AD0641CA4B2204600F0E5F8A2 -:10B450000600C5D1641E2C828220ECE67C807079C7 -:10B46000B871F088B8803078F1788007800D084393 -:10B4700078810298B8813946287A32460831FFF738 -:10B48000A2FD38610020D6E6FFB585B01D460F4607 -:10B49000059800F0C2F8040009D02078C00908D04F -:10B4A0006E48807AB84204D8872009B0F0BD0120E8 -:10B4B000FBE7079822468605B60D69463846FFF732 -:10B4C00082FD07460E98072816D000222146FFF776 -:10B4D00042FD0028E9D1207840060DD501216846BB -:10B4E000017105990181018841818681C58101A889 -:10B4F000FAF7B4FC0028D8D1207822798007810D92 -:10B50000E0780143A0788007800D1043079A9642A7 -:10B5100007D0534A914204D3691E814201DD0B20BA -:10B52000C3E7864201D90720BFE7801B82B2AA4247 -:10B5300000D92A461098002800D002800F980028D1 -:10B5400002D0B9190FF001F80020AEE7F8B51D469A -:10B5500017460E4600F061F8040008D02078C009B4 -:10B5600007D03E48807AB04203D88720F8BD01203A -:10B57000F8BD224639463046FFF725FD002D0BD099 -:10B580002078E1788007800D08433549884201D250 -:10B59000012000E0002028700020F8BDF8B51E460C -:10B5A00017460D4600F039F8040008D02078C0098D -:10B5B00007D02A48807AA84203D88720F8BD012006 -:10B5C000F8BD224639462846FFF727FDFF2E14D046 -:10B5D0002578E178A807800D084321490FF02FF85E -:10B5E000002E03D1FF31FF31033189B2E170A80889 -:10B5F00080008905890F084320700020F8BD10B530 -:10B600000C4600F00AF8002805D0C1882180407956 -:10B61000A070002010BD012010BD1049CA888242D0 -:10B6200007D3002805D00C22096850430C380818AD -:10B6300070470020704703B50846694609788A06B6 -:10B6400007D4C90904D00549897A4143491C88B205 -:10B650000CBD00200CBD0000FFFF00002C080020E6 -:10B660000102000010B50C4601F0CFFC002840D0CC -:10B67000204600F0A4FA002839D022780E2A09D0FA -:10B680000F2A07D0022A05D0032A03D0102A2AD075 -:10B69000FFDF1CE0A0781E2827D00FDC0C2820D06C -:10B6A00008DC03000FF012FA0913211521211B1BDE -:10B6B00017192100122818D1072010BD302814DDD9 -:10B6C0003A3803000FF002FA030F110911000020AD -:10B6D00010BD0B4810BD042010BD0D2010BD0F2063 -:10B6E00010BD082010BD112010BD032010BDFFDFCC -:10B6F000EDE7FFDFEBE710B500F061FA10BD0000E9 -:10B700000230000030B50346002002460DE09C5C8C -:10B710002546303D0A2D02D30020C04330BD0A2506 -:10B72000684330382018521CD2B28A42EFD330BD61 -:10B7300070B50D46144608E00A210EF080FF2A1964 -:10B740003031203A641ED177E4B2002CF4D170BDC0 -:10B7500010B5002310E0040A00020443A0B2CC5C40 -:10B7600044402006000F60400407240C444020069B -:10B77000C00C60405B1C9BB29342ECD310BD000038 -:10B7800010B508F0C2FF042803D008F0BEFF05285A -:10B7900003D107F06FFE00280BD109F061F80328F0 -:10B7A00003D009F063F8032805D106F0C5FF00288F -:10B7B00001D0012010BD002010BD70B50C4605461B -:10B7C000062102F0F3F96060002801D0002007E0B4 -:10B7D0000721284602F0EAF96060002803D0012022 -:10B7E0002070002070BD022070BDFEB50C460646DC -:10B7F00001A9FFF7E2FF00287FD168460079002801 -:10B800000BD006F012FFB04277D00022214630461E -:10B810000BF082F800286DD12DE007F02CFCB0422F -:10B820006BD00022214630460AF0B7FE002861D1D5 -:10B83000029D9820405D3035002804D1687E0028A4 -:10B8400001D0012000E00020009028462030417BFC -:10B85000002914D0817B890711D500216170012254 -:10B860002270A170A680C27BA2712A8E22816A8E6C -:10B87000628141733EE0029D3035687EE4E73046E8 -:10B8800002F005FB070000D1FFDF384601F06BFD39 -:10B890000006000E08D0002161700D212170A680E5 -:10B8A000E0800120A07025E0304602F0DCFA0700BD -:10B8B00000D1FFDF009800281FD0384601F0EEFDD0 -:10B8C00000281AD068460079002807D102988030F5 -:10B8D000C06B4188B14201D100210170304606F0B1 -:10B8E0000CFE002060700A212170A070A680A97E45 -:10B8F000A17168760120FEBDFFE70020FBE71CB5C3 -:10B900006946FFF75AFF002800D0FFDF684601F0C4 -:10B91000C5FBF84800218068803041831CBDFEB51E -:10B9200004460E46062002F0EFF80546072002F016 -:10B93000EBF82818C7B20025BE1915E02088401C76 -:10B9400080B22080B04201D30020208080B2B84273 -:10B9500003D3B04201D20020CDE76946FFF72DFFA7 -:10B960000028C8D06D1CEDB2AE42E7D80020C0431D -:10B9700020801220BFE738B50020C0436946088008 -:10B980000FE068460621008802F021F90446684667 -:10B990000721008802F01BF9002C02D0002800D0FB -:10B9A000FFDF00216846FFF7BAFF0028E9D038BD65 -:10B9B0007CB5D1A103C9D24C002501910090A5709E -:10B9C00001F065FB2146E57004204039088710200E -:10B9D0004887CC48C03460812573E0810846203018 -:10B9E00045740D7085730575C03005771D300522CF -:10B9F000694605460EF0A9FD2946201F0AF076FE8D -:10BA00000A20A0700320E070207160710E20A071E8 -:10BA10000620E071207260727CBDF8B5B54C0D4611 -:10BA20006060217006F052FDFFF7A5FFFFF7C0FF31 -:10BA3000207808F013FCB2498431084681380F465B -:10BA4000064607F0F5FB60680AF016FE20780BF05A -:10BA500069FF284609F0A9FA3946304606F016FE75 -:10BA600060680AF0DEFF01F012FBA5480021C170FA -:10BA7000F8BD10B50124002A01D0002010BD002916 -:10BA800004D0012903D00024204610BD02210CF06F -:10BA90008EFEF9E7FEB5040000D1FFDF984D203D92 -:10BAA000687C002809D00020607010212170A97CDA -:10BAB000A170E97CE170687473E0914E403E30788B -:10BAC000002809D02C22B11C20460EF03EFD0E208D -:10BAD00020700020307064E0A87B00280AD001208C -:10BAE000E070E87BA070287C60700F202070002040 -:10BAF000A87356E082480221CE300290FFF70FFF74 -:10BB0000002800D0FFDF7E4FC037F8890190062063 -:10BB100001F0FAFF0646072001F0F6FF3018C6B222 -:10BB2000701CC0B20090F889B04214D100212046A8 -:10BB300007F056FA002834D1287D002833D000269B -:10BB40006670132020701C21A01C0EF05BFD0220EB -:10BB5000A0702E7525E0009988421DD10021204655 -:10BB600006F03CFD00281ED02078132819D1A078BB -:10BB70003C2816D1A088072102F018F8050000D152 -:10BB8000FFDF288806F0B9FCA088072102F01FF823 -:10BB9000002806D0FFDF04E02146FFF726FE00283C -:10BBA00001D00120A7E602210298FFF7B8FE002885 -:10BBB00003D1F98901988142B5D100209BE669E75C -:10BBC00010B508F0D3FA002800D0FFDF0AF052FDCC -:10BBD000002800D0FFDF07F0EFFA09F0D0F90028C5 -:10BBE00000D0FFDF0AF01BFF002800D0FFDF06F0C7 -:10BBF00025FD002800D0FFDF0BF08EFE002800D0CE -:10BC0000FFDFFFF7B8FEFFF7D3FE06F049FC02F0B6 -:10BC100019F901F03CFA3A480021C170403801712D -:10BC2000012141710222C270017010BD10B5344C67 -:10BC3000403C2078002804D00A210E2001F0F4F9BD -:10BC400010BDFFF79DFD002801D00C2002E001F09F -:10BC50001EFA00202071012060710A21E17020701D -:10BC600010BD70B5264C0646403C2078002804D014 -:10BC700039210E2001F0D8F970BDFFF781FD0028B1 -:10BC800001D00C2010E01E4DE87808280BD20001EE -:10BC9000001910223146443001F0D0F9E878401CF8 -:10BCA000E870002000E00720207101206071392138 -:10BCB000E170207070BD70B5114C0646403C207894 -:10BCC000002804D00B210E2001F0AEF970BD3078B1 -:10BCD000002803D0012801D012201FE0084D803534 -:10BCE0002879082821D2FFF74BFD00280CD00C2022 -:10BCF00014E0000044000020FFFFFFFF1F000000D1 -:10BD000078080020FFFF000033782979721CFE4874 -:10BD100005F0A6FF2879401C287100202071012021 -:10BD200060710B21E170207070BD0720F6E710B53F -:10BD3000F54CC83C2078002804D038210E2001F0B2 -:10BD400073F910BDFFF71CFD002801D00C2003E0A3 -:10BD5000ED4900208839C8702071012060713821B8 -:10BD6000E170207010BDE84810B5C838017800298E -:10BD700004D00F210E2001F057F910BD00210171F0 -:10BD80000E2181700F21C170FF2181710021C943F3 -:10BD90000181DE4949680A7882728A8882814988ED -:10BDA000C18101214171017010BDD74910B5C83959 -:10BDB0000A78002A04D03B210E2001F035F910BD8D -:10BDC000D14A0088383250810120107300220A7154 -:10BDD00048713B22CA70087010BD10B5CA4CC83CEF -:10BDE0002078002804D02B210E2001F01DF910BD71 -:10BDF0000821A01D05F05CFA00202071012060716F -:10BE00002B21E170207010BD70B5BF4CC83C21786B -:10BE1000002904D031210E2001F006F970BD002167 -:10BE20004156042910D000290ED0081D0CD0001D49 -:10BE30000AD0001D08D0001D06D0001D04D00A3015 -:10BE400002D01220207104E00025084605F051FFC1 -:10BE500025713120E07001206071207070BD30B517 -:10BE6000A94D0446C83D28788DB0002805D02A2168 -:10BE70000E2001F0D9F80DB030BD102221466846E1 -:10BE800001F0DCF81022A11804A801F0D7F86846E8 -:10BE90000DF0D6FA10222C46A81D08A901F0CEF804 -:10BEA000002020710E20A0702A20E0700120607117 -:10BEB0002070E0E7F0B5944885B0C83801780029D3 -:10BEC00005D03A210E2001F0AFF805B0F0BD8E4844 -:10BED0000021C8388171FF3001304089694688806F -:10BEE00002A9FFF76AFC0124002805D0002101A85F -:10BEF000FFF715FD002852D1684681880180684609 -:10BF000002A90088FFF759FC002800D0FFDF68462F -:10BF1000008801F0BCFF050000D1FFDF039E28462A -:10BF2000303601F0C3FA604005466846767E0088E8 -:10BF300001F099FF070000D1FFDF384601F0AEFAAB -:10BF400060400246304610431ED0684601886E4865 -:10BF50005200C8388379AD005B001B1819818779BE -:10BF600003461833F95C490849003143F954FD2769 -:10BF7000867939401143F154FB26827931402943B7 -:10BF8000D1548179491C817100216846FFF7C7FCB3 -:10BF9000002804D16846018880888142AFD15A4880 -:10BFA0000021C838017144713A21C17004708CE7D6 -:10BFB00070B5554C0546C83C2078002804D0342183 -:10BFC0000E2001F031F870BD08F09FFB052804D069 -:10BFD000284608F032F9002000E00C2020710120F2 -:10BFE00060713421E170207070BD10B5464CC83CC2 -:10BFF0002078002804D00E21084601F015F810BD65 -:10C00000424906220C31A01D0EF09FFA002020713B -:10C01000012060710E21E170207010BD70B53A4CA6 -:10C020000646C83C2078251D002804D032210E2069 -:10C0300000F0FAFF70BD3146002006F0F7FB2870D3 -:10C0400000280DD100213246084607F0B9F92870C2 -:10C05000002805D12D48062231460C300EF075FA25 -:10C06000012060713221E170207070BD70B5264CE6 -:10C070000546C83C2078002804D030210E2000F06E -:10C08000D3FF70BD08F080F9002803D109F006FA4B -:10C0900000280DD0287808F0CBFF287807F012FA96 -:10C0A00000202071012060713021E170207070BD8E -:10C0B0000C20F6E7F8B5144C0646C83C2078251D40 -:10C0C000002804D017210E2000F0AEFFF8BD314645 -:10C0D000012006F0ABFB0127287000280FD1324663 -:10C0E000012107F06DF92870002808D106480622C2 -:10C0F00031468C380EF029FA03488838877067710A -:10C100001720E0702770F8BD0009002044000020CF -:10C1100010B5FE480178002904D030210E2000F02F -:10C1200083FF10BD12210171012141713E22C270B5 -:10C13000017010BDFEB5F54C05462034A07B0028EB -:10C1400004D028210F2000F06FFF05E42820207480 -:10C150000121A173A8781A2824D00EDC03000EF068 -:10C16000B5FC162F2F2F2F2F212F2F2F2F2F2F2FB3 -:10C170002F2F2F2F2F2F2121212F2A2820D00ADCEB -:10C180001E3803000EF0A2FC0C1C1C1C1C1C1C1CEA -:10C190001C1C1C1C0E1C3A3803000EF097FC0411EA -:10C1A000031103112888DA4A904209D81F20E0734E -:10C1B00028886946FFF701FB002803D0022014E01D -:10C1C000122012E068460078019F00280FD0CE3779 -:10C1D000019E00280DD0CF36684600F04BFF0028A6 -:10C1E00002D03878002806D00C20E073DAE4B437A7 -:10C1F000EEE7B536F0E701203870A87830700020FF -:10C20000E073684600F04AFFCCE4F0B5BF4C074647 -:10C21000207885B0002804D025210E2000F004FFEE -:10C2200053E6388802A9FFF7C8FAB84E002108364D -:10C2300000280CD00220207131603171E1800E2085 -:10C24000A0702520E0700120607120703DE6039D04 -:10C2500028460830503501900020A8750522304648 -:10C260000199F4F793FFA87D0028F5D13888E08084 -:10C27000E5E7FEB5A54C06462034A07B002804D097 -:10C2800010210F2000F0D0FE8CE41F20E07310205E -:10C2900020740127A77330886946FFF78EFA0028BB -:10C2A00010D1684600F0E6FE00280BD06846019DDC -:10C2B000007830350028019806D0E2300178002956 -:10C2C00009D104E0022007E08030C06BF6E720359A -:10C2D000697B002902D03A20E07363E4A97B8907D7 -:10C2E0000DD10421017068460078002804D101981E -:10C2F00031888030C06B4180684600F0CFFE00205E -:10C30000E0736F734EE4F8B5804D06462878002838 -:10C3100004D01D210E2000F087FEF4E61F202871B6 -:10C32000012068711D21E970287008F0EEF90C27D2 -:10C33000042854D0052852D0B0791224012801D005 -:10C3400000281DD13078002801D0012818D1F079BB -:10C35000002801D0012813D170886E49021F3024B3 -:10C360008A420DD2B288121F8A4209D22887B08829 -:10C370006887B0790024012804D000280CD013E08D -:10C380002C71C0E6614840308078002827D05F4A91 -:10C390003C320121084602E05F4A0021012007F0FB -:10C3A0000FF8040000D0FFDFF079012801D0002849 -:10C3B00002D107F046F80446002C01D01F2011E0FE -:10C3C0003078012802D0002803D00AE000210220A2 -:10C3D00001E00021012007F044F8002801D02F716E -:10C3E00091E6002028718EE670B5484C217800292E -:10C3F00004D01E210E2000F017FE70BD1F212171F8 -:10C40000012161711E22E270217002781221012A3D -:10C4100001D0002A04D14078002803D0012801D09F -:10C42000217170BD00260C25012A09D008F06DF994 -:10C43000052803D007F048FE002806D0257170BDFE -:10C44000618F208F07F0ADFFF6E7267170BDF0B564 -:10C450003249054603C985B02C4E0391203602901F -:10C46000B07B002804D021210F2000F0DDFD2CE559 -:10C470001F20F073212030740120B0732A88254BCF -:10C48000111F3020994252D269880C1F9C42FAD267 -:10C4900091424CD8EA89224B911F9942F3D2298AC2 -:10C4A0008C1F9C42EFD28A42F3D86A8AFF23F4336E -:10C4B0009A42EED8AA8A1A4C13460A3B241FA3427A -:10C4C000E1D2C9088A4232D9E98A2A8B9142E0D85E -:10C4D00029791220002902D0012928D102E06979A6 -:10C4E0000029F9D1297B002901D00129F5D108F0D3 -:10C4F0000CF905281AD008F008F9042816D0307D68 -:10C50000002813D106F0B7FD06490DE038080020D9 -:10C51000FF0E0000FD3F000050000020F8BC0000AE -:10C520007B0C0000FFFF0000884201D00C20AFE030 -:10C53000062104A801F00FFB04004CD003210BF0EE -:10C5400075FEF74F1B22F8780090BB7820881146C3 -:10C5500001F0D5FB042840D0002800D0FFDF208860 -:10C5600005F0CAFF20460D3000902088019004217C -:10C57000009804F09DFE019900980BF0EFFE204614 -:10C5800011300190E7A0006800900321684604F094 -:10C5900018FE00206946019A0B5C1354401CC0B27F -:10C5A0000328F8D3288A6080688AA080A88AE0805F -:10C5B0007979387907F0BAFE0146204607F0DDFEAA -:10C5C0002046002720308775C775687900280DD070 -:10C5D00001280FD10CE009205AE02088062101F043 -:10C5E000F6FA002800D0FFDF072051E0677601E06F -:10C5F0000120607620460622A91D1A300DF0A5FF05 -:10C600002046052202A90830F4F7C0FD0120C4210C -:10C61000085569460F700146684604F0D2FD694628 -:10C6200008784107C206490F920F80068918C00F8B -:10C63000081869460870401D2076092801D2083084 -:10C640002076002120460BF0F1FD287B002803D046 -:10C65000012805D0FFDF29E00021B34A012008E0CE -:10C66000AF48C0388078002814D0AD4A0121C43AC0 -:10C67000084606F0A5FE002818D0208805F03DFFEA -:10C680002088062101F0A3FA002800D0FFDF1F2038 -:10C69000F0731AE4208805F030FF2088062101F0AD -:10C6A00096FA002800D141E7FFDF3FE7287901280B -:10C6B00001D0002803D106F0C4FE00280CD1214689 -:10C6C000032006F0CEFE002806D16A88298820467D -:10C6D00007F0ECFD00280AD0208805F00EFF208826 -:10C6E000062101F074FA0028DDD0FFDF1EE7A03438 -:10C6F0002776F7735BE438B58C4C2078002804D09B -:10C7000022210E2000F090FC38BD1F202071012551 -:10C7100065712220E070257007F0F7FF052802D030 -:10C720000C20207138BD00202071684607F06CFE97 -:10C730000028F7D10098008805F0DFFE0098062158 -:10C74000008801F044FA002800D0FFDF774820304D -:10C75000057575480C380078FCF707FF38BDF8B54B -:10C76000724E05462036B07B002804D023210F20CE -:10C7700000F05AFCC7E41F20F0732320307401201E -:10C78000B0736A886A4B911F302099424BD2A988B6 -:10C790008C1F9C4247D28A4245D8EA88FF23F43353 -:10C7A0009A4240D82A89624C13460A3B241FA3426E -:10C7B00039D2C9088A4236D96989AA89914232D8C0 -:10C7C0002888062101F0F2F902270446002809D042 -:10C7D00000F041FC002805D08034E06B017800298E -:10C7E00006D101E0F7738EE4216D0978002901D0AC -:10C7F0003A2018E005218171E06B00210181E26B94 -:10C80000A8885081E26BE8889081E26B2889D0810A -:10C81000E06B028943899A4204D88279082A01D8B8 -:10C820009A4202D31220F0736DE42A884280E06BB2 -:10C830000770F17367E4FEB53C4C0546207800288C -:10C8400004D024210E2000F0EFFB7EE40126667167 -:10C850002420E070267028460BF09EFD002801D0B1 -:10C86000002000E0122020710028EED12C4F05227C -:10C87000203F38463E7729461D300DF066FE0020E9 -:10C8800038776946062001F01DF9002800D0FFDF47 -:10C89000684601F0F3F8002814D168468788684696 -:10C8A0008088062101F082F9050000D1FFDFC03544 -:10C8B0002E71684601F0E2F8002803D168468088AE -:10C8C000B842ECD1002020713FE470B5174C064609 -:10C8D0002034A07B002804D026210F2000F0A4FBE8 -:10C8E00070BD1F20E073262020740120A0733088C3 -:10C8F000062101F05BF9050009D000F0ACFB00282F -:10C9000005D08035E86B0178002906D101E00220CE -:10C9100016E0296D097800290CD03A2010E00000BB -:10C920003809002011223300500000203808002070 -:10C930007B0C000005210170E96B308848800020E5 -:10C94000E07370BD10B5FA4C2078002804D00621A1 -:10C950000E2000F069FB10BD002020710E20A07099 -:10C960000620E0700821A01D0DF04CFEA1790120E9 -:10C970000143A1716071207010BDF8B5EC4C074601 -:10C980002034A07B002804D02C210F2000F04CFB89 -:10C99000C3E41F20E0732C2020740120A07338888A -:10C9A000062101F003F906000AD000F054FB00282C -:10C9B00006D035468035E86B0178002906D101E0C4 -:10C9C00002201FE0296D0978002901D03A2019E0E2 -:10C9D00060363179002917D00822B91C001D0DF0EE -:10C9E000B4FDE86B79898181E86B394610220C31FE -:10C9F0000E300DF0AAFDE96B03200870E96B388852 -:10CA000048800020E07388E40C20FBE770B5C84E36 -:10CA1000044630780C25002804D018210E2000F0A0 -:10CA200003FB70BD07F01CFF03285BD007F01EFF5F -:10CA3000032857D06079002801D001282DD1A07992 -:10CA4000002801D0012828D1A07B002805D001288A -:10CA500003D0022801D003281FD1607B00281CD0FE -:10CA6000C0081AD1628801208003824202D821883E -:10CA7000814203D9207901280FD119E020790028BB -:10CA800006D0012814D0022805D0032805D102E0E1 -:10CA9000202A0BD30CE0A0290AD22079042805D142 -:10CAA0002088202802D36188884201D9122519E004 -:10CAB0009F482179203081756079002802D00128B3 -:10CAC00004D00FE09B4A0021204608E098484030FF -:10CAD0008078002806D0964A01213C32204605F095 -:10CAE00031FE05460120357170711821F1703070EA -:10CAF00070BD10B58E4C2178002904D01A210E206B -:10CB000000F092FA10BD01781F2902D9122020717D -:10CB100006E0002121710278411C104605F0ACFEB0 -:10CB2000012060711A21E170207010BD10B5804C99 -:10CB30002178002904D020210E2000F075FA10BDC4 -:10CB400001781F2902D91220207106E000212171ED -:10CB50000278411C104605F081FE01206071202101 -:10CB6000E170207010BDFEB5714C2178002904D011 -:10CB70001B210E2000F058FA67E6012161710C219B -:10CB8000217100780026012803D000286BD01220E4 -:10CB90005CE005F0A5FD002859D065482030807D77 -:10CBA000002816D0012814D0042812D007F05EFE09 -:10CBB000002875D107F054FE002803D007F050FE7E -:10CBC00002286DD1002008F036FA002849D0FFDF96 -:10CBD00047E007F045FE002862D107F047FE002835 -:10CBE0005ED105F022FD5449884259D1072101A8A0 -:10CBF00000F0B1FF4F4905460C398860280000D18C -:10CC0000FFDF032128460BF0B7FA284605F0CEFED9 -:10CC10004A4F797A387A07F02CFE0146284607F009 -:10CC20004FFEF87900901B22BB792888114601F04D -:10CC300066F800280CD0042800D0FFDF28880721E0 -:10CC400000F0C5FF002800D0FFDF0720207127E09B -:10CC5000288805F051FC284608F0EDF9002800D09E -:10CC6000FFDF26711CE007F0FBFD032803D007F06F -:10CC7000FDFD032814D107F0F6FD0546002008F05D -:10CC800007F900280CD12671002D09D0288805F05D -:10CC900034FC2888072100F09AFF002800D0FFDF2D -:10CCA0001B20E07001202070CFE5F8B5204D06462E -:10CCB0002878002804D02D210E2000F0B5F959E580 -:10CCC0003088072100F072FF0127002822D0044697 -:10CCD000C034617C00290AD13C21095C0F2901D0B4 -:10CCE000102904D1FF210531095C00290AD00C204C -:10CCF00028710E20A8702D20E8703088E8806F71B0 -:10CD00002F7037E51022B11CD2300DF01EFC677475 -:10CD10000020EDE70220EBE770B5054C05462078D2 -:10CD200000280DD02E210E2000F07EF970BD0000ED -:10CD30003808002050000020FFFF000038090020C4 -:10CD40002888072100F032FF0222002810D0014677 -:10CD5000C0314B7C002B05D12030007F0F2804D040 -:10CD6000102802D00C20207103E04A740020FAE75A -:10CD700022710E20A0702E20E0702888E080012013 -:10CD800060712070D2E77CB5CB4C05462078002836 -:10CD900004D037210E2000F047F97CBD2888694671 -:10CDA000FEF70BFD002807D00220207101206071E2 -:10CDB0003721E17020707CBD01987F220146303020 -:10CDC0000272427200228272A87820310872E878DA -:10CDD0004872287988722271E8E71CB5B64C217830 -:10CDE000002904D013210E2000F01EF91CBD00887C -:10CDF0006946FEF7E2FC002801D0022005E0019917 -:10CE00002820405C012802D00C20207106E0382048 -:10CE100000222271405C20720888E080012060714D -:10CE20001321E1700E21A17020701CBDF8B5A24C39 -:10CE300005462078002804D035210E2000F0F4F8B3 -:10CE400098E4A878002801D0012804D1A888FF21FF -:10CE5000F531884201D9122020712888072100F07D -:10CE6000A5FE0126002813D001460027C0310F720D -:10CE7000AA884A81A0300671AA78012A00D000222F -:10CE80000A724079002801D008F0F1F9277101E019 -:10CE90000220207166713520E07026706AE4F8B5D2 -:10CEA000854F04463878002804D03C210E2000F03D -:10CEB000BBF85FE42088072100F078FE06002DD043 -:10CEC000B58864886800F2887188401C844217D352 -:10CED0007A484143800050430DF0B1FB401EFF21D2 -:10CEE00080B2F531884200D90846844200D22046FB -:10CEF000691C401C0DF0A3FB6D1C6843401E85B2ED -:10CF0000F020805D002800D13584FD80002038713C -:10CF1000012078713C21F97038702BE40220F6E78B -:10CF200070B5654C05462078002804D033210E20CA -:10CF300000F07AF8FAE607F093FC002801D00C2004 -:10CF400018E02978002911D00A290FD014290DD012 -:10CF50001E290BD0282909D0322907D04B2905D00A -:10CF6000642903D0FF2901D0122003E0284608F0ED -:10CF7000F8F800202071012060713321E1702070E9 -:10CF8000D4E610B54C4C2178002904D03F210E2066 -:10CF900000F04AF810BD002121710178002909D064 -:10CFA00001290BD012202071012060713F21E17016 -:10CFB000207010BD0422411C414803E0411C404840 -:10CFC0000422001D0DF0C1FAEEE770B53A4C05469B -:10CFD0002078002804D03D210E2000F025F8A5E699 -:10CFE00007F03EFC002803D107F040FC002801D0E8 -:10CFF0000C2003E0287805F04BFC00202071012074 -:10D0000060713D21E170207090E610B501784029F3 -:10D0100008D22C4A89005158002903D0801C884727 -:10D02000012010BD002010BD234A2032537C002B6C -:10D0300003D19074D17401205074704730B51346F9 -:10D0400006E0CC18203CD51AE47F5B1E4455DBB2C9 -:10D05000002BF6D130BD4921095C002908D1803070 -:10D06000017E002904D0007E042801D001207047F1 -:10D070000020704701784068002905D04030407A90 -:10D08000002802D000207047E5E7012070470A49D8 -:10D0900000208031886740310871704710B50178F1 -:10D0A000012908D14068A0304179002903D000212E -:10D0B000417108F0DCF810BD38080020C4090000F8 -:10D0C0003A09002078AC01003D3070470818C01DB7 -:10D0D00050433D31401880B2704770B51D4606463A -:10D0E000A818049BC01D2C4658433D34001984B237 -:10D0F000A14200D2FFDF1C2130460DF083FA1C3C18 -:10D10000A0B201213575C9033080884200D9FFDF04 -:10D1100070BD00887047F0B5044684B01C300390A1 -:10D12000019015460E46A288E188570448047F0CFA -:10D13000400CB84208D1C90BD20BC903D2039142AB -:10D1400002D0002004B0F0BDB8421AD9217DC01B26 -:10D15000401AC01F85422CDC0198C91DC01909184E -:10D16000C91E716035810021F1603182021D32607B -:10D1700005702A0A42708170C1700120A07404B049 -:10D18000F0BD2188227DC91B891AC91F0091029018 -:10D190000FD41B2900DAFFDF0098854201DC294605 -:10D1A00000E081B2681A0204120C06D00298824292 -:10D1B00003DD0020A07404B0F0BD237D0198DB1DC9 -:10D1C000C0191B18DB1E73603181039BF360328230 -:10D1D000031D33600170090A41708270110AC17029 -:10D1E0000120A07404B0F0BDF8B504460246808862 -:10D1F000A37C40041C32400C002B0BD0101842784A -:10D20000037812021A43C37885781B022B43D31884 -:10D210008B4201D20020F8BD00268A4206D301705D -:10D22000090A41708670310AC17014E0891A8DB202 -:10D23000290A8570C170002D0DD0A088271D4004DB -:10D24000400CA84200D2FFDF39880120C003884388 -:10D25000284338800BE041780278237D0802104390 -:10D26000DB1D181881B22288201D00F0DAFAA6749E -:10D270000120F8BDF0B40446468803468588700452 -:10D280001C34400C2018AE4203D10020D881F0BCE1 -:10D290007047457807785E892D023D43AE4209D339 -:10D2A000761BC57880782D020543A81B85B23019FE -:10D2B000C01E05E0AC1BA5B21C7DA4192018001DE2 -:10D2C0000C88AC4200D90D805C89002C05D000246C -:10D2D00014700988D981F0BC70470124F8E7F8B5CB -:10D2E0000446014640881C314004400C4518E08942 -:10D2F000002837D06189081880B2608169782A785F -:10D3000009021143EA78AB7812021A438918814264 -:10D3100000D2FFDF6878297800020843E978AA780C -:10D320000D021543628941190027914218D1002D41 -:10D330000DD06088A61C4004400CA84200D2FFDF3C -:10D3400031880120C00388432843308007E0237DD3 -:10D350002288DB1D181881B2A01C00F062FA6781D8 -:10D36000E7810120F8BDF0B504468AB01C30039077 -:10D37000218967880026B94244D0254608354804EB -:10D380000399400C0918C8788A78000210430ED01F -:10D39000009029884904490C814200D2FFDF298886 -:10D3A0000120C003884300990843288025E04A787B -:10D3B000207D09782B8812020A43C01D9C468118E3 -:10D3C0005B045B0C2288591889B291420DD2521A23 -:10D3D00092B21B30824204D201206146C0038843CE -:10D3E0000AE06046C00BC00305E0881A81B2012044 -:10D3F0006246C003904308432880761C2189B6B258 -:10D40000B942BCD130460AB0F0BDF0B50B46C58874 -:10D410000146044683B000896E041C310090760CEE -:10D42000608889190E46854202D1002003B0F0BD04 -:10D43000002A01D0081D1060002B04D0227D311D70 -:10D4400018460DF082F87078317807020F43F078B3 -:10D45000B1780002084311D0C1198FB20190E18860 -:10D46000A61D4904490C814200D2FFDF318801200A -:10D47000C003884301990843308007E0237D228858 -:10D48000DB1DD81981B2A01D00F0CBF900988542B0 -:10D4900001D1E0882081384603B0F0BD4188808802 -:10D4A000814201D101207047002070474188C08827 -:10D4B000884201D10120704700207047F0B44588B0 -:10D4C000838804466A041C34520C5904490CA6187B -:10D4D0009D4222D04389C48937781D1973781C0274 -:10D4E000F378B6781B023C433343E618B54217D3B2 -:10D4F000002B02D08B4213D30FE0037DD21D1C19E9 -:10D50000A218008892B2801A80B22233984202D2C6 -:10D51000002902D004E08A4202D1F0BC002070470A -:10D52000F0BC01207047F0B48588C68802466C04C0 -:10D530007304640C1C305B0C0719A34208D1F60B72 -:10D54000ED0BF603ED03AE4202D00020108228E07E -:10D55000A34206D9157D1B1B5B1BDB1F9C460023CA -:10D5600005E01588167D2D1BAD1BED1FAC466546ED -:10D57000002DEADB9589002D16D07D783E782D02AE -:10D580003543FE78BF7836023E430DD09C1B002306 -:10D59000D3748C4204DB93891818401BC01E18E01A -:10D5A0001382F0BC002070476646771B0026D674B5 -:10D5B0008F4206DB137DDB1D1B1994892018181878 -:10D5C00006E08B4208DB0123D37493891818401BB3 -:10D5D000C01E1182F0BC70471682E2E7F7B5044620 -:10D5E0000546808882B04004400C1C352E180190FE -:10D5F000208A002802D00399884202D2002005B078 -:10D60000F0BDA189002913D0707832780702174342 -:10D61000F078B2780002104300903818814200D0B0 -:10D62000FFDFE07C0099014305D000283FD048E0AF -:10D6300000270097F5E7A08900280CD0217D019AEA -:10D64000C91D891840190818617DC01E0170A17D8F -:10D650004170E17D81700398A289039938185118AF -:10D66000A1813070000A70700027B770F7700498BD -:10D6700000280DD07078237D317800020843DB1D2F -:10D68000181881B22288201D00F0CBF8A78143E052 -:10D69000207D0199C01D4018A18949194018C01E5C -:10D6A000017861754178A1758078E07534E0A089D2 -:10D6B000617D4019C01BC01E0170A17D4170E17DDC -:10D6C000817003990098A28940185118A181377080 -:10D6D000390A80B27170B070010AF1700646049880 -:10D6E00000280FD0A088251D4004400CB04200D275 -:10D6F000FFDF29880120C0038843304328800020B1 -:10D70000A08109E0A0894019C01BC01E0178617585 -:10D710004178A1758078E07500202082A0740120F6 -:10D7200005B0F0BD30B4458802466B041C328488D5 -:10D730005B0CD318A54202D04489002C02D030BC27 -:10D74000002070471C1D0C60007DC01DC018C01E4D -:10D75000486058781C78000220430881CA60DC7851 -:10D760009D7823022B430B82002803D1D21E4A60EE -:10D770000B81088230BC0120704770B50246418899 -:10D780000446838848041C32400C1218994205D084 -:10D790006189002902D1E189002901D0002070BDF2 -:10D7A0005178137809021943D37892781D021543F2 -:10D7B0000DD0A61CA84200D2FFDF31880120C00393 -:10D7C0008843284330800020E081012070BD237D04 -:10D7D0002288DB1D581881B2A01C00F022F8F2E765 -:10D7E00000218181C1740182817470478289002A7D -:10D7F00001D10020704730B4828803465204520C95 -:10D800001C339A185478157824022C4304D0037DD5 -:10D81000121D9A184A6001E0DB1E4B60808930BC03 -:10D82000704730B405886C04640C61188CB2012117 -:10D83000C90394420AD2121B92B21B339A4201D2FC -:10D84000A94307E0E90BC903214303E0A21A92B2FE -:10D85000A9431143018030BC70470000FFB5264941 -:10D86000D21C0A401E4604461546002809D000274F -:10D87000E01C80088000A04200D0FFDF201D0121B5 -:10D880000DE00127F4E702464019002F05D1B1420F -:10D8900001D2034600E000231360491CC9B2B14223 -:10D8A000F1D9011B0198002F016005D1002E01D094 -:10D8B000201D00E000202060FFBD01460A68002016 -:10D8C000002A02D0104612680A60704702680A6097 -:10D8D00001607047084B10B5C91C101A1940001F91 -:10D8E0000CF0BBFEC0B210BD034BC91C1940514324 -:10D8F000001D081870470000FCFF0000FEB5D14C69 -:10D900000546A0780E46A84200D8FFDFB0000719F0 -:10D910000190A800B96A00900858002800D0FFDFE5 -:10D92000B868FFF7CAFF04000DD0B96A0098062E48 -:10D930000C500AD0082E00D3FFDFC34901980A58C3 -:10D940002146284690472046FEBDBE48BF4B7A3050 -:10D95000024600902E3A2146284608F008FEF2E7DB -:10D96000FFB581B00A98019F18181E46C4B2002F57 -:10D9700007D00025FF2800D9FFDF0298002803D137 -:10D9800001E00125F6E7FFDF0198C01C810801983E -:10D990008900814200D0FFDF0A990398884200D9AC -:10D9A000FFDF002D0BD1A74900204C310870A84A99 -:10D9B0004A80A6490870A3497A3108704A80A14874 -:10D9C0000399017046708470C470047144710A999F -:10D9D0008171C6710026FF1CB80880000746002D23 -:10D9E00003D19849B20051188860974972004031BC -:10D9F0008A5A9449002D8B5D00D000206946FFF7BC -:10DA00002DFF0099761C7F18F6B2082EE3D3FF1C79 -:10DA1000B808800023460646002D0FD000200222C1 -:10DA20006946FFF71BFF009831180020A2009646B8 -:10DA3000C91C8A089200002D03D012E08149886435 -:10DA4000EDE78049860071188C468A6200210B46FA -:10DA500005E066468F00B66A491CF351C9B2A1427F -:10DA6000F7D37146401C5118C0B20828E0D3019882 -:10DA7000081A02990880002005B0F0BD70B5044670 -:10DA800003F021FF002801D0102070BD20786D4ADE -:10DA900080008018618892780FE0836A8D005B595E -:10DAA000002B08D04A1C6280A180806A89004058FF -:10DAB000A060002070BD491C89B28A42EDD8618007 -:10DAC000052070BD70B505460C46084603F0FBFE08 -:10DAD000002801D0102070BD082D01D3072070BD93 -:10DAE00025700020608070BD0EB56946FFF7EAFF23 -:10DAF000002800D0FFDF6846FFF7C0FF002801D0F4 -:10DB000000200EBD01200EBD10B50446082800D32C -:10DB1000FFDF4C48005D10BD3EB505460024694658 -:10DB2000FFF7D0FF002803D0FFDF01E0641CE4B260 -:10DB30006846FFF7A3FF0028F8D02846FFF7E4FF68 -:10DB4000001BC0B23EBD3F498978814201D9C0B2B5 -:10DB50007047FF207047F8B50C460546062901D0EE -:10DB6000072C0FD1374FB86CFFF7A7FE384E0200D5 -:10DB700004D00221B86CFFF7ADFE00E030462880EB -:10DB8000B04201D10020F8BD2146FFF7B7FE0400E6 -:10DB900002D1288800F049F82046F8BD2C4A90426E -:10DBA00001D0082901D300207047A7E6284A9042F7 -:10DBB0000BD0082909D2234A9378834205D98900DA -:10DBC0008918896A80000858704700207047F8B5A6 -:10DBD0000D4604461E491F488C4202D0082D01D331 -:10DBE0000720F8BD174A9178A142FAD9A9008F18E9 -:10DBF000A200BB6A00929E58002EF2D0124A204624 -:10DC000020325258314690470020BA6A0099062DBA -:10DC1000505001D0072D02D1204600F006F83146C1 -:10DC2000B868FFF753FE0020F8BD10B5054CC2B22E -:10DC30000221A06CFFF758FE0146A06CFFF746FEDC -:10DC400010BD00004809002078AD010056000020FA -:10DC5000FFFF000002300000014610B59F4800227F -:10DC600000680260037A9B001818C26001821146A6 -:10DC70000C3000F022F910BDFFB5002781B0154629 -:10DC80000446002826D00026E01C80088000A04220 -:10DC900000D0FFDF002D2DD00120FFF715FA0C99E1 -:10DCA0006843CA000A99511847180120FFF70CFA77 -:10DCB0006843C1190B98C20004981018081806216F -:10DCC00069430818A90014300818081887B2002EF4 -:10DCD00002D00FE00126D7E7781A0C3886B27F48C9 -:10DCE0000460204625720C3060600CF08DFC3046DC -:10DCF000FFF7B2FF02980780002005B0F0BDFFB526 -:10DD0000764C0546206883B0002800D1FFDF2068EC -:10DD1000017AA94205D9A900426801915158002908 -:10DD200002D06F4807B0F0BD0068002800D1FFDFC7 -:10DD300001210C9A0598FFF7C9F96A4EC51C3540B8 -:10DD40000121069A0498FFF7C1F9C01C30400290E7 -:10DD50004019001D86B2614800270068046801E090 -:10DD6000274604462068002807D0A188B142F7D191 -:10DD70003946204600F0AAF813E030460830A18862 -:10DD800080B2814229D33946204600F09FF8A0880E -:10DD90000022811BA01902608180394600F08DF8B5 -:10DDA000A680A088608025802946201D0C9D059AAC -:10DDB000064601230095FFF790F92088069D8019FB -:10DDC0000123049A02990095FFF787F943480068F8 -:10DDD000416801980C500020A4E70420A2E770B528 -:10DDE0003E4C06462068002800D1FFDF2068017AFB -:10DDF000B14210D94568B300E85800280BD04188DB -:10DE00000022EA5002608180114600F056F8216835 -:10DE100000200A7A08E0324870BD4B6884001B5924 -:10DE2000002B0DD1401CC0B28242F6D8002002E087 -:10DE30008A88101880B209680029F9D1FFF70CFF11 -:10DE4000002070BD70B5254D286800280AD0002438 -:10DE500004E02046FFF7C3FF641CE4B22868007AA0 -:10DE6000A042F6D870BD70B51C4E0546306800243F -:10DE7000002800D1FFDF3068017AA94205D9406847 -:10DE8000A9004058002800D0041D204670BD70B580 -:10DE9000124E054630680024002800D1FFDF3068AC -:10DEA000017AA94207D94068A9004158002902D047 -:10DEB0000888091D4418204670BD002903D00A684F -:10DEC00002600860704705490968F8E700680029A2 -:10DED00001D00860704701490968FAE75C0000203A -:10DEE00002300000FCFF000070B5044600780E46CA -:10DEF000012819D0072802D00C2819D114E0A068F5 -:10DF0000216905780B2D0BD0052003F080FC052D31 -:10DF10000ED0782300220520216903F0E9FB07E0F9 -:10DF2000782300220620F8E70520216903F06FFC22 -:10DF30003146204601F094F970BD30B5411D0246CE -:10DF4000393294780325C379ED432C432340C371C0 -:10DF5000DB070DD04B79547923404B710B79127943 -:10DF600013400B718278C9788A4200D9817030BD24 -:10DF700000224A710A71F5E74178012900D00C218D -:10DF800001707047F7B58CB00D468C69002069466A -:10DF900008732878012716462A287CD243007B4440 -:10DFA0009B885B009F442900F9023F0352038C03C6 -:10DFB0009C03B803E80300042C04560476048F0481 -:10DFC000D404E30405050D052D0557058305A805B3 -:10DFD000D305EF05F9051B062C063C0663068306F0 -:10DFE000D2060607160740075C0772078407BD07BD -:10DFF000F4071F08DD07E107E607002C02D02078B0 -:10E000001D282BD0A8680190002844D00121684623 -:10E010000173686A07900321684601740A214174FC -:10E02000286A0590A8880028EFD00199097800296E -:10E0300014D00F2912D20B000CF048FD0FFE14462D -:10E04000D9FDFCFBFAF9F8F70990F6F5FE00022875 -:10E0500021D1002C04D020780C2801D000275AE3CD -:10E060000220B7E10620696A03F0D1FBA8880728DF -:10E07000EED1204601F0EEF8022809D0204601F04A -:10E08000E9F8032808D9204601F0E4F8072803D26C -:10E090000120207005E00CE2002CB6D02078012889 -:10E0A000D6D101980079C11F0A2901D30A2053E073 -:10E0B000A07020460722383001990CF046FA012062 -:10E0C0002870032020703BE00728C1D1002C9CD091 -:10E0D00020780D28BCD101982146C2782031C87E15 -:10E0E00010400007C00F01D00E2000E00F20920763 -:10E0F00007D1019A52790242D8D1019A927902420B -:10E10000D4D1019A4B7F527907469F433A42CDD1F1 -:10E11000019A897F927988430242C7D10198007998 -:10E12000C11F0A29C2D2617F81427BD80722201DEC -:10E1300001990CF00AFA012028700E2020700320AB -:10E1400069460873686A0790204639300490601D5C -:10E15000059017300690F2E02877F0E3E9880891FF -:10E16000412885D1204601F075F8042802D1E078D5 -:10E17000C00704D1204601F06DF80F2890D108980F -:10E1800040210F1A01993A46606A491C0CF0DDF9EA -:10E19000606AE968C019089A0CF0D7F90E20694640 -:10E1A0000873686A0790606A0490002103A8FFF76B -:10E1B0009BFE2078042809D0A07F002813D00128D6 -:10E1C00011D0032811D01020207079E00520207094 -:10E1D000032028700A2168460173686A079041216C -:10E1E00068460174ABE011202FE11220ECE7112802 -:10E1F000B7D1204601F02EF8042802D1E078C007FC -:10E200000FD0204601F026F8062805D1E078C00797 -:10E2100007D1A07F022804D0204601F01BF8112866 -:10E220009FD10AE0E4E1BBE08BE08CE16BE14DE1E2 -:10E230000FE1F0E0D7E019E0ADE1019920461022AE -:10E240004830491C0CF081F9607801280CD012206C -:10E250002070E078C00704D0A07F002830D00128CB -:10E260002ED00A202870F3E30720ADE7112885D1CE -:10E27000204600F0EFFF082804D0204600F0EAFF17 -:10E280001328B5D1286900281ED0686900281BD042 -:10E290002046019978301022491C02900CF055F963 -:10E2A0002078082814D014202070E078C00711D0FE -:10E2B000A07F022825D0617802291ED00328D0D162 -:10E2C00004202870052006E2002069460873F0E06B -:10E2D0000920E9E70B202870296902204870206C8A -:10E2E00048600298886020463830C860201D086168 -:10E2F000206B4861606B8861A4E3002801D001288D -:10E3000070D10B2028702F6908207870606A7860BF -:10E31000206AB86002985AE2206C0CF077F9E17834 -:10E320008906C90E491EC840C007C00F803000E0F2 -:10E3300000203874E06A78615EE20746FAE331460D -:10E34000F9E31128C3D1204600F084FF0A2802D146 -:10E35000E078C00704D1204600F07CFF1528B6D134 -:10E360000199204610224830491C0CF0EEF8207824 -:10E370000A2810D0162020701220287029690A203F -:10E380004870204658304860203088601038C86097 -:10E39000206C0861A8E30B202070D7E22870B9E157 -:10E3A000022894D1204600F055FF042804D32046CB -:10E3B00000F050FF082809D3204600F04BFF0E283C -:10E3C00085D3204600F046FF122872D2A07F022893 -:10E3D000B8D1112069460873686A0790019840789F -:10E3E0000874FBE355E20228ACD1204600F032FF6E -:10E3F00000285ED0204600F02DFF0128F9D02046ED -:10E4000000F028FF0C28F4D0052069460874019814 -:10E41000407848745BE71128FCD1002CFAD02078B2 -:10E420001728F7D16078E16A022810D0002018225E -:10E4300050431830085801991022491C0CF085F8F7 -:10E440000520696A00F0FAFE1820207006E6012017 -:10E45000EDE70B28DED1002CDCD020781828D9D1AC -:10E460006078E16A022825D000201822504310303D -:10E470000958019842780A70807848706078E16A9B -:10E48000022819D00020182250431430085801994E -:10E490000822C91C0CF059F80520696A00F0CEFE6C -:10E4A000607802280AD000210919497A49084900F0 -:10E4B0006AE0ACE10120D8E70120E4E70121F3E7BD -:10E4C000012000E000200019417286E31128A1D14B -:10E4D000002C9FD0207819289CD16078E16A02280E -:10E4E0000FD00020182250431C30085801991022E8 -:10E4F000491C0CF02AF80520696A00F09FFE1A20DA -:10E50000A3E70120EEE7082884D1002C86D02078EC -:10E510001A2886D10198E16A40780870E06A01996A -:10E520000622401C891C0CF010F80520696A00F0D6 -:10E5300085FE6078022804D000210919497AFD225D -:10E5400021E00121F9E7112884D1002C84D0207822 -:10E550001B2884D16078E16A022818D00020182294 -:10E5600050432030085801991022491C0BF0EDFF50 -:10E570000520696A00F062FE6078022809D0002157 -:10E580000919497AFB22114002289BD198E7012002 -:10E59000E5E70121F4E70720DEE53078012896D190 -:10E5A0001C22A0187168F2F7F1FD3B21E079095DAA -:10E5B0000840E17800074908C00F49000843E070AF -:10E5C000217F002901D0297721E1217803290BD06F -:10E5D000C00700D174E6032028700A20694608733A -:10E5E000686A07904120AFE3607FA178884201D933 -:10E5F0000620B1E502272771E1792046C906C90E38 -:10E60000E171617A0907090F6172A17A0907090F9F -:10E61000A172FFF792FC2F700A2069460873686A9E -:10E620000790072090E330781228CDD10720087397 -:10E63000696A079191680591694608820722211D40 -:10E6400005980BF082FF04202070C7E2F088089044 -:10E6500030781228B8D1072168460173686A07909C -:10E66000301D07C804AB07C34121684601820598E5 -:10E670000C21017008994022521A1746401C216A49 -:10E680000BF063FF206A089AC119F0680BF05DFF78 -:10E69000002103A8FFF728FCE078C1210840801C76 -:10E6A000E0702078052801D00F20CEE6A07F00285A -:10E6B00000D1D9E50128FCD0032874D10820C4E694 -:10E6C00030780328B1D120460822683071680BF0F9 -:10E6D0003CFF0520287069460873686A07902EE69B -:10E6E00030780328A1D120460822703071680BF0E1 -:10E6F0002CFF206C00283DD1A07F002805D00128E8 -:10E7000003D0062028700420E5E707202870F94888 -:10E71000206460640327F0E33078022885D13079E3 -:10E72000002873D1A07F022802D0032805D021E061 -:10E73000B06800286BD020641BE06078012806D008 -:10E740003A21A079095D012805D0EA4806E03A207F -:10E75000A179005DF7E7B0680028EBD02064E0788D -:10E76000C00701D0012901D0E24802E0F06800288A -:10E77000E0D06064072011E60A200873696A0791F7 -:10E78000E178C9070AD06178022904D1A17F002964 -:10E7900005D0012903D0A17F032900D008202870CB -:10E7A0001120694655E1CBE0307812288AD1B06853 -:10E7B000286209202870E0782F69C0070DD0082052 -:10E7C0007870206A7860606AB86020466830F860C7 -:10E7D000A07F022800D0ABE59EE502207870206C77 -:10E7E000786020466830B8603038F860201D3861A5 -:10E7F000206B7861606BB861686A3946786223E1A2 -:10E80000E0783178C00703D0072002E0D7E0AFE21C -:10E810000B208142CAD12078072819D011202070FE -:10E82000072069460873686A0790286A05901120D6 -:10E83000088205980321017051681022401C0BF0DA -:10E8400084FE002103A8FFF74FFB0020286205E4A7 -:10E850000820E4E730781228A8D107200873686AF6 -:10E860000790906805901120088205980421017096 -:10E87000214610226831401C0BF067FE002103A8DE -:10E88000FFF732FB2078092801D01320DDE50A20AC -:10E89000207016E0E1783078C90701D0072100E048 -:10E8A0000B218842B6D120461022483071680BF007 -:10E8B0001FFE002801D004204EE42078092800D152 -:10E8C000CFE40C206AE5E078C1073FD0A17F0129A1 -:10E8D00002D002291DD035E00D20287029690B20B7 -:10E8E0004870607801280BD0206A4860606A8860B0 -:10E8F00020466830C86010300861E06A4861A1E0D5 -:10E90000606A4860206A886020467830C8601038A5 -:10E91000F2E78106C90E142914D20621C84101214B -:10E92000C90640181A21C841E0706078012807D054 -:10E9300010202070042028700520694668E162E3F9 -:10E94000062082E56078012800D17FE50E2025E5CC -:10E9500030780A28A6D1287010200873686A0790BA -:10E9600050680490002103A8FFF7BEFAEAE7E078B8 -:10E97000C0070AD0A07F012803D10F2028700420EF -:10E9800046E1102028700F2042E1152028702969E7 -:10E9900003204870206C48606078012804D020462D -:10E9A00078308860103881E2204668308860103006 -:10E9B0007CE230780228CDD130790028E1D0287768 -:10E9C0001EE330781428FBD1112028702969092012 -:10E9D000487070684860607801280DD02046683023 -:10E9E00088601030C860206B0861606B4861204609 -:10E9F00058308861A06A22E020467830886010385C -:10EA0000F0E730780828DBD16078012801D01320A6 -:10EA1000DBE1A178A06A10224018511A0BF0F2FD38 -:10EA20001220287029690A20487020465830486012 -:10EA3000203088601038C860206C08614DE0C861E3 -:10EA4000E06A0862686A48620C9800F020FC74E48E -:10EA500027E00874DFE030780928B1D12046102281 -:10EA6000483071680BF044FD002801D00B2093E57D -:10EA700020780B2812D02046FFF75FFAA178A06A11 -:10EA800010224018511A0BF0BDFD162028700820E6 -:10EA900069460873686A0790002070E013202870A8 -:10EAA0000A2069460873686A079011204CE13078A3 -:10EAB000122885D1B06828621420287029690A209C -:10EAC0004870204658304860103088601030C86068 -:10EAD000606C08616078012806D0204639304861B2 -:10EAE000206B8861606BAAE7601D4861606B88617C -:10EAF000206BA4E796AE010030780928ADD107203D -:10EB00000873686A0790286A0590112008820598A2 -:10EB10000D2101701022401C71680BF016FD0021C0 -:10EB200003A8FFF7E1F9002028626178012903D0EA -:10EB300015208AE454E26FE01621297008216A4604 -:10EB40001173696A07910490A0781075C7E5307851 -:10EB50000C28AED1162028706078022802D12046F9 -:10EB6000FFF7EBF9A178706810224018511A0BF0EA -:10EB700049FD082069460873686A07907068049028 -:10EB8000A0780875ABE53078102892D1E079C007FD -:10EB900076D01720287009203AE03078112888D1E3 -:10EBA00020461422311D1C30F2F7F0FAE06A218D64 -:10EBB0004172090A8172E16AA078C871E179E26A5A -:10EBC0008907890F1172E16A627A0A73E16AA07A91 -:10EBD000203108716078012872D0A0E12CE26078C1 -:10EBE000022801D0012000E000200019407AC0076F -:10EBF00004D0E078C00701D11920E6E01E20BAE574 -:10EC000030781228A5D1B06828621A202870052013 -:10EC10000873686A0790114603A8FFF765F916E7BD -:10EC20003078032895D16078E16A022801D001206C -:10EC300000E0002018225043143008580822716860 -:10EC40000BF083FC1B2028702969062268694A7032 -:10EC5000626A4A606278E36A022A01D0012200E017 -:10EC6000002218277A4314329A588A601EE13078BD -:10EC70000F287DD16078E26A022802D0012001E0ED -:10EC800076E1002018214843103010580223093241 -:10EC9000716809F057FF1C20287029690520487009 -:10ECA000206A4860E06A09308860F948FEE0307800 -:10ECB0000E285DD16078E16A022802D0012001E0CF -:10ECC0004BE100201822504318300858A278716890 -:10ECD0000BF03BFC6078E16A022801D0012000E0E3 -:10ECE00000201822504318300858A17810224018EC -:10ECF000511A0BF087FC072069460873686A079071 -:10ED0000286A059011200882059806210170617813 -:10ED1000E26A022901D0012100E0002118235943B1 -:10ED2000183151581022401C0BF00FFC002103A891 -:10ED3000FFF7DAF8002028621D2028700A206946B3 -:10ED40000873686A07900B200874C8E430781228AA -:10ED50000ED1072168460173686A07909068059094 -:10ED60000B2268460282059801706178E26A00E031 -:10ED7000A7E0022901D0012100E000211823594316 -:10ED8000103151580A784270497881706178E26A8E -:10ED9000022901D0012100E0002118235943143138 -:10EDA00051580822C01C0BF0D0FB002103A8FFF72C -:10EDB0009BF823E76078022801D0012000E00020C2 -:10EDC0000019407A800703D51F2028700A2055E0DB -:10EDD0002120D0E43078122873D107200873686AA4 -:10EDE0000790B068059011200882059808270770E1 -:10EDF0006178E26A022901D0012100E00021182394 -:10EE000059431C3151581022401C0BF09EFB00212D -:10EE100003A8FFF769F8202028700A2069460873C4 -:10EE2000686A07900F745AE43078122849D1072095 -:10EE30000873686A07909068059008200882059812 -:10EE400009210170E169062209784170E169801C9D -:10EE5000491C0BF07AFB002103A8FFF745F8B7E740 -:10EE60006078022801D0012100E000210919497AC7 -:10EE7000490708D5222028700A2069460873686A65 -:10EE800007901120E5E5012849D068E03078122884 -:10EE900017D1B0682862232028702969052048709E -:10EEA000206A4860E06A093088607A48C860C9E52D -:10EEB00030780E2805D16078E16A022802D001205E -:10EEC00001E064E00020182250432030085810224E -:10EED00071680BF03AFB072069460873686A07906F -:10EEE000286A05901120088205980A21017061782E -:10EEF000E26A022902D0012101E0A2E000211823E8 -:10EF00005943203151581022401C0BF01EFB0021A8 -:10EF100003A8FEF7E9FF002028626078B3E7242009 -:10EF200029E4607802280BD000200019407AC1073C -:10EF300002D0E178C90705D0810705D51920A5E4DD -:10EF40000120F2E71720A1E4400701D51B209DE432 -:10EF50001C2020706078012801D018200BE42720A5 -:10EF600009E4282028700B2052E63078132847D176 -:10EF70002920A7E42078012842D00C2840D0204640 -:10EF8000FEF7FAFF0C2069460873686A079037E0BD -:10EF90003078122805D013201070032726202870FF -:10EFA0004FE0072168460173686A0790B0680590D2 -:10EFB000022168460182059805210170297F417070 -:10EFC000002103A8FEF790FF0B2168460173686AD1 -:10EFD0000790314603A8FEF787FF074626202870D2 -:10EFE000012F0DD02DE0012168460173686A07905A -:10EFF000042168460174297F41740020287713E0BA -:10F00000287F002810D01D202070252028700A207D -:10F0100069460873686A079002200874314603A89D -:10F02000FEF762FF07460CE0002C01D0FE202070A6 -:10F030006846007B002804D0002103A8FEF754FF97 -:10F0400005E438460FB0F0BDF7B50C464E690978B7 -:10F050000127072086B0002904D001294CD00229BD -:10F0600021D1C5E02179012906D0022917D0032931 -:10F0700012D0042917D127E07078012812D1062078 -:10F08000616A02F09EFB00280DD102200FE0000013 -:10F090008EAE0100C8AD01001D203070F5E771781B -:10F0A000022901D0052790E031780C2923D1694647 -:10F0B000087101202070684621890079814211D2AF -:10F0C0000A20694608704AE03078011F042902D3FB -:10F0D0000E38032879D2B07F022876D12089022801 -:10F0E00073D3D2E7089812210170083408980ECC27 -:10F0F000001D0EC0032768E008990978122964D121 -:10F1000069460870616A049108998D6802952179B1 -:10F11000012906D002292AD0032911D0042954D16B -:10F120005AE00227684687800B202870207E002145 -:10F13000C006C00E68706846FEF7D6FE377043E022 -:10F1400002266846868005202870207E687000218F -:10F150006846FEF7C9FE26700B2168460170606A9A -:10F16000049068460899FEF7BFFE07462DE0694601 -:10F17000888001202870207F6870607FC007C00FE2 -:10F18000A870A07FC006C00EE870E17F2971C0079B -:10F190001ED02046203001780907090F6971407898 -:10F1A0000007000FA87100216846FEF79DFE30465B -:10F1B0000722294638300BF0C8F9A06940787077EB -:10F1C0002879B0700D2030700027384609B0F0BDA6 -:10F1D0000020A8716871E6E70220694688800E2049 -:10F1E0002870207E687000216846FEF77DFEEBE700 -:10F1F000FE203070012168460170606A049004218D -:10F2000068460171217E41710021EEE700B50023BF -:10F21000012285B005280CD0062808D16846027066 -:10F2200004910221017143710021FEF75DFE05B0DA -:10F2300000BD6846027004910271F4E770B50C4697 -:10F24000054602F0E4FA782300222146284602F01F -:10F250004FFA70BD002801D0007870470C2070472D -:10F2600070B505780C000DD0002121702146F4F70F -:10F270008DF877482178405D884201D1032070BD28 -:10F28000022070BD0021F4F781F8002070BD027BE0 -:10F29000032A05D000220A704B780C2B02D003E021 -:10F2A000042070470A770A62027B9300521C0273A3 -:10F2B000C15003207047F0B585B00F4605460124C4 -:10F2C000287B800040198038C66F7078411E0D2958 -:10F2D0000AD25F498000123140188038C36F3A4625 -:10F2E0003146284698470446002C01D0012C11D104 -:10F2F000287B401E0006000E287301D00324DFE7A0 -:10F300000D2069460870706A0490002101966846D5 -:10F31000FFF7A6FF032CD3D0204605B0F0BD70B593 -:10F3200015460A46044629461046FFF7C4FF06461E -:10F33000002C0FD02078FE280CD1207E002806D08B -:10F3400000202870204629460C30FFF7B4FF2046E5 -:10F35000FEF712FE304670BD704770B50D4604468C -:10F3600088210BF051F9012D03D0022D03D0052087 -:10F3700070BD012000E0022060702046FEF7FCFD19 -:10F38000002070BD002806D0027E002A03D00A4665 -:10F3900001460C31C3E70120704730B5044687B001 -:10F3A0000D46062002F033FA2946052002F02FFA16 -:10F3B0002078FE2805D00020694608702046FFF717 -:10F3C000E1FF07B030BD7FB50E4600216A461173DC -:10F3D00041780C2903D00D2903D0002407E084696B -:10F3E00000E04469002C02D0217E002912D015468D -:10F3F00001462846FFF74BFF032809D1324629462C -:10F400002046FFF78CFF6946097B002900D00420C5 -:10F4100004B070BD25460C35EAE710B590B00C4637 -:10F4200005216B465970019009480992801E02908F -:10F43000084803900AA96846FFF7C5FF002805D1D0 -:10F44000102220460B990BF080F8002010B010BD60 -:10F45000CEAD01008EAE010070B50D46040012D095 -:10F46000002D10D0210128460BF0CCF81022534972 -:10F4700028460BF06AF85148012108380180448081 -:10F480004560002070BD012070BD70B54B4E00245A -:10F490000546083E11E0716820014018817BAA7B77 -:10F4A000914209D1C17BEA7B914205D10C222946C8 -:10F4B0000BF01EF8002806D0641C30888442EADB7A -:10F4C0000020C04370BD204670BD70B50D460600DB -:10F4D00007D0002D05D0FFF7D8FF002803DB401C24 -:10F4E00014E0102070BD354C083C20886288411C17 -:10F4F000914201D9042070BD6168000140181022BA -:10F5000031460BF022F82088401C20802870002013 -:10F5100070BD70B514460D001FD0002C1DD0002109 -:10F52000A170022802D0102817D108E06878297845 -:10F530000002084311D00121A17010800BE0284681 -:10F54000FFF7A3FF002808DB401CA070687B297B25 -:10F55000000208432080002070BD012070BD70B5FE -:10F56000054614460E000AD000203070A878012805 -:10F5700007D004D9114908390A8890420BD90120D3 -:10F5800070BD002C04D0287820702888000A5070A4 -:10F590000220087010E0002C0CD0496800014118CE -:10F5A0001022204610390AF0D0FF287820732888CE -:10F5B000000A607310203070002070BD68000020C9 -:10F5C000F8B5FC4C207EE17D884219D00126FA4D29 -:10F5D0000027E07D215C14200A4642435019037C39 -:10F5E000052B0ED0037C062B19D0037C072B25D0CE -:10F5F000437C012B30D0FFDF207EE17D8842E8D1C3 -:10F60000F8BD0674E07D162807D0E07D401CE0754B -:10F61000491CC8B2AA5802210CE00020F7E7067482 -:10F62000E07D162808D0E07D401CE075491CC8B27A -:10F63000AA5803219047DFE70020F6E70674E07D33 -:10F64000162807D0E07D401CE075491CC8B2AA58B6 -:10F650000821EFE70020F7E74774E07D162807D080 -:10F66000E07D401CE075491CC8B2AA580721E1E7BB -:10F670000020F7E770B50024D04E0C207072D048FF -:10F6800025464473047328300476C475CD480AF0C7 -:10F6900095F8CD480575F572CC49601E8860757186 -:10F6A000B570F57035717570C948E83905704570E9 -:10F6B0001420604340180574641CE4B20B2CF7D38B -:10F6C0000120F9F798FB0020F9F795FB0120B071B4 -:10F6D000F9F718FFBF48F9F727FFBF4C2070BF4864 -:10F6E000F9F722FF6070F9F729FB70BD10B5F9F743 -:10F6F00050FBB94C2078F9F732FF6078F9F72FFF0B -:10F70000AE4C207A002803D0F9F7F1FC00202072DB -:10F7100010BD0B207047F8B5F9F7F1FBA74D044673 -:10F72000A879002801D0FFDFF8BDE87A002800D1D1 -:10F73000FFDFA64F01237969A94A601A9B05984209 -:10F740000ED30E1B9E420BD3904203D9501A0019C0 -:10F75000401C05E0964232D9101B4018401C404224 -:10F76000002800DBFFDF0126AE710024EC72687A0E -:10F77000042114225043904A80180174B868401C38 -:10F7800004D0481FB8600120F9F735FB0020F9F7D5 -:10F7900032FBF9F719FB0AF08BF9F9F710FC9148E5 -:10F7A0000460046001209049C0030860F3F7D0FBB7 -:10F7B00087480078022807D0032802D006E0FFDF40 -:10F7C000D0E7E878002801D0AE7000E0AC70F9F71F -:10F7D000E2FBF8BD034678490B201422424352183D -:10F7E000203A127F002A04D0401E0006000EF4D1F9 -:10F7F00070471422424351180A46803AD3660122C8 -:10F8000020390A777047012805D0032805D100293F -:10F8100003D1002070470029FBD010B4674C0023AF -:10F8200063706B4A002890700CD002280AD0072918 -:10F830001AD2080078440079001887441505070D8E -:10F840000F111300D37003E01B2000E03A20D070AA -:10F850000120607010BC70475820F8E77720F6E769 -:10F860009620F4E7B520F2E710BC0020704710B5F1 -:10F8700057484078F9F7AAFB80B210BD411E142208 -:10F88000504310B54C4A8418203C0A2902D8207FE6 -:10F89000002800D1FFDF207F012800D0FFDF0020FB -:10F8A000207710BD70B5464C607B217B884201D12A -:10F8B000012500E00025F9F722FBF9F787FB617BC2 -:10F8C000227B914201D1012100E00021A942EBD12C -:10F8D00070BDF7B50646481E84468EB0C0B21422ED -:10F8E00005905043344A85180495287C2D1D07281F -:10F8F0002AD1304C0027E07D227E824221D0235C39 -:10F90000059A934201D1012701E0002F04D0162867 -:10F9100011D0421CA25C225416280ED0401C227E1C -:10F92000C0B28242EBD1002F0BD0207E002806D03F -:10F93000207E401E04E00022ECE70020EFE71620C6 -:10F940002076049A0120107460461C4C0A2813D8B3 -:10F9500014204143184808182038007F00280BD095 -:10F960000498007C012808D00498007C012803D06A -:10F970001098807A012804D0FFDF1098807A01283F -:10F9800059D104980C4B007C02282FD0094C207EC2 -:10F9900016285CD0207EE17D401C884200D1FFDF2C -:10F9A000049901204874217E05986054207E162811 -:10F9B00051D052E0BC0B0020D80B0020E00C0020FE -:10F9C000940B0020EC0C0020A40B0020C00C0020A5 -:10F9D0007A000020B115010078000020C1F5000078 -:10F9E000FFFFFF0000F5004080E200E0607A059A2A -:10F9F0000146904206D0014614277843C018807C07 -:10FA00009042F8D1627A824208D1617A142251433D -:10FA1000C918897C61720121A17207E01422424356 -:10FA2000D21814277943927CC9188A7414220C21A5 -:10FA30005043C01881741098007A06281DD2010026 -:10FA40007944097949188F440C161412100EE07D80 -:10FA50000028A4D0A4E7002001E0207E401C2076EE -:10FA6000AFE000210BE0B42109E0732107E032216F -:10FA700005E00A2103E0062101E0FFDF00211098E4 -:10FA800002910068401A28601099097A002912D062 -:10FA90000221401A0102090A296010980268406890 -:10FAA00010180002000A68601098807A02281098E6 -:10FAB00003D0007B6FE00421EBE7007A002812D02E -:10FAC0000222029812181098436810461030181835 -:10FAD0000A90FB48029B4078984202D9E378002BB9 -:10FAE00003D00A9805E00422EBE7029BC31A0A98A8 -:10FAF0001818637A11300C2B1CD0637A14277B43BF -:10FB0000F04FDB195B68994214D0EF4F617ABC4625 -:10FB100014235943EB4BC9184B6889689B1B891BFD -:10FB20001B0209021B0A090A984235D8634533D8DB -:10FB3000614531D831180A980123081A0002000AD9 -:10FB4000286010998018C9680002000A471ADF4A25 -:10FB50009B05BC469F4201D2384610E00F1A9F42D7 -:10FB600001D260460BE0944503D9511A0818401C95 -:10FB700005E0974206D9101A4018401C4042002860 -:10FB80005DDC00E0FFDF0A982968103808180002E1 -:10FB9000000A68600020287268681127103000028F -:10FBA000000A68601098407AA8721098007A68720B -:10FBB00003280ED200280CD001F07EFA002803D0D2 -:10FBC00007E0002011B0F0BD3221029802910F1A17 -:10FBD0001137BB480178012901D0032909D14078A8 -:10FBE0000299884205D9E178002902D10299401A88 -:10FBF000C7196A682868921B801B9446010212028A -:10FC0000B14B090A120A8F4219D81F46994216D8D9 -:10FC1000BA4214D8617A0C2915D0677A61460C2251 -:10FC2000039200921422A74B7A43D21893689B1B2D -:10FC3000834216D80397977C0C2FF3D16EE005987A -:10FC400001F096F8BDE70499022205980A74627AD9 -:10FC50000C2A00D0627A8A7460720120A07211B0FE -:10FC6000F0BD0C2F5AD00022384694461422034689 -:10FC70005343944A9A1853689B1B8B4222D2907B21 -:10FC8000AB7A984218D804980521059D0174904CD0 -:10FC9000207E16280CD0207EE17D401C884200D1B9 -:10FCA000FFDF207E2554207E162800D0D5E6D2E640 -:10FCB000E07D0028F4D0F4E701208446907C0C28F5 -:10FCC000D4D102E06146002927D03D46009014209F -:10FCD0002A4642437B480621161831741C38007EA0 -:10FCE00016287B4813D0017EC07D491C814200D17B -:10FCF000FFDF7748017E4554017E16290BD0017E37 -:10FD0000491C0176B57C0098A842E0D106E0C07D90 -:10FD10000028EDD0EDE70021F3E7009704990220D9 -:10FD2000684D0874607AB84207D1049900988874C5 -:10FD3000059860720120A0721BE003980C2F0CD074 -:10FD40000C2800D1FFDF0398142250434019059975 -:10FD500081740499009888740BE00C2800D1FFDFAF -:10FD600003981422504340190599817404990C207A -:10FD70008874012011B0F0BD30B50D46554A4419C4 -:10FD800000210B46101A8B4100D2FFDF52488542FA -:10FD900000DDFFDF5148854200DAFFDF5048844232 -:10FDA00005DA002C01DB204630BD4D4800E04D480F -:10FDB000201830BD401E70B5C0B2142148434149DF -:10FDC0004418607B062813D2010079440979491848 -:10FDD0008F44020C0A08060400202FE0B4200CE037 -:10FDE00073200AE0322008E00A2006E0062004E042 -:10FDF000FFDF617B0020002920D0022140186168CC -:10FE000040180002000AF9F7E1F80C256557314A5D -:10FE1000441900210B46101A8B4100D2FFDF2E48F7 -:10FE2000854200DDFFDF2D48854200DAFFDF2C48E8 -:10FE3000844207DA002C03DB204670BD0421DDE795 -:10FE4000274800E02748201870BDF0B5064683B06B -:10FE500025480190457A029534687068001B0702B6 -:10FE60001A483F0A001B00900C2D40D01420294650 -:10FE700041431448012208188446416813489205FA -:10FE80008646081B904210D3631A93420DD3024654 -:10FE90007046724503D900984018401C05E0734530 -:10FEA00024D9411A0819401C404200281FDA604634 -:10FEB0000295857C0198C0790028D5D003B0F0BDAB -:10FEC0007A000020D80B0020FFFF3F00FFFFFF005B -:10FED000BC0B0020FF7F841E0020A10700E05EF81D -:10FEE0000080841E00807BE1E00C0020FFDF029890 -:10FEF000854226D014214843FE4901234018029030 -:10FF00008068FD499B058C46011B8646994210D3AB -:10FF1000221A9A420DD36346614503D90099714470 -:10FF2000491C06E0194662452DD9091A0819401CDA -:10FF30004142002905DD0298B17A807B814200D3DD -:10FF400074460C2D15D0EB491420454368184268BF -:10FF5000121B1202120ABA420BD2B37A827B93426C -:10FF600000D38468857C0198C0790028A6D10C2D27 -:10FF7000EAD13068A042A1D0E0190002000A346042 -:10FF8000706003B0F0BDFFDFDBE7F0B5DB4904468E -:10FF9000486885B0C005C00D1CD0103840B200289C -:10FFA0000CDA0207120F083A920892005118C96938 -:10FFB0008007C00EC1400806800F09E08108D04AC2 -:10FFC0008900891809688007C00EC1400806800FA3 -:10FFD000002808D000272078002806D0012804D067 -:10FFE000002005B0F0BD0127F5E72079062813D2DF -:10FFF00001007944097949188F44020C0A08060463 -:020000040001F9 -:10000000002014E0B4200CE073200AE0322008E065 -:100010000A2006E0062004E0FFDF21790020002905 -:1000200005D002214618B74D002F02D003E004216D -:10003000F8E70020E871694602AAA068F8F7D1FF46 -:10004000694608228A56E06801A980180122C01C6E -:100050001F2801DA019209E003AAF8F7C2FF6846F7 -:10006000007B002802D00198401C01900099019863 -:10007000401810300002000A0190881B0002000A9C -:10008000009060796946887200980390F8F737FF0E -:10009000009A019B121A181A9B4912020002120AB6 -:1000A000000A8A4216D8884214D86846FFF7CDFE67 -:1000B00000990398814205D088190002000AF8F7D8 -:1000C00085FFA0600120E97900298AD0002FB0D0F7 -:1000D00005B0F0BD0020F6E7F3B58FB08B480C46B5 -:1000E0000B9009F073FB8A4A0F99864F5618894D79 -:1000F000203E002808D08848007D002800D0FFDF7F -:10010000207801287AD033E1687B162809D0687BF3 -:10011000297B401C884200D1FFDF2078012804D0D1 -:1001200009E0287B0028F7D0F7E7F07F002800D00F -:10013000FFDF0120F077697B0F981422774E51433F -:10014000891908742078022822D0687B142148433A -:100150008619207930726079707232460C323146DD -:10016000A068F8F73EFF0C2030560F2804DD1F383A -:1001700030733068401C30600C217156301DE268CD -:1001800001905018C01C1F287EDA01200199DAE086 -:100190005A494868C005C00D1DD0103840B200282B -:1001A0000CDA0207120F083A920892005118C96936 -:1001B0008007C00EC1400806800F09E08108504A40 -:1001C0008900891809688007C00EC1400806800FA1 -:1001D000002800D1FFDF687B1421484386190021E5 -:1001E000E0686A460691117006A9F8F7FAFE6A46B9 -:1001F000002010560F2802DD012001E0B2E00020AF -:100200000699401807900220B07220793072607908 -:100210007072A068311DC01C06911F2801DA0120F0 -:1002200009E0F8F7DEFE68460078002804D006985A -:1002300006990068401C0860307A062813D2010035 -:100240007944097949188F44020C0A0806040020F1 -:100250000BE0B42009E0732007E0322005E00A201B -:1002600003E0062001E0FFDF0020217900295CD0B7 -:1002700002214018069071681030081807990890FC -:1002800009180698081A00E051E00C900020F87157 -:10029000F8F735FE04463060079820180002000A7F -:1002A000F060787A0C283CD0797A142041431148C8 -:1002B000081840680899029040180002000A03904C -:1002C000707A6946887402A8FFF7BFFD0299039A05 -:1002D000091B121B090212020B4B090A120A0C9885 -:1002E00099421ED882421CD802990698081800022A -:1002F000000A15E0D80B0020FFFFFF0000ED00E032 -:1003000000E400E0E00C0020FFFF3F00EC0C0020C8 -:10031000B40C0020940B0020A40B0020D409002072 -:100320003060F8790028B1D110E00421A1E704AAD7 -:100330000199F8F756FE6846007C002804D0019821 -:1003400001990068401C08602078B072687B16280C -:1003500006D0687B401C68730B9809F04FFA40E0A8 -:100360000020F8E7F07F002800D0FFDF0120F077C1 -:10037000FE490F9808742078022800D1FFDFFB4E59 -:10038000207930726079707232460C323146A06842 -:10039000F8F727FE0C2030560F2804DD1F38307385 -:1003A0003068401C30600C22B256301DE16801906C -:1003B0008818C01C1F2802DA012001990BE003AA4B -:1003C0000199F8F70EFE6846007B002804D00198DA -:1003D00001990068401C08602078B072E349012050 -:1003E0000875687B297B884224D07C7A0C2C23D02A -:1003F000F8F785FD14214C43DD4961180A7C042A75 -:1004000018D00A7C032A15D04B6889681B1A081A71 -:100410001B020002D74A1B0A000A112B0AD31146FD -:10042000934207D8884205D8687B297B884201D04F -:10043000F8F7B1FD11B0F0BD687B297B8842F7D198 -:1004400011B0F0BD10B50020F8F7C5FC10BD10B517 -:100450000120F8F7C0FC10BDC74800787047F1B51F -:10046000009802281AD0C54C607A0C2800D1FFDF12 -:100470000026A6710125E572607A03211422BC4F83 -:100480005043C0190174F8F78BFD009800280AD07A -:10049000012825D0032872D0FFDFF8BDB6480078C8 -:1004A000F9F763F8F8BDB648007F002800D0FFDFF9 -:1004B0006571B34D00202E60F8F79DFCA968481CBB -:1004C00004D0012300221846F8F7C8FC607A617A4C -:1004D000401CC0B2142251437A5801219047F8BD04 -:1004E0000120F8F788FC607900280DD0A4488068C6 -:1004F000401C09D0607A617A401CC0B2142251437A -:100500007A5806219047F8BD9D48007F012807D002 -:1005100002280FD003281FD0042831D0FFDFF8BDF8 -:100520002079002803D02671F8F73FFDE570944844 -:100530000677F8BD207A002802D1F8F7AFFD2572C2 -:10054000607A617A401CC0B2142251437A5800216B -:1005500090478B480677F8BD894F0123397B78682F -:100560000022411A1846F8F779FC2079002803D0B8 -:100570002671F8F71AFDE57002203877F8BD19E00A -:100580007F4E217870680123411A00221846F8F73F -:1005900065FC207A002802D1F8F780FD2572607A88 -:1005A000617A401CC0B2142251437A58002190470E -:1005B0003577F8BD607A617A401CC0B2142251438D -:1005C0007A5805218AE710B56C4C607A0C2800D166 -:1005D000FFDF607A617A401CC0B214225143644A42 -:1005E00052580421904710BDF0B583B0F8F787FC4E -:1005F00000900C20614C0290617A624801900C29B5 -:1006000020D0617A1420414359480918097C0429F3 -:1006100018D0617A142251430818007C03286ED048 -:10062000019900980A684968121A081A1202000211 -:10063000504B120A000A112A61D319469A425ED819 -:1006400088425CD84E488068401C00D0FFDF002004 -:100650006071607A0C2807D16078002804D04A487D -:10066000C178417081780170607A0C2815D0617A68 -:10067000142041433E480918097C04290DD1617AB0 -:100680000291617A01221423594309180A74617A8C -:1006900059430818807C6072A2723C4D687B297BAC -:1006A0003B4F884233D03B4E287B1421484380196E -:1006B000007CC05D0128287B06D048438019007C5F -:1006C000C05D02282FD041E0142148438019807A70 -:1006D00001280AD0287B0221142250438019007C73 -:1006E000C155287B162808D00AE0287B0021142257 -:1006F00050438019007CC15528E0002002E0C5E18C -:10070000287B401C2873687B297B8842CCD1174DFD -:10071000287D00285DD0287CC15D01293CD0C05DCA -:10072000022844D04BE0287B142148438019807A6A -:10073000012800D0FFDF297B0020142251438919B2 -:100740008872297B51438919097CC855287B14215B -:1007500048438219287B48438019017C0098FFF7A1 -:10076000B8F8287B1628CBD1C7E70000A40B0020DF -:10077000D80B0020FFFF3F0078000020E00C002095 -:10078000C00C0020D00C00207A000020940B002028 -:10079000B30C0020D4090020A97A012904D0022139 -:1007A000C155002028750AE00021C15507E0A87A4C -:1007B000012800D0FFDF0020A872297CC855287DC1 -:1007C000002806D0297CFE4A0098FFF782F8002016 -:1007D000287502980C281CD0014614204143F94882 -:1007E0000818017C012914D107210174F64D287ED7 -:1007F000162839D0287EE97D401C884200D1FFDFD1 -:10080000297E02986854287E162831D0287E401C04 -:100810002876607A0C287DD0A07A00287BD0002032 -:10082000A072607A14214843E6494618E748B56843 -:1008300073680246F6687C32C36796605560E44D83 -:10084000687E002816D00226607A1422DD495043C3 -:100850004018407B06281BD20100794409794918C9 -:100860008F440A1412100E0CE87D0028C7D0C7E789 -:100870000020CDE70426E7E700200BE0B42009E0E4 -:10088000732007E0322005E00A2003E0062001E0A3 -:10089000FFDF00202873697E022901D0012910D1D1 -:1008A0002969009A09188A1A1202120A432A08D9D9 -:1008B0000320687632390802000A28613220287342 -:1008C00008E0322806D2207A00280AD1F8F7E6FBA1 -:1008D000012005E0207A002803D0F8F708FC00206A -:1008E0002072BC491122487820700978012901D072 -:1008F000032906D101212171297B884201D9421A9D -:100900001132A378002B00D0921C2179002904D148 -:10091000002B01E086E094E05AD09446AE4A00995C -:100920000092019A176852687F1A511A3F02090211 -:100930003F0A090ABC451BD8A74A974218D8009A13 -:10094000914215D8297B884223D92B69421A9A1AD9 -:100950001202120A101880190002000A2A61686047 -:10096000002914D0032028770006000E3BD149E06F -:1009700000202071A070297B002922D0286940180E -:1009800080190002000A6860022028772BE001200D -:10099000E9E781420BD92A69511889190902090A24 -:1009A0006960002801D00420DDE70220DBE7002B8E -:1009B00000D1FFDF286980190002000A686000206A -:1009C00004E0296989190902090A6960287719E090 -:1009D000287B00280FD02969081880190002000A16 -:1009E00068600220287728690123811900221846AF -:1009F000F8F734FA09E0286980190002000A6860F3 -:100A0000002028770120F8F7F6F9607A142148438E -:100A10006C490C2240188256012300206968F8F7BF -:100A20001DFA0EE00120F8F7E6F90020F8F7E3F9E7 -:100A3000F8F7CAF9207A002803D0F8F758FB00200D -:100A40002072A078002804D0F8F7AFFA0020E070F8 -:100A5000A0706078002804D05E48C1784170817829 -:100A600001702079002806D000205A49E0700978EA -:100A7000002900D120715448017EC07D814203D0FD -:100A800056484078F8F771FD0120E07103B0F0BDE1 -:100A9000F0B5534C0746607A83B00C2800D1FFDFD5 -:100AA000607A1421474E48438019007C032800D007 -:100AB000FFDF474DA868401C00D0FFDF607A14219B -:100AC000484381190C20085600216A460091117193 -:100AD000C01901AA6946F8F784FA6A46042010563C -:100AE0000F2801DD012000E000200099401869680E -:100AF00040180102090AA9606079002804D0012386 -:100B000000221846F8F7AAF903B0F0BD30B5364C0C -:100B1000344A0B1AA34211D3451AA5420ED393426D -:100B200003D9101A43185B1C08E0954204D9511AE6 -:100B30000818401C434201E0FFDF0023184630BD87 -:100B400010B50146012300220220F8F787F910BDF5 -:100B500010B50220F8F74FF910BD10B5F8F7CFF92E -:100B600010BDF0B51E4D0446E87A83B0002800D1D0 -:100B7000FFDF642C68D31D4900200246091B824117 -:100B800062D31B48417B007B81425DD10C48007DD4 -:100B9000002859D1687A14210A4F48430C4EC519D0 -:100BA000306801AA00196946F8F71BFA6946042063 -:100BB0000856002802DD0098401C0090A96819E042 -:100BC000A40B0020D80B0020BC0B0020540C0020EC -:100BD000C00C00207A000020FFFF3F0078000020BA -:100BE000E00C0020FF7F841E0020A107FF1FA1074B -:100BF000940B002000986B680A18D21A12026D4BF1 -:100C0000120A9A4220D8AA7C0C2A08D014235A43EC -:100C1000D2195268511A0902090A814214D3B068E4 -:100C2000401C05D00120F8F7E6F80020C043B06072 -:100C3000306800193060A868009940180002000A66 -:100C40007061012003B0F0BD002003B0F0BDF0B52D -:100C50000646401EC5B21420574968434418207CFC -:100C6000002800D1FFDF5548017B407B81420CD03A -:100C7000534A14234B439B181B7CB3420CD01629B8 -:100C80000CD0491CC9B28142F3D14E48017D0029E4 -:100C900064D0007CB04261D10020F0BD0021F1E7BA -:100CA000217C052905D0217C062902D0217C072939 -:100CB00028D101212174C17D0023027E8A4221D0E6 -:100CC0000246565CAE4201D1012301E0002B04D064 -:100CD000162911D04E1C965D565416290ED0491C6B -:100CE000167EC9B28E42ECD1002B0BD0117E0029AA -:100CF00006D0117E491E04E00026ECE70021EFE754 -:100D000016211176617C00292AD06774C17D0023E9 -:100D1000027E8A4224D0425CAA4201D1012301E032 -:100D2000002B04D0162912D04A1C825C425416298A -:100D30000FD0491C027EC9B28A42ECD1002B0FD0E1 -:100D4000027E0146002A06D00A7E521E04E00022DE -:100D5000EBE70021EEE716220A7601E01A480027A9 -:100D6000217C01299CD1617C002999D10120F0BD11 -:100D700030B505461420104A0521684380180174D7 -:100D8000114C207E16280ED0207EE17D401C88422A -:100D900000D1FFDF207E2554207E162807D0207E3C -:100DA000401C207630BDE07D0028F2D0F2E7002024 -:100DB000F7E70000FFFF3F00D80B0020940B002056 -:100DC000D4090020A40B0020BC0B0020F0B5794A08 -:100DD0001468794E002533780121002B06D1774B1A -:100DE0005D6003279F6004271F6131701560744B9D -:100DF000D9601960724E714D40364035F160EF6830 -:100E00008742FBD35960D9601460F0BDF8B5044641 -:100E1000800700250126002804DA6A48C563C663F6 -:100E200002208443684FE00405D56848466068485E -:100E3000876080148443600003D566484560800560 -:100E40008443E0050CD55B480560634887605B48D8 -:100E5000456085600421016159480661801584431D -:100E6000A00409D55D4846605D4805605D4887601F -:100E70005D484560401484436004C10F2004009025 -:100E8000C00F814200D0FFDF0098800F13D0574879 -:100E900046605748876057498E6057480560574AF3 -:100EA00097605748056046608E60976005604660B1 -:100EB00003208003844320050BD55248466086609A -:100EC0005148876050484030876050488560C01462 -:100ED000844308F0CDFD4E48044200D0FFDFF8BD4A -:100EE000F0B5002120270A46FF230446CC40E40742 -:100EF0002ED04CB2E606F60E0125B540454E3560C3 -:100F0000454E3560002C13DA25072D0F083DAE083D -:100F1000424DB6007619F569B446A407E40E1E46A4 -:100F2000A640B5431646A64035436646F5610FE038 -:100F3000A6083B4DB60076193568B446A407E40E02 -:100F40001E46A640B5431646A64035436646356064 -:100F5000491CB942C9D3F0BD70B5174C0D4660604D -:100F6000FFF754FF6068FFF7BBFF2846F8F761F909 -:100F700008F0D4F900F000F908F07AFD08F0C9FC97 -:100F8000F8F7C0FA08F06CFA70BD10B50A4C60684A -:100F9000FFF73CFF6068FFF7A3FF08F069FDF8F773 -:100FA000FAF90020606010BD0348406870470220D5 -:100FB0007047000000820040800000200085004053 -:100FC00000800040C01F0040FFFFFFFF00C0004046 -:100FD00000C3004000E501400083004000D0004015 -:100FE00000D2004000D3004000D5004000E00040A7 -:100FF00000E3004000F0004000F2004000F3004039 -:1010000000F5004000B0004000B3004000B50040D3 -:10101000FEFF0FFC80E100E080E200E000ED00E078 -:1010200000E400E070B51E490A68002A17D00023CA -:101030001D4601244A68521C4A60092A00D34D60AB -:101040000E792246B2400E6816420AD072B60B687C -:1010500093430B6062B649680160002070BD0520B3 -:1010600070BD5B1C092BE5D3FFDFF8E701200D49BC -:10107000800508607047EFF31081CA07D20F72B67F -:10108000012181400648036819430160002A00D10C -:1010900062B6EBE702480021016041607047000042 -:1010A0008800002000E200E001208107086070470E -:1010B00001208107486070471048C068C00700D011 -:1010C000012070470D488068C00700D0012070479C -:1010D0000A484069C00700D0012070470748C0692E -:1010E000704706498A69D20306D589698907890F3D -:1010F000814201D101207047002070470004004068 -:101100008107C90E002808DA0007000F0838800898 -:10111000BD4A80008018C06904E08008BB4A800096 -:1011200080180068C8400006800F7047B8494878AA -:101130008978884201D3401A02E02122511A081806 -:10114000C0B27047B249233148788978884201D3C8 -:10115000401A02E02122511A0818C0B27047AC4967 -:10116000463148788978884201D3401A02E021222A -:10117000511A0818C0B27047A44910B50C3108685C -:10118000FF22120290430122D20310430860A049BB -:1011900000202331487088702339487088704631A8 -:1011A000487088709B4808F009FB9A48401C08F07A -:1011B00005FBF8F74DF900F01DF910BD2020704730 -:1011C000B4E770B50C4605460026FFF7AFFF90491F -:1011D000A04214D30A46203A00232046641EE4B2FB -:1011E00000280BD08878105C287088786D1C401C13 -:1011F000C0B288702128F0D18B70EEE7012600F094 -:10120000F9F8304670BD202070479BE770B50C465A -:1012100005460026FFF796FF7D492331A04214D3EF -:101220000A46203A00232046641EE4B200280BD070 -:101230008878105C287088786D1C401CC0B288705B -:101240002128F0D18B70EEE7012600F0D3F830466C -:1012500070BD202101700020704710B50446FFF7D3 -:101260007EFF2070002010BD70B50C460546FFF7CC -:1012700076FF67494631A04215D30A46203A00233B -:101280002046641EE4B200280BD08878105C2870D9 -:1012900088786D1C401CC0B288702128F0D18B70FA -:1012A000EEE7002400E05C4C00F0A4F8204670BD9E -:1012B00070B50C460546212900D9FFDF5248406829 -:1012C000103840B2FFF71CFFC6B20D20FFF718FF21 -:1012D000C0B2864203D2FFDF01E0F8F7F6F82146FC -:1012E0002846FFF76EFF0028F7D070BDF8B5074617 -:1012F0004848474C401E464E007825464636233522 -:10130000002806D1A9786878212200F068F8002822 -:101310000ED0A1786078212200F061F8002814D066 -:10132000B1787078212200F05AF8002828D033E0F4 -:1013300037496878C91C0F546878401CC0B268707F -:10134000212829D10020687026E0314960782039B1 -:101350000F546078401CC0B26070212801D1002079 -:1013600060702C4F7F1E3878002815D0A1786078E7 -:10137000212200F034F800280ED0002038700BE055 -:101380002349707826310F547078401CC0B27070B9 -:10139000212801D100207070A9786878212200F0FE -:1013A0001EF800281AD0A1786078212200F017F8E2 -:1013B000002813D0B1787078212200F010F80028AE -:1013C0000CD0F8F767F8134808F000FA0121490338 -:1013D000884200D0FFDF0F4808F010FAF8BD401C2B -:1013E000884205D0904201D1002901D000207047E9 -:1013F0000120704710B5074808F0E8F9002801D12E -:10140000F8F737F810BD000000ED00E000E400E060 -:10141000100D002091000020072000000C490878E2 -:101420004A78401CC0B2904200D008707047094A08 -:10143000074820BF40BF20BF41780378437013683E -:10144000002B02D103788B42F3D0002070470000BC -:101450009300002000E200E0F0B50121184A0803E3 -:101460001060184A00231360174B1860174803696F -:101470000569DB43DB06DB17102425430561144DAA -:101480006960144E31605B1C00E020BF1768002FBC -:10149000FBD0002B02D10369A34303610E4880688F -:1014A0007160A960002111600121074A09031160E0 -:1014B000F0BD10B50446FFF7CFFF2060002010BD3F -:1014C00080E100E000C1004080E200E000ED00E0CB -:1014D00000C3004000C0004000C50040FEB5EA4C1B -:1014E00007466068FF213E0181552178FF2913D00E -:1014F0000901083141583246491E08320902019259 -:10150000090A805800F0B6F9002802D02478254650 -:1015100015E06168207888552770FEBDDA4842687A -:1015200001981158280100900830105800F0A2F9D5 -:10153000002806D1D4482C46416800980D5CFF2D48 -:10154000ECD1D1482101406885554754FEBD70B5A6 -:10155000CD4A04460020157A53680AE00201561C61 -:101560009E5DA64203D10C329A588A4204D0401C98 -:10157000C0B28542F2D8FF2070BD10B5FFF7EDFA7A -:10158000C14C01462078626800010830105800F014 -:1015900071F9012807D920786168000108300858DE -:1015A000FFF7CEFA10BDFEF757FFF7F7DEFF10BDCD -:1015B000F8B5B54F3E78FFF7D0FA0146FF2E68D058 -:1015C0003401254678680835405900F053F902285F -:1015D00002D9786840595AE0AB494868025D0A7000 -:1015E000A11C425C002A0CD0521E425441590122D7 -:1015F000D20589180902090A41513046FFF76EFFEA -:1016000030E0631CC25C0092221D94468258002A7E -:1016100010D001239B029A420FD99205920D435993 -:101620005703DB191B021B0A43516346C3589A1A1E -:10163000920A09E0FF21C1540AE0435952039A1863 -:101640001202120A4251002242543046FFF746FF6E -:101650008D480C344168C2680098095980001258BE -:1016600000989047884C2078FF2812D0FFF775FA31 -:1016700001462078626800010830105800F0FAF83E -:10168000012896D920786168000108300858FFF7D2 -:1016900057FAF8BDF0B51D4614460E460746FF2B17 -:1016A00000D3FFDFA00700D0FFDF7748FF21C7602E -:1016B000446005720674017000224270104604E016 -:1016C0000201521C401CA154C0B2A842F8D3F0BD84 -:1016D00070B56D4C06466578207C854200D3FFDFEF -:1016E000E068A90046506078401C6070284670BDD4 -:1016F000FFB581B01D46FF24FFF72FFA624F064663 -:1017000079780198814200D8FFDF5F480021037A91 -:10171000406810E00A019446521C825CFF2A25D0E2 -:10172000019FBA4205D162460C328758029A97420D -:101730001ED0491CC9B28B42ECD8FF2C18D0210115 -:101740004A1C019B83540B460C33029AC250039BE4 -:101750004D4F0022012B0ED00B1DC25001239B02C6 -:101760009D4216D9AA05920D08D008E00C46E0E784 -:10177000FF2005B0F0BD0B1DC550EFE71A4653031F -:101780009B190E461B0208361B0AAA1A8351920A9D -:1017900009E0002D00D101256B039B191D022D0AC4 -:1017A0000B460833C550891C42543D463E782046BE -:1017B000FFF794FE2878B04201D0FFF7DEFE0198D3 -:1017C000D7E770B50C460546FFF7C7F90646214630 -:1017D0002846FFF7BCFEFF2817D02B4D04012046FA -:1017E000696808300858314600F044F801210903BF -:1017F00040186968A41C095D400B002901D08902CA -:101800000818002800D1012070BD002070BDF3B57C -:1018100081B00F460198FFF79AFEFF2819D01A4EA3 -:10182000357871682A462C4604E0844205D0254666 -:101830002301CC5CFF2CF8D10BE0FF2C09D0A54292 -:101840000BD11001085C3070FF2804D0FFF795FE23 -:1018500003E00020FEBDFFF77BF939460198FFF752 -:10186000B0FF22017168FF23541C0B558A5C2B01C9 -:10187000CA54FEBD401A00020121000AC90588426F -:1018800000D90020704700005C0D002070B50446B0 -:101890002748844201D2012500E0002500F03FF8EE -:1018A0002449002806D08C420BD32348006804E06A -:1018B000284370BD8C4204D32048844201D20120C9 -:1018C000F6E70020F4E710B5044600F028F80121FF -:1018D0008907002806D01848006804E08C4204D22A -:1018E000012003E015488442F8D20020012148403D -:1018F00010BD10B5002805D0FFF7E5FF002801D086 -:10190000012010BD002010BD10B5002805D0FFF744 -:10191000BDFF002801D0012010BD002010BD0848E7 -:1019200008490068884201D10120704700207047B3 -:1019300000B00100000000201C0000200800002072 -:1019400098000020BEBAFECA3B48002101704170D9 -:1019500010218170704770B5064614460D4602206E -:10196000F1F7B2FA01203449344A0870E41E1461D8 -:101970009660556070BD10B50220F1F7A5FA2E49AA -:10198000012008702E480021016041608160012023 -:101990002C49C005486010BD10B5274801780029C2 -:1019A00017D00121274AC905916025490B680022FB -:1019B000002B05D04B68002B02D08968002902D08B -:1019C0004270102103E0012141701F4909688170B4 -:1019D00002700020F1F778FA10BD1748017800294D -:1019E00012D01748016800290AD00168002905D0E3 -:1019F0004168002902D08068002803D00020704789 -:101A00000220704701207047407870470A480178EB -:101A100000290FD00A480168002905D04168002933 -:101A200002D08068002801D0102070470648006866 -:101A3000C0B27047807870479C00002000F50040DD -:101A400000F1004000F5014000F400402C48002166 -:101A500001704170704770B5064614460D4601206E -:101A6000F1F732FA26490120264B08709E60DC60AF -:101A70001D6170BDF8B504460120F1F725FA204933 -:101A8000012008701F494C601F4900264E60032149 -:101A90001E4D0906A9601E4F002C07D0012C00D056 -:101AA000FFDF3E60032000066860F8BD386001205B -:101AB0000006F9E710B51248017800290ED003217D -:101AC000124A0906916010494A680021002A03D091 -:101AD000104A1268427000E0417001700020F1F776 -:101AE000F3F910BD06480178002907D00648406880 -:101AF000002802D007480068C0B27047407870479D -:101B00009F00002000F5004000F1004000F501407A -:101B100000F2004000F4004070B5FC4D00246C70F1 -:101B20002C706C616C72AC720120E8726C776C6224 -:101B3000F748EC6207F042FE002800D0FFDF2C7669 -:101B400070BD00B5F349002803D0012805D0FFDFA0 -:101B500000BDF1484861F14802E0F1484861F148B0 -:101B6000886100BDF0B50125EF4902260E60EF49FE -:101B70000027CF63CD63EE49C96A09070DD4ED494B -:101B8000CB6AED4A53620B6B93624B6BD3628B6BE8 -:101B90001363C96BD30519435163DE4C00281FD072 -:101BA000012821D0FFDFE548A063FF2004306063F7 -:101BB000256303202061E24996204860D34918201C -:101BC00008560722D243811A90422ED011DC1631DA -:101BD00034D00A2930D00E292CD012290FD127E079 -:101BE000CD486061CD4802E0CD486061CD48A0613C -:101BF000D9E7001D17D0042813D008280ED0FFDF26 -:101C0000D149D0488860D248D0494160D14901606B -:101C1000D1480660D14910204860F0BD0420E06042 -:101C2000EEE7E760ECE7FC2000E0F820E060E7E7A3 -:101C3000F420FBE7F020F9E7EC20F7E7D820F5E700 -:101C400010B50C460146C64808F01BFFAF480472A9 -:101C500010BDAE48407F7047AC4A5170107070475D -:101C6000F0B504460D465079117900020843690029 -:101C700009190884501C01460E78012730464E7819 -:101C8000360230438E78C97836043043090608435B -:101C9000117800020843A9006050284608303E46EB -:101CA0008640002B08D0012B00D0FFDF206B304393 -:101CB000AF4038432063F0BD206BB043F8E730B548 -:101CC0000D460446082900D9FFDF0022002D0CD95B -:101CD000A4489100635809180B6053001B191B8C12 -:101CE0000B62521CD2B2AA42F3D3206B9E49086009 -:101CF00030BD10B504460722D243083085499442CE -:101D00001AD008DC16301FD00A281BD00E2817D096 -:101D1000122806D112E0201D0CD0042807D0082874 -:101D200003D0FFDF7948047610BD042000E00020D6 -:101D3000C860F7E7FC20FBE7F820F9E7F420F7E7B5 -:101D4000F020F5E7EC20F3E7D820F1E78748007AA8 -:101D500070477049C2784A62024613781846537831 -:101D60001B0218439378D2781B04184312061043C1 -:101D70000002C8617047252808D0262808D02728E7 -:101D800008D041000A2807D8091D06E0022105E015 -:101D90001A2103E0502101E0891DC9B25D4A91601A -:101DA000674948617047594948617047F8B500284C -:101DB00012D00220554E6E4AB07203231360624C5B -:101DC000604A626001276B4D002907D001290BD0C2 -:101DD00002291DD0FFDFF8BD0120EBE7012801D06B -:101DE0006F60F8BD2F60F8BD48490128C96A03D06B -:101DF000022807D0FFDFF8BD012000050143F16292 -:101E00006060F8BD012040050143F1626060F8BDEB -:101E10007069002800D1FFDF7169706A4018564967 -:101E200088604B4855498160B17A012917D05449DF -:101E3000C1600120F16AC0030143F1624C490E68A0 -:101E4000464A10209060002008603F4A09149160C3 -:101E5000FF216A4611704B4C20612F6104E0C56080 -:101E6000E7E71078401E10701078002802D0206933 -:101E70000028F6D01078002800D1FFDF0020E060B5 -:101E8000206160606061A0613948066001142E48DD -:101E90004160324A10215160C9024160F8BDF8B575 -:101EA000334801688F082D49BF004A68D206D60F13 -:101EB00010228A6000240460234822498160FF20A8 -:101EC000694608702F4D2C612A490120086103E002 -:101ED00069460878401E087068460078002802D0DD -:101EE00028690028F4D068460078002800D1FFDF78 -:101EF0002C610648012144728472C1721C4807603B -:101F0000002E02D0154910204860F8BD700D002049 -:101F1000A00D00200015004006010200250003026C -:101F2000050103001F00030280E100E0C01F004024 -:101F300080000010C0000010001700405B06000089 -:101F4000401500400040000400F501404080004082 -:101F500080F501401011004080E200E000130040D5 -:101F6000720D00200016004040160040900D002029 -:101F700000120040001000404085004048810040B1 -:101F8000041000400011004001460A7810464A78CB -:101F9000120210438A78C9781204104309060843D4 -:101FA0000002FD49000AC8637047FC49022008602E -:101FB000FB4908607047FB49022008607047FA49F6 -:101FC0000870704710B5F94807F000FC002800D0F1 -:101FD000FFDF10BD10B5F54807F010FC10BDEE494D -:101FE0004860704730B5F24C0546606AA84200D39D -:101FF000FFDF01202073EF49002025614860EE4893 -:1020000045600120E16A80050143E162EB494860D7 -:1020100030BDE74802210173C6210161E54A002174 -:102020005160416AE44AC63151600121C26A8905A2 -:102030000A43C262E148416070470121DF488905D7 -:102040008160DB48C26A8A430021C2620173704723 -:10205000DB4801214160C160D64900204860D64973 -:102060004860D34948627047D64940200862D64943 -:102070000A6802430A607047D348016840229143CE -:102080000160D049002008627047CF4801681022E3 -:1020900091430160CD49012088617047CC490020FF -:1020A000C861C94801681022114301607047C849DE -:1020B000CA69012A01D000207047C24A92685206BC -:1020C000520E524202700020C8610120704730B5A4 -:1020D0000C00054600D1FFDFE00702D0012C00D044 -:1020E000FFDF002D0AD00221B14801294172C472DC -:1020F000B54805D0022908D0FFDF30BD0121F3E744 -:10210000016804221143016030BD016808221143B7 -:10211000016030BDF8B5A64C0025E17A8A0701D5EB -:10212000420712D4CA0606D5AA4A537A002B02D017 -:10213000927A002A09D00A0702D5227F002A04D108 -:10214000490703D5617F002900D10125677A002264 -:1021500001239D49002F1AD00226304028433BD04E -:10216000086886089C48B6004568ED06ED0F102704 -:10217000876000200860914A98499160FF216A4673 -:102180001170934F38619149012008610CE08B4D2B -:102190009248A8600868800880000860A272E37214 -:1021A000F8BD1078401E10701078002802D03869F1 -:1021B0000028F6D01078002800D1FFDF0020386119 -:1021C0006072A0720120E0727F480660002DE7D0A7 -:1021D000814810214160F8BD012F03D0022F09D0A2 -:1021E000FFDFF8BD08680425A84308606272E37247 -:1021F000A372F8BD08680825A84308606272E372FC -:10220000A672F8BDF8B56A486C49C26A8A600021B6 -:10221000C162017B674D002902D06968012909D09C -:1022200000236B4C2169012906D00022817A012903 -:1022300004D006E00123F4E74022F7E7E668012E28 -:1022400004D000261643012902D004E02026F9E735 -:102250006268012A05D000223243614F022902D070 -:1022600007E01022F8E73E68012E02D1E668012E51 -:1022700004D000261643022902D007E00826F9E719 -:102280003A68002A02D1E268012A04D000223243CF -:10229000022902D005E00422F9E7002B01D0022335 -:1022A00000E000231343022907D16068012804D10C -:1022B0006868012801D0012700E0002749481F4332 -:1022C00001680906090E02D06169012900D00021C8 -:1022D000404E317200680006000E02D0A06901284D -:1022E00000D0002070723748006A002803D0FFF742 -:1022F00074FB012800D00020B0720026E660266141 -:1023000066606661A6612B4846602B483D46416881 -:10231000274C216200686062A07A022809D16078A7 -:10232000002806D01C4A5268127802402078904358 -:102330000CD026771C4FE8070BD038782A4A400883 -:102340008000125808469047012109E001202077BB -:10235000F0E7A80601D5022102E0A80707D5002171 -:102360003A78224B520892009A58606A904738781F -:10237000C0073FD1084841680622A01C093108F077 -:10238000B7F8002834D10448217A40680078C009A1 -:1023900081422DD101202CE00015004080E100E0B9 -:1023A00080E200E000E100E0A1000020A00D00209C -:1023B000700D0020408100404085004000F5014044 -:1023C0000080004040150040001200400010004016 -:1023D00000110040900D0020001300400040000458 -:1023E000001400404016004014AE01001CAE010075 -:1023F000002060772846FFF78DFEA80704D53878BF -:1024000021498000085880472807810F05D0397876 -:10241000C00F1E4A890051588847A80604D538784D -:102420001B498000085880473878022805D16E2063 -:102430000540402D05D101F048F83878042800D334 -:10244000FFDFA07A022818D1207B002815D011497F -:102450004E60022812D0012800D0FFDF616A206997 -:10246000884200D8FFDF0C48216941600120E16A01 -:1024700080050143E16209494860F8BD2169606A4D -:10248000411805484160F1E724AE010034AE010077 -:1024900044AE0100408100404085004000F501400D -:1024A00010B5484806F07EF90021464806F0B3F919 -:1024B0000121444806F07BF94348002181704449DA -:1024C0004248888443490880488010BD10B53D4883 -:1024D00006F068F900213B4806F09DF901213948D2 -:1024E00006F065F9384800218170394937488884F9 -:1024F00038490880488010BD704735498A8C82422F -:1025000004D1314800228270501E888470472D49C2 -:10251000016070472F49088070472D492B4A898CEC -:10252000914209D128498A782039012A02D00160D4 -:102530000120704700207047002101600846704765 -:1025400025480178012907D001210170214820493F -:102550000088888401207047002070471D4948800A -:1025600070471B491B4A898C5288914207D11649F2 -:102570008A782039002A02D00160012070470020AB -:1025800070471348134A818C528891420AD1002126 -:10259000C943818422300178002903D000210170D1 -:1025A000012070470020704709480A49808C4988FB -:1025B000884205D104488078002801D00020704767 -:1025C00001207047CA0D0020C40D0020FFFF00004D -:1025D000A40D0020A2000020C60D002070B5FF4E03 -:1025E000044630790025012805D0FD4EB079012838 -:1025F0000CD0002070BD002915D16570142020700A -:10260000F849A01C08F04AFA35710CE000290AD1FB -:102610006570132020701C22F349A01C07F095FF61 -:102620000120A071B571012070BDED4880790028AE -:1026300002D0EE48408D7047ED487047F8B5ED4840 -:102640000178002902D00C263046F8BD0026E74D5F -:1026500034462E756E75AE75EE752E766E76E6493D -:102660006E734E73DE4F7F213E718170A87E00280D -:1026700004D0FFF701FDFFF78FF9AC76BC71DF489E -:1026800005F02EFFDE4805F02BFFDDE770B5D94AD7 -:1026900000241470DB4B1966D8651078002801D02F -:1026A000FFDF70BDD14D2C756C75AC75EC752C765B -:1026B0006C76D1486C734473C94E7F20347190702E -:1026C000A87E002804D0FFF7D7FCFFF765F9AC76A9 -:1026D000B471CA4805F004FFC94805F001FF70BD98 -:1026E000C248007D704700B5C049C87B897B42075E -:1026F0008307D20FDB0FC007D218C00F101840009D -:10270000052911D20A007A441279921897440905D2 -:1027100009020700BC49085A00BDBC4800BDBC49BD -:1027200000E0BC49085A00BDFFDF002000BDAF48F3 -:10273000B949008A48437047A9484079002800D029 -:1027400001207047F8B50646A84C407BE07330790D -:102750000027A073012825D030882082A048B37BB1 -:102760004371A84DAD482970114608F08AF9B07937 -:102770006873F11DAA4808F084F9607B01260028DF -:1027800000D066759C48407B002800D0A675A07BD1 -:10279000052831D201007944097949188F44040988 -:1027A000222709002782D9E70021944805F09DFEE1 -:1027B00023E00121914805F098FEE91D8F4805F0BE -:1027C000C6FE687B002803D0012806D0FFDF14E096 -:1027D00000218A4805F0CCFE0FE00121874805F072 -:1027E000C7FE0AE00621854805F07FFE05E00221CC -:1027F000824805F07AFE00E0FFDFE7752776691C66 -:102800007E4805F098FE29787C4805F0A5FE042155 -:102810007B4805F06AFE691C794805F08CFE297832 -:10282000774805F099FE26750020F8BD70B56F4C0D -:10283000012525766A4A9279002A01D03A2070BD96 -:10284000704A13780022834205D1E275734808F07C -:1028500018F9E57500E02276002070BD70B50446D9 -:10286000624D0020A87522466E4807F06EFE624851 -:1028700044730120A87570BD10B55C4C00226275D0 -:1028800060730246684807F060FE0120607510BD65 -:10289000534908717047F8B5564D287800282FD154 -:1028A000524C207D00282BD0FFF78CFB0026A6740D -:1028B000E6746E703046FFF782FB0020FFF752F996 -:1028C0005A48FFF746FA5A48FFF75EFBFFF7A1FBAD -:1028D000E07B0127C107002902D0A17CC90711D0E4 -:1028E000810718D5A17C890715D42620FFF743FA64 -:1028F0000020FFF726F9A07C02210843A07419E00C -:102900000C20F8BD2520FFF736FA0020FFF719F953 -:10291000A07C38430DE040070CD5A07C400709D4CB -:102920002720FFF728FA0020FFF70BF9A07C0421ED -:102930000843A074FFF73FFB01210020FFF736FAA0 -:102940000F210520FFF788F92E4D2978681CFFF725 -:1029500077F9A07B01280AD0042808D0607D0028E0 -:1029600005D0627B3049254805F01CFE6675A07DC8 -:10297000002806D020482B49427B983005F03EFEC7 -:10298000A675286E0178002903D00178001DFFF795 -:1029900096F9E86D0178002904D0264A401CFEF71C -:1029A000DAFFA776FFF716FB0020F8BD1149486053 -:1029B0007047F8B501260D4C054600285DD0E07B38 -:1029C0002146C207897C002A01D0CA073ED082076F -:1029D00045D58A0743D426202EE000006C0E002047 -:1029E0004C0E0020710E0020540E00202C0E0020F2 -:1029F000FFFF0000A80000200C0E00207C0E00202D -:102A0000A40E0020EC0D002064AE01009A89130092 -:102A10006CAE01005CAE010071020000ED0D002003 -:102A2000F30D0020FA0D00201A0E002057AE010011 -:102A300054AE0100CF0E0020FFF79DF90020FFF7F4 -:102A400080F8A07C02210843A07416E02520FFF73F -:102A500092F90020FFF775F8A07C3043F4E74007B7 -:102A60000BD5480709D42720FFF785F90020FFF789 -:102A700068F8A07C04210843A074E07C002806D0FC -:102A8000A07B012800D1FFDF00F058FAF8BD002D2F -:102A900003D002210020FFF789F9E07D00270028FC -:102AA0000AD0FE4DFE48691C05F045FD691CFD4835 -:102AB00005F041FDE7752776F948FFF790FAA07B0E -:102AC00005280CD201007944097949188F44020283 -:102AD0000208020001210846FFF7F9FA00E0FFDFD3 -:102AE000E07BA17C884303D1A07B012803D0E6745E -:102AF000ED480670F8BDA774FAE710B5FFF762FA63 -:102B0000E9480078002808D1E848007D002804D072 -:102B10000020FFF74EFF002010BDFFF799FAFFF7E6 -:102B20008CFAFFF7BCF9FFF740FAFFF753FA0C20D5 -:102B300010BDDD49012048707047DC494876704778 -:102B400070B5002402F06BFB00280DD0FF202D3063 -:102B5000FFF729F9D44E3078012808D0022801D097 -:102B600003282CD0FFDF70BD00F0E8F970BDCF4D19 -:102B7000A87B032823D0A87E002803D0FEF7FBFE05 -:102B8000FFF772FACA48FFF72AFAA87BC94D012855 -:102B90000DD004280BD06879012801D0032800D17A -:102BA00010240E20044321460020FFF790FA2879D4 -:102BB000012801D1FFF772FA0220307070BD0120A8 -:102BC000FFF7F7FE70BD70B5BA48B74C0079012821 -:102BD00008D1B948FFF76BFA002801D17F20A07017 -:102BE000FFF753FAB14DA87E002803D0FFF744FA4F -:102BF000FEF7D2FE02F013FB002807D0207802284F -:102C000000D0FFDFA87B012803D006E000F096F992 -:102C100070BD99208000FFF7C6F80120FFF7C9FEBC -:102C200020780028F4D020780128F1D0FFDF70BD93 -:102C3000F0B5044689B000200690FFF787F80190B0 -:102C40000020029098480078022800D0FFDF994EBB -:102C50003079012809D19848FFF729FA002802D1D4 -:102C600091497F208870FFF710FA914805F05FFCCA -:102C70008E4D0746002C79D08D4805F053FD002875 -:102C800074D0FEF7E6FF002870D0A87E00280AD096 -:102C90002824641EE4B2FEF7A0FE022811D0012809 -:102CA00000D000200290824A844CD01C0090062F55 -:102CB00076D2380078440079001887447171710623 -:102CC0007135002CE5D1FFDFEBE7A87B012867D049 -:102CD000042865D002990198084304D1707900282E -:102CE00001D002285CD13079012816D12079002842 -:102CF00013D10120207110784006C00F6071704818 -:102D0000009907F0BEFE684C6E4EA0787F2800D177 -:102D1000FFDFA07830707F20A0706248FFF75FF976 -:102D20006148032101703DE05C48D178C07981425F -:102D30001DD15A481179037A994218D15179437AB1 -:102D4000994214D19179837A994210D1D179C37A79 -:102D500099420CD1117A037B994208D11178407BBA -:102D60004906C90F814202D1012101E018E000218A -:102D7000A87B012801D0042801D100290AD100280C -:102D80000ED102990198084304D17079002801D02E -:102D9000012805D1287E002802D1687E00281BD09A -:102DA00001200690A87E002803D0FFF765F9FEF702 -:102DB000F3FD0698002802D00120FFF7FAFD3A48FB -:102DC0000178002906D00178012903D00078032872 -:102DD00000D0FFDF09B0F0BD33483B4F4068397B7E -:102DE0004173797B8173B97BC173F97B0174F91EDF -:102DF00009784906C90F41761A30009907F041FE5B -:102E00002948397C40684174797C8174B97CC174EB -:102E1000F91E897D017500994A7D0B7D11021943C8 -:102E2000C182F91E8A7E4B7E12021A434280009AAA -:102E3000537E177E1A023A4382808A7F4B7F1102AB -:102E40001943C1802149083007F010FE204801795C -:102E5000CA061549D20E49680A7600794009C03180 -:102E60000873B079002800D0FFDF002030720E48D0 -:102E70001849476838886885787E70737A8B8A81AC -:102E8000BA8BCA81F88B08820448134900783075E0 -:102E9000124807F0F6FD7888A88721E0EC0D0020A5 -:102EA0007C0E0020A40E0020A80000202C0E002084 -:102EB000CC0E00204C0E0020AA0000206C0E00203A -:102EC000720E0020780E0020CF0E0020EB0E0020A6 -:102ED000EC0E00204E0E0020ED0D0020610E0020B3 -:102EE000B888E887F8882080C037387BA0700298BF -:102EF0000028E0780BD001210843E070FEF786FD42 -:102F0000E1784000C907C90F0143E17002E04008C1 -:102F10004000E0700120B071294C00202070FFF7C4 -:102F200097F8FFF78AF8FEF7BAFFFFF73EF8FFF7CA -:102F300051F80120616802F055FA33E7F8B5FFF760 -:102F400087F8FFF77AF8FEF7AAFFFFF72EF81D4E75 -:102F50000027B07E002804D0FFF78EF8FEF71CFD96 -:102F6000B776174D2F70FFF735F8B07B012804D0E6 -:102F70000021084602F036FAF8BD0021022002F0D6 -:102F800031FA114CA079002800D0FFDF68780028C2 -:102F9000F2D00E48417B6173007820750C490D48D2 -:102FA00007F06FFD0C490D4807F06BFD3C202072C7 -:102FB0006868008870850120A0716F70F8BD0000FE -:102FC000A80000202C0E00204C0E0020EC0D00204C -:102FD000F30D00205A0E0020ED0D0020610E0020A0 -:102FE000F8B5FC4F0A46044600207978FA4D0646AB -:102FF000002902D0012909D00FE0F849497A0029B7 -:103000000BD0002A08D10120787005E0A97F0029A3 -:1030100003D0002A00D17E70012079782B235943F8 -:1030200049198B7F034311D0002A22D12A22A01CE8 -:103030001F3107F08AFA6670042020700120A0700A -:1030400078782B2148434019867712E028780128A8 -:1030500001D00020F8BD002A0BD16670132020702B -:103060001C22A91CA01C07F070FAA6712E70DC4867 -:10307000C6770120F8BDD8480178002901D08088A2 -:103080007047D8487047F8B5D34E0746B07F002840 -:103090002DD1384605F04BFA00210125D24C0728E6 -:1030A00024D202007A441279921897440305081F2B -:1030B0001F1F0A00217006E02570217208E003201E -:1030C00000E002202070C949384605F081FA2072DC -:1030D000384605F049FA6070C549384605F030FABF -:1030E000BC4CC44F20787F2803D101E02172F8BD89 -:1030F000FFDF207838707F202070B577032001F043 -:103100006CFAF8BD10B5002001F0FCF9002812D0CF -:10311000FEF751FF00210120FEF748FEB648FEF7FA -:103120005EFFAF4CA06AFEF75DFF2079032805D053 -:10313000022803D006E000F01DFD10BD0121002093 -:10314000FEF7C5FFFEF7AAFFAC4C6078002803D05D -:10315000FEF711FCFEF788FF0320E07010BD70B58C -:103160009F490028CA8D08D0FF2A0DD25004000CB8 -:10317000C885FF2808D9FF2005E0012A04D9500896 -:10318000C88501D10120C88592484268012A01D032 -:10319000002A01D10D224260D2431723974C5A4393 -:1031A000637B3B25DB436B43D2184260C98D900C97 -:1031B00007F045FA617370BDF8B5904CE0780228CD -:1031C00004D0E078012801D00C20F8BD0020824A0C -:1031D00005462B21414389188D77401CC0B2022837 -:1031E000F7D315706078002804D0FEF745FFFEF78E -:1031F000D3FB65707A4845778577C5778049257018 -:1032000001228A770571A570CA760A774A77724ECD -:1032100001463246736F7432B46FF66FD7688B60B5 -:10322000CC600E614F6112698A6105770020F8BD9C -:1032300010B5724A0023D370694B5963186301209B -:10324000D070FFF7B9FF002800D0FFDF10BDF1B547 -:1032500082B00C20019069480090C078012806D007 -:103260000098C078022802D00C2003B0F0BDFEF711 -:10327000A9FE0020FEF776FC594C207F002837D0AD -:10328000554920460F4682687437C3680569466908 -:103290004A678B67CD67FE60806938610026667774 -:1032A000A677574DE87E002805D1287F002802D157 -:1032B000687F00281AD000980078002816D020795E -:1032C000032802D0022805D008E005214D4800F06F -:1032D0006EFC03E003214B4800F069FCA97E3846F0 -:1032E000FEF7AEFC0020019026770CE0267703E085 -:1032F0000098C078022804D00098C078022828D00E -:103300000AE0002001900098C078012804D10099BB -:10331000087300980221C170606B0178002903D006 -:103320000178001DFEF7CBFC206B0178002906D048 -:10333000354A401CFEF70FFB0099012048700298A7 -:10334000A0623248FEF720FEFEF744FE019803B06B -:10335000F0BD00990120C8700C2003B0F0BD70B51D -:10336000FEF730FE254CE078022803D0FEF732FE4F -:103370000C2070BD01201A496073C8850220FEF739 -:103380001EFE2348FEF7E5FC224E0025A07803210F -:10339000401C07F054F9A170885D012807D06D1C0E -:1033A000EDB2032DF2D3FFF7ADFE002070BDC8B221 -:1033B0001949085CFEF7DFFC0020FEF7C2FBF2E7CC -:1033C00070B5074C0125A577E37F002B26D03A2066 -:1033D00070BD0000B0000020F40E0020340F00206B -:1033E000740F0020FFFF0000140F00201D0F0020AD -:1033F000160F00203C0F0020AC0F0020940F00207F -:10340000540F0020D40F0020AF0F002074AE010035 -:103410007AAE01006F0F002077AE01000026002871 -:1034200002D1A07B884209D1A17366771146FE487C -:1034300007F027FB6577FD4805702577A677002004 -:1034400070BD024600200123F949002A03D0012A59 -:1034500003D0122070478B7400E088740B774A7693 -:103460007047F34A032800D151611076012010778C -:1034700000207047EE48017F002903D0407E0028DD -:1034800003D1704740790028FBD00120704710B568 -:10349000FEF7DEFDFEF7D1FDFEF701FDFEF785FD2F -:1034A000E24C6078002805D0FEF7E6FDFEF774FADE -:1034B00000206070012020730220E070FEF78AFD7A -:1034C000002010BDD9490871704710B500F052FBBB -:1034D00010BDF0B5D74ED54D83B0002810D0D648DA -:1034E00005F0F0F8002804D1D34805F00BF90028C6 -:1034F00006D0CF4C207903280DD1A07F00280AD018 -:10350000E87805287ED201007944097949188F446A -:10351000929292FEFD00E878052874D20100794469 -:10352000097949188F446F6F6F02F400C24804F0A4 -:10353000FEFFC0498870C1480290807F002803D1F7 -:10354000FEF704FC002800D00120009068780028D5 -:1035500010D02826761EF6B2FEF73FFA074602285C -:1035600002D1002EF6D1FFDF0098002812D1012FE2 -:1035700010D00090AF4FB248B978052601900729C6 -:103580007ED20800784400790018874466F50579F2 -:10359000797923000120ECE76878002803D0FEF752 -:1035A0006BFDFEF7F9F9A348FEF781FD002801D174 -:1035B0007F203870FEF769FD009800284AD02079F6 -:1035C000012801D0022845D1FEF769FC9A48FFF78F -:1035D0005AFD83E06878002803D0FEF74DFDFEF722 -:1035E000DBF99448FEF763FD002801D17F20387095 -:1035F000FEF74BFD009800282CD02079022805D03A -:10360000012801E017E0FAE120D023E08A48FFF723 -:103610003AFD012000F076FF00280AD0894986484B -:1036200004F0ADFF8748FEF7DAFC607F002845D143 -:1036300003E000F09FFA03B0F0BD01210846FEF759 -:1036400046FDFEF7E6FCEE7003B0F0BD7A48FFF7EA -:103650001AFD43E0FEF723FC40E06878002803D021 -:10366000FEF70AFDFEF798F97248FEF720FD0028E4 -:1036700001D17F203870FEF708FD0098002800E097 -:103680002AE178D02079022806D00128DED003284C -:1036900028D0FFDF03B0F0BD6748FFF7F4FC01203E -:1036A00000F030FF0028C4D06649634804F067FF8B -:1036B0006448FEF794FC607F0028BED05C49029805 -:1036C0000A8982824A89C282898901835D48019977 -:1036D00004F031FF00206077A077AEE7FFF712FD1E -:1036E00003B0F0BD54482168C2788B7E9A421FD146 -:1036F0000279CB7E9A421BD142790B7F9A4217D135 -:1037000082794B7F9A4213D1C27902E090E179E14C -:10371000F5E08B7F9A420BD1027ACB7F9A4207D198 -:1037200000784A7E4006C00F904201D1012000E09F -:1037300000206279012A20D000288BD0022000F0DE -:10374000E1FE0028AFD0012000F047FF3D493A4894 -:1037500004F015FF2068C18A3A4804F097FF2068FA -:10376000017D384804F096FF3648FEF738FC607F4C -:10377000002869D10DE012E017E00028DED12E48C4 -:103780001A3104F0DDFE2C4804F0EEFE2168487684 -:10379000D4E70120E0770620E87003B0F0BDFEF723 -:1037A0007EFBFFF7AFFC03B0F0BD6878002803D0C4 -:1037B000FEF762FCFEF7F0F81E48FEF778FC0028E2 -:1037C00001D17F203870FEF760FC00980028E6D019 -:1037D000FEF73FFA0028E2D020790328164807D0E8 -:1037E000FFF751FCFEF75BFBFFF78CFC03B0F0BD6D -:1037F0002168C2788B7E9A422DD10279CB7E9A4283 -:1038000029D142790B7F9A4225D182794B7F9A4206 -:1038100021D1C2798B7F9A421DD1027ACB7F9A4205 -:1038200019D10078400610E07C0F0020940F002092 -:10383000740F0020B0000020AC0F0020540F0020B7 -:10384000680F0020D40F00202AE04A7EC00F90426B -:1038500001D1012000E000206279012A30D0002847 -:1038600000D1F7E6022000F04DFE002800D1E0E68E -:10387000012000F0B2FEFB49FB4804F080FE206806 -:10388000C18AF84804F002FF2068017DF54804F081 -:1038900001FFF448FEF7A3FB607F002800D178E722 -:1038A000F24902980A8982824A89C28289890183FF -:1038B000EC48019904F03FFE00206077A07768E7AC -:1038C0000028CFD1E8481A3104F03AFEE64804F067 -:1038D0004BFE21684876C5E76878002803D0FEF7DC -:1038E000CBFBFEF759F8E248FEF7E1FB002801D1D7 -:1038F0007F203870FEF7C9FBFEF7D1FAEEE6DA4812 -:1039000004F015FEB070D848D649C2784B7A9A4276 -:103910001CD102798B7A9A4218D14279CB7A9A4299 -:1039200014D182790B7B9A4210D1C2794B7B9A4297 -:103930000CD1027A8B7B9A4208D100780978400634 -:10394000C00FC909884201D1012400E00024FEF71C -:10395000A6FAB078042840D1002C3ED0C448FEF727 -:10396000A6FB002801D17F203070FEF78EFB287B5C -:10397000002802D00020FFF7F2FB01272F73BD4C77 -:10398000B94D607A0028B9D10420E072284604F0CD -:10399000EBFD002802D0012804D102E000202073B2 -:1039A00000E02773B449284604F0CAFDB34928460D -:1039B00004F03AFEE0741F2801D91F20E07430782B -:1039C000AF4D7F2800D1FFDF307828707F20307026 -:1039D0006772042000F001FE80E6A548FEF767FB51 -:1039E000002801D17F203070FEF74FFB287B002894 -:1039F00002D10120FFF7B3FB002028736EE6FFDF42 -:103A000003B0F0BD6878002803D0FEF735FBFDF762 -:103A1000C3FF9748FEF74BFB002801D17F20307091 -:103A2000FEF733FBFEF73BFAFFF76CFB03B0F0BD8C -:103A30008F48FEF73CFB002801D17F203070FEF755 -:103A400024FB287B002802D10120FFF788FB0020FF -:103A50002873FEF724FAFFF755FB03B0F0BD70B5ED -:103A6000884DE87807285CD2010079440979491823 -:103A70008F445757575757030B007B48FEF7AFFA51 -:103A8000FEF70CFB0420E87070BDFEF7E1FAFEF7CC -:103A9000D4FAFEF704FAFEF788FA01262E73022004 -:103AA000E870FEF797FA784C2078002800D0FFDF06 -:103AB0000020A0706D4800680188A180417EE171FE -:103AC000428B2281828B6281C18BA1814188E182FC -:103AD00081882183C0886083287920776B486C496E -:103AE000807EA0736B4806F0CCFF6878002803D076 -:103AF000FDF773FF012808D0607F40084000607721 -:103B00002670022000F069FD70BD607F3043607751 -:103B1000FDF77CFF617F4000C907C90F0143617752 -:103B2000EEE7FFDF70BD10B5564CE07805281DD2DA -:103B300001007944097949188F44181818190200AE -:103B40004B48FEF7B4FA002802D149497F2008709B -:103B5000FEF79BFA207B002802D10120FFF7FFFA35 -:103B600000202073FEF79BF9FFF7CCFA10BD00F0A0 -:103B700001F810BD10B5FEF76BFAFEF75EFAFEF71E -:103B80008EF9FEF712FA3F4C6078002805D0FEF758 -:103B900073FAFDF701FF00206070012020730220FE -:103BA000E070FEF717FA002000F017FD10BD70B5A9 -:103BB000354C0546264660367434032943D0052922 -:103BC00040D104F08DFC0521284604F08EFCB17E26 -:103BD000284604F0C1FC2146284604F0ACFC0C3415 -:103BE000216828460D3104F035FD21682846113141 -:103BF00004F039FD2068017D284604F04BFD206863 -:103C0000C18A284604F042FD20684188284604F015 -:103C100031FD20688188284604F030FD2068C18885 -:103C2000284604F02FFD21682846083104F045FDA0 -:103C30002068017E284604F02FFD124801792846AD -:103C400004F033FD70BD04F04BFC0321284604F062 -:103C50004CFCB17E284604F07FFC2146284604F047 -:103C60006AFC70BDD40F0020AC0F0020740F002040 -:103C7000B0000020340F0020410F0020480F00202A -:103C8000670F0020940F0020F40E0020540F002036 -:103C9000680F0020030F0020F0B5054685B00F46E1 -:103CA000012000F035FDC4B20B2000F031FDC0B2A0 -:103CB000844200D0FFDF012000F02AFDC4B21820AA -:103CC00000F026FDC0B2844200D0FFDF3846F84F36 -:103CD0006C1E6900CD190026403D09287ED20100E6 -:103CE0007944097949188F44042C343430B2B2B283 -:103CF00067000B2C00DBFFDFE88F0621F9F756FF8A -:103D0000070000D1FFDF0B2C00DBFFDFE88F3988D5 -:103D1000884200D0FFDF9820C05D002800D1FFDF7F -:103D2000E448F12146604670C6607A6A89008A429A -:103D300001D9561A91368660384602F09EFB05B0CE -:103D4000F0BD02F0ECFB05B0F0BDFEF75BFA05B08C -:103D5000F0BD0420C04300F0DBFCC6B2192000F027 -:103D6000D7FCC0B2864200D0FFDF0B2C00DBFFDFA8 -:103D7000E88F0621F9F71AFF060000D1FFDF0B2CB0 -:103D800000DBFFDFE88F3188884200D0FFDF30465C -:103D900002F075FC002800D0FFDF002231466846A3 -:103DA00000F0CFFCA220805D6946FCF795F9308ECB -:103DB000401C308605B0F0BD0B2C00DBFFDFE88F28 -:103DC0000621F9F7F3FE070000D1FFDF0B2C00DB23 -:103DD000FFDFE88F3988884202D000E037E0FFDF5C -:103DE0003C468034207E042800D0FFDF002020766F -:103DF000A037BD78B04E681E0B2800DBFFDFAC4853 -:103E0000690008184038C687B878FBF737FD0020EE -:103E1000B870A16A002909D0236BE26AD2188B69B5 -:103E2000D2188A61A26A616AD16002E0A149626A1D -:103E30000A61616A002902D0A06A086101E0A16AF2 -:103E400088619E480078F5F790FB05B0F0BDFFDF74 -:103E500005B0F0BDF8B5074699480025C28B521C45 -:103E600092B2C2830078002816D0954B04285C6873 -:103E700014D0052848D0FFDF914C29462069FBF774 -:103E80007BFF00212061397001213971B860A06881 -:103E9000FF303130F860F8BDFFDFEDE788480A2ACF -:103EA00001D3022200E003227A7100296FD0056954 -:103EB00080480069002825D00646C0680028FBD14C -:103EC000002E1FD03078002800D1FFDF71697068A4 -:103ED00041182846FCF71AFE050009D5601B6E4202 -:103EE0002146401E06F0B9FB60432146851B05E0D4 -:103EF000214606F0B2FB604321462D1A8D42BBD904 -:103F0000FFDFB9E70025B7E70220787100294FD01D -:103F10006B488669002E00D1FFDF664BAC20002580 -:103F20001C698259691E2846002C0CD0A069904259 -:103F300003D3884201D2014625462046E468002C7E -:103F4000F4D1002D00D1054698363561002D1FD0E3 -:103F5000E868EE60F060002800D006610020346957 -:103F6000B061002C0DD0A169002908D070690090C3 -:103F7000814200D2FFDFA1690098081AB0610020D9 -:103F8000A061002D0FD02878002806D104E00FE0B2 -:103F90000020F0601E61E1E7FFDF69696868411891 -:103FA0004748016202E0464900200862454D63E748 -:103FB000254661E7F0B5074685B00E46012000F0C2 -:103FC000A7FBC4B20B2000F0A3FBC0B2844200D018 -:103FD000FFDF012000F09CFBC4B2182000F098FB2A -:103FE000C0B2844200D0FFDF00250120344C092EEE -:103FF0005BD231007944097949188F4404162F2F78 -:104000002B565614460060732073607800280AD13E -:1040100028484560C5602573A068C338FFF717F9C5 -:10402000002800D0FFDF05B0F0BD6178002909D07D -:10403000207B002801D1FFF72AFA6573FBF76BFBA1 -:1040400005B0F0BDA073FFF78AF90028F8D0FFDFB4 -:1040500005B0F0BDFEF7D6F805B0F0BD0420C043B2 -:1040600000F056FBC4B2192000F052FBC0B28442EB -:1040700000D0FFDF012200216846FFF7EBFE694612 -:104080003846FCF729F805B0F0BD2078052800D0A7 -:10409000FFDF207F002800D1FFDF25772570207DFE -:1040A000FBF7ECFB257505B0F0BDFFDF05B0F0BDFB -:1040B00034100020FC0F0020FFFF0000B80000209B -:1040C00010100020B80B0000F0B5FF4C87B020782E -:1040D0000026042805D02078052802D00C2007B03F -:1040E000F0BD01276770607B0025002813D072B6F1 -:1040F000607B002808D0A07B002805D0FFF7C7F917 -:104100006573A573FBF707FB62B6207DFCF79FFD87 -:10411000002813D018E0207D009003206946087322 -:104120004873FBF7BFFB04900020C043694605902D -:104130000F7202A90098FBF7CFFFE6E720BF207DB2 -:10414000FCF785FD0028F9D0207F002805D02577D1 -:104150002078052800D0FFDF0C2665702570207DB3 -:10416000FBF78CFB2575304607B0F0BDF0B5D6489F -:1041700083B00078002801D0FFF7A6FFD3480121C3 -:10418000017069460620F9F79DFC002800D0FFDF8A -:104190000027CF4E0AE00298002807D09821095C3A -:1041A000002903D00088B04206D140E06846F9F704 -:1041B00065FC0028EFD03AE00621F9F7F7FC04008F -:1041C00000D1FFDF2546A035A878FCF740FD002888 -:1041D00005D120BFA878FCF73AFD0028F9D080343B -:1041E0002776AC78601E0B2800DBFFDFB949620040 -:1041F00051184039CE87A878FBF740FBAF7069466D -:104200000620F9F75FFC00280CD0FFDF0AE00298D7 -:10421000002807D09821095C002903D00088B0420B -:10422000CAD104E06846F9F729FC0028EFD0A74876 -:1042300007700761002003B0F0BD10B50078A64CF0 -:10424000002809D0012806D0FFDFA068A3498842D2 -:1042500000D3FFDF10BDA248A060F6E710B59E4C6A -:1042600000232070984803704370037703734373EF -:1042700083738361037597499548088005224880B8 -:104280008880091D521EFAD1180004D0002B04D0DA -:104290009348A06002E0A36000E0FFDFA0688F49C0 -:1042A000884200D3FFDFFFF761FF10BD70B5864C79 -:1042B0000E46217884B01546002902D00C2004B0A7 -:1042C00070BD884A416A8A1801468031CA62A0617D -:1042D000087E002800D0FFDF8348464345438348DB -:1042E000ED1C30186660A560854200D82846A060A5 -:1042F00076490020C8600521217060702077E08336 -:104300007B48FBF767FA2075002800D1FFDFFBF739 -:10431000C9FA2061002201216846FFF79BFD207D3C -:104320006946FBF7D9FE002004B070BD10B4884286 -:1043300001D2012200E000221218D2B2814201D241 -:10434000012000E000204018C1B28A4201D2084694 -:1043500000E01046441A831A1B1950245118634375 -:10436000FF22493251435A189821414351189C2247 -:104370005043081810BC98387047CB2292009142E5 -:1043800000D21146416270474F480078002801D0A2 -:104390000020704710B50620F9F7A6FB0121484020 -:1043A00010BD10B5484C84B02278002A02D00C20F1 -:1043B00004B010BD4C4A51435043C91C4B4AA16044 -:1043C00060608018814200D80846A06000206070BC -:1043D00004212170E0834648FBF7FCF92075002892 -:1043E00000D1FFDFFBF75EFA4249FBF7C5FC206115 -:1043F000002201216846FFF72DFD207D6946FBF76D -:104400006BFE002004B010BD70B52F4CA169016097 -:10441000FFF75AFE0023002818D1A16980318A6A6B -:10442000002A09D00E6BCD6AAD199669AD19956158 -:104430008D6A4A6AEA6002E0244D4A6A2A614A6A41 -:10444000896A002A01D0116100E08B61A36170BD0F -:1044500070B51D4C84B02078052802D00C2004B023 -:1044600070BDA069002800D1FFDFA0698030007E08 -:10447000002800D0FFDFA069A0308078002800D09D -:10448000FFDF1D48FBF7A6F9A169A222505405469B -:104490000E88401E0B2800DBFFDF0E496800401825 -:1044A0004038C687A069A0308078002800D1FFDF9F -:1044B00001226846A16900F044F9A0696946A0306C -:1044C0008078FBF709FE19E010100020FC0F002097 -:1044D000FFFF000034100020B80000206A18000020 -:1044E000C4090000EB04000071020000B3FBFFFFF1 -:1044F000B53F0100B80B0000993C01000020A0610D -:1045000004B070BD10B5CB494C68983400280AD06F -:1045100001280BD002280DD0FFDFC7488068A042D9 -:104520000BD9012010BDFF347934F6E7B1208000AB -:104530002418F2E7FF346134EFE7002010BDBD48D6 -:1045400082684168914202D20078002801D00020A0 -:1045500070470120704730B502460423B74D8032C2 -:1045600085B000290AD0012921D0022904D00329CD -:104570001FD0FFDF05B030BD137611E00446AD4813 -:1045800000780028F8D101222146684600F0D9F8C9 -:10459000A220005D6946FBF79FFD208E401C20860F -:1045A000FBF7B9F82878F4F7E0FF05B030BD032039 -:1045B00010E04188A24B5943A24B1960D16B0B8983 -:1045C000C3828B7903754B8943808B898380C9892A -:1045D000C1800220107605B030BDF0B50146974885 -:1045E00000250078944C85B0052978D20A007A44D9 -:1045F0001279921897440212596F6F00E583F4F70D -:10460000B4FF607800285FD1002211466846FFF7AA -:1046100021FC207D6946FBF75FFD55E08549206957 -:104620004A68874B8018884A09698018A2695588AA -:1046300098325D43914218D0216AFCF767FA060070 -:1046400009D5A81B77422946401E06F006F86843A4 -:104650002946C61B05E0294605F0FFFF68432946A9 -:10466000361A8E4202D9FFDF00E0002673488068C8 -:10467000864205D2A169724A48884243961904E0ED -:104680006F49304605F0DBFFA169C882A0690521AA -:104690000175C08A6A4948436649301AC8606B4947 -:1046A000884200D3FFDF05B0F0BDE583F4F75DFF7E -:1046B00001202077A06921698030C1610576FFF76C -:1046C000C7FE002800D0FFDFFBF725F86573A57350 -:1046D00005B0F0BD03E0F4F748FF05B0F0BDFFDF23 -:1046E00005B0F0BD704700B5524A00290BD0012932 -:1046F00003D0022903D0FFDF00BD401E03E0517844 -:10470000491C5170001F506000BD4B480078704735 -:104710008107C90E00280BDA0007000F083880084F -:104720004B4A80008018C069C8400006800F70475F -:104730008008484A800080180068C8400006800F42 -:104740007047F7B50F46064649883D483C4A414305 -:10475000F88A82B0504300253C4680340090227E87 -:10476000002A09D03348012A40682ED0022A16D0E8 -:10477000032A2AD0FFDF3CE00498002800D1FFDFA5 -:104780002C4D6868002800D1FFDF6868E968001DCB -:104790000918314A009880180D18012013E0049977 -:1047A000491E084300D1FFDF2648016800980D1814 -:1047B0000498002806D01F48416828480818A842D5 -:1047C00000D9FFDF0320207611E00D46049900296F -:1047D0000DD0002804D117484078002800D0FFDF12 -:1047E000144841681D480818A84200D9FFDF002D71 -:1047F00000D1FFDF2946E069FBF7BEFAE061002047 -:10480000307001253571E069B060384601F072FF03 -:10481000002801D0757104E0207E012807D0032014 -:104820007071786AFF30CF30F06005B0F0BD0220C3 -:10483000F6E70000FC0F002010100020B800002058 -:10484000E2040000BC0000204E0600006A180000D0 -:1048500000ED00E000E400E0550400005F0400000B -:10486000FD48C07E7047FD4840687047FC48C07EE8 -:10487000704710B4884201D2012200E000221218D1 -:10488000D2B2814201D2012000E000204018C1B222 -:104890008A4201D2084600E01046441A831A1B19C6 -:1048A000502451186343FF22493251435A1898212A -:1048B000414351189C225043081810BC9C38704743 -:1048C0006522D200914200D2114641627047FFB585 -:1048D000E14E85B0706A3468056860680190306A9E -:1048E0000390298E0798401A80B2029008980028F9 -:1048F00004D0274638372046483002E0371D284686 -:10490000A8300090032038710598002819D001289C -:104910007ED0022856D003287BD0FFDF08980028DD -:1049200003D03879032800D0FFDFA16A7069FBF754 -:1049300023FAB860216A606A81426BD900990860E5 -:1049400022E1306A002800D1FFDFE88AC5494843E8 -:10495000421806980021002804D05043C24905F0AF -:104960006EFE411CA16101916A88BE48002142434C -:104970000698002804D05043BB4905F060FE411C56 -:10498000E161306AB74A801CA062E98AB54B5143A5 -:10499000019A891AB54A89180918A162287D019AD5 -:1049A000584352001018FF30193020626062306A9C -:1049B000081AAF49801E8842B0D2AE4988427DD2E3 -:1049C000FFDF86E0E88AA74AE16850430A180698A4 -:1049D0000021002804D05043A34905F030FE411CBB -:1049E000A1616A889F48002142430698002804D0AC -:1049F00050439D4905F023FE411CE161306A0028C7 -:104A000000D1FFDFAE20405B964A0028E88A02E032 -:104A10002EE061E0B6E0E16821D050430818A169BA -:104A2000401AA0622169A0688E4A4843A1694018D3 -:104A3000297D400051434018FF30173020626888BC -:104A4000E1695043411A8C4808186062A06A316AD3 -:104A5000401A8A49FF38553888423AD35EE75043B6 -:104A60000818A169401A3168D63849684018D8E753 -:104A7000284680300190C08D002800D1FFDF306AC9 -:104A8000002800D1FFDF68887649E3694843C01AEF -:104A9000A06201999C46CA8D2169A368521A4B43B2 -:104AA000A169591863465343C9182A7D6D4B4900C3 -:104AB0005A438918FF311731216200E009E06E493D -:104AC00041186162316A401A6C49FF385538884292 -:104AD000C4D20120387121E70898002803D034207F -:104AE000005D00287ED168885E494843E169401A2C -:104AF00002994843A062284680300490C08D002867 -:104B0000019822D0002800D0FFDF0498554AC18DBB -:104B100002980818E16948434000FF3017302062CE -:104B200068885043411A54480818606254484068E5 -:104B3000002816D0A26A03990120511A4F4AFF3962 -:104B4000553991428AD23871E8E6002802D003989C -:104B5000002800D1FFDF0198A16AD6380818A062AA -:104B6000D3E7FAF79FFE726901461046FBF7CEFFC6 -:104B7000A16A081A4149FF3850388842ABD2012057 -:104B800009B0F0BD009801600098696A006840189B -:104B9000FF305030F8609820415B0798081A00B247 -:104BA000002804DD0598022801D0032000E0002041 -:104BB00078710E98002813D0C035298800291DD09F -:104BC000688868802A79401C42438A4208D27879F2 -:104BD000401E002804DD012078716888401C688030 -:104BE000089800E007E038700898002808D03420C2 -:104BF000005D002804D0022009B0F0BD0020E0E7ED -:104C000008980121484020346075307FF27E394693 -:104C1000B37E9A4202D0FBF75FFA04E00020F07600 -:104C2000B07630607062002009B0F0BD70B5144DF0 -:104C300009292B686A686ED20C007C4424792419F7 -:104C4000A74404748C9989A4A468A1000020106270 -:104C5000D17E042968D215E04C100020DC00002031 -:104C600074100020E204000040420F0033040000F2 -:104C7000750900003104000094FBFFFF5C08000090 -:104C8000CC0000200B007B441B79DB189F444C4C6C -:104C90000144516A0C681168087011684860106816 -:104CA0002030407D002808D1FAF7FCFD69680968CA -:104CB000096CFBF72BFF002817DC6868228E01685F -:104CC000498E914205D123468033998B8A1ADA8323 -:104CD00004E0891A9E2211530168498E21860268D8 -:104CE000C1681164C168416111E068680168098E9A -:104CF000228E8B1A22468032D3830168098E218648 -:104D000001680B6CC3600B6C4361886C9062204639 -:104D100002F0D6F970BD39E0D0685061FDF7BBFDF7 -:104D20000028F7D0FFDF70BDFFDF70BDD07E042804 -:104D30000FD201007944097949188F440A0A010405 -:104D400002F08DFA70BDFDF7D8FE0028FAD0FFDF23 -:104D500070BDFFDF70BDFDF755FA70BDD87E02282B -:104D600006D0D87E032800D0FFDF00F0A4FB70BD82 -:104D700000F0E7FB70BDD87E0228F9D0D87E03286A -:104D8000F3D0FFDFF1E7FAF779FD70BDFFDF70BD0B -:104D9000F3B581B00298F94E0024F94D09284BD2A1 -:104DA00001007944097949188F4404313E3E314667 -:104DB000463E3E007068F24F002800D0FFDF77606B -:104DC00002990198FFF732FFE87E02282AD1706825 -:104DD0000768406A0668FAF74AFD7188E94A514354 -:104DE000FA69891AAE39B72800D8B7206523DB00E5 -:104DF0001818081AE449F1224018716A9200914289 -:104E000000D98C1A844200D22046F86206E001469E -:104E10000198FFF70BFFE87E022803D129680120E3 -:104E20002031087503B0F0BD014635600198FFF7E9 -:104E3000FDFE346003B0F0BDFFDF03B0F0BDF8B598 -:104E4000CE4C07460D46092920D208007844007947 -:104E500000188744040F13130F1B1B131300606803 -:104E6000CA4E002800D0FFDF294638466660FFF7AB -:104E7000DDFEF8BD3846FFF7D9FEF8BDC348206017 -:104E80003846FFF7D3FE00202060F8BDFFDFF8BDF5 -:104E9000F0B5BB4985B0CA7E0026B84C032A03D0C2 -:104EA0002831CA7E032A67D100252160002821D03D -:104EB00001280BD0FFDF2068002E056045622560C9 -:104EC0005AD0B3484560002005B0F0BD0320887675 -:104ED00000E020BF2168C87E002803D0C87E8A7EFB -:104EE0009042F6D0C87E002802D000268D76E2E7F8 -:104EF0000126FBE70026032708468F76C97E032993 -:104F000003D0C07E002833D033E00120FDF715FE2A -:104F10002068007F002800D1FFDF2068067F6846F8 -:104F200007714771FAF7BEFC0290FF20F53003903D -:104F300001216846017069463046FBF7CDF82068CC -:104F4000007FFBF784FE002806D120BF2068007F89 -:104F5000FBF77DFE0028F8D02068007FFAF78EFC72 -:104F600020680577C576857605600126456200E0F4 -:104F70000126206885769EE70C2005B0F0BD10B5AF -:104F80007F4800F071FB814800F06EFB81490020F2 -:104F900008757F4948707A4948617C4A5061887633 -:104FA000907676494860086010BDF8B57A4E05469F -:104FB0003068002401270004810F78480068800FC2 -:104FC000814200D0FFDF3068754E0004810F3068E9 -:104FD0000006800F814200D0FFDF7248C06931684F -:104FE000800F0904890F884200D0FFDF6E480570EA -:104FF000634DEC76AC76654EF476B4766B4807710B -:1050000004606C6274622C60614F346028467C607E -:1050100000F02AFB304600F027FB5E4804757C70E8 -:105020006C617461AC76B476544844600460F8BD39 -:105030005E4908717047F8B551490546CA7E534824 -:105040004E4C002A02D1C27E002A03D0C97E02291A -:1050500007D009E056482160FAF7BCFB21680877C1 -:105060000AE0C17E002901D00C20F8BD2060514823 -:10507000FAF7B0FB216808774548002D45602168A4 -:1050800008604D48486212D028460121C430FCF720 -:105090000FF90620F8F738FD06460720F8F734FD2B -:1050A0003118C035287905F0CAFA491C29712068E1 -:1050B000007F002800D1FFDFFAF7D9FB3F49884283 -:1050C00000D208463E49401886B221680320C876BF -:1050D000FDF709FB21680861FDF729FB0127002581 -:1050E000002826D0FDF723FB21684A6A1060086873 -:1050F000012107706846FCF764F86846007831497A -:10510000000205F09CFA0F46FAF7CCFBF119FAF70A -:1051100033FE2168C8602268032010725072157136 -:10512000107FD37E111D967EB3420ED0FAF7D4FFC6 -:105130000FE0FAF7B7FB3146FAF71EFE2168C860A8 -:105140000868057008684770E5E7D57695761560BC -:105150005562206805830020FDF7EFFC00202560E4 -:10516000F8BD7047F8B5064EF17E002903D1074916 -:10517000C97E002928D00C20F8BD0000CC000020FA -:105180004C100020E2040000AFFBFFFF7410002071 -:10519000DC0000209C10002000E400E008E400E0B7 -:1051A00018E400E000ED00E0C4000020D40000207E -:1051B000914D01003F4E0100C8000020F60500009F -:1051C000BB020000102700000221F176F74FF64DD8 -:1051D00077623560002438602C7500943979C030CE -:1051E0004A00F349007B8A5A4000085A23461018A7 -:1051F00081B222462046FFF76AFB002800D0FFDF7D -:105200002C610120AC6028756C862C86E948847579 -:105210003968088E401E088634830020F8BD10B51A -:10522000E54801244068817E03290CD00168497853 -:10523000002906D0006AE149884202D90024FDF71E -:1052400078FC204610BD0024FBE7DB48406802687C -:105250001178491C1170016A0068C26A914204D831 -:10526000007D012801D00120704700207047F8B56B -:10527000D14DD3482860416A00680C68002734216A -:105280000F54A621095D002926D1007D032823D1D2 -:10529000FAF708FB29684A6901461046FBF736FC15 -:1052A000002819DD2E68C74A716A3568096849887F -:1052B0005143EA69891A05F0C2F9218E401C411850 -:1052C000BD48298632689C21095B138EC91A09B230 -:1052D000002903DC0760F8BD2F60F8BD01212032F2 -:1052E000917521464031CA898989B14F511A228E60 -:1052F000491E89188EB20546C03416E0496A0979FC -:105300004900795A00220092028E237B007D5B00C7 -:10531000FB5A591889B20123FFF7D9FA00280BD09C -:1053200001280CD0022807D0FFDF29680868028E08 -:10533000B21A12B2002AE1DA00202860F8BD28680B -:105340000068018E491C0186EFE770B59A4D002672 -:105350006C68062844D201007944097949188F44C1 -:105360001820020E240D002000F0BBF9E676A67688 -:10537000266066626868002811D06E6070BD924831 -:105380002C680078F4F7F1F8E676A6762660666277 -:1053900070BD012000F0A5F968680028EDD1FFDF9D -:1053A000EBE721680320087570BD606A216800681A -:1053B000CA698A604188834A51432268D1600146A4 -:1053C000C0310A8DC282E622125C02754A8D42808B -:1053D0008A8D8280C98DC18021680220087570BDC8 -:1053E000FFDF70BD70B50024734D002805D0012883 -:1053F0000AD0022827D0FFDF70BD00F0CDF9686821 -:10540000002829D06C6070BD686801684C70C47653 -:10541000847604606D4E44620021706802F0ACFE38 -:1054200071680846E0318C70CC70FFF79BFE002855 -:1054300000D0FFDFFAF76FF963486C600078F4F78B -:1054400094F86C6070BD00F0A7F96868C476847643 -:10545000046044620028D5D1FFDFD3E7564949688C -:10546000CA7E022A09D10A681378002B05D1506040 -:105470000968CA6A10182838C862704700B54E4AD1 -:105480000029526808D0012903D0022903D0FFDF88 -:1054900000BD801E00E0401F106200BD4C48C07E71 -:1054A000002801D00020704710B50720F8F71CFB3A -:1054B0000121484010BD38B53F4C2068016849784B -:1054C00001291FD001216846FBF77BFE6846007862 -:1054D0004049000205F0B3F82068426AC0681268CB -:1054E0005118FAF749FC2168C8603948226803213D -:1054F000824202D0108B0A2810D2108B401C1083DD -:1055000051720DE07D21C068C900FAF735FC2168B1 -:10551000C860FDF7E8F821680861E6E702205072EC -:10552000117200231371107FD47E111D957EAC4241 -:1055300002D0FAF7D1FD38BDD3769376136053626B -:1055400038BDF0B51C4F83B038680568416A2E46F7 -:105550000C682036717D002907D0698E228E914219 -:1055600003D1407A002800D1FFDFFAF79BF9124FF0 -:1055700039684A6901461046FBF7C8FA3F680028B7 -:10558000796A096807D049880E4A51433A68D26956 -:10559000891A05F054F8228E698E131899421BDB84 -:1055A000491C69861BE000009C100020D4000020EC -:1055B0007EAE0100BC100020CC000020D982130078 -:1055C0004C100020E2040000C4000020DC00002099 -:1055D0007410002010270000401C10186886B07D51 -:1055E000002806D19C21688E095B884201D1401CAD -:1055F0006886388B2646401C388320464030019010 -:10560000C2898089101A228E401E801887B2C03647 -:1056100016E07E4800230068406A007941007C481B -:10562000415A0093337B5B00C05A401881B2287DF9 -:105630000023FFF74CF9002810D0012810D0FFDF1D -:105640006A8EB81A00B20028E3DA01980821817244 -:10565000019801214172204601F0E6F903B0F0BD46 -:10566000688E401C6886EBE7F8B5684C05461F2736 -:10567000EE7E042E2AD23000784400790018874448 -:105680002B2501206348854200D0FFDF02202560E2 -:10569000A87600E020BF2168C87E002803D0C87E1D -:1056A0008A7E9042F6D0CA7E002A04D000228A76F2 -:1056B0000C2722600DE000228A760A604A6222608E -:1056C0000AE00120FFF7E4FB074600E0FFDF002FC0 -:1056D00002D0E87EB042CBD1E87E002800D0FFDFC8 -:1056E000F8BDF8B5494D01286A68516A0C6843D184 -:1056F0000879474940000B5A1068077D0126032F9F -:1057000006D0027D022A13D0007D012824D033E088 -:1057100000270761106887609C200096025BCC2000 -:10572000005D4000085AC01881B23B4603201EE0CD -:1057300022468032D78D07610096CC20005D928B87 -:105740004000085AC01881B200230220FFF7BFF8BA -:10575000696809680E750CE09C200096025BCC20FD -:10576000005D4000085AC01881B200230120FFF7F5 -:10577000AEF8002800D0FFDFF9F7CDFF264800780B -:10578000F3F7F3FE6968002008830B68228E5A86BF -:10579000096820318875F8BDF8B51C4D002168688E -:1057A0000C4600684278002A01D0447027E0007857 -:1057B000002809D001216846FBF728FD68460078DB -:1057C0001649000204F03BFF6868426AC06812682C -:1057D0005118FAF7D1FA6A68D06014710320507238 -:1057E000107FD37E111D967EB34202D0FAF774FC6F -:1057F00003E0D47694761460546268680483F9F701 -:105800008AFF05480078F3F7B0FEF8BDCC00002011 -:105810007EAE01004C100020C400002010270000C4 -:1058200010B584B004466846FCF777FE002800D126 -:10583000FFDF009802F0B6FF0321009802F0CFFFCF -:105840000098EF22017811400170214603F02DF8F5 -:105850000D2C7CD2200078440079001887442D1F3D -:105860000657A2A2A31390A2A3A37800F8488068C9 -:10587000A030417D009803F0B7F8FCF761FE0028E6 -:105880007AD004B010BDF24880688030417C009826 -:1058900003F01BF9FCF754FE002870D09EE0EC48A2 -:1058A00080688030016C0098491C03F088F8FCF790 -:1058B00047FE002860D004B010BDE54CA0688030E1 -:1058C000C06B8179009803F03FF8A0688030C06B0E -:1058D0000189009803F02FF8A0688030C06B4189DF -:1058E000009803F00DF8A0688030C06B81890098A3 -:1058F00003F00FF8A0688030C06BC189009803F0F6 -:1059000011F8FCF71DFE002836D004B010BDD04CB5 -:10591000A0688030C16B0098091D03F069F8A06889 -:105920008030C16B00980C3103F06EF8A0688030B5 -:10593000C16B00981E3103F071F8A168009888319E -:1059400003F079F8FCF7FCFD002844D03AE029E0A8 -:10595000BF4C60690178009803F09DF86069818808 -:10596000009803F09AF860694188009803F099F86C -:10597000FCF7E6FD0028C8D1FFDF04B010BD2CE025 -:105980000020029069460390087A01210843694685 -:10599000087202A9009803F09AF8FCF7D1FD0028DC -:1059A00019D00FE0FFDFFCF7CBFD002800D1FFDFAF -:1059B0000C2CE2D0072C11D0012CDED0002CDCD036 -:1059C000022CDAD0A24800218068403041820121B7 -:1059D000817504B010BDFFDFF4E7FFDF9C480021B4 -:1059E00080684030018304B010BDF0B5984C8DB094 -:1059F0002079C0077ED020693B21C578A0680023AC -:105A00000A5C0521303002F022FD00280FD0022D63 -:105A10000DD00B2D0BD0042D09D0052D07D0062D50 -:105A200005D00D2D03D060780821084360706078A0 -:105A300000285FD12069C078801E0C287ED201002A -:105A40007944097949188F4405792743C47A79F450 -:105A5000791DF38BA0683D210A5C002301213030C1 -:105A600002F0F5FC00286AD1206902F0BFFFA168AE -:105A7000B622505402223D20425400204031887604 -:105A80008875C3E1A0682030C17E0A2973D1002146 -:105A9000C1770D21C176B9E1A0683B21095C0E29CF -:105AA00069D1BC21095800884988814200D0FFDFB4 -:105AB000A0688030C16B2069263102F0D3FFA16855 -:105AC00020698C3102F0DEFFA0681121203045E012 -:105AD000A1683B20405C11284DD180318C46CB6BB6 -:105AE0005C4810260022082168440E33B51AED18D0 -:105AF000203D00E092E1EF7F4770AD7F8570801C14 -:105B0000491E921C0029F1D16146CB6B03A81026D7 -:105B10000022082103301E33B51AED18203DEF7F17 -:105B20004770AD7F8570801C491E921C0029F3D1FF -:105B3000684603F085FCA068014601E047E1F2E019 -:105B400008AF6CCFC36778318267CE608D6000216B -:105B50008166C16601212030C1771321C17655E1EC -:105B6000A0683B21095C112901D00E2903D14030E6 -:105B7000007F002802D00220607047E1206902F017 -:105B8000A2FFA16800250A46803210740846403002 -:105B9000C5768575D06B09884088884200D0FFDFC4 -:105BA000A06801468030C26B1570026D1378002B1F -:105BB00001D0FFDF07E10B88D380036D027C1A71EF -:105BC000026D1572036D0B221A70006D09884180F9 -:105BD000F9E0A0683B21095C152901D0022005E10C -:105BE000014600254031CD768D75BC2109580088CD -:105BF0004988814200D0FFDFA06801468030C26B37 -:105C00001570036D1A78002A01D0FFDFDBE00A4629 -:105C10004032167F002E0DD015770A88DA80026D8B -:105C20001571036D0C221A70006D09884180CAE05D -:105C300012E079E00A88DA80026D1571036D0122A5 -:105C40001A72036D0B221A70006D09884180BAE048 -:105C5000E4000020FFFFFFFFA0683C210A5C002356 -:105C60001946303002F0F3FB002809D1A0683B212F -:105C70000A5C00230721303002F0E9FB002870D0D5 -:105C8000607800284FD1A0684030807F800715D40D -:105C9000206902F00AFFA1684031C877206902F04C -:105CA00006FFA16840310884206902F005FFA16861 -:105CB000022240314884887F10438877A0685E21A3 -:105CC000095CC90714D13C210A5C00231946303015 -:105CD00002F0BDFB002800D1FFDFA06801213C22BB -:105CE00011540423B82213544030817600210183DB -:105CF000A068014620310A46C97E012903D100214E -:105D0000D17656231954BC21095805884B88AB42DB -:105D10007CD10B78042B79D100230B70D17E002924 -:105D200074D14030837571E0A0683B210A5C002388 -:105D30000621303002F08BFB002856D06078002816 -:105D400064D16946206902F0D3FE68460078C10735 -:105D5000C90F6846017005D0A0680121603001714B -:105D600004E042E0A068002160300171A0680025D5 -:105D700056210D54BC21095800884988814200D021 -:105D8000FFDFA1680A468031C86B0570086D037893 -:105D9000002B01D0FFDF16E01388C380086D6B462F -:105DA0000571086D1B8803816B465B8843816B46D8 -:105DB0009B8883816B46DB88C3810B6D062018703E -:105DC000096D10884880A0682030C5761EE0A06864 -:105DD0003C210A5C00231946303002F038FB0028D1 -:105DE00003D06078002811D102E0012060700DE03E -:105DF000206902F083FDA1689122505405223C20C5 -:105E0000425400204031088301208876A268002394 -:105E1000106F516F401C5941516710670DB0F0BDB4 -:105E2000F8B5FF4C074660780025084360702046AF -:105E30008068A288014693064031002B01DA8D81EB -:105E400002E08B895B1C8B815106890F012600299A -:105E500008D0014620318A7F002A03D18E770121A4 -:105E6000FEF779FB002F75D16078002873D1207977 -:105E700040070CD5A0682030C07E052800D1FFDF88 -:105E8000A0682030417F022901D126704577207912 -:105E900080074ED5607800284BD1E068C0780D2887 -:105EA0007BD201007944097949188F44433306773E -:105EB000CACA8F1823CA55689B00A0683D210A5C96 -:105EC00000230121303002F0C2FA002831D1A2684B -:105ED00003213D208154403295759576B2E0A0684B -:105EE0003C210A5C00231946303002F0B0FA002849 -:105EF00077D1A7E0A0683B210A5C00231946303027 -:105F000002F0A5FA002800D1FFDFA16809202031A6 -:105F1000C87697E0A0683B210A5C00231946303020 -:105F200002F095FA002800D1FFDFA1680720203198 -:105F3000C87687E0A0683B210A5C00231946303010 -:105F400002F085FA002800D1FFDFA1680820203187 -:105F5000C87677E0E8E0A2E0A0683B210A5C002375 -:105F60001946303002F073FA002800D1FFDFA06834 -:105F70000A2201464030C6762031CA7662E0A06827 -:105F80002030C07E0D2800D0FFDFA0680C22014623 -:105F9000403006772031CA7654E052E0A0683B21B9 -:105FA0000A5C00231946303002F051FA002805D16E -:105FB000A0684030007F002800D1FFDFA0680E22DB -:105FC00001464030C6762031CA763BE0A0682030DA -:105FD000C07E132800D0FFDFA16815202031C876CD -:105FE00030E02AE0A068BC21095803884A889A4218 -:105FF00019D10978042916D13B210A5C00231946DE -:10600000303002F024FA002800D1FFDFA0680146FA -:1060100040318A7F920702D42030C67603E08D7526 -:106020008030C06B0570A0683C210A5C00231946D3 -:10603000303002F00CFA002804D0A0684030857699 -:1060400000E0FFDF207900070AD56078002807D13B -:10605000A0682030417F032902D1022121704577B9 -:10606000FFF7C3FCA078000716D5A0683B210A5CA7 -:1060700000230521303002F0EAF900280AD0082078 -:106080006070A0688030016D08780B2800D1002076 -:10609000087001E001F0EEFDA06800F03BFB6846EF -:1060A000FCF73BFA00283FD0607800283CD1A0687C -:1060B0003D210A5C00230121303002F0C8F900289C -:1060C00032D1A068B421095C002901D0022029E066 -:1060D0003B210A5C0C2A0DD00D2A09D0132A20D0AE -:1060E00000230421303002F0B2F900281DD0D9E09D -:1060F0000B2017E0FBF789F80C2815D3A0680821BE -:106100008030C06B1E30FBF781F8002806D0A068F5 -:1061100004218830FBF77AF8002800D1FFDF032044 -:1061200000E00620FFF77CFBBCE0A06801462031C0 -:106130000A7F012A26D0052A1DD0BC2212581378C6 -:10614000002B60D0528803889A425CD1CA7E00231B -:106150001946303002F07BF9002854D0A068BC21E9 -:106160000958097802291AD003291AD004293CD0E9 -:10617000052948D164E00720FFF752FBA0682030D2 -:1061800005778FE00C20FFF74BFBA06801464030FD -:106190000583827F3243827720310D7782E00020B1 -:1061A00009E03F21095C002908D040300078002830 -:1061B00000D1FFDF0A20FFF733FB24E0FBF725F8CF -:1061C0000C2820D3A06808218030C06B1E30FBF75C -:1061D0001DF8002806D0A06804218830FBF716F8C7 -:1061E000002800D1FFDF0320E5E74030807F8007F3 -:1061F00009D10C20FFF714FBA0684030458286755A -:10620000817F314381776846FCF787F9002849D0C0 -:10621000A0683B210A5C00231946303002E00000F0 -:10622000E400002002F013F900283BD0A168C4204C -:10623000405C002836D0A0690078002802D031E008 -:106240000820B8E7088E0A282CD905220831E06911 -:1062500004F04EF9002822D0A0688030016C087844 -:1062600000280CD00522491CE06904F041F90028FF -:1062700018D1A0688030006C0078002806D1A06892 -:10628000E1698030006C401C04F0F0FBA0688030B5 -:10629000006C0178491C01700120FFF7C1FAA06869 -:1062A000C0300571FE4880680446A030007D30345F -:1062B000002807D1627B00230121204602F0C7F8A5 -:1062C000002802D0208C401C20843D22002F01D0C9 -:1062D000A27615E0F248017802290BD001290BD0F3 -:1062E0004178002917D0142001420BD01E20A0763F -:1062F000667648E0162002E08068A030807DA076B7 -:10630000667640E00807E3D4880700D1FFDF2A2043 -:10631000A076667637E0214620318A79002A05D0BA -:10632000628C531C6384A38C9A4214D2897A00290C -:1063300005D0218D4A1C2285A28C91420BD2228C41 -:10634000E18B8A4204D38368A0331B7D002B02D1EA -:10635000A38C9A4203D32220A076667613E0A27B18 -:10636000002A06D0A28B8A420AD30820A07666763D -:1063700009E0A18B062903D33E20A076667602E0D1 -:10638000617E002908D0E5722573C548A5730221F6 -:106390008068FEF7E0F8F8BD00218068FEF7DBF8C2 -:1063A000F8BD10B5BE494A788B781A430ED1012842 -:1063B00009D00879400704D588682030407F02283A -:1063C00004D0012010BDFEF7BAF810BD002010BDAA -:1063D00070B5B34C0546A0880E462843A080A80798 -:1063E00003D5E80700D0FFDFE660E80700D02661AC -:1063F000A8071BD5304602F081FA062802D00B28E8 -:1064000014D10BE0A0683B21095C13290ED10021B7 -:106410000167416701214030017007E0A0683B211E -:10642000095C0D2902D1002140300170280601D5F8 -:106430000820A070680517D5A068018E808808180C -:10644000801D85B2304602F059FA01280DD0304641 -:1064500002F054FA002807D1A06829468030C06BAA -:106460008580304602F074FA70BDA0682946C030BD -:10647000C580304602F0AFFA70BDF8B5884C0026F2 -:10648000A060A68066700546A67026702F4600881C -:10649000FCF740F8A0680088FCF760F88035288C8D -:1064A000A168401C82B20846303001F00CFF002881 -:1064B00000D0FFDF2E84A06801464030827D002A94 -:1064C00003D0428A838A9A4225D2827E002A03D050 -:1064D000028B838A9A421ED2038AC28993421AD2BD -:1064E0002031897F8089002916D0904213D26D48CF -:1064F00000906D4B6D4A3946304601F020FAA06895 -:106500003B210A5C00230521303001F0A0FF002868 -:1065100001D001F010FAF8BD0628E8D3F8BD10B597 -:106520005F48816808464030827D002A03D0428A55 -:10653000838A9A4216D2827E002A03D0028B838AF3 -:106540009A420FD2038AC28993420BD22031897FAB -:106550008089002904D0904204D201F03EFB10BD96 -:106560000628FAD300200146FFF75AFC10BDFFB5FC -:106570000C4681B007461546D82120460A9E04F0F5 -:1065800043F827808034E56304982665206405B0CD -:10659000F0BD10B5F7F723FC10BDF8B50C46174653 -:1065A0000621F7F703FB010062D00D468035286D08 -:1065B00000260278072A1CD0A01C0C2A27D00B2A00 -:1065C00032D0062A3FD00846C030027A002A4FD087 -:1065D000667012222270027A002A08D0C231067236 -:1065E0000A8962804A89A280027A002AF7D10120B2 -:1065F000F8BD002FFBD1667007202070296D0A229C -:10660000A01C091D03F0A1FF286D0670EFE7002F05 -:10661000EDD166700C202070286D81886180C08863 -:10662000A080286D0670E2E7002FE0D166700B2194 -:106630002170296D8A880280CA88428009898180F8 -:10664000286D0670D3E7002FD1D166700621217026 -:10665000296D8A880280CA8842800A8982804A8994 -:10666000C2808A890281CA894281286D0670BEE78C -:106670000020F8BD0020704709494861704770B597 -:10668000044601468031088C2546401C088440356C -:10669000A889401CA881A87D00280BD0688A07E043 -:1066A000E4000020215E0100A3630100D16301002A -:1066B000401C6882A87E002802D0288B401C2883BA -:1066C000B420005D002809D13D20025D2046002352 -:1066D0000121303001F0BBFE002802D0288A401C86 -:1066E0002882204600F016F8002070BD384AD1619B -:1066F000906170473E210A5C40308189091D002A63 -:1067000004D0C089814203D3012070470629FBD2FF -:1067100000207047F8B5054606462036F07E2C4628 -:106720000027803407281CD1288EC621495B401CD5 -:1067300088424CD1216C28460830491C04F096F957 -:106740000221284601F072FDF776012166204155AD -:10675000206C0078002800D1FFDF216C0878401EF3 -:106760000870F07E082832D1E16B288E8988401CA1 -:1067700088422CD1206D0178002901D0FFDF15E07F -:106780002988C180E06B216D40890881E06B216D13 -:1067900080894881E06B216DC0898881206D0771F7 -:1067A000216D07200870216D288848800121284626 -:1067B00001F03CFD03212846FDF7CDFEE06B298862 -:1067C0004088884200D0FFDFE06B0770F776F8BDA5 -:1067D000E400002030B585B004466846FBF79DFE16 -:1067E000002800D1FFDF009801F0DCFF03210098B2 -:1067F00001F0F5FF0098EF22017811400170214669 -:1068000002F053F8A01E0C2853D2010079440979F4 -:1068100049188F44054E1E4F4F164E404E4F2F2A9B -:10682000FE486521C068095C002904D00621009853 -:1068300002F0DAF83EE0C030C17B009802F0D4F8F4 -:1068400038E0F648C0688030417C009802F03DF99D -:1068500030E0F24D0098E968B83102F0FEF8E968DE -:1068600000988C3102F005F924E00621009802F02E -:1068700028F91FE0E94DA8680178009802F00BF9AB -:10688000A8688188009802F008F9A86841880098F3 -:1068900002F007F90EE00020029069460390087AA2 -:1068A000012108436946087202A9009802F01BF909 -:1068B00000E0FFDFFBF744FE002800D1FFDF0C2CD7 -:1068C0000AD0072C0AD0022C06D0D4480021C06878 -:1068D000403001830121817605B030BDCF480021D1 -:1068E000C0684030018305B030BD70B50C46054628 -:1068F000FF212131204603F087FE0020214625801C -:10690000E03108740877FF3401342071A07470BD41 -:1069100010B5F7F764FA10BDF8B50D461746072114 -:10692000F7F744F9040078D02646E036307C0021A1 -:10693000002817D0002F6DD1697007202870307C97 -:106940000F4600280CD02046F23000902784377480 -:106950000A22A81C009903F0F8FD307C0028F5D12C -:10696000AF7057E0307F00281DD0002F52D1307F0C -:106970000B280BD00C2801D0FFDF4BE069700C20F6 -:106980002870B07FA8702088A8800AE069700B206A -:106990002870B07FA8702088FF34A8800134A078C8 -:1069A000A871317736E0E01DF9300279002A12D063 -:1069B000002F2FD1697008222A7022886A800289EC -:1069C000AA804289EA8082892A81C2896A81028AF0 -:1069D000AA8101711EE0827C002A08D0002F19D103 -:1069E000697011222A70828A6A80817412E0827D25 -:1069F000002A12D0002F0DD1697012222A70827DD8 -:106A0000002A07D08175028B6A80428BAA80827D22 -:106A1000002AF7D10120F8BDFFE70020F8BD0020D3 -:106A200070477E4988607047014610B500222031CA -:106A3000CA760A778A77A0308079002802D00021B0 -:106A4000022001E000210320FEF77FFC10BDF3B51A -:106A5000724C8FB0E0680D460088F7F718FA0C907A -:106A6000002800D1FFDF607828436070A08881068D -:106A700006D5E26800214C239952A032117304E03C -:106A8000E16840318A89521C8A814006800F0225C4 -:106A9000002813D0E0682030817F002902D003292C -:106AA0000CD106E00121817700210120FEF74DFC89 -:106AB00004E0857700210120FEF747FC5748C068B5 -:106AC000014620318A7F012A04D1544A9288D20596 -:106AD00000D58D770F9900297ED150498988890585 -:106AE00002D50021C03002E0C0300188491C01807D -:106AF00000F0B9FB0DA8FBF710FD002856D0474C5D -:106B00006078002852D1E0683D210A5C01231946D3 -:106B1000303001F09CFC002848D1E0680146C031CB -:106B20008A7B002A08D00021502211526030417126 -:106B30000220FFF74FFECCE03C22125C0B2A17D05C -:106B400006DC012A6ED0052A10D0092A06D18FE072 -:106B50000F2A11D0102A24D0162A6ED00123042126 -:106B6000303001F074FC002868D0B2E0072000E06B -:106B70000B20FFF72FFEACE0FAF747FB0C2815D3EC -:106B8000E0680821B830FAF741FB002806D0E06839 -:106B900004218C30FAF73AFB002800D1FFDF0420F3 -:106BA000E7E7497C012902D0022948D091E0FC2185 -:106BB000095C002940D104461949D234102600232B -:106BC00008226944F51A2D19203DEF7F4F70AD7FE3 -:106BD0008D70891C521E00E02CE19B1C002AF1D113 -:106BE000002310260822B03003A91C460331F51AF1 -:106BF0002D18203DEF7F4F70AD7F8D70891C521E88 -:106C00009B1C002AF3D1684602F01AFC034D08AA27 -:106C1000E868CCCA01467831C36704E0040100206B -:106C2000FFFFFFFF26E08267CF6005208E60FFF741 -:106C3000D1FDE868C03044744BE011E026E05C21EF -:106C4000095C002904D0012160304171022000E07C -:106C50000D20FFF7BFFDE1680020C031487438E027 -:106C60000620FFF7B7FDE16800204031887630E06C -:106C700009207EE70C20FFF7ADFDE06800214030E1 -:106C80000183817F01221143817722E0E0683B216B -:106C90000A5CE221095C00291BD00123002130306D -:106CA00001F0D5FB002814D0E068E221095C04293A -:106CB0000FD14030807F80070BD10C20FFF78AFD79 -:106CC000E06800214030418201218175827F0A43C2 -:106CD000827700F0C5FF002805D0F8490020C96878 -:106CE0008031088405E0F548C0688030018C491C7B -:106CF000018400F0B8FF002807D0F048C168A03137 -:106D0000087B022807D8401C0873EC48C068A030F4 -:106D1000007B022808D9E9480021C0680246803279 -:106D200011845184A0300173E44C3C21E0680123BC -:106D30000A5C0021303001F08AFB002804D1E068B1 -:106D40002030007F07285DD1E0683B210A5C0123E9 -:106D50000021303001F07BFB002853D0E0683D215A -:106D60000A5C01230021303001F071FB002849D07A -:106D7000E0683E21095C022944D1A030007B002854 -:106D800040D10C98F6F78AFB00283BD0FBF70CFCAF -:106D9000002837D0E1680B468033588B012831D961 -:106DA0000D460120A0350A4668714032D689908987 -:106DB000B21E904201DB012002E0301A401E80B278 -:106DC0001E8CE288964201D3012202E0921B521CE3 -:106DD00092B2904200D91046012801D100226A7176 -:106DE0000A46C032117A002911D0598C5289914239 -:106DF00001D3012102E0511A491C89B2884206D907 -:106E0000084604E0E26801200021A0325171E368E5 -:106E10001A8E1946101884B2803118468C8320309F -:106E2000857F002D11D0012D0FD0022D0FD0032D05 -:106E30000DD0FFDFA14C0F9DA0888005C00F29D089 -:106E4000E16800208031C8852AE00C83F2E7457FA5 -:106E5000032D17D0007F0828F7D040339A89DD89A9 -:106E60000020931C9D420AD3A81A801E0004000C27 -:106E700005D0401E0004000C01D0401E80B2201836 -:106E80000883D7E7403398890328DED3D8891018C0 -:106E9000401CF5E7E0688030C18DC28B8918C18540 -:106EA000E068CE21095C002908D13D210A5C01235C -:106EB0001946303001F0CBFA002807D0E0680146CF -:106EC000403180300A8AC08B101808823D21002D85 -:106ED00004D0E0684030817201211AE02078022855 -:106EE00009D0012817D06078002829D01422104238 -:106EF00019D01E2119E0E0686521095C002903D042 -:106F000006224A210A5402E016224A210A5401218B -:106F1000403041724CE0E068D021095C4030817221 -:106F20000121417244E0020705D5E06840308172DA -:106F3000012141723CE0800700D1FFDF2A21F4E704 -:106F4000E06801464030827D002A05D0438A5A1C01 -:106F50004282828A934210D2827E002A05D0028B1E -:106F6000531C0383838A9A4207D2038AC2899342BD -:106F700008D3CE235B5C002B04D022218172012137 -:106F8000417215E02031897F0029818906D0914224 -:106F90000BD3082181720121417209E0062904D333 -:106FA0003E2181720121417202E0407A002812D014 -:106FB000E068002201462031CA760A778A77A0303D -:106FC0008079002802D00021022001E00021032066 -:106FD000FEF7BBF903E000210846FEF7B6F9E168C9 -:106FE0000020A031887111B0F0BD10B533494A7846 -:106FF0008B781A430ED1002809D00879000704D5F0 -:10700000C8682030407F032804D0012010BDFEF75F -:107010001CF910BD002010BDF8B5284C0546A0880D -:107020000E462843A080A80703D5E80700D0FFDF5D -:107030002661E807012700281DD03046666101F06F -:107040005DFC062802D00B2815D10AE0E068014655 -:107050002030027F122A0ED100228A66CA66C777C4 -:1070600009E0E06801462030027F0C2A03D10022AB -:10707000C27740310F77A8071AD5206901F03EFC8E -:10708000052802D00B2813D10AE0E0683C21095CF6 -:1070900010290DD10021016741674030077007E0DA -:1070A000E0683C21095C0B2902D1002140300170CD -:1070B000280601D50820A070F8BD000004010020BA -:1070C000F0B5FF4C85B02269090A01260902314357 -:1070D0000291002503920190A5806570A57025702E -:1070E000A621E0600E540088F6F7D1FE009000283B -:1070F00000D1FFDFE0680088FBF70CFAE068008849 -:10710000FBF72CFAE0688030408B00281DD003A8E4 -:10711000FBF703FA002818D0E068CE21095C0029AB -:1071200013D03D210A5C01231946303001F08FF95C -:1071300000280AD1E06850210D52603045710220CC -:10714000FFF748FBE068A0304571E068F021095C7A -:10715000002905D1018C8288914201D9E18001E0AA -:107160008188E18001468031CA8B521E93B20A8C1D -:10717000D21897B202460F84A0321479002C02D0A4 -:107180004D84157102E04C8CE4184C8440308489A5 -:10719000E4188481488B012801D8401C4883002BC7 -:1071A00000D015735079C64C002814D0E08887426F -:1071B00011D20098F6F772F900280CD0E068014669 -:1071C000C030027A002A06D08031498C4089814241 -:1071D00001D300F04BFDE068A5210D543C21095C72 -:1071E000062901D0072916D1E421028E095A511A25 -:1071F00009B200290FDB0146E631083003F05FFCDD -:107200000221E06800F0B8FFE068E3210D543C2162 -:107210000D5460308671E0689E210A5A0146303074 -:1072200001F051F8E068C821095C002901D08030E4 -:107230004584A4480090A44BA44A0199029800F008 -:107240007EFBE0683C210A5C01230521303001F01F -:10725000FEF8002801D000F06EFB05B0F0BD10B5BF -:1072600000F0BBFC10BDF8B5954C02272079002535 -:107270000007002811DA607800280ED1E068014686 -:1072800020310A7F142A03D14030C57685760D77E8 -:10729000487F032801D127704D7700F03EF9A2887E -:1072A00001265007002815DA6078002812D1E0681E -:1072B000014620310B7F062B02D0082B05D102E0BE -:1072C000E030C67001E0E030C770487F022801D18D -:1072D00026704D7790070327002841DA6078002850 -:1072E0003ED12069C078801E0C287DD201007944EF -:1072F000097949188F4405B235425815B221B22890 -:10730000864DE0683D210A5C01231946303001F0CA -:107310009EF8002824D1E0683D210F544030857547 -:1073200009E0E0682030007F052800D0FFDFE0683A -:107330003C210D544030857691E0E0682030007F9C -:10734000092877D0FFDF83E0E0682030007F0B283A -:1073500000D0FFDFE0685B210E540C212030017764 -:107360007DE0E0682030007F0F2800D0FFDFE0687C -:107370005B210E5410212030017770E0E06820304E -:10738000007F102800D0FFDFE06812212030017755 -:1073900065E0E0682030007F102800D0FFDFE06863 -:1073A0001421203001775AE0E0682030007F162851 -:1073B00000D0FFDFE06801464030C5768576E031D9 -:1073C000087F002800D0FFDFE068014640310A7FD7 -:1073D000002A0AD00D77FF21028801310A520146A6 -:1073E000E0318D770C2209E038E0C21D0188F932C6 -:1073F00011800146E0318D7796700B220A7720309C -:1074000005772CE0E068E221095C042916D13B21D4 -:107410000A5C01230021303001F019F8002800D166 -:10742000FFDFE068014640318A7F920703D42030B5 -:10743000C67603E00CE08D75E0308570E0683C2195 -:107440000A5C01230721303001F001F8002806D042 -:10745000E0685A210D542030057700E0FFDF2079E5 -:10746000C00609D56078002806D1E0682030017F89 -:10747000062901D107210177A078000711D5E0681E -:107480003C210A5C01230521303000F0E0FF002898 -:1074900005D008206070E068E030057701E000F07A -:1074A000E9FBE0683C21095C082935D10146028EE0 -:1074B000C0318B8C521C9A422ED16278002A07E090 -:1074C000040100204F6A0100EB6F010019700100F8 -:1074D00022D14A8D43889A4207D18B8D8488A3425A -:1074E00003D1CB8DC488A34208D003888B86CA867B -:1074F0008A8D0A87CA8D4A87F0210E540121F74CE4 -:1075000000F03AFE00210420FDF71FFFE068E321B0 -:107510000D54203005778777F8BD70B5EF4C82B0F9 -:107520002079C0077ED060693C21C678E0680123DD -:107530000A5C0521303000F08AFF082500280CD0B5 -:10754000022E0AD00A2E08D00B2E06D0032E04D00D -:10755000062E02D06078284360706078002861D1E0 -:107560006069C0780D287DD20100794409794918F5 -:107570008F44401E06BE7878FE79FD789BB7FC00EC -:10758000E0683D210A5C01231946303000F05FFFBE -:10759000002868D1606901F029FAE168D0225054CE -:1075A00002223D2042540020403188768875A9E1AE -:1075B000E0683C210A5C01230021303000F047FFE5 -:1075C000002871D0607800284DD1606901F007FA79 -:1075D000E168E42250520A8E801AC14A00B29042F9 -:1075E0005CDC00285ADDE631606901F0EDF9062126 -:1075F000E06862E1E0683C210A5C01230021303050 -:1076000000F025FF00285ED0607800282BD160694B -:1076100001F0A7F9002833D0606901F09DF9E42258 -:10762000E16800E076E150520A8E801AAC4A00B25E -:10763000904233DC002831DD606901F087F9E168B0 -:10764000E0318871606901F07AF9E168C03108853C -:10765000606901F059F9E168C0314885606901F05D -:107660005CF901E02CE184E0E168C0318885606963 -:1076700001F05CF9E168EE22505220310D7741E1D2 -:10768000E0683C210A5C01230021303000F0DFFE7D -:10769000002818D0607800286BD125E128204031DF -:1076A0008872012048722DE10DE0E0683C210A5CFF -:1076B00001230021303000F0CAFE002803D060789A -:1076C000002856D102E0012060701BE1E068002232 -:1076D000014640300283012282760B202031087758 -:1076E00010E1E0682030017F0C2950D10D21E5E048 -:1076F000E0683C210A5C01230021303000F0A7FE45 -:10770000002804D1E0684030007F00287ED06078F7 -:1077100000282ED101E06070F4E0E1680022084604 -:107720004030028301258576B031606901F07BF934 -:10773000E1686069883101F087F9E068FF30013065 -:107740000079002800D0FFDFE168FF200A880730B9 -:107750004252FF310931606901F04FF9E168606917 -:10776000FF31113101F055F9FF2103E016E07BE014 -:1077700007E078E0E06805310D540F2120300177F3 -:10778000C0E0E06801462030027F122A01D00220CA -:10779000C1E7002240318A7616218FE0E0683C2163 -:1077A0000A5C01230021303000F051FE002809D18D -:1077B000E0683B210A5C01230721303000F047FEDE -:1077C000002823D0607800284DD1E0684030807FC9 -:1077D000800715D4606901F068F9E1684031C87725 -:1077E000606901F064F9E16840310884606901F082 -:1077F00063F9E168022240314884887F104388772A -:10780000E0685E21095CC90716D100E06AE03C210E -:107810000A5C01230021303000F019FE002800D15D -:10782000FFDFE06801213C2211540423E3221354BA -:107830004030817600210183E06802462032D17E0B -:10784000012903D10021D176562319540146E03194 -:107850000B468978042955D100219970D27E002ADF -:1078600050D1403081754DE0E0683C210A5C012335 -:107870000021303000F0EBFD002833D06078002884 -:1078800040D16946606901F027F968460078C10770 -:10789000C90F6846017004D0E068012160300171B1 -:1078A00003E0E068002160300171E16800220846D1 -:1078B00040310A8301228A7609212030017721E0B4 -:1078C000E0683C210A5C01230021303000F0BFFD5C -:1078D000002807D06078002814D105E004010020BA -:1078E000FE7F0000012016E7606901F007F8E168FB -:1078F0009122505405223C204254002040310883FC -:1079000001208876E2680023106F516F401C5941B6 -:107910005167106702B070BDF7480078002800D0AA -:107920000C20704730B5F44C05462078002800D074 -:10793000FFDF657230BDF049012008727047FFB566 -:10794000ED4881B000780A9F1E4615460C46002877 -:1079500005D1002D03D0002E01D0002F00D1FFDF74 -:10796000E54901984C6308632A460D46EF61AE6114 -:107970006A6100222A72EA712A71EA706A712046ED -:10798000AA71AA706A810746DC4E00883034F6F787 -:107990007EFAA8623888F6F766FAE862FAF712FB10 -:1079A0000120FAF7DFF838461130FAF7EDFA3846D9 -:1079B0000D30FAF7CEF93078002810D00120FAF710 -:1079C000FEFA207EFAF7D7F90120FAF7BAF8FAF7AB -:1079D000F2FA217CCA48002903D0CA4902E00320F8 -:1079E000EDE7C9498161307800280ED001210846B1 -:1079F000FAF7DCF970688030806AFAF7F3FA012050 -:107A00002870FAF7E7FA05B0F0BD01210020FAF777 -:107A1000CDF9F4E7F0B5B94E83B031464C681B2080 -:107A200069460880303460790027B34D002828D09B -:107A3000012859D002285BD0032862D0FFDFAE4A6C -:107A4000F723116A087818400870A379DB071B0F29 -:107A50001843FB2318400870E379DB075B0F1843DA -:107A6000EF23184008706779906AF5F727FD0546FF -:107A7000FAF79AFD022F4BD0012F4CD0032F4DD097 -:107A800050E0A248FAF76DFD002809D001208002DD -:107A90000122296AAA706A69904703206071CEE7C3 -:107AA00001AA6946A86AF5F7E5FB2862002803D019 -:107AB0002B21095D002904D09448FAF728FD012004 -:107AC00010E069460979002905D107704770877071 -:107AD000012100F084FE68460088C1B2286A01F0E6 -:107AE0000EF802206071AAE78848FAF710FDA6E7B1 -:107AF00001AAA86AF5F7BEFB286200289FD1FFDF24 -:107B00009DE78248FAF72DFD002898D1FFDF96E720 -:107B1000A84305D006E0A84302D003E0002D01D021 -:107B2000012000E00020744D0101286A0278114311 -:107B30000170E17B002923D06179012920D0214601 -:107B400048318EC972488EC021465831714802F0C2 -:107B5000A5FF7148FAF743FA307800280ED00021CB -:107B60006B480176E26BA16B426101616A492A6A46 -:107B7000F9F771FF0020F9F77DFF05E00121EFE73C -:107B8000FAF72DFAF9F796FF3078002811D0286A15 -:107B90000078C00606D461480078C00602D428796F -:107BA000002802D0A878002803D06879002805D0E2 -:107BB00008E001210846FAF78AFAF6E70120687121 -:107BC000FAF727FA286A017829734178697380786F -:107BD000A8730220287003B0F0BD10B546480078A5 -:107BE000012800D0FFDFFAF7EDF944480178446836 -:107BF000002908D000F0D5F92034207A012801D1DD -:107C0000FAF74CFA10BDFFF705FFF5E770B53B49F1 -:107C100000254C68FAF71CFAFAF70FFAFAF73FF961 -:107C2000FAF7C3F9F9F746FFFAF7D4F92034207AC6 -:107C3000012801D1FAF729FA2F4C002162696089E5 -:107C40009047E269E179E0789047257070BD10B502 -:107C500029480078032800D0FFDFFFF7D7FF10BDC9 -:107C6000254840797047244800797047224901200F -:107C700088717047F8B5204D2049686A4C68417892 -:107C80000126C906C90E009100273034E96A02F0C6 -:107C90001DF8002807D001281BD0022840D0032857 -:107CA0004CD0FFDFF8BD0122E86A0099F5F796FC99 -:107CB000216C606C491C0022504121646064E079B1 -:107CC000012804D0E671687AF1F74FFCF8BDE7713E -:107CD000F9E70022E86A0099F5F780FC206C616CF6 -:107CE0000022401C514161642064E079012801D1E7 -:107CF000E771F8BDE671F8BD1C0100204C010020C1 -:107D0000001500401F0003021B0003023C0100207D -:107D100030110020491100200A1100202B01002001 -:107D2000E86AF5F75DFD216C606C491C002250414A -:107D300021646064E0790128DCD1D9E7E86AF5F7CD -:107D40004FFDD8E7F8B5D94FD94D394628784C685A -:107D500001263034022800D0FFDFA078002809D0A7 -:107D60000021A170AE706A6904209047387800281D -:107D700000D02671286A0078C043800708D1E078D7 -:107D8000002805D1E670296AAE706A690220904722 -:107D90000121002000F04BF9002802D0FFF736FF48 -:107DA000F8BD00F0FEF8F8BDF1B5C04DC04C294655 -:107DB00020784F6801263037032800D0FFDF608924 -:107DC0000121490208436081009900297ED0F9F71A -:107DD00089FE002810D1387C00280DD0606A4178D7 -:107DE000C90609D00078F9790007C00F884203D18D -:107DF000E670FFF70BFFF8BDAD490846426A1378FD -:107E0000CB7353780B7492784A74418920221143C2 -:107E10004181002101716C68303045682820405D47 -:107E20003034012813D1FAF730F92146284600F002 -:107E3000E6FA00280BD09D4801784068002917D049 -:107E4000FF30173029884180217A01710670984DE2 -:107E5000B979686A00784007C00F88424AD09348D1 -:107E600044683034607900283FD0022802D011E005 -:107E7000C830E7E7A86AF5F732FA002800D1FFDF3B -:107E8000A06BE16B0022401C5141E163A063687A62 -:107E9000F1F76BFB0020607184480078002808D05F -:107EA00020790021002804D02171AE706A69102069 -:107EB0009047E078002814D00020E070FAF761FBCA -:107EC000002800D1FFDF0820002100E05AE0AE705A -:107ED0006A699047A16BE06B491C00225041A16385 -:107EE000E063A07901281DD0A6716889FF210131C6 -:107EF00008436881686AFB7902781107C90F9942C3 -:107F000043D16A4910274C6891073034890F012901 -:107F100020D002291ED0032907D0E8790421084384 -:107F2000E87132E00020A071DFE700F07CFC00285F -:107F30000DD0A670696AAE706A6930469047E079E4 -:107F4000012802D10020E0711FE0E6711DE0E87910 -:107F50003843E5E74078C10610D06978002914D18C -:107F6000C006C00E1B28F2D8287A002803D06A6900 -:107F70008020904709E0FFF77DFE06E0E0790128C8 -:107F8000E3D1DFE74021084360810120009900F040 -:107F90004EF8002802D0FFF739FEF8BDFFF73AFD92 -:107FA000F8BDF8B5424C1B21E06AF5F7BCFA002198 -:107FB0006062002801D0617003E0012060703D48DC -:107FC00060623A4E756830783035287C002822D0BF -:107FD000294648318EC938488EC02946583137481D -:107FE00002F05CFD3648F9F7FAFF3078002810D02F -:107FF000002101204140304801766A6C296C4261C1 -:1080000001612F4A616AF9F726FD0120F9F732FD77 -:1080100006E00121EDE7606AF9F7E1FFF9F74AFDB3 -:1080200001210020FAF753F803202070F8BD70B545 -:108030001F4C0546002907D1012D05D12079401C90 -:10804000C0B2207101282DD8A16928468847002890 -:1080500028D0A1791B48002907D0012D05D14178EE -:10806000C90602D10178C9061CD5E179002919D1C8 -:108070000E490978002901D0002102E0012D02D02B -:108080000121294310D110490978CA0602D4007889 -:10809000C00607D5A078002804D16078002803D056 -:1080A000C80601D4012070BD002070BD4C01002025 -:1080B0001C010020E8100020301100204911002090 -:1080C0000A1100202B0100202801002070B5044671 -:1080D0000020A083208C1E4648431546114602F01E -:1080E000BCFA2084F000294602F0A9FA401C80B2B4 -:1080F0000146192269439202E083914201DD401E4C -:10810000E0837D202946000202F099FA401CA084F9 -:1081100070BD30B50A7BD206D20E0A73002282757A -:108120008B181B7ADC075B08DD07E40FED0F2C19B9 -:108130005B08DD07ED0F2C195B08DD07ED0F2D192E -:108140005C08E307DB0F5B196408E507ED0FEB182C -:108150006408E507ED0FEB186408E31884186374EE -:10816000847D521CE318D2B28375052AD8D3D8B2C5 -:10817000252800D9FFDF30BDF8B504460E46254658 -:1081800022462346214600203035C032A0338031BC -:10819000032E0AD0002E38D0012E3FD0022E03D15C -:1081A00021462846FFF7B5FFF8BD2880A871E87181 -:1081B000E87228736873A873A870E87028716871F2 -:1081C00068762E46A88320366884B0712885B07200 -:1081D000E8752876E8732874F0723073B07301275D -:1081E00037752884B075088348838883C8830884DA -:1081F00048845871C885187310805080282108550C -:108200002084107290735074F8BDC885987161888D -:10821000E3880A462846FFF759FFC1E7C885D38D92 -:10822000528D61882846FFF751FFF8BD70B50446AE -:10823000024630348032054603290AD0002933D063 -:10824000012938D0022903D129462046FFF761FFD2 -:1082500070BD00202080A071E071E0722073607317 -:10826000A073A070E0702071607160762146A083D9 -:1082700020316084887120858872E0752076E073F3 -:108280002074C8720873887301230B752084887565 -:1082900029461084A03188701076D061282250556C -:1082A0000875C035287170BD6988EB880A4620467C -:1082B000FFF70CFFC8E7D06B6988C3894289204665 -:1082C000FFF704FF70BDF8B5867D0F460446002E0B -:1082D00001D0252E01D91220F8BD002A15D0387EF4 -:1082E000E17D50430818252102F0A9F90846E175FF -:1082F000CA084907490FBA180125127A2B468B4044 -:108300001A4204D020760020F8BD0020F8BD314686 -:1083100002F095F9491CC8B20022A118497C81429B -:1083200014D30021BB181E7A2B468B401E4201D06D -:10833000401EC0B2002804D0491CC9B20829F3D39A -:1083400006E0D000401820760020F8BD401AC0B2E8 -:10835000521CD2B2052AE0D31F20F8BD30B50D461D -:108360000446072900D9FFDFE0785021084069075B -:10837000490F88300843E070A078A72108401830E2 -:10838000A07060785E210840203060702078BC21A9 -:1083900008404030207030BD0179490901D00020EB -:1083A0007047002230B41146445C491CE30764085E -:1083B000E507DB0FED0FEB186408E507ED0FEB1891 -:1083C0006408E507ED0FEB186408E507ED0FEB18FF -:1083D0006408E507ED0FEB186408E507ED0FA40747 -:1083E000EB18E40FE318D218D2B20529DCDB012A1E -:1083F00002D930BC0120704730BC0020704738B52E -:1084000005460C466846F9F752FE00281ED069461C -:10841000002008562072092161560022411A00D519 -:10842000494220356B7A8B420FDCFF2B0DD0A17AAD -:10843000491CC9B2A172AB7A994202D8617A7F29EC -:1084400003D160720020A0720122104638BD30B402 -:1084500014460B3C08293DD20D007D442D796D1941 -:10846000AF4403060B10131C3336002A35D031E01D -:10847000022A32D0032A30D02CE0072A2DD0062A37 -:108480002BD027E0082A28D024E0002B02D00B2C88 -:1084900023D91FE00A3A0B2A1FD91BE0002B02D078 -:1084A0000B2C1AD916E00D2A17D00C2A15D0203023 -:1084B000007B002804D00D2A0CD3152A0DD909E021 -:1084C000112A07D3152A08D904E0092A05D001E0AA -:1084D000012A02D030BC0020704730BC0120704718 -:1084E00010B5282102F08EF810BD30B50546007891 -:1084F0000A0700090001120F1043287007290ED245 -:108500000800784400790018874403050305030731 -:108510000300062405E00C2403E0222401E00024EB -:10852000FFDF6878800980012043687030BD0078E3 -:108530000007000F704710B5C01C02F0A2FA10BD72 -:108540000A4610B5C11C104602F09BFA10BD10B5CA -:10855000093002F096FA10BD0278BF23C9071A400D -:10856000490E0A430270704700784006C00F7047FA -:1085700002785206520EC9010A430270704770B564 -:108580000C460546C11C2046093002F07AFA2078D4 -:108590004006400E207029784906C90FC9010843DA -:1085A000207070BD70B515460E4604461F2A00D9CE -:1085B000FFDF20462A463146093001F0C6FF6078C9 -:1085C000AD1D80098001A906890E0843607070BD49 -:1085D00070B5054640780E468406A40E062C00D2DF -:1085E000FFDFA41FE4B21F2C00D91F242946224616 -:1085F0000931304601F0A9FF204670BD70B515461F -:108600000E4604461F2A00D9FFDF20462A4631467F -:10861000093001F09AFF6078AD1D80098001A9063C -:10862000890E0843607070BD70B5044640780E46F0 -:108630008506AD0E062D00D2FFDFAD1FEDB21F2D5A -:1086400000D9FFDF21462A460931304601F07DFF7F -:10865000284670BD0A78C2734A7802748A784274D8 -:10866000C978817470470A78C2744A78027589782B -:10867000417570474176090A81767047C176090ACB -:10868000017770474177090A81777047C175090AF8 -:10869000017670478175704720300279C90652090A -:1086A0005201C90E0A430271704720300279D20686 -:1086B000D20E49010A430271704710B51F3002F013 -:1086C000D5F910BD417800788906890E0007000FA2 -:1086D00006D0012808D0022809D0062810D10AE0C7 -:1086E000891F1F290AD90BE00C2907D008E0891F30 -:1086F0001F2903D904E0891F1F2901D801207047D1 -:10870000002070474178007889060007890E000F25 -:10871000042805D1062903D3252901D80120704753 -:108720000020704770B401780907090F03292ED083 -:10873000052931D1411C827E0C46437E110219432A -:10874000037FC27D1D02037EC67E1B021343827D12 -:10875000407835438006800E22281DD106291BD380 -:108760001920C001814217D8FF26F436B54213D82C -:10877000002A11D0082A0FD88A420DD28B420BD87A -:10878000617F227F09021143814208D904E04078C9 -:108790008006800E0C2802D070BC0020704770BC90 -:1087A0000120704710B5222101F02CFF10BD00B54B -:1087B00002788B07920892009B0F1A43027042784E -:1087C000520952014270012904D0022902D0032922 -:1087D00001D0FFDF00BD01210A43427000BD00B59A -:1087E00002788B07920892009B0F1A43027042781E -:1087F000520952014270012904D0022902D00329F2 -:1088000001D0FFDF00BD01210A43427000BD0078A6 -:108810008007800F70470278EF23C9071A40C90EFE -:108820000A43027070474178C078C906C90E0E2805 -:1088300035D202007A4412799218974406090C0F37 -:108840001215181B1E2124272A2D0C2929D02AE0B5 -:10885000082926D027E0022923D024E0172920D098 -:1088600021E00D291DD01EE001291AD01BE00129AD -:1088700017D018E0022914D015E0092911D012E010 -:1088800009290ED00FE001290BD00CE0012908D0F6 -:1088900009E0062905D006E0022902D003E01B29E1 -:1088A00001D8012070470020704730B50546C170DF -:1088B0000E291BD208007844007900188744060866 -:1088C0000A0C0E10100A12121010140A0C240FE0D9 -:1088D00008240DE002240BE0172409E00D2407E032 -:1088E000012405E0092403E0062401E00024FFDF61 -:1088F0006878400940012043687030BDC0787047F7 -:10890000C171090A01727047017AC27908021043E5 -:1089100070474172090A81727047817A427A08026F -:1089200010437047C172090A01737047017BC27A14 -:108930000802104370474171090A817170478179BB -:1089400042790802104370470171704700797047FF -:108950004173090A81737047817B427B080210438F -:10896000704770B4017AC37909021943431C857AB0 -:108970001C46467A2B023343657926792C02344310 -:10898000C21C664E00798D1FB54215D8FF25F435FF -:10899000AB4211D800280FD008280DD888420BD23E -:1089A0008C4209D8507A117A00020843B11D8842DE -:1089B00002D870BC0120704770BC0020704710B511 -:1089C000001D02F053F810BD0A4610B5011D1046F7 -:1089D00002F04CF810BD4172090A81727047817A29 -:1089E000427A08021043704701717047007970475E -:1089F00010B5001D02F052F810BD0A4610B5011D59 -:108A0000104602F04BF810BD0A78027349784173A2 -:108A10007047027B0A70407B4870704710B50E307B -:108A200002F03CF810BD0A46014610B50E31104662 -:108A300002F034F810BD0A7882754A78C2758A78D7 -:108A40000276C97841767047827D0A70C27D4A708D -:108A5000027E8A70407EC870704710B5001D02F01B -:108A60001DF810BD0A4610B5011D104602F016F89B -:108A700010BD0A7802734A7842738A788273C97883 -:108A8000C1737047027B0A70427B4A70827B8A7096 -:108A9000C07BC8707047017170474171090A8171CC -:108AA0007047C171090A0172704700797047817976 -:108AB0004279080210437047017AC27908021043D4 -:108AC000704701717047007970470171704710B5A8 -:108AD000001D01F0E3FF10BD0A4610B5011D104650 -:108AE00001F0DCFF10BD10B5001D01F0D7FF10BD77 -:108AF0000A4610B5011D104601F0D0FF10BD30B57B -:108B00000C4605461B2900D9FFDF6878E1064009BD -:108B10004001C90E0843687030BD00007A0C0000A7 -:108B200070B504461020851A281901F00EFD29069B -:108B3000090E06D0491EC9B280206054204601F0BB -:108B400061FD70BD30B505E05B1EDBB2CC5CD55C71 -:108B50006C40C454002BF7D130BD10B5002409E09F -:108B60000B78521E5B00234303700B78401CDC091A -:108B7000D2B2491C002AF3D110BD30B50C46097899 -:108B8000012089B01546002909D0012905D129788D -:108B9000042902D105201070002009B030BD6068A2 -:108BA0000590684606900D21C01C01F02BFD0322A4 -:108BB0006846A16801F0C9FC0120207006206946C2 -:108BC0000874606A0890294604A8F6F749FBE4E7B0 -:108BD000F0B50C4609780120FF4E062791B01546E6 -:108BE00000290CD001291DD0022945D0032904D128 -:108BF0002978042901D11770002011B0F0BD6068F8 -:108C0000002809D001900296012020706846077064 -:108C1000606A114604905EE00220207004202870F3 -:108C2000566027E029780429E7D169681022206975 -:108C3000FFF793FF6868C07B000606D5E64A206907 -:108C4000102310320146FFF77DFF10222169606971 -:108C5000FFF783FF2069C07B000606D5DE4A606906 -:108C6000102310320146FFF76DFF02202070042010 -:108C700028706E600320C0E729780429BDD1A0893F -:108C800010280AD9103880B2A081A16810230918D1 -:108C900005A86A68FFF756FF14E010281FD0C2B27B -:108CA0000DA8A168FFF73CFF626910230DA909A870 -:108CB000FFF748FF102309A905A86A68FFF742FFDC -:108CC000032020706068019005A802906846077034 -:108CD000606A294604906846F6F7C2FA8DE71023C9 -:108CE0002269A168E3E7F8B50D4607460B78012035 -:108CF0000721002B07D0012B04D11378062B01D1BB -:108D000011700020F8BD6C6901266170E868606030 -:108D1000686A6062A168287C0870A681A068A9685A -:108D20002022401C01F011FCA08920222030A081CB -:108D3000A0686968213001F008FCA0892146203034 -:108D4000A0812E703846F6F7A2FAF8BDF7B50D46A9 -:108D50000120097817460646002913D0012922D0A0 -:108D600002297DD003290CD13978062909D17968E7 -:108D70001022E86901F0E9FB08203870183500205E -:108D80007D60FEBD2C6A0720607093482022203051 -:108D900060602020A081686A60626968A06801F054 -:108DA000D4FB2E70D3E039780629EAD12C6A07204B -:108DB0006070686A606251681022E86901F0C5FB62 -:108DC000E8696060A06800270770A681A068062295 -:108DD0004670A089401C80B2A081A168081869690A -:108DE000491C01F0B2FBA089801D80B2A081696995 -:108DF000A2680978C907C90F1154A0890622401C2E -:108E000080B2A081A16808182969491C01F09DFB66 -:108E1000A089801D80B2A0812969A2680978C9074C -:108E2000C90F1154A0891022401C80B2A081A168F2 -:108E30000818E96801F089FBA0891022103080B27F -:108E4000A081A1680818A96801F07FFBA08904220D -:108E5000103080B2A081A16808185F49091F00E0A6 -:108E60000CE001F072FBA089001D80B2A081A16816 -:108E70000F54A089401CA081022067E039780629A0 -:108E800093D151681022A86901F05FFB2C6A07207A -:108E90006070E8696060686A6062A16800200870BC -:108EA000A681A06806224670A089401C80B2A081DD -:108EB000A16808186969491C01F047FBA089801D59 -:108EC00080B2A0816969A2680978C907C90F1154E5 -:108ED000A0890622401C80B2A081A16808182969D7 -:108EE000491C01F032FBA089801D80B2A081296954 -:108EF000A2680978C907C90F1154A0891022401C23 -:108F000080B2A081A1680818E96801F01EFBA08961 -:108F10001022103080B2A081A1680818A96801F061 -:108F200014FBA0890422103080B2A081A168081827 -:108F30002949091F01F009FBA089001D80B2A08109 -:108F4000A1680E54A089401CA081032028702146EE -:108F50000098F6F79CF9FEBD70B50D4606460978F7 -:108F60000120002908D0012905D11178062902D154 -:108F700009201070002070BD2C6A0720607068689E -:108F80006060686A6062E9690622491CA06801F0B5 -:108F9000DCFA0620A081E869A16800780622C007F3 -:108FA000C00F8871A089401C80B2A081A1680818F8 -:108FB000A969491C01F0C9FAA089801D80B2A0816D -:108FC000A969A2680978C907C90F1154A089401C72 -:108FD00080B2A081A16801E096AE010008180322CA -:108FE000696901F0B2FAA0891022C01C80B2A08188 -:108FF000A1680818296901F0A8FAA0891022103088 -:1090000080B2A081A1680818E96801F09EFAA089E1 -:109010001022103080B2A081A1680818A96801F060 -:1090200094FAA08921461030A08101202870304692 -:10903000F6F72DF970BD70B50D460646097801208A -:10904000144600290CD0012909D12178062906D11E -:109050000A202070606801F0D9FA6060002070BDBD -:109060006C6907206070E8686060686A60622969FE -:109070001022A06801F069FA1020A081A0682022C7 -:109080001030A96801F061FAA0892022203080B256 -:10909000A081A1680818696801F057FAA0892146E3 -:1090A0002030A081012028703046F6F7F0F870BD1E -:1090B00070B50C460978012006268EB015460029A9 -:1090C0000BD0012932D0022905D12978042902D1F7 -:1090D0000B20107000200EB070BD60690722007870 -:1090E000C107C90F68460170A0690078C107C90FA0 -:1090F00068464170801CE16801F027FA02A8072247 -:109100000130216901F021FA6068059009A80690F4 -:1091100010236A46A168FFF715FD012020706846FC -:109120000674606A0890294604A822E02978042978 -:10913000D1D1A169062205A8491C01F006FA61698E -:1091400006A806220230491C01F0FFF90020089011 -:109150006068019009A80290102305AA6968FFF7CA -:10916000F1FC0220207068460670606A049029466F -:109170006846F6F775F8AEE730B50C460978012079 -:1091800089B01546002908D0012905D1297804297C -:1091900002D10C2010700020FFE460680590684642 -:1091A00006900822E16801F0D0F9082202A8A1681F -:1091B00001F0CBF901202070062069460874606A2E -:1091C0000890294604A8F6F74BF8E6E430B50C46BB -:1091D0000978012089B01546002908D0012905D158 -:1091E0002978042902D10D2010700020D5E4606890 -:1091F0000590684606900822A16801F0A6F90020B3 -:109200000290039001202070062069460874606A6D -:109210000890294604A8F6F723F8BEE410B50B78A9 -:1092200001208AB0002B09D0012B05D11178042927 -:1092300002D10E20107000200AB010BD48680590C1 -:10924000684606908B681C7804705B784370CB6826 -:109250001C7884705B78C3700020019002900390AA -:1092600001200870062368460374486A0890114676 -:1092700004A8F5F7F5FFDFE710B50C780123002C03 -:1092800004D0012C11D0022C28D121E001220A7037 -:10929000CA68052353704B685360114B93609B1E43 -:1092A000D360496A516211460EE014780E2C15D134 -:1092B00002230B70CB6804245C7052685A608A6881 -:1092C0009A60496A59621946F5F7E1FF034605E0DD -:1092D00010780D2802D10F2010700023184610BD01 -:1092E00090AE010070B50C4601462039342901D3F7 -:1092F00001200BE048280BD0211D074E800080196B -:109300000EC98038256806682846B047206070BDC1 -:109310002046E7F70DFFF9E7C8AE010010B5494850 -:1093200000F04CFA002800D0FFDF4648401C00F057 -:1093300045FA002800D0FFDF10BDF1B5424F82B0E2 -:109340007868009001263F4800F040FA002804D1D8 -:1093500000263C48401C00F051FA3C4C00253C499A -:109360000120486025606560029A7A6008600320E9 -:10937000384919E0384A1269D20615D50122374B0F -:1093800092031A60EFF31082D207D20F72B600D0A8 -:10939000012248602368002B03D16368002B00D1B1 -:1093A00020BF002A00D162B62268002A02D162687A -:1093B000002ADFD060680028D1D1002E06D00098A6 -:1093C00078602048401C00F001FA10E01D48401C65 -:1093D00000F0FCF90028BCD11E49032088606560BC -:1093E000256008141D490860164800F007FA00209F -:1093F000FEBDF0B58FB0064604A808AA0D460024AD -:109400000C920D9017E020460C2148430746E9597D -:109410001022684601F099F87F19102279680D989A -:1094200001F093F86846FFF788FF1022B8680C999E -:1094300001F08BF8641CB442E5DB00200FB0F0BDF6 -:109440007BE700005401002000E5004000E10040FF -:1094500000E0004000E3004000ED00E080E200E0BA -:10946000CB48002101708170704770B5C94D012350 -:109470006B60C94B1C68002CFCD0002407E00E6810 -:1094800006601E68002EFCD0001D091D641C94425D -:10949000F5D30020686018680028FCD070BD70B556 -:1094A000BB4C0546BD4E2078022800D0FFDFB542F8 -:1094B00000D3FFDF6169BA48012902D8B94A954251 -:1094C00001DD03224271491C6161711BC160B44915 -:1094D0006078F6F701FE70BD70B5AD4C0D46617851 -:1094E000884200D0FFDFAD4E2B0001F0EFFA094DAE -:1094F0000622304D4D4D4D3C4D002078022800D0C5 -:10950000FFDF03202070A078022802D0012804D0B9 -:1095100008E0A06800F00EFC04E02046083007C810 -:10952000FFF7A3FF052020700020A070F6F7F3F8E6 -:1095300070BDF6F7B7F901466068F7F7E7FAB04291 -:109540000DD2616902290AD2FFF7A9FF70BDF6F7B3 -:10955000A9F901466068F7F7D9FAB042F4D30320BD -:10956000F7F789FD07E02078022809D0052805D003 -:10957000FFDF0420207000F002F970BD022000E03F -:109580000320F7F778FDF4E7FFDF70BD70B50546FF -:10959000F6F788F97E4C60602078012800D0FFDF64 -:1095A0007F490220087000220A718D6004224A71EE -:1095B0007A4ACA6020706078F6F78EFD70BD10B5EB -:1095C000734CA078002802D12078002801D0112007 -:1095D00010BD7548F6F7FEF860706078002804D07A -:1095E000012020700020606110BD032010BD0246E4 -:1095F000010B012310B55B0401209A4203D288407D -:1096000000F042FF10BD01239B049A4204D220398E -:10961000884000F041FF10BD03235B049A4204D24E -:109620004039884000F040FF10BD0123DB049A421E -:1096300004D26039884000F039FF10BD002010BD11 -:10964000F8B515469200044617190E463F1F0092C2 -:1096500000F081FB012109070A695043009A921921 -:10966000121FB24201D2012200E00022002D03D0DD -:1096700009698908A94201D20920F8BD4B498C42E9 -:1096800019D3A74217D3844205D2874203D220467A -:109690003043800701D01020F8BD8E420BD3002A42 -:1096A00009D12046FFF7A3FF002804D13846FFF771 -:1096B0009EFF002801D00F20F8BD3D483D490068BD -:1096C000884205D02A4631462046FFF7CEFE0FE0FD -:1096D000FFF775FF0028EFD12D480121C660056115 -:1096E000846081702846302148431830FFF74EFFD0 -:1096F0000020F8BD70B501252D07296904462B48C7 -:1097000000F09DFF84420BD300F025FBA04201D85E -:10971000102070BD28696043FFF769FF002801D061 -:109720000F2070BD224823490068884204D0286970 -:10973000604300F0FFFA0CE0FFF741FF0028F0D192 -:109740002969134861438160022181701A48FFF73B -:109750001DFF002070BD1548010B01208840401EF0 -:10976000704770B50D460446FFF7F5FF204201D063 -:109770000F2070BD2946204600F09AFE70BD10B53E -:10978000034C6078F6F77AF800202070A07010BDC6 -:109790005801002000E5014000E40140B08F0600C0 -:1097A0005811002030750000D994010000B001006C -:1097B00098000020BEBAFECA3A560000002101708F -:1097C000084670470146002008707047EFF310818B -:1097D000C907C90F72B60278012A01D0012200E040 -:1097E000002201230370002900D162B6002A01D0B3 -:1097F00000207047012040037047E7E7EFF3108136 -:10980000C907C90F72B600220270002900D162B6E2 -:1098100000207047F2E70000454909680160002018 -:10982000704743490860002070470121414A0028E1 -:1098300003D0012803D040487047916300E0D16312 -:10984000002070473D49012008603B48801C70475C -:1098500004223B4B3949002805D05A60086901228F -:109860001043086108E008694008400008619A60F8 -:1098700030490020C0318860002070472F490622FF -:10988000002808D0012809D002280DD003280FD0C5 -:109890002948401C70470869904302E008699043DA -:1098A000801C08610020704708699043001DF8E79C -:1098B00008691043F5E721494A6A02434A620020D9 -:1098C00070471E494A6A82434A62002070471B491A -:1098D000496A0160002070471849CA690243CA6199 -:1098E000002070471549CA698243CA610020704749 -:1098F0001249C969016000207047104902460020E2 -:109900004031002A03D0012A01D0072070478A6322 -:10991000704708490020C03188600A4801688022E9 -:10992000090A0902114301600749012008607047D4 -:1099300000040040400000400420000000050040FA -:109940000003004000E400E000E100E05A495B4B06 -:109950000A685B499A42096801D18904890C01604F -:10996000002070475449554B0A6855499A4201D125 -:109970008004800C4860002070474F494F4B0A68B4 -:109980004F499A4201D18004800C886000207047C2 -:1099900030B5494B494D1C684A4BAC4202D01028A7 -:1099A00002D203E00E2801D3184630BDC30044485C -:1099B000181801614261002030BD3F493F4B0A68E1 -:1099C0004049491C9A4202D0042802D203E00228EE -:1099D00001D3084670473C4A0121C000801801604D -:1099E000002070473449354B0A683649491C9A4271 -:1099F00002D0042802D203E0022801D308467047AF -:109A0000314A0121C000801841600020704770B5C4 -:109A1000294A2C4B14682D4E284D82005B1C92194C -:109A2000AC4203D0042803D2116006E0022801D31F -:109A3000184670BD8804800C1060002070BD70B5A1 -:109A40001D4A204B1468214E1C4D82005B1C92194C -:109A5000AC4203D0042803D2106806E0022801D3E8 -:109A6000184670BD10688004800C0860002070BD2E -:109A700010B5134A164890600E200021C3009B18B1 -:109A800019615961401C1028F8D300200F4A05E0E5 -:109A9000022803D383009B18196005E083009B18FC -:109AA0001C68A404A40C1C60401C0428F0D310BD46 -:109AB000034907488860704798000020BEBAFECA74 -:109AC00000F501400820000000F0014000F80140CE -:109AD00000C0FFFF10B572B600F0D7F800280BD019 -:109AE000E7F7FEFBF5F702FEF7F74FFA6B490020A8 -:109AF000C86288626A49086062B6002010BDF3B58A -:109B00000446002601200007C06A81B0C043000659 -:109B1000000E04D163480068401C00D1012672B6D3 -:109B200000F0B3F8002802D062B60820FEBDE7F7C7 -:109B300015FBE7F7D9FB5C4F002500906909E806A3 -:109B4000C00E8900C9190968C140C8071FD0202D5F -:109B500003D20098E840C0071FD168B2002808DA95 -:109B60000107090F08398A08504992005118C9693C -:109B700004E081084E4A8900891809688007C00EF0 -:109B8000C1400806800F00F005F9002805D06D1CC3 -:109B9000202DD3D3002C03D003E062B64548FEBD90 -:109BA000454C2078022803D962B601200003FEBD8F -:109BB0003E48C1690902090AC2051143C161002E6C -:109BC00005D1364D3D48E862E7F78EFBA862207864 -:109BD0000028607802D000280BD107E0002808D0C8 -:109BE000402806D8A078212803D804E0A0780028CF -:109BF00001D00720FEBD2A4931480860314902984A -:109C00000860E7F771FB2146F7F7A6F9F5F732FD93 -:109C100000F0FCF9FFF724FC2046E7F72FFB0400D7 -:109C200062B603D0FFF756FF2046FEBD0020FEBD02 -:109C300010B5044600F029F8002800D0012020705B -:109C4000002010BD204908600020704710B50C4668 -:109C5000102808D011280BD012280CD013280ED0B1 -:109C60000120086010BD03CC083CFFF748FF0AE064 -:109C7000FFF730FF07E02068FFF7DAFF03E0124943 -:109C8000206808600020206010BD05480C4900686D -:109C9000884201D101207047002070470005004034 -:109CA000980000200010001000E100E000ED00E04E -:109CB00000E400E00110000098AF010088120000ED -:109CC000BEBAFECA7001002004000020F0B585B0C5 -:109CD0000F460446FEF79BFD054660786946C606BA -:109CE000F60E3846F3F782FD01000AD0012D02D0AE -:109CF000032005B0F0BD01980279C3781002184323 -:109D000007E0022D12D1042E10D32079E278000250 -:109D10001043001D80B28919814202D1002005B094 -:109D2000F0BD814202D2012005B0F0BD022005B095 -:109D3000F0BD00000A4A022151600A490B68002B5D -:109D4000FCD0906008680028FCD0002050600868B3 -:109D50000028FCD0704701200007406970470000D0 -:109D600000E5014000E401408107C90E002808DA3F -:109D70000007000F08388008854A80008018C069F5 -:109D800004E08008834A800080180068C84000060C -:109D9000800F7047042805D2002803D0022801D084 -:109DA000012070470020704710B5044600F0E1F82C -:109DB000002812D02046FFF7D7FFFFF7EBFF00285F -:109DC0000DD07549E2060B78D20E01209040002B91 -:109DD00008D04A681043486006E0704810BD6F48DC -:109DE000401C10BD6E490860002010BD10B504462F -:109DF00000F0BFF800280BD06749E2060B78D20EBE -:109E000001209040002B05D04A6882434A6004E05C -:109E1000624810BD624980310860002010BD70B5F5 -:109E20000D46044600F0A5F800280BD05D480068F8 -:109E3000E206D20E01219140084000D001202860A6 -:109E4000002070BD554870BD10B5044600F091F873 -:109E5000002807D0E106C90E01208840514908605A -:109E6000002010BD4D4810BD10B5044600F081F82B -:109E7000002808D0E106C90E0120884049498031F8 -:109E80000860002010BD454810BD70B50D46044661 -:109E900000F06FF8002819D02846FFF77BFF002854 -:109EA00016D0A007C10EFF228A40A807000E8840E6 -:109EB000002C10DA2107090F08398B0834499B0060 -:109EC0005B18D96991430143D9610CE0334870BDF7 -:109ED0003248401C70BDA3082E499B005B181968CE -:109EE000914301431960002070BD70B50C460546D2 -:109EF00000F03FF8002806D02846FFF735FFC0B233 -:109F00002060002070BD254870BDBFF34F8F2049F1 -:109F10002548C860BFF34F8FFEE770B50546F7F7D9 -:109F2000D2FC002801D0072070BD1B4C01202178F5 -:109F300000290ED1207072B6F7F736F8184E803629 -:109F4000316881436160F7F72FF8C043306062B633 -:109F500000202870002070BD0F490A78002A06D022 -:109F6000002804D10E4A48681060002008700020C4 -:109F7000704710B50446202807DAF7F715F80121D5 -:109F8000A140084201D1012010BD002010BD0000F9 -:109F900000ED00E000E400E074010020012000007A -:109FA00000E100E000E200E00400FA0570B50024E2 -:109FB00002460D4620462146002A1ED0012A04D022 -:109FC000022A04D0032A1ED103E0012002E002206D -:109FD00013E003202B0000F079FD07160507090B9D -:109FE0000D0F1600012108E0022106E0032104E024 -:109FF000042102E0052100E00621F5F704FC002819 -:10A0000001D0204670BD0724FBE70000FA48052177 -:10A010008170002101704170C1708160704710B57E -:10A02000F6490A78022A07D0CA681018C860C868BA -:10A030006438F6F72DFD10BD8A68101888608868AE -:10A04000F6E70378EE49EF4A002B02D0012B10D03F -:10A0500014E00379012B01D0002B0FD14379002BA1 -:10A0600001D0012B0AD18368643B8B4206D2C068C1 -:10A0700010E00379012B03D0002B01D000207047A2 -:10A080004379002B01D0012BF8D1C368643B8B428C -:10A09000F4D280689042F1D801207047F8B50446A8 -:10A0A0000226F6F7D4F90068002800D0FFDF012768 -:10A0B000D14D002C08D02078002817D0012805D0D9 -:10A0C000022811D0032813D02F710DE06068C82832 -:10A0D00008D3F6F746FD002804D06068FFF79FFF1D -:10A0E000012603E0002601E000F0B4F93046F8BD97 -:10A0F00028780028F8D16068FFF7A3FF0028E3D094 -:10A1000060680078002823D0A878042800D0FFDFFA -:10A11000BA4F002038706068007900283DD00020D8 -:10A12000387160684079002839D0042078716068FF -:10A130008168E868F5F720FEB8606068C068643040 -:10A14000F8600320A870AD49E878F5F7C5FFCBE7C4 -:10A15000AA480221017061680979002919D00021FB -:10A16000017161684979002915D004214171616844 -:10A170008968643181606168C968C160C0689E4C4B -:10A1800014346060F5F78EFB20606F700220A870B9 -:10A19000AAE70321E4E70321E8E70120C0E7032061 -:10A1A000C4E7F8B5944C0D46E178884200D0FFDF53 -:10A1B000284600250126914F030000F087FC090680 -:10A1C0000E2E4C6C727DA282A200A078032803D0D0 -:10A1D000A078022800D0FFDFF8BDA078032803D0C4 -:10A1E000A078022800D0FFDF0420A070257120781D -:10A1F00000280FD1FFF713FF3878022806D0B8687F -:10A20000E06000F061F9206100204FE0E078F5F7B0 -:10A21000D1FDF5E700F01EF9F8BDA078032803D0C2 -:10A22000A078022800D0FFDF2078002802D000F0BC -:10A2300019F9F8BDA07803281AD1042027E0081ADC -:10A24000F8606E49E078F5F747FFF8BD0420F6F7AF -:10A2500012FFA570F8BDA078032803D0A0780228CB -:10A2600000D0FFDF20780028E1D1A07803280DD0AE -:10A27000F5F718FB604E014614363068F6F746FCD9 -:10A280000028E3DB71688142E0DBD8E70520F6F7C0 -:10A29000F2FEA670F8BDA078042800D0FFDF0220EF -:10A2A00004E0A078042800D0FFDF0120A1688847DF -:10A2B000FFF7F4FE05462BE0A0780428AAD0FFDFC4 -:10A2C000A8E7A078042806D06078002802D0A078FB -:10A2D000022800D0FFDF20780028A8D120790028AC -:10A2E00004D00620F6F7C7FE2571D2E76078002873 -:10A2F00005D04249E078F5F7EFFE6570F8BD07201C -:10A30000C5E7FFDFF8BD002D07D0012D03D0FFDF2B -:10A31000022DF8D1F8BD0420C8E70320C6E770B5C8 -:10A32000050005D0344CA078052803D0112070BD5D -:10A33000102070BD3448F5F74DFAE070E078002841 -:10A3400003D0A5600020A07070BD032070BD10B5C3 -:10A3500029480178002901D0112010BD81780529F4 -:10A360000ED0817801290DD0817800290AD00121F1 -:10A3700001708178012905D08078002802D003E09F -:10A380000F2010BD00F06EF8002010BDF8B51A4E79 -:10A390000446B078002801D001280DD1002C0DD042 -:10A3A0002046FFF74EFE00280AD02078134D0028E3 -:10A3B00008D0B07801282DD00F20F8BD1020F8BDAE -:10A3C0000720F8BD02272F70207900281ED000201A -:10A3D0002871607900281BD004206871A06864305F -:10A3E000A860E068E860E868034C14346060F5F742 -:10A3F00059FA2060B77023E07C010020681100202A -:10A400003D860100FF1FA107A3A101000320DFE794 -:10A410000320E2E7002028702079002816D00020D1 -:10A4200028716079002813D004206871A168F06851 -:10A43000F5F7A2FCA860E0686430E8600320B07023 -:10A440000F49F078F5F748FE0020F8BD0320E7E754 -:10A450000320EAE710B50B48006900F02EF8F5F785 -:10A460005AF910BD10B5074CE078F5F707FA082047 -:10A47000F6F701FE0520A07000202070607010BD6E -:10A48000681100207C01002014490968014201D0B4 -:10A49000012070470020704710494968014201D0EF -:10A4A000012070470020704700207047002070474F -:10A4B0000A4A106051600020704709498A6A094BB6 -:10A4C0001A4002438A627047054A916A0548054B63 -:10A4D000C0430840194091627047000000060040E8 -:10A4E00000050040FD7EFFFF7047704770477047D2 -:10A4F000034610B50B439B070FD1042A0DD308C8A0 -:10A5000010C9121FA342F8D018BA21BA884201D943 -:10A51000012010BD0020C04310BD002A03D0D30786 -:10A5200003D0521C07E0002010BD03780C78401CBB -:10A53000491C1B1B07D103780C78401C491C1B1BB2 -:10A5400001D1921EF1D1184610BDF8B5042A2CD3C2 -:10A55000830712D00B78491C0370401C521E8307DE -:10A560000BD00B78491C0370401C521E830704D08B -:10A570000B78491C0370401C521E8B079B0F05D0A3 -:10A58000C91ADF002023DE1B08C90AE0E6F7FEFD3A -:10A59000F8BD1D4608C9FD401C46B4402C4310C000 -:10A5A000121F042AF5D2F308C91A521EF0D40B78F0 -:10A5B000491C0370401C521EEAD40B78491C0370DE -:10A5C000401C012AE4D409780170F8BD01E004C000 -:10A5D000091F0429FBD28B0701D50280801CC90703 -:10A5E00000D00270704700290BD0C30702D0027060 -:10A5F000401C491E022904D3830702D50280801C17 -:10A60000891EE3E70022EEE70022DFE70378C27845 -:10A610001946437812061B0219438378C0781B043D -:10A62000194311430902090A000608437047020A48 -:10A6300008704A70020C8A70020ECA7070470022BD -:10A6400003098B4273D3030A8B4258D3030B8B420B -:10A650003CD3030C8B4221D312E003460B437FD43F -:10A66000002243088B4274D303098B425FD3030A51 -:10A670008B4244D3030B8B4228D3030C8B420DD364 -:10A68000FF22090212BA030C8B4202D312120902F2 -:10A6900065D0030B8B4219D300E0090AC30B8B4230 -:10A6A00001D3CB03C01A5241830B8B4201D38B03DE -:10A6B000C01A5241430B8B4201D34B03C01A524183 -:10A6C000030B8B4201D30B03C01A5241C30A8B42C6 -:10A6D00001D3CB02C01A5241830A8B4201D38B02B1 -:10A6E000C01A5241430A8B4201D34B02C01A524155 -:10A6F000030A8B4201D30B02C01A5241CDD2C309C7 -:10A700008B4201D3CB01C01A524183098B4201D342 -:10A710008B01C01A524143098B4201D34B01C01A2D -:10A72000524103098B4201D30B01C01A5241C308A5 -:10A730008B4201D3CB00C01A524183088B4201D314 -:10A740008B00C01A524143088B4201D34B00C01A00 -:10A750005241411A00D201465241104670475DE015 -:10A76000CA0F00D04942031000D340425340002298 -:10A770009C4603098B422DD3030A8B4212D3FC2241 -:10A78000890112BA030A8B420CD3890192118B42C0 -:10A7900008D3890192118B4204D389013AD09211D6 -:10A7A00000E08909C3098B4201D3CB01C01A524191 -:10A7B00083098B4201D38B01C01A524143098B425A -:10A7C00001D34B01C01A524103098B4201D30B0143 -:10A7D000C01A5241C3088B4201D3CB00C01A524168 -:10A7E00083088B4201D38B00C01A5241D9D243084F -:10A7F0008B4201D34B00C01A5241411A00D201468C -:10A80000634652415B10104601D34042002B00D5F5 -:10A810004942704763465B1000D3404201B50020B7 -:10A82000C046C04602BD70477047704710B500F083 -:10A830005DF810BD30B58C180278401C13071B0F53 -:10A8400001D10378401C120906D10278401C03E0B4 -:10A850000578401C0D70491C5B1EF9D101E00B709E -:10A86000491C521EFBD1A142E6D3002030BD00009E -:10A87000154B1860154B1960154B1A607047FEDFB9 -:10A8800004207146084218D10699124A914214DCFC -:10A89000069902394878DF280FD10878FE2806D0BB -:10A8A000FF280AD10C480D4A0D4B1B6818470D486C -:10A8B0000099019A0A4B1B681847069805990A4B9C -:10A8C0001B68DB68184700009C010020A0010020E5 -:10A8D000A401002000B00100010000000000000001 -:10A8E0007001002001100000040000201D481E49D6 -:10A8F0007047FFF7FBFFE6F713FC00BD01200007E0 -:10A90000C06AC0B2FF2804D11848194909688842B2 -:10A9100002D0184818490160184819490968884246 -:10A9200003D1184A13605B68184700BD20BFFDE7DC -:10A9300012481349096888420ED1134B18680B4915 -:10A940008842F3D080F308881049884204DD10481B -:10A95000026802210A4302600E4880470E48804781 -:10A96000FFDF00007811002078110020FFFFFFFFBB -:10A97000001000102C05004008000000001000002E -:10A98000000000200400002000B001000020002092 -:10A9900024050040E52F0000FDA8010004207146B9 -:10A9A000084202D0EFF3098101E0EFF308818869E2 -:10A9B00002380078102813DB20280FDB2B280BDB54 -:10A9C0000A4A12680A4B9A4203D1602804DB094AFA -:10A9D0001047022008607047074A1047074A10478F -:10A9E000074A12682C3212681047000098000020B5 -:10A9F000BEBAFECAED120000E59201004D9C0100B6 -:10AA0000040000200E4B0F4908470F4B0D49084723 -:10AA10000E4B0C4908470E4B0A4908470D4B094994 -:10AA200008470D4B074908470C4B064908470C4B94 -:10AA3000044908470B4B034908470B4B014908479A -:10AA4000D5920000692F0000492F0000578F0000A9 -:10AA5000058F0000AD940000F71200002F2F0000BA -:10AA60001B9000009D950000311100000A780270D3 -:10AA70004B7843708A788270CA78C2700B79037100 -:10AA800070470A7802704B7843708A788270CA786F -:10AA9000C2700B7903714A79427170470A7802706B -:10AAA0004B7843708A788270CA78C2700B790371D0 -:10AAB0004A7942718A798271CB79C37170470A8869 -:10AAC00002804A8842800A790271704730B4744625 -:10AAD000641E2578641CAB4200D21D46635D5B009A -:10AAE000E31830BC18470000957D00003B7F000054 -:10AAF000677D00002B800000518000008F800000E7 -:10AB0000C9800000058100003B8100008F810000AA -:10AB10002F1200002F1200002F1200002F12000031 -:10AB20002F1200002F12000049220000DB2200003B -:10AB3000FB22000017240000AB1E00005D26000071 -:10AB4000412700005D270000ED2C0000112D0000C2 -:10AB5000472C0000972C0000432D0000CF2D000053 -:10AB6000D1420000C74400007F4800009149000026 -:10AB7000194A0000C34A0000354B0000534C000046 -:10AB8000354D0000C14D0000752700007F270000F3 -:10AB90008D270000731E00006D280000451E000078 -:10ABA000C72900002F120000A35600001B57000009 -:10ABB000335700004D570000B55800007357000090 -:10ABC00085570000C3570000E75700009F5800005A -:10ABD0002F1200002F1200002F1200002F12000071 -:10ABE0002F1200002F120000436F0000616F000061 -:10ABF000696F0000BB6F0000EB6F0000D5700000B4 -:10AC00006D71000089710000D1710000ED720000CB -:10AC1000DB7400000F760000D16000002F120000EE -:10AC20002F1200002F1200000F8C00004D8C00002E -:10AC30006F8C0000100110013A0200001A0200009F -:10AC4000757600001F790000FFFFFFFF0000FFFF87 -:10AC5000D9850000811B0000EB5300002561000036 -:10AC6000BF780000000000002300230046004D00D4 -:10AC700023002300F5000000000000000000000099 -:10AC8000C1BB000000000000000000000000000048 -:10AC900045C90000000000000000000000000000A6 -:10ACA0002DBC0000B7BC0000000000000000000048 -:10ACB000EBBF000067BD000073C200000000000091 -:10ACC00000000000DBCD00000000000000000000DC -:10ACD00000000000B5C000000DCA00000000000028 -:10ACE000F3CA000067CB00000000000007C30000AB -:10ACF000E9C30000000000002DCB00004FC400009D -:10AD0000F7C600005FC7000037C800000BC2000094 -:10AD1000CBC800000000000035C1000000000000AA -:10AD20005FBE0000DBBD00007BC90000ABCC0000B3 -:10AD300019CD0000000000006DC0000009BE000039 -:10AD40001DC0000021CF0000B1BF00002DCE0000CB -:10AD50000000000087CD00002FBD000063BC000094 -:10AD6000B5BE0000ABBD00009FCE0000CBCF000001 -:10AD700011C1000083CF0000DD380000DD38000085 -:10AD80002522000047850000A1630000B5530000A4 -:10AD900000000000EB6801002339000023390000A7 -:10ADA000472200009B85000011640000C35300008F -:10ADB0009365010011690100BC01BC013E002C003B -:10ADC00044000E00D8002001010000000100000036 -:10ADD000000102030400101112130000001400000F -:10ADE0007B8B0100B190010079910100CD910100B0 -:10ADF0001D92010079920100D18B0100E78C0100C6 -:10AE00004D8D0100598F01003790010085DF000052 -:10AE100049F000005D540100E54601007D54010049 -:10AE2000E7460100C72B01004F7C0100273B0100D2 -:10AE30004F7C0100312C0100A97D0100D3340100B9 -:10AE4000A97D0100412B0100457D01005F3A010011 -:10AE5000457D0100555555D6BE898E00000070060F -:10AE6000120DB413000014035A06A0090000600478 -:10AE7000F208840D555555252627D6BE898EF40136 -:10AE8000FA00960064004B0032001E00140000001F -:10AE90000300656C74620000000000000000000008 -:10AEA000000000000000870000000000000000001B -:10AEB000000000000000BE83605ADB0B376038A53D -:10AEC000F5AA9183886C00004D99010065990100F5 -:10AED0007B99010091990100BB990100E59901005E -:10AEE0000F9A01003F9A0100F5960100419601007A -:10AEF00063970100BD970100CD970100FD97010008 -:10AF0000A99D0100ED9D01001F9E0100499E0100C9 -:10AF1000699E01008B9E0100EB9E01000B9F0100CA -:10AF20001B9F0100599F0100531201005B12010099 -:10AF3000691201002B980100459801001998010041 -:10AF400023980100519801007D980100B7980100F5 -:10AF5000C3980100CF980100D9980100E59801003D -:10AF6000F1980100FB98010000000000C390000070 -:10AF70001D91000035910000AD9F01003B93010041 -:10AF8000F39301001FA301004FA301008DA3010053 -:10AF900025100100B314010000100200BCAF010035 -:10AFA00008000020A001000034A80100E0AF01006B -:10AFB000A8010020D00F0000041100000159360143 -:10AFC000000100683720FB349B5F80041F80001065 -:10AFD000022001337F0102E429E471A8010000008E -:10B00000605E0020F5B001000FB1010011B1010038 -:10B010000000000000000000000000000000000030 -:10B0200000000000000000000000000013B101005B -:10B03000000000000000000015B1010017B1010080 -:10B0400019B1010019B1010049B3010019B10100A2 -:10B0500019B101000000000019B1010019B101008F -:10B0600019B1010019B1010009B3010019B10100C2 -:10B0700019B1010019B1010019B1010019B10100A4 -:10B0800019B1010021B2010019B1010019B101008B -:10B0900041B2010019B1010049B2010019B101002A -:10B0A00019B1010019B1010000000000000000000A -:10B0B0000000000000000000000000000000000090 -:10B0C0000348854600F06EF8004800478D2E0200C8 -:10B0D000605E0020401E00BF00BF00BF00BF00BF79 -:10B0E00000BF00BF00BF00BF00BF00BF00BFF1D165 -:10B0F000704700000321094802680A4302600848BB -:10B1000002680A4302600748804707480047FEE795 -:10B11000FEE7FEE7FEE7FEE7FEE70000240500404D -:10B120005405004069B20100C1B0010003460B4361 -:10B130009B0703D009E008C9121F08C0042AFAD2ED -:10B1400003E00B780370401C491C521EF9D2704773 -:10B15000D2B201E00270401C491EFBD270470022AF -:10B16000F6E710B513460A4604461946FFF7F0FF06 -:10B17000204610BD30B504460020034600E05B1CAD -:10B18000934203D2E05CCD5C401BF8D030BD03217C -:10B19000001D401E037812021A43491EF9D51046BD -:10B1A00070470000064C0125064E05E0E36807CC19 -:10B1B0002B430C3C98471034B442F7D3FFF784FF7D -:10B1C000144B0200344B020070B58C180578401CFB -:10B1D0006B075B0F01D10378401C2A1106D102785E -:10B1E000401C03E006780E70401C491C5B1EF9D120 -:10B1F0002B0705D40023521E0DD40B70491CFAE70F -:10B200000378401CCB1A921C03E01D780D70491C7A -:10B210005B1C521EF9D5A142D8D3002070BD00009E -:10B2200010B506490020086048608860C86003497E -:10B2300040390860486009F0FDF810BD4011014038 -:10B2400010B509F08DF810BD10B50648406800280B -:10B2500005D08047002801D000F0E4F810BD07F0C9 -:10B260006BFC10BD9844002010B507F0A7FC002827 -:10B2700005D01F491D484860C8131E4988611E48F3 -:10B28000018CC9B201290BD1828C120708D1028D21 -:10B290001206120F042A03D1828D1206120F0AD051 -:10B2A000012921D1818C09071ED1018D0906090FC1 -:10B2B0000A2904D007E0114A01219160F5E7828D47 -:10B2C0001206120F05D00D290ED1808D0006000F39 -:10B2D0000AD10B480168012904D00A4901600168BC -:10B2E0000129FCD1C021416110BD0000DFFF07C072 -:10B2F00000050040006C0040C00F00F00006004058 -:10B3000000EC06407593000010B50B484168012918 -:10B310000ED10A49496889030AD5002141600849CC -:10B320000120C8600749CA79002A02D007F00EFA46 -:10B3300010BD087210BD000040A1004000A30040F5 -:10B3400000A00040F443002010B509F005F910BD3D -:10B3500030B47446641E2578641CAB4200D21D468E -:10B36000635D5B00E31830BC184702E008C8121F99 -:10B3700008C1002AFAD170477047002001E001C1DE -:10B38000121F002AFBD17047202804DA01218140D6 -:10B390000348014201D0012070470020704700009F -:10B3A000FC06FFBC1CB50E480D4C008E2834C000B6 -:10B3B000207000206070A070204607F0B3FBE070A2 -:10B3C000042069460094888000221146684608F0EF -:10B3D0001DFD002802D0002000F024F81CBD000054 -:10B3E000F443002038B504460020694608706846DA -:10B3F00000F0DEF90848844208D0BFF34F8F0849B7 -:10B400000648C860BFF34F8F00BFFDE7684600786D -:10B4100000F0ECF938BD0000FECADDBA0400FA0500 -:10B4200000ED00E00EB50021029000916A46019106 -:10B430000148FFF7D7FF0EBD014000004268002120 -:10B44000117042685170426891704068C17008463E -:10B45000704708B56A4600F009F808BD4068807872 -:10B46000704710B5028900F02AF810BDF7B582B018 -:10B470000689817A076801914468002569460D7044 -:10B48000684600F095F9A078002816D02078361D7F -:10B490007043C6192046019906F0F2FC3088311D30 -:10B4A00082B2049802800398FFF740FE6846007855 -:10B4B00000F09CF9284605B0F0BD0425F6E7F7B585 -:10B4C00082B001680191857A078944680020694645 -:10B4D0000870684600F06CF9A078A8420AD1E078BC -:10B4E000002805D02946204606F0CAFC042602E0C2 -:10B4F000042615E0002661783F1D0846019A78432E -:10B500008018A278491C521CC9B2A270A94200D16D -:10B5100000216170049902C0049A0399FFF706FEA6 -:10B520006846007800F062F9304605B0F0BD0000D2 -:10B5300070B50F4B05241D785E78AE4215D01D788E -:10B540001C789E88B44201DA641C00E000241C7060 -:10B550005C881E696C43A4190460DB68E800C418A9 -:10B56000A4880C80185800241060204670BD00008C -:10B5700048430020F7B52B4C82B060880E468142CC -:10B580004ED800256846284F057000F011F9227842 -:10B590006078A188884201DA401C00E00020C0B237 -:10B5A000904204D16846007800F020F936E06578D2 -:10B5B0006078884201DA401C00E000206070684634 -:10B5C000007800F013F9BD4228D0E068EF0004993C -:10B5D000C151029900290CD0002E0AD06088324651 -:10B5E000454320692818FFF7A1FDE06838188680D8 -:10B5F00002E000213818818020786178814201D3EF -:10B60000081A03E0A288101A4018401CE18880B292 -:10B61000884200D9E080002005B0F0BD0420FBE79F -:10B620000920F9E748430020FFFF00003EB5094C20 -:10B6300004E068468188029A00989047A068002834 -:10B6400006D102AA01A96846FFF772FF0028F0D0D0 -:10B650003EBD00004843002030B5CB0008339DB20A -:10B6600093070024002B01D0072030BD054BDA6082 -:10B6700052191A615C701C7058809980DC8000201F -:10B6800030BD00004843002008B50020694608701E -:10B69000684600F08DF805498868421C01D0401CBE -:10B6A00088606846007800F0A1F808BD4843002093 -:10B6B000074801784078064A8842928801D3401AA8 -:10B6C00002E0511A0818401C101A80B2704700009E -:10B6D0004843002008B5002069460870684600F01D -:10B6E00067F805488168002901D0491E81606846D5 -:10B6F000007800F07BF808BD4843002010B507F043 -:10B7000079FD002010BD000070B588B015460446D4 -:10B710001E4620221A496846FFF708FDA0680690D9 -:10B720002079002801D0012100E000216846017540 -:10B7300006776079002800D00E2069464875E078C9 -:10B740000290A078039020780190607800900D48D6 -:10B75000002145608170207902280ED00A49684690 -:10B7600007F010FC002806D107F096FC05480121DF -:10B77000401C07F06BFC08B070BD0620FBE7000022 -:10B7800068480200404300200145020010B5074907 -:10B7900008700121054807F0D9FC112803D00028C2 -:10B7A00000D0032010BD042010BD00004043002045 -:10B7B00030B5EFF3108172B6094A54680123002CAA -:10B7C00004D00370002900D162B630BD5360054B30 -:10B7D0001D68054C254015601C6000220270F1E7D1 -:10B7E000AC44002080E100E0FC06FFBC08494A6848 -:10B7F000002A0CD000280AD1EFF3108072B60A6834 -:10B80000044B1A6000224A60002800D162B67047DB -:10B81000AC44002000E100E0F8B515460F460600F4 -:10B8200011D0002D0FD0002B0DD01C4608F05FFF6B -:10B83000002807D105480090231D2A463946304686 -:10B8400005F060F8F8BD0E20F8BD0000F5B8010065 -:10B85000F8B515460F4606000FD0002D0DD0002B71 -:10B860000BD01C4608F0B7FF002805D1631C2A4600 -:10B870003946304600F055F8F8BD0E20F8BDF8B551 -:10B880001D4617460E0014D0002D12D0002810D0EF -:10B8900004460078694608703146684608F0A8FFFB -:10B8A000002805D12B463A463146601C00F051F87D -:10B8B000F8BD0E20F8BDF8B515460F46060017D0A6 -:10B8C000002D15D0002B13D01C4608F084FF002853 -:10B8D0000DD1631C2A463946304608F07CFF00280B -:10B8E00005D1A31C2A463946304608F074FFF8BD3E -:10B8F0000E20F8BDF8B515460F4606000FD0002DF6 -:10B900000DD0002B0BD01C46FFF7D5FF002805D12A -:10B91000E31C2A4639463046FFF7CDFFF8BD0E201E -:10B92000F8BDF8B514460E46050010D0002C0ED018 -:10B93000002B0CD01F465B1C08F04DFF002805D1E2 -:10B940003B4622463146284608F045FFF8BD0E200A -:10B95000F8BDF8B51C4616460D0010D0002C0ED0D0 -:10B9600000280CD00746401C08F042FF002805D1F3 -:10B97000234632462946384608F03AFFF8BD0E20E5 -:10B98000F8BDF8B5144606000D461FD0002C1DD09A -:10B9900000200090631C6A46304608F01CFF002817 -:10B9A00013D123466A462946304608F014FF002882 -:10B9B0000BD1631D6A462946304608F00CFF00286B -:10B9C00003D10099A94200D00920F8BD0E20F8BD8E -:10B9D00017B581B0144600290ED0002C0CD00020E1 -:10B9E00000906B4601A8226808F0D1FE002801D122 -:10B9F0000099216004B010BD0E20FBE7F8B5154694 -:10BA00000F46060019D0002D17D0002B15D01C466C -:10BA1000FFF702FF00280FD1234608332A46394694 -:10BA2000304600F06DFE002806D123460C332A462E -:10BA30003946304603F005FCF8BD0E20F8BD000085 -:10BA40001CB50C4601210191002812D0002A10D00B -:10BA5000116800290DD008491346009101AA21461A -:10BA600004F050FF002803D10199A14200D0092021 -:10BA70001CBD0E201CBD0000FDB901001CB500233B -:10BA8000019301AB009313460A460146602007F07C -:10BA900041FC1CBD70B51C46002A1BD0002C19D0DF -:10BAA000002817D00588202D71D015DC2B00FFF75A -:10BAB0004FFC2032363E3A32323232323232323279 -:10BAC0003232326F6A424A4E56775A7B525E666213 -:10BAD000C67346320E2070BD392D7AD009DC303D58 -:10BAE0002B00FFF735FC09728B6569936E7F8F869B -:10BAF0001800532D70D008DC3A2D77D0502D6DD022 -:10BB0000512D6CD0522D06D193E0542D68D0552D77 -:10BB100067D0702D71D006200021216070BD2346B2 -:10BB200000F094F870BD234600F0ACF870BD2346D9 -:10BB300000F0F1F870BD234600F0D3FF70BD23463E -:10BB400000F0FEFF70BD234601F046FA70BD2346AB -:10BB500001F0F0F970BD234600F038FF70BD2346B8 -:10BB600001F060F970BD234600F002FF70BD23466E -:10BB700001F01DF870BD234601F08AF970BD23461F -:10BB800001F0AAFA70BD234601F0A1F870BD5AE099 -:10BB9000234601F03DF8F9E7234601F04EFAF5E7B8 -:10BBA000234601F0D2F8F1E7234601F0FBF8EDE778 -:10BBB000234602F033FCE9E7234602F07CFDE5E78B -:10BBC00007E0234602F0ABFCE0E7234602F007FE65 -:10BBD000DCE702F0C2FDD9E71CE007E023E025E046 -:10BBE0001EE01AE0234602F051FECFE702F0EDFE20 -:10BBF000CCE7234602F005FFC8E71DE0234602F02C -:10BC000089FEC3E7234602F0FBFCBFE7234602F0B0 -:10BC100090FBBBE703F030FBB8E703F00BFCB5E7A4 -:10BC200003F0D3FBB2E703F021FCAFE703F062FBC4 -:10BC3000ACE703F0E3FBA9E704F0B1F8A6E723467D -:10BC400000F03EFEA2E701F03FF99FE710B50028A3 -:10BC500008D0002A06D0002B04D01968052903D289 -:10BC6000092010BD0E2010BD01211170002151705E -:10BC700084889470240AD470007A107105201860AA -:10BC8000084610BDFEB51C461646050031D0002EF4 -:10BC90002FD0002C2DD0002000902768032069466B -:10BCA00088806B463A46314601A808F032FD0028EC -:10BCB0001ED16B463A463146281D08F02AFD002861 -:10BCC00016D128466B4631460830226808F090FDB0 -:10BCD00000280DD128466B4631461030226808F006 -:10BCE00018FD002804D121680098814203D1092061 -:10BCF000FEBD0E20FEBDE968002900D001213154AF -:10BD0000401C0090A88804F0E3FE0028F2D10098BF -:10BD100020600020FEBDFEB51C461646050026D05C -:10BD2000002E24D0002C22D0002000902768022072 -:10BD3000694688806B463A46314601A808F0E9FC1E -:10BD4000002813D16B463A463146281D08F0E1FC25 -:10BD500000280BD128466B4631460830226808F08F -:10BD600047FD002802D1009820600020FEBD0E2073 -:10BD7000FEBD10B51446024618462368C91A0729A5 -:10BD800001D2092010BDD15C01702168401C491C02 -:10BD9000216089180622FFF7C9F92068801D2060FC -:10BDA000002010BD10B51C460B4601462068121A33 -:10BDB000072A01D2092010BD0A781A5420680622E9 -:10BDC000401C2060C018491CFFF7B0F92068801D96 -:10BDD0002060002010BD002808D0002A06D00229CB -:10BDE0000CD30378712B03D0072070470E207047C7 -:10BDF0004078002800D11060022901D00920704746 -:10BE000000207047FFB581B01E4615460F0018D0C0 -:10BE1000002D16D013460A462C687120019907F0B0 -:10BE2000C9FC002804D101992868002902D000200B -:10BE300005B0F0BD002E04D0C11DA14203D90920D8 -:10BE4000F6E70E20F4E731783954441C38190622FD -:10BE5000711CFFF76BF9A41D2C60E8E77CB5064662 -:10BE600001201C460D460190002E1CD0002A1AD03D -:10BE7000002C18D02068002815D0134601AA30469F -:10BE800008F0A9FC00280DD108480090234601AA1B -:10BE90002946304604F036FD002803D10199A94215 -:10BEA00000D009207CBD0E207CBD000073BD0100C8 -:10BEB0001CB50023019301AB009313460A460146CB -:10BEC000702007F027FA1CBD38B5002823D0002ABF -:10BED00021D01C466B4608F07EFC00281AD16A4629 -:10BEE000217812784908D2074900D20F11432170F6 -:10BEF000FD2211406A4612789207D20F5200114378 -:10BF00002170FB2211406A4612785207D20F92002C -:10BF10001143217038BD0E2038BDFEB5089F099C25 -:10BF20000D4606001BD0002B19D0002C17D0012085 -:10BF300000930190134601AA304606F093FE0028B4 -:10BF40000CD13B4601AA29463046009406F08AFEF1 -:10BF5000002803D10198A84203D00920FEBD0E207D -:10BF6000FEBD0020FEBD13460A4610B501467220F4 -:10BF700007F020FC10BD0000FEB514460022054667 -:10BF80000E4610460192002D26D0002C24D02168A8 -:10BF9000002921D04B68002B1ED0C96800291BD076 -:10BFA0000B68002B18D08968002915D08700DF594D -:10BFB000002F11D0401C0828F8D300208300CB5854 -:10BFC000002B09D0401C0828F8D3022E10D3A85CFF -:10BFD000732803D00720FEBD0E20FEBD501C295C37 -:10BFE000901C0190012905D022600198B04244D0F4 -:10BFF0000920FEBD01AA31462846236808F0EBFB64 -:10C000000028F6D11E480090236801AA3146284630 -:10C010001B1D04F077FC0028EBD1236801AA3146F0 -:10C020002846083308F0D7FB0028E2D115480090D5 -:10C03000236801AA314628460C3304F063FC00282B -:10C04000D7D1236801AA31462846103308F04FFBA8 -:10C050000028CED1236801AA31462846123308F0C1 -:10C0600046FB0028C5D1236801AA3146284614336F -:10C07000FFF72AFF0028BCD1B7E70020FEBD000073 -:10C0800073BD0100A1DF010013460A4610B5014649 -:10C09000732007F08FFB10BD13460A4610B501460A -:10C0A000742007F087FB10BD002808D0002A06D0B6 -:10C0B0001368002B03D0022903D0092070470E20FB -:10C0C00070470178792901D007207047407800280F -:10C0D00000D1106000207047FFB581B01E461446A5 -:10C0E0000D0018D0002C16D013460A462768792078 -:10C0F000019907F05FFB002803D10198002802D0C6 -:10C10000002005B0F0BD002E05D02068811CB9428A -:10C1100003D90920F5E70E20F3E731882A181170BA -:10C12000090A5170801C2060EAE738B500230093AB -:10C13000002A05D0002803D0032903D0092038BDE8 -:10C140000E2038BD037801240094782B01D00720FD -:10C1500038BD13466A4608F0CAFA38BD13460A4687 -:10C1600010B50146782007F025FB10BDFEB5089EEE -:10C170001F460C4605001FD0002A1DD0002F1BD0E3 -:10C1800001200290601E02282AD3134602AA2846E4 -:10C1900008F076FA0298844222D03B4602AA214651 -:10C1A000284608F00DFB3878002807D0012807D072 -:10C1B000022807D00720FEBD0E20FEBD002102E0B0 -:10C1C000062100E0102100910191334602AA214688 -:10C1D000284604F08FFA0028EFD10299A142ECD052 -:10C1E0000920FEBD13460A4610B50146802007F01F -:10C1F000E1FA10BD7CB5064601201C460D460190B3 -:10C20000002E1CD0002A1AD0002C18D0206800283C -:10C2100015D0134601AA304608F069FA00280DD15E -:10C2200008480090234601AA2946304604F06AFBDC -:10C23000002803D10199A94200D009207CBD0E201D -:10C240007CBD0000D5DD010013460A4610B501464D -:10C250007E2007F0AFFA10BDF8B500271C460D464A -:10C260000646009700280DD0002A0BD0002C09D0DC -:10C270002068002806D0042D3CD33078752803D0E0 -:10C280000720F8BD0E20F8BD0120134600906A4635 -:10C29000304608F0F5F90098315C012903D00029F7 -:10C2A00022D00B20F8BD401C00900830A84221D8B5 -:10C2B0006A4629463046236808F0E2F923686A4650 -:10C2C000294630469B1C08F0DBF923686A4629465C -:10C2D00030461B1D08F0D4F923686A4629463046CB -:10C2E0009B1D08F0CDF902E0401C009027600098EB -:10C2F000A84201D00920F8BD0020F8BD13460A4627 -:10C3000010B50146752007F055FA10BDF8B507467F -:10C3100010680E46801C15461C46B0421AD8384696 -:10C3200008F0AEF92868801CB04213D8A31C2A4636 -:10C330003146384608F0A4F92868801CB04209D874 -:10C34000231D2A463146384608F09AF92868801C91 -:10C35000B04201D90920F8BDA31D2A46314638460E -:10C3600008F08EF90020F8BDF8B51D4616460F46B8 -:10C37000044608F0CEF9002815D12B46324639463E -:10C38000A01C08F0C6F900280DD12B4632463946CC -:10C39000201D08F0BEF9002805D12B46324639464B -:10C3A000A01D08F0B6F9F8BDFFB583B016460C46DF -:10C3B000070010D0002E0ED000250195002C22D0B1 -:10C3C00002AB01AA08F0FCF96846007A872804D07D -:10C3D000072007B0F0BD0E20FBE70198201A0228C5 -:10C3E00011D3334601AA2146384608F049F9009591 -:10C3F00001AA21463846069B04F084FA0028E8D1B9 -:10C400000199A142E5D00920E3E70000FFB583B020 -:10C410001C46150006460FD0002C0DD00146872083 -:10C42000276807F0C7F9002804D120680190002E82 -:10C4300004D0002007B0F0BD0E20FBE706480090B6 -:10C4400001AB3A462946049804F08BFA0028F1D152 -:10C4500001992160EEE70000B1C4010038B51C4627 -:10C46000136800258B4201D1092038BD6B4608F0C6 -:10C47000A7F9694620780978000909070001090F22 -:10C4800008432070694609780007000F090909016F -:10C4900008432070284638BD38B5047820072409A1 -:10C4A000000F240104436846047008F0A1F938BD68 -:10C4B000F8B51D4616460F460446FFF7EDFF002867 -:10C4C00005D12B4632463946601C08F091F9F8BD7B -:10C4D00013460A4610B501468D2007F06BF910BDD2 -:10C4E000FEB507460120089C1D460E460190002F10 -:10C4F00030D0002A2ED0106800282BD0002D29D053 -:10C500002868002826D0002C24D02068002821D0BC -:10C5100011481346009001AA384604F0F3F90028A8 -:10C5200017D10E4800902B4601AA3146384604F038 -:10C53000E9F900280DD10A480090234601AA3146A6 -:10C54000384604F0DFF9002803D10199B14200D048 -:10C550000920FEBD0E20FEBD73BD010035D90100CE -:10C560000DC3010013460A4610B501468C2007F0A2 -:10C5700021F910BDF8B5002417460D460646009473 -:10C58000002B0CD01968002909D00120012D11D3EE -:10C5900000907078012804D000281BD101E00E2003 -:10C5A000F8BD02220092012806D01C600098411CB0 -:10C5B000A9420AD90920F8BD0B466A4629463046E9 -:10C5C00008F095F80028F6D1F0E7305C012804D097 -:10C5D000002801D00720F8BD3C600020F8BDFFB561 -:10C5E00083B00C9C1D00064610D0002C0ED00146D6 -:10C5F00023462A467D20276807F0DCF82168019150 -:10C60000002801D1002E03D007B0F0BD0E20FBE7BB -:10C6100001A800903B462A460599049806F00AFBBB -:10C6200001992160F0E70000FEB5089D1E460C460A -:10C63000070021D0002A1FD0002E1DD0002D1BD0B6 -:10C6400001200190601E042814D30C48134600906A -:10C6500001AA384604F056F900280CD1334601AA45 -:10C6600021463846009506F0CDFA002803D10199FD -:10C67000A14200D00920FEBD0E20FEBD5DC4010018 -:10C6800013460A4610B501467C2007F093F810BD0A -:10C69000FEB51D46144607000E4612D0002C10D0E1 -:10C6A000002D0ED00020009001AB6A46384608F0FD -:10C6B00092F8002804D168460079762803D0072034 -:10C6C000FEBD0E20FEBD23466A463146384608F0C0 -:10C6D0000EF80028F6D12B466A463146384608F057 -:10C6E0007AF80028EED10099B142EBD00920FEBDC6 -:10C6F00013460A4610B50146762007F05BF810BDD8 -:10C70000F8B515460F46060015D0002D13D01C466F -:10C7100008F061F800280DD1631C2A4639463046DE -:10C7200008F059F8002805D1A31C2A46394630469E -:10C7300008F051F8F8BD0E20F8BDF8B506461068AF -:10C740000F46091A14461D46102909D381191022D3 -:10C750001846FEF7EBFC216810312160B94201D187 -:10C760000920F8BD287C715C4008C9074000C90F4A -:10C7700008432874FD2108402168715C8907C90FAE -:10C7800049000843287421688007715C800F89087C -:10C790008900084328742068401C20600020F8BDF0 -:10C7A000F8B5054618680E460027111A1C461129CF -:10C7B00001D20920F8BD801910222946FEF7B6FCE7 -:10C7C0002168103121602A7C9307D007DB0FC00F4E -:10C7D0005B00920818439200104370542068401C7C -:10C7E00020603846F8BDF8B515460F4606000ED055 -:10C7F000002D0CD01C46FFF7A0FF002806D12346D1 -:10C8000012332A463946304600F046FEF8BD0E2067 -:10C81000F8BDF8B51D4617460E000ED0002D0CD001 -:10C820000446FFF7BDFF002806D120462B463A46B6 -:10C830003146123000F04CFEF8BD0E20F8BD00006D -:10C84000FEB5089D1C460E46070012D0002A10D0E7 -:10C85000002D0ED0002C0CD02868002809D02068AC -:10C86000002806D001200190701E022803D2092062 -:10C87000FEBD0E20FEBD134601AA384607F000FF9C -:10C8800009480090234601AA3146384604F03AF898 -:10C890000028EFD1054800902B4601AA31463846C2 -:10C8A00004F030F8FEBD000099D401003BC7010040 -:10C8B00013460A4610B50146852006F07BFF10BDE1 -:10C8C000F0B585B01D46174604004FD0002F4DD05F -:10C8D000002D4BD0002001902E681D2069468881D4 -:10C8E00001AB3246394603A807F013FF00283BD1BD -:10C8F00001AB32463946201D07F00BFF002833D12B -:10C90000204601AB324639460830FFF74BFA002883 -:10C910002AD1204601AB324639460F3007F068FF76 -:10C92000002821D1207C01AB4207C107920FC90F1B -:10C9300052001143C008C0000143684601723246EC -:10C94000394602A807F054FF00280DD101A8009035 -:10C95000207C3346C10820463A46113007F055FF87 -:10C96000002801D10199296005B0F0BD0E20FBE738 -:10C97000FEB51C461646050025D0002E23D0002CFF -:10C9800021D00020009027681720694688806B46D8 -:10C990003A46314601A807F0BCFE002812D16B468A -:10C9A0003A463146281D07F0B4FE00280AD1284631 -:10C9B0006B463A463146083007F01AFF002801D18D -:10C9C00000992160FEBD0E20FEBD0000FEB50446AC -:10C9D00000200090192069461D4616468880002CCC -:10C9E00027D0002E25D0002D23D02F680B463A46A5 -:10C9F000314601A807F08DFE002819D16B463A4652 -:10CA00003146201D07F085FE002811D120466B46D7 -:10CA10003A463146083000F025F8002808D1A088B1 -:10CA200002A904F021F8002805D00020009929600F -:10CA3000FEBD0E20FEBDFF2102982D31484308495E -:10CA40006B4640183A463146001D01F01DF900289A -:10CA5000F0D1A08803F0F0FF0028E7D0FEBD000071 -:10CA6000944A0020F8B5044618681D46101A164668 -:10CA70000F46062801D20920F8BD204607F0B8FE6F -:10CA80000028F9D160782B4681074007C00F890F35 -:10CA900080000143684601703246394607F0A8FE1F -:10CAA0000028E9D12B4632463946A01C01F002F994 -:10CAB0000028E1D12B4632463946E01C01F0FAF855 -:10CAC0000028D9D12B4632463946201D01F035F8D1 -:10CAD0000028D1D12B4632463946601D01F02DF891 -:10CAE000F8BDF8B51D461646040008D0002E06D045 -:10CAF000002D04D02088122803D00720F8BD0E2076 -:10CB0000F8BD002000902F686B463A46314620461B -:10CB100007F0FFFD0028F3D16B463A463146201D51 -:10CB200007F0F7FD0028EBD120466B463A46314628 -:10CB3000083000F038F80028E2D100992960F8BDEB -:10CB4000F8B51D461646040008D0002E06D0002D6C -:10CB500004D020881F2803D00720F8BD0E20F8BD80 -:10CB6000002000902F686B463A463146204607F079 -:10CB7000D0FD0028F3D16B463A463146201D07F020 -:10CB8000C8FD0028EBD120466B463A4631460830B6 -:10CB900000F005F80028E2D100992960F8BD10B531 -:10CBA000FFF7E2FB10BD10B5FFF7DEFB10BDFEB5D1 -:10CBB0001C461646050025D0002E23D0002C21D07F -:10CBC0000020009027681A20694688806B463A4604 -:10CBD000314601A807F09DFD002812D16B463A4668 -:10CBE0003146281D07F095FD00280AD128466B46DE -:10CBF0003A463146083000F007F8002801D1009984 -:10CC00002160FEBD0E20FEBD10B5FFF751FC10BD2A -:10CC1000FEB51C461646050025D0002E23D0002C5C -:10CC200021D00020009027681020694688806B463C -:10CC30003A46314601A807F06CFD002812D16B4638 -:10CC40003A463146281D07F064FD00280AD12846DF -:10CC50006B463A463146083000F007F8002801D10B -:10CC600000992160FEBD0E20FEBDF8B50F460446BA -:10CC70000020694608701D46164639462046FFF7D3 -:10CC800091F8002822D12B4632463946E01DFFF7A5 -:10CC900089F800281AD120462B46324639460E30F4 -:10CCA00007F0A6FD002811D1E07B694608702B46ED -:10CCB00032463946684607F09BFD002806D12046DB -:10CCC0002B46324639461030FFF74EFBF8BDFEB515 -:10CCD0001D46164604002BD0002E29D0002D27D04B -:10CCE000002000902F681120694688806B463A46E4 -:10CCF000314601A807F00DFD00281AD16B463A46CF -:10CD00003146201D07F005FD002812D120466B4654 -:10CD10003A463146083000F014F8002809D100984E -:10CD20002860A08802A903F09FFE002802D006E038 -:10CD30000E20FEBDA08803F07FFE0028F9D1002060 -:10CD4000FEBD10B507F054FD10BDFEB51C461646DD -:10CD5000050025D0002E23D0002C21D000200090EB -:10CD600027681620694688806B463A46314601A8F6 -:10CD700007F0CFFC002812D16B463A463146281DF9 -:10CD800007F0C7FC00280AD128466B463A463146D0 -:10CD9000083007F02DFD002801D100992160FEBD6B -:10CDA0000E20FEBDF0B585B01D461646040034D0F9 -:10CDB000002E32D0002D30D0002001902F68182096 -:10CDC0006946088101AB3A46314602A807F0A1FC4A -:10CDD000002820D101AB3A463146201D07F099FCCE -:10CDE000002818D10E48009001AB3A463146A068A1 -:10CDF00003F0B7FD00280ED1207B6946C007C00FA5 -:10CE0000087301AB3A46314603A807F0F1FC00284D -:10CE100001D10199296005B0F0BD0E20FBE70000AB -:10CE200073D401007CB5054600201E4614460090D0 -:10CE3000002D08D0002C06D0002E04D031680B291C -:10CE400003D209207CBD0E207CBD152121706070AD -:10CE5000A988A170090AE170042000902946201DCC -:10CE600006220831FEF762F900986946801D00909D -:10CE7000A87B6B46C007C00F0871214601A8326825 -:10CE800007F0B6FC0028DFD10098306000207CBDA0 -:10CE900010B5002808D0002A06D0002B04D019684D -:10CEA000052903D2092010BD0E2010BD1C211170D0 -:10CEB0000021517084889470240AD470007A107113 -:10CEC00005201860084610BDFEB51D461646040034 -:10CED0002ED0002E2CD0002D2AD0002000902F68BC -:10CEE0002020694688806B463A46314601A807F003 -:10CEF00010FC00281BD16B463A463146201D07F036 -:10CF000008FC002813D120466B463A4631460930CA -:10CF1000FEF748FF00280AD120466B463A463146C4 -:10CF2000083007F065FC002801D100992960FEBD9A -:10CF30000E20FEBDFEB51C461646050025D0002E6F -:10CF400023D0002C21D000200090276814206946AF -:10CF500088806B463A46314601A807F0DAFB002884 -:10CF600012D16B463A463146281D07F0D2FB002805 -:10CF70000AD128466B463A463146083000F007F899 -:10CF8000002801D100992160FEBD0E20FEBDF8B53C -:10CF90001D4616460F460446FEF704FF00281AD128 -:10CFA00020462B4632463946083000F091FA0028D8 -:10CFB00011D1A07C2B468207C107D20FC90F5200A6 -:10CFC00040071143C00F800001436846017032469C -:10CFD000394607F00DFCF8BDFEB51C4616460500A7 -:10CFE00025D0002E23D0002C21D0002000902768CF -:10CFF0001320694688806B463A46314601A807F0FF -:10D0000088FB002812D16B463A463146281D07F0AE -:10D0100080FB00280AD128466B463A463146083044 -:10D0200000F007F8002801D100992160FEBD0E2014 -:10D03000FEBD10B500F02CFF10BDFEB51C46164617 -:10D04000050025D0002E23D0002C21D000200090F8 -:10D0500027681E20694688806B463A46314601A8FB -:10D0600007F057FB002812D16B463A463146281D7F -:10D0700007F04FFB00280AD128466B463A46314656 -:10D08000083000F007F8002801D100992160FEBDAA -:10D090000E20FEBD70B5002907D0002B05D01C68FE -:10D0A0000025944203D1092070BD0E2070BD027886 -:10D0B0009607D007F60FC00F760030435607F60FDD -:10D0C0001207B600D20F3043D2001043085518683B -:10D0D000401C1860284670BD10B5002808D0002AF2 -:10D0E00006D0002B04D01968052903D2092010BDF1 -:10D0F0000E2010BD1B211170002151708488947086 -:10D10000240AD470007A107105201860084610BDFA -:10D11000F8B515460F4606000ED0002D0CD01C4663 -:10D1200000F022F8002806D1234610332A4639465B -:10D130003046FEF71EFEF8BD0E20F8BDF8B51D46C0 -:10D1400017460E000ED0002D0CD0044600F01FF83C -:10D15000002806D120462B463A4631461030FEF7CD -:10D1600021FEF8BD0E20F8BD10B514460246184643 -:10D170002368C91A102901D2092010BD991810225C -:10D18000FDF7D4FF206810302060002010BD10B5DE -:10D190001C460B4601462068121A102A01D20920AB -:10D1A00010BDC0181022FDF7C1FF206810302060AC -:10D1B000002010BDF8B5064601201C460D46009023 -:10D1C000002E17D0002A15D0002C13D013466A4623 -:10D1D000304607F08CFA00280BD123466A462946D0 -:10D1E000304607F0F8FA002803D10099A94200D090 -:10D1F0000920F8BD0E20F8BD13460A4610B50146B9 -:10D20000822006F0D7FA10BD7CB5064601201C46E8 -:10D210000D460190002E19D0002A17D0002C15D0F1 -:10D22000134601AA304607F062FA00280DD10848DB -:10D230000090234601AA2946304603F063FB0028EC -:10D2400003D10199A94200D009207CBD0E207CBDEC -:10D2500065D2010013460A4610B50146812006F04A -:10D26000A9FA10BD10B5144602462068091A2029F3 -:10D2700001D2092010BD811820221846FDF756FF63 -:10D28000206820302060002010BD0000FEB5074659 -:10D290000120089C1D460E460190002F24D0002A34 -:10D2A00022D0002C20D0002D1ED0134601AA3846D3 -:10D2B00007F01DFA002816D10C4800902B4601AA51 -:10D2C0003146384603F01EFB00280CD1009023465F -:10D2D00001AA3146384603F015FB002803D1019915 -:10D2E000B14200D00920FEBD0E20FEBD4DD401008C -:10D2F000FFB583B01C46150006460FD0002C0DD09C -:10D3000001468320276806F055FA002804D12068DA -:10D310000190002E04D0002007B0F0BD0E20FBE7E6 -:10D320000648009001AB3A462946049803F019FBE1 -:10D330000028F1D101992160EEE700000DD4010031 -:10D34000FFB5064683B001200C9C1D460190002EBF -:10D3500027D0002A25D0002D23D0002C21D0134621 -:10D3600001AA3046049907F0C2F9002817D10E4FE0 -:10D370002B4601AA00973046049903F0C3FA00280F -:10D380000DD1234601AA00973046049903F0BAFA5A -:10D39000002804D1019A04998A4200D0092007B0DC -:10D3A000F0BD0E20FBE70000BDD3010013460A4686 -:10D3B00010B50146842006F0FDF910BDFFB583B01D -:10D3C0001646070020D0002E1ED01C460499FEF7FA -:10D3D000D0FC002816D1E01D10250290009502AB6C -:10D3E000324601953846049903F084F9002809D1A2 -:10D3F0001734009502AB32460195029438460499E1 -:10D4000003F078F907B0F0BD0E20FBE7F8B51D4634 -:10D4100017460E0018D0002D16D00446FEF7C2FCA9 -:10D42000002810D13B4632461021E01D009503F044 -:10D4300096F9002807D120463B4632461021173086 -:10D44000009503F08CF9F8BD0E20F8BD10B5144618 -:10D4500002462068091A402901D2092010BD81180E -:10D4600040221846FDF762FE206840302060002010 -:10D4700010BD10B51C461B68D21A402A01D20920E3 -:10D4800010BD5B18014640221846FDF74FFE20688C -:10D4900040302060002010BDFFB581B015460F461A -:10D4A0001C46019807F023F9060004D12868391AB0 -:10D4B000082902D2092005B0F0BD019908224118BF -:10D4C000A01CFDF733FE2868083028603046F2E7DC -:10D4D000FFB581B01D4616460446029907F019F9BA -:10D4E00007462868311A082902D2092005B0F0BD84 -:10D4F000029908224018A11CFDF718FE2868083080 -:10D5000028603846F2E7FFB581B0144607000FD017 -:10D51000002C0DD01D46029907F0E9F8060005D150 -:10D5200020680299091A052904D2092005B0F0BD26 -:10D530000E20FBE7C1190522A81CFDF7F7FD2068A6 -:10D54000401D20603046F1E7FFB581B01C460F005A -:10D550000FD0002C0DD00546039A07F0DAF806002C -:10D5600005D120680399091A052904D2092005B0BC -:10D57000F0BD0E20FBE7C0190522A91CFDF7D6FD62 -:10D580002068401D20603046F1E738B5002810D0F3 -:10D59000002A0ED01C4600236D462B706B4607F008 -:10D5A0001AF9002804D169460978C907C90F217002 -:10D5B00038BD0E2038BD38B500290CD0002B0AD05C -:10D5C00000256C4625700078C007C00F20706846A3 -:10D5D00007F00EF938BD0E2038BD0000F8B515462D -:10D5E0000F46060017D0002D15D01C4607F07FF817 -:10D5F00000280FD1A31C2A463946304607F077F899 -:10D60000002807D105480090231D2A463946304698 -:10D6100003F078F9F8BD0E20F8BD0000EF460200D7 -:10D62000F8B51D4617460E0017D0002D15D004463C -:10D6300007F06FF800280FD12B463A463146A01C60 -:10D6400007F067F8002807D1054800902B463A46B6 -:10D650003146606803F085F9F8BD0E20F8BD000082 -:10D66000134702001CB5002807D0002A05D0062465 -:10D670000094019403F03EF81CBD0E201CBD38B58B -:10D6800000290AD0002B08D00093134606240A462E -:10D690000068214603F063F838BD0E2038BD000055 -:10D6A000F8B515460F46060010D0002D0ED00848DC -:10D6B00000901C46304603F025F9002805D1231DB3 -:10D6C0002A463946304607F012F8F8BD0E20F8BD5C -:10D6D00069D10100F8B51D4617460E0010D0002D87 -:10D6E0000ED0044607480090206803F03AF900285D -:10D6F00005D12B463A463146201D07F00AF8F8BD01 -:10D700000E20F8BD8FD1010038B500280DD0002AB9 -:10D710000BD01C466B4607F05EF8002804D1694622 -:10D720000978C907C90F217038BD0E2038BD38B53A -:10D7300000290AD0002B08D000786C46C007C00F23 -:10D740002070684607F054F838BD0E2038BD002818 -:10D750000BD0002A09D01368002B06D002290CD365 -:10D7600003787B2B03D0072070470E20704740784A -:10D77000002800D11060022901D009207047002044 -:10D780007047F8B51D46074616460C0019D0002E06 -:10D7900017D0306813460A46009039467B2006F0C1 -:10D7A00009F8002802D1002F01D00020F8BD002D7B -:10D7B00007D03768009938460830884203D90920D5 -:10D7C000F8BD0E20F8BDE119288806F068FFC719DA -:10D7D000E119688806F063FFC719E119A88806F007 -:10D7E0005EFFC719E119E88806F059FFC0193060DB -:10D7F000DBE7F8B50546002014460E460090002DE4 -:10D8000037D0002C35D0022E31D329787A2901D097 -:10D810000720F8BD697802220092002903D001296F -:10D8200003D00B20F8BD20601EE00A2E1FD3236812 -:10D83000002B1ED06A463146284606F021FF236899 -:10D840006A46314628469B1C06F01AFF23686A4642 -:10D85000314628461B1D06F013FF23686A463146F1 -:10D8600028469B1D06F00CFF0098B04203D009200B -:10D87000F8BD0E20F8BD0020F8BD13460A4610B5CD -:10D8800001467A2005F096FF10BDF8B5069C1D46AE -:10D890000E46070023D0002A21D0002D1FD0002CD7 -:10D8A0001DD00120134600906A46384606F01FFF3F -:10D8B000002813D12B466A463146384606F08BFFC6 -:10D8C00000280BD123466A463146384606F083FFCE -:10D8D000002803D10099B14200D00920F8BD0E20E4 -:10D8E000F8BD13460A4610B50146882005F062FFD0 -:10D8F00010BD38B50C4600280FD0002A0DD00121EC -:10D90000134600916A46214606F0F1FE002803D135 -:10D910000098A04203D0092038BD0E2038BD002059 -:10D9200038BD13460A4610B50146892005F042FF6E -:10D9300010BD0000F8B515460F46060007D0002DB3 -:10D9400005D029681C46B94203D10920F8BD0E2034 -:10D95000F8BD2078715C4008C9074000C90F084332 -:10D960002070FD2108402968231D715C8907C90FBB -:10D9700049000843207028683946401C2860104838 -:10D980000090304602F0BEFF0028E1D12346083364 -:10D990002A463946304606F0AAFE0028D8D123464A -:10D9A0000A332A463946304606F0A1FE0028CFD178 -:10D9B00023460C332A463946304606F098FEF8BD19 -:10D9C000A1DF01001CB50C4601210191002812D0F5 -:10D9D000002A10D0116800290DD008491346009183 -:10D9E00001AA214602F08EFF002803D10199A1422D -:10D9F00000D009201CBD0E201CBD000035D901003F -:10DA000013460A4610B501468A2005F0D3FE10BD24 -:10DA100013460A4610B501468B2005F0CBFE10BD1B -:10DA2000FFB583B003980C9F0D9E1D460C46002841 -:10DA30003ED0002A3CD0002D3AD0002F38D0002E06 -:10DA400036D02868002833D03868002830D03068B5 -:10DA500000282DD001200190601E022825D31346F6 -:10DA600001AA039806F00CFE124800902B4601AA6A -:10DA70002146039802F046FF002817D10E48009077 -:10DA80003B4601AA2146039802F03CFF00280DD135 -:10DA90000A480090334601AA2146039802F032FF5B -:10DAA000002803D10199A14200D0092007B0F0BDA0 -:10DAB0000E20FBE73BC7010069D1010015DF010023 -:10DAC00013460A4610B50146862005F073FE10BDC8 -:10DAD00030B5002807D0002A05D0156800248D42F3 -:10DAE00003D1092030BD0E2030BD1978455D4908AD -:10DAF000ED074900ED0F29431970FD2529401568F0 -:10DB0000455DAD07ED0F6D0029431970FB252940D8 -:10DB10001568455D6D07ED0FAD0029431970F725B8 -:10DB200029401568405D0007C00FC000014319700F -:10DB30001068401C1060204630BD70B5002907D029 -:10DB4000002B05D01D680024954203D1092070BD2B -:10DB50000E2070BD0278D207D20F4A5506781D6894 -:10DB6000B607F60F760032434A5506781D687607E9 -:10DB7000F60FB60032434A5500781D680007C00F03 -:10DB8000C00002434A551868401C1860204670BD0A -:10DB9000F8B507461448009015460E461C46384610 -:10DBA00002F0B0FE00281DD110480090231D2A4627 -:10DBB0003146384602F0A6FE002813D10C48234611 -:10DBC000009008332A463146384602F09BFE002872 -:10DBD00008D10848234600900C332A46314638467F -:10DBE00002F090FEF8BD0000E7C7010011D101006E -:10DBF00015DF01004DD40100F8B50446134800902C -:10DC00001D4616460F46206802F0ABFE00281BD1C9 -:10DC10000F4800902B4632463946606802F0A1FE5C -:10DC2000002811D10B4800902B4632463946A06897 -:10DC300002F097FE002807D1074800902B46324695 -:10DC40003946E06802F08DFEF8BD000013C80100FF -:10DC50003DD101003BDF010073D40100F8B515464A -:10DC60000F4606000ED0002D0CD01C46FFF790FF8B -:10DC7000002806D1234610332A4639463046FFF79E -:10DC800087FFF8BD0E20F8BDF8B51D4617460E00FB -:10DC90000ED0002D0CD00446FFF7AEFF002806D1B1 -:10DCA00020462B463A4631461030FFF7A5FFF8BD17 -:10DCB0000E20F8BD30B51C68944201D1092030BD5A -:10DCC00000788507C207ED0FD20F6D002A43450784 -:10DCD000ED0F0007AD00C00F2A43C00002430A55F4 -:10DCE0001868401C1860002030BD0000FFB583B0EC -:10DCF000074601200C9D0D9C1E460190002F38D038 -:10DD0000002A36D0002E34D0002D32D028680028CA -:10DD10002FD0002C2DD0206800282AD0134601AA2D -:10DD20003846049906F0E3FC002820D1334601AAC6 -:10DD30003846049906F04FFD002818D10E4800908F -:10DD40002B4601AA3846049902F0DCFD00280ED1CA -:10DD50000A480090234601AA3846049902F0D2FDF1 -:10DD6000002804D1019A04998A4200D0092007B002 -:10DD7000F0BD0E20FBE70000D5DD01005DDC0100F9 -:10DD8000FFB5064683B0002001901D461446134699 -:10DD9000176831467F20049A05F00CFD002801D158 -:10DDA000002E01D007B0F0BD002D0ED020680190EC -:10DDB0000748009001AB3A462846049902F0D1FD8D -:10DDC0000028EFD101992160ECE70E20EAE700007E -:10DDD00089DC0100F8B51C4615460E4607466B4621 -:10DDE00006F0F9FC002852D16946207809784008ED -:10DDF000C9074000C90F08432070FD21084069464B -:10DE00000978631C8907C90F490008432070FB216A -:10DE10000840694609782A464907C90F890008431E -:10DE20002070F7210840694609780907C90FC90021 -:10DE3000084320708F210840694609784906490F38 -:10DE4000090108432070694609784006C909400E57 -:10DE5000C901084320703146384606F0BCFC002852 -:10DE600015D1A31C2A463146384606F0B4FC0028DA -:10DE70000DD1E31C2A4631463846FFF729FE00281B -:10DE800005D1231D2A4631463846FFF721FEF8BD4D -:10DE9000F8B50446007816460F468207C107D20F30 -:10DEA000C90F520011434207D20F920011430207DB -:10DEB000D20FD20011434206520F12011143C00982 -:10DEC000C0010143684601701D463246394606F0DE -:10DED0008FFC00281DD12B4632463946601C06F0C7 -:10DEE00087FC002815D12B4632463946A01C06F087 -:10DEF0007FFC00280DD12B4632463946E01CFFF747 -:10DF00001CFE002805D12B4632463946201DFFF75E -:10DF100014FEF8BD10B5144602462068091A1029EF -:10DF200001D2092010BD811810221846FDF7FEF815 -:10DF3000206810302060002010BD10B51C461B6802 -:10DF4000D21A102A01D2092010BD5B1801461022F6 -:10DF50001846FDF7EBF8206810302060002010BD57 -:10DF600038B50C4600280FD0002A0DD001211346E9 -:10DF700000916A46214606F02EFC002803D1009845 -:10DF8000A04203D0092038BD0E2038BD002038BD86 -:10DF900013460A4610B50146772005F00BFC10BD6C -:10DFA000FFB581B00198002816D00398002813D03F -:10DFB0001C46024600251B1D0299019806F00BFC29 -:10DFC0002079082820D8002601AF009607CF2346E5 -:10DFD00002F098FC194F0BE00E2005B0F0BD009741 -:10DFE0002068A900431801A807C802F08BFC6D1C2B -:10DFF0002079A842F3D801AD07CD23460C3306F0B3 -:10E00000EAFB207B082801D90920E6E701AD00964C -:10E0100007CD2346083302F075FC0025084E08E0C2 -:10E020000096A068A900431801AF07CF02F06AFC70 -:10E030006D1C217BA942F3D8CFE7000073BD01001E -:10E0400069D10100FEB51C46154607000E4615D0E5 -:10E05000002D13D0002C11D0206800280ED00020F5 -:10E06000019002AB01AA384606F0B5FB002804D1A6 -:10E070006846007A942803D00720FEBD0E20FEBD1E -:10E080002B4601AA3146384606F031FB0028F6D16E -:10E0900007480090234601AA3146384602F032FC78 -:10E0A0000028ECD10199B142E9D00920FEBD000061 -:10E0B00091EA010013460A4610B50146942005F086 -:10E0C00079FB10BDF8B51D4617460E4600280FD047 -:10E0D000002E0DD0002D0BD0044606F01AFB0028B0 -:10E0E00005D12B463A463146A01C02F041F9F8BD55 -:10E0F0000E20F8BDF8B51D4617460E4600280FD075 -:10E10000002E0DD0002D0BD0044606F002FB002897 -:10E1100005D12B463A463146A01C02F039FAF8BD2B -:10E120000E20F8BDFEB5089D1C460E46070014D013 -:10E13000002A12D0002C10D0206800280DD0002D0D -:10E140000BD02868002808D000200190032E24D38B -:10E150003878952803D00B20FEBD0E20FEBD01208F -:10E160001346019001AA384606F08AFA0C4800903E -:10E17000234601AA3146384602F0C4FB0028EDD1FF -:10E18000084800902B4601AA3146384602F0BAFBF7 -:10E190000028E3D10199B142E0D00920FEBD000082 -:10E1A0006505020091EA010013460A4610B50146D2 -:10E1B000952005F0FFFA10BDFEB5089E1D460C46E1 -:10E1C000070020D0002A1ED0002D1CD0286800286F -:10E1D00019D0002E17D001200190601E052810D301 -:10E1E000134601AA384606F04BFA2B4601AA2146EF -:10E1F0003846009603F0E0FD002803D10199A142C2 -:10E2000000D00920FEBD0E20FEBD1CB500230193E9 -:10E2100001AB009313460A460146972005F07AF8B1 -:10E220001CBDF8B5064601201C460D460090002E88 -:10E2300017D0002A15D0002C13D02068002810D049 -:10E24000042D26D313466A46304606F019FA009A82 -:10E25000B05C521C0092002805D0012806D00B208B -:10E26000F8BD0E20F8BD002020600FE0121DAA426C -:10E270000FD86A4629463046236806F001FA23681B -:10E280006A46294630469B1C06F0FAF90098A842D7 -:10E2900001D00920F8BD0020F8BD13460A4610B58C -:10E2A0000146922005F086FA10BDF8B50646012019 -:10E2B0001C460D460090002E17D0002A15D0002CC9 -:10E2C00013D02068002810D0042D26D313466A46A8 -:10E2D000304606F0D5F9009AB05C521C0092002836 -:10E2E00005D0012806D00B20F8BD0E20F8BD002077 -:10E2F00020600FE0121DAA420FD86A462946304618 -:10E30000236806F0BDF923686A46294630469B1CFF -:10E3100006F0B6F90098A84201D00920F8BD002007 -:10E32000F8BD13460A4610B50146932005F042FA9F -:10E3300010BDFEB5044600200090342069461D46FD -:10E3400016468880002C31D0002E2FD0002D2DD0E5 -:10E350002F680B463A46314601A806F0DAF9002844 -:10E3600023D16B463A463146201D06F0D2F90028EB -:10E370001BD16B463A463146A01D06F0CAF900286B -:10E3800013D120466B463A463146083006F0C1F9B3 -:10E3900000280AD120466B463A4631460C3000F040 -:10E3A00007F8002801D100992960FEBD0E20FEBDAE -:10E3B000FFB581B01F46002818D00299002915D05A -:10E3C000002F13D00446039A06F0A3F900280ED1BB -:10E3D0003B46A01C039A029906F00AFA002806D1CF -:10E3E000A178012905D00B4E00250FE00E2005B0C5 -:10E3F000F0BD094EF8E71220684300193B46001DA6 -:10E40000039A0299B0470028F1D16D1C2188A942D6 -:10E41000F1D8ECE7C5E00100F5E00100FFB587B0F9 -:10E42000144605002ED0002C2CD00A98002829D0A4 -:10E4300000680A2823D31146322006F035F9064633 -:10E44000A119A88806F030F98619A119E88806F004 -:10E450002BF98619A119288906F026F98619A11920 -:10E46000A88906F021F980190090A8890290C100BE -:10E470004118009809180A980068814204D90920B7 -:10E480000BB0F0BD0E20FBE7002640E021180A206B -:10E4900070434719F88906F007F900994018397C4C -:10E4A0002154B97C401C8B07CA07DB0FD20F5B00DD -:10E4B0001A434B07DB0F9B001A430B07DB0FDB00F4 -:10E4C0001A43CB06DB0F1B011A438B06DB0F4906F1 -:10E4D0005B01C90F1A4389010A432254F97C401C8D -:10E4E000C907C90F2154401C21180090B88A06F0B2 -:10E4F000DBF801460098081821180090F88A06F009 -:10E50000D3F8014600980818761CB6B2009002981D -:10E5100086420098BAD30A9908600020B0E7F8B59F -:10E520001D461646040033D0002E31D0002D2FD0CA -:10E53000002000902F686B463A463146204606F090 -:10E54000E8F8002823D16B463A463146201D06F0F4 -:10E55000E0F800281BD16B463A463146A01D06F074 -:10E56000D8F8002813D120466B463A463146083089 -:10E5700006F0CFF800280AD120466B463A463146CD -:10E580000C3000F007F8002801D100992960F8BD8F -:10E590000E20F8BDFFB581B002AD0ECD044606F0E9 -:10E5A000B8F8002818D102AD0ECDA01C06F0B1F8C5 -:10E5B000060011D1251D00271DE002AE0ECE284613 -:10E5C00006F0A7F8060007D104980399006862884E -:10E5D000091A8A4202D9092005B0F0BD029B696878 -:10E5E000C018FCF7A3FD049861880068083541183D -:10E5F00004987F1C01602088B842DED83046EBE7E3 -:10E60000FEB51D461646040036D0002E34D0002D2F -:10E6100032D0002000902F683720694688806B46F2 -:10E620003A46314601A806F074F8002823D16B461B -:10E630003A463146201D06F06CF800281BD16B4687 -:10E640003A463146A01D06F064F8002813D1204652 -:10E650006B463A463146083006F05BF800280AD18E -:10E6600020466B463A4631460C3000F007F8002849 -:10E6700001D100992960FEBD0E20FEBDFFB581B01D -:10E680001D4617460446029906F043F8060005D1D8 -:10E6900028682288391A8A4202D9092005B0F0BDBB -:10E6A00002994018A11CFCF741FD218828684018F8 -:10E6B00028603046F2E7FFB583B0144606002CD040 -:10E6C000002C2AD00698002827D000680A2821D3D9 -:10E6D0001146332005F0EDFF05466119B08805F0BD -:10E6E000E8FF45196119F08805F0E3FF4519611944 -:10E6F000308905F0DEFF45196119B08905F0D9FFB1 -:10E700004519B089019081004018411906980068A8 -:10E71000814204D9092007B0F0BD0E20FBE7002795 -:10E7200014E006207843801900906119C08905F033 -:10E73000C0FF451900986119008A05F0BAFF451914 -:10E7400000987F1C807C6055BFB26D1C0198874289 -:10E75000E7D3069805600020DDE7F8B51F461446AC -:10E7600005002ED0002C2CD0002F2AD038680D2880 -:10E7700025D31146392005F0A1FF0646A119A88826 -:10E7800005F09CFF8619A119E88805F097FF861906 -:10E79000A119288905F092FF8619A119A88905F009 -:10E7A0008DFF8619A87BA055761CA119288A05F033 -:10E7B00085FF2A8A861939689019884203D9092069 -:10E7C000F8BD0E20F8BD002A06D02946A019123146 -:10E7D000FCF7ACFC288A861900203E60F8BDFFB526 -:10E7E00083B0144605002CD0002C2AD006980028AF -:10E7F00027D000680A2821D31146302005F063FF96 -:10E800000646A119A88805F05EFF8619A119E888B7 -:10E8100005F059FF8619A119288905F054FF8619BA -:10E82000A119A88905F04FFF8619A8890190C10098 -:10E83000081A811906980068814204D9092007B096 -:10E84000F0BD0E20FBE7002719E0F800401900900A -:10E85000A119C08905F037FF86190098007CA055E2 -:10E860000098761CA119408A05F02DFF86190098A2 -:10E87000A119808A05F027FF86197F1CBFB2019875 -:10E880008742E2D3069806600020D8E7F8B51F4615 -:10E890001446050030D0002C2ED0002F2CD0386824 -:10E8A0000E2827D31146362005F012FF0646A1197F -:10E8B000A88805F00DFF8619A119E88805F008FF62 -:10E8C0008619A119288905F003FF8619A119A889BD -:10E8D00005F0FEFE8619A119E88905F0F9FE8619F2 -:10E8E000A119288A05F0F4FE2A8A86193968901938 -:10E8F000884203D90920F8BD0E20F8BD002A06D0B1 -:10E900002946A0191231FCF711FC288A861900202B -:10E910003E60F8BDFEB504460020009031206946F7 -:10E920001D4616468880002C31D0002E2FD0002D99 -:10E930002DD02F680B463A46314601A805F0E9FE76 -:10E94000002823D16B463A463146201D05F0E1FEF2 -:10E9500000281BD16B463A463146A01D05F0D9FE72 -:10E96000002813D120466B463A463146083005F060 -:10E97000D0FE00280AD120466B463A4631460C307C -:10E9800000F007F8002801D100992960FEBD0E2093 -:10E99000FEBDFFB581B01F460446039A029905F0FB -:10E9A000B8FE00280FD1A51C002609E03B462846EA -:10E9B000039A029900F0BDF8002804D10A35761CAC -:10E9C0002188B142F2D805B0F0BD10B5002808D0BA -:10E9D000002A06D0002B04D01968052903D209208B -:10E9E00010BD0E2010BD3A21117000215170848895 -:10E9F0009470240AD470007B1071052018600846BA -:10EA000010BDF8B51F461446050033D0002C31D098 -:10EA1000002F2FD038680F282AD31146382005F050 -:10EA20005CFE0646A119A88805F057FE8619A119B3 -:10EA3000E88805F052FE8619A119288905F04DFED7 -:10EA40008619A119A88905F048FE8619A87BA0554A -:10EA5000761CA119288A05F040FE8619A119688A3A -:10EA600005F03BFE6A8A861939689019884203D9F5 -:10EA70000920F8BD0E20F8BD002A06D02946A019AD -:10EA80001431FCF753FB688A861900203E60F8BDFC -:10EA9000FFB510680027081A81B015460E461C46BF -:10EAA000042802D2092005B0F0BD019805F0E8FD68 -:10EAB000A31C2A463146019805F0E2FD3846F2E7EC -:10EAC000F8B51D4616460F46044605F022FE0028FE -:10EAD00005D12B4632463946A01C05F01AFEF8BD7A -:10EAE000F8B51C460D46060019D0002A17D0002C98 -:10EAF00015D00120134600906A46304605F0F7FD18 -:10EB000000280BD123466A462946304605F0EFFD22 -:10EB1000002803D10099A94200D00920F8BD0E2099 -:10EB2000F8BD13460A4610B50146992004F042FE8E -:10EB300010BDF8B51D4616460F46044605F0E9FD22 -:10EB4000002805D12B4632463946A01C00F0C6F8F5 -:10EB5000F8BDF8B506460120069C1F460D460090FC -:10EB6000002E1FD0002A1DD0002F1BD0002C19D042 -:10EB70002068002816D0062D2CD313466A4630464E -:10EB800005F07EFD3B466A462946304605F078FD95 -:10EB9000009AB05C521C0092002805D0012806D0D3 -:10EBA0000B20F8BD0E20F8BD002020600FE0D21C25 -:10EBB000AA420FD86A4629463046236805F060FD10 -:10EBC00023686A46294630469B1C05F0F9FD0098EB -:10EBD000A84201D00920F8BD0020F8BD13460A461E -:10EBE00010B50146902004F0E5FD10BDF8B5069C77 -:10EBF0001D460E46070023D0002A21D0002D1FD02D -:10EC0000002C1DD00120134600906A46384605F0BE -:10EC10006EFD002813D12B466A463146384605F072 -:10EC200066FD00280BD123466A463146384605F07A -:10EC30005EFD002803D10099B14200D00920F8BD43 -:10EC40000E20F8BD13460A4610B50146962004F082 -:10EC5000B1FD10BDF8B5064601201C460D460090DA -:10EC6000002E17D0002A15D0002C13D020680028C1 -:10EC700010D0042D26D313466A46304605F000FD19 -:10EC8000009AB05C521C0092002805D0012806D0E2 -:10EC90000B20F8BD0E20F8BD002020600FE0121DF3 -:10ECA000AA420FD86A4629463046236805F0E8FC98 -:10ECB00023686A46294630469B1C05F0E1FC009813 -:10ECC000A84201D00920F8BD0020F8BD13460A462D -:10ECD00010B50146912004F06DFD10BDF8B51D463C -:10ECE00016460F46044601F053FC002805D12B467A -:10ECF00032463946201DFFF7E3FEF8BDF8B515464C -:10ED00000F46060029D0002D27D0002B25D01C4609 -:10ED100005F061FD00281FD1631C2A4639463046A4 -:10ED200005F059FD002817D1A31C2A463946304664 -:10ED300005F0DDFC00280FD1231D2A463946304658 -:10ED400005F0D5FC002807D1A01D831C00902A46A1 -:10ED50003946304603F056FFF8BD0E20F8BD0000DE -:10ED6000FEB51C46154607000E4615D0002D13D0E3 -:10ED7000002C11D0206800280ED00020019002AB9A -:10ED800001AA384605F027FD002804D16846007A1C -:10ED9000982803D00720FEBD0E20FEBD2B4601AAF9 -:10EDA0003146384605F0A3FC0028F6D1074800900C -:10EDB000234601AA3146384601F0A4FD0028ECD1D3 -:10EDC0000199B142E9D00920FEBD0000FDEC01002F -:10EDD00013460A4610B50146982004F0EBFC10BD1E -:10EDE000F8B507461948009015460E461C463846A9 -:10EDF00001F088FD00280ED115480090231D2A46F9 -:10EE00003146384601F07EFD002804D12868301ACA -:10EE1000042801D20920F8BD23460A332A46314688 -:10EE2000384605F02DFC23460C332A463146384639 -:10EE300005F026FC204608302346009010332A4671 -:10EE40003146384603F0DEFEF8BD000065050200DD -:10EE500055EE0100FFB581B016460F461C460198DD -:10EE6000FDF7FCFA00280BD1631C324639460198A5 -:10EE7000FDF7F4FA050003D13068B84202D1092049 -:10EE800005B0F0BD6B4632463946019805F098FC56 -:10EE9000A0784108684600784900C207D20F1143A4 -:10EEA000F92211404207920F52001143F7221140FC -:10EEB0000207D20FD2001143C006EF22C00F11404B -:10EEC00000010143A1702846DAE7FEB50746106845 -:10EED0001546081A0E461C46022812D3384605F07D -:10EEE000CFFB2868B0420CD001AB2A4631463846E9 -:10EEF00005F066FC68460079A0702868301A022880 -:10EF000001D20920FEBD231D2A463146384605F0B0 -:10EF1000B7FBA01D831C00902A463146384603F0FB -:10EF200071FEFEBDF8B51D4616460F46044605F0B7 -:10EF3000F0FB002815D12B4632463946A01C05F0BF -:10EF4000E8FB00280DD12B4632463946201D05F03E -:10EF5000E0FB002805D12B4632463946A01D05F0BE -:10EF6000D8FBF8BDF8B5064610680F46091A1546D5 -:10EF70001C46022940D3315C2078CA074008400073 -:10EF8000D20F10438B07FD22DB0F10405B001843AC -:10EF9000FB2318404B07DB0F9B001843F723184057 -:10EFA0000B07DB0FDB001843EF231840CB06DB0F0A -:10EFB0001B011843DF2318408B06DB0F5B0118434E -:10EFC0004906BF23C90F18408901084320702968EA -:10EFD000701C095C6078CB0740084000DB0F890794 -:10EFE0001843C90F10404900084360702868801C0E -:10EFF0002860381A022801D20920F8BD23460833B8 -:10F000002A463946304605F03BFB20460A30009040 -:10F01000231D2A463946304603F0F4FD0028ECD182 -:10F020001548234600900C332A463946304601F0F5 -:10F0300069FC0028E1D111482346009010332A468C -:10F040003946304601F05EFC0028D6D10B482346F5 -:10F05000009014332A463946304601F053FC00280C -:10F06000CBD106482346009018332A46394630460D -:10F0700001F048FCF8BD0000E337020055EE010046 -:10F08000FFB583B003980C9F0D9E1D460C460028CB -:10F090003FD0002A3DD0002D3BD0002F39D0002E8C -:10F0A00037D02868002834D03868002831D030683C -:10F0B00000282ED001200190002C27D0601E0228AD -:10F0C00024D3134601AA039805F0DAFA12480090F7 -:10F0D0002B4601AA2146039801F014FC002816D102 -:10F0E0000E4800903B4601AA2146039801F00AFC15 -:10F0F00000280CD10090334601AA2146039801F064 -:10F1000001FC002803D10199A14200D0092007B0D9 -:10F11000F0BD0E20FBE7000065EF0100E1ED01000E -:10F12000FFB581B014460E00074607D0002C05D06D -:10F130002568052D04D2092005B0F0BD0E20FBE79F -:10F1400013460A460146A22004F034FB0028F3D1FE -:10F15000002FF1D10448009023462A4631460498F6 -:10F1600001F0FFFBE8E7000025EF0100FEB5089D78 -:10F170001C460E46070014D0002A12D0002C10D0D6 -:10F18000206800280DD0002D0BD02868002808D05A -:10F1900000200190042E23D33878A32803D0072021 -:10F1A000FEBD0E20FEBD01201346019001AA384687 -:10F1B00005F066FA0C480090234601AA314638460D -:10F1C00001F0A0FB0028EDD100902B4601AA3146AA -:10F1D000384601F097FB0028E4D10198B04201D0F5 -:10F1E0000920FEBD0020FEBDE1ED0100FFB581B0AC -:10F1F00014460E00074610D0002C0ED02568052DB1 -:10F2000012D313460A460146A32004F0D3FA00287D -:10F2100001D1002F03D005B0F0BD0E20FBE7206820 -:10F220000090801CA84201D90920F4E76B462A46C9 -:10F23000314604A805F06DFA0028ECD10099216050 -:10F24000E9E7F8B50E4607460020694608701C46F7 -:10F2500015466B463146384605F0BDFA00280AD1FE -:10F2600068460078231DC007C00F20702A4631462B -:10F27000384605F072FAF8BD10B5002808D0002A0B -:10F2800006D0002B04D01968062903D2092010BD2E -:10F290000E2010BD5321117000215170848894708C -:10F2A000240AD470C0881071000A507106201860BA -:10F2B000084610BDF8B51D4617460E0017D0002DA4 -:10F2C00015D0002813D0044605F023FA00280DD1EC -:10F2D0002B463A463146A01C01F05AF9002805D1C8 -:10F2E0002B463A463146A01D05F013FAF8BD0E2014 -:10F2F000F8BD0000FEB51E461700044622D0002EC1 -:10F3000020D0002C1ED000200190356801AB2A4689 -:10F310003946204605F0FDF9002814D101AB2A46F4 -:10F320003946201D05F0F5F900280CD101AB2A461D -:10F330003946A01D00F024F8050004D1A079022868 -:10F3400002D016E00E20FEBDA08802A901F0D8FB75 -:10F3500005280ED001A8009002984C214843074987 -:10F3600033684018018940683A4603F063FC0500A1 -:10F37000E9D1019830602846FEBD0000EC4C002029 -:10F38000F8B51D4617460E000FD0002D0DD00028F1 -:10F390000BD0044605F02CFA002805D1207801286E -:10F3A00005D002280AD00720F8BD0E20F8BD2B4654 -:10F3B0003A463146A01CFFF77DFFF8BD2B463A4682 -:10F3C0003146A01C00F09EF8F8BD002808D0002AA5 -:10F3D00006D0002B04D01968042903D209207047F5 -:10F3E0000E20704754211170002151708088907058 -:10F3F000000AD070042018600846704710B5002835 -:10F4000008D0002A06D0002B04D01968052903D2A1 -:10F41000092010BD0E2010BD522111700021517025 -:10F4200084889470240AD470807910710520186043 -:10F43000084610BD10B5002808D0002A06D0002BC1 -:10F4400004D01968052903D2092010BD0E2010BD73 -:10F45000552111700021517084889470240AD47051 -:10F460008079107105201860084610BDF0B585B090 -:10F470001E461746040027D0002F25D0002E23D08B -:10F4800000200190356850206946088101AB2A466A -:10F49000394602A805F03DF9002816D101AB2A46ED -:10F4A0003946201D05F035F900280ED101AB2A465A -:10F4B0003946A01D00F026F8050006D1207B012862 -:10F4C00005D0062803D017E00E2005B0F0BDA088B7 -:10F4D00003A901F015FB05280ED001A800900398A0 -:10F4E0004C214843064933684018018940683A4630 -:10F4F00003F0A0FB0500E8D1019830602846E4E75E -:10F50000EC4C0020FFB581B01D4617460446029919 -:10F5100005F0FFF8002832D12B463A46A01C02998C -:10F5200001F036F800282AD12B463A46A01D029950 -:10F5300005F05EF9002822D12B463A46E01D0299DB -:10F5400005F056F900281AD120462B463A460830D5 -:10F55000029905F0DEF8002811D16089694608801B -:10F560002B463A466846029905F0D3F8060006D1C4 -:10F5700028686A461288391A914202D2092005B0D9 -:10F58000F0BD0299401821460C31FBF7CFFD6946CA -:10F5900009882868401828603046F0E7F8B5074623 -:10F5A00010681546081A0E461C46052801D2092087 -:10F5B000F8BD384605F064F8A31C2A4631463846A3 -:10F5C00005F0FEF8231D2A463146384605F058F866 -:10F5D0002046083007D0031D00902A4631463846A1 -:10F5E00001F0D8F9F8BD0E20F8BD00007CB5054645 -:10F5F00000201C460E460190002D0DD0002A0BD095 -:10F60000002C09D02068002806D0042E1AD32878B0 -:10F61000A62803D007207CBD0E207CBD0120134608 -:10F62000019001AA284605F02BF8084800902346CF -:10F6300001AA3146284601F065F90028EDD101986C -:10F64000B04201D009207CBD00207CBD9DF50100A9 -:10F65000FFB583B014460D0006460ED0002C0CD02A -:10F6600013460A460146A620276804F0A3F800289E -:10F6700001D1002E03D007B0F0BD0E20FBE72068BB -:10F6800001900648009001AB3A462946069801F0E1 -:10F6900068F90028EFD101992160ECE713470200D7 -:10F6A000F8B504460020069D1E460F460090002C2B -:10F6B00008D0002A06D0002E04D0002D02D0062F3C -:10F6C0001DD101E00E20F8BD2078A12801D007202F -:10F6D000F8BD0120134600906A46204604F0D0FF92 -:10F6E00033466A463946204604F0CAFF0099605CFA -:10F6F000491C0091002800D12860062901D009206A -:10F70000F8BD0020F8BDFEB51D46074614460E00A4 -:10F710001FD0002C1DD0206802900020019001A86D -:10F7200013460A4600903946A12003F0F3FD002855 -:10F7300001D1002F00D0FEBD002D0AD001AB314613 -:10F740002846029A04F0E5FF0028F4D101992160CF -:10F75000FEBD0E20FEBDF8B5074610680E461546E4 -:10F760001C46B04201D10920F8BD384605F028F802 -:10F770002078012803D0022801D00720F8BD231DDE -:10F780002A4631463846FFF7A0FBF8BD7CB51E4639 -:10F790000C4605001AD0002A18D001200190601EE6 -:10F7A000022811D3134601AA284604F069FF08482D -:10F7B0000090334601AA2146284601F0A3F800280C -:10F7C00003D10199A14200D009207CBD0E207CBD4F -:10F7D00057F7010013460A4610B50146A82003F06A -:10F7E000E9FF10BDFEB5089D1E460C4607002FD050 -:10F7F000002A2DD0002E2BD03068002828D0002DD4 -:10F8000026D02868002823D001200190601E0328FC -:10F810001CD3134601AA384604F0DDFF002816D198 -:10F820000C480090334601AA2146384601F06AF898 -:10F8300000280CD100902B4601AA2146384601F041 -:10F8400061F8002803D10199A14200D00920FEBD32 -:10F850000E20FEBD65050200FEB51D460746144696 -:10F860000E001FD0002C1DD02068029000200190B7 -:10F8700001A813460A4600903946A02003F04AFD2D -:10F88000002801D1002F00D0FEBD002D0AD001AB11 -:10F8900031462846029A04F03CFF0028F4D1019931 -:10F8A0002160FEBD0E20FEBDF8B504460020069D79 -:10F8B0001E460F460090002C08D0002A06D0002ECD -:10F8C00004D0002D02D0072F1DD101E00E20F8BD7D -:10F8D0002078A72801D00720F8BD0120134600900A -:10F8E0006A46204604F0CCFE33466A463946204636 -:10F8F00004F0C6FE2B466A463946204604F0C0FE98 -:10F900000098072801D00920F8BD0020F8BD134653 -:10F910000A4610B50146A72003F04CFF10BDF8B50C -:10F920000025069E0C460095002834D0002B32D0CE -:10F93000002E30D0042C3BD30178AA2901D0072017 -:10F94000F8BD01210091002A25D00799002922D075 -:10F95000877841783F020F431780C17804220092D4 -:10F9600001290AD0356000990A46491CA1421FD8D6 -:10F97000825C0091002A10D010E0062C18D3326867 -:10F98000002A08D04679077931023943118000995D -:10F99000891C0091E8E70E20F8BD1D606A462146EB -:10F9A000079B04F0DAFE0028F6D10099A142F3D0BB -:10F9B0000920F8BDFFB581B00A9F14460D002DD077 -:10F9C000002C2BD02668052E26D313460A46AA20E3 -:10F9D000019903F0EFFE002803D10198002802D01E -:10F9E000002005B0F0BD0498002817D0002F15D0D6 -:10F9F0002068811CB1420FD839882A181170090A71 -:10FA00005170C11C3A88801CB14205D8012129548B -:10FA1000401C8718B74203D90920E2E70E20E0E72F -:10FA200028180499FBF782FB2760D9E7FEB5074643 -:10FA300001200090089C01A81D460E460290002F50 -:10FA40001CD0002A1AD0002D18D02868002815D004 -:10FA5000002C13D00998002810D0082E28D3134664 -:10FA60006A46384604F00CFE0098395C401C009051 -:10FA7000002905D001290AD00B20FEBD0E20FEBDB5 -:10FA80000021001D2960B04212D121801AE06A468F -:10FA900031463846029B04F0F3FD68468288208890 -:10FAA000824205D822800098011D5118B14201D030 -:10FAB0000920FEBD39182868FBF738FB208800991B -:10FAC000401800906A4631463846099B04F045FECE -:10FAD000FEBD13460A4610B50146A92003F06AFE92 -:10FAE00010BDFFB581B000260A9C0F460546009662 -:10FAF000002814D0002A12D0049800280FD0002C1F -:10FB00000DD0206800280AD04068002807D0062FB2 -:10FB100034D32878A52804D0072005B0F0BD0E20E6 -:10FB2000FBE70120134600906A46284604F0DFFDFB -:10FB30000028F2D16A4639462846049B04F0D7FDD6 -:10FB40000028EAD100996A5C491C0091012A01D081 -:10FB50002660E2E76A4639462846236804F0C7FD76 -:10FB60000028DAD123686A46394628469B1C04F0EF -:10FB7000BEFD0028D1D100998F4201D10920CCE7E8 -:10FB80006A5C491C0091002AC7D121684E60C4E715 -:10FB9000FFB581B0074602981E461446002820D0C3 -:10FBA000002C1ED02568052D02D2092005B0F0BD1D -:10FBB000134602463946A52003F0FCFD0028F5D186 -:10FBC00021680091002F09D1002E0AD06B462A46E9 -:10FBD0003046029900F07EF80028E7D100992160B4 -:10FBE000E4E70E20E2E70000FEB5089D1E460C4645 -:10FBF000070024D0002A22D0002E20D0002D1ED0B5 -:10FC000001200190601E042817D3134601AA38462C -:10FC100004F036FD334601AA2146384604F030FD93 -:10FC2000084800902B4601AA2146384600F06AFE9B -:10FC3000002803D10199A14200D00920FEBD0E2069 -:10FC4000FEBD000099FC0100FEB51D4607461446A6 -:10FC50000E001FD0002C1DD02068029000200190C3 -:10FC600001A813460A4600903946A42003F052FB2F -:10FC7000002801D1002F00D0FEBD002D0AD001AB1D -:10FC800031462846029A00F025F80028F4D101995F -:10FC90002160FEBD0E20FEBDFFB583B015460E46A9 -:10FCA0001C461F88039804F022FD002810D1A31CD5 -:10FCB0002A463146039804F01AFD002808D120880E -:10FCC0000190231D2A4631460097039800F012FD4B -:10FCD00007B0F0BDF8B51D4616460F46044604F0C1 -:10FCE00018FD00280ED12B4632463946A01C04F0E0 -:10FCF00010FD002806D10095218833463A466068F9 -:10FD000000F02DFDF8BD08B500230093002A04D0B3 -:10FD1000002802D0032912D101E00E2008BD03788B -:10FD2000B02B01D0072008BD0123009313466A467B -:10FD300004F0DDFC0028F6D100990329F3D0092056 -:10FD400008BD13460A4610B50146B02003F032FD47 -:10FD500010BD08B500230093002A04D0002802D06B -:10FD6000032912D101E00E2008BD0378B12B01D088 -:10FD7000072008BD0123009313466A4604F0B7FC30 -:10FD80000028F6D100990329F3D0092008BD1346B5 -:10FD90000A4610B50146B12003F00CFD10BDFEB5BA -:10FDA0001C461646050024D0002E22D0002C20D060 -:10FDB0000020009027687020694688806B463A468C -:10FDC000314601A804F0A5FC002811D16B463A4643 -:10FDD0003146281D04F09DFC002809D16B463A46A7 -:10FDE0003146A81D00F007F8002801D100992160D4 -:10FDF000FEBD0E20FEBDFFB581B01D460E0012D027 -:10FE0000002D10D000280ED00446039A00F02EF8E2 -:10FE1000070006D1286803992288091A8A4204D962 -:10FE2000092005B0F0BD0E20FBE78019211DFBF76E -:10FE30007DF921882868401828603846F1E7F8B530 -:10FE400015460F4606000FD0002D0DD0002B0BD00D -:10FE50001C4604F04CFC002805D1A31C2A46394658 -:10FE6000304604F044FCF8BD0E20F8BDF8B51D4640 -:10FE700017460E000FD0002D0DD000280BD00446E1 -:10FE800004F047FC002805D12B463A463146A01C19 -:10FE900004F03FFCF8BD0E20F8BD0000FEB5089D43 -:10FEA0001C460F46060027D0002A25D0002C23D060 -:10FEB0002068002820D0002D1ED00120134601907C -:10FEC00001AA304604F013FC002816D11048009017 -:10FED000234601AA3946304600F014FD00280CD113 -:10FEE000216800290AD001997218521C2A602268E0 -:10FEF000491C1288511805E00E20FEBD0021296022 -:10FF00000199491C0191B942F7D00920FEBD0000BA -:10FF10003FFE010013460A4610B50146B22003F029 -:10FF200049FC10BDF8B500261C461746054600964C -:10FF3000002809D0002F07D0002C05D02068002809 -:10FF400002D0062928D101E00E20F8BD28786928C2 -:10FF500017D10120134600906A46284604F0FDFBA5 -:10FF60000028F2D1396801290DD020290BD0212990 -:10FF700009D0222907D0232905D0242903D02529F7 -:10FF800001D00720F8BD0098295C401C0090002992 -:10FF900000D12660062801D00920F8BD0020F8BD58 -:10FFA00008B500230093002805D0002A03D00529B6 -:10FFB00003D2092008BD0E2008BD0378682B01D0AC -:10FFC000072008BD0123009313466A4604F0C5FBD1 -:10FFD00008BD10B50446002909D0002A07D01346F1 -:10FFE0000A460146682003F0E5FB002810BD0E20FC -:10FFF00010BD4058002800D00120704701000007C4 -:020000040002F8 -:1000000017A5D84602FFFFFF00000000020001FF15 -:100010000201FFFF00C20100FFB581B014460D00D0 -:10002000074623D0002C21D013460A4601466920FA -:10003000266803F0BFFB002802D1002F02D0002069 -:1000400005B0F0BD0A98002810D0049801280FD000 -:1000500020280DD021280BD0222809D0232807D012 -:10006000242805D0252803D00720E9E70E20E7E75C -:10007000206800906B463246294604A804F087FBAE -:100080000028DDD10498222823D006DC01280BD0DB -:10009000202810D0212839D114E0232820D024286A -:1000A00025D0252832D129E06B46324629460A98C8 -:1000B000FBF7E5FB28E06B46324629460A98FDF738 -:1000C00043FA21E06B46324629460A98FDF7A8FA22 -:1000D0001AE06B46324629460A98FDF7D0FA13E03B -:1000E0006B46324629460A98FDF7F4FA0CE06B4657 -:1000F000324629460A98FDF71AFB05E06B46324660 -:1001000029460A98FDF757FA002899D100982060EF -:1001100095E7F8B5054600201C4616460F460090A8 -:10012000002D0CD0002E0AD0002C08D0206800280A -:1001300005D0062F4BD3287868281AD101E00E206D -:10014000F8BD0120134600906A46284604F005FBDE -:100150000028F5D1316801290DD020290BD02129A3 -:1001600009D0222907D0232905D0242903D0252905 -:1001700001D00720F8BD009AAB5C521C0092002B06 -:1001800009D022292CD009DC01290ED0202913D036 -:10019000212919D11DE00021216015E0232926D055 -:1001A00024292BD025290FD12FE06A46394628462D -:1001B0002368FBF74DFB05E06A463946284623686D -:1001C000FDF7A1F90028D5D10099B942D2D0092074 -:1001D000F8BD6A46394628462368FDF7FFF9F1E77E -:1001E0006A46394628462368FDF73CFAEAE76A463C -:1001F000394628462368FDF753FAE3E76A4639464D -:1002000028462368FDF780FADCE76A463946284627 -:100210002368FDF7BAF9D5E7FFB583B017460D4659 -:1002200006000ED0002402AB01AA019404F0D3FA18 -:10023000002804D16846007A622804D0072007B05D -:10024000F0BD0E20FBE73B4601AA2946304604F0EC -:100250004EFA0028F3D1009401AA29463046069BA5 -:1002600000F050FB0028EAD10199A942E7D009200B -:10027000E5E70000FFB581B014460D0006460ED03C -:10028000002C0CD013460A4601466220276803F072 -:1002900091FA002801D1002E03D005B0F0BD0E2048 -:1002A000FBE70448009023463A462946049800F0AC -:1002B00058FBF2E7F1470200FEB500261C460F4648 -:1002C0000546019600280DD0002A0BD0002C09D03D -:1002D0002068002806D0042F19D32878672803D077 -:1002E0000720FEBD0E20FEBD01201346019001AA8D -:1002F000284604F0FCF90028F5D101996A5C491CF4 -:100300000191012A05D026600199B942EBD009205C -:10031000FEBD236801AA394628461B1D04F0E7F9F3 -:100320000028F5D1009601AA39462846236800F036 -:10033000E9FA0028E8D0FEBD13460A4610B501468A -:10034000672003F037FA10BD70B514460246184610 -:1003500023680025C91A102901D2092070BD9918F7 -:100360001022FAF7E3FE206810302060284670BDA6 -:1003700070B51C460B46014620680025121A102A4B -:1003800001D2092070BDC0181022FAF7CFFE2068F4 -:1003900010302060284670BDFFB583B014460D466E -:1003A000070015D0002C13D0002664206946019662 -:1003B0000872002D23D002AB01AA2946384604F06A -:1003C000FFF96846007A642804D00B2007B0F0BD1E -:1003D0000E20FBE7009401AA29463846069B02F04E -:1003E00041FC0028F2D1009601AA294638460C9B10 -:1003F00000F088FA0028E9D10199A942E6D0092045 -:10040000E4E70000FFB583B014460D00064611D0A6 -:10041000002C0FD013460A4601466420276803F0DB -:10042000C9F9002804D120680190002E04D00020D2 -:1004300007B0F0BD0E20FBE70648009001AB3A463E -:100440002946069800F08DFA0028F1D10198206025 -:10045000EDE7000091050200F8B5044601201E46B4 -:1004600017460D460090002C19D0002F17D0002EF3 -:1004700015D00698002812D03B68002B0FD03068AA -:1004800000280CD006980068002808D0042D33D32B -:1004900061780220002904D0012906D024E00E2032 -:1004A000F8BD0090002010600EE0072D24D30090CE -:1004B0006A462946204604F0E3F800983968205C33 -:1004C00088700098401C0090009AA05C002802D020 -:1004D000012809D101E000203060521C0092A05C8C -:1004E000002803D0012804D00B20F8BD0699002075 -:1004F0000860521CAA4201D00920F8BD0020F8BDB6 -:10050000FFB581B015460E0004460ED0002D0CD06C -:1005100013460A46014665202F6803F04BF9010097 -:10052000286804D0084605B0F0BD0E20FBE7002C7B -:1005300001D00020F7E7411CB94209D80499315491 -:100540000A99401C00290BD004994418BC4201D9D7 -:100550000920E8E70A4630180A99FAF7E7FD20462D -:100560002860E6E7F8B5074610681546081A0E46F3 -:100570001C46032801D20920F8BD384604F080F853 -:10058000A31C2A463146384604F01AF90020F8BD6B -:10059000F8B51D4616460F46044604F0BAF8002882 -:1005A00005D12B4632463946A01C04F021F9F8BD8E -:1005B0007CB5064601201C460D460190002E20D039 -:1005C000002A1ED0002C1CD01068002819D02068EA -:1005D000002816D00C481346009001AA304600F0BF -:1005E00091F900280CD10090234601AA29463046F3 -:1005F00000F088F9002803D10199A94200D0092010 -:100600007CBD0E207CBD000049030200FFB583B015 -:1006100014460D00064611D0002C0FD013460A4692 -:1006200001466320276803F0C5F8002804D120683C -:100630000190002E04D0002007B0F0BD0E20FBE793 -:100640000648009001AB3A462946069800F089F921 -:100650000028F1D101992160EEE70000F147020086 -:10066000002808D0002A06D01368002B03D00229E6 -:1006700003D0092070470E2070470178662901D009 -:10068000072070474078002800D110600020704794 -:10069000FFB581B01E4614460D0018D0002C16D0B0 -:1006A00013460A4627686620019903F083F800285C -:1006B00003D10198002802D0002005B0F0BD002E23 -:1006C00005D02068411DB94203D90920F5E70E2065 -:1006D000F3E731782954401C2A1871881170090AEF -:1006E0005170801CB1882A181170090A5170801C41 -:1006F0002060E1E7FFB581B00F46002069460B9E00 -:10070000087010681C461546B8421BD00B46394687 -:10071000019804F055F868460078012806D0002CAE -:1007200001D000202060002005B0F0BD002C0BD0CF -:100730002068002808D00A998E4203D829687A1ABE -:10074000B24203D20920EFE70E20EDE7019A8918A3 -:100750003246FAF7EBFC286880192860E3E7FFB51A -:1007600081B00A9C0D46060001D0012000E0002067 -:100770006946087023466846049A039904F038F8DD -:10078000070007D1002E10D020680499091AA94249 -:1007900002D2092005B0F0BD03992A46401831461F -:1007A000FAF7C4FC2068401920603846F2E70000E0 -:1007B00010B51248017842780907090F022910D8AC -:1007C000252A0ED8002904D001290CD05523002158 -:1007D00011E00B49801CFAF7CDFC002801D1012063 -:1007E00010BD002010BD0F23F1E74418A4789C42EF -:1007F000F7D1491CC9B29142F7D3F0E7504A002023 -:100800004248020070B5144900240B68002B21D027 -:100810000C46443C25462846AD6C256322464030B4 -:10082000E36220320469C368946153610A468369B4 -:10083000443A40691364D06300200860888008311E -:100840000860888008310860888054390124486233 -:1008500003F01AFB204670BD80440020F8B5234801 -:10086000C16800293ED00E6821494C680769C078EC -:10087000E11B0D022D0AED1C002814D101201D4A98 -:10088000000450601B4A403A50601B494000086019 -:100890001A4908601A49012008602F20FAF71AFC4B -:1008A00012490120C870B54200D23546E81900024D -:1008B0000F4B000A403318600D4A5168001B091B9A -:1008C0000902090A0002000AC91C814209D95068BC -:1008D00018602F20FAF7FEFB0120074940048039F9 -:1008E0000860F8BD02F0AEFEF8BD00005C430020D9 -:1008F000001501404013014080E200E000E100E00B -:1009000000100140FFB581B01168029800250A9ED1 -:100910001C461746814202D1092005B0F0BD0146B0 -:100920006B46019803F04CFF68460078012804D01C -:10093000002811D00B252846EFE7002C0AD02368A9 -:10094000002B07D0002EF6D03A4602990198B04706 -:100950000546F0E70E20E0E7002CECD000202060F8 -:10096000E9E7F8B51E680025069C964201D10920EA -:10097000F8BD002801D0012700E000278F551E6830 -:10098000761C1E60002803D0002C01D0A04705462D -:100990002846F8BDFFB583B00C9C1D461646002CBA -:1009A0000FD0206800280CD0002D0AD0286800281D -:1009B00007D031680498401A022804D2092007B0F1 -:1009C000F0BD0E20FBE700276846077101AB0499D4 -:1009D000039803F0F5FE68460079002808D02068E7 -:1009E00000902B4632460499039802F00BF9E6E793 -:1009F00027603068401C306000202F60DFE7000077 -:100A0000034610B504200B4A0021FF242D344C432B -:100A1000A418A478002C03D0491C0229F5D310BDDA -:100A2000FF202D3048430124801884700020196075 -:100A300010BD0000944A0020034610B50520094A65 -:100A40000021FF242D344C43145B9C4206D1FF232C -:100A50002D33002059438918887010BD491C022984 -:100A6000EFD310BD944A002070B505460520094C0F -:100A70000022FF232D335343E65AAE4203D11B1904 -:100A80009B78012B03D0521C022AF2D370BD0020A8 -:100A90000A6070BD944A0020034610B504200B4A3A -:100AA00000214C244C43A418A478002C03D0491CEA -:100AB0000829F6D310BD4C20484380180124024673 -:100AC00084700C3242600020196010BDEC4C002094 -:100AD000034610B50520094A00214C244C43145B01 -:100AE0009C4206D14C2300205943891888704860E5 -:100AF00010BD491C0829F0D310BD0000EC4C0020AB -:100B000070B505460520094C00224C235343E65A94 -:100B1000AE4203D11B199B78012B03D0521C082A2B -:100B2000F3D370BD00200A6070BD0000EC4C0020C3 -:100B300030B589B01C461546002816D0002D14D0BB -:100B4000002C12D00A4A079206926A46059205AA1C -:100B5000FAF776FF002806D106A9059860DF22463D -:100B60002946FAF78BFF09B030BD0E20FBE70000E5 -:100B7000004300203EB51C461546002813D0002D2A -:100B800011D0002C0FD001AA009289B26A46FBF75F -:100B900022F9002806D1009871DF22462946009BE1 -:100BA000FBF730F93EBD0E203EBD7FB51C46154615 -:100BB000002815D0002D13D0002C11D002AA0092CD -:100BC0006B4601AAFBF74AF9002807D1684600796D -:100BD000009970DF22462946FBF76AF904B070BD20 -:100BE0000E20FBE770B596B01C4615460E46002851 -:100BF00023D0002D21D0002C1FD006A902911F2147 -:100C00006A4611730EAA04926A46117505AA04A9D0 -:100C10000192009103AB02AA3146FBF77EF900284E -:100C200009D16846037D017B049A029872DF22464F -:100C30002946FBF798F916B070BD0E20FBE7FFB50B -:100C4000CBB01D468C4600282FD04D9900292CD0C2 -:100C5000002D2AD0002139AA2BABCC00641A8E00BB -:100C6000E418491C94510829F7D3002441AB0BAE7A -:100C700021018F19A100641C5F50082CF8D3069243 -:100C800049A90191089306A9039169460A910AAA04 -:100C90006146FBF771F9002805D10A9873DF2A46EF -:100CA0004D99FBF7F1F94FB0F0BD0E20FBE770B5A1 -:100CB0001D461446002809D0002C07D0002D05D071 -:100CC00074DF2A462146FBF7E7F970BD0E2070BDA0 -:100CD0007CB51C461546002813D0002D11D0002CE1 -:100CE0000FD001AA009289B26A46FBF7DDF900280D -:100CF00006D1009879DF22462946009BFBF7ECF9E4 -:100D00007CBD0E207CBD38B51C461546002810D091 -:100D1000002D0ED0002C0CD06A46FBF706FA0028F6 -:100D200006D16846008878DF22462946FBF716FA86 -:100D300038BD0E2038BD30B589B01C461546002898 -:100D400019D0002D17D0002C15D004AA019201AAA9 -:100D5000009289B203AB02AAFBF708FA002808D177 -:100D60006846017B0089019A80DF22462946FBF70D -:100D700039FA09B030BD0E20FBE77FB51C46154699 -:100D8000002815D0002D13D0002C11D002AA0092FB -:100D90006B4601AAFBF72EFA002807D16846808827 -:100DA00000997EDF22462946FBF74EFA04B070BD5B -:100DB0000E20FBE77FB51C461546002815D0002DF8 -:100DC00013D0002C11D002AA00926B4601AAFBF7A7 -:100DD00043FA002807D168468088009975DF2246CB -:100DE0002946FBF78BFA04B070BD0E20FBE73EB539 -:100DF0001C461546002815D0002D13D0002C11D00C -:100E000002AA00926B4601AAFBF7CEFA002808D18D -:100E100068468088009987DF23462A460099FBF7B9 -:100E2000F5FA3EBD0E203EBDFFB5CFB01D468C4647 -:100E300000283CD05199002939D0002D37D04AA93B -:100E4000099100213AAA2CABCC00641A8E00E41858 -:100E5000491CC9B294510829F6D3002442AB0CAE08 -:100E600021018F19A100641CE4B25F50082CF7D354 -:100E700008216C462176059208AC2170079305A9DC -:100E8000029101A90A914CA90B910BA900910AABFF -:100E900009AA6146FBF724FB002806D109AB07CB62 -:100EA0008CDF2A465199FBF75DFB53B0F0BD0E2055 -:100EB000FBE770B51D461446002809D0002C07D06A -:100EC000002D05D08DDF2A462146FBF701FB70BDC2 -:100ED0000E2070BD30B58DB01C461546002819D0C7 -:100EE000002D17D0002C15D004AA019203AA02925B -:100EF00002AB01AAFBF73EFB002809D10299019839 -:100F00007DDF694600948A892B460199FBF767FBD0 -:100F10000DB030BD0E20FBE730B58DB01C46154638 -:100F200000281DD0002D1BD0002C19D00CAA019236 -:100F300004AA02921F226B469A8103AA009202AB76 -:100F400001AAFBF771FB002808D168468289029943 -:100F500001987CDF22462946FBF792FB0DB030BD9D -:100F60000E20FBE77CB51C461546002812D0002D4C -:100F700010D0002C0ED001AB6A46FBF789FB00288D -:100F800007D168460179008876DF22462946FBF7BB -:100F9000AFFB7CBD0E207CBD30B58DB01C46154628 -:100FA00000281BD0002D19D0002C17D009AA0192BF -:100FB00004AA029202AA009289B201AB03AAFBF72B -:100FC0003FFC002808D168468089029A019985DF94 -:100FD00022462946FBF76CFC0DB030BD0E20FBE726 -:100FE0007CB51C461546002812D0002D10D0002CD0 -:100FF0000ED001AB6A46FCF7DDF8002807D1684641 -:101000000179008882DF22462946FCF7F5F87CBD8D -:101010000E207CBD30B58BB01C461546002815D07F -:10102000002D13D0002C11D002AA00926B4601AA09 -:10103000FCF7EAF8002807D168468088009981DF2C -:1010400022462946FCF706F90BB030BD0E20FBE71F -:1010500030B59FB01C46154600281BD0002D19D076 -:10106000002C17D014AA019204AA029201AA00929D -:1010700002AB03AAFCF70AF9002809D16846808967 -:10108000019A029983DF23462A460199FCF730F939 -:101090001FB030BD0E20FBE730B599B01C46154699 -:1010A00000281AD0002D18D0002C16D004AA0192C6 -:1010B0000EAA029202AA009201AB03AAFCF740F921 -:1010C000002808D168468089029A019984DF224667 -:1010D0002946FCF76BF919B030BD0E20FBE73EB591 -:1010E0001C461546002813D0002D11D0002C0FD01F -:1010F00001AA009289B26A46FCF729FB002806D1B2 -:1011000000987BDF22462946009BFCF73AFB3EBD58 -:101110000E203EBD3EB51C461546002811D0002DC0 -:101120000FD0002C0DD001AA00926A46FCF761FB9B -:10113000002805D100987ADF22462946FCF79DFB5E -:101140003EBD0E203EBD7FB51C461546002816D07C -:10115000002D14D0002C12D003AA009202AB01AAD9 -:10116000FCF793FB002808D16846027B017A80884F -:1011700088DF22462946FCF7B4FB04B070BD0E2080 -:10118000FBE738B51C461546002810D0002D0ED0C0 -:10119000002C0CD06A46FCF7ACFB002806D1684650 -:1011A000008889DF22462946FCF7BBFB38BD0E20AC -:1011B00038BDFFB5C7B01D468C46002832D04999CE -:1011C00000292FD0002D2DD0002137AA29ABCC002B -:1011D000641A8E00E418491CC9B294510829F6D348 -:1011E00000243FAB09AE21018F19A100641CE4B2B9 -:1011F0005F50082CF7D308216C46217100922173AF -:1012000004A9089108AA059402936146FCF7DAFB49 -:10121000002805D108988ADF2A464999FCF7F0FB97 -:101220004BB0F0BD0E20FBE770B51D4614460028FC -:1012300009D0002C07D0002D05D08BDF2A4621468F -:10124000FCF7E6FB70BD0E2070BD30B593B01C46B8 -:10125000154600281FD0002D1DD0002C1BD006AA3B -:1012600002920BAA03920FAA049204AB03AA019361 -:10127000009289B202AB05AAFCF7D2FB002808D184 -:1012800002A80EC86846808A86DF22462946FCF7F7 -:1012900017FC13B030BD0E20FBE70000FFB589B08E -:1012A0001D46164607003BD0002E39D0002D37D002 -:1012B0000020059006A8039005A8FFF7A1FB0028D1 -:1012C0002FD1FF2105982D3148431E49FF23441893 -:1012D000201D2246243202906260059A2D335A4323 -:1012E00051180A464032A2601732E2601032226181 -:1012F000413262611C32426117328261EB31C1615D -:1013000003A802A90090019104AB224638460A992D -:10131000FCF7ECFC002804D10298002803D005E07B -:101320000E200DB0F0BD2088FFF786FB69462088AF -:10133000097C029B039A7FDF2A463146029BFCF719 -:101340001FFDEEE7944A002038B51C4615460028DC -:1013500010D0002D0ED0002C0CD06A46FCF700FEF9 -:10136000002806D16946085677DF22462946FCF751 -:101370000FFE38BD0E2038BD3EB51C461546002870 -:1013800017D0002D15D0002C13D00023029302ABF0 -:10139000009301AA89B26B46FCF754FE002807D1DE -:1013A00068468088009994DF22462946FCF782FE31 -:1013B0003EBD0E203EBD30B587B01C461546002808 -:1013C0001DD0002D1BD0002C19D00022049204AA9D -:1013D000019205AA029202AA009289B201AB03AA65 -:1013E000FCF7A0FE002808D168468089029A01997E -:1013F00095DF22462946FCF7D7FE07B030BD0E2008 -:10140000FBE770B58AB01C46154600281CD0002D9D -:101410001AD0002C18D004AB01930B236E463381F5 -:1014200002AB009303AA89B201ABFCF7C5FE00280A -:1014300008D1684602898089019997DF22462946AA -:10144000FCF7E3FE0AB070BD0E20FBE73EB51C467C -:101450001546002815D0002D13D0002C11D002AA5B -:10146000009289B26B4601AAFCF7DBFE002807D187 -:1014700068468088009992DF22462946FCF70DFFD6 -:101480003EBD0E203EBD3EB51C461546002815D07B -:10149000002D13D0002C11D002AA009289B26B4605 -:1014A00001AAFCF702FF002807D16846808800994E -:1014B00093DF22462946FCF734FF3EBD0E203EBD99 -:1014C0007CB51C461546002812D0002D10D0002CEB -:1014D0000ED06A4601ABFDF703FB002807D1684632 -:1014E0008188008899DF22462946FDF71AFB7CBDDA -:1014F0000E207CBD30B585B01C461546002819D09D -:10150000002D17D0002C15D004AA019201AA009238 -:1015100089B203AB02AAFDF71CFB002808D168467C -:1015200081890089019A90DF22462946FDF756FB02 -:1015300005B030BD0E20FBE77FB51C4615460028E0 -:1015400017D0002D15D0002C13D003AE01AA02AB8A -:1015500089B20096FDF74AFB002808D168468289C7 -:101560000189808896DF22462946FDF76BFB04B08F -:1015700070BD0E20FBE73EB51C461546002815D071 -:10158000002D13D0002C11D002AA009289B26B4614 -:1015900001AAFDF75FFB002807D168468088009903 -:1015A00091DF22462946FDF791FB3EBD0E203EBD50 -:1015B00070B58AB01C46154600281ED0002D1CD0E0 -:1015C000002C1AD000230293039302AB0093142340 -:1015D0006E46F38105AB049301AA89B26B46FDF711 -:1015E000BFFB002807D168468088009998DF224613 -:1015F0002946FDF7EDFB0AB070BD0E20FBE770B584 -:10160000FFB0FFB09EB01C4615460E4600283CD0E9 -:10161000002D3AD0002C38D0012149026A4651826F -:1016200012AA0392FFAA4C32059210320692121DA2 -:101630000792121D089202AA0F92FFAA68320A921C -:10164000121D0B926A46118692A90E910AA9119158 -:10165000FFA95431109110AA11A9019200910FAB6A -:1016600009AA3146FDF70CFD00280AD16846808C96 -:10167000109B119A0F99A2DF22462946109BFDF775 -:101680004FFD7FB07FB01EB070BD0E20F9E730B5C2 -:10169000FFB08EB01C461546002827D0002D25D05F -:1016A000002C23D004AA01928AAA04928BAA059244 -:1016B0000AAA0892012252026B461A8309AA0392CF -:1016C00003AA009201AB02AAFDF750FD00280AD13F -:1016D0006B461889039A0199A3DF6B469B8C2246BF -:1016E0002946FDF783FD7FB00EB030BD0E20FAE72E -:1016F00070B5FFB089B01C4615460E4600281CD0B8 -:10170000002D1AD0002C18D0012149026B461983F4 -:1017100007AA06A904930392029104AB05AA3146D5 -:10172000FDF764FF002809D16846808A0499A6DF86 -:101730000499002905D08B6804E00E207FB009B021 -:1017400070BD002322462946FDF782FFF6E730B53B -:1017500085B01C46154600281AD0002D18D0002C44 -:1017600016D004AA019201AA009289B203AB02AA80 -:10177000FDF796FF002809D1684681890089019A02 -:10178000A1DF22462946019BFDF7BDFF05B030BD14 -:101790000E20FBE730B5FFB088B01C461546002888 -:1017A0001CD0002D1AD0002C18D06A46049206AA2C -:1017B0000392012252026B465A8104AB05AAFDF73F -:1017C000E5FF002807D16846808A0499A8DF2246F1 -:1017D0002946FDF7FFFF7FB008B030BD0E20FAE7C5 -:1017E00030B587B01C46154600281DD0002D1BD0F3 -:1017F000002C19D00022049204AA029205AA019298 -:1018000001AA009202AB03AAFDF7ECFF002809D160 -:101810006846007B019A0299A0DF22462946019B77 -:10182000FEF71AF807B030BD0E20FBE77FB51C4667 -:101830001546002816D0002D14D0002C12D003AA73 -:10184000009202AB01AAFEF72FF8002808D16846E3 -:10185000828901898088A7DF22462946FEF757F84A -:1018600004B070BD0E20FBE730B5FFB088B01C4659 -:101870001546002825D0002D23D0002C21D007AA02 -:101880000292012252026B461A8306AA039205AB0A -:1018900003AA0193009202AB04AAFEF740F80028C5 -:1018A0000CD16846008A059B039A0299AADF039926 -:1018B000009122462946029BFEF77CF87FB008B0D3 -:1018C00030BD0E20FAE730B5FFB088B01C46154693 -:1018D000002820D0002D1ED0002C1CD006AA029279 -:1018E000012252026B469A8105AB03AA0193009232 -:1018F00002AB04AAFEF79AF8002809D1684682894B -:10190000008A059B0299A9DF22462946FEF7E1F8E5 -:101910007FB008B030BD0E20FAE730B5FFB088B018 -:101920001C46154600281DD0002D1BD0002C19D0B8 -:1019300001AA039206AA029203AA009289B205ABF9 -:1019400004AAFEF7CEF8002809D16846818A008AE9 -:10195000039AA5DF22462946039BFEF719F97FB0BB -:1019600008B030BD0E20FAE730B5FFB088B01C4695 -:101970001546002820D0002D1ED0002C1CD00F4A68 -:1019800089B21268039206AA049203AA029202AADA -:10199000009205AB01AAFEF727F9002809D1684695 -:1019A000818A8088029AA4DF22462946029BFEF79C -:1019B0004BF97FB008B030BD0E20FAE7C84A0200EC -:1019C00038B51C461546002810D0002D0ED0002C2E -:1019D0000CD06A46FEF797F9002806D168460088C1 -:1019E000B0DF22462946FEF7ACF938BD0E2038BDDF -:1019F00038B51C461546002810D0002D0ED0002CFE -:101A00000CD06A46FEF7A5F9002806D16846008882 -:101A1000B1DF22462946FEF7BAF938BD0E2038BD9F -:101A200030B585B01C46154600281AD0002D18D0B8 -:101A3000002C16D004AA01920022029202AA00925F -:101A400001AB03AAFEF72AFA002808D1684680896C -:101A5000029A0199B2DF22462946FEF75BFA05B0E9 -:101A600030BD0E20FBE730B585B01C46154600287A -:101A700018D0002D16D0002C14D003AA019289B2E0 -:101A800001AB02AAFEF74EFA002809D1019902988B -:101A900069DF0199009122462946029BFEF7BCFAB4 -:101AA00005B030BD0E20FBE7F0B58BB01D461646E5 -:101AB0000C4607001CD0002E1AD0002D18D0002094 -:101AC000C043009000200490059006900790A1B2BA -:101AD0006A463846FEF764FA00280AD102A8019047 -:101AE0000098212807D0222808D023280AD107E00F -:101AF0000E200BB0F0BD0AA8039003E008A800E098 -:101B000004A80290A1B201AB6A463846FEF701FB79 -:101B10000028EED10199009868DF2A463146FEF789 -:101B200058FAE6E73EB51C461546002816D0002DAB -:101B300014D0002C12D002AA009289B26B4601AADE -:101B4000FEF76AFB002808D168468088009962DFAA -:101B500022462946009BFEF78DFB3EBD0E203EBD72 -:101B600030B585B01C46154600282AD0002D28D057 -:101B7000002C26D003AA019201AB6A46FEF79CFB1B -:101B800000281CD10198002811D002A8FEF784FF7C -:101B9000002814D16846028802984C2148430A491B -:101BA0000A52019A401892880281001D0190014654 -:101BB0006846008867DF22462946FEF7BDFB05B070 -:101BC00030BD0E20FBE70000EC4C002030B589B0A2 -:101BD0001C46154600281ED0002D1CD0002C1AD003 -:101BE00010226B461A7204AA039208AA019201AA53 -:101BF000009203AB02AAFEF7CFFB002809D168468A -:101C0000007A019A039964DF22462946019BFEF778 -:101C1000F9FB09B030BD0E20FBE730B58BB01C4698 -:101C20001546002823D0002D21D0002C1FD01022D3 -:101C30006B461A7303AA029205AA019209AA04929A -:101C400001AA009289B202AB04AAFEF705FC0028A3 -:101C50000BD1019A0299049865DF019900916946B8 -:101C60000B7B22462946FEF74BFC0BB030BD0E2005 -:101C7000FBE730B587B01C461546002818D0002D6C -:101C800016D0002C14D002AA019206AA009289B2A2 -:101C90006B4601AAFEF78CFC002807D10099019839 -:101CA00063DF22462946009BFEF7B0FC07B030BD3B -:101CB0000E20FBE73EB51C461546002813D0002D2C -:101CC00011D0002C0FD001AA009289B26A46FEF70B -:101CD000C7FC002806D1009866DF22462946009BF3 -:101CE000FEF7D6FC3EBD0E203EBD30B58DB01C4685 -:101CF0001546002813D0002D11D0002C0FD06A46B5 -:101D00000C920CAA00F08CFA002806D10C984DDF3A -:101D1000224629460C9B00F0A9FA0DB030BD0E20DA -:101D2000FBE70000F0B4002812D0002A10D0002BEE -:101D30000ED005780A4E0024E700F75DAF420AD1C5 -:101D4000E400A4196468002C08D0A446F0BC6047E5 -:101D50000E20F0BC7047641C442CEDD30620F8E73D -:101D6000A848020010B500280AD0002A08D0002B8D -:101D700006D089B201F0ACFB002800D13CDF10BDD9 -:101D80000E2010BD7CB51C461546002812D0002D33 -:101D900010D0002C0ED001AA00926A4602F062FA1E -:101DA000002806D1009853DF22462946009B02F006 -:101DB0007CFA7CBD0E207CBDFFB582B000240B9E5A -:101DC000684604801D4617460471002E0CD0002D75 -:101DD0000AD02868002807D039680398401A0328D9 -:101DE00004D2092006B0F0BD0E20FBE76B46039934 -:101DF000029802F045FC694630880988884201D281 -:101E00000C20EFE701AB3A460399029802F0D8FCA8 -:101E100068460079002801D000240BE02C600EE019 -:101E20002868610043183A460399029802F028FC9A -:101E3000641CA4B2684600888442F1D33480002038 -:101E4000D0E7000010B50446002A02D01088002216 -:101E500010E00A48FBE7030A00020343A05C584075 -:101E600003061B0F43401803584083B21806C00CEA -:101E70005840521C8A42EED310BD0000FFFF000004 -:101E800002788378521C5B1ED2B283708A4200D1E2 -:101E90000022027070470000F8B51646424CD2B2DC -:101EA000A272A3630125E16365720027E7812778A9 -:101EB000002F08D0002808D0032809D0012F0FD008 -:101EC000E5810220F8BD0520F8BD00F049F968E081 -:101ED000012FF5D0A0890121C9030843E081F4E76F -:101EE000272902D9E5810120F8BD0027A781012813 -:101EF00002D0022809D054E027212C48F9F72FF905 -:101F0000012001F055FB04202CE0252A02D9E581AF -:101F10000320F8BD1F073F0F24485B1C0770244FA8 -:101F2000427021D0012B05D0022B09D0032B09D000 -:101F3000E58130E032461F49801CF9F7F7F806E0EA -:101F40000F2200E055223146801CF9F701F90020EC -:101F500001F02EFBA1691848FF3141310161476151 -:101F60004560022020701CE00846002E06D0012E9D -:101F700004D0022E0CD0032E13D10EE0002001F06D -:101F800017FB0E49032008600D490D603D60E9E72D -:101F900000F060F803E00420F8BD00F039F80028F4 -:101FA000F9D00020F8BD000000430020504A002076 -:101FB000001000404248020000F50140401500407A -:101FC00000120040034900234A7A4B72C98901601C -:101FD000104670470043002010B502F091F9002828 -:101FE00003D101F087FA002801D0042010BD064873 -:101FF000002141720121017004480169102211433E -:102000000161002010BD00000043002000ED00E051 -:102010000C490A78012A05D8002805D0012807D0E4 -:10202000022809D00020704707488861082006E090 -:1020300006488861092002E0054888610A20487046 -:1020400001207047004300200080004000900040C5 -:1020500000A00040074942B20B78012B04D8283277 -:102060002D2A01D2820701D000207047486101204B -:102070007047000000430020F3B58BB0002508A88E -:10208000477C2E462C460A2F02D907200DB0F0BD02 -:102090002022314901A8F9F749F808A9087B0290E4 -:1020A000487B01902D48BF00C05907900020694629 -:1020B0000876487601F09EF8002101A800F062FF42 -:1020C0000028E3D100F0E8FF24482C30C059234F0A -:1020D0003F1F3860FFF780FF002808D100F054F858 -:1020E00001900121684600F0B1FF002801D00320D3 -:1020F000CCE7002E09D0386829180198814206D211 -:1021000068460078019D0402E8E70126F8E7684682 -:10211000007800260443A1042206A307A00B890E21 -:10212000920E9B0F032B00D11B1FFFF7B5FE09A8D2 -:10213000FFF748FF0028D1D009986946000A0871C6 -:10214000012101A801F002F86946099808710121EE -:1021500001A800F0FBFFC1E7D04A02008043002045 -:1021600010B5064900200860054901248C6008610B -:10217000486101F049FA0348047010BD4015004061 -:1021800000F5014000430020F8B51E480169102207 -:10219000114301611C4F01251C4C0026F8680028E2 -:1021A00017D0FE601A48022101602078042810D15F -:1021B0001848456018480068012806D1FEF7F8FA6B -:1021C000002802D0A089401CA08127211348F8F7DD -:1021D000C6FFA069FF300130016C002901D0066400 -:1021E000DCE7406C0028D9D0A069FF30013046649C -:1021F0006078C006C00E8540054805602069401C17 -:102200002061F8BD00ED00E0001100400043002017 -:1022100080E200E00010004000140040504A00201E -:102220001CB50C4600280DD0002A0BD011680029DF -:1022300008D000210191002C14D001784D2903D041 -:1022400007201CBD0E201CBD01210191064913462B -:10225000009101AA2146FEF755FB0028F3D1019910 -:10226000A142F0D009201CBD61320200FFB583B04D -:1022700014460D00064613D0002C11D0002001900A -:1022800013460A4631464D20276801F093FA00288C -:1022900007D12168019A89180191002E03D00CE022 -:1022A0000E2007B0F0BD0648009001AB3A46294623 -:1022B0000698FEF756FB0028F3D101992160F0E75C -:1022C0009732020010B50E4900234A788C78A2425A -:1022D00012D0521CD2B24A70022A00D14B704A78F6 -:1022E000074B920018339A580260086910180002D0 -:1022F000000A0861012010BD0360002010BD00002D -:102300005C4300200248808E401C4007400F70470D -:10231000F4430020F8B5064600780025384C012823 -:102320000DD002285CD168460570F9F741FAA07813 -:10233000002860D0012854D002285CD154E0B18933 -:10234000B06800F0A7FC074668460570F9F730FA58 -:102350002C483818012700282AD0FF38FF381FD012 -:10236000FF280CD02849C84229D1A078012826D0BE -:1023700024484042608100F04DF8E7701FE0234898 -:102380006081A078032805D1A77025636563257057 -:102390006570E57000F03EF8012000F085FA0EE06F -:1023A000A07801280BD10220A0701948608106E0B6 -:1023B000A078022803D10320A070277067706846B8 -:1023C0000078F9F713FAB06801F000FDA07803284F -:1023D00006D1E078002803D000F080FB00F092F9ED -:1023E000F8BD0A48FF3000E00948608100F012F8AB -:1023F000012000F059FA68460078F9F7F7F9F8BDBE -:10240000F4430020FC84FFFFFF80FFFF027D0000FB -:1024100003FC0000F0B5204D89B0002428462C7044 -:102420002C3841891D482E461A3E814203D01B4854 -:10243000FF38814205D1184902241A3902F052F9B5 -:102440000CE017481127814202D01648814205D17D -:10245000114903241A3902F045F9B7702001691CAB -:102460000F3002F03FF90C4800F05CFBE8700420EC -:1024700069460195088103960C82002006908883A6 -:1024800006AA03A901A801F0C1FC002802D000207F -:10249000F8F7C8FF09B0F0BD20440020017E00001D -:1024A00003FC0000047B000030B5204C87B0208E78 -:1024B000A18EC0000843C02125460843243528705A -:1024C000208A691C00010E3080B202F00BF9284608 -:1024D00000F028FBE870002204212846FFF7B2FC38 -:1024E000694608806A46218AE069FFF7ABFC6946C5 -:1024F000088021460C3102F0F5F804206946019568 -:102500000881E0690390208A088220460C300590FB -:102510000220088305AA03A901A801F077FC00287E -:1025200002D00020F8F77EFF07B030BDF443002052 -:102530000EB507486B46818E491C4907490F416318 -:102540000021C1616846017007CB01F00DFC0EBD92 -:10255000F443002010B5806801F038FC002802D058 -:102560000020F8F75FFF10BD38B505460024684627 -:102570000470F9F71DF929460C48F8F772FF002896 -:1025800002D00020F8F74EFF09484179427A114203 -:1025900007D0447168460078F9F728F900F00AF886 -:1025A00038BD68460078F9F721F938BDFC4A0200C9 -:1025B000F443002010B586B000246846047404A8D3 -:1025C000F9F7F6F869460B48F8F743FF002808D0FA -:1025D0000949012048716846007CF9F707F906B0FF -:1025E00010BD6846007CF9F701F9684600F006F86E -:1025F000E3E70000FC4A0200F4430020FEB5404C33 -:10260000012523466778DA899E69D96B3B00F8F784 -:102610009FFE056F042D476872000278012A1ED1C3 -:102620000279022A1BD18268268E1378F6B25B07E4 -:102630005B0F9E4214D1A571E2638089E081062878 -:1026400002D80020F8F7EEFEE08969460D70801F81 -:1026500088806B4607CB01F087FB02206070FEBDCF -:1026600004206070084601F0B1FB16E00378002BEF -:10267000F5D100790128F2D1002E07D03046091D8E -:10268000921FF8F753FDE06B01F0A0FB0320607090 -:10269000208E401C4007400F2063F8F783FEFEBDEC -:1026A00001780129FBD10179012905D00229F6D150 -:1026B000806801F08BFBFEBD002E09D00221684628 -:1026C0000170921F028101963146029A009804E03F -:1026D0000320694608706B4607CB01F045FB657027 -:1026E000FEBD01780129E3D101790129E0D1F6E7A6 -:1026F000A0780328F4D10020F8F794FEFEBD000076 -:10270000F443002038B5002468460470F9F750F807 -:102710000C48F8F7A3FE0C494A794B7A1A4204D0C8 -:10272000002802D08878032804D068460078F9F79A -:102730005DF838BD4C7168460078F9F757F8FFF737 -:1027400039FF38BDFC4A0200F44300201FB50221C6 -:102750006846017000210171FFF7DCFD05488178B2 -:10276000032905D1C078002802D0684600F0ECF8B3 -:102770001FBD0000F44300207FB5484C0578A378C6 -:10278000E2780121002D0FD0012D17D0022D4BD161 -:102790006A46117001781171416802910089908137 -:1027A0000298002817D113E06C4621700078207140 -:1027B000032B39D1002A37D0204633E06C462170F4 -:1027C00000782071032B2FD1002A2DD0204654E011 -:1027D0000020F8F727FE68468089002801D1F8F725 -:1027E00021FE69468E890298042E49D34178080754 -:1027F000000F052806D000280DD00E2819D00F286C -:1028000047D03DE0BFF34F8F26492548C860BFF34E -:102810004F8F00BFFDE7A078032806D1E07800289D -:1028200003D0684600F090F87FBD029801F0CEFA20 -:102830007FBD029D042E23D92878420620D50206AA -:102840001ED54018A978EA78891840180006000EAD -:1028500016D10022B11E2846FFF7F4FAA9191E3935 -:102860004A7F0B7F11021943884209D1A0780328BF -:10287000DBD1E0780028D8D06846FFF775FE7FBD31 -:10288000029801F0A3FA0028F9D00020F8F7CAFD59 -:102890007FBD6846FFF73EFD7FBD0000F44300208A -:1028A0000400FA0500ED00E070B5012149040D4A6D -:1028B00001230D4D0028916011D0FF245534604351 -:1028C0004401261A094C666066688008301860600A -:1028D000EB60074C002060602B60516070BD6B6046 -:1028E00070BD000000A3004000A0004040A50040D3 -:1028F00040A1004010B50E49092008610020486041 -:1029000088600C4A0121D1600B49421E8A60012275 -:1029100052044A600A1509490A60094B1968FF24E4 -:102920002404A14314032143196006490A6010BD21 -:1029300000A5004000A0004000A3004080E200E0AD -:1029400008E400E000E100E038B5054600246846F0 -:102950000470F8F72DFF29460C48F8F782FD00288F -:1029600002D00020F8F75EFD09480179427A114251 -:1029700007D0047168460078F8F738FF00F00AF8CD -:1029800038BD68460078F8F731FF38BDF04A0200DC -:10299000F443002010B586B000246846047404A8EF -:1029A000F8F706FF69460B48F8F753FD002808D0F2 -:1029B0000949012008716846007CF8F717FF06B046 -:1029C00010BD6846007CF8F711FF684600F006F875 -:1029D000E3E70000F04A0200F4430020FEB53E4D5C -:1029E00004462878042701260300F8F7B1FC066D99 -:1029F000041B293C63702078002803D0012810D1E3 -:102A000020791AE0207900280BD1FFF74DFD002036 -:102A1000FFF74AFF0520A863022030E02046FFF7B9 -:102A200099FDFEBD20780128FBD12079002804D132 -:102A30000120FFF739FF2F70FEBD0228EED0FEBD4A -:102A400020780128FBD120790028F1D00228F6D186 -:102A5000A06800F019FE0028E0D00020FFF724FF56 -:102A600005202870DAE7207801280AD00228E6D16C -:102A7000A86B401EA86313D0FFF716FD0320287033 -:102A8000FEBD20790228FBD1A06800F0FDFD0028E2 -:102A9000C4D00020FFF708FFFFF74AFD2E70BDE706 -:102AA000062069460870EA6902920199009801F0CF -:102AB0005BF907E020780128E2D120790028BCD119 -:102AC000FFF736FD2E70FEBDA8780328FBD100204D -:102AD000F8F7A8FCFEBD0000F443002038B5002440 -:102AE00068460470F8F764FE0C48F8F7B7FC0C4928 -:102AF0000A794B7A1A4204D0002802D08878032839 -:102B000004D068460078F8F771FE38BD0C7168464D -:102B10000078F8F76BFEFFF73DFF38BDF04A020082 -:102B2000F443002001784278807851184018C0435F -:102B3000401CC0B270470000F8B51F4C2078002838 -:102B400039D02069002807D00026E068002805D089 -:102B50000025002E04D014E00126F6E70125F8E751 -:102B60006078002827D1684652DF052804D0002865 -:102B700004D0F8F757FC04E0012602E02169009830 -:102B80008847002D13D16078002814D160886946E9 -:102B90000880A06861DF052804D0002804D0F8F779 -:102BA00041FC04E0012502E0E168A0688847002EAE -:102BB000D6D0002DCDD0F8BD984400201048018C0F -:102BC000C9B2012917D1818C090714D1018D0906D9 -:102BD0000A0F03D1828D1206120F0ED0090F0129A0 -:102BE00003D1828D1206120F07D0032903D1808DE5 -:102BF0000006000F01D00020704701207047000040 -:102C0000C00F00F0FFB583B00C9C1E461746258808 -:102C100023460499039801F06AFD002808D1208812 -:102C2000019033463A46009504990398FDF762FDFA -:102C300007B0F0BDFFB581B01D4616460A9C074699 -:102C400023462A46314602A801F063FD002807D139 -:102C50006846009401892B4632463846FDF77FFDD1 -:102C600005B0F0BDFFB583B00C9C1E461746257815 -:102C700023460499039801F0AEFD002808D120787E -:102C8000019033463A46009504990398FDF732FDCA -:102C900007B0F0BDF0B50246407914790002204338 -:102CA0001478124BA50900D018465578D6786419C7 -:102CB0009578114FAD19641924060D4D0D4E240E53 -:102CC00009D1B84201D0A84207D1072900D018463F -:102CD0009179112900D01846F0BDB04203D0054AC1 -:102CE000FF3A9042F7D10629F5D1F0BDFFFF000071 -:102CF000047B0000017E000003FC0000F8B52C49B5 -:102D0000C8680A690C780F798968864694460091EC -:102D10003EE00099E20055182A7836E01823534324 -:102D20006968521CC918AB78D2B2934200D1002214 -:102D30000B78022B02D0032B27D123E04E680346E9 -:102D4000014603E0B14204D00B46C96900291CD0FA -:102D5000F8E7002919D08B4208D1C069002805D1B5 -:102D6000144F0126BE600026B44601270E68C969CB -:102D7000D961002909D00B689B190B6005E001742B -:102D8000C06900E000210028F9D169789142C5D1DD -:102D90002146641EE4B20029BBD1054962460A619E -:102DA000C8600F71704501D00120F8BD0020F8BD4A -:102DB0005C43002000100140F8B50446314800266D -:102DC000C168009107784EE02E48F90080680D1820 -:102DD00043E0002C02D02046E4691FE02878182147 -:102DE00041436A68401CC0B251182870AA789042CA -:102DF00000D12E700A784868012A30D1027C002A5E -:102E00002DD18A684260CA6882600A69C2604969D5 -:102E100081611C490979002900D04660194943683D -:102E20000A699C46991A0902174B090A994202D26B -:102E30008268891807E06146511A09028268090A06 -:102E40008A4202D9511A016000E006604660012101 -:102E500086600174C66101F0CDFA002CB9D12878E2 -:102E600069788842BAD138467F1EFFB20028ABD1BC -:102E70000448C1680098814201D00120F8BD0020BB -:102E8000F8BD00005C430020FFFF7F0008B51F492C -:102E9000012088631E4A10214820F8F7DDFB002836 -:102EA00001D0F8F7BFFA1B480023006800904822C1 -:102EB0001949684601F074F9002801D0F8F7B2FA10 -:102EC000164801F05FF9002801D0F8F7ABFA144872 -:102ED00000F00CFE14E0F8F7A9FB01F07BF90028E4 -:102EE00007D0F8F7E5FB082803D901F079F9F8F7DE -:102EF0009DFB00F0DFFD002801D0F8F793FA48DFD2 -:102F00000028E8D0F8F78EFAE5E70000400000401E -:102F1000B8440020FCFF0100084A0020B538020038 -:102F2000D53902008207D30EFF229A408907090E85 -:102F300010B5994000280BDA03071B0F083B9C08CB -:102F40000C4BA400E318DC6994430C43DC6107E0FC -:102F50008408094BA400E418236893430B432360BF -:102F6000C106C90E01208840044908600449086070 -:102F700010BD000000ED00E000E400E080E200E0B1 -:102F800000E100E0F3B52A4C0746E07E81B000285E -:102F900001D00820FEBD002F00D1264F0126387831 -:102FA0003146814024488160386800F0A1F9002151 -:102FB000786800F094F9214DB8696862787D397DB0 -:102FC0000843E86603CFE8606961387B083F012861 -:102FD0000FD10021B86800F082F9387B314681407A -:102FE00015488160F86800F083F9F968B868A9604D -:102FF0002861029860603969216000280ED0FF23A3 -:103000000F481D33397F0022C250FF234533C25081 -:103010000D4A0C4850600220FFF784FF042028600E -:103020000020E0752076A075E676A076FEBD000053 -:10303000784A002088480200000500500025004022 -:10304000002000408000020000230040F8B5104B33 -:1030500081245E680022A4000E4D002E00D0AC60DA -:10306000DF7D002F0BD01A7E002A04D0002E00D066 -:103070006C601120F8BD18610122197604E0D97541 -:103080000024D8605C761C7600F012F8F8BD0000D1 -:10309000784A00200023004010B5044CA07E002890 -:1030A00003D100F037FB0120A07610BD784A002044 -:1030B000F8B5234DA87E104301D100F02BFB6868C2 -:1030C000204C002805D081201F4980004860002046 -:1030D000F8BDFF20453000212150FF212531204639 -:1030E000FCF787FF0546FF2109312046FCF781FFE9 -:1030F0000746FF2145312046FCF77BFF064639464F -:1031000031432943E9D02846304306D100F0D8FAAC -:103110000B48C17D407E8142DFD800210848002D48 -:10312000C17501D00320F8BD002E01D00F20F8BDDD -:10313000817E0120002901D02060C8E76060C6E7D9 -:10314000784A0020002000400023004010B50346CC -:1031500000F048F8002801D0112010BD034A0020DB -:1031600091759360908200F003F810BD784A0020BA -:10317000F8B50026194FFF251D357E510120B86096 -:1031800001F098F9164C6168002910D022E0FF2761 -:10319000013729461148FCF72CFF002802D1A08AEC -:1031A000B842F6D1A08AB84201D001F083F9A08AD2 -:1031B000A17D8842EBD3A18AC81FF9380CD0074FF4 -:1031C00029463846FCF715FF0028F9D00120F860A1 -:1031D0000020A0753046F8BD0F26F9E7002000401A -:1031E000784A00200248807D002800D001207047E6 -:1031F000784A0020F8B5154900260E60144840684A -:10320000002805D0144A13489060144A0420106026 -:10321000CA684F698D680C690020C043C860486166 -:1032200088600861104600F051F8384600F04EF80A -:10323000601C02D0204600F049F8681C02D02846E5 -:1032400000F044F80248C6764660F8BD002500400C -:10325000784A0020840202000023004080E100E060 -:10326000FFB583B010251C46029316460F46009505 -:10327000019502AB0398FDF73DFA002809D11034FF -:10328000009502AB32463946019502940398FDF74A -:1032900031FA07B0F0BD08B5009313460A46102175 -:1032A0002030FDF75CFA08BD30B552000A439900A2 -:1032B000039C0A432102049D0A4329040A4302494C -:1032C00080004018026030BD000700501CB500218E -:1032D00000910B4601220191FFF7E6FF1CBD1CB5D2 -:1032E00000220B46009211460192FFF7DDFF1CBD44 -:1032F0001CB5002100910B46012201911146FFF7F8 -:10330000D3FF1CBD0322120280184068084000D081 -:103310000120704770B5049C1D460E46002A0AD055 -:10332000002D08D0002C06D029682368C91A052969 -:1033300003D2092070BD0E2070BD591C2160D054ED -:1033400020688118304601F0FFF92168401820609C -:103350002860002070BD0000F7B584B000250095FE -:1033600001950520694602950870097C554F032692 -:10337000387804240B00F7F7EBFF07051657637B3B -:1033800081866700787803285ED17C704E4800F013 -:103390001DFC002801D0F8F745F82946684605705D -:1033A0000A4600988AE001216A461170918AFF223C -:1033B0008132914219D8012802D004280DD043E06F -:1033C0006B4607CB7B689847404800F043FE0028D7 -:1033D00001D0F8F727F8022004E06B4607CB7B68A2 -:1033E00098470520387007B0F0BD012802D00428A6 -:1033F0000DD029E06B4607CB7B689847002000F092 -:1034000029FE002801D0F8F70DF83E70EBE76B4677 -:1034100007CB7B689847002000F01CFE002801D0F5 -:10342000F8F700F80620DDE702280DD13C700221F4 -:1034300068460170059801906846018B01813BE068 -:10344000032805D006280BD00020F7F7EBFFCAE7CA -:10345000684606706B4607CB7B6898470120C1E73A -:10346000684606706B4607CB7B6898473C70BAE7A6 -:103470006846047005712A46019992E769460C7006 -:103480000120087118E06A46147002211171059933 -:1034900002917978032902D0022805D00CE07C70D3 -:1034A000069800F093FB03E03C70069800F040FBA8 -:1034B000002801D0F7F7B6FF6B4607CB7B6898472B -:1034C00091E70000EC4300204C4F0020CC5000203E -:1034D000002806D0002908D000783C2803D0072017 -:1034E00070470E207047012901D009207047002045 -:1034F0007047000010B52A48C06A00070CD428485D -:103500004030C26A27494A62026B8A62426BCA62D1 -:10351000826B0A63C06B4863234CFC2260690146DE -:10352000914308D140B2042805DC2821C84202DBBF -:10353000207A032801D9042010BD00F065F81B484B -:103540006169C160217A0161416A090A0902416227 -:10355000426AA16A0B0E1A4342620902C16101214B -:1035600001630021C1626179E2790902114341637B -:103570002179E278090412021143A27811434161D2 -:10358000A18C228C490612061143A28B120411430E -:10359000A2791202114325318161002010BD000083 -:1035A000800000100017004000430020001500407C -:1035B00070B50F4900230B600E4A0D49D46A40399B -:1035C0008C63146BCC63D46B6400A41C8C600A4CB9 -:1035D0004C600A4C23600A4E03253560002804D055 -:1035E000E36008490120486070BD5069C86070BD43 -:1035F0004015004000430020504A002000110040C8 -:103600000012004000100040094903208860094969 -:103610000020086008490861084A012313610B690A -:10362000002BFCD00861506010600549888170470C -:1036300000F5014000120040001100400010004061 -:103640000043002070B501240B49600408600B4959 -:1036500040108860094940398860094D6C602F200E -:10366000F7F738FDAC60074D00242F202C61F7F7E9 -:1036700031FDEC7070BD000080E100E040130140BE -:10368000001001405C43002010B501784278837837 -:10369000C0788A18181810180006000E0ED1880677 -:1036A000440FFEF72FFEA04206D0FEF72BFE401C73 -:1036B0004007400FA04201D1012010BD002010BDE5 -:1036C00030B50A48FF21C57D0022094C0931094B5C -:1036D000002D625007D09969437EC268D154417E63 -:1036E000491C417630BD986930BD0000784A002001 -:1036F00000200040002500401FB501236A461370DA -:1037000010720348019106C8684690471FBD00002B -:10371000784A0020FF220548253200218150FF22EF -:1037200009328150012101607047000000200040F3 -:1037300010B50446F7F728FE00280CD0A007C00EED -:10374000002C0ADA2107090F08398908144A890070 -:103750008918C96906E0134810BDA108124A8900FA -:1037600089180968C1400806800F042811D2002872 -:103770000FD002280DD00D494B68E206D20E012071 -:103780009040002B08D0620992008B5803438B5065 -:1037900004E00448401C10BD05490860002010BD2D -:1037A00000ED00E00120000000E400E0AC44002057 -:1037B00000E100E010B51C460B46002A06D0002CA4 -:1037C00004D02168052903D2092010BD0E2010BDA8 -:1037D0001070511C184600F0B7FF401C20600020FC -:1037E00010BDF8B5074610681546081A0E461C4667 -:1037F000072801D20920F8BD384600F0E1FF631C1C -:103800002A463146384600F0DBFFA31C2A463146E3 -:10381000384600F035FF231D2A463146384600F071 -:10382000CFFFA31D2A463146384600F029FF00206D -:10383000F8BD00001CB5040002D10E20F7F7F2FD20 -:10384000002001900090694601A800F09FF904282B -:10385000F9D0002801D0F7F7E5FD019A0220107099 -:1038600000986B46401E009000212046521CF8F73D -:1038700011F9062811D0002801D0F7F7D3FD0098E0 -:10388000401C81B20090019800F0BAF9002801D0E4 -:10389000F7F7C8FDF7F7F8FE1CBD019800F096F9A0 -:1038A000002801D0F7F7BEFD0148F7F7BBFD1CBDAE -:1038B000FECADDBA10B54188074A091D89B2F7F77B -:1038C00059FE002801D0F7F7ADFDF7F7F1FE00280B -:1038D00001D100F0A7FC10BD353802007FB50E46BF -:1038E00004000FD0002E10D0002002900190257807 -:1038F000039001A902A800F049F90428F9D0002892 -:1039000005D020E00E2004B070BD0920FBE7029A2C -:1039100001201070019801AB401E019031462046F5 -:10392000521CFEF7FFF906280BD10D48F7F77AFD78 -:1039300003A8029A009001AB06212846521CFFF70B -:10394000E9FC002801D00320DDE70198401C81B28A -:103950000190029800F054F90028F4D1D3E7000058 -:10396000FECADDBA7CB50D46040018D000200190D7 -:103970000090694601A800F009F90428F9D0002850 -:103980000ED10199042008700098114A401E009041 -:1039900029462046F7F7F5FF002802D016E00E2052 -:1039A0007CBD01996A460020491CF8F711F80028EF -:1039B0000CD10098064A401C0121521E0090117043 -:1039C00081B2019800F01CF90028E9D003207CBDE9 -:1039D000D943002007B5684600780300F7F7B8FC24 -:1039E0000504090C14160800F7F774FE00F016F829 -:1039F0000EBDF7F749FE0EBD0648029A0199826096 -:103A00004160012101700EBD034800E00F20F7F76F -:103A100009FD0EBDE0430020FECADDBA1CB5094811 -:103A2000007800280CD011DF00F052F8054906227A -:103A3000491C6846F7F77AFB01990098FEF71CFBD2 -:103A40001CBD0000D843002010B5040020D022681F -:103A5000A188501C491E127889B2002A07D0032A77 -:103A600008D0052A0BD00B48F7F7DCFC09E0FFF77C -:103A700035FF01E0FFF776FF002802D006E000F0F6 -:103A80000BF8206800F054F8002800D0032010BD87 -:103A90000E2010BDFECADDBABFF34F8F04490348A4 -:103AA000C860BFF34F8F00BFFDE700000400FA05B8 -:103AB00000ED00E010B5054900200A78002A03D087 -:103AC0000870081DFFF7C0FF10BD0000E043002094 -:103AD00010B500F059FA04480021017041704160AE -:103AE00000F036F910BD0000EC43002010B50E4C7C -:103AF00021786278114301D0082010BD002810D031 -:103B00000121217061706060084800F06DFA0028A2 -:103B1000F3D000212170617061600728EDD003208F -:103B200010BD0E2010BD0000EC43002059330200F0 -:103B300070B50546002400F027FA002D04D0114886 -:103B4000854203D010240AE00E2408E00E4D2878A8 -:103B5000042808D0062808D0052808D0082400F03A -:103B600023FA204670BD012009E0032007E0054844 -:103B700000F070FA040001D00324F0E7022028705E -:103B8000EDE70000CC500020EC430020024610B5C9 -:103B90000020002A09D0002907D00A4B5C78002CAD -:103BA00005D0012C05D0042010BD0E2010BD08202A -:103BB00010BD02245C70044B1360FF2281320A8026 -:103BC00010BD0000EC4300204C4F002001460020B7 -:103BD000002904D0084A914203D0102070470E20DB -:103BE000704706494A78022A03D0042A01D00820E7 -:103BF000704701224A7070474C4F0020EC43002070 -:103C000070B50C46050006D0002C06D0134885423E -:103C100005D010240EE00E240CE007240AE0FF205B -:103C20008130844201D90C2404E00D4E70780228C2 -:103C300002D00824204670BD00F0A6F9214628468F -:103C400000F01EFA040005D0112C00D0032400F06F -:103C5000ABF9EFE703207070F9E700004C4F00204C -:103C6000EC430020F8B56946364C0870617A0123B0 -:103C70000025002903D0A16A002905D006E0C0284C -:103C800001D1A5626372F8BDC028FCD02D4AE66858 -:103C90001269002E02D0A77A002F0AD0002A3DD048 -:103CA000A3726261FF228732914239D3C02835D195 -:103CB00036E0002908D0042908D0FF22873291423B -:103CC0000DD3C0282AD10AE0666108E0C02806D0DA -:103CD000002A23D01B491C48C969016060616846FD -:103CE00000F016FA00280AD060780028CBD1684688 -:103CF00001786269A06A1154401CA062F8BD616934 -:103D0000E068814201D1E56000E025610F480222B0 -:103D100002704160218D0181216A88476572F8BD7A -:103D2000684600F0F5F90028DED10848022101704C -:103D300061694160218D0181216A88476572256131 -:103D4000A572F8BD3C440020CC54002054560020FD -:103D500070B5044C0025256200F00EF825706570E2 -:103D6000A57070BDF4430020024B1B6A002B00D0ED -:103D700018477047F443002010B50349002008623B -:103D8000F7F7BCFC10BD00003C44002070B50500F6 -:103D900005D00A4C206A002803D0082070BD0E20F0 -:103DA00070BD0323064A00210648F7F7ADFC03491E -:103DB0001C31E16004492562216170BD3C44002052 -:103DC000B9400200084B0200CC54002001460020FC -:103DD000002908D00B4B1A461C3A994209D1D168E8 -:103DE000002902D003E00E207047D36070470820FE -:103DF0007047054B9942FBD111690029F7D1136136 -:103E00007047000058440020CC540020F8B50D46FF -:103E1000064600206946087014466846F7F7C8FC55 -:103E2000002E13D01748C178002911D0002C02D0E1 -:103E300006CC82654165002D03D0124806CD02658F -:103E4000C164104806CE8264416414E00E20F8BDBF -:103E50000C490CCE0B63CA62002D02D00CCD8B63D3 -:103E60004A63002C03D007490CCC0B64CA630121C0 -:103E7000C17000F009F868460078F7F7B7FC002039 -:103E8000F8BD00003C440020F8B53D4C0126E07927 -:103E90003C4F0025002805D0E571FCF7B3FCE0702D -:103EA0003E7007E0207A002808D02572FCF7AAFCB3 -:103EB000E0703D70216A334888475AE02179606A92 -:103EC00062798C460143A3791143964619430ED07B -:103ED000A2699188814212D1002B10D0C020F7F73F -:103EE00055FC27483C300560A571656231E02448E7 -:103EF00026712C30A061C020F7F748FC39E0204F34 -:103F00003437814210D16346002B0DD0656238688A -:103F1000002803D025716671A7612CE0C020F7F757 -:103F200035FC2571E67124E0814214D171460029E7 -:103F300011D0134865623C300168002904D03D600F -:103F40006571A671A06116E0C020F7F71FFC3D6007 -:103F5000657126720DE0A17800290CD0A57011685A -:103F6000085CC0280AD0DD20F7F710FC606A401C0E -:103F700060620020F8BD00F0EDF8FAE7DC20F3E71E -:103F80003C4400205456002038B500246846047094 -:103F9000F7F70EFC0348C471447268460078F7F7DF -:103FA00025FC38BDF4430020F8B5002568462E46B0 -:103FB0000570F7F7FDFB0B4C0127E771207A00280D -:103FC00001D02672012568460078F7F70FFC67726A -:103FD000FEF784FDFEF796FB002D01D0FEF7B6FB41 -:103FE000F8BD0000F443002070B5174C0646207859 -:103FF0006178084301D0082070BD002E04D0FEF780 -:1040000079FC00280DD101E00E2070BD0F48F7F7B4 -:1040100015FA002805D10D480C30F7F70FFA0028E3 -:1040200001D0032070BD0A48FFF7B0FE0028F9D187 -:1040300000252563266201206563FEF735FC01201B -:10404000A070E570284670BDF4430020F04A0200DD -:10405000792702001FB5094900248A79002A09D06E -:1040600000228A7188616846027001210171FEF7A1 -:104070007BFA00E01124204604B010BDF443002078 -:104080001FB50024002809D0002907D0094AD369A8 -:10409000002B05D01124204604B010BD0E20FBE7F4 -:1040A0001182D06100206946087008716846FEF7E9 -:1040B0004BFCF0E7F443002010B500280AD002784A -:1040C0001149022A07D0032A10D0042A11D0032054 -:1040D000F7F7A8F910BD40688207FBD00B4A03230D -:1040E00013705060096A1046884710BDFFF7CCFE78 -:1040F00010BD0A78002A01D101220A700079C87225 -:10410000FFF7B0FD10BD00003C44002054560020D5 -:1041100010B50478C02C0AD00D49DB2C09D00A4612 -:1041200000235278DC2C07D0DD2C0FD109E00020D1 -:1041300010BD0120487009E0002A07D04B70C02153 -:1041400003E0002A02D04B70DB210170012010BD7A -:104150003C44002010B50A4CA069616A0068405CCC -:104160000121C02807D0DB2805D0F7F70FFB606AD4 -:10417000401C606210BDA170DB20F7F707FB10BD8B -:104180003C440020002803D00249C860002070474A -:104190000E2070479844002010B5F7F723F910BDA2 -:1041A00070B5002901D08C0701D0072070BD074CE5 -:1041B0000125A16062800649636010DF0028F5D107 -:1041C00025701620FFF7B4FA70BD00009844002057 -:1041D000994102000148407870470000984400204F -:1041E00010B50D484178002915D0002141701620E6 -:1041F000F7F7CAF8002804D00120084980050860B4 -:1042000002E00748F7F70EF91620FFF791FA0028A9 -:1042100001D0F7F707F910BD9844002000E200E054 -:104220000120000010B51620F7F7AEF80124002891 -:1042300008D009484268A105002A07D002688A43CD -:10424000026005E00548F7F7EDF801E00448016079 -:1042500001481438447010BDAC4400200120000017 -:1042600080E100E01CB50C4600280DD0002A0BD0E0 -:104270001168002908D000210191002C13D0037887 -:10428000532B03D007201CBD0E201CBD012301931E -:104290000091134601AA2146FCF734FB0028F4D113 -:1042A0000199A142F1D009201CBDFEB51D4607466B -:1042B00014460E0016D0002D14D0002C12D0002071 -:1042C0000090206813460A46019039465320FFF7B4 -:1042D00071FA002807D12168009A89180091002FEF -:1042E00002D009E00E20FEBD6B4631462846019AF9 -:1042F00000F04DFA0028F6D100992160FEBD0000C3 -:1043000070B5154800210160012382051360026821 -:10431000002AFCD0114DA8694360C3600522120237 -:1043200084186160C21DF932116451649164D164D2 -:10433000012203261204360286197260D21113502C -:10434000042222616A6B2264FF22053262640360E8 -:104350000020296170BD00000001004000430020E2 -:10436000FEB51F4C00252769E06802906846FDF7FE -:10437000A9FF0190FEF7C2FC06460198002822D052 -:1043800000230098E16817E00E680A46864202D9C9 -:10439000301A086012E0801BF31800261660D668F9 -:1043A000D169B446002E07D0FE183602360A566090 -:1043B00066469660D56115460029E5D12846E1603C -:1043C000FEF7FAFC06E02846FEF7F6FC002801D1CD -:1043D000002E02D00298FCF741FA00202071FEBDA9 -:1043E0005C4300200120024900050860704700007E -:1043F00000E200E010B50E4BD968002906D0026833 -:104400000C68A24204D8A21A0A60C161D86010BD2B -:104410000B4604E00B46C969121B002904D00C6846 -:104420009442F7D3A41A0C600260C161D86110BD38 -:104430005C430020F8B51D4DEC68002C34D01C48BE -:10444000002740682969401A0602360A2068B042EF -:1044500018D8361AC7192246107CE46900280FD0F4 -:10446000002010746B69002B07D091695069984740 -:10447000002805D0F6F7D6FF02E051699069884719 -:10448000002CE3D16978A878814206D1401CC0B2E3 -:10449000A870022801D10020A87004490006800DF0 -:1044A00018310F50FFF79EFFF8BD00005C4300205D -:1044B00000150140FF2107481D31002242500648E7 -:1044C000828A8168895C828A521C82820348C16127 -:1044D0007047000000200040784A0020002500407E -:1044E0001FB500216A46117010720448826801925B -:1044F000817506C8684690471FBD0000784A0020B5 -:104500001CB50178134C012908D0022914D00029C8 -:104510001FD1032069460870684618E004226946E6 -:104520000A704068007808710A480121401CFEF7B3 -:104530008DFD0120A07009E002216A461170C0685B -:10454000019004480121401CFEF780FD6846616827 -:1045500088471CBD40430020F0B5454D012185B082 -:1045600049022846FEF7CEFE01270026414C0028CE -:1045700024D0FF2125312846FBF73BFD00281DD024 -:10458000FF2025302E5081203B4980008860A07E8E -:10459000002800D16F600221684601703749086821 -:1045A00008600390E17D68460172E0680190E6755D -:1045B000267606CC6846083C90472BE00421284626 -:1045C000FEF7A0FE002825D0FF2109312846FBF781 -:1045D00010FD00281ED0FFF773F8E07D617E884251 -:1045E00018D1207E002808D0627EE168E07520693D -:1045F000E0602676667610460AE0A07E002800D1AC -:104600006F6081201C4980008860E675607EE168EB -:10461000FFF772F8FF211D312846FBF7EAFC00285E -:104620000DD0A18AA07D814202D2FFF743FF06E0B0 -:10463000FF211D316E50002801D0FFF751FFFF21EF -:1046400045312846FBF7D5FC00280ED0FF20453029 -:104650002E50A07E002800D02F60E07D002804D0DE -:10466000E675607EE168FFF747F805B0F0BD000031 -:1046700000200040784A00200023004080240040B1 -:1046800030B51468A51C8D4208D8201841780478EC -:104690000802204318801068801C106030BD08702C -:1046A000000A4870022070470870000A4870022013 -:1046B00070470870000A4870022070470870000AAE -:1046C0004870022070470870000A48700220704746 -:1046D0000870000A4870022070470870000A48708D -:1046E000022070470870000A48700220704710B519 -:1046F0001468091B022901D2092010BD2018417835 -:1047000004780802204318801068801C1060002084 -:1047100010BD10B51C68121B022A01D2092010BD61 -:10472000008861180870000A48701868801C1860BA -:10473000002010BD10B50446F6F729FD0002E1780F -:10474000000A0906084310BD0870020A4A70020CEC -:104750008A70000EC8700420704770B51446002897 -:104760000AD0002C08D0002B06D022681D46891ADA -:10477000042903D2092070BD0E2070BD1018FFF768 -:10478000D9FF28602068001D2060002070BD10B592 -:104790001C46002909D0002807D0002C05D023682A -:1047A000D21A042A03D2092010BD0E2010BD5918B8 -:1047B0000068FFF7C9FF216840182060002010BD85 -:1047C00030B51468651C8D4204D8005D18701068FF -:1047D000401C106030BD10B514688C4201D1092016 -:1047E00010BD005D18701068401C1060002010BDE6 -:1047F00010B51C68944201D1092010BD00780855FD -:104800001868401C1860002010BD70B5049C0D464F -:10481000002809D0002A07D0002C05D021685B1A97 -:10482000AB4203D2092070BD0E2070BD8B1801462B -:104830002A461846F6F77AFC2068401920600020C6 -:1048400070BDFFC1FBE84C90728BE7B3518963AB3D -:10485000232302841872AA612F3B51A8E53749FB34 -:10486000C9CA0C18532CFD00090000000B00000001 -:104870000A00000008000000000000000000000026 -:1048800000E0D70103000000090000000B00000059 -:104890000A00000008000000000000000000000006 -:1048A00000E0D701030000003C000000651D02008D -:1048B00053000000851D02004D000000EB1C0200AB -:1048C00062000000251B020063000000731C020050 -:1048D00064000000CD1B0200650000001B1C0200EC -:1048E00066000000B51C020069000000671A0200A3 -:1048F00068000000A91A020060000000310B0200ED -:1049000067000000611B0200B0000000C119020036 -:10491000B1000000F1190200B2000000211A0200EB -:104920008B0000002912020070000000AB0B020097 -:104930008C000000290E02008D000000B30E020062 -:104940008A000000B3110200860000004B12020032 -:1049500085000000990F020071000000750B020035 -:1049600072000000E50B0200730000003F0C020023 -:1049700074000000AF0C020075000000B50D0200CD -:1049800076000000650F0200770000004913020066 -:1049900078000000070D020079000000D10C020031 -:1049A0007A000000151102007B000000DF100200F9 -:1049B0007C000000190F02007D000000D50E0200EF -:1049C0007E0000007B0D02007F0000009D120200AF -:1049D00080000000370D0200860000004B1202002C -:1049E00087000000EF0D0200880000004711020060 -:1049F000890000008311020082000000E10F020024 -:104A000081000000151002008400000099100200CF -:104A1000830000005110020090000000F514020015 -:104A20009100000077150200920000004D14020072 -:104A3000930000008714020095000000B7130200E5 -:104A400096000000391502009700000003140200D0 -:104A500098000000B115020099000000C114020086 -:104A60009400000079130200A0000000E11702008A -:104A7000A10000004F170200A2000000FF15020075 -:104A8000A30000008F160200A400000069190200B4 -:104A9000A50000001B190200A6000000F11602008C -:104AA000A70000002D180200A800000095170200C2 -:104AB000A9000000C7180200AA000000691802003F -:104AC00067000000611B02000002000000000000FF -:104AD000090000000B0000000A00000008000000B0 -:104AE000000000000000000000E0D701030000000B -:104AF0004C52002034440020100010008C53002041 -:104B000038440020100010000B09080A01000000C2 -:104B100000E0D701344B020000430020B801000040 -:104B2000C8B10100984B0200B8440020A819000049 -:104B30007AB30100111408080112010310030312D3 -:104B400080AA401427294176715B061455555503F8 -:104B5000467102423323F00423D00923B0133350AB -:104B600027223B1BA04E181A75101A9D0822EB1421 -:104B7000903A012CE0D701303223321B32175A15FC -:104B8000045A14041942790401202A01F604B501DB -:084B9000017E1324F400000073 -:00000001FF diff --git a/hex/sd_api_v2/s130_nrf51_2.0.1_license-agreement.txt b/hex/sd_api_v2/s130_nrf51_2.0.1_license-agreement.txt new file mode 100644 index 000000000..09a78bbc6 --- /dev/null +++ b/hex/sd_api_v2/s130_nrf51_2.0.1_license-agreement.txt @@ -0,0 +1,96 @@ +S110/S120/S130/S132 license agreement + + +NORDIC SEMICONDUCTOR ASA SOFTDEVICE LICENSE AGREEMENT + +License Agreement for the Nordic Semiconductor ASA ("Nordic") S110, S120, S130 and S132 Bluetooth SoftDevice software packages +("SoftDevice"). + +You ("You" "Licensee") must carefully and thoroughly read this License Agreement ("Agreement"), and accept to adhere to this Agreement before +downloading, installing and/or using any software or content in the SoftDevice provided herewith. + +YOU ACCEPT THIS LICENSE AGREEMENT BY (A) CLICKING ACCEPT OR AGREE TO THIS LICENSE AGREEMENT, WHERE THIS +OPTION IS MADE AVAILABLE TO YOU; OR (B) BY ACTUALLY USING THE SOFTDEVICE, IN THIS CASE YOU AGREE THAT THE USE OF +THE SOFTDEVICE CONSTITUTES ACCEPTANCE OF THE LICENSING AGREEMENT FROM THAT POINT ONWARDS. + +IF YOU DO NOT AGREE TO BE BOUND BY THE TERMS OF THIS AGREEMENT, THEN DO NOT DOWNLOAD, INSTALL/COMPLETE +INSTALLATION OF, OR IN ANY OTHER WAY MAKE USE OF THE SOFTDEVICE. + +1. Grant of License +Subject to the terms in this Agreement Nordic grants Licensee a limited, non-exclusive, non-transferable, non-sub licensable, revocable license +("License"): (a) to use the SoftDevice solely in connection with a Nordic integrated circuit, and (b) to distribute the SoftDevice solely as integrated +in Licensee Product. Licensee shall not use the SoftDevice for any purpose other than specifically authorized herein. It is a material breach of this +agreement to use or modify the SoftDevice for use on any wireless connectivity integrated circuit other than a Nordic integrated circuit. + +2. Title +Nordic retains full rights, title, and ownership to the SoftDevice and any and all patents, copyrights, trade secrets, trade names, trademarks, and +other intellectual property rights in and to the SoftDevice. + +3. No Modifications or Reverse Engineering +Licensee shall not, modify, reverse engineer, disassemble, decompile or otherwise attempt to discover the source code of any non-source code +parts of the SoftDevice including, but not limited to pre-compiled hex files, binaries and object code. + +4. Distribution Restrictions +Except as set forward in Section 1 above, the Licensee may not disclose or distribute any or all parts of the SoftDevice to any third party. +Licensee agrees to provide reasonable security precautions to prevent unauthorized access to or use of the SoftDevice as proscribed herein. +Licensee also agrees that use of and access to the SoftDevice will be strictly limited to the employees and subcontractors of the Licensee +necessary for the performance of development, verification and production tasks under this Agreement. The Licensee is responsible for making +such employees and subcontractors comply with the obligations concerning use and non-disclosure of the SoftDevice. + +5. No Other Rights +Licensee shall use the SoftDevice only in compliance with this Agreement and shall refrain from using the SoftDevice in any way that may be +contrary to this Agreement. + +6. Fees +Nordic grants the License to the Licensee free of charge provided that the Licensee undertakes the obligations in the Agreement and warrants to +comply with the Agreement. + +7. DISCLAIMER OF WARRANTY +THE SOFTDEVICE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND EXPRESS OR IMPLIED AND NEITHER NORDIC, ITS +LICENSORS OR AFFILIATES NOR THE COPYRIGHT HOLDERS MAKE ANY REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE OR +THAT THE SOFTDEVICE WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. THERE +IS NO WARRANTY BY NORDIC OR BY ANY OTHER PARTY THAT THE FUNCTIONS CONTAINED IN THE SOFTDEVICE WILL MEET THE +REQUIREMENTS OF LICENSEE OR THAT THE OPERATION OF THE SOFTDEVICE WILL BE UNINTERRUPTED OR ERROR-FREE. +LICENSEE ASSUMES ALL RESPONSIBILITY AND RISK FOR THE SELECTION OF THE SOFTDEVICE TO ACHIEVE LICENSEE’S +INTENDED RESULTS AND FOR THE INSTALLATION, USE AND RESULTS OBTAINED FROM IT. + + +8. No Support +Nordic is not obligated to furnish or make available to Licensee any further information, software, technical information, know-how, show-how, +bug-fixes or support. Nordic reserves the right to make changes to the SoftDevice without further notice. + +9. Limitation of Liability +In no event shall Nordic, its employees or suppliers, licensors or affiliates be liable for any lost profits, revenue, sales, data or costs of +procurement of substitute goods or services, property damage, personal injury, interruption of business, loss of business information or for any +special, direct, indirect, incidental, economic, punitive, special or consequential damages, however caused and whether arising under contract, +tort, negligence, or other theory of liability arising out of the use of or inability to use the SoftDevice, even if Nordic or its employees or suppliers, +licensors or affiliates are advised of the possibility of such damages. Because some countries/states/jurisdictions do not allow the exclusion or +limitation of liability, but may allow liability to be limited, in such cases, Nordic, its employees or licensors or affiliates’ liability shall be limited to +USD 50. + +10. Breach of Contract +Upon a breach of contract by the Licensee, Nordic and its licensor are entitled to damages in respect of any direct loss which can be reasonably +attributed to the breach by the Licensee. If the Licensee has acted with gross negligence or willful misconduct, the Licensee shall cover both +direct and indirect costs for Nordic and its licensors. + +11. Indemnity +Licensee undertakes to indemnify, hold harmless and defend Nordic and its directors, officers, affiliates, shareholders, licensors, employees and +agents from and against any claims or lawsuits, including attorney's fees, that arise or result of the Licensee’s execution of the License and which +is not due to causes for which Nordic is responsible. + +12. Governing Law +This Agreement shall be construed according to the laws of Norway, and hereby submits to the exclusive jurisdiction of the Oslo tingrett. + +13. Assignment +Licensee shall not assign this Agreement or any rights or obligations hereunder without the prior written consent of Nordic. + +14. Termination +Without prejudice to any other rights, Nordic may cancel this Agreement if Licensee does not abide by the terms and conditions of this +Agreement. Upon termination Licensee must promptly cease the use of the License and destroy all copies of the Licensed Technology and any +other material provided by Nordic or its affiliate, or produced by the Licensee in connection with the Agreement or the Licensed Technology. + +15. Third party beneficiaries +Nordic’s licensors are intended third party beneficiaries under this Agreement. + + diff --git a/hex/sd_api_v2/connectivity_2.0.1_1m_with_s130_2.0.1.hex b/hex/sd_api_v2/s130_nrf51_2.0.1_softdevice.hex similarity index 73% rename from hex/sd_api_v2/connectivity_2.0.1_1m_with_s130_2.0.1.hex rename to hex/sd_api_v2/s130_nrf51_2.0.1_softdevice.hex index dc22a94e8..56ccf004d 100644 --- a/hex/sd_api_v2/connectivity_2.0.1_1m_with_s130_2.0.1.hex +++ b/hex/sd_api_v2/s130_nrf51_2.0.1_softdevice.hex @@ -6778,2495 +6778,4 @@ :10AFB000A8010020D00F0000041100000159360143 :10AFC000000100683720FB349B5F80041F80001065 :10AFD000022001337F0102E429E471A8010000008E -:10B00000605E0020F5B001000FB1010011B1010038 -:10B010000000000000000000000000000000000030 -:10B0200000000000000000000000000013B101005B -:10B03000000000000000000015B1010017B1010080 -:10B0400019B1010019B1010049B3010019B10100A2 -:10B0500019B101000000000019B1010019B101008F -:10B0600019B1010019B1010009B3010019B10100C2 -:10B0700019B1010019B1010019B1010019B10100A4 -:10B0800019B1010021B2010019B1010019B101008B -:10B0900041B2010019B1010049B2010019B101002A -:10B0A00019B1010019B1010000000000000000000A -:10B0B0000000000000000000000000000000000090 -:10B0C0000348854600F06EF800480047892E0200CC -:10B0D000605E0020401E00BF00BF00BF00BF00BF79 -:10B0E00000BF00BF00BF00BF00BF00BF00BFF1D165 -:10B0F000704700000321094802680A4302600848BB -:10B1000002680A4302600748804707480047FEE795 -:10B11000FEE7FEE7FEE7FEE7FEE70000240500404D -:10B120005405004069B20100C1B0010003460B4361 -:10B130009B0703D009E008C9121F08C0042AFAD2ED -:10B1400003E00B780370401C491C521EF9D2704773 -:10B15000D2B201E00270401C491EFBD270470022AF -:10B16000F6E710B513460A4604461946FFF7F0FF06 -:10B17000204610BD30B504460020034600E05B1CAD -:10B18000934203D2E05CCD5C401BF8D030BD03217C -:10B19000001D401E037812021A43491EF9D51046BD -:10B1A00070470000064C0125064E05E0E36807CC19 -:10B1B0002B430C3C98471034B442F7D3FFF784FF7D -:10B1C000104B0200304B020070B58C180578401C03 -:10B1D0006B075B0F01D10378401C2A1106D102785E -:10B1E000401C03E006780E70401C491C5B1EF9D120 -:10B1F0002B0705D40023521E0DD40B70491CFAE70F -:10B200000378401CCB1A921C03E01D780D70491C7A -:10B210005B1C521EF9D5A142D8D3002070BD00009E -:10B2200010B506490020086048608860C86003497E -:10B2300040390860486009F0FBF810BD401101403A -:10B2400010B509F08BF810BD10B50648406800280D -:10B2500005D08047002801D000F0E4F810BD07F0C9 -:10B2600069FC10BD9844002010B507F0A5FC00282B -:10B2700005D01F491D484860C8131E4988611E48F3 -:10B28000018CC9B201290BD1828C120708D1028D21 -:10B290001206120F042A03D1828D1206120F0AD051 -:10B2A000012921D1818C09071ED1018D0906090FC1 -:10B2B0000A2904D007E0114A01219160F5E7828D47 -:10B2C0001206120F05D00D290ED1808D0006000F39 -:10B2D0000AD10B480168012904D00A4901600168BC -:10B2E0000129FCD1C021416110BD0000DFFF07C072 -:10B2F00000050040006C0040C00F00F00006004058 -:10B3000000EC06407593000010B50B484168012918 -:10B310000ED10A49496889030AD5002141600849CC -:10B320000120C8600749CA79002A02D007F00EFA46 -:10B3300010BD087210BD000040A1004000A30040F5 -:10B3400000A00040F443002010B509F003F910BD3F -:10B3500030B47446641E2578641CAB4200D21D468E -:10B36000635D5B00E31830BC184702E008C8121F99 -:10B3700008C1002AFAD170477047002001E001C1DE -:10B38000121F002AFBD17047202804DA01218140D6 -:10B390000348014201D0012070470020704700009F -:10B3A000FC06FFBC1CB50E480D4C008E2834C000B6 -:10B3B000207000206070A070204607F0B1FBE070A4 -:10B3C000042069460094888000221146684608F0EF -:10B3D0001BFD002802D0002000F024F81CBD000056 -:10B3E000F443002038B504460020694608706846DA -:10B3F00000F0DEF90848844208D0BFF34F8F0849B7 -:10B400000648C860BFF34F8F00BFFDE7684600786D -:10B4100000F0ECF938BD0000FECADDBA0400FA0500 -:10B4200000ED00E00EB50021029000916A46019106 -:10B430000148FFF7D7FF0EBD014000004268002120 -:10B44000117042685170426891704068C17008463E -:10B45000704708B56A4600F009F808BD4068807872 -:10B46000704710B5028900F02AF810BDF7B582B018 -:10B470000689817A076801914468002569460D7044 -:10B48000684600F095F9A078002816D02078361D7F -:10B490007043C6192046019906F0F2FC3088311D30 -:10B4A00082B2049802800398FFF740FE6846007855 -:10B4B00000F09CF9284605B0F0BD0425F6E7F7B585 -:10B4C00082B001680191857A078944680020694645 -:10B4D0000870684600F06CF9A078A8420AD1E078BC -:10B4E000002805D02946204606F0CAFC042602E0C2 -:10B4F000042615E0002661783F1D0846019A78432E -:10B500008018A278491C521CC9B2A270A94200D16D -:10B5100000216170049902C0049A0399FFF706FEA6 -:10B520006846007800F062F9304605B0F0BD0000D2 -:10B5300070B50F4B05241D785E78AE4215D01D788E -:10B540001C789E88B44201DA641C00E000241C7060 -:10B550005C881E696C43A4190460DB68E800C418A9 -:10B56000A4880C80185800241060204670BD00008C -:10B5700048430020F7B52B4C82B060880E468142CC -:10B580004ED800256846284F057000F011F9227842 -:10B590006078A188884201DA401C00E00020C0B237 -:10B5A000904204D16846007800F020F936E06578D2 -:10B5B0006078884201DA401C00E000206070684634 -:10B5C000007800F013F9BD4228D0E068EF0004993C -:10B5D000C151029900290CD0002E0AD06088324651 -:10B5E000454320692818FFF7A1FDE06838188680D8 -:10B5F00002E000213818818020786178814201D3EF -:10B60000081A03E0A288101A4018401CE18880B292 -:10B61000884200D9E080002005B0F0BD0420FBE79F -:10B620000920F9E748430020FFFF00003EB5094C20 -:10B6300004E068468188029A00989047A068002834 -:10B6400006D102AA01A96846FFF772FF0028F0D0D0 -:10B650003EBD00004843002030B5CB0008339DB20A -:10B6600093070024002B01D0072030BD054BDA6082 -:10B6700052191A615C701C7058809980DC8000201F -:10B6800030BD00004843002008B50020694608701E -:10B69000684600F08DF805498868421C01D0401CBE -:10B6A00088606846007800F0A1F808BD4843002093 -:10B6B000074801784078064A8842928801D3401AA8 -:10B6C00002E0511A0818401C101A80B2704700009E -:10B6D0004843002008B5002069460870684600F01D -:10B6E00067F805488168002901D0491E81606846D5 -:10B6F000007800F07BF808BD4843002010B507F043 -:10B7000077FD002010BD000070B588B015460446D6 -:10B710001E4620221A496846FFF708FDA0680690D9 -:10B720002079002801D0012100E000216846017540 -:10B7300006776079002800D00E2069464875E078C9 -:10B740000290A078039020780190607800900D48D6 -:10B75000002145608170207902280ED00A49684690 -:10B7600007F00EFC002806D107F094FC05480121E3 -:10B77000401C07F069FC08B070BD0620FBE7000024 -:10B780006448020040430020FD44020010B5074910 -:10B7900008700121054807F0D7FC112803D00028C4 -:10B7A00000D0032010BD042010BD00004043002045 -:10B7B00030B5EFF3108172B6094A54680123002CAA -:10B7C00004D00370002900D162B630BD5360054B30 -:10B7D0001D68054C254015601C6000220270F1E7D1 -:10B7E000AC44002080E100E0FC06FFBC08494A6848 -:10B7F000002A0CD000280AD1EFF3108072B60A6834 -:10B80000044B1A6000224A60002800D162B67047DB -:10B81000AC44002000E100E0F8B515460F460600F4 -:10B8200011D0002D0FD0002B0DD01C4608F05DFF6D -:10B83000002807D105480090231D2A463946304686 -:10B8400005F060F8F8BD0E20F8BD0000F5B8010065 -:10B85000F8B515460F4606000FD0002D0DD0002B71 -:10B860000BD01C4608F0B5FF002805D1631C2A4602 -:10B870003946304600F055F8F8BD0E20F8BDF8B551 -:10B880001D4617460E0014D0002D12D0002810D0EF -:10B8900004460078694608703146684608F0A6FFFD -:10B8A000002805D12B463A463146601C00F051F87D -:10B8B000F8BD0E20F8BDF8B515460F46060017D0A6 -:10B8C000002D15D0002B13D01C4608F082FF002855 -:10B8D0000DD1631C2A463946304608F07AFF00280D -:10B8E00005D1A31C2A463946304608F072FFF8BD40 -:10B8F0000E20F8BDF8B515460F4606000FD0002DF6 -:10B900000DD0002B0BD01C46FFF7D5FF002805D12A -:10B91000E31C2A4639463046FFF7CDFFF8BD0E201E -:10B92000F8BDF8B514460E46050010D0002C0ED018 -:10B93000002B0CD01F465B1C08F04BFF002805D1E4 -:10B940003B4622463146284608F043FFF8BD0E200C -:10B95000F8BDF8B51C4616460D0010D0002C0ED0D0 -:10B9600000280CD00746401C08F040FF002805D1F5 -:10B97000234632462946384608F038FFF8BD0E20E7 -:10B98000F8BDF8B5144606000D461FD0002C1DD09A -:10B9900000200090631C6A46304608F01AFF002819 -:10B9A00013D123466A462946304608F012FF002884 -:10B9B0000BD1631D6A462946304608F00AFF00286D -:10B9C00003D10099A94200D00920F8BD0E20F8BD8E -:10B9D00017B581B0144600290ED0002C0CD00020E1 -:10B9E00000906B4601A8226808F0CFFE002801D124 -:10B9F0000099216004B010BD0E20FBE7F8B5154694 -:10BA00000F46060019D0002D17D0002B15D01C466C -:10BA1000FFF702FF00280FD1234608332A46394694 -:10BA2000304600F06DFE002806D123460C332A462E -:10BA30003946304603F005FCF8BD0E20F8BD000085 -:10BA40001CB50C4601210191002812D0002A10D00B -:10BA5000116800290DD008491346009101AA21461A -:10BA600004F050FF002803D10199A14200D0092021 -:10BA70001CBD0E201CBD0000FDB901001CB500233B -:10BA8000019301AB009313460A460146602007F07C -:10BA90003FFC1CBD70B51C46002A1BD0002C19D0E1 -:10BAA000002817D00588202D71D015DC2B00FFF75A -:10BAB0004FFC2032363E3A32323232323232323279 -:10BAC0003232326F6A424A4E56775A7B525E666213 -:10BAD000C67346320E2070BD392D7AD009DC303D58 -:10BAE0002B00FFF735FC09728B6569936E7F8F869B -:10BAF0001800532D70D008DC3A2D77D0502D6DD022 -:10BB0000512D6CD0522D06D193E0542D68D0552D77 -:10BB100067D0702D71D006200021216070BD2346B2 -:10BB200000F094F870BD234600F0ACF870BD2346D9 -:10BB300000F0F1F870BD234600F0D3FF70BD23463E -:10BB400000F0FEFF70BD234601F046FA70BD2346AB -:10BB500001F0F0F970BD234600F038FF70BD2346B8 -:10BB600001F060F970BD234600F002FF70BD23466E -:10BB700001F01DF870BD234601F08AF970BD23461F -:10BB800001F0AAFA70BD234601F0A1F870BD5AE099 -:10BB9000234601F03DF8F9E7234601F04EFAF5E7B8 -:10BBA000234601F0D2F8F1E7234601F0FBF8EDE778 -:10BBB000234602F033FCE9E7234602F07CFDE5E78B -:10BBC00007E0234602F0ABFCE0E7234602F007FE65 -:10BBD000DCE702F0C2FDD9E71CE007E023E025E046 -:10BBE0001EE01AE0234602F051FECFE702F0EDFE20 -:10BBF000CCE7234602F005FFC8E71DE0234602F02C -:10BC000089FEC3E7234602F0FBFCBFE7234602F0B0 -:10BC100090FBBBE703F030FBB8E703F00BFCB5E7A4 -:10BC200003F0D3FBB2E703F021FCAFE703F062FBC4 -:10BC3000ACE703F0E3FBA9E704F0B1F8A6E723467D -:10BC400000F03EFEA2E701F03FF99FE710B50028A3 -:10BC500008D0002A06D0002B04D01968052903D289 -:10BC6000092010BD0E2010BD01211170002151705E -:10BC700084889470240AD470007A107105201860AA -:10BC8000084610BDFEB51C461646050031D0002EF4 -:10BC90002FD0002C2DD0002000902768032069466B -:10BCA00088806B463A46314601A808F030FD0028EE -:10BCB0001ED16B463A463146281D08F028FD002863 -:10BCC00016D128466B4631460830226808F08EFDB2 -:10BCD00000280DD128466B4631461030226808F006 -:10BCE00016FD002804D121680098814203D1092063 -:10BCF000FEBD0E20FEBDE968002900D001213154AF -:10BD0000401C0090A88804F0E3FE0028F2D10098BF -:10BD100020600020FEBDFEB51C461646050026D05C -:10BD2000002E24D0002C22D0002000902768022072 -:10BD3000694688806B463A46314601A808F0E7FC20 -:10BD4000002813D16B463A463146281D08F0DFFC27 -:10BD500000280BD128466B4631460830226808F08F -:10BD600045FD002802D1009820600020FEBD0E2075 -:10BD7000FEBD10B51446024618462368C91A0729A5 -:10BD800001D2092010BDD15C01702168401C491C02 -:10BD9000216089180622FFF7C9F92068801D2060FC -:10BDA000002010BD10B51C460B4601462068121A33 -:10BDB000072A01D2092010BD0A781A5420680622E9 -:10BDC000401C2060C018491CFFF7B0F92068801D96 -:10BDD0002060002010BD002808D0002A06D00229CB -:10BDE0000CD30378712B03D0072070470E207047C7 -:10BDF0004078002800D11060022901D00920704746 -:10BE000000207047FFB581B01E4615460F0018D0C0 -:10BE1000002D16D013460A462C687120019907F0B0 -:10BE2000C7FC002804D101992868002902D000200D -:10BE300005B0F0BD002E04D0C11DA14203D90920D8 -:10BE4000F6E70E20F4E731783954441C38190622FD -:10BE5000711CFFF76BF9A41D2C60E8E77CB5064662 -:10BE600001201C460D460190002E1CD0002A1AD03D -:10BE7000002C18D02068002815D0134601AA30469F -:10BE800008F0A7FC00280DD108480090234601AA1D -:10BE90002946304604F036FD002803D10199A94215 -:10BEA00000D009207CBD0E207CBD000073BD0100C8 -:10BEB0001CB50023019301AB009313460A460146CB -:10BEC000702007F025FA1CBD38B5002823D0002AC1 -:10BED00021D01C466B4608F07CFC00281AD16A462B -:10BEE000217812784908D2074900D20F11432170F6 -:10BEF000FD2211406A4612789207D20F5200114378 -:10BF00002170FB2211406A4612785207D20F92002C -:10BF10001143217038BD0E2038BDFEB5089F099C25 -:10BF20000D4606001BD0002B19D0002C17D0012085 -:10BF300000930190134601AA304606F091FE0028B6 -:10BF40000CD13B4601AA29463046009406F088FEF3 -:10BF5000002803D10198A84203D00920FEBD0E207D -:10BF6000FEBD0020FEBD13460A4610B501467220F4 -:10BF700007F01EFC10BD0000FEB514460022054669 -:10BF80000E4610460192002D26D0002C24D02168A8 -:10BF9000002921D04B68002B1ED0C96800291BD076 -:10BFA0000B68002B18D08968002915D08700DF594D -:10BFB000002F11D0401C0828F8D300208300CB5854 -:10BFC000002B09D0401C0828F8D3022E10D3A85CFF -:10BFD000732803D00720FEBD0E20FEBD501C295C37 -:10BFE000901C0190012905D022600198B04244D0F4 -:10BFF0000920FEBD01AA31462846236808F0E9FB66 -:10C000000028F6D11E480090236801AA3146284630 -:10C010001B1D04F077FC0028EBD1236801AA3146F0 -:10C020002846083308F0D5FB0028E2D115480090D7 -:10C03000236801AA314628460C3304F063FC00282B -:10C04000D7D1236801AA31462846103308F04DFBAA -:10C050000028CED1236801AA31462846123308F0C1 -:10C0600044FB0028C5D1236801AA31462846143371 -:10C07000FFF72AFF0028BCD1B7E70020FEBD000073 -:10C0800073BD0100A1DF010013460A4610B5014649 -:10C09000732007F08DFB10BD13460A4610B501460C -:10C0A000742007F085FB10BD002808D0002A06D0B8 -:10C0B0001368002B03D0022903D0092070470E20FB -:10C0C00070470178792901D007207047407800280F -:10C0D00000D1106000207047FFB581B01E461446A5 -:10C0E0000D0018D0002C16D013460A462768792078 -:10C0F000019907F05DFB002803D10198002802D0C8 -:10C10000002005B0F0BD002E05D02068811CB9428A -:10C1100003D90920F5E70E20F3E731882A181170BA -:10C12000090A5170801C2060EAE738B500230093AB -:10C13000002A05D0002803D0032903D0092038BDE8 -:10C140000E2038BD037801240094782B01D00720FD -:10C1500038BD13466A4608F0C8FA38BD13460A4689 -:10C1600010B50146782007F023FB10BDFEB5089EF0 -:10C170001F460C4605001FD0002A1DD0002F1BD0E3 -:10C1800001200290601E02282AD3134602AA2846E4 -:10C1900008F074FA0298844222D03B4602AA214653 -:10C1A000284608F00BFB3878002807D0012807D074 -:10C1B000022807D00720FEBD0E20FEBD002102E0B0 -:10C1C000062100E0102100910191334602AA214688 -:10C1D000284604F08FFA0028EFD10299A142ECD052 -:10C1E0000920FEBD13460A4610B50146802007F01F -:10C1F000DFFA10BD7CB5064601201C460D460190B5 -:10C20000002E1CD0002A1AD0002C18D0206800283C -:10C2100015D0134601AA304608F067FA00280DD160 -:10C2200008480090234601AA2946304604F06AFBDC -:10C23000002803D10199A94200D009207CBD0E201D -:10C240007CBD0000D5DD010013460A4610B501464D -:10C250007E2007F0ADFA10BDF8B500271C460D464C -:10C260000646009700280DD0002A0BD0002C09D0DC -:10C270002068002806D0042D3CD33078752803D0E0 -:10C280000720F8BD0E20F8BD0120134600906A4635 -:10C29000304608F0F3F90098315C012903D00029F9 -:10C2A00022D00B20F8BD401C00900830A84221D8B5 -:10C2B0006A4629463046236808F0E0F923686A4652 -:10C2C000294630469B1C08F0D9F923686A4629465E -:10C2D00030461B1D08F0D2F923686A4629463046CD -:10C2E0009B1D08F0CBF902E0401C009027600098ED -:10C2F000A84201D00920F8BD0020F8BD13460A4627 -:10C3000010B50146752007F053FA10BDF8B5074681 -:10C3100010680E46801C15461C46B0421AD8384696 -:10C3200008F0ACF92868801CB04213D8A31C2A4638 -:10C330003146384608F0A2F92868801CB04209D876 -:10C34000231D2A463146384608F098F92868801C93 -:10C35000B04201D90920F8BDA31D2A46314638460E -:10C3600008F08CF90020F8BDF8B51D4616460F46BA -:10C37000044608F0CCF9002815D12B463246394640 -:10C38000A01C08F0C4F900280DD12B4632463946CE -:10C39000201D08F0BCF9002805D12B46324639464D -:10C3A000A01D08F0B4F9F8BDFFB583B016460C46E1 -:10C3B000070010D0002E0ED000250195002C22D0B1 -:10C3C00002AB01AA08F0FAF96846007A872804D07F -:10C3D000072007B0F0BD0E20FBE70198201A0228C5 -:10C3E00011D3334601AA2146384608F047F9009593 -:10C3F00001AA21463846069B04F084FA0028E8D1B9 -:10C400000199A142E5D00920E3E70000FFB583B020 -:10C410001C46150006460FD0002C0DD00146872083 -:10C42000276807F0C5F9002804D120680190002E84 -:10C4300004D0002007B0F0BD0E20FBE706480090B6 -:10C4400001AB3A462946049804F08BFA0028F1D152 -:10C4500001992160EEE70000B1C4010038B51C4627 -:10C46000136800258B4201D1092038BD6B4608F0C6 -:10C47000A5F9694620780978000909070001090F24 -:10C4800008432070694609780007000F090909016F -:10C4900008432070284638BD38B5047820072409A1 -:10C4A000000F240104436846047008F09FF938BD6A -:10C4B000F8B51D4616460F460446FFF7EDFF002867 -:10C4C00005D12B4632463946601C08F08FF9F8BD7D -:10C4D00013460A4610B501468D2007F069F910BDD4 -:10C4E000FEB507460120089C1D460E460190002F10 -:10C4F00030D0002A2ED0106800282BD0002D29D053 -:10C500002868002826D0002C24D02068002821D0BC -:10C5100011481346009001AA384604F0F3F90028A8 -:10C5200017D10E4800902B4601AA3146384604F038 -:10C53000E9F900280DD10A480090234601AA3146A6 -:10C54000384604F0DFF9002803D10199B14200D048 -:10C550000920FEBD0E20FEBD73BD010035D90100CE -:10C560000DC3010013460A4610B501468C2007F0A2 -:10C570001FF910BDF8B5002417460D460646009475 -:10C58000002B0CD01968002909D00120012D11D3EE -:10C5900000907078012804D000281BD101E00E2003 -:10C5A000F8BD02220092012806D01C600098411CB0 -:10C5B000A9420AD90920F8BD0B466A4629463046E9 -:10C5C00008F093F80028F6D1F0E7305C012804D099 -:10C5D000002801D00720F8BD3C600020F8BDFFB561 -:10C5E00083B00C9C1D00064610D0002C0ED00146D6 -:10C5F00023462A467D20276807F0DAF82168019152 -:10C60000002801D1002E03D007B0F0BD0E20FBE7BB -:10C6100001A800903B462A460599049806F008FBBD -:10C6200001992160F0E70000FEB5089D1E460C460A -:10C63000070021D0002A1FD0002E1DD0002D1BD0B6 -:10C6400001200190601E042814D30C48134600906A -:10C6500001AA384604F056F900280CD1334601AA45 -:10C6600021463846009506F0CBFA002803D10199FF -:10C67000A14200D00920FEBD0E20FEBD5DC4010018 -:10C6800013460A4610B501467C2007F091F810BD0C -:10C69000FEB51D46144607000E4612D0002C10D0E1 -:10C6A000002D0ED00020009001AB6A46384608F0FD -:10C6B00090F8002804D168460079762803D0072036 -:10C6C000FEBD0E20FEBD23466A463146384608F0C0 -:10C6D0000CF80028F6D12B466A463146384608F059 -:10C6E00078F80028EED10099B142EBD00920FEBDC8 -:10C6F00013460A4610B50146762007F059F810BDDA -:10C70000F8B515460F46060015D0002D13D01C466F -:10C7100008F05FF800280DD1631C2A4639463046E0 -:10C7200008F057F8002805D1A31C2A4639463046A0 -:10C7300008F04FF8F8BD0E20F8BDF8B506461068B1 -:10C740000F46091A14461D46102909D381191022D3 -:10C750001846FEF7EBFC216810312160B94201D187 -:10C760000920F8BD287C715C4008C9074000C90F4A -:10C7700008432874FD2108402168715C8907C90FAE -:10C7800049000843287421688007715C800F89087C -:10C790008900084328742068401C20600020F8BDF0 -:10C7A000F8B5054618680E460027111A1C461129CF -:10C7B00001D20920F8BD801910222946FEF7B6FCE7 -:10C7C0002168103121602A7C9307D007DB0FC00F4E -:10C7D0005B00920818439200104370542068401C7C -:10C7E00020603846F8BDF8B515460F4606000ED055 -:10C7F000002D0CD01C46FFF7A0FF002806D12346D1 -:10C8000012332A463946304600F046FEF8BD0E2067 -:10C81000F8BDF8B51D4617460E000ED0002D0CD001 -:10C820000446FFF7BDFF002806D120462B463A46B6 -:10C830003146123000F04CFEF8BD0E20F8BD00006D -:10C84000FEB5089D1C460E46070012D0002A10D0E7 -:10C85000002D0ED0002C0CD02868002809D02068AC -:10C86000002806D001200190701E022803D2092062 -:10C87000FEBD0E20FEBD134601AA384607F0FEFE9F -:10C8800009480090234601AA3146384604F03AF898 -:10C890000028EFD1054800902B4601AA31463846C2 -:10C8A00004F030F8FEBD000099D401003BC7010040 -:10C8B00013460A4610B50146852006F079FF10BDE3 -:10C8C000F0B585B01D46174604004FD0002F4DD05F -:10C8D000002D4BD0002001902E681D2069468881D4 -:10C8E00001AB3246394603A807F011FF00283BD1BF -:10C8F00001AB32463946201D07F009FF002833D12D -:10C90000204601AB324639460830FFF74BFA002883 -:10C910002AD1204601AB324639460F3007F066FF78 -:10C92000002821D1207C01AB4207C107920FC90F1B -:10C9300052001143C008C0000143684601723246EC -:10C94000394602A807F052FF00280DD101A8009037 -:10C95000207C3346C10820463A46113007F053FF89 -:10C96000002801D10199296005B0F0BD0E20FBE738 -:10C97000FEB51C461646050025D0002E23D0002CFF -:10C9800021D00020009027681720694688806B46D8 -:10C990003A46314601A807F0BAFE002812D16B468C -:10C9A0003A463146281D07F0B2FE00280AD1284633 -:10C9B0006B463A463146083007F018FF002801D18F -:10C9C00000992160FEBD0E20FEBD0000FEB50446AC -:10C9D00000200090192069461D4616468880002CCC -:10C9E00027D0002E25D0002D23D02F680B463A46A5 -:10C9F000314601A807F08BFE002819D16B463A4654 -:10CA00003146201D07F083FE002811D120466B46D9 -:10CA10003A463146083000F025F8002808D1A088B1 -:10CA200002A904F021F8002805D00020009929600F -:10CA3000FEBD0E20FEBDFF2102982D31484308495E -:10CA40006B4640183A463146001D01F01DF900289A -:10CA5000F0D1A08803F0F0FF0028E7D0FEBD000071 -:10CA6000944A0020F8B5044618681D46101A164668 -:10CA70000F46062801D20920F8BD204607F0B6FE71 -:10CA80000028F9D160782B4681074007C00F890F35 -:10CA900080000143684601703246394607F0A6FE21 -:10CAA0000028E9D12B4632463946A01C01F002F994 -:10CAB0000028E1D12B4632463946E01C01F0FAF855 -:10CAC0000028D9D12B4632463946201D01F035F8D1 -:10CAD0000028D1D12B4632463946601D01F02DF891 -:10CAE000F8BDF8B51D461646040008D0002E06D045 -:10CAF000002D04D02088122803D00720F8BD0E2076 -:10CB0000F8BD002000902F686B463A46314620461B -:10CB100007F0FDFD0028F3D16B463A463146201D53 -:10CB200007F0F5FD0028EBD120466B463A4631462A -:10CB3000083000F038F80028E2D100992960F8BDEB -:10CB4000F8B51D461646040008D0002E06D0002D6C -:10CB500004D020881F2803D00720F8BD0E20F8BD80 -:10CB6000002000902F686B463A463146204607F079 -:10CB7000CEFD0028F3D16B463A463146201D07F022 -:10CB8000C6FD0028EBD120466B463A4631460830B8 -:10CB900000F005F80028E2D100992960F8BD10B531 -:10CBA000FFF7E2FB10BD10B5FFF7DEFB10BDFEB5D1 -:10CBB0001C461646050025D0002E23D0002C21D07F -:10CBC0000020009027681A20694688806B463A4604 -:10CBD000314601A807F09BFD002812D16B463A466A -:10CBE0003146281D07F093FD00280AD128466B46E0 -:10CBF0003A463146083000F007F8002801D1009984 -:10CC00002160FEBD0E20FEBD10B5FFF751FC10BD2A -:10CC1000FEB51C461646050025D0002E23D0002C5C -:10CC200021D00020009027681020694688806B463C -:10CC30003A46314601A807F06AFD002812D16B463A -:10CC40003A463146281D07F062FD00280AD12846E1 -:10CC50006B463A463146083000F007F8002801D10B -:10CC600000992160FEBD0E20FEBDF8B50F460446BA -:10CC70000020694608701D46164639462046FFF7D3 -:10CC800091F8002822D12B4632463946E01DFFF7A5 -:10CC900089F800281AD120462B46324639460E30F4 -:10CCA00007F0A4FD002811D1E07B694608702B46EF -:10CCB00032463946684607F099FD002806D12046DD -:10CCC0002B46324639461030FFF74EFBF8BDFEB515 -:10CCD0001D46164604002BD0002E29D0002D27D04B -:10CCE000002000902F681120694688806B463A46E4 -:10CCF000314601A807F00BFD00281AD16B463A46D1 -:10CD00003146201D07F003FD002812D120466B4656 -:10CD10003A463146083000F014F8002809D100984E -:10CD20002860A08802A903F09FFE002802D006E038 -:10CD30000E20FEBDA08803F07FFE0028F9D1002060 -:10CD4000FEBD10B507F052FD10BDFEB51C461646DF -:10CD5000050025D0002E23D0002C21D000200090EB -:10CD600027681620694688806B463A46314601A8F6 -:10CD700007F0CDFC002812D16B463A463146281DFB -:10CD800007F0C5FC00280AD128466B463A463146D2 -:10CD9000083007F02BFD002801D100992160FEBD6D -:10CDA0000E20FEBDF0B585B01D461646040034D0F9 -:10CDB000002E32D0002D30D0002001902F68182096 -:10CDC0006946088101AB3A46314602A807F09FFC4C -:10CDD000002820D101AB3A463146201D07F097FCD0 -:10CDE000002818D10E48009001AB3A463146A068A1 -:10CDF00003F0B7FD00280ED1207B6946C007C00FA5 -:10CE0000087301AB3A46314603A807F0EFFC00284F -:10CE100001D10199296005B0F0BD0E20FBE70000AB -:10CE200073D401007CB5054600201E4614460090D0 -:10CE3000002D08D0002C06D0002E04D031680B291C -:10CE400003D209207CBD0E207CBD152121706070AD -:10CE5000A988A170090AE170042000902946201DCC -:10CE600006220831FEF762F900986946801D00909D -:10CE7000A87B6B46C007C00F0871214601A8326825 -:10CE800007F0B4FC0028DFD10098306000207CBDA2 -:10CE900010B5002808D0002A06D0002B04D019684D -:10CEA000052903D2092010BD0E2010BD1C211170D0 -:10CEB0000021517084889470240AD470007A107113 -:10CEC00005201860084610BDFEB51D461646040034 -:10CED0002ED0002E2CD0002D2AD0002000902F68BC -:10CEE0002020694688806B463A46314601A807F003 -:10CEF0000EFC00281BD16B463A463146201D07F038 -:10CF000006FC002813D120466B463A4631460930CC -:10CF1000FEF748FF00280AD120466B463A463146C4 -:10CF2000083007F063FC002801D100992960FEBD9C -:10CF30000E20FEBDFEB51C461646050025D0002E6F -:10CF400023D0002C21D000200090276814206946AF -:10CF500088806B463A46314601A807F0D8FB002886 -:10CF600012D16B463A463146281D07F0D0FB002807 -:10CF70000AD128466B463A463146083000F007F899 -:10CF8000002801D100992160FEBD0E20FEBDF8B53C -:10CF90001D4616460F460446FEF704FF00281AD128 -:10CFA00020462B4632463946083000F091FA0028D8 -:10CFB00011D1A07C2B468207C107D20FC90F5200A6 -:10CFC00040071143C00F800001436846017032469C -:10CFD000394607F00BFCF8BDFEB51C4616460500A9 -:10CFE00025D0002E23D0002C21D0002000902768CF -:10CFF0001320694688806B463A46314601A807F0FF -:10D0000086FB002812D16B463A463146281D07F0B0 -:10D010007EFB00280AD128466B463A463146083046 -:10D0200000F007F8002801D100992160FEBD0E2014 -:10D03000FEBD10B500F02CFF10BDFEB51C46164617 -:10D04000050025D0002E23D0002C21D000200090F8 -:10D0500027681E20694688806B463A46314601A8FB -:10D0600007F055FB002812D16B463A463146281D81 -:10D0700007F04DFB00280AD128466B463A46314658 -:10D08000083000F007F8002801D100992160FEBDAA -:10D090000E20FEBD70B5002907D0002B05D01C68FE -:10D0A0000025944203D1092070BD0E2070BD027886 -:10D0B0009607D007F60FC00F760030435607F60FDD -:10D0C0001207B600D20F3043D2001043085518683B -:10D0D000401C1860284670BD10B5002808D0002AF2 -:10D0E00006D0002B04D01968052903D2092010BDF1 -:10D0F0000E2010BD1B211170002151708488947086 -:10D10000240AD470007A107105201860084610BDFA -:10D11000F8B515460F4606000ED0002D0CD01C4663 -:10D1200000F022F8002806D1234610332A4639465B -:10D130003046FEF71EFEF8BD0E20F8BDF8B51D46C0 -:10D1400017460E000ED0002D0CD0044600F01FF83C -:10D15000002806D120462B463A4631461030FEF7CD -:10D1600021FEF8BD0E20F8BD10B514460246184643 -:10D170002368C91A102901D2092010BD991810225C -:10D18000FDF7D4FF206810302060002010BD10B5DE -:10D190001C460B4601462068121A102A01D20920AB -:10D1A00010BDC0181022FDF7C1FF206810302060AC -:10D1B000002010BDF8B5064601201C460D46009023 -:10D1C000002E17D0002A15D0002C13D013466A4623 -:10D1D000304607F08AFA00280BD123466A462946D2 -:10D1E000304607F0F6FA002803D10099A94200D092 -:10D1F0000920F8BD0E20F8BD13460A4610B50146B9 -:10D20000822006F0D5FA10BD7CB5064601201C46EA -:10D210000D460190002E19D0002A17D0002C15D0F1 -:10D22000134601AA304607F060FA00280DD10848DD -:10D230000090234601AA2946304603F063FB0028EC -:10D2400003D10199A94200D009207CBD0E207CBDEC -:10D2500065D2010013460A4610B50146812006F04A -:10D26000A7FA10BD10B5144602462068091A2029F5 -:10D2700001D2092010BD811820221846FDF756FF63 -:10D28000206820302060002010BD0000FEB5074659 -:10D290000120089C1D460E460190002F24D0002A34 -:10D2A00022D0002C20D0002D1ED0134601AA3846D3 -:10D2B00007F01BFA002816D10C4800902B4601AA53 -:10D2C0003146384603F01EFB00280CD1009023465F -:10D2D00001AA3146384603F015FB002803D1019915 -:10D2E000B14200D00920FEBD0E20FEBD4DD401008C -:10D2F000FFB583B01C46150006460FD0002C0DD09C -:10D3000001468320276806F053FA002804D12068DC -:10D310000190002E04D0002007B0F0BD0E20FBE7E6 -:10D320000648009001AB3A462946049803F019FBE1 -:10D330000028F1D101992160EEE700000DD4010031 -:10D34000FFB5064683B001200C9C1D460190002EBF -:10D3500027D0002A25D0002D23D0002C21D0134621 -:10D3600001AA3046049907F0C0F9002817D10E4FE2 -:10D370002B4601AA00973046049903F0C3FA00280F -:10D380000DD1234601AA00973046049903F0BAFA5A -:10D39000002804D1019A04998A4200D0092007B0DC -:10D3A000F0BD0E20FBE70000BDD3010013460A4686 -:10D3B00010B50146842006F0FBF910BDFFB583B01F -:10D3C0001646070020D0002E1ED01C460499FEF7FA -:10D3D000D0FC002816D1E01D10250290009502AB6C -:10D3E000324601953846049903F084F9002809D1A2 -:10D3F0001734009502AB32460195029438460499E1 -:10D4000003F078F907B0F0BD0E20FBE7F8B51D4634 -:10D4100017460E0018D0002D16D00446FEF7C2FCA9 -:10D42000002810D13B4632461021E01D009503F044 -:10D4300096F9002807D120463B4632461021173086 -:10D44000009503F08CF9F8BD0E20F8BD10B5144618 -:10D4500002462068091A402901D2092010BD81180E -:10D4600040221846FDF762FE206840302060002010 -:10D4700010BD10B51C461B68D21A402A01D20920E3 -:10D4800010BD5B18014640221846FDF74FFE20688C -:10D4900040302060002010BDFFB581B015460F461A -:10D4A0001C46019807F021F9060004D12868391AB2 -:10D4B000082902D2092005B0F0BD019908224118BF -:10D4C000A01CFDF733FE2868083028603046F2E7DC -:10D4D000FFB581B01D4616460446029907F017F9BC -:10D4E00007462868311A082902D2092005B0F0BD84 -:10D4F000029908224018A11CFDF718FE2868083080 -:10D5000028603846F2E7FFB581B0144607000FD017 -:10D51000002C0DD01D46029907F0E7F8060005D152 -:10D5200020680299091A052904D2092005B0F0BD26 -:10D530000E20FBE7C1190522A81CFDF7F7FD2068A6 -:10D54000401D20603046F1E7FFB581B01C460F005A -:10D550000FD0002C0DD00546039A07F0D8F806002E -:10D5600005D120680399091A052904D2092005B0BC -:10D57000F0BD0E20FBE7C0190522A91CFDF7D6FD62 -:10D580002068401D20603046F1E738B5002810D0F3 -:10D59000002A0ED01C4600236D462B706B4607F008 -:10D5A00018F9002804D169460978C907C90F217004 -:10D5B00038BD0E2038BD38B500290CD0002B0AD05C -:10D5C00000256C4625700078C007C00F20706846A3 -:10D5D00007F00CF938BD0E2038BD0000F8B515462F -:10D5E0000F46060017D0002D15D01C4607F07DF819 -:10D5F00000280FD1A31C2A463946304607F075F89B -:10D60000002807D105480090231D2A463946304698 -:10D6100003F078F9F8BD0E20F8BD0000EB460200DB -:10D62000F8B51D4617460E0017D0002D15D004463C -:10D6300007F06DF800280FD12B463A463146A01C62 -:10D6400007F065F8002807D1054800902B463A46B8 -:10D650003146606803F085F9F8BD0E20F8BD000082 -:10D660000F4702001CB5002807D0002A05D0062469 -:10D670000094019403F03EF81CBD0E201CBD38B58B -:10D6800000290AD0002B08D00093134606240A462E -:10D690000068214603F063F838BD0E2038BD000055 -:10D6A000F8B515460F46060010D0002D0ED00848DC -:10D6B00000901C46304603F025F9002805D1231DB3 -:10D6C0002A463946304607F010F8F8BD0E20F8BD5E -:10D6D00069D10100F8B51D4617460E0010D0002D87 -:10D6E0000ED0044607480090206803F03AF900285D -:10D6F00005D12B463A463146201D07F008F8F8BD03 -:10D700000E20F8BD8FD1010038B500280DD0002AB9 -:10D710000BD01C466B4607F05CF8002804D1694624 -:10D720000978C907C90F217038BD0E2038BD38B53A -:10D7300000290AD0002B08D000786C46C007C00F23 -:10D740002070684607F052F838BD0E2038BD00281A -:10D750000BD0002A09D01368002B06D002290CD365 -:10D7600003787B2B03D0072070470E20704740784A -:10D77000002800D11060022901D009207047002044 -:10D780007047F8B51D46074616460C0019D0002E06 -:10D7900017D0306813460A46009039467B2006F0C1 -:10D7A00007F8002802D1002F01D00020F8BD002D7D -:10D7B00007D03768009938460830884203D90920D5 -:10D7C000F8BD0E20F8BDE119288806F066FFC719DC -:10D7D000E119688806F061FFC719E119A88806F009 -:10D7E0005CFFC719E119E88806F057FFC0193060DF -:10D7F000DBE7F8B50546002014460E460090002DE4 -:10D8000037D0002C35D0022E31D329787A2901D097 -:10D810000720F8BD697802220092002903D001296F -:10D8200003D00B20F8BD20601EE00A2E1FD3236812 -:10D83000002B1ED06A463146284606F01FFF23689B -:10D840006A46314628469B1C06F018FF23686A4644 -:10D85000314628461B1D06F011FF23686A463146F3 -:10D8600028469B1D06F00AFF0098B04203D009200D -:10D87000F8BD0E20F8BD0020F8BD13460A4610B5CD -:10D8800001467A2005F094FF10BDF8B5069C1D46B0 -:10D890000E46070023D0002A21D0002D1FD0002CD7 -:10D8A0001DD00120134600906A46384606F01DFF41 -:10D8B000002813D12B466A463146384606F089FFC8 -:10D8C00000280BD123466A463146384606F081FFD0 -:10D8D000002803D10099B14200D00920F8BD0E20E4 -:10D8E000F8BD13460A4610B50146882005F060FFD2 -:10D8F00010BD38B50C4600280FD0002A0DD00121EC -:10D90000134600916A46214606F0EFFE002803D137 -:10D910000098A04203D0092038BD0E2038BD002059 -:10D9200038BD13460A4610B50146892005F040FF70 -:10D9300010BD0000F8B515460F46060007D0002DB3 -:10D9400005D029681C46B94203D10920F8BD0E2034 -:10D95000F8BD2078715C4008C9074000C90F084332 -:10D960002070FD2108402968231D715C8907C90FBB -:10D9700049000843207028683946401C2860104838 -:10D980000090304602F0BEFF0028E1D12346083364 -:10D990002A463946304606F0A8FE0028D8D123464C -:10D9A0000A332A463946304606F09FFE0028CFD17A -:10D9B00023460C332A463946304606F096FEF8BD1B -:10D9C000A1DF01001CB50C4601210191002812D0F5 -:10D9D000002A10D0116800290DD008491346009183 -:10D9E00001AA214602F08EFF002803D10199A1422D -:10D9F00000D009201CBD0E201CBD000035D901003F -:10DA000013460A4610B501468A2005F0D1FE10BD26 -:10DA100013460A4610B501468B2005F0C9FE10BD1D -:10DA2000FFB583B003980C9F0D9E1D460C46002841 -:10DA30003ED0002A3CD0002D3AD0002F38D0002E06 -:10DA400036D02868002833D03868002830D03068B5 -:10DA500000282DD001200190601E022825D31346F6 -:10DA600001AA039806F00AFE124800902B4601AA6C -:10DA70002146039802F046FF002817D10E48009077 -:10DA80003B4601AA2146039802F03CFF00280DD135 -:10DA90000A480090334601AA2146039802F032FF5B -:10DAA000002803D10199A14200D0092007B0F0BDA0 -:10DAB0000E20FBE73BC7010069D1010015DF010023 -:10DAC00013460A4610B50146862005F071FE10BDCA -:10DAD00030B5002807D0002A05D0156800248D42F3 -:10DAE00003D1092030BD0E2030BD1978455D4908AD -:10DAF000ED074900ED0F29431970FD2529401568F0 -:10DB0000455DAD07ED0F6D0029431970FB252940D8 -:10DB10001568455D6D07ED0FAD0029431970F725B8 -:10DB200029401568405D0007C00FC000014319700F -:10DB30001068401C1060204630BD70B5002907D029 -:10DB4000002B05D01D680024954203D1092070BD2B -:10DB50000E2070BD0278D207D20F4A5506781D6894 -:10DB6000B607F60F760032434A5506781D687607E9 -:10DB7000F60FB60032434A5500781D680007C00F03 -:10DB8000C00002434A551868401C1860204670BD0A -:10DB9000F8B507461448009015460E461C46384610 -:10DBA00002F0B0FE00281DD110480090231D2A4627 -:10DBB0003146384602F0A6FE002813D10C48234611 -:10DBC000009008332A463146384602F09BFE002872 -:10DBD00008D10848234600900C332A46314638467F -:10DBE00002F090FEF8BD0000E7C7010011D101006E -:10DBF00015DF01004DD40100F8B50446134800902C -:10DC00001D4616460F46206802F0ABFE00281BD1C9 -:10DC10000F4800902B4632463946606802F0A1FE5C -:10DC2000002811D10B4800902B4632463946A06897 -:10DC300002F097FE002807D1074800902B46324695 -:10DC40003946E06802F08DFEF8BD000013C80100FF -:10DC50003DD101003BDF010073D40100F8B515464A -:10DC60000F4606000ED0002D0CD01C46FFF790FF8B -:10DC7000002806D1234610332A4639463046FFF79E -:10DC800087FFF8BD0E20F8BDF8B51D4617460E00FB -:10DC90000ED0002D0CD00446FFF7AEFF002806D1B1 -:10DCA00020462B463A4631461030FFF7A5FFF8BD17 -:10DCB0000E20F8BD30B51C68944201D1092030BD5A -:10DCC00000788507C207ED0FD20F6D002A43450784 -:10DCD000ED0F0007AD00C00F2A43C00002430A55F4 -:10DCE0001868401C1860002030BD0000FFB583B0EC -:10DCF000074601200C9D0D9C1E460190002F38D038 -:10DD0000002A36D0002E34D0002D32D028680028CA -:10DD10002FD0002C2DD0206800282AD0134601AA2D -:10DD20003846049906F0E1FC002820D1334601AAC8 -:10DD30003846049906F04DFD002818D10E48009091 -:10DD40002B4601AA3846049902F0DCFD00280ED1CA -:10DD50000A480090234601AA3846049902F0D2FDF1 -:10DD6000002804D1019A04998A4200D0092007B002 -:10DD7000F0BD0E20FBE70000D5DD01005DDC0100F9 -:10DD8000FFB5064683B0002001901D461446134699 -:10DD9000176831467F20049A05F00AFD002801D15A -:10DDA000002E01D007B0F0BD002D0ED020680190EC -:10DDB0000748009001AB3A462846049902F0D1FD8D -:10DDC0000028EFD101992160ECE70E20EAE700007E -:10DDD00089DC0100F8B51C4615460E4607466B4621 -:10DDE00006F0F7FC002852D16946207809784008EF -:10DDF000C9074000C90F08432070FD21084069464B -:10DE00000978631C8907C90F490008432070FB216A -:10DE10000840694609782A464907C90F890008431E -:10DE20002070F7210840694609780907C90FC90021 -:10DE3000084320708F210840694609784906490F38 -:10DE4000090108432070694609784006C909400E57 -:10DE5000C901084320703146384606F0BAFC002854 -:10DE600015D1A31C2A463146384606F0B2FC0028DC -:10DE70000DD1E31C2A4631463846FFF729FE00281B -:10DE800005D1231D2A4631463846FFF721FEF8BD4D -:10DE9000F8B50446007816460F468207C107D20F30 -:10DEA000C90F520011434207D20F920011430207DB -:10DEB000D20FD20011434206520F12011143C00982 -:10DEC000C0010143684601701D463246394606F0DE -:10DED0008DFC00281DD12B4632463946601C06F0C9 -:10DEE00085FC002815D12B4632463946A01C06F089 -:10DEF0007DFC00280DD12B4632463946E01CFFF749 -:10DF00001CFE002805D12B4632463946201DFFF75E -:10DF100014FEF8BD10B5144602462068091A1029EF -:10DF200001D2092010BD811810221846FDF7FEF815 -:10DF3000206810302060002010BD10B51C461B6802 -:10DF4000D21A102A01D2092010BD5B1801461022F6 -:10DF50001846FDF7EBF8206810302060002010BD57 -:10DF600038B50C4600280FD0002A0DD001211346E9 -:10DF700000916A46214606F02CFC002803D1009847 -:10DF8000A04203D0092038BD0E2038BD002038BD86 -:10DF900013460A4610B50146772005F009FC10BD6E -:10DFA000FFB581B00198002816D00398002813D03F -:10DFB0001C46024600251B1D0299019806F009FC2B -:10DFC0002079082820D8002601AF009607CF2346E5 -:10DFD00002F098FC194F0BE00E2005B0F0BD009741 -:10DFE0002068A900431801A807C802F08BFC6D1C2B -:10DFF0002079A842F3D801AD07CD23460C3306F0B3 -:10E00000E8FB207B082801D90920E6E701AD00964E -:10E0100007CD2346083302F075FC0025084E08E0C2 -:10E020000096A068A900431801AF07CF02F06AFC70 -:10E030006D1C217BA942F3D8CFE7000073BD01001E -:10E0400069D10100FEB51C46154607000E4615D0E5 -:10E05000002D13D0002C11D0206800280ED00020F5 -:10E06000019002AB01AA384606F0B3FB002804D1A8 -:10E070006846007A942803D00720FEBD0E20FEBD1E -:10E080002B4601AA3146384606F02FFB0028F6D170 -:10E0900007480090234601AA3146384602F032FC78 -:10E0A0000028ECD10199B142E9D00920FEBD000061 -:10E0B00091EA010013460A4610B50146942005F086 -:10E0C00077FB10BDF8B51D4617460E4600280FD049 -:10E0D000002E0DD0002D0BD0044606F018FB0028B2 -:10E0E00005D12B463A463146A01C02F041F9F8BD55 -:10E0F0000E20F8BDF8B51D4617460E4600280FD075 -:10E10000002E0DD0002D0BD0044606F000FB002899 -:10E1100005D12B463A463146A01C02F039FAF8BD2B -:10E120000E20F8BDFEB5089D1C460E46070014D013 -:10E13000002A12D0002C10D0206800280DD0002D0D -:10E140000BD02868002808D000200190032E24D38B -:10E150003878952803D00B20FEBD0E20FEBD01208F -:10E160001346019001AA384606F088FA0C48009040 -:10E17000234601AA3146384602F0C4FB0028EDD1FF -:10E18000084800902B4601AA3146384602F0BAFBF7 -:10E190000028E3D10199B142E0D00920FEBD000082 -:10E1A0006505020091EA010013460A4610B50146D2 -:10E1B000952005F0FDFA10BDFEB5089E1D460C46E3 -:10E1C000070020D0002A1ED0002D1CD0286800286F -:10E1D00019D0002E17D001200190601E052810D301 -:10E1E000134601AA384606F049FA2B4601AA2146F1 -:10E1F0003846009603F0E0FD002803D10199A142C2 -:10E2000000D00920FEBD0E20FEBD1CB500230193E9 -:10E2100001AB009313460A460146972005F078F8B3 -:10E220001CBDF8B5064601201C460D460090002E88 -:10E2300017D0002A15D0002C13D02068002810D049 -:10E24000042D26D313466A46304606F017FA009A84 -:10E25000B05C521C0092002805D0012806D00B208B -:10E26000F8BD0E20F8BD002020600FE0121DAA426C -:10E270000FD86A4629463046236806F0FFF923681E -:10E280006A46294630469B1C06F0F8F90098A842D9 -:10E2900001D00920F8BD0020F8BD13460A4610B58C -:10E2A0000146922005F084FA10BDF8B5064601201B -:10E2B0001C460D460090002E17D0002A15D0002CC9 -:10E2C00013D02068002810D0042D26D313466A46A8 -:10E2D000304606F0D3F9009AB05C521C0092002838 -:10E2E00005D0012806D00B20F8BD0E20F8BD002077 -:10E2F00020600FE0121DAA420FD86A462946304618 -:10E30000236806F0BBF923686A46294630469B1C01 -:10E3100006F0B4F90098A84201D00920F8BD002009 -:10E32000F8BD13460A4610B50146932005F040FAA1 -:10E3300010BDFEB5044600200090342069461D46FD -:10E3400016468880002C31D0002E2FD0002D2DD0E5 -:10E350002F680B463A46314601A806F0D8F9002846 -:10E3600023D16B463A463146201D06F0D0F90028ED -:10E370001BD16B463A463146A01D06F0C8F900286D -:10E3800013D120466B463A463146083006F0BFF9B5 -:10E3900000280AD120466B463A4631460C3000F040 -:10E3A00007F8002801D100992960FEBD0E20FEBDAE -:10E3B000FFB581B01F46002818D00299002915D05A -:10E3C000002F13D00446039A06F0A1F900280ED1BD -:10E3D0003B46A01C039A029906F008FA002806D1D1 -:10E3E000A178012905D00B4E00250FE00E2005B0C5 -:10E3F000F0BD094EF8E71220684300193B46001DA6 -:10E40000039A0299B0470028F1D16D1C2188A942D6 -:10E41000F1D8ECE7C5E00100F5E00100FFB587B0F9 -:10E42000144605002ED0002C2CD00A98002829D0A4 -:10E4300000680A2823D31146322006F033F9064635 -:10E44000A119A88806F02EF98619A119E88806F006 -:10E4500029F98619A119288906F024F98619A11924 -:10E46000A88906F01FF980190090A8890290C100C0 -:10E470004118009809180A980068814204D90920B7 -:10E480000BB0F0BD0E20FBE7002640E021180A206B -:10E4900070434719F88906F005F900994018397C4E -:10E4A0002154B97C401C8B07CA07DB0FD20F5B00DD -:10E4B0001A434B07DB0F9B001A430B07DB0FDB00F4 -:10E4C0001A43CB06DB0F1B011A438B06DB0F4906F1 -:10E4D0005B01C90F1A4389010A432254F97C401C8D -:10E4E000C907C90F2154401C21180090B88A06F0B2 -:10E4F000D9F801460098081821180090F88A06F00B -:10E50000D1F8014600980818761CB6B2009002981F -:10E5100086420098BAD30A9908600020B0E7F8B59F -:10E520001D461646040033D0002E31D0002D2FD0CA -:10E53000002000902F686B463A463146204606F090 -:10E54000E6F8002823D16B463A463146201D06F0F6 -:10E55000DEF800281BD16B463A463146A01D06F076 -:10E56000D6F8002813D120466B463A46314608308B -:10E5700006F0CDF800280AD120466B463A463146CF -:10E580000C3000F007F8002801D100992960F8BD8F -:10E590000E20F8BDFFB581B002AD0ECD044606F0E9 -:10E5A000B6F8002818D102AD0ECDA01C06F0AFF8C9 -:10E5B000060011D1251D00271DE002AE0ECE284613 -:10E5C00006F0A5F8060007D1049803990068628850 -:10E5D000091A8A4202D9092005B0F0BD029B696878 -:10E5E000C018FCF7A3FD049861880068083541183D -:10E5F00004987F1C01602088B842DED83046EBE7E3 -:10E60000FEB51D461646040036D0002E34D0002D2F -:10E6100032D0002000902F683720694688806B46F2 -:10E620003A46314601A806F072F8002823D16B461D -:10E630003A463146201D06F06AF800281BD16B4689 -:10E640003A463146A01D06F062F8002813D1204654 -:10E650006B463A463146083006F059F800280AD190 -:10E6600020466B463A4631460C3000F007F8002849 -:10E6700001D100992960FEBD0E20FEBDFFB581B01D -:10E680001D4617460446029906F041F8060005D1DA -:10E6900028682288391A8A4202D9092005B0F0BDBB -:10E6A00002994018A11CFCF741FD218828684018F8 -:10E6B00028603046F2E7FFB583B0144606002CD040 -:10E6C000002C2AD00698002827D000680A2821D3D9 -:10E6D0001146332005F0EBFF05466119B08805F0BF -:10E6E000E6FF45196119F08805F0E1FF4519611948 -:10E6F000308905F0DCFF45196119B08905F0D7FFB5 -:10E700004519B089019081004018411906980068A8 -:10E71000814204D9092007B0F0BD0E20FBE7002795 -:10E7200014E006207843801900906119C08905F033 -:10E73000BEFF451900986119008A05F0B8FF451918 -:10E7400000987F1C807C6055BFB26D1C0198874289 -:10E75000E7D3069805600020DDE7F8B51F461446AC -:10E7600005002ED0002C2CD0002F2AD038680D2880 -:10E7700025D31146392005F09FFF0646A119A88828 -:10E7800005F09AFF8619A119E88805F095FF86190A -:10E79000A119288905F090FF8619A119A88905F00B -:10E7A0008BFF8619A87BA055761CA119288A05F035 -:10E7B00083FF2A8A861939689019884203D909206B -:10E7C000F8BD0E20F8BD002A06D02946A019123146 -:10E7D000FCF7ACFC288A861900203E60F8BDFFB526 -:10E7E00083B0144605002CD0002C2AD006980028AF -:10E7F00027D000680A2821D31146302005F061FF98 -:10E800000646A119A88805F05CFF8619A119E888B9 -:10E8100005F057FF8619A119288905F052FF8619BE -:10E82000A119A88905F04DFF8619A8890190C1009A -:10E83000081A811906980068814204D9092007B096 -:10E84000F0BD0E20FBE7002719E0F800401900900A -:10E85000A119C08905F035FF86190098007CA055E4 -:10E860000098761CA119408A05F02BFF86190098A4 -:10E87000A119808A05F025FF86197F1CBFB2019877 -:10E880008742E2D3069806600020D8E7F8B51F4615 -:10E890001446050030D0002C2ED0002F2CD0386824 -:10E8A0000E2827D31146362005F010FF0646A11981 -:10E8B000A88805F00BFF8619A119E88805F006FF66 -:10E8C0008619A119288905F001FF8619A119A889BF -:10E8D00005F0FCFE8619A119E88905F0F7FE8619F6 -:10E8E000A119288A05F0F2FE2A8A8619396890193A -:10E8F000884203D90920F8BD0E20F8BD002A06D0B1 -:10E900002946A0191231FCF711FC288A861900202B -:10E910003E60F8BDFEB504460020009031206946F7 -:10E920001D4616468880002C31D0002E2FD0002D99 -:10E930002DD02F680B463A46314601A805F0E7FE78 -:10E94000002823D16B463A463146201D05F0DFFEF4 -:10E9500000281BD16B463A463146A01D05F0D7FE74 -:10E96000002813D120466B463A463146083005F060 -:10E97000CEFE00280AD120466B463A4631460C307E -:10E9800000F007F8002801D100992960FEBD0E2093 -:10E99000FEBDFFB581B01F460446039A029905F0FB -:10E9A000B6FE00280FD1A51C002609E03B462846EC -:10E9B000039A029900F0BDF8002804D10A35761CAC -:10E9C0002188B142F2D805B0F0BD10B5002808D0BA -:10E9D000002A06D0002B04D01968052903D209208B -:10E9E00010BD0E2010BD3A21117000215170848895 -:10E9F0009470240AD470007B1071052018600846BA -:10EA000010BDF8B51F461446050033D0002C31D098 -:10EA1000002F2FD038680F282AD31146382005F050 -:10EA20005AFE0646A119A88805F055FE8619A119B7 -:10EA3000E88805F050FE8619A119288905F04BFEDB -:10EA40008619A119A88905F046FE8619A87BA0554C -:10EA5000761CA119288A05F03EFE8619A119688A3C -:10EA600005F039FE6A8A861939689019884203D9F7 -:10EA70000920F8BD0E20F8BD002A06D02946A019AD -:10EA80001431FCF753FB688A861900203E60F8BDFC -:10EA9000FFB510680027081A81B015460E461C46BF -:10EAA000042802D2092005B0F0BD019805F0E6FD6A -:10EAB000A31C2A463146019805F0E0FD3846F2E7EE -:10EAC000F8B51D4616460F46044605F020FE002800 -:10EAD00005D12B4632463946A01C05F018FEF8BD7C -:10EAE000F8B51C460D46060019D0002A17D0002C98 -:10EAF00015D00120134600906A46304605F0F5FD1A -:10EB000000280BD123466A462946304605F0EDFD24 -:10EB1000002803D10099A94200D00920F8BD0E2099 -:10EB2000F8BD13460A4610B50146992004F040FE90 -:10EB300010BDF8B51D4616460F46044605F0E7FD24 -:10EB4000002805D12B4632463946A01C00F0C6F8F5 -:10EB5000F8BDF8B506460120069C1F460D460090FC -:10EB6000002E1FD0002A1DD0002F1BD0002C19D042 -:10EB70002068002816D0062D2CD313466A4630464E -:10EB800005F07CFD3B466A462946304605F076FD99 -:10EB9000009AB05C521C0092002805D0012806D0D3 -:10EBA0000B20F8BD0E20F8BD002020600FE0D21C25 -:10EBB000AA420FD86A4629463046236805F05EFD12 -:10EBC00023686A46294630469B1C05F0F7FD0098ED -:10EBD000A84201D00920F8BD0020F8BD13460A461E -:10EBE00010B50146902004F0E3FD10BDF8B5069C79 -:10EBF0001D460E46070023D0002A21D0002D1FD02D -:10EC0000002C1DD00120134600906A46384605F0BE -:10EC10006CFD002813D12B466A463146384605F074 -:10EC200064FD00280BD123466A463146384605F07C -:10EC30005CFD002803D10099B14200D00920F8BD45 -:10EC40000E20F8BD13460A4610B50146962004F082 -:10EC5000AFFD10BDF8B5064601201C460D460090DC -:10EC6000002E17D0002A15D0002C13D020680028C1 -:10EC700010D0042D26D313466A46304605F0FEFC1C -:10EC8000009AB05C521C0092002805D0012806D0E2 -:10EC90000B20F8BD0E20F8BD002020600FE0121DF3 -:10ECA000AA420FD86A4629463046236805F0E6FC9A -:10ECB00023686A46294630469B1C05F0DFFC009815 -:10ECC000A84201D00920F8BD0020F8BD13460A462D -:10ECD00010B50146912004F06BFD10BDF8B51D463E -:10ECE00016460F46044601F053FC002805D12B467A -:10ECF00032463946201DFFF7E3FEF8BDF8B515464C -:10ED00000F46060029D0002D27D0002B25D01C4609 -:10ED100005F05FFD00281FD1631C2A4639463046A6 -:10ED200005F057FD002817D1A31C2A463946304666 -:10ED300005F0DBFC00280FD1231D2A46394630465A -:10ED400005F0D3FC002807D1A01D831C00902A46A3 -:10ED50003946304603F054FFF8BD0E20F8BD0000E0 -:10ED6000FEB51C46154607000E4615D0002D13D0E3 -:10ED7000002C11D0206800280ED00020019002AB9A -:10ED800001AA384605F025FD002804D16846007A1E -:10ED9000982803D00720FEBD0E20FEBD2B4601AAF9 -:10EDA0003146384605F0A1FC0028F6D1074800900E -:10EDB000234601AA3146384601F0A4FD0028ECD1D3 -:10EDC0000199B142E9D00920FEBD0000FDEC01002F -:10EDD00013460A4610B50146982004F0E9FC10BD20 -:10EDE000F8B507461948009015460E461C463846A9 -:10EDF00001F088FD00280ED115480090231D2A46F9 -:10EE00003146384601F07EFD002804D12868301ACA -:10EE1000042801D20920F8BD23460A332A46314688 -:10EE2000384605F02BFC23460C332A46314638463B -:10EE300005F024FC204608302346009010332A4673 -:10EE40003146384603F0DCFEF8BD000065050200DF -:10EE500055EE0100FFB581B016460F461C460198DD -:10EE6000FDF7FCFA00280BD1631C324639460198A5 -:10EE7000FDF7F4FA050003D13068B84202D1092049 -:10EE800005B0F0BD6B4632463946019805F096FC58 -:10EE9000A0784108684600784900C207D20F1143A4 -:10EEA000F92211404207920F52001143F7221140FC -:10EEB0000207D20FD2001143C006EF22C00F11404B -:10EEC00000010143A1702846DAE7FEB50746106845 -:10EED0001546081A0E461C46022812D3384605F07D -:10EEE000CDFB2868B0420CD001AB2A4631463846EB -:10EEF00005F064FC68460079A0702868301A022882 -:10EF000001D20920FEBD231D2A463146384605F0B0 -:10EF1000B5FBA01D831C00902A463146384603F0FD -:10EF20006FFEFEBDF8B51D4616460F46044605F0B9 -:10EF3000EEFB002815D12B4632463946A01C05F0C1 -:10EF4000E6FB00280DD12B4632463946201D05F040 -:10EF5000DEFB002805D12B4632463946A01D05F0C0 -:10EF6000D6FBF8BDF8B5064610680F46091A1546D7 -:10EF70001C46022940D3315C2078CA074008400073 -:10EF8000D20F10438B07FD22DB0F10405B001843AC -:10EF9000FB2318404B07DB0F9B001843F723184057 -:10EFA0000B07DB0FDB001843EF231840CB06DB0F0A -:10EFB0001B011843DF2318408B06DB0F5B0118434E -:10EFC0004906BF23C90F18408901084320702968EA -:10EFD000701C095C6078CB0740084000DB0F890794 -:10EFE0001843C90F10404900084360702868801C0E -:10EFF0002860381A022801D20920F8BD23460833B8 -:10F000002A463946304605F039FB20460A30009042 -:10F01000231D2A463946304603F0F2FD0028ECD184 -:10F020001548234600900C332A463946304601F0F5 -:10F0300069FC0028E1D111482346009010332A468C -:10F040003946304601F05EFC0028D6D10B482346F5 -:10F05000009014332A463946304601F053FC00280C -:10F06000CBD106482346009018332A46394630460D -:10F0700001F048FCF8BD0000DF37020055EE01004A -:10F08000FFB583B003980C9F0D9E1D460C460028CB -:10F090003FD0002A3DD0002D3BD0002F39D0002E8C -:10F0A00037D02868002834D03868002831D030683C -:10F0B00000282ED001200190002C27D0601E0228AD -:10F0C00024D3134601AA039805F0D8FA12480090F9 -:10F0D0002B4601AA2146039801F014FC002816D102 -:10F0E0000E4800903B4601AA2146039801F00AFC15 -:10F0F00000280CD10090334601AA2146039801F064 -:10F1000001FC002803D10199A14200D0092007B0D9 -:10F11000F0BD0E20FBE7000065EF0100E1ED01000E -:10F12000FFB581B014460E00074607D0002C05D06D -:10F130002568052D04D2092005B0F0BD0E20FBE79F -:10F1400013460A460146A22004F032FB0028F3D100 -:10F15000002FF1D10448009023462A4631460498F6 -:10F1600001F0FFFBE8E7000025EF0100FEB5089D78 -:10F170001C460E46070014D0002A12D0002C10D0D6 -:10F18000206800280DD0002D0BD02868002808D05A -:10F1900000200190042E23D33878A32803D0072021 -:10F1A000FEBD0E20FEBD01201346019001AA384687 -:10F1B00005F064FA0C480090234601AA314638460F -:10F1C00001F0A0FB0028EDD100902B4601AA3146AA -:10F1D000384601F097FB0028E4D10198B04201D0F5 -:10F1E0000920FEBD0020FEBDE1ED0100FFB581B0AC -:10F1F00014460E00074610D0002C0ED02568052DB1 -:10F2000012D313460A460146A32004F0D1FA00287F -:10F2100001D1002F03D005B0F0BD0E20FBE7206820 -:10F220000090801CA84201D90920F4E76B462A46C9 -:10F23000314604A805F06BFA0028ECD10099216052 -:10F24000E9E7F8B50E4607460020694608701C46F7 -:10F2500015466B463146384605F0BBFA00280AD100 -:10F2600068460078231DC007C00F20702A4631462B -:10F27000384605F070FAF8BD10B5002808D0002A0D -:10F2800006D0002B04D01968062903D2092010BD2E -:10F290000E2010BD5321117000215170848894708C -:10F2A000240AD470C0881071000A507106201860BA -:10F2B000084610BDF8B51D4617460E0017D0002DA4 -:10F2C00015D0002813D0044605F021FA00280DD1EE -:10F2D0002B463A463146A01C01F05AF9002805D1C8 -:10F2E0002B463A463146A01D05F011FAF8BD0E2016 -:10F2F000F8BD0000FEB51E461700044622D0002EC1 -:10F3000020D0002C1ED000200190356801AB2A4689 -:10F310003946204605F0FBF9002814D101AB2A46F6 -:10F320003946201D05F0F3F900280CD101AB2A461F -:10F330003946A01D00F024F8050004D1A079022868 -:10F3400002D016E00E20FEBDA08802A901F0D8FB75 -:10F3500005280ED001A8009002984C214843074987 -:10F3600033684018018940683A4603F061FC0500A3 -:10F37000E9D1019830602846FEBD0000EC4C002029 -:10F38000F8B51D4617460E000FD0002D0DD00028F1 -:10F390000BD0044605F02AFA002805D12078012870 -:10F3A00005D002280AD00720F8BD0E20F8BD2B4654 -:10F3B0003A463146A01CFFF77DFFF8BD2B463A4682 -:10F3C0003146A01C00F09EF8F8BD002808D0002AA5 -:10F3D00006D0002B04D01968042903D209207047F5 -:10F3E0000E20704754211170002151708088907058 -:10F3F000000AD070042018600846704710B5002835 -:10F4000008D0002A06D0002B04D01968052903D2A1 -:10F41000092010BD0E2010BD522111700021517025 -:10F4200084889470240AD470807910710520186043 -:10F43000084610BD10B5002808D0002A06D0002BC1 -:10F4400004D01968052903D2092010BD0E2010BD73 -:10F45000552111700021517084889470240AD47051 -:10F460008079107105201860084610BDF0B585B090 -:10F470001E461746040027D0002F25D0002E23D08B -:10F4800000200190356850206946088101AB2A466A -:10F49000394602A805F03BF9002816D101AB2A46EF -:10F4A0003946201D05F033F900280ED101AB2A465C -:10F4B0003946A01D00F026F8050006D1207B012862 -:10F4C00005D0062803D017E00E2005B0F0BDA088B7 -:10F4D00003A901F015FB05280ED001A800900398A0 -:10F4E0004C214843064933684018018940683A4630 -:10F4F00003F09EFB0500E8D1019830602846E4E760 -:10F50000EC4C0020FFB581B01D4617460446029919 -:10F5100005F0FDF8002832D12B463A46A01C02998E -:10F5200001F036F800282AD12B463A46A01D029950 -:10F5300005F05CF9002822D12B463A46E01D0299DD -:10F5400005F054F900281AD120462B463A460830D7 -:10F55000029905F0DCF8002811D16089694608801D -:10F560002B463A466846029905F0D1F8060006D1C6 -:10F5700028686A461288391A914202D2092005B0D9 -:10F58000F0BD0299401821460C31FBF7CFFD6946CA -:10F5900009882868401828603046F0E7F8B5074623 -:10F5A00010681546081A0E461C46052801D2092087 -:10F5B000F8BD384605F062F8A31C2A4631463846A5 -:10F5C00005F0FCF8231D2A463146384605F056F86A -:10F5D0002046083007D0031D00902A4631463846A1 -:10F5E00001F0D8F9F8BD0E20F8BD00007CB5054645 -:10F5F00000201C460E460190002D0DD0002A0BD095 -:10F60000002C09D02068002806D0042E1AD32878B0 -:10F61000A62803D007207CBD0E207CBD0120134608 -:10F62000019001AA284605F029F8084800902346D1 -:10F6300001AA3146284601F065F90028EDD101986C -:10F64000B04201D009207CBD00207CBD9DF50100A9 -:10F65000FFB583B014460D0006460ED0002C0CD02A -:10F6600013460A460146A620276804F0A1F80028A0 -:10F6700001D1002E03D007B0F0BD0E20FBE72068BB -:10F6800001900648009001AB3A462946069801F0E1 -:10F6900068F90028EFD101992160ECE70F470200DB -:10F6A000F8B504460020069D1E460F460090002C2B -:10F6B00008D0002A06D0002E04D0002D02D0062F3C -:10F6C0001DD101E00E20F8BD2078A12801D007202F -:10F6D000F8BD0120134600906A46204604F0CEFF94 -:10F6E00033466A463946204604F0C8FF0099605CFC -:10F6F000491C0091002800D12860062901D009206A -:10F70000F8BD0020F8BDFEB51D46074614460E00A4 -:10F710001FD0002C1DD0206802900020019001A86D -:10F7200013460A4600903946A12003F0F1FD002857 -:10F7300001D1002F00D0FEBD002D0AD001AB314613 -:10F740002846029A04F0E3FF0028F4D101992160D1 -:10F75000FEBD0E20FEBDF8B5074610680E461546E4 -:10F760001C46B04201D10920F8BD384605F026F804 -:10F770002078012803D0022801D00720F8BD231DDE -:10F780002A4631463846FFF7A0FBF8BD7CB51E4639 -:10F790000C4605001AD0002A18D001200190601EE6 -:10F7A000022811D3134601AA284604F067FF08482F -:10F7B0000090334601AA2146284601F0A3F800280C -:10F7C00003D10199A14200D009207CBD0E207CBD4F -:10F7D00057F7010013460A4610B50146A82003F06A -:10F7E000E7FF10BDFEB5089D1E460C4607002FD052 -:10F7F000002A2DD0002E2BD03068002828D0002DD4 -:10F8000026D02868002823D001200190601E0328FC -:10F810001CD3134601AA384604F0DBFF002816D19A -:10F820000C480090334601AA2146384601F06AF898 -:10F8300000280CD100902B4601AA2146384601F041 -:10F8400061F8002803D10199A14200D00920FEBD32 -:10F850000E20FEBD65050200FEB51D460746144696 -:10F860000E001FD0002C1DD02068029000200190B7 -:10F8700001A813460A4600903946A02003F048FD2F -:10F88000002801D1002F00D0FEBD002D0AD001AB11 -:10F8900031462846029A04F03AFF0028F4D1019933 -:10F8A0002160FEBD0E20FEBDF8B504460020069D79 -:10F8B0001E460F460090002C08D0002A06D0002ECD -:10F8C00004D0002D02D0072F1DD101E00E20F8BD7D -:10F8D0002078A72801D00720F8BD0120134600900A -:10F8E0006A46204604F0CAFE33466A463946204638 -:10F8F00004F0C4FE2B466A463946204604F0BEFE9C -:10F900000098072801D00920F8BD0020F8BD134653 -:10F910000A4610B50146A72003F04AFF10BDF8B50E -:10F920000025069E0C460095002834D0002B32D0CE -:10F93000002E30D0042C3BD30178AA2901D0072017 -:10F94000F8BD01210091002A25D00799002922D075 -:10F95000877841783F020F431780C17804220092D4 -:10F9600001290AD0356000990A46491CA1421FD8D6 -:10F97000825C0091002A10D010E0062C18D3326867 -:10F98000002A08D04679077931023943118000995D -:10F99000891C0091E8E70E20F8BD1D606A462146EB -:10F9A000079B04F0D8FE0028F6D10099A142F3D0BD -:10F9B0000920F8BDFFB581B00A9F14460D002DD077 -:10F9C000002C2BD02668052E26D313460A46AA20E3 -:10F9D000019903F0EDFE002803D10198002802D020 -:10F9E000002005B0F0BD0498002817D0002F15D0D6 -:10F9F0002068811CB1420FD839882A181170090A71 -:10FA00005170C11C3A88801CB14205D8012129548B -:10FA1000401C8718B74203D90920E2E70E20E0E72F -:10FA200028180499FBF782FB2760D9E7FEB5074643 -:10FA300001200090089C01A81D460E460290002F50 -:10FA40001CD0002A1AD0002D18D02868002815D004 -:10FA5000002C13D00998002810D0082E28D3134664 -:10FA60006A46384604F00AFE0098395C401C009053 -:10FA7000002905D001290AD00B20FEBD0E20FEBDB5 -:10FA80000021001D2960B04212D121801AE06A468F -:10FA900031463846029B04F0F1FD68468288208892 -:10FAA000824205D822800098011D5118B14201D030 -:10FAB0000920FEBD39182868FBF738FB208800991B -:10FAC000401800906A4631463846099B04F043FED0 -:10FAD000FEBD13460A4610B50146A92003F068FE94 -:10FAE00010BDFFB581B000260A9C0F460546009662 -:10FAF000002814D0002A12D0049800280FD0002C1F -:10FB00000DD0206800280AD04068002807D0062FB2 -:10FB100034D32878A52804D0072005B0F0BD0E20E6 -:10FB2000FBE70120134600906A46284604F0DDFDFD -:10FB30000028F2D16A4639462846049B04F0D5FDD8 -:10FB40000028EAD100996A5C491C0091012A01D081 -:10FB50002660E2E76A4639462846236804F0C5FD78 -:10FB60000028DAD123686A46394628469B1C04F0EF -:10FB7000BCFD0028D1D100998F4201D10920CCE7EA -:10FB80006A5C491C0091002AC7D121684E60C4E715 -:10FB9000FFB581B0074602981E461446002820D0C3 -:10FBA000002C1ED02568052D02D2092005B0F0BD1D -:10FBB000134602463946A52003F0FAFD0028F5D188 -:10FBC00021680091002F09D1002E0AD06B462A46E9 -:10FBD0003046029900F07EF80028E7D100992160B4 -:10FBE000E4E70E20E2E70000FEB5089D1E460C4645 -:10FBF000070024D0002A22D0002E20D0002D1ED0B5 -:10FC000001200190601E042817D3134601AA38462C -:10FC100004F034FD334601AA2146384604F02EFD97 -:10FC2000084800902B4601AA2146384600F06AFE9B -:10FC3000002803D10199A14200D00920FEBD0E2069 -:10FC4000FEBD000099FC0100FEB51D4607461446A6 -:10FC50000E001FD0002C1DD02068029000200190C3 -:10FC600001A813460A4600903946A42003F050FB31 -:10FC7000002801D1002F00D0FEBD002D0AD001AB1D -:10FC800031462846029A00F025F80028F4D101995F -:10FC90002160FEBD0E20FEBDFFB583B015460E46A9 -:10FCA0001C461F88039804F020FD002810D1A31CD7 -:10FCB0002A463146039804F018FD002808D1208810 -:10FCC0000190231D2A4631460097039800F012FD4B -:10FCD00007B0F0BDF8B51D4616460F46044604F0C1 -:10FCE00016FD00280ED12B4632463946A01C04F0E2 -:10FCF0000EFD002806D10095218833463A466068FB -:10FD000000F02DFDF8BD08B500230093002A04D0B3 -:10FD1000002802D0032912D101E00E2008BD03788B -:10FD2000B02B01D0072008BD0123009313466A467B -:10FD300004F0DBFC0028F6D100990329F3D0092058 -:10FD400008BD13460A4610B50146B02003F030FD49 -:10FD500010BD08B500230093002A04D0002802D06B -:10FD6000032912D101E00E2008BD0378B12B01D088 -:10FD7000072008BD0123009313466A4604F0B5FC32 -:10FD80000028F6D100990329F3D0092008BD1346B5 -:10FD90000A4610B50146B12003F00AFD10BDFEB5BC -:10FDA0001C461646050024D0002E22D0002C20D060 -:10FDB0000020009027687020694688806B463A468C -:10FDC000314601A804F0A3FC002811D16B463A4645 -:10FDD0003146281D04F09BFC002809D16B463A46A9 -:10FDE0003146A81D00F007F8002801D100992160D4 -:10FDF000FEBD0E20FEBDFFB581B01D460E0012D027 -:10FE0000002D10D000280ED00446039A00F02EF8E2 -:10FE1000070006D1286803992288091A8A4204D962 -:10FE2000092005B0F0BD0E20FBE78019211DFBF76E -:10FE30007DF921882868401828603846F1E7F8B530 -:10FE400015460F4606000FD0002D0DD0002B0BD00D -:10FE50001C4604F04AFC002805D1A31C2A4639465A -:10FE6000304604F042FCF8BD0E20F8BDF8B51D4642 -:10FE700017460E000FD0002D0DD000280BD00446E1 -:10FE800004F045FC002805D12B463A463146A01C1B -:10FE900004F03DFCF8BD0E20F8BD0000FEB5089D45 -:10FEA0001C460F46060027D0002A25D0002C23D060 -:10FEB0002068002820D0002D1ED00120134601907C -:10FEC00001AA304604F011FC002816D11048009019 -:10FED000234601AA3946304600F014FD00280CD113 -:10FEE000216800290AD001997218521C2A602268E0 -:10FEF000491C1288511805E00E20FEBD0021296022 -:10FF00000199491C0191B942F7D00920FEBD0000BA -:10FF10003FFE010013460A4610B50146B22003F029 -:10FF200047FC10BDF8B500261C461746054600964E -:10FF3000002809D0002F07D0002C05D02068002809 -:10FF400002D0062928D101E00E20F8BD28786928C2 -:10FF500017D10120134600906A46284604F0FBFBA7 -:10FF60000028F2D1396801290DD020290BD0212990 -:10FF700009D0222907D0232905D0242903D02529F7 -:10FF800001D00720F8BD0098295C401C0090002992 -:10FF900000D12660062801D00920F8BD0020F8BD58 -:10FFA00008B500230093002805D0002A03D00529B6 -:10FFB00003D2092008BD0E2008BD0378682B01D0AC -:10FFC000072008BD0123009313466A4604F0C3FBD3 -:10FFD00008BD10B50446002909D0002A07D01346F1 -:10FFE0000A460146682003F0E3FB002810BD0E20FE -:10FFF00010BD4058002800D00120704701000007C4 -:020000040002F8 -:1000000017A5D84602FFFFFF00000000020001FF15 -:100010000201FFFF40420F00FFB581B014460D0002 -:10002000074623D0002C21D013460A4601466920FA -:10003000266803F0BDFB002802D1002F02D000206B -:1000400005B0F0BD0A98002810D0049801280FD000 -:1000500020280DD021280BD0222809D0232807D012 -:10006000242805D0252803D00720E9E70E20E7E75C -:10007000206800906B463246294604A804F085FBB0 -:100080000028DDD10498222823D006DC01280BD0DB -:10009000202810D0212839D114E0232820D024286A -:1000A00025D0252832D129E06B46324629460A98C8 -:1000B000FBF7E5FB28E06B46324629460A98FDF738 -:1000C00043FA21E06B46324629460A98FDF7A8FA22 -:1000D0001AE06B46324629460A98FDF7D0FA13E03B -:1000E0006B46324629460A98FDF7F4FA0CE06B4657 -:1000F000324629460A98FDF71AFB05E06B46324660 -:1001000029460A98FDF757FA002899D100982060EF -:1001100095E7F8B5054600201C4616460F460090A8 -:10012000002D0CD0002E0AD0002C08D0206800280A -:1001300005D0062F4BD3287868281AD101E00E206D -:10014000F8BD0120134600906A46284604F003FBE0 -:100150000028F5D1316801290DD020290BD02129A3 -:1001600009D0222907D0232905D0242903D0252905 -:1001700001D00720F8BD009AAB5C521C0092002B06 -:1001800009D022292CD009DC01290ED0202913D036 -:10019000212919D11DE00021216015E0232926D055 -:1001A00024292BD025290FD12FE06A46394628462D -:1001B0002368FBF74DFB05E06A463946284623686D -:1001C000FDF7A1F90028D5D10099B942D2D0092074 -:1001D000F8BD6A46394628462368FDF7FFF9F1E77E -:1001E0006A46394628462368FDF73CFAEAE76A463C -:1001F000394628462368FDF753FAE3E76A4639464D -:1002000028462368FDF780FADCE76A463946284627 -:100210002368FDF7BAF9D5E7FFB583B017460D4659 -:1002200006000ED0002402AB01AA019404F0D1FA1A -:10023000002804D16846007A622804D0072007B05D -:10024000F0BD0E20FBE73B4601AA2946304604F0EC -:100250004CFA0028F3D1009401AA29463046069BA7 -:1002600000F050FB0028EAD10199A942E7D009200B -:10027000E5E70000FFB581B014460D0006460ED03C -:10028000002C0CD013460A4601466220276803F072 -:100290008FFA002801D1002E03D005B0F0BD0E204A -:1002A000FBE70448009023463A462946049800F0AC -:1002B00058FBF2E7ED470200FEB500261C460F464C -:1002C0000546019600280DD0002A0BD0002C09D03D -:1002D0002068002806D0042F19D32878672803D077 -:1002E0000720FEBD0E20FEBD01201346019001AA8D -:1002F000284604F0FAF90028F5D101996A5C491CF6 -:100300000191012A05D026600199B942EBD009205C -:10031000FEBD236801AA394628461B1D04F0E5F9F5 -:100320000028F5D1009601AA39462846236800F036 -:10033000E9FA0028E8D0FEBD13460A4610B501468A -:10034000672003F035FA10BD70B514460246184612 -:1003500023680025C91A102901D2092070BD9918F7 -:100360001022FAF7E3FE206810302060284670BDA6 -:1003700070B51C460B46014620680025121A102A4B -:1003800001D2092070BDC0181022FAF7CFFE2068F4 -:1003900010302060284670BDFFB583B014460D466E -:1003A000070015D0002C13D0002664206946019662 -:1003B0000872002D23D002AB01AA2946384604F06A -:1003C000FDF96846007A642804D00B2007B0F0BD20 -:1003D0000E20FBE7009401AA29463846069B02F04E -:1003E0003FFC0028F2D1009601AA294638460C9B12 -:1003F00000F088FA0028E9D10199A942E6D0092045 -:10040000E4E70000FFB583B014460D00064611D0A6 -:10041000002C0FD013460A4601466420276803F0DB -:10042000C7F9002804D120680190002E04D00020D4 -:1004300007B0F0BD0E20FBE70648009001AB3A463E -:100440002946069800F08DFA0028F1D10198206025 -:10045000EDE7000091050200F8B5044601201E46B4 -:1004600017460D460090002C19D0002F17D0002EF3 -:1004700015D00698002812D03B68002B0FD03068AA -:1004800000280CD006980068002808D0042D33D32B -:1004900061780220002904D0012906D024E00E2032 -:1004A000F8BD0090002010600EE0072D24D30090CE -:1004B0006A462946204604F0E1F800983968205C35 -:1004C00088700098401C0090009AA05C002802D020 -:1004D000012809D101E000203060521C0092A05C8C -:1004E000002803D0012804D00B20F8BD0699002075 -:1004F0000860521CAA4201D00920F8BD0020F8BDB6 -:10050000FFB581B015460E0004460ED0002D0CD06C -:1005100013460A46014665202F6803F049F9010099 -:10052000286804D0084605B0F0BD0E20FBE7002C7B -:1005300001D00020F7E7411CB94209D80499315491 -:100540000A99401C00290BD004994418BC4201D9D7 -:100550000920E8E70A4630180A99FAF7E7FD20462D -:100560002860E6E7F8B5074610681546081A0E46F3 -:100570001C46032801D20920F8BD384604F07EF855 -:10058000A31C2A463146384604F018F90020F8BD6D -:10059000F8B51D4616460F46044604F0B8F8002884 -:1005A00005D12B4632463946A01C04F01FF9F8BD90 -:1005B0007CB5064601201C460D460190002E20D039 -:1005C000002A1ED0002C1CD01068002819D02068EA -:1005D000002816D00C481346009001AA304600F0BF -:1005E00091F900280CD10090234601AA29463046F3 -:1005F00000F088F9002803D10199A94200D0092010 -:100600007CBD0E207CBD000049030200FFB583B015 -:1006100014460D00064611D0002C0FD013460A4692 -:1006200001466320276803F0C3F8002804D120683E -:100630000190002E04D0002007B0F0BD0E20FBE793 -:100640000648009001AB3A462946069800F089F921 -:100650000028F1D101992160EEE70000ED4702008A -:10066000002808D0002A06D01368002B03D00229E6 -:1006700003D0092070470E2070470178662901D009 -:10068000072070474078002800D110600020704794 -:10069000FFB581B01E4614460D0018D0002C16D0B0 -:1006A00013460A4627686620019903F081F800285E -:1006B00003D10198002802D0002005B0F0BD002E23 -:1006C00005D02068411DB94203D90920F5E70E2065 -:1006D000F3E731782954401C2A1871881170090AEF -:1006E0005170801CB1882A181170090A5170801C41 -:1006F0002060E1E7FFB581B00F46002069460B9E00 -:10070000087010681C461546B8421BD00B46394687 -:10071000019804F053F868460078012806D0002CB0 -:1007200001D000202060002005B0F0BD002C0BD0CF -:100730002068002808D00A998E4203D829687A1ABE -:10074000B24203D20920EFE70E20EDE7019A8918A3 -:100750003246FAF7EBFC286880192860E3E7FFB51A -:1007600081B00A9C0D46060001D0012000E0002067 -:100770006946087023466846049A039904F036F8DF -:10078000070007D1002E10D020680499091AA94249 -:1007900002D2092005B0F0BD03992A46401831461F -:1007A000FAF7C4FC2068401920603846F2E70000E0 -:1007B00010B51248017842780907090F022910D8AC -:1007C000252A0ED8002904D001290CD05523002158 -:1007D00011E00B49801CFAF7CDFC002801D1012063 -:1007E00010BD002010BD0F23F1E74418A4789C42EF -:1007F000F7D1491CC9B29142F7D3F0E7504A002023 -:100800003E48020070B5144900240B68002B21D02B -:100810000C46443C25462846AD6C256322464030B4 -:10082000E36220320469C368946153610A468369B4 -:10083000443A40691364D06300200860888008311E -:100840000860888008310860888054390124486233 -:1008500003F018FB204670BD80440020F8B5234803 -:10086000C16800293ED00E6821494C680769C078EC -:10087000E11B0D022D0AED1C002814D101201D4A98 -:10088000000450601B4A403A50601B494000086019 -:100890001A4908601A49012008602F20FAF71AFC4B -:1008A00012490120C870B54200D23546E81900024D -:1008B0000F4B000A403318600D4A5168001B091B9A -:1008C0000902090A0002000AC91C814209D95068BC -:1008D00018602F20FAF7FEFB0120074940048039F9 -:1008E0000860F8BD02F0ACFEF8BD00005C430020DB -:1008F000001501404013014080E200E000E100E00B -:1009000000100140FFB581B01168029800250A9ED1 -:100910001C461746814202D1092005B0F0BD0146B0 -:100920006B46019803F04AFF68460078012804D01E -:10093000002811D00B252846EFE7002C0AD02368A9 -:10094000002B07D0002EF6D03A4602990198B04706 -:100950000546F0E70E20E0E7002CECD000202060F8 -:10096000E9E7F8B51E680025069C964201D10920EA -:10097000F8BD002801D0012700E000278F551E6830 -:10098000761C1E60002803D0002C01D0A04705462D -:100990002846F8BDFFB583B00C9C1D461646002CBA -:1009A0000FD0206800280CD0002D0AD0286800281D -:1009B00007D031680498401A022804D2092007B0F1 -:1009C000F0BD0E20FBE700276846077101AB0499D4 -:1009D000039803F0F3FE68460079002808D02068E9 -:1009E00000902B4632460499039802F009F9E6E795 -:1009F00027603068401C306000202F60DFE7000077 -:100A0000034610B504200B4A0021FF242D344C432B -:100A1000A418A478002C03D0491C0229F5D310BDDA -:100A2000FF202D3048430124801884700020196075 -:100A300010BD0000944A0020034610B50520094A65 -:100A40000021FF242D344C43145B9C4206D1FF232C -:100A50002D33002059438918887010BD491C022984 -:100A6000EFD310BD944A002070B505460520094C0F -:100A70000022FF232D335343E65AAE4203D11B1904 -:100A80009B78012B03D0521C022AF2D370BD0020A8 -:100A90000A6070BD944A0020034610B504200B4A3A -:100AA00000214C244C43A418A478002C03D0491CEA -:100AB0000829F6D310BD4C20484380180124024673 -:100AC00084700C3242600020196010BDEC4C002094 -:100AD000034610B50520094A00214C244C43145B01 -:100AE0009C4206D14C2300205943891888704860E5 -:100AF00010BD491C0829F0D310BD0000EC4C0020AB -:100B000070B505460520094C00224C235343E65A94 -:100B1000AE4203D11B199B78012B03D0521C082A2B -:100B2000F3D370BD00200A6070BD0000EC4C0020C3 -:100B300030B589B01C461546002816D0002D14D0BB -:100B4000002C12D00A4A079206926A46059205AA1C -:100B5000FAF776FF002806D106A9059860DF22463D -:100B60002946FAF78BFF09B030BD0E20FBE70000E5 -:100B7000004300203EB51C461546002813D0002D2A -:100B800011D0002C0FD001AA009289B26A46FBF75F -:100B900022F9002806D1009871DF22462946009BE1 -:100BA000FBF730F93EBD0E203EBD7FB51C46154615 -:100BB000002815D0002D13D0002C11D002AA0092CD -:100BC0006B4601AAFBF74AF9002807D1684600796D -:100BD000009970DF22462946FBF76AF904B070BD20 -:100BE0000E20FBE770B596B01C4615460E46002851 -:100BF00023D0002D21D0002C1FD006A902911F2147 -:100C00006A4611730EAA04926A46117505AA04A9D0 -:100C10000192009103AB02AA3146FBF77EF900284E -:100C200009D16846037D017B049A029872DF22464F -:100C30002946FBF798F916B070BD0E20FBE7FFB50B -:100C4000CBB01D468C4600282FD04D9900292CD0C2 -:100C5000002D2AD0002139AA2BABCC00641A8E00BB -:100C6000E418491C94510829F7D3002441AB0BAE7A -:100C700021018F19A100641C5F50082CF8D3069243 -:100C800049A90191089306A9039169460A910AAA04 -:100C90006146FBF771F9002805D10A9873DF2A46EF -:100CA0004D99FBF7F1F94FB0F0BD0E20FBE770B5A1 -:100CB0001D461446002809D0002C07D0002D05D071 -:100CC00074DF2A462146FBF7E7F970BD0E2070BDA0 -:100CD0007CB51C461546002813D0002D11D0002CE1 -:100CE0000FD001AA009289B26A46FBF7DDF900280D -:100CF00006D1009879DF22462946009BFBF7ECF9E4 -:100D00007CBD0E207CBD38B51C461546002810D091 -:100D1000002D0ED0002C0CD06A46FBF706FA0028F6 -:100D200006D16846008878DF22462946FBF716FA86 -:100D300038BD0E2038BD30B589B01C461546002898 -:100D400019D0002D17D0002C15D004AA019201AAA9 -:100D5000009289B203AB02AAFBF708FA002808D177 -:100D60006846017B0089019A80DF22462946FBF70D -:100D700039FA09B030BD0E20FBE77FB51C46154699 -:100D8000002815D0002D13D0002C11D002AA0092FB -:100D90006B4601AAFBF72EFA002807D16846808827 -:100DA00000997EDF22462946FBF74EFA04B070BD5B -:100DB0000E20FBE77FB51C461546002815D0002DF8 -:100DC00013D0002C11D002AA00926B4601AAFBF7A7 -:100DD00043FA002807D168468088009975DF2246CB -:100DE0002946FBF78BFA04B070BD0E20FBE73EB539 -:100DF0001C461546002815D0002D13D0002C11D00C -:100E000002AA00926B4601AAFBF7CEFA002808D18D -:100E100068468088009987DF23462A460099FBF7B9 -:100E2000F5FA3EBD0E203EBDFFB5CFB01D468C4647 -:100E300000283CD05199002939D0002D37D04AA93B -:100E4000099100213AAA2CABCC00641A8E00E41858 -:100E5000491CC9B294510829F6D3002442AB0CAE08 -:100E600021018F19A100641CE4B25F50082CF7D354 -:100E700008216C462176059208AC2170079305A9DC -:100E8000029101A90A914CA90B910BA900910AABFF -:100E900009AA6146FBF724FB002806D109AB07CB62 -:100EA0008CDF2A465199FBF75DFB53B0F0BD0E2055 -:100EB000FBE770B51D461446002809D0002C07D06A -:100EC000002D05D08DDF2A462146FBF701FB70BDC2 -:100ED0000E2070BD30B58DB01C461546002819D0C7 -:100EE000002D17D0002C15D004AA019203AA02925B -:100EF00002AB01AAFBF73EFB002809D10299019839 -:100F00007DDF694600948A892B460199FBF767FBD0 -:100F10000DB030BD0E20FBE730B58DB01C46154638 -:100F200000281DD0002D1BD0002C19D00CAA019236 -:100F300004AA02921F226B469A8103AA009202AB76 -:100F400001AAFBF771FB002808D168468289029943 -:100F500001987CDF22462946FBF792FB0DB030BD9D -:100F60000E20FBE77CB51C461546002812D0002D4C -:100F700010D0002C0ED001AB6A46FBF789FB00288D -:100F800007D168460179008876DF22462946FBF7BB -:100F9000AFFB7CBD0E207CBD30B58DB01C46154628 -:100FA00000281BD0002D19D0002C17D009AA0192BF -:100FB00004AA029202AA009289B201AB03AAFBF72B -:100FC0003FFC002808D168468089029A019985DF94 -:100FD00022462946FBF76CFC0DB030BD0E20FBE726 -:100FE0007CB51C461546002812D0002D10D0002CD0 -:100FF0000ED001AB6A46FCF7DDF8002807D1684641 -:101000000179008882DF22462946FCF7F5F87CBD8D -:101010000E207CBD30B58BB01C461546002815D07F -:10102000002D13D0002C11D002AA00926B4601AA09 -:10103000FCF7EAF8002807D168468088009981DF2C -:1010400022462946FCF706F90BB030BD0E20FBE71F -:1010500030B59FB01C46154600281BD0002D19D076 -:10106000002C17D014AA019204AA029201AA00929D -:1010700002AB03AAFCF70AF9002809D16846808967 -:10108000019A029983DF23462A460199FCF730F939 -:101090001FB030BD0E20FBE730B599B01C46154699 -:1010A00000281AD0002D18D0002C16D004AA0192C6 -:1010B0000EAA029202AA009201AB03AAFCF740F921 -:1010C000002808D168468089029A019984DF224667 -:1010D0002946FCF76BF919B030BD0E20FBE73EB591 -:1010E0001C461546002813D0002D11D0002C0FD01F -:1010F00001AA009289B26A46FCF729FB002806D1B2 -:1011000000987BDF22462946009BFCF73AFB3EBD58 -:101110000E203EBD3EB51C461546002811D0002DC0 -:101120000FD0002C0DD001AA00926A46FCF761FB9B -:10113000002805D100987ADF22462946FCF79DFB5E -:101140003EBD0E203EBD7FB51C461546002816D07C -:10115000002D14D0002C12D003AA009202AB01AAD9 -:10116000FCF793FB002808D16846027B017A80884F -:1011700088DF22462946FCF7B4FB04B070BD0E2080 -:10118000FBE738B51C461546002810D0002D0ED0C0 -:10119000002C0CD06A46FCF7ACFB002806D1684650 -:1011A000008889DF22462946FCF7BBFB38BD0E20AC -:1011B00038BDFFB5C7B01D468C46002832D04999CE -:1011C00000292FD0002D2DD0002137AA29ABCC002B -:1011D000641A8E00E418491CC9B294510829F6D348 -:1011E00000243FAB09AE21018F19A100641CE4B2B9 -:1011F0005F50082CF7D308216C46217100922173AF -:1012000004A9089108AA059402936146FCF7DAFB49 -:10121000002805D108988ADF2A464999FCF7F0FB97 -:101220004BB0F0BD0E20FBE770B51D4614460028FC -:1012300009D0002C07D0002D05D08BDF2A4621468F -:10124000FCF7E6FB70BD0E2070BD30B593B01C46B8 -:10125000154600281FD0002D1DD0002C1BD006AA3B -:1012600002920BAA03920FAA049204AB03AA019361 -:10127000009289B202AB05AAFCF7D2FB002808D184 -:1012800002A80EC86846808A86DF22462946FCF7F7 -:1012900017FC13B030BD0E20FBE70000FFB589B08E -:1012A0001D46164607003BD0002E39D0002D37D002 -:1012B0000020059006A8039005A8FFF7A1FB0028D1 -:1012C0002FD1FF2105982D3148431E49FF23441893 -:1012D000201D2246243202906260059A2D335A4323 -:1012E00051180A464032A2601732E2601032226181 -:1012F000413262611C32426117328261EB31C1615D -:1013000003A802A90090019104AB224638460A992D -:10131000FCF7ECFC002804D10298002803D005E07B -:101320000E200DB0F0BD2088FFF786FB69462088AF -:10133000097C029B039A7FDF2A463146029BFCF719 -:101340001FFDEEE7944A002038B51C4615460028DC -:1013500010D0002D0ED0002C0CD06A46FCF700FEF9 -:10136000002806D16946085677DF22462946FCF751 -:101370000FFE38BD0E2038BD3EB51C461546002870 -:1013800017D0002D15D0002C13D00023029302ABF0 -:10139000009301AA89B26B46FCF754FE002807D1DE -:1013A00068468088009994DF22462946FCF782FE31 -:1013B0003EBD0E203EBD30B587B01C461546002808 -:1013C0001DD0002D1BD0002C19D00022049204AA9D -:1013D000019205AA029202AA009289B201AB03AA65 -:1013E000FCF7A0FE002808D168468089029A01997E -:1013F00095DF22462946FCF7D7FE07B030BD0E2008 -:10140000FBE770B58AB01C46154600281CD0002D9D -:101410001AD0002C18D004AB01930B236E463381F5 -:1014200002AB009303AA89B201ABFCF7C5FE00280A -:1014300008D1684602898089019997DF22462946AA -:10144000FCF7E3FE0AB070BD0E20FBE73EB51C467C -:101450001546002815D0002D13D0002C11D002AA5B -:10146000009289B26B4601AAFCF7DBFE002807D187 -:1014700068468088009992DF22462946FCF70DFFD6 -:101480003EBD0E203EBD3EB51C461546002815D07B -:10149000002D13D0002C11D002AA009289B26B4605 -:1014A00001AAFCF702FF002807D16846808800994E -:1014B00093DF22462946FCF734FF3EBD0E203EBD99 -:1014C0007CB51C461546002812D0002D10D0002CEB -:1014D0000ED06A4601ABFDF703FB002807D1684632 -:1014E0008188008899DF22462946FDF71AFB7CBDDA -:1014F0000E207CBD30B585B01C461546002819D09D -:10150000002D17D0002C15D004AA019201AA009238 -:1015100089B203AB02AAFDF71CFB002808D168467C -:1015200081890089019A90DF22462946FDF756FB02 -:1015300005B030BD0E20FBE77FB51C4615460028E0 -:1015400017D0002D15D0002C13D003AE01AA02AB8A -:1015500089B20096FDF74AFB002808D168468289C7 -:101560000189808896DF22462946FDF76BFB04B08F -:1015700070BD0E20FBE73EB51C461546002815D071 -:10158000002D13D0002C11D002AA009289B26B4614 -:1015900001AAFDF75FFB002807D168468088009903 -:1015A00091DF22462946FDF791FB3EBD0E203EBD50 -:1015B00070B58AB01C46154600281ED0002D1CD0E0 -:1015C000002C1AD000230293039302AB0093142340 -:1015D0006E46F38105AB049301AA89B26B46FDF711 -:1015E000BFFB002807D168468088009998DF224613 -:1015F0002946FDF7EDFB0AB070BD0E20FBE770B584 -:10160000FFB0FFB09EB01C4615460E4600283CD0E9 -:10161000002D3AD0002C38D0012149026A4651826F -:1016200012AA0392FFAA4C32059210320692121DA2 -:101630000792121D089202AA0F92FFAA68320A921C -:10164000121D0B926A46118692A90E910AA9119158 -:10165000FFA95431109110AA11A9019200910FAB6A -:1016600009AA3146FDF70CFD00280AD16846808C96 -:10167000109B119A0F99A2DF22462946109BFDF775 -:101680004FFD7FB07FB01EB070BD0E20F9E730B5C2 -:10169000FFB08EB01C461546002827D0002D25D05F -:1016A000002C23D004AA01928AAA04928BAA059244 -:1016B0000AAA0892012252026B461A8309AA0392CF -:1016C00003AA009201AB02AAFDF750FD00280AD13F -:1016D0006B461889039A0199A3DF6B469B8C2246BF -:1016E0002946FDF783FD7FB00EB030BD0E20FAE72E -:1016F00070B5FFB089B01C4615460E4600281CD0B8 -:10170000002D1AD0002C18D0012149026B461983F4 -:1017100007AA06A904930392029104AB05AA3146D5 -:10172000FDF764FF002809D16846808A0499A6DF86 -:101730000499002905D08B6804E00E207FB009B021 -:1017400070BD002322462946FDF782FFF6E730B53B -:1017500085B01C46154600281AD0002D18D0002C44 -:1017600016D004AA019201AA009289B203AB02AA80 -:10177000FDF796FF002809D1684681890089019A02 -:10178000A1DF22462946019BFDF7BDFF05B030BD14 -:101790000E20FBE730B5FFB088B01C461546002888 -:1017A0001CD0002D1AD0002C18D06A46049206AA2C -:1017B0000392012252026B465A8104AB05AAFDF73F -:1017C000E5FF002807D16846808A0499A8DF2246F1 -:1017D0002946FDF7FFFF7FB008B030BD0E20FAE7C5 -:1017E00030B587B01C46154600281DD0002D1BD0F3 -:1017F000002C19D00022049204AA029205AA019298 -:1018000001AA009202AB03AAFDF7ECFF002809D160 -:101810006846007B019A0299A0DF22462946019B77 -:10182000FEF71AF807B030BD0E20FBE77FB51C4667 -:101830001546002816D0002D14D0002C12D003AA73 -:10184000009202AB01AAFEF72FF8002808D16846E3 -:10185000828901898088A7DF22462946FEF757F84A -:1018600004B070BD0E20FBE730B5FFB088B01C4659 -:101870001546002825D0002D23D0002C21D007AA02 -:101880000292012252026B461A8306AA039205AB0A -:1018900003AA0193009202AB04AAFEF740F80028C5 -:1018A0000CD16846008A059B039A0299AADF039926 -:1018B000009122462946029BFEF77CF87FB008B0D3 -:1018C00030BD0E20FAE730B5FFB088B01C46154693 -:1018D000002820D0002D1ED0002C1CD006AA029279 -:1018E000012252026B469A8105AB03AA0193009232 -:1018F00002AB04AAFEF79AF8002809D1684682894B -:10190000008A059B0299A9DF22462946FEF7E1F8E5 -:101910007FB008B030BD0E20FAE730B5FFB088B018 -:101920001C46154600281DD0002D1BD0002C19D0B8 -:1019300001AA039206AA029203AA009289B205ABF9 -:1019400004AAFEF7CEF8002809D16846818A008AE9 -:10195000039AA5DF22462946039BFEF719F97FB0BB -:1019600008B030BD0E20FAE730B5FFB088B01C4695 -:101970001546002820D0002D1ED0002C1CD00F4A68 -:1019800089B21268039206AA049203AA029202AADA -:10199000009205AB01AAFEF727F9002809D1684695 -:1019A000818A8088029AA4DF22462946029BFEF79C -:1019B0004BF97FB008B030BD0E20FAE7C44A0200F0 -:1019C00038B51C461546002810D0002D0ED0002C2E -:1019D0000CD06A46FEF797F9002806D168460088C1 -:1019E000B0DF22462946FEF7ACF938BD0E2038BDDF -:1019F00038B51C461546002810D0002D0ED0002CFE -:101A00000CD06A46FEF7A5F9002806D16846008882 -:101A1000B1DF22462946FEF7BAF938BD0E2038BD9F -:101A200030B585B01C46154600281AD0002D18D0B8 -:101A3000002C16D004AA01920022029202AA00925F -:101A400001AB03AAFEF72AFA002808D1684680896C -:101A5000029A0199B2DF22462946FEF75BFA05B0E9 -:101A600030BD0E20FBE730B585B01C46154600287A -:101A700018D0002D16D0002C14D003AA019289B2E0 -:101A800001AB02AAFEF74EFA002809D1019902988B -:101A900069DF0199009122462946029BFEF7BCFAB4 -:101AA00005B030BD0E20FBE7F0B58BB01D461646E5 -:101AB0000C4607001CD0002E1AD0002D18D0002094 -:101AC000C043009000200490059006900790A1B2BA -:101AD0006A463846FEF764FA00280AD102A8019047 -:101AE0000098212807D0222808D023280AD107E00F -:101AF0000E200BB0F0BD0AA8039003E008A800E098 -:101B000004A80290A1B201AB6A463846FEF701FB79 -:101B10000028EED10199009868DF2A463146FEF789 -:101B200058FAE6E73EB51C461546002816D0002DAB -:101B300014D0002C12D002AA009289B26B4601AADE -:101B4000FEF76AFB002808D168468088009962DFAA -:101B500022462946009BFEF78DFB3EBD0E203EBD72 -:101B600030B585B01C46154600282AD0002D28D057 -:101B7000002C26D003AA019201AB6A46FEF79CFB1B -:101B800000281CD10198002811D002A8FEF784FF7C -:101B9000002814D16846028802984C2148430A491B -:101BA0000A52019A401892880281001D0190014654 -:101BB0006846008867DF22462946FEF7BDFB05B070 -:101BC00030BD0E20FBE70000EC4C002030B589B0A2 -:101BD0001C46154600281ED0002D1CD0002C1AD003 -:101BE00010226B461A7204AA039208AA019201AA53 -:101BF000009203AB02AAFEF7CFFB002809D168468A -:101C0000007A019A039964DF22462946019BFEF778 -:101C1000F9FB09B030BD0E20FBE730B58BB01C4698 -:101C20001546002823D0002D21D0002C1FD01022D3 -:101C30006B461A7303AA029205AA019209AA04929A -:101C400001AA009289B202AB04AAFEF705FC0028A3 -:101C50000BD1019A0299049865DF019900916946B8 -:101C60000B7B22462946FEF74BFC0BB030BD0E2005 -:101C7000FBE730B587B01C461546002818D0002D6C -:101C800016D0002C14D002AA019206AA009289B2A2 -:101C90006B4601AAFEF78CFC002807D10099019839 -:101CA00063DF22462946009BFEF7B0FC07B030BD3B -:101CB0000E20FBE73EB51C461546002813D0002D2C -:101CC00011D0002C0FD001AA009289B26A46FEF70B -:101CD000C7FC002806D1009866DF22462946009BF3 -:101CE000FEF7D6FC3EBD0E203EBD30B58DB01C4685 -:101CF0001546002813D0002D11D0002C0FD06A46B5 -:101D00000C920CAA00F08CFA002806D10C984DDF3A -:101D1000224629460C9B00F0A9FA0DB030BD0E20DA -:101D2000FBE70000F0B4002812D0002A10D0002BEE -:101D30000ED005780A4E0024E700F75DAF420AD1C5 -:101D4000E400A4196468002C08D0A446F0BC6047E5 -:101D50000E20F0BC7047641C442CEDD30620F8E73D -:101D6000A448020010B500280AD0002A08D0002B91 -:101D700006D089B201F0AAFB002800D13CDF10BDDB -:101D80000E2010BD7CB51C461546002812D0002D33 -:101D900010D0002C0ED001AA00926A4602F060FA20 -:101DA000002806D1009853DF22462946009B02F006 -:101DB0007AFA7CBD0E207CBDFFB582B000240B9E5C -:101DC000684604801D4617460471002E0CD0002D75 -:101DD0000AD02868002807D039680398401A0328D9 -:101DE00004D2092006B0F0BD0E20FBE76B46039934 -:101DF000029802F043FC694630880988884201D283 -:101E00000C20EFE701AB3A460399029802F0D6FCAA -:101E100068460079002801D000240BE02C600EE019 -:101E20002868610043183A460399029802F026FC9C -:101E3000641CA4B2684600888442F1D33480002038 -:101E4000D0E7000010B50446002A02D01088002216 -:101E500010E00A48FBE7030A00020343A05C584075 -:101E600003061B0F43401803584083B21806C00CEA -:101E70005840521C8A42EED310BD0000FFFF000004 -:101E800002788378521C5B1ED2B283708A4200D1E2 -:101E90000022027070470000F8B51646424CD2B2DC -:101EA000A272A3630125E16365720027E7812778A9 -:101EB000002F08D0002808D0032809D0012F0FD008 -:101EC000E5810220F8BD0520F8BD00F049F968E081 -:101ED000012FF5D0A0890121C9030843E081F4E76F -:101EE000272902D9E5810120F8BD0027A781012813 -:101EF00002D0022809D054E027212C48F9F72FF905 -:101F0000012001F053FB04202CE0252A02D9E581B1 -:101F10000320F8BD1F073F0F24485B1C0770244FA8 -:101F2000427021D0012B05D0022B09D0032B09D000 -:101F3000E58130E032461F49801CF9F7F7F806E0EA -:101F40000F2200E055223146801CF9F701F90020EC -:101F500001F02CFBA1691848FF3141310161476153 -:101F60004560022020701CE00846002E06D0012E9D -:101F700004D0022E0CD0032E13D10EE0002001F06D -:101F800015FB0E49032008600D490D603D60E9E72F -:101F900000F060F803E00420F8BD00F039F80028F4 -:101FA000F9D00020F8BD000000430020504A002076 -:101FB000001000403E48020000F50140401500407E -:101FC00000120040034900234A7A4B72C98901601C -:101FD000104670470043002010B502F08FF900282A -:101FE00003D101F085FA002801D0042010BD064875 -:101FF000002141720121017004480169102211433E -:102000000161002010BD00000043002000ED00E051 -:102010000C490A78012A05D8002805D0012807D0E4 -:10202000022809D00020704707488861082006E090 -:1020300006488861092002E0054888610A20487046 -:1020400001207047004300200080004000900040C5 -:1020500000A00040074942B20B78012B04D8283277 -:102060002D2A01D2820701D000207047486101204B -:102070007047000000430020F3B58BB0002508A88E -:10208000477C2E462C460A2F02D907200DB0F0BD02 -:102090002022314901A8F9F749F808A9087B0290E4 -:1020A000487B01902D48BF00C05907900020694629 -:1020B0000876487601F09CF8002101A800F060FF46 -:1020C0000028E3D100F0E6FF24482C30C059234F0C -:1020D0003F1F3860FFF780FF002808D100F054F858 -:1020E00001900121684600F0AFFF002801D00320D5 -:1020F000CCE7002E09D0386829180198814206D211 -:1021000068460078019D0402E8E70126F8E7684682 -:10211000007800260443A1042206A307A00B890E21 -:10212000920E9B0F032B00D11B1FFFF7B5FE09A8D2 -:10213000FFF748FF0028D1D009986946000A0871C6 -:10214000012101A801F000F86946099808710121F0 -:1021500001A800F0F9FFC1E7CC4A0200804300204B -:1021600010B5064900200860054901248C6008610B -:10217000486101F047FA0348047010BD4015004063 -:1021800000F5014000430020F8B51E480169102207 -:10219000114301611C4F01251C4C0026F8680028E2 -:1021A00017D0FE601A48022101602078042810D15F -:1021B0001848456018480068012806D1FEF7F8FA6B -:1021C000002802D0A089401CA08127211348F8F7DD -:1021D000C6FFA069FF300130016C002901D0066400 -:1021E000DCE7406C0028D9D0A069FF30013046649C -:1021F0006078C006C00E8540054805602069401C17 -:102200002061F8BD00ED00E0001100400043002017 -:1022100080E200E00010004000140040504A00201E -:102220001CB50C4600280DD0002A0BD011680029DF -:1022300008D000210191002C14D001784D2903D041 -:1022400007201CBD0E201CBD01210191064913462B -:10225000009101AA2146FEF755FB0028F3D1019910 -:10226000A142F0D009201CBD5D320200FFB583B051 -:1022700014460D00064613D0002C11D0002001900A -:1022800013460A4631464D20276801F091FA00288E -:1022900007D12168019A89180191002E03D00CE022 -:1022A0000E2007B0F0BD0648009001AB3A46294623 -:1022B0000698FEF756FB0028F3D101992160F0E75C -:1022C0009332020010B50E4900234A788C78A2425E -:1022D00012D0521CD2B24A70022A00D14B704A78F6 -:1022E000074B920018339A580260086910180002D0 -:1022F000000A0861012010BD0360002010BD00002D -:102300005C4300200248808E401C4007400F70470D -:10231000F4430020F8B5064600780025384C012823 -:102320000DD002285CD168460570F9F741FAA07813 -:10233000002860D0012854D002285CD154E0B18933 -:10234000B06800F0A5FC074668460570F9F730FA5A -:102350002C483818012700282AD0FF38FF381FD012 -:10236000FF280CD02849C84229D1A078012826D0BE -:1023700024484042608100F04DF8E7701FE0234898 -:102380006081A078032805D1A77025636563257057 -:102390006570E57000F03EF8012000F085FA0EE06F -:1023A000A07801280BD10220A0701948608106E0B6 -:1023B000A078022803D10320A070277067706846B8 -:1023C0000078F9F713FAB06801F0FEFCA078032852 -:1023D00006D1E078002803D000F07EFB00F092F9EF -:1023E000F8BD0A48FF3000E00948608100F012F8AB -:1023F000012000F059FA68460078F9F7F7F9F8BDBE -:10240000F4430020FC84FFFFFF80FFFF027D0000FB -:1024100003FC0000F0B5204D89B0002428462C7044 -:102420002C3841891D482E461A3E814203D01B4854 -:10243000FF38814205D1184902241A3902F050F9B7 -:102440000CE017481127814202D01648814205D17D -:10245000114903241A3902F043F9B7702001691CAD -:102460000F3002F03DF90C4800F05AFBE8700420F0 -:1024700069460195088103960C82002006908883A6 -:1024800006AA03A901A801F0BFFC002802D0002081 -:10249000F8F7C8FF09B0F0BD20440020017E00001D -:1024A00003FC0000047B000030B5204C87B0208E78 -:1024B000A18EC0000843C02125460843243528705A -:1024C000208A691C00010E3080B202F009F928460A -:1024D00000F026FBE870002204212846FFF7B2FC3A -:1024E000694608806A46218AE069FFF7ABFC6946C5 -:1024F000088021460C3102F0F3F80420694601956A -:102500000881E0690390208A088220460C300590FB -:102510000220088305AA03A901A801F075FC002880 -:1025200002D00020F8F77EFF07B030BDF443002052 -:102530000EB507486B46818E491C4907490F416318 -:102540000021C1616846017007CB01F00BFC0EBD94 -:10255000F443002010B5806801F036FC002802D05A -:102560000020F8F75FFF10BD38B505460024684627 -:102570000470F9F71DF929460C48F8F772FF002896 -:1025800002D00020F8F74EFF09484179427A114203 -:1025900007D0447168460078F9F728F900F00AF886 -:1025A00038BD68460078F9F721F938BDF84A0200CD -:1025B000F443002010B586B000246846047404A8D3 -:1025C000F9F7F6F869460B48F8F743FF002808D0FA -:1025D0000949012048716846007CF9F707F906B0FF -:1025E00010BD6846007CF9F701F9684600F006F86E -:1025F000E3E70000F84A0200F4430020FEB5404C37 -:10260000012523466778DA899E69D96B3B00F8F784 -:102610009FFE056F042D476872000278012A1ED1C3 -:102620000279022A1BD18268268E1378F6B25B07E4 -:102630005B0F9E4214D1A571E2638089E081062878 -:1026400002D80020F8F7EEFEE08969460D70801F81 -:1026500088806B4607CB01F085FB02206070FEBDD1 -:1026600004206070084601F0AFFB16E00378002BF1 -:10267000F5D100790128F2D1002E07D03046091D8E -:10268000921FF8F753FDE06B01F09EFB0320607092 -:10269000208E401C4007400F2063F8F783FEFEBDEC -:1026A00001780129FBD10179012905D00229F6D150 -:1026B000806801F089FBFEBD002E09D0022168462A -:1026C0000170921F028101963146029A009804E03F -:1026D0000320694608706B4607CB01F043FB657029 -:1026E000FEBD01780129E3D101790129E0D1F6E7A6 -:1026F000A0780328F4D10020F8F794FEFEBD000076 -:10270000F443002038B5002468460470F9F750F807 -:102710000C48F8F7A3FE0C494A794B7A1A4204D0C8 -:10272000002802D08878032804D068460078F9F79A -:102730005DF838BD4C7168460078F9F757F8FFF737 -:1027400039FF38BDF84A0200F44300201FB50221CA -:102750006846017000210171FFF7DCFD05488178B2 -:10276000032905D1C078002802D0684600F0EAF8B5 -:102770001FBD0000F44300207FB5484C0578A378C6 -:10278000E2780121002D0FD0012D17D0022D4BD161 -:102790006A46117001781171416802910089908137 -:1027A0000298002817D113E06C4621700078207140 -:1027B000032B39D1002A37D0204633E06C462170F4 -:1027C00000782071032B2FD1002A2DD0204654E011 -:1027D0000020F8F727FE68468089002801D1F8F725 -:1027E00021FE69468E890298042E49D34178080754 -:1027F000000F052806D000280DD00E2819D00F286C -:1028000047D03DE0BFF34F8F26492548C860BFF34E -:102810004F8F00BFFDE7A078032806D1E07800289D -:1028200003D0684600F08EF87FBD029801F0CCFA24 -:102830007FBD029D042E23D92878420620D50206AA -:102840001ED54018A978EA78891840180006000EAD -:1028500016D10022B11E2846FFF7F4FAA9191E3935 -:102860004A7F0B7F11021943884209D1A0780328BF -:10287000DBD1E0780028D8D06846FFF775FE7FBD31 -:10288000029801F0A1FA0028F9D00020F8F7CAFD5B -:102890007FBD6846FFF73EFD7FBD0000F44300208A -:1028A0000400FA0500ED00E070B5012149040C4A6E -:1028B00001230C4D0028916010D0C82460434401CE -:1028C000261A094C66606668800830186060EB6004 -:1028D000064C002060602B60516070BD6B6070BD65 -:1028E00000A3004000A0004040A5004040A10040DF -:1028F00010B50E49092008610020486088600C4A24 -:102900000121D1600B49421E8A60012252044A60B3 -:102910000A1509490A60094B1968FF242404A143D8 -:1029200014032143196006490A6010BD00A5004048 -:1029300000A0004000A3004080E200E008E400E0C6 -:1029400000E100E038B50546002468460470F8F759 -:102950002FFF29460C48F8F784FD002802D00020FC -:10296000F8F760FD09480179427A114207D00471F5 -:1029700068460078F8F73AFF00F00AF838BD684674 -:102980000078F8F733FF38BDEC4A0200F44300202A -:1029900010B586B000246846047404A8F8F708FF50 -:1029A00069460B48F8F755FD002808D00949012071 -:1029B00008716846007CF8F719FF06B010BD68463C -:1029C000007CF8F713FF684600F006F8E3E7000024 -:1029D000EC4A0200F4430020FEB53E4D0446287840 -:1029E000042701260300F8F7B3FC066D041B293CFD -:1029F00063702078002803D0012810D120791AE0D4 -:102A0000207900280BD1FFF74FFD0020FFF74CFF86 -:102A10000520A863022030E02046FFF79BFDFEBDA5 -:102A200020780128FBD12079002804D10120FFF76C -:102A30003BFF2F70FEBD0228EED0FEBD207801289E -:102A4000FBD120790028F1D00228F6D1A06800F04F -:102A500019FE0028E0D00020FFF726FF052028708F -:102A6000DAE7207801280AD00228E6D1A86B401EB8 -:102A7000A86313D0FFF718FD03202870FEBD20794E -:102A80000228FBD1A06800F0FDFD0028C4D0002082 -:102A9000FFF70AFFFFF74CFD2E70BDE706206946E1 -:102AA0000870EA6902920199009801F05BF907E069 -:102AB00020780128E2D120790028BCD1FFF738FD29 -:102AC0002E70FEBDA8780328FBD10020F8F7AAFCE1 -:102AD000FEBD0000F443002038B5002468460470B1 -:102AE000F8F766FE0C48F8F7B9FC0C490A794B7AFE -:102AF0001A4204D0002802D08878032804D06846FF -:102B00000078F8F773FE38BD0C7168460078F8F766 -:102B10006DFEFFF73DFF38BDEC4A0200F443002094 -:102B200001784278807851184018C043401CC0B2E8 -:102B300070470000F8B51F4C2078002839D0206974 -:102B4000002807D00026E068002805D00025002EC8 -:102B500004D014E00126F6E70125F8E760780028A4 -:102B600027D1684652DF052804D0002804D0F8F7A2 -:102B700059FC04E0012602E0216900988847002DF5 -:102B800013D16078002814D1608869460880A06855 -:102B900061DF052804D0002804D0F8F743FC04E0E6 -:102BA000012502E0E168A0688847002ED6D0002DFC -:102BB000CDD0F8BD984400201048018CC9B201293D -:102BC00017D1818C090714D1018D09060A0F03D191 -:102BD000828D1206120F0ED0090F012903D1828DAA -:102BE0001206120F07D0032903D1808D0006000FB3 -:102BF00001D000207047012070470000C00F00F096 -:102C0000FFB583B00C9C1E461746258823460499C1 -:102C1000039801F06AFD002808D12088019033460E -:102C20003A46009504990398FDF764FD07B0F0BD9E -:102C3000FFB581B01D4616460A9C074623462A4624 -:102C4000314602A801F063FD002807D168460094D0 -:102C500001892B4632463846FDF781FD05B0F0BDAF -:102C6000FFB583B00C9C1E46174625782346049971 -:102C7000039801F0AEFD002808D12078019033467A -:102C80003A46009504990398FDF734FD07B0F0BD6E -:102C9000F0B5024640791479000220431478124BB3 -:102CA000A50900D018465578D67864199578114F43 -:102CB000AD19641924060D4D0D4E240E09D1B842EC -:102CC00001D0A84207D1072900D0184691791129CF -:102CD00000D01846F0BDB04203D0054AFF3A9042FA -:102CE000F7D10629F5D1F0BDFFFF0000047B0000FD -:102CF000017E000003FC0000F8B52C49C8680A6991 -:102D00000C780F7989688646944600913EE00099D8 -:102D1000E20055182A7836E0182353436968521C9C -:102D2000C918AB78D2B2934200D100220B78022BA3 -:102D300002D0032B27D123E04E680346014603E06F -:102D4000B14204D00B46C96900291CD0F8E700291C -:102D500019D08B4208D1C069002805D1144F012633 -:102D6000BE600026B44601270E68C969D9610029F2 -:102D700009D00B689B190B6005E00174C06900E085 -:102D800000210028F9D169789142C5D12146641EFD -:102D9000E4B20029BBD1054962460A61C8600F71DF -:102DA000704501D00120F8BD0020F8BD5C43002033 -:102DB00000100140F8B5044631480026C168009172 -:102DC00007784EE02E48F90080680D1843E0002C8B -:102DD00002D02046E4691FE02878182141436A6840 -:102DE000401CC0B251182870AA78904200D12E70B1 -:102DF0000A784868012A30D1027C002A2DD18A68DD -:102E00004260CA6882600A69C260496981611C497E -:102E10000979002900D04660194943680A699C462F -:102E2000991A0902174B090A994202D28268891835 -:102E300007E06146511A09028268090A8A4202D9EA -:102E4000511A016000E0066046600121866001744D -:102E5000C66101F0CDFA002CB9D128786978884292 -:102E6000BAD138467F1EFFB20028ABD10448C168F2 -:102E70000098814201D00120F8BD0020F8BD00007B -:102E80005C430020FFFF7F0008B51F4901208863D5 -:102E90001E4A10214820F8F7DFFB002801D0F8F780 -:102EA000C1FA1B480023006800904822194968466F -:102EB00001F074F9002801D0F8F7B4FA164801F0CF -:102EC0005FF9002801D0F8F7ADFA144800F00CFEC5 -:102ED00014E0F8F7ABFB01F07BF9002807D0F8F716 -:102EE000E7FB082803D901F079F9F8F79FFB00F018 -:102EF000DFFD002801D0F8F795FA48DF0028E8D078 -:102F0000F8F790FAE5E7000040000040B8440020E0 -:102F1000FCFF0100084A0020B1380200D13902004C -:102F20008207D30EFF229A408907090E10B59940F7 -:102F300000280BDA03071B0F083B9C080C4BA4006E -:102F4000E318DC6994430C43DC6107E08408094B17 -:102F5000A400E418236893430B432360C106C90E01 -:102F600001208840044908600449086010BD000041 -:102F700000ED00E000E400E080E200E000E100E0BD -:102F8000F3B52A4C0746E07E81B0002801D0082026 -:102F9000FEBD002F00D1264F0126387831468140F2 -:102FA00024488160386800F0A1F90021786800F0B9 -:102FB00094F9214DB8696862787D397D0843E866E7 -:102FC00003CFE8606961387B083F01280FD10021F9 -:102FD000B86800F082F9387B31468140154881603D -:102FE000F86800F083F9F968B868A9602861029868 -:102FF00060603969216000280ED0FF230F481D331F -:10300000397F0022C250FF234533C2500D4A0C487D -:1030100050600220FFF784FF042028600020E07544 -:103020002076A075E676A076FEBD0000784A0020E6 -:1030300084480200000500500025004000200040A8 -:103040008000020000230040F8B5104B81245E6828 -:103050000022A4000E4D002E00D0AC60DF7D002FBA -:103060000BD01A7E002A04D0002E00D06C601120F4 -:10307000F8BD18610122197604E0D9750024D860E2 -:103080005C761C7600F012F8F8BD0000784A00204B -:103090000023004010B5044CA07E002803D100F0AE -:1030A00037FB0120A07610BD784A0020F8B5234DEB -:1030B000A87E104301D100F02BFB6868204C00284B -:1030C00005D081201F49800048600020F8BDFF2006 -:1030D000453000212150FF2125312046FCF789FF92 -:1030E0000546FF2109312046FCF783FF0746FF21F3 -:1030F00045312046FCF77DFF0646394631432943DA -:10310000E9D02846304306D100F0D8FA0B48C17DFB -:10311000407E8142DFD800210848002DC17501D0D2 -:103120000320F8BD002E01D00F20F8BD817E0120C4 -:10313000002901D02060C8E76060C6E7784A002017 -:10314000002000400023004010B5034600F048F87E -:10315000002801D0112010BD034A00209175936012 -:10316000908200F003F810BD784A0020F8B50026E0 -:10317000194FFF251D357E510120B86001F098F9E7 -:10318000164C6168002910D022E0FF27013729463C -:103190001148FCF72EFF002802D1A08AB842F6D1D0 -:1031A000A08AB84201D001F083F9A08AA17D8842AB -:1031B000EBD3A18AC81FF9380CD0074F29463846EF -:1031C000FCF717FF0028F9D00120F8600020A07557 -:1031D0003046F8BD0F26F9E700200040784A00206D -:1031E0000248807D002800D001207047784A0020E6 -:1031F000F8B5154900260E6014484068002805D02F -:10320000144A13489060144A04201060CA684F6939 -:103210008D680C690020C043C860486188600861FF -:10322000104600F051F8384600F04EF8601C02D00D -:10323000204600F049F8681C02D0284600F044F807 -:103240000248C6764660F8BD00250040784A002056 -:10325000840202000023004080E100E0FFB583B05B -:1032600010251C46029316460F460095019502ABA9 -:103270000398FDF73FFA002809D11034009502ABFE -:1032800032463946019502940398FDF733FA07B0A8 -:10329000F0BD08B5009313460A4610212030FDF713 -:1032A0005EFA08BD30B552000A439900039C0A43F8 -:1032B0002102049D0A4329040A4302498000401860 -:1032C000026030BD000700501CB5002100910B4684 -:1032D00001220191FFF7E6FF1CBD1CB500220B4641 -:1032E000009211460192FFF7DDFF1CBD1CB50021C5 -:1032F00000910B46012201911146FFF7D3FF1CBD3F -:103300000322120280184068084000D00120704754 -:1033100070B5049C1D460E46002A0AD0002D08D028 -:10332000002C06D029682368C91A052903D2092070 -:1033300070BD0E2070BD591C2160D05420688118CA -:10334000304601F0FFF92168401820602860002015 -:1033500070BD0000F7B584B00025009501950520EB -:10336000694602950870097C554F03263878042475 -:103370000B00F7F7EDFF07051657637B81866700A3 -:10338000787803285ED17C704E4800F01DFC002840 -:1033900001D0F8F747F82946684605700A460098B4 -:1033A0008AE001216A461170918AFF22813291429E -:1033B00019D8012802D004280DD043E06B4607CB72 -:1033C0007B689847404800F043FE002801D0F8F79A -:1033D00029F8022004E06B4607CB7B68984705205C -:1033E000387007B0F0BD012802D004280DD029E0C4 -:1033F0006B4607CB7B689847002000F029FE002829 -:1034000001D0F8F70FF83E70EBE76B4607CB7B680F -:103410009847002000F01CFE002801D0F8F702F8C1 -:103420000620DDE702280DD13C70022168460170BC -:10343000059801906846018B01813BE0032805D087 -:1034400006280BD00020F7F7EDFFCAE768460670A4 -:103450006B4607CB7B6898470120C1E7684606703A -:103460006B4607CB7B6898473C70BAE768460470A8 -:1034700005712A46019992E769460C70012008718E -:1034800018E06A4614700221117105990291797849 -:10349000032902D0022805D00CE07C70069800F0C9 -:1034A00093FB03E03C70069800F040FB002801D03D -:1034B000F7F7B8FF6B4607CB7B68984791E70000AA -:1034C000EC4300204C4F0020CC500020002806D0B8 -:1034D000002908D000783C2803D0072070470E2030 -:1034E0007047012901D00920704700207047000073 -:1034F00010B52A48C06A00070CD428484030C26A78 -:1035000027494A62026B8A62426BCA62826B0A6313 -:10351000C06B4863234CFC2260690146914308D18B -:1035200040B2042805DC2821C84202DB207A0328A7 -:1035300001D9042010BD00F065F81B486169C16025 -:10354000217A0161416A090A09024162426AA16A5B -:103550000B0E1A4342620902C1610121016300217D -:10356000C1626179E2790902114341632179E2780C -:10357000090412021143A27811434161A18C228CEB -:10358000490612061143A28B12041143A2791202BA -:10359000114325318161002010BD00008000001022 -:1035A00000170040004300200015004070B50F498F -:1035B00000230B600E4A0D49D46A40398C63146BAA -:1035C000CC63D46B6400A41C8C600A4C4C600A4C25 -:1035D00023600A4E03253560002804D0E3600849C3 -:1035E0000120486070BD5069C86070BD4015004042 -:1035F00000430020504A002000110040001200400B -:103600000010004009490320886009490020086033 -:1036100008490861084A012313610B69002BFCD09B -:1036200008615060106005498881704700F50140CD -:103630000012004000110040001000400043002034 -:1036400070B501240B49600408600B494010886084 -:10365000094940398860094D6C602F20F7F73AFD21 -:10366000AC60074D00242F202C61F7F733FDEC7080 -:1036700070BD000080E100E04013014000100140F7 -:103680005C43002010B5017842788378C0788A18AE -:10369000181810180006000E0ED18806440FFEF709 -:1036A00031FEA04206D0FEF72DFE401C4007400F21 -:1036B000A04201D1012010BD002010BD30B50A4844 -:1036C000FF21C57D0022094C0931094B002D6250B4 -:1036D00007D09969437EC268D154417E491C417626 -:1036E00030BD986930BD0000784A002000200040BD -:1036F000002500401FB501236A461370107203486D -:10370000019106C8684690471FBD0000784A002016 -:10371000FF220548253200218150FF2209328150C5 -:1037200001210160704700000020004010B50446F0 -:10373000F7F72AFE00280CD0A007C00E002C0ADAEA -:103740002107090F08398908144A89008918C969AD -:1037500006E0134810BDA108124A890089180968BB -:10376000C1400806800F042811D200280FD002287B -:103770000DD00D494B68E206D20E01209040002B7F -:1037800008D0620992008B5803438B5004E0044830 -:10379000401C10BD05490860002010BD00ED00E090 -:1037A0000120000000E400E0AC44002000E100E063 -:1037B00010B51C460B46002A06D0002C04D0216808 -:1037C000052903D2092010BD0E2010BD1070511C18 -:1037D000184600F0B7FF401C2060002010BDF8B56F -:1037E000074610681546081A0E461C46072801D2DF -:1037F0000920F8BD384600F0E1FF631C2A46314637 -:10380000384600F0DBFFA31C2A463146384600F05C -:1038100035FF231D2A463146384600F0CFFFA31D51 -:103820002A463146384600F029FF0020F8BD000046 -:103830001CB5040002D10E20F7F7F4FD0020019022 -:103840000090694601A800F09FF90428F9D00028EB -:1038500001D0F7F7E7FD019A0220107000986B463F -:10386000401E009000212046521CF8F713F906284C -:1038700011D0002801D0F7F7D5FD0098401C81B287 -:103880000090019800F0BAF9002801D0F7F7CAFDBE -:10389000F7F7FAFE1CBD019800F096F9002801D058 -:1038A000F7F7C0FD0148F7F7BDFD1CBDFECADDBA44 -:1038B00010B54188074A091D89B2F7F75BFE002859 -:1038C00001D0F7F7AFFDF7F7F3FE002801D100F0C4 -:1038D000A7FC10BD313802007FB50E4604000FD0A2 -:1038E000002E10D00020029001902578039001A9AD -:1038F00002A800F049F90428F9D0002805D020E0FA -:103900000E2004B070BD0920FBE7029A0120107060 -:10391000019801AB401E019031462046521CFEF733 -:1039200001FA06280BD10D48F7F77CFD03A8029A8F -:10393000009001AB06212846521CFFF7E9FC002845 -:1039400001D00320DDE70198401C81B2019002986C -:1039500000F054F90028F4D1D3E70000FECADDBA24 -:103960007CB50D46040018D00020019000906946F7 -:1039700001A800F009F90428F9D000280ED1019916 -:10398000042008700098114A401E009029462046E5 -:10399000F7F7F7FF002802D016E00E207CBD019952 -:1039A0006A460020491CF8F713F800280CD100984B -:1039B000064A401C0121521E0090117081B20198EC -:1039C00000F01CF90028E9D003207CBDD943002079 -:1039D00007B5684600780300F7F7BAFC0504090C40 -:1039E00014160800F7F776FE00F016F80EBDF7F78C -:1039F0004BFE0EBD0648029A01998260416001218A -:103A000001700EBD034800E00F20F7F70BFD0EBD5F -:103A1000E0430020FECADDBA1CB509480078002842 -:103A20000CD011DF00F052F805490622491C684607 -:103A3000F7F77CFB01990098FEF71EFB1CBD000008 -:103A4000D843002010B5040020D02268A188501C63 -:103A5000491E127889B2002A07D0032A08D0052A05 -:103A60000BD00B48F7F7DEFC09E0FFF735FF01E06C -:103A7000FFF776FF002802D006E000F00BF8206880 -:103A800000F054F8002800D0032010BD0E2010BD17 -:103A9000FECADDBABFF34F8F04490348C860BFF3C5 -:103AA0004F8F00BFFDE700000400FA0500ED00E0C5 -:103AB00010B5054900200A78002A03D00870081DB7 -:103AC000FFF7C0FF10BD0000E043002010B500F07C -:103AD00059FA0448002101704170416000F036F944 -:103AE00010BD0000EC43002010B50E4C2178627828 -:103AF000114301D0082010BD002810D001212170F1 -:103B000061706060084800F06DFA0028F3D0002171 -:103B10002170617061600728EDD0032010BD0E2078 -:103B200010BD0000EC4300205533020070B505467F -:103B3000002400F027FA002D04D01148854203D05C -:103B400010240AE00E2408E00E4D2878042808D03E -:103B5000062808D0052808D0082400F023FA2046BB -:103B600070BD012009E0032007E0054800F070FA6D -:103B7000040001D00324F0E702202870EDE70000E4 -:103B8000CC500020EC430020024610B50020002A53 -:103B900009D0002907D00A4B5C78002C05D0012CF5 -:103BA00005D0042010BD0E2010BD082010BD022439 -:103BB0005C70044B1360FF2281320A8010BD00004C -:103BC000EC4300204C4F002001460020002904D087 -:103BD000084A914203D0102070470E2070470649D2 -:103BE0004A78022A03D0042A01D008207047012213 -:103BF0004A7070474C4F0020EC43002070B50C46D3 -:103C0000050006D0002C06D01348854205D01024AC -:103C10000EE00E240CE007240AE0FF2081308442ED -:103C200001D90C2404E00D4E7078022802D008243B -:103C3000204670BD00F0A6F92146284600F01EFA85 -:103C4000040005D0112C00D0032400F0ABF9EFE7FD -:103C500003207070F9E700004C4F0020EC43002077 -:103C6000F8B56946364C0870617A012300250029B1 -:103C700003D0A16A002905D006E0C02801D1A562C1 -:103C80006372F8BDC028FCD02D4AE6681269002E88 -:103C900002D0A77A002F0AD0002A3DD0A372626119 -:103CA000FF228732914239D3C02835D136E000292E -:103CB00008D0042908D0FF22873291420DD3C028B2 -:103CC0002AD10AE0666108E0C02806D0002A23D085 -:103CD0001B491C48C96901606061684600F016FA1A -:103CE00000280AD060780028CBD168460178626944 -:103CF000A06A1154401CA062F8BD6169E06881426D -:103D000001D1E56000E025610F48022202704160A8 -:103D1000218D0181216A88476572F8BD684600F0EF -:103D2000F5F90028DED1084802210170616941607F -:103D3000218D0181216A884765722561A572F8BDD0 -:103D40003C440020CC5400205456002070B5044C54 -:103D50000025256200F00EF825706570A57070BD15 -:103D6000F4430020024B1B6A002B00D01847704719 -:103D7000F443002010B5034900200862F7F7BEFCA9 -:103D800010BD00003C44002070B5050005D00A4C71 -:103D9000206A002803D0082070BD0E2070BD0323C8 -:103DA000064A00210648F7F7AFFC03491C31E160E1 -:103DB00004492562216170BD3C440020B5400200E9 -:103DC000044B0200CC54002001460020002908D0FA -:103DD0000B4B1A461C3A994209D1D168002902D0EE -:103DE00003E00E207047D360704708207047054BF2 -:103DF0009942FBD111690029F7D113617047000086 -:103E000058440020CC540020F8B50D46064600204A -:103E10006946087014466846F7F7CAFC002E13D0AE -:103E20001748C178002911D0002C02D006CC826539 -:103E30004165002D03D0124806CD0265C1641048CB -:103E400006CE8264416414E00E20F8BD0C490CCE0D -:103E50000B63CA62002D02D00CCD8B634A63002C29 -:103E600003D007490CCC0B64CA630121C17000F078 -:103E700009F868460078F7F7B9FC0020F8BD0000A3 -:103E80003C440020F8B53D4C0126E0793C4F00252C -:103E9000002805D0E571FCF7B5FCE0703E7007E046 -:103EA000207A002808D02572FCF7ACFCE0703D7049 -:103EB000216A334888475AE02179606A62798C46E2 -:103EC0000143A3791143964619430ED0A269918804 -:103ED000814212D1002B10D0C020F7F757FC2748A1 -:103EE0003C300560A571656231E0244826712C30B4 -:103EF000A061C020F7F74AFC39E0204F34378142F7 -:103F000010D16346002B0DD065623868002803D0BD -:103F100025716671A7612CE0C020F7F737FC257189 -:103F2000E67124E0814214D17146002911D0134872 -:103F300065623C300168002904D03D606571A6715E -:103F4000A06116E0C020F7F721FC3D606571267284 -:103F50000DE0A17800290CD0A5701168085CC0287C -:103F60000AD0DD20F7F712FC606A401C6062002076 -:103F7000F8BD00F0EDF8FAE7DC20F3E73C44002060 -:103F80005456002038B5002468460470F7F710FC3A -:103F90000348C471447268460078F7F727FC38BDBF -:103FA000F4430020F8B5002568462E460570F7F763 -:103FB000FFFB0B4C0127E771207A002801D0267205 -:103FC000012568460078F7F711FC6772FEF784FD5B -:103FD000FEF798FB002D01D0FEF7B8FBF8BD0000FE -:103FE000F443002070B5174C0646207861780843EA -:103FF00001D0082070BD002E04D0FEF779FC002807 -:104000000DD101E00E2070BD0F48F7F717FA002818 -:1040100005D10D480C30F7F711FA002801D0032024 -:1040200070BD0A48FFF7B0FE0028F9D100252563CE -:10403000266201206563FEF737FC0120A070E57061 -:10404000284670BDF4430020EC4A020079270200A4 -:104050001FB5094900248A79002A09D000228A71F3 -:1040600088616846027001210171FEF77DFA00E067 -:104070001124204604B010BDF44300201FB50024D5 -:10408000002809D0002907D0094AD369002B05D0A0 -:104090001124204604B010BD0E20FBE71182D06130 -:1040A00000206946087008716846FEF74BFCF0E78F -:1040B000F443002010B500280AD002781149022AE2 -:1040C00007D0032A10D0042A11D00320F7F7AAF949 -:1040D00010BD40688207FBD00B4A03231370506069 -:1040E000096A1046884710BDFFF7CCFE10BD0A785C -:1040F000002A01D101220A700079C872FFF7B0FDD1 -:1041000010BD00003C4400205456002010B5047837 -:10411000C02C0AD00D49DB2C09D00A460023527866 -:10412000DC2C07D0DD2C0FD109E0002010BD0120D0 -:10413000487009E0002A07D04B70C02103E0002A34 -:1041400002D04B70DB210170012010BD3C440020E7 -:1041500010B50A4CA069616A0068405C0121C02862 -:1041600007D0DB2805D0F7F711FB606A401C6062BE -:1041700010BDA170DB20F7F709FB10BD3C44002007 -:10418000002803D00249C860002070470E20704705 -:104190009844002010B5F7F725F910BD70B5002937 -:1041A00001D08C0701D0072070BD074C0125A1600C -:1041B00062800649636010DF0028F5D12570162063 -:1041C000FFF7B4FA70BD000098440020954102004A -:1041D00001484078704700009844002010B50D4811 -:1041E0004178002915D0002141701620F7F7CCF84E -:1041F000002804D0012008498005086002E0074833 -:10420000F7F710F91620FFF791FA002801D0F7F719 -:1042100009F910BD9844002000E200E001200000F0 -:1042200010B51620F7F7B0F80124002808D0094887 -:104230004268A105002A07D002688A43026005E0AF -:104240000548F7F7EFF801E0044801600148143829 -:10425000447010BDAC4400200120000080E100E06B -:104260001CB50C4600280DD0002A0BD0116800297F -:1042700008D000210191002C13D00378532B03D0D8 -:1042800007201CBD0E201CBD012301930091134685 -:1042900001AA2146FCF736FB0028F4D10199A1427E -:1042A000F1D009201CBDFEB51D46074614460E0080 -:1042B00016D0002D14D0002C12D0002000902068C1 -:1042C00013460A46019039465320FFF771FA002839 -:1042D00007D12168009A89180091002F02D009E0C7 -:1042E0000E20FEBD6B4631462846019A00F04DFA7D -:1042F0000028F6D100992160FEBD000070B5154878 -:10430000002101600123820513600268002AFCD0AD -:10431000114DA8694360C3600522120284186160D0 -:10432000C21DF932116451649164D16401220326E3 -:104330001204360286197260D211135004222261CF -:104340006A6B2264FF2205326264036000202961E7 -:1043500070BD00000001004000430020FEB51F4C6E -:1043600000252769E06802906846FDF7ABFF0190E1 -:10437000FEF7C2FC06460198002822D000230098D0 -:10438000E16817E00E680A46864202D9301A0860D2 -:1043900012E0801BF31800261660D668D169B44677 -:1043A000002E07D0FE183602360A56606646966022 -:1043B000D56115460029E5D12846E160FEF7FAFCF3 -:1043C00006E02846FEF7F6FC002801D1002E02D0B8 -:1043D0000298FCF743FA00202071FEBD5C430020E8 -:1043E00001200249000508607047000000E200E07B -:1043F00010B50E4BD968002906D002680C68A2429D -:1044000004D8A21A0A60C161D86010BD0B4604E04E -:104410000B46C969121B002904D00C689442F7D3DB -:10442000A41A0C600260C161D86110BD5C43002019 -:10443000F8B51D4DEC68002C34D01C4800274068AE -:104440002969401A0602360A2068B04218D8361A7E -:10445000C7192246107CE46900280FD00020107490 -:104460006B69002B07D0916950699847002805D0E7 -:10447000F6F7D8FF02E0516990698847002CE3D134 -:104480006978A878814206D1401CC0B2A870022881 -:1044900001D10020A87004490006800D18310F508A -:1044A000FFF79EFFF8BD00005C43002000150140AF -:1044B000FF2107481D31002242500648828A816848 -:1044C000895C828A521C82820348C1617047000065 -:1044D00000200040784A0020002500401FB5002140 -:1044E0006A4611701072044882680192817506C88C -:1044F000684690471FBD0000784A00201CB501782F -:10450000134C012908D0022914D000291FD10320FF -:1045100069460870684618E0042269460A704068D7 -:10452000007808710A480121401CFEF78DFD01202A -:10453000A07009E002216A461170C0680190044829 -:104540000121401CFEF780FD6846616888471CBD5C -:1045500040430020F0B5454D012185B04902284671 -:10456000FEF7CEFE01270026414C002824D0FF2173 -:1045700025312846FBF73DFD00281DD0FF202530C2 -:104580002E5081203B4980008860A07E002800D109 -:104590006F6002216846017037490868086003901F -:1045A000E17D68460172E0680190E675267606CCEA -:1045B0006846083C90472BE004212846FEF7A0FE01 -:1045C000002825D0FF2109312846FBF712FD0028DD -:1045D0001ED0FFF773F8E07D617E884218D1207EFF -:1045E000002808D0627EE168E0752069E0602676E8 -:1045F000667610460AE0A07E002800D16F60812018 -:104600001C4980008860E675607EE168FFF772F8FB -:10461000FF211D312846FBF7ECFC00280DD0A18AB4 -:10462000A07D814202D2FFF743FF06E0FF211D314A -:104630006E50002801D0FFF751FFFF214531284679 -:10464000FBF7D7FC00280ED0FF2045302E50A07E6F -:10465000002800D02F60E07D002804D0E675607E41 -:10466000E168FFF747F805B0F0BD0000002000400A -:10467000784A0020002300408024004030B51468B0 -:10468000A51C8D4208D820184178047808022043E0 -:1046900018801068801C106030BD0870000A4870D7 -:1046A000022070470870000A4870022070470870A6 -:1046B000000A4870022070470870000A4870022003 -:1046C00070470870000A4870022070470870000A9E -:1046D0004870022070470870000A48700220704736 -:1046E0000870000A48700220704710B51468091B52 -:1046F000022901D2092010BD20184178047808024F -:10470000204318801068801C1060002010BD10B578 -:104710001C68121B022A01D2092010BD00886118F2 -:104720000870000A48701868801C1860002010BDCE -:1047300010B50446F6F72BFD0002E178000A0906E1 -:10474000084310BD0870020A4A70020C8A70000EFD -:10475000C8700420704770B5144600280AD0002C99 -:1047600008D0002B06D022681D46891A042903D2DE -:10477000092070BD0E2070BD1018FFF7D9FF28600A -:104780002068001D2060002070BD10B51C46002967 -:1047900009D0002807D0002C05D02368D21A042A9B -:1047A00003D2092010BD0E2010BD59180068FFF774 -:1047B000C9FF216840182060002010BD30B5146882 -:1047C000651C8D4204D8005D18701068401C106094 -:1047D00030BD10B514688C4201D1092010BD005DB8 -:1047E00018701068401C1060002010BD10B51C68C7 -:1047F000944201D1092010BD007808551868401C6A -:104800001860002010BD70B5049C0D46002809D02A -:10481000002A07D0002C05D021685B1AAB4203D2D6 -:10482000092070BD0E2070BD8B1801462A4618461F -:10483000F6F77CFC206840192060002070BDFFC1A5 -:10484000FBE84C90728BE7B3518963AB232302845E -:104850001872AA612F3B51A8E53749FBC9CA0C1849 -:10486000532CFD00090000000B0000000A000000AE -:1048700008000000000000000000000000E0D70178 -:1048800003000000090000000B0000000A00000007 -:1048900008000000000000000000000000E0D70158 -:1048A000030000003C000000651D020053000000F2 -:1048B000851D02004D000000EB1C0200620000009C -:1048C000251B020063000000731C0200640000004E -:1048D000CD1B0200650000001B1C020066000000EA -:1048E000B51C020069000000671A020068000000A1 -:1048F000A91A020060000000310B020067000000EE -:10490000611B0200B0000000C1190200B1000000EC -:10491000F1190200B2000000211A02008B00000011 -:104920002912020070000000AB0B02008C00000096 -:10493000290E02008D000000B30E02008A00000064 -:10494000B3110200860000004B1202008500000037 -:10495000990F020071000000750B02007200000048 -:10496000E50B0200730000003F0C02007400000021 -:10497000AF0C020075000000B50D020076000000CB -:10498000650F020077000000491302007800000064 -:10499000070D020079000000D10C02007A0000002F -:1049A000151102007B000000DF1002007C000000F7 -:1049B000190F02007D000000D50E02007E000000ED -:1049C0007B0D02007F0000009D12020080000000AD -:1049D000370D0200860000004B1202008700000025 -:1049E000EF0D02008800000047110200890000005E -:1049F0008311020082000000E10F0200810000002C -:104A000015100200840000009910020083000000CD -:104A10005110020090000000F51402009100000007 -:104A200077150200920000004D1402009300000070 -:104A30008714020095000000B713020096000000E2 -:104A400039150200970000000314020098000000CE -:104A5000B115020099000000C1140200940000008A -:104A600079130200A0000000E1170200A10000007D -:104A70004F170200A2000000FF150200A300000073 -:104A80008F160200A400000069190200A5000000B2 -:104A90001B190200A6000000F1160200A70000008A -:104AA0002D180200A800000095170200A9000000C0 -:104AB000C7180200AA000000691802006700000081 -:104AC000611B02000002000000000000090000005D -:104AD0000B0000000A0000000800000000000000B9 -:104AE0000000000000E0D701030000004C5200204D -:104AF00034440020100010008C5300203844002063 -:104B0000100010000B09080A01000000000000104E -:104B1000304B020000430020B8010000C8B1010082 -:104B2000944B0200B8440020A81900007AB3010099 -:104B300011140808011201031003031280AA401483 -:104B400027294176715B061455555503467102427B -:104B50003323F00423D00923B013335027223B1B07 -:104B6000A04E181A75101A9D0822EB14903A012CC9 -:104B7000E0D701303223321B32175A15045A14047D -:104B80001942790401202A01F604B501017E13249B -:044B9000F40000002D :00000001FF diff --git a/hex/sd_api_v2/sdk_download.sh b/hex/sd_api_v2/sdk_download.sh deleted file mode 100644 index 33a39a8ff..000000000 --- a/hex/sd_api_v2/sdk_download.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash -# -# Download SDK 12 to get SoftDevice s130 v2.0.1 which includes an important bugfix - -ABS_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" - -source $ABS_PATH/../bootstrap.sh --source-only -set_sdk_link 'https://developer.nordicsemi.com/nRF5_SDK/nRF5_SDK_v12.x.x/nRF5_SDK_12.1.0_0d23e2a.zip' -set_dl_location '../sdk' -sdk_download diff --git a/hex/sd_api_v3/s132_nrf52_3.1.0_license-agreement.txt b/hex/sd_api_v3/s132_nrf52_3.1.0_license-agreement.txt new file mode 100644 index 000000000..09a78bbc6 --- /dev/null +++ b/hex/sd_api_v3/s132_nrf52_3.1.0_license-agreement.txt @@ -0,0 +1,96 @@ +S110/S120/S130/S132 license agreement + + +NORDIC SEMICONDUCTOR ASA SOFTDEVICE LICENSE AGREEMENT + +License Agreement for the Nordic Semiconductor ASA ("Nordic") S110, S120, S130 and S132 Bluetooth SoftDevice software packages +("SoftDevice"). + +You ("You" "Licensee") must carefully and thoroughly read this License Agreement ("Agreement"), and accept to adhere to this Agreement before +downloading, installing and/or using any software or content in the SoftDevice provided herewith. + +YOU ACCEPT THIS LICENSE AGREEMENT BY (A) CLICKING ACCEPT OR AGREE TO THIS LICENSE AGREEMENT, WHERE THIS +OPTION IS MADE AVAILABLE TO YOU; OR (B) BY ACTUALLY USING THE SOFTDEVICE, IN THIS CASE YOU AGREE THAT THE USE OF +THE SOFTDEVICE CONSTITUTES ACCEPTANCE OF THE LICENSING AGREEMENT FROM THAT POINT ONWARDS. + +IF YOU DO NOT AGREE TO BE BOUND BY THE TERMS OF THIS AGREEMENT, THEN DO NOT DOWNLOAD, INSTALL/COMPLETE +INSTALLATION OF, OR IN ANY OTHER WAY MAKE USE OF THE SOFTDEVICE. + +1. Grant of License +Subject to the terms in this Agreement Nordic grants Licensee a limited, non-exclusive, non-transferable, non-sub licensable, revocable license +("License"): (a) to use the SoftDevice solely in connection with a Nordic integrated circuit, and (b) to distribute the SoftDevice solely as integrated +in Licensee Product. Licensee shall not use the SoftDevice for any purpose other than specifically authorized herein. It is a material breach of this +agreement to use or modify the SoftDevice for use on any wireless connectivity integrated circuit other than a Nordic integrated circuit. + +2. Title +Nordic retains full rights, title, and ownership to the SoftDevice and any and all patents, copyrights, trade secrets, trade names, trademarks, and +other intellectual property rights in and to the SoftDevice. + +3. No Modifications or Reverse Engineering +Licensee shall not, modify, reverse engineer, disassemble, decompile or otherwise attempt to discover the source code of any non-source code +parts of the SoftDevice including, but not limited to pre-compiled hex files, binaries and object code. + +4. Distribution Restrictions +Except as set forward in Section 1 above, the Licensee may not disclose or distribute any or all parts of the SoftDevice to any third party. +Licensee agrees to provide reasonable security precautions to prevent unauthorized access to or use of the SoftDevice as proscribed herein. +Licensee also agrees that use of and access to the SoftDevice will be strictly limited to the employees and subcontractors of the Licensee +necessary for the performance of development, verification and production tasks under this Agreement. The Licensee is responsible for making +such employees and subcontractors comply with the obligations concerning use and non-disclosure of the SoftDevice. + +5. No Other Rights +Licensee shall use the SoftDevice only in compliance with this Agreement and shall refrain from using the SoftDevice in any way that may be +contrary to this Agreement. + +6. Fees +Nordic grants the License to the Licensee free of charge provided that the Licensee undertakes the obligations in the Agreement and warrants to +comply with the Agreement. + +7. DISCLAIMER OF WARRANTY +THE SOFTDEVICE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND EXPRESS OR IMPLIED AND NEITHER NORDIC, ITS +LICENSORS OR AFFILIATES NOR THE COPYRIGHT HOLDERS MAKE ANY REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE OR +THAT THE SOFTDEVICE WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. THERE +IS NO WARRANTY BY NORDIC OR BY ANY OTHER PARTY THAT THE FUNCTIONS CONTAINED IN THE SOFTDEVICE WILL MEET THE +REQUIREMENTS OF LICENSEE OR THAT THE OPERATION OF THE SOFTDEVICE WILL BE UNINTERRUPTED OR ERROR-FREE. +LICENSEE ASSUMES ALL RESPONSIBILITY AND RISK FOR THE SELECTION OF THE SOFTDEVICE TO ACHIEVE LICENSEE’S +INTENDED RESULTS AND FOR THE INSTALLATION, USE AND RESULTS OBTAINED FROM IT. + + +8. No Support +Nordic is not obligated to furnish or make available to Licensee any further information, software, technical information, know-how, show-how, +bug-fixes or support. Nordic reserves the right to make changes to the SoftDevice without further notice. + +9. Limitation of Liability +In no event shall Nordic, its employees or suppliers, licensors or affiliates be liable for any lost profits, revenue, sales, data or costs of +procurement of substitute goods or services, property damage, personal injury, interruption of business, loss of business information or for any +special, direct, indirect, incidental, economic, punitive, special or consequential damages, however caused and whether arising under contract, +tort, negligence, or other theory of liability arising out of the use of or inability to use the SoftDevice, even if Nordic or its employees or suppliers, +licensors or affiliates are advised of the possibility of such damages. Because some countries/states/jurisdictions do not allow the exclusion or +limitation of liability, but may allow liability to be limited, in such cases, Nordic, its employees or licensors or affiliates’ liability shall be limited to +USD 50. + +10. Breach of Contract +Upon a breach of contract by the Licensee, Nordic and its licensor are entitled to damages in respect of any direct loss which can be reasonably +attributed to the breach by the Licensee. If the Licensee has acted with gross negligence or willful misconduct, the Licensee shall cover both +direct and indirect costs for Nordic and its licensors. + +11. Indemnity +Licensee undertakes to indemnify, hold harmless and defend Nordic and its directors, officers, affiliates, shareholders, licensors, employees and +agents from and against any claims or lawsuits, including attorney's fees, that arise or result of the Licensee’s execution of the License and which +is not due to causes for which Nordic is responsible. + +12. Governing Law +This Agreement shall be construed according to the laws of Norway, and hereby submits to the exclusive jurisdiction of the Oslo tingrett. + +13. Assignment +Licensee shall not assign this Agreement or any rights or obligations hereunder without the prior written consent of Nordic. + +14. Termination +Without prejudice to any other rights, Nordic may cancel this Agreement if Licensee does not abide by the terms and conditions of this +Agreement. Upon termination Licensee must promptly cease the use of the License and destroy all copies of the Licensed Technology and any +other material provided by Nordic or its affiliate, or produced by the Licensee in connection with the Agreement or the Licensed Technology. + +15. Third party beneficiaries +Nordic’s licensors are intended third party beneficiaries under this Agreement. + + diff --git a/hex/sd_api_v3/s132_nrf52_3.1.0_softdevice.hex b/hex/sd_api_v3/s132_nrf52_3.1.0_softdevice.hex new file mode 100644 index 000000000..cbeadf4f8 --- /dev/null +++ b/hex/sd_api_v3/s132_nrf52_3.1.0_softdevice.hex @@ -0,0 +1,7769 @@ +:020000040000FA +:1000000000040020E508000079050000C508000094 +:10001000830500008D05000097050000000000002A +:1000200000000000000000000000000009090000BE +:10003000A105000000000000AB050000B5050000B0 +:10004000BF050000C9050000D3050000DD05000064 +:10005000E7050000F1050000FB05000005060000B3 +:100060000F06000019060000230600002D06000000 +:1000700037060000410600004B0600005506000050 +:100080005F06000069060000730600007D060000A0 +:1000900087060000910600009B060000A5060000F0 +:1000A000AF060000B9060000C3060000CD06000040 +:1000B000D7060000E1060000EB060000F506000090 +:1000C000FF06000009070000130700001D070000DD +:1000D00027070000310700003B070000450700002C +:1000E0004F07000059070000630700006D0700007C +:1000F00077070000810700008B07000095070000CC +:100100009F0700001FB500F003F88DE80F001FBD2A +:1001100000F0DEBB1FB56FF00100009040100390AF +:10012000029001904FF010208069000B420900F00E +:100130001F045DF822300120A04083434DF8223097 +:10014000684600F044F91FBDF0B54FF6FF734FF459 +:10015000B4751A466E1E11E0A94201D3344600E080 +:100160000C46091B30F8027B641E3B441A44F9D14B +:100170009CB204EB134394B204EB12420029EBD17E +:1001800098B200EB134002EB124140EA0140F0BD8F +:10019000DD4992B00446D1E90001CDE91001FF220A +:1001A0004021684600F03AFB94E80F008DE80F000C +:1001B000684610A902E004C841F8042D8842FAD12B +:1001C00010216846FFF7C0FF1090AA208DF8440068 +:1001D000FFF7A0FF00F0F2F84FF01024A069102202 +:1001E0006946803000F001F9A069082210A900F0EA +:1001F000FCF800F0D7F84FF080510A6949690068AF +:100200004A43824201D8102070470020704710B541 +:10021000D0E900214FF0805002EB8103026944696C +:100220006243934209D84FF01022536903EB8103D4 +:100230000169406941438B4201D9092010BD5069D1 +:10024000401C01D0002010BD0F2010BD70B501680A +:100250000446AE4D4FF01020062951D2DFE801F0E0 +:10026000320318283B1DD4E90265646829463046EC +:1002700000F0CDF82A462146304600F0B6F8AA0034 +:100280002146304600F09EFA002800D0032070BDC1 +:1002900000F050FB4FF4805007E0201DFFF7ABFF4C +:1002A0000028F4D100F046FB60682860002070BD93 +:1002B000241D94E80700920000F084FA0028F6D08C +:1002C0000E2070BD8069401C12D0201DFFF79FFFDB +:1002D0000028F6D109E08069401C09D0201DFFF7F5 +:1002E0008AFF0028EDD1606820B12046FFF750FF5B +:1002F000042070BDFFF70EFF00F060F800F052F828 +:10030000072070BD10B50C46182802D001200860E7 +:1003100010BD2068FFF79AFF206010BD4FF0102439 +:10032000A069401C05D0A569A66980353079AA2846 +:1003300008D06069401C2DD060690068401C29D03D +:1003400060692CE010212846FFF7FEFE31688142EB +:100350001CD1A16901F18002C03105E030B108CAA9 +:1003600051F8040D984201D1012000E000208A429A +:10037000F4D158B1286810B1042803D0FEE728460C +:1003800000F057F861496868086008E000F016F866 +:1003900000F008F84FF480500168491C01D000F0CB +:1003A000A3FAFEE7BFF34F8F59480168594A01F499 +:1003B000E06111430160BFF34F8FFEE74FF0102063 +:1003C0008169491C02D0806900F0ADB87047524A7B +:1003D00001681160121D416811604F4A8168103236 +:1003E0001160111DC068086070472DE9F041174683 +:1003F0000D460646002406E03046296800F0A6F8BF +:10040000641C2D1D361DBC42F6D3BDE8F08170B5CD +:100410000C4605464FF4806608E0284600F083F855 +:10042000B44205D3A4F5806405F58055002CF4D1C1 +:1004300070BD4168044609B1012500E000254FF078 +:1004400010267069A268920000F0BCF9C8B120467D +:1004500000F01AF89DB17669A56864684FF4002031 +:1004600084420AD2854208D229463046FFF7CFFFA0 +:100470002A4621463046FFF7B8FFFFF79FFFFFF7F8 +:1004800091FFFFF747FEF8E72DE9FF414FF01024F9 +:10049000616980680D0B01EB800000F6FF70010BB5 +:1004A00000200090019002900246039068460123CC +:1004B0000BE0560902F01F0C50F8267003FA0CFCF2 +:1004C00047EA0C0740F82670521CAA42F1D30AE012 +:1004D0004A0901F01F0650F8225003FA06F6354388 +:1004E00040F82250491C8029F2D3A169090B4A091E +:1004F00001F01F0150F822408B409C4340F82240FD +:10050000FFF765FFBDE8FF815809000000000020EB +:100510000CED00E00400FA050006004014480168F4 +:100520000029FCD07047134A0221116010490B6862 +:10053000002BFCD00F4B1B1D186008680028FCD056 +:100540000020106008680028FCD07047094B10B5E7 +:1005500001221A60064A1468002CFCD00160106861 +:100560000028FCD00020186010680028FCD010BDC6 +:1005700000E4014004E5014008208F49096809585A +:10058000084710208C4909680958084714208A49EF +:100590000968095808471820874909680958084711 +:1005A0003020854909680958084738208249096878 +:1005B000095808473C2080490968095808474020E5 +:1005C0007D4909680958084744207B49096809584A +:1005D0000847482078490968095808474C20764957 +:1005E000096809580847502073490968095808479D +:1005F0005420714909680958084758206E4909680C +:10060000095808475C206C49096809580847602068 +:100610006949096809580847642067490968095801 +:100620000847682064490968095808476C206249EE +:1006300009680958084770205F4909680958084740 +:1006400074205D4909680958084778205A490968A3 +:10065000095808477C2058490968095808478020EC +:1006600055490968095808478420534909680958B9 +:100670000847882050490968095808478C204E4986 +:1006800009680958084790204B49096809580847E4 +:10069000942049490968095808479820464909683B +:1006A000095808479C204449096809580847A02070 +:1006B0004149096809580847A4203F490968095871 +:1006C0000847A8203C49096809580847AC203A491E +:1006D000096809580847B020374909680958084788 +:1006E000B4203549096809580847B82032490968D3 +:1006F00009580847BC203049096809580847C020F4 +:100700002D49096809580847C4202B490968095828 +:100710000847C8202849096809580847CC202649B5 +:10072000096809580847D02023490968095808472B +:10073000D4202149096809580847D8201E4909686A +:1007400009580847DC201C49096809580847E02077 +:100750001949096809580847E420174909680958E0 +:100760000847E8201449096809580847EC2012494D +:10077000096809580847F0200F49096809580847CF +:10078000F4200D49096809580847F8200A49096802 +:1007900009580847FC2008490968095808475FF4C8 +:1007A0008070054909680958084700000348044952 +:1007B000024A034B70470000000000206809000057 +:1007C0006809000040EA010310B59B070FD1042A15 +:1007D0000DD310C808C9121F9C42F8D020BA19BA0C +:1007E000884201D9012010BD4FF0FF3010BD1AB171 +:1007F000D30703D0521C07E0002010BD10F8013BC6 +:1008000011F8014B1B1B07D110F8013B11F8014BEC +:100810001B1B01D1921EF1D1184610BD02F0FF033F +:1008200043EA032242EA024200F005B870477047EB +:1008300070474FF000020429C0F0128010F0030C42 +:1008400000F01B80CCF1040CBCF1020F18BF00F8C3 +:10085000012BA8BF20F8022BA1EB0C0100F00DB872 +:100860005FEAC17C24BF00F8012B00F8012B48BFD0 +:1008700000F8012B70474FF0000200B51346944674 +:100880009646203922BFA0E80C50A0E80C50B1F1E8 +:100890002001BFF4F7AF090728BFA0E80C5048BFFC +:1008A0000CC05DF804EB890028BF40F8042B08BF9A +:1008B000704748BF20F8022B11F0804F18BF00F896 +:1008C000012B7047014B1B68DB68184700000020B4 +:1008D00009480A497047FFF7FBFFFFF713FC00BD0B +:1008E00020BFFDE7064B1847064A1060016881F3F8 +:1008F0000888406800470000680900006809000097 +:100900001D030000000000201EF0040F0CBFEFF3D9 +:100910000881EFF30981886902380078182803D12B +:1009200000E00000074A1047074A12682C3212689C +:100930001047000000B5054B1B68054A9B589847B7 +:1009400000BD000005030000000000205409000065 +:1009500004000000001000000000000000FFFFFF86 +:040960000090D00330 +:10100000501200207DE501006D2F0000EDE401008D +:101010006D2F00006D2F00006D2F000000000000FC +:10102000000000000000000000000000D5E5010005 +:101030006D2F0000000000006D2F00006D2F0000DC +:101040003DE6010043E601006D2F00006D2F00001A +:101050006D2F00006D2F00006D2F00006D2F000020 +:1010600049E601006D2F00006D2F00004FE60100E2 +:101070006D2F000055E601005BE6010061E601000E +:101080006D2F00006D2F00006D2F00006D2F0000F0 +:101090006D2F00006D2F00006D2F00006D2F0000E0 +:1010A00067E601006DE601006D2F00006D2F000066 +:1010B0006D2F00006D2F00006D2F00006D2F0000C0 +:1010C00073E601006D2F00006D2F00006D2F0000F2 +:1010D0006D2F00006D2F00006D2F00006D2F0000A0 +:1010E0006D2F00006D2F00006D2F00006D2F000090 +:1010F0006D2F00006D2F00006D2F00006D2F000080 +:101100006D2F00006D2F000000F002F81DF023FA93 +:101110000AA090E8000C82448344AAF10107DA4552 +:1011200001D11DF018FAAFF2090EBAE80F0013F062 +:10113000010F18BFFB1A43F0010318476CDA0100D6 +:101140008CDA01000A4410F8014B14F00F0508BFB7 +:1011500010F8015B240908BF10F8014B6D1E05D083 +:1011600010F8013B6D1E01F8013BF9D1641E03D05C +:10117000641E01F8015BFBD19142E4D3704700008B +:101180000023002400250026103A28BF78C1FBD890 +:10119000520728BF30C148BF0B6070471FB500F031 +:1011A0003DF88DE80F001FBD1EF0040F0CBFEFF3DC +:1011B0000880EFF30980014A10470000E79E000015 +:1011C0008269034981614FF00100104470470000BB +:1011D000D511000001B41EB400B511F025FA01B418 +:1011E0000198864601BC01B01EBD0000F0B4404627 +:1011F000494652465B460FB402A0013001B506488D +:10120000004700BF01BC86460FBC80468946924617 +:101210009B46F0BC70470000091100001DF098B912 +:1012200070B51C4C054608202070A01C00F065F825 +:101230005920A08029462046BDE8704007F026B816 +:1012400010B507F02EF813490020891E087010BD54 +:1012500070B50C460F49891E097829B1A0F16001CB +:10126000532906D3012011E0602802D043F2010087 +:101270000CE020CC084E94E80E0006EB8000A0F5B0 +:101280008050241FD0F8806E2846B047206070BD83 +:10129000012070470A000020B8E6010010B504469E +:1012A0000021012000F03FF80021182000F03BF859 +:1012B00000210B2000F037F80421192000F033F84A +:1012C00004210D2000F02FF804210E2000F02BF84F +:1012D00004210F2000F027F80421C84300F023F870 +:1012E0000721162000F01FF80721152000F01BF839 +:1012F0002046FFF795FF002010BD91210180704727 +:10130000FFF79EBF10487047104A10B514680F4B86 +:101310000F4A08331A60FFF79BFF0C48001D04605A +:1013200010BD704770474907090E002806DA00F023 +:101330000F0000F1E02080F8141D704700F1E0205C +:1013400080F800147047000003F9004310050240C4 +:101350000100000130B5FF4D044610280AD0112CC1 +:1013600006D02846122C817806D0132C08D0FFDF37 +:10137000AC7030BDFFDFFBE71129F9D0FFDFF7E7E5 +:101380001129F5D0FFDFF3E770B506200DF016FD4B +:10139000044606200DF01AFD251A07200DF00EFD5B +:1013A000044607200DF012FDEA49201A2A18887811 +:1013B00012280CD000231A4413280AD0002002441B +:1013C0000878022807D000201044C0B270BD012365 +:1013D000F1E70120F3E70120F6E7DE4800B50079E8 +:1013E000DC49420897B051F8050F89880CD01722C4 +:1013F0008DF80020CDF80200ADF806100BA9684664 +:101400000AF095FF17B000BD4022F1E702210DF070 +:101410002ABD2DE9F04196B01D4690460E4607467E +:10142000FFF7F4FF04000BD02078222804D3A07F1C +:10143000C0F34010A84206D1082016B0BDE8F081E4 +:1014400043F20200F9E745208DF80000ADF8027084 +:101450003DB101208DF804008DF805608DF80680FF +:1014600002E000208DF804000BA968460AF05FFF37 +:10147000A07F65F34510A0770020DEE730B5044675 +:10148000A1F120000D460A284AD2DFE800F0050746 +:101490000C1C2328353A3F44FFDF42E02078202807 +:1014A0003FD1FFDF3DE0AB480178032939D0807898 +:1014B000132836D02078242833D0252831D023286B +:1014C0002FD0FFDF2DE0207822282AD0232828D80B +:1014D000FFDF26E02078222823D0FFDF21E02078DC +:1014E00022281ED024281CD026281AD0272818D01D +:1014F000292816D0FFDF14E02078252811D0FFDF3F +:101500000FE0207825280CD0FFDF0AE0207825287E +:1015100007D0FFDF05E02078282802D0FFDF00E0B9 +:10152000FFDF257030BD30B50B8840F67B444FF6A9 +:10153000FF72022801D0934204D09D1FA54224D2FD +:10154000022802D04D88954203D04D88AD1FA54298 +:101550001BD24C88A34218D88B88B3F5FA7F14D2DB +:10156000022802D0C888904205D0C88840F6774546 +:101570000A38A84209D2C888904208D0944206D0BE +:101580005B1C6343B3EB800F01DB072030BD002001 +:1015900030BD70B514460D46064611F0B3FA60B979 +:1015A0000DB1A54201D90C2070BD002409E000BF97 +:1015B00056F8240011F0A6FA08B1102070BD641C82 +:1015C000E4B2AC42F4D3002070BDF0B50024059D18 +:1015D00010B1A94203D851E009B90020F0BD09209B +:1015E000F0BD055D8DB107197E78112E3FD00FDC5F +:1015F0000A2E3CD2DFE806F03B1624242A2A2C2CA3 +:101600003333025D72BB641CE4B28C42F9D3E4E76D +:101610001D2E2CDAA6F11206042E28D2DFE806F0E1 +:1016200027271018022DDAD1BD781D70072D01D2A1 +:101630006D0701D40A20F0BD157845F0010515E0CD +:10164000EE43F60707E0012D07D010E00620F0BDBD +:101650002E07A6F18056002EF5D06046F0BD157815 +:10166000AE0701D50B20F0BD45F002051570055DF4 +:10167000641C2C44E4B28C4202D9B0E74FF4485CBD +:101680008C42AED3A9E710B50278540809D00122E4 +:1016900043F20223012C07D0022C0DD0032C13D1CE +:1016A0000FE00020087005E080790324B4EB901F60 +:1016B0000AD10A70002010BD8079B2EB901F03D1CF +:1016C000F7E780798009F4D0184610BD214A917B54 +:1016D00039B1D17B022908D0032908D043F2022076 +:1016E00070470146101D01F082BB032100E001217B +:1016F00001700020704738B50C460546694601F078 +:1017000076FB00280DD19DF80010207861F347008A +:10171000207055F8010FC4F80100A888A4F805004E +:10172000002038BD38B51378F0B102281CD00AA4C7 +:101730006D46246800944C7905EB9414247864F386 +:1017400047031370032814D003F0FE0010700868DC +:1017500004E00000C00100200302FF01C2F8010004 +:101760008888A2F8050038BD23F0FE031370022814 +:10177000E8D1D8B240F00100E8E730B50C4609786E +:1017800097B0222902D2082017B030BD28218DF849 +:101790000010ADF80200132A03D03B2A01D0072025 +:1017A000F2E78DF804200BA968460AF0C0FD050099 +:1017B00003D121212046FFF761FE2846E4E700B56A +:1017C00097B023218DF80010ADF802001088ADF815 +:1017D00004005088ADF80600D088ADF80A00908863 +:1017E000ADF808000020ADF80C00ADF80E000BA914 +:1017F00068460AF09CFD05E62DE9FF470220FA4EF7 +:101800008DF804000027708AADF80600B84643F250 +:1018100002094DE001A80DF090FA050006D0708A8B +:10182000A8B3A6F81280ADF806803FE0039CA07F25 +:1018300001072DD504F124000090A28EBDF8080008 +:10184000214604F1360301F0A6FF050005D04D4501 +:101850002BD0112D3DD0FFDF3BE0A07F20F0080012 +:10186000A077E07F810861F30000C10861F34100C7 +:10187000E07794F8210000F01F0084F82000207821 +:10188000282827D129212046FFF7F8FD22E015E07E +:1018900040070BD5BDF80800214604F10E02FFF702 +:1018A0008EFF05000DD04D4510D100257F1CFFB2E5 +:1018B00002200DF083FA401CB842ABD8052D12D09F +:1018C00008E0A07F20F00400A07703E0112D00D0F5 +:1018D000FFDF0025BDF806007082052D05D02846E3 +:1018E00004B0BDE8F087A6F812800020F8E72DE9E3 +:1018F000F047040000D1FFDF2078BB4E20F00F003E +:10190000801C20F0F0007030207060680178091FA2 +:101910001429E6D2DFE801F0F00A0B4FEF0B0CEFD1 +:10192000EF36F00B0BF074F00B0BF0F0FFDFD8E7A5 +:1019300087883846FFF76AFD050000D1FFDF607831 +:10194000212140F008006070707C40F00400707449 +:101950002846FFF793FD384607F0D0FA384603F0E3 +:101960009AFF384605F025F83946022011F087F82D +:10197000A87F20F01000A877FFF73EFF0028B0D026 +:10198000FFDFAEE785882846FFF740FD00B9FFDF9F +:1019900060688078012800D0FFDF60688179284680 +:1019A00007F01CFC00289CD0617841F008016170B0 +:1019B0006168C88095E786883046FFF727FD0500F7 +:1019C00000D1FFDF6078314640F008006070606849 +:1019D000C088288160680089688160684089A88122 +:1019E000022011F04CF80020A875A87F00F0030039 +:1019F00002289CD1FFF700FF002898D0FFDF70E796 +:101A000080783C2803D0002502280AD000E0012578 +:101A1000002720B13C2802D0022800D0FFDF17B1F8 +:101A2000A0E00127F5E76078002D40F00800607025 +:101A3000707C40F0080070747ED165680221B5F8B2 +:101A40000480AD1C474638460DF004FA04460321D5 +:101A500038460DF0FFF98246052138460DF0FAF9B7 +:101A60008146042138460DF0F5F9074604B9FFDF39 +:101A7000BAF1000F00D1FFDFB9F1000F00D1FFDF95 +:101A800007B9FFDF22212046FFF7F8FC287901285B +:101A900033D00227A07F062167F30100A077288BAF +:101AA0002081688B6081A88BA08105F1120001F074 +:101AB000D5F920B36879800700D5FFDF6979E07D2B +:101AC00061F34700E075D5F80600A0616889A0833E +:101AD000062105F10C0001F0C1F9D0B130794108BF +:101AE000607861F347006070D6F80500C4F8020022 +:101AF000B6F8090016E042E046E00127CAE7E07DBB +:101B000020F0FE00801CE075D5F81200A061E88A84 +:101B1000DDE7607820F0FE00801C6070E868C4F8A3 +:101B20000200288AE0803148007884F82200A07FF3 +:101B300000F00301404600E007E007F0D1F9012F73 +:101B400003D0022F0ED0FFDFCBE63078032800D081 +:101B5000FFDF0021084610F092FFBDE8F0470120AA +:101B600001F013B9B078132800D0FFDF002107205F +:101B700010F085FFBDE8F0471120FFF7EBBB2046D2 +:101B8000BDE8F04702F0DAB8607840F00800607015 +:101B9000A7E62DE9F047054600789146002702099F +:101BA000DFF844A00C463E46012A70D000214FF6D3 +:101BB000FF70022A6CD0072A09D00A2A69D0FFDFF9 +:101BC000A9F800600CB127806680002089E6D5F86E +:101BD00004C004F1080204F118089CF80060361FE4 +:101BE000142E56D204E00000C00100201000002096 +:101BF000DFE806F0984F4F454F4F0A4F4F3C5A4F82 +:101C00004FC263FA4F4F50E811270926002C7CD0B1 +:101C1000BCF80480A4F804806868807920729AF87F +:101C20001110404621F004018AF8111004210DF032 +:101C30002CF9052140460DF028F9002140460DF011 +:101C400024F9012140460DF020F9032140460DF012 +:101C50001CF9022140460DF018F9062140460DF00E +:101C600014F9072140460DF010F9A9E701270926CC +:101C7000F4B3BCF80400A0806868807912E01227F1 +:101C80001026BCF80400214601F0C9F898E7BFE02F +:101C9000E9E00EE11C27092654B3BCF80200A0803D +:101CA0006868007920728BE71B27092604B304209B +:101CB000207268684088A08082E79CF802003C2877 +:101CC00026D0102718260CF1020C8CB1BCF80200AB +:101CD000A080BCF818006082BCF818002082BCF814 +:101CE0001A00A082BCF81C00E0829CF8050000E00D +:101CF0000BE00CF10601FFF715FD9CF8040010B194 +:101D00000120E07309E00220FBE7A9F800605CE72E +:101D10001B270926002CF8D021729AF8111021F007 +:101D20000801B2E01D273726002CEED0A08069689C +:101D30000879491DFFF7F6FC686890F82B00A0753C +:101D40006868C0780428E07D13D020F00100E075B9 +:101D500069681F22C97861F34200E0756968C97A31 +:101D600061F3C700E075696840460C311CF0F6FA73 +:101D700026E740F00100EAE71D273726002CC4D0F3 +:101D8000A0806968481D0B7901461846FFF7CAFC18 +:101D9000696804F10F0201F10C00CB7A0146184684 +:101DA000FFF7C0FC6868807CA0756868C178E07D3A +:101DB00061F3420020F0F900E0751F2140461CF05D +:101DC00066FBFDE620271026002C9ED0A0806868C8 +:101DD00004F10902407A20726968CB1C88781946A0 +:101DE000FFF7A0FCECE6FFE704271026002C8CD0C0 +:101DF000BCF80200A0806868808820816868C0887C +:101E0000608168680089A08168684089E081D7E6C0 +:101E1000287A012803D0022814D0FFDFD0E61F273C +:101E20001026002CABD06888A08068892081A88902 +:101E30006081E889A081288AE0819AF8111021F058 +:101E4000200122E012271026688800F0E8FF002C0D +:101E500095D0687800F00700032889D19AF811100E +:101E600021F0020111E02A7A062A29D2DFE802F0E5 +:101E70000310102121211B270926002CA5D0A080AA +:101E800021729AF8111021F001018AF8111097E6D9 +:101E90001B270926002C98D0A080287A012806D07C +:101EA000032020729AF8111021F01001EDE70220B2 +:101EB000F7E74A4621462846BDE8F04702F0B9B8A0 +:101EC000FFDF7DE610B5F94896B08078132802D080 +:101ED000082016B010BD22208DF800000BA968461E +:101EE0000AF025FA04460021072010F0C8FD20461C +:101EF000EFE700B5ED4897B08078122801D00820B0 +:101F000079E41E208DF8000000208DF802008DF885 +:101F100003000BA968460AF00AFA0028F0D1002154 +:101F2000072010F0ACFD1120FFF714FA002062E446 +:101F300000B5DE4897B00078012814D01B208DF83A +:101F4000000000208DF802000BA968460AF0EFF9A6 +:101F5000002807D10021084610F091FD012000F073 +:101F600014FF002047E4082045E42DE9F041CF4C60 +:101F7000002740B102281DD0072842D0082800D0F1 +:101F8000FFDFBDE8F081FFF7D3FF0028F9D106F0AD +:101F9000C2F80028F5D0017821F00F01891C21F04A +:101FA000F00120310170077206F095F8607C40F076 +:101FB00001001DE08EB23046FFF728FA050000D17F +:101FC000FFDF28782128DCD006F0A5F890B1017851 +:101FD00021F00F01891C21F0F00110310170022164 +:101FE00001724680AF7506F076F8607C40F0020022 +:101FF0006074C6E729463046BDE8F0411322FFF77A +:10200000BCBBA578122D03D0132D04D0FFDFB8E799 +:10201000FFF76FFF01E0FFF755FF0028B1D106F091 +:102020007AF80028ADD0017821F00F01891C21F049 +:10203000F00120310170122D07D00221017206F04B +:102040004AF8607C40F01000D2E70121F6E72DE964 +:10205000F04114460D00074600D1FFDF2878012823 +:1020600003D0022821D0FFDF8BE73846FFF7CEF9F7 +:10207000060000D1FFDF0220B075207820F00F00AD +:10208000801C20F0F00010302070607840F00800D4 +:1020900060702868A0606868E060288920828348B2 +:1020A000417C41F0200141746BE73846FFF7AEF9FF +:1020B000060000D1FFDF69884FF6FF70814209D129 +:1020C000AA88824206D131463846BDE8F041132243 +:1020D000FFF753BB814201D1A88898B1207820F046 +:1020E0000F00801C20F0F00010302070607840F06D +:1020F000080060702868A0606868E0602889208215 +:10210000002006E0782300223946022010F01AFC55 +:102110000120B07535E770B5044696B00D46084607 +:1021200010F0F0FC78BB00200121614E203C0C2C0B +:102130007AD2DFE804F0062950555E677360447E6A +:102140008A940021082010F073FC10B1112016B001 +:1021500070BD24208DF80000D5F80200CDF80200F3 +:10216000A8798DF806000BA968460AF0E0F804008B +:1021700073D1082300221146184610F0E3FB08280B +:102180006BD0FFDF69E003E0686810F0FDFC08B188 +:102190001020DCE748208DF800002888ADF8020008 +:1021A0006888ADF804000BA968460AF0C0F804007E +:1021B00053D1686888B3BDF8301001804DE04920E4 +:1021C0008DF800002888ADF80200A87800F0010022 +:1021D0008DF8040046E0286802F0CCF904463CE0A3 +:1021E0004A2209E08DF802103CE000BF8DF80200A1 +:1021F00038E0422200E052228DF800202A78D207EF +:10220000F4D0EFE738208DF800002888ADF8020000 +:102210006888ADF8040025E006E015E0287828B1CC +:10222000A0F11B01E12902D3072416E01B20307026 +:1022300012E04F208DF800000BA968460AF077F8ED +:1022400004000AD11B20307007E0FFF79DF808B1A9 +:10225000082402E00AF050F80024204677E75020D6 +:102260008DF800000BA968460AF061F8B6E730B5B2 +:10227000054697B00C46084610F068FC10B11020D7 +:1022800017B030BD203D0C2D2DD2DFE805F0062A19 +:102290002A2A2C2C2A2C2A2A2A2A2088FFF7B6F848 +:1022A00040B10078222808D20820E9E7C0010020C8 +:1022B0001000002043F20200E2E725208DF8000024 +:1022C0002088ADF802000BA968460AF030F8002813 +:1022D000D6D1DDF83210C4F802109DF83610A17185 +:1022E000CEE70620CCE70720CAE7FC487047FB4949 +:1022F000091F08747047F948001F007C00F00100B6 +:10230000704738B5F5481421001F1CF09EF80120D5 +:1023100000F03BFD1120FFF71DF8F149FB20EF4CC9 +:102320000870241F611D684605F0BFFF9DF800106E +:10233000207961F3470020F0010020710020A07394 +:102340004FF46170A0810220E073FFF746F800B1FE +:10235000FFDF00F061FE01F0ACFC38BD10B50C46AB +:102360003E2120461CF071F8A07F20F00300A077EA +:10237000202020700020A07584F8230010BD704735 +:102380007CB5054610F0BEFB08B110207CBDD34CD7 +:10239000241F211D60680090A06801902846FFF767 +:1023A000AAF90028F2D1FFF718F80028EED000991A +:1023B0006160BDF8041021819DF80610A1727CBDFA +:1023C00010B5044610F0C2FB08B1102010BDC3497F +:1023D0002246091F0879491D4008FFF7A3F900208C +:1023E00010BD2DE9F0479CB00D4604004FF00008E9 +:1023F00011D00822FFF7CDF800281BD1002608E0F5 +:1024000054F8260004A9FFF73EF9002812D1761CE3 +:10241000F6B2AE42F4D32F460A2006AD0DF1440ABF +:102420008DF8180026465146284609F080FF20B155 +:1024300043F203201CB0BDE8F0874046DFF89C82E1 +:10244000A8F1040888F803002EB300244FF00B090C +:102450001DE000BF56F8240005A9FFF714F900B1EC +:10246000FFDF9DF81400A87056F8240050F8011FF3 +:10247000C5F803108088A5F8070085F8009051463C +:10248000284609F054FF00B1FFDF641CE4B2BC42EF +:10249000E0D388F803700020CCE72DE9F0479EB028 +:1024A0001546894604001ED00F4608222946FFF72C +:1024B00070F8002811D1002613E000BF54F8260060 +:1024C00005A9103000F093FC002806D13FB157F861 +:1024D000260010F017FB10B110201EB0ABE7761CE1 +:1024E000F6B2AE42EAD30026A5F101081CE000BF17 +:1024F00006F1010A0AF0FF0712E000BF54F82600B7 +:10250000017C4A0854F827100B7CB2EB530F05D11D +:102510000622113011311BF0F5FEC0B17F1CFFB255 +:10252000AF42EBD30AF0FF064645E1DBC8462F4633 +:10253000342007AD0DF148098DF81C0026464946A8 +:10254000284609F0F4FE28B143F20420C5E743F21F +:102550000520C2E796B300242CE000BF56F8240003 +:10256000A91C103000F043FC00B1FFDF56F8240036 +:10257000102250F8111FC5F803108088A5F8070035 +:1025800056F8241005F109001BF0E8FEB8F1000F21 +:1025900015D058F82410102205F119001BF0DEFEAA +:1025A000322028704946284609F0C1FE00B1FFDFFD +:1025B000641CE4B2BC42D1D3012206E004E005F180 +:1025C000190001F0CBFFEBE700224946284600F056 +:1025D00039FC002081E770B596B0044610F092FAFD +:1025E00018B9606810F0D9FA08B11020AFE560881A +:1025F0004AF2B811884206D8384D20786E462D1F11 +:1026000018B1012804D00720A1E5FEF7E6FE1AE084 +:102610006078022804D0032802D043F2022096E515 +:10262000E87317208DF80000E97B0020CDF8020048 +:10263000ADF80600022932D003292DD0FFDF0BA907 +:10264000684609F074FE0028D0D1606801F079FF77 +:10265000207870B101208DF80200F01C01F07EFF9F +:102660004C208DF800000BA9684609F060FE00B10F +:10267000FFDF6088A8B1A88180B2ADF802003020E9 +:102680008DF800000BA9684609F051FE00B1FFDF8C +:102690002078A87300205AE58DF80700CFE7402086 +:1026A000FAE74FF46170E6E710B5044610F04EFA11 +:1026B00020B9606838B110F067FA08B1102010BD79 +:1026C000606801F04BFF0548001F81896180C17B74 +:1026D0006170807B2070002010BD0000C4010020CC +:1026E000100000202DE9F0419CB0054600208DF837 +:1026F00064008DF860008DF830008DF868001E468B +:1027000014468846284610F048FA18B9204610F0BA +:1027100044FA10B110201CB033E455EA040018D07C +:102720001F270CAB19AA414628460097FEF74DFF1C +:102730000028F0D11AAB18AA314620460097FEF7C0 +:1027400044FF0028E7D19DF86000C00703D00A20AD +:10275000E1E70720DFE701AF7DB11A208DF8040023 +:102760008DF8068042462946F81C1BF0F7FD0DA99E +:1027700001A809F0DCFD0028CDD17CB120208DF826 +:1027800004008DF8066032462146F81C1BF0E6FD79 +:102790000DA901A809F0CBFD0028BCD1FF499DF887 +:1027A000300048700020B6E72DE9F0439BB04FF0B1 +:1027B0000008FBA104468DF83480D1E90001CDE981 +:1027C0001901204610F09EF990B92078012803D114 +:1027D000606810F097F958B9F04D4FF00109A87BE7 +:1027E00050B1E87B022807D1606810F0D6F918B123 +:1027F00010201BB0BDE8F0832878012801D0082004 +:10280000F7E707200CF0E2FA18B9207848B1012860 +:1028100007D000F0CEFA30B1687C10F00C0F08D170 +:1028200003E01220E5E71320E3E7C10701D18007A9 +:1028300001D51120DDE7608943F6E172A0F12001A6 +:102840009142217807D301297ED100287CD1A1892A +:10285000002979D10FE0022901D0032901D1A02854 +:1028600072D3012907D06978C90704D0A18900294A +:102870006AD0B42968D8217831B1012908D0022959 +:1028800004D0032960D10AE0002609E0022607E00F +:1028900008B9A08908B1042609E0012607E003264B +:1028A000A87B50B1E87B022807D1606828B10DA948 +:1028B0006068FEF7E8FE00289BD1207A30B101283D +:1028C00006D0022806D003286DD105E0002704E0D9 +:1028D000012702E0022700E003270EB1022E0ED1ED +:1028E0006FB1E87880B36878800702D043F20120A6 +:1028F0007FE7022E03D1022F55D0032F53D018208B +:102900008DF838006089ADF83A006089ADF83C0078 +:102910008DF83E600DF13F00FEF7D8FE00B1FFDFFD +:102920009DF834008DF840002078012806D0A87B5F +:1029300068B1E87B02280AD1606840B1606850F84D +:10294000011FCDF8411000E02DE0808802E04046F4 +:10295000CDF84180ADF845008DF84870A07BC0F3FC +:102960004002014662F35F01C0F3800041EA80004B +:1029700019A9085C8DF84700A8B169460EA809F0AE +:10298000D6FC0028B4D11B208DF838008DF83A9081 +:1029900069460EA809F0CBFC0028A9D19DF80100DA +:1029A0001B2819D101E0072023E7052E09D2DFE813 +:1029B00006F0030305050300032000E0022000F0F9 +:1029C000E4F9012E0AD0A08940B10022830011460B +:1029D00010460FF0B7FF08B103200AE7002008E710 +:1029E0002DE9FC4107460D460326084610F0D5F8B0 +:1029F000002864D13846FEF709FD040005D0207890 +:102A0000222805D20820BDE8FC8143F20200FAE743 +:102A1000A07F00F0030C2DB129466046FEF783FD30 +:102A20000600F0D15D48BCF1010F05D0BCF1020FEA +:102A300017D0FFDF3046E6E7A27D2946012A02D003 +:102A4000407C800701D51120DDE729B9684600F0F8 +:102A5000F0FB0028D7D16946384606F042FB06460F +:102A6000E8E7A17D022914D1407C800611D425B16C +:102A7000A07F40070BD4002100E00121384606F07A +:102A800078FB0600D6D1A075002DD3D002E0112628 +:102A9000D0E7A5B12A4621463846FEF790FE064605 +:102AA0001128C7D1A07F4107C4D4296844F80E1F5C +:102AB0006968616040F0040020740026BAE71020C5 +:102AC000A1E770B50C460546FEF7A0FC010005D055 +:102AD00022462846BDE87040FEF74FBE43F2020092 +:102AE00070BD00B597B03F218DF800108DF8020041 +:102AF0000BA9684609F01BFC17B000BD0123FEF7C7 +:102B000088BC00231A461946FEF783BC30B597B03F +:102B100004460FF0F7FF10B1102017B030BD20466B +:102B200000F053F90028F8D11C4DA878112801D0E5 +:102B30000820F2E700F03DF920B1687CC00603D51B +:102B40001120EAE71320E8E72078800701D5E8782C +:102B500018B31D208DF800002078022200F001003B +:102B60008DF802006088ADF80400A088ADF806007A +:102B70002078C0F3400102EA500001438DF80910AB +:102B800002A8FEF7A3FD00B1FFDF0BA9684609F01C +:102B9000CEFB0028C1D11E2006E01DE0C0010020B0 +:102BA00007060504030201008DF8000001208DF8DE +:102BB000020000208DF803000BA9684609F0B7FB5E +:102BC0000028AAD1E08800F01CF90400A5D1122049 +:102BD000FEF7C0FB2046A0E707209EE7F0B597B0C0 +:102BE00015460C4607460FF0D8FF38B920460FF0BF +:102BF00089FF18B928460FF085FF10B1102017B0D3 +:102C0000F0BD9E4E707C10F0180F01D1400701D529 +:102C10001120F4E7204600F0D8F80028EFD129462B +:102C20000220FEF780FC0028E9D1B078112803D0FB +:102C3000122801D00820E2E72078C0F34001394390 +:102C400011D0800700D577B906200CF0BFF840B14D +:102C50002078800701D5F07828B1B078122804D008 +:102C600007E01220CBE70720C9E7FFF742F9002869 +:102C7000C5D100F09EF8022801D21320BFE7212021 +:102C80008DF800006088ADF80200A088ADF804005F +:102C90002078C0F340008DF806002078800716D415 +:102CA0003878420808D0012A18D043F20221022ABB +:102CB00018D0032A18D115E0C00700D002208DF8E3 +:102CC000070057F8010F0290B888ADF80C000DF11D +:102CD0000E00FEF7FBFC58B1032090E7C00705D0BB +:102CE0000320ECE7C00701D0084688E70120E6E7AB +:102CF0002888ADF810006888ADF81200A888ADF8F3 +:102D00001400E888ADF816000020ADF81800ADF802 +:102D10001A000BA9684609F00AFB00288BD1E0884D +:102D200000F06FF8040086D11320FEF713FB204655 +:102D300065E730B5054697B00C4608460FF006FF2C +:102D400008B11020E9E62846FEF760FB38B10178AB +:102D5000222902D3807F800604D40820DDE643F2D6 +:102D60000200DAE613208DF80000ADF802500BA93E +:102D7000684609F0DCFA0028E4D19DF932107F2979 +:102D800001D02170C9E60520C7E630B53B4D0400EF +:102D900008D0012C04D0022C06D0032C04D0FFDF75 +:102DA0002C7030BDFFDFFBE728780128F8D0FFDF6B +:102DB000F6E710B50DF027FE04460FF0FDF9241AD2 +:102DC000FEF7E2FA201AC0B286E4418843F6FD73AA +:102DD0000A1F9A4209D28088042806D3B0F5804F92 +:102DE00003D8884201D80020704707207047027836 +:102DF000520804D0012A02D043F202207047FEF7A5 +:102E000042BC10B548B183000022114607200FF0E4 +:102E100099FD072801D003205EE400205CE470B532 +:102E20000C0006460DD0FEF7F1FA050000D1FFDFD9 +:102E3000A68028892081288960816889A081A88945 +:102E4000E08170BD10B502F0010282703122027083 +:102E500009F06DFA002800D0FFDF3DE410B5002333 +:102E60001A4603E0845C2343521CD2B28A42F9D34F +:102E70000BB1002030E401202EE40000C00100204E +:102E80004FF0E0224FF400410020C2F880112049A9 +:102E90000870204990020860704730B51C4D044608 +:102EA0002878A04218BF002C02D0002818BFFFDFEE +:102EB0002878A04208BF30BD2C701749154A002061 +:102EC000ECB1164DDFF858C0131F012C0DD0022CA9 +:102ED0001CBFFFDF30BD086003200860CCF8005045 +:102EE0004FF400001060186030BD086002200860D8 +:102EF000CCF800504FF040701060186030BD086092 +:102F000008604FF06070106030BD00B5FFDF00BD9D +:102F10001A00002008F5014000F5004028030020B9 +:102F200014F50040094810B504680A4908480860CB +:102F30000EF0A3FA0848046010BD0849002008609C +:102F40004FF0E0210220C1F88002704710050240D6 +:102F5000010000011805024014050240FC1F00405A +:102F60000F4A12680D498A420CD118470C4A126860 +:102F70000A4B9A4206D101B50FF048FB06F0A9FFB3 +:102F8000BDE801400749096809580847064807494C +:102F9000054A064B7047000000000000BEBAFECA9A +:102FA0009C0000200400002050120020501200203D +:102FB00018B1172802D20720704717200849088047 +:102FC0000020704706480088704770B50C460546DB +:102FD00007F007FC21462846BDE8704008F002BD16 +:102FE0004600002070477047704770477047704731 +:102FF0007047704770470021016081807047010071 +:1030000018FFFFFFDBE5B15100F001009100FFFF69 +:1030100084000000A8CA2D00FE4800210160416024 +:1030200070472DE9F743044692B091460120FFF71F +:103030005EF960680FF0A8FD58B160680FF0ADFD53 +:1030400038B9607800F00300022802D10020FFF7B1 +:103050004EF94D4648460FF055FD18B1102015B0F9 +:10306000BDE8F08329460120FEF75DFA0028F6D17D +:1030700001258DF842504FF4C050ADF840000022B9 +:1030800010A9284603F039FF0028E8D18DF84250F6 +:103090004FF42850ADF8400000261C2168460796E2 +:1030A0001BF0F5F99DF81C0007AF20F00F00401C45 +:1030B00020F0F00010308DF81C0020788DF81D00F5 +:1030C00061789DF81E000DF1400861F3420040F068 +:1030D00001008DF81E009DF8000008AA40F00200D3 +:1030E0008DF800002089ADF83000ADF832606089BD +:1030F000ADF834000B9760680E900AA9CDF82880CF +:10310000684603F0F9FC0028A9D1C24CBDF82000A4 +:1031100008AA20808DF8425042F60120ADF8400008 +:103120009DF81E000AA920F00600801C20F0010076 +:103130008DF81E000220ADF83000ADF8340013A861 +:103140000E90684603F0D8FC002888D1BDF8200016 +:103150006080211D484600F032F9002887D18DF8A3 +:10316000425042F6A620ADF840001C216846079662 +:103170001BF08DF99DF81C00ADF8345020F00F00C5 +:10318000401C20F0F00010308DF81C009DF81D0050 +:1031900008AA20F0FF008DF81D009DF81E000AA966 +:1031A00020F0060040F00100801C8DF81E009DF804 +:1031B00000008DF8445040F002008DF80000CDE989 +:1031C0000A8711A80E90ADF83050684603F094FCC1 +:1031D000002899D1BDF82000E08000203FE73EB5EF +:1031E00004460820ADF8000020460FF08BFC08B123 +:1031F00010203EBD21460120FEF795F90028F8D1A8 +:103200002088ADF804006088ADF80600A088ADF80D +:103210000800E088ADF80A007E4801AB6A46808865 +:10322000002104F065F8BDF800100829E1D0032062 +:103230003EBD1FB50446002002900820ADF80800EE +:10324000CDF80CD020460FF05DFC10B1102004B07A +:1032500010BD704802AA81884FF6FF7004F02DFA65 +:103260000028F4D1BDF80810082901D00320EEE7AA +:10327000BDF800102180BDF802106180BDF8041077 +:10328000A180BDF80610E180E1E701B582B002201F +:10329000ADF800005F4802AB6A464088002104F0A8 +:1032A00027F8BDF80010022900D003200EBD1CB580 +:1032B000002100910221ADF8001001900FF046FCB2 +:1032C00008B110201CBD53486A4641884FF6FF7074 +:1032D00004F0F3F9BDF800100229F3D003201CBD5F +:1032E000FEB514460E460746FFF705F828B13046EE +:1032F0000FF008FC18B11020FEBD0F20FEBDF82C09 +:1033000001D90C20FEBD38460FF0FCFB414D18BB27 +:10331000288801A903F05FF90028F3D138788DF8E7 +:103320000500288801A903F0C5FF0028EAD1009014 +:103330009DF800009DF8051040F002008DF8000097 +:10334000090703D040F008008DF80000288869467E +:1033500003F04EFF0028D5D1ADF808402888334649 +:1033600002AA002103F0C4FFBDF80810A142C9D091 +:103370000320FEBD7CB50546002000900190088822 +:10338000ADF800000C46284601950FF0FDFB18B97A +:1033900020460FF0DBFB08B110207CBD15B1BDF855 +:1033A000000050B11B486A4601884FF6FF7004F0D8 +:1033B00084F9BDF8001021807CBD0C207CBD30B5A7 +:1033C00093B0044600200D460090142101A81BF084 +:1033D0005EF81C2108A81BF05AF89DF80000CDF8F3 +:1033E00008D020F00F00401C20F0F00010308DF8C5 +:1033F00000009DF8010020F0FF008DF801009DF80D +:10340000200040F002008DF8200001208DF84600D9 +:1034100002E000001200002042F60420ADF8440053 +:1034200011A801902088ADF83C006088ADF83E00FE +:10343000A088ADF84000E088ADF842009DF8020099 +:1034400006AA20F00600801C20F001008DF8020082 +:103450000820ADF80C00ADF810000FA8059001A9E8 +:1034600008A803F049FB002803D1BDF81800288004 +:10347000002013B030BD000010B504460FF042FB31 +:1034800008B1102010BD2078C0F30210042807D81E +:103490006078072804D3A178102901D8814201D28D +:1034A000072010BDE078410706D421794A0703D4EC +:1034B000000701D4080701D5062010BD002010BD6B +:1034C00010B513785C08C37F64F30003C3771478E6 +:1034D000A40864F34103C3771078C309887863F3C1 +:1034E0004100887013781C094B7864F347134B70C4 +:1034F0001378DB0863F3000088705078487110BDC2 +:1035000010B5C4780B7864F300030B70C4786408BA +:1035100064F341030B70C478A40864F382030B7056 +:10352000C478E40864F3C3030B700379117863F380 +:103530000001117003795B0863F341011170037995 +:103540009B0863F3820111700079C00860F3C30126 +:10355000117010BD70B514460D46064604F0DBFD33 +:1035600080B10178142221F00F01891C21F0F001B3 +:10357000A03100F8081B21461AF035FFBDE8704065 +:1035800004F0A9BD29463046BDE870401322FEF77D +:10359000F4B870B514460E46054604F0BCFD70B193 +:1035A000017821F00F01891C21F0F0012031017018 +:1035B000458021688160BDE8704004F08CBD3146D3 +:1035C0002846BDE870401322FEF7D7B810B5FE4C70 +:1035D00094F8300000280CD104F120014FF6FF725E +:1035E000A1F110000DF085F800B1FFDF012084F893 +:1035F000300010BD2DE9F047064608A8894690E83E +:1036000030041F469046142128461AF040FF00213E +:10361000CAF80010B8F1000F03D0B9F1000F03D1C0 +:1036200014E03878C00711D020680FF08FFAE8BB9B +:10363000B8F1000F07D120681230286020681430DC +:1036400068602068A8602168CAF800103878800790 +:1036500028D560680FF098FA40BBB9F1000F2DD063 +:10366000FEF743FE0168C6F8B4118188A6F8B811C8 +:10367000807986F8BA01FFF7A9FFDFF84C8308F1DB +:103680002008C5F80C80626862B196F8B40106F2B1 +:10369000B51140081032FEF745F810224146606827 +:1036A0001AF05CFE3878400712D500E003E0A0680D +:1036B0000FF04CFA50B11020BDE8F0876068002888 +:1036C000F9D0E8606068C6F8B001EBE7A06828614F +:1036D0000020F1E730B5054608780C4620F00F00D1 +:1036E000401C20F0F001103121700020607095F82E +:1036F000230030B104280FD0052811D0062814D09B +:10370000FFDF20780121B1EB101F04D295F82000D3 +:1037100000F01F00607030BD21F0F000203002E0AA +:1037200021F0F00030302070EBE721F0F000403065 +:10373000F9E710B510B190F8A94044B1A24890F84B +:10374000354000205CB108601060186010BD00F1C9 +:10375000A8040C6000F1D001F8301160F5E79A4C34 +:1037600034340C60F0E700B58BB00723CDE90212CA +:103770008DF801300191944900236431059109933A +:1037800001468DF8103068460CF08BFF002800D001 +:10379000FFDF0BB000BD30B597B00C462C251A9951 +:1037A0008DF80050ADF80200B3B118680190586868 +:1037B0000290ADF80C2010220DF10E001AF0CEFD93 +:1037C0000BA9684608F0B3FD002803D1A17F41F0A2 +:1037D0001001A17717B030BD00200190E8E72DE976 +:1037E000F0470646008A8CB080B20D468146FDF750 +:1037F0000DFE0446744F3078283FDFF8CC814FF03F +:10380000000A122873D2DFE800F072E93509367732 +:103810007E98A8F3E7E6E5E4E35BE3E3A07F00F04E +:103820000300012806D0002148460BF01CFB0500D0 +:1038300003D101E00121F7E7FFDF98F85C100906EA +:1038400002D5D8F860000BE0032105F121000EF04D +:1038500005FED5F821005D49B0FBF1F201FB120035 +:10386000C5F8210070686866B068A86620782528C9 +:1038700000D0FFDFECE0A07F00F00300012806D0BD +:10388000002148460BF0EFFA060003D101E00121C8 +:10389000F7E7FFDF7078810702D52178252904D06A +:1038A00040F0010070700CB006E70220287096F816 +:1038B0002000287106F121003136C5E90206F2E741 +:1038C000A07F00F00300012806D0002148460BF03D +:1038D000CAFA040003D101E00121F7E7FFDF6078B5 +:1038E000C10605D51320287041346C60DBE7DEE1AA +:1038F00040F008006070D6E73348082128380EF001 +:10390000ADFD032016E02A208DF8000010220DF1F5 +:10391000020071681AF022FD10220DF11200B16848 +:103920001AF01CFD284968462C3908F000FD00B14A +:10393000FFDF042028706F60B5E7E07FC00600D588 +:10394000FFDFB0680090B38806220321484605F0E7 +:103950002EFB0028A7D0FFDFA5E704B9FFDF7168C1 +:1039600021B1102204F124001AF0F8FC282120468D +:10397000FDF784FDA07F00F0030002280ED104F1C2 +:103980002400002300901A4621464846FFF703FF13 +:10399000112807D029212046FDF770FD307A84F8E0 +:1039A000200080E7A07F000700D5FFDF14F81E0F7E +:1039B00040F008002070A4F816A0C4F818A0C4F8BD +:1039C0001CA0617808460AE02002002040420F0057 +:1039D00030E068E196E08CE062E009E03FE061F30E +:1039E0008200410861F3C3006070307AE0705AE7EA +:1039F000A07F00F00300012806D0002148460BF00C +:103A000032FA040003D101E00121F7E7FFDF0221D0 +:103A100004F175000EF022FD1020287004F5DA7014 +:103A20006860B4F875002882FA486C346C61C5E9A6 +:103A3000028038E7A07F00F00300012805D00021B4 +:103A400048460BF010FA18B901E00121F8E7FFDF52 +:103A50000CB0324621464846BDE8F0477AE504B945 +:103A6000FFDF207821289CD93079012802D0022854 +:103A70000AD103E0E07F40F01000E07798F85C1096 +:103A800041F0010188F85C10324621464846FFF7B4 +:103A900061FD0CB02046BDE8F0472321FDF7EEBCE8 +:103AA000327901230321484605F090F878B11120BE +:103AB0002870327905F10800AA80031D00900321C7 +:103AC000484605F000F9002891D0FFDFEBE6A07F23 +:103AD00000F00300012806D0002148460BF0C3F98E +:103AE000040003D101E00121F7E7FFDF3079207006 +:103AF000D9E60321484605F007FC002899D1122099 +:103B00002870D0E6A07F00F00300012806D0002135 +:103B100048460BF0A8F9050003D101E00121F7E7C1 +:103B2000FFDF95F8740000F00300012878D1A07F32 +:103B300000F00307E07FC0F3400616B1012F04D068 +:103B40002BE095F89000C0072AD0D5F8AC1119B336 +:103B500095F87320087C62F387000874E27FD5F83B +:103B6000AC1162F341000874D5F8AC1166F30000A3 +:103B70000874AEB1D5F8AC01102204F124017835F7 +:103B80001AF0ECFB287E40F001002876287820F01F +:103B9000010005F8780900E016B1022F04D02CE0EE +:103BA00095F87800C00726D0D5F8A81119B395F874 +:103BB0007320087C62F387000874E27FD5F8A811AF +:103BC00062F341000874D5F8A81166F30000087488 +:103BD0008EB1D5F8A801102204F1240178351AF02D +:103BE000BDFB287840F0010005F8180B287820F07C +:103BF000010005F89009022F51D0002000EB400091 +:103C000005EBC00090F87800800709D595F86C00A6 +:103C1000D5F8B021400805F16D011032FDF782FDA5 +:103C2000052060F3070815F8740F00F0030060F337 +:103C30000F28287960F31748287F60F31F687548BC +:103C40005C38027822F00F02921C22F0F00220323F +:103C50000270427822F00702D21C4270A0F8029053 +:103C6000C0F8088004F0C1FB2078252805D0212861 +:103C700007D0FFDF2078222803D922212046FDF734 +:103C8000FDFBA07F00F0030001280AD00021484678 +:103C90000BF0FBF800283FF412AEFFDF03E6012033 +:103CA000ACE70121F3E7716881F801A0FBE5FFDFD4 +:103CB000F9E570B5574C0025103C14F85C0F20F066 +:103CC0008000207065600CF0B4FC5249A1F1100036 +:103CD00004F01DFB04F82C5C062060724D487C301B +:103CE00020615030A0611030E06170BD70B50D46AC +:103CF000FDF78CFB040000D1FFDF4FF4DE71284696 +:103D00001AF0C5FB43485430686104F1240028616F +:103D1000A07F00F00300012808D0022105F5907073 +:103D20000CF088FC002800D0FFDF70BD0121F5E712 +:103D30000A46014602F590700CF09CBC70B5054631 +:103D400040689CB0017808290DD00B2903D00C29BC +:103D500036D101218171686886883046FDF756FBAF +:103D6000040035D133E046883046FDF74FFB0400B0 +:103D700000D1FFDF2078212822D0282822D16868AE +:103D800002210C3001F0B8F9E0B168680821001D8B +:103D900001F0B2F9B0B12D208DF80000ADF802604D +:103DA000102204F1240101A81AF0D8FA0BA96846E0 +:103DB00008F0BDFA00B1FFDF29212046FDF75EFBC8 +:103DC0001CB070BD687840F008006870F8E7FFDF4D +:103DD000A07F00F00301022902D120F01000A0779B +:103DE000207821280AD06868817909B1807898B153 +:103DF000A07F00F0030002285BD0FFDFA07F00F06F +:103E000003000228DCD1FDF7F7FC0028D8D0FFDF43 +:103E1000D6E7000030020020687840F008006870A3 +:103E2000E07FC10720D0800701D5062000E00520F3 +:103E300084F823002078292818D02428DED13146A0 +:103E400006200EF01CFE22212046FDF717FBA07F66 +:103E500000F0030001282AD0002130460BF015F8AD +:103E60000028CBD0FFDFC9E70420E1E7A07F00F006 +:103E70000300012806D0002130460AF0F4FF0500B7 +:103E800003D101E00121F7E7FFDF25212046FDF7FF +:103E9000F5FA0F208DF8580016A905F590700CF072 +:103EA000E0FB0228AAD00028A8D0FFDFA6E7012166 +:103EB000D3E7687840F0080068709FE72DE9F04389 +:103EC0008BB09946154688460646FDF79FFA0400D2 +:103ED0004ED0207822284BD3232849D0E07FC0063B +:103EE00046D4A07F00F00300012806D00021304610 +:103EF0000AF0B9FF070002D00BE00121F7E7A07F2D +:103F000000F00300012804D1012130460AF0A2FF8D +:103F1000074601AB02AA03A93846FFF70AFC03983B +:103F200000B9FFDF4FB1039807F5907787612078DC +:103F3000222806D0242804D007E0039900208861B5 +:103F400003E025212046FDF799FA03980B214170E3 +:103F500046628580C0E90289029901610199416147 +:103F600004A90CF09EFB022802D0002800D0FFDF3D +:103F70000BB0BDE8F08330B587B00546FDF746FAD3 +:103F8000017822292FD9807F00F00300012806D074 +:103F9000002128460AF067FF040003D101E0012157 +:103FA000F7E7FFDF227801230321284604F00EFE05 +:103FB000002818D011208DF80400227803A8009062 +:103FC000ADF8082004AB0321284604F07CFE00B1C4 +:103FD000FFDF01A904F590700CF043FB022802D02A +:103FE000002800D0FFDF07B030BD10B586B0044612 +:103FF000FDF70CFA0178222919D9807F00F003001F +:10400000012806D0002120460AF02DFF040003D12C +:1040100001E00121F7E7FFDF12208DF8000069467B +:1040200004F590700CF01DFB002800D0FFDF06B0F7 +:1040300010BD2DE9F05F05460C460027007890463C +:1040400001093E46BB4604F1080A02297ED0072931 +:1040500002D00A2909D142E068680178082905D010 +:104060000B292CD00C292AD0FFDFC6E114271C26EF +:10407000002C6CD04088A080FDF7C8F95FEA0009E9 +:1040800000D1FFDF99F817005246400809F11801E6 +:10409000FDF748FB68688089208268684168C4F839 +:1040A00012108068C4F81600A07E20F0060040F0D0 +:1040B0000100A07699F81E0040F040014DE01A275B +:1040C0000A26002CD5D08088A080FDF79FF9050036 +:1040D00000D1FFDF51462846FFF7FCFA8DE10CB115 +:1040E000288BA080287A0E287ED006DC01287CD080 +:1040F000022808D0032804D135E0102876D01128F2 +:1041000075D0FFDF79E11E270926002CB1D0A088E9 +:10411000FDF77CF95FEA000900D1FFDF287B00F0A2 +:1041200003000128207A1BD020F001002072297B97 +:10413000890861F341002072297BC90861F382007C +:104140002072297B090961F3C30001E04AE117E10C +:10415000207299F81E0040F0800189F81E104CE191 +:1041600040F00100E2E713270D26002CAAD0A0881A +:10417000FDF74CF98146807F00F00300012806D04E +:104180000021A0880AF06FFE050003D101E00121A3 +:10419000F7E7FFDF99F81E0000F00302012A59D06B +:1041A000A86E817801F003010129217A54D021F011 +:1041B0000101217283789B0863F3410121728378A6 +:1041C000DB0863F38201217283781B0963F3C30167 +:1041D0002172037863F306112172437863F3C711E8 +:1041E000217284F809B003E05EE0A4E08CE09CE07A +:1041F000C178A172012A32D04279E17A62F30001DA +:10420000E1724279520862F34101E1724279920807 +:1042100062F38201E1724279D20862F3C301E17272 +:104220000279217B62F3000121730279520862F363 +:10423000410121730279920862F3820121730079AE +:10424000C00860F3C301217399F8000023285AD9EC +:10425000262168E0686EA4E741F00101A9E7027930 +:10426000E17A62F30001E1720279520862F34101DE +:10427000E1720279920862F38201E1720279D20856 +:1042800062F3C301E1724279217B62F30001217381 +:104290004279520862F3410121734279920862F334 +:1042A000820121734079CBE718271026002C67D0B4 +:1042B000A088FDF7ABF88246807F00F0030001285C +:1042C00007D00021A0880AF0CEFD5FEA000903D1E3 +:1042D00001E00121F6E7FFDFE868A06099F801003E +:1042E00040F0040189F8011099F80200800708D510 +:1042F000012020739AF8000023287ED927215046F8 +:1043000063E084F80CB078E015270F26C4B3A088CA +:10431000FDF77CF8814606225146E86808F06FF800 +:104320000120A073AEE048464FE0162709263CB3B3 +:10433000287B207261E0297BFE4802290CD01927D6 +:104340000E26ECB101290DD003291AD004291BD067 +:10435000052919D0FFDF23E01B270926BCB3012163 +:10436000217205E001212172617A21F0030161725D +:1043700010F85C1F4A08520062F3060101700FE05A +:104380002BE00220207207E0687B052900F00F0077 +:1043900040F0800020721BD0607A20F00300607231 +:1043A000A088FDF733F805460078212825D023287A +:1043B00000D0FFDFA87F00F00300012810D000210B +:1043C000A0880AF062FD22212846FDF757F814E084 +:1043D000607A20F00300401CE1E7A8F8006011E0DB +:1043E0000121EDE70CB16888A080287A03282BD042 +:1043F00004280AD005284BD0FFDFA8F800600CB1D4 +:10440000278066800020BDE8F09F15270F26002C2E +:10441000E3D0A088FCF7FAFF807F00F003000128BA +:1044200006D00021A0880AF01EFD050003D101E09E +:104430000121F7E7FFDFD5F821000622514607F0FA +:10444000DEFF84F80EB0D8E717270926002CC4D069 +:10445000A088FCF7DBFF8146807F00F00300012885 +:1044600006D00021A0880AF0FEFC050003D101E07F +:104470000121F7E7FFDFA878800701D5022000E0DF +:104480000120207299F800002328B6D927214AE795 +:1044900019270E26002CA0D0A088FCF7B7FF5FEAF2 +:1044A000000900D1FFDFC4F808B0A4F80CB084F80C +:1044B00008B0A07A40F00300A07299F81F1061F3D1 +:1044C0008200A07299F81F1001EA510161F3C30044 +:1044D000A072687A00F0030001288ED1607A40F063 +:1044E0000400607299F81E00E97A00F003000128C8 +:1044F00013D0607B61F300006073AA7A217B62F3C2 +:1045000000012173EA7A520862F341006073A87ACD +:10451000400860F3410121736FE7207B61F30000E5 +:104520002073AA7A617B62F300016173EA7A520810 +:1045300062F341002073A87A400860F3410161737F +:104540005BE710B57B4C30B10146102204F120002E +:1045500019F004FF012084F8300010BD10B50446A6 +:10456000FFF734F8734920461022BDE8104020318F +:1045700019F0F4BE70B56F4C06004FF0000514D072 +:104580000EF0C0FA08B110250DE00621304607F004 +:104590001DFF411C06D0206614F85C0F40F080001F +:1045A000207000E00725284670BD14F85C0F20F04D +:1045B0008000F5E7007810F00F0204D0012A05D042 +:1045C000022A0CD110E0000909D10AE000090128F3 +:1045D00007D0022805D0032803D0042801D00720E3 +:1045E00070470870002070470620704705282AD2BF +:1045F000DFE800F003070F171F00087820F0FF0026 +:104600001EE0087820F00F00401C20F0F000103071 +:1046100016E0087820F00F00401C20F0F000203059 +:104620000EE0087820F00F00401C20F0F000303041 +:1046300006E0087820F00F00401C20F0F000403029 +:10464000087000207047072070472DE9F041804630 +:1046500088B00D46002708460EF09FFAA8B94046DC +:10466000FCF7D4FE040003D02078222815D104E002 +:1046700043F2020008B0BDE8F08145B9A07F010611 +:1046800003D500F00300022801D01020F2E7A07F3C +:10469000C10601D4010702D50DB10820EAE725497A +:1046A00091F85C10C90701D01120E3E7E17FC9064A +:1046B00001D50D20DEE700F00300022805D125B169 +:1046C0002846FEF7D9FE0700D4D1A07F00F00300F2 +:1046D000012806D0002140460AF0C5FB060002D0A2 +:1046E0000CE00121F7E7A07F00F0030001280BD0C8 +:1046F000002140460AF0AEFB060007D0A07F00F084 +:104700000300022804D009E00121F2E70420B1E708 +:1047100025B12A4631462046FEF7D2FE07AB1A469F +:1047200069463046FFF705F8009800B9FFDF0C2016 +:10473000009901E020020020487006F59070C1F851 +:104740002480486100200881A07F00F00300012838 +:1047500028D0EDB302200871301D886170784009BF +:104760000877B078C0F340004877287800F001025D +:10477000887F62F301008877E27F62F382008877A6 +:10478000E27F520862F3C3008877B27862F30410C4 +:104790008877A878C87701F1210228462031FEF7F2 +:1047A000AFFE22E001200871287800F00102087EA7 +:1047B00062F3010008762A78520862F382000876D4 +:1047C0002A78920862F3C30008762A78D20800E0BB +:1047D00007E062F30410087624212046FCF74EFE21 +:1047E0000BE0032008710520087625212046FCF700 +:1047F00045FEA07F20F08000A07701A900980BF073 +:1048000050FF022801D000B1FFDF384632E72DE922 +:10481000FF4FF94A0D4699B09A4607CA14AB0027D4 +:1048200083E807001998FCF7F1FD060006D0307800 +:10483000262806D008201DB0BDE8F08F43F2020004 +:10484000F9E7B07F00F00309B9F1010F03D0B9F126 +:10485000020F07D008E03DB91B98FEF70DFE0028B7 +:10486000E9D101E01B9878BBB07F00F0030001287C +:1048700006D0002119980AF0F6FA040003D101E0ED +:104880000121F7E7FFDF852D25D007DCD5B1812D8C +:104890001BD0822D1BD0832D08D11AE0862D1CD071 +:1048A000882D1CD0892D1CD08A2D1CD00F20207162 +:1048B0000F281AD001208DF83400201D0E90207989 +:1048C000A8B158E10020F2E70FE00120EFE7022055 +:1048D000EDE70320EBE70520E9E70620E7E70820FE +:1048E000E5E70920E3E70A20E1E70720A3E7B9F1BC +:1048F000010F17D0D4E91950804602200190012001 +:104900000090A87898F80210C0F3C000C1F3C0016D +:1049100008405FEA000B5DD050460EF0F3F8002827 +:104920006CD12DE0D4E9198501200190022000907E +:10493000214630461B9AFEF7C3FD1B98007800F015 +:104940000101A87861F30100A870F17F61F3820092 +:10495000A870F17F490861F3C300A870A17861F3E2 +:104960000410A870607840092870A078C0F3400057 +:1049700068701B988078E870002068712871C0E723 +:10498000DAF80C000EF0BEF8C0BBDAF81C000EF02E +:10499000B9F898BBDAF80C00A060DAF81C00E06007 +:1049A00098F80100A17800F0010041EA4000A070F1 +:1049B00098F80210C0B2C1F30011891E0840A0701F +:1049C000002084F82000009906F1170002290BD07E +:1049D00001210AE098F80110A07801F00101FD2200 +:1049E00042EA41010840E2E7002104EB81018861CD +:1049F0000199701C022902D0012101E028E0002168 +:104A000004EB81018861A87800F00300012849D1F6 +:104A100098F8020000F00300012843D1B9F1010F1A +:104A200004D12A1D691D1B98FEF76AFD297998F8A3 +:104A3000040001408DF82C10687998F8052010408A +:104A40008DF8300001432DD050460EF05BF808B1D0 +:104A50001020F0E60AF1100004F5D47104F17C0294 +:104A60000490B9F1020F3CD00090CDE90121002162 +:104A70000BAB5A462046FEF7BDFD0028E9D104F5F0 +:104A8000D67104F19402B9F1010F30D0049800906E +:104A9000CDE9012100210CAB5A462046FEF7AAFDC4 +:104AA0000028D6D1A078800740D4A87898F80210C2 +:104AB000C0F38000C1F38001084337D0297898F80B +:104AC000000014AAB9F1010F17D032F810204B00E2 +:104AD000DA4012F0030718D0012F1ED0022F12D196 +:104AE0001DE0CDF800A0CDE901210121C0E7CDF8FE +:104AF00000A0CDE901210121CDE732F811204300CA +:104B0000DA4002F00307032F07D0BBF1000F0DD0EE +:104B1000012906D0042904D008E00227F5E701277F +:104B2000F3E7012801D0042800D10427F07F40F0EA +:104B300001006BF34100F077A07881074FF003008C +:104B40000CD5A071BBF1000F15D100BF8DF85C0032 +:104B500017AA31461998FEF71CFD0CE00221022F1E +:104B600018D0012F18D0042F22D00020A071F07F80 +:104B700020F00100F07725213046FCF77FFC0DA9DD +:104B800004F590700BF06DFD10B1022800D0FFDF2E +:104B9000002050E6A171D9E7A1710D2104F1240094 +:104BA00019F075FC607840F0020060700420CDE7D9 +:104BB0000120A071DFE72DE9F04387B091468846D8 +:104BC0000446FCF723FC070006D03878272806D0D7 +:104BD000082007B0BDE8F08343F20200F9E7B87F90 +:104BE00000F00300012809D0002120460AF03BF91B +:104BF000040006D104E0000004E801000121F4E70C +:104C0000FFDFA679012E08D0B8F1000F0FD048467B +:104C10000DF078FFB8B11020DBE7B9F1000F25D116 +:104C2000B8F1000F09D0B8F1010F1FD120E0022E1A +:104C300005D0032E05D0FFDF28E00C2526E0012556 +:104C400024E0022522E0B8F1020F03D0B8F1010FF1 +:104C50000AD00BE0032E09D100251022494604F1A9 +:104C6000210019F07BFB11E0022E01D00720B0E7F4 +:104C70000025102104F1210019F0E7FB5FEA09008B +:104C800004D0062107F0A2FBC4F82100607825219A +:104C900040F0020060703846FCF7F0FB6078C10716 +:104CA00013D020F00100607002208DF8000004F1A4 +:104CB000210002908DF804506946FF300BF0D1FCC2 +:104CC000022804D018B1FFDF01E084F82050002052 +:104CD0007FE730B587B00D460446FCF797FB88B1F7 +:104CE000807F00F0030001280FD0002120460AF049 +:104CF000BAF804000ED028460DF004FF38B1102099 +:104D000007B030BD43F20200FAE70121EEE7607818 +:104D1000400701D40820F3E7294604F1410020228E +:104D2000054619F01BFB607840F010006070010729 +:104D30000FD520F00800607013208DF80000694640 +:104D400004F5907001950BF08CFC022801D000B1A5 +:104D5000FFDF0020D4E770B592B00D460646FCF7A1 +:104D600055FB18B10178272940D103E043F2020036 +:104D700012B070BD807F00F00300012806D0002132 +:104D800030460AF070F8040003D101E00121F7E792 +:104D9000FFDFA079022829D1A078C00726D0002300 +:104DA00002220321304603F011FF08B30C208DF8D6 +:104DB00005000A9604A804F5907402220090069457 +:104DC000ADF80C2005AB0321304603F07CFF00B1A9 +:104DD000FFDF04208DF808008DF81C500BA901A8F6 +:104DE0000BF05FFC00B1FFDF0020C1E70820BFE748 +:104DF0001120BDE770B5064686B014460D4608463C +:104E00000DF080FE18B920460DF0A0FE10B1102064 +:104E100006B070BDA6F57F40FF380ED03046FCF7D7 +:104E2000F5FA38B1417822464B08811C1846FCF748 +:104E300079FC07E043F20200EAE72046FDF7C0FAFA +:104E40000028E5D11021E01D0DF008FBE21D2946E8 +:104E50006846FEF788FC102204F11700019919F04A +:104E60007DFA0020D4E72DE9F041044690B01546C4 +:104E70008846002708460DF090FE18B928460DF028 +:104E80008CFE18B1102010B0BDE8F0812046FCF770 +:104E9000BDFA060003D03078272818D102E043F28B +:104EA0000200F0E7B07F00F00300012806D00021E7 +:104EB000204609F0D8FF040003D101E00121F7E703 +:104EC000FFDF6078400702D5A078800701D4082072 +:104ED000D9E7B07F00F00300012818D0D4E9190108 +:104EE000407800B1B5B1487810B1B8F1000F11D0D9 +:104EF000C5B1EA1D02A8E168FEF735FC102205F1F4 +:104F00001700039919F0FEF930B104270AE0D4E93B +:104F10001910E5E70720B6E71022E91D04F131007A +:104F200019F01CFAB8F1000F06D0102208F10701A1 +:104F300004F1210019F012FA6078252140F00200F6 +:104F400060703046FCF79AFA6078C10715D020F0FF +:104F50000100607002208DF8200004F121000A9009 +:104F600010300B908DF8247008A9EF300BF079FB0E +:104F7000022804D018B1FFDF01E084F8207000207F +:104F800081E7F8B515460E460746FCF73FFA0400E0 +:104F900004D02078222804D00820F8BD43F2020073 +:104FA000F8BDA07F00F00300022802D043F2050004 +:104FB000F8BD30460DF0A6FD18B928460DF0A2FD4B +:104FC00008B11020F8BD00953288B31C2146384640 +:104FD000FEF7E1FB112814D00028F3D1297C4A0800 +:104FE000E17F62F30001E1772A7C62F34101E1771E +:104FF000297C890884F82010A17F21F08001A17705 +:10500000F8BDA17F0907FBD4D6F80200C4F836002A +:10501000D6F80600C4F83A003088A0861022294647 +:1050200004F1240019F09AF9287C4108E07F61F32B +:105030008200E077297C61F3C300E077287C800858 +:1050400084F82100A07F40F00800A0770020D3E77B +:1050500070B596B00D46064613B1072016B070BD68 +:10506000FCF7D4F9040007D02078222802D3A07FCF +:10507000400604D40820F1E743F20200EEE7C5B190 +:105080002D208DF80000ADF802601022294601A8FD +:1050900019F064F9287C4108E07F61F30000E077B3 +:1050A000297C61F34100E077287C800884F82000A7 +:1050B00004E02E208DF80000ADF802600BA96846D0 +:1050C00007F035F9A17F21F04001A177C6E770B55F +:1050D0000D46FCF79BF9040005D028460DF036FD7F +:1050E00020B1102070BD43F2020070BD2946204659 +:1050F000FEF7F0FA002070BD05E000BF10F8012BAC +:105100000AB100207047491E89B2F7D201207047CA +:10511000F0B50078059F1E4614460D46012800D0C4 +:10512000FFDF0C2030803A203880002C08D0287A0D +:10513000052806D0287B012800D0FFDF17206081DA +:10514000F0BDA889FBE72DE9F04786B0144691F839 +:105150000C900E9A0D46B9F1010F0BD0102100787A +:105160002E8A8846052807D0062833D0FFDF06B0F0 +:10517000BDE8F0870221F2E7E8890C2100EB40004E +:1051800001EB4000188033201080002CEFD0E8891C +:10519000608100271AE00096688808F1020301AADE +:1051A000696900F096FE06EB0800801C07EB4701DA +:1051B00086B204EB4102BDF8040090810DF10601B6 +:1051C00040460E320BF00EFB7F1CBFB26089B84226 +:1051D000E1D8CCE734201080E889B9F1010F11D073 +:1051E000122148430E301880002CC0D0E88960811D +:1051F0004846B9F1010F00D00220207300270DF1BD +:10520000040A1FE00621ECE70096688808F1020313 +:1052100001AA696900F05DFE06EB0800801C86B2F9 +:10522000B9F1010F12D007EBC70004EB4000BDF845 +:105230000410C18110220AF10201103019F08EF819 +:105240007F1CBFB26089B842DED890E707EB470108 +:1052500004EB4102BDF80400D0810AF1020140468E +:1052600010320BF0BFFAEBE72DE9F0470E4688B09D +:1052700090F800C096F80C80378AF5890C201099B8 +:1052800002F10C044FF0000ABCF1030F08D0BCF18E +:10529000040F3ED0BCF1070F7DD0FFDF08B067E7F9 +:1052A00005EB850C00EB4C00188031200880002AAB +:1052B000F4D0A8F1060000F0FF09558125E018217F +:1052C00001A819F0E4F800977088434601AA7169B3 +:1052D00000F0FFFDBDF804002080BDF80600E0806E +:1052E000BDF808002081A21C0DF10A0148460BF010 +:1052F00079FAB9F1000F00D018B184F804A0A4F82D +:1053000002A007EB080087B20A346D1EADB2D6D2F8 +:10531000C4E705EB850C00EB4C00188032200880B8 +:10532000002ABBD0A8F1050000F0FF09558137E045 +:1053300000977088434601AA716900F0CAFD9DF884 +:105340000600BDF80410E1802179420860F30001F5 +:1053500062F34101820862F38201C20862F3C30171 +:10536000020962F30411420962F34511820962F3F2 +:1053700086112171C0096071BDF8070020812246A5 +:105380000DF1090148460BF02DFA18B184F802A07E +:10539000A4F800A000E007E007EB080087B20A3499 +:1053A0006D1EADB2C4D279E7A8F1020084B205FB4C +:1053B00008F000F10E0CA3F800C035230B80002A82 +:1053C000A6D055819481009783B270880E3271699E +:1053D00000F07FFD62E72DE9F84F1E460A9D0C465E +:1053E00081462AB1607A00F58070D080E089108112 +:1053F00099F800000C274FF000084FF00E0A0D2816 +:1054000073D2DFE800F09E070E1C28303846556A3C +:1054100073737300214648460095FFF779FEBDE897 +:10542000F88F207B9146082802D0032800D0FFDFA8 +:10543000378030200AE000BFA9F80A80EFE7207B20 +:105440009146042800D0FFDF378031202880B9F151 +:10545000000FF1D1E3E7207B9146042800D0FFDF65 +:1054600037803220F2E7207B9146022800D0FFDF10 +:1054700037803320EAE7207B1746022800D0FFDF81 +:105480003420A6F800A02880002FC8D0A7F80A80F2 +:10549000C5E7207B1746042800D0FFDF3520A6F89B +:1054A00000A02880002FBAD04046A7F80A8012E05A +:1054B000207B1746052802D0062800D0FFDF1020E9 +:1054C000308036202880002FA9D0E0897881A7F885 +:1054D0000E80B9F80200B881A1E7207B9146072829 +:1054E00000D0FFDF37803720B0E72AE04FF012000E +:1054F00018804FF038001700288090D0E08978811C +:10550000A7F80E80A7F8108099F800000A2805D0A7 +:105510000B2809D00C280DD0FFDF80E7207B0C285A +:1055200000D0FFDF01200AE0207B0D2800D0FFDF44 +:10553000042004E0207B0E2800D0FFDF0520387314 +:105540006DE7FFDF6BE770B50C460546FBF75EFFC6 +:1055500020B10078222804D2082070BD43F2020056 +:1055600070BD0521284609F07EFC206008B10020AE +:1055700070BD032070BDFFB585B00746089814467E +:105580000D46022628B908A93846FFF7DCFF002897 +:1055900040D108980121801D04F0C6FDADF8080037 +:1055A00002464DB100233146384603F00FFB98B355 +:1055B0000898007880BB05E02078092820D00F28C3 +:1055C0002BD0FFDF03A8009004ABBDF808203146C4 +:1055D000384603F078FB00281CD1089802A9801DEA +:1055E000C4E90107DDE90332204604F0AAFD40B317 +:1055F000072824D2DFE800F01A182323211C1E00FC +:10560000072600233146384603F0E0FA0028D9D1B6 +:1056100043F2040009B0F0BD06E0002331463846ED +:1056200003F0D4FA0028CDD11120F3E70020F1E7F0 +:105630000820EFE743F20300ECE70720EAE7032046 +:10564000E8E703980090BDF8083004223146384658 +:1056500003F0ADFC0028DDD1002DDBD008990D70E2 +:10566000D8E710B588B01C46AAB104238DF80030E5 +:105670001388ADF80C305288ADF80E208A788DF87A +:1056800012200988ADF8101000236A462146FFF762 +:1056900072FF08B010BD1020FBE770B50D46052164 +:1056A00009F0E1FB040000D1FFDF2946A01DBDE8A1 +:1056B000704004F022BD70B596B00C460646FFF768 +:1056C000ECFF05462146304601F03AFE0121304606 +:1056D00001F054FE06F014FE002827D0002D25D13D +:1056E0003046FBF793FE050000D1FFDF95F822005E +:1056F0001B281BD9172C19D93A208DF80000ADF8BA +:10570000026095F82200211D884201D9241D00E085 +:105710000446ADF8044040F64800ADF806000BA979 +:10572000684606F004FE002800D0FFDF16B070BD0A +:105730002DE9F8430546007800260C4612287BD256 +:10574000DFE800F0896464433B6637371337373747 +:105750000937373737372879001FC0B2022801D000 +:1057600010281FD104BBFFDF1EE004B9FFDF6088F3 +:10577000052109F078FB0078032805D004280AD019 +:10578000072811D0FFDF0DE02879801FC0B2022862 +:105790000AD048B106E02879401FC0B2022803D0E1 +:1057A000102801D0072657E0607840F008006070AC +:1057B00052E0002CF8D1FFDFF6E704B9FFDF2879CB +:1057C0000128F1D16088172142E0A888052180B224 +:1057D000804609F048FB074604B1FFDF07B9FFDF49 +:1057E0004146B81D04F063FC02F095FC040008D0AB +:1057F000607840F008006070A4F8028002F06BFC52 +:105800002BE013214046FDF75CF937E0FFDF23E092 +:1058100004B9FFDF6088052109F025FB070000D1EE +:10582000FFDF6946B81D04F049FC00B1FFDFA9881D +:10583000172902D2172201E00DE00A46BDF8000048 +:10584000824201D9014602E0172900D2172160885F +:10585000FFF731FFA8E7FFDF84B1607800070DD5BF +:105860002078182220F00F00C01C20F0F0009030AB +:105870002070294604F1080018F0B5FD3046BDE857 +:10588000F88300200870881D04F005BC0A46014614 +:10589000901D04F012BC70B50546052109F0E3FA2D +:1058A000040000D1FFDF2946A01DBDE8704004F0D0 +:1058B000FEBB2DE9F74F90B04FF0000AADF830A0D5 +:1058C000ADF804A047880C4605460521384609F086 +:1058D000CAFA060000D1FFDF24B1A780A4F806A011 +:1058E000A4F808A0297A04F110003827C91E4FF047 +:1058F0000C0B4FF001084FF0120902900F297DD2D6 +:10590000DFE801F0F1F0EF7F08D2888D9F3DDBF2F8 +:10591000EDB6B6003078022800D0FFDFA8890BEB87 +:10592000C001ADF804103021ADF83010002C25D0A6 +:105930006081B5F80E8000271DE004EBC7093179BE +:1059400089F80E107188A9F80C10CDF800806888CD +:10595000042305AA296900F0BCFABDF81410A9F8BF +:10596000101008F10400BDF816107F1C1FFA80F813 +:10597000A9F81210BFB26089B842DED808E13078C9 +:10598000022800D0FFDFE9890BEBC100ADF804006D +:105990003020ADF8300095F80CB0002CABF10400CD +:1059A000C0B20F90EAD06181B5F81090002722E0D4 +:1059B000CDF8009068885B4603AA696900F089FA0F +:1059C00009EB0B001FFA80F904EBC70808F10C0281 +:1059D00004A90F980AF006FF18B188F80EA0A8F8DD +:1059E0000CA0BDF80C10A8F81010BDF80E107F1C0C +:1059F000A8F81210BFB26089B84200E0C7E0D7D85B +:105A0000C6E00CA8009001AB224629463046FFF7BD +:105A10009AFBBDE03078082805D0FFDF03E030783E +:105A2000082800D0FFDFE8891030ADF804003620E8 +:105A3000ADF83000002C3FD0A98961817188A18127 +:105A400027E03078092800D0FFDFA88900F10C0199 +:105A5000ADF804103721ADF83010002C2CD0608147 +:105A6000E8890090AB89688804F10C02296955E047 +:105A7000E8893921103080B2ADF80400ADF830105B +:105A8000002C72D0A9896181287A10280AD00221BD +:105A90002173E989E181288A0090EB896888696926 +:105AA000029A3BE00121F3E70CA8009001AB2246EB +:105AB00029463046FFF7D8FB6AE030780A2800D044 +:105AC000FFDFADF80490ADF830704CB3A989618167 +:105AD000A4F810A0A4F80EA084F80C8058E020E0F0 +:105AE00002E030E038E041E030780B2800D0FFDF02 +:105AF000288AADF830701230ADF8040084B104216A +:105B00002173A9896181E989E181298A2182688AD1 +:105B100000902B8A688804F11202696900F0D9F9B3 +:105B200036E030780C2800D0FFDFADF80490ADF8F7 +:105B3000307044B305212173A4F80AA0A4F80EA084 +:105B4000A4F810A024E00CA8009001AB224629463E +:105B50003046FFF7DDFA1BE00CA8009001AB2246AF +:105B600029463046FFF737FC12E00DE00B203B21C1 +:105B7000ADF80400ADF8301034B1A4F80680A4F8F4 +:105B800008A084F80AA003E01299088014E0FFDF5F +:105B90001299BDF80400088074B1BDF8300020806F +:105BA000BDF804006080287A032805D0102803D0AF +:105BB000112801D086F800A013B00020BDE8F08FB6 +:105BC0002DE9FC4156880F46804615460521304692 +:105BD00009F049F9040000D1FFDFA41DCDE90064FC +:105BE0002B463A464046696804F05FFCBDE8FC81FC +:105BF00070B50D46052109F036F9040000D1FFDF2C +:105C00002946A01DBDE8704004F063BA70B50D468A +:105C1000052109F028F9040000D1FFDF2946A01D65 +:105C2000BDE8704004F088BA2DE9F0438DB00D4610 +:105C30001446814607A9FFF786FC002814D14FF6C9 +:105C4000FF7601274FF420588CB103208DF8000017 +:105C50001020ADF8140008A8069008AA204605A94F +:105C60000AF0DFFD78B107200DB0BDE8F083082011 +:105C7000ADF80C508DF812708DF80000ADF80E6084 +:105C8000ADF810800CE00798A1780171218841805F +:105C90008DF81270ADF80C50ADF81080ADF80E60B4 +:105CA0006A4602214846079BFFF765FCDCE708B51A +:105CB00001228DF8022042F60202ADF800200A46C9 +:105CC00003236946FFF7CDFC08BD08B501228DF816 +:105CD000022042F60302ADF800200A46042369467A +:105CE000FFF7BFFC08BD00B587B079B102228DF87F +:105CF00000200A88ADF80C204988ADF80E1000236A +:105D00006A460521FFF737FC07B000BD1020FBE70E +:105D100009B10723A5E40720704770B588B00D4688 +:105D20001446064607A9FFF70EFC00280ED17CB1E9 +:105D30000620ADF80C508DF80000ADF80E40079B22 +:105D40006A4608215C803046FFF715FC08B070BD3C +:105D500005208DF80000ADF80C50F0E700B587B0D5 +:105D600059B107238DF80030ADF80C2004910023C1 +:105D70006A460921FFF7FFFBC6E71020C4E770B5AC +:105D800088B00C460646002507A9FFF7DCFB002873 +:105D9000DCD107980121801D04F0C6F99CB121785F +:105DA000062921D2DFE801F0200505160318801E20 +:105DB00080B2C01EE28880B20AB1A3681BB18242E1 +:105DC00003D90C20C2E71020C0E7042904D0A08822 +:105DD00050B901E00620B9E7012913D0022905D006 +:105DE00004291CD005292AD00720AFE709208DF807 +:105DF00000006088ADF80C00E088ADF80E00A068E7 +:105E0000049023E00C208DF800006088ADF80C00B1 +:105E1000E088ADF80E00A0680A25049016E00D2079 +:105E20008DF800006088ADF80C00A088ADF80E0079 +:105E3000E088ADF81000A0680B25059006E00E2064 +:105E40008DF8000060788DF80C000C256A46294614 +:105E50003046079BFFF78FFB78E700B587B00F222E +:105E60008DF80020ADF80C1000236A461946FFF7A4 +:105E700082FB49E700B587B071B102228DF800209E +:105E80000A88ADF80C204988ADF80E1000236A4648 +:105E90000621FFF770FB37E7102035E770B588B0B3 +:105EA000064601200D46ADF80C108DF800000146A5 +:105EB00000236A463046FFF75EFB040008D12946FE +:105EC000304601F02EFA0021304601F057FA204604 +:105ED0003CE7F8B51C4615460E46069F09F026F924 +:105EE0002346FF1DBCB231462A46009408F03EFD11 +:105EF000F8BD000018B18178012938D101E01020E7 +:105F00007047018842F60112881A914231D018DC9C +:105F100042F60102A1EB020091422AD00CDC41B30F +:105F2000B1F5C05F25D06FF4C050081821D0A0F59E +:105F30007060FF381BD11CE001281AD002280AD15A +:105F400017E0B0F5807F14D008DC012811D00228BA +:105F50000FD003280DD0FF2809D10AE0B0F5817FCA +:105F600007D0A0F58070033803D0012801D00020AD +:105F700070470F2070470B2826D008DC1BD2DFE8C3 +:105F800000F01C2025251A25292325271E0011286D +:105F90001CD008DC0C2817D00D281DD00F2815D0D8 +:105FA000102808D110E0822809D0842810D0852834 +:105FB00010D0872812D0032070470020704705209A +:105FC000704743F203007047072070470F20704767 +:105FD00004207047062070470C2070474FF4505043 +:105FE000704708280DD2DFE800F00406040C0C0806 +:105FF0000C0A0020704711207047072070470820C6 +:1060000070470320704738B50C46050041D06946FB +:10601000FEF7D0FA002819D19DF80010607861F3DE +:10602000020060706946681CFEF7C4FA00280DD1B2 +:106030009DF80010607861F3C5006070A978C1F325 +:106040004101012903D0022905D0072038BD21785C +:1060500021F0200102E0217841F020012170410768 +:1060600004D0A978C90861F386106070607810F0D8 +:10607000380F07D0A978090961F3C710607010F0D4 +:10608000380F02D16078400603D5207840F04000F8 +:106090002070002038BD70B50446002008801546E9 +:1060A0006068FFF7B0FF002816D12089A1898842D7 +:1060B00011D860688078C0070AD0B1F5007F0AD88F +:1060C00040F20120B1FBF0F200FB1210288007E043 +:1060D000B1F5FF7F01D90C2070BD01F201212980AB +:1060E000002070BD10B50478137864F300031370BA +:1060F0000478640864F3410313700478A40864F31B +:10610000820313700478E40864F3C3031370047803 +:10611000240964F3041313700478640964F34513C9 +:1061200013700078800960F38613137031B108781A +:10613000C10701D1800701D5012000E0002060F3F4 +:10614000C713137010BD4278530702D002F0070343 +:1061500006E012F0380F02D0C2F3C20300E00123C0 +:106160004A7863F302024A70407810F0380F02D088 +:10617000C0F3C20005E0430702D000F0070000E0D2 +:10618000012060F3C5024A7070472DE9F04796B0D0 +:106190000D00804613D0B8F1000F14D0122128460C +:1061A00018F053F906AAFF21012005F0EBFE0024A8 +:1061B000264637464FF420596FF4205A78E01020D5 +:1061C00016B0BDE8F0870720FAE700BF9DF822006F +:1061D00001280AD1BDF8200048450BD010EB0A0079 +:1061E0000AD001280CD002280CD0042C0ED0052C8B +:1061F0000FD10DE0012400E00224BDF81E6008E08C +:10620000032406E00424BDF81E7002E0052400E02B +:106210000624BDF81E1041454AD12C74D6B30DF1A9 +:1062200040094FF0000811AACDF81490CDF808806D +:10623000CDE903824FF0070ACDE900A810234246BA +:10624000FF21304605F04CFF10BBBDF840002A4648 +:10625000C0B211A90AF0C6FAD0B9AE81D7B103A96C +:106260000BAE4046CDF8088081E84102CDE900A898 +:1062700013230022FF21384605F032FF40B9BDF854 +:106280004000F11CC01EC0B22A1D0AF0ABFA10B1CA +:10629000032095E70AE0BDF82D00E881062C05D122 +:1062A0009DF82200A872BDF820002881002087E711 +:1062B00006A805F06FFE002888D0FFF75CFE7FE798 +:1062C0002DE9F8439846DDE9087614460D0081462D +:1062D00000D1FFDF0CB1012100E0002105F1080031 +:1062E00004F02CFD3080024600232146484602F08F +:1062F0006DFC40B10097328843462146484602F083 +:10630000E2FCBDE8F883072C01D01120F9E743F245 +:106310000400F6E72DE9F0438DB00E46DDE9149850 +:1063200005461C461746142106A818F0B0F80120AF +:1063300002218DF81C108DF818008DF81D80ADF825 +:10634000207064B1A178C90709D08DF82200E088D7 +:10635000ADF82600A088ADF82400A0680A9001F0EE +:10636000DAFE040023D065800BA904A8CDE9000162 +:106370000CAB002231462846FFF7A2FF002813D1BC +:10638000049808368DE871000BAA494606A80C9BB4 +:1063900005F0A5F806466078000701D501F09BFEE0 +:1063A0005EB13046FFF71DFE0DB0BDE8F08313214E +:1063B0002846FCF786FB0320F6E704980090BDF81A +:1063C0002C3004220021284602F0F1FDECE7F0B564 +:1063D0008DB000240746099406A80A94CDE904402C +:1063E0000725CDE90054079408940E4602940394BF +:1063F00010232246384605F073FE80B90BA805909D +:1064000007A90294CDE90341CDE90054BDF8183045 +:1064100000223146384605F046FC002801D0FFF73F +:10642000AAFD0DB0F0BD05F0EBBA2DE9FC4705461D +:10643000002600780C46B0460D2871D2DFE800F047 +:10644000B2070EAA30C853537188A68C970004B1C6 +:10645000FFDFA88880B201F0D2FFA4E0A888042161 +:1064600080B2814608F0FFFC074604B1FFDF07B9A0 +:10647000FFDF494607F1080004F0F9FB01F04BFE8D +:10648000040008D0607840F008006070A4F8029022 +:1064900001F021FE88E013214846FCF712FB97E04B +:1064A00004B9FFDF6088042108F0DDFC070000D19B +:1064B000FFDFE888ADF80000002038809DF800007C +:1064C000010704D5C00602D5A888388005E09DF8EC +:1064D0000100400667D5A88878806078022640F0E1 +:1064E000080060705FE0E888ADF8000004B9FFDFE5 +:1064F0009DF80100000604D52878072806D0062854 +:1065000028D0607840F0080060704CE0608804217A +:1065100008F0A9FC060000D1FFDFA888708019E010 +:1065200040E004B9FFDF6088042108F09CFC07000C +:1065300000D1FFDF07F1080005F09AFA90F0010F93 +:1065400002D1E87900062ED560880226B880D8E707 +:1065500004B9FFDF0226D4E704B9FFDF0226618811 +:106560000122204601F08FFF4FF00108C9E7A889FA +:1065700087B204B1FFDF686800902889ADF8040095 +:1065800001226946384601F099FF0CE0002CB8D191 +:10659000FFDFB6E704B9FFDF022660880021FFF7BE +:1065A00035FBAEE7FFDF9CB16078000710D5B8F18E +:1065B000000F0DD12078142220F00F00001D20F0D4 +:1065C000F00080302070294604F1080017F00BFF1E +:1065D0003046BDE8FC873EB50C0008D06B4601AAEA +:1065E000002105F0FCFD20B1FFF7C5FC3EBD1020E9 +:1065F0003EBD00202080A0709DF8050002A900F09B +:106600000700FDF7F3FF50B99DF8080020709DF8D2 +:10661000050002A9C0F3C200FDF7E8FF08B103209E +:106620003EBD9DF8080060709DF80500C109A07886 +:1066300061F30410A0709DF80510890961F3C3008F +:10664000A0709DF80410890601D5022100E0012107 +:1066500061F342009DF8001061F30000A07000207B +:106660003EBD70B5144606460D4651EA040005D0FD +:1066700075B108460CF088FA78B901E0072070BDC2 +:106680002946304605F006FE10B1BDE8704072E4C0 +:1066900054B120460CF078FA08B1102070BD2146A4 +:1066A0003046BDE8704096E7002070BD2DE9FE4FF2 +:1066B00005460C46007A0A31009104F10801029166 +:1066C000904600270C31821E3E464FF0020B4FF0E1 +:1066D000010A0191092A75D2DFE802F0F3F205748C +:1066E000252577B6F4006888042108F0BCFB060075 +:1066F00000D1FFDF308810B152270726E9E051278B +:106700001026002C7ED06888A08084F806A0A88976 +:1067100000220099FFF7A5FF002874D1A8892081E5 +:10672000288AE081F8E0B5F81290072825D1E87BA7 +:10673000000622D5512709F1140086B2002CE1D0C1 +:10674000A88900220099FFF78CFF00287AD1688879 +:10675000A08084F806B0A889208184F80EA0288A39 +:106760002082A4F81290A88A009068884B46A969F4 +:10677000DDF8042001F0C4FACEE0502709F1120040 +:1067800086B2002C3ED0A88900220299FFF769FF4B +:10679000002857D16888A080A889E080287A072837 +:1067A00011D002202073288AE081E87B4B46C00983 +:1067B0006073A4F81090A88A0090688804F112020F +:1067C000A969D7E7A7E00120ECE76888042108F071 +:1067D0004AFBB5F812A05FEA000900D1FFDF09F11A +:1067E000080005F045F990F0010F02D1E87B0006A2 +:1067F00027D50AF11400512786B2002C7FD0688873 +:10680000A08001E070E01DE0A88900220099FFF758 +:1068100028FF002816D184F806B0A889208104201A +:10682000A073288A2082A4F812A0A88A0090688801 +:106830005346A969019A01F063FAA989A9F80210DF +:106840006AE00320BDE8FE8F6888FAF7DFFD824624 +:106850006888042108F007FB8146BAF1000F00D1D7 +:10686000FFDFB9F1000F00D1FFDFB9F80400A0F598 +:106870007F41FF3902D05127142601E0502712260C +:1068800094B36888A080502F06D084F806B0287B87 +:10689000029901F045FA3FE0287BA11D01F040FA82 +:1068A00000219AF82300CDE900010B46B9F8022037 +:1068B00068884946FFF72EFD0028C3D12CE001E08F +:1068C00013E01FE0FE49A889C988814205D15427F9 +:1068D00006264CB16888A0801EE053270CE068882B +:1068E000A080A889E08017E009E06888042108F00A +:1068F000BAFA00B9FFDF55270826002CEFD1A8F817 +:1069000000600EE056270726002CF8D0A889A0804A +:106910000020A07100E0FFDFA8F800600CB1278024 +:10692000668000208EE7E64900200870704730B589 +:1069300087B00C4608F060FA0546FF2800D1FFDF5B +:106940000020208060804FF6FF70A080294604F16F +:10695000080004F073F902AA2946012005F012FB91 +:106960001AE000BF9DF80B00000715D5BDF80E001A +:106970002946FFF72CFD9DF80B00FF2340F0100087 +:106980008DF80B00BDF80B00ADF80400BDF80E004B +:106990002946019A05F04CFC02A805F0FBFA0028F4 +:1069A000E0D007B030BD0A46014602F1080004F00D +:1069B00064B970B50546042108F055FA040000D109 +:1069C000FFDF294604F10800BDE8704004F04FB92C +:1069D000F0B58FB00C460746FAF718FD060005D053 +:1069E0003078222805D208200FB0F0BD43F2020013 +:1069F000FAE70CB1A08870B101208DF81C000320CB +:106A00008DF8200000208DF8210034B1A088ADF869 +:106A10002800206803E00920E6E7ADF82800099087 +:106A200001F079FB050007D06F800421384608F09B +:106A30001AFA040007D105E013213846FCF741F8A3 +:106A40000320D1E7FFDF06A904A8CDE900010CABC4 +:106A5000002221463846FFF733FC0028C4D104F158 +:106A60000800049903908DE8A20096F8231006AA66 +:106A700007A80C9B04F033FD06466878000701D593 +:106A800001F029FB1EB13046FFF7ABFAACE70498E2 +:106A90000090BDF8183004220021384602F087FA31 +:106AA0004FF6FF71A1809FE72DE9FF4F87B0984611 +:106AB000DDE9159793467E88DDF850A03046FAF759 +:106AC000A5FC05460421304608F0CDF9044605B979 +:106AD000FFDF04B9FFDF0834CDE90464CDE9029794 +:106AE000CDE9008ADDE9070295F823105B4604F042 +:106AF00035F90BB0BDE8F08F2DE9F04F9BB004469F +:106B00004FF000086E48ADF85880ADF83080ADF811 +:106B10005480A0F80480ADF81880ADF81C80ADF862 +:106B20002480ADF82080007816460D46474601289F +:106B300008D0022806D0032804D0042802D0082058 +:106B40001BB0D7E720460BF0DDFFD0BB28460BF08B +:106B5000D9FFB0BB60680CF020F890BB606848B10A +:106B600060892189884202D8B1F5007F01D90C20C3 +:106B7000E6E780460BAA07A92846FFF78CFA00280B +:106B8000DED168688078C0F34100022808D19DF802 +:106B90001D0010F0380F03D028690BF0F5FF80B905 +:106BA00006A92069FFF72FFA0028C9D1206950B142 +:106BB000607880079DF8190000F0380002D5E8B32E +:106BC00001E011E0D0BB9DF8180080060ED59DF8BD +:106BD000190010F0380F03D060680BF0D5FF18B91A +:106BE00060680BF0DAFF08B11020A9E708A9606916 +:106BF000FFF709FA0028A3D1606940B19DF8210090 +:106C000000F0070101293BD110F0380F38D009A955 +:106C1000A069FFF7F8F9002892D19DF820008006BE +:106C20002ED49DF8240080062AD4A06950B19DF886 +:106C3000250000F00701012922D100E020E010F03A +:106C4000380F1DD0E06818B10078C8B11C2817D2E1 +:106C50000FAA611C2046FFF745FA0120B94660F3F0 +:106C60000F27BA4607468DF8520042F60300ADF8EA +:106C700050000DF13F0218A9286809F0D2FD08B1B3 +:106C800007205DE79DF8600017A9CDF80090C01CB3 +:106C9000CDE9019100F0FF0B00230BF201225146D8 +:106CA00014A805F0B4F8E8BBBDF85C000E900449E8 +:106CB0002A892869091D0092CDE901016B8901E04B +:106CC0001C030020BDF82C202868079905F09FF8C8 +:106CD00001007DD120784FF0020AC10601D4800660 +:106CE0002BD5ADF80C90606950B908A907A8FFF73B +:106CF0002AFA9DF8210020F00700401C8DF82100A1 +:106D00009DF820008DF8527040F0C8008DF82000EA +:106D100042F60210ADF850000CA903AA0023CDF8EA +:106D200000A000E021E0CDE9012140F2032214A8F7 +:106D3000089905F06CF801004AD1FE484D465B46C3 +:106D40008088ADF83D000FA8CDF80890CDE90390FC +:106D5000CDF814904FF00709CDE900950022FF21EE +:106D6000BDF85C0004F09FFF10B1FFF704F9E7E6FF +:106D70009DF83C00000625D52946012060F30F212F +:106D80008DF852704FF42450ADF85000ADF810500B +:106D900062789DF81000002362F300008DF8100067 +:106DA0006278CDF800A0520862F341008DF810001F +:106DB00004AACDE9012540F2032214A805F027F822 +:106DC000010005D1606850B3206970B906A900E0E0 +:106DD0007EE007A8FFF7B7F96078800705D49DF833 +:106DE000190020F038008DF819008DF8527042F625 +:106DF0000110ADF85000208940F20121B0FBF1F202 +:106E000001FB1202606815ABCDF80080CDE90103EB +:106E1000002314A8069904F0FAFF010058D1207845 +:106E2000C00729D0ADF80C50A06950B909A907A82E +:106E3000FFF789F99DF8250020F00700401C8DF828 +:106E400025009DF824008DF8527040F040008DF828 +:106E5000240042F60310ADF8500016A903AACDF89D +:106E600000A0CDE90121002340F2032214A80999D2 +:106E700004F0CDFF01002BD1E06868B32946012062 +:106E800060F30F218DF8527042F60410ADF85000F7 +:106E9000E068002302788DF8102040788DF811000A +:106EA000E06804AA4088ADF81200E06800798DF827 +:106EB0001400E068C088ADF81500CDF80090CDE969 +:106EC00001254FF4027214A804F0A1FF010003D0C1 +:106ED0000E9800F038FF33E696480321017056B152 +:106EE00080883080BDF854007080BDF83000B080DC +:106EF000BDF85800F080002022E670B501258AB068 +:106F000016460B46012802D0022816D104E08DF85F +:106F10000E504FF4205003E08DF80E5042F6010061 +:106F2000ADF80C0063B10024601C60F30F2404AAC8 +:106F300008A9184609F075FC20B107200AB070BDF9 +:106F40001020FBE704A99DF820207A48CDE9002114 +:106F5000801C02900023214603A802F2012204F0C3 +:106F600056FF10B1FFF707F8E8E772480EB1418805 +:106F7000318005700020E1E770B594B00446012629 +:106F80008DF83E6041F60100ADF83C0012AA0FA951 +:106F90003046FFF7B2FF002848D12078654CC00783 +:106FA0004FF0000544D01C2102A817F070FA9DF89C +:106FB00008008DF83E6040F020008DF8080042F691 +:106FC0000520ADF83C000E959DF83A00119520F093 +:106FD0000600801C8DF83A009DF838006A4620F0C3 +:106FE000FF008DF838009DF8390009A920F0FF0056 +:106FF0008DF839000420ADF82C00ADF830000EA853 +:107000000A9011A80D900FA80990ADF82E5002A873 +:10701000FFF772FD002809D1BDF80000E080BDF83F +:1070200004002081401C60812570002014B070BDD8 +:10703000E5802581BDF84800F4E72DE9F74F3D498B +:10704000A2B04FF000080A78012A04D0022A02D028 +:10705000082025B04EE54A88824201D00620F8E794 +:1070600023988A46824201D10720F2E701208DF859 +:10707000760042F6020B0024ADF874B0ADF84C0077 +:107080004FF6FF702146621C62F30F21ADF84E00EF +:10709000ADF8560007918DF87A40FF20ADF87840A2 +:1070A0001EA98DF85400149113A804F097FF002531 +:1070B0002E462F460DF128090EAB4FF6FF72072121 +:1070C00013A804F08EFF78B182285FD1A5B39EB3D8 +:1070D0009DF86600ADF86C508DF81840ADF86E6004 +:1070E0001BAC012866D06DE09DF83E002FB301284F +:1070F0005BD1BDF83C10594521D11AA8CDE90490C7 +:107100000720CDE9000402940394BDF83A0010234F +:107110000022FF2104F0E4FFC0BBBDF86800042892 +:1071200001D006284CD1BDF82810239881423CD1CB +:107130000F208EE71C0300203AE0012835D1BDF86E +:107140003C00B0F5205F03D042F6010188422CD10B +:10715000BAF80210BDF83A00814201D1012700E0DF +:10716000002705B19EB1239988421ED11AA9CDE905 +:1071700004910721CDE900140546029403941023DD +:107180000022FF2104F0ACFF00B902E02DE04646EA +:107190000BE0BDF86800022801D0102810D1C0B261 +:1071A00019AA0AA909F01EFB50B9BDF83A8083E775 +:1071B00005204EE706A919A8221D09F032FB08B1E7 +:1071C000032046E79DF818000023001DC2B28DF889 +:1071D000182024980092CDE901401DA8079904F0D9 +:1071E00016FE10B902228AF80020FEF7C4FE30E72E +:1071F00010B50B46401E88B084B206AA002118467E +:10720000FEF770FF07A906AACDE904210020072197 +:10721000CDE900100290039002460123FF21204691 +:1072200004F041FD0446BDF81C00012800D0FFDF3A +:107230002046FEF7A0FE08B010BDF0B5F84F04469A +:1072400087B038780E46032804D0042802D00820DE +:1072500007B0F0BD04AA03A92046FEF71CFF0500F5 +:10726000F6D160688078C0F3410002280AD19DF809 +:107270000D0010F0380F05D020690BF085FC08B127 +:107280001020E5E7208905AA21698DE807006389B8 +:10729000BDF810202068039904F0B9FD10B1FEF785 +:1072A0006AFED5E716B1BDF81400308004203870AE +:1072B0002846CDE738B50C00054608D000236A46BD +:1072C000FF2104F08CFF20B1FEF755FE38BD1020E1 +:1072D00038BD69462046FEF796FE0028F8D1A07812 +:1072E000FF2100F001032846009A04F0A1FFEBE71C +:1072F00030B587B0144600220DF10C0C06AD029299 +:107300008CE82C000723CDE900320A462388FF21B0 +:1073100004F0C9FCBDF818102180FEF72CFE07B060 +:1073200030BD70B50D46042107F09DFD040000D16D +:10733000FFDF294604F10800BDE8704003F0BEBC41 +:1073400070B50D46042107F08EFD040000D1FFDF6B +:10735000294604F10800BDE8704003F0D2BC70B5C6 +:107360000D46042107F07FFD040000D1FFDF294610 +:1073700004F10800BDE8704003F0E0BC70B50D46B4 +:10738000042107F070FD040000D1FFDF294604F15D +:107390000800BDE8704003F0DBBC0121FEF736BCFD +:1073A0002DE9F04196B04FF000050C008046ADF895 +:1073B00018501CD0E06828B1A068C0B10188ADF8B1 +:1073C000181005804046FAF721F8070011D03878E8 +:1073D000222861D3404607F00FFD0146A07801281E +:1073E0000AD0022808D0072016B0BDE8F08110208E +:1073F000FAE743F20200F7E7208830B1401C80B280 +:1074000007AA04F0BFFD50BB02E043F20300EBE724 +:1074100007A804F0BFFD9DF826204FF45051012A23 +:1074200009D1BDF82420A2F52453023B03D18228C0 +:1074300001D0A0B901E00846D6E7E068B0B106A9DE +:10744000CDE904010720CDE9000502950395A28846 +:107450002088BDF81830FF2104F025FC10B1FEF79C +:107460008AFDC1E7A168BDF8180008809DF81F00DB +:10747000C00602D543F20140B6E70B9818B1BDF83B +:107480002800022801D00320AEE70B98A1780078ED +:10749000012903D0800706D40820A5E7C007FBD048 +:1074A0000726022001E0012603208DF83C009DF80C +:1074B000200010F0380F00D1FFDF9DF8200059495F +:1074C000C0F3C200084497F8231010F8010C88425A +:1074D00001D90F2088E72088ADF8400004214046FC +:1074E00007F0C1FC040000D1FFDF0DA90CA8CDE915 +:1074F00000010EAB324621464046FEF7E1FE002871 +:1075000085D108340C9903948DE822010DAA072136 +:107510000FA80E9B03F0E3FF10B1FEF762FD63E7D7 +:107520000C980090BDF8343004223146404601F0FA +:107530003EFD59E770B5064615460C460846FEF76F +:10754000D9FC002805D12A4621463046BDE87040C6 +:10755000D3E470BD71E570B51E4614460D0009D028 +:1075600044B1616831B138B12D494988814203D0B5 +:10757000072070BD102070BD2068FEF7BBFC0028FE +:10758000F9D1324621462846BDE87040FFF7B4BA2B +:1075900070B515460C0006D038B121498988814262 +:1075A00003D0072070BD102070BD2068FEF7A2FC3C +:1075B0000028F9D129462046BDE870403DE670B567 +:1075C000054686B00E46144610460BF0BFFA30BB97 +:1075D00060680BF0E2FA10BBA5F57F40FF3803D0DE +:1075E0002846F9F713FFA0B1284607F005FC054629 +:1075F00030466946FEF7C9FD00280CD19DF81010F1 +:107600000F2008293FD2DFE801F008060606060F22 +:107610000F0843F2020006B070BD0320FBE743E011 +:107620001C0300200EE801009DF80210012908D17A +:10763000BDF80010B1F5C05FEDD06FF4C052D1427B +:10764000E9D09DF8061001290BD1BDF80410A1F571 +:107650002851062905D2DFE801F0030304030303E0 +:10766000D9E79DF80A1001290ED1BDF80810B1F52F +:10767000245FD0D0A1F524510239CCD00129CAD041 +:10768000022901D1C7E7FFDF606878B9002305AAA6 +:107690002946304604F0A3FD10B1FEF76CFCBAE7B2 +:1076A0009DF81400800601D41020B4E761882246BA +:1076B00030466368FFF71CFEADE72DE9F043044652 +:1076C00089B08946154610460BF040FA18B11020D3 +:1076D00009B0BDE8F083204607F08EFB4FF6FF7738 +:1076E0000646BC4201D0FF2E09D00146002307AA5E +:1076F000484604F074FD28B1FEF73DFCE8E743F28C +:107700000200E5E79DF81C00C00602D543F20140E7 +:10771000DEE7002406A8CDE904404FF00708CDE9D4 +:107720000084029403946A883B463146484604F03C +:10773000D7FC070014D168680BF008FA68B96868CC +:107740000294CDE903400594CDE900842B886A8832 +:107750003146484604F0C4FC0746BDF818002880AE +:107760003846C9E739B1FA4B0A881B899A4202D8D0 +:1077700043F20300704713E610B586B0F44C0423BF +:10778000ADF81430E38843B124898C4201D2914290 +:1077900005D943F2030006B010BD0620FBE7ADF8A3 +:1077A0001010002100910191ADF8003002218DF8F8 +:1077B000021005A9029104A90391ADF812206946AF +:1077C000FFF7EEFDE7E72DE9FC4781460F46084647 +:1077D0000BF098F988BB4846F9F718FE5FEA0008F5 +:1077E0000AD098F80000222829D30421484607F03F +:1077F0003AFB060005D103E043F20200BDE8FC8736 +:10780000FFDF06F1080003F060FA0546387801282A +:1078100003D0022804D00720F0E7A8070FD502E024 +:1078200015F0340F0BD0B8793C1DC00709D0E088A3 +:1078300038B1A0680BF066F918B11020DEE7082017 +:10784000DCE73A782088002128B3A0F20113072151 +:10785000112B18D20CD2DFE803F00B090D0B1D0B16 +:10786000121D100B0B1D1D1D1D0B1D00022A11D119 +:107870000846C3E7012AFBD00CE0EA0600E0AA06AE +:10788000002AF5DA06E0A0F5C0721F2A02D97D3A77 +:10789000022AEDD8C1B298F82300CDE90001728820 +:1078A000234631464846FEF735FDA7E72DE9FF4F51 +:1078B0008DB01E4615460C464FF000080F460D9839 +:1078C000F9F7A4FD30B10078222806D2082011B0C3 +:1078D000BDE8F08F43F20200F9E7B00801D00720BD +:1078E000F5E7032E00D100260D9807F085FA4FF634 +:1078F000FF7A0690CCB1022D74D320460BF04DF9DF +:1079000030B904EB0509A9F101000BF046F908B103 +:107910001020DCE7AD1EAAB22146504604F080FDDF +:1079200039F8021C88425DD1ADB28948B10702D551 +:107930000189491C00E001211FFA81F9F10701D0FA +:10794000068900E0564607AA4846069904F01AFB45 +:107950004FF0070B4FF0000A0BE07888102841D851 +:1079600008F1040108441FFA80F8A8453AD804EB4E +:1079700008077FB339884945EFD353E09DF81F10BE +:107980000A074FD544B304EB080708F104027B88CB +:107990001FFA82F8102B25D803EB0802AA4221D83F +:1079A0003A8890421ED1C8061ED50DF10C090CAACA +:1079B00004EB08015046CDF808A089E80700CDE99E +:1079C00000BA38880022069904F06DF928B1FEF754 +:1079D000D2FA7CE726E005E00CE07888BDF83010AC +:1079E000884201D00B2072E7798801EB08001FFA6A +:1079F00080F806E0C90604D50699FEF7E8FC0028E1 +:107A000087D19DF81F00FF2320F010008DF81F0084 +:107A1000BDF81F00ADF80000BDF82200009A0699DD +:107A200004F006FC07A804F0B5FA18B9BDF8220066 +:107A3000B042A3D904210D9807F015FA040000D133 +:107A4000FFDF22885AB1CDE900BA5546002321460E +:107A50000D98FEF75FFC0028BBD1258037E700209A +:107A600035E72DE9F04F8DB01E4617000D464FF05B +:107A700000041BD0B10802D007200DB028E7032E68 +:107A800000D1002607F0B8F98046FF2805D07DB167 +:107A900028460BF079F848B902E043F20200ECE71F +:107AA0003988681E08440BF06FF808B11020E4E72D +:107AB0002749B00701D5488900E00120F2074FF6B9 +:107AC000FF7902D04989491E00E049468EB207AAD3 +:107AD000414604F057FA4FF0000B4FF0070A3EE022 +:107AE0009DF81F0000073AD506A9CDE904B1CDF8ED +:107AF00008B0CDF80CB04B4600224146CDE900ABB2 +:107B0000604604F0EDFA08BB25B3BDF818103A88BA +:107B100021442819091D8A4234D3BDF8222020F8B7 +:107B2000022BBDF8182020F8022B06AA0592CDF8EA +:107B300008B0CDE903B0CDE900ABBDF82200BDF837 +:107B400018300022414604F0CBFA18B1032094E724 +:107B50001C030020BDF818002044001D84B207A8B3 +:107B600004F018FA20B1822806D0FEF704FA84E760 +:107B7000BDF822C0B445B3D934B175B13988A01C61 +:107B8000814203D20C2078E7052076E72246294679 +:107B9000484604F045FC29190880A41C3C800020BC +:107BA0006BE710B504460AF0D1FF08B1102010BDF4 +:107BB0006A4840892080002010BD2DE9F041A4B022 +:107BC0000C4606464FF00008142105A816F05FFC8D +:107BD00001208DF818008DF8140000278DF8197019 +:107BE000ADF81C403046F9F711FC30B1007822287E +:107BF00006D2082024B0BDE8F08143F20200F9E784 +:107C00000421304607F02FF9050000D1FFDF0AA953 +:107C100004A8CDE9000116AB002229463046FEF744 +:107C20004FFB0028E6D104980835CDE90007CDE9DF +:107C300002650AAA072105A8169B03F050FC10B1A3 +:107C4000FEF7CFF9D6E704980090BDF8283004225B +:107C50004146304601F0ABF900B1FFDF2146304626 +:107C6000FDF7C6FF17A9284603F01EF800B1FFDF95 +:107C7000BDF85C00172801D2172100E00146A1429F +:107C800004D8172801D2172400E0044621463046C4 +:107C9000FFF756FB054621463046FDF7FEFC414600 +:107CA000304601F031FB00B9FFDF04F029FB28B3B7 +:107CB00025BB3046F9F7AAFB050000D1FFDF95F898 +:107CC00022001B281AD9172C18D93A208DF82C001D +:107CD000ADF82E6095F82200211D884201D9241D9F +:107CE00000E00446ADF8304040F64800ADF8320000 +:107CF00018A90BA804F01BFB00B1FFDF002079E7F7 +:107D0000F8B51C4615460E46069F07F00FFA2346A7 +:107D1000FF1DBCB231462A46009406F027FEF8BD8E +:107D200070B50C4605460E21204616F08EFB00204D +:107D300020802DB1012D01D0FFDF70BD062000E0B5 +:107D40000520A07170BD10B50C4604F0E8F800B134 +:107D5000FFDF2046BDE81040FEF70DB91C030020F0 +:107D600010B50446007896B0022805D0012803D04B +:107D700043F2050016B010BDA17889290AD06078B9 +:107D8000892807D021B1032902D808B1032801D9D5 +:107D90000720EFE74E208DF800002078022801D060 +:107DA000012000E000208DF80200607800F0DBFD8B +:107DB000C01D8DF80300A078012815D000F0D3FD78 +:107DC00010F101008DF80400607800F0CCFD8DF812 +:107DD0000500A07800F0C7FD8DF806009DF805208D +:107DE0000621102A04D005E0022000F0BCFDE9E7DE +:107DF0008DF80510102801D18DF806102078012883 +:107E000004D19DF80300401C8DF80300FBF7DAF85D +:107E1000001DADF808000BA9684604F088FA00B10F +:107E2000FFDF0020A6E72DE9FF4F91B09B461546E6 +:107E30000600FE49D1E900010396CDE90C01507A14 +:107E4000117A0844C7B222D05FF000044FF0000955 +:107E5000CDF81C900520ADF81C001F20ADF81E00C9 +:107E6000F3A00690CDF81490F01D8DF814904FF00B +:107E7000010A20F007008DF815A0B04200D0FFDF06 +:107E800028880399401C1FFA80F814B107E00124E8 +:107E9000DCE708F0FF0008F04BFC00B1FFDF0399BE +:107EA0003A4601EB0810C01C20F00301D5F81880F9 +:107EB00003913CB981F800901FFA88F003F0BAFEF4 +:107EC00000B1FFDF0399234601EB08000390A87A75 +:107ED000297A3A460844C1B203A800F092FD0398FB +:107EE000C01C20F003000390697A00912B7AAA7AD3 +:107EF00004B1002002A906F092FE00B1FFDFBDF838 +:107F0000081003980DF1780808443A4698E88A006A +:107F1000C01C20F00300CDE90270CDE9001304B1CC +:107F200000205B4608A907F005F800B1FFDF0899BB +:107F300003980844C01D20F0070003901299821B8B +:107F4000002C0A603CD1BD4ABB491160111D401E86 +:107F5000086001232C220EA9B94806F0E1FD00F0CB +:107F600010FD00211E22084602F08EF8FAF7C9F92A +:107F700000F079FF04F0BCF9FEF7D5FCE8680CAA24 +:107F8000214620B1FBF74DF830B1FFDF04E005A832 +:107F9000FBF747F800B1FFDF05F11400FEF7ECFF37 +:107FA00000B1FFDF4FF49671A64816F070FAA548AD +:107FB000022180F829A180F82A11062180F82B11CE +:107FC00015B0BDE8F08F10B59E4CA078092800D3FD +:107FD000FFDF207804EB401010F8041F21F0FF01B0 +:107FE0000170417821F00701C91C21F0180141708E +:107FF0000121E17010BD2DE9F04105460C46002736 +:108000000078052190463E46B1EB101F00D0FFDFFF +:10801000287A58B1012810D0FFDF00BFA8F800600F +:108020000CB1278066800020BDE8F0810227092678 +:108030007CB1A889A080A87B09E00327142644B15D +:108040006888A0802869E060A88A2082287B207246 +:10805000E4E7A8F80060E6E700B597B051218DF895 +:10806000001000780BA900F001008DF802006846AE +:1080700004F05DF917B000BD00B5017897B001F0CC +:1080800001018DF80210417801F001018DF8031013 +:108090000178C1F340018DF804104178C1F340012B +:1080A0008DF80510017889088DF806104178890847 +:1080B0008DF8071081788DF80810C1788DF80910B7 +:1080C00000798DF80A004B208DF800000BA9684656 +:1080D00004F02DF9CEE770B55A4CE078002819D09D +:1080E0002078002504EB4010407900F007000119CA +:1080F00091F82801401E81F828012078401CC0B268 +:108100002070092800D12570A078401CA0700AF0CA +:1081100094F8E57070BD4B4890F82B01002800D012 +:1081200051E770472DE9F043464D9BB05FF00006E4 +:10813000D5F8240168B1FFF7EEFF002874D02022A3 +:10814000D5F8241116F04FF9FFF7C5FFC5F82461E3 +:10815000EEE795F82901002866D0FFF734FF0446C2 +:10816000374806F00EFD606000B9FFDF606804F07C +:108170002BF988B12046F9F7BAFB6078010706D5DC +:1081800020F00700401C6070FFF7A5FFD0E72C48E7 +:10819000616806F0FFFCCBE72948616806F0FAFC4D +:1081A00001A800F0BBFC00286DD10321BDF804003C +:1081B00006F059FE8046BDF8040006F0B7FF0746FA +:1081C000B8F1000F00D1FFDFD8F8040010B100783B +:1081D000FF2858D0FFF7F7FE0446384606F069FB43 +:1081E000606000B9FFDF606800F104090671BDF846 +:1081F00004006080204600F02EFF384606F029FC7F +:1082000000B9FFDF47208DF81000BDF80400ADF87D +:10821000120004A805F0B4FF10A804F038FB607841 +:10822000010713D4C0060FE02DE0000014E80100A0 +:108230006E52463578000000000000200006024023 +:10824000840500205804002006D408E020F0070030 +:10825000801C6070FFF73FFFC8F8049068E7D8F80B +:10826000040038B10178491C11F0FF0101708DD173 +:10827000FFDF5DE700221146384600F072FB002860 +:1082800084D1FFDF54E71BB0BDE8F08310B5FE4C8E +:10829000A0600868E060AFF2731001F080FE6070CB +:1082A00010BDF94900200870704730B505464FF001 +:1082B00080500C46D0F8A41097B0491C05D1D0F8D6 +:1082C000A810C9430904090C08D050F8A01F01F0F8 +:1082D000010129704168216080680EE02B208DF833 +:1082E00000000BA9684604F022F800B1FFDF01206E +:1082F00028700C982060BDF83400A08028780028F1 +:1083000003D0607940F0C000607117B030BDF0B5A7 +:108310004FF080540746D4F8800097B00D462B26C6 +:10832000401C0BD1D4F88400401C07D1D4F888003D +:10833000401C03D1D4F88C00401C0BD0D4F8800032 +:108340003860D4F884007860D4F88800B860D4F835 +:108350008C0016E08DF82C6069460BA803F0E7FF4F +:1083600000B1FFDF01983860029878608DF82C60CA +:1083700069460BA803F0DBFF00B1FFDF0198B8608E +:108380000298F860D4F89000401C0BD1D4F8940007 +:10839000401C07D1D4F89800401C03D1D4F89C00AD +:1083A000401C08D054F8900F286060686860A0688E +:1083B000A860E06816E08DF800600BA9684603F03D +:1083C000B6FF00B1FFDF0C9828600D9868608DF84B +:1083D00000600BA9684603F0AAFF00B1FFDF0C980C +:1083E000A8600D98E86017B0F0BD30B5A74C054601 +:1083F000D4F8240100B1FFDFC4F8245130BD3EB5EC +:108400000546032106F02FFD0446284606F08EFEA1 +:10841000054604B9FFDF606818B10078FF2800D175 +:10842000FFDF01AA6946284600F09BFA60B9FFDF2A +:108430000AE0002202A9284600F093FA00B9FFDF03 +:108440009DF8080000B1FFDF9DF80000411E8DF887 +:108450000010EED260680199884201D1002060606E +:108460008A4C94F82A01022800D3FFDF94F82A01ED +:10847000401CC0B284F82A01012803D18248407808 +:1084800001F0ACFD3EBD70B50446A1F57F40164637 +:108490000D46FF3800D1FFDF012E01D0FFDF70BD98 +:1084A000207820F00F00401D20F0F00050302070A8 +:1084B00000202072A5810120A07370BD70B5154603 +:1084C0000C460646FFF727FE90B1017821F00F0118 +:1084D000491D21F0F00150310170468001210172E7 +:1084E00021680161A18881820573BDE87040F2E5D1 +:1084F0003046BDE870401321FAF7E3BA70B505467F +:108500000C4608460AF022FB08B1102070BD284630 +:10851000F8F77CFF28B1284600F0E7FE2070002025 +:1085200070BD43F2020070BD2DE9F04F044656487D +:10853000894687B0017811B1082007B041E552485B +:108540005349416020460AF001FB002875D1484696 +:108550000AF0FCFA002870D1637A217A5818FF28B3 +:108560007DD82088FE287AD800B90A202080A0690A +:1085700008B94FF4B060A0616068A0B14578827816 +:1085800005EB45052A440578067905EB450502EB20 +:1085900045024579C07805EB450505EB8605C0EB3E +:1085A000C000284409E003EB430001EB410200EB6B +:1085B0004202C1EBC10505EB830086B2C3EBC300E9 +:1085C0001044C1EBC1021044084487B2208AFAF774 +:1085D000EFFC0028B1D1FAF7F5FC001D78430590B7 +:1085E000FAF7F0FC001D00FB06F8E168A06900F056 +:1085F00041FA5FEA000AA0D1A17A607A81422ED8BE +:108600004FF0120B08280ED8207A01280BD808F05A +:10861000FAF9054609F0D0FD2A1A217A607A521E2D +:108620000B189A4201DA584687E765688B46009036 +:10863000BDB128460AF0B1FA08B110207DE7A9784B +:10864000687808442978421800985844904206D126 +:108650006A7929791144EA781144884201D00720C7 +:108660006BE7CDF80080CDE90176224603A9002012 +:10867000059BFFF7D8FB044D039AD9F800306868D2 +:108680001118994209D805E01C0000205804002068 +:1086900048130020B2F5803F03D30420C9F800102E +:1086A0004BE7CDF80080CDE90176224604A9059B71 +:1086B000FFF7B9FBDDE90301884200D0FFDF049832 +:1086C000696808446860C9F80000FF490120287003 +:1086D0000870504631E72DE9F04707460C4608463A +:1086E0000AF034FA40B938460AF04EFA20B9F81CBC +:1086F00020F00300B84202D01020BDE8F087F34814 +:108700004FF00008817889B14178824600EB41152D +:10871000B4F8009015F8040F234600F00F00002273 +:10872000294600F037FA060004D013E0A4F80080D0 +:108730000520E2E797B12188494501D90C260DE0D3 +:108740002878234600F00F003A46294600F022FA26 +:10875000060005D00C2E01D0A4F800803046CCE7EE +:108760009AF801005446401CC0B28AF8010009285A +:1087700001D184F80180A078401EA070687800F0D4 +:10878000070101290BD0022903D0032918D0FFDFEC +:10879000E4E7C006E2D46888FFF731FEDEE7CC48A4 +:1087A000696806F0F7F994F82901401CC0B284F812 +:1087B00029010128D2D1C748407801F00FFCCDE74C +:1087C00094F82B01401C8AF82B01C7E770B50D46C1 +:1087D00004460AF097F918B928460AF0B7F908B123 +:1087E000102070BD29462046BDE8704007F0D7BF75 +:1087F00070B5044615460E4608460AF083F918B9C6 +:1088000028460AF0A3F908B1102070BD022C03D04D +:10881000102C01D0092070BD2A463146204607F0B1 +:10882000E1FF0028F7D0052070BD70B514460D4655 +:1088300006460AF067F938B928460AF087F918B9E8 +:1088400020460AF0A1F908B1102070BD2246294641 +:10885000304607F0E6FF0028F7D0072070BD10B5BE +:1088600096B004460AF072F910B1102016B010BD8F +:108870000F208DF800000BA9684603F058FD002872 +:10888000F4D19DF834002070BDF836006080BDF84A +:108890003800A0800020E9E770B505460C46084680 +:1088A0000AF072F920B93CB120680AF04FF908B11A +:1088B000102070BDA08828B121462846BDE8704030 +:1088C000FEF786B8092070BD70B504460D4608460F +:1088D0000AF018F930B9601E1E2814D828460AF08C +:1088E00011F908B1102070BD032C01D9072070BD0B +:1088F00004B9FFDF784800EB840050F8041C2846D8 +:10890000BDE870400847A4F120001F28EED8294692 +:108910002046BDE87040F9F7FEBB70B504460D4631 +:1089200008460AF013F930B9601E1E280FD82846F1 +:108930000AF0E8F808B1102070BD012C03D0022C19 +:1089400001D0032C01D1062070BD072070BDA4F119 +:1089500020001F28F9D829462046BDE87040F9F7C5 +:1089600086BC05F042BE892805D0032805D0022820 +:1089700005D0012070471020704706207047032063 +:10898000704710B596B003F0C3FC52484178806838 +:1089900003F0BCFE4F4801240C300178012916D1A8 +:1089A0003E218DF80010C0788DF8020010B101282A +:1089B00003D005E08DF8024002E000208DF80200AF +:1089C000684605F0DDFB10B10BA803F060FF022044 +:1089D0008DF82C008DF82D008DF82E000BA8FFF7D8 +:1089E000BFF900B1FFDF8DF82C4003208DF82D007A +:1089F0008DF82E000BA8FFF7B3F9002800D0FFDF99 +:108A000034E72DE9F0410646022012B101EB4200A5 +:108A1000401DC7B23068C01C20F0030232601BBB8F +:108A20002A483B460921243809F05DFF002408E06C +:108A3000092C11D2DFE804F005070509090B0B0525 +:108A40000500264804E0264802E0264800E02648C3 +:108A500009F068FF054600E0FFDFA54200D0FFDF18 +:108A6000641CE4B2092CE3D3306800EB07103060DB +:108A7000BDE8F08138B50C00054604D008460AF080 +:108A800041F800BB02E0F62844D345E060680AF0F4 +:108A900039F8C0B9607800F00300012803D002283B +:108AA00001D0072038BD69462046FBF783FD00282A +:108AB000F8D1607800F0030002281CD19DF8000076 +:108AC000C8B1606812E014E00800002058040020DB +:108AD000840500201C00002034E801006B1F00000A +:108AE000058F0000CB2F0000E50401000AF04CF8D0 +:108AF00008B1102038BD6089F8280BD8218981423F +:108B000008D8617801F00301012905D1D73080B27E +:108B1000A84201D9092038BD002038BD2DE9F04315 +:108B200097B0814646208DF82C0069460BA803F0CB +:108B3000FEFB00B1FFDF43F2040600246D46DFF8C0 +:108B400084801FE02F19B87DC10706D0400704D4E8 +:108B500005EB4400C08800F0B9FB98F82A0178B111 +:108B6000B87D80070CD505EB4400C08800F037FACB +:108B700030B105EB44000026C188A9F8001005E0DB +:108B8000641CE4B29DF80400A042DBD817B0304664 +:108B9000BDE8F0832DE9F041044600201880601EF6 +:108BA0001D4616460F46052800D3FFDF06482A4615 +:108BB00000EB8400314650F8043C3846BDE8F041F3 +:108BC00018470000580400201CE801002DE9F04778 +:108BD0008A46984615460646032106F044F904469F +:108BE000304606F0B5FA0C35AFB2002581462E4668 +:108BF00004B9FFDFB9F1000F00D1FFDF04EB8A00F9 +:108C00000189B94200D30125218CB94202D2BAF1BF +:108C1000060F00D3012638EA050104D0817A41F01D +:108C2000020181720BE038EA060108D0817A41F036 +:108C30000401817214F8220F40F00400207005EA4C +:108C40000600BDE8F0872DE9F0478246DDE90846D9 +:108C5000174604F10C0099460D461FFA80F80023D0 +:108C6000224639465046FFF7B1FF60B1A8780006AA +:108C70001BD426F8044C26F8029C504606F068FAED +:108C8000060008D106E0072F01D01120D9E743F2F2 +:108C90000400D6E7FFDF241D3046A1B205F0A4FB97 +:108CA00000B9FFDF504603F095FC05EB8700062F67 +:108CB0000289A2EB0801018103D2298CA1EB0800F3 +:108CC00028840020BDE72DE9F8431D4617460E46CF +:108CD000DDF8208006F03CFA040019D03F1DB9B23F +:108CE00005F032FB2860B0B1067120466A4629685B +:108CF00005F0EEFD009800210A460180817003F026 +:108D000029FD0098C01DC8F800000020BDE8F883C8 +:108D100043F20200FAE7072E01D01120F6E743F2F2 +:108D20000400F3E72DE9F04F0F46054687B01646DD +:108D30005088032106F097F8040000D1FFDF4FF0C0 +:108D400000098DF80890A078400600D1FFDF042FBD +:108D500053D3297841F30000401C06D162786B7828 +:108D60009A424AD12278120747D04FF0010B4FF0B8 +:108D70000208142939DA4FF6FF7A012933D0122973 +:108D800002D0132931D11CE00C2F2ED1A17801F093 +:108D90007F01012929D0207820F00F00401C20708D +:108DA000687860708DF808B0A888ADF80A00E88887 +:108DB000ADF80C002889ADF80E006889ADF81000F8 +:108DC00016E0062F11D1207820F00F002070718856 +:108DD000012009F054FE8DF80880ADF80AA0A8889B +:108DE000ADF80C0004E0062F0AD09DF80810B9B1C8 +:108DF0007088324602A9F9F72AF907B0BDE8F08F6A +:108E0000207820F00F0020707188012009F037FED3 +:108E10008DF80880A888ADF80A00ADF80CA0E7E747 +:108E20000028EAD0768805A8009006AB0622042127 +:108E30003046FFF748FF00B1FFDF05980523042205 +:108E400080F800B069784170A0F80280A0F8049022 +:108E50000621CDE9001021463046FFF7F4FE002838 +:108E6000CBD0FFDFC9E710B5FAF7ACF80021FF4B14 +:108E70000A4600BF23F81120491C0829FAD3FB4AEF +:108E800000F10C01103240001180518018309080A8 +:108E90004D20D08011815181C1EBC100908110BD66 +:108EA00070B50C46897821F0FF01A170217821F07E +:108EB0000F012170012161700021616006F048F905 +:108EC000050000D1FFDF284605F03CFAE7491031E4 +:108ED0008989401A20852046BDE8704000F014BB07 +:108EE00070B50D46032105F0BEFF040000D1FFDF81 +:108EF000A07865F30600A07070BD704701460120A0 +:108F000009F0BDBD3EB58DB20321284605F0ABFF8B +:108F1000040000D1FFDF2078002220F00F00207035 +:108F200002208DF800004FF6FF70ADF80200ADF89A +:108F3000040069462846F9F78AF83EBD2DE9F84F46 +:108F400005460C4600270078012192463E46B1EBCB +:108F5000101F00D0FFDF287A032809D0FFDF00BFF1 +:108F6000AAF800600CB1278066800020BDE8F88F69 +:108F7000B5F80C80702708F10A0086B2A4B16888A1 +:108F8000A08068892081A4F806806888D5F80490BC +:108F900004F10A0506F0CAF82A4607254946434661 +:108FA000009505F0E3FCDBE7AAF80060DDE72DE9BA +:108FB000FC410F461C46164680460321089D05F0DD +:108FC00052FF010008D033463A464046CDE90045FD +:108FD000FFF739FEBDE8FC8143F20200FAE7F8B57D +:108FE0000646A0F57F40FF3816D0304606F09EF8C2 +:108FF000040000D1FFDF204605F05BFC050000D136 +:10900000FFDF204629466A4605F062FC009CB4F862 +:109010000500E41C052801D00120F8BD03213046DD +:1090200005F021FF050000D1FFDF2079122807D1CC +:1090300020880C2804D1A87800F07F00022806D0F0 +:109040000023062204213046FFF7C0FDF8BD0023AF +:1090500006220521F7E7F8B50446408806F066F8D1 +:10906000050000D1FFDF6A462846616800F0CCF9B0 +:1090700002460098121F30F8031F458891421DD107 +:10908000042D1CD0052D27D0062D1DD0402D15D325 +:109090000E46284600F0D4F908280FD0207820F09A +:1090A0000F00401C20F0F0001030207003202072D0 +:1090B0006581A681607840F008006070F8BD2246A6 +:1090C000001D00F0C9F9F8BD636864880A46011DF7 +:1090D0002046FAF7F3FEF8BD2246001DFFF722FEF8 +:1090E000F8BD7FB50D460646032105F0BCFE040021 +:1090F0003AD0207800F00F00012838D002A8009064 +:1091000003AB0C2205213046FFF7DDFD002829D1F5 +:10911000029812210523017061781A46891C41705A +:1091200008214180298881806988C180A9880181BE +:10913000E98841810C21CDE9001021463046FFF736 +:1091400082FD00B1FFDFF02300223146012009F04B +:10915000F9FB207820F00F00401C20706078801C04 +:109160006070002004B070BD43F20200FAE71120E5 +:10917000F8E77FB50D460646032105F074FE0400AE +:1091800006D0207800F00F00012804D00820E9E77D +:1091900043F20200E6E702A8009003AB0622052195 +:1091A0003046FFF790FD0028DCD1029813210523FB +:1091B0000170617841700221418085800621CDE9EE +:1091C00000101A4621463046FFF73DFD00B1FFDF93 +:1091D000207820F00F0020700020C3E72DE9F84F21 +:1091E0000F468346032105F03EFE0546584605F02E +:1091F000AFFF80464FF0000A05B9FFDFB8F1000F5E +:1092000058D1FFDF56E040466946002205F0EDF9EF +:109210009DF800408146082C00D3FFDF05EB840653 +:1092200009F108003189062C0144318102D2298CD0 +:1092300008442884072C03D10AF1010000F0FF0A3A +:10924000B07AC0070DD02146284600F0DFF840B9BB +:10925000B07A20F00100B072584684B3032C2FD0AE +:10926000FFDFB07A81070AD502E00000B4050020D4 +:1092700020F00200B0722146584600F0D8F8062CC3 +:1092800018D895F82200410714D520F0040085F87D +:109290002200002405EB8400817A4A0706D521F0DC +:1092A000040181722146584600F0C1F8641CE4B202 +:1092B000062CEFD37F1EFFB2A5D2504656E602E041 +:1092C000FAF793FECDE7FEF768F8CAE710B5032179 +:1092D00005F0C9FD040000D1FFDF204600F014F9BD +:1092E000A07840F08000A07010BD10B5032105F0FB +:1092F000BAFD040000D1FFDFF9F764FE218D0C30C8 +:10930000B1FBF0F0C0B210BD70B50D46032105F001 +:10931000AAFD040000D1FFDF062D00D9FFDF29469A +:10932000204600F073F8002805D004EB85018A7A06 +:1093300042F001028A7270BD10B50446402801D285 +:10934000072010BD00F07CF8082802D04FF44450EC +:1093500010BD0021774802E0491C082903D230F8EB +:109360001120002AF8D1082903D020F8114000204C +:1093700010BD042010BD10B5402801D2072010BD3B +:1093800000F05EF8082805D06A4A002122F8101083 +:10939000084610BD052010BD2DE9FE4315460C0002 +:1093A000804606D02DB16088402804D20720BDE851 +:1093B000FE831020FBE7218811B300F041F8082854 +:1093C00020D002A80090228801AB07214046FFF779 +:1093D0007AFC0028EBD140462788019E05F0B8FEB4 +:1093E0002A46072531463B46009505F0F8FA0298D3 +:1093F00000902388628807214046FFF7D8FDD6E712 +:109400000C20D4E70520D2E705F062BA072904D082 +:10941000484A103232F8112000E0028D00EB810042 +:109420000089904201D2012070470020704710B59A +:10943000032901D0FFDF10BDBDE81040FAF79BBD46 +:10944000014600203B4A02E0401C082803D232F8C3 +:1094500010308B42F8D17047F0B50F4606460146F2 +:1094600087B014463846FCF7ABFBC0B2082842D19F +:109470000020ADF8100003906088032105F0F3FC94 +:10948000050000D1FFDF00212846FFF7BFFF78B9B4 +:1094900060880021FDF763FFADF81000024603A8C5 +:1094A0000090608805AB0021FFF70DFC00B1FFDFE5 +:1094B00003980599CDE90010029404AB3246384672 +:1094C0006168FDF7F1FAC0B205281BD2DFE800F0B1 +:1094D000031A13151300BDF8100000280BD00399D0 +:1094E0000423CDE90001608800222946FFF7ABFB89 +:1094F000002800D0FFDF07B0F0BD607840F010001A +:109500006070F8E7FFDFF6E710B504462021083069 +:1095100014F0BDFF0748002110F1100004EB810397 +:1095200030F81120491C1A810629F7D9208DA08412 +:1095300010BD0000B405002030B44FF0E02001233E +:109540004FF4006C0021C0F880C11D02C0F88051AA +:109550001C06C0F88041E84A82F80014D21E82F846 +:109560000014E64A82F80014E54A53609360C2F89A +:109570004011C2F84411C2F84811C0F880C2C0F8C6 +:109580008052C0F88042C0F800C1C0F800411360AA +:1095900030BC704770B401204FF0E023C6024FF09A +:1095A000000CC3F880610402C3F880410506C3F8CB +:1095B0008051D34A50609060D24801680029FCD1A4 +:1095C000C2F840C1C2F844C1C2F848C1C3F88062C1 +:1095D000C3F88042C3F8805270BC70474FF0E0205F +:1095E0004FF40061C0F88012C910C0F880127047B3 +:1095F000002804BFC4487047012804BFC34870470F +:10960000022804BFC248704700B5FFDF002000BD3C +:1096100008B5BB49002298B101282FD002281CBFF1 +:10962000FFDF08BD4FF48020C1F80803C1F84803EC +:10963000B8480260C1F84821B5480068009008BDEC +:109640004FF48030C1F80803C1F84803B24B1A60E8 +:10965000C1F84021B14BC1031960B149C1F80803F9 +:109660004FF0E0230012C3F88001AE480260C1F859 +:109670004021C1F80022AC48027008BD4FF4003010 +:10968000C1F80803C1F84803A8480260C1F84421A2 +:109690009E480068009008BD70B5DFF864C20426DB +:1096A00000240125B0B101284CD002281CBFFFDFE7 +:1096B00070BD9F484FF48022012BC0F8401518BFA1 +:1096C000CCF80823C0F8404108BFCCF80423CCF8FC +:1096D000442370BD881E20F07F40CCF840054FF435 +:1096E0008030CCF80803CCF84041CCF84403012B7F +:1096F00014BF002101218C4B597089490D61DFF89D +:1097000034C2CCF800408C4C4FF0020CC4F800C0BE +:10971000DFF828C2CCF80060DFF808C23D32CCF890 +:109720000020C1F800524FF0E0224FF4807CC2F8D4 +:1097300080C2C1F80403C2F800C10804804908606F +:109740001D7070BD7F4A4FF40030012BC2F84015E8 +:1097500018BFCCF80803C2F8404108BFCCF8040396 +:10976000CCF8440370BD67480068704770B5764810 +:109770000568774975480860614CD4F840010026B7 +:1097800001280AD1D4F8080310F4803F05D04FF423 +:109790008030C4F80803C4F84061D4F844010128BB +:1097A0000DD1D4F8080310F4003F08D04FF4003076 +:1097B000C4F80803C4F84461012007F060FDD4F840 +:1097C000480101280DD1D4F8080310F4802F08D0E7 +:1097D0004FF48020C4F80803C4F84861022007F061 +:1097E0004EFD5C48056070BD574810B50468584987 +:1097F000564808604C490878002808BF03201AD052 +:10980000464A4FF000401060454AC00BC2F80803BA +:1098100003124FF0E02C0020CCF88031414B18604F +:10982000C2F84001C2F8000208704A78002A1CBF42 +:109830004870002001D007F022FD4648046010BDAA +:109840004FF0E0214FF08070C1F8000270474FF0F8 +:10985000E0214FF08070C1F8800270474FF0E021A6 +:109860004FF40010C1F8000270474FF0E0214FF4B0 +:109870000010C1F8800270472949012008614FF0AB +:10988000E0210002C1F880027047410A43F6095204 +:109890005143C0F3080010FB02F000F5807001EBAB +:1098A00050207047430B48F2376C03FB0CF31B0C42 +:1098B0004FEA432CC1F800C0DFF89CC003FB0C0347 +:1098C00026484CF2F72C5843400D10FB0CFC0CEBD7 +:1098D000432303F580735B1213700A681044086019 +:1098E0007047194810B5046819491848086008F00D +:1098F0005FF81848046010BD0BE000E018E000E0DD +:1099000000B0004004B500404081004044B1004038 +:1099100048B1004048B5004040B5004008F501405E +:1099200000800040408500402C00002044B50040ED +:1099300008B00040048500400885004010850040C4 +:1099400004F5014004B00040100502400100000190 +:109950001805024014050240F7C2FFFF6F0C01001A +:1099600010B5EFF3108000F0010472B6EB484178B7 +:10997000491C41704078012801D108F07DFC002C81 +:1099800000D162B610BD70B5E44CE07848B901254D +:10999000E570FFF7E5FF08F077FC20B1002008F044 +:1099A00053FC002070BD4FF080406571C0F8045337 +:1099B000F7E770B5EFF3108000F0010572B6D74CF1 +:1099C000607800B9FFDF6078401E6070607808B989 +:1099D00008F056FC002D00D162B670BDCF4810B51E +:1099E000C17821B100214171C170FFF7E2FF002071 +:1099F00010BD10B5044608F047FCC849C9780840B6 +:109A000000D001202060002010BD2DE9F05FDFF8BC +:109A10000C934278817889F80620002589F8071090 +:109A2000064689F8085000782F4620B101280FD04B +:109A300002280FD0FFDF08F034FC98B108F038FCA2 +:109A4000A8420FD1284608F037FC0028FAD047E09A +:109A50000125F0E7FFF784FF08F016FC0028FBD093 +:109A60000225E8E701208407E060C4F80471AC49EE +:109A70000D600107D1F84412A94AC1F342312432E2 +:109A80001160A7494FF0020B34310860C4F804B3E9 +:109A9000A060DFF890A2DAF80010C94341F300118A +:109AA00001F10108DAF8001041F01001CAF80010C5 +:109AB00000E020BFD4F804010028FAD0284608F0BE +:109AC000FBFB0028FAD0B8F1000F05D1DAF800103E +:109AD00021F01001CAF80010C4F808B3C4F80471EA +:109AE00099F807004C4670B1307860B908F0CCFBAB +:109AF000064608F0BDFD6FF0004116B1C4E9031041 +:109B000001E0C4E9030115B12771BDE8F09F012010 +:109B10002071BDE8F05F00F0DFB870B5050000D13E +:109B2000FFDF4FF080424FF0FF30C2F80803002102 +:109B3000C2F80011C2F80411C2F80C11C2F81011D9 +:109B4000764C617008F0A6FB10B10120E0706070E7 +:109B50002846BDE8704058E72DE9F0410125AF07E0 +:109B60007D616E4CE079F0B1012803D0217A401E6E +:109B7000814218DA08F088FB064608F079FDE179A1 +:109B8000012902D9217A491C21720EB1216900E014 +:109B9000E168411A022902DA11F1020F0EDC0EB15E +:109BA000206100E0E060FFF7DBFE08F06DFB10B124 +:109BB0003D61A57000E0257000202072BDE8F081B5 +:109BC0002DE9F05F5848D0F800B0574A574908329D +:109BD00011608406D4F8080110B14FF0010801E0CB +:109BE0004FF00008D4F8000100B101208146D4F8FC +:109BF000040108B1012600E00026D4F80C0100B1F0 +:109C000001208246D4F8100108B1012700E00027A6 +:109C100048EA090126EA010020EA0A00B84300D018 +:109C2000FFDF0025B8F1000F04D0C4F8085101206F +:109C300008F00AFBDFF8E480B9F1000F13D0C4F894 +:109C4000005198F8050020B188F80550002008F070 +:109C5000FBFA98F8000030B108F016FB18B10120AB +:109C600088F8020020610EB1C4F80451BAF1000F67 +:109C70000AD0C4F80C5198F80200464600B9FFDF3C +:109C8000B5703570FFF795FE37B1C4F8105198F8EC +:109C9000040008B1FFF760FF2349091DC1F800B0B7 +:109CA00033E770B51D4DE87808B908F0E9FA0120EE +:109CB0008407A061A87850B1D4F80C0120B9002025 +:109CC00008F0FAFA0028F7D10020C4F80C014FF090 +:109CD000FF30C4F8080370BD2DE9F0411926B5071F +:109CE000C5F808630124AC610020C5F80001C5F87F +:109CF0000C01C5F8100108F0C7FA084F10B1BC708C +:109D00002C6100E03C70FFF72BFE0549B87920314B +:109D10000860C5F804636C6150E700003000002063 +:109D20001805004010ED00E01005024001000001A0 +:109D300010B50D2000F06FF8C4B26FF0040000F011 +:109D40006AF8C0B2844200D0FFDF3A4901200860BF +:109D500010BD70B50D2000F048F8374C0020C4F855 +:109D600000010125C4F804530D2000F049F82560D6 +:109D70004FF0E0216014C1F8000170BD10B50D2056 +:109D800000F033F82C48012141600021C0F8001197 +:109D9000BDE810400D2000F033B8284810B5046825 +:109DA00026492748083108602349D1F800010128D5 +:109DB00004D0FFDF2148001D046010BD1D48001DB8 +:109DC00000680022C0B2C1F8002108F066FBF1E78C +:109DD00010B51948D0F800110029FBD0FFF7DDFFBE +:109DE000BDE810400D2000F00BB800F01F0201216B +:109DF00091404009800000F1E020C0F880117047D8 +:109E000000F01F02012191404009800000F1E02094 +:109E1000C0F880127047002806DA00F00F0000F149 +:109E2000E02090F8140D03E000F1E02090F8000429 +:109E30004009704704D5004000D0004010050240A2 +:109E40000100000110B5202000F075F8202000F07E +:109E50007DF84449202081F8000443490006086049 +:109E6000091D42480860F7F74DFA3F49C8310860BC +:109E70003F48D0F8041341F00101C0F80413D0F8B2 +:109E8000041341F08071C0F80413364901201C39D5 +:109E9000C1F8000110BD10B5202000F04CF8324888 +:109EA00000210160001D01602F4A481EE83A106041 +:109EB0002F4AC2F808032C4BC8331960C2F80001BE +:109EC000C2F860012B490860BDE81040202000F076 +:109ED0003DB825492848EC39086070472249264892 +:109EE000E8390860704770B51F4A8069E83A22492E +:109EF00011601F49D1F800610023204D1D4A5C1EEE +:109F00001EB1A84206D300210FE0D1F8606186B1EE +:109F1000A84209D2C1F80031C1F860311460BDE82F +:109F20007040202000F012B81168BDE8704014F0B5 +:109F3000DCBAFFDF70BD00F01F0201219140400933 +:109F4000800000F1E020C0F88011704700F01F028F +:109F5000012191404009800000F1E020C0F880120A +:109F60007047000020E000E000060240441300209B +:109F700000000240000402400100000100F0010066 +:109F80004FF0E0214FF00070C1F88001C1F880026D +:109F9000384B802283F80024C1F80001704700B5D7 +:109FA00002460420344903E001EBC0031B792BB1C6 +:109FB000401EC0B2F8D2FFDFFF2000BD41F83020C4 +:109FC00001EBC00100224A718A7101220A7100BDB1 +:109FD000294A002102EBC0000171704710B5044608 +:109FE000042800D3FFDF244800EBC40420790128B3 +:109FF00000D0FFDF6079A179401CC0B2814200D05F +:10A0000060714FF0E0214FF00070C1F8000210BD08 +:10A010002DE9F041194805681849194808310860C8 +:10A020001448042690F80004134F4009154C0428E6 +:10A0300018D0FFDF16E0217807EBC1000279012A72 +:10A0400008D1427983799A4204D04279827157F8D3 +:10A05000310080472078401CC0B22070042801D312 +:10A0600000202070761EF6B2E5D20448001D05607F +:10A07000BDE8F08119E000E0D405002010050240A1 +:10A080000100000144000020FE4B586019721A8044 +:10A09000C90014F0FCB910B504460E2114F0D5F92E +:10A0A00017202081207B40F00A00207310BD4FF65E +:10A0B000FF720280032008F0E2BC7047027BD307E6 +:10A0C00001D1920703D44089088000207047052001 +:10A0D0007047027B920700D54181704701460020FE +:10A0E000098847F2FE12114200D00120E549497A61 +:10A0F000002901D040F00800704700B50346007BFE +:10A10000C00701D0052000BD19811846FFF7E6FF02 +:10A11000C00703D0187B40F004001873187B40F090 +:10A1200001001873002000BD027B520700D509B161 +:10A130000089704717207047027B61F3C3020273E6 +:10A1400070472DE9F04F0E46017804464FF0010BA1 +:10A150000BFA01F047F2FF1100EA010961681D46A0 +:10A160004FF6FF73088887B09646984206D0B9F13B +:10A17000000F07D047F2FE12104203D0012007B0B3 +:10A18000BDE8F08F40EA090008804FF0000A8DB169 +:10A1900085F800A02278002705200221102A72D21B +:10A1A000DFE802F0710D323B506A727C50C7C399F0 +:10A1B000CBFDFCFB20780B28ECD00420DFE76068A7 +:10A1C000B4F80C80007B80077ED5B8F1170F4BD315 +:10A1D000F8F7F8FE4045FAD360684089172801D3A4 +:10A1E000404541D1287820F03F00801C2870A5F818 +:10A1F0000180032030806168A1F80A806068017BDB +:10A2000021F00201017334E104212970A189A5F82C +:10A210000110E189A5F8031085E0A08A3188C01DEE +:10A220001FFA80F84145D2D3062005F8010BA0891A +:10A230002880E0896880208AA88007200090A38A6F +:10A24000A2693EE0082A10D008212970A189A5F84A +:10A250000110E189A5F8031030806A1D694604F1F8 +:10A26000100006F0DEFA10B1CCE01021EDE73088E6 +:10A270009DF80010084456E00A202870A089A5F82F +:10A280000100032008E006E10C212970A189A5F84E +:10A290000110E189A5F803103080A8E0A089B6F884 +:10A2A00000C00BEB40021FFA82F8C44578D3B8F126 +:10A2B000050F75D30E222A70CDF800B0226903EA8B +:10A2C0004003208980B200E079E0714600F096FA00 +:10A2D000A6F80080CDE06B48427A002A6FD0521E6B +:10A2E00042724068227B236900EBC205AA88286875 +:10A2F000D3F800C01044A0F1080240F808CC586818 +:10A3000050608DF800108DF801A028680290A88890 +:10A31000ADF8040000216846FBF70AFAA5F804A08E +:10A32000002E01D050463080A3E0287840F0800114 +:10A330002970287840F040012970E0893188C01CDC +:10A340001FFA80F841455DD3287820F03F00123095 +:10A350002870A189A5F80110032000902089E389C5 +:10A3600080B27146226900F049FAA6F80080287888 +:10A3700041063CD500067CD58DF800B08DF801A0D3 +:10A380003188CDE9025A091DDFF8F8800420ADF8C4 +:10A390000410049098F8080003E055E04BE02AE030 +:10A3A00030E08DF8140000216846FBF7C1F907463C +:10A3B00030880C303080022F02D0DFB36EE047E0EF +:10A3C0009DF81420D8F8041098F80830404601EBA6 +:10A3D000C2019A4216D28A88A2B9427A521C88F8DF +:10A3E00009200D6030888880A6F800A056E06168DA +:10A3F000A08988803DE0218A3288491D1FFA81F8B2 +:10A40000424501D2042749E0297821F03F01163165 +:10A410002970A189A5F80110E189A5F80310009021 +:10A420002089238A80B27146626900F0E7F9A6F8B4 +:10A430000080DCE71DE0287820F03F00183028700D +:10A44000207B6870318014E060680188090401D4C1 +:10A45000052723E0C088A189884201D006271DE096 +:10A460001E202870A6F800B06068018821F4004121 +:10A470000180B9F1000F11D002480022008883004A +:10A48000032001E0F4050020A16808F05BFA616890 +:10A490002078887007E0A6F800A00327606801888C +:10A4A00021EA09010180384669E62DE9F04F87B0BD +:10A4B0009B46119C0D46030016461AD03078C10702 +:10A4C00003D000F03F00192801D9012100E000214C +:10A4D0002046FFF729FE98420BD32088A0F57F4144 +:10A4E000FF3906D03078410601D4000603D5082094 +:10A4F00045E6072043E600208DF800008DF80100B6 +:10A5000030785F1E00F03F0C0122981E4FF0050AC4 +:10A510004FF00209B9B2BCF1200F76D2DFE80CF09F +:10A520008C10755F7569758D759E75B775BC75CA2C +:10A5300075D675E3757575F375F175F075EF758CF6 +:10A54000052B79D104208DF80000A0788DF8040047 +:10A550007088ADF8060030798DF80100707800F051 +:10A560003F000C2829D00ADCA0F10200092863D2A0 +:10A57000DFE800F0126215621A621D6220001228E4 +:10A5800024D004DC0E281BD01028DAD11BE01628BA +:10A590001FD01828D5D11FE02078800701E020784F +:10A5A0004007002848DAF0E020780007F9E7207833 +:10A5B000C006F6E720788006F3E720784006F0E74B +:10A5C00020780006EDE72088C005EAE72088C0046F +:10A5D000E7E720888004E4E720884004E1E720786A +:10A5E000800729D5032B27D18DF800A0B6F80100EC +:10A5F00082E0217849071FD5062B1DD381B27078E0 +:10A60000012803D0022817D102E0CBE0022000E0AD +:10A61000102006228DF8002072788DF80420801C0E +:10A62000B1FBF0F2ADF8062092B242438A4203D168 +:10A630000395ADF80890A8E07AE02078000777D578 +:10A640000721B8B28DF800108108ADF80410B0EB06 +:10A65000810F6DD10295ADF8062096E02178C906EC +:10A6600066D5022B64D381B208208DF80000707883 +:10A6700002285DD3B1FBF0F28DF80400ADF806209E +:10A6800092B242438A4253D1ADF808907CE02078E0 +:10A6900080064DD5092003E02078400648D50A20E1 +:10A6A0008DF80000A088ADF80400ADF80610ADF8F4 +:10A6B000082069E02078000672D50B20ADF8041060 +:10A6C0008DF80000ADF8062002955EE02188C905EE +:10A6D00066D5022B64D381B20C208DF8000070780F +:10A6E00004285DD3C6E72088C00459D5012B57D173 +:10A6F0000D208DF80000A088ADF8040045E021E0B1 +:10A7000026E016E0FFE72088800449D5052B47D3D3 +:10A710000E208DF80000A088ADF80400B6F8030004 +:10A720005B1FADF80830ADF80600ADF80AA02BE0CD +:10A7300036E02088400433D5012B31D10F208DF82D +:10A74000000022E0208800042AD4B6F80100E0804E +:10A75000207B000724D5032B22D3307800F03F0064 +:10A760001B2819D011208DF80000208840F40040EB +:10A77000A4F80000B6F80100ADF80400DB1E0320C9 +:10A78000ADF80630ADF80800039559466846FAF76B +:10A79000CFFF050008D016E010208DF80000E9E793 +:10A7A000072510E008250EE0307800F03F001B2858 +:10A7B00009D01D2807D00320109908F060F92088DF +:10A7C00000F400402080207B400708D52046FFF79A +:10A7D00085FCC00703D1207B20F0040020732846AD +:10A7E000CDE400B587B0032806D18DF800000191B3 +:10A7F00000216846FAF79CFF07B000BDF8B51C467B +:10A8000015460E46069F04F0A3FC2346FF1DBCB26E +:10A8100031462A46009404F0E2F8F8BD2DE9FF4FD6 +:10A820008FB00546DDE91C471198DDF880B0082897 +:10A8300005D0E86901F031F950B11020CDE0208851 +:10A84000092140F0100020808BF80010022017E052 +:10A85000E96901208871EA694FF420519180E96922 +:10A860008872E96942F601000881E969002088736D +:10A870002088112140F0200020808BF80010042057 +:10A88000814638780B900A2038704FF0020A05F1A3 +:10A89000180056460D9001F0A1FB4C467CE0119843 +:10A8A00010280DD1022E0BD0AAEB0400801C80B220 +:10A8B00000902198022380B206AA1F9901F0DDF8CA +:10A8C000BDF81A101298814203D9F648007A109008 +:10A8D00004E003D10B9808B1387031E02198CDF82D +:10A8E00000A080B24FF002030DF11A021F9901F08F +:10A8F000C4F81E980088811BA1EB090083B2C9F13E +:10A90000FF00984200D203460AEB090292B20DF111 +:10A910003008029200202199CDF81480CDE903106F +:10A920001F991098CDE9000195F82010BDF81A0084 +:10A93000002201F0D5FB387050B1C0B2832803D09B +:10A94000BDF81A00288334E0022013B0BDE8F08F70 +:10A95000BDF83000022E00EB0901CCB20CD09BF800 +:10A960000110A14205D1BDF82410814206D0FF2C70 +:10A9700004D09BF801401EE08BF80140C9480068F4 +:10A980000178052902D1BDF81A1081800AEB040074 +:10A990001FFA80FA301986B206AB219A10990D98E9 +:10A9A00001F01FFB28B91E980088801BA042BFF64B +:10A9B00076AF022E12D0119810280BD1AAEB04000A +:10A9C000801C80B200902198022380B206AA1F99B1 +:10A9D00001F053F81E980680002038700020B4E77C +:10A9E0002DE9F8439446089E02460027F06BB0B369 +:10A9F000521F94B2B6F84220A2F57F45FF3D05D024 +:10AA00008518AD882A44921D95B200E000252A19C8 +:10AA1000B6F840800832424522D84219BCF80100FD +:10AA200022F8020BBCF8030022F8020B98B222F8BD +:10AA3000024B8946904604F079FB4FF00C0C4946D6 +:10AA400042462346CDF800C003F090FFA6F84250DE +:10AA5000F16B00202944A41D2144088003E001E09B +:10AA6000092700E083273846BDE8F88310B50B8836 +:10AA7000B0F840409C420CD9C46BE018048844B143 +:10AA8000848824F40044A41D23440B80106000201B +:10AA900010BD822010BD2DE9F0478AB000259046F8 +:10AAA00089468246ADF81C5007274DE00698068877 +:10AAB0008088000448D4A8F8006008A8CDE90450B4 +:10AAC000CDE90075029503954FF4007300224946C5 +:10AAD000304601F005FB04003DD1BDF81C00ADF887 +:10AAE0002400069908888A88B04216D1130414D429 +:10AAF0000595CDE9007522F4004202950395049571 +:10AB000042F480434A88494601F0CDF804000BD155 +:10AB10000698818841F40041818006AA09A950461F +:10AB2000FFF7A4FF0400DCD00595CDE90075069879 +:10AB30000395029504950088BDF82030002249460F +:10AB400001F0B1F8822C06D106AA07A95046FFF7FA +:10AB50008DFF0400AAD0ADF81C5004E0069881884F +:10AB600021F40041818006AA07A95046FFF77EFF25 +:10AB70000028F3D0822C03D020460AB0BDE8F0872D +:10AB80000020FAE730B50446C06B85B0002578B1E7 +:10AB90000C208DF80000B4F84000ADF80800E06B20 +:10ABA0000391019000216846FBF73FFC8DF80050AF +:10ABB00044F83C5F4FF6FF70E080A58005B030BDE3 +:10ABC0002DE9F04105460F46E96B0020069E14462C +:10ABD000002911D0012B0FD1324639462846FFF704 +:10ABE0005AFF002808D1002C06D0324639462846A4 +:10ABF000BDE8F04100F060BFBDE8F081F8B51D464A +:10AC0000DDF818C0DDE907634C1DBCF800E0A4B214 +:10AC1000099FA64501D20720F8BDACF800401724D3 +:10AC200003F8014B18805A80052000900B46B8B2FB +:10AC30002A46314600F021FF0020F8BD70B50D46D0 +:10AC400004464C2113F023FC04F1080044F81C0FC7 +:10AC500000204FF6FF712062E184A0842571172047 +:10AC6000208514F82C0F40F00A00207070BD4FF6BC +:10AC7000FF720280042007F002BF30B585B00D4698 +:10AC80000446FFF77FFF208F38B101208DF80000C8 +:10AC9000002168460195FBF7C8FB00202063606334 +:10ACA000A0638BE70006002090F84820920703D4A9 +:10ACB00040880880002070470620704790F84820A0 +:10ACC000920701D5A0F84610704701460020098878 +:10ACD0000A0700D5012011F0F00F01D040F002006A +:10ACE000CA0501D540F004008A0501D540F01000E6 +:10ACF0004A0501D540F02000090501D540F040008B +:10AD0000704700B5034690F84800C00701D0062000 +:10AD100000BDA3F844101846FFF7D7FF10F0760FD8 +:10AD200005D093F8480040F0040083F8480013F879 +:10AD3000480F40F001001870002000BD90F8482036 +:10AD4000520700D511B1B0F8440070471720704782 +:10AD500010F8482F61F3C302027070472DE9FF4FCE +:10AD60009BB00600DDE92CB4289F1E9D2A9B25D0B0 +:10AD70002878C10703D000F03F00192801D901212C +:10AD800000E000212046FFF7D9FFB04216D3287813 +:10AD900041060FD400F03F011E2909D0218811F48B +:10ADA0007F6F0BD13A884AB1A1F57F42FF3A05D0B7 +:10ADB000010606D500F03F00122802D004201FB083 +:10ADC000C4E5F8491C984FF0000908728DF81890F6 +:10ADD0008DF83C900FAA0A602B9A4A60ADF81C903F +:10ADE000ADF850902A789A4602F03F0C0420711F6B +:10ADF00004F118034FF007084FF0030E1693BCF14F +:10AE00001F0F7DD2DFE80CF07C7C107C257CA97CB8 +:10AE1000FD7CFC7CFB7CFA7CFD7CF97C7C7CF87CFA +:10AE2000F77C7C7C7C7CF60094F84820B5F8011017 +:10AE3000920701D5032E02D08DF8180039E34FF4A4 +:10AE40000060ADF8500061808DF83CE0ADF8401036 +:10AE5000F1E2052EF0D1B5F801002083ADF81C0019 +:10AE6000B5F80310618300286BD0884269D80020B0 +:10AE7000A07220814FF6FF706084169801F0AEF842 +:10AE800005208AF800000220804601900AAB5A464D +:10AE90001C99169801F0A5F898BB9DF82E00012882 +:10AEA00004D002218AF80110102003E001208AF862 +:10AEB000010002200490002203A90BA805F0B1FCB8 +:10AEC000F0BB9DF80C00049981423CD13A88801C6B +:10AED000A2EB0801814236DB019800901FFA8BF04B +:10AEE00002230DF12A02299900F0C7FD019808F10B +:10AEF0000208801C81B2019117AA03A90BA801E0E6 +:10AF0000B8E223E005F08DFC019900911FFA8BF067 +:10AF10009DF80C3017AA299900F0AFFD9DF80C00A0 +:10AF20000AAB08EB00011FFA81F801995A46084460 +:10AF300080B201901C99169801F053F8002801E0A6 +:10AF400001E095E0B7D0B8F1020F03D10A208DF8E7 +:10AF500018006DE2A7F800806AE2072EFFF46CAFDC +:10AF6000B5F801002083ADF81C00B5F8031061832B +:10AF700000287DD088427BD80120A072B5F805005A +:10AF800020810020A073E06900F087FD78B9E169B5 +:10AF900001208871E2694FF420519180E169887243 +:10AFA000E16942F601000881E16900208873F01F21 +:10AFB00060841D98A062A4F82480169801F00EF811 +:10AFC0008AF800800120804602900020ADF82A0017 +:10AFD0002BE000BFB8F1010F1DD0E0698079012896 +:10AFE00003D1BDF82800ADF80E00029800901FFABA +:10AFF0008BF007E02BE2ADE13BE1DCE025E29FE0F6 +:10B0000076E03BE0042303AA299900F036FD02987C +:10B01000001D80B20290BDF82A00ADF80C00ADF81A +:10B020000E0008F104001FFA80F80AAB5A461C997A +:10B03000169800F0D6FF20B93988A1EB0800042843 +:10B04000C8D2B8F1010F81D0E0698079012805D01C +:10B05000BDF82810A1F57F40FF3803D1BDF82800C6 +:10B06000ADF80E00029800901FFA8BF0042300E068 +:10B0700014E003AA299900F000FD6BE7072E02D027 +:10B08000152E7FF4D9AEB5F801002083ADF81C0071 +:10B09000B5F80320628308B1904201D90120CBE6C4 +:10B0A0000120A07200202081A073052E07D0C8B215 +:10B0B000691DE26905F096FB00287FF447AF4FF663 +:10B0C000FF706084299803A9029781E8010C06A803 +:10B0D00014A9CDE900102878002300F03F02204693 +:10B0E0001C99FFF79BFB8146208BADF81C009FE16C +:10B0F000032ED4D14020ADF85000B5F801002083D4 +:10B10000ADF81C000DF1300C01230021CDF814C066 +:10B110000293CDE903B1299A1C99CDE9001239882F +:10B120000022491E8BB294F8201000F0D9FF8DF850 +:10B13000180090BB0B208AF80000BDF8300038E002 +:10B14000052EACD18020ADF85000B5F80100208369 +:10B15000B5F803106184ADF81C00B1F5007F02D989 +:10B160008DF81880A5E141F47C4262840DF1280835 +:10B1700000214FF0010CCDE90418CDE902CB299B49 +:10B180001C99CDE900133988491E8BB294F8201020 +:10B1900000F0A6FF8DF8180030B18328A7D1022057 +:10B1A000D6E00000000600200D218AF80010BDF84E +:10B1B0002800401C3BE1D10901EB41030EEB830168 +:10B1C000B14204D951067FF56AAF00202FE1B5F8EE +:10B1D0000100ADF81C002A78520609D506228DF828 +:10B1E0003C202A78120605D500208DF83C0043E16A +:10B1F0008DF83C804FF0030C4FF00008CDF808C0EC +:10B20000CDE903B8DDE91C23CDF81480CDE9002396 +:10B21000A6EB010B1FFA8BF394F82010424600F0C6 +:10B2200042FD8DF818008DF83C80297849060DD52F +:10B230002088C00506D5208BBDF81C10884201D19E +:10B24000C4F8288040468DF81880F0E0832801D1AA +:10B250004FF002094FF48070ADF85000BDF81C00AB +:10B260002083A4F822B01D98A0620320A08413219B +:10B27000DAE0052EFFF413AFB5F80100ADF81C00BD +:10B28000B4F840207AB3A2F57F43FE3B2CD00822CD +:10B290008DF83C204FF0050C4FF00008CDF808C0A9 +:10B2A000CDE903B8DDE91C23CDF81480CDE90023F6 +:10B2B00089B241F40043B5F8032094F8201000F05F +:10B2C000F2FC8DF83C804FF400718DF81800ADF859 +:10B2D0005010832813D010B3B4F84010A1F57F406C +:10B2E000FE3809D0E5E0FFE70B228DF83C204FF651 +:10B2F000FE72A4F84020CDE7A4F84080D9E05B4678 +:10B300002A46009430461D99FFF76AFB8DF8180015 +:10B3100008B183284CD1BDF81C0020833FE75B4671 +:10B320002A46009430461D99FFF75AFB8DF8180005 +:10B33000F0BBB4F84210E06B299A431801A80097BB +:10B3400080E8040C5A88998833F8060BFFF756FCFE +:10B3500081466DE095F80180022E75D15FEA080004 +:10B3600002D0B8F1010F6FD109208DF83C0007A879 +:10B3700000908DF8408094F820104346002220462B +:10B38000FFF71EFC8DF8410000218DF8421058B9DE +:10B39000B8F1010F15D0B8F1000F05D1B4F8401085 +:10B3A000A1F57F40FF380CD0B4F8400048B100E070 +:10B3B0003EE000208DF83C004FF48060ADF8500076 +:10B3C0000EE00FA82B99FBF730F8814600208DF88E +:10B3D0003C004FF48060ADF85000B9F1020F06D088 +:10B3E000F8480068807928B18DF8180028E0A4F8A2 +:10B3F000188043E0B9F1000F03D081208DF81800C8 +:10B400003CE007A8009094F8201043460122204613 +:10B41000FFF7D6FB8DF8180059462046FFF7B2FB20 +:10B420009DF8180020B919218AF8001001203880F1 +:10B430009DF83C0020B10FA82B99FAF7F6FF814642 +:10B44000B9F1000F32D019E016E00620F4E42078BC +:10B45000000711D5012E0FD10A208DF83C00E0889D +:10B46000ADF840005946042007F009FB0820ADF86C +:10B470005000AAE65106E9D54FF004092088BDF82E +:10B48000501008432080BDF8500080050CD5B4F85A +:10B490004010A1F57F40FE3806D11D9820631E980C +:10B4A000606326874FF00309484688E49DF818003A +:10B4B00078B101208AF8000029788AF80110BDF8D7 +:10B4C0001C10AAF802109DF818108AF80410052024 +:10B4D00038802088BDF8501088432080E4E72DE9AB +:10B4E000FF4F97B0804601780120DDE926A488400F +:10B4F0004FF209010840ADF8200021889B46A1F5D4 +:10B500007F424FF00009FF3A02D028B1080703D567 +:10B5100001201BB0BDE8F08F249E0020054630704E +:10B520001999189A0988ADF84010A6498DF81C00A1 +:10B530000A728DF82C000BA808602598486098F8CE +:10B540000000012837D0022809D003287ED13078A6 +:10B5500020F03F001D303070B8F80400E08098F80B +:10B560000000022804D1307820F03F001B303070FA +:10B5700094F84800000769D513AB0020CDE9040317 +:10B580000721CDE9001B0322CDE9022ABDF84000C6 +:10B5900094F82010C01E83B2B8F80400002200F016 +:10B5A0009FFD0028D2D1B8F80400A6F80100BDF82C +:10B5B0004C00C01C03E198F805108DF81C1098F899 +:10B5C0000400012806D04FF4007902282BD003286C +:10B5D000BCD171E12088B8F8087010F40060ADF8B3 +:10B5E000200033D0172F1CD3F7F7ECFCB84218D348 +:10B5F000B4F84600172801D3B84212D1307820F0B1 +:10B600003F00C01C3070A6F801700320ADF8400068 +:10B61000A4F8467094F8480020F0020084F848002E +:10B620006CE1052585E1208808F1080700F4FE603B +:10B63000ADF8200010F0F00F1ED010F0C00F03D0B6 +:10B640003888228B9042ECD1B1B900E06BE1B87838 +:10B65000C00711D00020B9680290CDE9030107218D +:10B660000590CDE90010FB88BA8894F8201038883E +:10B6700000F019FB0028D4D1BDF8200080284CD060 +:10B6800006DC10280DD020280BD040288AD124E0D9 +:10B69000B0F5807F6AD048457ED0B0F5806F97D1F5 +:10B6A000E2E0C00601D5082000E010208146052018 +:10B6B0008DF82C00002008A9ADF8300001AB0091F6 +:10B6C00010AA07A883E80508CDE9046A3B884A4622 +:10B6D00007212046FFF7A2F8A8E09DF81C004FF0D4 +:10B6E0000A0900289CD113ABCDE904030721CDE959 +:10B6F000001B0122CDE9022ABDF8400094F8201079 +:10B70000401E83B2208B002200F0EAFC8DF81C0062 +:10B710000B203070BDF84C001EE09DF81C004FF06F +:10B720000C09002821D115ABCDE904030721CDE98F +:10B73000001B0122CDE9022ABDF84000628C401EA8 +:10B7400083B294F82010208B00F0CAFC8DF81C0006 +:10B750000D203070BDF85400401CADF840000520AD +:10B760008DF82C00208BADF83000C7E03888B4F895 +:10B7700018C060457FF455AF9DF81C004FF01209CA +:10B7800000281ED1A06AB8B1B878C0073FF449AF0D +:10B790000020B968029000E016E0CDE9030107211E +:10B7A0000590CDE90010FB88BA8894F82010604617 +:10B7B00000F079FA8DF81C00132030700120ADF8EC +:10B7C00040009BE000060020B7F800C0208B8445B5 +:10B7D000D0D19DF81C004FF016090028E06B06D070 +:10B7E000F0B30020ADF808004FF6FF7729E078B1FC +:10B7F000B978C907BED1B4F8421010AACDE9002B20 +:10B80000CDE9026A43185A88998833F8060B0BE091 +:10B81000B878C007BAD010AACDE9002BCDE9026AEA +:10B82000BA88F9886046BB68FFF7E8F9050065D07B +:10B83000072D79D07DE00F4605AA02A92046FFF723 +:10B8400015F9B4F84220BDF808108A4201D000284A +:10B85000F1D0B4F84210E26B00201144088000E0FF +:10B860004CE0A4F8427049E09DF81C004FF0180924 +:10B8700040B1208BD0B13888208351462046FFF755 +:10B8800081F93BE004F118000090237E94F8201029 +:10B8900001222046FFF794F98DF81C000028ECD116 +:10B8A000192030700120ADF84000E6E7052551462B +:10B8B0002046FFF767F93CE0208800F40070ADF8FF +:10B8C000200048452FD1B4F84000A0F57F41FE3953 +:10B8D00090D1D8F808004FF0160958B1E063B8F8D5 +:10B8E0000C10A4F840104FF6FF71A4F8421000218C +:10B8F000018003E04FF6FF70A4F84000BDF820007F +:10B9000030F47F611AD0782300225146042007F0DA +:10B9100019F898F8000020712088BDF8201008431D +:10B9200020800EE000E007252088BDF82010884325 +:10B930002080208810F47F6F1DD03EE02188814355 +:10B9400021809DF82C0028B16F4841680BA8FAF7B8 +:10B950006CFD05469DF81C000028EAD086F8019091 +:10B9600001203070208B70809DF81C003071052004 +:10B97000ADF84000DDE7208FF8B119990988ADF8DE +:10B980004010DDE9242302A9059481E80C0410AAE3 +:10B99000CDE9002BD4E90C231899FFF7DFF9054610 +:10B9A00001208DF82C0000210BA8CDF830A0FAF76B +:10B9B0003CFD00B105460020208794F84800400770 +:10B9C0000AD52046FFF781F910F0760F04D114F85C +:10B9D000480F20F0040020701998BDF84010018035 +:10B9E000284696E500B585B0042807D102208DF8D9 +:10B9F0000000019100216846FAF717FD05B000BD6F +:10BA000010B5414A03781168012B02D0022B2BD1CB +:10BA100012E00B780BB1052B01D104230B701368D6 +:10BA2000818899801168C388CB8013680189198146 +:10BA30001168408948810FE083888B801168C38832 +:10BA4000CB80136801891981136841895981116874 +:10BA500083898B8100690861D2E90001FAF7E5FC6E +:10BA6000022803D0002800D0812010BD832010BD03 +:10BA7000C06B002800D001207047F8B51C46154661 +:10BA80000E46069F03F064FB2346FF1DBCB2314601 +:10BA90002A46009402F0A3FFF8BD8178012909D15C +:10BAA0000088B0F5205F03D042F60101884201D141 +:10BAB0000020704707207047F0B589B00024154674 +:10BAC0000E460746ADF8184011E007980188298016 +:10BAD000811D0294CDE9034107210594CDE90014AD +:10BAE000838842880088314600F0DDF830B907AA23 +:10BAF00006A93846FEF7BAFF0028E6D0822800D112 +:10BB0000002009B0F0BD00000006002010B58B78C1 +:10BB100083B102789A4205D10B885BB102E08B7940 +:10BB2000091D4BB18B789A42F9D1B0F801300C88DD +:10BB3000A342F4D1002010BD812010BD072826D0DB +:10BB400012B1012A27D103E0497801F0070102E090 +:10BB50004978C1F3C20105291DD2DFE801F00318BD +:10BB6000080C12000AB10320704702207047042815 +:10BB70000DD250B10DE0052809D2801E022808D34D +:10BB800003E0062803D0032803D0052070470020D7 +:10BB900070470F2070478120704710B513880B80C5 +:10BBA0000B781C061FD5F64CA47A844204D843F0C7 +:10BBB00010000870002010BD94682478C44064F31D +:10BBC00004130B701378D17803F0030341EA0321C7 +:10BBD00040F20123B1FBF3F403FB1411926800FB64 +:10BBE0000120401C10BD906810BD37B5BDF8041091 +:10BBF00011809DF8045029061BD5E1490123946862 +:10BC0000897A814209D8FE280FD1E80602D58B40F7 +:10BC10005B1E00E00023237007E0217883409943F6 +:10BC2000C5F30013834019432170107820F01000F1 +:10BC300010703EBD2DE9F0410746C81C0E4620F0AD +:10BC40000300B04202D08620BDE8F081082A01D965 +:10BC50000E20F9E7CA4D002034462E60AF802881BF +:10BC6000AA72E8801AE0E988491CE980810614D4A8 +:10BC7000E17800F0030041EA002040F20121B0FB2E +:10BC8000F1F201FB1201206800F021FB2989084430 +:10BC900080B22881381A3044A0600C3420784107E3 +:10BCA000E1D40020D0E72DE9FF4F87B01646DDE94B +:10BCB000147A8046994623F4404500F0F8FA0400CF +:10BCC0000BD0207800060AD5AD48817A08988142C9 +:10BCD00005D887200BB0BDE8F08F0120FAE7224697 +:10BCE00001A90898FFF759FF834600208DF8080046 +:10BCF000072F1BD0012221463846FFF71FFF0028DF +:10BD0000E8D12078400611D502208DF80800BDF852 +:10BD10000400ADF80C80ADF80E00ADF81060169878 +:10BD2000ADF81250CDF818A0ADF814005FEA094044 +:10BD300004D500252E46A84601270CE02178E0789E +:10BD400001F0030140EA012040F20122B0FBF2F1D0 +:10BD5000804602FB11875FEA494009D5B84507D103 +:10BD6000A178207901F0030140EA0120B04201D31B +:10BD7000BE4201D90720ADE7A8191FFA80F9B945DD +:10BD800001D90D20A6E79DF8080020B102A8FAF716 +:10BD90004AFB00289ED1B84507D1A0784FEA192167 +:10BDA00061F30100A07084F80490199800B1058037 +:10BDB000189850EA0A0028D0189830B10BEB06000A +:10BDC0002A46189912F0CAFA0FE017980BEB0608EA +:10BDD00080B25746169E03F0A9F92B46F61DB5B260 +:10BDE00039464246009502F0C1FD224601A9089855 +:10BDF000FFF7D3FE9DF80400224620F010008DF8D6 +:10BE0000040001990898FFF7F0FE002062E72DE991 +:10BE1000FF4FDFF86C9182461746B9F80610D9F843 +:10BE2000000001EB410100EB810440F20120B2FB74 +:10BE3000F0F187B000FB11754E46DDF854802946BD +:10BE4000089800F044FA316832898B46611A0C3147 +:10BE500001441144B38889B28B4201D8842039E768 +:10BE60000899CEB2310603D5B10601D5852031E758 +:10BE7000B9F806C00CF1010C1FFA8CFCA9F806C039 +:10BE8000169909B1A1F800C0B10602D5C4F808801E +:10BE900007E0104480B2A9F80800191A01EB0B0062 +:10BEA000A0602246FE200899FFF79FFEE7702571EB +:10BEB0002078390A61F301002A0AA17840F00400D1 +:10BEC00062F30101A17020709AF802006071BAF863 +:10BED0000000E08000252573300602D599F80A702D +:10BEE00000E00127B00601D54FF000084E460024BF +:10BEF0004FF007090FE00295CDE903580595CDE90C +:10BF00000095F0882146149B0A9AFFF7CCFE002882 +:10BF1000A5D1641CE4B2BC42EDD30020DAE62DE9E1 +:10BF2000F047804600F0C3F9070005D000264446DC +:10BF3000134D40F2012916E00120BDE8F0872046AC +:10BF400000F0B5F90278C17802F0030241EA02225A +:10BF5000B2FBF9F309FB1321006800F0B8F9304493 +:10BF6000641C86B2A4B2E988601E8142E7DCA8F1B5 +:10BF70000100E8802889801B288100203870DCE7D8 +:10BF80000C06002020B1401E1080917000207047E8 +:10BF90000120704710B5D54904460088CA889042F0 +:10BFA00001D3822010BD096800EB400001EB800244 +:10BFB0005079A072D08820819178107901F0030126 +:10BFC00040EA0120A081A078E11CFFF7E6FD206196 +:10BFD0002088401C2080E080002010BD012181824B +:10BFE00070472DE9FF4F83B04FF6FF780546A3F861 +:10BFF000008040681F4680788DF8060068680088D9 +:10C00000ADF8040000208DF80A00A88A2C88A04210 +:10C0100000D30446AC8242E0A88A401CA882701D6E +:10C020006968FFF773FDC0BB3988414501D1601EC7 +:10C0300038806888A04237D3B178307901F00301A5 +:10C0400040EA012901A9701DFFF760FD28BB69893D +:10C0500041452ED0002231460498FFF76FFDE0B92C +:10C060006989494519D10598D5F810B0B5F80CC0C3 +:10C07000D6F808A080B2CDF800C003F057F8DDF87C +:10C0800000C059460CF1070C1FFA8CFC52464B4677 +:10C09000CDF800C002F02DFC58B1641CA4B22046BB +:10C0A00000F005F90600B7D1641EAC82822007B00B +:10C0B00011E67C807079B871F088B8803178F078BA +:10C0C00001F0030140EA01207881A7F80C90287A5A +:10C0D000324607F10801FFF760FD38610020E6E70E +:10C0E0002DE9FF4F87B01C46DDE9158B91460F46C1 +:10C0F000DDF864A0079800F0DAF8050008D0287889 +:10C10000000607D57948807AB84203D88720E1E550 +:10C110000120DFE5C9F309062A4601A93846FFF7E1 +:10C120003CFD0746149807281BD000222946FFF73C +:10C1300005FD0028EBD12878400612D501208DF8A6 +:10C1400008000798ADF80C00BDF80400ADF80E002B +:10C15000ADF81060ADF8124002A8FAF764F90028B3 +:10C16000D5D12978E87801F0030140EA0121AA78C5 +:10C17000287902F0030240EA02204E4507D0B1F5CB +:10C18000007F04D9611E814201DD0B20A2E58642B9 +:10C1900001D907209EE5801B85B2A54200D925461E +:10C1A000BAF1000F01D0AAF80050189818B1B919C7 +:10C1B0002A4612F0D3F8B8F1000F0ED017983E447B +:10C1C00080B244465F4602F0C3FF2146FF1DBCB269 +:10C1D00032462B46009402F002FC00207AE52DE95D +:10C1E000F0411D4617460E4600F061F8040008D0E5 +:10C1F0002078000607D53D48807AB04203D88720D2 +:10C2000022E5012020E5224639463046FFF7C5FCED +:10C2100065B12178E07801F0030140EA0120B0F532 +:10C22000007F01D8012000E00020287000200BE5ED +:10C230002DE9F0411D4617460E4600F038F804007F +:10C2400008D02078000607D52848807AB04203D865 +:10C250008720F9E40120F7E4224639463046FFF70B +:10C26000C4FCFF2D14D02178E07801F0030240EAED +:10C27000022040F20122B0FBF2F302FB130015B9D9 +:10C2800000F2012080B2E070000A60F30101217029 +:10C290000020D9E410B50C4600F009F828B1C18897 +:10C2A00021804079A070002010BD012010BD0F49F1 +:10C2B000CA88824209D340B1096800EB40006FF0A0 +:10C2C0000B0202EB80000844704700207047C0B2A8 +:10C2D000820609D4000605D50448807A4843401CEC +:10C2E00080B2704708467047002070470C06002057 +:10C2F0000649012008707047044900200870704703 +:10C300000248007800F0010070470000480000205B +:10C3100010B506F09BFD06F008F8F6F7B1FD11F038 +:10C320000DF806F06BFCBDE8104006F01DBD10B521 +:10C330000C4601F025FF80B3204600F0A8FA68B350 +:10C3400022780F2A09D0102A07D0022A05D0032A02 +:10C3500003D0142A2ED0FFDF1DE0A0781E282DD098 +:10C360000EDC0C2824D008DC092827D2DFE800F0F6 +:10C3700013261726261E1E1A1C0012281ED11BE08B +:10C38000302819D01ADDA0F13A00032816D2DFE8D0 +:10C3900000F011150B00002010BD13E010E043F277 +:10C3A0000200F9E70420F7E70D20F5E70F20F3E797 +:10C3B0000820F1E71120EFE70720EDE70320EBE786 +:10C3C000FFDFE8E7FFDFE6E700F061BA70B503469C +:10C3D000002002466FF02F050EE09C5CA4F13006B1 +:10C3E0000A2E02D34FF0FF3070BD00EB800005EB4A +:10C3F0004000521C2044D2B28A42EED370BD30B508 +:10C400000A240AE0B0FBF4F304FB13008D1830306B +:10C4100005F8010C521E1846D2B2002AF2D130BDE6 +:10C4200030B500234FF6FF7510E0040A44EA0020FF +:10C4300084B2C85C6040C0F30314604005EA003475 +:10C440004440E0B25B1C84EA40109BB29342ECD3C0 +:10C4500030BD000010B50AF0CCF8042803D00AF073 +:10C46000C8F8052802D108F0DFFD50B90AF07EF9BE +:10C47000032803D00AF080F9032804D107F06FFDE8 +:10C4800008B1012010BD002010BD70B50C46054656 +:10C49000062102F0E8FC606008B1002006E00721F8 +:10C4A000284602F0E0FC606018B1012020700020F6 +:10C4B00070BD022070BD2DE9FC470C46064669465A +:10C4C000FFF7E3FF00287DD19DF8000050B107F091 +:10C4D000A2FCB0427CD0214630460DF074FA002810 +:10C4E00073D115E008F0B9FAB04271D02146304658 +:10C4F0000CF090F8002868D1019D95F8C0005035E7 +:10C5000018B9687E08B1012000E00020804603E0F1 +:10C51000019D95F8698050354FF0010A95F8350076 +:10C520004FF00009A0B195F83600800710D584F8C7 +:10C53000019084F800A084F80290A68095F8371046 +:10C54000A171298F2181698F618185F835903CE047 +:10C55000304602F0FDFD070000D1FFDF384601F054 +:10C56000F8FF10F0FF0008D084F801900D21217031 +:10C57000A680E08084F802A027E0304602F0D6FDD5 +:10C58000070000D1FFDFB8F1000F21D0384602F0DC +:10C5900070F8B8B19DF8000038B90198D0F8E400FF +:10C5A0004188B14201D180F80090304607F0F5FA99 +:10C5B00084F801900A21217084F80290A680A97E57 +:10C5C000A17100E004E085F819900120BDE8FC8726 +:10C5D0000020FBE71CB56946FFF757FF00B1FFDFFE +:10C5E000684601F021FEFF4900208968A1F8C200D9 +:10C5F0001CBD2DE9FC4104460E46062002F0DEFB80 +:10C600000546072002F0DAFB2844C7B20025A846F9 +:10C610003E4417E02088401C80B22080B04202D304 +:10C620004046A4F8008080B2B84204D3B04202D29F +:10C630000020BDE8FC816946FFF727FF0028F8D0FD +:10C640006D1CEDB2AE42E5D84FF6FF70208012208F +:10C65000EFE738B54FF6FF70ADF800000DE00621AA +:10C66000BDF8000002F011FC04460721BDF80000EF +:10C6700002F00BFC0CB100B1FFDF00216846FFF7B0 +:10C68000B8FF0028EBD038BD2DE9F041D6A00679DF +:10C69000076807F0EFFA0EF049FED54C4FF004089A +:10C6A0001020A4F8388060874FF6FF70A4F8560079 +:10C6B000002584F85850A4F85A0084F8315004F842 +:10C6C000345BCB4904F8065C25702572C4F8097008 +:10C6D0003D316673481E0CF021F9A5731B202082A2 +:10C6E0004FF4A4716182A082E1820A21217684F84C +:10C6F00019800321A176E1760E2121770721617748 +:10C700000621A177E1772084BDE8F08170B5B54CB2 +:10C710000D466060217007F028FAFFF79AFFFFF7D7 +:10C72000B3FF207809F019FD08F0BCFA21786068A1 +:10C730000CF011F820780EF07BF928460AF0CEFBB9 +:10C7400007F0A9FB217860680DF0F4F9BDE87040AE +:10C750000EF0ECBD10B501240AB1002010BD21B1CE +:10C76000012903D00024204610BD022110F034F826 +:10C77000F9E72DE9F047040000D1FFDF9C4D0026CA +:10C7800095F8310058B166701420207095F8320089 +:10C79000A07095F83300E07085F8316068E0287883 +:10C7A00040B12C22A91C204611F0D8FD0F2020708A +:10C7B0002E705DE095F82E0060B10120E07095F8D4 +:10C7C0002F00A07095F8300060701020207085F860 +:10C7D0002E604DE0864802215A308246FFF709FF5D +:10C7E00000B1FFDFB5F85A90062002F0E7FA0746DD +:10C7F000072002F0E3FA3844C7B2781C00F0FF08C3 +:10C80000B5F85A00B84212D1204608F0B9F850BB2A +:10C8100095F8340078B36670122020702021A01C97 +:10C8200011F013FE0220A07085F8346020E040452E +:10C830001AD1204607F0C4FAE8B12078122817D19F +:10C84000A0783C2814D1A088072102F00CFB050039 +:10C8500000D1FFDF288807F0A0F9A088072102F0A7 +:10C8600014FB00B1FFDF03E02146FFF724FE10B107 +:10C870000120BDE8F087FFE702215046FFF7B9FE2F +:10C8800018B9B5F85A104945BAD10020F1E770E758 +:10C8900010B509F0DFFB00B1FFDF0BF056FF00B170 +:10C8A000FFDF08F0C9F90AF002FB00B1FFDF0DF06D +:10C8B0003BF900B1FFDF07F0B8FA00B1FFDF0EF07F +:10C8C000B1F800B1FFDFFFF7C4FEFFF7DDFE07F0B0 +:10C8D00035F902F01AFC0EF029FD454800210171DE +:10C8E000012141710222C270017010BD10B5404C8F +:10C8F000207828B10A21BDE810400F2001F059BC72 +:10C90000FFF7A8FD08B10C2002E00EF055FD002055 +:10C910002071012060710A21E170207010BD70B596 +:10C92000334D0446287828B1BDE8704032210F20ED +:10C9300001F03FBC207818B1012801D0122010E08E +:10C9400001F044FC20B10EF082FE08B10C2008E09A +:10C95000207801F023FC04F11703E21D611C0EF0A6 +:10C9600083FD2871012068713221E970287070BD43 +:10C9700070B51F4C0546207828B1BDE870400B21EA +:10C980000F2001F016BC287818B1012801D0122020 +:10C990000EE0FFF75FFD08B10C2009E0287801F0F8 +:10C9A000FDFB691C0EF0CFFC08B1002000E0072061 +:10C9B0002071012060710B21E170207070BD10B5F5 +:10C9C0000B4C217829B13021BDE810400F2001F037 +:10C9D000F0BB00880EF03EFE302158B100202071DF +:10C9E00009E000004C000020FFFFFFFF1F000000D7 +:10C9F00018060020217101206071E170207010BDC7 +:10CA000070B5FF4C0546207828B1BDE87040312153 +:10CA10000F2001F0CEBB01F0D9FB08B10C2005E0DE +:10CA2000287800F001000EF00FFE00202071012098 +:10CA300060713121E170207070BD10B5F04C20782C +:10CA400028B13421BDE810400F2001F0B2BB01F045 +:10CA5000BDFB20B10EF0FBFD08B10C2002E00EF092 +:10CA60005AFD00202071012060713421E170207096 +:10CA700010BD10B5E24C217829B13621BDE8104037 +:10CA80000F2001F096BB0378411CA21D18460EF042 +:10CA900043FE08B1002000E00220207101206071F7 +:10CAA0003621E170207010BD70B5D54C0546207858 +:10CAB00028B1BDE8704037210F2001F07ABB2878FB +:10CAC00001F06CFB691C0EF0D3FD022508280AD08A +:10CAD0000EF011FF38B10168C4F80610808860813B +:10CAE0000020207100E02571012060713721E17084 +:10CAF000207070BDC248017819B10F21084601F0BD +:10CB000058BB002101710F218170C170FF2181711B +:10CB10004FF6FF710181BB4949680A7882728A88A1 +:10CB200082814988C1810121417101707047B449F6 +:10CB30000A781AB147210F2001F03BBB0088A1F809 +:10CB40005600012081F8580000220A7148714722DE +:10CB5000CA700870704710B5A94C207828B12B21F5 +:10CB6000BDE810400F2001F024BB0821A01D05F0F6 +:10CB700075FC00202071012060712B21E170207074 +:10CB800010BD70B59E4C217829B1BDE870403F21A1 +:10CB90000F2001F00EBB90F90000042816D00328E6 +:10CBA00014D098B1011D11D010F1080F0ED010F162 +:10CBB0000C0F0BD010F1100F08D010F1140F05D08E +:10CBC00010F1280F02D01220207103E0002506F09A +:10CBD0005EFA25713F20E07001206071207070BD09 +:10CBE00010B5874C217829B12A21BDE810400F20CB +:10CBF00001F0DFBAA31D012200F110010FF09BFA32 +:10CC0000002020710F20A0702A20E07001206071A8 +:10CC1000207010BD2DE9FF41794C207828B14621C4 +:10CC20000F2001F0C6FABDE8FF814FF0000884F83C +:10CC30000680B4F85600ADF8040002A9FFF725FC01 +:10CC400020B1002101A8FFF7D4FCE8BBBDF8040027 +:10CC5000ADF8000002A980B2FFF717FC00B1FFDFBA +:10CC6000BDF8000002F074FA050000D1FFDF28468D +:10CC7000039F01F005FD80F0010697F86950BDF8AB +:10CC8000000002F053FA070000D1FFDF384601F040 +:10CC9000F0FC80F0010255EA020019D0A179BDF83C +:10CCA000000004EB410108815549A3791831585C13 +:10CCB00065F300005854A37962F341005854A279F7 +:10CCC00066F38200505400E00DE0A079401CA07192 +:10CCD00000216846FFF78DFC28B9BDF80000BDF8BB +:10CCE00004108842B6D1012084F804806071462186 +:10CCF000E170207097E770B5414C0546207828B167 +:10CD0000BDE8704042210F2001F053BA09F071FCD8 +:10CD1000052804D0284609F00DFA002000E00C2078 +:10CD20002071012060714221E170207070BD70B5EA +:10CD3000334C0546207828B1BDE8704052210F20C1 +:10CD400001F037BA09F076FA80B10AF09DFB68B1BC +:10CD50002878012800D000200DF075FE00202071F9 +:10CD6000012060715221E170207070BD0C20F6E747 +:10CD700010B5234C207828B10E21BDE810400F20BB +:10CD800001F017BAA11D002006F088FF00202071D5 +:10CD9000012060710E21E170207010BD70B5184C3B +:10CDA0000546207828B1BDE8704040210F2001F0F1 +:10CDB00000BA01F00BFA38B10C202071012060712B +:10CDC0004021E170207070BD2946002006F053FF1D +:10CDD0000020F2E770B50A4C0546207828B1BDE87E +:10CDE00070403E210F2001F0E4B909F023FA10B998 +:10CDF0000AF04AFB90B128780AF0BFF8287803E0DF +:10CE0000180600204C00002008F045F90020207191 +:10CE1000012060713E21E170207070BD0C20F6E7AA +:10CE200070B5FF4C0546207828B1BDE87040172149 +:10CE30000F2001F0BEB901F0C9F938B10C20207102 +:10CE4000012060711721E170207070BD294601201A +:10CE500006F011FF0020F2E738B5F14D04462878BE +:10CE600028B1BDE838404B210F2001F0A2B922794A +:10CE700061798A4215D0A079E379984211D01F2AAE +:10CE80000FD81F290DD80022114610F0B1FD40B96E +:10CE90000022E079114610F0ABFD10B9207A072886 +:10CEA00001D9122015E04FF6FF70ADF8000009F02F +:10CEB0005DFCA8B909F060FC90B909F09AFB78B95B +:10CEC00000216846FFF795FB50B1204605F0F8FFBA +:10CED00000202871012068714B21E970287038BD4D +:10CEE0000C20F6E72DE9FC47CD4C054694F82E00C2 +:10CEF00028B12821102001F05CF9BDE8FC8728202A +:10CF000084F83000012184F82E10A8784FF0000931 +:10CF10001A2825D00EDC162831D2DFE800F0303098 +:10CF20003030302130303030303030303030303010 +:10CF3000302121212A2822D00BDCA0F11E000C2850 +:10CF40001DD2DFE800F01C1C1C1C1C1C1C1C1C1C23 +:10CF50001C0D3A38042812D2DFE800F01102110249 +:10CF60002888B0F5706F0AD21F20884684F82F00F9 +:10CF700028886946FFF789FA18B1022019E01220C3 +:10CF800017E09DF80000019F002806D007F1F60782 +:10CF9000019E05D106F1DD0604E007F1DC07F7E7A5 +:10CFA00006F1F706684601F034F908B1387818B18F +:10CFB0000C2084F82F00A0E787F80080A878307054 +:10CFC00084F82F90684601F02FF996E77CB5944CD1 +:10CFD0000546207820B125210F2001F0EAF87CBD1C +:10CFE00028886946FFF751FA002160B102202071BC +:10CFF000A1602173E1800F20A0702520E070012046 +:10D00000607120707CBD019A1046503282F83E104B +:10D010008368A360037B237392F83E30002BF5D125 +:10D020002888E080E7E710B540B10478406813B184 +:10D03000B0F8440003E0B0F8460000E0FB201B29F4 +:10D0400008D3814206D8B2F5A47F03D340F6480046 +:10D05000824201D9122010BD002010BD70B5704C65 +:10D060000546207828B1BDE870404D210F2001F021 +:10D07000A0B8012666711F2020710F20A0704D20DE +:10D08000E0702670EA88A98833460020FFF7CBFFBE +:10D0900030B900236A8829881846FFF7C4FF08B111 +:10D0A000207170BD04F8426FA888E080E888208174 +:10D0B000288860806888A0800020207004F83E0CDA +:10D0C00070BD7CB5564D0446287820B13A210F201A +:10D0D00001F06FF87CBD01266E711F2028710F20B2 +:10D0E000A8703A20E8702E7020886946FFF7CDF9C5 +:10D0F00008B102200DE0A288618801236846FFF78D +:10D1000092FF30B9A288618800236846FFF78BFF41 +:10D1100008B128717CBD9DF80010002000290199FC +:10D120000988E9802871019918D081F81961019A5C +:10D130006188A2F81E11019AA188A2F82011019A13 +:10D140006188A2F81A11019AA188A2F81C1101990C +:10D1500081F81861019981F819017CBD81F8F160AD +:10D16000019A6188A2F8F610019AA188A2F8F81035 +:10D17000019A6188A2F8F210019AA188A2F8F4102D +:10D18000019981F8F060019981F8F1007CBD70B5DA +:10D19000234C0546207828B1BDE870403C210F2083 +:10D1A00001F007B8012666710F20A0703C20E070E6 +:10D1B00026706A88298833460020FFF734FF30B98B +:10D1C00000236A8829881846FFF72DFF08B12071CF +:10D1D00070BD04F8426F288860806888A080288825 +:10D1E000E080688820810020207004F83E0C70BD2B +:10D1F00070B50B4D287828B1BDE870403B210F2059 +:10D2000000F0D7BF95F842002C1D00B1FFDFB5F844 +:10D2100048006080B5F84A00A0800120607001E0FD +:10D2200018060020002121700F21A9703B21E97010 +:10D23000287070BD70B5FE4D287828B1BDE87040EB +:10D240003D210F2000F0B5BFFB262C1DEE8030469F +:10D2500000F0ABFFA080E680304600F0A6FF208102 +:10D2600001206070002121700F21A9703D21E9701B +:10D27000287070BD2DE9FC41ED4C064694F82E0057 +:10D2800028B11021084600F094FFBDE8FC811F2062 +:10D2900084F82F00102084F83000012784F82E70C5 +:10D2A00030886946FFF7F1F878B9684600F0B1FFB9 +:10D2B00058B1019D9DF8000050350028019806D016 +:10D2C00000F58570017841B904E0022006E0D0F84D +:10D2D000E400F7E795F8351019B13A2084F82F00EB +:10D2E000D3E795F8361089070CD1042101709DF819 +:10D2F000000020B901993088D1F8E41048806846D0 +:10D3000000F092FF002084F82F0085F83570BCE70C +:10D310002DE9F041C64C0546207828B1BDE8F04122 +:10D320001D210F2000F045BF1F20207101206071DA +:10D330001D21E170207009F05CF90C2604283CD016 +:10D3400005283AD0A9791220012904D019B102295F +:10D3500001D0032926D1297809B1012922D1E979FF +:10D3600029B1012903D0022901D003291AD16988E2 +:10D3700043F6FD720B1F3020934213D2AB881B1F64 +:10D3800093420FD22187A88860870027A87907F0E9 +:10D39000BCFD90B1E87907F00FFE2878012804D091 +:10D3A00030B10CE02071BDE8F0810021022001E0E5 +:10D3B0000021012007F02FFE08B12671F3E7277145 +:10D3C000F1E770B59A4C217829B1BDE870401E2173 +:10D3D0000F2000F0EEBE1F212171012161711E227C +:10D3E000E270217002781221012A00D01AB9407827 +:10D3F00018B1012801D0217170BD00260C25012A29 +:10D4000008D009F0F6F8052802D008F0D0FD40B1A8 +:10D41000257170BD07F090FD618F208F08F017FF18 +:10D42000F5E7267170BD2DE9F047814C0746B0F84D +:10D430004600B4F844500E46854200D3054600F03D +:10D44000B4FE0146B4F84600814203D8B7F846005E +:10D4500000F0ABFE8046A146B4F84840B7F844005F +:10D46000844200D3044600F0A0FE0146B9F84A0009 +:10D47000814203D8B7F8440000F097FE4FF4A4723D +:10D480001B2C01D0904203D11B2D08D0904506D013 +:10D49000F580A6F808807480B08001203070BDE867 +:10D4A000F0872DE9FC5F0546AFF6C421604ED1E957 +:10D4B00000A196F82E00884628B1BDE8FC5F212126 +:10D4C000102000F076BE1F2086F82F00212086F85D +:10D4D00030004FF0010B86F82EB0284600F0B2FE67 +:10D4E000002811D109F085F805280CD009F081F841 +:10D4F000042808D096F8340028B907F0AEFAA0F551 +:10D500007F41FF3901D00C20D0E0062101A801F0B5 +:10D510007BFC04007ED003210EF044FCB6F85400DE +:10D52000A4F84400B6F85400A4F8460096F84D005C +:10D530000090B6F8541096F84C3020880A4601F056 +:10D5400040FD042867D000B1FFDF208806F024FBEF +:10D5500004F10D07B4F800900421384604F07EFF72 +:10D56000494638460EF05BFD32A03F1D0068009032 +:10D570000321684604F0FDFE002069460A5C3A5427 +:10D58000401CC0B20328F9D3288A6080688AA08032 +:10D59000A88AE08096F84F2096F84E1020460EF0AC +:10D5A000E2FE014620460EF017FF4FF0000984F816 +:10D5B000569084F857904F46687900F0EFFD6076FA +:10D5C000D5F80600C4F81A006889E083C4F808A0FA +:10D5D00084F80C8084F8ECB004F1F0012046FFF7E9 +:10D5E00022FF8DF800700121684604F0C2FE9DF80C +:10D5F000000000F00701C0F3C1021144C0F3401065 +:10D6000008448DF80000401D2076092801D208301A +:10D61000207601E017E018E0002120460EF0C2FB62 +:10D62000287B07F072FCC0B107F086FC697903E043 +:10D6300018060020112233002879AA1D07F0C7FC24 +:10D64000070016D022E0092030E02088062101F0F2 +:10D650001CFC00B1FFDF072028E0208806F09DFABF +:10D660002088062101F011FC00283FF44CAFFFDFB9 +:10D6700049E72146032007F0CEFC070006D16A885F +:10D680002988204608F095FD07000CD0208806F078 +:10D6900084FA2088062101F0F8FB00B1FFDF86F84C +:10D6A0002F70BDE8FC9F484684F8E09086F82F0074 +:10D6B000F7E738B5FD4C207820B122210F2000F08B +:10D6C00078FD38BD1F202071012565712220E07092 +:10D6D000257094F8340010BB08F08BFF052805D0A6 +:10D6E00007F0BBF9A0F57F41FF3918D00020207169 +:10D6F000684608F0E2FD0028E3D10098008806F0B3 +:10D700004CFA00980621008801F0BFFB00B1FFDF52 +:10D71000E74884F834500078FCF760FC38BD0C20F2 +:10D72000207138BD2DE9F041E04D044695F82E00FA +:10D7300028B1BDE8F0412321102000F03ABD1F20A0 +:10D7400085F82F00232085F83000012085F82E0071 +:10D75000618840F67B438A1F30209A4251D2A288CA +:10D76000961F9E424DD291424BD8E188B1F5FA7F87 +:10D7700047D2218940F67746A1F10A03B34240D24D +:10D78000B1EBD20F3DD96189A289914239D84FF0CE +:10D7900000082088062101F066FB06004FF0020712 +:10D7A00007D000F028FD20B1D6F8E400017839B99F +:10D7B00002E085F82F70F6E5D6F81011097809B166 +:10D7C0003A201EE005218171D6F8E4004146A0F818 +:10D7D0000880D6F8E420A0885081D6F8E420E088BC +:10D7E0009081D6F8E4202089D081D6F8E40002891F +:10D7F00043899A4204D88279082A01D89A4203D3ED +:10D80000122085F82F00CEE522884280D6F8E40069 +:10D81000077085F82F10C6E52DE9FE43A34C064698 +:10D82000207830B103B02421BDE8F0430F2000F090 +:10D83000C0BC012565712420E070257030460EF0D3 +:10D8400010FC08B1002000E01220207100282BD12C +:10D8500084F83C503068C4F83D00307984F84100C9 +:10D860004FF0000884F83C806946062001F087FAF2 +:10D8700000B1FFDF684601F060FA98B9BDF80470A6 +:10D88000BDF80400062101F0EEFA060000D1FFDF2A +:10D8900086F8EC50684601F050FA18B9BDF804005B +:10D8A000B842EDD184F80480BDE8FE8370B57F4DA9 +:10D8B000064695F82E0028B1BDE8704026211020BC +:10D8C00000F077BC1F2085F82F00262085F8300057 +:10D8D000012085F82E003088062101F0C4FA0400EA +:10D8E00007D000F088FC20B1D4F8E400017831B909 +:10D8F00001E002200CE0D4F81011097809B13A20B7 +:10D9000006E005210170D4F8E4103088488000203A +:10D9100085F82F0070BD6548017819B106210F20E8 +:10D9200000F047BC002202710F2181700621C170F6 +:10D93000C0F80620C0F80A20F1218171012141714F +:10D94000017070472DE9F041584D064695F82E00BC +:10D9500028B1BDE8F0412C21102000F02ABC1F2086 +:10D9600085F82F002C2085F83000012085F82E0046 +:10D970003088062101F077FA040007D000F03BFC64 +:10D9800020B1D4F8E410087830B901E0022026E094 +:10D99000D4F81001007808B13A2020E08C2000274C +:10D9A000005D10F0010F19D0D6F802004860D6F8DB +:10D9B0000600886054F8E40F718910228181206884 +:10D9C00006F10C010E3010F0C9FC2168032008702C +:10D9D00021683088488085F82F70E4E40C2085F8B1 +:10D9E0002F00E0E470B5314D04460C26287828B1AC +:10D9F000BDE8704018210F2000F0DBBB08F0B6FE38 +:10DA000003284BD008F0B8FE032847D0A07908B10E +:10DA100001282DD1607928B1012803D0022801D036 +:10DA2000032825D1A07B28B1012803D0022801D0EA +:10DA300003281DD1607BD8B1C00819D162884FF48A +:10DA40008040824202D82188814203D9207901286E +:10DA50000ED118E0207930B1012814D0022805D069 +:10DA6000032805D102E0202A0BD30CE0A0290AD21A +:10DA70002079042805D12088202802D36188884293 +:10DA800001D912260AE0607906F070FA30B12079E7 +:10DA900085F83600204606F0D3FA064601202E719E +:10DAA00068711821E970287070BD00001806002008 +:10DAB0004C00002010B5FE4C217829B11A21BDE898 +:10DAC00010400F2000F075BB01781F2902D91220E9 +:10DAD000207106E0002121710278411C104606F0F9 +:10DAE00026FB012060711A21E170207010BD10B575 +:10DAF000EF4C217829B12021BDE810400F2000F023 +:10DB000058BB01781F2902D91220207106E000219C +:10DB100021710278411C104606F0F8FA012060716C +:10DB20002021E170207010BD2DE9FC41E04C2178EE +:10DB300029B1BDE8FC411B210F2000F03ABB0127B1 +:10DB400067710C21217100780026012804D000287B +:10DB500079D01220207190E006F0D2F9002819D077 +:10DB600006F017FA94F83600A8B1012813D004285B +:10DB700011D008F001FE00287FD108F0F7FD18B1A0 +:10DB800008F0F4FD022878D1002009F0F9F900B17D +:10DB9000FFDF267171E008F0E9FD00286DD108F083 +:10DBA000EBFD002869D106F036F9A0F57F41FF3979 +:10DBB00063D1072101A801F027F9BE490546886015 +:10DBC000280000D1FFDF032128460DF0EDFF284695 +:10DBD00006F0E1FB34F8540FA5F8440034F80409CA +:10DBE000A5F84600E278A17828460EF027FC014609 +:10DBF000002228460EF05BFC6078009014F8043B8D +:10DC0000288834F854190A4601F0DBF980B1042859 +:10DC100000D0FFDF2888072101F037F900B1FFDFCE +:10DC20000720207105F58C712846FFF7FCFB24E0E6 +:10DC3000288805F0B1FF284609F0A2F900B1FFDFFE +:10DC40002671EFE7FFE708F091FD032803D008F005 +:10DC500093FD032811D108F08CFD0546002009F042 +:10DC6000B2F850B9267145B1288805F096FF28888A +:10DC7000072101F00AF900B1FFDF1B20E0702770D7 +:10DC8000BDE8FC812DE9F041894C0646207828B199 +:10DC9000BDE8F0412D210F2000F08BBA308807211C +:10DCA00001F0E1F805004FF0010720D095F8F900E8 +:10DCB00040B995F85C00112801D0122802D195F8DE +:10DCC000360150B10C2020710F20A0702D20E07083 +:10DCD0003088E080677127706DE51022B11C05F176 +:10DCE000FA0010F03BFB85F8F9700020EBE702200A +:10DCF000E9E770B56E4C0546207828B1BDE8704064 +:10DD00002E210F2000F055BA2888072101F0ABF82A +:10DD1000022178B190F8F9202AB990F85C20112AF4 +:10DD200004D0122A02D00C20207104E080F8F910EF +:10DD30000020F9E721710F20A0702E20E0702888C4 +:10DD4000E080012060712070AEE62DE9FC47584C60 +:10DD50000646207828B138210F2000F02AFABDE8C5 +:10DD6000FC8770884BF68032122190420AD848B165 +:10DD70004FF0000830886946FEF787FB20B102208B +:10DD8000207110E021710EE0019800F15009851C0E +:10DD90002F887288394648460DF0FCFE2888B84224 +:10DDA000F6D184F80480012060713821E170207080 +:10DDB000D5E77CB53E4C0546207820B145210F20A3 +:10DDC00000F0F7F97CBD28886946FEF75EFB38B1A4 +:10DDD00002202071012060714521E17020707CBD1E +:10DDE00001987F22014680F8582080F859200022AF +:10DDF00080F85A20A87801F8280FE8784870287928 +:10DE000088702271E6E71CB5294C217821B11321D5 +:10DE10000F2000F0CEF91CBD00886946FEF735FBE7 +:10DE200008B1022005E0019890F82810012902D0DD +:10DE30000C20207106E0582100222271095C217219 +:10DE40000088E080012060711321E1700F21A17032 +:10DE500020701CBD2DE9F041154C0546207828B1F5 +:10DE6000BDE8F04143210F2000F0A3B9A87808B124 +:10DE7000012803D1A888B0F5FA7F01D912202071BA +:10DE80002888072100F0EFFF0126C8B1002780F89D +:10DE9000F070A988A0F8F21080F8CC60A978012968 +:10DEA00000D0002180F8F01090F8CD0030B103E0F0 +:10DEB000180600204C00002009F0AEF9277101E09F +:10DEC0000220207166714320E070267073E42DE912 +:10DED000F041FE4C0546207828B1BDE8F0414821CC +:10DEE0000F2000F066B92888072100F0BCFF01234D +:10DEF00058B382886D88C688418803EB4207BD42CB +:10DF000017D342F210777E43BF107943B6FBF1F18D +:10DF1000491E89B24FF4FA76B14200D931468D429A +:10DF200000D22946491C521CB1FBF2F15143491E53 +:10DF30008AB290F8221101B90284E2800020207197 +:10DF400063714820E070237035E40220F7E770B574 +:10DF5000DE4C0546207828B1BDE8704049210F20ED +:10DF600000F027B92888072100F07DFF90B1A9783B +:10DF700011F0010180F8CF1004D090F8CD0008B165 +:10DF800009F04AF900202071012060714921E170F7 +:10DF9000207089E50220F6E770B5CC4C0546207864 +:10DFA00028B1BDE8704041210F2000F002B908F00F +:10DFB000DDFB08B10C2017E0297889B10A290FD0C0 +:10DFC00014290DD01E290BD0282909D0322907D0B9 +:10DFD0004B2905D0642903D0FF2901D0122003E08A +:10DFE000284609F08AF80020207101206071412143 +:10DFF000E170207058E5B5490A781AB14E210F201A +:10E0000000F0D7B8427862B1827852B1C27842B19A +:10E01000027932B1C2881B2A03D303781BB1012BCA +:10E0200001D0122007E0A1F854200278D0F80100B6 +:10E0300042B1086500200871012048714E22CA7063 +:10E0400008707047C864F5E710B5A04C207828B177 +:10E050004F21BDE810400F2000F0ABB808F0EAF8FF +:10E0600040B109F011FA28B10AF05CFC0BF054FD44 +:10E07000002000E00C202071012060714F21E17030 +:10E08000207010BD10B5914C207828B15021BDE80A +:10E0900010400F2000F08DB808F0CCF840B109F026 +:10E0A000F3F928B10AF04DFB0BF03AFD002000E037 +:10E0B0000C202071012060715021E170207010BD92 +:10E0C00070B5824C0546207828B1BDE870405121DA +:10E0D0000F2000F06EB8287800F0010008F018F961 +:10E0E000287800F0010009F060F80020207101207C +:10E0F00060715121E1702070D6E470B5734D044613 +:10E10000287828B1BDE870404C210F2000F051B8AC +:10E1100000F05CF808B10C200DE0601C0DF0E4FB91 +:10E12000207800F0010005F030FF207800F00100B9 +:10E1300006F0FEFE00202871012068714C21E97074 +:10E140002870B1E470B5614C0546207828B1BDE86F +:10E1500070404A210F2000F02CB808F007FB10B9DE +:10E1600008F00AFB08B10C2003E0287805F0EFFF67 +:10E1700000202071012060714A21E170207093E439 +:10E1800010B50178532907D2514A52F8211019B11C +:10E19000801C8847012010BD002010BD18B1022846 +:10E1A00001D00120704700207047C000703080B25D +:10E1B0007047464A92F83130002B06D182F832007F +:10E1C00082F83310012082F83100704710B508F052 +:10E1D00010FA04280DD008F00CFA052809D008F030 +:10E1E000C5FA032805D008F0C7FA032801D000209B +:10E1F00010BD012010BD90F8691041B990F8C01011 +:10E2000029B190F8C000042801D0012070470020F7 +:10E2100070470178406821B190F8690010B1002082 +:10E220007047E8E7012070470178012909D140686B +:10E2300090F8CD10002904D0002180F8CD1008F00E +:10E24000EBBF704710B5038843F6FD711A1F8A4271 +:10E2500023D24288141F8C421FD29A421DD8C289F1 +:10E2600040F67B43911F994217D2018A8C1F9C4232 +:10E2700013D28A4211D8428AB2F5FA7F0DD2828A2D +:10E2800040F67744A2F10A03A34206D2B2EBD10FC3 +:10E2900003D9C18A028B914201D9302010BD017986 +:10E2A00011B1012910D107E0417929B1012903D029 +:10E2B000022901D0032907D1007B58B1012809D0D8 +:10E2C000022807D0032805D0122010BD1806002010 +:10E2D00040E801000020F8E73F3070470844C01DC7 +:10E2E000424301F13F00104480B2704770B51D46B3 +:10E2F0000446A818049BC01D00FB03F205F13F0073 +:10E30000104486B2B14238BFFFDF1E21204610F014 +:10E310009CF8A6F11E0080B2A5756080B0F5004F94 +:10E3200088BFFFDF608805F13B01884238BFFFDF0F +:10E330006088401BA0F13B011B2934BF1B203B38E8 +:10E34000208070BD408870472DE9F04F0D46C18890 +:10E35000044600F11E08008921F4004320F4004225 +:10E3600021F4004620F400474FF0010A4FF0000965 +:10E370009A4208D100F4004001F4004188421CBFD9 +:10E380000020BDE8F08FB7420BD9A17DB81B401A21 +:10E39000C01F85421BDC08EB060000210580418080 +:10E3A0001EE06088A17D801B401AB0F1070B0ED4DF +:10E3B000BBF11B0FB8BFFFDF5D45D4BF29461FFA75 +:10E3C0008BF1681A0204120C18BFBA4204DD84F8FB +:10E3D00014900020BDE8F08F08EB06000180428019 +:10E3E00084F814A0BDE8F08F2DE9F041044600F157 +:10E3F0001E02C08820F40043207D002808BFBDE82D +:10E40000F081D0180288438813448B423CBF00201F +:10E41000BDE8F081002791429CBF0180478013D95D +:10E42000891A0D042D0C45800ED0E088A61D20F41D +:10E430000040854288BFFFDF30884FF4004121EA69 +:10E4400000002843308009E0A27D0088D31D1044DD +:10E45000C01D81B26288A01D00F044FB2775012019 +:10E46000BDE8F08130B4B0F804C0C488034600F1C0 +:10E470001E052CF400402844A44503D10020188236 +:10E4800030BC7047B3F80CC00488A44509D3408859 +:10E49000ACEB040CA0EB0C0084B20CEB0500C01E2E +:10E4A00006E0A4EB0C049D7DA4B2AC446044001DC6 +:10E4B000B1F800C0A44588BF0C80B3F80CC0BCF113 +:10E4C000000F0CBF4FF0010C4FF0000C82F800C0A1 +:10E4D0000988198230BC70472DE9F041044600F1EB +:10E4E0001E01808820F400404518208A002808BFBB +:10E4F000BDE8F081A189084480B2A08129886A889A +:10E500001144814238BFFFDF28886D88A2894119F4 +:10E510000027914219D175B1A088261D20F4004032 +:10E52000A84238BFFFDF30884FF4004121EA0000E5 +:10E530002843308008E0A27D1044C01D81B2D31D65 +:10E540006288201D00F0CEFAA78127820120BDE855 +:10E55000F0812DE9F0474189B0F804800027044696 +:10E5600000F11E0A414518BF4FF400493AD000BFE0 +:10E5700021F40040504446886EB1608904F10A05D8 +:10E5800020F40040B04238BFFFDF288829EA0000AD +:10E590003043288021E0A37D008803F1070C184454 +:10E5A0006389C01D23F400456288284480B204F1C9 +:10E5B0000A0190420BD2121A92B20CF11B0C624566 +:10E5C0002CBF03F4004229EA030004D204E0801ABD +:10E5D00080B229EA030210430880781C618987B25F +:10E5E0004145C5D13846BDE8F0872DE9F047B0F880 +:10E5F00008800B46044600F11E01B0F80A9080889E +:10E6000028F4004C01EB0C05804504BF0020BDE858 +:10E61000F087002A1CBF281D106023B1A27D291D90 +:10E6200018460FF09BFE2F886D888DB1E81987B2D0 +:10E63000208904F1080620F40040A84238BFFFDF1B +:10E6400030884FF4004121EA00002843308009E07F +:10E65000A07D6288C119C91DC31D89B204F10800DB +:10E6600000F040FAC84504BF208960813846BDE803 +:10E67000F0878188C08881420CBF0120002070474C +:10E680008188008988420CBF01200020704730B487 +:10E690008488C28800F11E0324F4004C22F4004157 +:10E6A000634494421BD08289048A15191C885A88B5 +:10E6B000A3189D4216D312B18A4210D212E0837D74 +:10E6C0000CF1070C1A196244408892B2801A80B289 +:10E6D0002233984201D211B104E08A4202D130BC07 +:10E6E0000020704730BC012070472DE9F007B0F8DA +:10E6F00006C0048900F11E0702462CF400457E196D +:10E7000024F400492CF4004A002024F400434FF084 +:10E710000108D1450AD104F400440CF4004C6445CE +:10E7200004D05082BDE8F00700207047AB4207D903 +:10E7300092F816C05B1BA3EB0C03DC1F002308E060 +:10E74000B2F802C0947DACEB050CACEB040CACF160 +:10E750000704002CE5DBB2F80EC0BCF1000F0DD0B1 +:10E76000B6F800C075884DB15B1B50758B42D8DB85 +:10E77000D0893844A0EB0C00C01E09E0A4EB0C04C7 +:10E7800050758C4208DB907DD38918443044001DBD +:10E790005182BDE8F00770478B42A8BF82F8158010 +:10E7A000E6DABEE72DE9F05F044600F11E0AC088F4 +:10E7B000934620F400400AEB0005608A894608B1C0 +:10E7C000484502D20020BDE8F09FE089002804BF40 +:10E7D0004FF00008464607D0B5F800806E8808EB79 +:10E7E0000601884218BFFFDF607D4FF0000750EA46 +:10E7F000060101D048B332E0E08938B1A17D01447F +:10E800004819B4F817108180617E8171E18908EBA5 +:10E8100009004944E18128806F80BBF1000F0BD0D3 +:10E82000A07D2988C31D0144C91D89B26288A01D2D +:10E8300000F058F9E78137E0A07DE18908442844D9 +:10E840008188A4F8171080792DE0E089B4F81710BA +:10E850005044A0EB080020F8031D617E817006EB98 +:10E86000090086B2E089BBF1000F4844E081A5F8B9 +:10E8700000806E800ED0E088A51D20F40040B042DC +:10E8800038BFFFDF28884FF4004121EA0000304301 +:10E890002880CFE7E0895044A0EB080030F8031D42 +:10E8A000A4F8171080786076678227750120BDE88C +:10E8B000F09F01461E308A88CB8822F4004C6044C9 +:10E8C0009A4203D08989002908BF70470020704709 +:10E8D00000F11E03807D01F1040C60441060088883 +:10E8E000002804BFD81E106008884988084480B2F8 +:10E8F00070472DE9F04115460A4600F11E061C46F8 +:10E90000807D131D034410885788069900281CBF7A +:10E91000C01C80B226D088429CBF081A80B213D98E +:10E92000401AA042A8BF20461FFA80F85818424655 +:10E9300029460FF0E7FC002818BFBDE8F0814544E8 +:10E94000A4EB080084B2002001198F423CBF4FF0B5 +:10E95000FF30BDE8F081304422462946BDE8F04151 +:10E960000FF0D0BCFA1C97B2F61ED4E72DE9F041A7 +:10E9700000F11E071D46807D0B1D034416460888C6 +:10E980000024B1F80280069A00281CBFC01C80B287 +:10E990001FD090429CBF101A80B20DD9801AA84295 +:10E9A000A8BF284684B29918224630460FF0D6FCFC +:10E9B000281B85B2264400204119414506D8391844 +:10E9C0002A4630460FF0CAFC601984B22046BDE8E2 +:10E9D000F08108F103011FFA81F8FF1ED9E72DE944 +:10E9E000F04116460A4600F11E071D46807D131DA4 +:10E9F000034410880024B2F80280069900281CBF46 +:10EA0000C01C80B21FD088429CBF081A80B20DD9AA +:10EA1000401AA842A8BF284684B258182246314658 +:10EA20000FF09CFC281B85B226440020411941456B +:10EA300006D838442A4631460FF090FC601984B25B +:10EA40002046BDE8F08108F103021FFA82F8FF1E9C +:10EA5000D9E770B5044600F11E01C288808820F411 +:10EA600000431944904205D0A289002A04BF228A9B +:10EA7000002A01D0002070BDB1F800C04D8885B1DA +:10EA8000261D20F40040A84238BFFFDF30884FF435 +:10EA9000004121EA0000284330800020208201202C +:10EAA00070BDA07D0CF10701C31D084481B26288CE +:10EAB000201D00F017F8F0E70021C1814175418267 +:10EAC0000175704703881380C289002A04BF0020A3 +:10EAD0007047C28800F11E0322F400421A440A6003 +:10EAE000C089704710B4B0F800C02CF40044214431 +:10EAF00089B24FF4004491420AD2521A92B21B33A7 +:10EB00009A422CBF0CF4004224EA0C0104D204E027 +:10EB1000891A89B224EA0C021143018010BC7047A3 +:10EB20002DE9F04188464FF6FC7102F103021E46C2 +:10EB3000040002EA010509D00027E01C20F00300D0 +:10EB4000A04200D0FFDF201D01210CE00127F4E7E7 +:10EB5000024628442FB9B14201D2034600E0002307 +:10EB60001360491CC9B2B142F2D9011BC8F80010A8 +:10EB7000002F04D10EB1201D00E000202060BDE870 +:10EB8000F081024600201168002902D00846096879 +:10EB90001160704702680A60016070474FF6FC73AD +:10EBA000C91C1940101A001F90FBF1F0C0B2704749 +:10EBB0004FF6FC73C91C1940001D01FB0200704791 +:10EBC000F8B5D24D04460E46A878A04200D8FFDF23 +:10EBD00005EB8607B86A50F8240000B1FFDFB8687B +:10EBE000FFF7CFFF05000DD0B86A062E40F824507D +:10EBF0000AD0082E00D3FFDFC548294650F826204A +:10EC0000204690472846F8BDC048C24B7A30A0F154 +:10EC10002E0200902946204609F0E6FCF2E72DE995 +:10EC2000F84F8046DDF828901E4603EB0900934616 +:10EC30008A46C4B25FEA080707D00025FF2800D93A +:10EC4000FFDFBAF1000F03D101E00125F6E7FFDF96 +:10EC500008F1030020F00301414500D0FFDFCB4560 +:10EC600000D9FFDF65B9A94A00204C324FF6FF7189 +:10EC700010705180A74A1070A44A7A3210705180E7 +:10EC8000A24880F800B046708470C470047144716A +:10EC900080F80690DFF878B2C67100260BF1400BC1 +:10ECA0008146FF1C27F003000746002D02D109EB27 +:10ECB000860188603BF8162019F8063001D04FF025 +:10ECC00000006946FFF72CFF0098761CF6B2074457 +:10ECD000082EE6D3FF1C27F003002346064675B135 +:10ECE000002002226946FFF71BFF00983118002020 +:10ECF00003464E46C91C21F003021DB110E0C9F8BD +:10ED00004800EEE706EB80070021BA6206E000BF8C +:10ED1000D7F828C04CF82130491CC9B2A142F7D31A +:10ED2000401CC0B202EB84010828E3D3A1EB080029 +:10ED3000AAF800000020BDE8F88F10B5044603F0E3 +:10ED400005FF08B1102010BD2078704A618802EBE1 +:10ED5000800092780EE0836A53F8213043B14A1C58 +:10ED60006280A180806A50F82100A060002010BD60 +:10ED7000491C89B28A42EED86180052010BD70B569 +:10ED800005460C46084603F0E1FE08B1102070BDB0 +:10ED9000082D01D3072070BD25700020608070BD54 +:10EDA0000EB56946FFF7EBFF00B1FFDF6846FFF7DE +:10EDB000C4FF08B100200EBD01200EBD10B50446F1 +:10EDC000082800D3FFDF5148005D10BD3EB5054661 +:10EDD00000246946FFF7D3FF18B1FFDF01E0641C90 +:10EDE000E4B26846FFF7A9FF0028F8D02846FFF7ED +:10EDF000E5FF001BC0B23EBD44498978814201D97C +:10EE0000C0B27047FF2070472DE9F0410C4605461F +:10EE1000062901D0072C10D13C4FB86CFFF7B1FE8A +:10EE200002004FF6FF7604D00221B86CFFF7B6FE61 +:10EE300000E030462880B04202D10020BDE8F081D9 +:10EE40002146FFF7BDFE040002D1288800F050F8EB +:10EE50002046F3E7A0F57F42FF3A01D0082901D30D +:10EE600000207047ACE6A0F57F42FF3A0BD008299E +:10EE700009D2264A9378834205D902EB8101896A37 +:10EE800051F820007047002070472DE9F0410446FA +:10EE90000D46A4F57F4143F20200FF39CED0082D84 +:10EEA00001D30720CAE719494FF000088A78A24227 +:10EEB000C4D901EB85072146BA6A52F82460002EB6 +:10EEC000BCD0134A08462032314652F825209047DC +:10EED000B96A062D41F8248001D0072D02D12046C1 +:10EEE00000F006F83146B868FFF754FE0020A5E7A9 +:10EEF00010B5064CC2B20221A06CFFF759FE0146C4 +:10EF0000A06CBDE81040FFF745BE0000740600206D +:10EF10008CE901005800002001469F48002200684B +:10EF20000260037A00EB830040F80C2F81801146C9 +:10EF300000F022B92DE9F05F9846DDF830B0DDF839 +:10EF400028A01546894604004FF0000623D000276C +:10EF5000E01C20F00300A04200D0FFDF65B30120D9 +:10EF6000FFF7BAF900FB05620AEBCB001618012087 +:10EF7000FFF7B2F900FB05620B9805EB450108EBC2 +:10EF8000C000104400EB4100143000EB850000EBA2 +:10EF9000850617B110E00127DAE77F48A6EB850761 +:10EFA000A9000460257204F10C000C3F60600FF0B2 +:10EFB0006EFAB8B2FFF7B0FF0020C9F80060BDE8F4 +:10EFC000F09F2DE9FF4F744C814681B020689A462E +:10EFD0008B4600B9FFDF2068027A4A4503D94268B0 +:10EFE00052F8291021B143F2020005B0BDE8F08FBC +:10EFF000006800B9FFDF01210E9A0398FFF76EF950 +:10F00000C61C4FF6FC752E40584601215246FFF7AC +:10F0100065F9C01C00EA050808EB0600001D85B272 +:10F020005D4800270068046801E027460446206820 +:10F0300038B1A188A942F8D13946204600F0A4F899 +:10F0400013E005F10800A18880B2814229D3394636 +:10F05000204600F099F8A0880022411B6019026048 +:10F060008180394600F088F8A580A08860802680DD +:10F07000251D0E9F0123039A314628460097FFF76E +:10F0800035F92088414628445A460123CDF800A08E +:10F09000FFF72CF9404800684168002041F82940FA +:10F0A000A3E70420A1E770B53B4C0546206800B9F2 +:10F0B000FFDF2068017AA94210D9426852F8250082 +:10F0C00060B14188002342F82530036081801946F1 +:10F0D00000F052F8216800200A7A08E043F20200AA +:10F0E00070BD4B6853F820306BB9401CC0B28242EF +:10F0F000F7D8002002E08A88104480B2096800290D +:10F10000F9D1FFF709FF002070BD70B5224D2868C6 +:10F1100000280AD0002404E02046FFF7C4FF641C46 +:10F12000E4B22868007AA042F6D870BD70B51A4ED5 +:10F1300005460024306800B9FFDF3068017AA94233 +:10F1400004D9406850F8250000B1041D204670BD68 +:10F1500070B5114E05460024306800B9FFDF3068F5 +:10F16000017AA94206D9406850F8251011B131F84A +:10F17000040B4418204670BD19B10A68026008608B +:10F18000704705490968F8E7006809B108607047E9 +:10F1900001490968FAE700006000002070B50446E4 +:10F1A00000780E4601281AD0072802D00C281AD160 +:10F1B00015E0A068216905780B2D0CD0052003F01F +:10F1C0005EFC052D0FD0782300220520D4F8101006 +:10F1D00003F0B8FB07E0782300220620F8E70520BB +:10F1E000216903F04CFC31462046BDE8704001F037 +:10F1F000A7B910B500F13902C3799478411D64F0C4 +:10F2000003042340C371DB070DD04B7954792340AD +:10F210004B710B79127913400B718278C9788A424D +:10F2200000D9817010BD00224A710A71F5E741785A +:10F23000012900D00C21017070472DE9F74F86B0ED +:10F2400000208C690D468DF8040009780127FA48E2 +:10F2500016464FF0070A4FF011094FF00A0B2A2902 +:10F2600078D2DFE811F02A00110352036903A803E2 +:10F27000B303CC03FA030F043B04620481049A0431 +:10F28000D504E604050510053005540577059C05F1 +:10F29000C605E005EE050F0627063006630685065F +:10F2A000D6060D071B074B076A0779078A07C407AD +:10F2B000FB072708E407E807ED0714B120781D28AD +:10F2C00029D0D5F808805FEA080043D001208DF8E6 +:10F2D0000400686A059003208DF808008DF809B0D5 +:10F2E000286A0390A8880028EFD098F8001091B100 +:10F2F0000F2910D27ED2DFE801F07D144CDCFDFC3A +:10F30000FBFAF9F8F7089FF6F500022822D124B19C +:10F3100020780C2801D0002770E302208DF804002B +:10F32000ACE10620696A03F0AAFBA8880728EDD1A2 +:10F33000204601F000F9022809D0204601F0FBF830 +:10F34000032808D9204601F0F6F8072803D2012047 +:10F35000207005E011E2002CB7D020780128D5D12B +:10F3600098F80400C11F0A2903D300BF85F81CB018 +:10F3700089E2A070D8F80010A163B8F80410A18742 +:10F3800098F8060084F83E000120287003202070C1 +:10F3900046E00728BAD1002C97D020780D28B5D1A7 +:10F3A00098F8031094F83B20C1F3C000C2F3C002E8 +:10F3B000104201D00E2000E00F20890707D198F8F5 +:10F3C00005100142D2D198F806100142CED194F82E +:10F3D0003D2098F8051020EA02021142C6D194F8A7 +:10F3E0003E2098F8061090430142BFD198F80400DF +:10F3F000C11F00E045E20A29B8D2617F814201D9EC +:10F400000620C2E3D8F800106160B8F8041021812A +:10F4100098F80600A072012028700E2020700320AA +:10F420008DF80400686A059004F139000290601DAF +:10F4300003901730049067E2412890D1204601F0F4 +:10F440007AF8042802D1E078C00704D1204601F000 +:10F4500072F80F289ED1A88CEF6880B24FF0400A56 +:10F46000D4F82480FFF762FE394608274246534607 +:10F470000097FFF77BFA0E208DF80400686A05906C +:10F48000606A0290002101A8FFF788FE2078042816 +:10F4900006D0A07F38B1012805D0032806D0AEE3FE +:10F4A000052020700BE284F8009034E712202070D1 +:10F4B00066E01128C1D1204601F03DF8042802D1B0 +:10F4C000E078C00719D0204601F035F8062805D1AC +:10F4D000E078C00711D1A07F02280ED0204601F0AD +:10F4E0002AF808E0AFE07DE09AE16EE14EE106E146 +:10F4F000E5E0CBE01CE011289FD1102208F10101CA +:10F5000004F148000EF02AFF607801280DD0122087 +:10F510002070E078C00703D0A07F88B301282FD0E7 +:10F5200085F800B08DF804B0F0E384F800A027E07F +:10F5300011288FD1204600F0FEFF082804D0204675 +:10F5400000F0F9FF132885D12869D8B16869C8B1DE +:10F5500004F17800102208F1010107460EF0FEFECA +:10F560002078082812D014202070E078C0070FD02F +:10F57000A07F022818D06178022912D00328CFD1A9 +:10F580000420FDE300208DF80400F6E00920EBE7FD +:10F590000B202870296901204870206CC1E90107FF +:10F5A00092E208B1012870D10B202870296981F8F6 +:10F5B00001A0606A4860206AC1E9020778E2206C15 +:10F5C000E2780068C2F34402521ED04000F001000D +:10F5D00040F0800000E000200874E06A48617CE2AE +:10F5E0000746F9E31128D0D1204600F0A4FF0A28ED +:10F5F00002D1E078C00704D1204600F09CFF152816 +:10F60000C3D1102208F1010104F148000EF0A6FE5A +:10F6100020780A2812D0162020701220287029691C +:10F620000920487004F15800486020308860103884 +:10F63000C860206C0861ACE3C4EA01000B202070B4 +:10F64000E4E22870D9E102289FD1204600F073FF40 +:10F65000042804D3204600F06EFF082809D3204672 +:10F6600000F069FF0E2890D3204600F064FF1228B6 +:10F670008BD2A07F022888D18DF80490686A05900B +:10F6800098F801008DF80800FBE36CE20228AAD18B +:10F69000204600F050FF00286FD0204600F04BFFBE +:10F6A0000128F9D0204600F046FF0C28F4D00520B0 +:10F6B0008DF8080098F801008DF8090065E7112819 +:10F6C000FCD1002CFAD020781728F7D16178E06AB5 +:10F6D000022912D05FF0000101EB4101182606EB70 +:10F6E000C1011022405808F101010EF037FE05203B +:10F6F000696A00F013FF26700DE60121ECE70B2884 +:10F70000DCD1002CDAD020781828D7D16178E06AD3 +:10F7100002292CD05FF0000101EB4101102202EB25 +:10F72000C1014158B8F8010008806078E16A0228F8 +:10F7300020D0002000EB4002142000EBC20009584A +:10F74000404650F8032F0A60406848600520696A07 +:10F7500000F0E4FE6078022810D04FF00000204452 +:10F76000407A20F001000CD14FF001010BE04FF086 +:10F770000101D1E74FF00100DCE77FE24FF001002B +:10F78000EDE74FF000012144487279E3112895D14B +:10F79000002C93D02078192890D16078E16A022853 +:10F7A00011D0002000EB40021C2000EBC200102210 +:10F7B000085808F101010EF0D1FD0520696A00F03A +:10F7C000ADFE1A20F5E00120ECE7082898D1002CC6 +:10F7D00098D020781A2893D1E06A98F8012001780F +:10F7E00062F347010170E16AD8F8022041F8012F65 +:10F7F000B8F8060088800520696A00F08FFE6078FE +:10F80000022807D04FF000002044407A20F0020187 +:10F810002BD033E04FF00100F6E7204441722FE394 +:10F820001128B4D1002CB4D020781B28AFD1617836 +:10F83000E06A02291CD0002101EB4101202202EBE9 +:10F84000C1011022405808F101010EF087FD05208A +:10F85000696A00F063FE607802280CD04FF0000067 +:10F860002044407A20F0040108D14FF00100D4E791 +:10F870004FF00101E0E74FF00100F1E74FF0000029 +:10F88000CBE785F81CA0FAE33078012884D11C224C +:10F8900004F11C0071680EF0A6FDE079C10894F82F +:10F8A0003B0001EAD001E07861F30000E070217FC5 +:10F8B000F1BB217803290AD0C0073FF4F9AD03203A +:10F8C00028708DF804B0686A059041209EE3607F3F +:10F8D000A17888423FF694AD02272771E17920464E +:10F8E00021F0E001E171617A21F0F0016172A17A09 +:10F8F00021F0F001A172FFF77CFC2F708DF804B0AD +:10F90000686A05908DF808A0F2E33078112888D154 +:10F910008DF804A0696A0591B1680391ADF808A05B +:10F9200008466168016021898180A17A817100E0C7 +:10F930006AE004202070A4E230781128A6D18DF866 +:10F9400004A0686A0590301D02AB07C883E8070071 +:10F950004120ADF8080008460C210170A88CD6F8AB +:10F960000C8080B24027D4F82090FFF7F1FB41468D +:10F970004FF008084A463B46CDF80080FFF72FF8C5 +:10F98000002101A8FFF70AFCE07820F03E00801C6F +:10F99000E0702078052801D00F200AE0A07F002821 +:10F9A0003FF4C3AD0128FBD003287DD184F800804B +:10F9B000B1E42070AFE430780328A8D17068016802 +:10F9C000A1664068E0660520287035E23178032999 +:10F9D0009DD171680A68226749686167216C51B9D5 +:10F9E000A17F19B1012901D0062029E185F800A0E5 +:10F9F0002064606401E085F800A00327F3E3317818 +:10FA0000022984D1317909B1297737E1A17F02290F +:10FA100010D00329EFD16178012910D0A17994F891 +:10FA20003A2001290FD02064E178C90713D0012AB8 +:10FA30000ED010E0B0680028E7D020640BE0A27977 +:10FA400094F83A10EDE7B1680029DED02164EBE7C5 +:10FA5000F0680028D9D06064CDE78DF804B0696AF9 +:10FA60000591E1785846C90709D06178022903D188 +:10FA7000A17F29B1012903D0A17F032900D008204B +:10FA8000287012E230781128BFD1B06828620920AE +:10FA90002870E0782969C0070FD081F801A0206A9A +:10FAA0004860606A886000E0ABE004F16800C8600C +:10FAB000A07F02287FF48FAD81E501204870206C83 +:10FAC000486004F16800886004F13800C860201DB7 +:10FAD0000861206B4861606B88611FE2E1783078D3 +:10FAE000C90701D0062100E00A2188428DD1207883 +:10FAF000072817D084F800908DF804A0686A059054 +:10FB0000286A0390ADF80890032100F8011B102229 +:10FB100071680EF023FC002101A8FFF73FFB0020D5 +:10FB20002862C2E408202070E6E730781128ABD1C3 +:10FB30008DF804A0686A0590B0680390ADF808904D +:10FB4000042100F8011B102204F168010EF006FCEC +:10FB5000002101A8FFF722FB2078092801D01320FB +:10FB600027E784F800B016E0E1783078C90701D0C3 +:10FB7000062100E00A21884286D1102204F14800C3 +:10FB800071680EF0BFFB10B104202877A2E3207843 +:10FB900009283FF4C5AC0C2053E5E078C10735D007 +:10FBA000A17F012902D002291BD02CE00D20287052 +:10FBB000296981F801B06078012809D0206A48607D +:10FBC000606A886004F16800C8601030086104E56C +:10FBD000606A4860206A886004F17800C860103864 +:10FBE000F4E7C0F3440114290DD24FF0006101EB9A +:10FBF000B0104FEAB060E0706078012801D01020AA +:10FC000055E40620D5E6607801288AD00E2018E554 +:10FC1000307809288BD185F800B010208DF80400C9 +:10FC2000686A059070680290002101A8FFF7B6FA93 +:10FC3000E9E7E078C00706D0A07F01281FD10F2098 +:10FC400028700420F8E015202870296902204870E7 +:10FC5000206C48606078012805D004F17800886045 +:10FC60001038C8605AE104F1680088601030F8E785 +:10FC700030780228CED1307908B1287728E31020D7 +:10FC800028700F20D8E030781328F7D185F800903D +:10FC900029690820487070684860607801280DD094 +:10FCA00004F1680088601030C860206B0861606BE8 +:10FCB000486104F158008861A06A21E004F17800ED +:10FCC00088601038F0E730780728D7D160780128AD +:10FCD0001AD1A078A16A0A18C0F1100110460EF0DE +:10FCE000B4FB1220287029690920487004F15800DB +:10FCF0004860203088601038C860206C086141E09E +:10FD0000C861E06A086209E11320C9E0CBE03078FD +:10FD10000828B3D1102204F1480071680EF0F2FAFD +:10FD200008B10B2031E720780B28EDD02046FFF7F3 +:10FD300060FAA078A16A0A18C0F1100110460EF00E +:10FD400084FB1620287008208DF80400686A05904E +:10FD5000002049E03078112890D1B0682862142042 +:10FD6000287029690920487004F158004860103053 +:10FD700088601030C860606C08616078012800E01D +:10FD80009EE006D004F139004861206B8861606B09 +:10FD9000B6E7601D4861606B8861206BB0E7307822 +:10FDA000082892D18DF804A0686A0590286A03900B +:10FDB000ADF808900D2100F8011B102271680EF0BB +:10FDC000CDFA002101A8FFF7E9F900202862617847 +:10FDD000012902D01520ECE569E2162129700821DD +:10FDE0008DF80410696A05910290A0788DF80C00D6 +:10FDF0007EE130780B288CD116202870607802289C +:10FE000002D12046FFF7F5F9A07871680A18C0F111 +:10FE1000100110460EF019FB08208DF80400686AE6 +:10FE200005907068E0E730780F2895D1E079C00739 +:10FE30007BD01720287009208DF80400686A05908F +:10FE400056E13078102887D11422311D04F11C00AE +:10FE50000EF0C9FAE16A208DA1F80900E16AA078E4 +:10FE6000C871E179E26A01F003011172E16A627A14 +:10FE70000A73E16AA07A81F824006078012876D0BC +:10FE8000B3E13EE26078022801D0012000E00020CA +:10FE90002044407AC0070BD0E078C00708D1192071 +:10FEA00028708DF804B0686A05908DF808901FE1FD +:10FEB0001E2071E63078112874D1B06828621A20AB +:10FEC00028700520B8E7307803286BD16078E26AA3 +:10FED000022801D0012000E0002000EB40011420A6 +:10FEE00000EBC1015158726813680B6052684A6098 +:10FEF0001B212970D5E9041205234B70636A4B60FE +:10FF00006778E36A022F01D0012700E0002707EBA2 +:10FF1000470700EBC7001858C1E90202686A486247 +:10FF2000069800F024FBFFF75BBB87E130780E28D2 +:10FF300038D16078E26A022801D0012000E0002078 +:10FF400000EB4000102101EBC000022310580932E1 +:10FF500071680CF0E9FD1C202870296904204870A4 +:10FF6000206A4860E06A09308860F84879E65AE11A +:10FF700030780D2816D16178E06A022901D001217C +:10FF800000E0002101EB4101182707EBC101A27835 +:10FF9000405871680EF0E2F96178E06A022902D0F7 +:10FFA000012101E0A9E0002101EB410107EBC101C2 +:10FFB0004058A1780844C1F110010EF046FA8DF8BE +:10FFC00004A0686A0590286A0390ADF8089006219D +:10FFD00001706278E16A022A01D0012200E0002269 +:10FFE00002EB420207EBC202401C895810220EF0BD +:10FFF000B5F9002101A8FFF7D1F8002028621D20E3 +:020000040001F9 +:1000000028708DF804B0686A05900B208DF8080000 +:100010006EE03078112870D18DF804A0686A0590E0 +:10002000B06803900B20ADF80800039880F800A09A +:100030006278E16A022A01D0012200E0002202EB8C +:100040004202102303EBC20289580988A0F801106C +:100050006178E26A022901D0012100E0002101EB70 +:100060004103142101EBC30151580A6840F8032FE2 +:1000700049684160002101A8FFF790F818E729E1DD +:100080006078022801D0012000E000202044407A5E +:10009000800701D51F2003E721207DE53078112856 +:1000A0002BD18DF804A0686A0590B0680390ADF874 +:1000B0000890082707706178E26A022901D00121BF +:1000C00000E0002101EB41031C2101EBC301401CB6 +:1000D000515810220EF042F9002101A8FFF75EF8F6 +:1000E000202028708DF804B0686A05908DF808709B +:1000F000314601A8FFF752F815E775E0307811286E +:1001000072D18DF804A0686A0590B0680390082049 +:10011000ADF80800039809210170E16909784908E0 +:100120004170E16951F8012FC0F802208988C1802F +:10013000002101A8FFF732F8AEE76078022801D06D +:10014000012100E000212144497A490701D52220FC +:10015000A6E6012849D068E03078112844D1B0687B +:10016000286223202870296904204870206A48608A +:10017000E06A09308860764873E530780D2833D11D +:100180006178E06A022901D0012100E0002101EB41 +:100190004101202707EBC1011022405871680EF081 +:1001A000DDF88DF804A0686A0590286A0390ADF820 +:1001B000089080F800B06278E16A022A01D001223A +:1001C00000E0002202EB420207EBC202401C895809 +:1001D00010220EF0C3F8002101A8FEF7DFFF002077 +:1001E00028626078B5E791E037E02420D4E46078B5 +:1001F00002280BD000202044407AC10702D0E178C9 +:10020000C90705D0810705D51920A9E40120F2E727 +:100210001720A5E4400701D51B20A1E41C20207075 +:100220006078012801D01820B6E42720B4E4282003 +:1002300028700B2000E63078122849D12920ABE441 +:100240002078012844D00C2842D02046FEF7EFFF4A +:100250000C208DF80400686A059039E030784FF082 +:100260002608112805D012203070032785F8008059 +:100270004CE08DF804A0686A0590B06803900220F5 +:10028000ADF80800039805210170297F4170002115 +:1002900001A8FEF783FF0B208DF80400686A059023 +:1002A000314601A8FEF77AFF074685F80080012F46 +:1002B0000ED02BE001208DF80400686A0590042020 +:1002C0008DF80800287F8DF809000020287712E0BB +:1002D000287F80B11D202070252028708DF804B063 +:1002E000686A059002208DF80800314601A8FEF7E3 +:1002F00055FF07460AE00CB1FE2020709DF804006F +:1003000020B1002101A8FEF749FF0AE409B03846F0 +:10031000BDE8F08F2DE9F04F0C4601274E690978B2 +:1003200085B09046BA464FF00209072021B1012955 +:100330004ED002291FD1C8E0217901290AD0022913 +:1003400015D0032910D0042915D11BE0BCEA010007 +:10035000FE2F0000707801280CD10620616A02F09F +:1003600067FB002807D11AE01D20307017E0717874 +:10037000022901D0052796E031780C2927D18DF884 +:1003800004000EE03078011F042902D30E38032840 +:100390001DD2B07F02281AD12089022817D38DF8E8 +:1003A000049084F800A020899DF80410884203D2AC +:1003B0000A208DF800003FE01121083488F8001071 +:1003C00094E80E00C8E901120327C8F80C306AE06F +:1003D00098F80010112966D18DF80000616A049127 +:1003E000D8F80850029521794FF00B0B012906D05F +:1003F000022929D0032911D0042954D15AE0ADF89B +:10040000049085F800B0207E4F4600F01F00687011 +:1004100000216846FEF7C2FE377043E0ADF8049055 +:1004200005202870207E68704E4600216846FEF741 +:10043000B5FE26708DF800B0606A049041466846AB +:10044000FEF7ACFE07462EE0ADF8040085F800A0EC +:10045000207F6870607F00F00100A870A07F00F02E +:100460001F00E870E17F2971C0071FD094F82000B9 +:1004700000F00F00687194F8210000F00F00A871DF +:1004800000216846FEF78AFE2868B063A888B08716 +:10049000A87986F83E00A069407870772879B07016 +:1004A0000D2030700027384605B031E70020A871D4 +:1004B0006871E5E7ADF804900E202870207E687022 +:1004C00000216846FEF76AFEECE7FE2030708DF8EA +:1004D00000A0606A049004208DF80400207E8DF84E +:1004E0000500EDE700B50023012285B005280FD0F7 +:1004F00006280BD102208DF8002004918DF804000D +:100500008DF8053000216846FEF748FE05B000BDB5 +:100510008DF8002004918DF80420F1E770B50C46A9 +:10052000054602F0ACFA21462846BDE87040782323 +:10053000002202F007BA08B1007870470C2070471B +:1005400070B50C0005784FF000010CD021702146E9 +:10055000F3F745F974482178405D884201D10320C2 +:1005600070BD022070BDF3F73AF9002070BD027B28 +:10057000032A05D000220A704B780B2B02D003E02F +:10058000042070470A770A62027B9300521C0273B0 +:10059000C15003207047F0B585B00F4605460124D1 +:1005A000287B05EB800050F8046C7078411E0C2904 +:1005B0000AD25D493A46123101EB8000314650F8CB +:1005C000043C2846984704460CB1012C11D1287BE5 +:1005D000401E10F0FF00287301D00324E0E70D2037 +:1005E0008DF80000706A0490002101966846FFF7BC +:1005F000A7FF032CD4D005B02046F0BD70B515463A +:100600000A46044629461046FFF7C5FF064674B160 +:100610002078FE280BD1207E30B10020287029469A +:1006200004F10C00FFF7B7FF2046FEF700FE30464E +:1006300070BD704770B50E46044688210DF027FF47 +:100640000225012E03D0022E04D0052070BD01200A +:10065000607000E065702046FEF7E9FDA577002098 +:1006600070BD28B1027E1AB10A4600F10C01C5E73F +:100670000120704730B5044687B00D46062002F0D1 +:10068000FEF92946052002F0FAF92078FE2806D066 +:1006900000208DF8000069462046FFF7E2FF07B012 +:1006A00030BD7FB50E4600218DF80C1041780B2926 +:1006B00003D00C2903D0002405E0846900E04469DC +:1006C0000CB1217E91B16D4601462846FFF74FFFE0 +:1006D000032809D1324629462046FFF78FFF9DF8AF +:1006E0000C10002900D0042004B070BD04F10C05EA +:1006F000EAE710B590B00C4607900B480421801E25 +:1007000008900A488DF8191009900F92694606A8BA +:10071000FFF7C7FF002805D11022204601990DF0F0 +:100720001DFE002010B010BDDEE90100BCEA010092 +:1007300070B50D46040011D085B1210128460DF099 +:1007400084FE10224E4928460DF008FE4C48012137 +:100750000838018044804560002070BD012070BDD4 +:1007600070B5474E00240546083E10E07068AA7B2D +:1007700000EB0410817B914208D1C17BEA7B91425E +:1007800004D10C2229460DF0BDFD30B1641C308827 +:100790008442EBDB4FF0FF3070BD204670BD70B57A +:1007A0000D46060006D02DB1FFF7DAFF002803DB67 +:1007B000401C14E0102070BD314C083C2088628839 +:1007C000411C914201D9042070BD6168102201EBE7 +:1007D000001031460DF0C2FD2088401C208028709A +:1007E000002070BD70B514460D0018D0BCB10021BA +:1007F000A170022802D0102811D105E0288870B11C +:100800000121A170108008E02846FFF7A9FF002809 +:1008100005DB401CA070A8892080002070BD01204D +:1008200070BD70B5054614460E000BD00020307028 +:10083000A878012808D005D91149A1F108010A8832 +:1008400090420AD9012070BD24B1287820702888F0 +:10085000000A5070022008700FE064B1496810224D +:1008600001EB0011204610390DF078FD2878207337 +:100870002888000A607310203070002070BD0000CE +:100880006C0000202DE9F041FE4C207EE17D884285 +:1008900008BFBDE8F0810126FB4D0027E07D215C0B +:1008A00001EB810205EB8200037C052B18D0037C51 +:1008B000062B23D0037C072B34D0437C002B08BFAE +:1008C000FFDF29D04774E07D16280EBF0020E07DB1 +:1008D000401CE075481CC0B255F8222007211AE0E0 +:1008E0000674E07D16281ABFE07D401C0020E075EC +:1008F000481CC0B255F8222002210CE00674E07DAD +:1009000016281ABFE07D401C0020E075481C55F8F1 +:100910002220C0B203219047207EE17D8842BDD1D4 +:10092000BDE8F0810674E07D16281ABFE07D401C0A +:100930000020E075481CC0B255F822200821EAE7E3 +:1009400070B5D24D0C2085F82900A5F53B70002428 +:1009500080F8CD4180F8CC4100F5F4700476C47580 +:1009600005F12C000CF03CFFA5F58E70047585F8A0 +:100970002B40601E2C60A86085F8254085F8224039 +:1009800085F8234085F8244085F82140C048A5F12A +:10099000E80104704470002000EB800201EB820249 +:1009A0001474401CC0B20B28F6D30120F8F730FEB7 +:1009B0000020F8F72DFE012085F82600F9F7E0FA6F +:1009C000B448F9F7ECFAB44C2070B448F9F7E7FAF8 +:1009D0006070BDE87040F8F7AFBD10B5F8F7DAFD0C +:1009E000AD4C2078F9F7F4FA6078F9F7F1FAA74CF2 +:1009F00094F82800002808BF10BDF8F7DAFF00209F +:100A000084F8280010BD0B20704770B59F4C94F8F7 +:100A1000260000281CBFFFDF70BD94F82B000028C3 +:100A200008BFFFDFF8F79FFE62690025811A6FF0AB +:100A30007F43B1F5800F24BFA2EB000CBCF5800F03 +:100A40000DD38B4203D2991A0844411C07E0634539 +:100A500028BFFFDF05D2181A1044401C414200296C +:100A600000DBFFDF012684F8266084F82B5094F821 +:100A700029100420844A01EB810102EB81010874F2 +:100A8000A068B0F1FF3F04D0B01EA0600120F8F7CD +:100A9000BFFD0020F8F7BCFDF8F7A0FD25600DF0C4 +:100AA00043F8F8F7E9FE7E48056005604FF0E02165 +:100AB0004FF40040C1F88002F2F73FFA7448007822 +:100AC000022804D0032805D194F8230010B184F83B +:100AD000226001E084F82250BDE87040F8F7B0BE13 +:100AE000034669490B2000BF00EB800201EB820244 +:100AF00012F8042C22B1401E10F0FF00F4D1704710 +:100B000000EB800201EB8201012241F8143C01F864 +:100B1000042C7047012804D0032808BF002926D0E0 +:100B200000E021B3594B4FF0000C83F821C0584A24 +:100B30000028907014BF022882F803C00BD0072948 +:100B400015D2DFE801F01404060C0E1012001B2071 +:100B500000E03A20D070012083F82100704758202F +:100B6000F8E77720F6E79620F4E7B520F2E70020D3 +:100B70007047474810B54078F8F787FE80B210BD3F +:100B800030B5421E4049002500EB800001EB800497 +:100B90000A2A02D814F8040C00B9FFDF14F8040C78 +:100BA000012818BFFFDF04F8045C30BD70B53D4C70 +:100BB00094F8CD0194F8CC1188420CBF0125002592 +:100BC000F8F7D1FDF8F761FE94F8CD1194F8CC2137 +:100BD00091420CBF01210021A942E9D170BD30B57D +:100BE0000D46314A44190021101A71EB010038BF3B +:100BF000FFDF2E488542C8BFFFDF2D488542B8BFC2 +:100C0000FFDF2C488442A8BF2B4804DA002CAABF7F +:100C10002046284830BD201830BD70B51A4900EB79 +:100C2000800001EB8004254A54F8101D607A0028EA +:100C300052F8202011440CBF04200220084420F068 +:100C40007F40F8F722FE94F90850174A4419002112 +:100C5000101A71EB010038BFFFDF14488542C8BF8E +:100C6000FFDF13488542B8BFFFDF12488442A8BFA8 +:100C7000114804DA002CAABF20460E4870BD201887 +:100C800070BD0000E808002004090020EC090020E5 +:100C90007E000020F12701007C0000208508010073 +:100CA00000F5004000070020FF7F841E0020A10700 +:100CB00000E05EF80080841E00807BE120EA0100F5 +:100CC0002DE9F04F0646FF4885B00068C005C00D0D +:100CD00011D0103840B20028B8BF00F00F0000F16A +:100CE000E020B4BF90F8140D90F80004400908BF4C +:100CF0004FF0010A01D04FF0000A307800281FBFE2 +:100D00000128002005B0BDE8F08F307900280CBF25 +:100D100004210221EC4ABAF1000F52F8200001EB45 +:100D2000000903D1E949002081F827006C4602AA96 +:100D30002146B068F8F7B6FD9DF90820F068211D3E +:100D400010440122C01C1F28B8BF019208DB03AA6F +:100D5000F8F7A8FD9DF80C0010B10198401C019017 +:100D6000DDE900100844401D20F07F400190A1EB18 +:100D7000090020F07F40009070798DF80A000098FB +:100D80000390F8F7F0FC009A019B121A181AD04948 +:100D900022F07F4220F07F40B2F5800F26D28142C0 +:100DA00024D3CA4890F82950009CCA4F181B20F041 +:100DB0007F486FF07F40001BAB4604900C2D24D081 +:100DC00005EB850007EB80026FF07F435068011B45 +:100DD000B1F5800F12D3A4EB000CBCF5800F0DD33E +:100DE0008B4205D204990844411C07E000205FE0D3 +:100DF000634509D2191A0819401C41420029BCBF99 +:100E0000AB46957CDADB00E0FFDF5D4525D00BEBE0 +:100E10008B0007EB80026FF07F4091680B1BB3F5EE +:100E2000800F12D3A4EB010CBCF5800F0DD39842B8 +:100E300003D204980844431C07E0604528BFFFDF45 +:100E40000BD2431A1819401C4342002B05DD9DF8B4 +:100E50000A00927B904228BF0C460C2D18BF9DF8CB +:100E60000A1010D005EB850007EB80004268121BCA +:100E700022F07F42424506D2827B914228BF84689D +:100E8000857C0C2DEED10098A04205D004EB080023 +:100E900020F07F400094019000990398814206D091 +:100EA00001EB090020F07F40F8F7EFFCB060012073 +:100EB000864991F82710002904BF05B0BDE8F08FDE +:100EC000BAF1000F3FF42EAF05B0BDE8F08F2DE969 +:100ED000F04F064687B00C467F480CF089FC4FF077 +:100EE0000108002835D07D4F387D002818BFFFDF6E +:100EF0003E742079794D05F10C0228726079687290 +:100F00002946A068F8F7CEFC95F90C000F2804DDFF +:100F10001F3828732868401C286095F90C00E16888 +:100F20002E1D0844C01C1F28B8BFC6F8008009DB6E +:100F30006A463146F8F7B6FC9DF8000010B13068FB +:100F4000401C30602078A87287F8148007B0BDE894 +:100F5000F08F634D95F8CD0116281ED095F8CD0180 +:100F600095F8CC11401C884200D1FFDF554800683D +:100F7000C005C00D1AD0103841B20029BDBF01F024 +:100F80000F0000F1E02090F8140D01F1E020A8BF5F +:100F900090F80004400909D104E095F8CC0100283C +:100FA000E4D1E2E72078002818BFFFDF4C4890F832 +:100FB000CD1101EB810100EB81000674207801283E +:100FC00000F04A81022843D0454890F8CD1101EB4A +:100FD000810100EB8105207928726079687205F142 +:100FE0000C022946A068F8F75DFC95F90C000F2863 +:100FF00004DD1F3828732868401C286095F90C1000 +:10100000E0682E1D0844C01C1F28B8BFC6F8008029 +:1010100009DB6A463146F8F745FC9DF8000010B13F +:101020003068401C30602078A8722D4890F8CD11AF +:1010300016290EBF002190F8CD11491C80F8CD1162 +:1010400025480CF0EBFB07B0BDE8F04FF8F7F8BB14 +:10105000234890F8CD1101AA01EB810100EB810733 +:101060006946E068F8F71EFC9DF904000F28CCBF24 +:101070000120002000993D1D08440190A068C01C7B +:101080001F28B8BFC5F8008009DB6A462946F8F773 +:1010900009FC9DF8000010B12868401C286002205F +:1010A000B872607978722079387200280CBF0421F8 +:1010B0000221054A52F82000014403917A68481D34 +:1010C00010440FE004ED00E020EA0100EC090020EC +:1010D000FFFF3F0004090020180A0020D00800206C +:1010E000000700200199009008440399401A0590D8 +:1010F000FD4C002084F82700F8F735FB3860019993 +:101100008046084420F07F40F86094F829000C28BD +:101110007ED0214691F8290000EB8002A1F1E80081 +:1011200000EB82025668009A324422F07F4202921B +:1011300097F809B091F829503446111B21F07F4AE5 +:101140006FF07F41891BA94604910C2D23D0E748FD +:1011500005EB850100EB81026FF07F435068011BB6 +:10116000B1F5800F24BFA4EB000CBCF5800F0BD3AE +:101170008B4203D204990844411C05E0634509D21F +:10118000191A0819401C41420029BCBFA946957C88 +:10119000DBDB00E0FFDF4D4524D0D44809EB8901BB +:1011A00000EB81036FF07F429868011BB1F5800F5F +:1011B00012D3A4EB000CBCF5800F0DD38A4203D2EE +:1011C00004990144491C07E0624528BFFFDF09D2AA +:1011D000121A1119491C4942002903DD997B8B45DC +:1011E00028BF04460C2D18BFC04910D005EB850060 +:1011F00001EB80004268121B22F07F42524506D26A +:10120000827B934528BF8468857C0C2DEED100E05D +:101210001BE0A64205D004EB0A0020F07F402646E2 +:101220000290029AA6EB080020F07F40A2EB080291 +:10123000059922F07F42B0F5800F06D2914204D387 +:101240000398304420F07F403860A74890F827008A +:1012500000287FF44DAFE8E6A548851915F8010C84 +:10126000002818BFFFDF05F8018CADE60020F8F775 +:10127000BFB90120F8F7BCB99E48007870472DE946 +:10128000F0419A4E00274FF00308012506F1E804CB +:1012900050B301285BD0022800F0E98003281CBF6E +:1012A000FFDFBDE8F08194F829000C2808BFFFDFBC +:1012B00084F8267084F82B5094F8290000EB800005 +:1012C00006EB800080F81080F8F7C1FA94F8290046 +:1012D00094F82910401CC0B201EB810156F821207E +:1012E000BDE8F0410521104794F829000C2808BFFB +:1012F000FFDF84F8267084F82B5094F8290000EB67 +:10130000800006EB800080F81080F8F7A0FA207FBC +:10131000002818BFFFDF84F825500020F8F778F97F +:10132000A168B1F1FF3F04D0012300221846F8F76D +:10133000B3F994F8290094F82910401CC0B201EBCD +:10134000810156F82120BDE8F0410121104794F8B1 +:1013500029000C2808BFFFDF84F8267084F82B5082 +:1013600094F8290000EB800006EB800080F81080E4 +:10137000F8F76DFA0120F8F74BF994F825000028EA +:101380001CBFA068B0F1FF3F0DD094F8290094F87D +:101390002910401CC0B201EB810156F82120BDE8A4 +:1013A000F04106211047207F012815D002281FD0C8 +:1013B000032833D004281CBFFFDFBDE8F08194F878 +:1013C000201060680123411A00221846F8F764F9DA +:1013D00094F82800B8BB37E094F8240028B184F8CA +:1013E0002470F8F73BFA84F823502777BDE8F081A2 +:1013F00094F8280018B9F8F7B3FA84F8285094F84C +:10140000290094F82910401CC0B201EB810156F864 +:101410002120002190472777BDE8F081217B60687B +:101420000123411A00221846F8F736F994F82400EF +:1014300028B184F82470F8F711FA84F823500220B8 +:101440002077BDE8F08103E0F8F78AFA84F82850A5 +:1014500094F8290094F82910401CC0B201EB8101D6 +:1014600056F82120002190472577BDE8F0812148DA +:101470000078BDE8F041F8F7B1BD10B51A4C94F80A +:1014800029000C2808BFFFDF94F8290094F82910E0 +:10149000401CC0B2154A01EB810152F82120BDE881 +:1014A0001040042110472DE9F84F8046087C104C6D +:1014B000401EC6B20D46A05D01281DD0022825D0D1 +:1014C000297CDFF828A0481EC4B204EB84020AEB92 +:1014D0008206371D0A2821D801EB81000AEB800023 +:1014E00010F8040CD8B919E0EC0900200409002018 +:1014F000E00900207C000020A87A012814BF022007 +:101500000020A05518BFBDE8F88FD9E7A87A0128B8 +:1015100018BFFFDF0021A972A155D1E7FFDF307CA2 +:10152000DFF8289407280BD11720009099F817208E +:1015300009F11803494620460BF0A6FE012030743D +:10154000307C012804D0A87A012818BFFFDF02D020 +:10155000A87A01284BD1FE4B307C022818D099F88C +:101560001800162872D099F8180099F81710401C26 +:10157000884200D1FFDF0120707499F8180009F843 +:10158000004099F81800162800F09E8100F093B9E9 +:10159000F04A92F829000146A04207D0014600EB2C +:1015A000810003EB8000807CA042F7D192F829C033 +:1015B00084450CD192F8291001EB810103EB8101E4 +:1015C000897C82F82910012182F82A1009E000EBB9 +:1015D000800203EB820201EB810103EB8101927C2B +:1015E0008A7400EB800003EB80000C218174287A60 +:1015F000D949002851F820A02968A1EB0A010CBFA5 +:1016000004200220081A20F07F423A60D5E9000148 +:10161000084420F07F407860A87A022818BF287B11 +:101620001ED038727868401D20F07F407860687A5C +:10163000B872287A06257872032872D2002870D0F2 +:1016400000F022FE00286DD0A1E0FFE799F8170016 +:10165000002890D18EE700BF89F81800BDE8F88F08 +:10166000287A00280CBF0420022000EB0A036868D7 +:10167000591D00EB010BB9484078504503D9B549D5 +:1016800091F8231011B10BF1060003E0A0EB0A0062 +:101690005844801DAF4991F829C0BCF10C0F25D0EA +:1016A00091F829C00CEB8C0EA1F1E80C0CEB8E0C20 +:1016B000DCF804C0624519D0DFF8A4C291F8291003 +:1016C00001EB8102A24901EB82014A688968A2EB21 +:1016D000080222F07F42A1EB080121F07F419042F5 +:1016E00098BFB2F5800F9DD28C459BD34044A0EBB0 +:1016F0000B0020F07F4139601944E86821F07F41F8 +:101700000A1A6FF07F4CB2F5800F24BF431AB3F56D +:10171000800F11D3944506D2ACEB00000844421C64 +:101720000AE034E02FE09C4528BFFFDF1DD2ACEB80 +:1017300001010844401C4242002A16DD0520307495 +:1017400099F81800162819D099F8180099F8171068 +:10175000401C884200D1FFDF99F8180009F80040CA +:1017600099F8180016287BD0A5E03868ABF1050180 +:10177000084420F07F407860002052E799F8170075 +:101780000028E9D1E7E7CAF138054FF0320A73487B +:101790000178012918BF03290AD14078504507D99B +:1017A0006C4991F82310002904BFA0EB0A000544FE +:1017B0006B4B3868A0EB0802786822F07F41A0EB01 +:1017C000080020F07F4C8D4298BFB1F5800F1BD2EE +:1017D000634519D35F4991F829300C2B30D091F82B +:1017E00029504FF00C0BDA46594905EB850301EB04 +:1017F0008303D3F808C0ACEB080C944531D8AB4652 +:101800009D7C0C2DF0D193E00520307499F81800E0 +:10181000162810D099F8180099F81710401C884223 +:1018200000D1FFDF99F8180009F8004099F8180076 +:10183000162849D03FE099F817000028F2D1F0E7C8 +:101840000220307491F829000C2818BF91F8290063 +:10185000B07481F82940012081F82A00BDE8F88F92 +:1018600032E00C2D1CBFAA46002261D00AEB8A038D +:1018700001EB8303D3F804C0ACEB080C84452CD2F5 +:101880009A7B97F80AC0944520D30520307499F8C4 +:101890001800162813D099F8180099F81710401C52 +:1018A000884200D1FFDF99F8180009F8004099F844 +:1018B0001800162808D099F81800401CCCE699F8B2 +:1018C00017000028EFD1EDE70020C5E693F812A03D +:1018D0000122BAF10C0FC9D103E0002A08BFAA46C1 +:1018E00026D02F461A4807EB870100EB8108062215 +:1018F00088F8102099F81800162838D099F81800A0 +:10190000411C99F81700814200D1FFDF99F81800B7 +:1019100009F8007099F8180016280EBF002099F8F1 +:101920001800401C89F8180098F81270BA45D9D1EF +:101930000220074F307407F1E80090F82910A942FF +:101940001AD186F812A080F829400BE0E8080020A0 +:1019500004090020EC09002020EA01007E0000209C +:10196000FFFF3F00012180F82A10BDE8F88F99F8A9 +:1019700017000028CAD1C8E70C2D0CD0BBF10C0F02 +:1019800008BFFFDF0BEB8B0007EB8000847486F849 +:1019900012A0BDE8F88FBBF10C0F08BFFFDF0BEB07 +:1019A0008B0007EB800084740C20B074BDE8F88FC6 +:1019B0002DE9F04F83B0F7F7D6FE05464FF00C0B3C +:1019C000FE4C94F829100026A4F1E8094FF0010814 +:1019D0000C292FD094F82920214602EB820209EB32 +:1019E0008202127C042A25D091F8292002EB82027F +:1019F00009EB8202127C032A04BF03B0BDE8F08F1A +:101A00002A4620696169801A491BED4B20F07F400E +:101A100021F07F4106283CBF03B0BDE8F08FB0F550 +:101A2000800F24BF03B0BDE8F08F8B423CBF03B0F2 +:101A3000BDE8F08FA068B0F1FF3F18BFFFDF84F86A +:101A4000256094F82900DF4F0C2809D094F829006C +:101A500000EB800009EB8000007C042808D01AE02D +:101A600094F82100B8B1F8787870B878387012E03E +:101A700094F829B00BEB8B0009EB800080F8108004 +:101A800094F8290000EB800009EB8000807C84F84A +:101A9000290084F82A80DFF830A39AF8CD019AF85B +:101AA000CC11884219D000BF9AF8CC0100EB80001D +:101AB0000AEB80012846FFF7F6FC9AF8CC011628BD +:101AC0000EBF00209AF8CC01401C8AF8CC019AF88D +:101AD000CD019AF8CC118842E6D1DFF8F0A29AF84D +:101AE000140028B151462846FFF7DDFC8AF814603F +:101AF000BBF10C0F06D00BEB8B0009EB8000017CD7 +:101B000001292BD094F829000C2800F0ED8094F8DE +:101B10002A00002800F0F78084F82A6094F8290051 +:101B200000EB8001AA4800EB8102A0F50173D2E925 +:101B30000101D268C3F80423C3E9BF01607E002815 +:101B40000CBF4FF004094FF00209A249022811F816 +:101B50002010217318BF012834D123E0072101741C +:101B6000DFF874A29AF81800162816D09AF8180010 +:101B70009AF81710401C884200D1FFDF9AF818002D +:101B80000AF800B09AF8180016280EBF00209AF83C +:101B90001800401C8AF81800B4E79AF817000028CB +:101BA000ECD1EAE720690844421B22F07F42382A40 +:101BB00008D903213238617620F07F40206132203D +:101BC000207309E0322907D294F8280058B9F7F7B2 +:101BD000C7FE84F8288006E094F8280018B1F7F7CB +:101BE000E8FE84F828607B7884F8203094F80CA014 +:101BF00038780621A3EB0A02012818BF032804D174 +:101C000084F82480002AC8BF911D94F822B0BBF14B +:101C1000000F18BF891C206901905044484420F0EF +:101C20007F406060BAF1000F14BF022000202077CF +:101C300094F82400002808BFBBF1000F37D060489B +:101C40000090D4F810E0D4F814C0AEEB050E2EF0DE +:101C50007F4EACEB050C20462CF07F4C714598BFB5 +:101C6000BEF5800F1FD2009961451CD3002A0FDDFD +:101C70000199BAF1000FA1EB020101611944494435 +:101C800021F07F4141600CBF0121032121770EE04B +:101C900004DA002B0CBF02210421F7E7BBF1000F8F +:101CA00008BFFFDF03E080F8246084F82260207F13 +:101CB00040B12069012300EB090100221846F7F723 +:101CC000EBFC02E00120F7F7A3FC94F829000123C4 +:101CD00000EB80013E4800EB8100616890F90C2028 +:101CE0000020F7F7D9FC0EE00120F7F791FC002067 +:101CF000F7F78EFCF7F772FC94F8280018B1F7F7A5 +:101D000058FE84F8286094F8220028B1F7F7A6FD61 +:101D100084F8236084F8226094F8210018B1F878E0 +:101D20007870B878387094F8240030B184F8236063 +:101D30003878002808BF84F824602748017EC07DD9 +:101D4000814203D025484078F8F748F984F8278085 +:101D500003B0BDE8F08F70B5184C054682B094F81A +:101D600029000C2808BFFFDF94F8290000EB800051 +:101D7000174E06EB8000007C032818BFFFDFA06829 +:101D8000B0F1FF3F18BFFFDF94F8290001AA00EB74 +:101D9000800006EB8000694690F90C002844F7F7B4 +:101DA00081FD9DF904000F28CCBF0120002000997F +:101DB00008446168084420F07F4111E0EC090020EC +:101DC000FFFF3F007E00002000070020D008002019 +:101DD0000409002020EA0100E80800207C0000201F +:101DE000A16094F82500002804BF02B070BD012353 +:101DF00002B00022BDE870401846F7F74DBC744AA7 +:101E00000B1A02F1010CB3EB9C0F3CBF1846704754 +:101E100010B5441AB4EB9C0F3CBF184610BD9A4253 +:101E200003D2101A0844401C10BD94429EBFFFDF2D +:101E3000002010BD511A0844401C404210BD01232F +:101E4000002201460220F7F727BC0220F7F7E0BB8B +:101E5000F7F789BC2DE9F0415E4C054682B094F855 +:101E60002B00002808BFFFDF642D50D35A48002202 +:101E7000401B72EB02004AD3584890F8CD1190F8FD +:101E8000CC01814243D15648007D00283FD194F8CF +:101E90002900DFF8508100EB800008EB8006206805 +:101EA00001AA28446946F7F7FDFC9DF904000028C3 +:101EB00002DD0098401C0090B168009872680F180D +:101EC000BA1A22F07F42B2F5800F20D2B27C0C2ADF +:101ED00009D002EB820208EB82025268511A21F00B +:101EE0007F41814213D3A068B0F1FF3F05D00120AC +:101EF000F7F78EFB4FF0FF30A06020682844206089 +:101F000027F07F40606102B00120BDE8F08102B09F +:101F10000020BDE8F0812DE9F8430646401EC7B217 +:101F2000304807EB870100EB8104207C002808BFC4 +:101F3000FFDF2A4A92F8CC1192F8CD0181420DD0F0 +:101F400001EB810302EB83031B7CB34210D0162903 +:101F50000CBF0021491CC9B28142F1D120484FF089 +:101F6000170800F11805017D29B3007CB04222D189 +:101F70000020BDE8F883207C05281FBF207C0628B0 +:101F8000207C07280AD184F81090CDF80080EA7DE3 +:101F900005F11803144938460BF076F9607C68B1F6 +:101FA0006674CDF80080EA7D05F118030E493846C5 +:101FB0000BF06AF902E04FF001090026207C0128AD +:101FC00004BF607C0028D6D10120BDE8F883000062 +:101FD000FF7F841EEC090020FF1FA10700070020DF +:101FE000D008002004090020E8080020F0B5734A5A +:101FF000D2F80032724D002401212E7856B9714E6C +:102000003460704F03263F1D3E606E4F04260C3730 +:102010003E602970C2F80042D1601160694C4834BA +:10202000D16425688542FBD35160D160C2F800328B +:10203000F0BD2DE9F041044680074FF000054FF058 +:10204000010604D560480560066024F00204E0043F +:102050004FF0FF3705D55D484660C0F8087324F49B +:102060008054600003D55A48056024F08044E005A0 +:102070000FD55248C0F80052C0F8087351490D609E +:10208000091D0D604F4A04210C321160066124F4D1 +:102090008074A00409D54F484660C0F80052C0F8CB +:1020A00008734D48056024F40054C4F38030C4F331 +:1020B000C031884200D0FFDF14F4404F14D04748AD +:1020C0004660C0F8087346488660C0F80052C0F801 +:1020D000087344490D600A1D16608660C0F80873D5 +:1020E0000D60166024F4404420050AD53E48466041 +:1020F0008660C0F80873C0F848733C48056024F453 +:1021000000640BF0EBFC3A48044200D0FFDFBDE86E +:10211000F08170B5202500224FEA020320FA02F177 +:10212000C90719D051B201F01F060124B4404E096D +:10213000B60006F1E026C6F88041C6F880420029C4 +:1021400006DA01F00F0101F1E02181F8143D03E00E +:1021500001F1E02181F80034521CAA42DED370BDA7 +:1021600070B5174C0D466060FFF763FF6068FFF7BE +:10217000D0FF2846F7F7D1FC0BF0E0F800F0D5F8D7 +:102180000BF0ACFC0BF0F7FBF7F7FAFEBDE8704084 +:102190000BF082B910B50A4C6068FFF74AFF60681F +:1021A000FFF7B7FF0BF09AFCF7F77BFD00206060AC +:1021B00010BD03484068704702207047008000400F +:1021C0008400002004850040FC1F004000C0004047 +:1021D00004E5014000D0004004D5004000E000408C +:1021E00000F0004000F5004000B0004008B500409D +:1021F000FEFF0FFC70B51F490A68BAB100231D46E7 +:1022000001244A68521C4A60092A00D34D600E79A5 +:1022100004FA06F20E6816420AD072B60B689343AF +:102220000B6062B649680160002070BD052070BD7A +:102230005B1C092BE5D3FFDFF8E74FF0E0214FF4FB +:102240008000C1F800027047EFF3108111F0010F18 +:1022500072B64FF0010202FA00F20648036842EA41 +:102260000302026000D162B6E7E702480021016084 +:10227000416070478C000020012081070860704792 +:10228000012081074860704712480068C00700D0ED +:10229000012070470F48001F0068C00700D00120D0 +:1022A00070470C4808300068C00700D00120704714 +:1022B000084810300068704706490C310A68D2039C +:1022C00006D5096801F00301814201D10120704760 +:1022D000002070470C040040C84911F8210F4978CC +:1022E000884201D3401A02E0C1F121010844C0B282 +:1022F0007047C249233111F8210F4978884201D330 +:10230000401A02E0C1F121010844C0B27047BB4944 +:10231000463111F8210F4978884201D3401A02E072 +:10232000C1F121010844C0B27047B54910B5802001 +:1023300081F80004B1490020233101F8210F4870D1 +:10234000AE4901F8210F4870AC49463101F8210F20 +:102350004870AC480BF044FAAA48401C0BF040FA15 +:10236000F7F7E6FCBDE8104000F03DB920207047CB +:10237000B2E770B50C4605460026FFF7ADFF0146F3 +:102380009E48A14212D30022641EE4B20DD390F8FD +:102390002210435C491CC9B205F8013B80F82210A9 +:1023A0002129F1D180F82220EEE7012600F01BF967 +:1023B000304670BD202070479BE770B50C4605463F +:1023C0000026FFF796FF01468C482330A14212D326 +:1023D0000022641EE4B20DD390F82210435C491C25 +:1023E000C9B205F8013B80F822102129F1D180F80B +:1023F0002220EEE7012600F0F6F8304670BD2021DD +:1024000001700020704710B50446FFF780FF207070 +:10241000002010BD70B50C460546FFF778FF014659 +:1024200076484630A14213D30022641EE4B20DD395 +:1024300090F82210435C491CC9B205F8013B80F8B2 +:1024400022102129F1D180F82220EEE7002401E0BA +:1024500042F2070400F0C7F8204670BD70B50C4684 +:102460000546212900D9FFDF67480068103840B2CF +:1024700000F0A0F8C6B20D2000F09CF8C0B2864271 +:1024800004D2FFDF02E000BFF7F7A2FC2146284696 +:10249000FFF76FFF0028F7D070BD2DE9F047DFF898 +:1024A0006481564CA8F101080746233498F80000CF +:1024B000DFF84891002604F1230A38B994F8221075 +:1024C00094F82100212200F084F890B14D4699F84B +:1024D000221099F82100212200F07BF8B8B155466E +:1024E0009AF822109AF82100212200F072F848B3DD +:1024F00035E094F82100275494F82100401CC0B224 +:1025000084F8210021282AD184F8216027E095F859 +:1025100021002F5495F82100401CC0B285F82100FD +:10252000212801D185F8216098F800004746B0B114 +:1025300095F8221095F82100212200F04AF870B198 +:102540003E700CE095F821002F5495F82100401CB6 +:10255000C0B285F82100212801D185F8216094F8C6 +:10256000221094F82100212200F033F800281FD017 +:1025700099F8221099F82100212200F02AF8002869 +:1025800016D09AF822109AF82100212200F021F8A2 +:1025900000280DD0F7F7F2FB1A480BF029F9B0F537 +:1025A000005F00D0FFDFBDE8F04716480BF036B9FA +:1025B000BDE8F087002806DA00F00F0000F1E02007 +:1025C00090F8140D03E000F1E02090F800044009B9 +:1025D0007047401C884204D0904200D109B10020CD +:1025E00070470120704710B506480BF001F900282C +:1025F00003D1BDE81040F7F7ACBB10BD1C0A0020AA +:102600000DE000E09500002004ED00E01649087898 +:102610004A78401CC0B2904205D0144B01221A6087 +:10262000BFF34F8F087070472DE9F0410E4C4FF00B +:10263000E02600BFF7F752FC20BF40BF20BF6778FD +:1026400020786070D6F80052EEF75CFE854305D125 +:10265000D6F8040210B92078B842EBD0F7F739FC6D +:102660000020BDE8F081000097000020180502401E +:102670002DE9F041012528034FF0E0210026C1F8A3 +:1026800080011E4CC4F800610C2000F02CF81C489E +:1026900001680268C94341F3001142F01002026070 +:1026A000C4F804532560491C00E020BFD4F8002181 +:1026B000002AFAD019B9016821F01001016011480F +:1026C00007686560C4F80853C4F800610C2000F086 +:1026D0000AF83846BDE8F08110B50446FFF7C8FF98 +:1026E0002060002010BD00F01F0201219140400930 +:1026F000800000F1E020C0F88012704700C0004068 +:1027000010ED00E008C500402DE9F047F84C064602 +:10271000FF21606800EB061211702178FF2916D0A6 +:102720004FF0080909EB011109EB06174158C05990 +:10273000491E21F07F4100F0DDF918B194F80080C6 +:10274000454614E06168207801EB06110870267098 +:10275000BDE8F087626809EB0510D159105800F008 +:10276000C9F930B96068A84600EB08100578FF2D5C +:10277000F0D1606800EB061100EB08100D700670D8 +:10278000E6E7F0B5DA4B0446002001255A680C262E +:102790001B7A0BE005EB0017D75DA74204D106EBCF +:1027A0000017D7598F4204D0401CC0B28342F1D8E1 +:1027B000FF20F0BD70B5FFF74BFBCD4C014608255F +:1027C0002278606805EB0212805800F093F9012826 +:1027D00008D92178606805EB01114058BDE87040C8 +:1027E000FFF72DBBFEF748FDBDE87040F7F7F6BBDD +:1027F0002DE9F041BE4C2578FFF72AFB0146FF2D5D +:102800006FD04FF00808626808EB0516905900F089 +:1028100071F90228606801D980595EE000EB05116A +:1028200009782170022101EB0511425C5AB1521E58 +:102830004254815901F5000121F07F418151284620 +:10284000FFF762FF34E00423012203EB051302EBE0 +:10285000051250F803C0875CBCF1000F10D0BCF526 +:10286000806F10D9CCF3090250F806C00CEB423C43 +:102870002CF07F4C40F806C0C3589A1A920A09E01F +:10288000FF2181540AE0825902EB4C3222F07F4250 +:102890008251002242542846FFF736FF0C2160681F +:1028A00001EB05114158E06850F827203846904761 +:1028B0002078FF2815D0FFF7CBFA01462278606810 +:1028C00008EB02124546805800F014F9012891D90E +:1028D0002178606805EB01114058BDE8F041FFF731 +:1028E000AEBABDE8F081F0B51D4614460E46074667 +:1028F000FF2B00D3FFDFA00700D0FFDF7C48FF21C4 +:102900000022C76044600572067401704270104670 +:10291000012204E002EB0013401CE154C0B2A842C3 +:10292000F8D3F0BD70B5724C06466578207C8542C0 +:1029300000D3FFDFE06840F825606078401C6070DD +:10294000284670BD2DE9FF5F1D468B460746FF24D4 +:10295000FFF77EFADFF89891064699F80100B84231 +:1029600000D8FFDF00214FF001084FF00C0A99F862 +:102970000820D9F804000EE008EB0113C35CFF2B1C +:1029800027D0BB4205D10AEB011350F803C0DC4548 +:1029900021D0491CC9B28A42EED8FF2C1BD008EBCB +:1029A00004110AEB0412475440F802B00421029BC0 +:1029B0000022012B01EB041111D042504FF480682A +:1029C00008234FF0020C454519D9A905890D08D0F7 +:1029D00008E00C46DDE7FF2004B0BDE8F09F45505D +:1029E000ECE7414606EB413203EB041322F07F4251 +:1029F000C250691A0CEB0412890A81540BE005B924 +:102A0000012506EB453103EB041321F07F41C15052 +:102A10000CEB0411425499F800502046FFF774FE65 +:102A200099F80000A84201D0FFF7C4FE3846D3E76A +:102A300070B50C460546FFF70BFA064621462846B8 +:102A4000FFF79FFE0446FF2817D0294D082101EB10 +:102A5000041168684058314600F04CF800F5805089 +:102A6000400B02216A6801EB0411515C09B100EBD3 +:102A70008120002800D1012070BD002070BD2DE90B +:102A8000F0410F468046FFF77CFEFF281BD0184E12 +:102A9000357871682A462C4605E0844206D02546E2 +:102AA00001EB05131C78FF2CF7D10CE0FF2C0AD0AA +:102AB000A5420CD101EB021000783070FF2804D041 +:102AC000FFF778FE03E000200BE7FFF7BEF9394679 +:102AD0004046FFF7ADFFFF220123716803EB0413AB +:102AE000CA5401EB041201EB051112780A70F8E6E2 +:102AF000880A0020401A20F07F40B0F5000F00D96E +:102B00000020704770B50446A0F500002C4EB0F1CF +:102B1000786F02D23444A4F500042A48844201D2DA +:102B2000012500E0002500F041F830B1B4420BD39C +:102B30002548006804E0284370BDB44204D323480C +:102B4000844201D20120F6E70020F4E710B50446E4 +:102B5000A0F50000B0F1786F03D219480444A4F541 +:102B6000000400F023F84FF0804130B116480068AF +:102B700004E08C4204D2012003E014488442F8D2DD +:102B8000002080F0010010BD10B520B1FFF7DEFF7E +:102B900008B1012010BD002010BD10B520B1FFF715 +:102BA000B1FF08B1012010BD002010BD084809493F +:102BB0000068884201D10120704700207047000062 +:102BC0000000002000F0010020000020080000208C +:102BD0009C000020BEBAFECA0548064A0168914220 +:102BE00001D1002101600449012008607047000004 +:102BF0009C000020BEBAFECA40E5014053480021B7 +:102C00000170417010218170704770B505461646FD +:102C10000C460220F0F741F94C49012008704C495C +:102C2000F01E08604B480560001F046070BD10B5C1 +:102C30000220F0F732F9454901200870464800218A +:102C4000C0F80011C0F80411C0F8081143494FF44E +:102C50000000086010BD3D480178C9B1404A4FF4FA +:102C6000000111603C49D1F800310022002B1CBF4B +:102C7000D1F80431002B02D0D1F8081111B1427003 +:102C8000102103E00121417036490968817002700A +:102C90000020F0F702B92D480178002904BF4078E0 +:102CA00070472D48D0F80011002904BF022070475A +:102CB000D0F8001100291CBFD0F80411002905D05C +:102CC000D0F80801002804BF012070470020704799 +:102CD0001E4800B50278204B4078C821491EC9B271 +:102CE00082B1D3F800C1BCF1000F10D0D3F80001BD +:102CF00000281CBFD3F8040100280BD0D3F808012A +:102D000050B107E0022802D0012805D002E00029D6 +:102D1000E4D1FFDF002000BD012000BD0B48017899 +:102D2000002904BF807870470B48D0F800110029B3 +:102D30001CBFD0F80411002902D0D0F8080108B156 +:102D40001020704707480068C0B27047A0000020FC +:102D500010F5004008F5004000F0004004F5014087 +:102D600008F5014000F40040314800210170417035 +:102D7000704770B5064614460D460120F0F78DF8F1 +:102D80002B49012008702B480660001D0460001DBF +:102D9000056070BD2DE9F04105460120F0F77DF892 +:102DA000234801262449067045F080700860234CB2 +:102DB0000027C4F8047122494FF040700860002DCC +:102DC00002BFC4F800622660BDE8F081012D18BF83 +:102DD000FFDFC4F8007226604FF0007019490860E8 +:102DE000BDE8F0811248017879B1154A4FF0407181 +:102DF00011601249D1F804210021002A08BF417056 +:102E000002D0114A1268427001700020F0F745B8F4 +:102E100007480178002904BF407870470748D0F878 +:102E20000401002808BF704707480068C0B2704717 +:102E3000A300002008F5004004F5004000F0004029 +:102E400008F5014004F5014000F4004070B5FE4C67 +:102E5000002501206570257025626572A572E072FB +:102E600084F82950256304F13C00A5630AF0B8FCFE +:102E7000002818BFFFDF84F82450F4480BF012FC40 +:102E8000F3494FF011300860091D0860091D086002 +:102E9000091D0860091D0D60091D0860091D0860F5 +:102EA000091D0860091D0860091D0860091D0860EA +:102EB000091D0860091D0860091D0860657770BD5F +:102EC00030B4E1490268DFF890C34A6142688A6120 +:102ED000007A08770A7DDF4BACF1040401204AB187 +:102EE0000A7E00FA02F21A608D7D002D0CBF22606E +:102EF000CCF800204A7D002A04BF30BC70474A7ECF +:102F000090401860C97D00290CBF2060CCF80000FB +:102F100030BC7047D249D1480860091DD1480860CB +:102F20007047CF4A00B5D0491160C0B240F440307C +:102F3000111D40F000700860CC48D0F80001002856 +:102F400018BFFFDF00BD012070B502244FF0E0255F +:102F50000022C5F88041C6490A600860C5490B686F +:102F600023F0770343F0880343F000430B60C24B28 +:102F700040F25B6119601B1F40F203111960191FB9 +:102F80000860BE4803230360BD4996200860AE4E2A +:102F9000BC4896F9241011F1080F08BFF8213CD065 +:102FA00014DC11F1280F08BFD82136D011F1140F0D +:102FB00008BFEC2131D011F1100F08BFF0212CD047 +:102FC00011F10C0F08BFF42127D010E011F1040F0C +:102FD00008BFFC2121D0002908BF026008D00329C6 +:102FE00008BF036004D0042908BF016000D0FFDFE0 +:102FF000707F002814BF4FF4C020A348A349086085 +:10300000A449A3480860091FA3480860C5F8804286 +:1030100096491020C1F8040370BD0160E8E78A4AB0 +:103020000368C2F802308088D080117270478648E9 +:1030300090F829007047844A517010707047F0B5BD +:103040000546800000F1804000F580508B88C0F874 +:1030500020360B78D1F8011043EA0121C0F80016A0 +:1030600005F10800012707FA00F68C4C002A04BF7E +:103070002068B04304D0012A18BFFFDF2068304326 +:103080002060206807FA05F108432060F0BD10B504 +:103090007C49044610F1080F08BFF8202CD014DC3E +:1030A00014F1280F08BFD82026D014F1140F08BF40 +:1030B000EC2021D014F1100F08BFF0201CD014F127 +:1030C0000C0F08BFF42017D011E014F1040F08BF53 +:1030D000FC2011D0002C08BF00200DD0032C08BF0D +:1030E000032009D0042C04BF0420086000D0FFDFB7 +:1030F000554880F8244010BD0860F9E7524890F820 +:1031000034007047504890F836007047644AC178E0 +:10311000116000686349000208607047252808BFF5 +:1031200002210ED0262808BF1A210AD0272808BF5E +:10313000502106D00A2894BF0422062202EB400147 +:10314000C9B2594A11605949086070473E4908623E +:1031500070473D498A7A012A49D0022A18BF704730 +:103160004B7D002B08BF7047DFF844C1012A42D0D5 +:10317000CA7D4B7E002A18BF01227D30CCF80000AA +:10318000DFF830C10020CCF84C01180282F00102B7 +:1031900040EA025040F00312087F830003F18043AD +:1031A00003F5C043C3F81025434A02EB8002887E32 +:1031B000C30003F1804303F5F833C3F81425DFF8A7 +:1031C000FCC0C3F810C5C97ECB0003F1804303F5F2 +:1031D000F833C3F81425304AC3F81025012202FA47 +:1031E00000F002FA01F108433549086070470B7D91 +:1031F000002BB9D170478A7D0B7E002A18BF0122AF +:103200007E30BBE72DE9F84F00280CBF01220222D7 +:103210000D4D164C0320AA72C4F80002687F0028E6 +:1032200014BF4FF4C0201848254F38604FF00108F4 +:10323000002974D0012971D002291CBFFFDFBDE82D +:10324000F88F286A00283DE09C0A0020B00A002080 +:10325000000E0040180500500C0500500601020049 +:103260001415004025000302080110000010004062 +:10327000FC1F00403C17004038150040101500406E +:10328000441500400C1500400000040408F50140FE +:1032900040800040A4F5014010110040401600405D +:1032A000241500401C15004008150040541500402E +:1032B0004C85004000800040006000404C81004090 +:1032C00004F5014008BFFFDF296A286B0844FC4968 +:1032D0000860FD49FB480860A97AFC4801290EBF37 +:1032E0000460FB490160A86B40F40020A863D4F897 +:1032F00000924FF0100AC4F808A30026C4F8006238 +:10330000F4484FF4802BC0F800B0FF208DF8000087 +:10331000C4F81061C4F810803DE000E01CE0012A10 +:1033200013D0C4F80480022A18BFBDE8F88F687D66 +:10333000002808BFBDE8F88FE748C0F84C80E74890 +:103340000068BDE8F84F0A3003E7C4F80080287D24 +:103350000028F1D1BDE8F88FE148012A806B07D041 +:10336000022A18BFFFDF09D0BDE8F84F0A20F0E6B7 +:1033700040F48010A8634FF4801004E040F4001083 +:10338000A8634FF400103860EEE700BF9DF800001E +:10339000401E8DF800009DF8000018B1D4F810010F +:1033A0000028F3D09DF80000002808BFFFDFC4F814 +:1033B0000061C4F80C61C4F81061C4F80461C4F879 +:1033C0001461C4F81861C4F82861C6480068009008 +:1033D000C4F80092C7F800B0C4F804A34FF400206A +:1033E0003860296A286BBDE8F84F08440A30B0E617 +:1033F0002DE9F847BC4CD4F8000220F00309D4F8BA +:1034000004034FF0100AC0F30018C4F808A3002604 +:10341000C4F80062B24D687F002814BF4FF4C0208A +:10342000B248AC490860A87A0127012802D00228D6 +:1034300003D014E0287D10B911E0687D78B1A87E32 +:10344000EA7E07FA00F007FA02F210430860287FCC +:10345000800000F1804000F5C040C0F81065FF20FA +:103460008DF80000C4F81061276104E09DF80000A9 +:10347000401E8DF800009DF8000018B1D4F810012E +:103480000028F3D09DF80000002808BFFFDFC4F833 +:103490001061C4F828616E72AE72EF72C4F80092C7 +:1034A000B8F1000F18BFC4F804A3BDE8F88700689E +:1034B0008F4920F07F40086070474FF0E0200221E4 +:1034C000C0F88011C0F8801270474FF0E021022050 +:1034D000C1F80001704787490870704710B58648E9 +:1034E0000AF086F9002818BFFFDF10BD82480AF0F5 +:1034F00095B982490860704730B5794C0546206B14 +:10350000A84228BFFFDF012020732561607F40B102 +:10351000A81C20617448D0F8001241F04001C0F8A6 +:1035200000126D490020C1F8440175492069086006 +:10353000A06B744940F48000A0634FF480000860E1 +:1035400030BD674802210173CA210161417F41B149 +:10355000CC2101616449D1F8002242F04002C1F857 +:1035600000225D4A0021C2F844110269016B114436 +:10357000634A1160816B41F48001816361494FF4BA +:103580008000086070475649012048775E49022054 +:1035900008605F495D480860091F5E480860704721 +:1035A0004F490020487770474A494FF4800008602F +:1035B0004B48816B21F480018163002101737047C6 +:1035C000454801214160C1600021C0F844114C48C8 +:1035D0000160434801637047414800B5407F0028BF +:1035E00018BFFFDF4020484908603F48D0F800126C +:1035F00041F04001C0F8001200BD394800B5407FDD +:10360000002818BFFFDF3848D0F8001221F0400131 +:10361000C0F800123C490020086000BD3248D0F8D4 +:10362000001221F01001C0F80012012181617047E1 +:103630002D480021C0F81C11D0F8001241F01001F3 +:10364000C0F800127047284981B0D1F81C21012A26 +:103650001EBF002001B070472F4A126802F07F029F +:10366000524202700020C1F81C012C4800680090F2 +:10367000012001B0704730B50C00054608BFFFDFE0 +:1036800014F0010F1CBF012CFFDF002D0CBF012027 +:103690000220134901284872CC72134904BFD1F8A3 +:1036A000000240F0040007D0022807BFD1F8000252 +:1036B00040F00800FFDF30BDC1F8000230BD00005F +:1036C0004885004048810040A8F50140ACF5014024 +:1036D0000410004008F50140008000404C85004087 +:1036E0009C0A002018110040001000400000040453 +:1036F0003C150040A5000020D80A00200415004019 +:103700004485004004F501406015004044800040BD +:103710009CF5014028110040481500401C11004054 +:1037200070B5EF4C0022E17A11F0020F18BF10F0D3 +:10373000040F16D111F0100F1CBF94F83530002B78 +:1037400002D094F8373063B111F0080F1CBF94F821 +:103750002830002B05D111F0040F03D094F8291064 +:1037600001B90122657ADF4900234FF0010C35B120 +:1037700000F00200104314D0BDE8704038E6607FCE +:10378000002814BF4FF4C020D748D84A1060D1F8A1 +:10379000000220F00300C1F80002A37284F80BC0FD +:1037A00070BD012D14D0022D18BFFFDF1CD0A07AF0 +:1037B00001280CBFCE48CF484FF47A7100F2E730B1 +:1037C000B0FBF1F0216BBDE87040081A8C30C0E40A +:1037D000D1F8000220F00400C1F80002637284F8FE +:1037E0000BC084F80AC0E2E7D1F8000220F008001C +:1037F000C1F80002637284F80BC00220A072D6E701 +:103800002DE9F84FBC4FD7F84C21B54CB7494FF0D4 +:103810000108A07A0026CAB1012802D0022803D0EC +:1038200014E0227D12B911E0627D7AB1A27EE37EBE +:1038300008FA02F208FA03F31A430A60227F9200A0 +:1038400002F1804202F5C042C2F81065A26B0A6024 +:10385000A663217B29B1D7F84411012908BF0122B1 +:1038600000D000229F4DD5F8101101290CBF402136 +:103870000021012805BFD5F80C31012B002320239E +:103880001943012805BFD5F80431012B002310236B +:103890000B439A49022804BFD1F800C0BCF1010FC4 +:1038A00007D1D5F80CC1BCF1010F08BF4FF0080CCF +:1038B00001D04FF0000C4CEA0303022804BF096852 +:1038C000002905D1D5F80C11012908BF042100D029 +:1038D00000211943022803D1002A18BF022200D177 +:1038E00000221143022804BFD5F80401012805D1A4 +:1038F000D7F84401012818BF012000D1002040EA78 +:1039000001097F48016811F0FF0F03D0D5F81411A9 +:10391000012900D0002184F83410006810F0FF0F56 +:1039200003D0D5F81801012800D0002084F8350014 +:103930007448006884F836007348006818B1FFF7CF +:10394000AAF9012800D0002084F83700C5F80061EA +:10395000C5F80C61C5F81061C5F80461C5F81461BB +:10396000C5F81861C5F82861684800680090C7F874 +:103970004461674800684D46DFF898910090D9F897 +:103980000000E062617F00291CBF801EE062624887 +:1039900000682063A07ADFF884A102280CD1607847 +:1039A00050B1DAF8001009780840217831EA0000B7 +:1039B00008BF84F8288001D084F82860DFF860818F +:1039C00015F0010F16D098F80010564A4908E06A21 +:1039D00052F821108847012198F80020524B5208D4 +:1039E000206B53F82220904798F8000010F0010F48 +:1039F0000BD01FE015F0200F18BF0221ECD115F0FD +:103A0000020F18BF0021E7D1EEE7DAF80000062226 +:103A100000F10901A01C0AF075FC40B9207ADAF81F +:103A200000100978B0EBD11F08BF012000D00020A2 +:103A300084F829002846FFF773FE15F0020F05D021 +:103A40003A4898F8001050F82100804715F00C0F04 +:103A500007D0374898F8001050F82110C5F3C0007F +:103A6000884715F0200F05D0324898F8001050F81C +:103A70002100804798F80000022805D105F06E006B +:103A8000402806D101F00BFB98F80000042828BF5D +:103A9000FFDFA07A022818BFBDE8F88F207B00283E +:103AA00008BFBDE8F88FC7F84461022814D0012888 +:103AB00018BFFFDF216B2069884298BFFFDF2069B4 +:103AC000C9F80000A06B1C4940F48000A0634FF4CB +:103AD00080000860BDE8F88F2169206B0844EFE79B +:103AE0009C0A0020001000400000040408F501407A +:103AF000F0FE0100B0F8010000800040001400401A +:103B000040160040081400406015004018110040A5 +:103B10004481004044850040408500400415004039 +:103B2000A500002038EA010040EA010048EA01004F +:103B300058EA010068EA010004F5014010B54A485E +:103B400008F047FE0021484808F072FE012146486F +:103B500008F042FE4549002081F822004FF6FF7030 +:103B6000888443490880488010BD10B53E4808F05D +:103B700030FE00213C4808F05BFE01213A4808F085 +:103B80002BFE3A49002081F822004FF6FF7088840E +:103B900037490880488010BD704734498A8C82427A +:103BA00018BF7047002081F822004FF6FF7088840C +:103BB00070472D49016070472D49088070472B4997 +:103BC0008A8CA2F57F43FF3B03D0002101600846A9 +:103BD000704791F822202549012A1ABF016001206F +:103BE00000207047214901F1220091F82220012A8A +:103BF00004BF00207047012202701D48008888849D +:103C0000104670471A49488070471849184B8A8CEB +:103C10005B889A4206D191F82220002A1EBF0160DB +:103C200001207047002070471048114A818C52884B +:103C3000914209D14FF6FF71818410F8221F19B10A +:103C40000021017001207047002070470748084A92 +:103C5000818C5288914205D190F8220000281CBF27 +:103C60000020704701207047020B0020DC0A002072 +:103C7000A60000207047514A012340B1012818BF17 +:103C800070471370086890608888908170475370FF +:103C90000868C2F802008888D0807047474A10B18F +:103CA000012807D00EE0507860B1D2F80200086019 +:103CB000D08804E0107828B19068086090898880E6 +:103CC00001207047002070473C4910B1012803D003 +:103CD00006E0487810B903E0087808B10120704781 +:103CE0000020704730B58DB00C4605460D2104A864 +:103CF0000AF0CDFBE0788DF81F0020798DF81E00CA +:103D000060798DF81D002868009068680190A868A7 +:103D10000290E8680390684609F0AAFB20789DF8B5 +:103D20002F1088420CD160789DF82E10884207D160 +:103D3000A0789DF82D10884202BF01200DB030BD43 +:103D400000200DB030BD30B50C4605468DB00321C6 +:103D5000E01CFEF732FB60790D2120F0C00040F03E +:103D60004000607104A80AF092FBE0788DF81F0013 +:103D700020798DF81E0060798DF81D00286800906C +:103D800068680190A8680290E8680390684609F0A6 +:103D90006FFB9DF82F0020709DF82E0060709DF83D +:103DA0002D00A0700DB030BD10B504460621FEF701 +:103DB00004FB607920F0C000607110BDAA000020F3 +:103DC00070B5F94D044695F88C000026012814D0F2 +:103DD00095F86A0001281CBF002070BD6670122093 +:103DE0002070202205F16C01A01C0AF0B7FA012016 +:103DF000A07185F86A60012070BD66701720207080 +:103E0000D5F88D00C4F80200D5F89100C4F806007A +:103E100085F88C60EFE7E44890F86A10002914BF39 +:103E2000B0F86E004FF6FF70704770B5DF4801784C +:103E3000002918BF0C2601D0304670BDDA4D00268F +:103E4000344685F8626085F8636085F8646085F8BB +:103E5000656085F8666085F85E6085F8606085F865 +:103E6000566085F8366085F868607F21817095F826 +:103E7000670028B1FFF7C1FBFEF7EDFE85F867404C +:103E800085F86A4085F88C40C94808F045FBC94868 +:103E900008F042FBD0E770B5C448002404700178F4 +:103EA00000291CBFFFDF70BDBF4D85F8624085F85B +:103EB000634085F8644085F8654085F8664085F87C +:103EC0005E4085F8604085F8564085F8364085F8B4 +:103ED00068407F21817095F8670028B1FFF78DFB5E +:103EE000FEF7B9FE85F8674085F86A4085F88C4092 +:103EF000AF4808F011FBBDE87040AE4808F00CBBBD +:103F0000A94890F862007047A74900B591F8580099 +:103F100091F85710C0F38002C0F340031A4400F038 +:103F200001001044052910D2DFE801F00B070B0354 +:103F30000900A14931F8100000BDA04800BDA0490A +:103F400000E0A04931F8100000BDFFDF002000BDF7 +:103F5000954840F27121B0F85A00484370479248A2 +:103F600090F86900002818BF0120704710B50400C0 +:103F700016BF022C00200120FFF7A6FE002808BF74 +:103F800010BD89480472012010BD874981F8600086 +:103F9000704710B5844C207A002816BF02280020F4 +:103FA0000120607204F10A01FFF778FE207A0228EE +:103FB00016BF03280121002184F85F10082084F82F +:103FC0005D00607A04F10A02012804BF527912F000 +:103FD000C00F0AD004F10A02012804D1507900F080 +:103FE000C000402801D0002000E0012084F85E00DD +:103FF00029B994F85700012818BF042806D1207C5D +:1040000004F1110107F034FB84F85D004AF2B810A6 +:104010002060FCF7CBFD606004F10A01644808F001 +:10402000A1FA617A624808F0B9FA04F10A0161481C +:1040300008F098FA617ABDE810405E4808F0AEBA20 +:1040400070B5594C417B84F85810017984F85710A9 +:1040500001290CBF00220288A4F85A20827B84F830 +:1040600069208279002A16BF022A002201222274C6 +:10407000D0F80720C4F81120B0F80B00A4F8150000 +:1040800094F856000125002818BF84F8635094F86E +:104090003600002818BF84F8645005292DD2DFE8C7 +:1040A00001F00308222708000021414808F037FAF0 +:1040B00024E001213E4808F032FA04F111013C48A5 +:1040C00008F05EFA207C20B1012818BFFFDF05D080 +:1040D00014E00021364808F06EFA0FE00121344860 +:1040E00008F069FA0AE00621314808F018FA05E0FC +:1040F00002212F4808F013FA00E0FFDF04212D48C9 +:1041000008F00DFA84F86250002070BD70B5264C9E +:104110000546002084F864002A4604F117000AF0DE +:104120001DF984F83650012084F8640070BD10B584 +:104130001D4C002284F8632084F85600024604F1E6 +:1041400037000AF00BF9012084F8630010BD16490E +:1041500081F868007047F0B5144E83B0307810BB1A +:10416000114C94F86200F0B1FFF7B8F9002584F81B +:10417000615075702846FFF7AEF9FEF7E4FEFEF7D2 +:10418000C9FE1148FEF7C2FF1048FFF790F9FFF78C +:10419000D8F994F8580010F0010F1CD02520FEF734 +:1041A000BDFF012626E013E0240B0020B80000200C +:1041B000BC0B0020E40B002088EA01009189130069 +:1041C00090EA010080EA01007BEA010078EA010040 +:1041D00003B00C20F0BD10F0020F04D02620FEF733 +:1041E0009DFF022606E010F0040F03D02720FEF703 +:1041F00095FF0426FEF78EFE84F85C60FFF765F9F4 +:1042000001210020FEF7FEFF0F210520FEF713FF1E +:1042100094F85E00002804BF94F85F00002805D1E0 +:1042200094F85700012818BF04286ED1FCF7BEFC93 +:10423000064631466068FDF7E2FDF949B0FBF1F74B +:1042400001FB170041423046FCF7C9FC6060206862 +:104250003844206007F009FA216888426CD8C4E924 +:10426000005694F85D0007F01FFA064694F85F00C8 +:104270000127002818BF002E04D01021304607F077 +:1042800025FF68B194F8600000281CBF94F85E0018 +:1042900000281AD0607A04F10A0101280DD011E03B +:1042A000677204F10A013046FFF74DFD94F85D1086 +:1042B00004F10A0007F0E9FA07E0487900F0C000CD +:1042C00040281BD00846FFF76FFD04F10A01D548CE +:1042D00008F048F9617AD34808F060F904F10A015E +:1042E000D14808F03FF9617ACF4808F057F994F8BF +:1042F0005700012818BF04281ED107E007F0F9FA7B +:1043000004F10A01FFF71FFDDFE715E094F85D00F7 +:1043100007F0D3F906000FD0102107F0D7FE58B9E7 +:1043200069463046FFF70FFD6946BE4808F028F998 +:104330000121BC4808F03FF9617A04F10A00FEF758 +:104340006EFE94F8570001281EBF042894F86300FD +:10435000002808D094F8562004F13701B14808F03D +:1043600048F984F8635094F8640040B194F836201A +:1043700004F11701AC4808F068F984F8645007F0BC +:10438000F8F9AA4807F072FA84F86700FFF7AEF868 +:1043900003B00020F0BDA6494860704770B5A54C39 +:1043A00006002AD094F8582094F85C1022EA010004 +:1043B00010F0010F04D02520FEF7B0FE012515E016 +:1043C00012F0020F02D011F0020F06D012F0040F0B +:1043D0000CD011F0040F05D008E02620FEF79EFE59 +:1043E000022503E02720FEF799FE0425FEF792FD43 +:1043F00094F85C00284384F85C0094F8610040B1B4 +:1044000094F85700012808BFFFDFBDE8704000F0B6 +:1044100067BA1EB102210020FEF7F4FE94F8650091 +:104420008048FFF766F894F85700052809D2DFE8BE +:1044300000F003030309030001210846FFF71BF9FD +:1044400000E0FFDF94F8580094F85C1030EA0101B6 +:104450004FF0010002D07649087070BD94F85710F3 +:10446000012912BF84F86100002184F85C10F2E792 +:1044700010B5FFF733F86E48007840B96D4890F8F2 +:10448000620020B10020FFF789FF002010BDFFF778 +:1044900097F8FFF789F8FEF7ABFFFFF70EF8FFF785 +:1044A00025F80C2010BD6249012048707047614911 +:1044B00081F86600704770B5002502F07AFE68B199 +:1044C0004FF49670FEF742FE594E3078012809D01D +:1044D000022801D003282ED0FFDF70BDBDE8704058 +:1044E00000F0FEB9534C94F85700032823D094F8F9 +:1044F000670018B1FEF79BFBFFF76EF84B48FEF71D +:10450000F8FF94F85700012818BF04280AD094F83F +:104510006900012814BF0328102545F00E01002072 +:10452000FFF7A9F894F86800012808BFFFF780F8A2 +:104530000220307070BDBDE8704001202EE770B5DC +:104540003C4C3B4D94F8680001281FD094F867005C +:1045500018B1FFF752F8FEF77EFB02F02AFEF8B121 +:104560002878022818BFFFDF94F85700012804BFFD +:104570004FF41970FEF7EAFD0120FFF70FFF2878CE +:1045800000281EBF28780128FFDF70BD2A48FFF7EA +:104590005AF8002804BF7F20A870FFF73FF8D5E73E +:1045A000BDE8704000F09CB92DE9F05F07464FF080 +:1045B0000009FEF7A3FD1E4E82463078022818BF80 +:1045C000FFDF1C4D7F2495F8680001283BD0174879 +:1045D00007F0C4FF83464FF0FF08002F7ED013483A +:1045E00008F0C3F8002879D0FEF721FD002875D027 +:1045F00095F867000D4F68B107F0A0F88046FF28D6 +:1046000008D00146F81C07F078F8404607F0A1F8FA +:1046100040EA0A0A58464FF0010B06285ED20DE028 +:1046200040420F00BC0B0020E40B00200C0C0020CB +:10463000B8000020240B0020BA000020DFE800F0C2 +:104640008888880C8857C848FEF7FDFF002808BFF7 +:10465000B470FEF7E3FFBAE795F85700012818BFDA +:10466000042875D0BAF1000F05D195F8690000282B +:1046700018BF02286CD195F86800012804BF95F88E +:104680008C00002805D0B948FEF733FF03203070B6 +:1046900060E085F88CB0B8F1FF0F0FD005F18E0205 +:1046A000511E404607F012F8002808BFFFDF95F8BA +:1046B0008D0040F0020085F88D000CE03878C0F3E2 +:1046C000801085F88D00D5F8EB00C5F88E00B5F8A0 +:1046D000EF00A5F8920005F1940700E038E0B0780B +:1046E0007F2808BFFFDFB0783870B470CBE7387828 +:1046F000297CC0F380102C46884209D1062204F19F +:104700001101F81C09F0FEFD002808BF012000D0AF +:10471000002094F85D10414504D1B8F1FF0F18BF97 +:10472000012100D10021014394F85700012818BF4E +:10473000042800D149B958B9BAF1000F05D194F84D +:104740006900002818BF012802D194F86600D8B18A +:104750004FF0010995F8670018B1FEF74EFFFEF71C +:104760007AFAB9F1000F1CBF0120FFF717FE30786D +:1047700000281ABF30780128BDE8F09F3078032860 +:1047800018BFFFDFBDE8F09F7068D4F8F710C0F8DD +:104790000D10B4F8FB10A0F8111094F8FD10C174BE +:1047A000B97D0175B7F81710C182B7F819104180AB +:1047B000B7F81B108180B7F81D10C1806C49083014 +:1047C00009F075FF97F8240000F01F01706801766A +:1047D00097F82410490980F8F41094F86A0000282A +:1047E00018BFFFDF4FF0000A204684F86CA0746801 +:1047F0002188A0F86E106188A0F88410A188A0F824 +:104800008610E188A0F8881094F8F41080F88A10D7 +:1048100090F85F1049B1417A00F10A02012904D1F0 +:10482000517901F0C001402934D090F8601041B1B5 +:10483000427A00F10A01012A04BF497911F0C00F40 +:1048400028D0C0F878A0A0F87CA039780546C1F33C +:1048500080116176D0F8EB00C4F81A00B5F8EF10BB +:10486000E183B8F1FF0F1CD0C5F87E00E08BA5F8FE +:10487000820005F172022F46511E404606F026FFC7 +:10488000002808BFFFDF97F8710040F0020087F8AA +:10489000710013E0D0F80A108167C189A0F87C107C +:1048A000D3E73448EEF7A7FB617E85F87110D4F8A2 +:1048B0001A10C5F87210E18BA5F8761085F86AB069 +:1048C00086F800A0FEF77CFEFEF76EFEFEF790FD78 +:1048D000FEF7F3FDFEF70AFE012002F076FD39E750 +:1048E00070B5FEF76DFEFEF75FFEFEF781FDFEF789 +:1048F000E4FD214C002694F8670028B1FEF77DFE08 +:10490000FEF7A9F984F867601C4D2E70FEF7EEFDE6 +:1049100094F85700012804D0BDE87040002002F050 +:1049200054BD022002F051FD94F86A00002818BF1F +:10493000FFDF6878002808BF70BD207C84F8710014 +:10494000D4F81100C4F87200B4F81500A4F8760089 +:104950003C2084F86C0068680088A4F86E00012090 +:1049600084F86A006E7070BDBA000020E40B00206D +:104970002B0C0020A20B0020240B0020B8000020EC +:104980002DE9F041FA4F044600207978F94D4FF0B7 +:104990000108064611B1012925D007E095F84D1010 +:1049A000002918BF87F8018000D0012079782B22D8 +:1049B00011FB02F1294491F8222010431AD02A2237 +:1049C000A01C233109F0CAFC66700420207084F812 +:1049D000028078782B2110FB01F0284480F82260B7 +:1049E0000120BDE8F08195F82210002918BF7E70E3 +:1049F000DBD1DBE795F87800D0B1D5F87900C4F8C1 +:104A00000200D5F87D00C4F80600D5F88100C4F88E +:104A10000A00D5F88500C4F80E0095F88900A07446 +:104A200066701120207084F8028085F8786011E0AB +:104A3000287801281CBF0020BDE8F0816670122094 +:104A400020702022A91CA01C09F088FCA6712E70E1 +:104A500085F8A8600120BDE8F081C64801780029EA +:104A600014BF80884FF6FF7070472DE9F041C14CAC +:104A7000064694F82200002818BFBDE8F0813046B1 +:104A800007F06CFD014601250020072938D2DFE838 +:104A900001F00A0407373737090084F8245009E089 +:104AA000032000E0022084F8240004F12D013046A8 +:104AB00007F0B5FD84F82C0094F8AD0018B1FEF7AE +:104AC000EAF8012820D0304607F071FD84F825006F +:104AD00004F12601304607F04CFD00BFA44E04F15E +:104AE0004C0730787F2808BFFFDF307838707F2090 +:104AF000307084F82250BDE8F041032001F0A2BCE0 +:104B000084F82C00BDE8F081FEF708F904F12602D4 +:104B1000511E06F0DBFD002808BFFFDF94F82510CA +:104B200041F0020184F82510D8E710B5002001F00B +:104B3000F2FB904CA0B1FEF7C8FC00210120FEF76B +:104B400061FB04F1BC00FEF7D4FCD4F8B400FEF71E +:104B5000D3FC94F89C00032818BF02281FD022E041 +:104B6000FEF72EFDFEF720FDFEF742FCFEF7A5FC4A +:104B700094F8AD0030B1FEF740FDFEF76CF8002070 +:104B800084F8AD00012084F8B800022084F8B00059 +:104B9000FEF7ACFCBDE81040002001F053BC012141 +:104BA0000020FEF768FDFEF743FD94F8AD0018B154 +:104BB000FEF73DF8FEF710FD032084F8B00010BDAD +:104BC0006C490028B1F8BA202DD0FF2A0CD24FF63C +:104BD000FF7000EA4200A1F8BA00FF2888BFFF205A +:104BE00002D900BFA1F8BA0061484268012A12BF89 +:104BF000002A0D224260D243C2EBC20303EB021231 +:104C000091F8B930DB4303EB830CCCEB83131A44EC +:104C10004260900CB1F8BA20B0FBF2F302FB130033 +:104C200081F8B9007047012ADED95008A1F8BA000E +:104C300008BF0120D8D1D5E770B54E4C94F8B0002C +:104C4000022819BF94F8B0000128002005461CBFB7 +:104C50000C2070BD2B2101FB004181F82250401C2B +:104C6000C0B20228F6D3257094F8AD0028B1FEF743 +:104C7000C4FCFDF7F0FF84F8AD5084F8A85084F828 +:104C8000A95084F8AC50012084F89700394884F882 +:104C90009C5084F8AF5040F2011120F8941F8170AD +:104CA000002070BD70B5334C002584F8B05001264B +:104CB00084F8B06094F8B00002281BBF94F8B000EC +:104CC00001280020FFDF18BF70BD2B2101FB004130 +:104CD00081F82250401CC0B20228F6D3257094F807 +:104CE000AD0028B1FEF789FCFDF7B5FF84F8AD50A3 +:104CF00084F8A85084F8A95084F8AC5084F89760E0 +:104D00001C4884F89C5084F8AF5040F2011120F800 +:104D1000941F817070BD2DE9F041164C05460C279B +:104D200094F8B00001281FBF94F8B00002280C20AE +:104D3000BDE8F081FEF7D2FBFEF705F9FEF7EAF8D1 +:104D400094F894000126002801BF94F895000028EB +:104D500094F8960000281CBF94F8A900002873D08E +:104D600094F89C00032807D002280AD00DE0000028 +:104D7000C0000020340C00200521FE4800F07BFE1E +:104D800003E00321FB4800F076FE94F8AA00002817 +:104D900004BF94F8AB0000283CD0FBF707FF0746A0 +:104DA0003946D4F8A400FDF72AF8F349B0FBF1F82E +:104DB00001FB180041423846FBF711FFC4F8A4007C +:104DC000D4F8A0004044C4F8A00006F04EFCD4F88B +:104DD000A01088421ED80020C4E9280794F8AB0030 +:104DE000002818BF06F05DFD94F8AC0000281CBF39 +:104DF00094F8AA0000280DD094F88D0004F18E01DB +:104E0000012804D1487900F0C00040280ED008469F +:104E1000FEF7CAFF94F88D1004F18E00FEF7FFF83C +:104E200094F8B0000027012817D106E006F061FDD4 +:104E300004F18E01FEF787FFECE784F8B8600220EA +:104E400084F8B00009E0FFE794F8B000022802BF40 +:104E500084F8B0600C20BDE8F08194F89700A0B110 +:104E600094F89C00032818BF06F0A4FCC34806F081 +:104E7000FDFC84F8AD00C248C4F8B450FEF717FB3F +:104E8000FEF734FB3846BDE8F08106F072FCEDE732 +:104E900070B5FEF723FBBB4C94F8B000022803D09A +:104EA000FEF724FB0C2070BD012084F8B900A4F8A3 +:104EB000BA000220FEF70FFBB348FEF727F9B34B09 +:104EC000002004F1940200BF94F8AF10491CA3FB2A +:104ED000015C4FEA5C0CACEB8C0C6144C9B284F809 +:104EE000AF10895C012907D0401CC0B20328EBD366 +:104EF000FFF71BFE002070BD94F8AF00A449085CCA +:104F0000FEF70CF9FEF706F8F2E710B5040016BF3D +:104F1000022C00200120FEF7D7FE002808BF10BD9C +:104F20009848002180F88C4080F8A910012010BD1D +:104F3000944981F8AC00704710B5924C94F88C00FD +:104F4000002816BF02280020012084F88D0004F1FB +:104F50008E01FEF7A3FE012084F8A90094F88C00CE +:104F6000022816BF03280121002184F8AB1094F811 +:104F70008D0004F18E02012804BF527912F0C00F97 +:104F80000AD004F18E02012804D1507900F0C0004B +:104F9000402801D0002000E0012084F8AA00002869 +:104FA00004BF002910BDFBF701FEC4F8A4004AF2BB +:104FB000B810C4F8A00010BD002816BF02280122B6 +:104FC0000022704981F8972081F89D00704770B5E4 +:104FD0006C4D0C4600280CBF0121002185F897106C +:104FE00085F89E004FF0080085F89F000BD1002C3B +:104FF0001ABF022C01200020114606F039FB85F86B +:105000009F00082801D0002070BD022C14BF032C83 +:105010001220F8D170BD5B4A032808BFC2F898106F +:1050200082F89C0000207047564991F89C000328A4 +:1050300004D0012818BF022807D004E091F89E0090 +:10504000012808BF70470020704791F89D00012893 +:1050500014BF03280120F6D1704710B5FEF7B0FA4F +:10506000FEF7A2FAFEF7C4F9FEF727FA454C94F8CA +:10507000AD0030B1FEF7C1FAFDF7EDFD002084F878 +:10508000AD00012084F8B800022084F8B000FEF7DB +:105090002DFA002010BD3B4981F8B100704710B5D2 +:1050A000FEF78EFAFEF780FAFEF7A2F9FEF705FA90 +:1050B000344C94F8AD0030B1FEF79FFAFDF7CBFD0C +:1050C000002084F8AD00012084F8B800022084F8A4 +:1050D000B000FEF70BFABDE81040002001F0B2B9B5 +:1050E0002DE9F84F274DFF2100247F27DFF8A4800A +:1050F00085F8AE10002800F0D78205F1BC0007F05B +:1051000004FB30B905F1BC0007F01FFB002800F0DC +:10511000CB8295F8B000194E052880F0C282DFE8F6 +:1051200000F0F0F0F003EF00144807F017FA88F8E9 +:10513000020095F8970028B9FDF7E0FF002808BFA6 +:10514000002400D0012495F8AD0070B106F0F6FA05 +:1051500085F8AE00FF280CD00146F01C06F0CDFA11 +:1051600095F8AE0006F0F5FA044395F8AE00FF2876 +:105170001ED111E0180D002040420F00F00C00205D +:1051800098EA0100340C00209EEA0100ABAAAAAA0A +:105190009BEA0100C000002095F8970098B195F8AF +:1051A0009C00032804D006F056FB00BF85F8AE0033 +:1051B00098F80200072880F0B181DFE800F03FAAEC +:1051C00007FCFCFC240006F014FBEFE795F8AD00AB +:1051D00018B1FEF712FAFDF73EFDFE48FEF733FA6E +:1051E000002808BF88F80070FEF718FA002C00F0BD +:1051F0003F8195F89C00012818BF022840F03881B3 +:10520000FEF7F6F868E095F8AD0018B1FEF7F5F98D +:10521000FDF721FDEF48FEF716FA002808BF88F8D1 +:105220000070FEF7FBF9002C00F0228195F89C003D +:1052300002284AD001284FD000F01AB995F8AD00E5 +:1052400018B1FEF7DAF9FDF706FDE248FEF7FBF9C3 +:10525000002808BF88F80070FEF7E0F9002C00F085 +:10526000078195F89C0002282FD0012834D003280C +:105270001CBFFFDFBDE8F88FF178D5F89800827E7B +:1052800091421BD13179C27E914217D17179027F4F +:10529000914213D1B179427F91420FD1F179827F4E +:1052A00091420BD1317AC27F914207D13178427E4F +:1052B000C1F38011914208BF012100D0002195F86F +:1052C0009E20012A0ED0E9B1CEE0C348FFF7CDFB06 +:1052D000BDE8F84F00F0F4BABF48FFF7C6FBBDE8E1 +:1052E000F84F22E4002967D100F11A01BA4807F00B +:1052F00040F9B94807F05BF9D5F898104876B3E063 +:105300001BE1CEE195F8AE0095F89F1088427DD163 +:10531000AAE095F8AD0018B1FEF76FF9FDF79BFC18 +:10532000AC48FEF790F9002808BF88F80070FEF737 +:1053300075F995F8AB0000280CBF4FF0010B4FF04A +:10534000000B4FF00009307806F10901C00907D0C1 +:10535000487900F0C000402808BF4FF0010A01D092 +:105360004FF0000A95F89C00032806D195F89700A5 +:10537000002818BF95F89F0001D195F8AE0006F0FF +:1053800093F9009078B1102106F0A0FE002818BF14 +:105390004FF0010BBAF1000F05D006F1090100989A +:1053A000FEF7A0FC814695F89C0003280FD0FEF77D +:1053B0001FF864B301E0B1E056E0FDF738FE50EAB3 +:1053C00009005BD08448FFF750FB00F03EB9D5F8E8 +:1053D0009800F178827E91421ED13179C27E91424D +:1053E0001AD17179027F914216D1B179427F9142EF +:1053F00012D1F179827F91420ED1317AC27F9142EE +:105400000AD13178407EC1F3801101E030E035E00F +:10541000814208BF012600D00026B9F1000F05D156 +:10542000BBF1000F04D0FDF702FE08B1012200E03D +:10543000002295F89E00012801D010B10AE03CB985 +:1054400008E02EB995F8AE1095F89F30994201D139 +:10545000012100E000210A420AD0012804BF002EE9 +:10546000D5F898003FF440AFBDE8F84F00F089BA96 +:10547000FDF7BEFFBDE8F84FFFF757BB95F89D005D +:10548000032818BF02287DD1BAF1000F7AD0B9F1F4 +:10549000000F77D1504E95F87800002872D1012482 +:1054A00085F87A4095F8AD0018B1FDF7F4FB0128B6 +:1054B00023D0304607F07BF885F87B0005F17C01AE +:1054C000304607F056F8304607F07EF885F882003F +:1054D00005F18301304607F05AF898F8000005F10D +:1054E00089067F2808BFFFDF98F80000307088F831 +:1054F000007085F878400320A5E0FDF70FFC05F16A +:105500007C02511E06F0E2F8002808BFFFDF95F884 +:105510007B0040F0020085F87B00D4E795F8AD00F1 +:1055200018B1FEF76AF8FDF796FB2A48FEF78BF8EC +:10553000002872D188F80070CFE0274807F00EF8F5 +:1055400088F802002548F178427A91421ED13179DB +:10555000827A91421AD17179C27A914216D1B17987 +:10556000027B914212D1F179427B91420ED1317A84 +:10557000827B91420AD131780078C1F38011B1EB7E +:10558000D01F00E04AE008BF012600D00026FDF74A +:105590002FFF98F8020004286DD1EEB30D48FEF7F6 +:1055A00052F8002808BF88F80070FEF737F895F821 +:1055B000B80000281CBF0020FFF702FB4FF00109D4 +:1055C00085F8B890044E95F84D0038BB042085F856 +:1055D0004F0005E0C0000020F00C0020180D002056 +:1055E00095F8AD00A6F1910418B1FDF754FB012820 +:1055F0002FD0304606F0DBFFFE4981F8500004F161 +:105600002601304606F0B5FF05F15801304607F097 +:1056100032F885F8570002E02DE05EE015E01F2823 +:1056200084BF1F2085F8570005F1770498F8000023 +:105630007F2808BFFFDF98F80000207088F800700E +:1056400085F84D90042000F0FDFEBDE8F84FFFF70F +:105650006CBAFDF763FB04F12602511E06F036F822 +:10566000002808BFFFDFE34890F8500040F0020038 +:1056700084F82500C8E7E048FDF7E5FF002808BFEB +:1056800088F80070FDF7CAFF95F8B800002804BF3D +:105690000120FFF795FA85F8B840BDE8F84FFFF70D +:1056A00044BAFFDFBDE8F88F95F8B000052828BFA1 +:1056B000BDE8F88FDFE800F0030303041900F1E709 +:1056C00095F8AD0018B1FDF798FFFDF7C4FACA4888 +:1056D000FDF7B9FF00283FF42DAFFDF79FFFFDF761 +:1056E00087FEBDE8F84FFFF720BAC348FDF7ABFFD0 +:1056F000002808BF88F80070FDF790FF95F8B80003 +:10570000002804BF0120FFF75BFA85F8B840FDF7D9 +:105710006FFEBDE8F84FFFF708BA70B5B54C94F8C6 +:10572000B000072870D2DFE800F085858585850404 +:105730000D00B248FDF7DDFEFDF77AFF042084F886 +:10574000B00070BDFDF73CFFFDF72EFFFDF750FEEA +:10575000FDF7B3FE012584F8B850022084F8B000AC +:10576000FDF7C4FE2078002818BFFFDF0026A670D2 +:10577000D4F898000188A180418861838188A18341 +:10578000C088E08394F8B10084F8200094F8AB104E +:105790009B4849B10178C21CC1F3801121B15179F4 +:1057A00001F0C001402927D094F8AC1041B110F8A5 +:1057B000031BC1F3801119B1407910F0C00F1BD049 +:1057C0009048EDF718FC00BF94F8AD0018B1FDF754 +:1057D00062FA012819D0D4F89800417EE171D0F81E +:1057E0001A10A160C08BA081666126832570BDE878 +:1057F0007040022000F026BED4F8E700C4F80E0086 +:10580000B4F8EB006082DFE714E0FDF787FA04F1FB +:105810000802E11D05F05AFF002808BFFFDFE0790C +:1058200040F00200E071D4F8BF006061B4F8C3003A +:105830002083DBE7FFDF70BD70B56E4C94F8B000DD +:105840000025052828BF70BDDFE800F03939391B75 +:1058500003006948FDF7F7FE10B967497F2008701B +:10586000FDF7DCFE94F8B800002804BF0120FFF724 +:10587000A7F984F8B850FDF7BBFDBDE87040FFF70D +:1058800054B9FDF79DFEFDF78FFEFDF7B1FDFDF765 +:1058900014FE94F8AD0028B1FDF7AFFEFDF7DBF97B +:1058A00084F8AD50012084F8B800022084F8B000DC +:1058B000FDF71CFEBDE87040002000F0C3BD70BDC8 +:1058C00070B5012000F027FD4A4CC8B104F1E40195 +:1058D000A1F1280006F07BFE04F1E40694F88D1097 +:1058E000304606F05BFE04F18E01304606F03AFECB +:1058F00094F8AB00C0B394F89C0003281FD025E0B7 +:10590000FDF75EFEFDF750FEFDF772FDFDF7D5FDDC +:1059100094F8AD0030B1FDF770FEFDF79CF9002062 +:1059200084F8AD00012084F8B800022084F8B000AB +:10593000FDF7DCFDBDE87040002000F083BD94F869 +:105940009700002818BF94F89F0001D194F8AE008A +:1059500005F0D1FF050007D00121304606F01EFEFC +:105960002946304606F0FEFD2548FDF7C2FD01211F +:105970000846FDF780FEFDF7E4FD052084F8B00041 +:1059800070BD2DE9F041022000F0C5FC194C012644 +:10599000E0B1012000F056FD04F1E401A1F128007E +:1059A00006F015FE04F1E40794F88D10384606F071 +:1059B000F5FD04F18E01384606F0D4FD94F8AB00F5 +:1059C000B8B194F89C0003282AD030E0FDF7F8FD28 +:1059D000FDF7EAFDFDF70CFDFDF76FFD94F8AD0056 +:1059E00030B1FDF70AFEFDF736F9002084F8AD006E +:1059F0000AE02AE0340C0020C0000020F00C002057 +:105A0000180D0020420C002084F8B860022084F8B1 +:105A1000B000FDF76BFDBDE8F041002000F012BDC5 +:105A200094F89700002818BF94F89F0001D194F8CB +:105A3000AE0005F060FF050007D00121384606F0F2 +:105A4000ADFD2946384606F08DFDD4F89800C18A90 +:105A5000334806F03CFED4F89800017D304806F04B +:105A60003AFE2F48FDF745FD84F8A860062084F82B +:105A7000B000BDE8F08170B50C46054606F04CFD5F +:105A8000032C47D0052C18BF70BD0521284606F011 +:105A900046FD244CD4F8980000F10D01284606F08C +:105AA00000FED4F8980000F11101284606F0FDFD33 +:105AB000D4F89800017D284606F00DFED4F8980031 +:105AC000C18A284606F003FED4F89800418828468B +:105AD00006F0F1FDD4F898008188284606F0EFFD25 +:105AE000D4F89800C188284606F0EDFDD4F8980057 +:105AF00000F10801284606F005FED4F89800017E62 +:105B0000284606F0EAFD94F8B1102846BDE870403A +:105B100006F0EDBD2846BDE87040032106F0FFBC4D +:105B2000180D0020340C00202DE9F047FA4E0546F0 +:105B300084B096F800040C46DFF8E0A340099AF818 +:105B400000144909884218BFFFDF96F80004400995 +:105B5000F34991F800144909884218BFFFDFF14F5B +:105B60006E1E07F13C0909EB45054FF00008092CB2 +:105B700080F0CF80DFE804F005444E4E49CDCDCD16 +:105B80007A000B2EA8BFFFDF35F8020C0621F9F7CB +:105B90006AF9040008BFFFDF0B2EA8BFFFDF35F84E +:105BA000020C2188884218BFFFDF94F8C00000284B +:105BB00008BFFFDFC7F80480A7F802802146002055 +:105BC000C7F8108006F0AEFB616A9830814284BF4E +:105BD000081A00F18D0821460020C7F8088006F059 +:105BE000A1FB618840F2E24251439830081AA0F2CA +:105BF0000F30F86004B02046BDE8F04702F040BC2A +:105C000004B0BDE8F04702F0BEBC04B0BDE8F04708 +:105C1000FDF7F6BD9AF8140DC349400991F8001438 +:105C20004909884218BFFFDF0B2EA8BFFFDF35F8F8 +:105C3000020C0621F9F717F9040008BFFFDF0B2E4D +:105C4000A8BFFFDF35F8020C2188884218BFFFDFAC +:105C5000002201232146684600F0CEFC94F8CA00D9 +:105C60006946FBF734F904B0BDE8F0870B2EA8BFF6 +:105C7000FFDF35F8020C0621F9F7F5F8040008BF3C +:105C8000FFDF0B2EA8BFFFDF35F8020C218888420A +:105C900018BFFFDF94F8C000042818BFFFDF84F8A6 +:105CA000C08094F8CA504FF6FF76681E0B28A8BF34 +:105CB000FFDF09EB450020F8026C94F8CA00FAF700 +:105CC0005FFF84F8CA80D4F8D000002804BFD4F85D +:105CD000CC00786108D0D4E93512114482691144AE +:105CE0008161D4E93301C860D4F8CC0000281CBF1E +:105CF000D4F8D010016105D1D4F8D000002818BF25 +:105D0000C0F818808948007804B0BDE8F047F4F77F +:105D100065B9FFDF04B0BDE8F0872DE9F047844D99 +:105D20000746E88B6C68401CE88328784FF0000831 +:105D3000002808BFFFDF07D0DFF8E8A1042814D04F +:105D4000052818BFFFDF40D021462869FAF747FF32 +:105D5000B86087F8008001203871A86800F2271029 +:105D6000F860287804287CD185E00029ECD02E69E1 +:105D7000DAF8141039B38946C9680029FBD1B9F1A2 +:105D8000000F20D099F80000002808BFFFDFD9F8E5 +:105D90001410D9F8040001443046FCF730F800280C +:105DA00007DA211A4A1E92FBF4F202FB040621468E +:105DB00004E090FBF4F202FB140621468E4288BFF9 +:105DC000FFDF3446C0E74446BEE70029BCD0D5F823 +:105DD0001890B9F1000F08BFFFDF0026D9F8D410E2 +:105DE000DAF814403046721E5CB1A069884228BFC0 +:105DF000824284BF024626462046E468002CF4D145 +:105E000006B9064609F1C004C9F8D060002E04BFE7 +:105E1000C4F80C80CAF8144005D0F068F460E06063 +:105E2000002818BF0461D4F81090C4F81880B9F1A4 +:105E3000000F0ED0D9F8180048B1D4F814A050457E +:105E400038BFFFDFD9F81800A0EB0A00A061C9F83D +:105E50001880002E08BFC5F8208009D030780028AF +:105E600000E00DE008BFFFDF716970680844286238 +:105E700040F6B83468E7E88B0A2838BF032000D31F +:105E800002207871E88B012806D93846696806F047 +:105E90000EFAE98B0844E883B8682861BDE8F0870A +:105EA0002DE9F0411C4C804684B094F800040E4665 +:105EB0001A4F410997F800044009814218BFFFDFDB +:105EC00094F800044009164991F8001449098842E1 +:105ED00018BFFFDF00250122092E154C65D2DFE82F +:105EE00006F0052942423D6464185500627322732E +:105EF000607800281CBF04B0BDE8F0810948456007 +:105F000005612573A068CD38FEF705FF002818BF8E +:105F1000FFDF04B0BDE8F08101E000E00BE000E04D +:105F200018E000E0400D002019E000E0C80000206B +:105F3000580D0020607850B1207B002808BFFFF783 +:105F40008CF8657304B0BDE8F041FAF75EBDA2734A +:105F5000FEF79EFF002818BFFFDFDAE704B0BDE8B8 +:105F6000F041FDF74DBC97F8140DF849400991F840 +:105F700000144909884218BFFFDF00216846FFF777 +:105F8000CCFE69464046FAF7A2FFC2E72078052812 +:105F900018BFFFDF207F002808BFFFDF25772570AF +:105FA000207DFAF7EDFD2575B3E7FFDFB1E72DE9B9 +:105FB000F041E74C84B00025207804281FBF2078EA +:105FC00005280C2004B018BFBDE8F08101276770D8 +:105FD000607B002690B172B6607B00281CBFA07B5E +:105FE000002805D0FFF739F86673A673FAF70DFDA0 +:105FF00062B6207DFBF78FFFD0B913E094F81480D0 +:1060000003208DF804008DF80500FAF7CFFD02900B +:106010004FF0FF3003908DF8007069464046FAF764 +:1060200056FFE6E720BF207DFBF775FF0028F9D07B +:10603000207F28B126772078052818BFFFDF0C25A0 +:1060400066702670207DFAF79BFD267504B0284601 +:10605000BDE8F0812DE9F047BD4884B00078002804 +:1060600018BFFFF7A4FF0120BA4E30706946062022 +:10607000F8F785FE002818BFFFDF00254FF6FF77F1 +:1060800018E0029800281CBF90F8C010002911D019 +:106090000088B84218BFDFF8C08245D00621F8F763 +:1060A000E2FE040008BFFFDF94F8CA00FBF733FFED +:1060B00068B905E06846F8F740FE0028E1D033E013 +:1060C00020BF94F8CA00FBF726FF0028F8D084F818 +:1060D000C05094F8CA904FF6FF7AA9F101000B283E +:1060E000A8BFFFDF08EB490020F802AC94F8CA0013 +:1060F000FAF746FD84F8CA5069460620F8F73FFED5 +:10610000002818BFFFDF0AE0029800281CBF90F8A3 +:10611000C010002903D00088B842BFD104E068460F +:10612000F8F70BFE0028EFD03570756104B0002041 +:10613000BDE8F08710B50078884C60B101280CBF2D +:1061400040F6C410FFDF06D0A06841F66A0188421D +:1061500028BFFFDF10BDA060F6E710B57F4C00231D +:1061600020707B480370437003770373437383731A +:1061700083610375183843703C304FF6FF7101801E +:106180000522418020F8041F521EFAD1180008BFD2 +:10619000A36005D0002B0EBFFFDF40F6C410A06047 +:1061A000A06841F66A01884228BFFFDFBDE81040C1 +:1061B00050E770B5664C0E4684B02178154600292C +:1061C0001EBF0C2004B070BD416A01F29731C0F8C7 +:1061D000D410A06190F8C000002818BFFFDF40F283 +:1061E000712006FB00F168430A30C4E90110A1F5F3 +:1061F0003D71884288BF0846A0605649002008616A +:106200000521217060702077E0835548FAF768FC1B +:106210002075002808BFFFDFFAF7C8FC20610121C4 +:106220006846FFF77AFD207D6946FAF750FE04B014 +:10623000002070BD4648007800281CBF0020704731 +:1062400010B50620F8F7ACFD80F0010010BD10B5C8 +:106250003F4C84B02278002A1EBF0C2004B010BD31 +:1062600040F27122424340F2712048430A30C4E9AF +:106270000120A2F53D71884298BF01460020A1602F +:10628000607004212170E0833548FAF729FC2075FD +:10629000002808BFFFDFFAF789FC40F6B831FAF7AB +:1062A0009EFC206101216846FFF737FD207D69468D +:1062B000FAF70DFE04B0002010BD70B5244CA169A2 +:1062C0000160FFF774FE002300BBA169D1F8D02064 +:1062D0005AB1D1E935C5AC449569AC44C2F818C08F +:1062E000D1E9332CCCF80C2005E0DFF868C0D1F8F8 +:1062F000CC20CCF81420D1F8CC20D1F8D010002A32 +:1063000018BF116102D1002918BF8B61A36170BD54 +:106310001049487070470F4910B54968002801F1CD +:10632000980408BF04F5BC7409D0012808BF04F51F +:10633000317404D0022814BFFFDF04F5B0740448A0 +:106340008068A0428CBF0120002010BD19E000E051 +:10635000580D0020400D00207C0D0020C8000020BA +:10636000A15E010010B5FB4C607828B1D4E90201B0 +:10637000626805F0C3FFA060D4E9010188429CBFB8 +:106380002078002814BF0020012010BD042210B581 +:1063900084B0002938D0012901BF032180F8C01042 +:1063A00004B010BD022928D003291EBFFFDF04B0AE +:1063B00010BD0446408840F2E2414843E649086087 +:1063C000D4F8E4000089E082D4F8E40080792075F4 +:1063D000D4F8E40040896080D4F8E4008089A0808B +:1063E000D4F8E400C089E0802046616A05F0F4FF3B +:1063F000022084F8C00004B010BD80F8C02004B0B2 +:10640000BDE81040FAF701BB0446D24800780028E6 +:1064100018BF84F8C02004D004B0BDE81040FAF7DB +:10642000F4BA012200232146684600F0E5F894F80A +:10643000CA006946FAF74BFDB4F85000401CA4F8B6 +:106440005000E9E72DE9F041C44F0025C44C3978EC +:1064500084B0052880F0B780DFE800F0031363AF55 +:10646000AF00E5830846F3F7B9FD6078002869D1ED +:1064700000216846FFF751FC207D6946FAF727FDA9 +:1064800060E0DFF8D082206940F2E243D8F80410DF +:106490000844A16900F251604A88C03102FB03F54B +:1064A000D8F814208A4208BF002614D0216AFBF7CE +:1064B000A6FC002807DA291A4A1E92FBF5F202FB15 +:1064C0000506294604E090FBF5F202FB1506294675 +:1064D0008E4288BFFFDFB868864208D2A06940F2CA +:1064E00071224188C1824A4306EB420605E040F230 +:1064F000E240B6FBF0F0A169C882A06905210175F0 +:10650000C08A6FF41C71484306EB400040F63541E9 +:10651000C8F81000B0EB410F28BFFFDF04B0BDE8A2 +:10652000F081E5830846F3F759FD01202077A06943 +:106530002169C0F8C41080F8C0502178052918BF1F +:10654000FFDF06D0FAF761FA6573A57304B0BDE802 +:10655000F081002808BFFFDFA06990F8C000002884 +:1065600018BFFFDFA06990F8CA00002818BFFFDF3E +:106570007C48FAF7B5FAA169064681F8CA000F8887 +:10658000401E0B28A8BFFFDF774800EB460020F82D +:10659000027CA06990F8CA00002808BFFFDF002332 +:1065A00001226846A16900F027F8A069694690F8C1 +:1065B000CA00FAF78CFCA561C4E704B00846BDE840 +:1065C000F041F3F70BBDFFDF04B0BDE8F081704789 +:1065D00000B5604A59B1012908BF401E07D0022901 +:1065E0001CBFFFDF00BD5188491C5180C01F506097 +:1065F00000BD5B48007870472DE9F05F05460C460A +:10660000488840F2E24100FB01FBE08A002600FBE3 +:1066100001FA94F85B0099461746082816BF072828 +:106620004FF001084FF00008B9F1000F03D001212D +:10663000204602F097F894F8C00040B101282FD00E +:10664000022815D0032818BFFFDF29D038E0002F1B +:1066500008BFFFDF3F4E7068002808BFFFDF70688B +:106660003169C01D08440AF25D414618012014E05A +:10667000DFF8E0B0791EDBF80400084308BFFFDF55 +:106680003548006800EB0A0637B1DBF8040000F279 +:106690000F30B04288BFFFDF032084F8C0000EE057 +:1066A0005E4667B12B4F786818B97888002818BF04 +:1066B000FFDF786800F20F30B04288BFFFDF06B915 +:1066C000FFDF3146D4F8C400FAF789FAC4F8C400F1 +:1066D000A8600020287001272F71204602F026F9BB +:1066E000A8F10101084208BF6F7106D094F8C000FC +:1066F00001280CBF022003206871606A00F5E57074 +:10670000E86039EA080008BFBDE8F09F3146284636 +:1067100005F0CDFD1FFA80F8204602F007F940454C +:106720000FD880466F7106FB08F1D4F8C400FAF761 +:1067300056FAA8603146284605F0B9FD40441FFAD4 +:1067400080F84146204602F00DF8A868C4F8C4005D +:10675000BDE8F09F400D0020CC000020C8000020C4 +:10676000580D0020295B01007C0D0020F948C07EF7 +:106770007047F94840687047F848C07E70472DE977 +:10678000FF4FF44F83B05FEA0309786A3C680568FD +:1067900020690090B5F8D6A0D7F820801CBF94F8E7 +:1067A0003400002803D007B00220BDE8F08FB5F810 +:1067B00050100598401A1FFA80FBB9F1000F19BF5D +:1067C00004F1380604F148003E1D05F1D0000190A7 +:1067D000032030710398002834D0012800F0E280B3 +:1067E00002287FD0032818BFFFDF00F0198100BF07 +:1067F000B9F1000F1EBF30790328FFDF616A7869A5 +:10680000FAF7EDF9B060D4E90710814287BF01992A +:106810000860019801600198696A0068084400F204 +:106820004F10F060B5F8C0100598081A00B20028A3 +:1068300040F335810398022818BF032040F03081CF +:1068400000F02DB9B8F1000F08BFFFDFE98A40F270 +:106850007120484340F2E24101EB400204990020DC +:10686000002906D0BE4801FB02F1B1FBF0F000F1B7 +:1068700001006061698840F2E24201FB02F3049A80 +:106880004FF0000106D0B64902FB03F2B2FBF1F172 +:1068900001F10101A16108F101016162EA8A40F29E +:1068A000712302FB03F2C0EB420202F237420A44B8 +:1068B0006262297D40F2E24311FB03F101EB4000EB +:1068C00000F21510E0612062A2EB0800A549A0F1DA +:1068D000010009188CD2B0F5387F00E002E098BFC3 +:1068E000FFDF57E0E98A40F271226068514300EB14 +:1068F000410204980021002806D000FB02F19848CC +:10690000B1FBF0F000F101016161688840F2E24101 +:1069100000FB01F204994FF0000006D0904801FB03 +:1069200002F1B1FBF0F000F10100A061B8F1000F3D +:1069300008BFFFDFBAF1000FE98A40F271226068F8 +:1069400001FB02F100EB4100616918BF401A24D03D +:106950006062A2682168606901FB0200297D40F243 +:10696000E24211FB02F101EB400000F21310E06182 +:1069700069885210A0695143C0EB4100A0F54770EF +:106980002062606AA0EB0800A0F5AA717648401862 +:10699000BFF42EAF012030712AE7411A0098084455 +:1069A000D338D5E7BAF1000F08BFFFDF698840F29E +:1069B00071225143A0690AEB0B02C0EB410101FBBC +:1069C0000BF16162A368D4F814C0D21AD4F800A005 +:1069D000521E0AFB03C302FB00302A7D40F2E24351 +:1069E00012FB03F202EB400000F21310E061A1F58C +:1069F000477020625D48406800283FF4F9AE4FF0D0 +:106A0000010AB8F1000F08BFFFDF606AA0EB0800C1 +:106A1000A0F5AA715448401838BF86F804A0E7E6EC +:106A2000698840F27122A0695143C0EB410000FB2C +:106A30000BF060620098BAF1000F25D0002818BF53 +:106A4000FFDF0AEB0B00A1690022484302EB400084 +:106A500000F21310E061688840F271225043C1EBEC +:106A60004000A0F5477020624048406800283FF48D +:106A7000BFAE616A0120A1EB0801A1F5AA723A49F3 +:106A8000891838BF3071B3E6002814BFB8F1000F81 +:106A9000FFDF616A0098D33808446062D1E70020C4 +:106AA0007071109880B3B5F8E81000290CBF002071 +:106AB000B5F8EA00A5F8EA0095F8EC20401C504330 +:106AC00088420AD27079401E002806DD01207071CC +:106AD000B5F8EA00401CA5F8EA0086F80090B9F184 +:106AE000000F1CBF94F8340000287FF45CAE89F0DE +:106AF000010084F83500387FF97EBA7E914219D0C2 +:106B00003146FAF7E4F91AE0FFE7698840F27122AA +:106B1000A0695143C0EB4101304605F0C8FB0004B9 +:106B2000000CDAD01199002918BF0880012007B0A5 +:106B3000BDE8F08F0020F876B8763860786207B04C +:106B40000020BDE8F08F70B5084D0929D5E9003265 +:106B500070D20DE0940D0020EC000020BC0D002050 +:106B600040420F00DBF7FFFFF4F8FFFFDC000020DE +:106B7000DFE801F0056178807493935D8F00002059 +:106B80001062D17E042953D2DFE801F05252024A4A +:106B9000516A0C681168C88111680861106890F822 +:106BA000350040B9FAF702F869680968096CFBF723 +:106BB00026F900281BDC686801684A8EB4F850107A +:106BC0008A4207D1B4F8C420511AA4F8C610A4F818 +:106BD000502006E0511AA4F8C6100168498EA4F8A6 +:106BE00050100268C1681164C168416113E06868AF +:106BF0000168098EB4F85020891AA4F8C6100168FB +:106C0000098EA4F8501001680A6CC2600A6C4261D7 +:106C1000886CC4F8D0002046BDE8704003F06ABA22 +:106C2000D0685061FDF797FA002818BFFFDF70BDEC +:106C3000FFDF70BD31E0D07E04280DD2DFE800F028 +:106C40000C0C0206BDE8704003F090BBFDF710FC91 +:106C5000002818BFFFDF70BDFFDF70BDBDE87040CA +:106C6000FCF7CEBDD87E02280FD0D87E032818BFEF +:106C7000FFDF06E0D87E022807D0D87E032818BFA1 +:106C8000FFDFBDE8704000F023BCBDE8704000F0BD +:106C900077BCBDE87040F9F773BFFFDF70BD2DE929 +:106CA000F0470026F74DF84F82460C464FF0010999 +:106CB00009295CD2DFE801F005495454495B5B5473 +:106CC00054006868DFF8C083002818BFFFDF214642 +:106CD0005046C5F80480FFF736FFF87E022818BF3B +:106CE000BDE8F0876868D0F80080406A0568F9F769 +:106CF00040FF6A8840F271235A43D8F81810B72829 +:106D0000C1EB4201A1F1AB0A8CBF0446B72429466E +:106D1000012005F007FB2044AAEB0000A0F201349B +:106D20002946012005F0FEFA696A9C30814288BF3D +:106D30000E1AC8F82C40A64238BF3446C8F828407E +:106D4000386880F83490BDE8F0875046FFF7FBFEC6 +:106D5000F87E022804BF386880F83490BDE8F087D8 +:106D600050462F60FFF7EFFE2E60BDE8F087FFDF93 +:106D7000BDE8F0872DE9F041C24C07460D460929D0 +:106D80001ED2DFE801F005101414101D1D141400AC +:106D90006068BE4E002818BFFFDF2946384666608F +:106DA000BDE8F041CFE63846BDE8F041CBE6B74854 +:106DB00020603846FFF7C7FE00202060BDE8F08164 +:106DC000FFDFBDE8F081F0B5AF4985B00026CA7E8F +:106DD000AC4C032A03D02831CA7E032A64D1002593 +:106DE000216000B3012806BF03208876FFDF0AD0A8 +:106DF0002068002E05604562256055D0A448456096 +:106E000005B00020F0BD2068C17E29B1C17E827E20 +:106E1000914208BF20BFF6D0C17E00290CBF0126D9 +:106E200000268576E4E70026032708468F76C97E8C +:106E3000032904D0C07E002808BF012631E00120CC +:106E4000FDF735FB2068007F002808BFFFDF2068C2 +:106E5000067F8DF804708DF80570F9F7A7FE029093 +:106E60004FF4FA70039001208DF800006946304617 +:106E7000FAF72DF82068007FFBF74DF830B920BFF6 +:106E80002068007FFBF747F80028F8D02068007FD3 +:106E9000F9F776FE20680577C576857605600126C8 +:106EA000456220688576A3E705B00C20F0BD10B5DB +:106EB000754800F0EDFB754800F0EAFB75490020CD +:106EC0000873734948707049486101F128025061A4 +:106ED000887690766B494860086010BD2DE9F041D6 +:106EE0006D4E054696F800046C4C400994F8001469 +:106EF0004909884218BFFFDF96F800044009684935 +:106F000091F800144909884218BFFFDF94F8140D66 +:106F10004009644991F800144909884218BFFFDF0D +:106F2000614800240570584DEC76AC7605F12806D2 +:106F3000F476B4760121103000F108070171046085 +:106F40006C6274622C60346005F150087C6088F8D3 +:106F50003740284600F09CFB05F1280000F098FB24 +:106F600088F80C407C706C617461AC76B476A7F1E3 +:106F7000100044600460BDE8F0814C49087170471E +:106F80002DE9F84340490546CA7E3E4C01F12800F0 +:106F9000002A04BFC27E002A72D0C97E022907BF20 +:106FA000C17E00290C20BDE8F88320604048F9F735 +:106FB00097FD2168087736484560216808601438D5 +:106FC0004862ADB1012105F1EC00FBF747FA06205C +:106FD000F7F7F4FE06460720F7F7F0FE95F8EC10F9 +:106FE0003044B1FBF0F200FB1210401C85F8EC00BD +:106FF0002068007F002808BFFFDFF9F7BAFD2D49A0 +:10700000091838BF40F2F65000F26B1087B22068C2 +:107010000326C676FCF778FF21680861FCF798FF25 +:1070200000254FF0010800284DD0FCF791FF2168A2 +:107030004A6A10600868012180F800806846FBF702 +:1070400098F99DF8000042F210710002B0FBF1F2D5 +:1070500001FB12000744F9F7A9FD3946F9F7BFFD16 +:107060002168C8602268167256721571107FD37E2F +:10707000111D92F81AC0634532D0F9F728FF33E0AA +:107080001AE00000DC000020940D0020BC0D002060 +:10709000EC000020E40D002001E000E00BE000E047 +:1070A00018E000E019E000E0D4000020E400002037 +:1070B000756D01000AFAFFFFFA482160F9F710FD2B +:1070C0002168087777E7F9F771FD3946F9F787FD09 +:1070D0002168C86008680570086880F80180C1E709 +:1070E000D576957615605562206805830020FDF7FA +:1070F000DEF900202560BDE8F88370472DE9F041F6 +:10710000E94F82B0F97E19B907F12801C97E19B19A +:1071100002B00C20BDE8F0810221F976E34EE44D87 +:107120003E607D62002428603473DFF8888329790B +:1071300090F8F420438838F8111038F812201144E0 +:107140000A04120C214605D002FB03F1DA4AB1FB16 +:10715000F2F1491C8AB2416A05F0A9F90094019440 +:1071600029682879002391F8F41038F810001A469D +:1071700038F81110084481B21846FFF700FB0028C8 +:1071800018BFFFDFB460012034603073748634862A +:1071900086F836402868B0F85010491EA0F8501004 +:1071A0003C8302B00020BDE8F081C04981F837007F +:1071B0007047C24810B540680124817E032908BF8A +:1071C000002409D00168497831B1006ABC4988427D +:1071D00084BF0024FDF767F9204610BD70B5B7489D +:1071E00044682068C189491CC1812268D2E90A012A +:1071F00092F83720256A002A1CBF2A4605F07EF83F +:1072000021688542886205D82068007B01281CBF60 +:10721000012070BD002070BD2DE9F043A74CA248AD +:1072200083B02060416A006800260D6880F83460F1 +:1072300095F8CE10002904BF007B032856D1F9F73A +:10724000B5FC014620684069FAF7D9FD00F261708B +:1072500000284BDD216840F271274A6A0B681268EA +:10726000D3F818C052887A43CCEB4202B0FBF2F05C +:10727000B5F85020401C104418860868B5F8C420A2 +:10728000018E511A09B2002930DD012180F8361033 +:10729000B5F87600B5F87410DFF81882401AB5F822 +:1072A0005010401E084487B20DF1080917E0516ADA +:1072B000097938F81110CDE90069028E95F8F4309B +:1072C000007B38F81330194489B20123FFF757FACD +:1072D00060B101280ED0022818BFFFDF06D0226857 +:1072E0001068018E791A09B20029E0DA266003B02D +:1072F000BDE8F08320680068018EBDF808201144C5 +:107300000186ECE770B56D4C0025062861685AD2FD +:10731000DFE800F0141C030E200D002000F0F5F94A +:107320006068C57685760560456268B1656070BD48 +:107330002068C57685760560456270BD012000F045 +:10734000E4F960680028F1D1FFDFEFE70968032066 +:10735000087370BD486A0A680068936913604288C0 +:10736000096840F2E2435A434A60B0F81011C18202 +:1073700090F80E110175B0F812114180B0F8142187 +:107380008280B0F81621C280494A4A4B92F804C064 +:10739000126833F81CC092F8F42033F812206244CB +:1073A00013041B0C4FF0000204D0434A5943B1FBB5 +:1073B000F2F14A1C92B2416A05F079F86168022044 +:1073C0000968087370BDFFDF70BD70B53B4D0024C8 +:1073D00070B1012812D002281CBFFFDF70BD00F081 +:1073E000F2F96868C47684760460446220B924E0C7 +:1073F00000F0E9F9686800B36C6070BD6868016806 +:107400004C70C47684762F4E04604462002170680C +:1074100004F0CAFB706880F80A4180F80B41FFF75E +:107420006DFE002818BFFFDFF9F7EFFA26486C6001 +:107430000078F2F7D3FD6C6070BDFFDFDCE71F4919 +:107440004968CA7E022A18BF70470A68D389002B90 +:1074500018BF704710610A682838936A0344936222 +:107460000968CA6A1044C8627047144A00B5526875 +:1074700041B1012908BF401E04D0022916BFFFDF19 +:10748000C01F00BD106200BD1048C07E00281CBF98 +:107490000020704710B50720F7F782FC80F001004C +:1074A00010BD00009F6C0100940D0020E40D002031 +:1074B000E4000020A2EA010040420F00DC000020AE +:1074C000CF821300EC000020D4000020BC0D00206F +:1074D0002DE9F843DB4D4FF003080027286801260B +:1074E000041D80F80880077100684078012836D0B4 +:1074F00001216846FAF73DFF9DF8000042F2107145 +:107500000002B0FBF1F201FB12002968496A096828 +:107510000E183146A068F9F762FBA060314620469C +:1075200004F0C5FE461C2868018B0A299CBF314423 +:107530000183C54988421CBF018B0A2992BF84F888 +:10754000058002216171027FC37E214690F81AC036 +:1075500063450FD0BDE8F8431046F9F7B8BC4FF4C7 +:107560007A71A068F9F73BFBA0600021204604F087 +:107570009EFED8E7C776877607604762BDE8F88346 +:107580002DE9F047AF4E84B03068416A04680D6859 +:1075900094F8351039B1618EB5F85020914202BF90 +:1075A000407A0028FFDFF9F701FB32685269014693 +:1075B0001046FAF724FC31684FF0000900284A6AA7 +:1075C000126808BF48460AD00B68528840F2712CF6 +:1075D0009B6902FB0CF2C3EB4202B0FBF2F0B5F880 +:1075E0005020638E02EB000C6345AEBF581C401C5C +:1075F0001044608694F8360030B9608EB5F8C42027 +:10760000904204BF401C6086088B904F401C08834A +:10761000B5F87600B5F874100DF1080A401AB5F8FF +:107620005010401E08441FFA80F819E03068406A84 +:10763000007937F81000CDE9009A95F8F41037F882 +:107640001110084481B2207B0023FFF798F800282E +:1076500004BF04B0BDE8F087012818BFFFDF11D0D8 +:10766000628EA8EB020000B20028DFDA082085F85D +:107670006A00012085F8690004B02846BDE8F0479B +:1076800002F05FBA608EBDF8081008446086E7E734 +:107690002DE9F047DFF8B8816A4C05464FF01F0925 +:1076A0000027EE7E042E23D2DFE806F02922021DF9 +:1076B000454518BFFFDF02202560A8762168C87EF7 +:1076C00028B1C87E8A7E904208BF20BFF6D0C87E0F +:1076D0008F7600281CBF4FF00C0927600CD10F607B +:1076E0004F6227600BE00120FFF76DFB814600E051 +:1076F000FFDFB9F1000F02D0E87EB042D1D1E87EC1 +:10770000002818BFFFDFBDE8F087F0B54D4E00251B +:1077100083B072680128516A0C6847D108794B4BD5 +:1077200033F81010106890F80CC00127BCF1030F5B +:1077300006D0027B022A13D0007B012825D035E039 +:10774000856010680560CDE9007594F8F400B4F820 +:10775000C42033F810000023084481B2032020E045 +:10776000B4F8D6208260CDE9007594F8F400B4F83E +:10777000C42033F810000023084481B20220FEF731 +:10778000FEFF716809680F730DE0CDE9007594F88C +:10779000F400B4F8C42033F810000023084481B288 +:1077A0000120FEF7ECFF002818BFFFDFF9F72DF9E5 +:1077B000706805830268B4F850105186006880F83C +:1077C000365003B0F0BD38B51E4C00200546616848 +:1077D00009684A78002A18BF4D702AD1097861B12A +:1077E00001216846FAF7E9FD9DF8000042F21071A8 +:1077F0000002B0FBF1F201FB12006268516A0968F5 +:107800000144D068F9F7EBF96268D0601571032084 +:107810005072107FD37E111D92F81AC0634502D0BA +:10782000F9F755FB03E0D5769576156055626068EB +:107830000583F9F7EAF807480078BDE83840F2F721 +:10784000CDBB0000DC000020BC0D0020A2EA01003E +:10785000940D0020D400002010B584B00446684682 +:10786000FCF7ADF9002808BFFFDF009804F0B1FF76 +:107870000321009804F0C4FF0098017821F0100162 +:107880000170214605F023F8162C80F02281DFE8F4 +:1078900004F036270B61FEFEFD199EFEFDFD85FE00 +:1078A000FEFEFEFEFDFDB5D1F848806890F8DD10C3 +:1078B000009805F08BF8FCF795F900281CBF04B080 +:1078C00010BD81E0F148806890F8B910009805F08B +:1078D000CDF8FCF787F9002840F01C8100F019B9B9 +:1078E000EA488068D0F8E800411C009805F05FF88D +:1078F000FCF778F900281CBF04B010BD64E0E34C2D +:10790000A068D0F8E4008179009805F024F8A06818 +:10791000D0F8E4000189009805F016F8A068D0F8C6 +:10792000E4004189009804F0FAFFA068D0F8E40070 +:107930008189009804F0FAFFA068D0F8E400C189BA +:10794000009804F0FAFFFCF74DF900281CBF04B0C2 +:1079500010BD39E0CD4CA068D0F8E400011D0098BE +:1079600005F038F8A068D0F8E40000F10C010098A8 +:1079700005F03AF8A068D0F8E40000F11E01009884 +:1079800005F038F8A06800F1B001009805F040F863 +:10799000FCF728F900287BD100F0C3B8BB4C606924 +:1079A0000178009805F04CF860698188009805F02E +:1079B00049F860694188009805F048F8FCF712F929 +:1079C00000281CBF04B010BDFFDF04B010BDB048DC +:1079D000D0E90010CDE90210AC48007828B19DF83C +:1079E000080020F020008DF8080002A9009805F09A +:1079F0003FF8FCF7F7F800284AD192E0A34CA068C2 +:107A0000B0F84010009805F03DF8A068B0F84210BA +:107A1000009805F03BF8A068818F009805F03AF8CF +:107A2000A068C18F009805F039F8FCF7DBF8002852 +:107A300064D176E0954C60780028A06830D0B0F82A +:107A40004410FB2928BFFB21009805F023F8A0680B +:107A5000B0F84400FB2828BFFB20C000703081B282 +:107A6000009805F01BF8A068B0F84610FB2928BF65 +:107A7000FB21009805F006F8A068B0F84600FB2846 +:107A800028BFFB20C000703081B202E022E020E07D +:107A900034E0009804F0FAFFFCF7A4F8C0BB38E02B +:107AA000818F009804F0F6FFA068C18F009804F061 +:107AB000F5FFA068B0F84010009804F0E3FFA0685C +:107AC000B0F84210009804F0E1FFFCF78BF8F8B929 +:107AD0001FE0FFDFFCF786F8002808BFFFDF0C2C53 +:107AE00012BF132C04B010BD072C18BF152C11D0D9 +:107AF000012C19BF002C022C04B010BD00216348DA +:107B00008068A0F87A10012180F87E1004B010BDC2 +:107B100000E0FFDF5D4900208968A1F8800004B023 +:107B200010BDFFDFEAE72DE9F043584C83B0A079A0 +:107B300010F0010F04BF03B0BDE8F08320690023FB +:107B40000521C578A06890F85B20503004F05EFBFA +:107B5000002818BF022D0CD00B2D18BF042D08D003 +:107B6000052D1CBF062D0D2D03D0E07840F0080038 +:107B7000E070E07800281CBF03B0BDE8F083206906 +:107B8000C078801E142880F00B83DFE800F00AFD27 +:107B90006183E025FDFCFD54FB9BFDFDFDFDFAF935 +:107BA000F8F7A0680023012190F85D20503004F020 +:107BB0002DFB002840F00183206904F009FFA16833 +:107BC00081F8DE00022081F85D00002081F882004B +:107BD00081F87E0000F0F1BAA0680023092190F836 +:107BE0005B20503004F012FB0028A06813D090F8FE +:107BF0005B2000230921503004F008FB002800F02E +:107C0000E782E078002840F0D882A068002180F860 +:107C1000721000F0BDBA90F85B10192940F0CD82C7 +:107C2000002180F88F1080F85B10A0F87A1080F89F +:107C30007E1000F0C2BAA06890F85B100C297DD1CC +:107C4000002180F85F100F2180F85B1000F0B5BABA +:107C5000A06890F85B1010297ED1D0F8E41000885D +:107C60004988814218BFFFDFA068D0F8E40000F126 +:107C70002601206904F0D9FEA06800F1B401206952 +:107C800004F0DBFE1320A16800F090B9F40000209E +:107C9000B4EA0100A26892F85B0013285CD1D2F824 +:107CA000E40002F1A00300F11E0100220E3004F0F6 +:107CB00042FAA0680021C0E92411012180F85F1078 +:107CC0001521C1E7A06890F85B10132912BF102995 +:107CD00090F8840000283FD102E0E07000F06DBA17 +:107CE000206904F0C1FEA168002581F8B80081F880 +:107CF000835081F87E50D1F8E4000988408888429A +:107D000018BFFFDFA068D0F8E4100D70D0F8101194 +:107D10000A78002A18BFFFDF40F02F810288CA804E +:107D2000D0F8102190F8B8101171D0F810110D7220 +:107D3000D0F810210B211170018800E00CE0D0F880 +:107D4000100141806079F2F749F900F016B9A06896 +:107D500090F85B10172901D00220BEE7002580F8BB +:107D6000835080F87E50D0F8E41000884988814222 +:107D700018BFFFDFA068D0F8E41006E09AE131E117 +:107D800000E117E132E0A9E00AE20D70D0F810112D +:107D90000A78002A18BFFFDF40F0EF8090F88420B7 +:107DA0007AB180F884500288CA80D0F810110D7121 +:107DB000D0F810210C2111700188D0F810014180F9 +:107DC00010E00288CA80D0F810110D71D0F810218F +:107DD00001211172D0F810210B2111700188D0F807 +:107DE000100141806079F2F7F9F8C6E0A06800233D +:107DF000194690F85C20503004F008FA50B9A06899 +:107E00000023082190F85B20503004F0FFF900288F +:107E100000F0DE81E078002840F0CF81A06890F883 +:107E2000860010F0020F17D1206904F013FEA1683C +:107E300081F88700206904F00FFEA168A1F888008E +:107E4000206904F00CFEA168A1F88A0091F8860070 +:107E500040F0020081F88600A06890F8861011F0CA +:107E6000010F15D190F85C2000231946503004F022 +:107E7000CDF9002808BFFFDF0121A068042280F8A7 +:107E80005C1080F8E02080F882100021A0F88010BB +:107E9000A06890F85B10012907D1002180F85B10E1 +:107EA00080F87E106079F2F799F8A168D1F8E400C3 +:107EB000098842888A4204BF0178042940F07D8104 +:107EC000002505706079F2F789F8A06890F85B10DA +:107ED000002908BF80F87E5000F06FB9A068002329 +:107EE000072190F85B20503004F090F9002800F052 +:107EF0006F81E078002840F060816946206904F0D5 +:107F0000EFFDA0689DF8002090F88C10114001F062 +:107F10002F0180F88C102278002A1CBF01F0DF01AD +:107F200080F88C10002580F87E50D0F8E41000888E +:107F30004988814218BFFFDFA068D0F8E4100D70B7 +:107F4000D0F810110A78002A18BFFFDF15D1028877 +:107F5000CA80D0F810110D71D0F81011009A8A6003 +:107F6000019ACA60D0F81021062111700188D0F85A +:107F7000100141806079F2F731F8A06880F85B5019 +:107F800000F01BB9A0680023092190F85B20503055 +:107F900004F03CF9002800F01B81E078002840F054 +:107FA0000C81A16881F8720081F87E0081F85B0085 +:107FB00000F003B9A0680023194690F85C20503007 +:107FC00004F024F9002800F00381E078002840F054 +:107FD000F480A0680021A0F88010012180F88210B0 +:107FE0000B2164E0A0680023194690F85C20503013 +:107FF00004F00CF900287DD0206904F05BFD2178A5 +:10800000884325D0206904F04DFD0646206904F020 +:108010004BFD0546206904F049FD0746206904F040 +:1080200047FDA1688F86CE8608874D8791F88F001F +:1080300000281CBF91F85B00192830D06846FBF778 +:10804000E4FD40B3009804F068FC14281DD022E041 +:10805000A0680023194690F85C20503004F0D6F850 +:10806000002873D0E078002871D1206904F055FC15 +:10807000A16881F8B900052081F85C000020A1F812 +:108080008000012081F8820097E0A168002081F83B +:108090007E00FBF7C9FDA168002081F88F00A06871 +:1080A0000021A0F88010012180F882101A2180F8A8 +:1080B0005C1082E0A06800230A2190F85B20503019 +:1080C00004F0A4F8B0B1206904F0F4FCE8B320692E +:1080D00004F0ECFC0746206904F0EAFC0546206940 +:1080E00004F0E0FC0646206904F0DEFCA168B1F86B +:1080F0002C8000E04FE0CB8DB1F830C04A8E8F86E7 +:10810000CE860D874887B1F83C90B14598BF4E4662 +:108110008E85B1F84090B94598BF4F46CF85B1F8EC +:108120003E90814598BF48460886B1F84290A945DF +:1081300098BF4D464D869F4238BF1F46CF8595421A +:1081400038BF15464D86464502E01DE040E034E06C +:1081500008BF9F4203D1604508BF954214D00A88EA +:10816000A1F806218A8DA1F808210A8EA1F80A211A +:10817000CA8D01F1FC00A1F80C21498E4182012138 +:1081800001726079F1F72AFFA068002180F88F1052 +:1081900080F87E1058E5E07840F00100E0700CE0D7 +:1081A000A0680023194690F85C20503004F02EF8A7 +:1081B00070B1E07800283FF458AFA068D0E92613EA +:1081C0004A1C43F10001C0E9262103B0BDE8F08359 +:1081D000012082E52DE9F041FE4D04464FF00007F5 +:1081E000E8780843E8702946A879D1F808C010F06B +:1081F000200F18BFACF8747004D1BCF87400401C98 +:10820000ACF874009CF86000012640B99CF85B2033 +:10821000002306210CF1500003F0F8FF58B3E88862 +:1082200010F4006F07D0A86890F86010002918BFFC +:10823000A0F86C701FD1A968B1F86C00401C80B226 +:10824000A1F86C00B1F86E2082422CBF101A0020F9 +:108250008A88521D824228BF81F87260B1F86C0092 +:10826000B1F86E20904206D3A1F86C7081F80261DB +:108270006879F1F7B3FEA87910F0600F08D0A8680C +:1082800090F85E1021B980F85E600121FEF77EF85B +:108290001CB900F063FD00F081FBA868A04600F166 +:1082A000500490F8DC0030B9627B002301212046A5 +:1082B00003F0ACFF10B1208D401C20853D21B8F1AA +:1082C000000F01D0A17614E0A878022808BF16207C +:1082D0000ED0012804BFA86890F8DE0008D0E87826 +:1082E000A0B110F0140F06D01E20A076667640E0F4 +:1082F000A07666763DE010F0080FE3D110F0030F92 +:1083000008BFFFDF2A20A076667632E094F82E00C0 +:1083100028B1608D411C6185A18D884213D294F8EB +:10832000320028B1208E411C2186A18D88420AD2BC +:10833000208DE18C884203D3AA6892F8DC2012B920 +:10834000A28D904203D32220A076667611E0A07B16 +:108350000028A08C05D0884209D30820A076667634 +:1083600007E0062803D33E20A076667601E0607E13 +:1083700058B1E7722773A7730221A868FEF706F8C1 +:108380006879BDE8F041F1F729BEA868BDE8F04181 +:108390000021FDF7FBBF8F49CA780B791A430ED134 +:1083A00001280AD0887910F0040F04D0886890F86A +:1083B0005D00022803D001207047FDF7D3BF0020E5 +:1083C000704770B5834C05460E46E0882843E08030 +:1083D00015F0020F04D015F0010F18BFFFDFE660A3 +:1083E00015F0010F18BF266115F0020F12D03046AC +:1083F00004F093FA062802D00B2830D00AE0A068D7 +:1084000090F85B10152905D10021C0E92611012142 +:1084100080F8601015F0800F1CBF0820207115F443 +:10842000806F08BF70BDA168B1F85000898808440A +:10843000801D85B2304604F070FA012817D030460E +:1084400004F06BFA002818BF70BDA0682946D0F868 +:10845000E40085803046BDE8704004F080BAA06832 +:1084600090F85B100F2908BF0021D3D1D0E7A06896 +:108470002946A0F8EE503046BDE8704004F09FBA9F +:10848000F8B5544C00260546A060E680E6702671DB +:10849000A6700088FBF790FBA0680088FBF7B2FB92 +:1084A000B5F8C800A168401C82B201F1500003F089 +:1084B0005AFD002818BFFFDF3746A5F8C860A0683E +:1084C00090F87E1029B1B0F87A10B0F87C20914273 +:1084D0002AD290F8821029B1B0F88010B0F87C2030 +:1084E000914221D2B0F87820B0F876108A421BD29F +:1084F00090F85E20B0F87400002A41D0884213D270 +:1085000035480090354B364A2946304602F0A5FAE8 +:10851000A0680023052190F85B20503003F076FE20 +:10852000002818BF02F092FA2078002818BFF8BD82 +:10853000A06890F8F010002908BFF8BD90F8F1107D +:10854000002906BF90F88F100029F8BD90F85C1044 +:108550001A2908BFF8BDB0F8F2108187B0F8F410FE +:10856000C187B0F8F61029B1A0F84010B0F8F810A3 +:10857000A0F84210012180F88F1080F8F070F8BD4B +:108580000628D1D2BCE71348806890F87E1029B144 +:10859000B0F87A10B0F87C20914219D290F882108D +:1085A00029B1B0F88010B0F87C20914210D2B0F818 +:1085B0007820B0F876108A420AD290F85E20B0F89F +:1085C00074001AB1884203D202F05ABC0628FBD3C9 +:1085D000002007E0F4000020D5810100978301000E +:1085E000C38301000146F5E52DE9F0410C4607463D +:1085F0001D4616464FF48C712046DDF8188005F0B4 +:1086000046FF2780C4F81081C4E93965BDE8F081D0 +:10861000F6F749BD70B50C4605460621F6F723FC72 +:10862000002808BF70BDD0F810110A780021072A71 +:1086300011D00C2A21D00B2A2CD0062A39D090F840 +:108640000221002A48D061700E22227080F80211A7 +:108650006580012070BD617007222270D0F8102162 +:108660005368C4F802309368C4F806309289628176 +:10867000D0F810010170012070BD61700C222270D1 +:10868000D0F810215268C4F80220D0F8100101700F +:10869000012070BD61700B222270D0F81021536848 +:1086A000C4F802301289E280D0F810010170012074 +:1086B00070BD617006222270D0F810215368D2F884 +:1086C00008C0D268C4F80230C4F806C0C4F80A2052 +:1086D000D0F810010170BCE790F80421C2B16170BC +:1086E0001322227090F80421002AB2D080F80411DD +:1086F000D0F80621C4F80220D0F80A21C4F80620D8 +:10870000B0F80E21628190F80421002AEED1A0E792 +:1087100090F8FC20002A04BF002070BD6170162272 +:10872000227090F8FC20002A93D000BF80F8FC1043 +:10873000D0F8FE20C4F8022090F8FC20002AF5D1E1 +:1087400087E7FF49012048707047FD48002101700C +:10875000417008467047FA4A50610020107050700E +:10876000517170472DE9F0470446481E85B238BF65 +:10877000BDE8F0870127DFF8C89304F108084FF03F +:10878000070A0026B4F8C800401CA4F8C800B4F8D2 +:108790007400401CA4F8740094F8600040B994F888 +:1087A0005B200023062104F1500003F02FFDD8B117 +:1087B000B4F86C00401C80B2A4F86C00B4F86E10E1 +:1087C00081422CBF0A1A0022A3885B1D934228BF56 +:1087D00084F87270884207D3A4F86C6084F8027140 +:1087E00099F80500F1F7FAFB94F87E0020B1B4F88F +:1087F0007A00401CA4F87A0094F8820020B1B4F802 +:108800008000401CA4F8800094F8DC0040B994F883 +:108810005D200023012104F1500003F0F7FC20B19A +:10882000B4F87800401CA4F8780094F85B0007289E +:108830001FD1B4F85000411CB4F8EE00814262D15F +:10884000D4F8E800411C404605F031FF02212046E3 +:1088500003F0A8FA84F85B6084F88E70D4F8E8001E +:108860000078002808BFFFDFD4F8E8000178491E2F +:10887000017094F85B00082845D1B4F85000411C01 +:10888000D4F8E400808881423DD1D4F81001017809 +:10889000002918BFFFDF22D12188C180D4F8E4006D +:1088A0004189D4F810010181D4F8E4008189D4F819 +:1088B00010014181D4F8E400C189D4F8100181810C +:1088C000D4F810010671D4F8100180F800A0D4F893 +:1088D00010012188418099F80500F1F77FFB012103 +:1088E000204603F05FFA03212046FDF74FFDD4F840 +:1088F000E40041882088814218BFFFDFD4F8E400FB +:10890000067084F85B60B4F85000401C691EA4F83F +:1089100050008DB2BFF436AFBDE8F087884AC2E997 +:1089200006017047864901200870704770B50446FB +:10893000B0F8740094F85E10002908BFC0F1020579 +:1089400003D0B4F87610081A051F94F8720040B1ED +:1089500094F85B200023092104F1500003F056FC39 +:10896000A0B1B4F86C6094F8600058B994F85B203A +:108970000023062104F1500003F048FC002808BF42 +:10898000284603D0B4F86E00801B001F8542C8BF84 +:108990000546002DD4BF0020A8B270BD2DE9F84FC8 +:1089A0006846FBF70CF9002808BFBDE8F88F644C57 +:1089B000E078002818BFBDE8F88FA06800230121E7 +:1089C00090F85D20503003F021FC002818BFBDE86E +:1089D000F88FA06890F8DC10002918BF022072D12F +:1089E00090F85B2000231946503003F00FFC30B1A3 +:1089F000A06890F87200002818BF122063D1A06808 +:108A000090F85B200E2A48D00F2A08BF0B205AD0BE +:108A1000152A08BF062056D000230421503003F049 +:108A2000F5FB002818BFBDE8F88FA068002590F876 +:108A30005C10012950D0052949D00B2959D00126B5 +:108A40001A295DD0D0F8E4100A78002A00F02781B6 +:108A500049880288914240F0228190F85B200023EF +:108A60001946503003F0D2FB002800F01881A068AE +:108A7000D0F8E4100978022908BF002000F0E48053 +:108A8000032900F0D780042900F0F680052908BFEB +:108A9000082000F0D98000F002B9F9F78DFC0C280D +:108AA00038BFBDE8F88FA0680821D0F8E4001E3078 +:108AB000F9F783FC28B1A0680421B030F9F77DFCF8 +:108AC00000B9FFDF0320FEF7C7FEBDE8F88F0720DF +:108AD000FEF7C2FEA0688EE00C20FEF7BDFEA06887 +:108AE000A0F8805090F8861041F0010180F88610BF +:108AF00081E01320FEF7B0FEA068A0F880507AE075 +:108B00006178B0F82C90C78DB0F83080B0F832C0E2 +:108B1000002975D0B0F84420C18EFB2A2CBFFB235E +:108B20001346994203D3FB2A34BF1146FB218185AA +:108B3000B0F84610838EFB2938BF8A4602E0000059 +:108B4000F400002028BF4FF0FB0A534503D3FB2954 +:108B500034BF0B46FB23C385FB2934BF0B46FB23E5 +:108B6000DB0070331FFA83FA038F534505D3FB29CB +:108B700028BFFB21C90070318BB24386FB2A34BF6A +:108B80001146FB21C90070318BB2418F994205D348 +:108B9000FB2A28BFFB22D100703189B20186C18D2A +:108BA000B94238BF3946C185428E624538BF6246F8 +:108BB0004286838D4B4508BFB94204D1018E4145A1 +:108BC00008BF624513D00288A0F80621828DA0F864 +:108BD0000821028EA0F80A21C28D00F1FC01A0F844 +:108BE0000C21408E48820E726079F1F7F7F915205A +:108BF000FEF732FEA06880F85C50BDE8F88FFFE712 +:108C0000C28E818F8A4238BF11468185828EB0F82C +:108C100040108A4238BF1146C185028FB0F8421019 +:108C20008A4238BF11464186428FC18F8A4238BF7F +:108C30001146B3E790F85F1049B190F86000002842 +:108C400008BFFFDF5FF00A00FEF706FE27E0F9F736 +:108C5000B3FB0C2823D3A0680821D0F8E4001E3011 +:108C6000F9F7ABFB28B1A0680421B030F9F7A5FBF8 +:108C700000B9FFDF0320E7E790F8860010F0030F4C +:108C80000DD10C20FEF7E8FDA068A0F87A5080F81E +:108C90007E6090F8861041F0010180F886106846E9 +:108CA000FAF78DFF002808BFBDE8F88FA068002301 +:108CB000194690F85B20503003F0A8FA002808BF4E +:108CC000BDE8F88FA06890F8EC10D1B3A1690978DD +:108CD000B9BBB0F850100A2934D900F108010522B7 +:108CE000E06905F00FFB0028A06804BF80F8EC5095 +:108CF000BDE8F88FD0F8E800017869B1411C052281 +:108D0000E06905F0FFFA002818BFBDE8F88FA068F9 +:108D1000D0F8E800007830B9A068E169D0F8E80040 +:108D2000401C05F0C4FCA068D0F8E8000178491C9C +:108D300001700120FEF790FDA06880F8EC50BDE8BE +:108D4000F88FFFE790F88F1000291EBF90F85C00A5 +:108D50001A2814207FF4B7AEBDE8F88F2DE9F04152 +:108D6000E94CE078002818BFBDE8F081A0794FF009 +:108D7000010710F0040F4FF000050DD0A06890F827 +:108D80005B00052808BFFFDFA06890F85D1002298E +:108D900004BFA77080F85D50A0794FF0080610F06E +:108DA000020F00F00B81E078002840F00781E068B6 +:108DB000C078162880F00181DFE800F04D3C0B7987 +:108DC000FFFF8F1E2BFF5C6E9AFFFFFFFFFFC7FBAD +:108DD000D7F0A0680023012190F85D20503003F007 +:108DE00015FA002840F0EA80A068032180F85D10A1 +:108DF00080F87E5000F0DEB8A0680023194690F895 +:108E00005C20503003F002FA002840F0D28000F0DD +:108E1000D5B8A0680023194690F85B20503003F0C5 +:108E2000F5F9002808BFFFDF0920A16881F85B0081 +:108E300000F0C4B8A0680023194690F85B205030B9 +:108E400003F0E4F9002808BFFFDF0720A16881F8DC +:108E50005B0000F0B3B8A0680023194690F85B20CF +:108E6000503003F0D3F9002808BFFFDFA06880F876 +:108E70005B60A3E0A0680023194690F85B205030A7 +:108E800003F0C4F9002808BFFFDFA0680C2180F8B8 +:108E9000837080F85B1091E0A06890F85B000F2869 +:108EA00018BFFFDFA0680E2180F8847012E0A06870 +:108EB0000023194690F85B20503003F0A7F928B939 +:108EC000A06890F88400002808BFFFDFA068102188 +:108ED00080F8837080F85B1070E0A06890F85B0009 +:108EE000152818BFFFDF1720A16881F85B0065E037 +:108EF000A068D0F8E41003884A889A4204BF097831 +:108F000004290AD0A0680023194690F85C2050304C +:108F100003F07CF900284CD150E090F85B2000234E +:108F20001946503003F072F9002808BFFFDFA0682F +:108F300090F8861011F0020F0FBF80F85B7080F878 +:108F40007E50D0F8E4000570DCE7A06800231946E5 +:108F500090F85B20503003F059F9002808BFFFDF7C +:108F60000A20A16881F85B0028E0A06890F88F00D3 +:108F7000012818BFFFDFA0680023194690F85B2086 +:108F8000503003F043F9002808BFFFDF1920A16823 +:108F900081F85B0012E001E00BE00EE0A068002326 +:108FA000194690F85C20503003F030F9002808BFD3 +:108FB000FFDFA06880F8825000E0FFDFA07910F0AA +:108FC000080F0AD0E07840B9A06890F85D10032936 +:108FD00003D10221A17080F85D50FEF7A4FD207935 +:108FE00010F0080F14D0A0680023052190F85B2032 +:108FF000503003F00BF948B1E670A068D0F81011BA +:1090000008780B2808BF0020087001E001F066FF17 +:10901000A068BDE8F041AFF3008070B5044690F859 +:109020005B000025072822D1B4F85000B4F8EE10F8 +:10903000401C884218BF70BDD4F8E800411C04F100 +:10904000080005F034FB0221204602F0ABFE84F854 +:109050005B50012084F88E00D4F8E80000780028E6 +:1090600008BFFFDFD4F8E8000178491E017094F8CA +:109070005B00082818BF70BDB4F85000D4F8E410A5 +:10908000401C8988884218BF70BDD4F8100101784F +:10909000002918BFFFDF22D12188C180D4F8E40065 +:1090A000D4F8101140890881D4F8E400D4F81011E4 +:1090B00080894881D4F8E400D4F81011C0898881EF +:1090C000D4F810010571D4F8101107200870D4F8F5 +:1090D0001011208848800C484079F0F77FFF01216B +:1090E000204602F05FFE03212046FDF74FF9D4F839 +:1090F000E40021884088884218BFFFDFD4F8E400EC +:10910000057084F85B5070BDF40000202DE9F04339 +:10911000FC4C83B0A07910F0010F04BF03B0BDE890 +:10912000F083A06901230521C578206990F85C20AF +:10913000503003F06BF8002818BF022D0BD00A2D19 +:1091400018BF0B2D07D0032D18BF062D03D0607854 +:1091500040F008006070607800281CBF03B0BDE8D4 +:10916000F083A069C078162880F0FE82DFE800F066 +:109170004C260BCEFEFEFDFCFBFEAAC3FAFEFEFE55 +:10918000FEFEF9F8F7F620690123194690F85D20F4 +:10919000503003F03BF8002840F0F582A06903F05E +:1091A00017FC216981F8F800022081F85D00002099 +:1091B00081F8820081F87E0000F0E5BA2069012381 +:1091C000002190F85C20503003F020F8002870D087 +:1091D0006078002840F0D782A06903F0F4FB216991 +:1091E000A1F80C01B1F85020801A00B247F6FE72C7 +:1091F0008242A8BF00285DDD01F58771A06903F0F8 +:10920000D9FB0620216940E020690123002190F864 +:109210005C20503002F0FAFF002860D0607800280F +:1092200040F0B182A06903F0A1FB90B3A06903F004 +:109230009AFB2169A1F80C01B1F85020801A00B204 +:1092400047F6FE728242A8BF002833DDA06903F012 +:1092500084FB216981F80E01A06903F079FB216983 +:10926000A1F81001A06903F05EFB2169A1F81201C9 +:10927000A06903F05FFB2169A1F81401A06903F064 +:1092800060FB2169A1F81601082081F85C0000F05C +:109290007ABAFFE720690123002190F85C20503062 +:1092A00002F0B4FF28B16078002800F0A78100F038 +:1092B0006ABA14E0282081F86A00012081F8690068 +:1092C00000F061BA20690123002190F85C20503041 +:1092D00002F09CFF18B1607820B100F054BA012070 +:1092E00000F07CB920690021A0F88010012180F8ED +:1092F00082100D2106E0206990F85C100E2908BF4D +:109300000F2156D180F85C1000F03DBA206901238E +:10931000002190F85C20503002F078FF20B92069DD +:1093200090F884000028DAD06078002840F02B8282 +:10933000206900210125A0F8801080F8825000F1FA +:10934000D801A06903F05DFB206900F1B001A069BC +:1093500003F062FB206990F8360108E05EE1FCE072 +:10936000D2E0E2E02DE0A0E0D0E11DE0FCE1002849 +:1093700018BFFFDF20690188A0F8381100F59D7142 +:10938000A06903F02CFB206900F5A171A06903F02E +:109390002EFB206980F83651112180F85C1060792D +:1093A000F0F71CFE00F0EFB9206990F85C1014296A +:1093B00002D0022000F012B9002180F8821018219A +:1093C000A0E720690123002190F85C20503002F0D2 +:1093D0001DFF50B920690123082190F85B2050300F +:1093E00002F014FF00283FF47AAF6078002840F0C4 +:1093F000CA81206990F8860010F0020F17D1A06989 +:1094000003F028FB216981F88700A06903F024FBA1 +:109410002169A1F88800A06903F021FB2169A1F866 +:109420008A0091F8860040F0020081F886002069E9 +:1094300090F8861011F0010F15D190F85C200123EF +:109440000021503002F0E2FE002808BFFFDF0121BA +:109450002069042280F85C1080F80B2180F88210CB +:109460000021A0F88010206990F85B10012907D135 +:10947000002180F85B1080F87E106079F0F7AEFD77 +:10948000206990F80A11042940F07D81002580F8B8 +:109490000A516079F0F7A2FD206990F85B1000296D +:1094A00008BF80F87E5000F06EB9206901230021CA +:1094B00090F85C20503002F0A9FE00283FF40FAF76 +:1094C0006078002840F05F816946A06903F0D5FA12 +:1094D00020699DF8002090F88C10114001F02F01B8 +:1094E00080F88C10E278002A1CBF01F0DF0180F8C0 +:1094F0008C100021A0F88010012180F88210092131 +:1095000000E700001401002020690123092190F8E0 +:109510005B20503002F07AFE00283FF4E0AE607825 +:10952000002800F00A8100F02EB9206901230021F3 +:1095300090F85C20503002F069FE00283FF4CFAE76 +:109540006078002840F01F8120690021A0F8801079 +:10955000012180F882100B21D4E62069012300212B +:1095600090F85C20503002F051FE00287ED0A069B7 +:1095700003F0A0FAE178884332D0A06903F092FAB0 +:109580000646A06903F090FA0546A06903F08EFA3A +:109590000746A06903F08CFA21698F86CE8608877A +:1095A0004D8791F88F0000281CBF91F85B001928A7 +:1095B0000BD06846FAF729FB38B10098C078142818 +:1095C00003D02169002081F88F0020690021A0F8D4 +:1095D0008010012180F882101A2193E66070D2E099 +:1095E00020690123002190F85C20503002F00EFE2B +:1095F00000283FF474AE607800287DD1A06903F0A4 +:109600008CF9216981F8B900052081F85C000020FF +:10961000A1F88000012081F88200B4E020690123D4 +:109620000A2190F85B20503002F0F0FDF0B1A06903 +:1096300003F040FAE8B3A06903F038FA0746A069DE +:1096400003F036FA0546A06903F02CFA0646A06935 +:1096500003F02AFA2169B1F82C80CB8DB1F830C023 +:109660004A8E8F86CE860D87488700E04AE0B1F8A3 +:109670003C90B14598BF4E468E85B1F84090B945B3 +:1096800098BF4F46CF85B1F84290A94598BF4D4647 +:109690004D86B1F83E90814598BF484608869F4266 +:1096A00038BF1F46CF85954238BF15464D86464583 +:1096B00000E01CE008BF9F4203D1604508BF95420F +:1096C00015D00A88A1F84A218A8DA1F84C210A8E6A +:1096D000A1F84E21CA8D01F59170A1F85021498E53 +:1096E0000186012180F826106079F0F777FC216966 +:1096F000002081F88F0000E045E081F87E0081F8CD +:109700005B0040E0607840F0010067E720690123DA +:10971000092190F85B20503002F078FD0028206984 +:1097200014D090F85B2001230921503002F06EFD27 +:1097300000283FF4D4AD607828BB2169002081F86F +:10974000720081F87E0081F85B001CE090F85B10ED +:10975000192918D1002180F88F1080F85B10A0F82B +:109760007A1080F87E100EE020690123002190F825 +:109770005C20503002F04AFD00283FF4B0AD607824 +:1097800000283FF43BAF2069D0E92612491C42F182 +:109790000002C0E9261203B0BDE8F08330B585B001 +:1097A00004466846FAF70BFA002808BFFFDF009866 +:1097B00003F00FF80321009803F022F800980178D5 +:1097C00021F010010170214603F081F8A01E142839 +:1097D00080F0B580DFE800F00AB322B4B41AB346D3 +:1097E000B3B43530B3B3B3B3B4B4566EFE48006906 +:1097F00090F88D1021B10621009803F0E7F89FE062 +:1098000090F8F710009803F0E1F899E0F648006945 +:1098100090F8B910009803F029F991E0F24D286909 +:1098200000F1E001009803F0FBF8286900F1B401B1 +:10983000009803F0FFF883E00621009803F012F986 +:109840007EE0E94DE8680178009803F0F9F8E868EF +:109850008188009803F0F6F8E8684188009803F0E2 +:10986000F5F86DE0002002900390DF4802A900693E +:1098700090F88C0000F0F1008DF80800009803F0DB +:109880002AF95DE0D84D2869B0F84010009803F03F +:10989000F9F82869B0F84210009803F0F7F8286941 +:1098A000818F009803F0F6F82869C18F009803F0C3 +:1098B000F5F845E0CC4D28790028286929D0B0F882 +:1098C0004410FB2928BFFB21009803F0E3F8286926 +:1098D000B0F84400FB2828BFFB20C000703081B2E4 +:1098E000009803F0DBF82869B0F84610FB2928BF80 +:1098F000FB21009803F0C6F82869B0F84600FB2861 +:1099000028BFFB20C000703081B2009803F0BEF881 +:1099100016E0818F009803F0BDF82869C18F009888 +:1099200003F0BCF82869B0F84010009803F0AAF8DA +:109930002869B0F84210009803F0A8F800E0FFDFB3 +:10994000FAF750F9002808BFFFDF0C2C04BF05B060 +:1099500030BD072C11D0122C18BF142C14D0022C9F +:1099600004BF05B030BD00219F480069A0F88010F9 +:10997000012180F8821005B030BD9B4900200969A3 +:10998000A1F8800005B030BD974800210069A0F81B +:109990007A10012180F87E1005B030BD70B50C46FC +:1099A00005464FF4B071204604F071FD258000207B +:1099B00084F8220184F82E0184F8360184F84401E9 +:1099C00070BDF5F770BB70B50C4605460721F5F77D +:1099D0004AFA002808BF70BD90F822210021CAB1C0 +:1099E00061700722227090F822218AB1018480F8E8 +:1099F0002211D0F82421C4F80220D0F82821C4F87C +:109A00000620B0F82C21628190F82221002AEDD1A5 +:109A1000A1702AE090F82E21F2B190F82E210B2AA5 +:109A20000CD00C2A18BFFFDF1FD161700C222270EE +:109A300090F83021A2700288A2800AE061700B22A7 +:109A4000227090F83021A2700288A28090F8342110 +:109A5000A27180F82E1108E090F85A213AB1617095 +:109A60000E22227080F85A116580012070BD90F896 +:109A7000362182B161700822227002886280D0F89B +:109A80003A21D0F83E316260A360B0F84221A28151 +:109A900080F83611E9E790F8442142B1617015224F +:109AA0002270B0F84621628080F84411DDE790F81A +:109AB000542192B161701622227090F85421002A2C +:109AC000D3D000BF80F85411D0F85621C4F802203A +:109AD00090F85421002AF5D1C7E790F84821002AD0 +:109AE00004BF002070BD61701322227090F84821DD +:109AF000002ABAD080F84811D0F84A21C4F80220D0 +:109B0000D0F84E21C4F80620B0F85221628190F8B6 +:109B10004821002AEED1A8E733490120C8707047D8 +:109B200031490120087170472F480021C17001712F +:109B3000084670472C4AD0600020D07010715171D7 +:109B4000704710B5002180F85B1080F85C1080F839 +:109B50005E1090F8CE00002814BF02200320FDF70D +:109B6000D1FB21484079BDE81040F0F737BA2DE924 +:109B7000F0471D4C07460D4620690088F5F7E8FAC6 +:109B80005FEA000808BFFFDF607828436070A079B3 +:109B90004FF0000510F0200F20691CBFA0F8745092 +:109BA00080F8D45004D1B0F87410491CA0F8741097 +:109BB0002069012690F8601039B990F85C200123E3 +:109BC0000621503002F022FB68B3E08810F4006FE9 +:109BD00007D0206990F86010002918BFA0F86C50D9 +:109BE00021D1216902E0000014010020B1F86C00CD +:109BF000401C80B2A1F86C00B1F86E3083422CBFDB +:109C00001A1A0022B4F808C00CF1050C624598BF7E +:109C100081F87260984206D3A1F86C5081F85A61BD +:109C20006079F0F7DBF9A0794FF0020910F0600FCE +:109C300011D0206990F85E1011B1032906D00AE016 +:109C400080F85E600120FDF75DFB04E080F85E9027 +:109C50000120FDF757FB206990F85E10012905D11E +:109C6000E18811F4807F18BF80F85E90002F7DD1CD +:109C7000E18811F4007F18BFA0F8E85004D1B0F8D3 +:109C8000E810491CA0F8E81000F072FB00F01FFD7E +:109C900001F01AF90028206918BFA0F8C85004D1B3 +:109CA000B0F8C810491CA0F8C81001F010F940B174 +:109CB000216991F8D40002289CBF401C81F8D4008F +:109CC00004D8206990F8D400022806D92069A0F8A9 +:109CD000C850A0F8CA5080F8D45020690123002150 +:109CE00090F85C20503002F091FA20B9206990F889 +:109CF0005C0007285AD120690123002190F85B20DD +:109D0000503002F083FA002850D02069012300214E +:109D100090F85D20503002F079FA002846D0206992 +:109D200090F85E10022904BF90F8D40000283DD1BD +:109D30004046F4F79EFCC0B3F9F788FFA8B3226948 +:109D4000B2F8C200012831D982F8CD60B2F87600AD +:109D5000B2F87410831E9942A8BF012102DA401A9A +:109D6000401E81B2B2F8C800238900E035E0984275 +:109D70002FBF0120181A401C80B2814288BF0146C3 +:109D8000012908BF82F8CD5092F8F00090B1B2F8E6 +:109D9000CA00B2F8F22090422FBF0120101A401CD6 +:109DA00080B2814288BF014604E0FFE720690121BB +:109DB00080F8CD50D4F810C0BCF85020501880B2B4 +:109DC000ACF8C4009CF85E10002918BF01290ED021 +:109DD00002291CBF0329FFDF0CD0E088C0F340201C +:109DE0000028206918BFA0F8D6506DD165E0ACF806 +:109DF000C000F2E79CF85D1003292CD09CF85C10A1 +:109E00000829F4D0BCF87410BCF876008A1C4FF016 +:109E1000000890420AD3401A801E1FFA80F8B8F159 +:109E2000000F1CBFA8F101001FFA80F89CF8720017 +:109E300060B19CF85B20012309210CF1500002F075 +:109E4000E5F9002808BF4FF000082FD0206990F8EE +:109E5000601099B90AE0BCF874100329C7D3BCF8A4 +:109E600076001044401CACF8C000B6E790F85C20C7 +:109E700001230621503002F0C9F980B12269002087 +:109E8000B2F86E10B2F86C20931C994203D3881A72 +:109E9000801E18BF401E404538BF1FFA80F8B8F139 +:109EA000000F1CBFA8F101001FFA80F82069B0F86C +:109EB000C4104144A0F8C0108FE7B0F8D610B0F835 +:109EC000C6201144A0F8D610206990F8F61039B9D0 +:109ED00090F85D2001231946503002F097F938B10F +:109EE0002069B0F87810B0F8C6201144A0F87810B6 +:109EF000206990F87E3033B1B0F87A10B0F8C620FF +:109F00001144A0F87A1090F8822032B1B0F8801095 +:109F1000B0F8C6C06144A0F880104FF03D0C17B1F6 +:109F200080F86AC010E02178022910D0012908BF0A +:109F300090F8F81006D06178F1B111F0140F18BF45 +:109F40001E210BD080F86A1080F869604BE090F811 +:109F50008D10002914BF06211621F3E711F0080F18 +:109F6000DED111F0030F08BFFFDF2A21206980F83E +:109F70006A1080F8696036E02BB1B0F87A10B0F85A +:109F80007C3099420FD22AB1B0F88010B0F87C2012 +:109F9000914208D2B0F87820B0F876108A4208D3FF +:109FA00090F8F6202AB1222180F86A1080F86960C2 +:109FB00019E090F85E204AB1B0F874208A420FD3BD +:109FC000082180F86A1080F869600CE0B0F874101D +:109FD000062905D33E2180F86A1080F8696002E006 +:109FE00090F8690090B1206980F85B5080F85C506F +:109FF00080F85E5090F8CE00002814BF02200320A5 +:10A00000FDF780F96079EFF7E9FF02E00020FDF746 +:10A0100079F9206980F8CE50BDE8F087FB494A788D +:10A020008B781A430DD150B1887910F0080F04D005 +:10A03000086990F85D00032803D001207047FDF700 +:10A04000CDB8002070472DE9F041F04C05460E4692 +:10A05000E0882843E08015F0020F04D015F0010FCE +:10A0600018BFFFDF666115F0010F4FF000084FF0D9 +:10A0700001071CD03046A66102F04FFC062802D032 +:10A080000B280BD013E0206990F85C1014290ED136 +:10A090000021C0E9241180F85F7008E0206990F881 +:10A0A0005C100E2904BF80F85F8080F8847015F082 +:10A0B000020F18D06069C078052802D00B280BD099 +:10A0C00011E0206990F85C1012290CD10021C0E940 +:10A0D000261180F8607006E0206990F85C100D2968 +:10A0E00008BF80F8608015F0800F1CBF0820A070AA +:10A0F000BDE8F0812DE9F047C44C82B007466069A5 +:10A1000000250190E5806570A5704FF0010825706D +:10A11000276168F3070987F8CE803888F5F718F8C3 +:10A120005FEA000A08BFFFDF20690088F9F744FDF5 +:10A1300020690088F9F766FD2069B0F8C200D0B147 +:10A1400001A8F9F73CFDB0B1206990F8F61091B183 +:10A1500090F85D2001231946503002F057F850B9AD +:10A160002069A0F8785080F88D500220FFF716FB88 +:10A17000206980F8CD50D4F810C09CF8CF0000289A +:10A1800018BF25810DD19CF8220138B9BCF82000F8 +:10A19000BCF80410884288BF208102D8BCF80400B3 +:10A1A0002081BCF8C600401E86B2BCF8C80030440E +:10A1B000ACF8C8009CF8CC0000281CBFACF8CA5012 +:10A1C0008CF8CC5004D1BCF8CA003044ACF8CA00BA +:10A1D000BCF874003044ACF874009CF8600040B9DE +:10A1E0009CF85C20012306210CF1500002F00EF8CF +:10A1F00028B12069B0F86C103144A0F86C102069C7 +:10A20000B0F8C21001299CBF491CA0F8C210002E52 +:10A2100018BF80F8D45090F8CD10A1B1B0F8C800A4 +:10A22000218988420FD25046F4F723FA58B12069A9 +:10A2300090F8F01039B1B0F8CA10B0F8F2008142CD +:10A2400028BF00F047FE206980F8CD5090F85C10E0 +:10A25000062918BF072917D1B0F85010B0F80C2103 +:10A26000891A09B200290FDB00F58771083004F064 +:10A270001EFA0221206901F097FC206980F80B5139 +:10A2800080F85C5080F88E80216901F15000B1F8AF +:10A29000C62001F068FE206990F8F010002918BF70 +:10A2A000A0F8CA505A4800905A4B5B4A3946484673 +:10A2B00000F0D3FB20690123052190F85C20503089 +:10A2C00001F0A4FF002818BF00F0C0FB20690123A3 +:10A2D000072190F85C20503001F098FF002818BF4B +:10A2E0000C2036D000F0B6FBE07800281CBF02B08E +:10A2F000BDE8F087206990F81811002904BF02B06A +:10A30000BDE8F08790F81911002907BF90F88F1069 +:10A31000002902B0BDE8F08790F85C101A2904BF4C +:10A3200002B0BDE8F087B0F81A118187B0F81C11AF +:10A33000C187B0F81E1129B1A0F84010B0F8201163 +:10A34000A0F8421080F88F8080F8185102B0BDE864 +:10A35000F08720690123082190F85C20503001F03B +:10A3600055FF002818BF0820BCD1BDE700F088BD0C +:10A370002DE9F041254C4FF002074FF00005A07980 +:10A3800010F0080F13D0607888B9206990F85C103D +:10A39000162905D180F8835080F8825080F85C50EF +:10A3A00090F85D10032904BF277080F85D50FEF718 +:10A3B000ADFEE1884FF0010611F0040F14D0607873 +:10A3C00090B9206990F85C20062A08BF80F80B61DC +:10A3D00003D0082A08BF80F80B7190F85D20022A8C +:10A3E00004BF267080F85D5011F0020F4FF0030794 +:10A3F00000F007816078002840F003816069C07830 +:10A40000801E142880F0FC8008E000001401002069 +:10A410006F9B01001DA0010047A00100DFE800F0D4 +:10A420000AF0434E641EF029F0369359F0F0F0F034 +:10A43000BEEACEE420690123194690F85D20503031 +:10A4400001F0E4FE002840F0DC80206980F85D70B7 +:10A4500080F87E5080F8825000F0D3B8206990F8E0 +:10A460005C00052818BFFFDF206980F85C5000F011 +:10A47000C3B8206990F85C00092818BFFFDF206985 +:10A4800080F8825080F85C5000F0BBB8206990F8EA +:10A490005C000D2818BFFFDF20690E2180F8836063 +:10A4A00080F85C10ADE0206990F85C00112818BFBE +:10A4B000FFDF2069122180F88360F1E7206990F8BE +:10A4C0005C00122818BFFFDF1420216981F85C00AE +:10A4D00097E0206990F85C00122818BFFFDF162073 +:10A4E000216981F85C008CE0206990F85C001828F4 +:10A4F00018BFFFDF206980F8835080F8825090F801 +:10A500002E01002818BFFFDF206990F8841041B1A8 +:10A5100080F884500188A0F8321180F830510C2165 +:10A5200007E00188A0F8321180F8305180F83461DA +:10A530000B2180F82E116079EFF750FDD4F8100050 +:10A5400080F85C505DE0206990F80A1104290ED073 +:10A5500020690123082190F85C20503001F056FE5C +:10A5600000281CBF206980F882504AD0E8E790F8A4 +:10A570005B2001230021503001F048FE002808BF75 +:10A58000FFDF206990F8861011F0020F0EBF80F8EF +:10A590005B6080F87E5080F80A51D9E7206901237A +:10A5A000002190F85B20503001F030FE002808BFF9 +:10A5B000FFDF0A20216981F85B0022E0206990F822 +:10A5C0008F00012818BFFFDF20690123002190F8C8 +:10A5D0005B20503001F01AFE002808BFFFDF192071 +:10A5E000216981F85B000CE0206990F85C0000288C +:10A5F00018BFFFDFD4F8100080F8825001E0FFE7B9 +:10A60000FFDFA07910F0100F09D0607838B9206909 +:10A6100090F85C10062904BF072180F85C10A07830 +:10A6200010F0080F10D020690123052190F85C205C +:10A63000503001F0EBFD28B108206070206980F8EF +:10A640002E5101E000F04AFC206990F85C100829C6 +:10A6500018BFBDE8F081B0F85010B0F80C21491CCB +:10A66000914206BF61780029BDE8F081B0F812116F +:10A670004288914209D1B0F8142183889A4204D1CA +:10A68000B0F81621C3889A4211D00288A0F826217A +:10A69000A0F82811B0F81411A0F82A11B0F816117A +:10A6A000A0F82C1180F822616079EFF797FC012166 +:10A6B000206901F079FA0420FCF724FE206980F873 +:10A6C0000B5180F85C5080F85E70BDE8F0812DE998 +:10A6D000F84F6846F9F773FA002808BFBDE8F88F0D +:10A6E000CF4C6078002818BFBDE8F88F206901239F +:10A6F000194690F85D20503001F088FD002818BF01 +:10A70000BDE8F88F2069002590F8F61029B1A0F86F +:10A71000785080F88D50022071E090F85B20012382 +:10A720000021503001F072FD88B12069012304211D +:10A7300090F85C20503001F069FD40B9206990F834 +:10A74000720020B11220FFF729F8BDE8F88F2069C8 +:10A75000012690F85C200D2A08BF0B204FD00CDC9E +:10A76000012A7DD0052A08BF072048D0092A08BF42 +:10A77000092044D00B2A74D007E0112A2BD0122ACA +:10A7800041D0182A70D01A2A6DD0012304215030EC +:10A7900001F03CFD002818BFBDE8F88F206990F853 +:10A7A0000A11002900F01E8190F85B20012300218E +:10A7B000503001F02BFD002800F01481206990F842 +:10A7C0000A11042904BF90F8860010F0030F00F06E +:10A7D000FB8000F007B9F7F7EFFD0C2838BFBDE8A4 +:10A7E000F88F08212069E030F7F7E7FD28B12069EC +:10A7F0000421B430F7F7E1FD00B9FFDF0420FEF7D4 +:10A80000CDFFBDE8F88F90F8F910012912D0022988 +:10A8100018BFBDE8F88F90F8841000291ABF80F89F +:10A820008D6002200D20FEF7B9FF206980F8F950F5 +:10A83000BDE8F88F90F82E11002918BFBDE8F88FF9 +:10A8400000F1A00300F1D8010022FA3001F073FCFE +:10A850000520FEF7A3FF206980F8F950BDE8F88FC6 +:10A8600009E015E000E01AE00620FEF797FF2069F6 +:10A8700080F88250F2E70C20FEF790FF2069A0F8E4 +:10A88000805090F8861041F0010180F88610E5E7CD +:10A890001320FEF783FF2069A0F8805076E021792D +:10A8A000B0F82C90C78DB0F83080B0F832C00029D5 +:10A8B00070D0B0F84420C18EFB2A2CBFFB23134676 +:10A8C000994203D3FB2A34BF1146FB218185B0F89E +:10A8D0004610838EFB2934BF8A464FF0FB0A53454E +:10A8E00003D3FB2934BF0B46FB23C385FB2934BFAD +:10A8F0000B46FB23DB0070331FFA83FA038F5345AB +:10A9000005D3FB2928BFFB21C90070318BB24386D8 +:10A91000FB2A34BF1146FB21C90070318BB2418F35 +:10A92000994205D3FB2A28BFFB22D100703189B29E +:10A930000186C18DB94238BF3946C185428E624514 +:10A9400038BF62464286838D4B4508BFB94204D169 +:10A95000018E414508BF624514D00288A0F84A2103 +:10A96000828DA0F84C21028EA0F84E21C28D00F5F8 +:10A970009171A0F85021408E088681F82660607998 +:10A98000EFF72CFB1520FEF709FF206980F85C50DB +:10A9900064E7FFE7C28E818F8A4238BF1146818506 +:10A9A000828EB0F840108A4238BF1146C185028FAE +:10A9B000B0F842108A4238BF11464186428FC18F9B +:10A9C0008A4238BF1146B3E70C20FEF7E7FE206944 +:10A9D000A0F87A5080F87E6090F8861041F001016E +:10A9E00080F886106846F9F7EAF800283FF436AF99 +:10A9F00020690123002190F85B20503001F006FC13 +:10AA000000283FF42BAF206990F88F1000291EBF5B +:10AA100090F85C001A2814207FF4F1AE1EE70000C5 +:10AA200014010020FA480078002818BF0C20704755 +:10AA300030B5F74C05462078002818BFFFDF657257 +:10AA40000020E07230BDF249C8727047F049012021 +:10AA500008727047EE49887270472DE9F047EC4C58 +:10AA60008146DDF8208020781E4617460D4628B91D +:10AA7000002F1CBF002EB8F1000F00D1FFDFC4F87B +:10AA80002080C4E90D95C4E9067600202072FF21DC +:10AA9000A172E0712071E0706071A071DD4EA07054 +:10AAA000E0813078012705F150082888F4F750FB41 +:10AAB000E0622888F4F73AFB2063F8F70FFDF8F717 +:10AAC00042FAF8F760FD05F11100F8F7F0FC05F126 +:10AAD0000D00F8F71BFB307800280CBF0320012085 +:10AAE000F8F7F9FC98F81800F8F718FBF8F7EDFC00 +:10AAF00030786FF00D01F8B16A8EE88D01EBD2026B +:10AB000098F8103091B2814298BF90B20BB1001DFD +:10AB100080B2F8F706FA30784FF00101C8B1012091 +:10AB2000F8F770FB7068D0F8D000F8F7E5FC2770F4 +:10AB3000BDE8F047F8F7DABC2A8EA88D01EBD20108 +:10AB400098F80F308AB2824298BF88B2002BE0D0CA +:10AB5000DDE70020F8F756FBE9E72DE9F041AD4CC1 +:10AB60006FF00D072046012640684FF00008418E27 +:10AB700007EBD102C18D93B28B4298BF91B2A44D25 +:10AB8000A981286BF3F7B1FDA862002811BF85F8F1 +:10AB900001806E70A048A86220786068014600F1CC +:10ABA0005006498E90F86020C08D07EBD1018BB222 +:10ABB000834298BF88B2002A1CBF001D80B2F8F7FC +:10ABC000B0F9307C48B306F15001934891E80E107B +:10ABD00000F5027787E80E10316EC0F82112716E11 +:10ABE000C0F8251200F58170F8F783FC2078002862 +:10ABF0000CBF0120002080F0010188480176D6E9D1 +:10AC00001212C0E90412A0F58372A0F58371F8F75F +:10AC1000B0F80120F8F7BEF804E08148F8F769FCC5 +:10AC2000F8F7E0F801210020F8F725FD032028704F +:10AC3000BDE8F0812DE9F04F764E83B030464FF0FD +:10AC4000000B40684FF0010800F1500490F85510D7 +:10AC5000A6F1100A4FF002096FF00D07A6F13405B6 +:10AC600071B3012969D002296BD0032918BFFFDF16 +:10AC700076D0686A0823017821F008010170A27972 +:10AC800003EAC202114321F004010170E2790423B6 +:10AC900003EA8202114321F01001017094F805B01B +:10ACA000E86AF3F7F4FC8246F8F7D0FFBBF1020F35 +:10ACB0005DD0BBF1010F5ED0BBF1030F5FD063E04D +:10ACC000018E07EBD102818D93B28B4298BF91B276 +:10ACD000ADF80410A0F848105046F8F796FF48B1B8 +:10ACE000696A85F80280AA694FF480609047032062 +:10ACF0006071BEE76A4601A9E86AF3F7B3FB6862D0 +:10AD000010B194F8331029B15046F8F752FF84F887 +:10AD10000580AEE79DF8001031B9A0F800B080F8CA +:10AD200002B0012101F06CFDBDF80400C1B2686AF7 +:10AD300001F0DBFE84F805909BE75046F8F739FFF9 +:10AD400097E7B0F84800ADF804006A4601A9E86A40 +:10AD5000F3F788FB6862002808BFFFDF89E7FFE799 +:10AD60005046F8F752FF002808BFFFDF81E730EABE +:10AD70000A0009D106E030EA0A0005D102E0BAF182 +:10AD8000000F01D0012100E00021686A027842EA48 +:10AD900001110170716891F85F20888D098E07EBB1 +:10ADA000D1018BB2834298BF88B2002A1CBF001D1C +:10ADB00080B2F8F7B6F8E07B00281CBF6079012864 +:10ADC00030D004F15001144891E80E1000F50277DC +:10ADD00087E80E10216EC0F82112616EC0F82512AE +:10ADE00000F58170F8F785FB307800280CBF012151 +:10ADF00000210A480176D4E91012C0E90412A0F536 +:10AE000083716A6AF7F7B5FF0020F7F7C3FF0EE01A +:10AE10003001002064010020300E00203810002096 +:10AE2000320F0020686AF8F764FBF7F7DBFF307831 +:10AE300028B1686A007810F0100F05D00CE00121ED +:10AE40000846F8F718FC0AE0FD48007810F0100FEB +:10AE500004BF2879002802D0A8780028EFD06879AC +:10AE6000002804BF85F80580F8F76BFB686A018845 +:10AE700029828078A87485F8009003B0BDE8F08F2F +:10AE8000F04810B50078012818BFFFDFF8F726FB5F +:10AE9000ED480178446811B9FFF7CCFE01E0FFF7F7 +:10AEA0005CFE94F82800012818BF10BDBDE81040D2 +:10AEB000F8F7BEBBE34810B50078032818BFFFDFE2 +:10AEC000BDE8104000F0C6B9DE4840797047DD4863 +:10AED00000797047DB490120887170472DE9F04106 +:10AEE000D948D84D012601784068002700F1500468 +:10AEF000A86A296B90F8018002F00AFF68B1012866 +:10AF000021D0022834D003281CBFFFDFBDE8F08128 +:10AF1000286BBDE8F041F3F7CFBD01224146286B15 +:10AF2000F3F740FCD4E91210491C40F10000C4E9D9 +:10AF30001210E079012814BFE671E771687ABDE864 +:10AF4000F041EFF74BB800224146286BF3F72AFC9B +:10AF5000D4E91201401C41F10001C4E91201E07979 +:10AF6000012802D1E771BDE8F081E671BDE8F0810A +:10AF7000286BF3F7A1FDD4E91201401C41F1000157 +:10AF8000C4E91201E0790128EFD1EBE72DE9F041A6 +:10AF9000AD4F4FF000083846A7F134044068012651 +:10AFA00000F150052078022818BFFFDFA87850B1C3 +:10AFB00085F80280A670A26941460420904738783F +:10AFC000002818BF2E71606A0321007831EA000062 +:10AFD00004BFE878002805D1EE70616AA670A26906 +:10AFE000022090470121002000F057F918B1BDE878 +:10AFF000F04100F02FB9BDE8F041AEE52DE9F05F7A +:10B00000914E82463046A6F134054068317800F111 +:10B01000500928784FF000080127032818BFFFDFE8 +:10B02000E88940F40070E88199F81010DFF81CB24C +:10B0300000291CBF86498F60BAF1000F04BF40F0A1 +:10B040004000E88100F0EF809BF80140F7F7E0FE58 +:10B0500090B999F81000002818BF002C0CD09BF86C +:10B06000000099F80710C0F3C000884204D1EF70C7 +:10B07000BDE8F05F00F0EEB8A889844288BF0446BE +:10B08000E21C5946A86A03F069F9A86A0188A5F884 +:10B09000131080786875E88940F02000E88185F811 +:10B0A00004803078706800F15004834690F82800DE +:10B0B000012816D1F8F7B2FA2146584601F07BF87C +:10B0C00078B13078002870680CBFFC3000F5AA70A9 +:10B0D000BBF800104180217A01710770687AEEF7A1 +:10B0E0007DFFA86A99F806100078C0F380008842B6 +:10B0F00033D03078706800F1500490F8550040B3B8 +:10B10000022844D084F80580307838B1207941464F +:10B1100020B12171AF70AA6910209047E07890B1FA +:10B1200084F80380F8F780FD002808BFFFDF0820BF +:10B13000AF70AA6900219047D4E91010491C40F172 +:10B140000000C4E91010A07901280CBF84F8068023 +:10B15000A771E88940F48070E881A86A99F80730FF +:10B160000178C1F3C0029A425DD13278726801F071 +:10B17000030102F15004012918BF022934D0032928 +:10B180001CBFE87940F0040012D0E8714BE0E86A97 +:10B19000F3F7A2F9002808BFFFDFD4E91002411C31 +:10B1A00042F10000C4E91010687AEEF717FFA9E732 +:10B1B000E97A19B1C178AA7A914234D001F041FB01 +:10B1C00068B1A770E989384641F40061E981A96A4C +:10B1D000AF70AA699047E079012822D01FE0E87992 +:10B1E00040F01000E8711EE04078A8B1E98941F410 +:10B1F0000061E981697859B9FB2884BFE87940F09A +:10B200001000C2D8287A20B18020AA690021904776 +:10B2100009E0FFF763FE06E0E079012801D0E7715D +:10B2200001E084F807805146012000F036F818B19B +:10B23000BDE8F05F00F00EB8BDE8F05FFAE4000092 +:10B24000430100203001002064010020320F002063 +:10B2500000F0004070B5314900254C68F8F7B0F9AE +:10B26000F8F7A2F9F8F7C4F8F8F727F9F7F7BAFDF5 +:10B27000F8F796F9F8F73AF994F82800012808BF8A +:10B28000F8F7CCF9264C0021A269E0899047226AA0 +:10B29000E179E0789047257070BD70B5204C054687 +:10B2A000002908BF012D05D12079401CC0B22071B2 +:10B2B000012830D8E1692846884700282BD0A17999 +:10B2C000184839B1012D01BF41780029017811F0EA +:10B2D000100F20D0E179F1B910490978002918BF81 +:10B2E000002102D0294304D013E0012D18BF012111 +:10B2F000F8D10D49097811F0100F04BF007810F053 +:10B30000100F08D0A07830B9607810B111F0100F8C +:10B3100001D0002070BD012070BD0000640100203C +:10B3200030010020430100204001002010B540F210 +:10B33000BB11F74803F089F8F648002141704FF43B +:10B340006171418010BD2DE9F0410F46064600F0C5 +:10B35000E8FAEF4C102817D004EBC00191F8421125 +:10B3600011F0010F1CBF0120BDE8F08161780829B0 +:10B370001FD2617804EBC000491C6170012180F884 +:10B3800042110846BDE8F0816178082911D225787C +:10B39000681C207004EBC5083868C8F83C01B88800 +:10B3A000A8F84001102D28BFFFDF88F83B61284630 +:10B3B000DFE70020BDE8F081D5480178491E4BB297 +:10B3C000002BB8BF704770B45FF0000500EBC301FD +:10B3D00091F8421111F0010F3BD04278D9B2521EC0 +:10B3E000427000EBC10282F8425190F802C0002284 +:10B3F000BCF1000F0BD9841894F803618E4202D17E +:10B40000102A26D103E0521CD2B29445F3D8027818 +:10B41000521ED2B202708A421BD000EBC20200EB75 +:10B42000C10CD2F83B41CCF83B41D2F83F21CCF8DB +:10B430003F21847890F800C00022002C09D986189A +:10B4400096F8036166450AD1102A1CBF024482F8AF +:10B450000311591E4BB2002BB8DA70BC7047521C56 +:10B46000D2B29442EBD8F4E72DE9F0471E461746D6 +:10B470008846814600F055FAA54C0546102831D083 +:10B48000A078002100280ED9621892F80331AB424F +:10B4900005D110291CBF1220BDE8F08703E0491C2C +:10B4A000C9B28842F0D8082832D2102D1DD000BF72 +:10B4B00094F80280102208F10100A07004EB081932 +:10B4C00009F10300394600F025FE09F1830010223E +:10B4D000314600F01FFE04EB080080F80351002005 +:10B4E000BDE8F087A078082812D22578681C207063 +:10B4F00004EBC50AD8F80000CAF83C01B8F804000B +:10B50000AAF84001102D28BFFFDF8AF83B91CFE752 +:10B510000720BDE8F08770B47D488178491E4BB2A2 +:10B52000002BBCBF70BC704703F0FF0C8178491E34 +:10B53000CAB2827050FA83F191F8031194453AD05F +:10B5400000EB021400EB0C15D4F80360C5F803609F +:10B55000D4F80760C5F80760D4F80B60C5F80B6035 +:10B56000D4F80F60C5F80F60D4F88360C5F8836025 +:10B57000D4F88760C5F88760D4F88B60C5F88B6015 +:10B58000D4F88F40C5F88F40841800EB0C0502EB0F +:10B59000420294F803410CEB4C0C00EB420285F89C +:10B5A000034100EB4C0CD2F80B41CCF80B41B2F844 +:10B5B0000F21ACF80F2100EBC10292F8422112F0EA +:10B5C000010F35D190F802C000220C46BCF1000FEB +:10B5D0000BD9851895F803518D4202D1102A27D135 +:10B5E00003E0521CD2B29445F3D80178491EC9B287 +:10B5F0000170A1421CD000EBC10100EBC402D1F8E4 +:10B600003BC1C2F83BC1D1F83F11C2F83F1190F8DD +:10B6100002C002780021BCF1000F09D9451895F845 +:10B62000035195420BD110291CBF014481F80341FD +:10B63000591E4BB2002BBFF677AF70BC7047491C48 +:10B64000C9B28C45EAD8F3E73249487070473148AF +:10B650004078704738B14AF2B811884203D82D4972 +:10B66000488001207047002070472A484088704772 +:10B6700010B500F056F9102814D0254A01460020D4 +:10B6800092F802C0BCF1000F0CD9131893F80331E3 +:10B690008B4203D1102818BF10BD03E0401CC0B27C +:10B6A0008445F2D8082010BD19498A78824286BFA5 +:10B6B00001EB001083300020704715498A788242E0 +:10B6C00086BF01EB0010C01C00207047104B93F8A0 +:10B6D00002C084459CBF00207047184490F80301C5 +:10B6E00003EBC00090F83B310B70D0F83C111160B7 +:10B6F000B0F84001908001207047054A114491F84C +:10B70000032104490A7002684A60808808817047F2 +:10B71000601000206C01002010B5144600F001F903 +:10B72000102809D0F9490A78824205D1486820607A +:10B730000889A080012010BD002010BD10B5F7F7CA +:10B74000C7FA002804BFFF2010BDBDE81040F7F77E +:10B75000E5BAEF498A7882429CBF002070470844CE +:10B7600090F8030101EBC00090F8420100F00100E5 +:10B77000704770B5E64E002425463078002814D96D +:10B7800006EBC50090F8421111F0010F08D090F8B7 +:10B790003B2100F59E712046631CDCB2F7F74FFC9D +:10B7A000681CC5B23078A842EAD87078A04218BFA9 +:10B7B000FFDF70BD70B5D64C00263546A078002856 +:10B7C00012D96019731C90F8030104EBC00000F556 +:10B7D0009E7190F83B213046DEB2F7F730FC681CD2 +:10B7E000C5B2A078A842ECD8C0B2B04218BFFFDF03 +:10B7F00070BD10B5F7F782FC58B30024F7F782FC50 +:10B80000C34A00211378002B23D900BF02EBC10CDF +:10B810009CF842C11CF0010F17D084421CBF04F1F8 +:10B82000010C0CF0FF0410D193780020002B0AD9F2 +:10B8300002EB000C9CF803C18C4508BF10BD401CF6 +:10B84000C0B28342F4D8102010BD491CC9B28B424B +:10B85000DCD8082010BD10B5F7F750FC002804BF55 +:10B86000082010BDBDE81040F7F74CBCA74910B543 +:10B87000497841B1A64B997829B1C21CD81CF7F779 +:10B88000C4F9012010BD002010BDA14A01EB410107 +:10B8900002EB41010268C1F80B218088A1F80F0179 +:10B8A000704770B59A4D0024A878002898BF70BDE5 +:10B8B000C0B2A04212D905EB041010F183060DD0DE +:10B8C0001021304600F002FC40B904EB440005EBC7 +:10B8D000400000F20B113046F8F735FA601CC4B294 +:10B8E000A878A042E4D870BD01461022894800F033 +:10B8F00011BC8848704770B5854D0446A878A042B1 +:10B9000006D905EB04101021833000F0DFFB08B1ED +:10B91000002070BD04EB440005EB400000F20B106A +:10B9200070BD2DE9F0417A4D0646002428780F4677 +:10B93000002811D905EBC40090F83B11B14206D1A3 +:10B940000622394600F59E7002F0DCFC38B1601C1E +:10B95000C4B22878A042EDD81020BDE8F08120467E +:10B96000BDE8F0816A4910B44A7801EBC003521E69 +:10B970004A70002283F8422191F802C0BCF1000F06 +:10B980000DD98B1893F80341844204D1102A1CBFAF +:10B9900010BC704703E0521CD2B29445F1D80A782B +:10B9A000521ED2B20A70824204BF10BC704701EB33 +:10B9B000C00301EBC202D2F83BC1C3F83BC1D2F8CD +:10B9C0003F21C3F83F218C7891F800C00022002C61 +:10B9D0009CBF10BC70478B1893F80331634506D1A8 +:10B9E000102A1CBF114481F8030110BC7047521C7F +:10B9F000D2B29442EFD810BC704770B444490D18CD +:10BA00008A78521ED3B28B7095F80321984239D0B0 +:10BA100001EB001C01EB031400EB4000D4F80360C1 +:10BA2000CCF80360D4F80760CCF80760D4F80B605A +:10BA3000CCF80B60D4F80F60CCF80F60D4F88360BA +:10BA4000CCF88360D4F88760CCF88760D4F88B603A +:10BA5000CCF88B60D4F88F40CCF88F4001EB030C0E +:10BA600003EB43039CF803C101EB430385F803C1D7 +:10BA700001EB4000D3F80BC1C0F80BC1B3F80F3194 +:10BA8000A0F80F3101EBC20090F8420110F0010F55 +:10BA90001CBF70BC704700208C78002C0DD90B188F +:10BAA00093F803C1944504D110281CBF70BC7047A3 +:10BAB00003E0401CC0B28442F1D80878401EC0B2F6 +:10BAC0000870904204BF70BC704701EBC20301EBE9 +:10BAD000C000D0F83BC1C3F83BC1D0F83F01C3F868 +:10BAE0003F018C780B780020002C9CBF70BC704705 +:10BAF00001EB000C9CF803C19C450DD110281CBF24 +:10BB0000084480F8032170BC704700006C010020DD +:10BB1000601000201B120020401CC0B28442E7D8F5 +:10BB2000F1E7000010B50A7B02F01F020A73002241 +:10BB300082758B181B7A03F0010C5B0803F001047B +:10BB4000A4445B0803F00104A4445B0803F001046F +:10BB5000A4445B0803F0010464444FEA530C0CF066 +:10BB6000010323444FEA5C0C0CF00104234403EB73 +:10BB70005C0300EB020C521C8CF8113090F816C0DC +:10BB8000D2B263448375052AD3D3D8B2252888BF9F +:10BB9000FFDF10BD00238383028401EBC202521E2B +:10BBA000B2FBF1F1C18370470A4630B40021032A89 +:10BBB0000DD04FF4FA4C002A7ED0012A7DD0022A03 +:10BBC0001CBF30BC7047014630BC5030AAE7A0F81B +:10BBD000501080F8561080F8571080F85B1080F8ED +:10BBE0005C1080F85D1080F85E1080F8521080F8CC +:10BBF000531080F8541080F8551080F86910A0F8A0 +:10BC00006C1080F87210A0F87410A0F87A1080F808 +:10BC10007E10A0F8801080F8821080F8671080F8FD +:10BC2000681080F85F1080F8601080F8831080F84A +:10BC3000841080F88610F12280F88C20A0F878100B +:10BC400080F88E10A0F8C010A0F8C210A0F8C410A0 +:10BC5000A0F8C610A0F8C810A0F8CA1080F8CD103F +:10BC600080F8CF10A0F8D61080F8D410A0F8E81013 +:10BC7000A0F8EA1080F8281001844FF4486242804E +:10BC80001B228286C2864FF4A47343870387828572 +:10BC9000C28543860386A0F84020A0F84230828700 +:10BCA000C387A0F84420A0F84620A0F8482080F8D8 +:10BCB0008F1080F8181101E008E045E080F8F010DE +:10BCC00080F8F61080F8F91030BC7047A0F8D61054 +:10BCD00080F8CE104288FB4B1344B3FBF2F3A0F87C +:10BCE0006E304BF68033A0F87030C488A0F8741022 +:10BCF000B0F8781000F15003514391FBF2F1A0F835 +:10BD00007810E100B1FBF2F1491C89B201FB02F4A9 +:10BD1000A0F87610B4F5C84FC4BF491ED984BCFB47 +:10BD2000F2F1491C998502F5802101F5EE31A1F16E +:10BD3000010CBCFBF2F1D983B3F81CC00CFB02F17F +:10BD4000B1FBF2F199833EE7A0F8D61000F1500262 +:10BD50004488B0F81231B0F816019184118DC000FA +:10BD60006143B0FBF3F091FBF3F1401C118580B20D +:10BD700000FB03F1D084B1F5C84FC4BF401ED0848E +:10BD8000BCFBF3F0401C9085108C03EBC000401E00 +:10BD9000B0FBF3F0D083908B6043B0FBF3F0908363 +:10BDA00030BC70470A4630B40021032A0DD04FF44E +:10BDB000FA4C002A71D0012A6ED0022A1CBF30BC76 +:10BDC0007047014630BC5030ACE6A0F8501080F807 +:10BDD000561080F8571080F85B1080F85C1080F8DF +:10BDE0005D1080F85E1080F8521080F8531080F8D3 +:10BDF000541080F8551080F86910A0F86C1080F885 +:10BE00007210A0F87410A0F87A1080F87E10A0F8D4 +:10BE1000801080F8821080F8671080F8681080F831 +:10BE20005F1080F8601080F8831080F8841080F82C +:10BE30008610F12280F88C20A0F8781080F88E10FF +:10BE4000A0F8C81080F8CA1080F8C010C0F8C4105C +:10BE500080F828101B228286C2864FF4A473438781 +:10BE600003878285C28543860386A0F84020A0F818 +:10BE700042308287C387A0F84420A0F84620A0F86B +:10BE8000482080F88F1080F8F01080F8DC1080F8DF +:10BE9000EC1030BC704700E039E04288894B134415 +:10BEA000B3FBF2F3A0F86E304BF68033A0F870309D +:10BEB000C488A0F87410B0F8781000F15003514312 +:10BEC00091FBF2F1A0F87810E100B1FBF2F1491C0E +:10BED00089B201FB02F4A0F87610B4F5C84FC4BFD4 +:10BEE000491ED984BCFBF2F1491C998502F58021D9 +:10BEF00001F5EE31A1F1010CBCFBF2F1D983B3F8ED +:10BF00001CC00CFB02F1B1FBF2F1998359E7D0F8A8 +:10BF1000E44000F1500243886089E4899184118DE6 +:10BF2000594391FBF0F11185E100B1FBF0F1491C9F +:10BF300089B201FB00F4D184B4F5C84FC4BF491ED7 +:10BF4000D184BCFBF0F1491C9185118C00EBC1013F +:10BF5000491EB1FBF0F1D183918B5943B1FBF0F055 +:10BF6000908330BC7047837D0BB1252B01D9122003 +:10BF70007047002A04BF0020704770B490F817C0C3 +:10BF80000C7E514D04FB02C22C464FF0000CE2FB2C +:10BF9000054C4FEA1C1C6FF024040CFB0422D2B2A7 +:10BFA00001EBD20CC27502F007059CF808C0012411 +:10BFB00004FA05F51CEA050F18BF02762CD1B2FB76 +:10BFC000F3FC03FB1C22521CD2B24FF0000C00BF4A +:10BFD00000EB0C035B7C93423CBFD21AD2B20ED36F +:10BFE00001EB0C0500232D7A04FA03F635421CBF41 +:10BFF000521ED2B26AB15B1CDBB2082BF4D30CF137 +:10C00000010303F0FF0CBCF1050FE1D370BC1F204E +:10C01000704703EBCC01017670BC0020704730B54F +:10C020000D460446072988BFFFDFE07805F00701C9 +:10C0300000F05000084340F08800E070A07800F065 +:10C04000A70040F01800A070607800F05E0040F09B +:10C0500020006070207800F0BC0040F040002070AC +:10C0600030BD017931F01F0113BF002000221146BD +:10C07000704710B4435C491C03F0010C5B0803F0EB +:10C080000104A4445B0803F00104A4445B0803F02A +:10C090000104A4445B0803F00104A4445B0803F01A +:10C0A00001045B08A44403F00104A4440CEB530313 +:10C0B0001A44D2B20529DDDB012A8CBF0120002001 +:10C0C00010BC7047FFDB050053E4B36E30B40022B0 +:10C0D000A1F1010CBCF1000F12DD431E11F0010FA4 +:10C0E00008BF13F8012F5C785FEA6C0C08D000BF22 +:10C0F00013F8025F22435C782A43BCF1010CF7D1AC +:10C10000491E5CBF405C0243002A0CBF0120002096 +:10C1100030BC7047130008BF704710B401EB030C2C +:10C12000D41A1CF801CC5B1E00F804C013F0FF0306 +:10C13000F4D110BC7047F0B58DB0164610251C46E2 +:10C140006A46AC4600EB0C03A5EB0C0713F8013C68 +:10C15000D355ACF1010313F0FF0CF3D115461032A7 +:10C16000102084460B18ACEB000713F8013C401E6E +:10C17000D35510F0FF00F5D1284601F079F986B1CA +:10C18000102005F1200201461318A1EB000C13F852 +:10C19000013C401E04F80C3010F0FF00F4D10DB04B +:10C1A000F0BD08982060099860600A98A0600B981C +:10C1B000E0600DB0F0BD38B505460C466846F7F7AF +:10C1C00042FA002808BF38BD9DF90020227294F978 +:10C1D00009100020511A48BF494295F829308B4276 +:10C1E000C8BF38BDFF2B08BF38BDA17A491CC9B2F2 +:10C1F000A17295F82A30994203D8617A7F2918BF35 +:10C2000038BD62720020A072012038BD0B294AD2CD +:10C21000DFE801F006090E13161B323C3F474200CF +:10C22000002A42D03FE0022A18BF032A3DD03AE05C +:10C23000072A18BF062A38D035E0082A35D032E060 +:10C24000A2F10C000C2830D92DE023B1A2F10D0091 +:10C250000B282AD927E00F2A18BF0E2A25D090F8DC +:10C26000340020B10F2A1ED3172A1ED91BE0132A2F +:10C2700019D3172A19D916E0A2F10C01032914D9F0 +:10C2800090F8340078B1182A0FD90CE0092A0CD0A4 +:10C2900009E0012A09D006E0192A18BF1A2A04D099 +:10C2A00001E00A2A01D000207047012070472DE9E3 +:10C2B000F04187680D4604462046F4F701FD90B131 +:10C2C000CDB13846A168F5F79AFDA0B1401EB0FB8C +:10C2D000F5F0461C06FB05F13846F4F780FCA0603B +:10C2E0003046BDE8F081F4F761FC40F26171F4F78B +:10C2F00076FCA060E0E70020BDE8F081904228BF16 +:10C30000704770B50446101B642838BF6420251898 +:10C310008D4205D8F5F79EFD00281CBF284670BD4C +:10C32000204670BD8A8D0B8ED200703292B293423D +:10C3300038BF1A46CB8D498EDB0070339BB29942D1 +:10C3400038BF0B46012100280CBF0120002003FB51 +:10C3500001210023702212FB03119831002818BF1D +:10C3600004200844704710B4B0F84430FB2B28BFB9 +:10C37000FB23DB007033B0F846009BB2FB2828BFDC +:10C38000FB20C00070301FFA80FC914234BF0120B6 +:10C3900000200844C4B28A4234BF01200020104467 +:10C3A000C1B28C4234BF0A4622460020002A04BF94 +:10C3B00010BC704703FB04F00CFB01002144702308 +:10C3C000C1EB420113FB01004D2112FB01F100EB17 +:10C3D000810010BC98387047828DD200703293B2C1 +:10C3E000028E9A4238BF1346C28DB0F832C0D200D6 +:10C3F000703292B2944538BF62464FF0010C02FB96 +:10C400000C324FF0000C702313FB0C2202F19C0342 +:10C41000428840F2712C02FB0CF2DFF8F8C099421E +:10C420000CEB420234BF9C468C46944528BF114613 +:10C4300002D2994238BF19464162704710B4B0F831 +:10C440004430FB2B28BFFB23DB007033B0F84600E1 +:10C450009BB2FB2828BFFB20C00070301FFA80FC75 +:10C46000914234BF012000200844C4B28A4234BF44 +:10C47000012000201044C1B28C4234BF0A4622463B +:10C480000020002A04BF10BC704703FB04F00CFB23 +:10C49000010021447023C1EB420113FB01004D2137 +:10C4A00012FB01F100EB810010BC9C38704710B406 +:10C4B000838DDB0070339CB2038EA34238BF1C46D1 +:10C4C000C38DDB0070331FFA83FC438E634538BF96 +:10C4D0009C4601230CFB034300244FF0700C1CFB13 +:10C4E0000433B0F802C040F271240CFB04FCC2EB30 +:10C4F0004C029833A2F22132994234BF9C468C46BA +:10C50000944528BF114602D2994238BF194641626C +:10C5100010BC7047F1FCFFFF282101F096BF30B539 +:10C520000546007801F00F0220F00F00104328703C +:10C5300007290BD2DFE801F0040604060408040012 +:10C54000062405E00C2403E0222401E00024FFDFA0 +:10C55000687820F03F002043687030BD007800F01C +:10C560000F0070470A68C0F803208988A0F80710F8 +:10C570007047D0F803200A60B0F807008880704741 +:10C580000A68C0F809208988A0F80D107047D0F813 +:10C5900009200A60B0F80D008880704702784023B7 +:10C5A00022F0400203EA81111143017070470078C4 +:10C5B000C0F3801070470278802322F0800203EAE3 +:10C5C000C1111143017070470078C0097047D0F85D +:10C5D0000320C1F80920B0F80720A1F80D200A783F +:10C5E00022F080020A700078800942EAC0100870C8 +:10C5F000704770B515460E4604461F2A88BFFFDFF8 +:10C600002A46314604F1090001F0A8FE6078A91D10 +:10C6100020F03F0001F03F010843607070BD70B52D +:10C62000054640780E4600F03F04062C38BFFFDF79 +:10C63000A01FC4B21F2C88BF1F24224605F1090188 +:10C64000304601F08BFE204670BD70B515460E4693 +:10C6500004461F2A88BFFFDF2A46314604F109003D +:10C6600001F07CFE6078A91D20F03F0001F03F0141 +:10C670000843607070BD70B5054640780E4600F006 +:10C680003F04062C38BFFFDFA01FC4B21F2C88BF99 +:10C69000FFDF224605F10901304601F05FFE20462A +:10C6A00070BD0968C0F80F1070470A88A0F8132001 +:10C6B0008978417570474176090A81767047C1765D +:10C6C000090A017770474177090A81777047C17578 +:10C6D000090A017670478175704790F8242001F0AF +:10C6E0001F0122F01F02114380F82410704790F8B8 +:10C6F0002420E02322F0E00203EA4111114380F8F4 +:10C70000241070471F3001F0D2BF4178007801F04B +:10C710003F0110F00F0006D0012808D0022809D0F0 +:10C7200006280BD00FE0881F1F280AD90BE00C2920 +:10C7300009D106E0881F1F2803D904E0881F1F289D +:10C7400001D801207047002070474178007801F03F +:10C750003F0100F00F00042805D1062903D3252945 +:10C760009CBF012070470020704710B4017801F091 +:10C770000F01032922D0052925D14478B0F81910DA +:10C78000B0F81BC0B0F81730827D04F03F04222CB3 +:10C7900019D1062917D3B1F5486F98BFBCF5FA7FB8 +:10C7A00011D282B1082A98BF8A420CD28B429CBF18 +:10C7B000B0F81D00B0F5486F05D807E0407800F0EC +:10C7C0003F000C2802D010BC0020704710BC012094 +:10C7D0007047222101F039BE00B5027801F0030351 +:10C7E00022F003021A43027000224270012914BF92 +:10C7F000022900BD032912BFFFDF0121417000BDE6 +:10C8000001F0030300B5027822F003021A4302701C +:10C8100000224270012914BF022900BD032912BF62 +:10C82000FFDF0121417000BD007800F00300704778 +:10C830000278102322F0100203EA01111143017063 +:10C8400070474178C07814283BD2DFE800F00A0D29 +:10C85000101316191C1F2225282B2E313A3A3A3A6A +:10C8600034370C292FD030E008292CD02DE00229B4 +:10C8700029D02AE0172926D027E00D2923D024E04B +:10C88000012920D021E001291DD01EE002291AD063 +:10C890001BE0092917D018E0092914D015E0012957 +:10C8A00011D012E001290ED00FE006290BD00CE0C8 +:10C8B000022908D009E0012905D006E0012902D0AB +:10C8C00003E0FB2901D8012070470020704730B5F4 +:10C8D0000546C17016291CD2DFE801F00B0D0F11BF +:10C8E0001315150F17171515190F1B1B1B1B1515E6 +:10C8F00017170C240FE008240DE002240BE0172486 +:10C9000009E00D2407E0012405E0092403E00624E2 +:10C9100001E00024FFDF6C7030BDC0787047C1714A +:10C92000090A01727047B0F8070070474172090A9E +:10C9300081727047B0F809007047C172090A01732B +:10C940007047B0F80B0070474171090A8171704758 +:10C95000B0F8050070470171704700797047417366 +:10C96000090A81737047B0F80D00704730B4B0F811 +:10C970000720624DB0F809C0B0F805300179941F66 +:10C980002D1998BFBCF5FA7F0ED269B1082998BF5E +:10C99000914209D293429FBFB0F80B00B0F5486FA7 +:10C9A000012030BC98BF7047002030BC7047001D8C +:10C9B00001F07DBE021D0846114601F078BE4172AD +:10C9C000090A81727047B0F8090070470171704719 +:10C9D000007970470A684260496881607047426820 +:10C9E0000A60806848607047098881817047808943 +:10C9F000088070470A68C0F80E204968C0F8121015 +:10CA00007047D0F80E200A60D0F8120048607047D6 +:10CA10000968C0F816107047D0F816000860704713 +:10CA20000A68426049688160704742680A608068AD +:10CA3000486070470968C1607047C0680860704707 +:10CA4000017170474171090A81717047C171090A0A +:10CA50000172704700797047B0F805007047B0F870 +:10CA60000700704701717047007970470171704786 +:10CA70000A68426049688160704742680A6080685D +:10CA8000486070470171090A417170478171090A54 +:10CA9000C17170470172090A417270478172090AB7 +:10CAA000C172704780887047C0887047008970479E +:10CAB0004089704701891B2924BF4189B1F5A47FB2 +:10CAC00007D381881B2921BFC088B0F5A47F01202E +:10CAD0007047002070470A6842604968816070476B +:10CAE00042680A6080684860704730B50C46054669 +:10CAF000FB2988BFFFDF6C7030BD000086F3FFFFAD +:10CB000070B50446C2F11005281901F027FC15F094 +:10CB1000FF0108D0491EC9B2802060542046BDE8FC +:10CB2000704001F092BC70BD30B505E05B1EDBB219 +:10CB3000CC5CD55C6C40C454002BF7D130BD10B533 +:10CB4000002409E00B78521E44EA430300F8013B3D +:10CB500011F8013BD2B2DC09002AF3D110BD2DE956 +:10CB6000F0410C4601200978FF4E92B0154602278D +:10CB70004FF006084FF0040C71B101291ED00229B4 +:10CB800045D0032905D12978042902D10520107048 +:10CB9000002012B0BDE8F081606850B1CDE9010617 +:10CBA000012020708DF80080606A0490114668466C +:10CBB00063E0277085F800C0566026E029780429D4 +:10CBC000E7D1696810222069FFF7B9FF6868C07B68 +:10CBD000000606D5E44A2069102310320146FFF70B +:10CBE000A3FFD4E904101022FFF7A9FF2069C07B3E +:10CBF000000606D5DC4A6069102310320146FFF7B3 +:10CC000093FF277085F800C06E600320C1E7297884 +:10CC10000429BED1A08910280CD9A0F1100080B23F +:10CC2000A081A1684FF01003014468466A68FFF7CD +:10CC30007BFF18E004D14FF010032269A16807E0E0 +:10CC4000C2B20DA8A168FFF75BFF626910230DA9AE +:10CC500009A8FFF769FF102309A968466A68FFF76A +:10CC600063FF0320207060680590CDF818D08DF820 +:10CC70001080606A0890294604A8F3F761FC88E7F1 +:10CC80002DE9F04107460D4601200B7806213BB106 +:10CC9000012B04D11378052B01D11170002079E705 +:10CCA0006C69012620226170E8686060686A6062D1 +:10CCB000A168287C0870A681A068A968401C01F0C2 +:10CCC0004DFBA08920222030A081A0686968213016 +:10CCD00001F044FBA08921462030A0812E70384607 +:10CCE000BDE8F041F3F743BC2DE9F05F0D46834604 +:10CCF00001200978174606464FF00608D1B1DFF843 +:10CD000068A24FF00009AAF1080A012923D00229DC +:10CD10007ED003290CD13978052909D179681022F0 +:10CD2000E86901F01BFB07203870183500207D6092 +:10CD3000BDE8F09F2C6A8C48202284F801802030C6 +:10CD400060602020A081686A60626968A06801F064 +:10CD500005FB2E70D4E039780529E9D12C6A84F8D6 +:10CD60000180686A606251681022E86901F0F6FA91 +:10CD7000E8696060A0684F4680F80090A681A068CE +:10CD80004670A089401C80B2A081A16808446969EE +:10CD900051F8012F026089888180A089801D80B2AE +:10CDA000A0816969A2680978C1F340011154A08982 +:10CDB000401C80B2A081A1680844296951F8012F64 +:10CDC000026089888180A089801D80B2A081296944 +:10CDD000A2680978C1F340011154A0891022401CB7 +:10CDE00080B2A081A1680844E96801F0B7FAA0897F +:10CDF0001022103080B2A081A1680844A96801F017 +:10CE0000ADFAA089103080B2A081A168014400E091 +:10CE10000DE0DAF804000860A089001D80B2A0814E +:10CE2000A1680F54A089401CA081022067E03978D6 +:10CE3000052992D151681022A86901F08FFA2C6A55 +:10CE400084F80180E8696060686A6062A16881F8BE +:10CE50000090A681A0684670A089401C80B2A08185 +:10CE6000A1680844696951F8012F026089888180AE +:10CE7000A089801D80B2A0816969A2680978C1F388 +:10CE800040011154A089401C80B2A081A1680844CF +:10CE9000296951F8012F026089888180A089801D4D +:10CEA00080B2A0812969A2680978C1F340011154B8 +:10CEB000A0891022401C80B2A081A1680844E968C2 +:10CEC00001F04CFAA0891022103080B2A081A16834 +:10CED0000844A96801F042FAA089103080B2A0810C +:10CEE000A1680144DAF804000860A089001D80B23E +:10CEF000A081A1680E54A089401CA0810320287045 +:10CF000021465846BDE8F05FF3F731BB70B50D46DA +:10CF100006460978012041B1012905D1117805297A +:10CF200002D108201070002070BD2C6A06206070AD +:10CF300069686160696A6162EA69A16852F8013FE3 +:10CF40000B6092888A80A081E869A1680078C0F3AC +:10CF500040008871A089401C80B2A081A16808446B +:10CF6000A96951F8012F01E0C4EA01000260898833 +:10CF70008180A089801D80B2A081A969A2680978FA +:10CF8000C1F340011154A089401C80B2A081A16866 +:10CF9000084469690A88028089788170A089102212 +:10CFA000C01C80B2A081A1680844296901F0D6F9AB +:10CFB000A0891022103080B2A081A1680844E968DD +:10CFC00001F0CCF9A0891022103080B2A081A168B4 +:10CFD0000844A96801F0C2F9A08921461030A08157 +:10CFE000012028703046BDE87040F3F7C0BA70B534 +:10CFF0000D4606460978012059B1012908D111785A +:10D00000052905D109201070506800685060002083 +:10D0100070BD6C69062010226070E8686060686A04 +:10D0200060622969A06801F099F91020A081A068C8 +:10D0300020221030A96801F091F9A0892022203027 +:10D0400080B2A081A1680844696801F087F9A089CD +:10D0500021462030A081012028703046BDE8704074 +:10D06000F3F785BA70B50C46012009788EB01546E5 +:10D07000062659B1012934D0022905D1297804297D +:10D0800002D10A20107000200EB070BD606910231C +:10D090006A460078C0F340008DF80000A06900786F +:10D0A000C0F340008DF80100E0680168CDF802107F +:10D0B0008188ADF8061080798DF808002069016834 +:10D0C000CDF809108188ADF80D1080798DF80F002A +:10D0D0006068059009A80690A168FFF725FD01206A +:10D0E0001DE029780429CFD1A06910236A4650F8A1 +:10D0F000011F00918088ADF80400606950F8011F9D +:10D10000CDF806108088ADF80A0000200390606812 +:10D11000059009A806906968FFF706FD02202070B7 +:10D120008DF81060606A0890294604A8F3F708FAA1 +:10D13000AAE700B50B7889B001204BB1012B05D1CE +:10D140001178042902D10B201070002009B000BD15 +:10D150004868019005A80290C86803680593406874 +:10D16000069088680368079340680890012008705B +:10D1700006208DF80000486A049011466846F3F7CF +:10D18000DFF9E3E700B50B7889B0012043B1012B4B +:10D19000DCD111780429D9D10C2010700020D5E7FA +:10D1A0004868019005A80290886803680593406864 +:10D1B00006900020079008900120087006208DF846 +:10D1C0000000486A049011466846F3F7B9F9BDE7D4 +:10D1D00000B50B7889B0012043B1012BB6D111788D +:10D1E0000429B3D10D2010700020AFE748680590E6 +:10D1F000CDF818D088680088ADF80000C8680088AD +:10D20000ADF8020000200190029003900120087008 +:10D2100006208DF81000486A0890114604A8F3F71C +:10D220008FF993E730B403460C7801205CB1012CF0 +:10D2300015D0022C05D111780C2902D10E201070C6 +:10D24000002030BC704701200870C868042242707A +:10D250004A6842600B4A8260921EC2600BE01478FA +:10D260000D2CEED102200870C86803244470526867 +:10D2700042608A688260496A4162014630BC184651 +:10D28000F3F775B9BEEA010070B41D78039C4FF046 +:10D29000000CAA4204BF70BC70478E5C864208BF77 +:10D2A0004FF0010C02D0BCF1000F05D0561CA64275 +:10D2B00008BF00268E5D8E54561CA6420CBF00226D +:10D2C000521CD2B2AA42E8D1BCF1000F04BF70BC1C +:10D2D00070471878411E19703CBF601E187070BCF2 +:10D2E000704700002DE9F0410C4611490D68104AC5 +:10D2F000104908321160A0F120012A2901D3012030 +:10D300000CE03E2810D040CC0B4F94E80E0007EB09 +:10D310008000241F50F8807C3046B84720600448C5 +:10D32000001D0560BDE8F0812046E3F749FFF5E701 +:10D330001005024001000001F4EA010010B5524856 +:10D3400000F04EFA00B1FFDF4F48401C00F048FAF1 +:10D35000002800D0FFDF10BD2DE9F14F4B4ED6F86D +:10D3600000B00127484800F043FADFF81C8128B9D3 +:10D370005FF0000708F1010000F050FA444C00256E +:10D380004FF0030901206060C4F80051C4F8045153 +:10D39000009931602060DFF8FCA018E0DAF80000A6 +:10D3A000C00614D50E2000F064F8EFF3108010F0E2 +:10D3B000010072B600D00120C4F80493D4F8001123 +:10D3C00019B9D4F8041101B920BF00B962B6D4F874 +:10D3D000000118B9D4F804010028DFD0D4F8040102 +:10D3E0000028CFD137B1C6F800B008F1010000F035 +:10D3F000FFF911E008F1010000F0FAF90028B9D1B5 +:10D40000C4F80893C4F80451C4F800510E2000F089 +:10D4100030F81D4800F002FA0020BDE8F88F2DE931 +:10D42000F0438DB00D46064600240DF110090DF1B4 +:10D43000200817E004EB4407102255F8271068462F +:10D4400000F08CFF05EB870710224846796800F052 +:10D4500085FF6846FFF780FF10224146B86800F05C +:10D460007DFF641CB442E5DB0DB00020BDE8F08315 +:10D4700072E700F01F02012191404009800000F195 +:10D48000E020C0F8801270477601002004E50040DB +:10D4900000E0004010ED00E0C748002101708170FD +:10D4A000704770B5C54D01232B60C54B1C68002C1F +:10D4B000FCD0002407E00E6806601E68002EFCD039 +:10D4C000001D091D641C9442F5D3002028601868D3 +:10D4D0000028FCD070BD70B5B74E0446B94D307809 +:10D4E000022800D0FFDFAC4200D3FFDF7169B648ED +:10D4F000012903D847F23052944201DD03224271E0 +:10D50000491C7161291BC160AF497078BDE870404A +:10D51000F3F7DDBC70B5A84C0D466178884200D0A9 +:10D52000FFDFA84E092D4FD2DFE805F04E0522316E +:10D530004E4E4E4E3C002078022800D0FFDF0320E4 +:10D540002070A078022802D0012804D008E0A0684A +:10D5500000F01AFC04E004F1080007C8FFF7A1FF7F +:10D56000052020700020A070BDE87040F3F74DBA90 +:10D57000F3F71CFB01466068F4F741FCB04202D2AD +:10D58000616902290BD30320F4F75EFE12E0F3F782 +:10D590000DFB01466068F4F732FCB042F3D2BDE8FF +:10D5A000704098E7207802280AD0052806D0FFDFCF +:10D5B00004202070BDE8704000F0F4B8022000E0C4 +:10D5C0000320F4F741FEF3E7FFDF70BD70B50546B9 +:10D5D000F3F7ECFA784C60602078012800D0FFDF88 +:10D5E00079490220087000220A718D6004224A7174 +:10D5F000744ACA6020706078BDE87040F3F767BC79 +:10D6000010B56D4CA07808B9207808B1112010BD74 +:10D610006E48F3F765FA6070607820B101202070E1 +:10D620000020606110BD032010BD0246010B0120E7 +:10D63000B2F5003F02D2884000F020BEB2F5802F44 +:10D6400003D22039884000F021BEB2F5C02F03D2AA +:10D650004039884000F023BEB2F5002F03D2603974 +:10D66000884000F025BE002070472DE9F0411446A7 +:10D6700000EB84070E4605463F1F00F098FB4FF075 +:10D6800080510A69504306EB8402121FB24201D254 +:10D69000012200E000221CB10969B4EB910F02D90C +:10D6A0000920BDE8F0814A498D4216D3AF4214D318 +:10D6B000854205D2874203D245EA0600800701D0A1 +:10D6C0001020EEE78E4208D33AB92846FFF7ADFFA7 +:10D6D00018B93846FFF7A9FF08B10F20E1E73D4828 +:10D6E0003D490068884205D0224631462846FFF76A +:10D6F000D8FE10E0FFF784FF0028D2D12E48012188 +:10D700008560C0E9036481704FF4A97104FB01F0E6 +:10D710001830FFF75BFF0020C3E770B54FF080556E +:10D72000044628692A49B1FBF0F084420AD300F08C +:10D730003EFBA04201D8102070BD28696043FFF76E +:10D7400074FF08B10F2070BD224823490068884249 +:10D7500004D02869604300F017FB0CE0FFF750FF8E +:10D760000028F0D129691448614381600221817049 +:10D770001A48FFF72BFF002070BD1548010B012050 +:10D780008840401E704770B50D460446FFF7F5FF10 +:10D79000204201D00F2070BD29462046BDE87040D0 +:10D7A00000F08FBD10B5044C6078F3F7E9F9002064 +:10D7B0002070A07010BD00007801002004E5014039 +:10D7C00000E40140105C0C002C12002015D5010073 +:10D7D00000F001009C000020BEBAFECA7C5E010081 +:10D7E000002101700846704701460020087070470C +:10D7F000EFF3108101F0010172B60278012A01D025 +:10D80000012200E000220123037001B962B60AB1CF +:10D81000002070474FF400507047E9E7EFF31081A4 +:10D8200011F0010F72B64FF00002027000D162B623 +:10D8300000207047F2E700005649096801600020A7 +:10D840007047544908600020704701218A0720B1C1 +:10D85000012804D042F204007047916700E0D167CC +:10D86000002070474C490120086042F206007047D2 +:10D8700008B50423484A1907103230B1C1F80433FF +:10D88000106840F0010010600BE0106820F001000B +:10D890001060C1F808330020C1F808013F48006853 +:10D8A0000090002008BD3C49103140B101280CD047 +:10D8B000022812D0032816D042F2050070470868EB +:10D8C00020F01E0040F0100004E0086820F01E0068 +:10D8D00040F01400086000207047086820F01E0027 +:10D8E00040F01800F6E7086820F01E0040F01C0029 +:10D8F000F0E7294924310A6802430A600020704792 +:10D90000254924310A6882430A6000207047224971 +:10D9100024310968016000207047012801D90720DF +:10D9200070471F4A52F8200002680A430260002034 +:10D930007047012801D907207047194A52F8200082 +:10D9400002688A43026000207047012801D907203D +:10D950007047134A52F820000068086000207047A2 +:10D96000020010494FF0000003D0012A01D0072027 +:10D9700070470A6070474FF080410020C1F80801ED +:10D980004FF0E020802180F800140121C0F8001140 +:10D9900070470000000400400005004008010040FE +:10D9A0009CEB0100780500406249634B0A686349BB +:10D9B0009A42096801D1C1F310010160002070474B +:10D9C0005C495D4B0A685D49091D9A4201D1C0F36B +:10D9D00010000860002070475649574B0A685749A5 +:10D9E00008319A4201D1C0F310000860002070474E +:10D9F00030B5504B504D1C6842F20803AC4202D087 +:10DA0000142802D203E0112801D3184630BDC30008 +:10DA10004B481844C0F81015C0F81425002030BD3C +:10DA20004449454B0A6842F209019A4202D006284D +:10DA300002D203E0042801D308467047404A01217E +:10DA400042F83010002070473A493B4B0A6842F2D6 +:10DA500009019A4202D0062802D203E0042801D329 +:10DA600008467047364A012102EBC00041600020A1 +:10DA7000704770B52F4A304E314C156842F2090399 +:10DA800004EB8002B54204D0062804D2C2F8001884 +:10DA900007E0042801D3184670BDC1F31000C2F896 +:10DAA0000008002070BD70B5224A234E244C156832 +:10DAB00042F2090304EB8002B54204D0062804D2E6 +:10DAC000D2F8000807E0042801D3184670BDD2F848 +:10DAD0000008C0F310000860002070BD174910B5A1 +:10DAE0000831184808601120154A002102EBC003D4 +:10DAF000C3F81015C3F81415401C1428F6D30020E1 +:10DB000006E0042804D302EB8003C3F8001807E002 +:10DB100002EB8003D3F80048C4F31004C3F80048B4 +:10DB2000401C0628EDD310BD0449064808310860A2 +:10DB3000704700009C000020BEBAFECA00F50140FC +:10DB400000F001400000FEFF10B572B600F0C6F80C +:10DB500050B1E3F7D5FBF2F740FFF4F71BFBECF70E +:10DB60009AF963490020086062B6002010BD70B5C4 +:10DB70000D46044672B600F0B1F810B162B6082046 +:10DB800070BDE3F733FBE3F7BDFB0246002043091A +:10DB90009B0003F1E02300F01F01D3F80031CB40DC +:10DBA000D9071DD0202803D222FA00F1C9071CD1C1 +:10DBB00041B2002906DA01F00F0101F1E02191F8EC +:10DBC000141D03E001F1E02191F80014490908292E +:10DBD0000BD251B1012908D0042906D0052904D05F +:10DBE000401C6428D3D324B104E062B641F20100A2 +:10DBF00070BD404C2078022803D962B64FF48050A3 +:10DC000070BD3D49802081F8140DECF71BF9207898 +:10DC10000028607801D058B908E048B1202807D81A +:10DC2000A078212804D8012802D003E0A07808B108 +:10DC3000072070BD2E493148086031480560E3F780 +:10DC400061FB2146F4F78CFAF2F77AFE00F0E6F871 +:10DC5000FFF722FC2046E3F721FB040062B603D065 +:10DC6000FFF772FF204670BD002070BD10B504465E +:10DC700000F034F800B101202070002010BD2149CF +:10DC800008600020704770B50C461F490D681E499A +:10DC90001E4E08310E60102807D011280CD0122813 +:10DCA0000FD0132811D0012013E0D4E90001FFF7B1 +:10DCB0005EFF354620600DE0FFF746FF002520603F +:10DCC00008E02068FFF7D2FF03E00E4920680860F3 +:10DCD000002020600C48001D056070BD0448074905 +:10DCE0000068884201D10120704700207047000081 +:10DCF0009C000020A4EB01000BE000E0BEBAFECACD +:10DD000090010020040000201005024001000001E5 +:10DD10002DE9F04184B088460746FEF785FD0546AB +:10DD20007E786A4601A94046F0F7CCFE04000ED08A +:10DD3000012D1EBF032004B0BDE8F08102AA4046B9 +:10DD40000199F0F7C5FD0298B0F803000AE0022D32 +:10DD500014D1042E12D3B7F80300BDF80020011D22 +:10DD60008A420BD3001D80B2A119814238BF012025 +:10DD700008BF00209CBF04B0BDE8F0814FF0020056 +:10DD800004B0BDE8F08100000B4A022111600B498C +:10DD90000B68002BFCD0084B1B1D1860086800287E +:10DDA000FCD00020106008680028FCD070474FF0BD +:10DDB000805040697047000004E5014000E40140E4 +:10DDC00010B54FF000040B460200204621461ED03D +:10DDD000012A04D0022A04D0032A1DD103E0012025 +:10DDE00002E0022013E00320072B15D2DFE803F046 +:10DDF000140406080A0C0E00012108E0022106E0C6 +:10DE0000032104E0042102E0052100E00621F2F7ED +:10DE100081FE08B1204610BD0724FBE7FE4805211E +:10DE20008170002101704170C17081607047FB49B1 +:10DE30000A78022A06D0CA681044C860C868323816 +:10DE4000F3F789BF8A68104488608868F7E7037829 +:10DE5000F349F44A13B1012B0ED011E00379012BE1 +:10DE600000D06BB943790BB1012B09D18368643BB6 +:10DE70008B4205D2C0680EE00379012B02D00BB1B2 +:10DE80000020704743790BB1012BF9D1C368643B83 +:10DE90008B42F5D280689042F2D8012070472DE97C +:10DEA000F04704460226F3F7E4F9006800B1FFDF0B +:10DEB000D94D01273CB12078B0B1012805D0022806 +:10DEC00010D0032813D02F710CE06068C82807D346 +:10DED000F3F7C0FF20B16068FFF7A9FF012603E058 +:10DEE000002601E000F0AFF93046BDE8F087287861 +:10DEF0000028F7D16068FFF7AAFF0028E3D0606828 +:10DF0000DFF81883007810B3A878042800D0FFDF6A +:10DF10000020474688F8000060680079C0B3002000 +:10DF2000387160684079A0B30420787160688168B6 +:10DF3000E868F2F754FEB8606068C0683230F86094 +:10DF40000320A870B549E878F2F7C1FFCAE74FF09F +:10DF50000209404688F8009061680979D1B1002132 +:10DF6000017161684979B9B10421417161688968B9 +:10DF7000323181606168C968C160C068A64C1434E0 +:10DF80006060F2F713FE20606F7085F80290A9E7D9 +:10DF900004E005E00321E3E70321E6E70120BFE712 +:10DFA0000320C2E72DE9F0479B4C8846E178884280 +:10DFB00000D0FFDFDFF8609200250127974E09F1BE +:10DFC0001409B8F1090F76D2DFE808F0050D2A3DF3 +:10DFD000646A769E7E00A078032886D0A078022806 +:10DFE00083D0FFDF81E7A078032803D0A078022840 +:10DFF00000D0FFDF0420A0702571207800285FD1B9 +:10E00000FFF715FF3078022806D0B068E06000F016 +:10E010006CF92061002048E0E078F2F7FEFDF5E7BA +:10E02000A078032803D0A078022800D0FFDF207852 +:10E0300078BBA078032812D1042026E00420F4F74E +:10E0400003F9A57051E7A078032803D0A07802282F +:10E0500000D0FFDF2078E0B9A078032814D0F2F7D1 +:10E06000A5FD01464F46D9F80000F3F7C8FE002889 +:10E07000E4DB79688142E1DB081AF0606749E07807 +:10E08000BDE8F047F2F723BF0520F4F7DDF8A770ED +:10E090002BE724E0A078042800D0FFDF022004E072 +:10E0A000A078042800D0FFDF0120A1688847FFF78F +:10E0B000F6FE05462EE027E0A078042800D0FFDF1A +:10E0C000BDE8F04700F0BFB8A078042805D060781C +:10E0D00010B1A078022800D0FFDF207818B1BDE889 +:10E0E000F04700F0B9B8207920B10620F4F7ACF879 +:10E0F0002571CCE7607828B14849E078F2F7E7FE6F +:10E100006570F2E60720C0E7FFDFEEE63DB1012DC6 +:10E1100003D0FFDF022DF9D1E7E60420C5E7032095 +:10E12000C3E770B5050005D03B4CA078052803D0A7 +:10E13000112070BD102070BD3B48F2F7D1FCE0709B +:10E14000E07818B1A5600020A07070BD032070BDFC +:10E15000314810B5017809B1112010BD8178052929 +:10E160000CD0817801290BD0817849B1012101704F +:10E170008178012904D0807810B103E00F2010BD10 +:10E1800000F06AF8002010BD2DE9F041224E04464F +:10E19000B07808B101280AD164B12046FFF757FED4 +:10E1A00050B120781D4D48B1B078012822D00F2001 +:10E1B000BDE8F0811020FBE70720F9E702272F7068 +:10E1C000207998B100202871607988B104206871A5 +:10E1D000A0683230A860E068E860E8680E4C14344B +:10E1E0006060F2F7E3FC2060B77022E00320EAE70A +:10E1F0000320ECE700202870207900B3002028716C +:10E200006079F0B104206871A168F068F2F7E7FC6A +:10E21000A860E068323009E0940100203C12002040 +:10E220003D860100FF1FA107A5DF0100E860032074 +:10E23000B0701049F078F2F74AFE0020B8E70320EA +:10E24000DDE70320DFE70C4810B5006900F045F872 +:10E25000BDE81040F2F7D9BB10B5074CE078F2F7F3 +:10E260008FFC0820F3F7F0FF0520A070002020703D +:10E27000607010BD3C120020940100201F49096805 +:10E28000014201D001207047002070471B49091D41 +:10E290000968014201D001207047002070471749EA +:10E2A00010310968014201D00120704700207047F9 +:10E2B000124914310968014201D001207047002041 +:10E2C000704710B50D4C2060201D01600B481030C8 +:10E2D0000260001D0360002010BD09490A6848F271 +:10E2E00002139A4302430A607047054A116848F2D4 +:10E2F000021301EA030099431160704700060040D1 +:10E30000C806024040EA010310B59B070FD1042A5A +:10E310000DD310C808C9121F9C42F8D020BA19BAF0 +:10E32000884201D9012010BD4FF0FF3010BD1AB155 +:10E33000D30703D0521C07E0002010BD10F8013BAA +:10E3400011F8014B1B1B07D110F8013B11F8014BD1 +:10E350001B1B01D1921EF1D1184610BD032A40F2B9 +:10E36000308010F0030C00F0158011F8013BBCF177 +:10E37000020F624498BF11F801CB00F8013B38BF8F +:10E3800011F8013BA2F1040298BF00F801CB38BF9D +:10E3900000F8013B11F0030300F02580083AC0F0BB +:10E3A000088051F8043B083A51F804CBA0E8081063 +:10E3B000F5E7121D5CBF51F8043B40F8043BAFF396 +:10E3C0000080D20724BF11F8013B11F801CB48BFF0 +:10E3D00011F8012B24BF00F8013B00F801CB48BF26 +:10E3E00000F8012B704710B5203AC0F00B80B1E85F +:10E3F0001850203AA0E81850B1E81850A0E818507A +:10E40000BFF4F5AF5FEA027C24BFB1E81850A0E882 +:10E41000185044BF18C918C0BDE810405FEA827C9C +:10E4200024BF51F8043B40F8043B08BF7047D207B3 +:10E4300028BF31F8023B48BF11F8012B28BF20F854 +:10E44000023B48BF00F8012B70474FF0000204293F +:10E45000C0F0128010F0030C00F01B80CCF1040C13 +:10E46000BCF1020F18BF00F8012BA8BF20F8022B47 +:10E47000A1EB0C0100F00DB85FEAC17C24BF00F8ED +:10E48000012B00F8012B48BF00F8012B70474FF01B +:10E49000000200B5134694469646203922BFA0E8F4 +:10E4A0000C50A0E80C50B1F12001BFF4F7AF090700 +:10E4B00028BFA0E80C5048BF0CC05DF804EB8900F1 +:10E4C00028BF40F8042B08BF704748BF20F8022B34 +:10E4D00011F0804F18BF00F8012B7047164B1860E1 +:10E4E000164B1960164B1A607047FEDF0420714608 +:10E4F00008421BD10699134A914217DC069902394A +:10E500004878DF2812D10878FE2808D0FF280DD1DE +:10E510004FF001004FF000020B4B1B68184741F20F +:10E5200001000099019A084B1B6818470698059945 +:10E53000064B1B68DB681847B4010020B8010020B7 +:10E54000BC01002000F00100900100200400002028 +:10E55000184819497047FFF7FBFFE2F71FFE00BD9F +:10E560004FF4805015490968884203D1144A13605A +:10E570005B68184700BD000020BFFDE74FF48050E6 +:10E580000E490968884210D10E4B18684FF0FF31D0 +:10E590008842F1D080F308884FF02021884204DDC2 +:10E5A0000948026802210A43026008488047084877 +:10E5B0008047FFDF50120020501200200000002092 +:10E5C0000400002000F0010024050040D92B0100C8 +:10E5D00061E5010004207146084202D0EFF3098191 +:10E5E00001E0EFF30881886902380078102813DB16 +:10E5F00020280FDB2B280BDB0A4A12680A4B9A42B1 +:10E6000003D1602804DB094A1047022008607047E4 +:10E61000074A1047074A1047074A12682C32126807 +:10E62000104700009C000020BEBAFECA091300007B +:10E63000E5D2010087DC0100040000200E4B0F49E9 +:10E6400008470F4B0D4908470E4B0C4908470E4B26 +:10E650000A4908470D4B094908470D4B0749084728 +:10E660000C4B064908470C4B044908470B4B034920 +:10E6700008470B4B01490847C19B0000612F000070 +:10E68000252F0000E99700006D9700009B9D00007A +:10E69000251300000B2F0000E398000011A00000DC +:10E6A000A9110000002101604160017270470A68F1 +:10E6B00002600B790371704729850000D78600003E +:10E6C000FD840000CD870000F18700002B8800004A +:10E6D0005F88000099880000C98800001B8900003D +:10E6E000911200009112000081230000C12300005C +:10E6F000E32300009B240000D7250000A92600008A +:10E70000E5260000A9270000311F0000E1290000D4 +:10E71000C32A0000E32A00008B320000AF32000061 +:10E72000DF31000033320000E132000075330000B9 +:10E730004B4600000F480000B74B0000D34C0000D0 +:10E74000574D0000F54D0000674E0000834F00005C +:10E7500051500000CF500000FD2A0000032B0000A4 +:10E760000D2B0000F31E0000DD2B0000C51E000075 +:10E77000332D000091120000911200009112000050 +:10E780009112000091120000295C0000AF5C0000B3 +:10E79000CB5C0000E75C0000755E0000115D0000CE +:10E7A0001B5D00005D5D00007F5D00005B5E0000A2 +:10E7B0009D5E000091120000357500005575000047 +:10E7C0005775000091750000BF750000BB76000012 +:10E7D0006577000079770000C7770000AD7800000A +:10E7E000637A0000A37B000063660000BB7B00002F +:10E7F00091120000911200003993000077930000FD +:10E8000099930000100110013A0200001A0200045E +:10E8100005060000FFFFFFFF0000FFFF3D8F000027 +:10E82000931B0000B3580000AD660000F77F0000A6 +:10E8300000000000617D0000798000005980000028 +:10E84000000000000000000091C80000000000006F +:10E85000000000000000000017D9000000000000C8 +:10E860000000000000000000EDC8000071C90000B9 +:10E87000000000000000000071CD0000F5CA00009B +:10E8800075D20000000000000000000007DE00005C +:10E8900000000000000000000000000021CE000089 +:10E8A000E5D9000000000000B5DA000029DB000017 +:10E8B0000000000011D30000C3D3000000000000DE +:10E8C000EFDA0000A3D40000B3D6000025D7000083 +:10E8D00019D80000CDCF0000ADD800000000000026 +:10E8E000E5CE000000000000E1CB000057CB0000A7 +:10E8F00045D9000085DC0000F3DC000000000000CA +:10E90000BFC9000001CA00001FC9000000000000CC +:10E910003BCA00000000000073CA0000A9CA000042 +:10E920004BDD000000000000C3D00000F1D100006A +:10E930008FD1000035D20000D5CD000083CB000080 +:10E940009DCD000099DF0000F7CC000055DE0000EF +:10E9500000000000B3DD000015CC00002FCB00004C +:10E96000CFDE00004FDF000045E1000059CE00007F +:10E97000FBE000005DD00000F7DF000049E0000090 +:10E9800085E00000C1E000002FCD0000ED3C00005C +:10E99000ED3C00005D230000A18E00002F69000007 +:10E9A00083580000000000009D990100313D0000E7 +:10E9B000313D00007F230000FB8E0000A7690000AE +:10E9C0008D58000011860100C3990100BC01BC01F3 +:10E9D0003E002C00540014001801600101000000EA +:10E9E0000001020304000F101112000000130000C8 +:10E9F00065D0010033D1010085D10100D1D10100E2 +:10EA000025D201005FCB010081CC0100E9CC0100DF +:10EA10000DCF0100EFCF01003BF200001503010014 +:10EA200000000000060000000A00000032000000A4 +:10EA300073000000B40000003F740100CF650100C6 +:10EA40006B740100D16501003F450100B5AE0100C6 +:10EA500039580100B5AE0100A9450100FDAF010024 +:10EA6000E1500100FDAF0100B74401008DAF01008E +:10EA70001B5701008DAF0100555555D6BE898E003C +:10EA800000006606F30C801300000A033B066C09C5 +:10EA900000005604D308500D555555252627D6BEDF +:10EAA000898EF401FA00960064004B0032001E00CB +:10EAB000140000002100000000000000000003001E +:10EAC000656C74620000000000000000000000009F +:10EAD00000000000870000000000000000000000AF +:10EAE00000000000BE83605ADB0B376038A5F5AA32 +:10EAF0009183886CA9D90100C1D90100D9D901003D +:10EB0000F1D9010021DA010049DA010073DA0100CC +:10EB1000A7DA01001BD701006BD6010087D70100DF +:10EB2000E1D70100F1D701001DD80100FF2301004A +:10EB300007240100152401004BD8010065D801000D +:10EB400039D8010043D8010071D80100A7D80100CD +:10EB5000F3D8010001D901000FD901001BD9010030 +:10EB600033D901004BD9010061D901000000000038 +:10EB700087990000DD990000F3990000C1DD0100D4 +:10EB800059D301001FD4010023E1010051E101002C +:10EB900089E10100F5210100D92601001C05004092 +:10EBA0002005004000100200C8EB01000800002012 +:10EBB000B801000044110000F0EB0100C00100208A +:10EBC0009010000080110000013F021E1736010066 +:10EBD00001006C3720FB349B5F80041F8000100213 +:10EBE0002C01337F0102A829024410E4DDE4010076 +:00000001FF diff --git a/hex/sd_api_v5/bootstrap_sd_api_v5.sh b/hex/sd_api_v5/bootstrap_sd_api_v5.sh deleted file mode 100644 index e0d913f17..000000000 --- a/hex/sd_api_v5/bootstrap_sd_api_v5.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash -# -# Download and patch the nRF5 SDK to compile the connectivity application. -# Use the nRF5 SDK 15 and the SoftDevice API version 5. - -ABS_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" - -source $ABS_PATH/../bootstrap.sh \ - -l 'https://developer.nordicsemi.com/nRF5_SDK/nRF5_SDK_v15.x.x/nRF5_SDK_15.0.0_a53641a.zip' \ - -f 'https://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.8.16.0.pack' \ - -d "../sdk" \ - -p 'sdk150_add_sd_v3v5_support.patch' diff --git a/hex/sd_api_v5/build_v5_win.bat b/hex/sd_api_v5/build_v5_win.bat deleted file mode 100644 index cb2ca1ed6..000000000 --- a/hex/sd_api_v5/build_v5_win.bat +++ /dev/null @@ -1,96 +0,0 @@ -@ECHO OFF -SETLOCAL -SET startpath=%cd% -SET scriptpath=%~dp0 -SET rootpath=%scriptpath%..\.. - -REM Get command line argument -IF "%1"=="" (SET CONN_VERSION=0.0.0 -) ELSE (SET CONN_VERSION=%1) - -REM Environment variables that is changed between SDK versions -@SET SDK_NAME=nRF5_SDK_15.0.0_a53641a -@SET SOFTDEVICE_MAJOR=5 -@SET SOFTDEVICE_MINOR=0 -@SET SOFTDEVICE_PATCH=0 - -REM Environment variables that are below that are mostly based on the ones above -REM Do not know why a shortened name is used -@SET TEMP_NAME=s150 -@SET SOFTDEVICE_PATH="%rootpath%\sdk\%TEMP_NAME%\components\softdevice\s132v%SOFTDEVICE_MAJOR%\hex\s132_nrf52_%SOFTDEVICE_MAJOR%.%SOFTDEVICE_MINOR%.%SOFTDEVICE_PATCH%_softdevice.hex" -@SET MERGED_HEX_FILENAME_PCA10040_1m="%rootpath%\sdk\connectivity_%CONN_VERSION%_1m_with_s132_%SOFTDEVICE_MAJOR%.%SOFTDEVICE_MINOR%.hex" -@SET MERGED_HEX_FILENAME_PCA10040_115k2="%rootpath%\sdk\connectivity_%CONN_VERSION%_115k2_with_s132_%SOFTDEVICE_MAJOR%.%SOFTDEVICE_MINOR%.hex" -@SET MERGED_HEX_FILENAME_PCA10059_usb="%rootpath%\sdk\connectivity_%CONN_VERSION%_usb_with_s132_%SOFTDEVICE_MAJOR%.%SOFTDEVICE_MINOR%.hex" - -@SET BASH_EXE="c:\program files\git\bin\bash.exe" -@SET MERGE_HEX="c:\Program Files (x86)\Nordic Semiconductor\nrf5x\bin\mergehex.exe" -@SET UV_EXE="\Keil_v5\UV4\UV4.exe" -@SET UV_PROJECT_FILE_PCA10040="ble_connectivity_s132v%SOFTDEVICE_MAJOR%_hci_pca10040.uvprojx" -@SET UV_PROJECT_FILE_PCA10059="ble_connectivity_s132v%SOFTDEVICE_MAJOR%_usb_hci_pca10059.uvprojx" - -@ECHO Starting build of BLE Connectivity firmware with SDK %SDK_NAME% -cd "%scriptpath%" || GOTO :error -"c:\program files\git\bin\bash.exe" bootstrap_sd_api_v%SOFTDEVICE_MAJOR%.sh || GOTO :error - -@ECHO Workaround to reduce path length before build -cd %rootpath%\sdk || GOTO :error -rename %SDK_NAME% %TEMP_NAME% || GOTO :error - -REM ############## -REM # PCA10040 # -REM ############## -@ECHO. -@ECHO Compiling for PCA10040, 1M baudrate -@cd %rootpath%\sdk\%TEMP_NAME%\examples\connectivity\ble_connectivity\pca10040\ser_s132v%SOFTDEVICE_MAJOR%_hci\arm5_no_packs || GOTO :error -%UV_EXE% -b %UV_PROJECT_FILE_PCA10040% -j0 -o pca10040_log_1m.txt - -REM Warnings are expected, UV return codes: http://www.keil.com/support/man/docs/uv4/uv4_commandline.htm -@if %ERRORLEVEL% GTR 1 GOTO :error - -@ECHO Merge hex SoftDevice and application. -%MERGE_HEX% -m _build\nrf52832_xxaa.hex %SOFTDEVICE_PATH% -o %MERGED_HEX_FILENAME_PCA10040_1m% || GOTO :error - -@ECHO String replace baudrate. -%BASH_EXE% -c "sed -i -e 's/SER_PHY_UART_BAUDRATE_VAL 1000000$/SER_PHY_UART_BAUDRATE_VAL 115200/' ../../../../../../../%TEMP_NAME%/components/serialization/common/ser_config.h" || GOTO :error - -@ECHO. -@ECHO Compiling for PCA10040, 115k2 baudrate -%UV_EXE% -b %UV_PROJECT_FILE_PCA10040% -j0 -o pca10040_log_115k2.txt -@if %ERRORLEVEL% GTR 1 GOTO :error - -@ECHO Merge hex SoftDevice and application. -%MERGE_HEX% -m _build\nrf52832_xxaa.hex %SOFTDEVICE_PATH% -o %MERGED_HEX_FILENAME_PCA10040_115k2% || GOTO :error - -REM ############## -REM # PCA10059 # -REM ############## -@ECHO. -@ECHO Compiling for PCA10059, USB -@SET PROJECT_ROOT_PATH="%rootpath%\sdk\%TEMP_NAME%\examples\connectivity\ble_connectivity\pca10059\ser_s132v%SOFTDEVICE_MAJOR%_usb_hci\arm5_no_packs" -@IF NOT EXIST %PROJECT_ROOT_PATH% CALL :skipping "PCA10059, USB" -@IF %ERRORLEVEL%==1 GOTO :summary -@cd %PROJECT_ROOT_PATH% || GOTO :error -%UV_EXE% -b %UV_PROJECT_FILE_PCA10059% -j0 -o pca10059_log_usb.txt - -REM Warnings are expected, UV return codes: http://www.keil.com/support/man/docs/uv4/uv4_commandline.htm -@if %ERRORLEVEL% GTR 1 GOTO :error - -@ECHO Merge hex SoftDevice and application. -%MERGE_HEX% -m _build\nrf52832_xxaa.hex %SOFTDEVICE_PATH% -o %MERGED_HEX_FILENAME_PCA10059_usb% || GOTO :error - -:summary -@ECHO. -@ECHO Connectivity firmwares compiled and merged: -@IF EXIST %MERGED_HEX_FILENAME_PCA10040_1m% ECHO %MERGED_HEX_FILENAME_PCA10040_1m% -@IF EXIST %MERGED_HEX_FILENAME_PCA10040_115k2% ECHO %MERGED_HEX_FILENAME_PCA10040_115k2% -@IF EXIST %MERGED_HEX_FILENAME_PCA10059_usb% ECHO %MERGED_HEX_FILENAME_PCA10059_usb% - -GOTO :EOF - -:error -ECHO Command failed with error code %errorlevel%. -EXIT /b %errorlevel% - -:skipping -ECHO Skipping compilation of %~1 since the project file does not exist -EXIT /b 1 diff --git a/hex/sd_api_v5/connectivity_0.0.0_115k2_with_s132_5.0.hex b/hex/sd_api_v5/connectivity_0.0.0_115k2_with_s132_5.0.hex deleted file mode 100644 index 0b8b9ab6b..000000000 --- a/hex/sd_api_v5/connectivity_0.0.0_115k2_with_s132_5.0.hex +++ /dev/null @@ -1,12108 +0,0 @@ -:020000040000FA -:1000000000040020E90800007D050000C908000088 -:1000100087050000910500009B050000000000001E -:100020000000000000000000000000000D090000BA -:10003000A505000000000000AF050000B9050000A4 -:10004000C3050000CD050000D7050000E105000054 -:10005000EB050000F5050000FF05000009060000A3 -:10006000130600001D0600002706000031060000F0 -:100070003B060000450600004F0600005906000040 -:10008000630600006D060000770600008106000090 -:100090008B060000950600009F060000A9060000E0 -:1000A000B3060000BD060000C7060000D106000030 -:1000B000DB060000E5060000EF060000F906000080 -:1000C000030700000D0700001707000021070000CC -:1000D0002B070000350700003F070000490700001C -:1000E000530700005D07000067070000710700006C -:1000F0007B070000850700008F07000099070000BC -:10010000A30700001FB500F003F88DE80F001FBD26 -:1001100000F0E0BB1FB56FF00100009040100390AD -:10012000029001904FF010208069000B420900F00E -:100130001F045DF822300120A04083434DF8223097 -:10014000684600F045F91FBDF0B54FF6FF734FF458 -:10015000B4751A466E1E11E0A94201D3344600E080 -:100160000C46091B30F8027B641E3B441A44F9D14B -:100170009CB204EB134394B204EB12420029EBD17E -:1001800098B200EB134002EB124140EA0140F0BD8F -:10019000DE4992B00446D1E90001CDE91001FF2209 -:1001A0004021684600F03CFB94E80F008DE80F000A -:1001B000684610A902E004C841F8042D8842FAD12B -:1001C00010216846FFF7C0FF1090AA208DF8440068 -:1001D000FFF7A0FF00F0F3F84FF01024A069102201 -:1001E0006946803000F002F9A069082210A900F0E9 -:1001F000FDF800F0D8F84FF080510A6949690068AD -:100200004A43824201D8102070470020704710B541 -:10021000D0E900214FF0805002EB8103026944696C -:100220006243934209D84FF01022536903EB8103D4 -:100230000169406941438B4201D9092010BD5069D1 -:10024000401C01D0002010BD0F2010BD70B501680A -:100250000446AF4D4FF01020072952D2DFE801F0DD -:10026000330419293C1E2500D4E902656468294637 -:10027000304600F0CDF82A462146304600F0B6F868 -:10028000AA002146304600F09FFA002800D0032043 -:1002900070BD00F051FB4FF4805007E0201DFFF7C8 -:1002A000AAFF0028F4D100F047FB60682860002016 -:1002B00070BD241D94E80700920000F085FA002824 -:1002C000F6D00E2070BD8069401C12D0201DFFF7B3 -:1002D0009EFF0028F6D109E08069401C09D0201D4E -:1002E000FFF789FF0028EDD1606820B12046FFF7B5 -:1002F0004FFF042070BDFFF70DFF00F060F800F025 -:1003000052F8072070BD10B50C46182802D0012005 -:10031000086010BD2068FFF799FF206010BD4FF006 -:100320001024A069401C05D0A569A66980353079E4 -:10033000AA2808D06069401C2DD060690068401C64 -:1003400029D060692CE010212846FFF7FDFE3168B6 -:1003500081421CD1A16901F18002C03105E030B1B8 -:1003600008CA51F8040D984201D1012000E0002094 -:100370008A42F4D158B1286810B1042803D0FEE7AE -:10038000284600F057F862496868086008E000F005 -:1003900016F800F008F84FF480500168491C01D0AD -:1003A00000F0A4FAFEE7BFF34F8F5A4801685A4A9B -:1003B00001F4E06111430160BFF34F8FFEE74FF09E -:1003C00010208169491C02D0806900F0AEB87047E6 -:1003D000524A01681160121D416811604F4A8168DC -:1003E00010321160111DC068086070472DE9F0419E -:1003F00017460D460646002406E03046296800F000 -:10040000A7F8641C2D1D361DBC42F6D3BDE8F08153 -:1004100070B50C4605464FF4806608E0284600F0AB -:1004200084F8B44205D3A4F5806405F58055002C0A -:10043000F4D170BD4168044609B1012500E00025F2 -:100440004FF010267069A268920000F0BDF9C8B1A3 -:10045000204600F01AF89DB17669A56864684FF4EB -:10046000002084420AD2854208D229463046FFF74E -:10047000CFFF2A4621463046FFF7B8FFFFF79FFF20 -:10048000FFF791FFFFF746FEF8E72DE9FF414FF038 -:100490001024616980680D0B01EB800000F6FF708D -:1004A000010B0020009001900290024603906846E4 -:1004B00001230BE0560902F01F0C50F8267003FAD6 -:1004C0000CFC47EA0C0740F82670521CAA42F1D3F4 -:1004D0000AE04A0901F01F0650F8225003FA06F616 -:1004E000354340F82250491C8029F2D3A169090BF9 -:1004F0004A0901F01F0150F822408B409C4340F80C -:100500002240FFF765FFBDE8FF8100005C090000A5 -:10051000000000200CED00E00400FA050006004099 -:10052000144801680029FCD07047134A0221116069 -:1005300010490B68002BFCD00F4B1B1D186008687E -:100540000028FCD00020106008680028FCD070470C -:10055000094B10B501221A60064A1468002CFCD021 -:10056000016010680028FCD0002018601068002886 -:10057000FCD010BD00E4014004E5014008208F4993 -:1005800009680958084710208C4909680958084724 -:1005900014208A49096809580847182087490968BA -:1005A0000958084730208549096809580847382004 -:1005B00082490968095808473C2080490968095858 -:1005C000084740207D4909680958084744207B496D -:1005D00009680958084748207849096809580847B0 -:1005E0004C20764909680958084750207349096822 -:1005F0000958084754207149096809580847582084 -:100600006E490968095808475C206C49096809580F -:100610000847602069490968095808476420674904 -:100620000968095808476820644909680958084753 -:100630006C20624909680958084770205F490968B9 -:100640000958084774205D49096809580847782007 -:100650005A490968095808477C20584909680958C7 -:10066000084780205549096809580847842053499C -:1006700009680958084788205049096809580847F7 -:100680008C204E4909680958084790204B49096851 -:10069000095808479420494909680958084798208B -:1006A00046490968095808479C204449096809587F -:1006B0000847A0204149096809580847A4203F4934 -:1006C000096809580847A8203C490968095808479B -:1006D000AC203A49096809580847B02037490968E9 -:1006E00009580847B4203549096809580847B8200F -:1006F0003249096809580847BC2030490968095837 -:100700000847C0202D49096809580847C4202B49CB -:10071000096809580847C82028490968095808473E -:10072000CC202649096809580847D0202349096880 -:1007300009580847D4202149096809580847D82092 -:100740001E49096809580847DC201C4909680958EE -:100750000847E0201949096809580847E420174963 -:10076000096809580847E8201449096809580847E2 -:10077000EC201249096809580847F0200F49096818 -:1007800009580847F4200D49096809580847F82016 -:100790000A49096809580847FC20084909680958A6 -:1007A00008475FF480700549096809580847000048 -:1007B00003480449024A034B704700000000002030 -:1007C000680900006809000040EA010310B59B07B2 -:1007D0000FD1042A0DD310C808C9121F9C42F8D0AB -:1007E00020BA19BA884201D9012010BD4FF0FF305C -:1007F00010BD1AB1D30703D0521C07E0002010BD72 -:1008000010F8013B11F8014B1B1B07D110F8013BFD -:1008100011F8014B1B1B01D1921EF1D1184610BDDE -:1008200002F0FF0343EA032242EA024200F005B865 -:100830007047704770474FF000020429C0F01280E3 -:1008400010F0030C00F01B80CCF1040CBCF1020F83 -:1008500018BF00F8012BA8BF20F8022BA1EB0C0158 -:1008600000F00DB85FEAC17C24BF00F8012B00F84E -:10087000012B48BF00F8012B70474FF0000200B574 -:10088000134694469646203922BFA0E80C50A0E8B3 -:100890000C50B1F12001BFF4F7AF090728BFA0E861 -:1008A0000C5048BF0CC05DF804EB890028BF40F82D -:1008B000042B08BF704748BF20F8022B11F0804F6F -:1008C00018BF00F8012B7047014B1B68DB68184705 -:1008D0000000002009480A497047FFF7FBFFFFF7B7 -:1008E00011FC00BD20BFFDE7064B1847064A10600B -:1008F000016881F30888406800470000680900002B -:10090000680900001F030000000000201EF0040F13 -:100910000CBFEFF30881EFF3098188690238007892 -:10092000182803D100E00000074A1047074A126860 -:100930002C3212681047000000B5054B1B68054AB1 -:100940009B58984700BD00000703000000000020EE -:100950005809000004000000001000000000000022 -:0809600000FFFFFF0090D0032F -:10100000E8120020111D0200152F0000831C0200B1 -:10101000152F0000152F0000152F00000000000004 -:10102000000000000000000000000000691D020038 -:10103000152F000000000000152F0000152F0000E4 -:10104000D11D0200D71D0200152F0000152F000032 -:10105000152F0000152F0000152F0000152F000080 -:10106000DD1D0200152F0000152F0000E31D0200FA -:10107000152F0000E91D0200EF1D0200F51D020002 -:10108000152F0000152F0000152F0000152F000050 -:10109000152F0000152F0000152F0000152F000040 -:1010A000152F0000FB1D0200152F0000152F00005A -:1010B000152F0000152F0000152F0000152F000020 -:1010C000011E0200152F0000152F0000152F000033 -:1010D000152F0000152F0000152F0000152F000000 -:1010E000152F0000152F0000152F0000152F0000F0 -:1010F000152F0000152F0000152F0000152F0000E0 -:10110000152F0000152F000000F002F820F0EDFD73 -:101110000AA090E8000C82448344AAF10107DA4552 -:1011200001D120F0E2FDAFF2090EBAE80F0013F092 -:10113000010F18BFFB1A43F0010318471C130200EC -:101140003C1302000A444FF0000C10F8013B13F06E -:10115000070408BF10F8014B1D1108BF10F8015B10 -:10116000641E05D010F8016B641E01F8016BF9D103 -:1011700013F0080F1EBF10F8014BAD1C0C1B09D15A -:101180006D1E58BF01F801CBFAD505E014F8016BCC -:1011900001F8016B6D1EF9D59142D6D3704700005E -:1011A0000023002400250026103A28BF78C1FBD870 -:1011B000520728BF30C148BF0B6070471FB500F011 -:1011C0003DF88DE80F001FBD1EF0040F0CBFEFF3BC -:1011D0000880EFF30980014A104700006F2E0000DD -:1011E0008269034981614FF001001044704700009B -:1011F000F511000001B41EB400B512F0AFFD01B44A -:101200000198864601BC01B01EBD0000F0B4404606 -:10121000494652465B460FB402A0013001B506486C -:10122000004700BF01BC86460FBC804689469246F7 -:101230009B46F0BC704700000911000020F052BD31 -:1012400070B51A4C054609202070A01C00F05FF80C -:101250005920A08029462046BDE8704007F0F1BF24 -:1012600007F0FABF70B50C461149097829B1A0F111 -:101270006001552908D3012013E0602804D06928B3 -:1012800002D043F201000CE020CC0A4E94E80E009C -:1012900006EB8000A0F58050241FD0F8806E284611 -:1012A000B047206070BD012070470000080000209A -:1012B0001C0000204C1E020010B504460021012035 -:1012C00000F03BF800210B2000F037F80421192032 -:1012D00000F033F804210D2000F02FF804210E2037 -:1012E00000F02BF804210F2000F027F80421C84358 -:1012F00000F023F80621162000F01FF80621152023 -:1013000000F01BF82046FFF79BFF002010BD9D2139 -:1013100001807047FFF7A4BF10487047104A10B50E -:1013200014680F4B0F4A08331A60FFF79BFF0C48F5 -:10133000001D046010BD704770474907090E002862 -:1013400006DA00F00F0000F1E02080F8141D70476D -:1013500000F1E02080F800147047000003F900421B -:101360001005024001000001FE48002101604160BB -:10137000018170472DE9F743044692B091464068D9 -:1013800012F0B2FF40B1606812F0B7FF20B9607888 -:1013900000F00300022801D0012000E00020F14EFF -:1013A0004D463072484612F05BFF18B1102015B060 -:1013B000BDE8F0832946012001F029FF0028F6D17D -:1013C00001258DF842504FF4C050ADF84000002286 -:1013D00010A9284606F0FAFB0028E8D18DF8425003 -:1013E0004FF428504FF00008ADF8400047461C214C -:1013F0006846CDF81C8020F018FC9DF81C0008AA57 -:1014000020F00F00401C20F0F00010308DF81C0080 -:1014100020788DF81D0061789DF81E0061F3420070 -:1014200040F001008DF81E009DF800000AA940F070 -:1014300002008DF800002089ADF83000ADF8327060 -:10144000608907AFADF834000B97606810AC0E9060 -:101450000A94684606F0AFF90028A8D1BDF820002C -:1014600030808DF8425042F60120ADF840009DF8E2 -:101470001E0008AA20F00600801C20F001008DF854 -:101480001E000220ADF83000ADF8340013A80E9015 -:101490000AA9684606F08FF9002888D1BDF8200017 -:1014A0007080311D484600F033F9002887D18DF84F -:1014B000425042F6A620ADF840001C216846CDF807 -:1014C0001C8020F0B2FB9DF81C00ADF8345020F0D9 -:1014D0000F00401C20F0F00010308DF81C009DF82B -:1014E0001D0008AA20F0FF008DF81D009DF81E00C9 -:1014F0000AA920F0060040F00100801C8DF81E00B3 -:101500009DF800008DF8445040F002008DF8000076 -:10151000CDE90A4711A80E90ADF83050684606F0A4 -:101520004AF9002899D1BDF82000F08000203EE75C -:101530003EB504460820ADF80000204612F090FEAB -:1015400008B110203EBD2146012001F060FE0028B8 -:10155000F8D12088ADF804006088ADF80600A088B6 -:10156000ADF80800E088ADF80A007E4801AB6A4695 -:101570008088002106F024FDBDF800100829E1D084 -:1015800003203EBD1FB50446002002900820ADF8A0 -:101590000800CDF80CD0204612F062FE10B11020E9 -:1015A00004B010BD6F4802AA81884FF6FF7006F0A4 -:1015B0004EFF0028F4D1BDF80810082901D00320FF -:1015C000EEE7BDF800102180BDF802106180BDF883 -:1015D0000410A180BDF80610E180E1E701B582B0FA -:1015E0000220ADF800005F4802AB6A464088002147 -:1015F00006F0E6FCBDF80010022900D003200EBD65 -:101600001CB5002100910221ADF80010019012F0EC -:101610004DFE08B110201CBD52486A4641884FF665 -:10162000FF7006F014FFBDF800100229F3D003206C -:101630001CBDFEB54B4C06461546207A0F46C0072A -:1016400005D0084612F00CFE18B11020FEBD0F2088 -:10165000FEBDF82D01D90C20FEBD304612F000FE73 -:1016600018BB208801A905F0ECFD0028F4D13078E2 -:101670008DF80500208801A906F081FC0028EBD137 -:1016800000909DF800009DF8051040F002008DF8D4 -:101690000000090703D040F008008DF80000208802 -:1016A000694606F009FC0028D6D1ADF8085020881C -:1016B0003B4602AA002106F083FCBDF80810A942AF -:1016C000CAD00320FEBD7CB50546002000900190E5 -:1016D0000888ADF800000C462846019512F004FE7B -:1016E00018B9204612F0E2FD08B110207CBD15B1FA -:1016F000BDF8000050B11B486A4601884FF6FF70E4 -:1017000006F0A5FEBDF8001021807CBD0C207CBD3C -:1017100030B593B0044600200D460090142101A876 -:1017200020F083FA1C2108A820F07FFA9DF8000021 -:10173000CDF808D020F00F00401C20F0F000103051 -:101740008DF800009DF8010020F0FF008DF80100E9 -:101750009DF8200040F002008DF8200001208DF857 -:10176000460001E0E201002042F60420ADF844000A -:1017700011A801902088ADF83C006088ADF83E00CB -:10178000A088ADF84000E088ADF842009DF8020066 -:1017900006AA20F00600801C20F001008DF802004F -:1017A0000820ADF80C00ADF810000FA8059001A9B5 -:1017B00008A806F000F8002803D1BDF8180028801A -:1017C000002013B030BD0000F0B5007B059F1E4621 -:1017D00014460D46012800D0FFDF0C2030803A204F -:1017E0003880002C08D0287A052806D0287B0128CC -:1017F00000D0FFDF17206081F0BDA889FBE72DE94D -:10180000F04786B0144691F80C900E9A0D46B9F147 -:10181000010F0BD01021007B2E8A8846052807D0A7 -:10182000062833D0FFDF06B0BDE8F0870221F2E7DB -:10183000E8890C2100EB400001EB400018803320C8 -:101840001080002CEFD0E889608100271AE0009614 -:10185000688808F1020301AA696900F07AFF06EBC3 -:101860000800801C07EB470186B204EB4102BDF87B -:10187000040090810DF1060140460E3210F04CFD3F -:101880007F1CBFB26089B842E1D8CCE73420108019 -:10189000E889B9F1010F11D0122148430E301880A8 -:1018A000002CC0D0E88960814846B9F1010F00D012 -:1018B0000220207300270DF1040A1FE00621ECE747 -:1018C0000096688808F1020301AA696900F041FFE7 -:1018D00006EB0800801C86B2B9F1010F12D007EBAD -:1018E000C70004EB4000BDF80410C18110220AF1CA -:1018F0000201103020F000F97F1CBFB26089B842AD -:10190000DED890E707EB470104EB4102BDF8040085 -:10191000D0810AF102014046103210F0FDFCEBE7E5 -:101920002DE9F0470E4688B090F80CC096F80C8070 -:10193000378AF5890C20109902F10C044FF0000A47 -:10194000BCF1030F08D0BCF1040F3ED0BCF1070F6F -:101950007DD0FFDF08B067E705EB850C00EB4C009E -:10196000188031200880002AF4D0A8F1060000F089 -:10197000FF09558125E0182101A820F056F90097AC -:101980007088434601AA716900F0E3FEBDF80400C7 -:101990002080BDF80600E080BDF808002081A21C70 -:1019A0000DF10A01484610F0B7FCB9F1000F00D064 -:1019B00018B184F804A0A4F802A007EB080087B2CD -:1019C0000A346D1EADB2D6D2C4E705EB850C00EB30 -:1019D0004C00188032200880002ABBD0A8F10500F6 -:1019E00000F0FF09558137E000977088434601AA4F -:1019F000716900F0AEFE9DF80600BDF80410E180AC -:101A00002179420860F3000162F34101820862F328 -:101A10008201C20862F3C301020962F304114209A0 -:101A200062F34511820962F386112171C009607168 -:101A3000BDF80700208122460DF10901484610F04B -:101A40006BFC18B184F802A0A4F800A000E007E045 -:101A500007EB080087B20A346D1EADB2C4D279E735 -:101A6000A8F1020084B205FB08F000F10E0CA3F807 -:101A700000C035230B80002AA6D0558194810097A1 -:101A800083B270880E32716900F063FE62E72DE95F -:101A9000F84F1E460A9D0C4681462AB1607A00F531 -:101AA0008070D080E089108199F80C000C274FF0ED -:101AB00000084FF00E0A0D2873D2DFE800F09E07F1 -:101AC0000E1C28303846556A737373002146484609 -:101AD0000095FFF779FEBDE8F88F207B9146082836 -:101AE00002D0032800D0FFDF378030200AE000BF9B -:101AF000A9F80A80EFE7207B9146042800D0FFDF99 -:101B0000378031202880B9F1000FF1D1E3E7207B45 -:101B10009146042800D0FFDF37803220F2E7207B97 -:101B20009146022800D0FFDF37803320EAE7207B90 -:101B30001746022800D0FFDF3420A6F800A0288036 -:101B4000002FC8D0A7F80A80C5E7207B17460428D5 -:101B500000D0FFDF3520A6F800A02880002FBAD0E3 -:101B60004046A7F80A8012E0207B1746052802D0DD -:101B7000062800D0FFDF1020308036202880002F7C -:101B8000A9D0E0897881A7F80E80B9F80E00B88155 -:101B9000A1E7207B9146072800D0FFDF3780372060 -:101BA000B0E72AE04FF0120018804FF0380017001D -:101BB000288090D0E0897881A7F80E80A7F810805F -:101BC00099F80C000A2805D00B2809D00C280DD054 -:101BD000FFDF80E7207B0C2800D0FFDF01200AE038 -:101BE000207B0D2800D0FFDF042004E0207B0E289E -:101BF00000D0FFDF052038736DE7FFDF6BE770B5BE -:101C00000C46054601F076FA20B10078222804D26D -:101C1000082070BD43F2020070BD052128460EF079 -:101C20001DFF206008B1002070BD032070BD2DE9AC -:101C3000FF4784B00027824602970798904689465E -:101C400012300AF0E2F8401D20F00306079828B988 -:101C500007A95046FFF7D3FF002853D1B9F1000F71 -:101C600005D00798017B19BB052504681BE098F88F -:101C70000000092803D00F2812D0FFDF45E00799A4 -:101C800003254868B0B3497B42887143914238D9F3 -:101C90008AB2B3B2011D0EF03AFD0446078002E09D -:101CA000079C042508340CB1208810B1032D28D0DE -:101CB0002BE00798012112300AF0DFF8ADF80C0094 -:101CC000024602AB2946504608F0B1F9070001D19F -:101CD000A01C029007983A461230C8F80400A8F8F1 -:101CE00002A003A94046029B0AF0D4F8C0B107281D -:101CF00014D200E005E0DFE800F0060811110F0A39 -:101D00000C00132026E6002024E6112022E60820FD -:101D100020E643F203001DE607201BE6032019E638 -:101D2000BDF80C002346CDE900702A4650460799BD -:101D300000F035FD57B9032D08D10798B3B2417BA8 -:101D4000406871438AB2011D0EF0F5FCB9F1000F35 -:101D5000D9D0079981F80C90D5E72DE9FE4F91462F -:101D60001A881C468A468046FAB102AB494608F0FA -:101D70005EF9050019D04046A61C27880EF08AFFA0 -:101D80003246072629463B4600960EF049FB20883E -:101D90002346CDE900504A465146404600F0FFFC3C -:101DA000002020800120BDE8FE8F0020FBE710B559 -:101DB00086B01C46AAB104238DF800301388ADF814 -:101DC00008305288ADF80A208A788DF80E200988EC -:101DD000ADF80C1000236A462146FFF728FF06B035 -:101DE00010BD1020FBE770B50D4605210EF036FE44 -:101DF000040000D1FFDF294604F11200BDE8704065 -:101E00000AF024B82DE9F8430D468046002607F075 -:101E1000CCFA0446287812287BD2DFE800F07A5406 -:101E2000543C355632321332323209323232323287 -:101E30002879001FC0B2022801D0102810D114BB8D -:101E4000FFDF35E004B9FFDF052140460EF006FE56 -:101E5000007B032806D004280BD0072828D0FFDFFA -:101E6000072657E02879801FC0B2022820D050B141 -:101E7000F6E72879401FC0B2022819D0102817D0E1 -:101E8000EEE704B9FFDF13E004B9FFDF287901288A -:101E90000ED1172139E0052140460EF0DFFD070085 -:101EA00000D1FFDF07F11201404609F0A6FF2CB177 -:101EB0002A462146404600F05CFC2BE013214046B8 -:101EC00002F0AAFC26E0FFDF24E004B9FFDF0521D1 -:101ED00040460EF0C3FD060000D1FFDF694606F163 -:101EE000120009F094FF060000D0FFDFA98817292F -:101EF00001D2172200E00A46BDF80000824202D952 -:101F0000014602E005E01729C3D3404600F057FC24 -:101F1000CEE7FFDF3046BDE8F883401D20F0030226 -:101F200019B102FB01F0001D00E0002010447047D1 -:101F300013B5009850B100244FEA0D000EF091FB4C -:101F4000002C02D1F84A009911601CBD0124002028 -:101F5000F4E72DE9F0470C461546242120461FF0F2 -:101F600064FE05B9FFDFA87860732888DFF8B8A39E -:101F7000401D20F00301AF788946DAF800000EF02A -:101F80008EFB060000D1FFDF4FF000082660A6F8A8 -:101F9000008077B109FB07F1091D0AD0DAF80000CB -:101FA0000EF07DFB060000D1FFDF6660C6F8008002 -:101FB00001E0C4F80480298804F11200BDE8F0476C -:101FC00009F00DBF2DE9F047804601F112000D46E2 -:101FD000814609F01AFF401DD34F20F003026E7BAB -:101FE0001446296838680EF085FB3EB104FB06F202 -:101FF000121D03D0696838680EF07CFB05200EF0D6 -:10200000D7FC044605200EF0DBFC201A012802D183 -:1020100038680EF039FB49464046BDE8F04709F004 -:10202000F3BE70B5054605210EF018FD040000D181 -:10203000FFDF04F112012846BDE8704009F0DDBE63 -:102040002DE9F04F91B04FF0000BADF834B0ADF882 -:1020500004B047880C4605469246052138460EF0E6 -:10206000FDFC060000D1FFDF24B1A780A4F806B074 -:10207000A4F808B0297809220B20B2EB111F297AA5 -:102080007DD104F110023827C91E4FF00C094FF022 -:10209000010803920F2973D2DFE801F0F4F3F28113 -:1020A00008D48A8FA13DDDF5F0B8B800307B022856 -:1020B00000D0FFDFA88909EBC001ADF80410302182 -:1020C000ADF83410002C25D06081B5F80E900027B3 -:1020D0001DE004EBC708317C88F80E10F189A8F8E0 -:1020E0000C10CDF800906888042304AA296900F038 -:1020F00030FBBDF81010A8F8101009F10400BDF86D -:1021000012107F1C1FFA80F9A8F81210BFB2608964 -:10211000B842DED80FE1307B022800D0FFDFE9892A -:1021200009EBC100ADF804003020ADF83400287B85 -:102130000A90001FC0B20F90002CEBD06181B5F85F -:102140001090002727E000BFCDF8009068886969EB -:1021500003AA0A9B00F0FDFA0A9904EBC70809EBF1 -:1021600001001FFA80F908F10C0204A90F9810F081 -:10217000D3F818B188F80EB0A8F80CB001E0D7E099 -:10218000D4E0BDF80C10A8F81010BDF80E107F1C9C -:10219000A8F81210BFB26089B842D5D8CBE00DA81C -:1021A000009001AB224629463046FFF728FBC2E0EB -:1021B000307B082805D0FFDF03E0307B082800D003 -:1021C000FFDFE8891030ADF804003620ADF83400A8 -:1021D000002C3FD0A9896181F189A18127E0307B62 -:1021E000092800D0FFDFA88900F10C01ADF8041028 -:1021F0003721ADF83410002C2CD06081E889009094 -:10220000AB89688804F10C02296956E0E889392114 -:10221000103080B2ADF80400ADF83410002C74D04A -:10222000A9896181287A10280AD002212173E989BD -:10223000E181288A0090EB8968886969039A3CE00B -:102240000121F3E70DA8009001AB22462946304654 -:10225000FFF766FB6FE0307B0A2800D0FFDF12201B -:10226000ADF80400ADF834704CB3A9896181A4F8CD -:1022700010B0A4F80EB084F80C805CE020E002E01E -:1022800031E039E042E0307B0B2800D0FFDF288AC4 -:10229000ADF834701230ADF8040084B1042121731C -:1022A000A9896181E989E181298A2182688A00906E -:1022B0002B8A688804F11202696900F04AFA3AE050 -:1022C000307B0C2800D0FFDF1220ADF80400ADF801 -:1022D00034703CB305212173A4F80AB0A4F80EB001 -:1022E000A4F810B027E00DA8009001AB22462946C3 -:1022F0003046FFF769FA1EE00DA8009001AB2246B8 -:1023000029463046FFF7C3FB15E036E03B21ADF828 -:102310000400ADF8341084B3A4F80680A4F808B023 -:1023200084F80AB007E0000010000020FFDF02E0A0 -:10233000012919D0FFDFBDF80400AAF800007CB124 -:10234000BDF834002080BDF804006080BDF8340082 -:10235000392805D03B2803D03C2801D086F80CB0A2 -:1023600011B00020BDE8F08F3C21ADF80400ADF8BD -:10237000341014B1697AA172DDE7FFE7AAF8000012 -:10238000EEE72DE9F84356880F46804615460521AD -:1023900030460EF063FB040000D1FFDF12340094DE -:1023A0003B46414630466A6809F02EFFB3E570B5FA -:1023B0000D4605210EF052FB040000D1FFDF294637 -:1023C00004F11200BDE8704009F02CBD70B50D4657 -:1023D00005210EF043FB040000D1FFDF294604F184 -:1023E0001200BDE8704009F050BD70B505460521EA -:1023F0000EF034FB040000D1FFDF04F10803214696 -:102400002846BDE870400422A7E470B505460521C2 -:102410000EF024FB040000D1FFDF2146284623688C -:10242000BDE87040052298E470B5064605210EF01F -:1024300015FB040000D1FFDF04F1120009F0E5FCF8 -:10244000401D20F0030511E0011D00880322431800 -:1024500021463046FFF781FC00280BD0607BABB2F1 -:10246000684382B26068011D0EF09BF96068418884 -:102470000029E9D170BD70B50E46054606F095FFFE -:10248000040000D1FFDF0120207266726580207891 -:1024900020F00F00C01C20F0F00030302070BDE8AC -:1024A000704006F085BF2DE9F0438BB00D46144611 -:1024B000814606A9FFF7A3FB002814D14FF6FF764B -:1024C00001274FF420588CB103208DF80000102014 -:1024D000ADF8100007A8059007AA204604A90FF040 -:1024E0003AFF78B107200BB0BDE8F0830820ADF8C3 -:1024F00008508DF80E708DF80000ADF80A60ADF848 -:102500000C800CE00698A17801742188C1818DF8B7 -:102510000E70ADF80850ADF80C80ADF80A606A4650 -:1025200002214846069BFFF782FBDCE708B5012243 -:102530008DF8022042F60202ADF800200A4603237D -:102540006946FFF734FC08BD08B501228DF802206A -:1025500042F60302ADF800200A4604236946FFF75D -:1025600026FC08BD00B587B079B102228DF80020A5 -:102570000A88ADF808204988ADF80A1000236A4699 -:102580000521FFF754FB07B000BD1020FBE709B1A0 -:1025900007230CE40720704770B588B00D46144639 -:1025A000064606A9FFF72BFB00280ED17CB10620BA -:1025B000ADF808508DF80000ADF80A40069B6A4659 -:1025C0000821DC813046FFF732FB08B070BD0520E2 -:1025D0008DF80000ADF80850F0E700B587B059B1AC -:1025E00007238DF80030ADF80820039100236A46D8 -:1025F0000921FFF71CFBC6E71020C4E770B588B0BF -:102600000C460646002506A9FFF7F9FA0028DCD19A -:1026100006980121123009F030FC9CB1217806297E -:1026200021D2DFE801F0200505160318801E80B2D4 -:10263000C01EE28880B20AB1A3681BB1824203D9EE -:102640000C20C2E71020C0E7042904D0A08850B9AC -:1026500001E00620B9E7012913D0022905D0042999 -:102660001CD005292AD00720AFE709208DF80000EB -:102670006088ADF80800E088ADF80A00A068039013 -:1026800023E00C208DF800006088ADF80800E08899 -:10269000ADF80A00A0680A25039016E00D208DF819 -:1026A00000006088ADF80800A088ADF80A00E08856 -:1026B000ADF80C00A0680B25049006E00E208DF804 -:1026C000000060788DF808000C256A4629463046DF -:1026D000069BFFF7ACFA78E700B587B00F228DF8BC -:1026E0000020ADF8081000236A461946FFF79FFA4C -:1026F00049E700B587B071B102228DF800200A8841 -:10270000ADF808204988ADF80A1000236A46062172 -:10271000FFF78DFA37E7102035E770B586B006462B -:1027200001200D46ADF808108DF800000146002389 -:102730006A463046FFF77BFA040008D12946304646 -:1027400005F058FC0021304605F072FC204606B02A -:1027500070BDF8B51C4615460E46069F0EF088FA69 -:102760002346FF1DBCB231462A4600940DF01FFEE1 -:10277000F8BD10B548800878144620F00F00C01C42 -:1027800020F0F00090300B4608701822214603F12B -:1027900008001FF0F6F9BDE8104006F009BE30B49D -:1027A0001146DDE902423CB1032903D0002330BCCD -:1027B00008F0D3BA0123FAE71A8030BC704770B52D -:1027C0000C460546FFF70FFB2146284605F021FC85 -:1027D0002846BDE87040012105F02ABC4FF0E022F8 -:1027E0004FF400410020C2F88011204908702049B0 -:1027F00090020860704730B51C4D04462878A0420E -:1028000018BF002C02D0002818BFFFDF2878A04294 -:1028100008BF30BD2C701749154A0020ECB1164D89 -:10282000DFF858C0131F012C0DD0022C1CBFFFDF96 -:1028300030BD086003200860CCF800504FF4000061 -:102840001060186030BD086002200860CCF80050AD -:102850004FF040701060186030BD086008604FF0A5 -:102860006070106030BD00B5FFDF00BD18000020B3 -:1028700008F5014000F500402403002014F5004055 -:1028800070B50B2000F0B5F9082000F0B2F9002176 -:102890000B2000F0C4F90021082000F0C0F9EC4C36 -:1028A00001256560A5600020C4F84001C4F844011A -:1028B000C4F848010B2000F0A7F9082000F0A4F9A3 -:1028C0000B2000F08BF9256070BD10B50B2000F0D7 -:1028D00090F9082000F08DF9DD4801214160816008 -:1028E000DC490A68002AFCD10021C0F84011C0F878 -:1028F0004411C0F848110B2000F086F9BDE81040E3 -:10290000082000F081B910B50B2000F07DF9BDE87A -:102910001040082000F078B900B530B1012806D089 -:10292000022806D0FFDF002000BDCB4800BDCB4809 -:1029300000BDCA48001D00BD70B5C9494FF0004038 -:102940000860C84DC00BC5F80803C74800240460E0 -:10295000C5F840410820C43500F04BF9C5F83C41AA -:10296000C248047070BD08B5B94A002128B10128D9 -:1029700011D002281CD0FFDF08BD4FF48030C2F810 -:102980000803C2F84803B3483C300160C2F8401164 -:10299000BDE80840D0E74FF40030C2F80803C2F8A1 -:1029A0004803AC4840300160C2F84411AB480CE029 -:1029B0004FF48020C2F80803C2F84803A548443009 -:1029C0000160C2F84811A548001D0068009008BDCC -:1029D00070B516460D460446022800D9FFDF0022D6 -:1029E0009B48012304F110018B4000EB8401C1F8E6 -:1029F000405526B1C1F84021C0F8043303E0C0F8C7 -:102A00000833C1F84021C0F8443370BD2DE9F041CE -:102A10001C46154630B1012834D0022839D0FFDFDA -:102A2000BDE8F081891E002221F07F411046FFF7AA -:102A3000CFFF012C24D000208C4E8A4F01247070CF -:102A40003C61894900203C3908600220091D08606A -:102A5000854904203039086083483D350560C7F852 -:102A60000042082000F0D0F82004C7F80403082032 -:102A700000F0B4F87A49E007091F08603470CFE726 -:102A80000120D9E7012B02D00022012005E001221C -:102A9000FBE7012B04D000220220BDE8F04197E7BC -:102AA0000122F9E76B480068704770B500F0C7F87D -:102AB000674C0546D4F840010026012809D1D4F816 -:102AC0000803C00305D54FF48030C4F80803C4F8E8 -:102AD0004061D4F8440101280CD1D4F808038003E4 -:102AE00008D54FF40030C4F80803C4F8446101204D -:102AF00010F0F6FBD4F8480101280CD1D4F80803F3 -:102B0000400308D54FF48020C4F80803C4F8486196 -:102B1000022010F0E5FB5648056070BD70B500F06E -:102B20008EF8524D0446287858B1FFF705FF6878B3 -:102B300020B1002085F8010010F0D2FB4C48046061 -:102B400070BD0320F8E74FF0E0214FF40010C1F80A -:102B500000027047152000F057B842490120086173 -:102B6000082000F051B83F494FF47C10C1F8080329 -:102B70000020024601EB8003C3F84025C3F8402142 -:102B8000401CC0B20628F5D37047410A43F60952EB -:102B90005143C0F3080010FB02F000F5807001EB18 -:102BA0005020704710B5430B48F2376463431B0C49 -:102BB0005C020C602F4C03FB04002F4B4CF2F724FB -:102BC00043435B0D13FB04F404EB402000F58070DD -:102BD0004012107008681844086010BD00F01F0211 -:102BE000012191404009800000F1E020C0F800116F -:102BF000704700F01F02012191404009800000F160 -:102C0000E020C0F88011704700F01F0201219140C0 -:102C10004009800000F1E020C0F8801270474907A9 -:102C2000090E002806DA00F00F0000F1E02080F81D -:102C3000141D704700F1E02080F8001470470C4824 -:102C4000001F00680A4A0D49121D116070470000FC -:102C500000B0004004B500404081004044B1004055 -:102C600008F501400080004040850040340000200D -:102C700014050240F7C2FFFF6F0C010001000001C4 -:102C80000A4810B50468094909480831086010F07D -:102C9000BBFB0648001D046010BD0649002008600B -:102CA0004FF0E0210220C1F8800270471005024079 -:102CB00001000001FC1F004010B50D2000F06FF86E -:102CC000C4B26FF0040000F06AF8C0B2844200D0D1 -:102CD000FFDF3A490120086010BD70B50D2000F0FB -:102CE00048F8374C0020C4F800010125C4F804530B -:102CF0000D2000F049F825604FF0E0216014C1F884 -:102D0000000170BD10B50D2000F033F82C480121F2 -:102D100041600021C0F80011BDE810400D2000F016 -:102D200033B8284810B50468264927480831086098 -:102D30002349D1F80001012804D0FFDF2148001DFC -:102D4000046010BD1D48001D00680022C0B2C1F81B -:102D5000002110F074FFF1E710B51948D0F8001108 -:102D60000029FBD0FFF7DDFFBDE810400D2000F08B -:102D70000BB800F01F02012191404009800000F1D2 -:102D8000E020C0F88011704700F01F02012191403F -:102D90004009800000F1E020C0F880127047002850 -:102DA00006DA00F00F0000F1E02090F8140D03E0C7 -:102DB00000F1E02090F800044009704704D500407D -:102DC00000D00040100502400100000110B5202095 -:102DD00000F075F8202000F07DF84449202081F8AB -:102DE0000004434900060860091D42480860FEF7D8 -:102DF00093FA3F49C83108603F48D0F8041341F0C6 -:102E00000101C0F80413D0F8041341F08071C0F838 -:102E10000413364901201C39C1F8000110BD10B55A -:102E2000202000F04CF8324800210160001D0160B4 -:102E30002F4A481EE83A10602F4AC2F808032C4B6C -:102E4000C8331960C2F80001C2F860012B4908605C -:102E5000BDE81040202000F03DB825492848EC3955 -:102E60000860704722492648E8390860704770B505 -:102E70001F4A8069E83A224911601F49D1F8006170 -:102E80000023204D1D4A5C1E1EB1A84206D300211E -:102E90000FE0D1F8606186B1A84209D2C1F80031D3 -:102EA000C1F860311460BDE87040202000F012B815 -:102EB0001168BDE870401EF0E3BEFFDF70BD00F09A -:102EC0001F02012191404009800000F1E020C0F87C -:102ED0008011704700F01F020121914040098000DD -:102EE00000F1E020C0F880127047000020E000E010 -:102EF000000602406413002000000240000402406B -:102F000001000001003002000F4A12680D498A4298 -:102F10000CD118470C4A12680A4B9A4206D101B5E7 -:102F200010F00EFFFFF799FFBDE80140074909685F -:102F30000958084706480749054A064B70470000EC -:102F400000000000BEBAFECAB0000020040000204D -:102F5000E8120020E812002070B50C46054609F082 -:102F6000F0FA21462846BDE870400AF0E2BB10B5F1 -:102F700011F054FBFFF732FC11F0F0F9BDE81040FE -:102F800011F0A2BA01208107086070470120810773 -:102F90004860704712480068C00700D001207047A1 -:102FA0000F48001F0068C00700D0012070470C4880 -:102FB00008300068C00700D0012070470848103072 -:102FC0000068704706490C310A68D20306D50968C3 -:102FD00001F00301814201D10120704700207047B8 -:102FE0000C0400407047704770477047704702F00C -:102FF000FF0343EA032242EA02421EF0F6BD704795 -:103000002CFFFFFFDBE5B151003002009D00FFFF08 -:1030100084000000404B4C0066D342DA82CFB49D5E -:10302000E40AD77E68976592800939FF30B5FF4D75 -:10303000044610280AD0112C06D02846122CC1783C -:1030400006D0132C08D0FFDFEC7030BDFFDFFBE7AC -:103050001129F9D0FFDFF7E71129F5D0FFDFF3E7FA -:1030600070B50FF0E3FA044610F0A0FC201AC4B2C9 -:1030700006200DF09DFC054606200DF0A1FC2E1A41 -:1030800007200DF095FC054607200DF099FCE74957 -:10309000281A3218C87812280DD000231A44132891 -:1030A0000BD0002002440878022808D000201044E9 -:1030B000201AC0B270BD0123F0E70120F2E7012021 -:1030C000F5E7DA4800B58079D849420897B051F859 -:1030D000070F89880CD017228DF80020CDF8020048 -:1030E000ADF806100BA968460AF0B4FF17B000BD92 -:1030F0004422F1E702210DF0B1BC2DE9F04196B078 -:103100001D4690460E460746FFF7F4FF04000BD01D -:103110002078222804D3A07FC0F34010A84206D113 -:10312000082016B0BDE8F08143F20200F9E749201B -:103130008DF80000ADF802703DB101208DF804005B -:103140008DF805608DF8068002E000208DF80400FF -:103150000BA968460AF07EFFA07F65F34510A077B3 -:103160000020DEE730B50446A1F120000D460A2814 -:103170004AD2DFE800F005070C1C2328353A3F440B -:10318000FFDF42E0207820283FD1FFDF3DE0A74865 -:103190000178032939D0C078132836D02078242824 -:1031A00033D0252831D023282FD0FFDF2DE0207801 -:1031B00022282AD0232828D8FFDF26E020782228BA -:1031C00023D0FFDF21E0207822281ED024281CD025 -:1031D00026281AD0272818D0292816D0FFDF14E077 -:1031E0002078252811D0FFDF0FE0207825280CD08B -:1031F000FFDF0AE02078252807D0FFDF05E02078F0 -:10320000282802D0FFDF00E0FFDF257030BD30B599 -:103210000B8840F67B444FF6FF72022801D09342A0 -:1032200004D09D1FA54224D2022802D04D88954289 -:1032300003D04D88AD1FA5421BD24C88A34218D89D -:103240008B88B3F5FA7F14D2022802D0C888904246 -:1032500005D0C88840F677450A38A84209D2C88800 -:10326000904208D0944206D05B1C6343B3EB800FBE -:1032700001DB072030BD002030BD70B514460D467F -:10328000064610F0EDFF60B90DB1A54201D90C2042 -:1032900070BD002409E000BF56F8240010F0E0FFE4 -:1032A00008B1102070BD641CE4B2AC42F4D300201D -:1032B00070BDF0B50024059D10B1A94203D850E0BF -:1032C00009B90020F0BD0920F0BD055DD5B1071991 -:1032D00097F801C0BCF1150F2DD03BDCBCF1150FE8 -:1032E00038D2DFE80CF037122020262628282F2F8E -:1032F000373737373737373737372000025D22BB4C -:10330000641CE4B28C42F9D3DBE7022DDBD1BD783B -:103310001D70072D01D26D0701D40A20F0BD15786C -:1033200045F0010515E0EF43FF0707E0012D07D049 -:1033300010E00620F0BD2F07A7F18057002FF5D031 -:103340003046F0BD1578AF0701D50B20F0BD45F034 -:1033500002051570055D641C2C44E4B28C4202D950 -:10336000B1E74FF448568C42AFD3AAE710B50278C4 -:10337000540809D0012243F20223012C07D0022C69 -:103380000DD0032C13D10FE00020087005E08079E8 -:103390000324B4EB901F0AD10A70002010BD80797D -:1033A000B2EB901F03D1F7E780798009F4D018467B -:1033B00010BD1E4A117C39B1517C022908D0032965 -:1033C00008D043F2022070470146901D01F0FCBC7A -:1033D000032100E0012101700020704738B50C4640 -:1033E0000546694601F0F0FC00280DD19DF800105B -:1033F000207861F34700207055F8010FC4F80100F0 -:10340000A888A4F80500002038BD38B51378E8B1C5 -:1034100002281BD006A46D46246800944C7905EB65 -:103420009414247864F34703137003E0CC01002064 -:103430000302FF0103280ED003F0FE00107008689D -:10344000C2F801008888A2F8050038BD23F0FE0309 -:1034500013700228E9D1D8B240F00100EEE730B590 -:103460000C46097897B0222902D2082017B030BD47 -:1034700028218DF80010ADF80200132A03D03B2A52 -:1034800001D00720F2E78DF804200BA968460AF066 -:10349000E1FD050003D121212046FFF763FE284608 -:1034A000E4E700B597B023218DF80010ADF80200D5 -:1034B0001088ADF804005088ADF80600D088ADF84B -:1034C0000A009088ADF808000020ADF80C00ADF8B7 -:1034D0000E000BA968460AF0BDFD07E600B597B0DF -:1034E0002C22FA4968461EF04CFB0020CDF8030060 -:1034F000ADF80700F648007C022801D0012000E06A -:1035000000208DF809000BA968460AF0A3FD0028E9 -:1035100000D0FFDFEAE52DE9FF470220EC4E8DF8F1 -:1035200004000027B08AADF80600B84643F202094D -:103530004DE001A80DF0FBF9050006D0B08AA8B354 -:10354000A6F81480ADF806803FE0039CA07F010739 -:103550002DD504F124000090A28EBDF8080021466C -:1035600004F1360301F00DFE050005D04D452BD0CA -:10357000112D3DD0FFDF3BE0A07F20F00800A077B9 -:10358000E07F810861F30000C10861F34100E0774A -:1035900094F8210000F01F0084F8200020782828EB -:1035A00027D129212046FFF7DDFD22E015E0400765 -:1035B0000BD5BDF80800214604F10E02FFF771FF9C -:1035C00005000DD04D4510D100257F1CFFB2022013 -:1035D0000DF0EEF9401CB842ABD8052D12D008E032 -:1035E000A07F20F00400A07703E0112D00D0FFDFC2 -:1035F0000025BDF80600B082052D05D0284604B090 -:10360000BDE8F087A6F814800020F8E770B50646FC -:10361000FFF770FD054605F0C8FE040000D1FFDF8E -:103620006680207820F00F00801C20F0F000203011 -:1036300020700620207295F83E006072BDE8704050 -:1036400005F0B6BE2DE9F04786B0040000D1FFDFDB -:1036500020789F4E20F00F00801C20F0F00070308A -:10366000207060680178091F182931D2DFE801F065 -:10367000FD30303053FC300CFCFC40FD3030FD762A -:10368000FDFD3030FDFDFBFA86883046FFF732FD48 -:103690000546304607F05FFAE0B16068807985F84A -:1036A0003E0021212846FFF75DFD3046FEF7B9FCBC -:1036B000304603F0C3FF3146022010F085FDA87F9D -:1036C00020F01000A877FFF726FF002800D0FFDFCA -:1036D00006B095E7207820F0F0002030207006201A -:1036E0002072668060688079607205F061FED8E7BC -:1036F00085882846FFF7FEFC00B9FFDF6068807808 -:10370000012800D0FFDF6068817906B02846BDE857 -:10371000F04707F0FDBD86883046FFF7EBFC05005B -:1037200000D1FFDF05F044FE60683146C088288183 -:1037300060680089688160684089A881022010F073 -:1037400043FD0020A875A87F00F003000228BFD128 -:10375000FFF7E1FE0028BBD0FFDFB9E780783C2807 -:1037600003D0002502280AD000E00125002720B15F -:103770003C2802D0022800D0FFDF17B1B8E00127B3 -:10378000F5E705F015FE1DB1B07801F0DCFAA1E017 -:103790006568B5F804A0A879AD1C012806D0307979 -:1037A000814605F097FB070003D101E0B078F7E709 -:1037B000FFDF0022022150460DF047F9040000D13E -:1037C000FFDF22212046FFF7CDFC2879012800D019 -:1037D0000220A17F804668F30101A177288B208118 -:1037E000688B6081A88BA08184F822908DF8088076 -:1037F000B8680090F86801906A46032150460DF0C1 -:1038000024F900B9FFDFB888ADF81000B8788DF85A -:10381000120004AA052150460DF017F900B9FFDF88 -:10382000B888ADF80C00F8788DF80E0003AA0421D2 -:1038300050460DF00AF900B9FFDF062105F112002C -:1038400001F0EDFA28B36879800700D5FFDF6979C8 -:10385000E07D61F34700E075D5F80600A061688956 -:10386000A08303E05EE057E050E062E0062105F14E -:103870000C0001F0D4FAB0B1B0794108607861F37E -:1038800047006070D6F80700C4F80200B6F80B00D5 -:1038900012E0E07D20F0FE00801CE075D5F81200FB -:1038A000A061E88ADCE7607820F0FE00801C607090 -:1038B000E868C4F80200288AE080B8F1010F09D056 -:1038C000B8F1020F14D0FFDF02E70000CC1F0200A6 -:1038D000CC0100203078032800D0FFDF002108460B -:1038E00010F072FC06B00120BDE8F04701F0FAB913 -:1038F000F078132800D0FFDF0021062010F064FCD0 -:1039000006B01120BDE8F047FFF790BB06B0204697 -:10391000BDE8F04701F0E6BE05F04AFDB07C40F09E -:10392000020004E005F044FDB07C40F00400B074F7 -:10393000CEE606B0BDE8F04705F03ABD2DE9F04708 -:1039400005460078914600270209FF480C463E468E -:10395000012A6DD000234FF6FF71022A69D0072A91 -:1039600009D00A2A71D0FFDFA9F800600CB12780C6 -:103970006680002044E6D5F804C09CF80060142E50 -:103980007DD010DC04F1080204F118080F2E21D0BC -:1039900004DC042E5AD0082E57D10DE0122E6FD021 -:1039A000132EF9D11FE0153E072E4ED2DFE806F0A8 -:1039B000C14D4D099FEAB00012271026BCF8040043 -:1039C00014E11C27092694B3BCF80200A0806868A3 -:1039D00000795AE11B2709264CB30320207268683E -:1039E0004088A080C0E79CF802003C2827D0102720 -:1039F00018260CF1020CD4B1BCF80200A080BCF86F -:103A000018006082BCF818002082BCF81A00A0825E -:103A1000BCF81C00E0829CF805000CF10601FFF7E1 -:103A2000F4FC9CF8040028B10120E0739CE703E05B -:103A3000BFE0DFE00220F8E7A9F8006099E71B2764 -:103A40000926002CF8D023728EE720E11D273726A7 -:103A5000002CF1D0A18069680879491DFFF7D5FCD9 -:103A6000686890F82B00A0756868C0780428E07D2D -:103A700016D020F00100E0756968C97801E06DE0BA -:103A800011E061F34200E07569681F22C97A61F3B1 -:103A9000C700E075696840460C311EF02DF863E7F9 -:103AA00040F00100E7E71D273726002CC4D0A18095 -:103AB0006868411D0079FFF7A8FC696804F10F02EE -:103AC00001F10C00CB7A01461846FFF79EFC6868AE -:103AD000807CA0756868C178E07D61F3420020F0C9 -:103AE000F900E0751F2140461EF09FF83CE72027B3 -:103AF0001026002CA0D0A180686804F10902407A49 -:103B000020726968CB1C88781946FFF77EFC2BE78A -:103B100021270A26002C8FD0BCF80210A1806968EA -:103B200009792172696849796172817C21F0040107 -:103B300057E022270B26002C84D0BCF80400A0807C -:103B40006868807820726868807901F077F960721F -:103B50006868C07901F072F9A07205E72427102681 -:103B6000002CA3D0BCF80200A080686800792081F6 -:103B70006868007A60816868C088A0816868408948 -:103B8000E081F1E623271026002C8FD0BCF802102C -:103B9000A1806968898821816968C98861816968AB -:103BA0000989A18169684989E181817C21F002014B -:103BB00017E0297A012903D0022914D0FFDFD3E6C8 -:103BC0001F271026002C95D06988A180A989218102 -:103BD000E9896181298AA181698AE181817C21F059 -:103BE00001018174C0E6122768881026214601F081 -:103BF00003F9B9E6287A072850D2DFE800F0373D0C -:103C00003D484848040011270926002C94D0B5F8F7 -:103C100002804046FFF76EFA90F822A0A4F80480D4 -:103C2000687A2072042140460CF02AFF05214046A4 -:103C30000CF026FF002140460CF022FF01214046F7 -:103C40000CF01EFF032140460CF01AFF02214046F3 -:103C50000CF016FF062140460CF012FF07214046EB -:103C60000CF00EFF504601F06EF87DE61B2709268A -:103C7000002C8AD0A180E6E61B270926002C84D0E0 -:103C8000A180287A012800D0022020726CE64A46E2 -:103C900021462846BDE8F04701F0AFBEFFDF63E6EE -:103CA00030B5294D97B0E878132802D0082017B016 -:103CB00030BD22208DF800000BA968460AF0CAF931 -:103CC000040002D1287901F03EF80021062010F00E -:103CD0007BFA2046EBE700B51B4897B0C078122866 -:103CE00001D0082016E41E208DF8000000208DF879 -:103CF00002008DF803000BA968460AF0ABF9002812 -:103D0000F0D10021062010F05FFA1120FFF78EF9A4 -:103D10000020E7E710B50C4C96B02078012815D0AC -:103D20001B208DF8000000208DF802000BA96846CA -:103D30000AF090F900280AD10021084610F044FA50 -:103D40002078032805D007E0CC010020082016B019 -:103D500010BDA07800F0F7FF012000F0C3FF0020A5 -:103D6000F5E770B5002538B1022817D0062836D0FF -:103D7000072800D0FFDF70BDFFF7CCFF0028FAD185 -:103D800005F013FB0028F6D0017821F00F01891C03 -:103D900021F0F0012031017005723FE08EB2304613 -:103DA000FFF7A8F9040000D1FFDF20782128E2D036 -:103DB00005F0FBFA60B1017821F00F01891C21F0B8 -:103DC000F00110310170022101724680A57525E0D5 -:103DD00021463046BDE870401322FFF740BBFE4845 -:103DE000C478122C03D0132C04D0FFDF70BDFFF772 -:103DF00072FF01E0FFF754FF0028F7D105F0D5FA74 -:103E00000028F3D0017821F00F01891C21F0F00186 -:103E100020310170122C05D002210172BDE87040E2 -:103E200005F0C6BA0121F8E72DE9F04116460C006D -:103E3000804600D1FFDF307820F00F00801C20F09A -:103E4000F000103030702078012804D0022817D0FC -:103E5000FFDFBDE8F0814046FFF74CF9050000D1D7 -:103E6000FFDF0320A87505F0A3FA94E80F000836D9 -:103E700086E80F00D848817C41F001018174E8E7B1 -:103E80004046FFF737F9050000D1FFDFA1884FF664 -:103E9000FF700027814202D1E288824203D0814232 -:103EA00001D1E08840B105F083FA94E80F000836AC -:103EB00086E80F00AF75CCE7A87D0128C9D178232B -:103EC00000224146022010F0D5F80220A875C0E774 -:103ED00030B5054697B00C46084610F0C1F978BBDE -:103EE00000210120203D072D73D2DFE805F00425D5 -:103EF0004C515A6640000021072010F03BF908B1F0 -:103F00001120D4E624208DF80000D4F80200CDF86A -:103F10000200A0798DF806000BA968460AF09AF80D -:103F2000050057D1002208231146072010F0A2F8FF -:103F300007284FD0FFDF4DE0606810F0D5F908B1D9 -:103F40001020B4E64A208DF800002088ADF8020069 -:103F50006088ADF804000BA968460AF07BF80500FC -:103F600038D1606898B3BDF83010018032E04C2041 -:103F70008DF800002088ADF80200A07800F0010064 -:103F80008DF8040014E0206801F0D5FF054621E01B -:103F90004B2207E08DF802000AE000BF8DF8021006 -:103FA00006E046228DF800202278D207F6D0F1E70D -:103FB0000BA968460AF04EF8E8E738208DF80000B3 -:103FC0002088ADF802006088ADF80400F0E701E059 -:103FD000FFE7072528466AE630B5054697B00C4648 -:103FE000084610F063F908B1102060E6203D072D67 -:103FF00027D2DFE805F00424242426262400208884 -:10400000FFF778F820B10078222804D208204EE685 -:1040100043F202004BE625208DF800002088ADF821 -:1040200002000BA968460AF015F80028DDD1DDF87A -:104030003210C4F802109DF83610A17137E6062040 -:1040400035E6072033E66448801D704738B51621F1 -:1040500061481DF0C8FD012000F044FE1120FEF76C -:10406000E5FF5D4C6846E11D05F0FFF89DF8001086 -:10407000A07961F3470020F00100A07100202074B6 -:104080004FF46170E08102206074FFF71AF800B10C -:10409000FFDFFDF769F901F0E2FA38BD10B50C4613 -:1040A000402120461DF09FFDA07F20F00300A07757 -:1040B000202020700020A07584F8230010BD7047D8 -:1040C0007CB5054610F0CCF808B110207CBD424C00 -:1040D000A11DD4F806000090D4F80A0001902846EB -:1040E000FFF77CF90028F1D1FEF7EBFF0028EDD0B7 -:1040F0000099C4F80610BDF8041061819DF80610FF -:1041000021737CBD10B5044610F0D0F808B1102022 -:1041100010BD314922468879C91D4008FFF775F95D -:10412000002010BD2DE9F0479CB00D4604004FF073 -:10413000000812D00822FFF7A0F800281CD10026A2 -:1041400009E000BF54F8260004A9FFF70FF9002882 -:1041500012D1761CF6B2AE42F4D32F460A2006AD39 -:104160000DF1440A8DF8180026465146284609F0FC -:1041700071FF20B143F203201CB0BDE8F087404638 -:10418000DFF8548088F805002EB300244FF00B09A7 -:104190001DE000BF56F8240005A9FFF7E7F800B1BD -:1041A000FFDF9DF81400A87056F8240050F8011F96 -:1041B000C5F803108088A5F8070085F800905146DF -:1041C000284609F047FF00B1FFDF641CE4B2BC429F -:1041D000E0D388F8057001E0CC0100200020CBE797 -:1041E0002DE9F0479EB01546894604001DD00F46C4 -:1041F00008222946FFF741F8002810D1002612E0D6 -:1042000054F8260005A9103000F0DEFD002806D184 -:104210003FB157F8260010F023F810B110201EB05F -:10422000ABE7761CF6B2AE42EAD30026A5F1010850 -:104230001CE000BF06F1010A0AF0FF0712E000BF10 -:1042400054F82600017C4A0854F827100B7CB2EB86 -:10425000530F05D10622113011311DF021FC78B128 -:104260007F1CFFB2AF42EBD30AF0FF064645E1DB0D -:10427000C8462E4607AD0DF1480924B1012003E0E0 -:1042800043F20520CBE700208DF81E0031208DF889 -:104290001C004946284609F0DDFE38B934208DF867 -:1042A0001C004946284609F0D5FE10B143F204200F -:1042B000B5E77CB300272BE054F82700A91C103089 -:1042C00000F082FD00B1FFDF54F82700102250F803 -:1042D000111FC5F803108088A5F8070054F82710AF -:1042E00005F109001DF008FCB8F1000F16D058F8D0 -:1042F0002710102205F119001DF0FEFB3220287056 -:104300004946284609F0A6FE00B1FFDF7F1CFFB238 -:10431000B742D1D3FFF7E2F8002080E705F119009A -:1043200001F0FDFDEAE770B596B004460FF098FF86 -:1043300018B960680FF0E1FF10B1102016B070BD21 -:1043400060884AF2B811884207D82078FE4D6E4640 -:1043500028B1012806D0022804D00720EEE7FEF796 -:10436000B0FE1AE06078022804D0032802D043F29D -:104370000220E3E7687417208DF80000697C0020B4 -:10438000CDF80200ADF80600022934D003292FD061 -:10439000FFDF0BA9684609F05DFE0028CED16068FA -:1043A00001F0B0FD207870B101208DF80200F01C02 -:1043B00001F0B5FD4E208DF800000BA9684609F00C -:1043C00049FE00B1FFDF20782874FFF787F8608886 -:1043D00098B1E88180B2ADF8020030208DF800007D -:1043E0000BA9684609F036FE00B1FFDF0020A5E703 -:1043F0008DF80700CDE74020FAE74FF46170E8E759 -:1044000010B504460FF052FF20B9606838B10FF0C4 -:104410006BFF08B1102010BD606801F080FDCA4834 -:10442000C1896180417C6170007C2070002010BDDA -:104430002DE9F0419CB0054600208DF864008DF810 -:1044400060008DF830008DF868001E4614468846DE -:1044500028460FF052FF18B920460FF04EFF10B15A -:1044600010201CB0F5E455EA040018D01F270CAB4F -:1044700019AA414628460097FEF71BFF0028F0D1F5 -:104480001AAB18AA314620460097FEF712FF002803 -:10449000E7D19DF86000C00703D00A20E1E70720BC -:1044A000DFE701AF7DB11A208DF804008DF806809A -:1044B00042462946F81C1DF01FFB0DA901A809F072 -:1044C000C9FD0028CDD17CB120208DF804008DF8E5 -:1044D000066032462146F81C1DF00EFB0DA901A80E -:1044E00009F0B8FD0028BCD197499DF8300048700C -:1044F0000020B6E72DE9F0479CB08A464FF000084F -:1045000092A104468DF83480D1E90001CDE919016A -:1045100020460FF0A5FE90B92078012803D16068ED -:104520000FF09EFE58B9884D4FF00109287C40B12C -:10453000687C022805D160680FF0DFFE08B110200A -:104540001AE62878012801D0082015E607200CF08B -:1045500037FA18B9207878B101280DD0FEF780FD20 -:1045600060B1608943F6E172A0F1200191422178A7 -:104570000CD3012904D0B6E01220FDE51320FBE5A1 -:1045800000287DD1A18900297AD109E0012907D02D -:104590006978C90704D0A189002971D0B4296FD8DE -:1045A000217831B1012908D0022904D0032967D12B -:1045B0000AE0002609E0022607E008B9A08908B150 -:1045C000042609E0012607E00326287C50B1687C18 -:1045D000022807D1606828B10DA96068FEF7C6FE01 -:1045E0000028ADD1207A30B1012806D0022806D0AB -:1045F000032878D105E0002704E0012702E0022724 -:1046000000E003270EB1022E0ED16FB16879B8B366 -:104610006878800702D043F20120ADE5022E03D175 -:10462000022F60D0032F5ED0207808B1012806D178 -:10463000504600F06BFB002887D185F802A01820B7 -:104640008DF838006089ADF83A006089ADF83C001B -:104650008DF83E600DF13F00FEF7ABFE00B1FFDFCD -:104660009DF834008DF840002078012806D0287C81 -:1046700068B1687C02280AD1606840B1606800E0D7 -:1046800031E050F8011FCDF84110808802E040462B -:10469000CDF84180ADF845008DF84870A07BC0F39F -:1046A0004002014662F35F01C0F3800041EA8000EE -:1046B00019A9085C8DF84700A8B169460EA809F051 -:1046C000C9FC0028A9D11B208DF838008DF83A903C -:1046D00069460EA809F0BEFC00289ED19DF8010095 -:1046E0001B281CD101E0072046E5052E0CD2DFE88F -:1046F00006F0030308080300A87800F017FB032066 -:1047000000E0022000F0EEFA012E0AD0A08940B1AC -:1047100000228300114610460FF0ACFC08B10320C4 -:104720002AE5002028E52DE9FC4107460D46032631 -:1047300008460FF0E2FD00286CD13846FEF7DAFC9F -:1047400004000CD0207805E0CC0100200706050409 -:1047500003020100222805D20820BDE8FC8143F2B3 -:104760000200FAE7A07F00F0030C2DB12946604655 -:10477000FEF74DFD0600F0D1BCF1010F05D0BCF1F4 -:10478000020F18D0FFDF3046E7E7A07D2946022858 -:1047900001D011B107E01120DFE76846FCF7F2FE17 -:1047A0000028DAD16946384606F075FD0600EAD1E0 -:1047B0000120A075E7E7A07D032803D1FE48807C97 -:1047C000C00701D035B30EE025B1A07F40071FD44C -:1047D000002100E00121384606F07DFD0600D2D11F -:1047E000A075002DCFD02A4621463846FEF759FE47 -:1047F00006461128C7D1A07F4107C4D4296844F8D0 -:104800000E1F6968616040F0040020740026BAE75A -:104810001126B8E71020A0E770B50C460546FEF754 -:1048200069FC010005D022462846BDE87040FEF72D -:1048300016BE43F2020070BD00B597B043218DF85B -:1048400000108DF802000BA9684609F003FC17B0B0 -:1048500000BD0123FEF751BC00231A461946FEF79E -:104860004CBC30B597B004460FF0FAFC10B11020E4 -:1048700017B030BD204600F095FA0028F8D1CE4D93 -:10488000E878112801D00820F2E7FEF7E9FBE0B351 -:104890002078800701D56879C0B31D208DF800000D -:1048A0002078022200F001008DF802006088ADF847 -:1048B0000400A088ADF806002078C0F3400102EAA9 -:1048C000500001438DF8091002A8FEF772FD00B1F7 -:1048D000FFDF0BA9684609F0BDFB0028C8D11E20E8 -:1048E0008DF8000001208DF8020000208DF80300F3 -:1048F0000BA9684609F0AEFB0028B9D1E08800F0AA -:104900006DFA0400B4D1122001E004E005E0FEF7E6 -:104910008DFB2046ACE71320AAE70720A8E72DE986 -:10492000F043A54E074697B0F078994615460C46D9 -:10493000122803D1FFF7CFF9002816D120460FF037 -:104940008FFCE8BB28460FF08BFCC8BB204600F06C -:1049500029FA002809D129460220FEF758FC002830 -:1049600003D1F078112803D0082017B0BDE8F083F8 -:1049700006200CF025F850B12078800701D5707919 -:1049800038B1FEF76DFB022805D21320EDE71220A7 -:10499000EBE70720E9E721208DF800006088ADF8FB -:1049A0000200A088ADF8040020784FF00008C0F3A2 -:1049B00040008DF80600207880071FD4384600E0BC -:1049C00002E00FF04DFC08B11020CEE73878400827 -:1049D00008D0012809D0022807D0032805D043F2C7 -:1049E0000220C2E78DF8078002E001208DF8070061 -:1049F00057F8010F0290B888ADF80C000DF10E00C9 -:104A0000FEF7D7FC08B10320AFE72888ADF8100007 -:104A10006888ADF81200A888ADF81400E888ADF8F1 -:104A20001600ADF81880ADF81A80484600F06EF90F -:104A300000289AD186F804900BA9684609F00AFB71 -:104A4000002892D1307900F071F9E08800F0C6F9C1 -:104A500004008AD11320FEF7E9FA204685E730B535 -:104A6000054697B00C4608460FF020FC08B1102010 -:104A7000FEE62846FEF73EFB38B10178222902D334 -:104A8000807F800604D40820F2E643F20200EFE6BD -:104A900013208DF80000ADF802500BA9684609F00C -:104AA000D9FA0028E4D19DF932107F2901D0217074 -:104AB000DEE60520DCE630B5054697B00C46084634 -:104AC0000FF0CEFB08B11020D2E62846FEF712FB0D -:104AD00020B10078222804D20820C9E643F202005F -:104AE000C6E63548807C400701D51120C0E6207815 -:104AF000800802D16078800801D00720B8E65620EF -:104B00008DF80000ADF8025020788DF80400607830 -:104B10008DF805000BA9684609F09CFAA8E62DE976 -:104B2000F041B0B014460D460646FEF7E3FA070022 -:104B300006D03878222806D2082030B0BDE8F081AF -:104B400043F20200F9E728460FF0D7FB30B94FF0E7 -:104B500000084CB120460FF0C7FB08B11020ECE76D -:104B6000C4F80080A4F804801348807C800701D535 -:104B70001120E2E797F8220004F0ACF98088011DCB -:104B8000FB2901D2001D00E0FB20C0B26A46294685 -:104B900000F0E3F82C22094904A81CF0F2FFBDF84C -:104BA0000200ADF81400BDF80600ADF81600ADF82F -:104BB0001260BDF8000003E0CC010020A01F02003D -:104BC000ADF81800BDF80400ADF81A001AA904A841 -:104BD00009F040FA00B1FFDFBDF86C00ADF8080045 -:104BE000BDF86E00ADF80A00BDF87000BDF8721097 -:104BF000BDF800200844ADF80C0007201B2A9CD308 -:104C0000BDF802101B2998D3FB2A96D8FB2994D80B -:104C100006278A4210D10121104600F05AF8BDF84B -:104C20000410884208D1BDF80200012100F051F8BB -:104C3000BDF80610884201D038467EE7BDF808006E -:104C400028B9BDF80A1011B9BDF80C1029B35DB12F -:104C5000298849B1698839B124B102982060BDF82A -:104C60000C00A080132068E7BDF80010BDF80A20F2 -:104C7000081A80B2ADF80000BDF80210891AADF82C -:104C80000210012100F025F8ADF80400BDF8020083 -:104C9000012100F01EF8ADF806002C226B490FA888 -:104CA0001CF06FFFADF83E60BDF80200ADF84000AB -:104CB000BDF80600ADF84200BDF80000ADF84400B4 -:104CC000BDF80400ADF8460025A90FA809F0C2F907 -:104CD00033E7022903D0C000703080B270478000F3 -:104CE0003C30FAE730B55A4D040008D0012C04D00E -:104CF000022C06D0032C04D0FFDF2C7030BDFFDF68 -:104D0000FBE728780128F8D0FFDFF6E710B5044666 -:104D100004F0E0F830B1407830B1204604F0EEFB0A -:104D2000002010BD072010BD122010BD10B504F0EA -:104D3000D1F8040000D1FFDF607800B9FFDF6078B0 -:104D4000401E607010BD10B504F0C4F8040000D11E -:104D5000FFDF6078401C607010BD10B5144631B1A3 -:104D60000A68226049686160218839B107E02080C3 -:104D700060800121FFF7ADFFA0800DE020806188F9 -:104D800001B96080A08820B920880121FFF7A1FF28 -:104D9000A080E088002804D160880121FFF799FFF6 -:104DA000E08010BD418843F6FD730A1F9A4209D284 -:104DB0008088042806D3B0F5804F03D8884201D8F4 -:104DC00000207047072070470278520804D0012A5B -:104DD00002D043F202207047FEF7C8BA10B548B1BE -:104DE00083000022114606200FF044F9062801D066 -:104DF000032010BD002010BD70B50C0006460DD07C -:104E0000FEF778F9050000D1FFDFA6802889208110 -:104E1000288960816889A081A889E08170BD10B56A -:104E200000231A4603E0845C2343521CD2B28A4218 -:104E3000F9D30BB1002010BD012010BD00B5012831 -:104E400003D0022801D0FFDF002000BDF81F0200C0 -:104E5000CC01002010B504460FF002FA08B1102072 -:104E600010BD2078C0F30210042807D86078072806 -:104E700004D3A178102901D8814201D2072010BDA6 -:104E8000E078410706D421794A0703D4000701D40A -:104E9000080701D5062010BD002010BD10B51378FD -:104EA0005C08C37F64F30003C3771478A40864F339 -:104EB0004103C3771078C309487863F34100487011 -:104EC00013781C090B7864F347130B701378DB0815 -:104ED00063F3000048705078487110BD10B5C47875 -:104EE0000B7864F300030B70C478640864F3410327 -:104EF0000B70C478A40864F382030B70C478E408D0 -:104F000064F3C3030B700379117863F3000111702C -:104F100003795B0863F34101117003799B0863F324 -:104F2000820111700079C00860F3C301117010BDD7 -:104F300070B514460D46064604F037FA80B1017884 -:104F4000182221F00F01891C21F0F001A03100F896 -:104F5000081B21461CF015FEBDE8704004F028BA7D -:104F600029463046BDE870401322FEF778BA10B5E6 -:104F7000FE4C94F8300000280CD104F120014FF6CB -:104F8000FF72A1F110000DF04DF900B1FFDF01201B -:104F900084F8300010BD2DE9F047064608A8894680 -:104FA00090E830041F469046142128461CF03DFE30 -:104FB0000021CAF80010B8F1000F03D0B9F1000FBA -:104FC00003D114E03878C00711D020680FF06EF9D3 -:104FD000F0BBB8F1000F07D12068123028602068BC -:104FE000143068602068A8602168CAF8001038781A -:104FF000800728D560680FF077F948BBB9F1000F3A -:105000002DD0FFF720F80168C6F8C8118188A6F8EE -:10501000CC11807986F8CE01FFF7A9FFDFF84C8329 -:1050200008F12008C5F80C80626862B196F8C801E2 -:1050300006F2C91140081032FEF7E7F91022414686 -:1050400060681CF059FD3878400712D5A06800E070 -:1050500002E00FF02BF950B11020BDE8F087606836 -:105060000028F9D0E8606068C6F8C401EBE7A068E2 -:1050700028610020F1E730B5054608780C4620F09D -:105080000F00401C20F0F0011031217000206070F2 -:1050900095F8230030B104280FD0052811D0062838 -:1050A00014D0FFDF20780121B1EB101F04D295F856 -:1050B000200000F01F00607030BD21F0F0002030B3 -:1050C00002E021F0F00030302070EBE721F0F0003A -:1050D0004030F9E710B510B190F8BD4044B1A34895 -:1050E00090F83540002064B108601060186010BD71 -:1050F00000F1BC040C6000F1E40100F58670116061 -:10510000F4E79A4C34340C60EFE700B58BB007231A -:10511000CDE902128DF801300191944900236431E8 -:105120000591099301468DF8103068460DF052F84C -:10513000002800D0FFDF0BB000BD70B590B0154661 -:105140000C4602220646ADF80820092103AB04F004 -:105150006EFF0490002812D00C208DF8010004206E -:105160008DF8040004F59A74099605948DF818508A -:105170000AA968460DF02EF800B1FFDF012010B03B -:1051800070BD30B597B00C462C251A998DF800509B -:10519000ADF80200B3B11868019058680290ADF8FC -:1051A0000C2010220DF10E001CF0A6FC0BA9684685 -:1051B00008F050FF002803D1A17F41F01001A17732 -:1051C00017B030BD00200190E8E72DE9F047064612 -:1051D000808A8CB080B20D468246FDF78BFF044674 -:1051E000624F3078283FDFF884914FF00008112893 -:1051F00073D2DFE800F072F1350936777E98A7F2B6 -:10520000EFEEEDEC5BECEC00A07F00F0030001287A -:1052100006D0002150460BF021FC050003D101E02F -:105220000121F7E7FFDF99F85C10C90702D0D9F830 -:1052300060000BE0032105F121000EF0E2FCD5F83F -:1052400021004B49B0FBF1F201FB1200C5F821002F -:105250007068A867B068E8672078252800D0FFDF6D -:10526000ECE0A07F00F00300012806D000215046AA -:105270000BF0F4FB060003D101E00121F7E7FFDFAB -:105280003078810702D52178252904D040F001002B -:1052900030700CB0E1E60220287096F820002871EA -:1052A00006F121003136C5E90206F2E7A07F00F0E1 -:1052B0000300012806D0002150460BF0CFFB04006C -:1052C00003D101E00121F7E7FFDF2078C10605D512 -:1052D0001320287041346C60DBE7BEE140F0080029 -:1052E0002070D6E72148082128380EF08AFC0320D8 -:1052F00016E02A208DF8000010220DF102007168DE -:105300001CF0FAFB10220DF11200B1681CF0F4FB46 -:10531000164968462C3908F09DFE00B1FFDF0420D5 -:1053200028706F60B5E7E07FC00600D5FFDF307CF6 -:10533000B28800F001030CB05046BDE8F0470921E7 -:1053400005F00BBD04B9FFDF716821B1102204F133 -:1053500024001CF0D1FB28212046FDF703FFA07F8D -:1053600000F00300022814D104E00000180200201D -:1053700040420F0004F12400002300901A46214609 -:105380005046FFF7FEFE112807D029212046FDF7E1 -:10539000E9FE307A84F820007BE7A07F000700D583 -:1053A000FFDF14F81E0F40F008002070A4F81680EC -:1053B000C4F81880C4F81C806178084661F3820044 -:1053C000410861F3C3006070307AE07061E727E064 -:1053D0003FE17AE051E000E037E0A07F00F0030019 -:1053E000012806D0002150460BF038FB040003D101 -:1053F00001E00121F7E7FFDF022104F189000EF04F -:1054000000FC1020287004F5E4706860B4F889107E -:10541000298204F18000FD496861C5E9029138E7FD -:10542000A07F00F00300012805D0002150460BF0BA -:1054300015FB18B901E00121F8E7FFDF0CB0324697 -:1054400021465046BDE8F04772E504B9FFDF2078F9 -:105450002128A1D93079012803D1E07F40F0100044 -:10546000E077324621465046FFF762FD0CB02046F9 -:10547000BDE8F0472321FDF775BE3279AA8005F11A -:1054800008030921504604F0D2FDE86010B1112054 -:105490002870FEE6A07F00F00300012806D000215E -:1054A00050460BF0DBFA040003D101E00121F7E7DD -:1054B000FFDF04F1660102231022081F0BF03BF905 -:1054C00080F8008031794170E3E6A07F00F00300AE -:1054D000012806D0002150460BF0C0FA050003D188 -:1054E00001E00121F7E7FFDF95F8880000F00300F5 -:1054F000012879D1A07F00F00307E07FC0F34006C8 -:1055000016B1012F04D02BE095F8A400C0072AD0D3 -:10551000D5F8C00118B395F88720017C62F38701A4 -:105520000174E27FD5F8C00162F341010174D5F83E -:10553000C00166F300010174AEB1D5F8C0011022BC -:1055400004F124018C351CF0D7FA287E40F00100CC -:105550002876287820F0010005F88C0900E016B1C3 -:10556000022F04D02CE095F88C00C00726D0D5F887 -:10557000BC1119B395F88720087C62F38700087482 -:10558000E27FD5F8BC1162F341000874D5F8BC1174 -:1055900066F3000008748EB1D5F8BC01102204F146 -:1055A00024018C351CF0A8FA287840F0010005F899 -:1055B000180B287820F0010005F8A409022F44D028 -:1055C0005FF0000000EB400005EBC00090F88C009D -:1055D000800709D595F88000D5F8C421400805F169 -:1055E00081011032FDF711FF05208DF8000095F8BC -:1055F00088006A4600F003008DF8010095F88C10D1 -:105600008DF8021095F8A4008DF80300214650464D -:1056100001F046FA2078252805D0212807D0FFDFA1 -:105620002078222803D922212046FDF79BFDA07F68 -:1056300000F0030001280AD0002150460BF020FAA8 -:1056400000283FF432AEFFDF23E60120BAE7012154 -:10565000F3E7716881F801801BE6FFDF19E670B59A -:105660006A4C0025103C04F85C5F65600CF07FFD1F -:105670006649A1F1100003F02AFE04F82C5C062014 -:10568000607262487C3020615030A0611030E0616F -:1056900070BD70B50D46FDF72DFD040000D1FFDF94 -:1056A0004FF4E87128461CF0C0FA5848543068613D -:1056B00004F124002861A07F00F00300012809D034 -:1056C0005FF0020105F59A700CF052FD002800D041 -:1056D000FFDF70BD0121F5E70A46014602F59A7029 -:1056E0000CF066BD70B5054640689CB0017809298C -:1056F00006D00C2937D00D2933D0FFDF1CB070BD88 -:1057000046883046FDF7F6FC040000D1FFDF207824 -:105710002128F3D0282821D1686802210C3001F01B -:10572000B4F9D8B168680821001D01F0AEF9A8B13C -:105730002D208DF80000ADF80260102204F1240144 -:1057400001A81CF0D9F90BA9684608F083FC00B148 -:10575000FFDF29212046FDF705FDCFE703F028FEF6 -:10576000CCE701218171686886883046FDF7C2FC6C -:10577000040000D1FFDFA07F00F00301022902D165 -:1057800020F01000A077207821280AD0686881795D -:1057900009B1807880B1A07F00F0030002285ED0BC -:1057A000FFDFA07F00F003000228A7D1FDF7B3FEC2 -:1057B0000028A3D0FFDFA1E703F0FAFDE07FC107D7 -:1057C00028D0800705D594F8200000F01F0010288D -:1057D0001ED0052084F82300207829281CD02428F6 -:1057E000DFD1314605200EF0EFFC22212046FDF7E7 -:1057F000B9FCA07F00F0030001282ED00021304624 -:105800000BF03EF90028CCD0FFDFCAE728020020C9 -:105810000620DFE70420DDE7A07F00F00300012879 -:1058200006D0002130460BF019F9050003D101E044 -:105830000121F7E7FFDF25212046FDF793FC0F202C -:105840008DF8580016A905F59A700CF0A8FC0228EE -:10585000A7D00028A5D0FFDFA3E70121CFE703F001 -:10586000A7FD9EE72DE9F0438BB099461546884683 -:105870000646FDF73FFC04004FD0207822284CD389 -:1058800023284AD0E07FC00647D4A07F00F0030061 -:10589000012806D0002130460BF0E0F8070002D0C6 -:1058A0000CE00121F7E7A07F00F00300012805D1FB -:1058B0000121002230460BF0C8F8074601AB02AACE -:1058C00003A93846FFF706FC039800B9FFDF4FB184 -:1058D000039807F59A7787612078222806D0242834 -:1058E00004D007E003990020886103E025212046C9 -:1058F000FDF738FC03980B21417046628580C0E9B2 -:105900000289029901610199416104A90CF062FCCC -:10591000022802D0002800D0FFDF0BB0BDE8F083E2 -:1059200070B586B00546FDF7E5FB017822291CD944 -:10593000807F00F00300012806D0002128460BF0EC -:105940008DF8040030D101E00121F7E7FFDF2BE003 -:10595000B4F8620004F1660630440178427831B14F -:1059600021462846FFF7E9FBB8B906B070BDADF88F -:1059700004200921284602AB04F059FB03900028BB -:10598000F3D011208DF80000694604F59A700CF0F0 -:1059900006FC022801D000B1FFDF022310223146AD -:1059A00004F162000AF0FDFEB4F864000028CFD1D3 -:1059B000DBE710B586B00446FDF79CFB0178222991 -:1059C00019D9807F00F00300012806D0002120466D -:1059D0000BF044F8040003D101E00121F7E7FFDFF9 -:1059E00012208DF80000694604F59A700CF0D7FB80 -:1059F000002800D0FFDF06B010BD2DE9F05F05469E -:105A00000C4600270078904601093E46BA4604F14C -:105A1000080B02297ED0072902D00A2909D142E0C9 -:105A200068680178092905D00C292CD00D292AD0C5 -:105A3000FFDFB2E114271C26002C6CD04088A08028 -:105A4000FDF758FB5FEA000900D1FFDF99F8170066 -:105A50005A46400809F11801FDF7D7FC68688089AB -:105A6000208269684868C4F812008868C4F8160083 -:105A7000A07E20F0060040F00100A07699F81E00FC -:105A800040F040014DE01A270A26002CD5D080882E -:105A9000A080FDF72FFB050000D1FFDF5946284607 -:105AA000FFF7E9FA79E10CB1A88BA080287A0D28DC -:105AB0007ED006DC01287CD0022808D0032804D13F -:105AC00035E00F2876D0102875D0FFDF65E11E275E -:105AD0000926002CB1D0A088FDF70CFB5FEA000975 -:105AE00000D1FFDF287B00F003000128207A1BD0C3 -:105AF00020F001002072297B890861F341002072A7 -:105B0000297BC90861F382002072297B090961F3AE -:105B1000C30001E036E1E9E0207299F81E0040F090 -:105B2000800189F81E1038E140F00100E2E71327F8 -:105B30000D26002CAAD0A088FDF7DCFA8146807FD4 -:105B400000F00300012806D00021A0880AF086FF9B -:105B5000050003D101E00121F7E7FFDF99F81E00FE -:105B600000F00302012A59D0E86F817801F00301A7 -:105B70000129217A54D021F00101217283789B08F8 -:105B800063F3410121728378DB0863F382012172A0 -:105B900083781B0963F3C3012172037863F3061151 -:105BA0002172437863F3C711217284F809A003E0DE -:105BB0005EE0A4E08BE09CE0C178A172012A32D0C3 -:105BC0004279E17A62F30001E1724279520862F3AC -:105BD0004101E1724279920862F38201E1724279F5 -:105BE000D20862F3C301E1720279217B62F3000102 -:105BF00021730279520862F34101217302799208FC -:105C000062F3820121730079C00860F3C30121733C -:105C100099F80000232859D9262168E0A86FA4E745 -:105C200041F00101A9E70279E17A62F30001E17232 -:105C30000279520862F34101E1720279920862F33B -:105C40008201E1720279D20862F3C301E172427902 -:105C5000217B62F3000121734279520862F3410112 -:105C600021734279920862F3820121734079CBE774 -:105C700018271026D4B3A088FDF73CFA8346807F0E -:105C800000F00300012807D00021A0880AF0E6FEFA -:105C90005FEA000903D101E00121F6E7FFDFE868D0 -:105CA000A06099F8000040F0040189F8001099F80C -:105CB0000100800708D5012020739BF800002328ED -:105CC0006BD9272158464FE084F80CA065E01527D2 -:105CD0000F265CB1A088FDF70DFA814606225946D1 -:105CE000E86808F01FFA0120A0739BE03FE04846F7 -:105CF0003AE016270926D4B3287B20724DE0287B92 -:105D000019270E269CB3C4F808A0A4F80CA00128FB -:105D100007D0022805D0032805D0042803D0FFDFD0 -:105D20000DE0207207E0697B042801F00F0141F0CB -:105D3000800121721CD0607A20F003006072A0887C -:105D4000FDF7D8F905460078212826D0232800D071 -:105D5000FFDFA87F00F00300012811D00021A088F8 -:105D60000AF08EFE22212846FDF7FCF915E004E03A -:105D7000607A20F00300401CE0E7A8F8006011E022 -:105D80000121ECE70CB16888A080287A03282BD089 -:105D900004280AD005284BD0FFDFA8F800600CB11A -:105DA000278066800020BDE8F09F15270F26002C75 -:105DB000E3D0A088FDF79EF9807F00F00300012862 -:105DC00006D00021A0880AF049FE050003D101E0B9 -:105DD0000121F7E7FFDFD5F821000622594608F038 -:105DE000A1F984F80EA0D8E717270926002CC4D003 -:105DF000A088FDF77FF98146807F00F0030001282D -:105E000006D00021A0880AF029FE050003D101E098 -:105E10000121F7E7FFDF6878800701D5022000E065 -:105E20000120207299F800002328B6D927215EE7C7 -:105E300019270E26002CA0D0A088FDF75BF95FEA99 -:105E4000000900D1FFDFC4F808A0A4F80CA084F872 -:105E500008A0A07A40F00300A07299F81F1061F327 -:105E60008200A07299F81F10C1F34002114205D0C0 -:105E700099F8201001F01F0110292CD020F0080003 -:105E8000A07299F81F004108607A61F3C300607244 -:105E9000697A01F003010129A5D140F00400607284 -:105EA00099F81E00E97A00F00300012816D0607B03 -:105EB00061F300006073AA7A217B62F30001217311 -:105EC000EA7A520862F341006073A87A400860F3EE -:105ED0004101217361E740F00800D1E7207B61F3C5 -:105EE00000002073AA7A617B62F300016173EA7A91 -:105EF000520862F341002073A87A400860F3410120 -:105F000061734AE710B5FE4C30B10146102204F12E -:105F100020001BF0F1FD012084F8300010BD10B509 -:105F20000446FFF724F8F64920461022BDE8104049 -:105F300020311BF0E1BD70B5F14D06004FF00004BB -:105F400012D00EF08DF908B110240BE00621304676 -:105F500008F0CFF8411C04D02866012085F85C00C9 -:105F600000E00724204670BD0020F7E7007810F01D -:105F70000F0204D0012A05D0022A0CD110E000093A -:105F800009D10AE00009012807D0022805D003281A -:105F900003D0042801D00720704708700020704704 -:105FA0000620704705282AD2DFE800F003070F1704 -:105FB0001F00087820F0FF001EE0087820F00F0096 -:105FC000401C20F0F000103016E0087820F00F00A0 -:105FD000401C20F0F00020300EE0087820F00F0088 -:105FE000401C20F0F000303006E0087820F00F0070 -:105FF000401C20F0F000403008700020704707205F -:1060000070472DE9F041804688B00D4600270846CC -:106010000EF073F9A8B94046FDF76CF8040003D000 -:106020002078222815D104E043F2020008B0BDE830 -:10603000F08145B9A07F010603D500F003000228D6 -:1060400001D01020F2E7A07FC10601D4010702D5DC -:106050000DB10820EAE7E17FC90601D50D20E5E78B -:1060600000F00300022805D125B12846FEF7F2FE14 -:106070000700DBD1A07F00F00300012806D000213B -:1060800040460AF0EBFC060002D00DE00121F7E7E4 -:10609000A07F00F0030001280CD000210022404620 -:1060A0000AF0D3FC060007D0A07F00F0030002280E -:1060B00004D009E00121F1E70420B7E725B12A4621 -:1060C00031462046FEF7EAFE07AB1A4669463046DF -:1060D000FFF700F8009800B9FFDF00990C20487026 -:1060E00006F59A70C1F82480486100200881A07FDD -:1060F00000F00300012828D0EDB302200871301D04 -:1061000088613078400908777078C0F3400048779C -:10611000287800F00102887F62F301008877E27F2F -:1061200062F382008877E27F520862F3C3008877C7 -:10613000727862F304108877A878C87701F1210299 -:1061400028462031FEF7CAFE22E001200871287897 -:1061500000F00102087E62F3010008762A785208F6 -:1061600062F3820008762A78920862F3C300087608 -:106170002A78D20800E007E062F3041008762421B0 -:106180002046FCF7EFFF0BE003200871052008769E -:1061900025212046FCF7E6FFA07F20F08000A077B5 -:1061A00001A900980CF016F8022801D000B1FFDF19 -:1061B00038463BE72DE9FF4F524A0D4699B09A46C3 -:1061C00007CA14AB002783E807001998FCF792FF71 -:1061D000060006D03078262806D008201DB0BDE87D -:1061E000F08F43F20200F9E7B07F00F00309B9F144 -:1061F000010F03D0B9F1020F07D008E03DB91B9899 -:10620000FEF728FE0028E9D101E01B9880BBB07F93 -:1062100000F00300012806D0002119980AF01EFCA6 -:10622000040003D101E00121F7E7FFDF852D28D02D -:1062300007DCF5B1812D1ED0822D1ED0832D08D113 -:106240001DE0862D1FD0882D1FD0892D1FD08A2DAF -:106250001FD00F2020710F281DD003F0A6F8E0B149 -:1062600001208DF83400201D0E902079B8B160E136 -:1062700011E00020EEE70120ECE70220EAE703202E -:10628000E8E70520E6E70620E4E70820E2E7092042 -:10629000E0E70A20DEE70720A0E711209EE7B9F13A -:1062A000010F17D0D4E91E50804602200190012032 -:1062B0000090A87898F80210C0F3C000C1F3C001A4 -:1062C00008405FEA000B63D050460DF0C9FF00287C -:1062D00072D133E0D4E91E850120019002200090A4 -:1062E000214630461B9AFEF7D9FD1B98007800F036 -:1062F0000101A87861F30100A870F17F04E00000BB -:10630000180200202420020061F38200A870F17FAF -:10631000490861F3C300A870617861F30410A870A4 -:106320002078400928706078C0F3400068701B989E -:106330008078E870002068712871BAE7DAF80C00FC -:106340000DF08EFFC0BBDAF81C000DF089FF98BB82 -:10635000DAF80C00A060DAF81C00E06098F80100A0 -:10636000617800F0010041EA4000607098F8021086 -:10637000C0B2C1F30011891E08406070002084F88B -:106380002000009906F1170002290BD001210AE034 -:1063900098F80110607801F00101FD2242EA410104 -:1063A0000840E2E7002104EB810188610199701C3B -:1063B000022902D0012101E028E0002104EB810143 -:1063C0008861A87800F00300012849D198F80200FC -:1063D00000F00300012843D1B9F1010F04D12A1DB7 -:1063E000691D1B98FEF77AFD287998F8041008407B -:1063F0008DF82C00697998F8052011408DF830103F -:1064000008432DD050460DF02BFF08B11020E5E6D3 -:106410000AF1100004F5DE7104F190020490B9F164 -:10642000020F3CD00090CDE9012100210BAB5A4670 -:106430002046FEF7B0FD0028E9D104F5E07104F133 -:10644000A802B9F1010F30D004980090CDE90121E4 -:1064500000210CAB5A462046FEF79DFD0028D6D100 -:106460006078800740D4A87898F80210C0F38000C4 -:10647000C1F38001084337D0297898F8000014AAA6 -:10648000B9F1010F17D032F810204B00DA4012F0AA -:10649000030718D0012F1ED0022F12D11DE0CDF816 -:1064A00000A0CDE901210121C0E7CDF800A0CDE990 -:1064B00001210121CDE732F811204300DA4002F03A -:1064C0000307032F07D0BBF1000F0DD0012906D021 -:1064D000042904D008E00227F5E70127F3E70128A3 -:1064E00001D0042800D10427F07F40F001006BF3B5 -:1064F0004100F077607881074FF003000CD5A07160 -:10650000BBF1000F15D100BF8DF85C0017AA314612 -:10651000199800F0C5FA0CE00221022F18D0012FC3 -:1065200018D0042F22D00020A071F07F20F00100AD -:10653000F07725213046FCF715FE0DA904F59A7079 -:106540000BF02DFE10B1022800D0FFDF002045E641 -:10655000A171D9E7A1710D2104F124001BF065FBA5 -:10656000207840F0020020700420CDE70120A071C7 -:10657000DFE72DE9F04387B09046894604460025C1 -:10658000FCF7B8FD060006D03078272806D0082092 -:1065900007B0BDE8F08343F20200F9E7B07F00F0F6 -:1065A0000300012806D0002120460AF057FA040013 -:1065B00003D101E00121F7E7FFDFA7795FEA0900D6 -:1065C00005D0012821D0B9F1020F26D110E0B8F191 -:1065D000000F22D1012F05D0022F05D0032F05D0A7 -:1065E000FFDF2DE00C252BE0012529E0022527E027 -:1065F00040460DF035FEB0B9032F0ED110224146B2 -:1066000004F121001BF078FA1AE0012F02D0022FCA -:1066100003D104E0B8F1000F12D00720B8E74046DC -:106620000DF01EFE08B11020B2E7102104F1210088 -:106630001BF0D9FA0621404607F05BFDC4F82100A3 -:106640002078252140F0020020703046FCF78AFDBA -:106650002078C10714D020F00100207002208DF8AE -:10666000000004F1210002908DF80450694604F501 -:106670009A700BF094FD022804D018B1FFDF01E0FE -:1066800084F82050002083E730B587B00D460446DB -:10669000FCF730FD88B1807F00F0030001280FD0A7 -:1066A000002120460AF0DAF904000ED028460DF049 -:1066B000D7FD38B1102007B030BD43F20200FAE731 -:1066C0000121EEE72078400701D40820F3E72946AE -:1066D00004F14100202205461BF00EFA207840F01C -:1066E0001000207001070FD520F008002070132043 -:1066F0008DF80000694604F59A7001950BF04FFD86 -:10670000022801D000B1FFDF0020D4E770B50D46AC -:106710000646FCF7EFFC18B1017827291FD102E0EB -:1067200043F2020070BD807F00F00300012806D014 -:10673000002130460AF092F9040003D101E0012162 -:10674000F7E7FFDFA079022809D16078C00706D0FB -:106750002A4621463046FEF7F0FC10B10FE0082033 -:1067600070BDB4F864000E280BD204F16601022358 -:106770001022081F09F0DFFF012101704570002081 -:1067800070BD112070BD70B5064686B014460D462A -:1067900008460DF065FD18B920460DF087FD10B1D3 -:1067A000102006B070BDA6F57F40FF380ED03046F1 -:1067B000FCF7A0FC38B1417822464B08811C1846F2 -:1067C000FCF723FE07E043F20200EAE72046FDF76C -:1067D00099FC0028E5D11021E01D0DF012FAE21D10 -:1067E00029466846FEF791FC102204F11700019932 -:1067F0001BF082F90020D4E72DE9F041044686B071 -:1068000015468846002708460DF077FD18B928463A -:106810000DF073FD10B1102006B008E42046FCF71F -:1068200069FC060003D03078272818D102E043F233 -:106830000200F1E7B07F00F00300012806D000213C -:1068400020460AF00BF9040003D101E00121F7E72B -:10685000FFDF2078400702D56078800701D4082048 -:10686000DAE7B07F00F00300012818D0D4E91E0158 -:10687000407800B1B5B1487810B1B8F1000F11D02F -:10688000C5B1EA1D6846E168FEF73FFC102205F13C -:10689000170001991BF004F930B104270AE0D4E98C -:1068A0001E10E5E70720B7E71022E91D04F13100CB -:1068B0001BF022F9B8F1000F06D0102208F10701F1 -:1068C00004F121001BF018F92078252140F0020086 -:1068D00020703046FCF746FC2078C10716D020F027 -:1068E0000100207002208DF8000004F121000290C8 -:1068F000103003908DF80470694604F59A700BF01F -:106900004EFC022804D018B1FFDF01E084F82070AB -:10691000002081E7F8B515460E460746FCF7EAFB6E -:10692000040004D02078222804D00820F8BD43F2C7 -:106930000200F8BDA07F00F00300022802D043F25D -:106940000400F8BD30460DF08BFC18B928460DF058 -:1069500087FC08B11020F8BD00953288B31C214691 -:106960003846FEF70EFC112814D00028F3D1297CFC -:106970004A08E17F62F30001E1772A7C62F341017A -:10698000E177297C890884F82010A17F21F080011B -:10699000A177F8BDA17F0907FBD4D6F80200C4F89F -:1069A0003600D6F80600C4F83A003088A0861022D7 -:1069B000294604F124001BF09FF8287C4108E07F61 -:1069C00061F38200E077297C61F3C300E077287CE3 -:1069D000800884F82100A07F40F00800A077002004 -:1069E000D3E770B596B00D46064613B1072016B032 -:1069F00070BDFCF77FFB040007D02078222802D36B -:106A0000A07F400604D40820F1E743F20200EEE73D -:106A1000C5B12D208DF80000ADF802601022294686 -:106A200001A81BF069F8287C4108E07F61F30000B1 -:106A3000E077297C61F34100E077287C800884F8C6 -:106A4000200004E02E208DF80000ADF802600BA9B4 -:106A5000684607F0FFFAA17F21F04001A177C6E761 -:106A600070B50D46FCF746FB040005D028460DF036 -:106A70001DFC20B1102070BD43F2020070BD2946FC -:106A80002046FEF7F8FA002070BD04E010F8012B54 -:106A90000AB100207047491E89B2F7D20120704721 -:106AA00070B51546064602F080FC040000D1FFDFF9 -:106AB000207820F00F00801C20F0F00020302070A3 -:106AC00066802868A060BDE8704002F071BC0000DC -:106AD00018B18178012938D101E010207047018870 -:106AE00042F60112881A914231D018DC42F60102B6 -:106AF000A1EB020091422AD00CDC41B3B1F5C05F9A -:106B000025D06FF4C050081821D0A0F57060FF3870 -:106B10001BD11CE001281AD002280AD117E0B0F5D9 -:106B2000807F14D008DC012811D002280FD0032860 -:106B30000DD0FF2809D10AE0B0F5817F07D0A0F57C -:106B40008070033803D0012801D0002070470F2047 -:106B500070470B2826D008DC1BD2DFE800F01C2091 -:106B600025251A25292325271E0011281CD008DCDD -:106B70000C2817D00D281DD00F2815D0102808D1AB -:106B800010E0822809D0842810D0852810D08728CA -:106B900012D003207047002070470520704743F251 -:106BA00003007047072070470F207047042070478C -:106BB000062070470C20704743F20200704738B53A -:106BC0000C46050041D06946FFF7D0F9002819D1DD -:106BD0009DF80010607861F3020060706946681CDF -:106BE000FFF7C4F900280DD19DF80010607861F31B -:106BF000C5006070A978C1F34101012903D00229C1 -:106C000005D0072038BD217821F0200102E021784D -:106C100041F020012170410704D0A978C90861F32F -:106C200086106070607810F0380F07D0A9780909D5 -:106C300061F3C710607010F0380F02D16078400621 -:106C400003D5207840F040002070002038BD70B59A -:106C500004460020088015466068FFF7B0FF002852 -:106C600016D12089A189884211D860688078C00730 -:106C70000AD0B1F5007F0AD840F20120B1FBF0F252 -:106C800000FB1210288007E0B1F5FF7F01D90C202E -:106C900070BD01F201212980002070BD10B504787B -:106CA000137864F3000313700478640864F34103F9 -:106CB00013700478A40864F3820313700478E40862 -:106CC00064F3C30313700478240964F3041313708A -:106CD0000478640964F3451313700078800960F345 -:106CE0008613137031B10878C10701D1800701D52F -:106CF000012000E0002060F3C713137010BD42783C -:106D0000530702D002F0070306E012F0380F02D05A -:106D1000C2F3C20300E001234A7863F302024A701F -:106D2000407810F0380F02D0C0F3C20005E04307EE -:106D300002D000F0070000E0012060F3C5024A70B5 -:106D400070472DE9F04F95B00D00804615D0B8F191 -:106D5000000F16D0122128461AF045FF4FF6FF7B90 -:106D600005AA0121584606F0C0FF002426463746F2 -:106D70004FF420596FF4205A75E0102015B0BDE88B -:106D8000F08F0720FAE700BF9DF81E0001280AD106 -:106D9000BDF81C0048450BD010EB0A000AD00128B2 -:106DA0000CD002280CD0042C0ED0052C0FD10DE0F5 -:106DB000012400E00224BDF81A6008E0032406E084 -:106DC0000424BDF81A7002E0052400E00624BDF892 -:106DD0001A10414547D12C74BEB34FF0000810AAD9 -:106DE0004FF0070ACDE90282CDE900A80DF13C0978 -:106DF0001023CDF8109042463146584607F028F847 -:106E000008BBBDF83C002A46C0B210A90BF084FABA -:106E1000C8B9AE81CFB1CDE900A80DF1080C0AAE1A -:106E200040468CE84102132300223946584607F0B9 -:106E30000FF840B9BDF83C00F11CC01EC0B22A1DBD -:106E40000BF06AFA10B1032098E70AE0BDF82900B8 -:106E5000E881062C05D19DF81E00A872BDF81C0023 -:106E6000288100208AE705A806F04BFF00288BD078 -:106E7000FFF76FFE82E72DE9F0471C46DDE9097850 -:106E8000DDF8209015460E00824600D1FFDF0CB1E0 -:106E9000208818B1D5B11120BDE8F087022D01D0AE -:106EA000012100E0002106F1140005F003FEA8F81E -:106EB000000002463B462946504603F0B8F8C9F8A0 -:106EC000000008B9A41C3C600020E5E71320E3E7BC -:106ED000F0B41446DDE904528DB1002314B1022C44 -:106EE00009D101E0012306E00D7CEE0703D025F077 -:106EF000010501230D742146F0BC03F02EBF1A805A -:106F0000F0BC70472DE9FE4F91461A881C468A4610 -:106F10008046FAB102AB494603F089F8050019D062 -:106F20004046A61C278809F0B5FE324607262946AA -:106F30003B46009609F074FA20882346CDE90050BC -:106F40004A4651464046FFF7C3FF002020800120FB -:106F5000BDE8FE8F0020FBE72DE9F04786B09146A3 -:106F6000DDE90E460F46824603AA05A904A8109D36 -:106F70008DE807009846324621465046FFF77BFFD2 -:106F8000049909B1012200E000222A70002817D1DB -:106F9000F84A03AB1060059A009104F11400CDE9A2 -:106FA00001204A463946504606F048F990B1082873 -:106FB0000ED2DFE800F00407040D0D090B0B0020D2 -:106FC00006B069E71120FBE70720F9E70820F7E79B -:106FD0000320F5E7BDF80C100498CDE90001434605 -:106FE000324621465046FFF773FFE8E72DE9F043AC -:106FF00089B00D46DDE9108781461C4616461421EE -:1070000003A81AF012FE012002218DF810108DF84D -:107010000C008DF81170ADF8146064B1A278D2073D -:1070200009D08DF81600E088ADF81A00A088ADF8F8 -:107030001800A068079008A80095CDE90110424605 -:1070400003A948466B68FFF787FF09B0BDE8F083E6 -:10705000F0B58BB0002406460694079407270894E1 -:1070600005A80994019400970294CDE903400D46C8 -:1070700010232246304606F0EBFE78B90AA806A98E -:10708000019400970294CDE90310BDF8143000225A -:107090002946304606F0B2FC002801D0FFF759FD22 -:1070A0000BB0F0BD06F052BB2DE9FC410C4680460A -:1070B000002602F07AF9054620780D287ED2DFE816 -:1070C00000F0BC0713B325BD49496383AF959B000E -:1070D000A848006820B1417841F010014170ADE04E -:1070E000404602F092F9A9E00421404609F0B6FCBE -:1070F000070000D1FFDF07F11401404605F06EFCE8 -:10710000A5BB13214046FDF787FB97E004214046CD -:1071100009F0A4FC070000D1FFDFE088ADF8000013 -:107120000020B8819DF80000010704D5C00602D5F3 -:10713000A088B88105E09DF8010040067ED5A088B2 -:10714000F88105B9FFDF22462946404601F068FC78 -:10715000022673E0E188ADF800109DF801100906E1 -:107160000FD5072803D006280AD00AE024E004211E -:10717000404609F073FC060000D1FFDFA088F081D3 -:107180000226CDB9FFDF17E00421404609F066FC76 -:10719000070000D1FFDF07F1140006F00EFB90F0AE -:1071A000010F02D1E079000648D5387C022640F074 -:1071B0000200387405B9FFDF224600E03DE02946B1 -:1071C000404601F02DFC39E00421404609F046FC20 -:1071D000017C002D01F00206C1F340016171017CC8 -:1071E00021F002010174E7D1FFDFE5E7022601216A -:1071F000404602F045F921E00421404609F02EFC0A -:107200000546606800902089ADF8040001226946B7 -:10721000404602F056F9287C20F0020028740DE068 -:10722000002DC9D1FFDFC7E7022600214046FBF74A -:10723000CDF8002DC0D1FFDFBEE7FFDF3046BDE84F -:10724000FC813EB50C0009D001466B4601AA002026 -:1072500006F080FE20B1FFF77CFC3EBD10203EBD55 -:1072600000202080A0709DF8050002A900F0070012 -:10727000FEF798FE50B99DF8080020709DF80500B3 -:1072800002A9C0F3C200FEF78DFE08B103203EBD87 -:107290009DF8080060709DF80500C109A07861F3B1 -:1072A0000410A0709DF80510890961F3C300A07057 -:1072B0009DF80410890601D5022100E0012161F347 -:1072C00042009DF8001061F30000A07000203EBD58 -:1072D00070B5144606460D4651EA040005D075B156 -:1072E00008460DF001F878B901E0072070BD294685 -:1072F000304606F090FE10B1BDE8704029E454B16C -:1073000020460CF0F1FF08B1102070BD2146304638 -:10731000BDE8704095E7002070BD2DE9FC5F0C468C -:1073200090460546002701780822007A3E46B2EBD7 -:10733000111F7DD104F10A0100910A31821E4FF024 -:10734000020A04F1080B0191092A72D2DFE802F067 -:10735000EDE005F528287BAACE006888042109F015 -:107360007DFB060000D1FFDFB08928B15227072638 -:10737000C3E000001403002051271026002C7DD00C -:107380006888A0800120A071A88900220099FFF7D9 -:107390009FFF002873D1A8892081288AE081D1E04D -:1073A000B5F81290072824D1E87B000621D5512793 -:1073B00009F1140086B2002CE1D0A88900220099BE -:1073C000FFF786FF00285AD16888A08084F806A0BD -:1073D000A88920810120A073288A2082A4F8129015 -:1073E000A88A009068884B46A969019A01F0F5FACD -:1073F000A8E0502709F1120086B2002C3ED0A889DF -:1074000000225946FFF764FF002838D16888A08021 -:10741000A889E080287A072813D002202073288AC0 -:10742000E081E87BC0096073A4F81090A88A01E0AD -:1074300085E082E0009068884B4604F11202A96959 -:10744000D4E70120EAE7B5F81290512709F11400BA -:1074500086B2002C66D06888042109F0FFFA8346C2 -:107460006888A080A88900220099FFF731FF0028D2 -:107470006ED184F806A0A889208101E052E067E07F -:107480000420A073288A2082A4F81290A88A009071 -:1074900068884B46A969019A01F09FFAA989ABF85F -:1074A0000E104FE06888FBF725FE07466888042128 -:1074B00009F0D4FA064607B9FFDF06B9FFDF687B9B -:1074C000C00702D05127142601E0502712264CB3E2 -:1074D0006888A080502F06D084F806A0287B5946E3 -:1074E00001F08BFA2EE0287BA11DF9E7FE49A8895F -:1074F0004989814205D1542706269CB16888A0801D -:1075000020E053270BE06888A080A889E08019E07C -:107510006888042109F0A2FA00B9FFDF5527082680 -:10752000002CF0D1A8F8006011E056270726002CA7 -:10753000F8D06888A080002013E0FFDF02E0012877 -:1075400008D0FFDFA8F800600CB12780668000201B -:10755000BDE8FC9F57270726002CE3D06888A08051 -:10756000687AA071EEE7401D20F0030009B14143A5 -:10757000091D01EB4000704713B5DB4A0020107174 -:10758000009848B10024684609F06BF8002C02D13D -:10759000D64A009911601CBD01240020F4E770B5A3 -:1075A0000D46064686B014465C2128461AF03DFB7F -:1075B00004B9FFDFA0786874A2782188284601F01A -:1075C00046FA0020A881E881228805F1140130469E -:1075D00005F0E9F96A460121304606F086FB19E01C -:1075E0009DF80300000715D5BDF806103046FFF7DB -:1075F0002FFD9DF80300BDF8061040F010008DF837 -:107600000300BDF80300ADF81400FF233046059ACF -:1076100006F0CCFC684606F074FB0028E0D006B00B -:1076200070BD10B50C4601F1140005F0F3F90146E8 -:10763000627C2046BDE8104001F03EBA70B50546B8 -:10764000042109F00BFA040000D1FFDF04F114015A -:107650000C46284605F0C2F921462846BDE8704090 -:1076600005F0C3B970B58AB00C460646FBF742FD7B -:10767000050014D02878222827D30CB1A08890B117 -:1076800001208DF80C0003208DF8100000208DF8EB -:10769000110054B1A088ADF81800206807E043F24B -:1076A00002000AB070BD0920FBE7ADF81800059094 -:1076B0000421304609F0D2F9040000D1FFDF04F1C3 -:1076C000140005F0BEF9C00601D40820E9E701F076 -:1076D0006CFE60B108A802210094CDE9011095F874 -:1076E000232003A930466368FFF736FCD9E7112051 -:1076F000D7E72DE9F04FB2F802A0834689B01546CE -:1077000089465046FBF7F6FC07460421504609F02F -:10771000A5F90026044605964FF002080696ADF836 -:107720001C6007B9FFDF04B9FFDF4146504603F094 -:107730007CFE60B907AA06A905A88DE807004246A5 -:10774000214650466368FFF796FB00B1FFDF6648AD -:1077500007AB0660DDE9051204F11400CDF80090D6 -:10776000CDE90320CDE9013197F823205946504651 -:107770006B6805F0AFF906000AD0022E04D0032E84 -:1077800014D0042E00D0FFDF09B03046BDE8F08FE2 -:10779000BDF81C000028F7D00599CDE9001042463D -:1077A000214650466368FFF793FBEDE7687840F0A9 -:1077B00008006870E8E72DE9F04F9BB004464FF0F1 -:1077C00000084948ADF85480ADF83080ADF85080DD -:1077D000A0F80880ADF81480ADF81880ADF82080CE -:1077E000ADF81C80007916460D464746012808D0A2 -:1077F000022806D0032804D0042802D008201BB099 -:10780000C4E720460CF02CFDD0BB28460CF028FD28 -:10781000B0BB60680CF071FD90BB606848B16089D6 -:107820002189884202D8B1F5007F01D90C20E6E712 -:1078300080460BAA06A92846FFF709FA0028DED1E0 -:1078400068688078C0F34100022808D19DF81900CB -:1078500010F0380F03D028690CF046FD80B905A957 -:107860002069FFF7ACF90028C9D1206950B16078D0 -:1078700080079DF8150000F0380002D5C0B301E084 -:1078800011E0A8BB9DF8140080060ED59DF81500E8 -:1078900010F0380F03D060680CF026FD18B960684E -:1078A0000CF02BFD08B11020A9E707A96069FFF7CC -:1078B00086F90028A3D1606940B19DF81D0000F051 -:1078C000070101293FD110F0380F3CD008A9A06969 -:1078D000FFF775F9002892D19DF81C00800632D47C -:1078E0009DF82000800604E014030020140000200E -:1078F00029E028D4A06940B19DF8210000F00701DB -:10790000012920D110F0380F1DD0E06818B100789F -:10791000C8B11C2817D20EAA611C2046FFF7BEF979 -:107920000120B94660F30F27BA4607468DF84E008E -:1079300042F60300ADF84C000DF13B0217A9286890 -:107940000AF009FD08B1072059E79DF85C0016A967 -:10795000CDF80090C01CCDE9019100F0FF0B002391 -:107960000BF20122514613A806F002F9F0BBBDF854 -:1079700058000990FE482A8929690092CDE9011032 -:107980006B89BDF82C202868069906F0F1F80100F3 -:107990007ED120784FF0020AC10601D480062BD593 -:1079A000ADF80C90606950B907A906A8FFF7A7F9D0 -:1079B0009DF81D0020F00700401C8DF81D009DF86B -:1079C0001C008DF84E7040F0C8008DF81C0042F687 -:1079D0000210ADF84C000CA903AACDF800A0CDE927 -:1079E0000121002340F2032213A800E01EE00799C2 -:1079F00006F0BEF801004BD1DD484D4608385B4625 -:107A00000089ADF839000EA8CDE90290CDF80490B8 -:107A1000CDF810904FF007090022CDF80090BDF886 -:107A200058104FF6FF7005F0E9FF10B1FFF791F81D -:107A3000E5E69DF83800000625D52946012060F3CB -:107A40000F218DF84E704FF42450ADF84C00ADF876 -:107A5000105062789DF81000002362F300008DF84A -:107A600010006278CDF800A0520862F341008DF852 -:107A7000100004AACDE9012540F2032213A806F064 -:107A800077F8010004D1606888B32069A8B900E0E4 -:107A900086E005A906A8FFF732F96078800706D4CA -:107AA0009DF8150020F038008DF8150005E09DF8D0 -:107AB000140040F040008DF814008DF84E7042F62E -:107AC0000110ADF84C00208940F20121B0FBF1F229 -:107AD00001FB1202606814ABCDF80080CDE9010310 -:107AE000002313A8059906F043F8010058D1207827 -:107AF000C00729D0ADF80C50A06950B908A906A854 -:107B0000FFF7FDF89DF8210020F00700401C8DF8DC -:107B100021009DF820008DF84E7040F040008DF857 -:107B2000200042F60310ADF84C0015A903AACDF8C9 -:107B300000A0CDE90121002340F2032213A80899F7 -:107B400006F016F801002BD1E06868B32946012041 -:107B500060F30F218DF84E7042F60410ADF84C0022 -:107B6000E068002302788DF8602040788DF861008D -:107B7000E06818AA4088ADF86200E06800798DF8E6 -:107B80006400E068C088ADF86500CDF80090CDE9EC -:107B900001254FF4027213A805F0EAFF010003D09B -:107BA000099800F0B5FF2AE67148032108380171F1 -:107BB00056B100893080BDF850007080BDF83000AB -:107BC000B080BDF85400F080002018E670B50125A3 -:107BD0008AB016460B46012802D0022816D104E0CE -:107BE0008DF80E504FF4205003E08DF80E5042F601 -:107BF0000100ADF80C005BB10024601C60F30F24A1 -:107C000004AA08A918460AF0A6FB18B1072048E5FF -:107C1000102046E504A99DF820205548CDE9002113 -:107C2000801E02900023214603A802F2012205F0E3 -:107C30009FFF10B1FEF78DFF33E54D4808380EB1B8 -:107C4000C1883180057100202BE5F0B593B007465F -:107C500001268DF83E6041F60100ADF83C0012AA05 -:107C60000FA93046FFF7B2FF002848D1404C00254D -:107C7000083CE7B31C2102A819F0D7FF9DF80800C3 -:107C80008DF83E6040F020008DF8080042F6052097 -:107C9000ADF83C000E959DF83A00119520F00600D5 -:107CA000801C8DF83A009DF838006A4620F0FF00ED -:107CB0008DF838009DF8390009A920F0FF008DF8F3 -:107CC00039000420ADF82C00ADF830000EA80A9061 -:107CD00011A80D900FA80990ADF82E5002A8FFF73B -:107CE0006AFD00280BD1BDF80000608100E008E0CB -:107CF000BDF80400A081401CE0812571002013B074 -:107D0000F0BD6581A581BDF84800F4E72DE9F74F86 -:107D10001749A0B00024083917940A79A146012A0E -:107D200004D0022A02D0082023B02FE5CA8882425C -:107D300001D00620F8E721988A46824201D1072027 -:107D4000F2E701202146ADF848004FF6FF7860F3D6 -:107D50000F21ADF84A808DF86E0042F6020B0691B5 -:107D60008DF87240ADF86CB0ADF870401CA901E020 -:107D70001C0300201391ADF8508012A805F0E5FF18 -:107D800000252E462F460DAB072212A9404605F0CE -:107D9000DFFF78B182285DD195B38EB3ADF8645022 -:107DA000ADF866609DF85E008DF8144019AC0128AE -:107DB00064D06BE09DF83A001FB3012859D1BDF89B -:107DC000381059451FD118A809A901940294CDE98A -:107DD000031007200090BDF8361010230022404603 -:107DE00006F036F8B0BBBDF86000042801D00628C4 -:107DF0004AD1BDF82410219881423AD10F2093E74F -:107E00003AE0012835D1BDF83800B0F5205F03D045 -:107E100042F6010188422CD1BAF80600BDF83610AE -:107E2000884201D1012700E0002705B19EB12198C9 -:107E300081421ED118A809AA01940294CDE9032019 -:107E4000072000900D4610230022404606F000F85F -:107E500000B902E02DE04E460BE0BDF860000228BC -:107E600001D0102810D1C0B217AA09A90AF054FAFB -:107E700050B9BDF8369086E7052055E705A917A843 -:107E8000221D0AF068FA08B103204DE79DF814009E -:107E90000023001DC2B28DF8142022980092CDE973 -:107EA00001401BA8069905F063FE10B902228AF86A -:107EB0000420FEF74EFE37E710B50B46401E88B093 -:107EC00084B205AA00211846FEF7E8FE00200DF155 -:107ED000080C06AA05A901908CE80700072000906D -:107EE0000123002221464FF6FF7005F087FD04466E -:107EF000BDF81800012800D0FFDF2046FEF729FE5C -:107F000008B010BDF0B5F94F044687B038790E4679 -:107F1000032804D0042802D0082007B0F0BD04AA2A -:107F200003A92046FEF793FE0500F6D1606880782D -:107F3000C0F3410002280AD19DF80D0010F0380F5F -:107F400005D020690CF0D0F908B11020E5E72089B0 -:107F500005AA21698DE807006389BDF81020206813 -:107F6000039905F005FE10B1FEF7F3FDD5E716B154 -:107F7000BDF814003080042038712846CDE7F8B5EC -:107F80000C0006460BD001464FF6FF7500236A46EB -:107F9000284605F0DFFF20B1FEF7DBFDF8BD10201D -:107FA000F8BD69462046FEF70AFE0028F8D1A07801 -:107FB000314600F001032846009A05F0F7FFEBE791 -:107FC00030B587B0144600220DF1080C05AD0192C2 -:107FD0008CE82C00072200920A46014623884FF6BF -:107FE000FF7005F00BFDBDF814102180FEF7B1FD08 -:107FF00007B030BD70B50D46042108F02FFD040018 -:1080000000D1FFDF294604F11400BDE8704004F000 -:1080100011BD70B50D46042108F020FD040000D10B -:10802000FFDF294604F11400BDE8704004F025BDCF -:1080300070B50D46042108F011FD040000D1FFDFEA -:10804000294604F11400BDE8704004F03DBD70B550 -:108050000546042108F002FD040000D1FFDF21469F -:1080600028462368BDE870400122FEF74BBF70B57B -:108070000646042108F0F2FC040000D1FFDF04F101 -:10808000140004F0C7FC401D20F0030511E0011DA1 -:1080900000880022431821463046FEF733FF0028AF -:1080A0000BD0607CABB2684382B2A068011D08F0BF -:1080B00078FBA06841880029E9D170BD70B50546FC -:1080C000042108F0CBFC040000D1FFDF2146284644 -:1080D0006368BDE870400222FEF714BF70B50E461B -:1080E000054601F062F9040000D1FFDF0120207293 -:1080F00066726580207820F00F00001D20F0F000EF -:1081000040302070BDE8704001F052B910B504460F -:10811000012900D0FFDF2046BDE810400121FAF719 -:1081200055B92DE9F04F97B04FF0000A0C00834687 -:10813000ADF818A0D04619D0E06830B1A068A8B159 -:108140000188ADF81810A0F800A05846FAF7D2FF41 -:10815000070043F2020967D03878222862D304214D -:10816000584608F07BFC050005D103E0102017B04D -:10817000BDE8F08FFFDF05F1140004F04BFC401D5B -:1081800020F00306A078012803D0022801D00720A0 -:10819000EDE7208878B1401C81B209AA584605F065 -:1081A000A4FD09A805F0ADFD9DF82E204FF4505117 -:1081B000012A0DD102E043F20300D8E7BDF82C20DC -:1081C000A2F52453023B03D1822801D0A0B901E0DB -:1081D0000846CCE7E068B0B1CDE902A0072006AAC6 -:1081E000CDF804A000900492A2882188BDF8183030 -:1081F000584605F003FC10B1FEF7ABFCB7E7A168E9 -:10820000BDF8180008809DF82700C00602D543F28B -:108210000140ACE70D9838B1A1780078012905D06C -:1082200080071AD40820A2E74846A0E7C007F9D083 -:1082300002208DF83C00A8684FF00009A0B1697CCD -:108240004288714391420FD98AB2B3B2011D08F03E -:108250005EFA8046A0F800A006E003208DF83C00FE -:10826000D5F800804FF001099DF8280010F0380F74 -:1082700000D1FFDF9DF828001D49C0F3C20008446B -:1082800097F8231010F8010C884201D90F206EE7EF -:108290002088ADF8400014A90095CDE9019143462E -:1082A00007220FA95846FEF757FE002885D19DF8F2 -:1082B000500050B9A078012807D1687CB3B2704350 -:1082C00082B2A868011D08F036FA00204FE770B5A9 -:1082D000064615460C460846FEF7FAFB002809D16B -:1082E0002A4621463046BDE870406FE41403002062 -:1082F0002E20020070BD09E570B51E4614460D0023 -:1083000009D044B1616831B138B1F849C9888142B6 -:1083100003D0072070BD102070BD2068FEF7D8FB89 -:108320000028F9D1324621462846BDE87040FFF7C3 -:1083300042BA70B515460C0006D038B1EB49098930 -:10834000814203D0072070BD102070BD2068FEF769 -:10835000BFFB0028F9D129462046BDE87040D1E591 -:1083600070B5064686B00D46144610460BF09EFFCB -:10837000D0BB60680BF0C1FFB0BBA6F57F40FF38F3 -:1083800003D03046FAF7B6FE80B128466946FEF7BC -:10839000D8FC00280CD19DF810100F2008293CD2E1 -:1083A000DFE801F008060606060A0A0843F20200A2 -:1083B00006B070BD0320FBE79DF80210012908D12B -:1083C000BDF80010B1F5C05FF2D06FF4C052D142D9 -:1083D000EED09DF8061001290DD1BDF80410A1F5CD -:1083E0002851062907D200E028E0DFE801F0030366 -:1083F00004030303DCE79DF80A1001290ED1BDF840 -:108400000810B1F5245FD3D0A1F524510239CFD0A3 -:108410000129CDD0022901D1CAE7FFDF606878B910 -:10842000002305AA2946304605F094FD10B1FEF759 -:1084300090FBBDE79DF81400800601D41020B7E73B -:108440006188224628466368FFF7BAFDB0E72DE948 -:10845000F043814687B08846144610460BF026FF4D -:1084600018B1102007B0BDE8F083002306AA4146EA -:10847000484605F06FFD10B1FEF76BFBF2E79DF883 -:108480001800C00602D543F20140EBE7002507279C -:1084900005A8019500970295CDE9035062884FF633 -:1084A000FF734146484605F0D3FC060013D16068CF -:1084B0000BF0FCFE60B960680195CDE902500097B1 -:1084C0000495238862884146484605F0C1FC06466B -:1084D000BDF8140020803046CEE739B1834B0A88BE -:1084E0009B899A4202D843F20300704719E610B5FF -:1084F00086B07E4C0423ADF81430638943B1A4895F -:108500008C4201D2914205D943F2030006B010BD5E -:108510000620FBE7ADF81010002100910191ADF8A5 -:10852000003002218DF8021005A9029104A90391DF -:10853000ADF812206946FFF7F4FDE7E72DE9FC47A7 -:1085400081460E4608460BF08BFE88BB4846FAF77C -:10855000D1FD5FEA00080AD098F80000222829D34C -:108560000421484608F07AFA070005D103E043F2F7 -:108570000200BDE8FC87FFDF07F1140004F061FA98 -:1085800005463078012803D0022804D00720F0E700 -:10859000A8070FD502E015F0340F0BD0B079341DC9 -:1085A000C00709D0E08838B1A0680BF059FE18B1B7 -:1085B0001020DEE70820DCE732782088002628B388 -:1085C000A0F201130721112B18D20CD2DFE803F01F -:1085D0000B090D0B1D0B121D100B0B1D1D1D1D0B73 -:1085E0001D00022A11D10846C3E7012AFBD00CE086 -:1085F000EA0600E0AA06002AF5DA06E0A0F5C07255 -:108600001F2A02D97D3A022AEDD8C6B200F0CDFE6B -:1086100050B198F82300CDE90006FA89234639467F -:108620004846FEF7E3FCA4E71120A2E72DE9F04F4E -:108630008BB01F4615460C4683460026FAF75AFDB6 -:1086400028B10078222805D208200BB090E543F22B -:108650000200FAE7B80801D00720F6E7032F00D19F -:1086600000274FF6FF79CCB1022D72D320460BF0D4 -:1086700044FE30B904EB0508A8F101000BF03DFE03 -:1086800008B11020E1E7AD1EAAB22146484605F028 -:108690005AFD38F8021C88425BD1ADB21349B807C5 -:1086A00002D58889401C00E001201FFA80F8F807F5 -:1086B00001D08F8900E04F4605AA4146584605F093 -:1086C00014FB4FF0070A4FF00009D4B3204608E02E -:1086D000408810283DD8361D304486B2AE4238D28C -:1086E000A01902884245F3D353E000001403002090 -:1086F0009DF8170002074CD594B304EB0608361D0D -:10870000B8F80230B6B2102B23D89A19AA4220D852 -:10871000B8F8002091421CD1C0061CD5CDE900A9B3 -:108720000DF1080C0AAAA11948468CE80700B8F810 -:1087300000100022584605F061F920B1FEF709FA51 -:1087400083E726E005E0B8F80200BDF8281088426B -:1087500001D00B2079E7B8F80200304486B207E078 -:10876000FFE7C00604D55846FEF772FC002889D101 -:108770009DF81700BDF81A1020F010008DF81700B2 -:10878000BDF81700ADF80000FF235846009A05F029 -:108790000DFC05A805F0B5FA18B9BDF81A10B942D4 -:1087A000A6D90421584608F059F9040000D1FFDF8A -:1087B000A2895AB1CDE900A94D4600232146584669 -:1087C000FEF714FC0028BBD1A5813EE700203CE762 -:1087D0002DE9FF4F8BB01E4617000D464FF00004E9 -:1087E00012D0B00802D007200FB0C1E4032E00D190 -:1087F00000265DB108460BF077FD28B93888691E60 -:1088000008440BF071FD08B11020EDE7C64AB0072F -:1088100001D5D18900E00121F0074FF6FF7802D0A1 -:10882000D089401E00E0404686B206AA0B9805F0AB -:108830005CFA4FF000094FF0070B0DF1140A38E015 -:108840009DF81B00000734D5CDF80490CDF800B09A -:10885000CDF80890CDE9039A434600220B9805F025 -:10886000F7FA60BB05B3BDF814103A882144281903 -:10887000091D8A4230D3BDF81E2020F8022BBDF816 -:10888000142020F8022BCDE900B9CDE90290CDF8F3 -:1088900010A0BDF81E10BDF8143000220B9805F092 -:1088A000D7FA08B103209FE7BDF814002044001D4B -:1088B00084B206A805F025FA20B1822806D0FEF77A -:1088C00048F991E7BDF81E10B142B9D934B17DB174 -:1088D0003888A11C884203D20C2085E7052083E755 -:1088E00022462946404605F02EFC01462819018003 -:1088F000A41C3C80002077E710B504460BF0D6FCA2 -:1089000008B1102010BD8848C0892080002010BD0B -:10891000F0B58BB00D460646142103A819F085F971 -:1089200001208DF80C008DF8100000208DF811004A -:10893000ADF814503046FAF7DDFB48B10078222834 -:1089400012D30421304608F089F8040005D103E071 -:1089500043F202000BB0F0BDFFDF04F11400074644 -:1089600004F06FF8400601D40820F3E7207C0221D0 -:1089700040F00100207409A80094CDE901100722FD -:1089800003A930466368FEF7E7FA20B1217C21F0A5 -:1089900001012174DEE729463046F9F708FD08A9F0 -:1089A000384604F03DF800B1FFDFBDF82040172C39 -:1089B00001D2172000E02046A84201D92C4602E04F -:1089C000172C00D2172421463046FFF722FB214600 -:1089D0003046F9F708FA0020BCE7F8B51C46154602 -:1089E0000E46069F08F044F92346FF1DBCB23146EF -:1089F0002A46009407F0DBFCF8BD70B50C4605462E -:108A00000E21204619F0EFF8002020802DB1012D15 -:108A100001D0FFDF70BD062000E00520A07170BD11 -:108A200010B548800878134620F00F00001D20F094 -:108A3000F00080300C4608701422194604F108003A -:108A400019F09FF800F0B4FC3748046010BD2DE920 -:108A5000F047DFF8D890491D064621F0030117467C -:108A60000C46D9F8000007F01AFE050000D1FFDF20 -:108A70004FF000083560A5F800802146D9F80000C5 -:108A800007F00DFE050000D1FFDF7560A5F800803E -:108A90007FB104FB07F1091D0BD0D9F8000007F0E6 -:108AA000FEFD040000D1FFDFB460C4F80080BDE823 -:108AB000F087C6F80880FAE72DE9F0411746491D0E -:108AC00021F00302194D064601681446286807F094 -:108AD00011FE22467168286807F00CFE3FB104FBC6 -:108AE00007F2121D03D0B168286807F003FE0420C6 -:108AF00007F05EFF0446042007F062FF201A0128F9 -:108B000004D12868BDE8F04107F0BEBDBDE8F081A2 -:108B100010B50C4605F0B5F800B1FFDF2046BDE802 -:108B20001040FEF716B800001403002014000020C7 -:108B300010B50C460246817B808819B1518981426B -:108B400000D908462080D18800F0C5FF032800D353 -:108B50000320C1B22088BDE8104000F0B1BF10B5BD -:108B60000C460246817B808819B11189814200D967 -:108B700008462080D18800F0AEFF022800D30220F2 -:108B8000C1B2208800F09CFF401CC0B210BD2DE98E -:108B9000F04F0C00F84999B08146D1E90201CDE9C6 -:108BA0000C0109F10300F54E20F003010091357E20 -:108BB00005F1010504D1E8B209F054FB00B1FFDF73 -:108BC00000984FF0000B00EB0510C01C20F00301D3 -:108BD00000915CB9707A327A81F800B01044C2B268 -:108BE000B08B80B204F0D5FE00B1FFDF0098F169D0 -:108BF000084400902146684600F02CFF0098C01CF5 -:108C000020F003000090737A327AB17A04B1002028 -:108C100007F016FE0099084400902146684600F0CF -:108C20006EFF00273D46B24696F801800CE02846CC -:108C300000F0F3FE064681788088F9F76EF97178C6 -:108C40006D1C00FB0177EDB24545F0D10098C01CCA -:108C500020F00300009004B100203946F9F768F9CC -:108C600000990027084400903D469AF801800CE0E6 -:108C7000284600F0D2FE0646C1788088FEF773FCD5 -:108C800071786D1C00FB0177EDB24545F0D100987D -:108C9000C01C20F00300009004B100203946FEF70C -:108CA0006BFC00994FF000080844009045469AF884 -:108CB00001700EE0284600F0B0FE0646807B30B121 -:108CC00006F1080001F0F9FE727800FB02886D1CC5 -:108CD000EDB2BD42EED10098C01C20F00300009020 -:108CE00004B10020414601F0ECFE00990844C01D8B -:108CF00020F007000090E4BBA24AA1491160111DB9 -:108D0000401E086001222C219F4807F062FCFAF700 -:108D10002EF99E484178806805F09CFB42208DF832 -:108D200004009A480C30C0788DF8060010B1012874 -:108D300004D005E001208DF8060001E08DF806B0B2 -:108D400001A806F0C5FE10B10EA805F042FC0021F6 -:108D50001E22084603F03CF8FBF778F987480CAA76 -:108D600000210C30F8F706FB00B1FFDF9AF819007C -:108D700000E015E0FEF769FF00B1FFDF7F484FF428 -:108D8000F671443018F051FF7C480421443080F8DB -:108D9000E91180F8EA11062180F8EB110321017135 -:108DA000009919B0A1EB0900BDE8F08F70B5734CC4 -:108DB00006464434207804EB4015E078083590B935 -:108DC000A01990F8E80100280ED0A0780F2800D351 -:108DD000FFDF2021284618F028FF687866F302009C -:108DE00068700120E070284670BD2DE9F04105460D -:108DF0000C4600270078052190463E46B1EB101F37 -:108E000000D0FFDF287A58B101280FD0FFDF00BF64 -:108E1000A8F800600CB1278066800020BDE8F081D2 -:108E20000127092674B16888A08008E0022714266B -:108E300044B16888A0802869E060A88A2082287BE5 -:108E40002072E5E7A8F80060E7E710B54F4C6068CE -:108E5000C11D21F00701814200D0FFDF47480121F9 -:108E60000022017042700172032343728172027307 -:108E7000052282821F22C282417345A202610A2218 -:108E8000027641764FF4B061C1616168416010BD06 -:108E900030B53E4C1568636810339D4202D2042001 -:108EA000136030BD354B5D785A6802EB05121070C7 -:108EB00051700320D080172090800120D0709070D6 -:108EC000002090735878401C5870606810306060C3 -:108ED000002030BD70B5064628480024457807E0DC -:108EE000204600F09AFD0178B14204D0641CE4B23F -:108EF000AC42F5D1002070BDF7B5064608780C46A7 -:108F000008B3FFF7E7FF0546202E08D0232E17D021 -:108F1000212E41D0222E3FD0242E2BD114E000F060 -:108F200087FD0DB1697800E00021401A81B2A07878 -:108F30000144FF291ED830B1A08802282CD219E0A4 -:108F40006088172828D215E0227A2AB36188172969 -:108F500010D3A08817280DD3A3795BB1E3794BB167 -:108F6000402A07D84FF6FB72914201D8904213D99C -:108F70000420FEBD0720FEBD342002003004002086 -:108F80000000002000060240600600201C000020B7 -:108F90006E5246357800000065B9207802AA01219A -:108FA000FFF776FF0028E6D12078FFF793FF050052 -:108FB00000D1FFDF203E052E18D2DFE806F0030BBC -:108FC0000E081100A0786870A088E8800FE0608823 -:108FD000A8800CE0A078A87009E0A078E87006E00E -:108FE00054F8020FA8606068E86000E0FFDF00202E -:108FF000C1E700B597B053218DF8001000780BA998 -:1090000000F001008DF80200684605F023F817B063 -:1090100000BD00B5017897B001F001018DF8021094 -:10902000417801F001018DF803100178C1F340018E -:109030008DF804104178C1F340018DF805100178D6 -:1090400089088DF80610417889088DF80710817815 -:109050008DF80810C1788DF8091000798DF80A0094 -:109060004D208DF800000BA9684604F0F3FFCEE711 -:109070002DE9F04FDFF8F883FE4C97B000271BE096 -:10908000012000F07FFD0120FFF790FE0546FA4821 -:1090900007F0C8FA686000B9FFDF686805F027F8D4 -:1090A000A0B12846FAF7CEFA284600F071FD18B9AB -:1090B000F148696807F0BFFA94F9E9010428DFDA9A -:1090C000022007F075FC06460025AAE0EA48696818 -:1090D00007F0B1FAF4E7B8F802104046491C89B22B -:1090E000A8F80210B14201D3002141800221B8F852 -:1090F000020007F0B3FC00286BD0B8F8020054213E -:109100008DF80010ADF802000BA9684604F0A2FF2C -:1091100000B1FFDF9DF8300010F0010F0FD0B8F85C -:10912000020007F0B7FD5FEA000900D1FFDF484603 -:1091300006F0A3FF18B1B8F8020002F065F9B8F81C -:10914000020007F095FD5FEA000900D1FFDF484605 -:1091500006F08CFFE8BB0321B8F8020007F07EFCA4 -:109160005FEA000B48D1FFDF46E000BFDBF81000EC -:1091700010B10078FF2849D0022000F003FD022042 -:10918000FFF714FE8246484607F0A2F8CAF804002A -:1091900000B9FFDFDAF8040007F07CF90021009045 -:1091A0000170B8F802105046AAF8021001F032FE21 -:1091B000484607F071F900B9FFDF504600F0E8FCBF -:1091C00018B99AF80100000704D50098CBF81000F0 -:1091D00012E024E0DBF8100038B10178491C11F0EE -:1091E000FF01017008D1FFDF06E00022114648466A -:1091F00000F011FC00B9FFDF94F9EA01022805DB59 -:10920000B8F8020001F0CAFD0028AFD194F9E901D5 -:10921000042804DB484607F0B5F900B101276D1CAE -:10922000EDB2B54204D294F9EA010228BFF653AF79 -:10923000002F7FF423AF17B00320BDE8F04F00F0FC -:10924000A1BC10B58A4CA0600868E060AFF2DF10E6 -:1092500002F031FD607010BD864800214438017075 -:109260008348017085494160704730B505464FF02D -:1092700080500C46D0F8A41097B0491C05D1D0F806 -:10928000A810C9430904090C08D050F8A01F01F028 -:10929000010129704168216080680EE02B208DF863 -:1092A00000000BA9684604F0D5FE00B1FFDF0120E5 -:1092B00028700C982060BDF83400A0802878002821 -:1092C00003D0607940F0C000607117B030BDF0B5D8 -:1092D0004FF080540746D4F8800097B00D462B26F7 -:1092E000401C0BD1D4F88400401C07D1D4F888006E -:1092F000401C03D1D4F88C00401C0BD0D4F8800063 -:109300003860D4F884007860D4F88800B860D4F865 -:109310008C0016E08DF82C6069460BA804F09AFECC -:1093200000B1FFDF01983860029878608DF82C60FA -:1093300069460BA804F08EFE00B1FFDF0198B8600B -:109340000298F860D4F89000401C0BD1D4F8940037 -:10935000401C07D1D4F89800401C03D1D4F89C00DD -:10936000401C08D054F8900F286060686860A068BE -:10937000A860E06816E08DF800600BA9684604F06C -:1093800069FE00B1FFDF0C9828600D9868608DF8C9 -:1093900000600BA9684604F05DFE00B1FFDF0C9889 -:1093A000A8600D98E86017B0F0BD32480079FDE480 -:1093B00070B5304CE07830B3207804EB4010407A40 -:1093C00000F00700204490F9E801002800DCFFDFEE -:1093D0002078002504EB4010407A00F007000119C6 -:1093E00091F8E801401E81F8E8012078401CC0B2E5 -:1093F00020700F2800D12570A078401CA0700AF0C2 -:109400001BFBE57070BDFFDF70BD3EB50546032157 -:1094100007F024FB0446284607F02AFC054604B959 -:10942000FFDF206918B10078FF2800D1FFDF01AA13 -:109430006946284600F0EFFA60B9FFDF0AE0002233 -:1094400002A9284600F0E7FA00B9FFDF9DF80800FE -:1094500000B1FFDF9DF80000411E8DF80010EED234 -:1094600020690199884201D1002020613EBD0000A1 -:109470001C000020740400206006002068130020F7 -:1094800070B50546A0F57F400C46FF3800D1FFDFE0 -:10949000012C01D0FFDF70BDFFF787FF040000D172 -:1094A000FFDF207820F00F00401D20F0F00050304A -:1094B000207065800020207201202073BDE870407C -:1094C00076E72DE9F04116460D460746FFF76DFF9A -:1094D000040000D1FFDF207820F00F00401D20F0B5 -:1094E000F0005030207067800120207228682061D1 -:1094F000A888A0822673BDE8F04159E730B599B03D -:10950000FFF7E8FC040000D1FFDF0CA92046FFF7BD -:109510000FFB05460BA92046FFF721FB0146522011 -:109520008DF80000BDF830008DF80250001DADF838 -:109530000400BDF82C008DF80310001DADF80600E6 -:10954000E088ADF808000DA9684604F083FD002806 -:1095500000D0FFDF19B030BD2DE9F047DFF80094EF -:109560000546002799F8000010B10820BDE8F087F3 -:1095700028460AF09BFE08B11020F7E7F94C207846 -:1095800008B9FFF762FC607A217A0844C6B200F09D -:109590004FFAB04207D2301AC1B22A460020FFF774 -:1095A00077FC0700E2D1D9F804004E46C01C20F039 -:1095B0000300C9F8040000F05EFB716800EB0108CD -:1095C00001214046FFF7E3FA0646296840448842F5 -:1095D00002D8B6F5803F15D328600020FFF77AFC4B -:1095E00005000DD005F11300D9F8041020F0030098 -:1095F0004E46884200D0FFDF6078401E6070756084 -:109600000420B3E700214046FFF7C1FA0446A64212 -:1096100000D0FFDF04EB0801C9F8041029604FF601 -:10962000FF71A9F80210012189F8001038469DE762 -:109630002DE9F0410446CA4817460D46007810B19E -:109640000820BDE8F08108460AF00AFE08B11020A3 -:10965000F7E7C44E307808B9FFF7F7FB601E1E2805 -:1096600007D8012C3FD12878FE283CD8307600203E -:10967000E7E7A4F120001F2805D8E0B23A462946C2 -:10968000BDE8F04138E4A4F140004FF000081F2885 -:1096900021D8402C02D0412C25D117E068782978B8 -:1096A0004418A97881421ED8FF2C08D808F0BEFFC4 -:1096B00007460AF07BF9381A801EA04201DA122010 -:1096C000BFE728883081A878B07224E02846BDE83A -:1096D000F04100F085BAA4F1A0001F2803D8A02C07 -:1096E00003D0A12C06D00720ABE7287800F00100BA -:1096F000707610E029680920F829A2D38A07A0D142 -:10970000727B02F00302012A04D1F28AD73293B2AB -:109710008B4296D8F161404693E72DE9F0478146A8 -:109720000E4608460AF0C2FD48B948460AF0DCFD7C -:1097300028B909F1030020F00301494501D01020A8 -:1097400014E788484FF0000A4430817869B14178C5 -:10975000804600EB41140834378832460021204609 -:1097600000F024FA050004D027E0A6F800A00520A8 -:10977000FCE6B9F1000F24D03088B84201D90C259D -:109780001FE0607800F00705284600F0FBF908EBC1 -:109790000507324697F8E8014946401C87F8E8017A -:1097A000204607F5F47700F001FA05463878401EA8 -:1097B0003870032000F0E6F92DB10C2D01D0A6F889 -:1097C00000A02846D2E66078654F00F00701012925 -:1097D00023D002290CD0032932D0FFDF98F80110E2 -:1097E0004046491CC9B288F801100F2933D034E033 -:1097F000616821B1000702D46088FFF706FE98F87F -:10980000EA014646012802D1787802F073FA96F907 -:10981000EA010428E2DBFFDFE0E7616811B15248AA -:1098200006F009FF98F8E9014646032802D1787846 -:1098300002F060FA96F9E9010428CFDBFFDFCDE7FB -:10984000C00602D56088FFF7E0FD98F9EB01062815 -:10985000C4DBFFDFC2E780F801A08178491E817078 -:10986000617801F0070101EB080090F8E811491C4C -:1098700080F8E811A5E770B50D4604460AF0F0FC43 -:1098800018B928460AF012FD08B1102070BD29460B -:109890002046BDE8704008F01CBD70B50446154672 -:1098A0000E4608460AF0DCFC18B928460AF0FEFC11 -:1098B00008B1102070BD022C03D0102C01D009205B -:1098C00070BD2A463146204608F026FD0028F7D014 -:1098D000052070BD70B514460D4606460AF0C0FC62 -:1098E00038B928460AF0E2FC18B920460AF0FCFC18 -:1098F00008B1102070BD22462946304608F02BFDE5 -:109900000028F7D0072070BD10B596B004460AF0C5 -:10991000CDFC10B1102016B010BD0F208DF8000046 -:109920000BA9684604F096FB0028F4D19DF834009A -:109930002070BDF836006080BDF83800A08000209F -:10994000E9E770B505460C4608460AF0CDFC20B99B -:1099500074B120680AF0AAFC40B1102070BD00006C -:109960001C0000203004002060060020A08828B1E0 -:1099700021462846BDE87040FDF774BE0920EDE79A -:1099800070B504460D4608460AF06AFC30B9601E00 -:109990001E2814D828460AF063FC08B11020DDE721 -:1099A000022C01D90720D9E704B9FFDFE64800EB14 -:1099B000840050F8041C2846BDE870400847A4F114 -:1099C00020001F28EED829462046BDE87040FAF74F -:1099D0007FBA70B504460D4608460AF067FC30B9F8 -:1099E000601E1E280DD828460AF03AFC08B1102047 -:1099F000B4E7012C01D0022C01D10620AEE70720EC -:109A0000ACE7A4F120001F28F9D829462046BDE87C -:109A10007040FAF7E1BA06F0E4BA30B5CB4D04462F -:109A20006878A04200D8FFDF686800EB041030BD02 -:109A300070B5C64800252C46467807E02046FFF75B -:109A4000ECFF4078641C2844C5B2E4B2B442F5D1BE -:109A5000284683E72DE9F0410C46064600F043F91D -:109A600007463068C01C20F0030232601CBBB748B8 -:109A70003B46092120300AF0CDFA002408E0092CE9 -:109A800011D2DFE804F005070509090B05050700F9 -:109A9000AF4804E0AF4802E0AF4800E0AF480AF04A -:109AA000D9FA054600E0FFDFA54200D0FFDF641CC5 -:109AB000E4B2092CE3D3306800EB07103060C0E556 -:109AC000021D5143452900D245210844C01CB0FB6A -:109AD000F2F0C0B2704700B597B055228DF8002063 -:109AE000001DADF80200ADF804100BA9684604F0A3 -:109AF000B1FA00B1FFDFBDF8300017B000BD2DE9AD -:109B0000FC5F064691484FF000088B4647464446A6 -:109B100090F8019022E02046FFF77FFF050000D17A -:109B2000FFDF687869463844C7B22846FFF700F877 -:109B3000824601A92846FFF712F80346BDF8040043 -:109B40005246001D81B2BDF80000001D80B206F033 -:109B5000DBFF6A78641C00FB0288E4B24C45DAD172 -:109B60003068C01C20F003003060BBF1000F00D053 -:109B700000204246394606F0D5FF3168084430607F -:109B8000BDE8FC9F7149443108710020C8707047DE -:109B90006E494431CA782AB10A7801EB4211083182 -:109BA000814201D001207047002070472DE9F0412B -:109BB00006460078154600F00F0400201080601E55 -:109BC0000F46052800D3FFDF5F482A46103000EB20 -:109BD0008400394650F8043C3046BDE8F04118474F -:109BE00038B50446407800F00300012803D002286D -:109BF0000BD0072038BD606858B10AF07EFBD0B9A1 -:109C000060680AF071FB20B915E060680AF028FB73 -:109C100088B969462046FCF7A9F90028EAD160789E -:109C200000F00300022808D19DF8000028B1606808 -:109C30000AF05AFB08B1102038BD6189F8290DD807 -:109C4000208988420AD8607800F003023F48012A40 -:109C500006D1D731C26989B28A4201D2092038BD02 -:109C600094E80E0000F10C0585E80E000AB9002109 -:109C70008182002038BD2DE9F05F4FF000093348A4 -:109C8000C8464F464E464D46CB464C4690F801A03E -:109C900011E02046FFF7C1FE4178827809F1010901 -:109CA000884412FB0177C27812FB0166807B10FBAF -:109CB0000155641CE4B25445EBD10BEB890000EB79 -:109CC000C80000EB870000EB860000EBC5011F48D1 -:109CD000027A01EBC201427A807A01EBC20101EB08 -:109CE000C000BDE8F09F2DE9F047DFF86090002547 -:109CF0002C4699F8092099F8081099F801700A443F -:109D0000D6B299F80A20114401F0FF0808E0204675 -:109D1000FFF783FE817B407811FB0055641CE4B2A1 -:109D2000BC42F4D199F80800401C3044304440440F -:109D3000401C0EB1012100E0002108444419FF2C11 -:109D400000D9FFDFE0B211E434200200300400202B -:109D5000633D00008DAB0000592F00003120010051 -:109D60002DE9F041074614468846084601F02EFDCD -:109D7000064608EB88001C22796802EBC0000D182B -:109D8000688C58B14146384601F028FD0146786894 -:109D90000078C200082305F120000CE0E88CA8B18F -:109DA0004146384601F021FD014678680823407895 -:109DB000C20005F1240006F0F4FC38B1062121723E -:109DC0006681D0E90010C4E9031009E02878092869 -:109DD0000BD00520207266816868E0600020287042 -:109DE0002046BDE8F04101F0E7BC07202072668103 -:109DF000F4E72DE9F04116460D460746406801EBB1 -:109E000085011C2202EBC1014418204601F00FFD20 -:109E100040B10021708865F30F2160F31F410820D5 -:109E20000AF0D2F909202070324629463846BDE8AA -:109E3000F04195E72DE9F0410E46074600241C212C -:109E4000F07816E004EB8403726801EBC303D25C84 -:109E50006AB1FFF7AAFA050000D1FFDF6F802A463A -:109E600021463046FFF7C5FF0120BDE8F081641CA4 -:109E7000E4B2A042E6D80020F7E770B50646002419 -:109E80001C21C0780AE000BF04EB8403726801EB78 -:109E9000C303D5182A782AB1641CE4B2A042F3D8CF -:109EA000402070BD2821284617F09DFE70688089EB -:109EB0002881204670BD70B5034600201C25DC7843 -:109EC0000DE000BF00EB80065A6805EBC606324481 -:109ED000167816B1128A8A4204D0401CC0B284425D -:109EE000F0D8402070BDF0B5044600201C26E5786F -:109EF0000EE000BF00EB8007636806EBC7073B443A -:109F00001F788F4202D15B78934204D0401CC0B2CC -:109F10008542EFD84020F0BD0078032801D0002012 -:109F20007047012070470078022801D00020704758 -:109F3000012070470078072801D0002070470120D9 -:109F400070472DE9F041064688461078F1781546AD -:109F5000884200D3FFDF2C781C27641CF078E4B221 -:109F6000A04201D8201AC4B204EB8401706807EB48 -:109F7000C1010844017821B14146884708B12C70DD -:109F800073E72878A042E8D1402028706DE770B5CB -:109F900014460B880122A240134207D113430B80C1 -:109FA00001230A22011D06F0C6FB047070BD2DE9D5 -:109FB000FF4F81B00878DDE90E7B9A4691460E4648 -:109FC00040072CD4019806F065FE040000D1FFDFA5 -:109FD00007F1040820461FFA88F105F0A9FE0500E4 -:109FE00000D1FFDF204629466A4606F092F9009824 -:109FF000A0F80370A0F805A0284606F04BFA0178F7 -:10A0000069F306016BF3C711017020461FFA88F14E -:10A0100005F0DEFE00B9FFDF019804F07CF906EBE5 -:10A020000900017F491C017705B0BDE8F08F2DE9DB -:10A03000F84F0E469A4691460746032106F00EFD5C -:10A040000446008DDFF8B085002518B198F80000AF -:10A05000B0421ED1384606F01DFE070000D1FFDFDA -:10A0600009F10401384689B205F062FE050010D0FE -:10A07000384629466A4606F04CF9009800210A46FF -:10A080000180817004F00AFA0098C01DCAF800002F -:10A0900021E098F80000B04216D104F1260734F808 -:10A0A000341F012000FA06F911EA090F00D0FFDF82 -:10A0B0002088012340EA090020800A22391D384601 -:10A0C00006F054FB067006E0324604F1340104F158 -:10A0D0002600FFF75CFF0A2188F800102846BDE83B -:10A0E000F88FFEB514460D46064602AB0C2206213B -:10A0F000FFF79DFF002826D00299687812220A7087 -:10A10000801C487008224A80A87020888880608857 -:10A11000C880A0880881E088488100240C20CDE90F -:10A1200000040523062229463046FFF740FF21465A -:10A1300066F31F41F0230022012009F09BFF68789D -:10A14000801C68700120FEBDFEB514460D46062237 -:10A15000064602AB1146FFF76AFF002812D0029BA9 -:10A16000132000211870A8785870022058809C8015 -:10A170000620CDE900010246052329463046FFF7B7 -:10A1800016FF0120FEBD2DE9FE430C46804644E04B -:10A1900002AB0E2207214046FFF749FF002841D0BD -:10A1A00060681C2267788678BF1C06EB860102EB8C -:10A1B000C101451802981421017047700A2141809D -:10A1C000698A0181E98A4181A9888180A98981817F -:10A1D000304601F0FBFA029905230722C8806F7010 -:10A1E0000420287000250E20CDE9000521464046B8 -:10A1F000FFF7DDFE294666F30F2168F31F41F023C8 -:10A200000022082009F036FF6078FC49801C60704D -:10A2100062682046921CFFF794FE606880784028B0 -:10A22000B6D10120BDE8FE83FEB50D46064638E0F6 -:10A2300002AB0E2207213046FFF7F9FE002835D089 -:10A2400068681C23C17801EB810203EBC202841809 -:10A25000029815220270627842700A224280A28916 -:10A260004281A2888281084601F0B0FA0146029834 -:10A270008180618AC180E18A0181A088B8B1002013 -:10A28000207000210E20CDE9000105230722294678 -:10A290003046FFF78CFE6A68D9492846D21CFFF782 -:10A2A00050FE6868C0784028C2D10120FEBD06205B -:10A2B000E6E72DE9FE430C46814644E0204601F0E6 -:10A2C000A0FAD0B302AB082207214846FFF7AFFE41 -:10A2D0000028A7D060681C2265780679AD1C06EBC3 -:10A2E000860102EBC10147180298B7F810800621D9 -:10A2F0000170457004214180304601F067FA014643 -:10A30000029805230722C180A0F804807D700820F0 -:10A3100038700025CDE9000521464846FFF747FE85 -:10A32000294666F30F2169F31F41F023002208201C -:10A3300009F0A0FE6078801C60706268B149204618 -:10A34000121DFFF7FEFD606801794029B6D101209A -:10A3500068E72DE9F34F83B00E4680E0304601F008 -:10A3600050FA002875D071681C2091F8068008EB1F -:10A37000880200EBC2000C184146304601F035FA65 -:10A380000146A078C30070684078C20004F1240040 -:10A3900006F023FA07468088E18B401A80B2002538 -:10A3A00081B3AA46218B814200D8084681460246E5 -:10A3B00002AB07210398FFF73AFE010028D0BAF15B -:10A3C000000F03D0029AB888022510808B46E28BDA -:10A3D0003968A9EB05001FFA80FA0A440398009235 -:10A3E00006F058FCED1D009A59465346009506F0BC -:10A3F00017F8E08B504480B2E083B988884209D1D5 -:10A40000012508E0FFE7801C4FF0010A80B2C9E790 -:10A41000002009E60025CDE90095238A0722314670 -:10A420000398FFF7C4FDE089401EE0818DB1A0785C -:10A43000401CA0707068F178427811FB02F1CAB23A -:10A44000816901230E3006F076F980F80080002043 -:10A45000E08372686C493046921DFFF772FD7068A8 -:10A46000817940297FF47AAF0120DDE570B5064699 -:10A4700048680D4614468179402910D104EB8401C7 -:10A480001C2202EBC101084401F0F2F9002806D0B9 -:10A490006868294684713046BDE8704059E770BD50 -:10A4A000FEB50C460746002645E0204601F0A9F916 -:10A4B000D8B360681C22417901EB810102EBC10134 -:10A4C0004518688900B9FFDF02AB0822072138462A -:10A4D000FFF7ADFD002833D00299607816220A708C -:10A4E000801C4870042048806068407901F06EF953 -:10A4F000014602980523072281806989C1800820CE -:10A50000CDE9000621463846FFF751FD6078801CF2 -:10A510006070A88969890844B0F5803F00D3FFDFE7 -:10A52000A88969890844A8816E81626837492046F4 -:10A53000521DFFF706FD606841794029B5D1012021 -:10A54000FEBD30B5438C458BC3F3C704002345B132 -:10A55000838B641EED1AC38A6D1E1D4495FBF3F3B5 -:10A56000E4B22CB1008918B1A04200D820460344BF -:10A570004FF6FF70834200D3034613800C7030BD4A -:10A580002DE9FC41074616460D46486802EB860158 -:10A590001C2202EBC101441801AA69462046FFF7BC -:10A5A000D0FFA1896389BDF80420C81880B2824217 -:10A5B0001FD001280AD99DF800C0BCF1000F03D0BC -:10A5C000B4F808C0844501D8002B12D0501A00D529 -:10A5D000002060816868407940280AD1204601F057 -:10A5E0003DF9002805D06868294646713846FFF7CE -:10A5F00057FFBDE8FC8100002C000020199F0000DF -:10A60000279F0000359F000071B800005DB8000072 -:10A610002DE9FE4F8946804615465088032106F0F5 -:10A620001DFA8346B8F80200402801D2402000E01D -:10A63000403880B282460146584601F0E2F80028D0 -:10A640007ED00AEB8A001C22DBF8041002EBC0006B -:10A650000C18204601F0EBF8002877D1B8F800007C -:10A66000E18A88423CD8A189D1B348456ED1002601 -:10A670005146584601F0B2F8218C0F18608B48B94A -:10A68000B9F1020F62D3B8F804006083618A88428E -:10A6900026D80226A9EB06001FFA80F9B888A28BFB -:10A6A000801A002814DD4946814500DA084683B245 -:10A6B00068886968029139680A44CDE9003206F079 -:10A6C000D7FADDE90121F61D009B009605F06FFE2B -:10A6D000A18B01EB090080B2A083618B884207D96E -:10A6E000688803B052465946BDE8F04F01F0DDB826 -:10A6F0001FD14FF009002872B8F802006881D7E92D -:10A700000001C5E90401608BA881284601F054F8D6 -:10A710005146584601F062F80146DBF80400082370 -:10A720000078C20004F1200006F03BF80020A0836E -:10A730006083A0890AF0FF02401EA081688800E0C3 -:10A7400004E003B05946BDE8F04F19E7BDE8FE8FBD -:10A750002DE9F041064615460F461C46184609F0FD -:10A760007FFD18B9206809F0A1FD08B1102007E4A9 -:10A770007168688C0978B0EBC10F01D3132005E430 -:10A780003946304601F02AF80146706808230078FF -:10A79000C20005F1200005F0CEFFD4E90012C0E9A7 -:10A7A00000120020E3E710B50446032106F056F935 -:10A7B0000146007800F00300012804D08A8A204670 -:10A7C000BDE81040C0E42046BDE8104001F114028D -:10A7D00087E470B50446032106F040F905460146BA -:10A7E0002046FFF766FD002816D029462046FFF7D1 -:10A7F00057FE002810D029462046FFF715FD0028F7 -:10A800000AD029462046FFF7BEFC002804D029467E -:10A810002046BDE870409CE570BD2DE9F0410C4636 -:10A8200080461EE0E178427811FB02F1CAB28169EC -:10A8300001230E3005F0B5FF077860681C22C1794E -:10A84000491EC17107EB8701606802EBC101461820 -:10A850003946204600F0D5FF18B1304600F0E0FF41 -:10A8600020B16068C1790029DCD180E7FEF79DFD49 -:10A87000050000D1FFDF0A202872384600F0A6FF4D -:10A8800068813946204600F0B0FF01466068082321 -:10A890004078C20006F1240005F083FFD0E90010E3 -:10A8A000C5E90310A5F80280284600F085FFB078BE -:10A8B00000B9FFDFB078401EB07058E770B50C46A5 -:10A8C0000546032106F0CAF801464068C2792244D1 -:10A8D000C2712846BDE870409FE72DE9FE4F8246D1 -:10A8E000507814460F464FF0000800284FD001283A -:10A8F00007D0022822D0FFDF2068B8606068F860C7 -:10A9000024E702AB0E2208215046FFF790FB0028F7 -:10A91000F2D00298152105230170217841700A2197 -:10A920004180C0F80480C0F80880A0F80C806288DC -:10A9300082810E20CDE90008082221E0A678304669 -:10A9400000F044FF054606EB86012C22786802EBF6 -:10A95000C1010822465A02AB11465046FFF767FB79 -:10A960000028C9D002980721017021784170042184 -:10A97000418008218580C680CDE9001805230A465C -:10A9800039465046FFF713FB87F80880DEE6A678C5 -:10A99000022516B1022E13D0FFDF2A1D914602AB0D -:10A9A00008215046FFF743FB0028A5D0029801215B -:10A9B000022E0170217841704580868002D005E02A -:10A9C0000625EAE7A188C180E1880181CDE90098E8 -:10A9D0000523082239465046D4E710B50446032122 -:10A9E00006F03CF8014600F108022046BDE81040A0 -:10A9F00073E72DE9F05F0C4601281DD0957992F898 -:10AA00000480567905EB85011F2202EBC10121F07C -:10AA1000030B08EB060111FB05F14FF6FF7202EA8A -:10AA2000C10909F1030115FB0611F94F21F0031AC1 -:10AA300040B101283DD124E06168E57891F80080BB -:10AA40004E78DFE75946786805F029FE606000B966 -:10AA5000FFDF5946606817F0E8F8E57051467868FE -:10AA600005F01DFE6168486100B9FFDF606842695A -:10AA700002EB09018161606880F8008060684670BF -:10AA800017E0606852464169786805F033FE5A461F -:10AA90006168786805F02EFE032005F089FF044602 -:10AAA000032005F08DFF201A012802D1786805F0F7 -:10AAB000EBFD0BEB0A00BDE8F09F024600210220EF -:10AAC00097E713B5009858B10024684605F0C9FD12 -:10AAD000CF490A22002C0A7001D1009A4A601CBD9D -:10AAE00001240020F2E770B50C46154638212046B7 -:10AAF00017F09BF8012666700A2104F11C0017F07C -:10AB000094F805B9FFDF297A207861F301002070FD -:10AB1000A879002817D02A4621460020FFF769FFB0 -:10AB20006168402088706168C870616808716168F8 -:10AB300048716168887161682888088161686888DF -:10AB400048816068868170BDC878002802D00022E4 -:10AB500001204EE7704770B50546002165F31F419F -:10AB6000012009F031FB0321284605F077FF04009E -:10AB700000D1FFDF21462846FFF75CF9002804D00A -:10AB8000207840F010002070012070BD2DE9FF41B9 -:10AB900080460E460F0CFEF708FC050007D06F80BC -:10ABA0000321384605F05AFF040008D106E004B03E -:10ABB0003846BDE8F0411321F9F72EBEFFDFB8F1AA -:10ABC000010F05D0B8F1080F18D0FFDFBDE8FF81F5 -:10ABD00020782A4620F0080020700020ADF80200FE -:10ABE00002208DF800004FF6FF70ADF80400ADF8BC -:10ABF000060069463846F9F717F9E7E7C6F3072173 -:10AC000001EB81021C23606803EBC202805C042814 -:10AC100003D008280AD0FFDFD8E7012000904FF4C6 -:10AC200040432A46204600F009FECFE704B02A46FA -:10AC30002046BDE8F041FFF7DCB82DE9F05F0027C2 -:10AC4000B0F80A9090460C4605463E46B9F1400FD2 -:10AC500001D2402001E0A9F140001FFA80FA287AD1 -:10AC6000C01E08286BD2DFE800F00D04192058360A -:10AC70003C4772271026002C6CD0D5E90301C4E9AB -:10AC800002015CE070271226002C63D00A2205F135 -:10AC90000C0104F1080016F074FF50E071270C2637 -:10ACA000002C57D0E868A06049E0742710269CB3B8 -:10ACB000D5E90301C4E902016888032105F0CEFE4D -:10ACC0008346FEF772FB024668885080514658461C -:10ACD000FFF746F833E075270A26ECB1A8892081F2 -:10ACE0002DE076271426BCB105F10C0004F1080311 -:10ACF00007C883E8070022E07727102664B1D5E96A -:10AD00000301C4E902016888032105F0A7FE01469A -:10AD10006888FFF782FD12E01CE073270826CCB19B -:10AD20006888032105F09AFE01460078C00606D522 -:10AD30006888FFF77FF810B96888F8F767FCA8F80B -:10AD400000602CB12780A4F8069066806888A080F7 -:10AD50000020B0E6A8F80060FAE72DE9FC410C46B7 -:10AD60001E4617468046032105F078FE05460A2C4C -:10AD70000AD2DFE804F005050505050509090907FC -:10AD8000042303E0062301E0FFDF0023CDE9007682 -:10AD9000224629464046FFF70AF92AE438B5054617 -:10ADA000A0F57F40FF3830D0284605F061FF040051 -:10ADB00000D1FFDF204605F08BFA002815D00146B0 -:10ADC0006A46204605F0A5FA00980321B0F8054030 -:10ADD000284605F043FE0546052C03D0402C05D23D -:10ADE000402404E0007A80B1002038BD403CA4B289 -:10ADF000214600F006FD40B1686804EB84013E2264 -:10AE000002EBC101405A0028EFD0012038BD0000FC -:10AE10002C0000202DE9F04F044689B0408805F051 -:10AE200027FF050000D1FFDF06AA2846616800F071 -:10AE3000C1FC069D001F81B235F8032F6B888A4242 -:10AE400005D1042B0AD0052B1DD0062B15D0224688 -:10AE50002846FFF7DDFB09B0BDE8F08F16462D1D33 -:10AE6000224629463046F7F78CFA0828F3D12246C5 -:10AE700029463046FCF73DFCEDE76088291D6368F4 -:10AE8000FAF7F0FCE7E717466088032105F0E6FDD6 -:10AE90004FF000088DF804800646ADF80680042FB8 -:10AEA000D9D36A79002AD6D028794FF6FF794FF0A6 -:10AEB0001C0A13282CD008DC012878D0062847D09B -:10AEC000072875D0122874D106E0142872D01528EE -:10AED00071D016286DD1ACE10C2F6AD1307800F01A -:10AEE0000301012965D040F0080030706879B07026 -:10AEF00001208DF804002889ADF808006889ADF8B4 -:10AF00000A00A889ADF80C00E889ADF80E0019E038 -:10AF1000B07890429FD1307801079CD5062F9AD106 -:10AF200020F0080030706088414660F31F41012026 -:10AF300009F04AF902208DF80400ADF8089028893C -:10AF4000ADF80A006088224601A9F8F76DFF82E794 -:10AF5000082F80D12F89B5F80A90402F01D24020C8 -:10AF600001E0A7F1400080B280460146304600F083 -:10AF700048FC08B3716808EB88002C2202EBC00083 -:10AF8000095A4945E3D1FE4807AAD0E90210CDE9A4 -:10AF9000071068798DF81C0008F0FF058DF81E5029 -:10AFA00060883146FFF799FC2246294639E0B6E031 -:10AFB00014E03CE039E0E6E0F148D0E90010CDE9EA -:10AFC00007106879ADF820708DF81C00ADF822905C -:10AFD000608807AA3146FFF780FC3CE7082FB6D10E -:10AFE0006889B5F80880402801D2402000E0403848 -:10AFF00087B23946304600F004FC0028A7D007EBA2 -:10B00000870271680AEBC2000844028A42459ED159 -:10B01000017808299BD140786979884297D1F9B2A3 -:10B0200022463046FEF7E5FE15E70E2F07D0CDF895 -:10B030001C80CDF8208068798DF81C00C8E76989EC -:10B04000EF898B46B5F80C903046FEF734FFABF134 -:10B050004001402901D309204AE0B9F1170F01D37B -:10B06000172F01D20B2043E040280ED000EB8002C6 -:10B0700071680AEBC20008440178012903D14078C5 -:10B0800069798842A9D00A2032E03046FEF7F5FE01 -:10B09000014640282BD001EB810372680AEBC30004 -:10B0A00002EB0008012288F800206A7988F8012064 -:10B0B00070682A894089B84200D938462D8A03230E -:10B0C0002372A282E7812082A4F80C906582084650 -:10B0D00000F07CFB6081A8F81490A8F81870A8F81C -:10B0E0000E50A8F810B0204600F066FBB3E604202E -:10B0F00005212172A4F80A80E08101212173A04971 -:10B10000D1E90421CDE9072169798DF81C10ADF84A -:10B110001E00608807AA3146FFF7DFFBE3E7062F32 -:10B12000E4D3B078904215D13078010712D520F0E1 -:10B13000080030706088414660F31F41012009F02B -:10B1400043F802208DF804002889ADF80800ADF816 -:10B150000A90F7E604213046FEF7C5FE0546402872 -:10B16000C4D002208303009022462946304600F0D6 -:10B1700065FB4146608865F30F2160F31F4108209D -:10B1800009F022F867E60E2FB0D104213046FEF711 -:10B19000AAFE81464028A9D04146608869F30F2164 -:10B1A00060F31F41082009F00FF8288A0790E8890A -:10B1B00000907068AF894089B84200D9384683460C -:10B1C000B5F80A8028890590484600F0FFFA6081AA -:10B1D000079840B10220079B00902246494630461E -:10B1E00000F02CFB37E6B8F1170F1ED3172F1CD336 -:10B1F0000420207200986082E781A4F810B0A4F8BF -:10B200000C8009EB890271680AEBC2000D180099E5 -:10B210000598A5F81480A5F818B0E9812882204681 -:10B2200000F0CAFA0620287015E601200B230090D2 -:10B23000D3E7082FA6D129893046FEF73CFE074602 -:10B2400040289FD007EB870271680AEBC2000844D0 -:10B25000804600F0ECFA002894D16D89B8F80E0011 -:10B260002844B0F5803F05D360883A46314600F067 -:10B270001CFBF0E5002D85D0A8F80E0060883A464A -:10B280003146FFF7F3F808202072384600F09EFAA6 -:10B290006081A58127E770B50D460646032105F0BC -:10B2A000DDFB040004D02078000704D5112070BD18 -:10B2B00043F2020070BD2A4621463046FEF711FFD8 -:10B2C00018B9286860616868A061207840F00800BB -:10B2D0002070002070BD70B50D460646032105F0B4 -:10B2E000BDFB040004D02078000704D4082070BD02 -:10B2F00043F2020070BD2A4621463046FEF724FF85 -:10B3000000B9A582207820F008002070002070BDD0 -:10B310002DE9F04F0E4691B08046032105F09EFBCB -:10B320000446404605F0B6FC07460020079008900A -:10B330000990ADF830000A9002900390049004B98F -:10B34000FFDF0DF1080917BBFFDF20E038460BA92E -:10B35000002204F046FE9DF82C0000F07F050A2D27 -:10B3600000D3FFDF6019017F491E01779DF82C0093 -:10B3700000060CD52A460CA907A8FEF708FE01E036 -:10B380005C20020019F80510491C09F80510761E0A -:10B39000F6B2DBD204F13400FC4D04F1260BDFF8E9 -:10B3A000F0A304F12A07069010E05846069900F031 -:10B3B0006EFA064628700A2800D3FFDF5AF82610D6 -:10B3C00040468847E08CC05DB04202D0208D002806 -:10B3D000EBD10A202870EE4D4E4628350EE00CA920 -:10B3E00007A800F054FA0446375D55F8240000B968 -:10B3F000FFDF55F82420394640469047BDF81E002F -:10B400000028ECD111B027E510B5032105F026FB8B -:10B41000040000D1FFDF0A2104F11C0016F005FC36 -:10B42000207840F00400207010BD10B50C460321B8 -:10B4300005F014FB01190A7F01211AB9808EA14081 -:10B44000084000D0012010BD2DE9F84F894615466F -:10B450008246032105F002FB070004D0284608F0CD -:10B46000FFFE40B903E043F20200BDE8F88F484612 -:10B4700008F01CFF08B11020F7E7786828B1698848 -:10B480000089814201D90920EFE7B9F800001C24A6 -:10B4900018B1402809D2402008E03846FEF7EDFCFC -:10B4A0008046402819D11320DFE7403880B280461B -:10B4B0000146384600F0A5F948B108EB88007968E4 -:10B4C00004EBC000085C012803D00820CDE705206C -:10B4D000CBE7FDF76AFF06000BD008EB8800796820 -:10B4E00004EBC0000C18B9F8000020B1E88910B1D5 -:10B4F00013E01120B9E72888172802D36888172895 -:10B5000001D20720B1E7686838B12B1D22464146B9 -:10B510003846FFF71DF90028A7D104F10C0269464F -:10B520002046FFF70EF8288860826888E082B9F824 -:10B53000000030B102202070E889A080E889A0B125 -:10B540002BE003202070A889A080786881784029AA -:10B5500005D180F8028039465046FEF714FE404679 -:10B5600000F034F9A9F8000021E07868218B4089C7 -:10B57000884200D908462083A6F802A00420307231 -:10B58000B9F800007081E0897082F181208B3082EF -:10B59000A08AB081304600F00FF97868C178402960 -:10B5A00005D180F8038039465046FEF73DFE002065 -:10B5B0005BE770B50D460646032105F04FFA04001F -:10B5C00003D0402D04D2402503E043F2020070BDB9 -:10B5D000403DADB2294600F014F958B105EB8501A4 -:10B5E0001C22606802EBC101084400F020F918B188 -:10B5F000082070BD052070BD2A462146304600F067 -:10B6000054F9002070BD2DE9F0410D4616468046E4 -:10B61000032105F023FA0446402D01D2402500E025 -:10B62000403DADB28CB1294600F0EBF880B105EB9E -:10B6300085011C22606802EBC1014718384600F002 -:10B64000F6F838B10820BDE8F08143F20200FAE7CD -:10B650000520F8E733463A4629462046FFF778F8B2 -:10B660000028F0D1EAB221464046FEF789FF0020CB -:10B67000E9E72DE9F0410D4616468046032105F025 -:10B68000EDF90446402D01D2402500E0403DAFB227 -:10B6900024B1304608F0E4FD38B902E043F202007C -:10B6A000D1E7306808F0DCFD08B11020CBE739465F -:10B6B000204600F0A6F860B107EB87011C22606805 -:10B6C00002EBC1014518284600F0B1F818B1082076 -:10B6D000B9E70520B7E7B088A98A884201D90C20CC -:10B6E000B1E76168E88C4978B0EBC10F01D3132052 -:10B6F000A9E73946204600F078F80146606808233B -:10B700004078C20005F1240005F015F8D6E90012D2 -:10B71000C0E90012FAB221464046FEF7A7FE00201B -:10B7200091E72DE9F0470D461F46904681460321DB -:10B7300005F094F90446402D01D2402001E0A5F126 -:10B74000400086B23CB14DB1384608F0CDFD50B155 -:10B750001020BDE8F08743F20200FAE76068C8B144 -:10B76000A0F80C8024E03146204600F04AF888B169 -:10B7700006EB86011C22606802EBC10145182846D1 -:10B7800000F055F840B10820E3E700002C0000204D -:10B79000742002000520DCE7A5F80880F2B22146FB -:10B7A0004846FEF7EDFE1FB1A88969890844388034 -:10B7B0000020CEE704F0ADBD017821F00F01491C57 -:10B7C00021F0F00110310170FDF7F2BD10B5044613 -:10B7D000402800D9FFDF4034A0B210BD4068426964 -:10B7E0000078484302EBC0007047C2784068037895 -:10B7F00012FB03F24378406901FB032100EBC10017 -:10B800007047C2788A4209D9406801EB81011C2245 -:10B8100002EBC101405C08B1012070470020704775 -:10B820000078062801D90120704700207047007871 -:10B83000062801D00120704700207047F0B401EBCA -:10B8400081061C27446807EBC6063444049D052680 -:10B850002670E3802571F0BCFEF782BA10B54189ED -:10B8600011B1FFF7DDFF08B1002010BD012010BDB0 -:10B8700010B5C18C8278B1EBC20F04D9C18911B166 -:10B88000FFF7CEFF08B1002010BD012010BD10B59C -:10B890000C4601230A22011D04F083FF0078218851 -:10B8A000012282409143218010BDF0B402EB820559 -:10B8B0001C264C6806EBC505072363554B681C79AD -:10B8C000402C03D11A71F0BCFEF7F3BCF0BC7047FA -:10B8D00010B5EFF3108000F0010472B6E94841782A -:10B8E000491C41704078012801D1F7F74BFB002C2F -:10B8F00000D162B610BD70B5E24CE07848B90125C0 -:10B90000E570FFF7E5FFF7F745FB20B1002008F0F1 -:10B910009AF8002070BD4FF080406571C0F8045364 -:10B92000F7E770B5EFF3108000F0010572B6D54C63 -:10B93000607800B9FFDF6078401E6070607808B9F9 -:10B94000F7F724FB002D00D162B670BDCD4810B5CD -:10B95000C17821B100214171C170FFF7E2FF0020E1 -:10B9600010BD10B50446F7F715FBC649C978084065 -:10B9700000D001202060002010BD2DE9F05FDFF82D -:10B9800004934278817889F80620002689F8071008 -:10B99000074689F808600078354620B101280FD0A5 -:10B9A00002280FD0FFDFF7F702FB98B1F7F706FB8D -:10B9B000B0420FD13046F7F705FB0028FAD047E038 -:10B9C0000126F0E7FFF784FFF7F7E4FA0028FBD041 -:10B9D0000226E8E701208407E060C4F80451AA4980 -:10B9E0000E600107D1F84412A74AC1F34231243254 -:10B9F0001160A549343108604FF0020BC4F804B35C -:10BA0000A060DFF888A2DAF80010C94341F3001102 -:10BA100001F10108DAF8001041F01001CAF8001035 -:10BA200000E020BFD4F804010028FAD03046F7F730 -:10BA3000C9FA0028FAD0B8F1000F05D1DAF80010E1 -:10BA400021F01001CAF80010C4F808B3C4F804517A -:10BA500099F807004C4670B1387860B9F7F79AFA50 -:10BA6000074608F09FF96FF0004117B1C4E90310D1 -:10BA700001E0C4E9030116B12571BDE8F09F01277B -:10BA8000BE0727714FF01908C6F80883B761C6F8DA -:10BA90000051C6F80C51C6F81051F7F77BFA10B1F7 -:10BAA000A770376100E02770FFF712FF7649A07991 -:10BAB00020310860C6F80483DFE770B5050000D1C7 -:10BAC000FFDF4FF080424FF0FF30C2F80803002143 -:10BAD000C2F80011C2F80411C2F80C11C2F810111A -:10BAE000684C6170F7F75CFA10B10120E07060708B -:10BAF0002846BDE8704040E72DE9F05F6448D0F883 -:10BB000000B0634A6349083211608406D4F8080122 -:10BB100010B14FF0010801E04FF00008D4F8000127 -:10BB200000B101208146D4F8040108B1012600E0EB -:10BB30000026D4F80C0100B101208246D4F810018F -:10BB400008B1012700E0002748EA090126EA0100C0 -:10BB500020EA0A00B84300D0FFDF0025B8F1000F4B -:10BB600004D0C4F80851012007F06DFF5FEA090016 -:10BB7000DFF810814FF0010913D0C4F8005198F894 -:10BB8000050020B188F80550002007F05CFF98F808 -:10BB9000000030B1F7F7FEF918B188F80290C4F848 -:10BBA00010900EB1C4F80451BAF1000F0CD0C4F8D3 -:10BBB0000C5198F80200464600B9FFDFB5703570A9 -:10BBC000C4F81490FFF7ADFE37B1C4F8105198F8DF -:10BBD000040008B100F020F82D49091DC1F800B09B -:10BBE0004BE770B5274DE87808B9F7F7CFF9012092 -:10BBF0008407A061A87850B1D4F80C0120B90020C6 -:10BC0000F7F7E0F90028F7D10020C4F80C014FF055 -:10BC1000FF30C4F8080370BD2DE9F041194C4FF016 -:10BC200080470125E079F0B1012803D0217A401E38 -:10BC3000814218DAF7F7AEF9064608F0B3F8E17971 -:10BC4000012902D9217A491C21720EB1216900E033 -:10BC5000E168411A022902DA11F1020F0BDC0EB180 -:10BC6000206100E0E060FFF733FEF7F793F928B1B9 -:10BC70003D61A57003E07D61BDE8F0812570002085 -:10BC80002072F9E7380000201805004010ED00E0B0 -:10BC900010050240010000014FF0E0214FF000705C -:10BCA000C1F88001C1F88002384B802283F800245B -:10BCB000C1F80001704700B502460420344903E092 -:10BCC00001EBC0031B792BB1401EC0B2F8D2FFDFDD -:10BCD000FF2000BD41F8302001EBC00100224A7175 -:10BCE0008A7101220A7100BD294A002102EBC000BD -:10BCF0000171704710B50446042800D3FFDF2448C3 -:10BD000000EBC4042079012800D0FFDF6079A1791D -:10BD1000401CC0B2814200D060714FF0E0214FF072 -:10BD20000070C1F8000210BD2DE9F0411948056806 -:10BD300018491948083108601448042690F800048E -:10BD4000134F4009154C042818D0FFDF16E0217866 -:10BD500007EBC1000279012A08D1427983799A421E -:10BD600004D04279827157F8310080472078401C16 -:10BD7000C0B22070042801D300202070761EF6B2D5 -:10BD8000E5D20448001D0560BDE8F08119E000E03F -:10BD90009006002010050240010000014C00002028 -:10BDA000F8B51D46DDE906470E000AD004F072FF23 -:10BDB0002346FF1DBCB231462A46009404F030FBF6 -:10BDC000F8BDD0192246194615F096FE2046F8BD5A -:10BDD000F84B586019721A80C90015F026BF70B56B -:10BDE0000D460446102115F0FEFE258117206081C6 -:10BDF000A07B40F00A00A07370BD4FF6FF720A806E -:10BE00000146032008F0E0B9704700897047827B43 -:10BE1000D30701D1920703D480890880002070479E -:10BE200005207047827B920700D5818170470146CB -:10BE30000020098847F2FE12114200D00120DD499E -:10BE4000497A002901D040F00800704700B5034648 -:10BE5000807BC00701D0052000BD59811846FFF73F -:10BE6000E6FFC00703D0987B40F004009873987BEE -:10BE700040F001009873002000BD827B520700D57E -:10BE800009B14089704717207047827B61F3C30274 -:10BE9000827370472DE9F04F0E46017804464FF04B -:10BEA000010B0BFA01F047F2FF1100EA010961688A -:10BEB0004FF6FF7887B008881D469646404506D065 -:10BEC000B9F1000F07D047F2FE12104203D0012053 -:10BED00007B0BDE8F08F40EA090008804FF0000A83 -:10BEE00095B185F800A022780027052003210223C0 -:10BEF000102A6FD2DFE802F06E0D2C35546F768079 -:10BF000054CBC79CCFFEFDFC20780B28EBD004203F -:10BF1000DEE762682089937B9B077DD5172851D384 -:10BF200013898342FBD39289172A01D3824249D1D4 -:10BF30002A7822F03F02921C2A70A5F80100318075 -:10BF4000616888816068817B21F00201817342E130 -:10BF5000042129702189A5F801106189A5F8031031 -:10BF60008FE0208A3188C01D1FFA80F84145D6D362 -:10BF7000062028702089A5F801006089A5F8030033 -:10BF8000A089A5F805000721208ACDE90001608875 -:10BF90002A4671466369FFF703FFA6F800801AE19D -:10BFA000082A10D0082129702189A5F8011061897B -:10BFB000A5F8031030806A1D694604F10C0006F0F4 -:10BFC000CAF910B1CCE01021EDE730889DF80010DF -:10BFD000084456E00EE10A2028702089A5F80100E7 -:10BFE0003180B2E00C2129702189A5F80110618906 -:10BFF000A5F803103080A8E0218933880BEB4102BB -:10C000001FFA82FA534576D3BAF1050F73D30E2285 -:10C010002A7008EA410100E07FE0CDE9001B60885A -:10C020002A467146E368FFF7BBFEA6F800A0D2E0FF -:10C030006048417A002970D0491E41724068217AD7 -:10C04000E26800EBC105D046A9882868D2F800C094 -:10C050000844A0F1080140F808CC506848608DF809 -:10C0600000308DF801A028680290A888ADF804007F -:10C0700060886946F5F7C6FEA5F80480002E01D059 -:10C0800040463080A7E0287840F080022A70287867 -:10C0900040F040022A7060893288C01C1FFA80F884 -:10C0A00042455DD3287820F03F0012302870228965 -:10C0B000A5F801206089CDE9000160882A46714613 -:10C0C000E368FFF76DFEA6F80080287841063CD5AE -:10C0D00000065ED58DF800B08DF801A03188CDE95D -:10C0E000025A091DADF804100420DFF8C88003E0EF -:10C0F00059E04FE02DE033E0049098F808008DF807 -:10C10000140060886946F5F77DFE074630880C30DC -:10C110003080022F02D0E7B36FE048E09DF8142092 -:10C12000D8F8041098F80830404601EBC2019A4252 -:10C1300016D28A88A2B9427A521C88F809200D606A -:10C1400030888880A6F800A057E061682089888040 -:10C1500041E0A1893288491D1FFA81F8424501D288 -:10C1600004274AE029782A4621F03F011631297038 -:10C170002189A5F801106189A5F80310A189CDE9ED -:10C180000010608871462369FFF70AFEA6F8008058 -:10C19000DBE720E0287820F03F0018302870207A74 -:10C1A0006870338017E060680188090404D40527AB -:10C1B00023E00000B0060020C0882189884201D019 -:10C1C00006271AE01E202870A6F800B060680188D3 -:10C1D00021F400410180B9F1000F0ED0DF486188E1 -:10C1E000002200888300032007F044FF6168207864 -:10C1F000887007E0A6F800A003276068018821EA9C -:10C2000009010180384663E62DE9F04F87B01746F3 -:10C21000109C0D0083461E461AD03078C10703D00B -:10C2200000F03F00192801D9012100E0002120463B -:10C23000FFF723FEA8420BD32088A0F57F41FF39EA -:10C2400006D03078410601D4000603D508203FE629 -:10C2500007203DE600208DF800008DF801003078C1 -:10C260006B1E00F03F0C0122A81E4FF0050A4FF094 -:10C27000020999B2BCF1200F76D2DFE80CF08C10E5 -:10C28000755F7569758D759E75B875BD75CB75D7FC -:10C2900075E4757575F475F275F175F0758C052D8D -:10C2A00079D104208DF80000A0788DF80400708802 -:10C2B000ADF8060030798DF80100707800F03F008D -:10C2C0000C2829D00ADCA0F10200092863D2DFE89B -:10C2D00000F0126215621A621D622000122824D03A -:10C2E00004DC0E281BD01028DAD11BE016281FD042 -:10C2F0001828D5D11FE02078800701E0207840077A -:10C30000002848DAF1E020780007F9E72078C00635 -:10C31000F6E720788006F3E720784006F0E72078FB -:10C320000006EDE72088C005EAE72088C004E7E7BB -:10C3300020888004E4E720884004E1E72078800733 -:10C3400029D5032D27D18DF800A0B6F8010083E090 -:10C35000217849071FD5062D1DD381B27078012899 -:10C3600003D0022817D102E0CCE0022000E0102028 -:10C3700006228DF8002072788DF80420801CB1FB15 -:10C38000F0F2ADF8062092B242438A4203D10397FD -:10C39000ADF80890A9E07BE02078000778D5072168 -:10C3A00098B28DF800108108ADF80410B0EB810F41 -:10C3B0006ED10297ADF8062097E02178C90667D5BF -:10C3C000022D65D381B208208DF800007078022814 -:10C3D0005ED300BFB1FBF0F28DF80400ADF806208B -:10C3E00092B242438A4253D1ADF808907CE0207863 -:10C3F00080064DD5092003E02078400648D50A2064 -:10C400008DF80000A088ADF80400ADF80610ADF876 -:10C41000082069E02078000672D50B20ADF80410E2 -:10C420008DF80000ADF8062002975EE02188C9056E -:10C4300066D5022D64D381B20C208DF8000070788F -:10C4400004285DD3C6E72088C00459D5012D57D1F3 -:10C450000D208DF80000A088ADF8040045E021E033 -:10C4600026E016E0FFE72088800449D5052D47D354 -:10C470000E208DF80000A088ADF80400B6F8030087 -:10C480006D1FADF80850ADF80600ADF80AA02BE01E -:10C4900036E02088400433D5012D31D10F208DF8AE -:10C4A000000022E0208800042AD4B6F80100E080D1 -:10C4B000A07B000724D5032D22D3307800F03F0065 -:10C4C0001B2819D011208DF80000208840F400406E -:10C4D000A4F80000B6F80100ADF80400ED1E03203A -:10C4E000ADF80650ADF80800039769465846F5F7D1 -:10C4F00089FC050008D016E010208DF80000E9E75F -:10C50000072510E008250EE0307800F03F001B28DA -:10C5100009D01D2807D05946032007F055FE208872 -:10C5200000F400402080A07B400708D52046FFF79C -:10C530007EFCC00703D1A07B20F00400A073284636 -:10C54000C6E400B587B0032805D18DF8000088B295 -:10C550006946F5F757FC07B000BD0000B0060020A3 -:10C56000F8B51D46DDE906470E000AD004F092FB3F -:10C570002346FF1DBCB231462A46009403F050FF0B -:10C58000F8BDD0192246194615F0B6FA2046F8BD76 -:10C590002DE9FF4F8DB09B46DDE91B57DDF87CA0F0 -:10C5A0000C46082B05D0E06901F00CF950B11020C1 -:10C5B000D2E02888092140F0100028808AF8001075 -:10C5C000022617E0E16901208871E2694FF42051E9 -:10C5D0009180E1698872E06942F601010181E069B8 -:10C5E000002181732888112140F0200028808AF8DA -:10C5F0000010042638780A900A2038704FF002099B -:10C6000004F118004D460C9001F09FFBB04681E00C -:10C61000BBF1100F0ED1022D0CD0A9EB0800801C2D -:10C6200080B20221CDE9001005AB52461E990D984B -:10C63000FFF796FFBDF816101A98814203D9F74804 -:10C6400000790F9004E003D10A9808B138702FE008 -:10C650004FF00201CDE900190DF1160352461E9963 -:10C660000D98FFF77DFF1D980088401B801B83B24B -:10C67000C6F1FF00984200D203461E990BA8D9B11B -:10C680005FF00002DDF878C0CDE9032009EB060178 -:10C6900089B2CDE901C10F980090BDF816100022B3 -:10C6A0000D9801F0D5FB387070B1C0B2832807D067 -:10C6B000BDF8160020833AE00AEB09018A19E1E788 -:10C6C000022011B0BDE8F08FBDF82C00811901F0F7 -:10C6D000FF08022D0DD09AF80120424506D1BDF881 -:10C6E0002010814207D0B8F1FF0F04D09AF80180E2 -:10C6F0001FE08AF80180C94800680178052902D145 -:10C70000BDF81610818009EB08001FFA80F905EBCF -:10C71000080085B2DDE90C1005AB0F9A01F018FB9B -:10C7200028B91D980088411B4145BFF671AF022D05 -:10C7300013D0BBF1100F0CD1A9EB0800801C81B203 -:10C740000220CDE9000105AB52461E990D98FFF776 -:10C7500007FF1D980580002038700020B1E72DE903 -:10C76000F8439C46089E13460027B26B9AB3491FB4 -:10C770008CB2F18FA1F57F45FF3D05D05518AD88EE -:10C780002944891D8DB200E000252919B6F83C80A6 -:10C790000831414520D82A44BCF8011022F8021B78 -:10C7A000BCF8031022F8021B984622F8024B91466F -:10C7B00004F05EFA4FF00C0C41464A462346CDF891 -:10C7C00000C003F0F4FDF587B16B00202944A41DDF -:10C7D0002144088003E001E0092700E08327384670 -:10C7E000BDE8F88310B50B88848F9C420CD9846B0C -:10C7F000E018048844B1848824F40044A41D234430 -:10C800000B801060002010BD822010BD2DE9F04784 -:10C810008AB00025904689468246ADF81850072711 -:10C820004BE0059806888088000446D4A8F800608C -:10C8300007A8019500970295CDE903504FF40073C6 -:10C8400000223146504601F003FB04003CD1BDF804 -:10C850001800ADF82000059804888188B44216D1EC -:10C860000A0414D401950295039521F40041009720 -:10C87000049541F4804342882146504601F0BEF8B9 -:10C8800004000BD10598818841F40041818005AAFC -:10C8900008A94846FFF7A6FF0400DCD000970598DA -:10C8A00002950195039504950188BDF81C3000227E -:10C8B000504601F0A3F8822C06D105AA06A94846E5 -:10C8C000FFF790FF0400ACD0ADF8185004E00598D5 -:10C8D000818821F40041818005AA06A94846FFF716 -:10C8E00081FF0028F3D0822C03D020460AB0BDE897 -:10C8F000F0870020FAE710B50C46896B86B051B17D -:10C900000C218DF80010A18FADF80810A16B0191DA -:10C910006946FAF7C9FB00204FF6FF71A063E18773 -:10C92000A08706B010BD2DE9F0410D460746896B82 -:10C930000020069E1446002911D0012B0FD132464B -:10C9400029463846FFF762FF002808D1002C06D0A0 -:10C95000324629463846BDE8F04100F042BFBDE806 -:10C96000F0812DE9FC411446DDE9087C0E46DDE945 -:10C970000A15521DBCF800E092B2964502D207207B -:10C98000BDE8FC81ACF8002017222A70A5F80160F0 -:10C99000A5F803300522CDE900423B462A46FFF7C1 -:10C9A000DFFD0020ECE770B50C4615464821204617 -:10C9B00015F03BF904F1080044F81C0F00204FF675 -:10C9C000FF71E06161842084A5841720E08494F8DD -:10C9D0002A0040F00A0084F82A0070BD4FF6FF726A -:10C9E0000A800146042007F0EFBB30B585B00C4645 -:10C9F0000546FFF780FFA18E284629B101218DF859 -:10CA000000106946FAF750FB0020E0622063606383 -:10CA100005B030BDB0F84000704700005000002065 -:10CA200090F84620920703D4408808800020F3E75E -:10CA30000620F1E790F846209207EDD5A0F84410C3 -:10CA4000EAE70146002009880A0700D5012011F015 -:10CA5000F00F01D040F00200CA0501D540F00400FB -:10CA60008A0501D540F010004A0501D540F02000AC -:10CA70000905D1D540F04000CEE700B5034690F857 -:10CA80004600C00701D0062000BDA3F8421018469A -:10CA9000FFF7D7FF10F0760F05D093F8460040F06F -:10CAA000040083F8460013F8460F40F001001870A8 -:10CAB000002000BD90F84620520700D511B1B0F813 -:10CAC0004200A9E71720A7E710F8462F61F3C30239 -:10CAD0000270A1E72DE9FF4F9BB00E00DDE92B347A -:10CAE000DDE92978289D25D02878C10703D000F0FA -:10CAF0003F00192801D9012100E000212046FFF75D -:10CB0000D9FFB04216D3287841060FD400F03F0178 -:10CB10001E2909D0218811F47F6F0BD13A884AB1C0 -:10CB2000A1F57F42FF3A05D0010606D500F03F008F -:10CB3000122802D004201FB0C4E5FC491D984FF014 -:10CB4000000A08718DF818A08DF830A00CAA0A60B0 -:10CB5000ADF81CA0ADF824A02978994601F03F0259 -:10CB6000701F5B1C04F1180CD3464FF0030ECDF878 -:10CB700028C01F2A7ED2DFE802F07D7D107D227D55 -:10CB8000AE7DF77DF67DF57DF47DF77DF37D7D7DD2 -:10CB9000F27DF17D7D7D7D7DF00094F84610B5F845 -:10CBA0000100890767D5032E65D14FF40061ADF808 -:10CBB000241060808DF830E0ADF83400E9E2052EF5 -:10CBC000F2D1B5F801002083ADF81C00B5F80310D0 -:10CBD0006183002870D088426ED884F80AB0A4F827 -:10CBE00008B04FF6FF7020840A9801F0AEF80520D7 -:10CBF00089F8000002208346029011AB1D9A0A9921 -:10CC00001B9801F0A5F820B15EE000BF8DF8180078 -:10CC1000FEE29DF84A00012804D0022089F80100B4 -:10CC2000102003E0012089F8010002200390002277 -:10CC300004A912A805F08FFBE8BB9DF8101003981B -:10CC400088423ED13A88891CA2EB0B00884238DB2F -:10CC500002990220CDE900010DF146034A46414602 -:10CC60001B98FFF77DFC02980BF1020B801C81B230 -:10CC700017AA01E0ACE2B1E0029104A912A805F004 -:10CC80006AFB02999DF81000CDE9000117AB4A46F6 -:10CC900041461B98FFF764FC9DF8100011AB0BEBAD -:10CCA00000011FFA81FB02991D9A084480B202908C -:10CCB0000A991B9801E004E091E001F049F800288E -:10CCC000B5D0BBF1020F03D10A208DF818005DE248 -:10CCD000A7F800B05AE2CDF80CB0072E7ED3B5F815 -:10CCE00001002083ADF81C00B5F803206283002802 -:10CCF00075D0904273D84FF0010B84F80AB0B5F8A4 -:10CD0000050020810020A073E06900F05BFD80B980 -:10CD1000E16942F6010081F806B0E2694FF4205162 -:10CD20009180E16981F80AB0E1690881E169002038 -:10CD30008873F01F20841E984FF0070B6062A4F8E0 -:10CD400022B00A9801F001F889F800B0012083466A -:10CD500004900020ADF846002AE026E2B0E147E169 -:10CD6000EDE01FE2B0E088E04FE000BFBBF1010F53 -:10CD700015D0E0698079012803D1BDF84400ADF8F1 -:10CD80000E0004990420CDE9000103AB4A46414658 -:10CD90001B98FFF7E5FB0498001D80B20490BDF8D6 -:10CDA0004600ADF80C00ADF80E0005981FFA80FBA8 -:10CDB00011AB1D9A0A991B9800F0CAFF28B939884F -:10CDC0000BF1040005908142D0D2BBF1010F3FF47A -:10CDD0001BAFE0698079012808D001E098E023E0EA -:10CDE000BDF84410A1F57F40FF3803D1BDF84400E1 -:10CDF000ADF80E0004990420CDE9000103AB4A46CA -:10CE000041461B98FFF7ACFB62E7072E01D0152EB9 -:10CE10007ED1B5F801102183ADF81C10B5F80320C0 -:10CE2000628309B1914201D90120EFE60121A1728B -:10CE3000A4F808B084F80EB0052E07D0C0B2691D62 -:10CE4000E26905F069FA00287FF4DEAE4FF6FF7064 -:10CE5000208401A806AA09A9CDF800B080E88603BD -:10CE60002878214600F03F031D9A1B98FFF790FB9E -:10CE70008246208BADF81C0088E10120032EC7D12B -:10CE80004021ADF82410B5F801102183ADF81C1035 -:10CE90000AAAB8F1000F00D00023CDE902030492E2 -:10CEA0001D98CDF80480009038880022401E83B27F -:10CEB0001B9800F0CDFF8DF8180050BB0B2189F8AE -:10CEC0000010BDF8280038E04FF0010C052E9FD16E -:10CED0008020ADF82400B5F801102183B5F80300D7 -:10CEE0002084ADF81C10B0F5007F01D907208DE635 -:10CEF00040F47C42228412A8B8F1000F00D0002335 -:10CF0000CDE90330CDE9018C1D980090388801E00F -:10CF10009CE007E0401E83B21B9800F099FF8DF85B -:10CF2000180028B18328A7D10220C7E050000020B4 -:10CF30000D2189F80010BDF84800401C25E1C80902 -:10CF400000EB40020EEB8200B04203D948067DD5CB -:10CF500058461AE1B5F80110ADF81C102A785206AF -:10CF600008D506228DF830202A78120605D58DF8CE -:10CF700030B02FE107228DF830200323CDE9023BAA -:10CF8000DDF878C0CDF810B01D9AA6EB000800922D -:10CF9000CDF804C01FFA88F300221B9800F02EFD84 -:10CFA0008DF818008DF830B0297849060DD5208805 -:10CFB000C00506D5208BBDF81C10884201D1C4F8ED -:10CFC00024B058468DF818B0DFE0832801D14FF027 -:10CFD000020A4FF48070ADF82400BDF81C002083D5 -:10CFE000A4F820801E986062032060841321C9E0A9 -:10CFF000052E2BD3B5F80110ADF81C10A28F32B35B -:10D00000A2F57F43FE3B29D008228DF8302005236E -:10D01000CDE9023BDDF878C0CDF810B01D9A80B2A2 -:10D02000CDF804C040F400430092B5F803201B98EB -:10D0300000F0E4FC4FF400718DF818008DF830B06A -:10D04000ADF82410832813D010B301E0DBE005E035 -:10D05000A08FA0F57F41FE3907D0D9E00B228DF8D3 -:10D0600030204FF6FE72A287D1E7A4F83CB0CFE0A3 -:10D0700000942B4631461E9A1B98FFF770FB8DF8E3 -:10D08000180008B183284BD1BDF81C0020834BE762 -:10D0900000942B4631461E9A1B98FFF760FB8DF8D3 -:10D0A0001800E8BBE18FA06B0844831D8DE888035E -:10D0B0004388828801881B98FFF753FC824665E00D -:10D0C00095F80180022E6FD15FEA080002D0B8F116 -:10D0D000010F7FD109208DF8300007A800908DF84E -:10D0E00034804346002221461B98FFF71CFC8DF834 -:10D0F00036008DF837B050B9B8F1010F11D0B8F142 -:10D10000000F04D1A08FA0F57F41FF3909D0A08F77 -:10D1100038B14FF480608DF830B0ADF824000EE0E7 -:10D1200034E00CA91B98F9F7BFFF82464FF48060EA -:10D130008DF830B0ADF82400BAF1020F06D0FB48EC -:10D140000068C07928B18DF8180027E0A4F818808D -:10D1500042E0BAF1000F03D081208DF818003BE0C7 -:10D1600007A800904346012221461B98FFF7DBFBEE -:10D170008DF8180021461B98FFF7BDFB9DF818009D -:10D1800020B9192189F80010012038809DF830005D -:10D1900020B10CA91B98F9F787FF8246BAF1000F5E -:10D1A00033D019E0062031E514E02078000711D5CE -:10D1B000012E0FD10A208DF83000E088ADF8340040 -:10D1C00004201B9907F000F80820ADF824007FE543 -:10D1D000480618D54FF0040A2088BDF824100843EB -:10D1E0002080BDF8240080050BD5A18FA1F57F40DC -:10D1F000FE3806D11E98E06228982063A6864FF07C -:10D20000030A504697E4042000E59DF8180078B121 -:10D21000012089F80000297889F80110BDF81C1058 -:10D22000A9F802109DF8180089F80400052038803C -:10D230002088BDF8241088432080E2E72DE9FF4FC5 -:10D240008846087895B0012181404FF20900249C5E -:10D250000140ADF820102088DDF88890A0F57F42CD -:10D260004FF0000AFF3A02D029B1000703D5012090 -:10D2700019B0BDE8F08F239E4FF0000B0EA886F882 -:10D2800000B018995D460988ADF83410A7498DF8AB -:10D290001CB0179A0A718DF838B0086098F8000031 -:10D2A00001283BD0022809D003286FD1307820F024 -:10D2B0003F001D303070B8F80400E08098F800108E -:10D2C0000320022904D1317821F03F011B31317054 -:10D2D00094F84610090759D505ABB9F1000F13D0E2 -:10D2E000002102AA82E80B000720CDE90009BDF861 -:10D2F0003400B8F80410C01E83B20022159800F064 -:10D30000A7FD0028D1D101E0F11CEAE7B8F804003C -:10D31000A6F80100BDF81400C01C04E198F805103F -:10D320008DF81C1098F80400012806D04FF4007AFC -:10D3300002282CD00328B8D16BE12188B8F8080066 -:10D3400011F40061ADF8201020D017281CD3B4F8D8 -:10D350004010814218D3B4F84410172901D38142F8 -:10D3600012D1317821F03F01C91C3170A6F80100BB -:10D370000321ADF83410A4F8440094F8460020F0DE -:10D38000020084F8460064E105257DE176E120880D -:10D3900008F1080700F4FE60ADF8200010F0F00F6F -:10D3A0001BD010F0C00F03D03888228B9042EBD1F5 -:10D3B00099B9B878C00710D0B9680720CDE902B193 -:10D3C000CDF804B00090CDF810B0FB88BA88398849 -:10D3D000159800F013FB0028D6D12398BDF8201033 -:10D3E000401C80294ED006DC10290DD020290BD0FE -:10D3F000402987D124E0B1F5807F70D051456DD0B0 -:10D40000B1F5806F97D1DDE0C80601D5082000E0B6 -:10D41000102082460DA907AA0520CDE902218DF82A -:10D420003800ADF83CB0CDE9049608A93888CDE9BC -:10D4300000015346072221461598FFF7A9F8A7E0F7 -:10D440009DF81C2001214FF00A0A002A9BD105AB50 -:10D45000B9F1000F00D00020CDE902100720CDE97E -:10D460000009BDF834000493401E83B2218B0022D2 -:10D47000159800F0EDFC8DF81C000B203070BDF805 -:10D48000140020E09DF81C2001214FF00C0A002A16 -:10D4900022D113ABB9F1000F00D00020CDE902106A -:10D4A0000720CDE900090493BDF83400228C401E0A -:10D4B00083B2218B159800F0CBFC8DF81C000D2059 -:10D4C0003070BDF84C00401CADF8340005208DF8DC -:10D4D0003800208BADF83C00BBE000E028E0388845 -:10D4E000218B88427FF450AF9DF81C004FF0120A48 -:10D4F00000281AD1606A98B1B878C0073FF444AFE9 -:10D50000BA680720CDE902B2CDF804B00090CDF89A -:10D5100010B0FB88BA88159800F070FA8DF81C00DE -:10D52000132030700120ADF8340092E0500000204C -:10D530003988208B8142D5D19DF81C004FF0160A06 -:10D540000028A06B08D0E0B34FF6FF7000215F46C3 -:10D55000ADF808B0019027E068B1B978C907C1D12A -:10D56000E18F0DAB0844821D03968DE80C024388C1 -:10D570008288018809E0B878C007BFD0BA680DABCF -:10D5800003968DE80C02BB88FA881598FFF7E9F935 -:10D5900005005ED0072D72D076E0019005AA02A9A1 -:10D5A0002046FFF71FF90146E28FBDF808008242CE -:10D5B00001D00029F1D0E08FA16B084407800198C9 -:10D5C000E08746E09DF81C004FF0180A40B1208B20 -:10D5D000C8B13888208321461598FFF78CF938E0C8 -:10D5E00004F118000090237E012221461598FFF7D0 -:10D5F0009AF98DF81C000028EDD119203070012017 -:10D60000ADF83400E7E7052521461598FFF773F9D3 -:10D610003AE0208800F40070ADF8200050452DD18C -:10D62000A08FA0F57F41FE3901D006252CE0D8F867 -:10D6300008004FF0160A48B1A063B8F80C10A18793 -:10D640004FF6FF71E187A0F800B002E04FF6FF70DF -:10D65000A087BDF8200030F47F611AD07823002223 -:10D660000420159906F006FD98F800002071208826 -:10D67000BDF82010084320800EE000E00725208838 -:10D68000BDF8201088432080208810F47F6F1CD0C4 -:10D690003AE02188814321809DF8380020B10EA90D -:10D6A0001598F9F701FD05469DF81C000028EBD000 -:10D6B00086F801A001203070208B70809DF81C003E -:10D6C00030710520ADF83400DEE7A18EE1B1189885 -:10D6D0000DAB0088ADF834002398CDE90304CDE903 -:10D6E0000139206B0090E36A179A1598FFF7F2F959 -:10D6F000054601208DF838000EA91598F9F7D4FCDD -:10D7000000B10546A4F834B094F8460040070AD5A5 -:10D710002046FFF796F910F0760F04D114F8460F63 -:10D7200020F0040020701898BDF8341001802846BD -:10D730009EE500B585B0042806D102208DF80000D2 -:10D7400088B26946F9F7B0FC05B000BD10B5384C99 -:10D750000B782268012B02D0022B2AD111E013781A -:10D760000BB1052B01D10423137023688A889A809A -:10D770002268CB88D38022680B8913814989518123 -:10D780000DE08B8893802268CB88D38022680B8938 -:10D7900013814B8953818B899381096911612168B8 -:10D7A000F9F782FC226800210228117003D00028BA -:10D7B00000D0812010BD832010BD806B002800D0D8 -:10D7C000012070478178012909D10088B0F5205FD8 -:10D7D00003D042F60101884201D1002070470720A2 -:10D7E0007047F0B587B0002415460E460746ADF8E1 -:10D7F000144010E0069801882980811DCDE902417E -:10D800000721019404940091838842880188384656 -:10D8100000F0F4F830B906AA05A93046FEF7E2FF99 -:10D820000028E7D0822800D1002007B0F0BD00001A -:10D830005000002010B58B7883B102789A4205D150 -:10D840000B885BB102E08B79091D4BB18B789A4252 -:10D85000F9D1B0F801300C88A342F4D1002010BDFA -:10D86000812010BD072826D012B1012A27D103E05C -:10D87000497801F0070102E04978C1F3C2010529A6 -:10D880001DD2DFE801F00318080C12000AB10320D2 -:10D8900070470220704704280DD250B10DE00528D2 -:10D8A00009D2801E022808D303E0062803D00328EB -:10D8B00003D005207047002070470F20704781205B -:10D8C0007047C0B282060BD4000607D5FE48807AA6 -:10D8D0004143C01D01EBD00080B27047084670473D -:10D8E0000020704770B513880B800B781C0625D577 -:10D8F000F54CA47A844204D843F01000087000204C -:10D9000070BD956800F0070605EBD0052D78F54051 -:10D9100065F304130B701378D17803F0030341EA25 -:10D92000032140F20123B1FBF3F503FB15119268CB -:10D93000E41D00FB012000EBD40070BD906870BDB9 -:10D9400037B51446BDF8041011809DF804100A067E -:10D950001ED5C1F30013DC49A568897A814208D835 -:10D96000FE2811D1C91DC9085A422846F5F73FFBC8 -:10D970000AE005EBD00100F0070201250878954088 -:10D98000A843934018430870207820F010002070BE -:10D990003EBD2DE9F0410746C81C0E4620F00300AD -:10D9A000B04202D08620BDE8F081C74D0020344649 -:10D9B0002E60AF802881AA72E8801AE0E988491CAD -:10D9C000E980810614D4E17800F0030041EA0020E8 -:10D9D00040F20121B0FBF1F201FB12012068FFF7D8 -:10D9E00070FF2989084480B22881381A3044A06029 -:10D9F0000C3420784107E1D40020D4E72DE9FF4F13 -:10DA000089B01646DDE9168A0F46994623F440454B -:10DA1000084600F00DFB04000FD0099802F0E6FF65 -:10DA20000290207800060AD5A748817A02988142A0 -:10DA300005D887200DB0BDE8F08F0120FAE7224617 -:10DA400001A90298FFF74EFF834600208DF80C00D5 -:10DA50004046B8F1070F1AD001222146FFF702FF16 -:10DA60000028E7D12078400611D502208DF80C005F -:10DA7000ADF81070BDF80400ADF81200ADF81460F8 -:10DA80001898ADF81650CDF81CA0ADF818005FEA54 -:10DA9000094004D500252E46A84601270CE0217830 -:10DAA000E07801F0030140EA012040F20121B0FBDF -:10DAB000F1F2804601FB12875FEA494009D5B8457B -:10DAC00007D1A178207901F0030140EA0120B0429A -:10DAD00001D3BE4201D90720ACE7A8191FFA80F98B -:10DAE000B94501D90D20A5E79DF80C0028B103A97F -:10DAF0000998F9F7D7FA00289CD1B84507D1A07842 -:10DB00004FEA192161F30100A07084F804901A987B -:10DB100000B10580199850EA0A0027D0199830B151 -:10DB20000BEB06002A46199913F0E6FF0EE00BEB0B -:10DB300006085746189E099803F09AF82B46F61DDA -:10DB4000B5B239464246009502F031FC224601A9A1 -:10DB50000298FFF7C7FE9DF80400224620F010004F -:10DB60008DF80400DDE90110FFF7EAFE002061E70F -:10DB70002DE9FF4FDFF8509182461746B9F806109D -:10DB8000D9F8000001EB410100EB810440F20120D3 -:10DB9000B2FBF0F185B000FB11764D46DDF84C800C -:10DBA00031460698FFF78DFE29682A898B46611A4F -:10DBB0000C3101441144AB8889B28B4202D88420D5 -:10DBC00009B038E70699CDB2290603D5A90601D5D3 -:10DBD0008520F5E7B9F806C00CF1010C1FFA8CFCA2 -:10DBE000A9F806C0149909B1A1F800C0A90602D588 -:10DBF000C4F8088007E0104480B2A9F80800191A98 -:10DC000001EB0B00A0602246FE200699FFF798FE6C -:10DC1000E77026712078390A61F30100320AA17891 -:10DC200040F0040062F30101A17020709AF8020034 -:10DC30006071BAF80000E08000262673280602D53D -:10DC400099F80A7000E00127A80601D54FF00008F6 -:10DC50004D4600244FF007090FE0CDE90268019618 -:10DC6000CDF800900496E9882046129B089AFFF7A9 -:10DC7000C5FE0028A4D1641CE4B2BC42EDD3002050 -:10DC80009EE72DE9F047804600F0D2F9070005D065 -:10DC9000002644460C4D40F2012919E00120BDE860 -:10DCA000F087204600F0C4F90278C17802F0030240 -:10DCB00041EA0222B2FBF9F309FB13210068FFF7E6 -:10DCC00000FE304486B201E0BC060020641CA4B211 -:10DCD000E988601E8142E4DCA8F10100E88028891F -:10DCE000801B288100203870D9E710B5144631B167 -:10DCF000491E218002F07AFEA070002010BD012094 -:10DD000010BD10B5D24904460088CA88904201D39C -:10DD1000822010BD096800EB400001EB80025079C1 -:10DD2000A072D08820819178107901F0030140EA37 -:10DD30000120A081A078E11CFFF7D4FD206120889C -:10DD4000401C2080E080002010BD0121018270472E -:10DD50002DE9FF4F85B04FF6FF788246A3F800808B -:10DD600048681F460D4680788DF806004868008890 -:10DD7000ADF8040000208DF80A00088A0C88A04243 -:10DD800000D304462C8241E0288A401C2882701D62 -:10DD90006968FFF74FFDB8BB3988414501D1601E66 -:10DDA00038806888A04236D3B178307901F0030119 -:10DDB00040EA012901A9701DFFF73CFD20BB29891C -:10DDC00041452CD0002231460798FFF74BFDD8B9CA -:10DDD0002989494518D1E9680391B5F80AC0D6F8F0 -:10DDE00008B05046CDF800C002F042FFDDF800C098 -:10DDF0005A460CF1070C1FFA8CFC4B460399CDF8E0 -:10DE000000C002F097FA50B1641CA4B2204600F0A2 -:10DE10000FF90600B8D1641E2C828220D0E67C80E7 -:10DE20007079B871F088B8803178F07801F003012A -:10DE300040EA01207881A7F80C90504602F0D6FD08 -:10DE4000324607F10801FFF74DFD38610020B7E6C3 -:10DE50002DE9FF4F87B081461C469246DDF860B041 -:10DE6000DDF85480089800F0E3F805000CD048462F -:10DE700002F0BCFD2978090608D57549897A8142E6 -:10DE800004D887200BB0D6E50120FBE7CAF30906CA -:10DE90002A4601A9FFF726FD0746149807281CD03B -:10DEA00000222946FFF7DEFC0028EBD12878400647 -:10DEB00013D501208DF808000898ADF80C00BDF8C6 -:10DEC0000400ADF80E00ADF81060ADF8124002A9E4 -:10DED0004846F9F7E7F80028D4D12978E87801F026 -:10DEE000030140EA0121AA78287902F0030240EAFE -:10DEF0000220564507D0B1F5007F04D9611E81424A -:10DF000001DD0B20BEE7864201D90720BAE7801B5E -:10DF100085B2A54200D92546BBF1000F01D0ABF870 -:10DF20000050179818B1B9192A4613F0E5FDB8F159 -:10DF3000000F0DD03E4448464446169F02F0AAFE0C -:10DF40002146FF1DBCB232462B46009402F068FA0F -:10DF5000002097E72DE9F04107461D461646084682 -:10DF600000F066F804000BD0384602F03FFD21783F -:10DF7000090607D53649897A814203D8872012E5F8 -:10DF8000012010E522463146FFF7ACFC65B121784F -:10DF9000E07801F0030140EA0120B0F5007F01D8EC -:10DFA000012000E0002028700020FCE42DE9F04171 -:10DFB00007461D461646084600F03AF804000BD006 -:10DFC000384602F013FD2178090607D52049897AE1 -:10DFD000814203D88720E6E40120E4E4224631466A -:10DFE000FFF7AEFCFF2D14D02178E07801F003029A -:10DFF00040EA022040F20122B0FBF2F302FB1300E0 -:10E0000015B900F2012080B2E070000A60F301014E -:10E0100021700020C7E410B50C4600F009F828B1C3 -:10E02000C18821804079A070002010BD012010BD62 -:10E030000749CA88824209D340B1096800EB400011 -:10E040006FF00B0202EB800008447047002070471D -:10E05000BC06002010B50C4601F03AFD80B3204606 -:10E0600000F0B7FA68B32278102A09D0112A07D035 -:10E07000022A05D0032A03D0162A2ED0FFDF1DE086 -:10E08000A0781E282BD00EDC0C2824D008DC092810 -:10E0900027D2DFE800F013261726261E1E1A1C00C2 -:10E0A00012281ED11BE0302819D01ADDA0F13A0049 -:10E0B000032816D2DFE800F011150B00002010BD78 -:10E0C00013E010E043F20200F9E70420F7E70D2027 -:10E0D000F5E70F20F3E70820F1E71120EFE707202D -:10E0E000EDE70320EBE7FFDFE8E7FFDFE6E700F01F -:10E0F00070BA70B50346002002466FF02F050EE09F -:10E100009C5CA4F130060A2E02D34FF0FF3070BDA4 -:10E1100000EB800005EB4000521C2044D2B28A4242 -:10E12000EED370BD30B50A240AE0B0FBF4F304FB73 -:10E1300013008D18303005F8010C521E1846D2B26B -:10E14000002AF2D130BD30B500234FF6FF7510E044 -:10E15000040A44EA002084B2C85C6040C0F303149F -:10E16000604005EA00344440E0B25B1C84EA4010A1 -:10E170009BB29342ECD330BD10B50AF0FFF90428EE -:10E1800003D00AF0FBF9052802D108F0A0FC28B959 -:10E190000BF056FB20B107F047FB08B1012010BD82 -:10E1A000002010BD0178406819B190F8721059B97B -:10E1B00001E001F017BD90F8041129B190F80401B5 -:10E1C000042801D0012070470020704770B50C462C -:10E1D0000546062102F042FC606008B1002006E01E -:10E1E0000721284602F03AFC606018B10120207037 -:10E1F000002070BD022070BD2DE9FC470C4606468C -:10E200006946FFF7E3FF00287DD19DF8000050B17B -:10E2100007F09CFAB0427CD0214630460EF0A1F9BE -:10E22000002873D12DE008F065F9B04271D0214685 -:10E2300030460CF041FC002868D1019D95F8C800DB -:10E2400022E0012000E00020804695F835004FF0E4 -:10E25000010A4FF00009F0B195F8360080071AD591 -:10E2600084F8019084F800A084F80290A68095F8C4 -:10E270003710A171298F2181698F618185F83590CF -:10E2800044E0019D95F8040158350028DBD1A87EB3 -:10E290000028D8D0D5E7304602F0FCFC070000D1BA -:10E2A000FFDF384601F051FE40B184F801900E21A5 -:10E2B0002170A680E08084F802A027E0304602F0BA -:10E2C000D7FC070000D1FFDFB8F1000F21D038469E -:10E2D00001F0CCFEB8B19DF8000038B90198D0F833 -:10E2E000F0004188B14201D180F80090304607F03B -:10E2F000C3F884F801900B21217084F80290A68065 -:10E30000E97EA17100E004E085F81A900120BDE8E3 -:10E31000FC870020FBE71CB56946FFF757FF00B1FB -:10E32000FFDF684601F06CFCF94900208968A1F81C -:10E33000CA001CBD2DE9FC4104460E46062002F031 -:10E3400037FB0546072002F033FB2844C7B20025FF -:10E35000A8463E4417E02088401C80B22080B0428E -:10E3600002D34046A4F8008080B2B84204D3B04241 -:10E3700002D20020BDE8FC816946FFF727FF002894 -:10E38000F8D06D1CEDB2AE42E5D84FF6FF7020809C -:10E390001220EFE738B54FF6FF70ADF800000DE042 -:10E3A0000621BDF8000002F06BFB04460721BDF812 -:10E3B000000002F065FB0CB100B1FFDF00216846F0 -:10E3C000FFF7B8FF0028EBD038BD2DE9F047D1A109 -:10E3D0000F79D1F8008007F0BDF810F003F8CF4CAA -:10E3E0004FF004091020A4F8389060874FF6FF76AC -:10E3F000A4F85460A4F85660002584F8315004F85D -:10E400002E5BC6492570A5713E39A573C1F87B8086 -:10E4100081F87F707B31481E0CF029FD25751B208B -:10E42000E0824FF4A47121836083A1830321A1774B -:10E4300084F81F9020846084B848A1843E38057019 -:10E440004680B3480C300570B448103805704680DB -:10E45000BDE8F08770B5AE4C0D466060217006F0E7 -:10E46000F3FFFFF797FFFFF7B0FF207809F031FDCA -:10E4700008F02EF9217860680CF00CFC20780FF081 -:10E4800011FA28460AF071FE07F06AF921786068EF -:10E490000EF068F9BDE870400FF0A4BF10B501247C -:10E4A0000AB1002010BD21B1012903D0002420466B -:10E4B00010BD022111F0C6FBF9E72DE9F047040079 -:10E4C00000D1FFDF954D002695F8310058B16670F8 -:10E4D0001620207095F83200A07095F83300E07097 -:10E4E00085F8316068E0287840B12C22A91C2046CC -:10E4F00013F002FB102020702E705DE095F82E00C6 -:10E5000060B10120E07095F82F00A07095F8300000 -:10E5100060701120207085F82E604DE07F48022148 -:10E5200056308246FFF706FF00B1FFDFB5F8569080 -:10E53000062002F03DFA0746072002F039FA384477 -:10E54000C7B2781C00F0FF08B5F85600B84212D1E7 -:10E55000204607F04BFF50BB95F8340070B366704F -:10E56000132020702021A01C13F03DFB0220A0707E -:10E5700085F8346020E040451AD1204607F09CF829 -:10E58000E0B12078132817D1A0783C2814D1A088B6 -:10E59000072102F063FA050000D1FFDF288806F0AA -:10E5A0006BFFA088072102F06BFA00B1FFDF03E0E8 -:10E5B0002146FFF721FE08B1012049E7022150461C -:10E5C000FFF7B8FE18B9B5F856104945BCD1002080 -:10E5D0003EE772E710B5514C207828B10A21BDE81A -:10E5E0001040102001F0A1BAFFF7C6FD08B10C20C1 -:10E5F00002E00FF042FF00202071012060710A212B -:10E60000E170207010BD70B5444D0446287828B1E3 -:10E61000BDE870403221102001F087BA207818B18F -:10E62000012801D0122010E001F090FA20B110F082 -:10E630006EF808B10C2008E0207801F057FA04F1D8 -:10E640001703E21D611C0FF06FFF28710120687134 -:10E650003221E970287070BD70B5304C05462078C5 -:10E6600028B1BDE870400B21102001F05EBA287877 -:10E6700018B1012801D012200EE0FFF77DFD08B18E -:10E680000C2009E0287801F031FA691C0FF0BCFE7B -:10E6900008B1002000E007202071012060710B21EB -:10E6A000E170207070BD10B51C4C217829B130216B -:10E6B000BDE81040102001F038BA008810F02AF8A8 -:10E6C000302110B10020207100E021710120607123 -:10E6D000E170207010BD70B5104C0546207828B14F -:10E6E000BDE870403121102001F01FBA01F02EFA70 -:10E6F00008B10C2005E0287800F0010010F004F8C3 -:10E7000000202071012060713121E170207070BD06 -:10E7100058000020FFFFFFFF1F0000000607002039 -:10E7200010B5FB4C207828B13421BDE810401020F2 -:10E7300001F0FBB901F00AFA20B10FF0E8FF08B1CF -:10E740000C2002E00FF044FF0020207101206071D6 -:10E750003421E170207010BDED48017819B10F210E -:10E76000102001F0E2B900210171102181700F2108 -:10E77000C170FF2181714FF6FF710181E549496840 -:10E780000A7882728A8882814988C1810121417117 -:10E790000170704710B5DE4C207828B12B21BDE800 -:10E7A0001040102001F0C1B90821A01D05F029FA80 -:10E7B00000202071012060712B21E170207010BDBC -:10E7C00070B5D34C217829B1BDE8704043211020A9 -:10E7D00001F0ABB990F90000042816D0032814D03A -:10E7E00098B1011D11D010F1080F0ED010F10C0FCF -:10E7F0000BD010F1100F08D010F1140F05D010F14C -:10E80000280F02D01220207103E0002506F020F826 -:10E8100025714320E07001206071207077E710B50A -:10E82000BB4C217829B12A21BDE81040102001F00D -:10E830007CB9A31D012200F1100110F03AFE002066 -:10E8400020711020A0702A20E070012060712070DB -:10E8500010BD70B5AE4C0546207828B1BDE87040BB -:10E860004621102001F061B909F088FE052804D086 -:10E87000284609F01BFB002000E00C20207101203D -:10E8800060714621E170207041E770B5A04C0546EB -:10E89000207828B1BDE870404421102001F045B92E -:10E8A00001F054F938B10C2020710120607144212D -:10E8B000E17020702BE72946002006F04CFE002076 -:10E8C000F2E770B5924C0546207828B1BDE870405B -:10E8D0004221102001F029B909F091FB50B10AF052 -:10E8E000A2FF38B128780AF064FC287808F026F9ED -:10E8F000002000E00C202071012060714221E170B5 -:10E90000207004E770B5824C0546207828B1BDE838 -:10E9100070401721102001F008B901F017F938B143 -:10E920000C202071012060711721E1702070EEE64B -:10E930002946012006F00FFE0020F2E738B5744D9D -:10E940000446287828B1BDE838404D21102001F058 -:10E95000ECB8A079E179884213D021791F2910D829 -:10E9600061791F290DD80022114612F0C7FA40B96B -:10E970000022E079114612F0C1FA10B9207A072876 -:10E9800001D9122012E04FF6FF70ADF800000AF036 -:10E9900057FF90B909F0F2FD78B900216846FFF7FA -:10E9A000C9FC50B1204605F070FE002028710120FE -:10E9B00068714D21E970287038BD0C20F6E72DE90B -:10E9C000FC47534C054694F82E0020B12821112015 -:10E9D00001F0ABF89BE4282084F83000012184F892 -:10E9E0002E10A8784FF000091A2825D00EDC162822 -:10E9F00031D2DFE800F0303030303021303030308C -:10EA00003030303030303030302121212A2822D0AF -:10EA10000BDCA0F11E000C281DD2DFE800F01C1C4E -:10EA20001C1C1C1C1C1C1C1C1C0D3A38042812D25B -:10EA3000DFE800F0110211022888B0F5706F0AD2E9 -:10EA40001F20884684F82F0028886946FFF7BEFB00 -:10EA500018B1022019E0122017E09DF80000019F74 -:10EA6000002806D007F5B377019E05D106F1ED0623 -:10EA700004E007F1EC07F7E706F267166846FFF7D0 -:10EA800091FB08B1387818B10C2084F82F003EE4CF -:10EA900087F80080A878307084F82F90684601F0DD -:10EAA000AFF834E47CB51A4C0546207820B1252116 -:10EAB000102001F03AF87CBD28886946FFF786FBF4 -:10EAC000020013484FF00001A0F13E000DD00222D9 -:10EAD000227140F8461F0171E1801020A0702520AE -:10EAE000E0700120607120707CBD019A134658329D -:10EAF00082F83E109E68C0F846601E7B80F84A602F -:10EB000092F83E60002EF3D12888E080E5E700000F -:10EB1000060700205800002010B540B10478406876 -:10EB200013B1B0F8480003E0B0F84A0000E0FB2061 -:10EB30001B2908D3814206D8B2F5A47F03D340F63F -:10EB40004800824201D9122010BD002010BD2DE9DD -:10EB5000FC41FA4D0446287828B1BDE8FC4150211B -:10EB6000102000F0E2BF4FF0010885F805801F215A -:10EB700029711021A9705021E9702188E98085F858 -:10EB8000008020886946FFF721FB08B102200DE0D4 -:10EB90002289E18801236846FFF7BEFF30B9A288C9 -:10EBA000618800236846FFF7B7FF10B12871BDE800 -:10EBB000FC819DF800103A20019E002749B186F89B -:10EBC0008981019991F8C81106F5C476B9B1287107 -:10EBD00013E086F8FD80019991F82011FC36002998 -:10EBE000F5D12F71E08870802089B0806088F08036 -:10EBF000A0883081012201990CE07770D7E72F714E -:10EC0000E08870802089B0806088F080A0883081A2 -:10EC100001990022304610F091FD86F80080ECE763 -:10EC200070B5C64D044686B0287830B106B0512183 -:10EC3000BDE87040102000F078BF01206871002608 -:10EC40002E711021A9705121E9702870208803A924 -:10EC5000FFF7BCFA18B10220287106B057E59DF8FD -:10EC60000C0040B100220499E088B1F84830984285 -:10EC700003D9C01A02E00122F5E70020E88063888A -:10EC8000B1F84A00834201D9181A00E00020288117 -:10EC9000009601960296E088ADF802002089ADF852 -:10ECA00004006088ADF80600A088ADF8080068464A -:10ECB00010F044FD2089BDF80410401A6881A08836 -:10ECC000BDF80810401AA881E088BDF80210401A6B -:10ECD000E988884200DC0846E8806088BDF80610B4 -:10ECE000401A2989884200DC08462881B5E770B5BA -:10ECF000924D0446287828B1BDE870403E2110208E -:10ED000000F013BF00F022FF20B10FF000FD08B1AA -:10ED10000C2008E0E2792078611C0FF07BFE08B13E -:10ED2000002000E002202871012068713E21E97076 -:10ED30002870ECE47CB5814C05461F2084F82F0038 -:10ED400028886946FFF742FA18B1022084F82F009C -:10ED50007CBDAA7802B90322EB7803B903239DF89E -:10ED600000603A2501210020002E019E06D086F881 -:10ED70009311019E96F8DC6146BB1FE086F80711EF -:10ED8000019E96F82C613EB9019E96F806611EB967 -:10ED9000019E96F87B6016B184F82F500AE0019D21 -:10EDA00085F80611019981F80821019981F8093146 -:10EDB00084F82F00019981F807017CBD019E96F827 -:10EDC00092611EB9019E96F87B6016B184F82F50AF -:10EDD0000AE0019D85F89211019981F89421019929 -:10EDE00081F8953184F82F00019981F893017CBD59 -:10EDF000524930B491F82E2022B1562130BC112056 -:10EE000000F093BE562281F83020012281F82E2096 -:10EE10008378DA0802D1C278D40801D0122004E045 -:10EE20005B0701D4520704D5112081F82F0030BCB4 -:10EE3000704730BC7EE770B5404C0546207828B15D -:10EE4000BDE870401D21102000F06FBE1F20207112 -:10EE5000012060711D21E170207009F08FFB0428F2 -:10EE60000BD0052809D0A9791220012907D031B18A -:10EE7000022904D0032929D101E00C2026E02978B9 -:10EE800009B1012922D1E97929B1012903D0022947 -:10EE900001D003291AD1698843F6FD720B1F302077 -:10EEA000934213D2AB881B1F93420FD22187A888AD -:10EEB0006087A87907F065FDE87907F0D0FD28782C -:10EEC000012805D00120002107F0F8FD20711EE483 -:10EED0000220F8E770B5194C217829B1BDE87040DF -:10EEE0001E21102000F021BE1F212171012161711E -:10EEF0001E22E270217002781221012A00D01AB974 -:10EF0000407818B1012801D0217187E40025012A39 -:10EF100009D009F033FB0C26052802D008F008FFC1 -:10EF200088B126717AE407F022FD48B107F031FD7F -:10EF3000618F208F09F070F803E0000006070020C1 -:10EF4000122020716AE4257168E42DE9F047F94C3C -:10EF500007469246B4F84400B7F84A200E4690425D -:10EF600000D31046804697F85210104600F0D4FDAA -:10EF7000B4F84610814200D208460546A146B4F8CE -:10EF80004840B7F84800844200D3044697F851102F -:10EF900000F0C2FDB9F84A10814200D208464FF491 -:10EFA000A4721B2C01D0904204D1B8F11B0F0DD0DC -:10EFB00095420BD0A6F8068035817480B080524609 -:10EFC0003946304610F0BAFB01203070BDE8F087BA -:10EFD0002DE9F04786B00546AFF6C800D0E90090AD -:10EFE000D44E804696F82E0028B12121112000F041 -:10EFF0009CFD06B0EAE71F2086F82F00212086F846 -:10F0000030004FF0010A86F82EA0284600F007FED7 -:10F01000002811D109F0B2FA05280CD009F0AEFA97 -:10F02000042808D096F8340028B907F063FAA0F550 -:10F030007F41FF3901D00C20AAE0BE4801AA3E382A -:10F040000190BD480290BB4806211038039004A8E7 -:10F0500001F0D4FC04007DD003210FF0DAFFB6F8F4 -:10F060004E00A4F84800B6F85000A4F84A0096F8FC -:10F070004D00009096F84C30B6F85020B6F84E107F -:10F08000208801F07EFD00B1FFDF208806F0F3F953 -:10F09000218804F10E0000F068FDA8A004F1120719 -:10F0A000006800900321684604F033FD00206946A3 -:10F0B0000A5C3A54401CC0B20328F9D3288A608005 -:10F0C000688AA080A88AE08094F8522094F85110B1 -:10F0D000B6F8520009F01DF80146A062204609F07A -:10F0E00038F8002784F85E7084F85F70687900F063 -:10F0F000FDFC6076D5F80600C4F81A006889E08344 -:10F10000C4F8089084F80C8084F8F8A0012204F177 -:10F11000FC012046FFF719FF8DF8007001216846B9 -:10F1200004F0F7FC9DF8000000F00701C0F3C102F5 -:10F130001144C0F3401008448DF80000401D2076B3 -:10F14000092801D208302076002120460FF061FF07 -:10F15000287B00E010E007F014FC69792879AA1DEB -:10F1600007F0E5FB50B107F014FC69792879AA1D76 -:10F1700007F080FC78B118E0092009E0208806F04B -:10F180007BF92088062101F07BFC00B1FFDF122013 -:10F1900086F82F002DE72146032007F08FFC20B9C9 -:10F1A0006A882988204608F0C0FE86F82F000028CB -:10F1B000F0D0208806F060F92088062101F060FC7C -:10F1C0000028E7D0FFDF14E738B55A4C207820B18B -:10F1D0002221102000F0A9FC38BD1F20207101253C -:10F1E00065712220E070257094F8340018BB09F096 -:10F1F000C5F9052805D007F07DF9A0F57F41FF3955 -:10F2000019D000202071684608F055FF0028E3D18E -:10F210000098008806F030F900980621008801F077 -:10F220002FFC00B1FFDF444884F834500C380078DC -:10F23000FCF760FD38BD0C20207138BD2DE9F04190 -:10F240003C4D044695F82E0028B1BDE8F04123213D -:10F25000112000F06ABC1F2085F82F00232085F8BC -:10F260003000012085F82E00618840F67B438A1F1C -:10F2700030209A4252D2A288961F9E424ED291428C -:10F280004CD8E188B1F5FA7F48D2218940F677461B -:10F29000A1F10A03B34241D2B1EBD20F3ED9618949 -:10F2A000A28991423AD84FF000082088062101F047 -:10F2B000D5FB06004FF0020707D000F093FC20B109 -:10F2C000D6F8F000017841B903E085F82F70BDE869 -:10F2D000F081D6F83C11097809B13A201EE00521E9 -:10F2E0008171D6F8F0004146A0F80880D6F8F020E9 -:10F2F000A0885081D6F8F020E0889081D6F8F020E0 -:10F300002089D081D6F8F000028943899A4204D836 -:10F310008279082A01D89A4203D3122085F82F0057 -:10F32000D5E722884280D6F8F000077085F82F10C4 -:10F33000CDE7000006070020640000201122330002 -:10F34000FEB5F84C0646207820B12421102000F0AC -:10F35000ECFBFEBD012565712420E0702570304670 -:10F3600010F042F808B1002000E0122020710028BF -:10F37000EFD1EC4884F83C503E38316840F87B1FB0 -:10F3800031790171002684F83C606946062001F05D -:10F39000F0FA00B1FFDF684601F0C9FA60B9BDF8C4 -:10F3A0000470029880F8F850684601F0C0FA18B965 -:10F3B000BDF80400B842F4D12671FEBD2DE9F0413C -:10F3C000D84D064695F82E0028B1BDE8F0412C2115 -:10F3D000112000F0AABB1F2085F82F002C2085F8F3 -:10F3E0003000012085F82E003088062101F036FB20 -:10F3F000040007D000F0F6FB20B1D4F8F010087834 -:10F4000030B901E0022026E0D4F83C01007808B1D0 -:10F410003A2020E094200027005D10F0010F19D061 -:10F42000D6F802004860D6F80600886054F8F00F5D -:10F43000718910228181206806F10C010E3012F0D2 -:10F440005BFB21680320087021683088488085F8BC -:10F450002F703CE70C2085F82F0038E72DE9F041AC -:10F46000B04D04460C26287828B1BDE8F04118219B -:10F47000102000F05ABB0AF0E3F9012730BB607995 -:10F48000032824D8A179012921D8A17B03291ED8DA -:10F49000617BE1B107291AD82179052917D2DFE864 -:10F4A00001F0030C030303002288202A0FD3618894 -:10F4B0008A420CD8B1F5804F09D806F0D6F92079E8 -:10F4C00085F83600204606F098FA064600E0122637 -:10F4D0002E716F711820E8702F70F8E610B5914CFE -:10F4E000217829B11A21BDE81040102000F01DBB81 -:10F4F00001781F2902D91220207106E00021217114 -:10F500000278411C104606F0FCFA012060711A21B5 -:10F51000E170207010BD10B5824C217829B12021F6 -:10F52000BDE81040102000F000BB01781F2902D96F -:10F530001220207106E0002121710278411C104642 -:10F5400006F0CEFA012060712021E170207010BD1C -:10F550002DE9FC41734C217829B1BDE8FC411B2108 -:10F56000102000F0E2BA012767710C2121710078A8 -:10F5700000261225012802D0002866D167E006F097 -:10F5800024F900285ED006F056F900285AD00AF077 -:10F5900057F900286CD106F06FF994F8360050B195 -:10F5A000012808D0042806D0002009F005FE00B18B -:10F5B000FFDF26715CE006F0C9F8A0F57F41FF3956 -:10F5C00056D10022072101A801F018FA05004FD0FA -:10F5D00055480321856028460FF0E2FB284606F0D7 -:10F5E000BAFBB4F84E00A5F84800B4F85000A5F8EE -:10F5F0004A00B4F8520001214C3409F016FF0146CC -:10F60000A8620022284608F0CEFF6078009014F827 -:10F61000043B288834F8022934F84E1901F0B1FA75 -:10F6200000B1FFDF288805F026FF284609F0C4FD59 -:10F6300000B1FFDF2671002205F5C4712846FFF7EF -:10F6400084FC15E006F0C1F890B1257110E008F0D7 -:10F65000A7FF054609F0E8FC50B9267145B1288896 -:10F6600005F00AFF2888072101F00AFA00B1FFDF40 -:10F670001B20E0702770BDE8FC812DE9F041294C8A -:10F680000646207828B1BDE8F0412D21102000F079 -:10F690004CBA3088072101F0E1F905004FF001076D -:10F6A00020D095F8690140B995F86400142801D07C -:10F6B000152802D195F8AA0150B10C202071102014 -:10F6C000A0702D20E0703088E08067712770FEE523 -:10F6D0001022B11C05F5B57012F00EFA85F86971AB -:10F6E0000020EBE70220E9E770B50E4C05462078D4 -:10F6F00028B1BDE870402E21102000F016BA2888ED -:10F70000072101F0ABF90221A0B190F869212AB9D3 -:10F7100090F86420142A09D0152A07D00C202071F3 -:10F7200009E00000060700205800002080F8691159 -:10F730000020F4E721711020A0702E20E0702888AE -:10F74000E08001206071207070BD2DE9FC47FD4C08 -:10F750000646207828B13821102000F0E6F9BDE8EF -:10F76000FC8770884BF68032122190420AD848B14B -:10F770004FF0000830886946FEF728FD20B10220CE -:10F78000207110E021710EE0019800F15809851CEC -:10F790002F887288394648460FF0BCFA2888B8424C -:10F7A000F6D184F80480012060713821E170207066 -:10F7B000D5E77CB5E34C0546207820B149211020DF -:10F7C00000F0B3F97CBD28886946FEF7FFFC38B12C -:10F7D00002202071012060714921E17020707CBD00 -:10F7E00001987F22014680F8602080F86120002285 -:10F7F00080F86220A87801F82C0FE8784870287902 -:10F8000088702271E6E71CB5CE4C217821B15421D5 -:10F81000102000F08AF91CBD00886946FEF7D6FC6E -:10F8200048B102202071012060715421E170102143 -:10F83000A17020701CBD019890F8720000B10120E9 -:10F8400000212171A071EEE71CB5BE4C217821B1D9 -:10F850001321102000F069F91CBD00886946FEF7ED -:10F86000B5FC08B1022005E0019890F82C100129A0 -:10F8700002D00C20207106E0602100222271095C78 -:10F8800021720088E080012060711321E170102155 -:10F89000A17020701CBD2DE9F041AA4C05462078CE -:10F8A00028B1BDE8F0414A21102000F03EB9288877 -:10F8B000072101F0D3F8012358B382886D88C688E8 -:10F8C000418803EB4207BD4217D342F210777E43D3 -:10F8D000BF107943B6FBF1F1491E89B24FF4FA76B5 -:10F8E000B14200D931468D4200D22946491C521CF2 -:10F8F000B1FBF2F15143491E8AB290F8961101B959 -:10F900000284E2800020207163714A20E07023703D -:10F91000DDE40220F7E770B58A4C0546207828B16F -:10F92000BDE870404C21102000F0FFB82888072166 -:10F9300001F094F890B1A97811F0010180F8D71086 -:10F9400004D090F8D51009B109F08AFD002020718B -:10F95000012060714C21E170207070BD0220F6E73B -:10F9600078490A781AB15221102000F0DEB80278E6 -:10F970009AB142788AB142881B2A0ED382881B2A08 -:10F980000BD3C288022A08D36E4A0368423242F877 -:10F990000A3F40685060002000E0122008710120FA -:10F9A00048715222CA700870704770B5654C0546A0 -:10F9B000207828B1BDE870405321102000F0B5B880 -:10F9C000287800F0010008F0A1FB287800F0010081 -:10F9D00009F0F7FC00202071012060715321E170D3 -:10F9E000207070BD70B5574D0646287828B1BDE827 -:10F9F00070405521102000F098B8012270881146FF -:10FA000008F087FB04467088012109F00EFD84424E -:10FA100000D204463088012100F06FF8064601212B -:10FA2000002000F06AF8304401219630844206D963 -:10FA300000F19601201AB0FBF1F0401C81B2E98080 -:10FA400000202871012068715521E970287070BD6F -:10FA500070B53C4D0446287828B1BDE870404E2171 -:10FA6000102000F062B800F071F808B10C200DE031 -:10FA7000601C0EF0A5FF207800F0010005F0F8FEF4 -:10FA8000207800F0010006F080FF0020287101209E -:10FA900068714E21E970287070BD70B5294C05461B -:10FAA000207828B1BDE870404B21102000F03DB80F -:10FAB00009F0C6FE08B10C2003E0287806F031F802 -:10FAC00000202071012060714B21E170207070BD19 -:10FAD00010B50178572907D21B4A52F8211019B1E5 -:10FAE000801C8847012010BD002010BD18B10228DD -:10FAF00001D0012070470020704710B5012904D0C3 -:10FB0000022905D0FFDF204610BDC000503001E0C3 -:10FB100080002C3084B2F6E7022903D0C000703098 -:10FB200080B2704780003C30FAE7064A92F83130E4 -:10FB3000002B06D182F8320082F83310012082F8BF -:10FB40003100704706070020C420020010B508F0FD -:10FB500015FD042807D008F011FD052803D009F091 -:10FB60006FFE002800D0012010BD2DE9FE430025C6 -:10FB70000F4680460A260421404604F042F84046DB -:10FB80000FF00EFC062000F013FF044615E0694656 -:10FB9000062000F0EEFE0AE0BDF80400B84206D0F0 -:10FBA0000298042241460E3011F07AFF50B16846A7 -:10FBB00000F0BDFE0500EFD0641E002C06DD002D18 -:10FBC000E5D005E040460FF0F4FBF5E705B9FFDFAF -:10FBD000D8F800000FF0A8F8761E01D00028CAD08F -:10FBE000BDE8FE8390F8721041B990F8C81029B1B1 -:10FBF00090F8C800042801D00120A2E70020A0E767 -:10FC0000017801299DD1416891F8D520002A98D02A -:10FC1000002281F8D520406809F022BC91E710B598 -:10FC2000038843F6FD711A1F8A4223D24288141FAB -:10FC30008C421FD29A421DD8C28940F67B43911F45 -:10FC4000994217D2018A8C1F9C4213D28A4211D842 -:10FC5000428AB2F5FA7F0DD2828A40F67744A2F149 -:10FC60000A03A34206D2B2EBD10F03D9C18A028B99 -:10FC7000914201D9302010BD017911B1012910D173 -:10FC800007E0417929B1012903D0022901D00329D4 -:10FC900007D1007B38B1012805D0022803D0032802 -:10FCA00001D0122010BD002010BD00000844083013 -:10FCB000424301F14A00104480B27047F0B51D463E -:10FCC0000446A818059B083000FB03F205F14A0022 -:10FCD000104486B2B14238BFFFDF0027276067605B -:10FCE000A760E76027616761A761E76127624FF658 -:10FCF000FF706762A082A6F1280080B265776080FD -:10FD0000B0F5004F88BFFFDF608805F13C018842F5 -:10FD100038BFFFDF6088401B3C3880B220801B2842 -:10FD200038BF1B202080A777F0BD816188617047B4 -:10FD30002DE9F04F0D46C188044600F128080089DE -:10FD400021F4004320F4004221F4004620F400474F -:10FD50004FF0010A4FF000099A4208D100F4004028 -:10FD600001F4004188421CBF0020BDE8F08FB7427B -:10FD70000BD9617FB81B401A083885421BDC08EBA1 -:10FD800006000021058041801EE06088617F801BA5 -:10FD9000401AB0F1080B0ED4BBF11B0FB8BFFFDF48 -:10FDA0005D45D4BF29461FFA8BF1681A0204120C74 -:10FDB00018BFBA4204DD84F817900020BDE8F08F28 -:10FDC00008EB06000180428084F817A0BDE8F08FA0 -:10FDD0002DE9F041044600F12802C08820F40043D8 -:10FDE000E07D002808BFBDE8F081D0180288438874 -:10FDF00013448B423CBF0020BDE8F08100279142B4 -:10FE00009CBF0180478013D9891A0D042D0C4580B1 -:10FE10000ED0E088A61D20F40040854288BFFFDF99 -:10FE200030884FF4004121EA0000284330800AE086 -:10FE3000627F008802F108031044083081B26288B2 -:10FE4000A01D00F0A8FBE7750120BDE8F08130B4EB -:10FE5000B0F804C0C488034600F128052CF4004023 -:10FE60002844A44503D10020188230BC7047B3F861 -:10FE70000CC00488A44509D34088ACEB040CA0EB6B -:10FE80000C0084B20CEB0500C01E06E0A4EB0C04D1 -:10FE90005D7FA4B2AC446044401DB1F800C0A445ED -:10FEA00088BF0C80B3F80CC0BCF1000F0CBF4FF042 -:10FEB000010C4FF0000C82F800C00988198230BC98 -:10FEC00070472DE9F041044600F12801808820F4B4 -:10FED00000404518208A002808BFBDE8F081A089AD -:10FEE00010B9A069807F2871A089218A084480B256 -:10FEF000A08129886A881144814238BFFFDF2888A1 -:10FF00006D88A2894119002791421AD175B1A08844 -:10FF1000261D20F40040A84238BFFFDF30884FF490 -:10FF2000004121EA00002843308009E0627F10444C -:10FF3000083081B202F108036288201D00F02BFB1B -:10FF4000A78127820120BDE8F0812DE9F047418992 -:10FF5000B0F804800027044600F1280A414518BF84 -:10FF60004FF400493AD000BF21F400405044468885 -:10FF70006EB1608904F10A0520F40040B04238BF38 -:10FF8000FFDF288829EA00003043288021E0637FD2 -:10FF9000008803F1080C18446389083023F40045F5 -:10FFA0006288284480B204F10A0190420BD2121AEE -:10FFB00092B20CF11B0C62452CBF03F4004229EAFB -:10FFC000030004D204E0801A80B229EA030210433D -:10FFD0000880781C618987B24145C5D13846BDE8A3 -:10FFE000F0872DE9F047B0F808800B46044600F191 -:10FFF0002801B0F80A90808828F4004C01EB0C0529 -:020000040001F9 -:10000000804504BF0020BDE8F087002A1CBF681DA2 -:10001000106023B1627F691D184611F06DFD2F88B5 -:100020006D888DB1E81987B2208904F1080620F4A3 -:100030000040A84238BFFFDF30884FF4004121EA7A -:100040000000284330800AE0607F6288C1190831CF -:1000500000F1080389B204F1080000F09CFAC845D9 -:1000600004BF208960813846BDE8F0878188C08858 -:1000700081420CBF012000207047018980888142A5 -:100080000CBF01200020704730B48488C28800F182 -:10009000280324F4004C22F40041634494421BD012 -:1000A0008289048A15191C885A88A3189D4216D380 -:1000B00012B18A4210D212E0437F0CF1080C1A19D7 -:1000C0006244408892B2801A80B22333984201D2AF -:1000D00011B104E08A4202D130BC0020704730BC2C -:1000E000012070472DE9F007B0F806C0048900F13F -:1000F000280702462CF400457E1924F400492CF40C -:10010000004A002024F400434FF00108D1450AD1F1 -:1001100004F400440CF4004C644504D05082BDE863 -:10012000F00700207047AB4208D992F81DC05B1B56 -:10013000A3EB0C03A3F10804002308E0B2F802C00B -:10014000547FACEB050CACEB040CACF10804002CB8 -:10015000E4DBB2F80EC0BCF1000F0DD0B6F800C061 -:1001600075884DB15B1B10778B42D7DBD089384443 -:10017000A0EB0C00C01E09E0A4EB0C0410778C422D -:1001800008DB507FD38918443044401D5182BDE8BC -:10019000F00770478B42A8BF82F81C80E6DABDE703 -:1001A0002DE9F05F044600F1280AC088934620F448 -:1001B00000400AEB0005608A894608B1484502D232 -:1001C0000020BDE8F09FE08980B1B5F800806E881E -:1001D00008EB0601884218BFFFDF207F4FF00007C1 -:1001E00050EA060108D0002840D04AE04FF000084D -:1001F000A17F46462971F0E7E08948B1617F01445B -:100200004819B4F81F10A0F8051094F82110C17116 -:10021000E18908EB09004944E18128806F80BBF146 -:10022000000F19D0607F298800F1080301440831CC -:1002300089B26288A01D00F0AEF9E781A07F401C62 -:10024000A077A07D00281CBFE088A082A7756782E8 -:10025000E7750120BDE8F09F607FE18908442844EC -:10026000B0F80510A4F81F10C0792EE0E089B4F8AA -:100270001F105044A0EB080020F8031D94F8211033 -:10028000817006EB090086B2E089BBF1000F48449B -:10029000E081A5F800806E800ED0E088A51D20F4D6 -:1002A0000040B04238BFFFDF28884FF4004121EA08 -:1002B000000030432880C0E7E0895044A0EB0800EC -:1002C00030F8031DA4F81F10807884F82100BEE7E1 -:1002D000818800F1280221F4004C6244B0F814C077 -:1002E000C388614518BF99420FD0818969B9806977 -:1002F00068B101898388994209D021F400412830EE -:10030000084411790079884201D1002070471046D5 -:10031000704700F12803407F01F1050C6044106034 -:100320000888002804BFD81E10600888498808443F -:1003300080B270472DE9F04115460A4600F12806C3 -:100340001C46407F531D0344108857880699002897 -:100350001CBFC01C80B226D088429CBF081A80B245 -:1003600013D9401AA042A8BF20461FFA80F8581897 -:100370004246294611F094FB002818BFBDE8F081E1 -:100380004544A4EB080084B2002001198F423CBF11 -:100390004FF0FF30BDE8F081304422462946BDE8E9 -:1003A000F04111F07DBBFA1C97B2F61ED4E72DE99F -:1003B000F04100F128071D46407F4B1D03441646BF -:1003C00008880024B1F80280069A00281CBFC01CCF -:1003D00080B21FD090429CBF101A80B20DD9801AF3 -:1003E000A842A8BF284684B299182246304611F088 -:1003F00083FB281B85B2264400204119414506D8BD -:1004000039182A46304611F077FB601984B220462D -:10041000BDE8F08108F103011FFA81F8FF1ED9E75A -:100420002DE9F04116460A4600F128071D46407F97 -:10043000531D034410880024B2F802800699002856 -:100440001CBFC01C80B21FD088429CBF081A80B25B -:100450000DD9401AA842A8BF284684B2581822468F -:10046000314611F049FB281B85B226440020411972 -:10047000414506D838442A46314611F03DFB601903 -:1004800084B22046BDE8F08108F103021FFA82F829 -:10049000FF1ED9E7401D704770B5044600F12801E2 -:1004A000C288808820F400431944904208D0A28971 -:1004B000002A04BF228A002A02D1A28A904201D1D6 -:1004C000002070BDB1F800C04D8885B1261D20F414 -:1004D0000040A84238BFFFDF30884FF4004121EAD6 -:1004E00000002843308000202082012070BD607F02 -:1004F0000CF1080100F10803084481B26288201D54 -:1005000000F049F8EFE70021C18101774182C17510 -:100510008175704703881380C289002A04BF0020B8 -:100520007047C28800F1280322F400421A440A608E -:10053000C089704710B50446808AA0F57F41FF3915 -:1005400018BFFFDFE088A082E089002818BF0120E3 -:10055000A07510BD4FF6FF71818200218175704733 -:1005600010B50446808AA0F57F41FF3908BFFFDF40 -:10057000A07D28B9A088A18A884204BF002010BDB0 -:10058000012010BD8188828A914205BF807D0028AC -:1005900000200120704710B4B0F800C02CF40044D3 -:1005A000214489B24FF4004491420AD2521A92B2C5 -:1005B0001B339A422CBF0CF4004224EA0C0104D2F3 -:1005C00004E0891A89B224EA0C021143018010BCAC -:1005D000704770B516464FF6FC72C91C01EA020559 -:1005E000D8B10446C01C20F00301A14200D0FFDFB7 -:1005F000201D012108E00246284401D2034600E004 -:100600000023491CC9B21360B142F4D916B104F1F8 -:10061000040001E04FF00000206005FB06F000F14F -:10062000040070BD024600201168002902D008466F -:1006300009681160704702680A60016070474FF6F0 -:10064000FC73C91C1940101A001F90FBF1F0C0B2D6 -:1006500070474FF6FC73C91C1940001D01FB0200D6 -:10066000704770B50C00054609D0082C00D2FFDF9A -:100670001DB1A1B2286800F044F8201D70BD0DB175 -:1006800000202860002070BD0021026803E09388EC -:100690001268194489B2002AF9D100F032B870B555 -:1006A00000260D460446082900D2FFDF206808B95D -:1006B0001EE0044620688188A94202D00168002912 -:1006C000F7D181880646A94201D100680DE005F105 -:1006D000080293B20022994209D32844491B0260C0 -:1006E00081802168096821600160206000E00026A7 -:1006F000304670BD00230B608A8002680A6001608A -:10070000704700234360021D018102607047F0B50D -:100710000F460188408815460C181E46AC4200D38F -:10072000641B3044A84200D9FFDFA019A84200D9B9 -:10073000FFDF3819F0BD2DE9F041884606460188F3 -:10074000408815460C181F46AC4200D3641B384441 -:10075000A84200D9FFDFE019A84200D9FFDF708866 -:100760003844708008EB0400BDE8F0812DE9F041C9 -:10077000054600881E461746841B8846BC4200D3A7 -:100780003C442C8068883044B84200D9FFDFA0196F -:10079000B84200D9FFDF68883044688008EB040065 -:1007A000E2E72DE9F04106881D460446701980B243 -:1007B000174688462080B84201D3C01B208060883D -:1007C000A84200D2FFDF7019B84200D9FFDF60886D -:1007D000401B608008EB0600C6E730B50D46018877 -:1007E000CC18944200D3A41A4088984200D8FFDF66 -:1007F000281930BD2DE9F041C14D04469046A87836 -:100800000E46A04200D8FFDF05EB8607B86A50F815 -:10081000240000B1FFDFB868FFF704FF05000CD02B -:10082000B86A082E40F8245000D3FFDFB54842468E -:10083000294650F82630204698472846BDE8F081E2 -:100840002DE9F0471E460400074602EB06009146DC -:100850008A46C5B227D000218846FF2800D9FFDF8D -:10086000E01C20F00300A04200D0FFDFB24500D919 -:10087000FFDFA34880F800A080F801908570C57064 -:10088000057145718671DFF87CA280F8079000261B -:100890000AF1400A8146FF1C27F003000746B8F121 -:1008A000000F03D005E04FF00101D5E709EB860109 -:1008B00088603AF8161019F8062001D04FF00000B1 -:1008C000FFF787FE761CF6B20744082EE3D3FF1C21 -:1008D00027F003002A460646B8F1000F0DD000208D -:1008E0000221FFF776FE4346002130440F46C846FA -:1008F000C01C20F003021BB110E0C9F84800EFE76C -:1009000008EB81060020B26206E000BFD6F828C0DE -:100910004CF82070401CC0B2A842F7D3491CC9B2A1 -:1009200002EB85000829E3D3001BBDE8F08710B572 -:10093000044603F0BBFC08B1102010BD2078704ABB -:10094000618802EB800092780EE0836A53F82130D0 -:1009500043B14A1C6280A180806A50F82100A060E7 -:10096000002010BD491C89B28A42EED86180052062 -:1009700010BD70B505460C46084603F097FC08B15B -:10098000102070BD082D01D3072070BD25700020F8 -:10099000608070BD0EB56946FFF7EBFF00B1FFDF69 -:1009A0006846FFF7C4FF08B100200EBD01200EBD50 -:1009B00010B50446082800D3FFDF5148005D10BD84 -:1009C0003EB5054600246946FFF7D3FF18B1FFDFA7 -:1009D00001E0641CE4B26846FFF7A9FF0028F8D0E4 -:1009E0002846FFF7E5FF001BC0B23EBD44498978A9 -:1009F000814201D9C0B27047FF2070472DE9F04114 -:100A000090460C460546062901D0072C10D13C4FD4 -:100A1000B86CFFF707FE02004FF6FF7604D0022104 -:100A2000B86CFFF70CFE00E030462880B04201D1E0 -:100A3000002003E742462146FFF7DCFE040002D116 -:100A4000288800F04FF82046F8E6A0F57F43FF3BEA -:100A500001D0082901D300207047CBE6A0F57F42E2 -:100A6000FF3A0BD0082909D2254A9378834205D949 -:100A700002EB8101896A51F820007047002070471D -:100A80002DE9F04105460C46A5F57F4143F20200F1 -:100A9000FF3902D0082C01D30720CFE618494FF0C8 -:100AA00000088A78AA42F8D901EB8406B26A52F8A3 -:100AB0002570002FF1D013483946203050F82420FB -:100AC00028469047B16A062C41F8258001D0072CB2 -:100AD00002D1284600F006F83946B068FFF7ABFDB2 -:100AE0000020ABE610B5064CC2B20221A06CFFF7A5 -:100AF000B0FD0146A06CBDE81040FFF79CBD0000B2 -:100B0000600700202022020070B50E461D461146E7 -:100B100000F0D4F804462946304600F0D8F82044C6 -:100B2000001D70BD2DE9F04190460D4604004FF0C8 -:100B3000000610D00027E01C20F00300A04200D0E7 -:100B4000FFDFDDB141460020FFF78BFD0C3000EBED -:100B5000850617B112E00127EDE7614F04F10C00A3 -:100B6000A9003C602572606000EB85002060606831 -:100B700011F05BF841463868FFF773FD3046BDE879 -:100B8000F0812DE9FF4F564C804681B020689A468F -:100B9000934600B9FFDF2068027A424503D94168D5 -:100BA00051F8280020B143F2020005B0BDE8F08FF3 -:100BB0005146029800F082F886B258460E9900F02D -:100BC00086F885B27019001D87B22068A1463946A3 -:100BD0000068FFF764FD04001FD067802580294668 -:100BE000201D0E9D07465A4601230095FFF766F823 -:100BF0002088314638440123029ACDF800A0FFF73F -:100C00005DF82088C1193846FFF78FF8D9F8000041 -:100C10004168002041F82840C7E70420C5E770B5C7 -:100C20002F4C0546206800B9FFDF2068017AA942F1 -:100C30000ED9426852F8251051B1002342F82530F0 -:100C40004A880068FFF756FD216800200A7A08E00C -:100C500043F2020070BD4B6853F8203033B9401C9A -:100C6000C0B28242F7D80868FFF70EFD002070BDC1 -:100C700070B51B4E05460024306800B9FFDF3068B0 -:100C8000017AA94204D9406850F8250000B1041D3A -:100C9000204670BD70B5124E05460024306800B97C -:100CA000FFDF3068017AA94206D9406850F8251064 -:100CB00011B131F8040B4418204670BD10B50A4636 -:100CC0000121FEF7F3FFC01C20F0030010BD10B59A -:100CD0000A460121FEF7EAFFC01C20F0030010BD08 -:100CE0006C00002070B5044600780E46012813D031 -:100CF000072802D00B2813D10EE0A068616905789F -:100D0000052003F061FA052D0AD078230022052082 -:100D1000616903F0AFF903E00520616903F054FA5B -:100D200031462046BDE8704001F0A8B910B500F189 -:100D30003902C3799478411D64F003042340C371E0 -:100D4000DB070DD04B79547923404B710B79127925 -:100D500013400B718278C9788A4200D9817010BD26 -:100D600000224A710A71F5E74178012900D00C216F -:100D7000017070472DE9F74F88B000208C698DF81D -:100D800004000878012617460D464FF007094FF07A -:100D9000110A4FF00A0B292876D2DFE810F029005B -:100DA000D20215032D036F037E039903C703DC03EF -:100DB0000604330457047004AE04BF04E204EA04DA -:100DC0000A052C0557057A05A605C605D605F605BC -:100DD000F805050637065906AD06EA06EC061B07B8 -:100DE0003B074407550792071B08410808080D08F0 -:100DF00014B120781E2829D0D5F808805FEA0800B1 -:100E000042D001208DF80400686A02228DF8082083 -:100E100006908DF809B0286A0390A8880028EFD0C2 -:100E200098F8001091B10F2910D27DD2DFE801F0BF -:100E30007C134BDCFEFDFCFBFAF9F8089EF7F6008C -:100E4000022821D124B120780C2801D00026F9E312 -:100E50008DF80420B3E10520696A03F0B5F9A8888C -:100E60000728EED1204601F003F9022809D02046D8 -:100E700001F0FEF8032808D9204601F0F9F8072808 -:100E800003D20120207005E003E2002CB8D02078C6 -:100E90000128D6D198F80400C11F0A2903D300BF46 -:100EA00085F81CB04CE2A070D8F80010A163B8F827 -:100EB0000410A18798F8060084F83E0001202870ED -:100EC0000320207046E00728BBD1002C98D0207862 -:100ED0000D28B6D198F8031094F83B20C1F3C00058 -:100EE000C2F3C002104201D0062000E007208907AB -:100EF00007D198F805100142D2D198F806100142A6 -:100F0000CED194F83D2098F8051020EA0202114253 -:100F1000C6D194F83E2098F8061090430142BFD104 -:100F200098F80400C11F00E008E20A29B8D2617FE6 -:100F3000814201D906209AE3D8F800106160B8F820 -:100F40000410218198F80600A072012028700E205C -:100F5000207003208DF80400686A069004F13900BF -:100F60000290601D039017300490DBE0412890D17F -:100F7000204601F07DF8042802D1E078C00704D1B2 -:100F8000204601F075F80F289ED1A88CD5F80C806A -:100F900080B24FF04009666AFFF76AFE32460826C3 -:100FA00041464B460096FFF702FA0D208DF80400EB -:100FB000686A0690606A0290002101A8FFF792FE1D -:100FC0002078042808D0A07F48B1012807D0032842 -:100FD00008D0102020709CE005202070CEE184F81D -:100FE00000A033E71220F5E71128C0D1204601F018 -:100FF0003FF8042802D1E078C00719D0204601F05C -:1010000037F8062805D1E078C00711D1A07F022863 -:101010000ED0204601F02CF8112808E0B3E083E060 -:1010200072E156E136E109E1EAE0D0E017E09ED155 -:10103000102208F1010104F1480010F05DFD607814 -:10104000012809D012202070E078C00765D0A07F69 -:1010500090B301285DD060E084F8009059E0112839 -:1010600085D1204601F004F8082804D0204600F07D -:10107000FFFF132888D12869D0B16869C0B104F195 -:101080007800102208F10101064610F035FD2078A5 -:10109000082812D014202070E078C0070FD0A07F5D -:1010A000022818D06178022912D0032831D034E008 -:1010B00000208DF80400ECE02BE00920EBE70B208A -:1010C0002870296901204870206CC1E9010662E29C -:1010D00008B101287AD10B202870296981F8019084 -:1010E000606A4860206AC1E9020648E2206CE27842 -:1010F0000068C2F34402521ED04000F0010040F0EC -:10110000800000E000200874E06A48614CE2064676 -:10111000FEE3042028700520BAE185F800B08DF8C0 -:1011200004B08EE33946F4E31128C4D1204600F020 -:101130009FFF0A2802D1E078C00704D1204600F0C2 -:1011400097FF1528B7D1102208F1010104F14800DA -:1011500010F0D2FC20780A2810D01620207012201F -:10116000287029690920487004F15800486020302F -:1011700088601038C860206C086184E30B20207000 -:10118000B9E22870FEE3022895D1204600F070FFF6 -:10119000042804D3204600F06BFF082809D320461A -:1011A00000F066FF0E2886D3204600F061FF12286B -:1011B0006FD2A07F0228B8D110208DF80400686A91 -:1011C000069098F801008DF80800F6E33DE2022849 -:1011D000ABD1204600F04CFF00285AD0204600F04A -:1011E00047FF0128F9D0204600F042FF0C28F4D038 -:1011F00004208DF8080098F801008DF809005AE7DE -:101200001128FCD1002CFAD020781728F7D161786A -:10121000E06A022910D0002101EB4101182606EBFB -:10122000C1011022405808F1010110F065FC0520B1 -:10123000696A00F010FF1DE10121EDE70B28DED106 -:10124000002CDCD020781828D9D16178E06A0229F6 -:101250001BD0002101EB4101102202EBC1014158DA -:10126000B8F8010008806078E16A02280FD00020F9 -:1012700000EB4002142000EBC2000958404650F831 -:10128000032F0A604068486039E00121E2E701204D -:10129000EEE7A1E11128B2D1002CB0D020781928B6 -:1012A000ADD16078E16A022811D0002000EB400245 -:1012B0001C2000EBC2001022085808F1010110F0B8 -:1012C0001BFC0520696A00F0C6FE1A20D4E001204C -:1012D000ECE7082893D1002C91D020781A288ED1E1 -:1012E000E06A98F80120017862F347010170E16A31 -:1012F000D8F8022041F8012FB8F8060088800520B0 -:10130000696A00F0A8FE3CE3112898D1002C98D01F -:1013100020781B2893D16178E06A02290CD0002143 -:1013200001EB4101202202EBC1011022405808F1DB -:10133000010110F0E1FBE2E70121F1E785F81C90E3 -:10134000EFE338780128A6D11C2204F11C0079684B -:1013500010F017FCE079C10894F83B0001EAD001D5 -:10136000E07861F30000E070217F09B1297733E173 -:10137000217803290AD0C0073FF42DAE032028703E -:101380008DF804B0686A06904120B1E3607FA178CF -:1013900088423FF6CFAD02262671E179204621F042 -:1013A000E001E171617A21F0F0016172A17A21F02E -:1013B000F001A172FFF7BAFC2E708DF804B0686AD4 -:1013C00006908DF80890ADE638781128CFD18DF8C9 -:1013D0000490696A0691916800208DF814000391C9 -:1013E000ADF8089008466168016021898180A17A82 -:1013F000817104202070E0E238781128B7D18DF88F -:101400000490686A0690381D02AB07C883E807009D -:101410004120ADF8080000208DF8140008460C218A -:101420000170A88CCA4680B2FE684FF04009D4F81B -:101430002080FFF72FFC3146082642464B46009697 -:10144000FEF7EEFF002101A8FFF74CFCE07820F04A -:101450003E00801CE0702078052801D00F200BE0B2 -:10146000A07F20B1012802D0032803D03DE184F8F9 -:1014700000A04EE62670E9E42070E7E438780328FF -:10148000A4D178680168A1664068E06605202870EC -:101490008DF80400686A069044E63878032895D1F0 -:1014A00078680168216740686067206C68B9A07F30 -:1014B00028B1012803D0062028700420E8E785F829 -:1014C0000090FE4820646064F9E385F80090F6E33C -:1014D0003878022892D1387900287CD1A07F022860 -:1014E0000BD00328F1D1607801280BD0A07994F8B3 -:1014F0003A1001280AD0F1480BE0B86800286BD0F8 -:10150000206411E0A17994F83A00F2E7B868002865 -:10151000F5D02064E078C00701D0012901D0E74868 -:1015200002E0F8680028EAD06064CEE78DF804B0E5 -:10153000696A0691E1785846C90709D0617802299D -:1015400003D1A17F29B1012903D0A17F032900D0B4 -:101550000820287064E33878112891D1B86828628F -:1015600009202870E0782969C0070DD081F8019022 -:10157000206A4860606A886004F16800C860A07FE3 -:1015800002287FF4BFADB1E501204870206C4860AF -:1015900004F16800886004F13800C860201D08610B -:1015A000206B4861606B88612AE2E1783878C9076E -:1015B00001D0062100E00A2188428BD1207807283B -:1015C0001DD084F800A000BF8DF80490686A0690D2 -:1015D000286A039001E0CAE08DE20024ADF808A07B -:1015E0008DF81440032100F8011B5168102210F0FF -:1015F00083FA002101A8FFF775FB2C6226E408207E -:101600002070E1E738781128A7D18DF80490686A36 -:1016100006909068039000208DF814000398ADF8B0 -:1016200008A0042100F8011B102204F1680110F049 -:1016300063FA002101A8FFF755FB2078092802D0A2 -:10164000132019E73CE384F800B016E0E17838781D -:10165000C90701D0062100E00A218842ADD110223D -:1016600004F14800796810F01BFA10B104202877C3 -:10167000EAE3207809283FF4EEAC0C2081E5E0781D -:10168000C10738D0A17F012902D002291BD02EE04A -:101690000D202870296981F801B06078012809D0EF -:1016A000206A4860606A886004F16800C860103091 -:1016B000086129E5606A4860206A886004F1780062 -:1016C000C8601038F4E7C0F3440114290FD24FF07A -:1016D000006101EBB0104FEAB060E0706078012863 -:1016E00003D010202070042057E10620C4E6607863 -:1016F00001283FF476AC0E2043E538780928ADD1B7 -:1017000085F800B00F208DF80400686A06905068D4 -:101710000290002101A8FFF7E5FAE8E7E078C007AA -:101720000AD0A07F012803D10F202870042036E1C1 -:10173000102028700E2032E115202870296902201F -:101740004870206C48606078012805D004F178006A -:1017500088601038C86053E104F168008860103078 -:10176000F8E738780228CAD138790028E0D02877FD -:1017700068E338781328FBD185F800A02969082090 -:10178000487078684860607801280DD004F16800DE -:1017900088601030C860206B0861606B486104F19C -:1017A00058008861A06A22E004F17800886010384F -:1017B000F0E738780728DBD16078012801D01320C2 -:1017C00029E2A178A06A0844C1F1100110F00BFAD7 -:1017D0001220287029690920487004F158004860D7 -:1017E000203088601038C860206C086144E0C8610F -:1017F000E06A086204E138780828B9D1102204F1BF -:101800004800796810F04CF908B10B202FE72078D8 -:101810000B2812D02046FFF789FAA178A06A084465 -:10182000C1F1100110F0DFF91620287008208DF8A2 -:101830000400686A0690002072E0132028708DF87A -:1018400004B0686A06908DF808A06BE43878112817 -:101850008ED1B86828621420287029690920487040 -:1018600004F158004860103088601030C860606C27 -:1018700008616078012806D004F139004861206BC6 -:101880008861606BB3E7601D4861606B8861206BA5 -:10189000ADE7387808288ED18DF80490686A0690F4 -:1018A000286A00260D210390ADF808A08DF8146079 -:1018B00000F8011B1022796802E000007423020086 -:1018C00010F01AF9002101A8FFF70CFA2E626078D7 -:1018D000012801D01520CFE51620287008208DF8AA -:1018E0000400686A029606901BE038780B2884D1C1 -:1018F000162028706078022802D12046FFF716FAD9 -:10190000A17878680844C1F1100110F06CF901E089 -:1019100083E215E008208DF80400686A0690786874 -:101920000290A0788DF80C004DE538780F288FD103 -:10193000E079C00773D01720287009202FE01146E6 -:1019400001A8FFF7CFF9FFF7E2BB38781028A2D142 -:101950001422391D04F11C0010F013F9E16A208DE6 -:10196000A1F80900E16AA078C871E179E26A01F0A2 -:1019700003011172E16A627A0A73E16AA07A81F85E -:10198000240000E09BE1242078E6192043E1387828 -:101990001128ACD1B86828621A20287005208DF86B -:1019A0000400686A0690CAE7387803289FD16078F7 -:1019B000E16A022802D0012001E05CE2002000EB95 -:1019C0004002142000EBC2027B688A58196811603B -:1019D000596851601B212970D5E9041205234B7009 -:1019E000636A4B606678E36A022E01D0012600E04C -:1019F000002606EB460600EBC6001858C1E90202B5 -:101A0000686A4862089800F050FB9CE738780E2816 -:101A100071D16078E26A022802D0012001E0ADE1D4 -:101A2000002000EB4001102000EBC1000223105801 -:101A3000093279680EF01EFB1C20287029690420E9 -:101A40004870206A4860E06A09308860FB4881E697 -:101A500038780D284FD16178E06A022901D0012140 -:101A600000E0002101EB4101182606EBC101A2783C -:101A70004058796810F040F86078E16A022801D097 -:101A8000012000E0002000EB400206EBC200B0465F -:101A90000858A1780844C1F1100110F0A4F88DF89D -:101AA0000490686A0690286A00260390ADF808A0A2 -:101AB0008DF81460062101706178E26A022901D074 -:101AC000012100E0002101EB410308EBC301401CB0 -:101AD0005158102210F010F8002101A8FFF702F968 -:101AE0001D202E6228708DF804B0686A06900B20C5 -:101AF0008DF8080067E481E0387811287ED18DF8F0 -:101B00000490686A0690B86803900B20ADF808004E -:101B1000039880F800906278E16A022A02D00122DC -:101B200001E091E1002202EB4202102303EBC2022A -:101B300089580988A0F801106178E26A022901D069 -:101B4000012100E0002101EB4103142101EBC3015D -:101B500051580A6840F8032F4968416056E0272031 -:101B6000287001208DF814002DE424202870002016 -:101B70009FE01F204FE0387811283FD18DF8049066 -:101B8000686A0690B868039000208DF814000398E6 -:101B9000ADF808A0082606706178E26A022901D033 -:101BA000012100E0002101EB41031C2101EBC301F5 -:101BB000401C515810220FF09FFF002101A8FFF791 -:101BC00091F8202028708DF804B0686A06908DF88E -:101BD000086061E43878112810D18DF80490686AA3 -:101BE0000690B86803900820ADF808000398092112 -:101BF0000170E16909784908417000E094E0E16909 -:101C000051F8012FC0F802208988C18020781D2852 -:101C1000ABD1A4E7222028708DF804B0686A069042 -:101C20008DF808A08BE6387811287DD1B868286235 -:101C300023202870296904204870206A4860E06ADF -:101C4000093088607E4885E538780D286CD1617848 -:101C5000E06A022901D0012100E0002101EB4101ED -:101C6000202606EBC1011022405879680FF044FF8E -:101C70008DF80490686A0690286A0390ADF808A071 -:101C800080F800B06278E16A022A01D0012200E007 -:101C9000002202EB420206EBC202401C89581022CD -:101CA0000FF02AFF0020286221781D29B1D02421BD -:101CB00029708DF81400002101A8FFF713F80326FE -:101CC000DFE0E078C00702D04FF0060C01E04FF0F3 -:101CD000070C6078022809D04FF0000000EB0401E7 -:101CE00001F1090105D04FF0010004E04FF00100BF -:101CF000F4E74FF000000B78204413EA0C030B705C -:101D000010F8092F02EA0C02027004D14FF01C0CEB -:101D100084F800C092B394F801C0BCF1010F00D068 -:101D2000E3B990F800C000E053E05FEACC7804D05B -:101D30002CF00106067018260EE05FEA8C7804D5B8 -:101D40002CF0020606701E2606E05FEA4C7805D5E8 -:101D50002CF00406067021262E70032694F801C08C -:101D6000BCF1020F00D0DAB991F800C05FEACC787C -:101D700005D02CF001060E7017210FE01AE05FEA83 -:101D80008C7804D52CF002060E70192106E05FEA6B -:101D90004C7805D52CF004060E701B21217000260E -:101DA0000078D0BBCAB3C3BB1D20207035E03878A3 -:101DB000122847D1282061E42078012842D00C283D -:101DC00040D02046FEF7D0FF0B208DF80400686A53 -:101DD000069037E038784FF02608112805D01220F9 -:101DE0001070032685F800804BE08DF80490686A37 -:101DF0000690B86803900220ADF8080001208DF825 -:101E00001400039805210170297F4170114601A833 -:101E1000FEF768FF064685F80080012E12D030E0FC -:101E200001208DF80400686A069003208DF80800F0 -:101E3000287F8DF809000020287716E06C23020027 -:101E400070220200287F80B11E202070252028707B -:101E50008DF804B0686A069002208DF808003946B3 -:101E600001A8FEF73FFF06460BE00CB1FE202070F4 -:101E70009DF8040028B1002101A8FEF733FFFEF70A -:101E8000E5BF0BB03046BDE8F08FF0B587B00C462B -:101E90004E6900218DF804100120257803460227A1 -:101EA0004FF0070C85B1012D50D0022D36D1FE2008 -:101EB00030708DF80030606A059003208DF80400C2 -:101EC000207E8DF8050060E02179012922D00229C9 -:101ED00029D0032924D0042920D1B17F02291DD182 -:101EE00031780D1F042D04D30A3D032D01D31E2983 -:101EF00014D12189022911D38DF80470237020890F -:101F00009DF80410884217D20A208DF80000606AFC -:101F1000059057E070780128EED0052007B0F0BD9D -:101F20001E203070E8E771780229F6D131780C294B -:101F3000F4D18DF804C0E1E71120083402F8040B55 -:101F400094E80B0082E80B000320E7E71578112DD9 -:101F5000E4D18DF800C0656A0595956802958DF805 -:101F6000101094F804E0BEF1010F13D0BEF1020F7F -:101F70002DD0BEF1030F1CD0BEF1040FCED1ADF8B1 -:101F800004700E202870207E687000216846FEF7DD -:101F9000A9FE0CE0ADF804700B202870207E002113 -:101FA00000F01F0068706846FEF79CFE3770002046 -:101FB000B4E7ADF804708DF8103005202870207E4D -:101FC0006870277011466846FEF78CFEA6E7ADF8EC -:101FD00004C02B70207F6870607F00F00100A87043 -:101FE000A07F00F01F00E870E27F2A71C0071CD0BC -:101FF00094F8200000F00700687194F8210000F0C8 -:102000000700A87100216846FEF76CFE2868B063DF -:10201000A888B087A87986F83E00A06940787077D4 -:102020002879B0700D203070C1E7A9716971E9E7B6 -:1020300000B587B005280CD101208DF800008DF87F -:102040000400002005918DF8050001466846FEF762 -:1020500049FE07B000BD70B50C46054602F0B4F865 -:1020600021462846BDE870407823002202F002B8DD -:1020700008B1007870470C207047000070B50C0064 -:1020800005784FF000010CD021702146F3F79DF840 -:1020900072482178405D884201D1032070BD022042 -:1020A00070BDF3F792F8002070BD027B032A05D0C3 -:1020B00000220A704B780B2B02D003E004207047FB -:1020C0000A770A62027B9300521C0273C1500320FC -:1020D0007047F0B587B00F4605460124287B05EB15 -:1020E000800050F8046C7078411E0C290AD25B49BC -:1020F0003A46123101EB8000314650F8043C284644 -:10210000984704460CB1012C11D1287B401E10F0D9 -:10211000FF00287301D00324E0E70C208DF80000B5 -:10212000706A0590002101966846FFF7A7FF032C0F -:10213000D4D007B02046F0BD70B515460A46044617 -:1021400029461046FFF7C5FF064674B12078FE28E1 -:102150000BD1207E30B100202870294604F10C00FC -:10216000FFF7B7FF2046FEF7FFFD304670BD704712 -:1021700070B50E46044688210FF057FD0225012E4A -:1021800003D0022E04D0052070BD0120607000E055 -:1021900065702046FEF7E8FDA577002070BD28B1E8 -:1021A000027E1AB10A4600F10C01C5E70120704712 -:1021B00010B5044686B0052002F006F82078FE2807 -:1021C00006D000208DF8000069462046FFF7E7FFA3 -:1021D00006B010BD7FB50E4600218DF80C10417879 -:1021E0000B2903D00C2903D0002405E0846900E00A -:1021F00044690CB1217E91B16D4601462846FFF736 -:1022000054FF032809D1324629462046FFF794FFA0 -:102210009DF80C10002900D0042004B070BD04F11A -:102220000C05EAE710B590B00C4607900B48042166 -:10223000801E08900A488DF8191009900F9269467F -:1022400006A8FFF7C7FF002805D1102220460199F4 -:102250000FF052FC002010B010BD000076220200EA -:102260006C23020070B50D46040011D085B1210128 -:1022700028460FF0B8FC10224E4928460FF03CFCCF -:102280004C4801210838018044804560002070BD21 -:10229000012070BD70B5474E00240546083E10E091 -:1022A0007068AA7B00EB0410817B914208D1C17B4E -:1022B000EA7B914204D10C2229460FF0F1FB30B1A8 -:1022C000641C30888442EBDB4FF0FF3070BD204649 -:1022D00070BD70B50D46060006D02DB1FFF7DAFFD0 -:1022E000002803DB401C14E0102070BD314C083C7A -:1022F00020886288411C914201D9042070BD616828 -:10230000102201EB001031460FF0F6FB2088401C34 -:1023100020802870002070BD70B514460D0018D0C4 -:10232000BCB10021A170022802D0102811D105E013 -:10233000288870B10121A170108008E02846FFF7BD -:10234000A9FF002805DB401CA070A8892080002080 -:1023500070BD012070BD70B5054614460E000BD04F -:1023600000203070A878012808D005D91149A1F1C2 -:1023700008010A8890420AD9012070BD24B128784A -:1023800020702888000A5070022008700FE064B1A5 -:102390004968102201EB0011204610390FF0ACFB08 -:1023A000287820732888000A60731020307000207D -:1023B00070BD0000780000202DE9F04190460C46E9 -:1023C00007460025FE48072F00EB881607D2DFE8F6 -:1023D00007F00707070704040400012500E0FFDFFA -:1023E00006F81470002D13D0F548803000EB8801FA -:1023F00091F82700202803D006EB4000447001E04C -:1024000081F8264006EB44022020507081F82740D6 -:10241000BDE8F081F0B51F4614460E460546202A59 -:1024200000D1FFDFE649E648803100EB871C0CEB6A -:10243000440001EB8702202E07D00CEB46014078C8 -:102440004B784870184620210AE092F825304078F1 -:1024500082F82500F6E701460CEB41000570407854 -:10246000A142F8D192F82740202C03D00CEB440471 -:10247000637001E082F826300CEB41042023637086 -:1024800082F82710F0BD30B50D46CE4B441900221E -:10249000181A72EB020100D2FFDFCB48854200DD43 -:1024A000FFDFC9484042854200DAFFDFC548401CD3 -:1024B000844207DA002C01DB204630BDC148401CB5 -:1024C000201830BDBF48C043FAE710B50446016884 -:1024D000407ABE4A52F82020114450B102200844EC -:1024E00020F07F40F0F751FB94F90810BDE8104050 -:1024F000C9E70420F3E72DE9F047B14E803696F89E -:102500002D50DFF8BC9206EB850090F8264034E0B1 -:1025100009EB85174FF0070817F81400012806D0BB -:1025200004282ED005282ED0062800D0FFDF01F089 -:10253000E5F8014607EB4400427806EB850080F899 -:10254000262090F82720A24202D1202280F82720BE -:10255000084601F0DEF82A4621460120FFF72CFF4D -:102560009B48414600EB041002682046904796F8CD -:102570002D5006EB850090F82640202CC8D1BDE8F0 -:10258000F087022000E003208046D0E710B58C4C95 -:102590002021803484F8251084F8261084F8271030 -:1025A000002084F8280084F82D0084F82E10411EA5 -:1025B000A16044F8100B2074607420736073A073E2 -:1025C0008449E07720750870487000217C4A103CEF -:1025D00002F81100491CC9B22029F9D30120F0F7F3 -:1025E000C2F90020F0F7BFF9012084F82200F9F7C2 -:1025F00053FB7948F9F75FFB764CA41E20707748AF -:10260000F9F759FB6070BDE81040F0F739B910B523 -:10261000F0F75BF96F4CA41E2078F9F765FB607842 -:10262000F9F762FBBDE8104001F0A0B82020704728 -:102630002DE9F34F624E0025803606EB810A89B002 -:102640009AF82500202822D0691E02916049009541 -:1026500001EB00108146D0E90112C0680391CDE979 -:102660000420B08BADF81C00B07F8DF81E009DF8E3 -:102670001500C8B10227554951F820400399E219C5 -:10268000114421F07F41019184B102210FE001202A -:10269000F0F769F90020F0F766F9F0F734F901F086 -:1026A00065F886F82F508AE00427E4E700218DF8CA -:1026B0001810022801D001281BD1039839190144B0 -:1026C0000998081A20F07F4033280BD903208DF891 -:1026D00015000398C4F13201401A20F07F403224E3 -:1026E00003900CE096F8240018B9F0F753FC00288A -:1026F0004DD0322C03D214B101F02CF801E001F0DE -:1027000035F8344A107820B393465278039B121B55 -:1027100000219DF81840984601281BD0032819D0A5 -:102720005FF000008DF81E00002A04DD981A039067 -:1027300001208DF818009DF81C0000B102210398BB -:10274000274A20F07F40039003AB099801F01AF864 -:1027500010B110E00120E5E79DF81D0018B99BF8C5 -:102760000000032812D08DF81C50CDF80C808DF895 -:1027700018408DF81E509DF8180058B10398012399 -:10278000C11900221846F0F741F906E000200BB00D -:10279000BDE8F08F0120F0F7E6F899F90C2001234D -:1027A00000200199F0F732F9012086F82F008AF80D -:1027B000285003482022694680300FF0E2F911E0EA -:1027C000AC090020FF7F841E0020A107B822020070 -:1027D000AC0700208A000020233F0100F7240100FD -:1027E000FFFF3F000120D2E72DE9F05FDFF84084D2 -:1027F000064608EB860090F82550202D1FD0A8F142 -:1028000080002C4600EB8617A0F50079DFF824B491 -:1028100005E0A24607EB4A004478202C0AD0F0F7E6 -:1028200041F909EB04135A4601211B1D00F0AAFFD0 -:102830000028EED0AC4202D0334652461EE0FE489D -:1028400008B1AFF30080F0F72DF998F82F206AB1A6 -:10285000D8F80C20411C891A0902CA1701EB126131 -:102860000912002902DD0020BDE8F09F3146FFF784 -:10287000DFFE08B10120F7E733462A462021042075 -:10288000FFF7C8FDEFE72DE9F041E94C2569F0F7C6 -:1028900009F9401B0002C11700EB1160001200D4BF -:1028A000FFDF94F8220000B1FFDF012784F82270D7 -:1028B00094F82E00202800D1FFDF94F82E6020200D -:1028C00084F82E00002584F82F5084F8205084F8D6 -:1028D0002150DA4825600078022833D0032831D00F -:1028E00000202077A068401C05D04FF0FF30A0608A -:1028F0000120F0F738F80020F0F735F8F0F733F959 -:10290000F0F72BF9EFF7FFFF0EF094FBCC480560D2 -:1029100005604FF0E0214FF40040B846C1F8800256 -:10292000F0F7BBF994F82D703846FFF75DFF0028EB -:10293000FAD0BF48803800EB871010F81600022844 -:1029400002D006E00120CCE73A4631460620FFF7E8 -:1029500033FD84F8238004EB870090F826002028BC -:1029600004D0B648801E4078F9F7C4F9207F0028CB -:1029700003D0F0F7E8F82577657749E50146AC48DC -:1029800010B590F82D200024803800EB821000BF95 -:1029900010F814302BB1641CE4B2202CF8D32020A2 -:1029A00010BDA84800EB0410016021460120FFF78C -:1029B00003FD204610BD10B5012801D0032800D129 -:1029C00071B39B4A92F82D30994C0022803C04EB65 -:1029D000831300BF13F812400CB1082010BD521C25 -:1029E000D2B2202AF6D3954A48B1022807D0072947 -:1029F00016D2DFE801F01506080A0C0E10000021BF -:102A00000AE01B2108E03A2106E0582104E0772182 -:102A100002E0962100E0B52151701070002010BD39 -:102A2000072010BD854810B54078F0F7AEF880B2A9 -:102A300010BD10B5202811D27D4991F82D30A1F19B -:102A4000800202EB831414F810303BB191F82D3062 -:102A500002EB831212F81020012A01D0002010BDD1 -:102A600091F82D2001460020FFF7A6FC012010BDA3 -:102A700010B5F0F717F8BDE81040F0F786B82DE96B -:102A8000F0410E466A4F01782025803F0C4607EB47 -:102A9000831303E0254603EB45046478944202D097 -:102AA000202CF7D108E0202C06D0A14206D103EB60 -:102AB00041014978017007E00020A9E403EB4400DC -:102AC00003EB4501407848705F4F7EB127B100218C -:102AD00040F2DA30AFF300803078A04206D127B15F -:102AE000002140F2DD30AFF30080357027B10021C6 -:102AF00040F2E230AFF30080012089E410B5426873 -:102B00000B689A1A1202D41702EB1462121216D42E -:102B1000497A91B1427A82B94C4A006852F8211040 -:102B2000126819441044001D891C081A0002C117BC -:102B300000EB11600012322801DB012010BD0020E3 -:102B400010BD2DE9F047814639483E4E00EB81002B -:102B5000984690F825402020107006F50070154624 -:102B600000EB81170BE000BF06EB04104946001D87 -:102B7000FFF7C4FF28B107EB44002C704478202CE9 -:102B8000F2D1297888F8001013E000BF06EB041595 -:102B9000291D4846FFF7B2FF68B988F80040A97BB5 -:102BA00099F80A00814201D80020E8E407EB4400CC -:102BB0004478202CEAD10120E1E42DE9FC410E46C5 -:102BC000074600241F4D08E09DF8000005EB0010AB -:102BD0008168384600F0EAFD01246B4601AA3146BF -:102BE0003846FFF7AEFF0028EED02046BDE8FC8156 -:102BF00070B504460E4801258038A54300EB8411CA -:102C000000EB851040220EF077FF0F4E26B1002119 -:102C100040F25C40AFF30080054800EB850100EB1B -:102C20008400D0F82500C1F82500AEB100210FE0E6 -:102C30002C0A0020FFFF3F00000000008A00002057 -:102C400000F50040AC07002000000000B8220200A0 -:102C50004FF48C60AFF30080284670BD2DE9FC4135 -:102C60008446FF481546089C00EB85170E4617F86A -:102C70001400012803D0022801D00020B6E70B463B -:102C8000F84A0121604600F07DFDA8B101AB6A461B -:102C900029463046FFF755FF70B1F1489DF80420F2 -:102CA0009DF80010803000EB85068A4208D02B4644 -:102CB0000520FFF7AFFB0BE02A462146042014E075 -:102CC000202903D007EB4100407801E096F8250069 -:102CD00007EB440148709DF80000202809D007EB5D -:102CE000400044702A4621460320FFF765FB01207F -:102CF0007CE706F8254F0120F070F3E7DA4901EB95 -:102D00000010001DFFF7E1BB7CB51D4613460446CD -:102D10000E4600F1080221461846EFF743FF94F9EA -:102D200008000F2804DD1F3820722068401C206036 -:102D300096B10220CD4951F8261046182068694600 -:102D4000801B20F07F40206094F908002844C01CBC -:102D50001F2803DA012009E00420EBE701AAEFF7BE -:102D600021FF9DF8040010B10098401C00900099CC -:102D7000206831440844C01C20F07F4060607CBD66 -:102D80002DE9FE430C460646097860799072207959 -:102D900098461546507241B1B148803090F82E10D7 -:102DA00020290AD00069401D0BE0D4E902232179D3 -:102DB00003B02846BDE8F043A6E7AD484178701D52 -:102DC000084420F07F47217900222846A368FFF7B6 -:102DD0009BFF3946284600F0E9FCD4E9023221790C -:102DE0006846FFF791FF41462846019CFFF7E5FE44 -:102DF0002B4622460021304600F0C4FC002803D1B7 -:102E00003146284600F0D2FCBDE8FE832DE9FE4F96 -:102E1000814600F087FC38B15FF0000799F80000A8 -:102E200020B10020BDE8FE8F0127F7E78C4D914CC3 -:102E30004FF0000A803524B1002140F2D340AFF3B7 -:102E4000008095F82D8085F823A0002624B100216C -:102E50004FF49B60AFF300801FB94046FFF7C8FEF8 -:102E6000804624B100214FF49C60AFF30080EFF75F -:102E700019FE43466A464946FFF782FF24B1002106 -:102E800040F2E640AFF3008095F82E0020280CD0E9 -:102E900029690098401A0002C21700EB1260001264 -:102EA00003D5684600F082FC012624B100214FF4CE -:102EB0009E60AFF3008095F823000028BBD124B1B9 -:102EC000002140F2F640AFF30080EFF7EBFD6B46D8 -:102ED000644A002100F056FC0028A3D027B94146DF -:102EE0006846FFF76AFE064326B16846FFF7EDFA2B -:102EF000C9F8080024B1002140F20950AFF3008066 -:102F000001208FE72DE9FF5F8A46814600F00AFC29 -:102F1000534C803410B39AF80000002710B10128F8 -:102F200000D0FFDF534D25B1002140F27F50AFF3B9 -:102F300000800120A84600905FEA080604D0002126 -:102F400040F28750AFF30080009800F0E2FB94F865 -:102F50002D50002084F8230067B119E094F82E006A -:102F60000127202800D1FFDF9AF800000028D9D0DF -:102F7000FFDFD7E72846FFF73BFE054626B10021D5 -:102F800040F29150AFF3008094F823000028D3D191 -:102F900026B1002140F29B50AFF30080EFF782FD95 -:102FA00083462B4601AA5146FFF7EAFE5FEA060870 -:102FB00004D0002140F2A250AFF300803B462A46E5 -:102FC00001A95846CDF80090FFF748FE064604EBED -:102FD000850090F828B0B8F1000F04D0002140F22D -:102FE000A950AFF3008000F089FB0090B8F1000F0A -:102FF00004D0002140F2AF50AFF3008094F82300DA -:10300000002899D1B8F1000F04D0002140F2B75048 -:10301000AFF3008014490DF1040C01EB09109CE89A -:103020000E0000F1040080E80E002EB35FEA0806EF -:1030300004D0002140F2C450AFF300803BEA070007 -:1030400020D094F82E0020281CD126B1002140F277 -:10305000C950AFF300802846FFF7C6FB90B90CE0DB -:10306000AC090020FFFF3F00AC070020B82202009F -:103070008A0000200000000010E09AF80000D8B399 -:10308000012849D0B8F1000F04D0002140F2E650E9 -:10309000AFF30080284600F02AFB01265FEA08050E -:1030A00004D0002140F2EF50AFF30080009800F010 -:1030B00030FB25B1002140F2F350AFF300808EB118 -:1030C00094F82D0004EB800090F82600202809D009 -:1030D00025B1002140F2FA50AFF30080F948407862 -:1030E000F8F708FE25B1002140F2FF50AFF3008051 -:1030F00004B03046BDE8F09FFFE7B8F1000F04D000 -:10310000002140F2D150AFF3008094F82D204946C1 -:103110000420FFF751F9C0E7002E3FF40DAF002166 -:1031200040F2DC50AFF3008006E72DE9F84FE64DA2 -:10313000814695F82D004FF00008E44C4FF0010B4C -:10314000474624B1002140F20D60AFF3008058469D -:1031500000F0DFFA85F8237024B1002140F21260FC -:10316000AFF3008095F82D00FFF742FD064695F875 -:10317000230028B1002CE4D000214FF4C3604BE0C1 -:1031800024B1002140F21C60AFF30080CE488038AB -:1031900000EB861111F81900032856D1334605EBD0 -:1031A000830A4A469AF82500904201D1012000E0A6 -:1031B000002000900AF125000021FFF760FC014685 -:1031C0000098014203D001228AF82820AF77E1B3AA -:1031D00024B1002140F22160AFF30080324649461D -:1031E0000120FFF7E9F89AF828A024B1002140F265 -:1031F0002C60AFF3008000F081FA834624B10021F7 -:1032000040F23160AFF3008095F8230038B1002C14 -:1032100097D0002140F23560AFF3008091E7BAF11A -:10322000000F07D095F82E00202803D13046FFF775 -:10323000DBFAE0B124B1002140F24960AFF3008035 -:10324000304600F054FA4FF0010824B1002140F25A -:103250005260AFF30080584600F05BFA24B10021C1 -:1032600040F25660AFF300804046BDE8F88F002C76 -:10327000F1D0002140F24460AFF30080E6E7002087 -:10328000EFF74ABB0120EFF747BB8E480078704745 -:103290002DE9F0418C4C94F82E0020281FD194F891 -:1032A0002D6004EB860797F82550202D00D1FFDF15 -:1032B0008549803901EB861000EB4500407807F81E -:1032C000250F0120F87084F82300294684F82E5039 -:1032D000324602202234FFF76FF8002020700CE401 -:1032E0002DE9F0417A4E784C012538B1012821D0E2 -:1032F000022879D003287DD0FFDFF0E700F02AFA1A -:10330000FFF7C6FF207E00B1FFDF84F821500020C8 -:10331000EFF729FBA168481C04D0012300221846BE -:10332000EFF774FB14F82E0F217806EB01110A68F1 -:10333000012154E0FFF7ACFF0120EFF714FB94F8F4 -:10334000210050B1A068401C07D014F82E0F21783E -:1033500006EB01110A68062141E0207EDFF8648156 -:10336000002708F10208012803D002281ED0FFDF41 -:10337000B5E7A777EFF7E7FB98F80000032801D13E -:1033800065772577607D534951F8200094F8201027 -:1033900051B948B161680123091A00221846EFF7B4 -:1033A00035FB022020769AE7277698E784F82050AC -:1033B00000F0D0F9A07F50B198F8010061680123B6 -:1033C000091A00221846EFF721FB257600E0277640 -:1033D00014F82E0F217806EB01110A680021BDE8D0 -:1033E000F041104700E005E036480078BDE8F041C4 -:1033F000F8F780BCFFF74CFF14F82E0F217806EB8E -:1034000001110A680521EAE710B52F4C94F82E0047 -:10341000202800D1FFDF14F82E0F21782C4A02EB70 -:1034200001110A68BDE81040042110477CB5264C04 -:10343000054694F82E00202800D1FFDFA068401C2C -:1034400000D0FFDF94F82E00214901AA01EB001003 -:10345000694690F90C002844EFF7A4FB9DF904009D -:103460000F2801DD012000E0002000990844616878 -:10347000084420F07F41A16094F82100002807D083 -:1034800002B00123BDE8704000221846EFF7BEBA33 -:103490007CBD30B5104A0B1A541CB3EB940F1FD3EC -:1034A000451AB5EB940F1BD3934203D9101A431856 -:1034B0005B1C15E0954211D9511A0844401C434247 -:1034C0000EE00000880000202C0A00200000000010 -:1034D000AC070020B8220200FF7F841EFFDF00231C -:1034E000184630BD0123002201460220EFF78EBAB4 -:1034F0000220EFF738BAEFF7D5BA2DE9FC47B14C07 -:10350000054694F82E00202800D1FFDF642D58D303 -:10351000AD4A0021521B71EB010052D394F82E20CA -:10352000A0462046DFF8A49290F82D7009EB021413 -:10353000D8F8000001AA28446946EFF733FB9DF94B -:103540000400002802DD0098401C0090A06800994B -:1035500062684618B21A22F07F42B2F5800F30D26C -:1035600008EB8702444692F82520202A0AD009EB6E -:1035700002125268101A0002C21700EB1260001209 -:1035800088421EDBA068401C10D0EFF78BFAA168C0 -:10359000081A0002C11700EB11600012022810DDAA -:1035A0000120EFF7E0F94FF0FF30A06020682844D9 -:1035B000206026F07F402061012084F82300BDE8D0 -:1035C000FC870020FBE72DE9F0477E4C074694F886 -:1035D0002D00A4F1800606EB801010F8170000B94A -:1035E000FFDF94F82D50A046794C24B1002140F61D -:1035F0006500AFF3008040F6710940F67A0A06EBE9 -:10360000851600BF16F81700012818D0042810D01E -:1036100005280ED006280CD01CB100214846AFF377 -:10362000008020BF002CEDD000215046AFF3008079 -:10363000E8E72A4639460120FEF7BEFEF2E74FF0E2 -:10364000010A4FF00009454624B1002140F68100EF -:10365000AFF30080504600F05CF885F8239024B169 -:10366000002140F68600AFF3008095F82D00FFF7AB -:10367000BFFA064695F8230028B1002CE4D00021BB -:1036800040F68C001FE024B100214FF40960AFF335 -:10369000008005EB860000F1270133463A462630CC -:1036A000FFF7EDF924B1002140F69400AFF300805C -:1036B00000F024F8824695F8230038B1002CC3D0DE -:1036C000002140F69A00AFF30080BDE785F82D6039 -:1036D000012085F82300504600F01BF8002C04D090 -:1036E000002140F6A700AFF30080BDE8F087354920 -:1036F00081F82D00012081F82300704710B535486E -:1037000008B1AFF30080EFF3108000F0010072B653 -:1037100010BD10B5002804D12F4808B1AFF30080C8 -:1037200062B610BD2D480068C005C00D10D010381D -:1037300040B2002806DA00F00F0000F1E02090F817 -:10374000140D03E000F1E02090F8000440097047F8 -:103750000820704710B51B4C94F82400002804D1B1 -:10376000F8F7B6F8012084F8240010BD10B5154C08 -:1037700094F82400002804D0F8F7D3F8002084F847 -:10378000240010BD10B51C685B68241A181A24F0B8 -:103790007F4420F07F40A14206D8B4F5800F03D2C9 -:1037A000904201D8012010BD002010BDD0E90032A8 -:1037B000D21A21F07F43114421F07F41C0E900314A -:1037C000704700002C0A0020FF1FA107AC07002053 -:1037D00000000000000000000000000004ED00E018 -:1037E000F0B5734AD2F80032724D002401212E78D0 -:1037F00056B9714E3460704F03263F1D3E606E4FC8 -:1038000004260C373E602970C2F80042D160116076 -:10381000694C4834D16425688542FBD35160D1603E -:10382000C2F80032F0BD2DE9F041044680074FF0A8 -:1038300000054FF0010604D560480560066024F0DD -:103840000204E0044FF0FF3705D55D484660C0F83C -:10385000087324F48054600003D55A48056024F0AE -:103860008044E0050FD55248C0F80052C0F80873F4 -:1038700051490D60091D0D604F4A04210C32116041 -:10388000066124F48074A00409D54F484660C0F84E -:103890000052C0F808734D48056024F40054C4F386 -:1038A0008030C4F3C031884200D0FFDF14F4404FB1 -:1038B00014D047484660C0F8087346488660C0F890 -:1038C0000052C0F8087344490D600A1D16608660F6 -:1038D000C0F808730D60166024F4404420050AD532 -:1038E0003E4846608660C0F80873C0F848733C489C -:1038F000056024F400640DF077FB3A48044200D0E0 -:10390000FFDFBDE8F08170B5202500224FEA0203F9 -:1039100020FA02F1C90719D051B201F01F060124A3 -:10392000B4404E09B60006F1E026C6F88041C6F85C -:103930008042002906DA01F00F0101F1E02181F84F -:10394000143D03E001F1E02181F80034521CAA4249 -:10395000DED370BD70B5174C0D466060FFF763FF96 -:103960006068FFF7D0FF2846F8F7A7F80CF05EFF75 -:1039700000F0ABF80DF038FB0DF083FAF8F78CF996 -:10398000BDE870400DF000B810B50A4C6068FFF754 -:103990004AFF6068FFF7B7FF0DF026FBF8F721F943 -:1039A0000020606010BD0348406870470A207047DF -:1039B000008000408C00002004850040FC1F004077 -:1039C00000C0004004E5014000D0004004D50040A4 -:1039D00000E0004000F0004000F5004000B0004072 -:1039E00008B50040FEFF0FFD70B522490A680AB312 -:1039F0000022154601244B685B1C4B60092B00D349 -:103A00004D600E7904FA06F30E681E420FD0EFF3F4 -:103A1000108212F0010272B600D001220C689C43A1 -:103A20000C6002B962B649680160002070BD521C8A -:103A3000092AE0D3052070BD4FF0E0214FF480004B -:103A4000C1F800027047EFF3108111F0010F72B658 -:103A50004FF0010202FA00F20648036842EA03024C -:103A6000026000D162B6E7E70248002101604160D0 -:103A70007047000094000020AD4911F8410F4978CB -:103A8000884201D3401A02E0C1F141010844C0B2AA -:103A90007047A749433111F8410F4978884201D353 -:103AA000401A02E0C1F141010844C0B27047A04988 -:103AB000863111F8410F4978884201D3401A02E05B -:103AC000C1F141010844C0B270479A4910B5802045 -:103AD00081F8000496490020433101F8410F4870F5 -:103AE000934901F8410F48709149863101F8410F1F -:103AF000487091480DF00EF98F48401C0DF00AF9FE -:103B0000EFF7DAF8BDE8104000F006B94020704742 -:103B1000B2E770B50C4605460026FFF7ADFF844AB4 -:103B2000A04214D30021641EE4B20FD392F84200E5 -:103B3000105C05F8010B92F84200401CC0B282F8FC -:103B400042004128EFD182F84210ECE7012600F054 -:103B5000E3F8304670BD402070479AE770B50C46D8 -:103B600005460026FFF795FF714A4332A04214D361 -:103B70000021641EE4B20FD392F84200105C05F8F5 -:103B8000010B92F84200401CC0B282F8420041286A -:103B9000EFD182F84210ECE7012600F0BDF8304684 -:103BA00070BD402101700020704710B50446FFF73A -:103BB0007EFF2070002010BD70B50C460546FFF753 -:103BC00076FF5B4A8632A04215D30021641EE4B220 -:103BD0000FD392F84200105C05F8010B92F84200F6 -:103BE000401CC0B282F842004128EFD182F8421056 -:103BF000ECE7002401E042F2070400F08DF82046D3 -:103C000070BD70B50C460546412900D9FFDF4B4811 -:103C10000068103840B200F066F8C6B20D2000F01F -:103C200062F8C0B2864203D2FFDF01E0EFF794F8FA -:103C300021462846FFF76DFF0028F7D070BD2DE91B -:103C4000F0413D4F0025064617F10407412257F881 -:103C5000254094F8421094F8410000F053F888B3DE -:103C60006D1CEDB2032DF1D331484122433090F861 -:103C7000421090F8410000F045F8002831D02C485F -:103C8000412290F8421090F8410000F03BF80028E3 -:103C900027D027484122863090F8421090F8410002 -:103CA00000F030F800281CD0EFF72CF822480DF077 -:103CB00039F8B0F5005F00D0FFDFBDE8F0411E48E5 -:103CC0000DF046B894F84100265494F84100401C89 -:103CD000C0B284F841004128C6D1002084F84100D8 -:103CE000C2E7BDE8F081002806DA00F00F0000F11D -:103CF000E02090F8140D03E000F1E02090F80004BB -:103D000040097047401C884204D0904200D109B15C -:103D1000002070470120704710B507480DF002F8E9 -:103D2000002803D1BDE81040EEF7D7BF10BD00005A -:103D30005C0A00200DE000E09C00002004ED00E0A3 -:103D4000164908784A78401CC0B2904205D0144BFE -:103D500001221A60BFF34F8F087070472DE9F041C0 -:103D60000E4C4FF0E02600BFEFF77CF820BF40BFBD -:103D700020BF677820786070D6F80052EDF7CCFA53 -:103D8000854305D1D6F8040210B92078B842EBD0AB -:103D9000EFF763F80020BDE8F0810000AC000020E0 -:103DA000180502402DE9F041012528034FF0E021DC -:103DB0000026C1F880011E4CC4F800610C2000F000 -:103DC0002CF81C4801680268C94341F3001142F015 -:103DD00010020260C4F804532560491C00E020BFB3 -:103DE000D4F80021002AFAD019B9016821F0100195 -:103DF0000160114807686560C4F80853C4F80061A1 -:103E00000C2000F00AF83846BDE8F08110B50446F1 -:103E1000FFF7C8FF2060002010BD00F01F02012145 -:103E200091404009800000F1E020C0F88012704706 -:103E300000C0004010ED00E008C500402DE9F0474B -:103E4000FF4C0646FF21A06800EB06121170217896 -:103E5000FF2910D04FF0080909EB011109EB0617F3 -:103E60004158C05900F0F4F9002807DDA168207816 -:103E700001EB061108702670BDE8F08794F8008009 -:103E800045460DE0A06809EB05114158C05900F006 -:103E9000DFF9002806DCA068A84600EB08100578CA -:103EA000FF2DEFD1A06800EB061100EB08100D709C -:103EB0000670E1E7F0B5E24B0446002001259A6860 -:103EC0000C269B780CE000BF05EB0017D75DA742DE -:103ED00004D106EB0017D7598F4204D0401CC0B262 -:103EE0008342F1D8FF20F0BD70B5FFF704FBD44C3E -:103EF00008252278A16805EB0212895800F0A8F97C -:103F0000012808DD2178A06805EB01114058BDE8C3 -:103F10007040FFF7E7BAFFF7B8F9BDE87040F7F770 -:103F2000E9BE2DE9F041C64C2578FFF7E4FAFF2DF4 -:103F30006ED04FF00808A26808EB0516915900F002 -:103F400087F90228A06801DD80595DE000EB0511CA -:103F500009782170022101EB0511425C5AB1521E11 -:103F60004254815901F5800121F07F418151284659 -:103F7000FFF764FF34E00423012203EB051302EB97 -:103F8000051250F803C0875CBCF1000F10D0BCF5DF -:103F9000007F10D9CCF3080250F806C00CEB423C6D -:103FA0002CF07F4C40F806C0C3589A1A520A09E018 -:103FB000FF2181540AE0825902EB4C3222F07F4209 -:103FC0008251002242542846FFF738FF0C21A06896 -:103FD00001EB05114158E06850F82720384690471A -:103FE0002078FF2814D0FFF786FA2278A16808EB22 -:103FF00002124546895800F02BF9012893DD2178FB -:10400000A06805EB01114058BDE8F041FFF76ABA1E -:10401000BDE8F081F0B51D4614460E460746FF2B5D -:1040200000D3FFDFA00700D0FFDF8548FF2100227B -:10403000C0E90247C5700671017042708270104677 -:10404000012204E002EB0013401CE154C0B2A8427C -:10405000F8D3F0BD70B57A4C064665782079854274 -:1040600000D3FFDFE06840F825606078401C607096 -:10407000284670BD2DE9FF5F1D468B460746FF248D -:10408000FFF739FADFF8B891064699F80100B8420F -:1040900000D8FFDF00214FF001084FF00C0A99F81B -:1040A0000220D9F808000EE008EB0113C35CFF2BD7 -:1040B0000ED0BB4205D10AEB011350F803C0DC451A -:1040C0000CD0491CC9B28A42EED8FF2C02D00DE0B8 -:1040D0000C46F6E799F803108A4203D1FF2004B09A -:1040E000BDE8F09F1446521C89F8022008EB041129 -:1040F0000AEB0412475440F802B00421029B00224C -:10410000012B01EB04110CD040F801204FF4007892 -:1041100008234FF0020C454513D9E905C90D02D01B -:1041200002E04550F2E7414606EB413203EB04134F -:1041300022F07F42C250691A0CEB0412490A8154E2 -:104140000BE005B9012506EB453103EB041321F023 -:104150007F41C1500CEB0411425499F800502046A5 -:10416000FFF76CFE99F80000A84201D0FFF7BCFEF3 -:104170003846B4E770B50C460546FFF7BCF906466D -:1041800021462846FFF796FE0446FF281AD02C4DFC -:10419000082101EB0411A8684158304600F058F896 -:1041A00000F58050C11700EBD14040130221AA68EE -:1041B00001EB0411515C09B100EB4120002800DC47 -:1041C000012070BD002070BD2DE9F0478846814672 -:1041D000FFF770FE0746FF281BD0194D2E78A86800 -:1041E0003146344605E0BC4206D0264600EB0612B6 -:1041F0001478FF2CF7D10CE0FF2C0AD0A6420CD18A -:1042000000EB011000782870FF2804D0FFF76CFE47 -:1042100003E0002030E6FFF76BF941464846FFF720 -:10422000A9FF0123A968024603EB0413FF20C85429 -:10423000A878401EB84200D1A87001EB041001E03C -:10424000280B002001EB061100780870104613E6D9 -:10425000081A0002C11700EB11600012704700003D -:1042600070B50446A0F500002D4EB0F1786F02D273 -:104270003444A4F500042B48844201D2012500E017 -:10428000002500F043F848B125B9B44204D32648CC -:10429000006808E0012070BD002070BD002DF9D13C -:1042A000B442F9D321488442F6D2F3E710B504466C -:1042B000A0F50000B0F1786F03D219480444A4F5CA -:1042C000000400F023F84FF0804130B11648006838 -:1042D00004E08C4204D2012003E014488442F8D266 -:1042E000002080F0010010BD10B520B1FFF7DEFF07 -:1042F00008B1012010BD002010BD10B520B1FFF79E -:10430000AFFF08B1012010BD002010BD08480949C9 -:104310000068884201D101207047002070470000EA -:1043200000000020003002002000002008000020D3 -:10433000B0000020BEBAFECA0548064A0168914294 -:1043400001D100210160044901200860704700008C -:10435000B0000020BEBAFECA40E50140534800212B -:104360000170417010218170704770B50546164686 -:104370000C460220EEF73FFA4C49012008704C49E8 -:10438000F01E08604B480560001F046070BD10B54A -:104390000220EEF730FA4549012008704648002116 -:1043A000C0F80011C0F80411C0F8081143494FF4D7 -:1043B0000000086010BD3D480178C9B1404A4FF483 -:1043C000000111603C49D1F800310022002B1CBFD4 -:1043D000D1F80431002B02D0D1F8081111B142708C -:1043E000102103E001214170364909688170027093 -:1043F0000020EEF700BA2D480178002904BF40786C -:1044000070472D48D0F80011002904BF02207047E2 -:10441000D0F8001100291CBFD0F80411002905D0E4 -:10442000D0F80801002804BF012070470020704721 -:104430001E4800B50278204B4078C821491EC9B2F9 -:1044400082B1D3F800C1BCF1000F10D0D3F8000145 -:1044500000281CBFD3F8040100280BD0D3F80801B2 -:1044600050B107E0022802D0012805D002E000295F -:10447000E4D1FFDF002000BD012000BD0B48017822 -:10448000002904BF807870470B48D0F8001100293C -:104490001CBFD0F80411002902D0D0F8080108B1DF -:1044A0001020704707480068C0B27047B400002071 -:1044B00010F5004008F5004000F0004004F5014010 -:1044C00008F5014000F400404C48002101704170A3 -:1044D000704770B5064614460D460120EEF78BF97D -:1044E00047480660001D0460001D056070BD70B582 -:1044F000424A012540EA01411570424A41F080716B -:104500001160414C0026C4F80461404A4FF04071EC -:104510001160002802BFC4F80052256070BD012858 -:1045200018BFFFDFC4F8006225604FF00070384903 -:10453000086070BD3148017879B1344A4FF040715C -:1045400011603149D1F804210021002A08BF4170CF -:1045500002D0304A1268427001700020EEF74BB969 -:1045600026480178002904BF407870472648D0F8D3 -:104570000401002808BF704726480068C0B2704791 -:10458000002808BF704730B51C480078002808BFD5 -:10459000FFDF1D48D0F80411002918BF30BD0224E8 -:1045A000C0F80443DFF870C0DCF80010C1F3001558 -:1045B000DCF8001041F01001CCF80010D0F8041124 -:1045C000002904BF4FF400414FF0E02207D100BFA3 -:1045D000C2F8801220BFD0F80431002BF8D02DB9DA -:1045E000DCF8001021F01001CCF80010C0F80843EE -:1045F00030BD05490120886070470000B7000020E9 -:1046000008F5004004F5004000F0004008F50140C6 -:1046100004F5014000F4004010ED00E070B5FF4CDF -:1046200000250120657025706572A572E07284F81E -:104630002150A56204F1380065630CF06BFB002883 -:1046400018BFFFDFA577F6480DF0F6FBF5494FF0F0 -:10465000FF300860091D0860091D0D60091D086014 -:10466000091D0D60091D0860091D0860091D08600D -:10467000091D0860091D0860091D0860091D086002 -:10468000091D0860091D086070BD30B4E349026867 -:10469000DFF898C34A6142688A61007A08770A7D28 -:1046A000E14BACF1040401204AB10A7E00FA02F2A7 -:1046B0001A608D7D002D0CBF2260CCF800204A7D51 -:1046C000002A04BF30BC70474A7E90401860C97D04 -:1046D00000290CBF2060CCF8000030BC7047D549E1 -:1046E000D3480860091DD4480860704710B50446D7 -:1046F000012908BF002105D002291ABFFFDF0021D0 -:104700004FF0807141F48470CA4940F48010086011 -:10471000E0B240F44030091D40F000700860C74826 -:10472000D0F80001002818BFFFDF10BD01202DE9DF -:10473000F04102254FF0E0270026C7F88051C0491C -:104740000E600860BF490A6822F0770242F08802D2 -:1047500042F000420A60091D0A6822F47F4242F4D6 -:10476000B0520A60AD4CB84965770D60B84AB74998 -:104770001160121FB7491160B74A40F25B611160C6 -:10478000121F40F203111160111F0860B34903208A -:104790000860B3499620086094F91E000CF06AFD89 -:1047A000607F002814BF4FF4C020AE48AE490860B7 -:1047B000AF49AE480860091FAE480860C7F880528C -:1047C0009E491020C1F8040384F82D60BDE8F081F3 -:1047D000A948016821F0010141F080710160704732 -:1047E0008E4A0368C2F802308088D0801172704708 -:1047F0008A4890F821007047884A517010707047BD -:10480000F0B50546800000F1804000F580508B88AF -:10481000C0F820360B78D1F8011043EA0121C0F826 -:10482000001605F10800012707FA00F6934C002A4C -:1048300004BF2068B04304D0012A18BFFFDF2068FE -:1048400030432060206807FA05F108432060F0BD7E -:1048500010B504460CF00EFD7048847710BD6F480B -:1048600090F82E0070476D4890F830007047844AE9 -:10487000C1781160006883490002086070472528EC -:1048800008BF02210ED0262808BF1A210AD02728E7 -:1048900008BF502106D00A2894BF0422062202EB4A -:1048A0004001C9B2784A116078490860704770B415 -:1048B0005A4B93F80AC0BCF1010F21D0BCF1020F92 -:1048C0001CBF70BC70475C7D002C04BF70BC70477F -:1048D0004FF47A74BCF1010F6D4E16D0DD7D93F864 -:1048E00019C0002D18BF0125012908BF292121D099 -:1048F000022A08BF674E06F2E141B1FBF4F119E06C -:104900001C7D002CE4D170BC70479D7D93F818C0CD -:10491000002D18BF0125012947D0022A06BF5E4E8F -:104920004FF47A714FF4C861314401F5FA7100BF58 -:10493000B1FBF4F1491F0844584908605849002068 -:10494000C1F84C014FEA0C2085F0010140EA01500A -:1049500040F00311187F820002F1804202F5C0424C -:10496000C2F810154F4901EB8001987EC20002F198 -:10497000804202F5F832C2F81415DFF82CC1C2F8F3 -:1049800010C5DA7ED30003F1804303F5F833C3F892 -:1049900014153849C3F81015012101FA00F09140AF -:1049A00008434249086070BC7047022A14BF4FF4A4 -:1049B000C8614FF47A7149F6FC621144B8E72DE9F9 -:1049C000F0411E4D0746032014468846C5F80002F4 -:1049D000124E707F002814BF4FF4C0202148334985 -:1049E000086040460CF094FC20460CF071FC01205D -:1049F00017B1012F60D062E02D4B19685A06022CC6 -:104A0000D2F8202314BFC2F30622C2F3066221F4B7 -:104A1000FE4141EA02211960B0724BE0380B0020E0 -:104A20004C0B0020000E0040180500500C050050F3 -:104A3000060102001415004025000302001000408A -:104A4000FC1F00403C1700406015004044800040BF -:104A50009CF5014028110040381500401015004019 -:104A6000441500400000040408F501404080004067 -:104A7000A4F501401011004074170040401600409A -:104A8000241500401C150040081500405415004036 -:104A9000A224020004360200683602004C85004061 -:104AA00000800040006000404C81004004F501405F -:104AB00088150040286002E00221B1726860F9495F -:104AC000C864F948006822464146BDE8F041EEE678 -:104AD0002DE9F0418846F549074603201546C1F8FF -:104AE0000002F34C607F002814BF4FF4C020F1484F -:104AF000F14E306040460CF00BFC28460CF0E8FB11 -:104B000017B1012F19D021E0EC490A684806022D9F -:104B1000D0F8200314BFC0F30620C0F3066022F4CF -:104B2000FE4242EA002008600120A072606B40F45F -:104B3000801060634FF4801007E00220A072606B69 -:104B400040F4001060634FF4001030602A46414684 -:104B5000BDE8F0410020AAE62DE9FF4FD34C824684 -:104B6000002681B003208946C4F80002D04D687F3A -:104B7000002814BF4FF4C020CE48CF4F38600398B0 -:104B80000CF0C6FB04980CF0A3FBCD494FF00108D4 -:104B9000BAF1000F03D0BAF1010F32D03BE0C74B9E -:104BA00004981A684FF0805C0228DCF8200314BFD8 -:104BB000C0F30620C0F3066022F4FE4242EA002061 -:104BC00018600C6095F82D00012806D0022818BF47 -:104BD000FFDF0CD085F80A801DE0DDE9031395F8AE -:104BE0002C2048460CF0E6FBA96A4618F2E7DDE9FE -:104BF000031295F82C3048460CF097FBA96A46182A -:104C0000E8E7B048086095F82D00012818BFFFDFDD -:104C100020D00220A872AC480660AD49AB480860BD -:104C2000686B40F400206863D4F800924FF0100ADB -:104C3000C4F808A30025C4F80052A6484FF4802BFE -:104C4000C0F800B0FF208DF80000C4F81051C4F87F -:104C500010800EE0DDE9031395F82C2096200CF06F -:104C600087FBA96A4618D4E79DF80000401E8DF81E -:104C700000009DF8000018B1D4F810010028F3D00E -:104C80009DF80000002808BFFFDFC4F80051C4F8F9 -:104C90000C51C4F81051C4F80451C4F81451C4F8AC -:104CA0001851C4F828518C4800680090C4F800924C -:104CB000C7F800B0C4F804A34FF400203860794866 -:104CC000C0F84C8078480068B04228BFFFDF30460B -:104CD000DDE9031205B0BDE8F04FE8E52DE9F8473E -:104CE000724CD4F8000220F00309D4F804034FF00A -:104CF000100AC0F30018C4F808A30026C4F8006224 -:104D00006B4D687F002814BF4FF4C020694871497B -:104D10000860A87A0127012802D0022803D014E0F5 -:104D2000287D10B911E0687D78B1A87EEA7E07FA87 -:104D300000F007FA02F210430860287F800000F1BB -:104D4000804000F5C040C0F81065FF208DF80000DD -:104D5000C4F81061276104E09DF80000401E8DF842 -:104D600000009DF8000018B1D4F810010028F3D01D -:104D70009DF80000002808BFFFDFC4F81061C4F8E8 -:104D800028616E72AE72EF72C4F80092B8F1000F33 -:104D900018BFC4F804A3BDE8F88700684F4920F0A5 -:104DA0007F40086070474FF0E0200221C0F880117A -:104DB000C0F8801270474FF0E0210220C1F80001D6 -:104DC000704747490870704710B546480BF0AAFF76 -:104DD000002818BFFFDF10BD42480BF0B9BF4249A1 -:104DE0000860704730B5324C0546A06AA84228BF1B -:104DF000FFDF012020732561607F40B128442061DE -:104E00002A48D0F8001241F04001C0F800122549AC -:104E10000020C1F84401354920690860606B2649CB -:104E200040F4800060634FF48000086030BD70B5CE -:104E30001F4C0546022020730CF057FA024694F8E6 -:104E40002C1028460CF0E0FA2061617F41B1084443 -:104E500020611648D0F8001241F04001C0F800125D -:104E600010490020C1F844012169A06A08441F4983 -:104E7000086070BD17494FF4800008600C48416B12 -:104E800021F480014163002101737047054801212D -:104E90004160C1600021C0F8441114480160044819 -:104EA00081627047008000404C8500400010004047 -:104EB000380B00200000040404F501408815004070 -:104EC000ACF5014004100040488500404881004096 -:104ED000A8F5014008F50140181100403C150040BC -:104EE000B9000020700B00200415004044850040EC -:104EF000FE4940204877FE490860FE48D0F800127D -:104F000041F04001C0F800127047FA48D0F8001292 -:104F100021F04001C0F80012F549022008607047F6 -:104F2000F448D0F8001221F01001C0F8001201215D -:104F300081617047EF480021C0F81C11D0F80012C1 -:104F400041F01001C0F800127047EA4981B0D1F871 -:104F50001C21012A1EBF002001B07047E64A1268DA -:104F600002F07F02524202700020C1F81C01E348A7 -:104F700000680090012001B0704730B50C00054674 -:104F800008BFFFDF14F0010F1CBF012CFFDF002D55 -:104F90000CBF01200220D54901284872CC72D549A6 -:104FA00004BFD1F8000240F0040007D0022807BF78 -:104FB000D1F8000240F00800FFDF30BDC1F8000268 -:104FC00030BD70B5C94C0023E17A11F0020F18BF53 -:104FD00010F0040F16D111F0100F1CBF94F82F2001 -:104FE000002A02D094F8312062B111F0080F1CBFE2 -:104FF00094F82020002A05D111F0040F03D094F872 -:10500000211001B9012394F809C00122B949BCF16A -:10501000000F06D000F00200184312D0BDE8704027 -:105020005CE6607F002814BF4FF4C020B448B54B45 -:105030001860D1F8000220F00300C1F80002E2720B -:1050400070BD00252846BCF1010F0BD0BCF1020F4A -:1050500018BFFFDF16D0A06A01222844BDE87040C7 -:10506000002124E4D1F8003223F00403C1F8003217 -:105070006072E272A27201231A46002196200CF09F -:1050800054F90FE0D1F8003223F00803C1F80032E0 -:105090006072E2720220A07201231A46002196205B -:1050A0000CF066F90546D6E72DE9F84F964FD7F88C -:1050B0004C218E4C93494FF00108A07A0026CAB1CA -:1050C000012802D0022803D014E0227D12B911E099 -:1050D000627D7AB1A27EE37E08FA02F208FA03F357 -:1050E0001A430A60227F920002F1804202F5C04218 -:1050F000C2F81065626B0A606663217B29B1D7F83C -:105100004411012908BF012200D00022794DD5F8B1 -:10511000101101290CBF40210021012805BFD5F83D -:105120000C31012B002320231943012805BFD5F89A -:105130000431012B002310230B437449022804BFC0 -:10514000D1F800C0BCF1010F07D1D5F80CC1BCF1FA -:10515000010F08BF4FF0080C01D04FF0000C4CEAD3 -:105160000303022804BF0968002905D1D5F80C11F2 -:10517000012908BF042100D000211943022803D1CE -:10518000002A18BF022200D100221143022804BFC6 -:10519000D5F80401012805D1D7F84401012818BF2A -:1051A000012000D1002040EA01095948016811F0AE -:1051B000FF0F03D0D5F81411012900D0002184F885 -:1051C0002E10006810F0FF0F03D0D5F81801012849 -:1051D00000D0002084F82F004E48006884F830008A -:1051E00043480068402803D1FFF705F9012800D0A3 -:1051F000002084F83100C5F80061C5F80C61C5F8DD -:105200001061C5F80461C5F81461C5F81861C5F8E6 -:105210002861414800680090C7F844613F48006831 -:105220004D46DFF8FC900090D9F800106162607F75 -:1052300000281CBF081A60623A480068A0620CF09F -:1052400054F884F82C00A07ADFF8DCA084F82D0054 -:1052500002280CD1607850B1DAF8001009780840C3 -:10526000217831EA000008BF84F8208001D084F85A -:105270002060DFF8B88015F0010F15D098F8001005 -:105280002B4A4908606A52F8211088470121294AAF -:1052900098F80030A06A52F82320904798F8000050 -:1052A00010F0010F0BD01FE015F0200F18BF0221E6 -:1052B000EDD115F0020F18BF0021E8D1EEE7DAF8C2 -:1052C0000000062200F10901A01C0CF0E9FB40B926 -:1052D000207ADAF800100978B0EBD11F08BF01205E -:1052E00000D0002084F82100284625E0380B00205B -:1052F0006015004000100040481500401C1100409F -:105300000000040408F50140008000400014004043 -:105310004016004010140040181100404481004025 -:10532000448500404085004004150040B90000203D -:10533000D022020008230200FFF743FE15F0020FFF -:1053400005D03D4898F8001050F82100804715F02E -:105350000C0F07D0394898F8001050F82110C5F309 -:10536000C000884715F0200F05D0354898F8001088 -:1053700050F82100804798F80000022805D105F078 -:105380006E00402806D101F0DDFB98F800000428EB -:1053900028BFFFDFA07A022818BFBDE8F88F207B66 -:1053A000002808BFBDE8F88FC7F84461022815D06F -:1053B000012818BFFFDFA16A2069884298BFFFDF7C -:1053C000D4F81000C9F80000606B1E4940F480005A -:1053D00060634FF480000860BDE8F88F2169A06A1F -:1053E0000844EFE7012804BF28207047022804BFC3 -:1053F0001820704700B5FFDF282000BD012804BF3A -:1054000041F6A4707047022804BF41F2883070470B -:1054100000B5FFDF41F6A47000BD012804BF41F2D2 -:10542000D4707047022804BF41F20400704700B5F1 -:10543000FFDF41F2D47000BDD8220200E822020052 -:10544000F822020004F5014010B53F480AF0F7FBCE -:1054500000213D480AF022FC01213B480AF0F2FB02 -:105460003A49002081F822004FF6FF7088843849BD -:105470000880488010BD704734498A8C824218BF2A -:105480007047002081F822004FF6FF708884704733 -:105490002D49016070472E49088070472B498A8C3E -:1054A000A2F57F43FF3B03D000210160084670470F -:1054B00091F822202549012A1ABF0160012000200D -:1054C0007047224901F1220091F82220012A04BFED -:1054D00000207047012202701D4800888884104611 -:1054E00070471B49488070471849194B8A8C5B8864 -:1054F0009A4206D191F82220002A1EBF01600120A5 -:105500007047002070471148114A818C528891429F -:1055100009D14FF6FF71818410F8221F19B10021C3 -:10552000017001207047002070470848084A818CAC -:105530005288914205D190F8220000281CBF00201B -:1055400070470120704700009A0B0020740B002068 -:10555000BA0000207047574A012340B1012818BF04 -:105560007047137008689060888890817047537006 -:105570000868C2F802008888D08070474D4A10B190 -:10558000012807D00EE0507860B1D2F80200086020 -:10559000D08804E0107828B19068086090898880ED -:1055A0000120704700207047424910B1012803D004 -:1055B00006E0487810B903E0087808B10120704788 -:1055C0000020704730B58DB00C4605460D2104A86B -:1055D0000CF02BFBE0788DF81F0020798DF81E0071 -:1055E00060798DF81D002868009068680190A868AF -:1055F0000290E868039068460BF0B2F920789DF8B5 -:105600002F1088420CD160789DF82E10884207D167 -:10561000A0789DF82D10884202BF01200DB030BD4A -:1056200000200DB030BD30B50C4605468DB04FF0B2 -:10563000030104F1030012B1FEF790FA01E0FEF756 -:10564000E0FA60790D2120F0C00040F04000607168 -:1056500004A80CF0EAFAE0788DF81F0020798DF8A4 -:105660001E0060798DF81D00286800906868019020 -:10567000A8680290E868039068460BF071F99DF8FD -:105680002F0020709DF82E0060709DF82D00A070F6 -:105690000DB030BD10B5002904464FF0060102D010 -:1056A000FEF75CFA01E0FEF7ACFA607920F0C0008A -:1056B000607110BDBE00002070B5FA4E044696F829 -:1056C00092000025012828D096F88C00012833D0BC -:1056D00096F86A0001281CBF002070BD6570132079 -:1056E0002070202206F16C01A01C0CF005FA0120AC -:1056F000A07186F86A50B6F86E10A6F88E10EA49C6 -:1057000049684A7B86F8902086F88C000888FBF769 -:10571000AFFAFAF71FFF012070BD657019202070E5 -:10572000D6F89300C4F80200D6F89700C4F8060033 -:1057300086F89250012070BD657006202070D6F862 -:105740008E00C4F8020086F88C50E4E7D54890F843 -:105750006A10002914BFB0F86E004FF6FF70704752 -:1057600070B5D14800250570017800291CBFFFDF06 -:1057700070BDCC4C84F8625084F8635084F8645057 -:1057800084F8655084F85E5084F8605084F8565070 -:1057900084F8365084F867507F21817094F8660051 -:1057A00028B1FFF7B2FBFEF706FE84F8665084F8D6 -:1057B0006A5084F88C5084F89250BC480AF0D6F8AD -:1057C000BDE87040BA480AF0D1B8B64890F8620017 -:1057D0007047B44900B591F8580091F85710C0F3DC -:1057E0008002C0F340031A4400F001001044052970 -:1057F00010D2DFE801F00B070B030900AD4931F8C7 -:10580000100000BDAC4800BDAC4900E0AC4931F827 -:10581000100000BDFFDF002000BDA24840F2712152 -:10582000B0F85A00484370479E4890F86800002836 -:1058300018BF0120704710B59A4C207A022818BF73 -:10584000032808D1207C04F1110108F071FF082819 -:105850001CBF012010BD207A002816BF022800209E -:105860000120BDE81040FFF79FBE8E4908727047C7 -:105870008C4981F8600070472DE9F041894C82B075 -:10588000207A002816BF022800200120607204F14F -:105890000A01FFF773FE207A022816BF03280121B0 -:1058A000002184F85F10082084F85D00607A0126EA -:1058B000002504F10A02012804BF527912F0C00F3A -:1058C0000AD004F10A02012804D1507900F0C00086 -:1058D000402801D0002000E0012084F85E0029B9B2 -:1058E00094F85700012818BF042806D1207C04F141 -:1058F000110108F01DFF84F85D002560FDF7B8F880 -:1059000060604FF0000894F85D0008F02DFF074636 -:1059100094F85F00002818BF002F04D010213846EB -:1059200009F093FD68B194F8600000281CBF94F85A -:105930005E0000281DD0607A04F10A0101280ED013 -:1059400012E06672424604F10A013846FFF76BFE28 -:1059500094F85D1004F10A0008F0FEFF09E04879B0 -:1059600000F0C000402840D0294604F10A00FFF7AB -:1059700091FE04F10A014D480AF01EF8617A4B4885 -:105980000AF03FF804F10A0149480AF015F8617A73 -:1059900047480AF036F894F8570001281EBF04283B -:1059A00002B0BDE8F081002594F85D0008F0E5FE46 -:1059B000040004BF02B0BDE8F081102109F045FDEC -:1059C00000281CBF02B0BDE8F0812A466946204687 -:1059D000FFF729FE6946354809F0FCFF01213348ED -:1059E0000AF01CF802B0BDE8F08108F0EEFF424674 -:1059F00004F10A01FFF717FEBBE770B5294C417BA4 -:105A000084F85810017984F8571001290CBF00223E -:105A10000288A4F85A20827B84F868208279002AC0 -:105A200016BF022A002201222274D0F80720C4F8EF -:105A30001120B0F80B00A4F8150094F856000125C9 -:105A4000002818BF84F8635094F83600002818BF67 -:105A500084F8645005293AD2DFE801F0030C1E34C3 -:105A60000C000021114809F084FF01210F4809F0C2 -:105A7000BFFF2DE001210D4809F07BFF04F111016A -:105A80000A4809F0A7FF217C084809F0C7FF012157 -:105A9000064809F0ADFF1BE00621044809F069FF44 -:105AA00016E00000BC0B0020CC000020580C0020A9 -:105AB000800C002028230200D0891300302302002C -:105AC000202302000221FE4809F053FF00E0FFDF1F -:105AD0000421FC4809F04DFF84F86250002070BD9D -:105AE00070B5F94C0546002084F864002A4604F19C -:105AF00017000CF001F884F83650012084F8640097 -:105B000070BD10B5F04C002284F8632084F8560074 -:105B1000024604F137000BF0EFFF012084F8630028 -:105B200010BDE94981F8670070472DE9F041E74E63 -:105B300082B0307808BBE44C94F86200E8B1FFF71B -:105B400043F9002584F8615075702846FFF739F94C -:105B5000FEF7ECFDFEF7C3FDDD48FEF788FEDD48ED -:105B6000FFF71BF994F85800002610F0010F08D039 -:105B70002520FEF784FE012612E002B00C20BDE8CD -:105B8000F08110F0020F04D02620FEF778FE0226E6 -:105B900006E010F0040F03D02720FEF770FE042665 -:105BA000FEF79DFD84F85C60FFF705F900210122F6 -:105BB0000846FEF78DFF0F210520FEF71DFE94F825 -:105BC0005E00002804BF94F85F00002805D194F817 -:105BD0005700012818BF042874D1FCF749FF064676 -:105BE00031466068FDF755FCBB4990FBF1F701FBBE -:105BF000170041423046FCF746FC6060206838449C -:105C0000206008F092FD2168884274D8C4E90056EB -:105C10004FF0010894F85D0008F0A6FD064694F8E0 -:105C20005F000127002818BF002E04D01021304645 -:105C300009F00BFC68B194F8600000281CBF94F8D0 -:105C40005E0000281DD0617A04F10A0001290ED0FF -:105C500012E03A46677204F10A013046FFF7E3FCAE -:105C600094F85D1004F10A0008F076FE09E040792E -:105C700000F0C00040281DD0414604F10A00FFF7A3 -:105C800009FD04F10A018E4809F096FE617A8C48FC -:105C900009F0B7FE04F10A018A4809F08DFE617A25 -:105CA000884809F0AEFE94F85700012818BF042870 -:105CB00021D108E008F089FE3A4604F10A01FFF715 -:105CC000B2FCDEE717E0012794F85D0008F055FD0F -:105CD000060010D0102109F0B8FB60B93A466946B9 -:105CE0003046FFF7A0FC6946754809F073FE0121B4 -:105CF000734809F093FE617A04F10A00FEF770FD23 -:105D000094F8570001281EBF042894F86300002867 -:105D100008D094F8562004F13701694809F09CFE38 -:105D200084F8635094F8640040B194F8362004F18C -:105D30001701644809F0BCFE84F8645008F069FD5E -:105D4000664808F0FAFD84F86600FFF745F802B0EF -:105D50000020BDE8F0815D494860704770B55A4C3D -:105D600006002BD094F8581094F85C20002521EA06 -:105D7000020010F0010F04D02520FEF780FD012560 -:105D800015E011F0020F02D012F0020F06D011F050 -:105D9000040F0CD012F0040F05D008E02620FEF707 -:105DA0006EFD022503E02720FEF769FD0425FEF7BE -:105DB00096FC94F85C00284384F85C0094F8610039 -:105DC00040B194F85700012808BFFFDFBDE87040DC -:105DD00000F0BFBA36B1002201234FF4967110468D -:105DE000FEF7BAFE3648FEF7FAFF94F8570005288A -:105DF00009D2DFE800F0030303090300012108468C -:105E0000FFF7BBF800E0FFDF94F8580094F85C104F -:105E100030EA01014FF0010002D02C49087070BD3A -:105E200094F85710012912BF84F86100002184F80A -:105E30005C10F2E710B5FEF7C7FF2448007840B9C0 -:105E4000214890F8620020B10020FFF787FF002072 -:105E500010BDFFF71BF8FFF70DF8FEF73FFFFEF749 -:105E6000A2FFFEF7B9FF0C2010BD184901204870B1 -:105E70007047154981F86500704770B5002503F03B -:105E8000A3FA48B1114E3078012809D0022801D078 -:105E9000032842D0FFDF70BDBDE8704000F059BA62 -:105EA000094C94F85700032837D094F8660018B1CD -:105EB000FEF76DFAFFF71CF80848FEF790FF0FE0B9 -:105EC000580C0020800C0020BC0B0020CC000020CF -:105ED0001B2302001823020040420F00A80C0020E0 -:105EE0009620FEF7A4FF94F85700012818BF042855 -:105EF0000AD094F86800012814BF0328102545F043 -:105F00000E010020FFF739F894F86700012808BF58 -:105F1000FFF710F80220307070BDBDE8704001201E -:105F20001CE770B5FE4DFF4C95F86700012817D0AF -:105F300095F8660018B1FEF7E8FFFEF73CFA03F0AB -:105F400043FAB8B12078022818BFFFDF0120FFF71D -:105F500005FF207800281EBF20780128FFDF70BDD4 -:105F6000F148FEF7F2FF002804BF7F20A070FEF783 -:105F7000D7FFDDE7BDE8704000F0EBB92DE9F05F39 -:105F800007464FF00009FEF76AFCE64E824630787D -:105F9000022818BFFFDFE24D7F2495F86700012833 -:105FA00030D0E24809F004FD83464FF0FF08002F8F -:105FB00000F0E480DD4809F00EFE002800F0DE80ED -:105FC000FEF716FC002800F0D98095F86600D74F40 -:105FD00068B108F003FC8046FF2808D00146F81C91 -:105FE00008F0EBFB404608F004FC40EA0A0A584679 -:105FF0004FF0000B062880F0C180DFE800F0BFBF43 -:10600000BF0CBF69C848FEF7A0FF002808BFB470E6 -:10601000FEF786FFC5E795F85700012818BF04284A -:1060200070D0BAF1000F18D195F86800002818BF99 -:10603000022867D13878F91CC0F3801008F078FB8B -:10604000824608F0DAFC40B1504608F096FB20B1D9 -:10605000102109F0FAF9002854D095F867000128BA -:1060600004BF95F89200002805D0B148FEF7B7FEAE -:106070000320307084E0012085F89200B8F1FF0F12 -:106080000FD005F19402511E404608F07FFB002816 -:1060900008BFFFDF95F8930040F0020085F89300F9 -:1060A0000CE03878C0F3801085F89300D5F8EF0045 -:1060B000C5F89400B5F8F300A5F89800B07805F19C -:1060C0009A077F2808BFFFDFB0783870B470CCE73C -:1060D0003878297CC0F38010884209D1062205F166 -:1060E0001101F81C0BF0DCFC002808BF012000D0D7 -:1060F0000020B8F1FF0F06D0C0B995F85D0040450B -:106100001AD113E03AE0B8B13878F91CC0F3801026 -:1061100008F00EFB044608F070FC38B1204608F089 -:106120002CFB18B1102109F090F928B195F857000F -:10613000012818BF04281DD095F85700F0B9BAF10E -:10614000000F17D195F86800002818BF012815D155 -:106150003878F91CC0F3801008F0EAFA044608F019 -:106160004CFC38B1204608F008FB18B1102109F0AA -:106170006CF918B195F865002C46D8B14FF00109BB -:1061800095F8660018B1FEF7C0FEFEF714F9B9F1F4 -:10619000000F1CBF0120FFF7E1FD307800281ABF77 -:1061A00030780128BDE8F09F3078032818BFFFDF62 -:1061B000BDE8F09F7068D4F8FB10C0F80E10B4F87A -:1061C000FF10418294F801110175B97D4175B7F84E -:1061D0001710C182B7F819104180B7F81B108180E1 -:1061E000B7F81D10C180534908300BF02AFE97F80C -:1061F000240000F01F017068017697F82410490907 -:1062000080F864113A78417BC2F340121140417327 -:1062100094F86A00002818BFFFDF84F86CB0D6F845 -:1062200004A0BAF80000A4F86E00BAF80200A4F8BE -:106230008400BAF80400A4F88600BAF80600A4F8AE -:1062400088009AF8640184F88A0094F85F0048B1E5 -:10625000607A04F10A01012804D1487900F0C000F5 -:10626000402835D094F8600040B1607A04F10A010A -:10627000012804BF487910F0C00F29D0C4F878B0C5 -:10628000A4F87CB03878B8F1FF0FC0F380108AF81A -:106290001900D4F8EF00CAF81A00B4F8F310AAF8FD -:1062A0001E101CD0C4F87E00BAF81E00A4F88200AC -:1062B00004F17202511E404608F068FA002808BF37 -:1062C000FFDF94F8710040F0020084F8710015E0DF -:1062D000D4F80A00A067E089A4F87C00D2E7164849 -:1062E0000BF0A6FD9AF8190084F87100DAF81A008C -:1062F000C4F87200BAF81E00A4F87600012084F8F1 -:106300006A0070680088FAF7B3FCFAF713F986F8A8 -:1063100000B0FEF7BBFDFEF7ADFDFEF7DFFC0DE0C4 -:10632000BC0B0020CC000020CE000020A80C0020D8 -:10633000800C0020C70C00203A0C0020FEF733FD33 -:10634000FEF74AFD012003F09CF919E7012203F052 -:1063500048BA70B5FEF79AFDFEF78CFDFEF7BEFC5D -:10636000FEF721FD1F4C002694F8660028B1FEF7C9 -:10637000CCFDFEF720F884F866601B4D2E70FEF70A -:106380002BFD94F85700012804D0BDE87040002090 -:1063900003F077B9022003F074F994F86A0000283A -:1063A00018BFFFDF6878002808BF70BD207C84F824 -:1063B0007100D4F81100C4F87200B4F81500A4F804 -:1063C00076003C2084F86C0068680188A4F86E10A0 -:1063D000012184F86A100088FAF74AFCFAF7AAF853 -:1063E0006E7070BDBC0B0020CC0000202DE9F04188 -:1063F000FF4F044600207978FE4D4FF00108064615 -:1064000011B1012923D007E095F85310002918BFD6 -:1064100087F8018000D0012079782B2211FB02F14E -:10642000294491F82820104318D02A22A01C293191 -:106430000BF062FB66700420207084F8028078788C -:106440002B2110FB01F0284480F8286023E095F808 -:106450002810002918BF7E70DDD1DDE795F87E0099 -:10646000E0B1D5F87F00C4F80200D5F88300C4F885 -:106470000600D5F88700C4F80A00D5F88B00C4F8E8 -:106480000E0095F88F00A07466701220207084F8BA -:10649000028085F87E600120BDE8F08195F8220039 -:1064A00001281ED0287801281CBF0020BDE8F081FB -:1064B0006670132020702022A91CA01C0BF01CFB6E -:1064C000A6712E70A888A884D5F89C00417B85F819 -:1064D000261085F822800088FAF7CAFBFAF73AF806 -:1064E000D9E7667006202070686AC4F8020085F853 -:1064F0002260D0E7BF480178002914BF80884FF69A -:10650000FF7070472DE9F041BA4C064694F8280018 -:10651000002818BFBDE8F081304609F049FA01466D -:1065200001250020072937D2DFE801F00A040736E9 -:106530003636090084F82A5009E0032000E00220E2 -:1065400084F82A0004F13301304609F09BFA84F8FC -:10655000320094F8AF0018B1FDF74DFF01281FD0AD -:10656000304609F057FA84F82B0004F12C0130462C -:1065700009F029FA9E4E04F1520730787F2808BFAF -:10658000FFDF307838707F20307084F82850BDE805 -:10659000F041032001F005BF84F83200BDE8F0812E -:1065A000FDF76CFF04F12C02511E08F0EFF80028F3 -:1065B00008BFFFDF94F82B1041F0020184F82B1084 -:1065C000D8E710B5002001F0F6FD8A4CA8B1FEF71F -:1065D000F2FB012200211046FEF7F1F904F1BC00A4 -:1065E000FEF7FDFBD4F8B400FEF7FCFB94F8A00026 -:1065F000032818BF02281FD022E0FEF747FCFEF751 -:1066000039FCFEF76BFBFEF7CEFB94F8AF0030B120 -:10661000FEF77BFCFDF7CFFE002084F8AF000120E1 -:1066200084F8B800022084F8B200FEF7D5FBBDE87C -:106630001040002001F0B5BE01210020FEF79DFCB6 -:10664000FEF778FC94F8AF0018B1FDF7A0FEFEF756 -:106650004FFC032084F8B20010BD66490028B1F851 -:10666000BA202CD0FF2A0BD24FF6FF7000EA42006E -:10667000A1F8BA00FF2888BFFF2001D9A1F8BA000D -:106680005B484268012A12BF002A0D224260D243B1 -:10669000C2EBC20303EB021291F8B930DB4303EB08 -:1066A000830CCCEB83131A444260900CB1F8BA20EF -:1066B000B0FBF2F302FB130081F8B9007047012A26 -:1066C000DED95008A1F8BA0008BF0120D8D1D5E71B -:1066D00070B5484C002584F8B250012684F8B260A9 -:1066E00094F8B20002281BBF94F8B20001280020E1 -:1066F000FFDF18BF70BD2B2101FB004181F828503E -:10670000401CC0B20228F6D3257084F8225094F8B9 -:10671000AF0028B1FEF7F9FBFDF74DFE84F8AF504E -:1067200084F8AE5084F89B60324884F8A05084F816 -:10673000B15040F2011120F8981F817070BD2DE911 -:10674000F0412C4C05460C2794F8B20001281FBFDD -:1067500094F8B20002280C20BDE8F081FEF734FB6B -:10676000FDF7E4FFFDF7BBFF94F898000126002831 -:1067700001BF94F89900002894F89A00002874D07A -:1067800094F8A000032802D0022805D008E00521D3 -:10679000194800F0DEFE03E00321174800F0D9FE9F -:1067A00094F8AC00002804BF94F8AD00002847D04E -:1067B000FCF75EF907463946D4F8A800FCF769FEF5 -:1067C0000E4990FBF1F801FB180041423846FBF7F7 -:1067D0005AFEC4F8A800D4F8A4004044C4F8A400A9 -:1067E00007F0A3FFD4F8A410884229D8002007E0BE -:1067F000D4000020D00C0020B40D002040420F0037 -:10680000C4E9290794F8AD0000281CBF012008F056 -:10681000AFF8012194F8AE0000281CBF94F8AC003A -:1068200000280DD094F8910004F19202012804D1BF -:10683000507900F0C00040280ED01046FEF72AFF25 -:1068400094F8911004F19200FDF7CAFF94F8B20099 -:106850000027012818D112E008F0B7F8324604F1F9 -:106860009201FEF7E0FEEBE7FFE794F8B2000228A2 -:1068700004BF84F8B2600C2006D1BDE8F08184F832 -:10688000B860022084F8B20094F89B0080B108F050 -:1068900018F8FE4808F051F884F8AF00FC48C4F836 -:1068A000B450FEF77AFAFEF797FA3846BDE8F08161 -:1068B00007F0AFFFEDE770B5FEF786FAF54C94F8F8 -:1068C000B200022803D0FEF787FA0C2070BD012029 -:1068D00084F8B900A4F8BA000220FEF772FAEE4874 -:1068E000FDF7C5FFED4B002004F1980294F8B110BC -:1068F000491CA3FB015C4FEA5C0CACEB8C0C6144C3 -:10690000C9B284F8B110895C012907D0401CC0B21B -:106910000328EBD3FFF755FE002070BD94F8B100BB -:10692000DF49085CFDF7ABFFFDF7D9FEF2E710B5D4 -:10693000D84C94F89030022B14BF032B00280BD1B5 -:1069400000291ABF022901200020114607F0F0FE9D -:1069500008281CBF012010BD94F89000002816BF25 -:10696000022800200120BDE81040FEF71DBEC948E6 -:1069700090F89000002816BF022800200120FEF7A2 -:1069800013BEC44981F890007047C24981F8AE0037 -:10699000704770B5BF4C94F89000002816BF0228CD -:1069A0000020012084F8910004F19201FEF7E6FD39 -:1069B00094F89000022816BF03280121002184F8D2 -:1069C000AD1094F89100002504F19202012804BF53 -:1069D000527912F0C00F0AD004F19202012804D1BA -:1069E000507900F0C000402801D0002000E00120D4 -:1069F00084F8AC00002804BF002970BDC4F8A4507E -:106A0000FCF736F8C4F8A80094F8AD0000281CBFC5 -:106A1000002007F0ADFF002694F8AE0000281ABF52 -:106A200094F8AC00002870BD94F8910004F1920134 -:106A3000012804D1487900F0C000402806D029463A -:106A400004F19200BDE87040FEF724BE07F0BDFFE0 -:106A5000324604F19201BDE87040FEF7E4BD002823 -:106A600016BF0228012200228A4981F89B2081F862 -:106A7000A100704770B5874D0C4600280CBF01215E -:106A8000002185F89B1085F8A2004FF0080085F8DA -:106A9000A3000BD1002C1ABF022C012000201146AC -:106AA00007F046FE85F8A300082801D0002070BD3D -:106AB000022C14BF032C1220F8D170BD754A032894 -:106AC00008BFC2F89C1082F8A000002070477149EE -:106AD00091F8A000032804D0012818BF022807D08D -:106AE00004E091F8A200012808BF70470020704719 -:106AF00091F8A100012814BF03280120F6D17047A6 -:106B000010B5FEF7C3F9FEF7B5F9FEF7E7F8FEF7A3 -:106B10004AF9604C94F8AF0030B1FEF7F6F9FDF792 -:106B20004AFC002084F8AF00012084F8B80002205D -:106B300084F8B200FEF750F9002010BD554981F8E5 -:106B4000B300704710B5FEF7A1F9FEF793F9FEF711 -:106B5000C5F8FEF728F94F4C94F8AF0030B1FEF7B6 -:106B6000D4F9FDF728FC002084F8AF00012084F858 -:106B7000B800022084F8B200FEF72EF9BDE81040FC -:106B8000002001F00EBC2DE9F84F424CFF217F2779 -:106B9000444E84F8B0104FF00008002800F0DC826A -:106BA00004F1BC0008F0E7FF30B904F1BC0009F0C3 -:106BB00002F8002800F0D08294F8B200334D052886 -:106BC00080F0C782DFE800F0F1F1F103F0002F4818 -:106BD00008F0EEFEB07094F89B0030B9FDF73FFE70 -:106BE000002808BF4FF0000801D04FF0010894F8CA -:106BF000AF0078B107F0F2FD84F8B0000146FF283D -:106C00000CD0E81C07F0D9FD94F8B00007F0F1FDB6 -:106C100040EA080894F8B000FF2812D107F081FE7E -:106C200084F8B00094F89B1059B1082809D128784D -:106C3000E91CC0F3801007F07BFD082818BF4FF057 -:106C40000008B078072880F0C781DFE800F04BB873 -:106C500004FCFCFC300094F8AF0018B1FEF755F9C5 -:106C6000FDF7A9FB0F48FEF770F9002808BF377041 -:106C7000FEF756F9B8F1000F00F0598194F8A00022 -:106C8000012818BF022840F052810DE08C0D002031 -:106C900038230200D00C00203E230200ABAAAAAA8F -:106CA0003B230200D4000020FEF718F868E094F8B7 -:106CB000AF0018B1FEF729F9FDF77DFBFE48FEF79E -:106CC00044F9002808BF3770FEF72AF9B8F1000F21 -:106CD00000F02D8194F8A00002284AD001284FD05E -:106CE00000F025B994F8AF0018B1FEF70EF9FDF7E2 -:106CF00062FBF148FEF729F9002808BF3770FEF75C -:106D00000FF9B8F1000F00F0128194F8A0000228EA -:106D10002FD0012834D003281CBFFFDFBDE8F88F37 -:106D2000E978D4F89C00827E91421BD12979C27EF9 -:106D3000914217D16979027F914213D1A979427F9B -:106D400091420FD1E979827F91420BD1297AC27F9A -:106D5000914207D12978427EC1F38011914208BF48 -:106D6000012100D0002194F8A220012A0ED0E9B11F -:106D7000D9E0D248FFF7C6FBBDE8F84F00F002BBF0 -:106D8000CE48FFF7BFFBBDE8F84F1AE4002974D1E5 -:106D900000F11A01C94808F016FEC84808F03AFE8A -:106DA000D4F89C104876BEE024E1D2E194F8A30028 -:106DB00008287DD094F8B01081425ED0B7E094F8F6 -:106DC000AF0018B1FEF7A1F8FDF7F5FABA48FEF7E3 -:106DD000BCF8002808BF3770FEF7A2F894F8AD00A1 -:106DE00000280CBF4FF0010B4FF0000B4FF00009D3 -:106DF0002878C10905F1090007D0407900F0C000EA -:106E0000402808BF4FF0010A01D04FF0000A94F863 -:106E1000A000032806D194F89B00002818BF94F81E -:106E2000A30001D194F8B00007F09EFC009088B157 -:106E3000102108F00AFB002818BF4FF0010BBAF12F -:106E4000000F07D000E0C7E005F109010098FEF748 -:106E5000B9FB814694F8A00003280FD0FDF73EFF50 -:106E6000B8F1000F69D0FDF7C3FC50EA090064D007 -:106E70009248FFF747FB00F041B954E0D4F89C007A -:106E8000E978827E91421DD12979C27E914219D141 -:106E90006979027F914215D1A979427F914211D13E -:106EA000E979827F91420DD1297AC27F914200E037 -:106EB0003DE007D12978407EC1F38011814208BFAF -:106EC000012500D0002594F8B000082805D094F8DA -:106ED000A310884208BF012600D00026B9F1000F98 -:106EE00005D1BBF1000F04D0FDF782FC08B10121F0 -:106EF00000E00021B8F1000F09D094F8A2000128A9 -:106F000003D020B955EA060001D0012000E000209E -:106F100001420CD094F8A200012804BF002DD4F83F -:106F20009C003FF435AFBDE8F84F00F08ABAFDF79A -:106F3000D5FEBDE8F84FFFF744BB94F8A100032845 -:106F400018BF02287ED1BAF1000F7BD0B9F1000F33 -:106F500078D1DFF8688194F87E00002872D101258D -:106F600084F8805094F8AF0018B1FDF744FA012876 -:106F700021D0404608F04EFD84F8810004F18201E2 -:106F8000404608F020FD404608F051FD84F8880096 -:106F900004F18901404608F024FD307804F18F089F -:106FA0007F2808BFFFDF307888F80000377084F84A -:106FB0007E500320A0E0FDF761FA04F18202511E29 -:106FC00007F0E4FB002808BFFFDF94F8810040F0E1 -:106FD000020084F88100D6E794F8AF0018B1FDF7FD -:106FE00094FFFDF7E8F93448FDF7AFFF00286CD1B6 -:106FF0003770CAE0314808F0DBFCB0703048E978FF -:10700000427A91421CD12979827A914218D16979C8 -:10701000C27A914214D1A979027B914210D1E979C7 -:10702000427B91420CD1297A827B914208D1297806 -:107030000078C1F38011B1EBD01F08BF012500D04B -:10704000002500E042E0FDF749FEB07804286BD14E -:10705000D5B31948FDF779FF002808BF3770FDF751 -:107060005FFF94F8B80000281CBF0020FFF7F5FA76 -:107070004FF0010884F8B880104D94F8530028BBF5 -:10708000042084F8550094F8AF00A5F1910918B1D7 -:10709000FDF7B1F9012835D0284608F0BBFC0949B5 -:1070A00081F8560009F12C01284608F08CFC00BF3D -:1070B00004F15E0128460AE0D40000208C0D002077 -:1070C000B40D0020D00C00202EE05EE016E008F0A9 -:1070D00005FD84F85D001F2884BF1F2084F85D0033 -:1070E00004F17D0530787F2808BFFFDF30782870F5 -:1070F000377084F85380042001F053F9BDE8F84F4D -:10710000FFF75FBAFDF7BAF909F12C02511E07F03B -:107110003DFB002808BFFFDFFE4890F8560040F016 -:10712000020089F82B00C3E7FB48FDF70EFF00289B -:1071300008BF3770FDF7F4FE94F8B800002804BFCC -:107140000120FFF78AFA84F8B880BDE8F84FFFF70E -:1071500038BAFFDFBDE8F88F94F8B200052828BFE1 -:10716000BDE8F88FDFE800F0030303041900F1E73E -:1071700094F8AF0018B1FDF7C8FEFDF71CF9E6481A -:10718000FDF7E3FE00283FF433AFFDF7C9FEFDF73E -:10719000A5FDBDE8F84FFFF714BADF48FDF7D5FEAF -:1071A000002808BF3770FDF7BBFE94F8B800002830 -:1071B00004BF0120FFF751FA84F8B880FDF78EFD77 -:1071C000BDE8F84FFFF7FDB970B5D24C94F8B200A6 -:1071D000072878D2DFE800F08D8D8D8D8D041000AA -:1071E000CE48FDF7FCFDFDF7A5FE9620FDF71FFE3E -:1071F000042084F8B20070BDFDF748FEFDF73AFEAA -:10720000FDF76CFDFDF7CFFD012584F8B850022095 -:1072100084F8B200FDF7E0FD2078002818BFFFDFFA -:107220000026A670D4F89C000188A1804188618363 -:107230008188A183C088E08384F8206094F8AD1031 -:10724000B74849B10178C21CC1F3801121B151790D -:1072500001F0C00140292ED094F8AE1041B110F8D1 -:10726000031BC1F3801119B1407910F0C00F22D077 -:10727000AC480AF0DDFD00BF94F8AF0018B1FDF78F -:10728000BAF8012820D0D4F89C00417EE171D0F8F2 -:107290001A10A160C08BA081666126832570D4F886 -:1072A0009C000088F9F7E4FCF9F744F9BDE8704068 -:1072B000022001F076B8D4F8E700C4F80E00B4F864 -:1072C000EB006082D8E714E0FDF7D8F804F108027B -:1072D000E11D07F05BFA002808BFFFDFE07940F00E -:1072E0000200E071D4F8BF006061B4F8C3002083ED -:1072F000D4E7FFDF70BD70B5864C94F8B20000256E -:10730000052828BF70BDDFE800F03939391B0300BC -:107310008148FDF71AFE10B97F497F200870FDF7FC -:10732000FFFD94F8B800002804BF0120FFF795F98D -:1073300084F8B850FDF7D2FCBDE87040FFF741B9C2 -:10734000FDF7A4FDFDF796FDFDF7C8FCFDF72BFD4D -:1073500094F8AF0028B1FDF7D8FDFDF72CF884F8BC -:10736000AF50012084F8B800022084F8B200FDF785 -:1073700033FDBDE87040002001F013B870BD01225C -:1073800001F0E1B870B5012000F015FF614CC8B103 -:1073900004F1E401A1F1280008F04CFB04F1E4063B -:1073A00094F89110304608F02CFB04F1920130461D -:1073B00008F002FB94F8AD00C0B394F8A0000328D5 -:1073C0001FD025E0FDF762FDFDF754FDFDF786FCBB -:1073D000FDF7E9FC94F8AF0030B1FDF796FDFCF73E -:1073E000EAFF002084F8AF00012084F8B8000220F2 -:1073F00084F8B200FDF7F0FCBDE87040002000F01A -:10740000D0BF94F89B00002818BF94F8A30001D1C6 -:1074100094F8B00007F0DBFA050007D001213046F0 -:1074200008F0EFFA2946304608F0C6FA3C48FDF766 -:10743000D6FC01210846FDF7A0FD052084F8B20026 -:1074400070BD70B5022000F0B6FE324C68B301206A -:1074500000F0A7FF04F1E401A1F1280008F0EAFA26 -:10746000D4F89C00417B04F1E40008F0C1FAD4F8A0 -:107470009C0004F1BC0204F1E4061278417BC2F3E3 -:1074800040121140417394F89110304608F0B9FA57 -:1074900004F19201304608F08FFA94F8AD00B8B3C9 -:1074A00094F8A00003281FD025E0FDF7EFFCFDF7BE -:1074B000E1FCFDF713FCFDF776FC94F8AF0030B16A -:1074C000FDF723FDFCF777FF002084F8AF000120D3 -:1074D00084F8B800022084F8B200FDF77DFCBDE816 -:1074E0007040002000F05DBF94F89B00002818BF9A -:1074F00094F8A30001D194F8B00007F068FA0500F1 -:1075000014D00121304608F07CFA294630460BE0C1 -:107510000CE00000D00C0020D40000208C0D0020D6 -:10752000B40D0020DE0C002008F046FAD4F89C00D0 -:10753000C18A324808F0FEFAD4F89C00417D2F48F9 -:1075400008F0FCFA2D48FDF74AFC062084F8B2004A -:1075500070BD70B50C46054608F008FA032C47D0FC -:10756000052C18BF70BD0521284608F002FA244CEE -:10757000D4F89C0000F10E01284608F0C5FAD4F8B2 -:107580009C0000F11201284608F0C2FAD4F89C00D1 -:10759000417D284608F0D2FAD4F89C00C18A2846DA -:1075A00008F0C8FAD4F89C004188284608F0B6FADA -:1075B000D4F89C008188284608F0B4FAD4F89C00DE -:1075C000C188284608F0B2FAD4F89C0000F10801FE -:1075D000284608F0CDFAD4F89C00017E284608F031 -:1075E000AFFA94F8B3102846BDE8704008F0B2BA7C -:1075F0002846BDE87040032108F0BBB9B40D002057 -:10760000D00C00202DE9FF4F06460C46488881B07B -:1076100040F2E24148430090E08A002500FB01FB74 -:1076200094F8630091460D2818BF0C281ED0252819 -:107630001EBF94F8640025284FF0000A16D0049865 -:1076400018B10121204603F029FB94F8510094F869 -:10765000528094F8C810074659B1012958D0022920 -:107660003DD0032918BFFFDF52D0A6E04FF0010A3A -:10767000E5E7B9F1000F08BFFFDFFE4D686800289D -:1076800008BFFFDF94F85100FDF7C7FE00F2E731B5 -:107690004FF47A70B1FBF0F0696800EB010994F8DF -:1076A0005100FDF7BAFE94F85110022907BFF249C4 -:1076B0004FF47A72F1494FF4C8621144084400F261 -:1076C000E7314FF47A70B1FBF0F040F2E241081A72 -:1076D0002969584449440844051D012015E0E5483E -:1076E000A9F101014068084308BFFFDFE448B9F190 -:1076F000000F006800EB0B0506D0DE48406800F282 -:107700002230A84288BFFFDF032084F8C80053E07E -:1077100094F86310009D25291CBF94F86410252956 -:1077200036D1B4F85810B4F8EA20891A491C09B2C5 -:1077300000292DDB94F8E81009B30F4694F8E910FE -:10774000002918BF8846022807BFCB484FF47A713A -:10775000CA484FF4C8610144022F07BFC6484FF41E -:107760007A72C6484FF4C8621044814208D9081A98 -:1077700000F5FA714FF47A70B1FBF0F0054407E0C0 -:10778000401A00F5FA714FF47A70B1FBF0F02D1A3F -:10779000B9F1000F10D0DFF8DC92D9F8040020B95D -:1077A000B9F80200002818BFFFDFD9F8040000F282 -:1077B0002230A84288BFFFDF05B9FFDF2946D4F891 -:1077C000CC00FAF760FEC4F8CC00B0600020307046 -:1077D0004FF0010986F80490204603F04CFBAAF113 -:1077E0000101084208BF86F8059006D094F8C80049 -:1077F00001280CBF0220032070714046D4F824B049 -:10780000FDF7FCFD0146022F07BF9B484FF47A723B -:107810009A484FF4C8621044084400F23F614FF4A4 -:107820007A70B1FBF0F0584400F5C970F06004982C -:1078300030EA0A0004BF05B0BDE8F08F29463046A3 -:1078400007F010FF87B2204603F015FBB8420FD8AF -:10785000074686F8059005FB07F1D4F8CC00FAF747 -:1078600012FEB0602946304607F0FCFE384487B26D -:107870003946204603F012FAB068C4F8CC0005B0CF -:10788000BDE8F08F2DE9F04304467E4885B00D46F3 -:1078900090F80004DFF8F091400999F800144909C4 -:1078A000884218BFFFDFDFF8CC81002708F13C06D3 -:1078B000082D80F0FA80DFE805F0045B656560F86C -:1078C000F894202C28BFFFDF36F814000621F9F7C2 -:1078D000C5F8050008BFFFDF202C28BFFFDF36F802 -:1078E00014002988884218BFFFDF95F8C8000028D7 -:1078F00008BFFFDF284602F0BCFEC8F80470A8F8F5 -:10790000027029460020C8F8107007F0EFFE00F161 -:107910009804686AA04218D995F85200FDF76EFDE8 -:1079200095F85110022907BF53494FF47A72534911 -:107930004FF4C862114408444FF47A7100F23F607A -:10794000B0FBF1F1686A0844071B29460020C8F81B -:10795000087007F0CBFE698840F2E242514398304C -:10796000081AA0F22230C8F80C0005B0BDE8F08378 -:1079700005B0BDE8F04303F05DB805B0BDE8F043E5 -:10798000FDF792BB99F8140D4049400991F8001495 -:107990004909884218BFFFDF202C28BFFFDF36F8D7 -:1079A00014000621F9F75AF8050008BFFFDF202C64 -:1079B00028BFFFDF36F814002988884218BFFFDF90 -:1079C0000022012329466846FFF71CFE95F8D200E5 -:1079D0006946FBF797FA002808BFFFDF05B0BDE84E -:1079E000F083202C28BFFFDF36F814000621F9F7BA -:1079F00035F8050008BFFFDF202C28BFFFDF36F871 -:107A000014002988884218BFFFDF95F8C8000428B1 -:107A100018BFFFDF85F8C87095F8D2404FF6FF79A0 -:107A2000202C28BFFFDF26F8149095F8D200FBF732 -:107A300000F8002808BFFFDF202085F8D200D5F825 -:107A4000D800002804BFD5F8D400C8F8140008D026 -:107A5000D5E937121144826911448161D5E93501B4 -:107A6000C860D5F8D40000281CBFD5F8D810016133 -:107A700014D10EE0DC0D002068360200A2240200C2 -:107A8000E000002001E000E00BE000E019E000E091 -:107A90000BE0D5F8D800002818BF8761FC480078B3 -:107AA00005B0BDE8F043F4F725B9FFDF05B0BDE848 -:107AB000F0832DE9F047F74D0746E88B6C68401CD2 -:107AC000E88328784FF00008002808BFFFDF07D0C0 -:107AD000DFF8C4A3042814D0052818BFFFDF40D066 -:107AE00021462869FAF7CFFCB86087F800800120AA -:107AF0003871A86800F5B370F860287804287CD144 -:107B000085E00029ECD02E69DAF8141039B38946E3 -:107B1000C9680029FBD1B9F1000F20D099F8000005 -:107B2000002808BFFFDFD9F81410D9F80400014479 -:107B30003046FBF7AEFC002807DA211A4A1E92FBFA -:107B4000F4F202FB0406214604E090FBF4F202FB8F -:107B5000140621468E4288BFFFDF3446C0E7444604 -:107B6000BEE70029BCD0D5F81890B9F1000F08BFC6 -:107B7000FFDF0026D9F8DC10DAF814403046721E18 -:107B80005CB1A069884228BF824284BF0246264673 -:107B90002046E468002CF4D106B9064609F1C80471 -:107BA000C9F8D860002E04BFC4F80C80CAF814408D -:107BB00005D0F068F460E060002818BF0461D4F8D4 -:107BC0001090C4F81880B9F1000F0ED0D9F8180041 -:107BD00048B1D4F814A0504538BFFFDFD9F81800D9 -:107BE000A0EB0A00A061C9F81880002E08BFC5F8F4 -:107BF000208009D03078002800E00DE008BFFFDFCA -:107C0000716970680844286240F6B83468E7E88B08 -:107C10000A2838BF032000D302207871E88B01289E -:107C200006D93846696807F01DFDE98B0844E883EA -:107C3000B8682861BDE8F0872DE9F0418046974893 -:107C400084B00E4690F80004954F410997F800045F -:107C50004009814218BFFFDF01210025082E8D4C0D -:107C600062D2DFE806F0041A35353061614D617388 -:107C70002173607800281CBF04B0BDE8F0818648FD -:107C8000456005612573A068C138FEF758FD0028DE -:107C900018BFFFDF04B0BDE8F081607850B1207BF1 -:107CA000002808BFFEF72CFF657304B0BDE8F04163 -:107CB000FAF7E9BDA173FEF7FEFD002818BFFFDF4C -:107CC00004B0BDE8F08104B0BDE8F041FDF7ECB9C7 -:107CD00097F8140D7349400991F800144909884236 -:107CE00018BFFFDF00216846FFF7E3FE6946404604 -:107CF000FBF708F9002808BFFFDF04B0BDE8F081FA -:107D00002078052818BFFFDF207F002808BFFFDF8D -:107D100025772570207DFAF78CFE002808BFFFDF4D -:107D2000257504B0BDE8F081FFDF04B0BDE8F08147 -:107D30002DE9F041574C0026207804281FBF2078F9 -:107D400005280C20BDE8F08101206070607B0025D3 -:107D5000A8B1EFF3108010F0010F72B60CBF00272E -:107D60000127607B00281CBFA07B002805D0FEF700 -:107D7000C7FE6573A573FAF786FD2FB903E0207D72 -:107D8000FBF7D3F900E062B6207DFBF71CFC207FF7 -:107D900028B125772078052818BFFFDF0C266570ED -:107DA0002570207DFAF745FE002808BFFFDF257506 -:107DB0003046BDE8F0812DE9F04F364883B00078B9 -:107DC000002818BFFFF7B4FF0120DFF8CC8088F847 -:107DD000000069460620F8F7CCFD002818BFFFDF39 -:107DE00000274FF6FF7934E0029800281CBF90F876 -:107DF000C81000292DD0008848451CBFDFF8A8A076 -:107E00004FF0200B3BD00621F8F728FE040008BFF6 -:107E1000FFDF94F8D200FBF7D6FB84F8C87094F823 -:107E2000D2504FF6FF76202D28BFFFDF2AF81560CD -:107E300094F8D200FAF7FDFD002808BFFFDF84F8B0 -:107E4000D2B069460620F8F794FD002818BFFFDF7E -:107E500010E06846F8F76BFD0028C5D00FE00298E7 -:107E600000281CBF90F8C810002903D0008848459E -:107E7000C9D104E06846F8F75AFD0028EFD088F829 -:107E80000070C8F8147003B00020BDE8F08F000047 -:107E9000DC000020F40D0020DC0D002001E000E0FB -:107EA0000BE000E019E000E0180E002010B50078AB -:107EB000F84C60B101280CBF40F6C410FFDF06D0BB -:107EC000A06841F66A01884228BFFFDF10BDA060AC -:107ED000F6E710B5EF4C00232070EF4803704370B5 -:107EE000037703734373837320218361017518380B -:107EF00043703A3010214FF6FF72428020F8042F71 -:107F0000491EFAD1180008BFA36005D0002B0EBF90 -:107F1000FFDF40F6C410A060A06841F66A01884205 -:107F200028BFFFDFBDE8104045E72DE9F043DA4CFC -:107F3000054685B0207816460F4600281EBF0C2047 -:107F400005B0BDE8F08395F8519095F85200D5F84A -:107F50002480FDF753FAB9F1020F07BFCF494FF460 -:107F60007A72CF494FF4C862114408444FF47A79C9 -:107F700000F23F60B0FBF9F0404400F22230C5F857 -:107F8000DC00A56195F8C800002818BFFFDF40F2AB -:107F90007120784360600120FDF730FA00F2E7308D -:107FA000B0FBF9F040F2712106FB0100A0606168AE -:107FB000A1F2F621884298BF01460020A160B9498C -:107FC00008610521217060702077E083B648FAF7D8 -:107FD000D5FC2075202808BFFFDFFAF749FD206196 -:107FE00001216846FFF765FD207D6946FAF78AFFA3 -:107FF000002808BFFFDF002005B0BDE8F083A648D9 -:10800000007800281CBF0020704710B50620F8F744 -:10801000C1FC80F0010010BD30B59F4C85B02278C6 -:10802000002A1EBF0C2005B030BD0D4640F2712164 -:10803000484360600120FDF7E1F94FF47A7100F2E6 -:10804000E730B0FBF1F040F2712105FB0100A060C8 -:108050006168A1F2F621884298BF01460020A16024 -:10806000607004212170E0838F48FAF787FC207547 -:10807000202808BFFFDF8B48406938B10146C0683F -:108080000028FBD111B1FAF7F3FC05E0FAF7F0FC98 -:1080900040F6B831FAF7F7F9206101216846FFF799 -:1080A00008FD207D6946FAF72DFF002808BFFFDF95 -:1080B000002005B030BD70B5774CA1690160FFF7B5 -:1080C00037FE002300BBA169D1F8D8205AB1D1E90D -:1080D00037C5AC449569AC44C2F818C0D1E9352C19 -:1080E000CCF80C2005E0DFF8BCC1D1F8D420CCF8E6 -:1080F0001420D1F8D420D1F8D810002A18BF11616B -:1081000002D1002918BF8B61A36170BD6549487019 -:10811000704770B540F2E24300FB03F510460C4691 -:10812000FDF76CF9022C07BF5C494FF47A725C4989 -:108130004FF4C862114408444FF47A7100F23F6072 -:10814000B0FBF1F000F2223085428CBF281A0020EB -:1081500070BD70B50D4606460146002007F0C6FA10 -:10816000044696F85200FDF749F996F85110022995 -:1081700007BF4A494FF47A7249494FF4C862114423 -:1081800008444FF47A7100F23F60B0FBF1F071885F -:1081900040F271225143C0EB4100A0F22230A542CF -:1081A00034BF21462946814203D2A5422CBF28462E -:1081B0002046706270BD3B4910B54968002801F146 -:1081C000980408BF04F5BC7409D0012808BF04F561 -:1081D000317404D0022814BFFFDF04F5B0742E48B8 -:1081E0008068A0428CBF0120002010BD10B52D4C2E -:1081F000607828B1D4E90201626807F05BFAA060F8 -:10820000D4E9010188429CBF2078002814BF0020D7 -:10821000012010BD04222DE9F043204FDFF88080BB -:1082200085B04FF47A79052980F0B980DFE801F054 -:108230000A2B033E890080F8C82005B0BDE8F04352 -:10824000FAF721BB044617480078002818BF84F8C5 -:10825000C82004D005B0BDE8F043FAF714BB0122F2 -:10826000002321466846FFF7CDF994F8D20069460D -:10827000FAF748FE002808BFFFDFB4F85800401C9A -:10828000A4F85800E6E7032180F8C81005B0BDE85F -:10829000F0830000DC000020F40D002068360200AE -:1082A000A2240200DC0D0020397C01000446408835 -:1082B00040F2E2414843B3490860D4F8F000214657 -:1082C0000089E082D4F8F00080796075D4F8F0007D -:1082D00040896080D4F8F0008089A080D4F8F00054 -:1082E000C089E0800020A66A07F000FA054694F8ED -:1082F0005200FDF783F894F8511002290EBF4FF495 -:108300007A7147464FF4C8613944084400F23F602F -:10831000B0FBF9F1608840F271225043C1EB40009C -:10832000A0F22230AE4234BF29463146814203D208 -:10833000AE422CBF304628466062022084F8C80056 -:10834000A4E706460146856A002007F0CFF90446F7 -:1083500096F85200FDF752F896F8511002290EBF18 -:108360004FF47A7147464FF4C8613944084400F22B -:108370003F60B0FBF9F0718840F271225143C0EBCD -:108380004100A0F22230A54234BF21462946814255 -:1083900003D2A5422CBF28462046706276E7FFDF55 -:1083A00074E72DE9F041DFF8E0810025774C98F87B -:1083B000001084B0052880F0C180DFE800F00316CB -:1083C0006DB9B900E5830846F3F794FC607800289E -:1083D00073D100216846FFF76CFB207D6946FAF7F0 -:1083E00091FD002808BFFFDF67E00120FDF706F8D8 -:1083F0006749684E08444FF47A71B0FBF1F0216987 -:10840000726840F2E2431144081AA16900F2DE608A -:108410004A88C83102FB03F772698A4208BF002507 -:1084200014D0216AFBF735F8002807DA391A4A1EFA -:1084300092FBF7F202FB0705394604E090FBF7F2E6 -:1084400002FB170539468D4288BFFFDFD8F80800C8 -:10845000854208D2A06940F271224188C1824A4314 -:1084600005EB420505E040F2E240B5FBF0F0A16902 -:10847000C882A06905214175C08A6FF41C71484308 -:1084800005EB400040F635413061B0EB410F28BFAD -:10849000FFDF04B0BDE8F081E5830846F3F72AFC6E -:1084A00001202077A0692169C0F8CC1080F8C8505D -:1084B0002178052918BFFFDF06D0FAF7E4F96573C4 -:1084C000A57304B0BDE8F081002808BFFFDFA069F4 -:1084D00090F8C800002818BFFFDFA06990F8D2000C -:1084E000202818BFFFDF2C48FAF748FAA169064692 -:1084F000202881F8D2000F8828BFFFDF274820F806 -:108500001670A06990F8D200202808BFFFDF002372 -:1085100001226846A169FFF775F8A069694690F8DD -:10852000D200FAF7EFFC002808BFFFDFA561C4E71F -:1085300004B00846BDE8F041F3F7DCBBFFDF04B050 -:10854000BDE8F081704770B5124D0446002912BF96 -:108550000129686070BD02291CBFFFDF70BD6888FB -:10856000401C68801046FCF758FF4FF47A7100F207 -:10857000E730B0FBF1F0201A686070BD0348007866 -:1085800070470000E0000020DC000020F40D002017 -:10859000C92E0200DC0D002085780100180E002095 -:1085A000FE48406870472DE9F0410D4606460146F9 -:1085B0001746012007F09AF8044696F85200FCF797 -:1085C0001DFF96F8521002290CBFF549F5490844E1 -:1085D0004FF47A7100F2E140B0FBF1F0718840F2A3 -:1085E00071225143C0EB4100C01BA0F55970A54258 -:1085F00034BF21462946814203D2A5422CBF2846DA -:1086000020467062BDE8F0812DE9FF4F8FB004462F -:1086100090F85200DDF8709098460B9049EA0800F7 -:108620000C9094F86400002617460D280CBF01201A -:1086300000200890B8F1000F04BF94F8040103284B -:1086400071D1089800286ED0B4F87C01B8426AD184 -:10865000D4F80C01C4F8F800608840F2E2414843C5 -:10866000C4F8FC00B4F85201B4F8DE100844C4F8B1 -:108670000001204604F00DFDB4F88001E08294F87A -:108680007E016075B4F882016080B4F88401A08036 -:10869000B4F88601C549E080C348097894F864318C -:1086A000628830F8111030F81300D4F828A008447C -:1086B0000004000C4FF0000105D000FB02F1BC48A3 -:1086C000B1FBF0F0411C1FFA81FB2146012007F0AD -:1086D0000DF8054694F85200FCF790FE94F85210FD -:1086E00002290CBFAE49AF49084400F2E1414FF402 -:1086F0007A70B1FBF0F1608840F271225043C1EB17 -:108700004000A0EB0B00A0F55970AA4534BF2946E4 -:108710005146814203D2AA452CBF5046284660628A -:10872000022084F80401D4E956ABB4F8DE000390CB -:10873000B4F85001D4F84C110691B8F1000F03D0F1 -:1087400094F8181149B17FE004F1D8010091743117 -:10875000099104F59C75091D07E004F596710091D7 -:10876000091D099104F58E75091D0A91B4F8581078 -:10877000381A791A09B200B20491002805DAD4F83F -:108780004801069001200C90084694F80411002935 -:108790005ED0012900F0668102297DD0032918BF2F -:1087A000FFDF00F0A98131460698F9F76CFE0999C0 -:1087B00008600A9801210780002028702971099813 -:1087C0000068A8607948D0E90520824287BF009AF6 -:1087D0001060009802600098626A0068104400F21D -:1087E0008310E8606971B4F8C800C01B00B20028AB -:1087F000C4BF032068710898002800F0F181B9F126 -:10880000000F18D0B4F8F020002A0CBF0020B4F8F4 -:10881000F200A4F8F20094F8F430401C584390425F -:1088200009D26879401E002805DD6971B4F8F200AC -:10883000401CA4F8F200B8F1000F00F0F58194F8A4 -:108840001801002800F0EC8113B00220BDE8F08F81 -:10885000BAF1000F08BFFFDFE08A40F27121484300 -:10886000490001EB400210980021002806D000FBCF -:1088700002F14F48B1FBF0F000F10101C4F808111A -:10888000608840F2E24100FB01F210994FF00000D5 -:1088900008D001FB02F100E042E04548B1FBF0F0F6 -:1088A00000F10100C4F80C010AF101064FF00100CB -:1088B000FCF7A4FD3F494FF47A7B0844B0FBFBF082 -:1088C000E18A40F271225143C0EB4101D4F8080122 -:1088D0000190091A314401F2C246607D510010FB3B -:1088E00001F00C900120FCF789FD33490844B0FBEE -:1088F000FBF1019801EB40010C9801EB000B01200A -:10890000FCF770FD584400F1620128484161816123 -:10891000A6EB0A00401EB0F53D7F38BFFFDF42E7FF -:10892000E28A40F271215143D4F8FC00109A00EB26 -:1089300041010020002A06D01D4802FB01F2B2FBD3 -:10894000F0F000F10100C4F80801628840F2E2434F -:1089500002FB03FC109B4FF0000206D0144A03FBFD -:108960000CF3B3FBF2F202F10102C4F80C21039AFA -:108970009AB9B9F1000F38D094F85200FCF73EFDD7 -:10898000014694F8520002280CBF054A054A1144DA -:1089900001F2E1424FF47A7110E026E0580E002017 -:1089A00004360200A224020042230200E800002054 -:1089B00040420F007D2A020083290200B2FBF1F140 -:1089C000D4F80821E38A114440F2712CD4F8FC2039 -:1089D00003FB0CF302EB4302561AFCF703FDABEB6F -:1089E00000003044A0F1200600E00E1AD4F8002167 -:1089F000D4F8F810D4F8080101FB020B607D40F2B6 -:108A0000E24110FB01F00C9094F852A05046FCF7A4 -:108A1000F5FC0146BAF1020F0CBFF948F9480844C9 -:108A200000F2E1414FF47A70B1FBF0F000EB4B0142 -:108A30000C9801EB000B5046FCF7D4FC584400F1B5 -:108A40006001F14840F2712341616288D4F80C1151 -:108A50005A43C1EB4201A1F213318161012084F834 -:108A60000401A0E6628840F27123D4F80C115A4345 -:108A7000C1EB420202FB00F6DDE903020244D4F836 -:108A80000001D4F8F8C0121AD4F80831521E0CFBB9 -:108A9000003002FB010B607D40F2E24110FB01F06F -:108AA0000C9094F852000190FCF7A8FC0146019844 -:108AB000022814BFD348D248084400F2E1414FF4E1 -:108AC0007A70B1FBF0F000EB4B010C9801EB000B5E -:108AD0000198FCF787FC584400F16001CA48B9F1DD -:108AE000000F4161A6F2133181613FF45CAEBAF12F -:108AF000000F08BFFFDF56E6628840F27123D4F80A -:108B00000C115A43C1EB420101FB00F694F86300DB -:108B100025281CBF94F8640025280AD1B4F87C01EC -:108B2000381A00B2002804DB94F87F01002818BF2F -:108B30000B900C9828B1039880B3BBF1000F18BFBD -:108B4000FFDFDDE903010144D4F80C0101FB00FA69 -:108B50000B98FCF753FC01460B9802280CBFA84861 -:108B6000A848084400F2E1414FF47A70B1FBF0F0FC -:108B700000EB4A0A0B98FCF735FC504400F1600109 -:108B8000A14840F2712341616288D4F80C115A4324 -:108B9000C1EB4201A1F21331816104E6FFE7BBF1B1 -:108BA000000F14BFBAF1000FFFDF0B98FCF726FC93 -:108BB0000B9902290CBF92499249084400F2E14105 -:108BC0004FF47A70B1FBF0F0361A94F85200FCF7CB -:108BD00009FCABEB00003044A0F12006B1E700BF78 -:108BE000B9F1000F7FF40EAE94F8040100283FF4B1 -:108BF00022AE618840F27122D4F80C015143C0EBDF -:108C00004101284606F02EFD0004000C3FF413AE8F -:108C10001D99002918BF0880012013B0BDE8F08F0E -:108C200094F85401FAF781FA94F854012946FAF7B6 -:108C300069F900281CBF88F0010084F819010020A0 -:108C400013B0BDE8F08F2DE9F04F704C804683B033 -:108C500020788A4600256C4E4FF00209032804BF95 -:108C6000207B40457CD1606830612078032818BFA4 -:108C7000FFDF0327BAF1080F70D2DFE80AF0040E15 -:108C80001B1B166F6F6A6562FCF74FFF002818BF49 -:108C9000FFDFB77003B0BDE8F08FFDF7CBF8002819 -:108CA00018BFFFDF03B0BDE8F08F03B0BDE8F04FA1 -:108CB000FCF7FAB927752574E07A012658B14FF40C -:108CC0007A71A069F9F7DFFBA061002104F11000BF -:108CD00006F0C8FC1AE001216846FAF71AFF9DF871 -:108CE000000042F210710002B0FBF1F201FB12052C -:108CF000FCF793FD05442946A069F9F7C4FBA06180 -:108D0000294604F1100006F0ADFC461C208C411CE5 -:108D10000A293CBF30442084606830B1208C401C5C -:108D20000A2828BF84F8159000D26775607A002859 -:108D30001CBF03B0BDE8F08F207B04F11001FAF7EF -:108D4000E1F8002808BFFFDF03B0BDE8F08F07E0BF -:108D500004E0207BF9F76DFE2570F5E7FFDFF3E710 -:108D6000B8F1200F28BFFFDF294F072137F818007F -:108D7000F7F774FE040008BFFFDFB8F1200F28BF2B -:108D8000FFDF37F818002188884218BFFFDF4FF057 -:108D900001083461BAF1080F80F04481DFE80AF07D -:108DA000049AA2A29DEEEEEDC4F85851F580C4F8E5 -:108DB0005C5194F8190138B9F9F75AFED4F8241126 -:108DC000FAF767FB002825DCB4F81611B4F8580050 -:108DD000814206D1B4F8CC10081AA4F8CE0020467F -:108DE00005E0081AA4F8CE00B4F816112046A4F83D -:108DF0005810D4F84011C4F82411C0F8481127E0E5 -:108E000004360200A2240200E8000020580E0020D0 -:108E1000800E0020B4F81411B4F85800081AA4F811 -:108E2000CE00B4F814112046A4F85810D4F8241138 -:108E3000C4F84011C4F84811D4F82C11C4F8D81063 -:108E4000D4F83011C4F84C11B4F83411A4F850110E -:108E500003F0D7FFF9F7E6FD94F852A00746504615 -:108E6000FCF7CCFABAF1020F0CBFFE49FE490844E8 -:108E70004FF47A7100F2E140B0FBF1F1D4F80C014B -:108E800040F27122014460885043C1EB4000A0F1E0 -:108E9000300AB72F98BFB7272146012006F026FCDD -:108EA0003844AAEB0000A0F21937A246214601205F -:108EB00006F01CFCDAF824109C30814288BF0D1AA1 -:108EC000F760BD4228BF3D46B56084F8188186F83A -:108ED000029039E704F0DBF801E0FCF7E5F884F8EC -:108EE000188131E7F9F7C4FDD4F84821014610464E -:108EF000FAF7CFFA48B1628840F27123D4F80C1126 -:108F00005A43C1EB4201B0FBF1F094F864100D2913 -:108F10000FD0B4F85810B4F816210B189A42AEBF0F -:108F2000501C401C0844A4F8160194F81A0178B9A2 -:108F300005E0B4F81601401CA4F8160108E0B4F8E6 -:108F40001601B4F8CC10884204BF401CA4F81601E6 -:108F5000B4F85201DFF81493401CA4F85201B4F89D -:108F60007E00B4F87C100DF1080B401AB4F85810CC -:108F7000401E08441FFA80FA17E045E052E03078BE -:108F8000002339F81000CDE9005B94F8641139F83A -:108F90001110084481B22046FFF736FB00283FF449 -:108FA000D3AE012818BFFFDF26D0B4F81621AAEBF4 -:108FB000020000B20028E2DA082084F8730084F886 -:108FC0007280204603F0D2FB84F8045194F8545187 -:108FD0004FF6FF78202D00D3FFDF27F8158094F897 -:108FE0005401F9F726FD202084F85401307903B0AC -:108FF000BDE8F04FF2F77EBEB4F81601BDF80810D8 -:109000000844A4F81601D0E794F80401042818BF16 -:10901000FFDF84F8045194F854514FF6FF78202D67 -:10902000DBD3D9E7FFDF8FE610B5914C207850B144 -:1090300001206072FCF71DFF2078032805D0207AFC -:10904000002808BF10BD0C2010BD207BFAF76DF87A -:10905000207BFAF7B8FA207BF9F7EBFC002808BF71 -:10906000FFDF0020207010BD2DE9F04F804F83B04E -:10907000387801244FF0000840B17C720120FCF7E1 -:10908000F8FE3878032818BF387A0DD0DFF8E4915D -:1090900089F8034069460720F7F76BFC002818BFE2 -:1090A000FFDF4FF6FF7440E0387BFAF73EF8387B7D -:1090B000FAF789FA387BF9F7BCFC002808BFFFDF14 -:1090C00087F80080E2E7029800281CBF90F804119E -:1090D00000292AD00088A0421CBFDFF89CA14FF0D5 -:1090E000200B3AD00721F7F7B9FC040008BFFFDFD7 -:1090F00094F85401FAF767FA84F8048194F854510B -:109100004FF6FF76202D28BFFFDF2AF8156094F870 -:109110005401F9F78EFC84F854B169460720F7F73B -:1091200028FC002818BFFFDF12E06846F7F7FFFBB6 -:109130000028C8D011E0029800281CBF90F8041144 -:10914000002905D00088A0F57F41FF39CAD104E08D -:109150006846F7F7ECFB0028EDD089F8038087F824 -:109160000B8003B00020BDE8F08F70B50446434883 -:1091700090F80004424D400995F8001449098842CE -:1091800018BFFFDF95F8140D40093E4991F800140F -:109190004909884218BFFFDF3649002001220C71BF -:1091A00088700A704870C87031490870BDE8704016 -:1091B0005AE73049087070472DE9F8432C4C0646B1 -:1091C0002078002875D13048F9F7D8FB2073202883 -:1091D0006FD0032766602770002565722572AEB1D7 -:1091E000012106F1F400FAF70CFD0620F7F7E0FB89 -:1091F00080460720F7F7DCFB96F8F4104044B1FBFB -:10920000F0F200FB1210401C86F8F400F9F70AFC9B -:109210001E49091838BF40F2F65000F59D7086B21D -:10922000FCF7D7FAE061FCF7F8FA4FF0010878B3E1 -:1092300084F80A8001216846FAF76BFC9DF800006B -:1092400042F210710002B0FBF1F201FB1200064481 -:10925000F9F70EFC3146F9F716F9A0612775677525 -:10926000257416E004360200A22402004223020004 -:10927000580E0020E8000020800E002001E000E0F1 -:109280000BE000E019E000E0478C01000AFAFFFF64 -:1092900012E0207B04F11001F9F734FE002808BF2A -:1092A000FFDF25840020FCF7E4FD0020BDE8F88303 -:1092B000FFE70C20BDE8F883F9F7DAFB3146F9F750 -:1092C000E2F8A061A57284F80B80C7E72DE9F047AA -:1092D00082B00026044680F80461A0F85061DFF8EF -:1092E00000944288FD4FD0F8288099F8000094F847 -:1092F000641137F8100037F8111008440104090C04 -:10930000304605D001FB02F0F649B0FBF1F0401CFD -:109310001FFA80FA2146012006F0E8F9054694F884 -:109320005200FCF76BF894F8521002290CBFEE497A -:10933000EE4908444FF47A7100F2E140B0FBF1F1DC -:10934000608840F271225043C1EB4000A0EB0A005C -:10935000A0F55970A84534BF29464146814203D241 -:10936000A8452CBF4046284660620096019699F8B1 -:10937000000094F86411002337F8100037F811103A -:109380001A46084481B22046FFF73EF9002818BF6C -:10939000FFDFC4F800610120C4F8F86084F804011C -:1093A000A4F81661A4F8146184F81A61B4F858009E -:1093B000401EA4F85800A4F8526102B00020BDE895 -:1093C000F087C74948707047C94810B5417A0124F1 -:1093D000002918BF002408D1C17A31B1406AC549BB -:1093E000884284BF0024FCF740FD204610BD70B5C4 -:1093F000BB4C0546E088401CE080D4E9020162785D -:10940000D5F85861002A1CBF324606F053F9A06017 -:10941000864208D895F80401012804D0E078002895 -:1094200004BF012070BD002070BD70B50D4640F234 -:10943000E24100FB01F42846FBF7E0FF022D0CBFE0 -:10944000A949AA4908444FF47A7100F2E140B0FBFF -:10945000F1F000F54D7084428CBF201A002070BDE1 -:109460002DE9F04383B00026044680F8186190F897 -:10947000D600002807BF94F80401032803B0BDE814 -:10948000F083F9F7F5FAD4F8482101461046FAF7C7 -:1094900000F80028DCBF03B0BDE8F083628840F22A -:1094A0007123D4F80C115A43C1EB4201B0FBF1F027 -:1094B000411CB4F858000144A4F81411B4F8CC10BD -:1094C000B4F81421891A09B20029DCBF03B0BDE841 -:1094D000F083012184F81A11B4F87E10B4F87C20CE -:1094E0007E4F891A491E084485B2DFF8F4810DF1D8 -:1094F00008091EE098F8000037F81000CDE900696F -:10950000B4F8142194F86411012337F811100844B9 -:1095100081B22046FFF778F8002804BF03B0BDE809 -:10952000F08301280FD0022812BFFFDF03B0BDE88F -:10953000F083B4F81401281A00B20028BCBF03B0AD -:10954000BDE8F083D6E7B4F81401BDF8081008446C -:10955000A4F81401EDE7F0B5DFF884C104265F4BF1 -:109560009CF80020002583B006297DD2DFE801F0B9 -:10957000073C03191941044680F8046107E00446DA -:109580009CF80300002818BF84F804610BD0F9F799 -:109590007AF9A4F85251B4F85800A4F8160184F8E6 -:1095A0001A5103B0F0BD33F8120094F804210121E0 -:1095B000032A13BF94F80421C4F80051C4F8F850EA -:1095C000012AE4D1CDE9001594F86411B4F8CC2057 -:1095D00033F811100023084481B22046FFF714F835 -:1095E000002818BFFFDFD2E7032180F8041103B081 -:1095F000F0BD0446B0F802C0866A90F8640133F802 -:10960000121033F8100008440104090C4FF0000058 -:1096100005D001FB0CF03349B0FBF1F0401C87B2E0 -:109620002146012006F062F8054694F85200FBF747 -:10963000E5FE94F8521002290CBF2B492B4908442F -:109640004FF47A7100F2E140B0FBF1F0618840F232 -:1096500071225143C0EB4100C01BA0F55970AE42CE -:1096600034BF2946314600E008E0814203D2AE42D1 -:109670002CBF30462846606203B0F0BDFFDF03B068 -:10968000F0BD2DE9F8431A4C0327154EE27AA17A72 -:1096900042F21079002550B1012843D002281CBFA6 -:1096A000FFDFBDE8F8834FF000081AB95EE04FF025 -:1096B00000080AB1E5722EE051B101216846FAF7BF -:1096C0004DFA9DF800000002B0FBF9F109FB11080A -:1096D000FCF7A3F800EB0801A0690DE042230200AB -:1096E000E800002040420F0004360200A2240200DD -:1096F000580E0020DB821300F8F7C5FEA061257428 -:109700006775607A30B9207B04F11001F9F7FAFB34 -:1097100000284BD02584F9F7B6F83079BDE8F84336 -:10972000F2F7E8BAE572A7692570012020720021DE -:10973000606805F035FB6068C0F84871217B80F8EF -:109740005411616AC0F84C71C0F8581190F8545126 -:109750000788202D28BFFFDF3C4820F8157060687F -:10976000FFF7B4FD002818BFFFDFD4E751B1012196 -:109770006846FAF7F3F99DF800000002B0FBF9F132 -:1097800009FB1108FCF749F800EB0801A069F8F79C -:109790007AFEA06125746775607A0028BAD1207BB3 -:1097A00004F11001F9F7AEFB0028B3D1FFDFB1E7F8 -:1097B00070B5274CA178022906BFE188002970BD49 -:1097C0002569C5F85C0195F85200FBF70BFED5F84A -:1097D0005C11081AA1680144A160E1680844E060D6 -:1097E00070BD70B505461A488378022B06BF006924 -:1097F00000F5AC74174C002904BF256070BD012929 -:1098000008BF681E0DD002291CBFFFDF70BD1046C7 -:10981000FBF703FE4FF47A7100F2E140B0FBF1F088 -:10982000281A206070BD0C48007800281CBF00205A -:10983000704710B50720F7F7ADF880F0010010BDB4 -:1098400005480078002818BF01207047800E0020CE -:10985000E80000207C0E0020580E0020F8490C285B -:10986000896881F8C3001ABF13281828704700229E -:1098700011280FD0072808BF704715280AD00128E3 -:109880001ABF002802287047A1F88220012081F821 -:1098900086007047A1F88820704770B5E84CA16831 -:1098A0000A88A1F8362181F8340191F85100012885 -:1098B00008BF012508D0022808BF022504D00428CB -:1098C00016BF08280325FFDFA06880F8385190F8FC -:1098D0005200012808BF012508D0022808BF022530 -:1098E00004D0042816BF08280325FFDFA068012143 -:1098F00080F8395180F83211002180F80611E078A3 -:10990000BDE87040F2F7F6B9F0B4CD48806890F841 -:109910004E30478EC68E458FB0F84010C28FB0F8DB -:1099200042C0022B1FD08D4238BF294601866245B6 -:1099300028BF62468286018FB0F84430994238BF12 -:109940000B464386818FB0F84640A14238BF0C4693 -:10995000C486BB4228BF1F464786B44228BF26465E -:10996000C686F0BC7047038E9D4228BF1D46838E7D -:109970009A4228BF1A46A94298BF0D4605869445CB -:1099800098BF62468286002180F84E10D3E7AC4A29 -:10999000012992681BD0002302290FD0032921D06E -:1099A00028B301282ED0032818BF704792F863000F -:1099B00013281CBF1628182805D1704792F8C30039 -:1099C000002808BF7047D2F8F0000370704792F883 -:1099D000C300012808BF7047D2F8F4000178491E7F -:1099E0000170704792F8C3000328ECD17047D2F899 -:1099F000F000B2F858108288891A09B20029A8BF6D -:109A000003707047B2F85800B2F8FA10401A00B26A -:109A10000028E1DA70472DE9F04100260327884C41 -:109A20000125A0B1206906F0CCF9A16881F8C20037 -:109A300005FA00F010F4000F08BFFFDFA06880F8FF -:109A40006370A0F8826080F88650BDE8F081A0685D -:109A50000023194690F86420583005F0A2FD002834 -:109A600004BF6570BDE8F0816078002818BFBDE8CC -:109A7000F081206906F0A5F9A16881F8C10081F89C -:109A80006470A1F8886081F88A50BDE8F08170B5F3 -:109A90006B4C84B0207910F0010F04BF04B070BD8E -:109AA000206900230521C578A06890F8632058300C -:109AB00005F077FD002818BF022D0FD00B2D18BF21 -:109AC000042D0BD0052D18BF062D07D00D2D18BF66 -:109AD000112D03D0607840F0080060706078002895 -:109AE0001CBF04B070BD2069C078801E162880F0AD -:109AF0005283DFE800F00BFBA7C5FA26FBF9FB9ABF -:109B0000F8FCFBFBFBE3F6F5F4F3F2F1A0680023AD -:109B1000012190F86620583005F043FD002840F000 -:109B2000B583206906F0A8F9A16881F8EE00072046 -:109B300081F86600002081F88A0081F8860000F034 -:109B4000A5BBA0680921002390F86320583005F0D8 -:109B500028FD20B1206906F0DFF9122814D0A06892 -:109B60000A21002390F86320583005F01AFD20B137 -:109B7000206906F0D1F9142821D0206906F0CCF92B -:109B8000162840F0838342E0A0680125002390F866 -:109B900063200921583005F004FD002808BF6570D6 -:109BA00000F074836078002840F07083A16881F829 -:109BB0007A0081F8860081F8630000F067BBA06836 -:109BC0000021012580F86310A0F8821080F886102B -:109BD0000421FEF71FFBA06890F84E10012900F049 -:109BE0007C820288A0F81621028EA0F81821828EAD -:109BF000A0F81A21428E00F58671A0F81C21C08EB3 -:109C000048820D72E078F2F775F800F03FBBA0686B -:109C100090F86310202940F03983002180F8631008 -:109C200080F886101A2000F02FBBA06890F863100F -:109C30000F292AD1002180F8681012213AE0000093 -:109C400004010020A06890F8631013291DD1D0F8FA -:109C5000F01000884988814218BFFFDFA068D0F863 -:109C6000F00000F12601206906F033F9A06800F148 -:109C7000BC01206906F035F91620A16800F064B92E -:109C8000A26892F86300162802D0022000F064BA9D -:109C9000D2F8F00002F1A80300F11E0100220E30FC -:109CA00005F007FCA0680021C0E92611012180F819 -:109CB0006810182180F8631000F0E8BA206906F0F7 -:109CC000B0F9032840F0E282206906F0AEF900BF47 -:109CD00001F022FC00F0DABA8DE202E2AEE152E1DC -:109CE0001EE135E103E050E0C4E004E0D5E1206985 -:109CF00006F00EF9ECE7A06890F863101B29C4D1B8 -:109D0000002580F88B5080F88650D0F8F01000883D -:109D10004988814218BFFFDFA068D0F8F0100D70AD -:109D2000D0F83C110A78002A18BFFFDF40F0F3801A -:109D300090F88C207AB180F88C500288CA80D0F8D4 -:109D40003C110D71D0F83C210D211170D0F83C214F -:109D50000188518010E00288CA80D0F83C110D7152 -:109D6000D0F83C2101211172D0F83C210C21117056 -:109D7000D0F83C21018851800088F6F779FFF6F78A -:109D8000D9FBE078F1F7B6FFC5E0A06800231946DB -:109D900090F86420583005F004FC50B9A068002306 -:109DA000082190F86320583005F0FBFB002800F0F4 -:109DB00027826078002840F06982A06890F88E00C1 -:109DC00010F0020F17D1206906F098F8A16881F809 -:109DD0008F00206906F094F8A168A1F8900020692E -:109DE00006F091F8A168A1F8920091F88E0040F079 -:109DF000020081F88E00A06890F88E1011F0010F1B -:109E000012D190F8642000231946583005F0C9FBA0 -:109E1000002808BFFFDF0121A06880F8641080F8E7 -:109E20008A100021A0F88810A06890F8631001291A -:109E300007D1002180F8631080F88610E078F1F7F0 -:109E400059FFA168D1F8F000098842888A4204BF0E -:109E50000178042940F01A8200250570E078F1F7B6 -:109E600049FFA06890F86310002908BF80F8865069 -:109E700000F00CBAA0680023072190F86320583046 -:109E800005F08FFB002800F0BB816078002840F0CF -:109E9000FD8102A9206906F079F8A0689DF80820E4 -:109EA000002590F89410114001F02F0180F89410D3 -:109EB00090F895109DF80920114001F0410180F8BB -:109EC000951080F88650D0F8F010008849888142BB -:109ED00018BFFFDFA068D0F8F0100D70D0F83C116B -:109EE0000A78002A18BFFFDF15D10288CA80D0F88F -:109EF0003C110D71D0F83C11029A8A60039ACA6035 -:109F0000D0F83C21072111700188D0F83C01418034 -:109F1000E078F1F7EFFEA06880F8635000F0B6B982 -:109F2000A0680023092190F86320583005F039FB20 -:109F3000002800F065816078002840F0A781A168C2 -:109F400081F87A0081F8860081F8630000F09EB9FC -:109F5000A0680023194690F86420583005F021FBD2 -:109F6000002800F04D816078002840F08F81A068C3 -:109F70000021A0F88810012180F88A10022180F8C1 -:109F8000641000F083B9A0680023194690F864209B -:109F9000583005F006FB00287ED0206905F0E0FF70 -:109FA00000287AD0206905F0D7FFA16808872069CA -:109FB00005F0CEFFA1684887206905F0CFFFA168B2 -:109FC0008887206905F0C6FFA168C88791F86300FB -:109FD0001D2813BF91F84E00012081F84E00012882 -:109FE00007D091F8FD00002804BF91F8FC0000287C -:109FF00003D01F2081F8640017E01E2081F8640060 -:10A000000A88A1F822210A8FA1F824214A8FA1F8F9 -:10A0100026218A8F01F58670A1F82821C98FC18376 -:10A0200001210175E078F1F765FEA0680021A0F834 -:10A030008810012180F88A1000F028B9A068002358 -:10A040000A2190F86320583005F0ABFA20B320695C -:10A0500005F086FFA8B1206905F07EFFA16808879A -:10A06000206905F075FFA1684887206905F076FF33 -:10A07000A1688887206905F06DFFA168C887FFF790 -:10A0800043FCA068002180F8861080F8631004214A -:10A09000FEF7C0F8A06801E01AE07CE090F84E10EE -:10A0A00001291AD00288A0F81621028EA0F81821E2 -:10A0B000828EA0F81A21428E00F58671A0F81C212C -:10A0C000C08E488201200872E078F1F713FEDDE0CF -:10A0D000607840F001006070D8E0022180F84E10F6 -:10A0E000D4E0A0680023194690F86420583005F0A9 -:10A0F00058FA80B3A06890F86300242812BF25287E -:10A10000607840F0200027D06846FBF7EDF9002882 -:10A1100008BF002105D0009805F053FE8DF8080017 -:10A1200002A9A06801AB162290F8630005F001FCBB -:10A13000A0B1A0689DF80420162180F8E42080F8E2 -:10A14000E5101A2180F86410012180F88A1000219E -:10A15000A0F888109AE053E0607097E0206905F05D -:10A1600022FFC0B1206905F018FFA16800F00700C8 -:10A1700081F84F00206905F014FF00F00701A06886 -:10A1800080F8501090F80721002A04BF90F80621AB -:10A19000002A04D024E00020FFF73DFC76E090F890 -:10A1A0004F3090F852C000F151029C4501BF127827 -:10A1B0008A42012180F87B1012D00288A0F82E215B -:10A1C00090F84F2000F5867180F8302190F850000B -:10A1D00081F82500012081F82000E078F1F78AFD60 -:10A1E000A068222180F86410012180F88A100021E3 -:10A1F000A0F888104AE0A06890F86300202801D0F9 -:10A200000120A9E7206905F0D8FEC0B3206905F058 -:10A21000C4FE00F0070060F30705206905F0C1FEE9 -:10A2200000F0070060F30F25A2680120002682F8E5 -:10A230008600A2F88260242082F86300D2F8080128 -:10A24000B2F851202946ADF8002005F020FB9DF81A -:10A250000020C1B28A4207BFA16881F8E860A26805 -:10A2600082F8E8109DF80110C0F30720814219BF61 -:10A27000A16881F8E900A06880F8E96006E0FFE7DE -:10A280000120FFF7C8FB1E20FFF707FBA068D0E9FD -:10A2900028134A1C43F10001C0E9282104B070BD15 -:10A2A0002DE9F047FE4D04464FF00007687808435B -:10A2B0006870287910F0200F2846806818BFA0F831 -:10A2C0007C7004D1B0F87C10491CA0F87C1090F888 -:10A2D0006910012639B990F863200023062158300F -:10A2E00005F05FF958B3A88810F4006F07D0A8688C -:10A2F00090F86910002918BFA0F874701FD1A868E1 -:10A30000B0F87410491C89B2A0F87410B0F8762027 -:10A310008A422CBF511A00218288521D8A4228BFCE -:10A3200080F87A60B0F87410B0F87620914206D3C5 -:10A33000A0F8747080F81261E878F1F7DBFC2879F6 -:10A3400010F0600F08D0A86890F8671021B980F865 -:10A3500067600121FDF75EFF4FF00808002C56D121 -:10A360006878002851D1287910F0040F0DD0A86822 -:10A3700090F86300032808BFFFDFA86890F8661014 -:10A38000072904BF2E7080F8667001F015F928794E -:10A3900010F0080F19D06878B8B9A868002190F8B3 -:10A3A000C300FFF7F4FAA86890F8C300FF2808BFBD -:10A3B000FFDFFF21A86880F8C31090F86610082915 -:10A3C00003D10221297080F86670FFF760FBA8783E -:10A3D00010F0080F16D0A8680023052190F863201C -:10A3E000583005F0DEF850B185F80180A868D0F843 -:10A3F0003C1108780C2808BF0020087002E00020FB -:10A4000003F04DFDA86801F010F800F06CFDA8689D -:10A41000A14600F1580490F8EC0030B9A27B00236B -:10A420000121204605F0BDF810B1208D401C20858B -:10A430003D21B9F1000F18D12878022808BF162055 -:10A440000ED0012804BFA86890F8EE0008D0687804 -:10A45000E8B110F0140F1CBF1E20E07602D005E01A -:10A46000E07603E010F0080F02D0E176A67641E036 -:10A4700010F0030F03D02A20E076A6763AE010F021 -:10A48000200F08BFFFDF2320E076A67632E094F8A5 -:10A490002E0028B1608D411C6185A18D884213D2A8 -:10A4A00094F8320028B1208E411C2186A18D88426B -:10A4B0000AD2218DE08C814203D3AA6892F8EC2065 -:10A4C00012B9A28D914203D32220E076A67611E044 -:10A4D000E17B31B1A18C814228BF84F81B80C5D2B9 -:10A4E00006E0A08C062803D33E20E076A67601E0A5 -:10A4F000A07EA0B1E7722773E7730221A868FDF779 -:10A5000089FEA86890F8C310012904D1D0F8F4009E -:10A510000178491E0170E878F1F7ECFB03E00021B7 -:10A52000A868FDF777FEBDE8F047FAF7ECBF5C4995 -:10A530004A788B781A430ED101280AD0087910F096 -:10A54000040F04D0886890F86600072803D0012023 -:10A550007047FDF74BBE0020704770B5504C064663 -:10A560000D46A0883043A08016F0020F04D016F0EC -:10A57000010F18BFFFDFE56016F0010F18BF25615E -:10A5800016F0020F12D0284605F01BFC062802D058 -:10A590000B282ED00AE0A06890F86310182905D186 -:10A5A0000021C0E92811012180F8691016F0800F00 -:10A5B0001CBF0820A07016F4806F08BF70BDA06893 -:10A5C000B0F8581080880844801D86B2284605F0EF -:10A5D000F8FB012804BFA068A0F8FA6015D028464F -:10A5E00005F0EFFB68B1284605F0EBFB182823D0F7 -:10A5F0000BE0A06890F86310122908BF0021D5D1A4 -:10A60000D2E7A068D0F8F0008680284605F0D9FB94 -:10A6100001281DD0284605F0D4FB08B3284605F0D4 -:10A62000D0FB182818BF70BDA068B0F8EA10284603 -:10A63000BDE8704005F0D3BCA06890F8E810002990 -:10A6400002BF90F8E91000290026A0F8EA60DCE7D4 -:10A65000A068B0F8FA102846BDE8704005F003BCC9 -:10A66000A068D0F8F00081882846BDE8704005F069 -:10A67000CABBF0B50A4C85B00026A060A680667003 -:10A68000A670054626700088FAF705FFA0680088C6 -:10A69000FAF727FFB5F8D000A168401C82B201E0AC -:10A6A0000401002001F1580004F085FD002818BFC6 -:10A6B000FFDF95F8640025280AD1B5F85810B5F8E1 -:10A6C000EA00081A00B20028A4BF6078002804D06D -:10A6D00095F8630025283BD119E0A06890F8E810B0 -:10A6E000002908BF90F8511080F8511090F8E91037 -:10A6F000002908BF90F8521080F852100020FFF790 -:10A70000CCF885F86460A16881F87B6020E0B5F83A -:10A710005810B5F8EA00081A00B20028A4BF607803 -:10A72000002815D1A06890F8E810002908BF90F81B -:10A73000511080F8511090F8E910002908BF90F8E6 -:10A74000521080F852100020FFF7A7F885F86360D8 -:10A75000A5F8D060A06890F8861039B1B0F88210E2 -:10A76000B0F88420914224BF05B0F0BD90F88A1063 -:10A7700039B1B0F88810B0F88420914224BF05B0F8 -:10A78000F0BDB0F88020B0F87E108A4224BF05B03A -:10A79000F0BD90F867208AB3B0F87C208A4224BFCD -:10A7A00005B0F0BD90F8C370FF2F00F02A81684615 -:10A7B000FAF774FE002808BFFFDF009805F03FFAA3 -:10A7C0000321009805F052FA0098017821F0100159 -:10A7D0000170394605F0C7FA192F80F0E780DFE8ED -:10A7E00007F02A22144EE5E5E61B7CE5E6E66CE57B -:10A7F000E5E5E5D8E6E6869FB8E5C500B0F87C104B -:10A80000062924BF05B0F0BDCCE7A06890F8ED1094 -:10A81000009805F02FFBCAE0A06890F8C4100098DB -:10A8200005F078FBC3E0A068D0F8F400411C009864 -:10A8300005F011FBBBE0A068D0F8F000817900982A -:10A8400005F0DDFAA068D0F8F0000189009805F065 -:10A85000CFFAA068D0F8F0004189009805F0B3FA6B -:10A86000A068D0F8F0008189009805F0B3FAA068DC -:10A87000D0F8F000C189009805F0B3FA97E0A0681D -:10A88000D0F8F000011D009805F0F8FAA068D0F8A3 -:10A89000F00000F10C01009805F0FAFAA068D0F879 -:10A8A000F00000F11E01009805F0F8FAA06800F130 -:10A8B000B801009805F000FB79E060690178009824 -:10A8C00005F012FB60698188009805F00FFB606954 -:10A8D0004188009805F00EFB69E0FE49D1E90001CE -:10A8E000CDE9020102A9009805F018FB5FE0A0681D -:10A8F000B0F84410009805F01BFBA068B0F84610B3 -:10A90000009805F019FBA068B0F84010009805F019 -:10A9100017FBA068B0F84210009805F015FB46E060 -:10A92000A068B0F84010009805F00AFBA068B0F8E5 -:10A930004210009805F008FBA068B0F84410009899 -:10A9400005F0F6FAA068B0F84610009805F0F4FAA1 -:10A950002DE0A06890F80811009805F01CFBA06895 -:10A9600090F80911009805F01AFB20E0A06890F813 -:10A97000E80004F087FF0146009805F028FBA06876 -:10A9800090F8E90004F07EFF0146009805F023FBF3 -:10A990000DE0A06890F8E510009805F040FBA06875 -:10A9A00090F8E410009805F03EFB00E0FFDFFAF7B6 -:10A9B00088FD002808BFFFDF009F384605F001FA38 -:10A9C000012809D0384605F0FCF960B1384605F099 -:10A9D000F8F918280FD014E0A068B0F8FA1038463B -:10A9E00005F041FA0DE0A068D0F8F0008188384603 -:10A9F00005F009FA05E0A068B0F8EA10384605F05D -:10AA0000EEFAB5480090B54BB54A2946304603F0FA -:10AA100081F9A0680023052190F86320583004F0E4 -:10AA2000C0FD002804BF05B0F0BD05B0BDE8F04092 -:10AA300002F041BFAB48806890F8861029B1B0F8A9 -:10AA40008210B0F8842091421AD290F88A1029B16D -:10AA5000B0F88810B0F88420914211D2B0F880206C -:10AA6000B0F87E108A420BD290F86720B0F87C00D4 -:10AA700022B1884204D200BF03F0ECB90628FBD310 -:10AA8000002001460CE470B50C46064615464FF40E -:10AA9000A071204607F0C9F82680002D08BFFFDF0F -:10AAA0002868C4F8F0006868C4F8F400A868C4F81E -:10AAB0003C0170BDF6F7B3B82DE9F0410D460746ED -:10AAC0000621F5F7CBFF040008BFBDE8F081D4F8FC -:10AAD0003C110026087858B14A8821888A4207D15B -:10AAE000082810D00D281FD00C2835D0072850D0AA -:10AAF00094F8120100285ED06E700F20287084F840 -:10AB000012616F8042E06E7008202870D4F83C011A -:10AB10004168C5F802108168C5F80610808968810F -:10AB2000D4F83C01067031E00846F6F7A1F8074674 -:10AB3000F5F716FDB8B96E700D202870D4F83C01F9 -:10AB40004068C5F80200D4F83C0106703846F5F7B5 -:10AB500001FD0120BDE8F0810846F6F789F80746B7 -:10AB6000F5F7FEFC10B10020BDE8F0816E700C20FE -:10AB70002870D4F83C014168C5F802100089E880CB -:10AB8000D4F83C0106703846F5F7E4FC0120BDE836 -:10AB9000F0816E7007202870D4F83C01416882680B -:10ABA000C068C5F80210C5F80620C5F80A00D4F838 -:10ABB0003C010670EAE794F81401C8B16E701420E5 -:10ABC000287094F814010028E0D000BF84F81461C4 -:10ABD000D4F81601C5F80200D4F81A01C5F8060029 -:10ABE000B4F81E01688194F814010028EED1CDE775 -:10ABF00094F8200180B16E701A20287084F82061CA -:10AC0000D4F82201C5F80200D4F82601C5F80600E0 -:10AC1000B4F82A016881B9E794F82C0148B16E7044 -:10AC20001B20287084F82C61D4F82E01C5F802008E -:10AC3000ACE794F80C0190B16E701820287094F86D -:10AC40000C010028A2D000BF84F80C61D4F80E01DA -:10AC5000C5F8020094F80C010028F5D196E794F8A5 -:10AC60003201002808BFBDE8F0816E701520287001 -:10AC700094F83201002889D084F83261D4F8340184 -:10AC8000C5F80200B4F83801E88094F832010028D1 -:10AC9000F2D17BE7134A5061D17070472DE9F0473C -:10ACA0000446481E85B238BFBDE8F08704F10808A5 -:10ACB0000126DFF830904FF0080A0027B4F8D000E2 -:10ACC000401CA4F8D000B4F87C00401CA4F87C0020 -:10ACD0000AE000005C230200A1A201002FA50100F0 -:10ACE0005BA501000401002094F8690040B994F8C4 -:10ACF00063200023062104F1580004F052FCD8B16F -:10AD0000B4F87400401C80B2A4F87400B4F8761053 -:10AD100081422CBF0A1A0022A3885B1D934228BFE0 -:10AD200084F87A60884207D3A4F8747084F81261BA -:10AD300099F80300F0F7DEFF94F8860020B1B4F82C -:10AD40008200401CA4F8820094F88A0020B1B4F874 -:10AD50008800401CA4F8880094F8EC0040B994F8EE -:10AD600066200023012104F1580004F01AFC20B1F0 -:10AD7000B4F88000401CA4F8800094F863000C280C -:10AD800002D00D2820D067E0B4F85800411CB4F878 -:10AD9000FA00814260D1D4F8F400411C404607F02B -:10ADA00050F80221204604F034F9D4F8F400007879 -:10ADB000002808BFFFDF0121FF20FEF7E8FD84F82F -:10ADC000637084F8966047E0B4F85800411CD4F8EA -:10ADD000F000808881423FD1D4F83C0101780029FD -:10ADE00018BFFFDF22D12188C180D4F8F00041894B -:10ADF000D4F83C010181D4F8F0008189D4F83C01F9 -:10AE00004181D4F8F000C189D4F83C018181D4F8A3 -:10AE10003C010771D4F83C0180F800A0D4F83C0153 -:10AE20002188418099F80300F0F764FF0121204652 -:10AE300004F0EFF803212046FDF7ECF9D9F80800FB -:10AE4000D0F8F0000078022818BFFFDF0221FF20B1 -:10AE5000FEF79DFD84F86370B4F85800401C691E2D -:10AE6000A4F858008DB2BFF429AFBDE8F087FE4AC0 -:10AE7000C2E90601704770B50446B0F87C0094F84A -:10AE80006710002908BFC0F1020503D0B4F87E1096 -:10AE9000081A051F94F87A0040B194F86320002343 -:10AEA000092104F1580004F07CFBA0B1B4F87460EF -:10AEB00094F8690058B994F863200023062104F13E -:10AEC000580004F06EFB002808BF284603D0B4F8F1 -:10AED0007600801B001F8542C8BF0546002DD4BFE9 -:10AEE0000020A8B270BDF0B5DF4C83B0A06890F828 -:10AEF000C310FF2907BF6178002903B0F0BD90F8A7 -:10AF0000662000230121583004F04BFB00281CBFB1 -:10AF100003B0F0BDA06890F8EC1029B103B0022096 -:10AF2000BDE8F040FEF79ABC90F863200023194674 -:10AF3000583004F036FB48B1A06890F87A0028B188 -:10AF400003B01220BDE8F040FEF788BCA0680025E1 -:10AF500090F86320122A23D004DC032A47D0112A58 -:10AF600024D003E0182A3CD0242A4CD0002304210A -:10AF7000583004F016FB00281CBF03B0F0BDD4F815 -:10AF800008C0022701269CF864001A2800F01E81E0 -:10AF900041DC012873D002287FD0032863D03EE033 -:10AFA00003B00B20BDE8F040FEF758BCF8F7D5FD24 -:10AFB0000C283CBF03B0F0BDA0680821D0F8F00019 -:10AFC0001E30F8F7CBFD28B1A0680421B830F8F79F -:10AFD000C5FD00B9FFDF03B00320BDE8F040FEF778 -:10AFE0003DBC03B00620BDE8F040FEF737BC90F84A -:10AFF000C21080F8C4100720FEF730FCA06880F86B -:10B00000635003B0F0BD1820FEF728FCA068A0F83C -:10B01000825003B0F0BD1F2847D022287ED0DCF834 -:10B02000F0000178002900F010814088BCF8001081 -:10B03000884274D100239CF8632019460CF1580013 -:10B0400004F0AFFA00286AD0A068D0F8F0100978B0 -:10B05000022972D0032971D0042970D0052908BFB4 -:10B0600008206DD0F1E09CF8C1008CF8C4000720E6 -:10B07000FEF7F4FBA06800F0B0B900E00DE00C2092 -:10B08000FEF7ECFBA068A0F8885090F88E1041F015 -:10B09000010180F88E1000F0A0B91320FEF7DEFB4E -:10B0A000A068A0F8885000F098B99CF8FD0000282E -:10B0B0001CBF03B0F0BD9CF8FC0088B1BCF8FE00DA -:10B0C000ACF84000BCF80001ACF84200BCF802014A -:10B0D000ACF84400BCF80401ACF846008CF8FC5015 -:10B0E000FEF712FC0421A068FDF794F8A06890F820 -:10B0F0004E10012908BF80F84E7016D00288A0F8C3 -:10B100001621028EA0F81821828EA0F81A21428EF4 -:10B1100000F58671A0F81C21C08E01E011E094E0DA -:10B1200048820E72E078F0F7E5FD1520FEF796FBF9 -:10B13000A068A0F8885000F050B94CE051E071E0F0 -:10B1400058E09CF87B0058B18CF8E8508CF8E95036 -:10B150001820FEF783FBA068A0F8885003B0F0BD6C -:10B160009CF8070100281CBF03B0F0BD9CF8060145 -:10B17000002804BF03B0F0BDBCF84F10DCF8080194 -:10B18000ADF80410BCF85110ADF80010019904F0AE -:10B190007EFB9DF80020C1B28A4207BFA16881F8FA -:10B1A000E850A26882F8E8109DF80110C0F307206B -:10B1B000814219BFA16881F8E900A06880F8E950D0 -:10B1C000182003B0BDE8F040FEF748BB1120FEF7A1 -:10B1D00045FBA06801E190F8640004F0D5F9A0BB3C -:10B1E00008E090F8681041B190F86900002808BFA5 -:10B1F000FFDF0A20FEF732FB27E0F8F7AEFC0C2851 -:10B2000023D3A0680821D0F8F0001E30F8F7A6FC80 -:10B2100028B1A0680421B830F8F7A0FC00B9FFDF1E -:10B220000320E7E790F88E0010F0030F0DD10C20FB -:10B23000FEF714FBA068A0F8825080F8866090F8B2 -:10B240008E1041F0010180F88E10A06890F8C310B4 -:10B25000FF291CBF03B0F0BD90F8632000231946FE -:10B26000583004F09EF901E004010020002804BFDA -:10B2700003B0F0BDA06890F8F810E9B3A1690978AF -:10B28000D1BB90F8640004F07FF9A8BBA068B0F8C7 -:10B2900058100A2935D900F108010522E06906F0A5 -:10B2A000FFFB0028A06802BF80F8F85003B0F0BD93 -:10B2B000D0F8F400017869B1411C0522E06906F07C -:10B2C000EFFB00281CBF03B0F0BDA068D0F8F4006D -:10B2D000007830B9A068E169D0F8F400401C06F0AD -:10B2E000B0FDA068D0F8F4000178491C017001207D -:10B2F000FEF7B4FAA06800E003E080F8F85003B06D -:10B30000F0BDA06890F8FC1011B190F8FD1011B3D9 -:10B3100090F80611002904BF03B0F0BD90F80711A2 -:10B3200000291CBF03B0F0BD90F8640004F02CF9B4 -:10B3300000281CBF03B0F0BDA06890F8512090F821 -:10B340000811012A4DD0022A4ED0042A14BF082A1F -:10B3500004294BD05DE0B0F8FE10A0F84010B0F822 -:10B360000011A0F84210B0F80211A0F84410B0F893 -:10B370000411A0F8461080F8FC5090F864001E28D4 -:10B3800005D003B01420BDE8F040FEF767BAFEF721 -:10B39000BBFA0421A068FCF73DFFA06890F84E10AE -:10B3A000012908BF80F84E7013D00288A0F816213A -:10B3B000028EA0F81821828EA0F81A21428E00F584 -:10B3C0008671A0F81C21C08E48820E72E078F0F7DA -:10B3D00091FC1520FEF742FAA06880F8645003B093 -:10B3E000F0BD012915D101E0022912D190F85210C7 -:10B3F00090F80901012907D0022908D0042914BFB7 -:10B40000082904280BD004E0012802D107E0022813 -:10B4100005D003B01620BDE8F040FEF71FBA03B018 -:10B420000020BDE8F040FEF738BA70B5044690F849 -:10B43000630000250C2814D00D2818BF70BDB4F887 -:10B440005800D4F8F010401C8988884218BF70BD9D -:10B45000D4F83C01FE4E0178002918BFFFDF45D12A -:10B4600022E0B4F85800B4F8FA10401C884218BF23 -:10B4700070BDD4F8F400411C04F1080006F0E1FCB2 -:10B480000221204603F0C5FDD4F8F400007800281E -:10B4900008BFFFDF0121FF20FEF779FA84F863502F -:10B4A000012084F8960070BD2188C180D4F8F00096 -:10B4B000D4F83C1140890881D4F8F000D4F83C114C -:10B4C00080894881D4F8F000D4F83C11C089888183 -:10B4D000D4F83C010571D4F83C1108200870D4F868 -:10B4E0003C1120884880F078F0F704FC01212046C8 -:10B4F00003F08FFD03212046FCF78CFEB068D0F8E6 -:10B50000F0000078022818BFFFDF0221FF20FEF7BD -:10B510003EFA84F8635070BD70B5CD4CA16891F8C7 -:10B520006320162A11BF132A91F88C20002A627812 -:10B530001BBF02206070002A70BD81F8C00000258A -:10B5400081F88B5081F88650D1F8F0000988408846 -:10B55000884218BFFFDFA068D0F8F0000078032809 -:10B5600018BFFFDF0321FF20FEF711FAA068D0F813 -:10B570003C110A78002A18BFFFDF19D10288CA805F -:10B58000D0F83C2190F8C0101171D0F83C110D7228 -:10B59000D0F83C210C211170D0F83C210188518059 -:10B5A0000088F5F765FBF4F7C5FFE078F0F7A2FB3C -:10B5B000A06880F8635070BD10B5A54C207910F0DC -:10B5C000020F08BF10BD6078002818BF10BDE068EA -:10B5D000C078192880F06981DFE800F05F4F0D8F97 -:10B5E000F8F8A6223FF86F83B1F8F8F8F8F7E3E02F -:10B5F000F9F5F4F8F300A0680023012190F8662023 -:10B60000583003F0CEFF002818BF10BD0821A068F5 -:10B6100080F86610002180F8861080F88A1010BD2E -:10B62000A0680023194690F86420583003F0B9FF51 -:10B6300018B1A168002081F88A00A068002319468B -:10B6400090F86320583003F0ACFF002808BF10BD0D -:10B650000020A16881F8860010BDA068002319466B -:10B6600090F86320583003F09CFF002808BFFFDFEC -:10B670000420A16881F8630010BDA068002319466A -:10B6800090F86320583003F08CFF002808BFFFDFDC -:10B690000C20A16881F8630010BDA0680023194642 -:10B6A00090F86320583003F07CFF002808BFFFDFCC -:10B6B0000D20A16881F8630010BDA0680023194621 -:10B6C00090F86320583003F06CFF002808BFFFDFBC -:10B6D0000121A06880F88B105FF00F0180F86310E3 -:10B6E00010BDA06890F86300122818BFFFDF012189 -:10B6F000A06880F88C101121F0E7A068002319469B -:10B7000090F86320583003F04CFF28B9A06890F8F7 -:10B710008C00002808BFFFDF0121A06880F88B1093 -:10B72000132180F8631010BDA06890F863001828FA -:10B7300018BFFFDF1B20A16881F8630010BDA0685F -:10B74000D0F8F01003884A889A4204BF0978042987 -:10B7500019D190F8632000231946583003F021FFD7 -:10B76000002808BFFFDFA06890F88E1011F0020FCC -:10B7700004BF012180F8631005D0002180F88610F5 -:10B78000D0F8F0000170A0680023194690F86420FA -:10B79000583003F006FF002808BF10BD0020A16844 -:10B7A00080E0A0680023194690F86320583003F029 -:10B7B000F8FE002808BFFFDF0520A16881F86300BC -:10B7C00010BD30E01FE012E001E067E06DE0A0682E -:10B7D0000023194690F86320583003F0E2FE002859 -:10B7E00008BFFFDF1D20A16881F86300E8E7A068BB -:10B7F0000023194690F86420583003F0D2FE002848 -:10B8000008BFFFDFCAE7A0680023194690F863204D -:10B81000583003F0C6FE002808BFFFDF2020A168D3 -:10B8200081F86300CCE7A06890F8641022291DD04D -:10B8300090F86310242918BFFFDFC1D190F8E810F9 -:10B84000002906BF90F8E9100029252102E0000038 -:10B850000401002018BF80F863107FF4F9AE0021C6 -:10B8600080F863100846FEF718F8F1E690F8E81043 -:10B87000002907BF90F8E9100029252180F86410FD -:10B880008CD1002180F8641080F87B1090F80601BC -:10B8900000281CBF0020FEF700F87FE7A168002009 -:10B8A00081F8640081F88A008AE7FFDF88E70000FA -:10B8B00070B5FC4CE1680A88A1F8E62181F8E40142 -:10B8C00091F85100012808BF012508D0022808BFBF -:10B8D000022504D0042816BF08280325FFDFE068EE -:10B8E00080F8E85190F85200012808BF012508D0DF -:10B8F000022808BF022504D0042816BF0828032503 -:10B90000FFDFE068012180F8E95180F8E2110021B1 -:10B9100080F89211E078BDE87040F0F7EBB9F0B430 -:10B92000E048C06890F84E30478EC68E458FB0F81C -:10B930004010C28FB0F842C0022B1FD08D4238BFDA -:10B9400029460186624528BF62468286018FB0F88B -:10B950004430994238BF0B464386818FB0F8464049 -:10B96000A14238BF0C46C486BB4228BF1F4647864B -:10B97000B44228BF2646C686F0BC7047038E9D425F -:10B9800028BF1D46838E9A4228BF1A46A94298BFF7 -:10B990000D460586944598BF62468286002180F850 -:10B9A0004E10D3E72DE9F04FBE4C83B0207910F054 -:10B9B000010F04BF03B0BDE8F08F606901230521CA -:10B9C000C578E06890F86420583003F0EAFD00285C -:10B9D00018BF022D0BD00A2D18BF0B2D07D0032D39 -:10B9E00018BF062D03D0607840F0080060706078C2 -:10B9F00000281CBF03B0BDE8F08F60690227012654 -:10BA000090F8038000254FF02009B8F1000F1CBF0B -:10BA1000B8F1010FB8F1160F1FD1E06890F863007C -:10BA200003F0B2FDC8B1E16891F86300202814D09A -:10BA3000212808D0B8F1160F0CBF84F80190677068 -:10BA400003B0BDE8F08F262081F86300B8F1160F2F -:10BA500000F0AE822A20FFF72BFFB8F1190F80F01B -:10BA6000E282DFE808F046230DC1FEFEFDFCFBFE8E -:10BA700091B8FAFEFEFEFEF9F8F7F6F5F4FEF300D3 -:10BA8000E0680123194690F86620583003F089FDDC -:10BA9000002840F04D84606904F0EEF9E16881F817 -:10BAA0006801072081F8660000F042BCE0680123CD -:10BAB000002190F86420583003F073FD002800F056 -:10BAC000F083606904F0D3F9E168A1F87C01B1F872 -:10BAD0005820801A00B247F6FE728242A8BF0028A2 -:10BAE0004BDD01F5BF71606904F0B8F90B20E16826 -:10BAF0003FE0E0680123002190F86420583003F013 -:10BB000050FD002800F0CD83606904F083F900281F -:10BB100000F08982606904F07AF9E168A1F87C019B -:10BB2000B1F85820801A00B247F6FE728242A8BFD0 -:10BB3000002822DD606904F064F9E16881F87E0183 -:10BB4000606904F059F9E168A1F88001606904F0C6 -:10BB50003EF9E168A1F88201606904F03FF9E1680B -:10BB6000A1F88401606904F040F9E168A1F8860158 -:10BB70000D2081F8640000F0DBBB282081F8730001 -:10BB800081F8726000F0D4BBE0680123002190F8D6 -:10BB90006420583003F005FD0028E0680CD0A0F8C0 -:10BBA000885090F88A10491C80F88A105FF01001C4 -:10BBB00080F8641000F0BCBB90F8642001230521DC -:10BBC000583003F0EEFC00281CBF0820607040F0E5 -:10BBD000AF8300F066BBE06890F86410112908BFDD -:10BBE000122140F09282E3E7E0680123002190F8FF -:10BBF0006420583003F0D5FC80B9E06890F86420E8 -:10BC0000122A0BD001230521583003F0CAFC00286A -:10BC100018BF082000F0458300F0C7B9E06890F82D -:10BC20008C1031B9A0F8885090F88A10491C80F81F -:10BC30008A1000F1E001606904F037F9E06800F172 -:10BC4000B801606904F03CF9E0680BE01BE2AFE189 -:10BC500059E1F1E0CFE0DBE0EAE23AE0A2E0FFE226 -:10BC600022E072E190F8AA01002818BFFFDFE06827 -:10BC70000188A0F8AC1100F5D771606904F003F9F0 -:10BC8000E06800F5DB71606904F005F9E06880F8B0 -:10BC9000AA61142180F86410E078F0F72BF800F026 -:10BCA00047BB000024010020E06890F864101729C9 -:10BCB00040F02B8290F88A10491E49B280F88A1011 -:10BCC0000029B8BFFFDF1C20E16881F8640000F0A4 -:10BCD0002FBBE06890F8651011F0020F09D090F8C2 -:10BCE000632001230821583003F05BFC002800F09A -:10BCF000D882E06890F88E0010F0020F17D16069CA -:10BD000004F0FCF8E16881F88F00606904F0F8F84D -:10BD1000E168A1F89000606904F0F5F8E168A1F825 -:10BD2000920091F88E0040F0020081F88E00E068E9 -:10BD300090F88E1011F0010F05D0E06890F86310B4 -:10BD400006291CD114E090F8650010F0020F18BF0E -:10BD5000FFDFE06890F8651041F0020180F865109F -:10BD6000A0F8885090F88A10491C80F88A10E4E7FF -:10BD700080F8635080F88650E078EFF7BBFFE0680A -:10BD800090F87A11042940F0D38280F87A51E07853 -:10BD9000EFF7B0FFE06890F86310002940F0C88228 -:10BDA00000F043BAE06890F8650010F0010F7BD115 -:10BDB0006946606904F0B7F8E0689DF8002090F8E3 -:10BDC0009410114001F02F0180F8941090F8951014 -:10BDD0009DF80120114001F0410180F89510A0F874 -:10BDE000885090F88A10491C80F88A1090F86510E5 -:10BDF00041F001011CE0E0680123092190F8632073 -:10BE0000583003F0CEFB002800F04B8200F041BA1E -:10BE1000E06890F8651011F0040F40F04282A0F83D -:10BE2000885090F88A2041F00401521C80F88A2042 -:10BE300080F8651000F07CBAE06890F8650010F0BA -:10BE4000300F31D1606904F08BF800287DD0606933 -:10BE500004F082F8E1680887606904F079F8E16825 -:10BE60004887606904F07AF8E1688887606904F0BF -:10BE700071F8E168C887207910F0020F03D02069BB -:10BE8000C078142811D091F863001D280DD091F8C6 -:10BE90004E0001280BD091F88901002804BF91F8C9 -:10BEA000880100280AD002E074E081F84E6091F821 -:10BEB000650040F0100081F865001AE091F8650017 -:10BEC00040F0200081F865000A88A1F8CA210A8F95 -:10BED000A1F8CC214A8FA1F8CE218A8F01F5CB7031 -:10BEE000A1F8D021C98F818780F83260E078EFF720 -:10BEF00001FFE068A0F8885090F88A10491C80F88B -:10BF00008A1000F015BAE06801230A2190F8632036 -:10BF1000583003F046FBE8B3606904F021F8B8B18B -:10BF2000606904F019F8E1680887606904F010F8A6 -:10BF3000E1684887606904F011F8E1688887606902 -:10BF400004F008F8E168C88700E06CE0FFF7E7FC60 -:10BF5000E068052180F8865080F86350FDF7FBFA11 -:10BF6000E06890F84E10012908BF80F84E7000F08C -:10BF7000DF810288A0F8BE21028EA0F8C021828E47 -:10BF8000A0F8C221428E00F5CB71A0F8C421C08E6A -:10BF9000088600E006E081F82660E078EFF7AAFE68 -:10BFA00000F0C6B9607840F00100607000F0C0B9E0 -:10BFB000E06801230B2190F86420583003F0F1FA77 -:10BFC00020B100BF84F8019000F0B2B9E06801230D -:10BFD000002190F86420583003F0E3FA002800F0C4 -:10BFE0006081E06890F863002528EBD0606903F079 -:10BFF000DAFFC0B1606903F0D4FFE16800F0070028 -:10C0000081F85000606903F0C8FF00F00701E068A4 -:10C0100080F84F1090F89321002A04BF90F89221E5 -:10C02000002A04D022E001F0DEF900F081B990F896 -:10C0300052C090F8503000F151028C4502BF117887 -:10C04000994280F87B6011D000F5CB7180F8DC61FB -:10C050000288A0F8DE2190F84F2080F8E02190F8C7 -:10C06000500081F84B00E078EFF744FEE0682221B1 -:10C0700080F86410A0F8885090F88A10491C80F865 -:10C080008A1000F055B9E06890F8631021290CBFC0 -:10C090004FF001084FF0000890F86410232908BF02 -:10C0A00000F1640705D0B8F1000F18BF00F1630775 -:10C0B0002BD0606903F099FFF0B3D4F81490484690 -:10C0C00003F087FF0090484603F087FF8146E06851 -:10C0D00090F89211002907BF4FF0000BDA4690F854 -:10C0E00094B190F895A1484603F05AFBB0B1E268CC -:10C0F00092F85110814211D019EA0B0F41D0B8F1DA -:10C10000000F08BF012802D008E0677010E1022983 -:10C1100004BF92F8500010EA090F32D0009803F0E3 -:10C120003FFB68B1009803F03BFBE16891F85210C7 -:10C13000884205D0009800E023E010EA0A0F20D0E2 -:10C140006A466169E06803F03AFBD8B3606903F0BE -:10C150004AFFE168A1F87C01B1F85820801A00B2CA -:10C1600047F6FE728242A8BF00284ADD9DF8000013 -:10C1700081F87E019DF8010081F87F01252038704B -:10C1800044E0E06890F8920100281CBF1E20FFF7F1 -:10C190008FFBB8F1000F16D0606903F012FEE16862 -:10C1A00081F8C20006FA00F010F0807F08BFFFDFC0 -:10C1B0000A21E06880F8631090F88600002808BF24 -:10C1C000FFDF0DE010E03D70E16891F88A00401E4D -:10C1D00040B281F88A000028B8BFFFDF01F003F900 -:10C1E000E06880F87B50A3E0E06890F892010028B6 -:10C1F0001CBF0020FFF75CFB3D70E06880F87B50BF -:10C2000004E0282081F8730081F87260E06800F192 -:10C2100064018F4209D190F88A10491E49B280F812 -:10C220008A100029B8BFFFDF82E080F886507FE0E7 -:10C23000606903F0F6FE16287AD1E06890F8630092 -:10C24000212802D0262805D072E0606903F0EDFEB7 -:10C25000FFF72EFBE06880F8635080F8865067E0B7 -:10C26000E06890F863000E2804D1606903F054FE82 -:10C27000122805D0E06890F863001D2818D112E05C -:10C28000E0680123092190F86320583003F089F910 -:10C2900038B1E06880F87A5080F8865080F86350B2 -:10C2A00046E0667044E0606903F036FE142805D06D -:10C2B000E06890F8630021282BD125E0E068052193 -:10C2C00080F8635080F88650FDF745F9E16891F8F1 -:10C2D0004E00012808BF81F84E7029D00A88A1F8C5 -:10C2E000BE210A8EA1F8C0218A8EA1F8C2214A8EF1 -:10C2F00001F5CB70A1F8C421C98E018680F82660B3 -:10C30000E078EFF7F7FC13E0606903F005FE16280C -:10C3100005D0606903F000FE172809D113E0E0683A -:10C3200080F8635080F886505FF01A00FFF7C0FA7B -:10C33000E068D0E928134A1C43F10001C0E9282134 -:10C3400003B0BDE8F08FE06890F864102329EFD1C6 -:10C3500080F8645090F88A10491E49B280F88A101B -:10C360000029B8BFFFDFE06880F87B5090F89201A9 -:10C37000002818BF0020DBD0D8E770B5F84E05467E -:10C380000C46F06890F8C300FF2818BFFFDFF26882 -:10C390000020002C82F8C3501CBFA2F8880070BD9A -:10C3A000A2F88200012082F8860070BD10B584B02A -:10C3B00004466846F9F772F8002808BFFFDF0098C6 -:10C3C00003F03DFC0321009803F050FC0098017835 -:10C3D00021F010010170214603F0C5FCA01E1628B3 -:10C3E00073D2DFE800F00BAA4EABAB13AA5CAAAB8A -:10C3F0001B2CAAAAAAAAABAB31734B8DD848C06834 -:10C4000090F8C410009803F035FD97E0D448C06858 -:10C4100090F8C410009803F07DFD8FE0D04CA06828 -:10C420000178009803F060FDA0688188009803F00F -:10C430005DFDA0684188009803F05CFD7EE0062168 -:10C44000009803F063FD79E0C54CE068B0F8441053 -:10C45000009803F06DFDE068B0F84610009803F016 -:10C460006BFDE068B0F84010009803F069FDE068EB -:10C47000B0F84210009803F067FD5FE0B84CE06848 -:10C4800043E0B74CE06800F1E801009803F01CFDC0 -:10C49000E06800F1BC01009803F020FD4EE00020B0 -:10C4A00002900390AE48C06890F8941001F0F50136 -:10C4B0008DF8081090F8950002A900F041008DF861 -:10C4C0000900009803F05DFD38E036E0A44CE06818 -:10C4D000B0F84010009803F033FDE068B0F8421067 -:10C4E000009803F031FDE068B0F84410009803F0C4 -:10C4F0001FFDE068B0F84610009803F01DFD1DE038 -:10C50000974CE06890F8921159B190F89411009806 -:10C5100003F041FDE06890F89511009803F03FFDAD -:10C520000CE090F85110009803F035FDE06890F8A9 -:10C530005210009803F033FD00E0FFDFF8F7C1FF71 -:10C54000002808BFFFDF04B010BD70B50C460546DB -:10C550004FF4F871204605F068FB258070BDF4F7B4 -:10C560005EBB2DE9F0410D4607460721F4F776FA48 -:10C57000040008BFBDE8F08194F896010026C8B118 -:10C580006E700820287094F8960188B1268484F88B -:10C590009661D4F89801C5F80200D4F89C01C5F85A -:10C5A0000600B4F8A001688194F896010028EDD146 -:10C5B000AE7044E094F8A201002837D094F8A201AC -:10C5C0000C2818D00D2818BFFFDF38D12088F4F7C9 -:10C5D0004FFB0746F3F7C4FFA0B96E700D2028701B -:10C5E00094F8A401A8702088A88084F8A261384635 -:10C5F000F3F7B0FF23E02088F4F73AFB0746F3F7A0 -:10C60000AFFF10B10020BDE8F0816E700C202870E3 -:10C6100094F8A401A8702088A88094F8A801A871B3 -:10C6200084F8A2613846F3F795FF08E094F8DA0140 -:10C6300040B16E700F20287084F8DA616F8001209D -:10C64000BDE8F08194F8AA0180B16E7009202870CD -:10C6500020886880D4F8AE01D4F8B2116860A9606F -:10C66000B4F8B601A88184F8AA61E8E794F8B801A3 -:10C6700040B16E7017202870B4F8BA01688084F851 -:10C68000B861DCE794F8D40188B16E701820287086 -:10C6900094F8D4010028D2D084F8D461D4F8D6011B -:10C6A000C5F8020094F8D4010028F5D1C7E794F842 -:10C6B000BC01C8B16E701420287094F8BC01002829 -:10C6C000BDD000BF84F8BC61D4F8BE01C5F802003B -:10C6D000D4F8C201C5F80600B4F8C601688194F820 -:10C6E000BC010028EED1AAE794F8C80180B16E70B1 -:10C6F0001A20287084F8C861D4F8CA01C5F802006D -:10C70000D4F8CE01C5F80600B4F8D201688196E7E6 -:10C7100094F8DC0140B11B20287084F8DC61D4F867 -:10C72000DE01C5F802008AE794F8E201002808BF9C -:10C73000BDE8F0816E701520287094F8E2010028A1 -:10C740003FF47DAF84F8E261D4F8E401C5F802005B -:10C75000B4F8E801E88094F8E2010028F2D16EE72D -:10C7600024010020FA4A9060D1707047002180F8BF -:10C77000631080F8641080F8671090F8D61011B13B -:10C780000221FCF7E8BE0321FCF7E5BE2DE9F047E6 -:10C79000EF4C81460D46E0680088F4F77BFA06000E -:10C7A00008BFFFDF60782843607020794FF00005F4 -:10C7B00010F0200FE0681CBFA0F87C5080F8DC501F -:10C7C00004D1B0F87C10491CA0F87C10E068012767 -:10C7D00090F8691039B990F8642001230621583087 -:10C7E00002F0DFFE48B3A08810F4006F07D0E068C5 -:10C7F00090F86910002918BFA0F874501DD1E068A6 -:10C80000B0F87410491C89B2A0F87410B0F87630F2 -:10C810008B422CBF5A1A0022B4F806C00CF1050C4A -:10C82000624598BF80F87A70994206D3A0F8745098 -:10C8300080F8DA71E078EFF75DFA20794FF0020ABC -:10C8400010F0600F11D0E06890F8671011B1032963 -:10C8500006D00AE080F867700121FCF77CFE04E056 -:10C8600080F867A00121FCF776FEE06890F8671079 -:10C87000012905D1A18811F4807F18BF80F867A035 -:10C880004FF00808B9F1000F40F03281A18811F48F -:10C89000007F18BFA0F8F05004D1B0F8F020521C6F -:10C8A000A0F8F02011F0080F47D06178002944D19A -:10C8B00090F8C300FF2808BFFFDFFF21E06880F881 -:10C8C000C31090F86410192905D0E06890F863103F -:10C8D00020290FD028E080F88B5090F88A10491E4C -:10C8E00049B280F88A100029B8BFFFDFE06880F8FD -:10C8F0006450EAE790F8640002F046FE80B1E06818 -:10C900002621012380F8631090F864200B21583011 -:10C9100002F047FE002804BF2A20FEF7C9FF03E00B -:10C92000E168212081F86300E06890F8661008292A -:10C9300004BF84F800A080F86650FFF733F8207930 -:10C9400010F0040F09D0607838B9E06890F86610EC -:10C95000072904BF277080F8665000F0C5FB2079D6 -:10C9600010F0100F09D0607838B9E06890F86410C2 -:10C970000B2904BF0C2180F86410A07810F0080F78 -:10C9800011D0E0680123052190F86420583002F0AE -:10C9900008FE28B184F80180E06880F8A25102E026 -:10C9A000002001F07CFA00F03CFD01F06EFA002856 -:10C9B000E06818BFA0F8D05004D1B0F8D010491CDE -:10C9C000A0F8D01001F064FA40B1E16891F8DC0001 -:10C9D00002289CBF401C81F8DC0004D8E06890F875 -:10C9E000DC00022806D9E068A0F8D050A0F8D250A8 -:10C9F00080F8DC50E0680123002190F86420583072 -:10CA000002F0CFFD20B9E06890F864000C2859D1FD -:10CA1000E0680123002190F86320583002F0C1FD46 -:10CA200000284FD0E0680123002190F8662058309C -:10CA300002F0B7FDF0B3E06890F86710022904BF78 -:10CA400090F8DC0000283DD13046F3F70FFB88B3A7 -:10CA5000E06890F8C310FF2934D1B0F8CA1001295A -:10CA600030D980F8D570B0F87E10B0F87C208B1EDD -:10CA70009A42AFBF0121891A491E89B2B0F8D0305D -:10CA8000E28893422FBF0122D21A521C92B29142E5 -:10CA900088BF1146012908BF80F8D55090F8612160 -:10CAA000A2B1B0F8D220B0F8620182422CBF0120BE -:10CAB000801A00E006E03CBF401C80B2814288BF83 -:10CAC000014603E0E068012180F8D550E068B0F845 -:10CAD0005820114489B2A0F8CC1090F86730002B90 -:10CAE00018BF012B5FD0022B1CBF032BFFDF09D027 -:10CAF000A088C0F340200028E06818BFA0F8DE50EE -:10CB00005BD153E090F86630082B23D0B0F87C104E -:10CB1000B0F87E2000268B1C9A4206D3511A891E3B -:10CB20000E04360C1CBF711E8EB290F87A1051B1F3 -:10CB300090F8632001230921583002F032FD0028CB -:10CB400008BF00262BD0E06890F8691099B90AE078 -:10CB500024010020B0F87C30032B24D3B0F87E10E1 -:10CB60001144491C1FE090F864200123062158302D -:10CB700002F017FD78B1E1680020B1F87620B1F835 -:10CB800074108B1C9A4203D3501A801E18BF401E8B -:10CB9000B04238BF86B2002E1CBF701E86B2E0685D -:10CBA000B0F8CC103144A0F8C810A1E7B0F8DE10FE -:10CBB000B0F8CE201144A0F8DE10E06890F86611BD -:10CBC00039B990F8662001231946583002F0E9FC83 -:10CBD00038B1E068B0F88010B0F8CE201144A0F869 -:10CBE0008010E06890F8863033B1B0F88210B0F869 -:10CBF000CE201144A0F8821090F98AC0BCF1000F39 -:10CC000006DDB0F88810B0F8CE201144A0F88810E6 -:10CC10003D22B9F1000F18BF80F873204DD1217863 -:10CC2000022910D0012908BF90F8681143D061781B -:10CC300039B380F8727011F0140F18BF1E210CD098 -:10CC400080F8731055E090F8C410062905BF90F8DD -:10CC5000C3100229162106212DE011F0080F18BF7C -:10CC600080F8732045D111F0200F18BF2321E7D1A0 -:10CC700011F0030F08BFFFDF2A20E16881F873007D -:10CC800033E02BB1B0F88210B0F88420914211D279 -:10CC9000BCF1000F05DDB0F88810B0F88420914297 -:10CCA00008D2B0F88020B0F87E108A4208D390F8FD -:10CCB00066212AB1222180F8731080F8727018E082 -:10CCC00090F867203AB1B0F87C208A4228BF80F8FB -:10CCD0007380F2D209E0B0F87C10062905D33E211A -:10CCE00080F8731080F8727003E0E06890F87210BA -:10CCF00079B1E06880F8635080F8645080F867503C -:10CD000090F8D610002914BF02210321FCF723FC60 -:10CD100002E00021FCF71FFCE06880F8D650BDE877 -:10CD2000F047F8F7F0BBF949024648788B7818438A -:10CD30000ED10846C0684AB1097911F0080F03D036 -:10CD400090F86600082803D001207047FCF74FBB1D -:10CD5000002070472DE9F041EC4C05460E46A088B6 -:10CD60002843A08015F0020F04D015F0010F18BF62 -:10CD7000FFDF266115F0010F4FF000084FF00107AB -:10CD80001CD03046666103F01CF8062802D00B2840 -:10CD90000BD013E0E06890F8641017290ED1002141 -:10CDA000C0E9261180F8687008E0E06890F8641027 -:10CDB000112904BF80F8688080F88C7015F0020F8C -:10CDC00018D02069C078052802D00B280BD011E0BC -:10CDD000E06890F8641015290CD10021C0E92811F1 -:10CDE00080F8697006E0E06890F86410102908BFC8 -:10CDF00080F8698015F0800F1CBF0820A070BDE886 -:10CE0000F0812DE9F84FC14C00254FF00108A580B5 -:10CE10006570A5702570E06068F30709074680F823 -:10CE2000D6800088F3F736FF5FEA000A08BFFFDF0D -:10CE3000E0680088F8F72FFBE0680088F8F751FBFE -:10CE4000E068B0F8CA1071B190F8C310FF290FD193 -:10CE500090F8661191B190F8662001231946583078 -:10CE600002F09FFB98B1E06890F8C300FF2805D05E -:10CE7000E06890F8C30000BFFFF798FAD4F80CC040 -:10CE80009CF8D700002818BFE5801ED10FE0E068AD -:10CE9000A0F8805090F8671180F8C410002102209B -:10CEA000FFF76BFAE06880F8D5500220E4E79CF8C1 -:10CEB000960138B9BCF82000BCF80410884288BF3D -:10CEC000E08002D8BCF80400E080BCF8CE00401E30 -:10CED00086B2BCF8D0003044ACF8D0009CF8D40046 -:10CEE00000281CBFACF8D2508CF8D45004D1BCF848 -:10CEF000D2003044ACF8D200BCF87C003044ACF82E -:10CF00007C009CF8690040B99CF86420012306214C -:10CF10000CF1580002F045FB28B1E068B0F874103D -:10CF20003144A0F87410E068B0F8CA1001299CBF21 -:10CF3000491CA0F8CA10002E18BF80F8DC5090F8E9 -:10CF4000D510A1B1B0F8D000E18888420FD2504688 -:10CF5000F3F78CF858B1E06890F8611139B1B0F886 -:10CF6000D210B0F86201814228BF00F094FFE2685D -:10CF700082F8D55092F864000B2818BF0C2817D1FE -:10CF8000B2F85810B2F87C31C91A09B200290FDB87 -:10CF900002F5BF7102F1080004F053FF0221E068BE -:10CFA00001F0FEFEE06880F8645080F8968048E06A -:10CFB000252824D1B2F85800B2F87C11401A00B2EA -:10CFC00000281CDB92F8921192F87E01002808BF1D -:10CFD00092F8510082F8510092F87F01002808BFB2 -:10CFE00092F8520082F8520000291CBF0020FEF780 -:10CFF0005FFCE06880F8645080F87B5021E092F894 -:10D00000630025281DD1B2F85800B2F87C11401AEF -:10D0100000B2002815DB92F87E01002808BF92F8C4 -:10D02000510082F8510092F87F01002808BF92F861 -:10D03000520082F852000020FEF73AFCE06880F8C7 -:10D040006350E16801F15800B1F8CE2002F0B3F866 -:10D05000E06890F86111002918BFA0F8D2502C4860 -:10D0600000902C4B2C4A3946484600F053FEE068AD -:10D070000123052190F86420583002F092FA00282C -:10D0800008BFBDE8F88FBDE8F84F00F014BC00F011 -:10D09000E1BE10B50446B0F882214388B0F884118F -:10D0A000B0F886019A4201BFA3889942E38898426A -:10D0B0000FD02388A4F89A31A4F89C21A4F89E11DB -:10D0C000A4F8A001012084F896011048C078EEF77A -:10D0D00011FE0121204601F063FE002084F8640067 -:10D0E000032084F8670010BD70B5084C207910F05B -:10D0F000020F08BF70BD6078002818BF70BD20699E -:10D10000C178891E162980F06C8107E02401002077 -:10D110008DC7010027CD010055CD0100DFE801F0EA -:10D120000BF969758B1BF942F95BBE80F9F9F9F9C6 -:10D13000FAF7F6F5F4F3E0680123194690F8662053 -:10D14000583002F02EFA002818BF70BD0820E168A0 -:10D1500081F8660070BD02F0DFFEE16891F863209F -:10D160000A2A04BF91F8C220824205D1002081F82A -:10D17000630081F8860070BD91F8650010F0080F1B -:10D1800004BFFFDF70BD20F0080081F8650091F852 -:10D190008A00401E40B281F88A000028A8BF70BDF6 -:10D1A00000F0D8B8E06890F8650010F0010F08BFF3 -:10D1B000FFDFE16891F88A00401E40B281F88A00E2 -:10D1C0000028B8BFFFDFE06890F8651021F001018A -:10D1D00080F8651070BDE06890F86400102818BFF2 -:10D1E000FFDF0121E06880F88B10112180F86410C6 -:10D1F00070BDE06890F86400142818BFFFDF0121BB -:10D20000E06880F88B101521F0E7E06890F8640082 -:10D21000152818BFFFDF1720E16881F8640070BD92 -:10D22000E06890F86400152818BFFFDF1920E16856 -:10D2300081F8640070BDE06890F864001C2818BF95 -:10D24000FFDF0025E06880F88B5090F8A2010028ED -:10D2500018BFFFDFE06890F88C1041B180F88C5067 -:10D260000188A0F8A61180F8A4510D2108E00188DA -:10D27000A0F8A61180F8A451012180F8A8110C2172 -:10D2800080F8A2110088F3F7F3FCF3F753F9E07884 -:10D29000EEF730FDE06880F8645070BDE06890F80B -:10D2A0007A11042915D0E06890F8651011F0020F8A -:10D2B00008BF70BD90F88A10491E49B280F88A10E4 -:10D2C0000029B8BFFFDFE06890F8651021F0020187 -:10D2D0007EE790F8632001230021583002F061F9C5 -:10D2E000002808BFFFDFE06890F88E1011F0020FF1 -:10D2F00007BF062180F86310002180F8861018BF50 -:10D3000080F87A11CFE760E04FE035E024E011E0EB -:10D3100000E066E0E0680123002190F863205830C7 -:10D3200002F03FF9002808BFFFDF0E20E16881F816 -:10D33000630070BDE06890F8651021F0040180F88A -:10D34000651090F88A10491E49B280F88A100029A9 -:10D35000A8BF70BDFFDF70BDE0680123002190F819 -:10D360006320583002F01DF9002808BFFFDF1D20A0 -:10D37000E16881F8630070BDE06890F8650000F036 -:10D380003000102818BFFFDFE06890F8651021F02A -:10D39000100180F8651090F88A10491E49B280F893 -:10D3A0008A100029A8BF70BDD4E7E06801230021DE -:10D3B00090F86320583002F0F4F8002808BFFFDF2F -:10D3C0002020E16881F8630070BDE06890F8640097 -:10D3D00022281CBF0028FFDF2320E16881F86400B9 -:10D3E00070BDFFDF70BD10B5FE4CE16891F86500BF -:10D3F00010F0080F1EBF0120607010BD40F0080043 -:10D4000081F86500606902F0DCFCE16881F8C10028 -:10D410000020A1F8880091F88A00401C81F88A0059 -:10D4200010BD2DE9F041EF4CE06890F8C310FF29E2 -:10D4300006BF61780029BDE8F08190F866200123DD -:10D440001946583002F0ADF8002818BFBDE8F08149 -:10D45000E068002790F8661159B1A0F8807090F844 -:10D46000671180F8C410BDE8F04100210220FEF7EA -:10D4700084BF90F8642001230421583002F091F811 -:10D480005FEA00084FF002054FF001060CD0D4F817 -:10D490000CC09CF8640010287ED014287DD015287C -:10D4A0007CD01C287BD0E1E0E16891F8650010F0A9 -:10D4B000010F05D0BDE8F04101210920FEF75DBF55 -:10D4C00010F0020F0CD001210C20FEF756FFE0688F -:10D4D00090F88E1041F0010180F88E10BDE8F081C7 -:10D4E00010F0040F05D0BDE8F04101211320FEF734 -:10D4F00044BF10F0080F09D091F8C10081F8C400B2 -:10D50000BDE8F04101210720FEF737BF10F0100FF2 -:10D5100002D091F8890120B191F8640022287DD1D0 -:10D520009BE091F8880188B1B1F88A01A1F8400028 -:10D53000B1F88C01A1F84200B1F88E01A1F84400C5 -:10D54000B1F89001A1F8460081F88871FEF7E7F97B -:10D550000521E068FBF7FFFFE06890F84E10012915 -:10D5600008BF80F84E5014D00288A0F8BE21028E69 -:10D57000A0F8C021828EA0F8C221428E00F5CB71A6 -:10D58000A0F8C421C08E088681F82660E078EEF706 -:10D59000B1FB0121152003E006E00BE023E056E09B -:10D5A000BDE8F041FEF7E9BEBDE8F04101210B20E6 -:10D5B000FEF7E3BEF6F7D1FA0C2838BFBDE8F081DC -:10D5C0000821E068E830F6F7C9FA28B1E0680421DC -:10D5D000BC30F6F7C3FA00B9FFDFBDE8F041012126 -:10D5E0000420FEF7CABE9CF86901012817D0022862 -:10D5F00018BFBDE8F0819CF88C0000281CBF0620F5 -:10D600008CF8C4004FF0010114BF02200D20FEF77A -:10D61000B4FEE06880F86971BDE8F08126E09CF80E -:10D62000A201002818BFBDE8F0810CF1A803002278 -:10D630000CF1E0010CF5B57001F03BFF0121052074 -:10D64000FEF79BFEE06880F86971BDE8F081BDE8F7 -:10D65000F04101210620FEF790BE91F87B00C0B991 -:10D6600091F8920110B191F8930190B1E068012313 -:10D67000002190F86320583001F093FFC8B1E068B2 -:10D680000123042190F86420583001F08AFF30B162 -:10D690000FE0BDE8F04101211720FEF76EBEE06803 -:10D6A00090F87A0028B1BDE8F04100211220FEF781 -:10D6B00064BEE06890F863200A2A4DD0B8F1000FEC -:10D6C00018BFBDE8F08101230021583001F069FF47 -:10D6D00048B1E06890F87A11042904BF90F88E00F0 -:10D6E00010F0030F42D0E0680123002190F863207E -:10D6F000583001F056FF002808BFBDE8F081E0680F -:10D7000090F8881111B190F88911E1B390F8921155 -:10D71000002908BFBDE8F08190F89311002918BFD7 -:10D72000BDE8F08190F8642001230B21583001F00E -:10D7300038FF002818BFBDE8F081E06890F851205C -:10D7400090F89411012A71D0022A73D0042A14BFD0 -:10D75000082A042970D082E090F8C21080F8C41022 -:10D76000BDE8F04100210720FEF707BE00210C2094 -:10D77000FEF703FEE06890F88E1041F0010180F89A -:10D780008E10BDE8F081FFE7B0F88A11A0F84010D4 -:10D79000B0F88C11A0F84210B0F88E11A0F8441027 -:10D7A000B0F89011A0F8461080F8887190F86500E4 -:10D7B00010F0200F34D0FEF7B2F80521E068FBF737 -:10D7C000CAFEE06890F84E10012908BF80F84E505C -:10D7D00017D00288A0F8BE21028E00F5CB71A0F808 -:10D7E000C02101E024010020828EA0F8C221428ED7 -:10D7F000A0F8C421C08E088681F82660E078EEF794 -:10D8000079FA01211520FEF7B8FDE06890F865105F -:10D8100021F0200141F0100180F86510BDE8F08191 -:10D82000BDE8F04100211420FEF7A7BD012916D163 -:10D8300002E0FFE7022912D190F8522090F89511EA -:10D84000012A07D0022A08D0042A14BF082A042972 -:10D8500022D004E0012902D11EE002291CD090F858 -:10D86000642001230321583001F09BFE002818BFDB -:10D87000BDE8F081E0680123022190F8642058306F -:10D8800001F08FFE002818BFBDE8F0810021BDE83F -:10D89000F0411620FEF771BDBDE8F0410020FEF713 -:10D8A00007B8000030B5FF4C05462078002818BFA7 -:10D8B000FFDFA57230BDFB49012048727047FA486E -:10D8C00000B502784168406801F1580C91F8633066 -:10D8D00090F85100252B1CBF9CF80CC0BCF1250F03 -:10D8E00017D0202B18BF212B38D0BCF1230F18BF25 -:10D8F00000BD002A08BF00BD91F8942191F8501096 -:10D90000114011F0010F44D0082818BF04284CD052 -:10D910004EE08AB191F87E11002908BF00BD0828A9 -:10D9200018BF042841D0082918BF04293DD0012878 -:10D9300018BF01293CD036E091F8E810002908BF53 -:10D9400000BD082818BF04282FD0082918BF0429B3 -:10D950002BD0012818BF01292AD024E0BCF1230FC5 -:10D96000C7D0002A08BF00BD91F8941111F0010F33 -:10D9700004D0082818BF042817D019E011F0020FAE -:10D9800008BF00BD082818BF04280ED001280FD0FA -:10D9900009E011F0020F08BF00BD082818BF0428D5 -:10D9A00003D0012804D0022000BDFFDF082000BD05 -:10D9B000012000BD2DE9F14FBB4E4FF0010831466B -:10D9C0006FF00E0A4F686FF00D0B97F85210F88E3B -:10D9D00002290CBF0AEB90000BEBD00085B2788EC9 -:10D9E000A84238BF0546AF4C2946606BF2F77AFB78 -:10D9F000DFF8B892E06200281DBF0021A170A0628C -:10DA000084F8028008BFC4F8289030787068014616 -:10DA100000F1580890F86930428E91F85210C08E8B -:10DA200002290CBF0AEB90000BEBD00080B28242BF -:10DA300038BF1046002B1CBF001D80B2F6F756FE03 -:10DA400098F81100002838D008F15001974891E863 -:10DA50000E1000F5027A8AE80E10D8F86010C0F8AF -:10DA60002112D8F86410C0F8251200F58170F7F77C -:10DA7000B6F9307800280CBF0120002080F00101A9 -:10DA80008B480176D8E91212C0E90412C4F8289034 -:10DA90004946A581A0F58372F6F71BFD97F8520061 -:10DAA000012808BF002104D002281ABFFFDF00218F -:10DAB00001210120F6F71BFD04E0A06AF7F78FF9BA -:10DAC000F6F738FD009848B9012297F852309621B0 -:10DAD0001046F7F741F89620F7F7A9F997F82C00C8 -:10DAE000012808BFF7F726FA02202070BDE8F88F5A -:10DAF0002DE9F04FDFF8B08183B0414681464E6892 -:10DB0000A1F11400009096F85D004FF0000A012783 -:10DB100006F15804A1F1380570B3012873D002282A -:10DB200075D0032818BFFFDF7FD0686A082201780C -:10DB300021F008010170A37902EAC302114321F028 -:10DB400004010170E279042303EA8202114321F007 -:10DB50001001017094F805B0286BF2F795FA82462F -:10DB6000F7F7E3FCBBF1020F66D0BBF1010F67D002 -:10DB7000BBF1030F68D06CE0B6F834B0FFF79FFE3E -:10DB8000022819BF6FF00D0000EBDB006FF00E00F4 -:10DB900000EB9B0081B2308E884238BF0146ADF861 -:10DBA0000810A6F84C100098F7F79EFC38B1696A87 -:10DBB000EF70AA694FF48060904703201EE001AA2D -:10DBC00002A9286BF2F743F9686210B194F8331098 -:10DBD00021B10098F7F75CFC6771A6E79DF8041087 -:10DBE00031B9A0F800A080F802A0012102F03EF8AF -:10DBF000BDF80810686A02F01AFA0220607194E712 -:10DC000001E004E011E00098F7F742FC8DE7B6F878 -:10DC10004C00ADF8000001AA6946286BF2F717F92D -:10DC20006862002808BFFFDF7FE70098F7F75CFC19 -:10DC3000002808BFFFDF78E730EA0A0009D106E0D4 -:10DC400030EA0A0005D102E0BAF1000F01D001214B -:10DC500000E00021686A027842EA01110170217C2B -:10DC600000291CBF617901293CD004F150010F4803 -:10DC700091E80E1000F5027A8AE80E10216EC0F8C5 -:10DC80002112616EC0F8251200F58170F7F7A7F830 -:10DC900098F8000000280CBF0121002104480176FB -:10DCA00008E000003C01002074010020C00E0020AC -:10DCB000C8100020D4E91012C0E90412A0F5837145 -:10DCC0006A6AF6F706FC96F85100012808BF0021A1 -:10DCD00004D002281ABFFFDF002101210020F6F73F -:10DCE00006FC03E0F7F77BF8F6F724FCB9F1000F28 -:10DCF00006D196F85130012296210020F6F72CFF2C -:10DD0000AF71686A018829828078A8742F7003B087 -:10DD1000BDE8F08F2DE9F0471E46174681460C46B8 -:10DD2000FE4DDDF82080287828B9002F1CBF002E7A -:10DD3000B8F1000F00D1FFDFC5F82080C5E90E94CF -:10DD4000C5E9067600206872287268712871A8718A -:10DD5000E871F34EE870E881307804F158072088C4 -:10DD6000F2F798FF28632088F2F782FF6863F7F7DD -:10DD70002BF8F6F7DBFC04F11200F7F70EF804F1CC -:10DD80000E00F6F774FD307800280CBF0320012048 -:10DD9000F7F717F8787EF6F772FDF7F70CF830789A -:10DDA0006FF00E056FF00D09002830D0618EE08E07 -:10DDB00094F852407A7C022C0CBF05EB900009EBE2 -:10DDC000D00080B2814238BF0846002A1CBF001D27 -:10DDD00080B22146F6F78AFC3078002831D070688E -:10DDE00090F86001002818BFF6F7F2FC22460021E7 -:10DDF0000120F6F76DFE7068D0F8D800F6F7F2FF54 -:10DE00000120FFF7D7FDBDE8F047F6F7E5BF97F82B -:10DE10001080278EB4F834A0FFF751FD022814BFFC -:10DE200009EBDA0005EB9A0085B2AF4234BF384601 -:10DE30002846B8F1000F1CBF001D80B294F8514075 -:10DE4000C7E7002122460846F6F742FE0120FFF709 -:10DE50004FFED8E7B24810B501783838007831B1B4 -:10DE6000022818BFFFDFBDE81040F6F7ADBF01285C -:10DE700018BFFFDFF7E7A94810B50078022818BFE0 -:10DE8000FFDFBDE8104000F044BAA4488079704735 -:10DE9000A24840797047A1490120C87170472DE917 -:10DEA000F04706009E489D4D4FF0010740684FF037 -:10DEB000000800F15804A86A90F8019018BF012EDC -:10DEC00003D1696B03F0D0FA68706878A0B10128BB -:10DED00031D0022849D003281CBFFFDFBDE8F087FE -:10DEE000012E08BFBDE8F087686BF2F70CFBA87A3B -:10DEF000BDE8F047EDF7FEBE012E08D001224946ED -:10DF0000686BF2F74DF9022E08BFBDE8F087D4E93F -:10DF10001202411C42F10000C4E91210E07901280C -:10DF200003D100BF84F8078000E0E771A87ABDE85C -:10DF3000F047EDF7DFBE012E08D000224946686B9E -:10DF4000F2F72EF9022E08BFBDE8F087D4E91201DE -:10DF5000401C41F10001C4E91201E07901280CBF25 -:10DF600084F80780E771BDE8F087012E06D0686B62 -:10DF7000F2F7C9FA022E08BFBDE8F087D4E9120112 -:10DF8000401C41F10001C4E91201E0790128CCD123 -:10DF9000C8E72DE9F041624F4FF000083846A7F17D -:10DFA00038044068012600F158052078012818BF80 -:10DFB000FFDFA87850B185F80280E670A26941467B -:10DFC000042090473878002818BF2E71606A03211A -:10DFD000007831EA000004BFE878002805D1EE702F -:10DFE000616AE670A269022090470121002000F0DA -:10DFF000B1F918B1BDE8F04100F08BB9BDE8F041CE -:10E000000020D7E42DE9F84F454C83462046A4F183 -:10E0100038054068217800F1580A287800264FF02A -:10E020000109022818BFFFDFE88940F40070E88189 -:10E030002078676800283A48406890F868000090A7 -:10E040003C8EB7F83480FFF73AFC022807BF6FF028 -:10E050000E0000EB98006FF00D0000EBD80080B2CE -:10E06000844238BF2046009900291CBF001D80B2A1 -:10E0700097F85110F6F73AFB9AF81100BBF1000F30 -:10E0800000F0FA80F6F77CFAF6F76AFA90B99AF897 -:10E09000110078B1A86A417861B100789AF8071048 -:10E0A000C0F3C000884205D185F80490BDE8F84F60 -:10E0B00000F02FB9A86A1A4FB0460188A5F81310CE -:10E0C00080786875E88940F02000E8816E713878C2 -:10E0D0007868583000907C6894F82C00012818D19A -:10E0E000F6F71EFF2046009901F023FA88B1387830 -:10E0F000002878680CBF00F5867000F5EA7021886A -:10E1000041800099097A017180F80090A87AEDF7B2 -:10E11000F1FDA86A0078C0F3800003E03C01002014 -:10E12000740100209AF80610884237D03878786851 -:10E1300000F1580490F85D0060B3022848D000BF99 -:10E1400084F80580387840B12079414628B12171A2 -:10E1500085F80390AA6910209047E07898B184F878 -:10E160000380F7F7D0F9002808BFFFDF082085F803 -:10E170000390AA6900219047D4E91002411C42F1A2 -:10E180000000C4E91010A07901280CBF84F80680B3 -:10E1900084F80690E88940F48070E881A86A9AF8CB -:10E1A00007300178C1F3C0029A4252D13A787A68B6 -:10E1B00001F0030102F15804012918BF022935D0EA -:10E1C00003291CBF287A40F0040012D0287240E0D6 -:10E1D000286BF1F776FE002808BFFFDFD4E91002B4 -:10E1E000411C42F10000C4E91010A87AEDF782FD4D -:10E1F000A6E701F05CFDA8B184F80290E9894846E1 -:10E2000041F40061E981A96A85F80390AA69904701 -:10E21000E079012803D100BF84F8078019E084F871 -:10E22000079016E0287A40F01000CFE74078F8B168 -:10E23000E98941F40061E981A97851B9FB28F1D855 -:10E24000687A002808BF4E4603D08020AA690021C2 -:10E2500090475946012000F07DF858B39AF8110014 -:10E26000002818BFBBF1000F1BD0A87868B118E0D8 -:10E27000E0790128D3D1CFE7002818BFF6F7B9F924 -:10E28000E88940F04000E881E3E7A96AAA89487874 -:10E29000904288BF1046C21CE86A03F02DFCE86A71 -:10E2A000A862002E1CBF0020FFF7F9FDBDE8F84F63 -:10E2B00000F02FB8002E1CBF0120FFF7F0FD00205A -:10E2C000FFF716FC9AF81100002818BFBBF1000FE9 -:10E2D0000DD0A87858B9A96AAA894878904288BF11 -:10E2E0001046C21CE86A03F007FCE86AA862002E28 -:10E2F00008BFBDE8F88F0220BDE8F84FCFE5354AEA -:10E300001378526892F851200BB1FBF76ABAFAF70A -:10E310001AB970B52F4900254C68F6F7B7FDF6F726 -:10E32000A9FDF6F7DBFCF6F73EFDF6F703F9F6F785 -:10E3300053FD94F82C00012808BFF6F7F1FD264C98 -:10E340000021A269E0899047226A217A20799047CA -:10E35000257070BD70B5204C0546002908BF012D01 -:10E3600005D16079401CC0B26071012830D8E169E4 -:10E370002846884700282BD0E179184839B1012D6B -:10E3800001BF41780029017811F0100F20D0217AC7 -:10E39000F1B910490978002918BF002102D029439A -:10E3A00004D013E0012D18BF0121F8D10C490978E0 -:10E3B00011F0100F04BF007810F0100F08D0E078B3 -:10E3C00030B9A07810B111F0100F01D0002070BD4D -:10E3D000012070BD740100203C0100204F0100208D -:10E3E0004C01002010B540F2C311F94803F0FBFBCB -:10E3F000FF220821F748E4F7FAFDF74800214170B1 -:10E400004FF46171418010BD2DE9F0410F46064681 -:10E4100000F03FFBEE4C102817D004EBC00191F840 -:10E420004A1111F0010F1CBF0120BDE8F081617895 -:10E4300008291FD2617804EBC000491C61700121DA -:10E4400080F84A110846BDE8F0816178082911D2A8 -:10E450002578681C207004EBC5083868C8F84401AA -:10E46000B888A8F84801102D28BFFFDF88F843615D -:10E470002846DFE70020BDE8F081D5480178491E35 -:10E480004BB2002BB8BF704770B4002500EBC3013E -:10E4900091F84A1111F0010F3BD04278D9B2521EC7 -:10E4A000427000EBC10282F84A5190F802C000228B -:10E4B000BCF1000F0BD9841894F803618E4202D18D -:10E4C000102A26D103E0521CD2B29445F3D8027828 -:10E4D000521ED2B202708A421BD000EBC20200EB85 -:10E4E000C10CD2F84341CCF84341D2F84721CCF8D3 -:10E4F0004721847890F800C00022002C09D98618A2 -:10E5000096F8036166450AD1102A1CBF024482F8BE -:10E510000311591E4BB2002BB8DA70BC7047521C65 -:10E52000D2B29442EBD8F4E72DE9F0471F4690466B -:10E530000E46814600F0ADFAA54C0546102830D0B5 -:10E54000A2780021002A0ED9631893F80331834280 -:10E5500005D110291CBF1220BDE8F08703E0491C3B -:10E56000C9B28A42F0D8082A2FD2102D1CD0A67822 -:10E570001022701CA07004EB061909F1030041463B -:10E5800000F086FF09F183001022394600F080FF79 -:10E59000A019002180F8035180F83B110846BDE81E -:10E5A000F087A278082A10D22578681C207004EB26 -:10E5B000C50A3068CAF84401B088AAF84801102D8D -:10E5C00028BFFFDF8AF84391D1E70720BDE8F08735 -:10E5D00070B47F488178491E4BB2002BBCBF70BC21 -:10E5E000704700BF817803F0FF0C491ECAB28270E9 -:10E5F00050FA83F191F8031194453ED000EB0215D7 -:10E6000000EB0C14D5F80360C4F80360D5F807607C -:10E61000C4F80760D5F80B60C4F80B60D5F80F603C -:10E62000C4F80F60D5F88360C4F88360D5F88760BC -:10E63000C4F88760D5F88B60C4F88B60D5F88F502C -:10E64000C4F88F50851800EB0C0402EB420295F8D9 -:10E6500003610CEB4C0C00EB420284F8036100EB0D -:10E660004C0CD2F80B61CCF80B61B2F80F21ACF86E -:10E670000F2195F83B2184F83B2100EBC10292F871 -:10E680004A2112F0010F33D190F802C00022BCF1F0 -:10E69000000F0BD9841894F803518D4202D1102A2F -:10E6A00026D103E0521CD2B29445F3D80278521E10 -:10E6B000D2B202708A421BD000EBC20200EBC10C46 -:10E6C000D2F84341CCF84341D2F84721CCF8472156 -:10E6D000847890F800C00022002C09D9851895F89C -:10E6E000035165450BD1102A1CBF024482F8031167 -:10E6F000591E4BB2002BBFF675AF70BC7047521C51 -:10E70000D2B29442EAD8F3E73349487070473248AE -:10E710004078704738B14AF2B811884203D82E4980 -:10E72000488001207047002070472B484088704780 -:10E7300010B500F0AEF9102814D0254A014600208B -:10E7400092F802C0BCF1000F0CD9131893F80331F2 -:10E750008B4203D1102818BF10BD03E0401CC0B28B -:10E760008445F2D8082010BD19498A78824286BFB4 -:10E7700001EB001083300020704715498A788242EF -:10E7800086BF01EB0010C01C00207047104B93F8AF -:10E7900002C084459CBF00207047184490F80301D4 -:10E7A00003EBC00090F843310B70D0F844111160B6 -:10E7B000B0F84801908001207047054A114491F853 -:10E7C000032105490A7002684A6080880881704701 -:10E7D000F0100020860100207C01002010B5F5F724 -:10E7E00027FE002804BFFF2010BDBDE81040F5F74C -:10E7F00045BEFE498A7882429CBF0020704708448B -:10E8000090F8030101EBC00090F84A0100F001000C -:10E8100070472DE9F047F54F0026B04638780028BC -:10E8200086BF4FF0080ADFF8C893BDE8F08700BF45 -:10E8300007EBC80505F5A27195F8430100F029F929 -:10E84000102808BF544610D0B978002400290BD9ED -:10E850003A1992F80321824202D1102C05D103E02B -:10E86000621CD4B2A142F3D80824B878A04286BF73 -:10E8700007EB0410C01C002095F84A1111F0010F9D -:10E8800016D050B1082C04D2391991F83B11012946 -:10E8900003D0102100F0D9FD50B109F806403046F0 -:10E8A000731C95F8432105F5A271DEB2F5F7A8FFB8 -:10E8B00008F1010000F0FF0838784045B8D8BDE8FD -:10E8C000F0872DE9F041C94C00263546A078002894 -:10E8D0008CBFC74FBDE8F0816119C0B291F80381C8 -:10E8E000A84286BF04EB0510C01C002091F83B1124 -:10E8F000012903D0102100F0A8FD58B104EBC80095 -:10E90000BD5590F8432100F5A2713046731CDEB26C -:10E91000F5F776FF681CC5B2A078A842DCD8BDE840 -:10E92000F08110B5F5F79BFF002804BF082010BD4B -:10E93000F5F799FFAE49085C10BDAE4910B54978AE -:10E9400041B1AA4B997829B1C21CD81CF5F70DFD2D -:10E95000012010BD002010BDA44A01EB410102EBD3 -:10E9600041010268C1F80B218088A1F80F017047AE -:10E970002DE9F0419D4D07460024A878002898BF56 -:10E98000BDE8F081C0B2A04213D905EB041010F12C -:10E9900083060ED01021304600F057FD48B904EB35 -:10E9A000440005EB400000F20B113A463046F6F702 -:10E9B0003AFE601CC4B2A878A042E3D8BDE8F0815A -:10E9C000014610228C4800F063BD8B48704770B53B -:10E9D000864D0446A878A04206D905EB0410102104 -:10E9E000833000F032FD08B1002070BD04EB44001C -:10E9F00005EB400000F20B1070BD7C498A78824222 -:10EA000006D9084490F83B01002804BF0120704754 -:10EA1000002070472DE9F0410E46074615460621B5 -:10EA2000304600F012FD714C98B1A17871B104F537 -:10EA30009D7011F0010F18BF00F8015FA17849081F -:10EA400004D0457000F8025F491EFAD10120BDE8EC -:10EA5000F0813846314600F01CF8102816D0A37813 -:10EA60000021002B12D9621892F80321824209D1A9 -:10EA7000102918BF082909D0601880F83B510120DF -:10EA8000BDE8F081491CC9B28B42ECD80020BDE83A -:10EA9000F0812DE9F041554D0646002428780F46B7 -:10EAA000002811D905EBC40090F84311B14206D1FA -:10EAB0000622394600F5A27002F0F2FF38B1601C60 -:10EAC000C4B22878A042EDD81020BDE8F0812046DD -:10EAD000BDE8F081454910B44A7801EBC003521EED -:10EAE0004A70002283F84A2191F802C0BCF1000F5D -:10EAF0000DD98B1893F80341844204D1102A1CBF0E -:10EB000010BC704703E0521CD2B29445F1D80A7889 -:10EB1000521ED2B20A70824204BF10BC704701EB91 -:10EB2000C00301EBC202D2F843C1C3F843C1D2F81B -:10EB30004721C3F847218C7891F800C00022002CAF -:10EB40009CBF10BC70478B1893F80331634506D106 -:10EB5000102A1CBF114481F8030110BC7047521CDD -:10EB6000D2B29442EFD810BC704770B41F490D1850 -:10EB70008A78521ED3B28B7095F80321984247D001 -:10EB800001EB001401EB031C00EB4000DCF8036018 -:10EB9000C4F80360DCF80760C4F80760DCF80B60B9 -:10EBA000C4F80B60DCF80F60C4F80F60DCF8836019 -:10EBB000C4F88360DCF88760C4F88760DCF88B6099 -:10EBC000C4F88B60DCF88FC0C4F88FC001EB030C75 -:10EBD00003EB43039CF8034101EB430385F8034136 -:10EBE00001EB4000D3F80B4108E00000F0100020DA -:10EBF000860100207C010020B3120020C0F80B41E8 -:10EC0000B3F80F31A0F80F319CF83B0185F83B01B8 -:10EC100001EBC20090F84A0110F0010F1CBF70BC5C -:10EC2000704700208C78002C0DD90B1893F803C185 -:10EC3000944504D110281CBF70BC704703E0401CF1 -:10EC4000C0B28442F1D80878401EC0B20870904229 -:10EC500004BF70BC704701EBC20301EBC000D0F8E9 -:10EC600043C1C3F843C1D0F84701C3F847018C78CA -:10EC70000B780020002C9CBF70BC704701EB000C8F -:10EC80009CF803C19C4506D110281CBF084480F89D -:10EC9000032170BC7047401CC0B28442EED870BCE7 -:10ECA0007047000010B50A7B02F01F020A730022B1 -:10ECB000C2758B181B7A03F0010C5B0803F001048A -:10ECC000A4445B0803F00104A4445B0803F00104BE -:10ECD000A4445B0803F0010464444FEA530C0CF0B5 -:10ECE000010323444FEA5C0C0CF00104234403EBC2 -:10ECF0005C0300EB020C521C8CF8123090F817C029 -:10ED0000D2B26344C375052AD3D3D8B2252888BFAD -:10ED1000FFDF10BD00238383028401EBC202521E79 -:10ED2000B2FBF1F1C183704770B46FF01F02010CA8 -:10ED300002EA90251F23A1F5AA4054381CBFA1F573 -:10ED4000AA40B0F1550009D0A1F52850AA381EBF3D -:10ED5000A1F52A40B0F1AA00012000D100204FF017 -:10ED6000000C62464FEA0C048CEA0106F643164397 -:10ED7000B6F1FF3F11D005F001064FEA5C0C4CEAFA -:10ED8000C63C03F0010652086D085B08641C42EAA9 -:10ED9000C632162CE8D370BC704770BC0020704798 -:10EDA0002DE9F04701270025044603290FD04FF431 -:10EDB000FA43002972D0012900F0F880022918BF17 -:10EDC000BDE8F0870146BDE8F04758306AE704F136 -:10EDD00058067021304602F028FFB571F571F572C2 -:10EDE0003573B573F573757135767576F52086F8DC -:10EDF0003C00412086F83D00FF2086F86B00A4F817 -:10EE0000C850A4F8CA50A4F8CC50A4F8CE50A4F826 -:10EE1000D050A4F8D25084F8D55084F8D750A4F834 -:10EE2000DE5084F8DC50A4F8F050A4F8F25084F8D6 -:10EE30002C50258484F8517084F852704FF4486047 -:10EE400060801B21218761874FF4A470E087A08731 -:10EE500021866186E086A086A4F84410A4F84600C6 -:10EE6000A4F84010A4F84200A4F84810A4F84A10EE -:10EE7000A4F84C10677384F8885184F8895184F899 -:10EE8000925184F8935184F8615184F8665184F862 -:10EE9000695184F87A51BDE8F087FFE7A4F8DE50A5 -:10EEA00084F8D6506088FE490144B1FBF0F1A4F823 -:10EEB00076104BF68031A4F87810E288A4F87C50E4 -:10EEC000B4F880C0D2000CFB00FCB2FBF0F29CFB5B -:10EED000F0FC521CA4F880C092B202FB00FC04F1CA -:10EEE0005801A4F87E20BCF5C84FC4BF521ECA8486 -:10EEF000B3FBF0F2521C8A8500F5802202F5EE3257 -:10EF0000531EB3FBF0F2CA838B8B03FB00F2B2FB00 -:10EF1000F0F08883214604F15800FFF7C3FED4F8CF -:10EF20000E106FF01F02080C02EA9126A0F5AA410C -:10EF30004FF01F0C54391CBFA0F5AA41B1F1550187 -:10EF40000AD0A0F52851AA391EBFA0F52A41B1F177 -:10EF5000AA014FF0010901D14FF00009002211462A -:10EF60004FEA020382EA00086FEA080848EA01084B -:10EF7000B8F1FF3F16D006F00108520842EAC83245 -:10EF800049080CF0010876085B1C41EAC8314FEAD9 -:10EF90005C0C162BE6D3B9F1000F1CBF84F860514E -:10EFA000BDE8F08784F86071BDE8F087A4F8DE5012 -:10EFB000B4F88221B4F88611B4F802C004F1580004 -:10EFC000A4F87C50B4F88040C90004FB0CF4B1FBF9 -:10EFD000F2F194FBF2F4491C048589B201FB02F4BE -:10EFE000C184B4F5C84FC4BF491EC184B3FBF2F15C -:10EFF000491C8185018C02EBC101491EB1FBF2F174 -:10F00000C183818B01FB0CF1B1FBF2F18183BDE87F -:10F01000F08770B50025044603290DD04FF4FA425D -:10F02000002958D001297DD0022918BF70BD0146A2 -:10F03000BDE87040583035E604F15806702130467E -:10F0400002F0F3FDB571F571F5723573B573F573B3 -:10F05000757135767576F52086F83C00412086F886 -:10F060003D00FF2086F86B00A4F8D050202084F8E3 -:10F07000D20084F8C850C4F8CC50012284F82C5037 -:10F0800084F8512084F852201B20208760874FF499 -:10F09000A471E187A18720866086E186A186A4F815 -:10F0A0004400A4F84610A4F84000A4F84210A4F8C4 -:10F0B0004800A4F84A00A4F84C00627384F8FC509D -:10F0C00084F8FD5084F8065184F8075184F8EC5018 -:10F0D00084F8F85070BD608871490144B1FBF0F1CB -:10F0E000A4F876104BF68031A4F87810E388A4F8E1 -:10F0F0007C50B4F880C0DB000CFB00FCB3FBF0F3E9 -:10F100009CFBF0FC5B1CA4F880C09BB203FB00FCE2 -:10F1100004F15801A4F87E30BCF5C84FC4BF5B1E93 -:10F12000CB8400E017E0B2FBF0F2521C8A8500F5B8 -:10F13000802202F5EE32531EB3FBF0F2CA838B8BB2 -:10F1400003FB00F2B2FBF0F08883214604F1580083 -:10F15000BDE87040A6E5D4F8F030B4F802C004F180 -:10F1600058005989DB89A4F87C50B4F88040DB0052 -:10F1700004FB0CF4B3FBF1F394FBF1F45B1C04858A -:10F180009BB203FB01F4C384B4F5C84FC4BF5B1E3C -:10F19000C384B2FBF1F2521C8285028C01EBC202E5 -:10F1A000521EB2FBF1F2C283828B02FB0CF2B2FB65 -:10F1B000F1F1818370BD2DE9F003C47D0CB1252CE4 -:10F1C00003D9BDE8F00312207047002A02BF0020D7 -:10F1D000BDE8F003704791F80DC01F260123314DA3 -:10F1E0004FF00008BCF1000F7AD0BCF1010F1EBF38 -:10F1F0001F20BDE8F0037047B0F800C00A7C8F7B89 -:10F2000091F80F907A404F7C87EA090742EA07227B -:10F2100082EA0C0C5FF000070CF0FF094FEA1C2C8F -:10F2200099FAA9F99CFAACFC4FEA19694FEA1C6CEF -:10F2300049EA0C2C0CEB0C1C7F1C9444FFB21FFA07 -:10F240008CFC032FE8D38CEA020C164F0022ECFB57 -:10F25000057212096FF0240502FB05C2D2B201EB60 -:10F26000D207027602F007053F7A03FA05F52F422E -:10F2700018BF42767ED104FB0CF2120C521CD2B2A3 -:10F280005FF0000400EB040C9CF812C094453CBFF6 -:10F29000A2EB0C02D2B218D34FF0000C0D1903E010 -:10F2A000FFDB050053E4B36E95F8085003FA0CF742 -:10F2B0003D421CBF521ED2B2002A6AD00CF1010C92 -:10F2C0000CF0FF0CBCF1080FF0D304F1010C0CF0B2 -:10F2D000FF04052CD6D33046BDE8F0037047FFE7A6 -:10F2E00090F818C00C7E474604FB02C2FB4C4FF05E -:10F2F000000CE2FB054C4FEA1C1C6FF024040CFBD5 -:10F300000422D2B201EBD204027602F0070C247A76 -:10F3100003FA0CFC14EA0C0F1FBF42764046BDE80E -:10F32000F003704790F817C0B2FBFCF40CFB1422FA -:10F33000521CD2B25FF0000400EB040C9CF812C027 -:10F3400094453CBFA2EB0C02D2B212D30D194FF080 -:10F35000000C2D7A03FA0CF815EA080F1CBF521E98 -:10F36000D2B27AB10CF1010C0CF0FF0CBCF1080F19 -:10F37000F0D300E010E004F1010C0CF0FF04052CC8 -:10F38000DAD3A8E70CEBC40141763846BDE8F003B8 -:10F3900070470CEBC40141764046BDE8F00370476E -:10F3A000CF4A016812681140CE4A126811430160C9 -:10F3B000704730B4CC49CA4B00244FF0010C0A7896 -:10F3C000521CD2B20A70202A08BF0C700D781A683D -:10F3D0000CFA05F52A42F2D0097802680CFA01F11C -:10F3E0005140016030BC7047017931F01F0113BFFB -:10F3F000002000221146704710B4435C491C03F002 -:10F40000010C5B0803F00104A4445B0803F0010451 -:10F41000A4445B0803F00104A4445B0803F0010466 -:10F42000A4445B0803F001045B08A44403F0010456 -:10F43000A4440CEB53031A44D2B20529DDDB012AA4 -:10F440008CBF0120002010BC704730B40022A1F115 -:10F45000010CBCF1000F11DD431E11F0010F08BFBC -:10F4600013F8012F5C785FEA6C0C07D013F8025F89 -:10F4700022435C782A43BCF1010CF7D1491E5CBFE2 -:10F48000405C0243002A0CBF0120002030BC7047C2 -:10F49000130008BF704710B401EB030CD41A1CF81A -:10F4A00001CC5B1E00F804C013F0FF03F4D110BCC4 -:10F4B0007047F0B58DB0164610251C466A46AC461E -:10F4C00000EB0C03A5EB0C0713F8013CD355ACF192 -:10F4D000010313F0FF0CF3D11546103210208446BF -:10F4E0000B18ACEB000713F8013C401ED35510F08D -:10F4F000FF00F5D1284601F033FA86B1102005F15E -:10F50000200201461318A1EB000C13F8013C401E29 -:10F5100004F80C3010F0FF00F4D10DB0F0BD0898E5 -:10F520002060099860600A98A0600B98E0600DB0B8 -:10F53000F0BD38B505460C466846F5F706FD0028CF -:10F5400008BF38BD9DF90020227294F909100020EF -:10F55000511A48BF494295F82D308B42C8BF38BD7B -:10F56000FF2B08BF38BDA17A491CC9B2A17295F81A -:10F570002E30994203D8617A7F2918BF38BD627254 -:10F580000020A072012038BD0C2818BF0B2806D01F -:10F590000D281CBF2038062884BF0020704701209A -:10F5A00070470C295AD2DFE801F006090E13161B2A -:10F5B000323C4153484E002A52D04FE0072A18BF30 -:10F5C000082A4DD04AE00C2A18BF0B2A48D045E043 -:10F5D0000D2A45D042E0A2F10F000D2840D93DE0B0 -:10F5E00023B1A2F110000C283AD937E0122A18BF33 -:10F5F000112A35D090F8340020B1122A2ED31B2ABC -:10F600002ED92BE0162A29D31B2A29D926E0A2F1CC -:10F610000F01032924D990F83400F8B11C2A1FD90E -:10F620001CE0002B08BF042A18D119E013B1062AE8 -:10F6300016D013E0012A11D112E01D2A1CBF1E2A88 -:10F640001F2A0DD00AE0A2F12000062808D905E003 -:10F6500013B10E2A04D001E0052A01D00020704722 -:10F66000012070472DE9F04187680D460446204689 -:10F67000F3F7CCFB98B1D5B13846A168F3F709FF91 -:10F68000002814DD2844401EB0FBF5F606FB05F10A -:10F690003846F2F7F8FEA0603046BDE8F081F3F797 -:10F6A000E7F94FF4E661F2F7EEFEA060DFE7002035 -:10F6B000BDE8F081904228BF704770B50446101B2A -:10F6C000642838BF642025188D4205D8F3F715FF4C -:10F6D00000281CBF284670BD204670BD53E4B36EA1 -:10F6E00064230200682302008E01002091F851304B -:10F6F0000A8E022B07BF92003C32D200703292B2C7 -:10F700008B8E934238BF1A464B8E91F852C0BCF193 -:10F71000020F07BF9B003C33DB0070339BB2C98EE6 -:10F72000994238BF0B4600280CBF01210021D01898 -:10F730009830002918BF04210844704730B48388EA -:10F74000B0F808C003EB0C049834002A18BF042258 -:10F7500022444C6A944224BF30BC7047121B521C96 -:10F7600052089B1A9BB2ACEB0202838092B20281D8 -:10F7700091F851506FF00E0C6FF00D04022D0CBF7C -:10F780000CEB930304EBD303438091F8521002294E -:10F790000CBF0CEB920104EBD201C18030BC70476E -:10F7A00010F0010F1CBF0120704710F0020F1CBFAA -:10F7B0000220704710F0040018BF082070472DE9A0 -:10F7C000F0410546174688460126084600F001FC30 -:10F7D0000446404600F001FC034610F0010F18BF3C -:10F7E000012008D113F0020F18BF022003D113F03B -:10F7F000040018BF082014F0010F18BF4FF0010CCF -:10F8000021D000BF50EA0C0108BF002613F0030FFF -:10F8100008BF002014F0030F08BF4FF0000C95F84C -:10F820005110814208BF0020387095F85210614590 -:10F8300008BF4FF0000C87F801C0002808BFBCF1DA -:10F84000000F1CD10DE014F0020F18BF4FF0020C96 -:10F85000D8D114F0040F14BF4FF0080C4FF0000C77 -:10F86000D0E7404600F0BFFBB5F85810401A00B290 -:10F8700047F6FE71884201DC002800DC0026304695 -:10F88000BDE8F08101281CBF02280020704718B491 -:10F89000CBB2C1F3072CC1B2C0F30720012B07D0B4 -:10F8A000022B09D0042B08BFBCF1040F23D006E0C3 -:10F8B000BCF1010F03D11EE0BCF1020F1BD00129E6 -:10F8C00006D0022907D0042908BF042813D004E079 -:10F8D000012802D10FE002280DD001EA0C0161F3EA -:10F8E0000702184060F30F22D0B210F0020F18BFC9 -:10F8F00002200BD106E0084003EA0C01084060F347 -:10F900000702EFE710F0010018BF01208DF800009A -:10F91000C2F3072010F0020F18BF022003D110F02D -:10F92000010018BF01208DF80100BDF8000018BCCF -:10F930007047162A10D12A220C2818BF0D280FD084 -:10F940004FF0230C20280DD031B10878012818BFC2 -:10F95000002805D0162805D00020704701207047E8 -:10F960001A70FBE783F800C0F8E70000282102F0D6 -:10F970003AB930B50546007801F00F0220F00F00CB -:10F980001043287007290BD2DFE801F004060406B3 -:10F9900004080400062405E00C2403E0222401E00E -:10F9A0000024FFDF687820F03F002043687030BDFE -:10F9B000007800F00F0070470A68C0F803208988BB -:10F9C000A0F807107047D0F803200A60B0F80700CD -:10F9D000888070470A68C0F809208988A0F80D104F -:10F9E0007047D0F809200A60B0F80D008880704791 -:10F9F0000278202322F0200203EA41111143017012 -:10FA000070470278402322F0400203EA811111433B -:10FA1000017070470078C0F380107047027880232F -:10FA200022F0800203EAC11111430170704700788F -:10FA3000C0097047D0F80320C1F80920B0F80720AA -:10FA4000A1F80D200A7822F080020A70007880095F -:10FA500042EAC0100870704770B515460E4604465D -:10FA60001F2A88BFFFDF2A46314604F1090002F051 -:10FA700043F86078A91D20F03F0001F03F010843E2 -:10FA8000607070BD70B5054640780E4600F03F04CA -:10FA9000062C38BFFFDFA01FC4B21F2C88BF1F2455 -:10FAA000224605F10901304602F026F8204670BDD5 -:10FAB00070B515460E4604461F2A88BFFFDF2A464A -:10FAC000314604F1090002F017F86078A91D20F012 -:10FAD0003F0001F03F010843607070BD70B50546FE -:10FAE00040780E4600F03F04062C38BFFFDFA01F11 -:10FAF000C4B21F2C88BFFFDF224605F10901304642 -:10FB000001F0FAFF204670BD0968C0F80F10704779 -:10FB10000A88A0F813208978417570474176090A50 -:10FB200081767047C176090A017770474177090AE3 -:10FB300081777047C175090A0176704781757047F2 -:10FB400090F8242001F01F0122F01F02114380F8D9 -:10FB500024107047072988BF072190F82420E0234C -:10FB600022F0E00203EA4111114380F824107047AB -:10FB70001F3002F066B94178007801F03F0110F0C3 -:10FB80000F0006D0012808D0022809D006280BD083 -:10FB90000FE0881F1F280AD90BE00C2909D106E0C5 -:10FBA000881F1F2803D904E0881F1F2801D80120BF -:10FBB0007047002070474178007801F03F0100F065 -:10FBC0000F00042805D1062903D325299CBF012055 -:10FBD00070470020704710B4017801F00F0103292D -:10FBE00022D0052925D14478B0F81910B0F81BC0EF -:10FBF000B0F81730827D04F03F04222C19D1062979 -:10FC000017D3B1F5486F98BFBCF5FA7F11D282B116 -:10FC1000082A98BF8A420CD28B429CBFB0F81D00C4 -:10FC2000B0F5486F05D807E0407800F03F000C2899 -:10FC300002D010BC0020704710BC01207047222168 -:10FC400001F0D1BF00B5027801F0030322F00302F6 -:10FC50001A43027000224270012914BF022900BD1C -:10FC6000032912BFFFDF0121417000BD01F0030332 -:10FC700000B5027822F003021A430270002242709B -:10FC8000012914BF022900BD032912BFFFDF012192 -:10FC9000417000BD007800F0030070470278102327 -:10FCA00022F0100203EA01111143017070474178FC -:10FCB000F9B1C078192850D2DFE800F00D10131602 -:10FCC000191C1F2225282B2E31344F4F4F4C373A09 -:10FCD0003D40434649000C2941D042E008293ED02E -:10FCE0003FE002293BD03CE0172938D039E00D290C -:10FCF00035D036E0012932D033E001292FD030E071 -:10FD000002292CD02DE0092929D02AE0092926D062 -:10FD100027E0012923D024E0012920D021E0062971 -:10FD20001DD01EE002291AD01BE0012917D018E0CF -:10FD3000012914D015E0092911D012E009290ED0AB -:10FD40000FE003290BD00CE0032908D009E00529B6 -:10FD500005D006E0032902D003E0FB2901D80120E9 -:10FD600070470020704730B50546C170192924D26C -:10FD7000DFE801F00D0F11131517171119191717D7 -:10FD80001B111921211D171719191D1D1F000C24E6 -:10FD900015E0082413E0022411E017240FE00D24DD -:10FDA0000DE001240BE0092409E0062407E0032408 -:10FDB00005E0052403E0182401E00024FFDF6C7057 -:10FDC00030BDC0787047C171090A01727047B0F840 -:10FDD000070070474172090A81727047B0F8090044 -:10FDE0007047C172090A01737047B0F80B00704781 -:10FDF0004171090A81717047B0F8050070470171BF -:10FE00007047007970474173090A81737047B0F8F1 -:10FE10000D00704730B4B0F80720894DB0F809C024 -:10FE2000B0F805300179941F2D1998BFBCF5FA7F01 -:10FE30000ED269B1082998BF914209D293429FBF5F -:10FE4000B0F80B00B0F5486F012030BC98BF704788 -:10FE5000002030BC7047001D01F0F3BF021D0846B2 -:10FE6000114601F0EEBF4172090A81727047B0F885 -:10FE70000900704701717047007970470A68426055 -:10FE800049688160704742680A60806848607047CE -:10FE90000988818170478089088070470A68C0F8A6 -:10FEA0000E204968C0F812107047D0F80E200A6082 -:10FEB000D0F81200486070470968C0F81610704703 -:10FEC000D0F81600086070470A684260496881608F -:10FED000704742680A608068486070470968C1607E -:10FEE0007047C06808607047017170474171090A26 -:10FEF00081717047C171090A0172704700797047BA -:10FF0000B0F805007047B0F80700704701717047FE -:10FF10000079704701717047007970470A68426044 -:10FF200049688160704742680A608068486070472D -:10FF30000171090A417170478171090AC1717047E5 -:10FF40000172090A417270478172090AC1727047D1 -:10FF500080887047C0887047008970474089704723 -:10FF600001891B2924BF4189B1F5A47F07D381886A -:10FF70001B2921BFC088B0F5A47F01207047002055 -:10FF800070470A68426049688160704742680A6049 -:10FF9000806848607047017170470079704741710F -:10FFA000704740797047017911F0070F1BBF407906 -:10FFB00010F0070F002001207047017911F0070FA2 -:10FFC0001BBF407910F0070F00200120704701711E -:10FFD000704700797047417170474079704781716F -:10FFE000090AC1717047C088704716A282B0D2E971 -:10FFF0000012CDE900120179407901F0070269464B -:020000040002F8 -:100000001DF80220012A07D800F00700085C01282B -:100010009EBF012002B07047002002B070470171FE -:10002000704700797047417170474079704730B52B -:100030000C460546FB2988BFFFDF6C7030BD000011 -:1000400086F3FFFF000101020102020370B50446BE -:10005000C2F11005281901F04FFD15F0FF0108D07D -:10006000491EC9B2802060542046BDE8704001F0AE -:10007000BABD70BD30B505E05B1EDBB2CC5CD55CB3 -:100080006C40C454002BF7D130BD10B5002409E0FA -:100090000B78521E44EA430300F8013B11F8013B80 -:1000A000D2B2DC09002AF3D110BD2DE9F0410C4693 -:1000B00001200978FF4E92B0154602274FF006083E -:1000C0004FF0040C71B101291ED0022945D003293B -:1000D00005D12978042902D105201070002012B022 -:1000E000BDE8F081606850B1CDE9010601202070C3 -:1000F0008DF80080606A05901146684663E02770BD -:1001000085F800C0566026E029780429E7D169689F -:1001100010222069FFF7B9FF6868C07B000606D58A -:10012000E44A2069102310320146FFF7A3FFD4E907 -:1001300004101022FFF7A9FF2069C07B000606D536 -:10014000DC4A6069102310320146FFF793FF2770E5 -:1001500085F800C06E600320C1E729780429BED16C -:10016000A08910280CD9A0F1100080B2A081A1684C -:100170004FF01003014468466A68FFF77BFF18E000 -:1001800004D14FF010032269A16807E0C2B20EA8A3 -:10019000A168FFF75BFF626910230EA90AA8FFF7A9 -:1001A00069FF10230AA968466A68FFF763FF032006 -:1001B000207060680590CDF818D08DF81080606AC6 -:1001C0000990294604A8F1F759FF88E72DE9F04185 -:1001D00007460D4601200B7806213BB1012B04D1C7 -:1001E0001378052B01D11170002079E76C69012685 -:1001F00020226170E8686060686A6062A168287C9B -:100200000870A681A068A968401C01F075FCA0894F -:1002100020222030A081A0686968213001F06CFCA8 -:10022000A08921462030A0812E703846BDE8F041DB -:10023000F1F73BBF2DE9F05F0D46834601200978B9 -:10024000174606464FF00608D1B1DFF868A24FF016 -:100250000009AAF1080A012923D002297ED0032926 -:100260000CD13978052909D179681022E86901F0A3 -:1002700043FC07203870183500207D60BDE8F09FF2 -:100280002C6A8C48202284F8018020306060202075 -:10029000A081686A60626968A06801F02DFC2E7018 -:1002A000D4E039780529E9D12C6A84F80180686A9C -:1002B000606251681022E86901F01EFCE869606024 -:1002C000A0684F4680F80090A681A0684670A0897B -:1002D000401C80B2A081A1680844696951F8012FCF -:1002E000026089888180A089801D80B2A0816969AF -:1002F000A2680978C1F340011154A089401C80B262 -:10030000A081A1680844296951F8012F02608988F9 -:100310008180A089801D80B2A0812969A2680978A6 -:10032000C1F340011154A0891022401C80B2A08169 -:10033000A1680844E96801F0DFFBA08910221030B1 -:1003400080B2A081A1680844A96801F0D5FBA0890A -:10035000103080B2A081A168014400E00DE0DAF81D -:1003600004000860A089001D80B2A081A1680F541C -:10037000A089401CA081022067E03978052992D12C -:1003800051681022A86901F0B7FB2C6A84F801803B -:10039000E8696060686A6062A16881F80090A6817F -:1003A000A0684670A089401C80B2A081A168084462 -:1003B000696951F8012F026089888180A089801DB8 -:1003C00080B2A0816969A2680978C1F34001115423 -:1003D000A089401C80B2A081A1680844296951F815 -:1003E000012F026089888180A089801D80B2A08150 -:1003F0002969A2680978C1F340011154A08910222B -:10040000401C80B2A081A1680844E96801F074FB37 -:10041000A0891022103080B2A081A1680844A96888 -:1004200001F06AFBA089103080B2A081A16801446C -:10043000DAF804000860A089001D80B2A081A168DC -:100440000E54A089401CA0810320287021465846E4 -:10045000BDE8F05FF1F729BE70B50D460646097894 -:10046000012041B1012905D11178052902D10820C7 -:100470001070002070BD2C6A062060706968616091 -:10048000696A6162EA69A16852F8013F0B6092886B -:100490008A80A081E869A1680078C0F34000887173 -:1004A000A089401C80B2A081A1680844A96951F8C4 -:1004B000012F01E074230200026089888180A089F5 -:1004C000801D80B2A081A969A2680978C1F34001AA -:1004D0001154A089401C80B2A081A16808446969B8 -:1004E0000A88028089788170A0891022C01C80B29D -:1004F000A081A1680844296901F0FEFAA0891022B0 -:10050000103080B2A081A1680844E96801F0F4FAD3 -:10051000A0891022103080B2A081A1680844A96887 -:1005200001F0EAFAA08921461030A081012028704C -:100530003046BDE87040F1F7B8BD70B50D460646CF -:100540000978012059B1012908D11178052905D16F -:1005500009201070506800685060002070BD6C6900 -:10056000062010226070E8686060686A606229692D -:10057000A06801F0C1FA1020A081A06820221030EC -:10058000A96801F0B9FAA0892022203080B2A081A8 -:10059000A1680844696801F0AFFAA08921462030BB -:1005A000A081012028703046BDE87040F1F77DBD84 -:1005B00070B50C46012009788EB01546062659B153 -:1005C000012934D0022905D12978042902D10A2031 -:1005D000107000200EB070BD606910236A4600786C -:1005E000C0F340008DF80000A0690078C0F340001F -:1005F0008DF80100E0680168CDF802108188ADF83F -:10060000061080798DF8080020690168CDF809107E -:100610008188ADF80D1080798DF80F006068059025 -:100620000AA80690A168FFF725FD01201DE02978A2 -:100630000429CFD1A06910236A4650F8011F009108 -:100640008088ADF80400606950F8011FCDF80610ED -:100650008088ADF80A0000200390606805900AA821 -:1006600006906968FFF706FD022020708DF8106083 -:10067000606A0990294604A8F1F700FDAAE700B5D1 -:100680000B788BB001204BB1012B05D111780429D7 -:1006900002D10B20107000200BB000BD4868019003 -:1006A00006A80290C86803680693406807908868A7 -:1006B00003680893406809900120087006208DF8AF -:1006C0000000486A059011466846F1F7D7FCE3E759 -:1006D00000B50B788BB0012043B1012BDCD1117830 -:1006E0000429D9D10C2010700020D5E7486801906A -:1006F00006A8029088680368069340680790002067 -:10070000089009900120087006208DF80000486AC2 -:10071000059011466846F1F7B1FCBDE700B50B78CE -:100720008BB0012043B1012BB6D111780429B3D18C -:100730000D2010700020AFE748680590CDF818D064 -:1007400088680088ADF80000C8680088ADF802002D -:1007500000200190029003900120087006208DF87F -:100760001000486A0990114604A8F1F787FC93E746 -:1007700030B403460C7801205CB1012C15D0022C5A -:1007800005D111780C2902D10E201070002030BC48 -:10079000704701200870C868042242704A684260AD -:1007A0000B4A8260921EC2600BE014780D2CEED1D1 -:1007B00002200870C86803244470526842608A6846 -:1007C0008260496A4162014630BC1846F1F76DBC4F -:1007D0006E2302002DE9F0410C4611490D68104AC4 -:1007E000104908321160A0F120012A2901D301200B -:1007F0000CE03E2810D040CC0B4F94E80E0007EBE5 -:100800008000241F50F8807C3046B84720600448A0 -:10081000001D0560BDE8F0812046E0F7E1FCF5E74A -:100820001005024001000001A423020010B5524847 -:1008300000F070FA00B1FFDF4F48401C00F06AFA88 -:10084000002800D0FFDF10BD2DE9F14F4B4ED6F848 -:1008500000B00127484800F065FADFF81C8128B98C -:100860005FF0000708F1010000F072FA444C002527 -:100870004FF0030901206060C4F80051C4F804512E -:10088000009931602060DFF8FCA018E0DAF8000081 -:10089000C00614D50E2000F064F8EFF3108010F0BD -:1008A000010072B600D00120C4F80493D4F80011FE -:1008B00019B9D4F8041101B920BF00B962B6D4F84F -:1008C000000118B9D4F804010028DFD0D4F80401DD -:1008D0000028CFD137B1C6F800B008F1010000F010 -:1008E00021FA11E008F1010000F01CFA0028B9D14A -:1008F000C4F80893C4F80451C4F800510E2000F065 -:1009000030F81D4800F024FA0020BDE8F88F2DE9EA -:10091000F0438DB00D46064600240DF110090DF18F -:10092000200817E004EB4407102255F8271068460A -:1009300001F0E2F805EB870710224846796801F0DC -:10094000DBF86846FFF780FF10224146B86801F0E7 -:10095000D3F8641CB442E5DB0DB00020BDE8F083A1 -:1009600072E700F01F02012191404009800000F170 -:10097000E020C0F8801270478F01002004E500409D -:1009800000E0004010ED00E0D848002101708170C7 -:10099000704770B5D64D01232B60D64B1C68002CD8 -:1009A000FCD0002407E00E6806601E68002EFCD014 -:1009B000001D091D641C9442F5D3002028601868AE -:1009C0000028FCD070BD70B5C84E0446CA4D3078C2 -:1009D000022800D0FFDFAC4200D3FFDF7169C748B7 -:1009E000012903D847F23052944201DD03224271BB -:1009F000491C7161291BC160C0497078F2F782FA05 -:100A0000002800D1FFDF70BD70B5B84C0D4661788D -:100A1000884200D0FFDFB84E082D4ED2DFE805F047 -:100A20004D0421304D4D4D3B2078022800D0FFDF92 -:100A300003202070A078022802D0012804D008E00A -:100A4000A06800F051FD04E004F1080007C8FFF7BA -:100A5000A0FF052020700020A070BDE87040F1F7D5 -:100A600012BFF2F705F801466068F2F712FDB042D6 -:100A700002D2616902290BD30320F2F7E4FF12E0EE -:100A8000F1F7F6FF01466068F2F703FDB042F3D2DA -:100A9000BDE8704097E7207802280AD0052806D0E4 -:100AA000FFDF04202070BDE8704000F014B9022080 -:100AB00000E00320F2F7C7FFF3E7FFDF70BD70B57A -:100AC0000546F1F7D5FF894C60602078012800D0F9 -:100AD000FFDF8A4901200870002008718D60042022 -:100AE00048718548C860022020706078F2F70AFAE1 -:100AF000002800D1FFDF70BD10B57C4CA07808B98C -:100B0000207808B1112010BD7D48F1F737FF6070E3 -:100B10006078202804D0012020700020606110BD82 -:100B2000032010BD0246010B0120B2F5003F02D2A6 -:100B3000884000F071BFB2F5802F03D22039884081 -:100B400000F072BFB2F5C02F03D24039884000F0E8 -:100B500074BFB2F5002F03D26039884000F076BF31 -:100B6000002070472DE9F041144600EB84070E4643 -:100B700005463F1F00F0CBFC4FF080510A695043FF -:100B800006EB8402121FB24201D2012200E00022D1 -:100B90001CB10969B4EB910F02D90920BDE8F081BD -:100BA00058498D4216D3AF4214D3854205D28742AD -:100BB00003D245EA0600800701D01020EEE78E42FE -:100BC00008D33AB92846FFF7ADFF18B93846FFF702 -:100BD000A9FF08B10F20E1E74B484C490068884263 -:100BE00005D0224631462846FFF7D3FE10E0FFF736 -:100BF00083FF0028D2D13D4801218560C0E903640C -:100C000081704FF4A97104FB01F01830FFF757FF12 -:100C10000020C3E770B54FF0805504462869394974 -:100C2000B1FBF0F084420AD300F071FCA04201D87D -:100C3000102070BD28696043FFF774FF08B10F20D2 -:100C400070BD314831490068884204D0286960434A -:100C500000F04AFC0CE0FFF74FFF0028F0D12969B3 -:100C6000224861438160022181702948FFF727FFF4 -:100C7000002070BD2349090BB1EB401F07D940424A -:100C800001EB4011202903D34FF0FF3070470021C2 -:100C900001208840401E704770B505460C46002074 -:100CA000FFF7E8FF28420ED10120FFF7E3FF2042C3 -:100CB00009D10220FFF7DEFF104204D10320FFF725 -:100CC000D9FF184201D00F2070BD21462846BDE84B -:100CD000704000F0C4BE10B5044C6078F1F7A9FE76 -:100CE00000B9FFDF00202070A07010BD940100202B -:100CF00004E5014000E40140105C0C00C412002037 -:100D0000090A020000300200B0000020BEBAFECA8C -:100D10007C5E0100002101700846704701460020FA -:100D200008707047EFF3108101F0010172B602788C -:100D3000012A01D0012200E000220123037001B941 -:100D400062B60AB1002070474FF400507047E9E7DF -:100D5000EFF3108111F0010F72B64FF00002027034 -:100D600000D162B600207047F2E700004C490968E4 -:100D70000160002070474A49086000207047012147 -:100D80008A0720B1012804D042F20400704791671D -:100D900000E0D1670020704742490120086042F21C -:100DA0000600704708B504233E4A1907103230B1D7 -:100DB000C1F80433106840F0010010600BE01068C7 -:100DC00020F001001060C1F808330020C1F80801CC -:100DD000354800680090002008BD011F0B2909D884 -:100DE000304910310A6822F01E0242EA40000860D1 -:100DF0000020704742F205007047000100F180407A -:100E0000C0F8041900207047000100F18040C0F8CC -:100E1000081900207047000100F18040D0F8000957 -:100E2000086000207047012801D9072070471F4A39 -:100E300052F8200002680A4302600020704701282F -:100E400001D907207047194A52F8200002688A43E6 -:100E5000026000207047012801D907207047134A1B -:100E600052F8200000680860002070470200104916 -:100E70004FF0000003D0012A01D0072070470A601C -:100E800070474FF080410020C1F808014FF0E0208A -:100E9000802180F800140121C0F800117047000083 -:100EA0000004004000050040080100404C240200FE -:100EB000780500406249634B0A6863499A420968B1 -:100EC00001D1C1F310010160002070475C495D4B06 -:100ED0000A685D49091D9A4201D1C0F310000860FB -:100EE000002070475649574B0A68574908319A42C3 -:100EF00001D1C0F3100008600020704730B5504B9E -:100F0000504D1C6842F20803AC4202D0142802D2B1 -:100F100003E0112801D3184630BDC3004B481844E4 -:100F2000C0F81015C0F81425002030BD4449454BC9 -:100F30000A6842F209019A4202D0062802D203E06E -:100F4000042801D308467047404A012142F8301076 -:100F5000002070473A493B4B0A6842F209019A4225 -:100F600002D0062802D203E0042801D308467047C5 -:100F7000364A012102EBC00041600020704770B585 -:100F80002F4A304E314C156842F2090304EB8002BF -:100F9000B54204D0062804D2C2F8001807E004289D -:100FA00001D3184670BDC1F31000C2F8000800203C -:100FB00070BD70B5224A234E244C156842F20903D5 -:100FC00004EB8002B54204D0062804D2D2F800080F -:100FD00007E0042801D3184670BDD2F80008C0F31A -:100FE00010000860002070BD174910B5083118487E -:100FF00008601120154A002102EBC003C3F8101548 -:10100000C3F81415401C1428F6D3002006E0042869 -:1010100004D302EB8003C3F8001807E002EB80035F -:10102000D3F80048C4F31004C3F80048401C062855 -:10103000EDD310BD04490648083108607047000030 -:10104000B0000020BEBAFECA00F5014000F0014029 -:101050000000FEFF7D4B1B6803B19847BFF34F8F25 -:101060007B4801687B4A01F4E06111430160BFF3F2 -:101070004F8FFEE710B5EFF3108010F0010F72B63E -:1010800001D0012400E0002400F0D6F850B1E0F7D0 -:1010900041F9F1F7BCFAF2F777FCE1F7C0FE6E49CF -:1010A0000020086004B962B6002010BD70B50C467F -:1010B0000646EFF3108010F0010F72B601D0012543 -:1010C00000E0002500F0B8F818B105B962B60820B4 -:1010D00070BDE0F79BF8E0F71FF9024600204309D6 -:1010E0009B0003F1E02300F01F01D3F80031CB4057 -:1010F000D9071BD0202803D222FA00F1C90722D138 -:1011000041B2002906DA01F00F0101F1E02191F866 -:10111000141D03E001F1E02191F8001449090829A8 -:1011200011D281B101290ED004290CD0401C6428B1 -:10113000D5D3E1F74BFE4849484808602046F3F70D -:101140008FF860B904E005B962B641F2010070BDE4 -:101150003E4804602EB13046F3F7CFF818B11024A2 -:1011600029E03F4E16E03078022802D94FF480542F -:1011700021E007240028707801D0E0B908E0D0B160 -:10118000202818D8B078212815D8012813D001E0DC -:10119000B07880B93349802081F8140DE0F7BCF8AD -:1011A0003146F2F7D7FBF1F7F1F900F0E3F93046F9 -:1011B000E0F782F8044605B962B61CB1FFF75AFFA2 -:1011C000204670BD002070BD10B5044600F034F814 -:1011D00000B101202070002010BD234908600020CC -:1011E000704770B50C4621490D682049204E0831E2 -:1011F0000E60102807D011280CD012280FD0132809 -:1012000011D0012013E0D4E90001FFF74FFF35466C -:1012100020600DE0FFF72EFF0025206008E0206829 -:10122000FFF7D2FF03E0104920680860002020602B -:101230000E48001D056070BD0748084900688842D7 -:1012400001D101207047002070470000AC01002050 -:101250000CED00E00400FA05B0000020BEBAFECAA2 -:10126000542402000BE000E00400002010050240BE -:101270000100000100B5764910F1080F08BFF82001 -:1012800024D014DC10F1280F08BFD8201ED010F194 -:10129000140F08BFEC2019D010F1100F08BFF02078 -:1012A00014D010F10C0F08BFF4200FD00CE010F197 -:1012B000040F08BFFC2009D0002818BF032805D060 -:1012C000042804BF086000BDFFDF00BD086000BD4A -:1012D00000B56049012808BF032004D0022816BFCA -:1012E000FFDF042000BD086000BD5A48016801F01E -:1012F0000F01032904BF01207047006800F00F00B0 -:10130000042804BF0220704700B5FFDF012000BDA4 -:101310005149002808BF086805D0012806BF0868A1 -:1013200040F0010070470860704770B5054601291C -:1013300014D0022A07BF49484FF47A7148484FF445 -:10134000C86144181846F4F759F820444FF47A71EC -:1013500000F27120B0FBF1F0281A70BD022A14BF10 -:101360004FF4C8604FF47A7049F608514418E9E721 -:1013700070B514460546012908BF49F6CA6605D06E -:10138000022B0CBF3748364800F1FA061046F4F736 -:1013900044F8012C0CBF4FF47A714FF4FA71711AB2 -:1013A00008444FF47A7100F28920B0FBF1F0281A5A -:1013B000801E70BD70B51546064601291AD0022B55 -:1013C00007BF26484FF47A7125484FF4C861441886 -:1013D0001046F4F722F8012D0CBF4FF47A714FF448 -:1013E000FA71611A08444FF47A716438B0FBF1F075 -:1013F000301A70BD022B14BF4FF4C8604FF47A70DE -:1014000049F608514418E3E770B505460C46164600 -:101410001046F3F7F3FF05EB4501C1EBC51100EBF7 -:10142000C100012C0CBF4FF47A714FF4FA714518CA -:101430002046F3F7F2FF281A4FF47A7100F60F6096 -:10144000B0FBF1F43046F3F7CDFF2044401D70BDF2 -:101450000C15004010150040501600406836020080 -:10146000A2240200043602002DE9F04184B088462F -:101470000746FEF70FFC05467E786A4601A94046FE -:10148000EFF748F804000ED0012D1EBF032004B072 -:10149000BDE8F08102AA40460199EEF73AFF0298B2 -:1014A000B0F803000AE0022D18D1042E16D3B7F8C5 -:1014B0000300BDF80020011D8A4206D3001D80B242 -:1014C000A119814238BF012004D104B04FF00000BF -:1014D000BDE8F0813CBF04B0BDE8F0814FF00200F0 -:1014E00004B0BDE8F08100000B4A022111600B49F5 -:1014F0000B68002BFCD0084B1B1D186008680028E7 -:10150000FCD00020106008680028FCD070474FF025 -:10151000805040697047000004E5014000E401404C -:1015200002000B464FF00000014620D0012A04D0F3 -:10153000022A04D0032A0DD103E0012002E0022098 -:1015400015E00320072B05D2DFE803F00406080AA4 -:101550000C0E100007207047012108E0022106E070 -:10156000032104E0042102E0052100E00621F1F757 -:1015700022BA0000FC4805218170002101704170F1 -:10158000C17081607047F9490A78012A06D0CA689B -:101590001044C860C8684038F1F748BF8A681044F2 -:1015A00088608868F7E710B5EF4CE078F1F741FA0A -:1015B00000B9FFDF0820F2F746FA0520A0700020EE -:1015C0002070607010BD002819D00378E849E94AFE -:1015D00013B1012B0ED011E00379012B00D06BB9B0 -:1015E00043790BB1012B09D18368643B8B4205D24F -:1015F000C0680EE00379012B02D00BB100207047C8 -:1016000043790BB1012BF9D1C368643B8B42F5D20E -:1016100080689042F2D8012070472DE9F0410446DD -:101620000227F1F72FFE006800B1FFDFCE4D012643 -:101630003CB12078B0B1012805D0022810D0032891 -:1016400013D02E710CE06068C82807D3F1F755FF5E -:1016500020B16068FFF797FF012703E0002701E052 -:1016600000F0CCF93846BDE8F08128780028F7D1A1 -:101670006068FFF7A8FF0028E3D06068DFF8EC821D -:10168000007828B3A878042800D0FFDF0020464661 -:1016900088F8000060680079C8B300203071606885 -:1016A0004079A8B30420707160688168E868F0F739 -:1016B000EAFEB0606068C0685230F0600320A87035 -:1016C000AA49E878F1F71EFC0028C9D1FFDFC7E777 -:1016D000404688F8006061680979D1B10021017144 -:1016E00061684979B9B104214171616889685231F1 -:1016F00081606168C968C160C0689B4C14346060D7 -:10170000F1F7B6F920606E700220A870A8E704E037 -:1017100005E00321E3E70321E6E70120BEE703201C -:10172000C1E72DE9F047904C8846E178884200D027 -:10173000FFDFDFF83492002501278C4E09F11409F0 -:10174000B8F1080F79D2DFE808F0040D2A557E843D -:101750009199A078032803D0A078022800D0FFDF59 -:10176000BDE8F087A078032803D0A078022800D035 -:10177000FFDF0420A0702571207800287AD1FFF7C0 -:1017800002FF3078012806D0B068E06000F07BF9F5 -:101790002061002062E0E078F1F7B0FAF5E7A07888 -:1017A000032803D0A078022800D0FFDF207800288B -:1017B0006FD1A078032816D0F1F75AF901464F46A9 -:1017C000D9F80000F1F765FE00280EDB7968814248 -:1017D0000BDB081AF0606549E078F1F793FB00280D -:1017E000BED1FFDFBCE7042029E00420F2F72BF98B -:1017F000A570B5E7A078032803D0A078022800D010 -:10180000FFDF207888BBA078032817D0F1F730F9E4 -:1018100001464F46D9F80000F1F73BFE0028E4DB13 -:1018200079688142E1DB081AF0605049E078F1F70D -:1018300069FB002894D1FFDF92E740E00520F2F732 -:1018400002F9A7708CE7A078042800D0FFDF0220FF -:1018500004E0A078042800D0FFDF0120A1688847B9 -:10186000FFF7DBFE054630E004E012E0A078042834 -:1018700000D0FFDFBDE8F04700F0C0B8A078042832 -:1018800005D0607810B1A078022800D0FFDF207862 -:1018900010B1BDE8F04786E6207920B10620F2F7C6 -:1018A000D2F82571CDE7607838B13049E078F1F7AA -:1018B00029FB00B9FFDF657052E70720BFE7FFDFB4 -:1018C0004EE73DB1012D03D0FFDF022DF9D147E7EF -:1018D0000420C3E70320C1E770B5050005D0224C02 -:1018E000A078052803D0112070BD102070BD2248BB -:1018F000F1F744F8E070E078202803D0A5600020DC -:10190000A07070BD032070BD174810B5017809B1F3 -:10191000112010BD817805290CD0817801290BD0C8 -:10192000817849B1012101708178012904D0807842 -:1019300010B103E00F2010BDFFF735FE002010BDF1 -:1019400070B5094E0446B07808B101280AD1ACB18F -:101950002046FFF738FE98B12078044D90B1B0785A -:1019600001282AD00F2070BDB0010020D412002021 -:101970003D860100FF1FA107231702001020F2E798 -:101980000720F0E701202870207990B1002028710D -:10199000607980B104206871A0685230A860E06866 -:1019A000E860E8681A4C6060F1F762F82060022095 -:1019B00016E00320EBE70320EDE7002028702079F4 -:1019C000A8B100202871607998B104206871A168DD -:1019D000F068F0F758FDA860E0685230E860032036 -:1019E000B0700C49F078F1F78DFA28B903E00320C4 -:1019F000E8E70320EAE7FFDF0020B4E7044810B57A -:101A00001438006900F037F8BDE81040F0F73BBF2C -:101A1000C4010020D41200201F490968014201D0EE -:101A200001207047002070471B49091D09680142C9 -:101A300001D0012070470020704717491031096814 -:101A4000014201D001207047002070471249143133 -:101A50000968014201D0012070470020704710B58D -:101A60000D4C2060201D01600B4810300260001DED -:101A70000360002010BD09490A6848F202139A4326 -:101A800002430A607047054A116848F2021301EAEE -:101A9000030099431160704700060040C8060240E9 -:101AA00040EA010310B59B070FD1042A0DD310C8DB -:101AB00008C9121F9C42F8D020BA19BA884201D92D -:101AC000012010BD4FF0FF3010BD1AB1D30703D075 -:101AD000521C07E0002010BD10F8013B11F8014B2B -:101AE0001B1B07D110F8013B11F8014B1B1B01D147 -:101AF000921EF1D1184610BD032A40F2308010F03A -:101B0000030C00F0158011F8013BBCF1020F624498 -:101B100098BF11F801CB00F8013B38BF11F8013B29 -:101B2000A2F1040298BF00F801CB38BF00F8013BD6 -:101B300011F0030300F02580083AC0F0088051F846 -:101B4000043B083A51F804CBA0E80810F5E7121D51 -:101B50005CBF51F8043B40F8043BAFF30080D20770 -:101B600024BF11F8013B11F801CB48BF11F8012B3C -:101B700024BF00F8013B00F801CB48BF00F8012B5F -:101B8000704710B5203AC0F00B80B1E81850203AE9 -:101B9000A0E81850B1E81850A0E81850BFF4F5AF0D -:101BA0005FEA027C24BFB1E81850A0E8185044BF97 -:101BB00018C918C0BDE810405FEA827C24BF51F804 -:101BC000043B40F8043B08BF7047D20728BF31F8F8 -:101BD000023B48BF11F8012B28BF20F8023B48BF49 -:101BE00000F8012B70474FF000020429C0F012806A -:101BF00010F0030C00F01B80CCF1040CBCF1020FC0 -:101C000018BF00F8012BA8BF20F8022BA1EB0C0194 -:101C100000F00DB85FEAC17C24BF00F8012B00F88A -:101C2000012B48BF00F8012B70474FF0000200B5B0 -:101C3000134694469646203922BFA0E80C50A0E8EF -:101C40000C50B1F12001BFF4F7AF090728BFA0E89D -:101C50000C5048BF0CC05DF804EB890028BF40F869 -:101C6000042B08BF704748BF20F8022B11F0804FAB -:101C700018BF00F8012B704770477047704700008D -:101C8000FEDF04207146084219D10699124A91429A -:101C900015DC069902394878DF2810D10878FE282B -:101CA00007D0FF280BD14FF001004FF000020B4B83 -:101CB000184741F201000099019A084B1847084B58 -:101CC000002B02D01B68DB6818474FF0FF307146CD -:101CD0004FF00002014B184700300200551002007F -:101CE00004000020184819497047FFF7FBFFDFF791 -:101CF00065FA00BD4FF4805015490968884203D148 -:101D0000144A13605B68184700BD000020BFFDE760 -:101D10004FF480500E490968884210D10E4B186864 -:101D20004FF0FF318842F1D080F308884FF0202136 -:101D3000884204DD0948026802210A43026008481B -:101D4000804708488047FFDFE8120020E8120020A3 -:101D500000000020040000200030020024050040A4 -:101D600039430100F51C020004207146084202D0EC -:101D7000EFF3098101E0EFF3088188690238007808 -:101D8000102813DB20280FDB2B280BDB0A4A1268F4 -:101D90000A4B9A4203D1602804DB094A104702200B -:101DA00008607047074A1047074A1047074A1268F9 -:101DB0002C32126810470000B0000020BEBAFECAE4 -:101DC0001D130000D5070200E311020004000020EB -:101DD0000D4B0E4908470E4B0C4908470D4B0B495C -:101DE00008470D4B094908470C4B084908470C4B5D -:101DF000064908470B4B054908470B4B0349084761 -:101E00000A4B024908470000F9BA0000092F0000F8 -:101E1000812C00001D2B0000AB2A0000232D0000A8 -:101E2000391300006728000029BD0000C911000017 -:101E300000210160818070470021016041600172D2 -:101E400070470A6802600B7903717047599500006A -:101E50001B970000779800009B980000D598000021 -:101E6000099900004399000081990000D39900006E -:101E700031960000A7120000A7120000C140000028 -:101E80000541000025410000E1410000274300001A -:101E90000144000031440000F5440000153D0000FD -:101EA000274700001948000039480000DD150000F0 -:101EB00001160000311500008515000033160000E2 -:101EC000C716000003600000B561000073650000E4 -:101ED000896600000D67000087670000F967000051 -:101EE00015690000E3690000616A000053480000C2 -:101EF0005948000063480000D73C00001F4900001B -:101F0000A13C00005F4A0000B74A00001F4B0000E0 -:101F1000A7120000A7120000A7120000A7240000CB -:101F20002D2500004925000065250000F32600004E -:101F30008F25000099250000DB250000FD2500000D -:101F4000D92600001B270000A7120000CF82000046 -:101F5000F7820000F98200003383000061830000F3 -:101F60004F840000DB840000EF8400003D8500000A -:101F70002D860000D1870000F9880000D172000092 -:101F800011890000A7120000A712000049B4000048 -:101F9000B3B5000007B6000073B6000023B7000019 -:101FA00051000000000000000000000000000000E0 -:101FB0000000000000000000000000000000000021 -:101FC0000000000000000000000000003E000000D3 -:101FD0000000000000000000000000000000000001 -:101FE00000000000000000000000000000000000F1 -:101FF0000000000000000000500000000000000091 -:1020000000000000000000000000000000000000D0 -:1020100000000000000000000000000000000000C0 -:1020200000000000100110013A0200001A02000432 -:102030000506000013900000F38F0000FFFFFFFF74 -:102040000000FFFF3BAC00003D39000041200000D4 -:102050001B730000EB8D0000000000000000020078 -:10206000000000000002000000000000000100006D -:10207000000000006F8000004F800000BD80000065 -:1020800029240000EB2300000B240000A7A7000078 -:10209000D3A70000DBA9000021590000DD8000006B -:1020A000000000000D810000772400000000000007 -:1020B0000000000000000000BDA8000000000000BB -:1020C000B359000000000000000000000000000004 -:1020D0000000000000000000000000000000000000 -:1020E000000000000000000000000000D5E5000036 -:1020F00059E60000000000000000000000000000A1 -:1021000059E700000000000000000000000000008F -:1021100049F800000000000000000000000000007E -:1021200005E900005DF4000000000000DDF400009F -:1021300051F500000000000037EE0000D5EE000071 -:102140000000000017F50000D1EF0000C9F1000009 -:102150003DF2000041F30000A5EA0000000000008D -:1021600000000000BFE90000000000001FE80000C0 -:1021700095E70000BDF300007BF60000E9F60000E3 -:1021800000000000A7E60000D7E6000007E6000018 -:102190000000000021E70000000000000000000037 -:1021A000000000004BF700000000000000000000ED -:1021B000000000000000000000000000EFEC000044 -:1021C000000000000000000000000000C3E8000064 -:1021D000C1E700008BE800000000000053E80000A9 -:1021E0000000000000000000B3F7000097F80000B6 -:1021F0009BFA000017F900003DE9000051FA0000C9 -:10220000000000004FEB000021EC000061F900002D -:10221000ABF9000007F80000E5F90000F1ED00005F -:1022200093560000935600009D400000E7AA00006E -:102230009F750000531F000087AA01004BC50100D5 -:10224000D9560000D9560000BF40000049AB00003D -:1022500023760000C51F0000B5AA01005FC501007C -:10226000D001D001400038005C0024004001F001A2 -:1022700001000000010000000001020304120F1021 -:102280001100000013000000B10502007F060200EB -:10229000D10602001D07020071070200AB00020018 -:1022A000CD01020035020200590402003B05020084 -:1022B000750D01008B1E01000000000006000000EB -:1022C0000A0000003200000073000000B4000000AB -:1022D000B197010045850100235F010077DE010011 -:1022E000F772010077DE01007D5F010005E001006B -:1022F000876B010005E001007B5E010093DF0100B8 -:10230000C971010093DF01004D630100FFE201008C -:102310007F730100FFE20100555555D6BE898E003E -:102320000000A606340DC21300004A03EE05920811 -:10233000000096041409920D555555252627D6BE42 -:10234000898EF401FA00960064004B0032001E00F2 -:1023500014000A00050002000100000025410000F1 -:1023600000000000AAAED7AB15412010000003000A -:10237000656C7462000000000000000000000000B6 -:1023800000000000870000000000000000000000C6 -:1023900000000000BE83605ADB0B376038A5F5AA49 -:1023A0009183886CB50E0200CD0E0200E50E02008E -:1023B000FD0E02002D0F0200550F02007F0F0200DC -:1023C000B30F0200150C0200650B0200990C02000D -:1023D000150D0200250D0200510D0200A33B010066 -:1023E000AB3B0100B93B01007F0D0200990D0200DB -:1023F0006D0D0200770D0200A50D0200DB0D02003D -:10240000FB0D0200090E0200170E0200270E02004B -:102410003F0E0200570E02006D0E02000000000089 -:10242000F7B800004DB9000063B9000021150200A3 -:10243000490802000F090200D91802000919020018 -:1024400041190200E93901000D3E01001C05004060 -:10245000200500400010020078240200080000203F -:10246000C401000044110000A8240200CC01002097 -:102470001C110000A01100000118136813024C2069 -:102480001A010222782720FB349B5F801280021EF3 -:1024900010139F0A1B205C041AE2040128237F0109 -:0824A00002A329091DFB013113 -:1030000030F00020153202001D3202001F32020093 -:1030100021320200233202002532020000000000AB -:103020000000000000000000000000002732020045 -:1030300029320200000000002B3202002D32020073 -:10304000913302002F320200653702002F32020056 -:103050002F3202002F3202002F3202002F320200E4 -:103060002F3202002F320200313702002F320200CD -:103070002F3202002F3202002F3202002F320200C4 -:103080002F320200E93302002F3202002F320200F9 -:103090000D3402002F320200113402002F320200E0 -:1030A0002F3202002F3202002F3202002F32020094 -:1030B0002F3202002F32020000000000000000004A -:1030C0002F3202002F3202002F3202002F32020074 -:1030D0002F3202002F3202002F32020000000000C7 -:1030E00000000000000000000000000000000000E0 -:1030F00000000000000000000000000000000000D0 -:1031000000000000000000000000000000000000BF -:1031100000000000000000000000000000000000AF -:10312000000000000000000000000000000000009F -:10313000000000000000000000000000000000008F -:10314000000000000000000000000000000000007F -:10315000000000000000000000000000000000006F -:10316000000000000000000000000000000000005F -:10317000000000000000000000000000000000004F -:10318000000000000000000000000000000000003F -:10319000000000000000000000000000000000002F -:1031A000000000000000000000000000000000001F -:1031B000000000000000000000000000000000000F -:1031C00000000000000000000000000000000000FF -:1031D00000000000000000000000000000000000EF -:1031E00000000000000000000000000000000000DF -:1031F00000000000000000000000000000000000CF -:10320000DFF80CD000F04AF8004800479DD60200D5 -:1032100030F000200648804706480047FEE7FEE7FA -:10322000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE776 -:10323000153402000132020040EA01039B0703D06B -:1032400009E008C9121F08C0042AFAD203E011F8E5 -:10325000013B00F8013B521EF9D27047D2B201E0A7 -:1032600000F8012B491EFBD270470022F6E710B58B -:1032700013460A4604461946FFF7F0FF204610BDE4 -:1032800030B504460020034600E05B1C934203D2A5 -:10329000E05CCD5C401BF8D030BD0000064C074D13 -:1032A00006E0E06840F0010394E807009847103416 -:1032B000AC42F6D3FFF7A8FF440503006405030002 -:1032C00070B58C1810F8015B15F0070301D110F8E8 -:1032D000013B2A1106D110F8012B03E010F8016B15 -:1032E00001F8016B5B1EF9D12B0705D40023521E98 -:1032F0000DD401F8013BFAE710F8013BCB1A921C00 -:1033000003E013F8015B01F8015B521EF9D5A142FD -:10331000D8D3002070BD00F01F0201219140400968 -:10332000800000F1E020C0F88012704700F01F021A -:10333000012191404009800000F1E020C0F8801296 -:10334000704700F01F02012191404009800000F108 -:10335000E020C0F80011704700F01F0201219140E9 -:103360004009800000F1E020C0F8001270474907D2 -:10337000090E002806DA00F00F0000F1E02080F8C6 -:10338000141D704700F1E02080F800147047000021 -:1033900070B54FF4807630460AF02CFA114CB50522 -:1033A00060B130460AF02DFA0120C5F808036079B3 -:1033B00020B9012060712168002088474FF482768F -:1033C00030460AF017FA00280AD030460AF019FAF7 -:1033D0000220C5F808032168BDE8704001200847B5 -:1033E00070BD0000D8B3002007480021C0F840118C -:1033F000C0F84411C0F84811C0F84C11C0F80011D1 -:10340000C0F804110CF080BA001001400CF0CAB9E9 -:103410000AF01ABDF0B5B5480023021D0178101D51 -:1034200001254FF0805406290BD11678360708D1B4 -:103430000678C6F30316032E06D0042E04D0052EFC -:1034400002D0062907D00EE0B4F82463A84FC6F3D3 -:1034500004263E6002E01678360704D10678C6F3EB -:103460000316032E02D0062904D00FE0A24FA14E6E -:103470007E670EE01678360708D10678C6F3031685 -:10348000032E06D0042E04D0052E02D0062907D024 -:103490000EE0D4F84462994FC6F342363E6002E033 -:1034A0001678360704D10678C6F30316032E02D029 -:1034B000062906D011E0924E376827F080773760F2 -:1034C0000EE01678360708D10678C6F30316032EE9 -:1034D00006D0042E04D0052E02D006290AD011E011 -:1034E0004FF08046C6F80C31C6F81031834E361FB7 -:1034F000336002E01678360704D10678C6F3031667 -:10350000032E02D0062905D00CE07C4F0326643739 -:103510003E600AE01678360704D10678C6F3031633 -:10352000032E02D006290DD014E0764F05263E600A -:10353000744E78363560734E083633603F263F1D33 -:103540003E6002E01678360704D10678C6F303160B -:10355000052E02D0062957D062E06B4E36686B4FBD -:103560003E60694E361D36683F1D3E60664E083629 -:1035700036683F1D3E60644E0C3636683F1D3E6027 -:10358000614E103636683F1D3E605F4E1436366819 -:103590003F1D3E605C4E183636685C4F20373E60FB -:1035A000594E1C3636683F1D3E60574E20363668F1 -:1035B0003F1D3E60544E243636683F1D3E60524EDD -:1035C000283636683F1D3E604F4E2C3636683F1D0C -:1035D0003E604D4E303636684C4F40373E604A4E66 -:1035E000343636683F1D3E60474E383636683F1DDC -:1035F0003E60454E3C3636683F1D3E60424E40368A -:1036000036683F1D3E6002E01678360708D106781E -:10361000C6F30316032E06D0042E04D0052E02D0C6 -:10362000062907D019E0D4F85812394A01F04F01A1 -:10363000116002E0117809070FD10078C0F3031080 -:10364000032803D0042801D0052806D13148016899 -:10365000C90702D06FF001010160D4F830010628DB -:1036600008D1D4F83401062804D12B48016841F46C -:103670008061016022487438016841F47001016082 -:10368000BFF34F8FBFF36F8F4FF01021D1F80002BF -:10369000002803DBD1F80402002822DA1F4A156053 -:1036A0001F480468002CFCD01524C1F800420568AE -:1036B000002DFCD0C1F8044201680029FCD0136041 -:1036C00001680029FCD0BFF34F8F0D48F038016826 -:1036D000144A01F4E06111430160BFF34F8F00BF52 -:1036E000FDE7124910480860F0BD0000E00F00F04F -:1036F000403501400DF0ADBA00C007403C05004028 -:10370000FCED00E0105600400404001020C500400D -:10371000E40E0040000400403C17004004E5014076 -:1037200000E401400400FA050090D00328B5002011 -:103730000A48D0F8441101290ED1D0F804138903A6 -:103740000AD50021C0F844110121C1600448C279A2 -:103750000AB109F05FBC01727047000000A0004090 -:10376000B4B400200148006800470000E0B3002026 -:1037700002E008C8121F08C1002AFAD1704770473A -:10378000002001E001C1121F002AFBD17047000098 -:103790000121202803DA81400548014003E0402848 -:1037A00002DA2038814009B10120704700207047BB -:1037B000FC06FFBD082806D228B1012803D0042842 -:1037C00001D0012070470020704700001CB50E4852 -:1037D0000D4C90F830002834C0002070002060703C -:1037E000A070204609F0F2FDE0700420ADF804005E -:1037F00000220094114668460BF0E4FD002802D038 -:10380000002000F027F81CBDB4B4002038B50446F1 -:1038100000208DF80000684600F08AF90A488442CA -:103820000CD0BFF34F8F09480168094A01F4E061E9 -:1038300011430160BFF34F8F00BFFDE79DF800000B -:1038400000F09AF938BD0000FECADDBA0CED00E0C8 -:103850000400FA050EB500210091CDE901106A4679 -:1038600044F20100FFF7D2FF0EBD00002DE9F84F32 -:103870002C4C8146924660880E4681424FD80027E4 -:103880004FF6FF788DF80070684600F051F9227805 -:103890006078A188884201DA401C00E00020C0B2B4 -:1038A000904204D19DF8000000F066F935E065789B -:1038B0006078884201DA401C00E0002060702078C7 -:1038C0006278824201D3101A02E0081A1044401CA8 -:1038D000E18880B2884200D9E0809DF8000000F0C5 -:1038E0004BF9454519D0E068B9F1000F40F835A013 -:1038F0000DD066B161882069324605FB010049465A -:10390000FFF79AFCE06800EBC500868002E000EB60 -:10391000C50087800020BDE8F88F0420FBE7092060 -:10392000F9E70000E8B3002010B50F4C03E0401C9D -:1039300000E000202070A068002814D12078617871 -:10394000814210D0227861882069E36802FB01007F -:1039500003EBC20153F83220898890472078A18870 -:103960008842E6DAE3E710BDE8B3002030B5CB00CB -:1039700008339DB293074FF0000401D0072030BDFB -:10398000054BDA602A441A615C701C70588099807B -:10399000DC80002030BD0000E8B3002008B5002026 -:1039A0008DF80000684600F0C3F805498868421C9D -:1039B00001D0401C88609DF8000000F0DDF808BDD3 -:1039C000E8B30020074801784078064A8842928888 -:1039D00001D3401A02E0511A0844401C101A80B268 -:1039E00070470000E8B3002008B500208DF8000003 -:1039F000684600F09DF80548816809B1491E81605C -:103A00009DF8000000F0B8F808BD0000E8B3002001 -:103A1000074B9B7823B12AB120B10068037C1BB10E -:103A200008207047072070474174426100207047AA -:103A30007CCE002070B50BF03FF8104800240B211D -:103A4000047044700E4D817014206C602C706C708A -:103A5000FFF76CFC07211420FFF789FC1420FFF707 -:103A600070FC0848046007211120FFF780FC05481E -:103A7000001F0068A860002070BD00007CCE002000 -:103A8000FCB30020081501402DE9FC47DFF87890D1 -:103A900099F8023073B368B3052902D20720BDE854 -:103AA000FC87436933B3437C012B25D000270446B0 -:103AB0000025884616468DF80050684600F038F814 -:103AC00001A80CF0E5FAC8B1012101700F4944606A -:103AD0000968C0E90218C0E904769DF8040089F875 -:103AE00001009DF8000000F047F81420FFF734FCB7 -:103AF0002846D4E70820D2E70F46D8E704259DF8EA -:103B0000000000F039F8F3E77CCE002004150140F6 -:103B10000649897839B130B1416921B10021017478 -:103B200002210BF0CDBE0820704700007CCE0020A3 -:103B300030B5EFF3108172B60D4A9468012324B1B9 -:103B40000370002900D162B630BD93604FF0E023CE -:103B5000D3F88051074C25401560C3F88041D3F855 -:103B6000844154605A17C3F8842100220270E8E7A8 -:103B700088CF0020FC06FFBD0B498A68002A11D0BF -:103B800000280FD1EFF3108072B60B684FF0E022DF -:103B9000C2F800314B68C2F8043100228A60002864 -:103BA00000D162B67047000088CF00202DE9F041B7 -:103BB000064608680C46411C4FF0A0474FF001052F -:103BC00006D005FA00F1C7F80815206809F09AFF39 -:103BD0006068411C02D0002109F082FF3168A069B1 -:103BE000C1F82405607D227D31681043C1F86C0561 -:103BF000D4E900123068C0F81425C0F80C15207DF7 -:103C0000012815D1A068411C02D0002109F068FFED -:103C1000E068411C05D08540C7F80855E06809F008 -:103C200071FFD4E902123068C0F80825C0F81015F9 -:103C3000BDE8F0812DE9F041064608680C46411CBC -:103C40004FF0A0474FF0010506D005FA00F1C7F884 -:103C50000815206809F060FF6068411C02D000214F -:103C600009F047FF3168A069C1F82405607D217D16 -:103C700032680843C2F86C05D4E900123068C0F815 -:103C80000C15C0F81425207D012815D1A068411C11 -:103C900002D0002109F02DFFE068411C05D08540CD -:103CA000C7F80855E06809F037FFD4E90212306818 -:103CB000C0F80825C0F81015BDE8F0812DE9FC47D3 -:103CC0001D46070090460E460AD036B100240194E6 -:103CD00038780DF10409692804D00720BDE8FC8775 -:103CE0000E20FBE70120134601904A4638460CF0AF -:103CF00039F90028F2D12B464A463146384600941D -:103D000006F0D8FF0028E9D12B68EBB30025D8F8DE -:103D100000002C4624281FD00CDC212815D004DC00 -:103D200001281BD020281DD10DE0222810D02328E7 -:103D300018D10FE0402813D041282DD0A0282DD035 -:103D4000A1280FD12CE0184D00E0184D9C1C09E073 -:103D5000174DFBE7174DF9E7174DF7E7174D00E053 -:103D6000174D1C462038032806D84A4631463846A7 -:103D70000CF030F90028B1D123464A463146384686 -:103D8000009508F05DFE00E001E00028A6D1019852 -:103D9000B04207D00920A1E70A4DE2E70A4DE0E76B -:103DA0000A4DDEE7002099E7A5490200F1750200FF -:103DB0005D8A02001F730200319E0200DD3D020099 -:103DC00065490200E1480200C7870200B987020086 -:103DD00013460A46014669200AF086BF18B112B19F -:103DE0000BB10CF0F7B80E20704738B568B162B16E -:103DF0005BB11C466B460CF0EDF8002804D19DF831 -:103E0000001001F00101217038BD0E2038BD08B549 -:103E100051B14BB140B1007800F001008DF80000C5 -:103E200068460CF0F9F808BD0E2008BD2DE9F843EE -:103E300016465FEA00082BD056B34BB3164F1C460C -:103E40000D46009708F01AFE002822D1631C324666 -:103E500029464046009708F011FE002819D1A31CFE -:103E60003246294640460CF0B5F8002811D1E31C33 -:103E70003246294640460CF0ADF8002809D101B081 -:103E8000231D324629464046BDE8F0430CF0A2B857 -:103E90000E20BDE8F883000069A502002DE9F84373 -:103EA0001D4690460E002AD04DB340B3154F044630 -:103EB000009708F03DFE002822D12B4642463146AD -:103EC000601C009708F034FE002819D12B464246AA -:103ED0003146A01C0CF0A0F8002811D12B46424618 -:103EE0003146E01C0CF098F8002809D101B02B46AF -:103EF00042463146201DBDE8F0430CF08DB80E203F -:103F0000BDE8F883A7A50200F8B5144606000D46E3 -:103F10001ED0ECB100200090631C6A4630460CF0C5 -:103F200059F8002813D123466A46294630460CF03A -:103F300051F800280BD1631D6A46294630460CF023 -:103F400049F8002803D10099A94200D00920F8BD02 -:103F50000E20F8BD17B581B0144669B164B10020D8 -:103F600000906B4601A822680CF013F8002801D1DC -:103F70000099216004B010BD0E20FBE728B111B1FB -:103F80000078602803D0072070470E207047012971 -:103F900001D0092070470020704713460A460146A9 -:103FA00060200AF0A1BE30B41AB313B308B304887A -:103FB000332C7DD020DC332C7BD2DFE804F0FE569E -:103FC00053FEFEFEFEFEFEFEFEFEFEFEFEFE7D77C4 -:103FD000595F6268836B86656E7471F8805CFB8CD8 -:103FE000898F92FEFEFEFEFEFEFEFEFEFEFEA5B4E4 -:103FF00095000E2030BC7047532C7DD018DC3A2C35 -:104000007BD008DCA4F13404062C52D2DFE804F0A3 -:104010009172828E887F502C70D004DC3B2C7CD037 -:104020003C2C46D190E0512C6AD0522C41D19DE0DD -:10403000722C66D00EDC572C7DD006DC542C7BD045 -:10404000552C7AD0562C34D184E0702C76D0712C3B -:104050002FD197E0733C052C2BD2DFE804F0999C1C -:104060009FA2A50030BC00F02BB930BC00F074B9A1 -:1040700030BC01F0B5BA30BC01F0EABA30BC01F096 -:10408000BDBE30BC01F04ABE30BC01F0FBB930BC53 -:1040900001F00CBD30BC01F0C1B930BC01F02CBB4B -:1040A00030BC01F0C5BD30BC01F040BF30BC01E008 -:1040B0001DE082E001F036BC30BC01F063BB30BCD7 -:1040C00001F0E2BE30BC01F078BC30BC01F0A8BC0D -:1040D00030BC01F02FBD30BC01F072BD30BC01F02E -:1040E000E9BB30BC01F0AEBB30BC03F05FBB30BC01 -:1040F00003F09ABC30BC05E029E022E030E00CE09F -:1041000031E042E003F0C4BB30BC03F0C1BD30BCC1 -:1041100003F04EBD30BC03F02BBE30BC03F00CBF2F -:1041200030BC03F09FBF30BC03F092BE30BC03F044 -:104130001BBC30BC03E01FE00FE01AE01FE003F0FF -:10414000ADBA30BC03F0E2BC30BC03F046BF30BCBB -:1041500004F03CBD30BC04F0B9BE30BC04F04CBE31 -:1041600030BC04F0F3BE30BC04F0C6BD30BC04F07B -:104170006DBE30BC04F0EABC30BC04F066BD30BC9F -:1041800006F024B830BC05F0DDBF30BC05F09ABFA6 -:1041900030BC05F0B8BE30BC05F048BF30BC05F0FF -:1041A00077BE30BC05F0E1BE30BC06F059B830BC7B -:1041B00001F0B6B830BC01F06FBD062000211960D7 -:1041C00018E700002DE9F04701883B4E40F2F31953 -:1041D0004FF6FF7510291BD011293ED0122954D05B -:1041E000502946D1C188F289841D914241D161890B -:1041F00002293ED18688304609F0F2F8050038D011 -:1042000004F10C0006F0E4F9A8B3294630464EE06C -:10421000C17B8788044601292BD1A846284609F08E -:10422000DFF8050017D02F8000202872234843466E -:104230004A460168C5F80A104068C5F80E0004F146 -:10424000100105F10A0009F01FF96872F0890028D1 -:104250000FD129462AE0042013E0808809F0C0F835 -:10426000040006D06068FFF753FC08B10AF034FD83 -:104270002580BDE8F087FFE76868FFF749FC002864 -:10428000F7D0BDE8F0470AF027BD878806463846D4 -:1042900009F0A6F80400ECD02B464A4606F10801C6 -:1042A00004F10A0009F0F0F8607221463846BDE8D2 -:1042B000F04708F049B80000F8CC002080B3002097 -:1042C0002DE9FE431D461646040007D036B12DB138 -:1042D0002088022804D00720BDE8FE830E20FBE7DB -:1042E00000270197D5F8008002200DF10409ADF8F0 -:1042F00008004B464246314602A80BF019FE002842 -:10430000EAD14B4642463146201D0BF011FE0028F3 -:10431000E2D14B464246314604F108000BF07CFEE8 -:104320000028D9D14B464246314604F110000BF02B -:10433000FFFD0028D0D100974B4642463146E06849 -:1043400006F0E6FC0028C7D1A08806F0A9FD0028E9 -:10435000C2D101992960BFE72DE9FC411D461646EF -:10436000040007D036B12DB12088012804D00720E1 -:10437000BDE8FC810E20FBE7002000902F680120A3 -:10438000E846ADF8040043463A46314601A80BF032 -:10439000CFFD0028ECD143463A463146201D0BF0B4 -:1043A000C7FD0028E4D143463A46314604F10800EF -:1043B0000BF032FE0028DBD100992960D8E77CB5EC -:1043C0000C4640B12CB100230193057801A96D2D55 -:1043D00003D007207CBD0E207CBD0125CDE9003532 -:1043E00013460A46214606F065FC0028F4D10198E0 -:1043F000A04201D009207CBD00207CBD2DE9FF41F9 -:1044000082B0984614460F0028D03CB3002000909C -:1044100025686D206E468DF8040033462A4601A8B3 -:104420000BF0FAFD002816D133462A46394602A879 -:104430000BF0AFFD00280ED1029848B95FEA0800E2 -:1044400039462A46334609D000F05AF8002802D1EE -:1044500000982060002006B0BDE8F0810E20FAE749 -:104460001CB50C4640B12CB100210191037801A983 -:104470006C2B03D007201CBD0E201CBD0123019313 -:10448000074B009313460A46214606F013FC00280A -:10449000F3D10198A04201D009201CBD00201CBD11 -:1044A000B144020013460A4601466C200AF01CBCC7 -:1044B0002DE9FC411646070020D0FEB1F3B11C46A1 -:1044C0000D4601AB0BF086FD002815D106200090AB -:1044D000631C3246294638460BF0ABFD00280BD151 -:1044E0009DF80420217862F3000121709DF80420DA -:1044F000520862F347012170BDE8FC810E20FBE702 -:104500002DE9FC411D4617460E0013D095B188B128 -:10451000044600788DF8040001A80BF07DFD00280A -:1045200006D13B4632460621601C00950BF097FDF4 -:10453000BDE8FC810E20FBE738B5D0B1CAB1C3B1EC -:104540001C466B460BF046FD002811D19DF800205B -:10455000217862F3000121709DF80020520862F377 -:10456000410121709DF80020920862F382012170C0 -:1045700038BD0E2038BD2DE9FC410C46DDE908862A -:10458000050023D02CB100200190287801AF7228BB -:1045900002D00720BDE8FC8101200190B3B1AEB18B -:1045A000009313463A46284608F0CBFF0028F1D185 -:1045B00043463A4621462846009608F0C2FF0028A6 -:1045C000E8D10198A04203D00920E3E70E20E1E7FB -:1045D0000020DFE713460A46014672200AF084BB3A -:1045E000F8B51646070037D0AEB3A3B31C460D4648 -:1045F0000BF0F0FC00282DD118480090231D324606 -:104600002946384606F056FB002823D104F108035A -:104610003246294638460BF0DDFC00281AD104F159 -:104620000A033246294638460BF073FC002811D1A4 -:1046300004F10C033246294638460BF06AFC002888 -:1046400008D10748009004F10E0332462946384647 -:1046500008F000FAF8BDFFE70E20FBE7B1440200C6 -:10466000394502002DE9FC411F460C46050026D0C5 -:104670002CB100200190287801AE732802D00720C9 -:10468000BDE8FC8101200190CAB11068B8B1406852 -:10469000A8B10D48134600903246284606F00AFBA2 -:1046A0000028EDD13B463246214628460BF092FCCD -:1046B0000028E5D10198A04203D00920E0E70E20B0 -:1046C000DEE70020DCE70000E145020013460A4671 -:1046D000014673200AF008BB13460A4601467420BF -:1046E0000AF002BB7CB50C46D0B12CB1002301937B -:1046F000057801A9792D01D007207CBD0125019500 -:1047000072B1156865B1009313460A46214606F05A -:10471000D1FA0028F1D10198A04203D009207CBD34 -:104720000E207CBD00207CBD2DE9FF4184B0984661 -:1047300014460F0019D0C4B10020019025687920DB -:1047400001AE8DF8080033462A4602A80BF064FC3F -:1047500000280BD133462A46394604A80BF019FC31 -:10476000002803D1049870B903E00E2008B0BDE81A -:10477000F0810748009033462A463946404606F005 -:10478000C7FA0028F2D1019820600020EEE700006F -:1047900031FF020038B50C46B8B12CB100210091B0 -:1047A00003786946782B01D0072038BD0123009398 -:1047B0005AB113460A4621460BF0ABFB0028F4D150 -:1047C0000098A04203D0092038BD0E2038BD00203B -:1047D00038BD13460A46014678200AF085BA2DE90D -:1047E000FE431F46DDF828800C46050022D0F4B1B8 -:1047F00000200290287802AE802818D10120029073 -:10480000C2B1BFB11346324628460BF082FB0028E6 -:104810000ED13B463246214628460BF0DBFB0028F2 -:1048200006D1387840B1012808D0022808D00720E6 -:10483000BDE8FE830E20FBE7002202E0062200E036 -:10484000102200920192434632462146284606F045 -:1048500027F90028ECD10298A04201D00920E7E70F -:104860000020E5E713460A46014680200AF03CBADC -:104870002DE9FC411C460D46060025D02DB1002037 -:104880000190307801AF7E2802D00720BDE8FC817E -:1048900001200190C2B1BCB12068A8B113463A46CC -:1048A00030460BF036FB0028F0D109480090234633 -:1048B0003A462946304606F0FDF90028E6D101982F -:1048C000A84203D00920E1E70E20DFE70020DDE762 -:1048D000B16F020013460A4601467E200AF004BA70 -:1048E0002DE9FE4316465FEA000836D0A6B39BB317 -:1048F0005F891B4800901C460D46404608F0AAF808 -:10490000002827D102AB3246294640460BF062FB15 -:1049100000281FD19DF8080004F1080300F00300EF -:1049200060703246294640460BF0F3FA002811D158 -:1049300004F10A033246294640460BF0EAFA002801 -:1049400008D12089231DCDE9007032462946404612 -:1049500006F0A6F8BDE8FE83FFE70E20FAE70000A8 -:10496000A94B02002DE9F0411646070017D0B6B159 -:10497000ABB11C460D460BF02DFB002810D1631C7B -:104980003246294638460BF025FB002808D1A31CE7 -:10499000324629463846BDE8F0410BF01BBB0E20DD -:1049A000BDE8F0812DE9F041164607000FD076B141 -:1049B0006BB11C460D460BF00DFB002808D1A31C63 -:1049C000324629463846BDE8F0410BF0A2BA0E2027 -:1049D000BDE8F0812DE9FC411C460D46060025D0BE -:1049E0002DB100200190307801AF752802D007204A -:1049F000BDE8FC8101200190C2B1BCB12068A8B122 -:104A000013463A4630460BF084FA0028F0D10948A4 -:104A1000009023463A462946304606F04BF90028D6 -:104A2000E6D10198A84203D00920E1E70E20DFE794 -:104A30000020DDE7454A020013460A46014675207C -:104A40000AF052B92DE9F041164607001FD0F6B121 -:104A5000EBB11C460D460BF05CFA002818D1A31CE4 -:104A60003246294638460BF054FA002810D1231D4F -:104A70003246294638460BF04CFA002808D1A31DCF -:104A8000324629463846BDE8F0410BF042BA0E20C6 -:104A9000BDE8F0812DE9F0411D4617460E001ED0FD -:104AA000EDB1E0B104460BF043FA002818D12B46D3 -:104AB0003A463146A01C0BF03BFA002810D12B4699 -:104AC0003A463146201D0BF033FA002808D12B4618 -:104AD0003A463146A01DBDE8F0410BF029BA0E2040 -:104AE000BDE8F0812DE9FC4198460C46050021D037 -:104AF0002CB100260196287801AF872802D0072024 -:104B0000BDE8FC8101200190A2B113463A46284637 -:104B10000BF0FFF90028F3D143463A4621462846D8 -:104B2000009606F0C7F80028EAD10198A04203D009 -:104B30000920E5E70E20E3E70020E1E72DE9FF414A -:104B400084B01C46150088461AD0CCB100200190D4 -:104B50002668872001AF8DF808003B46324629467B -:104B600002A80BF059FA00280BD13B4632462946E1 -:104B700004A80BF00EFA002803D1049870B903E0E2 -:104B80000E2008B0BDE8F081064800903B46324652 -:104B90002946404606F0BCF80028F2D10198206072 -:104BA0000020EEE7F54B020038B5A0B19AB193B101 -:104BB0001C466B460BF00EFA00280BD19DF8002026 -:104BC000217862F3030121709DF80020120962F33D -:104BD0000711217038BD0E2038BD08B541B13BB179 -:104BE00030B100788DF8000068460BF015FA08BD6A -:104BF0000E2008BDF8B51D4617460E0012D08DB127 -:104C000080B1044608480090204607F055FF002870 -:104C100009D101B02B463A463146601CBDE8F04050 -:104C20000BF0FAB90E20F8BDDB4B020013460A4622 -:104C300001468D200AF058B82DE9FC471D46DDE9F4 -:104C40000A490E46070040D036B10020019038785E -:104C50000DF104088C2802D00720BDE8FC87012054 -:104C600001908AB3106878B375B3286860B35CB3F9 -:104C7000206848B31748134600904246384606F06D -:104C800019F80028E9D1144800902B4642463146D5 -:104C9000384606F00FF80028DFD110480090234670 -:104CA00042463146384606F005F80028D5D14B4635 -:104CB0004246314638460BF08DF90028CDD1019897 -:104CC000B04204D00920C8E7FFE70E20C5E7002066 -:104CD000C3E70000B14402000D6B0200454A020028 -:104CE00013460A4601468C2009F0FEBF2DE9F0412B -:104CF0001D4617460E0016D0ADB1A0B104460BF00C -:104D000017F9002810D12B463A463146A01C0BF06B -:104D10000FF9002808D12B463A463146201DBDE840 -:104D2000F0410BF005B90E20BDE8F0812DE9F0410E -:104D3000164607001FD0F6B1EBB11C460D460BF02E -:104D4000E8F8002818D1A31C3246294638460BF053 -:104D5000E0F8002810D1231D3246294638460BF0D2 -:104D6000D8F8002808D1A31D324629463846BDE8A8 -:104D7000F0410BF0CEB80E20BDE8F0812DE9F041F6 -:104D80001D4617460E001ED0EDB1E0B104460BF0F3 -:104D9000CFF8002818D12B463A463146A01C0BF01C -:104DA000C7F8002810D12B463A463146201D0BF09B -:104DB000BFF8002808D12B463A463146A01DBDE871 -:104DC000F0410BF0B5B80E20BDE8F0812DE9FC47AD -:104DD0009846DDF828900C46050009D02CB1002635 -:104DE0000196287801AF902804D00720BDE8FC8701 -:104DF0000E20FBE70120134601903A4628460BF0AF -:104E000088F80028F2D10D48009043463A462146E2 -:104E1000284605F04FFF0028E8D14B463A46214688 -:104E20002846009605F046FF0028DFD10198A042F1 -:104E300001D00920DAE70020D8E700002D4D02005C -:104E40002DE9FF4184B0984614460F0019D0C4B133 -:104E5000002001902568902001AE8DF808003346AF -:104E60002A4602A80BF0D8F800280BD133462A4670 -:104E7000394604A80BF08DF8002803D1049870B9C6 -:104E800003E00E2008B0BDE8F081074800903346EB -:104E90002A463946404605F03BFF0028F2D10198EA -:104EA00020600020EEE70000ED4C02002DE9FF5FDE -:104EB0001D460E9F144688465FEA000942D0B8F1AD -:104EC000000F07D0002602A8CDE9010699F80000DE -:104ED0006F2803D0072004B0BDE8F09F01200290A6 -:104EE0007CB3206868B3006858B355B3286840B3F2 -:104EF000006830B33B4641464846019A0BF06AF8D9 -:104F00000028E8D103AB41464846019A0BF062F80D -:104F10000028E0D19DF80C00012815D0266003ABD5 -:104F200041464846019A0BF055F80028D3D19DF828 -:104F30000C0001281ED02E60029941452DD0092079 -:104F4000C9E7FFE70E20C6E7D4F800A00024DFF889 -:104F500050B00BE00AEB8403CDF800B04146484660 -:104F6000019A05F0A7FE0028B5D1641C3878A0424C -:104F7000F0D8D4E72D6800240A4E0AE005EB84033C -:104F8000009641464846019A05F094FE0028A2D1B9 -:104F9000641C3878A042F1D8CEE700209BE70000DF -:104FA000955F02001560020013460A4601466F2015 -:104FB00009F09ABE2DE9FC4190460C46050022D02E -:104FC0002CB100260196287801AF7D2802D0072059 -:104FD000BDE8FC8101200190ABB10D4800903A463C -:104FE000284605F067FE0028F2D143463A4621469E -:104FF0002846009605F05EFE0028E9D10198A042FF -:1050000003D00920E4E70E20E2E70020E0E70000FB -:1050100013FF02002DE9FF4383B01E000E9C1546CE -:1050200089461BD0D4B100200190D4F800807D20A7 -:1050300001AF8DF808003B464246314602A80AF00F -:10504000EBFF00280BD13B464246314603A80AF04D -:10505000A0FF002803D10398C0B903E00E2007B0D9 -:10506000BDE8F0830B4800903B4642463146284657 -:1050700005F04EFE0028F2D145B10097298843463D -:10508000324648460AF0EBFF0028E8D1019820603C -:105090000020E4E731FF02002DE9FC419846089E1C -:1050A0000C46050027D02CB100200190287801AFD4 -:1050B0007C2802D00720BDE8FC8101200190D2B1FC -:1050C000B8F1000F17D0B6B10D48134600903A461C -:1050D000284605F0EFFD0028EDD143463A4621462B -:1050E0002846009608F0FDF90028E4D10198A04276 -:1050F00003D00920DFE70E20DDE70020DBE700001A -:10510000A94B020013460A4601467C2009F0ECBD7B -:10511000F8B51F460C46050020D02CB100200090A9 -:1051200028786E46762801D00720F8BD012000902F -:10513000A2B19FB11346324628460AF0EAFE002883 -:10514000F3D13B463246214628460AF043FF002869 -:10515000EBD10098A04203D00920F8BD0E20F8BD85 -:105160000020F8BD13460A460146762009F0BCBD72 -:105170002DE9FC411646070020D0FEB1F3B1102006 -:1051800000901C460D4638460AF053FF002813D104 -:1051900001AB3246294638460AF01CFF00280BD1E5 -:1051A0009DF80410227C4B0861F3000263F3410276 -:1051B000890861F387022274BDE8FC810E20FBE7B9 -:1051C0002DE9FC411D4617460E001DD0E5B1D8B1B2 -:1051D00013460A460446102100950AF040FF0028B5 -:1051E00010D1207C2B46C0F34002014662F35F01E0 -:1051F00020F0030001438DF804103A46314601A81F -:105200000AF00AFFBDE8FC810E20FBE7F8B5164660 -:10521000070014D09EB193B10A4800901C460D4679 -:10522000384607F017FC002808D10748009004F121 -:10523000120332462946384607F00CFCF8BD0E2012 -:10524000F8BD00007151020071630200F8B51D46FF -:1052500017460E0013D095B188B104460948009056 -:10526000204607F029FC002808D1074800902B466B -:105270003A46314604F1120007F01EFCF8BD0E203C -:10528000F8BD0000C15102009F6302002DE9FC41FE -:105290001D46089C0E46070033D036B10020019011 -:1052A00038780DF10408852802D00720BDE8FC817C -:1052B000012001902AB324B31DB3206808B32868E5 -:1052C000F8B11346424638460AF023FE0028EDD1D5 -:1052D0000E4800902B4642463146384605F0EAFC1F -:1052E0000028E3D10A48009023464246314638461A -:1052F00005F0E0FC0028D9D10198B04203D0092084 -:10530000D4E70E20D2E70020D0E70000716302004E -:105310007151020013460A460146852009F0E4BC9B -:105320002DE9FE431D461646040007D036B12DB1C7 -:1053300020881D2804D00720BDE8FE830E20FBE74F -:10534000002001902F681D200DF10408ADF8080021 -:1053500043463A46314602A80AF0EAFD0028EBD15E -:1053600043463A463146201D0AF0E2FD0028E3D1CB -:105370000648009043463A46314604F1080007F0DB -:1053800091FB0028D8D101992960D5E791530200FB -:105390002DE9FC471D4691460E003AD0C5B3B8B37F -:1053A0000446C07B1C4FC0F34102014662F35F011B -:1053B0008DF804104FEAD0084A463146204600973F -:1053C00007F07AFB002821D12B464A463146E01DE2 -:1053D000009707F071FB002818D12B464A4631464A -:1053E00004F10E000AF018FE00280FD12B464A46A1 -:1053F000314601A80AF010FE002807D14B4632467C -:10540000414604F11000009508F0B3F8BDE8FC87B0 -:10541000FFE70E20FAE70000014502002DE9FC41FC -:105420001D461646040007D036B12DB12088172836 -:1054300004D00720BDE8FC810E20FBE7002000908F -:105440002F681720E846ADF8040043463A46314637 -:1054500001A80AF06DFD0028ECD143463A463146DA -:10546000201D0AF065FD0028E4D143463A46314646 -:1054700004F108000AF0D0FD0028DBD10099296072 -:10548000D8E700002DE9FF411D461646040008D06C -:105490003EB135B12088192805D0072004B0BDE8F9 -:1054A000F0810E20FAE7002001902F6819200DF1FD -:1054B0000408ADF8080043463A46314602A80AF00F -:1054C00037FD0028EAD143463A463146201D0AF00E -:1054D0002FFD0028E2D11648009043463A46314657 -:1054E00004F1080007F0DEFA0028D7D1A08803A94C -:1054F00005F06CFC18B1002001992960CEE70D4839 -:10550000009003980C49C0EB001000EB800001EB09 -:10551000800043463A463146001D07F0C3FA002892 -:10552000BCD1A08805F034FC0028E5D0B6E7000027 -:105530003D550200356E020094CF00202DE9FC415C -:105540001D4690460E0045D0F5B3E8B341780446B9 -:10555000C1F38002084662F39F00C1F3C00140EA34 -:10556000C1008DF804004246314620460AF054FD41 -:1055700000282DD12B464246314601A80AF04CFDA9 -:10558000002825D1144F2B4642463146A01C0097D7 -:1055900007F092FA00281BD12B4642463146E01C08 -:1055A000009707F089FA002812D10C4F2B4642468B -:1055B0003146201D009707F07FFA002808D12B46BE -:1055C00042463146601D00E004E0009707F074FA9F -:1055D000BDE8FC810E20FBE7716E0200E76C020063 -:1055E0002DE9FE431D461646040007D036B12DB105 -:1055F0002088122804D00720BDE8FE830E20FBE798 -:10560000002001902F6812200DF10408ADF8080069 -:1056100043463A46314602A80AF08AFC0028EBD1FC -:1056200043463A463146201D0AF082FC0028E3D169 -:105630000648009043463A46314604F1080007F018 -:1056400031FA0028D8D101992960D5E7DD5602004A -:105650002DE9FE431D461646040007D036B12DB194 -:1056600020881F2804D00720BDE8FE830E20FBE71A -:10567000002001902F681F200DF10408ADF80800EC -:1056800043463A46314602A80AF052FC0028EBD1C4 -:1056900043463A463146201D0AF04AFC0028E3D131 -:1056A0000648009043463A46314604F1080007F0A8 -:1056B000F9F90028D8D101992960D5E7C15602002F -:1056C00038B531B12BB120B1034C009407F0F4F997 -:1056D00038BD0E2038BD0000954A020038B531B102 -:1056E0002BB120B1034C009407F0E6F938BD0E2031 -:1056F00038BD0000954A02002DE9FE431D461646BE -:10570000040007D036B12DB120881A2804D0072014 -:10571000BDE8FE830E20FBE7002001902F681A20D1 -:105720000DF10408ADF8080043463A46314602A898 -:105730000AF0FEFB0028EBD143463A463146201DD5 -:105740000AF0F6FB0028E3D10648009043463A46AB -:10575000314604F1080007F0A5F90028D8D10199D5 -:105760002960D5E76957020038B531B12BB120B1B6 -:10577000034C009407F0A0F938BD0E2038BD00009E -:10578000F54B02002DE9FE431D461646040007D0E6 -:1057900036B12DB12088102804D00720BDE8FE8343 -:1057A0000E20FBE7002001902F6810200DF1040867 -:1057B000ADF8080043463A46314602A80AF0B8FB65 -:1057C0000028EBD143463A463146201D0AF0B0FB93 -:1057D0000028E3D10648009043463A46314604F19A -:1057E000080007F05FF90028D8D101992960D5E7B2 -:1057F000F5570200F8B51D4617460E001BD0D5B16F -:10580000C8B104460D480090204607F055F900281D -:1058100010D12B463A463146E01D0AF0FDFB002828 -:1058200008D1074800902B463A46314604F108005B -:1058300007F042F9F8BD0E20F8BD00000145020056 -:10584000954A02002DE9FE431D461646040007D086 -:1058500036B12DB12088242804D00720BDE8FE836E -:105860000E20FBE7002001902F6824200DF1040892 -:10587000ADF8080043463A46314602A80AF058FB04 -:105880000028EBD143463A463146201D0AF050FB32 -:105890000028E3D10648009043463A46314604F1D9 -:1058A000080007F0FFF80028D8D101992960D5E752 -:1058B0007D4D02002DE9FE431D461646040007D02B -:1058C00036B12DB12088232804D00720BDE8FE83FF -:1058D0000E20FBE7002001902F6823200DF1040823 -:1058E000ADF8080043463A46314602A80AF020FBCC -:1058F0000028EBD143463A463146201D0AF018FBFA -:105900000028E3D10648009043463A46314604F168 -:10591000080007F0C7F80028D8D101992960D5E719 -:105920007D4D02002DE9FF411D461646040008D0BA -:105930003EB135B12088112805D0072004B0BDE85C -:10594000F0810E20FAE7002001902F6811200DF160 -:105950000408ADF8080043463A46314602A80AF06A -:10596000E7FA0028EAD143463A463146201D0AF0BC -:10597000DFFA0028E2D10C48009043463A4631460F -:1059800004F1080007F08EF80028D7D1A08803A9F9 -:1059900005F01CFA20B9A08805F0FAF90028CDD14D -:1059A000019900202960C9E7AD59020019B113B16E -:1059B00008B10AF031BB0E2070472DE9FC411D46AD -:1059C0001646040007D036B12DB12088162804D021 -:1059D0000720BDE8FC810E20FBE7002000902F6827 -:1059E0001620E846ADF8040043463A46314601A881 -:1059F0000AF09EFA0028ECD143463A463146201D73 -:105A00000AF096FA0028E4D143463A46314604F1BA -:105A100008000AF001FB0028DBD100992960D8E7D3 -:105A20002DE9FF411D461646040008D03EB135B1B0 -:105A30002088182805D0072004B0BDE8F0810E208A -:105A4000FAE7002001902F6818200DF10408ADF846 -:105A5000080043463A46314602A80AF069FA00288F -:105A6000EAD1207B434600F001008DF80C003A4655 -:105A70003146201D0AF05CFA0028DDD10A4800906A -:105A800043463A463146A06805F042F90028D3D192 -:105A900043463A46314603A80AF0BEFA0028CBD165 -:105AA00001992960C8E70000576302002DE9FF4112 -:105AB0001D46904604000AD0B8F1000F07D035B15A -:105AC0002088152805D0072004B0BDE8F0810E20FD -:105AD000FAE7002001902F68152001AEADF808000C -:105AE00033463A46414602A80AF022FA0028EBD192 -:105AF000A07B334600F001008DF80C003A46414689 -:105B0000201D0AF015FA0028DED13B464246062148 -:105B100004F1080000960AF0A2FA0028D4D1334616 -:105B20003A46414603A80AF077FA0028CCD10199F9 -:105B30002960C9E72DE9FC411D461646040007D03F -:105B400036B12DB12088222804D00720BDE8FC8181 -:105B50000E20FBE7002000902F682220E846ADF8D9 -:105B6000040043463A46314601A80AF0E1F900280C -:105B7000ECD143463A463146201D0AF0D9F90028B7 -:105B8000E4D143463A46314604F108000AF044FAAB -:105B90000028DBD143463A46314604F109000AF0B9 -:105BA0003BFA0028D2D143463A46314604F10A0076 -:105BB0000AF032FA0028C9D100992960C6E700002E -:105BC0002DE9FE431D461646040007D036B12DB11F -:105BD0002088212804D00720BDE8FE830E20FBE7A3 -:105BE000002001902F6821200DF10408ADF8080075 -:105BF00043463A46314602A80AF09AF90028EBD10A -:105C000043463A463146201D0AF092F90028E3D176 -:105C10000648009043463A46314604F1080006F033 -:105C200041FF0028D8D101992960D5E79966020083 -:105C30002DE9FC411D461646040007D036B12DB1B2 -:105C400020881C2804D00720BDE8FC810E20FBE73B -:105C5000002000902F681C20E846ADF80400434661 -:105C60003A46314601A80AF063F90028ECD14346D0 -:105C70003A463146201D0AF05BF90028E4D143463C -:105C80003A46314604F108000AF0C6F90028DBD193 -:105C900000992960D8E700002DE9FE431D4616460D -:105CA000040007D036B12DB12088202804D0072069 -:105CB000BDE8FE830E20FBE7002001902F68202026 -:105CC0000DF10408ADF8080043463A46314602A8F3 -:105CD0000AF02EF90028EBD143463A463146201D02 -:105CE0000AF026F90028E3D10B48009043463A46D3 -:105CF000314604F1090006F0D5FE0028D8D143460C -:105D00003A46314604F108000AF086F90028CFD15E -:105D100001992960CCE70000014502002DE9FE430E -:105D20001D461646040007D036B12DB12088142830 -:105D300004D00720BDE8FE830E20FBE70020019081 -:105D40002F6814200DF10408ADF8080043463A46C8 -:105D5000314602A80AF0ECF80028EBD143463A4657 -:105D60003146201D0AF0E4F80028E3D106480090EF -:105D700043463A46314604F1080006F093FE0028F7 -:105D8000D8D101992960D5E78D5D02002DE9FC414C -:105D90001D4617460E002AD04DB340B30446807C02 -:105DA000C0F34002014662F35F01C0F3800041EAA4 -:105DB00080008DF804000F4800903A463146204696 -:105DC00006F07AFE002810D10B4800902B463A4688 -:105DD000314604F1080006F06FFE002805D12B467D -:105DE0003A46314601A80AF017F9BDE8FC810E20B9 -:105DF000FBE70000014502009F6302002DE9FE431E -:105E00001D461646040007D036B12DB12088132850 -:105E100004D00720BDE8FE830E20FBE700200190A0 -:105E20002F6813200DF10408ADF8080043463A46E8 -:105E3000314602A80AF07CF80028EBD143463A46E6 -:105E40003146201D0AF074F80028E3D1064800907E -:105E500043463A46314604F1080006F023FE002886 -:105E6000D8D101992960D5E76D5E020038B531B10E -:105E70002BB120B1034C009406F01EFE38BD0E205D -:105E800038BD00006D7002002DE9FE431D46164628 -:105E9000040007D036B12DB120881E2804D0072079 -:105EA000BDE8FE830E20FBE7002001902F681E2036 -:105EB0000DF10408ADF8080043463A46314602A801 -:105EC0000AF036F80028EBD143463A463146201D09 -:105ED0000AF02EF80028E3D10648009043463A46DF -:105EE000314604F1080006F0DDFD0028D8D1019903 -:105EF0002960D5E7F95E020038B5A9B1A3B198B120 -:105F00000078C0F34005044665F35F04C0F38005E4 -:105F100044EA8504C0F3C00044EAC0008DF80000E4 -:105F200068460AF079F838BD0E2038BD2DE9FC41ED -:105F30001D461646040007D036B12DB120881B2817 -:105F400004D00720BDE8FC810E20FBE70020009074 -:105F50002F681B20E846ADF8040043463A46314618 -:105F600001A809F0E5FF0028ECD143463A46314646 -:105F7000201D09F0DDFF0028E4D143463A463146B2 -:105F800004F108000AF048F80028DBD100992960E4 -:105F9000D8E70000F8B51646070014D09EB193B1BB -:105FA0000A4800901C460D46384606F053FD00286E -:105FB00008D10748009004F11003324629463846BC -:105FC00006F048FDF8BD0E20F8BD00001560020087 -:105FD000B1440200F8B51D4617460E0013D095B126 -:105FE00088B1044609480090204606F065FD002867 -:105FF00008D1074800902B463A46314604F110007C -:1060000006F05AFDF8BD0E20F8BD00002B6002001E -:106010000145020038B530B12AB123B110240094F3 -:106020000AF007F838BD0E2038BD08B541B13BB1C4 -:1060300030B1009313460A4610210AF010F808BD4B -:106040000E2008BDF8B51F460C46050020D02CB127 -:106050000020009028786E46822801D00720F8BDE5 -:1060600001200090A2B19FB113463246284609F0A4 -:1060700050FF0028F3D13B4632462146284609F01E -:10608000A9FF0028EBD10098A04203D00920F8BD59 -:106090000E20F8BD0020F8BD13460A4601468220B6 -:1060A00008F022BE2DE9FC411F460C46050023D016 -:1060B0002CB100200190287801AE812802D0072061 -:1060C000BDE8FC8101200190B2B1AFB11346324668 -:1060D000284609F01EFF0028F2D1094800903B46EF -:1060E00032462146284604F0E5FD0028E8D1019813 -:1060F000A04203D00920E3E70E20E1E70020DFE71C -:106100001161020013460A460146812008F0ECBDE9 -:1061100038B530B12AB123B12024009409F089FFA9 -:1061200038BD0E2038BD00002DE9FC479846DDF84B -:1061300028900C46050031D02CB100260196287815 -:1061400001AF832802D00720BDE8FC870120019021 -:1061500022B35FEA090021D0B8F1000F1ED0134628 -:106160003A46284609F0D5FE0028EDD10D480090AA -:1061700043463A462146284604F09CFD0028E3D1D8 -:106180004B463A4621462846009604F093FD0028E7 -:10619000DAD10198A04203D00920D5E70E20D3E739 -:1061A0000020D1E7416302002DE9FF4184B01C4685 -:1061B000150088461AD0CCB10020019026688320B3 -:1061C00001AF8DF808003B463246294602A809F087 -:1061D00023FF00280BD13B463246294604A809F08C -:1061E000D8FE002803D1049870B903E00E2008B04F -:1061F000BDE8F081064800903B46324629464046BD -:1062000004F086FD0028F2D1019820600020EEE71E -:10621000F56202002DE9FC479846DDF828900C460F -:10622000050031D02CB100200190287801AE8428DF -:1062300002D00720BDE8FC870120019022B3B8F10D -:10624000000F21D05FEA09001ED0134632462846CF -:1062500009F05FFE0028EDD10D4F4346324621463E -:106260002846009704F026FD0028E3D14B4632462D -:1062700021462846009704F01DFD0028DAD1019838 -:10628000A04203D00920D5E70E20D3E70020D1E7B4 -:10629000A162020013460A460146842008F024BD8C -:1062A0002DE9F84316465FEA00081ED0EEB1E3B1CF -:1062B0000F4800901C460D46404606F0CBFB0028D8 -:1062C00011D11027E31D324629464046009709F0B8 -:1062D000B0FE002807D104F1170332462946404694 -:1062E000009709F0A6FEBDE8F8830E20FBE700004A -:1062F000B1440200F8B51D4617460E001BD0D5B1BB -:10630000C8B104460D480090204606F0D5FB002891 -:1063100010D13B4632461021E01D009509F09FFE4A -:10632000002807D13B463246102104F117000095A2 -:1063300009F095FEF8BD0E20F8BD000001450200F1 -:1063400038B530B12AB123B14024009409F071FE70 -:1063500038BD0E2038BD08B541B13BB130B1009316 -:1063600013460A46402109F07AFE08BD0E2008BDFA -:10637000F8B51646070010D07EB173B11C460D4625 -:1063800009F0C7FD002807D108200090A31C324661 -:106390002946384609F04DFEF8BD0E20F8BDF8B587 -:1063A0001D4617460E000ED06DB160B1044609F0CF -:1063B000BFFD002806D13B4632460821A01C0095AF -:1063C00009F04DFEF8BD0E20F8BD2DE9F04116464E -:1063D00007000FD076B16BB11C460D4609F099FD50 -:1063E000002808D1A31C324629463846BDE8F041B2 -:1063F00009F08FBD0E20BDE8F0812DE9F0411D466A -:1064000017460E000ED06DB160B1044609F090FD44 -:10641000002808D12B463A463146A01CBDE8F04181 -:1064200009F086BD0E20BDE8F081F8B516460700DC -:1064300010D07EB173B11C460D4609F06AFD0028EC -:1064400007D105200090A31C32462946384609F0A2 -:10645000F0FDF8BD0E20F8BDF8B51D4617460E003C -:106460000ED06DB160B1044609F062FD002806D17E -:106470003B4632460521A01C009509F0F0FDF8BD11 -:106480000E20F8BD38B558B152B14BB11C466B4621 -:1064900009F0A0FD002802D19DF80010217038BD40 -:1064A0000E2038BD08B551B14BB140B1007800F0B5 -:1064B00001008DF80000684609F0AEFD08BD0E2011 -:1064C00008BD0000F8B51646070018D0BEB1B3B13C -:1064D0001C460D4609F01DFD00280FD1A31C3246B5 -:1064E0002946384609F015FD002807D105480090D7 -:1064F000231D32462946384604F0DCFBF8BD0E2049 -:10650000F8BD000013FF0200F8B51D4617460E0047 -:1065100017D0B5B1A8B1044609F00AFD00280FD183 -:106520002B463A463146A01C09F002FD002807D14F -:10653000054800902B463A463146606804F0E8FB77 -:10654000F8BD0E20F8BD000031FF02001CB538B1C7 -:1065500032B12BB106240094019404F0A1FA1CBDC1 -:106560000E201CBD08B549B143B138B100931346A4 -:106570000A460068062104F0C5FA08BD0E2008BDD1 -:1065800038B568B162B15BB11C466B4609F022FDBB -:10659000002804D19DF8001001F00101217038BDE0 -:1065A0000E2038BD08B551B14BB140B1007800F0B4 -:1065B00001008DF80000684609F02EFD08BD0E2090 -:1065C00008BDF8B51646070013D096B18BB11C462E -:1065D0000D4609F09EFC00280AD16B46324629463A -:1065E000384609F0F7FC002802D19DF80010A17090 -:1065F000F8BD0E20F8BD00002DE9FC411C460D46FB -:10660000060025D02DB100200190307801AF8F28F1 -:1066100002D00720BDE8FC8101200190C2B1BCB1CD -:106620002068A8B113463A46304609F072FC0028AB -:10663000F0D10948009023463A462946304604F0F6 -:1066400039FB0028E6D10198A84203D00920E1E7F0 -:106650000E20DFE70020DDE76966020013460A46E8 -:1066600001468F2008F040BB2DE9F0411646070097 -:106670000FD076B16BB11C460D4609F0ABFC00287B -:1066800008D1631C324629463846BDE8F04109F07E -:10669000A1BC0E20BDE8F0812DE9F0411D46174652 -:1066A0000E000ED06DB160B1044609F0B5FC0028B3 -:1066B00008D12B463A463146601CBDE8F04109F04E -:1066C000ABBC0E20BDE8F0817CB50C46E0B12CB12E -:1066D00000230193057801A97B2D01D007207CBD03 -:1066E0000125019582B1156875B1022C0AD300937A -:1066F00013460A46214604F0DDFA0028EFD101983E -:10670000A04203D009207CBD0E207CBD00207CBDB2 -:106710002DE9FF4184B0984614460F0019D0C4B14A -:106720000020019025687B2001AE8DF808003346DB -:106730002A4602A809F070FC00280BD133462A46ED -:10674000394604A809F025FC002803D1049870B943 -:1067500003E00E2008B0BDE8F08107480090334602 -:106760002A463946404604F0D3FA0028F2D101986F -:1067700020600020EEE70000954A02001CB50C46A0 -:10678000C8B12CB100210191037801A97A2B01D065 -:1067900007201CBD012301936AB1094B00931346E6 -:1067A0000A46214604F086FA0028F2D10198A04258 -:1067B00003D009201CBD0E201CBD00201CBD000004 -:1067C000454A020013460A4601467A2008F08CBA70 -:1067D0001CB50C4640B12CB100210191037801A9F0 -:1067E000712B03D007201CBD0E201CBD012301937B -:1067F000074B009313460A46214604F05BFA002833 -:10680000F3D10198A04201D009201CBD00201CBD7D -:10681000816802002DE9FF4184B0984614460F00BC -:1068200019D0C4B1002001902568712001AE8DF807 -:10683000080033462A4602A809F0EEFB00280BD1D7 -:1068400033462A46394604A809F0A3FB002803D1A1 -:10685000049870B903E00E2008B0BDE8F081074845 -:10686000009033462A463946404604F051FA002843 -:10687000F2D1019820600020EEE70000D568020008 -:10688000F8B51646070020D0FEB1F3B11C460D4600 -:1068900009F0A0FB002817D1631C32462946384670 -:1068A00009F098FB00280FD1A31C32462946384630 -:1068B00009F02FFB002807D105480090231D324620 -:1068C0002946384604F0F6F9F8BD0E20F8BD000060 -:1068D00015600200F8B51D4617460E001FD0F5B131 -:1068E000E8B1044609F098FB002817D12B463A4638 -:1068F0003146601C09F090FB00280FD12B463A4628 -:106900003146A01C09F014FB002807D1054800906F -:106910002B463A463146606804F0FAF9F8BD0E207D -:10692000F8BD00002B6002001CB50C4640B12CB134 -:1069300000210191037801A9702B03D007201CBD11 -:106940000E201CBD01230193074B009313460A46FA -:10695000214604F0AFF90028F3D10198A04201D0FC -:1069600009201CBD00201CBD8168020013460A4698 -:106970000146702008F0B8B92DE9FC411C460D46CF -:10698000060025D035B10027019730780DF10408B5 -:106990008E2802D00720BDE8FC8101200190BAB109 -:1069A000B4B12068A0B113464246304609F0B1FAAE -:1069B0000028F0D12346424629463046009704F08D -:1069C00079F90028E7D10198A84203D00920E2E72D -:1069D0000E20E0E70020DEE72DE9FF4184B0984675 -:1069E00014460F0019D0C4B10020019025688E20F4 -:1069F00001AE8DF8080033462A4602A809F00CFBC8 -:106A000000280BD133462A46394604A809F0C1FABA -:106A1000002803D1049870B903E00E2008B0BDE847 -:106A2000F0810748009033462A463946404604F034 -:106A30006FF90028F2D1019820600020EEE70000F5 -:106A4000190003002DE9F8431F46DDF820800C46AD -:106A500005002CD02CB10020009028786E468828A4 -:106A600002D00720BDE8F88301200090FAB1F7B109 -:106A70005FEA08001BD013463246284609F049FA5F -:106A80000028EFD13B4632462146284609F0A2FABB -:106A90000028E7D1434632462146284609F09AFAB3 -:106AA0000028DFD10098A04203D00920DAE70E20A9 -:106AB000D8E70020D6E713460A460146882008F0AA -:106AC00013B938B50C46B8B12CB100210091037848 -:106AD0006946892B01D0072038BD012300935AB1A4 -:106AE00013460A46214609F014FA0028F4D100980A -:106AF000A04203D0092038BD0E2038BD002038BD8B -:106B000013460A460146892008F0EEB8F8B5164645 -:106B1000070032D086B37BB31C460D466B4609F0A6 -:106B200059FA002827D19DF800102078A31C61F3A2 -:106B3000000020709DF800103246490861F34100C2 -:106B400020709DF80010890861F3820020702946AA -:106B5000384609F0DEF900280DD1231D32462946BA -:106B6000384609F0D6F9002805D1A31D324629463A -:106B7000384609F0CEF9F8BDFFE70E20FBE700002C -:106B80001CB50C46D8B12CB100210191037801A9A4 -:106B90008A2B01D007201CBD012301937AB1136811 -:106BA0006BB1094B009313460A46214604F082F864 -:106BB0000028F0D10198A04203D009201CBD0E206E -:106BC0001CBD00201CBD00000D6B020013460A46D0 -:106BD00001468A2008F088B813460A4601468B20F1 -:106BE00008F082B82DE9FC471E46DDE90A540F463D -:106BF0005FEA000842D03FB10020019098F8000001 -:106C00000DF10409862802D00720BDE8FC87012089 -:106C1000019092B38EB385B37CB3306868B32868B3 -:106C200058B3206848B313464A46404609F071F904 -:106C30000028EAD11348009033464A463946404678 -:106C400004F038F80028E0D10F4800902B464A465F -:106C50003946404604F02EF80028D6D10B48009063 -:106C600023464A463946404604F024F80028CCD151 -:106C70000198B84204D00920C7E7FFE70E20C4E717 -:106C80000020C2E771510200156002000D71020080 -:106C900013460A460146862008F026B838B500B3E8 -:106CA000FAB1F3B11C466B4609F094F9002817D1EC -:106CB0009DF80020217862F3000121709DF80020EA -:106CC000520862F3410121709DF80020920862F39E -:106CD000820121709DF80020D20862F3C301217067 -:106CE00038BD0E2038BD38B5A9B1A3B198B1007830 -:106CF000C0F34005044665F35F04C0F3800544EA31 -:106D00008504C0F3C00044EAC0008DF80000684666 -:106D100009F082F938BD0E2038BD0000F8B51646DE -:106D2000070029D046B33BB3144800901C460D46DB -:106D3000384603F0BFFF00281DD111480090231DE5 -:106D400032462946384603F0B5FF002813D10D48D6 -:106D5000009004F1080332462946384603F0AAFFA2 -:106D6000002808D10848009004F10C033246294657 -:106D7000384603F09FFFF8BD0E20F8BD0D5202000B -:106D8000955F02000D71020041630200F8B51D46D7 -:106D900017460E0026D02DB320B3044612480090AB -:106DA000206803F0B5FF00281BD1104800902B4647 -:106DB0003A463146606803F0ABFF002811D10C4819 -:106DC00000902B463A463146A06803F0A1FF002808 -:106DD00007D1084800902B463A463146E06803F058 -:106DE00097FFF8BD0E20F8BD4D520200D55F02009E -:106DF00023710200576302002DE9F84316465FEA4B -:106E0000000813D096B18BB1094F1C460D46009770 -:106E100005F020FE002807D104F110033246294670 -:106E20004046009705F016FEBDE8F8830E20FBE70C -:106E30001D6D02002DE9F8431D4690460E0012D04C -:106E40008DB180B1094F0446009705F035FE00284A -:106E500007D12B464246314604F11000009705F059 -:106E60002BFEBDE8F8830E20FBE700008D6D0200CD -:106E700038B5A9B1A3B198B10078C0F34005044674 -:106E800065F35F04C0F3800544EA8504C0F3C000E5 -:106E900044EAC0008DF80000684609F0BDF838BD2E -:106EA0000E2038BD2DE9FC479846DDE90A540E4610 -:106EB00007003FD036B10020019038780DF1040969 -:106EC0007F2802D00720BDE8FC870120019082B313 -:106ED000B8F1000F2ED065B3286850B34CB32068CA -:106EE00038B313464A46384609F013F80028EAD169 -:106EF00043464A463146384609F06CF80028E2D14C -:106F00000E4800902B464A463146384603F0D2FEE2 -:106F10000028D8D10A48009023464A4631463846D0 -:106F200003F0C8FE0028CED10198B04204D0092059 -:106F3000C9E7FFE70E20C6E70020C4E7B16F0200F3 -:106F4000F96D02002DE9FF4184B0984614460F0008 -:106F500019D0C4B10020019025687F2001AE8DF8C2 -:106F6000080033462A4602A809F056F800280BD13B -:106F700033462A46394604A809F00BF8002803D105 -:106F8000049870B903E00E2008B0BDE8F08107480E -:106F9000009033462A463946404603F0B9FE0028A1 -:106FA000F2D1019820600020EEE70000356E02006B -:106FB0002DE9FC4116465FEA000853D0002E51D05F -:106FC000002B4FD01C460D4601AB09F003F80028FA -:106FD00046D1631C32462946404608F0FBFF002894 -:106FE0003ED1A31C32462946404608F0F3FF002854 -:106FF00036D11D4FE31C324629464046009705F026 -:1070000029FD00282CD1231D3246294640460097F1 -:1070100005F020FD002823D19DF80420217862F39B -:10702000000121709DF80420520862F34101217093 -:107030009DF80420920862F3820121709DF80420DB -:10704000D20862F3C30121709DF80420120962F393 -:10705000061121709DF80420D20962F3C711217036 -:10706000BDE8FC810E20FBE79D6C02002DE9FC4190 -:107070001D4690460E0045D0F5B3E8B304460078AF -:10708000C0F34002014662F35F01C0F3800241EAAF -:107090008201C0F3C00241EAC201C0F3021241EA18 -:1070A000021120F07F0001438DF804104246314662 -:1070B00001A808F0B1FF002822D12B4642463146F4 -:1070C000601C08F0A9FF00281AD12B464246314621 -:1070D000A01C08F0A1FF002812D10B4F2B464246FE -:1070E0003146E01C009705F0E7FC002808D12B464C -:1070F00042463146201D00E004E0009705F0DCFC2C -:10710000BDE8FC810E20FBE7E76C020038B530B12A -:107110002AB123B11024009408F08BFF38BD0E2053 -:1071200038BD08B541B13BB130B1009313460A46B2 -:10713000102108F094FF08BD0E2008BD38B50C469C -:10714000B8B12CB10021009103786946772B01D0AA -:10715000072038BD012300935AB113460A46214641 -:1071600008F038FF0028F4D10098A04203D009208D -:1071700038BD0E2038BD002038BD13460A460146F2 -:10718000772007F0B1BD00002DE9FE4F1446060040 -:1071900098460D4629D035B10027019730780DF17A -:1071A000040A6E2802D00720BDE8FE8F012001905E -:1071B000DCB12068C8B10068B8B15246304608F06A -:1071C00009FF0028F0D102AB52462946304608F0AC -:1071D00001FF0028E8D19DF80800012807D02760AA -:1071E0000198A84219D00920DEE70E20DCE72768C5 -:1071F0000024DFF82C900BE007EB8403524629466D -:107200003046CDF8009003F055FD0028CCD1641C29 -:1072100098F80000A042EFD8E2E70020C4E70000A1 -:10722000B144020013460A4601466E2007F05CBDD9 -:1072300038B5A0B19AB193B11C466B4608F0CAFEAE -:1072400000280BD19DF80020217862F30001217005 -:107250009DF80020520862F34101217038BD0E20D4 -:1072600038BD38B590B38AB383B31C466B4608F07B -:10727000B1FE002829D19DF80020217862F3000199 -:1072800021709DF80020520862F3410121709DF8A1 -:107290000020920862F3820121709DF80020D2083C -:1072A00062F3C30121709DF80020120962F30411FA -:1072B00021709DF80020520962F3451121709DF85C -:1072C0000020920962F38611217038BDFFE70E207D -:1072D000FBE738B509B303B3F8B10078C0F3400554 -:1072E000044665F35F04C0F3800544EA8504C0F3F7 -:1072F000C00544EAC504C0F3001544EA0514C0F310 -:10730000401544EA4514C0F3801044EA80108DF81B -:107310000000684608F080FE38BD0E2038BD18B168 -:1073200012B10BB108F0F5BD0E207047F8B51D463F -:1073300017460E000FD075B168B1044608F0F8FD8D -:10734000002807D1054800902B463A463146A01C3C -:1073500005F0C6FBF8BD0E20F8BD00008FA60200A8 -:10736000F8B51D4617460E000FD075B168B104463A -:1073700008F0DEFD002807D1054800902B463A466C -:107380003146A01C05F0ACFBF8BD0E20F8BD000096 -:10739000A9A802002DE9FC411C460D46060025D097 -:1073A0002DB100200190307801AF982802D007203D -:1073B000BDE8FC8101200190C2B1BCB12068A8B138 -:1073C00013463A46304608F0A4FD0028F0D109489B -:1073D000009023463A462946304603F06BFC0028CD -:1073E000E6D10198A84203D00920E1E70E20DFE7AB -:1073F0000020DDE7B381020013460A4601469820CB -:1074000007F072BC2DE9FC411D4617460E0032D034 -:1074100085B378B3044619480090204605F060FB18 -:10742000002825D1164800902B463A463146201DAB -:1074300005F056FB00281BD160792B4600F00100B7 -:107440008DF804003A46314601A808F0E5FD002811 -:107450000ED12B463A463146A01D08F069FD0028A2 -:1074600006D12B463A46314604F1080008F060FD8B -:10747000BDE8FC81FFE70E20FAE70000A9A80200A2 -:10748000D37202002DE9FC411D46089C0E46070000 -:1074900033D036B10020019038780DF104089928D6 -:1074A00002D00720BDE8FC81012001902AB325B35A -:1074B000286810B30CB32068F8B11346424638462A -:1074C00008F027FD0028EDD10E4800902B464246DB -:1074D0003146384603F0EEFB0028E3D10A4800901D -:1074E000234642463146384603F0E4FB0028D9D112 -:1074F0000198B04203D00920D4E70E20D2E7002043 -:10750000D0E7000079A80200B381020013460A46C2 -:107510000146992007F0E8BB2DE9FC411C46089F75 -:107520000D46060026D035B10020019030780DF1CF -:1075300004089B2802D00720BDE8FC8101200190AF -:10754000C2B1BCB12068A8B1A7B1134642463046CB -:1075500008F0DFFC0028EFD123464246294630469A -:10756000009704F015FF0028E6D10198A84203D047 -:107570000920E1E70E20DFE70020DDE713460A4699 -:1075800001469B2007F0B0BB2DE9FC411F460C468D -:10759000050009D02CB100200190287801AE962872 -:1075A00004D00720BDE8FC810E20FBE70120134634 -:1075B00001903246284608F0ACFC0028F2D1084879 -:1075C00000903B4632462146284603F073FB0028D4 -:1075D000E8D10198A04201D00920E3E70020E1E7CB -:1075E000B381020013460A460146962007F07CBB91 -:1075F00018B112B10BB108F0EDBC0E2070470000BD -:10760000F8B51D4617460E000FD075B168B1044697 -:1076100008F08EFC002807D1054800902B463A461A -:107620003146A01C05F05CFAF8BD0E20F8BD000044 -:10763000A9A802002DE9FC411F460C46050009D00F -:107640002CB100200190287801AE972804D00720A3 -:10765000BDE8FC810E20FBE7012013460190324675 -:10766000284608F056FC0028F2D1084800903B4616 -:1076700032462146284603F01DFB0028E8D1019838 -:10768000A04201D00920E3E70020E1E7B381020036 -:1076900013460A460146972007F026BB2DE9FE4314 -:1076A0001D461646040007D036B12DB12088342877 -:1076B00004D00720BDE8FE830E20FBE700200190E8 -:1076C0002F6834200DF10408ADF8080043463A460F -:1076D000314602A808F02CFC0028EBD143463A467C -:1076E0003146201D08F024FC0028E3D143463A46E9 -:1076F0003146A01D08F01CFC0028DBD143463A4669 -:10770000314604F1080008F013FC0028D2D10748E4 -:10771000009043463A46314604F10A0005F0D6F996 -:107720000028C7D101992960C4E700003177020021 -:107730002DE9F8431F4691465FEA010814D09FB136 -:1077400090B1044608F0F4FB00280ED13B464A46AF -:107750004146A01C08F060FC002806D1A178012950 -:1077600005D0104E002515E00E20BDE8F8830E4E22 -:10777000F8E7A078012811D005EBC50004EB400024 -:10778000001D3B464A464146009605F0A9F90028EF -:10779000EBD16D1C2188A942EBD8E6E705EB45004B -:1077A000ECE700002D730200617302002DE9FE4337 -:1077B0001D461646040007D036B12DB12088322868 -:1077C00004D00720BDE8FE830E20FBE700200190D7 -:1077D0002F6832200DF10408ADF8080043463A4600 -:1077E000314602A808F0A4FB0028EBD143463A46F4 -:1077F0003146201D08F09CFB0028E3D143463A4661 -:107800003146A01D08F094FB0028DBD143463A46E0 -:10781000314604F1080008F08BFB0028D2D107485C -:10782000009043463A46314604F10A0005F04EF90D -:107830000028C7D101992960C4E7000041780200FF -:107840002DE9F8431E4691465FEA010809D046B18A -:1078500038B1044608F06CFB002803D100250B4F1B -:1078600010E00E20BDE8F88305EB850004EB400036 -:1078700033464A464146801C009705F031F90028FE -:10788000F0D16D1C2188A942EED8EBE70574020007 -:107890002DE9FE431D461646040007D036B12DB132 -:1078A0002088352804D00720BDE8FE830E20FBE7A2 -:1078B000002001902F6835200DF10408ADF8080074 -:1078C00043463A46314602A808F032FB0028EBD185 -:1078D00043463A463146201D08F02AFB0028E3D1F2 -:1078E00043463A463146A01D08F022FB0028DBD172 -:1078F00043463A46314604F1080008F019FB0028D7 -:10790000D2D10748009043463A46314604F10A0076 -:1079100005F0DCF80028C7D101992960C4E7000010 -:1079200025790200F8B51D4617460E001AD0CDB1D4 -:10793000C0B1044608F0FCFA002812D12B463A46A2 -:107940003146A01C08F0F4FA00280AD1608821888A -:10795000801C484381B23B463246201D009508F00A -:107960007EFBF8BD0E20F8BD2DE9FE431D461646F0 -:10797000040007D036B12DB12088372804D0072065 -:10798000BDE8FE830E20FBE7002001902F68372022 -:107990000DF10408ADF8080043463A46314602A806 -:1079A00008F0C6FA0028EBD143463A463146201D7E -:1079B00008F0BEFA0028E3D143463A463146A01DFE -:1079C00008F0B6FA0028DBD143463A46314604F1C6 -:1079D000080008F0ADFA0028D2D1074800904346CD -:1079E0003A46314604F10A0005F070F80028C7D184 -:1079F00001992960C4E70000FD790200F8B51D4631 -:107A000017460E000ED06DB160B1044608F090FA32 -:107A1000002806D1009521883B463246A01C08F07C -:107A20001EFBF8BD0E20F8BD2DE9FE431D4616468F -:107A3000040007D036B12DB12088332804D00720A8 -:107A4000BDE8FE830E20FBE7002001902F68332065 -:107A50000DF10408ADF8080043463A46314602A845 -:107A600008F066FA0028EBD143463A463146201D1D -:107A700008F05EFA0028E3D143463A463146A01D9D -:107A800008F056FA0028DBD143463A46314604F165 -:107A9000080008F04DFA0028D2D10748009043466C -:107AA0003A46314604F10A0005F010F80028C7D123 -:107AB00001992960C4E70000BD7A02002DE9F8436E -:107AC0001E4691465FEA010809D046B138B1044626 -:107AD00008F02EFA002803D100250B4F10E00E20ED -:107AE000BDE8F88305EB450004EB400033464A4609 -:107AF0004146801C009704F0F3FF0028F0D16D1C74 -:107B00002188A942EED8EBE7017602002DE9FE4379 -:107B10001D461646040007D036B12DB120883A28FC -:107B200004D00720BDE8FE830E20FBE70020019073 -:107B30002F683A200DF10408ADF8080043463A4694 -:107B4000314602A808F0F4F90028EBD143463A4642 -:107B50003146201D08F0ECF90028E3D143463A46AF -:107B60003146A01D08F0E4F90028DBD143463A462F -:107B7000314604F1080008F0DBF90028D2D10748AB -:107B8000009043463A46314604F10A0004F09EFF55 -:107B90000028C7D101992960C4E70000A17B020039 -:107BA00019B113B108B108F0C3B90E207047000035 -:107BB0002DE9FE431D461646040007D036B12DB10F -:107BC0002088392804D00720BDE8FE830E20FBE77B -:107BD000002001902F6839200DF10408ADF808004D -:107BE00043463A46314602A808F0A2F90028EBD1F4 -:107BF00043463A463146201D08F09AF90028E3D161 -:107C000043463A463146A01D08F092F90028DBD1E0 -:107C100043463A46314604F1080008F089F9002845 -:107C2000D2D10748009043463A46314604F10A0053 -:107C300004F04CFF0028C7D101992960C4E7000077 -:107C4000457C0200F8B51D4617460E001ED0EDB16A -:107C5000E0B1044608F06CF9002816D12B463A46EC -:107C60003146A01C08F0D8F900280ED12B463A4620 -:107C70003146201D08F05CF9002806D10095A18846 -:107C80003B463246A01D08F0EAF9F8BD0E20F8BDCB -:107C90002DE9FE431D461646040007D036B12DB12E -:107CA0002088302804D00720BDE8FE830E20FBE7A3 -:107CB000002001902F6830200DF10408ADF8080075 -:107CC00043463A46314602A808F032F90028EBD183 -:107CD00043463A463146201D08F02AF90028E3D1F0 -:107CE00043463A463146A01D08F022F90028DBD170 -:107CF00043463A46314604F1080008F019F90028D5 -:107D0000D2D10748009043463A46314604F10A0072 -:107D100004F0DCFE0028C7D101992960C4E7000007 -:107D2000257D02002DE9F8431E4691465FEA0108D1 -:107D300009D046B138B1044608F0FAF8002803D15A -:107D400000250A4F0EE00E20BDE8F88304EBC500C5 -:107D500033464A464146801C009704F0C1FE002885 -:107D6000F2D16D1C2188A942F0D8EDE7FD83020015 -:107D70002DE9FE431D461646040007D036B12DB14D -:107D80002088362804D00720BDE8FE830E20FBE7BC -:107D9000002001902F6836200DF10408ADF808008E -:107DA00043463A46314602A808F0C2F80028EBD113 -:107DB00043463A463146201D08F0BAF80028E3D180 -:107DC00043463A463146A01D08F0B2F80028DBD100 -:107DD00043463A46314604F1080008F0A9F8002865 -:107DE000D2D10748009043463A46314604F10A0092 -:107DF00004F06CFE0028C7D101992960C4E7000097 -:107E0000057E0200F8B51D4617460E001ED0EDB1E6 -:107E1000E0B1044608F08CF8002816D12B463A460B -:107E20003146A01C08F084F800280ED12B463A46B3 -:107E30003146201D08F07CF8002806D10095A18865 -:107E40003B463246A01D08F00AF9F8BD0E20F8BDE9 -:107E50002DE9FE431D461646040007D036B12DB16C -:107E60002088312804D00720BDE8FE830E20FBE7E0 -:107E7000002001902F6831200DF10408ADF80800B2 -:107E800043463A46314602A808F052F80028EBD1A2 -:107E900043463A463146201D08F04AF80028E3D10F -:107EA00043463A463146A01D08F042F80028DBD18F -:107EB00043463A46314604F1080008F039F80028F4 -:107EC000D2D10748009043463A46314604F10A00B1 -:107ED00004F0FCFD0028C7D101992960C4E7000027 -:107EE000E57E02002DE9F84F984692465FEA0109C7 -:107EF0000ED0B8F1000F0BD050B1044643464946AE -:107F000008F016F8002804D1A51C0026094F0DE042 -:107F10000E20BDE8F88F4346524649462846009752 -:107F200004F0DEFD0028F4D10A35761C2188B14228 -:107F3000F1D8EEE7718202002DE9FE431D46164698 -:107F4000040007D036B12DB120883B2804D007208B -:107F5000BDE8FE830E20FBE7002001902F683B2048 -:107F60000DF10408ADF8080043463A46314602A830 -:107F700007F0DEFF0028EBD143463A463146201D8C -:107F800007F0D6FF0028E3D143463A463146A01D0C -:107F900007F0CEFF0028DBD143463A46314604F1D4 -:107FA000080007F0C5FF0028D2D1074800904346DB -:107FB0003A46314604F10A0004F088FD0028C7D192 -:107FC00001992960C4E70000CD7F020019B113B107 -:107FD00008B108F021B80E2070472DE9FC411D467C -:107FE0001646040007D036B12DB120883C2804D0B5 -:107FF0000720BDE8FC810E20FBE7002000902F68E1 -:108000003C20E846ADF8040043463A46314601A814 -:1080100007F08EFF0028ECD143463A463146201D3A -:1080200007F086FF0028E4D143463A463146A01DBA -:1080300007F07EFF0028DCD143463A46314604F182 -:10804000080007F075FF0028D3D143463A46314671 -:1080500004F10A0007F0E0FF0028CAD10099296066 -:10806000C7E700002DE9FE431D461646040007D071 -:1080700036B12DB12088382804D00720BDE8FE8312 -:108080000E20FBE7002001902F6838200DF1040836 -:10809000ADF8080043463A46314602A807F048FFCB -:1080A0000028EBD143463A463146201D07F040FFF9 -:1080B0000028E3D143463A463146A01D07F038FF79 -:1080C0000028DBD143463A46314604F1080007F068 -:1080D0002FFF0028D2D10748009043463A46314648 -:1080E00004F10A0004F0F2FC0028C7D101992960CC -:1080F000C4E70000F9800200F8B51D4617460E00DF -:1081000027D035B328B3044607F012FF00281FD14B -:108110002B463A463146A01C07F07EFF002817D1B7 -:108120002B463A463146201D07F002FF00280FD1AA -:108130002B463A463146A01D07F0FAFE002807D12B -:108140000095E1883B46324604F1080007F087FFBE -:10815000F8BD0E20F8BDF8B51F460C46050008D046 -:108160002CB10020009028786E469E2803D007206E -:10817000F8BD0E20F8BD0120134600903246284677 -:1081800007F0C7FE0028F5D13B4632462146284677 -:1081900007F0BFFE0028EDD10098A04201D00920D1 -:1081A000F8BD0020F8BD13460A4601469E2006F0A1 -:1081B0009BBD2DE9F041164607000FD076B16BB19B -:1081C0001C460D4607F0A5FE002808D1A31C324628 -:1081D00029463846BDE8F04107F09BBE0E20BDE8B9 -:1081E000F0812DE9F0411D4617460E000ED06DB10D -:1081F00060B1044607F09CFE002808D12B463A46A1 -:108200003146A01CBDE8F04107F092BE0E20BDE84B -:10821000F081F8B51F460C46050008D02CB10020AF -:10822000009028786E469D2803D00720F8BD0E20C8 -:10823000F8BD0120134600903246284607F069FE3B -:108240000028F5D13B4632462146284607F061FE1C -:108250000028EDD10098A04201D00920F8BD0020EF -:10826000F8BD13460A4601469D2006F03DBD0000BC -:10827000F8B51D4617460E000FD075B168B104461B -:1082800007F056FE002807D1054800902B463A46D5 -:108290003146A01C04F024FCF8BD0E20F8BD0000FF -:1082A000FD8302002DE9FC411F46DDF820800C46CD -:1082B000050009D02CB100200190287801AE942847 -:1082C00004D00720BDE8FC810E20FBE70120134607 -:1082D00001903246284607F01CFE0028F2D13B46AA -:1082E00032462146284607F014FE0028EAD1084805 -:1082F0000090434632462146284602F0DBFC002827 -:10830000E0D10198A04201D00920DBE70020D9E7A5 -:1083100079A8020013460A460146942006F0E4BC00 -:108320002DE9F8431F46DDF820800C46050009D0F2 -:108330002CB10020009028786E469A2804D007209F -:10834000BDE8F8830E20FBE701201346009032467B -:10835000284607F0DEFD0028F2D13B463246214692 -:10836000284607F0D6FD0028EAD14346324621468A -:10837000284607F0CEFD0028E2D10098A04201D0A7 -:108380000920DDE70020DBE713460A4601469A2074 -:1083900006F0AABC2DE9FC411F460C46050009D099 -:1083A0002CB100200190287801AE952804D0072038 -:1083B000BDE8FC810E20FBE7012013460190324608 -:1083C000284607F0A6FD0028F2D1084800903B4659 -:1083D00032462146284602F06DFC0028E8D101987B -:1083E000A04201D00920E3E70020E1E7B3810200C9 -:1083F00013460A460146952006F076BCF8B51D46A0 -:1084000017460E0012D08DB180B104460848009086 -:10841000204604F065FB002807D1064800902B4653 -:108420003A463146201D04F05BFBF8BD0E20F8BD36 -:10843000A9A80200E3810200F8B51646070028D07B -:108440003EB333B31C460D4607F0C4FD00281FD1D0 -:10845000631C32462946384607F0BCFD002817D178 -:10846000A31C32462946384607F053FD00280FD199 -:10847000231D32462946384607F04BFD002807D118 -:10848000A01D831C009032462946384605F029F885 -:10849000F8BD0E20F8BD00002DE9FC411F460C463A -:1084A000050009D02CB100200190287801AE9C284D -:1084B00004D00720BDE8FC810E20FBE70120134615 -:1084C00001903246284607F024FD0028F2D10848E2 -:1084D00000903B4632462146284602F0EBFB00283E -:1084E000E8D10198A04201D00920E3E70020E1E7AC -:1084F0003984020013460A4601469C2006F0F4BB6C -:108500002DE9FC479846DDF828900D46060009D075 -:108510002DB100240194307801AFAC2804D007209D -:10852000BDE8FC870E20FBE70120134601903A4688 -:10853000304607F0EEFC0028F2D143463A46294681 -:108540003046009402F0B6FB0028E9D14B463A468B -:1085500029463046009402F0ADFB0028E0D1019896 -:10856000A84201D00920DBE70020D9E72DE9FF432D -:1085700083B09846DDF8389014460F0019D0C4B186 -:10858000002001902568AC2001AE8DF8080033462C -:108590002A4602A807F040FD00280BD133462A46A0 -:1085A000394603A807F0F5FC002803D10398C0B9A9 -:1085B00003E00E2007B0BDE8F0830C48009033467E -:1085C0002A463946404602F0A3FB0028F2D108486B -:1085D000009033462A463946484602F099FB002867 -:1085E000E8D1019820600020E4E70000A9A802007B -:1085F000618602002DE9FC4116465FEA00082BD097 -:1086000056B34BB3154F1C460D46009704F02CFA99 -:1086100000281FD1631C324629464046009704F0CB -:1086200023FA002816D101AB32462946404607F00E -:10863000D1FC00280ED19DF80410A2784B0861F3FC -:10864000000263F34202CB0863F3C302090961F33A -:108650000412A270BDE8FC810E20FBE7A94B0200CA -:108660002DE9FC411D4690460E0032D085B378B30B -:10867000194F0446009704F047FA002826D12B46EC -:1086800042463146601C009704F03EFA00281DD196 -:10869000A0782B46C0F34102014662F35F01C0F3AC -:1086A000C00241EAC201C0F3001041EA00108DF897 -:1086B00004004246314601A807F0AEFC002805D16F -:1086C000A178C1F34101012900D00720BDE8FC8158 -:1086D000FFE70E20FAE70000DB4B0200F8B5164674 -:1086E000070032D086B37BB3194800901C460D4674 -:1086F000384602F0DFFA002825D116480090231DE5 -:1087000032462946384602F0D5FA00281BD104F13A -:108710000A0332462946384607F0FBFB002812D1EF -:1087200004F10C0332462946384607F0F2FB0028D4 -:1087300009D104F10800009004F1100332462946E3 -:10874000384604F0CEFEF8BDFFE70E20FBE7000040 -:1087500079A80200F58502002DE9FC4116460700C4 -:1087600028D03EB333B31C460D4607F0D2FB002899 -:108770001ED101AB32462946384607F02BFC0028B3 -:1087800016D1231D32462946384607F0C2FB002881 -:108790000ED1A01D831C009032462946384604F0B5 -:1087A000A0FE002804D19DF8041001F00101A17081 -:1087B000BDE8FC810E20FBE718B112B10BB107F048 -:1087C000D1BB0E20704738B558B152B14BB11C46E1 -:1087D0006B4607F0FFFB002802D19DF800102170C6 -:1087E00038BD0E2038BD2DE9F0411D4617460E005C -:1087F0001ED0EDB1E0B1044607F09AFB002818D175 -:108800002B463A463146A01C07F092FB002810D1B7 -:108810002B463A463146201D07F08AFB002808D136 -:108820002B463A463146A01DBDE8F04107F080BB1B -:108830000E20BDE8F08100002DE9F84316465FEAFE -:10884000000854D0002E52D0002B50D02948009060 -:108850001C460D46404604F007F9002845D126483D -:108860000090631C32462946404604F0FDF800287B -:108870003BD104F1080332462946404607F049FB44 -:10888000002832D104F10A000090231D3246294607 -:10889000404604F026FE002827D11848009004F135 -:1088A0000C0332462946404602F004FA00281CD147 -:1088B000134F04F11003324629464046009702F058 -:1088C000F9F9002811D104F1140332462946404633 -:1088D000009702F0EFF9002807D104F1180332469F -:1088E00029464046009702F0E5F9BDE8F8830E20DE -:1088F000FBE700006372020031720200058902008A -:10890000F58502002DE9F0411646070027D036B361 -:108910002BB31C460D4607F05DFB002820D1631CDD -:1089200032462946384607F055FB002818D1A31CCB -:1089300032462946384607F0ECFA002810D1231DAC -:1089400032462946384607F045FB002808D1A31DCA -:10895000324629463846BDE8F04107F0DABA0E2023 -:10896000BDE8F0812DE9FC479846DDE90A9A0C46FE -:10897000050009D02CB100260196287801AFA22865 -:1089800004D00720BDE8FC870E20FBE7012013463A -:1089900001903A46284607F0BCFA0028F2D1124866 -:1089A000009043463A462146284602F083F90028C3 -:1089B000E8D10E4800904B463A462146284602F040 -:1089C00079F90028DED153463A46214628460096DA -:1089D00002F070F90028D5D10198A04201D00920F9 -:1089E000D0E70020CEE7000039880200DD860200D3 -:1089F0002DE9FF4184B0984614460F0019D0C4B148 -:108A0000002001902568A22001AE8DF808003346B1 -:108A10002A4602A807F000FB00280BD133462A465D -:108A2000394604A807F0B5FA002803D1049870B9B4 -:108A300003E00E2008B0BDE8F081074800903346FF -:108A40002A463946404602F063F90028F2D10198DF -:108A500020600020EEE70000E787020018B112B1A5 -:108A60000BB107F0B7BA0E20704700002DE9FC47A4 -:108A70009846DDF828900C46050009D02CB1002658 -:108A80000196287801AFA32804D00720BDE8FC8711 -:108A90000E20FBE70120134601903A46284607F0D6 -:108AA00038FA0028F2D10D48009043463A46214654 -:108AB000284602F0FFF80028E8D14B463A46214606 -:108AC0002846009602F0F6F80028DFD10198A0426F -:108AD00001D00920DAE70020D8E70000DD86020097 -:108AE0002DE9FF4184B0984614460F0019D0C4B157 -:108AF000002001902568A32001AE8DF808003346C0 -:108B00002A4602A807F088FA00280BD133462A46E5 -:108B1000394604A807F03DFA002803D1049870B93B -:108B200003E00E2008B0BDE8F0810748009033460E -:108B30002A463946404602F0EBF80028F2D1019867 -:108B400020600020EEE7000031FF02002DE9FE4327 -:108B50001D461646040007D036B12DB12088552891 -:108B600004D00720BDE8FE830E20FBE70020019023 -:108B70002F6855200DF10408ADF8080043463A4629 -:108B8000314602A807F0D4F90028EBD143463A4613 -:108B90003146201D07F0CCF90028E3D106480090AB -:108BA00043463A463146A01D03F0A4FF0028D9D120 -:108BB00001992960D6E70000BD8B020019B113B1FD -:108BC00008B107F0B5B90E20704700002DE9FE434B -:108BD0001D461646040007D036B12DB12088532813 -:108BE00004D00720BDE8FE830E20FBE700200190A3 -:108BF0002F6853200DF10408ADF8080043463A46AB -:108C0000314602A807F094F90028EBD143463A46D2 -:108C10003146201D07F08CF90028E3D1064800906A -:108C200043463A463146A01D03F064FF0028D9D1DF -:108C300001992960D6E700003D8C020019B113B1FB -:108C400008B107F075B90E2070472DE9FC411D46AB -:108C50001646040007D036B12DB12088572804D01D -:108C60000720BDE8FC810E20FBE7002000902F6864 -:108C70005720E846ADF8040043463A46314601A87D -:108C800007F056F90028ECD143463A463146201DFC -:108C900007F04EF90028E4D143463A463146A01D7C -:108CA00007F0BAF90028DCD100992960D9E7000063 -:108CB000F8B51D4617460E0019D0C5B1B8B1044627 -:108CC00007F036F9002813D10A4800902B463A469F -:108CD0003146A01C03F018FF002809D101B02B4633 -:108CE0003A463146A01DBDE8F04007F021B90E20FC -:108CF000F8BD0000A9A802002DE9F04186B01E468B -:108D00001746040008D03FB136B12088512805D05D -:108D1000072006B0BDE8F0810E20FAE7002003909E -:108D2000356851200DF10C08ADF8100043462A4675 -:108D3000394604A807F0FCF80028EAD143462A4641 -:108D40003946201D07F0F4F80028E2D116480090BB -:108D500043462A463946A01D03F0CCFE0500D8D173 -:108D6000A07902281CD1A07B062801D0042817D1A5 -:108D7000A08801A902F0B2F8052811D003A800903C -:108D80000198336800EB400101EB001107483A46B7 -:108D900000EB81000189406804F0BBFB0500B8D1FD -:108DA000039830602846B4E7B18D0200F4DC00205F -:108DB000F8B51D4617460E000DD065B158B10446F2 -:108DC00007F02AF9002805D12078012805D00228CB -:108DD00005D00720F8BD0E20F8BD054800E0054885 -:108DE00000902B463A463146A01C03F08DFEF8BD9C -:108DF000B18C0200019002002DE9FC411C46164690 -:108E0000050007D036B12CB12888532804D007209C -:108E1000BDE8FC810E20FBE700200090276853206E -:108E2000E846ADF8040043463A46314601A807F04B -:108E30007FF80028ECD143463A463146281D07F01A -:108E400077F80028E4D100992160E1E72DE9FE439D -:108E50001D461646040007D036B12DB12088522891 -:108E600004D00720BDE8FE830E20FBE70020019020 -:108E70002F6852200DF10408ADF8080043463A4629 -:108E8000314602A807F054F80028EBD143463A4691 -:108E90003146201D07F04CF80028E3D10648009029 -:108EA00043463A463146A01D03F024FE0028D9D19E -:108EB00001992960D6E70000BD8E020019B113B1F7 -:108EC00008B107F0A9B80E20704700002DE9FE4355 -:108ED0001D461646040007D036B12DB1208856280D -:108EE00004D00720BDE8FE830E20FBE700200190A0 -:108EF0002F6856200DF10408ADF8080043463A46A5 -:108F0000314602A807F014F80028EBD143463A4650 -:108F10003146201D07F00CF80028E3D106480090E8 -:108F200043463A463146A01D03F0E4FD0028D9D15E -:108F300001992960D6E700003D8F020019B113B1F5 -:108F400008B107F069B80E20704700002DE9FF470F -:108F50001E46914604000AD0B9F1000F07D036B181 -:108F60002088502805D0072004B0BDE8F0870E20E7 -:108F7000FAE700200190D6F80080502001AFADF84C -:108F800008003B464246494602A806F0D1FF0028A9 -:108F9000EAD13B4642464946201D06F0C9FF00285B -:108FA000E2D1154800903B4642464946A01D03F0D9 -:108FB000A1FD0500D8D1207B012801D0062816D1BB -:108FC000A08803A901F08AFF052810D00398009714 -:108FD00000EB400101EB00110848434600EB810023 -:108FE0004A460189406804F094FA0500BCD1019812 -:108FF00030602846B8E7000001900200F4DC002051 -:10900000F8B51D4617460E003CD0D5B3C8B304468C -:1090100006F08EFF002833D11B4800902B463A46BD -:109020003146A01C03F070FD002829D12B463A469A -:109030003146A01D06F0F0FF002821D12B463A460C -:109040003146E01D06F0E8FF002819D12B463A46CC -:10905000314604F1080006F06BFF002810D12B46C2 -:109060003A46314604F10A0006F062FF002807D1B3 -:10907000009561893B46324604F10C0006F0EFFF93 -:10908000F8BDFFE70E20FBE7A9A80200F8B51F46D0 -:109090000C46050008D02CB10020009028786E46C0 -:1090A000AD2803D00720F8BD0E20F8BD01201346DF -:1090B00000903246284606F02CFF0028F5D13B46AA -:1090C00032462146284606F024FF0028EDD10098BC -:1090D000A04201D00920F8BD0020F8BD13460A4681 -:1090E0000146AD2005F000BE2DE9FC411646070003 -:1090F00032D086B37BB31C460D4606F00AFF00282B -:1091000027D1A31C32462946384606F063FF0028C3 -:109110001FD1231D32462946384606F0FAFE0028A4 -:1091200017D10E48009004F108033246294638460C -:1091300001F0C0FD00280CD1A168002909D00888E1 -:109140000090019004F10C0332462946384601F0A4 -:10915000A7FCBDE8FC81FFE70E20FAE713FF020041 -:109160002DE9FC411F460C46050009D02CB100201A -:109170000190287801AEA62804D00720BDE8FC8124 -:109180000E20FBE70120134601903246284606F0E8 -:10919000C0FE0028F2D1084800903B4632462146E6 -:1091A000284601F087FD0028E8D10198A04201D0AF -:1091B0000920E3E70020E1E7E99002002DE9FF4103 -:1091C00084B0984614460F0019D0C4B10020019015 -:1091D0002568A62001AE8DF8080033462A4602A86D -:1091E00006F01AFF00280BD133462A46394604A858 -:1091F00006F0CFFE002803D1049870B903E00E20DA -:1092000008B0BDE8F0810748009033462A46394649 -:10921000404601F07DFD0028F2D101982060002039 -:10922000EEE7000031FF02002DE9FC479846DDF82B -:1092300028900C46050009D02CB10026019628780C -:1092400001AFA12804D00720BDE8FC870E20FBE772 -:109250000120134601903A46284606F05AFE00289F -:10926000F2D143463A462146284606F052FE0028EF -:10927000EAD14B463A4621462846009601F01AFDAF -:109280000028E1D10198A04201D00920DCE70020AC -:10929000DAE700002DE9FF4184B0984614460F003C -:1092A00019D0C4B1002001902568A12001AE8DF82D -:1092B000080033462A4602A806F0AEFE00280BD16D -:1092C00033462A46394604A806F063FE002803D137 -:1092D000049870B903E00E2008B0BDE8F08107489B -:1092E000009033462A463946404601F011FD0028D9 -:1092F000F2D1019820600020EEE7000031FF02006B -:109300007CB50C4640B12CB100230193057801A92E -:10931000AB2D03D007207CBD0E207CBD0125CDE9FF -:10932000003513460A46214601F0C4FC0028F4D15A -:109330000198A04201D009207CBD00207CBD000026 -:109340002DE9FF4184B0984614460F0019D0C4B1EE -:10935000002001902568AB2001AE8DF8080033464F -:109360002A4602A806F058FE00280BD133462A46AA -:10937000394604A806F00DFE002803D1049870B900 -:1093800003E00E2008B0BDE8F081074800903346A6 -:109390002A463946404601F0BBFC0028F2D101982C -:1093A00020600020EEE7000031FF0200F8B516460D -:1093B00007000FD076B16BB11C460D4606F00AFED1 -:1093C000002806D120780849012805D0022803D0BA -:1093D0000720F8BD0E20F8BD0091231D3246294616 -:1093E000384603F041FBF8BD598702002DE9FC41E6 -:1093F0001F460C46050009D02CB1002001902878AA -:1094000001AEA82804D00720BDE8FC810E20FBE7B0 -:109410000120134601903246284606F07AFD0028C6 -:10942000F2D1084800903B4632462146284601F0DA -:1094300041FC0028E8D10198A04201D00920E3E7CF -:109440000020E1E7AD93020013460A460146A8203A -:1094500005F04ABC2DE9FC479846DDF828900C46FB -:10946000050009D02CB100260196287801AFA0286C -:1094700004D00720BDE8FC870E20FBE7012013463F -:1094800001903A46284606F0A5FD0028F2D10D4885 -:10949000009043463A462146284601F00BFC00283E -:1094A000E8D14B463A4621462846009601F002FC98 -:1094B0000028DFD10198A04201D00920DAE700207E -:1094C000D8E7000079A802002DE9FF4184B0984652 -:1094D00014460F0019D0C4B1002001902568A020C7 -:1094E00001AE8DF8080033462A4602A806F094FD26 -:1094F00000280BD133462A46394604A806F049FD18 -:10950000002803D1049870B903E00E2008B0BDE82C -:10951000F0810748009033462A463946404601F01C -:10952000F7FB0028F2D1019820600020EEE7000050 -:1095300031FF02002DE9F8431F46DDF820800C467C -:10954000050009D02CB10020009028786E46A7288D -:1095500004D00720BDE8F8830E20FBE70120134666 -:1095600000903246284606F0D4FC0028F2D13B4653 -:1095700032462146284606F0CCFC0028EAD1434674 -:1095800032462146284606F0C4FC0028E2D1009865 -:10959000A04201D00920DDE70020DBE713460A46A0 -:1095A0000146A72005F0A0BB2DE9FC479946DDE95F -:1095B0000A8A0C46050009D02CB1002601962878AD -:1095C00001AFAA2804D00720BDE8FC870E20FBE7E6 -:1095D0000120134601903A46284606F09AFC0028DE -:1095E000F2D11148009043463A462146284601F000 -:1095F00061FB0028E8D14B463A46214628460096B2 -:1096000001F058FB0028DFD153463A462146284650 -:1096100006F0A8FC0028D7D10198A04201D009206B -:10962000D2E70020D0E7000013FF02002DE9FF433E -:1096300083B099460E9E14465FEA01081AD0CCB159 -:10964000002001902768AA2001AD8DF808002B4664 -:109650003A46414602A806F0DFFC00280BD12B4613 -:109660003A46414603A806F094FC002803D103982B -:10967000C0B903E00E2007B0BDE8F0830B480090AE -:109680002B463A464146304601F042FB0028F2D1D3 -:1096900046B1009531883B464246484601F032FAD1 -:1096A0000028E8D1019820600020E4E731FF0200A3 -:1096B0002DE9FC479846DDE90A790C46050009D0FA -:1096C0002CB100200190287801AEA92804D00720F1 -:1096D000BDE8FC870E20FBE70120134601903246CF -:1096E000284606F016FC0028F2D1434632462146B1 -:1096F0002846009703F0F5FE0028E9D14B46324694 -:109700002146284606F02EFC0028E1D10198A0420F -:1097100001D00920DCE70020DAE713460A460146BB -:10972000A92005F0E1BA2DE9FC4799460A9D0E46AD -:1097300007000AD036B10024019438780DF10408EE -:10974000A52804D00720BDE8FC870E20FBE70120F8 -:10975000134601904246384606F0DBFB0028F2D162 -:109760004B4642463146384606F0D3FB0028EAD144 -:109770002B46424631463846009401F09BFA0028B9 -:10978000E1D12B68CBB14246314638469B1C06F0EE -:10979000C0FB0028D7D14246314638462B6806F038 -:1097A000B8FB0028CFD12B684246314638461B1DF6 -:1097B000009401F07FFA0028C5D10198B04201D091 -:1097C0000920C0E70020BEE72DE9FF4184B098469C -:1097D00014460F0019D0C4B1002001902568A520BF -:1097E00001AE8DF8080033462A4602A806F014FCA4 -:1097F00000280BD133462A46394604A806F0C9FB97 -:10980000002803D1049870B903E00E2008B0BDE829 -:10981000F0810748009033462A463946404601F019 -:1098200077FA0028F2D1019820600020EEE70000CE -:109830003F9902002DE9FC411F46DDF820800C46CF -:10984000050009D02CB100200190287801AEA42891 -:1098500004D00720BDE8FC810E20FBE70120134661 -:1098600001903246284606F054FB0028F2D13B46D0 -:1098700032462146284606F04CFB0028EAD108482B -:109880000090434632462146284601F013FA00284C -:10989000E0D10198A04201D00920DBE70020D9E700 -:1098A000119902002DE9FF4184B0984614460F003B -:1098B00019D0C4B1002001902568A42001AE8DF814 -:1098C000080033462A4602A806F0A6FB00280BD162 -:1098D00033462A46394604A806F05BFB002803D12C -:1098E000049870B903E00E2008B0BDE8F081074885 -:1098F000009033462A463946404601F009FA0028CE -:10990000F2D1019820600020EEE700003F990200AC -:10991000F8B51646070010D07EB173B11C460D464F -:109920009B1C06F0F6FA002806D132462946384636 -:10993000231D009403F0D5FDF8BD0E20F8BDF8B549 -:109940001D4617460E000FD075B168B10446801C45 -:1099500006F0EEFA002806D1009521883B463246F3 -:10996000606803F0D6FDF8BD0E20F8BD2DE9FC4778 -:109970009846DDE90A9A0C46050009D02CB100266C -:109980000196287801AFB42804D00720BDE8FC87F1 -:109990000E20FBE70120134601903A46284606F0C8 -:1099A000B8FA0028F2D143463A462146284606F046 -:1099B000B0FA0028EAD14B463A462146284606F03E -:1099C000A8FA0028E2D153463A4621462846009696 -:1099D00001F070F90028D9D10198A04201D00920E6 -:1099E000D4E70020D2E700002DE9FF4184B098467B -:1099F00014460F0019D0C4B1002001902568B4208E -:109A000001AE8DF8080033462A4602A806F004FB92 -:109A100000280BD133462A46394604A806F0B9FA85 -:109A2000002803D1049870B903E00E2008B0BDE807 -:109A3000F0810748009033462A463946404601F0F7 -:109A400067F90028F2D1019820600020EEE70000BD -:109A500031FF0200F8B51F460C46050008D02CB1B6 -:109A60000020009028786E46B12803D00720F8BD6A -:109A70000E20F8BD0120134600903246284606F01D -:109A800048FA0028F5D13B4632462146284606F0E2 -:109A900040FA0028EDD10098A04201D00920F8BD7D -:109AA0000020F8BD13460A460146B12005F01CB956 -:109AB0002DE9F0411646070020D0FEB1F3B11C4657 -:109AC0000D4606F026FA002819D1A31C3246294675 -:109AD000384606F01EFA002811D104F10803324678 -:109AE0002946384606F015FA002808D1231D3246CB -:109AF00029463846BDE8F04106F034BA0E20BDE8EC -:109B0000F0812DE9FE4F9A460C9C0D4606000CD0C4 -:109B100045B14FF00008CDF8048030780DF104090C -:109B2000B22804D00720BDE8FE8F0E20FBE70127F6 -:109B300013464A463046019706F0EBF90028F2D169 -:109B400053464A462946304606F0E3F90028EAD152 -:109B50000297474602AB4A4629463046CDF8008078 -:109B600001F0A8F80028DED10298D0B123684A4657 -:109B7000294630461B1D06F0CCF90028D3D16B4690 -:109B80004A462946304606F0EDF90028CBD1206838 -:109B900080887C2809D8009901F046F9216808607E -:109BA00000E027600198A84201D00920BBE700200F -:109BB000B9E713460A460146B22005F095B82DE9EB -:109BC000F0411646070019D0C6B1BBB11C460D4680 -:109BD000FFF76EFF002812D104F10C03324629462C -:109BE000384606F096F9002809D104F10E033246F2 -:109BF00029463846BDE8F04106F08BB90E20BDE895 -:109C0000F08100002DE9FC419846089C0D460600B5 -:109C100009D02DB100200190307801AFB02804D0D8 -:109C20000720BDE8FC810E20FBE7012013460190D0 -:109C30003A46304606F06DF90028F2D112480090FD -:109C400043463A462946304601F034F80028E8D128 -:109C50000E48009023463A462946304601F02AF83D -:109C60000028DED1206840B1416831B100897C28EC -:109C700006D801F0D9F8216848600198A84201D0BF -:109C80000920CEE70020CCE713FF0200BF9B0200B3 -:109C90002DE9FF4184B0984614460F0019D0C4B195 -:109CA000002001902568B02001AE8DF808003346F1 -:109CB0002A4602A806F0B0F900280BD133462A46FE -:109CC000394604A806F065F9002803D1049870B954 -:109CD00003E00E2008B0BDE8F0810748009033464D -:109CE0002A463946404601F013F80028F2D101987F -:109CF00020600020EEE7000031FF02002DE9F04176 -:109D00001D4617460E001ED0EDB1E0B1044606F028 -:109D10000FF9002818D12B463A463146A01C06F010 -:109D200007F9002810D12B463A463146201D06F08F -:109D3000FFF8002808D12B463A463146A01DBDE861 -:109D4000F04106F0F5B80E20BDE8F0812DE9F047AE -:109D500088B09A46109C0D4606000DD045B14FF0D4 -:109D60000008CDF8148030780DF11409B32805D01F -:109D7000072008B0BDE8F0870E20FAE70127134658 -:109D80004A463046059706F0C4F80028F1D15346FC -:109D90004A462946304606F0BCF80028E9D1069725 -:109DA000474606AB4A4629463046CDF8008000F0CB -:109DB00081FF0028DDD1069860B303AB4A462946EF -:109DC000304606F0CFF80028D3D107AB4A462946E3 -:109DD000304606F09EF80028CBD1BDF81C007C2848 -:109DE0001CD8039901F020F8029058B1BDF81C006E -:109DF0000090019002AB4A462946304600F050FEE2 -:109E00000028B6D12168029808602168BDF81C00BE -:109E1000888000E027600598A84201D00920A8E7C3 -:109E20000020A6E713460A460146B32004F05CBFB3 -:109E30002DE9F0411646070027D036B32BB31C4658 -:109E40000D4606F066F8002820D1A31C32462946AC -:109E5000384606F05EF8002818D1231D3246294600 -:109E6000384606F0B7F8002810D1631D324629465F -:109E7000384606F0AFF8002808D1A31D324629461F -:109E80003846BDE8F04106F0A5B80E20BDE8F081E7 -:109E90002DE9FC411D461646040007D036B12DB110 -:109EA0002088752804D00720BDE8FC810E20FBE740 -:109EB000002000902F687520E846ADF80400434666 -:109EC0003A46314601A806F033F80028ECD1434663 -:109ED0003A463146201D06F02BF80028E4D14346CF -:109EE0003A463146A01D06F023F80028DCD143464F -:109EF0003A46314604F1080006F01AF80028D3D19A -:109F000000992960D0E72DE9FC411D461646040062 -:109F100007D036B12DB12088732804D00720BDE8C2 -:109F2000FC810E20FBE7002000902F687320E8469C -:109F3000ADF8040043463A46314601A805F0F8FF63 -:109F40000028ECD143463A463146201D05F0F0FF8B -:109F50000028E4D143463A463146A01D05F0E8FF0B -:109F60000028DCD100992960D9E72DE9FF471D467B -:109F7000914604000AD0B9F1000F07D035B120880E -:109F8000762805D0072004B0BDE8F0870E20FAE758 -:109F900000200190D5F80080762001AFADF80800D0 -:109FA0003B464246494602A805F0C2FF0028EAD1D6 -:109FB0003B4642464946201D05F0BAFF0028E2D143 -:109FC0003B4642464946A01D05F0B2FF0028DAD1C3 -:109FD0003B464246494604F1080005F0A9FF002827 -:109FE000D1D13B464246494604F1100005F0A0FF9E -:109FF0000028C8D1E6683B46424656F8040C039058 -:10A00000494603A805F0C5FF0028BCD10097218A66 -:10A0100043464A46E06800F075FD0400B3D130467F -:10A0200000F010FF019828602046ACE72DE9FE43C0 -:10A030001D461646040007D036B12DB1208874287D -:10A0400004D00720BDE8FE830E20FBE7002000902F -:10A050002F687420E846ADF8040043463A4631467E -:10A0600001A805F065FF0028ECD143463A46314689 -:10A07000201D05F05DFF0028E4D143463A463146F5 -:10A08000A01D05F055FF0028DCD143463A46314675 -:10A0900004F10C0005F04CFF0028D3D1A16869B190 -:10A0A00051F8040C0290084600F0CCFE43463A46B4 -:10A0B000314602A805F06DFF0028C3D10099296040 -:10A0C000C0E700002DE9FE431D461646040007D0F8 -:10A0D00036B12DB12088722804D00720BDE8FE8358 -:10A0E0000E20FBE7002001902F6872200DF104087C -:10A0F000ADF8080043463A46314602A805F018FF7D -:10A100000028EBD143463A463146201D05F010FFAA -:10A110000028E3D143463A463146A01D05F008FF2A -:10A120000028DBD10648009043463A46314604F108 -:10A13000080002F0F3FC0028D0D101992960CDE796 -:10A14000FD9C02002DE9FC411D461646040007D087 -:10A1500036B12DB12088712804D00720BDE8FC81DC -:10A160000E20FBE7002000902F687120E846ADF834 -:10A17000040043463A46314601A805F0D9FE0028BE -:10A18000ECD143463A463146201D05F0D1FE002869 -:10A19000E4D143463A463146A01D05F0C9FE0028E9 -:10A1A000DCD143463A46314604F1080005F034FF5D -:10A1B0000028D3D143463A46314604F10A0005F05F -:10A1C000B7FE0028CAD100992960C7E72DE9FE43F0 -:10A1D0001D461646040007D036B12DB120887028E0 -:10A1E00004D00720BDE8FE830E20FBE7002001908D -:10A1F0002F6870200DF10408ADF8080043463A4678 -:10A20000314602A805F094FE0028EBD143463A46B9 -:10A210003146201D05F08CFE0028E3D143463A4626 -:10A220003146A01D05F084FE0028DBD143463A46A6 -:10A23000314604F1100005F07BFE0028D2D107481A -:10A24000009043463A46314604F1080002F066FCAD -:10A250000028C7D101992960C4E70000FD9C0200D5 -:10A260002DE9FE431D461646040007D036B12DB138 -:10A270002088772804D00720BDE8FE830E20FBE766 -:10A28000002000902F687720E846ADF80400434690 -:10A290003A46314601A805F04BFE0028ECD1434672 -:10A2A0003A463146201D05F043FE0028E4D14346DE -:10A2B0003A463146A01D05F03BFE0028DCD143465E -:10A2C0003A46314604F10C0005F032FE0028D3D1A5 -:10A2D000A16869B151F8040C0290084600F0B2FD83 -:10A2E00043463A46314602A805F053FE0028C3D142 -:10A2F00000992960C0E72DE9FC411C460D46060087 -:10A3000025D035B10027019730780DF10408682871 -:10A3100002D00720BDE8FC8101200190BAB1B4B1A0 -:10A320002068A0B113464246304605F01BFE0028C7 -:10A33000F0D12346424629463046009700F0BAFC49 -:10A340000028E7D10198A84203D00920E2E70E20B7 -:10A35000E0E70020DEE700002DE9FF4184B015466C -:10A360000E9C5FEA010832D085B3002001902E6870 -:10A37000682001AF8DF808003B463246414602A8EE -:10A3800005F04AFE002823D13B463246414604A848 -:10A3900005F0FFFD00281BD1049878BBB4B13B4603 -:10A3A0003246414607A805F0F4FD002810D10021EF -:10A3B000079A0846222A29D00DDC012A12D0022A47 -:10A3C00012D0202A1ED0212A10D11DE0FFE70E2036 -:10A3D00008B0BDE8F081232A1CD0242A1CD0252AED -:10A3E00004D115E00D4900E00D49204600913B469F -:10A3F0003246414602F04CFB0028E9D10198286022 -:10A400000020E5E70749F0E70749EEE70749ECE7F1 -:10A410000749EAE70749E8E70749E6E79D3E020002 -:10A420000F3E0200596402000965020065650200E2 -:10A43000FB630200A5650200A564020038B580B187 -:10A4400029B10023009303786C46672B01D00720C5 -:10A4500038BD0123009322B11346224605F082FD48 -:10A4600038BD0E2038BD00002DE9FC471F46060010 -:10A4700014460D4633D045B14FF00008CDF80480A6 -:10A4800030780DF10409672802D00720BDE8FC8769 -:10A49000012001901CB317B3386800B313464A4635 -:10A4A000304605F05FFD0028F0D13B464A4629467C -:10A4B0003046CDF8008000F0FDFB0028E6D1396879 -:10A4C00021B322680346222A29D00ADC012A11D0AE -:10A4D000022A11D0202A1ED0212A0FD11DE00E20E1 -:10A4E000D4E7232A1FD0242A1FD0252A19D0262AB0 -:10A4F00004D11CE0104800E010480B4600904A468A -:10A500002946304602F09CFA0028BFD10198A842A3 -:10A510000FD00920BAE70A48EFE70A48EDE70A48F2 -:10A52000EBE70A48E9E70A48E7E70A48E5E70A48A7 -:10A53000E3E70020AAE700002D3E0200EB3D020009 -:10A540002B640200C56402004D650200CB6302006B -:10A550008165020085640200C365020013460A4655 -:10A560000146672004F0C0BB38B5D0B1CAB1C3B151 -:10A570001C466B4605F02EFD002811D19DF80020E9 -:10A58000217862F3000121709DF80020520862F3E7 -:10A59000410121709DF80020920862F3870121702B -:10A5A00038BD0E2038BD38B581B17BB170B10078AF -:10A5B000C0F34005044665F35F0420F00300044344 -:10A5C0008DF80040684605F027FD38BD0E2038BDE7 -:10A5D000007800F001007047F8B51546060010D06D -:10A5E0007DB173B11F460C461B1D05F092FC00287F -:10A5F00006D100903B462A462146304600F05AFBE1 -:10A60000F8BD0E20F8BD00002DE9FC411C460D46AA -:10A61000060025D02DB100200190307801AF6628CA -:10A6200002D00720BDE8FC8101200190C2B1BCB17D -:10A630002068A8B113463A46304605F06AFC002867 -:10A64000F0D10948009023463A462946304600F0AA -:10A6500031FB0028E6D10198A84203D00920E1E7A8 -:10A660000E20DFE70020DDE7D9A5020013460A46E9 -:10A670000146662004F038BB38B530B12AB123B1A9 -:10A680001024009405F0D5FC38BD0E2038BD08B567 -:10A6900041B13BB130B1009313460A46102105F099 -:10A6A000DEFC08BD0E2008BD2DE9FC410C46DDF89E -:10A6B0002080050009D02CB100260196287801AF32 -:10A6C000632804D00720BDE8FC810E20FBE70120B1 -:10A6D000CDE900203A46284602F033FF0028F2D1A7 -:10A6E00043463A4621462846009600F0E3FA002801 -:10A6F000E9D10198A04201D00920E4E70020E2E777 -:10A700002DE9FF4184B0984614460F0019D0C4B11A -:10A71000002001902568632001AE8DF808003346C3 -:10A720002A4602A805F078FC00280BD133462A46B9 -:10A73000394604A805F02DFC002803D1049870B90F -:10A7400003E00E2008B0BDE8F081074800903346D2 -:10A750002A463946404600F0DBFA0028F2D101983B -:10A7600020600020EEE70000A9A802002DE9FC47C8 -:10A770001D460A9C0E46070039D046B14FF000082E -:10A78000CDF8048038780DF10409642802D0072040 -:10A79000BDE8FC87012001904AB345B33CB3106883 -:10A7A00028B3286818B3206808B3134813460090EC -:10A7B0004A46384600F07EFA0028E9D12B464A4640 -:10A7C00031463846CDF8008000F074FA0028DFD119 -:10A7D00023464A4631463846CDF8008000F06AFAF2 -:10A7E0000028D5D10198B04203D00920D0E70E202F -:10A7F000CEE70020CCE7000079A802002DE9FF4158 -:10A8000084B01446DDF838800F0019D0C4B10020A0 -:10A8100001902668642001AD8DF808002B46324671 -:10A8200002A805F0F9FB00280BD12B463246394629 -:10A8300004A805F0AEFB002803D10498C0B903E0DA -:10A840000E2008B0BDE8F0812B463246394607A8F5 -:10A8500005F0E2FB0028F4D1B8F1000008D033463F -:10A860003A4600959DF81C1005F0F9FB0028E8D148 -:10A87000019820600020E4E72DE9F041164607002A -:10A880000FD076B16BB11C460D4605F042FB002897 -:10A8900008D1A31C324629463846BDE8F04105F0F0 -:10A8A00099BB0E20BDE8F0812DE9F0411D46174609 -:10A8B0000E000ED06DB160B1044605F039FB0028E2 -:10A8C00008D12B463A463146A01CBDE8F04105F0C0 -:10A8D000A3BB0E20BDE8F0812DE9FC411C460D46CE -:10A8E000060029D035B10027019730780DF1040812 -:10A8F000622802D00720BDE8FC8101200190DAB176 -:10A90000D4B11068C0B12068B0B10D4813460090B2 -:10A910004246304600F0CEF90028ECD123464246AC -:10A9200029463046009700F0C5F90028E3D1019888 -:10A93000A84203D00920DEE70E20DCE70020DAE79A -:10A9400079A602002DE9FF4184B0984614460F0015 -:10A9500019D0C4B1002001902568622001AE8DF8A5 -:10A96000080033462A4602A805F056FB00280BD102 -:10A9700033462A46394604A805F00BFB002803D1CC -:10A98000049870B903E00E2008B0BDE8F0810748D4 -:10A99000009033462A463946404600F0B9F900286F -:10A9A000F2D1019820600020EEE7000019000300BA -:10A9B0007CB50C46D0B12CB100230193057801A9D8 -:10A9C000652D01D007207CBD0125019572B1156868 -:10A9D00065B1009313460A46214600F06BF9002842 -:10A9E000F1D10198A04203D009207CBD0E207CBD8E -:10A9F00000207CBD2DE9FF4184B0984614460F002D -:10AA000019D0C4B1002001902568652001AE8DF8F1 -:10AA1000080033462A4602A805F0FEFA00280BD1AA -:10AA200033462A46394604A805F0B3FA002803D174 -:10AA3000049870B903E00E2008B0BDE8F081074823 -:10AA4000009033462A463946404602F021F8002855 -:10AA5000F2D1019820600020EEE7000061AA020018 -:10AA60002DE9F0411D4617460E0016D0ADB1A0B13C -:10AA7000044605F0D1FA002810D12B463A4631465B -:10AA8000A01C05F055FA002808D12B463A4631465D -:10AA9000201DBDE8F04105F04BBA0E20BDE8F08165 -:10AAA0002DE9F84F4FF00008DDE90AA681468DF840 -:10AAB000008010680F461C461546B84216D06B46FB -:10AAC000484605F07CFA9DF80000012805D00CB13D -:10AAD000C4F800800020BDE8F88F4CB1206838B180 -:10AAE000564503D829687A1AB24203D20920F2E700 -:10AAF0000E20F0E749443246F8F79EFB28683044C0 -:10AB00002860E7E72DE9F8439846089C91460D46F2 -:10AB1000060001D0012000E000208DF8000023464F -:10AB200042464946684605F077FA070006D17EB1ED -:10AB30002068A8EB0001A94202D20920BDE8F883F1 -:10AB400048442A463146F8F777FB206828442060BD -:10AB50003846F3E7184810B50178427801F00F0144 -:10AB6000FF2A16D8154B5B7A032B01D0042B01D199 -:10AB700002290ED831B101290DD002290DD00329A7 -:10AB80000DD006E00E49801CF8F77AFB08B90120C9 -:10AB900010BD002010BD0F2302E0552300E0FF236D -:10ABA000002105E04418A4789C42F2D1491CC9B2A6 -:10ABB0009142F7D3EBE7000014CD002088B30020CA -:10ABC000C000030070B5084C050009D0103421689E -:10ABD000002907D008682060496828468847F6E7BA -:10ABE0000834F4E770BD000018CE0020054A0121AA -:10ABF00020B1012805D19170FFF7E4BF517000200A -:10AC0000FAE7704718CE00202DE9F05F264841682A -:10AC1000F1B3DFF898B00E688146DBF80040876832 -:10AC20008078E11B21F07F45ED1CB0B9DFF8808012 -:10AC30004FF48030C8F84403C8F804031120F8F733 -:10AC400075FB1120F8F77DFB4FF0010AC8F800A052 -:10AC50002F2003F00BFA89F802A0B54200D2354646 -:10AC6000124BE8193C3320F07F401860DBF80010ED -:10AC70005A46091B21F07F41001B20F07F40C91C70 -:10AC800081420FD9106818602F2003F0EFF900E01F -:10AC900004E0BDE8F05F1120F8F75EBBBDE8F05FAF -:10ACA00003F00ABFBDE8F09FFCB30020041501408B -:10ACB000001001402DE9F8438846116881460025BF -:10ACC000089E1C4617464046414502D10920BDE872 -:10ACD000F88301466B46484605F071F99DF800007F -:10ACE000012803D078B10B252846F0E74CB1236842 -:10ACF0003BB1002EF8D03A4641464846B04705469B -:10AD0000F2E70E20E3E7002CEED000202060EBE716 -:10AD1000F0B41C6806460020049D671C974202D9C7 -:10AD20000920F0BC7047002E03D000BF4FF0010790 -:10AD300001E04FF000070F551C6804F101041C608E -:10AD4000EFD0002DEDD03046AC46F0BC604700009F -:10AD5000034610B504200D4A002100BFC1EB0114C9 -:10AD600004EB840402EB8404A4781CB1491C082978 -:10AD7000F4D310BDC1EB011404EB840402EB840294 -:10AD8000012090700020196010BD000094CF0020B9 -:10AD9000034610B505200C4A002100BFC1EB011489 -:10ADA00004EB840432F824409C4208D1C1EB011129 -:10ADB00001EB810102EB81010020887010BD491C6C -:10ADC0000829EBD310BD000094CF002070B50446D5 -:10ADD00005200B4B002200BFC2EB021505EB8505D9 -:10ADE00033F82560A64204D103EB8505AD78012D2B -:10ADF00003D0521C082AEFD370BD00200A6070BD3A -:10AE000094CF002000200749024600BFC0EB00138A -:10AE100003EB830301EB8303401C9A700828F5D3EE -:10AE20007047000094CF002010B50C467C2801D953 -:10AE3000002010BD024802F08BFC10C010BD0000C5 -:10AE400064050300011F014802F0A4BC640503006F -:10AE5000014802F0B7BC000064050300034610B5CA -:10AE600004200E4A002100BF01EB410404EB011451 -:10AE700002EB8404A4781CB1491C0829F4D310BD4A -:10AE800001EB410000EB011002EB80000124847013 -:10AE900000F10C0242600020196010BDF4DC0020BB -:10AEA000034610B505200C4A002100BF01EB410408 -:10AEB00004EB011432F824409C4209D101EB410318 -:10AEC00003EB011102EB810100208870486010BD86 -:10AED000491C0829EAD310BDF4DC002070B50446F3 -:10AEE00005200B4B002200BF02EB420505EB0215CB -:10AEF00033F82560A64204D103EB8505AD78012D1A -:10AF000003D0521C082AEFD370BD00200A6070BD28 -:10AF1000F4DC002000200749024600BF00EB40039C -:10AF200003EB001301EB8303401C9A700828F5D350 -:10AF300070470000F4DC002070B5C6B01C46154612 -:10AF4000D8B1D5B1CCB10E4A40921646F822ADF830 -:10AF50000E2141AA3E92CDF808D13EAB3FAAF8F7A8 -:10AF6000ADFE002807D1DDE93E10324669DF2246FA -:10AF70002946F8F72DFF46B070BD0E20FBE7000014 -:10AF800080B300207CB51C46154680B17DB174B1FC -:10AF9000084A01920092F8F7F1FF002806D16846AE -:10AFA00002F0A6FE22462946F8F7F7FF7CBD0E20E8 -:10AFB0007CBD000080B300203EB51C46154688B11C -:10AFC00085B17CB101AA009289B26A46F9F7F7F916 -:10AFD000002806D100986DDF22462946009BF9F72C -:10AFE0000DFA3EBD0E203EBD3EB51C46154678B15D -:10AFF00075B16CB101AA00926A46F9F731FA0028DE -:10B0000005D100986CDF22462946F9F74BFA3EBD80 -:10B010000E203EBD70B596B01C4615460E4610B3C8 -:10B020000DB304B306A902911F210EAA8DF80C10CE -:10B0300004928DF8141005AA04A9CDE9001203ABFF -:10B0400002AA3146F9F797FA00280AD19DF8143080 -:10B050009DF80C10049A029872DF22462946F9F7EF -:10B06000B9FA16B070BD0E20FBE730B589B01C46AA -:10B070001546A8B1A5B19CB106AA039202AA0092F6 -:10B0800001AB6A46F9F7EEFA002807D19DF80410E3 -:10B09000009873DF22462946F9F718FB09B030BD46 -:10B0A0000E20FBE730B41D46144638B134B12DB143 -:10B0B00074DF2A46214630BCF9F70EBB30BC0E20A7 -:10B0C00070477CB51C46154688B185B17CB101AA94 -:10B0D000009289B26A46F9F705FB002806D100986C -:10B0E00079DF22462946009BF9F71EFB7CBD0E2026 -:10B0F0007CBD38B51C46154670B16DB164B16A4669 -:10B10000F9F748FB002806D1BDF8000078DF224699 -:10B110002946F9F75EFB38BD0E2038BD30B589B041 -:10B120001C461546C0B1BDB1B4B104AA019201AA32 -:10B13000009289B203AB02AAF9F751FB002809D1AA -:10B140009DF80C10BDF80800019A80DF22462946C0 -:10B15000F9F788FB09B030BD0E20FBE77FB51C4630 -:10B16000154698B195B18CB102AA00926B4601AA1E -:10B17000F9F77EFB002807D1BDF8040000997EDFB7 -:10B1800022462946F9F7A6FB04B070BD0E20FBE766 -:10B190007FB51C46154698B195B18CB102AA0092B4 -:10B1A0006B4601AAF9F716FC002807D1BDF8040088 -:10B1B000009975DF22462946F9F73EFC04B070BDC0 -:10B1C0000E20FBE73EB51C46154698B195B18CB1F3 -:10B1D00002AA00926B4601AAF9F784FC002808D164 -:10B1E000BDF80400009987DF23462A460099F9F745 -:10B1F000A5FC3EBD0E203EBD30B58DB01C461546AB -:10B20000F0B1EDB1E4B106AA029208AA03920AAA2B -:10B21000049205AB04AACDE9002303AB02AAF9F717 -:10B220000BFD00280AD10DF1080C9DF814309CE8A4 -:10B2300007008CDF22462946F9F752FD0DB030BDDC -:10B240000E20FBE730B41D46144638B134B12DB1A1 -:10B250008DDF2A46214630BCF9F7E8BC30BC0E2011 -:10B26000704730B589B01C461546D0B1CDB1C4B1D8 -:10B2700004AA029206AA019201AA009289B202AB24 -:10B2800003AAF9F7A3FD002809D1DDE90121BDF8E2 -:10B290000C0090DF22462946019BF9F7D1FD09B049 -:10B2A00030BD0E20FBE70000F0B5E3B01C461546AC -:10B2B0008E4660B35DB354B3002201AE4FAB2FAFE7 -:10B2C0000DF5B471C2EBC20C0CEB021CB44443F894 -:10B2D00022C007EB021C41F822C0521CD2B2082A3D -:10B2E000F0D3CDE9573159A9009158AB57AA71460F -:10B2F000F9F7DCFD002808D1DDE957019DF864214C -:10B300006FDF22462946F9F74FFE63B0F0BD0E20ED -:10B31000FBE730B5C3B01C461546B0B1ADB1A4B122 -:10B3200001AA3F9241AA409240AB3FAAF9F742FEE0 -:10B33000002808D1DDE93F017DDF0094DDE93F12FF -:10B340002B46F9F767FE43B030BD0E20FBE730B562 -:10B35000C3B01C461546D8B1D5B1CCB142AA3F9274 -:10B3600001AA4092F822ADF8042141AA009240AB14 -:10B370003FAAF9F791FE002808D1BDF80421DDE9C4 -:10B380003F017CDF22462946F9F7BCFE43B030BDC1 -:10B390000E20FBE77CB51C46154688B185B17CB113 -:10B3A00001AB6A46F9F7B4FE002808D19DF80410F5 -:10B3B000BDF8000076DF22462946F9F7D3FE7CBDB2 -:10B3C0000E207CBD30B58DB01C461546C8B1C5B148 -:10B3D000BCB109AA019204AA029202AA009289B2FF -:10B3E00001AB03AAF9F752FF002808D1DDE90112E9 -:10B3F000BDF80C0085DF22462946F9F78BFF0DB01A -:10B4000030BD0E20FBE77CB51C46154688B185B1E2 -:10B410007CB101AB6A46FAF715FE002808D19DF809 -:10B420000410BDF8000082DF22462946FAF734FEF8 -:10B430007CBD0E207CBD30B58BB01C46154698B146 -:10B4400095B18CB102AA00926B4601AAFAF72AFEC6 -:10B45000002807D1BDF80400009981DF2246294663 -:10B46000FAF750FE0BB030BD0E20FBE730B59FB0B1 -:10B470001C461546C8B1C5B1BCB114AA019203AAB5 -:10B48000029201AA009202AB13AAFAF74DFE00281D -:10B4900009D1DDE90121BDF84C0083DF23462A46AE -:10B4A0000199FAF781FE1FB030BD0E20FBE730B5E1 -:10B4B00099B01C461546C0B1BDB1B4B104AA019201 -:10B4C0000EAA029202AA009201AB03AAFAF7A2FE08 -:10B4D000002808D1DDE90112BDF80C0084DF224606 -:10B4E0002946FAF7D7FE19B030BD0E20FBE73EB56E -:10B4F0001C46154690B18DB184B102AA00926B46EC -:10B5000001AAFBF779F8002807D1BDF804000099DB -:10B510008FDF22462946FBF7A1F83EBD0E203EBD37 -:10B520003EB51C46154688B185B17CB101AA009292 -:10B5300089B26A46FBF7C8F8002806D100987BDF7D -:10B5400022462946009BFBF7E3F83EBD0E203EBD98 -:10B550003EB51C46154678B175B16CB101AA009292 -:10B560006A46FBF70BF9002805D100987ADF2246DE -:10B570002946FBF727F93EBD0E203EBD30B587B00A -:10B580001C461546A0B19DB194B101AA009203AA30 -:10B59000029289B26A46FBF71BF9002806D100988F -:10B5A00071DF22462946009BFBF734F907B030BD16 -:10B5B0000E20FBE730B587B01C46154690B18DB123 -:10B5C00084B101AA009203AA02926A46FBF7ACF981 -:10B5D000002805D1009870DF22462946FBF7C6F9FE -:10B5E00007B030BD0E20FBE73EB51C461546A0B1A6 -:10B5F0009DB194B102AA009289B26B4601AAFBF7F1 -:10B60000BBF9002808D1BDF8040000998EDF22465E -:10B610002946009BFBF7E0F93EBD0E203EBD7FB5FD -:10B620001C461546B0B1ADB1A4B103AA009202AB5D -:10B6300001AAFBF707FA00280AD19DF80C209DF813 -:10B640000810BDF8040088DF22462946FBF733FACC -:10B6500004B070BD0E20FBE738B51C46154670B12E -:10B660006DB164B16A46FBF72CFA002806D1BDF82B -:10B67000000089DF22462946FBF742FA38BD0E203A -:10B6800038BD3EB51C46154678B175B16CB101AAFE -:10B6900000926A46FBF774FA002805D100988ADF09 -:10B6A00022462946FBF792FA3EBD0E203EBD30B43D -:10B6B0001D46144638B134B12DB18BDF2A462146E0 -:10B6C00030BCFBF789BA30BC0E20704730B595B05E -:10B6D0001C461546F0B1EDB1E4B108AA02920DAADC -:10B6E000039211AA049204AB03AACDE9002389B204 -:10B6F00002AB07AAFBF776FA002809D102A890E866 -:10B700000E00BDF81C0086DF22462946FBF7C0FA72 -:10B7100015B030BD0E20FBE72DE9F04188B01D4685 -:10B720001646884607003DD0DEB3D5B3002005900D -:10B7300006A8039005A8FFF70BFB002833D1059856 -:10B740002349C0EB001000EB800001EB8004201DBA -:10B7500004F1240202906260059A04ABC2EB02126B -:10B7600002EB820201EB820101F14002A26017327A -:10B77000E26010322261413262611C324261173252 -:10B78000EB31C0E9062102A903A8CDE90001224658 -:10B7900041463846FBF786FB002804D1029828B1C1 -:10B7A00009E0FFE70E2008B0BDE8F0812088FFF730 -:10B7B000EFFA0028F7D1DDE9023220889DF8101059 -:10B7C0007FDF2A463146029BFBF7BCFBEBE700001C -:10B7D00094CF002038B51C46154670B16DB164B1E8 -:10B7E0006A46FBF7ABFC002806D19DF9000077DF25 -:10B7F00022462946FBF7C1FC38BD0E2038BD0000AB -:10B80000F0B599B01C4615460E4600B3FDB1F4B133 -:10B8100000226B460DF13801C2EBC2071F4441F80C -:10B820002270521CD2B2082AF6D3169117AB16AA70 -:10B830003146FBF7A9FC002807D19DF85C1016984B -:10B840006EDF22462946FBF7EDFC19B0F0BD0E2055 -:10B85000FBE73EB51C461546A8B1A5B19CB1002337 -:10B86000029302AB009301AA89B26B46FBF792FDEB -:10B87000002807D1BDF80400009998DF2246294628 -:10B88000FBF7BAFD3EBD0E203EBD30B587B01C466D -:10B890001546D8B1D5B1CCB10022049204AA0192C8 -:10B8A00005AA029202AA009289B201AB03AAFBF791 -:10B8B000E9FD002808D1DDE90112BDF80C0099DF8F -:10B8C00022462946FBF722FE07B030BD0E20FBE7DB -:10B8D00030B58BB01C461546D8B1D5B1CCB104AB50 -:10B8E00001930B23ADF8083002AB009303AA89B291 -:10B8F00001ABFBF711FE002809D1BDF80820BDF807 -:10B900000C0001999BDF22462946FBF737FE0BB05E -:10B9100030BD0E20FBE73EB51C46154698B195B1EB -:10B920008CB102AA009289B26B4601AAFBF72CFEE9 -:10B93000002807D1BDF80400009996DF2246294669 -:10B94000FBF750FE3EBD0E203EBD3EB51C461546E3 -:10B9500098B195B18CB102AA009289B26B4601AA46 -:10B96000FBF768FE002807D1BDF80400009997DFB7 -:10B9700022462946FBF78CFE3EBD0E203EBD7CB51F -:10B980001C46154690B18DB184B189B201AB6A46AF -:10B99000FCF7E1FB002808D1BDF80410BDF8000059 -:10B9A0009EDF22462946FCF7FEFB7CBD0E207CBDB7 -:10B9B0007CB51C46154688B185B17CB16A4601ABA1 -:10B9C000FCF727FC002808D1BDF80410BDF80000E2 -:10B9D0009DDF22462946FCF744FC7CBD0E207CBD41 -:10B9E00030B585B01C461546C0B1BDB1B4B104AA8E -:10B9F000019201AA009289B203AB02AAFCF752FCA1 -:10BA0000002809D1BDF80C10BDF80800019A94DF98 -:10BA100022462946FCF77EFC05B030BD0E20FBE730 -:10BA20007FB51C461546B8B1B5B1ACB103AE01AA9D -:10BA300002AB89B20096FCF773FC00280AD1BDF86E -:10BA40000C20BDF80810BDF804009ADF22462946F4 -:10BA5000FCF79AFC04B070BD0E20FBE73EB51C4617 -:10BA6000154698B195B18CB102AA009289B26B4685 -:10BA700001AAFCF78FFC002807D1BDF8040000994B -:10BA800095DF22462946FCF7B3FC3EBD0E203EBDA5 -:10BA900030B5C3B01C461546E0B1DDB1D4B10023CA -:10BAA0003F9340933FAB3D93F423ADF802313EAA60 -:10BAB000CDF804D189B23DABFCF7EEFC002807D1EC -:10BAC000BDF8F8003D999CDF22462946FCF712FD9F -:10BAD00043B030BD0E20FBE730B587B01C4615469D -:10BAE000D8B1D5B1CCB104AA019205AA029201AA9B -:10BAF000009202AB03AAFCF703FD00280BD1DDE99D -:10BB00000121BDF80C00ACDF0199009122462946C5 -:10BB1000029BFCF72BFD07B030BD0E20FBE770B594 -:10BB2000ADF58E6D1C4615460E46F0B3EDB3E4B38D -:10BB300002AACDF830240DF58962CDF838241032F0 -:10BB4000CDF83C24121DCDF84024121D4FF4007195 -:10BB5000CDF84424ADF83614343ACDF80C24ADF8C1 -:10BB60002014383282A9CDF81824CDF82814121DDB -:10BB70000DF58361CDF81C24CDF810143831CDF8C3 -:10BB800008144039603ACDE900120B1F0A1D3146F6 -:10BB9000FCF7E8FE00280FD10DF20C41BDF81404AB -:10BBA00006C9DDF80834A2DF00E008E02246294695 -:10BBB000DDF80834FCF71CFF0DF58E6D70BD0E200E -:10BBC000FAE730B5ADF50D7D1C46154620B31DB323 -:10BBD00014B384AA829289AA84928AAA859201AA1D -:10BBE00088924FF40072ADF818228BAA819281AA34 -:10BBF000009282AB83AAFCF739FF002809D1DDE966 -:10BC00008121BDF80C02A3DF22462946819BFCF767 -:10BC100067FF0DF50D7D30BD0E20FAE77CB51C46A3 -:10BC2000154690B18DB184B16A4601AB89B2FDF77A -:10BC30002DFA002808D1BDF80410BDF80000ADDFD2 -:10BC400022462946FDF74AFA7CBD0E207CBD70B520 -:10BC5000ADF5087D1C4615460E46D0B1CDB1C4B138 -:10BC60004FF4007282ABADF818228093694686AA21 -:10BC7000CDE9842180AB81AA3146FDF771FA002815 -:10BC800008D1BDF804028099A6DF809929B18B689C -:10BC900004E00E200DF5087D70BD002322462946E4 -:10BCA000FDF78CFAF6E730B585B01C461546C8B1ED -:10BCB000C5B1BCB104AA019201AA009289B203AB3A -:10BCC00002AAFDF7B1FA00280AD1BDF80C10BDF8A0 -:10BCD0000800019AA1DF22462946019BFDF7DAFA06 -:10BCE00005B030BD0E20FBE77CB51C46154680B183 -:10BCF0007DB174B101AA00926A46FDF701FB0028EC -:10BD000006D10098ABDF22462946009BFDF718FBC1 -:10BD10007CBD0E207CBD30B5ADF5077D1C461546BB -:10BD2000D0B1CDB1C4B182AA80924FF40072ADF807 -:10BD30001222CDF814D280AB81AAFDF757FB002860 -:10BD400007D1BDF804028099A8DF22462946FDF7F5 -:10BD50007BFB0DF5077D30BD0E20FAE730B587B0CF -:10BD60001C461546D8B1D5B1CCB10022049204AA24 -:10BD7000029205AA019201AA009202AB03AAFDF762 -:10BD800069FB002809D1DDE901219DF80C00A0DF45 -:10BD900022462946019BFDF797FB07B030BD0E20D8 -:10BDA000FBE77FB51C461546B0B1ADB1A4B103AAFF -:10BDB000009202AB01AAFDF7BDFB00280AD1BDF835 -:10BDC0000C20BDF80810BDF80400A7DF2246294664 -:10BDD000FDF7E4FB04B070BD0E20FBE730B5ADF518 -:10BDE000077D1C46154618B315B30CB302AA829200 -:10BDF0004FF40072ADF8182286AA839285AB83AA0D -:10BE0000CDE9002382AB84AAFDF7CEFB00280CD13C -:10BE1000DDE98212BDF81002859BAADF83990091AB -:10BE200022462946829BFDF701FC0DF5077D30BDBA -:10BE30000E20FAE730B5ADF5077D1C461546F8B182 -:10BE4000F5B1ECB102AA82924FF40072ADF80C2267 -:10BE500085AB83AACDE9002382AB84AAFDF728FC39 -:10BE600000280AD1BDF80C22BDF81002859B8299EA -:10BE7000A9DF22462946FDF750FC0DF5077D30BDB0 -:10BE80000E20FAE730B5ADF5077D1C461546E0B14A -:10BE9000DDB1D4B184AA819201AA859281AA0092CF -:10BEA00089B283AB82AAFDF73EFC00280AD1BDF817 -:10BEB0000C12BDF80802819AA5DF22462946819B13 -:10BEC000FDF782FC0DF5077D30BD0E20FAE700007E -:10BED00030B5ADF5077D1C461546F8B1F5B1ECB1AE -:10BEE0000F4A89B283AB1268849201AA859284AA10 -:10BEF000819281AA009282AAFDF79CFC00280AD1B7 -:10BF0000BDF80C12BDF80802819AA4DF224629462A -:10BF1000819BFDF7C7FC0DF5077D30BD0E20FAE7CC -:10BF2000F8FF020030B589B01C46154680B17DB1DE -:10BF300074B102AA019289B201AB04AAFEF7DBF93F -:10BF4000002806D10498212805D0222808D105E030 -:10BF50000E2009B030BD07A9039101E005A90291A7 -:10BF6000019968DF0199009122462946049BFEF75A -:10BF7000F3F9EEE7F0B587B01D4616460C4607000C -:10BF800013D096B18DB14FF0FF300090A1B26A4648 -:10BF90003846FEF753FA002808D102A8019000980D -:10BFA000212805D0222808D105E00E2007B0F0BDD9 -:10BFB00006A8039001E004A80290A1B201AB6A4672 -:10BFC0003846FEF751FA0028F0D1DDE9000167DFBD -:10BFD0002A463146FEF7C2FAE8E7000030B585B0E0 -:10BFE0001C46154658B355B34CB303AA019201AB96 -:10BFF0006A46FEF709FB00281FD10198A8B102A8E4 -:10C00000FEF72CFF002818D10298BDF8002000EBA5 -:10C01000400101EB00110B4820F82120019A00EBB0 -:10C02000810092880281001D01900146BDF8000048 -:10C0300066DF22462946FEF719FB05B030BD0E200B -:10C04000FBE70000F4DC002030B589B01C46154643 -:10C05000E0B1DDB1D4B110228DF8082004AA03921A -:10C0600008AA019201AA009203AB02AAFEF71CFBE8 -:10C07000002809D19DF80800019A039963DF224640 -:10C080002946019BFEF73CFB09B030BD0E20FBE7C3 -:10C0900030B58BB01C46154618B315B30CB310223F -:10C0A0008DF8102004AA029205AA019209AA03920F -:10C0B0000022099201AA009289B202AB03AAFEF7FC -:10C0C00055FB00280BD1DDE90210019A64DF0199CC -:10C0D00000919DF8103022462946FEF78FFB0BB0E9 -:10C0E00030BD0E20FBE730B587B01C461546B0B119 -:10C0F000ADB1A4B102AA019206AA009289B26B4620 -:10C1000001AAFEF7E9FB002807D1DDE9001062DF94 -:10C1100022462946009BFEF715FC07B030BD0E20D5 -:10C12000FBE73EB51C46154688B185B17CB101AA36 -:10C13000009289B26A46FEF73BFC002806D10098BF -:10C1400065DF22462946009BFEF754FC3EBD0E20CB -:10C150003EBD30B58DB01C46154688B185B17CB169 -:10C16000CDF830D00CAA00F0E9FB002806D10C98DD -:10C1700043DF224629460C9B00F002FC0DB030BD87 -:10C180000E20FBE7F0B480B17AB173B105780B4EA5 -:10C19000002400BF16F83470AF4209D106EBC40486 -:10C1A000646844B1A446F0BC60470E20F0BC704700 -:10C1B000641C502CEED30620F8E70000C8010300F1 -:10C1C00030B587B01C461546E8B1E5B1DCB106AA2A -:10C1D000029202AB03AACDE9002389B204AB05AAFF -:10C1E000FDF7C4FB00280CD1BDF80C20BDF81010E1 -:10C1F000BDF81400029BB4DF22462946029BFDF7DE -:10C20000F3FB07B030BD0E20FBE77CB51C4615469E -:10C2100090B18DB184B189B201AB6A46FDF71AFCC9 -:10C22000002808D1BDF80410BDF80000B1DF224697 -:10C230002946FDF737FC7CBD0E207CBD30B587B0AC -:10C240001C461546C0B1BDB1B4B104AA019201AA01 -:10C25000009289B203AB02AAFDF753FC002809D172 -:10C26000BDF80C10BDF80800019AB2DF224629463D -:10C27000FDF79FFC07B030BD0E20FBE730B589B05D -:10C280001C461546D0B1CDB1C4B103AA019205AA8E -:10C29000029202AA009289B201AB04AAFDF7B2FC95 -:10C2A000002809D1DDE90112BDF81000B0DF2246F7 -:10C2B0002946019BFDF7ECFC09B030BD0E20FBE7E1 -:10C2C00030B587B01C461546C0B1BDB1B4B104AAA3 -:10C2D000019201AA009289B203AB02AAFDF736FDD2 -:10C2E000002809D1BDF80C10BDF80800019AB3DF91 -:10C2F00022462946FDF796FD07B030BD0E20FBE72C -:10C3000010B540B13AB133B189B202F005FB002853 -:10C3100000D132DF10BD0E2010BD7CB51C46154685 -:10C3200080B17DB174B101AA00926A4603F0AAF906 -:10C33000002806D1009849DF22462946009B03F0D9 -:10C34000C1F97CBD0E207CBD38B54A7A0F4B62B175 -:10C3500000220A725969002906D001228DF80020B6 -:10C36000ADF802006846884738BD0A7A62B19B681A -:10C370004C68024619462046F7F786FB0028F3D0A2 -:10C38000BDE8384002F0A8BC5B68F1E7F8CC0020BB -:10C390002DE9FC430024099E1D4617468846814628 -:10C3A000ADF800408DF8044056B14DB1286838B161 -:10C3B0003968A8EB0100032804D20920BDE8FC83FA -:10C3C0000E20FBE76B464146484603F091FD30885E -:10C3D000BDF80010884201D20C20EFE701AB3A46CD -:10C3E0004146484603F0EBFD9DF8040008B10024E7 -:10C3F0000EE0BDF8000030802C600EE028683A4660 -:10C4000000EB44034146484603F072FD641CA4B2AD -:10C41000BDF800008442F1D334800020CEE710B58F -:10C42000044612B11088002211E04FF6FF70FAE7BF -:10C43000030A43EA0023A05C5840C0F303135840AA -:10C4400080EA003080B2C3B280EA4310521C8A42B4 -:10C45000EED310BD2DE9F05F884C0E46174614F858 -:10C46000381F02F03F0201F0C00111434AC414F822 -:10C470003B2C443C032A01D0042A03D1032B01D1D5 -:10C48000FF22E2630125A5724FF00008A4F80E8098 -:10C49000227862B14FF0030A4FF0040948B1032833 -:10C4A0004AD0012A51D0E5810220BDE8F09F052045 -:10C4B000FBE700F0DFF956B1012E11D0022E14D0A7 -:10C4C000032E23D0042E24D0052E25D0A9E0002F42 -:10C4D00055D1C4F8388084F809A084F80580A7E015 -:10C4E000032F4CD8B801A063A2E0012F02D0022F85 -:10C4F00045D104E084F809A084F8058002E084F8BE -:10C5000009906571BDE8F05F02F02EBA012F36D8B0 -:10C510008EE0A7BB06200BE04FF4FF7047B144F25A -:10C520009021012F06D0022F02D0032F79D101E0F4 -:10C53000E0817DE0E1817BE0012AB4D0A08940F474 -:10C540000040E08100F096F972E0032B04D0272E22 -:10C5500002D9E5810120A8E74246A4F80C80012811 -:10C5600002D002280CD063E040F201114448F6F7F3 -:10C570007CFE012002F052FA84F8009058E050E06E -:10C58000E36BFF2B04D0FF2902D9E58103208CE760 -:10C590003B48DFF8F0B04FF002084170022B14D096 -:10C5A00003DC3BB1012B3CD10BE0032B1DD0FF2B57 -:10C5B00037D11EE000F8022B0A463349F6F73CFE5D -:10C5C00008E000F8025B0F2202E000F8028B55221F -:10C5D000F6F744FE002002F021FA627A0020A16BF7 -:10C5E000042A27D0032A27D027E000F8029BFF2245 -:10C5F000EEE7304637B1012F04D0022F0ED0032FC3 -:10C6000016D111E0002002F009FA00F041F8CBF851 -:10C610000052CBF8005084F800A009E000F0BAF80E -:10C6200004E0E581042040E700F0A4F80028F8D0F9 -:10C6300000203AE7582000E0502000EBC101042A16 -:10C6400000D149080020F93140F27122401C4243D8 -:10C650009142F9D840F271214843A169C1F84005DF -:10C660000A4801F5A0710160011DC1F800B007483A -:10C670000C38056084F80080DAE7000088B30020F9 -:10C6800014CD002000100040C000030010F5014050 -:10C6900002494FF4007008607047000050160040D7 -:10C6A000034900238A7A8B72C9890160104670475A -:10C6B00088B300204AB1012A0BD0022A0DD0032AE8 -:10C6C0000FD0042A11D0002070470B4A02600820C6 -:10C6D0000EE00A4A026009200AE0094A02600A20C4 -:10C6E00006E0084A02601A2002E0074A02601B20A6 -:10C6F000087001207047000000800040009000405A -:10C7000000A0004000A0014000B0014010B503F0BF -:10C7100019F810B902F028F908B1042010BD064834 -:10C72000002101228172027081630448016841F096 -:10C7300010010160002010BD88B3002010ED00E062 -:10C7400078B104280DD0D8280BD0EC2809D0F028D7 -:10C7500007D0F42805D0F82803D0FC2801D00328FE -:10C7600003D1032903D0042901D0042070470020FD -:10C770007047000006490978012901D90020704757 -:10C7800003490246491C01F11700FFF793BF00005F -:10C7900088B3002040B210F0300F01D040F0C0004C -:10C7A000044940B20A78012A01D900207047486143 -:10C7B0000120704788B300202DE9F341002684B0A2 -:10C7C0003746344604A803F021FA002818D1FFF7B1 -:10C7D0009DFFA0B9DFF8948000F064F80546244876 -:10C7E0006946012290F800C018F80C301BB1001DFA -:10C7F00001F072FE02E00C3001F0E0FC18B1032001 -:10C8000006B0BDE8F08157B119485C380068304483 -:10C81000A84206D29DF800002E460402DCE701275C -:10C82000F8E79DF8000000270443A00BC4F305219E -:10C83000C4F3850204F00303FFF70CFE02A8FFF720 -:10C840002FFF0028C8D002980122000A8DF80400AA -:10C8500001A9074801F0C4F802988DF804000122EC -:10C8600001A9034801F0BCF8B6E70000CCB30020F2 -:10C870007CB4002010B500F013F8074801240460D0 -:10C880000549002008310860091D086002F0F6F82B -:10C890000248047010BD000008F5014088B3002074 -:10C8A000704700002DE9F0471F48016841F0100172 -:10C8B00001601E4D0127DFF878801E4C40F20119FF -:10C8C000002600BFD5F80C01B0B1C5F80C610120FD -:10C8D000F6F721FD207804280ED16F60D8F800000B -:10C8E000012805D1FEF736F910B1A089401CA081BE -:10C8F00049461148F6F7B9FCA069D0F8401111B1CA -:10C90000C0F84061DEE7D0F844010028DAD0A06921 -:10C91000C0F8446194F90100F6F7FDFC2069401C61 -:10C920002061BDE8F087000010ED00E0001000403D -:10C930000014004088B3002014CD00201CB50C4624 -:10C9400040B12CB100210191037801A9432B03D000 -:10C9500007201CBD0E201CBD01230193074B009333 -:10C9600013460A462146FEF7A5F90028F3D101989F -:10C97000A04201D009201CBD00201CBD21DA02000C -:10C980002DE9FF4184B0984614460F0019D0C4B178 -:10C99000002001902568432001AE8DF80800334641 -:10C9A0002A4602A803F038FB00280BD133462A465A -:10C9B000394604A803F0EDFA002803D1049870B9B1 -:10C9C00003E00E2008B0BDE8F08107480090334630 -:10C9D0002A4639464046FEF79BF90028F2D10198D5 -:10C9E00020600020EEE7000059DA02000E4910B581 -:10C9F0000A784C780023A24212D0521CD2B20A709C -:10CA0000022A00D10B70084A0B780C3252F823200E -:10CA100002608868104420F07F408860012010BDCB -:10CA20000360002010BD0000FCB30020034890F814 -:10CA30003400401C00F0070070470000B4B4002030 -:10CA400030B4029C1CB113B1A44630BC604730BC6A -:10CA50000E20704730B4029C1CB113B1A44630BC08 -:10CA6000604730BC0E20704730B4029C1CB113B13B -:10CA7000A44630BC604730BC0E20704730B4029CE6 -:10CA80001CB113B1A44630BC604730BC0E207047C7 -:10CA900030B4029C1CB110B1A44630BC604730BC1D -:10CAA0000E20704730B4029C1CB110B1A44630BCBB -:10CAB000604730BC0E20704730B4029C1CB110B1EE -:10CAC000A44630BC604730BC0E20704730B4029C96 -:10CAD0001CB110B1A44630BC604730BC0E2070477A -:10CAE00030B4029C1CB110B1A44630BC604730BCCD -:10CAF0000E20704730B4029C1CB110B1A44630BC6B -:10CB0000604730BC0E20704730B4029C1CB110B19D -:10CB1000A44630BC604730BC0E20704730B4029C45 -:10CB20001CB110B1A44630BC604730BC0E20704729 -:10CB300030B4029C1CB110B1A44630BC604730BC7C -:10CB40000E2070472DE9F84F0746007801265B4C10 -:10CB50004FF6FF724FF603494FF0000E01280ED03A -:10CB6000022873D18DF800E06846F6F7E1FFA0785F -:10CB700000286CD001286BD0022868D18FE0B968FA -:10CB8000BB890D7888885FEA951C00D0104691F823 -:10CB900001C091F80380654491F802C047F6043B58 -:10CBA000C444654415F0FF0F47F6025A12D14845B8 -:10CBB00001D0584506D1072B00D01046897911299C -:10CBC00008D108E047F60161884201D0504501D103 -:10CBD000062B00D01046804675468DF800E068466A -:10CBE000F6F7A6FFA8F5F640043838D0B0F5FF7F79 -:10CBF0001AD0A0F50070FD3805D000F5FF70B0F533 -:10CC0000004F33D119E0A4F80CA0A078032805D177 -:10CC1000A6702563656325706570E57000F050F8B7 -:10CC2000012000F099FA21E0A07801281ED102200D -:10CC3000A070A4F80C90A57218E0A078012815D077 -:10CC4000A07A30B1A4F80CB0E67004E033E02EE036 -:10CC50001FE0A4F80C9000F033F8A67206E0A0786C -:10CC6000022803D10320A070267066709DF8000092 -:10CC7000F6F782FFB86802F087FBA07803281AD184 -:10CC8000E078002817D000F07BFBBDE8F84F00F0FB -:10CC90009BB947F60160A08100F012F804E0A4F807 -:10CCA0000C9000F00DF8A672012000F055FA9DF8E6 -:10CCB0000000F6F761FFBDE8F88F0000B4B4002073 -:10CCC0002DE9F041244D002488B0A5F12C002C70F2 -:10CCD000818947F60160A046A5F11806814203D07C -:10CCE00047F60250814205D11B490224183903F04E -:10CCF0000BF90EE04FF603401127814203D047F6AF -:10CD00000430814205D114490324183903F0FCF89A -:10CD1000B7700F2040EA0410691C03F0F5F80E48C4 -:10CD200000F054FBE8700420ADF80800019503966C -:10CD3000ADF81040CDF81880ADF81C8006AA03A904 -:10CD400001A802F03FFB002802D00020F6F782FD88 -:10CD500008B0BDE8F0810000E0B4002030B5234CFD -:10CD600087B004F1240594F8340094F8301040EAB8 -:10CD7000C10040F0C0002870608A0E2141EA001016 -:10CD800080B2691C03F0C0F8284600F01FFBE87071 -:10CD9000002204212846FFF742FBADF800006A4656 -:10CDA000618AE069FFF73BFBADF8000004F10E017A -:10CDB00003F0AAF804200195ADF80800E06903909B -:10CDC000608AADF8100004F10E0005900220ADF865 -:10CDD000180005AA03A901A802F0F4FA002802D05D -:10CDE0000020F6F737FD07B030BD0000B4B40020D6 -:10CDF000064890F83410491C002301F00701C36174 -:10CE0000416363F3070002F03FBA0000B4B40020AE -:10CE100010B5806802F0B8FA002804D0BDE81040D0 -:10CE20000020F6F717BD10BD38B5054600248DF873 -:10CE300000406846F6F77CFE29460D4800F0DCFE0F -:10CE400010B10020F6F706FD0A484179427A1142F6 -:10CE500008D044719DF80000F6F78EFEBDE838401A -:10CE600000F00AB89DF80000F6F786FE38BD000015 -:10CE70008C050300B4B4002010B586B05FF0000448 -:10CE80008DF8104004A8F6F753FE002269460A48C0 -:10CE900000F04CFE40B10949012048719DF8100096 -:10CEA000F6F76AFE06B010BD9DF81000F6F764FEB6 -:10CEB000684600F005F8E3E78C050300B4B40020F1 -:10CEC0002DE9F0413F4C0346204694F801C0028A08 -:10CED000C16B0327022601258069BCF1050F6BD2C7 -:10CEE000DFE80CF067032B445C00187801281CD1A4 -:10CEF0001879022819D19A6894F83070107800F0E7 -:10CF00000700874213D1A571E26398892082062821 -:10CF100002D80020F6F79EFC238A65F307009B1FCA -:10CF200063F30F0102F0B0F96670BDE8F0810420F0 -:10CF30006070084602F028FA14E01D78002DF4D144 -:10CF40001B79012BF1D130B1091D921FF6F774F94D -:10CF5000E06B02F019FA677094F83000401C00F0A2 -:10CF600007002063BDE8F041F6F730BC19780129CD -:10CF7000DBD11979012902D0022915D0D5E738B1C2 -:10CF8000931F66F30707014663F30F02384601E07B -:10CF900067F3070002F078F96570C6E71878012892 -:10CFA00002D118790128F7D09868BDE8F04102F065 -:10CFB000EBB9A0780328B8D1BDE8F0410020F6F71E -:10CFC00049BC0000B4B4002038B500248DF80040FE -:10CFD0006846F6F7ADFD0D4800F078FE0C494A7939 -:10CFE0004B7A1A4203D010B18878032804D09DF8F8 -:10CFF0000000F6F7C1FD38BD4C719DF80000F6F752 -:10D00000BBFDBDE83840FFF737BF00008C050300CB -:10D01000B4B400201FB502208DF8000000208DF868 -:10D0200004006846FFF78EFD05488178032905D185 -:10D03000C078002802D0684600F0D8F81FBD000074 -:10D04000B4B400207FB5434D04780121AB78EA7871 -:10D050007CB1012C1AD0022C17D18DF80010017868 -:10D060008DF80410416802910089ADF80C00E9B90F -:10D0700019E08DF8001000788DF80400032B04D11E -:10D08000002A02D0684600F0B1F87FBD8DF800108C -:10D0900000788DF80400032BF7D1002AF5D06846FC -:10D0A000FFF7C2FE7FBD0020F6F7D4FBBDF80C00F1 -:10D0B00010B90020F6F7CEFBBDF80C400298042C06 -:10D0C0003BD3407800F00F01052906D00A1E07D097 -:10D0D0000E290FD00F2A39D02FE002F06BFA7FBD56 -:10D0E000A878032802D1E8780028CBD1029802F072 -:10D0F0004BF97FBD029E042C1FD9327853061CD5F4 -:10D1000013061AD50E2918D11044B178F2781144BB -:10D11000084410F0FF0F10D100223046A11EFFF787 -:10D120007EF9311931F8021C884206D1A87803280B -:10D13000DCD1E8780028D9D0B1E7029802F024F9D0 -:10D140000028D6D00020F6F785FB7FBD6846FFF7A4 -:10D15000F9FC7FBDB4B4002030B50E494FF4003265 -:10D160000124C1F8082390B140F6CA0358430A4B82 -:10D17000C0EB40151D601D6805EB90001860CC6089 -:10D180000020C1F844010C60C1F8042330BD4C609C -:10D1900030BD000000A0004044A500401049092017 -:10D1A00008600F4900200C390860091D08600D480F -:10D1B0000121C1604160891EC0F808134FF400319D -:10D1C000C0F804134FF0E0210015C1F88002064BAF -:10D1D000402283F80024C1F80001002070470000BD -:10D1E00010A5004000A000400AE000E038B5054668 -:10D1F00000248DF800406846F6F79AFC29460D4851 -:10D2000000F0FAFC10B10020F6F724FB0A4801797F -:10D21000427A114208D004719DF80000F6F7ACFC88 -:10D22000BDE8384000F00AB89DF80000F6F7A4FC0D -:10D2300038BD000078050300B4B4002010B586B0F6 -:10D240005FF000048DF8104004A8F6F771FC00228E -:10D2500069460A4800F06AFC40B10949012008719A -:10D260009DF81000F6F788FC06B010BD9DF8100080 -:10D27000F6F782FC684600F005F8E3E7780503005E -:10D28000B4B400202DE9F0413C4D04460427287831 -:10D2900001264FF0050806286AD2DFE800F0660391 -:10D2A0001523355C207818B1012816D1207916E0B5 -:10D2B0002079002811D1FFF751FD0020FFF74CFF26 -:10D2C0000220C5F838802BE02078012805D120798C -:10D2D00028B90120FFF740FF2F70BDE8F081022838 -:10D2E0002DD0FAE720780128F7D120790028F0D056 -:10D2F0000228F2D1A06801F0FDFB00B30020FFF787 -:10D300002BFF85F800801AE0207801280AD0022837 -:10D31000E3D1A86B401EA86316D0FFF71FFD0320C2 -:10D320002870DAE720790228D7D1A06801F0E2FB63 -:10D3300028B10020FFF710FFFFF75AFD2E7020469E -:10D34000BDE8F041FFF764BD062262F30700EA6919 -:10D3500001F09AFF07E020780128BED1207900284B -:10D36000BDD1FFF745FD2E70B7E7A8780328B4D1EB -:10D37000BDE8F0410020F6F76DBA0000B4B400201B -:10D3800038B500248DF800406846F6F7D1FB0D480B -:10D3900000F09CFC0C490A794B7A1A4203D010B178 -:10D3A0008878032804D09DF80000F6F7E5FB38BD27 -:10D3B0000C719DF80000F6F7DFFBBDE83840FFF781 -:10D3C0003DBF000078050300B4B400200178427826 -:10D3D000807811440844C043401CC0B2704700002C -:10D3E000084A002101EB810332F82330834204D143 -:10D3F00001EB810002EB80007047491C0829F1D342 -:10D400000020704758CC002070B50D4604460068D7 -:10D410004FF4887100F0BDFD4FF49071206800F06A -:10D42000B8FD4FF49271206800F0B3FD4FF4A27183 -:10D43000206800F0AEFD20681249C0F8041320688F -:10D440006907000B40B2090E002806DA00F00F0051 -:10D4500000F1E02080F8141D03E000F1E02080F8E6 -:10D46000001420680121000B40B200F01F0291401F -:10D470004009800000F1E020C0F88012C0F80011DF -:10D4800070BD000010030200F0B58488A518944216 -:10D4900000D82246A41AC288D6189A4200D8134649 -:10D4A000D21A4B880788BB420CD34088834209D8E4 -:10D4B0008888A04206D3A84204D8C888904201D3E5 -:10D4C000B04201D90020F0BD0120F0BD0268134632 -:10D4D00002E08A4204D01268002AFAD10B6001608F -:10D4E00070472DE9FC471E460A9C17468846814630 -:10D4F0002588234602F00DFD002808D120883346F8 -:10D50000CDE900503A4641464846FDF7C9FABDE824 -:10D51000FC87FFB581B01D4616460A9C0746234688 -:10D520002A46314602A802F003FD002807D12B4607 -:10D5300032460094BDF808103846FDF7E3FA05B00E -:10D54000F0BD2DE9FC471E460A9C174688468146D9 -:10D550002578234602F03EFD002808D12078334686 -:10D56000CDE900503A4641464846FDF799FABDE8F4 -:10D57000FC87FFB581B01D4616460A9C0746234628 -:10D580002A46314602A802F047FD002807D12B4663 -:10D59000324600949DF808103846FDF7B3FA05B0FE -:10D5A000F0BD00002DE9F047394E002780463D468A -:10D5B000DFF8E090D6F804A057E003D00446D0F896 -:10D5C0001C8035E099F8002002EB4201521CD2B2D7 -:10D5D00089F8002009EBC10199F80230091D9A422F -:10D5E00001D189F8005048680A780446012A12D00F -:10D5F000022A02D0032A3BD108E002F031F900B13F -:10D600000127257434E00574C06900E070680028C3 -:10D61000F9D170602CE0207C50BB88686060C868DD -:10D62000A0600869E0604869A061F07800B16560B9 -:10D630006268B168184B501A20F07F40984202D2BD -:10D64000A168084406E0881AA16820F07F40814262 -:10D6500002D9081A206000E0256065600120A560FD -:10D6600020742046E56102F0DDF8B8F10000A4D195 -:10D6700099F8001099F801008142A3D117B9716897 -:10D68000514502D00120BDE8F0870020FBE70000F3 -:10D69000FCB300207CCE0020FFFF7F0027480168FC -:10D6A00041F0807101602648016841F0010101608C -:10D6B000012081078867234A0A214FF4FE70F6F79C -:10D6C00055F908B1F6F7C6F800F0E8F818B1852862 -:10D6D00001D0F6F7BFF8002000F0B2F8002000F00B -:10D6E00011F900BF00F096F80028FBD0164801F0B1 -:10D6F0008FFC08B1F6F7AEF800F05EFB08B1F6F764 -:10D70000A9F8F6F797F908B1F6F7A4F80F4801F071 -:10D710002DFC00BFF6F708F900F0AEFB28B1F6F7D4 -:10D7200051F9052801D900F0B1FB01F055FC08B111 -:10D73000F6F790F801F000F8ECE70000FCED00E0EF -:10D74000001000E02CB50020E9EE020039E70200ED -:10D7500038B5044600258DF800506846F6F7E8F91C -:10D7600021686268086890420ED9401E08600178FE -:10D77000238AE26801FB0325227A2168101AC0B2CD -:10D780000A79824200D208719DF80000F6F7F4F998 -:10D79000284638BD38B5054600208DF800000C46F7 -:10D7A0006846F6F7C5F9E868298A201AB0FBF1F156 -:10D7B0002A681068431C136001709DF80000F6F79A -:10D7C000DBF938BD10B530B1017A42680368891AB7 -:10D7D000C9B21A6006E00E2010BD03681A68541C16 -:10D7E0001C601170491EC9B2F7D200680021017196 -:10D7F000084610BD00F180400068002800D00120DC -:10D80000704708B500F18040002101600068009079 -:10D8100008BD000008B500F029FB30B1684641DFC3 -:10D820000098002800D0012008BD0448006800F0DE -:10D830000110B0F1011FF6D0002008BD0C0400401B -:10D84000F8B5154D04466878002648B114B16168F2 -:10D85000002088478DF800606846F6F769F913E004 -:10D860008DF800606846F6F763F924B10A4821464E -:10D870000830FFF72BFE686830B900F0F7FA08B1FE -:10D880003FDF01E000F0A2FB6868401C68609DF883 -:10D890000000F6F771F9F8BD18CE002070B50B4CFA -:10D8A000207808B185250FE00020A060606020612D -:10D8B000E060074800F096FB054600F0D7FA08B98B -:10D8C00000F06EFB01202070284670BD18CE0020AD -:10D8D000EDAB020038B500258DF800506846F6F72C -:10D8E00027F9074CE068401EE060E06810B900F0DE -:10D8F000AFFBA5709DF80000F6F73EF938BD0000BB -:10D9000018CE0020F8B5134D0446A878002648B17B -:10D9100014B16168012088478DF800606846F6F709 -:10D9200007F90EE08DF800606846F6F701F924B1BA -:10D93000084821461030FFF7C9FDE86808B900F033 -:10D9400061FBE868401CE8609DF80000F6F714F9F8 -:10D95000F8BD000018CE0020F0B505460478154843 -:10D9600089B0164640F82420124A0869121DA2F117 -:10D97000080742F82400487F385520226846F5F70A -:10D980005BFC04942878385C48B10EB10A4A00E088 -:10D9900000226946281D00F069FD09B0F0BD0EB1F6 -:10D9A000064A00E00022694605F10C0000F09CFBED -:10D9B000F3E70000D0B30020CDFD0200DDFB020044 -:10D9C00030B40378054CE35C1BB130BC001D00F0A3 -:10D9D00083BD30BC0C3000F0F1BB0000CCB30020A4 -:10D9E00030B40378054CE35C1BB130BC001D00F083 -:10D9F000F5BD30BC0C3000F075BC0000CCB300208D -:10DA000030B40378054CE35C1BB130BC001D00F062 -:10DA1000E5BD30BC0C3000F065BC0000CCB300208C -:10DA20002DE9F84316465FEA000813D096B18BB192 -:10DA300010271C460D46009702F0FBFA002807D17C -:10DA400004F11003324629464046009702F0F1FAED -:10DA5000BDE8F8830E20FBE708B549B143B138B102 -:10DA6000009313460A461021203002F0F8FA08BD50 -:10DA70000E2008BD70B541EA4201DDE904564FF0C1 -:10DA8000A04441EA830141EA052104EB800041EA18 -:10DA90000641C0F8001770BD70B541EA4201DDE9EA -:10DAA00004564FF0A04441EA830141EA052104EB0A -:10DAB000800041EA0641C0F8001770BD1CB5002186 -:10DAC00000910B4601220191FFF7D4FF1CBD1CB54C -:10DAD000002100910B4601220191FFF7DDFF1CBDE3 -:10DAE0001CB500220B46009211460192FFF7C2FFBF -:10DAF0001CBD1CB500220B46009211460192FFF797 -:10DB0000CBFF1CBD1CB5002100910B4601220191E9 -:10DB10001146FFF7AFFF1CBD1CB5002100910B465D -:10DB2000012201911146FFF7B7FF1CBD2DE9F84313 -:10DB30000446002790460E468DF800706846F5F7BB -:10DB4000F7FF204600F039F838B105279DF80000AE -:10DB5000F6F712F83846BDE8F88320680568B8F192 -:10DB6000000F05D10168204600F03FF821680860E9 -:10DB7000E268012A0CD0022A0ED0042A11D0606873 -:10DB8000082A13D005FB02013046F5F755FBDDE707 -:10DB90006068405D3070D9E7606830F8150030800B -:10DBA000D4E7606850F825003060CFE700EBC5018E -:10DBB000D1E90001C6E90001C8E7016808684968C1 -:10DBC000884201D1012070470020704701680A682F -:10DBD00049688068884201D9491C00E000219142CF -:10DBE00001D101207047002070478068884201D928 -:10DBF000481C7047002070472DE9F84304464FF059 -:10DC000000080E468DF800806846F5F791FF204623 -:10DC1000FFF7DCFF07000AD0207C40B14FF004087A -:10DC20009DF80000F5F7A8FF4046BDE8F88320689E -:10DC3000456841682046FFF7D8FF2168486037B142 -:10DC4000206801682046FFF7D0FF21680860E2687D -:10DC5000012A14D0022A16D0042A19D0082A1CD06E -:10DC60006068314605FB0200F5F7E6FA204600F051 -:10DC70006FFE21688A688242D2D28860D0E76168EC -:10DC800030784855F2E76168308821F81500EDE7F3 -:10DC90006168306841F82500E8E7D6E9000162686C -:10DCA00002EBC502C2E90001E0E738B505460024F1 -:10DCB0008DF800406846F5F73BFF28680460446033 -:10DCC00084609DF80000F5F757FF38BD38B504466D -:10DCD00000208DF800006846F5F72AFF204600F086 -:10DCE00037FE04469DF80000F5F746FF204638BD94 -:10DCF00060DF002802D1024A012111707047000044 -:10DD000027B5002030B51548ADF5037D0078002813 -:10DD100021D04FF4FE7500BFADF8085282A96846C5 -:10DD200061DF38B1052816D00DF5037DBDE8304020 -:10DD3000F5F790BD6C460A497FA800F0EDF806E0C3 -:10DD4000D0E90021204690477FA800F0FCF8819898 -:10DD50000028E1D0F4E70DF5037D30BD27B50020A4 -:10DD60001C050300F8B5134C2078C0B10120A07049 -:10DD700000F084FF112814D0022000F097FF002546 -:10DD80008DF800506846F5F7D3FE11DF0646257082 -:10DD90009DF80000F5F7F0FE2EB13046F8BD0820E2 -:10DDA000F8BD0020F8BDA57001F026FC032000F0AE -:10DDB0007DFFF6E724B500207CB5204C207808B123 -:10DDC00008207CBD0120A070002000F057FF112822 -:10DDD00019D0002000F06AFF194800260068019061 -:10DDE0008DF800606846F5F7A3FE164901A810DF1C -:10DDF00005000AD0002020709DF80000F5F7BCFE59 -:10DE00002DB128467CBD00207CBD0120F3E7A67023 -:10DE100066700721162000F0C9FE08B1F5F71AFD5B -:10DE20000721152000F0C2FE08B1F5F713FD01F03F -:10DE3000FFFB012000F03AFFE5E7000024B50020D9 -:10DE4000B00403000D3802000EB50749684600F023 -:10DE500063F805E0D0E900108847684600F073F8E1 -:10DE600002980028F6D10EBDCC04030001480078CA -:10DE70007047000024B500200348017840788143B2 -:10DE800081F001007047000024B5002070B50C4CF3 -:10DE900060782178084212D01620F5F779FC002529 -:10DEA00030B14FF0E0214FF48000C1F8000203E0F0 -:10DEB00042F20100F5F7CEFC01F0BAFB657070BDCF -:10DEC00024B500201FB5684648DF30B1052814D0BE -:10DED00004B0BDE81040F5F7BDBC084901A800F04A -:10DEE0001BF806E0D0E900210098904701A800F057 -:10DEF0002AF803980028E6D0F4E71FBD3805030090 -:10DF000010B5044C2078002803D001F075FB0120E7 -:10DF1000607010BD24B50020016009684160AFF356 -:10DF2000008010B5D0E900215368994201D1002149 -:10DF300004E0D1E90034A34202D01946816010BD4B -:10DF400008314160F0E7816800290BD002689268CF -:10DF50000A44826041684B689A4203D108314160AB -:10DF6000FFF7DFBF70474058002800D001207047FE -:10DF700008B5002242504058009008BDD0F8040374 -:10DF8000084000D0012070474058002800D00120F0 -:10DF9000704708B5002242504058009008BD00006C -:10DFA00008480068012110F0010F08D14FF0E0206F -:10DFB000E02280F80024C0F88012C0F80011024866 -:10DFC0000160704700E100E01805004010B54FF413 -:10DFD0008070FFF716FC01208107C1F80403086078 -:10DFE00010BD00000649024600200B790BB18520C8 -:10DFF00070470A6001220A7100224A7170470000CE -:10E00000D8B3002070B54FF48270FFF7FAFB0220FE -:10E010004107C1F804030B4B196841F08070186088 -:10E020000948026842F00104046044684FF40A554C -:10E030004668361BAE42FBD30260196003490120DB -:10E04000086070BDFCED00E0001000E0080000403A -:10E0500004490120086004480168C1F30041002917 -:10E06000FAD170470C00004018040040002802D08C -:10E070000149800108477047C10103000121B1EB4C -:10E08000507F01D1012070470020704738B50D4600 -:10E0900000F052FC040014D000208DF80000684607 -:10E0A000F5F746FD207928B19DF80000F5F764FDED -:10E0B000112038BD0120256020719DF80000F5F782 -:10E0C0005BFD002038BD10B500F036FC002802D002 -:10E0D00000210160017110BD0149024801F0E2BD5B -:10E0E0002CCE0020002000402DE9F04105460079AB -:10E0F00016460F4600EB40012D4A01EBC00102EB32 -:10E10000810494F82A1011B10820BDE8F081294952 -:10E1100051F820102868FFF7B9FF08B11120F4E783 -:10E1200039462846F5F742FD6660386920603000C0 -:10E130004FF001062FD03F7F4FF48E712868FFF714 -:10E1400017FF4FF4A2712868FFF712FF28681A49D9 -:10E15000C0F8041328684FEA4711000B40B20028AA -:10E1600006DA00F00F0000F1E02080F8141D03E053 -:10E1700000F1E02080F800142868000B40B200F0A5 -:10E180001F0206FA02F14009800000F1E020C0F809 -:10E190008012C0F8001128680421C0F80015002082 -:10E1A000A061E06184F8290044F8140FA675ACE77B -:10E1B0002CCE0020F0FF0200800002002DE9F05F6D -:10E1C000054600794FF4017600EB400303EBC000F5 -:10E1D000344B03EB80040020636813B12B68C3F851 -:10E1E0000863A3694FF000096BB1E06938B160685A -:10E1F00010B12868C0F804631120BDE8F09FE26107 -:10E200000120216105E0C4F82490A261E160C4F816 -:10E210001C9094F82910014302D1284600F0B6FC66 -:10E2200060680028286803D0C0F804630020E4E791 -:10E230004FF4A2763146FFF79BFEB2464FF4927B35 -:10E2400059462868FFF78FFE06464FF48471286808 -:10E25000FFF789FE804651462868FFF784FE07468F -:10E2600048EA07003043EBD056EA070007D12146C1 -:10E27000286800F05BFCA169606A8142E0D8C4F8BC -:10E2800018900EB10320B8E70FB10F20B5E794F84E -:10E29000291001200029296801D00860C6E74860DC -:10E2A000C4E700002CCE002070B5044600790C4D68 -:10E2B00000EB400101EBC00005EB800090F8290065 -:10E2C00000280CD1204600F061FC2179012001EBEF -:10E2D000410202EBC10105EB810181F8290070BD0B -:10E2E0002CCE00202DE9F047054600790B4600EBC7 -:10E2F000400101EBC000234901EB8004284600F0F7 -:10E3000043F810B11120BDE8F0874FF00008C4F8C1 -:10E310002080A360626184F828804FF48E7647469F -:10E3200031462868FFF724FE28684FF00109C0F83D -:10E3300008902146286801F0CFFB606800BBD5F843 -:10E3400000A00EE094F8280008B10F2716E031462F -:10E350005046FFF708FE0028F4D02146504601F051 -:10E36000BBFB216A60698142F1D331462868FFF71F -:10E37000FAFD0028F9D02868C0F80C90C4F8148081 -:10E380003846C0E72CCE0020007900EB400101EBBD -:10E39000C000044901EB80004069002800D0012042 -:10E3A000704700002CCE00202DE9F047044600798C -:10E3B0004FF0000900EB400101EBC000254901EBE3 -:10E3C00080072068C0F80095786880B120682249ED -:10E3D000C0F8081320680121000B40B200F01F02B2 -:10E3E00091404009800000F1E020C0F880112068D1 -:10E3F000D0F80C25D0F81485D0F80865D0F8105561 -:10E400004FF0FF31C0F81415C0F80C152068C0F8A3 -:10E410000815C0F81015501C02D01046FFF74EFB2F -:10E42000B8F1FF3F02D04046FFF748FB681C02D01E -:10E430002846FFF743FB701C02D03046FFF73EFB37 -:10E440002068FFF740FE87F82A90C7F80490BDE8DF -:10E45000F08700002CCE002084020200014902480F -:10E4600001F0CCBC58CE0020002000402DE9F04146 -:10E470000546164600790F46154A00EBC00102EB2F -:10E48000810494F8201011B10820BDE8F0811149F1 -:10E4900051F820102868FFF7F9FD08B11120F4E7C2 -:10E4A00039462846F5F7C6FB6660386920601EB11C -:10E4B000397F2846FEF7A8FF28680821C0F8001514 -:10E4C0000020A061E0610121606184F82010DCE798 -:10E4D00058CE0020F4FF02002DE9F05F04460079D9 -:10E4E0000E4600EBC001DFF8F0A017460AEB8105ED -:10E4F0003046FFF7C3FDB0B168684FF000084FF435 -:10E50000047910B12168C1F80893A8694FF0000B95 -:10E5100080B1E86948B1686810B12068C0F8049318 -:10E520001120BDE8F09F1020FBE7EF614FF00108DC -:10E530002E6102E0EE60C5E9067B00254FF488718C -:10E540002068FFF726FD4FF4A2712068FFF721FD38 -:10E550002068C0F83465C0F838752068B8F1000F3D -:10E5600012D0D0F8001241F02001C0F8001220793A -:10E57000D04600EBC0010AEB8100406838B120684A -:10E58000C0F804932846CCE701210160EFE74FF47F -:10E59000887A4FF4A27951462068FFF7F5FC0746C8 -:10E5A00049462068FFF7F0FC06464FF49271206858 -:10E5B000FFF7EAFC014647EA06000843EBD0227960 -:10E5C00002EBC20308EB8302C2F818B001B10325C5 -:10E5D000002ED7D00F25D5E758CE00202DE9F047E3 -:10E5E00004460E460079204900EBC00001EB80058F -:10E5F00017463046FFF742FD30B1204600F036F8AE -:10E6000020B11120BDE8F0871020FBE76F61AE60FC -:10E610004FF49076002731462068FFF7BAFC4FF49C -:10E62000AC7841462068FFF7B4FC2068AA686969A5 -:10E63000C0F84425C0F84815206801218160686849 -:10E6400078B9B14649462068FFF79EFC0646414628 -:10E650002068FFF799FC0643F4D000B10F27002093 -:10E6600068613846CEE7000058CE002000790549A1 -:10E6700000EBC00001EB80004069002800D00120C1 -:10E680007047000058CE00202DE9F047044600797D -:10E69000274900EBC00001EB800720684FF000091C -:10E6A000C0F80095786880B120682249C0F8081346 -:10E6B00020680121000B40B200F01F029140400988 -:10E6C000800000F1E020C0F880112068D0F80C250F -:10E6D000D0F81485D0F80865D0F810554FF0FF3108 -:10E6E000C0F80C15C0F814152068C0F80815C0F85B -:10E6F0001015501C02D01046FFF7E9F9B8F1FF3FA2 -:10E7000002D04046FFF7E3F9681C02D02846FFF725 -:10E71000DEF9701C02D03046FFF7D9F92068FFF708 -:10E72000D2FC87F82090C7F80490BDE8F08700007D -:10E7300058CE00201003020010B5FFF797FB08B178 -:10E740003EDF10BD20BF40BF20BF10BD70B51D46CD -:10E75000049C0E46034642B13DB134B1296820689D -:10E76000091A052903D2092070BD0E2070BD411C75 -:10E770002160135420688118304601F0EAFB2168BB -:10E78000084420602860002070BD00002DE9F05F83 -:10E790005E4D00260B464FF0050B3446C0B229787B -:10E7A00004276BF307044FF003084FF002094FF002 -:10E7B000010A072863D2DFE800F00413535E7A826F -:10E7C0008900687803285AD16F70514800F092FC94 -:10E7D00008B1F5F73FF83146204661F3070048E0FD -:10E7E00020469AB26AF30700B2F5007F19D80129D2 -:10E7F00002D004290ED042E032466B681146984799 -:10E80000444800F079FE08B1F5F724F885F8009047 -:10E81000BDE8F09F32466B681146984785F800B016 -:10E82000F6E7012902D004290DD028E032466B68B2 -:10E8300011469847002000F05FFE08B1F5F70AF88E -:10E8400085F80080E4E732466B681146984700205F -:10E8500000F052FE08B1F4F7FDFF06202870D7E75C -:10E8600002290CD120462F7069F30700194662F384 -:10E870000F06324645E0032906D006290ED0BDE832 -:10E88000F05F0020F4F7E6BF204632466B6868F37D -:10E8900007001146984785F800A0B9E720463246A0 -:10E8A0006B6868F30700114698472F70B0E732464F -:10E8B0002046114667F3070062F3070121E0204676 -:10E8C000314667F307006AF30701D2E767F30704ED -:10E8D0006878A04669F307061C46032802D002297F -:10E8E00005D00BE06F70104600F004FC03E02F70C1 -:10E8F000104600F0B5FB08B1F4F7ACFF22463146F4 -:10E9000040466B68BDE8F05F18470000ACB40020DB -:10E9100074DF002074E1002028B111B100783228A2 -:10E9200003D0072070470E207047012901D009202D -:10E9300070470020704700000349884201D1034816 -:10E94000704700207047000000200040E0B3002026 -:10E9500001680A684968914201D3881A7047806843 -:10E96000801A0844401C704770B52A4C617A60696F -:10E97000FDF7E6FE012510B1E581042070BD00F031 -:10E980007DF82549606908602348617A001D0160AF -:10E9900021481830026822F0FF0202600368A26A70 -:10E9A00043EA1263036010021B4A103210601A48D7 -:10E9B00024300560184A002020321060207AA279A5 -:10E9C00040EA0220144A28321060032901D00429A9 -:10E9D0000CD12079E178000440EA0120A1780843B5 -:10E9E000617940EA01600C490831086094F824001C -:10E9F00094F82010400640EA0160A18B40EA0140F3 -:10EA0000E17940EA0120044940F0FF000C31086040 -:10EA1000002070BD88B300200C15004010B50446DE -:10EA2000FDF73EFF1149124AC86A1060121D086BBB -:10EA30001060086C022202EB40000D4A303A106070 -:10EA4000121F0C4810600C4A0020C2F8000103237A -:10EA5000C2F8003224B1C2F80C010120506010BD90 -:10EA6000486903492C39086010BD000088B30020B4 -:10EA70003815004014CD0020001000400B49032041 -:10EA800008600B490020C1F80002C1F81001012202 -:10EA9000C1F81020D1F81021002AFBD0C1F81001D4 -:10EAA00048600860034988817047000008F501400C -:10EAB0000010004088B3002070B5012670044FF0AC -:10EAC000E0210025C1F88001084C4010C4F848033B -:10EAD000C4F8080366602F20FFF7C8FAA660044C4C -:10EAE0002F20A560FFF7C2FAA57070BD001001408D -:10EAF000FCB3002010B5017842788378C0780A44CE -:10EB00001844104410F0FF0F0ED1C1F3C204FDF7FA -:10EB10008DFFA04206D0FDF789FF401C00F00700E2 -:10EB2000A04201D1012010BD002010BD70B50546E6 -:10EB300088690C4600284FF4847128460AD0FFF7F4 -:10EB400017FAD5F81805626AE1688854606A401CB3 -:10EB5000606270BDFFF70CFAD5F8180570BD1FB5DF -:10EB600001238DF80030CDE90121D0E9001268467B -:10EB700090471FBD1FB501238DF800308DF8081098 -:10EB80000192D0E90012684690471FBD10B50446B7 -:10EB900000684FF49271FFF7EBF94FF4847120682D -:10EBA000FFF7E6F920680121016010BD70B50D4640 -:10EBB0000446F4F7EDFD70B12846F4F7FBFD68B1AB -:10EBC0006807000E002C0CDA04F00F0101F1E021BF -:10EBD00081F8140D09E042F2010070BD42F202001A -:10EBE00070BD04F1E02484F80004002070BD000032 -:10EBF00010B5FFF7E1F802490020087010BD0000D1 -:10EC0000A8B4002038B50021012548B101280CD056 -:10EC1000032809D1FFF7C4F9BDE83840FEF75ABE12 -:10EC20004FF0E020C0F8805138BD8DF800106846E4 -:10EC3000F4F77EFF064C207808B9FEF72FFEE06857 -:10EC4000401CE060A5709DF80000F4F795FF38BD0A -:10EC500018CE002010B503280CD1F4F7C5FE002112 -:10EC6000054A0846F4F702FE002803D0BDE810402C -:10EC7000F4F7F0BD10BD0000F1EB02003EB5044614 -:10EC800009496846FFF748F908E000BFD0E90021CC -:10EC90002046904730B16846FFF755F902980028A2 -:10ECA000F4D13EBD11203EBDB40403003EB5044680 -:10ECB00008496846FFF730F907E000BFD0E90021B6 -:10ECC000204690476846FFF73EF902980028F5D1A4 -:10ECD0003EBD0000C004030002498969002900D03C -:10ECE00008477047F8CC002010B51C460B462AB1E7 -:10ECF00024B12168052903D2092010BD0E2010BDC2 -:10ED00001070511C184601F024F9401C20600020AE -:10ED100010BD00001CB5040002D10E20F4F79AFDCE -:10ED2000002001900090694601A800F0C5F9042870 -:10ED300020D008B1F4F78EFD019A02206B4602F84C -:10ED4000010B00980021401E00902046F5F72BF99A -:10ED5000062812D008B1F4F77DFD0098401C81B25E -:10ED60000090019800F0E0F908B1F4F773FDF4F7B2 -:10ED700015FE1CBD00F0F2F8D5E7019800F0BAF9D5 -:10ED800008B1F4F767FD0248F4F764FD1CBD00000C -:10ED9000FECADDBA10B54188074AF4F767FD08B12D -:10EDA000F4F758FDF4F70EFE002803D1BDE810403B -:10EDB000FFF7A6B810BD000015ED02007FB50E46A6 -:10EDC00004000DD07EB100200290019025780390C0 -:10EDD00001A902A800F070F9042806D040B123E090 -:10EDE0000E2004B070BD0920FBE700F0B7F8EFE794 -:10EDF0000299012001AB08700198029A401E01900F -:10EE000031462046521CFDF7BDF906280BD10C48AF -:10EE1000F4F720FD03A8029A009001AB06212846D2 -:10EE2000521CFFF793FC08B10320DAE70198401C5D -:10EE300081B20190029800F077F90028F4D1D0E770 -:10EE4000FECADDBA7CB50D46040017D00020019043 -:10EE50000090694601A800F02FF9042810D000287E -:10EE60000DD101990420134A087000982946401ECC -:10EE700000902046F5F748F828B118E00E207CBD38 -:10EE800000F06CF8E5E701996A460020491CF5F7A7 -:10EE900061F860B90098074A401C521E0121009099 -:10EEA000117081B2019800F03FF90028E7D00320EB -:10EEB0007CBD000091B40020007818B101280ED16B -:10EEC00000F078BBBFF34F8F05480168054A01F495 -:10EED000E06111430160BFF34F8F00BFFDE7704752 -:10EEE0000CED00E00400FA0510B5C0B2052813D2FD -:10EEF000DFE800F003090D131500F4F775FDBDE818 -:10EF0000104000F015B8BDE81040F4F747BD0648C2 -:10EF1000C0E902120121017010BD044800E00F2079 -:10EF2000BDE81040F4F796BC98B40020FECADDBAE4 -:10EF30001CB5094C207800280DD011DF00F05AF8DC -:10EF400054F8010F0090A188ADF804100199BDE8B4 -:10EF50001C40FDF731BC1CBD90B400200248406845 -:10EF6000002800D00047704798B40020014948604D -:10EF70007047000098B4002010B504001ED022682D -:10EF8000A188501C491E127889B23AB1032A08D0D0 -:10EF9000052A0AD00A48F4F75DFC08E0FFF70EFFE7 -:10EFA00001E0FFF74FFF10B106E0FFF785FF206893 -:10EFB00000F056F8002800D0032010BD0E2010BD30 -:10EFC000FECADDBA10B5FBF71DFFFBF7A3FFBDE8D6 -:10EFD0001040FBF73DBF0000054900200A78002AD9 -:10EFE00004D0087001F10800FFF7C6BF70470000A9 -:10EFF00098B4002010B500F02DFA044800210170EB -:10F0000041704160BDE8104000F032B9ACB400205E -:10F0100010B50D4C21786278114301D0082010BD45 -:10F0200080B10121217061706060084800F046FAEB -:10F030000028F4D000212170617061600728EED0B3 -:10F04000032010BD0E2010BDACB400208DE70200DF -:10F05000024801210170417070470000ACB40020EB -:10F0600070B50546002400F0F5F925B11048854239 -:10F0700003D010240AE00E2408E00E4D287804285E -:10F0800008D0062808D0052808D0082400F0F4F994 -:10F09000204670BD012009E0032007E0044800F08D -:10F0A0002BFA040001D00324F0E702202870EDE7DA -:10F0B00074E10020ACB4002010B502004FF0000055 -:10F0C00007D031B1094C63782BB1012B05D0042056 -:10F0D00010BD0E2010BD082010BD02236370044B2C -:10F0E00013604FF400720A8010BD0000ACB4002021 -:10F0F00074DF002001004FF0000004D0084A914264 -:10F1000003D0102070470E20704706494A78022A23 -:10F1100003D0042A01D00820704701224A707047AA -:10F1200074DF0020ACB4002070B50C46050005D09B -:10F1300034B11348854205D010240DE00E240BE0B5 -:10F14000072409E0B4F5007F01D90C2404E00D4E3A -:10F150007078022802D00824204670BD00F07AF9A9 -:10F160002146284600F0E0F9040005D0112C00D01B -:10F17000032400F081F9EFE703207070F9E7000045 -:10F1800074DF0020ACB400202DE9F843364C8DF834 -:10F1900000004FF0010C6178002511B1216A39B1EE -:10F1A00008E0C02802D1256284F801C0BDE8F883D8 -:10F1B000C028FBD02C4ADFF8B490E768126940F20F -:10F1C0000623022627B194F80280B8F1000F08D078 -:10F1D0007AB384F802C06261994230D3C02840D12A -:10F1E0002DE031B1042906D099420DD3C02838D181 -:10F1F0000AE0676108E0C02806D0D2B11B48E16A86 -:10F200003038816778306061684600F0A7F950B106 -:10F21000A07A0028CAD16269206A9DF800101154B2 -:10F22000401C2062C2E76169E068814202D1E5606A -:10F2300001E016E02561484689F800600AE068466A -:10F2400000F08CF90028E3D12561A57089F80060F1 -:10F25000616948464160218CA9F80810616A034839 -:10F2600088476570A2E70000F4B40020DCE50020C8 -:10F2700070B5044C0025256200F030F825706570EB -:10F28000A57070BDB4B40020024B1B6A002B00D0E7 -:10F2900018477047B4B4002070B50E4C00250E48D6 -:10F2A000E561A561FEF701FD0B481430FEF7FDFC9A -:10F2B000FDF774FF25636563257065700120FDF718 -:10F2C0004BFF47F60160A0810120A070E5706071DE -:10F2D000607270BDB4B4002078050300084810B512 -:10F2E0000178084A515C19B1001DFFF7CDF902E021 -:10F2F0000C30FFF759F804490020486210BD0000A7 -:10F300006C040300CCB30020F4B4002010B520B18D -:10F310000F494A6A1AB1082010BD0E2010BD48627C -:10F320000D490C4AA1F11400FEF716FB08B10720A5 -:10F3300010BD00F013F806490748012209311438BE -:10F34000FEF73EFB08B1F4F785FA002010BD00007F -:10F35000F4B4002015FB02008004030009480849AA -:10F3600081620021C1700722027141718171817235 -:10F3700000F12C01C16002493C310161704700007D -:10F38000E8E50020F4B4002001004FF0000007D0B1 -:10F390000A4BA3F12C02994208D1D16811B103E0C4 -:10F3A0000E207047D360704708207047044B994285 -:10F3B000FBD111690029F7D11361704720B50020F6 -:10F3C00024E60020F8B515460E4607001BD00024A1 -:10F3D0008DF800406846F4F7ABFB1C490A791C48DD -:10F3E000072A16D0D7E90012C0E9061200F1180169 -:10F3F0005EB1D6E90023C0E9082345B1D5E9001282 -:10F40000C0E90A1217E00E20F8BD8C60F5E70C6128 -:10F4100011E0D7E90023C0E900230D4A8EB1D6E9F7 -:10F420000036C0E9023675B1D5E90023C0E90423EE -:10F430000C7100F0A3FA9DF80000F4F79DFB00208A -:10F44000F8BD9460EFE71461F2E70000F4B4002027 -:10F45000ACE5002038B500248DF800406846F4F78C -:10F4600067FB0448C47144729DF80000F4F784FB04 -:10F4700038BD0000B4B40020F8B500252E468DF844 -:10F4800000506846F4F754FB0B4C0127E771207AD3 -:10F4900008B1267201259DF80000F4F76DFB677234 -:10F4A000FDF76EFFFDF790FD002D03D0BDE8F8409D -:10F4B000FDF7B0BDF8BD0000B4B400200C4910B594 -:10F4C0000A784B781A4301D0082010BD28B1086291 -:10F4D000FDF764FE18B1032010BD0E2010BD0548D5 -:10F4E000FFF714FF0400F9D1FFF7D6FE204610BD48 -:10F4F000B4B4002045D002001FB50A4900248A791F -:10F500005AB100228A71886101208DF804008DF8BB -:10F5100000206846FDF788FC00E0112404B0204676 -:10F5200010BD0000B4B400201FB5002438B131B1C3 -:10F53000094AD3692BB11124204604B010BD0E2016 -:10F54000FBE75182D06100208DF800008DF80400A7 -:10F550006846FDF74BFEEFE7B4B4002010B5047821 -:10F56000C02C0AD00C49DB2C09D00A460023927A21 -:10F57000DC2C07D0DD2C0DD108E0002010BD0120CF -:10F58000887207E032B18B72C02102E012B18B7237 -:10F59000DB210170012010BDF4B40020002805D14A -:10F5A0000349012048700020FBF70CBB70470000A6 -:10F5B00018CE00200D4810B5017809B1002010BD0B -:10F5C00001210170407820B9094A00210948F4F767 -:10F5D0001FFA0848002240F6CD410068F4F754FABB -:10F5E000FEF7C0FBFFF7EEFC012010BDA8B4002021 -:10F5F00031F702006804030010B51620F4F7C8F8CC -:10F6000048B10A4882684FF4800152B1016821F480 -:10F610008001016010BDBDE8104042F20100F4F726 -:10F6200019B94FF0E020C0F8801110BD88CF00203C -:10F6300070B54FF0E0254FF480041620C5F88042E5 -:10F64000F4F7A6F870B10D4890F800044009F4F7FB -:10F65000B1F850B10A48816869B1016841F480018C -:10F66000016070BD42F2010001E042F20200BDE81B -:10F670007040F4F7EFB8C5F8004170BD16E000E047 -:10F6800088CF00207CB50C4640B12CB100230193FB -:10F69000057801A9492D03D007207CBD0E207CBD33 -:10F6A0000125CDE9003513460A462146FBF702FB4A -:10F6B0000028F4D10198A04201D009207CBD00208F -:10F6C0007CBD00002DE9FF4184B0984614460F0030 -:10F6D00019D0C4B1002001902568492001AE8DF8F1 -:10F6E000080033462A4602A800F096FC00280BD1F9 -:10F6F00033462A46394604A800F04BFC002803D1C3 -:10F70000049870B903E00E2008B0BDE8F081074806 -:10F71000009033462A4639464046FBF7F9FA00285E -:10F72000F2D1019820600020EEE7000093FF020074 -:10F7300010B5FFF78DFCFFF7AFFDBDE81040FFF7F8 -:10F740000DBE000010B54FF080400021C0F8001140 -:10F7500001220260D0F80031002BFBD0104B9869D9 -:10F760004260C260C0F80415C0F84011C0F84411EE -:10F77000C0F84811C0F84C114FF48034C0F804436D -:10F78000C0F800220424C0F810455C6BC0F8404566 -:10F790004FF48274C0F8444502600020196110BD26 -:10F7A00088B300202DE9F84F1D4C00256846D4E9A8 -:10F7B00001A6FDF71BF9002738B30023009A616802 -:10F7C0001CE0D1F800C00846944503D9ACEB020216 -:10F7D0000A6015E0A2EB0C0263440760D0F80CC08D -:10F7E000C1698146BCF1000F08D006EB030828F080 -:10F7F0007F48C0E9018CC9F81C5005460029E0D1BA -:10F8000028466160FDF7CEFE03E02846FDF7CAFEFC -:10F8100010B15046FBF7F8F9E770BDE8F88F00002B -:10F82000FCB300200D4B10B5596831B102680C686B -:10F83000A24204D8A21A0A60C161586010BD0B46EA -:10F8400003E00B46C969121B21B10C689442F8D33E -:10F85000A41A0C600260C161D86110BDFCB3002025 -:10F860002DE9F041144E77683D462C4603E0844272 -:10F8700004D02546E469002CF9D11BE0D4B1A5429F -:10F880000BD1F869706040B90C49012088600021F3 -:10F89000B160F0702F20FEF7E9FB2168E069E861B4 -:10F8A00010B10268114401607068874202D00120E3 -:10F8B000BDE8F0810020FBE7FCB300200010014010 -:10F8C0007CB5064600240D468DF800406846F4F7E6 -:10F8D0002FF901A800F0DCFB70B105700949466002 -:10F8E0009DF8040048709DF80000F4F745F91420D5 -:10F8F000F3F732FD20467CBD04249DF80000F4F7A8 -:10F900003BF9F7E77CCE00202DE9F041194D6C68FA -:10F91000002C2CD0184800270068A968B846401A67 -:10F9200020F07F462068B0420CD82146361A0744A2 -:10F93000E469087C20B181F81080886949698847AA -:10F94000002CEFD129786878814206D1401CC0B2E2 -:10F950006870022801D185F80180064869780C306A -:10F9600040F82170BDE8F0411420F3F7F5BCBDE884 -:10F97000F0810000FCB30020041501402DE9F047A0 -:10F98000DFF8DC900126374CA9F1180700254FF06D -:10F990000508207818B100F067F806461AE02079CB -:10F9A00080B1042818D0052816D006281AD0A069DE -:10F9B000E1690068405C491CE161C02824D0DB2873 -:10F9C00025D026E0C02000F04FF8C4E906750646B1 -:10F9D00001202071257034E0C02000F045F8064673 -:10F9E00084F80480D9F8000048B11D491822A1F11B -:10F9F0001800F3F721FCC9F80050257121E02079A7 -:10FA0000401C2071BDE8F087DB20DC2100E0DD2117 -:10FA1000217000F029F80646A069E26981889142C8 -:10FA20000FD805602079012803D0207902280DD055 -:10FA300014E0B86840B10A481038C4E9060502204D -:10FA40002071002EA5D1DDE70420F9E7386928B13F -:10FA500003480838C4E906050320F1E74046EFE70C -:10FA6000C4E50020F4B4002070B5184CE278A16A17 -:10FA70008854521CD2B2E27023790420042B0BD09C -:10FA80002379052B0AD01E2A1DD3657901233DB1A8 -:10FA90002072A371002070BD0120F6E70020F4E77A -:10FAA0006371E0710A48FDF7ABFF08B1F3F7D2FECE -:10FAB0000849A06A884202D101F11E0000E0054811 -:10FAC000A0620020E070012070BD0000F4B40020AE -:10FAD0006C040300E8E5002070B50C4605464FF4C1 -:10FAE0008E71FEF745FA216AA068415C206A401CCD -:10FAF0002062C5F81C1570BD1FB500228DF80020CE -:10FB00000291816801914261D0E9001268469047F4 -:10FB10001FBD000070B501782D4D2E4CD1B10129CB -:10FB200045D0022901D0032010E0C068810705D02C -:10FB3000032129706860616A2548884725490122A8 -:10FB400009312548FDF73CFF002840D0BDE8704052 -:10FB5000F3F780BEA0790026C8B1E2781E48A16AFA -:10FB6000FDF74EFF08B1F3F775FE1949A06A0C3195 -:10FB7000884202D101F11E0001E015480C30A0625C -:10FB8000E670E0792870207AE071A67102E0667173 -:10FB9000E07928702878042802D0616A0C488847E8 -:10FBA0002079072813D0BDE87040FFF7E7BE094869 -:10FBB00001220930014604780748FDF701FF08B12A -:10FBC000F3F748FE2046BDE87040FFF7DDBA70BD90 -:10FBD000DCE50020F4B400206C0403001FB50A46E5 -:10FBE00001788DF8001041680191017A8DF80810B4 -:10FBF000C0680390044850F82210001F50F82220DB -:10FC0000684690471FBD0000D4B3002070B504467D -:10FC1000407988B00A2802D9072008B070BD202298 -:10FC20001D496846F3F708FB207801906078009042 -:10FC300060791A491A4E51F82000069000208DF87C -:10FC400014008DF815008DF81D0001F1580000F129 -:10FC50000C050178715C19B1001DFEF715FD02E07D -:10FC60002846FEF7A1FB0D48002269465830FDF7F3 -:10FC700073FE0028D1D1094858300078305C10B9A3 -:10FC80002846FEF711FB054960792C3151F8200018 -:10FC9000303908600020C0E74804030024B4002085 -:10FCA000CCB300202DE9FF470C4605464FF4007108 -:10FCB000FEF764F901274FF40178002618B34FF4DA -:10FCC000927949462846FEF74EF9E0B14946284662 -:10FCD000FEF74EF9C5F8088394F8290000B96F6063 -:10FCE00002208DF80000D5F88004C5F88004039048 -:10FCF000A0690290E0680190A661E661D4E9001273 -:10FD00006846904728E004212846FEF737F918B3E3 -:10FD10004FF484712846FEF726F9E8B121462846BB -:10FD2000FEF704FF616AA069884215D1E06938B125 -:10FD3000E268616AA0612069E6616662E06008E0ED -:10FD400094F8290000B96F60C5F80883A661E268DD -:10FD5000616A2046FEF703FF4FF48E78414628463D -:10FD6000FEF701F978B1206A6169884202D294F8FD -:10FD7000280020B341462846FEF7FAF8616911B120 -:10FD80002046FFF7B9FE4FF4A27841462846FEF719 -:10FD9000EAF8002818D041462846FEF7E9F894F81A -:10FDA000290000B12F60A06900280DD0A661E2688B -:10FDB000616A04B02046BDE8F047FEF7D0BE214698 -:10FDC0002846FFF789FEDEE7BDE8FF871FB50A4634 -:10FDD00001788DF8001041680191017A8DF80810C2 -:10FDE000C0680390044850F82210001F50F82220E9 -:10FDF000684690471FBD0000D4B300202DE9FF41A5 -:10FE00000C464FF4927705463946FEF7BDF80026BA -:10FE1000C0B139462846FEF7BCF802208DF8000034 -:10FE2000D5F88004C5F880040390D5F83C058DF81A -:10FE30000800E0680190A661E661D4E90012684616 -:10FE4000904723E04FF4887739462846FEF79CF820 -:10FE5000E0B139462846FEF79CF8D5F83C15A06974 -:10FE6000884213D1E06960B1E268D5F8000220F061 -:10FE70002000C5F80002E069A0612069E661E06049 -:10FE800001E0A661E2682046FEF774FE4FF4A27717 -:10FE900039462846FEF778F860B139462846FEF71D -:10FEA00078F8A06930B1A661D5F83C152046E26823 -:10FEB000FEF760FE4FF4907739462846FEF764F867 -:10FEC000002813D039462846FEF763F860690028F9 -:10FED0000CD0D5F84C058DF800608DF80800A068AE -:10FEE00001906661D4E9001268469047BDE8FF8141 -:10FEF00030B51468A51C8D4205D8204400881880B0 -:10FF00001068801C106030BD0870000A4870022024 -:10FF1000704710B51468091B022901D2092010BDD1 -:10FF20002044008818801068801C1060002010BDDC -:10FF300010B51C68121B022A01D2092010BD2144F1 -:10FF400000880870000A48701868801C186000203B -:10FF500010BD0870020A4A70020C8A70000EC87048 -:10FF60000420704710B538B132B12BB11468091BA9 -:10FF7000042903D2092010BD0E2010BD2044C178F1 -:10FF8000006861F31F6018601068001D1060002099 -:10FF900010BD10B51C4639B130B12CB12368D21A4E -:10FFA000042A03D2092010BD0E2010BD1944006898 -:10FFB000FFF7CFFF216808442060002010BD30B556 -:10FFC0001468651C8D4204D8005D18701068401CD0 -:10FFD000106030BD10B514688C4201D1092010BDED -:10FFE000005D18701068401C1060002010BD0000FB -:10FFF000D9E002005DE40200000200000000000001 -:020000040003F7 -:1000000017A5D84602FFFFFF00000000020001FF15 -:100010000501FFFF00C2010010B51C68944201D128 -:10002000092010BD007808551868401C1860002091 -:1000300010BD70B51446049D2BB12268891AA942DF -:1000400003D2092070BD0E2070BD11182A46184633 -:10005000F3F7F2F8206828442060002070BD70B5E6 -:100060000D46049C38B132B12CB121685B1AAB4209 -:1000700003D2092070BD0E2070BD8B1801462A46A0 -:100080001846F3F7D9F8206828442060002070BD96 -:100090000A494A788B78521CD2B2934200D100228E -:1000A0000B78934201D1002070470270487800EB32 -:1000B000400001EBC000001D704700007CCE002016 -:1000C000FFC1FBE84C90728BE7B3518963AB2323EC -:1000D00002841872AA612F3B51A8E53749FBC9CAAF -:1000E0000C18532CFD45E39AE6F15DB0B61BB4BE87 -:1000F0002A50EAE90E9C4B5E5724CCA1B759B88729 -:10010000FFE07D742648B9C5F3D9A8C4B1D59111D3 -:1001100001420C39D5B0979D28D4F29BA4FD6465AB -:10012000068C2996FEA2714DF3F82E58DB0D5A5F0E -:100130001528F57407CE25AF2B12E6D0DB2CDCC3D7 -:100140007FF03E3A13A4DCE2F96C54E2D8EAC888A6 -:100150000021869C6AD8CB4E146AF94DD27EB23209 -:1001600003C6144B7FD1B8A6797C17ACED06ADAFB2 -:100170000A947ABA03E792D7150973E86D16EEE18F -:100180003F781F9D09526EF17C362A716C7564446C -:100190008010434E35EC65270AB5FC26693F599916 -:1001A00001638AA5BF685CD33CBE0BD67683D65765 -:1001B000054A3DDD8173C9EB8A8439F4360BF700BB -:1001C0000338FDD8704700003200000001C3020070 -:1001D000490000001BC302004300000053C102009D -:1001E00062000000E7C002006300000049C0020096 -:1001F0006400000091C002006500000023C10200FD -:100200006800000025BF02006700000075BF020003 -:100210006000000085AF020066000000DDBF020044 -:100220006900000039AF0200B00000007DC202008A -:10023000B10000000BC20200B20000003DC202008B -:10024000B3000000C1C20200B4000000C1C102003E -:100250006C000000E9AF02006D000000B9AF0200C1 -:1002600070000000B5B50200710000007DB502000D -:100270006E00000001B802006F000000A9B2020089 -:100280008A00000083B602008B000000AFB60200B7 -:100290008C000000F9B102008D00000045B20200A0 -:1002A00085000000C5B3020086000000CDB6020044 -:1002B0007200000015B00200730000006BB0020075 -:1002C00074000000A5B002007500000091B10200AA -:1002D0007600000095B3020077000000D5B7020059 -:1002E00078000000F3B0020079000000C3B0020003 -:1002F0007A00000051B502007B00000021B5020029 -:100300007C0000004FB302007D00000013B3020028 -:100310007E0000005DB102007F00000019B70200FE -:10032000800000001DB1020086000000CDB6020072 -:1003300087000000C5B10200880000001FB602005F -:100340008900000059B602008200000007B40200D4 -:100350008100000037B4020084000000AFB4020046 -:10036000830000006DB402008E000000E9B50200B9 -:100370008F000000EFB402009000000063B20200A2 -:1003800094000000E1B90200950000005DBA02008F -:100390009600000017B90200970000004BB9020058 -:1003A000990000008BB802009A00000021BA0200F8 -:1003B0009B000000D1B802009C00000091BA02002E -:1003C0009D000000B1B902009800000053B802007F -:1003D0009E0000007FB90200A00000005DBD020089 -:1003E000A1000000A7BC0200A20000001FBB020089 -:1003F000A3000000C3BB0200A4000000D1BE0200A5 -:10040000A500000085BE0200A60000004FBC02004F -:10041000A7000000A3BD0200A800000017BD020055 -:10042000A900000035BE0200AA000000DDBD0200E8 -:10043000AB000000E9BC0200AC000000D9BA020029 -:10044000AD0000001DBC0200FFFFFFFFFFFFFFFF2C -:10045000FFFFFFFFFFFFFFFF0000000000000000A4 -:100460000000D6010701000054DF0020000000005A -:1004700000200040000000000020004000000000BC -:100480000600000008000000070000000500000052 -:10049000000000000100000000E0D701070100009B -:1004A000000000000000000000000000000000004C -:1004B00001000007A0040300B004030008000000CE -:1004C000D8040300E804030008000000E804030067 -:1004D000F804030008000000C8050300D805030065 -:1004E0000000000000000000B8050300C80503007C -:1004F0000000000000000000A0050300A8050300A4 -:10050000A8050300B0050300000000000000000083 -:10051000000000000000000080B30020F804030089 -:100520001805030008000000B0050300B80503002B -:10053000000000000000000028050300380503004B -:1005400008000000D805030080B30020AC010000C3 -:10055000C0320200440603002CB50020043B00001A -:100560008037020018B4002010B4002018B4002016 -:10057000F4D800208000000084E4002074E3002010 -:10058000100000001000000001000000A0E50020A5 -:1005900090E40020100000001000000001000000A6 -:1005A00095ED020000000000C541020000000000BF -:1005B0009DF502000000000005DD020000000000C3 -:1005C000C5DE02000000000005EC02000000000093 -:1005D00055EC02000000000091240808011201F30C -:1005E00003031280AA401327294176715B06145534 -:1005F00055550362C409423323F0041AD06D23B069 -:1006000013335027223B1BA04E181A75101A9D0851 -:1006100022EB14903A012CE0D701303223321B3206 -:10062000175A15045A140419427904511220BA4079 -:100630000801271301012902110367017E040090BC -:04064000D0030000E3 -:00000001FF diff --git a/hex/sd_api_v5/connectivity_0.0.0_1m_with_s132_5.0.hex b/hex/sd_api_v5/connectivity_0.0.0_1m_with_s132_5.0.hex deleted file mode 100644 index 3d91f93ba..000000000 --- a/hex/sd_api_v5/connectivity_0.0.0_1m_with_s132_5.0.hex +++ /dev/null @@ -1,12107 +0,0 @@ -:020000040000FA -:1000000000040020E90800007D050000C908000088 -:1000100087050000910500009B050000000000001E -:100020000000000000000000000000000D090000BA -:10003000A505000000000000AF050000B9050000A4 -:10004000C3050000CD050000D7050000E105000054 -:10005000EB050000F5050000FF05000009060000A3 -:10006000130600001D0600002706000031060000F0 -:100070003B060000450600004F0600005906000040 -:10008000630600006D060000770600008106000090 -:100090008B060000950600009F060000A9060000E0 -:1000A000B3060000BD060000C7060000D106000030 -:1000B000DB060000E5060000EF060000F906000080 -:1000C000030700000D0700001707000021070000CC -:1000D0002B070000350700003F070000490700001C -:1000E000530700005D07000067070000710700006C -:1000F0007B070000850700008F07000099070000BC -:10010000A30700001FB500F003F88DE80F001FBD26 -:1001100000F0E0BB1FB56FF00100009040100390AD -:10012000029001904FF010208069000B420900F00E -:100130001F045DF822300120A04083434DF8223097 -:10014000684600F045F91FBDF0B54FF6FF734FF458 -:10015000B4751A466E1E11E0A94201D3344600E080 -:100160000C46091B30F8027B641E3B441A44F9D14B -:100170009CB204EB134394B204EB12420029EBD17E -:1001800098B200EB134002EB124140EA0140F0BD8F -:10019000DE4992B00446D1E90001CDE91001FF2209 -:1001A0004021684600F03CFB94E80F008DE80F000A -:1001B000684610A902E004C841F8042D8842FAD12B -:1001C00010216846FFF7C0FF1090AA208DF8440068 -:1001D000FFF7A0FF00F0F3F84FF01024A069102201 -:1001E0006946803000F002F9A069082210A900F0E9 -:1001F000FDF800F0D8F84FF080510A6949690068AD -:100200004A43824201D8102070470020704710B541 -:10021000D0E900214FF0805002EB8103026944696C -:100220006243934209D84FF01022536903EB8103D4 -:100230000169406941438B4201D9092010BD5069D1 -:10024000401C01D0002010BD0F2010BD70B501680A -:100250000446AF4D4FF01020072952D2DFE801F0DD -:10026000330419293C1E2500D4E902656468294637 -:10027000304600F0CDF82A462146304600F0B6F868 -:10028000AA002146304600F09FFA002800D0032043 -:1002900070BD00F051FB4FF4805007E0201DFFF7C8 -:1002A000AAFF0028F4D100F047FB60682860002016 -:1002B00070BD241D94E80700920000F085FA002824 -:1002C000F6D00E2070BD8069401C12D0201DFFF7B3 -:1002D0009EFF0028F6D109E08069401C09D0201D4E -:1002E000FFF789FF0028EDD1606820B12046FFF7B5 -:1002F0004FFF042070BDFFF70DFF00F060F800F025 -:1003000052F8072070BD10B50C46182802D0012005 -:10031000086010BD2068FFF799FF206010BD4FF006 -:100320001024A069401C05D0A569A66980353079E4 -:10033000AA2808D06069401C2DD060690068401C64 -:1003400029D060692CE010212846FFF7FDFE3168B6 -:1003500081421CD1A16901F18002C03105E030B1B8 -:1003600008CA51F8040D984201D1012000E0002094 -:100370008A42F4D158B1286810B1042803D0FEE7AE -:10038000284600F057F862496868086008E000F005 -:1003900016F800F008F84FF480500168491C01D0AD -:1003A00000F0A4FAFEE7BFF34F8F5A4801685A4A9B -:1003B00001F4E06111430160BFF34F8FFEE74FF09E -:1003C00010208169491C02D0806900F0AEB87047E6 -:1003D000524A01681160121D416811604F4A8168DC -:1003E00010321160111DC068086070472DE9F0419E -:1003F00017460D460646002406E03046296800F000 -:10040000A7F8641C2D1D361DBC42F6D3BDE8F08153 -:1004100070B50C4605464FF4806608E0284600F0AB -:1004200084F8B44205D3A4F5806405F58055002C0A -:10043000F4D170BD4168044609B1012500E00025F2 -:100440004FF010267069A268920000F0BDF9C8B1A3 -:10045000204600F01AF89DB17669A56864684FF4EB -:10046000002084420AD2854208D229463046FFF74E -:10047000CFFF2A4621463046FFF7B8FFFFF79FFF20 -:10048000FFF791FFFFF746FEF8E72DE9FF414FF038 -:100490001024616980680D0B01EB800000F6FF708D -:1004A000010B0020009001900290024603906846E4 -:1004B00001230BE0560902F01F0C50F8267003FAD6 -:1004C0000CFC47EA0C0740F82670521CAA42F1D3F4 -:1004D0000AE04A0901F01F0650F8225003FA06F616 -:1004E000354340F82250491C8029F2D3A169090BF9 -:1004F0004A0901F01F0150F822408B409C4340F80C -:100500002240FFF765FFBDE8FF8100005C090000A5 -:10051000000000200CED00E00400FA050006004099 -:10052000144801680029FCD07047134A0221116069 -:1005300010490B68002BFCD00F4B1B1D186008687E -:100540000028FCD00020106008680028FCD070470C -:10055000094B10B501221A60064A1468002CFCD021 -:10056000016010680028FCD0002018601068002886 -:10057000FCD010BD00E4014004E5014008208F4993 -:1005800009680958084710208C4909680958084724 -:1005900014208A49096809580847182087490968BA -:1005A0000958084730208549096809580847382004 -:1005B00082490968095808473C2080490968095858 -:1005C000084740207D4909680958084744207B496D -:1005D00009680958084748207849096809580847B0 -:1005E0004C20764909680958084750207349096822 -:1005F0000958084754207149096809580847582084 -:100600006E490968095808475C206C49096809580F -:100610000847602069490968095808476420674904 -:100620000968095808476820644909680958084753 -:100630006C20624909680958084770205F490968B9 -:100640000958084774205D49096809580847782007 -:100650005A490968095808477C20584909680958C7 -:10066000084780205549096809580847842053499C -:1006700009680958084788205049096809580847F7 -:100680008C204E4909680958084790204B49096851 -:10069000095808479420494909680958084798208B -:1006A00046490968095808479C204449096809587F -:1006B0000847A0204149096809580847A4203F4934 -:1006C000096809580847A8203C490968095808479B -:1006D000AC203A49096809580847B02037490968E9 -:1006E00009580847B4203549096809580847B8200F -:1006F0003249096809580847BC2030490968095837 -:100700000847C0202D49096809580847C4202B49CB -:10071000096809580847C82028490968095808473E -:10072000CC202649096809580847D0202349096880 -:1007300009580847D4202149096809580847D82092 -:100740001E49096809580847DC201C4909680958EE -:100750000847E0201949096809580847E420174963 -:10076000096809580847E8201449096809580847E2 -:10077000EC201249096809580847F0200F49096818 -:1007800009580847F4200D49096809580847F82016 -:100790000A49096809580847FC20084909680958A6 -:1007A00008475FF480700549096809580847000048 -:1007B00003480449024A034B704700000000002030 -:1007C000680900006809000040EA010310B59B07B2 -:1007D0000FD1042A0DD310C808C9121F9C42F8D0AB -:1007E00020BA19BA884201D9012010BD4FF0FF305C -:1007F00010BD1AB1D30703D0521C07E0002010BD72 -:1008000010F8013B11F8014B1B1B07D110F8013BFD -:1008100011F8014B1B1B01D1921EF1D1184610BDDE -:1008200002F0FF0343EA032242EA024200F005B865 -:100830007047704770474FF000020429C0F01280E3 -:1008400010F0030C00F01B80CCF1040CBCF1020F83 -:1008500018BF00F8012BA8BF20F8022BA1EB0C0158 -:1008600000F00DB85FEAC17C24BF00F8012B00F84E -:10087000012B48BF00F8012B70474FF0000200B574 -:10088000134694469646203922BFA0E80C50A0E8B3 -:100890000C50B1F12001BFF4F7AF090728BFA0E861 -:1008A0000C5048BF0CC05DF804EB890028BF40F82D -:1008B000042B08BF704748BF20F8022B11F0804F6F -:1008C00018BF00F8012B7047014B1B68DB68184705 -:1008D0000000002009480A497047FFF7FBFFFFF7B7 -:1008E00011FC00BD20BFFDE7064B1847064A10600B -:1008F000016881F30888406800470000680900002B -:10090000680900001F030000000000201EF0040F13 -:100910000CBFEFF30881EFF3098188690238007892 -:10092000182803D100E00000074A1047074A126860 -:100930002C3212681047000000B5054B1B68054AB1 -:100940009B58984700BD00000703000000000020EE -:100950005809000004000000001000000000000022 -:0809600000FFFFFF0090D0032F -:10100000E8120020111D0200152F0000831C0200B1 -:10101000152F0000152F0000152F00000000000004 -:10102000000000000000000000000000691D020038 -:10103000152F000000000000152F0000152F0000E4 -:10104000D11D0200D71D0200152F0000152F000032 -:10105000152F0000152F0000152F0000152F000080 -:10106000DD1D0200152F0000152F0000E31D0200FA -:10107000152F0000E91D0200EF1D0200F51D020002 -:10108000152F0000152F0000152F0000152F000050 -:10109000152F0000152F0000152F0000152F000040 -:1010A000152F0000FB1D0200152F0000152F00005A -:1010B000152F0000152F0000152F0000152F000020 -:1010C000011E0200152F0000152F0000152F000033 -:1010D000152F0000152F0000152F0000152F000000 -:1010E000152F0000152F0000152F0000152F0000F0 -:1010F000152F0000152F0000152F0000152F0000E0 -:10110000152F0000152F000000F002F820F0EDFD73 -:101110000AA090E8000C82448344AAF10107DA4552 -:1011200001D120F0E2FDAFF2090EBAE80F0013F092 -:10113000010F18BFFB1A43F0010318471C130200EC -:101140003C1302000A444FF0000C10F8013B13F06E -:10115000070408BF10F8014B1D1108BF10F8015B10 -:10116000641E05D010F8016B641E01F8016BF9D103 -:1011700013F0080F1EBF10F8014BAD1C0C1B09D15A -:101180006D1E58BF01F801CBFAD505E014F8016BCC -:1011900001F8016B6D1EF9D59142D6D3704700005E -:1011A0000023002400250026103A28BF78C1FBD870 -:1011B000520728BF30C148BF0B6070471FB500F011 -:1011C0003DF88DE80F001FBD1EF0040F0CBFEFF3BC -:1011D0000880EFF30980014A104700006F2E0000DD -:1011E0008269034981614FF001001044704700009B -:1011F000F511000001B41EB400B512F0AFFD01B44A -:101200000198864601BC01B01EBD0000F0B4404606 -:10121000494652465B460FB402A0013001B506486C -:10122000004700BF01BC86460FBC804689469246F7 -:101230009B46F0BC704700000911000020F052BD31 -:1012400070B51A4C054609202070A01C00F05FF80C -:101250005920A08029462046BDE8704007F0F1BF24 -:1012600007F0FABF70B50C461149097829B1A0F111 -:101270006001552908D3012013E0602804D06928B3 -:1012800002D043F201000CE020CC0A4E94E80E009C -:1012900006EB8000A0F58050241FD0F8806E284611 -:1012A000B047206070BD012070470000080000209A -:1012B0001C0000204C1E020010B504460021012035 -:1012C00000F03BF800210B2000F037F80421192032 -:1012D00000F033F804210D2000F02FF804210E2037 -:1012E00000F02BF804210F2000F027F80421C84358 -:1012F00000F023F80621162000F01FF80621152023 -:1013000000F01BF82046FFF79BFF002010BD9D2139 -:1013100001807047FFF7A4BF10487047104A10B50E -:1013200014680F4B0F4A08331A60FFF79BFF0C48F5 -:10133000001D046010BD704770474907090E002862 -:1013400006DA00F00F0000F1E02080F8141D70476D -:1013500000F1E02080F800147047000003F900421B -:101360001005024001000001FE48002101604160BB -:10137000018170472DE9F743044692B091464068D9 -:1013800012F0B2FF40B1606812F0B7FF20B9607888 -:1013900000F00300022801D0012000E00020F14EFF -:1013A0004D463072484612F05BFF18B1102015B060 -:1013B000BDE8F0832946012001F029FF0028F6D17D -:1013C00001258DF842504FF4C050ADF84000002286 -:1013D00010A9284606F0FAFB0028E8D18DF8425003 -:1013E0004FF428504FF00008ADF8400047461C214C -:1013F0006846CDF81C8020F018FC9DF81C0008AA57 -:1014000020F00F00401C20F0F00010308DF81C0080 -:1014100020788DF81D0061789DF81E0061F3420070 -:1014200040F001008DF81E009DF800000AA940F070 -:1014300002008DF800002089ADF83000ADF8327060 -:10144000608907AFADF834000B97606810AC0E9060 -:101450000A94684606F0AFF90028A8D1BDF820002C -:1014600030808DF8425042F60120ADF840009DF8E2 -:101470001E0008AA20F00600801C20F001008DF854 -:101480001E000220ADF83000ADF8340013A80E9015 -:101490000AA9684606F08FF9002888D1BDF8200017 -:1014A0007080311D484600F033F9002887D18DF84F -:1014B000425042F6A620ADF840001C216846CDF807 -:1014C0001C8020F0B2FB9DF81C00ADF8345020F0D9 -:1014D0000F00401C20F0F00010308DF81C009DF82B -:1014E0001D0008AA20F0FF008DF81D009DF81E00C9 -:1014F0000AA920F0060040F00100801C8DF81E00B3 -:101500009DF800008DF8445040F002008DF8000076 -:10151000CDE90A4711A80E90ADF83050684606F0A4 -:101520004AF9002899D1BDF82000F08000203EE75C -:101530003EB504460820ADF80000204612F090FEAB -:1015400008B110203EBD2146012001F060FE0028B8 -:10155000F8D12088ADF804006088ADF80600A088B6 -:10156000ADF80800E088ADF80A007E4801AB6A4695 -:101570008088002106F024FDBDF800100829E1D084 -:1015800003203EBD1FB50446002002900820ADF8A0 -:101590000800CDF80CD0204612F062FE10B11020E9 -:1015A00004B010BD6F4802AA81884FF6FF7006F0A4 -:1015B0004EFF0028F4D1BDF80810082901D00320FF -:1015C000EEE7BDF800102180BDF802106180BDF883 -:1015D0000410A180BDF80610E180E1E701B582B0FA -:1015E0000220ADF800005F4802AB6A464088002147 -:1015F00006F0E6FCBDF80010022900D003200EBD65 -:101600001CB5002100910221ADF80010019012F0EC -:101610004DFE08B110201CBD52486A4641884FF665 -:10162000FF7006F014FFBDF800100229F3D003206C -:101630001CBDFEB54B4C06461546207A0F46C0072A -:1016400005D0084612F00CFE18B11020FEBD0F2088 -:10165000FEBDF82D01D90C20FEBD304612F000FE73 -:1016600018BB208801A905F0ECFD0028F4D13078E2 -:101670008DF80500208801A906F081FC0028EBD137 -:1016800000909DF800009DF8051040F002008DF8D4 -:101690000000090703D040F008008DF80000208802 -:1016A000694606F009FC0028D6D1ADF8085020881C -:1016B0003B4602AA002106F083FCBDF80810A942AF -:1016C000CAD00320FEBD7CB50546002000900190E5 -:1016D0000888ADF800000C462846019512F004FE7B -:1016E00018B9204612F0E2FD08B110207CBD15B1FA -:1016F000BDF8000050B11B486A4601884FF6FF70E4 -:1017000006F0A5FEBDF8001021807CBD0C207CBD3C -:1017100030B593B0044600200D460090142101A876 -:1017200020F083FA1C2108A820F07FFA9DF8000021 -:10173000CDF808D020F00F00401C20F0F000103051 -:101740008DF800009DF8010020F0FF008DF80100E9 -:101750009DF8200040F002008DF8200001208DF857 -:10176000460001E0E201002042F60420ADF844000A -:1017700011A801902088ADF83C006088ADF83E00CB -:10178000A088ADF84000E088ADF842009DF8020066 -:1017900006AA20F00600801C20F001008DF802004F -:1017A0000820ADF80C00ADF810000FA8059001A9B5 -:1017B00008A806F000F8002803D1BDF8180028801A -:1017C000002013B030BD0000F0B5007B059F1E4621 -:1017D00014460D46012800D0FFDF0C2030803A204F -:1017E0003880002C08D0287A052806D0287B0128CC -:1017F00000D0FFDF17206081F0BDA889FBE72DE94D -:10180000F04786B0144691F80C900E9A0D46B9F147 -:10181000010F0BD01021007B2E8A8846052807D0A7 -:10182000062833D0FFDF06B0BDE8F0870221F2E7DB -:10183000E8890C2100EB400001EB400018803320C8 -:101840001080002CEFD0E889608100271AE0009614 -:10185000688808F1020301AA696900F07AFF06EBC3 -:101860000800801C07EB470186B204EB4102BDF87B -:10187000040090810DF1060140460E3210F04CFD3F -:101880007F1CBFB26089B842E1D8CCE73420108019 -:10189000E889B9F1010F11D0122148430E301880A8 -:1018A000002CC0D0E88960814846B9F1010F00D012 -:1018B0000220207300270DF1040A1FE00621ECE747 -:1018C0000096688808F1020301AA696900F041FFE7 -:1018D00006EB0800801C86B2B9F1010F12D007EBAD -:1018E000C70004EB4000BDF80410C18110220AF1CA -:1018F0000201103020F000F97F1CBFB26089B842AD -:10190000DED890E707EB470104EB4102BDF8040085 -:10191000D0810AF102014046103210F0FDFCEBE7E5 -:101920002DE9F0470E4688B090F80CC096F80C8070 -:10193000378AF5890C20109902F10C044FF0000A47 -:10194000BCF1030F08D0BCF1040F3ED0BCF1070F6F -:101950007DD0FFDF08B067E705EB850C00EB4C009E -:10196000188031200880002AF4D0A8F1060000F089 -:10197000FF09558125E0182101A820F056F90097AC -:101980007088434601AA716900F0E3FEBDF80400C7 -:101990002080BDF80600E080BDF808002081A21C70 -:1019A0000DF10A01484610F0B7FCB9F1000F00D064 -:1019B00018B184F804A0A4F802A007EB080087B2CD -:1019C0000A346D1EADB2D6D2C4E705EB850C00EB30 -:1019D0004C00188032200880002ABBD0A8F10500F6 -:1019E00000F0FF09558137E000977088434601AA4F -:1019F000716900F0AEFE9DF80600BDF80410E180AC -:101A00002179420860F3000162F34101820862F328 -:101A10008201C20862F3C301020962F304114209A0 -:101A200062F34511820962F386112171C009607168 -:101A3000BDF80700208122460DF10901484610F04B -:101A40006BFC18B184F802A0A4F800A000E007E045 -:101A500007EB080087B20A346D1EADB2C4D279E735 -:101A6000A8F1020084B205FB08F000F10E0CA3F807 -:101A700000C035230B80002AA6D0558194810097A1 -:101A800083B270880E32716900F063FE62E72DE95F -:101A9000F84F1E460A9D0C4681462AB1607A00F531 -:101AA0008070D080E089108199F80C000C274FF0ED -:101AB00000084FF00E0A0D2873D2DFE800F09E07F1 -:101AC0000E1C28303846556A737373002146484609 -:101AD0000095FFF779FEBDE8F88F207B9146082836 -:101AE00002D0032800D0FFDF378030200AE000BF9B -:101AF000A9F80A80EFE7207B9146042800D0FFDF99 -:101B0000378031202880B9F1000FF1D1E3E7207B45 -:101B10009146042800D0FFDF37803220F2E7207B97 -:101B20009146022800D0FFDF37803320EAE7207B90 -:101B30001746022800D0FFDF3420A6F800A0288036 -:101B4000002FC8D0A7F80A80C5E7207B17460428D5 -:101B500000D0FFDF3520A6F800A02880002FBAD0E3 -:101B60004046A7F80A8012E0207B1746052802D0DD -:101B7000062800D0FFDF1020308036202880002F7C -:101B8000A9D0E0897881A7F80E80B9F80E00B88155 -:101B9000A1E7207B9146072800D0FFDF3780372060 -:101BA000B0E72AE04FF0120018804FF0380017001D -:101BB000288090D0E0897881A7F80E80A7F810805F -:101BC00099F80C000A2805D00B2809D00C280DD054 -:101BD000FFDF80E7207B0C2800D0FFDF01200AE038 -:101BE000207B0D2800D0FFDF042004E0207B0E289E -:101BF00000D0FFDF052038736DE7FFDF6BE770B5BE -:101C00000C46054601F076FA20B10078222804D26D -:101C1000082070BD43F2020070BD052128460EF079 -:101C20001DFF206008B1002070BD032070BD2DE9AC -:101C3000FF4784B00027824602970798904689465E -:101C400012300AF0E2F8401D20F00306079828B988 -:101C500007A95046FFF7D3FF002853D1B9F1000F71 -:101C600005D00798017B19BB052504681BE098F88F -:101C70000000092803D00F2812D0FFDF45E00799A4 -:101C800003254868B0B3497B42887143914238D9F3 -:101C90008AB2B3B2011D0EF03AFD0446078002E09D -:101CA000079C042508340CB1208810B1032D28D0DE -:101CB0002BE00798012112300AF0DFF8ADF80C0094 -:101CC000024602AB2946504608F0B1F9070001D19F -:101CD000A01C029007983A461230C8F80400A8F8F1 -:101CE00002A003A94046029B0AF0D4F8C0B107281D -:101CF00014D200E005E0DFE800F0060811110F0A39 -:101D00000C00132026E6002024E6112022E60820FD -:101D100020E643F203001DE607201BE6032019E638 -:101D2000BDF80C002346CDE900702A4650460799BD -:101D300000F035FD57B9032D08D10798B3B2417BA8 -:101D4000406871438AB2011D0EF0F5FCB9F1000F35 -:101D5000D9D0079981F80C90D5E72DE9FE4F91462F -:101D60001A881C468A468046FAB102AB494608F0FA -:101D70005EF9050019D04046A61C27880EF08AFFA0 -:101D80003246072629463B4600960EF049FB20883E -:101D90002346CDE900504A465146404600F0FFFC3C -:101DA000002020800120BDE8FE8F0020FBE710B559 -:101DB00086B01C46AAB104238DF800301388ADF814 -:101DC00008305288ADF80A208A788DF80E200988EC -:101DD000ADF80C1000236A462146FFF728FF06B035 -:101DE00010BD1020FBE770B50D4605210EF036FE44 -:101DF000040000D1FFDF294604F11200BDE8704065 -:101E00000AF024B82DE9F8430D468046002607F075 -:101E1000CCFA0446287812287BD2DFE800F07A5406 -:101E2000543C355632321332323209323232323287 -:101E30002879001FC0B2022801D0102810D114BB8D -:101E4000FFDF35E004B9FFDF052140460EF006FE56 -:101E5000007B032806D004280BD0072828D0FFDFFA -:101E6000072657E02879801FC0B2022820D050B141 -:101E7000F6E72879401FC0B2022819D0102817D0E1 -:101E8000EEE704B9FFDF13E004B9FFDF287901288A -:101E90000ED1172139E0052140460EF0DFFD070085 -:101EA00000D1FFDF07F11201404609F0A6FF2CB177 -:101EB0002A462146404600F05CFC2BE013214046B8 -:101EC00002F0AAFC26E0FFDF24E004B9FFDF0521D1 -:101ED00040460EF0C3FD060000D1FFDF694606F163 -:101EE000120009F094FF060000D0FFDFA98817292F -:101EF00001D2172200E00A46BDF80000824202D952 -:101F0000014602E005E01729C3D3404600F057FC24 -:101F1000CEE7FFDF3046BDE8F883401D20F0030226 -:101F200019B102FB01F0001D00E0002010447047D1 -:101F300013B5009850B100244FEA0D000EF091FB4C -:101F4000002C02D1F84A009911601CBD0124002028 -:101F5000F4E72DE9F0470C461546242120461FF0F2 -:101F600064FE05B9FFDFA87860732888DFF8B8A39E -:101F7000401D20F00301AF788946DAF800000EF02A -:101F80008EFB060000D1FFDF4FF000082660A6F8A8 -:101F9000008077B109FB07F1091D0AD0DAF80000CB -:101FA0000EF07DFB060000D1FFDF6660C6F8008002 -:101FB00001E0C4F80480298804F11200BDE8F0476C -:101FC00009F00DBF2DE9F047804601F112000D46E2 -:101FD000814609F01AFF401DD34F20F003026E7BAB -:101FE0001446296838680EF085FB3EB104FB06F202 -:101FF000121D03D0696838680EF07CFB05200EF0D6 -:10200000D7FC044605200EF0DBFC201A012802D183 -:1020100038680EF039FB49464046BDE8F04709F004 -:10202000F3BE70B5054605210EF018FD040000D181 -:10203000FFDF04F112012846BDE8704009F0DDBE63 -:102040002DE9F04F91B04FF0000BADF834B0ADF882 -:1020500004B047880C4605469246052138460EF0E6 -:10206000FDFC060000D1FFDF24B1A780A4F806B074 -:10207000A4F808B0297809220B20B2EB111F297AA5 -:102080007DD104F110023827C91E4FF00C094FF022 -:10209000010803920F2973D2DFE801F0F4F3F28113 -:1020A00008D48A8FA13DDDF5F0B8B800307B022856 -:1020B00000D0FFDFA88909EBC001ADF80410302182 -:1020C000ADF83410002C25D06081B5F80E900027B3 -:1020D0001DE004EBC708317C88F80E10F189A8F8E0 -:1020E0000C10CDF800906888042304AA296900F038 -:1020F00030FBBDF81010A8F8101009F10400BDF86D -:1021000012107F1C1FFA80F9A8F81210BFB2608964 -:10211000B842DED80FE1307B022800D0FFDFE9892A -:1021200009EBC100ADF804003020ADF83400287B85 -:102130000A90001FC0B20F90002CEBD06181B5F85F -:102140001090002727E000BFCDF8009068886969EB -:1021500003AA0A9B00F0FDFA0A9904EBC70809EBF1 -:1021600001001FFA80F908F10C0204A90F9810F081 -:10217000D3F818B188F80EB0A8F80CB001E0D7E099 -:10218000D4E0BDF80C10A8F81010BDF80E107F1C9C -:10219000A8F81210BFB26089B842D5D8CBE00DA81C -:1021A000009001AB224629463046FFF728FBC2E0EB -:1021B000307B082805D0FFDF03E0307B082800D003 -:1021C000FFDFE8891030ADF804003620ADF83400A8 -:1021D000002C3FD0A9896181F189A18127E0307B62 -:1021E000092800D0FFDFA88900F10C01ADF8041028 -:1021F0003721ADF83410002C2CD06081E889009094 -:10220000AB89688804F10C02296956E0E889392114 -:10221000103080B2ADF80400ADF83410002C74D04A -:10222000A9896181287A10280AD002212173E989BD -:10223000E181288A0090EB8968886969039A3CE00B -:102240000121F3E70DA8009001AB22462946304654 -:10225000FFF766FB6FE0307B0A2800D0FFDF12201B -:10226000ADF80400ADF834704CB3A9896181A4F8CD -:1022700010B0A4F80EB084F80C805CE020E002E01E -:1022800031E039E042E0307B0B2800D0FFDF288AC4 -:10229000ADF834701230ADF8040084B1042121731C -:1022A000A9896181E989E181298A2182688A00906E -:1022B0002B8A688804F11202696900F04AFA3AE050 -:1022C000307B0C2800D0FFDF1220ADF80400ADF801 -:1022D00034703CB305212173A4F80AB0A4F80EB001 -:1022E000A4F810B027E00DA8009001AB22462946C3 -:1022F0003046FFF769FA1EE00DA8009001AB2246B8 -:1023000029463046FFF7C3FB15E036E03B21ADF828 -:102310000400ADF8341084B3A4F80680A4F808B023 -:1023200084F80AB007E0000010000020FFDF02E0A0 -:10233000012919D0FFDFBDF80400AAF800007CB124 -:10234000BDF834002080BDF804006080BDF8340082 -:10235000392805D03B2803D03C2801D086F80CB0A2 -:1023600011B00020BDE8F08F3C21ADF80400ADF8BD -:10237000341014B1697AA172DDE7FFE7AAF8000012 -:10238000EEE72DE9F84356880F46804615460521AD -:1023900030460EF063FB040000D1FFDF12340094DE -:1023A0003B46414630466A6809F02EFFB3E570B5FA -:1023B0000D4605210EF052FB040000D1FFDF294637 -:1023C00004F11200BDE8704009F02CBD70B50D4657 -:1023D00005210EF043FB040000D1FFDF294604F184 -:1023E0001200BDE8704009F050BD70B505460521EA -:1023F0000EF034FB040000D1FFDF04F10803214696 -:102400002846BDE870400422A7E470B505460521C2 -:102410000EF024FB040000D1FFDF2146284623688C -:10242000BDE87040052298E470B5064605210EF01F -:1024300015FB040000D1FFDF04F1120009F0E5FCF8 -:10244000401D20F0030511E0011D00880322431800 -:1024500021463046FFF781FC00280BD0607BABB2F1 -:10246000684382B26068011D0EF09BF96068418884 -:102470000029E9D170BD70B50E46054606F095FFFE -:10248000040000D1FFDF0120207266726580207891 -:1024900020F00F00C01C20F0F00030302070BDE8AC -:1024A000704006F085BF2DE9F0438BB00D46144611 -:1024B000814606A9FFF7A3FB002814D14FF6FF764B -:1024C00001274FF420588CB103208DF80000102014 -:1024D000ADF8100007A8059007AA204604A90FF040 -:1024E0003AFF78B107200BB0BDE8F0830820ADF8C3 -:1024F00008508DF80E708DF80000ADF80A60ADF848 -:102500000C800CE00698A17801742188C1818DF8B7 -:102510000E70ADF80850ADF80C80ADF80A606A4650 -:1025200002214846069BFFF782FBDCE708B5012243 -:102530008DF8022042F60202ADF800200A4603237D -:102540006946FFF734FC08BD08B501228DF802206A -:1025500042F60302ADF800200A4604236946FFF75D -:1025600026FC08BD00B587B079B102228DF80020A5 -:102570000A88ADF808204988ADF80A1000236A4699 -:102580000521FFF754FB07B000BD1020FBE709B1A0 -:1025900007230CE40720704770B588B00D46144639 -:1025A000064606A9FFF72BFB00280ED17CB10620BA -:1025B000ADF808508DF80000ADF80A40069B6A4659 -:1025C0000821DC813046FFF732FB08B070BD0520E2 -:1025D0008DF80000ADF80850F0E700B587B059B1AC -:1025E00007238DF80030ADF80820039100236A46D8 -:1025F0000921FFF71CFBC6E71020C4E770B588B0BF -:102600000C460646002506A9FFF7F9FA0028DCD19A -:1026100006980121123009F030FC9CB1217806297E -:1026200021D2DFE801F0200505160318801E80B2D4 -:10263000C01EE28880B20AB1A3681BB1824203D9EE -:102640000C20C2E71020C0E7042904D0A08850B9AC -:1026500001E00620B9E7012913D0022905D0042999 -:102660001CD005292AD00720AFE709208DF80000EB -:102670006088ADF80800E088ADF80A00A068039013 -:1026800023E00C208DF800006088ADF80800E08899 -:10269000ADF80A00A0680A25039016E00D208DF819 -:1026A00000006088ADF80800A088ADF80A00E08856 -:1026B000ADF80C00A0680B25049006E00E208DF804 -:1026C000000060788DF808000C256A4629463046DF -:1026D000069BFFF7ACFA78E700B587B00F228DF8BC -:1026E0000020ADF8081000236A461946FFF79FFA4C -:1026F00049E700B587B071B102228DF800200A8841 -:10270000ADF808204988ADF80A1000236A46062172 -:10271000FFF78DFA37E7102035E770B586B006462B -:1027200001200D46ADF808108DF800000146002389 -:102730006A463046FFF77BFA040008D12946304646 -:1027400005F058FC0021304605F072FC204606B02A -:1027500070BDF8B51C4615460E46069F0EF088FA69 -:102760002346FF1DBCB231462A4600940DF01FFEE1 -:10277000F8BD10B548800878144620F00F00C01C42 -:1027800020F0F00090300B4608701822214603F12B -:1027900008001FF0F6F9BDE8104006F009BE30B49D -:1027A0001146DDE902423CB1032903D0002330BCCD -:1027B00008F0D3BA0123FAE71A8030BC704770B52D -:1027C0000C460546FFF70FFB2146284605F021FC85 -:1027D0002846BDE87040012105F02ABC4FF0E022F8 -:1027E0004FF400410020C2F88011204908702049B0 -:1027F00090020860704730B51C4D04462878A0420E -:1028000018BF002C02D0002818BFFFDF2878A04294 -:1028100008BF30BD2C701749154A0020ECB1164D89 -:10282000DFF858C0131F012C0DD0022C1CBFFFDF96 -:1028300030BD086003200860CCF800504FF4000061 -:102840001060186030BD086002200860CCF80050AD -:102850004FF040701060186030BD086008604FF0A5 -:102860006070106030BD00B5FFDF00BD18000020B3 -:1028700008F5014000F500402403002014F5004055 -:1028800070B50B2000F0B5F9082000F0B2F9002176 -:102890000B2000F0C4F90021082000F0C0F9EC4C36 -:1028A00001256560A5600020C4F84001C4F844011A -:1028B000C4F848010B2000F0A7F9082000F0A4F9A3 -:1028C0000B2000F08BF9256070BD10B50B2000F0D7 -:1028D00090F9082000F08DF9DD4801214160816008 -:1028E000DC490A68002AFCD10021C0F84011C0F878 -:1028F0004411C0F848110B2000F086F9BDE81040E3 -:10290000082000F081B910B50B2000F07DF9BDE87A -:102910001040082000F078B900B530B1012806D089 -:10292000022806D0FFDF002000BDCB4800BDCB4809 -:1029300000BDCA48001D00BD70B5C9494FF0004038 -:102940000860C84DC00BC5F80803C74800240460E0 -:10295000C5F840410820C43500F04BF9C5F83C41AA -:10296000C248047070BD08B5B94A002128B10128D9 -:1029700011D002281CD0FFDF08BD4FF48030C2F810 -:102980000803C2F84803B3483C300160C2F8401164 -:10299000BDE80840D0E74FF40030C2F80803C2F8A1 -:1029A0004803AC4840300160C2F84411AB480CE029 -:1029B0004FF48020C2F80803C2F84803A548443009 -:1029C0000160C2F84811A548001D0068009008BDCC -:1029D00070B516460D460446022800D9FFDF0022D6 -:1029E0009B48012304F110018B4000EB8401C1F8E6 -:1029F000405526B1C1F84021C0F8043303E0C0F8C7 -:102A00000833C1F84021C0F8443370BD2DE9F041CE -:102A10001C46154630B1012834D0022839D0FFDFDA -:102A2000BDE8F081891E002221F07F411046FFF7AA -:102A3000CFFF012C24D000208C4E8A4F01247070CF -:102A40003C61894900203C3908600220091D08606A -:102A5000854904203039086083483D350560C7F852 -:102A60000042082000F0D0F82004C7F80403082032 -:102A700000F0B4F87A49E007091F08603470CFE726 -:102A80000120D9E7012B02D00022012005E001221C -:102A9000FBE7012B04D000220220BDE8F04197E7BC -:102AA0000122F9E76B480068704770B500F0C7F87D -:102AB000674C0546D4F840010026012809D1D4F816 -:102AC0000803C00305D54FF48030C4F80803C4F8E8 -:102AD0004061D4F8440101280CD1D4F808038003E4 -:102AE00008D54FF40030C4F80803C4F8446101204D -:102AF00010F0F6FBD4F8480101280CD1D4F80803F3 -:102B0000400308D54FF48020C4F80803C4F8486196 -:102B1000022010F0E5FB5648056070BD70B500F06E -:102B20008EF8524D0446287858B1FFF705FF6878B3 -:102B300020B1002085F8010010F0D2FB4C48046061 -:102B400070BD0320F8E74FF0E0214FF40010C1F80A -:102B500000027047152000F057B842490120086173 -:102B6000082000F051B83F494FF47C10C1F8080329 -:102B70000020024601EB8003C3F84025C3F8402142 -:102B8000401CC0B20628F5D37047410A43F60952EB -:102B90005143C0F3080010FB02F000F5807001EB18 -:102BA0005020704710B5430B48F2376463431B0C49 -:102BB0005C020C602F4C03FB04002F4B4CF2F724FB -:102BC00043435B0D13FB04F404EB402000F58070DD -:102BD0004012107008681844086010BD00F01F0211 -:102BE000012191404009800000F1E020C0F800116F -:102BF000704700F01F02012191404009800000F160 -:102C0000E020C0F88011704700F01F0201219140C0 -:102C10004009800000F1E020C0F8801270474907A9 -:102C2000090E002806DA00F00F0000F1E02080F81D -:102C3000141D704700F1E02080F8001470470C4824 -:102C4000001F00680A4A0D49121D116070470000FC -:102C500000B0004004B500404081004044B1004055 -:102C600008F501400080004040850040340000200D -:102C700014050240F7C2FFFF6F0C010001000001C4 -:102C80000A4810B50468094909480831086010F07D -:102C9000BBFB0648001D046010BD0649002008600B -:102CA0004FF0E0210220C1F8800270471005024079 -:102CB00001000001FC1F004010B50D2000F06FF86E -:102CC000C4B26FF0040000F06AF8C0B2844200D0D1 -:102CD000FFDF3A490120086010BD70B50D2000F0FB -:102CE00048F8374C0020C4F800010125C4F804530B -:102CF0000D2000F049F825604FF0E0216014C1F884 -:102D0000000170BD10B50D2000F033F82C480121F2 -:102D100041600021C0F80011BDE810400D2000F016 -:102D200033B8284810B50468264927480831086098 -:102D30002349D1F80001012804D0FFDF2148001DFC -:102D4000046010BD1D48001D00680022C0B2C1F81B -:102D5000002110F074FFF1E710B51948D0F8001108 -:102D60000029FBD0FFF7DDFFBDE810400D2000F08B -:102D70000BB800F01F02012191404009800000F1D2 -:102D8000E020C0F88011704700F01F02012191403F -:102D90004009800000F1E020C0F880127047002850 -:102DA00006DA00F00F0000F1E02090F8140D03E0C7 -:102DB00000F1E02090F800044009704704D500407D -:102DC00000D00040100502400100000110B5202095 -:102DD00000F075F8202000F07DF84449202081F8AB -:102DE0000004434900060860091D42480860FEF7D8 -:102DF00093FA3F49C83108603F48D0F8041341F0C6 -:102E00000101C0F80413D0F8041341F08071C0F838 -:102E10000413364901201C39C1F8000110BD10B55A -:102E2000202000F04CF8324800210160001D0160B4 -:102E30002F4A481EE83A10602F4AC2F808032C4B6C -:102E4000C8331960C2F80001C2F860012B4908605C -:102E5000BDE81040202000F03DB825492848EC3955 -:102E60000860704722492648E8390860704770B505 -:102E70001F4A8069E83A224911601F49D1F8006170 -:102E80000023204D1D4A5C1E1EB1A84206D300211E -:102E90000FE0D1F8606186B1A84209D2C1F80031D3 -:102EA000C1F860311460BDE87040202000F012B815 -:102EB0001168BDE870401EF0E3BEFFDF70BD00F09A -:102EC0001F02012191404009800000F1E020C0F87C -:102ED0008011704700F01F020121914040098000DD -:102EE00000F1E020C0F880127047000020E000E010 -:102EF000000602406413002000000240000402406B -:102F000001000001003002000F4A12680D498A4298 -:102F10000CD118470C4A12680A4B9A4206D101B5E7 -:102F200010F00EFFFFF799FFBDE80140074909685F -:102F30000958084706480749054A064B70470000EC -:102F400000000000BEBAFECAB0000020040000204D -:102F5000E8120020E812002070B50C46054609F082 -:102F6000F0FA21462846BDE870400AF0E2BB10B5F1 -:102F700011F054FBFFF732FC11F0F0F9BDE81040FE -:102F800011F0A2BA01208107086070470120810773 -:102F90004860704712480068C00700D001207047A1 -:102FA0000F48001F0068C00700D0012070470C4880 -:102FB00008300068C00700D0012070470848103072 -:102FC0000068704706490C310A68D20306D50968C3 -:102FD00001F00301814201D10120704700207047B8 -:102FE0000C0400407047704770477047704702F00C -:102FF000FF0343EA032242EA02421EF0F6BD704795 -:103000002CFFFFFFDBE5B151003002009D00FFFF08 -:1030100084000000404B4C0066D342DA82CFB49D5E -:10302000E40AD77E68976592800939FF30B5FF4D75 -:10303000044610280AD0112C06D02846122CC1783C -:1030400006D0132C08D0FFDFEC7030BDFFDFFBE7AC -:103050001129F9D0FFDFF7E71129F5D0FFDFF3E7FA -:1030600070B50FF0E3FA044610F0A0FC201AC4B2C9 -:1030700006200DF09DFC054606200DF0A1FC2E1A41 -:1030800007200DF095FC054607200DF099FCE74957 -:10309000281A3218C87812280DD000231A44132891 -:1030A0000BD0002002440878022808D000201044E9 -:1030B000201AC0B270BD0123F0E70120F2E7012021 -:1030C000F5E7DA4800B58079D849420897B051F859 -:1030D000070F89880CD017228DF80020CDF8020048 -:1030E000ADF806100BA968460AF0B4FF17B000BD92 -:1030F0004422F1E702210DF0B1BC2DE9F04196B078 -:103100001D4690460E460746FFF7F4FF04000BD01D -:103110002078222804D3A07FC0F34010A84206D113 -:10312000082016B0BDE8F08143F20200F9E749201B -:103130008DF80000ADF802703DB101208DF804005B -:103140008DF805608DF8068002E000208DF80400FF -:103150000BA968460AF07EFFA07F65F34510A077B3 -:103160000020DEE730B50446A1F120000D460A2814 -:103170004AD2DFE800F005070C1C2328353A3F440B -:10318000FFDF42E0207820283FD1FFDF3DE0A74865 -:103190000178032939D0C078132836D02078242824 -:1031A00033D0252831D023282FD0FFDF2DE0207801 -:1031B00022282AD0232828D8FFDF26E020782228BA -:1031C00023D0FFDF21E0207822281ED024281CD025 -:1031D00026281AD0272818D0292816D0FFDF14E077 -:1031E0002078252811D0FFDF0FE0207825280CD08B -:1031F000FFDF0AE02078252807D0FFDF05E02078F0 -:10320000282802D0FFDF00E0FFDF257030BD30B599 -:103210000B8840F67B444FF6FF72022801D09342A0 -:1032200004D09D1FA54224D2022802D04D88954289 -:1032300003D04D88AD1FA5421BD24C88A34218D89D -:103240008B88B3F5FA7F14D2022802D0C888904246 -:1032500005D0C88840F677450A38A84209D2C88800 -:10326000904208D0944206D05B1C6343B3EB800FBE -:1032700001DB072030BD002030BD70B514460D467F -:10328000064610F0EDFF60B90DB1A54201D90C2042 -:1032900070BD002409E000BF56F8240010F0E0FFE4 -:1032A00008B1102070BD641CE4B2AC42F4D300201D -:1032B00070BDF0B50024059D10B1A94203D850E0BF -:1032C00009B90020F0BD0920F0BD055DD5B1071991 -:1032D00097F801C0BCF1150F2DD03BDCBCF1150FE8 -:1032E00038D2DFE80CF037122020262628282F2F8E -:1032F000373737373737373737372000025D22BB4C -:10330000641CE4B28C42F9D3DBE7022DDBD1BD783B -:103310001D70072D01D26D0701D40A20F0BD15786C -:1033200045F0010515E0EF43FF0707E0012D07D049 -:1033300010E00620F0BD2F07A7F18057002FF5D031 -:103340003046F0BD1578AF0701D50B20F0BD45F034 -:1033500002051570055D641C2C44E4B28C4202D950 -:10336000B1E74FF448568C42AFD3AAE710B50278C4 -:10337000540809D0012243F20223012C07D0022C69 -:103380000DD0032C13D10FE00020087005E08079E8 -:103390000324B4EB901F0AD10A70002010BD80797D -:1033A000B2EB901F03D1F7E780798009F4D018467B -:1033B00010BD1E4A117C39B1517C022908D0032965 -:1033C00008D043F2022070470146901D01F0FCBC7A -:1033D000032100E0012101700020704738B50C4640 -:1033E0000546694601F0F0FC00280DD19DF800105B -:1033F000207861F34700207055F8010FC4F80100F0 -:10340000A888A4F80500002038BD38B51378E8B1C5 -:1034100002281BD006A46D46246800944C7905EB65 -:103420009414247864F34703137003E0CC01002064 -:103430000302FF0103280ED003F0FE00107008689D -:10344000C2F801008888A2F8050038BD23F0FE0309 -:1034500013700228E9D1D8B240F00100EEE730B590 -:103460000C46097897B0222902D2082017B030BD47 -:1034700028218DF80010ADF80200132A03D03B2A52 -:1034800001D00720F2E78DF804200BA968460AF066 -:10349000E1FD050003D121212046FFF763FE284608 -:1034A000E4E700B597B023218DF80010ADF80200D5 -:1034B0001088ADF804005088ADF80600D088ADF84B -:1034C0000A009088ADF808000020ADF80C00ADF8B7 -:1034D0000E000BA968460AF0BDFD07E600B597B0DF -:1034E0002C22FA4968461EF04CFB0020CDF8030060 -:1034F000ADF80700F648007C022801D0012000E06A -:1035000000208DF809000BA968460AF0A3FD0028E9 -:1035100000D0FFDFEAE52DE9FF470220EC4E8DF8F1 -:1035200004000027B08AADF80600B84643F202094D -:103530004DE001A80DF0FBF9050006D0B08AA8B354 -:10354000A6F81480ADF806803FE0039CA07F010739 -:103550002DD504F124000090A28EBDF8080021466C -:1035600004F1360301F00DFE050005D04D452BD0CA -:10357000112D3DD0FFDF3BE0A07F20F00800A077B9 -:10358000E07F810861F30000C10861F34100E0774A -:1035900094F8210000F01F0084F8200020782828EB -:1035A00027D129212046FFF7DDFD22E015E0400765 -:1035B0000BD5BDF80800214604F10E02FFF771FF9C -:1035C00005000DD04D4510D100257F1CFFB2022013 -:1035D0000DF0EEF9401CB842ABD8052D12D008E032 -:1035E000A07F20F00400A07703E0112D00D0FFDFC2 -:1035F0000025BDF80600B082052D05D0284604B090 -:10360000BDE8F087A6F814800020F8E770B50646FC -:10361000FFF770FD054605F0C8FE040000D1FFDF8E -:103620006680207820F00F00801C20F0F000203011 -:1036300020700620207295F83E006072BDE8704050 -:1036400005F0B6BE2DE9F04786B0040000D1FFDFDB -:1036500020789F4E20F00F00801C20F0F00070308A -:10366000207060680178091F182931D2DFE801F065 -:10367000FD30303053FC300CFCFC40FD3030FD762A -:10368000FDFD3030FDFDFBFA86883046FFF732FD48 -:103690000546304607F05FFAE0B16068807985F84A -:1036A0003E0021212846FFF75DFD3046FEF7B9FCBC -:1036B000304603F0C3FF3146022010F085FDA87F9D -:1036C00020F01000A877FFF726FF002800D0FFDFCA -:1036D00006B095E7207820F0F0002030207006201A -:1036E0002072668060688079607205F061FED8E7BC -:1036F00085882846FFF7FEFC00B9FFDF6068807808 -:10370000012800D0FFDF6068817906B02846BDE857 -:10371000F04707F0FDBD86883046FFF7EBFC05005B -:1037200000D1FFDF05F044FE60683146C088288183 -:1037300060680089688160684089A881022010F073 -:1037400043FD0020A875A87F00F003000228BFD128 -:10375000FFF7E1FE0028BBD0FFDFB9E780783C2807 -:1037600003D0002502280AD000E00125002720B15F -:103770003C2802D0022800D0FFDF17B1B8E00127B3 -:10378000F5E705F015FE1DB1B07801F0DCFAA1E017 -:103790006568B5F804A0A879AD1C012806D0307979 -:1037A000814605F097FB070003D101E0B078F7E709 -:1037B000FFDF0022022150460DF047F9040000D13E -:1037C000FFDF22212046FFF7CDFC2879012800D019 -:1037D0000220A17F804668F30101A177288B208118 -:1037E000688B6081A88BA08184F822908DF8088076 -:1037F000B8680090F86801906A46032150460DF0C1 -:1038000024F900B9FFDFB888ADF81000B8788DF85A -:10381000120004AA052150460DF017F900B9FFDF88 -:10382000B888ADF80C00F8788DF80E0003AA0421D2 -:1038300050460DF00AF900B9FFDF062105F112002C -:1038400001F0EDFA28B36879800700D5FFDF6979C8 -:10385000E07D61F34700E075D5F80600A061688956 -:10386000A08303E05EE057E050E062E0062105F14E -:103870000C0001F0D4FAB0B1B0794108607861F37E -:1038800047006070D6F80700C4F80200B6F80B00D5 -:1038900012E0E07D20F0FE00801CE075D5F81200FB -:1038A000A061E88ADCE7607820F0FE00801C607090 -:1038B000E868C4F80200288AE080B8F1010F09D056 -:1038C000B8F1020F14D0FFDF02E70000CC1F0200A6 -:1038D000CC0100203078032800D0FFDF002108460B -:1038E00010F072FC06B00120BDE8F04701F0FAB913 -:1038F000F078132800D0FFDF0021062010F064FCD0 -:1039000006B01120BDE8F047FFF790BB06B0204697 -:10391000BDE8F04701F0E6BE05F04AFDB07C40F09E -:10392000020004E005F044FDB07C40F00400B074F7 -:10393000CEE606B0BDE8F04705F03ABD2DE9F04708 -:1039400005460078914600270209FF480C463E468E -:10395000012A6DD000234FF6FF71022A69D0072A91 -:1039600009D00A2A71D0FFDFA9F800600CB12780C6 -:103970006680002044E6D5F804C09CF80060142E50 -:103980007DD010DC04F1080204F118080F2E21D0BC -:1039900004DC042E5AD0082E57D10DE0122E6FD021 -:1039A000132EF9D11FE0153E072E4ED2DFE806F0A8 -:1039B000C14D4D099FEAB00012271026BCF8040043 -:1039C00014E11C27092694B3BCF80200A0806868A3 -:1039D00000795AE11B2709264CB30320207268683E -:1039E0004088A080C0E79CF802003C2827D0102720 -:1039F00018260CF1020CD4B1BCF80200A080BCF86F -:103A000018006082BCF818002082BCF81A00A0825E -:103A1000BCF81C00E0829CF805000CF10601FFF7E1 -:103A2000F4FC9CF8040028B10120E0739CE703E05B -:103A3000BFE0DFE00220F8E7A9F8006099E71B2764 -:103A40000926002CF8D023728EE720E11D273726A7 -:103A5000002CF1D0A18069680879491DFFF7D5FCD9 -:103A6000686890F82B00A0756868C0780428E07D2D -:103A700016D020F00100E0756968C97801E06DE0BA -:103A800011E061F34200E07569681F22C97A61F3B1 -:103A9000C700E075696840460C311EF02DF863E7F9 -:103AA00040F00100E7E71D273726002CC4D0A18095 -:103AB0006868411D0079FFF7A8FC696804F10F02EE -:103AC00001F10C00CB7A01461846FFF79EFC6868AE -:103AD000807CA0756868C178E07D61F3420020F0C9 -:103AE000F900E0751F2140461EF09FF83CE72027B3 -:103AF0001026002CA0D0A180686804F10902407A49 -:103B000020726968CB1C88781946FFF77EFC2BE78A -:103B100021270A26002C8FD0BCF80210A1806968EA -:103B200009792172696849796172817C21F0040107 -:103B300057E022270B26002C84D0BCF80400A0807C -:103B40006868807820726868807901F077F960721F -:103B50006868C07901F072F9A07205E72427102681 -:103B6000002CA3D0BCF80200A080686800792081F6 -:103B70006868007A60816868C088A0816868408948 -:103B8000E081F1E623271026002C8FD0BCF802102C -:103B9000A1806968898821816968C98861816968AB -:103BA0000989A18169684989E181817C21F002014B -:103BB00017E0297A012903D0022914D0FFDFD3E6C8 -:103BC0001F271026002C95D06988A180A989218102 -:103BD000E9896181298AA181698AE181817C21F059 -:103BE00001018174C0E6122768881026214601F081 -:103BF00003F9B9E6287A072850D2DFE800F0373D0C -:103C00003D484848040011270926002C94D0B5F8F7 -:103C100002804046FFF76EFA90F822A0A4F80480D4 -:103C2000687A2072042140460CF02AFF05214046A4 -:103C30000CF026FF002140460CF022FF01214046F7 -:103C40000CF01EFF032140460CF01AFF02214046F3 -:103C50000CF016FF062140460CF012FF07214046EB -:103C60000CF00EFF504601F06EF87DE61B2709268A -:103C7000002C8AD0A180E6E61B270926002C84D0E0 -:103C8000A180287A012800D0022020726CE64A46E2 -:103C900021462846BDE8F04701F0AFBEFFDF63E6EE -:103CA00030B5294D97B0E878132802D0082017B016 -:103CB00030BD22208DF800000BA968460AF0CAF931 -:103CC000040002D1287901F03EF80021062010F00E -:103CD0007BFA2046EBE700B51B4897B0C078122866 -:103CE00001D0082016E41E208DF8000000208DF879 -:103CF00002008DF803000BA968460AF0ABF9002812 -:103D0000F0D10021062010F05FFA1120FFF78EF9A4 -:103D10000020E7E710B50C4C96B02078012815D0AC -:103D20001B208DF8000000208DF802000BA96846CA -:103D30000AF090F900280AD10021084610F044FA50 -:103D40002078032805D007E0CC010020082016B019 -:103D500010BDA07800F0F7FF012000F0C3FF0020A5 -:103D6000F5E770B5002538B1022817D0062836D0FF -:103D7000072800D0FFDF70BDFFF7CCFF0028FAD185 -:103D800005F013FB0028F6D0017821F00F01891C03 -:103D900021F0F0012031017005723FE08EB2304613 -:103DA000FFF7A8F9040000D1FFDF20782128E2D036 -:103DB00005F0FBFA60B1017821F00F01891C21F0B8 -:103DC000F00110310170022101724680A57525E0D5 -:103DD00021463046BDE870401322FFF740BBFE4845 -:103DE000C478122C03D0132C04D0FFDF70BDFFF772 -:103DF00072FF01E0FFF754FF0028F7D105F0D5FA74 -:103E00000028F3D0017821F00F01891C21F0F00186 -:103E100020310170122C05D002210172BDE87040E2 -:103E200005F0C6BA0121F8E72DE9F04116460C006D -:103E3000804600D1FFDF307820F00F00801C20F09A -:103E4000F000103030702078012804D0022817D0FC -:103E5000FFDFBDE8F0814046FFF74CF9050000D1D7 -:103E6000FFDF0320A87505F0A3FA94E80F000836D9 -:103E700086E80F00D848817C41F001018174E8E7B1 -:103E80004046FFF737F9050000D1FFDFA1884FF664 -:103E9000FF700027814202D1E288824203D0814232 -:103EA00001D1E08840B105F083FA94E80F000836AC -:103EB00086E80F00AF75CCE7A87D0128C9D178232B -:103EC00000224146022010F0D5F80220A875C0E774 -:103ED00030B5054697B00C46084610F0C1F978BBDE -:103EE00000210120203D072D73D2DFE805F00425D5 -:103EF0004C515A6640000021072010F03BF908B1F0 -:103F00001120D4E624208DF80000D4F80200CDF86A -:103F10000200A0798DF806000BA968460AF09AF80D -:103F2000050057D1002208231146072010F0A2F8FF -:103F300007284FD0FFDF4DE0606810F0D5F908B1D9 -:103F40001020B4E64A208DF800002088ADF8020069 -:103F50006088ADF804000BA968460AF07BF80500FC -:103F600038D1606898B3BDF83010018032E04C2041 -:103F70008DF800002088ADF80200A07800F0010064 -:103F80008DF8040014E0206801F0D5FF054621E01B -:103F90004B2207E08DF802000AE000BF8DF8021006 -:103FA00006E046228DF800202278D207F6D0F1E70D -:103FB0000BA968460AF04EF8E8E738208DF80000B3 -:103FC0002088ADF802006088ADF80400F0E701E059 -:103FD000FFE7072528466AE630B5054697B00C4648 -:103FE000084610F063F908B1102060E6203D072D67 -:103FF00027D2DFE805F00424242426262400208884 -:10400000FFF778F820B10078222804D208204EE685 -:1040100043F202004BE625208DF800002088ADF821 -:1040200002000BA968460AF015F80028DDD1DDF87A -:104030003210C4F802109DF83610A17137E6062040 -:1040400035E6072033E66448801D704738B51621F1 -:1040500061481DF0C8FD012000F044FE1120FEF76C -:10406000E5FF5D4C6846E11D05F0FFF89DF8001086 -:10407000A07961F3470020F00100A07100202074B6 -:104080004FF46170E08102206074FFF71AF800B10C -:10409000FFDFFDF769F901F0E2FA38BD10B50C4613 -:1040A000402120461DF09FFDA07F20F00300A07757 -:1040B000202020700020A07584F8230010BD7047D8 -:1040C0007CB5054610F0CCF808B110207CBD424C00 -:1040D000A11DD4F806000090D4F80A0001902846EB -:1040E000FFF77CF90028F1D1FEF7EBFF0028EDD0B7 -:1040F0000099C4F80610BDF8041061819DF80610FF -:1041000021737CBD10B5044610F0D0F808B1102022 -:1041100010BD314922468879C91D4008FFF775F95D -:10412000002010BD2DE9F0479CB00D4604004FF073 -:10413000000812D00822FFF7A0F800281CD10026A2 -:1041400009E000BF54F8260004A9FFF70FF9002882 -:1041500012D1761CF6B2AE42F4D32F460A2006AD39 -:104160000DF1440A8DF8180026465146284609F0FC -:1041700071FF20B143F203201CB0BDE8F087404638 -:10418000DFF8548088F805002EB300244FF00B09A7 -:104190001DE000BF56F8240005A9FFF7E7F800B1BD -:1041A000FFDF9DF81400A87056F8240050F8011F96 -:1041B000C5F803108088A5F8070085F800905146DF -:1041C000284609F047FF00B1FFDF641CE4B2BC429F -:1041D000E0D388F8057001E0CC0100200020CBE797 -:1041E0002DE9F0479EB01546894604001DD00F46C4 -:1041F00008222946FFF741F8002810D1002612E0D6 -:1042000054F8260005A9103000F0DEFD002806D184 -:104210003FB157F8260010F023F810B110201EB05F -:10422000ABE7761CF6B2AE42EAD30026A5F1010850 -:104230001CE000BF06F1010A0AF0FF0712E000BF10 -:1042400054F82600017C4A0854F827100B7CB2EB86 -:10425000530F05D10622113011311DF021FC78B128 -:104260007F1CFFB2AF42EBD30AF0FF064645E1DB0D -:10427000C8462E4607AD0DF1480924B1012003E0E0 -:1042800043F20520CBE700208DF81E0031208DF889 -:104290001C004946284609F0DDFE38B934208DF867 -:1042A0001C004946284609F0D5FE10B143F204200F -:1042B000B5E77CB300272BE054F82700A91C103089 -:1042C00000F082FD00B1FFDF54F82700102250F803 -:1042D000111FC5F803108088A5F8070054F82710AF -:1042E00005F109001DF008FCB8F1000F16D058F8D0 -:1042F0002710102205F119001DF0FEFB3220287056 -:104300004946284609F0A6FE00B1FFDF7F1CFFB238 -:10431000B742D1D3FFF7E2F8002080E705F119009A -:1043200001F0FDFDEAE770B596B004460FF098FF86 -:1043300018B960680FF0E1FF10B1102016B070BD21 -:1043400060884AF2B811884207D82078FE4D6E4640 -:1043500028B1012806D0022804D00720EEE7FEF796 -:10436000B0FE1AE06078022804D0032802D043F29D -:104370000220E3E7687417208DF80000697C0020B4 -:10438000CDF80200ADF80600022934D003292FD061 -:10439000FFDF0BA9684609F05DFE0028CED16068FA -:1043A00001F0B0FD207870B101208DF80200F01C02 -:1043B00001F0B5FD4E208DF800000BA9684609F00C -:1043C00049FE00B1FFDF20782874FFF787F8608886 -:1043D00098B1E88180B2ADF8020030208DF800007D -:1043E0000BA9684609F036FE00B1FFDF0020A5E703 -:1043F0008DF80700CDE74020FAE74FF46170E8E759 -:1044000010B504460FF052FF20B9606838B10FF0C4 -:104410006BFF08B1102010BD606801F080FDCA4834 -:10442000C1896180417C6170007C2070002010BDDA -:104430002DE9F0419CB0054600208DF864008DF810 -:1044400060008DF830008DF868001E4614468846DE -:1044500028460FF052FF18B920460FF04EFF10B15A -:1044600010201CB0F5E455EA040018D01F270CAB4F -:1044700019AA414628460097FEF71BFF0028F0D1F5 -:104480001AAB18AA314620460097FEF712FF002803 -:10449000E7D19DF86000C00703D00A20E1E70720BC -:1044A000DFE701AF7DB11A208DF804008DF806809A -:1044B00042462946F81C1DF01FFB0DA901A809F072 -:1044C000C9FD0028CDD17CB120208DF804008DF8E5 -:1044D000066032462146F81C1DF00EFB0DA901A80E -:1044E00009F0B8FD0028BCD197499DF8300048700C -:1044F0000020B6E72DE9F0479CB08A464FF000084F -:1045000092A104468DF83480D1E90001CDE919016A -:1045100020460FF0A5FE90B92078012803D16068ED -:104520000FF09EFE58B9884D4FF00109287C40B12C -:10453000687C022805D160680FF0DFFE08B110200A -:104540001AE62878012801D0082015E607200CF08B -:1045500037FA18B9207878B101280DD0FEF780FD20 -:1045600060B1608943F6E172A0F1200191422178A7 -:104570000CD3012904D0B6E01220FDE51320FBE5A1 -:1045800000287DD1A18900297AD109E0012907D02D -:104590006978C90704D0A189002971D0B4296FD8DE -:1045A000217831B1012908D0022904D0032967D12B -:1045B0000AE0002609E0022607E008B9A08908B150 -:1045C000042609E0012607E00326287C50B1687C18 -:1045D000022807D1606828B10DA96068FEF7C6FE01 -:1045E0000028ADD1207A30B1012806D0022806D0AB -:1045F000032878D105E0002704E0012702E0022724 -:1046000000E003270EB1022E0ED16FB16879B8B366 -:104610006878800702D043F20120ADE5022E03D175 -:10462000022F60D0032F5ED0207808B1012806D178 -:10463000504600F06BFB002887D185F802A01820B7 -:104640008DF838006089ADF83A006089ADF83C001B -:104650008DF83E600DF13F00FEF7ABFE00B1FFDFCD -:104660009DF834008DF840002078012806D0287C81 -:1046700068B1687C02280AD1606840B1606800E0D7 -:1046800031E050F8011FCDF84110808802E040462B -:10469000CDF84180ADF845008DF84870A07BC0F39F -:1046A0004002014662F35F01C0F3800041EA8000EE -:1046B00019A9085C8DF84700A8B169460EA809F051 -:1046C000C9FC0028A9D11B208DF838008DF83A903C -:1046D00069460EA809F0BEFC00289ED19DF8010095 -:1046E0001B281CD101E0072046E5052E0CD2DFE88F -:1046F00006F0030308080300A87800F017FB032066 -:1047000000E0022000F0EEFA012E0AD0A08940B1AC -:1047100000228300114610460FF0ACFC08B10320C4 -:104720002AE5002028E52DE9FC4107460D46032631 -:1047300008460FF0E2FD00286CD13846FEF7DAFC9F -:1047400004000CD0207805E0CC0100200706050409 -:1047500003020100222805D20820BDE8FC8143F2B3 -:104760000200FAE7A07F00F0030C2DB12946604655 -:10477000FEF74DFD0600F0D1BCF1010F05D0BCF1F4 -:10478000020F18D0FFDF3046E7E7A07D2946022858 -:1047900001D011B107E01120DFE76846FCF7F2FE17 -:1047A0000028DAD16946384606F075FD0600EAD1E0 -:1047B0000120A075E7E7A07D032803D1FE48807C97 -:1047C000C00701D035B30EE025B1A07F40071FD44C -:1047D000002100E00121384606F07DFD0600D2D11F -:1047E000A075002DCFD02A4621463846FEF759FE47 -:1047F00006461128C7D1A07F4107C4D4296844F8D0 -:104800000E1F6968616040F0040020740026BAE75A -:104810001126B8E71020A0E770B50C460546FEF754 -:1048200069FC010005D022462846BDE87040FEF72D -:1048300016BE43F2020070BD00B597B043218DF85B -:1048400000108DF802000BA9684609F003FC17B0B0 -:1048500000BD0123FEF751BC00231A461946FEF79E -:104860004CBC30B597B004460FF0FAFC10B11020E4 -:1048700017B030BD204600F095FA0028F8D1CE4D93 -:10488000E878112801D00820F2E7FEF7E9FBE0B351 -:104890002078800701D56879C0B31D208DF800000D -:1048A0002078022200F001008DF802006088ADF847 -:1048B0000400A088ADF806002078C0F3400102EAA9 -:1048C000500001438DF8091002A8FEF772FD00B1F7 -:1048D000FFDF0BA9684609F0BDFB0028C8D11E20E8 -:1048E0008DF8000001208DF8020000208DF80300F3 -:1048F0000BA9684609F0AEFB0028B9D1E08800F0AA -:104900006DFA0400B4D1122001E004E005E0FEF7E6 -:104910008DFB2046ACE71320AAE70720A8E72DE986 -:10492000F043A54E074697B0F078994615460C46D9 -:10493000122803D1FFF7CFF9002816D120460FF037 -:104940008FFCE8BB28460FF08BFCC8BB204600F06C -:1049500029FA002809D129460220FEF758FC002830 -:1049600003D1F078112803D0082017B0BDE8F083F8 -:1049700006200CF025F850B12078800701D5707919 -:1049800038B1FEF76DFB022805D21320EDE71220A7 -:10499000EBE70720E9E721208DF800006088ADF8FB -:1049A0000200A088ADF8040020784FF00008C0F3A2 -:1049B00040008DF80600207880071FD4384600E0BC -:1049C00002E00FF04DFC08B11020CEE73878400827 -:1049D00008D0012809D0022807D0032805D043F2C7 -:1049E0000220C2E78DF8078002E001208DF8070061 -:1049F00057F8010F0290B888ADF80C000DF10E00C9 -:104A0000FEF7D7FC08B10320AFE72888ADF8100007 -:104A10006888ADF81200A888ADF81400E888ADF8F1 -:104A20001600ADF81880ADF81A80484600F06EF90F -:104A300000289AD186F804900BA9684609F00AFB71 -:104A4000002892D1307900F071F9E08800F0C6F9C1 -:104A500004008AD11320FEF7E9FA204685E730B535 -:104A6000054697B00C4608460FF020FC08B1102010 -:104A7000FEE62846FEF73EFB38B10178222902D334 -:104A8000807F800604D40820F2E643F20200EFE6BD -:104A900013208DF80000ADF802500BA9684609F00C -:104AA000D9FA0028E4D19DF932107F2901D0217074 -:104AB000DEE60520DCE630B5054697B00C46084634 -:104AC0000FF0CEFB08B11020D2E62846FEF712FB0D -:104AD00020B10078222804D20820C9E643F202005F -:104AE000C6E63548807C400701D51120C0E6207815 -:104AF000800802D16078800801D00720B8E65620EF -:104B00008DF80000ADF8025020788DF80400607830 -:104B10008DF805000BA9684609F09CFAA8E62DE976 -:104B2000F041B0B014460D460646FEF7E3FA070022 -:104B300006D03878222806D2082030B0BDE8F081AF -:104B400043F20200F9E728460FF0D7FB30B94FF0E7 -:104B500000084CB120460FF0C7FB08B11020ECE76D -:104B6000C4F80080A4F804801348807C800701D535 -:104B70001120E2E797F8220004F0ACF98088011DCB -:104B8000FB2901D2001D00E0FB20C0B26A46294685 -:104B900000F0E3F82C22094904A81CF0F2FFBDF84C -:104BA0000200ADF81400BDF80600ADF81600ADF82F -:104BB0001260BDF8000003E0CC010020A01F02003D -:104BC000ADF81800BDF80400ADF81A001AA904A841 -:104BD00009F040FA00B1FFDFBDF86C00ADF8080045 -:104BE000BDF86E00ADF80A00BDF87000BDF8721097 -:104BF000BDF800200844ADF80C0007201B2A9CD308 -:104C0000BDF802101B2998D3FB2A96D8FB2994D80B -:104C100006278A4210D10121104600F05AF8BDF84B -:104C20000410884208D1BDF80200012100F051F8BB -:104C3000BDF80610884201D038467EE7BDF808006E -:104C400028B9BDF80A1011B9BDF80C1029B35DB12F -:104C5000298849B1698839B124B102982060BDF82A -:104C60000C00A080132068E7BDF80010BDF80A20F2 -:104C7000081A80B2ADF80000BDF80210891AADF82C -:104C80000210012100F025F8ADF80400BDF8020083 -:104C9000012100F01EF8ADF806002C226B490FA888 -:104CA0001CF06FFFADF83E60BDF80200ADF84000AB -:104CB000BDF80600ADF84200BDF80000ADF84400B4 -:104CC000BDF80400ADF8460025A90FA809F0C2F907 -:104CD00033E7022903D0C000703080B270478000F3 -:104CE0003C30FAE730B55A4D040008D0012C04D00E -:104CF000022C06D0032C04D0FFDF2C7030BDFFDF68 -:104D0000FBE728780128F8D0FFDFF6E710B5044666 -:104D100004F0E0F830B1407830B1204604F0EEFB0A -:104D2000002010BD072010BD122010BD10B504F0EA -:104D3000D1F8040000D1FFDF607800B9FFDF6078B0 -:104D4000401E607010BD10B504F0C4F8040000D11E -:104D5000FFDF6078401C607010BD10B5144631B1A3 -:104D60000A68226049686160218839B107E02080C3 -:104D700060800121FFF7ADFFA0800DE020806188F9 -:104D800001B96080A08820B920880121FFF7A1FF28 -:104D9000A080E088002804D160880121FFF799FFF6 -:104DA000E08010BD418843F6FD730A1F9A4209D284 -:104DB0008088042806D3B0F5804F03D8884201D8F4 -:104DC00000207047072070470278520804D0012A5B -:104DD00002D043F202207047FEF7C8BA10B548B1BE -:104DE00083000022114606200FF044F9062801D066 -:104DF000032010BD002010BD70B50C0006460DD07C -:104E0000FEF778F9050000D1FFDFA6802889208110 -:104E1000288960816889A081A889E08170BD10B56A -:104E200000231A4603E0845C2343521CD2B28A4218 -:104E3000F9D30BB1002010BD012010BD00B5012831 -:104E400003D0022801D0FFDF002000BDF81F0200C0 -:104E5000CC01002010B504460FF002FA08B1102072 -:104E600010BD2078C0F30210042807D86078072806 -:104E700004D3A178102901D8814201D2072010BDA6 -:104E8000E078410706D421794A0703D4000701D40A -:104E9000080701D5062010BD002010BD10B51378FD -:104EA0005C08C37F64F30003C3771478A40864F339 -:104EB0004103C3771078C309487863F34100487011 -:104EC00013781C090B7864F347130B701378DB0815 -:104ED00063F3000048705078487110BD10B5C47875 -:104EE0000B7864F300030B70C478640864F3410327 -:104EF0000B70C478A40864F382030B70C478E408D0 -:104F000064F3C3030B700379117863F3000111702C -:104F100003795B0863F34101117003799B0863F324 -:104F2000820111700079C00860F3C301117010BDD7 -:104F300070B514460D46064604F037FA80B1017884 -:104F4000182221F00F01891C21F0F001A03100F896 -:104F5000081B21461CF015FEBDE8704004F028BA7D -:104F600029463046BDE870401322FEF778BA10B5E6 -:104F7000FE4C94F8300000280CD104F120014FF6CB -:104F8000FF72A1F110000DF04DF900B1FFDF01201B -:104F900084F8300010BD2DE9F047064608A8894680 -:104FA00090E830041F469046142128461CF03DFE30 -:104FB0000021CAF80010B8F1000F03D0B9F1000FBA -:104FC00003D114E03878C00711D020680FF06EF9D3 -:104FD000F0BBB8F1000F07D12068123028602068BC -:104FE000143068602068A8602168CAF8001038781A -:104FF000800728D560680FF077F948BBB9F1000F3A -:105000002DD0FFF720F80168C6F8C8118188A6F8EE -:10501000CC11807986F8CE01FFF7A9FFDFF84C8329 -:1050200008F12008C5F80C80626862B196F8C801E2 -:1050300006F2C91140081032FEF7E7F91022414686 -:1050400060681CF059FD3878400712D5A06800E070 -:1050500002E00FF02BF950B11020BDE8F087606836 -:105060000028F9D0E8606068C6F8C401EBE7A068E2 -:1050700028610020F1E730B5054608780C4620F09D -:105080000F00401C20F0F0011031217000206070F2 -:1050900095F8230030B104280FD0052811D0062838 -:1050A00014D0FFDF20780121B1EB101F04D295F856 -:1050B000200000F01F00607030BD21F0F0002030B3 -:1050C00002E021F0F00030302070EBE721F0F0003A -:1050D0004030F9E710B510B190F8BD4044B1A34895 -:1050E00090F83540002064B108601060186010BD71 -:1050F00000F1BC040C6000F1E40100F58670116061 -:10510000F4E79A4C34340C60EFE700B58BB007231A -:10511000CDE902128DF801300191944900236431E8 -:105120000591099301468DF8103068460DF052F84C -:10513000002800D0FFDF0BB000BD70B590B0154661 -:105140000C4602220646ADF80820092103AB04F004 -:105150006EFF0490002812D00C208DF8010004206E -:105160008DF8040004F59A74099605948DF818508A -:105170000AA968460DF02EF800B1FFDF012010B03B -:1051800070BD30B597B00C462C251A998DF800509B -:10519000ADF80200B3B11868019058680290ADF8FC -:1051A0000C2010220DF10E001CF0A6FC0BA9684685 -:1051B00008F050FF002803D1A17F41F01001A17732 -:1051C00017B030BD00200190E8E72DE9F047064612 -:1051D000808A8CB080B20D468246FDF78BFF044674 -:1051E000624F3078283FDFF884914FF00008112893 -:1051F00073D2DFE800F072F1350936777E98A7F2B6 -:10520000EFEEEDEC5BECEC00A07F00F0030001287A -:1052100006D0002150460BF021FC050003D101E02F -:105220000121F7E7FFDF99F85C10C90702D0D9F830 -:1052300060000BE0032105F121000EF0E2FCD5F83F -:1052400021004B49B0FBF1F201FB1200C5F821002F -:105250007068A867B068E8672078252800D0FFDF6D -:10526000ECE0A07F00F00300012806D000215046AA -:105270000BF0F4FB060003D101E00121F7E7FFDFAB -:105280003078810702D52178252904D040F001002B -:1052900030700CB0E1E60220287096F820002871EA -:1052A00006F121003136C5E90206F2E7A07F00F0E1 -:1052B0000300012806D0002150460BF0CFFB04006C -:1052C00003D101E00121F7E7FFDF2078C10605D512 -:1052D0001320287041346C60DBE7BEE140F0080029 -:1052E0002070D6E72148082128380EF08AFC0320D8 -:1052F00016E02A208DF8000010220DF102007168DE -:105300001CF0FAFB10220DF11200B1681CF0F4FB46 -:10531000164968462C3908F09DFE00B1FFDF0420D5 -:1053200028706F60B5E7E07FC00600D5FFDF307CF6 -:10533000B28800F001030CB05046BDE8F0470921E7 -:1053400005F00BBD04B9FFDF716821B1102204F133 -:1053500024001CF0D1FB28212046FDF703FFA07F8D -:1053600000F00300022814D104E00000180200201D -:1053700040420F0004F12400002300901A46214609 -:105380005046FFF7FEFE112807D029212046FDF7E1 -:10539000E9FE307A84F820007BE7A07F000700D583 -:1053A000FFDF14F81E0F40F008002070A4F81680EC -:1053B000C4F81880C4F81C806178084661F3820044 -:1053C000410861F3C3006070307AE07061E727E064 -:1053D0003FE17AE051E000E037E0A07F00F0030019 -:1053E000012806D0002150460BF038FB040003D101 -:1053F00001E00121F7E7FFDF022104F189000EF04F -:1054000000FC1020287004F5E4706860B4F889107E -:10541000298204F18000FD496861C5E9029138E7FD -:10542000A07F00F00300012805D0002150460BF0BA -:1054300015FB18B901E00121F8E7FFDF0CB0324697 -:1054400021465046BDE8F04772E504B9FFDF2078F9 -:105450002128A1D93079012803D1E07F40F0100044 -:10546000E077324621465046FFF762FD0CB02046F9 -:10547000BDE8F0472321FDF775BE3279AA8005F11A -:1054800008030921504604F0D2FDE86010B1112054 -:105490002870FEE6A07F00F00300012806D000215E -:1054A00050460BF0DBFA040003D101E00121F7E7DD -:1054B000FFDF04F1660102231022081F0BF03BF905 -:1054C00080F8008031794170E3E6A07F00F00300AE -:1054D000012806D0002150460BF0C0FA050003D188 -:1054E00001E00121F7E7FFDF95F8880000F00300F5 -:1054F000012879D1A07F00F00307E07FC0F34006C8 -:1055000016B1012F04D02BE095F8A400C0072AD0D3 -:10551000D5F8C00118B395F88720017C62F38701A4 -:105520000174E27FD5F8C00162F341010174D5F83E -:10553000C00166F300010174AEB1D5F8C0011022BC -:1055400004F124018C351CF0D7FA287E40F00100CC -:105550002876287820F0010005F88C0900E016B1C3 -:10556000022F04D02CE095F88C00C00726D0D5F887 -:10557000BC1119B395F88720087C62F38700087482 -:10558000E27FD5F8BC1162F341000874D5F8BC1174 -:1055900066F3000008748EB1D5F8BC01102204F146 -:1055A00024018C351CF0A8FA287840F0010005F899 -:1055B000180B287820F0010005F8A409022F44D028 -:1055C0005FF0000000EB400005EBC00090F88C009D -:1055D000800709D595F88000D5F8C421400805F169 -:1055E00081011032FDF711FF05208DF8000095F8BC -:1055F00088006A4600F003008DF8010095F88C10D1 -:105600008DF8021095F8A4008DF80300214650464D -:1056100001F046FA2078252805D0212807D0FFDFA1 -:105620002078222803D922212046FDF79BFDA07F68 -:1056300000F0030001280AD0002150460BF020FAA8 -:1056400000283FF432AEFFDF23E60120BAE7012154 -:10565000F3E7716881F801801BE6FFDF19E670B59A -:105660006A4C0025103C04F85C5F65600CF07FFD1F -:105670006649A1F1100003F02AFE04F82C5C062014 -:10568000607262487C3020615030A0611030E0616F -:1056900070BD70B50D46FDF72DFD040000D1FFDF94 -:1056A0004FF4E87128461CF0C0FA5848543068613D -:1056B00004F124002861A07F00F00300012809D034 -:1056C0005FF0020105F59A700CF052FD002800D041 -:1056D000FFDF70BD0121F5E70A46014602F59A7029 -:1056E0000CF066BD70B5054640689CB0017809298C -:1056F00006D00C2937D00D2933D0FFDF1CB070BD88 -:1057000046883046FDF7F6FC040000D1FFDF207824 -:105710002128F3D0282821D1686802210C3001F01B -:10572000B4F9D8B168680821001D01F0AEF9A8B13C -:105730002D208DF80000ADF80260102204F1240144 -:1057400001A81CF0D9F90BA9684608F083FC00B148 -:10575000FFDF29212046FDF705FDCFE703F028FEF6 -:10576000CCE701218171686886883046FDF7C2FC6C -:10577000040000D1FFDFA07F00F00301022902D165 -:1057800020F01000A077207821280AD0686881795D -:1057900009B1807880B1A07F00F0030002285ED0BC -:1057A000FFDFA07F00F003000228A7D1FDF7B3FEC2 -:1057B0000028A3D0FFDFA1E703F0FAFDE07FC107D7 -:1057C00028D0800705D594F8200000F01F0010288D -:1057D0001ED0052084F82300207829281CD02428F6 -:1057E000DFD1314605200EF0EFFC22212046FDF7E7 -:1057F000B9FCA07F00F0030001282ED00021304624 -:105800000BF03EF90028CCD0FFDFCAE728020020C9 -:105810000620DFE70420DDE7A07F00F00300012879 -:1058200006D0002130460BF019F9050003D101E044 -:105830000121F7E7FFDF25212046FDF793FC0F202C -:105840008DF8580016A905F59A700CF0A8FC0228EE -:10585000A7D00028A5D0FFDFA3E70121CFE703F001 -:10586000A7FD9EE72DE9F0438BB099461546884683 -:105870000646FDF73FFC04004FD0207822284CD389 -:1058800023284AD0E07FC00647D4A07F00F0030061 -:10589000012806D0002130460BF0E0F8070002D0C6 -:1058A0000CE00121F7E7A07F00F00300012805D1FB -:1058B0000121002230460BF0C8F8074601AB02AACE -:1058C00003A93846FFF706FC039800B9FFDF4FB184 -:1058D000039807F59A7787612078222806D0242834 -:1058E00004D007E003990020886103E025212046C9 -:1058F000FDF738FC03980B21417046628580C0E9B2 -:105900000289029901610199416104A90CF062FCCC -:10591000022802D0002800D0FFDF0BB0BDE8F083E2 -:1059200070B586B00546FDF7E5FB017822291CD944 -:10593000807F00F00300012806D0002128460BF0EC -:105940008DF8040030D101E00121F7E7FFDF2BE003 -:10595000B4F8620004F1660630440178427831B14F -:1059600021462846FFF7E9FBB8B906B070BDADF88F -:1059700004200921284602AB04F059FB03900028BB -:10598000F3D011208DF80000694604F59A700CF0F0 -:1059900006FC022801D000B1FFDF022310223146AD -:1059A00004F162000AF0FDFEB4F864000028CFD1D3 -:1059B000DBE710B586B00446FDF79CFB0178222991 -:1059C00019D9807F00F00300012806D0002120466D -:1059D0000BF044F8040003D101E00121F7E7FFDFF9 -:1059E00012208DF80000694604F59A700CF0D7FB80 -:1059F000002800D0FFDF06B010BD2DE9F05F05469E -:105A00000C4600270078904601093E46BA4604F14C -:105A1000080B02297ED0072902D00A2909D142E0C9 -:105A200068680178092905D00C292CD00D292AD0C5 -:105A3000FFDFB2E114271C26002C6CD04088A08028 -:105A4000FDF758FB5FEA000900D1FFDF99F8170066 -:105A50005A46400809F11801FDF7D7FC68688089AB -:105A6000208269684868C4F812008868C4F8160083 -:105A7000A07E20F0060040F00100A07699F81E00FC -:105A800040F040014DE01A270A26002CD5D080882E -:105A9000A080FDF72FFB050000D1FFDF5946284607 -:105AA000FFF7E9FA79E10CB1A88BA080287A0D28DC -:105AB0007ED006DC01287CD0022808D0032804D13F -:105AC00035E00F2876D0102875D0FFDF65E11E275E -:105AD0000926002CB1D0A088FDF70CFB5FEA000975 -:105AE00000D1FFDF287B00F003000128207A1BD0C3 -:105AF00020F001002072297B890861F341002072A7 -:105B0000297BC90861F382002072297B090961F3AE -:105B1000C30001E036E1E9E0207299F81E0040F090 -:105B2000800189F81E1038E140F00100E2E71327F8 -:105B30000D26002CAAD0A088FDF7DCFA8146807FD4 -:105B400000F00300012806D00021A0880AF086FF9B -:105B5000050003D101E00121F7E7FFDF99F81E00FE -:105B600000F00302012A59D0E86F817801F00301A7 -:105B70000129217A54D021F00101217283789B08F8 -:105B800063F3410121728378DB0863F382012172A0 -:105B900083781B0963F3C3012172037863F3061151 -:105BA0002172437863F3C711217284F809A003E0DE -:105BB0005EE0A4E08BE09CE0C178A172012A32D0C3 -:105BC0004279E17A62F30001E1724279520862F3AC -:105BD0004101E1724279920862F38201E1724279F5 -:105BE000D20862F3C301E1720279217B62F3000102 -:105BF00021730279520862F34101217302799208FC -:105C000062F3820121730079C00860F3C30121733C -:105C100099F80000232859D9262168E0A86FA4E745 -:105C200041F00101A9E70279E17A62F30001E17232 -:105C30000279520862F34101E1720279920862F33B -:105C40008201E1720279D20862F3C301E172427902 -:105C5000217B62F3000121734279520862F3410112 -:105C600021734279920862F3820121734079CBE774 -:105C700018271026D4B3A088FDF73CFA8346807F0E -:105C800000F00300012807D00021A0880AF0E6FEFA -:105C90005FEA000903D101E00121F6E7FFDFE868D0 -:105CA000A06099F8000040F0040189F8001099F80C -:105CB0000100800708D5012020739BF800002328ED -:105CC0006BD9272158464FE084F80CA065E01527D2 -:105CD0000F265CB1A088FDF70DFA814606225946D1 -:105CE000E86808F01FFA0120A0739BE03FE04846F7 -:105CF0003AE016270926D4B3287B20724DE0287B92 -:105D000019270E269CB3C4F808A0A4F80CA00128FB -:105D100007D0022805D0032805D0042803D0FFDFD0 -:105D20000DE0207207E0697B042801F00F0141F0CB -:105D3000800121721CD0607A20F003006072A0887C -:105D4000FDF7D8F905460078212826D0232800D071 -:105D5000FFDFA87F00F00300012811D00021A088F8 -:105D60000AF08EFE22212846FDF7FCF915E004E03A -:105D7000607A20F00300401CE0E7A8F8006011E022 -:105D80000121ECE70CB16888A080287A03282BD089 -:105D900004280AD005284BD0FFDFA8F800600CB11A -:105DA000278066800020BDE8F09F15270F26002C75 -:105DB000E3D0A088FDF79EF9807F00F00300012862 -:105DC00006D00021A0880AF049FE050003D101E0B9 -:105DD0000121F7E7FFDFD5F821000622594608F038 -:105DE000A1F984F80EA0D8E717270926002CC4D003 -:105DF000A088FDF77FF98146807F00F0030001282D -:105E000006D00021A0880AF029FE050003D101E098 -:105E10000121F7E7FFDF6878800701D5022000E065 -:105E20000120207299F800002328B6D927215EE7C7 -:105E300019270E26002CA0D0A088FDF75BF95FEA99 -:105E4000000900D1FFDFC4F808A0A4F80CA084F872 -:105E500008A0A07A40F00300A07299F81F1061F327 -:105E60008200A07299F81F10C1F34002114205D0C0 -:105E700099F8201001F01F0110292CD020F0080003 -:105E8000A07299F81F004108607A61F3C300607244 -:105E9000697A01F003010129A5D140F00400607284 -:105EA00099F81E00E97A00F00300012816D0607B03 -:105EB00061F300006073AA7A217B62F30001217311 -:105EC000EA7A520862F341006073A87A400860F3EE -:105ED0004101217361E740F00800D1E7207B61F3C5 -:105EE00000002073AA7A617B62F300016173EA7A91 -:105EF000520862F341002073A87A400860F3410120 -:105F000061734AE710B5FE4C30B10146102204F12E -:105F100020001BF0F1FD012084F8300010BD10B509 -:105F20000446FFF724F8F64920461022BDE8104049 -:105F300020311BF0E1BD70B5F14D06004FF00004BB -:105F400012D00EF08DF908B110240BE00621304676 -:105F500008F0CFF8411C04D02866012085F85C00C9 -:105F600000E00724204670BD0020F7E7007810F01D -:105F70000F0204D0012A05D0022A0CD110E000093A -:105F800009D10AE00009012807D0022805D003281A -:105F900003D0042801D00720704708700020704704 -:105FA0000620704705282AD2DFE800F003070F1704 -:105FB0001F00087820F0FF001EE0087820F00F0096 -:105FC000401C20F0F000103016E0087820F00F00A0 -:105FD000401C20F0F00020300EE0087820F00F0088 -:105FE000401C20F0F000303006E0087820F00F0070 -:105FF000401C20F0F000403008700020704707205F -:1060000070472DE9F041804688B00D4600270846CC -:106010000EF073F9A8B94046FDF76CF8040003D000 -:106020002078222815D104E043F2020008B0BDE830 -:10603000F08145B9A07F010603D500F003000228D6 -:1060400001D01020F2E7A07FC10601D4010702D5DC -:106050000DB10820EAE7E17FC90601D50D20E5E78B -:1060600000F00300022805D125B12846FEF7F2FE14 -:106070000700DBD1A07F00F00300012806D000213B -:1060800040460AF0EBFC060002D00DE00121F7E7E4 -:10609000A07F00F0030001280CD000210022404620 -:1060A0000AF0D3FC060007D0A07F00F0030002280E -:1060B00004D009E00121F1E70420B7E725B12A4621 -:1060C00031462046FEF7EAFE07AB1A4669463046DF -:1060D000FFF700F8009800B9FFDF00990C20487026 -:1060E00006F59A70C1F82480486100200881A07FDD -:1060F00000F00300012828D0EDB302200871301D04 -:1061000088613078400908777078C0F3400048779C -:10611000287800F00102887F62F301008877E27F2F -:1061200062F382008877E27F520862F3C3008877C7 -:10613000727862F304108877A878C87701F1210299 -:1061400028462031FEF7CAFE22E001200871287897 -:1061500000F00102087E62F3010008762A785208F6 -:1061600062F3820008762A78920862F3C300087608 -:106170002A78D20800E007E062F3041008762421B0 -:106180002046FCF7EFFF0BE003200871052008769E -:1061900025212046FCF7E6FFA07F20F08000A077B5 -:1061A00001A900980CF016F8022801D000B1FFDF19 -:1061B00038463BE72DE9FF4F524A0D4699B09A46C3 -:1061C00007CA14AB002783E807001998FCF792FF71 -:1061D000060006D03078262806D008201DB0BDE87D -:1061E000F08F43F20200F9E7B07F00F00309B9F144 -:1061F000010F03D0B9F1020F07D008E03DB91B9899 -:10620000FEF728FE0028E9D101E01B9880BBB07F93 -:1062100000F00300012806D0002119980AF01EFCA6 -:10622000040003D101E00121F7E7FFDF852D28D02D -:1062300007DCF5B1812D1ED0822D1ED0832D08D113 -:106240001DE0862D1FD0882D1FD0892D1FD08A2DAF -:106250001FD00F2020710F281DD003F0A6F8E0B149 -:1062600001208DF83400201D0E902079B8B160E136 -:1062700011E00020EEE70120ECE70220EAE703202E -:10628000E8E70520E6E70620E4E70820E2E7092042 -:10629000E0E70A20DEE70720A0E711209EE7B9F13A -:1062A000010F17D0D4E91E50804602200190012032 -:1062B0000090A87898F80210C0F3C000C1F3C001A4 -:1062C00008405FEA000B63D050460DF0C9FF00287C -:1062D00072D133E0D4E91E850120019002200090A4 -:1062E000214630461B9AFEF7D9FD1B98007800F036 -:1062F0000101A87861F30100A870F17F04E00000BB -:10630000180200202420020061F38200A870F17FAF -:10631000490861F3C300A870617861F30410A870A4 -:106320002078400928706078C0F3400068701B989E -:106330008078E870002068712871BAE7DAF80C00FC -:106340000DF08EFFC0BBDAF81C000DF089FF98BB82 -:10635000DAF80C00A060DAF81C00E06098F80100A0 -:10636000617800F0010041EA4000607098F8021086 -:10637000C0B2C1F30011891E08406070002084F88B -:106380002000009906F1170002290BD001210AE034 -:1063900098F80110607801F00101FD2242EA410104 -:1063A0000840E2E7002104EB810188610199701C3B -:1063B000022902D0012101E028E0002104EB810143 -:1063C0008861A87800F00300012849D198F80200FC -:1063D00000F00300012843D1B9F1010F04D12A1DB7 -:1063E000691D1B98FEF77AFD287998F8041008407B -:1063F0008DF82C00697998F8052011408DF830103F -:1064000008432DD050460DF02BFF08B11020E5E6D3 -:106410000AF1100004F5DE7104F190020490B9F164 -:10642000020F3CD00090CDE9012100210BAB5A4670 -:106430002046FEF7B0FD0028E9D104F5E07104F133 -:10644000A802B9F1010F30D004980090CDE90121E4 -:1064500000210CAB5A462046FEF79DFD0028D6D100 -:106460006078800740D4A87898F80210C0F38000C4 -:10647000C1F38001084337D0297898F8000014AAA6 -:10648000B9F1010F17D032F810204B00DA4012F0AA -:10649000030718D0012F1ED0022F12D11DE0CDF816 -:1064A00000A0CDE901210121C0E7CDF800A0CDE990 -:1064B00001210121CDE732F811204300DA4002F03A -:1064C0000307032F07D0BBF1000F0DD0012906D021 -:1064D000042904D008E00227F5E70127F3E70128A3 -:1064E00001D0042800D10427F07F40F001006BF3B5 -:1064F0004100F077607881074FF003000CD5A07160 -:10650000BBF1000F15D100BF8DF85C0017AA314612 -:10651000199800F0C5FA0CE00221022F18D0012FC3 -:1065200018D0042F22D00020A071F07F20F00100AD -:10653000F07725213046FCF715FE0DA904F59A7079 -:106540000BF02DFE10B1022800D0FFDF002045E641 -:10655000A171D9E7A1710D2104F124001BF065FBA5 -:10656000207840F0020020700420CDE70120A071C7 -:10657000DFE72DE9F04387B09046894604460025C1 -:10658000FCF7B8FD060006D03078272806D0082092 -:1065900007B0BDE8F08343F20200F9E7B07F00F0F6 -:1065A0000300012806D0002120460AF057FA040013 -:1065B00003D101E00121F7E7FFDFA7795FEA0900D6 -:1065C00005D0012821D0B9F1020F26D110E0B8F191 -:1065D000000F22D1012F05D0022F05D0032F05D0A7 -:1065E000FFDF2DE00C252BE0012529E0022527E027 -:1065F00040460DF035FEB0B9032F0ED110224146B2 -:1066000004F121001BF078FA1AE0012F02D0022FCA -:1066100003D104E0B8F1000F12D00720B8E74046DC -:106620000DF01EFE08B11020B2E7102104F1210088 -:106630001BF0D9FA0621404607F05BFDC4F82100A3 -:106640002078252140F0020020703046FCF78AFDBA -:106650002078C10714D020F00100207002208DF8AE -:10666000000004F1210002908DF80450694604F501 -:106670009A700BF094FD022804D018B1FFDF01E0FE -:1066800084F82050002083E730B587B00D460446DB -:10669000FCF730FD88B1807F00F0030001280FD0A7 -:1066A000002120460AF0DAF904000ED028460DF049 -:1066B000D7FD38B1102007B030BD43F20200FAE731 -:1066C0000121EEE72078400701D40820F3E72946AE -:1066D00004F14100202205461BF00EFA207840F01C -:1066E0001000207001070FD520F008002070132043 -:1066F0008DF80000694604F59A7001950BF04FFD86 -:10670000022801D000B1FFDF0020D4E770B50D46AC -:106710000646FCF7EFFC18B1017827291FD102E0EB -:1067200043F2020070BD807F00F00300012806D014 -:10673000002130460AF092F9040003D101E0012162 -:10674000F7E7FFDFA079022809D16078C00706D0FB -:106750002A4621463046FEF7F0FC10B10FE0082033 -:1067600070BDB4F864000E280BD204F16601022358 -:106770001022081F09F0DFFF012101704570002081 -:1067800070BD112070BD70B5064686B014460D462A -:1067900008460DF065FD18B920460DF087FD10B1D3 -:1067A000102006B070BDA6F57F40FF380ED03046F1 -:1067B000FCF7A0FC38B1417822464B08811C1846F2 -:1067C000FCF723FE07E043F20200EAE72046FDF76C -:1067D00099FC0028E5D11021E01D0DF012FAE21D10 -:1067E00029466846FEF791FC102204F11700019932 -:1067F0001BF082F90020D4E72DE9F041044686B071 -:1068000015468846002708460DF077FD18B928463A -:106810000DF073FD10B1102006B008E42046FCF71F -:1068200069FC060003D03078272818D102E043F233 -:106830000200F1E7B07F00F00300012806D000213C -:1068400020460AF00BF9040003D101E00121F7E72B -:10685000FFDF2078400702D56078800701D4082048 -:10686000DAE7B07F00F00300012818D0D4E91E0158 -:10687000407800B1B5B1487810B1B8F1000F11D02F -:10688000C5B1EA1D6846E168FEF73FFC102205F13C -:10689000170001991BF004F930B104270AE0D4E98C -:1068A0001E10E5E70720B7E71022E91D04F13100CB -:1068B0001BF022F9B8F1000F06D0102208F10701F1 -:1068C00004F121001BF018F92078252140F0020086 -:1068D00020703046FCF746FC2078C10716D020F027 -:1068E0000100207002208DF8000004F121000290C8 -:1068F000103003908DF80470694604F59A700BF01F -:106900004EFC022804D018B1FFDF01E084F82070AB -:10691000002081E7F8B515460E460746FCF7EAFB6E -:10692000040004D02078222804D00820F8BD43F2C7 -:106930000200F8BDA07F00F00300022802D043F25D -:106940000400F8BD30460DF08BFC18B928460DF058 -:1069500087FC08B11020F8BD00953288B31C214691 -:106960003846FEF70EFC112814D00028F3D1297CFC -:106970004A08E17F62F30001E1772A7C62F341017A -:10698000E177297C890884F82010A17F21F080011B -:10699000A177F8BDA17F0907FBD4D6F80200C4F89F -:1069A0003600D6F80600C4F83A003088A0861022D7 -:1069B000294604F124001BF09FF8287C4108E07F61 -:1069C00061F38200E077297C61F3C300E077287CE3 -:1069D000800884F82100A07F40F00800A077002004 -:1069E000D3E770B596B00D46064613B1072016B032 -:1069F00070BDFCF77FFB040007D02078222802D36B -:106A0000A07F400604D40820F1E743F20200EEE73D -:106A1000C5B12D208DF80000ADF802601022294686 -:106A200001A81BF069F8287C4108E07F61F30000B1 -:106A3000E077297C61F34100E077287C800884F8C6 -:106A4000200004E02E208DF80000ADF802600BA9B4 -:106A5000684607F0FFFAA17F21F04001A177C6E761 -:106A600070B50D46FCF746FB040005D028460DF036 -:106A70001DFC20B1102070BD43F2020070BD2946FC -:106A80002046FEF7F8FA002070BD04E010F8012B54 -:106A90000AB100207047491E89B2F7D20120704721 -:106AA00070B51546064602F080FC040000D1FFDFF9 -:106AB000207820F00F00801C20F0F00020302070A3 -:106AC00066802868A060BDE8704002F071BC0000DC -:106AD00018B18178012938D101E010207047018870 -:106AE00042F60112881A914231D018DC42F60102B6 -:106AF000A1EB020091422AD00CDC41B3B1F5C05F9A -:106B000025D06FF4C050081821D0A0F57060FF3870 -:106B10001BD11CE001281AD002280AD117E0B0F5D9 -:106B2000807F14D008DC012811D002280FD0032860 -:106B30000DD0FF2809D10AE0B0F5817F07D0A0F57C -:106B40008070033803D0012801D0002070470F2047 -:106B500070470B2826D008DC1BD2DFE800F01C2091 -:106B600025251A25292325271E0011281CD008DCDD -:106B70000C2817D00D281DD00F2815D0102808D1AB -:106B800010E0822809D0842810D0852810D08728CA -:106B900012D003207047002070470520704743F251 -:106BA00003007047072070470F207047042070478C -:106BB000062070470C20704743F20200704738B53A -:106BC0000C46050041D06946FFF7D0F9002819D1DD -:106BD0009DF80010607861F3020060706946681CDF -:106BE000FFF7C4F900280DD19DF80010607861F31B -:106BF000C5006070A978C1F34101012903D00229C1 -:106C000005D0072038BD217821F0200102E021784D -:106C100041F020012170410704D0A978C90861F32F -:106C200086106070607810F0380F07D0A9780909D5 -:106C300061F3C710607010F0380F02D16078400621 -:106C400003D5207840F040002070002038BD70B59A -:106C500004460020088015466068FFF7B0FF002852 -:106C600016D12089A189884211D860688078C00730 -:106C70000AD0B1F5007F0AD840F20120B1FBF0F252 -:106C800000FB1210288007E0B1F5FF7F01D90C202E -:106C900070BD01F201212980002070BD10B504787B -:106CA000137864F3000313700478640864F34103F9 -:106CB00013700478A40864F3820313700478E40862 -:106CC00064F3C30313700478240964F3041313708A -:106CD0000478640964F3451313700078800960F345 -:106CE0008613137031B10878C10701D1800701D52F -:106CF000012000E0002060F3C713137010BD42783C -:106D0000530702D002F0070306E012F0380F02D05A -:106D1000C2F3C20300E001234A7863F302024A701F -:106D2000407810F0380F02D0C0F3C20005E04307EE -:106D300002D000F0070000E0012060F3C5024A70B5 -:106D400070472DE9F04F95B00D00804615D0B8F191 -:106D5000000F16D0122128461AF045FF4FF6FF7B90 -:106D600005AA0121584606F0C0FF002426463746F2 -:106D70004FF420596FF4205A75E0102015B0BDE88B -:106D8000F08F0720FAE700BF9DF81E0001280AD106 -:106D9000BDF81C0048450BD010EB0A000AD00128B2 -:106DA0000CD002280CD0042C0ED0052C0FD10DE0F5 -:106DB000012400E00224BDF81A6008E0032406E084 -:106DC0000424BDF81A7002E0052400E00624BDF892 -:106DD0001A10414547D12C74BEB34FF0000810AAD9 -:106DE0004FF0070ACDE90282CDE900A80DF13C0978 -:106DF0001023CDF8109042463146584607F028F847 -:106E000008BBBDF83C002A46C0B210A90BF084FABA -:106E1000C8B9AE81CFB1CDE900A80DF1080C0AAE1A -:106E200040468CE84102132300223946584607F0B9 -:106E30000FF840B9BDF83C00F11CC01EC0B22A1DBD -:106E40000BF06AFA10B1032098E70AE0BDF82900B8 -:106E5000E881062C05D19DF81E00A872BDF81C0023 -:106E6000288100208AE705A806F04BFF00288BD078 -:106E7000FFF76FFE82E72DE9F0471C46DDE9097850 -:106E8000DDF8209015460E00824600D1FFDF0CB1E0 -:106E9000208818B1D5B11120BDE8F087022D01D0AE -:106EA000012100E0002106F1140005F003FEA8F81E -:106EB000000002463B462946504603F0B8F8C9F8A0 -:106EC000000008B9A41C3C600020E5E71320E3E7BC -:106ED000F0B41446DDE904528DB1002314B1022C44 -:106EE00009D101E0012306E00D7CEE0703D025F077 -:106EF000010501230D742146F0BC03F02EBF1A805A -:106F0000F0BC70472DE9FE4F91461A881C468A4610 -:106F10008046FAB102AB494603F089F8050019D062 -:106F20004046A61C278809F0B5FE324607262946AA -:106F30003B46009609F074FA20882346CDE90050BC -:106F40004A4651464046FFF7C3FF002020800120FB -:106F5000BDE8FE8F0020FBE72DE9F04786B09146A3 -:106F6000DDE90E460F46824603AA05A904A8109D36 -:106F70008DE807009846324621465046FFF77BFFD2 -:106F8000049909B1012200E000222A70002817D1DB -:106F9000F84A03AB1060059A009104F11400CDE9A2 -:106FA00001204A463946504606F048F990B1082873 -:106FB0000ED2DFE800F00407040D0D090B0B0020D2 -:106FC00006B069E71120FBE70720F9E70820F7E79B -:106FD0000320F5E7BDF80C100498CDE90001434605 -:106FE000324621465046FFF773FFE8E72DE9F043AC -:106FF00089B00D46DDE9108781461C4616461421EE -:1070000003A81AF012FE012002218DF810108DF84D -:107010000C008DF81170ADF8146064B1A278D2073D -:1070200009D08DF81600E088ADF81A00A088ADF8F8 -:107030001800A068079008A80095CDE90110424605 -:1070400003A948466B68FFF787FF09B0BDE8F083E6 -:10705000F0B58BB0002406460694079407270894E1 -:1070600005A80994019400970294CDE903400D46C8 -:1070700010232246304606F0EBFE78B90AA806A98E -:10708000019400970294CDE90310BDF8143000225A -:107090002946304606F0B2FC002801D0FFF759FD22 -:1070A0000BB0F0BD06F052BB2DE9FC410C4680460A -:1070B000002602F07AF9054620780D287ED2DFE816 -:1070C00000F0BC0713B325BD49496383AF959B000E -:1070D000A848006820B1417841F010014170ADE04E -:1070E000404602F092F9A9E00421404609F0B6FCBE -:1070F000070000D1FFDF07F11401404605F06EFCE8 -:10710000A5BB13214046FDF787FB97E004214046CD -:1071100009F0A4FC070000D1FFDFE088ADF8000013 -:107120000020B8819DF80000010704D5C00602D5F3 -:10713000A088B88105E09DF8010040067ED5A088B2 -:10714000F88105B9FFDF22462946404601F068FC78 -:10715000022673E0E188ADF800109DF801100906E1 -:107160000FD5072803D006280AD00AE024E004211E -:10717000404609F073FC060000D1FFDFA088F081D3 -:107180000226CDB9FFDF17E00421404609F066FC76 -:10719000070000D1FFDF07F1140006F00EFB90F0AE -:1071A000010F02D1E079000648D5387C022640F074 -:1071B0000200387405B9FFDF224600E03DE02946B1 -:1071C000404601F02DFC39E00421404609F046FC20 -:1071D000017C002D01F00206C1F340016171017CC8 -:1071E00021F002010174E7D1FFDFE5E7022601216A -:1071F000404602F045F921E00421404609F02EFC0A -:107200000546606800902089ADF8040001226946B7 -:10721000404602F056F9287C20F0020028740DE068 -:10722000002DC9D1FFDFC7E7022600214046FBF74A -:10723000CDF8002DC0D1FFDFBEE7FFDF3046BDE84F -:10724000FC813EB50C0009D001466B4601AA002026 -:1072500006F080FE20B1FFF77CFC3EBD10203EBD55 -:1072600000202080A0709DF8050002A900F0070012 -:10727000FEF798FE50B99DF8080020709DF80500B3 -:1072800002A9C0F3C200FEF78DFE08B103203EBD87 -:107290009DF8080060709DF80500C109A07861F3B1 -:1072A0000410A0709DF80510890961F3C300A07057 -:1072B0009DF80410890601D5022100E0012161F347 -:1072C00042009DF8001061F30000A07000203EBD58 -:1072D00070B5144606460D4651EA040005D075B156 -:1072E00008460DF001F878B901E0072070BD294685 -:1072F000304606F090FE10B1BDE8704029E454B16C -:1073000020460CF0F1FF08B1102070BD2146304638 -:10731000BDE8704095E7002070BD2DE9FC5F0C468C -:1073200090460546002701780822007A3E46B2EBD7 -:10733000111F7DD104F10A0100910A31821E4FF024 -:10734000020A04F1080B0191092A72D2DFE802F067 -:10735000EDE005F528287BAACE006888042109F015 -:107360007DFB060000D1FFDFB08928B15227072638 -:10737000C3E000001403002051271026002C7DD00C -:107380006888A0800120A071A88900220099FFF7D9 -:107390009FFF002873D1A8892081288AE081D1E04D -:1073A000B5F81290072824D1E87B000621D5512793 -:1073B00009F1140086B2002CE1D0A88900220099BE -:1073C000FFF786FF00285AD16888A08084F806A0BD -:1073D000A88920810120A073288A2082A4F8129015 -:1073E000A88A009068884B46A969019A01F0F5FACD -:1073F000A8E0502709F1120086B2002C3ED0A889DF -:1074000000225946FFF764FF002838D16888A08021 -:10741000A889E080287A072813D002202073288AC0 -:10742000E081E87BC0096073A4F81090A88A01E0AD -:1074300085E082E0009068884B4604F11202A96959 -:10744000D4E70120EAE7B5F81290512709F11400BA -:1074500086B2002C66D06888042109F0FFFA8346C2 -:107460006888A080A88900220099FFF731FF0028D2 -:107470006ED184F806A0A889208101E052E067E07F -:107480000420A073288A2082A4F81290A88A009071 -:1074900068884B46A969019A01F09FFAA989ABF85F -:1074A0000E104FE06888FBF725FE07466888042128 -:1074B00009F0D4FA064607B9FFDF06B9FFDF687B9B -:1074C000C00702D05127142601E0502712264CB3E2 -:1074D0006888A080502F06D084F806A0287B5946E3 -:1074E00001F08BFA2EE0287BA11DF9E7FE49A8895F -:1074F0004989814205D1542706269CB16888A0801D -:1075000020E053270BE06888A080A889E08019E07C -:107510006888042109F0A2FA00B9FFDF5527082680 -:10752000002CF0D1A8F8006011E056270726002CA7 -:10753000F8D06888A080002013E0FFDF02E0012877 -:1075400008D0FFDFA8F800600CB12780668000201B -:10755000BDE8FC9F57270726002CE3D06888A08051 -:10756000687AA071EEE7401D20F0030009B14143A5 -:10757000091D01EB4000704713B5DB4A0020107174 -:10758000009848B10024684609F06BF8002C02D13D -:10759000D64A009911601CBD01240020F4E770B5A3 -:1075A0000D46064686B014465C2128461AF03DFB7F -:1075B00004B9FFDFA0786874A2782188284601F01A -:1075C00046FA0020A881E881228805F1140130469E -:1075D00005F0E9F96A460121304606F086FB19E01C -:1075E0009DF80300000715D5BDF806103046FFF7DB -:1075F0002FFD9DF80300BDF8061040F010008DF837 -:107600000300BDF80300ADF81400FF233046059ACF -:1076100006F0CCFC684606F074FB0028E0D006B00B -:1076200070BD10B50C4601F1140005F0F3F90146E8 -:10763000627C2046BDE8104001F03EBA70B50546B8 -:10764000042109F00BFA040000D1FFDF04F114015A -:107650000C46284605F0C2F921462846BDE8704090 -:1076600005F0C3B970B58AB00C460646FBF742FD7B -:10767000050014D02878222827D30CB1A08890B117 -:1076800001208DF80C0003208DF8100000208DF8EB -:10769000110054B1A088ADF81800206807E043F24B -:1076A00002000AB070BD0920FBE7ADF81800059094 -:1076B0000421304609F0D2F9040000D1FFDF04F1C3 -:1076C000140005F0BEF9C00601D40820E9E701F076 -:1076D0006CFE60B108A802210094CDE9011095F874 -:1076E000232003A930466368FFF736FCD9E7112051 -:1076F000D7E72DE9F04FB2F802A0834689B01546CE -:1077000089465046FBF7F6FC07460421504609F02F -:10771000A5F90026044605964FF002080696ADF836 -:107720001C6007B9FFDF04B9FFDF4146504603F094 -:107730007CFE60B907AA06A905A88DE807004246A5 -:10774000214650466368FFF796FB00B1FFDF6648AD -:1077500007AB0660DDE9051204F11400CDF80090D6 -:10776000CDE90320CDE9013197F823205946504651 -:107770006B6805F0AFF906000AD0022E04D0032E84 -:1077800014D0042E00D0FFDF09B03046BDE8F08FE2 -:10779000BDF81C000028F7D00599CDE9001042463D -:1077A000214650466368FFF793FBEDE7687840F0A9 -:1077B00008006870E8E72DE9F04F9BB004464FF0F1 -:1077C00000084948ADF85480ADF83080ADF85080DD -:1077D000A0F80880ADF81480ADF81880ADF82080CE -:1077E000ADF81C80007916460D464746012808D0A2 -:1077F000022806D0032804D0042802D008201BB099 -:10780000C4E720460CF02CFDD0BB28460CF028FD28 -:10781000B0BB60680CF071FD90BB606848B16089D6 -:107820002189884202D8B1F5007F01D90C20E6E712 -:1078300080460BAA06A92846FFF709FA0028DED1E0 -:1078400068688078C0F34100022808D19DF81900CB -:1078500010F0380F03D028690CF046FD80B905A957 -:107860002069FFF7ACF90028C9D1206950B16078D0 -:1078700080079DF8150000F0380002D5C0B301E084 -:1078800011E0A8BB9DF8140080060ED59DF81500E8 -:1078900010F0380F03D060680CF026FD18B960684E -:1078A0000CF02BFD08B11020A9E707A96069FFF7CC -:1078B00086F90028A3D1606940B19DF81D0000F051 -:1078C000070101293FD110F0380F3CD008A9A06969 -:1078D000FFF775F9002892D19DF81C00800632D47C -:1078E0009DF82000800604E014030020140000200E -:1078F00029E028D4A06940B19DF8210000F00701DB -:10790000012920D110F0380F1DD0E06818B100789F -:10791000C8B11C2817D20EAA611C2046FFF7BEF979 -:107920000120B94660F30F27BA4607468DF84E008E -:1079300042F60300ADF84C000DF13B0217A9286890 -:107940000AF009FD08B1072059E79DF85C0016A967 -:10795000CDF80090C01CCDE9019100F0FF0B002391 -:107960000BF20122514613A806F002F9F0BBBDF854 -:1079700058000990FE482A8929690092CDE9011032 -:107980006B89BDF82C202868069906F0F1F80100F3 -:107990007ED120784FF0020AC10601D480062BD593 -:1079A000ADF80C90606950B907A906A8FFF7A7F9D0 -:1079B0009DF81D0020F00700401C8DF81D009DF86B -:1079C0001C008DF84E7040F0C8008DF81C0042F687 -:1079D0000210ADF84C000CA903AACDF800A0CDE927 -:1079E0000121002340F2032213A800E01EE00799C2 -:1079F00006F0BEF801004BD1DD484D4608385B4625 -:107A00000089ADF839000EA8CDE90290CDF80490B8 -:107A1000CDF810904FF007090022CDF80090BDF886 -:107A200058104FF6FF7005F0E9FF10B1FFF791F81D -:107A3000E5E69DF83800000625D52946012060F3CB -:107A40000F218DF84E704FF42450ADF84C00ADF876 -:107A5000105062789DF81000002362F300008DF84A -:107A600010006278CDF800A0520862F341008DF852 -:107A7000100004AACDE9012540F2032213A806F064 -:107A800077F8010004D1606888B32069A8B900E0E4 -:107A900086E005A906A8FFF732F96078800706D4CA -:107AA0009DF8150020F038008DF8150005E09DF8D0 -:107AB000140040F040008DF814008DF84E7042F62E -:107AC0000110ADF84C00208940F20121B0FBF1F229 -:107AD00001FB1202606814ABCDF80080CDE9010310 -:107AE000002313A8059906F043F8010058D1207827 -:107AF000C00729D0ADF80C50A06950B908A906A854 -:107B0000FFF7FDF89DF8210020F00700401C8DF8DC -:107B100021009DF820008DF84E7040F040008DF857 -:107B2000200042F60310ADF84C0015A903AACDF8C9 -:107B300000A0CDE90121002340F2032213A80899F7 -:107B400006F016F801002BD1E06868B32946012041 -:107B500060F30F218DF84E7042F60410ADF84C0022 -:107B6000E068002302788DF8602040788DF861008D -:107B7000E06818AA4088ADF86200E06800798DF8E6 -:107B80006400E068C088ADF86500CDF80090CDE9EC -:107B900001254FF4027213A805F0EAFF010003D09B -:107BA000099800F0B5FF2AE67148032108380171F1 -:107BB00056B100893080BDF850007080BDF83000AB -:107BC000B080BDF85400F080002018E670B50125A3 -:107BD0008AB016460B46012802D0022816D104E0CE -:107BE0008DF80E504FF4205003E08DF80E5042F601 -:107BF0000100ADF80C005BB10024601C60F30F24A1 -:107C000004AA08A918460AF0A6FB18B1072048E5FF -:107C1000102046E504A99DF820205548CDE9002113 -:107C2000801E02900023214603A802F2012205F0E3 -:107C30009FFF10B1FEF78DFF33E54D4808380EB1B8 -:107C4000C1883180057100202BE5F0B593B007465F -:107C500001268DF83E6041F60100ADF83C0012AA05 -:107C60000FA93046FFF7B2FF002848D1404C00254D -:107C7000083CE7B31C2102A819F0D7FF9DF80800C3 -:107C80008DF83E6040F020008DF8080042F6052097 -:107C9000ADF83C000E959DF83A00119520F00600D5 -:107CA000801C8DF83A009DF838006A4620F0FF00ED -:107CB0008DF838009DF8390009A920F0FF008DF8F3 -:107CC00039000420ADF82C00ADF830000EA80A9061 -:107CD00011A80D900FA80990ADF82E5002A8FFF73B -:107CE0006AFD00280BD1BDF80000608100E008E0CB -:107CF000BDF80400A081401CE0812571002013B074 -:107D0000F0BD6581A581BDF84800F4E72DE9F74F86 -:107D10001749A0B00024083917940A79A146012A0E -:107D200004D0022A02D0082023B02FE5CA8882425C -:107D300001D00620F8E721988A46824201D1072027 -:107D4000F2E701202146ADF848004FF6FF7860F3D6 -:107D50000F21ADF84A808DF86E0042F6020B0691B5 -:107D60008DF87240ADF86CB0ADF870401CA901E020 -:107D70001C0300201391ADF8508012A805F0E5FF18 -:107D800000252E462F460DAB072212A9404605F0CE -:107D9000DFFF78B182285DD195B38EB3ADF8645022 -:107DA000ADF866609DF85E008DF8144019AC0128AE -:107DB00064D06BE09DF83A001FB3012859D1BDF89B -:107DC000381059451FD118A809A901940294CDE98A -:107DD000031007200090BDF8361010230022404603 -:107DE00006F036F8B0BBBDF86000042801D00628C4 -:107DF0004AD1BDF82410219881423AD10F2093E74F -:107E00003AE0012835D1BDF83800B0F5205F03D045 -:107E100042F6010188422CD1BAF80600BDF83610AE -:107E2000884201D1012700E0002705B19EB12198C9 -:107E300081421ED118A809AA01940294CDE9032019 -:107E4000072000900D4610230022404606F000F85F -:107E500000B902E02DE04E460BE0BDF860000228BC -:107E600001D0102810D1C0B217AA09A90AF054FAFB -:107E700050B9BDF8369086E7052055E705A917A843 -:107E8000221D0AF068FA08B103204DE79DF814009E -:107E90000023001DC2B28DF8142022980092CDE973 -:107EA00001401BA8069905F063FE10B902228AF86A -:107EB0000420FEF74EFE37E710B50B46401E88B093 -:107EC00084B205AA00211846FEF7E8FE00200DF155 -:107ED000080C06AA05A901908CE80700072000906D -:107EE0000123002221464FF6FF7005F087FD04466E -:107EF000BDF81800012800D0FFDF2046FEF729FE5C -:107F000008B010BDF0B5F94F044687B038790E4679 -:107F1000032804D0042802D0082007B0F0BD04AA2A -:107F200003A92046FEF793FE0500F6D1606880782D -:107F3000C0F3410002280AD19DF80D0010F0380F5F -:107F400005D020690CF0D0F908B11020E5E72089B0 -:107F500005AA21698DE807006389BDF81020206813 -:107F6000039905F005FE10B1FEF7F3FDD5E716B154 -:107F7000BDF814003080042038712846CDE7F8B5EC -:107F80000C0006460BD001464FF6FF7500236A46EB -:107F9000284605F0DFFF20B1FEF7DBFDF8BD10201D -:107FA000F8BD69462046FEF70AFE0028F8D1A07801 -:107FB000314600F001032846009A05F0F7FFEBE791 -:107FC00030B587B0144600220DF1080C05AD0192C2 -:107FD0008CE82C00072200920A46014623884FF6BF -:107FE000FF7005F00BFDBDF814102180FEF7B1FD08 -:107FF00007B030BD70B50D46042108F02FFD040018 -:1080000000D1FFDF294604F11400BDE8704004F000 -:1080100011BD70B50D46042108F020FD040000D10B -:10802000FFDF294604F11400BDE8704004F025BDCF -:1080300070B50D46042108F011FD040000D1FFDFEA -:10804000294604F11400BDE8704004F03DBD70B550 -:108050000546042108F002FD040000D1FFDF21469F -:1080600028462368BDE870400122FEF74BBF70B57B -:108070000646042108F0F2FC040000D1FFDF04F101 -:10808000140004F0C7FC401D20F0030511E0011DA1 -:1080900000880022431821463046FEF733FF0028AF -:1080A0000BD0607CABB2684382B2A068011D08F0BF -:1080B00078FBA06841880029E9D170BD70B50546FC -:1080C000042108F0CBFC040000D1FFDF2146284644 -:1080D0006368BDE870400222FEF714BF70B50E461B -:1080E000054601F062F9040000D1FFDF0120207293 -:1080F00066726580207820F00F00001D20F0F000EF -:1081000040302070BDE8704001F052B910B504460F -:10811000012900D0FFDF2046BDE810400121FAF719 -:1081200055B92DE9F04F97B04FF0000A0C00834687 -:10813000ADF818A0D04619D0E06830B1A068A8B159 -:108140000188ADF81810A0F800A05846FAF7D2FF41 -:10815000070043F2020967D03878222862D304214D -:10816000584608F07BFC050005D103E0102017B04D -:10817000BDE8F08FFFDF05F1140004F04BFC401D5B -:1081800020F00306A078012803D0022801D00720A0 -:10819000EDE7208878B1401C81B209AA584605F065 -:1081A000A4FD09A805F0ADFD9DF82E204FF4505117 -:1081B000012A0DD102E043F20300D8E7BDF82C20DC -:1081C000A2F52453023B03D1822801D0A0B901E0DB -:1081D0000846CCE7E068B0B1CDE902A0072006AAC6 -:1081E000CDF804A000900492A2882188BDF8183030 -:1081F000584605F003FC10B1FEF7ABFCB7E7A168E9 -:10820000BDF8180008809DF82700C00602D543F28B -:108210000140ACE70D9838B1A1780078012905D06C -:1082200080071AD40820A2E74846A0E7C007F9D083 -:1082300002208DF83C00A8684FF00009A0B1697CCD -:108240004288714391420FD98AB2B3B2011D08F03E -:108250005EFA8046A0F800A006E003208DF83C00FE -:10826000D5F800804FF001099DF8280010F0380F74 -:1082700000D1FFDF9DF828001D49C0F3C20008446B -:1082800097F8231010F8010C884201D90F206EE7EF -:108290002088ADF8400014A90095CDE9019143462E -:1082A00007220FA95846FEF757FE002885D19DF8F2 -:1082B000500050B9A078012807D1687CB3B2704350 -:1082C00082B2A868011D08F036FA00204FE770B5A9 -:1082D000064615460C460846FEF7FAFB002809D16B -:1082E0002A4621463046BDE870406FE41403002062 -:1082F0002E20020070BD09E570B51E4614460D0023 -:1083000009D044B1616831B138B1F849C9888142B6 -:1083100003D0072070BD102070BD2068FEF7D8FB89 -:108320000028F9D1324621462846BDE87040FFF7C3 -:1083300042BA70B515460C0006D038B1EB49098930 -:10834000814203D0072070BD102070BD2068FEF769 -:10835000BFFB0028F9D129462046BDE87040D1E591 -:1083600070B5064686B00D46144610460BF09EFFCB -:10837000D0BB60680BF0C1FFB0BBA6F57F40FF38F3 -:1083800003D03046FAF7B6FE80B128466946FEF7BC -:10839000D8FC00280CD19DF810100F2008293CD2E1 -:1083A000DFE801F008060606060A0A0843F20200A2 -:1083B00006B070BD0320FBE79DF80210012908D12B -:1083C000BDF80010B1F5C05FF2D06FF4C052D142D9 -:1083D000EED09DF8061001290DD1BDF80410A1F5CD -:1083E0002851062907D200E028E0DFE801F0030366 -:1083F00004030303DCE79DF80A1001290ED1BDF840 -:108400000810B1F5245FD3D0A1F524510239CFD0A3 -:108410000129CDD0022901D1CAE7FFDF606878B910 -:10842000002305AA2946304605F094FD10B1FEF759 -:1084300090FBBDE79DF81400800601D41020B7E73B -:108440006188224628466368FFF7BAFDB0E72DE948 -:10845000F043814687B08846144610460BF026FF4D -:1084600018B1102007B0BDE8F083002306AA4146EA -:10847000484605F06FFD10B1FEF76BFBF2E79DF883 -:108480001800C00602D543F20140EBE7002507279C -:1084900005A8019500970295CDE9035062884FF633 -:1084A000FF734146484605F0D3FC060013D16068CF -:1084B0000BF0FCFE60B960680195CDE902500097B1 -:1084C0000495238862884146484605F0C1FC06466B -:1084D000BDF8140020803046CEE739B1834B0A88BE -:1084E0009B899A4202D843F20300704719E610B5FF -:1084F00086B07E4C0423ADF81430638943B1A4895F -:108500008C4201D2914205D943F2030006B010BD5E -:108510000620FBE7ADF81010002100910191ADF8A5 -:10852000003002218DF8021005A9029104A90391DF -:10853000ADF812206946FFF7F4FDE7E72DE9FC47A7 -:1085400081460E4608460BF08BFE88BB4846FAF77C -:10855000D1FD5FEA00080AD098F80000222829D34C -:108560000421484608F07AFA070005D103E043F2F7 -:108570000200BDE8FC87FFDF07F1140004F061FA98 -:1085800005463078012803D0022804D00720F0E700 -:10859000A8070FD502E015F0340F0BD0B079341DC9 -:1085A000C00709D0E08838B1A0680BF059FE18B1B7 -:1085B0001020DEE70820DCE732782088002628B388 -:1085C000A0F201130721112B18D20CD2DFE803F01F -:1085D0000B090D0B1D0B121D100B0B1D1D1D1D0B73 -:1085E0001D00022A11D10846C3E7012AFBD00CE086 -:1085F000EA0600E0AA06002AF5DA06E0A0F5C07255 -:108600001F2A02D97D3A022AEDD8C6B200F0CDFE6B -:1086100050B198F82300CDE90006FA89234639467F -:108620004846FEF7E3FCA4E71120A2E72DE9F04F4E -:108630008BB01F4615460C4683460026FAF75AFDB6 -:1086400028B10078222805D208200BB090E543F22B -:108650000200FAE7B80801D00720F6E7032F00D19F -:1086600000274FF6FF79CCB1022D72D320460BF0D4 -:1086700044FE30B904EB0508A8F101000BF03DFE03 -:1086800008B11020E1E7AD1EAAB22146484605F028 -:108690005AFD38F8021C88425BD1ADB21349B807C5 -:1086A00002D58889401C00E001201FFA80F8F807F5 -:1086B00001D08F8900E04F4605AA4146584605F093 -:1086C00014FB4FF0070A4FF00009D4B3204608E02E -:1086D000408810283DD8361D304486B2AE4238D28C -:1086E000A01902884245F3D353E000001403002090 -:1086F0009DF8170002074CD594B304EB0608361D0D -:10870000B8F80230B6B2102B23D89A19AA4220D852 -:10871000B8F8002091421CD1C0061CD5CDE900A9B3 -:108720000DF1080C0AAAA11948468CE80700B8F810 -:1087300000100022584605F061F920B1FEF709FA51 -:1087400083E726E005E0B8F80200BDF8281088426B -:1087500001D00B2079E7B8F80200304486B207E078 -:10876000FFE7C00604D55846FEF772FC002889D101 -:108770009DF81700BDF81A1020F010008DF81700B2 -:10878000BDF81700ADF80000FF235846009A05F029 -:108790000DFC05A805F0B5FA18B9BDF81A10B942D4 -:1087A000A6D90421584608F059F9040000D1FFDF8A -:1087B000A2895AB1CDE900A94D4600232146584669 -:1087C000FEF714FC0028BBD1A5813EE700203CE762 -:1087D0002DE9FF4F8BB01E4617000D464FF00004E9 -:1087E00012D0B00802D007200FB0C1E4032E00D190 -:1087F00000265DB108460BF077FD28B93888691E60 -:1088000008440BF071FD08B11020EDE7C64AB0072F -:1088100001D5D18900E00121F0074FF6FF7802D0A1 -:10882000D089401E00E0404686B206AA0B9805F0AB -:108830005CFA4FF000094FF0070B0DF1140A38E015 -:108840009DF81B00000734D5CDF80490CDF800B09A -:10885000CDF80890CDE9039A434600220B9805F025 -:10886000F7FA60BB05B3BDF814103A882144281903 -:10887000091D8A4230D3BDF81E2020F8022BBDF816 -:10888000142020F8022BCDE900B9CDE90290CDF8F3 -:1088900010A0BDF81E10BDF8143000220B9805F092 -:1088A000D7FA08B103209FE7BDF814002044001D4B -:1088B00084B206A805F025FA20B1822806D0FEF77A -:1088C00048F991E7BDF81E10B142B9D934B17DB174 -:1088D0003888A11C884203D20C2085E7052083E755 -:1088E00022462946404605F02EFC01462819018003 -:1088F000A41C3C80002077E710B504460BF0D6FCA2 -:1089000008B1102010BD8848C0892080002010BD0B -:10891000F0B58BB00D460646142103A819F085F971 -:1089200001208DF80C008DF8100000208DF811004A -:10893000ADF814503046FAF7DDFB48B10078222834 -:1089400012D30421304608F089F8040005D103E071 -:1089500043F202000BB0F0BDFFDF04F11400074644 -:1089600004F06FF8400601D40820F3E7207C0221D0 -:1089700040F00100207409A80094CDE901100722FD -:1089800003A930466368FEF7E7FA20B1217C21F0A5 -:1089900001012174DEE729463046F9F708FD08A9F0 -:1089A000384604F03DF800B1FFDFBDF82040172C39 -:1089B00001D2172000E02046A84201D92C4602E04F -:1089C000172C00D2172421463046FFF722FB214600 -:1089D0003046F9F708FA0020BCE7F8B51C46154602 -:1089E0000E46069F08F044F92346FF1DBCB23146EF -:1089F0002A46009407F0DBFCF8BD70B50C4605462E -:108A00000E21204619F0EFF8002020802DB1012D15 -:108A100001D0FFDF70BD062000E00520A07170BD11 -:108A200010B548800878134620F00F00001D20F094 -:108A3000F00080300C4608701422194604F108003A -:108A400019F09FF800F0B4FC3748046010BD2DE920 -:108A5000F047DFF8D890491D064621F0030117467C -:108A60000C46D9F8000007F01AFE050000D1FFDF20 -:108A70004FF000083560A5F800802146D9F80000C5 -:108A800007F00DFE050000D1FFDF7560A5F800803E -:108A90007FB104FB07F1091D0BD0D9F8000007F0E6 -:108AA000FEFD040000D1FFDFB460C4F80080BDE823 -:108AB000F087C6F80880FAE72DE9F0411746491D0E -:108AC00021F00302194D064601681446286807F094 -:108AD00011FE22467168286807F00CFE3FB104FBC6 -:108AE00007F2121D03D0B168286807F003FE0420C6 -:108AF00007F05EFF0446042007F062FF201A0128F9 -:108B000004D12868BDE8F04107F0BEBDBDE8F081A2 -:108B100010B50C4605F0B5F800B1FFDF2046BDE802 -:108B20001040FEF716B800001403002014000020C7 -:108B300010B50C460246817B808819B1518981426B -:108B400000D908462080D18800F0C5FF032800D353 -:108B50000320C1B22088BDE8104000F0B1BF10B5BD -:108B60000C460246817B808819B11189814200D967 -:108B700008462080D18800F0AEFF022800D30220F2 -:108B8000C1B2208800F09CFF401CC0B210BD2DE98E -:108B9000F04F0C00F84999B08146D1E90201CDE9C6 -:108BA0000C0109F10300F54E20F003010091357E20 -:108BB00005F1010504D1E8B209F054FB00B1FFDF73 -:108BC00000984FF0000B00EB0510C01C20F00301D3 -:108BD00000915CB9707A327A81F800B01044C2B268 -:108BE000B08B80B204F0D5FE00B1FFDF0098F169D0 -:108BF000084400902146684600F02CFF0098C01CF5 -:108C000020F003000090737A327AB17A04B1002028 -:108C100007F016FE0099084400902146684600F0CF -:108C20006EFF00273D46B24696F801800CE02846CC -:108C300000F0F3FE064681788088F9F76EF97178C6 -:108C40006D1C00FB0177EDB24545F0D10098C01CCA -:108C500020F00300009004B100203946F9F768F9CC -:108C600000990027084400903D469AF801800CE0E6 -:108C7000284600F0D2FE0646C1788088FEF773FCD5 -:108C800071786D1C00FB0177EDB24545F0D100987D -:108C9000C01C20F00300009004B100203946FEF70C -:108CA0006BFC00994FF000080844009045469AF884 -:108CB00001700EE0284600F0B0FE0646807B30B121 -:108CC00006F1080001F0F9FE727800FB02886D1CC5 -:108CD000EDB2BD42EED10098C01C20F00300009020 -:108CE00004B10020414601F0ECFE00990844C01D8B -:108CF00020F007000090E4BBA24AA1491160111DB9 -:108D0000401E086001222C219F4807F062FCFAF700 -:108D10002EF99E484178806805F09CFB42208DF832 -:108D200004009A480C30C0788DF8060010B1012874 -:108D300004D005E001208DF8060001E08DF806B0B2 -:108D400001A806F0C5FE10B10EA805F042FC0021F6 -:108D50001E22084603F03CF8FBF778F987480CAA76 -:108D600000210C30F8F706FB00B1FFDF9AF819007C -:108D700000E015E0FEF769FF00B1FFDF7F484FF428 -:108D8000F671443018F051FF7C480421443080F8DB -:108D9000E91180F8EA11062180F8EB110321017135 -:108DA000009919B0A1EB0900BDE8F08F70B5734CC4 -:108DB00006464434207804EB4015E078083590B935 -:108DC000A01990F8E80100280ED0A0780F2800D351 -:108DD000FFDF2021284618F028FF687866F302009C -:108DE00068700120E070284670BD2DE9F04105460D -:108DF0000C4600270078052190463E46B1EB101F37 -:108E000000D0FFDF287A58B101280FD0FFDF00BF64 -:108E1000A8F800600CB1278066800020BDE8F081D2 -:108E20000127092674B16888A08008E0022714266B -:108E300044B16888A0802869E060A88A2082287BE5 -:108E40002072E5E7A8F80060E7E710B54F4C6068CE -:108E5000C11D21F00701814200D0FFDF47480121F9 -:108E60000022017042700172032343728172027307 -:108E7000052282821F22C282417345A202610A2218 -:108E8000027641764FF4B061C1616168416010BD06 -:108E900030B53E4C1568636810339D4202D2042001 -:108EA000136030BD354B5D785A6802EB05121070C7 -:108EB00051700320D080172090800120D0709070D6 -:108EC000002090735878401C5870606810306060C3 -:108ED000002030BD70B5064628480024457807E0DC -:108EE000204600F09AFD0178B14204D0641CE4B23F -:108EF000AC42F5D1002070BDF7B5064608780C46A7 -:108F000008B3FFF7E7FF0546202E08D0232E17D021 -:108F1000212E41D0222E3FD0242E2BD114E000F060 -:108F200087FD0DB1697800E00021401A81B2A07878 -:108F30000144FF291ED830B1A08802282CD219E0A4 -:108F40006088172828D215E0227A2AB36188172969 -:108F500010D3A08817280DD3A3795BB1E3794BB167 -:108F6000402A07D84FF6FB72914201D8904213D99C -:108F70000420FEBD0720FEBD342002003004002086 -:108F80000000002000060240600600201C000020B7 -:108F90006E5246357800000065B9207802AA01219A -:108FA000FFF776FF0028E6D12078FFF793FF050052 -:108FB00000D1FFDF203E052E18D2DFE806F0030BBC -:108FC0000E081100A0786870A088E8800FE0608823 -:108FD000A8800CE0A078A87009E0A078E87006E00E -:108FE00054F8020FA8606068E86000E0FFDF00202E -:108FF000C1E700B597B053218DF8001000780BA998 -:1090000000F001008DF80200684605F023F817B063 -:1090100000BD00B5017897B001F001018DF8021094 -:10902000417801F001018DF803100178C1F340018E -:109030008DF804104178C1F340018DF805100178D6 -:1090400089088DF80610417889088DF80710817815 -:109050008DF80810C1788DF8091000798DF80A0094 -:109060004D208DF800000BA9684604F0F3FFCEE711 -:109070002DE9F04FDFF8F883FE4C97B000271BE096 -:10908000012000F07FFD0120FFF790FE0546FA4821 -:1090900007F0C8FA686000B9FFDF686805F027F8D4 -:1090A000A0B12846FAF7CEFA284600F071FD18B9AB -:1090B000F148696807F0BFFA94F9E9010428DFDA9A -:1090C000022007F075FC06460025AAE0EA48696818 -:1090D00007F0B1FAF4E7B8F802104046491C89B22B -:1090E000A8F80210B14201D3002141800221B8F852 -:1090F000020007F0B3FC00286BD0B8F8020054213E -:109100008DF80010ADF802000BA9684604F0A2FF2C -:1091100000B1FFDF9DF8300010F0010F0FD0B8F85C -:10912000020007F0B7FD5FEA000900D1FFDF484603 -:1091300006F0A3FF18B1B8F8020002F065F9B8F81C -:10914000020007F095FD5FEA000900D1FFDF484605 -:1091500006F08CFFE8BB0321B8F8020007F07EFCA4 -:109160005FEA000B48D1FFDF46E000BFDBF81000EC -:1091700010B10078FF2849D0022000F003FD022042 -:10918000FFF714FE8246484607F0A2F8CAF804002A -:1091900000B9FFDFDAF8040007F07CF90021009045 -:1091A0000170B8F802105046AAF8021001F032FE21 -:1091B000484607F071F900B9FFDF504600F0E8FCBF -:1091C00018B99AF80100000704D50098CBF81000F0 -:1091D00012E024E0DBF8100038B10178491C11F0EE -:1091E000FF01017008D1FFDF06E00022114648466A -:1091F00000F011FC00B9FFDF94F9EA01022805DB59 -:10920000B8F8020001F0CAFD0028AFD194F9E901D5 -:10921000042804DB484607F0B5F900B101276D1CAE -:10922000EDB2B54204D294F9EA010228BFF653AF79 -:10923000002F7FF423AF17B00320BDE8F04F00F0FC -:10924000A1BC10B58A4CA0600868E060AFF2DF10E6 -:1092500002F031FD607010BD864800214438017075 -:109260008348017085494160704730B505464FF02D -:1092700080500C46D0F8A41097B0491C05D1D0F806 -:10928000A810C9430904090C08D050F8A01F01F028 -:10929000010129704168216080680EE02B208DF863 -:1092A00000000BA9684604F0D5FE00B1FFDF0120E5 -:1092B00028700C982060BDF83400A0802878002821 -:1092C00003D0607940F0C000607117B030BDF0B5D8 -:1092D0004FF080540746D4F8800097B00D462B26F7 -:1092E000401C0BD1D4F88400401C07D1D4F888006E -:1092F000401C03D1D4F88C00401C0BD0D4F8800063 -:109300003860D4F884007860D4F88800B860D4F865 -:109310008C0016E08DF82C6069460BA804F09AFECC -:1093200000B1FFDF01983860029878608DF82C60FA -:1093300069460BA804F08EFE00B1FFDF0198B8600B -:109340000298F860D4F89000401C0BD1D4F8940037 -:10935000401C07D1D4F89800401C03D1D4F89C00DD -:10936000401C08D054F8900F286060686860A068BE -:10937000A860E06816E08DF800600BA9684604F06C -:1093800069FE00B1FFDF0C9828600D9868608DF8C9 -:1093900000600BA9684604F05DFE00B1FFDF0C9889 -:1093A000A8600D98E86017B0F0BD32480079FDE480 -:1093B00070B5304CE07830B3207804EB4010407A40 -:1093C00000F00700204490F9E801002800DCFFDFEE -:1093D0002078002504EB4010407A00F007000119C6 -:1093E00091F8E801401E81F8E8012078401CC0B2E5 -:1093F00020700F2800D12570A078401CA0700AF0C2 -:109400001BFBE57070BDFFDF70BD3EB50546032157 -:1094100007F024FB0446284607F02AFC054604B959 -:10942000FFDF206918B10078FF2800D1FFDF01AA13 -:109430006946284600F0EFFA60B9FFDF0AE0002233 -:1094400002A9284600F0E7FA00B9FFDF9DF80800FE -:1094500000B1FFDF9DF80000411E8DF80010EED234 -:1094600020690199884201D1002020613EBD0000A1 -:109470001C000020740400206006002068130020F7 -:1094800070B50546A0F57F400C46FF3800D1FFDFE0 -:10949000012C01D0FFDF70BDFFF787FF040000D172 -:1094A000FFDF207820F00F00401D20F0F00050304A -:1094B000207065800020207201202073BDE870407C -:1094C00076E72DE9F04116460D460746FFF76DFF9A -:1094D000040000D1FFDF207820F00F00401D20F0B5 -:1094E000F0005030207067800120207228682061D1 -:1094F000A888A0822673BDE8F04159E730B599B03D -:10950000FFF7E8FC040000D1FFDF0CA92046FFF7BD -:109510000FFB05460BA92046FFF721FB0146522011 -:109520008DF80000BDF830008DF80250001DADF838 -:109530000400BDF82C008DF80310001DADF80600E6 -:10954000E088ADF808000DA9684604F083FD002806 -:1095500000D0FFDF19B030BD2DE9F047DFF80094EF -:109560000546002799F8000010B10820BDE8F087F3 -:1095700028460AF09BFE08B11020F7E7F94C207846 -:1095800008B9FFF762FC607A217A0844C6B200F09D -:109590004FFAB04207D2301AC1B22A460020FFF774 -:1095A00077FC0700E2D1D9F804004E46C01C20F039 -:1095B0000300C9F8040000F05EFB716800EB0108CD -:1095C00001214046FFF7E3FA0646296840448842F5 -:1095D00002D8B6F5803F15D328600020FFF77AFC4B -:1095E00005000DD005F11300D9F8041020F0030098 -:1095F0004E46884200D0FFDF6078401E6070756084 -:109600000420B3E700214046FFF7C1FA0446A64212 -:1096100000D0FFDF04EB0801C9F8041029604FF601 -:10962000FF71A9F80210012189F8001038469DE762 -:109630002DE9F0410446CA4817460D46007810B19E -:109640000820BDE8F08108460AF00AFE08B11020A3 -:10965000F7E7C44E307808B9FFF7F7FB601E1E2805 -:1096600007D8012C3FD12878FE283CD8307600203E -:10967000E7E7A4F120001F2805D8E0B23A462946C2 -:10968000BDE8F04138E4A4F140004FF000081F2885 -:1096900021D8402C02D0412C25D117E068782978B8 -:1096A0004418A97881421ED8FF2C08D808F0BEFFC4 -:1096B00007460AF07BF9381A801EA04201DA122010 -:1096C000BFE728883081A878B07224E02846BDE83A -:1096D000F04100F085BAA4F1A0001F2803D8A02C07 -:1096E00003D0A12C06D00720ABE7287800F00100BA -:1096F000707610E029680920F829A2D38A07A0D142 -:10970000727B02F00302012A04D1F28AD73293B2AB -:109710008B4296D8F161404693E72DE9F0478146A8 -:109720000E4608460AF0C2FD48B948460AF0DCFD7C -:1097300028B909F1030020F00301494501D01020A8 -:1097400014E788484FF0000A4430817869B14178C5 -:10975000804600EB41140834378832460021204609 -:1097600000F024FA050004D027E0A6F800A00520A8 -:10977000FCE6B9F1000F24D03088B84201D90C259D -:109780001FE0607800F00705284600F0FBF908EBC1 -:109790000507324697F8E8014946401C87F8E8017A -:1097A000204607F5F47700F001FA05463878401EA8 -:1097B0003870032000F0E6F92DB10C2D01D0A6F889 -:1097C00000A02846D2E66078654F00F00701012925 -:1097D00023D002290CD0032932D0FFDF98F80110E2 -:1097E0004046491CC9B288F801100F2933D034E033 -:1097F000616821B1000702D46088FFF706FE98F87F -:10980000EA014646012802D1787802F073FA96F907 -:10981000EA010428E2DBFFDFE0E7616811B15248AA -:1098200006F009FF98F8E9014646032802D1787846 -:1098300002F060FA96F9E9010428CFDBFFDFCDE7FB -:10984000C00602D56088FFF7E0FD98F9EB01062815 -:10985000C4DBFFDFC2E780F801A08178491E817078 -:10986000617801F0070101EB080090F8E811491C4C -:1098700080F8E811A5E770B50D4604460AF0F0FC43 -:1098800018B928460AF012FD08B1102070BD29460B -:109890002046BDE8704008F01CBD70B50446154672 -:1098A0000E4608460AF0DCFC18B928460AF0FEFC11 -:1098B00008B1102070BD022C03D0102C01D009205B -:1098C00070BD2A463146204608F026FD0028F7D014 -:1098D000052070BD70B514460D4606460AF0C0FC62 -:1098E00038B928460AF0E2FC18B920460AF0FCFC18 -:1098F00008B1102070BD22462946304608F02BFDE5 -:109900000028F7D0072070BD10B596B004460AF0C5 -:10991000CDFC10B1102016B010BD0F208DF8000046 -:109920000BA9684604F096FB0028F4D19DF834009A -:109930002070BDF836006080BDF83800A08000209F -:10994000E9E770B505460C4608460AF0CDFC20B99B -:1099500074B120680AF0AAFC40B1102070BD00006C -:109960001C0000203004002060060020A08828B1E0 -:1099700021462846BDE87040FDF774BE0920EDE79A -:1099800070B504460D4608460AF06AFC30B9601E00 -:109990001E2814D828460AF063FC08B11020DDE721 -:1099A000022C01D90720D9E704B9FFDFE64800EB14 -:1099B000840050F8041C2846BDE870400847A4F114 -:1099C00020001F28EED829462046BDE87040FAF74F -:1099D0007FBA70B504460D4608460AF067FC30B9F8 -:1099E000601E1E280DD828460AF03AFC08B1102047 -:1099F000B4E7012C01D0022C01D10620AEE70720EC -:109A0000ACE7A4F120001F28F9D829462046BDE87C -:109A10007040FAF7E1BA06F0E4BA30B5CB4D04462F -:109A20006878A04200D8FFDF686800EB041030BD02 -:109A300070B5C64800252C46467807E02046FFF75B -:109A4000ECFF4078641C2844C5B2E4B2B442F5D1BE -:109A5000284683E72DE9F0410C46064600F043F91D -:109A600007463068C01C20F0030232601CBBB748B8 -:109A70003B46092120300AF0CDFA002408E0092CE9 -:109A800011D2DFE804F005070509090B05050700F9 -:109A9000AF4804E0AF4802E0AF4800E0AF480AF04A -:109AA000D9FA054600E0FFDFA54200D0FFDF641CC5 -:109AB000E4B2092CE3D3306800EB07103060C0E556 -:109AC000021D5143452900D245210844C01CB0FB6A -:109AD000F2F0C0B2704700B597B055228DF8002063 -:109AE000001DADF80200ADF804100BA9684604F0A3 -:109AF000B1FA00B1FFDFBDF8300017B000BD2DE9AD -:109B0000FC5F064691484FF000088B4647464446A6 -:109B100090F8019022E02046FFF77FFF050000D17A -:109B2000FFDF687869463844C7B22846FFF700F877 -:109B3000824601A92846FFF712F80346BDF8040043 -:109B40005246001D81B2BDF80000001D80B206F033 -:109B5000DBFF6A78641C00FB0288E4B24C45DAD172 -:109B60003068C01C20F003003060BBF1000F00D053 -:109B700000204246394606F0D5FF3168084430607F -:109B8000BDE8FC9F7149443108710020C8707047DE -:109B90006E494431CA782AB10A7801EB4211083182 -:109BA000814201D001207047002070472DE9F0412B -:109BB00006460078154600F00F0400201080601E55 -:109BC0000F46052800D3FFDF5F482A46103000EB20 -:109BD0008400394650F8043C3046BDE8F04118474F -:109BE00038B50446407800F00300012803D002286D -:109BF0000BD0072038BD606858B10AF07EFBD0B9A1 -:109C000060680AF071FB20B915E060680AF028FB73 -:109C100088B969462046FCF7A9F90028EAD160789E -:109C200000F00300022808D19DF8000028B1606808 -:109C30000AF05AFB08B1102038BD6189F8290DD807 -:109C4000208988420AD8607800F003023F48012A40 -:109C500006D1D731C26989B28A4201D2092038BD02 -:109C600094E80E0000F10C0585E80E000AB9002109 -:109C70008182002038BD2DE9F05F4FF000093348A4 -:109C8000C8464F464E464D46CB464C4690F801A03E -:109C900011E02046FFF7C1FE4178827809F1010901 -:109CA000884412FB0177C27812FB0166807B10FBAF -:109CB0000155641CE4B25445EBD10BEB890000EB79 -:109CC000C80000EB870000EB860000EBC5011F48D1 -:109CD000027A01EBC201427A807A01EBC20101EB08 -:109CE000C000BDE8F09F2DE9F047DFF86090002547 -:109CF0002C4699F8092099F8081099F801700A443F -:109D0000D6B299F80A20114401F0FF0808E0204675 -:109D1000FFF783FE817B407811FB0055641CE4B2A1 -:109D2000BC42F4D199F80800401C3044304440440F -:109D3000401C0EB1012100E0002108444419FF2C11 -:109D400000D9FFDFE0B211E434200200300400202B -:109D5000633D00008DAB0000592F00003120010051 -:109D60002DE9F041074614468846084601F02EFDCD -:109D7000064608EB88001C22796802EBC0000D182B -:109D8000688C58B14146384601F028FD0146786894 -:109D90000078C200082305F120000CE0E88CA8B18F -:109DA0004146384601F021FD014678680823407895 -:109DB000C20005F1240006F0F4FC38B1062121723E -:109DC0006681D0E90010C4E9031009E02878092869 -:109DD0000BD00520207266816868E0600020287042 -:109DE0002046BDE8F04101F0E7BC07202072668103 -:109DF000F4E72DE9F04116460D460746406801EBB1 -:109E000085011C2202EBC1014418204601F00FFD20 -:109E100040B10021708865F30F2160F31F410820D5 -:109E20000AF0D2F909202070324629463846BDE8AA -:109E3000F04195E72DE9F0410E46074600241C212C -:109E4000F07816E004EB8403726801EBC303D25C84 -:109E50006AB1FFF7AAFA050000D1FFDF6F802A463A -:109E600021463046FFF7C5FF0120BDE8F081641CA4 -:109E7000E4B2A042E6D80020F7E770B50646002419 -:109E80001C21C0780AE000BF04EB8403726801EB78 -:109E9000C303D5182A782AB1641CE4B2A042F3D8CF -:109EA000402070BD2821284617F09DFE70688089EB -:109EB0002881204670BD70B5034600201C25DC7843 -:109EC0000DE000BF00EB80065A6805EBC606324481 -:109ED000167816B1128A8A4204D0401CC0B284425D -:109EE000F0D8402070BDF0B5044600201C26E5786F -:109EF0000EE000BF00EB8007636806EBC7073B443A -:109F00001F788F4202D15B78934204D0401CC0B2CC -:109F10008542EFD84020F0BD0078032801D0002012 -:109F20007047012070470078022801D00020704758 -:109F3000012070470078072801D0002070470120D9 -:109F400070472DE9F041064688461078F1781546AD -:109F5000884200D3FFDF2C781C27641CF078E4B221 -:109F6000A04201D8201AC4B204EB8401706807EB48 -:109F7000C1010844017821B14146884708B12C70DD -:109F800073E72878A042E8D1402028706DE770B5CB -:109F900014460B880122A240134207D113430B80C1 -:109FA00001230A22011D06F0C6FB047070BD2DE9D5 -:109FB000FF4F81B00878DDE90E7B9A4691460E4648 -:109FC00040072CD4019806F065FE040000D1FFDFA5 -:109FD00007F1040820461FFA88F105F0A9FE0500E4 -:109FE00000D1FFDF204629466A4606F092F9009824 -:109FF000A0F80370A0F805A0284606F04BFA0178F7 -:10A0000069F306016BF3C711017020461FFA88F14E -:10A0100005F0DEFE00B9FFDF019804F07CF906EBE5 -:10A020000900017F491C017705B0BDE8F08F2DE9DB -:10A03000F84F0E469A4691460746032106F00EFD5C -:10A040000446008DDFF8B085002518B198F80000AF -:10A05000B0421ED1384606F01DFE070000D1FFDFDA -:10A0600009F10401384689B205F062FE050010D0FE -:10A07000384629466A4606F04CF9009800210A46FF -:10A080000180817004F00AFA0098C01DCAF800002F -:10A0900021E098F80000B04216D104F1260734F808 -:10A0A000341F012000FA06F911EA090F00D0FFDF82 -:10A0B0002088012340EA090020800A22391D384601 -:10A0C00006F054FB067006E0324604F1340104F158 -:10A0D0002600FFF75CFF0A2188F800102846BDE83B -:10A0E000F88FFEB514460D46064602AB0C2206213B -:10A0F000FFF79DFF002826D00299687812220A7087 -:10A10000801C487008224A80A87020888880608857 -:10A11000C880A0880881E088488100240C20CDE90F -:10A1200000040523062229463046FFF740FF21465A -:10A1300066F31F41F0230022012009F09BFF68789D -:10A14000801C68700120FEBDFEB514460D46062237 -:10A15000064602AB1146FFF76AFF002812D0029BA9 -:10A16000132000211870A8785870022058809C8015 -:10A170000620CDE900010246052329463046FFF7B7 -:10A1800016FF0120FEBD2DE9FE430C46804644E04B -:10A1900002AB0E2207214046FFF749FF002841D0BD -:10A1A00060681C2267788678BF1C06EB860102EB8C -:10A1B000C101451802981421017047700A2141809D -:10A1C000698A0181E98A4181A9888180A98981817F -:10A1D000304601F0FBFA029905230722C8806F7010 -:10A1E0000420287000250E20CDE9000521464046B8 -:10A1F000FFF7DDFE294666F30F2168F31F41F023C8 -:10A200000022082009F036FF6078FC49801C60704D -:10A2100062682046921CFFF794FE606880784028B0 -:10A22000B6D10120BDE8FE83FEB50D46064638E0F6 -:10A2300002AB0E2207213046FFF7F9FE002835D089 -:10A2400068681C23C17801EB810203EBC202841809 -:10A25000029815220270627842700A224280A28916 -:10A260004281A2888281084601F0B0FA0146029834 -:10A270008180618AC180E18A0181A088B8B1002013 -:10A28000207000210E20CDE9000105230722294678 -:10A290003046FFF78CFE6A68D9492846D21CFFF782 -:10A2A00050FE6868C0784028C2D10120FEBD06205B -:10A2B000E6E72DE9FE430C46814644E0204601F0E6 -:10A2C000A0FAD0B302AB082207214846FFF7AFFE41 -:10A2D0000028A7D060681C2265780679AD1C06EBC3 -:10A2E000860102EBC10147180298B7F810800621D9 -:10A2F0000170457004214180304601F067FA014643 -:10A30000029805230722C180A0F804807D700820F0 -:10A3100038700025CDE9000521464846FFF747FE85 -:10A32000294666F30F2169F31F41F023002208201C -:10A3300009F0A0FE6078801C60706268B149204618 -:10A34000121DFFF7FEFD606801794029B6D101209A -:10A3500068E72DE9F34F83B00E4680E0304601F008 -:10A3600050FA002875D071681C2091F8068008EB1F -:10A37000880200EBC2000C184146304601F035FA65 -:10A380000146A078C30070684078C20004F1240040 -:10A3900006F023FA07468088E18B401A80B2002538 -:10A3A00081B3AA46218B814200D8084681460246E5 -:10A3B00002AB07210398FFF73AFE010028D0BAF15B -:10A3C000000F03D0029AB888022510808B46E28BDA -:10A3D0003968A9EB05001FFA80FA0A440398009235 -:10A3E00006F058FCED1D009A59465346009506F0BC -:10A3F00017F8E08B504480B2E083B988884209D1D5 -:10A40000012508E0FFE7801C4FF0010A80B2C9E790 -:10A41000002009E60025CDE90095238A0722314670 -:10A420000398FFF7C4FDE089401EE0818DB1A0785C -:10A43000401CA0707068F178427811FB02F1CAB23A -:10A44000816901230E3006F076F980F80080002043 -:10A45000E08372686C493046921DFFF772FD7068A8 -:10A46000817940297FF47AAF0120DDE570B5064699 -:10A4700048680D4614468179402910D104EB8401C7 -:10A480001C2202EBC101084401F0F2F9002806D0B9 -:10A490006868294684713046BDE8704059E770BD50 -:10A4A000FEB50C460746002645E0204601F0A9F916 -:10A4B000D8B360681C22417901EB810102EBC10134 -:10A4C0004518688900B9FFDF02AB0822072138462A -:10A4D000FFF7ADFD002833D00299607816220A708C -:10A4E000801C4870042048806068407901F06EF953 -:10A4F000014602980523072281806989C1800820CE -:10A50000CDE9000621463846FFF751FD6078801CF2 -:10A510006070A88969890844B0F5803F00D3FFDFE7 -:10A52000A88969890844A8816E81626837492046F4 -:10A53000521DFFF706FD606841794029B5D1012021 -:10A54000FEBD30B5438C458BC3F3C704002345B132 -:10A55000838B641EED1AC38A6D1E1D4495FBF3F3B5 -:10A56000E4B22CB1008918B1A04200D820460344BF -:10A570004FF6FF70834200D3034613800C7030BD4A -:10A580002DE9FC41074616460D46486802EB860158 -:10A590001C2202EBC101441801AA69462046FFF7BC -:10A5A000D0FFA1896389BDF80420C81880B2824217 -:10A5B0001FD001280AD99DF800C0BCF1000F03D0BC -:10A5C000B4F808C0844501D8002B12D0501A00D529 -:10A5D000002060816868407940280AD1204601F057 -:10A5E0003DF9002805D06868294646713846FFF7CE -:10A5F00057FFBDE8FC8100002C000020199F0000DF -:10A60000279F0000359F000071B800005DB8000072 -:10A610002DE9FE4F8946804615465088032106F0F5 -:10A620001DFA8346B8F80200402801D2402000E01D -:10A63000403880B282460146584601F0E2F80028D0 -:10A640007ED00AEB8A001C22DBF8041002EBC0006B -:10A650000C18204601F0EBF8002877D1B8F800007C -:10A66000E18A88423CD8A189D1B348456ED1002601 -:10A670005146584601F0B2F8218C0F18608B48B94A -:10A68000B9F1020F62D3B8F804006083618A88428E -:10A6900026D80226A9EB06001FFA80F9B888A28BFB -:10A6A000801A002814DD4946814500DA084683B245 -:10A6B00068886968029139680A44CDE9003206F079 -:10A6C000D7FADDE90121F61D009B009605F06FFE2B -:10A6D000A18B01EB090080B2A083618B884207D96E -:10A6E000688803B052465946BDE8F04F01F0DDB826 -:10A6F0001FD14FF009002872B8F802006881D7E92D -:10A700000001C5E90401608BA881284601F054F8D6 -:10A710005146584601F062F80146DBF80400082370 -:10A720000078C20004F1200006F03BF80020A0836E -:10A730006083A0890AF0FF02401EA081688800E0C3 -:10A7400004E003B05946BDE8F04F19E7BDE8FE8FBD -:10A750002DE9F041064615460F461C46184609F0FD -:10A760007FFD18B9206809F0A1FD08B1102007E4A9 -:10A770007168688C0978B0EBC10F01D3132005E430 -:10A780003946304601F02AF80146706808230078FF -:10A79000C20005F1200005F0CEFFD4E90012C0E9A7 -:10A7A00000120020E3E710B50446032106F056F935 -:10A7B0000146007800F00300012804D08A8A204670 -:10A7C000BDE81040C0E42046BDE8104001F114028D -:10A7D00087E470B50446032106F040F905460146BA -:10A7E0002046FFF766FD002816D029462046FFF7D1 -:10A7F00057FE002810D029462046FFF715FD0028F7 -:10A800000AD029462046FFF7BEFC002804D029467E -:10A810002046BDE870409CE570BD2DE9F0410C4636 -:10A8200080461EE0E178427811FB02F1CAB28169EC -:10A8300001230E3005F0B5FF077860681C22C1794E -:10A84000491EC17107EB8701606802EBC101461820 -:10A850003946204600F0D5FF18B1304600F0E0FF41 -:10A8600020B16068C1790029DCD180E7FEF79DFD49 -:10A87000050000D1FFDF0A202872384600F0A6FF4D -:10A8800068813946204600F0B0FF01466068082321 -:10A890004078C20006F1240005F083FFD0E90010E3 -:10A8A000C5E90310A5F80280284600F085FFB078BE -:10A8B00000B9FFDFB078401EB07058E770B50C46A5 -:10A8C0000546032106F0CAF801464068C2792244D1 -:10A8D000C2712846BDE870409FE72DE9FE4F8246D1 -:10A8E000507814460F464FF0000800284FD001283A -:10A8F00007D0022822D0FFDF2068B8606068F860C7 -:10A9000024E702AB0E2208215046FFF790FB0028F7 -:10A91000F2D00298152105230170217841700A2197 -:10A920004180C0F80480C0F80880A0F80C806288DC -:10A9300082810E20CDE90008082221E0A678304669 -:10A9400000F044FF054606EB86012C22786802EBF6 -:10A95000C1010822465A02AB11465046FFF767FB79 -:10A960000028C9D002980721017021784170042184 -:10A97000418008218580C680CDE9001805230A465C -:10A9800039465046FFF713FB87F80880DEE6A678C5 -:10A99000022516B1022E13D0FFDF2A1D914602AB0D -:10A9A00008215046FFF743FB0028A5D0029801215B -:10A9B000022E0170217841704580868002D005E02A -:10A9C0000625EAE7A188C180E1880181CDE90098E8 -:10A9D0000523082239465046D4E710B50446032122 -:10A9E00006F03CF8014600F108022046BDE81040A0 -:10A9F00073E72DE9F05F0C4601281DD0957992F898 -:10AA00000480567905EB85011F2202EBC10121F07C -:10AA1000030B08EB060111FB05F14FF6FF7202EA8A -:10AA2000C10909F1030115FB0611F94F21F0031AC1 -:10AA300040B101283DD124E06168E57891F80080BB -:10AA40004E78DFE75946786805F029FE606000B966 -:10AA5000FFDF5946606817F0E8F8E57051467868FE -:10AA600005F01DFE6168486100B9FFDF606842695A -:10AA700002EB09018161606880F8008060684670BF -:10AA800017E0606852464169786805F033FE5A461F -:10AA90006168786805F02EFE032005F089FF044602 -:10AAA000032005F08DFF201A012802D1786805F0F7 -:10AAB000EBFD0BEB0A00BDE8F09F024600210220EF -:10AAC00097E713B5009858B10024684605F0C9FD12 -:10AAD000CF490A22002C0A7001D1009A4A601CBD9D -:10AAE00001240020F2E770B50C46154638212046B7 -:10AAF00017F09BF8012666700A2104F11C0017F07C -:10AB000094F805B9FFDF297A207861F301002070FD -:10AB1000A879002817D02A4621460020FFF769FFB0 -:10AB20006168402088706168C870616808716168F8 -:10AB300048716168887161682888088161686888DF -:10AB400048816068868170BDC878002802D00022E4 -:10AB500001204EE7704770B50546002165F31F419F -:10AB6000012009F031FB0321284605F077FF04009E -:10AB700000D1FFDF21462846FFF75CF9002804D00A -:10AB8000207840F010002070012070BD2DE9FF41B9 -:10AB900080460E460F0CFEF708FC050007D06F80BC -:10ABA0000321384605F05AFF040008D106E004B03E -:10ABB0003846BDE8F0411321F9F72EBEFFDFB8F1AA -:10ABC000010F05D0B8F1080F18D0FFDFBDE8FF81F5 -:10ABD00020782A4620F0080020700020ADF80200FE -:10ABE00002208DF800004FF6FF70ADF80400ADF8BC -:10ABF000060069463846F9F717F9E7E7C6F3072173 -:10AC000001EB81021C23606803EBC202805C042814 -:10AC100003D008280AD0FFDFD8E7012000904FF4C6 -:10AC200040432A46204600F009FECFE704B02A46FA -:10AC30002046BDE8F041FFF7DCB82DE9F05F0027C2 -:10AC4000B0F80A9090460C4605463E46B9F1400FD2 -:10AC500001D2402001E0A9F140001FFA80FA287AD1 -:10AC6000C01E08286BD2DFE800F00D04192058360A -:10AC70003C4772271026002C6CD0D5E90301C4E9AB -:10AC800002015CE070271226002C63D00A2205F135 -:10AC90000C0104F1080016F074FF50E071270C2637 -:10ACA000002C57D0E868A06049E0742710269CB3B8 -:10ACB000D5E90301C4E902016888032105F0CEFE4D -:10ACC0008346FEF772FB024668885080514658461C -:10ACD000FFF746F833E075270A26ECB1A8892081F2 -:10ACE0002DE076271426BCB105F10C0004F1080311 -:10ACF00007C883E8070022E07727102664B1D5E96A -:10AD00000301C4E902016888032105F0A7FE01469A -:10AD10006888FFF782FD12E01CE073270826CCB19B -:10AD20006888032105F09AFE01460078C00606D522 -:10AD30006888FFF77FF810B96888F8F767FCA8F80B -:10AD400000602CB12780A4F8069066806888A080F7 -:10AD50000020B0E6A8F80060FAE72DE9FC410C46B7 -:10AD60001E4617468046032105F078FE05460A2C4C -:10AD70000AD2DFE804F005050505050509090907FC -:10AD8000042303E0062301E0FFDF0023CDE9007682 -:10AD9000224629464046FFF70AF92AE438B5054617 -:10ADA000A0F57F40FF3830D0284605F061FF040051 -:10ADB00000D1FFDF204605F08BFA002815D00146B0 -:10ADC0006A46204605F0A5FA00980321B0F8054030 -:10ADD000284605F043FE0546052C03D0402C05D23D -:10ADE000402404E0007A80B1002038BD403CA4B289 -:10ADF000214600F006FD40B1686804EB84013E2264 -:10AE000002EBC101405A0028EFD0012038BD0000FC -:10AE10002C0000202DE9F04F044689B0408805F051 -:10AE200027FF050000D1FFDF06AA2846616800F071 -:10AE3000C1FC069D001F81B235F8032F6B888A4242 -:10AE400005D1042B0AD0052B1DD0062B15D0224688 -:10AE50002846FFF7DDFB09B0BDE8F08F16462D1D33 -:10AE6000224629463046F7F78CFA0828F3D12246C5 -:10AE700029463046FCF73DFCEDE76088291D6368F4 -:10AE8000FAF7F0FCE7E717466088032105F0E6FDD6 -:10AE90004FF000088DF804800646ADF80680042FB8 -:10AEA000D9D36A79002AD6D028794FF6FF794FF0A6 -:10AEB0001C0A13282CD008DC012878D0062847D09B -:10AEC000072875D0122874D106E0142872D01528EE -:10AED00071D016286DD1ACE10C2F6AD1307800F01A -:10AEE0000301012965D040F0080030706879B07026 -:10AEF00001208DF804002889ADF808006889ADF8B4 -:10AF00000A00A889ADF80C00E889ADF80E0019E038 -:10AF1000B07890429FD1307801079CD5062F9AD106 -:10AF200020F0080030706088414660F31F41012026 -:10AF300009F04AF902208DF80400ADF8089028893C -:10AF4000ADF80A006088224601A9F8F76DFF82E794 -:10AF5000082F80D12F89B5F80A90402F01D24020C8 -:10AF600001E0A7F1400080B280460146304600F083 -:10AF700048FC08B3716808EB88002C2202EBC00083 -:10AF8000095A4945E3D1FE4807AAD0E90210CDE9A4 -:10AF9000071068798DF81C0008F0FF058DF81E5029 -:10AFA00060883146FFF799FC2246294639E0B6E031 -:10AFB00014E03CE039E0E6E0F148D0E90010CDE9EA -:10AFC00007106879ADF820708DF81C00ADF822905C -:10AFD000608807AA3146FFF780FC3CE7082FB6D10E -:10AFE0006889B5F80880402801D2402000E0403848 -:10AFF00087B23946304600F004FC0028A7D007EBA2 -:10B00000870271680AEBC2000844028A42459ED159 -:10B01000017808299BD140786979884297D1F9B2A3 -:10B0200022463046FEF7E5FE15E70E2F07D0CDF895 -:10B030001C80CDF8208068798DF81C00C8E76989EC -:10B04000EF898B46B5F80C903046FEF734FFABF134 -:10B050004001402901D309204AE0B9F1170F01D37B -:10B06000172F01D20B2043E040280ED000EB8002C6 -:10B0700071680AEBC20008440178012903D14078C5 -:10B0800069798842A9D00A2032E03046FEF7F5FE01 -:10B09000014640282BD001EB810372680AEBC30004 -:10B0A00002EB0008012288F800206A7988F8012064 -:10B0B00070682A894089B84200D938462D8A03230E -:10B0C0002372A282E7812082A4F80C906582084650 -:10B0D00000F07CFB6081A8F81490A8F81870A8F81C -:10B0E0000E50A8F810B0204600F066FBB3E604202E -:10B0F00005212172A4F80A80E08101212173A04971 -:10B10000D1E90421CDE9072169798DF81C10ADF84A -:10B110001E00608807AA3146FFF7DFFBE3E7062F32 -:10B12000E4D3B078904215D13078010712D520F0E1 -:10B13000080030706088414660F31F41012009F02B -:10B1400043F802208DF804002889ADF80800ADF816 -:10B150000A90F7E604213046FEF7C5FE0546402872 -:10B16000C4D002208303009022462946304600F0D6 -:10B1700065FB4146608865F30F2160F31F4108209D -:10B1800009F022F867E60E2FB0D104213046FEF711 -:10B19000AAFE81464028A9D04146608869F30F2164 -:10B1A00060F31F41082009F00FF8288A0790E8890A -:10B1B00000907068AF894089B84200D9384683460C -:10B1C000B5F80A8028890590484600F0FFFA6081AA -:10B1D000079840B10220079B00902246494630461E -:10B1E00000F02CFB37E6B8F1170F1ED3172F1CD336 -:10B1F0000420207200986082E781A4F810B0A4F8BF -:10B200000C8009EB890271680AEBC2000D180099E5 -:10B210000598A5F81480A5F818B0E9812882204681 -:10B2200000F0CAFA0620287015E601200B230090D2 -:10B23000D3E7082FA6D129893046FEF73CFE074602 -:10B2400040289FD007EB870271680AEBC2000844D0 -:10B25000804600F0ECFA002894D16D89B8F80E0011 -:10B260002844B0F5803F05D360883A46314600F067 -:10B270001CFBF0E5002D85D0A8F80E0060883A464A -:10B280003146FFF7F3F808202072384600F09EFAA6 -:10B290006081A58127E770B50D460646032105F0BC -:10B2A000DDFB040004D02078000704D5112070BD18 -:10B2B00043F2020070BD2A4621463046FEF711FFD8 -:10B2C00018B9286860616868A061207840F00800BB -:10B2D0002070002070BD70B50D460646032105F0B4 -:10B2E000BDFB040004D02078000704D4082070BD02 -:10B2F00043F2020070BD2A4621463046FEF724FF85 -:10B3000000B9A582207820F008002070002070BDD0 -:10B310002DE9F04F0E4691B08046032105F09EFBCB -:10B320000446404605F0B6FC07460020079008900A -:10B330000990ADF830000A9002900390049004B98F -:10B34000FFDF0DF1080917BBFFDF20E038460BA92E -:10B35000002204F046FE9DF82C0000F07F050A2D27 -:10B3600000D3FFDF6019017F491E01779DF82C0093 -:10B3700000060CD52A460CA907A8FEF708FE01E036 -:10B380005C20020019F80510491C09F80510761E0A -:10B39000F6B2DBD204F13400FC4D04F1260BDFF8E9 -:10B3A000F0A304F12A07069010E05846069900F031 -:10B3B0006EFA064628700A2800D3FFDF5AF82610D6 -:10B3C00040468847E08CC05DB04202D0208D002806 -:10B3D000EBD10A202870EE4D4E4628350EE00CA920 -:10B3E00007A800F054FA0446375D55F8240000B968 -:10B3F000FFDF55F82420394640469047BDF81E002F -:10B400000028ECD111B027E510B5032105F026FB8B -:10B41000040000D1FFDF0A2104F11C0016F005FC36 -:10B42000207840F00400207010BD10B50C460321B8 -:10B4300005F014FB01190A7F01211AB9808EA14081 -:10B44000084000D0012010BD2DE9F84F894615466F -:10B450008246032105F002FB070004D0284608F0CD -:10B46000FFFE40B903E043F20200BDE8F88F484612 -:10B4700008F01CFF08B11020F7E7786828B1698848 -:10B480000089814201D90920EFE7B9F800001C24A6 -:10B4900018B1402809D2402008E03846FEF7EDFCFC -:10B4A0008046402819D11320DFE7403880B280461B -:10B4B0000146384600F0A5F948B108EB88007968E4 -:10B4C00004EBC000085C012803D00820CDE705206C -:10B4D000CBE7FDF76AFF06000BD008EB8800796820 -:10B4E00004EBC0000C18B9F8000020B1E88910B1D5 -:10B4F00013E01120B9E72888172802D36888172895 -:10B5000001D20720B1E7686838B12B1D22464146B9 -:10B510003846FFF71DF90028A7D104F10C0269464F -:10B520002046FFF70EF8288860826888E082B9F824 -:10B53000000030B102202070E889A080E889A0B125 -:10B540002BE003202070A889A080786881784029AA -:10B5500005D180F8028039465046FEF714FE404679 -:10B5600000F034F9A9F8000021E07868218B4089C7 -:10B57000884200D908462083A6F802A00420307231 -:10B58000B9F800007081E0897082F181208B3082EF -:10B59000A08AB081304600F00FF97868C178402960 -:10B5A00005D180F8038039465046FEF73DFE002065 -:10B5B0005BE770B50D460646032105F04FFA04001F -:10B5C00003D0402D04D2402503E043F2020070BDB9 -:10B5D000403DADB2294600F014F958B105EB8501A4 -:10B5E0001C22606802EBC101084400F020F918B188 -:10B5F000082070BD052070BD2A462146304600F067 -:10B6000054F9002070BD2DE9F0410D4616468046E4 -:10B61000032105F023FA0446402D01D2402500E025 -:10B62000403DADB28CB1294600F0EBF880B105EB9E -:10B6300085011C22606802EBC1014718384600F002 -:10B64000F6F838B10820BDE8F08143F20200FAE7CD -:10B650000520F8E733463A4629462046FFF778F8B2 -:10B660000028F0D1EAB221464046FEF789FF0020CB -:10B67000E9E72DE9F0410D4616468046032105F025 -:10B68000EDF90446402D01D2402500E0403DAFB227 -:10B6900024B1304608F0E4FD38B902E043F202007C -:10B6A000D1E7306808F0DCFD08B11020CBE739465F -:10B6B000204600F0A6F860B107EB87011C22606805 -:10B6C00002EBC1014518284600F0B1F818B1082076 -:10B6D000B9E70520B7E7B088A98A884201D90C20CC -:10B6E000B1E76168E88C4978B0EBC10F01D3132052 -:10B6F000A9E73946204600F078F80146606808233B -:10B700004078C20005F1240005F015F8D6E90012D2 -:10B71000C0E90012FAB221464046FEF7A7FE00201B -:10B7200091E72DE9F0470D461F46904681460321DB -:10B7300005F094F90446402D01D2402001E0A5F126 -:10B74000400086B23CB14DB1384608F0CDFD50B155 -:10B750001020BDE8F08743F20200FAE76068C8B144 -:10B76000A0F80C8024E03146204600F04AF888B169 -:10B7700006EB86011C22606802EBC10145182846D1 -:10B7800000F055F840B10820E3E700002C0000204D -:10B79000742002000520DCE7A5F80880F2B22146FB -:10B7A0004846FEF7EDFE1FB1A88969890844388034 -:10B7B0000020CEE704F0ADBD017821F00F01491C57 -:10B7C00021F0F00110310170FDF7F2BD10B5044613 -:10B7D000402800D9FFDF4034A0B210BD4068426964 -:10B7E0000078484302EBC0007047C2784068037895 -:10B7F00012FB03F24378406901FB032100EBC10017 -:10B800007047C2788A4209D9406801EB81011C2245 -:10B8100002EBC101405C08B1012070470020704775 -:10B820000078062801D90120704700207047007871 -:10B83000062801D00120704700207047F0B401EBCA -:10B8400081061C27446807EBC6063444049D052680 -:10B850002670E3802571F0BCFEF782BA10B54189ED -:10B8600011B1FFF7DDFF08B1002010BD012010BDB0 -:10B8700010B5C18C8278B1EBC20F04D9C18911B166 -:10B88000FFF7CEFF08B1002010BD012010BD10B59C -:10B890000C4601230A22011D04F083FF0078218851 -:10B8A000012282409143218010BDF0B402EB820559 -:10B8B0001C264C6806EBC505072363554B681C79AD -:10B8C000402C03D11A71F0BCFEF7F3BCF0BC7047FA -:10B8D00010B5EFF3108000F0010472B6E94841782A -:10B8E000491C41704078012801D1F7F74BFB002C2F -:10B8F00000D162B610BD70B5E24CE07848B90125C0 -:10B90000E570FFF7E5FFF7F745FB20B1002008F0F1 -:10B910009AF8002070BD4FF080406571C0F8045364 -:10B92000F7E770B5EFF3108000F0010572B6D54C63 -:10B93000607800B9FFDF6078401E6070607808B9F9 -:10B94000F7F724FB002D00D162B670BDCD4810B5CD -:10B95000C17821B100214171C170FFF7E2FF0020E1 -:10B9600010BD10B50446F7F715FBC649C978084065 -:10B9700000D001202060002010BD2DE9F05FDFF82D -:10B9800004934278817889F80620002689F8071008 -:10B99000074689F808600078354620B101280FD0A5 -:10B9A00002280FD0FFDFF7F702FB98B1F7F706FB8D -:10B9B000B0420FD13046F7F705FB0028FAD047E038 -:10B9C0000126F0E7FFF784FFF7F7E4FA0028FBD041 -:10B9D0000226E8E701208407E060C4F80451AA4980 -:10B9E0000E600107D1F84412A74AC1F34231243254 -:10B9F0001160A549343108604FF0020BC4F804B35C -:10BA0000A060DFF888A2DAF80010C94341F3001102 -:10BA100001F10108DAF8001041F01001CAF8001035 -:10BA200000E020BFD4F804010028FAD03046F7F730 -:10BA3000C9FA0028FAD0B8F1000F05D1DAF80010E1 -:10BA400021F01001CAF80010C4F808B3C4F804517A -:10BA500099F807004C4670B1387860B9F7F79AFA50 -:10BA6000074608F09FF96FF0004117B1C4E90310D1 -:10BA700001E0C4E9030116B12571BDE8F09F01277B -:10BA8000BE0727714FF01908C6F80883B761C6F8DA -:10BA90000051C6F80C51C6F81051F7F77BFA10B1F7 -:10BAA000A770376100E02770FFF712FF7649A07991 -:10BAB00020310860C6F80483DFE770B5050000D1C7 -:10BAC000FFDF4FF080424FF0FF30C2F80803002143 -:10BAD000C2F80011C2F80411C2F80C11C2F810111A -:10BAE000684C6170F7F75CFA10B10120E07060708B -:10BAF0002846BDE8704040E72DE9F05F6448D0F883 -:10BB000000B0634A6349083211608406D4F8080122 -:10BB100010B14FF0010801E04FF00008D4F8000127 -:10BB200000B101208146D4F8040108B1012600E0EB -:10BB30000026D4F80C0100B101208246D4F810018F -:10BB400008B1012700E0002748EA090126EA0100C0 -:10BB500020EA0A00B84300D0FFDF0025B8F1000F4B -:10BB600004D0C4F80851012007F06DFF5FEA090016 -:10BB7000DFF810814FF0010913D0C4F8005198F894 -:10BB8000050020B188F80550002007F05CFF98F808 -:10BB9000000030B1F7F7FEF918B188F80290C4F848 -:10BBA00010900EB1C4F80451BAF1000F0CD0C4F8D3 -:10BBB0000C5198F80200464600B9FFDFB5703570A9 -:10BBC000C4F81490FFF7ADFE37B1C4F8105198F8DF -:10BBD000040008B100F020F82D49091DC1F800B09B -:10BBE0004BE770B5274DE87808B9F7F7CFF9012092 -:10BBF0008407A061A87850B1D4F80C0120B90020C6 -:10BC0000F7F7E0F90028F7D10020C4F80C014FF055 -:10BC1000FF30C4F8080370BD2DE9F041194C4FF016 -:10BC200080470125E079F0B1012803D0217A401E38 -:10BC3000814218DAF7F7AEF9064608F0B3F8E17971 -:10BC4000012902D9217A491C21720EB1216900E033 -:10BC5000E168411A022902DA11F1020F0BDC0EB180 -:10BC6000206100E0E060FFF733FEF7F793F928B1B9 -:10BC70003D61A57003E07D61BDE8F0812570002085 -:10BC80002072F9E7380000201805004010ED00E0B0 -:10BC900010050240010000014FF0E0214FF000705C -:10BCA000C1F88001C1F88002384B802283F800245B -:10BCB000C1F80001704700B502460420344903E092 -:10BCC00001EBC0031B792BB1401EC0B2F8D2FFDFDD -:10BCD000FF2000BD41F8302001EBC00100224A7175 -:10BCE0008A7101220A7100BD294A002102EBC000BD -:10BCF0000171704710B50446042800D3FFDF2448C3 -:10BD000000EBC4042079012800D0FFDF6079A1791D -:10BD1000401CC0B2814200D060714FF0E0214FF072 -:10BD20000070C1F8000210BD2DE9F0411948056806 -:10BD300018491948083108601448042690F800048E -:10BD4000134F4009154C042818D0FFDF16E0217866 -:10BD500007EBC1000279012A08D1427983799A421E -:10BD600004D04279827157F8310080472078401C16 -:10BD7000C0B22070042801D300202070761EF6B2D5 -:10BD8000E5D20448001D0560BDE8F08119E000E03F -:10BD90009006002010050240010000014C00002028 -:10BDA000F8B51D46DDE906470E000AD004F072FF23 -:10BDB0002346FF1DBCB231462A46009404F030FBF6 -:10BDC000F8BDD0192246194615F096FE2046F8BD5A -:10BDD000F84B586019721A80C90015F026BF70B56B -:10BDE0000D460446102115F0FEFE258117206081C6 -:10BDF000A07B40F00A00A07370BD4FF6FF720A806E -:10BE00000146032008F0E0B9704700897047827B43 -:10BE1000D30701D1920703D480890880002070479E -:10BE200005207047827B920700D5818170470146CB -:10BE30000020098847F2FE12114200D00120DD499E -:10BE4000497A002901D040F00800704700B5034648 -:10BE5000807BC00701D0052000BD59811846FFF73F -:10BE6000E6FFC00703D0987B40F004009873987BEE -:10BE700040F001009873002000BD827B520700D57E -:10BE800009B14089704717207047827B61F3C30274 -:10BE9000827370472DE9F04F0E46017804464FF04B -:10BEA000010B0BFA01F047F2FF1100EA010961688A -:10BEB0004FF6FF7887B008881D469646404506D065 -:10BEC000B9F1000F07D047F2FE12104203D0012053 -:10BED00007B0BDE8F08F40EA090008804FF0000A83 -:10BEE00095B185F800A022780027052003210223C0 -:10BEF000102A6FD2DFE802F06E0D2C35546F768079 -:10BF000054CBC79CCFFEFDFC20780B28EBD004203F -:10BF1000DEE762682089937B9B077DD5172851D384 -:10BF200013898342FBD39289172A01D3824249D1D4 -:10BF30002A7822F03F02921C2A70A5F80100318075 -:10BF4000616888816068817B21F00201817342E130 -:10BF5000042129702189A5F801106189A5F8031031 -:10BF60008FE0208A3188C01D1FFA80F84145D6D362 -:10BF7000062028702089A5F801006089A5F8030033 -:10BF8000A089A5F805000721208ACDE90001608875 -:10BF90002A4671466369FFF703FFA6F800801AE19D -:10BFA000082A10D0082129702189A5F8011061897B -:10BFB000A5F8031030806A1D694604F10C0006F0F4 -:10BFC000CAF910B1CCE01021EDE730889DF80010DF -:10BFD000084456E00EE10A2028702089A5F80100E7 -:10BFE0003180B2E00C2129702189A5F80110618906 -:10BFF000A5F803103080A8E0218933880BEB4102BB -:10C000001FFA82FA534576D3BAF1050F73D30E2285 -:10C010002A7008EA410100E07FE0CDE9001B60885A -:10C020002A467146E368FFF7BBFEA6F800A0D2E0FF -:10C030006048417A002970D0491E41724068217AD7 -:10C04000E26800EBC105D046A9882868D2F800C094 -:10C050000844A0F1080140F808CC506848608DF809 -:10C0600000308DF801A028680290A888ADF804007F -:10C0700060886946F5F7C6FEA5F80480002E01D059 -:10C0800040463080A7E0287840F080022A70287867 -:10C0900040F040022A7060893288C01C1FFA80F884 -:10C0A00042455DD3287820F03F0012302870228965 -:10C0B000A5F801206089CDE9000160882A46714613 -:10C0C000E368FFF76DFEA6F80080287841063CD5AE -:10C0D00000065ED58DF800B08DF801A03188CDE95D -:10C0E000025A091DADF804100420DFF8C88003E0EF -:10C0F00059E04FE02DE033E0049098F808008DF807 -:10C10000140060886946F5F77DFE074630880C30DC -:10C110003080022F02D0E7B36FE048E09DF8142092 -:10C12000D8F8041098F80830404601EBC2019A4252 -:10C1300016D28A88A2B9427A521C88F809200D606A -:10C1400030888880A6F800A057E061682089888040 -:10C1500041E0A1893288491D1FFA81F8424501D288 -:10C1600004274AE029782A4621F03F011631297038 -:10C170002189A5F801106189A5F80310A189CDE9ED -:10C180000010608871462369FFF70AFEA6F8008058 -:10C19000DBE720E0287820F03F0018302870207A74 -:10C1A0006870338017E060680188090404D40527AB -:10C1B00023E00000B0060020C0882189884201D019 -:10C1C00006271AE01E202870A6F800B060680188D3 -:10C1D00021F400410180B9F1000F0ED0DF486188E1 -:10C1E000002200888300032007F044FF6168207864 -:10C1F000887007E0A6F800A003276068018821EA9C -:10C2000009010180384663E62DE9F04F87B01746F3 -:10C21000109C0D0083461E461AD03078C10703D00B -:10C2200000F03F00192801D9012100E0002120463B -:10C23000FFF723FEA8420BD32088A0F57F41FF39EA -:10C2400006D03078410601D4000603D508203FE629 -:10C2500007203DE600208DF800008DF801003078C1 -:10C260006B1E00F03F0C0122A81E4FF0050A4FF094 -:10C27000020999B2BCF1200F76D2DFE80CF08C10E5 -:10C28000755F7569758D759E75B875BD75CB75D7FC -:10C2900075E4757575F475F275F175F0758C052D8D -:10C2A00079D104208DF80000A0788DF80400708802 -:10C2B000ADF8060030798DF80100707800F03F008D -:10C2C0000C2829D00ADCA0F10200092863D2DFE89B -:10C2D00000F0126215621A621D622000122824D03A -:10C2E00004DC0E281BD01028DAD11BE016281FD042 -:10C2F0001828D5D11FE02078800701E0207840077A -:10C30000002848DAF1E020780007F9E72078C00635 -:10C31000F6E720788006F3E720784006F0E72078FB -:10C320000006EDE72088C005EAE72088C004E7E7BB -:10C3300020888004E4E720884004E1E72078800733 -:10C3400029D5032D27D18DF800A0B6F8010083E090 -:10C35000217849071FD5062D1DD381B27078012899 -:10C3600003D0022817D102E0CCE0022000E0102028 -:10C3700006228DF8002072788DF80420801CB1FB15 -:10C38000F0F2ADF8062092B242438A4203D10397FD -:10C39000ADF80890A9E07BE02078000778D5072168 -:10C3A00098B28DF800108108ADF80410B0EB810F41 -:10C3B0006ED10297ADF8062097E02178C90667D5BF -:10C3C000022D65D381B208208DF800007078022814 -:10C3D0005ED300BFB1FBF0F28DF80400ADF806208B -:10C3E00092B242438A4253D1ADF808907CE0207863 -:10C3F00080064DD5092003E02078400648D50A2064 -:10C400008DF80000A088ADF80400ADF80610ADF876 -:10C41000082069E02078000672D50B20ADF80410E2 -:10C420008DF80000ADF8062002975EE02188C9056E -:10C4300066D5022D64D381B20C208DF8000070788F -:10C4400004285DD3C6E72088C00459D5012D57D1F3 -:10C450000D208DF80000A088ADF8040045E021E033 -:10C4600026E016E0FFE72088800449D5052D47D354 -:10C470000E208DF80000A088ADF80400B6F8030087 -:10C480006D1FADF80850ADF80600ADF80AA02BE01E -:10C4900036E02088400433D5012D31D10F208DF8AE -:10C4A000000022E0208800042AD4B6F80100E080D1 -:10C4B000A07B000724D5032D22D3307800F03F0065 -:10C4C0001B2819D011208DF80000208840F400406E -:10C4D000A4F80000B6F80100ADF80400ED1E03203A -:10C4E000ADF80650ADF80800039769465846F5F7D1 -:10C4F00089FC050008D016E010208DF80000E9E75F -:10C50000072510E008250EE0307800F03F001B28DA -:10C5100009D01D2807D05946032007F055FE208872 -:10C5200000F400402080A07B400708D52046FFF79C -:10C530007EFCC00703D1A07B20F00400A073284636 -:10C54000C6E400B587B0032805D18DF8000088B295 -:10C550006946F5F757FC07B000BD0000B0060020A3 -:10C56000F8B51D46DDE906470E000AD004F092FB3F -:10C570002346FF1DBCB231462A46009403F050FF0B -:10C58000F8BDD0192246194615F0B6FA2046F8BD76 -:10C590002DE9FF4F8DB09B46DDE91B57DDF87CA0F0 -:10C5A0000C46082B05D0E06901F00CF950B11020C1 -:10C5B000D2E02888092140F0100028808AF8001075 -:10C5C000022617E0E16901208871E2694FF42051E9 -:10C5D0009180E1698872E06942F601010181E069B8 -:10C5E000002181732888112140F0200028808AF8DA -:10C5F0000010042638780A900A2038704FF002099B -:10C6000004F118004D460C9001F09FFBB04681E00C -:10C61000BBF1100F0ED1022D0CD0A9EB0800801C2D -:10C6200080B20221CDE9001005AB52461E990D984B -:10C63000FFF796FFBDF816101A98814203D9F74804 -:10C6400000790F9004E003D10A9808B138702FE008 -:10C650004FF00201CDE900190DF1160352461E9963 -:10C660000D98FFF77DFF1D980088401B801B83B24B -:10C67000C6F1FF00984200D203461E990BA8D9B11B -:10C680005FF00002DDF878C0CDE9032009EB060178 -:10C6900089B2CDE901C10F980090BDF816100022B3 -:10C6A0000D9801F0D5FB387070B1C0B2832807D067 -:10C6B000BDF8160020833AE00AEB09018A19E1E788 -:10C6C000022011B0BDE8F08FBDF82C00811901F0F7 -:10C6D000FF08022D0DD09AF80120424506D1BDF881 -:10C6E0002010814207D0B8F1FF0F04D09AF80180E2 -:10C6F0001FE08AF80180C94800680178052902D145 -:10C70000BDF81610818009EB08001FFA80F905EBCF -:10C71000080085B2DDE90C1005AB0F9A01F018FB9B -:10C7200028B91D980088411B4145BFF671AF022D05 -:10C7300013D0BBF1100F0CD1A9EB0800801C81B203 -:10C740000220CDE9000105AB52461E990D98FFF776 -:10C7500007FF1D980580002038700020B1E72DE903 -:10C76000F8439C46089E13460027B26B9AB3491FB4 -:10C770008CB2F18FA1F57F45FF3D05D05518AD88EE -:10C780002944891D8DB200E000252919B6F83C80A6 -:10C790000831414520D82A44BCF8011022F8021B78 -:10C7A000BCF8031022F8021B984622F8024B91466F -:10C7B00004F05EFA4FF00C0C41464A462346CDF891 -:10C7C00000C003F0F4FDF587B16B00202944A41DDF -:10C7D0002144088003E001E0092700E08327384670 -:10C7E000BDE8F88310B50B88848F9C420CD9846B0C -:10C7F000E018048844B1848824F40044A41D234430 -:10C800000B801060002010BD822010BD2DE9F04784 -:10C810008AB00025904689468246ADF81850072711 -:10C820004BE0059806888088000446D4A8F800608C -:10C8300007A8019500970295CDE903504FF40073C6 -:10C8400000223146504601F003FB04003CD1BDF804 -:10C850001800ADF82000059804888188B44216D1EC -:10C860000A0414D401950295039521F40041009720 -:10C87000049541F4804342882146504601F0BEF8B9 -:10C8800004000BD10598818841F40041818005AAFC -:10C8900008A94846FFF7A6FF0400DCD000970598DA -:10C8A00002950195039504950188BDF81C3000227E -:10C8B000504601F0A3F8822C06D105AA06A94846E5 -:10C8C000FFF790FF0400ACD0ADF8185004E00598D5 -:10C8D000818821F40041818005AA06A94846FFF716 -:10C8E00081FF0028F3D0822C03D020460AB0BDE897 -:10C8F000F0870020FAE710B50C46896B86B051B17D -:10C900000C218DF80010A18FADF80810A16B0191DA -:10C910006946FAF7C9FB00204FF6FF71A063E18773 -:10C92000A08706B010BD2DE9F0410D460746896B82 -:10C930000020069E1446002911D0012B0FD132464B -:10C9400029463846FFF762FF002808D1002C06D0A0 -:10C95000324629463846BDE8F04100F042BFBDE806 -:10C96000F0812DE9FC411446DDE9087C0E46DDE945 -:10C970000A15521DBCF800E092B2964502D207207B -:10C98000BDE8FC81ACF8002017222A70A5F80160F0 -:10C99000A5F803300522CDE900423B462A46FFF7C1 -:10C9A000DFFD0020ECE770B50C4615464821204617 -:10C9B00015F03BF904F1080044F81C0F00204FF675 -:10C9C000FF71E06161842084A5841720E08494F8DD -:10C9D0002A0040F00A0084F82A0070BD4FF6FF726A -:10C9E0000A800146042007F0EFBB30B585B00C4645 -:10C9F0000546FFF780FFA18E284629B101218DF859 -:10CA000000106946FAF750FB0020E0622063606383 -:10CA100005B030BDB0F84000704700005000002065 -:10CA200090F84620920703D4408808800020F3E75E -:10CA30000620F1E790F846209207EDD5A0F84410C3 -:10CA4000EAE70146002009880A0700D5012011F015 -:10CA5000F00F01D040F00200CA0501D540F00400FB -:10CA60008A0501D540F010004A0501D540F02000AC -:10CA70000905D1D540F04000CEE700B5034690F857 -:10CA80004600C00701D0062000BDA3F8421018469A -:10CA9000FFF7D7FF10F0760F05D093F8460040F06F -:10CAA000040083F8460013F8460F40F001001870A8 -:10CAB000002000BD90F84620520700D511B1B0F813 -:10CAC0004200A9E71720A7E710F8462F61F3C30239 -:10CAD0000270A1E72DE9FF4F9BB00E00DDE92B347A -:10CAE000DDE92978289D25D02878C10703D000F0FA -:10CAF0003F00192801D9012100E000212046FFF75D -:10CB0000D9FFB04216D3287841060FD400F03F0178 -:10CB10001E2909D0218811F47F6F0BD13A884AB1C0 -:10CB2000A1F57F42FF3A05D0010606D500F03F008F -:10CB3000122802D004201FB0C4E5FC491D984FF014 -:10CB4000000A08718DF818A08DF830A00CAA0A60B0 -:10CB5000ADF81CA0ADF824A02978994601F03F0259 -:10CB6000701F5B1C04F1180CD3464FF0030ECDF878 -:10CB700028C01F2A7ED2DFE802F07D7D107D227D55 -:10CB8000AE7DF77DF67DF57DF47DF77DF37D7D7DD2 -:10CB9000F27DF17D7D7D7D7DF00094F84610B5F845 -:10CBA0000100890767D5032E65D14FF40061ADF808 -:10CBB000241060808DF830E0ADF83400E9E2052EF5 -:10CBC000F2D1B5F801002083ADF81C00B5F80310D0 -:10CBD0006183002870D088426ED884F80AB0A4F827 -:10CBE00008B04FF6FF7020840A9801F0AEF80520D7 -:10CBF00089F8000002208346029011AB1D9A0A9921 -:10CC00001B9801F0A5F820B15EE000BF8DF8180078 -:10CC1000FEE29DF84A00012804D0022089F80100B4 -:10CC2000102003E0012089F8010002200390002277 -:10CC300004A912A805F08FFBE8BB9DF8101003981B -:10CC400088423ED13A88891CA2EB0B00884238DB2F -:10CC500002990220CDE900010DF146034A46414602 -:10CC60001B98FFF77DFC02980BF1020B801C81B230 -:10CC700017AA01E0ACE2B1E0029104A912A805F004 -:10CC80006AFB02999DF81000CDE9000117AB4A46F6 -:10CC900041461B98FFF764FC9DF8100011AB0BEBAD -:10CCA00000011FFA81FB02991D9A084480B202908C -:10CCB0000A991B9801E004E091E001F049F800288E -:10CCC000B5D0BBF1020F03D10A208DF818005DE248 -:10CCD000A7F800B05AE2CDF80CB0072E7ED3B5F815 -:10CCE00001002083ADF81C00B5F803206283002802 -:10CCF00075D0904273D84FF0010B84F80AB0B5F8A4 -:10CD0000050020810020A073E06900F05BFD80B980 -:10CD1000E16942F6010081F806B0E2694FF4205162 -:10CD20009180E16981F80AB0E1690881E169002038 -:10CD30008873F01F20841E984FF0070B6062A4F8E0 -:10CD400022B00A9801F001F889F800B0012083466A -:10CD500004900020ADF846002AE026E2B0E147E169 -:10CD6000EDE01FE2B0E088E04FE000BFBBF1010F53 -:10CD700015D0E0698079012803D1BDF84400ADF8F1 -:10CD80000E0004990420CDE9000103AB4A46414658 -:10CD90001B98FFF7E5FB0498001D80B20490BDF8D6 -:10CDA0004600ADF80C00ADF80E0005981FFA80FBA8 -:10CDB00011AB1D9A0A991B9800F0CAFF28B939884F -:10CDC0000BF1040005908142D0D2BBF1010F3FF47A -:10CDD0001BAFE0698079012808D001E098E023E0EA -:10CDE000BDF84410A1F57F40FF3803D1BDF84400E1 -:10CDF000ADF80E0004990420CDE9000103AB4A46CA -:10CE000041461B98FFF7ACFB62E7072E01D0152EB9 -:10CE10007ED1B5F801102183ADF81C10B5F80320C0 -:10CE2000628309B1914201D90120EFE60121A1728B -:10CE3000A4F808B084F80EB0052E07D0C0B2691D62 -:10CE4000E26905F069FA00287FF4DEAE4FF6FF7064 -:10CE5000208401A806AA09A9CDF800B080E88603BD -:10CE60002878214600F03F031D9A1B98FFF790FB9E -:10CE70008246208BADF81C0088E10120032EC7D12B -:10CE80004021ADF82410B5F801102183ADF81C1035 -:10CE90000AAAB8F1000F00D00023CDE902030492E2 -:10CEA0001D98CDF80480009038880022401E83B27F -:10CEB0001B9800F0CDFF8DF8180050BB0B2189F8AE -:10CEC0000010BDF8280038E04FF0010C052E9FD16E -:10CED0008020ADF82400B5F801102183B5F80300D7 -:10CEE0002084ADF81C10B0F5007F01D907208DE635 -:10CEF00040F47C42228412A8B8F1000F00D0002335 -:10CF0000CDE90330CDE9018C1D980090388801E00F -:10CF10009CE007E0401E83B21B9800F099FF8DF85B -:10CF2000180028B18328A7D10220C7E050000020B4 -:10CF30000D2189F80010BDF84800401C25E1C80902 -:10CF400000EB40020EEB8200B04203D948067DD5CB -:10CF500058461AE1B5F80110ADF81C102A785206AF -:10CF600008D506228DF830202A78120605D58DF8CE -:10CF700030B02FE107228DF830200323CDE9023BAA -:10CF8000DDF878C0CDF810B01D9AA6EB000800922D -:10CF9000CDF804C01FFA88F300221B9800F02EFD84 -:10CFA0008DF818008DF830B0297849060DD5208805 -:10CFB000C00506D5208BBDF81C10884201D1C4F8ED -:10CFC00024B058468DF818B0DFE0832801D14FF027 -:10CFD000020A4FF48070ADF82400BDF81C002083D5 -:10CFE000A4F820801E986062032060841321C9E0A9 -:10CFF000052E2BD3B5F80110ADF81C10A28F32B35B -:10D00000A2F57F43FE3B29D008228DF8302005236E -:10D01000CDE9023BDDF878C0CDF810B01D9A80B2A2 -:10D02000CDF804C040F400430092B5F803201B98EB -:10D0300000F0E4FC4FF400718DF818008DF830B06A -:10D04000ADF82410832813D010B301E0DBE005E035 -:10D05000A08FA0F57F41FE3907D0D9E00B228DF8D3 -:10D0600030204FF6FE72A287D1E7A4F83CB0CFE0A3 -:10D0700000942B4631461E9A1B98FFF770FB8DF8E3 -:10D08000180008B183284BD1BDF81C0020834BE762 -:10D0900000942B4631461E9A1B98FFF760FB8DF8D3 -:10D0A0001800E8BBE18FA06B0844831D8DE888035E -:10D0B0004388828801881B98FFF753FC824665E00D -:10D0C00095F80180022E6FD15FEA080002D0B8F116 -:10D0D000010F7FD109208DF8300007A800908DF84E -:10D0E00034804346002221461B98FFF71CFC8DF834 -:10D0F00036008DF837B050B9B8F1010F11D0B8F142 -:10D10000000F04D1A08FA0F57F41FF3909D0A08F77 -:10D1100038B14FF480608DF830B0ADF824000EE0E7 -:10D1200034E00CA91B98F9F7BFFF82464FF48060EA -:10D130008DF830B0ADF82400BAF1020F06D0FB48EC -:10D140000068C07928B18DF8180027E0A4F818808D -:10D1500042E0BAF1000F03D081208DF818003BE0C7 -:10D1600007A800904346012221461B98FFF7DBFBEE -:10D170008DF8180021461B98FFF7BDFB9DF818009D -:10D1800020B9192189F80010012038809DF830005D -:10D1900020B10CA91B98F9F787FF8246BAF1000F5E -:10D1A00033D019E0062031E514E02078000711D5CE -:10D1B000012E0FD10A208DF83000E088ADF8340040 -:10D1C00004201B9907F000F80820ADF824007FE543 -:10D1D000480618D54FF0040A2088BDF824100843EB -:10D1E0002080BDF8240080050BD5A18FA1F57F40DC -:10D1F000FE3806D11E98E06228982063A6864FF07C -:10D20000030A504697E4042000E59DF8180078B121 -:10D21000012089F80000297889F80110BDF81C1058 -:10D22000A9F802109DF8180089F80400052038803C -:10D230002088BDF8241088432080E2E72DE9FF4FC5 -:10D240008846087895B0012181404FF20900249C5E -:10D250000140ADF820102088DDF88890A0F57F42CD -:10D260004FF0000AFF3A02D029B1000703D5012090 -:10D2700019B0BDE8F08F239E4FF0000B0EA886F882 -:10D2800000B018995D460988ADF83410A7498DF8AB -:10D290001CB0179A0A718DF838B0086098F8000031 -:10D2A00001283BD0022809D003286FD1307820F024 -:10D2B0003F001D303070B8F80400E08098F800108E -:10D2C0000320022904D1317821F03F011B31317054 -:10D2D00094F84610090759D505ABB9F1000F13D0E2 -:10D2E000002102AA82E80B000720CDE90009BDF861 -:10D2F0003400B8F80410C01E83B20022159800F064 -:10D30000A7FD0028D1D101E0F11CEAE7B8F804003C -:10D31000A6F80100BDF81400C01C04E198F805103F -:10D320008DF81C1098F80400012806D04FF4007AFC -:10D3300002282CD00328B8D16BE12188B8F8080066 -:10D3400011F40061ADF8201020D017281CD3B4F8D8 -:10D350004010814218D3B4F84410172901D38142F8 -:10D3600012D1317821F03F01C91C3170A6F80100BB -:10D370000321ADF83410A4F8440094F8460020F0DE -:10D38000020084F8460064E105257DE176E120880D -:10D3900008F1080700F4FE60ADF8200010F0F00F6F -:10D3A0001BD010F0C00F03D03888228B9042EBD1F5 -:10D3B00099B9B878C00710D0B9680720CDE902B193 -:10D3C000CDF804B00090CDF810B0FB88BA88398849 -:10D3D000159800F013FB0028D6D12398BDF8201033 -:10D3E000401C80294ED006DC10290DD020290BD0FE -:10D3F000402987D124E0B1F5807F70D051456DD0B0 -:10D40000B1F5806F97D1DDE0C80601D5082000E0B6 -:10D41000102082460DA907AA0520CDE902218DF82A -:10D420003800ADF83CB0CDE9049608A93888CDE9BC -:10D4300000015346072221461598FFF7A9F8A7E0F7 -:10D440009DF81C2001214FF00A0A002A9BD105AB50 -:10D45000B9F1000F00D00020CDE902100720CDE97E -:10D460000009BDF834000493401E83B2218B0022D2 -:10D47000159800F0EDFC8DF81C000B203070BDF805 -:10D48000140020E09DF81C2001214FF00C0A002A16 -:10D4900022D113ABB9F1000F00D00020CDE902106A -:10D4A0000720CDE900090493BDF83400228C401E0A -:10D4B00083B2218B159800F0CBFC8DF81C000D2059 -:10D4C0003070BDF84C00401CADF8340005208DF8DC -:10D4D0003800208BADF83C00BBE000E028E0388845 -:10D4E000218B88427FF450AF9DF81C004FF0120A48 -:10D4F00000281AD1606A98B1B878C0073FF444AFE9 -:10D50000BA680720CDE902B2CDF804B00090CDF89A -:10D5100010B0FB88BA88159800F070FA8DF81C00DE -:10D52000132030700120ADF8340092E0500000204C -:10D530003988208B8142D5D19DF81C004FF0160A06 -:10D540000028A06B08D0E0B34FF6FF7000215F46C3 -:10D55000ADF808B0019027E068B1B978C907C1D12A -:10D56000E18F0DAB0844821D03968DE80C024388C1 -:10D570008288018809E0B878C007BFD0BA680DABCF -:10D5800003968DE80C02BB88FA881598FFF7E9F935 -:10D5900005005ED0072D72D076E0019005AA02A9A1 -:10D5A0002046FFF71FF90146E28FBDF808008242CE -:10D5B00001D00029F1D0E08FA16B084407800198C9 -:10D5C000E08746E09DF81C004FF0180A40B1208B20 -:10D5D000C8B13888208321461598FFF78CF938E0C8 -:10D5E00004F118000090237E012221461598FFF7D0 -:10D5F0009AF98DF81C000028EDD119203070012017 -:10D60000ADF83400E7E7052521461598FFF773F9D3 -:10D610003AE0208800F40070ADF8200050452DD18C -:10D62000A08FA0F57F41FE3901D006252CE0D8F867 -:10D6300008004FF0160A48B1A063B8F80C10A18793 -:10D640004FF6FF71E187A0F800B002E04FF6FF70DF -:10D65000A087BDF8200030F47F611AD07823002223 -:10D660000420159906F006FD98F800002071208826 -:10D67000BDF82010084320800EE000E00725208838 -:10D68000BDF8201088432080208810F47F6F1CD0C4 -:10D690003AE02188814321809DF8380020B10EA90D -:10D6A0001598F9F701FD05469DF81C000028EBD000 -:10D6B00086F801A001203070208B70809DF81C003E -:10D6C00030710520ADF83400DEE7A18EE1B1189885 -:10D6D0000DAB0088ADF834002398CDE90304CDE903 -:10D6E0000139206B0090E36A179A1598FFF7F2F959 -:10D6F000054601208DF838000EA91598F9F7D4FCDD -:10D7000000B10546A4F834B094F8460040070AD5A5 -:10D710002046FFF796F910F0760F04D114F8460F63 -:10D7200020F0040020701898BDF8341001802846BD -:10D730009EE500B585B0042806D102208DF80000D2 -:10D7400088B26946F9F7B0FC05B000BD10B5384C99 -:10D750000B782268012B02D0022B2AD111E013781A -:10D760000BB1052B01D10423137023688A889A809A -:10D770002268CB88D38022680B8913814989518123 -:10D780000DE08B8893802268CB88D38022680B8938 -:10D7900013814B8953818B899381096911612168B8 -:10D7A000F9F782FC226800210228117003D00028BA -:10D7B00000D0812010BD832010BD806B002800D0D8 -:10D7C000012070478178012909D10088B0F5205FD8 -:10D7D00003D042F60101884201D1002070470720A2 -:10D7E0007047F0B587B0002415460E460746ADF8E1 -:10D7F000144010E0069801882980811DCDE902417E -:10D800000721019404940091838842880188384656 -:10D8100000F0F4F830B906AA05A93046FEF7E2FF99 -:10D820000028E7D0822800D1002007B0F0BD00001A -:10D830005000002010B58B7883B102789A4205D150 -:10D840000B885BB102E08B79091D4BB18B789A4252 -:10D85000F9D1B0F801300C88A342F4D1002010BDFA -:10D86000812010BD072826D012B1012A27D103E05C -:10D87000497801F0070102E04978C1F3C2010529A6 -:10D880001DD2DFE801F00318080C12000AB10320D2 -:10D8900070470220704704280DD250B10DE00528D2 -:10D8A00009D2801E022808D303E0062803D00328EB -:10D8B00003D005207047002070470F20704781205B -:10D8C0007047C0B282060BD4000607D5FE48807AA6 -:10D8D0004143C01D01EBD00080B27047084670473D -:10D8E0000020704770B513880B800B781C0625D577 -:10D8F000F54CA47A844204D843F01000087000204C -:10D9000070BD956800F0070605EBD0052D78F54051 -:10D9100065F304130B701378D17803F0030341EA25 -:10D92000032140F20123B1FBF3F503FB15119268CB -:10D93000E41D00FB012000EBD40070BD906870BDB9 -:10D9400037B51446BDF8041011809DF804100A067E -:10D950001ED5C1F30013DC49A568897A814208D835 -:10D96000FE2811D1C91DC9085A422846F5F73FFBC8 -:10D970000AE005EBD00100F0070201250878954088 -:10D98000A843934018430870207820F010002070BE -:10D990003EBD2DE9F0410746C81C0E4620F00300AD -:10D9A000B04202D08620BDE8F081C74D0020344649 -:10D9B0002E60AF802881AA72E8801AE0E988491CAD -:10D9C000E980810614D4E17800F0030041EA0020E8 -:10D9D00040F20121B0FBF1F201FB12012068FFF7D8 -:10D9E00070FF2989084480B22881381A3044A06029 -:10D9F0000C3420784107E1D40020D4E72DE9FF4F13 -:10DA000089B01646DDE9168A0F46994623F440454B -:10DA1000084600F00DFB04000FD0099802F0E6FF65 -:10DA20000290207800060AD5A748817A02988142A0 -:10DA300005D887200DB0BDE8F08F0120FAE7224617 -:10DA400001A90298FFF74EFF834600208DF80C00D5 -:10DA50004046B8F1070F1AD001222146FFF702FF16 -:10DA60000028E7D12078400611D502208DF80C005F -:10DA7000ADF81070BDF80400ADF81200ADF81460F8 -:10DA80001898ADF81650CDF81CA0ADF818005FEA54 -:10DA9000094004D500252E46A84601270CE0217830 -:10DAA000E07801F0030140EA012040F20121B0FBDF -:10DAB000F1F2804601FB12875FEA494009D5B8457B -:10DAC00007D1A178207901F0030140EA0120B0429A -:10DAD00001D3BE4201D90720ACE7A8191FFA80F98B -:10DAE000B94501D90D20A5E79DF80C0028B103A97F -:10DAF0000998F9F7D7FA00289CD1B84507D1A07842 -:10DB00004FEA192161F30100A07084F804901A987B -:10DB100000B10580199850EA0A0027D0199830B151 -:10DB20000BEB06002A46199913F0E6FF0EE00BEB0B -:10DB300006085746189E099803F09AF82B46F61DDA -:10DB4000B5B239464246009502F031FC224601A9A1 -:10DB50000298FFF7C7FE9DF80400224620F010004F -:10DB60008DF80400DDE90110FFF7EAFE002061E70F -:10DB70002DE9FF4FDFF8509182461746B9F806109D -:10DB8000D9F8000001EB410100EB810440F20120D3 -:10DB9000B2FBF0F185B000FB11764D46DDF84C800C -:10DBA00031460698FFF78DFE29682A898B46611A4F -:10DBB0000C3101441144AB8889B28B4202D88420D5 -:10DBC00009B038E70699CDB2290603D5A90601D5D3 -:10DBD0008520F5E7B9F806C00CF1010C1FFA8CFCA2 -:10DBE000A9F806C0149909B1A1F800C0A90602D588 -:10DBF000C4F8088007E0104480B2A9F80800191A98 -:10DC000001EB0B00A0602246FE200699FFF798FE6C -:10DC1000E77026712078390A61F30100320AA17891 -:10DC200040F0040062F30101A17020709AF8020034 -:10DC30006071BAF80000E08000262673280602D53D -:10DC400099F80A7000E00127A80601D54FF00008F6 -:10DC50004D4600244FF007090FE0CDE90268019618 -:10DC6000CDF800900496E9882046129B089AFFF7A9 -:10DC7000C5FE0028A4D1641CE4B2BC42EDD3002050 -:10DC80009EE72DE9F047804600F0D2F9070005D065 -:10DC9000002644460C4D40F2012919E00120BDE860 -:10DCA000F087204600F0C4F90278C17802F0030240 -:10DCB00041EA0222B2FBF9F309FB13210068FFF7E6 -:10DCC00000FE304486B201E0BC060020641CA4B211 -:10DCD000E988601E8142E4DCA8F10100E88028891F -:10DCE000801B288100203870D9E710B5144631B167 -:10DCF000491E218002F07AFEA070002010BD012094 -:10DD000010BD10B5D24904460088CA88904201D39C -:10DD1000822010BD096800EB400001EB80025079C1 -:10DD2000A072D08820819178107901F0030140EA37 -:10DD30000120A081A078E11CFFF7D4FD206120889C -:10DD4000401C2080E080002010BD0121018270472E -:10DD50002DE9FF4F85B04FF6FF788246A3F800808B -:10DD600048681F460D4680788DF806004868008890 -:10DD7000ADF8040000208DF80A00088A0C88A04243 -:10DD800000D304462C8241E0288A401C2882701D62 -:10DD90006968FFF74FFDB8BB3988414501D1601E66 -:10DDA00038806888A04236D3B178307901F0030119 -:10DDB00040EA012901A9701DFFF73CFD20BB29891C -:10DDC00041452CD0002231460798FFF74BFDD8B9CA -:10DDD0002989494518D1E9680391B5F80AC0D6F8F0 -:10DDE00008B05046CDF800C002F042FFDDF800C098 -:10DDF0005A460CF1070C1FFA8CFC4B460399CDF8E0 -:10DE000000C002F097FA50B1641CA4B2204600F0A2 -:10DE10000FF90600B8D1641E2C828220D0E67C80E7 -:10DE20007079B871F088B8803178F07801F003012A -:10DE300040EA01207881A7F80C90504602F0D6FD08 -:10DE4000324607F10801FFF74DFD38610020B7E6C3 -:10DE50002DE9FF4F87B081461C469246DDF860B041 -:10DE6000DDF85480089800F0E3F805000CD048462F -:10DE700002F0BCFD2978090608D57549897A8142E6 -:10DE800004D887200BB0D6E50120FBE7CAF30906CA -:10DE90002A4601A9FFF726FD0746149807281CD03B -:10DEA00000222946FFF7DEFC0028EBD12878400647 -:10DEB00013D501208DF808000898ADF80C00BDF8C6 -:10DEC0000400ADF80E00ADF81060ADF8124002A9E4 -:10DED0004846F9F7E7F80028D4D12978E87801F026 -:10DEE000030140EA0121AA78287902F0030240EAFE -:10DEF0000220564507D0B1F5007F04D9611E81424A -:10DF000001DD0B20BEE7864201D90720BAE7801B5E -:10DF100085B2A54200D92546BBF1000F01D0ABF870 -:10DF20000050179818B1B9192A4613F0E5FDB8F159 -:10DF3000000F0DD03E4448464446169F02F0AAFE0C -:10DF40002146FF1DBCB232462B46009402F068FA0F -:10DF5000002097E72DE9F04107461D461646084682 -:10DF600000F066F804000BD0384602F03FFD21783F -:10DF7000090607D53649897A814203D8872012E5F8 -:10DF8000012010E522463146FFF7ACFC65B121784F -:10DF9000E07801F0030140EA0120B0F5007F01D8EC -:10DFA000012000E0002028700020FCE42DE9F04171 -:10DFB00007461D461646084600F03AF804000BD006 -:10DFC000384602F013FD2178090607D52049897AE1 -:10DFD000814203D88720E6E40120E4E4224631466A -:10DFE000FFF7AEFCFF2D14D02178E07801F003029A -:10DFF00040EA022040F20122B0FBF2F302FB1300E0 -:10E0000015B900F2012080B2E070000A60F301014E -:10E0100021700020C7E410B50C4600F009F828B1C3 -:10E02000C18821804079A070002010BD012010BD62 -:10E030000749CA88824209D340B1096800EB400011 -:10E040006FF00B0202EB800008447047002070471D -:10E05000BC06002010B50C4601F03AFD80B3204606 -:10E0600000F0B7FA68B32278102A09D0112A07D035 -:10E07000022A05D0032A03D0162A2ED0FFDF1DE086 -:10E08000A0781E282BD00EDC0C2824D008DC092810 -:10E0900027D2DFE800F013261726261E1E1A1C00C2 -:10E0A00012281ED11BE0302819D01ADDA0F13A0049 -:10E0B000032816D2DFE800F011150B00002010BD78 -:10E0C00013E010E043F20200F9E70420F7E70D2027 -:10E0D000F5E70F20F3E70820F1E71120EFE707202D -:10E0E000EDE70320EBE7FFDFE8E7FFDFE6E700F01F -:10E0F00070BA70B50346002002466FF02F050EE09F -:10E100009C5CA4F130060A2E02D34FF0FF3070BDA4 -:10E1100000EB800005EB4000521C2044D2B28A4242 -:10E12000EED370BD30B50A240AE0B0FBF4F304FB73 -:10E1300013008D18303005F8010C521E1846D2B26B -:10E14000002AF2D130BD30B500234FF6FF7510E044 -:10E15000040A44EA002084B2C85C6040C0F303149F -:10E16000604005EA00344440E0B25B1C84EA4010A1 -:10E170009BB29342ECD330BD10B50AF0FFF90428EE -:10E1800003D00AF0FBF9052802D108F0A0FC28B959 -:10E190000BF056FB20B107F047FB08B1012010BD82 -:10E1A000002010BD0178406819B190F8721059B97B -:10E1B00001E001F017BD90F8041129B190F80401B5 -:10E1C000042801D0012070470020704770B50C462C -:10E1D0000546062102F042FC606008B1002006E01E -:10E1E0000721284602F03AFC606018B10120207037 -:10E1F000002070BD022070BD2DE9FC470C4606468C -:10E200006946FFF7E3FF00287DD19DF8000050B17B -:10E2100007F09CFAB0427CD0214630460EF0A1F9BE -:10E22000002873D12DE008F065F9B04271D0214685 -:10E2300030460CF041FC002868D1019D95F8C800DB -:10E2400022E0012000E00020804695F835004FF0E4 -:10E25000010A4FF00009F0B195F8360080071AD591 -:10E2600084F8019084F800A084F80290A68095F8C4 -:10E270003710A171298F2181698F618185F83590CF -:10E2800044E0019D95F8040158350028DBD1A87EB3 -:10E290000028D8D0D5E7304602F0FCFC070000D1BA -:10E2A000FFDF384601F051FE40B184F801900E21A5 -:10E2B0002170A680E08084F802A027E0304602F0BA -:10E2C000D7FC070000D1FFDFB8F1000F21D038469E -:10E2D00001F0CCFEB8B19DF8000038B90198D0F833 -:10E2E000F0004188B14201D180F80090304607F03B -:10E2F000C3F884F801900B21217084F80290A68065 -:10E30000E97EA17100E004E085F81A900120BDE8E3 -:10E31000FC870020FBE71CB56946FFF757FF00B1FB -:10E32000FFDF684601F06CFCF94900208968A1F81C -:10E33000CA001CBD2DE9FC4104460E46062002F031 -:10E3400037FB0546072002F033FB2844C7B20025FF -:10E35000A8463E4417E02088401C80B22080B0428E -:10E3600002D34046A4F8008080B2B84204D3B04241 -:10E3700002D20020BDE8FC816946FFF727FF002894 -:10E38000F8D06D1CEDB2AE42E5D84FF6FF7020809C -:10E390001220EFE738B54FF6FF70ADF800000DE042 -:10E3A0000621BDF8000002F06BFB04460721BDF812 -:10E3B000000002F065FB0CB100B1FFDF00216846F0 -:10E3C000FFF7B8FF0028EBD038BD2DE9F047D1A109 -:10E3D0000F79D1F8008007F0BDF810F003F8CF4CAA -:10E3E0004FF004091020A4F8389060874FF6FF76AC -:10E3F000A4F85460A4F85660002584F8315004F85D -:10E400002E5BC6492570A5713E39A573C1F87B8086 -:10E4100081F87F707B31481E0CF029FD25751B208B -:10E42000E0824FF4A47121836083A1830321A1774B -:10E4300084F81F9020846084B848A1843E38057019 -:10E440004680B3480C300570B448103805704680DB -:10E45000BDE8F08770B5AE4C0D466060217006F0E7 -:10E46000F3FFFFF797FFFFF7B0FF207809F031FDCA -:10E4700008F02EF9217860680CF00CFC20780FF081 -:10E4800011FA28460AF071FE07F06AF921786068EF -:10E490000EF068F9BDE870400FF0A4BF10B501247C -:10E4A0000AB1002010BD21B1012903D0002420466B -:10E4B00010BD022111F0C6FBF9E72DE9F047040079 -:10E4C00000D1FFDF954D002695F8310058B16670F8 -:10E4D0001620207095F83200A07095F83300E07097 -:10E4E00085F8316068E0287840B12C22A91C2046CC -:10E4F00013F002FB102020702E705DE095F82E00C6 -:10E5000060B10120E07095F82F00A07095F8300000 -:10E5100060701120207085F82E604DE07F48022148 -:10E5200056308246FFF706FF00B1FFDFB5F8569080 -:10E53000062002F03DFA0746072002F039FA384477 -:10E54000C7B2781C00F0FF08B5F85600B84212D1E7 -:10E55000204607F04BFF50BB95F8340070B366704F -:10E56000132020702021A01C13F03DFB0220A0707E -:10E5700085F8346020E040451AD1204607F09CF829 -:10E58000E0B12078132817D1A0783C2814D1A088B6 -:10E59000072102F063FA050000D1FFDF288806F0AA -:10E5A0006BFFA088072102F06BFA00B1FFDF03E0E8 -:10E5B0002146FFF721FE08B1012049E7022150461C -:10E5C000FFF7B8FE18B9B5F856104945BCD1002080 -:10E5D0003EE772E710B5514C207828B10A21BDE81A -:10E5E0001040102001F0A1BAFFF7C6FD08B10C20C1 -:10E5F00002E00FF042FF00202071012060710A212B -:10E60000E170207010BD70B5444D0446287828B1E3 -:10E61000BDE870403221102001F087BA207818B18F -:10E62000012801D0122010E001F090FA20B110F082 -:10E630006EF808B10C2008E0207801F057FA04F1D8 -:10E640001703E21D611C0FF06FFF28710120687134 -:10E650003221E970287070BD70B5304C05462078C5 -:10E6600028B1BDE870400B21102001F05EBA287877 -:10E6700018B1012801D012200EE0FFF77DFD08B18E -:10E680000C2009E0287801F031FA691C0FF0BCFE7B -:10E6900008B1002000E007202071012060710B21EB -:10E6A000E170207070BD10B51C4C217829B130216B -:10E6B000BDE81040102001F038BA008810F02AF8A8 -:10E6C000302110B10020207100E021710120607123 -:10E6D000E170207010BD70B5104C0546207828B14F -:10E6E000BDE870403121102001F01FBA01F02EFA70 -:10E6F00008B10C2005E0287800F0010010F004F8C3 -:10E7000000202071012060713121E170207070BD06 -:10E7100058000020FFFFFFFF1F0000000607002039 -:10E7200010B5FB4C207828B13421BDE810401020F2 -:10E7300001F0FBB901F00AFA20B10FF0E8FF08B1CF -:10E740000C2002E00FF044FF0020207101206071D6 -:10E750003421E170207010BDED48017819B10F210E -:10E76000102001F0E2B900210171102181700F2108 -:10E77000C170FF2181714FF6FF710181E549496840 -:10E780000A7882728A8882814988C1810121417117 -:10E790000170704710B5DE4C207828B12B21BDE800 -:10E7A0001040102001F0C1B90821A01D05F029FA80 -:10E7B00000202071012060712B21E170207010BDBC -:10E7C00070B5D34C217829B1BDE8704043211020A9 -:10E7D00001F0ABB990F90000042816D0032814D03A -:10E7E00098B1011D11D010F1080F0ED010F10C0FCF -:10E7F0000BD010F1100F08D010F1140F05D010F14C -:10E80000280F02D01220207103E0002506F020F826 -:10E8100025714320E07001206071207077E710B50A -:10E82000BB4C217829B12A21BDE81040102001F00D -:10E830007CB9A31D012200F1100110F03AFE002066 -:10E8400020711020A0702A20E070012060712070DB -:10E8500010BD70B5AE4C0546207828B1BDE87040BB -:10E860004621102001F061B909F088FE052804D086 -:10E87000284609F01BFB002000E00C20207101203D -:10E8800060714621E170207041E770B5A04C0546EB -:10E89000207828B1BDE870404421102001F045B92E -:10E8A00001F054F938B10C2020710120607144212D -:10E8B000E17020702BE72946002006F04CFE002076 -:10E8C000F2E770B5924C0546207828B1BDE870405B -:10E8D0004221102001F029B909F091FB50B10AF052 -:10E8E000A2FF38B128780AF064FC287808F026F9ED -:10E8F000002000E00C202071012060714221E170B5 -:10E90000207004E770B5824C0546207828B1BDE838 -:10E9100070401721102001F008B901F017F938B143 -:10E920000C202071012060711721E1702070EEE64B -:10E930002946012006F00FFE0020F2E738B5744D9D -:10E940000446287828B1BDE838404D21102001F058 -:10E95000ECB8A079E179884213D021791F2910D829 -:10E9600061791F290DD80022114612F0C7FA40B96B -:10E970000022E079114612F0C1FA10B9207A072876 -:10E9800001D9122012E04FF6FF70ADF800000AF036 -:10E9900057FF90B909F0F2FD78B900216846FFF7FA -:10E9A000C9FC50B1204605F070FE002028710120FE -:10E9B00068714D21E970287038BD0C20F6E72DE90B -:10E9C000FC47534C054694F82E0020B12821112015 -:10E9D00001F0ABF89BE4282084F83000012184F892 -:10E9E0002E10A8784FF000091A2825D00EDC162822 -:10E9F00031D2DFE800F0303030303021303030308C -:10EA00003030303030303030302121212A2822D0AF -:10EA10000BDCA0F11E000C281DD2DFE800F01C1C4E -:10EA20001C1C1C1C1C1C1C1C1C0D3A38042812D25B -:10EA3000DFE800F0110211022888B0F5706F0AD2E9 -:10EA40001F20884684F82F0028886946FFF7BEFB00 -:10EA500018B1022019E0122017E09DF80000019F74 -:10EA6000002806D007F5B377019E05D106F1ED0623 -:10EA700004E007F1EC07F7E706F267166846FFF7D0 -:10EA800091FB08B1387818B10C2084F82F003EE4CF -:10EA900087F80080A878307084F82F90684601F0DD -:10EAA000AFF834E47CB51A4C0546207820B1252116 -:10EAB000102001F03AF87CBD28886946FFF786FBF4 -:10EAC000020013484FF00001A0F13E000DD00222D9 -:10EAD000227140F8461F0171E1801020A0702520AE -:10EAE000E0700120607120707CBD019A134658329D -:10EAF00082F83E109E68C0F846601E7B80F84A602F -:10EB000092F83E60002EF3D12888E080E5E700000F -:10EB1000060700205800002010B540B10478406876 -:10EB200013B1B0F8480003E0B0F84A0000E0FB2061 -:10EB30001B2908D3814206D8B2F5A47F03D340F63F -:10EB40004800824201D9122010BD002010BD2DE9DD -:10EB5000FC41FA4D0446287828B1BDE8FC4150211B -:10EB6000102000F0E2BF4FF0010885F805801F215A -:10EB700029711021A9705021E9702188E98085F858 -:10EB8000008020886946FFF721FB08B102200DE0D4 -:10EB90002289E18801236846FFF7BEFF30B9A288C9 -:10EBA000618800236846FFF7B7FF10B12871BDE800 -:10EBB000FC819DF800103A20019E002749B186F89B -:10EBC0008981019991F8C81106F5C476B9B1287107 -:10EBD00013E086F8FD80019991F82011FC36002998 -:10EBE000F5D12F71E08870802089B0806088F08036 -:10EBF000A0883081012201990CE07770D7E72F714E -:10EC0000E08870802089B0806088F080A0883081A2 -:10EC100001990022304610F091FD86F80080ECE763 -:10EC200070B5C64D044686B0287830B106B0512183 -:10EC3000BDE87040102000F078BF01206871002608 -:10EC40002E711021A9705121E9702870208803A924 -:10EC5000FFF7BCFA18B10220287106B057E59DF8FD -:10EC60000C0040B100220499E088B1F84830984285 -:10EC700003D9C01A02E00122F5E70020E88063888A -:10EC8000B1F84A00834201D9181A00E00020288117 -:10EC9000009601960296E088ADF802002089ADF852 -:10ECA00004006088ADF80600A088ADF8080068464A -:10ECB00010F044FD2089BDF80410401A6881A08836 -:10ECC000BDF80810401AA881E088BDF80210401A6B -:10ECD000E988884200DC0846E8806088BDF80610B4 -:10ECE000401A2989884200DC08462881B5E770B5BA -:10ECF000924D0446287828B1BDE870403E2110208E -:10ED000000F013BF00F022FF20B10FF000FD08B1AA -:10ED10000C2008E0E2792078611C0FF07BFE08B13E -:10ED2000002000E002202871012068713E21E97076 -:10ED30002870ECE47CB5814C05461F2084F82F0038 -:10ED400028886946FFF742FA18B1022084F82F009C -:10ED50007CBDAA7802B90322EB7803B903239DF89E -:10ED600000603A2501210020002E019E06D086F881 -:10ED70009311019E96F8DC6146BB1FE086F80711EF -:10ED8000019E96F82C613EB9019E96F806611EB967 -:10ED9000019E96F87B6016B184F82F500AE0019D21 -:10EDA00085F80611019981F80821019981F8093146 -:10EDB00084F82F00019981F807017CBD019E96F827 -:10EDC00092611EB9019E96F87B6016B184F82F50AF -:10EDD0000AE0019D85F89211019981F89421019929 -:10EDE00081F8953184F82F00019981F893017CBD59 -:10EDF000524930B491F82E2022B1562130BC112056 -:10EE000000F093BE562281F83020012281F82E2096 -:10EE10008378DA0802D1C278D40801D0122004E045 -:10EE20005B0701D4520704D5112081F82F0030BCB4 -:10EE3000704730BC7EE770B5404C0546207828B15D -:10EE4000BDE870401D21102000F06FBE1F20207112 -:10EE5000012060711D21E170207009F08FFB0428F2 -:10EE60000BD0052809D0A9791220012907D031B18A -:10EE7000022904D0032929D101E00C2026E02978B9 -:10EE800009B1012922D1E97929B1012903D0022947 -:10EE900001D003291AD1698843F6FD720B1F302077 -:10EEA000934213D2AB881B1F93420FD22187A888AD -:10EEB0006087A87907F065FDE87907F0D0FD28782C -:10EEC000012805D00120002107F0F8FD20711EE483 -:10EED0000220F8E770B5194C217829B1BDE87040DF -:10EEE0001E21102000F021BE1F212171012161711E -:10EEF0001E22E270217002781221012A00D01AB974 -:10EF0000407818B1012801D0217187E40025012A39 -:10EF100009D009F033FB0C26052802D008F008FFC1 -:10EF200088B126717AE407F022FD48B107F031FD7F -:10EF3000618F208F09F070F803E0000006070020C1 -:10EF4000122020716AE4257168E42DE9F047F94C3C -:10EF500007469246B4F84400B7F84A200E4690425D -:10EF600000D31046804697F85210104600F0D4FDAA -:10EF7000B4F84610814200D208460546A146B4F8CE -:10EF80004840B7F84800844200D3044697F851102F -:10EF900000F0C2FDB9F84A10814200D208464FF491 -:10EFA000A4721B2C01D0904204D1B8F11B0F0DD0DC -:10EFB00095420BD0A6F8068035817480B080524609 -:10EFC0003946304610F0BAFB01203070BDE8F087BA -:10EFD0002DE9F04786B00546AFF6C800D0E90090AD -:10EFE000D44E804696F82E0028B12121112000F041 -:10EFF0009CFD06B0EAE71F2086F82F00212086F846 -:10F0000030004FF0010A86F82EA0284600F007FED7 -:10F01000002811D109F0B2FA05280CD009F0AEFA97 -:10F02000042808D096F8340028B907F063FAA0F550 -:10F030007F41FF3901D00C20AAE0BE4801AA3E382A -:10F040000190BD480290BB4806211038039004A8E7 -:10F0500001F0D4FC04007DD003210FF0DAFFB6F8F4 -:10F060004E00A4F84800B6F85000A4F84A0096F8FC -:10F070004D00009096F84C30B6F85020B6F84E107F -:10F08000208801F07EFD00B1FFDF208806F0F3F953 -:10F09000218804F10E0000F068FDA8A004F1120719 -:10F0A000006800900321684604F033FD00206946A3 -:10F0B0000A5C3A54401CC0B20328F9D3288A608005 -:10F0C000688AA080A88AE08094F8522094F85110B1 -:10F0D000B6F8520009F01DF80146A062204609F07A -:10F0E00038F8002784F85E7084F85F70687900F063 -:10F0F000FDFC6076D5F80600C4F81A006889E08344 -:10F10000C4F8089084F80C8084F8F8A0012204F177 -:10F11000FC012046FFF719FF8DF8007001216846B9 -:10F1200004F0F7FC9DF8000000F00701C0F3C102F5 -:10F130001144C0F3401008448DF80000401D2076B3 -:10F14000092801D208302076002120460FF061FF07 -:10F15000287B00E010E007F014FC69792879AA1DEB -:10F1600007F0E5FB50B107F014FC69792879AA1D76 -:10F1700007F080FC78B118E0092009E0208806F04B -:10F180007BF92088062101F07BFC00B1FFDF122013 -:10F1900086F82F002DE72146032007F08FFC20B9C9 -:10F1A0006A882988204608F0C0FE86F82F000028CB -:10F1B000F0D0208806F060F92088062101F060FC7C -:10F1C0000028E7D0FFDF14E738B55A4C207820B18B -:10F1D0002221102000F0A9FC38BD1F20207101253C -:10F1E00065712220E070257094F8340018BB09F096 -:10F1F000C5F9052805D007F07DF9A0F57F41FF3955 -:10F2000019D000202071684608F055FF0028E3D18E -:10F210000098008806F030F900980621008801F077 -:10F220002FFC00B1FFDF444884F834500C380078DC -:10F23000FCF760FD38BD0C20207138BD2DE9F04190 -:10F240003C4D044695F82E0028B1BDE8F04123213D -:10F25000112000F06ABC1F2085F82F00232085F8BC -:10F260003000012085F82E00618840F67B438A1F1C -:10F2700030209A4252D2A288961F9E424ED291428C -:10F280004CD8E188B1F5FA7F48D2218940F677461B -:10F29000A1F10A03B34241D2B1EBD20F3ED9618949 -:10F2A000A28991423AD84FF000082088062101F047 -:10F2B000D5FB06004FF0020707D000F093FC20B109 -:10F2C000D6F8F000017841B903E085F82F70BDE869 -:10F2D000F081D6F83C11097809B13A201EE00521E9 -:10F2E0008171D6F8F0004146A0F80880D6F8F020E9 -:10F2F000A0885081D6F8F020E0889081D6F8F020E0 -:10F300002089D081D6F8F000028943899A4204D836 -:10F310008279082A01D89A4203D3122085F82F0057 -:10F32000D5E722884280D6F8F000077085F82F10C4 -:10F33000CDE7000006070020640000201122330002 -:10F34000FEB5F84C0646207820B12421102000F0AC -:10F35000ECFBFEBD012565712420E0702570304670 -:10F3600010F042F808B1002000E0122020710028BF -:10F37000EFD1EC4884F83C503E38316840F87B1FB0 -:10F3800031790171002684F83C606946062001F05D -:10F39000F0FA00B1FFDF684601F0C9FA60B9BDF8C4 -:10F3A0000470029880F8F850684601F0C0FA18B965 -:10F3B000BDF80400B842F4D12671FEBD2DE9F0413C -:10F3C000D84D064695F82E0028B1BDE8F0412C2115 -:10F3D000112000F0AABB1F2085F82F002C2085F8F3 -:10F3E0003000012085F82E003088062101F036FB20 -:10F3F000040007D000F0F6FB20B1D4F8F010087834 -:10F4000030B901E0022026E0D4F83C01007808B1D0 -:10F410003A2020E094200027005D10F0010F19D061 -:10F42000D6F802004860D6F80600886054F8F00F5D -:10F43000718910228181206806F10C010E3012F0D2 -:10F440005BFB21680320087021683088488085F8BC -:10F450002F703CE70C2085F82F0038E72DE9F041AC -:10F46000B04D04460C26287828B1BDE8F04118219B -:10F47000102000F05ABB0AF0E3F9012730BB607995 -:10F48000032824D8A179012921D8A17B03291ED8DA -:10F49000617BE1B107291AD82179052917D2DFE864 -:10F4A00001F0030C030303002288202A0FD3618894 -:10F4B0008A420CD8B1F5804F09D806F0D6F92079E8 -:10F4C00085F83600204606F098FA064600E0122637 -:10F4D0002E716F711820E8702F70F8E610B5914CFE -:10F4E000217829B11A21BDE81040102000F01DBB81 -:10F4F00001781F2902D91220207106E00021217114 -:10F500000278411C104606F0FCFA012060711A21B5 -:10F51000E170207010BD10B5824C217829B12021F6 -:10F52000BDE81040102000F000BB01781F2902D96F -:10F530001220207106E0002121710278411C104642 -:10F5400006F0CEFA012060712021E170207010BD1C -:10F550002DE9FC41734C217829B1BDE8FC411B2108 -:10F56000102000F0E2BA012767710C2121710078A8 -:10F5700000261225012802D0002866D167E006F097 -:10F5800024F900285ED006F056F900285AD00AF077 -:10F5900057F900286CD106F06FF994F8360050B195 -:10F5A000012808D0042806D0002009F005FE00B18B -:10F5B000FFDF26715CE006F0C9F8A0F57F41FF3956 -:10F5C00056D10022072101A801F018FA05004FD0FA -:10F5D00055480321856028460FF0E2FB284606F0D7 -:10F5E000BAFBB4F84E00A5F84800B4F85000A5F8EE -:10F5F0004A00B4F8520001214C3409F016FF0146CC -:10F60000A8620022284608F0CEFF6078009014F827 -:10F61000043B288834F8022934F84E1901F0B1FA75 -:10F6200000B1FFDF288805F026FF284609F0C4FD59 -:10F6300000B1FFDF2671002205F5C4712846FFF7EF -:10F6400084FC15E006F0C1F890B1257110E008F0D7 -:10F65000A7FF054609F0E8FC50B9267145B1288896 -:10F6600005F00AFF2888072101F00AFA00B1FFDF40 -:10F670001B20E0702770BDE8FC812DE9F041294C8A -:10F680000646207828B1BDE8F0412D21102000F079 -:10F690004CBA3088072101F0E1F905004FF001076D -:10F6A00020D095F8690140B995F86400142801D07C -:10F6B000152802D195F8AA0150B10C202071102014 -:10F6C000A0702D20E0703088E08067712770FEE523 -:10F6D0001022B11C05F5B57012F00EFA85F86971AB -:10F6E0000020EBE70220E9E770B50E4C05462078D4 -:10F6F00028B1BDE870402E21102000F016BA2888ED -:10F70000072101F0ABF90221A0B190F869212AB9D3 -:10F7100090F86420142A09D0152A07D00C202071F3 -:10F7200009E00000060700205800002080F8691159 -:10F730000020F4E721711020A0702E20E0702888AE -:10F74000E08001206071207070BD2DE9FC47FD4C08 -:10F750000646207828B13821102000F0E6F9BDE8EF -:10F76000FC8770884BF68032122190420AD848B14B -:10F770004FF0000830886946FEF728FD20B10220CE -:10F78000207110E021710EE0019800F15809851CEC -:10F790002F887288394648460FF0BCFA2888B8424C -:10F7A000F6D184F80480012060713821E170207066 -:10F7B000D5E77CB5E34C0546207820B149211020DF -:10F7C00000F0B3F97CBD28886946FEF7FFFC38B12C -:10F7D00002202071012060714921E17020707CBD00 -:10F7E00001987F22014680F8602080F86120002285 -:10F7F00080F86220A87801F82C0FE8784870287902 -:10F8000088702271E6E71CB5CE4C217821B15421D5 -:10F81000102000F08AF91CBD00886946FEF7D6FC6E -:10F8200048B102202071012060715421E170102143 -:10F83000A17020701CBD019890F8720000B10120E9 -:10F8400000212171A071EEE71CB5BE4C217821B1D9 -:10F850001321102000F069F91CBD00886946FEF7ED -:10F86000B5FC08B1022005E0019890F82C100129A0 -:10F8700002D00C20207106E0602100222271095C78 -:10F8800021720088E080012060711321E170102155 -:10F89000A17020701CBD2DE9F041AA4C05462078CE -:10F8A00028B1BDE8F0414A21102000F03EB9288877 -:10F8B000072101F0D3F8012358B382886D88C688E8 -:10F8C000418803EB4207BD4217D342F210777E43D3 -:10F8D000BF107943B6FBF1F1491E89B24FF4FA76B5 -:10F8E000B14200D931468D4200D22946491C521CF2 -:10F8F000B1FBF2F15143491E8AB290F8961101B959 -:10F900000284E2800020207163714A20E07023703D -:10F91000DDE40220F7E770B58A4C0546207828B16F -:10F92000BDE870404C21102000F0FFB82888072166 -:10F9300001F094F890B1A97811F0010180F8D71086 -:10F9400004D090F8D51009B109F08AFD002020718B -:10F95000012060714C21E170207070BD0220F6E73B -:10F9600078490A781AB15221102000F0DEB80278E6 -:10F970009AB142788AB142881B2A0ED382881B2A08 -:10F980000BD3C288022A08D36E4A0368423242F877 -:10F990000A3F40685060002000E0122008710120FA -:10F9A00048715222CA700870704770B5654C0546A0 -:10F9B000207828B1BDE870405321102000F0B5B880 -:10F9C000287800F0010008F0A1FB287800F0010081 -:10F9D00009F0F7FC00202071012060715321E170D3 -:10F9E000207070BD70B5574D0646287828B1BDE827 -:10F9F00070405521102000F098B8012270881146FF -:10FA000008F087FB04467088012109F00EFD84424E -:10FA100000D204463088012100F06FF8064601212B -:10FA2000002000F06AF8304401219630844206D963 -:10FA300000F19601201AB0FBF1F0401C81B2E98080 -:10FA400000202871012068715521E970287070BD6F -:10FA500070B53C4D0446287828B1BDE870404E2171 -:10FA6000102000F062B800F071F808B10C200DE031 -:10FA7000601C0EF0A5FF207800F0010005F0F8FEF4 -:10FA8000207800F0010006F080FF0020287101209E -:10FA900068714E21E970287070BD70B5294C05461B -:10FAA000207828B1BDE870404B21102000F03DB80F -:10FAB00009F0C6FE08B10C2003E0287806F031F802 -:10FAC00000202071012060714B21E170207070BD19 -:10FAD00010B50178572907D21B4A52F8211019B1E5 -:10FAE000801C8847012010BD002010BD18B10228DD -:10FAF00001D0012070470020704710B5012904D0C3 -:10FB0000022905D0FFDF204610BDC000503001E0C3 -:10FB100080002C3084B2F6E7022903D0C000703098 -:10FB200080B2704780003C30FAE7064A92F83130E4 -:10FB3000002B06D182F8320082F83310012082F8BF -:10FB40003100704706070020C420020010B508F0FD -:10FB500015FD042807D008F011FD052803D009F091 -:10FB60006FFE002800D0012010BD2DE9FE430025C6 -:10FB70000F4680460A260421404604F042F84046DB -:10FB80000FF00EFC062000F013FF044615E0694656 -:10FB9000062000F0EEFE0AE0BDF80400B84206D0F0 -:10FBA0000298042241460E3011F07AFF50B16846A7 -:10FBB00000F0BDFE0500EFD0641E002C06DD002D18 -:10FBC000E5D005E040460FF0F4FBF5E705B9FFDFAF -:10FBD000D8F800000FF0A8F8761E01D00028CAD08F -:10FBE000BDE8FE8390F8721041B990F8C81029B1B1 -:10FBF00090F8C800042801D00120A2E70020A0E767 -:10FC0000017801299DD1416891F8D520002A98D02A -:10FC1000002281F8D520406809F022BC91E710B598 -:10FC2000038843F6FD711A1F8A4223D24288141FAB -:10FC30008C421FD29A421DD8C28940F67B43911F45 -:10FC4000994217D2018A8C1F9C4213D28A4211D842 -:10FC5000428AB2F5FA7F0DD2828A40F67744A2F149 -:10FC60000A03A34206D2B2EBD10F03D9C18A028B99 -:10FC7000914201D9302010BD017911B1012910D173 -:10FC800007E0417929B1012903D0022901D00329D4 -:10FC900007D1007B38B1012805D0022803D0032802 -:10FCA00001D0122010BD002010BD00000844083013 -:10FCB000424301F14A00104480B27047F0B51D463E -:10FCC0000446A818059B083000FB03F205F14A0022 -:10FCD000104486B2B14238BFFFDF0027276067605B -:10FCE000A760E76027616761A761E76127624FF658 -:10FCF000FF706762A082A6F1280080B265776080FD -:10FD0000B0F5004F88BFFFDF608805F13C018842F5 -:10FD100038BFFFDF6088401B3C3880B220801B2842 -:10FD200038BF1B202080A777F0BD816188617047B4 -:10FD30002DE9F04F0D46C188044600F128080089DE -:10FD400021F4004320F4004221F4004620F400474F -:10FD50004FF0010A4FF000099A4208D100F4004028 -:10FD600001F4004188421CBF0020BDE8F08FB7427B -:10FD70000BD9617FB81B401A083885421BDC08EBA1 -:10FD800006000021058041801EE06088617F801BA5 -:10FD9000401AB0F1080B0ED4BBF11B0FB8BFFFDF48 -:10FDA0005D45D4BF29461FFA8BF1681A0204120C74 -:10FDB00018BFBA4204DD84F817900020BDE8F08F28 -:10FDC00008EB06000180428084F817A0BDE8F08FA0 -:10FDD0002DE9F041044600F12802C08820F40043D8 -:10FDE000E07D002808BFBDE8F081D0180288438874 -:10FDF00013448B423CBF0020BDE8F08100279142B4 -:10FE00009CBF0180478013D9891A0D042D0C4580B1 -:10FE10000ED0E088A61D20F40040854288BFFFDF99 -:10FE200030884FF4004121EA0000284330800AE086 -:10FE3000627F008802F108031044083081B26288B2 -:10FE4000A01D00F0A8FBE7750120BDE8F08130B4EB -:10FE5000B0F804C0C488034600F128052CF4004023 -:10FE60002844A44503D10020188230BC7047B3F861 -:10FE70000CC00488A44509D34088ACEB040CA0EB6B -:10FE80000C0084B20CEB0500C01E06E0A4EB0C04D1 -:10FE90005D7FA4B2AC446044401DB1F800C0A445ED -:10FEA00088BF0C80B3F80CC0BCF1000F0CBF4FF042 -:10FEB000010C4FF0000C82F800C00988198230BC98 -:10FEC00070472DE9F041044600F12801808820F4B4 -:10FED00000404518208A002808BFBDE8F081A089AD -:10FEE00010B9A069807F2871A089218A084480B256 -:10FEF000A08129886A881144814238BFFFDF2888A1 -:10FF00006D88A2894119002791421AD175B1A08844 -:10FF1000261D20F40040A84238BFFFDF30884FF490 -:10FF2000004121EA00002843308009E0627F10444C -:10FF3000083081B202F108036288201D00F02BFB1B -:10FF4000A78127820120BDE8F0812DE9F047418992 -:10FF5000B0F804800027044600F1280A414518BF84 -:10FF60004FF400493AD000BF21F400405044468885 -:10FF70006EB1608904F10A0520F40040B04238BF38 -:10FF8000FFDF288829EA00003043288021E0637FD2 -:10FF9000008803F1080C18446389083023F40045F5 -:10FFA0006288284480B204F10A0190420BD2121AEE -:10FFB00092B20CF11B0C62452CBF03F4004229EAFB -:10FFC000030004D204E0801A80B229EA030210433D -:10FFD0000880781C618987B24145C5D13846BDE8A3 -:10FFE000F0872DE9F047B0F808800B46044600F191 -:10FFF0002801B0F80A90808828F4004C01EB0C0529 -:020000040001F9 -:10000000804504BF0020BDE8F087002A1CBF681DA2 -:10001000106023B1627F691D184611F06DFD2F88B5 -:100020006D888DB1E81987B2208904F1080620F4A3 -:100030000040A84238BFFFDF30884FF4004121EA7A -:100040000000284330800AE0607F6288C1190831CF -:1000500000F1080389B204F1080000F09CFAC845D9 -:1000600004BF208960813846BDE8F0878188C08858 -:1000700081420CBF012000207047018980888142A5 -:100080000CBF01200020704730B48488C28800F182 -:10009000280324F4004C22F40041634494421BD012 -:1000A0008289048A15191C885A88A3189D4216D380 -:1000B00012B18A4210D212E0437F0CF1080C1A19D7 -:1000C0006244408892B2801A80B22333984201D2AF -:1000D00011B104E08A4202D130BC0020704730BC2C -:1000E000012070472DE9F007B0F806C0048900F13F -:1000F000280702462CF400457E1924F400492CF40C -:10010000004A002024F400434FF00108D1450AD1F1 -:1001100004F400440CF4004C644504D05082BDE863 -:10012000F00700207047AB4208D992F81DC05B1B56 -:10013000A3EB0C03A3F10804002308E0B2F802C00B -:10014000547FACEB050CACEB040CACF10804002CB8 -:10015000E4DBB2F80EC0BCF1000F0DD0B6F800C061 -:1001600075884DB15B1B10778B42D7DBD089384443 -:10017000A0EB0C00C01E09E0A4EB0C0410778C422D -:1001800008DB507FD38918443044401D5182BDE8BC -:10019000F00770478B42A8BF82F81C80E6DABDE703 -:1001A0002DE9F05F044600F1280AC088934620F448 -:1001B00000400AEB0005608A894608B1484502D232 -:1001C0000020BDE8F09FE08980B1B5F800806E881E -:1001D00008EB0601884218BFFFDF207F4FF00007C1 -:1001E00050EA060108D0002840D04AE04FF000084D -:1001F000A17F46462971F0E7E08948B1617F01445B -:100200004819B4F81F10A0F8051094F82110C17116 -:10021000E18908EB09004944E18128806F80BBF146 -:10022000000F19D0607F298800F1080301440831CC -:1002300089B26288A01D00F0AEF9E781A07F401C62 -:10024000A077A07D00281CBFE088A082A7756782E8 -:10025000E7750120BDE8F09F607FE18908442844EC -:10026000B0F80510A4F81F10C0792EE0E089B4F8AA -:100270001F105044A0EB080020F8031D94F8211033 -:10028000817006EB090086B2E089BBF1000F48449B -:10029000E081A5F800806E800ED0E088A51D20F4D6 -:1002A0000040B04238BFFFDF28884FF4004121EA08 -:1002B000000030432880C0E7E0895044A0EB0800EC -:1002C00030F8031DA4F81F10807884F82100BEE7E1 -:1002D000818800F1280221F4004C6244B0F814C077 -:1002E000C388614518BF99420FD0818969B9806977 -:1002F00068B101898388994209D021F400412830EE -:10030000084411790079884201D1002070471046D5 -:10031000704700F12803407F01F1050C6044106034 -:100320000888002804BFD81E10600888498808443F -:1003300080B270472DE9F04115460A4600F12806C3 -:100340001C46407F531D0344108857880699002897 -:100350001CBFC01C80B226D088429CBF081A80B245 -:1003600013D9401AA042A8BF20461FFA80F8581897 -:100370004246294611F094FB002818BFBDE8F081E1 -:100380004544A4EB080084B2002001198F423CBF11 -:100390004FF0FF30BDE8F081304422462946BDE8E9 -:1003A000F04111F07DBBFA1C97B2F61ED4E72DE99F -:1003B000F04100F128071D46407F4B1D03441646BF -:1003C00008880024B1F80280069A00281CBFC01CCF -:1003D00080B21FD090429CBF101A80B20DD9801AF3 -:1003E000A842A8BF284684B299182246304611F088 -:1003F00083FB281B85B2264400204119414506D8BD -:1004000039182A46304611F077FB601984B220462D -:10041000BDE8F08108F103011FFA81F8FF1ED9E75A -:100420002DE9F04116460A4600F128071D46407F97 -:10043000531D034410880024B2F802800699002856 -:100440001CBFC01C80B21FD088429CBF081A80B25B -:100450000DD9401AA842A8BF284684B2581822468F -:10046000314611F049FB281B85B226440020411972 -:10047000414506D838442A46314611F03DFB601903 -:1004800084B22046BDE8F08108F103021FFA82F829 -:10049000FF1ED9E7401D704770B5044600F12801E2 -:1004A000C288808820F400431944904208D0A28971 -:1004B000002A04BF228A002A02D1A28A904201D1D6 -:1004C000002070BDB1F800C04D8885B1261D20F414 -:1004D0000040A84238BFFFDF30884FF4004121EAD6 -:1004E00000002843308000202082012070BD607F02 -:1004F0000CF1080100F10803084481B26288201D54 -:1005000000F049F8EFE70021C18101774182C17510 -:100510008175704703881380C289002A04BF0020B8 -:100520007047C28800F1280322F400421A440A608E -:10053000C089704710B50446808AA0F57F41FF3915 -:1005400018BFFFDFE088A082E089002818BF0120E3 -:10055000A07510BD4FF6FF71818200218175704733 -:1005600010B50446808AA0F57F41FF3908BFFFDF40 -:10057000A07D28B9A088A18A884204BF002010BDB0 -:10058000012010BD8188828A914205BF807D0028AC -:1005900000200120704710B4B0F800C02CF40044D3 -:1005A000214489B24FF4004491420AD2521A92B2C5 -:1005B0001B339A422CBF0CF4004224EA0C0104D2F3 -:1005C00004E0891A89B224EA0C021143018010BCAC -:1005D000704770B516464FF6FC72C91C01EA020559 -:1005E000D8B10446C01C20F00301A14200D0FFDFB7 -:1005F000201D012108E00246284401D2034600E004 -:100600000023491CC9B21360B142F4D916B104F1F8 -:10061000040001E04FF00000206005FB06F000F14F -:10062000040070BD024600201168002902D008466F -:1006300009681160704702680A60016070474FF6F0 -:10064000FC73C91C1940101A001F90FBF1F0C0B2D6 -:1006500070474FF6FC73C91C1940001D01FB0200D6 -:10066000704770B50C00054609D0082C00D2FFDF9A -:100670001DB1A1B2286800F044F8201D70BD0DB175 -:1006800000202860002070BD0021026803E09388EC -:100690001268194489B2002AF9D100F032B870B555 -:1006A00000260D460446082900D2FFDF206808B95D -:1006B0001EE0044620688188A94202D00168002912 -:1006C000F7D181880646A94201D100680DE005F105 -:1006D000080293B20022994209D32844491B0260C0 -:1006E00081802168096821600160206000E00026A7 -:1006F000304670BD00230B608A8002680A6001608A -:10070000704700234360021D018102607047F0B50D -:100710000F460188408815460C181E46AC4200D38F -:10072000641B3044A84200D9FFDFA019A84200D9B9 -:10073000FFDF3819F0BD2DE9F041884606460188F3 -:10074000408815460C181F46AC4200D3641B384441 -:10075000A84200D9FFDFE019A84200D9FFDF708866 -:100760003844708008EB0400BDE8F0812DE9F041C9 -:10077000054600881E461746841B8846BC4200D3A7 -:100780003C442C8068883044B84200D9FFDFA0196F -:10079000B84200D9FFDF68883044688008EB040065 -:1007A000E2E72DE9F04106881D460446701980B243 -:1007B000174688462080B84201D3C01B208060883D -:1007C000A84200D2FFDF7019B84200D9FFDF60886D -:1007D000401B608008EB0600C6E730B50D46018877 -:1007E000CC18944200D3A41A4088984200D8FFDF66 -:1007F000281930BD2DE9F041C14D04469046A87836 -:100800000E46A04200D8FFDF05EB8607B86A50F815 -:10081000240000B1FFDFB868FFF704FF05000CD02B -:10082000B86A082E40F8245000D3FFDFB54842468E -:10083000294650F82630204698472846BDE8F081E2 -:100840002DE9F0471E460400074602EB06009146DC -:100850008A46C5B227D000218846FF2800D9FFDF8D -:10086000E01C20F00300A04200D0FFDFB24500D919 -:10087000FFDFA34880F800A080F801908570C57064 -:10088000057145718671DFF87CA280F8079000261B -:100890000AF1400A8146FF1C27F003000746B8F121 -:1008A000000F03D005E04FF00101D5E709EB860109 -:1008B00088603AF8161019F8062001D04FF00000B1 -:1008C000FFF787FE761CF6B20744082EE3D3FF1C21 -:1008D00027F003002A460646B8F1000F0DD000208D -:1008E0000221FFF776FE4346002130440F46C846FA -:1008F000C01C20F003021BB110E0C9F84800EFE76C -:1009000008EB81060020B26206E000BFD6F828C0DE -:100910004CF82070401CC0B2A842F7D3491CC9B2A1 -:1009200002EB85000829E3D3001BBDE8F08710B572 -:10093000044603F0BBFC08B1102010BD2078704ABB -:10094000618802EB800092780EE0836A53F82130D0 -:1009500043B14A1C6280A180806A50F82100A060E7 -:10096000002010BD491C89B28A42EED86180052062 -:1009700010BD70B505460C46084603F097FC08B15B -:10098000102070BD082D01D3072070BD25700020F8 -:10099000608070BD0EB56946FFF7EBFF00B1FFDF69 -:1009A0006846FFF7C4FF08B100200EBD01200EBD50 -:1009B00010B50446082800D3FFDF5148005D10BD84 -:1009C0003EB5054600246946FFF7D3FF18B1FFDFA7 -:1009D00001E0641CE4B26846FFF7A9FF0028F8D0E4 -:1009E0002846FFF7E5FF001BC0B23EBD44498978A9 -:1009F000814201D9C0B27047FF2070472DE9F04114 -:100A000090460C460546062901D0072C10D13C4FD4 -:100A1000B86CFFF707FE02004FF6FF7604D0022104 -:100A2000B86CFFF70CFE00E030462880B04201D1E0 -:100A3000002003E742462146FFF7DCFE040002D116 -:100A4000288800F04FF82046F8E6A0F57F43FF3BEA -:100A500001D0082901D300207047CBE6A0F57F42E2 -:100A6000FF3A0BD0082909D2254A9378834205D949 -:100A700002EB8101896A51F820007047002070471D -:100A80002DE9F04105460C46A5F57F4143F20200F1 -:100A9000FF3902D0082C01D30720CFE618494FF0C8 -:100AA00000088A78AA42F8D901EB8406B26A52F8A3 -:100AB0002570002FF1D013483946203050F82420FB -:100AC00028469047B16A062C41F8258001D0072CB2 -:100AD00002D1284600F006F83946B068FFF7ABFDB2 -:100AE0000020ABE610B5064CC2B20221A06CFFF7A5 -:100AF000B0FD0146A06CBDE81040FFF79CBD0000B2 -:100B0000600700202022020070B50E461D461146E7 -:100B100000F0D4F804462946304600F0D8F82044C6 -:100B2000001D70BD2DE9F04190460D4604004FF0C8 -:100B3000000610D00027E01C20F00300A04200D0E7 -:100B4000FFDFDDB141460020FFF78BFD0C3000EBED -:100B5000850617B112E00127EDE7614F04F10C00A3 -:100B6000A9003C602572606000EB85002060606831 -:100B700011F05BF841463868FFF773FD3046BDE879 -:100B8000F0812DE9FF4F564C804681B020689A468F -:100B9000934600B9FFDF2068027A424503D94168D5 -:100BA00051F8280020B143F2020005B0BDE8F08FF3 -:100BB0005146029800F082F886B258460E9900F02D -:100BC00086F885B27019001D87B22068A1463946A3 -:100BD0000068FFF764FD04001FD067802580294668 -:100BE000201D0E9D07465A4601230095FFF766F823 -:100BF0002088314638440123029ACDF800A0FFF73F -:100C00005DF82088C1193846FFF78FF8D9F8000041 -:100C10004168002041F82840C7E70420C5E770B5C7 -:100C20002F4C0546206800B9FFDF2068017AA942F1 -:100C30000ED9426852F8251051B1002342F82530F0 -:100C40004A880068FFF756FD216800200A7A08E00C -:100C500043F2020070BD4B6853F8203033B9401C9A -:100C6000C0B28242F7D80868FFF70EFD002070BDC1 -:100C700070B51B4E05460024306800B9FFDF3068B0 -:100C8000017AA94204D9406850F8250000B1041D3A -:100C9000204670BD70B5124E05460024306800B97C -:100CA000FFDF3068017AA94206D9406850F8251064 -:100CB00011B131F8040B4418204670BD10B50A4636 -:100CC0000121FEF7F3FFC01C20F0030010BD10B59A -:100CD0000A460121FEF7EAFFC01C20F0030010BD08 -:100CE0006C00002070B5044600780E46012813D031 -:100CF000072802D00B2813D10EE0A068616905789F -:100D0000052003F061FA052D0AD078230022052082 -:100D1000616903F0AFF903E00520616903F054FA5B -:100D200031462046BDE8704001F0A8B910B500F189 -:100D30003902C3799478411D64F003042340C371E0 -:100D4000DB070DD04B79547923404B710B79127925 -:100D500013400B718278C9788A4200D9817010BD26 -:100D600000224A710A71F5E74178012900D00C216F -:100D7000017070472DE9F74F88B000208C698DF81D -:100D800004000878012617460D464FF007094FF07A -:100D9000110A4FF00A0B292876D2DFE810F029005B -:100DA000D20215032D036F037E039903C703DC03EF -:100DB0000604330457047004AE04BF04E204EA04DA -:100DC0000A052C0557057A05A605C605D605F605BC -:100DD000F805050637065906AD06EA06EC061B07B8 -:100DE0003B074407550792071B08410808080D08F0 -:100DF00014B120781E2829D0D5F808805FEA0800B1 -:100E000042D001208DF80400686A02228DF8082083 -:100E100006908DF809B0286A0390A8880028EFD0C2 -:100E200098F8001091B10F2910D27DD2DFE801F0BF -:100E30007C134BDCFEFDFCFBFAF9F8089EF7F6008C -:100E4000022821D124B120780C2801D00026F9E312 -:100E50008DF80420B3E10520696A03F0B5F9A8888C -:100E60000728EED1204601F003F9022809D02046D8 -:100E700001F0FEF8032808D9204601F0F9F8072808 -:100E800003D20120207005E003E2002CB8D02078C6 -:100E90000128D6D198F80400C11F0A2903D300BF46 -:100EA00085F81CB04CE2A070D8F80010A163B8F827 -:100EB0000410A18798F8060084F83E0001202870ED -:100EC0000320207046E00728BBD1002C98D0207862 -:100ED0000D28B6D198F8031094F83B20C1F3C00058 -:100EE000C2F3C002104201D0062000E007208907AB -:100EF00007D198F805100142D2D198F806100142A6 -:100F0000CED194F83D2098F8051020EA0202114253 -:100F1000C6D194F83E2098F8061090430142BFD104 -:100F200098F80400C11F00E008E20A29B8D2617FE6 -:100F3000814201D906209AE3D8F800106160B8F820 -:100F40000410218198F80600A072012028700E205C -:100F5000207003208DF80400686A069004F13900BF -:100F60000290601D039017300490DBE0412890D17F -:100F7000204601F07DF8042802D1E078C00704D1B2 -:100F8000204601F075F80F289ED1A88CD5F80C806A -:100F900080B24FF04009666AFFF76AFE32460826C3 -:100FA00041464B460096FFF702FA0D208DF80400EB -:100FB000686A0690606A0290002101A8FFF792FE1D -:100FC0002078042808D0A07F48B1012807D0032842 -:100FD00008D0102020709CE005202070CEE184F81D -:100FE00000A033E71220F5E71128C0D1204601F018 -:100FF0003FF8042802D1E078C00719D0204601F05C -:1010000037F8062805D1E078C00711D1A07F022863 -:101010000ED0204601F02CF8112808E0B3E083E060 -:1010200072E156E136E109E1EAE0D0E017E09ED155 -:10103000102208F1010104F1480010F05DFD607814 -:10104000012809D012202070E078C00765D0A07F69 -:1010500090B301285DD060E084F8009059E0112839 -:1010600085D1204601F004F8082804D0204600F07D -:10107000FFFF132888D12869D0B16869C0B104F195 -:101080007800102208F10101064610F035FD2078A5 -:10109000082812D014202070E078C0070FD0A07F5D -:1010A000022818D06178022912D0032831D034E008 -:1010B00000208DF80400ECE02BE00920EBE70B208A -:1010C0002870296901204870206CC1E9010662E29C -:1010D00008B101287AD10B202870296981F8019084 -:1010E000606A4860206AC1E9020648E2206CE27842 -:1010F0000068C2F34402521ED04000F0010040F0EC -:10110000800000E000200874E06A48614CE2064676 -:10111000FEE3042028700520BAE185F800B08DF8C0 -:1011200004B08EE33946F4E31128C4D1204600F020 -:101130009FFF0A2802D1E078C00704D1204600F0C2 -:1011400097FF1528B7D1102208F1010104F14800DA -:1011500010F0D2FC20780A2810D01620207012201F -:10116000287029690920487004F15800486020302F -:1011700088601038C860206C086184E30B20207000 -:10118000B9E22870FEE3022895D1204600F070FFF6 -:10119000042804D3204600F06BFF082809D320461A -:1011A00000F066FF0E2886D3204600F061FF12286B -:1011B0006FD2A07F0228B8D110208DF80400686A91 -:1011C000069098F801008DF80800F6E33DE2022849 -:1011D000ABD1204600F04CFF00285AD0204600F04A -:1011E00047FF0128F9D0204600F042FF0C28F4D038 -:1011F00004208DF8080098F801008DF809005AE7DE -:101200001128FCD1002CFAD020781728F7D161786A -:10121000E06A022910D0002101EB4101182606EBFB -:10122000C1011022405808F1010110F065FC0520B1 -:10123000696A00F010FF1DE10121EDE70B28DED106 -:10124000002CDCD020781828D9D16178E06A0229F6 -:101250001BD0002101EB4101102202EBC1014158DA -:10126000B8F8010008806078E16A02280FD00020F9 -:1012700000EB4002142000EBC2000958404650F831 -:10128000032F0A604068486039E00121E2E701204D -:10129000EEE7A1E11128B2D1002CB0D020781928B6 -:1012A000ADD16078E16A022811D0002000EB400245 -:1012B0001C2000EBC2001022085808F1010110F0B8 -:1012C0001BFC0520696A00F0C6FE1A20D4E001204C -:1012D000ECE7082893D1002C91D020781A288ED1E1 -:1012E000E06A98F80120017862F347010170E16A31 -:1012F000D8F8022041F8012FB8F8060088800520B0 -:10130000696A00F0A8FE3CE3112898D1002C98D01F -:1013100020781B2893D16178E06A02290CD0002143 -:1013200001EB4101202202EBC1011022405808F1DB -:10133000010110F0E1FBE2E70121F1E785F81C90E3 -:10134000EFE338780128A6D11C2204F11C0079684B -:1013500010F017FCE079C10894F83B0001EAD001D5 -:10136000E07861F30000E070217F09B1297733E173 -:10137000217803290AD0C0073FF42DAE032028703E -:101380008DF804B0686A06904120B1E3607FA178CF -:1013900088423FF6CFAD02262671E179204621F042 -:1013A000E001E171617A21F0F0016172A17A21F02E -:1013B000F001A172FFF7BAFC2E708DF804B0686AD4 -:1013C00006908DF80890ADE638781128CFD18DF8C9 -:1013D0000490696A0691916800208DF814000391C9 -:1013E000ADF8089008466168016021898180A17A82 -:1013F000817104202070E0E238781128B7D18DF88F -:101400000490686A0690381D02AB07C883E807009D -:101410004120ADF8080000208DF8140008460C218A -:101420000170A88CCA4680B2FE684FF04009D4F81B -:101430002080FFF72FFC3146082642464B46009697 -:10144000FEF7EEFF002101A8FFF74CFCE07820F04A -:101450003E00801CE0702078052801D00F200BE0B2 -:10146000A07F20B1012802D0032803D03DE184F8F9 -:1014700000A04EE62670E9E42070E7E438780328FF -:10148000A4D178680168A1664068E06605202870EC -:101490008DF80400686A069044E63878032895D1F0 -:1014A00078680168216740686067206C68B9A07F30 -:1014B00028B1012803D0062028700420E8E785F829 -:1014C0000090FE4820646064F9E385F80090F6E33C -:1014D0003878022892D1387900287CD1A07F022860 -:1014E0000BD00328F1D1607801280BD0A07994F8B3 -:1014F0003A1001280AD0F1480BE0B86800286BD0F8 -:10150000206411E0A17994F83A00F2E7B868002865 -:10151000F5D02064E078C00701D0012901D0E74868 -:1015200002E0F8680028EAD06064CEE78DF804B0E5 -:10153000696A0691E1785846C90709D0617802299D -:1015400003D1A17F29B1012903D0A17F032900D0B4 -:101550000820287064E33878112891D1B86828628F -:1015600009202870E0782969C0070DD081F8019022 -:10157000206A4860606A886004F16800C860A07FE3 -:1015800002287FF4BFADB1E501204870206C4860AF -:1015900004F16800886004F13800C860201D08610B -:1015A000206B4861606B88612AE2E1783878C9076E -:1015B00001D0062100E00A2188428BD1207807283B -:1015C0001DD084F800A000BF8DF80490686A0690D2 -:1015D000286A039001E0CAE08DE20024ADF808A07B -:1015E0008DF81440032100F8011B5168102210F0FF -:1015F00083FA002101A8FFF775FB2C6226E408207E -:101600002070E1E738781128A7D18DF80490686A36 -:1016100006909068039000208DF814000398ADF8B0 -:1016200008A0042100F8011B102204F1680110F049 -:1016300063FA002101A8FFF755FB2078092802D0A2 -:10164000132019E73CE384F800B016E0E17838781D -:10165000C90701D0062100E00A218842ADD110223D -:1016600004F14800796810F01BFA10B104202877C3 -:10167000EAE3207809283FF4EEAC0C2081E5E0781D -:10168000C10738D0A17F012902D002291BD02EE04A -:101690000D202870296981F801B06078012809D0EF -:1016A000206A4860606A886004F16800C860103091 -:1016B000086129E5606A4860206A886004F1780062 -:1016C000C8601038F4E7C0F3440114290FD24FF07A -:1016D000006101EBB0104FEAB060E0706078012863 -:1016E00003D010202070042057E10620C4E6607863 -:1016F00001283FF476AC0E2043E538780928ADD1B7 -:1017000085F800B00F208DF80400686A06905068D4 -:101710000290002101A8FFF7E5FAE8E7E078C007AA -:101720000AD0A07F012803D10F202870042036E1C1 -:10173000102028700E2032E115202870296902201F -:101740004870206C48606078012805D004F178006A -:1017500088601038C86053E104F168008860103078 -:10176000F8E738780228CAD138790028E0D02877FD -:1017700068E338781328FBD185F800A02969082090 -:10178000487078684860607801280DD004F16800DE -:1017900088601030C860206B0861606B486104F19C -:1017A00058008861A06A22E004F17800886010384F -:1017B000F0E738780728DBD16078012801D01320C2 -:1017C00029E2A178A06A0844C1F1100110F00BFAD7 -:1017D0001220287029690920487004F158004860D7 -:1017E000203088601038C860206C086144E0C8610F -:1017F000E06A086204E138780828B9D1102204F1BF -:101800004800796810F04CF908B10B202FE72078D8 -:101810000B2812D02046FFF789FAA178A06A084465 -:10182000C1F1100110F0DFF91620287008208DF8A2 -:101830000400686A0690002072E0132028708DF87A -:1018400004B0686A06908DF808A06BE43878112817 -:101850008ED1B86828621420287029690920487040 -:1018600004F158004860103088601030C860606C27 -:1018700008616078012806D004F139004861206BC6 -:101880008861606BB3E7601D4861606B8861206BA5 -:10189000ADE7387808288ED18DF80490686A0690F4 -:1018A000286A00260D210390ADF808A08DF8146079 -:1018B00000F8011B1022796802E000007423020086 -:1018C00010F01AF9002101A8FFF70CFA2E626078D7 -:1018D000012801D01520CFE51620287008208DF8AA -:1018E0000400686A029606901BE038780B2884D1C1 -:1018F000162028706078022802D12046FFF716FAD9 -:10190000A17878680844C1F1100110F06CF901E089 -:1019100083E215E008208DF80400686A0690786874 -:101920000290A0788DF80C004DE538780F288FD103 -:10193000E079C00773D01720287009202FE01146E6 -:1019400001A8FFF7CFF9FFF7E2BB38781028A2D142 -:101950001422391D04F11C0010F013F9E16A208DE6 -:10196000A1F80900E16AA078C871E179E26A01F0A2 -:1019700003011172E16A627A0A73E16AA07A81F85E -:10198000240000E09BE1242078E6192043E1387828 -:101990001128ACD1B86828621A20287005208DF86B -:1019A0000400686A0690CAE7387803289FD16078F7 -:1019B000E16A022802D0012001E05CE2002000EB95 -:1019C0004002142000EBC2027B688A58196811603B -:1019D000596851601B212970D5E9041205234B7009 -:1019E000636A4B606678E36A022E01D0012600E04C -:1019F000002606EB460600EBC6001858C1E90202B5 -:101A0000686A4862089800F050FB9CE738780E2816 -:101A100071D16078E26A022802D0012001E0ADE1D4 -:101A2000002000EB4001102000EBC1000223105801 -:101A3000093279680EF01EFB1C20287029690420E9 -:101A40004870206A4860E06A09308860FB4881E697 -:101A500038780D284FD16178E06A022901D0012140 -:101A600000E0002101EB4101182606EBC101A2783C -:101A70004058796810F040F86078E16A022801D097 -:101A8000012000E0002000EB400206EBC200B0465F -:101A90000858A1780844C1F1100110F0A4F88DF89D -:101AA0000490686A0690286A00260390ADF808A0A2 -:101AB0008DF81460062101706178E26A022901D074 -:101AC000012100E0002101EB410308EBC301401CB0 -:101AD0005158102210F010F8002101A8FFF702F968 -:101AE0001D202E6228708DF804B0686A06900B20C5 -:101AF0008DF8080067E481E0387811287ED18DF8F0 -:101B00000490686A0690B86803900B20ADF808004E -:101B1000039880F800906278E16A022A02D00122DC -:101B200001E091E1002202EB4202102303EBC2022A -:101B300089580988A0F801106178E26A022901D069 -:101B4000012100E0002101EB4103142101EBC3015D -:101B500051580A6840F8032F4968416056E0272031 -:101B6000287001208DF814002DE424202870002016 -:101B70009FE01F204FE0387811283FD18DF8049066 -:101B8000686A0690B868039000208DF814000398E6 -:101B9000ADF808A0082606706178E26A022901D033 -:101BA000012100E0002101EB41031C2101EBC301F5 -:101BB000401C515810220FF09FFF002101A8FFF791 -:101BC00091F8202028708DF804B0686A06908DF88E -:101BD000086061E43878112810D18DF80490686AA3 -:101BE0000690B86803900820ADF808000398092112 -:101BF0000170E16909784908417000E094E0E16909 -:101C000051F8012FC0F802208988C18020781D2852 -:101C1000ABD1A4E7222028708DF804B0686A069042 -:101C20008DF808A08BE6387811287DD1B868286235 -:101C300023202870296904204870206A4860E06ADF -:101C4000093088607E4885E538780D286CD1617848 -:101C5000E06A022901D0012100E0002101EB4101ED -:101C6000202606EBC1011022405879680FF044FF8E -:101C70008DF80490686A0690286A0390ADF808A071 -:101C800080F800B06278E16A022A01D0012200E007 -:101C9000002202EB420206EBC202401C89581022CD -:101CA0000FF02AFF0020286221781D29B1D02421BD -:101CB00029708DF81400002101A8FFF713F80326FE -:101CC000DFE0E078C00702D04FF0060C01E04FF0F3 -:101CD000070C6078022809D04FF0000000EB0401E7 -:101CE00001F1090105D04FF0010004E04FF00100BF -:101CF000F4E74FF000000B78204413EA0C030B705C -:101D000010F8092F02EA0C02027004D14FF01C0CEB -:101D100084F800C092B394F801C0BCF1010F00D068 -:101D2000E3B990F800C000E053E05FEACC7804D05B -:101D30002CF00106067018260EE05FEA8C7804D5B8 -:101D40002CF0020606701E2606E05FEA4C7805D5E8 -:101D50002CF00406067021262E70032694F801C08C -:101D6000BCF1020F00D0DAB991F800C05FEACC787C -:101D700005D02CF001060E7017210FE01AE05FEA83 -:101D80008C7804D52CF002060E70192106E05FEA6B -:101D90004C7805D52CF004060E701B21217000260E -:101DA0000078D0BBCAB3C3BB1D20207035E03878A3 -:101DB000122847D1282061E42078012842D00C283D -:101DC00040D02046FEF7D0FF0B208DF80400686A53 -:101DD000069037E038784FF02608112805D01220F9 -:101DE0001070032685F800804BE08DF80490686A37 -:101DF0000690B86803900220ADF8080001208DF825 -:101E00001400039805210170297F4170114601A833 -:101E1000FEF768FF064685F80080012E12D030E0FC -:101E200001208DF80400686A069003208DF80800F0 -:101E3000287F8DF809000020287716E06C23020027 -:101E400070220200287F80B11E202070252028707B -:101E50008DF804B0686A069002208DF808003946B3 -:101E600001A8FEF73FFF06460BE00CB1FE202070F4 -:101E70009DF8040028B1002101A8FEF733FFFEF70A -:101E8000E5BF0BB03046BDE8F08FF0B587B00C462B -:101E90004E6900218DF804100120257803460227A1 -:101EA0004FF0070C85B1012D50D0022D36D1FE2008 -:101EB00030708DF80030606A059003208DF80400C2 -:101EC000207E8DF8050060E02179012922D00229C9 -:101ED00029D0032924D0042920D1B17F02291DD182 -:101EE00031780D1F042D04D30A3D032D01D31E2983 -:101EF00014D12189022911D38DF80470237020890F -:101F00009DF80410884217D20A208DF80000606AFC -:101F1000059057E070780128EED0052007B0F0BD9D -:101F20001E203070E8E771780229F6D131780C294B -:101F3000F4D18DF804C0E1E71120083402F8040B55 -:101F400094E80B0082E80B000320E7E71578112DD9 -:101F5000E4D18DF800C0656A0595956802958DF805 -:101F6000101094F804E0BEF1010F13D0BEF1020F7F -:101F70002DD0BEF1030F1CD0BEF1040FCED1ADF8B1 -:101F800004700E202870207E687000216846FEF7DD -:101F9000A9FE0CE0ADF804700B202870207E002113 -:101FA00000F01F0068706846FEF79CFE3770002046 -:101FB000B4E7ADF804708DF8103005202870207E4D -:101FC0006870277011466846FEF78CFEA6E7ADF8EC -:101FD00004C02B70207F6870607F00F00100A87043 -:101FE000A07F00F01F00E870E27F2A71C0071CD0BC -:101FF00094F8200000F00700687194F8210000F0C8 -:102000000700A87100216846FEF76CFE2868B063DF -:10201000A888B087A87986F83E00A06940787077D4 -:102020002879B0700D203070C1E7A9716971E9E7B6 -:1020300000B587B005280CD101208DF800008DF87F -:102040000400002005918DF8050001466846FEF762 -:1020500049FE07B000BD70B50C46054602F0B4F865 -:1020600021462846BDE870407823002202F002B8DD -:1020700008B1007870470C207047000070B50C0064 -:1020800005784FF000010CD021702146F3F79DF840 -:1020900072482178405D884201D1032070BD022042 -:1020A00070BDF3F792F8002070BD027B032A05D0C3 -:1020B00000220A704B780B2B02D003E004207047FB -:1020C0000A770A62027B9300521C0273C1500320FC -:1020D0007047F0B587B00F4605460124287B05EB15 -:1020E000800050F8046C7078411E0C290AD25B49BC -:1020F0003A46123101EB8000314650F8043C284644 -:10210000984704460CB1012C11D1287B401E10F0D9 -:10211000FF00287301D00324E0E70C208DF80000B5 -:10212000706A0590002101966846FFF7A7FF032C0F -:10213000D4D007B02046F0BD70B515460A46044617 -:1021400029461046FFF7C5FF064674B12078FE28E1 -:102150000BD1207E30B100202870294604F10C00FC -:10216000FFF7B7FF2046FEF7FFFD304670BD704712 -:1021700070B50E46044688210FF057FD0225012E4A -:1021800003D0022E04D0052070BD0120607000E055 -:1021900065702046FEF7E8FDA577002070BD28B1E8 -:1021A000027E1AB10A4600F10C01C5E70120704712 -:1021B00010B5044686B0052002F006F82078FE2807 -:1021C00006D000208DF8000069462046FFF7E7FFA3 -:1021D00006B010BD7FB50E4600218DF80C10417879 -:1021E0000B2903D00C2903D0002405E0846900E00A -:1021F00044690CB1217E91B16D4601462846FFF736 -:1022000054FF032809D1324629462046FFF794FFA0 -:102210009DF80C10002900D0042004B070BD04F11A -:102220000C05EAE710B590B00C4607900B48042166 -:10223000801E08900A488DF8191009900F9269467F -:1022400006A8FFF7C7FF002805D1102220460199F4 -:102250000FF052FC002010B010BD000076220200EA -:102260006C23020070B50D46040011D085B1210128 -:1022700028460FF0B8FC10224E4928460FF03CFCCF -:102280004C4801210838018044804560002070BD21 -:10229000012070BD70B5474E00240546083E10E091 -:1022A0007068AA7B00EB0410817B914208D1C17B4E -:1022B000EA7B914204D10C2229460FF0F1FB30B1A8 -:1022C000641C30888442EBDB4FF0FF3070BD204649 -:1022D00070BD70B50D46060006D02DB1FFF7DAFFD0 -:1022E000002803DB401C14E0102070BD314C083C7A -:1022F00020886288411C914201D9042070BD616828 -:10230000102201EB001031460FF0F6FB2088401C34 -:1023100020802870002070BD70B514460D0018D0C4 -:10232000BCB10021A170022802D0102811D105E013 -:10233000288870B10121A170108008E02846FFF7BD -:10234000A9FF002805DB401CA070A8892080002080 -:1023500070BD012070BD70B5054614460E000BD04F -:1023600000203070A878012808D005D91149A1F1C2 -:1023700008010A8890420AD9012070BD24B128784A -:1023800020702888000A5070022008700FE064B1A5 -:102390004968102201EB0011204610390FF0ACFB08 -:1023A000287820732888000A60731020307000207D -:1023B00070BD0000780000202DE9F04190460C46E9 -:1023C00007460025FE48072F00EB881607D2DFE8F6 -:1023D00007F00707070704040400012500E0FFDFFA -:1023E00006F81470002D13D0F548803000EB8801FA -:1023F00091F82700202803D006EB4000447001E04C -:1024000081F8264006EB44022020507081F82740D6 -:10241000BDE8F081F0B51F4614460E460546202A59 -:1024200000D1FFDFE649E648803100EB871C0CEB6A -:10243000440001EB8702202E07D00CEB46014078C8 -:102440004B784870184620210AE092F825304078F1 -:1024500082F82500F6E701460CEB41000570407854 -:10246000A142F8D192F82740202C03D00CEB440471 -:10247000637001E082F826300CEB41042023637086 -:1024800082F82710F0BD30B50D46CE4B441900221E -:10249000181A72EB020100D2FFDFCB48854200DD43 -:1024A000FFDFC9484042854200DAFFDFC548401CD3 -:1024B000844207DA002C01DB204630BDC148401CB5 -:1024C000201830BDBF48C043FAE710B50446016884 -:1024D000407ABE4A52F82020114450B102200844EC -:1024E00020F07F40F0F751FB94F90810BDE8104050 -:1024F000C9E70420F3E72DE9F047B14E803696F89E -:102500002D50DFF8BC9206EB850090F8264034E0B1 -:1025100009EB85174FF0070817F81400012806D0BB -:1025200004282ED005282ED0062800D0FFDF01F089 -:10253000E5F8014607EB4400427806EB850080F899 -:10254000262090F82720A24202D1202280F82720BE -:10255000084601F0DEF82A4621460120FFF72CFF4D -:102560009B48414600EB041002682046904796F8CD -:102570002D5006EB850090F82640202CC8D1BDE8F0 -:10258000F087022000E003208046D0E710B58C4C95 -:102590002021803484F8251084F8261084F8271030 -:1025A000002084F8280084F82D0084F82E10411EA5 -:1025B000A16044F8100B2074607420736073A073E2 -:1025C0008449E07720750870487000217C4A103CEF -:1025D00002F81100491CC9B22029F9D30120F0F7F3 -:1025E000C2F90020F0F7BFF9012084F82200F9F7C2 -:1025F00053FB7948F9F75FFB764CA41E20707748AF -:10260000F9F759FB6070BDE81040F0F739B910B523 -:10261000F0F75BF96F4CA41E2078F9F765FB607842 -:10262000F9F762FBBDE8104001F0A0B82020704728 -:102630002DE9F34F624E0025803606EB810A89B002 -:102640009AF82500202822D0691E02916049009541 -:1026500001EB00108146D0E90112C0680391CDE979 -:102660000420B08BADF81C00B07F8DF81E009DF8E3 -:102670001500C8B10227554951F820400399E219C5 -:10268000114421F07F41019184B102210FE001202A -:10269000F0F769F90020F0F766F9F0F734F901F086 -:1026A00065F886F82F508AE00427E4E700218DF8CA -:1026B0001810022801D001281BD1039839190144B0 -:1026C0000998081A20F07F4033280BD903208DF891 -:1026D00015000398C4F13201401A20F07F403224E3 -:1026E00003900CE096F8240018B9F0F753FC00288A -:1026F0004DD0322C03D214B101F02CF801E001F0DE -:1027000035F8344A107820B393465278039B121B55 -:1027100000219DF81840984601281BD0032819D0A5 -:102720005FF000008DF81E00002A04DD981A039067 -:1027300001208DF818009DF81C0000B102210398BB -:10274000274A20F07F40039003AB099801F01AF864 -:1027500010B110E00120E5E79DF81D0018B99BF8C5 -:102760000000032812D08DF81C50CDF80C808DF895 -:1027700018408DF81E509DF8180058B10398012399 -:10278000C11900221846F0F741F906E000200BB00D -:10279000BDE8F08F0120F0F7E6F899F90C2001234D -:1027A00000200199F0F732F9012086F82F008AF80D -:1027B000285003482022694680300FF0E2F911E0EA -:1027C000AC090020FF7F841E0020A107B822020070 -:1027D000AC0700208A000020233F0100F7240100FD -:1027E000FFFF3F000120D2E72DE9F05FDFF84084D2 -:1027F000064608EB860090F82550202D1FD0A8F142 -:1028000080002C4600EB8617A0F50079DFF824B491 -:1028100005E0A24607EB4A004478202C0AD0F0F7E6 -:1028200041F909EB04135A4601211B1D00F0AAFFD0 -:102830000028EED0AC4202D0334652461EE0FE489D -:1028400008B1AFF30080F0F72DF998F82F206AB1A6 -:10285000D8F80C20411C891A0902CA1701EB126131 -:102860000912002902DD0020BDE8F09F3146FFF784 -:10287000DFFE08B10120F7E733462A462021042075 -:10288000FFF7C8FDEFE72DE9F041E94C2569F0F7C6 -:1028900009F9401B0002C11700EB1160001200D4BF -:1028A000FFDF94F8220000B1FFDF012784F82270D7 -:1028B00094F82E00202800D1FFDF94F82E6020200D -:1028C00084F82E00002584F82F5084F8205084F8D6 -:1028D0002150DA4825600078022833D0032831D00F -:1028E00000202077A068401C05D04FF0FF30A0608A -:1028F0000120F0F738F80020F0F735F8F0F733F959 -:10290000F0F72BF9EFF7FFFF0EF094FBCC480560D2 -:1029100005604FF0E0214FF40040B846C1F8800256 -:10292000F0F7BBF994F82D703846FFF75DFF0028EB -:10293000FAD0BF48803800EB871010F81600022844 -:1029400002D006E00120CCE73A4631460620FFF7E8 -:1029500033FD84F8238004EB870090F826002028BC -:1029600004D0B648801E4078F9F7C4F9207F0028CB -:1029700003D0F0F7E8F82577657749E50146AC48DC -:1029800010B590F82D200024803800EB821000BF95 -:1029900010F814302BB1641CE4B2202CF8D32020A2 -:1029A00010BDA84800EB0410016021460120FFF78C -:1029B00003FD204610BD10B5012801D0032800D129 -:1029C00071B39B4A92F82D30994C0022803C04EB65 -:1029D000831300BF13F812400CB1082010BD521C25 -:1029E000D2B2202AF6D3954A48B1022807D0072947 -:1029F00016D2DFE801F01506080A0C0E10000021BF -:102A00000AE01B2108E03A2106E0582104E0772182 -:102A100002E0962100E0B52151701070002010BD39 -:102A2000072010BD854810B54078F0F7AEF880B2A9 -:102A300010BD10B5202811D27D4991F82D30A1F19B -:102A4000800202EB831414F810303BB191F82D3062 -:102A500002EB831212F81020012A01D0002010BDD1 -:102A600091F82D2001460020FFF7A6FC012010BDA3 -:102A700010B5F0F717F8BDE81040F0F786B82DE96B -:102A8000F0410E466A4F01782025803F0C4607EB47 -:102A9000831303E0254603EB45046478944202D097 -:102AA000202CF7D108E0202C06D0A14206D103EB60 -:102AB00041014978017007E00020A9E403EB4400DC -:102AC00003EB4501407848705F4F7EB127B100218C -:102AD00040F2DA30AFF300803078A04206D127B15F -:102AE000002140F2DD30AFF30080357027B10021C6 -:102AF00040F2E230AFF30080012089E410B5426873 -:102B00000B689A1A1202D41702EB1462121216D42E -:102B1000497A91B1427A82B94C4A006852F8211040 -:102B2000126819441044001D891C081A0002C117BC -:102B300000EB11600012322801DB012010BD0020E3 -:102B400010BD2DE9F047814639483E4E00EB81002B -:102B5000984690F825402020107006F50070154624 -:102B600000EB81170BE000BF06EB04104946001D87 -:102B7000FFF7C4FF28B107EB44002C704478202CE9 -:102B8000F2D1297888F8001013E000BF06EB041595 -:102B9000291D4846FFF7B2FF68B988F80040A97BB5 -:102BA00099F80A00814201D80020E8E407EB4400CC -:102BB0004478202CEAD10120E1E42DE9FC410E46C5 -:102BC000074600241F4D08E09DF8000005EB0010AB -:102BD0008168384600F0EAFD01246B4601AA3146BF -:102BE0003846FFF7AEFF0028EED02046BDE8FC8156 -:102BF00070B504460E4801258038A54300EB8411CA -:102C000000EB851040220EF077FF0F4E26B1002119 -:102C100040F25C40AFF30080054800EB850100EB1B -:102C20008400D0F82500C1F82500AEB100210FE0E6 -:102C30002C0A0020FFFF3F00000000008A00002057 -:102C400000F50040AC07002000000000B8220200A0 -:102C50004FF48C60AFF30080284670BD2DE9FC4135 -:102C60008446FF481546089C00EB85170E4617F86A -:102C70001400012803D0022801D00020B6E70B463B -:102C8000F84A0121604600F07DFDA8B101AB6A461B -:102C900029463046FFF755FF70B1F1489DF80420F2 -:102CA0009DF80010803000EB85068A4208D02B4644 -:102CB0000520FFF7AFFB0BE02A462146042014E075 -:102CC000202903D007EB4100407801E096F8250069 -:102CD00007EB440148709DF80000202809D007EB5D -:102CE000400044702A4621460320FFF765FB01207F -:102CF0007CE706F8254F0120F070F3E7DA4901EB95 -:102D00000010001DFFF7E1BB7CB51D4613460446CD -:102D10000E4600F1080221461846EFF743FF94F9EA -:102D200008000F2804DD1F3820722068401C206036 -:102D300096B10220CD4951F8261046182068694600 -:102D4000801B20F07F40206094F908002844C01CBC -:102D50001F2803DA012009E00420EBE701AAEFF7BE -:102D600021FF9DF8040010B10098401C00900099CC -:102D7000206831440844C01C20F07F4060607CBD66 -:102D80002DE9FE430C460646097860799072207959 -:102D900098461546507241B1B148803090F82E10D7 -:102DA00020290AD00069401D0BE0D4E902232179D3 -:102DB00003B02846BDE8F043A6E7AD484178701D52 -:102DC000084420F07F47217900222846A368FFF7B6 -:102DD0009BFF3946284600F0E9FCD4E9023221790C -:102DE0006846FFF791FF41462846019CFFF7E5FE44 -:102DF0002B4622460021304600F0C4FC002803D1B7 -:102E00003146284600F0D2FCBDE8FE832DE9FE4F96 -:102E1000814600F087FC38B15FF0000799F80000A8 -:102E200020B10020BDE8FE8F0127F7E78C4D914CC3 -:102E30004FF0000A803524B1002140F2D340AFF3B7 -:102E4000008095F82D8085F823A0002624B100216C -:102E50004FF49B60AFF300801FB94046FFF7C8FEF8 -:102E6000804624B100214FF49C60AFF30080EFF75F -:102E700019FE43466A464946FFF782FF24B1002106 -:102E800040F2E640AFF3008095F82E0020280CD0E9 -:102E900029690098401A0002C21700EB1260001264 -:102EA00003D5684600F082FC012624B100214FF4CE -:102EB0009E60AFF3008095F823000028BBD124B1B9 -:102EC000002140F2F640AFF30080EFF7EBFD6B46D8 -:102ED000644A002100F056FC0028A3D027B94146DF -:102EE0006846FFF76AFE064326B16846FFF7EDFA2B -:102EF000C9F8080024B1002140F20950AFF3008066 -:102F000001208FE72DE9FF5F8A46814600F00AFC29 -:102F1000534C803410B39AF80000002710B10128F8 -:102F200000D0FFDF534D25B1002140F27F50AFF3B9 -:102F300000800120A84600905FEA080604D0002126 -:102F400040F28750AFF30080009800F0E2FB94F865 -:102F50002D50002084F8230067B119E094F82E006A -:102F60000127202800D1FFDF9AF800000028D9D0DF -:102F7000FFDFD7E72846FFF73BFE054626B10021D5 -:102F800040F29150AFF3008094F823000028D3D191 -:102F900026B1002140F29B50AFF30080EFF782FD95 -:102FA00083462B4601AA5146FFF7EAFE5FEA060870 -:102FB00004D0002140F2A250AFF300803B462A46E5 -:102FC00001A95846CDF80090FFF748FE064604EBED -:102FD000850090F828B0B8F1000F04D0002140F22D -:102FE000A950AFF3008000F089FB0090B8F1000F0A -:102FF00004D0002140F2AF50AFF3008094F82300DA -:10300000002899D1B8F1000F04D0002140F2B75048 -:10301000AFF3008014490DF1040C01EB09109CE89A -:103020000E0000F1040080E80E002EB35FEA0806EF -:1030300004D0002140F2C450AFF300803BEA070007 -:1030400020D094F82E0020281CD126B1002140F277 -:10305000C950AFF300802846FFF7C6FB90B90CE0DB -:10306000AC090020FFFF3F00AC070020B82202009F -:103070008A0000200000000010E09AF80000D8B399 -:10308000012849D0B8F1000F04D0002140F2E650E9 -:10309000AFF30080284600F02AFB01265FEA08050E -:1030A00004D0002140F2EF50AFF30080009800F010 -:1030B00030FB25B1002140F2F350AFF300808EB118 -:1030C00094F82D0004EB800090F82600202809D009 -:1030D00025B1002140F2FA50AFF30080F948407862 -:1030E000F8F708FE25B1002140F2FF50AFF3008051 -:1030F00004B03046BDE8F09FFFE7B8F1000F04D000 -:10310000002140F2D150AFF3008094F82D204946C1 -:103110000420FFF751F9C0E7002E3FF40DAF002166 -:1031200040F2DC50AFF3008006E72DE9F84FE64DA2 -:10313000814695F82D004FF00008E44C4FF0010B4C -:10314000474624B1002140F20D60AFF3008058469D -:1031500000F0DFFA85F8237024B1002140F21260FC -:10316000AFF3008095F82D00FFF742FD064695F875 -:10317000230028B1002CE4D000214FF4C3604BE0C1 -:1031800024B1002140F21C60AFF30080CE488038AB -:1031900000EB861111F81900032856D1334605EBD0 -:1031A000830A4A469AF82500904201D1012000E0A6 -:1031B000002000900AF125000021FFF760FC014685 -:1031C0000098014203D001228AF82820AF77E1B3AA -:1031D00024B1002140F22160AFF30080324649461D -:1031E0000120FFF7E9F89AF828A024B1002140F265 -:1031F0002C60AFF3008000F081FA834624B10021F7 -:1032000040F23160AFF3008095F8230038B1002C14 -:1032100097D0002140F23560AFF3008091E7BAF11A -:10322000000F07D095F82E00202803D13046FFF775 -:10323000DBFAE0B124B1002140F24960AFF3008035 -:10324000304600F054FA4FF0010824B1002140F25A -:103250005260AFF30080584600F05BFA24B10021C1 -:1032600040F25660AFF300804046BDE8F88F002C76 -:10327000F1D0002140F24460AFF30080E6E7002087 -:10328000EFF74ABB0120EFF747BB8E480078704745 -:103290002DE9F0418C4C94F82E0020281FD194F891 -:1032A0002D6004EB860797F82550202D00D1FFDF15 -:1032B0008549803901EB861000EB4500407807F81E -:1032C000250F0120F87084F82300294684F82E5039 -:1032D000324602202234FFF76FF8002020700CE401 -:1032E0002DE9F0417A4E784C012538B1012821D0E2 -:1032F000022879D003287DD0FFDFF0E700F02AFA1A -:10330000FFF7C6FF207E00B1FFDF84F821500020C8 -:10331000EFF729FBA168481C04D0012300221846BE -:10332000EFF774FB14F82E0F217806EB01110A68F1 -:10333000012154E0FFF7ACFF0120EFF714FB94F8F4 -:10334000210050B1A068401C07D014F82E0F21783E -:1033500006EB01110A68062141E0207EDFF8648156 -:10336000002708F10208012803D002281ED0FFDF41 -:10337000B5E7A777EFF7E7FB98F80000032801D13E -:1033800065772577607D534951F8200094F8201027 -:1033900051B948B161680123091A00221846EFF7B4 -:1033A00035FB022020769AE7277698E784F82050AC -:1033B00000F0D0F9A07F50B198F8010061680123B6 -:1033C000091A00221846EFF721FB257600E0277640 -:1033D00014F82E0F217806EB01110A680021BDE8D0 -:1033E000F041104700E005E036480078BDE8F041C4 -:1033F000F8F780BCFFF74CFF14F82E0F217806EB8E -:1034000001110A680521EAE710B52F4C94F82E0047 -:10341000202800D1FFDF14F82E0F21782C4A02EB70 -:1034200001110A68BDE81040042110477CB5264C04 -:10343000054694F82E00202800D1FFDFA068401C2C -:1034400000D0FFDF94F82E00214901AA01EB001003 -:10345000694690F90C002844EFF7A4FB9DF904009D -:103460000F2801DD012000E0002000990844616878 -:10347000084420F07F41A16094F82100002807D083 -:1034800002B00123BDE8704000221846EFF7BEBA33 -:103490007CBD30B5104A0B1A541CB3EB940F1FD3EC -:1034A000451AB5EB940F1BD3934203D9101A431856 -:1034B0005B1C15E0954211D9511A0844401C434247 -:1034C0000EE00000880000202C0A00200000000010 -:1034D000AC070020B8220200FF7F841EFFDF00231C -:1034E000184630BD0123002201460220EFF78EBAB4 -:1034F0000220EFF738BAEFF7D5BA2DE9FC47B14C07 -:10350000054694F82E00202800D1FFDF642D58D303 -:10351000AD4A0021521B71EB010052D394F82E20CA -:10352000A0462046DFF8A49290F82D7009EB021413 -:10353000D8F8000001AA28446946EFF733FB9DF94B -:103540000400002802DD0098401C0090A06800994B -:1035500062684618B21A22F07F42B2F5800F30D26C -:1035600008EB8702444692F82520202A0AD009EB6E -:1035700002125268101A0002C21700EB1260001209 -:1035800088421EDBA068401C10D0EFF78BFAA168C0 -:10359000081A0002C11700EB11600012022810DDAA -:1035A0000120EFF7E0F94FF0FF30A06020682844D9 -:1035B000206026F07F402061012084F82300BDE8D0 -:1035C000FC870020FBE72DE9F0477E4C074694F886 -:1035D0002D00A4F1800606EB801010F8170000B94A -:1035E000FFDF94F82D50A046794C24B1002140F61D -:1035F0006500AFF3008040F6710940F67A0A06EBE9 -:10360000851600BF16F81700012818D0042810D01E -:1036100005280ED006280CD01CB100214846AFF377 -:10362000008020BF002CEDD000215046AFF3008079 -:10363000E8E72A4639460120FEF7BEFEF2E74FF0E2 -:10364000010A4FF00009454624B1002140F68100EF -:10365000AFF30080504600F05CF885F8239024B169 -:10366000002140F68600AFF3008095F82D00FFF7AB -:10367000BFFA064695F8230028B1002CE4D00021BB -:1036800040F68C001FE024B100214FF40960AFF335 -:10369000008005EB860000F1270133463A462630CC -:1036A000FFF7EDF924B1002140F69400AFF300805C -:1036B00000F024F8824695F8230038B1002CC3D0DE -:1036C000002140F69A00AFF30080BDE785F82D6039 -:1036D000012085F82300504600F01BF8002C04D090 -:1036E000002140F6A700AFF30080BDE8F087354920 -:1036F00081F82D00012081F82300704710B535486E -:1037000008B1AFF30080EFF3108000F0010072B653 -:1037100010BD10B5002804D12F4808B1AFF30080C8 -:1037200062B610BD2D480068C005C00D10D010381D -:1037300040B2002806DA00F00F0000F1E02090F817 -:10374000140D03E000F1E02090F8000440097047F8 -:103750000820704710B51B4C94F82400002804D1B1 -:10376000F8F7B6F8012084F8240010BD10B5154C08 -:1037700094F82400002804D0F8F7D3F8002084F847 -:10378000240010BD10B51C685B68241A181A24F0B8 -:103790007F4420F07F40A14206D8B4F5800F03D2C9 -:1037A000904201D8012010BD002010BDD0E90032A8 -:1037B000D21A21F07F43114421F07F41C0E900314A -:1037C000704700002C0A0020FF1FA107AC07002053 -:1037D00000000000000000000000000004ED00E018 -:1037E000F0B5734AD2F80032724D002401212E78D0 -:1037F00056B9714E3460704F03263F1D3E606E4FC8 -:1038000004260C373E602970C2F80042D160116076 -:10381000694C4834D16425688542FBD35160D1603E -:10382000C2F80032F0BD2DE9F041044680074FF0A8 -:1038300000054FF0010604D560480560066024F0DD -:103840000204E0044FF0FF3705D55D484660C0F83C -:10385000087324F48054600003D55A48056024F0AE -:103860008044E0050FD55248C0F80052C0F80873F4 -:1038700051490D60091D0D604F4A04210C32116041 -:10388000066124F48074A00409D54F484660C0F84E -:103890000052C0F808734D48056024F40054C4F386 -:1038A0008030C4F3C031884200D0FFDF14F4404FB1 -:1038B00014D047484660C0F8087346488660C0F890 -:1038C0000052C0F8087344490D600A1D16608660F6 -:1038D000C0F808730D60166024F4404420050AD532 -:1038E0003E4846608660C0F80873C0F848733C489C -:1038F000056024F400640DF077FB3A48044200D0E0 -:10390000FFDFBDE8F08170B5202500224FEA0203F9 -:1039100020FA02F1C90719D051B201F01F060124A3 -:10392000B4404E09B60006F1E026C6F88041C6F85C -:103930008042002906DA01F00F0101F1E02181F84F -:10394000143D03E001F1E02181F80034521CAA4249 -:10395000DED370BD70B5174C0D466060FFF763FF96 -:103960006068FFF7D0FF2846F8F7A7F80CF05EFF75 -:1039700000F0ABF80DF038FB0DF083FAF8F78CF996 -:10398000BDE870400DF000B810B50A4C6068FFF754 -:103990004AFF6068FFF7B7FF0DF026FBF8F721F943 -:1039A0000020606010BD0348406870470A207047DF -:1039B000008000408C00002004850040FC1F004077 -:1039C00000C0004004E5014000D0004004D50040A4 -:1039D00000E0004000F0004000F5004000B0004072 -:1039E00008B50040FEFF0FFD70B522490A680AB312 -:1039F0000022154601244B685B1C4B60092B00D349 -:103A00004D600E7904FA06F30E681E420FD0EFF3F4 -:103A1000108212F0010272B600D001220C689C43A1 -:103A20000C6002B962B649680160002070BD521C8A -:103A3000092AE0D3052070BD4FF0E0214FF480004B -:103A4000C1F800027047EFF3108111F0010F72B658 -:103A50004FF0010202FA00F20648036842EA03024C -:103A6000026000D162B6E7E70248002101604160D0 -:103A70007047000094000020AD4911F8410F4978CB -:103A8000884201D3401A02E0C1F141010844C0B2AA -:103A90007047A749433111F8410F4978884201D353 -:103AA000401A02E0C1F141010844C0B27047A04988 -:103AB000863111F8410F4978884201D3401A02E05B -:103AC000C1F141010844C0B270479A4910B5802045 -:103AD00081F8000496490020433101F8410F4870F5 -:103AE000934901F8410F48709149863101F8410F1F -:103AF000487091480DF00EF98F48401C0DF00AF9FE -:103B0000EFF7DAF8BDE8104000F006B94020704742 -:103B1000B2E770B50C4605460026FFF7ADFF844AB4 -:103B2000A04214D30021641EE4B20FD392F84200E5 -:103B3000105C05F8010B92F84200401CC0B282F8FC -:103B400042004128EFD182F84210ECE7012600F054 -:103B5000E3F8304670BD402070479AE770B50C46D8 -:103B600005460026FFF795FF714A4332A04214D361 -:103B70000021641EE4B20FD392F84200105C05F8F5 -:103B8000010B92F84200401CC0B282F8420041286A -:103B9000EFD182F84210ECE7012600F0BDF8304684 -:103BA00070BD402101700020704710B50446FFF73A -:103BB0007EFF2070002010BD70B50C460546FFF753 -:103BC00076FF5B4A8632A04215D30021641EE4B220 -:103BD0000FD392F84200105C05F8010B92F84200F6 -:103BE000401CC0B282F842004128EFD182F8421056 -:103BF000ECE7002401E042F2070400F08DF82046D3 -:103C000070BD70B50C460546412900D9FFDF4B4811 -:103C10000068103840B200F066F8C6B20D2000F01F -:103C200062F8C0B2864203D2FFDF01E0EFF794F8FA -:103C300021462846FFF76DFF0028F7D070BD2DE91B -:103C4000F0413D4F0025064617F10407412257F881 -:103C5000254094F8421094F8410000F053F888B3DE -:103C60006D1CEDB2032DF1D331484122433090F861 -:103C7000421090F8410000F045F8002831D02C485F -:103C8000412290F8421090F8410000F03BF80028E3 -:103C900027D027484122863090F8421090F8410002 -:103CA00000F030F800281CD0EFF72CF822480DF077 -:103CB00039F8B0F5005F00D0FFDFBDE8F0411E48E5 -:103CC0000DF046B894F84100265494F84100401C89 -:103CD000C0B284F841004128C6D1002084F84100D8 -:103CE000C2E7BDE8F081002806DA00F00F0000F11D -:103CF000E02090F8140D03E000F1E02090F80004BB -:103D000040097047401C884204D0904200D109B15C -:103D1000002070470120704710B507480DF002F8E9 -:103D2000002803D1BDE81040EEF7D7BF10BD00005A -:103D30005C0A00200DE000E09C00002004ED00E0A3 -:103D4000164908784A78401CC0B2904205D0144BFE -:103D500001221A60BFF34F8F087070472DE9F041C0 -:103D60000E4C4FF0E02600BFEFF77CF820BF40BFBD -:103D700020BF677820786070D6F80052EDF7CCFA53 -:103D8000854305D1D6F8040210B92078B842EBD0AB -:103D9000EFF763F80020BDE8F0810000AC000020E0 -:103DA000180502402DE9F041012528034FF0E021DC -:103DB0000026C1F880011E4CC4F800610C2000F000 -:103DC0002CF81C4801680268C94341F3001142F015 -:103DD00010020260C4F804532560491C00E020BFB3 -:103DE000D4F80021002AFAD019B9016821F0100195 -:103DF0000160114807686560C4F80853C4F80061A1 -:103E00000C2000F00AF83846BDE8F08110B50446F1 -:103E1000FFF7C8FF2060002010BD00F01F02012145 -:103E200091404009800000F1E020C0F88012704706 -:103E300000C0004010ED00E008C500402DE9F0474B -:103E4000FF4C0646FF21A06800EB06121170217896 -:103E5000FF2910D04FF0080909EB011109EB0617F3 -:103E60004158C05900F0F4F9002807DDA168207816 -:103E700001EB061108702670BDE8F08794F8008009 -:103E800045460DE0A06809EB05114158C05900F006 -:103E9000DFF9002806DCA068A84600EB08100578CA -:103EA000FF2DEFD1A06800EB061100EB08100D709C -:103EB0000670E1E7F0B5E24B0446002001259A6860 -:103EC0000C269B780CE000BF05EB0017D75DA742DE -:103ED00004D106EB0017D7598F4204D0401CC0B262 -:103EE0008342F1D8FF20F0BD70B5FFF704FBD44C3E -:103EF00008252278A16805EB0212895800F0A8F97C -:103F0000012808DD2178A06805EB01114058BDE8C3 -:103F10007040FFF7E7BAFFF7B8F9BDE87040F7F770 -:103F2000E9BE2DE9F041C64C2578FFF7E4FAFF2DF4 -:103F30006ED04FF00808A26808EB0516915900F002 -:103F400087F90228A06801DD80595DE000EB0511CA -:103F500009782170022101EB0511425C5AB1521E11 -:103F60004254815901F5800121F07F418151284659 -:103F7000FFF764FF34E00423012203EB051302EB97 -:103F8000051250F803C0875CBCF1000F10D0BCF5DF -:103F9000007F10D9CCF3080250F806C00CEB423C6D -:103FA0002CF07F4C40F806C0C3589A1A520A09E018 -:103FB000FF2181540AE0825902EB4C3222F07F4209 -:103FC0008251002242542846FFF738FF0C21A06896 -:103FD00001EB05114158E06850F82720384690471A -:103FE0002078FF2814D0FFF786FA2278A16808EB22 -:103FF00002124546895800F02BF9012893DD2178FB -:10400000A06805EB01114058BDE8F041FFF76ABA1E -:10401000BDE8F081F0B51D4614460E460746FF2B5D -:1040200000D3FFDFA00700D0FFDF8548FF2100227B -:10403000C0E90247C5700671017042708270104677 -:10404000012204E002EB0013401CE154C0B2A8427C -:10405000F8D3F0BD70B57A4C064665782079854274 -:1040600000D3FFDFE06840F825606078401C607096 -:10407000284670BD2DE9FF5F1D468B460746FF248D -:10408000FFF739FADFF8B891064699F80100B8420F -:1040900000D8FFDF00214FF001084FF00C0A99F81B -:1040A0000220D9F808000EE008EB0113C35CFF2BD7 -:1040B0000ED0BB4205D10AEB011350F803C0DC451A -:1040C0000CD0491CC9B28A42EED8FF2C02D00DE0B8 -:1040D0000C46F6E799F803108A4203D1FF2004B09A -:1040E000BDE8F09F1446521C89F8022008EB041129 -:1040F0000AEB0412475440F802B00421029B00224C -:10410000012B01EB04110CD040F801204FF4007892 -:1041100008234FF0020C454513D9E905C90D02D01B -:1041200002E04550F2E7414606EB413203EB04134F -:1041300022F07F42C250691A0CEB0412490A8154E2 -:104140000BE005B9012506EB453103EB041321F023 -:104150007F41C1500CEB0411425499F800502046A5 -:10416000FFF76CFE99F80000A84201D0FFF7BCFEF3 -:104170003846B4E770B50C460546FFF7BCF906466D -:1041800021462846FFF796FE0446FF281AD02C4DFC -:10419000082101EB0411A8684158304600F058F896 -:1041A00000F58050C11700EBD14040130221AA68EE -:1041B00001EB0411515C09B100EB4120002800DC47 -:1041C000012070BD002070BD2DE9F0478846814672 -:1041D000FFF770FE0746FF281BD0194D2E78A86800 -:1041E0003146344605E0BC4206D0264600EB0612B6 -:1041F0001478FF2CF7D10CE0FF2C0AD0A6420CD18A -:1042000000EB011000782870FF2804D0FFF76CFE47 -:1042100003E0002030E6FFF76BF941464846FFF720 -:10422000A9FF0123A968024603EB0413FF20C85429 -:10423000A878401EB84200D1A87001EB041001E03C -:10424000280B002001EB061100780870104613E6D9 -:10425000081A0002C11700EB11600012704700003D -:1042600070B50446A0F500002D4EB0F1786F02D273 -:104270003444A4F500042B48844201D2012500E017 -:10428000002500F043F848B125B9B44204D32648CC -:10429000006808E0012070BD002070BD002DF9D13C -:1042A000B442F9D321488442F6D2F3E710B504466C -:1042B000A0F50000B0F1786F03D219480444A4F5CA -:1042C000000400F023F84FF0804130B11648006838 -:1042D00004E08C4204D2012003E014488442F8D266 -:1042E000002080F0010010BD10B520B1FFF7DEFF07 -:1042F00008B1012010BD002010BD10B520B1FFF79E -:10430000AFFF08B1012010BD002010BD08480949C9 -:104310000068884201D101207047002070470000EA -:1043200000000020003002002000002008000020D3 -:10433000B0000020BEBAFECA0548064A0168914294 -:1043400001D100210160044901200860704700008C -:10435000B0000020BEBAFECA40E50140534800212B -:104360000170417010218170704770B50546164686 -:104370000C460220EEF73FFA4C49012008704C49E8 -:10438000F01E08604B480560001F046070BD10B54A -:104390000220EEF730FA4549012008704648002116 -:1043A000C0F80011C0F80411C0F8081143494FF4D7 -:1043B0000000086010BD3D480178C9B1404A4FF483 -:1043C000000111603C49D1F800310022002B1CBFD4 -:1043D000D1F80431002B02D0D1F8081111B142708C -:1043E000102103E001214170364909688170027093 -:1043F0000020EEF700BA2D480178002904BF40786C -:1044000070472D48D0F80011002904BF02207047E2 -:10441000D0F8001100291CBFD0F80411002905D0E4 -:10442000D0F80801002804BF012070470020704721 -:104430001E4800B50278204B4078C821491EC9B2F9 -:1044400082B1D3F800C1BCF1000F10D0D3F8000145 -:1044500000281CBFD3F8040100280BD0D3F80801B2 -:1044600050B107E0022802D0012805D002E000295F -:10447000E4D1FFDF002000BD012000BD0B48017822 -:10448000002904BF807870470B48D0F8001100293C -:104490001CBFD0F80411002902D0D0F8080108B1DF -:1044A0001020704707480068C0B27047B400002071 -:1044B00010F5004008F5004000F0004004F5014010 -:1044C00008F5014000F400404C48002101704170A3 -:1044D000704770B5064614460D460120EEF78BF97D -:1044E00047480660001D0460001D056070BD70B582 -:1044F000424A012540EA01411570424A41F080716B -:104500001160414C0026C4F80461404A4FF04071EC -:104510001160002802BFC4F80052256070BD012858 -:1045200018BFFFDFC4F8006225604FF00070384903 -:10453000086070BD3148017879B1344A4FF040715C -:1045400011603149D1F804210021002A08BF4170CF -:1045500002D0304A1268427001700020EEF74BB969 -:1045600026480178002904BF407870472648D0F8D3 -:104570000401002808BF704726480068C0B2704791 -:10458000002808BF704730B51C480078002808BFD5 -:10459000FFDF1D48D0F80411002918BF30BD0224E8 -:1045A000C0F80443DFF870C0DCF80010C1F3001558 -:1045B000DCF8001041F01001CCF80010D0F8041124 -:1045C000002904BF4FF400414FF0E02207D100BFA3 -:1045D000C2F8801220BFD0F80431002BF8D02DB9DA -:1045E000DCF8001021F01001CCF80010C0F80843EE -:1045F00030BD05490120886070470000B7000020E9 -:1046000008F5004004F5004000F0004008F50140C6 -:1046100004F5014000F4004010ED00E070B5FF4CDF -:1046200000250120657025706572A572E07284F81E -:104630002150A56204F1380065630CF06BFB002883 -:1046400018BFFFDFA577F6480DF0F6FBF5494FF0F0 -:10465000FF300860091D0860091D0D60091D086014 -:10466000091D0D60091D0860091D0860091D08600D -:10467000091D0860091D0860091D0860091D086002 -:10468000091D0860091D086070BD30B4E349026867 -:10469000DFF898C34A6142688A61007A08770A7D28 -:1046A000E14BACF1040401204AB10A7E00FA02F2A7 -:1046B0001A608D7D002D0CBF2260CCF800204A7D51 -:1046C000002A04BF30BC70474A7E90401860C97D04 -:1046D00000290CBF2060CCF8000030BC7047D549E1 -:1046E000D3480860091DD4480860704710B50446D7 -:1046F000012908BF002105D002291ABFFFDF0021D0 -:104700004FF0807141F48470CA4940F48010086011 -:10471000E0B240F44030091D40F000700860C74826 -:10472000D0F80001002818BFFFDF10BD01202DE9DF -:10473000F04102254FF0E0270026C7F88051C0491C -:104740000E600860BF490A6822F0770242F08802D2 -:1047500042F000420A60091D0A6822F47F4242F4D6 -:10476000B0520A60AD4CB84965770D60B84AB74998 -:104770001160121FB7491160B74A40F25B611160C6 -:10478000121F40F203111160111F0860B34903208A -:104790000860B3499620086094F91E000CF06AFD89 -:1047A000607F002814BF4FF4C020AE48AE490860B7 -:1047B000AF49AE480860091FAE480860C7F880528C -:1047C0009E491020C1F8040384F82D60BDE8F081F3 -:1047D000A948016821F0010141F080710160704732 -:1047E0008E4A0368C2F802308088D0801172704708 -:1047F0008A4890F821007047884A517010707047BD -:10480000F0B50546800000F1804000F580508B88AF -:10481000C0F820360B78D1F8011043EA0121C0F826 -:10482000001605F10800012707FA00F6934C002A4C -:1048300004BF2068B04304D0012A18BFFFDF2068FE -:1048400030432060206807FA05F108432060F0BD7E -:1048500010B504460CF00EFD7048847710BD6F480B -:1048600090F82E0070476D4890F830007047844AE9 -:10487000C1781160006883490002086070472528EC -:1048800008BF02210ED0262808BF1A210AD02728E7 -:1048900008BF502106D00A2894BF0422062202EB4A -:1048A0004001C9B2784A116078490860704770B415 -:1048B0005A4B93F80AC0BCF1010F21D0BCF1020F92 -:1048C0001CBF70BC70475C7D002C04BF70BC70477F -:1048D0004FF47A74BCF1010F6D4E16D0DD7D93F864 -:1048E00019C0002D18BF0125012908BF292121D099 -:1048F000022A08BF674E06F2E141B1FBF4F119E06C -:104900001C7D002CE4D170BC70479D7D93F818C0CD -:10491000002D18BF0125012947D0022A06BF5E4E8F -:104920004FF47A714FF4C861314401F5FA7100BF58 -:10493000B1FBF4F1491F0844584908605849002068 -:10494000C1F84C014FEA0C2085F0010140EA01500A -:1049500040F00311187F820002F1804202F5C0424C -:10496000C2F810154F4901EB8001987EC20002F198 -:10497000804202F5F832C2F81415DFF82CC1C2F8F3 -:1049800010C5DA7ED30003F1804303F5F833C3F892 -:1049900014153849C3F81015012101FA00F09140AF -:1049A00008434249086070BC7047022A14BF4FF4A4 -:1049B000C8614FF47A7149F6FC621144B8E72DE9F9 -:1049C000F0411E4D0746032014468846C5F80002F4 -:1049D000124E707F002814BF4FF4C0202148334985 -:1049E000086040460CF094FC20460CF071FC01205D -:1049F00017B1012F60D062E02D4B19685A06022CC6 -:104A0000D2F8202314BFC2F30622C2F3066221F4B7 -:104A1000FE4141EA02211960B0724BE0380B0020E0 -:104A20004C0B0020000E0040180500500C050050F3 -:104A3000060102001415004025000302001000408A -:104A4000FC1F00403C1700406015004044800040BF -:104A50009CF5014028110040381500401015004019 -:104A6000441500400000040408F501404080004067 -:104A7000A4F501401011004074170040401600409A -:104A8000241500401C150040081500405415004036 -:104A9000A224020004360200683602004C85004061 -:104AA00000800040006000404C81004004F501405F -:104AB00088150040286002E00221B1726860F9495F -:104AC000C864F948006822464146BDE8F041EEE678 -:104AD0002DE9F0418846F549074603201546C1F8FF -:104AE0000002F34C607F002814BF4FF4C020F1484F -:104AF000F14E306040460CF00BFC28460CF0E8FB11 -:104B000017B1012F19D021E0EC490A684806022D9F -:104B1000D0F8200314BFC0F30620C0F3066022F4CF -:104B2000FE4242EA002008600120A072606B40F45F -:104B3000801060634FF4801007E00220A072606B69 -:104B400040F4001060634FF4001030602A46414684 -:104B5000BDE8F0410020AAE62DE9FF4FD34C824684 -:104B6000002681B003208946C4F80002D04D687F3A -:104B7000002814BF4FF4C020CE48CF4F38600398B0 -:104B80000CF0C6FB04980CF0A3FBCD494FF00108D4 -:104B9000BAF1000F03D0BAF1010F32D03BE0C74B9E -:104BA00004981A684FF0805C0228DCF8200314BFD8 -:104BB000C0F30620C0F3066022F4FE4242EA002061 -:104BC00018600C6095F82D00012806D0022818BF47 -:104BD000FFDF0CD085F80A801DE0DDE9031395F8AE -:104BE0002C2048460CF0E6FBA96A4618F2E7DDE9FE -:104BF000031295F82C3048460CF097FBA96A46182A -:104C0000E8E7B048086095F82D00012818BFFFDFDD -:104C100020D00220A872AC480660AD49AB480860BD -:104C2000686B40F400206863D4F800924FF0100ADB -:104C3000C4F808A30025C4F80052A6484FF4802BFE -:104C4000C0F800B0FF208DF80000C4F81051C4F87F -:104C500010800EE0DDE9031395F82C2096200CF06F -:104C600087FBA96A4618D4E79DF80000401E8DF81E -:104C700000009DF8000018B1D4F810010028F3D00E -:104C80009DF80000002808BFFFDFC4F80051C4F8F9 -:104C90000C51C4F81051C4F80451C4F81451C4F8AC -:104CA0001851C4F828518C4800680090C4F800924C -:104CB000C7F800B0C4F804A34FF400203860794866 -:104CC000C0F84C8078480068B04228BFFFDF30460B -:104CD000DDE9031205B0BDE8F04FE8E52DE9F8473E -:104CE000724CD4F8000220F00309D4F804034FF00A -:104CF000100AC0F30018C4F808A30026C4F8006224 -:104D00006B4D687F002814BF4FF4C020694871497B -:104D10000860A87A0127012802D0022803D014E0F5 -:104D2000287D10B911E0687D78B1A87EEA7E07FA87 -:104D300000F007FA02F210430860287F800000F1BB -:104D4000804000F5C040C0F81065FF208DF80000DD -:104D5000C4F81061276104E09DF80000401E8DF842 -:104D600000009DF8000018B1D4F810010028F3D01D -:104D70009DF80000002808BFFFDFC4F81061C4F8E8 -:104D800028616E72AE72EF72C4F80092B8F1000F33 -:104D900018BFC4F804A3BDE8F88700684F4920F0A5 -:104DA0007F40086070474FF0E0200221C0F880117A -:104DB000C0F8801270474FF0E0210220C1F80001D6 -:104DC000704747490870704710B546480BF0AAFF76 -:104DD000002818BFFFDF10BD42480BF0B9BF4249A1 -:104DE0000860704730B5324C0546A06AA84228BF1B -:104DF000FFDF012020732561607F40B128442061DE -:104E00002A48D0F8001241F04001C0F800122549AC -:104E10000020C1F84401354920690860606B2649CB -:104E200040F4800060634FF48000086030BD70B5CE -:104E30001F4C0546022020730CF057FA024694F8E6 -:104E40002C1028460CF0E0FA2061617F41B1084443 -:104E500020611648D0F8001241F04001C0F800125D -:104E600010490020C1F844012169A06A08441F4983 -:104E7000086070BD17494FF4800008600C48416B12 -:104E800021F480014163002101737047054801212D -:104E90004160C1600021C0F8441114480160044819 -:104EA00081627047008000404C8500400010004047 -:104EB000380B00200000040404F501408815004070 -:104EC000ACF5014004100040488500404881004096 -:104ED000A8F5014008F50140181100403C150040BC -:104EE000B9000020700B00200415004044850040EC -:104EF000FE4940204877FE490860FE48D0F800127D -:104F000041F04001C0F800127047FA48D0F8001292 -:104F100021F04001C0F80012F549022008607047F6 -:104F2000F448D0F8001221F01001C0F8001201215D -:104F300081617047EF480021C0F81C11D0F80012C1 -:104F400041F01001C0F800127047EA4981B0D1F871 -:104F50001C21012A1EBF002001B07047E64A1268DA -:104F600002F07F02524202700020C1F81C01E348A7 -:104F700000680090012001B0704730B50C00054674 -:104F800008BFFFDF14F0010F1CBF012CFFDF002D55 -:104F90000CBF01200220D54901284872CC72D549A6 -:104FA00004BFD1F8000240F0040007D0022807BF78 -:104FB000D1F8000240F00800FFDF30BDC1F8000268 -:104FC00030BD70B5C94C0023E17A11F0020F18BF53 -:104FD00010F0040F16D111F0100F1CBF94F82F2001 -:104FE000002A02D094F8312062B111F0080F1CBFE2 -:104FF00094F82020002A05D111F0040F03D094F872 -:10500000211001B9012394F809C00122B949BCF16A -:10501000000F06D000F00200184312D0BDE8704027 -:105020005CE6607F002814BF4FF4C020B448B54B45 -:105030001860D1F8000220F00300C1F80002E2720B -:1050400070BD00252846BCF1010F0BD0BCF1020F4A -:1050500018BFFFDF16D0A06A01222844BDE87040C7 -:10506000002124E4D1F8003223F00403C1F8003217 -:105070006072E272A27201231A46002196200CF09F -:1050800054F90FE0D1F8003223F00803C1F80032E0 -:105090006072E2720220A07201231A46002196205B -:1050A0000CF066F90546D6E72DE9F84F964FD7F88C -:1050B0004C218E4C93494FF00108A07A0026CAB1CA -:1050C000012802D0022803D014E0227D12B911E099 -:1050D000627D7AB1A27EE37E08FA02F208FA03F357 -:1050E0001A430A60227F920002F1804202F5C04218 -:1050F000C2F81065626B0A606663217B29B1D7F83C -:105100004411012908BF012200D00022794DD5F8B1 -:10511000101101290CBF40210021012805BFD5F83D -:105120000C31012B002320231943012805BFD5F89A -:105130000431012B002310230B437449022804BFC0 -:10514000D1F800C0BCF1010F07D1D5F80CC1BCF1FA -:10515000010F08BF4FF0080C01D04FF0000C4CEAD3 -:105160000303022804BF0968002905D1D5F80C11F2 -:10517000012908BF042100D000211943022803D1CE -:10518000002A18BF022200D100221143022804BFC6 -:10519000D5F80401012805D1D7F84401012818BF2A -:1051A000012000D1002040EA01095948016811F0AE -:1051B000FF0F03D0D5F81411012900D0002184F885 -:1051C0002E10006810F0FF0F03D0D5F81801012849 -:1051D00000D0002084F82F004E48006884F830008A -:1051E00043480068402803D1FFF705F9012800D0A3 -:1051F000002084F83100C5F80061C5F80C61C5F8DD -:105200001061C5F80461C5F81461C5F81861C5F8E6 -:105210002861414800680090C7F844613F48006831 -:105220004D46DFF8FC900090D9F800106162607F75 -:1052300000281CBF081A60623A480068A0620CF09F -:1052400054F884F82C00A07ADFF8DCA084F82D0054 -:1052500002280CD1607850B1DAF8001009780840C3 -:10526000217831EA000008BF84F8208001D084F85A -:105270002060DFF8B88015F0010F15D098F8001005 -:105280002B4A4908606A52F8211088470121294AAF -:1052900098F80030A06A52F82320904798F8000050 -:1052A00010F0010F0BD01FE015F0200F18BF0221E6 -:1052B000EDD115F0020F18BF0021E8D1EEE7DAF8C2 -:1052C0000000062200F10901A01C0CF0E9FB40B926 -:1052D000207ADAF800100978B0EBD11F08BF01205E -:1052E00000D0002084F82100284625E0380B00205B -:1052F0006015004000100040481500401C1100409F -:105300000000040408F50140008000400014004043 -:105310004016004010140040181100404481004025 -:10532000448500404085004004150040B90000203D -:10533000D022020008230200FFF743FE15F0020FFF -:1053400005D03D4898F8001050F82100804715F02E -:105350000C0F07D0394898F8001050F82110C5F309 -:10536000C000884715F0200F05D0354898F8001088 -:1053700050F82100804798F80000022805D105F078 -:105380006E00402806D101F0DDFB98F800000428EB -:1053900028BFFFDFA07A022818BFBDE8F88F207B66 -:1053A000002808BFBDE8F88FC7F84461022815D06F -:1053B000012818BFFFDFA16A2069884298BFFFDF7C -:1053C000D4F81000C9F80000606B1E4940F480005A -:1053D00060634FF480000860BDE8F88F2169A06A1F -:1053E0000844EFE7012804BF28207047022804BFC3 -:1053F0001820704700B5FFDF282000BD012804BF3A -:1054000041F6A4707047022804BF41F2883070470B -:1054100000B5FFDF41F6A47000BD012804BF41F2D2 -:10542000D4707047022804BF41F20400704700B5F1 -:10543000FFDF41F2D47000BDD8220200E822020052 -:10544000F822020004F5014010B53F480AF0F7FBCE -:1054500000213D480AF022FC01213B480AF0F2FB02 -:105460003A49002081F822004FF6FF7088843849BD -:105470000880488010BD704734498A8C824218BF2A -:105480007047002081F822004FF6FF708884704733 -:105490002D49016070472E49088070472B498A8C3E -:1054A000A2F57F43FF3B03D000210160084670470F -:1054B00091F822202549012A1ABF0160012000200D -:1054C0007047224901F1220091F82220012A04BFED -:1054D00000207047012202701D4800888884104611 -:1054E00070471B49488070471849194B8A8C5B8864 -:1054F0009A4206D191F82220002A1EBF01600120A5 -:105500007047002070471148114A818C528891429F -:1055100009D14FF6FF71818410F8221F19B10021C3 -:10552000017001207047002070470848084A818CAC -:105530005288914205D190F8220000281CBF00201B -:1055400070470120704700009A0B0020740B002068 -:10555000BA0000207047574A012340B1012818BF04 -:105560007047137008689060888890817047537006 -:105570000868C2F802008888D08070474D4A10B190 -:10558000012807D00EE0507860B1D2F80200086020 -:10559000D08804E0107828B19068086090898880ED -:1055A0000120704700207047424910B1012803D004 -:1055B00006E0487810B903E0087808B10120704788 -:1055C0000020704730B58DB00C4605460D2104A86B -:1055D0000CF02BFBE0788DF81F0020798DF81E0071 -:1055E00060798DF81D002868009068680190A868AF -:1055F0000290E868039068460BF0B2F920789DF8B5 -:105600002F1088420CD160789DF82E10884207D167 -:10561000A0789DF82D10884202BF01200DB030BD4A -:1056200000200DB030BD30B50C4605468DB04FF0B2 -:10563000030104F1030012B1FEF790FA01E0FEF756 -:10564000E0FA60790D2120F0C00040F04000607168 -:1056500004A80CF0EAFAE0788DF81F0020798DF8A4 -:105660001E0060798DF81D00286800906868019020 -:10567000A8680290E868039068460BF071F99DF8FD -:105680002F0020709DF82E0060709DF82D00A070F6 -:105690000DB030BD10B5002904464FF0060102D010 -:1056A000FEF75CFA01E0FEF7ACFA607920F0C0008A -:1056B000607110BDBE00002070B5FA4E044696F829 -:1056C00092000025012828D096F88C00012833D0BC -:1056D00096F86A0001281CBF002070BD6570132079 -:1056E0002070202206F16C01A01C0CF005FA0120AC -:1056F000A07186F86A50B6F86E10A6F88E10EA49C6 -:1057000049684A7B86F8902086F88C000888FBF769 -:10571000AFFAFAF71FFF012070BD657019202070E5 -:10572000D6F89300C4F80200D6F89700C4F8060033 -:1057300086F89250012070BD657006202070D6F862 -:105740008E00C4F8020086F88C50E4E7D54890F843 -:105750006A10002914BFB0F86E004FF6FF70704752 -:1057600070B5D14800250570017800291CBFFFDF06 -:1057700070BDCC4C84F8625084F8635084F8645057 -:1057800084F8655084F85E5084F8605084F8565070 -:1057900084F8365084F867507F21817094F8660051 -:1057A00028B1FFF7B2FBFEF706FE84F8665084F8D6 -:1057B0006A5084F88C5084F89250BC480AF0D6F8AD -:1057C000BDE87040BA480AF0D1B8B64890F8620017 -:1057D0007047B44900B591F8580091F85710C0F3DC -:1057E0008002C0F340031A4400F001001044052970 -:1057F00010D2DFE801F00B070B030900AD4931F8C7 -:10580000100000BDAC4800BDAC4900E0AC4931F827 -:10581000100000BDFFDF002000BDA24840F2712152 -:10582000B0F85A00484370479E4890F86800002836 -:1058300018BF0120704710B59A4C207A022818BF73 -:10584000032808D1207C04F1110108F071FF082819 -:105850001CBF012010BD207A002816BF022800209E -:105860000120BDE81040FFF79FBE8E4908727047C7 -:105870008C4981F8600070472DE9F041894C82B075 -:10588000207A002816BF022800200120607204F14F -:105890000A01FFF773FE207A022816BF03280121B0 -:1058A000002184F85F10082084F85D00607A0126EA -:1058B000002504F10A02012804BF527912F0C00F3A -:1058C0000AD004F10A02012804D1507900F0C00086 -:1058D000402801D0002000E0012084F85E0029B9B2 -:1058E00094F85700012818BF042806D1207C04F141 -:1058F000110108F01DFF84F85D002560FDF7B8F880 -:1059000060604FF0000894F85D0008F02DFF074636 -:1059100094F85F00002818BF002F04D010213846EB -:1059200009F093FD68B194F8600000281CBF94F85A -:105930005E0000281DD0607A04F10A0101280ED013 -:1059400012E06672424604F10A013846FFF76BFE28 -:1059500094F85D1004F10A0008F0FEFF09E04879B0 -:1059600000F0C000402840D0294604F10A00FFF7AB -:1059700091FE04F10A014D480AF01EF8617A4B4885 -:105980000AF03FF804F10A0149480AF015F8617A73 -:1059900047480AF036F894F8570001281EBF04283B -:1059A00002B0BDE8F081002594F85D0008F0E5FE46 -:1059B000040004BF02B0BDE8F081102109F045FDEC -:1059C00000281CBF02B0BDE8F0812A466946204687 -:1059D000FFF729FE6946354809F0FCFF01213348ED -:1059E0000AF01CF802B0BDE8F08108F0EEFF424674 -:1059F00004F10A01FFF717FEBBE770B5294C417BA4 -:105A000084F85810017984F8571001290CBF00223E -:105A10000288A4F85A20827B84F868208279002AC0 -:105A200016BF022A002201222274D0F80720C4F8EF -:105A30001120B0F80B00A4F8150094F856000125C9 -:105A4000002818BF84F8635094F83600002818BF67 -:105A500084F8645005293AD2DFE801F0030C1E34C3 -:105A60000C000021114809F084FF01210F4809F0C2 -:105A7000BFFF2DE001210D4809F07BFF04F111016A -:105A80000A4809F0A7FF217C084809F0C7FF012157 -:105A9000064809F0ADFF1BE00621044809F069FF44 -:105AA00016E00000BC0B0020CC000020580C0020A9 -:105AB000800C002028230200D0891300302302002C -:105AC000202302000221FE4809F053FF00E0FFDF1F -:105AD0000421FC4809F04DFF84F86250002070BD9D -:105AE00070B5F94C0546002084F864002A4604F19C -:105AF00017000CF001F884F83650012084F8640097 -:105B000070BD10B5F04C002284F8632084F8560074 -:105B1000024604F137000BF0EFFF012084F8630028 -:105B200010BDE94981F8670070472DE9F041E74E63 -:105B300082B0307808BBE44C94F86200E8B1FFF71B -:105B400043F9002584F8615075702846FFF739F94C -:105B5000FEF7ECFDFEF7C3FDDD48FEF788FEDD48ED -:105B6000FFF71BF994F85800002610F0010F08D039 -:105B70002520FEF784FE012612E002B00C20BDE8CD -:105B8000F08110F0020F04D02620FEF778FE0226E6 -:105B900006E010F0040F03D02720FEF770FE042665 -:105BA000FEF79DFD84F85C60FFF705F900210122F6 -:105BB0000846FEF78DFF0F210520FEF71DFE94F825 -:105BC0005E00002804BF94F85F00002805D194F817 -:105BD0005700012818BF042874D1FCF749FF064676 -:105BE00031466068FDF755FCBB4990FBF1F701FBBE -:105BF000170041423046FCF746FC6060206838449C -:105C0000206008F092FD2168884274D8C4E90056EB -:105C10004FF0010894F85D0008F0A6FD064694F8E0 -:105C20005F000127002818BF002E04D01021304645 -:105C300009F00BFC68B194F8600000281CBF94F8D0 -:105C40005E0000281DD0617A04F10A0001290ED0FF -:105C500012E03A46677204F10A013046FFF7E3FCAE -:105C600094F85D1004F10A0008F076FE09E040792E -:105C700000F0C00040281DD0414604F10A00FFF7A3 -:105C800009FD04F10A018E4809F096FE617A8C48FC -:105C900009F0B7FE04F10A018A4809F08DFE617A25 -:105CA000884809F0AEFE94F85700012818BF042870 -:105CB00021D108E008F089FE3A4604F10A01FFF715 -:105CC000B2FCDEE717E0012794F85D0008F055FD0F -:105CD000060010D0102109F0B8FB60B93A466946B9 -:105CE0003046FFF7A0FC6946754809F073FE0121B4 -:105CF000734809F093FE617A04F10A00FEF770FD23 -:105D000094F8570001281EBF042894F86300002867 -:105D100008D094F8562004F13701694809F09CFE38 -:105D200084F8635094F8640040B194F8362004F18C -:105D30001701644809F0BCFE84F8645008F069FD5E -:105D4000664808F0FAFD84F86600FFF745F802B0EF -:105D50000020BDE8F0815D494860704770B55A4C3D -:105D600006002BD094F8581094F85C20002521EA06 -:105D7000020010F0010F04D02520FEF780FD012560 -:105D800015E011F0020F02D012F0020F06D011F050 -:105D9000040F0CD012F0040F05D008E02620FEF707 -:105DA0006EFD022503E02720FEF769FD0425FEF7BE -:105DB00096FC94F85C00284384F85C0094F8610039 -:105DC00040B194F85700012808BFFFDFBDE87040DC -:105DD00000F0BFBA36B1002201234FF4967110468D -:105DE000FEF7BAFE3648FEF7FAFF94F8570005288A -:105DF00009D2DFE800F0030303090300012108468C -:105E0000FFF7BBF800E0FFDF94F8580094F85C104F -:105E100030EA01014FF0010002D02C49087070BD3A -:105E200094F85710012912BF84F86100002184F80A -:105E30005C10F2E710B5FEF7C7FF2448007840B9C0 -:105E4000214890F8620020B10020FFF787FF002072 -:105E500010BDFFF71BF8FFF70DF8FEF73FFFFEF749 -:105E6000A2FFFEF7B9FF0C2010BD184901204870B1 -:105E70007047154981F86500704770B5002503F03B -:105E8000A3FA48B1114E3078012809D0022801D078 -:105E9000032842D0FFDF70BDBDE8704000F059BA62 -:105EA000094C94F85700032837D094F8660018B1CD -:105EB000FEF76DFAFFF71CF80848FEF790FF0FE0B9 -:105EC000580C0020800C0020BC0B0020CC000020CF -:105ED0001B2302001823020040420F00A80C0020E0 -:105EE0009620FEF7A4FF94F85700012818BF042855 -:105EF0000AD094F86800012814BF0328102545F043 -:105F00000E010020FFF739F894F86700012808BF58 -:105F1000FFF710F80220307070BDBDE8704001201E -:105F20001CE770B5FE4DFF4C95F86700012817D0AF -:105F300095F8660018B1FEF7E8FFFEF73CFA03F0AB -:105F400043FAB8B12078022818BFFFDF0120FFF71D -:105F500005FF207800281EBF20780128FFDF70BDD4 -:105F6000F148FEF7F2FF002804BF7F20A070FEF783 -:105F7000D7FFDDE7BDE8704000F0EBB92DE9F05F39 -:105F800007464FF00009FEF76AFCE64E824630787D -:105F9000022818BFFFDFE24D7F2495F86700012833 -:105FA00030D0E24809F004FD83464FF0FF08002F8F -:105FB00000F0E480DD4809F00EFE002800F0DE80ED -:105FC000FEF716FC002800F0D98095F86600D74F40 -:105FD00068B108F003FC8046FF2808D00146F81C91 -:105FE00008F0EBFB404608F004FC40EA0A0A584679 -:105FF0004FF0000B062880F0C180DFE800F0BFBF43 -:10600000BF0CBF69C848FEF7A0FF002808BFB470E6 -:10601000FEF786FFC5E795F85700012818BF04284A -:1060200070D0BAF1000F18D195F86800002818BF99 -:10603000022867D13878F91CC0F3801008F078FB8B -:10604000824608F0DAFC40B1504608F096FB20B1D9 -:10605000102109F0FAF9002854D095F867000128BA -:1060600004BF95F89200002805D0B148FEF7B7FEAE -:106070000320307084E0012085F89200B8F1FF0F12 -:106080000FD005F19402511E404608F07FFB002816 -:1060900008BFFFDF95F8930040F0020085F89300F9 -:1060A0000CE03878C0F3801085F89300D5F8EF0045 -:1060B000C5F89400B5F8F300A5F89800B07805F19C -:1060C0009A077F2808BFFFDFB0783870B470CCE73C -:1060D0003878297CC0F38010884209D1062205F166 -:1060E0001101F81C0BF0DCFC002808BF012000D0D7 -:1060F0000020B8F1FF0F06D0C0B995F85D0040450B -:106100001AD113E03AE0B8B13878F91CC0F3801026 -:1061100008F00EFB044608F070FC38B1204608F089 -:106120002CFB18B1102109F090F928B195F857000F -:10613000012818BF04281DD095F85700F0B9BAF10E -:10614000000F17D195F86800002818BF012815D155 -:106150003878F91CC0F3801008F0EAFA044608F019 -:106160004CFC38B1204608F008FB18B1102109F0AA -:106170006CF918B195F865002C46D8B14FF00109BB -:1061800095F8660018B1FEF7C0FEFEF714F9B9F1F4 -:10619000000F1CBF0120FFF7E1FD307800281ABF77 -:1061A00030780128BDE8F09F3078032818BFFFDF62 -:1061B000BDE8F09F7068D4F8FB10C0F80E10B4F87A -:1061C000FF10418294F801110175B97D4175B7F84E -:1061D0001710C182B7F819104180B7F81B108180E1 -:1061E000B7F81D10C180534908300BF02AFE97F80C -:1061F000240000F01F017068017697F82410490907 -:1062000080F864113A78417BC2F340121140417327 -:1062100094F86A00002818BFFFDF84F86CB0D6F845 -:1062200004A0BAF80000A4F86E00BAF80200A4F8BE -:106230008400BAF80400A4F88600BAF80600A4F8AE -:1062400088009AF8640184F88A0094F85F0048B1E5 -:10625000607A04F10A01012804D1487900F0C000F5 -:10626000402835D094F8600040B1607A04F10A010A -:10627000012804BF487910F0C00F29D0C4F878B0C5 -:10628000A4F87CB03878B8F1FF0FC0F380108AF81A -:106290001900D4F8EF00CAF81A00B4F8F310AAF8FD -:1062A0001E101CD0C4F87E00BAF81E00A4F88200AC -:1062B00004F17202511E404608F068FA002808BF37 -:1062C000FFDF94F8710040F0020084F8710015E0DF -:1062D000D4F80A00A067E089A4F87C00D2E7164849 -:1062E0000BF0A6FD9AF8190084F87100DAF81A008C -:1062F000C4F87200BAF81E00A4F87600012084F8F1 -:106300006A0070680088FAF7B3FCFAF713F986F8A8 -:1063100000B0FEF7BBFDFEF7ADFDFEF7DFFC0DE0C4 -:10632000BC0B0020CC000020CE000020A80C0020D8 -:10633000800C0020C70C00203A0C0020FEF733FD33 -:10634000FEF74AFD012003F09CF919E7012203F052 -:1063500048BA70B5FEF79AFDFEF78CFDFEF7BEFC5D -:10636000FEF721FD1F4C002694F8660028B1FEF7C9 -:10637000CCFDFEF720F884F866601B4D2E70FEF70A -:106380002BFD94F85700012804D0BDE87040002090 -:1063900003F077B9022003F074F994F86A0000283A -:1063A00018BFFFDF6878002808BF70BD207C84F824 -:1063B0007100D4F81100C4F87200B4F81500A4F804 -:1063C00076003C2084F86C0068680188A4F86E10A0 -:1063D000012184F86A100088FAF74AFCFAF7AAF853 -:1063E0006E7070BDBC0B0020CC0000202DE9F04188 -:1063F000FF4F044600207978FE4D4FF00108064615 -:1064000011B1012923D007E095F85310002918BFD6 -:1064100087F8018000D0012079782B2211FB02F14E -:10642000294491F82820104318D02A22A01C293191 -:106430000BF062FB66700420207084F8028078788C -:106440002B2110FB01F0284480F8286023E095F808 -:106450002810002918BF7E70DDD1DDE795F87E0099 -:10646000E0B1D5F87F00C4F80200D5F88300C4F885 -:106470000600D5F88700C4F80A00D5F88B00C4F8E8 -:106480000E0095F88F00A07466701220207084F8BA -:10649000028085F87E600120BDE8F08195F8220039 -:1064A00001281ED0287801281CBF0020BDE8F081FB -:1064B0006670132020702022A91CA01C0BF01CFB6E -:1064C000A6712E70A888A884D5F89C00417B85F819 -:1064D000261085F822800088FAF7CAFBFAF73AF806 -:1064E000D9E7667006202070686AC4F8020085F853 -:1064F0002260D0E7BF480178002914BF80884FF69A -:10650000FF7070472DE9F041BA4C064694F8280018 -:10651000002818BFBDE8F081304609F049FA01466D -:1065200001250020072937D2DFE801F00A040736E9 -:106530003636090084F82A5009E0032000E00220E2 -:1065400084F82A0004F13301304609F09BFA84F8FC -:10655000320094F8AF0018B1FDF74DFF01281FD0AD -:10656000304609F057FA84F82B0004F12C0130462C -:1065700009F029FA9E4E04F1520730787F2808BFAF -:10658000FFDF307838707F20307084F82850BDE805 -:10659000F041032001F005BF84F83200BDE8F0812E -:1065A000FDF76CFF04F12C02511E08F0EFF80028F3 -:1065B00008BFFFDF94F82B1041F0020184F82B1084 -:1065C000D8E710B5002001F0F6FD8A4CA8B1FEF71F -:1065D000F2FB012200211046FEF7F1F904F1BC00A4 -:1065E000FEF7FDFBD4F8B400FEF7FCFB94F8A00026 -:1065F000032818BF02281FD022E0FEF747FCFEF751 -:1066000039FCFEF76BFBFEF7CEFB94F8AF0030B120 -:10661000FEF77BFCFDF7CFFE002084F8AF000120E1 -:1066200084F8B800022084F8B200FEF7D5FBBDE87C -:106630001040002001F0B5BE01210020FEF79DFCB6 -:10664000FEF778FC94F8AF0018B1FDF7A0FEFEF756 -:106650004FFC032084F8B20010BD66490028B1F851 -:10666000BA202CD0FF2A0BD24FF6FF7000EA42006E -:10667000A1F8BA00FF2888BFFF2001D9A1F8BA000D -:106680005B484268012A12BF002A0D224260D243B1 -:10669000C2EBC20303EB021291F8B930DB4303EB08 -:1066A000830CCCEB83131A444260900CB1F8BA20EF -:1066B000B0FBF2F302FB130081F8B9007047012A26 -:1066C000DED95008A1F8BA0008BF0120D8D1D5E71B -:1066D00070B5484C002584F8B250012684F8B260A9 -:1066E00094F8B20002281BBF94F8B20001280020E1 -:1066F000FFDF18BF70BD2B2101FB004181F828503E -:10670000401CC0B20228F6D3257084F8225094F8B9 -:10671000AF0028B1FEF7F9FBFDF74DFE84F8AF504E -:1067200084F8AE5084F89B60324884F8A05084F816 -:10673000B15040F2011120F8981F817070BD2DE911 -:10674000F0412C4C05460C2794F8B20001281FBFDD -:1067500094F8B20002280C20BDE8F081FEF734FB6B -:10676000FDF7E4FFFDF7BBFF94F898000126002831 -:1067700001BF94F89900002894F89A00002874D07A -:1067800094F8A000032802D0022805D008E00521D3 -:10679000194800F0DEFE03E00321174800F0D9FE9F -:1067A00094F8AC00002804BF94F8AD00002847D04E -:1067B000FCF75EF907463946D4F8A800FCF769FEF5 -:1067C0000E4990FBF1F801FB180041423846FBF7F7 -:1067D0005AFEC4F8A800D4F8A4004044C4F8A400A9 -:1067E00007F0A3FFD4F8A410884229D8002007E0BE -:1067F000D4000020D00C0020B40D002040420F0037 -:10680000C4E9290794F8AD0000281CBF012008F056 -:10681000AFF8012194F8AE0000281CBF94F8AC003A -:1068200000280DD094F8910004F19202012804D1BF -:10683000507900F0C00040280ED01046FEF72AFF25 -:1068400094F8911004F19200FDF7CAFF94F8B20099 -:106850000027012818D112E008F0B7F8324604F1F9 -:106860009201FEF7E0FEEBE7FFE794F8B2000228A2 -:1068700004BF84F8B2600C2006D1BDE8F08184F832 -:10688000B860022084F8B20094F89B0080B108F050 -:1068900018F8FE4808F051F884F8AF00FC48C4F836 -:1068A000B450FEF77AFAFEF797FA3846BDE8F08161 -:1068B00007F0AFFFEDE770B5FEF786FAF54C94F8F8 -:1068C000B200022803D0FEF787FA0C2070BD012029 -:1068D00084F8B900A4F8BA000220FEF772FAEE4874 -:1068E000FDF7C5FFED4B002004F1980294F8B110BC -:1068F000491CA3FB015C4FEA5C0CACEB8C0C6144C3 -:10690000C9B284F8B110895C012907D0401CC0B21B -:106910000328EBD3FFF755FE002070BD94F8B100BB -:10692000DF49085CFDF7ABFFFDF7D9FEF2E710B5D4 -:10693000D84C94F89030022B14BF032B00280BD1B5 -:1069400000291ABF022901200020114607F0F0FE9D -:1069500008281CBF012010BD94F89000002816BF25 -:10696000022800200120BDE81040FEF71DBEC948E6 -:1069700090F89000002816BF022800200120FEF7A2 -:1069800013BEC44981F890007047C24981F8AE0037 -:10699000704770B5BF4C94F89000002816BF0228CD -:1069A0000020012084F8910004F19201FEF7E6FD39 -:1069B00094F89000022816BF03280121002184F8D2 -:1069C000AD1094F89100002504F19202012804BF53 -:1069D000527912F0C00F0AD004F19202012804D1BA -:1069E000507900F0C000402801D0002000E00120D4 -:1069F00084F8AC00002804BF002970BDC4F8A4507E -:106A0000FCF736F8C4F8A80094F8AD0000281CBFC5 -:106A1000002007F0ADFF002694F8AE0000281ABF52 -:106A200094F8AC00002870BD94F8910004F1920134 -:106A3000012804D1487900F0C000402806D029463A -:106A400004F19200BDE87040FEF724BE07F0BDFFE0 -:106A5000324604F19201BDE87040FEF7E4BD002823 -:106A600016BF0228012200228A4981F89B2081F862 -:106A7000A100704770B5874D0C4600280CBF01215E -:106A8000002185F89B1085F8A2004FF0080085F8DA -:106A9000A3000BD1002C1ABF022C012000201146AC -:106AA00007F046FE85F8A300082801D0002070BD3D -:106AB000022C14BF032C1220F8D170BD754A032894 -:106AC00008BFC2F89C1082F8A000002070477149EE -:106AD00091F8A000032804D0012818BF022807D08D -:106AE00004E091F8A200012808BF70470020704719 -:106AF00091F8A100012814BF03280120F6D17047A6 -:106B000010B5FEF7C3F9FEF7B5F9FEF7E7F8FEF7A3 -:106B10004AF9604C94F8AF0030B1FEF7F6F9FDF792 -:106B20004AFC002084F8AF00012084F8B80002205D -:106B300084F8B200FEF750F9002010BD554981F8E5 -:106B4000B300704710B5FEF7A1F9FEF793F9FEF711 -:106B5000C5F8FEF728F94F4C94F8AF0030B1FEF7B6 -:106B6000D4F9FDF728FC002084F8AF00012084F858 -:106B7000B800022084F8B200FEF72EF9BDE81040FC -:106B8000002001F00EBC2DE9F84F424CFF217F2779 -:106B9000444E84F8B0104FF00008002800F0DC826A -:106BA00004F1BC0008F0E7FF30B904F1BC0009F0C3 -:106BB00002F8002800F0D08294F8B200334D052886 -:106BC00080F0C782DFE800F0F1F1F103F0002F4818 -:106BD00008F0EEFEB07094F89B0030B9FDF73FFE70 -:106BE000002808BF4FF0000801D04FF0010894F8CA -:106BF000AF0078B107F0F2FD84F8B0000146FF283D -:106C00000CD0E81C07F0D9FD94F8B00007F0F1FDB6 -:106C100040EA080894F8B000FF2812D107F081FE7E -:106C200084F8B00094F89B1059B1082809D128784D -:106C3000E91CC0F3801007F07BFD082818BF4FF057 -:106C40000008B078072880F0C781DFE800F04BB873 -:106C500004FCFCFC300094F8AF0018B1FEF755F9C5 -:106C6000FDF7A9FB0F48FEF770F9002808BF377041 -:106C7000FEF756F9B8F1000F00F0598194F8A00022 -:106C8000012818BF022840F052810DE08C0D002031 -:106C900038230200D00C00203E230200ABAAAAAA8F -:106CA0003B230200D4000020FEF718F868E094F8B7 -:106CB000AF0018B1FEF729F9FDF77DFBFE48FEF79E -:106CC00044F9002808BF3770FEF72AF9B8F1000F21 -:106CD00000F02D8194F8A00002284AD001284FD05E -:106CE00000F025B994F8AF0018B1FEF70EF9FDF7E2 -:106CF00062FBF148FEF729F9002808BF3770FEF75C -:106D00000FF9B8F1000F00F0128194F8A0000228EA -:106D10002FD0012834D003281CBFFFDFBDE8F88F37 -:106D2000E978D4F89C00827E91421BD12979C27EF9 -:106D3000914217D16979027F914213D1A979427F9B -:106D400091420FD1E979827F91420BD1297AC27F9A -:106D5000914207D12978427EC1F38011914208BF48 -:106D6000012100D0002194F8A220012A0ED0E9B11F -:106D7000D9E0D248FFF7C6FBBDE8F84F00F002BBF0 -:106D8000CE48FFF7BFFBBDE8F84F1AE4002974D1E5 -:106D900000F11A01C94808F016FEC84808F03AFE8A -:106DA000D4F89C104876BEE024E1D2E194F8A30028 -:106DB00008287DD094F8B01081425ED0B7E094F8F6 -:106DC000AF0018B1FEF7A1F8FDF7F5FABA48FEF7E3 -:106DD000BCF8002808BF3770FEF7A2F894F8AD00A1 -:106DE00000280CBF4FF0010B4FF0000B4FF00009D3 -:106DF0002878C10905F1090007D0407900F0C000EA -:106E0000402808BF4FF0010A01D04FF0000A94F863 -:106E1000A000032806D194F89B00002818BF94F81E -:106E2000A30001D194F8B00007F09EFC009088B157 -:106E3000102108F00AFB002818BF4FF0010BBAF12F -:106E4000000F07D000E0C7E005F109010098FEF748 -:106E5000B9FB814694F8A00003280FD0FDF73EFF50 -:106E6000B8F1000F69D0FDF7C3FC50EA090064D007 -:106E70009248FFF747FB00F041B954E0D4F89C007A -:106E8000E978827E91421DD12979C27E914219D141 -:106E90006979027F914215D1A979427F914211D13E -:106EA000E979827F91420DD1297AC27F914200E037 -:106EB0003DE007D12978407EC1F38011814208BFAF -:106EC000012500D0002594F8B000082805D094F8DA -:106ED000A310884208BF012600D00026B9F1000F98 -:106EE00005D1BBF1000F04D0FDF782FC08B10121F0 -:106EF00000E00021B8F1000F09D094F8A2000128A9 -:106F000003D020B955EA060001D0012000E000209E -:106F100001420CD094F8A200012804BF002DD4F83F -:106F20009C003FF435AFBDE8F84F00F08ABAFDF79A -:106F3000D5FEBDE8F84FFFF744BB94F8A100032845 -:106F400018BF02287ED1BAF1000F7BD0B9F1000F33 -:106F500078D1DFF8688194F87E00002872D101258D -:106F600084F8805094F8AF0018B1FDF744FA012876 -:106F700021D0404608F04EFD84F8810004F18201E2 -:106F8000404608F020FD404608F051FD84F8880096 -:106F900004F18901404608F024FD307804F18F089F -:106FA0007F2808BFFFDF307888F80000377084F84A -:106FB0007E500320A0E0FDF761FA04F18202511E29 -:106FC00007F0E4FB002808BFFFDF94F8810040F0E1 -:106FD000020084F88100D6E794F8AF0018B1FDF7FD -:106FE00094FFFDF7E8F93448FDF7AFFF00286CD1B6 -:106FF0003770CAE0314808F0DBFCB0703048E978FF -:10700000427A91421CD12979827A914218D16979C8 -:10701000C27A914214D1A979027B914210D1E979C7 -:10702000427B91420CD1297A827B914208D1297806 -:107030000078C1F38011B1EBD01F08BF012500D04B -:10704000002500E042E0FDF749FEB07804286BD14E -:10705000D5B31948FDF779FF002808BF3770FDF751 -:107060005FFF94F8B80000281CBF0020FFF7F5FA76 -:107070004FF0010884F8B880104D94F8530028BBF5 -:10708000042084F8550094F8AF00A5F1910918B1D7 -:10709000FDF7B1F9012835D0284608F0BBFC0949B5 -:1070A00081F8560009F12C01284608F08CFC00BF3D -:1070B00004F15E0128460AE0D40000208C0D002077 -:1070C000B40D0020D00C00202EE05EE016E008F0A9 -:1070D00005FD84F85D001F2884BF1F2084F85D0033 -:1070E00004F17D0530787F2808BFFFDF30782870F5 -:1070F000377084F85380042001F053F9BDE8F84F4D -:10710000FFF75FBAFDF7BAF909F12C02511E07F03B -:107110003DFB002808BFFFDFFE4890F8560040F016 -:10712000020089F82B00C3E7FB48FDF70EFF00289B -:1071300008BF3770FDF7F4FE94F8B800002804BFCC -:107140000120FFF78AFA84F8B880BDE8F84FFFF70E -:1071500038BAFFDFBDE8F88F94F8B200052828BFE1 -:10716000BDE8F88FDFE800F0030303041900F1E73E -:1071700094F8AF0018B1FDF7C8FEFDF71CF9E6481A -:10718000FDF7E3FE00283FF433AFFDF7C9FEFDF73E -:10719000A5FDBDE8F84FFFF714BADF48FDF7D5FEAF -:1071A000002808BF3770FDF7BBFE94F8B800002830 -:1071B00004BF0120FFF751FA84F8B880FDF78EFD77 -:1071C000BDE8F84FFFF7FDB970B5D24C94F8B200A6 -:1071D000072878D2DFE800F08D8D8D8D8D041000AA -:1071E000CE48FDF7FCFDFDF7A5FE9620FDF71FFE3E -:1071F000042084F8B20070BDFDF748FEFDF73AFEAA -:10720000FDF76CFDFDF7CFFD012584F8B850022095 -:1072100084F8B200FDF7E0FD2078002818BFFFDFFA -:107220000026A670D4F89C000188A1804188618363 -:107230008188A183C088E08384F8206094F8AD1031 -:10724000B74849B10178C21CC1F3801121B151790D -:1072500001F0C00140292ED094F8AE1041B110F8D1 -:10726000031BC1F3801119B1407910F0C00F22D077 -:10727000AC480AF0DDFD00BF94F8AF0018B1FDF78F -:10728000BAF8012820D0D4F89C00417EE171D0F8F2 -:107290001A10A160C08BA081666126832570D4F886 -:1072A0009C000088F9F7E4FCF9F744F9BDE8704068 -:1072B000022001F076B8D4F8E700C4F80E00B4F864 -:1072C000EB006082D8E714E0FDF7D8F804F108027B -:1072D000E11D07F05BFA002808BFFFDFE07940F00E -:1072E0000200E071D4F8BF006061B4F8C3002083ED -:1072F000D4E7FFDF70BD70B5864C94F8B20000256E -:10730000052828BF70BDDFE800F03939391B0300BC -:107310008148FDF71AFE10B97F497F200870FDF7FC -:10732000FFFD94F8B800002804BF0120FFF795F98D -:1073300084F8B850FDF7D2FCBDE87040FFF741B9C2 -:10734000FDF7A4FDFDF796FDFDF7C8FCFDF72BFD4D -:1073500094F8AF0028B1FDF7D8FDFDF72CF884F8BC -:10736000AF50012084F8B800022084F8B200FDF785 -:1073700033FDBDE87040002001F013B870BD01225C -:1073800001F0E1B870B5012000F015FF614CC8B103 -:1073900004F1E401A1F1280008F04CFB04F1E4063B -:1073A00094F89110304608F02CFB04F1920130461D -:1073B00008F002FB94F8AD00C0B394F8A0000328D5 -:1073C0001FD025E0FDF762FDFDF754FDFDF786FCBB -:1073D000FDF7E9FC94F8AF0030B1FDF796FDFCF73E -:1073E000EAFF002084F8AF00012084F8B8000220F2 -:1073F00084F8B200FDF7F0FCBDE87040002000F01A -:10740000D0BF94F89B00002818BF94F8A30001D1C6 -:1074100094F8B00007F0DBFA050007D001213046F0 -:1074200008F0EFFA2946304608F0C6FA3C48FDF766 -:10743000D6FC01210846FDF7A0FD052084F8B20026 -:1074400070BD70B5022000F0B6FE324C68B301206A -:1074500000F0A7FF04F1E401A1F1280008F0EAFA26 -:10746000D4F89C00417B04F1E40008F0C1FAD4F8A0 -:107470009C0004F1BC0204F1E4061278417BC2F3E3 -:1074800040121140417394F89110304608F0B9FA57 -:1074900004F19201304608F08FFA94F8AD00B8B3C9 -:1074A00094F8A00003281FD025E0FDF7EFFCFDF7BE -:1074B000E1FCFDF713FCFDF776FC94F8AF0030B16A -:1074C000FDF723FDFCF777FF002084F8AF000120D3 -:1074D00084F8B800022084F8B200FDF77DFCBDE816 -:1074E0007040002000F05DBF94F89B00002818BF9A -:1074F00094F8A30001D194F8B00007F068FA0500F1 -:1075000014D00121304608F07CFA294630460BE0C1 -:107510000CE00000D00C0020D40000208C0D0020D6 -:10752000B40D0020DE0C002008F046FAD4F89C00D0 -:10753000C18A324808F0FEFAD4F89C00417D2F48F9 -:1075400008F0FCFA2D48FDF74AFC062084F8B2004A -:1075500070BD70B50C46054608F008FA032C47D0FC -:10756000052C18BF70BD0521284608F002FA244CEE -:10757000D4F89C0000F10E01284608F0C5FAD4F8B2 -:107580009C0000F11201284608F0C2FAD4F89C00D1 -:10759000417D284608F0D2FAD4F89C00C18A2846DA -:1075A00008F0C8FAD4F89C004188284608F0B6FADA -:1075B000D4F89C008188284608F0B4FAD4F89C00DE -:1075C000C188284608F0B2FAD4F89C0000F10801FE -:1075D000284608F0CDFAD4F89C00017E284608F031 -:1075E000AFFA94F8B3102846BDE8704008F0B2BA7C -:1075F0002846BDE87040032108F0BBB9B40D002057 -:10760000D00C00202DE9FF4F06460C46488881B07B -:1076100040F2E24148430090E08A002500FB01FB74 -:1076200094F8630091460D2818BF0C281ED0252819 -:107630001EBF94F8640025284FF0000A16D0049865 -:1076400018B10121204603F029FB94F8510094F869 -:10765000528094F8C810074659B1012958D0022920 -:107660003DD0032918BFFFDF52D0A6E04FF0010A3A -:10767000E5E7B9F1000F08BFFFDFFE4D686800289D -:1076800008BFFFDF94F85100FDF7C7FE00F2E731B5 -:107690004FF47A70B1FBF0F0696800EB010994F8DF -:1076A0005100FDF7BAFE94F85110022907BFF249C4 -:1076B0004FF47A72F1494FF4C8621144084400F261 -:1076C000E7314FF47A70B1FBF0F040F2E241081A72 -:1076D0002969584449440844051D012015E0E5483E -:1076E000A9F101014068084308BFFFDFE448B9F190 -:1076F000000F006800EB0B0506D0DE48406800F282 -:107700002230A84288BFFFDF032084F8C80053E07E -:1077100094F86310009D25291CBF94F86410252956 -:1077200036D1B4F85810B4F8EA20891A491C09B2C5 -:1077300000292DDB94F8E81009B30F4694F8E910FE -:10774000002918BF8846022807BFCB484FF47A713A -:10775000CA484FF4C8610144022F07BFC6484FF41E -:107760007A72C6484FF4C8621044814208D9081A98 -:1077700000F5FA714FF47A70B1FBF0F0054407E0C0 -:10778000401A00F5FA714FF47A70B1FBF0F02D1A3F -:10779000B9F1000F10D0DFF8DC92D9F8040020B95D -:1077A000B9F80200002818BFFFDFD9F8040000F282 -:1077B0002230A84288BFFFDF05B9FFDF2946D4F891 -:1077C000CC00FAF760FEC4F8CC00B0600020307046 -:1077D0004FF0010986F80490204603F04CFBAAF113 -:1077E0000101084208BF86F8059006D094F8C80049 -:1077F00001280CBF0220032070714046D4F824B049 -:10780000FDF7FCFD0146022F07BF9B484FF47A723B -:107810009A484FF4C8621044084400F23F614FF4A4 -:107820007A70B1FBF0F0584400F5C970F06004982C -:1078300030EA0A0004BF05B0BDE8F08F29463046A3 -:1078400007F010FF87B2204603F015FBB8420FD8AF -:10785000074686F8059005FB07F1D4F8CC00FAF747 -:1078600012FEB0602946304607F0FCFE384487B26D -:107870003946204603F012FAB068C4F8CC0005B0CF -:10788000BDE8F08F2DE9F04304467E4885B00D46F3 -:1078900090F80004DFF8F091400999F800144909C4 -:1078A000884218BFFFDFDFF8CC81002708F13C06D3 -:1078B000082D80F0FA80DFE805F0045B656560F86C -:1078C000F894202C28BFFFDF36F814000621F9F7C2 -:1078D000C5F8050008BFFFDF202C28BFFFDF36F802 -:1078E00014002988884218BFFFDF95F8C8000028D7 -:1078F00008BFFFDF284602F0BCFEC8F80470A8F8F5 -:10790000027029460020C8F8107007F0EFFE00F161 -:107910009804686AA04218D995F85200FDF76EFDE8 -:1079200095F85110022907BF53494FF47A72534911 -:107930004FF4C862114408444FF47A7100F23F607A -:10794000B0FBF1F1686A0844071B29460020C8F81B -:10795000087007F0CBFE698840F2E242514398304C -:10796000081AA0F22230C8F80C0005B0BDE8F08378 -:1079700005B0BDE8F04303F05DB805B0BDE8F043E5 -:10798000FDF792BB99F8140D4049400991F8001495 -:107990004909884218BFFFDF202C28BFFFDF36F8D7 -:1079A00014000621F9F75AF8050008BFFFDF202C64 -:1079B00028BFFFDF36F814002988884218BFFFDF90 -:1079C0000022012329466846FFF71CFE95F8D200E5 -:1079D0006946FBF797FA002808BFFFDF05B0BDE84E -:1079E000F083202C28BFFFDF36F814000621F9F7BA -:1079F00035F8050008BFFFDF202C28BFFFDF36F871 -:107A000014002988884218BFFFDF95F8C8000428B1 -:107A100018BFFFDF85F8C87095F8D2404FF6FF79A0 -:107A2000202C28BFFFDF26F8149095F8D200FBF732 -:107A300000F8002808BFFFDF202085F8D200D5F825 -:107A4000D800002804BFD5F8D400C8F8140008D026 -:107A5000D5E937121144826911448161D5E93501B4 -:107A6000C860D5F8D40000281CBFD5F8D810016133 -:107A700014D10EE0DC0D002068360200A2240200C2 -:107A8000E000002001E000E00BE000E019E000E091 -:107A90000BE0D5F8D800002818BF8761FC480078B3 -:107AA00005B0BDE8F043F4F725B9FFDF05B0BDE848 -:107AB000F0832DE9F047F74D0746E88B6C68401CD2 -:107AC000E88328784FF00008002808BFFFDF07D0C0 -:107AD000DFF8C4A3042814D0052818BFFFDF40D066 -:107AE00021462869FAF7CFFCB86087F800800120AA -:107AF0003871A86800F5B370F860287804287CD144 -:107B000085E00029ECD02E69DAF8141039B38946E3 -:107B1000C9680029FBD1B9F1000F20D099F8000005 -:107B2000002808BFFFDFD9F81410D9F80400014479 -:107B30003046FBF7AEFC002807DA211A4A1E92FBFA -:107B4000F4F202FB0406214604E090FBF4F202FB8F -:107B5000140621468E4288BFFFDF3446C0E7444604 -:107B6000BEE70029BCD0D5F81890B9F1000F08BFC6 -:107B7000FFDF0026D9F8DC10DAF814403046721E18 -:107B80005CB1A069884228BF824284BF0246264673 -:107B90002046E468002CF4D106B9064609F1C80471 -:107BA000C9F8D860002E04BFC4F80C80CAF814408D -:107BB00005D0F068F460E060002818BF0461D4F8D4 -:107BC0001090C4F81880B9F1000F0ED0D9F8180041 -:107BD00048B1D4F814A0504538BFFFDFD9F81800D9 -:107BE000A0EB0A00A061C9F81880002E08BFC5F8F4 -:107BF000208009D03078002800E00DE008BFFFDFCA -:107C0000716970680844286240F6B83468E7E88B08 -:107C10000A2838BF032000D302207871E88B01289E -:107C200006D93846696807F01DFDE98B0844E883EA -:107C3000B8682861BDE8F0872DE9F0418046974893 -:107C400084B00E4690F80004954F410997F800045F -:107C50004009814218BFFFDF01210025082E8D4C0D -:107C600062D2DFE806F0041A35353061614D617388 -:107C70002173607800281CBF04B0BDE8F0818648FD -:107C8000456005612573A068C138FEF758FD0028DE -:107C900018BFFFDF04B0BDE8F081607850B1207BF1 -:107CA000002808BFFEF72CFF657304B0BDE8F04163 -:107CB000FAF7E9BDA173FEF7FEFD002818BFFFDF4C -:107CC00004B0BDE8F08104B0BDE8F041FDF7ECB9C7 -:107CD00097F8140D7349400991F800144909884236 -:107CE00018BFFFDF00216846FFF7E3FE6946404604 -:107CF000FBF708F9002808BFFFDF04B0BDE8F081FA -:107D00002078052818BFFFDF207F002808BFFFDF8D -:107D100025772570207DFAF78CFE002808BFFFDF4D -:107D2000257504B0BDE8F081FFDF04B0BDE8F08147 -:107D30002DE9F041574C0026207804281FBF2078F9 -:107D400005280C20BDE8F08101206070607B0025D3 -:107D5000A8B1EFF3108010F0010F72B60CBF00272E -:107D60000127607B00281CBFA07B002805D0FEF700 -:107D7000C7FE6573A573FAF786FD2FB903E0207D72 -:107D8000FBF7D3F900E062B6207DFBF71CFC207FF7 -:107D900028B125772078052818BFFFDF0C266570ED -:107DA0002570207DFAF745FE002808BFFFDF257506 -:107DB0003046BDE8F0812DE9F04F364883B00078B9 -:107DC000002818BFFFF7B4FF0120DFF8CC8088F847 -:107DD000000069460620F8F7CCFD002818BFFFDF39 -:107DE00000274FF6FF7934E0029800281CBF90F876 -:107DF000C81000292DD0008848451CBFDFF8A8A076 -:107E00004FF0200B3BD00621F8F728FE040008BFF6 -:107E1000FFDF94F8D200FBF7D6FB84F8C87094F823 -:107E2000D2504FF6FF76202D28BFFFDF2AF81560CD -:107E300094F8D200FAF7FDFD002808BFFFDF84F8B0 -:107E4000D2B069460620F8F794FD002818BFFFDF7E -:107E500010E06846F8F76BFD0028C5D00FE00298E7 -:107E600000281CBF90F8C810002903D0008848459E -:107E7000C9D104E06846F8F75AFD0028EFD088F829 -:107E80000070C8F8147003B00020BDE8F08F000047 -:107E9000DC000020F40D0020DC0D002001E000E0FB -:107EA0000BE000E019E000E0180E002010B50078AB -:107EB000F84C60B101280CBF40F6C410FFDF06D0BB -:107EC000A06841F66A01884228BFFFDF10BDA060AC -:107ED000F6E710B5EF4C00232070EF4803704370B5 -:107EE000037703734373837320218361017518380B -:107EF00043703A3010214FF6FF72428020F8042F71 -:107F0000491EFAD1180008BFA36005D0002B0EBF90 -:107F1000FFDF40F6C410A060A06841F66A01884205 -:107F200028BFFFDFBDE8104045E72DE9F043DA4CFC -:107F3000054685B0207816460F4600281EBF0C2047 -:107F400005B0BDE8F08395F8519095F85200D5F84A -:107F50002480FDF753FAB9F1020F07BFCF494FF460 -:107F60007A72CF494FF4C862114408444FF47A79C9 -:107F700000F23F60B0FBF9F0404400F22230C5F857 -:107F8000DC00A56195F8C800002818BFFFDF40F2AB -:107F90007120784360600120FDF730FA00F2E7308D -:107FA000B0FBF9F040F2712106FB0100A0606168AE -:107FB000A1F2F621884298BF01460020A160B9498C -:107FC00008610521217060702077E083B648FAF7D8 -:107FD000D5FC2075202808BFFFDFFAF749FD206196 -:107FE00001216846FFF765FD207D6946FAF78AFFA3 -:107FF000002808BFFFDF002005B0BDE8F083A648D9 -:10800000007800281CBF0020704710B50620F8F744 -:10801000C1FC80F0010010BD30B59F4C85B02278C6 -:10802000002A1EBF0C2005B030BD0D4640F2712164 -:10803000484360600120FDF7E1F94FF47A7100F2E6 -:10804000E730B0FBF1F040F2712105FB0100A060C8 -:108050006168A1F2F621884298BF01460020A16024 -:10806000607004212170E0838F48FAF787FC207547 -:10807000202808BFFFDF8B48406938B10146C0683F -:108080000028FBD111B1FAF7F3FC05E0FAF7F0FC98 -:1080900040F6B831FAF7F7F9206101216846FFF799 -:1080A00008FD207D6946FAF72DFF002808BFFFDF95 -:1080B000002005B030BD70B5774CA1690160FFF7B5 -:1080C00037FE002300BBA169D1F8D8205AB1D1E90D -:1080D00037C5AC449569AC44C2F818C0D1E9352C19 -:1080E000CCF80C2005E0DFF8BCC1D1F8D420CCF8E6 -:1080F0001420D1F8D420D1F8D810002A18BF11616B -:1081000002D1002918BF8B61A36170BD6549487019 -:10811000704770B540F2E24300FB03F510460C4691 -:10812000FDF76CF9022C07BF5C494FF47A725C4989 -:108130004FF4C862114408444FF47A7100F23F6072 -:10814000B0FBF1F000F2223085428CBF281A0020EB -:1081500070BD70B50D4606460146002007F0C6FA10 -:10816000044696F85200FDF749F996F85110022995 -:1081700007BF4A494FF47A7249494FF4C862114423 -:1081800008444FF47A7100F23F60B0FBF1F071885F -:1081900040F271225143C0EB4100A0F22230A542CF -:1081A00034BF21462946814203D2A5422CBF28462E -:1081B0002046706270BD3B4910B54968002801F146 -:1081C000980408BF04F5BC7409D0012808BF04F561 -:1081D000317404D0022814BFFFDF04F5B0742E48B8 -:1081E0008068A0428CBF0120002010BD10B52D4C2E -:1081F000607828B1D4E90201626807F05BFAA060F8 -:10820000D4E9010188429CBF2078002814BF0020D7 -:10821000012010BD04222DE9F043204FDFF88080BB -:1082200085B04FF47A79052980F0B980DFE801F054 -:108230000A2B033E890080F8C82005B0BDE8F04352 -:10824000FAF721BB044617480078002818BF84F8C5 -:10825000C82004D005B0BDE8F043FAF714BB0122F2 -:10826000002321466846FFF7CDF994F8D20069460D -:10827000FAF748FE002808BFFFDFB4F85800401C9A -:10828000A4F85800E6E7032180F8C81005B0BDE85F -:10829000F0830000DC000020F40D002068360200AE -:1082A000A2240200DC0D0020397C01000446408835 -:1082B00040F2E2414843B3490860D4F8F000214657 -:1082C0000089E082D4F8F00080796075D4F8F0007D -:1082D00040896080D4F8F0008089A080D4F8F00054 -:1082E000C089E0800020A66A07F000FA054694F8ED -:1082F0005200FDF783F894F8511002290EBF4FF495 -:108300007A7147464FF4C8613944084400F23F602F -:10831000B0FBF9F1608840F271225043C1EB40009C -:10832000A0F22230AE4234BF29463146814203D208 -:10833000AE422CBF304628466062022084F8C80056 -:10834000A4E706460146856A002007F0CFF90446F7 -:1083500096F85200FDF752F896F8511002290EBF18 -:108360004FF47A7147464FF4C8613944084400F22B -:108370003F60B0FBF9F0718840F271225143C0EBCD -:108380004100A0F22230A54234BF21462946814255 -:1083900003D2A5422CBF28462046706276E7FFDF55 -:1083A00074E72DE9F041DFF8E0810025774C98F87B -:1083B000001084B0052880F0C180DFE800F00316CB -:1083C0006DB9B900E5830846F3F794FC607800289E -:1083D00073D100216846FFF76CFB207D6946FAF7F0 -:1083E00091FD002808BFFFDF67E00120FDF706F8D8 -:1083F0006749684E08444FF47A71B0FBF1F0216987 -:10840000726840F2E2431144081AA16900F2DE608A -:108410004A88C83102FB03F772698A4208BF002507 -:1084200014D0216AFBF735F8002807DA391A4A1EFA -:1084300092FBF7F202FB0705394604E090FBF7F2E6 -:1084400002FB170539468D4288BFFFDFD8F80800C8 -:10845000854208D2A06940F271224188C1824A4314 -:1084600005EB420505E040F2E240B5FBF0F0A16902 -:10847000C882A06905214175C08A6FF41C71484308 -:1084800005EB400040F635413061B0EB410F28BFAD -:10849000FFDF04B0BDE8F081E5830846F3F72AFC6E -:1084A00001202077A0692169C0F8CC1080F8C8505D -:1084B0002178052918BFFFDF06D0FAF7E4F96573C4 -:1084C000A57304B0BDE8F081002808BFFFDFA069F4 -:1084D00090F8C800002818BFFFDFA06990F8D2000C -:1084E000202818BFFFDF2C48FAF748FAA169064692 -:1084F000202881F8D2000F8828BFFFDF274820F806 -:108500001670A06990F8D200202808BFFFDF002372 -:1085100001226846A169FFF775F8A069694690F8DD -:10852000D200FAF7EFFC002808BFFFDFA561C4E71F -:1085300004B00846BDE8F041F3F7DCBBFFDF04B050 -:10854000BDE8F081704770B5124D0446002912BF96 -:108550000129686070BD02291CBFFFDF70BD6888FB -:10856000401C68801046FCF758FF4FF47A7100F207 -:10857000E730B0FBF1F0201A686070BD0348007866 -:1085800070470000E0000020DC000020F40D002017 -:10859000C92E0200DC0D002085780100180E002095 -:1085A000FE48406870472DE9F0410D4606460146F9 -:1085B0001746012007F09AF8044696F85200FCF797 -:1085C0001DFF96F8521002290CBFF549F5490844E1 -:1085D0004FF47A7100F2E140B0FBF1F0718840F2A3 -:1085E00071225143C0EB4100C01BA0F55970A54258 -:1085F00034BF21462946814203D2A5422CBF2846DA -:1086000020467062BDE8F0812DE9FF4F8FB004462F -:1086100090F85200DDF8709098460B9049EA0800F7 -:108620000C9094F86400002617460D280CBF01201A -:1086300000200890B8F1000F04BF94F8040103284B -:1086400071D1089800286ED0B4F87C01B8426AD184 -:10865000D4F80C01C4F8F800608840F2E2414843C5 -:10866000C4F8FC00B4F85201B4F8DE100844C4F8B1 -:108670000001204604F00DFDB4F88001E08294F87A -:108680007E016075B4F882016080B4F88401A08036 -:10869000B4F88601C549E080C348097894F864318C -:1086A000628830F8111030F81300D4F828A008447C -:1086B0000004000C4FF0000105D000FB02F1BC48A3 -:1086C000B1FBF0F0411C1FFA81FB2146012007F0AD -:1086D0000DF8054694F85200FCF790FE94F85210FD -:1086E00002290CBFAE49AF49084400F2E1414FF402 -:1086F0007A70B1FBF0F1608840F271225043C1EB17 -:108700004000A0EB0B00A0F55970AA4534BF2946E4 -:108710005146814203D2AA452CBF5046284660628A -:10872000022084F80401D4E956ABB4F8DE000390CB -:10873000B4F85001D4F84C110691B8F1000F03D0F1 -:1087400094F8181149B17FE004F1D8010091743117 -:10875000099104F59C75091D07E004F596710091D7 -:10876000091D099104F58E75091D0A91B4F8581078 -:10877000381A791A09B200B20491002805DAD4F83F -:108780004801069001200C90084694F80411002935 -:108790005ED0012900F0668102297DD0032918BF2F -:1087A000FFDF00F0A98131460698F9F76CFE0999C0 -:1087B00008600A9801210780002028702971099813 -:1087C0000068A8607948D0E90520824287BF009AF6 -:1087D0001060009802600098626A0068104400F21D -:1087E0008310E8606971B4F8C800C01B00B20028AB -:1087F000C4BF032068710898002800F0F181B9F126 -:10880000000F18D0B4F8F020002A0CBF0020B4F8F4 -:10881000F200A4F8F20094F8F430401C584390425F -:1088200009D26879401E002805DD6971B4F8F200AC -:10883000401CA4F8F200B8F1000F00F0F58194F8A4 -:108840001801002800F0EC8113B00220BDE8F08F81 -:10885000BAF1000F08BFFFDFE08A40F27121484300 -:10886000490001EB400210980021002806D000FBCF -:1088700002F14F48B1FBF0F000F10101C4F808111A -:10888000608840F2E24100FB01F210994FF00000D5 -:1088900008D001FB02F100E042E04548B1FBF0F0F6 -:1088A00000F10100C4F80C010AF101064FF00100CB -:1088B000FCF7A4FD3F494FF47A7B0844B0FBFBF082 -:1088C000E18A40F271225143C0EB4101D4F8080122 -:1088D0000190091A314401F2C246607D510010FB3B -:1088E00001F00C900120FCF789FD33490844B0FBEE -:1088F000FBF1019801EB40010C9801EB000B01200A -:10890000FCF770FD584400F1620128484161816123 -:10891000A6EB0A00401EB0F53D7F38BFFFDF42E7FF -:10892000E28A40F271215143D4F8FC00109A00EB26 -:1089300041010020002A06D01D4802FB01F2B2FBD3 -:10894000F0F000F10100C4F80801628840F2E2434F -:1089500002FB03FC109B4FF0000206D0144A03FBFD -:108960000CF3B3FBF2F202F10102C4F80C21039AFA -:108970009AB9B9F1000F38D094F85200FCF73EFDD7 -:10898000014694F8520002280CBF054A054A1144DA -:1089900001F2E1424FF47A7110E026E0580E002017 -:1089A00004360200A224020042230200E800002054 -:1089B00040420F007D2A020083290200B2FBF1F140 -:1089C000D4F80821E38A114440F2712CD4F8FC2039 -:1089D00003FB0CF302EB4302561AFCF703FDABEB6F -:1089E00000003044A0F1200600E00E1AD4F8002167 -:1089F000D4F8F810D4F8080101FB020B607D40F2B6 -:108A0000E24110FB01F00C9094F852A05046FCF7A4 -:108A1000F5FC0146BAF1020F0CBFF948F9480844C9 -:108A200000F2E1414FF47A70B1FBF0F000EB4B0142 -:108A30000C9801EB000B5046FCF7D4FC584400F1B5 -:108A40006001F14840F2712341616288D4F80C1151 -:108A50005A43C1EB4201A1F213318161012084F834 -:108A60000401A0E6628840F27123D4F80C115A4345 -:108A7000C1EB420202FB00F6DDE903020244D4F836 -:108A80000001D4F8F8C0121AD4F80831521E0CFBB9 -:108A9000003002FB010B607D40F2E24110FB01F06F -:108AA0000C9094F852000190FCF7A8FC0146019844 -:108AB000022814BFD348D248084400F2E1414FF4E1 -:108AC0007A70B1FBF0F000EB4B010C9801EB000B5E -:108AD0000198FCF787FC584400F16001CA48B9F1DD -:108AE000000F4161A6F2133181613FF45CAEBAF12F -:108AF000000F08BFFFDF56E6628840F27123D4F80A -:108B00000C115A43C1EB420101FB00F694F86300DB -:108B100025281CBF94F8640025280AD1B4F87C01EC -:108B2000381A00B2002804DB94F87F01002818BF2F -:108B30000B900C9828B1039880B3BBF1000F18BFBD -:108B4000FFDFDDE903010144D4F80C0101FB00FA69 -:108B50000B98FCF753FC01460B9802280CBFA84861 -:108B6000A848084400F2E1414FF47A70B1FBF0F0FC -:108B700000EB4A0A0B98FCF735FC504400F1600109 -:108B8000A14840F2712341616288D4F80C115A4324 -:108B9000C1EB4201A1F21331816104E6FFE7BBF1B1 -:108BA000000F14BFBAF1000FFFDF0B98FCF726FC93 -:108BB0000B9902290CBF92499249084400F2E14105 -:108BC0004FF47A70B1FBF0F0361A94F85200FCF7CB -:108BD00009FCABEB00003044A0F12006B1E700BF78 -:108BE000B9F1000F7FF40EAE94F8040100283FF4B1 -:108BF00022AE618840F27122D4F80C015143C0EBDF -:108C00004101284606F02EFD0004000C3FF413AE8F -:108C10001D99002918BF0880012013B0BDE8F08F0E -:108C200094F85401FAF781FA94F854012946FAF7B6 -:108C300069F900281CBF88F0010084F819010020A0 -:108C400013B0BDE8F08F2DE9F04F704C804683B033 -:108C500020788A4600256C4E4FF00209032804BF95 -:108C6000207B40457CD1606830612078032818BFA4 -:108C7000FFDF0327BAF1080F70D2DFE80AF0040E15 -:108C80001B1B166F6F6A6562FCF74FFF002818BF49 -:108C9000FFDFB77003B0BDE8F08FFDF7CBF8002819 -:108CA00018BFFFDF03B0BDE8F08F03B0BDE8F04FA1 -:108CB000FCF7FAB927752574E07A012658B14FF40C -:108CC0007A71A069F9F7DFFBA061002104F11000BF -:108CD00006F0C8FC1AE001216846FAF71AFF9DF871 -:108CE000000042F210710002B0FBF1F201FB12052C -:108CF000FCF793FD05442946A069F9F7C4FBA06180 -:108D0000294604F1100006F0ADFC461C208C411CE5 -:108D10000A293CBF30442084606830B1208C401C5C -:108D20000A2828BF84F8159000D26775607A002859 -:108D30001CBF03B0BDE8F08F207B04F11001FAF7EF -:108D4000E1F8002808BFFFDF03B0BDE8F08F07E0BF -:108D500004E0207BF9F76DFE2570F5E7FFDFF3E710 -:108D6000B8F1200F28BFFFDF294F072137F818007F -:108D7000F7F774FE040008BFFFDFB8F1200F28BF2B -:108D8000FFDF37F818002188884218BFFFDF4FF057 -:108D900001083461BAF1080F80F04481DFE80AF07D -:108DA000049AA2A29DEEEEEDC4F85851F580C4F8E5 -:108DB0005C5194F8190138B9F9F75AFED4F8241126 -:108DC000FAF767FB002825DCB4F81611B4F8580050 -:108DD000814206D1B4F8CC10081AA4F8CE0020467F -:108DE00005E0081AA4F8CE00B4F816112046A4F83D -:108DF0005810D4F84011C4F82411C0F8481127E0E5 -:108E000004360200A2240200E8000020580E0020D0 -:108E1000800E0020B4F81411B4F85800081AA4F811 -:108E2000CE00B4F814112046A4F85810D4F8241138 -:108E3000C4F84011C4F84811D4F82C11C4F8D81063 -:108E4000D4F83011C4F84C11B4F83411A4F850110E -:108E500003F0D7FFF9F7E6FD94F852A00746504615 -:108E6000FCF7CCFABAF1020F0CBFFE49FE490844E8 -:108E70004FF47A7100F2E140B0FBF1F1D4F80C014B -:108E800040F27122014460885043C1EB4000A0F1E0 -:108E9000300AB72F98BFB7272146012006F026FCDD -:108EA0003844AAEB0000A0F21937A246214601205F -:108EB00006F01CFCDAF824109C30814288BF0D1AA1 -:108EC000F760BD4228BF3D46B56084F8188186F83A -:108ED000029039E704F0DBF801E0FCF7E5F884F8EC -:108EE000188131E7F9F7C4FDD4F84821014610464E -:108EF000FAF7CFFA48B1628840F27123D4F80C1126 -:108F00005A43C1EB4201B0FBF1F094F864100D2913 -:108F10000FD0B4F85810B4F816210B189A42AEBF0F -:108F2000501C401C0844A4F8160194F81A0178B9A2 -:108F300005E0B4F81601401CA4F8160108E0B4F8E6 -:108F40001601B4F8CC10884204BF401CA4F81601E6 -:108F5000B4F85201DFF81493401CA4F85201B4F89D -:108F60007E00B4F87C100DF1080B401AB4F85810CC -:108F7000401E08441FFA80FA17E045E052E03078BE -:108F8000002339F81000CDE9005B94F8641139F83A -:108F90001110084481B22046FFF736FB00283FF449 -:108FA000D3AE012818BFFFDF26D0B4F81621AAEBF4 -:108FB000020000B20028E2DA082084F8730084F886 -:108FC0007280204603F0D2FB84F8045194F8545187 -:108FD0004FF6FF78202D00D3FFDF27F8158094F897 -:108FE0005401F9F726FD202084F85401307903B0AC -:108FF000BDE8F04FF2F77EBEB4F81601BDF80810D8 -:109000000844A4F81601D0E794F80401042818BF16 -:10901000FFDF84F8045194F854514FF6FF78202D67 -:10902000DBD3D9E7FFDF8FE610B5914C207850B144 -:1090300001206072FCF71DFF2078032805D0207AFC -:10904000002808BF10BD0C2010BD207BFAF76DF87A -:10905000207BFAF7B8FA207BF9F7EBFC002808BF71 -:10906000FFDF0020207010BD2DE9F04F804F83B04E -:10907000387801244FF0000840B17C720120FCF7E1 -:10908000F8FE3878032818BF387A0DD0DFF8E4915D -:1090900089F8034069460720F7F76BFC002818BFE2 -:1090A000FFDF4FF6FF7440E0387BFAF73EF8387B7D -:1090B000FAF789FA387BF9F7BCFC002808BFFFDF14 -:1090C00087F80080E2E7029800281CBF90F804119E -:1090D00000292AD00088A0421CBFDFF89CA14FF0D5 -:1090E000200B3AD00721F7F7B9FC040008BFFFDFD7 -:1090F00094F85401FAF767FA84F8048194F854510B -:109100004FF6FF76202D28BFFFDF2AF8156094F870 -:109110005401F9F78EFC84F854B169460720F7F73B -:1091200028FC002818BFFFDF12E06846F7F7FFFBB6 -:109130000028C8D011E0029800281CBF90F8041144 -:10914000002905D00088A0F57F41FF39CAD104E08D -:109150006846F7F7ECFB0028EDD089F8038087F824 -:109160000B8003B00020BDE8F08F70B50446434883 -:1091700090F80004424D400995F8001449098842CE -:1091800018BFFFDF95F8140D40093E4991F800140F -:109190004909884218BFFFDF3649002001220C71BF -:1091A00088700A704870C87031490870BDE8704016 -:1091B0005AE73049087070472DE9F8432C4C0646B1 -:1091C0002078002875D13048F9F7D8FB2073202883 -:1091D0006FD0032766602770002565722572AEB1D7 -:1091E000012106F1F400FAF70CFD0620F7F7E0FB89 -:1091F00080460720F7F7DCFB96F8F4104044B1FBFB -:10920000F0F200FB1210401C86F8F400F9F70AFC9B -:109210001E49091838BF40F2F65000F59D7086B21D -:10922000FCF7D7FAE061FCF7F8FA4FF0010878B3E1 -:1092300084F80A8001216846FAF76BFC9DF800006B -:1092400042F210710002B0FBF1F201FB1200064481 -:10925000F9F70EFC3146F9F716F9A0612775677525 -:10926000257416E004360200A22402004223020004 -:10927000580E0020E8000020800E002001E000E0F1 -:109280000BE000E019E000E0478C01000AFAFFFF64 -:1092900012E0207B04F11001F9F734FE002808BF2A -:1092A000FFDF25840020FCF7E4FD0020BDE8F88303 -:1092B000FFE70C20BDE8F883F9F7DAFB3146F9F750 -:1092C000E2F8A061A57284F80B80C7E72DE9F047AA -:1092D00082B00026044680F80461A0F85061DFF8EF -:1092E00000944288FD4FD0F8288099F8000094F847 -:1092F000641137F8100037F8111008440104090C04 -:10930000304605D001FB02F0F649B0FBF1F0401CFD -:109310001FFA80FA2146012006F0E8F9054694F884 -:109320005200FCF76BF894F8521002290CBFEE497A -:10933000EE4908444FF47A7100F2E140B0FBF1F1DC -:10934000608840F271225043C1EB4000A0EB0A005C -:10935000A0F55970A84534BF29464146814203D241 -:10936000A8452CBF4046284660620096019699F8B1 -:10937000000094F86411002337F8100037F811103A -:109380001A46084481B22046FFF73EF9002818BF6C -:10939000FFDFC4F800610120C4F8F86084F804011C -:1093A000A4F81661A4F8146184F81A61B4F858009E -:1093B000401EA4F85800A4F8526102B00020BDE895 -:1093C000F087C74948707047C94810B5417A0124F1 -:1093D000002918BF002408D1C17A31B1406AC549BB -:1093E000884284BF0024FCF740FD204610BD70B5C4 -:1093F000BB4C0546E088401CE080D4E9020162785D -:10940000D5F85861002A1CBF324606F053F9A06017 -:10941000864208D895F80401012804D0E078002895 -:1094200004BF012070BD002070BD70B50D4640F234 -:10943000E24100FB01F42846FBF7E0FF022D0CBFE0 -:10944000A949AA4908444FF47A7100F2E140B0FBFF -:10945000F1F000F54D7084428CBF201A002070BDE1 -:109460002DE9F04383B00026044680F8186190F897 -:10947000D600002807BF94F80401032803B0BDE814 -:10948000F083F9F7F5FAD4F8482101461046FAF7C7 -:1094900000F80028DCBF03B0BDE8F083628840F22A -:1094A0007123D4F80C115A43C1EB4201B0FBF1F027 -:1094B000411CB4F858000144A4F81411B4F8CC10BD -:1094C000B4F81421891A09B20029DCBF03B0BDE841 -:1094D000F083012184F81A11B4F87E10B4F87C20CE -:1094E0007E4F891A491E084485B2DFF8F4810DF1D8 -:1094F00008091EE098F8000037F81000CDE900696F -:10950000B4F8142194F86411012337F811100844B9 -:1095100081B22046FFF778F8002804BF03B0BDE809 -:10952000F08301280FD0022812BFFFDF03B0BDE88F -:10953000F083B4F81401281A00B20028BCBF03B0AD -:10954000BDE8F083D6E7B4F81401BDF8081008446C -:10955000A4F81401EDE7F0B5DFF884C104265F4BF1 -:109560009CF80020002583B006297DD2DFE801F0B9 -:10957000073C03191941044680F8046107E00446DA -:109580009CF80300002818BF84F804610BD0F9F799 -:109590007AF9A4F85251B4F85800A4F8160184F8E6 -:1095A0001A5103B0F0BD33F8120094F804210121E0 -:1095B000032A13BF94F80421C4F80051C4F8F850EA -:1095C000012AE4D1CDE9001594F86411B4F8CC2057 -:1095D00033F811100023084481B22046FFF714F835 -:1095E000002818BFFFDFD2E7032180F8041103B081 -:1095F000F0BD0446B0F802C0866A90F8640133F802 -:10960000121033F8100008440104090C4FF0000058 -:1096100005D001FB0CF03349B0FBF1F0401C87B2E0 -:109620002146012006F062F8054694F85200FBF747 -:10963000E5FE94F8521002290CBF2B492B4908442F -:109640004FF47A7100F2E140B0FBF1F0618840F232 -:1096500071225143C0EB4100C01BA0F55970AE42CE -:1096600034BF2946314600E008E0814203D2AE42D1 -:109670002CBF30462846606203B0F0BDFFDF03B068 -:10968000F0BD2DE9F8431A4C0327154EE27AA17A72 -:1096900042F21079002550B1012843D002281CBFA6 -:1096A000FFDFBDE8F8834FF000081AB95EE04FF025 -:1096B00000080AB1E5722EE051B101216846FAF7BF -:1096C0004DFA9DF800000002B0FBF9F109FB11080A -:1096D000FCF7A3F800EB0801A0690DE042230200AB -:1096E000E800002040420F0004360200A2240200DD -:1096F000580E0020DB821300F8F7C5FEA061257428 -:109700006775607A30B9207B04F11001F9F7FAFB34 -:1097100000284BD02584F9F7B6F83079BDE8F84336 -:10972000F2F7E8BAE572A7692570012020720021DE -:10973000606805F035FB6068C0F84871217B80F8EF -:109740005411616AC0F84C71C0F8581190F8545126 -:109750000788202D28BFFFDF3C4820F8157060687F -:10976000FFF7B4FD002818BFFFDFD4E751B1012196 -:109770006846FAF7F3F99DF800000002B0FBF9F132 -:1097800009FB1108FCF749F800EB0801A069F8F79C -:109790007AFEA06125746775607A0028BAD1207BB3 -:1097A00004F11001F9F7AEFB0028B3D1FFDFB1E7F8 -:1097B00070B5274CA178022906BFE188002970BD49 -:1097C0002569C5F85C0195F85200FBF70BFED5F84A -:1097D0005C11081AA1680144A160E1680844E060D6 -:1097E00070BD70B505461A488378022B06BF006924 -:1097F00000F5AC74174C002904BF256070BD012929 -:1098000008BF681E0DD002291CBFFFDF70BD1046C7 -:10981000FBF703FE4FF47A7100F2E140B0FBF1F088 -:10982000281A206070BD0C48007800281CBF00205A -:10983000704710B50720F7F7ADF880F0010010BDB4 -:1098400005480078002818BF01207047800E0020CE -:10985000E80000207C0E0020580E0020F8490C285B -:10986000896881F8C3001ABF13281828704700229E -:1098700011280FD0072808BF704715280AD00128E3 -:109880001ABF002802287047A1F88220012081F821 -:1098900086007047A1F88820704770B5E84CA16831 -:1098A0000A88A1F8362181F8340191F85100012885 -:1098B00008BF012508D0022808BF022504D00428CB -:1098C00016BF08280325FFDFA06880F8385190F8FC -:1098D0005200012808BF012508D0022808BF022530 -:1098E00004D0042816BF08280325FFDFA068012143 -:1098F00080F8395180F83211002180F80611E078A3 -:10990000BDE87040F2F7F6B9F0B4CD48806890F841 -:109910004E30478EC68E458FB0F84010C28FB0F8DB -:1099200042C0022B1FD08D4238BF294601866245B6 -:1099300028BF62468286018FB0F84430994238BF12 -:109940000B464386818FB0F84640A14238BF0C4693 -:10995000C486BB4228BF1F464786B44228BF26465E -:10996000C686F0BC7047038E9D4228BF1D46838E7D -:109970009A4228BF1A46A94298BF0D4605869445CB -:1099800098BF62468286002180F84E10D3E7AC4A29 -:10999000012992681BD0002302290FD0032921D06E -:1099A00028B301282ED0032818BF704792F863000F -:1099B00013281CBF1628182805D1704792F8C30039 -:1099C000002808BF7047D2F8F0000370704792F883 -:1099D000C300012808BF7047D2F8F4000178491E7F -:1099E0000170704792F8C3000328ECD17047D2F899 -:1099F000F000B2F858108288891A09B20029A8BF6D -:109A000003707047B2F85800B2F8FA10401A00B26A -:109A10000028E1DA70472DE9F04100260327884C41 -:109A20000125A0B1206906F0CCF9A16881F8C20037 -:109A300005FA00F010F4000F08BFFFDFA06880F8FF -:109A40006370A0F8826080F88650BDE8F081A0685D -:109A50000023194690F86420583005F0A2FD002834 -:109A600004BF6570BDE8F0816078002818BFBDE8CC -:109A7000F081206906F0A5F9A16881F8C10081F89C -:109A80006470A1F8886081F88A50BDE8F08170B5F3 -:109A90006B4C84B0207910F0010F04BF04B070BD8E -:109AA000206900230521C578A06890F8632058300C -:109AB00005F077FD002818BF022D0FD00B2D18BF21 -:109AC000042D0BD0052D18BF062D07D00D2D18BF66 -:109AD000112D03D0607840F0080060706078002895 -:109AE0001CBF04B070BD2069C078801E162880F0AD -:109AF0005283DFE800F00BFBA7C5FA26FBF9FB9ABF -:109B0000F8FCFBFBFBE3F6F5F4F3F2F1A0680023AD -:109B1000012190F86620583005F043FD002840F000 -:109B2000B583206906F0A8F9A16881F8EE00072046 -:109B300081F86600002081F88A0081F8860000F034 -:109B4000A5BBA0680921002390F86320583005F0D8 -:109B500028FD20B1206906F0DFF9122814D0A06892 -:109B60000A21002390F86320583005F01AFD20B137 -:109B7000206906F0D1F9142821D0206906F0CCF92B -:109B8000162840F0838342E0A0680125002390F866 -:109B900063200921583005F004FD002808BF6570D6 -:109BA00000F074836078002840F07083A16881F829 -:109BB0007A0081F8860081F8630000F067BBA06836 -:109BC0000021012580F86310A0F8821080F886102B -:109BD0000421FEF71FFBA06890F84E10012900F049 -:109BE0007C820288A0F81621028EA0F81821828EAD -:109BF000A0F81A21428E00F58671A0F81C21C08EB3 -:109C000048820D72E078F2F775F800F03FBBA0686B -:109C100090F86310202940F03983002180F8631008 -:109C200080F886101A2000F02FBBA06890F863100F -:109C30000F292AD1002180F8681012213AE0000093 -:109C400004010020A06890F8631013291DD1D0F8FA -:109C5000F01000884988814218BFFFDFA068D0F863 -:109C6000F00000F12601206906F033F9A06800F148 -:109C7000BC01206906F035F91620A16800F064B92E -:109C8000A26892F86300162802D0022000F064BA9D -:109C9000D2F8F00002F1A80300F11E0100220E30FC -:109CA00005F007FCA0680021C0E92611012180F819 -:109CB0006810182180F8631000F0E8BA206906F0F7 -:109CC000B0F9032840F0E282206906F0AEF900BF47 -:109CD00001F022FC00F0DABA8DE202E2AEE152E1DC -:109CE0001EE135E103E050E0C4E004E0D5E1206985 -:109CF00006F00EF9ECE7A06890F863101B29C4D1B8 -:109D0000002580F88B5080F88650D0F8F01000883D -:109D10004988814218BFFFDFA068D0F8F0100D70AD -:109D2000D0F83C110A78002A18BFFFDF40F0F3801A -:109D300090F88C207AB180F88C500288CA80D0F8D4 -:109D40003C110D71D0F83C210D211170D0F83C214F -:109D50000188518010E00288CA80D0F83C110D7152 -:109D6000D0F83C2101211172D0F83C210C21117056 -:109D7000D0F83C21018851800088F6F779FFF6F78A -:109D8000D9FBE078F1F7B6FFC5E0A06800231946DB -:109D900090F86420583005F004FC50B9A068002306 -:109DA000082190F86320583005F0FBFB002800F0F4 -:109DB00027826078002840F06982A06890F88E00C1 -:109DC00010F0020F17D1206906F098F8A16881F809 -:109DD0008F00206906F094F8A168A1F8900020692E -:109DE00006F091F8A168A1F8920091F88E0040F079 -:109DF000020081F88E00A06890F88E1011F0010F1B -:109E000012D190F8642000231946583005F0C9FBA0 -:109E1000002808BFFFDF0121A06880F8641080F8E7 -:109E20008A100021A0F88810A06890F8631001291A -:109E300007D1002180F8631080F88610E078F1F7F0 -:109E400059FFA168D1F8F000098842888A4204BF0E -:109E50000178042940F01A8200250570E078F1F7B6 -:109E600049FFA06890F86310002908BF80F8865069 -:109E700000F00CBAA0680023072190F86320583046 -:109E800005F08FFB002800F0BB816078002840F0CF -:109E9000FD8102A9206906F079F8A0689DF80820E4 -:109EA000002590F89410114001F02F0180F89410D3 -:109EB00090F895109DF80920114001F0410180F8BB -:109EC000951080F88650D0F8F010008849888142BB -:109ED00018BFFFDFA068D0F8F0100D70D0F83C116B -:109EE0000A78002A18BFFFDF15D10288CA80D0F88F -:109EF0003C110D71D0F83C11029A8A60039ACA6035 -:109F0000D0F83C21072111700188D0F83C01418034 -:109F1000E078F1F7EFFEA06880F8635000F0B6B982 -:109F2000A0680023092190F86320583005F039FB20 -:109F3000002800F065816078002840F0A781A168C2 -:109F400081F87A0081F8860081F8630000F09EB9FC -:109F5000A0680023194690F86420583005F021FBD2 -:109F6000002800F04D816078002840F08F81A068C3 -:109F70000021A0F88810012180F88A10022180F8C1 -:109F8000641000F083B9A0680023194690F864209B -:109F9000583005F006FB00287ED0206905F0E0FF70 -:109FA00000287AD0206905F0D7FFA16808872069CA -:109FB00005F0CEFFA1684887206905F0CFFFA168B2 -:109FC0008887206905F0C6FFA168C88791F86300FB -:109FD0001D2813BF91F84E00012081F84E00012882 -:109FE00007D091F8FD00002804BF91F8FC0000287C -:109FF00003D01F2081F8640017E01E2081F8640060 -:10A000000A88A1F822210A8FA1F824214A8FA1F8F9 -:10A0100026218A8F01F58670A1F82821C98FC18376 -:10A0200001210175E078F1F765FEA0680021A0F834 -:10A030008810012180F88A1000F028B9A068002358 -:10A040000A2190F86320583005F0ABFA20B320695C -:10A0500005F086FFA8B1206905F07EFFA16808879A -:10A06000206905F075FFA1684887206905F076FF33 -:10A07000A1688887206905F06DFFA168C887FFF790 -:10A0800043FCA068002180F8861080F8631004214A -:10A09000FEF7C0F8A06801E01AE07CE090F84E10EE -:10A0A00001291AD00288A0F81621028EA0F81821E2 -:10A0B000828EA0F81A21428E00F58671A0F81C212C -:10A0C000C08E488201200872E078F1F713FEDDE0CF -:10A0D000607840F001006070D8E0022180F84E10F6 -:10A0E000D4E0A0680023194690F86420583005F0A9 -:10A0F00058FA80B3A06890F86300242812BF25287E -:10A10000607840F0200027D06846FBF7EDF9002882 -:10A1100008BF002105D0009805F053FE8DF8080017 -:10A1200002A9A06801AB162290F8630005F001FCBB -:10A13000A0B1A0689DF80420162180F8E42080F8E2 -:10A14000E5101A2180F86410012180F88A1000219E -:10A15000A0F888109AE053E0607097E0206905F05D -:10A1600022FFC0B1206905F018FFA16800F00700C8 -:10A1700081F84F00206905F014FF00F00701A06886 -:10A1800080F8501090F80721002A04BF90F80621AB -:10A19000002A04D024E00020FFF73DFC76E090F890 -:10A1A0004F3090F852C000F151029C4501BF127827 -:10A1B0008A42012180F87B1012D00288A0F82E215B -:10A1C00090F84F2000F5867180F8302190F850000B -:10A1D00081F82500012081F82000E078F1F78AFD60 -:10A1E000A068222180F86410012180F88A100021E3 -:10A1F000A0F888104AE0A06890F86300202801D0F9 -:10A200000120A9E7206905F0D8FEC0B3206905F058 -:10A21000C4FE00F0070060F30705206905F0C1FEE9 -:10A2200000F0070060F30F25A2680120002682F8E5 -:10A230008600A2F88260242082F86300D2F8080128 -:10A24000B2F851202946ADF8002005F020FB9DF81A -:10A250000020C1B28A4207BFA16881F8E860A26805 -:10A2600082F8E8109DF80110C0F30720814219BF61 -:10A27000A16881F8E900A06880F8E96006E0FFE7DE -:10A280000120FFF7C8FB1E20FFF707FBA068D0E9FD -:10A2900028134A1C43F10001C0E9282104B070BD15 -:10A2A0002DE9F047FE4D04464FF00007687808435B -:10A2B0006870287910F0200F2846806818BFA0F831 -:10A2C0007C7004D1B0F87C10491CA0F87C1090F888 -:10A2D0006910012639B990F863200023062158300F -:10A2E00005F05FF958B3A88810F4006F07D0A8688C -:10A2F00090F86910002918BFA0F874701FD1A868E1 -:10A30000B0F87410491C89B2A0F87410B0F8762027 -:10A310008A422CBF511A00218288521D8A4228BFCE -:10A3200080F87A60B0F87410B0F87620914206D3C5 -:10A33000A0F8747080F81261E878F1F7DBFC2879F6 -:10A3400010F0600F08D0A86890F8671021B980F865 -:10A3500067600121FDF75EFF4FF00808002C56D121 -:10A360006878002851D1287910F0040F0DD0A86822 -:10A3700090F86300032808BFFFDFA86890F8661014 -:10A38000072904BF2E7080F8667001F015F928794E -:10A3900010F0080F19D06878B8B9A868002190F8B3 -:10A3A000C300FFF7F4FAA86890F8C300FF2808BFBD -:10A3B000FFDFFF21A86880F8C31090F86610082915 -:10A3C00003D10221297080F86670FFF760FBA8783E -:10A3D00010F0080F16D0A8680023052190F863201C -:10A3E000583005F0DEF850B185F80180A868D0F843 -:10A3F0003C1108780C2808BF0020087002E00020FB -:10A4000003F04DFDA86801F010F800F06CFDA8689D -:10A41000A14600F1580490F8EC0030B9A27B00236B -:10A420000121204605F0BDF810B1208D401C20858B -:10A430003D21B9F1000F18D12878022808BF162055 -:10A440000ED0012804BFA86890F8EE0008D0687804 -:10A45000E8B110F0140F1CBF1E20E07602D005E01A -:10A46000E07603E010F0080F02D0E176A67641E036 -:10A4700010F0030F03D02A20E076A6763AE010F021 -:10A48000200F08BFFFDF2320E076A67632E094F8A5 -:10A490002E0028B1608D411C6185A18D884213D2A8 -:10A4A00094F8320028B1208E411C2186A18D88426B -:10A4B0000AD2218DE08C814203D3AA6892F8EC2065 -:10A4C00012B9A28D914203D32220E076A67611E044 -:10A4D000E17B31B1A18C814228BF84F81B80C5D2B9 -:10A4E00006E0A08C062803D33E20E076A67601E0A5 -:10A4F000A07EA0B1E7722773E7730221A868FDF779 -:10A5000089FEA86890F8C310012904D1D0F8F4009E -:10A510000178491E0170E878F1F7ECFB03E00021B7 -:10A52000A868FDF777FEBDE8F047FAF7ECBF5C4995 -:10A530004A788B781A430ED101280AD0087910F096 -:10A54000040F04D0886890F86600072803D0012023 -:10A550007047FDF74BBE0020704770B5504C064663 -:10A560000D46A0883043A08016F0020F04D016F0EC -:10A57000010F18BFFFDFE56016F0010F18BF25615E -:10A5800016F0020F12D0284605F01BFC062802D058 -:10A590000B282ED00AE0A06890F86310182905D186 -:10A5A0000021C0E92811012180F8691016F0800F00 -:10A5B0001CBF0820A07016F4806F08BF70BDA06893 -:10A5C000B0F8581080880844801D86B2284605F0EF -:10A5D000F8FB012804BFA068A0F8FA6015D028464F -:10A5E00005F0EFFB68B1284605F0EBFB182823D0F7 -:10A5F0000BE0A06890F86310122908BF0021D5D1A4 -:10A60000D2E7A068D0F8F0008680284605F0D9FB94 -:10A6100001281DD0284605F0D4FB08B3284605F0D4 -:10A62000D0FB182818BF70BDA068B0F8EA10284603 -:10A63000BDE8704005F0D3BCA06890F8E810002990 -:10A6400002BF90F8E91000290026A0F8EA60DCE7D4 -:10A65000A068B0F8FA102846BDE8704005F003BCC9 -:10A66000A068D0F8F00081882846BDE8704005F069 -:10A67000CABBF0B50A4C85B00026A060A680667003 -:10A68000A670054626700088FAF705FFA0680088C6 -:10A69000FAF727FFB5F8D000A168401C82B201E0AC -:10A6A0000401002001F1580004F085FD002818BFC6 -:10A6B000FFDF95F8640025280AD1B5F85810B5F8E1 -:10A6C000EA00081A00B20028A4BF6078002804D06D -:10A6D00095F8630025283BD119E0A06890F8E810B0 -:10A6E000002908BF90F8511080F8511090F8E91037 -:10A6F000002908BF90F8521080F852100020FFF790 -:10A70000CCF885F86460A16881F87B6020E0B5F83A -:10A710005810B5F8EA00081A00B20028A4BF607803 -:10A72000002815D1A06890F8E810002908BF90F81B -:10A73000511080F8511090F8E910002908BF90F8E6 -:10A74000521080F852100020FFF7A7F885F86360D8 -:10A75000A5F8D060A06890F8861039B1B0F88210E2 -:10A76000B0F88420914224BF05B0F0BD90F88A1063 -:10A7700039B1B0F88810B0F88420914224BF05B0F8 -:10A78000F0BDB0F88020B0F87E108A4224BF05B03A -:10A79000F0BD90F867208AB3B0F87C208A4224BFCD -:10A7A00005B0F0BD90F8C370FF2F00F02A81684615 -:10A7B000FAF774FE002808BFFFDF009805F03FFAA3 -:10A7C0000321009805F052FA0098017821F0100159 -:10A7D0000170394605F0C7FA192F80F0E780DFE8ED -:10A7E00007F02A22144EE5E5E61B7CE5E6E66CE57B -:10A7F000E5E5E5D8E6E6869FB8E5C500B0F87C104B -:10A80000062924BF05B0F0BDCCE7A06890F8ED1094 -:10A81000009805F02FFBCAE0A06890F8C4100098DB -:10A8200005F078FBC3E0A068D0F8F400411C009864 -:10A8300005F011FBBBE0A068D0F8F000817900982A -:10A8400005F0DDFAA068D0F8F0000189009805F065 -:10A85000CFFAA068D0F8F0004189009805F0B3FA6B -:10A86000A068D0F8F0008189009805F0B3FAA068DC -:10A87000D0F8F000C189009805F0B3FA97E0A0681D -:10A88000D0F8F000011D009805F0F8FAA068D0F8A3 -:10A89000F00000F10C01009805F0FAFAA068D0F879 -:10A8A000F00000F11E01009805F0F8FAA06800F130 -:10A8B000B801009805F000FB79E060690178009824 -:10A8C00005F012FB60698188009805F00FFB606954 -:10A8D0004188009805F00EFB69E0FE49D1E90001CE -:10A8E000CDE9020102A9009805F018FB5FE0A0681D -:10A8F000B0F84410009805F01BFBA068B0F84610B3 -:10A90000009805F019FBA068B0F84010009805F019 -:10A9100017FBA068B0F84210009805F015FB46E060 -:10A92000A068B0F84010009805F00AFBA068B0F8E5 -:10A930004210009805F008FBA068B0F84410009899 -:10A9400005F0F6FAA068B0F84610009805F0F4FAA1 -:10A950002DE0A06890F80811009805F01CFBA06895 -:10A9600090F80911009805F01AFB20E0A06890F813 -:10A97000E80004F087FF0146009805F028FBA06876 -:10A9800090F8E90004F07EFF0146009805F023FBF3 -:10A990000DE0A06890F8E510009805F040FBA06875 -:10A9A00090F8E410009805F03EFB00E0FFDFFAF7B6 -:10A9B00088FD002808BFFFDF009F384605F001FA38 -:10A9C000012809D0384605F0FCF960B1384605F099 -:10A9D000F8F918280FD014E0A068B0F8FA1038463B -:10A9E00005F041FA0DE0A068D0F8F0008188384603 -:10A9F00005F009FA05E0A068B0F8EA10384605F05D -:10AA0000EEFAB5480090B54BB54A2946304603F0FA -:10AA100081F9A0680023052190F86320583004F0E4 -:10AA2000C0FD002804BF05B0F0BD05B0BDE8F04092 -:10AA300002F041BFAB48806890F8861029B1B0F8A9 -:10AA40008210B0F8842091421AD290F88A1029B16D -:10AA5000B0F88810B0F88420914211D2B0F880206C -:10AA6000B0F87E108A420BD290F86720B0F87C00D4 -:10AA700022B1884204D200BF03F0ECB90628FBD310 -:10AA8000002001460CE470B50C46064615464FF40E -:10AA9000A071204607F0C9F82680002D08BFFFDF0F -:10AAA0002868C4F8F0006868C4F8F400A868C4F81E -:10AAB0003C0170BDF6F7B3B82DE9F0410D460746ED -:10AAC0000621F5F7CBFF040008BFBDE8F081D4F8FC -:10AAD0003C110026087858B14A8821888A4207D15B -:10AAE000082810D00D281FD00C2835D0072850D0AA -:10AAF00094F8120100285ED06E700F20287084F840 -:10AB000012616F8042E06E7008202870D4F83C011A -:10AB10004168C5F802108168C5F80610808968810F -:10AB2000D4F83C01067031E00846F6F7A1F8074674 -:10AB3000F5F716FDB8B96E700D202870D4F83C01F9 -:10AB40004068C5F80200D4F83C0106703846F5F7B5 -:10AB500001FD0120BDE8F0810846F6F789F80746B7 -:10AB6000F5F7FEFC10B10020BDE8F0816E700C20FE -:10AB70002870D4F83C014168C5F802100089E880CB -:10AB8000D4F83C0106703846F5F7E4FC0120BDE836 -:10AB9000F0816E7007202870D4F83C01416882680B -:10ABA000C068C5F80210C5F80620C5F80A00D4F838 -:10ABB0003C010670EAE794F81401C8B16E701420E5 -:10ABC000287094F814010028E0D000BF84F81461C4 -:10ABD000D4F81601C5F80200D4F81A01C5F8060029 -:10ABE000B4F81E01688194F814010028EED1CDE775 -:10ABF00094F8200180B16E701A20287084F82061CA -:10AC0000D4F82201C5F80200D4F82601C5F80600E0 -:10AC1000B4F82A016881B9E794F82C0148B16E7044 -:10AC20001B20287084F82C61D4F82E01C5F802008E -:10AC3000ACE794F80C0190B16E701820287094F86D -:10AC40000C010028A2D000BF84F80C61D4F80E01DA -:10AC5000C5F8020094F80C010028F5D196E794F8A5 -:10AC60003201002808BFBDE8F0816E701520287001 -:10AC700094F83201002889D084F83261D4F8340184 -:10AC8000C5F80200B4F83801E88094F832010028D1 -:10AC9000F2D17BE7134A5061D17070472DE9F0473C -:10ACA0000446481E85B238BFBDE8F08704F10808A5 -:10ACB0000126DFF830904FF0080A0027B4F8D000E2 -:10ACC000401CA4F8D000B4F87C00401CA4F87C0020 -:10ACD0000AE000005C230200A1A201002FA50100F0 -:10ACE0005BA501000401002094F8690040B994F8C4 -:10ACF00063200023062104F1580004F052FCD8B16F -:10AD0000B4F87400401C80B2A4F87400B4F8761053 -:10AD100081422CBF0A1A0022A3885B1D934228BFE0 -:10AD200084F87A60884207D3A4F8747084F81261BA -:10AD300099F80300F0F7DEFF94F8860020B1B4F82C -:10AD40008200401CA4F8820094F88A0020B1B4F874 -:10AD50008800401CA4F8880094F8EC0040B994F8EE -:10AD600066200023012104F1580004F01AFC20B1F0 -:10AD7000B4F88000401CA4F8800094F863000C280C -:10AD800002D00D2820D067E0B4F85800411CB4F878 -:10AD9000FA00814260D1D4F8F400411C404607F02B -:10ADA00050F80221204604F034F9D4F8F400007879 -:10ADB000002808BFFFDF0121FF20FEF7E8FD84F82F -:10ADC000637084F8966047E0B4F85800411CD4F8EA -:10ADD000F000808881423FD1D4F83C0101780029FD -:10ADE00018BFFFDF22D12188C180D4F8F00041894B -:10ADF000D4F83C010181D4F8F0008189D4F83C01F9 -:10AE00004181D4F8F000C189D4F83C018181D4F8A3 -:10AE10003C010771D4F83C0180F800A0D4F83C0153 -:10AE20002188418099F80300F0F764FF0121204652 -:10AE300004F0EFF803212046FDF7ECF9D9F80800FB -:10AE4000D0F8F0000078022818BFFFDF0221FF20B1 -:10AE5000FEF79DFD84F86370B4F85800401C691E2D -:10AE6000A4F858008DB2BFF429AFBDE8F087FE4AC0 -:10AE7000C2E90601704770B50446B0F87C0094F84A -:10AE80006710002908BFC0F1020503D0B4F87E1096 -:10AE9000081A051F94F87A0040B194F86320002343 -:10AEA000092104F1580004F07CFBA0B1B4F87460EF -:10AEB00094F8690058B994F863200023062104F13E -:10AEC000580004F06EFB002808BF284603D0B4F8F1 -:10AED0007600801B001F8542C8BF0546002DD4BFE9 -:10AEE0000020A8B270BDF0B5DF4C83B0A06890F828 -:10AEF000C310FF2907BF6178002903B0F0BD90F8A7 -:10AF0000662000230121583004F04BFB00281CBFB1 -:10AF100003B0F0BDA06890F8EC1029B103B0022096 -:10AF2000BDE8F040FEF79ABC90F863200023194674 -:10AF3000583004F036FB48B1A06890F87A0028B188 -:10AF400003B01220BDE8F040FEF788BCA0680025E1 -:10AF500090F86320122A23D004DC032A47D0112A58 -:10AF600024D003E0182A3CD0242A4CD0002304210A -:10AF7000583004F016FB00281CBF03B0F0BDD4F815 -:10AF800008C0022701269CF864001A2800F01E81E0 -:10AF900041DC012873D002287FD0032863D03EE033 -:10AFA00003B00B20BDE8F040FEF758BCF8F7D5FD24 -:10AFB0000C283CBF03B0F0BDA0680821D0F8F00019 -:10AFC0001E30F8F7CBFD28B1A0680421B830F8F79F -:10AFD000C5FD00B9FFDF03B00320BDE8F040FEF778 -:10AFE0003DBC03B00620BDE8F040FEF737BC90F84A -:10AFF000C21080F8C4100720FEF730FCA06880F86B -:10B00000635003B0F0BD1820FEF728FCA068A0F83C -:10B01000825003B0F0BD1F2847D022287ED0DCF834 -:10B02000F0000178002900F010814088BCF8001081 -:10B03000884274D100239CF8632019460CF1580013 -:10B0400004F0AFFA00286AD0A068D0F8F0100978B0 -:10B05000022972D0032971D0042970D0052908BFB4 -:10B0600008206DD0F1E09CF8C1008CF8C4000720E6 -:10B07000FEF7F4FBA06800F0B0B900E00DE00C2092 -:10B08000FEF7ECFBA068A0F8885090F88E1041F015 -:10B09000010180F88E1000F0A0B91320FEF7DEFB4E -:10B0A000A068A0F8885000F098B99CF8FD0000282E -:10B0B0001CBF03B0F0BD9CF8FC0088B1BCF8FE00DA -:10B0C000ACF84000BCF80001ACF84200BCF802014A -:10B0D000ACF84400BCF80401ACF846008CF8FC5015 -:10B0E000FEF712FC0421A068FDF794F8A06890F820 -:10B0F0004E10012908BF80F84E7016D00288A0F8C3 -:10B100001621028EA0F81821828EA0F81A21428EF4 -:10B1100000F58671A0F81C21C08E01E011E094E0DA -:10B1200048820E72E078F0F7E5FD1520FEF796FBF9 -:10B13000A068A0F8885000F050B94CE051E071E0F0 -:10B1400058E09CF87B0058B18CF8E8508CF8E95036 -:10B150001820FEF783FBA068A0F8885003B0F0BD6C -:10B160009CF8070100281CBF03B0F0BD9CF8060145 -:10B17000002804BF03B0F0BDBCF84F10DCF8080194 -:10B18000ADF80410BCF85110ADF80010019904F0AE -:10B190007EFB9DF80020C1B28A4207BFA16881F8FA -:10B1A000E850A26882F8E8109DF80110C0F307206B -:10B1B000814219BFA16881F8E900A06880F8E950D0 -:10B1C000182003B0BDE8F040FEF748BB1120FEF7A1 -:10B1D00045FBA06801E190F8640004F0D5F9A0BB3C -:10B1E00008E090F8681041B190F86900002808BFA5 -:10B1F000FFDF0A20FEF732FB27E0F8F7AEFC0C2851 -:10B2000023D3A0680821D0F8F0001E30F8F7A6FC80 -:10B2100028B1A0680421B830F8F7A0FC00B9FFDF1E -:10B220000320E7E790F88E0010F0030F0DD10C20FB -:10B23000FEF714FBA068A0F8825080F8866090F8B2 -:10B240008E1041F0010180F88E10A06890F8C310B4 -:10B25000FF291CBF03B0F0BD90F8632000231946FE -:10B26000583004F09EF901E004010020002804BFDA -:10B2700003B0F0BDA06890F8F810E9B3A1690978AF -:10B28000D1BB90F8640004F07FF9A8BBA068B0F8C7 -:10B2900058100A2935D900F108010522E06906F0A5 -:10B2A000FFFB0028A06802BF80F8F85003B0F0BD93 -:10B2B000D0F8F400017869B1411C0522E06906F07C -:10B2C000EFFB00281CBF03B0F0BDA068D0F8F4006D -:10B2D000007830B9A068E169D0F8F400401C06F0AD -:10B2E000B0FDA068D0F8F4000178491C017001207D -:10B2F000FEF7B4FAA06800E003E080F8F85003B06D -:10B30000F0BDA06890F8FC1011B190F8FD1011B3D9 -:10B3100090F80611002904BF03B0F0BD90F80711A2 -:10B3200000291CBF03B0F0BD90F8640004F02CF9B4 -:10B3300000281CBF03B0F0BDA06890F8512090F821 -:10B340000811012A4DD0022A4ED0042A14BF082A1F -:10B3500004294BD05DE0B0F8FE10A0F84010B0F822 -:10B360000011A0F84210B0F80211A0F84410B0F893 -:10B370000411A0F8461080F8FC5090F864001E28D4 -:10B3800005D003B01420BDE8F040FEF767BAFEF721 -:10B39000BBFA0421A068FCF73DFFA06890F84E10AE -:10B3A000012908BF80F84E7013D00288A0F816213A -:10B3B000028EA0F81821828EA0F81A21428E00F584 -:10B3C0008671A0F81C21C08E48820E72E078F0F7DA -:10B3D00091FC1520FEF742FAA06880F8645003B093 -:10B3E000F0BD012915D101E0022912D190F85210C7 -:10B3F00090F80901012907D0022908D0042914BFB7 -:10B40000082904280BD004E0012802D107E0022813 -:10B4100005D003B01620BDE8F040FEF71FBA03B018 -:10B420000020BDE8F040FEF738BA70B5044690F849 -:10B43000630000250C2814D00D2818BF70BDB4F887 -:10B440005800D4F8F010401C8988884218BF70BD9D -:10B45000D4F83C01FE4E0178002918BFFFDF45D12A -:10B4600022E0B4F85800B4F8FA10401C884218BF23 -:10B4700070BDD4F8F400411C04F1080006F0E1FCB2 -:10B480000221204603F0C5FDD4F8F400007800281E -:10B4900008BFFFDF0121FF20FEF779FA84F863502F -:10B4A000012084F8960070BD2188C180D4F8F00096 -:10B4B000D4F83C1140890881D4F8F000D4F83C114C -:10B4C00080894881D4F8F000D4F83C11C089888183 -:10B4D000D4F83C010571D4F83C1108200870D4F868 -:10B4E0003C1120884880F078F0F704FC01212046C8 -:10B4F00003F08FFD03212046FCF78CFEB068D0F8E6 -:10B50000F0000078022818BFFFDF0221FF20FEF7BD -:10B510003EFA84F8635070BD70B5CD4CA16891F8C7 -:10B520006320162A11BF132A91F88C20002A627812 -:10B530001BBF02206070002A70BD81F8C00000258A -:10B5400081F88B5081F88650D1F8F0000988408846 -:10B55000884218BFFFDFA068D0F8F0000078032809 -:10B5600018BFFFDF0321FF20FEF711FAA068D0F813 -:10B570003C110A78002A18BFFFDF19D10288CA805F -:10B58000D0F83C2190F8C0101171D0F83C110D7228 -:10B59000D0F83C210C211170D0F83C210188518059 -:10B5A0000088F5F765FBF4F7C5FFE078F0F7A2FB3C -:10B5B000A06880F8635070BD10B5A54C207910F0DC -:10B5C000020F08BF10BD6078002818BF10BDE068EA -:10B5D000C078192880F06981DFE800F05F4F0D8F97 -:10B5E000F8F8A6223FF86F83B1F8F8F8F8F7E3E02F -:10B5F000F9F5F4F8F300A0680023012190F8662023 -:10B60000583003F0CEFF002818BF10BD0821A068F5 -:10B6100080F86610002180F8861080F88A1010BD2E -:10B62000A0680023194690F86420583003F0B9FF51 -:10B6300018B1A168002081F88A00A068002319468B -:10B6400090F86320583003F0ACFF002808BF10BD0D -:10B650000020A16881F8860010BDA068002319466B -:10B6600090F86320583003F09CFF002808BFFFDFEC -:10B670000420A16881F8630010BDA068002319466A -:10B6800090F86320583003F08CFF002808BFFFDFDC -:10B690000C20A16881F8630010BDA0680023194642 -:10B6A00090F86320583003F07CFF002808BFFFDFCC -:10B6B0000D20A16881F8630010BDA0680023194621 -:10B6C00090F86320583003F06CFF002808BFFFDFBC -:10B6D0000121A06880F88B105FF00F0180F86310E3 -:10B6E00010BDA06890F86300122818BFFFDF012189 -:10B6F000A06880F88C101121F0E7A068002319469B -:10B7000090F86320583003F04CFF28B9A06890F8F7 -:10B710008C00002808BFFFDF0121A06880F88B1093 -:10B72000132180F8631010BDA06890F863001828FA -:10B7300018BFFFDF1B20A16881F8630010BDA0685F -:10B74000D0F8F01003884A889A4204BF0978042987 -:10B7500019D190F8632000231946583003F021FFD7 -:10B76000002808BFFFDFA06890F88E1011F0020FCC -:10B7700004BF012180F8631005D0002180F88610F5 -:10B78000D0F8F0000170A0680023194690F86420FA -:10B79000583003F006FF002808BF10BD0020A16844 -:10B7A00080E0A0680023194690F86320583003F029 -:10B7B000F8FE002808BFFFDF0520A16881F86300BC -:10B7C00010BD30E01FE012E001E067E06DE0A0682E -:10B7D0000023194690F86320583003F0E2FE002859 -:10B7E00008BFFFDF1D20A16881F86300E8E7A068BB -:10B7F0000023194690F86420583003F0D2FE002848 -:10B8000008BFFFDFCAE7A0680023194690F863204D -:10B81000583003F0C6FE002808BFFFDF2020A168D3 -:10B8200081F86300CCE7A06890F8641022291DD04D -:10B8300090F86310242918BFFFDFC1D190F8E810F9 -:10B84000002906BF90F8E9100029252102E0000038 -:10B850000401002018BF80F863107FF4F9AE0021C6 -:10B8600080F863100846FEF718F8F1E690F8E81043 -:10B87000002907BF90F8E9100029252180F86410FD -:10B880008CD1002180F8641080F87B1090F80601BC -:10B8900000281CBF0020FEF700F87FE7A168002009 -:10B8A00081F8640081F88A008AE7FFDF88E70000FA -:10B8B00070B5FC4CE1680A88A1F8E62181F8E40142 -:10B8C00091F85100012808BF012508D0022808BFBF -:10B8D000022504D0042816BF08280325FFDFE068EE -:10B8E00080F8E85190F85200012808BF012508D0DF -:10B8F000022808BF022504D0042816BF0828032503 -:10B90000FFDFE068012180F8E95180F8E2110021B1 -:10B9100080F89211E078BDE87040F0F7EBB9F0B430 -:10B92000E048C06890F84E30478EC68E458FB0F81C -:10B930004010C28FB0F842C0022B1FD08D4238BFDA -:10B9400029460186624528BF62468286018FB0F88B -:10B950004430994238BF0B464386818FB0F8464049 -:10B96000A14238BF0C46C486BB4228BF1F4647864B -:10B97000B44228BF2646C686F0BC7047038E9D425F -:10B9800028BF1D46838E9A4228BF1A46A94298BFF7 -:10B990000D460586944598BF62468286002180F850 -:10B9A0004E10D3E72DE9F04FBE4C83B0207910F054 -:10B9B000010F04BF03B0BDE8F08F606901230521CA -:10B9C000C578E06890F86420583003F0EAFD00285C -:10B9D00018BF022D0BD00A2D18BF0B2D07D0032D39 -:10B9E00018BF062D03D0607840F0080060706078C2 -:10B9F00000281CBF03B0BDE8F08F60690227012654 -:10BA000090F8038000254FF02009B8F1000F1CBF0B -:10BA1000B8F1010FB8F1160F1FD1E06890F863007C -:10BA200003F0B2FDC8B1E16891F86300202814D09A -:10BA3000212808D0B8F1160F0CBF84F80190677068 -:10BA400003B0BDE8F08F262081F86300B8F1160F2F -:10BA500000F0AE822A20FFF72BFFB8F1190F80F01B -:10BA6000E282DFE808F046230DC1FEFEFDFCFBFE8E -:10BA700091B8FAFEFEFEFEF9F8F7F6F5F4FEF300D3 -:10BA8000E0680123194690F86620583003F089FDDC -:10BA9000002840F04D84606904F0EEF9E16881F817 -:10BAA0006801072081F8660000F042BCE0680123CD -:10BAB000002190F86420583003F073FD002800F056 -:10BAC000F083606904F0D3F9E168A1F87C01B1F872 -:10BAD0005820801A00B247F6FE728242A8BF0028A2 -:10BAE0004BDD01F5BF71606904F0B8F90B20E16826 -:10BAF0003FE0E0680123002190F86420583003F013 -:10BB000050FD002800F0CD83606904F083F900281F -:10BB100000F08982606904F07AF9E168A1F87C019B -:10BB2000B1F85820801A00B247F6FE728242A8BFD0 -:10BB3000002822DD606904F064F9E16881F87E0183 -:10BB4000606904F059F9E168A1F88001606904F0C6 -:10BB50003EF9E168A1F88201606904F03FF9E1680B -:10BB6000A1F88401606904F040F9E168A1F8860158 -:10BB70000D2081F8640000F0DBBB282081F8730001 -:10BB800081F8726000F0D4BBE0680123002190F8D6 -:10BB90006420583003F005FD0028E0680CD0A0F8C0 -:10BBA000885090F88A10491C80F88A105FF01001C4 -:10BBB00080F8641000F0BCBB90F8642001230521DC -:10BBC000583003F0EEFC00281CBF0820607040F0E5 -:10BBD000AF8300F066BBE06890F86410112908BFDD -:10BBE000122140F09282E3E7E0680123002190F8FF -:10BBF0006420583003F0D5FC80B9E06890F86420E8 -:10BC0000122A0BD001230521583003F0CAFC00286A -:10BC100018BF082000F0458300F0C7B9E06890F82D -:10BC20008C1031B9A0F8885090F88A10491C80F81F -:10BC30008A1000F1E001606904F037F9E06800F172 -:10BC4000B801606904F03CF9E0680BE01BE2AFE189 -:10BC500059E1F1E0CFE0DBE0EAE23AE0A2E0FFE226 -:10BC600022E072E190F8AA01002818BFFFDFE06827 -:10BC70000188A0F8AC1100F5D771606904F003F9F0 -:10BC8000E06800F5DB71606904F005F9E06880F8B0 -:10BC9000AA61142180F86410E078F0F72BF800F026 -:10BCA00047BB000024010020E06890F864101729C9 -:10BCB00040F02B8290F88A10491E49B280F88A1011 -:10BCC0000029B8BFFFDF1C20E16881F8640000F0A4 -:10BCD0002FBBE06890F8651011F0020F09D090F8C2 -:10BCE000632001230821583003F05BFC002800F09A -:10BCF000D882E06890F88E0010F0020F17D16069CA -:10BD000004F0FCF8E16881F88F00606904F0F8F84D -:10BD1000E168A1F89000606904F0F5F8E168A1F825 -:10BD2000920091F88E0040F0020081F88E00E068E9 -:10BD300090F88E1011F0010F05D0E06890F86310B4 -:10BD400006291CD114E090F8650010F0020F18BF0E -:10BD5000FFDFE06890F8651041F0020180F865109F -:10BD6000A0F8885090F88A10491C80F88A10E4E7FF -:10BD700080F8635080F88650E078EFF7BBFFE0680A -:10BD800090F87A11042940F0D38280F87A51E07853 -:10BD9000EFF7B0FFE06890F86310002940F0C88228 -:10BDA00000F043BAE06890F8650010F0010F7BD115 -:10BDB0006946606904F0B7F8E0689DF8002090F8E3 -:10BDC0009410114001F02F0180F8941090F8951014 -:10BDD0009DF80120114001F0410180F89510A0F874 -:10BDE000885090F88A10491C80F88A1090F86510E5 -:10BDF00041F001011CE0E0680123092190F8632073 -:10BE0000583003F0CEFB002800F04B8200F041BA1E -:10BE1000E06890F8651011F0040F40F04282A0F83D -:10BE2000885090F88A2041F00401521C80F88A2042 -:10BE300080F8651000F07CBAE06890F8650010F0BA -:10BE4000300F31D1606904F08BF800287DD0606933 -:10BE500004F082F8E1680887606904F079F8E16825 -:10BE60004887606904F07AF8E1688887606904F0BF -:10BE700071F8E168C887207910F0020F03D02069BB -:10BE8000C078142811D091F863001D280DD091F8C6 -:10BE90004E0001280BD091F88901002804BF91F8C9 -:10BEA000880100280AD002E074E081F84E6091F821 -:10BEB000650040F0100081F865001AE091F8650017 -:10BEC00040F0200081F865000A88A1F8CA210A8F95 -:10BED000A1F8CC214A8FA1F8CE218A8F01F5CB7031 -:10BEE000A1F8D021C98F818780F83260E078EFF720 -:10BEF00001FFE068A0F8885090F88A10491C80F88B -:10BF00008A1000F015BAE06801230A2190F8632036 -:10BF1000583003F046FBE8B3606904F021F8B8B18B -:10BF2000606904F019F8E1680887606904F010F8A6 -:10BF3000E1684887606904F011F8E1688887606902 -:10BF400004F008F8E168C88700E06CE0FFF7E7FC60 -:10BF5000E068052180F8865080F86350FDF7FBFA11 -:10BF6000E06890F84E10012908BF80F84E7000F08C -:10BF7000DF810288A0F8BE21028EA0F8C021828E47 -:10BF8000A0F8C221428E00F5CB71A0F8C421C08E6A -:10BF9000088600E006E081F82660E078EFF7AAFE68 -:10BFA00000F0C6B9607840F00100607000F0C0B9E0 -:10BFB000E06801230B2190F86420583003F0F1FA77 -:10BFC00020B100BF84F8019000F0B2B9E06801230D -:10BFD000002190F86420583003F0E3FA002800F0C4 -:10BFE0006081E06890F863002528EBD0606903F079 -:10BFF000DAFFC0B1606903F0D4FFE16800F0070028 -:10C0000081F85000606903F0C8FF00F00701E068A4 -:10C0100080F84F1090F89321002A04BF90F89221E5 -:10C02000002A04D022E001F0DEF900F081B990F896 -:10C0300052C090F8503000F151028C4502BF117887 -:10C04000994280F87B6011D000F5CB7180F8DC61FB -:10C050000288A0F8DE2190F84F2080F8E02190F8C7 -:10C06000500081F84B00E078EFF744FEE0682221B1 -:10C0700080F86410A0F8885090F88A10491C80F865 -:10C080008A1000F055B9E06890F8631021290CBFC0 -:10C090004FF001084FF0000890F86410232908BF02 -:10C0A00000F1640705D0B8F1000F18BF00F1630775 -:10C0B0002BD0606903F099FFF0B3D4F81490484690 -:10C0C00003F087FF0090484603F087FF8146E06851 -:10C0D00090F89211002907BF4FF0000BDA4690F854 -:10C0E00094B190F895A1484603F05AFBB0B1E268CC -:10C0F00092F85110814211D019EA0B0F41D0B8F1DA -:10C10000000F08BF012802D008E0677010E1022983 -:10C1100004BF92F8500010EA090F32D0009803F0E3 -:10C120003FFB68B1009803F03BFBE16891F85210C7 -:10C13000884205D0009800E023E010EA0A0F20D0E2 -:10C140006A466169E06803F03AFBD8B3606903F0BE -:10C150004AFFE168A1F87C01B1F85820801A00B2CA -:10C1600047F6FE728242A8BF00284ADD9DF8000013 -:10C1700081F87E019DF8010081F87F01252038704B -:10C1800044E0E06890F8920100281CBF1E20FFF7F1 -:10C190008FFBB8F1000F16D0606903F012FEE16862 -:10C1A00081F8C20006FA00F010F0807F08BFFFDFC0 -:10C1B0000A21E06880F8631090F88600002808BF24 -:10C1C000FFDF0DE010E03D70E16891F88A00401E4D -:10C1D00040B281F88A000028B8BFFFDF01F003F900 -:10C1E000E06880F87B50A3E0E06890F892010028B6 -:10C1F0001CBF0020FFF75CFB3D70E06880F87B50BF -:10C2000004E0282081F8730081F87260E06800F192 -:10C2100064018F4209D190F88A10491E49B280F812 -:10C220008A100029B8BFFFDF82E080F886507FE0E7 -:10C23000606903F0F6FE16287AD1E06890F8630092 -:10C24000212802D0262805D072E0606903F0EDFEB7 -:10C25000FFF72EFBE06880F8635080F8865067E0B7 -:10C26000E06890F863000E2804D1606903F054FE82 -:10C27000122805D0E06890F863001D2818D112E05C -:10C28000E0680123092190F86320583003F089F910 -:10C2900038B1E06880F87A5080F8865080F86350B2 -:10C2A00046E0667044E0606903F036FE142805D06D -:10C2B000E06890F8630021282BD125E0E068052193 -:10C2C00080F8635080F88650FDF745F9E16891F8F1 -:10C2D0004E00012808BF81F84E7029D00A88A1F8C5 -:10C2E000BE210A8EA1F8C0218A8EA1F8C2214A8EF1 -:10C2F00001F5CB70A1F8C421C98E018680F82660B3 -:10C30000E078EFF7F7FC13E0606903F005FE16280C -:10C3100005D0606903F000FE172809D113E0E0683A -:10C3200080F8635080F886505FF01A00FFF7C0FA7B -:10C33000E068D0E928134A1C43F10001C0E9282134 -:10C3400003B0BDE8F08FE06890F864102329EFD1C6 -:10C3500080F8645090F88A10491E49B280F88A101B -:10C360000029B8BFFFDFE06880F87B5090F89201A9 -:10C37000002818BF0020DBD0D8E770B5F84E05467E -:10C380000C46F06890F8C300FF2818BFFFDFF26882 -:10C390000020002C82F8C3501CBFA2F8880070BD9A -:10C3A000A2F88200012082F8860070BD10B584B02A -:10C3B00004466846F9F772F8002808BFFFDF0098C6 -:10C3C00003F03DFC0321009803F050FC0098017835 -:10C3D00021F010010170214603F0C5FCA01E1628B3 -:10C3E00073D2DFE800F00BAA4EABAB13AA5CAAAB8A -:10C3F0001B2CAAAAAAAAABAB31734B8DD848C06834 -:10C4000090F8C410009803F035FD97E0D448C06858 -:10C4100090F8C410009803F07DFD8FE0D04CA06828 -:10C420000178009803F060FDA0688188009803F00F -:10C430005DFDA0684188009803F05CFD7EE0062168 -:10C44000009803F063FD79E0C54CE068B0F8441053 -:10C45000009803F06DFDE068B0F84610009803F016 -:10C460006BFDE068B0F84010009803F069FDE068EB -:10C47000B0F84210009803F067FD5FE0B84CE06848 -:10C4800043E0B74CE06800F1E801009803F01CFDC0 -:10C49000E06800F1BC01009803F020FD4EE00020B0 -:10C4A00002900390AE48C06890F8941001F0F50136 -:10C4B0008DF8081090F8950002A900F041008DF861 -:10C4C0000900009803F05DFD38E036E0A44CE06818 -:10C4D000B0F84010009803F033FDE068B0F8421067 -:10C4E000009803F031FDE068B0F84410009803F0C4 -:10C4F0001FFDE068B0F84610009803F01DFD1DE038 -:10C50000974CE06890F8921159B190F89411009806 -:10C5100003F041FDE06890F89511009803F03FFDAD -:10C520000CE090F85110009803F035FDE06890F8A9 -:10C530005210009803F033FD00E0FFDFF8F7C1FF71 -:10C54000002808BFFFDF04B010BD70B50C460546DB -:10C550004FF4F871204605F068FB258070BDF4F7B4 -:10C560005EBB2DE9F0410D4607460721F4F776FA48 -:10C57000040008BFBDE8F08194F896010026C8B118 -:10C580006E700820287094F8960188B1268484F88B -:10C590009661D4F89801C5F80200D4F89C01C5F85A -:10C5A0000600B4F8A001688194F896010028EDD146 -:10C5B000AE7044E094F8A201002837D094F8A201AC -:10C5C0000C2818D00D2818BFFFDF38D12088F4F7C9 -:10C5D0004FFB0746F3F7C4FFA0B96E700D2028701B -:10C5E00094F8A401A8702088A88084F8A261384635 -:10C5F000F3F7B0FF23E02088F4F73AFB0746F3F7A0 -:10C60000AFFF10B10020BDE8F0816E700C202870E3 -:10C6100094F8A401A8702088A88094F8A801A871B3 -:10C6200084F8A2613846F3F795FF08E094F8DA0140 -:10C6300040B16E700F20287084F8DA616F8001209D -:10C64000BDE8F08194F8AA0180B16E7009202870CD -:10C6500020886880D4F8AE01D4F8B2116860A9606F -:10C66000B4F8B601A88184F8AA61E8E794F8B801A3 -:10C6700040B16E7017202870B4F8BA01688084F851 -:10C68000B861DCE794F8D40188B16E701820287086 -:10C6900094F8D4010028D2D084F8D461D4F8D6011B -:10C6A000C5F8020094F8D4010028F5D1C7E794F842 -:10C6B000BC01C8B16E701420287094F8BC01002829 -:10C6C000BDD000BF84F8BC61D4F8BE01C5F802003B -:10C6D000D4F8C201C5F80600B4F8C601688194F820 -:10C6E000BC010028EED1AAE794F8C80180B16E70B1 -:10C6F0001A20287084F8C861D4F8CA01C5F802006D -:10C70000D4F8CE01C5F80600B4F8D201688196E7E6 -:10C7100094F8DC0140B11B20287084F8DC61D4F867 -:10C72000DE01C5F802008AE794F8E201002808BF9C -:10C73000BDE8F0816E701520287094F8E2010028A1 -:10C740003FF47DAF84F8E261D4F8E401C5F802005B -:10C75000B4F8E801E88094F8E2010028F2D16EE72D -:10C7600024010020FA4A9060D1707047002180F8BF -:10C77000631080F8641080F8671090F8D61011B13B -:10C780000221FCF7E8BE0321FCF7E5BE2DE9F047E6 -:10C79000EF4C81460D46E0680088F4F77BFA06000E -:10C7A00008BFFFDF60782843607020794FF00005F4 -:10C7B00010F0200FE0681CBFA0F87C5080F8DC501F -:10C7C00004D1B0F87C10491CA0F87C10E068012767 -:10C7D00090F8691039B990F8642001230621583087 -:10C7E00002F0DFFE48B3A08810F4006F07D0E068C5 -:10C7F00090F86910002918BFA0F874501DD1E068A6 -:10C80000B0F87410491C89B2A0F87410B0F87630F2 -:10C810008B422CBF5A1A0022B4F806C00CF1050C4A -:10C82000624598BF80F87A70994206D3A0F8745098 -:10C8300080F8DA71E078EFF75DFA20794FF0020ABC -:10C8400010F0600F11D0E06890F8671011B1032963 -:10C8500006D00AE080F867700121FCF77CFE04E056 -:10C8600080F867A00121FCF776FEE06890F8671079 -:10C87000012905D1A18811F4807F18BF80F867A035 -:10C880004FF00808B9F1000F40F03281A18811F48F -:10C89000007F18BFA0F8F05004D1B0F8F020521C6F -:10C8A000A0F8F02011F0080F47D06178002944D19A -:10C8B00090F8C300FF2808BFFFDFFF21E06880F881 -:10C8C000C31090F86410192905D0E06890F863103F -:10C8D00020290FD028E080F88B5090F88A10491E4C -:10C8E00049B280F88A100029B8BFFFDFE06880F8FD -:10C8F0006450EAE790F8640002F046FE80B1E06818 -:10C900002621012380F8631090F864200B21583011 -:10C9100002F047FE002804BF2A20FEF7C9FF03E00B -:10C92000E168212081F86300E06890F8661008292A -:10C9300004BF84F800A080F86650FFF733F8207930 -:10C9400010F0040F09D0607838B9E06890F86610EC -:10C95000072904BF277080F8665000F0C5FB2079D6 -:10C9600010F0100F09D0607838B9E06890F86410C2 -:10C970000B2904BF0C2180F86410A07810F0080F78 -:10C9800011D0E0680123052190F86420583002F0AE -:10C9900008FE28B184F80180E06880F8A25102E026 -:10C9A000002001F07CFA00F03CFD01F06EFA002856 -:10C9B000E06818BFA0F8D05004D1B0F8D010491CDE -:10C9C000A0F8D01001F064FA40B1E16891F8DC0001 -:10C9D00002289CBF401C81F8DC0004D8E06890F875 -:10C9E000DC00022806D9E068A0F8D050A0F8D250A8 -:10C9F00080F8DC50E0680123002190F86420583072 -:10CA000002F0CFFD20B9E06890F864000C2859D1FD -:10CA1000E0680123002190F86320583002F0C1FD46 -:10CA200000284FD0E0680123002190F8662058309C -:10CA300002F0B7FDF0B3E06890F86710022904BF78 -:10CA400090F8DC0000283DD13046F3F70FFB88B3A7 -:10CA5000E06890F8C310FF2934D1B0F8CA1001295A -:10CA600030D980F8D570B0F87E10B0F87C208B1EDD -:10CA70009A42AFBF0121891A491E89B2B0F8D0305D -:10CA8000E28893422FBF0122D21A521C92B29142E5 -:10CA900088BF1146012908BF80F8D55090F8612160 -:10CAA000A2B1B0F8D220B0F8620182422CBF0120BE -:10CAB000801A00E006E03CBF401C80B2814288BF83 -:10CAC000014603E0E068012180F8D550E068B0F845 -:10CAD0005820114489B2A0F8CC1090F86730002B90 -:10CAE00018BF012B5FD0022B1CBF032BFFDF09D027 -:10CAF000A088C0F340200028E06818BFA0F8DE50EE -:10CB00005BD153E090F86630082B23D0B0F87C104E -:10CB1000B0F87E2000268B1C9A4206D3511A891E3B -:10CB20000E04360C1CBF711E8EB290F87A1051B1F3 -:10CB300090F8632001230921583002F032FD0028CB -:10CB400008BF00262BD0E06890F8691099B90AE078 -:10CB500024010020B0F87C30032B24D3B0F87E10E1 -:10CB60001144491C1FE090F864200123062158302D -:10CB700002F017FD78B1E1680020B1F87620B1F835 -:10CB800074108B1C9A4203D3501A801E18BF401E8B -:10CB9000B04238BF86B2002E1CBF701E86B2E0685D -:10CBA000B0F8CC103144A0F8C810A1E7B0F8DE10FE -:10CBB000B0F8CE201144A0F8DE10E06890F86611BD -:10CBC00039B990F8662001231946583002F0E9FC83 -:10CBD00038B1E068B0F88010B0F8CE201144A0F869 -:10CBE0008010E06890F8863033B1B0F88210B0F869 -:10CBF000CE201144A0F8821090F98AC0BCF1000F39 -:10CC000006DDB0F88810B0F8CE201144A0F88810E6 -:10CC10003D22B9F1000F18BF80F873204DD1217863 -:10CC2000022910D0012908BF90F8681143D061781B -:10CC300039B380F8727011F0140F18BF1E210CD098 -:10CC400080F8731055E090F8C410062905BF90F8DD -:10CC5000C3100229162106212DE011F0080F18BF7C -:10CC600080F8732045D111F0200F18BF2321E7D1A0 -:10CC700011F0030F08BFFFDF2A20E16881F873007D -:10CC800033E02BB1B0F88210B0F88420914211D279 -:10CC9000BCF1000F05DDB0F88810B0F88420914297 -:10CCA00008D2B0F88020B0F87E108A4208D390F8FD -:10CCB00066212AB1222180F8731080F8727018E082 -:10CCC00090F867203AB1B0F87C208A4228BF80F8FB -:10CCD0007380F2D209E0B0F87C10062905D33E211A -:10CCE00080F8731080F8727003E0E06890F87210BA -:10CCF00079B1E06880F8635080F8645080F867503C -:10CD000090F8D610002914BF02210321FCF723FC60 -:10CD100002E00021FCF71FFCE06880F8D650BDE877 -:10CD2000F047F8F7F0BBF949024648788B7818438A -:10CD30000ED10846C0684AB1097911F0080F03D036 -:10CD400090F86600082803D001207047FCF74FBB1D -:10CD5000002070472DE9F041EC4C05460E46A088B6 -:10CD60002843A08015F0020F04D015F0010F18BF62 -:10CD7000FFDF266115F0010F4FF000084FF00107AB -:10CD80001CD03046666103F01CF8062802D00B2840 -:10CD90000BD013E0E06890F8641017290ED1002141 -:10CDA000C0E9261180F8687008E0E06890F8641027 -:10CDB000112904BF80F8688080F88C7015F0020F8C -:10CDC00018D02069C078052802D00B280BD011E0BC -:10CDD000E06890F8641015290CD10021C0E92811F1 -:10CDE00080F8697006E0E06890F86410102908BFC8 -:10CDF00080F8698015F0800F1CBF0820A070BDE886 -:10CE0000F0812DE9F84FC14C00254FF00108A580B5 -:10CE10006570A5702570E06068F30709074680F823 -:10CE2000D6800088F3F736FF5FEA000A08BFFFDF0D -:10CE3000E0680088F8F72FFBE0680088F8F751FBFE -:10CE4000E068B0F8CA1071B190F8C310FF290FD193 -:10CE500090F8661191B190F8662001231946583078 -:10CE600002F09FFB98B1E06890F8C300FF2805D05E -:10CE7000E06890F8C30000BFFFF798FAD4F80CC040 -:10CE80009CF8D700002818BFE5801ED10FE0E068AD -:10CE9000A0F8805090F8671180F8C410002102209B -:10CEA000FFF76BFAE06880F8D5500220E4E79CF8C1 -:10CEB000960138B9BCF82000BCF80410884288BF3D -:10CEC000E08002D8BCF80400E080BCF8CE00401E30 -:10CED00086B2BCF8D0003044ACF8D0009CF8D40046 -:10CEE00000281CBFACF8D2508CF8D45004D1BCF848 -:10CEF000D2003044ACF8D200BCF87C003044ACF82E -:10CF00007C009CF8690040B99CF86420012306214C -:10CF10000CF1580002F045FB28B1E068B0F874103D -:10CF20003144A0F87410E068B0F8CA1001299CBF21 -:10CF3000491CA0F8CA10002E18BF80F8DC5090F8E9 -:10CF4000D510A1B1B0F8D000E18888420FD2504688 -:10CF5000F3F78CF858B1E06890F8611139B1B0F886 -:10CF6000D210B0F86201814228BF00F094FFE2685D -:10CF700082F8D55092F864000B2818BF0C2817D1FE -:10CF8000B2F85810B2F87C31C91A09B200290FDB87 -:10CF900002F5BF7102F1080004F053FF0221E068BE -:10CFA00001F0FEFEE06880F8645080F8968048E06A -:10CFB000252824D1B2F85800B2F87C11401A00B2EA -:10CFC00000281CDB92F8921192F87E01002808BF1D -:10CFD00092F8510082F8510092F87F01002808BFB2 -:10CFE00092F8520082F8520000291CBF0020FEF780 -:10CFF0005FFCE06880F8645080F87B5021E092F894 -:10D00000630025281DD1B2F85800B2F87C11401AEF -:10D0100000B2002815DB92F87E01002808BF92F8C4 -:10D02000510082F8510092F87F01002808BF92F861 -:10D03000520082F852000020FEF73AFCE06880F8C7 -:10D040006350E16801F15800B1F8CE2002F0B3F866 -:10D05000E06890F86111002918BFA0F8D2502C4860 -:10D0600000902C4B2C4A3946484600F053FEE068AD -:10D070000123052190F86420583002F092FA00282C -:10D0800008BFBDE8F88FBDE8F84F00F014BC00F011 -:10D09000E1BE10B50446B0F882214388B0F884118F -:10D0A000B0F886019A4201BFA3889942E38898426A -:10D0B0000FD02388A4F89A31A4F89C21A4F89E11DB -:10D0C000A4F8A001012084F896011048C078EEF77A -:10D0D00011FE0121204601F063FE002084F8640067 -:10D0E000032084F8670010BD70B5084C207910F05B -:10D0F000020F08BF70BD6078002818BF70BD20699E -:10D10000C178891E162980F06C8107E02401002077 -:10D110008DC7010027CD010055CD0100DFE801F0EA -:10D120000BF969758B1BF942F95BBE80F9F9F9F9C6 -:10D13000FAF7F6F5F4F3E0680123194690F8662053 -:10D14000583002F02EFA002818BF70BD0820E168A0 -:10D1500081F8660070BD02F0DFFEE16891F863209F -:10D160000A2A04BF91F8C220824205D1002081F82A -:10D17000630081F8860070BD91F8650010F0080F1B -:10D1800004BFFFDF70BD20F0080081F8650091F852 -:10D190008A00401E40B281F88A000028A8BF70BDF6 -:10D1A00000F0D8B8E06890F8650010F0010F08BFF3 -:10D1B000FFDFE16891F88A00401E40B281F88A00E2 -:10D1C0000028B8BFFFDFE06890F8651021F001018A -:10D1D00080F8651070BDE06890F86400102818BFF2 -:10D1E000FFDF0121E06880F88B10112180F86410C6 -:10D1F00070BDE06890F86400142818BFFFDF0121BB -:10D20000E06880F88B101521F0E7E06890F8640082 -:10D21000152818BFFFDF1720E16881F8640070BD92 -:10D22000E06890F86400152818BFFFDF1920E16856 -:10D2300081F8640070BDE06890F864001C2818BF95 -:10D24000FFDF0025E06880F88B5090F8A2010028ED -:10D2500018BFFFDFE06890F88C1041B180F88C5067 -:10D260000188A0F8A61180F8A4510D2108E00188DA -:10D27000A0F8A61180F8A451012180F8A8110C2172 -:10D2800080F8A2110088F3F7F3FCF3F753F9E07884 -:10D29000EEF730FDE06880F8645070BDE06890F80B -:10D2A0007A11042915D0E06890F8651011F0020F8A -:10D2B00008BF70BD90F88A10491E49B280F88A10E4 -:10D2C0000029B8BFFFDFE06890F8651021F0020187 -:10D2D0007EE790F8632001230021583002F061F9C5 -:10D2E000002808BFFFDFE06890F88E1011F0020FF1 -:10D2F00007BF062180F86310002180F8861018BF50 -:10D3000080F87A11CFE760E04FE035E024E011E0EB -:10D3100000E066E0E0680123002190F863205830C7 -:10D3200002F03FF9002808BFFFDF0E20E16881F816 -:10D33000630070BDE06890F8651021F0040180F88A -:10D34000651090F88A10491E49B280F88A100029A9 -:10D35000A8BF70BDFFDF70BDE0680123002190F819 -:10D360006320583002F01DF9002808BFFFDF1D20A0 -:10D37000E16881F8630070BDE06890F8650000F036 -:10D380003000102818BFFFDFE06890F8651021F02A -:10D39000100180F8651090F88A10491E49B280F893 -:10D3A0008A100029A8BF70BDD4E7E06801230021DE -:10D3B00090F86320583002F0F4F8002808BFFFDF2F -:10D3C0002020E16881F8630070BDE06890F8640097 -:10D3D00022281CBF0028FFDF2320E16881F86400B9 -:10D3E00070BDFFDF70BD10B5FE4CE16891F86500BF -:10D3F00010F0080F1EBF0120607010BD40F0080043 -:10D4000081F86500606902F0DCFCE16881F8C10028 -:10D410000020A1F8880091F88A00401C81F88A0059 -:10D4200010BD2DE9F041EF4CE06890F8C310FF29E2 -:10D4300006BF61780029BDE8F08190F866200123DD -:10D440001946583002F0ADF8002818BFBDE8F08149 -:10D45000E068002790F8661159B1A0F8807090F844 -:10D46000671180F8C410BDE8F04100210220FEF7EA -:10D4700084BF90F8642001230421583002F091F811 -:10D480005FEA00084FF002054FF001060CD0D4F817 -:10D490000CC09CF8640010287ED014287DD015287C -:10D4A0007CD01C287BD0E1E0E16891F8650010F0A9 -:10D4B000010F05D0BDE8F04101210920FEF75DBF55 -:10D4C00010F0020F0CD001210C20FEF756FFE0688F -:10D4D00090F88E1041F0010180F88E10BDE8F081C7 -:10D4E00010F0040F05D0BDE8F04101211320FEF734 -:10D4F00044BF10F0080F09D091F8C10081F8C400B2 -:10D50000BDE8F04101210720FEF737BF10F0100FF2 -:10D5100002D091F8890120B191F8640022287DD1D0 -:10D520009BE091F8880188B1B1F88A01A1F8400028 -:10D53000B1F88C01A1F84200B1F88E01A1F84400C5 -:10D54000B1F89001A1F8460081F88871FEF7E7F97B -:10D550000521E068FBF7FFFFE06890F84E10012915 -:10D5600008BF80F84E5014D00288A0F8BE21028E69 -:10D57000A0F8C021828EA0F8C221428E00F5CB71A6 -:10D58000A0F8C421C08E088681F82660E078EEF706 -:10D59000B1FB0121152003E006E00BE023E056E09B -:10D5A000BDE8F041FEF7E9BEBDE8F04101210B20E6 -:10D5B000FEF7E3BEF6F7D1FA0C2838BFBDE8F081DC -:10D5C0000821E068E830F6F7C9FA28B1E0680421DC -:10D5D000BC30F6F7C3FA00B9FFDFBDE8F041012126 -:10D5E0000420FEF7CABE9CF86901012817D0022862 -:10D5F00018BFBDE8F0819CF88C0000281CBF0620F5 -:10D600008CF8C4004FF0010114BF02200D20FEF77A -:10D61000B4FEE06880F86971BDE8F08126E09CF80E -:10D62000A201002818BFBDE8F0810CF1A803002278 -:10D630000CF1E0010CF5B57001F03BFF0121052074 -:10D64000FEF79BFEE06880F86971BDE8F081BDE8F7 -:10D65000F04101210620FEF790BE91F87B00C0B991 -:10D6600091F8920110B191F8930190B1E068012313 -:10D67000002190F86320583001F093FFC8B1E068B2 -:10D680000123042190F86420583001F08AFF30B162 -:10D690000FE0BDE8F04101211720FEF76EBEE06803 -:10D6A00090F87A0028B1BDE8F04100211220FEF781 -:10D6B00064BEE06890F863200A2A4DD0B8F1000FEC -:10D6C00018BFBDE8F08101230021583001F069FF47 -:10D6D00048B1E06890F87A11042904BF90F88E00F0 -:10D6E00010F0030F42D0E0680123002190F863207E -:10D6F000583001F056FF002808BFBDE8F081E0680F -:10D7000090F8881111B190F88911E1B390F8921155 -:10D71000002908BFBDE8F08190F89311002918BFD7 -:10D72000BDE8F08190F8642001230B21583001F00E -:10D7300038FF002818BFBDE8F081E06890F851205C -:10D7400090F89411012A71D0022A73D0042A14BFD0 -:10D75000082A042970D082E090F8C21080F8C41022 -:10D76000BDE8F04100210720FEF707BE00210C2094 -:10D77000FEF703FEE06890F88E1041F0010180F89A -:10D780008E10BDE8F081FFE7B0F88A11A0F84010D4 -:10D79000B0F88C11A0F84210B0F88E11A0F8441027 -:10D7A000B0F89011A0F8461080F8887190F86500E4 -:10D7B00010F0200F34D0FEF7B2F80521E068FBF737 -:10D7C000CAFEE06890F84E10012908BF80F84E505C -:10D7D00017D00288A0F8BE21028E00F5CB71A0F808 -:10D7E000C02101E024010020828EA0F8C221428ED7 -:10D7F000A0F8C421C08E088681F82660E078EEF794 -:10D8000079FA01211520FEF7B8FDE06890F865105F -:10D8100021F0200141F0100180F86510BDE8F08191 -:10D82000BDE8F04100211420FEF7A7BD012916D163 -:10D8300002E0FFE7022912D190F8522090F89511EA -:10D84000012A07D0022A08D0042A14BF082A042972 -:10D8500022D004E0012902D11EE002291CD090F858 -:10D86000642001230321583001F09BFE002818BFDB -:10D87000BDE8F081E0680123022190F8642058306F -:10D8800001F08FFE002818BFBDE8F0810021BDE83F -:10D89000F0411620FEF771BDBDE8F0410020FEF713 -:10D8A00007B8000030B5FF4C05462078002818BFA7 -:10D8B000FFDFA57230BDFB49012048727047FA486E -:10D8C00000B502784168406801F1580C91F8633066 -:10D8D00090F85100252B1CBF9CF80CC0BCF1250F03 -:10D8E00017D0202B18BF212B38D0BCF1230F18BF25 -:10D8F00000BD002A08BF00BD91F8942191F8501096 -:10D90000114011F0010F44D0082818BF04284CD052 -:10D910004EE08AB191F87E11002908BF00BD0828A9 -:10D9200018BF042841D0082918BF04293DD0012878 -:10D9300018BF01293CD036E091F8E810002908BF53 -:10D9400000BD082818BF04282FD0082918BF0429B3 -:10D950002BD0012818BF01292AD024E0BCF1230FC5 -:10D96000C7D0002A08BF00BD91F8941111F0010F33 -:10D9700004D0082818BF042817D019E011F0020FAE -:10D9800008BF00BD082818BF04280ED001280FD0FA -:10D9900009E011F0020F08BF00BD082818BF0428D5 -:10D9A00003D0012804D0022000BDFFDF082000BD05 -:10D9B000012000BD2DE9F14FBB4E4FF0010831466B -:10D9C0006FF00E0A4F686FF00D0B97F85210F88E3B -:10D9D00002290CBF0AEB90000BEBD00085B2788EC9 -:10D9E000A84238BF0546AF4C2946606BF2F77AFB78 -:10D9F000DFF8B892E06200281DBF0021A170A0628C -:10DA000084F8028008BFC4F8289030787068014616 -:10DA100000F1580890F86930428E91F85210C08E8B -:10DA200002290CBF0AEB90000BEBD00080B28242BF -:10DA300038BF1046002B1CBF001D80B2F6F756FE03 -:10DA400098F81100002838D008F15001974891E863 -:10DA50000E1000F5027A8AE80E10D8F86010C0F8AF -:10DA60002112D8F86410C0F8251200F58170F7F77C -:10DA7000B6F9307800280CBF0120002080F00101A9 -:10DA80008B480176D8E91212C0E90412C4F8289034 -:10DA90004946A581A0F58372F6F71BFD97F8520061 -:10DAA000012808BF002104D002281ABFFFDF00218F -:10DAB00001210120F6F71BFD04E0A06AF7F78FF9BA -:10DAC000F6F738FD009848B9012297F852309621B0 -:10DAD0001046F7F741F89620F7F7A9F997F82C00C8 -:10DAE000012808BFF7F726FA02202070BDE8F88F5A -:10DAF0002DE9F04FDFF8B08183B0414681464E6892 -:10DB0000A1F11400009096F85D004FF0000A012783 -:10DB100006F15804A1F1380570B3012873D002282A -:10DB200075D0032818BFFFDF7FD0686A082201780C -:10DB300021F008010170A37902EAC302114321F028 -:10DB400004010170E279042303EA8202114321F007 -:10DB50001001017094F805B0286BF2F795FA82462F -:10DB6000F7F7E3FCBBF1020F66D0BBF1010F67D002 -:10DB7000BBF1030F68D06CE0B6F834B0FFF79FFE3E -:10DB8000022819BF6FF00D0000EBDB006FF00E00F4 -:10DB900000EB9B0081B2308E884238BF0146ADF861 -:10DBA0000810A6F84C100098F7F79EFC38B1696A87 -:10DBB000EF70AA694FF48060904703201EE001AA2D -:10DBC00002A9286BF2F743F9686210B194F8331098 -:10DBD00021B10098F7F75CFC6771A6E79DF8041087 -:10DBE00031B9A0F800A080F802A0012102F03EF8AF -:10DBF000BDF80810686A02F01AFA0220607194E712 -:10DC000001E004E011E00098F7F742FC8DE7B6F878 -:10DC10004C00ADF8000001AA6946286BF2F717F92D -:10DC20006862002808BFFFDF7FE70098F7F75CFC19 -:10DC3000002808BFFFDF78E730EA0A0009D106E0D4 -:10DC400030EA0A0005D102E0BAF1000F01D001214B -:10DC500000E00021686A027842EA01110170217C2B -:10DC600000291CBF617901293CD004F150010F4803 -:10DC700091E80E1000F5027A8AE80E10216EC0F8C5 -:10DC80002112616EC0F8251200F58170F7F7A7F830 -:10DC900098F8000000280CBF0121002104480176FB -:10DCA00008E000003C01002074010020C00E0020AC -:10DCB000C8100020D4E91012C0E90412A0F5837145 -:10DCC0006A6AF6F706FC96F85100012808BF0021A1 -:10DCD00004D002281ABFFFDF002101210020F6F73F -:10DCE00006FC03E0F7F77BF8F6F724FCB9F1000F28 -:10DCF00006D196F85130012296210020F6F72CFF2C -:10DD0000AF71686A018829828078A8742F7003B087 -:10DD1000BDE8F08F2DE9F0471E46174681460C46B8 -:10DD2000FE4DDDF82080287828B9002F1CBF002E7A -:10DD3000B8F1000F00D1FFDFC5F82080C5E90E94CF -:10DD4000C5E9067600206872287268712871A8718A -:10DD5000E871F34EE870E881307804F158072088C4 -:10DD6000F2F798FF28632088F2F782FF6863F7F7DD -:10DD70002BF8F6F7DBFC04F11200F7F70EF804F1CC -:10DD80000E00F6F774FD307800280CBF0320012048 -:10DD9000F7F717F8787EF6F772FDF7F70CF830789A -:10DDA0006FF00E056FF00D09002830D0618EE08E07 -:10DDB00094F852407A7C022C0CBF05EB900009EBE2 -:10DDC000D00080B2814238BF0846002A1CBF001D27 -:10DDD00080B22146F6F78AFC3078002831D070688E -:10DDE00090F86001002818BFF6F7F2FC22460021E7 -:10DDF0000120F6F76DFE7068D0F8D800F6F7F2FF54 -:10DE00000120FFF7D7FDBDE8F047F6F7E5BF97F82B -:10DE10001080278EB4F834A0FFF751FD022814BFFC -:10DE200009EBDA0005EB9A0085B2AF4234BF384601 -:10DE30002846B8F1000F1CBF001D80B294F8514075 -:10DE4000C7E7002122460846F6F742FE0120FFF709 -:10DE50004FFED8E7B24810B501783838007831B1B4 -:10DE6000022818BFFFDFBDE81040F6F7ADBF01285C -:10DE700018BFFFDFF7E7A94810B50078022818BFE0 -:10DE8000FFDFBDE8104000F044BAA4488079704735 -:10DE9000A24840797047A1490120C87170472DE917 -:10DEA000F04706009E489D4D4FF0010740684FF037 -:10DEB000000800F15804A86A90F8019018BF012EDC -:10DEC00003D1696B03F0D0FA68706878A0B10128BB -:10DED00031D0022849D003281CBFFFDFBDE8F087FE -:10DEE000012E08BFBDE8F087686BF2F70CFBA87A3B -:10DEF000BDE8F047EDF7FEBE012E08D001224946ED -:10DF0000686BF2F74DF9022E08BFBDE8F087D4E93F -:10DF10001202411C42F10000C4E91210E07901280C -:10DF200003D100BF84F8078000E0E771A87ABDE85C -:10DF3000F047EDF7DFBE012E08D000224946686B9E -:10DF4000F2F72EF9022E08BFBDE8F087D4E91201DE -:10DF5000401C41F10001C4E91201E07901280CBF25 -:10DF600084F80780E771BDE8F087012E06D0686B62 -:10DF7000F2F7C9FA022E08BFBDE8F087D4E9120112 -:10DF8000401C41F10001C4E91201E0790128CCD123 -:10DF9000C8E72DE9F041624F4FF000083846A7F17D -:10DFA00038044068012600F158052078012818BF80 -:10DFB000FFDFA87850B185F80280E670A26941467B -:10DFC000042090473878002818BF2E71606A03211A -:10DFD000007831EA000004BFE878002805D1EE702F -:10DFE000616AE670A269022090470121002000F0DA -:10DFF000B1F918B1BDE8F04100F08BB9BDE8F041CE -:10E000000020D7E42DE9F84F454C83462046A4F183 -:10E0100038054068217800F1580A287800264FF02A -:10E020000109022818BFFFDFE88940F40070E88189 -:10E030002078676800283A48406890F868000090A7 -:10E040003C8EB7F83480FFF73AFC022807BF6FF028 -:10E050000E0000EB98006FF00D0000EBD80080B2CE -:10E06000844238BF2046009900291CBF001D80B2A1 -:10E0700097F85110F6F73AFB9AF81100BBF1000F30 -:10E0800000F0FA80F6F77CFAF6F76AFA90B99AF897 -:10E09000110078B1A86A417861B100789AF8071048 -:10E0A000C0F3C000884205D185F80490BDE8F84F60 -:10E0B00000F02FB9A86A1A4FB0460188A5F81310CE -:10E0C00080786875E88940F02000E8816E713878C2 -:10E0D0007868583000907C6894F82C00012818D19A -:10E0E000F6F71EFF2046009901F023FA88B1387830 -:10E0F000002878680CBF00F5867000F5EA7021886A -:10E1000041800099097A017180F80090A87AEDF7B2 -:10E11000F1FDA86A0078C0F3800003E03C01002014 -:10E12000740100209AF80610884237D03878786851 -:10E1300000F1580490F85D0060B3022848D000BF99 -:10E1400084F80580387840B12079414628B12171A2 -:10E1500085F80390AA6910209047E07898B184F878 -:10E160000380F7F7D0F9002808BFFFDF082085F803 -:10E170000390AA6900219047D4E91002411C42F1A2 -:10E180000000C4E91010A07901280CBF84F80680B3 -:10E1900084F80690E88940F48070E881A86A9AF8CB -:10E1A00007300178C1F3C0029A4252D13A787A68B6 -:10E1B00001F0030102F15804012918BF022935D0EA -:10E1C00003291CBF287A40F0040012D0287240E0D6 -:10E1D000286BF1F776FE002808BFFFDFD4E91002B4 -:10E1E000411C42F10000C4E91010A87AEDF782FD4D -:10E1F000A6E701F05CFDA8B184F80290E9894846E1 -:10E2000041F40061E981A96A85F80390AA69904701 -:10E21000E079012803D100BF84F8078019E084F871 -:10E22000079016E0287A40F01000CFE74078F8B168 -:10E23000E98941F40061E981A97851B9FB28F1D855 -:10E24000687A002808BF4E4603D08020AA690021C2 -:10E2500090475946012000F07DF858B39AF8110014 -:10E26000002818BFBBF1000F1BD0A87868B118E0D8 -:10E27000E0790128D3D1CFE7002818BFF6F7B9F924 -:10E28000E88940F04000E881E3E7A96AAA89487874 -:10E29000904288BF1046C21CE86A03F02DFCE86A71 -:10E2A000A862002E1CBF0020FFF7F9FDBDE8F84F63 -:10E2B00000F02FB8002E1CBF0120FFF7F0FD00205A -:10E2C000FFF716FC9AF81100002818BFBBF1000FE9 -:10E2D0000DD0A87858B9A96AAA894878904288BF11 -:10E2E0001046C21CE86A03F007FCE86AA862002E28 -:10E2F00008BFBDE8F88F0220BDE8F84FCFE5354AEA -:10E300001378526892F851200BB1FBF76ABAFAF70A -:10E310001AB970B52F4900254C68F6F7B7FDF6F726 -:10E32000A9FDF6F7DBFCF6F73EFDF6F703F9F6F785 -:10E3300053FD94F82C00012808BFF6F7F1FD264C98 -:10E340000021A269E0899047226A217A20799047CA -:10E35000257070BD70B5204C0546002908BF012D01 -:10E3600005D16079401CC0B26071012830D8E169E4 -:10E370002846884700282BD0E179184839B1012D6B -:10E3800001BF41780029017811F0100F20D0217AC7 -:10E39000F1B910490978002918BF002102D029439A -:10E3A00004D013E0012D18BF0121F8D10C490978E0 -:10E3B00011F0100F04BF007810F0100F08D0E078B3 -:10E3C00030B9A07810B111F0100F01D0002070BD4D -:10E3D000012070BD740100203C0100204F0100208D -:10E3E0004C01002010B540F2C311F94803F0FBFBCB -:10E3F000FF220821F748E4F7FAFDF74800214170B1 -:10E400004FF46171418010BD2DE9F0410F46064681 -:10E4100000F03FFBEE4C102817D004EBC00191F840 -:10E420004A1111F0010F1CBF0120BDE8F081617895 -:10E4300008291FD2617804EBC000491C61700121DA -:10E4400080F84A110846BDE8F0816178082911D2A8 -:10E450002578681C207004EBC5083868C8F84401AA -:10E46000B888A8F84801102D28BFFFDF88F843615D -:10E470002846DFE70020BDE8F081D5480178491E35 -:10E480004BB2002BB8BF704770B4002500EBC3013E -:10E4900091F84A1111F0010F3BD04278D9B2521EC7 -:10E4A000427000EBC10282F84A5190F802C000228B -:10E4B000BCF1000F0BD9841894F803618E4202D18D -:10E4C000102A26D103E0521CD2B29445F3D8027828 -:10E4D000521ED2B202708A421BD000EBC20200EB85 -:10E4E000C10CD2F84341CCF84341D2F84721CCF8D3 -:10E4F0004721847890F800C00022002C09D98618A2 -:10E5000096F8036166450AD1102A1CBF024482F8BE -:10E510000311591E4BB2002BB8DA70BC7047521C65 -:10E52000D2B29442EBD8F4E72DE9F0471F4690466B -:10E530000E46814600F0ADFAA54C0546102830D0B5 -:10E54000A2780021002A0ED9631893F80331834280 -:10E5500005D110291CBF1220BDE8F08703E0491C3B -:10E56000C9B28A42F0D8082A2FD2102D1CD0A67822 -:10E570001022701CA07004EB061909F1030041463B -:10E5800000F086FF09F183001022394600F080FF79 -:10E59000A019002180F8035180F83B110846BDE81E -:10E5A000F087A278082A10D22578681C207004EB26 -:10E5B000C50A3068CAF84401B088AAF84801102D8D -:10E5C00028BFFFDF8AF84391D1E70720BDE8F08735 -:10E5D00070B47F488178491E4BB2002BBCBF70BC21 -:10E5E000704700BF817803F0FF0C491ECAB28270E9 -:10E5F00050FA83F191F8031194453ED000EB0215D7 -:10E6000000EB0C14D5F80360C4F80360D5F807607C -:10E61000C4F80760D5F80B60C4F80B60D5F80F603C -:10E62000C4F80F60D5F88360C4F88360D5F88760BC -:10E63000C4F88760D5F88B60C4F88B60D5F88F502C -:10E64000C4F88F50851800EB0C0402EB420295F8D9 -:10E6500003610CEB4C0C00EB420284F8036100EB0D -:10E660004C0CD2F80B61CCF80B61B2F80F21ACF86E -:10E670000F2195F83B2184F83B2100EBC10292F871 -:10E680004A2112F0010F33D190F802C00022BCF1F0 -:10E69000000F0BD9841894F803518D4202D1102A2F -:10E6A00026D103E0521CD2B29445F3D80278521E10 -:10E6B000D2B202708A421BD000EBC20200EBC10C46 -:10E6C000D2F84341CCF84341D2F84721CCF8472156 -:10E6D000847890F800C00022002C09D9851895F89C -:10E6E000035165450BD1102A1CBF024482F8031167 -:10E6F000591E4BB2002BBFF675AF70BC7047521C51 -:10E70000D2B29442EAD8F3E73349487070473248AE -:10E710004078704738B14AF2B811884203D82E4980 -:10E72000488001207047002070472B484088704780 -:10E7300010B500F0AEF9102814D0254A014600208B -:10E7400092F802C0BCF1000F0CD9131893F80331F2 -:10E750008B4203D1102818BF10BD03E0401CC0B28B -:10E760008445F2D8082010BD19498A78824286BFB4 -:10E7700001EB001083300020704715498A788242EF -:10E7800086BF01EB0010C01C00207047104B93F8AF -:10E7900002C084459CBF00207047184490F80301D4 -:10E7A00003EBC00090F843310B70D0F844111160B6 -:10E7B000B0F84801908001207047054A114491F853 -:10E7C000032105490A7002684A6080880881704701 -:10E7D000F0100020860100207C01002010B5F5F724 -:10E7E00027FE002804BFFF2010BDBDE81040F5F74C -:10E7F00045BEFE498A7882429CBF0020704708448B -:10E8000090F8030101EBC00090F84A0100F001000C -:10E8100070472DE9F047F54F0026B04638780028BC -:10E8200086BF4FF0080ADFF8C893BDE8F08700BF45 -:10E8300007EBC80505F5A27195F8430100F029F929 -:10E84000102808BF544610D0B978002400290BD9ED -:10E850003A1992F80321824202D1102C05D103E02B -:10E86000621CD4B2A142F3D80824B878A04286BF73 -:10E8700007EB0410C01C002095F84A1111F0010F9D -:10E8800016D050B1082C04D2391991F83B11012946 -:10E8900003D0102100F0D9FD50B109F806403046F0 -:10E8A000731C95F8432105F5A271DEB2F5F7A8FFB8 -:10E8B00008F1010000F0FF0838784045B8D8BDE8FD -:10E8C000F0872DE9F041C94C00263546A078002894 -:10E8D0008CBFC74FBDE8F0816119C0B291F80381C8 -:10E8E000A84286BF04EB0510C01C002091F83B1124 -:10E8F000012903D0102100F0A8FD58B104EBC80095 -:10E90000BD5590F8432100F5A2713046731CDEB26C -:10E91000F5F776FF681CC5B2A078A842DCD8BDE840 -:10E92000F08110B5F5F79BFF002804BF082010BD4B -:10E93000F5F799FFAE49085C10BDAE4910B54978AE -:10E9400041B1AA4B997829B1C21CD81CF5F70DFD2D -:10E95000012010BD002010BDA44A01EB410102EBD3 -:10E9600041010268C1F80B218088A1F80F017047AE -:10E970002DE9F0419D4D07460024A878002898BF56 -:10E98000BDE8F081C0B2A04213D905EB041010F12C -:10E9900083060ED01021304600F057FD48B904EB35 -:10E9A000440005EB400000F20B113A463046F6F702 -:10E9B0003AFE601CC4B2A878A042E3D8BDE8F0815A -:10E9C000014610228C4800F063BD8B48704770B53B -:10E9D000864D0446A878A04206D905EB0410102104 -:10E9E000833000F032FD08B1002070BD04EB44001C -:10E9F00005EB400000F20B1070BD7C498A78824222 -:10EA000006D9084490F83B01002804BF0120704754 -:10EA1000002070472DE9F0410E46074615460621B5 -:10EA2000304600F012FD714C98B1A17871B104F537 -:10EA30009D7011F0010F18BF00F8015FA17849081F -:10EA400004D0457000F8025F491EFAD10120BDE8EC -:10EA5000F0813846314600F01CF8102816D0A37813 -:10EA60000021002B12D9621892F80321824209D1A9 -:10EA7000102918BF082909D0601880F83B510120DF -:10EA8000BDE8F081491CC9B28B42ECD80020BDE83A -:10EA9000F0812DE9F041554D0646002428780F46B7 -:10EAA000002811D905EBC40090F84311B14206D1FA -:10EAB0000622394600F5A27002F0F2FF38B1601C60 -:10EAC000C4B22878A042EDD81020BDE8F0812046DD -:10EAD000BDE8F081454910B44A7801EBC003521EED -:10EAE0004A70002283F84A2191F802C0BCF1000F5D -:10EAF0000DD98B1893F80341844204D1102A1CBF0E -:10EB000010BC704703E0521CD2B29445F1D80A7889 -:10EB1000521ED2B20A70824204BF10BC704701EB91 -:10EB2000C00301EBC202D2F843C1C3F843C1D2F81B -:10EB30004721C3F847218C7891F800C00022002CAF -:10EB40009CBF10BC70478B1893F80331634506D106 -:10EB5000102A1CBF114481F8030110BC7047521CDD -:10EB6000D2B29442EFD810BC704770B41F490D1850 -:10EB70008A78521ED3B28B7095F80321984247D001 -:10EB800001EB001401EB031C00EB4000DCF8036018 -:10EB9000C4F80360DCF80760C4F80760DCF80B60B9 -:10EBA000C4F80B60DCF80F60C4F80F60DCF8836019 -:10EBB000C4F88360DCF88760C4F88760DCF88B6099 -:10EBC000C4F88B60DCF88FC0C4F88FC001EB030C75 -:10EBD00003EB43039CF8034101EB430385F8034136 -:10EBE00001EB4000D3F80B4108E00000F0100020DA -:10EBF000860100207C010020B3120020C0F80B41E8 -:10EC0000B3F80F31A0F80F319CF83B0185F83B01B8 -:10EC100001EBC20090F84A0110F0010F1CBF70BC5C -:10EC2000704700208C78002C0DD90B1893F803C185 -:10EC3000944504D110281CBF70BC704703E0401CF1 -:10EC4000C0B28442F1D80878401EC0B20870904229 -:10EC500004BF70BC704701EBC20301EBC000D0F8E9 -:10EC600043C1C3F843C1D0F84701C3F847018C78CA -:10EC70000B780020002C9CBF70BC704701EB000C8F -:10EC80009CF803C19C4506D110281CBF084480F89D -:10EC9000032170BC7047401CC0B28442EED870BCE7 -:10ECA0007047000010B50A7B02F01F020A730022B1 -:10ECB000C2758B181B7A03F0010C5B0803F001048A -:10ECC000A4445B0803F00104A4445B0803F00104BE -:10ECD000A4445B0803F0010464444FEA530C0CF0B5 -:10ECE000010323444FEA5C0C0CF00104234403EBC2 -:10ECF0005C0300EB020C521C8CF8123090F817C029 -:10ED0000D2B26344C375052AD3D3D8B2252888BFAD -:10ED1000FFDF10BD00238383028401EBC202521E79 -:10ED2000B2FBF1F1C183704770B46FF01F02010CA8 -:10ED300002EA90251F23A1F5AA4054381CBFA1F573 -:10ED4000AA40B0F1550009D0A1F52850AA381EBF3D -:10ED5000A1F52A40B0F1AA00012000D100204FF017 -:10ED6000000C62464FEA0C048CEA0106F643164397 -:10ED7000B6F1FF3F11D005F001064FEA5C0C4CEAFA -:10ED8000C63C03F0010652086D085B08641C42EAA9 -:10ED9000C632162CE8D370BC704770BC0020704798 -:10EDA0002DE9F04701270025044603290FD04FF431 -:10EDB000FA43002972D0012900F0F880022918BF17 -:10EDC000BDE8F0870146BDE8F04758306AE704F136 -:10EDD00058067021304602F028FFB571F571F572C2 -:10EDE0003573B573F573757135767576F52086F8DC -:10EDF0003C00412086F83D00FF2086F86B00A4F817 -:10EE0000C850A4F8CA50A4F8CC50A4F8CE50A4F826 -:10EE1000D050A4F8D25084F8D55084F8D750A4F834 -:10EE2000DE5084F8DC50A4F8F050A4F8F25084F8D6 -:10EE30002C50258484F8517084F852704FF4486047 -:10EE400060801B21218761874FF4A470E087A08731 -:10EE500021866186E086A086A4F84410A4F84600C6 -:10EE6000A4F84010A4F84200A4F84810A4F84A10EE -:10EE7000A4F84C10677384F8885184F8895184F899 -:10EE8000925184F8935184F8615184F8665184F862 -:10EE9000695184F87A51BDE8F087FFE7A4F8DE50A5 -:10EEA00084F8D6506088FE490144B1FBF0F1A4F823 -:10EEB00076104BF68031A4F87810E288A4F87C50E4 -:10EEC000B4F880C0D2000CFB00FCB2FBF0F29CFB5B -:10EED000F0FC521CA4F880C092B202FB00FC04F1CA -:10EEE0005801A4F87E20BCF5C84FC4BF521ECA8486 -:10EEF000B3FBF0F2521C8A8500F5802202F5EE3257 -:10EF0000531EB3FBF0F2CA838B8B03FB00F2B2FB00 -:10EF1000F0F08883214604F15800FFF7C3FED4F8CF -:10EF20000E106FF01F02080C02EA9126A0F5AA410C -:10EF30004FF01F0C54391CBFA0F5AA41B1F1550187 -:10EF40000AD0A0F52851AA391EBFA0F52A41B1F177 -:10EF5000AA014FF0010901D14FF00009002211462A -:10EF60004FEA020382EA00086FEA080848EA01084B -:10EF7000B8F1FF3F16D006F00108520842EAC83245 -:10EF800049080CF0010876085B1C41EAC8314FEAD9 -:10EF90005C0C162BE6D3B9F1000F1CBF84F860514E -:10EFA000BDE8F08784F86071BDE8F087A4F8DE5012 -:10EFB000B4F88221B4F88611B4F802C004F1580004 -:10EFC000A4F87C50B4F88040C90004FB0CF4B1FBF9 -:10EFD000F2F194FBF2F4491C048589B201FB02F4BE -:10EFE000C184B4F5C84FC4BF491EC184B3FBF2F15C -:10EFF000491C8185018C02EBC101491EB1FBF2F174 -:10F00000C183818B01FB0CF1B1FBF2F18183BDE87F -:10F01000F08770B50025044603290DD04FF4FA425D -:10F02000002958D001297DD0022918BF70BD0146A2 -:10F03000BDE87040583035E604F15806702130467E -:10F0400002F0F3FDB571F571F5723573B573F573B3 -:10F05000757135767576F52086F83C00412086F886 -:10F060003D00FF2086F86B00A4F8D050202084F8E3 -:10F07000D20084F8C850C4F8CC50012284F82C5037 -:10F0800084F8512084F852201B20208760874FF499 -:10F09000A471E187A18720866086E186A186A4F815 -:10F0A0004400A4F84610A4F84000A4F84210A4F8C4 -:10F0B0004800A4F84A00A4F84C00627384F8FC509D -:10F0C00084F8FD5084F8065184F8075184F8EC5018 -:10F0D00084F8F85070BD608871490144B1FBF0F1CB -:10F0E000A4F876104BF68031A4F87810E388A4F8E1 -:10F0F0007C50B4F880C0DB000CFB00FCB3FBF0F3E9 -:10F100009CFBF0FC5B1CA4F880C09BB203FB00FCE2 -:10F1100004F15801A4F87E30BCF5C84FC4BF5B1E93 -:10F12000CB8400E017E0B2FBF0F2521C8A8500F5B8 -:10F13000802202F5EE32531EB3FBF0F2CA838B8BB2 -:10F1400003FB00F2B2FBF0F08883214604F1580083 -:10F15000BDE87040A6E5D4F8F030B4F802C004F180 -:10F1600058005989DB89A4F87C50B4F88040DB0052 -:10F1700004FB0CF4B3FBF1F394FBF1F45B1C04858A -:10F180009BB203FB01F4C384B4F5C84FC4BF5B1E3C -:10F19000C384B2FBF1F2521C8285028C01EBC202E5 -:10F1A000521EB2FBF1F2C283828B02FB0CF2B2FB65 -:10F1B000F1F1818370BD2DE9F003C47D0CB1252CE4 -:10F1C00003D9BDE8F00312207047002A02BF0020D7 -:10F1D000BDE8F003704791F80DC01F260123314DA3 -:10F1E0004FF00008BCF1000F7AD0BCF1010F1EBF38 -:10F1F0001F20BDE8F0037047B0F800C00A7C8F7B89 -:10F2000091F80F907A404F7C87EA090742EA07227B -:10F2100082EA0C0C5FF000070CF0FF094FEA1C2C8F -:10F2200099FAA9F99CFAACFC4FEA19694FEA1C6CEF -:10F2300049EA0C2C0CEB0C1C7F1C9444FFB21FFA07 -:10F240008CFC032FE8D38CEA020C164F0022ECFB57 -:10F25000057212096FF0240502FB05C2D2B201EB60 -:10F26000D207027602F007053F7A03FA05F52F422E -:10F2700018BF42767ED104FB0CF2120C521CD2B2A3 -:10F280005FF0000400EB040C9CF812C094453CBFF6 -:10F29000A2EB0C02D2B218D34FF0000C0D1903E010 -:10F2A000FFDB050053E4B36E95F8085003FA0CF742 -:10F2B0003D421CBF521ED2B2002A6AD00CF1010C92 -:10F2C0000CF0FF0CBCF1080FF0D304F1010C0CF0B2 -:10F2D000FF04052CD6D33046BDE8F0037047FFE7A6 -:10F2E00090F818C00C7E474604FB02C2FB4C4FF05E -:10F2F000000CE2FB054C4FEA1C1C6FF024040CFBD5 -:10F300000422D2B201EBD204027602F0070C247A76 -:10F3100003FA0CFC14EA0C0F1FBF42764046BDE80E -:10F32000F003704790F817C0B2FBFCF40CFB1422FA -:10F33000521CD2B25FF0000400EB040C9CF812C027 -:10F3400094453CBFA2EB0C02D2B212D30D194FF080 -:10F35000000C2D7A03FA0CF815EA080F1CBF521E98 -:10F36000D2B27AB10CF1010C0CF0FF0CBCF1080F19 -:10F37000F0D300E010E004F1010C0CF0FF04052CC8 -:10F38000DAD3A8E70CEBC40141763846BDE8F003B8 -:10F3900070470CEBC40141764046BDE8F00370476E -:10F3A000CF4A016812681140CE4A126811430160C9 -:10F3B000704730B4CC49CA4B00244FF0010C0A7896 -:10F3C000521CD2B20A70202A08BF0C700D781A683D -:10F3D0000CFA05F52A42F2D0097802680CFA01F11C -:10F3E0005140016030BC7047017931F01F0113BFFB -:10F3F000002000221146704710B4435C491C03F002 -:10F40000010C5B0803F00104A4445B0803F0010451 -:10F41000A4445B0803F00104A4445B0803F0010466 -:10F42000A4445B0803F001045B08A44403F0010456 -:10F43000A4440CEB53031A44D2B20529DDDB012AA4 -:10F440008CBF0120002010BC704730B40022A1F115 -:10F45000010CBCF1000F11DD431E11F0010F08BFBC -:10F4600013F8012F5C785FEA6C0C07D013F8025F89 -:10F4700022435C782A43BCF1010CF7D1491E5CBFE2 -:10F48000405C0243002A0CBF0120002030BC7047C2 -:10F49000130008BF704710B401EB030CD41A1CF81A -:10F4A00001CC5B1E00F804C013F0FF03F4D110BCC4 -:10F4B0007047F0B58DB0164610251C466A46AC461E -:10F4C00000EB0C03A5EB0C0713F8013CD355ACF192 -:10F4D000010313F0FF0CF3D11546103210208446BF -:10F4E0000B18ACEB000713F8013C401ED35510F08D -:10F4F000FF00F5D1284601F033FA86B1102005F15E -:10F50000200201461318A1EB000C13F8013C401E29 -:10F5100004F80C3010F0FF00F4D10DB0F0BD0898E5 -:10F520002060099860600A98A0600B98E0600DB0B8 -:10F53000F0BD38B505460C466846F5F706FD0028CF -:10F5400008BF38BD9DF90020227294F909100020EF -:10F55000511A48BF494295F82D308B42C8BF38BD7B -:10F56000FF2B08BF38BDA17A491CC9B2A17295F81A -:10F570002E30994203D8617A7F2918BF38BD627254 -:10F580000020A072012038BD0C2818BF0B2806D01F -:10F590000D281CBF2038062884BF0020704701209A -:10F5A00070470C295AD2DFE801F006090E13161B2A -:10F5B000323C4153484E002A52D04FE0072A18BF30 -:10F5C000082A4DD04AE00C2A18BF0B2A48D045E043 -:10F5D0000D2A45D042E0A2F10F000D2840D93DE0B0 -:10F5E00023B1A2F110000C283AD937E0122A18BF33 -:10F5F000112A35D090F8340020B1122A2ED31B2ABC -:10F600002ED92BE0162A29D31B2A29D926E0A2F1CC -:10F610000F01032924D990F83400F8B11C2A1FD90E -:10F620001CE0002B08BF042A18D119E013B1062AE8 -:10F6300016D013E0012A11D112E01D2A1CBF1E2A88 -:10F640001F2A0DD00AE0A2F12000062808D905E003 -:10F6500013B10E2A04D001E0052A01D00020704722 -:10F66000012070472DE9F04187680D460446204689 -:10F67000F3F7CCFB98B1D5B13846A168F3F709FF91 -:10F68000002814DD2844401EB0FBF5F606FB05F10A -:10F690003846F2F7F8FEA0603046BDE8F081F3F797 -:10F6A000E7F94FF4E661F2F7EEFEA060DFE7002035 -:10F6B000BDE8F081904228BF704770B50446101B2A -:10F6C000642838BF642025188D4205D8F3F715FF4C -:10F6D00000281CBF284670BD204670BD53E4B36EA1 -:10F6E00064230200682302008E01002091F851304B -:10F6F0000A8E022B07BF92003C32D200703292B2C7 -:10F700008B8E934238BF1A464B8E91F852C0BCF193 -:10F71000020F07BF9B003C33DB0070339BB2C98EE6 -:10F72000994238BF0B4600280CBF01210021D01898 -:10F730009830002918BF04210844704730B48388EA -:10F74000B0F808C003EB0C049834002A18BF042258 -:10F7500022444C6A944224BF30BC7047121B521C96 -:10F7600052089B1A9BB2ACEB0202838092B20281D8 -:10F7700091F851506FF00E0C6FF00D04022D0CBF7C -:10F780000CEB930304EBD303438091F8521002294E -:10F790000CBF0CEB920104EBD201C18030BC70476E -:10F7A00010F0010F1CBF0120704710F0020F1CBFAA -:10F7B0000220704710F0040018BF082070472DE9A0 -:10F7C000F0410546174688460126084600F001FC30 -:10F7D0000446404600F001FC034610F0010F18BF3C -:10F7E000012008D113F0020F18BF022003D113F03B -:10F7F000040018BF082014F0010F18BF4FF0010CCF -:10F8000021D000BF50EA0C0108BF002613F0030FFF -:10F8100008BF002014F0030F08BF4FF0000C95F84C -:10F820005110814208BF0020387095F85210614590 -:10F8300008BF4FF0000C87F801C0002808BFBCF1DA -:10F84000000F1CD10DE014F0020F18BF4FF0020C96 -:10F85000D8D114F0040F14BF4FF0080C4FF0000C77 -:10F86000D0E7404600F0BFFBB5F85810401A00B290 -:10F8700047F6FE71884201DC002800DC0026304695 -:10F88000BDE8F08101281CBF02280020704718B491 -:10F89000CBB2C1F3072CC1B2C0F30720012B07D0B4 -:10F8A000022B09D0042B08BFBCF1040F23D006E0C3 -:10F8B000BCF1010F03D11EE0BCF1020F1BD00129E6 -:10F8C00006D0022907D0042908BF042813D004E079 -:10F8D000012802D10FE002280DD001EA0C0161F3EA -:10F8E0000702184060F30F22D0B210F0020F18BFC9 -:10F8F00002200BD106E0084003EA0C01084060F347 -:10F900000702EFE710F0010018BF01208DF800009A -:10F91000C2F3072010F0020F18BF022003D110F02D -:10F92000010018BF01208DF80100BDF8000018BCCF -:10F930007047162A10D12A220C2818BF0D280FD084 -:10F940004FF0230C20280DD031B10878012818BFC2 -:10F95000002805D0162805D00020704701207047E8 -:10F960001A70FBE783F800C0F8E70000282102F0D6 -:10F970003AB930B50546007801F00F0220F00F00CB -:10F980001043287007290BD2DFE801F004060406B3 -:10F9900004080400062405E00C2403E0222401E00E -:10F9A0000024FFDF687820F03F002043687030BDFE -:10F9B000007800F00F0070470A68C0F803208988BB -:10F9C000A0F807107047D0F803200A60B0F80700CD -:10F9D000888070470A68C0F809208988A0F80D104F -:10F9E0007047D0F809200A60B0F80D008880704791 -:10F9F0000278202322F0200203EA41111143017012 -:10FA000070470278402322F0400203EA811111433B -:10FA1000017070470078C0F380107047027880232F -:10FA200022F0800203EAC11111430170704700788F -:10FA3000C0097047D0F80320C1F80920B0F80720AA -:10FA4000A1F80D200A7822F080020A70007880095F -:10FA500042EAC0100870704770B515460E4604465D -:10FA60001F2A88BFFFDF2A46314604F1090002F051 -:10FA700043F86078A91D20F03F0001F03F010843E2 -:10FA8000607070BD70B5054640780E4600F03F04CA -:10FA9000062C38BFFFDFA01FC4B21F2C88BF1F2455 -:10FAA000224605F10901304602F026F8204670BDD5 -:10FAB00070B515460E4604461F2A88BFFFDF2A464A -:10FAC000314604F1090002F017F86078A91D20F012 -:10FAD0003F0001F03F010843607070BD70B50546FE -:10FAE00040780E4600F03F04062C38BFFFDFA01F11 -:10FAF000C4B21F2C88BFFFDF224605F10901304642 -:10FB000001F0FAFF204670BD0968C0F80F10704779 -:10FB10000A88A0F813208978417570474176090A50 -:10FB200081767047C176090A017770474177090AE3 -:10FB300081777047C175090A0176704781757047F2 -:10FB400090F8242001F01F0122F01F02114380F8D9 -:10FB500024107047072988BF072190F82420E0234C -:10FB600022F0E00203EA4111114380F824107047AB -:10FB70001F3002F066B94178007801F03F0110F0C3 -:10FB80000F0006D0012808D0022809D006280BD083 -:10FB90000FE0881F1F280AD90BE00C2909D106E0C5 -:10FBA000881F1F2803D904E0881F1F2801D80120BF -:10FBB0007047002070474178007801F03F0100F065 -:10FBC0000F00042805D1062903D325299CBF012055 -:10FBD00070470020704710B4017801F00F0103292D -:10FBE00022D0052925D14478B0F81910B0F81BC0EF -:10FBF000B0F81730827D04F03F04222C19D1062979 -:10FC000017D3B1F5486F98BFBCF5FA7F11D282B116 -:10FC1000082A98BF8A420CD28B429CBFB0F81D00C4 -:10FC2000B0F5486F05D807E0407800F03F000C2899 -:10FC300002D010BC0020704710BC01207047222168 -:10FC400001F0D1BF00B5027801F0030322F00302F6 -:10FC50001A43027000224270012914BF022900BD1C -:10FC6000032912BFFFDF0121417000BD01F0030332 -:10FC700000B5027822F003021A430270002242709B -:10FC8000012914BF022900BD032912BFFFDF012192 -:10FC9000417000BD007800F0030070470278102327 -:10FCA00022F0100203EA01111143017070474178FC -:10FCB000F9B1C078192850D2DFE800F00D10131602 -:10FCC000191C1F2225282B2E31344F4F4F4C373A09 -:10FCD0003D40434649000C2941D042E008293ED02E -:10FCE0003FE002293BD03CE0172938D039E00D290C -:10FCF00035D036E0012932D033E001292FD030E071 -:10FD000002292CD02DE0092929D02AE0092926D062 -:10FD100027E0012923D024E0012920D021E0062971 -:10FD20001DD01EE002291AD01BE0012917D018E0CF -:10FD3000012914D015E0092911D012E009290ED0AB -:10FD40000FE003290BD00CE0032908D009E00529B6 -:10FD500005D006E0032902D003E0FB2901D80120E9 -:10FD600070470020704730B50546C170192924D26C -:10FD7000DFE801F00D0F11131517171119191717D7 -:10FD80001B111921211D171719191D1D1F000C24E6 -:10FD900015E0082413E0022411E017240FE00D24DD -:10FDA0000DE001240BE0092409E0062407E0032408 -:10FDB00005E0052403E0182401E00024FFDF6C7057 -:10FDC00030BDC0787047C171090A01727047B0F840 -:10FDD000070070474172090A81727047B0F8090044 -:10FDE0007047C172090A01737047B0F80B00704781 -:10FDF0004171090A81717047B0F8050070470171BF -:10FE00007047007970474173090A81737047B0F8F1 -:10FE10000D00704730B4B0F80720894DB0F809C024 -:10FE2000B0F805300179941F2D1998BFBCF5FA7F01 -:10FE30000ED269B1082998BF914209D293429FBF5F -:10FE4000B0F80B00B0F5486F012030BC98BF704788 -:10FE5000002030BC7047001D01F0F3BF021D0846B2 -:10FE6000114601F0EEBF4172090A81727047B0F885 -:10FE70000900704701717047007970470A68426055 -:10FE800049688160704742680A60806848607047CE -:10FE90000988818170478089088070470A68C0F8A6 -:10FEA0000E204968C0F812107047D0F80E200A6082 -:10FEB000D0F81200486070470968C0F81610704703 -:10FEC000D0F81600086070470A684260496881608F -:10FED000704742680A608068486070470968C1607E -:10FEE0007047C06808607047017170474171090A26 -:10FEF00081717047C171090A0172704700797047BA -:10FF0000B0F805007047B0F80700704701717047FE -:10FF10000079704701717047007970470A68426044 -:10FF200049688160704742680A608068486070472D -:10FF30000171090A417170478171090AC1717047E5 -:10FF40000172090A417270478172090AC1727047D1 -:10FF500080887047C0887047008970474089704723 -:10FF600001891B2924BF4189B1F5A47F07D381886A -:10FF70001B2921BFC088B0F5A47F01207047002055 -:10FF800070470A68426049688160704742680A6049 -:10FF9000806848607047017170470079704741710F -:10FFA000704740797047017911F0070F1BBF407906 -:10FFB00010F0070F002001207047017911F0070FA2 -:10FFC0001BBF407910F0070F00200120704701711E -:10FFD000704700797047417170474079704781716F -:10FFE000090AC1717047C088704716A282B0D2E971 -:10FFF0000012CDE900120179407901F0070269464B -:020000040002F8 -:100000001DF80220012A07D800F00700085C01282B -:100010009EBF012002B07047002002B070470171FE -:10002000704700797047417170474079704730B52B -:100030000C460546FB2988BFFFDF6C7030BD000011 -:1000400086F3FFFF000101020102020370B50446BE -:10005000C2F11005281901F04FFD15F0FF0108D07D -:10006000491EC9B2802060542046BDE8704001F0AE -:10007000BABD70BD30B505E05B1EDBB2CC5CD55CB3 -:100080006C40C454002BF7D130BD10B5002409E0FA -:100090000B78521E44EA430300F8013B11F8013B80 -:1000A000D2B2DC09002AF3D110BD2DE9F0410C4693 -:1000B00001200978FF4E92B0154602274FF006083E -:1000C0004FF0040C71B101291ED0022945D003293B -:1000D00005D12978042902D105201070002012B022 -:1000E000BDE8F081606850B1CDE9010601202070C3 -:1000F0008DF80080606A05901146684663E02770BD -:1001000085F800C0566026E029780429E7D169689F -:1001100010222069FFF7B9FF6868C07B000606D58A -:10012000E44A2069102310320146FFF7A3FFD4E907 -:1001300004101022FFF7A9FF2069C07B000606D536 -:10014000DC4A6069102310320146FFF793FF2770E5 -:1001500085F800C06E600320C1E729780429BED16C -:10016000A08910280CD9A0F1100080B2A081A1684C -:100170004FF01003014468466A68FFF77BFF18E000 -:1001800004D14FF010032269A16807E0C2B20EA8A3 -:10019000A168FFF75BFF626910230EA90AA8FFF7A9 -:1001A00069FF10230AA968466A68FFF763FF032006 -:1001B000207060680590CDF818D08DF81080606AC6 -:1001C0000990294604A8F1F759FF88E72DE9F04185 -:1001D00007460D4601200B7806213BB1012B04D1C7 -:1001E0001378052B01D11170002079E76C69012685 -:1001F00020226170E8686060686A6062A168287C9B -:100200000870A681A068A968401C01F075FCA0894F -:1002100020222030A081A0686968213001F06CFCA8 -:10022000A08921462030A0812E703846BDE8F041DB -:10023000F1F73BBF2DE9F05F0D46834601200978B9 -:10024000174606464FF00608D1B1DFF868A24FF016 -:100250000009AAF1080A012923D002297ED0032926 -:100260000CD13978052909D179681022E86901F0A3 -:1002700043FC07203870183500207D60BDE8F09FF2 -:100280002C6A8C48202284F8018020306060202075 -:10029000A081686A60626968A06801F02DFC2E7018 -:1002A000D4E039780529E9D12C6A84F80180686A9C -:1002B000606251681022E86901F01EFCE869606024 -:1002C000A0684F4680F80090A681A0684670A0897B -:1002D000401C80B2A081A1680844696951F8012FCF -:1002E000026089888180A089801D80B2A0816969AF -:1002F000A2680978C1F340011154A089401C80B262 -:10030000A081A1680844296951F8012F02608988F9 -:100310008180A089801D80B2A0812969A2680978A6 -:10032000C1F340011154A0891022401C80B2A08169 -:10033000A1680844E96801F0DFFBA08910221030B1 -:1003400080B2A081A1680844A96801F0D5FBA0890A -:10035000103080B2A081A168014400E00DE0DAF81D -:1003600004000860A089001D80B2A081A1680F541C -:10037000A089401CA081022067E03978052992D12C -:1003800051681022A86901F0B7FB2C6A84F801803B -:10039000E8696060686A6062A16881F80090A6817F -:1003A000A0684670A089401C80B2A081A168084462 -:1003B000696951F8012F026089888180A089801DB8 -:1003C00080B2A0816969A2680978C1F34001115423 -:1003D000A089401C80B2A081A1680844296951F815 -:1003E000012F026089888180A089801D80B2A08150 -:1003F0002969A2680978C1F340011154A08910222B -:10040000401C80B2A081A1680844E96801F074FB37 -:10041000A0891022103080B2A081A1680844A96888 -:1004200001F06AFBA089103080B2A081A16801446C -:10043000DAF804000860A089001D80B2A081A168DC -:100440000E54A089401CA0810320287021465846E4 -:10045000BDE8F05FF1F729BE70B50D460646097894 -:10046000012041B1012905D11178052902D10820C7 -:100470001070002070BD2C6A062060706968616091 -:10048000696A6162EA69A16852F8013F0B6092886B -:100490008A80A081E869A1680078C0F34000887173 -:1004A000A089401C80B2A081A1680844A96951F8C4 -:1004B000012F01E074230200026089888180A089F5 -:1004C000801D80B2A081A969A2680978C1F34001AA -:1004D0001154A089401C80B2A081A16808446969B8 -:1004E0000A88028089788170A0891022C01C80B29D -:1004F000A081A1680844296901F0FEFAA0891022B0 -:10050000103080B2A081A1680844E96801F0F4FAD3 -:10051000A0891022103080B2A081A1680844A96887 -:1005200001F0EAFAA08921461030A081012028704C -:100530003046BDE87040F1F7B8BD70B50D460646CF -:100540000978012059B1012908D11178052905D16F -:1005500009201070506800685060002070BD6C6900 -:10056000062010226070E8686060686A606229692D -:10057000A06801F0C1FA1020A081A06820221030EC -:10058000A96801F0B9FAA0892022203080B2A081A8 -:10059000A1680844696801F0AFFAA08921462030BB -:1005A000A081012028703046BDE87040F1F77DBD84 -:1005B00070B50C46012009788EB01546062659B153 -:1005C000012934D0022905D12978042902D10A2031 -:1005D000107000200EB070BD606910236A4600786C -:1005E000C0F340008DF80000A0690078C0F340001F -:1005F0008DF80100E0680168CDF802108188ADF83F -:10060000061080798DF8080020690168CDF809107E -:100610008188ADF80D1080798DF80F006068059025 -:100620000AA80690A168FFF725FD01201DE02978A2 -:100630000429CFD1A06910236A4650F8011F009108 -:100640008088ADF80400606950F8011FCDF80610ED -:100650008088ADF80A0000200390606805900AA821 -:1006600006906968FFF706FD022020708DF8106083 -:10067000606A0990294604A8F1F700FDAAE700B5D1 -:100680000B788BB001204BB1012B05D111780429D7 -:1006900002D10B20107000200BB000BD4868019003 -:1006A00006A80290C86803680693406807908868A7 -:1006B00003680893406809900120087006208DF8AF -:1006C0000000486A059011466846F1F7D7FCE3E759 -:1006D00000B50B788BB0012043B1012BDCD1117830 -:1006E0000429D9D10C2010700020D5E7486801906A -:1006F00006A8029088680368069340680790002067 -:10070000089009900120087006208DF80000486AC2 -:10071000059011466846F1F7B1FCBDE700B50B78CE -:100720008BB0012043B1012BB6D111780429B3D18C -:100730000D2010700020AFE748680590CDF818D064 -:1007400088680088ADF80000C8680088ADF802002D -:1007500000200190029003900120087006208DF87F -:100760001000486A0990114604A8F1F787FC93E746 -:1007700030B403460C7801205CB1012C15D0022C5A -:1007800005D111780C2902D10E201070002030BC48 -:10079000704701200870C868042242704A684260AD -:1007A0000B4A8260921EC2600BE014780D2CEED1D1 -:1007B00002200870C86803244470526842608A6846 -:1007C0008260496A4162014630BC1846F1F76DBC4F -:1007D0006E2302002DE9F0410C4611490D68104AC4 -:1007E000104908321160A0F120012A2901D301200B -:1007F0000CE03E2810D040CC0B4F94E80E0007EBE5 -:100800008000241F50F8807C3046B84720600448A0 -:10081000001D0560BDE8F0812046E0F7E1FCF5E74A -:100820001005024001000001A423020010B5524847 -:1008300000F070FA00B1FFDF4F48401C00F06AFA88 -:10084000002800D0FFDF10BD2DE9F14F4B4ED6F848 -:1008500000B00127484800F065FADFF81C8128B98C -:100860005FF0000708F1010000F072FA444C002527 -:100870004FF0030901206060C4F80051C4F804512E -:10088000009931602060DFF8FCA018E0DAF8000081 -:10089000C00614D50E2000F064F8EFF3108010F0BD -:1008A000010072B600D00120C4F80493D4F80011FE -:1008B00019B9D4F8041101B920BF00B962B6D4F84F -:1008C000000118B9D4F804010028DFD0D4F80401DD -:1008D0000028CFD137B1C6F800B008F1010000F010 -:1008E00021FA11E008F1010000F01CFA0028B9D14A -:1008F000C4F80893C4F80451C4F800510E2000F065 -:1009000030F81D4800F024FA0020BDE8F88F2DE9EA -:10091000F0438DB00D46064600240DF110090DF18F -:10092000200817E004EB4407102255F8271068460A -:1009300001F0E2F805EB870710224846796801F0DC -:10094000DBF86846FFF780FF10224146B86801F0E7 -:10095000D3F8641CB442E5DB0DB00020BDE8F083A1 -:1009600072E700F01F02012191404009800000F170 -:10097000E020C0F8801270478F01002004E500409D -:1009800000E0004010ED00E0D848002101708170C7 -:10099000704770B5D64D01232B60D64B1C68002CD8 -:1009A000FCD0002407E00E6806601E68002EFCD014 -:1009B000001D091D641C9442F5D3002028601868AE -:1009C0000028FCD070BD70B5C84E0446CA4D3078C2 -:1009D000022800D0FFDFAC4200D3FFDF7169C748B7 -:1009E000012903D847F23052944201DD03224271BB -:1009F000491C7161291BC160C0497078F2F782FA05 -:100A0000002800D1FFDF70BD70B5B84C0D4661788D -:100A1000884200D0FFDFB84E082D4ED2DFE805F047 -:100A20004D0421304D4D4D3B2078022800D0FFDF92 -:100A300003202070A078022802D0012804D008E00A -:100A4000A06800F051FD04E004F1080007C8FFF7BA -:100A5000A0FF052020700020A070BDE87040F1F7D5 -:100A600012BFF2F705F801466068F2F712FDB042D6 -:100A700002D2616902290BD30320F2F7E4FF12E0EE -:100A8000F1F7F6FF01466068F2F703FDB042F3D2DA -:100A9000BDE8704097E7207802280AD0052806D0E4 -:100AA000FFDF04202070BDE8704000F014B9022080 -:100AB00000E00320F2F7C7FFF3E7FFDF70BD70B57A -:100AC0000546F1F7D5FF894C60602078012800D0F9 -:100AD000FFDF8A4901200870002008718D60042022 -:100AE00048718548C860022020706078F2F70AFAE1 -:100AF000002800D1FFDF70BD10B57C4CA07808B98C -:100B0000207808B1112010BD7D48F1F737FF6070E3 -:100B10006078202804D0012020700020606110BD82 -:100B2000032010BD0246010B0120B2F5003F02D2A6 -:100B3000884000F071BFB2F5802F03D22039884081 -:100B400000F072BFB2F5C02F03D24039884000F0E8 -:100B500074BFB2F5002F03D26039884000F076BF31 -:100B6000002070472DE9F041144600EB84070E4643 -:100B700005463F1F00F0CBFC4FF080510A695043FF -:100B800006EB8402121FB24201D2012200E00022D1 -:100B90001CB10969B4EB910F02D90920BDE8F081BD -:100BA00058498D4216D3AF4214D3854205D28742AD -:100BB00003D245EA0600800701D01020EEE78E42FE -:100BC00008D33AB92846FFF7ADFF18B93846FFF702 -:100BD000A9FF08B10F20E1E74B484C490068884263 -:100BE00005D0224631462846FFF7D3FE10E0FFF736 -:100BF00083FF0028D2D13D4801218560C0E903640C -:100C000081704FF4A97104FB01F01830FFF757FF12 -:100C10000020C3E770B54FF0805504462869394974 -:100C2000B1FBF0F084420AD300F071FCA04201D87D -:100C3000102070BD28696043FFF774FF08B10F20D2 -:100C400070BD314831490068884204D0286960434A -:100C500000F04AFC0CE0FFF74FFF0028F0D12969B3 -:100C6000224861438160022181702948FFF727FFF4 -:100C7000002070BD2349090BB1EB401F07D940424A -:100C800001EB4011202903D34FF0FF3070470021C2 -:100C900001208840401E704770B505460C46002074 -:100CA000FFF7E8FF28420ED10120FFF7E3FF2042C3 -:100CB00009D10220FFF7DEFF104204D10320FFF725 -:100CC000D9FF184201D00F2070BD21462846BDE84B -:100CD000704000F0C4BE10B5044C6078F1F7A9FE76 -:100CE00000B9FFDF00202070A07010BD940100202B -:100CF00004E5014000E40140105C0C00C412002037 -:100D0000090A020000300200B0000020BEBAFECA8C -:100D10007C5E0100002101700846704701460020FA -:100D200008707047EFF3108101F0010172B602788C -:100D3000012A01D0012200E000220123037001B941 -:100D400062B60AB1002070474FF400507047E9E7DF -:100D5000EFF3108111F0010F72B64FF00002027034 -:100D600000D162B600207047F2E700004C490968E4 -:100D70000160002070474A49086000207047012147 -:100D80008A0720B1012804D042F20400704791671D -:100D900000E0D1670020704742490120086042F21C -:100DA0000600704708B504233E4A1907103230B1D7 -:100DB000C1F80433106840F0010010600BE01068C7 -:100DC00020F001001060C1F808330020C1F80801CC -:100DD000354800680090002008BD011F0B2909D884 -:100DE000304910310A6822F01E0242EA40000860D1 -:100DF0000020704742F205007047000100F180407A -:100E0000C0F8041900207047000100F18040C0F8CC -:100E1000081900207047000100F18040D0F8000957 -:100E2000086000207047012801D9072070471F4A39 -:100E300052F8200002680A4302600020704701282F -:100E400001D907207047194A52F8200002688A43E6 -:100E5000026000207047012801D907207047134A1B -:100E600052F8200000680860002070470200104916 -:100E70004FF0000003D0012A01D0072070470A601C -:100E800070474FF080410020C1F808014FF0E0208A -:100E9000802180F800140121C0F800117047000083 -:100EA0000004004000050040080100404C240200FE -:100EB000780500406249634B0A6863499A420968B1 -:100EC00001D1C1F310010160002070475C495D4B06 -:100ED0000A685D49091D9A4201D1C0F310000860FB -:100EE000002070475649574B0A68574908319A42C3 -:100EF00001D1C0F3100008600020704730B5504B9E -:100F0000504D1C6842F20803AC4202D0142802D2B1 -:100F100003E0112801D3184630BDC3004B481844E4 -:100F2000C0F81015C0F81425002030BD4449454BC9 -:100F30000A6842F209019A4202D0062802D203E06E -:100F4000042801D308467047404A012142F8301076 -:100F5000002070473A493B4B0A6842F209019A4225 -:100F600002D0062802D203E0042801D308467047C5 -:100F7000364A012102EBC00041600020704770B585 -:100F80002F4A304E314C156842F2090304EB8002BF -:100F9000B54204D0062804D2C2F8001807E004289D -:100FA00001D3184670BDC1F31000C2F8000800203C -:100FB00070BD70B5224A234E244C156842F20903D5 -:100FC00004EB8002B54204D0062804D2D2F800080F -:100FD00007E0042801D3184670BDD2F80008C0F31A -:100FE00010000860002070BD174910B5083118487E -:100FF00008601120154A002102EBC003C3F8101548 -:10100000C3F81415401C1428F6D3002006E0042869 -:1010100004D302EB8003C3F8001807E002EB80035F -:10102000D3F80048C4F31004C3F80048401C062855 -:10103000EDD310BD04490648083108607047000030 -:10104000B0000020BEBAFECA00F5014000F0014029 -:101050000000FEFF7D4B1B6803B19847BFF34F8F25 -:101060007B4801687B4A01F4E06111430160BFF3F2 -:101070004F8FFEE710B5EFF3108010F0010F72B63E -:1010800001D0012400E0002400F0D6F850B1E0F7D0 -:1010900041F9F1F7BCFAF2F777FCE1F7C0FE6E49CF -:1010A0000020086004B962B6002010BD70B50C467F -:1010B0000646EFF3108010F0010F72B601D0012543 -:1010C00000E0002500F0B8F818B105B962B60820B4 -:1010D00070BDE0F79BF8E0F71FF9024600204309D6 -:1010E0009B0003F1E02300F01F01D3F80031CB4057 -:1010F000D9071BD0202803D222FA00F1C90722D138 -:1011000041B2002906DA01F00F0101F1E02191F866 -:10111000141D03E001F1E02191F8001449090829A8 -:1011200011D281B101290ED004290CD0401C6428B1 -:10113000D5D3E1F74BFE4849484808602046F3F70D -:101140008FF860B904E005B962B641F2010070BDE4 -:101150003E4804602EB13046F3F7CFF818B11024A2 -:1011600029E03F4E16E03078022802D94FF480542F -:1011700021E007240028707801D0E0B908E0D0B160 -:10118000202818D8B078212815D8012813D001E0DC -:10119000B07880B93349802081F8140DE0F7BCF8AD -:1011A0003146F2F7D7FBF1F7F1F900F0E3F93046F9 -:1011B000E0F782F8044605B962B61CB1FFF75AFFA2 -:1011C000204670BD002070BD10B5044600F034F814 -:1011D00000B101202070002010BD234908600020CC -:1011E000704770B50C4621490D682049204E0831E2 -:1011F0000E60102807D011280CD012280FD0132809 -:1012000011D0012013E0D4E90001FFF74FFF35466C -:1012100020600DE0FFF72EFF0025206008E0206829 -:10122000FFF7D2FF03E0104920680860002020602B -:101230000E48001D056070BD0748084900688842D7 -:1012400001D101207047002070470000AC01002050 -:101250000CED00E00400FA05B0000020BEBAFECAA2 -:10126000542402000BE000E00400002010050240BE -:101270000100000100B5764910F1080F08BFF82001 -:1012800024D014DC10F1280F08BFD8201ED010F194 -:10129000140F08BFEC2019D010F1100F08BFF02078 -:1012A00014D010F10C0F08BFF4200FD00CE010F197 -:1012B000040F08BFFC2009D0002818BF032805D060 -:1012C000042804BF086000BDFFDF00BD086000BD4A -:1012D00000B56049012808BF032004D0022816BFCA -:1012E000FFDF042000BD086000BD5A48016801F01E -:1012F0000F01032904BF01207047006800F00F00B0 -:10130000042804BF0220704700B5FFDF012000BDA4 -:101310005149002808BF086805D0012806BF0868A1 -:1013200040F0010070470860704770B5054601291C -:1013300014D0022A07BF49484FF47A7148484FF445 -:10134000C86144181846F4F759F820444FF47A71EC -:1013500000F27120B0FBF1F0281A70BD022A14BF10 -:101360004FF4C8604FF47A7049F608514418E9E721 -:1013700070B514460546012908BF49F6CA6605D06E -:10138000022B0CBF3748364800F1FA061046F4F736 -:1013900044F8012C0CBF4FF47A714FF4FA71711AB2 -:1013A00008444FF47A7100F28920B0FBF1F0281A5A -:1013B000801E70BD70B51546064601291AD0022B55 -:1013C00007BF26484FF47A7125484FF4C861441886 -:1013D0001046F4F722F8012D0CBF4FF47A714FF448 -:1013E000FA71611A08444FF47A716438B0FBF1F075 -:1013F000301A70BD022B14BF4FF4C8604FF47A70DE -:1014000049F608514418E3E770B505460C46164600 -:101410001046F3F7F3FF05EB4501C1EBC51100EBF7 -:10142000C100012C0CBF4FF47A714FF4FA714518CA -:101430002046F3F7F2FF281A4FF47A7100F60F6096 -:10144000B0FBF1F43046F3F7CDFF2044401D70BDF2 -:101450000C15004010150040501600406836020080 -:10146000A2240200043602002DE9F04184B088462F -:101470000746FEF70FFC05467E786A4601A94046FE -:10148000EFF748F804000ED0012D1EBF032004B072 -:10149000BDE8F08102AA40460199EEF73AFF0298B2 -:1014A000B0F803000AE0022D18D1042E16D3B7F8C5 -:1014B0000300BDF80020011D8A4206D3001D80B242 -:1014C000A119814238BF012004D104B04FF00000BF -:1014D000BDE8F0813CBF04B0BDE8F0814FF00200F0 -:1014E00004B0BDE8F08100000B4A022111600B49F5 -:1014F0000B68002BFCD0084B1B1D186008680028E7 -:10150000FCD00020106008680028FCD070474FF025 -:10151000805040697047000004E5014000E401404C -:1015200002000B464FF00000014620D0012A04D0F3 -:10153000022A04D0032A0DD103E0012002E0022098 -:1015400015E00320072B05D2DFE803F00406080AA4 -:101550000C0E100007207047012108E0022106E070 -:10156000032104E0042102E0052100E00621F1F757 -:1015700022BA0000FC4805218170002101704170F1 -:10158000C17081607047F9490A78012A06D0CA689B -:101590001044C860C8684038F1F748BF8A681044F2 -:1015A00088608868F7E710B5EF4CE078F1F741FA0A -:1015B00000B9FFDF0820F2F746FA0520A0700020EE -:1015C0002070607010BD002819D00378E849E94AFE -:1015D00013B1012B0ED011E00379012B00D06BB9B0 -:1015E00043790BB1012B09D18368643B8B4205D24F -:1015F000C0680EE00379012B02D00BB100207047C8 -:1016000043790BB1012BF9D1C368643B8B42F5D20E -:1016100080689042F2D8012070472DE9F0410446DD -:101620000227F1F72FFE006800B1FFDFCE4D012643 -:101630003CB12078B0B1012805D0022810D0032891 -:1016400013D02E710CE06068C82807D3F1F755FF5E -:1016500020B16068FFF797FF012703E0002701E052 -:1016600000F0CCF93846BDE8F08128780028F7D1A1 -:101670006068FFF7A8FF0028E3D06068DFF8EC821D -:10168000007828B3A878042800D0FFDF0020464661 -:1016900088F8000060680079C8B300203071606885 -:1016A0004079A8B30420707160688168E868F0F739 -:1016B000EAFEB0606068C0685230F0600320A87035 -:1016C000AA49E878F1F71EFC0028C9D1FFDFC7E777 -:1016D000404688F8006061680979D1B10021017144 -:1016E00061684979B9B104214171616889685231F1 -:1016F00081606168C968C160C0689B4C14346060D7 -:10170000F1F7B6F920606E700220A870A8E704E037 -:1017100005E00321E3E70321E6E70120BEE703201C -:10172000C1E72DE9F047904C8846E178884200D027 -:10173000FFDFDFF83492002501278C4E09F11409F0 -:10174000B8F1080F79D2DFE808F0040D2A557E843D -:101750009199A078032803D0A078022800D0FFDF59 -:10176000BDE8F087A078032803D0A078022800D035 -:10177000FFDF0420A0702571207800287AD1FFF7C0 -:1017800002FF3078012806D0B068E06000F07BF9F5 -:101790002061002062E0E078F1F7B0FAF5E7A07888 -:1017A000032803D0A078022800D0FFDF207800288B -:1017B0006FD1A078032816D0F1F75AF901464F46A9 -:1017C000D9F80000F1F765FE00280EDB7968814248 -:1017D0000BDB081AF0606549E078F1F793FB00280D -:1017E000BED1FFDFBCE7042029E00420F2F72BF98B -:1017F000A570B5E7A078032803D0A078022800D010 -:10180000FFDF207888BBA078032817D0F1F730F9E4 -:1018100001464F46D9F80000F1F73BFE0028E4DB13 -:1018200079688142E1DB081AF0605049E078F1F70D -:1018300069FB002894D1FFDF92E740E00520F2F732 -:1018400002F9A7708CE7A078042800D0FFDF0220FF -:1018500004E0A078042800D0FFDF0120A1688847B9 -:10186000FFF7DBFE054630E004E012E0A078042834 -:1018700000D0FFDFBDE8F04700F0C0B8A078042832 -:1018800005D0607810B1A078022800D0FFDF207862 -:1018900010B1BDE8F04786E6207920B10620F2F7C6 -:1018A000D2F82571CDE7607838B13049E078F1F7AA -:1018B00029FB00B9FFDF657052E70720BFE7FFDFB4 -:1018C0004EE73DB1012D03D0FFDF022DF9D147E7EF -:1018D0000420C3E70320C1E770B5050005D0224C02 -:1018E000A078052803D0112070BD102070BD2248BB -:1018F000F1F744F8E070E078202803D0A5600020DC -:10190000A07070BD032070BD174810B5017809B1F3 -:10191000112010BD817805290CD0817801290BD0C8 -:10192000817849B1012101708178012904D0807842 -:1019300010B103E00F2010BDFFF735FE002010BDF1 -:1019400070B5094E0446B07808B101280AD1ACB18F -:101950002046FFF738FE98B12078044D90B1B0785A -:1019600001282AD00F2070BDB0010020D412002021 -:101970003D860100FF1FA107231702001020F2E798 -:101980000720F0E701202870207990B1002028710D -:10199000607980B104206871A0685230A860E06866 -:1019A000E860E8681A4C6060F1F762F82060022095 -:1019B00016E00320EBE70320EDE7002028702079F4 -:1019C000A8B100202871607998B104206871A168DD -:1019D000F068F0F758FDA860E0685230E860032036 -:1019E000B0700C49F078F1F78DFA28B903E00320C4 -:1019F000E8E70320EAE7FFDF0020B4E7044810B57A -:101A00001438006900F037F8BDE81040F0F73BBF2C -:101A1000C4010020D41200201F490968014201D0EE -:101A200001207047002070471B49091D09680142C9 -:101A300001D0012070470020704717491031096814 -:101A4000014201D001207047002070471249143133 -:101A50000968014201D0012070470020704710B58D -:101A60000D4C2060201D01600B4810300260001DED -:101A70000360002010BD09490A6848F202139A4326 -:101A800002430A607047054A116848F2021301EAEE -:101A9000030099431160704700060040C8060240E9 -:101AA00040EA010310B59B070FD1042A0DD310C8DB -:101AB00008C9121F9C42F8D020BA19BA884201D92D -:101AC000012010BD4FF0FF3010BD1AB1D30703D075 -:101AD000521C07E0002010BD10F8013B11F8014B2B -:101AE0001B1B07D110F8013B11F8014B1B1B01D147 -:101AF000921EF1D1184610BD032A40F2308010F03A -:101B0000030C00F0158011F8013BBCF1020F624498 -:101B100098BF11F801CB00F8013B38BF11F8013B29 -:101B2000A2F1040298BF00F801CB38BF00F8013BD6 -:101B300011F0030300F02580083AC0F0088051F846 -:101B4000043B083A51F804CBA0E80810F5E7121D51 -:101B50005CBF51F8043B40F8043BAFF30080D20770 -:101B600024BF11F8013B11F801CB48BF11F8012B3C -:101B700024BF00F8013B00F801CB48BF00F8012B5F -:101B8000704710B5203AC0F00B80B1E81850203AE9 -:101B9000A0E81850B1E81850A0E81850BFF4F5AF0D -:101BA0005FEA027C24BFB1E81850A0E8185044BF97 -:101BB00018C918C0BDE810405FEA827C24BF51F804 -:101BC000043B40F8043B08BF7047D20728BF31F8F8 -:101BD000023B48BF11F8012B28BF20F8023B48BF49 -:101BE00000F8012B70474FF000020429C0F012806A -:101BF00010F0030C00F01B80CCF1040CBCF1020FC0 -:101C000018BF00F8012BA8BF20F8022BA1EB0C0194 -:101C100000F00DB85FEAC17C24BF00F8012B00F88A -:101C2000012B48BF00F8012B70474FF0000200B5B0 -:101C3000134694469646203922BFA0E80C50A0E8EF -:101C40000C50B1F12001BFF4F7AF090728BFA0E89D -:101C50000C5048BF0CC05DF804EB890028BF40F869 -:101C6000042B08BF704748BF20F8022B11F0804FAB -:101C700018BF00F8012B704770477047704700008D -:101C8000FEDF04207146084219D10699124A91429A -:101C900015DC069902394878DF2810D10878FE282B -:101CA00007D0FF280BD14FF001004FF000020B4B83 -:101CB000184741F201000099019A084B1847084B58 -:101CC000002B02D01B68DB6818474FF0FF307146CD -:101CD0004FF00002014B184700300200551002007F -:101CE00004000020184819497047FFF7FBFFDFF791 -:101CF00065FA00BD4FF4805015490968884203D148 -:101D0000144A13605B68184700BD000020BFFDE760 -:101D10004FF480500E490968884210D10E4B186864 -:101D20004FF0FF318842F1D080F308884FF0202136 -:101D3000884204DD0948026802210A43026008481B -:101D4000804708488047FFDFE8120020E8120020A3 -:101D500000000020040000200030020024050040A4 -:101D600039430100F51C020004207146084202D0EC -:101D7000EFF3098101E0EFF3088188690238007808 -:101D8000102813DB20280FDB2B280BDB0A4A1268F4 -:101D90000A4B9A4203D1602804DB094A104702200B -:101DA00008607047074A1047074A1047074A1268F9 -:101DB0002C32126810470000B0000020BEBAFECAE4 -:101DC0001D130000D5070200E311020004000020EB -:101DD0000D4B0E4908470E4B0C4908470D4B0B495C -:101DE00008470D4B094908470C4B084908470C4B5D -:101DF000064908470B4B054908470B4B0349084761 -:101E00000A4B024908470000F9BA0000092F0000F8 -:101E1000812C00001D2B0000AB2A0000232D0000A8 -:101E2000391300006728000029BD0000C911000017 -:101E300000210160818070470021016041600172D2 -:101E400070470A6802600B7903717047599500006A -:101E50001B970000779800009B980000D598000021 -:101E6000099900004399000081990000D39900006E -:101E700031960000A7120000A7120000C140000028 -:101E80000541000025410000E1410000274300001A -:101E90000144000031440000F5440000153D0000FD -:101EA000274700001948000039480000DD150000F0 -:101EB00001160000311500008515000033160000E2 -:101EC000C716000003600000B561000073650000E4 -:101ED000896600000D67000087670000F967000051 -:101EE00015690000E3690000616A000053480000C2 -:101EF0005948000063480000D73C00001F4900001B -:101F0000A13C00005F4A0000B74A00001F4B0000E0 -:101F1000A7120000A7120000A7120000A7240000CB -:101F20002D2500004925000065250000F32600004E -:101F30008F25000099250000DB250000FD2500000D -:101F4000D92600001B270000A7120000CF82000046 -:101F5000F7820000F98200003383000061830000F3 -:101F60004F840000DB840000EF8400003D8500000A -:101F70002D860000D1870000F9880000D172000092 -:101F800011890000A7120000A712000049B4000048 -:101F9000B3B5000007B6000073B6000023B7000019 -:101FA00051000000000000000000000000000000E0 -:101FB0000000000000000000000000000000000021 -:101FC0000000000000000000000000003E000000D3 -:101FD0000000000000000000000000000000000001 -:101FE00000000000000000000000000000000000F1 -:101FF0000000000000000000500000000000000091 -:1020000000000000000000000000000000000000D0 -:1020100000000000000000000000000000000000C0 -:1020200000000000100110013A0200001A02000432 -:102030000506000013900000F38F0000FFFFFFFF74 -:102040000000FFFF3BAC00003D39000041200000D4 -:102050001B730000EB8D0000000000000000020078 -:10206000000000000002000000000000000100006D -:10207000000000006F8000004F800000BD80000065 -:1020800029240000EB2300000B240000A7A7000078 -:10209000D3A70000DBA9000021590000DD8000006B -:1020A000000000000D810000772400000000000007 -:1020B0000000000000000000BDA8000000000000BB -:1020C000B359000000000000000000000000000004 -:1020D0000000000000000000000000000000000000 -:1020E000000000000000000000000000D5E5000036 -:1020F00059E60000000000000000000000000000A1 -:1021000059E700000000000000000000000000008F -:1021100049F800000000000000000000000000007E -:1021200005E900005DF4000000000000DDF400009F -:1021300051F500000000000037EE0000D5EE000071 -:102140000000000017F50000D1EF0000C9F1000009 -:102150003DF2000041F30000A5EA0000000000008D -:1021600000000000BFE90000000000001FE80000C0 -:1021700095E70000BDF300007BF60000E9F60000E3 -:1021800000000000A7E60000D7E6000007E6000018 -:102190000000000021E70000000000000000000037 -:1021A000000000004BF700000000000000000000ED -:1021B000000000000000000000000000EFEC000044 -:1021C000000000000000000000000000C3E8000064 -:1021D000C1E700008BE800000000000053E80000A9 -:1021E0000000000000000000B3F7000097F80000B6 -:1021F0009BFA000017F900003DE9000051FA0000C9 -:10220000000000004FEB000021EC000061F900002D -:10221000ABF9000007F80000E5F90000F1ED00005F -:1022200093560000935600009D400000E7AA00006E -:102230009F750000531F000087AA01004BC50100D5 -:10224000D9560000D9560000BF40000049AB00003D -:1022500023760000C51F0000B5AA01005FC501007C -:10226000D001D001400038005C0024004001F001A2 -:1022700001000000010000000001020304120F1021 -:102280001100000013000000B10502007F060200EB -:10229000D10602001D07020071070200AB00020018 -:1022A000CD01020035020200590402003B05020084 -:1022B000750D01008B1E01000000000006000000EB -:1022C0000A0000003200000073000000B4000000AB -:1022D000B197010045850100235F010077DE010011 -:1022E000F772010077DE01007D5F010005E001006B -:1022F000876B010005E001007B5E010093DF0100B8 -:10230000C971010093DF01004D630100FFE201008C -:102310007F730100FFE20100555555D6BE898E003E -:102320000000A606340DC21300004A03EE05920811 -:10233000000096041409920D555555252627D6BE42 -:10234000898EF401FA00960064004B0032001E00F2 -:1023500014000A00050002000100000025410000F1 -:1023600000000000AAAED7AB15412010000003000A -:10237000656C7462000000000000000000000000B6 -:1023800000000000870000000000000000000000C6 -:1023900000000000BE83605ADB0B376038A5F5AA49 -:1023A0009183886CB50E0200CD0E0200E50E02008E -:1023B000FD0E02002D0F0200550F02007F0F0200DC -:1023C000B30F0200150C0200650B0200990C02000D -:1023D000150D0200250D0200510D0200A33B010066 -:1023E000AB3B0100B93B01007F0D0200990D0200DB -:1023F0006D0D0200770D0200A50D0200DB0D02003D -:10240000FB0D0200090E0200170E0200270E02004B -:102410003F0E0200570E02006D0E02000000000089 -:10242000F7B800004DB9000063B9000021150200A3 -:10243000490802000F090200D91802000919020018 -:1024400041190200E93901000D3E01001C05004060 -:10245000200500400010020078240200080000203F -:10246000C401000044110000A8240200CC01002097 -:102470001C110000A01100000118136813024C2069 -:102480001A010222782720FB349B5F801280021EF3 -:1024900010139F0A1B205C041AE2040128237F0109 -:0824A00002A329091DFB013113 -:1030000030F00020153202001D3202001F32020093 -:1030100021320200233202002532020000000000AB -:103020000000000000000000000000002732020045 -:1030300029320200000000002B3202002D32020073 -:10304000913302002F320200653702002F32020056 -:103050002F3202002F3202002F3202002F320200E4 -:103060002F3202002F320200313702002F320200CD -:103070002F3202002F3202002F3202002F320200C4 -:103080002F320200E93302002F3202002F320200F9 -:103090000D3402002F320200113402002F320200E0 -:1030A0002F3202002F3202002F3202002F32020094 -:1030B0002F3202002F32020000000000000000004A -:1030C0002F3202002F3202002F3202002F32020074 -:1030D0002F3202002F3202002F32020000000000C7 -:1030E00000000000000000000000000000000000E0 -:1030F00000000000000000000000000000000000D0 -:1031000000000000000000000000000000000000BF -:1031100000000000000000000000000000000000AF -:10312000000000000000000000000000000000009F -:10313000000000000000000000000000000000008F -:10314000000000000000000000000000000000007F -:10315000000000000000000000000000000000006F -:10316000000000000000000000000000000000005F -:10317000000000000000000000000000000000004F -:10318000000000000000000000000000000000003F -:10319000000000000000000000000000000000002F -:1031A000000000000000000000000000000000001F -:1031B000000000000000000000000000000000000F -:1031C00000000000000000000000000000000000FF -:1031D00000000000000000000000000000000000EF -:1031E00000000000000000000000000000000000DF -:1031F00000000000000000000000000000000000CF -:10320000DFF80CD000F04AF80048004799D60200D9 -:1032100030F000200648804706480047FEE7FEE7FA -:10322000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE776 -:10323000153402000132020040EA01039B0703D06B -:1032400009E008C9121F08C0042AFAD203E011F8E5 -:10325000013B00F8013B521EF9D27047D2B201E0A7 -:1032600000F8012B491EFBD270470022F6E710B58B -:1032700013460A4604461946FFF7F0FF204610BDE4 -:1032800030B504460020034600E05B1C934203D2A5 -:10329000E05CCD5C401BF8D030BD0000064C074D13 -:1032A00006E0E06840F0010394E807009847103416 -:1032B000AC42F6D3FFF7A8FF40050300600503000A -:1032C00070B58C1810F8015B15F0070301D110F8E8 -:1032D000013B2A1106D110F8012B03E010F8016B15 -:1032E00001F8016B5B1EF9D12B0705D40023521E98 -:1032F0000DD401F8013BFAE710F8013BCB1A921C00 -:1033000003E013F8015B01F8015B521EF9D5A142FD -:10331000D8D3002070BD00F01F0201219140400968 -:10332000800000F1E020C0F88012704700F01F021A -:10333000012191404009800000F1E020C0F8801296 -:10334000704700F01F02012191404009800000F108 -:10335000E020C0F80011704700F01F0201219140E9 -:103360004009800000F1E020C0F8001270474907D2 -:10337000090E002806DA00F00F0000F1E02080F8C6 -:10338000141D704700F1E02080F800147047000021 -:1033900070B54FF4807630460AF02AFA114CB50524 -:1033A00060B130460AF02BFA0120C5F808036079B5 -:1033B00020B9012060712168002088474FF482768F -:1033C00030460AF015FA00280AD030460AF017FAFB -:1033D0000220C5F808032168BDE8704001200847B5 -:1033E00070BD0000D8B3002007480021C0F840118C -:1033F000C0F84411C0F84811C0F84C11C0F80011D1 -:10340000C0F804110CF07EBA001001400CF0C8B9ED -:103410000AF018BDF0B5B5480023021D0178101D53 -:1034200001254FF0805406290BD11678360708D1B4 -:103430000678C6F30316032E06D0042E04D0052EFC -:1034400002D0062907D00EE0B4F82463A84FC6F3D3 -:1034500004263E6002E01678360704D10678C6F3EB -:103460000316032E02D0062904D00FE0A24FA14E6E -:103470007E670EE01678360708D10678C6F3031685 -:10348000032E06D0042E04D0052E02D0062907D024 -:103490000EE0D4F84462994FC6F342363E6002E033 -:1034A0001678360704D10678C6F30316032E02D029 -:1034B000062906D011E0924E376827F080773760F2 -:1034C0000EE01678360708D10678C6F30316032EE9 -:1034D00006D0042E04D0052E02D006290AD011E011 -:1034E0004FF08046C6F80C31C6F81031834E361FB7 -:1034F000336002E01678360704D10678C6F3031667 -:10350000032E02D0062905D00CE07C4F0326643739 -:103510003E600AE01678360704D10678C6F3031633 -:10352000032E02D006290DD014E0764F05263E600A -:10353000744E78363560734E083633603F263F1D33 -:103540003E6002E01678360704D10678C6F303160B -:10355000052E02D0062957D062E06B4E36686B4FBD -:103560003E60694E361D36683F1D3E60664E083629 -:1035700036683F1D3E60644E0C3636683F1D3E6027 -:10358000614E103636683F1D3E605F4E1436366819 -:103590003F1D3E605C4E183636685C4F20373E60FB -:1035A000594E1C3636683F1D3E60574E20363668F1 -:1035B0003F1D3E60544E243636683F1D3E60524EDD -:1035C000283636683F1D3E604F4E2C3636683F1D0C -:1035D0003E604D4E303636684C4F40373E604A4E66 -:1035E000343636683F1D3E60474E383636683F1DDC -:1035F0003E60454E3C3636683F1D3E60424E40368A -:1036000036683F1D3E6002E01678360708D106781E -:10361000C6F30316032E06D0042E04D0052E02D0C6 -:10362000062907D019E0D4F85812394A01F04F01A1 -:10363000116002E0117809070FD10078C0F3031080 -:10364000032803D0042801D0052806D13148016899 -:10365000C90702D06FF001010160D4F830010628DB -:1036600008D1D4F83401062804D12B48016841F46C -:103670008061016022487438016841F47001016082 -:10368000BFF34F8FBFF36F8F4FF01021D1F80002BF -:10369000002803DBD1F80402002822DA1F4A156053 -:1036A0001F480468002CFCD01524C1F800420568AE -:1036B000002DFCD0C1F8044201680029FCD0136041 -:1036C00001680029FCD0BFF34F8F0D48F038016826 -:1036D000144A01F4E06111430160BFF34F8F00BF52 -:1036E000FDE7124910480860F0BD0000E00F00F04F -:1036F000403501400DF0ADBA00C007403C05004028 -:10370000FCED00E0105600400404001020C500400D -:10371000E40E0040000400403C17004004E5014076 -:1037200000E401400400FA050090D00328B5002011 -:103730000A48D0F8441101290ED1D0F804138903A6 -:103740000AD50021C0F844110121C1600448C279A2 -:103750000AB109F05FBC01727047000000A0004090 -:10376000B4B400200148006800470000E0B3002026 -:1037700002E008C8121F08C1002AFAD1704770473A -:10378000002001E001C1121F002AFBD17047000098 -:103790000121202803DA81400548014003E0402848 -:1037A00002DA2038814009B10120704700207047BB -:1037B000FC06FFBD082806D228B1012803D0042842 -:1037C00001D0012070470020704700001CB50E4852 -:1037D0000D4C90F830002834C0002070002060703C -:1037E000A070204609F0F0FDE0700420ADF8040060 -:1037F00000220094114668460BF0E2FD002802D03A -:10380000002000F027F81CBDB4B4002038B50446F1 -:1038100000208DF80000684600F08AF90A488442CA -:103820000CD0BFF34F8F09480168094A01F4E061E9 -:1038300011430160BFF34F8F00BFFDE79DF800000B -:1038400000F09AF938BD0000FECADDBA0CED00E0C8 -:103850000400FA050EB500210091CDE901106A4679 -:1038600044F20100FFF7D2FF0EBD00002DE9F84F32 -:103870002C4C8146924660880E4681424FD80027E4 -:103880004FF6FF788DF80070684600F051F9227805 -:103890006078A188884201DA401C00E00020C0B2B4 -:1038A000904204D19DF8000000F066F935E065789B -:1038B0006078884201DA401C00E0002060702078C7 -:1038C0006278824201D3101A02E0081A1044401CA8 -:1038D000E18880B2884200D9E0809DF8000000F0C5 -:1038E0004BF9454519D0E068B9F1000F40F835A013 -:1038F0000DD066B161882069324605FB010049465A -:10390000FFF79AFCE06800EBC500868002E000EB60 -:10391000C50087800020BDE8F88F0420FBE7092060 -:10392000F9E70000E8B3002010B50F4C03E0401C9D -:1039300000E000202070A068002814D12078617871 -:10394000814210D0227861882069E36802FB01007F -:1039500003EBC20153F83220898890472078A18870 -:103960008842E6DAE3E710BDE8B3002030B5CB00CB -:1039700008339DB293074FF0000401D0072030BDFB -:10398000054BDA602A441A615C701C70588099807B -:10399000DC80002030BD0000E8B3002008B5002026 -:1039A0008DF80000684600F0C3F805498868421C9D -:1039B00001D0401C88609DF8000000F0DDF808BDD3 -:1039C000E8B30020074801784078064A8842928888 -:1039D00001D3401A02E0511A0844401C101A80B268 -:1039E00070470000E8B3002008B500208DF8000003 -:1039F000684600F09DF80548816809B1491E81605C -:103A00009DF8000000F0B8F808BD0000E8B3002001 -:103A1000074B9B7823B12AB120B10068037C1BB10E -:103A200008207047072070474174426100207047AA -:103A30007CCE002070B50BF03DF8104800240B211F -:103A4000047044700E4D817014206C602C706C708A -:103A5000FFF76CFC07211420FFF789FC1420FFF707 -:103A600070FC0848046007211120FFF780FC05481E -:103A7000001F0068A860002070BD00007CCE002000 -:103A8000FCB30020081501402DE9FC47DFF87890D1 -:103A900099F8023073B368B3052902D20720BDE854 -:103AA000FC87436933B3437C012B25D000270446B0 -:103AB0000025884616468DF80050684600F038F814 -:103AC00001A80CF0E5FAC8B1012101700F4944606A -:103AD0000968C0E90218C0E904769DF8040089F875 -:103AE00001009DF8000000F047F81420FFF734FCB7 -:103AF0002846D4E70820D2E70F46D8E704259DF8EA -:103B0000000000F039F8F3E77CCE002004150140F6 -:103B10000649897839B130B1416921B10021017478 -:103B200002210BF0CBBE0820704700007CCE0020A5 -:103B300030B5EFF3108172B60D4A9468012324B1B9 -:103B40000370002900D162B630BD93604FF0E023CE -:103B5000D3F88051074C25401560C3F88041D3F855 -:103B6000844154605A17C3F8842100220270E8E7A8 -:103B700088CF0020FC06FFBD0B498A68002A11D0BF -:103B800000280FD1EFF3108072B60B684FF0E022DF -:103B9000C2F800314B68C2F8043100228A60002864 -:103BA00000D162B67047000088CF00202DE9F041B7 -:103BB000064608680C46411C4FF0A0474FF001052F -:103BC00006D005FA00F1C7F80815206809F098FF3B -:103BD0006068411C02D0002109F080FF3168A069B3 -:103BE000C1F82405607D227D31681043C1F86C0561 -:103BF000D4E900123068C0F81425C0F80C15207DF7 -:103C0000012815D1A068411C02D0002109F066FFEF -:103C1000E068411C05D08540C7F80855E06809F008 -:103C20006FFFD4E902123068C0F80825C0F81015FB -:103C3000BDE8F0812DE9F041064608680C46411CBC -:103C40004FF0A0474FF0010506D005FA00F1C7F884 -:103C50000815206809F05EFF6068411C02D0002151 -:103C600009F045FF3168A069C1F82405607D217D18 -:103C700032680843C2F86C05D4E900123068C0F815 -:103C80000C15C0F81425207D012815D1A068411C11 -:103C900002D0002109F02BFFE068411C05D08540CF -:103CA000C7F80855E06809F035FFD4E9021230681A -:103CB000C0F80825C0F81015BDE8F0812DE9FC47D3 -:103CC0001D46070090460E460AD036B100240194E6 -:103CD00038780DF10409692804D00720BDE8FC8775 -:103CE0000E20FBE70120134601904A4638460CF0AF -:103CF00037F90028F2D12B464A463146384600941F -:103D000006F0D8FF0028E9D12B68EBB30025D8F8DE -:103D100000002C4624281FD00CDC212815D004DC00 -:103D200001281BD020281DD10DE0222810D02328E7 -:103D300018D10FE0402813D041282DD0A0282DD035 -:103D4000A1280FD12CE0184D00E0184D9C1C09E073 -:103D5000174DFBE7174DF9E7174DF7E7174D00E053 -:103D6000174D1C462038032806D84A4631463846A7 -:103D70000CF02EF90028B1D123464A463146384688 -:103D8000009508F05DFE00E001E00028A6D1019852 -:103D9000B04207D00920A1E70A4DE2E70A4DE0E76B -:103DA0000A4DDEE7002099E7A5490200F1750200FF -:103DB0005D8A02001F730200319E0200DD3D020099 -:103DC00065490200E1480200C7870200B987020086 -:103DD00013460A46014669200AF084BF18B112B1A1 -:103DE0000BB10CF0F5B80E20704738B568B162B170 -:103DF0005BB11C466B460CF0EBF8002804D19DF833 -:103E0000001001F00101217038BD0E2038BD08B549 -:103E100051B14BB140B1007800F001008DF80000C5 -:103E200068460CF0F9F808BD0E2008BD2DE9F843EE -:103E300016465FEA00082BD056B34BB3164F1C460C -:103E40000D46009708F01AFE002822D1631C324666 -:103E500029464046009708F011FE002819D1A31CFE -:103E60003246294640460CF0B3F8002811D1E31C35 -:103E70003246294640460CF0ABF8002809D101B083 -:103E8000231D324629464046BDE8F0430CF0A0B859 -:103E90000E20BDE8F883000069A502002DE9F84373 -:103EA0001D4690460E002AD04DB340B3154F044630 -:103EB000009708F03DFE002822D12B4642463146AD -:103EC000601C009708F034FE002819D12B464246AA -:103ED0003146A01C0CF0A0F8002811D12B46424618 -:103EE0003146E01C0CF098F8002809D101B02B46AF -:103EF00042463146201DBDE8F0430CF08DB80E203F -:103F0000BDE8F883A7A50200F8B5144606000D46E3 -:103F10001ED0ECB100200090631C6A4630460CF0C5 -:103F200057F8002813D123466A46294630460CF03C -:103F30004FF800280BD1631D6A46294630460CF025 -:103F400047F8002803D10099A94200D00920F8BD04 -:103F50000E20F8BD17B581B0144669B164B10020D8 -:103F600000906B4601A822680CF011F8002801D1DE -:103F70000099216004B010BD0E20FBE728B111B1FB -:103F80000078602803D0072070470E207047012971 -:103F900001D0092070470020704713460A460146A9 -:103FA00060200AF09FBE30B41AB313B308B304887C -:103FB000332C7DD020DC332C7BD2DFE804F0FE569E -:103FC00053FEFEFEFEFEFEFEFEFEFEFEFEFE7D77C4 -:103FD000595F6268836B86656E7471F8805CFB8CD8 -:103FE000898F92FEFEFEFEFEFEFEFEFEFEFEA5B4E4 -:103FF00095000E2030BC7047532C7DD018DC3A2C35 -:104000007BD008DCA4F13404062C52D2DFE804F0A3 -:104010009172828E887F502C70D004DC3B2C7CD037 -:104020003C2C46D190E0512C6AD0522C41D19DE0DD -:10403000722C66D00EDC572C7DD006DC542C7BD045 -:10404000552C7AD0562C34D184E0702C76D0712C3B -:104050002FD197E0733C052C2BD2DFE804F0999C1C -:104060009FA2A50030BC00F02BB930BC00F074B9A1 -:1040700030BC01F0B5BA30BC01F0EABA30BC01F096 -:10408000BDBE30BC01F04ABE30BC01F0FBB930BC53 -:1040900001F00CBD30BC01F0C1B930BC01F02CBB4B -:1040A00030BC01F0C5BD30BC01F040BF30BC01E008 -:1040B0001DE082E001F036BC30BC01F063BB30BCD7 -:1040C00001F0E2BE30BC01F078BC30BC01F0A8BC0D -:1040D00030BC01F02FBD30BC01F072BD30BC01F02E -:1040E000E9BB30BC01F0AEBB30BC03F05FBB30BC01 -:1040F00003F09ABC30BC05E029E022E030E00CE09F -:1041000031E042E003F0C4BB30BC03F0C1BD30BCC1 -:1041100003F04EBD30BC03F02BBE30BC03F00CBF2F -:1041200030BC03F09FBF30BC03F092BE30BC03F044 -:104130001BBC30BC03E01FE00FE01AE01FE003F0FF -:10414000ADBA30BC03F0E2BC30BC03F046BF30BCBB -:1041500004F03CBD30BC04F0B9BE30BC04F04CBE31 -:1041600030BC04F0F3BE30BC04F0C6BD30BC04F07B -:104170006DBE30BC04F0EABC30BC04F066BD30BC9F -:1041800006F024B830BC05F0DDBF30BC05F09ABFA6 -:1041900030BC05F0B8BE30BC05F048BF30BC05F0FF -:1041A00077BE30BC05F0E1BE30BC06F059B830BC7B -:1041B00001F0B6B830BC01F06FBD062000211960D7 -:1041C00018E700002DE9F04701883B4E40F2F31953 -:1041D0004FF6FF7510291BD011293ED0122954D05B -:1041E000502946D1C188F289841D914241D161890B -:1041F00002293ED18688304609F0F0F8050038D013 -:1042000004F10C0006F0E4F9A8B3294630464EE06C -:10421000C17B8788044601292BD1A846284609F08E -:10422000DDF8050017D02F80002028722348434670 -:104230004A460168C5F80A104068C5F80E0004F146 -:10424000100105F10A0009F01DF96872F0890028D3 -:104250000FD129462AE0042013E0808809F0BEF837 -:10426000040006D06068FFF753FC08B10AF032FD85 -:104270002580BDE8F087FFE76868FFF749FC002864 -:10428000F7D0BDE8F0470AF025BD878806463846D6 -:1042900009F0A4F80400ECD02B464A4606F10801C8 -:1042A00004F10A0009F0EEF8607221463846BDE8D4 -:1042B000F04708F049B80000F8CC002080B3002097 -:1042C0002DE9FE431D461646040007D036B12DB138 -:1042D0002088022804D00720BDE8FE830E20FBE7DB -:1042E00000270197D5F8008002200DF10409ADF8F0 -:1042F00008004B464246314602A80BF017FE002844 -:10430000EAD14B4642463146201D0BF00FFE0028F5 -:10431000E2D14B464246314604F108000BF07CFEE8 -:104320000028D9D14B464246314604F110000BF02B -:10433000FDFD0028D0D100974B4642463146E0684B -:1043400006F0E6FC0028C7D1A08806F0A9FD0028E9 -:10435000C2D101992960BFE72DE9FC411D461646EF -:10436000040007D036B12DB12088012804D00720E1 -:10437000BDE8FC810E20FBE7002000902F680120A3 -:10438000E846ADF8040043463A46314601A80BF032 -:10439000CDFD0028ECD143463A463146201D0BF0B6 -:1043A000C5FD0028E4D143463A46314604F10800F1 -:1043B0000BF032FE0028DBD100992960D8E77CB5EC -:1043C0000C4640B12CB100230193057801A96D2D55 -:1043D00003D007207CBD0E207CBD0125CDE9003532 -:1043E00013460A46214606F065FC0028F4D10198E0 -:1043F000A04201D009207CBD00207CBD2DE9FF41F9 -:1044000082B0984614460F0028D03CB3002000909C -:1044100025686D206E468DF8040033462A4601A8B3 -:104420000BF0FAFD002816D133462A46394602A879 -:104430000BF0ADFD00280ED1029848B95FEA0800E4 -:1044400039462A46334609D000F05AF8002802D1EE -:1044500000982060002006B0BDE8F0810E20FAE749 -:104460001CB50C4640B12CB100210191037801A983 -:104470006C2B03D007201CBD0E201CBD0123019313 -:10448000074B009313460A46214606F013FC00280A -:10449000F3D10198A04201D009201CBD00201CBD11 -:1044A000B144020013460A4601466C200AF01ABCC9 -:1044B0002DE9FC411646070020D0FEB1F3B11C46A1 -:1044C0000D4601AB0BF084FD002815D106200090AD -:1044D000631C3246294638460BF0ABFD00280BD151 -:1044E0009DF80420217862F3000121709DF80420DA -:1044F000520862F347012170BDE8FC810E20FBE702 -:104500002DE9FC411D4617460E0013D095B188B128 -:10451000044600788DF8040001A80BF07DFD00280A -:1045200006D13B4632460621601C00950BF097FDF4 -:10453000BDE8FC810E20FBE738B5D0B1CAB1C3B1EC -:104540001C466B460BF044FD002811D19DF800205D -:10455000217862F3000121709DF80020520862F377 -:10456000410121709DF80020920862F382012170C0 -:1045700038BD0E2038BD2DE9FC410C46DDE908862A -:10458000050023D02CB100200190287801AF7228BB -:1045900002D00720BDE8FC8101200190B3B1AEB18B -:1045A000009313463A46284608F0C9FF0028F1D187 -:1045B00043463A4621462846009608F0C0FF0028A8 -:1045C000E8D10198A04203D00920E3E70E20E1E7FB -:1045D0000020DFE713460A46014672200AF082BB3C -:1045E000F8B51646070037D0AEB3A3B31C460D4648 -:1045F0000BF0EEFC00282DD118480090231D324608 -:104600002946384606F056FB002823D104F108035A -:104610003246294638460BF0DBFC00281AD104F15B -:104620000A033246294638460BF071FC002811D1A6 -:1046300004F10C033246294638460BF068FC00288A -:1046400008D10748009004F10E0332462946384647 -:1046500008F000FAF8BDFFE70E20FBE7B1440200C6 -:10466000394502002DE9FC411F460C46050026D0C5 -:104670002CB100200190287801AE732802D00720C9 -:10468000BDE8FC8101200190CAB11068B8B1406852 -:10469000A8B10D48134600903246284606F00AFBA2 -:1046A0000028EDD13B463246214628460BF090FCCF -:1046B0000028E5D10198A04203D00920E0E70E20B0 -:1046C000DEE70020DCE70000E145020013460A4671 -:1046D000014673200AF006BB13460A4601467420C1 -:1046E0000AF000BB7CB50C46D0B12CB1002301937D -:1046F000057801A9792D01D007207CBD0125019500 -:1047000072B1156865B1009313460A46214606F05A -:10471000D1FA0028F1D10198A04203D009207CBD34 -:104720000E207CBD00207CBD2DE9FF4184B0984661 -:1047300014460F0019D0C4B10020019025687920DB -:1047400001AE8DF8080033462A4602A80BF064FC3F -:1047500000280BD133462A46394604A80BF017FC33 -:10476000002803D1049870B903E00E2008B0BDE81A -:10477000F0810748009033462A463946404606F005 -:10478000C7FA0028F2D1019820600020EEE700006F -:104790002DFF020038B50C46B8B12CB100210091B4 -:1047A00003786946782B01D0072038BD0123009398 -:1047B0005AB113460A4621460BF0A9FB0028F4D152 -:1047C0000098A04203D0092038BD0E2038BD00203B -:1047D00038BD13460A46014678200AF083BA2DE90F -:1047E000FE431F46DDF828800C46050022D0F4B1B8 -:1047F00000200290287802AE802818D10120029073 -:10480000C2B1BFB11346324628460BF080FB0028E8 -:104810000ED13B463246214628460BF0D9FB0028F4 -:1048200006D1387840B1012808D0022808D00720E6 -:10483000BDE8FE830E20FBE7002202E0062200E036 -:10484000102200920192434632462146284606F045 -:1048500027F90028ECD10298A04201D00920E7E70F -:104860000020E5E713460A46014680200AF03ABADE -:104870002DE9FC411C460D46060025D02DB1002037 -:104880000190307801AF7E2802D00720BDE8FC817E -:1048900001200190C2B1BCB12068A8B113463A46CC -:1048A00030460BF034FB0028F0D109480090234635 -:1048B0003A462946304606F0FDF90028E6D101982F -:1048C000A84203D00920E1E70E20DFE70020DDE762 -:1048D000B16F020013460A4601467E200AF002BA72 -:1048E0002DE9FE4316465FEA000836D0A6B39BB317 -:1048F0005F891B4800901C460D46404608F0AAF808 -:10490000002827D102AB3246294640460BF060FB17 -:1049100000281FD19DF8080004F1080300F00300EF -:1049200060703246294640460BF0F1FA002811D15A -:1049300004F10A033246294640460BF0E8FA002803 -:1049400008D12089231DCDE9007032462946404612 -:1049500006F0A6F8BDE8FE83FFE70E20FAE70000A8 -:10496000A94B02002DE9F0411646070017D0B6B159 -:10497000ABB11C460D460BF02BFB002810D1631C7D -:104980003246294638460BF023FB002808D1A31CE9 -:10499000324629463846BDE8F0410BF019BB0E20DF -:1049A000BDE8F0812DE9F041164607000FD076B141 -:1049B0006BB11C460D460BF00BFB002808D1A31C65 -:1049C000324629463846BDE8F0410BF0A0BA0E2029 -:1049D000BDE8F0812DE9FC411C460D46060025D0BE -:1049E0002DB100200190307801AF752802D007204A -:1049F000BDE8FC8101200190C2B1BCB12068A8B122 -:104A000013463A4630460BF082FA0028F0D10948A6 -:104A1000009023463A462946304606F04BF90028D6 -:104A2000E6D10198A84203D00920E1E70E20DFE794 -:104A30000020DDE7454A020013460A46014675207C -:104A40000AF050B92DE9F041164607001FD0F6B123 -:104A5000EBB11C460D460BF05AFA002818D1A31CE6 -:104A60003246294638460BF052FA002810D1231D51 -:104A70003246294638460BF04AFA002808D1A31DD1 -:104A8000324629463846BDE8F0410BF040BA0E20C8 -:104A9000BDE8F0812DE9F0411D4617460E001ED0FD -:104AA000EDB1E0B104460BF041FA002818D12B46D5 -:104AB0003A463146A01C0BF039FA002810D12B469B -:104AC0003A463146201D0BF031FA002808D12B461A -:104AD0003A463146A01DBDE8F0410BF027BA0E2042 -:104AE000BDE8F0812DE9FC4198460C46050021D037 -:104AF0002CB100260196287801AF872802D0072024 -:104B0000BDE8FC8101200190A2B113463A46284637 -:104B10000BF0FDF90028F3D143463A4621462846DA -:104B2000009606F0C7F80028EAD10198A04203D009 -:104B30000920E5E70E20E3E70020E1E72DE9FF414A -:104B400084B01C46150088461AD0CCB100200190D4 -:104B50002668872001AF8DF808003B46324629467B -:104B600002A80BF059FA00280BD13B4632462946E1 -:104B700004A80BF00CFA002803D1049870B903E0E4 -:104B80000E2008B0BDE8F081064800903B46324652 -:104B90002946404606F0BCF80028F2D10198206072 -:104BA0000020EEE7F54B020038B5A0B19AB193B101 -:104BB0001C466B460BF00CFA00280BD19DF8002028 -:104BC000217862F3030121709DF80020120962F33D -:104BD0000711217038BD0E2038BD08B541B13BB179 -:104BE00030B100788DF8000068460BF015FA08BD6A -:104BF0000E2008BDF8B51D4617460E0012D08DB127 -:104C000080B1044608480090204607F055FF002870 -:104C100009D101B02B463A463146601CBDE8F04050 -:104C20000BF0FAB90E20F8BDDB4B020013460A4622 -:104C300001468D200AF056B82DE9FC471D46DDE9F6 -:104C40000A490E46070040D036B10020019038785E -:104C50000DF104088C2802D00720BDE8FC87012054 -:104C600001908AB3106878B375B3286860B35CB3F9 -:104C7000206848B31748134600904246384606F06D -:104C800019F80028E9D1144800902B4642463146D5 -:104C9000384606F00FF80028DFD110480090234670 -:104CA00042463146384606F005F80028D5D14B4635 -:104CB0004246314638460BF08BF90028CDD1019899 -:104CC000B04204D00920C8E7FFE70E20C5E7002066 -:104CD000C3E70000B14402000D6B0200454A020028 -:104CE00013460A4601468C2009F0FCBF2DE9F0412D -:104CF0001D4617460E0016D0ADB1A0B104460BF00C -:104D000015F9002810D12B463A463146A01C0BF06D -:104D10000DF9002808D12B463A463146201DBDE842 -:104D2000F0410BF003B90E20BDE8F0812DE9F04110 -:104D3000164607001FD0F6B1EBB11C460D460BF02E -:104D4000E6F8002818D1A31C3246294638460BF055 -:104D5000DEF8002810D1231D3246294638460BF0D4 -:104D6000D6F8002808D1A31D324629463846BDE8AA -:104D7000F0410BF0CCB80E20BDE8F0812DE9F041F8 -:104D80001D4617460E001ED0EDB1E0B104460BF0F3 -:104D9000CDF8002818D12B463A463146A01C0BF01E -:104DA000C5F8002810D12B463A463146201D0BF09D -:104DB000BDF8002808D12B463A463146A01DBDE873 -:104DC000F0410BF0B3B80E20BDE8F0812DE9FC47AF -:104DD0009846DDF828900C46050009D02CB1002635 -:104DE0000196287801AF902804D00720BDE8FC8701 -:104DF0000E20FBE70120134601903A4628460BF0AF -:104E000086F80028F2D10D48009043463A462146E4 -:104E1000284605F04FFF0028E8D14B463A46214688 -:104E20002846009605F046FF0028DFD10198A042F1 -:104E300001D00920DAE70020D8E700002D4D02005C -:104E40002DE9FF4184B0984614460F0019D0C4B133 -:104E5000002001902568902001AE8DF808003346AF -:104E60002A4602A80BF0D8F800280BD133462A4670 -:104E7000394604A80BF08BF8002803D1049870B9C8 -:104E800003E00E2008B0BDE8F081074800903346EB -:104E90002A463946404605F03BFF0028F2D10198EA -:104EA00020600020EEE70000ED4C02002DE9FF5FDE -:104EB0001D460E9F144688465FEA000942D0B8F1AD -:104EC000000F07D0002602A8CDE9010699F80000DE -:104ED0006F2803D0072004B0BDE8F09F01200290A6 -:104EE0007CB3206868B3006858B355B3286840B3F2 -:104EF000006830B33B4641464846019A0BF068F8DB -:104F00000028E8D103AB41464846019A0BF060F80F -:104F10000028E0D19DF80C00012815D0266003ABD5 -:104F200041464846019A0BF053F80028D3D19DF82A -:104F30000C0001281ED02E60029941452DD0092079 -:104F4000C9E7FFE70E20C6E7D4F800A00024DFF889 -:104F500050B00BE00AEB8403CDF800B04146484660 -:104F6000019A05F0A7FE0028B5D1641C3878A0424C -:104F7000F0D8D4E72D6800240A4E0AE005EB84033C -:104F8000009641464846019A05F094FE0028A2D1B9 -:104F9000641C3878A042F1D8CEE700209BE70000DF -:104FA000955F02001560020013460A4601466F2015 -:104FB00009F098BE2DE9FC4190460C46050022D030 -:104FC0002CB100260196287801AF7D2802D0072059 -:104FD000BDE8FC8101200190ABB10D4800903A463C -:104FE000284605F067FE0028F2D143463A4621469E -:104FF0002846009605F05EFE0028E9D10198A042FF -:1050000003D00920E4E70E20E2E70020E0E70000FB -:105010000FFF02002DE9FF4383B01E000E9C1546D2 -:1050200089461BD0D4B100200190D4F800807D20A7 -:1050300001AF8DF808003B464246314602A80AF00F -:10504000EBFF00280BD13B464246314603A80AF04D -:105050009EFF002803D10398C0B903E00E2007B0DB -:10506000BDE8F0830B4800903B4642463146284657 -:1050700005F04EFE0028F2D145B10097298843463D -:10508000324648460AF0EBFF0028E8D1019820603C -:105090000020E4E72DFF02002DE9FC419846089E20 -:1050A0000C46050027D02CB100200190287801AFD4 -:1050B0007C2802D00720BDE8FC8101200190D2B1FC -:1050C000B8F1000F17D0B6B10D48134600903A461C -:1050D000284605F0EFFD0028EDD143463A4621462B -:1050E0002846009608F0FBF90028E4D10198A04278 -:1050F00003D00920DFE70E20DDE70020DBE700001A -:10510000A94B020013460A4601467C2009F0EABD7D -:10511000F8B51F460C46050020D02CB100200090A9 -:1051200028786E46762801D00720F8BD012000902F -:10513000A2B19FB11346324628460AF0E8FE002885 -:10514000F3D13B463246214628460AF041FF00286B -:10515000EBD10098A04203D00920F8BD0E20F8BD85 -:105160000020F8BD13460A460146762009F0BABD74 -:105170002DE9FC411646070020D0FEB1F3B1102006 -:1051800000901C460D4638460AF053FF002813D104 -:1051900001AB3246294638460AF01AFF00280BD1E7 -:1051A0009DF80410227C4B0861F3000263F3410276 -:1051B000890861F387022274BDE8FC810E20FBE7B9 -:1051C0002DE9FC411D4617460E001DD0E5B1D8B1B2 -:1051D00013460A460446102100950AF040FF0028B5 -:1051E00010D1207C2B46C0F34002014662F35F01E0 -:1051F00020F0030001438DF804103A46314601A81F -:105200000AF00AFFBDE8FC810E20FBE7F8B5164660 -:10521000070014D09EB193B10A4800901C460D4679 -:10522000384607F017FC002808D10748009004F121 -:10523000120332462946384607F00CFCF8BD0E2012 -:10524000F8BD00007151020071630200F8B51D46FF -:1052500017460E0013D095B188B104460948009056 -:10526000204607F029FC002808D1074800902B466B -:105270003A46314604F1120007F01EFCF8BD0E203C -:10528000F8BD0000C15102009F6302002DE9FC41FE -:105290001D46089C0E46070033D036B10020019011 -:1052A00038780DF10408852802D00720BDE8FC817C -:1052B000012001902AB324B31DB3206808B32868E5 -:1052C000F8B11346424638460AF021FE0028EDD1D7 -:1052D0000E4800902B4642463146384605F0EAFC1F -:1052E0000028E3D10A48009023464246314638461A -:1052F00005F0E0FC0028D9D10198B04203D0092084 -:10530000D4E70E20D2E70020D0E70000716302004E -:105310007151020013460A460146852009F0E2BC9D -:105320002DE9FE431D461646040007D036B12DB1C7 -:1053300020881D2804D00720BDE8FE830E20FBE74F -:10534000002001902F681D200DF10408ADF8080021 -:1053500043463A46314602A80AF0E8FD0028EBD160 -:1053600043463A463146201D0AF0E0FD0028E3D1CD -:105370000648009043463A46314604F1080007F0DB -:1053800091FB0028D8D101992960D5E791530200FB -:105390002DE9FC471D4691460E003AD0C5B3B8B37F -:1053A0000446C07B1C4FC0F34102014662F35F011B -:1053B0008DF804104FEAD0084A463146204600973F -:1053C00007F07AFB002821D12B464A463146E01DE2 -:1053D000009707F071FB002818D12B464A4631464A -:1053E00004F10E000AF018FE00280FD12B464A46A1 -:1053F000314601A80AF010FE002807D14B4632467C -:10540000414604F11000009508F0B1F8BDE8FC87B2 -:10541000FFE70E20FAE70000014502002DE9FC41FC -:105420001D461646040007D036B12DB12088172836 -:1054300004D00720BDE8FC810E20FBE7002000908F -:105440002F681720E846ADF8040043463A46314637 -:1054500001A80AF06BFD0028ECD143463A463146DC -:10546000201D0AF063FD0028E4D143463A46314648 -:1054700004F108000AF0D0FD0028DBD10099296072 -:10548000D8E700002DE9FF411D461646040008D06C -:105490003EB135B12088192805D0072004B0BDE8F9 -:1054A000F0810E20FAE7002001902F6819200DF1FD -:1054B0000408ADF8080043463A46314602A80AF00F -:1054C00035FD0028EAD143463A463146201D0AF010 -:1054D0002DFD0028E2D11648009043463A46314659 -:1054E00004F1080007F0DEFA0028D7D1A08803A94C -:1054F00005F06CFC18B1002001992960CEE70D4839 -:10550000009003980C49C0EB001000EB800001EB09 -:10551000800043463A463146001D07F0C3FA002892 -:10552000BCD1A08805F034FC0028E5D0B6E7000027 -:105530003D550200356E020094CF00202DE9FC415C -:105540001D4690460E0045D0F5B3E8B341780446B9 -:10555000C1F38002084662F39F00C1F3C00140EA34 -:10556000C1008DF804004246314620460AF054FD41 -:1055700000282DD12B464246314601A80AF04CFDA9 -:10558000002825D1144F2B4642463146A01C0097D7 -:1055900007F092FA00281BD12B4642463146E01C08 -:1055A000009707F089FA002812D10C4F2B4642468B -:1055B0003146201D009707F07FFA002808D12B46BE -:1055C00042463146601D00E004E0009707F074FA9F -:1055D000BDE8FC810E20FBE7716E0200E76C020063 -:1055E0002DE9FE431D461646040007D036B12DB105 -:1055F0002088122804D00720BDE8FE830E20FBE798 -:10560000002001902F6812200DF10408ADF8080069 -:1056100043463A46314602A80AF088FC0028EBD1FE -:1056200043463A463146201D0AF080FC0028E3D16B -:105630000648009043463A46314604F1080007F018 -:1056400031FA0028D8D101992960D5E7DD5602004A -:105650002DE9FE431D461646040007D036B12DB194 -:1056600020881F2804D00720BDE8FE830E20FBE71A -:10567000002001902F681F200DF10408ADF80800EC -:1056800043463A46314602A80AF050FC0028EBD1C6 -:1056900043463A463146201D0AF048FC0028E3D133 -:1056A0000648009043463A46314604F1080007F0A8 -:1056B000F9F90028D8D101992960D5E7C15602002F -:1056C00038B531B12BB120B1034C009407F0F4F997 -:1056D00038BD0E2038BD0000954A020038B531B102 -:1056E0002BB120B1034C009407F0E6F938BD0E2031 -:1056F00038BD0000954A02002DE9FE431D461646BE -:10570000040007D036B12DB120881A2804D0072014 -:10571000BDE8FE830E20FBE7002001902F681A20D1 -:105720000DF10408ADF8080043463A46314602A898 -:105730000AF0FCFB0028EBD143463A463146201DD7 -:105740000AF0F4FB0028E3D10648009043463A46AD -:10575000314604F1080007F0A5F90028D8D10199D5 -:105760002960D5E76957020038B531B12BB120B1B6 -:10577000034C009407F0A0F938BD0E2038BD00009E -:10578000F54B02002DE9FE431D461646040007D0E6 -:1057900036B12DB12088102804D00720BDE8FE8343 -:1057A0000E20FBE7002001902F6810200DF1040867 -:1057B000ADF8080043463A46314602A80AF0B6FB67 -:1057C0000028EBD143463A463146201D0AF0AEFB95 -:1057D0000028E3D10648009043463A46314604F19A -:1057E000080007F05FF90028D8D101992960D5E7B2 -:1057F000F5570200F8B51D4617460E001BD0D5B16F -:10580000C8B104460D480090204607F055F900281D -:1058100010D12B463A463146E01D0AF0FDFB002828 -:1058200008D1074800902B463A46314604F108005B -:1058300007F042F9F8BD0E20F8BD00000145020056 -:10584000954A02002DE9FE431D461646040007D086 -:1058500036B12DB12088242804D00720BDE8FE836E -:105860000E20FBE7002001902F6824200DF1040892 -:10587000ADF8080043463A46314602A80AF056FB06 -:105880000028EBD143463A463146201D0AF04EFB34 -:105890000028E3D10648009043463A46314604F1D9 -:1058A000080007F0FFF80028D8D101992960D5E752 -:1058B0007D4D02002DE9FE431D461646040007D02B -:1058C00036B12DB12088232804D00720BDE8FE83FF -:1058D0000E20FBE7002001902F6823200DF1040823 -:1058E000ADF8080043463A46314602A80AF01EFBCE -:1058F0000028EBD143463A463146201D0AF016FBFC -:105900000028E3D10648009043463A46314604F168 -:10591000080007F0C7F80028D8D101992960D5E719 -:105920007D4D02002DE9FF411D461646040008D0BA -:105930003EB135B12088112805D0072004B0BDE85C -:10594000F0810E20FAE7002001902F6811200DF160 -:105950000408ADF8080043463A46314602A80AF06A -:10596000E5FA0028EAD143463A463146201D0AF0BE -:10597000DDFA0028E2D10C48009043463A46314611 -:1059800004F1080007F08EF80028D7D1A08803A9F9 -:1059900005F01CFA20B9A08805F0FAF90028CDD14D -:1059A000019900202960C9E7AD59020019B113B16E -:1059B00008B10AF031BB0E2070472DE9FC411D46AD -:1059C0001646040007D036B12DB12088162804D021 -:1059D0000720BDE8FC810E20FBE7002000902F6827 -:1059E0001620E846ADF8040043463A46314601A881 -:1059F0000AF09CFA0028ECD143463A463146201D75 -:105A00000AF094FA0028E4D143463A46314604F1BC -:105A100008000AF001FB0028DBD100992960D8E7D3 -:105A20002DE9FF411D461646040008D03EB135B1B0 -:105A30002088182805D0072004B0BDE8F0810E208A -:105A4000FAE7002001902F6818200DF10408ADF846 -:105A5000080043463A46314602A80AF067FA002891 -:105A6000EAD1207B434600F001008DF80C003A4655 -:105A70003146201D0AF05AFA0028DDD10A4800906C -:105A800043463A463146A06805F042F90028D3D192 -:105A900043463A46314603A80AF0BEFA0028CBD165 -:105AA00001992960C8E70000576302002DE9FF4112 -:105AB0001D46904604000AD0B8F1000F07D035B15A -:105AC0002088152805D0072004B0BDE8F0810E20FD -:105AD000FAE7002001902F68152001AEADF808000C -:105AE00033463A46414602A80AF020FA0028EBD194 -:105AF000A07B334600F001008DF80C003A46414689 -:105B0000201D0AF013FA0028DED13B46424606214A -:105B100004F1080000960AF0A2FA0028D4D1334616 -:105B20003A46414603A80AF077FA0028CCD10199F9 -:105B30002960C9E72DE9FC411D461646040007D03F -:105B400036B12DB12088222804D00720BDE8FC8181 -:105B50000E20FBE7002000902F682220E846ADF8D9 -:105B6000040043463A46314601A80AF0DFF900280E -:105B7000ECD143463A463146201D0AF0D7F90028B9 -:105B8000E4D143463A46314604F108000AF044FAAB -:105B90000028DBD143463A46314604F109000AF0B9 -:105BA0003BFA0028D2D143463A46314604F10A0076 -:105BB0000AF032FA0028C9D100992960C6E700002E -:105BC0002DE9FE431D461646040007D036B12DB11F -:105BD0002088212804D00720BDE8FE830E20FBE7A3 -:105BE000002001902F6821200DF10408ADF8080075 -:105BF00043463A46314602A80AF098F90028EBD10C -:105C000043463A463146201D0AF090F90028E3D178 -:105C10000648009043463A46314604F1080006F033 -:105C200041FF0028D8D101992960D5E79966020083 -:105C30002DE9FC411D461646040007D036B12DB1B2 -:105C400020881C2804D00720BDE8FC810E20FBE73B -:105C5000002000902F681C20E846ADF80400434661 -:105C60003A46314601A80AF061F90028ECD14346D2 -:105C70003A463146201D0AF059F90028E4D143463E -:105C80003A46314604F108000AF0C6F90028DBD193 -:105C900000992960D8E700002DE9FE431D4616460D -:105CA000040007D036B12DB12088202804D0072069 -:105CB000BDE8FE830E20FBE7002001902F68202026 -:105CC0000DF10408ADF8080043463A46314602A8F3 -:105CD0000AF02CF90028EBD143463A463146201D04 -:105CE0000AF024F90028E3D10B48009043463A46D5 -:105CF000314604F1090006F0D5FE0028D8D143460C -:105D00003A46314604F108000AF086F90028CFD15E -:105D100001992960CCE70000014502002DE9FE430E -:105D20001D461646040007D036B12DB12088142830 -:105D300004D00720BDE8FE830E20FBE70020019081 -:105D40002F6814200DF10408ADF8080043463A46C8 -:105D5000314602A80AF0EAF80028EBD143463A4659 -:105D60003146201D0AF0E2F80028E3D106480090F1 -:105D700043463A46314604F1080006F093FE0028F7 -:105D8000D8D101992960D5E78D5D02002DE9FC414C -:105D90001D4617460E002AD04DB340B30446807C02 -:105DA000C0F34002014662F35F01C0F3800041EAA4 -:105DB00080008DF804000F4800903A463146204696 -:105DC00006F07AFE002810D10B4800902B463A4688 -:105DD000314604F1080006F06FFE002805D12B467D -:105DE0003A46314601A80AF017F9BDE8FC810E20B9 -:105DF000FBE70000014502009F6302002DE9FE431E -:105E00001D461646040007D036B12DB12088132850 -:105E100004D00720BDE8FE830E20FBE700200190A0 -:105E20002F6813200DF10408ADF8080043463A46E8 -:105E3000314602A80AF07AF80028EBD143463A46E8 -:105E40003146201D0AF072F80028E3D10648009080 -:105E500043463A46314604F1080006F023FE002886 -:105E6000D8D101992960D5E76D5E020038B531B10E -:105E70002BB120B1034C009406F01EFE38BD0E205D -:105E800038BD00006D7002002DE9FE431D46164628 -:105E9000040007D036B12DB120881E2804D0072079 -:105EA000BDE8FE830E20FBE7002001902F681E2036 -:105EB0000DF10408ADF8080043463A46314602A801 -:105EC0000AF034F80028EBD143463A463146201D0B -:105ED0000AF02CF80028E3D10648009043463A46E1 -:105EE000314604F1080006F0DDFD0028D8D1019903 -:105EF0002960D5E7F95E020038B5A9B1A3B198B120 -:105F00000078C0F34005044665F35F04C0F38005E4 -:105F100044EA8504C0F3C00044EAC0008DF80000E4 -:105F200068460AF079F838BD0E2038BD2DE9FC41ED -:105F30001D461646040007D036B12DB120881B2817 -:105F400004D00720BDE8FC810E20FBE70020009074 -:105F50002F681B20E846ADF8040043463A46314618 -:105F600001A809F0E3FF0028ECD143463A46314648 -:105F7000201D09F0DBFF0028E4D143463A463146B4 -:105F800004F108000AF048F80028DBD100992960E4 -:105F9000D8E70000F8B51646070014D09EB193B1BB -:105FA0000A4800901C460D46384606F053FD00286E -:105FB00008D10748009004F11003324629463846BC -:105FC00006F048FDF8BD0E20F8BD00001560020087 -:105FD000B1440200F8B51D4617460E0013D095B126 -:105FE00088B1044609480090204606F065FD002867 -:105FF00008D1074800902B463A46314604F110007C -:1060000006F05AFDF8BD0E20F8BD00002B6002001E -:106010000145020038B530B12AB123B110240094F3 -:106020000AF007F838BD0E2038BD08B541B13BB1C4 -:1060300030B1009313460A4610210AF010F808BD4B -:106040000E2008BDF8B51F460C46050020D02CB127 -:106050000020009028786E46822801D00720F8BDE5 -:1060600001200090A2B19FB113463246284609F0A4 -:106070004EFF0028F3D13B4632462146284609F020 -:10608000A7FF0028EBD10098A04203D00920F8BD5B -:106090000E20F8BD0020F8BD13460A4601468220B6 -:1060A00008F020BE2DE9FC411F460C46050023D018 -:1060B0002CB100200190287801AE812802D0072061 -:1060C000BDE8FC8101200190B2B1AFB11346324668 -:1060D000284609F01CFF0028F2D1094800903B46F1 -:1060E00032462146284604F0E5FD0028E8D1019813 -:1060F000A04203D00920E3E70E20E1E70020DFE71C -:106100001161020013460A460146812008F0EABDEB -:1061100038B530B12AB123B12024009409F089FFA9 -:1061200038BD0E2038BD00002DE9FC479846DDF84B -:1061300028900C46050031D02CB100260196287815 -:1061400001AF832802D00720BDE8FC870120019021 -:1061500022B35FEA090021D0B8F1000F1ED0134628 -:106160003A46284609F0D3FE0028EDD10D480090AC -:1061700043463A462146284604F09CFD0028E3D1D8 -:106180004B463A4621462846009604F093FD0028E7 -:10619000DAD10198A04203D00920D5E70E20D3E739 -:1061A0000020D1E7416302002DE9FF4184B01C4685 -:1061B000150088461AD0CCB10020019026688320B3 -:1061C00001AF8DF808003B463246294602A809F087 -:1061D00023FF00280BD13B463246294604A809F08C -:1061E000D6FE002803D1049870B903E00E2008B051 -:1061F000BDE8F081064800903B46324629464046BD -:1062000004F086FD0028F2D1019820600020EEE71E -:10621000F56202002DE9FC479846DDF828900C460F -:10622000050031D02CB100200190287801AE8428DF -:1062300002D00720BDE8FC870120019022B3B8F10D -:10624000000F21D05FEA09001ED0134632462846CF -:1062500009F05DFE0028EDD10D4F43463246214640 -:106260002846009704F026FD0028E3D14B4632462D -:1062700021462846009704F01DFD0028DAD1019838 -:10628000A04203D00920D5E70E20D3E70020D1E7B4 -:10629000A162020013460A460146842008F022BD8E -:1062A0002DE9F84316465FEA00081ED0EEB1E3B1CF -:1062B0000F4800901C460D46404606F0CBFB0028D8 -:1062C00011D11027E31D324629464046009709F0B8 -:1062D000B0FE002807D104F1170332462946404694 -:1062E000009709F0A6FEBDE8F8830E20FBE700004A -:1062F000B1440200F8B51D4617460E001BD0D5B1BB -:10630000C8B104460D480090204606F0D5FB002891 -:1063100010D13B4632461021E01D009509F09FFE4A -:10632000002807D13B463246102104F117000095A2 -:1063300009F095FEF8BD0E20F8BD000001450200F1 -:1063400038B530B12AB123B14024009409F071FE70 -:1063500038BD0E2038BD08B541B13BB130B1009316 -:1063600013460A46402109F07AFE08BD0E2008BDFA -:10637000F8B51646070010D07EB173B11C460D4625 -:1063800009F0C5FD002807D108200090A31C324663 -:106390002946384609F04DFEF8BD0E20F8BDF8B587 -:1063A0001D4617460E000ED06DB160B1044609F0CF -:1063B000BDFD002806D13B4632460821A01C0095B1 -:1063C00009F04DFEF8BD0E20F8BD2DE9F04116464E -:1063D00007000FD076B16BB11C460D4609F097FD52 -:1063E000002808D1A31C324629463846BDE8F041B2 -:1063F00009F08DBD0E20BDE8F0812DE9F0411D466C -:1064000017460E000ED06DB160B1044609F08EFD46 -:10641000002808D12B463A463146A01CBDE8F04181 -:1064200009F084BD0E20BDE8F081F8B516460700DE -:1064300010D07EB173B11C460D4609F068FD0028EE -:1064400007D105200090A31C32462946384609F0A2 -:10645000F0FDF8BD0E20F8BDF8B51D4617460E003C -:106460000ED06DB160B1044609F060FD002806D180 -:106470003B4632460521A01C009509F0F0FDF8BD11 -:106480000E20F8BD38B558B152B14BB11C466B4621 -:1064900009F09EFD002802D19DF80010217038BD42 -:1064A0000E2038BD08B551B14BB140B1007800F0B5 -:1064B00001008DF80000684609F0AEFD08BD0E2011 -:1064C00008BD0000F8B51646070018D0BEB1B3B13C -:1064D0001C460D4609F01BFD00280FD1A31C3246B7 -:1064E0002946384609F013FD002807D105480090D9 -:1064F000231D32462946384604F0DCFBF8BD0E2049 -:10650000F8BD00000FFF0200F8B51D4617460E004B -:1065100017D0B5B1A8B1044609F008FD00280FD185 -:106520002B463A463146A01C09F000FD002807D151 -:10653000054800902B463A463146606804F0E8FB77 -:10654000F8BD0E20F8BD00002DFF02001CB538B1CB -:1065500032B12BB106240094019404F0A1FA1CBDC1 -:106560000E201CBD08B549B143B138B100931346A4 -:106570000A460068062104F0C5FA08BD0E2008BDD1 -:1065800038B568B162B15BB11C466B4609F020FDBD -:10659000002804D19DF8001001F00101217038BDE0 -:1065A0000E2038BD08B551B14BB140B1007800F0B4 -:1065B00001008DF80000684609F02EFD08BD0E2090 -:1065C00008BDF8B51646070013D096B18BB11C462E -:1065D0000D4609F09CFC00280AD16B46324629463C -:1065E000384609F0F5FC002802D19DF80010A17092 -:1065F000F8BD0E20F8BD00002DE9FC411C460D46FB -:10660000060025D02DB100200190307801AF8F28F1 -:1066100002D00720BDE8FC8101200190C2B1BCB1CD -:106620002068A8B113463A46304609F070FC0028AD -:10663000F0D10948009023463A462946304604F0F6 -:1066400039FB0028E6D10198A84203D00920E1E7F0 -:106650000E20DFE70020DDE76966020013460A46E8 -:1066600001468F2008F03EBB2DE9F0411646070099 -:106670000FD076B16BB11C460D4609F0A9FC00287D -:1066800008D1631C324629463846BDE8F04109F07E -:106690009FBC0E20BDE8F0812DE9F0411D46174654 -:1066A0000E000ED06DB160B1044609F0B5FC0028B3 -:1066B00008D12B463A463146601CBDE8F04109F04E -:1066C000ABBC0E20BDE8F0817CB50C46E0B12CB12E -:1066D00000230193057801A97B2D01D007207CBD03 -:1066E0000125019582B1156875B1022C0AD300937A -:1066F00013460A46214604F0DDFA0028EFD101983E -:10670000A04203D009207CBD0E207CBD00207CBDB2 -:106710002DE9FF4184B0984614460F0019D0C4B14A -:106720000020019025687B2001AE8DF808003346DB -:106730002A4602A809F070FC00280BD133462A46ED -:10674000394604A809F023FC002803D1049870B945 -:1067500003E00E2008B0BDE8F08107480090334602 -:106760002A463946404604F0D3FA0028F2D101986F -:1067700020600020EEE70000954A02001CB50C46A0 -:10678000C8B12CB100210191037801A97A2B01D065 -:1067900007201CBD012301936AB1094B00931346E6 -:1067A0000A46214604F086FA0028F2D10198A04258 -:1067B00003D009201CBD0E201CBD00201CBD000004 -:1067C000454A020013460A4601467A2008F08ABA72 -:1067D0001CB50C4640B12CB100210191037801A9F0 -:1067E000712B03D007201CBD0E201CBD012301937B -:1067F000074B009313460A46214604F05BFA002833 -:10680000F3D10198A04201D009201CBD00201CBD7D -:10681000816802002DE9FF4184B0984614460F00BC -:1068200019D0C4B1002001902568712001AE8DF807 -:10683000080033462A4602A809F0EEFB00280BD1D7 -:1068400033462A46394604A809F0A1FB002803D1A3 -:10685000049870B903E00E2008B0BDE8F081074845 -:10686000009033462A463946404604F051FA002843 -:10687000F2D1019820600020EEE70000D568020008 -:10688000F8B51646070020D0FEB1F3B11C460D4600 -:1068900009F09EFB002817D1631C32462946384672 -:1068A00009F096FB00280FD1A31C32462946384632 -:1068B00009F02DFB002807D105480090231D324622 -:1068C0002946384604F0F6F9F8BD0E20F8BD000060 -:1068D00015600200F8B51D4617460E001FD0F5B131 -:1068E000E8B1044609F098FB002817D12B463A4638 -:1068F0003146601C09F090FB00280FD12B463A4628 -:106900003146A01C09F012FB002807D10548009071 -:106910002B463A463146606804F0FAF9F8BD0E207D -:10692000F8BD00002B6002001CB50C4640B12CB134 -:1069300000210191037801A9702B03D007201CBD11 -:106940000E201CBD01230193074B009313460A46FA -:10695000214604F0AFF90028F3D10198A04201D0FC -:1069600009201CBD00201CBD8168020013460A4698 -:106970000146702008F0B6B92DE9FC411C460D46D1 -:10698000060025D035B10027019730780DF10408B5 -:106990008E2802D00720BDE8FC8101200190BAB109 -:1069A000B4B12068A0B113464246304609F0AFFAB0 -:1069B0000028F0D12346424629463046009704F08D -:1069C00079F90028E7D10198A84203D00920E2E72D -:1069D0000E20E0E70020DEE72DE9FF4184B0984675 -:1069E00014460F0019D0C4B10020019025688E20F4 -:1069F00001AE8DF8080033462A4602A809F00CFBC8 -:106A000000280BD133462A46394604A809F0BFFABC -:106A1000002803D1049870B903E00E2008B0BDE847 -:106A2000F0810748009033462A463946404604F034 -:106A30006FF90028F2D1019820600020EEE70000F5 -:106A4000190003002DE9F8431F46DDF820800C46AD -:106A500005002CD02CB10020009028786E468828A4 -:106A600002D00720BDE8F88301200090FAB1F7B109 -:106A70005FEA08001BD013463246284609F047FA61 -:106A80000028EFD13B4632462146284609F0A0FABD -:106A90000028E7D1434632462146284609F098FAB5 -:106AA0000028DFD10098A04203D00920DAE70E20A9 -:106AB000D8E70020D6E713460A460146882008F0AA -:106AC00011B938B50C46B8B12CB10021009103784A -:106AD0006946892B01D0072038BD012300935AB1A4 -:106AE00013460A46214609F012FA0028F4D100980C -:106AF000A04203D0092038BD0E2038BD002038BD8B -:106B000013460A460146892008F0ECB8F8B5164647 -:106B1000070032D086B37BB31C460D466B4609F0A6 -:106B200057FA002827D19DF800102078A31C61F3A4 -:106B3000000020709DF800103246490861F34100C2 -:106B400020709DF80010890861F3820020702946AA -:106B5000384609F0DCF900280DD1231D32462946BC -:106B6000384609F0D4F9002805D1A31D324629463C -:106B7000384609F0CCF9F8BDFFE70E20FBE700002E -:106B80001CB50C46D8B12CB100210191037801A9A4 -:106B90008A2B01D007201CBD012301937AB1136811 -:106BA0006BB1094B009313460A46214604F082F864 -:106BB0000028F0D10198A04203D009201CBD0E206E -:106BC0001CBD00201CBD00000D6B020013460A46D0 -:106BD00001468A2008F086B813460A4601468B20F3 -:106BE00008F080B82DE9FC471E46DDE90A540F463F -:106BF0005FEA000842D03FB10020019098F8000001 -:106C00000DF10409862802D00720BDE8FC87012089 -:106C1000019092B38EB385B37CB3306868B32868B3 -:106C200058B3206848B313464A46404609F06FF906 -:106C30000028EAD11348009033464A463946404678 -:106C400004F038F80028E0D10F4800902B464A465F -:106C50003946404604F02EF80028D6D10B48009063 -:106C600023464A463946404604F024F80028CCD151 -:106C70000198B84204D00920C7E7FFE70E20C4E717 -:106C80000020C2E771510200156002000D71020080 -:106C900013460A460146862008F024B838B500B3EA -:106CA000FAB1F3B11C466B4609F092F9002817D1EE -:106CB0009DF80020217862F3000121709DF80020EA -:106CC000520862F3410121709DF80020920862F39E -:106CD000820121709DF80020D20862F3C301217067 -:106CE00038BD0E2038BD38B5A9B1A3B198B1007830 -:106CF000C0F34005044665F35F04C0F3800544EA31 -:106D00008504C0F3C00044EAC0008DF80000684666 -:106D100009F082F938BD0E2038BD0000F8B51646DE -:106D2000070029D046B33BB3144800901C460D46DB -:106D3000384603F0BFFF00281DD111480090231DE5 -:106D400032462946384603F0B5FF002813D10D48D6 -:106D5000009004F1080332462946384603F0AAFFA2 -:106D6000002808D10848009004F10C033246294657 -:106D7000384603F09FFFF8BD0E20F8BD0D5202000B -:106D8000955F02000D71020041630200F8B51D46D7 -:106D900017460E0026D02DB320B3044612480090AB -:106DA000206803F0B5FF00281BD1104800902B4647 -:106DB0003A463146606803F0ABFF002811D10C4819 -:106DC00000902B463A463146A06803F0A1FF002808 -:106DD00007D1084800902B463A463146E06803F058 -:106DE00097FFF8BD0E20F8BD4D520200D55F02009E -:106DF00023710200576302002DE9F84316465FEA4B -:106E0000000813D096B18BB1094F1C460D46009770 -:106E100005F020FE002807D104F110033246294670 -:106E20004046009705F016FEBDE8F8830E20FBE70C -:106E30001D6D02002DE9F8431D4690460E0012D04C -:106E40008DB180B1094F0446009705F035FE00284A -:106E500007D12B464246314604F11000009705F059 -:106E60002BFEBDE8F8830E20FBE700008D6D0200CD -:106E700038B5A9B1A3B198B10078C0F34005044674 -:106E800065F35F04C0F3800544EA8504C0F3C000E5 -:106E900044EAC0008DF80000684609F0BDF838BD2E -:106EA0000E2038BD2DE9FC479846DDE90A540E4610 -:106EB00007003FD036B10020019038780DF1040969 -:106EC0007F2802D00720BDE8FC870120019082B313 -:106ED000B8F1000F2ED065B3286850B34CB32068CA -:106EE00038B313464A46384609F011F80028EAD16B -:106EF00043464A463146384609F06AF80028E2D14E -:106F00000E4800902B464A463146384603F0D2FEE2 -:106F10000028D8D10A48009023464A4631463846D0 -:106F200003F0C8FE0028CED10198B04204D0092059 -:106F3000C9E7FFE70E20C6E70020C4E7B16F0200F3 -:106F4000F96D02002DE9FF4184B0984614460F0008 -:106F500019D0C4B10020019025687F2001AE8DF8C2 -:106F6000080033462A4602A809F056F800280BD13B -:106F700033462A46394604A809F009F8002803D107 -:106F8000049870B903E00E2008B0BDE8F08107480E -:106F9000009033462A463946404603F0B9FE0028A1 -:106FA000F2D1019820600020EEE70000356E02006B -:106FB0002DE9FC4116465FEA000853D0002E51D05F -:106FC000002B4FD01C460D4601AB09F001F80028FC -:106FD00046D1631C32462946404608F0F9FF002896 -:106FE0003ED1A31C32462946404608F0F1FF002856 -:106FF00036D11D4FE31C324629464046009705F026 -:1070000029FD00282CD1231D3246294640460097F1 -:1070100005F020FD002823D19DF80420217862F39B -:10702000000121709DF80420520862F34101217093 -:107030009DF80420920862F3820121709DF80420DB -:10704000D20862F3C30121709DF80420120962F393 -:10705000061121709DF80420D20962F3C711217036 -:10706000BDE8FC810E20FBE79D6C02002DE9FC4190 -:107070001D4690460E0045D0F5B3E8B304460078AF -:10708000C0F34002014662F35F01C0F3800241EAAF -:107090008201C0F3C00241EAC201C0F3021241EA18 -:1070A000021120F07F0001438DF804104246314662 -:1070B00001A808F0B1FF002822D12B4642463146F4 -:1070C000601C08F0A9FF00281AD12B464246314621 -:1070D000A01C08F0A1FF002812D10B4F2B464246FE -:1070E0003146E01C009705F0E7FC002808D12B464C -:1070F00042463146201D00E004E0009705F0DCFC2C -:10710000BDE8FC810E20FBE7E76C020038B530B12A -:107110002AB123B11024009408F08BFF38BD0E2053 -:1071200038BD08B541B13BB130B1009313460A46B2 -:10713000102108F094FF08BD0E2008BD38B50C469C -:10714000B8B12CB10021009103786946772B01D0AA -:10715000072038BD012300935AB113460A46214641 -:1071600008F036FF0028F4D10098A04203D009208F -:1071700038BD0E2038BD002038BD13460A460146F2 -:10718000772007F0AFBD00002DE9FE4F1446060042 -:1071900098460D4629D035B10027019730780DF17A -:1071A000040A6E2802D00720BDE8FE8F012001905E -:1071B000DCB12068C8B10068B8B15246304608F06A -:1071C00007FF0028F0D102AB52462946304608F0AE -:1071D000FFFE0028E8D19DF80800012807D02760AD -:1071E0000198A84219D00920DEE70E20DCE72768C5 -:1071F0000024DFF82C900BE007EB8403524629466D -:107200003046CDF8009003F055FD0028CCD1641C29 -:1072100098F80000A042EFD8E2E70020C4E70000A1 -:10722000B144020013460A4601466E2007F05ABDDB -:1072300038B5A0B19AB193B11C466B4608F0C8FEB0 -:1072400000280BD19DF80020217862F30001217005 -:107250009DF80020520862F34101217038BD0E20D4 -:1072600038BD38B590B38AB383B31C466B4608F07B -:10727000AFFE002829D19DF80020217862F300019B -:1072800021709DF80020520862F3410121709DF8A1 -:107290000020920862F3820121709DF80020D2083C -:1072A00062F3C30121709DF80020120962F30411FA -:1072B00021709DF80020520962F3451121709DF85C -:1072C0000020920962F38611217038BDFFE70E207D -:1072D000FBE738B509B303B3F8B10078C0F3400554 -:1072E000044665F35F04C0F3800544EA8504C0F3F7 -:1072F000C00544EAC504C0F3001544EA0514C0F310 -:10730000401544EA4514C0F3801044EA80108DF81B -:107310000000684608F080FE38BD0E2038BD18B168 -:1073200012B10BB108F0F3BD0E207047F8B51D4641 -:1073300017460E000FD075B168B1044608F0F6FD8F -:10734000002807D1054800902B463A463146A01C3C -:1073500005F0C6FBF8BD0E20F8BD00008FA60200A8 -:10736000F8B51D4617460E000FD075B168B104463A -:1073700008F0DCFD002807D1054800902B463A466E -:107380003146A01C05F0ACFBF8BD0E20F8BD000096 -:10739000A9A802002DE9FC411C460D46060025D097 -:1073A0002DB100200190307801AF982802D007203D -:1073B000BDE8FC8101200190C2B1BCB12068A8B138 -:1073C00013463A46304608F0A2FD0028F0D109489D -:1073D000009023463A462946304603F06BFC0028CD -:1073E000E6D10198A84203D00920E1E70E20DFE7AB -:1073F0000020DDE7B381020013460A4601469820CB -:1074000007F070BC2DE9FC411D4617460E0032D036 -:1074100085B378B3044619480090204605F060FB18 -:10742000002825D1164800902B463A463146201DAB -:1074300005F056FB00281BD160792B4600F00100B7 -:107440008DF804003A46314601A808F0E5FD002811 -:107450000ED12B463A463146A01D08F067FD0028A4 -:1074600006D12B463A46314604F1080008F05EFD8D -:10747000BDE8FC81FFE70E20FAE70000A9A80200A2 -:10748000D37202002DE9FC411D46089C0E46070000 -:1074900033D036B10020019038780DF104089928D6 -:1074A00002D00720BDE8FC81012001902AB325B35A -:1074B000286810B30CB32068F8B11346424638462A -:1074C00008F025FD0028EDD10E4800902B464246DD -:1074D0003146384603F0EEFB0028E3D10A4800901D -:1074E000234642463146384603F0E4FB0028D9D112 -:1074F0000198B04203D00920D4E70E20D2E7002043 -:10750000D0E7000079A80200B381020013460A46C2 -:107510000146992007F0E6BB2DE9FC411C46089F77 -:107520000D46060026D035B10020019030780DF1CF -:1075300004089B2802D00720BDE8FC8101200190AF -:10754000C2B1BCB12068A8B1A7B1134642463046CB -:1075500008F0DDFC0028EFD123464246294630469C -:10756000009704F015FF0028E6D10198A84203D047 -:107570000920E1E70E20DFE70020DDE713460A4699 -:1075800001469B2007F0AEBB2DE9FC411F460C468F -:10759000050009D02CB100200190287801AE962872 -:1075A00004D00720BDE8FC810E20FBE70120134634 -:1075B00001903246284608F0AAFC0028F2D108487B -:1075C00000903B4632462146284603F073FB0028D4 -:1075D000E8D10198A04201D00920E3E70020E1E7CB -:1075E000B381020013460A460146962007F07ABB93 -:1075F00018B112B10BB108F0EBBC0E2070470000BF -:10760000F8B51D4617460E000FD075B168B1044697 -:1076100008F08CFC002807D1054800902B463A461C -:107620003146A01C05F05CFAF8BD0E20F8BD000044 -:10763000A9A802002DE9FC411F460C46050009D00F -:107640002CB100200190287801AE972804D00720A3 -:10765000BDE8FC810E20FBE7012013460190324675 -:10766000284608F054FC0028F2D1084800903B4618 -:1076700032462146284603F01DFB0028E8D1019838 -:10768000A04201D00920E3E70020E1E7B381020036 -:1076900013460A460146972007F024BB2DE9FE4316 -:1076A0001D461646040007D036B12DB12088342877 -:1076B00004D00720BDE8FE830E20FBE700200190E8 -:1076C0002F6834200DF10408ADF8080043463A460F -:1076D000314602A808F02AFC0028EBD143463A467E -:1076E0003146201D08F022FC0028E3D143463A46EB -:1076F0003146A01D08F01AFC0028DBD143463A466B -:10770000314604F1080008F011FC0028D2D10748E6 -:10771000009043463A46314604F10A0005F0D6F996 -:107720000028C7D101992960C4E700003177020021 -:107730002DE9F8431F4691465FEA010814D09FB136 -:1077400090B1044608F0F2FB00280ED13B464A46B1 -:107750004146A01C08F060FC002806D1A178012950 -:1077600005D0104E002515E00E20BDE8F8830E4E22 -:10777000F8E7A078012811D005EBC50004EB400024 -:10778000001D3B464A464146009605F0A9F90028EF -:10779000EBD16D1C2188A942EBD8E6E705EB45004B -:1077A000ECE700002D730200617302002DE9FE4337 -:1077B0001D461646040007D036B12DB12088322868 -:1077C00004D00720BDE8FE830E20FBE700200190D7 -:1077D0002F6832200DF10408ADF8080043463A4600 -:1077E000314602A808F0A2FB0028EBD143463A46F6 -:1077F0003146201D08F09AFB0028E3D143463A4663 -:107800003146A01D08F092FB0028DBD143463A46E2 -:10781000314604F1080008F089FB0028D2D107485E -:10782000009043463A46314604F10A0005F04EF90D -:107830000028C7D101992960C4E7000041780200FF -:107840002DE9F8431E4691465FEA010809D046B18A -:1078500038B1044608F06AFB002803D100250B4F1D -:1078600010E00E20BDE8F88305EB850004EB400036 -:1078700033464A464146801C009705F031F90028FE -:10788000F0D16D1C2188A942EED8EBE70574020007 -:107890002DE9FE431D461646040007D036B12DB132 -:1078A0002088352804D00720BDE8FE830E20FBE7A2 -:1078B000002001902F6835200DF10408ADF8080074 -:1078C00043463A46314602A808F030FB0028EBD187 -:1078D00043463A463146201D08F028FB0028E3D1F4 -:1078E00043463A463146A01D08F020FB0028DBD174 -:1078F00043463A46314604F1080008F017FB0028D9 -:10790000D2D10748009043463A46314604F10A0076 -:1079100005F0DCF80028C7D101992960C4E7000010 -:1079200025790200F8B51D4617460E001AD0CDB1D4 -:10793000C0B1044608F0FAFA002812D12B463A46A4 -:107940003146A01C08F0F2FA00280AD1608821888C -:10795000801C484381B23B463246201D009508F00A -:107960007EFBF8BD0E20F8BD2DE9FE431D461646F0 -:10797000040007D036B12DB12088372804D0072065 -:10798000BDE8FE830E20FBE7002001902F68372022 -:107990000DF10408ADF8080043463A46314602A806 -:1079A00008F0C4FA0028EBD143463A463146201D80 -:1079B00008F0BCFA0028E3D143463A463146A01D00 -:1079C00008F0B4FA0028DBD143463A46314604F1C8 -:1079D000080008F0ABFA0028D2D1074800904346CF -:1079E0003A46314604F10A0005F070F80028C7D184 -:1079F00001992960C4E70000FD790200F8B51D4631 -:107A000017460E000ED06DB160B1044608F08EFA34 -:107A1000002806D1009521883B463246A01C08F07C -:107A20001EFBF8BD0E20F8BD2DE9FE431D4616468F -:107A3000040007D036B12DB12088332804D00720A8 -:107A4000BDE8FE830E20FBE7002001902F68332065 -:107A50000DF10408ADF8080043463A46314602A845 -:107A600008F064FA0028EBD143463A463146201D1F -:107A700008F05CFA0028E3D143463A463146A01D9F -:107A800008F054FA0028DBD143463A46314604F167 -:107A9000080008F04BFA0028D2D10748009043466E -:107AA0003A46314604F10A0005F010F80028C7D123 -:107AB00001992960C4E70000BD7A02002DE9F8436E -:107AC0001E4691465FEA010809D046B138B1044626 -:107AD00008F02CFA002803D100250B4F10E00E20EF -:107AE000BDE8F88305EB450004EB400033464A4609 -:107AF0004146801C009704F0F3FF0028F0D16D1C74 -:107B00002188A942EED8EBE7017602002DE9FE4379 -:107B10001D461646040007D036B12DB120883A28FC -:107B200004D00720BDE8FE830E20FBE70020019073 -:107B30002F683A200DF10408ADF8080043463A4694 -:107B4000314602A808F0F2F90028EBD143463A4644 -:107B50003146201D08F0EAF90028E3D143463A46B1 -:107B60003146A01D08F0E2F90028DBD143463A4631 -:107B7000314604F1080008F0D9F90028D2D10748AD -:107B8000009043463A46314604F10A0004F09EFF55 -:107B90000028C7D101992960C4E70000A17B020039 -:107BA00019B113B108B108F0C1B90E207047000037 -:107BB0002DE9FE431D461646040007D036B12DB10F -:107BC0002088392804D00720BDE8FE830E20FBE77B -:107BD000002001902F6839200DF10408ADF808004D -:107BE00043463A46314602A808F0A0F90028EBD1F6 -:107BF00043463A463146201D08F098F90028E3D163 -:107C000043463A463146A01D08F090F90028DBD1E2 -:107C100043463A46314604F1080008F087F9002847 -:107C2000D2D10748009043463A46314604F10A0053 -:107C300004F04CFF0028C7D101992960C4E7000077 -:107C4000457C0200F8B51D4617460E001ED0EDB16A -:107C5000E0B1044608F06AF9002816D12B463A46EE -:107C60003146A01C08F0D8F900280ED12B463A4620 -:107C70003146201D08F05AF9002806D10095A18848 -:107C80003B463246A01D08F0EAF9F8BD0E20F8BDCB -:107C90002DE9FE431D461646040007D036B12DB12E -:107CA0002088302804D00720BDE8FE830E20FBE7A3 -:107CB000002001902F6830200DF10408ADF8080075 -:107CC00043463A46314602A808F030F90028EBD185 -:107CD00043463A463146201D08F028F90028E3D1F2 -:107CE00043463A463146A01D08F020F90028DBD172 -:107CF00043463A46314604F1080008F017F90028D7 -:107D0000D2D10748009043463A46314604F10A0072 -:107D100004F0DCFE0028C7D101992960C4E7000007 -:107D2000257D02002DE9F8431E4691465FEA0108D1 -:107D300009D046B138B1044608F0F8F8002803D15C -:107D400000250A4F0EE00E20BDE8F88304EBC500C5 -:107D500033464A464146801C009704F0C1FE002885 -:107D6000F2D16D1C2188A942F0D8EDE7FD83020015 -:107D70002DE9FE431D461646040007D036B12DB14D -:107D80002088362804D00720BDE8FE830E20FBE7BC -:107D9000002001902F6836200DF10408ADF808008E -:107DA00043463A46314602A808F0C0F80028EBD115 -:107DB00043463A463146201D08F0B8F80028E3D182 -:107DC00043463A463146A01D08F0B0F80028DBD102 -:107DD00043463A46314604F1080008F0A7F8002867 -:107DE000D2D10748009043463A46314604F10A0092 -:107DF00004F06CFE0028C7D101992960C4E7000097 -:107E0000057E0200F8B51D4617460E001ED0EDB1E6 -:107E1000E0B1044608F08AF8002816D12B463A460D -:107E20003146A01C08F082F800280ED12B463A46B5 -:107E30003146201D08F07AF8002806D10095A18867 -:107E40003B463246A01D08F00AF9F8BD0E20F8BDE9 -:107E50002DE9FE431D461646040007D036B12DB16C -:107E60002088312804D00720BDE8FE830E20FBE7E0 -:107E7000002001902F6831200DF10408ADF80800B2 -:107E800043463A46314602A808F050F80028EBD1A4 -:107E900043463A463146201D08F048F80028E3D111 -:107EA00043463A463146A01D08F040F80028DBD191 -:107EB00043463A46314604F1080008F037F80028F6 -:107EC000D2D10748009043463A46314604F10A00B1 -:107ED00004F0FCFD0028C7D101992960C4E7000027 -:107EE000E57E02002DE9F84F984692465FEA0109C7 -:107EF0000ED0B8F1000F0BD050B1044643464946AE -:107F000008F014F8002804D1A51C0026094F0DE044 -:107F10000E20BDE8F88F4346524649462846009752 -:107F200004F0DEFD0028F4D10A35761C2188B14228 -:107F3000F1D8EEE7718202002DE9FE431D46164698 -:107F4000040007D036B12DB120883B2804D007208B -:107F5000BDE8FE830E20FBE7002001902F683B2048 -:107F60000DF10408ADF8080043463A46314602A830 -:107F700007F0DCFF0028EBD143463A463146201D8E -:107F800007F0D4FF0028E3D143463A463146A01D0E -:107F900007F0CCFF0028DBD143463A46314604F1D6 -:107FA000080007F0C3FF0028D2D1074800904346DD -:107FB0003A46314604F10A0004F088FD0028C7D192 -:107FC00001992960C4E70000CD7F020019B113B107 -:107FD00008B108F021B80E2070472DE9FC411D467C -:107FE0001646040007D036B12DB120883C2804D0B5 -:107FF0000720BDE8FC810E20FBE7002000902F68E1 -:108000003C20E846ADF8040043463A46314601A814 -:1080100007F08CFF0028ECD143463A463146201D3C -:1080200007F084FF0028E4D143463A463146A01DBC -:1080300007F07CFF0028DCD143463A46314604F184 -:10804000080007F073FF0028D3D143463A46314673 -:1080500004F10A0007F0E0FF0028CAD10099296066 -:10806000C7E700002DE9FE431D461646040007D071 -:1080700036B12DB12088382804D00720BDE8FE8312 -:108080000E20FBE7002001902F6838200DF1040836 -:10809000ADF8080043463A46314602A807F046FFCD -:1080A0000028EBD143463A463146201D07F03EFFFB -:1080B0000028E3D143463A463146A01D07F036FF7B -:1080C0000028DBD143463A46314604F1080007F068 -:1080D0002DFF0028D2D10748009043463A4631464A -:1080E00004F10A0004F0F2FC0028C7D101992960CC -:1080F000C4E70000F9800200F8B51D4617460E00DF -:1081000027D035B328B3044607F010FF00281FD14D -:108110002B463A463146A01C07F07EFF002817D1B7 -:108120002B463A463146201D07F000FF00280FD1AC -:108130002B463A463146A01D07F0F8FE002807D12D -:108140000095E1883B46324604F1080007F087FFBE -:10815000F8BD0E20F8BDF8B51F460C46050008D046 -:108160002CB10020009028786E469E2803D007206E -:10817000F8BD0E20F8BD0120134600903246284677 -:1081800007F0C5FE0028F5D13B4632462146284679 -:1081900007F0BDFE0028EDD10098A04201D00920D3 -:1081A000F8BD0020F8BD13460A4601469E2006F0A1 -:1081B00099BD2DE9F041164607000FD076B16BB19D -:1081C0001C460D4607F0A3FE002808D1A31C32462A -:1081D00029463846BDE8F04107F099BE0E20BDE8BB -:1081E000F0812DE9F0411D4617460E000ED06DB10D -:1081F00060B1044607F09AFE002808D12B463A46A3 -:108200003146A01CBDE8F04107F090BE0E20BDE84D -:10821000F081F8B51F460C46050008D02CB10020AF -:10822000009028786E469D2803D00720F8BD0E20C8 -:10823000F8BD0120134600903246284607F067FE3D -:108240000028F5D13B4632462146284607F05FFE1E -:108250000028EDD10098A04201D00920F8BD0020EF -:10826000F8BD13460A4601469D2006F03BBD0000BE -:10827000F8B51D4617460E000FD075B168B104461B -:1082800007F054FE002807D1054800902B463A46D7 -:108290003146A01C04F024FCF8BD0E20F8BD0000FF -:1082A000FD8302002DE9FC411F46DDF820800C46CD -:1082B000050009D02CB100200190287801AE942847 -:1082C00004D00720BDE8FC810E20FBE70120134607 -:1082D00001903246284607F01AFE0028F2D13B46AC -:1082E00032462146284607F012FE0028EAD1084807 -:1082F0000090434632462146284602F0DBFC002827 -:10830000E0D10198A04201D00920DBE70020D9E7A5 -:1083100079A8020013460A460146942006F0E2BC02 -:108320002DE9F8431F46DDF820800C46050009D0F2 -:108330002CB10020009028786E469A2804D007209F -:10834000BDE8F8830E20FBE701201346009032467B -:10835000284607F0DCFD0028F2D13B463246214694 -:10836000284607F0D4FD0028EAD14346324621468C -:10837000284607F0CCFD0028E2D10098A04201D0A9 -:108380000920DDE70020DBE713460A4601469A2074 -:1083900006F0A8BC2DE9FC411F460C46050009D09B -:1083A0002CB100200190287801AE952804D0072038 -:1083B000BDE8FC810E20FBE7012013460190324608 -:1083C000284607F0A4FD0028F2D1084800903B465B -:1083D00032462146284602F06DFC0028E8D101987B -:1083E000A04201D00920E3E70020E1E7B3810200C9 -:1083F00013460A460146952006F074BCF8B51D46A2 -:1084000017460E0012D08DB180B104460848009086 -:10841000204604F065FB002807D1064800902B4653 -:108420003A463146201D04F05BFBF8BD0E20F8BD36 -:10843000A9A80200E3810200F8B51646070028D07B -:108440003EB333B31C460D4607F0C2FD00281FD1D2 -:10845000631C32462946384607F0BAFD002817D17A -:10846000A31C32462946384607F051FD00280FD19B -:10847000231D32462946384607F049FD002807D11A -:10848000A01D831C009032462946384605F027F887 -:10849000F8BD0E20F8BD00002DE9FC411F460C463A -:1084A000050009D02CB100200190287801AE9C284D -:1084B00004D00720BDE8FC810E20FBE70120134615 -:1084C00001903246284607F022FD0028F2D10848E4 -:1084D00000903B4632462146284602F0EBFB00283E -:1084E000E8D10198A04201D00920E3E70020E1E7AC -:1084F0003984020013460A4601469C2006F0F2BB6E -:108500002DE9FC479846DDF828900D46060009D075 -:108510002DB100240194307801AFAC2804D007209D -:10852000BDE8FC870E20FBE70120134601903A4688 -:10853000304607F0ECFC0028F2D143463A46294683 -:108540003046009402F0B6FB0028E9D14B463A468B -:1085500029463046009402F0ADFB0028E0D1019896 -:10856000A84201D00920DBE70020D9E72DE9FF432D -:1085700083B09846DDF8389014460F0019D0C4B186 -:10858000002001902568AC2001AE8DF8080033462C -:108590002A4602A807F040FD00280BD133462A46A0 -:1085A000394603A807F0F3FC002803D10398C0B9AB -:1085B00003E00E2007B0BDE8F0830C48009033467E -:1085C0002A463946404602F0A3FB0028F2D108486B -:1085D000009033462A463946484602F099FB002867 -:1085E000E8D1019820600020E4E70000A9A802007B -:1085F000618602002DE9FC4116465FEA00082BD097 -:1086000056B34BB3154F1C460D46009704F02CFA99 -:1086100000281FD1631C324629464046009704F0CB -:1086200023FA002816D101AB32462946404607F00E -:10863000CFFC00280ED19DF80410A2784B0861F3FE -:10864000000263F34202CB0863F3C302090961F33A -:108650000412A270BDE8FC810E20FBE7A94B0200CA -:108660002DE9FC411D4690460E0032D085B378B30B -:10867000194F0446009704F047FA002826D12B46EC -:1086800042463146601C009704F03EFA00281DD196 -:10869000A0782B46C0F34102014662F35F01C0F3AC -:1086A000C00241EAC201C0F3001041EA00108DF897 -:1086B00004004246314601A807F0AEFC002805D16F -:1086C000A178C1F34101012900D00720BDE8FC8158 -:1086D000FFE70E20FAE70000DB4B0200F8B5164674 -:1086E000070032D086B37BB3194800901C460D4674 -:1086F000384602F0DFFA002825D116480090231DE5 -:1087000032462946384602F0D5FA00281BD104F13A -:108710000A0332462946384607F0F9FB002812D1F1 -:1087200004F10C0332462946384607F0F0FB0028D6 -:1087300009D104F10800009004F1100332462946E3 -:10874000384604F0CCFEF8BDFFE70E20FBE7000042 -:1087500079A80200F58502002DE9FC4116460700C4 -:1087600028D03EB333B31C460D4607F0D0FB00289B -:108770001ED101AB32462946384607F029FC0028B5 -:1087800016D1231D32462946384607F0C0FB002883 -:108790000ED1A01D831C009032462946384604F0B5 -:1087A0009EFE002804D19DF8041001F00101A17083 -:1087B000BDE8FC810E20FBE718B112B10BB107F048 -:1087C000CFBB0E20704738B558B152B14BB11C46E3 -:1087D0006B4607F0FDFB002802D19DF800102170C8 -:1087E00038BD0E2038BD2DE9F0411D4617460E005C -:1087F0001ED0EDB1E0B1044607F098FB002818D177 -:108800002B463A463146A01C07F090FB002810D1B9 -:108810002B463A463146201D07F088FB002808D138 -:108820002B463A463146A01DBDE8F04107F07EBB1D -:108830000E20BDE8F08100002DE9F84316465FEAFE -:10884000000854D0002E52D0002B50D02948009060 -:108850001C460D46404604F007F9002845D126483D -:108860000090631C32462946404604F0FDF800287B -:108870003BD104F1080332462946404607F047FB46 -:10888000002832D104F10A000090231D3246294607 -:10889000404604F024FE002827D11848009004F137 -:1088A0000C0332462946404602F004FA00281CD147 -:1088B000134F04F11003324629464046009702F058 -:1088C000F9F9002811D104F1140332462946404633 -:1088D000009702F0EFF9002807D104F1180332469F -:1088E00029464046009702F0E5F9BDE8F8830E20DE -:1088F000FBE700006372020031720200058902008A -:10890000F58502002DE9F0411646070027D036B361 -:108910002BB31C460D4607F05BFB002820D1631CDF -:1089200032462946384607F053FB002818D1A31CCD -:1089300032462946384607F0EAFA002810D1231DAE -:1089400032462946384607F043FB002808D1A31DCC -:10895000324629463846BDE8F04107F0D8BA0E2025 -:10896000BDE8F0812DE9FC479846DDE90A9A0C46FE -:10897000050009D02CB100260196287801AFA22865 -:1089800004D00720BDE8FC870E20FBE7012013463A -:1089900001903A46284607F0BAFA0028F2D1124868 -:1089A000009043463A462146284602F083F90028C3 -:1089B000E8D10E4800904B463A462146284602F040 -:1089C00079F90028DED153463A46214628460096DA -:1089D00002F070F90028D5D10198A04201D00920F9 -:1089E000D0E70020CEE7000039880200DD860200D3 -:1089F0002DE9FF4184B0984614460F0019D0C4B148 -:108A0000002001902568A22001AE8DF808003346B1 -:108A10002A4602A807F000FB00280BD133462A465D -:108A2000394604A807F0B3FA002803D1049870B9B6 -:108A300003E00E2008B0BDE8F081074800903346FF -:108A40002A463946404602F063F90028F2D10198DF -:108A500020600020EEE70000E787020018B112B1A5 -:108A60000BB107F0B5BA0E20704700002DE9FC47A6 -:108A70009846DDF828900C46050009D02CB1002658 -:108A80000196287801AFA32804D00720BDE8FC8711 -:108A90000E20FBE70120134601903A46284607F0D6 -:108AA00036FA0028F2D10D48009043463A46214656 -:108AB000284602F0FFF80028E8D14B463A46214606 -:108AC0002846009602F0F6F80028DFD10198A0426F -:108AD00001D00920DAE70020D8E70000DD86020097 -:108AE0002DE9FF4184B0984614460F0019D0C4B157 -:108AF000002001902568A32001AE8DF808003346C0 -:108B00002A4602A807F088FA00280BD133462A46E5 -:108B1000394604A807F03BFA002803D1049870B93D -:108B200003E00E2008B0BDE8F0810748009033460E -:108B30002A463946404602F0EBF80028F2D1019867 -:108B400020600020EEE700002DFF02002DE9FE432B -:108B50001D461646040007D036B12DB12088552891 -:108B600004D00720BDE8FE830E20FBE70020019023 -:108B70002F6855200DF10408ADF8080043463A4629 -:108B8000314602A807F0D2F90028EBD143463A4615 -:108B90003146201D07F0CAF90028E3D106480090AD -:108BA00043463A463146A01D03F0A4FF0028D9D120 -:108BB00001992960D6E70000BD8B020019B113B1FD -:108BC00008B107F0B3B90E20704700002DE9FE434D -:108BD0001D461646040007D036B12DB12088532813 -:108BE00004D00720BDE8FE830E20FBE700200190A3 -:108BF0002F6853200DF10408ADF8080043463A46AB -:108C0000314602A807F092F90028EBD143463A46D4 -:108C10003146201D07F08AF90028E3D1064800906C -:108C200043463A463146A01D03F064FF0028D9D1DF -:108C300001992960D6E700003D8C020019B113B1FB -:108C400008B107F073B90E2070472DE9FC411D46AD -:108C50001646040007D036B12DB12088572804D01D -:108C60000720BDE8FC810E20FBE7002000902F6864 -:108C70005720E846ADF8040043463A46314601A87D -:108C800007F054F90028ECD143463A463146201DFE -:108C900007F04CF90028E4D143463A463146A01D7E -:108CA00007F0BAF90028DCD100992960D9E7000063 -:108CB000F8B51D4617460E0019D0C5B1B8B1044627 -:108CC00007F034F9002813D10A4800902B463A46A1 -:108CD0003146A01C03F018FF002809D101B02B4633 -:108CE0003A463146A01DBDE8F04007F01FB90E20FE -:108CF000F8BD0000A9A802002DE9F04186B01E468B -:108D00001746040008D03FB136B12088512805D05D -:108D1000072006B0BDE8F0810E20FAE7002003909E -:108D2000356851200DF10C08ADF8100043462A4675 -:108D3000394604A807F0FAF80028EAD143462A4643 -:108D40003946201D07F0F2F80028E2D116480090BD -:108D500043462A463946A01D03F0CCFE0500D8D173 -:108D6000A07902281CD1A07B062801D0042817D1A5 -:108D7000A08801A902F0B2F8052811D003A800903C -:108D80000198336800EB400101EB001107483A46B7 -:108D900000EB81000189406804F0B9FB0500B8D1FF -:108DA000039830602846B4E7B18D0200F4DC00205F -:108DB000F8B51D4617460E000DD065B158B10446F2 -:108DC00007F02AF9002805D12078012805D00228CB -:108DD00005D00720F8BD0E20F8BD054800E0054885 -:108DE00000902B463A463146A01C03F08DFEF8BD9C -:108DF000B18C0200019002002DE9FC411C46164690 -:108E0000050007D036B12CB12888532804D007209C -:108E1000BDE8FC810E20FBE700200090276853206E -:108E2000E846ADF8040043463A46314601A807F04B -:108E30007DF80028ECD143463A463146281D07F01C -:108E400075F80028E4D100992160E1E72DE9FE439F -:108E50001D461646040007D036B12DB12088522891 -:108E600004D00720BDE8FE830E20FBE70020019020 -:108E70002F6852200DF10408ADF8080043463A4629 -:108E8000314602A807F052F80028EBD143463A4693 -:108E90003146201D07F04AF80028E3D1064800902B -:108EA00043463A463146A01D03F024FE0028D9D19E -:108EB00001992960D6E70000BD8E020019B113B1F7 -:108EC00008B107F0A9B80E20704700002DE9FE4355 -:108ED0001D461646040007D036B12DB1208856280D -:108EE00004D00720BDE8FE830E20FBE700200190A0 -:108EF0002F6856200DF10408ADF8080043463A46A5 -:108F0000314602A807F012F80028EBD143463A4652 -:108F10003146201D07F00AF80028E3D106480090EA -:108F200043463A463146A01D03F0E4FD0028D9D15E -:108F300001992960D6E700003D8F020019B113B1F5 -:108F400008B107F069B80E20704700002DE9FF470F -:108F50001E46914604000AD0B9F1000F07D036B181 -:108F60002088502805D0072004B0BDE8F0870E20E7 -:108F7000FAE700200190D6F80080502001AFADF84C -:108F800008003B464246494602A806F0CFFF0028AB -:108F9000EAD13B4642464946201D06F0C7FF00285D -:108FA000E2D1154800903B4642464946A01D03F0D9 -:108FB000A1FD0500D8D1207B012801D0062816D1BB -:108FC000A08803A901F08AFF052810D00398009714 -:108FD00000EB400101EB00110848434600EB810023 -:108FE0004A460189406804F092FA0500BCD1019814 -:108FF00030602846B8E7000001900200F4DC002051 -:10900000F8B51D4617460E003CD0D5B3C8B304468C -:1090100006F08CFF002833D11B4800902B463A46BF -:109020003146A01C03F070FD002829D12B463A469A -:109030003146A01D06F0F0FF002821D12B463A460C -:109040003146E01D06F0E8FF002819D12B463A46CC -:10905000314604F1080006F069FF002810D12B46C4 -:109060003A46314604F10A0006F060FF002807D1B5 -:10907000009561893B46324604F10C0006F0EFFF93 -:10908000F8BDFFE70E20FBE7A9A80200F8B51F46D0 -:109090000C46050008D02CB10020009028786E46C0 -:1090A000AD2803D00720F8BD0E20F8BD01201346DF -:1090B00000903246284606F02AFF0028F5D13B46AC -:1090C00032462146284606F022FF0028EDD10098BE -:1090D000A04201D00920F8BD0020F8BD13460A4681 -:1090E0000146AD2005F0FEBD2DE9FC411646070006 -:1090F00032D086B37BB31C460D4606F008FF00282D -:1091000027D1A31C32462946384606F061FF0028C5 -:109110001FD1231D32462946384606F0F8FE0028A6 -:1091200017D10E48009004F108033246294638460C -:1091300001F0C0FD00280CD1A168002909D00888E1 -:109140000090019004F10C0332462946384601F0A4 -:10915000A7FCBDE8FC81FFE70E20FAE70FFF020045 -:109160002DE9FC411F460C46050009D02CB100201A -:109170000190287801AEA62804D00720BDE8FC8124 -:109180000E20FBE70120134601903246284606F0E8 -:10919000BEFE0028F2D1084800903B4632462146E8 -:1091A000284601F087FD0028E8D10198A04201D0AF -:1091B0000920E3E70020E1E7E99002002DE9FF4103 -:1091C00084B0984614460F0019D0C4B10020019015 -:1091D0002568A62001AE8DF8080033462A4602A86D -:1091E00006F01AFF00280BD133462A46394604A858 -:1091F00006F0CDFE002803D1049870B903E00E20DC -:1092000008B0BDE8F0810748009033462A46394649 -:10921000404601F07DFD0028F2D101982060002039 -:10922000EEE700002DFF02002DE9FC479846DDF82F -:1092300028900C46050009D02CB10026019628780C -:1092400001AFA12804D00720BDE8FC870E20FBE772 -:109250000120134601903A46284606F058FE0028A1 -:10926000F2D143463A462146284606F050FE0028F1 -:10927000EAD14B463A4621462846009601F01AFDAF -:109280000028E1D10198A04201D00920DCE70020AC -:10929000DAE700002DE9FF4184B0984614460F003C -:1092A00019D0C4B1002001902568A12001AE8DF82D -:1092B000080033462A4602A806F0AEFE00280BD16D -:1092C00033462A46394604A806F061FE002803D139 -:1092D000049870B903E00E2008B0BDE8F08107489B -:1092E000009033462A463946404601F011FD0028D9 -:1092F000F2D1019820600020EEE700002DFF02006F -:109300007CB50C4640B12CB100230193057801A92E -:10931000AB2D03D007207CBD0E207CBD0125CDE9FF -:10932000003513460A46214601F0C4FC0028F4D15A -:109330000198A04201D009207CBD00207CBD000026 -:109340002DE9FF4184B0984614460F0019D0C4B1EE -:10935000002001902568AB2001AE8DF8080033464F -:109360002A4602A806F058FE00280BD133462A46AA -:10937000394604A806F00BFE002803D1049870B902 -:1093800003E00E2008B0BDE8F081074800903346A6 -:109390002A463946404601F0BBFC0028F2D101982C -:1093A00020600020EEE700002DFF0200F8B5164611 -:1093B00007000FD076B16BB11C460D4606F008FED3 -:1093C000002806D120780849012805D0022803D0BA -:1093D0000720F8BD0E20F8BD0091231D3246294616 -:1093E000384603F041FBF8BD598702002DE9FC41E6 -:1093F0001F460C46050009D02CB1002001902878AA -:1094000001AEA82804D00720BDE8FC810E20FBE7B0 -:109410000120134601903246284606F078FD0028C8 -:10942000F2D1084800903B4632462146284601F0DA -:1094300041FC0028E8D10198A04201D00920E3E7CF -:109440000020E1E7AD93020013460A460146A8203A -:1094500005F048BC2DE9FC479846DDF828900C46FD -:10946000050009D02CB100260196287801AFA0286C -:1094700004D00720BDE8FC870E20FBE7012013463F -:1094800001903A46284606F0A3FD0028F2D10D4887 -:10949000009043463A462146284601F00BFC00283E -:1094A000E8D14B463A4621462846009601F002FC98 -:1094B0000028DFD10198A04201D00920DAE700207E -:1094C000D8E7000079A802002DE9FF4184B0984652 -:1094D00014460F0019D0C4B1002001902568A020C7 -:1094E00001AE8DF8080033462A4602A806F094FD26 -:1094F00000280BD133462A46394604A806F047FD1A -:10950000002803D1049870B903E00E2008B0BDE82C -:10951000F0810748009033462A463946404601F01C -:10952000F7FB0028F2D1019820600020EEE7000050 -:109530002DFF02002DE9F8431F46DDF820800C4680 -:10954000050009D02CB10020009028786E46A7288D -:1095500004D00720BDE8F8830E20FBE70120134666 -:1095600000903246284606F0D2FC0028F2D13B4655 -:1095700032462146284606F0CAFC0028EAD1434676 -:1095800032462146284606F0C2FC0028E2D1009867 -:10959000A04201D00920DDE70020DBE713460A46A0 -:1095A0000146A72005F09EBB2DE9FC479946DDE961 -:1095B0000A8A0C46050009D02CB1002601962878AD -:1095C00001AFAA2804D00720BDE8FC870E20FBE7E6 -:1095D0000120134601903A46284606F098FC0028E0 -:1095E000F2D11148009043463A462146284601F000 -:1095F00061FB0028E8D14B463A46214628460096B2 -:1096000001F058FB0028DFD153463A462146284650 -:1096100006F0A6FC0028D7D10198A04201D009206D -:10962000D2E70020D0E700000FFF02002DE9FF4342 -:1096300083B099460E9E14465FEA01081AD0CCB159 -:10964000002001902768AA2001AD8DF808002B4664 -:109650003A46414602A806F0DFFC00280BD12B4613 -:109660003A46414603A806F092FC002803D103982D -:10967000C0B903E00E2007B0BDE8F0830B480090AE -:109680002B463A464146304601F042FB0028F2D1D3 -:1096900046B1009531883B464246484601F032FAD1 -:1096A0000028E8D1019820600020E4E72DFF0200A7 -:1096B0002DE9FC479846DDE90A790C46050009D0FA -:1096C0002CB100200190287801AEA92804D00720F1 -:1096D000BDE8FC870E20FBE70120134601903246CF -:1096E000284606F014FC0028F2D1434632462146B3 -:1096F0002846009703F0F3FE0028E9D14B46324696 -:109700002146284606F02CFC0028E1D10198A04211 -:1097100001D00920DCE70020DAE713460A460146BB -:10972000A92005F0DFBA2DE9FC4799460A9D0E46AF -:1097300007000AD036B10024019438780DF10408EE -:10974000A52804D00720BDE8FC870E20FBE70120F8 -:10975000134601904246384606F0D9FB0028F2D164 -:109760004B4642463146384606F0D1FB0028EAD146 -:109770002B46424631463846009401F09BFA0028B9 -:10978000E1D12B68CBB14246314638469B1C06F0EE -:10979000BEFB0028D7D14246314638462B6806F03A -:1097A000B6FB0028CFD12B684246314638461B1DF8 -:1097B000009401F07FFA0028C5D10198B04201D091 -:1097C0000920C0E70020BEE72DE9FF4184B098469C -:1097D00014460F0019D0C4B1002001902568A520BF -:1097E00001AE8DF8080033462A4602A806F014FCA4 -:1097F00000280BD133462A46394604A806F0C7FB99 -:10980000002803D1049870B903E00E2008B0BDE829 -:10981000F0810748009033462A463946404601F019 -:1098200077FA0028F2D1019820600020EEE70000CE -:109830003F9902002DE9FC411F46DDF820800C46CF -:10984000050009D02CB100200190287801AEA42891 -:1098500004D00720BDE8FC810E20FBE70120134661 -:1098600001903246284606F052FB0028F2D13B46D2 -:1098700032462146284606F04AFB0028EAD108482D -:109880000090434632462146284601F013FA00284C -:10989000E0D10198A04201D00920DBE70020D9E700 -:1098A000119902002DE9FF4184B0984614460F003B -:1098B00019D0C4B1002001902568A42001AE8DF814 -:1098C000080033462A4602A806F0A6FB00280BD162 -:1098D00033462A46394604A806F059FB002803D12E -:1098E000049870B903E00E2008B0BDE8F081074885 -:1098F000009033462A463946404601F009FA0028CE -:10990000F2D1019820600020EEE700003F990200AC -:10991000F8B51646070010D07EB173B11C460D464F -:109920009B1C06F0F4FA002806D132462946384638 -:10993000231D009403F0D3FDF8BD0E20F8BDF8B54B -:109940001D4617460E000FD075B168B10446801C45 -:1099500006F0ECFA002806D1009521883B463246F5 -:10996000606803F0D4FDF8BD0E20F8BD2DE9FC477A -:109970009846DDE90A9A0C46050009D02CB100266C -:109980000196287801AFB42804D00720BDE8FC87F1 -:109990000E20FBE70120134601903A46284606F0C8 -:1099A000B6FA0028F2D143463A462146284606F048 -:1099B000AEFA0028EAD14B463A462146284606F040 -:1099C000A6FA0028E2D153463A4621462846009698 -:1099D00001F070F90028D9D10198A04201D00920E6 -:1099E000D4E70020D2E700002DE9FF4184B098467B -:1099F00014460F0019D0C4B1002001902568B4208E -:109A000001AE8DF8080033462A4602A806F004FB92 -:109A100000280BD133462A46394604A806F0B7FA87 -:109A2000002803D1049870B903E00E2008B0BDE807 -:109A3000F0810748009033462A463946404601F0F7 -:109A400067F90028F2D1019820600020EEE70000BD -:109A50002DFF0200F8B51F460C46050008D02CB1BA -:109A60000020009028786E46B12803D00720F8BD6A -:109A70000E20F8BD0120134600903246284606F01D -:109A800046FA0028F5D13B4632462146284606F0E4 -:109A90003EFA0028EDD10098A04201D00920F8BD7F -:109AA0000020F8BD13460A460146B12005F01AB958 -:109AB0002DE9F0411646070020D0FEB1F3B11C4657 -:109AC0000D4606F024FA002819D1A31C3246294677 -:109AD000384606F01CFA002811D104F1080332467A -:109AE0002946384606F013FA002808D1231D3246CD -:109AF00029463846BDE8F04106F032BA0E20BDE8EE -:109B0000F0812DE9FE4F9A460C9C0D4606000CD0C4 -:109B100045B14FF00008CDF8048030780DF104090C -:109B2000B22804D00720BDE8FE8F0E20FBE70127F6 -:109B300013464A463046019706F0E9F90028F2D16B -:109B400053464A462946304606F0E1F90028EAD154 -:109B50000297474602AB4A4629463046CDF8008078 -:109B600001F0A8F80028DED10298D0B123684A4657 -:109B7000294630461B1D06F0CAF90028D3D16B4692 -:109B80004A462946304606F0EBF90028CBD120683A -:109B900080887C2809D8009901F046F9216808607E -:109BA00000E027600198A84201D00920BBE700200F -:109BB000B9E713460A460146B22005F093B82DE9ED -:109BC000F0411646070019D0C6B1BBB11C460D4680 -:109BD000FFF76EFF002812D104F10C03324629462C -:109BE000384606F094F9002809D104F10E033246F4 -:109BF00029463846BDE8F04106F089B90E20BDE897 -:109C0000F08100002DE9FC419846089C0D460600B5 -:109C100009D02DB100200190307801AFB02804D0D8 -:109C20000720BDE8FC810E20FBE7012013460190D0 -:109C30003A46304606F06BF90028F2D112480090FF -:109C400043463A462946304601F034F80028E8D128 -:109C50000E48009023463A462946304601F02AF83D -:109C60000028DED1206840B1416831B100897C28EC -:109C700006D801F0D9F8216848600198A84201D0BF -:109C80000920CEE70020CCE70FFF0200BF9B0200B7 -:109C90002DE9FF4184B0984614460F0019D0C4B195 -:109CA000002001902568B02001AE8DF808003346F1 -:109CB0002A4602A806F0B0F900280BD133462A46FE -:109CC000394604A806F063F9002803D1049870B956 -:109CD00003E00E2008B0BDE8F0810748009033464D -:109CE0002A463946404601F013F80028F2D101987F -:109CF00020600020EEE700002DFF02002DE9F0417A -:109D00001D4617460E001ED0EDB1E0B1044606F028 -:109D10000DF9002818D12B463A463146A01C06F012 -:109D200005F9002810D12B463A463146201D06F091 -:109D3000FDF8002808D12B463A463146A01DBDE863 -:109D4000F04106F0F3B80E20BDE8F0812DE9F047B0 -:109D500088B09A46109C0D4606000DD045B14FF0D4 -:109D60000008CDF8148030780DF11409B32805D01F -:109D7000072008B0BDE8F0870E20FAE70127134658 -:109D80004A463046059706F0C2F80028F1D15346FE -:109D90004A462946304606F0BAF80028E9D1069727 -:109DA000474606AB4A4629463046CDF8008000F0CB -:109DB00081FF0028DDD1069860B303AB4A462946EF -:109DC000304606F0CDF80028D3D107AB4A462946E5 -:109DD000304606F09CF80028CBD1BDF81C007C284A -:109DE0001CD8039901F020F8029058B1BDF81C006E -:109DF0000090019002AB4A462946304600F050FEE2 -:109E00000028B6D12168029808602168BDF81C00BE -:109E1000888000E027600598A84201D00920A8E7C3 -:109E20000020A6E713460A460146B32004F05ABFB5 -:109E30002DE9F0411646070027D036B32BB31C4658 -:109E40000D4606F064F8002820D1A31C32462946AE -:109E5000384606F05CF8002818D1231D3246294602 -:109E6000384606F0B5F8002810D1631D3246294661 -:109E7000384606F0ADF8002808D1A31D3246294621 -:109E80003846BDE8F04106F0A3B80E20BDE8F081E9 -:109E90002DE9FC411D461646040007D036B12DB110 -:109EA0002088752804D00720BDE8FC810E20FBE740 -:109EB000002000902F687520E846ADF80400434666 -:109EC0003A46314601A806F031F80028ECD1434665 -:109ED0003A463146201D06F029F80028E4D14346D1 -:109EE0003A463146A01D06F021F80028DCD1434651 -:109EF0003A46314604F1080006F018F80028D3D19C -:109F000000992960D0E72DE9FC411D461646040062 -:109F100007D036B12DB12088732804D00720BDE8C2 -:109F2000FC810E20FBE7002000902F687320E8469C -:109F3000ADF8040043463A46314601A805F0F6FF65 -:109F40000028ECD143463A463146201D05F0EEFF8D -:109F50000028E4D143463A463146A01D05F0E6FF0D -:109F60000028DCD100992960D9E72DE9FF471D467B -:109F7000914604000AD0B9F1000F07D035B120880E -:109F8000762805D0072004B0BDE8F0870E20FAE758 -:109F900000200190D5F80080762001AFADF80800D0 -:109FA0003B464246494602A805F0C0FF0028EAD1D8 -:109FB0003B4642464946201D05F0B8FF0028E2D145 -:109FC0003B4642464946A01D05F0B0FF0028DAD1C5 -:109FD0003B464246494604F1080005F0A7FF002829 -:109FE000D1D13B464246494604F1100005F09EFFA0 -:109FF0000028C8D1E6683B46424656F8040C039058 -:10A00000494603A805F0C3FF0028BCD10097218A68 -:10A0100043464A46E06800F075FD0400B3D130467F -:10A0200000F010FF019828602046ACE72DE9FE43C0 -:10A030001D461646040007D036B12DB1208874287D -:10A0400004D00720BDE8FE830E20FBE7002000902F -:10A050002F687420E846ADF8040043463A4631467E -:10A0600001A805F063FF0028ECD143463A4631468B -:10A07000201D05F05BFF0028E4D143463A463146F7 -:10A08000A01D05F053FF0028DCD143463A46314677 -:10A0900004F10C0005F04AFF0028D3D1A16869B192 -:10A0A00051F8040C0290084600F0CCFE43463A46B4 -:10A0B000314602A805F06BFF0028C3D10099296042 -:10A0C000C0E700002DE9FE431D461646040007D0F8 -:10A0D00036B12DB12088722804D00720BDE8FE8358 -:10A0E0000E20FBE7002001902F6872200DF104087C -:10A0F000ADF8080043463A46314602A805F016FF7F -:10A100000028EBD143463A463146201D05F00EFFAC -:10A110000028E3D143463A463146A01D05F006FF2C -:10A120000028DBD10648009043463A46314604F108 -:10A13000080002F0F3FC0028D0D101992960CDE796 -:10A14000FD9C02002DE9FC411D461646040007D087 -:10A1500036B12DB12088712804D00720BDE8FC81DC -:10A160000E20FBE7002000902F687120E846ADF834 -:10A17000040043463A46314601A805F0D7FE0028C0 -:10A18000ECD143463A463146201D05F0CFFE00286B -:10A19000E4D143463A463146A01D05F0C7FE0028EB -:10A1A000DCD143463A46314604F1080005F034FF5D -:10A1B0000028D3D143463A46314604F10A0005F05F -:10A1C000B5FE0028CAD100992960C7E72DE9FE43F2 -:10A1D0001D461646040007D036B12DB120887028E0 -:10A1E00004D00720BDE8FE830E20FBE7002001908D -:10A1F0002F6870200DF10408ADF8080043463A4678 -:10A20000314602A805F092FE0028EBD143463A46BB -:10A210003146201D05F08AFE0028E3D143463A4628 -:10A220003146A01D05F082FE0028DBD143463A46A8 -:10A23000314604F1100005F079FE0028D2D107481C -:10A24000009043463A46314604F1080002F066FCAD -:10A250000028C7D101992960C4E70000FD9C0200D5 -:10A260002DE9FE431D461646040007D036B12DB138 -:10A270002088772804D00720BDE8FE830E20FBE766 -:10A28000002000902F687720E846ADF80400434690 -:10A290003A46314601A805F049FE0028ECD1434674 -:10A2A0003A463146201D05F041FE0028E4D14346E0 -:10A2B0003A463146A01D05F039FE0028DCD1434660 -:10A2C0003A46314604F10C0005F030FE0028D3D1A7 -:10A2D000A16869B151F8040C0290084600F0B2FD83 -:10A2E00043463A46314602A805F051FE0028C3D144 -:10A2F00000992960C0E72DE9FC411C460D46060087 -:10A3000025D035B10027019730780DF10408682871 -:10A3100002D00720BDE8FC8101200190BAB1B4B1A0 -:10A320002068A0B113464246304605F019FE0028C9 -:10A33000F0D12346424629463046009700F0BAFC49 -:10A340000028E7D10198A84203D00920E2E70E20B7 -:10A35000E0E70020DEE700002DE9FF4184B015466C -:10A360000E9C5FEA010832D085B3002001902E6870 -:10A37000682001AF8DF808003B463246414602A8EE -:10A3800005F04AFE002823D13B463246414604A848 -:10A3900005F0FDFD00281BD1049878BBB4B13B4605 -:10A3A0003246414607A805F0F2FD002810D10021F1 -:10A3B000079A0846222A29D00DDC012A12D0022A47 -:10A3C00012D0202A1ED0212A10D11DE0FFE70E2036 -:10A3D00008B0BDE8F081232A1CD0242A1CD0252AED -:10A3E00004D115E00D4900E00D49204600913B469F -:10A3F0003246414602F04CFB0028E9D10198286022 -:10A400000020E5E70749F0E70749EEE70749ECE7F1 -:10A410000749EAE70749E8E70749E6E79D3E020002 -:10A420000F3E0200596402000965020065650200E2 -:10A43000FB630200A5650200A564020038B580B187 -:10A4400029B10023009303786C46672B01D00720C5 -:10A4500038BD0123009322B11346224605F080FD4A -:10A4600038BD0E2038BD00002DE9FC471F46060010 -:10A4700014460D4633D045B14FF00008CDF80480A6 -:10A4800030780DF10409672802D00720BDE8FC8769 -:10A49000012001901CB317B3386800B313464A4635 -:10A4A000304605F05DFD0028F0D13B464A4629467E -:10A4B0003046CDF8008000F0FDFB0028E6D1396879 -:10A4C00021B322680346222A29D00ADC012A11D0AE -:10A4D000022A11D0202A1ED0212A0FD11DE00E20E1 -:10A4E000D4E7232A1FD0242A1FD0252A19D0262AB0 -:10A4F00004D11CE0104800E010480B4600904A468A -:10A500002946304602F09CFA0028BFD10198A842A3 -:10A510000FD00920BAE70A48EFE70A48EDE70A48F2 -:10A52000EBE70A48E9E70A48E7E70A48E5E70A48A7 -:10A53000E3E70020AAE700002D3E0200EB3D020009 -:10A540002B640200C56402004D650200CB6302006B -:10A550008165020085640200C365020013460A4655 -:10A560000146672004F0BEBB38B5D0B1CAB1C3B153 -:10A570001C466B4605F02CFD002811D19DF80020EB -:10A58000217862F3000121709DF80020520862F3E7 -:10A59000410121709DF80020920862F3870121702B -:10A5A00038BD0E2038BD38B581B17BB170B10078AF -:10A5B000C0F34005044665F35F0420F00300044344 -:10A5C0008DF80040684605F027FD38BD0E2038BDE7 -:10A5D000007800F001007047F8B51546060010D06D -:10A5E0007DB173B11F460C461B1D05F090FC002881 -:10A5F00006D100903B462A462146304600F05AFBE1 -:10A60000F8BD0E20F8BD00002DE9FC411C460D46AA -:10A61000060025D02DB100200190307801AF6628CA -:10A6200002D00720BDE8FC8101200190C2B1BCB17D -:10A630002068A8B113463A46304605F068FC002869 -:10A64000F0D10948009023463A462946304600F0AA -:10A6500031FB0028E6D10198A84203D00920E1E7A8 -:10A660000E20DFE70020DDE7D9A5020013460A46E9 -:10A670000146662004F036BB38B530B12AB123B1AB -:10A680001024009405F0D5FC38BD0E2038BD08B567 -:10A6900041B13BB130B1009313460A46102105F099 -:10A6A000DEFC08BD0E2008BD2DE9FC410C46DDF89E -:10A6B0002080050009D02CB100260196287801AF32 -:10A6C000632804D00720BDE8FC810E20FBE70120B1 -:10A6D000CDE900203A46284602F031FF0028F2D1A9 -:10A6E00043463A4621462846009600F0E3FA002801 -:10A6F000E9D10198A04201D00920E4E70020E2E777 -:10A700002DE9FF4184B0984614460F0019D0C4B11A -:10A71000002001902568632001AE8DF808003346C3 -:10A720002A4602A805F078FC00280BD133462A46B9 -:10A73000394604A805F02BFC002803D1049870B911 -:10A7400003E00E2008B0BDE8F081074800903346D2 -:10A750002A463946404600F0DBFA0028F2D101983B -:10A7600020600020EEE70000A9A802002DE9FC47C8 -:10A770001D460A9C0E46070039D046B14FF000082E -:10A78000CDF8048038780DF10409642802D0072040 -:10A79000BDE8FC87012001904AB345B33CB3106883 -:10A7A00028B3286818B3206808B3134813460090EC -:10A7B0004A46384600F07EFA0028E9D12B464A4640 -:10A7C00031463846CDF8008000F074FA0028DFD119 -:10A7D00023464A4631463846CDF8008000F06AFAF2 -:10A7E0000028D5D10198B04203D00920D0E70E202F -:10A7F000CEE70020CCE7000079A802002DE9FF4158 -:10A8000084B01446DDF838800F0019D0C4B10020A0 -:10A8100001902668642001AD8DF808002B46324671 -:10A8200002A805F0F9FB00280BD12B463246394629 -:10A8300004A805F0ACFB002803D10498C0B903E0DC -:10A840000E2008B0BDE8F0812B463246394607A8F5 -:10A8500005F0E2FB0028F4D1B8F1000008D033463F -:10A860003A4600959DF81C1005F0F9FB0028E8D148 -:10A87000019820600020E4E72DE9F041164607002A -:10A880000FD076B16BB11C460D4605F040FB002899 -:10A8900008D1A31C324629463846BDE8F04105F0F0 -:10A8A00097BB0E20BDE8F0812DE9F0411D4617460B -:10A8B0000E000ED06DB160B1044605F037FB0028E4 -:10A8C00008D12B463A463146A01CBDE8F04105F0C0 -:10A8D000A3BB0E20BDE8F0812DE9FC411C460D46CE -:10A8E000060029D035B10027019730780DF1040812 -:10A8F000622802D00720BDE8FC8101200190DAB176 -:10A90000D4B11068C0B12068B0B10D4813460090B2 -:10A910004246304600F0CEF90028ECD123464246AC -:10A9200029463046009700F0C5F90028E3D1019888 -:10A93000A84203D00920DEE70E20DCE70020DAE79A -:10A9400079A602002DE9FF4184B0984614460F0015 -:10A9500019D0C4B1002001902568622001AE8DF8A5 -:10A96000080033462A4602A805F056FB00280BD102 -:10A9700033462A46394604A805F009FB002803D1CE -:10A98000049870B903E00E2008B0BDE8F0810748D4 -:10A99000009033462A463946404600F0B9F900286F -:10A9A000F2D1019820600020EEE7000019000300BA -:10A9B0007CB50C46D0B12CB100230193057801A9D8 -:10A9C000652D01D007207CBD0125019572B1156868 -:10A9D00065B1009313460A46214600F06BF9002842 -:10A9E000F1D10198A04203D009207CBD0E207CBD8E -:10A9F00000207CBD2DE9FF4184B0984614460F002D -:10AA000019D0C4B1002001902568652001AE8DF8F1 -:10AA1000080033462A4602A805F0FEFA00280BD1AA -:10AA200033462A46394604A805F0B1FA002803D176 -:10AA3000049870B903E00E2008B0BDE8F081074823 -:10AA4000009033462A463946404602F021F8002855 -:10AA5000F2D1019820600020EEE7000061AA020018 -:10AA60002DE9F0411D4617460E0016D0ADB1A0B13C -:10AA7000044605F0D1FA002810D12B463A4631465B -:10AA8000A01C05F053FA002808D12B463A4631465F -:10AA9000201DBDE8F04105F049BA0E20BDE8F08167 -:10AAA0002DE9F84F4FF00008DDE90AA681468DF840 -:10AAB000008010680F461C461546B84216D06B46FB -:10AAC000484605F07AFA9DF80000012805D00CB13F -:10AAD000C4F800800020BDE8F88F4CB1206838B180 -:10AAE000564503D829687A1AB24203D20920F2E700 -:10AAF0000E20F0E749443246F8F79EFB28683044C0 -:10AB00002860E7E72DE9F8439846089C91460D46F2 -:10AB1000060001D0012000E000208DF8000023464F -:10AB200042464946684605F077FA070006D17EB1ED -:10AB30002068A8EB0001A94202D20920BDE8F883F1 -:10AB400048442A463146F8F777FB206828442060BD -:10AB50003846F3E7184810B50178427801F00F0144 -:10AB6000FF2A16D8154B5B7A032B01D0042B01D199 -:10AB700002290ED831B101290DD002290DD00329A7 -:10AB80000DD006E00E49801CF8F77AFB08B90120C9 -:10AB900010BD002010BD0F2302E0552300E0FF236D -:10ABA000002105E04418A4789C42F2D1491CC9B2A6 -:10ABB0009142F7D3EBE7000014CD002088B30020CA -:10ABC000C000030070B5084C050009D0103421689E -:10ABD000002907D008682060496828468847F6E7BA -:10ABE0000834F4E770BD000018CE0020054A0121AA -:10ABF00020B1012805D19170FFF7E4BF517000200A -:10AC0000FAE7704718CE00202DE9F05F264841682A -:10AC1000F1B3DFF898B00E688146DBF80040876832 -:10AC20008078E11B21F07F45ED1CB0B9DFF8808012 -:10AC30004FF48030C8F84403C8F804031120F8F733 -:10AC400075FB1120F8F77DFB4FF0010AC8F800A052 -:10AC50002F2003F009FA89F802A0B54200D2354648 -:10AC6000124BE8193C3320F07F401860DBF80010ED -:10AC70005A46091B21F07F41001B20F07F40C91C70 -:10AC800081420FD9106818602F2003F0EDF900E021 -:10AC900004E0BDE8F05F1120F8F75EBBBDE8F05FAF -:10ACA00003F008BFBDE8F09FFCB30020041501408D -:10ACB000001001402DE9F8438846116881460025BF -:10ACC000089E1C4617464046414502D10920BDE872 -:10ACD000F88301466B46484605F06FF99DF8000081 -:10ACE000012803D078B10B252846F0E74CB1236842 -:10ACF0003BB1002EF8D03A4641464846B04705469B -:10AD0000F2E70E20E3E7002CEED000202060EBE716 -:10AD1000F0B41C6806460020049D671C974202D9C7 -:10AD20000920F0BC7047002E03D000BF4FF0010790 -:10AD300001E04FF000070F551C6804F101041C608E -:10AD4000EFD0002DEDD03046AC46F0BC604700009F -:10AD5000034610B504200D4A002100BFC1EB0114C9 -:10AD600004EB840402EB8404A4781CB1491C082978 -:10AD7000F4D310BDC1EB011404EB840402EB840294 -:10AD8000012090700020196010BD000094CF0020B9 -:10AD9000034610B505200C4A002100BFC1EB011489 -:10ADA00004EB840432F824409C4208D1C1EB011129 -:10ADB00001EB810102EB81010020887010BD491C6C -:10ADC0000829EBD310BD000094CF002070B50446D5 -:10ADD00005200B4B002200BFC2EB021505EB8505D9 -:10ADE00033F82560A64204D103EB8505AD78012D2B -:10ADF00003D0521C082AEFD370BD00200A6070BD3A -:10AE000094CF002000200749024600BFC0EB00138A -:10AE100003EB830301EB8303401C9A700828F5D3EE -:10AE20007047000094CF002010B50C467C2801D953 -:10AE3000002010BD024802F089FC10C010BD0000C7 -:10AE400060050300011F014802F0A2BC6005030079 -:10AE5000014802F0B5BC000060050300034610B5D0 -:10AE600004200E4A002100BF01EB410404EB011451 -:10AE700002EB8404A4781CB1491C0829F4D310BD4A -:10AE800001EB410000EB011002EB80000124847013 -:10AE900000F10C0242600020196010BDF4DC0020BB -:10AEA000034610B505200C4A002100BF01EB410408 -:10AEB00004EB011432F824409C4209D101EB410318 -:10AEC00003EB011102EB810100208870486010BD86 -:10AED000491C0829EAD310BDF4DC002070B50446F3 -:10AEE00005200B4B002200BF02EB420505EB0215CB -:10AEF00033F82560A64204D103EB8505AD78012D1A -:10AF000003D0521C082AEFD370BD00200A6070BD28 -:10AF1000F4DC002000200749024600BF00EB40039C -:10AF200003EB001301EB8303401C9A700828F5D350 -:10AF300070470000F4DC002070B5C6B01C46154612 -:10AF4000D8B1D5B1CCB10E4A40921646F822ADF830 -:10AF50000E2141AA3E92CDF808D13EAB3FAAF8F7A8 -:10AF6000ADFE002807D1DDE93E10324669DF2246FA -:10AF70002946F8F72DFF46B070BD0E20FBE7000014 -:10AF800080B300207CB51C46154680B17DB174B1FC -:10AF9000084A01920092F8F7F1FF002806D16846AE -:10AFA00002F0A4FE22462946F8F7F7FF7CBD0E20EA -:10AFB0007CBD000080B300203EB51C46154688B11C -:10AFC00085B17CB101AA009289B26A46F9F7F7F916 -:10AFD000002806D100986DDF22462946009BF9F72C -:10AFE0000DFA3EBD0E203EBD3EB51C46154678B15D -:10AFF00075B16CB101AA00926A46F9F731FA0028DE -:10B0000005D100986CDF22462946F9F74BFA3EBD80 -:10B010000E203EBD70B596B01C4615460E4610B3C8 -:10B020000DB304B306A902911F210EAA8DF80C10CE -:10B0300004928DF8141005AA04A9CDE9001203ABFF -:10B0400002AA3146F9F797FA00280AD19DF8143080 -:10B050009DF80C10049A029872DF22462946F9F7EF -:10B06000B9FA16B070BD0E20FBE730B589B01C46AA -:10B070001546A8B1A5B19CB106AA039202AA0092F6 -:10B0800001AB6A46F9F7EEFA002807D19DF80410E3 -:10B09000009873DF22462946F9F718FB09B030BD46 -:10B0A0000E20FBE730B41D46144638B134B12DB143 -:10B0B00074DF2A46214630BCF9F70EBB30BC0E20A7 -:10B0C00070477CB51C46154688B185B17CB101AA94 -:10B0D000009289B26A46F9F705FB002806D100986C -:10B0E00079DF22462946009BF9F71EFB7CBD0E2026 -:10B0F0007CBD38B51C46154670B16DB164B16A4669 -:10B10000F9F748FB002806D1BDF8000078DF224699 -:10B110002946F9F75EFB38BD0E2038BD30B589B041 -:10B120001C461546C0B1BDB1B4B104AA019201AA32 -:10B13000009289B203AB02AAF9F751FB002809D1AA -:10B140009DF80C10BDF80800019A80DF22462946C0 -:10B15000F9F788FB09B030BD0E20FBE77FB51C4630 -:10B16000154698B195B18CB102AA00926B4601AA1E -:10B17000F9F77EFB002807D1BDF8040000997EDFB7 -:10B1800022462946F9F7A6FB04B070BD0E20FBE766 -:10B190007FB51C46154698B195B18CB102AA0092B4 -:10B1A0006B4601AAF9F716FC002807D1BDF8040088 -:10B1B000009975DF22462946F9F73EFC04B070BDC0 -:10B1C0000E20FBE73EB51C46154698B195B18CB1F3 -:10B1D00002AA00926B4601AAF9F784FC002808D164 -:10B1E000BDF80400009987DF23462A460099F9F745 -:10B1F000A5FC3EBD0E203EBD30B58DB01C461546AB -:10B20000F0B1EDB1E4B106AA029208AA03920AAA2B -:10B21000049205AB04AACDE9002303AB02AAF9F717 -:10B220000BFD00280AD10DF1080C9DF814309CE8A4 -:10B2300007008CDF22462946F9F752FD0DB030BDDC -:10B240000E20FBE730B41D46144638B134B12DB1A1 -:10B250008DDF2A46214630BCF9F7E8BC30BC0E2011 -:10B26000704730B589B01C461546D0B1CDB1C4B1D8 -:10B2700004AA029206AA019201AA009289B202AB24 -:10B2800003AAF9F7A3FD002809D1DDE90121BDF8E2 -:10B290000C0090DF22462946019BF9F7D1FD09B049 -:10B2A00030BD0E20FBE70000F0B5E3B01C461546AC -:10B2B0008E4660B35DB354B3002201AE4FAB2FAFE7 -:10B2C0000DF5B471C2EBC20C0CEB021CB44443F894 -:10B2D00022C007EB021C41F822C0521CD2B2082A3D -:10B2E000F0D3CDE9573159A9009158AB57AA71460F -:10B2F000F9F7DCFD002808D1DDE957019DF864214C -:10B300006FDF22462946F9F74FFE63B0F0BD0E20ED -:10B31000FBE730B5C3B01C461546B0B1ADB1A4B122 -:10B3200001AA3F9241AA409240AB3FAAF9F742FEE0 -:10B33000002808D1DDE93F017DDF0094DDE93F12FF -:10B340002B46F9F767FE43B030BD0E20FBE730B562 -:10B35000C3B01C461546D8B1D5B1CCB142AA3F9274 -:10B3600001AA4092F822ADF8042141AA009240AB14 -:10B370003FAAF9F791FE002808D1BDF80421DDE9C4 -:10B380003F017CDF22462946F9F7BCFE43B030BDC1 -:10B390000E20FBE77CB51C46154688B185B17CB113 -:10B3A00001AB6A46F9F7B4FE002808D19DF80410F5 -:10B3B000BDF8000076DF22462946F9F7D3FE7CBDB2 -:10B3C0000E207CBD30B58DB01C461546C8B1C5B148 -:10B3D000BCB109AA019204AA029202AA009289B2FF -:10B3E00001AB03AAF9F752FF002808D1DDE90112E9 -:10B3F000BDF80C0085DF22462946F9F78BFF0DB01A -:10B4000030BD0E20FBE77CB51C46154688B185B1E2 -:10B410007CB101AB6A46FAF715FE002808D19DF809 -:10B420000410BDF8000082DF22462946FAF734FEF8 -:10B430007CBD0E207CBD30B58BB01C46154698B146 -:10B4400095B18CB102AA00926B4601AAFAF72AFEC6 -:10B45000002807D1BDF80400009981DF2246294663 -:10B46000FAF750FE0BB030BD0E20FBE730B59FB0B1 -:10B470001C461546C8B1C5B1BCB114AA019203AAB5 -:10B48000029201AA009202AB13AAFAF74DFE00281D -:10B4900009D1DDE90121BDF84C0083DF23462A46AE -:10B4A0000199FAF781FE1FB030BD0E20FBE730B5E1 -:10B4B00099B01C461546C0B1BDB1B4B104AA019201 -:10B4C0000EAA029202AA009201AB03AAFAF7A2FE08 -:10B4D000002808D1DDE90112BDF80C0084DF224606 -:10B4E0002946FAF7D7FE19B030BD0E20FBE73EB56E -:10B4F0001C46154690B18DB184B102AA00926B46EC -:10B5000001AAFBF779F8002807D1BDF804000099DB -:10B510008FDF22462946FBF7A1F83EBD0E203EBD37 -:10B520003EB51C46154688B185B17CB101AA009292 -:10B5300089B26A46FBF7C8F8002806D100987BDF7D -:10B5400022462946009BFBF7E3F83EBD0E203EBD98 -:10B550003EB51C46154678B175B16CB101AA009292 -:10B560006A46FBF70BF9002805D100987ADF2246DE -:10B570002946FBF727F93EBD0E203EBD30B587B00A -:10B580001C461546A0B19DB194B101AA009203AA30 -:10B59000029289B26A46FBF71BF9002806D100988F -:10B5A00071DF22462946009BFBF734F907B030BD16 -:10B5B0000E20FBE730B587B01C46154690B18DB123 -:10B5C00084B101AA009203AA02926A46FBF7ACF981 -:10B5D000002805D1009870DF22462946FBF7C6F9FE -:10B5E00007B030BD0E20FBE73EB51C461546A0B1A6 -:10B5F0009DB194B102AA009289B26B4601AAFBF7F1 -:10B60000BBF9002808D1BDF8040000998EDF22465E -:10B610002946009BFBF7E0F93EBD0E203EBD7FB5FD -:10B620001C461546B0B1ADB1A4B103AA009202AB5D -:10B6300001AAFBF707FA00280AD19DF80C209DF813 -:10B640000810BDF8040088DF22462946FBF733FACC -:10B6500004B070BD0E20FBE738B51C46154670B12E -:10B660006DB164B16A46FBF72CFA002806D1BDF82B -:10B67000000089DF22462946FBF742FA38BD0E203A -:10B6800038BD3EB51C46154678B175B16CB101AAFE -:10B6900000926A46FBF774FA002805D100988ADF09 -:10B6A00022462946FBF792FA3EBD0E203EBD30B43D -:10B6B0001D46144638B134B12DB18BDF2A462146E0 -:10B6C00030BCFBF789BA30BC0E20704730B595B05E -:10B6D0001C461546F0B1EDB1E4B108AA02920DAADC -:10B6E000039211AA049204AB03AACDE9002389B204 -:10B6F00002AB07AAFBF776FA002809D102A890E866 -:10B700000E00BDF81C0086DF22462946FBF7C0FA72 -:10B7100015B030BD0E20FBE72DE9F04188B01D4685 -:10B720001646884607003DD0DEB3D5B3002005900D -:10B7300006A8039005A8FFF70BFB002833D1059856 -:10B740002349C0EB001000EB800001EB8004201DBA -:10B7500004F1240202906260059A04ABC2EB02126B -:10B7600002EB820201EB820101F14002A26017327A -:10B77000E26010322261413262611C324261173252 -:10B78000EB31C0E9062102A903A8CDE90001224658 -:10B7900041463846FBF786FB002804D1029828B1C1 -:10B7A00009E0FFE70E2008B0BDE8F0812088FFF730 -:10B7B000EFFA0028F7D1DDE9023220889DF8101059 -:10B7C0007FDF2A463146029BFBF7BCFBEBE700001C -:10B7D00094CF002038B51C46154670B16DB164B1E8 -:10B7E0006A46FBF7ABFC002806D19DF9000077DF25 -:10B7F00022462946FBF7C1FC38BD0E2038BD0000AB -:10B80000F0B599B01C4615460E4600B3FDB1F4B133 -:10B8100000226B460DF13801C2EBC2071F4441F80C -:10B820002270521CD2B2082AF6D3169117AB16AA70 -:10B830003146FBF7A9FC002807D19DF85C1016984B -:10B840006EDF22462946FBF7EDFC19B0F0BD0E2055 -:10B85000FBE73EB51C461546A8B1A5B19CB1002337 -:10B86000029302AB009301AA89B26B46FBF792FDEB -:10B87000002807D1BDF80400009998DF2246294628 -:10B88000FBF7BAFD3EBD0E203EBD30B587B01C466D -:10B890001546D8B1D5B1CCB10022049204AA0192C8 -:10B8A00005AA029202AA009289B201AB03AAFBF791 -:10B8B000E9FD002808D1DDE90112BDF80C0099DF8F -:10B8C00022462946FBF722FE07B030BD0E20FBE7DB -:10B8D00030B58BB01C461546D8B1D5B1CCB104AB50 -:10B8E00001930B23ADF8083002AB009303AA89B291 -:10B8F00001ABFBF711FE002809D1BDF80820BDF807 -:10B900000C0001999BDF22462946FBF737FE0BB05E -:10B9100030BD0E20FBE73EB51C46154698B195B1EB -:10B920008CB102AA009289B26B4601AAFBF72CFEE9 -:10B93000002807D1BDF80400009996DF2246294669 -:10B94000FBF750FE3EBD0E203EBD3EB51C461546E3 -:10B9500098B195B18CB102AA009289B26B4601AA46 -:10B96000FBF768FE002807D1BDF80400009997DFB7 -:10B9700022462946FBF78CFE3EBD0E203EBD7CB51F -:10B980001C46154690B18DB184B189B201AB6A46AF -:10B99000FCF7E1FB002808D1BDF80410BDF8000059 -:10B9A0009EDF22462946FCF7FEFB7CBD0E207CBDB7 -:10B9B0007CB51C46154688B185B17CB16A4601ABA1 -:10B9C000FCF727FC002808D1BDF80410BDF80000E2 -:10B9D0009DDF22462946FCF744FC7CBD0E207CBD41 -:10B9E00030B585B01C461546C0B1BDB1B4B104AA8E -:10B9F000019201AA009289B203AB02AAFCF752FCA1 -:10BA0000002809D1BDF80C10BDF80800019A94DF98 -:10BA100022462946FCF77EFC05B030BD0E20FBE730 -:10BA20007FB51C461546B8B1B5B1ACB103AE01AA9D -:10BA300002AB89B20096FCF773FC00280AD1BDF86E -:10BA40000C20BDF80810BDF804009ADF22462946F4 -:10BA5000FCF79AFC04B070BD0E20FBE73EB51C4617 -:10BA6000154698B195B18CB102AA009289B26B4685 -:10BA700001AAFCF78FFC002807D1BDF8040000994B -:10BA800095DF22462946FCF7B3FC3EBD0E203EBDA5 -:10BA900030B5C3B01C461546E0B1DDB1D4B10023CA -:10BAA0003F9340933FAB3D93F423ADF802313EAA60 -:10BAB000CDF804D189B23DABFCF7EEFC002807D1EC -:10BAC000BDF8F8003D999CDF22462946FCF712FD9F -:10BAD00043B030BD0E20FBE730B587B01C4615469D -:10BAE000D8B1D5B1CCB104AA019205AA029201AA9B -:10BAF000009202AB03AAFCF703FD00280BD1DDE99D -:10BB00000121BDF80C00ACDF0199009122462946C5 -:10BB1000029BFCF72BFD07B030BD0E20FBE770B594 -:10BB2000ADF58E6D1C4615460E46F0B3EDB3E4B38D -:10BB300002AACDF830240DF58962CDF838241032F0 -:10BB4000CDF83C24121DCDF84024121D4FF4007195 -:10BB5000CDF84424ADF83614343ACDF80C24ADF8C1 -:10BB60002014383282A9CDF81824CDF82814121DDB -:10BB70000DF58361CDF81C24CDF810143831CDF8C3 -:10BB800008144039603ACDE900120B1F0A1D3146F6 -:10BB9000FCF7E8FE00280FD10DF20C41BDF81404AB -:10BBA00006C9DDF80834A2DF00E008E02246294695 -:10BBB000DDF80834FCF71CFF0DF58E6D70BD0E200E -:10BBC000FAE730B5ADF50D7D1C46154620B31DB323 -:10BBD00014B384AA829289AA84928AAA859201AA1D -:10BBE00088924FF40072ADF818228BAA819281AA34 -:10BBF000009282AB83AAFCF739FF002809D1DDE966 -:10BC00008121BDF80C02A3DF22462946819BFCF767 -:10BC100067FF0DF50D7D30BD0E20FAE77CB51C46A3 -:10BC2000154690B18DB184B16A4601AB89B2FDF77A -:10BC30002DFA002808D1BDF80410BDF80000ADDFD2 -:10BC400022462946FDF74AFA7CBD0E207CBD70B520 -:10BC5000ADF5087D1C4615460E46D0B1CDB1C4B138 -:10BC60004FF4007282ABADF818228093694686AA21 -:10BC7000CDE9842180AB81AA3146FDF771FA002815 -:10BC800008D1BDF804028099A6DF809929B18B689C -:10BC900004E00E200DF5087D70BD002322462946E4 -:10BCA000FDF78CFAF6E730B585B01C461546C8B1ED -:10BCB000C5B1BCB104AA019201AA009289B203AB3A -:10BCC00002AAFDF7B1FA00280AD1BDF80C10BDF8A0 -:10BCD0000800019AA1DF22462946019BFDF7DAFA06 -:10BCE00005B030BD0E20FBE77CB51C46154680B183 -:10BCF0007DB174B101AA00926A46FDF701FB0028EC -:10BD000006D10098ABDF22462946009BFDF718FBC1 -:10BD10007CBD0E207CBD30B5ADF5077D1C461546BB -:10BD2000D0B1CDB1C4B182AA80924FF40072ADF807 -:10BD30001222CDF814D280AB81AAFDF757FB002860 -:10BD400007D1BDF804028099A8DF22462946FDF7F5 -:10BD50007BFB0DF5077D30BD0E20FAE730B587B0CF -:10BD60001C461546D8B1D5B1CCB10022049204AA24 -:10BD7000029205AA019201AA009202AB03AAFDF762 -:10BD800069FB002809D1DDE901219DF80C00A0DF45 -:10BD900022462946019BFDF797FB07B030BD0E20D8 -:10BDA000FBE77FB51C461546B0B1ADB1A4B103AAFF -:10BDB000009202AB01AAFDF7BDFB00280AD1BDF835 -:10BDC0000C20BDF80810BDF80400A7DF2246294664 -:10BDD000FDF7E4FB04B070BD0E20FBE730B5ADF518 -:10BDE000077D1C46154618B315B30CB302AA829200 -:10BDF0004FF40072ADF8182286AA839285AB83AA0D -:10BE0000CDE9002382AB84AAFDF7CEFB00280CD13C -:10BE1000DDE98212BDF81002859BAADF83990091AB -:10BE200022462946829BFDF701FC0DF5077D30BDBA -:10BE30000E20FAE730B5ADF5077D1C461546F8B182 -:10BE4000F5B1ECB102AA82924FF40072ADF80C2267 -:10BE500085AB83AACDE9002382AB84AAFDF728FC39 -:10BE600000280AD1BDF80C22BDF81002859B8299EA -:10BE7000A9DF22462946FDF750FC0DF5077D30BDB0 -:10BE80000E20FAE730B5ADF5077D1C461546E0B14A -:10BE9000DDB1D4B184AA819201AA859281AA0092CF -:10BEA00089B283AB82AAFDF73EFC00280AD1BDF817 -:10BEB0000C12BDF80802819AA5DF22462946819B13 -:10BEC000FDF782FC0DF5077D30BD0E20FAE700007E -:10BED00030B5ADF5077D1C461546F8B1F5B1ECB1AE -:10BEE0000F4A89B283AB1268849201AA859284AA10 -:10BEF000819281AA009282AAFDF79CFC00280AD1B7 -:10BF0000BDF80C12BDF80802819AA4DF224629462A -:10BF1000819BFDF7C7FC0DF5077D30BD0E20FAE7CC -:10BF2000F4FF020030B589B01C46154680B17DB1E2 -:10BF300074B102AA019289B201AB04AAFEF7DBF93F -:10BF4000002806D10498212805D0222808D105E030 -:10BF50000E2009B030BD07A9039101E005A90291A7 -:10BF6000019968DF0199009122462946049BFEF75A -:10BF7000F3F9EEE7F0B587B01D4616460C4607000C -:10BF800013D096B18DB14FF0FF300090A1B26A4648 -:10BF90003846FEF753FA002808D102A8019000980D -:10BFA000212805D0222808D105E00E2007B0F0BDD9 -:10BFB00006A8039001E004A80290A1B201AB6A4672 -:10BFC0003846FEF751FA0028F0D1DDE9000167DFBD -:10BFD0002A463146FEF7C2FAE8E7000030B585B0E0 -:10BFE0001C46154658B355B34CB303AA019201AB96 -:10BFF0006A46FEF709FB00281FD10198A8B102A8E4 -:10C00000FEF72CFF002818D10298BDF8002000EBA5 -:10C01000400101EB00110B4820F82120019A00EBB0 -:10C02000810092880281001D01900146BDF8000048 -:10C0300066DF22462946FEF719FB05B030BD0E200B -:10C04000FBE70000F4DC002030B589B01C46154643 -:10C05000E0B1DDB1D4B110228DF8082004AA03921A -:10C0600008AA019201AA009203AB02AAFEF71CFBE8 -:10C07000002809D19DF80800019A039963DF224640 -:10C080002946019BFEF73CFB09B030BD0E20FBE7C3 -:10C0900030B58BB01C46154618B315B30CB310223F -:10C0A0008DF8102004AA029205AA019209AA03920F -:10C0B0000022099201AA009289B202AB03AAFEF7FC -:10C0C00055FB00280BD1DDE90210019A64DF0199CC -:10C0D00000919DF8103022462946FEF78FFB0BB0E9 -:10C0E00030BD0E20FBE730B587B01C461546B0B119 -:10C0F000ADB1A4B102AA019206AA009289B26B4620 -:10C1000001AAFEF7E9FB002807D1DDE9001062DF94 -:10C1100022462946009BFEF715FC07B030BD0E20D5 -:10C12000FBE73EB51C46154688B185B17CB101AA36 -:10C13000009289B26A46FEF73BFC002806D10098BF -:10C1400065DF22462946009BFEF754FC3EBD0E20CB -:10C150003EBD30B58DB01C46154688B185B17CB169 -:10C16000CDF830D00CAA00F0E9FB002806D10C98DD -:10C1700043DF224629460C9B00F002FC0DB030BD87 -:10C180000E20FBE7F0B480B17AB173B105780B4EA5 -:10C19000002400BF16F83470AF4209D106EBC40486 -:10C1A000646844B1A446F0BC60470E20F0BC704700 -:10C1B000641C502CEED30620F8E70000C8010300F1 -:10C1C00030B587B01C461546E8B1E5B1DCB106AA2A -:10C1D000029202AB03AACDE9002389B204AB05AAFF -:10C1E000FDF7C4FB00280CD1BDF80C20BDF81010E1 -:10C1F000BDF81400029BB4DF22462946029BFDF7DE -:10C20000F3FB07B030BD0E20FBE77CB51C4615469E -:10C2100090B18DB184B189B201AB6A46FDF71AFCC9 -:10C22000002808D1BDF80410BDF80000B1DF224697 -:10C230002946FDF737FC7CBD0E207CBD30B587B0AC -:10C240001C461546C0B1BDB1B4B104AA019201AA01 -:10C25000009289B203AB02AAFDF753FC002809D172 -:10C26000BDF80C10BDF80800019AB2DF224629463D -:10C27000FDF79FFC07B030BD0E20FBE730B589B05D -:10C280001C461546D0B1CDB1C4B103AA019205AA8E -:10C29000029202AA009289B201AB04AAFDF7B2FC95 -:10C2A000002809D1DDE90112BDF81000B0DF2246F7 -:10C2B0002946019BFDF7ECFC09B030BD0E20FBE7E1 -:10C2C00030B587B01C461546C0B1BDB1B4B104AAA3 -:10C2D000019201AA009289B203AB02AAFDF736FDD2 -:10C2E000002809D1BDF80C10BDF80800019AB3DF91 -:10C2F00022462946FDF796FD07B030BD0E20FBE72C -:10C3000010B540B13AB133B189B202F003FB002855 -:10C3100000D132DF10BD0E2010BD7CB51C46154685 -:10C3200080B17DB174B101AA00926A4603F0A8F908 -:10C33000002806D1009849DF22462946009B03F0D9 -:10C34000BFF97CBD0E207CBD38B54A7A0F4B62B177 -:10C3500000220A725969002906D001228DF80020B6 -:10C36000ADF802006846884738BD0A7A62B19B681A -:10C370004C68024619462046F7F786FB0028F3D0A2 -:10C38000BDE8384002F0A6BC5B68F1E7F8CC0020BD -:10C390002DE9FC430024099E1D4617468846814628 -:10C3A000ADF800408DF8044056B14DB1286838B161 -:10C3B0003968A8EB0100032804D20920BDE8FC83FA -:10C3C0000E20FBE76B464146484603F08FFD308860 -:10C3D000BDF80010884201D20C20EFE701AB3A46CD -:10C3E0004146484603F0E9FD9DF8040008B10024E9 -:10C3F0000EE0BDF8000030802C600EE028683A4660 -:10C4000000EB44034146484603F070FD641CA4B2AF -:10C41000BDF800008442F1D334800020CEE710B58F -:10C42000044612B11088002211E04FF6FF70FAE7BF -:10C43000030A43EA0023A05C5840C0F303135840AA -:10C4400080EA003080B2C3B280EA4310521C8A42B4 -:10C45000EED310BD2DE9F05F884C0E46174614F858 -:10C46000381F02F03F0201F0C00111434AC414F822 -:10C470003B2C443C032A01D0042A03D1032B01D1D5 -:10C48000FF22E2630125A5724FF00008A4F80E8098 -:10C49000227862B14FF0030A4FF0040948B1032833 -:10C4A0004AD0012A51D0E5810220BDE8F09F052045 -:10C4B000FBE700F0DFF956B1012E11D0022E14D0A7 -:10C4C000032E23D0042E24D0052E25D0A9E0002F42 -:10C4D00055D1C4F8388084F809A084F80580A7E015 -:10C4E000032F4CD8B801A063A2E0012F02D0022F85 -:10C4F00045D104E084F809A084F8058002E084F8BE -:10C5000009906571BDE8F05F02F02CBA012F36D8B2 -:10C510008EE0A7BB06200BE04FF4FF7047B144F25A -:10C520009021012F06D0022F02D0032F79D101E0F4 -:10C53000E0817DE0E1817BE0012AB4D0A08940F474 -:10C540000040E08100F096F972E0032B04D0272E22 -:10C5500002D9E5810120A8E74246A4F80C80012811 -:10C5600002D002280CD063E040F201114448F6F7F3 -:10C570007CFE012002F050FA84F8009058E050E070 -:10C58000E36BFF2B04D0FF2902D9E58103208CE760 -:10C590003B48DFF8F0B04FF002084170022B14D096 -:10C5A00003DC3BB1012B3CD10BE0032B1DD0FF2B57 -:10C5B00037D11EE000F8022B0A463349F6F73CFE5D -:10C5C00008E000F8025B0F2202E000F8028B55221F -:10C5D000F6F744FE002002F01FFA627A0020A16BF9 -:10C5E000042A27D0032A27D027E000F8029BFF2245 -:10C5F000EEE7304637B1012F04D0022F0ED0032FC3 -:10C6000016D111E0002002F007FA00F041F8CBF853 -:10C610000052CBF8005084F800A009E000F0BAF80E -:10C6200004E0E581042040E700F0A4F80028F8D0F9 -:10C6300000203AE7582000E0502000EBC101042A16 -:10C6400000D149080020F93140F27122401C4243D8 -:10C650009142F9D840F271214843A169C1F84005DF -:10C660000A4801F5A0710160011DC1F800B007483A -:10C670000C38056084F80080DAE7000088B30020F9 -:10C6800014CD002000100040C000030010F5014050 -:10C6900002494FF4007008607047000050160040D7 -:10C6A000034900238A7A8B72C9890160104670475A -:10C6B00088B300204AB1012A0BD0022A0DD0032AE8 -:10C6C0000FD0042A11D0002070470B4A02600820C6 -:10C6D0000EE00A4A026009200AE0094A02600A20C4 -:10C6E00006E0084A02601A2002E0074A02601B20A6 -:10C6F000087001207047000000800040009000405A -:10C7000000A0004000A0014000B0014010B503F0BF -:10C7100017F810B902F026F908B1042010BD064838 -:10C72000002101228172027081630448016841F096 -:10C7300010010160002010BD88B3002010ED00E062 -:10C7400078B104280DD0D8280BD0EC2809D0F028D7 -:10C7500007D0F42805D0F82803D0FC2801D00328FE -:10C7600003D1032903D0042901D0042070470020FD -:10C770007047000006490978012901D90020704757 -:10C7800003490246491C01F11700FFF793BF00005F -:10C7900088B3002040B210F0300F01D040F0C0004C -:10C7A000044940B20A78012A01D900207047486143 -:10C7B0000120704788B300202DE9F341002684B0A2 -:10C7C0003746344604A803F01FFA002818D1FFF7B3 -:10C7D0009DFFA0B9DFF8948000F064F80546244876 -:10C7E0006946012290F800C018F80C301BB1001DFA -:10C7F00001F070FE02E00C3001F0DEFC18B1032005 -:10C8000006B0BDE8F08157B119485C380068304483 -:10C81000A84206D29DF800002E460402DCE701275C -:10C82000F8E79DF8000000270443A00BC4F305219E -:10C83000C4F3850204F00303FFF70CFE02A8FFF720 -:10C840002FFF0028C8D002980122000A8DF80400AA -:10C8500001A9074801F0C2F802988DF804000122EE -:10C8600001A9034801F0BAF8B6E70000CCB30020F4 -:10C870007CB4002010B500F013F8074801240460D0 -:10C880000549002008310860091D086002F0F4F82D -:10C890000248047010BD000008F5014088B3002074 -:10C8A000704700002DE9F0471F48016841F0100172 -:10C8B00001601E4D0127DFF878801E4C40F20119FF -:10C8C000002600BFD5F80C01B0B1C5F80C610120FD -:10C8D000F6F721FD207804280ED16F60D8F800000B -:10C8E000012805D1FEF736F910B1A089401CA081BE -:10C8F00049461148F6F7B9FCA069D0F8401111B1CA -:10C90000C0F84061DEE7D0F844010028DAD0A06921 -:10C91000C0F8446194F90100F6F7FDFC2069401C61 -:10C920002061BDE8F087000010ED00E0001000403D -:10C930000014004088B3002014CD00201CB50C4624 -:10C9400040B12CB100210191037801A9432B03D000 -:10C9500007201CBD0E201CBD01230193074B009333 -:10C9600013460A462146FEF7A5F90028F3D101989F -:10C97000A04201D009201CBD00201CBD1DDA020010 -:10C980002DE9FF4184B0984614460F0019D0C4B178 -:10C99000002001902568432001AE8DF80800334641 -:10C9A0002A4602A803F038FB00280BD133462A465A -:10C9B000394604A803F0EBFA002803D1049870B9B3 -:10C9C00003E00E2008B0BDE8F08107480090334630 -:10C9D0002A4639464046FEF79BF90028F2D10198D5 -:10C9E00020600020EEE7000055DA02000E4910B585 -:10C9F0000A784C780023A24212D0521CD2B20A709C -:10CA0000022A00D10B70084A0B780C3252F823200E -:10CA100002608868104420F07F408860012010BDCB -:10CA20000360002010BD0000FCB30020034890F814 -:10CA30003400401C00F0070070470000B4B4002030 -:10CA400030B4029C1CB113B1A44630BC604730BC6A -:10CA50000E20704730B4029C1CB113B1A44630BC08 -:10CA6000604730BC0E20704730B4029C1CB113B13B -:10CA7000A44630BC604730BC0E20704730B4029CE6 -:10CA80001CB113B1A44630BC604730BC0E207047C7 -:10CA900030B4029C1CB110B1A44630BC604730BC1D -:10CAA0000E20704730B4029C1CB110B1A44630BCBB -:10CAB000604730BC0E20704730B4029C1CB110B1EE -:10CAC000A44630BC604730BC0E20704730B4029C96 -:10CAD0001CB110B1A44630BC604730BC0E2070477A -:10CAE00030B4029C1CB110B1A44630BC604730BCCD -:10CAF0000E20704730B4029C1CB110B1A44630BC6B -:10CB0000604730BC0E20704730B4029C1CB110B19D -:10CB1000A44630BC604730BC0E20704730B4029C45 -:10CB20001CB110B1A44630BC604730BC0E20704729 -:10CB300030B4029C1CB110B1A44630BC604730BC7C -:10CB40000E2070472DE9F84F0746007801265B4C10 -:10CB50004FF6FF724FF603494FF0000E01280ED03A -:10CB6000022873D18DF800E06846F6F7E1FFA0785F -:10CB700000286CD001286BD0022868D18FE0B968FA -:10CB8000BB890D7888885FEA951C00D0104691F823 -:10CB900001C091F80380654491F802C047F6043B58 -:10CBA000C444654415F0FF0F47F6025A12D14845B8 -:10CBB00001D0584506D1072B00D01046897911299C -:10CBC00008D108E047F60161884201D0504501D103 -:10CBD000062B00D01046804675468DF800E068466A -:10CBE000F6F7A6FFA8F5F640043838D0B0F5FF7F79 -:10CBF0001AD0A0F50070FD3805D000F5FF70B0F533 -:10CC0000004F33D119E0A4F80CA0A078032805D177 -:10CC1000A6702563656325706570E57000F050F8B7 -:10CC2000012000F099FA21E0A07801281ED102200D -:10CC3000A070A4F80C90A57218E0A078012815D077 -:10CC4000A07A30B1A4F80CB0E67004E033E02EE036 -:10CC50001FE0A4F80C9000F033F8A67206E0A0786C -:10CC6000022803D10320A070267066709DF8000092 -:10CC7000F6F782FFB86802F085FBA07803281AD186 -:10CC8000E078002817D000F079FBBDE8F84F00F0FD -:10CC90009BB947F60160A08100F012F804E0A4F807 -:10CCA0000C9000F00DF8A672012000F055FA9DF8E6 -:10CCB0000000F6F761FFBDE8F88F0000B4B4002073 -:10CCC0002DE9F041244D002488B0A5F12C002C70F2 -:10CCD000818947F60160A046A5F11806814203D07C -:10CCE00047F60250814205D11B490224183903F04E -:10CCF00009F90EE04FF603401127814203D047F6B1 -:10CD00000430814205D114490324183903F0FAF89C -:10CD1000B7700F2040EA0410691C03F0F3F80E48C6 -:10CD200000F052FBE8700420ADF80800019503966E -:10CD3000ADF81040CDF81880ADF81C8006AA03A904 -:10CD400001A802F03DFB002802D00020F6F782FD8A -:10CD500008B0BDE8F0810000E0B4002030B5234CFD -:10CD600087B004F1240594F8340094F8301040EAB8 -:10CD7000C10040F0C0002870608A0E2141EA001016 -:10CD800080B2691C03F0BEF8284600F01DFBE87075 -:10CD9000002204212846FFF742FBADF800006A4656 -:10CDA000618AE069FFF73BFBADF8000004F10E017A -:10CDB00003F0A8F804200195ADF80800E06903909D -:10CDC000608AADF8100004F10E0005900220ADF865 -:10CDD000180005AA03A901A802F0F2FA002802D05F -:10CDE0000020F6F737FD07B030BD0000B4B40020D6 -:10CDF000064890F83410491C002301F00701C36174 -:10CE0000416363F3070002F03DBA0000B4B40020B0 -:10CE100010B5806802F0B6FA002804D0BDE81040D2 -:10CE20000020F6F717BD10BD38B5054600248DF873 -:10CE300000406846F6F77CFE29460D4800F0DAFE11 -:10CE400010B10020F6F706FD0A484179427A1142F6 -:10CE500008D044719DF80000F6F78EFEBDE838401A -:10CE600000F00AB89DF80000F6F786FE38BD000015 -:10CE700088050300B4B4002010B586B05FF000044C -:10CE80008DF8104004A8F6F753FE002269460A48C0 -:10CE900000F04AFE40B10949012048719DF8100098 -:10CEA000F6F76AFE06B010BD9DF81000F6F764FEB6 -:10CEB000684600F005F8E3E788050300B4B40020F5 -:10CEC0002DE9F0413F4C0346204694F801C0028A08 -:10CED000C16B0327022601258069BCF1050F6BD2C7 -:10CEE000DFE80CF067032B445C00187801281CD1A4 -:10CEF0001879022819D19A6894F83070107800F0E7 -:10CF00000700874213D1A571E26398892082062821 -:10CF100002D80020F6F79EFC238A65F307009B1FCA -:10CF200063F30F0102F0AEF96670BDE8F0810420F2 -:10CF30006070084602F026FA14E01D78002DF4D146 -:10CF40001B79012BF1D130B1091D921FF6F774F94D -:10CF5000E06B02F017FA677094F83000401C00F0A4 -:10CF600007002063BDE8F041F6F730BC19780129CD -:10CF7000DBD11979012902D0022915D0D5E738B1C2 -:10CF8000931F66F30707014663F30F02384601E07B -:10CF900067F3070002F076F96570C6E71878012894 -:10CFA00002D118790128F7D09868BDE8F04102F065 -:10CFB000E9B9A0780328B8D1BDE8F0410020F6F720 -:10CFC00049BC0000B4B4002038B500248DF80040FE -:10CFD0006846F6F7ADFD0D4800F076FE0C494A793B -:10CFE0004B7A1A4203D010B18878032804D09DF8F8 -:10CFF0000000F6F7C1FD38BD4C719DF80000F6F752 -:10D00000BBFDBDE83840FFF737BF000088050300CF -:10D01000B4B400201FB502208DF8000000208DF868 -:10D0200004006846FFF78EFD05488178032905D185 -:10D03000C078002802D0684600F0D6F81FBD000076 -:10D04000B4B400207FB5434D04780121AB78EA7871 -:10D050007CB1012C1AD0022C17D18DF80010017868 -:10D060008DF80410416802910089ADF80C00E9B90F -:10D0700019E08DF8001000788DF80400032B04D11E -:10D08000002A02D0684600F0AFF87FBD8DF800108E -:10D0900000788DF80400032BF7D1002AF5D06846FC -:10D0A000FFF7C2FE7FBD0020F6F7D4FBBDF80C00F1 -:10D0B00010B90020F6F7CEFBBDF80C400298042C06 -:10D0C0003BD3407800F00F01052906D00A1E07D097 -:10D0D0000E290FD00F2A39D02FE002F069FA7FBD58 -:10D0E000A878032802D1E8780028CBD1029802F072 -:10D0F00049F97FBD029E042C1FD9327853061CD5F6 -:10D1000013061AD50E2918D11044B178F2781144BB -:10D11000084410F0FF0F10D100223046A11EFFF787 -:10D120007EF9311931F8021C884206D1A87803280B -:10D13000DCD1E8780028D9D0B1E7029802F022F9D2 -:10D140000028D6D00020F6F785FB7FBD6846FFF7A4 -:10D15000F9FC7FBDB4B4002030B50D494FF4003266 -:10D160000124C1F8082388B1FA235843094BC0EBC6 -:10D1700040151D601D6805EB90001860CC60002014 -:10D18000C1F844010C60C1F8042330BD4C6030BDCF -:10D1900000A0004044A500401049092008600F4944 -:10D1A00000200C390860091D08600D480121C1608C -:10D1B0004160891EC0F808134FF40031C0F8041311 -:10D1C0004FF0E0210015C1F88002064B402283F8A1 -:10D1D0000024C1F8000100207047000010A50040A5 -:10D1E00000A000400AE000E038B5054600248DF8B4 -:10D1F00000406846F6F79CFC29460D4800F0FAFC12 -:10D2000010B10020F6F726FB0A480179427A114254 -:10D2100008D004719DF80000F6F7AEFCBDE8384078 -:10D2200000F00AB89DF80000F6F7A6FC38BD000033 -:10D2300074050300B4B4002010B586B05FF000049C -:10D240008DF8104004A8F6F773FC002269460A48DE -:10D2500000F06AFC40B10949012008719DF81000F6 -:10D26000F6F78AFC06B010BD9DF81000F6F784FCB6 -:10D27000684600F005F8E3E774050300B4B4002045 -:10D280002DE9F0413C4D04460427287801264FF053 -:10D29000050806286AD2DFE800F066031523355C2E -:10D2A000207818B1012816D1207916E020790028BD -:10D2B00011D1FFF753FD0020FFF74EFF0220C5F804 -:10D2C00038802BE02078012805D1207928B9012069 -:10D2D000FFF742FF2F70BDE8F08102282DD0FAE75A -:10D2E00020780128F7D120790028F0D00228F2D147 -:10D2F000A06801F0FDFB00B30020FFF72DFF85F8CB -:10D3000000801AE0207801280AD00228E3D1A86B17 -:10D31000401EA86316D0FFF721FD03202870DAE72E -:10D3200020790228D7D1A06801F0E2FB28B10020C3 -:10D33000FFF712FFFFF75CFD2E702046BDE8F041BD -:10D34000FFF766BD062262F30700EA6901F09AFF63 -:10D3500007E020780128BED120790028BDD1FFF751 -:10D3600047FD2E70B7E7A8780328B4D1BDE8F04197 -:10D370000020F6F76FBA0000B4B4002038B50024DE -:10D380008DF800406846F6F7D3FB0D4800F09CFC92 -:10D390000C490A794B7A1A4203D010B188780328D5 -:10D3A00004D09DF80000F6F7E7FB38BD0C719DF83E -:10D3B0000000F6F7E1FBBDE83840FFF73DBF000095 -:10D3C00074050300B4B400200178427880781144D9 -:10D3D0000844C043401CC0B270470000084A002106 -:10D3E00001EB810332F82330834204D101EB810049 -:10D3F00002EB80007047491C0829F1D300207047D8 -:10D4000058CC002070B50D46044600684FF4887172 -:10D4100000F0BDFD4FF49071206800F0B8FD4FF4AE -:10D420009271206800F0B3FD4FF4A271206800F003 -:10D43000AEFD20681249C0F8041320686907000B8C -:10D4400040B2090E002806DA00F00F0000F1E020DB -:10D4500080F8141D03E000F1E02080F8001420683B -:10D460000121000B40B200F01F02914040098000F2 -:10D4700000F1E020C0F88012C0F8001170BD00007B -:10D4800010030200F0B58488A518944200D8224603 -:10D49000A41AC288D6189A4200D81346D21A4B88CA -:10D4A0000788BB420CD34088834209D88888A042B1 -:10D4B00006D3A84204D8C888904201D3B04201D90B -:10D4C0000020F0BD0120F0BD0268134602E08A4250 -:10D4D00004D01268002AFAD10B60016070472DE970 -:10D4E000FC471E460A9C17468846814625882346E7 -:10D4F00002F00DFD002808D120883346CDE9005008 -:10D500003A4641464846FDF7CBFABDE8FC87FFB5F1 -:10D5100081B01D4616460A9C074623462A463146D8 -:10D5200002A802F003FD002807D12B4632460094E2 -:10D53000BDF808103846FDF7E5FA05B0F0BD2DE955 -:10D54000FC471E460A9C1746884681462578234696 -:10D5500002F03EFD002808D120783346CDE9005086 -:10D560003A4641464846FDF79BFABDE8FC87FFB5C1 -:10D5700081B01D4616460A9C074623462A46314678 -:10D5800002A802F049FD002807D12B46324600943C -:10D590009DF808103846FDF7B5FA05B0F0BD00005B -:10D5A0002DE9F047394E002780463D46DFF8E090F0 -:10D5B000D6F804A057E003D00446D0F81C8035E02C -:10D5C00099F8002002EB4201521CD2B289F80020E7 -:10D5D00009EBC10199F80230091D9A4201D189F87D -:10D5E000005048680A780446012A12D0022A02D064 -:10D5F000032A3BD108E002F031F900B1012725747C -:10D6000034E00574C06900E070680028F9D17060EA -:10D610002CE0207C50BB88686060C868A060086906 -:10D62000E0604869A061F07800B165606268B16847 -:10D63000184B501A20F07F40984202D2A16808444B -:10D6400006E0881AA16820F07F40814202D9081ABA -:10D65000206000E0256065600120A5602074204600 -:10D66000E56102F0DDF8B8F10000A4D199F80010EE -:10D6700099F801008142A3D117B97168514502D0D0 -:10D680000120BDE8F0870020FBE70000FCB300208C -:10D690007CCE0020FFFF7F002748016841F08071A9 -:10D6A00001602648016841F0010101600120810705 -:10D6B0008867234A0A214FF4FE70F6F757F908B13C -:10D6C000F6F7C8F800F0E8F818B1852801D0F6F7A9 -:10D6D000C1F8002000F0B2F8002000F011F900BFFE -:10D6E00000F096F80028FBD0164801F08FFC08B136 -:10D6F000F6F7B0F800F05EFB08B1F6F7ABF8F6F716 -:10D7000099F908B1F6F7A6F80F4801F02DFC00BF13 -:10D71000F6F70AF900F0AEFB28B1F6F753F9052841 -:10D7200001D900F0B1FB01F055FC08B1F6F792F811 -:10D7300001F000F8ECE70000FCED00E0001000E074 -:10D740002CB50020E5EE020035E7020038B50446AE -:10D7500000258DF800506846F6F7EAF921686268FE -:10D76000086890420ED9401E08600178238AE2685A -:10D7700001FB0325227A2168101AC0B20A7982427D -:10D7800000D208719DF80000F6F7F6F9284638BD7A -:10D7900038B5054600208DF800000C466846F6F7BF -:10D7A000C7F9E868298A201AB0FBF1F12A681068E5 -:10D7B000431C136001709DF80000F6F7DDF938BDD9 -:10D7C00010B530B1017A42680368891AC9B21A608B -:10D7D00006E00E2010BD03681A68541C1C6011700E -:10D7E000491EC9B2F7D2006800210171084610BD78 -:10D7F00000F180400068002800D00120704708B583 -:10D8000000F18040002101600068009008BD000028 -:10D8100008B500F029FB30B1684641DF00980028C8 -:10D8200000D0012008BD0448006800F00110B0F1EC -:10D83000011FF6D0002008BD0C040040F8B5154DBE -:10D8400004466878002648B114B161680020884712 -:10D850008DF800606846F6F76BF913E08DF800600C -:10D860006846F6F765F924B10A4821460830FFF703 -:10D870002BFE686830B900F0F7FA08B13FDF01E02D -:10D8800000F0A2FB6868401C68609DF80000F6F795 -:10D8900073F9F8BD18CE002070B50B4C207808B194 -:10D8A00085250FE00020A06060602061E0600748EF -:10D8B00000F096FB054600F0D7FA08B900F06EFBC1 -:10D8C00001202070284670BD18CE0020EDAB02006C -:10D8D00038B500258DF800506846F6F729F9074C51 -:10D8E000E068401EE060E06810B900F0AFFBA57092 -:10D8F0009DF80000F6F740F938BD000018CE002072 -:10D90000F8B5134D0446A878002648B114B16168F3 -:10D91000012088478DF800606846F6F709F90EE0A7 -:10D920008DF800606846F6F703F924B108482146EF -:10D930001030FFF7C9FDE86808B900F061FBE8683E -:10D94000401CE8609DF80000F6F716F9F8BD0000ED -:10D9500018CE0020F0B505460478154889B0164663 -:10D9600040F82420124A0869121DA2F1080742F863 -:10D970002400487F385520226846F5F75DFC049462 -:10D980002878385C48B10EB10A4A00E000226946A6 -:10D99000281D00F069FD09B0F0BD0EB1064A00E097 -:10D9A0000022694605F10C0000F09CFBF3E7000043 -:10D9B000D0B30020C9FD0200D9FB020030B40378C7 -:10D9C000054CE35C1BB130BC001D00F083BD30BCD6 -:10D9D0000C3000F0F1BB0000CCB3002030B4037871 -:10D9E000054CE35C1BB130BC001D00F0F5BD30BC44 -:10D9F0000C3000F075BC0000CCB3002030B40378CC -:10DA0000054CE35C1BB130BC001D00F0E5BD30BC33 -:10DA10000C3000F065BC0000CCB300202DE9F843C9 -:10DA200016465FEA000813D096B18BB110271C464A -:10DA30000D46009702F0FDFA002807D104F110030B -:10DA4000324629464046009702F0F3FABDE8F883D3 -:10DA50000E20FBE708B549B143B138B10093134636 -:10DA60000A461021203002F0FAFA08BD0E2008BD47 -:10DA700070B541EA4201DDE904564FF0A04441EAA5 -:10DA8000830141EA052104EB800041EA0641C0F828 -:10DA9000001770BD70B541EA4201DDE904564FF050 -:10DAA000A04441EA830141EA052104EB800041EAF8 -:10DAB0000641C0F8001770BD1CB5002100910B464F -:10DAC00001220191FFF7D4FF1CBD1CB5002100917C -:10DAD0000B4601220191FFF7DDFF1CBD1CB50022A2 -:10DAE0000B46009211460192FFF7C2FF1CBD1CB508 -:10DAF00000220B46009211460192FFF7CBFF1CBD9E -:10DB00001CB5002100910B46012201911146FFF73F -:10DB1000AFFF1CBD1CB5002100910B4601220191F5 -:10DB20001146FFF7B7FF1CBD2DE9F8430446002757 -:10DB300090460E468DF800706846F5F7F9FF2046CE -:10DB400000F039F838B105279DF80000F6F714F811 -:10DB50003846BDE8F88320680568B8F1000F05D1A4 -:10DB60000168204600F03FF821680860E268012A59 -:10DB70000CD0022A0ED0042A11D06068082A13D0D3 -:10DB800005FB02013046F5F757FBDDE76068405DB5 -:10DB90003070D9E7606830F815003080D4E76068ED -:10DBA00050F825003060CFE700EBC501D1E9000156 -:10DBB000C6E90001C8E7016808684968884201D1E0 -:10DBC000012070470020704701680A684968806832 -:10DBD000884201D9491C00E00021914201D1012075 -:10DBE0007047002070478068884201D9481C704700 -:10DBF000002070472DE9F84304464FF000080E4618 -:10DC00008DF800806846F5F793FF2046FFF7DCFFAC -:10DC100007000AD0207C40B14FF004089DF80000B6 -:10DC2000F5F7AAFF4046BDE8F883206845684168DB -:10DC30002046FFF7D8FF2168486037B120680168A7 -:10DC40002046FFF7D0FF21680860E268012A14D05F -:10DC5000022A16D0042A19D0082A1CD0606831463E -:10DC600005FB0200F5F7E8FA204600F06FFE216898 -:10DC70008A688242D2D28860D0E76168307848559D -:10DC8000F2E76168308821F81500EDE761683068D7 -:10DC900041F82500E8E7D6E90001626802EBC50219 -:10DCA000C2E90001E0E738B5054600248DF80040E0 -:10DCB0006846F5F73DFF28680460446084609DF87D -:10DCC0000000F5F759FF38BD38B5044600208DF83F -:10DCD00000006846F5F72CFF204600F037FE0446AA -:10DCE0009DF80000F5F748FF204638BD60DF0028AA -:10DCF00002D1024A012111707047000027B50020AF -:10DD000030B51548ADF5037D0078002821D04FF4DB -:10DD1000FE7500BFADF8085282A9684661DF38B1D0 -:10DD2000052816D00DF5037DBDE83040F5F792BD0E -:10DD30006C460A497FA800F0EDF806E0D0E9002122 -:10DD4000204690477FA800F0FCF881980028E1D099 -:10DD5000F4E70DF5037D30BD27B50020180503005D -:10DD6000F8B5134C2078C0B10120A07000F084FFFA -:10DD7000112814D0022000F097FF00258DF80050E4 -:10DD80006846F5F7D5FE11DF064625709DF80000C0 -:10DD9000F5F7F2FE2EB13046F8BD0820F8BD0020A0 -:10DDA000F8BDA57001F026FC032000F07DFFF6E72A -:10DDB00024B500207CB5204C207808B108207CBD1B -:10DDC0000120A070002000F057FF112819D000207A -:10DDD00000F06AFF19480026006801908DF8006085 -:10DDE0006846F5F7A5FE164901A810DF05000AD020 -:10DDF000002020709DF80000F5F7BEFE2DB12846EA -:10DE00007CBD00207CBD0120F3E7A6706670072171 -:10DE1000162000F0C9FE08B1F5F71CFD07211520FA -:10DE200000F0C2FE08B1F5F715FD01F0FFFB01207F -:10DE300000F03AFFE5E7000024B50020AC04030041 -:10DE40000D3802000EB50749684600F063F805E09A -:10DE5000D0E900108847684600F073F8029800285F -:10DE6000F6D10EBDC80403000148007870470000D9 -:10DE700024B50020034801784078814381F00100F7 -:10DE80007047000024B5002070B50C4C60782178F4 -:10DE9000084212D01620F5F77BFC002530B14FF078 -:10DEA000E0214FF48000C1F8000203E042F20100DB -:10DEB000F5F7D0FC01F0BAFB657070BD24B5002009 -:10DEC0001FB5684648DF30B1052814D004B0BDE85E -:10DED0001040F5F7BFBC084901A800F01BF806E0A8 -:10DEE000D0E900210098904701A800F02AF8039893 -:10DEF0000028E6D0F4E71FBD3405030010B5044C3C -:10DF00002078002803D001F075FB0120607010BD5F -:10DF100024B50020016009684160AFF3008010B5AE -:10DF2000D0E900215368994201D1002104E0D1E9F0 -:10DF30000034A34202D01946816010BD083141600F -:10DF4000F0E7816800290BD0026892680A44826079 -:10DF500041684B689A4203D108314160FFF7DFBF47 -:10DF600070474058002800D00120704708B50022B3 -:10DF700042504058009008BDD0F80403084000D03B -:10DF8000012070474058002800D00120704708B594 -:10DF9000002242504058009008BD00000848006828 -:10DFA000012110F0010F08D14FF0E020E02280F8AD -:10DFB0000024C0F88012C0F80011024801607047C8 -:10DFC00000E100E01805004010B54FF48070FFF745 -:10DFD00016FC01208107C1F80403086010BD000091 -:10DFE0000649024600200B790BB1852070470A6074 -:10DFF00001220A7100224A7170470000D8B3002044 -:10E0000070B54FF48270FFF7FAFB02204107C1F8A8 -:10E0100004030B4B196841F08070186009480268CE -:10E0200042F00104046044684FF40A554668361B08 -:10E03000AE42FBD30260196003490120086070BD45 -:10E04000FCED00E0001000E0080000400449012061 -:10E05000086004480168C1F300410029FAD1704703 -:10E060000C00004018040040002802D00149800143 -:10E0700008477047C10103000121B1EB507F01D176 -:10E08000012070470020704738B50D4600F052FC63 -:10E09000040014D000208DF800006846F5F748FD14 -:10E0A000207928B19DF80000F5F766FD112038BDF4 -:10E0B0000120256020719DF80000F5F75DFD00202E -:10E0C00038BD10B500F036FC002802D000210160F8 -:10E0D000017110BD0149024801F0E2BD2CCE0020C3 -:10E0E000002000402DE9F0410546007916460F4614 -:10E0F00000EB40012D4A01EBC00102EB810494F8D2 -:10E100002A1011B10820BDE8F081294951F82010EA -:10E110002868FFF7B9FF08B11120F4E7394628460F -:10E12000F5F744FD66603869206030004FF0010665 -:10E130002FD03F7F4FF48E712868FFF717FF4FF401 -:10E14000A2712868FFF712FF28681A49C0F8041363 -:10E1500028684FEA4711000B40B2002806DA00F0A9 -:10E160000F0000F1E02080F8141D03E000F1E02032 -:10E1700080F800142868000B40B200F01F0206FA75 -:10E1800002F14009800000F1E020C0F88012C0F8E0 -:10E19000001128680421C0F800150020A061E0618A -:10E1A00084F8290044F8140FA675ACE72CCE0020A3 -:10E1B000ECFF0200800002002DE9F05F05460079C7 -:10E1C0004FF4017600EB400303EBC000344B03EB4C -:10E1D00080040020636813B12B68C3F80863A36947 -:10E1E0004FF000096BB1E06938B1606810B1286880 -:10E1F000C0F804631120BDE8F09FE26101202161B5 -:10E2000005E0C4F82490A261E160C4F81C9094F881 -:10E210002910014302D1284600F0B6FC60680028AE -:10E22000286803D0C0F804630020E4E74FF4A27626 -:10E230003146FFF79BFEB2464FF4927B5946286861 -:10E24000FFF78FFE06464FF484712868FFF789FEBA -:10E25000804651462868FFF784FE074648EA0700D3 -:10E260003043EBD056EA070007D12146286800F07A -:10E270005BFCA169606A8142E0D8C4F818900EB1D5 -:10E280000320B8E70FB10F20B5E794F8291001205B -:10E290000029296801D00860C6E74860C4E700008B -:10E2A0002CCE002070B5044600790C4D00EB4001E7 -:10E2B00001EBC00005EB800090F8290000280CD18C -:10E2C000204600F061FC2179012001EB410202EBC4 -:10E2D000C10105EB810181F8290070BD2CCE002021 -:10E2E0002DE9F047054600790B4600EB400101EBB4 -:10E2F000C000234901EB8004284600F043F810B128 -:10E300001120BDE8F0874FF00008C4F82080A3601A -:10E31000626184F828804FF48E764746314628683B -:10E32000FFF724FE28684FF00109C0F80890214645 -:10E33000286801F0CFFB606800BBD5F800A00EE0B4 -:10E3400094F8280008B10F2716E031465046FFF731 -:10E3500008FE0028F4D02146504601F0BBFB216A9C -:10E3600060698142F1D331462868FFF7FAFD002841 -:10E37000F9D02868C0F80C90C4F814803846C0E77B -:10E380002CCE0020007900EB400101EBC0000449D5 -:10E3900001EB80004069002800D001207047000098 -:10E3A0002CCE00202DE9F047044600794FF00009FB -:10E3B00000EB400101EBC000254901EB800720681C -:10E3C000C0F80095786880B120682249C0F8081329 -:10E3D00020680121000B40B200F01F02914040096B -:10E3E000800000F1E020C0F880112068D0F80C25F2 -:10E3F000D0F81485D0F80865D0F810554FF0FF31EB -:10E40000C0F81415C0F80C152068C0F80815C0F83D -:10E410001015501C02D01046FFF74EFBB8F1FF3F1D -:10E4200002D04046FFF748FB681C02D02846FFF7A1 -:10E4300043FB701C02D03046FFF73EFB2068FFF71D -:10E4400040FE87F82A90C7F80490BDE8F0870000E6 -:10E450002CCE0020840202000149024801F0CCBC0D -:10E4600058CE0020002000402DE9F0410546164618 -:10E4700000790F46154A00EBC00102EB810494F8C5 -:10E48000201011B10820BDE8F081114951F8201089 -:10E490002868FFF7F9FD08B11120F4E7394628464E -:10E4A000F5F7C8FB6660386920601EB1397F2846E1 -:10E4B000FEF7A8FF28680821C0F800150020A06119 -:10E4C000E0610121606184F82010DCE758CE002073 -:10E4D000F0FF02002DE9F05F044600790E4600EBE4 -:10E4E000C001DFF8F0A017460AEB81053046FFF7C0 -:10E4F000C3FDB0B168684FF000084FF4047910B163 -:10E500002168C1F80893A8694FF0000B80B1E86951 -:10E5100048B1686810B12068C0F804931120BDE8C4 -:10E52000F09F1020FBE7EF614FF001082E6102E041 -:10E53000EE60C5E9067B00254FF488712068FFF77F -:10E5400026FD4FF4A2712068FFF721FD2068C0F876 -:10E550003465C0F838752068B8F1000F12D0D0F8D3 -:10E56000001241F02001C0F800122079D04600EBE3 -:10E57000C0010AEB8100406838B12068C0F80493FC -:10E580002846CCE701210160EFE74FF4887A4FF489 -:10E59000A27951462068FFF7F5FC074649462068F6 -:10E5A000FFF7F0FC06464FF492712068FFF7EAFC93 -:10E5B000014647EA06000843EBD0227902EBC2038A -:10E5C00008EB8302C2F818B001B10325002ED7D0A2 -:10E5D0000F25D5E758CE00202DE9F04704460E461A -:10E5E0000079204900EBC00001EB8005174630465A -:10E5F000FFF742FD30B1204600F036F820B111207F -:10E60000BDE8F0871020FBE76F61AE604FF49076B5 -:10E61000002731462068FFF7BAFC4FF4AC7841463A -:10E620002068FFF7B4FC2068AA686969C0F844252F -:10E63000C0F84815206801218160686878B9B14642 -:10E6400049462068FFF79EFC064641462068FFF7D2 -:10E6500099FC0643F4D000B10F27002068613846CA -:10E66000CEE7000058CE00200079054900EBC0003D -:10E6700001EB80004069002800D0012070470000B5 -:10E6800058CE00202DE9F04704460079274900EBD9 -:10E69000C00001EB800720684FF00009C0F800952A -:10E6A000786880B120682249C0F8081320680121E9 -:10E6B000000B40B200F01F0291404009800000F1C1 -:10E6C000E020C0F880112068D0F80C25D0F814851F -:10E6D000D0F80865D0F810554FF0FF31C0F80C1590 -:10E6E000C0F814152068C0F80815C0F81015501CA3 -:10E6F00002D01046FFF7E9F9B8F1FF3F02D04046DB -:10E70000FFF7E3F9681C02D02846FFF7DEF9701C1A -:10E7100002D03046FFF7D9F92068FFF7D2FC87F81E -:10E720002090C7F80490BDE8F087000058CE002084 -:10E730001003020010B5FFF797FB08B13EDF10BDD4 -:10E7400020BF40BF20BF10BD70B51D46049C0E46C3 -:10E75000034642B13DB134B129682068091A052940 -:10E7600003D2092070BD0E2070BD411C21601354DE -:10E7700020688118304601F0EAFB216808442060D7 -:10E780002860002070BD00002DE9F05F5E4D00267E -:10E790000B464FF0050B3446C0B2297804276BF3C3 -:10E7A00007044FF003084FF002094FF0010A072851 -:10E7B00063D2DFE800F00413535E7A828900687840 -:10E7C00003285AD16F70514800F092FC08B1F5F758 -:10E7D00041F83146204661F3070048E020469AB2EE -:10E7E0006AF30700B2F5007F19D8012902D0042985 -:10E7F0000ED042E032466B6811469847444800F01C -:10E8000079FE08B1F5F726F885F80090BDE8F09F8D -:10E8100032466B681146984785F800B0F6E7012943 -:10E8200002D004290DD028E032466B681146984783 -:10E83000002000F05FFE08B1F5F70CF885F80080C5 -:10E84000E4E732466B6811469847002000F052FE1C -:10E8500008B1F4F7FFFF06202870D7E702290CD192 -:10E8600020462F7069F30700194662F30F063246FF -:10E8700045E0032906D006290ED0BDE8F05F002050 -:10E88000F4F7E8BF204632466B6868F3070011468C -:10E89000984785F800A0B9E7204632466B6868F3D0 -:10E8A0000700114698472F70B0E7324620461146C0 -:10E8B00067F3070062F3070121E02046314667F362 -:10E8C00007006AF30701D2E767F307046878A046F8 -:10E8D00069F307061C46032802D0022905D00BE085 -:10E8E0006F70104600F004FC03E02F70104600F03B -:10E8F000B5FB08B1F4F7AEFF2246314640466B68DF -:10E90000BDE8F05F18470000ACB4002074DF0020C1 -:10E9100074E1002028B111B10078322803D007201B -:10E9200070470E207047012901D009207047002050 -:10E93000704700000349884201D103487047002016 -:10E940007047000000200040E0B3002001680A6822 -:10E950004968914201D3881A70478068801A084438 -:10E96000401C704770B52A4C617A6069FDF7E8FE7B -:10E97000012510B1E581042070BD00F07DF8254926 -:10E98000606908602348617A001D016021481830E1 -:10E99000026822F0FF0202600368A26A43EA12637F -:10E9A000036010021B4A103210601A4824300560C0 -:10E9B000184A002020321060207AA27940EA022012 -:10E9C000144A28321060032901D004290CD120797F -:10E9D000E178000440EA0120A1780843617940EA27 -:10E9E00001600C490831086094F8240094F8201064 -:10E9F000400640EA0160A18B40EA0140E17940EA2B -:10EA00000120044940F0FF000C310860002070BD77 -:10EA100088B300200C15004010B50446FDF740FFF8 -:10EA20001149124AC86A1060121D086B1060086C08 -:10EA3000022202EB40000D4A303A1060121F0C48CF -:10EA400010600C4A0020C2F800010323C2F8003213 -:10EA500024B1C2F80C010120506010BD486903497F -:10EA60002C39086010BD000088B300203815004024 -:10EA700014CD0020001000400B49032008600B4912 -:10EA80000020C1F80002C1F810010122C1F81020D5 -:10EA9000D1F81021002AFBD0C1F8100148600860AD -:10EAA000034988817047000008F5014000100040CC -:10EAB00088B3002070B5012670044FF0E0210025D6 -:10EAC000C1F88001084C4010C4F84803C4F808039A -:10EAD00066602F20FFF7C8FAA660044C2F20A560BF -:10EAE000FFF7C2FAA57070BD00100140FCB3002012 -:10EAF00010B5017842788378C0780A4418441044ED -:10EB000010F0FF0F0ED1C1F3C204FDF78FFFA0423A -:10EB100006D0FDF78BFF401C00F00700A04201D19A -:10EB2000012010BD002010BD70B5054688690C4657 -:10EB300000284FF4847128460AD0FFF717FAD5F859 -:10EB40001805626AE1688854606A401C606270BDA2 -:10EB5000FFF70CFAD5F8180570BD1FB501238DF825 -:10EB60000030CDE90121D0E90012684690471FBD71 -:10EB70001FB501238DF800308DF808100192D0E9FF -:10EB80000012684690471FBD10B5044600684FF458 -:10EB90009271FFF7EBF94FF484712068FFF7E6F903 -:10EBA00020680121016010BD70B50D460446F4F7E0 -:10EBB000EFFD70B12846F4F7FDFD68B16807000E5F -:10EBC000002C0CDA04F00F0101F1E02181F8140DA2 -:10EBD00009E042F2010070BD42F2020070BD04F192 -:10EBE000E02484F80004002070BD000010B5FFF799 -:10EBF000E1F802490020087010BD0000A8B4002010 -:10EC000038B50021012548B101280CD0032809D1CD -:10EC1000FFF7C4F9BDE83840FEF75ABE4FF0E020D8 -:10EC2000C0F8805138BD8DF800106846F4F780FFB9 -:10EC3000064C207808B9FEF72FFEE068401CE06023 -:10EC4000A5709DF80000F4F797FF38BD18CE00209E -:10EC500010B503280CD1F4F7C7FE0021054A084679 -:10EC6000F4F704FE002803D0BDE81040F4F7F2BD2D -:10EC700010BD0000EDEB02003EB5044609496846B0 -:10EC8000FFF748F908E000BFD0E90021204690478F -:10EC900030B16846FFF755F902980028F4D13EBD1F -:10ECA00011203EBDB00403003EB504460849684645 -:10ECB000FFF730F907E000BFD0E900212046904778 -:10ECC0006846FFF73EF902980028F5D13EBD0000E6 -:10ECD000BC04030002498969002900D00847704735 -:10ECE000F8CC002010B51C460B462AB124B121688F -:10ECF000052903D2092010BD0E2010BD1070511C33 -:10ED0000184601F024F9401C2060002010BD0000CE -:10ED10001CB5040002D10E20F4F79CFD00200190E8 -:10ED20000090694601A800F0C5F9042820D008B178 -:10ED3000F4F790FD019A02206B4602F8010B00984F -:10ED40000021401E00902046F5F72DF9062812D02C -:10ED500008B1F4F77FFD0098401C81B20090019843 -:10ED600000F0E0F908B1F4F775FDF4F717FE1CBDEB -:10ED700000F0F2F8D5E7019800F0BAF908B1F4F71D -:10ED800069FD0248F4F766FD1CBD0000FECADDBA4D -:10ED900010B54188074AF4F769FD08B1F4F75AFD48 -:10EDA000F4F710FE002803D1BDE81040FFF7A6B825 -:10EDB00010BD000011ED02007FB50E4604000DD01D -:10EDC0007EB10020029001902578039001A902A84D -:10EDD00000F070F9042806D040B123E00E2004B002 -:10EDE00070BD0920FBE700F0B7F8EFE702990120BA -:10EDF00001AB08700198029A401E019031462046EE -:10EE0000521CFDF7BFF906280BD10C48F4F722FD80 -:10EE100003A8029A009001AB06212846521CFFF776 -:10EE200093FC08B10320DAE70198401C81B20190FD -:10EE3000029800F077F90028F4D1D0E7FECADDBAD5 -:10EE40007CB50D46040017D0002001900090694663 -:10EE500001A800F02FF9042810D000280DD1019945 -:10EE60000420134A087000982946401E009020464E -:10EE7000F5F74AF828B118E00E207CBD00F06CF8D8 -:10EE8000E5E701996A460020491CF5F763F860B987 -:10EE90000098074A401C521E01210090117081B257 -:10EEA000019800F03FF90028E7D003207CBD000066 -:10EEB00091B40020007818B101280ED100F078BB81 -:10EEC000BFF34F8F05480168054A01F4E061114323 -:10EED0000160BFF34F8F00BFFDE770470CED00E00E -:10EEE0000400FA0510B5C0B2052813D2DFE800F01F -:10EEF00003090D131500F4F777FDBDE8104000F08D -:10EF000015B8BDE81040F4F749BD0648C0E9021243 -:10EF10000121017010BD044800E00F20BDE8104041 -:10EF2000F4F798BC98B40020FECADDBA1CB5094CB1 -:10EF3000207800280DD011DF00F05AF854F8010FA6 -:10EF40000090A188ADF804100199BDE81C40FDF7C0 -:10EF500033BC1CBD90B4002002484068002800D09B -:10EF60000047704798B4002001494860704700008E -:10EF700098B4002010B504001ED02268A188501C4F -:10EF8000491E127889B23AB1032A08D0052A0AD05C -:10EF90000A48F4F75FFC08E0FFF70EFF01E0FFF717 -:10EFA0004FFF10B106E0FFF785FF206800F056F82C -:10EFB000002800D0032010BD0E2010BDFECADDBA0F -:10EFC00010B5FBF71FFFFBF7A5FFBDE81040FBF7EF -:10EFD0003FBF0000054900200A78002A04D00870CD -:10EFE00001F10800FFF7C6BF7047000098B4002089 -:10EFF00010B500F02DFA0448002101704170416005 -:10F00000BDE8104000F032B9ACB4002010B50D4C92 -:10F0100021786278114301D0082010BD80B1012110 -:10F02000217061706060084800F046FA0028F4D052 -:10F0300000212170617061600728EED0032010BDAF -:10F040000E2010BDACB4002089E702000248012167 -:10F050000170417070470000ACB4002070B50546E7 -:10F06000002400F0F5F925B11048854203D01024A2 -:10F070000AE00E2408E00E4D2878042808D006285F -:10F0800008D0052808D0082400F0F4F9204670BD07 -:10F09000012009E0032007E0044800F02BFA0400F7 -:10F0A00001D00324F0E702202870EDE774E100208E -:10F0B000ACB4002010B502004FF0000007D031B111 -:10F0C000094C63782BB1012B05D0042010BD0E2014 -:10F0D00010BD082010BD02236370044B13604FF471 -:10F0E00000720A8010BD0000ACB4002074DF002064 -:10F0F00001004FF0000004D0084A914203D01020D4 -:10F1000070470E20704706494A78022A03D0042A25 -:10F1100001D00820704701224A70704774DF002038 -:10F12000ACB4002070B50C46050005D034B11348CE -:10F13000854205D010240DE00E240BE0072409E0E1 -:10F14000B4F5007F01D90C2404E00D4E707802283C -:10F1500002D00824204670BD00F07AF921462846E6 -:10F1600000F0E0F9040005D0112C00D0032400F0D9 -:10F1700081F9EFE703207070F9E7000074DF0020E9 -:10F18000ACB400202DE9F843364C8DF800004FF068 -:10F19000010C6178002511B1216A39B108E0C0285D -:10F1A00002D1256284F801C0BDE8F883C028FBD0F5 -:10F1B0002C4ADFF8B490E768126940F20623022671 -:10F1C00027B194F80280B8F1000F08D07AB384F820 -:10F1D00002C06261994230D3C02840D12DE031B1E4 -:10F1E000042906D099420DD3C02838D10AE06761BE -:10F1F00008E0C02806D0D2B11B48E16A30388167E8 -:10F2000078306061684600F0A7F950B1A07A002814 -:10F21000CAD16269206A9DF800101154401C206216 -:10F22000C2E76169E068814202D1E56001E016E071 -:10F230002561484689F800600AE0684600F08CF9CC -:10F240000028E3D12561A57089F80060616948460E -:10F250004160218CA9F80810616A034888476570ED -:10F26000A2E70000F4B40020DCE5002070B5044CF7 -:10F270000025256200F030F825706570A57070BD1E -:10F28000B4B40020024B1B6A002B00D01847704713 -:10F29000B4B4002070B50E4C00250E48E561A561A0 -:10F2A000FEF701FD0B481430FEF7FDFCFDF774FF7F -:10F2B00025636563257065700120FDF74DFF47F6F6 -:10F2C0000160A0810120A070E5706071607270BD66 -:10F2D000B4B4002074050300084810B50178084A4A -:10F2E000515C19B1001DFFF7CDF902E00C30FFF7BA -:10F2F00059F804490020486210BD0000680403006A -:10F30000CCB30020F4B4002010B520B10F494A6AF4 -:10F310001AB1082010BD0E2010BD48620D490C4ADC -:10F32000A1F11400FEF716FB08B1072010BD00F094 -:10F3300013F806490748012209311438FEF73EFB4D -:10F3400008B1F4F787FA002010BD0000F4B40020E3 -:10F3500011FB02007C040300094808498162002176 -:10F36000C1700722027141718171817200F12C011B -:10F37000C16002493C31016170470000E8E50020AE -:10F38000F4B4002001004FF0000007D00A4BA3F1B5 -:10F390002C02994208D1D16811B103E00E207047C8 -:10F3A000D360704708207047044B9942FBD1116924 -:10F3B0000029F7D11361704720B5002024E6002012 -:10F3C000F8B515460E4607001BD000248DF8004006 -:10F3D0006846F4F7ADFB1C490A791C48072A16D089 -:10F3E000D7E90012C0E9061200F118015EB1D6E9B2 -:10F3F0000023C0E9082345B1D5E90012C0E90A128B -:10F4000017E00E20F8BD8C60F5E70C6111E0D7E93C -:10F410000023C0E900230D4A8EB1D6E90036C0E9C9 -:10F42000023675B1D5E90023C0E904230C7100F060 -:10F43000A3FA9DF80000F4F79FFB0020F8BD94604C -:10F44000EFE71461F2E70000F4B40020ACE500201F -:10F4500038B500248DF800406846F4F769FB04488D -:10F46000C47144729DF80000F4F786FB38BD0000BB -:10F47000B4B40020F8B500252E468DF8005068463B -:10F48000F4F756FB0B4C0127E771207A08B126727E -:10F4900001259DF80000F4F76FFB6772FDF76EFF22 -:10F4A000FDF792FD002D03D0BDE8F840FDF7B2BD99 -:10F4B000F8BD0000B4B400200C4910B50A784B78B0 -:10F4C0001A4301D0082010BD28B10862FDF764FE80 -:10F4D00018B1032010BD0E2010BD0548FFF714FF22 -:10F4E0000400F9D1FFF7D6FE204610BDB4B40020C9 -:10F4F00045D002001FB50A4900248A795AB100227A -:10F500008A71886101208DF804008DF8002068461A -:10F51000FDF78AFC00E0112404B0204610BD000075 -:10F52000B4B400201FB5002438B131B1094AD36901 -:10F530002BB11124204604B010BD0E20FBE75182F0 -:10F54000D06100208DF800008DF804006846FDF7BA -:10F550004BFEEFE7B4B4002010B50478C02C0AD0FD -:10F560000C49DB2C09D00A460023927ADC2C07D008 -:10F57000DD2C0DD108E0002010BD0120887207E0CD -:10F5800032B18B72C02102E012B18B72DB210170AB -:10F59000012010BDF4B40020002805D1034901204A -:10F5A00048700020FBF70EBB7047000018CE00200B -:10F5B0000D4810B5017809B1002010BD012101707E -:10F5C000407820B9094A00210948F4F721FA08488F -:10F5D000002240F6CD410068F4F756FAFEF7C0FB72 -:10F5E000FFF7EEFC012010BDA8B400202DF70200AB -:10F5F000FCFF020010B51620F4F7CAF848B10A481B -:10F6000082684FF4800152B1016821F480010160E9 -:10F6100010BDBDE8104042F20100F4F71BB94FF0F5 -:10F62000E020C0F8801110BD88CF002070B54FF0E9 -:10F63000E0254FF480041620C5F88042F4F7A8F8BE -:10F6400070B10D4890F800044009F4F7B3F850B1D8 -:10F650000A48816869B1016841F48001016070BDA8 -:10F6600042F2010001E042F20200BDE87040F4F70E -:10F67000F1B8C5F8004170BD16E000E088CF002069 -:10F680007CB50C4640B12CB100230193057801A94B -:10F69000492D03D007207CBD0E207CBD0125CDE97E -:10F6A000003513460A462146FBF704FB0028F4D137 -:10F6B0000198A04201D009207CBD00207CBD000043 -:10F6C0002DE9FF4184B0984614460F0019D0C4B10B -:10F6D000002001902568492001AE8DF808003346CE -:10F6E0002A4602A800F098FC00280BD133462A468F -:10F6F000394604A800F04BFC002803D1049870B9E7 -:10F7000003E00E2008B0BDE8F081074800903346C2 -:10F710002A4639464046FBF7FBFA0028F2D1019809 -:10F7200020600020EEE700008FFF020010B5FFF719 -:10F730008DFCFFF7AFFDBDE81040FFF70DBE0000E8 -:10F7400010B54FF080400021C0F800110122026086 -:10F75000D0F80031002BFBD0104B98694260C2609A -:10F76000C0F80415C0F84011C0F84411C0F84811A1 -:10F77000C0F84C114FF48034C0F80443C0F80022A4 -:10F780000424C0F810455C6BC0F840454FF4827407 -:10F79000C0F8444502600020196110BD88B3002004 -:10F7A0002DE9F84F1D4C00256846D4E901A6FDF768 -:10F7B0001DF9002738B30023009A61681CE0D1F8D6 -:10F7C00000C00846944503D9ACEB02020A6015E07C -:10F7D000A2EB0C0263440760D0F80CC0C1698146FB -:10F7E000BCF1000F08D006EB030828F07F48C0E901 -:10F7F000018CC9F81C5005460029E0D128466160FB -:10F80000FDF7CEFE03E02846FDF7CAFE10B15046D4 -:10F81000FBF7FAF9E770BDE8F88F0000FCB30020B1 -:10F820000D4B10B5596831B102680C68A24204D87A -:10F83000A21A0A60C161586010BD0B4603E00B4676 -:10F84000C969121B21B10C689442F8D3A41A0C6048 -:10F850000260C161D86110BDFCB300202DE9F04108 -:10F86000144E77683D462C4603E0844204D025467A -:10F87000E469002CF9D11BE0D4B1A5420BD1F869A1 -:10F88000706040B90C49012088600021B160F070BF -:10F890002F20FEF7E9FB2168E069E86110B10268FA -:10F8A000114401607068874202D00120BDE8F081F8 -:10F8B0000020FBE7FCB30020001001407CB50646A9 -:10F8C00000240D468DF800406846F4F731F901A890 -:10F8D00000F0DEFB70B10570094946609DF8040038 -:10F8E00048709DF80000F4F747F91420F3F734FD51 -:10F8F00020467CBD04249DF80000F4F73DF9F7E7AD -:10F900007CCE00202DE9F041194D6C68002C2CD0E4 -:10F91000184800270068A968B846401A20F07F46BA -:10F920002068B0420CD82146361A0744E469087CA6 -:10F9300020B181F81080886949698847002CEFD18F -:10F9400029786878814206D1401CC0B268700228CC -:10F9500001D185F80180064869780C3040F82170A3 -:10F96000BDE8F0411420F3F7F7BCBDE8F0810000DA -:10F97000FCB30020041501402DE9F047DFF8DC90CE -:10F980000126374CA9F1180700254FF0050820780B -:10F9900018B100F067F806461AE0207980B1042813 -:10F9A00018D0052816D006281AD0A069E169006889 -:10F9B000405C491CE161C02824D0DB2825D026E02A -:10F9C000C02000F04FF8C4E90675064601202071FA -:10F9D000257034E0C02000F045F8064684F8048025 -:10F9E000D9F8000048B11D491822A1F11800F3F719 -:10F9F00023FCC9F80050257121E02079401C2071BA -:10FA0000BDE8F087DB20DC2100E0DD21217000F083 -:10FA100029F80646A069E269818891420FD80560FD -:10FA20002079012803D0207902280DD014E0B8688D -:10FA300040B10A481038C4E9060502202071002EA2 -:10FA4000A5D1DDE70420F9E7386928B10348083873 -:10FA5000C4E906050320F1E74046EFE7C4E50020CE -:10FA6000F4B4002070B5184CE278A16A8854521C96 -:10FA7000D2B2E27023790420042B0BD02379052B1A -:10FA80000AD01E2A1DD3657901233DB12072A371CE -:10FA9000002070BD0120F6E70020F4E76371E071FB -:10FAA0000A48FDF7ABFF08B1F3F7D4FE0849A06A96 -:10FAB000884202D101F11E0000E00548A06200204A -:10FAC000E070012070BD0000F4B400206804030061 -:10FAD000E8E5002070B50C4605464FF48E71FEF740 -:10FAE00045FA216AA068415C206A401C2062C5F882 -:10FAF0001C1570BD1FB500228DF800200291816891 -:10FB000001914261D0E90012684690471FBD000094 -:10FB100070B501782D4D2E4CD1B1012945D0022967 -:10FB200001D0032010E0C068810705D003212970AF -:10FB30006860616A254888472549012209312548BE -:10FB4000FDF73CFF002840D0BDE87040F3F782BECF -:10FB5000A0790026C8B1E2781E48A16AFDF74EFFE1 -:10FB600008B1F3F777FE1949A06A0C31884202D137 -:10FB700001F11E0001E015480C30A062E670E0794A -:10FB80002870207AE071A67102E06671E079287031 -:10FB90002878042802D0616A0C4888472079072811 -:10FBA00013D0BDE87040FFF7E7BE094801220930D5 -:10FBB000014604780748FDF701FF08B1F3F74AFE54 -:10FBC0002046BDE87040FFF7DDBA70BDDCE50020DF -:10FBD000F4B40020680403001FB50A4601788DF8CC -:10FBE000001041680191017A8DF80810C0680390F7 -:10FBF000044850F82210001F50F822206846904711 -:10FC00001FBD0000D4B3002070B50446407988B011 -:10FC10000A2802D9072008B070BD20221D49684675 -:10FC2000F3F70AFB207801906078009060791A4918 -:10FC30001A4E51F82000069000208DF814008DF81F -:10FC400015008DF81D0001F1580000F10C05017838 -:10FC5000715C19B1001DFEF715FD02E02846FEF7A4 -:10FC6000A1FB0D48002269465830FDF773FE0028BD -:10FC7000D1D1094858300078305C10B92846FEF7D9 -:10FC800011FB054960792C3151F8200030390860AA -:10FC90000020C0E74804030024B40020CCB30020B7 -:10FCA0002DE9FF470C4605464FF40071FEF764F955 -:10FCB00001274FF40178002618B34FF49279494692 -:10FCC0002846FEF74EF9E0B149462846FEF74EF9C0 -:10FCD000C5F8088394F8290000B96F6002208DF8F8 -:10FCE0000000D5F88004C5F880040390A069029054 -:10FCF000E0680190A661E661D4E900126846904789 -:10FD000028E004212846FEF737F918B34FF4847130 -:10FD10002846FEF726F9E8B121462846FEF704FFFB -:10FD2000616AA069884215D1E06938B1E268616A08 -:10FD3000A0612069E6616662E06008E094F829004D -:10FD400000B96F60C5F80883A661E268616A204661 -:10FD5000FEF703FF4FF48E7841462846FEF701F97F -:10FD600078B1206A6169884202D294F8280020B3F1 -:10FD700041462846FEF7FAF8616911B12046FFF7BF -:10FD8000B9FE4FF4A27841462846FEF7EAF800286B -:10FD900018D041462846FEF7E9F894F8290000B14A -:10FDA0002F60A06900280DD0A661E268616A04B0E6 -:10FDB0002046BDE8F047FEF7D0BE21462846FFF7B3 -:10FDC00089FEDEE7BDE8FF871FB50A4601788DF89A -:10FDD000001041680191017A8DF80810C068039005 -:10FDE000044850F82210001F50F82220684690471F -:10FDF0001FBD0000D4B300202DE9FF410C464FF495 -:10FE0000927705463946FEF7BDF80026C0B139465F -:10FE10002846FEF7BCF802208DF80000D5F88004D3 -:10FE2000C5F880040390D5F83C058DF80800E0681B -:10FE30000190A661E661D4E900126846904723E08C -:10FE40004FF4887739462846FEF79CF8E0B13946EA -:10FE50002846FEF79CF8D5F83C15A069884213D1D6 -:10FE6000E06960B1E268D5F8000220F02000C5F832 -:10FE70000002E069A0612069E661E06001E0A6613E -:10FE8000E2682046FEF774FE4FF4A2773946284612 -:10FE9000FEF778F860B139462846FEF778F8A06991 -:10FEA00030B1A661D5F83C152046E268FEF760FE49 -:10FEB0004FF4907739462846FEF764F8002813D0AF -:10FEC00039462846FEF763F8606900280CD0D5F85B -:10FED0004C058DF800608DF80800A06801906661FF -:10FEE000D4E9001268469047BDE8FF8130B5146838 -:10FEF000A51C8D4205D82044008818801068801CFD -:10FF0000106030BD0870000A48700220704710B5BC -:10FF10001468091B022901D2092010BD2044008861 -:10FF200018801068801C1060002010BD10B51C687F -:10FF3000121B022A01D2092010BD2144008808703A -:10FF4000000A48701868801C1860002010BD0870F6 -:10FF5000020A4A70020C8A70000EC87004207047B2 -:10FF600010B538B132B12BB11468091B042903D282 -:10FF7000092010BD0E2010BD2044C178006861F337 -:10FF80001F6018601068001D1060002010BD10B5C3 -:10FF90001C4639B130B12CB12368D21A042A03D2DD -:10FFA000092010BD0E2010BD19440068FFF7CFFFD7 -:10FFB000216808442060002010BD30B51468651C1D -:10FFC0008D4204D8005D18701068401C106030BD70 -:10FFD00010B514688C4201D1092010BD005D187065 -:10FFE0001068401C1060002010BD0000D5E0020029 -:10FFF00059E40200000200000000000054DF00206D -:020000040003F7 -:1000000017A5D84602FFFFFF00000000020001FF15 -:100010000501FFFF40420F0010B51C68944201D15A -:10002000092010BD007808551868401C1860002091 -:1000300010BD70B51446049D2BB12268891AA942DF -:1000400003D2092070BD0E2070BD11182A46184633 -:10005000F3F7F2F8206828442060002070BD70B5E6 -:100060000D46049C38B132B12CB121685B1AAB4209 -:1000700003D2092070BD0E2070BD8B1801462A46A0 -:100080001846F3F7D9F8206828442060002070BD96 -:100090000A494A788B78521CD2B2934200D100228E -:1000A0000B78934201D1002070470270487800EB32 -:1000B000400001EBC000001D704700007CCE002016 -:1000C000FFC1FBE84C90728BE7B3518963AB2323EC -:1000D00002841872AA612F3B51A8E53749FBC9CAAF -:1000E0000C18532CFD45E39AE6F15DB0B61BB4BE87 -:1000F0002A50EAE90E9C4B5E5724CCA1B759B88729 -:10010000FFE07D742648B9C5F3D9A8C4B1D59111D3 -:1001100001420C39D5B0979D28D4F29BA4FD6465AB -:10012000068C2996FEA2714DF3F82E58DB0D5A5F0E -:100130001528F57407CE25AF2B12E6D0DB2CDCC3D7 -:100140007FF03E3A13A4DCE2F96C54E2D8EAC888A6 -:100150000021869C6AD8CB4E146AF94DD27EB23209 -:1001600003C6144B7FD1B8A6797C17ACED06ADAFB2 -:100170000A947ABA03E792D7150973E86D16EEE18F -:100180003F781F9D09526EF17C362A716C7564446C -:100190008010434E35EC65270AB5FC26693F599916 -:1001A00001638AA5BF685CD33CBE0BD67683D65765 -:1001B000054A3DDD8173C9EB8A8439F4360BF700BB -:1001C0000338FDD8704700003200000001C3020070 -:1001D000490000001BC302004300000053C102009D -:1001E00062000000E7C002006300000049C0020096 -:1001F0006400000091C002006500000023C10200FD -:100200006800000025BF02006700000075BF020003 -:100210006000000085AF020066000000DDBF020044 -:100220006900000039AF0200B00000007DC202008A -:10023000B10000000BC20200B20000003DC202008B -:10024000B3000000C1C20200B4000000C1C102003E -:100250006C000000E9AF02006D000000B9AF0200C1 -:1002600070000000B5B50200710000007DB502000D -:100270006E00000001B802006F000000A9B2020089 -:100280008A00000083B602008B000000AFB60200B7 -:100290008C000000F9B102008D00000045B20200A0 -:1002A00085000000C5B3020086000000CDB6020044 -:1002B0007200000015B00200730000006BB0020075 -:1002C00074000000A5B002007500000091B10200AA -:1002D0007600000095B3020077000000D5B7020059 -:1002E00078000000F3B0020079000000C3B0020003 -:1002F0007A00000051B502007B00000021B5020029 -:100300007C0000004FB302007D00000013B3020028 -:100310007E0000005DB102007F00000019B70200FE -:10032000800000001DB1020086000000CDB6020072 -:1003300087000000C5B10200880000001FB602005F -:100340008900000059B602008200000007B40200D4 -:100350008100000037B4020084000000AFB4020046 -:10036000830000006DB402008E000000E9B50200B9 -:100370008F000000EFB402009000000063B20200A2 -:1003800094000000E1B90200950000005DBA02008F -:100390009600000017B90200970000004BB9020058 -:1003A000990000008BB802009A00000021BA0200F8 -:1003B0009B000000D1B802009C00000091BA02002E -:1003C0009D000000B1B902009800000053B802007F -:1003D0009E0000007FB90200A00000005DBD020089 -:1003E000A1000000A7BC0200A20000001FBB020089 -:1003F000A3000000C3BB0200A4000000D1BE0200A5 -:10040000A500000085BE0200A60000004FBC02004F -:10041000A7000000A3BD0200A800000017BD020055 -:10042000A900000035BE0200AA000000DDBD0200E8 -:10043000AB000000E9BC0200AC000000D9BA020029 -:10044000AD0000001DBC0200FFFFFFFFFFFFFFFF2C -:10045000FFFFFFFFFFFFFFFF0000000000000000A4 -:100460000000D6010701000000000000002000404D -:100470000000000000200040000000000600000016 -:100480000800000007000000050000000000000058 -:100490000100000000000010070100000000000043 -:1004A0000000000000000000000000000100000744 -:1004B0009C040300AC04030008000000D404030003 -:1004C000E404030008000000E4040300F404030053 -:1004D00008000000C4050300D4050300000000006C -:1004E00000000000B4050300C40503000000000084 -:1004F000000000009C050300A4050300A405030000 -:10050000AC05030000000000000000000000000037 -:100510000000000080B30020F40403001405030071 -:1005200008000000AC050300B40503000000000053 -:10053000000000002405030034050300080000004B -:10054000D405030080B30020AC010000C0320200DB -:10055000400603002CB50020043B00008037020059 -:1005600018B4002010B4002018B40020F4D80020E3 -:100570008000000084E4002074E3002010000000EC -:100580001000000001000000A0E5002090E4002021 -:1005900010000000100000000100000091ED0200BA -:1005A00000000000C54102000000000099F50200B3 -:1005B0000000000001DD020000000000C1DE0200BA -:1005C0000000000001EC02000000000051EC0200FD -:1005D0000000000091240808011201F303031280B7 -:1005E000AA401327294176715B06145555550362BD -:1005F000C409423323F0041AD06D23B013335027BB -:10060000223B1BA04E181A75101A9D0822EB14905D -:100610003A012CE0D701303223321B32175A15042D -:100620005A140419427904511220BA4008012713C0 -:1006300001012902110367017E040090D00300002C -:00000001FF diff --git a/hex/sd_api_v5/connectivity_2.0.1_115k2_with_s132_5.0.hex b/hex/sd_api_v5/connectivity_2.0.1_115k2_with_s132_5.0.hex deleted file mode 100644 index 0b8b9ab6b..000000000 --- a/hex/sd_api_v5/connectivity_2.0.1_115k2_with_s132_5.0.hex +++ /dev/null @@ -1,12108 +0,0 @@ -:020000040000FA -:1000000000040020E90800007D050000C908000088 -:1000100087050000910500009B050000000000001E -:100020000000000000000000000000000D090000BA -:10003000A505000000000000AF050000B9050000A4 -:10004000C3050000CD050000D7050000E105000054 -:10005000EB050000F5050000FF05000009060000A3 -:10006000130600001D0600002706000031060000F0 -:100070003B060000450600004F0600005906000040 -:10008000630600006D060000770600008106000090 -:100090008B060000950600009F060000A9060000E0 -:1000A000B3060000BD060000C7060000D106000030 -:1000B000DB060000E5060000EF060000F906000080 -:1000C000030700000D0700001707000021070000CC -:1000D0002B070000350700003F070000490700001C -:1000E000530700005D07000067070000710700006C -:1000F0007B070000850700008F07000099070000BC -:10010000A30700001FB500F003F88DE80F001FBD26 -:1001100000F0E0BB1FB56FF00100009040100390AD -:10012000029001904FF010208069000B420900F00E -:100130001F045DF822300120A04083434DF8223097 -:10014000684600F045F91FBDF0B54FF6FF734FF458 -:10015000B4751A466E1E11E0A94201D3344600E080 -:100160000C46091B30F8027B641E3B441A44F9D14B -:100170009CB204EB134394B204EB12420029EBD17E -:1001800098B200EB134002EB124140EA0140F0BD8F -:10019000DE4992B00446D1E90001CDE91001FF2209 -:1001A0004021684600F03CFB94E80F008DE80F000A -:1001B000684610A902E004C841F8042D8842FAD12B -:1001C00010216846FFF7C0FF1090AA208DF8440068 -:1001D000FFF7A0FF00F0F3F84FF01024A069102201 -:1001E0006946803000F002F9A069082210A900F0E9 -:1001F000FDF800F0D8F84FF080510A6949690068AD -:100200004A43824201D8102070470020704710B541 -:10021000D0E900214FF0805002EB8103026944696C -:100220006243934209D84FF01022536903EB8103D4 -:100230000169406941438B4201D9092010BD5069D1 -:10024000401C01D0002010BD0F2010BD70B501680A -:100250000446AF4D4FF01020072952D2DFE801F0DD -:10026000330419293C1E2500D4E902656468294637 -:10027000304600F0CDF82A462146304600F0B6F868 -:10028000AA002146304600F09FFA002800D0032043 -:1002900070BD00F051FB4FF4805007E0201DFFF7C8 -:1002A000AAFF0028F4D100F047FB60682860002016 -:1002B00070BD241D94E80700920000F085FA002824 -:1002C000F6D00E2070BD8069401C12D0201DFFF7B3 -:1002D0009EFF0028F6D109E08069401C09D0201D4E -:1002E000FFF789FF0028EDD1606820B12046FFF7B5 -:1002F0004FFF042070BDFFF70DFF00F060F800F025 -:1003000052F8072070BD10B50C46182802D0012005 -:10031000086010BD2068FFF799FF206010BD4FF006 -:100320001024A069401C05D0A569A66980353079E4 -:10033000AA2808D06069401C2DD060690068401C64 -:1003400029D060692CE010212846FFF7FDFE3168B6 -:1003500081421CD1A16901F18002C03105E030B1B8 -:1003600008CA51F8040D984201D1012000E0002094 -:100370008A42F4D158B1286810B1042803D0FEE7AE -:10038000284600F057F862496868086008E000F005 -:1003900016F800F008F84FF480500168491C01D0AD -:1003A00000F0A4FAFEE7BFF34F8F5A4801685A4A9B -:1003B00001F4E06111430160BFF34F8FFEE74FF09E -:1003C00010208169491C02D0806900F0AEB87047E6 -:1003D000524A01681160121D416811604F4A8168DC -:1003E00010321160111DC068086070472DE9F0419E -:1003F00017460D460646002406E03046296800F000 -:10040000A7F8641C2D1D361DBC42F6D3BDE8F08153 -:1004100070B50C4605464FF4806608E0284600F0AB -:1004200084F8B44205D3A4F5806405F58055002C0A -:10043000F4D170BD4168044609B1012500E00025F2 -:100440004FF010267069A268920000F0BDF9C8B1A3 -:10045000204600F01AF89DB17669A56864684FF4EB -:10046000002084420AD2854208D229463046FFF74E -:10047000CFFF2A4621463046FFF7B8FFFFF79FFF20 -:10048000FFF791FFFFF746FEF8E72DE9FF414FF038 -:100490001024616980680D0B01EB800000F6FF708D -:1004A000010B0020009001900290024603906846E4 -:1004B00001230BE0560902F01F0C50F8267003FAD6 -:1004C0000CFC47EA0C0740F82670521CAA42F1D3F4 -:1004D0000AE04A0901F01F0650F8225003FA06F616 -:1004E000354340F82250491C8029F2D3A169090BF9 -:1004F0004A0901F01F0150F822408B409C4340F80C -:100500002240FFF765FFBDE8FF8100005C090000A5 -:10051000000000200CED00E00400FA050006004099 -:10052000144801680029FCD07047134A0221116069 -:1005300010490B68002BFCD00F4B1B1D186008687E -:100540000028FCD00020106008680028FCD070470C -:10055000094B10B501221A60064A1468002CFCD021 -:10056000016010680028FCD0002018601068002886 -:10057000FCD010BD00E4014004E5014008208F4993 -:1005800009680958084710208C4909680958084724 -:1005900014208A49096809580847182087490968BA -:1005A0000958084730208549096809580847382004 -:1005B00082490968095808473C2080490968095858 -:1005C000084740207D4909680958084744207B496D -:1005D00009680958084748207849096809580847B0 -:1005E0004C20764909680958084750207349096822 -:1005F0000958084754207149096809580847582084 -:100600006E490968095808475C206C49096809580F -:100610000847602069490968095808476420674904 -:100620000968095808476820644909680958084753 -:100630006C20624909680958084770205F490968B9 -:100640000958084774205D49096809580847782007 -:100650005A490968095808477C20584909680958C7 -:10066000084780205549096809580847842053499C -:1006700009680958084788205049096809580847F7 -:100680008C204E4909680958084790204B49096851 -:10069000095808479420494909680958084798208B -:1006A00046490968095808479C204449096809587F -:1006B0000847A0204149096809580847A4203F4934 -:1006C000096809580847A8203C490968095808479B -:1006D000AC203A49096809580847B02037490968E9 -:1006E00009580847B4203549096809580847B8200F -:1006F0003249096809580847BC2030490968095837 -:100700000847C0202D49096809580847C4202B49CB -:10071000096809580847C82028490968095808473E -:10072000CC202649096809580847D0202349096880 -:1007300009580847D4202149096809580847D82092 -:100740001E49096809580847DC201C4909680958EE -:100750000847E0201949096809580847E420174963 -:10076000096809580847E8201449096809580847E2 -:10077000EC201249096809580847F0200F49096818 -:1007800009580847F4200D49096809580847F82016 -:100790000A49096809580847FC20084909680958A6 -:1007A00008475FF480700549096809580847000048 -:1007B00003480449024A034B704700000000002030 -:1007C000680900006809000040EA010310B59B07B2 -:1007D0000FD1042A0DD310C808C9121F9C42F8D0AB -:1007E00020BA19BA884201D9012010BD4FF0FF305C -:1007F00010BD1AB1D30703D0521C07E0002010BD72 -:1008000010F8013B11F8014B1B1B07D110F8013BFD -:1008100011F8014B1B1B01D1921EF1D1184610BDDE -:1008200002F0FF0343EA032242EA024200F005B865 -:100830007047704770474FF000020429C0F01280E3 -:1008400010F0030C00F01B80CCF1040CBCF1020F83 -:1008500018BF00F8012BA8BF20F8022BA1EB0C0158 -:1008600000F00DB85FEAC17C24BF00F8012B00F84E -:10087000012B48BF00F8012B70474FF0000200B574 -:10088000134694469646203922BFA0E80C50A0E8B3 -:100890000C50B1F12001BFF4F7AF090728BFA0E861 -:1008A0000C5048BF0CC05DF804EB890028BF40F82D -:1008B000042B08BF704748BF20F8022B11F0804F6F -:1008C00018BF00F8012B7047014B1B68DB68184705 -:1008D0000000002009480A497047FFF7FBFFFFF7B7 -:1008E00011FC00BD20BFFDE7064B1847064A10600B -:1008F000016881F30888406800470000680900002B -:10090000680900001F030000000000201EF0040F13 -:100910000CBFEFF30881EFF3098188690238007892 -:10092000182803D100E00000074A1047074A126860 -:100930002C3212681047000000B5054B1B68054AB1 -:100940009B58984700BD00000703000000000020EE -:100950005809000004000000001000000000000022 -:0809600000FFFFFF0090D0032F -:10100000E8120020111D0200152F0000831C0200B1 -:10101000152F0000152F0000152F00000000000004 -:10102000000000000000000000000000691D020038 -:10103000152F000000000000152F0000152F0000E4 -:10104000D11D0200D71D0200152F0000152F000032 -:10105000152F0000152F0000152F0000152F000080 -:10106000DD1D0200152F0000152F0000E31D0200FA -:10107000152F0000E91D0200EF1D0200F51D020002 -:10108000152F0000152F0000152F0000152F000050 -:10109000152F0000152F0000152F0000152F000040 -:1010A000152F0000FB1D0200152F0000152F00005A -:1010B000152F0000152F0000152F0000152F000020 -:1010C000011E0200152F0000152F0000152F000033 -:1010D000152F0000152F0000152F0000152F000000 -:1010E000152F0000152F0000152F0000152F0000F0 -:1010F000152F0000152F0000152F0000152F0000E0 -:10110000152F0000152F000000F002F820F0EDFD73 -:101110000AA090E8000C82448344AAF10107DA4552 -:1011200001D120F0E2FDAFF2090EBAE80F0013F092 -:10113000010F18BFFB1A43F0010318471C130200EC -:101140003C1302000A444FF0000C10F8013B13F06E -:10115000070408BF10F8014B1D1108BF10F8015B10 -:10116000641E05D010F8016B641E01F8016BF9D103 -:1011700013F0080F1EBF10F8014BAD1C0C1B09D15A -:101180006D1E58BF01F801CBFAD505E014F8016BCC -:1011900001F8016B6D1EF9D59142D6D3704700005E -:1011A0000023002400250026103A28BF78C1FBD870 -:1011B000520728BF30C148BF0B6070471FB500F011 -:1011C0003DF88DE80F001FBD1EF0040F0CBFEFF3BC -:1011D0000880EFF30980014A104700006F2E0000DD -:1011E0008269034981614FF001001044704700009B -:1011F000F511000001B41EB400B512F0AFFD01B44A -:101200000198864601BC01B01EBD0000F0B4404606 -:10121000494652465B460FB402A0013001B506486C -:10122000004700BF01BC86460FBC804689469246F7 -:101230009B46F0BC704700000911000020F052BD31 -:1012400070B51A4C054609202070A01C00F05FF80C -:101250005920A08029462046BDE8704007F0F1BF24 -:1012600007F0FABF70B50C461149097829B1A0F111 -:101270006001552908D3012013E0602804D06928B3 -:1012800002D043F201000CE020CC0A4E94E80E009C -:1012900006EB8000A0F58050241FD0F8806E284611 -:1012A000B047206070BD012070470000080000209A -:1012B0001C0000204C1E020010B504460021012035 -:1012C00000F03BF800210B2000F037F80421192032 -:1012D00000F033F804210D2000F02FF804210E2037 -:1012E00000F02BF804210F2000F027F80421C84358 -:1012F00000F023F80621162000F01FF80621152023 -:1013000000F01BF82046FFF79BFF002010BD9D2139 -:1013100001807047FFF7A4BF10487047104A10B50E -:1013200014680F4B0F4A08331A60FFF79BFF0C48F5 -:10133000001D046010BD704770474907090E002862 -:1013400006DA00F00F0000F1E02080F8141D70476D -:1013500000F1E02080F800147047000003F900421B -:101360001005024001000001FE48002101604160BB -:10137000018170472DE9F743044692B091464068D9 -:1013800012F0B2FF40B1606812F0B7FF20B9607888 -:1013900000F00300022801D0012000E00020F14EFF -:1013A0004D463072484612F05BFF18B1102015B060 -:1013B000BDE8F0832946012001F029FF0028F6D17D -:1013C00001258DF842504FF4C050ADF84000002286 -:1013D00010A9284606F0FAFB0028E8D18DF8425003 -:1013E0004FF428504FF00008ADF8400047461C214C -:1013F0006846CDF81C8020F018FC9DF81C0008AA57 -:1014000020F00F00401C20F0F00010308DF81C0080 -:1014100020788DF81D0061789DF81E0061F3420070 -:1014200040F001008DF81E009DF800000AA940F070 -:1014300002008DF800002089ADF83000ADF8327060 -:10144000608907AFADF834000B97606810AC0E9060 -:101450000A94684606F0AFF90028A8D1BDF820002C -:1014600030808DF8425042F60120ADF840009DF8E2 -:101470001E0008AA20F00600801C20F001008DF854 -:101480001E000220ADF83000ADF8340013A80E9015 -:101490000AA9684606F08FF9002888D1BDF8200017 -:1014A0007080311D484600F033F9002887D18DF84F -:1014B000425042F6A620ADF840001C216846CDF807 -:1014C0001C8020F0B2FB9DF81C00ADF8345020F0D9 -:1014D0000F00401C20F0F00010308DF81C009DF82B -:1014E0001D0008AA20F0FF008DF81D009DF81E00C9 -:1014F0000AA920F0060040F00100801C8DF81E00B3 -:101500009DF800008DF8445040F002008DF8000076 -:10151000CDE90A4711A80E90ADF83050684606F0A4 -:101520004AF9002899D1BDF82000F08000203EE75C -:101530003EB504460820ADF80000204612F090FEAB -:1015400008B110203EBD2146012001F060FE0028B8 -:10155000F8D12088ADF804006088ADF80600A088B6 -:10156000ADF80800E088ADF80A007E4801AB6A4695 -:101570008088002106F024FDBDF800100829E1D084 -:1015800003203EBD1FB50446002002900820ADF8A0 -:101590000800CDF80CD0204612F062FE10B11020E9 -:1015A00004B010BD6F4802AA81884FF6FF7006F0A4 -:1015B0004EFF0028F4D1BDF80810082901D00320FF -:1015C000EEE7BDF800102180BDF802106180BDF883 -:1015D0000410A180BDF80610E180E1E701B582B0FA -:1015E0000220ADF800005F4802AB6A464088002147 -:1015F00006F0E6FCBDF80010022900D003200EBD65 -:101600001CB5002100910221ADF80010019012F0EC -:101610004DFE08B110201CBD52486A4641884FF665 -:10162000FF7006F014FFBDF800100229F3D003206C -:101630001CBDFEB54B4C06461546207A0F46C0072A -:1016400005D0084612F00CFE18B11020FEBD0F2088 -:10165000FEBDF82D01D90C20FEBD304612F000FE73 -:1016600018BB208801A905F0ECFD0028F4D13078E2 -:101670008DF80500208801A906F081FC0028EBD137 -:1016800000909DF800009DF8051040F002008DF8D4 -:101690000000090703D040F008008DF80000208802 -:1016A000694606F009FC0028D6D1ADF8085020881C -:1016B0003B4602AA002106F083FCBDF80810A942AF -:1016C000CAD00320FEBD7CB50546002000900190E5 -:1016D0000888ADF800000C462846019512F004FE7B -:1016E00018B9204612F0E2FD08B110207CBD15B1FA -:1016F000BDF8000050B11B486A4601884FF6FF70E4 -:1017000006F0A5FEBDF8001021807CBD0C207CBD3C -:1017100030B593B0044600200D460090142101A876 -:1017200020F083FA1C2108A820F07FFA9DF8000021 -:10173000CDF808D020F00F00401C20F0F000103051 -:101740008DF800009DF8010020F0FF008DF80100E9 -:101750009DF8200040F002008DF8200001208DF857 -:10176000460001E0E201002042F60420ADF844000A -:1017700011A801902088ADF83C006088ADF83E00CB -:10178000A088ADF84000E088ADF842009DF8020066 -:1017900006AA20F00600801C20F001008DF802004F -:1017A0000820ADF80C00ADF810000FA8059001A9B5 -:1017B00008A806F000F8002803D1BDF8180028801A -:1017C000002013B030BD0000F0B5007B059F1E4621 -:1017D00014460D46012800D0FFDF0C2030803A204F -:1017E0003880002C08D0287A052806D0287B0128CC -:1017F00000D0FFDF17206081F0BDA889FBE72DE94D -:10180000F04786B0144691F80C900E9A0D46B9F147 -:10181000010F0BD01021007B2E8A8846052807D0A7 -:10182000062833D0FFDF06B0BDE8F0870221F2E7DB -:10183000E8890C2100EB400001EB400018803320C8 -:101840001080002CEFD0E889608100271AE0009614 -:10185000688808F1020301AA696900F07AFF06EBC3 -:101860000800801C07EB470186B204EB4102BDF87B -:10187000040090810DF1060140460E3210F04CFD3F -:101880007F1CBFB26089B842E1D8CCE73420108019 -:10189000E889B9F1010F11D0122148430E301880A8 -:1018A000002CC0D0E88960814846B9F1010F00D012 -:1018B0000220207300270DF1040A1FE00621ECE747 -:1018C0000096688808F1020301AA696900F041FFE7 -:1018D00006EB0800801C86B2B9F1010F12D007EBAD -:1018E000C70004EB4000BDF80410C18110220AF1CA -:1018F0000201103020F000F97F1CBFB26089B842AD -:10190000DED890E707EB470104EB4102BDF8040085 -:10191000D0810AF102014046103210F0FDFCEBE7E5 -:101920002DE9F0470E4688B090F80CC096F80C8070 -:10193000378AF5890C20109902F10C044FF0000A47 -:10194000BCF1030F08D0BCF1040F3ED0BCF1070F6F -:101950007DD0FFDF08B067E705EB850C00EB4C009E -:10196000188031200880002AF4D0A8F1060000F089 -:10197000FF09558125E0182101A820F056F90097AC -:101980007088434601AA716900F0E3FEBDF80400C7 -:101990002080BDF80600E080BDF808002081A21C70 -:1019A0000DF10A01484610F0B7FCB9F1000F00D064 -:1019B00018B184F804A0A4F802A007EB080087B2CD -:1019C0000A346D1EADB2D6D2C4E705EB850C00EB30 -:1019D0004C00188032200880002ABBD0A8F10500F6 -:1019E00000F0FF09558137E000977088434601AA4F -:1019F000716900F0AEFE9DF80600BDF80410E180AC -:101A00002179420860F3000162F34101820862F328 -:101A10008201C20862F3C301020962F304114209A0 -:101A200062F34511820962F386112171C009607168 -:101A3000BDF80700208122460DF10901484610F04B -:101A40006BFC18B184F802A0A4F800A000E007E045 -:101A500007EB080087B20A346D1EADB2C4D279E735 -:101A6000A8F1020084B205FB08F000F10E0CA3F807 -:101A700000C035230B80002AA6D0558194810097A1 -:101A800083B270880E32716900F063FE62E72DE95F -:101A9000F84F1E460A9D0C4681462AB1607A00F531 -:101AA0008070D080E089108199F80C000C274FF0ED -:101AB00000084FF00E0A0D2873D2DFE800F09E07F1 -:101AC0000E1C28303846556A737373002146484609 -:101AD0000095FFF779FEBDE8F88F207B9146082836 -:101AE00002D0032800D0FFDF378030200AE000BF9B -:101AF000A9F80A80EFE7207B9146042800D0FFDF99 -:101B0000378031202880B9F1000FF1D1E3E7207B45 -:101B10009146042800D0FFDF37803220F2E7207B97 -:101B20009146022800D0FFDF37803320EAE7207B90 -:101B30001746022800D0FFDF3420A6F800A0288036 -:101B4000002FC8D0A7F80A80C5E7207B17460428D5 -:101B500000D0FFDF3520A6F800A02880002FBAD0E3 -:101B60004046A7F80A8012E0207B1746052802D0DD -:101B7000062800D0FFDF1020308036202880002F7C -:101B8000A9D0E0897881A7F80E80B9F80E00B88155 -:101B9000A1E7207B9146072800D0FFDF3780372060 -:101BA000B0E72AE04FF0120018804FF0380017001D -:101BB000288090D0E0897881A7F80E80A7F810805F -:101BC00099F80C000A2805D00B2809D00C280DD054 -:101BD000FFDF80E7207B0C2800D0FFDF01200AE038 -:101BE000207B0D2800D0FFDF042004E0207B0E289E -:101BF00000D0FFDF052038736DE7FFDF6BE770B5BE -:101C00000C46054601F076FA20B10078222804D26D -:101C1000082070BD43F2020070BD052128460EF079 -:101C20001DFF206008B1002070BD032070BD2DE9AC -:101C3000FF4784B00027824602970798904689465E -:101C400012300AF0E2F8401D20F00306079828B988 -:101C500007A95046FFF7D3FF002853D1B9F1000F71 -:101C600005D00798017B19BB052504681BE098F88F -:101C70000000092803D00F2812D0FFDF45E00799A4 -:101C800003254868B0B3497B42887143914238D9F3 -:101C90008AB2B3B2011D0EF03AFD0446078002E09D -:101CA000079C042508340CB1208810B1032D28D0DE -:101CB0002BE00798012112300AF0DFF8ADF80C0094 -:101CC000024602AB2946504608F0B1F9070001D19F -:101CD000A01C029007983A461230C8F80400A8F8F1 -:101CE00002A003A94046029B0AF0D4F8C0B107281D -:101CF00014D200E005E0DFE800F0060811110F0A39 -:101D00000C00132026E6002024E6112022E60820FD -:101D100020E643F203001DE607201BE6032019E638 -:101D2000BDF80C002346CDE900702A4650460799BD -:101D300000F035FD57B9032D08D10798B3B2417BA8 -:101D4000406871438AB2011D0EF0F5FCB9F1000F35 -:101D5000D9D0079981F80C90D5E72DE9FE4F91462F -:101D60001A881C468A468046FAB102AB494608F0FA -:101D70005EF9050019D04046A61C27880EF08AFFA0 -:101D80003246072629463B4600960EF049FB20883E -:101D90002346CDE900504A465146404600F0FFFC3C -:101DA000002020800120BDE8FE8F0020FBE710B559 -:101DB00086B01C46AAB104238DF800301388ADF814 -:101DC00008305288ADF80A208A788DF80E200988EC -:101DD000ADF80C1000236A462146FFF728FF06B035 -:101DE00010BD1020FBE770B50D4605210EF036FE44 -:101DF000040000D1FFDF294604F11200BDE8704065 -:101E00000AF024B82DE9F8430D468046002607F075 -:101E1000CCFA0446287812287BD2DFE800F07A5406 -:101E2000543C355632321332323209323232323287 -:101E30002879001FC0B2022801D0102810D114BB8D -:101E4000FFDF35E004B9FFDF052140460EF006FE56 -:101E5000007B032806D004280BD0072828D0FFDFFA -:101E6000072657E02879801FC0B2022820D050B141 -:101E7000F6E72879401FC0B2022819D0102817D0E1 -:101E8000EEE704B9FFDF13E004B9FFDF287901288A -:101E90000ED1172139E0052140460EF0DFFD070085 -:101EA00000D1FFDF07F11201404609F0A6FF2CB177 -:101EB0002A462146404600F05CFC2BE013214046B8 -:101EC00002F0AAFC26E0FFDF24E004B9FFDF0521D1 -:101ED00040460EF0C3FD060000D1FFDF694606F163 -:101EE000120009F094FF060000D0FFDFA98817292F -:101EF00001D2172200E00A46BDF80000824202D952 -:101F0000014602E005E01729C3D3404600F057FC24 -:101F1000CEE7FFDF3046BDE8F883401D20F0030226 -:101F200019B102FB01F0001D00E0002010447047D1 -:101F300013B5009850B100244FEA0D000EF091FB4C -:101F4000002C02D1F84A009911601CBD0124002028 -:101F5000F4E72DE9F0470C461546242120461FF0F2 -:101F600064FE05B9FFDFA87860732888DFF8B8A39E -:101F7000401D20F00301AF788946DAF800000EF02A -:101F80008EFB060000D1FFDF4FF000082660A6F8A8 -:101F9000008077B109FB07F1091D0AD0DAF80000CB -:101FA0000EF07DFB060000D1FFDF6660C6F8008002 -:101FB00001E0C4F80480298804F11200BDE8F0476C -:101FC00009F00DBF2DE9F047804601F112000D46E2 -:101FD000814609F01AFF401DD34F20F003026E7BAB -:101FE0001446296838680EF085FB3EB104FB06F202 -:101FF000121D03D0696838680EF07CFB05200EF0D6 -:10200000D7FC044605200EF0DBFC201A012802D183 -:1020100038680EF039FB49464046BDE8F04709F004 -:10202000F3BE70B5054605210EF018FD040000D181 -:10203000FFDF04F112012846BDE8704009F0DDBE63 -:102040002DE9F04F91B04FF0000BADF834B0ADF882 -:1020500004B047880C4605469246052138460EF0E6 -:10206000FDFC060000D1FFDF24B1A780A4F806B074 -:10207000A4F808B0297809220B20B2EB111F297AA5 -:102080007DD104F110023827C91E4FF00C094FF022 -:10209000010803920F2973D2DFE801F0F4F3F28113 -:1020A00008D48A8FA13DDDF5F0B8B800307B022856 -:1020B00000D0FFDFA88909EBC001ADF80410302182 -:1020C000ADF83410002C25D06081B5F80E900027B3 -:1020D0001DE004EBC708317C88F80E10F189A8F8E0 -:1020E0000C10CDF800906888042304AA296900F038 -:1020F00030FBBDF81010A8F8101009F10400BDF86D -:1021000012107F1C1FFA80F9A8F81210BFB2608964 -:10211000B842DED80FE1307B022800D0FFDFE9892A -:1021200009EBC100ADF804003020ADF83400287B85 -:102130000A90001FC0B20F90002CEBD06181B5F85F -:102140001090002727E000BFCDF8009068886969EB -:1021500003AA0A9B00F0FDFA0A9904EBC70809EBF1 -:1021600001001FFA80F908F10C0204A90F9810F081 -:10217000D3F818B188F80EB0A8F80CB001E0D7E099 -:10218000D4E0BDF80C10A8F81010BDF80E107F1C9C -:10219000A8F81210BFB26089B842D5D8CBE00DA81C -:1021A000009001AB224629463046FFF728FBC2E0EB -:1021B000307B082805D0FFDF03E0307B082800D003 -:1021C000FFDFE8891030ADF804003620ADF83400A8 -:1021D000002C3FD0A9896181F189A18127E0307B62 -:1021E000092800D0FFDFA88900F10C01ADF8041028 -:1021F0003721ADF83410002C2CD06081E889009094 -:10220000AB89688804F10C02296956E0E889392114 -:10221000103080B2ADF80400ADF83410002C74D04A -:10222000A9896181287A10280AD002212173E989BD -:10223000E181288A0090EB8968886969039A3CE00B -:102240000121F3E70DA8009001AB22462946304654 -:10225000FFF766FB6FE0307B0A2800D0FFDF12201B -:10226000ADF80400ADF834704CB3A9896181A4F8CD -:1022700010B0A4F80EB084F80C805CE020E002E01E -:1022800031E039E042E0307B0B2800D0FFDF288AC4 -:10229000ADF834701230ADF8040084B1042121731C -:1022A000A9896181E989E181298A2182688A00906E -:1022B0002B8A688804F11202696900F04AFA3AE050 -:1022C000307B0C2800D0FFDF1220ADF80400ADF801 -:1022D00034703CB305212173A4F80AB0A4F80EB001 -:1022E000A4F810B027E00DA8009001AB22462946C3 -:1022F0003046FFF769FA1EE00DA8009001AB2246B8 -:1023000029463046FFF7C3FB15E036E03B21ADF828 -:102310000400ADF8341084B3A4F80680A4F808B023 -:1023200084F80AB007E0000010000020FFDF02E0A0 -:10233000012919D0FFDFBDF80400AAF800007CB124 -:10234000BDF834002080BDF804006080BDF8340082 -:10235000392805D03B2803D03C2801D086F80CB0A2 -:1023600011B00020BDE8F08F3C21ADF80400ADF8BD -:10237000341014B1697AA172DDE7FFE7AAF8000012 -:10238000EEE72DE9F84356880F46804615460521AD -:1023900030460EF063FB040000D1FFDF12340094DE -:1023A0003B46414630466A6809F02EFFB3E570B5FA -:1023B0000D4605210EF052FB040000D1FFDF294637 -:1023C00004F11200BDE8704009F02CBD70B50D4657 -:1023D00005210EF043FB040000D1FFDF294604F184 -:1023E0001200BDE8704009F050BD70B505460521EA -:1023F0000EF034FB040000D1FFDF04F10803214696 -:102400002846BDE870400422A7E470B505460521C2 -:102410000EF024FB040000D1FFDF2146284623688C -:10242000BDE87040052298E470B5064605210EF01F -:1024300015FB040000D1FFDF04F1120009F0E5FCF8 -:10244000401D20F0030511E0011D00880322431800 -:1024500021463046FFF781FC00280BD0607BABB2F1 -:10246000684382B26068011D0EF09BF96068418884 -:102470000029E9D170BD70B50E46054606F095FFFE -:10248000040000D1FFDF0120207266726580207891 -:1024900020F00F00C01C20F0F00030302070BDE8AC -:1024A000704006F085BF2DE9F0438BB00D46144611 -:1024B000814606A9FFF7A3FB002814D14FF6FF764B -:1024C00001274FF420588CB103208DF80000102014 -:1024D000ADF8100007A8059007AA204604A90FF040 -:1024E0003AFF78B107200BB0BDE8F0830820ADF8C3 -:1024F00008508DF80E708DF80000ADF80A60ADF848 -:102500000C800CE00698A17801742188C1818DF8B7 -:102510000E70ADF80850ADF80C80ADF80A606A4650 -:1025200002214846069BFFF782FBDCE708B5012243 -:102530008DF8022042F60202ADF800200A4603237D -:102540006946FFF734FC08BD08B501228DF802206A -:1025500042F60302ADF800200A4604236946FFF75D -:1025600026FC08BD00B587B079B102228DF80020A5 -:102570000A88ADF808204988ADF80A1000236A4699 -:102580000521FFF754FB07B000BD1020FBE709B1A0 -:1025900007230CE40720704770B588B00D46144639 -:1025A000064606A9FFF72BFB00280ED17CB10620BA -:1025B000ADF808508DF80000ADF80A40069B6A4659 -:1025C0000821DC813046FFF732FB08B070BD0520E2 -:1025D0008DF80000ADF80850F0E700B587B059B1AC -:1025E00007238DF80030ADF80820039100236A46D8 -:1025F0000921FFF71CFBC6E71020C4E770B588B0BF -:102600000C460646002506A9FFF7F9FA0028DCD19A -:1026100006980121123009F030FC9CB1217806297E -:1026200021D2DFE801F0200505160318801E80B2D4 -:10263000C01EE28880B20AB1A3681BB1824203D9EE -:102640000C20C2E71020C0E7042904D0A08850B9AC -:1026500001E00620B9E7012913D0022905D0042999 -:102660001CD005292AD00720AFE709208DF80000EB -:102670006088ADF80800E088ADF80A00A068039013 -:1026800023E00C208DF800006088ADF80800E08899 -:10269000ADF80A00A0680A25039016E00D208DF819 -:1026A00000006088ADF80800A088ADF80A00E08856 -:1026B000ADF80C00A0680B25049006E00E208DF804 -:1026C000000060788DF808000C256A4629463046DF -:1026D000069BFFF7ACFA78E700B587B00F228DF8BC -:1026E0000020ADF8081000236A461946FFF79FFA4C -:1026F00049E700B587B071B102228DF800200A8841 -:10270000ADF808204988ADF80A1000236A46062172 -:10271000FFF78DFA37E7102035E770B586B006462B -:1027200001200D46ADF808108DF800000146002389 -:102730006A463046FFF77BFA040008D12946304646 -:1027400005F058FC0021304605F072FC204606B02A -:1027500070BDF8B51C4615460E46069F0EF088FA69 -:102760002346FF1DBCB231462A4600940DF01FFEE1 -:10277000F8BD10B548800878144620F00F00C01C42 -:1027800020F0F00090300B4608701822214603F12B -:1027900008001FF0F6F9BDE8104006F009BE30B49D -:1027A0001146DDE902423CB1032903D0002330BCCD -:1027B00008F0D3BA0123FAE71A8030BC704770B52D -:1027C0000C460546FFF70FFB2146284605F021FC85 -:1027D0002846BDE87040012105F02ABC4FF0E022F8 -:1027E0004FF400410020C2F88011204908702049B0 -:1027F00090020860704730B51C4D04462878A0420E -:1028000018BF002C02D0002818BFFFDF2878A04294 -:1028100008BF30BD2C701749154A0020ECB1164D89 -:10282000DFF858C0131F012C0DD0022C1CBFFFDF96 -:1028300030BD086003200860CCF800504FF4000061 -:102840001060186030BD086002200860CCF80050AD -:102850004FF040701060186030BD086008604FF0A5 -:102860006070106030BD00B5FFDF00BD18000020B3 -:1028700008F5014000F500402403002014F5004055 -:1028800070B50B2000F0B5F9082000F0B2F9002176 -:102890000B2000F0C4F90021082000F0C0F9EC4C36 -:1028A00001256560A5600020C4F84001C4F844011A -:1028B000C4F848010B2000F0A7F9082000F0A4F9A3 -:1028C0000B2000F08BF9256070BD10B50B2000F0D7 -:1028D00090F9082000F08DF9DD4801214160816008 -:1028E000DC490A68002AFCD10021C0F84011C0F878 -:1028F0004411C0F848110B2000F086F9BDE81040E3 -:10290000082000F081B910B50B2000F07DF9BDE87A -:102910001040082000F078B900B530B1012806D089 -:10292000022806D0FFDF002000BDCB4800BDCB4809 -:1029300000BDCA48001D00BD70B5C9494FF0004038 -:102940000860C84DC00BC5F80803C74800240460E0 -:10295000C5F840410820C43500F04BF9C5F83C41AA -:10296000C248047070BD08B5B94A002128B10128D9 -:1029700011D002281CD0FFDF08BD4FF48030C2F810 -:102980000803C2F84803B3483C300160C2F8401164 -:10299000BDE80840D0E74FF40030C2F80803C2F8A1 -:1029A0004803AC4840300160C2F84411AB480CE029 -:1029B0004FF48020C2F80803C2F84803A548443009 -:1029C0000160C2F84811A548001D0068009008BDCC -:1029D00070B516460D460446022800D9FFDF0022D6 -:1029E0009B48012304F110018B4000EB8401C1F8E6 -:1029F000405526B1C1F84021C0F8043303E0C0F8C7 -:102A00000833C1F84021C0F8443370BD2DE9F041CE -:102A10001C46154630B1012834D0022839D0FFDFDA -:102A2000BDE8F081891E002221F07F411046FFF7AA -:102A3000CFFF012C24D000208C4E8A4F01247070CF -:102A40003C61894900203C3908600220091D08606A -:102A5000854904203039086083483D350560C7F852 -:102A60000042082000F0D0F82004C7F80403082032 -:102A700000F0B4F87A49E007091F08603470CFE726 -:102A80000120D9E7012B02D00022012005E001221C -:102A9000FBE7012B04D000220220BDE8F04197E7BC -:102AA0000122F9E76B480068704770B500F0C7F87D -:102AB000674C0546D4F840010026012809D1D4F816 -:102AC0000803C00305D54FF48030C4F80803C4F8E8 -:102AD0004061D4F8440101280CD1D4F808038003E4 -:102AE00008D54FF40030C4F80803C4F8446101204D -:102AF00010F0F6FBD4F8480101280CD1D4F80803F3 -:102B0000400308D54FF48020C4F80803C4F8486196 -:102B1000022010F0E5FB5648056070BD70B500F06E -:102B20008EF8524D0446287858B1FFF705FF6878B3 -:102B300020B1002085F8010010F0D2FB4C48046061 -:102B400070BD0320F8E74FF0E0214FF40010C1F80A -:102B500000027047152000F057B842490120086173 -:102B6000082000F051B83F494FF47C10C1F8080329 -:102B70000020024601EB8003C3F84025C3F8402142 -:102B8000401CC0B20628F5D37047410A43F60952EB -:102B90005143C0F3080010FB02F000F5807001EB18 -:102BA0005020704710B5430B48F2376463431B0C49 -:102BB0005C020C602F4C03FB04002F4B4CF2F724FB -:102BC00043435B0D13FB04F404EB402000F58070DD -:102BD0004012107008681844086010BD00F01F0211 -:102BE000012191404009800000F1E020C0F800116F -:102BF000704700F01F02012191404009800000F160 -:102C0000E020C0F88011704700F01F0201219140C0 -:102C10004009800000F1E020C0F8801270474907A9 -:102C2000090E002806DA00F00F0000F1E02080F81D -:102C3000141D704700F1E02080F8001470470C4824 -:102C4000001F00680A4A0D49121D116070470000FC -:102C500000B0004004B500404081004044B1004055 -:102C600008F501400080004040850040340000200D -:102C700014050240F7C2FFFF6F0C010001000001C4 -:102C80000A4810B50468094909480831086010F07D -:102C9000BBFB0648001D046010BD0649002008600B -:102CA0004FF0E0210220C1F8800270471005024079 -:102CB00001000001FC1F004010B50D2000F06FF86E -:102CC000C4B26FF0040000F06AF8C0B2844200D0D1 -:102CD000FFDF3A490120086010BD70B50D2000F0FB -:102CE00048F8374C0020C4F800010125C4F804530B -:102CF0000D2000F049F825604FF0E0216014C1F884 -:102D0000000170BD10B50D2000F033F82C480121F2 -:102D100041600021C0F80011BDE810400D2000F016 -:102D200033B8284810B50468264927480831086098 -:102D30002349D1F80001012804D0FFDF2148001DFC -:102D4000046010BD1D48001D00680022C0B2C1F81B -:102D5000002110F074FFF1E710B51948D0F8001108 -:102D60000029FBD0FFF7DDFFBDE810400D2000F08B -:102D70000BB800F01F02012191404009800000F1D2 -:102D8000E020C0F88011704700F01F02012191403F -:102D90004009800000F1E020C0F880127047002850 -:102DA00006DA00F00F0000F1E02090F8140D03E0C7 -:102DB00000F1E02090F800044009704704D500407D -:102DC00000D00040100502400100000110B5202095 -:102DD00000F075F8202000F07DF84449202081F8AB -:102DE0000004434900060860091D42480860FEF7D8 -:102DF00093FA3F49C83108603F48D0F8041341F0C6 -:102E00000101C0F80413D0F8041341F08071C0F838 -:102E10000413364901201C39C1F8000110BD10B55A -:102E2000202000F04CF8324800210160001D0160B4 -:102E30002F4A481EE83A10602F4AC2F808032C4B6C -:102E4000C8331960C2F80001C2F860012B4908605C -:102E5000BDE81040202000F03DB825492848EC3955 -:102E60000860704722492648E8390860704770B505 -:102E70001F4A8069E83A224911601F49D1F8006170 -:102E80000023204D1D4A5C1E1EB1A84206D300211E -:102E90000FE0D1F8606186B1A84209D2C1F80031D3 -:102EA000C1F860311460BDE87040202000F012B815 -:102EB0001168BDE870401EF0E3BEFFDF70BD00F09A -:102EC0001F02012191404009800000F1E020C0F87C -:102ED0008011704700F01F020121914040098000DD -:102EE00000F1E020C0F880127047000020E000E010 -:102EF000000602406413002000000240000402406B -:102F000001000001003002000F4A12680D498A4298 -:102F10000CD118470C4A12680A4B9A4206D101B5E7 -:102F200010F00EFFFFF799FFBDE80140074909685F -:102F30000958084706480749054A064B70470000EC -:102F400000000000BEBAFECAB0000020040000204D -:102F5000E8120020E812002070B50C46054609F082 -:102F6000F0FA21462846BDE870400AF0E2BB10B5F1 -:102F700011F054FBFFF732FC11F0F0F9BDE81040FE -:102F800011F0A2BA01208107086070470120810773 -:102F90004860704712480068C00700D001207047A1 -:102FA0000F48001F0068C00700D0012070470C4880 -:102FB00008300068C00700D0012070470848103072 -:102FC0000068704706490C310A68D20306D50968C3 -:102FD00001F00301814201D10120704700207047B8 -:102FE0000C0400407047704770477047704702F00C -:102FF000FF0343EA032242EA02421EF0F6BD704795 -:103000002CFFFFFFDBE5B151003002009D00FFFF08 -:1030100084000000404B4C0066D342DA82CFB49D5E -:10302000E40AD77E68976592800939FF30B5FF4D75 -:10303000044610280AD0112C06D02846122CC1783C -:1030400006D0132C08D0FFDFEC7030BDFFDFFBE7AC -:103050001129F9D0FFDFF7E71129F5D0FFDFF3E7FA -:1030600070B50FF0E3FA044610F0A0FC201AC4B2C9 -:1030700006200DF09DFC054606200DF0A1FC2E1A41 -:1030800007200DF095FC054607200DF099FCE74957 -:10309000281A3218C87812280DD000231A44132891 -:1030A0000BD0002002440878022808D000201044E9 -:1030B000201AC0B270BD0123F0E70120F2E7012021 -:1030C000F5E7DA4800B58079D849420897B051F859 -:1030D000070F89880CD017228DF80020CDF8020048 -:1030E000ADF806100BA968460AF0B4FF17B000BD92 -:1030F0004422F1E702210DF0B1BC2DE9F04196B078 -:103100001D4690460E460746FFF7F4FF04000BD01D -:103110002078222804D3A07FC0F34010A84206D113 -:10312000082016B0BDE8F08143F20200F9E749201B -:103130008DF80000ADF802703DB101208DF804005B -:103140008DF805608DF8068002E000208DF80400FF -:103150000BA968460AF07EFFA07F65F34510A077B3 -:103160000020DEE730B50446A1F120000D460A2814 -:103170004AD2DFE800F005070C1C2328353A3F440B -:10318000FFDF42E0207820283FD1FFDF3DE0A74865 -:103190000178032939D0C078132836D02078242824 -:1031A00033D0252831D023282FD0FFDF2DE0207801 -:1031B00022282AD0232828D8FFDF26E020782228BA -:1031C00023D0FFDF21E0207822281ED024281CD025 -:1031D00026281AD0272818D0292816D0FFDF14E077 -:1031E0002078252811D0FFDF0FE0207825280CD08B -:1031F000FFDF0AE02078252807D0FFDF05E02078F0 -:10320000282802D0FFDF00E0FFDF257030BD30B599 -:103210000B8840F67B444FF6FF72022801D09342A0 -:1032200004D09D1FA54224D2022802D04D88954289 -:1032300003D04D88AD1FA5421BD24C88A34218D89D -:103240008B88B3F5FA7F14D2022802D0C888904246 -:1032500005D0C88840F677450A38A84209D2C88800 -:10326000904208D0944206D05B1C6343B3EB800FBE -:1032700001DB072030BD002030BD70B514460D467F -:10328000064610F0EDFF60B90DB1A54201D90C2042 -:1032900070BD002409E000BF56F8240010F0E0FFE4 -:1032A00008B1102070BD641CE4B2AC42F4D300201D -:1032B00070BDF0B50024059D10B1A94203D850E0BF -:1032C00009B90020F0BD0920F0BD055DD5B1071991 -:1032D00097F801C0BCF1150F2DD03BDCBCF1150FE8 -:1032E00038D2DFE80CF037122020262628282F2F8E -:1032F000373737373737373737372000025D22BB4C -:10330000641CE4B28C42F9D3DBE7022DDBD1BD783B -:103310001D70072D01D26D0701D40A20F0BD15786C -:1033200045F0010515E0EF43FF0707E0012D07D049 -:1033300010E00620F0BD2F07A7F18057002FF5D031 -:103340003046F0BD1578AF0701D50B20F0BD45F034 -:1033500002051570055D641C2C44E4B28C4202D950 -:10336000B1E74FF448568C42AFD3AAE710B50278C4 -:10337000540809D0012243F20223012C07D0022C69 -:103380000DD0032C13D10FE00020087005E08079E8 -:103390000324B4EB901F0AD10A70002010BD80797D -:1033A000B2EB901F03D1F7E780798009F4D018467B -:1033B00010BD1E4A117C39B1517C022908D0032965 -:1033C00008D043F2022070470146901D01F0FCBC7A -:1033D000032100E0012101700020704738B50C4640 -:1033E0000546694601F0F0FC00280DD19DF800105B -:1033F000207861F34700207055F8010FC4F80100F0 -:10340000A888A4F80500002038BD38B51378E8B1C5 -:1034100002281BD006A46D46246800944C7905EB65 -:103420009414247864F34703137003E0CC01002064 -:103430000302FF0103280ED003F0FE00107008689D -:10344000C2F801008888A2F8050038BD23F0FE0309 -:1034500013700228E9D1D8B240F00100EEE730B590 -:103460000C46097897B0222902D2082017B030BD47 -:1034700028218DF80010ADF80200132A03D03B2A52 -:1034800001D00720F2E78DF804200BA968460AF066 -:10349000E1FD050003D121212046FFF763FE284608 -:1034A000E4E700B597B023218DF80010ADF80200D5 -:1034B0001088ADF804005088ADF80600D088ADF84B -:1034C0000A009088ADF808000020ADF80C00ADF8B7 -:1034D0000E000BA968460AF0BDFD07E600B597B0DF -:1034E0002C22FA4968461EF04CFB0020CDF8030060 -:1034F000ADF80700F648007C022801D0012000E06A -:1035000000208DF809000BA968460AF0A3FD0028E9 -:1035100000D0FFDFEAE52DE9FF470220EC4E8DF8F1 -:1035200004000027B08AADF80600B84643F202094D -:103530004DE001A80DF0FBF9050006D0B08AA8B354 -:10354000A6F81480ADF806803FE0039CA07F010739 -:103550002DD504F124000090A28EBDF8080021466C -:1035600004F1360301F00DFE050005D04D452BD0CA -:10357000112D3DD0FFDF3BE0A07F20F00800A077B9 -:10358000E07F810861F30000C10861F34100E0774A -:1035900094F8210000F01F0084F8200020782828EB -:1035A00027D129212046FFF7DDFD22E015E0400765 -:1035B0000BD5BDF80800214604F10E02FFF771FF9C -:1035C00005000DD04D4510D100257F1CFFB2022013 -:1035D0000DF0EEF9401CB842ABD8052D12D008E032 -:1035E000A07F20F00400A07703E0112D00D0FFDFC2 -:1035F0000025BDF80600B082052D05D0284604B090 -:10360000BDE8F087A6F814800020F8E770B50646FC -:10361000FFF770FD054605F0C8FE040000D1FFDF8E -:103620006680207820F00F00801C20F0F000203011 -:1036300020700620207295F83E006072BDE8704050 -:1036400005F0B6BE2DE9F04786B0040000D1FFDFDB -:1036500020789F4E20F00F00801C20F0F00070308A -:10366000207060680178091F182931D2DFE801F065 -:10367000FD30303053FC300CFCFC40FD3030FD762A -:10368000FDFD3030FDFDFBFA86883046FFF732FD48 -:103690000546304607F05FFAE0B16068807985F84A -:1036A0003E0021212846FFF75DFD3046FEF7B9FCBC -:1036B000304603F0C3FF3146022010F085FDA87F9D -:1036C00020F01000A877FFF726FF002800D0FFDFCA -:1036D00006B095E7207820F0F0002030207006201A -:1036E0002072668060688079607205F061FED8E7BC -:1036F00085882846FFF7FEFC00B9FFDF6068807808 -:10370000012800D0FFDF6068817906B02846BDE857 -:10371000F04707F0FDBD86883046FFF7EBFC05005B -:1037200000D1FFDF05F044FE60683146C088288183 -:1037300060680089688160684089A881022010F073 -:1037400043FD0020A875A87F00F003000228BFD128 -:10375000FFF7E1FE0028BBD0FFDFB9E780783C2807 -:1037600003D0002502280AD000E00125002720B15F -:103770003C2802D0022800D0FFDF17B1B8E00127B3 -:10378000F5E705F015FE1DB1B07801F0DCFAA1E017 -:103790006568B5F804A0A879AD1C012806D0307979 -:1037A000814605F097FB070003D101E0B078F7E709 -:1037B000FFDF0022022150460DF047F9040000D13E -:1037C000FFDF22212046FFF7CDFC2879012800D019 -:1037D0000220A17F804668F30101A177288B208118 -:1037E000688B6081A88BA08184F822908DF8088076 -:1037F000B8680090F86801906A46032150460DF0C1 -:1038000024F900B9FFDFB888ADF81000B8788DF85A -:10381000120004AA052150460DF017F900B9FFDF88 -:10382000B888ADF80C00F8788DF80E0003AA0421D2 -:1038300050460DF00AF900B9FFDF062105F112002C -:1038400001F0EDFA28B36879800700D5FFDF6979C8 -:10385000E07D61F34700E075D5F80600A061688956 -:10386000A08303E05EE057E050E062E0062105F14E -:103870000C0001F0D4FAB0B1B0794108607861F37E -:1038800047006070D6F80700C4F80200B6F80B00D5 -:1038900012E0E07D20F0FE00801CE075D5F81200FB -:1038A000A061E88ADCE7607820F0FE00801C607090 -:1038B000E868C4F80200288AE080B8F1010F09D056 -:1038C000B8F1020F14D0FFDF02E70000CC1F0200A6 -:1038D000CC0100203078032800D0FFDF002108460B -:1038E00010F072FC06B00120BDE8F04701F0FAB913 -:1038F000F078132800D0FFDF0021062010F064FCD0 -:1039000006B01120BDE8F047FFF790BB06B0204697 -:10391000BDE8F04701F0E6BE05F04AFDB07C40F09E -:10392000020004E005F044FDB07C40F00400B074F7 -:10393000CEE606B0BDE8F04705F03ABD2DE9F04708 -:1039400005460078914600270209FF480C463E468E -:10395000012A6DD000234FF6FF71022A69D0072A91 -:1039600009D00A2A71D0FFDFA9F800600CB12780C6 -:103970006680002044E6D5F804C09CF80060142E50 -:103980007DD010DC04F1080204F118080F2E21D0BC -:1039900004DC042E5AD0082E57D10DE0122E6FD021 -:1039A000132EF9D11FE0153E072E4ED2DFE806F0A8 -:1039B000C14D4D099FEAB00012271026BCF8040043 -:1039C00014E11C27092694B3BCF80200A0806868A3 -:1039D00000795AE11B2709264CB30320207268683E -:1039E0004088A080C0E79CF802003C2827D0102720 -:1039F00018260CF1020CD4B1BCF80200A080BCF86F -:103A000018006082BCF818002082BCF81A00A0825E -:103A1000BCF81C00E0829CF805000CF10601FFF7E1 -:103A2000F4FC9CF8040028B10120E0739CE703E05B -:103A3000BFE0DFE00220F8E7A9F8006099E71B2764 -:103A40000926002CF8D023728EE720E11D273726A7 -:103A5000002CF1D0A18069680879491DFFF7D5FCD9 -:103A6000686890F82B00A0756868C0780428E07D2D -:103A700016D020F00100E0756968C97801E06DE0BA -:103A800011E061F34200E07569681F22C97A61F3B1 -:103A9000C700E075696840460C311EF02DF863E7F9 -:103AA00040F00100E7E71D273726002CC4D0A18095 -:103AB0006868411D0079FFF7A8FC696804F10F02EE -:103AC00001F10C00CB7A01461846FFF79EFC6868AE -:103AD000807CA0756868C178E07D61F3420020F0C9 -:103AE000F900E0751F2140461EF09FF83CE72027B3 -:103AF0001026002CA0D0A180686804F10902407A49 -:103B000020726968CB1C88781946FFF77EFC2BE78A -:103B100021270A26002C8FD0BCF80210A1806968EA -:103B200009792172696849796172817C21F0040107 -:103B300057E022270B26002C84D0BCF80400A0807C -:103B40006868807820726868807901F077F960721F -:103B50006868C07901F072F9A07205E72427102681 -:103B6000002CA3D0BCF80200A080686800792081F6 -:103B70006868007A60816868C088A0816868408948 -:103B8000E081F1E623271026002C8FD0BCF802102C -:103B9000A1806968898821816968C98861816968AB -:103BA0000989A18169684989E181817C21F002014B -:103BB00017E0297A012903D0022914D0FFDFD3E6C8 -:103BC0001F271026002C95D06988A180A989218102 -:103BD000E9896181298AA181698AE181817C21F059 -:103BE00001018174C0E6122768881026214601F081 -:103BF00003F9B9E6287A072850D2DFE800F0373D0C -:103C00003D484848040011270926002C94D0B5F8F7 -:103C100002804046FFF76EFA90F822A0A4F80480D4 -:103C2000687A2072042140460CF02AFF05214046A4 -:103C30000CF026FF002140460CF022FF01214046F7 -:103C40000CF01EFF032140460CF01AFF02214046F3 -:103C50000CF016FF062140460CF012FF07214046EB -:103C60000CF00EFF504601F06EF87DE61B2709268A -:103C7000002C8AD0A180E6E61B270926002C84D0E0 -:103C8000A180287A012800D0022020726CE64A46E2 -:103C900021462846BDE8F04701F0AFBEFFDF63E6EE -:103CA00030B5294D97B0E878132802D0082017B016 -:103CB00030BD22208DF800000BA968460AF0CAF931 -:103CC000040002D1287901F03EF80021062010F00E -:103CD0007BFA2046EBE700B51B4897B0C078122866 -:103CE00001D0082016E41E208DF8000000208DF879 -:103CF00002008DF803000BA968460AF0ABF9002812 -:103D0000F0D10021062010F05FFA1120FFF78EF9A4 -:103D10000020E7E710B50C4C96B02078012815D0AC -:103D20001B208DF8000000208DF802000BA96846CA -:103D30000AF090F900280AD10021084610F044FA50 -:103D40002078032805D007E0CC010020082016B019 -:103D500010BDA07800F0F7FF012000F0C3FF0020A5 -:103D6000F5E770B5002538B1022817D0062836D0FF -:103D7000072800D0FFDF70BDFFF7CCFF0028FAD185 -:103D800005F013FB0028F6D0017821F00F01891C03 -:103D900021F0F0012031017005723FE08EB2304613 -:103DA000FFF7A8F9040000D1FFDF20782128E2D036 -:103DB00005F0FBFA60B1017821F00F01891C21F0B8 -:103DC000F00110310170022101724680A57525E0D5 -:103DD00021463046BDE870401322FFF740BBFE4845 -:103DE000C478122C03D0132C04D0FFDF70BDFFF772 -:103DF00072FF01E0FFF754FF0028F7D105F0D5FA74 -:103E00000028F3D0017821F00F01891C21F0F00186 -:103E100020310170122C05D002210172BDE87040E2 -:103E200005F0C6BA0121F8E72DE9F04116460C006D -:103E3000804600D1FFDF307820F00F00801C20F09A -:103E4000F000103030702078012804D0022817D0FC -:103E5000FFDFBDE8F0814046FFF74CF9050000D1D7 -:103E6000FFDF0320A87505F0A3FA94E80F000836D9 -:103E700086E80F00D848817C41F001018174E8E7B1 -:103E80004046FFF737F9050000D1FFDFA1884FF664 -:103E9000FF700027814202D1E288824203D0814232 -:103EA00001D1E08840B105F083FA94E80F000836AC -:103EB00086E80F00AF75CCE7A87D0128C9D178232B -:103EC00000224146022010F0D5F80220A875C0E774 -:103ED00030B5054697B00C46084610F0C1F978BBDE -:103EE00000210120203D072D73D2DFE805F00425D5 -:103EF0004C515A6640000021072010F03BF908B1F0 -:103F00001120D4E624208DF80000D4F80200CDF86A -:103F10000200A0798DF806000BA968460AF09AF80D -:103F2000050057D1002208231146072010F0A2F8FF -:103F300007284FD0FFDF4DE0606810F0D5F908B1D9 -:103F40001020B4E64A208DF800002088ADF8020069 -:103F50006088ADF804000BA968460AF07BF80500FC -:103F600038D1606898B3BDF83010018032E04C2041 -:103F70008DF800002088ADF80200A07800F0010064 -:103F80008DF8040014E0206801F0D5FF054621E01B -:103F90004B2207E08DF802000AE000BF8DF8021006 -:103FA00006E046228DF800202278D207F6D0F1E70D -:103FB0000BA968460AF04EF8E8E738208DF80000B3 -:103FC0002088ADF802006088ADF80400F0E701E059 -:103FD000FFE7072528466AE630B5054697B00C4648 -:103FE000084610F063F908B1102060E6203D072D67 -:103FF00027D2DFE805F00424242426262400208884 -:10400000FFF778F820B10078222804D208204EE685 -:1040100043F202004BE625208DF800002088ADF821 -:1040200002000BA968460AF015F80028DDD1DDF87A -:104030003210C4F802109DF83610A17137E6062040 -:1040400035E6072033E66448801D704738B51621F1 -:1040500061481DF0C8FD012000F044FE1120FEF76C -:10406000E5FF5D4C6846E11D05F0FFF89DF8001086 -:10407000A07961F3470020F00100A07100202074B6 -:104080004FF46170E08102206074FFF71AF800B10C -:10409000FFDFFDF769F901F0E2FA38BD10B50C4613 -:1040A000402120461DF09FFDA07F20F00300A07757 -:1040B000202020700020A07584F8230010BD7047D8 -:1040C0007CB5054610F0CCF808B110207CBD424C00 -:1040D000A11DD4F806000090D4F80A0001902846EB -:1040E000FFF77CF90028F1D1FEF7EBFF0028EDD0B7 -:1040F0000099C4F80610BDF8041061819DF80610FF -:1041000021737CBD10B5044610F0D0F808B1102022 -:1041100010BD314922468879C91D4008FFF775F95D -:10412000002010BD2DE9F0479CB00D4604004FF073 -:10413000000812D00822FFF7A0F800281CD10026A2 -:1041400009E000BF54F8260004A9FFF70FF9002882 -:1041500012D1761CF6B2AE42F4D32F460A2006AD39 -:104160000DF1440A8DF8180026465146284609F0FC -:1041700071FF20B143F203201CB0BDE8F087404638 -:10418000DFF8548088F805002EB300244FF00B09A7 -:104190001DE000BF56F8240005A9FFF7E7F800B1BD -:1041A000FFDF9DF81400A87056F8240050F8011F96 -:1041B000C5F803108088A5F8070085F800905146DF -:1041C000284609F047FF00B1FFDF641CE4B2BC429F -:1041D000E0D388F8057001E0CC0100200020CBE797 -:1041E0002DE9F0479EB01546894604001DD00F46C4 -:1041F00008222946FFF741F8002810D1002612E0D6 -:1042000054F8260005A9103000F0DEFD002806D184 -:104210003FB157F8260010F023F810B110201EB05F -:10422000ABE7761CF6B2AE42EAD30026A5F1010850 -:104230001CE000BF06F1010A0AF0FF0712E000BF10 -:1042400054F82600017C4A0854F827100B7CB2EB86 -:10425000530F05D10622113011311DF021FC78B128 -:104260007F1CFFB2AF42EBD30AF0FF064645E1DB0D -:10427000C8462E4607AD0DF1480924B1012003E0E0 -:1042800043F20520CBE700208DF81E0031208DF889 -:104290001C004946284609F0DDFE38B934208DF867 -:1042A0001C004946284609F0D5FE10B143F204200F -:1042B000B5E77CB300272BE054F82700A91C103089 -:1042C00000F082FD00B1FFDF54F82700102250F803 -:1042D000111FC5F803108088A5F8070054F82710AF -:1042E00005F109001DF008FCB8F1000F16D058F8D0 -:1042F0002710102205F119001DF0FEFB3220287056 -:104300004946284609F0A6FE00B1FFDF7F1CFFB238 -:10431000B742D1D3FFF7E2F8002080E705F119009A -:1043200001F0FDFDEAE770B596B004460FF098FF86 -:1043300018B960680FF0E1FF10B1102016B070BD21 -:1043400060884AF2B811884207D82078FE4D6E4640 -:1043500028B1012806D0022804D00720EEE7FEF796 -:10436000B0FE1AE06078022804D0032802D043F29D -:104370000220E3E7687417208DF80000697C0020B4 -:10438000CDF80200ADF80600022934D003292FD061 -:10439000FFDF0BA9684609F05DFE0028CED16068FA -:1043A00001F0B0FD207870B101208DF80200F01C02 -:1043B00001F0B5FD4E208DF800000BA9684609F00C -:1043C00049FE00B1FFDF20782874FFF787F8608886 -:1043D00098B1E88180B2ADF8020030208DF800007D -:1043E0000BA9684609F036FE00B1FFDF0020A5E703 -:1043F0008DF80700CDE74020FAE74FF46170E8E759 -:1044000010B504460FF052FF20B9606838B10FF0C4 -:104410006BFF08B1102010BD606801F080FDCA4834 -:10442000C1896180417C6170007C2070002010BDDA -:104430002DE9F0419CB0054600208DF864008DF810 -:1044400060008DF830008DF868001E4614468846DE -:1044500028460FF052FF18B920460FF04EFF10B15A -:1044600010201CB0F5E455EA040018D01F270CAB4F -:1044700019AA414628460097FEF71BFF0028F0D1F5 -:104480001AAB18AA314620460097FEF712FF002803 -:10449000E7D19DF86000C00703D00A20E1E70720BC -:1044A000DFE701AF7DB11A208DF804008DF806809A -:1044B00042462946F81C1DF01FFB0DA901A809F072 -:1044C000C9FD0028CDD17CB120208DF804008DF8E5 -:1044D000066032462146F81C1DF00EFB0DA901A80E -:1044E00009F0B8FD0028BCD197499DF8300048700C -:1044F0000020B6E72DE9F0479CB08A464FF000084F -:1045000092A104468DF83480D1E90001CDE919016A -:1045100020460FF0A5FE90B92078012803D16068ED -:104520000FF09EFE58B9884D4FF00109287C40B12C -:10453000687C022805D160680FF0DFFE08B110200A -:104540001AE62878012801D0082015E607200CF08B -:1045500037FA18B9207878B101280DD0FEF780FD20 -:1045600060B1608943F6E172A0F1200191422178A7 -:104570000CD3012904D0B6E01220FDE51320FBE5A1 -:1045800000287DD1A18900297AD109E0012907D02D -:104590006978C90704D0A189002971D0B4296FD8DE -:1045A000217831B1012908D0022904D0032967D12B -:1045B0000AE0002609E0022607E008B9A08908B150 -:1045C000042609E0012607E00326287C50B1687C18 -:1045D000022807D1606828B10DA96068FEF7C6FE01 -:1045E0000028ADD1207A30B1012806D0022806D0AB -:1045F000032878D105E0002704E0012702E0022724 -:1046000000E003270EB1022E0ED16FB16879B8B366 -:104610006878800702D043F20120ADE5022E03D175 -:10462000022F60D0032F5ED0207808B1012806D178 -:10463000504600F06BFB002887D185F802A01820B7 -:104640008DF838006089ADF83A006089ADF83C001B -:104650008DF83E600DF13F00FEF7ABFE00B1FFDFCD -:104660009DF834008DF840002078012806D0287C81 -:1046700068B1687C02280AD1606840B1606800E0D7 -:1046800031E050F8011FCDF84110808802E040462B -:10469000CDF84180ADF845008DF84870A07BC0F39F -:1046A0004002014662F35F01C0F3800041EA8000EE -:1046B00019A9085C8DF84700A8B169460EA809F051 -:1046C000C9FC0028A9D11B208DF838008DF83A903C -:1046D00069460EA809F0BEFC00289ED19DF8010095 -:1046E0001B281CD101E0072046E5052E0CD2DFE88F -:1046F00006F0030308080300A87800F017FB032066 -:1047000000E0022000F0EEFA012E0AD0A08940B1AC -:1047100000228300114610460FF0ACFC08B10320C4 -:104720002AE5002028E52DE9FC4107460D46032631 -:1047300008460FF0E2FD00286CD13846FEF7DAFC9F -:1047400004000CD0207805E0CC0100200706050409 -:1047500003020100222805D20820BDE8FC8143F2B3 -:104760000200FAE7A07F00F0030C2DB12946604655 -:10477000FEF74DFD0600F0D1BCF1010F05D0BCF1F4 -:10478000020F18D0FFDF3046E7E7A07D2946022858 -:1047900001D011B107E01120DFE76846FCF7F2FE17 -:1047A0000028DAD16946384606F075FD0600EAD1E0 -:1047B0000120A075E7E7A07D032803D1FE48807C97 -:1047C000C00701D035B30EE025B1A07F40071FD44C -:1047D000002100E00121384606F07DFD0600D2D11F -:1047E000A075002DCFD02A4621463846FEF759FE47 -:1047F00006461128C7D1A07F4107C4D4296844F8D0 -:104800000E1F6968616040F0040020740026BAE75A -:104810001126B8E71020A0E770B50C460546FEF754 -:1048200069FC010005D022462846BDE87040FEF72D -:1048300016BE43F2020070BD00B597B043218DF85B -:1048400000108DF802000BA9684609F003FC17B0B0 -:1048500000BD0123FEF751BC00231A461946FEF79E -:104860004CBC30B597B004460FF0FAFC10B11020E4 -:1048700017B030BD204600F095FA0028F8D1CE4D93 -:10488000E878112801D00820F2E7FEF7E9FBE0B351 -:104890002078800701D56879C0B31D208DF800000D -:1048A0002078022200F001008DF802006088ADF847 -:1048B0000400A088ADF806002078C0F3400102EAA9 -:1048C000500001438DF8091002A8FEF772FD00B1F7 -:1048D000FFDF0BA9684609F0BDFB0028C8D11E20E8 -:1048E0008DF8000001208DF8020000208DF80300F3 -:1048F0000BA9684609F0AEFB0028B9D1E08800F0AA -:104900006DFA0400B4D1122001E004E005E0FEF7E6 -:104910008DFB2046ACE71320AAE70720A8E72DE986 -:10492000F043A54E074697B0F078994615460C46D9 -:10493000122803D1FFF7CFF9002816D120460FF037 -:104940008FFCE8BB28460FF08BFCC8BB204600F06C -:1049500029FA002809D129460220FEF758FC002830 -:1049600003D1F078112803D0082017B0BDE8F083F8 -:1049700006200CF025F850B12078800701D5707919 -:1049800038B1FEF76DFB022805D21320EDE71220A7 -:10499000EBE70720E9E721208DF800006088ADF8FB -:1049A0000200A088ADF8040020784FF00008C0F3A2 -:1049B00040008DF80600207880071FD4384600E0BC -:1049C00002E00FF04DFC08B11020CEE73878400827 -:1049D00008D0012809D0022807D0032805D043F2C7 -:1049E0000220C2E78DF8078002E001208DF8070061 -:1049F00057F8010F0290B888ADF80C000DF10E00C9 -:104A0000FEF7D7FC08B10320AFE72888ADF8100007 -:104A10006888ADF81200A888ADF81400E888ADF8F1 -:104A20001600ADF81880ADF81A80484600F06EF90F -:104A300000289AD186F804900BA9684609F00AFB71 -:104A4000002892D1307900F071F9E08800F0C6F9C1 -:104A500004008AD11320FEF7E9FA204685E730B535 -:104A6000054697B00C4608460FF020FC08B1102010 -:104A7000FEE62846FEF73EFB38B10178222902D334 -:104A8000807F800604D40820F2E643F20200EFE6BD -:104A900013208DF80000ADF802500BA9684609F00C -:104AA000D9FA0028E4D19DF932107F2901D0217074 -:104AB000DEE60520DCE630B5054697B00C46084634 -:104AC0000FF0CEFB08B11020D2E62846FEF712FB0D -:104AD00020B10078222804D20820C9E643F202005F -:104AE000C6E63548807C400701D51120C0E6207815 -:104AF000800802D16078800801D00720B8E65620EF -:104B00008DF80000ADF8025020788DF80400607830 -:104B10008DF805000BA9684609F09CFAA8E62DE976 -:104B2000F041B0B014460D460646FEF7E3FA070022 -:104B300006D03878222806D2082030B0BDE8F081AF -:104B400043F20200F9E728460FF0D7FB30B94FF0E7 -:104B500000084CB120460FF0C7FB08B11020ECE76D -:104B6000C4F80080A4F804801348807C800701D535 -:104B70001120E2E797F8220004F0ACF98088011DCB -:104B8000FB2901D2001D00E0FB20C0B26A46294685 -:104B900000F0E3F82C22094904A81CF0F2FFBDF84C -:104BA0000200ADF81400BDF80600ADF81600ADF82F -:104BB0001260BDF8000003E0CC010020A01F02003D -:104BC000ADF81800BDF80400ADF81A001AA904A841 -:104BD00009F040FA00B1FFDFBDF86C00ADF8080045 -:104BE000BDF86E00ADF80A00BDF87000BDF8721097 -:104BF000BDF800200844ADF80C0007201B2A9CD308 -:104C0000BDF802101B2998D3FB2A96D8FB2994D80B -:104C100006278A4210D10121104600F05AF8BDF84B -:104C20000410884208D1BDF80200012100F051F8BB -:104C3000BDF80610884201D038467EE7BDF808006E -:104C400028B9BDF80A1011B9BDF80C1029B35DB12F -:104C5000298849B1698839B124B102982060BDF82A -:104C60000C00A080132068E7BDF80010BDF80A20F2 -:104C7000081A80B2ADF80000BDF80210891AADF82C -:104C80000210012100F025F8ADF80400BDF8020083 -:104C9000012100F01EF8ADF806002C226B490FA888 -:104CA0001CF06FFFADF83E60BDF80200ADF84000AB -:104CB000BDF80600ADF84200BDF80000ADF84400B4 -:104CC000BDF80400ADF8460025A90FA809F0C2F907 -:104CD00033E7022903D0C000703080B270478000F3 -:104CE0003C30FAE730B55A4D040008D0012C04D00E -:104CF000022C06D0032C04D0FFDF2C7030BDFFDF68 -:104D0000FBE728780128F8D0FFDFF6E710B5044666 -:104D100004F0E0F830B1407830B1204604F0EEFB0A -:104D2000002010BD072010BD122010BD10B504F0EA -:104D3000D1F8040000D1FFDF607800B9FFDF6078B0 -:104D4000401E607010BD10B504F0C4F8040000D11E -:104D5000FFDF6078401C607010BD10B5144631B1A3 -:104D60000A68226049686160218839B107E02080C3 -:104D700060800121FFF7ADFFA0800DE020806188F9 -:104D800001B96080A08820B920880121FFF7A1FF28 -:104D9000A080E088002804D160880121FFF799FFF6 -:104DA000E08010BD418843F6FD730A1F9A4209D284 -:104DB0008088042806D3B0F5804F03D8884201D8F4 -:104DC00000207047072070470278520804D0012A5B -:104DD00002D043F202207047FEF7C8BA10B548B1BE -:104DE00083000022114606200FF044F9062801D066 -:104DF000032010BD002010BD70B50C0006460DD07C -:104E0000FEF778F9050000D1FFDFA6802889208110 -:104E1000288960816889A081A889E08170BD10B56A -:104E200000231A4603E0845C2343521CD2B28A4218 -:104E3000F9D30BB1002010BD012010BD00B5012831 -:104E400003D0022801D0FFDF002000BDF81F0200C0 -:104E5000CC01002010B504460FF002FA08B1102072 -:104E600010BD2078C0F30210042807D86078072806 -:104E700004D3A178102901D8814201D2072010BDA6 -:104E8000E078410706D421794A0703D4000701D40A -:104E9000080701D5062010BD002010BD10B51378FD -:104EA0005C08C37F64F30003C3771478A40864F339 -:104EB0004103C3771078C309487863F34100487011 -:104EC00013781C090B7864F347130B701378DB0815 -:104ED00063F3000048705078487110BD10B5C47875 -:104EE0000B7864F300030B70C478640864F3410327 -:104EF0000B70C478A40864F382030B70C478E408D0 -:104F000064F3C3030B700379117863F3000111702C -:104F100003795B0863F34101117003799B0863F324 -:104F2000820111700079C00860F3C301117010BDD7 -:104F300070B514460D46064604F037FA80B1017884 -:104F4000182221F00F01891C21F0F001A03100F896 -:104F5000081B21461CF015FEBDE8704004F028BA7D -:104F600029463046BDE870401322FEF778BA10B5E6 -:104F7000FE4C94F8300000280CD104F120014FF6CB -:104F8000FF72A1F110000DF04DF900B1FFDF01201B -:104F900084F8300010BD2DE9F047064608A8894680 -:104FA00090E830041F469046142128461CF03DFE30 -:104FB0000021CAF80010B8F1000F03D0B9F1000FBA -:104FC00003D114E03878C00711D020680FF06EF9D3 -:104FD000F0BBB8F1000F07D12068123028602068BC -:104FE000143068602068A8602168CAF8001038781A -:104FF000800728D560680FF077F948BBB9F1000F3A -:105000002DD0FFF720F80168C6F8C8118188A6F8EE -:10501000CC11807986F8CE01FFF7A9FFDFF84C8329 -:1050200008F12008C5F80C80626862B196F8C801E2 -:1050300006F2C91140081032FEF7E7F91022414686 -:1050400060681CF059FD3878400712D5A06800E070 -:1050500002E00FF02BF950B11020BDE8F087606836 -:105060000028F9D0E8606068C6F8C401EBE7A068E2 -:1050700028610020F1E730B5054608780C4620F09D -:105080000F00401C20F0F0011031217000206070F2 -:1050900095F8230030B104280FD0052811D0062838 -:1050A00014D0FFDF20780121B1EB101F04D295F856 -:1050B000200000F01F00607030BD21F0F0002030B3 -:1050C00002E021F0F00030302070EBE721F0F0003A -:1050D0004030F9E710B510B190F8BD4044B1A34895 -:1050E00090F83540002064B108601060186010BD71 -:1050F00000F1BC040C6000F1E40100F58670116061 -:10510000F4E79A4C34340C60EFE700B58BB007231A -:10511000CDE902128DF801300191944900236431E8 -:105120000591099301468DF8103068460DF052F84C -:10513000002800D0FFDF0BB000BD70B590B0154661 -:105140000C4602220646ADF80820092103AB04F004 -:105150006EFF0490002812D00C208DF8010004206E -:105160008DF8040004F59A74099605948DF818508A -:105170000AA968460DF02EF800B1FFDF012010B03B -:1051800070BD30B597B00C462C251A998DF800509B -:10519000ADF80200B3B11868019058680290ADF8FC -:1051A0000C2010220DF10E001CF0A6FC0BA9684685 -:1051B00008F050FF002803D1A17F41F01001A17732 -:1051C00017B030BD00200190E8E72DE9F047064612 -:1051D000808A8CB080B20D468246FDF78BFF044674 -:1051E000624F3078283FDFF884914FF00008112893 -:1051F00073D2DFE800F072F1350936777E98A7F2B6 -:10520000EFEEEDEC5BECEC00A07F00F0030001287A -:1052100006D0002150460BF021FC050003D101E02F -:105220000121F7E7FFDF99F85C10C90702D0D9F830 -:1052300060000BE0032105F121000EF0E2FCD5F83F -:1052400021004B49B0FBF1F201FB1200C5F821002F -:105250007068A867B068E8672078252800D0FFDF6D -:10526000ECE0A07F00F00300012806D000215046AA -:105270000BF0F4FB060003D101E00121F7E7FFDFAB -:105280003078810702D52178252904D040F001002B -:1052900030700CB0E1E60220287096F820002871EA -:1052A00006F121003136C5E90206F2E7A07F00F0E1 -:1052B0000300012806D0002150460BF0CFFB04006C -:1052C00003D101E00121F7E7FFDF2078C10605D512 -:1052D0001320287041346C60DBE7BEE140F0080029 -:1052E0002070D6E72148082128380EF08AFC0320D8 -:1052F00016E02A208DF8000010220DF102007168DE -:105300001CF0FAFB10220DF11200B1681CF0F4FB46 -:10531000164968462C3908F09DFE00B1FFDF0420D5 -:1053200028706F60B5E7E07FC00600D5FFDF307CF6 -:10533000B28800F001030CB05046BDE8F0470921E7 -:1053400005F00BBD04B9FFDF716821B1102204F133 -:1053500024001CF0D1FB28212046FDF703FFA07F8D -:1053600000F00300022814D104E00000180200201D -:1053700040420F0004F12400002300901A46214609 -:105380005046FFF7FEFE112807D029212046FDF7E1 -:10539000E9FE307A84F820007BE7A07F000700D583 -:1053A000FFDF14F81E0F40F008002070A4F81680EC -:1053B000C4F81880C4F81C806178084661F3820044 -:1053C000410861F3C3006070307AE07061E727E064 -:1053D0003FE17AE051E000E037E0A07F00F0030019 -:1053E000012806D0002150460BF038FB040003D101 -:1053F00001E00121F7E7FFDF022104F189000EF04F -:1054000000FC1020287004F5E4706860B4F889107E -:10541000298204F18000FD496861C5E9029138E7FD -:10542000A07F00F00300012805D0002150460BF0BA -:1054300015FB18B901E00121F8E7FFDF0CB0324697 -:1054400021465046BDE8F04772E504B9FFDF2078F9 -:105450002128A1D93079012803D1E07F40F0100044 -:10546000E077324621465046FFF762FD0CB02046F9 -:10547000BDE8F0472321FDF775BE3279AA8005F11A -:1054800008030921504604F0D2FDE86010B1112054 -:105490002870FEE6A07F00F00300012806D000215E -:1054A00050460BF0DBFA040003D101E00121F7E7DD -:1054B000FFDF04F1660102231022081F0BF03BF905 -:1054C00080F8008031794170E3E6A07F00F00300AE -:1054D000012806D0002150460BF0C0FA050003D188 -:1054E00001E00121F7E7FFDF95F8880000F00300F5 -:1054F000012879D1A07F00F00307E07FC0F34006C8 -:1055000016B1012F04D02BE095F8A400C0072AD0D3 -:10551000D5F8C00118B395F88720017C62F38701A4 -:105520000174E27FD5F8C00162F341010174D5F83E -:10553000C00166F300010174AEB1D5F8C0011022BC -:1055400004F124018C351CF0D7FA287E40F00100CC -:105550002876287820F0010005F88C0900E016B1C3 -:10556000022F04D02CE095F88C00C00726D0D5F887 -:10557000BC1119B395F88720087C62F38700087482 -:10558000E27FD5F8BC1162F341000874D5F8BC1174 -:1055900066F3000008748EB1D5F8BC01102204F146 -:1055A00024018C351CF0A8FA287840F0010005F899 -:1055B000180B287820F0010005F8A409022F44D028 -:1055C0005FF0000000EB400005EBC00090F88C009D -:1055D000800709D595F88000D5F8C421400805F169 -:1055E00081011032FDF711FF05208DF8000095F8BC -:1055F00088006A4600F003008DF8010095F88C10D1 -:105600008DF8021095F8A4008DF80300214650464D -:1056100001F046FA2078252805D0212807D0FFDFA1 -:105620002078222803D922212046FDF79BFDA07F68 -:1056300000F0030001280AD0002150460BF020FAA8 -:1056400000283FF432AEFFDF23E60120BAE7012154 -:10565000F3E7716881F801801BE6FFDF19E670B59A -:105660006A4C0025103C04F85C5F65600CF07FFD1F -:105670006649A1F1100003F02AFE04F82C5C062014 -:10568000607262487C3020615030A0611030E0616F -:1056900070BD70B50D46FDF72DFD040000D1FFDF94 -:1056A0004FF4E87128461CF0C0FA5848543068613D -:1056B00004F124002861A07F00F00300012809D034 -:1056C0005FF0020105F59A700CF052FD002800D041 -:1056D000FFDF70BD0121F5E70A46014602F59A7029 -:1056E0000CF066BD70B5054640689CB0017809298C -:1056F00006D00C2937D00D2933D0FFDF1CB070BD88 -:1057000046883046FDF7F6FC040000D1FFDF207824 -:105710002128F3D0282821D1686802210C3001F01B -:10572000B4F9D8B168680821001D01F0AEF9A8B13C -:105730002D208DF80000ADF80260102204F1240144 -:1057400001A81CF0D9F90BA9684608F083FC00B148 -:10575000FFDF29212046FDF705FDCFE703F028FEF6 -:10576000CCE701218171686886883046FDF7C2FC6C -:10577000040000D1FFDFA07F00F00301022902D165 -:1057800020F01000A077207821280AD0686881795D -:1057900009B1807880B1A07F00F0030002285ED0BC -:1057A000FFDFA07F00F003000228A7D1FDF7B3FEC2 -:1057B0000028A3D0FFDFA1E703F0FAFDE07FC107D7 -:1057C00028D0800705D594F8200000F01F0010288D -:1057D0001ED0052084F82300207829281CD02428F6 -:1057E000DFD1314605200EF0EFFC22212046FDF7E7 -:1057F000B9FCA07F00F0030001282ED00021304624 -:105800000BF03EF90028CCD0FFDFCAE728020020C9 -:105810000620DFE70420DDE7A07F00F00300012879 -:1058200006D0002130460BF019F9050003D101E044 -:105830000121F7E7FFDF25212046FDF793FC0F202C -:105840008DF8580016A905F59A700CF0A8FC0228EE -:10585000A7D00028A5D0FFDFA3E70121CFE703F001 -:10586000A7FD9EE72DE9F0438BB099461546884683 -:105870000646FDF73FFC04004FD0207822284CD389 -:1058800023284AD0E07FC00647D4A07F00F0030061 -:10589000012806D0002130460BF0E0F8070002D0C6 -:1058A0000CE00121F7E7A07F00F00300012805D1FB -:1058B0000121002230460BF0C8F8074601AB02AACE -:1058C00003A93846FFF706FC039800B9FFDF4FB184 -:1058D000039807F59A7787612078222806D0242834 -:1058E00004D007E003990020886103E025212046C9 -:1058F000FDF738FC03980B21417046628580C0E9B2 -:105900000289029901610199416104A90CF062FCCC -:10591000022802D0002800D0FFDF0BB0BDE8F083E2 -:1059200070B586B00546FDF7E5FB017822291CD944 -:10593000807F00F00300012806D0002128460BF0EC -:105940008DF8040030D101E00121F7E7FFDF2BE003 -:10595000B4F8620004F1660630440178427831B14F -:1059600021462846FFF7E9FBB8B906B070BDADF88F -:1059700004200921284602AB04F059FB03900028BB -:10598000F3D011208DF80000694604F59A700CF0F0 -:1059900006FC022801D000B1FFDF022310223146AD -:1059A00004F162000AF0FDFEB4F864000028CFD1D3 -:1059B000DBE710B586B00446FDF79CFB0178222991 -:1059C00019D9807F00F00300012806D0002120466D -:1059D0000BF044F8040003D101E00121F7E7FFDFF9 -:1059E00012208DF80000694604F59A700CF0D7FB80 -:1059F000002800D0FFDF06B010BD2DE9F05F05469E -:105A00000C4600270078904601093E46BA4604F14C -:105A1000080B02297ED0072902D00A2909D142E0C9 -:105A200068680178092905D00C292CD00D292AD0C5 -:105A3000FFDFB2E114271C26002C6CD04088A08028 -:105A4000FDF758FB5FEA000900D1FFDF99F8170066 -:105A50005A46400809F11801FDF7D7FC68688089AB -:105A6000208269684868C4F812008868C4F8160083 -:105A7000A07E20F0060040F00100A07699F81E00FC -:105A800040F040014DE01A270A26002CD5D080882E -:105A9000A080FDF72FFB050000D1FFDF5946284607 -:105AA000FFF7E9FA79E10CB1A88BA080287A0D28DC -:105AB0007ED006DC01287CD0022808D0032804D13F -:105AC00035E00F2876D0102875D0FFDF65E11E275E -:105AD0000926002CB1D0A088FDF70CFB5FEA000975 -:105AE00000D1FFDF287B00F003000128207A1BD0C3 -:105AF00020F001002072297B890861F341002072A7 -:105B0000297BC90861F382002072297B090961F3AE -:105B1000C30001E036E1E9E0207299F81E0040F090 -:105B2000800189F81E1038E140F00100E2E71327F8 -:105B30000D26002CAAD0A088FDF7DCFA8146807FD4 -:105B400000F00300012806D00021A0880AF086FF9B -:105B5000050003D101E00121F7E7FFDF99F81E00FE -:105B600000F00302012A59D0E86F817801F00301A7 -:105B70000129217A54D021F00101217283789B08F8 -:105B800063F3410121728378DB0863F382012172A0 -:105B900083781B0963F3C3012172037863F3061151 -:105BA0002172437863F3C711217284F809A003E0DE -:105BB0005EE0A4E08BE09CE0C178A172012A32D0C3 -:105BC0004279E17A62F30001E1724279520862F3AC -:105BD0004101E1724279920862F38201E1724279F5 -:105BE000D20862F3C301E1720279217B62F3000102 -:105BF00021730279520862F34101217302799208FC -:105C000062F3820121730079C00860F3C30121733C -:105C100099F80000232859D9262168E0A86FA4E745 -:105C200041F00101A9E70279E17A62F30001E17232 -:105C30000279520862F34101E1720279920862F33B -:105C40008201E1720279D20862F3C301E172427902 -:105C5000217B62F3000121734279520862F3410112 -:105C600021734279920862F3820121734079CBE774 -:105C700018271026D4B3A088FDF73CFA8346807F0E -:105C800000F00300012807D00021A0880AF0E6FEFA -:105C90005FEA000903D101E00121F6E7FFDFE868D0 -:105CA000A06099F8000040F0040189F8001099F80C -:105CB0000100800708D5012020739BF800002328ED -:105CC0006BD9272158464FE084F80CA065E01527D2 -:105CD0000F265CB1A088FDF70DFA814606225946D1 -:105CE000E86808F01FFA0120A0739BE03FE04846F7 -:105CF0003AE016270926D4B3287B20724DE0287B92 -:105D000019270E269CB3C4F808A0A4F80CA00128FB -:105D100007D0022805D0032805D0042803D0FFDFD0 -:105D20000DE0207207E0697B042801F00F0141F0CB -:105D3000800121721CD0607A20F003006072A0887C -:105D4000FDF7D8F905460078212826D0232800D071 -:105D5000FFDFA87F00F00300012811D00021A088F8 -:105D60000AF08EFE22212846FDF7FCF915E004E03A -:105D7000607A20F00300401CE0E7A8F8006011E022 -:105D80000121ECE70CB16888A080287A03282BD089 -:105D900004280AD005284BD0FFDFA8F800600CB11A -:105DA000278066800020BDE8F09F15270F26002C75 -:105DB000E3D0A088FDF79EF9807F00F00300012862 -:105DC00006D00021A0880AF049FE050003D101E0B9 -:105DD0000121F7E7FFDFD5F821000622594608F038 -:105DE000A1F984F80EA0D8E717270926002CC4D003 -:105DF000A088FDF77FF98146807F00F0030001282D -:105E000006D00021A0880AF029FE050003D101E098 -:105E10000121F7E7FFDF6878800701D5022000E065 -:105E20000120207299F800002328B6D927215EE7C7 -:105E300019270E26002CA0D0A088FDF75BF95FEA99 -:105E4000000900D1FFDFC4F808A0A4F80CA084F872 -:105E500008A0A07A40F00300A07299F81F1061F327 -:105E60008200A07299F81F10C1F34002114205D0C0 -:105E700099F8201001F01F0110292CD020F0080003 -:105E8000A07299F81F004108607A61F3C300607244 -:105E9000697A01F003010129A5D140F00400607284 -:105EA00099F81E00E97A00F00300012816D0607B03 -:105EB00061F300006073AA7A217B62F30001217311 -:105EC000EA7A520862F341006073A87A400860F3EE -:105ED0004101217361E740F00800D1E7207B61F3C5 -:105EE00000002073AA7A617B62F300016173EA7A91 -:105EF000520862F341002073A87A400860F3410120 -:105F000061734AE710B5FE4C30B10146102204F12E -:105F100020001BF0F1FD012084F8300010BD10B509 -:105F20000446FFF724F8F64920461022BDE8104049 -:105F300020311BF0E1BD70B5F14D06004FF00004BB -:105F400012D00EF08DF908B110240BE00621304676 -:105F500008F0CFF8411C04D02866012085F85C00C9 -:105F600000E00724204670BD0020F7E7007810F01D -:105F70000F0204D0012A05D0022A0CD110E000093A -:105F800009D10AE00009012807D0022805D003281A -:105F900003D0042801D00720704708700020704704 -:105FA0000620704705282AD2DFE800F003070F1704 -:105FB0001F00087820F0FF001EE0087820F00F0096 -:105FC000401C20F0F000103016E0087820F00F00A0 -:105FD000401C20F0F00020300EE0087820F00F0088 -:105FE000401C20F0F000303006E0087820F00F0070 -:105FF000401C20F0F000403008700020704707205F -:1060000070472DE9F041804688B00D4600270846CC -:106010000EF073F9A8B94046FDF76CF8040003D000 -:106020002078222815D104E043F2020008B0BDE830 -:10603000F08145B9A07F010603D500F003000228D6 -:1060400001D01020F2E7A07FC10601D4010702D5DC -:106050000DB10820EAE7E17FC90601D50D20E5E78B -:1060600000F00300022805D125B12846FEF7F2FE14 -:106070000700DBD1A07F00F00300012806D000213B -:1060800040460AF0EBFC060002D00DE00121F7E7E4 -:10609000A07F00F0030001280CD000210022404620 -:1060A0000AF0D3FC060007D0A07F00F0030002280E -:1060B00004D009E00121F1E70420B7E725B12A4621 -:1060C00031462046FEF7EAFE07AB1A4669463046DF -:1060D000FFF700F8009800B9FFDF00990C20487026 -:1060E00006F59A70C1F82480486100200881A07FDD -:1060F00000F00300012828D0EDB302200871301D04 -:1061000088613078400908777078C0F3400048779C -:10611000287800F00102887F62F301008877E27F2F -:1061200062F382008877E27F520862F3C3008877C7 -:10613000727862F304108877A878C87701F1210299 -:1061400028462031FEF7CAFE22E001200871287897 -:1061500000F00102087E62F3010008762A785208F6 -:1061600062F3820008762A78920862F3C300087608 -:106170002A78D20800E007E062F3041008762421B0 -:106180002046FCF7EFFF0BE003200871052008769E -:1061900025212046FCF7E6FFA07F20F08000A077B5 -:1061A00001A900980CF016F8022801D000B1FFDF19 -:1061B00038463BE72DE9FF4F524A0D4699B09A46C3 -:1061C00007CA14AB002783E807001998FCF792FF71 -:1061D000060006D03078262806D008201DB0BDE87D -:1061E000F08F43F20200F9E7B07F00F00309B9F144 -:1061F000010F03D0B9F1020F07D008E03DB91B9899 -:10620000FEF728FE0028E9D101E01B9880BBB07F93 -:1062100000F00300012806D0002119980AF01EFCA6 -:10622000040003D101E00121F7E7FFDF852D28D02D -:1062300007DCF5B1812D1ED0822D1ED0832D08D113 -:106240001DE0862D1FD0882D1FD0892D1FD08A2DAF -:106250001FD00F2020710F281DD003F0A6F8E0B149 -:1062600001208DF83400201D0E902079B8B160E136 -:1062700011E00020EEE70120ECE70220EAE703202E -:10628000E8E70520E6E70620E4E70820E2E7092042 -:10629000E0E70A20DEE70720A0E711209EE7B9F13A -:1062A000010F17D0D4E91E50804602200190012032 -:1062B0000090A87898F80210C0F3C000C1F3C001A4 -:1062C00008405FEA000B63D050460DF0C9FF00287C -:1062D00072D133E0D4E91E850120019002200090A4 -:1062E000214630461B9AFEF7D9FD1B98007800F036 -:1062F0000101A87861F30100A870F17F04E00000BB -:10630000180200202420020061F38200A870F17FAF -:10631000490861F3C300A870617861F30410A870A4 -:106320002078400928706078C0F3400068701B989E -:106330008078E870002068712871BAE7DAF80C00FC -:106340000DF08EFFC0BBDAF81C000DF089FF98BB82 -:10635000DAF80C00A060DAF81C00E06098F80100A0 -:10636000617800F0010041EA4000607098F8021086 -:10637000C0B2C1F30011891E08406070002084F88B -:106380002000009906F1170002290BD001210AE034 -:1063900098F80110607801F00101FD2242EA410104 -:1063A0000840E2E7002104EB810188610199701C3B -:1063B000022902D0012101E028E0002104EB810143 -:1063C0008861A87800F00300012849D198F80200FC -:1063D00000F00300012843D1B9F1010F04D12A1DB7 -:1063E000691D1B98FEF77AFD287998F8041008407B -:1063F0008DF82C00697998F8052011408DF830103F -:1064000008432DD050460DF02BFF08B11020E5E6D3 -:106410000AF1100004F5DE7104F190020490B9F164 -:10642000020F3CD00090CDE9012100210BAB5A4670 -:106430002046FEF7B0FD0028E9D104F5E07104F133 -:10644000A802B9F1010F30D004980090CDE90121E4 -:1064500000210CAB5A462046FEF79DFD0028D6D100 -:106460006078800740D4A87898F80210C0F38000C4 -:10647000C1F38001084337D0297898F8000014AAA6 -:10648000B9F1010F17D032F810204B00DA4012F0AA -:10649000030718D0012F1ED0022F12D11DE0CDF816 -:1064A00000A0CDE901210121C0E7CDF800A0CDE990 -:1064B00001210121CDE732F811204300DA4002F03A -:1064C0000307032F07D0BBF1000F0DD0012906D021 -:1064D000042904D008E00227F5E70127F3E70128A3 -:1064E00001D0042800D10427F07F40F001006BF3B5 -:1064F0004100F077607881074FF003000CD5A07160 -:10650000BBF1000F15D100BF8DF85C0017AA314612 -:10651000199800F0C5FA0CE00221022F18D0012FC3 -:1065200018D0042F22D00020A071F07F20F00100AD -:10653000F07725213046FCF715FE0DA904F59A7079 -:106540000BF02DFE10B1022800D0FFDF002045E641 -:10655000A171D9E7A1710D2104F124001BF065FBA5 -:10656000207840F0020020700420CDE70120A071C7 -:10657000DFE72DE9F04387B09046894604460025C1 -:10658000FCF7B8FD060006D03078272806D0082092 -:1065900007B0BDE8F08343F20200F9E7B07F00F0F6 -:1065A0000300012806D0002120460AF057FA040013 -:1065B00003D101E00121F7E7FFDFA7795FEA0900D6 -:1065C00005D0012821D0B9F1020F26D110E0B8F191 -:1065D000000F22D1012F05D0022F05D0032F05D0A7 -:1065E000FFDF2DE00C252BE0012529E0022527E027 -:1065F00040460DF035FEB0B9032F0ED110224146B2 -:1066000004F121001BF078FA1AE0012F02D0022FCA -:1066100003D104E0B8F1000F12D00720B8E74046DC -:106620000DF01EFE08B11020B2E7102104F1210088 -:106630001BF0D9FA0621404607F05BFDC4F82100A3 -:106640002078252140F0020020703046FCF78AFDBA -:106650002078C10714D020F00100207002208DF8AE -:10666000000004F1210002908DF80450694604F501 -:106670009A700BF094FD022804D018B1FFDF01E0FE -:1066800084F82050002083E730B587B00D460446DB -:10669000FCF730FD88B1807F00F0030001280FD0A7 -:1066A000002120460AF0DAF904000ED028460DF049 -:1066B000D7FD38B1102007B030BD43F20200FAE731 -:1066C0000121EEE72078400701D40820F3E72946AE -:1066D00004F14100202205461BF00EFA207840F01C -:1066E0001000207001070FD520F008002070132043 -:1066F0008DF80000694604F59A7001950BF04FFD86 -:10670000022801D000B1FFDF0020D4E770B50D46AC -:106710000646FCF7EFFC18B1017827291FD102E0EB -:1067200043F2020070BD807F00F00300012806D014 -:10673000002130460AF092F9040003D101E0012162 -:10674000F7E7FFDFA079022809D16078C00706D0FB -:106750002A4621463046FEF7F0FC10B10FE0082033 -:1067600070BDB4F864000E280BD204F16601022358 -:106770001022081F09F0DFFF012101704570002081 -:1067800070BD112070BD70B5064686B014460D462A -:1067900008460DF065FD18B920460DF087FD10B1D3 -:1067A000102006B070BDA6F57F40FF380ED03046F1 -:1067B000FCF7A0FC38B1417822464B08811C1846F2 -:1067C000FCF723FE07E043F20200EAE72046FDF76C -:1067D00099FC0028E5D11021E01D0DF012FAE21D10 -:1067E00029466846FEF791FC102204F11700019932 -:1067F0001BF082F90020D4E72DE9F041044686B071 -:1068000015468846002708460DF077FD18B928463A -:106810000DF073FD10B1102006B008E42046FCF71F -:1068200069FC060003D03078272818D102E043F233 -:106830000200F1E7B07F00F00300012806D000213C -:1068400020460AF00BF9040003D101E00121F7E72B -:10685000FFDF2078400702D56078800701D4082048 -:10686000DAE7B07F00F00300012818D0D4E91E0158 -:10687000407800B1B5B1487810B1B8F1000F11D02F -:10688000C5B1EA1D6846E168FEF73FFC102205F13C -:10689000170001991BF004F930B104270AE0D4E98C -:1068A0001E10E5E70720B7E71022E91D04F13100CB -:1068B0001BF022F9B8F1000F06D0102208F10701F1 -:1068C00004F121001BF018F92078252140F0020086 -:1068D00020703046FCF746FC2078C10716D020F027 -:1068E0000100207002208DF8000004F121000290C8 -:1068F000103003908DF80470694604F59A700BF01F -:106900004EFC022804D018B1FFDF01E084F82070AB -:10691000002081E7F8B515460E460746FCF7EAFB6E -:10692000040004D02078222804D00820F8BD43F2C7 -:106930000200F8BDA07F00F00300022802D043F25D -:106940000400F8BD30460DF08BFC18B928460DF058 -:1069500087FC08B11020F8BD00953288B31C214691 -:106960003846FEF70EFC112814D00028F3D1297CFC -:106970004A08E17F62F30001E1772A7C62F341017A -:10698000E177297C890884F82010A17F21F080011B -:10699000A177F8BDA17F0907FBD4D6F80200C4F89F -:1069A0003600D6F80600C4F83A003088A0861022D7 -:1069B000294604F124001BF09FF8287C4108E07F61 -:1069C00061F38200E077297C61F3C300E077287CE3 -:1069D000800884F82100A07F40F00800A077002004 -:1069E000D3E770B596B00D46064613B1072016B032 -:1069F00070BDFCF77FFB040007D02078222802D36B -:106A0000A07F400604D40820F1E743F20200EEE73D -:106A1000C5B12D208DF80000ADF802601022294686 -:106A200001A81BF069F8287C4108E07F61F30000B1 -:106A3000E077297C61F34100E077287C800884F8C6 -:106A4000200004E02E208DF80000ADF802600BA9B4 -:106A5000684607F0FFFAA17F21F04001A177C6E761 -:106A600070B50D46FCF746FB040005D028460DF036 -:106A70001DFC20B1102070BD43F2020070BD2946FC -:106A80002046FEF7F8FA002070BD04E010F8012B54 -:106A90000AB100207047491E89B2F7D20120704721 -:106AA00070B51546064602F080FC040000D1FFDFF9 -:106AB000207820F00F00801C20F0F00020302070A3 -:106AC00066802868A060BDE8704002F071BC0000DC -:106AD00018B18178012938D101E010207047018870 -:106AE00042F60112881A914231D018DC42F60102B6 -:106AF000A1EB020091422AD00CDC41B3B1F5C05F9A -:106B000025D06FF4C050081821D0A0F57060FF3870 -:106B10001BD11CE001281AD002280AD117E0B0F5D9 -:106B2000807F14D008DC012811D002280FD0032860 -:106B30000DD0FF2809D10AE0B0F5817F07D0A0F57C -:106B40008070033803D0012801D0002070470F2047 -:106B500070470B2826D008DC1BD2DFE800F01C2091 -:106B600025251A25292325271E0011281CD008DCDD -:106B70000C2817D00D281DD00F2815D0102808D1AB -:106B800010E0822809D0842810D0852810D08728CA -:106B900012D003207047002070470520704743F251 -:106BA00003007047072070470F207047042070478C -:106BB000062070470C20704743F20200704738B53A -:106BC0000C46050041D06946FFF7D0F9002819D1DD -:106BD0009DF80010607861F3020060706946681CDF -:106BE000FFF7C4F900280DD19DF80010607861F31B -:106BF000C5006070A978C1F34101012903D00229C1 -:106C000005D0072038BD217821F0200102E021784D -:106C100041F020012170410704D0A978C90861F32F -:106C200086106070607810F0380F07D0A9780909D5 -:106C300061F3C710607010F0380F02D16078400621 -:106C400003D5207840F040002070002038BD70B59A -:106C500004460020088015466068FFF7B0FF002852 -:106C600016D12089A189884211D860688078C00730 -:106C70000AD0B1F5007F0AD840F20120B1FBF0F252 -:106C800000FB1210288007E0B1F5FF7F01D90C202E -:106C900070BD01F201212980002070BD10B504787B -:106CA000137864F3000313700478640864F34103F9 -:106CB00013700478A40864F3820313700478E40862 -:106CC00064F3C30313700478240964F3041313708A -:106CD0000478640964F3451313700078800960F345 -:106CE0008613137031B10878C10701D1800701D52F -:106CF000012000E0002060F3C713137010BD42783C -:106D0000530702D002F0070306E012F0380F02D05A -:106D1000C2F3C20300E001234A7863F302024A701F -:106D2000407810F0380F02D0C0F3C20005E04307EE -:106D300002D000F0070000E0012060F3C5024A70B5 -:106D400070472DE9F04F95B00D00804615D0B8F191 -:106D5000000F16D0122128461AF045FF4FF6FF7B90 -:106D600005AA0121584606F0C0FF002426463746F2 -:106D70004FF420596FF4205A75E0102015B0BDE88B -:106D8000F08F0720FAE700BF9DF81E0001280AD106 -:106D9000BDF81C0048450BD010EB0A000AD00128B2 -:106DA0000CD002280CD0042C0ED0052C0FD10DE0F5 -:106DB000012400E00224BDF81A6008E0032406E084 -:106DC0000424BDF81A7002E0052400E00624BDF892 -:106DD0001A10414547D12C74BEB34FF0000810AAD9 -:106DE0004FF0070ACDE90282CDE900A80DF13C0978 -:106DF0001023CDF8109042463146584607F028F847 -:106E000008BBBDF83C002A46C0B210A90BF084FABA -:106E1000C8B9AE81CFB1CDE900A80DF1080C0AAE1A -:106E200040468CE84102132300223946584607F0B9 -:106E30000FF840B9BDF83C00F11CC01EC0B22A1DBD -:106E40000BF06AFA10B1032098E70AE0BDF82900B8 -:106E5000E881062C05D19DF81E00A872BDF81C0023 -:106E6000288100208AE705A806F04BFF00288BD078 -:106E7000FFF76FFE82E72DE9F0471C46DDE9097850 -:106E8000DDF8209015460E00824600D1FFDF0CB1E0 -:106E9000208818B1D5B11120BDE8F087022D01D0AE -:106EA000012100E0002106F1140005F003FEA8F81E -:106EB000000002463B462946504603F0B8F8C9F8A0 -:106EC000000008B9A41C3C600020E5E71320E3E7BC -:106ED000F0B41446DDE904528DB1002314B1022C44 -:106EE00009D101E0012306E00D7CEE0703D025F077 -:106EF000010501230D742146F0BC03F02EBF1A805A -:106F0000F0BC70472DE9FE4F91461A881C468A4610 -:106F10008046FAB102AB494603F089F8050019D062 -:106F20004046A61C278809F0B5FE324607262946AA -:106F30003B46009609F074FA20882346CDE90050BC -:106F40004A4651464046FFF7C3FF002020800120FB -:106F5000BDE8FE8F0020FBE72DE9F04786B09146A3 -:106F6000DDE90E460F46824603AA05A904A8109D36 -:106F70008DE807009846324621465046FFF77BFFD2 -:106F8000049909B1012200E000222A70002817D1DB -:106F9000F84A03AB1060059A009104F11400CDE9A2 -:106FA00001204A463946504606F048F990B1082873 -:106FB0000ED2DFE800F00407040D0D090B0B0020D2 -:106FC00006B069E71120FBE70720F9E70820F7E79B -:106FD0000320F5E7BDF80C100498CDE90001434605 -:106FE000324621465046FFF773FFE8E72DE9F043AC -:106FF00089B00D46DDE9108781461C4616461421EE -:1070000003A81AF012FE012002218DF810108DF84D -:107010000C008DF81170ADF8146064B1A278D2073D -:1070200009D08DF81600E088ADF81A00A088ADF8F8 -:107030001800A068079008A80095CDE90110424605 -:1070400003A948466B68FFF787FF09B0BDE8F083E6 -:10705000F0B58BB0002406460694079407270894E1 -:1070600005A80994019400970294CDE903400D46C8 -:1070700010232246304606F0EBFE78B90AA806A98E -:10708000019400970294CDE90310BDF8143000225A -:107090002946304606F0B2FC002801D0FFF759FD22 -:1070A0000BB0F0BD06F052BB2DE9FC410C4680460A -:1070B000002602F07AF9054620780D287ED2DFE816 -:1070C00000F0BC0713B325BD49496383AF959B000E -:1070D000A848006820B1417841F010014170ADE04E -:1070E000404602F092F9A9E00421404609F0B6FCBE -:1070F000070000D1FFDF07F11401404605F06EFCE8 -:10710000A5BB13214046FDF787FB97E004214046CD -:1071100009F0A4FC070000D1FFDFE088ADF8000013 -:107120000020B8819DF80000010704D5C00602D5F3 -:10713000A088B88105E09DF8010040067ED5A088B2 -:10714000F88105B9FFDF22462946404601F068FC78 -:10715000022673E0E188ADF800109DF801100906E1 -:107160000FD5072803D006280AD00AE024E004211E -:10717000404609F073FC060000D1FFDFA088F081D3 -:107180000226CDB9FFDF17E00421404609F066FC76 -:10719000070000D1FFDF07F1140006F00EFB90F0AE -:1071A000010F02D1E079000648D5387C022640F074 -:1071B0000200387405B9FFDF224600E03DE02946B1 -:1071C000404601F02DFC39E00421404609F046FC20 -:1071D000017C002D01F00206C1F340016171017CC8 -:1071E00021F002010174E7D1FFDFE5E7022601216A -:1071F000404602F045F921E00421404609F02EFC0A -:107200000546606800902089ADF8040001226946B7 -:10721000404602F056F9287C20F0020028740DE068 -:10722000002DC9D1FFDFC7E7022600214046FBF74A -:10723000CDF8002DC0D1FFDFBEE7FFDF3046BDE84F -:10724000FC813EB50C0009D001466B4601AA002026 -:1072500006F080FE20B1FFF77CFC3EBD10203EBD55 -:1072600000202080A0709DF8050002A900F0070012 -:10727000FEF798FE50B99DF8080020709DF80500B3 -:1072800002A9C0F3C200FEF78DFE08B103203EBD87 -:107290009DF8080060709DF80500C109A07861F3B1 -:1072A0000410A0709DF80510890961F3C300A07057 -:1072B0009DF80410890601D5022100E0012161F347 -:1072C00042009DF8001061F30000A07000203EBD58 -:1072D00070B5144606460D4651EA040005D075B156 -:1072E00008460DF001F878B901E0072070BD294685 -:1072F000304606F090FE10B1BDE8704029E454B16C -:1073000020460CF0F1FF08B1102070BD2146304638 -:10731000BDE8704095E7002070BD2DE9FC5F0C468C -:1073200090460546002701780822007A3E46B2EBD7 -:10733000111F7DD104F10A0100910A31821E4FF024 -:10734000020A04F1080B0191092A72D2DFE802F067 -:10735000EDE005F528287BAACE006888042109F015 -:107360007DFB060000D1FFDFB08928B15227072638 -:10737000C3E000001403002051271026002C7DD00C -:107380006888A0800120A071A88900220099FFF7D9 -:107390009FFF002873D1A8892081288AE081D1E04D -:1073A000B5F81290072824D1E87B000621D5512793 -:1073B00009F1140086B2002CE1D0A88900220099BE -:1073C000FFF786FF00285AD16888A08084F806A0BD -:1073D000A88920810120A073288A2082A4F8129015 -:1073E000A88A009068884B46A969019A01F0F5FACD -:1073F000A8E0502709F1120086B2002C3ED0A889DF -:1074000000225946FFF764FF002838D16888A08021 -:10741000A889E080287A072813D002202073288AC0 -:10742000E081E87BC0096073A4F81090A88A01E0AD -:1074300085E082E0009068884B4604F11202A96959 -:10744000D4E70120EAE7B5F81290512709F11400BA -:1074500086B2002C66D06888042109F0FFFA8346C2 -:107460006888A080A88900220099FFF731FF0028D2 -:107470006ED184F806A0A889208101E052E067E07F -:107480000420A073288A2082A4F81290A88A009071 -:1074900068884B46A969019A01F09FFAA989ABF85F -:1074A0000E104FE06888FBF725FE07466888042128 -:1074B00009F0D4FA064607B9FFDF06B9FFDF687B9B -:1074C000C00702D05127142601E0502712264CB3E2 -:1074D0006888A080502F06D084F806A0287B5946E3 -:1074E00001F08BFA2EE0287BA11DF9E7FE49A8895F -:1074F0004989814205D1542706269CB16888A0801D -:1075000020E053270BE06888A080A889E08019E07C -:107510006888042109F0A2FA00B9FFDF5527082680 -:10752000002CF0D1A8F8006011E056270726002CA7 -:10753000F8D06888A080002013E0FFDF02E0012877 -:1075400008D0FFDFA8F800600CB12780668000201B -:10755000BDE8FC9F57270726002CE3D06888A08051 -:10756000687AA071EEE7401D20F0030009B14143A5 -:10757000091D01EB4000704713B5DB4A0020107174 -:10758000009848B10024684609F06BF8002C02D13D -:10759000D64A009911601CBD01240020F4E770B5A3 -:1075A0000D46064686B014465C2128461AF03DFB7F -:1075B00004B9FFDFA0786874A2782188284601F01A -:1075C00046FA0020A881E881228805F1140130469E -:1075D00005F0E9F96A460121304606F086FB19E01C -:1075E0009DF80300000715D5BDF806103046FFF7DB -:1075F0002FFD9DF80300BDF8061040F010008DF837 -:107600000300BDF80300ADF81400FF233046059ACF -:1076100006F0CCFC684606F074FB0028E0D006B00B -:1076200070BD10B50C4601F1140005F0F3F90146E8 -:10763000627C2046BDE8104001F03EBA70B50546B8 -:10764000042109F00BFA040000D1FFDF04F114015A -:107650000C46284605F0C2F921462846BDE8704090 -:1076600005F0C3B970B58AB00C460646FBF742FD7B -:10767000050014D02878222827D30CB1A08890B117 -:1076800001208DF80C0003208DF8100000208DF8EB -:10769000110054B1A088ADF81800206807E043F24B -:1076A00002000AB070BD0920FBE7ADF81800059094 -:1076B0000421304609F0D2F9040000D1FFDF04F1C3 -:1076C000140005F0BEF9C00601D40820E9E701F076 -:1076D0006CFE60B108A802210094CDE9011095F874 -:1076E000232003A930466368FFF736FCD9E7112051 -:1076F000D7E72DE9F04FB2F802A0834689B01546CE -:1077000089465046FBF7F6FC07460421504609F02F -:10771000A5F90026044605964FF002080696ADF836 -:107720001C6007B9FFDF04B9FFDF4146504603F094 -:107730007CFE60B907AA06A905A88DE807004246A5 -:10774000214650466368FFF796FB00B1FFDF6648AD -:1077500007AB0660DDE9051204F11400CDF80090D6 -:10776000CDE90320CDE9013197F823205946504651 -:107770006B6805F0AFF906000AD0022E04D0032E84 -:1077800014D0042E00D0FFDF09B03046BDE8F08FE2 -:10779000BDF81C000028F7D00599CDE9001042463D -:1077A000214650466368FFF793FBEDE7687840F0A9 -:1077B00008006870E8E72DE9F04F9BB004464FF0F1 -:1077C00000084948ADF85480ADF83080ADF85080DD -:1077D000A0F80880ADF81480ADF81880ADF82080CE -:1077E000ADF81C80007916460D464746012808D0A2 -:1077F000022806D0032804D0042802D008201BB099 -:10780000C4E720460CF02CFDD0BB28460CF028FD28 -:10781000B0BB60680CF071FD90BB606848B16089D6 -:107820002189884202D8B1F5007F01D90C20E6E712 -:1078300080460BAA06A92846FFF709FA0028DED1E0 -:1078400068688078C0F34100022808D19DF81900CB -:1078500010F0380F03D028690CF046FD80B905A957 -:107860002069FFF7ACF90028C9D1206950B16078D0 -:1078700080079DF8150000F0380002D5C0B301E084 -:1078800011E0A8BB9DF8140080060ED59DF81500E8 -:1078900010F0380F03D060680CF026FD18B960684E -:1078A0000CF02BFD08B11020A9E707A96069FFF7CC -:1078B00086F90028A3D1606940B19DF81D0000F051 -:1078C000070101293FD110F0380F3CD008A9A06969 -:1078D000FFF775F9002892D19DF81C00800632D47C -:1078E0009DF82000800604E014030020140000200E -:1078F00029E028D4A06940B19DF8210000F00701DB -:10790000012920D110F0380F1DD0E06818B100789F -:10791000C8B11C2817D20EAA611C2046FFF7BEF979 -:107920000120B94660F30F27BA4607468DF84E008E -:1079300042F60300ADF84C000DF13B0217A9286890 -:107940000AF009FD08B1072059E79DF85C0016A967 -:10795000CDF80090C01CCDE9019100F0FF0B002391 -:107960000BF20122514613A806F002F9F0BBBDF854 -:1079700058000990FE482A8929690092CDE9011032 -:107980006B89BDF82C202868069906F0F1F80100F3 -:107990007ED120784FF0020AC10601D480062BD593 -:1079A000ADF80C90606950B907A906A8FFF7A7F9D0 -:1079B0009DF81D0020F00700401C8DF81D009DF86B -:1079C0001C008DF84E7040F0C8008DF81C0042F687 -:1079D0000210ADF84C000CA903AACDF800A0CDE927 -:1079E0000121002340F2032213A800E01EE00799C2 -:1079F00006F0BEF801004BD1DD484D4608385B4625 -:107A00000089ADF839000EA8CDE90290CDF80490B8 -:107A1000CDF810904FF007090022CDF80090BDF886 -:107A200058104FF6FF7005F0E9FF10B1FFF791F81D -:107A3000E5E69DF83800000625D52946012060F3CB -:107A40000F218DF84E704FF42450ADF84C00ADF876 -:107A5000105062789DF81000002362F300008DF84A -:107A600010006278CDF800A0520862F341008DF852 -:107A7000100004AACDE9012540F2032213A806F064 -:107A800077F8010004D1606888B32069A8B900E0E4 -:107A900086E005A906A8FFF732F96078800706D4CA -:107AA0009DF8150020F038008DF8150005E09DF8D0 -:107AB000140040F040008DF814008DF84E7042F62E -:107AC0000110ADF84C00208940F20121B0FBF1F229 -:107AD00001FB1202606814ABCDF80080CDE9010310 -:107AE000002313A8059906F043F8010058D1207827 -:107AF000C00729D0ADF80C50A06950B908A906A854 -:107B0000FFF7FDF89DF8210020F00700401C8DF8DC -:107B100021009DF820008DF84E7040F040008DF857 -:107B2000200042F60310ADF84C0015A903AACDF8C9 -:107B300000A0CDE90121002340F2032213A80899F7 -:107B400006F016F801002BD1E06868B32946012041 -:107B500060F30F218DF84E7042F60410ADF84C0022 -:107B6000E068002302788DF8602040788DF861008D -:107B7000E06818AA4088ADF86200E06800798DF8E6 -:107B80006400E068C088ADF86500CDF80090CDE9EC -:107B900001254FF4027213A805F0EAFF010003D09B -:107BA000099800F0B5FF2AE67148032108380171F1 -:107BB00056B100893080BDF850007080BDF83000AB -:107BC000B080BDF85400F080002018E670B50125A3 -:107BD0008AB016460B46012802D0022816D104E0CE -:107BE0008DF80E504FF4205003E08DF80E5042F601 -:107BF0000100ADF80C005BB10024601C60F30F24A1 -:107C000004AA08A918460AF0A6FB18B1072048E5FF -:107C1000102046E504A99DF820205548CDE9002113 -:107C2000801E02900023214603A802F2012205F0E3 -:107C30009FFF10B1FEF78DFF33E54D4808380EB1B8 -:107C4000C1883180057100202BE5F0B593B007465F -:107C500001268DF83E6041F60100ADF83C0012AA05 -:107C60000FA93046FFF7B2FF002848D1404C00254D -:107C7000083CE7B31C2102A819F0D7FF9DF80800C3 -:107C80008DF83E6040F020008DF8080042F6052097 -:107C9000ADF83C000E959DF83A00119520F00600D5 -:107CA000801C8DF83A009DF838006A4620F0FF00ED -:107CB0008DF838009DF8390009A920F0FF008DF8F3 -:107CC00039000420ADF82C00ADF830000EA80A9061 -:107CD00011A80D900FA80990ADF82E5002A8FFF73B -:107CE0006AFD00280BD1BDF80000608100E008E0CB -:107CF000BDF80400A081401CE0812571002013B074 -:107D0000F0BD6581A581BDF84800F4E72DE9F74F86 -:107D10001749A0B00024083917940A79A146012A0E -:107D200004D0022A02D0082023B02FE5CA8882425C -:107D300001D00620F8E721988A46824201D1072027 -:107D4000F2E701202146ADF848004FF6FF7860F3D6 -:107D50000F21ADF84A808DF86E0042F6020B0691B5 -:107D60008DF87240ADF86CB0ADF870401CA901E020 -:107D70001C0300201391ADF8508012A805F0E5FF18 -:107D800000252E462F460DAB072212A9404605F0CE -:107D9000DFFF78B182285DD195B38EB3ADF8645022 -:107DA000ADF866609DF85E008DF8144019AC0128AE -:107DB00064D06BE09DF83A001FB3012859D1BDF89B -:107DC000381059451FD118A809A901940294CDE98A -:107DD000031007200090BDF8361010230022404603 -:107DE00006F036F8B0BBBDF86000042801D00628C4 -:107DF0004AD1BDF82410219881423AD10F2093E74F -:107E00003AE0012835D1BDF83800B0F5205F03D045 -:107E100042F6010188422CD1BAF80600BDF83610AE -:107E2000884201D1012700E0002705B19EB12198C9 -:107E300081421ED118A809AA01940294CDE9032019 -:107E4000072000900D4610230022404606F000F85F -:107E500000B902E02DE04E460BE0BDF860000228BC -:107E600001D0102810D1C0B217AA09A90AF054FAFB -:107E700050B9BDF8369086E7052055E705A917A843 -:107E8000221D0AF068FA08B103204DE79DF814009E -:107E90000023001DC2B28DF8142022980092CDE973 -:107EA00001401BA8069905F063FE10B902228AF86A -:107EB0000420FEF74EFE37E710B50B46401E88B093 -:107EC00084B205AA00211846FEF7E8FE00200DF155 -:107ED000080C06AA05A901908CE80700072000906D -:107EE0000123002221464FF6FF7005F087FD04466E -:107EF000BDF81800012800D0FFDF2046FEF729FE5C -:107F000008B010BDF0B5F94F044687B038790E4679 -:107F1000032804D0042802D0082007B0F0BD04AA2A -:107F200003A92046FEF793FE0500F6D1606880782D -:107F3000C0F3410002280AD19DF80D0010F0380F5F -:107F400005D020690CF0D0F908B11020E5E72089B0 -:107F500005AA21698DE807006389BDF81020206813 -:107F6000039905F005FE10B1FEF7F3FDD5E716B154 -:107F7000BDF814003080042038712846CDE7F8B5EC -:107F80000C0006460BD001464FF6FF7500236A46EB -:107F9000284605F0DFFF20B1FEF7DBFDF8BD10201D -:107FA000F8BD69462046FEF70AFE0028F8D1A07801 -:107FB000314600F001032846009A05F0F7FFEBE791 -:107FC00030B587B0144600220DF1080C05AD0192C2 -:107FD0008CE82C00072200920A46014623884FF6BF -:107FE000FF7005F00BFDBDF814102180FEF7B1FD08 -:107FF00007B030BD70B50D46042108F02FFD040018 -:1080000000D1FFDF294604F11400BDE8704004F000 -:1080100011BD70B50D46042108F020FD040000D10B -:10802000FFDF294604F11400BDE8704004F025BDCF -:1080300070B50D46042108F011FD040000D1FFDFEA -:10804000294604F11400BDE8704004F03DBD70B550 -:108050000546042108F002FD040000D1FFDF21469F -:1080600028462368BDE870400122FEF74BBF70B57B -:108070000646042108F0F2FC040000D1FFDF04F101 -:10808000140004F0C7FC401D20F0030511E0011DA1 -:1080900000880022431821463046FEF733FF0028AF -:1080A0000BD0607CABB2684382B2A068011D08F0BF -:1080B00078FBA06841880029E9D170BD70B50546FC -:1080C000042108F0CBFC040000D1FFDF2146284644 -:1080D0006368BDE870400222FEF714BF70B50E461B -:1080E000054601F062F9040000D1FFDF0120207293 -:1080F00066726580207820F00F00001D20F0F000EF -:1081000040302070BDE8704001F052B910B504460F -:10811000012900D0FFDF2046BDE810400121FAF719 -:1081200055B92DE9F04F97B04FF0000A0C00834687 -:10813000ADF818A0D04619D0E06830B1A068A8B159 -:108140000188ADF81810A0F800A05846FAF7D2FF41 -:10815000070043F2020967D03878222862D304214D -:10816000584608F07BFC050005D103E0102017B04D -:10817000BDE8F08FFFDF05F1140004F04BFC401D5B -:1081800020F00306A078012803D0022801D00720A0 -:10819000EDE7208878B1401C81B209AA584605F065 -:1081A000A4FD09A805F0ADFD9DF82E204FF4505117 -:1081B000012A0DD102E043F20300D8E7BDF82C20DC -:1081C000A2F52453023B03D1822801D0A0B901E0DB -:1081D0000846CCE7E068B0B1CDE902A0072006AAC6 -:1081E000CDF804A000900492A2882188BDF8183030 -:1081F000584605F003FC10B1FEF7ABFCB7E7A168E9 -:10820000BDF8180008809DF82700C00602D543F28B -:108210000140ACE70D9838B1A1780078012905D06C -:1082200080071AD40820A2E74846A0E7C007F9D083 -:1082300002208DF83C00A8684FF00009A0B1697CCD -:108240004288714391420FD98AB2B3B2011D08F03E -:108250005EFA8046A0F800A006E003208DF83C00FE -:10826000D5F800804FF001099DF8280010F0380F74 -:1082700000D1FFDF9DF828001D49C0F3C20008446B -:1082800097F8231010F8010C884201D90F206EE7EF -:108290002088ADF8400014A90095CDE9019143462E -:1082A00007220FA95846FEF757FE002885D19DF8F2 -:1082B000500050B9A078012807D1687CB3B2704350 -:1082C00082B2A868011D08F036FA00204FE770B5A9 -:1082D000064615460C460846FEF7FAFB002809D16B -:1082E0002A4621463046BDE870406FE41403002062 -:1082F0002E20020070BD09E570B51E4614460D0023 -:1083000009D044B1616831B138B1F849C9888142B6 -:1083100003D0072070BD102070BD2068FEF7D8FB89 -:108320000028F9D1324621462846BDE87040FFF7C3 -:1083300042BA70B515460C0006D038B1EB49098930 -:10834000814203D0072070BD102070BD2068FEF769 -:10835000BFFB0028F9D129462046BDE87040D1E591 -:1083600070B5064686B00D46144610460BF09EFFCB -:10837000D0BB60680BF0C1FFB0BBA6F57F40FF38F3 -:1083800003D03046FAF7B6FE80B128466946FEF7BC -:10839000D8FC00280CD19DF810100F2008293CD2E1 -:1083A000DFE801F008060606060A0A0843F20200A2 -:1083B00006B070BD0320FBE79DF80210012908D12B -:1083C000BDF80010B1F5C05FF2D06FF4C052D142D9 -:1083D000EED09DF8061001290DD1BDF80410A1F5CD -:1083E0002851062907D200E028E0DFE801F0030366 -:1083F00004030303DCE79DF80A1001290ED1BDF840 -:108400000810B1F5245FD3D0A1F524510239CFD0A3 -:108410000129CDD0022901D1CAE7FFDF606878B910 -:10842000002305AA2946304605F094FD10B1FEF759 -:1084300090FBBDE79DF81400800601D41020B7E73B -:108440006188224628466368FFF7BAFDB0E72DE948 -:10845000F043814687B08846144610460BF026FF4D -:1084600018B1102007B0BDE8F083002306AA4146EA -:10847000484605F06FFD10B1FEF76BFBF2E79DF883 -:108480001800C00602D543F20140EBE7002507279C -:1084900005A8019500970295CDE9035062884FF633 -:1084A000FF734146484605F0D3FC060013D16068CF -:1084B0000BF0FCFE60B960680195CDE902500097B1 -:1084C0000495238862884146484605F0C1FC06466B -:1084D000BDF8140020803046CEE739B1834B0A88BE -:1084E0009B899A4202D843F20300704719E610B5FF -:1084F00086B07E4C0423ADF81430638943B1A4895F -:108500008C4201D2914205D943F2030006B010BD5E -:108510000620FBE7ADF81010002100910191ADF8A5 -:10852000003002218DF8021005A9029104A90391DF -:10853000ADF812206946FFF7F4FDE7E72DE9FC47A7 -:1085400081460E4608460BF08BFE88BB4846FAF77C -:10855000D1FD5FEA00080AD098F80000222829D34C -:108560000421484608F07AFA070005D103E043F2F7 -:108570000200BDE8FC87FFDF07F1140004F061FA98 -:1085800005463078012803D0022804D00720F0E700 -:10859000A8070FD502E015F0340F0BD0B079341DC9 -:1085A000C00709D0E08838B1A0680BF059FE18B1B7 -:1085B0001020DEE70820DCE732782088002628B388 -:1085C000A0F201130721112B18D20CD2DFE803F01F -:1085D0000B090D0B1D0B121D100B0B1D1D1D1D0B73 -:1085E0001D00022A11D10846C3E7012AFBD00CE086 -:1085F000EA0600E0AA06002AF5DA06E0A0F5C07255 -:108600001F2A02D97D3A022AEDD8C6B200F0CDFE6B -:1086100050B198F82300CDE90006FA89234639467F -:108620004846FEF7E3FCA4E71120A2E72DE9F04F4E -:108630008BB01F4615460C4683460026FAF75AFDB6 -:1086400028B10078222805D208200BB090E543F22B -:108650000200FAE7B80801D00720F6E7032F00D19F -:1086600000274FF6FF79CCB1022D72D320460BF0D4 -:1086700044FE30B904EB0508A8F101000BF03DFE03 -:1086800008B11020E1E7AD1EAAB22146484605F028 -:108690005AFD38F8021C88425BD1ADB21349B807C5 -:1086A00002D58889401C00E001201FFA80F8F807F5 -:1086B00001D08F8900E04F4605AA4146584605F093 -:1086C00014FB4FF0070A4FF00009D4B3204608E02E -:1086D000408810283DD8361D304486B2AE4238D28C -:1086E000A01902884245F3D353E000001403002090 -:1086F0009DF8170002074CD594B304EB0608361D0D -:10870000B8F80230B6B2102B23D89A19AA4220D852 -:10871000B8F8002091421CD1C0061CD5CDE900A9B3 -:108720000DF1080C0AAAA11948468CE80700B8F810 -:1087300000100022584605F061F920B1FEF709FA51 -:1087400083E726E005E0B8F80200BDF8281088426B -:1087500001D00B2079E7B8F80200304486B207E078 -:10876000FFE7C00604D55846FEF772FC002889D101 -:108770009DF81700BDF81A1020F010008DF81700B2 -:10878000BDF81700ADF80000FF235846009A05F029 -:108790000DFC05A805F0B5FA18B9BDF81A10B942D4 -:1087A000A6D90421584608F059F9040000D1FFDF8A -:1087B000A2895AB1CDE900A94D4600232146584669 -:1087C000FEF714FC0028BBD1A5813EE700203CE762 -:1087D0002DE9FF4F8BB01E4617000D464FF00004E9 -:1087E00012D0B00802D007200FB0C1E4032E00D190 -:1087F00000265DB108460BF077FD28B93888691E60 -:1088000008440BF071FD08B11020EDE7C64AB0072F -:1088100001D5D18900E00121F0074FF6FF7802D0A1 -:10882000D089401E00E0404686B206AA0B9805F0AB -:108830005CFA4FF000094FF0070B0DF1140A38E015 -:108840009DF81B00000734D5CDF80490CDF800B09A -:10885000CDF80890CDE9039A434600220B9805F025 -:10886000F7FA60BB05B3BDF814103A882144281903 -:10887000091D8A4230D3BDF81E2020F8022BBDF816 -:10888000142020F8022BCDE900B9CDE90290CDF8F3 -:1088900010A0BDF81E10BDF8143000220B9805F092 -:1088A000D7FA08B103209FE7BDF814002044001D4B -:1088B00084B206A805F025FA20B1822806D0FEF77A -:1088C00048F991E7BDF81E10B142B9D934B17DB174 -:1088D0003888A11C884203D20C2085E7052083E755 -:1088E00022462946404605F02EFC01462819018003 -:1088F000A41C3C80002077E710B504460BF0D6FCA2 -:1089000008B1102010BD8848C0892080002010BD0B -:10891000F0B58BB00D460646142103A819F085F971 -:1089200001208DF80C008DF8100000208DF811004A -:10893000ADF814503046FAF7DDFB48B10078222834 -:1089400012D30421304608F089F8040005D103E071 -:1089500043F202000BB0F0BDFFDF04F11400074644 -:1089600004F06FF8400601D40820F3E7207C0221D0 -:1089700040F00100207409A80094CDE901100722FD -:1089800003A930466368FEF7E7FA20B1217C21F0A5 -:1089900001012174DEE729463046F9F708FD08A9F0 -:1089A000384604F03DF800B1FFDFBDF82040172C39 -:1089B00001D2172000E02046A84201D92C4602E04F -:1089C000172C00D2172421463046FFF722FB214600 -:1089D0003046F9F708FA0020BCE7F8B51C46154602 -:1089E0000E46069F08F044F92346FF1DBCB23146EF -:1089F0002A46009407F0DBFCF8BD70B50C4605462E -:108A00000E21204619F0EFF8002020802DB1012D15 -:108A100001D0FFDF70BD062000E00520A07170BD11 -:108A200010B548800878134620F00F00001D20F094 -:108A3000F00080300C4608701422194604F108003A -:108A400019F09FF800F0B4FC3748046010BD2DE920 -:108A5000F047DFF8D890491D064621F0030117467C -:108A60000C46D9F8000007F01AFE050000D1FFDF20 -:108A70004FF000083560A5F800802146D9F80000C5 -:108A800007F00DFE050000D1FFDF7560A5F800803E -:108A90007FB104FB07F1091D0BD0D9F8000007F0E6 -:108AA000FEFD040000D1FFDFB460C4F80080BDE823 -:108AB000F087C6F80880FAE72DE9F0411746491D0E -:108AC00021F00302194D064601681446286807F094 -:108AD00011FE22467168286807F00CFE3FB104FBC6 -:108AE00007F2121D03D0B168286807F003FE0420C6 -:108AF00007F05EFF0446042007F062FF201A0128F9 -:108B000004D12868BDE8F04107F0BEBDBDE8F081A2 -:108B100010B50C4605F0B5F800B1FFDF2046BDE802 -:108B20001040FEF716B800001403002014000020C7 -:108B300010B50C460246817B808819B1518981426B -:108B400000D908462080D18800F0C5FF032800D353 -:108B50000320C1B22088BDE8104000F0B1BF10B5BD -:108B60000C460246817B808819B11189814200D967 -:108B700008462080D18800F0AEFF022800D30220F2 -:108B8000C1B2208800F09CFF401CC0B210BD2DE98E -:108B9000F04F0C00F84999B08146D1E90201CDE9C6 -:108BA0000C0109F10300F54E20F003010091357E20 -:108BB00005F1010504D1E8B209F054FB00B1FFDF73 -:108BC00000984FF0000B00EB0510C01C20F00301D3 -:108BD00000915CB9707A327A81F800B01044C2B268 -:108BE000B08B80B204F0D5FE00B1FFDF0098F169D0 -:108BF000084400902146684600F02CFF0098C01CF5 -:108C000020F003000090737A327AB17A04B1002028 -:108C100007F016FE0099084400902146684600F0CF -:108C20006EFF00273D46B24696F801800CE02846CC -:108C300000F0F3FE064681788088F9F76EF97178C6 -:108C40006D1C00FB0177EDB24545F0D10098C01CCA -:108C500020F00300009004B100203946F9F768F9CC -:108C600000990027084400903D469AF801800CE0E6 -:108C7000284600F0D2FE0646C1788088FEF773FCD5 -:108C800071786D1C00FB0177EDB24545F0D100987D -:108C9000C01C20F00300009004B100203946FEF70C -:108CA0006BFC00994FF000080844009045469AF884 -:108CB00001700EE0284600F0B0FE0646807B30B121 -:108CC00006F1080001F0F9FE727800FB02886D1CC5 -:108CD000EDB2BD42EED10098C01C20F00300009020 -:108CE00004B10020414601F0ECFE00990844C01D8B -:108CF00020F007000090E4BBA24AA1491160111DB9 -:108D0000401E086001222C219F4807F062FCFAF700 -:108D10002EF99E484178806805F09CFB42208DF832 -:108D200004009A480C30C0788DF8060010B1012874 -:108D300004D005E001208DF8060001E08DF806B0B2 -:108D400001A806F0C5FE10B10EA805F042FC0021F6 -:108D50001E22084603F03CF8FBF778F987480CAA76 -:108D600000210C30F8F706FB00B1FFDF9AF819007C -:108D700000E015E0FEF769FF00B1FFDF7F484FF428 -:108D8000F671443018F051FF7C480421443080F8DB -:108D9000E91180F8EA11062180F8EB110321017135 -:108DA000009919B0A1EB0900BDE8F08F70B5734CC4 -:108DB00006464434207804EB4015E078083590B935 -:108DC000A01990F8E80100280ED0A0780F2800D351 -:108DD000FFDF2021284618F028FF687866F302009C -:108DE00068700120E070284670BD2DE9F04105460D -:108DF0000C4600270078052190463E46B1EB101F37 -:108E000000D0FFDF287A58B101280FD0FFDF00BF64 -:108E1000A8F800600CB1278066800020BDE8F081D2 -:108E20000127092674B16888A08008E0022714266B -:108E300044B16888A0802869E060A88A2082287BE5 -:108E40002072E5E7A8F80060E7E710B54F4C6068CE -:108E5000C11D21F00701814200D0FFDF47480121F9 -:108E60000022017042700172032343728172027307 -:108E7000052282821F22C282417345A202610A2218 -:108E8000027641764FF4B061C1616168416010BD06 -:108E900030B53E4C1568636810339D4202D2042001 -:108EA000136030BD354B5D785A6802EB05121070C7 -:108EB00051700320D080172090800120D0709070D6 -:108EC000002090735878401C5870606810306060C3 -:108ED000002030BD70B5064628480024457807E0DC -:108EE000204600F09AFD0178B14204D0641CE4B23F -:108EF000AC42F5D1002070BDF7B5064608780C46A7 -:108F000008B3FFF7E7FF0546202E08D0232E17D021 -:108F1000212E41D0222E3FD0242E2BD114E000F060 -:108F200087FD0DB1697800E00021401A81B2A07878 -:108F30000144FF291ED830B1A08802282CD219E0A4 -:108F40006088172828D215E0227A2AB36188172969 -:108F500010D3A08817280DD3A3795BB1E3794BB167 -:108F6000402A07D84FF6FB72914201D8904213D99C -:108F70000420FEBD0720FEBD342002003004002086 -:108F80000000002000060240600600201C000020B7 -:108F90006E5246357800000065B9207802AA01219A -:108FA000FFF776FF0028E6D12078FFF793FF050052 -:108FB00000D1FFDF203E052E18D2DFE806F0030BBC -:108FC0000E081100A0786870A088E8800FE0608823 -:108FD000A8800CE0A078A87009E0A078E87006E00E -:108FE00054F8020FA8606068E86000E0FFDF00202E -:108FF000C1E700B597B053218DF8001000780BA998 -:1090000000F001008DF80200684605F023F817B063 -:1090100000BD00B5017897B001F001018DF8021094 -:10902000417801F001018DF803100178C1F340018E -:109030008DF804104178C1F340018DF805100178D6 -:1090400089088DF80610417889088DF80710817815 -:109050008DF80810C1788DF8091000798DF80A0094 -:109060004D208DF800000BA9684604F0F3FFCEE711 -:109070002DE9F04FDFF8F883FE4C97B000271BE096 -:10908000012000F07FFD0120FFF790FE0546FA4821 -:1090900007F0C8FA686000B9FFDF686805F027F8D4 -:1090A000A0B12846FAF7CEFA284600F071FD18B9AB -:1090B000F148696807F0BFFA94F9E9010428DFDA9A -:1090C000022007F075FC06460025AAE0EA48696818 -:1090D00007F0B1FAF4E7B8F802104046491C89B22B -:1090E000A8F80210B14201D3002141800221B8F852 -:1090F000020007F0B3FC00286BD0B8F8020054213E -:109100008DF80010ADF802000BA9684604F0A2FF2C -:1091100000B1FFDF9DF8300010F0010F0FD0B8F85C -:10912000020007F0B7FD5FEA000900D1FFDF484603 -:1091300006F0A3FF18B1B8F8020002F065F9B8F81C -:10914000020007F095FD5FEA000900D1FFDF484605 -:1091500006F08CFFE8BB0321B8F8020007F07EFCA4 -:109160005FEA000B48D1FFDF46E000BFDBF81000EC -:1091700010B10078FF2849D0022000F003FD022042 -:10918000FFF714FE8246484607F0A2F8CAF804002A -:1091900000B9FFDFDAF8040007F07CF90021009045 -:1091A0000170B8F802105046AAF8021001F032FE21 -:1091B000484607F071F900B9FFDF504600F0E8FCBF -:1091C00018B99AF80100000704D50098CBF81000F0 -:1091D00012E024E0DBF8100038B10178491C11F0EE -:1091E000FF01017008D1FFDF06E00022114648466A -:1091F00000F011FC00B9FFDF94F9EA01022805DB59 -:10920000B8F8020001F0CAFD0028AFD194F9E901D5 -:10921000042804DB484607F0B5F900B101276D1CAE -:10922000EDB2B54204D294F9EA010228BFF653AF79 -:10923000002F7FF423AF17B00320BDE8F04F00F0FC -:10924000A1BC10B58A4CA0600868E060AFF2DF10E6 -:1092500002F031FD607010BD864800214438017075 -:109260008348017085494160704730B505464FF02D -:1092700080500C46D0F8A41097B0491C05D1D0F806 -:10928000A810C9430904090C08D050F8A01F01F028 -:10929000010129704168216080680EE02B208DF863 -:1092A00000000BA9684604F0D5FE00B1FFDF0120E5 -:1092B00028700C982060BDF83400A0802878002821 -:1092C00003D0607940F0C000607117B030BDF0B5D8 -:1092D0004FF080540746D4F8800097B00D462B26F7 -:1092E000401C0BD1D4F88400401C07D1D4F888006E -:1092F000401C03D1D4F88C00401C0BD0D4F8800063 -:109300003860D4F884007860D4F88800B860D4F865 -:109310008C0016E08DF82C6069460BA804F09AFECC -:1093200000B1FFDF01983860029878608DF82C60FA -:1093300069460BA804F08EFE00B1FFDF0198B8600B -:109340000298F860D4F89000401C0BD1D4F8940037 -:10935000401C07D1D4F89800401C03D1D4F89C00DD -:10936000401C08D054F8900F286060686860A068BE -:10937000A860E06816E08DF800600BA9684604F06C -:1093800069FE00B1FFDF0C9828600D9868608DF8C9 -:1093900000600BA9684604F05DFE00B1FFDF0C9889 -:1093A000A8600D98E86017B0F0BD32480079FDE480 -:1093B00070B5304CE07830B3207804EB4010407A40 -:1093C00000F00700204490F9E801002800DCFFDFEE -:1093D0002078002504EB4010407A00F007000119C6 -:1093E00091F8E801401E81F8E8012078401CC0B2E5 -:1093F00020700F2800D12570A078401CA0700AF0C2 -:109400001BFBE57070BDFFDF70BD3EB50546032157 -:1094100007F024FB0446284607F02AFC054604B959 -:10942000FFDF206918B10078FF2800D1FFDF01AA13 -:109430006946284600F0EFFA60B9FFDF0AE0002233 -:1094400002A9284600F0E7FA00B9FFDF9DF80800FE -:1094500000B1FFDF9DF80000411E8DF80010EED234 -:1094600020690199884201D1002020613EBD0000A1 -:109470001C000020740400206006002068130020F7 -:1094800070B50546A0F57F400C46FF3800D1FFDFE0 -:10949000012C01D0FFDF70BDFFF787FF040000D172 -:1094A000FFDF207820F00F00401D20F0F00050304A -:1094B000207065800020207201202073BDE870407C -:1094C00076E72DE9F04116460D460746FFF76DFF9A -:1094D000040000D1FFDF207820F00F00401D20F0B5 -:1094E000F0005030207067800120207228682061D1 -:1094F000A888A0822673BDE8F04159E730B599B03D -:10950000FFF7E8FC040000D1FFDF0CA92046FFF7BD -:109510000FFB05460BA92046FFF721FB0146522011 -:109520008DF80000BDF830008DF80250001DADF838 -:109530000400BDF82C008DF80310001DADF80600E6 -:10954000E088ADF808000DA9684604F083FD002806 -:1095500000D0FFDF19B030BD2DE9F047DFF80094EF -:109560000546002799F8000010B10820BDE8F087F3 -:1095700028460AF09BFE08B11020F7E7F94C207846 -:1095800008B9FFF762FC607A217A0844C6B200F09D -:109590004FFAB04207D2301AC1B22A460020FFF774 -:1095A00077FC0700E2D1D9F804004E46C01C20F039 -:1095B0000300C9F8040000F05EFB716800EB0108CD -:1095C00001214046FFF7E3FA0646296840448842F5 -:1095D00002D8B6F5803F15D328600020FFF77AFC4B -:1095E00005000DD005F11300D9F8041020F0030098 -:1095F0004E46884200D0FFDF6078401E6070756084 -:109600000420B3E700214046FFF7C1FA0446A64212 -:1096100000D0FFDF04EB0801C9F8041029604FF601 -:10962000FF71A9F80210012189F8001038469DE762 -:109630002DE9F0410446CA4817460D46007810B19E -:109640000820BDE8F08108460AF00AFE08B11020A3 -:10965000F7E7C44E307808B9FFF7F7FB601E1E2805 -:1096600007D8012C3FD12878FE283CD8307600203E -:10967000E7E7A4F120001F2805D8E0B23A462946C2 -:10968000BDE8F04138E4A4F140004FF000081F2885 -:1096900021D8402C02D0412C25D117E068782978B8 -:1096A0004418A97881421ED8FF2C08D808F0BEFFC4 -:1096B00007460AF07BF9381A801EA04201DA122010 -:1096C000BFE728883081A878B07224E02846BDE83A -:1096D000F04100F085BAA4F1A0001F2803D8A02C07 -:1096E00003D0A12C06D00720ABE7287800F00100BA -:1096F000707610E029680920F829A2D38A07A0D142 -:10970000727B02F00302012A04D1F28AD73293B2AB -:109710008B4296D8F161404693E72DE9F0478146A8 -:109720000E4608460AF0C2FD48B948460AF0DCFD7C -:1097300028B909F1030020F00301494501D01020A8 -:1097400014E788484FF0000A4430817869B14178C5 -:10975000804600EB41140834378832460021204609 -:1097600000F024FA050004D027E0A6F800A00520A8 -:10977000FCE6B9F1000F24D03088B84201D90C259D -:109780001FE0607800F00705284600F0FBF908EBC1 -:109790000507324697F8E8014946401C87F8E8017A -:1097A000204607F5F47700F001FA05463878401EA8 -:1097B0003870032000F0E6F92DB10C2D01D0A6F889 -:1097C00000A02846D2E66078654F00F00701012925 -:1097D00023D002290CD0032932D0FFDF98F80110E2 -:1097E0004046491CC9B288F801100F2933D034E033 -:1097F000616821B1000702D46088FFF706FE98F87F -:10980000EA014646012802D1787802F073FA96F907 -:10981000EA010428E2DBFFDFE0E7616811B15248AA -:1098200006F009FF98F8E9014646032802D1787846 -:1098300002F060FA96F9E9010428CFDBFFDFCDE7FB -:10984000C00602D56088FFF7E0FD98F9EB01062815 -:10985000C4DBFFDFC2E780F801A08178491E817078 -:10986000617801F0070101EB080090F8E811491C4C -:1098700080F8E811A5E770B50D4604460AF0F0FC43 -:1098800018B928460AF012FD08B1102070BD29460B -:109890002046BDE8704008F01CBD70B50446154672 -:1098A0000E4608460AF0DCFC18B928460AF0FEFC11 -:1098B00008B1102070BD022C03D0102C01D009205B -:1098C00070BD2A463146204608F026FD0028F7D014 -:1098D000052070BD70B514460D4606460AF0C0FC62 -:1098E00038B928460AF0E2FC18B920460AF0FCFC18 -:1098F00008B1102070BD22462946304608F02BFDE5 -:109900000028F7D0072070BD10B596B004460AF0C5 -:10991000CDFC10B1102016B010BD0F208DF8000046 -:109920000BA9684604F096FB0028F4D19DF834009A -:109930002070BDF836006080BDF83800A08000209F -:10994000E9E770B505460C4608460AF0CDFC20B99B -:1099500074B120680AF0AAFC40B1102070BD00006C -:109960001C0000203004002060060020A08828B1E0 -:1099700021462846BDE87040FDF774BE0920EDE79A -:1099800070B504460D4608460AF06AFC30B9601E00 -:109990001E2814D828460AF063FC08B11020DDE721 -:1099A000022C01D90720D9E704B9FFDFE64800EB14 -:1099B000840050F8041C2846BDE870400847A4F114 -:1099C00020001F28EED829462046BDE87040FAF74F -:1099D0007FBA70B504460D4608460AF067FC30B9F8 -:1099E000601E1E280DD828460AF03AFC08B1102047 -:1099F000B4E7012C01D0022C01D10620AEE70720EC -:109A0000ACE7A4F120001F28F9D829462046BDE87C -:109A10007040FAF7E1BA06F0E4BA30B5CB4D04462F -:109A20006878A04200D8FFDF686800EB041030BD02 -:109A300070B5C64800252C46467807E02046FFF75B -:109A4000ECFF4078641C2844C5B2E4B2B442F5D1BE -:109A5000284683E72DE9F0410C46064600F043F91D -:109A600007463068C01C20F0030232601CBBB748B8 -:109A70003B46092120300AF0CDFA002408E0092CE9 -:109A800011D2DFE804F005070509090B05050700F9 -:109A9000AF4804E0AF4802E0AF4800E0AF480AF04A -:109AA000D9FA054600E0FFDFA54200D0FFDF641CC5 -:109AB000E4B2092CE3D3306800EB07103060C0E556 -:109AC000021D5143452900D245210844C01CB0FB6A -:109AD000F2F0C0B2704700B597B055228DF8002063 -:109AE000001DADF80200ADF804100BA9684604F0A3 -:109AF000B1FA00B1FFDFBDF8300017B000BD2DE9AD -:109B0000FC5F064691484FF000088B4647464446A6 -:109B100090F8019022E02046FFF77FFF050000D17A -:109B2000FFDF687869463844C7B22846FFF700F877 -:109B3000824601A92846FFF712F80346BDF8040043 -:109B40005246001D81B2BDF80000001D80B206F033 -:109B5000DBFF6A78641C00FB0288E4B24C45DAD172 -:109B60003068C01C20F003003060BBF1000F00D053 -:109B700000204246394606F0D5FF3168084430607F -:109B8000BDE8FC9F7149443108710020C8707047DE -:109B90006E494431CA782AB10A7801EB4211083182 -:109BA000814201D001207047002070472DE9F0412B -:109BB00006460078154600F00F0400201080601E55 -:109BC0000F46052800D3FFDF5F482A46103000EB20 -:109BD0008400394650F8043C3046BDE8F04118474F -:109BE00038B50446407800F00300012803D002286D -:109BF0000BD0072038BD606858B10AF07EFBD0B9A1 -:109C000060680AF071FB20B915E060680AF028FB73 -:109C100088B969462046FCF7A9F90028EAD160789E -:109C200000F00300022808D19DF8000028B1606808 -:109C30000AF05AFB08B1102038BD6189F8290DD807 -:109C4000208988420AD8607800F003023F48012A40 -:109C500006D1D731C26989B28A4201D2092038BD02 -:109C600094E80E0000F10C0585E80E000AB9002109 -:109C70008182002038BD2DE9F05F4FF000093348A4 -:109C8000C8464F464E464D46CB464C4690F801A03E -:109C900011E02046FFF7C1FE4178827809F1010901 -:109CA000884412FB0177C27812FB0166807B10FBAF -:109CB0000155641CE4B25445EBD10BEB890000EB79 -:109CC000C80000EB870000EB860000EBC5011F48D1 -:109CD000027A01EBC201427A807A01EBC20101EB08 -:109CE000C000BDE8F09F2DE9F047DFF86090002547 -:109CF0002C4699F8092099F8081099F801700A443F -:109D0000D6B299F80A20114401F0FF0808E0204675 -:109D1000FFF783FE817B407811FB0055641CE4B2A1 -:109D2000BC42F4D199F80800401C3044304440440F -:109D3000401C0EB1012100E0002108444419FF2C11 -:109D400000D9FFDFE0B211E434200200300400202B -:109D5000633D00008DAB0000592F00003120010051 -:109D60002DE9F041074614468846084601F02EFDCD -:109D7000064608EB88001C22796802EBC0000D182B -:109D8000688C58B14146384601F028FD0146786894 -:109D90000078C200082305F120000CE0E88CA8B18F -:109DA0004146384601F021FD014678680823407895 -:109DB000C20005F1240006F0F4FC38B1062121723E -:109DC0006681D0E90010C4E9031009E02878092869 -:109DD0000BD00520207266816868E0600020287042 -:109DE0002046BDE8F04101F0E7BC07202072668103 -:109DF000F4E72DE9F04116460D460746406801EBB1 -:109E000085011C2202EBC1014418204601F00FFD20 -:109E100040B10021708865F30F2160F31F410820D5 -:109E20000AF0D2F909202070324629463846BDE8AA -:109E3000F04195E72DE9F0410E46074600241C212C -:109E4000F07816E004EB8403726801EBC303D25C84 -:109E50006AB1FFF7AAFA050000D1FFDF6F802A463A -:109E600021463046FFF7C5FF0120BDE8F081641CA4 -:109E7000E4B2A042E6D80020F7E770B50646002419 -:109E80001C21C0780AE000BF04EB8403726801EB78 -:109E9000C303D5182A782AB1641CE4B2A042F3D8CF -:109EA000402070BD2821284617F09DFE70688089EB -:109EB0002881204670BD70B5034600201C25DC7843 -:109EC0000DE000BF00EB80065A6805EBC606324481 -:109ED000167816B1128A8A4204D0401CC0B284425D -:109EE000F0D8402070BDF0B5044600201C26E5786F -:109EF0000EE000BF00EB8007636806EBC7073B443A -:109F00001F788F4202D15B78934204D0401CC0B2CC -:109F10008542EFD84020F0BD0078032801D0002012 -:109F20007047012070470078022801D00020704758 -:109F3000012070470078072801D0002070470120D9 -:109F400070472DE9F041064688461078F1781546AD -:109F5000884200D3FFDF2C781C27641CF078E4B221 -:109F6000A04201D8201AC4B204EB8401706807EB48 -:109F7000C1010844017821B14146884708B12C70DD -:109F800073E72878A042E8D1402028706DE770B5CB -:109F900014460B880122A240134207D113430B80C1 -:109FA00001230A22011D06F0C6FB047070BD2DE9D5 -:109FB000FF4F81B00878DDE90E7B9A4691460E4648 -:109FC00040072CD4019806F065FE040000D1FFDFA5 -:109FD00007F1040820461FFA88F105F0A9FE0500E4 -:109FE00000D1FFDF204629466A4606F092F9009824 -:109FF000A0F80370A0F805A0284606F04BFA0178F7 -:10A0000069F306016BF3C711017020461FFA88F14E -:10A0100005F0DEFE00B9FFDF019804F07CF906EBE5 -:10A020000900017F491C017705B0BDE8F08F2DE9DB -:10A03000F84F0E469A4691460746032106F00EFD5C -:10A040000446008DDFF8B085002518B198F80000AF -:10A05000B0421ED1384606F01DFE070000D1FFDFDA -:10A0600009F10401384689B205F062FE050010D0FE -:10A07000384629466A4606F04CF9009800210A46FF -:10A080000180817004F00AFA0098C01DCAF800002F -:10A0900021E098F80000B04216D104F1260734F808 -:10A0A000341F012000FA06F911EA090F00D0FFDF82 -:10A0B0002088012340EA090020800A22391D384601 -:10A0C00006F054FB067006E0324604F1340104F158 -:10A0D0002600FFF75CFF0A2188F800102846BDE83B -:10A0E000F88FFEB514460D46064602AB0C2206213B -:10A0F000FFF79DFF002826D00299687812220A7087 -:10A10000801C487008224A80A87020888880608857 -:10A11000C880A0880881E088488100240C20CDE90F -:10A1200000040523062229463046FFF740FF21465A -:10A1300066F31F41F0230022012009F09BFF68789D -:10A14000801C68700120FEBDFEB514460D46062237 -:10A15000064602AB1146FFF76AFF002812D0029BA9 -:10A16000132000211870A8785870022058809C8015 -:10A170000620CDE900010246052329463046FFF7B7 -:10A1800016FF0120FEBD2DE9FE430C46804644E04B -:10A1900002AB0E2207214046FFF749FF002841D0BD -:10A1A00060681C2267788678BF1C06EB860102EB8C -:10A1B000C101451802981421017047700A2141809D -:10A1C000698A0181E98A4181A9888180A98981817F -:10A1D000304601F0FBFA029905230722C8806F7010 -:10A1E0000420287000250E20CDE9000521464046B8 -:10A1F000FFF7DDFE294666F30F2168F31F41F023C8 -:10A200000022082009F036FF6078FC49801C60704D -:10A2100062682046921CFFF794FE606880784028B0 -:10A22000B6D10120BDE8FE83FEB50D46064638E0F6 -:10A2300002AB0E2207213046FFF7F9FE002835D089 -:10A2400068681C23C17801EB810203EBC202841809 -:10A25000029815220270627842700A224280A28916 -:10A260004281A2888281084601F0B0FA0146029834 -:10A270008180618AC180E18A0181A088B8B1002013 -:10A28000207000210E20CDE9000105230722294678 -:10A290003046FFF78CFE6A68D9492846D21CFFF782 -:10A2A00050FE6868C0784028C2D10120FEBD06205B -:10A2B000E6E72DE9FE430C46814644E0204601F0E6 -:10A2C000A0FAD0B302AB082207214846FFF7AFFE41 -:10A2D0000028A7D060681C2265780679AD1C06EBC3 -:10A2E000860102EBC10147180298B7F810800621D9 -:10A2F0000170457004214180304601F067FA014643 -:10A30000029805230722C180A0F804807D700820F0 -:10A3100038700025CDE9000521464846FFF747FE85 -:10A32000294666F30F2169F31F41F023002208201C -:10A3300009F0A0FE6078801C60706268B149204618 -:10A34000121DFFF7FEFD606801794029B6D101209A -:10A3500068E72DE9F34F83B00E4680E0304601F008 -:10A3600050FA002875D071681C2091F8068008EB1F -:10A37000880200EBC2000C184146304601F035FA65 -:10A380000146A078C30070684078C20004F1240040 -:10A3900006F023FA07468088E18B401A80B2002538 -:10A3A00081B3AA46218B814200D8084681460246E5 -:10A3B00002AB07210398FFF73AFE010028D0BAF15B -:10A3C000000F03D0029AB888022510808B46E28BDA -:10A3D0003968A9EB05001FFA80FA0A440398009235 -:10A3E00006F058FCED1D009A59465346009506F0BC -:10A3F00017F8E08B504480B2E083B988884209D1D5 -:10A40000012508E0FFE7801C4FF0010A80B2C9E790 -:10A41000002009E60025CDE90095238A0722314670 -:10A420000398FFF7C4FDE089401EE0818DB1A0785C -:10A43000401CA0707068F178427811FB02F1CAB23A -:10A44000816901230E3006F076F980F80080002043 -:10A45000E08372686C493046921DFFF772FD7068A8 -:10A46000817940297FF47AAF0120DDE570B5064699 -:10A4700048680D4614468179402910D104EB8401C7 -:10A480001C2202EBC101084401F0F2F9002806D0B9 -:10A490006868294684713046BDE8704059E770BD50 -:10A4A000FEB50C460746002645E0204601F0A9F916 -:10A4B000D8B360681C22417901EB810102EBC10134 -:10A4C0004518688900B9FFDF02AB0822072138462A -:10A4D000FFF7ADFD002833D00299607816220A708C -:10A4E000801C4870042048806068407901F06EF953 -:10A4F000014602980523072281806989C1800820CE -:10A50000CDE9000621463846FFF751FD6078801CF2 -:10A510006070A88969890844B0F5803F00D3FFDFE7 -:10A52000A88969890844A8816E81626837492046F4 -:10A53000521DFFF706FD606841794029B5D1012021 -:10A54000FEBD30B5438C458BC3F3C704002345B132 -:10A55000838B641EED1AC38A6D1E1D4495FBF3F3B5 -:10A56000E4B22CB1008918B1A04200D820460344BF -:10A570004FF6FF70834200D3034613800C7030BD4A -:10A580002DE9FC41074616460D46486802EB860158 -:10A590001C2202EBC101441801AA69462046FFF7BC -:10A5A000D0FFA1896389BDF80420C81880B2824217 -:10A5B0001FD001280AD99DF800C0BCF1000F03D0BC -:10A5C000B4F808C0844501D8002B12D0501A00D529 -:10A5D000002060816868407940280AD1204601F057 -:10A5E0003DF9002805D06868294646713846FFF7CE -:10A5F00057FFBDE8FC8100002C000020199F0000DF -:10A60000279F0000359F000071B800005DB8000072 -:10A610002DE9FE4F8946804615465088032106F0F5 -:10A620001DFA8346B8F80200402801D2402000E01D -:10A63000403880B282460146584601F0E2F80028D0 -:10A640007ED00AEB8A001C22DBF8041002EBC0006B -:10A650000C18204601F0EBF8002877D1B8F800007C -:10A66000E18A88423CD8A189D1B348456ED1002601 -:10A670005146584601F0B2F8218C0F18608B48B94A -:10A68000B9F1020F62D3B8F804006083618A88428E -:10A6900026D80226A9EB06001FFA80F9B888A28BFB -:10A6A000801A002814DD4946814500DA084683B245 -:10A6B00068886968029139680A44CDE9003206F079 -:10A6C000D7FADDE90121F61D009B009605F06FFE2B -:10A6D000A18B01EB090080B2A083618B884207D96E -:10A6E000688803B052465946BDE8F04F01F0DDB826 -:10A6F0001FD14FF009002872B8F802006881D7E92D -:10A700000001C5E90401608BA881284601F054F8D6 -:10A710005146584601F062F80146DBF80400082370 -:10A720000078C20004F1200006F03BF80020A0836E -:10A730006083A0890AF0FF02401EA081688800E0C3 -:10A7400004E003B05946BDE8F04F19E7BDE8FE8FBD -:10A750002DE9F041064615460F461C46184609F0FD -:10A760007FFD18B9206809F0A1FD08B1102007E4A9 -:10A770007168688C0978B0EBC10F01D3132005E430 -:10A780003946304601F02AF80146706808230078FF -:10A79000C20005F1200005F0CEFFD4E90012C0E9A7 -:10A7A00000120020E3E710B50446032106F056F935 -:10A7B0000146007800F00300012804D08A8A204670 -:10A7C000BDE81040C0E42046BDE8104001F114028D -:10A7D00087E470B50446032106F040F905460146BA -:10A7E0002046FFF766FD002816D029462046FFF7D1 -:10A7F00057FE002810D029462046FFF715FD0028F7 -:10A800000AD029462046FFF7BEFC002804D029467E -:10A810002046BDE870409CE570BD2DE9F0410C4636 -:10A8200080461EE0E178427811FB02F1CAB28169EC -:10A8300001230E3005F0B5FF077860681C22C1794E -:10A84000491EC17107EB8701606802EBC101461820 -:10A850003946204600F0D5FF18B1304600F0E0FF41 -:10A8600020B16068C1790029DCD180E7FEF79DFD49 -:10A87000050000D1FFDF0A202872384600F0A6FF4D -:10A8800068813946204600F0B0FF01466068082321 -:10A890004078C20006F1240005F083FFD0E90010E3 -:10A8A000C5E90310A5F80280284600F085FFB078BE -:10A8B00000B9FFDFB078401EB07058E770B50C46A5 -:10A8C0000546032106F0CAF801464068C2792244D1 -:10A8D000C2712846BDE870409FE72DE9FE4F8246D1 -:10A8E000507814460F464FF0000800284FD001283A -:10A8F00007D0022822D0FFDF2068B8606068F860C7 -:10A9000024E702AB0E2208215046FFF790FB0028F7 -:10A91000F2D00298152105230170217841700A2197 -:10A920004180C0F80480C0F80880A0F80C806288DC -:10A9300082810E20CDE90008082221E0A678304669 -:10A9400000F044FF054606EB86012C22786802EBF6 -:10A95000C1010822465A02AB11465046FFF767FB79 -:10A960000028C9D002980721017021784170042184 -:10A97000418008218580C680CDE9001805230A465C -:10A9800039465046FFF713FB87F80880DEE6A678C5 -:10A99000022516B1022E13D0FFDF2A1D914602AB0D -:10A9A00008215046FFF743FB0028A5D0029801215B -:10A9B000022E0170217841704580868002D005E02A -:10A9C0000625EAE7A188C180E1880181CDE90098E8 -:10A9D0000523082239465046D4E710B50446032122 -:10A9E00006F03CF8014600F108022046BDE81040A0 -:10A9F00073E72DE9F05F0C4601281DD0957992F898 -:10AA00000480567905EB85011F2202EBC10121F07C -:10AA1000030B08EB060111FB05F14FF6FF7202EA8A -:10AA2000C10909F1030115FB0611F94F21F0031AC1 -:10AA300040B101283DD124E06168E57891F80080BB -:10AA40004E78DFE75946786805F029FE606000B966 -:10AA5000FFDF5946606817F0E8F8E57051467868FE -:10AA600005F01DFE6168486100B9FFDF606842695A -:10AA700002EB09018161606880F8008060684670BF -:10AA800017E0606852464169786805F033FE5A461F -:10AA90006168786805F02EFE032005F089FF044602 -:10AAA000032005F08DFF201A012802D1786805F0F7 -:10AAB000EBFD0BEB0A00BDE8F09F024600210220EF -:10AAC00097E713B5009858B10024684605F0C9FD12 -:10AAD000CF490A22002C0A7001D1009A4A601CBD9D -:10AAE00001240020F2E770B50C46154638212046B7 -:10AAF00017F09BF8012666700A2104F11C0017F07C -:10AB000094F805B9FFDF297A207861F301002070FD -:10AB1000A879002817D02A4621460020FFF769FFB0 -:10AB20006168402088706168C870616808716168F8 -:10AB300048716168887161682888088161686888DF -:10AB400048816068868170BDC878002802D00022E4 -:10AB500001204EE7704770B50546002165F31F419F -:10AB6000012009F031FB0321284605F077FF04009E -:10AB700000D1FFDF21462846FFF75CF9002804D00A -:10AB8000207840F010002070012070BD2DE9FF41B9 -:10AB900080460E460F0CFEF708FC050007D06F80BC -:10ABA0000321384605F05AFF040008D106E004B03E -:10ABB0003846BDE8F0411321F9F72EBEFFDFB8F1AA -:10ABC000010F05D0B8F1080F18D0FFDFBDE8FF81F5 -:10ABD00020782A4620F0080020700020ADF80200FE -:10ABE00002208DF800004FF6FF70ADF80400ADF8BC -:10ABF000060069463846F9F717F9E7E7C6F3072173 -:10AC000001EB81021C23606803EBC202805C042814 -:10AC100003D008280AD0FFDFD8E7012000904FF4C6 -:10AC200040432A46204600F009FECFE704B02A46FA -:10AC30002046BDE8F041FFF7DCB82DE9F05F0027C2 -:10AC4000B0F80A9090460C4605463E46B9F1400FD2 -:10AC500001D2402001E0A9F140001FFA80FA287AD1 -:10AC6000C01E08286BD2DFE800F00D04192058360A -:10AC70003C4772271026002C6CD0D5E90301C4E9AB -:10AC800002015CE070271226002C63D00A2205F135 -:10AC90000C0104F1080016F074FF50E071270C2637 -:10ACA000002C57D0E868A06049E0742710269CB3B8 -:10ACB000D5E90301C4E902016888032105F0CEFE4D -:10ACC0008346FEF772FB024668885080514658461C -:10ACD000FFF746F833E075270A26ECB1A8892081F2 -:10ACE0002DE076271426BCB105F10C0004F1080311 -:10ACF00007C883E8070022E07727102664B1D5E96A -:10AD00000301C4E902016888032105F0A7FE01469A -:10AD10006888FFF782FD12E01CE073270826CCB19B -:10AD20006888032105F09AFE01460078C00606D522 -:10AD30006888FFF77FF810B96888F8F767FCA8F80B -:10AD400000602CB12780A4F8069066806888A080F7 -:10AD50000020B0E6A8F80060FAE72DE9FC410C46B7 -:10AD60001E4617468046032105F078FE05460A2C4C -:10AD70000AD2DFE804F005050505050509090907FC -:10AD8000042303E0062301E0FFDF0023CDE9007682 -:10AD9000224629464046FFF70AF92AE438B5054617 -:10ADA000A0F57F40FF3830D0284605F061FF040051 -:10ADB00000D1FFDF204605F08BFA002815D00146B0 -:10ADC0006A46204605F0A5FA00980321B0F8054030 -:10ADD000284605F043FE0546052C03D0402C05D23D -:10ADE000402404E0007A80B1002038BD403CA4B289 -:10ADF000214600F006FD40B1686804EB84013E2264 -:10AE000002EBC101405A0028EFD0012038BD0000FC -:10AE10002C0000202DE9F04F044689B0408805F051 -:10AE200027FF050000D1FFDF06AA2846616800F071 -:10AE3000C1FC069D001F81B235F8032F6B888A4242 -:10AE400005D1042B0AD0052B1DD0062B15D0224688 -:10AE50002846FFF7DDFB09B0BDE8F08F16462D1D33 -:10AE6000224629463046F7F78CFA0828F3D12246C5 -:10AE700029463046FCF73DFCEDE76088291D6368F4 -:10AE8000FAF7F0FCE7E717466088032105F0E6FDD6 -:10AE90004FF000088DF804800646ADF80680042FB8 -:10AEA000D9D36A79002AD6D028794FF6FF794FF0A6 -:10AEB0001C0A13282CD008DC012878D0062847D09B -:10AEC000072875D0122874D106E0142872D01528EE -:10AED00071D016286DD1ACE10C2F6AD1307800F01A -:10AEE0000301012965D040F0080030706879B07026 -:10AEF00001208DF804002889ADF808006889ADF8B4 -:10AF00000A00A889ADF80C00E889ADF80E0019E038 -:10AF1000B07890429FD1307801079CD5062F9AD106 -:10AF200020F0080030706088414660F31F41012026 -:10AF300009F04AF902208DF80400ADF8089028893C -:10AF4000ADF80A006088224601A9F8F76DFF82E794 -:10AF5000082F80D12F89B5F80A90402F01D24020C8 -:10AF600001E0A7F1400080B280460146304600F083 -:10AF700048FC08B3716808EB88002C2202EBC00083 -:10AF8000095A4945E3D1FE4807AAD0E90210CDE9A4 -:10AF9000071068798DF81C0008F0FF058DF81E5029 -:10AFA00060883146FFF799FC2246294639E0B6E031 -:10AFB00014E03CE039E0E6E0F148D0E90010CDE9EA -:10AFC00007106879ADF820708DF81C00ADF822905C -:10AFD000608807AA3146FFF780FC3CE7082FB6D10E -:10AFE0006889B5F80880402801D2402000E0403848 -:10AFF00087B23946304600F004FC0028A7D007EBA2 -:10B00000870271680AEBC2000844028A42459ED159 -:10B01000017808299BD140786979884297D1F9B2A3 -:10B0200022463046FEF7E5FE15E70E2F07D0CDF895 -:10B030001C80CDF8208068798DF81C00C8E76989EC -:10B04000EF898B46B5F80C903046FEF734FFABF134 -:10B050004001402901D309204AE0B9F1170F01D37B -:10B06000172F01D20B2043E040280ED000EB8002C6 -:10B0700071680AEBC20008440178012903D14078C5 -:10B0800069798842A9D00A2032E03046FEF7F5FE01 -:10B09000014640282BD001EB810372680AEBC30004 -:10B0A00002EB0008012288F800206A7988F8012064 -:10B0B00070682A894089B84200D938462D8A03230E -:10B0C0002372A282E7812082A4F80C906582084650 -:10B0D00000F07CFB6081A8F81490A8F81870A8F81C -:10B0E0000E50A8F810B0204600F066FBB3E604202E -:10B0F00005212172A4F80A80E08101212173A04971 -:10B10000D1E90421CDE9072169798DF81C10ADF84A -:10B110001E00608807AA3146FFF7DFFBE3E7062F32 -:10B12000E4D3B078904215D13078010712D520F0E1 -:10B13000080030706088414660F31F41012009F02B -:10B1400043F802208DF804002889ADF80800ADF816 -:10B150000A90F7E604213046FEF7C5FE0546402872 -:10B16000C4D002208303009022462946304600F0D6 -:10B1700065FB4146608865F30F2160F31F4108209D -:10B1800009F022F867E60E2FB0D104213046FEF711 -:10B19000AAFE81464028A9D04146608869F30F2164 -:10B1A00060F31F41082009F00FF8288A0790E8890A -:10B1B00000907068AF894089B84200D9384683460C -:10B1C000B5F80A8028890590484600F0FFFA6081AA -:10B1D000079840B10220079B00902246494630461E -:10B1E00000F02CFB37E6B8F1170F1ED3172F1CD336 -:10B1F0000420207200986082E781A4F810B0A4F8BF -:10B200000C8009EB890271680AEBC2000D180099E5 -:10B210000598A5F81480A5F818B0E9812882204681 -:10B2200000F0CAFA0620287015E601200B230090D2 -:10B23000D3E7082FA6D129893046FEF73CFE074602 -:10B2400040289FD007EB870271680AEBC2000844D0 -:10B25000804600F0ECFA002894D16D89B8F80E0011 -:10B260002844B0F5803F05D360883A46314600F067 -:10B270001CFBF0E5002D85D0A8F80E0060883A464A -:10B280003146FFF7F3F808202072384600F09EFAA6 -:10B290006081A58127E770B50D460646032105F0BC -:10B2A000DDFB040004D02078000704D5112070BD18 -:10B2B00043F2020070BD2A4621463046FEF711FFD8 -:10B2C00018B9286860616868A061207840F00800BB -:10B2D0002070002070BD70B50D460646032105F0B4 -:10B2E000BDFB040004D02078000704D4082070BD02 -:10B2F00043F2020070BD2A4621463046FEF724FF85 -:10B3000000B9A582207820F008002070002070BDD0 -:10B310002DE9F04F0E4691B08046032105F09EFBCB -:10B320000446404605F0B6FC07460020079008900A -:10B330000990ADF830000A9002900390049004B98F -:10B34000FFDF0DF1080917BBFFDF20E038460BA92E -:10B35000002204F046FE9DF82C0000F07F050A2D27 -:10B3600000D3FFDF6019017F491E01779DF82C0093 -:10B3700000060CD52A460CA907A8FEF708FE01E036 -:10B380005C20020019F80510491C09F80510761E0A -:10B39000F6B2DBD204F13400FC4D04F1260BDFF8E9 -:10B3A000F0A304F12A07069010E05846069900F031 -:10B3B0006EFA064628700A2800D3FFDF5AF82610D6 -:10B3C00040468847E08CC05DB04202D0208D002806 -:10B3D000EBD10A202870EE4D4E4628350EE00CA920 -:10B3E00007A800F054FA0446375D55F8240000B968 -:10B3F000FFDF55F82420394640469047BDF81E002F -:10B400000028ECD111B027E510B5032105F026FB8B -:10B41000040000D1FFDF0A2104F11C0016F005FC36 -:10B42000207840F00400207010BD10B50C460321B8 -:10B4300005F014FB01190A7F01211AB9808EA14081 -:10B44000084000D0012010BD2DE9F84F894615466F -:10B450008246032105F002FB070004D0284608F0CD -:10B46000FFFE40B903E043F20200BDE8F88F484612 -:10B4700008F01CFF08B11020F7E7786828B1698848 -:10B480000089814201D90920EFE7B9F800001C24A6 -:10B4900018B1402809D2402008E03846FEF7EDFCFC -:10B4A0008046402819D11320DFE7403880B280461B -:10B4B0000146384600F0A5F948B108EB88007968E4 -:10B4C00004EBC000085C012803D00820CDE705206C -:10B4D000CBE7FDF76AFF06000BD008EB8800796820 -:10B4E00004EBC0000C18B9F8000020B1E88910B1D5 -:10B4F00013E01120B9E72888172802D36888172895 -:10B5000001D20720B1E7686838B12B1D22464146B9 -:10B510003846FFF71DF90028A7D104F10C0269464F -:10B520002046FFF70EF8288860826888E082B9F824 -:10B53000000030B102202070E889A080E889A0B125 -:10B540002BE003202070A889A080786881784029AA -:10B5500005D180F8028039465046FEF714FE404679 -:10B5600000F034F9A9F8000021E07868218B4089C7 -:10B57000884200D908462083A6F802A00420307231 -:10B58000B9F800007081E0897082F181208B3082EF -:10B59000A08AB081304600F00FF97868C178402960 -:10B5A00005D180F8038039465046FEF73DFE002065 -:10B5B0005BE770B50D460646032105F04FFA04001F -:10B5C00003D0402D04D2402503E043F2020070BDB9 -:10B5D000403DADB2294600F014F958B105EB8501A4 -:10B5E0001C22606802EBC101084400F020F918B188 -:10B5F000082070BD052070BD2A462146304600F067 -:10B6000054F9002070BD2DE9F0410D4616468046E4 -:10B61000032105F023FA0446402D01D2402500E025 -:10B62000403DADB28CB1294600F0EBF880B105EB9E -:10B6300085011C22606802EBC1014718384600F002 -:10B64000F6F838B10820BDE8F08143F20200FAE7CD -:10B650000520F8E733463A4629462046FFF778F8B2 -:10B660000028F0D1EAB221464046FEF789FF0020CB -:10B67000E9E72DE9F0410D4616468046032105F025 -:10B68000EDF90446402D01D2402500E0403DAFB227 -:10B6900024B1304608F0E4FD38B902E043F202007C -:10B6A000D1E7306808F0DCFD08B11020CBE739465F -:10B6B000204600F0A6F860B107EB87011C22606805 -:10B6C00002EBC1014518284600F0B1F818B1082076 -:10B6D000B9E70520B7E7B088A98A884201D90C20CC -:10B6E000B1E76168E88C4978B0EBC10F01D3132052 -:10B6F000A9E73946204600F078F80146606808233B -:10B700004078C20005F1240005F015F8D6E90012D2 -:10B71000C0E90012FAB221464046FEF7A7FE00201B -:10B7200091E72DE9F0470D461F46904681460321DB -:10B7300005F094F90446402D01D2402001E0A5F126 -:10B74000400086B23CB14DB1384608F0CDFD50B155 -:10B750001020BDE8F08743F20200FAE76068C8B144 -:10B76000A0F80C8024E03146204600F04AF888B169 -:10B7700006EB86011C22606802EBC10145182846D1 -:10B7800000F055F840B10820E3E700002C0000204D -:10B79000742002000520DCE7A5F80880F2B22146FB -:10B7A0004846FEF7EDFE1FB1A88969890844388034 -:10B7B0000020CEE704F0ADBD017821F00F01491C57 -:10B7C00021F0F00110310170FDF7F2BD10B5044613 -:10B7D000402800D9FFDF4034A0B210BD4068426964 -:10B7E0000078484302EBC0007047C2784068037895 -:10B7F00012FB03F24378406901FB032100EBC10017 -:10B800007047C2788A4209D9406801EB81011C2245 -:10B8100002EBC101405C08B1012070470020704775 -:10B820000078062801D90120704700207047007871 -:10B83000062801D00120704700207047F0B401EBCA -:10B8400081061C27446807EBC6063444049D052680 -:10B850002670E3802571F0BCFEF782BA10B54189ED -:10B8600011B1FFF7DDFF08B1002010BD012010BDB0 -:10B8700010B5C18C8278B1EBC20F04D9C18911B166 -:10B88000FFF7CEFF08B1002010BD012010BD10B59C -:10B890000C4601230A22011D04F083FF0078218851 -:10B8A000012282409143218010BDF0B402EB820559 -:10B8B0001C264C6806EBC505072363554B681C79AD -:10B8C000402C03D11A71F0BCFEF7F3BCF0BC7047FA -:10B8D00010B5EFF3108000F0010472B6E94841782A -:10B8E000491C41704078012801D1F7F74BFB002C2F -:10B8F00000D162B610BD70B5E24CE07848B90125C0 -:10B90000E570FFF7E5FFF7F745FB20B1002008F0F1 -:10B910009AF8002070BD4FF080406571C0F8045364 -:10B92000F7E770B5EFF3108000F0010572B6D54C63 -:10B93000607800B9FFDF6078401E6070607808B9F9 -:10B94000F7F724FB002D00D162B670BDCD4810B5CD -:10B95000C17821B100214171C170FFF7E2FF0020E1 -:10B9600010BD10B50446F7F715FBC649C978084065 -:10B9700000D001202060002010BD2DE9F05FDFF82D -:10B9800004934278817889F80620002689F8071008 -:10B99000074689F808600078354620B101280FD0A5 -:10B9A00002280FD0FFDFF7F702FB98B1F7F706FB8D -:10B9B000B0420FD13046F7F705FB0028FAD047E038 -:10B9C0000126F0E7FFF784FFF7F7E4FA0028FBD041 -:10B9D0000226E8E701208407E060C4F80451AA4980 -:10B9E0000E600107D1F84412A74AC1F34231243254 -:10B9F0001160A549343108604FF0020BC4F804B35C -:10BA0000A060DFF888A2DAF80010C94341F3001102 -:10BA100001F10108DAF8001041F01001CAF8001035 -:10BA200000E020BFD4F804010028FAD03046F7F730 -:10BA3000C9FA0028FAD0B8F1000F05D1DAF80010E1 -:10BA400021F01001CAF80010C4F808B3C4F804517A -:10BA500099F807004C4670B1387860B9F7F79AFA50 -:10BA6000074608F09FF96FF0004117B1C4E90310D1 -:10BA700001E0C4E9030116B12571BDE8F09F01277B -:10BA8000BE0727714FF01908C6F80883B761C6F8DA -:10BA90000051C6F80C51C6F81051F7F77BFA10B1F7 -:10BAA000A770376100E02770FFF712FF7649A07991 -:10BAB00020310860C6F80483DFE770B5050000D1C7 -:10BAC000FFDF4FF080424FF0FF30C2F80803002143 -:10BAD000C2F80011C2F80411C2F80C11C2F810111A -:10BAE000684C6170F7F75CFA10B10120E07060708B -:10BAF0002846BDE8704040E72DE9F05F6448D0F883 -:10BB000000B0634A6349083211608406D4F8080122 -:10BB100010B14FF0010801E04FF00008D4F8000127 -:10BB200000B101208146D4F8040108B1012600E0EB -:10BB30000026D4F80C0100B101208246D4F810018F -:10BB400008B1012700E0002748EA090126EA0100C0 -:10BB500020EA0A00B84300D0FFDF0025B8F1000F4B -:10BB600004D0C4F80851012007F06DFF5FEA090016 -:10BB7000DFF810814FF0010913D0C4F8005198F894 -:10BB8000050020B188F80550002007F05CFF98F808 -:10BB9000000030B1F7F7FEF918B188F80290C4F848 -:10BBA00010900EB1C4F80451BAF1000F0CD0C4F8D3 -:10BBB0000C5198F80200464600B9FFDFB5703570A9 -:10BBC000C4F81490FFF7ADFE37B1C4F8105198F8DF -:10BBD000040008B100F020F82D49091DC1F800B09B -:10BBE0004BE770B5274DE87808B9F7F7CFF9012092 -:10BBF0008407A061A87850B1D4F80C0120B90020C6 -:10BC0000F7F7E0F90028F7D10020C4F80C014FF055 -:10BC1000FF30C4F8080370BD2DE9F041194C4FF016 -:10BC200080470125E079F0B1012803D0217A401E38 -:10BC3000814218DAF7F7AEF9064608F0B3F8E17971 -:10BC4000012902D9217A491C21720EB1216900E033 -:10BC5000E168411A022902DA11F1020F0BDC0EB180 -:10BC6000206100E0E060FFF733FEF7F793F928B1B9 -:10BC70003D61A57003E07D61BDE8F0812570002085 -:10BC80002072F9E7380000201805004010ED00E0B0 -:10BC900010050240010000014FF0E0214FF000705C -:10BCA000C1F88001C1F88002384B802283F800245B -:10BCB000C1F80001704700B502460420344903E092 -:10BCC00001EBC0031B792BB1401EC0B2F8D2FFDFDD -:10BCD000FF2000BD41F8302001EBC00100224A7175 -:10BCE0008A7101220A7100BD294A002102EBC000BD -:10BCF0000171704710B50446042800D3FFDF2448C3 -:10BD000000EBC4042079012800D0FFDF6079A1791D -:10BD1000401CC0B2814200D060714FF0E0214FF072 -:10BD20000070C1F8000210BD2DE9F0411948056806 -:10BD300018491948083108601448042690F800048E -:10BD4000134F4009154C042818D0FFDF16E0217866 -:10BD500007EBC1000279012A08D1427983799A421E -:10BD600004D04279827157F8310080472078401C16 -:10BD7000C0B22070042801D300202070761EF6B2D5 -:10BD8000E5D20448001D0560BDE8F08119E000E03F -:10BD90009006002010050240010000014C00002028 -:10BDA000F8B51D46DDE906470E000AD004F072FF23 -:10BDB0002346FF1DBCB231462A46009404F030FBF6 -:10BDC000F8BDD0192246194615F096FE2046F8BD5A -:10BDD000F84B586019721A80C90015F026BF70B56B -:10BDE0000D460446102115F0FEFE258117206081C6 -:10BDF000A07B40F00A00A07370BD4FF6FF720A806E -:10BE00000146032008F0E0B9704700897047827B43 -:10BE1000D30701D1920703D480890880002070479E -:10BE200005207047827B920700D5818170470146CB -:10BE30000020098847F2FE12114200D00120DD499E -:10BE4000497A002901D040F00800704700B5034648 -:10BE5000807BC00701D0052000BD59811846FFF73F -:10BE6000E6FFC00703D0987B40F004009873987BEE -:10BE700040F001009873002000BD827B520700D57E -:10BE800009B14089704717207047827B61F3C30274 -:10BE9000827370472DE9F04F0E46017804464FF04B -:10BEA000010B0BFA01F047F2FF1100EA010961688A -:10BEB0004FF6FF7887B008881D469646404506D065 -:10BEC000B9F1000F07D047F2FE12104203D0012053 -:10BED00007B0BDE8F08F40EA090008804FF0000A83 -:10BEE00095B185F800A022780027052003210223C0 -:10BEF000102A6FD2DFE802F06E0D2C35546F768079 -:10BF000054CBC79CCFFEFDFC20780B28EBD004203F -:10BF1000DEE762682089937B9B077DD5172851D384 -:10BF200013898342FBD39289172A01D3824249D1D4 -:10BF30002A7822F03F02921C2A70A5F80100318075 -:10BF4000616888816068817B21F00201817342E130 -:10BF5000042129702189A5F801106189A5F8031031 -:10BF60008FE0208A3188C01D1FFA80F84145D6D362 -:10BF7000062028702089A5F801006089A5F8030033 -:10BF8000A089A5F805000721208ACDE90001608875 -:10BF90002A4671466369FFF703FFA6F800801AE19D -:10BFA000082A10D0082129702189A5F8011061897B -:10BFB000A5F8031030806A1D694604F10C0006F0F4 -:10BFC000CAF910B1CCE01021EDE730889DF80010DF -:10BFD000084456E00EE10A2028702089A5F80100E7 -:10BFE0003180B2E00C2129702189A5F80110618906 -:10BFF000A5F803103080A8E0218933880BEB4102BB -:10C000001FFA82FA534576D3BAF1050F73D30E2285 -:10C010002A7008EA410100E07FE0CDE9001B60885A -:10C020002A467146E368FFF7BBFEA6F800A0D2E0FF -:10C030006048417A002970D0491E41724068217AD7 -:10C04000E26800EBC105D046A9882868D2F800C094 -:10C050000844A0F1080140F808CC506848608DF809 -:10C0600000308DF801A028680290A888ADF804007F -:10C0700060886946F5F7C6FEA5F80480002E01D059 -:10C0800040463080A7E0287840F080022A70287867 -:10C0900040F040022A7060893288C01C1FFA80F884 -:10C0A00042455DD3287820F03F0012302870228965 -:10C0B000A5F801206089CDE9000160882A46714613 -:10C0C000E368FFF76DFEA6F80080287841063CD5AE -:10C0D00000065ED58DF800B08DF801A03188CDE95D -:10C0E000025A091DADF804100420DFF8C88003E0EF -:10C0F00059E04FE02DE033E0049098F808008DF807 -:10C10000140060886946F5F77DFE074630880C30DC -:10C110003080022F02D0E7B36FE048E09DF8142092 -:10C12000D8F8041098F80830404601EBC2019A4252 -:10C1300016D28A88A2B9427A521C88F809200D606A -:10C1400030888880A6F800A057E061682089888040 -:10C1500041E0A1893288491D1FFA81F8424501D288 -:10C1600004274AE029782A4621F03F011631297038 -:10C170002189A5F801106189A5F80310A189CDE9ED -:10C180000010608871462369FFF70AFEA6F8008058 -:10C19000DBE720E0287820F03F0018302870207A74 -:10C1A0006870338017E060680188090404D40527AB -:10C1B00023E00000B0060020C0882189884201D019 -:10C1C00006271AE01E202870A6F800B060680188D3 -:10C1D00021F400410180B9F1000F0ED0DF486188E1 -:10C1E000002200888300032007F044FF6168207864 -:10C1F000887007E0A6F800A003276068018821EA9C -:10C2000009010180384663E62DE9F04F87B01746F3 -:10C21000109C0D0083461E461AD03078C10703D00B -:10C2200000F03F00192801D9012100E0002120463B -:10C23000FFF723FEA8420BD32088A0F57F41FF39EA -:10C2400006D03078410601D4000603D508203FE629 -:10C2500007203DE600208DF800008DF801003078C1 -:10C260006B1E00F03F0C0122A81E4FF0050A4FF094 -:10C27000020999B2BCF1200F76D2DFE80CF08C10E5 -:10C28000755F7569758D759E75B875BD75CB75D7FC -:10C2900075E4757575F475F275F175F0758C052D8D -:10C2A00079D104208DF80000A0788DF80400708802 -:10C2B000ADF8060030798DF80100707800F03F008D -:10C2C0000C2829D00ADCA0F10200092863D2DFE89B -:10C2D00000F0126215621A621D622000122824D03A -:10C2E00004DC0E281BD01028DAD11BE016281FD042 -:10C2F0001828D5D11FE02078800701E0207840077A -:10C30000002848DAF1E020780007F9E72078C00635 -:10C31000F6E720788006F3E720784006F0E72078FB -:10C320000006EDE72088C005EAE72088C004E7E7BB -:10C3300020888004E4E720884004E1E72078800733 -:10C3400029D5032D27D18DF800A0B6F8010083E090 -:10C35000217849071FD5062D1DD381B27078012899 -:10C3600003D0022817D102E0CCE0022000E0102028 -:10C3700006228DF8002072788DF80420801CB1FB15 -:10C38000F0F2ADF8062092B242438A4203D10397FD -:10C39000ADF80890A9E07BE02078000778D5072168 -:10C3A00098B28DF800108108ADF80410B0EB810F41 -:10C3B0006ED10297ADF8062097E02178C90667D5BF -:10C3C000022D65D381B208208DF800007078022814 -:10C3D0005ED300BFB1FBF0F28DF80400ADF806208B -:10C3E00092B242438A4253D1ADF808907CE0207863 -:10C3F00080064DD5092003E02078400648D50A2064 -:10C400008DF80000A088ADF80400ADF80610ADF876 -:10C41000082069E02078000672D50B20ADF80410E2 -:10C420008DF80000ADF8062002975EE02188C9056E -:10C4300066D5022D64D381B20C208DF8000070788F -:10C4400004285DD3C6E72088C00459D5012D57D1F3 -:10C450000D208DF80000A088ADF8040045E021E033 -:10C4600026E016E0FFE72088800449D5052D47D354 -:10C470000E208DF80000A088ADF80400B6F8030087 -:10C480006D1FADF80850ADF80600ADF80AA02BE01E -:10C4900036E02088400433D5012D31D10F208DF8AE -:10C4A000000022E0208800042AD4B6F80100E080D1 -:10C4B000A07B000724D5032D22D3307800F03F0065 -:10C4C0001B2819D011208DF80000208840F400406E -:10C4D000A4F80000B6F80100ADF80400ED1E03203A -:10C4E000ADF80650ADF80800039769465846F5F7D1 -:10C4F00089FC050008D016E010208DF80000E9E75F -:10C50000072510E008250EE0307800F03F001B28DA -:10C5100009D01D2807D05946032007F055FE208872 -:10C5200000F400402080A07B400708D52046FFF79C -:10C530007EFCC00703D1A07B20F00400A073284636 -:10C54000C6E400B587B0032805D18DF8000088B295 -:10C550006946F5F757FC07B000BD0000B0060020A3 -:10C56000F8B51D46DDE906470E000AD004F092FB3F -:10C570002346FF1DBCB231462A46009403F050FF0B -:10C58000F8BDD0192246194615F0B6FA2046F8BD76 -:10C590002DE9FF4F8DB09B46DDE91B57DDF87CA0F0 -:10C5A0000C46082B05D0E06901F00CF950B11020C1 -:10C5B000D2E02888092140F0100028808AF8001075 -:10C5C000022617E0E16901208871E2694FF42051E9 -:10C5D0009180E1698872E06942F601010181E069B8 -:10C5E000002181732888112140F0200028808AF8DA -:10C5F0000010042638780A900A2038704FF002099B -:10C6000004F118004D460C9001F09FFBB04681E00C -:10C61000BBF1100F0ED1022D0CD0A9EB0800801C2D -:10C6200080B20221CDE9001005AB52461E990D984B -:10C63000FFF796FFBDF816101A98814203D9F74804 -:10C6400000790F9004E003D10A9808B138702FE008 -:10C650004FF00201CDE900190DF1160352461E9963 -:10C660000D98FFF77DFF1D980088401B801B83B24B -:10C67000C6F1FF00984200D203461E990BA8D9B11B -:10C680005FF00002DDF878C0CDE9032009EB060178 -:10C6900089B2CDE901C10F980090BDF816100022B3 -:10C6A0000D9801F0D5FB387070B1C0B2832807D067 -:10C6B000BDF8160020833AE00AEB09018A19E1E788 -:10C6C000022011B0BDE8F08FBDF82C00811901F0F7 -:10C6D000FF08022D0DD09AF80120424506D1BDF881 -:10C6E0002010814207D0B8F1FF0F04D09AF80180E2 -:10C6F0001FE08AF80180C94800680178052902D145 -:10C70000BDF81610818009EB08001FFA80F905EBCF -:10C71000080085B2DDE90C1005AB0F9A01F018FB9B -:10C7200028B91D980088411B4145BFF671AF022D05 -:10C7300013D0BBF1100F0CD1A9EB0800801C81B203 -:10C740000220CDE9000105AB52461E990D98FFF776 -:10C7500007FF1D980580002038700020B1E72DE903 -:10C76000F8439C46089E13460027B26B9AB3491FB4 -:10C770008CB2F18FA1F57F45FF3D05D05518AD88EE -:10C780002944891D8DB200E000252919B6F83C80A6 -:10C790000831414520D82A44BCF8011022F8021B78 -:10C7A000BCF8031022F8021B984622F8024B91466F -:10C7B00004F05EFA4FF00C0C41464A462346CDF891 -:10C7C00000C003F0F4FDF587B16B00202944A41DDF -:10C7D0002144088003E001E0092700E08327384670 -:10C7E000BDE8F88310B50B88848F9C420CD9846B0C -:10C7F000E018048844B1848824F40044A41D234430 -:10C800000B801060002010BD822010BD2DE9F04784 -:10C810008AB00025904689468246ADF81850072711 -:10C820004BE0059806888088000446D4A8F800608C -:10C8300007A8019500970295CDE903504FF40073C6 -:10C8400000223146504601F003FB04003CD1BDF804 -:10C850001800ADF82000059804888188B44216D1EC -:10C860000A0414D401950295039521F40041009720 -:10C87000049541F4804342882146504601F0BEF8B9 -:10C8800004000BD10598818841F40041818005AAFC -:10C8900008A94846FFF7A6FF0400DCD000970598DA -:10C8A00002950195039504950188BDF81C3000227E -:10C8B000504601F0A3F8822C06D105AA06A94846E5 -:10C8C000FFF790FF0400ACD0ADF8185004E00598D5 -:10C8D000818821F40041818005AA06A94846FFF716 -:10C8E00081FF0028F3D0822C03D020460AB0BDE897 -:10C8F000F0870020FAE710B50C46896B86B051B17D -:10C900000C218DF80010A18FADF80810A16B0191DA -:10C910006946FAF7C9FB00204FF6FF71A063E18773 -:10C92000A08706B010BD2DE9F0410D460746896B82 -:10C930000020069E1446002911D0012B0FD132464B -:10C9400029463846FFF762FF002808D1002C06D0A0 -:10C95000324629463846BDE8F04100F042BFBDE806 -:10C96000F0812DE9FC411446DDE9087C0E46DDE945 -:10C970000A15521DBCF800E092B2964502D207207B -:10C98000BDE8FC81ACF8002017222A70A5F80160F0 -:10C99000A5F803300522CDE900423B462A46FFF7C1 -:10C9A000DFFD0020ECE770B50C4615464821204617 -:10C9B00015F03BF904F1080044F81C0F00204FF675 -:10C9C000FF71E06161842084A5841720E08494F8DD -:10C9D0002A0040F00A0084F82A0070BD4FF6FF726A -:10C9E0000A800146042007F0EFBB30B585B00C4645 -:10C9F0000546FFF780FFA18E284629B101218DF859 -:10CA000000106946FAF750FB0020E0622063606383 -:10CA100005B030BDB0F84000704700005000002065 -:10CA200090F84620920703D4408808800020F3E75E -:10CA30000620F1E790F846209207EDD5A0F84410C3 -:10CA4000EAE70146002009880A0700D5012011F015 -:10CA5000F00F01D040F00200CA0501D540F00400FB -:10CA60008A0501D540F010004A0501D540F02000AC -:10CA70000905D1D540F04000CEE700B5034690F857 -:10CA80004600C00701D0062000BDA3F8421018469A -:10CA9000FFF7D7FF10F0760F05D093F8460040F06F -:10CAA000040083F8460013F8460F40F001001870A8 -:10CAB000002000BD90F84620520700D511B1B0F813 -:10CAC0004200A9E71720A7E710F8462F61F3C30239 -:10CAD0000270A1E72DE9FF4F9BB00E00DDE92B347A -:10CAE000DDE92978289D25D02878C10703D000F0FA -:10CAF0003F00192801D9012100E000212046FFF75D -:10CB0000D9FFB04216D3287841060FD400F03F0178 -:10CB10001E2909D0218811F47F6F0BD13A884AB1C0 -:10CB2000A1F57F42FF3A05D0010606D500F03F008F -:10CB3000122802D004201FB0C4E5FC491D984FF014 -:10CB4000000A08718DF818A08DF830A00CAA0A60B0 -:10CB5000ADF81CA0ADF824A02978994601F03F0259 -:10CB6000701F5B1C04F1180CD3464FF0030ECDF878 -:10CB700028C01F2A7ED2DFE802F07D7D107D227D55 -:10CB8000AE7DF77DF67DF57DF47DF77DF37D7D7DD2 -:10CB9000F27DF17D7D7D7D7DF00094F84610B5F845 -:10CBA0000100890767D5032E65D14FF40061ADF808 -:10CBB000241060808DF830E0ADF83400E9E2052EF5 -:10CBC000F2D1B5F801002083ADF81C00B5F80310D0 -:10CBD0006183002870D088426ED884F80AB0A4F827 -:10CBE00008B04FF6FF7020840A9801F0AEF80520D7 -:10CBF00089F8000002208346029011AB1D9A0A9921 -:10CC00001B9801F0A5F820B15EE000BF8DF8180078 -:10CC1000FEE29DF84A00012804D0022089F80100B4 -:10CC2000102003E0012089F8010002200390002277 -:10CC300004A912A805F08FFBE8BB9DF8101003981B -:10CC400088423ED13A88891CA2EB0B00884238DB2F -:10CC500002990220CDE900010DF146034A46414602 -:10CC60001B98FFF77DFC02980BF1020B801C81B230 -:10CC700017AA01E0ACE2B1E0029104A912A805F004 -:10CC80006AFB02999DF81000CDE9000117AB4A46F6 -:10CC900041461B98FFF764FC9DF8100011AB0BEBAD -:10CCA00000011FFA81FB02991D9A084480B202908C -:10CCB0000A991B9801E004E091E001F049F800288E -:10CCC000B5D0BBF1020F03D10A208DF818005DE248 -:10CCD000A7F800B05AE2CDF80CB0072E7ED3B5F815 -:10CCE00001002083ADF81C00B5F803206283002802 -:10CCF00075D0904273D84FF0010B84F80AB0B5F8A4 -:10CD0000050020810020A073E06900F05BFD80B980 -:10CD1000E16942F6010081F806B0E2694FF4205162 -:10CD20009180E16981F80AB0E1690881E169002038 -:10CD30008873F01F20841E984FF0070B6062A4F8E0 -:10CD400022B00A9801F001F889F800B0012083466A -:10CD500004900020ADF846002AE026E2B0E147E169 -:10CD6000EDE01FE2B0E088E04FE000BFBBF1010F53 -:10CD700015D0E0698079012803D1BDF84400ADF8F1 -:10CD80000E0004990420CDE9000103AB4A46414658 -:10CD90001B98FFF7E5FB0498001D80B20490BDF8D6 -:10CDA0004600ADF80C00ADF80E0005981FFA80FBA8 -:10CDB00011AB1D9A0A991B9800F0CAFF28B939884F -:10CDC0000BF1040005908142D0D2BBF1010F3FF47A -:10CDD0001BAFE0698079012808D001E098E023E0EA -:10CDE000BDF84410A1F57F40FF3803D1BDF84400E1 -:10CDF000ADF80E0004990420CDE9000103AB4A46CA -:10CE000041461B98FFF7ACFB62E7072E01D0152EB9 -:10CE10007ED1B5F801102183ADF81C10B5F80320C0 -:10CE2000628309B1914201D90120EFE60121A1728B -:10CE3000A4F808B084F80EB0052E07D0C0B2691D62 -:10CE4000E26905F069FA00287FF4DEAE4FF6FF7064 -:10CE5000208401A806AA09A9CDF800B080E88603BD -:10CE60002878214600F03F031D9A1B98FFF790FB9E -:10CE70008246208BADF81C0088E10120032EC7D12B -:10CE80004021ADF82410B5F801102183ADF81C1035 -:10CE90000AAAB8F1000F00D00023CDE902030492E2 -:10CEA0001D98CDF80480009038880022401E83B27F -:10CEB0001B9800F0CDFF8DF8180050BB0B2189F8AE -:10CEC0000010BDF8280038E04FF0010C052E9FD16E -:10CED0008020ADF82400B5F801102183B5F80300D7 -:10CEE0002084ADF81C10B0F5007F01D907208DE635 -:10CEF00040F47C42228412A8B8F1000F00D0002335 -:10CF0000CDE90330CDE9018C1D980090388801E00F -:10CF10009CE007E0401E83B21B9800F099FF8DF85B -:10CF2000180028B18328A7D10220C7E050000020B4 -:10CF30000D2189F80010BDF84800401C25E1C80902 -:10CF400000EB40020EEB8200B04203D948067DD5CB -:10CF500058461AE1B5F80110ADF81C102A785206AF -:10CF600008D506228DF830202A78120605D58DF8CE -:10CF700030B02FE107228DF830200323CDE9023BAA -:10CF8000DDF878C0CDF810B01D9AA6EB000800922D -:10CF9000CDF804C01FFA88F300221B9800F02EFD84 -:10CFA0008DF818008DF830B0297849060DD5208805 -:10CFB000C00506D5208BBDF81C10884201D1C4F8ED -:10CFC00024B058468DF818B0DFE0832801D14FF027 -:10CFD000020A4FF48070ADF82400BDF81C002083D5 -:10CFE000A4F820801E986062032060841321C9E0A9 -:10CFF000052E2BD3B5F80110ADF81C10A28F32B35B -:10D00000A2F57F43FE3B29D008228DF8302005236E -:10D01000CDE9023BDDF878C0CDF810B01D9A80B2A2 -:10D02000CDF804C040F400430092B5F803201B98EB -:10D0300000F0E4FC4FF400718DF818008DF830B06A -:10D04000ADF82410832813D010B301E0DBE005E035 -:10D05000A08FA0F57F41FE3907D0D9E00B228DF8D3 -:10D0600030204FF6FE72A287D1E7A4F83CB0CFE0A3 -:10D0700000942B4631461E9A1B98FFF770FB8DF8E3 -:10D08000180008B183284BD1BDF81C0020834BE762 -:10D0900000942B4631461E9A1B98FFF760FB8DF8D3 -:10D0A0001800E8BBE18FA06B0844831D8DE888035E -:10D0B0004388828801881B98FFF753FC824665E00D -:10D0C00095F80180022E6FD15FEA080002D0B8F116 -:10D0D000010F7FD109208DF8300007A800908DF84E -:10D0E00034804346002221461B98FFF71CFC8DF834 -:10D0F00036008DF837B050B9B8F1010F11D0B8F142 -:10D10000000F04D1A08FA0F57F41FF3909D0A08F77 -:10D1100038B14FF480608DF830B0ADF824000EE0E7 -:10D1200034E00CA91B98F9F7BFFF82464FF48060EA -:10D130008DF830B0ADF82400BAF1020F06D0FB48EC -:10D140000068C07928B18DF8180027E0A4F818808D -:10D1500042E0BAF1000F03D081208DF818003BE0C7 -:10D1600007A800904346012221461B98FFF7DBFBEE -:10D170008DF8180021461B98FFF7BDFB9DF818009D -:10D1800020B9192189F80010012038809DF830005D -:10D1900020B10CA91B98F9F787FF8246BAF1000F5E -:10D1A00033D019E0062031E514E02078000711D5CE -:10D1B000012E0FD10A208DF83000E088ADF8340040 -:10D1C00004201B9907F000F80820ADF824007FE543 -:10D1D000480618D54FF0040A2088BDF824100843EB -:10D1E0002080BDF8240080050BD5A18FA1F57F40DC -:10D1F000FE3806D11E98E06228982063A6864FF07C -:10D20000030A504697E4042000E59DF8180078B121 -:10D21000012089F80000297889F80110BDF81C1058 -:10D22000A9F802109DF8180089F80400052038803C -:10D230002088BDF8241088432080E2E72DE9FF4FC5 -:10D240008846087895B0012181404FF20900249C5E -:10D250000140ADF820102088DDF88890A0F57F42CD -:10D260004FF0000AFF3A02D029B1000703D5012090 -:10D2700019B0BDE8F08F239E4FF0000B0EA886F882 -:10D2800000B018995D460988ADF83410A7498DF8AB -:10D290001CB0179A0A718DF838B0086098F8000031 -:10D2A00001283BD0022809D003286FD1307820F024 -:10D2B0003F001D303070B8F80400E08098F800108E -:10D2C0000320022904D1317821F03F011B31317054 -:10D2D00094F84610090759D505ABB9F1000F13D0E2 -:10D2E000002102AA82E80B000720CDE90009BDF861 -:10D2F0003400B8F80410C01E83B20022159800F064 -:10D30000A7FD0028D1D101E0F11CEAE7B8F804003C -:10D31000A6F80100BDF81400C01C04E198F805103F -:10D320008DF81C1098F80400012806D04FF4007AFC -:10D3300002282CD00328B8D16BE12188B8F8080066 -:10D3400011F40061ADF8201020D017281CD3B4F8D8 -:10D350004010814218D3B4F84410172901D38142F8 -:10D3600012D1317821F03F01C91C3170A6F80100BB -:10D370000321ADF83410A4F8440094F8460020F0DE -:10D38000020084F8460064E105257DE176E120880D -:10D3900008F1080700F4FE60ADF8200010F0F00F6F -:10D3A0001BD010F0C00F03D03888228B9042EBD1F5 -:10D3B00099B9B878C00710D0B9680720CDE902B193 -:10D3C000CDF804B00090CDF810B0FB88BA88398849 -:10D3D000159800F013FB0028D6D12398BDF8201033 -:10D3E000401C80294ED006DC10290DD020290BD0FE -:10D3F000402987D124E0B1F5807F70D051456DD0B0 -:10D40000B1F5806F97D1DDE0C80601D5082000E0B6 -:10D41000102082460DA907AA0520CDE902218DF82A -:10D420003800ADF83CB0CDE9049608A93888CDE9BC -:10D4300000015346072221461598FFF7A9F8A7E0F7 -:10D440009DF81C2001214FF00A0A002A9BD105AB50 -:10D45000B9F1000F00D00020CDE902100720CDE97E -:10D460000009BDF834000493401E83B2218B0022D2 -:10D47000159800F0EDFC8DF81C000B203070BDF805 -:10D48000140020E09DF81C2001214FF00C0A002A16 -:10D4900022D113ABB9F1000F00D00020CDE902106A -:10D4A0000720CDE900090493BDF83400228C401E0A -:10D4B00083B2218B159800F0CBFC8DF81C000D2059 -:10D4C0003070BDF84C00401CADF8340005208DF8DC -:10D4D0003800208BADF83C00BBE000E028E0388845 -:10D4E000218B88427FF450AF9DF81C004FF0120A48 -:10D4F00000281AD1606A98B1B878C0073FF444AFE9 -:10D50000BA680720CDE902B2CDF804B00090CDF89A -:10D5100010B0FB88BA88159800F070FA8DF81C00DE -:10D52000132030700120ADF8340092E0500000204C -:10D530003988208B8142D5D19DF81C004FF0160A06 -:10D540000028A06B08D0E0B34FF6FF7000215F46C3 -:10D55000ADF808B0019027E068B1B978C907C1D12A -:10D56000E18F0DAB0844821D03968DE80C024388C1 -:10D570008288018809E0B878C007BFD0BA680DABCF -:10D5800003968DE80C02BB88FA881598FFF7E9F935 -:10D5900005005ED0072D72D076E0019005AA02A9A1 -:10D5A0002046FFF71FF90146E28FBDF808008242CE -:10D5B00001D00029F1D0E08FA16B084407800198C9 -:10D5C000E08746E09DF81C004FF0180A40B1208B20 -:10D5D000C8B13888208321461598FFF78CF938E0C8 -:10D5E00004F118000090237E012221461598FFF7D0 -:10D5F0009AF98DF81C000028EDD119203070012017 -:10D60000ADF83400E7E7052521461598FFF773F9D3 -:10D610003AE0208800F40070ADF8200050452DD18C -:10D62000A08FA0F57F41FE3901D006252CE0D8F867 -:10D6300008004FF0160A48B1A063B8F80C10A18793 -:10D640004FF6FF71E187A0F800B002E04FF6FF70DF -:10D65000A087BDF8200030F47F611AD07823002223 -:10D660000420159906F006FD98F800002071208826 -:10D67000BDF82010084320800EE000E00725208838 -:10D68000BDF8201088432080208810F47F6F1CD0C4 -:10D690003AE02188814321809DF8380020B10EA90D -:10D6A0001598F9F701FD05469DF81C000028EBD000 -:10D6B00086F801A001203070208B70809DF81C003E -:10D6C00030710520ADF83400DEE7A18EE1B1189885 -:10D6D0000DAB0088ADF834002398CDE90304CDE903 -:10D6E0000139206B0090E36A179A1598FFF7F2F959 -:10D6F000054601208DF838000EA91598F9F7D4FCDD -:10D7000000B10546A4F834B094F8460040070AD5A5 -:10D710002046FFF796F910F0760F04D114F8460F63 -:10D7200020F0040020701898BDF8341001802846BD -:10D730009EE500B585B0042806D102208DF80000D2 -:10D7400088B26946F9F7B0FC05B000BD10B5384C99 -:10D750000B782268012B02D0022B2AD111E013781A -:10D760000BB1052B01D10423137023688A889A809A -:10D770002268CB88D38022680B8913814989518123 -:10D780000DE08B8893802268CB88D38022680B8938 -:10D7900013814B8953818B899381096911612168B8 -:10D7A000F9F782FC226800210228117003D00028BA -:10D7B00000D0812010BD832010BD806B002800D0D8 -:10D7C000012070478178012909D10088B0F5205FD8 -:10D7D00003D042F60101884201D1002070470720A2 -:10D7E0007047F0B587B0002415460E460746ADF8E1 -:10D7F000144010E0069801882980811DCDE902417E -:10D800000721019404940091838842880188384656 -:10D8100000F0F4F830B906AA05A93046FEF7E2FF99 -:10D820000028E7D0822800D1002007B0F0BD00001A -:10D830005000002010B58B7883B102789A4205D150 -:10D840000B885BB102E08B79091D4BB18B789A4252 -:10D85000F9D1B0F801300C88A342F4D1002010BDFA -:10D86000812010BD072826D012B1012A27D103E05C -:10D87000497801F0070102E04978C1F3C2010529A6 -:10D880001DD2DFE801F00318080C12000AB10320D2 -:10D8900070470220704704280DD250B10DE00528D2 -:10D8A00009D2801E022808D303E0062803D00328EB -:10D8B00003D005207047002070470F20704781205B -:10D8C0007047C0B282060BD4000607D5FE48807AA6 -:10D8D0004143C01D01EBD00080B27047084670473D -:10D8E0000020704770B513880B800B781C0625D577 -:10D8F000F54CA47A844204D843F01000087000204C -:10D9000070BD956800F0070605EBD0052D78F54051 -:10D9100065F304130B701378D17803F0030341EA25 -:10D92000032140F20123B1FBF3F503FB15119268CB -:10D93000E41D00FB012000EBD40070BD906870BDB9 -:10D9400037B51446BDF8041011809DF804100A067E -:10D950001ED5C1F30013DC49A568897A814208D835 -:10D96000FE2811D1C91DC9085A422846F5F73FFBC8 -:10D970000AE005EBD00100F0070201250878954088 -:10D98000A843934018430870207820F010002070BE -:10D990003EBD2DE9F0410746C81C0E4620F00300AD -:10D9A000B04202D08620BDE8F081C74D0020344649 -:10D9B0002E60AF802881AA72E8801AE0E988491CAD -:10D9C000E980810614D4E17800F0030041EA0020E8 -:10D9D00040F20121B0FBF1F201FB12012068FFF7D8 -:10D9E00070FF2989084480B22881381A3044A06029 -:10D9F0000C3420784107E1D40020D4E72DE9FF4F13 -:10DA000089B01646DDE9168A0F46994623F440454B -:10DA1000084600F00DFB04000FD0099802F0E6FF65 -:10DA20000290207800060AD5A748817A02988142A0 -:10DA300005D887200DB0BDE8F08F0120FAE7224617 -:10DA400001A90298FFF74EFF834600208DF80C00D5 -:10DA50004046B8F1070F1AD001222146FFF702FF16 -:10DA60000028E7D12078400611D502208DF80C005F -:10DA7000ADF81070BDF80400ADF81200ADF81460F8 -:10DA80001898ADF81650CDF81CA0ADF818005FEA54 -:10DA9000094004D500252E46A84601270CE0217830 -:10DAA000E07801F0030140EA012040F20121B0FBDF -:10DAB000F1F2804601FB12875FEA494009D5B8457B -:10DAC00007D1A178207901F0030140EA0120B0429A -:10DAD00001D3BE4201D90720ACE7A8191FFA80F98B -:10DAE000B94501D90D20A5E79DF80C0028B103A97F -:10DAF0000998F9F7D7FA00289CD1B84507D1A07842 -:10DB00004FEA192161F30100A07084F804901A987B -:10DB100000B10580199850EA0A0027D0199830B151 -:10DB20000BEB06002A46199913F0E6FF0EE00BEB0B -:10DB300006085746189E099803F09AF82B46F61DDA -:10DB4000B5B239464246009502F031FC224601A9A1 -:10DB50000298FFF7C7FE9DF80400224620F010004F -:10DB60008DF80400DDE90110FFF7EAFE002061E70F -:10DB70002DE9FF4FDFF8509182461746B9F806109D -:10DB8000D9F8000001EB410100EB810440F20120D3 -:10DB9000B2FBF0F185B000FB11764D46DDF84C800C -:10DBA00031460698FFF78DFE29682A898B46611A4F -:10DBB0000C3101441144AB8889B28B4202D88420D5 -:10DBC00009B038E70699CDB2290603D5A90601D5D3 -:10DBD0008520F5E7B9F806C00CF1010C1FFA8CFCA2 -:10DBE000A9F806C0149909B1A1F800C0A90602D588 -:10DBF000C4F8088007E0104480B2A9F80800191A98 -:10DC000001EB0B00A0602246FE200699FFF798FE6C -:10DC1000E77026712078390A61F30100320AA17891 -:10DC200040F0040062F30101A17020709AF8020034 -:10DC30006071BAF80000E08000262673280602D53D -:10DC400099F80A7000E00127A80601D54FF00008F6 -:10DC50004D4600244FF007090FE0CDE90268019618 -:10DC6000CDF800900496E9882046129B089AFFF7A9 -:10DC7000C5FE0028A4D1641CE4B2BC42EDD3002050 -:10DC80009EE72DE9F047804600F0D2F9070005D065 -:10DC9000002644460C4D40F2012919E00120BDE860 -:10DCA000F087204600F0C4F90278C17802F0030240 -:10DCB00041EA0222B2FBF9F309FB13210068FFF7E6 -:10DCC00000FE304486B201E0BC060020641CA4B211 -:10DCD000E988601E8142E4DCA8F10100E88028891F -:10DCE000801B288100203870D9E710B5144631B167 -:10DCF000491E218002F07AFEA070002010BD012094 -:10DD000010BD10B5D24904460088CA88904201D39C -:10DD1000822010BD096800EB400001EB80025079C1 -:10DD2000A072D08820819178107901F0030140EA37 -:10DD30000120A081A078E11CFFF7D4FD206120889C -:10DD4000401C2080E080002010BD0121018270472E -:10DD50002DE9FF4F85B04FF6FF788246A3F800808B -:10DD600048681F460D4680788DF806004868008890 -:10DD7000ADF8040000208DF80A00088A0C88A04243 -:10DD800000D304462C8241E0288A401C2882701D62 -:10DD90006968FFF74FFDB8BB3988414501D1601E66 -:10DDA00038806888A04236D3B178307901F0030119 -:10DDB00040EA012901A9701DFFF73CFD20BB29891C -:10DDC00041452CD0002231460798FFF74BFDD8B9CA -:10DDD0002989494518D1E9680391B5F80AC0D6F8F0 -:10DDE00008B05046CDF800C002F042FFDDF800C098 -:10DDF0005A460CF1070C1FFA8CFC4B460399CDF8E0 -:10DE000000C002F097FA50B1641CA4B2204600F0A2 -:10DE10000FF90600B8D1641E2C828220D0E67C80E7 -:10DE20007079B871F088B8803178F07801F003012A -:10DE300040EA01207881A7F80C90504602F0D6FD08 -:10DE4000324607F10801FFF74DFD38610020B7E6C3 -:10DE50002DE9FF4F87B081461C469246DDF860B041 -:10DE6000DDF85480089800F0E3F805000CD048462F -:10DE700002F0BCFD2978090608D57549897A8142E6 -:10DE800004D887200BB0D6E50120FBE7CAF30906CA -:10DE90002A4601A9FFF726FD0746149807281CD03B -:10DEA00000222946FFF7DEFC0028EBD12878400647 -:10DEB00013D501208DF808000898ADF80C00BDF8C6 -:10DEC0000400ADF80E00ADF81060ADF8124002A9E4 -:10DED0004846F9F7E7F80028D4D12978E87801F026 -:10DEE000030140EA0121AA78287902F0030240EAFE -:10DEF0000220564507D0B1F5007F04D9611E81424A -:10DF000001DD0B20BEE7864201D90720BAE7801B5E -:10DF100085B2A54200D92546BBF1000F01D0ABF870 -:10DF20000050179818B1B9192A4613F0E5FDB8F159 -:10DF3000000F0DD03E4448464446169F02F0AAFE0C -:10DF40002146FF1DBCB232462B46009402F068FA0F -:10DF5000002097E72DE9F04107461D461646084682 -:10DF600000F066F804000BD0384602F03FFD21783F -:10DF7000090607D53649897A814203D8872012E5F8 -:10DF8000012010E522463146FFF7ACFC65B121784F -:10DF9000E07801F0030140EA0120B0F5007F01D8EC -:10DFA000012000E0002028700020FCE42DE9F04171 -:10DFB00007461D461646084600F03AF804000BD006 -:10DFC000384602F013FD2178090607D52049897AE1 -:10DFD000814203D88720E6E40120E4E4224631466A -:10DFE000FFF7AEFCFF2D14D02178E07801F003029A -:10DFF00040EA022040F20122B0FBF2F302FB1300E0 -:10E0000015B900F2012080B2E070000A60F301014E -:10E0100021700020C7E410B50C4600F009F828B1C3 -:10E02000C18821804079A070002010BD012010BD62 -:10E030000749CA88824209D340B1096800EB400011 -:10E040006FF00B0202EB800008447047002070471D -:10E05000BC06002010B50C4601F03AFD80B3204606 -:10E0600000F0B7FA68B32278102A09D0112A07D035 -:10E07000022A05D0032A03D0162A2ED0FFDF1DE086 -:10E08000A0781E282BD00EDC0C2824D008DC092810 -:10E0900027D2DFE800F013261726261E1E1A1C00C2 -:10E0A00012281ED11BE0302819D01ADDA0F13A0049 -:10E0B000032816D2DFE800F011150B00002010BD78 -:10E0C00013E010E043F20200F9E70420F7E70D2027 -:10E0D000F5E70F20F3E70820F1E71120EFE707202D -:10E0E000EDE70320EBE7FFDFE8E7FFDFE6E700F01F -:10E0F00070BA70B50346002002466FF02F050EE09F -:10E100009C5CA4F130060A2E02D34FF0FF3070BDA4 -:10E1100000EB800005EB4000521C2044D2B28A4242 -:10E12000EED370BD30B50A240AE0B0FBF4F304FB73 -:10E1300013008D18303005F8010C521E1846D2B26B -:10E14000002AF2D130BD30B500234FF6FF7510E044 -:10E15000040A44EA002084B2C85C6040C0F303149F -:10E16000604005EA00344440E0B25B1C84EA4010A1 -:10E170009BB29342ECD330BD10B50AF0FFF90428EE -:10E1800003D00AF0FBF9052802D108F0A0FC28B959 -:10E190000BF056FB20B107F047FB08B1012010BD82 -:10E1A000002010BD0178406819B190F8721059B97B -:10E1B00001E001F017BD90F8041129B190F80401B5 -:10E1C000042801D0012070470020704770B50C462C -:10E1D0000546062102F042FC606008B1002006E01E -:10E1E0000721284602F03AFC606018B10120207037 -:10E1F000002070BD022070BD2DE9FC470C4606468C -:10E200006946FFF7E3FF00287DD19DF8000050B17B -:10E2100007F09CFAB0427CD0214630460EF0A1F9BE -:10E22000002873D12DE008F065F9B04271D0214685 -:10E2300030460CF041FC002868D1019D95F8C800DB -:10E2400022E0012000E00020804695F835004FF0E4 -:10E25000010A4FF00009F0B195F8360080071AD591 -:10E2600084F8019084F800A084F80290A68095F8C4 -:10E270003710A171298F2181698F618185F83590CF -:10E2800044E0019D95F8040158350028DBD1A87EB3 -:10E290000028D8D0D5E7304602F0FCFC070000D1BA -:10E2A000FFDF384601F051FE40B184F801900E21A5 -:10E2B0002170A680E08084F802A027E0304602F0BA -:10E2C000D7FC070000D1FFDFB8F1000F21D038469E -:10E2D00001F0CCFEB8B19DF8000038B90198D0F833 -:10E2E000F0004188B14201D180F80090304607F03B -:10E2F000C3F884F801900B21217084F80290A68065 -:10E30000E97EA17100E004E085F81A900120BDE8E3 -:10E31000FC870020FBE71CB56946FFF757FF00B1FB -:10E32000FFDF684601F06CFCF94900208968A1F81C -:10E33000CA001CBD2DE9FC4104460E46062002F031 -:10E3400037FB0546072002F033FB2844C7B20025FF -:10E35000A8463E4417E02088401C80B22080B0428E -:10E3600002D34046A4F8008080B2B84204D3B04241 -:10E3700002D20020BDE8FC816946FFF727FF002894 -:10E38000F8D06D1CEDB2AE42E5D84FF6FF7020809C -:10E390001220EFE738B54FF6FF70ADF800000DE042 -:10E3A0000621BDF8000002F06BFB04460721BDF812 -:10E3B000000002F065FB0CB100B1FFDF00216846F0 -:10E3C000FFF7B8FF0028EBD038BD2DE9F047D1A109 -:10E3D0000F79D1F8008007F0BDF810F003F8CF4CAA -:10E3E0004FF004091020A4F8389060874FF6FF76AC -:10E3F000A4F85460A4F85660002584F8315004F85D -:10E400002E5BC6492570A5713E39A573C1F87B8086 -:10E4100081F87F707B31481E0CF029FD25751B208B -:10E42000E0824FF4A47121836083A1830321A1774B -:10E4300084F81F9020846084B848A1843E38057019 -:10E440004680B3480C300570B448103805704680DB -:10E45000BDE8F08770B5AE4C0D466060217006F0E7 -:10E46000F3FFFFF797FFFFF7B0FF207809F031FDCA -:10E4700008F02EF9217860680CF00CFC20780FF081 -:10E4800011FA28460AF071FE07F06AF921786068EF -:10E490000EF068F9BDE870400FF0A4BF10B501247C -:10E4A0000AB1002010BD21B1012903D0002420466B -:10E4B00010BD022111F0C6FBF9E72DE9F047040079 -:10E4C00000D1FFDF954D002695F8310058B16670F8 -:10E4D0001620207095F83200A07095F83300E07097 -:10E4E00085F8316068E0287840B12C22A91C2046CC -:10E4F00013F002FB102020702E705DE095F82E00C6 -:10E5000060B10120E07095F82F00A07095F8300000 -:10E5100060701120207085F82E604DE07F48022148 -:10E5200056308246FFF706FF00B1FFDFB5F8569080 -:10E53000062002F03DFA0746072002F039FA384477 -:10E54000C7B2781C00F0FF08B5F85600B84212D1E7 -:10E55000204607F04BFF50BB95F8340070B366704F -:10E56000132020702021A01C13F03DFB0220A0707E -:10E5700085F8346020E040451AD1204607F09CF829 -:10E58000E0B12078132817D1A0783C2814D1A088B6 -:10E59000072102F063FA050000D1FFDF288806F0AA -:10E5A0006BFFA088072102F06BFA00B1FFDF03E0E8 -:10E5B0002146FFF721FE08B1012049E7022150461C -:10E5C000FFF7B8FE18B9B5F856104945BCD1002080 -:10E5D0003EE772E710B5514C207828B10A21BDE81A -:10E5E0001040102001F0A1BAFFF7C6FD08B10C20C1 -:10E5F00002E00FF042FF00202071012060710A212B -:10E60000E170207010BD70B5444D0446287828B1E3 -:10E61000BDE870403221102001F087BA207818B18F -:10E62000012801D0122010E001F090FA20B110F082 -:10E630006EF808B10C2008E0207801F057FA04F1D8 -:10E640001703E21D611C0FF06FFF28710120687134 -:10E650003221E970287070BD70B5304C05462078C5 -:10E6600028B1BDE870400B21102001F05EBA287877 -:10E6700018B1012801D012200EE0FFF77DFD08B18E -:10E680000C2009E0287801F031FA691C0FF0BCFE7B -:10E6900008B1002000E007202071012060710B21EB -:10E6A000E170207070BD10B51C4C217829B130216B -:10E6B000BDE81040102001F038BA008810F02AF8A8 -:10E6C000302110B10020207100E021710120607123 -:10E6D000E170207010BD70B5104C0546207828B14F -:10E6E000BDE870403121102001F01FBA01F02EFA70 -:10E6F00008B10C2005E0287800F0010010F004F8C3 -:10E7000000202071012060713121E170207070BD06 -:10E7100058000020FFFFFFFF1F0000000607002039 -:10E7200010B5FB4C207828B13421BDE810401020F2 -:10E7300001F0FBB901F00AFA20B10FF0E8FF08B1CF -:10E740000C2002E00FF044FF0020207101206071D6 -:10E750003421E170207010BDED48017819B10F210E -:10E76000102001F0E2B900210171102181700F2108 -:10E77000C170FF2181714FF6FF710181E549496840 -:10E780000A7882728A8882814988C1810121417117 -:10E790000170704710B5DE4C207828B12B21BDE800 -:10E7A0001040102001F0C1B90821A01D05F029FA80 -:10E7B00000202071012060712B21E170207010BDBC -:10E7C00070B5D34C217829B1BDE8704043211020A9 -:10E7D00001F0ABB990F90000042816D0032814D03A -:10E7E00098B1011D11D010F1080F0ED010F10C0FCF -:10E7F0000BD010F1100F08D010F1140F05D010F14C -:10E80000280F02D01220207103E0002506F020F826 -:10E8100025714320E07001206071207077E710B50A -:10E82000BB4C217829B12A21BDE81040102001F00D -:10E830007CB9A31D012200F1100110F03AFE002066 -:10E8400020711020A0702A20E070012060712070DB -:10E8500010BD70B5AE4C0546207828B1BDE87040BB -:10E860004621102001F061B909F088FE052804D086 -:10E87000284609F01BFB002000E00C20207101203D -:10E8800060714621E170207041E770B5A04C0546EB -:10E89000207828B1BDE870404421102001F045B92E -:10E8A00001F054F938B10C2020710120607144212D -:10E8B000E17020702BE72946002006F04CFE002076 -:10E8C000F2E770B5924C0546207828B1BDE870405B -:10E8D0004221102001F029B909F091FB50B10AF052 -:10E8E000A2FF38B128780AF064FC287808F026F9ED -:10E8F000002000E00C202071012060714221E170B5 -:10E90000207004E770B5824C0546207828B1BDE838 -:10E9100070401721102001F008B901F017F938B143 -:10E920000C202071012060711721E1702070EEE64B -:10E930002946012006F00FFE0020F2E738B5744D9D -:10E940000446287828B1BDE838404D21102001F058 -:10E95000ECB8A079E179884213D021791F2910D829 -:10E9600061791F290DD80022114612F0C7FA40B96B -:10E970000022E079114612F0C1FA10B9207A072876 -:10E9800001D9122012E04FF6FF70ADF800000AF036 -:10E9900057FF90B909F0F2FD78B900216846FFF7FA -:10E9A000C9FC50B1204605F070FE002028710120FE -:10E9B00068714D21E970287038BD0C20F6E72DE90B -:10E9C000FC47534C054694F82E0020B12821112015 -:10E9D00001F0ABF89BE4282084F83000012184F892 -:10E9E0002E10A8784FF000091A2825D00EDC162822 -:10E9F00031D2DFE800F0303030303021303030308C -:10EA00003030303030303030302121212A2822D0AF -:10EA10000BDCA0F11E000C281DD2DFE800F01C1C4E -:10EA20001C1C1C1C1C1C1C1C1C0D3A38042812D25B -:10EA3000DFE800F0110211022888B0F5706F0AD2E9 -:10EA40001F20884684F82F0028886946FFF7BEFB00 -:10EA500018B1022019E0122017E09DF80000019F74 -:10EA6000002806D007F5B377019E05D106F1ED0623 -:10EA700004E007F1EC07F7E706F267166846FFF7D0 -:10EA800091FB08B1387818B10C2084F82F003EE4CF -:10EA900087F80080A878307084F82F90684601F0DD -:10EAA000AFF834E47CB51A4C0546207820B1252116 -:10EAB000102001F03AF87CBD28886946FFF786FBF4 -:10EAC000020013484FF00001A0F13E000DD00222D9 -:10EAD000227140F8461F0171E1801020A0702520AE -:10EAE000E0700120607120707CBD019A134658329D -:10EAF00082F83E109E68C0F846601E7B80F84A602F -:10EB000092F83E60002EF3D12888E080E5E700000F -:10EB1000060700205800002010B540B10478406876 -:10EB200013B1B0F8480003E0B0F84A0000E0FB2061 -:10EB30001B2908D3814206D8B2F5A47F03D340F63F -:10EB40004800824201D9122010BD002010BD2DE9DD -:10EB5000FC41FA4D0446287828B1BDE8FC4150211B -:10EB6000102000F0E2BF4FF0010885F805801F215A -:10EB700029711021A9705021E9702188E98085F858 -:10EB8000008020886946FFF721FB08B102200DE0D4 -:10EB90002289E18801236846FFF7BEFF30B9A288C9 -:10EBA000618800236846FFF7B7FF10B12871BDE800 -:10EBB000FC819DF800103A20019E002749B186F89B -:10EBC0008981019991F8C81106F5C476B9B1287107 -:10EBD00013E086F8FD80019991F82011FC36002998 -:10EBE000F5D12F71E08870802089B0806088F08036 -:10EBF000A0883081012201990CE07770D7E72F714E -:10EC0000E08870802089B0806088F080A0883081A2 -:10EC100001990022304610F091FD86F80080ECE763 -:10EC200070B5C64D044686B0287830B106B0512183 -:10EC3000BDE87040102000F078BF01206871002608 -:10EC40002E711021A9705121E9702870208803A924 -:10EC5000FFF7BCFA18B10220287106B057E59DF8FD -:10EC60000C0040B100220499E088B1F84830984285 -:10EC700003D9C01A02E00122F5E70020E88063888A -:10EC8000B1F84A00834201D9181A00E00020288117 -:10EC9000009601960296E088ADF802002089ADF852 -:10ECA00004006088ADF80600A088ADF8080068464A -:10ECB00010F044FD2089BDF80410401A6881A08836 -:10ECC000BDF80810401AA881E088BDF80210401A6B -:10ECD000E988884200DC0846E8806088BDF80610B4 -:10ECE000401A2989884200DC08462881B5E770B5BA -:10ECF000924D0446287828B1BDE870403E2110208E -:10ED000000F013BF00F022FF20B10FF000FD08B1AA -:10ED10000C2008E0E2792078611C0FF07BFE08B13E -:10ED2000002000E002202871012068713E21E97076 -:10ED30002870ECE47CB5814C05461F2084F82F0038 -:10ED400028886946FFF742FA18B1022084F82F009C -:10ED50007CBDAA7802B90322EB7803B903239DF89E -:10ED600000603A2501210020002E019E06D086F881 -:10ED70009311019E96F8DC6146BB1FE086F80711EF -:10ED8000019E96F82C613EB9019E96F806611EB967 -:10ED9000019E96F87B6016B184F82F500AE0019D21 -:10EDA00085F80611019981F80821019981F8093146 -:10EDB00084F82F00019981F807017CBD019E96F827 -:10EDC00092611EB9019E96F87B6016B184F82F50AF -:10EDD0000AE0019D85F89211019981F89421019929 -:10EDE00081F8953184F82F00019981F893017CBD59 -:10EDF000524930B491F82E2022B1562130BC112056 -:10EE000000F093BE562281F83020012281F82E2096 -:10EE10008378DA0802D1C278D40801D0122004E045 -:10EE20005B0701D4520704D5112081F82F0030BCB4 -:10EE3000704730BC7EE770B5404C0546207828B15D -:10EE4000BDE870401D21102000F06FBE1F20207112 -:10EE5000012060711D21E170207009F08FFB0428F2 -:10EE60000BD0052809D0A9791220012907D031B18A -:10EE7000022904D0032929D101E00C2026E02978B9 -:10EE800009B1012922D1E97929B1012903D0022947 -:10EE900001D003291AD1698843F6FD720B1F302077 -:10EEA000934213D2AB881B1F93420FD22187A888AD -:10EEB0006087A87907F065FDE87907F0D0FD28782C -:10EEC000012805D00120002107F0F8FD20711EE483 -:10EED0000220F8E770B5194C217829B1BDE87040DF -:10EEE0001E21102000F021BE1F212171012161711E -:10EEF0001E22E270217002781221012A00D01AB974 -:10EF0000407818B1012801D0217187E40025012A39 -:10EF100009D009F033FB0C26052802D008F008FFC1 -:10EF200088B126717AE407F022FD48B107F031FD7F -:10EF3000618F208F09F070F803E0000006070020C1 -:10EF4000122020716AE4257168E42DE9F047F94C3C -:10EF500007469246B4F84400B7F84A200E4690425D -:10EF600000D31046804697F85210104600F0D4FDAA -:10EF7000B4F84610814200D208460546A146B4F8CE -:10EF80004840B7F84800844200D3044697F851102F -:10EF900000F0C2FDB9F84A10814200D208464FF491 -:10EFA000A4721B2C01D0904204D1B8F11B0F0DD0DC -:10EFB00095420BD0A6F8068035817480B080524609 -:10EFC0003946304610F0BAFB01203070BDE8F087BA -:10EFD0002DE9F04786B00546AFF6C800D0E90090AD -:10EFE000D44E804696F82E0028B12121112000F041 -:10EFF0009CFD06B0EAE71F2086F82F00212086F846 -:10F0000030004FF0010A86F82EA0284600F007FED7 -:10F01000002811D109F0B2FA05280CD009F0AEFA97 -:10F02000042808D096F8340028B907F063FAA0F550 -:10F030007F41FF3901D00C20AAE0BE4801AA3E382A -:10F040000190BD480290BB4806211038039004A8E7 -:10F0500001F0D4FC04007DD003210FF0DAFFB6F8F4 -:10F060004E00A4F84800B6F85000A4F84A0096F8FC -:10F070004D00009096F84C30B6F85020B6F84E107F -:10F08000208801F07EFD00B1FFDF208806F0F3F953 -:10F09000218804F10E0000F068FDA8A004F1120719 -:10F0A000006800900321684604F033FD00206946A3 -:10F0B0000A5C3A54401CC0B20328F9D3288A608005 -:10F0C000688AA080A88AE08094F8522094F85110B1 -:10F0D000B6F8520009F01DF80146A062204609F07A -:10F0E00038F8002784F85E7084F85F70687900F063 -:10F0F000FDFC6076D5F80600C4F81A006889E08344 -:10F10000C4F8089084F80C8084F8F8A0012204F177 -:10F11000FC012046FFF719FF8DF8007001216846B9 -:10F1200004F0F7FC9DF8000000F00701C0F3C102F5 -:10F130001144C0F3401008448DF80000401D2076B3 -:10F14000092801D208302076002120460FF061FF07 -:10F15000287B00E010E007F014FC69792879AA1DEB -:10F1600007F0E5FB50B107F014FC69792879AA1D76 -:10F1700007F080FC78B118E0092009E0208806F04B -:10F180007BF92088062101F07BFC00B1FFDF122013 -:10F1900086F82F002DE72146032007F08FFC20B9C9 -:10F1A0006A882988204608F0C0FE86F82F000028CB -:10F1B000F0D0208806F060F92088062101F060FC7C -:10F1C0000028E7D0FFDF14E738B55A4C207820B18B -:10F1D0002221102000F0A9FC38BD1F20207101253C -:10F1E00065712220E070257094F8340018BB09F096 -:10F1F000C5F9052805D007F07DF9A0F57F41FF3955 -:10F2000019D000202071684608F055FF0028E3D18E -:10F210000098008806F030F900980621008801F077 -:10F220002FFC00B1FFDF444884F834500C380078DC -:10F23000FCF760FD38BD0C20207138BD2DE9F04190 -:10F240003C4D044695F82E0028B1BDE8F04123213D -:10F25000112000F06ABC1F2085F82F00232085F8BC -:10F260003000012085F82E00618840F67B438A1F1C -:10F2700030209A4252D2A288961F9E424ED291428C -:10F280004CD8E188B1F5FA7F48D2218940F677461B -:10F29000A1F10A03B34241D2B1EBD20F3ED9618949 -:10F2A000A28991423AD84FF000082088062101F047 -:10F2B000D5FB06004FF0020707D000F093FC20B109 -:10F2C000D6F8F000017841B903E085F82F70BDE869 -:10F2D000F081D6F83C11097809B13A201EE00521E9 -:10F2E0008171D6F8F0004146A0F80880D6F8F020E9 -:10F2F000A0885081D6F8F020E0889081D6F8F020E0 -:10F300002089D081D6F8F000028943899A4204D836 -:10F310008279082A01D89A4203D3122085F82F0057 -:10F32000D5E722884280D6F8F000077085F82F10C4 -:10F33000CDE7000006070020640000201122330002 -:10F34000FEB5F84C0646207820B12421102000F0AC -:10F35000ECFBFEBD012565712420E0702570304670 -:10F3600010F042F808B1002000E0122020710028BF -:10F37000EFD1EC4884F83C503E38316840F87B1FB0 -:10F3800031790171002684F83C606946062001F05D -:10F39000F0FA00B1FFDF684601F0C9FA60B9BDF8C4 -:10F3A0000470029880F8F850684601F0C0FA18B965 -:10F3B000BDF80400B842F4D12671FEBD2DE9F0413C -:10F3C000D84D064695F82E0028B1BDE8F0412C2115 -:10F3D000112000F0AABB1F2085F82F002C2085F8F3 -:10F3E0003000012085F82E003088062101F036FB20 -:10F3F000040007D000F0F6FB20B1D4F8F010087834 -:10F4000030B901E0022026E0D4F83C01007808B1D0 -:10F410003A2020E094200027005D10F0010F19D061 -:10F42000D6F802004860D6F80600886054F8F00F5D -:10F43000718910228181206806F10C010E3012F0D2 -:10F440005BFB21680320087021683088488085F8BC -:10F450002F703CE70C2085F82F0038E72DE9F041AC -:10F46000B04D04460C26287828B1BDE8F04118219B -:10F47000102000F05ABB0AF0E3F9012730BB607995 -:10F48000032824D8A179012921D8A17B03291ED8DA -:10F49000617BE1B107291AD82179052917D2DFE864 -:10F4A00001F0030C030303002288202A0FD3618894 -:10F4B0008A420CD8B1F5804F09D806F0D6F92079E8 -:10F4C00085F83600204606F098FA064600E0122637 -:10F4D0002E716F711820E8702F70F8E610B5914CFE -:10F4E000217829B11A21BDE81040102000F01DBB81 -:10F4F00001781F2902D91220207106E00021217114 -:10F500000278411C104606F0FCFA012060711A21B5 -:10F51000E170207010BD10B5824C217829B12021F6 -:10F52000BDE81040102000F000BB01781F2902D96F -:10F530001220207106E0002121710278411C104642 -:10F5400006F0CEFA012060712021E170207010BD1C -:10F550002DE9FC41734C217829B1BDE8FC411B2108 -:10F56000102000F0E2BA012767710C2121710078A8 -:10F5700000261225012802D0002866D167E006F097 -:10F5800024F900285ED006F056F900285AD00AF077 -:10F5900057F900286CD106F06FF994F8360050B195 -:10F5A000012808D0042806D0002009F005FE00B18B -:10F5B000FFDF26715CE006F0C9F8A0F57F41FF3956 -:10F5C00056D10022072101A801F018FA05004FD0FA -:10F5D00055480321856028460FF0E2FB284606F0D7 -:10F5E000BAFBB4F84E00A5F84800B4F85000A5F8EE -:10F5F0004A00B4F8520001214C3409F016FF0146CC -:10F60000A8620022284608F0CEFF6078009014F827 -:10F61000043B288834F8022934F84E1901F0B1FA75 -:10F6200000B1FFDF288805F026FF284609F0C4FD59 -:10F6300000B1FFDF2671002205F5C4712846FFF7EF -:10F6400084FC15E006F0C1F890B1257110E008F0D7 -:10F65000A7FF054609F0E8FC50B9267145B1288896 -:10F6600005F00AFF2888072101F00AFA00B1FFDF40 -:10F670001B20E0702770BDE8FC812DE9F041294C8A -:10F680000646207828B1BDE8F0412D21102000F079 -:10F690004CBA3088072101F0E1F905004FF001076D -:10F6A00020D095F8690140B995F86400142801D07C -:10F6B000152802D195F8AA0150B10C202071102014 -:10F6C000A0702D20E0703088E08067712770FEE523 -:10F6D0001022B11C05F5B57012F00EFA85F86971AB -:10F6E0000020EBE70220E9E770B50E4C05462078D4 -:10F6F00028B1BDE870402E21102000F016BA2888ED -:10F70000072101F0ABF90221A0B190F869212AB9D3 -:10F7100090F86420142A09D0152A07D00C202071F3 -:10F7200009E00000060700205800002080F8691159 -:10F730000020F4E721711020A0702E20E0702888AE -:10F74000E08001206071207070BD2DE9FC47FD4C08 -:10F750000646207828B13821102000F0E6F9BDE8EF -:10F76000FC8770884BF68032122190420AD848B14B -:10F770004FF0000830886946FEF728FD20B10220CE -:10F78000207110E021710EE0019800F15809851CEC -:10F790002F887288394648460FF0BCFA2888B8424C -:10F7A000F6D184F80480012060713821E170207066 -:10F7B000D5E77CB5E34C0546207820B149211020DF -:10F7C00000F0B3F97CBD28886946FEF7FFFC38B12C -:10F7D00002202071012060714921E17020707CBD00 -:10F7E00001987F22014680F8602080F86120002285 -:10F7F00080F86220A87801F82C0FE8784870287902 -:10F8000088702271E6E71CB5CE4C217821B15421D5 -:10F81000102000F08AF91CBD00886946FEF7D6FC6E -:10F8200048B102202071012060715421E170102143 -:10F83000A17020701CBD019890F8720000B10120E9 -:10F8400000212171A071EEE71CB5BE4C217821B1D9 -:10F850001321102000F069F91CBD00886946FEF7ED -:10F86000B5FC08B1022005E0019890F82C100129A0 -:10F8700002D00C20207106E0602100222271095C78 -:10F8800021720088E080012060711321E170102155 -:10F89000A17020701CBD2DE9F041AA4C05462078CE -:10F8A00028B1BDE8F0414A21102000F03EB9288877 -:10F8B000072101F0D3F8012358B382886D88C688E8 -:10F8C000418803EB4207BD4217D342F210777E43D3 -:10F8D000BF107943B6FBF1F1491E89B24FF4FA76B5 -:10F8E000B14200D931468D4200D22946491C521CF2 -:10F8F000B1FBF2F15143491E8AB290F8961101B959 -:10F900000284E2800020207163714A20E07023703D -:10F91000DDE40220F7E770B58A4C0546207828B16F -:10F92000BDE870404C21102000F0FFB82888072166 -:10F9300001F094F890B1A97811F0010180F8D71086 -:10F9400004D090F8D51009B109F08AFD002020718B -:10F95000012060714C21E170207070BD0220F6E73B -:10F9600078490A781AB15221102000F0DEB80278E6 -:10F970009AB142788AB142881B2A0ED382881B2A08 -:10F980000BD3C288022A08D36E4A0368423242F877 -:10F990000A3F40685060002000E0122008710120FA -:10F9A00048715222CA700870704770B5654C0546A0 -:10F9B000207828B1BDE870405321102000F0B5B880 -:10F9C000287800F0010008F0A1FB287800F0010081 -:10F9D00009F0F7FC00202071012060715321E170D3 -:10F9E000207070BD70B5574D0646287828B1BDE827 -:10F9F00070405521102000F098B8012270881146FF -:10FA000008F087FB04467088012109F00EFD84424E -:10FA100000D204463088012100F06FF8064601212B -:10FA2000002000F06AF8304401219630844206D963 -:10FA300000F19601201AB0FBF1F0401C81B2E98080 -:10FA400000202871012068715521E970287070BD6F -:10FA500070B53C4D0446287828B1BDE870404E2171 -:10FA6000102000F062B800F071F808B10C200DE031 -:10FA7000601C0EF0A5FF207800F0010005F0F8FEF4 -:10FA8000207800F0010006F080FF0020287101209E -:10FA900068714E21E970287070BD70B5294C05461B -:10FAA000207828B1BDE870404B21102000F03DB80F -:10FAB00009F0C6FE08B10C2003E0287806F031F802 -:10FAC00000202071012060714B21E170207070BD19 -:10FAD00010B50178572907D21B4A52F8211019B1E5 -:10FAE000801C8847012010BD002010BD18B10228DD -:10FAF00001D0012070470020704710B5012904D0C3 -:10FB0000022905D0FFDF204610BDC000503001E0C3 -:10FB100080002C3084B2F6E7022903D0C000703098 -:10FB200080B2704780003C30FAE7064A92F83130E4 -:10FB3000002B06D182F8320082F83310012082F8BF -:10FB40003100704706070020C420020010B508F0FD -:10FB500015FD042807D008F011FD052803D009F091 -:10FB60006FFE002800D0012010BD2DE9FE430025C6 -:10FB70000F4680460A260421404604F042F84046DB -:10FB80000FF00EFC062000F013FF044615E0694656 -:10FB9000062000F0EEFE0AE0BDF80400B84206D0F0 -:10FBA0000298042241460E3011F07AFF50B16846A7 -:10FBB00000F0BDFE0500EFD0641E002C06DD002D18 -:10FBC000E5D005E040460FF0F4FBF5E705B9FFDFAF -:10FBD000D8F800000FF0A8F8761E01D00028CAD08F -:10FBE000BDE8FE8390F8721041B990F8C81029B1B1 -:10FBF00090F8C800042801D00120A2E70020A0E767 -:10FC0000017801299DD1416891F8D520002A98D02A -:10FC1000002281F8D520406809F022BC91E710B598 -:10FC2000038843F6FD711A1F8A4223D24288141FAB -:10FC30008C421FD29A421DD8C28940F67B43911F45 -:10FC4000994217D2018A8C1F9C4213D28A4211D842 -:10FC5000428AB2F5FA7F0DD2828A40F67744A2F149 -:10FC60000A03A34206D2B2EBD10F03D9C18A028B99 -:10FC7000914201D9302010BD017911B1012910D173 -:10FC800007E0417929B1012903D0022901D00329D4 -:10FC900007D1007B38B1012805D0022803D0032802 -:10FCA00001D0122010BD002010BD00000844083013 -:10FCB000424301F14A00104480B27047F0B51D463E -:10FCC0000446A818059B083000FB03F205F14A0022 -:10FCD000104486B2B14238BFFFDF0027276067605B -:10FCE000A760E76027616761A761E76127624FF658 -:10FCF000FF706762A082A6F1280080B265776080FD -:10FD0000B0F5004F88BFFFDF608805F13C018842F5 -:10FD100038BFFFDF6088401B3C3880B220801B2842 -:10FD200038BF1B202080A777F0BD816188617047B4 -:10FD30002DE9F04F0D46C188044600F128080089DE -:10FD400021F4004320F4004221F4004620F400474F -:10FD50004FF0010A4FF000099A4208D100F4004028 -:10FD600001F4004188421CBF0020BDE8F08FB7427B -:10FD70000BD9617FB81B401A083885421BDC08EBA1 -:10FD800006000021058041801EE06088617F801BA5 -:10FD9000401AB0F1080B0ED4BBF11B0FB8BFFFDF48 -:10FDA0005D45D4BF29461FFA8BF1681A0204120C74 -:10FDB00018BFBA4204DD84F817900020BDE8F08F28 -:10FDC00008EB06000180428084F817A0BDE8F08FA0 -:10FDD0002DE9F041044600F12802C08820F40043D8 -:10FDE000E07D002808BFBDE8F081D0180288438874 -:10FDF00013448B423CBF0020BDE8F08100279142B4 -:10FE00009CBF0180478013D9891A0D042D0C4580B1 -:10FE10000ED0E088A61D20F40040854288BFFFDF99 -:10FE200030884FF4004121EA0000284330800AE086 -:10FE3000627F008802F108031044083081B26288B2 -:10FE4000A01D00F0A8FBE7750120BDE8F08130B4EB -:10FE5000B0F804C0C488034600F128052CF4004023 -:10FE60002844A44503D10020188230BC7047B3F861 -:10FE70000CC00488A44509D34088ACEB040CA0EB6B -:10FE80000C0084B20CEB0500C01E06E0A4EB0C04D1 -:10FE90005D7FA4B2AC446044401DB1F800C0A445ED -:10FEA00088BF0C80B3F80CC0BCF1000F0CBF4FF042 -:10FEB000010C4FF0000C82F800C00988198230BC98 -:10FEC00070472DE9F041044600F12801808820F4B4 -:10FED00000404518208A002808BFBDE8F081A089AD -:10FEE00010B9A069807F2871A089218A084480B256 -:10FEF000A08129886A881144814238BFFFDF2888A1 -:10FF00006D88A2894119002791421AD175B1A08844 -:10FF1000261D20F40040A84238BFFFDF30884FF490 -:10FF2000004121EA00002843308009E0627F10444C -:10FF3000083081B202F108036288201D00F02BFB1B -:10FF4000A78127820120BDE8F0812DE9F047418992 -:10FF5000B0F804800027044600F1280A414518BF84 -:10FF60004FF400493AD000BF21F400405044468885 -:10FF70006EB1608904F10A0520F40040B04238BF38 -:10FF8000FFDF288829EA00003043288021E0637FD2 -:10FF9000008803F1080C18446389083023F40045F5 -:10FFA0006288284480B204F10A0190420BD2121AEE -:10FFB00092B20CF11B0C62452CBF03F4004229EAFB -:10FFC000030004D204E0801A80B229EA030210433D -:10FFD0000880781C618987B24145C5D13846BDE8A3 -:10FFE000F0872DE9F047B0F808800B46044600F191 -:10FFF0002801B0F80A90808828F4004C01EB0C0529 -:020000040001F9 -:10000000804504BF0020BDE8F087002A1CBF681DA2 -:10001000106023B1627F691D184611F06DFD2F88B5 -:100020006D888DB1E81987B2208904F1080620F4A3 -:100030000040A84238BFFFDF30884FF4004121EA7A -:100040000000284330800AE0607F6288C1190831CF -:1000500000F1080389B204F1080000F09CFAC845D9 -:1000600004BF208960813846BDE8F0878188C08858 -:1000700081420CBF012000207047018980888142A5 -:100080000CBF01200020704730B48488C28800F182 -:10009000280324F4004C22F40041634494421BD012 -:1000A0008289048A15191C885A88A3189D4216D380 -:1000B00012B18A4210D212E0437F0CF1080C1A19D7 -:1000C0006244408892B2801A80B22333984201D2AF -:1000D00011B104E08A4202D130BC0020704730BC2C -:1000E000012070472DE9F007B0F806C0048900F13F -:1000F000280702462CF400457E1924F400492CF40C -:10010000004A002024F400434FF00108D1450AD1F1 -:1001100004F400440CF4004C644504D05082BDE863 -:10012000F00700207047AB4208D992F81DC05B1B56 -:10013000A3EB0C03A3F10804002308E0B2F802C00B -:10014000547FACEB050CACEB040CACF10804002CB8 -:10015000E4DBB2F80EC0BCF1000F0DD0B6F800C061 -:1001600075884DB15B1B10778B42D7DBD089384443 -:10017000A0EB0C00C01E09E0A4EB0C0410778C422D -:1001800008DB507FD38918443044401D5182BDE8BC -:10019000F00770478B42A8BF82F81C80E6DABDE703 -:1001A0002DE9F05F044600F1280AC088934620F448 -:1001B00000400AEB0005608A894608B1484502D232 -:1001C0000020BDE8F09FE08980B1B5F800806E881E -:1001D00008EB0601884218BFFFDF207F4FF00007C1 -:1001E00050EA060108D0002840D04AE04FF000084D -:1001F000A17F46462971F0E7E08948B1617F01445B -:100200004819B4F81F10A0F8051094F82110C17116 -:10021000E18908EB09004944E18128806F80BBF146 -:10022000000F19D0607F298800F1080301440831CC -:1002300089B26288A01D00F0AEF9E781A07F401C62 -:10024000A077A07D00281CBFE088A082A7756782E8 -:10025000E7750120BDE8F09F607FE18908442844EC -:10026000B0F80510A4F81F10C0792EE0E089B4F8AA -:100270001F105044A0EB080020F8031D94F8211033 -:10028000817006EB090086B2E089BBF1000F48449B -:10029000E081A5F800806E800ED0E088A51D20F4D6 -:1002A0000040B04238BFFFDF28884FF4004121EA08 -:1002B000000030432880C0E7E0895044A0EB0800EC -:1002C00030F8031DA4F81F10807884F82100BEE7E1 -:1002D000818800F1280221F4004C6244B0F814C077 -:1002E000C388614518BF99420FD0818969B9806977 -:1002F00068B101898388994209D021F400412830EE -:10030000084411790079884201D1002070471046D5 -:10031000704700F12803407F01F1050C6044106034 -:100320000888002804BFD81E10600888498808443F -:1003300080B270472DE9F04115460A4600F12806C3 -:100340001C46407F531D0344108857880699002897 -:100350001CBFC01C80B226D088429CBF081A80B245 -:1003600013D9401AA042A8BF20461FFA80F8581897 -:100370004246294611F094FB002818BFBDE8F081E1 -:100380004544A4EB080084B2002001198F423CBF11 -:100390004FF0FF30BDE8F081304422462946BDE8E9 -:1003A000F04111F07DBBFA1C97B2F61ED4E72DE99F -:1003B000F04100F128071D46407F4B1D03441646BF -:1003C00008880024B1F80280069A00281CBFC01CCF -:1003D00080B21FD090429CBF101A80B20DD9801AF3 -:1003E000A842A8BF284684B299182246304611F088 -:1003F00083FB281B85B2264400204119414506D8BD -:1004000039182A46304611F077FB601984B220462D -:10041000BDE8F08108F103011FFA81F8FF1ED9E75A -:100420002DE9F04116460A4600F128071D46407F97 -:10043000531D034410880024B2F802800699002856 -:100440001CBFC01C80B21FD088429CBF081A80B25B -:100450000DD9401AA842A8BF284684B2581822468F -:10046000314611F049FB281B85B226440020411972 -:10047000414506D838442A46314611F03DFB601903 -:1004800084B22046BDE8F08108F103021FFA82F829 -:10049000FF1ED9E7401D704770B5044600F12801E2 -:1004A000C288808820F400431944904208D0A28971 -:1004B000002A04BF228A002A02D1A28A904201D1D6 -:1004C000002070BDB1F800C04D8885B1261D20F414 -:1004D0000040A84238BFFFDF30884FF4004121EAD6 -:1004E00000002843308000202082012070BD607F02 -:1004F0000CF1080100F10803084481B26288201D54 -:1005000000F049F8EFE70021C18101774182C17510 -:100510008175704703881380C289002A04BF0020B8 -:100520007047C28800F1280322F400421A440A608E -:10053000C089704710B50446808AA0F57F41FF3915 -:1005400018BFFFDFE088A082E089002818BF0120E3 -:10055000A07510BD4FF6FF71818200218175704733 -:1005600010B50446808AA0F57F41FF3908BFFFDF40 -:10057000A07D28B9A088A18A884204BF002010BDB0 -:10058000012010BD8188828A914205BF807D0028AC -:1005900000200120704710B4B0F800C02CF40044D3 -:1005A000214489B24FF4004491420AD2521A92B2C5 -:1005B0001B339A422CBF0CF4004224EA0C0104D2F3 -:1005C00004E0891A89B224EA0C021143018010BCAC -:1005D000704770B516464FF6FC72C91C01EA020559 -:1005E000D8B10446C01C20F00301A14200D0FFDFB7 -:1005F000201D012108E00246284401D2034600E004 -:100600000023491CC9B21360B142F4D916B104F1F8 -:10061000040001E04FF00000206005FB06F000F14F -:10062000040070BD024600201168002902D008466F -:1006300009681160704702680A60016070474FF6F0 -:10064000FC73C91C1940101A001F90FBF1F0C0B2D6 -:1006500070474FF6FC73C91C1940001D01FB0200D6 -:10066000704770B50C00054609D0082C00D2FFDF9A -:100670001DB1A1B2286800F044F8201D70BD0DB175 -:1006800000202860002070BD0021026803E09388EC -:100690001268194489B2002AF9D100F032B870B555 -:1006A00000260D460446082900D2FFDF206808B95D -:1006B0001EE0044620688188A94202D00168002912 -:1006C000F7D181880646A94201D100680DE005F105 -:1006D000080293B20022994209D32844491B0260C0 -:1006E00081802168096821600160206000E00026A7 -:1006F000304670BD00230B608A8002680A6001608A -:10070000704700234360021D018102607047F0B50D -:100710000F460188408815460C181E46AC4200D38F -:10072000641B3044A84200D9FFDFA019A84200D9B9 -:10073000FFDF3819F0BD2DE9F041884606460188F3 -:10074000408815460C181F46AC4200D3641B384441 -:10075000A84200D9FFDFE019A84200D9FFDF708866 -:100760003844708008EB0400BDE8F0812DE9F041C9 -:10077000054600881E461746841B8846BC4200D3A7 -:100780003C442C8068883044B84200D9FFDFA0196F -:10079000B84200D9FFDF68883044688008EB040065 -:1007A000E2E72DE9F04106881D460446701980B243 -:1007B000174688462080B84201D3C01B208060883D -:1007C000A84200D2FFDF7019B84200D9FFDF60886D -:1007D000401B608008EB0600C6E730B50D46018877 -:1007E000CC18944200D3A41A4088984200D8FFDF66 -:1007F000281930BD2DE9F041C14D04469046A87836 -:100800000E46A04200D8FFDF05EB8607B86A50F815 -:10081000240000B1FFDFB868FFF704FF05000CD02B -:10082000B86A082E40F8245000D3FFDFB54842468E -:10083000294650F82630204698472846BDE8F081E2 -:100840002DE9F0471E460400074602EB06009146DC -:100850008A46C5B227D000218846FF2800D9FFDF8D -:10086000E01C20F00300A04200D0FFDFB24500D919 -:10087000FFDFA34880F800A080F801908570C57064 -:10088000057145718671DFF87CA280F8079000261B -:100890000AF1400A8146FF1C27F003000746B8F121 -:1008A000000F03D005E04FF00101D5E709EB860109 -:1008B00088603AF8161019F8062001D04FF00000B1 -:1008C000FFF787FE761CF6B20744082EE3D3FF1C21 -:1008D00027F003002A460646B8F1000F0DD000208D -:1008E0000221FFF776FE4346002130440F46C846FA -:1008F000C01C20F003021BB110E0C9F84800EFE76C -:1009000008EB81060020B26206E000BFD6F828C0DE -:100910004CF82070401CC0B2A842F7D3491CC9B2A1 -:1009200002EB85000829E3D3001BBDE8F08710B572 -:10093000044603F0BBFC08B1102010BD2078704ABB -:10094000618802EB800092780EE0836A53F82130D0 -:1009500043B14A1C6280A180806A50F82100A060E7 -:10096000002010BD491C89B28A42EED86180052062 -:1009700010BD70B505460C46084603F097FC08B15B -:10098000102070BD082D01D3072070BD25700020F8 -:10099000608070BD0EB56946FFF7EBFF00B1FFDF69 -:1009A0006846FFF7C4FF08B100200EBD01200EBD50 -:1009B00010B50446082800D3FFDF5148005D10BD84 -:1009C0003EB5054600246946FFF7D3FF18B1FFDFA7 -:1009D00001E0641CE4B26846FFF7A9FF0028F8D0E4 -:1009E0002846FFF7E5FF001BC0B23EBD44498978A9 -:1009F000814201D9C0B27047FF2070472DE9F04114 -:100A000090460C460546062901D0072C10D13C4FD4 -:100A1000B86CFFF707FE02004FF6FF7604D0022104 -:100A2000B86CFFF70CFE00E030462880B04201D1E0 -:100A3000002003E742462146FFF7DCFE040002D116 -:100A4000288800F04FF82046F8E6A0F57F43FF3BEA -:100A500001D0082901D300207047CBE6A0F57F42E2 -:100A6000FF3A0BD0082909D2254A9378834205D949 -:100A700002EB8101896A51F820007047002070471D -:100A80002DE9F04105460C46A5F57F4143F20200F1 -:100A9000FF3902D0082C01D30720CFE618494FF0C8 -:100AA00000088A78AA42F8D901EB8406B26A52F8A3 -:100AB0002570002FF1D013483946203050F82420FB -:100AC00028469047B16A062C41F8258001D0072CB2 -:100AD00002D1284600F006F83946B068FFF7ABFDB2 -:100AE0000020ABE610B5064CC2B20221A06CFFF7A5 -:100AF000B0FD0146A06CBDE81040FFF79CBD0000B2 -:100B0000600700202022020070B50E461D461146E7 -:100B100000F0D4F804462946304600F0D8F82044C6 -:100B2000001D70BD2DE9F04190460D4604004FF0C8 -:100B3000000610D00027E01C20F00300A04200D0E7 -:100B4000FFDFDDB141460020FFF78BFD0C3000EBED -:100B5000850617B112E00127EDE7614F04F10C00A3 -:100B6000A9003C602572606000EB85002060606831 -:100B700011F05BF841463868FFF773FD3046BDE879 -:100B8000F0812DE9FF4F564C804681B020689A468F -:100B9000934600B9FFDF2068027A424503D94168D5 -:100BA00051F8280020B143F2020005B0BDE8F08FF3 -:100BB0005146029800F082F886B258460E9900F02D -:100BC00086F885B27019001D87B22068A1463946A3 -:100BD0000068FFF764FD04001FD067802580294668 -:100BE000201D0E9D07465A4601230095FFF766F823 -:100BF0002088314638440123029ACDF800A0FFF73F -:100C00005DF82088C1193846FFF78FF8D9F8000041 -:100C10004168002041F82840C7E70420C5E770B5C7 -:100C20002F4C0546206800B9FFDF2068017AA942F1 -:100C30000ED9426852F8251051B1002342F82530F0 -:100C40004A880068FFF756FD216800200A7A08E00C -:100C500043F2020070BD4B6853F8203033B9401C9A -:100C6000C0B28242F7D80868FFF70EFD002070BDC1 -:100C700070B51B4E05460024306800B9FFDF3068B0 -:100C8000017AA94204D9406850F8250000B1041D3A -:100C9000204670BD70B5124E05460024306800B97C -:100CA000FFDF3068017AA94206D9406850F8251064 -:100CB00011B131F8040B4418204670BD10B50A4636 -:100CC0000121FEF7F3FFC01C20F0030010BD10B59A -:100CD0000A460121FEF7EAFFC01C20F0030010BD08 -:100CE0006C00002070B5044600780E46012813D031 -:100CF000072802D00B2813D10EE0A068616905789F -:100D0000052003F061FA052D0AD078230022052082 -:100D1000616903F0AFF903E00520616903F054FA5B -:100D200031462046BDE8704001F0A8B910B500F189 -:100D30003902C3799478411D64F003042340C371E0 -:100D4000DB070DD04B79547923404B710B79127925 -:100D500013400B718278C9788A4200D9817010BD26 -:100D600000224A710A71F5E74178012900D00C216F -:100D7000017070472DE9F74F88B000208C698DF81D -:100D800004000878012617460D464FF007094FF07A -:100D9000110A4FF00A0B292876D2DFE810F029005B -:100DA000D20215032D036F037E039903C703DC03EF -:100DB0000604330457047004AE04BF04E204EA04DA -:100DC0000A052C0557057A05A605C605D605F605BC -:100DD000F805050637065906AD06EA06EC061B07B8 -:100DE0003B074407550792071B08410808080D08F0 -:100DF00014B120781E2829D0D5F808805FEA0800B1 -:100E000042D001208DF80400686A02228DF8082083 -:100E100006908DF809B0286A0390A8880028EFD0C2 -:100E200098F8001091B10F2910D27DD2DFE801F0BF -:100E30007C134BDCFEFDFCFBFAF9F8089EF7F6008C -:100E4000022821D124B120780C2801D00026F9E312 -:100E50008DF80420B3E10520696A03F0B5F9A8888C -:100E60000728EED1204601F003F9022809D02046D8 -:100E700001F0FEF8032808D9204601F0F9F8072808 -:100E800003D20120207005E003E2002CB8D02078C6 -:100E90000128D6D198F80400C11F0A2903D300BF46 -:100EA00085F81CB04CE2A070D8F80010A163B8F827 -:100EB0000410A18798F8060084F83E0001202870ED -:100EC0000320207046E00728BBD1002C98D0207862 -:100ED0000D28B6D198F8031094F83B20C1F3C00058 -:100EE000C2F3C002104201D0062000E007208907AB -:100EF00007D198F805100142D2D198F806100142A6 -:100F0000CED194F83D2098F8051020EA0202114253 -:100F1000C6D194F83E2098F8061090430142BFD104 -:100F200098F80400C11F00E008E20A29B8D2617FE6 -:100F3000814201D906209AE3D8F800106160B8F820 -:100F40000410218198F80600A072012028700E205C -:100F5000207003208DF80400686A069004F13900BF -:100F60000290601D039017300490DBE0412890D17F -:100F7000204601F07DF8042802D1E078C00704D1B2 -:100F8000204601F075F80F289ED1A88CD5F80C806A -:100F900080B24FF04009666AFFF76AFE32460826C3 -:100FA00041464B460096FFF702FA0D208DF80400EB -:100FB000686A0690606A0290002101A8FFF792FE1D -:100FC0002078042808D0A07F48B1012807D0032842 -:100FD00008D0102020709CE005202070CEE184F81D -:100FE00000A033E71220F5E71128C0D1204601F018 -:100FF0003FF8042802D1E078C00719D0204601F05C -:1010000037F8062805D1E078C00711D1A07F022863 -:101010000ED0204601F02CF8112808E0B3E083E060 -:1010200072E156E136E109E1EAE0D0E017E09ED155 -:10103000102208F1010104F1480010F05DFD607814 -:10104000012809D012202070E078C00765D0A07F69 -:1010500090B301285DD060E084F8009059E0112839 -:1010600085D1204601F004F8082804D0204600F07D -:10107000FFFF132888D12869D0B16869C0B104F195 -:101080007800102208F10101064610F035FD2078A5 -:10109000082812D014202070E078C0070FD0A07F5D -:1010A000022818D06178022912D0032831D034E008 -:1010B00000208DF80400ECE02BE00920EBE70B208A -:1010C0002870296901204870206CC1E9010662E29C -:1010D00008B101287AD10B202870296981F8019084 -:1010E000606A4860206AC1E9020648E2206CE27842 -:1010F0000068C2F34402521ED04000F0010040F0EC -:10110000800000E000200874E06A48614CE2064676 -:10111000FEE3042028700520BAE185F800B08DF8C0 -:1011200004B08EE33946F4E31128C4D1204600F020 -:101130009FFF0A2802D1E078C00704D1204600F0C2 -:1011400097FF1528B7D1102208F1010104F14800DA -:1011500010F0D2FC20780A2810D01620207012201F -:10116000287029690920487004F15800486020302F -:1011700088601038C860206C086184E30B20207000 -:10118000B9E22870FEE3022895D1204600F070FFF6 -:10119000042804D3204600F06BFF082809D320461A -:1011A00000F066FF0E2886D3204600F061FF12286B -:1011B0006FD2A07F0228B8D110208DF80400686A91 -:1011C000069098F801008DF80800F6E33DE2022849 -:1011D000ABD1204600F04CFF00285AD0204600F04A -:1011E00047FF0128F9D0204600F042FF0C28F4D038 -:1011F00004208DF8080098F801008DF809005AE7DE -:101200001128FCD1002CFAD020781728F7D161786A -:10121000E06A022910D0002101EB4101182606EBFB -:10122000C1011022405808F1010110F065FC0520B1 -:10123000696A00F010FF1DE10121EDE70B28DED106 -:10124000002CDCD020781828D9D16178E06A0229F6 -:101250001BD0002101EB4101102202EBC1014158DA -:10126000B8F8010008806078E16A02280FD00020F9 -:1012700000EB4002142000EBC2000958404650F831 -:10128000032F0A604068486039E00121E2E701204D -:10129000EEE7A1E11128B2D1002CB0D020781928B6 -:1012A000ADD16078E16A022811D0002000EB400245 -:1012B0001C2000EBC2001022085808F1010110F0B8 -:1012C0001BFC0520696A00F0C6FE1A20D4E001204C -:1012D000ECE7082893D1002C91D020781A288ED1E1 -:1012E000E06A98F80120017862F347010170E16A31 -:1012F000D8F8022041F8012FB8F8060088800520B0 -:10130000696A00F0A8FE3CE3112898D1002C98D01F -:1013100020781B2893D16178E06A02290CD0002143 -:1013200001EB4101202202EBC1011022405808F1DB -:10133000010110F0E1FBE2E70121F1E785F81C90E3 -:10134000EFE338780128A6D11C2204F11C0079684B -:1013500010F017FCE079C10894F83B0001EAD001D5 -:10136000E07861F30000E070217F09B1297733E173 -:10137000217803290AD0C0073FF42DAE032028703E -:101380008DF804B0686A06904120B1E3607FA178CF -:1013900088423FF6CFAD02262671E179204621F042 -:1013A000E001E171617A21F0F0016172A17A21F02E -:1013B000F001A172FFF7BAFC2E708DF804B0686AD4 -:1013C00006908DF80890ADE638781128CFD18DF8C9 -:1013D0000490696A0691916800208DF814000391C9 -:1013E000ADF8089008466168016021898180A17A82 -:1013F000817104202070E0E238781128B7D18DF88F -:101400000490686A0690381D02AB07C883E807009D -:101410004120ADF8080000208DF8140008460C218A -:101420000170A88CCA4680B2FE684FF04009D4F81B -:101430002080FFF72FFC3146082642464B46009697 -:10144000FEF7EEFF002101A8FFF74CFCE07820F04A -:101450003E00801CE0702078052801D00F200BE0B2 -:10146000A07F20B1012802D0032803D03DE184F8F9 -:1014700000A04EE62670E9E42070E7E438780328FF -:10148000A4D178680168A1664068E06605202870EC -:101490008DF80400686A069044E63878032895D1F0 -:1014A00078680168216740686067206C68B9A07F30 -:1014B00028B1012803D0062028700420E8E785F829 -:1014C0000090FE4820646064F9E385F80090F6E33C -:1014D0003878022892D1387900287CD1A07F022860 -:1014E0000BD00328F1D1607801280BD0A07994F8B3 -:1014F0003A1001280AD0F1480BE0B86800286BD0F8 -:10150000206411E0A17994F83A00F2E7B868002865 -:10151000F5D02064E078C00701D0012901D0E74868 -:1015200002E0F8680028EAD06064CEE78DF804B0E5 -:10153000696A0691E1785846C90709D0617802299D -:1015400003D1A17F29B1012903D0A17F032900D0B4 -:101550000820287064E33878112891D1B86828628F -:1015600009202870E0782969C0070DD081F8019022 -:10157000206A4860606A886004F16800C860A07FE3 -:1015800002287FF4BFADB1E501204870206C4860AF -:1015900004F16800886004F13800C860201D08610B -:1015A000206B4861606B88612AE2E1783878C9076E -:1015B00001D0062100E00A2188428BD1207807283B -:1015C0001DD084F800A000BF8DF80490686A0690D2 -:1015D000286A039001E0CAE08DE20024ADF808A07B -:1015E0008DF81440032100F8011B5168102210F0FF -:1015F00083FA002101A8FFF775FB2C6226E408207E -:101600002070E1E738781128A7D18DF80490686A36 -:1016100006909068039000208DF814000398ADF8B0 -:1016200008A0042100F8011B102204F1680110F049 -:1016300063FA002101A8FFF755FB2078092802D0A2 -:10164000132019E73CE384F800B016E0E17838781D -:10165000C90701D0062100E00A218842ADD110223D -:1016600004F14800796810F01BFA10B104202877C3 -:10167000EAE3207809283FF4EEAC0C2081E5E0781D -:10168000C10738D0A17F012902D002291BD02EE04A -:101690000D202870296981F801B06078012809D0EF -:1016A000206A4860606A886004F16800C860103091 -:1016B000086129E5606A4860206A886004F1780062 -:1016C000C8601038F4E7C0F3440114290FD24FF07A -:1016D000006101EBB0104FEAB060E0706078012863 -:1016E00003D010202070042057E10620C4E6607863 -:1016F00001283FF476AC0E2043E538780928ADD1B7 -:1017000085F800B00F208DF80400686A06905068D4 -:101710000290002101A8FFF7E5FAE8E7E078C007AA -:101720000AD0A07F012803D10F202870042036E1C1 -:10173000102028700E2032E115202870296902201F -:101740004870206C48606078012805D004F178006A -:1017500088601038C86053E104F168008860103078 -:10176000F8E738780228CAD138790028E0D02877FD -:1017700068E338781328FBD185F800A02969082090 -:10178000487078684860607801280DD004F16800DE -:1017900088601030C860206B0861606B486104F19C -:1017A00058008861A06A22E004F17800886010384F -:1017B000F0E738780728DBD16078012801D01320C2 -:1017C00029E2A178A06A0844C1F1100110F00BFAD7 -:1017D0001220287029690920487004F158004860D7 -:1017E000203088601038C860206C086144E0C8610F -:1017F000E06A086204E138780828B9D1102204F1BF -:101800004800796810F04CF908B10B202FE72078D8 -:101810000B2812D02046FFF789FAA178A06A084465 -:10182000C1F1100110F0DFF91620287008208DF8A2 -:101830000400686A0690002072E0132028708DF87A -:1018400004B0686A06908DF808A06BE43878112817 -:101850008ED1B86828621420287029690920487040 -:1018600004F158004860103088601030C860606C27 -:1018700008616078012806D004F139004861206BC6 -:101880008861606BB3E7601D4861606B8861206BA5 -:10189000ADE7387808288ED18DF80490686A0690F4 -:1018A000286A00260D210390ADF808A08DF8146079 -:1018B00000F8011B1022796802E000007423020086 -:1018C00010F01AF9002101A8FFF70CFA2E626078D7 -:1018D000012801D01520CFE51620287008208DF8AA -:1018E0000400686A029606901BE038780B2884D1C1 -:1018F000162028706078022802D12046FFF716FAD9 -:10190000A17878680844C1F1100110F06CF901E089 -:1019100083E215E008208DF80400686A0690786874 -:101920000290A0788DF80C004DE538780F288FD103 -:10193000E079C00773D01720287009202FE01146E6 -:1019400001A8FFF7CFF9FFF7E2BB38781028A2D142 -:101950001422391D04F11C0010F013F9E16A208DE6 -:10196000A1F80900E16AA078C871E179E26A01F0A2 -:1019700003011172E16A627A0A73E16AA07A81F85E -:10198000240000E09BE1242078E6192043E1387828 -:101990001128ACD1B86828621A20287005208DF86B -:1019A0000400686A0690CAE7387803289FD16078F7 -:1019B000E16A022802D0012001E05CE2002000EB95 -:1019C0004002142000EBC2027B688A58196811603B -:1019D000596851601B212970D5E9041205234B7009 -:1019E000636A4B606678E36A022E01D0012600E04C -:1019F000002606EB460600EBC6001858C1E90202B5 -:101A0000686A4862089800F050FB9CE738780E2816 -:101A100071D16078E26A022802D0012001E0ADE1D4 -:101A2000002000EB4001102000EBC1000223105801 -:101A3000093279680EF01EFB1C20287029690420E9 -:101A40004870206A4860E06A09308860FB4881E697 -:101A500038780D284FD16178E06A022901D0012140 -:101A600000E0002101EB4101182606EBC101A2783C -:101A70004058796810F040F86078E16A022801D097 -:101A8000012000E0002000EB400206EBC200B0465F -:101A90000858A1780844C1F1100110F0A4F88DF89D -:101AA0000490686A0690286A00260390ADF808A0A2 -:101AB0008DF81460062101706178E26A022901D074 -:101AC000012100E0002101EB410308EBC301401CB0 -:101AD0005158102210F010F8002101A8FFF702F968 -:101AE0001D202E6228708DF804B0686A06900B20C5 -:101AF0008DF8080067E481E0387811287ED18DF8F0 -:101B00000490686A0690B86803900B20ADF808004E -:101B1000039880F800906278E16A022A02D00122DC -:101B200001E091E1002202EB4202102303EBC2022A -:101B300089580988A0F801106178E26A022901D069 -:101B4000012100E0002101EB4103142101EBC3015D -:101B500051580A6840F8032F4968416056E0272031 -:101B6000287001208DF814002DE424202870002016 -:101B70009FE01F204FE0387811283FD18DF8049066 -:101B8000686A0690B868039000208DF814000398E6 -:101B9000ADF808A0082606706178E26A022901D033 -:101BA000012100E0002101EB41031C2101EBC301F5 -:101BB000401C515810220FF09FFF002101A8FFF791 -:101BC00091F8202028708DF804B0686A06908DF88E -:101BD000086061E43878112810D18DF80490686AA3 -:101BE0000690B86803900820ADF808000398092112 -:101BF0000170E16909784908417000E094E0E16909 -:101C000051F8012FC0F802208988C18020781D2852 -:101C1000ABD1A4E7222028708DF804B0686A069042 -:101C20008DF808A08BE6387811287DD1B868286235 -:101C300023202870296904204870206A4860E06ADF -:101C4000093088607E4885E538780D286CD1617848 -:101C5000E06A022901D0012100E0002101EB4101ED -:101C6000202606EBC1011022405879680FF044FF8E -:101C70008DF80490686A0690286A0390ADF808A071 -:101C800080F800B06278E16A022A01D0012200E007 -:101C9000002202EB420206EBC202401C89581022CD -:101CA0000FF02AFF0020286221781D29B1D02421BD -:101CB00029708DF81400002101A8FFF713F80326FE -:101CC000DFE0E078C00702D04FF0060C01E04FF0F3 -:101CD000070C6078022809D04FF0000000EB0401E7 -:101CE00001F1090105D04FF0010004E04FF00100BF -:101CF000F4E74FF000000B78204413EA0C030B705C -:101D000010F8092F02EA0C02027004D14FF01C0CEB -:101D100084F800C092B394F801C0BCF1010F00D068 -:101D2000E3B990F800C000E053E05FEACC7804D05B -:101D30002CF00106067018260EE05FEA8C7804D5B8 -:101D40002CF0020606701E2606E05FEA4C7805D5E8 -:101D50002CF00406067021262E70032694F801C08C -:101D6000BCF1020F00D0DAB991F800C05FEACC787C -:101D700005D02CF001060E7017210FE01AE05FEA83 -:101D80008C7804D52CF002060E70192106E05FEA6B -:101D90004C7805D52CF004060E701B21217000260E -:101DA0000078D0BBCAB3C3BB1D20207035E03878A3 -:101DB000122847D1282061E42078012842D00C283D -:101DC00040D02046FEF7D0FF0B208DF80400686A53 -:101DD000069037E038784FF02608112805D01220F9 -:101DE0001070032685F800804BE08DF80490686A37 -:101DF0000690B86803900220ADF8080001208DF825 -:101E00001400039805210170297F4170114601A833 -:101E1000FEF768FF064685F80080012E12D030E0FC -:101E200001208DF80400686A069003208DF80800F0 -:101E3000287F8DF809000020287716E06C23020027 -:101E400070220200287F80B11E202070252028707B -:101E50008DF804B0686A069002208DF808003946B3 -:101E600001A8FEF73FFF06460BE00CB1FE202070F4 -:101E70009DF8040028B1002101A8FEF733FFFEF70A -:101E8000E5BF0BB03046BDE8F08FF0B587B00C462B -:101E90004E6900218DF804100120257803460227A1 -:101EA0004FF0070C85B1012D50D0022D36D1FE2008 -:101EB00030708DF80030606A059003208DF80400C2 -:101EC000207E8DF8050060E02179012922D00229C9 -:101ED00029D0032924D0042920D1B17F02291DD182 -:101EE00031780D1F042D04D30A3D032D01D31E2983 -:101EF00014D12189022911D38DF80470237020890F -:101F00009DF80410884217D20A208DF80000606AFC -:101F1000059057E070780128EED0052007B0F0BD9D -:101F20001E203070E8E771780229F6D131780C294B -:101F3000F4D18DF804C0E1E71120083402F8040B55 -:101F400094E80B0082E80B000320E7E71578112DD9 -:101F5000E4D18DF800C0656A0595956802958DF805 -:101F6000101094F804E0BEF1010F13D0BEF1020F7F -:101F70002DD0BEF1030F1CD0BEF1040FCED1ADF8B1 -:101F800004700E202870207E687000216846FEF7DD -:101F9000A9FE0CE0ADF804700B202870207E002113 -:101FA00000F01F0068706846FEF79CFE3770002046 -:101FB000B4E7ADF804708DF8103005202870207E4D -:101FC0006870277011466846FEF78CFEA6E7ADF8EC -:101FD00004C02B70207F6870607F00F00100A87043 -:101FE000A07F00F01F00E870E27F2A71C0071CD0BC -:101FF00094F8200000F00700687194F8210000F0C8 -:102000000700A87100216846FEF76CFE2868B063DF -:10201000A888B087A87986F83E00A06940787077D4 -:102020002879B0700D203070C1E7A9716971E9E7B6 -:1020300000B587B005280CD101208DF800008DF87F -:102040000400002005918DF8050001466846FEF762 -:1020500049FE07B000BD70B50C46054602F0B4F865 -:1020600021462846BDE870407823002202F002B8DD -:1020700008B1007870470C207047000070B50C0064 -:1020800005784FF000010CD021702146F3F79DF840 -:1020900072482178405D884201D1032070BD022042 -:1020A00070BDF3F792F8002070BD027B032A05D0C3 -:1020B00000220A704B780B2B02D003E004207047FB -:1020C0000A770A62027B9300521C0273C1500320FC -:1020D0007047F0B587B00F4605460124287B05EB15 -:1020E000800050F8046C7078411E0C290AD25B49BC -:1020F0003A46123101EB8000314650F8043C284644 -:10210000984704460CB1012C11D1287B401E10F0D9 -:10211000FF00287301D00324E0E70C208DF80000B5 -:10212000706A0590002101966846FFF7A7FF032C0F -:10213000D4D007B02046F0BD70B515460A46044617 -:1021400029461046FFF7C5FF064674B12078FE28E1 -:102150000BD1207E30B100202870294604F10C00FC -:10216000FFF7B7FF2046FEF7FFFD304670BD704712 -:1021700070B50E46044688210FF057FD0225012E4A -:1021800003D0022E04D0052070BD0120607000E055 -:1021900065702046FEF7E8FDA577002070BD28B1E8 -:1021A000027E1AB10A4600F10C01C5E70120704712 -:1021B00010B5044686B0052002F006F82078FE2807 -:1021C00006D000208DF8000069462046FFF7E7FFA3 -:1021D00006B010BD7FB50E4600218DF80C10417879 -:1021E0000B2903D00C2903D0002405E0846900E00A -:1021F00044690CB1217E91B16D4601462846FFF736 -:1022000054FF032809D1324629462046FFF794FFA0 -:102210009DF80C10002900D0042004B070BD04F11A -:102220000C05EAE710B590B00C4607900B48042166 -:10223000801E08900A488DF8191009900F9269467F -:1022400006A8FFF7C7FF002805D1102220460199F4 -:102250000FF052FC002010B010BD000076220200EA -:102260006C23020070B50D46040011D085B1210128 -:1022700028460FF0B8FC10224E4928460FF03CFCCF -:102280004C4801210838018044804560002070BD21 -:10229000012070BD70B5474E00240546083E10E091 -:1022A0007068AA7B00EB0410817B914208D1C17B4E -:1022B000EA7B914204D10C2229460FF0F1FB30B1A8 -:1022C000641C30888442EBDB4FF0FF3070BD204649 -:1022D00070BD70B50D46060006D02DB1FFF7DAFFD0 -:1022E000002803DB401C14E0102070BD314C083C7A -:1022F00020886288411C914201D9042070BD616828 -:10230000102201EB001031460FF0F6FB2088401C34 -:1023100020802870002070BD70B514460D0018D0C4 -:10232000BCB10021A170022802D0102811D105E013 -:10233000288870B10121A170108008E02846FFF7BD -:10234000A9FF002805DB401CA070A8892080002080 -:1023500070BD012070BD70B5054614460E000BD04F -:1023600000203070A878012808D005D91149A1F1C2 -:1023700008010A8890420AD9012070BD24B128784A -:1023800020702888000A5070022008700FE064B1A5 -:102390004968102201EB0011204610390FF0ACFB08 -:1023A000287820732888000A60731020307000207D -:1023B00070BD0000780000202DE9F04190460C46E9 -:1023C00007460025FE48072F00EB881607D2DFE8F6 -:1023D00007F00707070704040400012500E0FFDFFA -:1023E00006F81470002D13D0F548803000EB8801FA -:1023F00091F82700202803D006EB4000447001E04C -:1024000081F8264006EB44022020507081F82740D6 -:10241000BDE8F081F0B51F4614460E460546202A59 -:1024200000D1FFDFE649E648803100EB871C0CEB6A -:10243000440001EB8702202E07D00CEB46014078C8 -:102440004B784870184620210AE092F825304078F1 -:1024500082F82500F6E701460CEB41000570407854 -:10246000A142F8D192F82740202C03D00CEB440471 -:10247000637001E082F826300CEB41042023637086 -:1024800082F82710F0BD30B50D46CE4B441900221E -:10249000181A72EB020100D2FFDFCB48854200DD43 -:1024A000FFDFC9484042854200DAFFDFC548401CD3 -:1024B000844207DA002C01DB204630BDC148401CB5 -:1024C000201830BDBF48C043FAE710B50446016884 -:1024D000407ABE4A52F82020114450B102200844EC -:1024E00020F07F40F0F751FB94F90810BDE8104050 -:1024F000C9E70420F3E72DE9F047B14E803696F89E -:102500002D50DFF8BC9206EB850090F8264034E0B1 -:1025100009EB85174FF0070817F81400012806D0BB -:1025200004282ED005282ED0062800D0FFDF01F089 -:10253000E5F8014607EB4400427806EB850080F899 -:10254000262090F82720A24202D1202280F82720BE -:10255000084601F0DEF82A4621460120FFF72CFF4D -:102560009B48414600EB041002682046904796F8CD -:102570002D5006EB850090F82640202CC8D1BDE8F0 -:10258000F087022000E003208046D0E710B58C4C95 -:102590002021803484F8251084F8261084F8271030 -:1025A000002084F8280084F82D0084F82E10411EA5 -:1025B000A16044F8100B2074607420736073A073E2 -:1025C0008449E07720750870487000217C4A103CEF -:1025D00002F81100491CC9B22029F9D30120F0F7F3 -:1025E000C2F90020F0F7BFF9012084F82200F9F7C2 -:1025F00053FB7948F9F75FFB764CA41E20707748AF -:10260000F9F759FB6070BDE81040F0F739B910B523 -:10261000F0F75BF96F4CA41E2078F9F765FB607842 -:10262000F9F762FBBDE8104001F0A0B82020704728 -:102630002DE9F34F624E0025803606EB810A89B002 -:102640009AF82500202822D0691E02916049009541 -:1026500001EB00108146D0E90112C0680391CDE979 -:102660000420B08BADF81C00B07F8DF81E009DF8E3 -:102670001500C8B10227554951F820400399E219C5 -:10268000114421F07F41019184B102210FE001202A -:10269000F0F769F90020F0F766F9F0F734F901F086 -:1026A00065F886F82F508AE00427E4E700218DF8CA -:1026B0001810022801D001281BD1039839190144B0 -:1026C0000998081A20F07F4033280BD903208DF891 -:1026D00015000398C4F13201401A20F07F403224E3 -:1026E00003900CE096F8240018B9F0F753FC00288A -:1026F0004DD0322C03D214B101F02CF801E001F0DE -:1027000035F8344A107820B393465278039B121B55 -:1027100000219DF81840984601281BD0032819D0A5 -:102720005FF000008DF81E00002A04DD981A039067 -:1027300001208DF818009DF81C0000B102210398BB -:10274000274A20F07F40039003AB099801F01AF864 -:1027500010B110E00120E5E79DF81D0018B99BF8C5 -:102760000000032812D08DF81C50CDF80C808DF895 -:1027700018408DF81E509DF8180058B10398012399 -:10278000C11900221846F0F741F906E000200BB00D -:10279000BDE8F08F0120F0F7E6F899F90C2001234D -:1027A00000200199F0F732F9012086F82F008AF80D -:1027B000285003482022694680300FF0E2F911E0EA -:1027C000AC090020FF7F841E0020A107B822020070 -:1027D000AC0700208A000020233F0100F7240100FD -:1027E000FFFF3F000120D2E72DE9F05FDFF84084D2 -:1027F000064608EB860090F82550202D1FD0A8F142 -:1028000080002C4600EB8617A0F50079DFF824B491 -:1028100005E0A24607EB4A004478202C0AD0F0F7E6 -:1028200041F909EB04135A4601211B1D00F0AAFFD0 -:102830000028EED0AC4202D0334652461EE0FE489D -:1028400008B1AFF30080F0F72DF998F82F206AB1A6 -:10285000D8F80C20411C891A0902CA1701EB126131 -:102860000912002902DD0020BDE8F09F3146FFF784 -:10287000DFFE08B10120F7E733462A462021042075 -:10288000FFF7C8FDEFE72DE9F041E94C2569F0F7C6 -:1028900009F9401B0002C11700EB1160001200D4BF -:1028A000FFDF94F8220000B1FFDF012784F82270D7 -:1028B00094F82E00202800D1FFDF94F82E6020200D -:1028C00084F82E00002584F82F5084F8205084F8D6 -:1028D0002150DA4825600078022833D0032831D00F -:1028E00000202077A068401C05D04FF0FF30A0608A -:1028F0000120F0F738F80020F0F735F8F0F733F959 -:10290000F0F72BF9EFF7FFFF0EF094FBCC480560D2 -:1029100005604FF0E0214FF40040B846C1F8800256 -:10292000F0F7BBF994F82D703846FFF75DFF0028EB -:10293000FAD0BF48803800EB871010F81600022844 -:1029400002D006E00120CCE73A4631460620FFF7E8 -:1029500033FD84F8238004EB870090F826002028BC -:1029600004D0B648801E4078F9F7C4F9207F0028CB -:1029700003D0F0F7E8F82577657749E50146AC48DC -:1029800010B590F82D200024803800EB821000BF95 -:1029900010F814302BB1641CE4B2202CF8D32020A2 -:1029A00010BDA84800EB0410016021460120FFF78C -:1029B00003FD204610BD10B5012801D0032800D129 -:1029C00071B39B4A92F82D30994C0022803C04EB65 -:1029D000831300BF13F812400CB1082010BD521C25 -:1029E000D2B2202AF6D3954A48B1022807D0072947 -:1029F00016D2DFE801F01506080A0C0E10000021BF -:102A00000AE01B2108E03A2106E0582104E0772182 -:102A100002E0962100E0B52151701070002010BD39 -:102A2000072010BD854810B54078F0F7AEF880B2A9 -:102A300010BD10B5202811D27D4991F82D30A1F19B -:102A4000800202EB831414F810303BB191F82D3062 -:102A500002EB831212F81020012A01D0002010BDD1 -:102A600091F82D2001460020FFF7A6FC012010BDA3 -:102A700010B5F0F717F8BDE81040F0F786B82DE96B -:102A8000F0410E466A4F01782025803F0C4607EB47 -:102A9000831303E0254603EB45046478944202D097 -:102AA000202CF7D108E0202C06D0A14206D103EB60 -:102AB00041014978017007E00020A9E403EB4400DC -:102AC00003EB4501407848705F4F7EB127B100218C -:102AD00040F2DA30AFF300803078A04206D127B15F -:102AE000002140F2DD30AFF30080357027B10021C6 -:102AF00040F2E230AFF30080012089E410B5426873 -:102B00000B689A1A1202D41702EB1462121216D42E -:102B1000497A91B1427A82B94C4A006852F8211040 -:102B2000126819441044001D891C081A0002C117BC -:102B300000EB11600012322801DB012010BD0020E3 -:102B400010BD2DE9F047814639483E4E00EB81002B -:102B5000984690F825402020107006F50070154624 -:102B600000EB81170BE000BF06EB04104946001D87 -:102B7000FFF7C4FF28B107EB44002C704478202CE9 -:102B8000F2D1297888F8001013E000BF06EB041595 -:102B9000291D4846FFF7B2FF68B988F80040A97BB5 -:102BA00099F80A00814201D80020E8E407EB4400CC -:102BB0004478202CEAD10120E1E42DE9FC410E46C5 -:102BC000074600241F4D08E09DF8000005EB0010AB -:102BD0008168384600F0EAFD01246B4601AA3146BF -:102BE0003846FFF7AEFF0028EED02046BDE8FC8156 -:102BF00070B504460E4801258038A54300EB8411CA -:102C000000EB851040220EF077FF0F4E26B1002119 -:102C100040F25C40AFF30080054800EB850100EB1B -:102C20008400D0F82500C1F82500AEB100210FE0E6 -:102C30002C0A0020FFFF3F00000000008A00002057 -:102C400000F50040AC07002000000000B8220200A0 -:102C50004FF48C60AFF30080284670BD2DE9FC4135 -:102C60008446FF481546089C00EB85170E4617F86A -:102C70001400012803D0022801D00020B6E70B463B -:102C8000F84A0121604600F07DFDA8B101AB6A461B -:102C900029463046FFF755FF70B1F1489DF80420F2 -:102CA0009DF80010803000EB85068A4208D02B4644 -:102CB0000520FFF7AFFB0BE02A462146042014E075 -:102CC000202903D007EB4100407801E096F8250069 -:102CD00007EB440148709DF80000202809D007EB5D -:102CE000400044702A4621460320FFF765FB01207F -:102CF0007CE706F8254F0120F070F3E7DA4901EB95 -:102D00000010001DFFF7E1BB7CB51D4613460446CD -:102D10000E4600F1080221461846EFF743FF94F9EA -:102D200008000F2804DD1F3820722068401C206036 -:102D300096B10220CD4951F8261046182068694600 -:102D4000801B20F07F40206094F908002844C01CBC -:102D50001F2803DA012009E00420EBE701AAEFF7BE -:102D600021FF9DF8040010B10098401C00900099CC -:102D7000206831440844C01C20F07F4060607CBD66 -:102D80002DE9FE430C460646097860799072207959 -:102D900098461546507241B1B148803090F82E10D7 -:102DA00020290AD00069401D0BE0D4E902232179D3 -:102DB00003B02846BDE8F043A6E7AD484178701D52 -:102DC000084420F07F47217900222846A368FFF7B6 -:102DD0009BFF3946284600F0E9FCD4E9023221790C -:102DE0006846FFF791FF41462846019CFFF7E5FE44 -:102DF0002B4622460021304600F0C4FC002803D1B7 -:102E00003146284600F0D2FCBDE8FE832DE9FE4F96 -:102E1000814600F087FC38B15FF0000799F80000A8 -:102E200020B10020BDE8FE8F0127F7E78C4D914CC3 -:102E30004FF0000A803524B1002140F2D340AFF3B7 -:102E4000008095F82D8085F823A0002624B100216C -:102E50004FF49B60AFF300801FB94046FFF7C8FEF8 -:102E6000804624B100214FF49C60AFF30080EFF75F -:102E700019FE43466A464946FFF782FF24B1002106 -:102E800040F2E640AFF3008095F82E0020280CD0E9 -:102E900029690098401A0002C21700EB1260001264 -:102EA00003D5684600F082FC012624B100214FF4CE -:102EB0009E60AFF3008095F823000028BBD124B1B9 -:102EC000002140F2F640AFF30080EFF7EBFD6B46D8 -:102ED000644A002100F056FC0028A3D027B94146DF -:102EE0006846FFF76AFE064326B16846FFF7EDFA2B -:102EF000C9F8080024B1002140F20950AFF3008066 -:102F000001208FE72DE9FF5F8A46814600F00AFC29 -:102F1000534C803410B39AF80000002710B10128F8 -:102F200000D0FFDF534D25B1002140F27F50AFF3B9 -:102F300000800120A84600905FEA080604D0002126 -:102F400040F28750AFF30080009800F0E2FB94F865 -:102F50002D50002084F8230067B119E094F82E006A -:102F60000127202800D1FFDF9AF800000028D9D0DF -:102F7000FFDFD7E72846FFF73BFE054626B10021D5 -:102F800040F29150AFF3008094F823000028D3D191 -:102F900026B1002140F29B50AFF30080EFF782FD95 -:102FA00083462B4601AA5146FFF7EAFE5FEA060870 -:102FB00004D0002140F2A250AFF300803B462A46E5 -:102FC00001A95846CDF80090FFF748FE064604EBED -:102FD000850090F828B0B8F1000F04D0002140F22D -:102FE000A950AFF3008000F089FB0090B8F1000F0A -:102FF00004D0002140F2AF50AFF3008094F82300DA -:10300000002899D1B8F1000F04D0002140F2B75048 -:10301000AFF3008014490DF1040C01EB09109CE89A -:103020000E0000F1040080E80E002EB35FEA0806EF -:1030300004D0002140F2C450AFF300803BEA070007 -:1030400020D094F82E0020281CD126B1002140F277 -:10305000C950AFF300802846FFF7C6FB90B90CE0DB -:10306000AC090020FFFF3F00AC070020B82202009F -:103070008A0000200000000010E09AF80000D8B399 -:10308000012849D0B8F1000F04D0002140F2E650E9 -:10309000AFF30080284600F02AFB01265FEA08050E -:1030A00004D0002140F2EF50AFF30080009800F010 -:1030B00030FB25B1002140F2F350AFF300808EB118 -:1030C00094F82D0004EB800090F82600202809D009 -:1030D00025B1002140F2FA50AFF30080F948407862 -:1030E000F8F708FE25B1002140F2FF50AFF3008051 -:1030F00004B03046BDE8F09FFFE7B8F1000F04D000 -:10310000002140F2D150AFF3008094F82D204946C1 -:103110000420FFF751F9C0E7002E3FF40DAF002166 -:1031200040F2DC50AFF3008006E72DE9F84FE64DA2 -:10313000814695F82D004FF00008E44C4FF0010B4C -:10314000474624B1002140F20D60AFF3008058469D -:1031500000F0DFFA85F8237024B1002140F21260FC -:10316000AFF3008095F82D00FFF742FD064695F875 -:10317000230028B1002CE4D000214FF4C3604BE0C1 -:1031800024B1002140F21C60AFF30080CE488038AB -:1031900000EB861111F81900032856D1334605EBD0 -:1031A000830A4A469AF82500904201D1012000E0A6 -:1031B000002000900AF125000021FFF760FC014685 -:1031C0000098014203D001228AF82820AF77E1B3AA -:1031D00024B1002140F22160AFF30080324649461D -:1031E0000120FFF7E9F89AF828A024B1002140F265 -:1031F0002C60AFF3008000F081FA834624B10021F7 -:1032000040F23160AFF3008095F8230038B1002C14 -:1032100097D0002140F23560AFF3008091E7BAF11A -:10322000000F07D095F82E00202803D13046FFF775 -:10323000DBFAE0B124B1002140F24960AFF3008035 -:10324000304600F054FA4FF0010824B1002140F25A -:103250005260AFF30080584600F05BFA24B10021C1 -:1032600040F25660AFF300804046BDE8F88F002C76 -:10327000F1D0002140F24460AFF30080E6E7002087 -:10328000EFF74ABB0120EFF747BB8E480078704745 -:103290002DE9F0418C4C94F82E0020281FD194F891 -:1032A0002D6004EB860797F82550202D00D1FFDF15 -:1032B0008549803901EB861000EB4500407807F81E -:1032C000250F0120F87084F82300294684F82E5039 -:1032D000324602202234FFF76FF8002020700CE401 -:1032E0002DE9F0417A4E784C012538B1012821D0E2 -:1032F000022879D003287DD0FFDFF0E700F02AFA1A -:10330000FFF7C6FF207E00B1FFDF84F821500020C8 -:10331000EFF729FBA168481C04D0012300221846BE -:10332000EFF774FB14F82E0F217806EB01110A68F1 -:10333000012154E0FFF7ACFF0120EFF714FB94F8F4 -:10334000210050B1A068401C07D014F82E0F21783E -:1033500006EB01110A68062141E0207EDFF8648156 -:10336000002708F10208012803D002281ED0FFDF41 -:10337000B5E7A777EFF7E7FB98F80000032801D13E -:1033800065772577607D534951F8200094F8201027 -:1033900051B948B161680123091A00221846EFF7B4 -:1033A00035FB022020769AE7277698E784F82050AC -:1033B00000F0D0F9A07F50B198F8010061680123B6 -:1033C000091A00221846EFF721FB257600E0277640 -:1033D00014F82E0F217806EB01110A680021BDE8D0 -:1033E000F041104700E005E036480078BDE8F041C4 -:1033F000F8F780BCFFF74CFF14F82E0F217806EB8E -:1034000001110A680521EAE710B52F4C94F82E0047 -:10341000202800D1FFDF14F82E0F21782C4A02EB70 -:1034200001110A68BDE81040042110477CB5264C04 -:10343000054694F82E00202800D1FFDFA068401C2C -:1034400000D0FFDF94F82E00214901AA01EB001003 -:10345000694690F90C002844EFF7A4FB9DF904009D -:103460000F2801DD012000E0002000990844616878 -:10347000084420F07F41A16094F82100002807D083 -:1034800002B00123BDE8704000221846EFF7BEBA33 -:103490007CBD30B5104A0B1A541CB3EB940F1FD3EC -:1034A000451AB5EB940F1BD3934203D9101A431856 -:1034B0005B1C15E0954211D9511A0844401C434247 -:1034C0000EE00000880000202C0A00200000000010 -:1034D000AC070020B8220200FF7F841EFFDF00231C -:1034E000184630BD0123002201460220EFF78EBAB4 -:1034F0000220EFF738BAEFF7D5BA2DE9FC47B14C07 -:10350000054694F82E00202800D1FFDF642D58D303 -:10351000AD4A0021521B71EB010052D394F82E20CA -:10352000A0462046DFF8A49290F82D7009EB021413 -:10353000D8F8000001AA28446946EFF733FB9DF94B -:103540000400002802DD0098401C0090A06800994B -:1035500062684618B21A22F07F42B2F5800F30D26C -:1035600008EB8702444692F82520202A0AD009EB6E -:1035700002125268101A0002C21700EB1260001209 -:1035800088421EDBA068401C10D0EFF78BFAA168C0 -:10359000081A0002C11700EB11600012022810DDAA -:1035A0000120EFF7E0F94FF0FF30A06020682844D9 -:1035B000206026F07F402061012084F82300BDE8D0 -:1035C000FC870020FBE72DE9F0477E4C074694F886 -:1035D0002D00A4F1800606EB801010F8170000B94A -:1035E000FFDF94F82D50A046794C24B1002140F61D -:1035F0006500AFF3008040F6710940F67A0A06EBE9 -:10360000851600BF16F81700012818D0042810D01E -:1036100005280ED006280CD01CB100214846AFF377 -:10362000008020BF002CEDD000215046AFF3008079 -:10363000E8E72A4639460120FEF7BEFEF2E74FF0E2 -:10364000010A4FF00009454624B1002140F68100EF -:10365000AFF30080504600F05CF885F8239024B169 -:10366000002140F68600AFF3008095F82D00FFF7AB -:10367000BFFA064695F8230028B1002CE4D00021BB -:1036800040F68C001FE024B100214FF40960AFF335 -:10369000008005EB860000F1270133463A462630CC -:1036A000FFF7EDF924B1002140F69400AFF300805C -:1036B00000F024F8824695F8230038B1002CC3D0DE -:1036C000002140F69A00AFF30080BDE785F82D6039 -:1036D000012085F82300504600F01BF8002C04D090 -:1036E000002140F6A700AFF30080BDE8F087354920 -:1036F00081F82D00012081F82300704710B535486E -:1037000008B1AFF30080EFF3108000F0010072B653 -:1037100010BD10B5002804D12F4808B1AFF30080C8 -:1037200062B610BD2D480068C005C00D10D010381D -:1037300040B2002806DA00F00F0000F1E02090F817 -:10374000140D03E000F1E02090F8000440097047F8 -:103750000820704710B51B4C94F82400002804D1B1 -:10376000F8F7B6F8012084F8240010BD10B5154C08 -:1037700094F82400002804D0F8F7D3F8002084F847 -:10378000240010BD10B51C685B68241A181A24F0B8 -:103790007F4420F07F40A14206D8B4F5800F03D2C9 -:1037A000904201D8012010BD002010BDD0E90032A8 -:1037B000D21A21F07F43114421F07F41C0E900314A -:1037C000704700002C0A0020FF1FA107AC07002053 -:1037D00000000000000000000000000004ED00E018 -:1037E000F0B5734AD2F80032724D002401212E78D0 -:1037F00056B9714E3460704F03263F1D3E606E4FC8 -:1038000004260C373E602970C2F80042D160116076 -:10381000694C4834D16425688542FBD35160D1603E -:10382000C2F80032F0BD2DE9F041044680074FF0A8 -:1038300000054FF0010604D560480560066024F0DD -:103840000204E0044FF0FF3705D55D484660C0F83C -:10385000087324F48054600003D55A48056024F0AE -:103860008044E0050FD55248C0F80052C0F80873F4 -:1038700051490D60091D0D604F4A04210C32116041 -:10388000066124F48074A00409D54F484660C0F84E -:103890000052C0F808734D48056024F40054C4F386 -:1038A0008030C4F3C031884200D0FFDF14F4404FB1 -:1038B00014D047484660C0F8087346488660C0F890 -:1038C0000052C0F8087344490D600A1D16608660F6 -:1038D000C0F808730D60166024F4404420050AD532 -:1038E0003E4846608660C0F80873C0F848733C489C -:1038F000056024F400640DF077FB3A48044200D0E0 -:10390000FFDFBDE8F08170B5202500224FEA0203F9 -:1039100020FA02F1C90719D051B201F01F060124A3 -:10392000B4404E09B60006F1E026C6F88041C6F85C -:103930008042002906DA01F00F0101F1E02181F84F -:10394000143D03E001F1E02181F80034521CAA4249 -:10395000DED370BD70B5174C0D466060FFF763FF96 -:103960006068FFF7D0FF2846F8F7A7F80CF05EFF75 -:1039700000F0ABF80DF038FB0DF083FAF8F78CF996 -:10398000BDE870400DF000B810B50A4C6068FFF754 -:103990004AFF6068FFF7B7FF0DF026FBF8F721F943 -:1039A0000020606010BD0348406870470A207047DF -:1039B000008000408C00002004850040FC1F004077 -:1039C00000C0004004E5014000D0004004D50040A4 -:1039D00000E0004000F0004000F5004000B0004072 -:1039E00008B50040FEFF0FFD70B522490A680AB312 -:1039F0000022154601244B685B1C4B60092B00D349 -:103A00004D600E7904FA06F30E681E420FD0EFF3F4 -:103A1000108212F0010272B600D001220C689C43A1 -:103A20000C6002B962B649680160002070BD521C8A -:103A3000092AE0D3052070BD4FF0E0214FF480004B -:103A4000C1F800027047EFF3108111F0010F72B658 -:103A50004FF0010202FA00F20648036842EA03024C -:103A6000026000D162B6E7E70248002101604160D0 -:103A70007047000094000020AD4911F8410F4978CB -:103A8000884201D3401A02E0C1F141010844C0B2AA -:103A90007047A749433111F8410F4978884201D353 -:103AA000401A02E0C1F141010844C0B27047A04988 -:103AB000863111F8410F4978884201D3401A02E05B -:103AC000C1F141010844C0B270479A4910B5802045 -:103AD00081F8000496490020433101F8410F4870F5 -:103AE000934901F8410F48709149863101F8410F1F -:103AF000487091480DF00EF98F48401C0DF00AF9FE -:103B0000EFF7DAF8BDE8104000F006B94020704742 -:103B1000B2E770B50C4605460026FFF7ADFF844AB4 -:103B2000A04214D30021641EE4B20FD392F84200E5 -:103B3000105C05F8010B92F84200401CC0B282F8FC -:103B400042004128EFD182F84210ECE7012600F054 -:103B5000E3F8304670BD402070479AE770B50C46D8 -:103B600005460026FFF795FF714A4332A04214D361 -:103B70000021641EE4B20FD392F84200105C05F8F5 -:103B8000010B92F84200401CC0B282F8420041286A -:103B9000EFD182F84210ECE7012600F0BDF8304684 -:103BA00070BD402101700020704710B50446FFF73A -:103BB0007EFF2070002010BD70B50C460546FFF753 -:103BC00076FF5B4A8632A04215D30021641EE4B220 -:103BD0000FD392F84200105C05F8010B92F84200F6 -:103BE000401CC0B282F842004128EFD182F8421056 -:103BF000ECE7002401E042F2070400F08DF82046D3 -:103C000070BD70B50C460546412900D9FFDF4B4811 -:103C10000068103840B200F066F8C6B20D2000F01F -:103C200062F8C0B2864203D2FFDF01E0EFF794F8FA -:103C300021462846FFF76DFF0028F7D070BD2DE91B -:103C4000F0413D4F0025064617F10407412257F881 -:103C5000254094F8421094F8410000F053F888B3DE -:103C60006D1CEDB2032DF1D331484122433090F861 -:103C7000421090F8410000F045F8002831D02C485F -:103C8000412290F8421090F8410000F03BF80028E3 -:103C900027D027484122863090F8421090F8410002 -:103CA00000F030F800281CD0EFF72CF822480DF077 -:103CB00039F8B0F5005F00D0FFDFBDE8F0411E48E5 -:103CC0000DF046B894F84100265494F84100401C89 -:103CD000C0B284F841004128C6D1002084F84100D8 -:103CE000C2E7BDE8F081002806DA00F00F0000F11D -:103CF000E02090F8140D03E000F1E02090F80004BB -:103D000040097047401C884204D0904200D109B15C -:103D1000002070470120704710B507480DF002F8E9 -:103D2000002803D1BDE81040EEF7D7BF10BD00005A -:103D30005C0A00200DE000E09C00002004ED00E0A3 -:103D4000164908784A78401CC0B2904205D0144BFE -:103D500001221A60BFF34F8F087070472DE9F041C0 -:103D60000E4C4FF0E02600BFEFF77CF820BF40BFBD -:103D700020BF677820786070D6F80052EDF7CCFA53 -:103D8000854305D1D6F8040210B92078B842EBD0AB -:103D9000EFF763F80020BDE8F0810000AC000020E0 -:103DA000180502402DE9F041012528034FF0E021DC -:103DB0000026C1F880011E4CC4F800610C2000F000 -:103DC0002CF81C4801680268C94341F3001142F015 -:103DD00010020260C4F804532560491C00E020BFB3 -:103DE000D4F80021002AFAD019B9016821F0100195 -:103DF0000160114807686560C4F80853C4F80061A1 -:103E00000C2000F00AF83846BDE8F08110B50446F1 -:103E1000FFF7C8FF2060002010BD00F01F02012145 -:103E200091404009800000F1E020C0F88012704706 -:103E300000C0004010ED00E008C500402DE9F0474B -:103E4000FF4C0646FF21A06800EB06121170217896 -:103E5000FF2910D04FF0080909EB011109EB0617F3 -:103E60004158C05900F0F4F9002807DDA168207816 -:103E700001EB061108702670BDE8F08794F8008009 -:103E800045460DE0A06809EB05114158C05900F006 -:103E9000DFF9002806DCA068A84600EB08100578CA -:103EA000FF2DEFD1A06800EB061100EB08100D709C -:103EB0000670E1E7F0B5E24B0446002001259A6860 -:103EC0000C269B780CE000BF05EB0017D75DA742DE -:103ED00004D106EB0017D7598F4204D0401CC0B262 -:103EE0008342F1D8FF20F0BD70B5FFF704FBD44C3E -:103EF00008252278A16805EB0212895800F0A8F97C -:103F0000012808DD2178A06805EB01114058BDE8C3 -:103F10007040FFF7E7BAFFF7B8F9BDE87040F7F770 -:103F2000E9BE2DE9F041C64C2578FFF7E4FAFF2DF4 -:103F30006ED04FF00808A26808EB0516915900F002 -:103F400087F90228A06801DD80595DE000EB0511CA -:103F500009782170022101EB0511425C5AB1521E11 -:103F60004254815901F5800121F07F418151284659 -:103F7000FFF764FF34E00423012203EB051302EB97 -:103F8000051250F803C0875CBCF1000F10D0BCF5DF -:103F9000007F10D9CCF3080250F806C00CEB423C6D -:103FA0002CF07F4C40F806C0C3589A1A520A09E018 -:103FB000FF2181540AE0825902EB4C3222F07F4209 -:103FC0008251002242542846FFF738FF0C21A06896 -:103FD00001EB05114158E06850F82720384690471A -:103FE0002078FF2814D0FFF786FA2278A16808EB22 -:103FF00002124546895800F02BF9012893DD2178FB -:10400000A06805EB01114058BDE8F041FFF76ABA1E -:10401000BDE8F081F0B51D4614460E460746FF2B5D -:1040200000D3FFDFA00700D0FFDF8548FF2100227B -:10403000C0E90247C5700671017042708270104677 -:10404000012204E002EB0013401CE154C0B2A8427C -:10405000F8D3F0BD70B57A4C064665782079854274 -:1040600000D3FFDFE06840F825606078401C607096 -:10407000284670BD2DE9FF5F1D468B460746FF248D -:10408000FFF739FADFF8B891064699F80100B8420F -:1040900000D8FFDF00214FF001084FF00C0A99F81B -:1040A0000220D9F808000EE008EB0113C35CFF2BD7 -:1040B0000ED0BB4205D10AEB011350F803C0DC451A -:1040C0000CD0491CC9B28A42EED8FF2C02D00DE0B8 -:1040D0000C46F6E799F803108A4203D1FF2004B09A -:1040E000BDE8F09F1446521C89F8022008EB041129 -:1040F0000AEB0412475440F802B00421029B00224C -:10410000012B01EB04110CD040F801204FF4007892 -:1041100008234FF0020C454513D9E905C90D02D01B -:1041200002E04550F2E7414606EB413203EB04134F -:1041300022F07F42C250691A0CEB0412490A8154E2 -:104140000BE005B9012506EB453103EB041321F023 -:104150007F41C1500CEB0411425499F800502046A5 -:10416000FFF76CFE99F80000A84201D0FFF7BCFEF3 -:104170003846B4E770B50C460546FFF7BCF906466D -:1041800021462846FFF796FE0446FF281AD02C4DFC -:10419000082101EB0411A8684158304600F058F896 -:1041A00000F58050C11700EBD14040130221AA68EE -:1041B00001EB0411515C09B100EB4120002800DC47 -:1041C000012070BD002070BD2DE9F0478846814672 -:1041D000FFF770FE0746FF281BD0194D2E78A86800 -:1041E0003146344605E0BC4206D0264600EB0612B6 -:1041F0001478FF2CF7D10CE0FF2C0AD0A6420CD18A -:1042000000EB011000782870FF2804D0FFF76CFE47 -:1042100003E0002030E6FFF76BF941464846FFF720 -:10422000A9FF0123A968024603EB0413FF20C85429 -:10423000A878401EB84200D1A87001EB041001E03C -:10424000280B002001EB061100780870104613E6D9 -:10425000081A0002C11700EB11600012704700003D -:1042600070B50446A0F500002D4EB0F1786F02D273 -:104270003444A4F500042B48844201D2012500E017 -:10428000002500F043F848B125B9B44204D32648CC -:10429000006808E0012070BD002070BD002DF9D13C -:1042A000B442F9D321488442F6D2F3E710B504466C -:1042B000A0F50000B0F1786F03D219480444A4F5CA -:1042C000000400F023F84FF0804130B11648006838 -:1042D00004E08C4204D2012003E014488442F8D266 -:1042E000002080F0010010BD10B520B1FFF7DEFF07 -:1042F00008B1012010BD002010BD10B520B1FFF79E -:10430000AFFF08B1012010BD002010BD08480949C9 -:104310000068884201D101207047002070470000EA -:1043200000000020003002002000002008000020D3 -:10433000B0000020BEBAFECA0548064A0168914294 -:1043400001D100210160044901200860704700008C -:10435000B0000020BEBAFECA40E50140534800212B -:104360000170417010218170704770B50546164686 -:104370000C460220EEF73FFA4C49012008704C49E8 -:10438000F01E08604B480560001F046070BD10B54A -:104390000220EEF730FA4549012008704648002116 -:1043A000C0F80011C0F80411C0F8081143494FF4D7 -:1043B0000000086010BD3D480178C9B1404A4FF483 -:1043C000000111603C49D1F800310022002B1CBFD4 -:1043D000D1F80431002B02D0D1F8081111B142708C -:1043E000102103E001214170364909688170027093 -:1043F0000020EEF700BA2D480178002904BF40786C -:1044000070472D48D0F80011002904BF02207047E2 -:10441000D0F8001100291CBFD0F80411002905D0E4 -:10442000D0F80801002804BF012070470020704721 -:104430001E4800B50278204B4078C821491EC9B2F9 -:1044400082B1D3F800C1BCF1000F10D0D3F8000145 -:1044500000281CBFD3F8040100280BD0D3F80801B2 -:1044600050B107E0022802D0012805D002E000295F -:10447000E4D1FFDF002000BD012000BD0B48017822 -:10448000002904BF807870470B48D0F8001100293C -:104490001CBFD0F80411002902D0D0F8080108B1DF -:1044A0001020704707480068C0B27047B400002071 -:1044B00010F5004008F5004000F0004004F5014010 -:1044C00008F5014000F400404C48002101704170A3 -:1044D000704770B5064614460D460120EEF78BF97D -:1044E00047480660001D0460001D056070BD70B582 -:1044F000424A012540EA01411570424A41F080716B -:104500001160414C0026C4F80461404A4FF04071EC -:104510001160002802BFC4F80052256070BD012858 -:1045200018BFFFDFC4F8006225604FF00070384903 -:10453000086070BD3148017879B1344A4FF040715C -:1045400011603149D1F804210021002A08BF4170CF -:1045500002D0304A1268427001700020EEF74BB969 -:1045600026480178002904BF407870472648D0F8D3 -:104570000401002808BF704726480068C0B2704791 -:10458000002808BF704730B51C480078002808BFD5 -:10459000FFDF1D48D0F80411002918BF30BD0224E8 -:1045A000C0F80443DFF870C0DCF80010C1F3001558 -:1045B000DCF8001041F01001CCF80010D0F8041124 -:1045C000002904BF4FF400414FF0E02207D100BFA3 -:1045D000C2F8801220BFD0F80431002BF8D02DB9DA -:1045E000DCF8001021F01001CCF80010C0F80843EE -:1045F00030BD05490120886070470000B7000020E9 -:1046000008F5004004F5004000F0004008F50140C6 -:1046100004F5014000F4004010ED00E070B5FF4CDF -:1046200000250120657025706572A572E07284F81E -:104630002150A56204F1380065630CF06BFB002883 -:1046400018BFFFDFA577F6480DF0F6FBF5494FF0F0 -:10465000FF300860091D0860091D0D60091D086014 -:10466000091D0D60091D0860091D0860091D08600D -:10467000091D0860091D0860091D0860091D086002 -:10468000091D0860091D086070BD30B4E349026867 -:10469000DFF898C34A6142688A61007A08770A7D28 -:1046A000E14BACF1040401204AB10A7E00FA02F2A7 -:1046B0001A608D7D002D0CBF2260CCF800204A7D51 -:1046C000002A04BF30BC70474A7E90401860C97D04 -:1046D00000290CBF2060CCF8000030BC7047D549E1 -:1046E000D3480860091DD4480860704710B50446D7 -:1046F000012908BF002105D002291ABFFFDF0021D0 -:104700004FF0807141F48470CA4940F48010086011 -:10471000E0B240F44030091D40F000700860C74826 -:10472000D0F80001002818BFFFDF10BD01202DE9DF -:10473000F04102254FF0E0270026C7F88051C0491C -:104740000E600860BF490A6822F0770242F08802D2 -:1047500042F000420A60091D0A6822F47F4242F4D6 -:10476000B0520A60AD4CB84965770D60B84AB74998 -:104770001160121FB7491160B74A40F25B611160C6 -:10478000121F40F203111160111F0860B34903208A -:104790000860B3499620086094F91E000CF06AFD89 -:1047A000607F002814BF4FF4C020AE48AE490860B7 -:1047B000AF49AE480860091FAE480860C7F880528C -:1047C0009E491020C1F8040384F82D60BDE8F081F3 -:1047D000A948016821F0010141F080710160704732 -:1047E0008E4A0368C2F802308088D0801172704708 -:1047F0008A4890F821007047884A517010707047BD -:10480000F0B50546800000F1804000F580508B88AF -:10481000C0F820360B78D1F8011043EA0121C0F826 -:10482000001605F10800012707FA00F6934C002A4C -:1048300004BF2068B04304D0012A18BFFFDF2068FE -:1048400030432060206807FA05F108432060F0BD7E -:1048500010B504460CF00EFD7048847710BD6F480B -:1048600090F82E0070476D4890F830007047844AE9 -:10487000C1781160006883490002086070472528EC -:1048800008BF02210ED0262808BF1A210AD02728E7 -:1048900008BF502106D00A2894BF0422062202EB4A -:1048A0004001C9B2784A116078490860704770B415 -:1048B0005A4B93F80AC0BCF1010F21D0BCF1020F92 -:1048C0001CBF70BC70475C7D002C04BF70BC70477F -:1048D0004FF47A74BCF1010F6D4E16D0DD7D93F864 -:1048E00019C0002D18BF0125012908BF292121D099 -:1048F000022A08BF674E06F2E141B1FBF4F119E06C -:104900001C7D002CE4D170BC70479D7D93F818C0CD -:10491000002D18BF0125012947D0022A06BF5E4E8F -:104920004FF47A714FF4C861314401F5FA7100BF58 -:10493000B1FBF4F1491F0844584908605849002068 -:10494000C1F84C014FEA0C2085F0010140EA01500A -:1049500040F00311187F820002F1804202F5C0424C -:10496000C2F810154F4901EB8001987EC20002F198 -:10497000804202F5F832C2F81415DFF82CC1C2F8F3 -:1049800010C5DA7ED30003F1804303F5F833C3F892 -:1049900014153849C3F81015012101FA00F09140AF -:1049A00008434249086070BC7047022A14BF4FF4A4 -:1049B000C8614FF47A7149F6FC621144B8E72DE9F9 -:1049C000F0411E4D0746032014468846C5F80002F4 -:1049D000124E707F002814BF4FF4C0202148334985 -:1049E000086040460CF094FC20460CF071FC01205D -:1049F00017B1012F60D062E02D4B19685A06022CC6 -:104A0000D2F8202314BFC2F30622C2F3066221F4B7 -:104A1000FE4141EA02211960B0724BE0380B0020E0 -:104A20004C0B0020000E0040180500500C050050F3 -:104A3000060102001415004025000302001000408A -:104A4000FC1F00403C1700406015004044800040BF -:104A50009CF5014028110040381500401015004019 -:104A6000441500400000040408F501404080004067 -:104A7000A4F501401011004074170040401600409A -:104A8000241500401C150040081500405415004036 -:104A9000A224020004360200683602004C85004061 -:104AA00000800040006000404C81004004F501405F -:104AB00088150040286002E00221B1726860F9495F -:104AC000C864F948006822464146BDE8F041EEE678 -:104AD0002DE9F0418846F549074603201546C1F8FF -:104AE0000002F34C607F002814BF4FF4C020F1484F -:104AF000F14E306040460CF00BFC28460CF0E8FB11 -:104B000017B1012F19D021E0EC490A684806022D9F -:104B1000D0F8200314BFC0F30620C0F3066022F4CF -:104B2000FE4242EA002008600120A072606B40F45F -:104B3000801060634FF4801007E00220A072606B69 -:104B400040F4001060634FF4001030602A46414684 -:104B5000BDE8F0410020AAE62DE9FF4FD34C824684 -:104B6000002681B003208946C4F80002D04D687F3A -:104B7000002814BF4FF4C020CE48CF4F38600398B0 -:104B80000CF0C6FB04980CF0A3FBCD494FF00108D4 -:104B9000BAF1000F03D0BAF1010F32D03BE0C74B9E -:104BA00004981A684FF0805C0228DCF8200314BFD8 -:104BB000C0F30620C0F3066022F4FE4242EA002061 -:104BC00018600C6095F82D00012806D0022818BF47 -:104BD000FFDF0CD085F80A801DE0DDE9031395F8AE -:104BE0002C2048460CF0E6FBA96A4618F2E7DDE9FE -:104BF000031295F82C3048460CF097FBA96A46182A -:104C0000E8E7B048086095F82D00012818BFFFDFDD -:104C100020D00220A872AC480660AD49AB480860BD -:104C2000686B40F400206863D4F800924FF0100ADB -:104C3000C4F808A30025C4F80052A6484FF4802BFE -:104C4000C0F800B0FF208DF80000C4F81051C4F87F -:104C500010800EE0DDE9031395F82C2096200CF06F -:104C600087FBA96A4618D4E79DF80000401E8DF81E -:104C700000009DF8000018B1D4F810010028F3D00E -:104C80009DF80000002808BFFFDFC4F80051C4F8F9 -:104C90000C51C4F81051C4F80451C4F81451C4F8AC -:104CA0001851C4F828518C4800680090C4F800924C -:104CB000C7F800B0C4F804A34FF400203860794866 -:104CC000C0F84C8078480068B04228BFFFDF30460B -:104CD000DDE9031205B0BDE8F04FE8E52DE9F8473E -:104CE000724CD4F8000220F00309D4F804034FF00A -:104CF000100AC0F30018C4F808A30026C4F8006224 -:104D00006B4D687F002814BF4FF4C020694871497B -:104D10000860A87A0127012802D0022803D014E0F5 -:104D2000287D10B911E0687D78B1A87EEA7E07FA87 -:104D300000F007FA02F210430860287F800000F1BB -:104D4000804000F5C040C0F81065FF208DF80000DD -:104D5000C4F81061276104E09DF80000401E8DF842 -:104D600000009DF8000018B1D4F810010028F3D01D -:104D70009DF80000002808BFFFDFC4F81061C4F8E8 -:104D800028616E72AE72EF72C4F80092B8F1000F33 -:104D900018BFC4F804A3BDE8F88700684F4920F0A5 -:104DA0007F40086070474FF0E0200221C0F880117A -:104DB000C0F8801270474FF0E0210220C1F80001D6 -:104DC000704747490870704710B546480BF0AAFF76 -:104DD000002818BFFFDF10BD42480BF0B9BF4249A1 -:104DE0000860704730B5324C0546A06AA84228BF1B -:104DF000FFDF012020732561607F40B128442061DE -:104E00002A48D0F8001241F04001C0F800122549AC -:104E10000020C1F84401354920690860606B2649CB -:104E200040F4800060634FF48000086030BD70B5CE -:104E30001F4C0546022020730CF057FA024694F8E6 -:104E40002C1028460CF0E0FA2061617F41B1084443 -:104E500020611648D0F8001241F04001C0F800125D -:104E600010490020C1F844012169A06A08441F4983 -:104E7000086070BD17494FF4800008600C48416B12 -:104E800021F480014163002101737047054801212D -:104E90004160C1600021C0F8441114480160044819 -:104EA00081627047008000404C8500400010004047 -:104EB000380B00200000040404F501408815004070 -:104EC000ACF5014004100040488500404881004096 -:104ED000A8F5014008F50140181100403C150040BC -:104EE000B9000020700B00200415004044850040EC -:104EF000FE4940204877FE490860FE48D0F800127D -:104F000041F04001C0F800127047FA48D0F8001292 -:104F100021F04001C0F80012F549022008607047F6 -:104F2000F448D0F8001221F01001C0F8001201215D -:104F300081617047EF480021C0F81C11D0F80012C1 -:104F400041F01001C0F800127047EA4981B0D1F871 -:104F50001C21012A1EBF002001B07047E64A1268DA -:104F600002F07F02524202700020C1F81C01E348A7 -:104F700000680090012001B0704730B50C00054674 -:104F800008BFFFDF14F0010F1CBF012CFFDF002D55 -:104F90000CBF01200220D54901284872CC72D549A6 -:104FA00004BFD1F8000240F0040007D0022807BF78 -:104FB000D1F8000240F00800FFDF30BDC1F8000268 -:104FC00030BD70B5C94C0023E17A11F0020F18BF53 -:104FD00010F0040F16D111F0100F1CBF94F82F2001 -:104FE000002A02D094F8312062B111F0080F1CBFE2 -:104FF00094F82020002A05D111F0040F03D094F872 -:10500000211001B9012394F809C00122B949BCF16A -:10501000000F06D000F00200184312D0BDE8704027 -:105020005CE6607F002814BF4FF4C020B448B54B45 -:105030001860D1F8000220F00300C1F80002E2720B -:1050400070BD00252846BCF1010F0BD0BCF1020F4A -:1050500018BFFFDF16D0A06A01222844BDE87040C7 -:10506000002124E4D1F8003223F00403C1F8003217 -:105070006072E272A27201231A46002196200CF09F -:1050800054F90FE0D1F8003223F00803C1F80032E0 -:105090006072E2720220A07201231A46002196205B -:1050A0000CF066F90546D6E72DE9F84F964FD7F88C -:1050B0004C218E4C93494FF00108A07A0026CAB1CA -:1050C000012802D0022803D014E0227D12B911E099 -:1050D000627D7AB1A27EE37E08FA02F208FA03F357 -:1050E0001A430A60227F920002F1804202F5C04218 -:1050F000C2F81065626B0A606663217B29B1D7F83C -:105100004411012908BF012200D00022794DD5F8B1 -:10511000101101290CBF40210021012805BFD5F83D -:105120000C31012B002320231943012805BFD5F89A -:105130000431012B002310230B437449022804BFC0 -:10514000D1F800C0BCF1010F07D1D5F80CC1BCF1FA -:10515000010F08BF4FF0080C01D04FF0000C4CEAD3 -:105160000303022804BF0968002905D1D5F80C11F2 -:10517000012908BF042100D000211943022803D1CE -:10518000002A18BF022200D100221143022804BFC6 -:10519000D5F80401012805D1D7F84401012818BF2A -:1051A000012000D1002040EA01095948016811F0AE -:1051B000FF0F03D0D5F81411012900D0002184F885 -:1051C0002E10006810F0FF0F03D0D5F81801012849 -:1051D00000D0002084F82F004E48006884F830008A -:1051E00043480068402803D1FFF705F9012800D0A3 -:1051F000002084F83100C5F80061C5F80C61C5F8DD -:105200001061C5F80461C5F81461C5F81861C5F8E6 -:105210002861414800680090C7F844613F48006831 -:105220004D46DFF8FC900090D9F800106162607F75 -:1052300000281CBF081A60623A480068A0620CF09F -:1052400054F884F82C00A07ADFF8DCA084F82D0054 -:1052500002280CD1607850B1DAF8001009780840C3 -:10526000217831EA000008BF84F8208001D084F85A -:105270002060DFF8B88015F0010F15D098F8001005 -:105280002B4A4908606A52F8211088470121294AAF -:1052900098F80030A06A52F82320904798F8000050 -:1052A00010F0010F0BD01FE015F0200F18BF0221E6 -:1052B000EDD115F0020F18BF0021E8D1EEE7DAF8C2 -:1052C0000000062200F10901A01C0CF0E9FB40B926 -:1052D000207ADAF800100978B0EBD11F08BF01205E -:1052E00000D0002084F82100284625E0380B00205B -:1052F0006015004000100040481500401C1100409F -:105300000000040408F50140008000400014004043 -:105310004016004010140040181100404481004025 -:10532000448500404085004004150040B90000203D -:10533000D022020008230200FFF743FE15F0020FFF -:1053400005D03D4898F8001050F82100804715F02E -:105350000C0F07D0394898F8001050F82110C5F309 -:10536000C000884715F0200F05D0354898F8001088 -:1053700050F82100804798F80000022805D105F078 -:105380006E00402806D101F0DDFB98F800000428EB -:1053900028BFFFDFA07A022818BFBDE8F88F207B66 -:1053A000002808BFBDE8F88FC7F84461022815D06F -:1053B000012818BFFFDFA16A2069884298BFFFDF7C -:1053C000D4F81000C9F80000606B1E4940F480005A -:1053D00060634FF480000860BDE8F88F2169A06A1F -:1053E0000844EFE7012804BF28207047022804BFC3 -:1053F0001820704700B5FFDF282000BD012804BF3A -:1054000041F6A4707047022804BF41F2883070470B -:1054100000B5FFDF41F6A47000BD012804BF41F2D2 -:10542000D4707047022804BF41F20400704700B5F1 -:10543000FFDF41F2D47000BDD8220200E822020052 -:10544000F822020004F5014010B53F480AF0F7FBCE -:1054500000213D480AF022FC01213B480AF0F2FB02 -:105460003A49002081F822004FF6FF7088843849BD -:105470000880488010BD704734498A8C824218BF2A -:105480007047002081F822004FF6FF708884704733 -:105490002D49016070472E49088070472B498A8C3E -:1054A000A2F57F43FF3B03D000210160084670470F -:1054B00091F822202549012A1ABF0160012000200D -:1054C0007047224901F1220091F82220012A04BFED -:1054D00000207047012202701D4800888884104611 -:1054E00070471B49488070471849194B8A8C5B8864 -:1054F0009A4206D191F82220002A1EBF01600120A5 -:105500007047002070471148114A818C528891429F -:1055100009D14FF6FF71818410F8221F19B10021C3 -:10552000017001207047002070470848084A818CAC -:105530005288914205D190F8220000281CBF00201B -:1055400070470120704700009A0B0020740B002068 -:10555000BA0000207047574A012340B1012818BF04 -:105560007047137008689060888890817047537006 -:105570000868C2F802008888D08070474D4A10B190 -:10558000012807D00EE0507860B1D2F80200086020 -:10559000D08804E0107828B19068086090898880ED -:1055A0000120704700207047424910B1012803D004 -:1055B00006E0487810B903E0087808B10120704788 -:1055C0000020704730B58DB00C4605460D2104A86B -:1055D0000CF02BFBE0788DF81F0020798DF81E0071 -:1055E00060798DF81D002868009068680190A868AF -:1055F0000290E868039068460BF0B2F920789DF8B5 -:105600002F1088420CD160789DF82E10884207D167 -:10561000A0789DF82D10884202BF01200DB030BD4A -:1056200000200DB030BD30B50C4605468DB04FF0B2 -:10563000030104F1030012B1FEF790FA01E0FEF756 -:10564000E0FA60790D2120F0C00040F04000607168 -:1056500004A80CF0EAFAE0788DF81F0020798DF8A4 -:105660001E0060798DF81D00286800906868019020 -:10567000A8680290E868039068460BF071F99DF8FD -:105680002F0020709DF82E0060709DF82D00A070F6 -:105690000DB030BD10B5002904464FF0060102D010 -:1056A000FEF75CFA01E0FEF7ACFA607920F0C0008A -:1056B000607110BDBE00002070B5FA4E044696F829 -:1056C00092000025012828D096F88C00012833D0BC -:1056D00096F86A0001281CBF002070BD6570132079 -:1056E0002070202206F16C01A01C0CF005FA0120AC -:1056F000A07186F86A50B6F86E10A6F88E10EA49C6 -:1057000049684A7B86F8902086F88C000888FBF769 -:10571000AFFAFAF71FFF012070BD657019202070E5 -:10572000D6F89300C4F80200D6F89700C4F8060033 -:1057300086F89250012070BD657006202070D6F862 -:105740008E00C4F8020086F88C50E4E7D54890F843 -:105750006A10002914BFB0F86E004FF6FF70704752 -:1057600070B5D14800250570017800291CBFFFDF06 -:1057700070BDCC4C84F8625084F8635084F8645057 -:1057800084F8655084F85E5084F8605084F8565070 -:1057900084F8365084F867507F21817094F8660051 -:1057A00028B1FFF7B2FBFEF706FE84F8665084F8D6 -:1057B0006A5084F88C5084F89250BC480AF0D6F8AD -:1057C000BDE87040BA480AF0D1B8B64890F8620017 -:1057D0007047B44900B591F8580091F85710C0F3DC -:1057E0008002C0F340031A4400F001001044052970 -:1057F00010D2DFE801F00B070B030900AD4931F8C7 -:10580000100000BDAC4800BDAC4900E0AC4931F827 -:10581000100000BDFFDF002000BDA24840F2712152 -:10582000B0F85A00484370479E4890F86800002836 -:1058300018BF0120704710B59A4C207A022818BF73 -:10584000032808D1207C04F1110108F071FF082819 -:105850001CBF012010BD207A002816BF022800209E -:105860000120BDE81040FFF79FBE8E4908727047C7 -:105870008C4981F8600070472DE9F041894C82B075 -:10588000207A002816BF022800200120607204F14F -:105890000A01FFF773FE207A022816BF03280121B0 -:1058A000002184F85F10082084F85D00607A0126EA -:1058B000002504F10A02012804BF527912F0C00F3A -:1058C0000AD004F10A02012804D1507900F0C00086 -:1058D000402801D0002000E0012084F85E0029B9B2 -:1058E00094F85700012818BF042806D1207C04F141 -:1058F000110108F01DFF84F85D002560FDF7B8F880 -:1059000060604FF0000894F85D0008F02DFF074636 -:1059100094F85F00002818BF002F04D010213846EB -:1059200009F093FD68B194F8600000281CBF94F85A -:105930005E0000281DD0607A04F10A0101280ED013 -:1059400012E06672424604F10A013846FFF76BFE28 -:1059500094F85D1004F10A0008F0FEFF09E04879B0 -:1059600000F0C000402840D0294604F10A00FFF7AB -:1059700091FE04F10A014D480AF01EF8617A4B4885 -:105980000AF03FF804F10A0149480AF015F8617A73 -:1059900047480AF036F894F8570001281EBF04283B -:1059A00002B0BDE8F081002594F85D0008F0E5FE46 -:1059B000040004BF02B0BDE8F081102109F045FDEC -:1059C00000281CBF02B0BDE8F0812A466946204687 -:1059D000FFF729FE6946354809F0FCFF01213348ED -:1059E0000AF01CF802B0BDE8F08108F0EEFF424674 -:1059F00004F10A01FFF717FEBBE770B5294C417BA4 -:105A000084F85810017984F8571001290CBF00223E -:105A10000288A4F85A20827B84F868208279002AC0 -:105A200016BF022A002201222274D0F80720C4F8EF -:105A30001120B0F80B00A4F8150094F856000125C9 -:105A4000002818BF84F8635094F83600002818BF67 -:105A500084F8645005293AD2DFE801F0030C1E34C3 -:105A60000C000021114809F084FF01210F4809F0C2 -:105A7000BFFF2DE001210D4809F07BFF04F111016A -:105A80000A4809F0A7FF217C084809F0C7FF012157 -:105A9000064809F0ADFF1BE00621044809F069FF44 -:105AA00016E00000BC0B0020CC000020580C0020A9 -:105AB000800C002028230200D0891300302302002C -:105AC000202302000221FE4809F053FF00E0FFDF1F -:105AD0000421FC4809F04DFF84F86250002070BD9D -:105AE00070B5F94C0546002084F864002A4604F19C -:105AF00017000CF001F884F83650012084F8640097 -:105B000070BD10B5F04C002284F8632084F8560074 -:105B1000024604F137000BF0EFFF012084F8630028 -:105B200010BDE94981F8670070472DE9F041E74E63 -:105B300082B0307808BBE44C94F86200E8B1FFF71B -:105B400043F9002584F8615075702846FFF739F94C -:105B5000FEF7ECFDFEF7C3FDDD48FEF788FEDD48ED -:105B6000FFF71BF994F85800002610F0010F08D039 -:105B70002520FEF784FE012612E002B00C20BDE8CD -:105B8000F08110F0020F04D02620FEF778FE0226E6 -:105B900006E010F0040F03D02720FEF770FE042665 -:105BA000FEF79DFD84F85C60FFF705F900210122F6 -:105BB0000846FEF78DFF0F210520FEF71DFE94F825 -:105BC0005E00002804BF94F85F00002805D194F817 -:105BD0005700012818BF042874D1FCF749FF064676 -:105BE00031466068FDF755FCBB4990FBF1F701FBBE -:105BF000170041423046FCF746FC6060206838449C -:105C0000206008F092FD2168884274D8C4E90056EB -:105C10004FF0010894F85D0008F0A6FD064694F8E0 -:105C20005F000127002818BF002E04D01021304645 -:105C300009F00BFC68B194F8600000281CBF94F8D0 -:105C40005E0000281DD0617A04F10A0001290ED0FF -:105C500012E03A46677204F10A013046FFF7E3FCAE -:105C600094F85D1004F10A0008F076FE09E040792E -:105C700000F0C00040281DD0414604F10A00FFF7A3 -:105C800009FD04F10A018E4809F096FE617A8C48FC -:105C900009F0B7FE04F10A018A4809F08DFE617A25 -:105CA000884809F0AEFE94F85700012818BF042870 -:105CB00021D108E008F089FE3A4604F10A01FFF715 -:105CC000B2FCDEE717E0012794F85D0008F055FD0F -:105CD000060010D0102109F0B8FB60B93A466946B9 -:105CE0003046FFF7A0FC6946754809F073FE0121B4 -:105CF000734809F093FE617A04F10A00FEF770FD23 -:105D000094F8570001281EBF042894F86300002867 -:105D100008D094F8562004F13701694809F09CFE38 -:105D200084F8635094F8640040B194F8362004F18C -:105D30001701644809F0BCFE84F8645008F069FD5E -:105D4000664808F0FAFD84F86600FFF745F802B0EF -:105D50000020BDE8F0815D494860704770B55A4C3D -:105D600006002BD094F8581094F85C20002521EA06 -:105D7000020010F0010F04D02520FEF780FD012560 -:105D800015E011F0020F02D012F0020F06D011F050 -:105D9000040F0CD012F0040F05D008E02620FEF707 -:105DA0006EFD022503E02720FEF769FD0425FEF7BE -:105DB00096FC94F85C00284384F85C0094F8610039 -:105DC00040B194F85700012808BFFFDFBDE87040DC -:105DD00000F0BFBA36B1002201234FF4967110468D -:105DE000FEF7BAFE3648FEF7FAFF94F8570005288A -:105DF00009D2DFE800F0030303090300012108468C -:105E0000FFF7BBF800E0FFDF94F8580094F85C104F -:105E100030EA01014FF0010002D02C49087070BD3A -:105E200094F85710012912BF84F86100002184F80A -:105E30005C10F2E710B5FEF7C7FF2448007840B9C0 -:105E4000214890F8620020B10020FFF787FF002072 -:105E500010BDFFF71BF8FFF70DF8FEF73FFFFEF749 -:105E6000A2FFFEF7B9FF0C2010BD184901204870B1 -:105E70007047154981F86500704770B5002503F03B -:105E8000A3FA48B1114E3078012809D0022801D078 -:105E9000032842D0FFDF70BDBDE8704000F059BA62 -:105EA000094C94F85700032837D094F8660018B1CD -:105EB000FEF76DFAFFF71CF80848FEF790FF0FE0B9 -:105EC000580C0020800C0020BC0B0020CC000020CF -:105ED0001B2302001823020040420F00A80C0020E0 -:105EE0009620FEF7A4FF94F85700012818BF042855 -:105EF0000AD094F86800012814BF0328102545F043 -:105F00000E010020FFF739F894F86700012808BF58 -:105F1000FFF710F80220307070BDBDE8704001201E -:105F20001CE770B5FE4DFF4C95F86700012817D0AF -:105F300095F8660018B1FEF7E8FFFEF73CFA03F0AB -:105F400043FAB8B12078022818BFFFDF0120FFF71D -:105F500005FF207800281EBF20780128FFDF70BDD4 -:105F6000F148FEF7F2FF002804BF7F20A070FEF783 -:105F7000D7FFDDE7BDE8704000F0EBB92DE9F05F39 -:105F800007464FF00009FEF76AFCE64E824630787D -:105F9000022818BFFFDFE24D7F2495F86700012833 -:105FA00030D0E24809F004FD83464FF0FF08002F8F -:105FB00000F0E480DD4809F00EFE002800F0DE80ED -:105FC000FEF716FC002800F0D98095F86600D74F40 -:105FD00068B108F003FC8046FF2808D00146F81C91 -:105FE00008F0EBFB404608F004FC40EA0A0A584679 -:105FF0004FF0000B062880F0C180DFE800F0BFBF43 -:10600000BF0CBF69C848FEF7A0FF002808BFB470E6 -:10601000FEF786FFC5E795F85700012818BF04284A -:1060200070D0BAF1000F18D195F86800002818BF99 -:10603000022867D13878F91CC0F3801008F078FB8B -:10604000824608F0DAFC40B1504608F096FB20B1D9 -:10605000102109F0FAF9002854D095F867000128BA -:1060600004BF95F89200002805D0B148FEF7B7FEAE -:106070000320307084E0012085F89200B8F1FF0F12 -:106080000FD005F19402511E404608F07FFB002816 -:1060900008BFFFDF95F8930040F0020085F89300F9 -:1060A0000CE03878C0F3801085F89300D5F8EF0045 -:1060B000C5F89400B5F8F300A5F89800B07805F19C -:1060C0009A077F2808BFFFDFB0783870B470CCE73C -:1060D0003878297CC0F38010884209D1062205F166 -:1060E0001101F81C0BF0DCFC002808BF012000D0D7 -:1060F0000020B8F1FF0F06D0C0B995F85D0040450B -:106100001AD113E03AE0B8B13878F91CC0F3801026 -:1061100008F00EFB044608F070FC38B1204608F089 -:106120002CFB18B1102109F090F928B195F857000F -:10613000012818BF04281DD095F85700F0B9BAF10E -:10614000000F17D195F86800002818BF012815D155 -:106150003878F91CC0F3801008F0EAFA044608F019 -:106160004CFC38B1204608F008FB18B1102109F0AA -:106170006CF918B195F865002C46D8B14FF00109BB -:1061800095F8660018B1FEF7C0FEFEF714F9B9F1F4 -:10619000000F1CBF0120FFF7E1FD307800281ABF77 -:1061A00030780128BDE8F09F3078032818BFFFDF62 -:1061B000BDE8F09F7068D4F8FB10C0F80E10B4F87A -:1061C000FF10418294F801110175B97D4175B7F84E -:1061D0001710C182B7F819104180B7F81B108180E1 -:1061E000B7F81D10C180534908300BF02AFE97F80C -:1061F000240000F01F017068017697F82410490907 -:1062000080F864113A78417BC2F340121140417327 -:1062100094F86A00002818BFFFDF84F86CB0D6F845 -:1062200004A0BAF80000A4F86E00BAF80200A4F8BE -:106230008400BAF80400A4F88600BAF80600A4F8AE -:1062400088009AF8640184F88A0094F85F0048B1E5 -:10625000607A04F10A01012804D1487900F0C000F5 -:10626000402835D094F8600040B1607A04F10A010A -:10627000012804BF487910F0C00F29D0C4F878B0C5 -:10628000A4F87CB03878B8F1FF0FC0F380108AF81A -:106290001900D4F8EF00CAF81A00B4F8F310AAF8FD -:1062A0001E101CD0C4F87E00BAF81E00A4F88200AC -:1062B00004F17202511E404608F068FA002808BF37 -:1062C000FFDF94F8710040F0020084F8710015E0DF -:1062D000D4F80A00A067E089A4F87C00D2E7164849 -:1062E0000BF0A6FD9AF8190084F87100DAF81A008C -:1062F000C4F87200BAF81E00A4F87600012084F8F1 -:106300006A0070680088FAF7B3FCFAF713F986F8A8 -:1063100000B0FEF7BBFDFEF7ADFDFEF7DFFC0DE0C4 -:10632000BC0B0020CC000020CE000020A80C0020D8 -:10633000800C0020C70C00203A0C0020FEF733FD33 -:10634000FEF74AFD012003F09CF919E7012203F052 -:1063500048BA70B5FEF79AFDFEF78CFDFEF7BEFC5D -:10636000FEF721FD1F4C002694F8660028B1FEF7C9 -:10637000CCFDFEF720F884F866601B4D2E70FEF70A -:106380002BFD94F85700012804D0BDE87040002090 -:1063900003F077B9022003F074F994F86A0000283A -:1063A00018BFFFDF6878002808BF70BD207C84F824 -:1063B0007100D4F81100C4F87200B4F81500A4F804 -:1063C00076003C2084F86C0068680188A4F86E10A0 -:1063D000012184F86A100088FAF74AFCFAF7AAF853 -:1063E0006E7070BDBC0B0020CC0000202DE9F04188 -:1063F000FF4F044600207978FE4D4FF00108064615 -:1064000011B1012923D007E095F85310002918BFD6 -:1064100087F8018000D0012079782B2211FB02F14E -:10642000294491F82820104318D02A22A01C293191 -:106430000BF062FB66700420207084F8028078788C -:106440002B2110FB01F0284480F8286023E095F808 -:106450002810002918BF7E70DDD1DDE795F87E0099 -:10646000E0B1D5F87F00C4F80200D5F88300C4F885 -:106470000600D5F88700C4F80A00D5F88B00C4F8E8 -:106480000E0095F88F00A07466701220207084F8BA -:10649000028085F87E600120BDE8F08195F8220039 -:1064A00001281ED0287801281CBF0020BDE8F081FB -:1064B0006670132020702022A91CA01C0BF01CFB6E -:1064C000A6712E70A888A884D5F89C00417B85F819 -:1064D000261085F822800088FAF7CAFBFAF73AF806 -:1064E000D9E7667006202070686AC4F8020085F853 -:1064F0002260D0E7BF480178002914BF80884FF69A -:10650000FF7070472DE9F041BA4C064694F8280018 -:10651000002818BFBDE8F081304609F049FA01466D -:1065200001250020072937D2DFE801F00A040736E9 -:106530003636090084F82A5009E0032000E00220E2 -:1065400084F82A0004F13301304609F09BFA84F8FC -:10655000320094F8AF0018B1FDF74DFF01281FD0AD -:10656000304609F057FA84F82B0004F12C0130462C -:1065700009F029FA9E4E04F1520730787F2808BFAF -:10658000FFDF307838707F20307084F82850BDE805 -:10659000F041032001F005BF84F83200BDE8F0812E -:1065A000FDF76CFF04F12C02511E08F0EFF80028F3 -:1065B00008BFFFDF94F82B1041F0020184F82B1084 -:1065C000D8E710B5002001F0F6FD8A4CA8B1FEF71F -:1065D000F2FB012200211046FEF7F1F904F1BC00A4 -:1065E000FEF7FDFBD4F8B400FEF7FCFB94F8A00026 -:1065F000032818BF02281FD022E0FEF747FCFEF751 -:1066000039FCFEF76BFBFEF7CEFB94F8AF0030B120 -:10661000FEF77BFCFDF7CFFE002084F8AF000120E1 -:1066200084F8B800022084F8B200FEF7D5FBBDE87C -:106630001040002001F0B5BE01210020FEF79DFCB6 -:10664000FEF778FC94F8AF0018B1FDF7A0FEFEF756 -:106650004FFC032084F8B20010BD66490028B1F851 -:10666000BA202CD0FF2A0BD24FF6FF7000EA42006E -:10667000A1F8BA00FF2888BFFF2001D9A1F8BA000D -:106680005B484268012A12BF002A0D224260D243B1 -:10669000C2EBC20303EB021291F8B930DB4303EB08 -:1066A000830CCCEB83131A444260900CB1F8BA20EF -:1066B000B0FBF2F302FB130081F8B9007047012A26 -:1066C000DED95008A1F8BA0008BF0120D8D1D5E71B -:1066D00070B5484C002584F8B250012684F8B260A9 -:1066E00094F8B20002281BBF94F8B20001280020E1 -:1066F000FFDF18BF70BD2B2101FB004181F828503E -:10670000401CC0B20228F6D3257084F8225094F8B9 -:10671000AF0028B1FEF7F9FBFDF74DFE84F8AF504E -:1067200084F8AE5084F89B60324884F8A05084F816 -:10673000B15040F2011120F8981F817070BD2DE911 -:10674000F0412C4C05460C2794F8B20001281FBFDD -:1067500094F8B20002280C20BDE8F081FEF734FB6B -:10676000FDF7E4FFFDF7BBFF94F898000126002831 -:1067700001BF94F89900002894F89A00002874D07A -:1067800094F8A000032802D0022805D008E00521D3 -:10679000194800F0DEFE03E00321174800F0D9FE9F -:1067A00094F8AC00002804BF94F8AD00002847D04E -:1067B000FCF75EF907463946D4F8A800FCF769FEF5 -:1067C0000E4990FBF1F801FB180041423846FBF7F7 -:1067D0005AFEC4F8A800D4F8A4004044C4F8A400A9 -:1067E00007F0A3FFD4F8A410884229D8002007E0BE -:1067F000D4000020D00C0020B40D002040420F0037 -:10680000C4E9290794F8AD0000281CBF012008F056 -:10681000AFF8012194F8AE0000281CBF94F8AC003A -:1068200000280DD094F8910004F19202012804D1BF -:10683000507900F0C00040280ED01046FEF72AFF25 -:1068400094F8911004F19200FDF7CAFF94F8B20099 -:106850000027012818D112E008F0B7F8324604F1F9 -:106860009201FEF7E0FEEBE7FFE794F8B2000228A2 -:1068700004BF84F8B2600C2006D1BDE8F08184F832 -:10688000B860022084F8B20094F89B0080B108F050 -:1068900018F8FE4808F051F884F8AF00FC48C4F836 -:1068A000B450FEF77AFAFEF797FA3846BDE8F08161 -:1068B00007F0AFFFEDE770B5FEF786FAF54C94F8F8 -:1068C000B200022803D0FEF787FA0C2070BD012029 -:1068D00084F8B900A4F8BA000220FEF772FAEE4874 -:1068E000FDF7C5FFED4B002004F1980294F8B110BC -:1068F000491CA3FB015C4FEA5C0CACEB8C0C6144C3 -:10690000C9B284F8B110895C012907D0401CC0B21B -:106910000328EBD3FFF755FE002070BD94F8B100BB -:10692000DF49085CFDF7ABFFFDF7D9FEF2E710B5D4 -:10693000D84C94F89030022B14BF032B00280BD1B5 -:1069400000291ABF022901200020114607F0F0FE9D -:1069500008281CBF012010BD94F89000002816BF25 -:10696000022800200120BDE81040FEF71DBEC948E6 -:1069700090F89000002816BF022800200120FEF7A2 -:1069800013BEC44981F890007047C24981F8AE0037 -:10699000704770B5BF4C94F89000002816BF0228CD -:1069A0000020012084F8910004F19201FEF7E6FD39 -:1069B00094F89000022816BF03280121002184F8D2 -:1069C000AD1094F89100002504F19202012804BF53 -:1069D000527912F0C00F0AD004F19202012804D1BA -:1069E000507900F0C000402801D0002000E00120D4 -:1069F00084F8AC00002804BF002970BDC4F8A4507E -:106A0000FCF736F8C4F8A80094F8AD0000281CBFC5 -:106A1000002007F0ADFF002694F8AE0000281ABF52 -:106A200094F8AC00002870BD94F8910004F1920134 -:106A3000012804D1487900F0C000402806D029463A -:106A400004F19200BDE87040FEF724BE07F0BDFFE0 -:106A5000324604F19201BDE87040FEF7E4BD002823 -:106A600016BF0228012200228A4981F89B2081F862 -:106A7000A100704770B5874D0C4600280CBF01215E -:106A8000002185F89B1085F8A2004FF0080085F8DA -:106A9000A3000BD1002C1ABF022C012000201146AC -:106AA00007F046FE85F8A300082801D0002070BD3D -:106AB000022C14BF032C1220F8D170BD754A032894 -:106AC00008BFC2F89C1082F8A000002070477149EE -:106AD00091F8A000032804D0012818BF022807D08D -:106AE00004E091F8A200012808BF70470020704719 -:106AF00091F8A100012814BF03280120F6D17047A6 -:106B000010B5FEF7C3F9FEF7B5F9FEF7E7F8FEF7A3 -:106B10004AF9604C94F8AF0030B1FEF7F6F9FDF792 -:106B20004AFC002084F8AF00012084F8B80002205D -:106B300084F8B200FEF750F9002010BD554981F8E5 -:106B4000B300704710B5FEF7A1F9FEF793F9FEF711 -:106B5000C5F8FEF728F94F4C94F8AF0030B1FEF7B6 -:106B6000D4F9FDF728FC002084F8AF00012084F858 -:106B7000B800022084F8B200FEF72EF9BDE81040FC -:106B8000002001F00EBC2DE9F84F424CFF217F2779 -:106B9000444E84F8B0104FF00008002800F0DC826A -:106BA00004F1BC0008F0E7FF30B904F1BC0009F0C3 -:106BB00002F8002800F0D08294F8B200334D052886 -:106BC00080F0C782DFE800F0F1F1F103F0002F4818 -:106BD00008F0EEFEB07094F89B0030B9FDF73FFE70 -:106BE000002808BF4FF0000801D04FF0010894F8CA -:106BF000AF0078B107F0F2FD84F8B0000146FF283D -:106C00000CD0E81C07F0D9FD94F8B00007F0F1FDB6 -:106C100040EA080894F8B000FF2812D107F081FE7E -:106C200084F8B00094F89B1059B1082809D128784D -:106C3000E91CC0F3801007F07BFD082818BF4FF057 -:106C40000008B078072880F0C781DFE800F04BB873 -:106C500004FCFCFC300094F8AF0018B1FEF755F9C5 -:106C6000FDF7A9FB0F48FEF770F9002808BF377041 -:106C7000FEF756F9B8F1000F00F0598194F8A00022 -:106C8000012818BF022840F052810DE08C0D002031 -:106C900038230200D00C00203E230200ABAAAAAA8F -:106CA0003B230200D4000020FEF718F868E094F8B7 -:106CB000AF0018B1FEF729F9FDF77DFBFE48FEF79E -:106CC00044F9002808BF3770FEF72AF9B8F1000F21 -:106CD00000F02D8194F8A00002284AD001284FD05E -:106CE00000F025B994F8AF0018B1FEF70EF9FDF7E2 -:106CF00062FBF148FEF729F9002808BF3770FEF75C -:106D00000FF9B8F1000F00F0128194F8A0000228EA -:106D10002FD0012834D003281CBFFFDFBDE8F88F37 -:106D2000E978D4F89C00827E91421BD12979C27EF9 -:106D3000914217D16979027F914213D1A979427F9B -:106D400091420FD1E979827F91420BD1297AC27F9A -:106D5000914207D12978427EC1F38011914208BF48 -:106D6000012100D0002194F8A220012A0ED0E9B11F -:106D7000D9E0D248FFF7C6FBBDE8F84F00F002BBF0 -:106D8000CE48FFF7BFFBBDE8F84F1AE4002974D1E5 -:106D900000F11A01C94808F016FEC84808F03AFE8A -:106DA000D4F89C104876BEE024E1D2E194F8A30028 -:106DB00008287DD094F8B01081425ED0B7E094F8F6 -:106DC000AF0018B1FEF7A1F8FDF7F5FABA48FEF7E3 -:106DD000BCF8002808BF3770FEF7A2F894F8AD00A1 -:106DE00000280CBF4FF0010B4FF0000B4FF00009D3 -:106DF0002878C10905F1090007D0407900F0C000EA -:106E0000402808BF4FF0010A01D04FF0000A94F863 -:106E1000A000032806D194F89B00002818BF94F81E -:106E2000A30001D194F8B00007F09EFC009088B157 -:106E3000102108F00AFB002818BF4FF0010BBAF12F -:106E4000000F07D000E0C7E005F109010098FEF748 -:106E5000B9FB814694F8A00003280FD0FDF73EFF50 -:106E6000B8F1000F69D0FDF7C3FC50EA090064D007 -:106E70009248FFF747FB00F041B954E0D4F89C007A -:106E8000E978827E91421DD12979C27E914219D141 -:106E90006979027F914215D1A979427F914211D13E -:106EA000E979827F91420DD1297AC27F914200E037 -:106EB0003DE007D12978407EC1F38011814208BFAF -:106EC000012500D0002594F8B000082805D094F8DA -:106ED000A310884208BF012600D00026B9F1000F98 -:106EE00005D1BBF1000F04D0FDF782FC08B10121F0 -:106EF00000E00021B8F1000F09D094F8A2000128A9 -:106F000003D020B955EA060001D0012000E000209E -:106F100001420CD094F8A200012804BF002DD4F83F -:106F20009C003FF435AFBDE8F84F00F08ABAFDF79A -:106F3000D5FEBDE8F84FFFF744BB94F8A100032845 -:106F400018BF02287ED1BAF1000F7BD0B9F1000F33 -:106F500078D1DFF8688194F87E00002872D101258D -:106F600084F8805094F8AF0018B1FDF744FA012876 -:106F700021D0404608F04EFD84F8810004F18201E2 -:106F8000404608F020FD404608F051FD84F8880096 -:106F900004F18901404608F024FD307804F18F089F -:106FA0007F2808BFFFDF307888F80000377084F84A -:106FB0007E500320A0E0FDF761FA04F18202511E29 -:106FC00007F0E4FB002808BFFFDF94F8810040F0E1 -:106FD000020084F88100D6E794F8AF0018B1FDF7FD -:106FE00094FFFDF7E8F93448FDF7AFFF00286CD1B6 -:106FF0003770CAE0314808F0DBFCB0703048E978FF -:10700000427A91421CD12979827A914218D16979C8 -:10701000C27A914214D1A979027B914210D1E979C7 -:10702000427B91420CD1297A827B914208D1297806 -:107030000078C1F38011B1EBD01F08BF012500D04B -:10704000002500E042E0FDF749FEB07804286BD14E -:10705000D5B31948FDF779FF002808BF3770FDF751 -:107060005FFF94F8B80000281CBF0020FFF7F5FA76 -:107070004FF0010884F8B880104D94F8530028BBF5 -:10708000042084F8550094F8AF00A5F1910918B1D7 -:10709000FDF7B1F9012835D0284608F0BBFC0949B5 -:1070A00081F8560009F12C01284608F08CFC00BF3D -:1070B00004F15E0128460AE0D40000208C0D002077 -:1070C000B40D0020D00C00202EE05EE016E008F0A9 -:1070D00005FD84F85D001F2884BF1F2084F85D0033 -:1070E00004F17D0530787F2808BFFFDF30782870F5 -:1070F000377084F85380042001F053F9BDE8F84F4D -:10710000FFF75FBAFDF7BAF909F12C02511E07F03B -:107110003DFB002808BFFFDFFE4890F8560040F016 -:10712000020089F82B00C3E7FB48FDF70EFF00289B -:1071300008BF3770FDF7F4FE94F8B800002804BFCC -:107140000120FFF78AFA84F8B880BDE8F84FFFF70E -:1071500038BAFFDFBDE8F88F94F8B200052828BFE1 -:10716000BDE8F88FDFE800F0030303041900F1E73E -:1071700094F8AF0018B1FDF7C8FEFDF71CF9E6481A -:10718000FDF7E3FE00283FF433AFFDF7C9FEFDF73E -:10719000A5FDBDE8F84FFFF714BADF48FDF7D5FEAF -:1071A000002808BF3770FDF7BBFE94F8B800002830 -:1071B00004BF0120FFF751FA84F8B880FDF78EFD77 -:1071C000BDE8F84FFFF7FDB970B5D24C94F8B200A6 -:1071D000072878D2DFE800F08D8D8D8D8D041000AA -:1071E000CE48FDF7FCFDFDF7A5FE9620FDF71FFE3E -:1071F000042084F8B20070BDFDF748FEFDF73AFEAA -:10720000FDF76CFDFDF7CFFD012584F8B850022095 -:1072100084F8B200FDF7E0FD2078002818BFFFDFFA -:107220000026A670D4F89C000188A1804188618363 -:107230008188A183C088E08384F8206094F8AD1031 -:10724000B74849B10178C21CC1F3801121B151790D -:1072500001F0C00140292ED094F8AE1041B110F8D1 -:10726000031BC1F3801119B1407910F0C00F22D077 -:10727000AC480AF0DDFD00BF94F8AF0018B1FDF78F -:10728000BAF8012820D0D4F89C00417EE171D0F8F2 -:107290001A10A160C08BA081666126832570D4F886 -:1072A0009C000088F9F7E4FCF9F744F9BDE8704068 -:1072B000022001F076B8D4F8E700C4F80E00B4F864 -:1072C000EB006082D8E714E0FDF7D8F804F108027B -:1072D000E11D07F05BFA002808BFFFDFE07940F00E -:1072E0000200E071D4F8BF006061B4F8C3002083ED -:1072F000D4E7FFDF70BD70B5864C94F8B20000256E -:10730000052828BF70BDDFE800F03939391B0300BC -:107310008148FDF71AFE10B97F497F200870FDF7FC -:10732000FFFD94F8B800002804BF0120FFF795F98D -:1073300084F8B850FDF7D2FCBDE87040FFF741B9C2 -:10734000FDF7A4FDFDF796FDFDF7C8FCFDF72BFD4D -:1073500094F8AF0028B1FDF7D8FDFDF72CF884F8BC -:10736000AF50012084F8B800022084F8B200FDF785 -:1073700033FDBDE87040002001F013B870BD01225C -:1073800001F0E1B870B5012000F015FF614CC8B103 -:1073900004F1E401A1F1280008F04CFB04F1E4063B -:1073A00094F89110304608F02CFB04F1920130461D -:1073B00008F002FB94F8AD00C0B394F8A0000328D5 -:1073C0001FD025E0FDF762FDFDF754FDFDF786FCBB -:1073D000FDF7E9FC94F8AF0030B1FDF796FDFCF73E -:1073E000EAFF002084F8AF00012084F8B8000220F2 -:1073F00084F8B200FDF7F0FCBDE87040002000F01A -:10740000D0BF94F89B00002818BF94F8A30001D1C6 -:1074100094F8B00007F0DBFA050007D001213046F0 -:1074200008F0EFFA2946304608F0C6FA3C48FDF766 -:10743000D6FC01210846FDF7A0FD052084F8B20026 -:1074400070BD70B5022000F0B6FE324C68B301206A -:1074500000F0A7FF04F1E401A1F1280008F0EAFA26 -:10746000D4F89C00417B04F1E40008F0C1FAD4F8A0 -:107470009C0004F1BC0204F1E4061278417BC2F3E3 -:1074800040121140417394F89110304608F0B9FA57 -:1074900004F19201304608F08FFA94F8AD00B8B3C9 -:1074A00094F8A00003281FD025E0FDF7EFFCFDF7BE -:1074B000E1FCFDF713FCFDF776FC94F8AF0030B16A -:1074C000FDF723FDFCF777FF002084F8AF000120D3 -:1074D00084F8B800022084F8B200FDF77DFCBDE816 -:1074E0007040002000F05DBF94F89B00002818BF9A -:1074F00094F8A30001D194F8B00007F068FA0500F1 -:1075000014D00121304608F07CFA294630460BE0C1 -:107510000CE00000D00C0020D40000208C0D0020D6 -:10752000B40D0020DE0C002008F046FAD4F89C00D0 -:10753000C18A324808F0FEFAD4F89C00417D2F48F9 -:1075400008F0FCFA2D48FDF74AFC062084F8B2004A -:1075500070BD70B50C46054608F008FA032C47D0FC -:10756000052C18BF70BD0521284608F002FA244CEE -:10757000D4F89C0000F10E01284608F0C5FAD4F8B2 -:107580009C0000F11201284608F0C2FAD4F89C00D1 -:10759000417D284608F0D2FAD4F89C00C18A2846DA -:1075A00008F0C8FAD4F89C004188284608F0B6FADA -:1075B000D4F89C008188284608F0B4FAD4F89C00DE -:1075C000C188284608F0B2FAD4F89C0000F10801FE -:1075D000284608F0CDFAD4F89C00017E284608F031 -:1075E000AFFA94F8B3102846BDE8704008F0B2BA7C -:1075F0002846BDE87040032108F0BBB9B40D002057 -:10760000D00C00202DE9FF4F06460C46488881B07B -:1076100040F2E24148430090E08A002500FB01FB74 -:1076200094F8630091460D2818BF0C281ED0252819 -:107630001EBF94F8640025284FF0000A16D0049865 -:1076400018B10121204603F029FB94F8510094F869 -:10765000528094F8C810074659B1012958D0022920 -:107660003DD0032918BFFFDF52D0A6E04FF0010A3A -:10767000E5E7B9F1000F08BFFFDFFE4D686800289D -:1076800008BFFFDF94F85100FDF7C7FE00F2E731B5 -:107690004FF47A70B1FBF0F0696800EB010994F8DF -:1076A0005100FDF7BAFE94F85110022907BFF249C4 -:1076B0004FF47A72F1494FF4C8621144084400F261 -:1076C000E7314FF47A70B1FBF0F040F2E241081A72 -:1076D0002969584449440844051D012015E0E5483E -:1076E000A9F101014068084308BFFFDFE448B9F190 -:1076F000000F006800EB0B0506D0DE48406800F282 -:107700002230A84288BFFFDF032084F8C80053E07E -:1077100094F86310009D25291CBF94F86410252956 -:1077200036D1B4F85810B4F8EA20891A491C09B2C5 -:1077300000292DDB94F8E81009B30F4694F8E910FE -:10774000002918BF8846022807BFCB484FF47A713A -:10775000CA484FF4C8610144022F07BFC6484FF41E -:107760007A72C6484FF4C8621044814208D9081A98 -:1077700000F5FA714FF47A70B1FBF0F0054407E0C0 -:10778000401A00F5FA714FF47A70B1FBF0F02D1A3F -:10779000B9F1000F10D0DFF8DC92D9F8040020B95D -:1077A000B9F80200002818BFFFDFD9F8040000F282 -:1077B0002230A84288BFFFDF05B9FFDF2946D4F891 -:1077C000CC00FAF760FEC4F8CC00B0600020307046 -:1077D0004FF0010986F80490204603F04CFBAAF113 -:1077E0000101084208BF86F8059006D094F8C80049 -:1077F00001280CBF0220032070714046D4F824B049 -:10780000FDF7FCFD0146022F07BF9B484FF47A723B -:107810009A484FF4C8621044084400F23F614FF4A4 -:107820007A70B1FBF0F0584400F5C970F06004982C -:1078300030EA0A0004BF05B0BDE8F08F29463046A3 -:1078400007F010FF87B2204603F015FBB8420FD8AF -:10785000074686F8059005FB07F1D4F8CC00FAF747 -:1078600012FEB0602946304607F0FCFE384487B26D -:107870003946204603F012FAB068C4F8CC0005B0CF -:10788000BDE8F08F2DE9F04304467E4885B00D46F3 -:1078900090F80004DFF8F091400999F800144909C4 -:1078A000884218BFFFDFDFF8CC81002708F13C06D3 -:1078B000082D80F0FA80DFE805F0045B656560F86C -:1078C000F894202C28BFFFDF36F814000621F9F7C2 -:1078D000C5F8050008BFFFDF202C28BFFFDF36F802 -:1078E00014002988884218BFFFDF95F8C8000028D7 -:1078F00008BFFFDF284602F0BCFEC8F80470A8F8F5 -:10790000027029460020C8F8107007F0EFFE00F161 -:107910009804686AA04218D995F85200FDF76EFDE8 -:1079200095F85110022907BF53494FF47A72534911 -:107930004FF4C862114408444FF47A7100F23F607A -:10794000B0FBF1F1686A0844071B29460020C8F81B -:10795000087007F0CBFE698840F2E242514398304C -:10796000081AA0F22230C8F80C0005B0BDE8F08378 -:1079700005B0BDE8F04303F05DB805B0BDE8F043E5 -:10798000FDF792BB99F8140D4049400991F8001495 -:107990004909884218BFFFDF202C28BFFFDF36F8D7 -:1079A00014000621F9F75AF8050008BFFFDF202C64 -:1079B00028BFFFDF36F814002988884218BFFFDF90 -:1079C0000022012329466846FFF71CFE95F8D200E5 -:1079D0006946FBF797FA002808BFFFDF05B0BDE84E -:1079E000F083202C28BFFFDF36F814000621F9F7BA -:1079F00035F8050008BFFFDF202C28BFFFDF36F871 -:107A000014002988884218BFFFDF95F8C8000428B1 -:107A100018BFFFDF85F8C87095F8D2404FF6FF79A0 -:107A2000202C28BFFFDF26F8149095F8D200FBF732 -:107A300000F8002808BFFFDF202085F8D200D5F825 -:107A4000D800002804BFD5F8D400C8F8140008D026 -:107A5000D5E937121144826911448161D5E93501B4 -:107A6000C860D5F8D40000281CBFD5F8D810016133 -:107A700014D10EE0DC0D002068360200A2240200C2 -:107A8000E000002001E000E00BE000E019E000E091 -:107A90000BE0D5F8D800002818BF8761FC480078B3 -:107AA00005B0BDE8F043F4F725B9FFDF05B0BDE848 -:107AB000F0832DE9F047F74D0746E88B6C68401CD2 -:107AC000E88328784FF00008002808BFFFDF07D0C0 -:107AD000DFF8C4A3042814D0052818BFFFDF40D066 -:107AE00021462869FAF7CFFCB86087F800800120AA -:107AF0003871A86800F5B370F860287804287CD144 -:107B000085E00029ECD02E69DAF8141039B38946E3 -:107B1000C9680029FBD1B9F1000F20D099F8000005 -:107B2000002808BFFFDFD9F81410D9F80400014479 -:107B30003046FBF7AEFC002807DA211A4A1E92FBFA -:107B4000F4F202FB0406214604E090FBF4F202FB8F -:107B5000140621468E4288BFFFDF3446C0E7444604 -:107B6000BEE70029BCD0D5F81890B9F1000F08BFC6 -:107B7000FFDF0026D9F8DC10DAF814403046721E18 -:107B80005CB1A069884228BF824284BF0246264673 -:107B90002046E468002CF4D106B9064609F1C80471 -:107BA000C9F8D860002E04BFC4F80C80CAF814408D -:107BB00005D0F068F460E060002818BF0461D4F8D4 -:107BC0001090C4F81880B9F1000F0ED0D9F8180041 -:107BD00048B1D4F814A0504538BFFFDFD9F81800D9 -:107BE000A0EB0A00A061C9F81880002E08BFC5F8F4 -:107BF000208009D03078002800E00DE008BFFFDFCA -:107C0000716970680844286240F6B83468E7E88B08 -:107C10000A2838BF032000D302207871E88B01289E -:107C200006D93846696807F01DFDE98B0844E883EA -:107C3000B8682861BDE8F0872DE9F0418046974893 -:107C400084B00E4690F80004954F410997F800045F -:107C50004009814218BFFFDF01210025082E8D4C0D -:107C600062D2DFE806F0041A35353061614D617388 -:107C70002173607800281CBF04B0BDE8F0818648FD -:107C8000456005612573A068C138FEF758FD0028DE -:107C900018BFFFDF04B0BDE8F081607850B1207BF1 -:107CA000002808BFFEF72CFF657304B0BDE8F04163 -:107CB000FAF7E9BDA173FEF7FEFD002818BFFFDF4C -:107CC00004B0BDE8F08104B0BDE8F041FDF7ECB9C7 -:107CD00097F8140D7349400991F800144909884236 -:107CE00018BFFFDF00216846FFF7E3FE6946404604 -:107CF000FBF708F9002808BFFFDF04B0BDE8F081FA -:107D00002078052818BFFFDF207F002808BFFFDF8D -:107D100025772570207DFAF78CFE002808BFFFDF4D -:107D2000257504B0BDE8F081FFDF04B0BDE8F08147 -:107D30002DE9F041574C0026207804281FBF2078F9 -:107D400005280C20BDE8F08101206070607B0025D3 -:107D5000A8B1EFF3108010F0010F72B60CBF00272E -:107D60000127607B00281CBFA07B002805D0FEF700 -:107D7000C7FE6573A573FAF786FD2FB903E0207D72 -:107D8000FBF7D3F900E062B6207DFBF71CFC207FF7 -:107D900028B125772078052818BFFFDF0C266570ED -:107DA0002570207DFAF745FE002808BFFFDF257506 -:107DB0003046BDE8F0812DE9F04F364883B00078B9 -:107DC000002818BFFFF7B4FF0120DFF8CC8088F847 -:107DD000000069460620F8F7CCFD002818BFFFDF39 -:107DE00000274FF6FF7934E0029800281CBF90F876 -:107DF000C81000292DD0008848451CBFDFF8A8A076 -:107E00004FF0200B3BD00621F8F728FE040008BFF6 -:107E1000FFDF94F8D200FBF7D6FB84F8C87094F823 -:107E2000D2504FF6FF76202D28BFFFDF2AF81560CD -:107E300094F8D200FAF7FDFD002808BFFFDF84F8B0 -:107E4000D2B069460620F8F794FD002818BFFFDF7E -:107E500010E06846F8F76BFD0028C5D00FE00298E7 -:107E600000281CBF90F8C810002903D0008848459E -:107E7000C9D104E06846F8F75AFD0028EFD088F829 -:107E80000070C8F8147003B00020BDE8F08F000047 -:107E9000DC000020F40D0020DC0D002001E000E0FB -:107EA0000BE000E019E000E0180E002010B50078AB -:107EB000F84C60B101280CBF40F6C410FFDF06D0BB -:107EC000A06841F66A01884228BFFFDF10BDA060AC -:107ED000F6E710B5EF4C00232070EF4803704370B5 -:107EE000037703734373837320218361017518380B -:107EF00043703A3010214FF6FF72428020F8042F71 -:107F0000491EFAD1180008BFA36005D0002B0EBF90 -:107F1000FFDF40F6C410A060A06841F66A01884205 -:107F200028BFFFDFBDE8104045E72DE9F043DA4CFC -:107F3000054685B0207816460F4600281EBF0C2047 -:107F400005B0BDE8F08395F8519095F85200D5F84A -:107F50002480FDF753FAB9F1020F07BFCF494FF460 -:107F60007A72CF494FF4C862114408444FF47A79C9 -:107F700000F23F60B0FBF9F0404400F22230C5F857 -:107F8000DC00A56195F8C800002818BFFFDF40F2AB -:107F90007120784360600120FDF730FA00F2E7308D -:107FA000B0FBF9F040F2712106FB0100A0606168AE -:107FB000A1F2F621884298BF01460020A160B9498C -:107FC00008610521217060702077E083B648FAF7D8 -:107FD000D5FC2075202808BFFFDFFAF749FD206196 -:107FE00001216846FFF765FD207D6946FAF78AFFA3 -:107FF000002808BFFFDF002005B0BDE8F083A648D9 -:10800000007800281CBF0020704710B50620F8F744 -:10801000C1FC80F0010010BD30B59F4C85B02278C6 -:10802000002A1EBF0C2005B030BD0D4640F2712164 -:10803000484360600120FDF7E1F94FF47A7100F2E6 -:10804000E730B0FBF1F040F2712105FB0100A060C8 -:108050006168A1F2F621884298BF01460020A16024 -:10806000607004212170E0838F48FAF787FC207547 -:10807000202808BFFFDF8B48406938B10146C0683F -:108080000028FBD111B1FAF7F3FC05E0FAF7F0FC98 -:1080900040F6B831FAF7F7F9206101216846FFF799 -:1080A00008FD207D6946FAF72DFF002808BFFFDF95 -:1080B000002005B030BD70B5774CA1690160FFF7B5 -:1080C00037FE002300BBA169D1F8D8205AB1D1E90D -:1080D00037C5AC449569AC44C2F818C0D1E9352C19 -:1080E000CCF80C2005E0DFF8BCC1D1F8D420CCF8E6 -:1080F0001420D1F8D420D1F8D810002A18BF11616B -:1081000002D1002918BF8B61A36170BD6549487019 -:10811000704770B540F2E24300FB03F510460C4691 -:10812000FDF76CF9022C07BF5C494FF47A725C4989 -:108130004FF4C862114408444FF47A7100F23F6072 -:10814000B0FBF1F000F2223085428CBF281A0020EB -:1081500070BD70B50D4606460146002007F0C6FA10 -:10816000044696F85200FDF749F996F85110022995 -:1081700007BF4A494FF47A7249494FF4C862114423 -:1081800008444FF47A7100F23F60B0FBF1F071885F -:1081900040F271225143C0EB4100A0F22230A542CF -:1081A00034BF21462946814203D2A5422CBF28462E -:1081B0002046706270BD3B4910B54968002801F146 -:1081C000980408BF04F5BC7409D0012808BF04F561 -:1081D000317404D0022814BFFFDF04F5B0742E48B8 -:1081E0008068A0428CBF0120002010BD10B52D4C2E -:1081F000607828B1D4E90201626807F05BFAA060F8 -:10820000D4E9010188429CBF2078002814BF0020D7 -:10821000012010BD04222DE9F043204FDFF88080BB -:1082200085B04FF47A79052980F0B980DFE801F054 -:108230000A2B033E890080F8C82005B0BDE8F04352 -:10824000FAF721BB044617480078002818BF84F8C5 -:10825000C82004D005B0BDE8F043FAF714BB0122F2 -:10826000002321466846FFF7CDF994F8D20069460D -:10827000FAF748FE002808BFFFDFB4F85800401C9A -:10828000A4F85800E6E7032180F8C81005B0BDE85F -:10829000F0830000DC000020F40D002068360200AE -:1082A000A2240200DC0D0020397C01000446408835 -:1082B00040F2E2414843B3490860D4F8F000214657 -:1082C0000089E082D4F8F00080796075D4F8F0007D -:1082D00040896080D4F8F0008089A080D4F8F00054 -:1082E000C089E0800020A66A07F000FA054694F8ED -:1082F0005200FDF783F894F8511002290EBF4FF495 -:108300007A7147464FF4C8613944084400F23F602F -:10831000B0FBF9F1608840F271225043C1EB40009C -:10832000A0F22230AE4234BF29463146814203D208 -:10833000AE422CBF304628466062022084F8C80056 -:10834000A4E706460146856A002007F0CFF90446F7 -:1083500096F85200FDF752F896F8511002290EBF18 -:108360004FF47A7147464FF4C8613944084400F22B -:108370003F60B0FBF9F0718840F271225143C0EBCD -:108380004100A0F22230A54234BF21462946814255 -:1083900003D2A5422CBF28462046706276E7FFDF55 -:1083A00074E72DE9F041DFF8E0810025774C98F87B -:1083B000001084B0052880F0C180DFE800F00316CB -:1083C0006DB9B900E5830846F3F794FC607800289E -:1083D00073D100216846FFF76CFB207D6946FAF7F0 -:1083E00091FD002808BFFFDF67E00120FDF706F8D8 -:1083F0006749684E08444FF47A71B0FBF1F0216987 -:10840000726840F2E2431144081AA16900F2DE608A -:108410004A88C83102FB03F772698A4208BF002507 -:1084200014D0216AFBF735F8002807DA391A4A1EFA -:1084300092FBF7F202FB0705394604E090FBF7F2E6 -:1084400002FB170539468D4288BFFFDFD8F80800C8 -:10845000854208D2A06940F271224188C1824A4314 -:1084600005EB420505E040F2E240B5FBF0F0A16902 -:10847000C882A06905214175C08A6FF41C71484308 -:1084800005EB400040F635413061B0EB410F28BFAD -:10849000FFDF04B0BDE8F081E5830846F3F72AFC6E -:1084A00001202077A0692169C0F8CC1080F8C8505D -:1084B0002178052918BFFFDF06D0FAF7E4F96573C4 -:1084C000A57304B0BDE8F081002808BFFFDFA069F4 -:1084D00090F8C800002818BFFFDFA06990F8D2000C -:1084E000202818BFFFDF2C48FAF748FAA169064692 -:1084F000202881F8D2000F8828BFFFDF274820F806 -:108500001670A06990F8D200202808BFFFDF002372 -:1085100001226846A169FFF775F8A069694690F8DD -:10852000D200FAF7EFFC002808BFFFDFA561C4E71F -:1085300004B00846BDE8F041F3F7DCBBFFDF04B050 -:10854000BDE8F081704770B5124D0446002912BF96 -:108550000129686070BD02291CBFFFDF70BD6888FB -:10856000401C68801046FCF758FF4FF47A7100F207 -:10857000E730B0FBF1F0201A686070BD0348007866 -:1085800070470000E0000020DC000020F40D002017 -:10859000C92E0200DC0D002085780100180E002095 -:1085A000FE48406870472DE9F0410D4606460146F9 -:1085B0001746012007F09AF8044696F85200FCF797 -:1085C0001DFF96F8521002290CBFF549F5490844E1 -:1085D0004FF47A7100F2E140B0FBF1F0718840F2A3 -:1085E00071225143C0EB4100C01BA0F55970A54258 -:1085F00034BF21462946814203D2A5422CBF2846DA -:1086000020467062BDE8F0812DE9FF4F8FB004462F -:1086100090F85200DDF8709098460B9049EA0800F7 -:108620000C9094F86400002617460D280CBF01201A -:1086300000200890B8F1000F04BF94F8040103284B -:1086400071D1089800286ED0B4F87C01B8426AD184 -:10865000D4F80C01C4F8F800608840F2E2414843C5 -:10866000C4F8FC00B4F85201B4F8DE100844C4F8B1 -:108670000001204604F00DFDB4F88001E08294F87A -:108680007E016075B4F882016080B4F88401A08036 -:10869000B4F88601C549E080C348097894F864318C -:1086A000628830F8111030F81300D4F828A008447C -:1086B0000004000C4FF0000105D000FB02F1BC48A3 -:1086C000B1FBF0F0411C1FFA81FB2146012007F0AD -:1086D0000DF8054694F85200FCF790FE94F85210FD -:1086E00002290CBFAE49AF49084400F2E1414FF402 -:1086F0007A70B1FBF0F1608840F271225043C1EB17 -:108700004000A0EB0B00A0F55970AA4534BF2946E4 -:108710005146814203D2AA452CBF5046284660628A -:10872000022084F80401D4E956ABB4F8DE000390CB -:10873000B4F85001D4F84C110691B8F1000F03D0F1 -:1087400094F8181149B17FE004F1D8010091743117 -:10875000099104F59C75091D07E004F596710091D7 -:10876000091D099104F58E75091D0A91B4F8581078 -:10877000381A791A09B200B20491002805DAD4F83F -:108780004801069001200C90084694F80411002935 -:108790005ED0012900F0668102297DD0032918BF2F -:1087A000FFDF00F0A98131460698F9F76CFE0999C0 -:1087B00008600A9801210780002028702971099813 -:1087C0000068A8607948D0E90520824287BF009AF6 -:1087D0001060009802600098626A0068104400F21D -:1087E0008310E8606971B4F8C800C01B00B20028AB -:1087F000C4BF032068710898002800F0F181B9F126 -:10880000000F18D0B4F8F020002A0CBF0020B4F8F4 -:10881000F200A4F8F20094F8F430401C584390425F -:1088200009D26879401E002805DD6971B4F8F200AC -:10883000401CA4F8F200B8F1000F00F0F58194F8A4 -:108840001801002800F0EC8113B00220BDE8F08F81 -:10885000BAF1000F08BFFFDFE08A40F27121484300 -:10886000490001EB400210980021002806D000FBCF -:1088700002F14F48B1FBF0F000F10101C4F808111A -:10888000608840F2E24100FB01F210994FF00000D5 -:1088900008D001FB02F100E042E04548B1FBF0F0F6 -:1088A00000F10100C4F80C010AF101064FF00100CB -:1088B000FCF7A4FD3F494FF47A7B0844B0FBFBF082 -:1088C000E18A40F271225143C0EB4101D4F8080122 -:1088D0000190091A314401F2C246607D510010FB3B -:1088E00001F00C900120FCF789FD33490844B0FBEE -:1088F000FBF1019801EB40010C9801EB000B01200A -:10890000FCF770FD584400F1620128484161816123 -:10891000A6EB0A00401EB0F53D7F38BFFFDF42E7FF -:10892000E28A40F271215143D4F8FC00109A00EB26 -:1089300041010020002A06D01D4802FB01F2B2FBD3 -:10894000F0F000F10100C4F80801628840F2E2434F -:1089500002FB03FC109B4FF0000206D0144A03FBFD -:108960000CF3B3FBF2F202F10102C4F80C21039AFA -:108970009AB9B9F1000F38D094F85200FCF73EFDD7 -:10898000014694F8520002280CBF054A054A1144DA -:1089900001F2E1424FF47A7110E026E0580E002017 -:1089A00004360200A224020042230200E800002054 -:1089B00040420F007D2A020083290200B2FBF1F140 -:1089C000D4F80821E38A114440F2712CD4F8FC2039 -:1089D00003FB0CF302EB4302561AFCF703FDABEB6F -:1089E00000003044A0F1200600E00E1AD4F8002167 -:1089F000D4F8F810D4F8080101FB020B607D40F2B6 -:108A0000E24110FB01F00C9094F852A05046FCF7A4 -:108A1000F5FC0146BAF1020F0CBFF948F9480844C9 -:108A200000F2E1414FF47A70B1FBF0F000EB4B0142 -:108A30000C9801EB000B5046FCF7D4FC584400F1B5 -:108A40006001F14840F2712341616288D4F80C1151 -:108A50005A43C1EB4201A1F213318161012084F834 -:108A60000401A0E6628840F27123D4F80C115A4345 -:108A7000C1EB420202FB00F6DDE903020244D4F836 -:108A80000001D4F8F8C0121AD4F80831521E0CFBB9 -:108A9000003002FB010B607D40F2E24110FB01F06F -:108AA0000C9094F852000190FCF7A8FC0146019844 -:108AB000022814BFD348D248084400F2E1414FF4E1 -:108AC0007A70B1FBF0F000EB4B010C9801EB000B5E -:108AD0000198FCF787FC584400F16001CA48B9F1DD -:108AE000000F4161A6F2133181613FF45CAEBAF12F -:108AF000000F08BFFFDF56E6628840F27123D4F80A -:108B00000C115A43C1EB420101FB00F694F86300DB -:108B100025281CBF94F8640025280AD1B4F87C01EC -:108B2000381A00B2002804DB94F87F01002818BF2F -:108B30000B900C9828B1039880B3BBF1000F18BFBD -:108B4000FFDFDDE903010144D4F80C0101FB00FA69 -:108B50000B98FCF753FC01460B9802280CBFA84861 -:108B6000A848084400F2E1414FF47A70B1FBF0F0FC -:108B700000EB4A0A0B98FCF735FC504400F1600109 -:108B8000A14840F2712341616288D4F80C115A4324 -:108B9000C1EB4201A1F21331816104E6FFE7BBF1B1 -:108BA000000F14BFBAF1000FFFDF0B98FCF726FC93 -:108BB0000B9902290CBF92499249084400F2E14105 -:108BC0004FF47A70B1FBF0F0361A94F85200FCF7CB -:108BD00009FCABEB00003044A0F12006B1E700BF78 -:108BE000B9F1000F7FF40EAE94F8040100283FF4B1 -:108BF00022AE618840F27122D4F80C015143C0EBDF -:108C00004101284606F02EFD0004000C3FF413AE8F -:108C10001D99002918BF0880012013B0BDE8F08F0E -:108C200094F85401FAF781FA94F854012946FAF7B6 -:108C300069F900281CBF88F0010084F819010020A0 -:108C400013B0BDE8F08F2DE9F04F704C804683B033 -:108C500020788A4600256C4E4FF00209032804BF95 -:108C6000207B40457CD1606830612078032818BFA4 -:108C7000FFDF0327BAF1080F70D2DFE80AF0040E15 -:108C80001B1B166F6F6A6562FCF74FFF002818BF49 -:108C9000FFDFB77003B0BDE8F08FFDF7CBF8002819 -:108CA00018BFFFDF03B0BDE8F08F03B0BDE8F04FA1 -:108CB000FCF7FAB927752574E07A012658B14FF40C -:108CC0007A71A069F9F7DFFBA061002104F11000BF -:108CD00006F0C8FC1AE001216846FAF71AFF9DF871 -:108CE000000042F210710002B0FBF1F201FB12052C -:108CF000FCF793FD05442946A069F9F7C4FBA06180 -:108D0000294604F1100006F0ADFC461C208C411CE5 -:108D10000A293CBF30442084606830B1208C401C5C -:108D20000A2828BF84F8159000D26775607A002859 -:108D30001CBF03B0BDE8F08F207B04F11001FAF7EF -:108D4000E1F8002808BFFFDF03B0BDE8F08F07E0BF -:108D500004E0207BF9F76DFE2570F5E7FFDFF3E710 -:108D6000B8F1200F28BFFFDF294F072137F818007F -:108D7000F7F774FE040008BFFFDFB8F1200F28BF2B -:108D8000FFDF37F818002188884218BFFFDF4FF057 -:108D900001083461BAF1080F80F04481DFE80AF07D -:108DA000049AA2A29DEEEEEDC4F85851F580C4F8E5 -:108DB0005C5194F8190138B9F9F75AFED4F8241126 -:108DC000FAF767FB002825DCB4F81611B4F8580050 -:108DD000814206D1B4F8CC10081AA4F8CE0020467F -:108DE00005E0081AA4F8CE00B4F816112046A4F83D -:108DF0005810D4F84011C4F82411C0F8481127E0E5 -:108E000004360200A2240200E8000020580E0020D0 -:108E1000800E0020B4F81411B4F85800081AA4F811 -:108E2000CE00B4F814112046A4F85810D4F8241138 -:108E3000C4F84011C4F84811D4F82C11C4F8D81063 -:108E4000D4F83011C4F84C11B4F83411A4F850110E -:108E500003F0D7FFF9F7E6FD94F852A00746504615 -:108E6000FCF7CCFABAF1020F0CBFFE49FE490844E8 -:108E70004FF47A7100F2E140B0FBF1F1D4F80C014B -:108E800040F27122014460885043C1EB4000A0F1E0 -:108E9000300AB72F98BFB7272146012006F026FCDD -:108EA0003844AAEB0000A0F21937A246214601205F -:108EB00006F01CFCDAF824109C30814288BF0D1AA1 -:108EC000F760BD4228BF3D46B56084F8188186F83A -:108ED000029039E704F0DBF801E0FCF7E5F884F8EC -:108EE000188131E7F9F7C4FDD4F84821014610464E -:108EF000FAF7CFFA48B1628840F27123D4F80C1126 -:108F00005A43C1EB4201B0FBF1F094F864100D2913 -:108F10000FD0B4F85810B4F816210B189A42AEBF0F -:108F2000501C401C0844A4F8160194F81A0178B9A2 -:108F300005E0B4F81601401CA4F8160108E0B4F8E6 -:108F40001601B4F8CC10884204BF401CA4F81601E6 -:108F5000B4F85201DFF81493401CA4F85201B4F89D -:108F60007E00B4F87C100DF1080B401AB4F85810CC -:108F7000401E08441FFA80FA17E045E052E03078BE -:108F8000002339F81000CDE9005B94F8641139F83A -:108F90001110084481B22046FFF736FB00283FF449 -:108FA000D3AE012818BFFFDF26D0B4F81621AAEBF4 -:108FB000020000B20028E2DA082084F8730084F886 -:108FC0007280204603F0D2FB84F8045194F8545187 -:108FD0004FF6FF78202D00D3FFDF27F8158094F897 -:108FE0005401F9F726FD202084F85401307903B0AC -:108FF000BDE8F04FF2F77EBEB4F81601BDF80810D8 -:109000000844A4F81601D0E794F80401042818BF16 -:10901000FFDF84F8045194F854514FF6FF78202D67 -:10902000DBD3D9E7FFDF8FE610B5914C207850B144 -:1090300001206072FCF71DFF2078032805D0207AFC -:10904000002808BF10BD0C2010BD207BFAF76DF87A -:10905000207BFAF7B8FA207BF9F7EBFC002808BF71 -:10906000FFDF0020207010BD2DE9F04F804F83B04E -:10907000387801244FF0000840B17C720120FCF7E1 -:10908000F8FE3878032818BF387A0DD0DFF8E4915D -:1090900089F8034069460720F7F76BFC002818BFE2 -:1090A000FFDF4FF6FF7440E0387BFAF73EF8387B7D -:1090B000FAF789FA387BF9F7BCFC002808BFFFDF14 -:1090C00087F80080E2E7029800281CBF90F804119E -:1090D00000292AD00088A0421CBFDFF89CA14FF0D5 -:1090E000200B3AD00721F7F7B9FC040008BFFFDFD7 -:1090F00094F85401FAF767FA84F8048194F854510B -:109100004FF6FF76202D28BFFFDF2AF8156094F870 -:109110005401F9F78EFC84F854B169460720F7F73B -:1091200028FC002818BFFFDF12E06846F7F7FFFBB6 -:109130000028C8D011E0029800281CBF90F8041144 -:10914000002905D00088A0F57F41FF39CAD104E08D -:109150006846F7F7ECFB0028EDD089F8038087F824 -:109160000B8003B00020BDE8F08F70B50446434883 -:1091700090F80004424D400995F8001449098842CE -:1091800018BFFFDF95F8140D40093E4991F800140F -:109190004909884218BFFFDF3649002001220C71BF -:1091A00088700A704870C87031490870BDE8704016 -:1091B0005AE73049087070472DE9F8432C4C0646B1 -:1091C0002078002875D13048F9F7D8FB2073202883 -:1091D0006FD0032766602770002565722572AEB1D7 -:1091E000012106F1F400FAF70CFD0620F7F7E0FB89 -:1091F00080460720F7F7DCFB96F8F4104044B1FBFB -:10920000F0F200FB1210401C86F8F400F9F70AFC9B -:109210001E49091838BF40F2F65000F59D7086B21D -:10922000FCF7D7FAE061FCF7F8FA4FF0010878B3E1 -:1092300084F80A8001216846FAF76BFC9DF800006B -:1092400042F210710002B0FBF1F201FB1200064481 -:10925000F9F70EFC3146F9F716F9A0612775677525 -:10926000257416E004360200A22402004223020004 -:10927000580E0020E8000020800E002001E000E0F1 -:109280000BE000E019E000E0478C01000AFAFFFF64 -:1092900012E0207B04F11001F9F734FE002808BF2A -:1092A000FFDF25840020FCF7E4FD0020BDE8F88303 -:1092B000FFE70C20BDE8F883F9F7DAFB3146F9F750 -:1092C000E2F8A061A57284F80B80C7E72DE9F047AA -:1092D00082B00026044680F80461A0F85061DFF8EF -:1092E00000944288FD4FD0F8288099F8000094F847 -:1092F000641137F8100037F8111008440104090C04 -:10930000304605D001FB02F0F649B0FBF1F0401CFD -:109310001FFA80FA2146012006F0E8F9054694F884 -:109320005200FCF76BF894F8521002290CBFEE497A -:10933000EE4908444FF47A7100F2E140B0FBF1F1DC -:10934000608840F271225043C1EB4000A0EB0A005C -:10935000A0F55970A84534BF29464146814203D241 -:10936000A8452CBF4046284660620096019699F8B1 -:10937000000094F86411002337F8100037F811103A -:109380001A46084481B22046FFF73EF9002818BF6C -:10939000FFDFC4F800610120C4F8F86084F804011C -:1093A000A4F81661A4F8146184F81A61B4F858009E -:1093B000401EA4F85800A4F8526102B00020BDE895 -:1093C000F087C74948707047C94810B5417A0124F1 -:1093D000002918BF002408D1C17A31B1406AC549BB -:1093E000884284BF0024FCF740FD204610BD70B5C4 -:1093F000BB4C0546E088401CE080D4E9020162785D -:10940000D5F85861002A1CBF324606F053F9A06017 -:10941000864208D895F80401012804D0E078002895 -:1094200004BF012070BD002070BD70B50D4640F234 -:10943000E24100FB01F42846FBF7E0FF022D0CBFE0 -:10944000A949AA4908444FF47A7100F2E140B0FBFF -:10945000F1F000F54D7084428CBF201A002070BDE1 -:109460002DE9F04383B00026044680F8186190F897 -:10947000D600002807BF94F80401032803B0BDE814 -:10948000F083F9F7F5FAD4F8482101461046FAF7C7 -:1094900000F80028DCBF03B0BDE8F083628840F22A -:1094A0007123D4F80C115A43C1EB4201B0FBF1F027 -:1094B000411CB4F858000144A4F81411B4F8CC10BD -:1094C000B4F81421891A09B20029DCBF03B0BDE841 -:1094D000F083012184F81A11B4F87E10B4F87C20CE -:1094E0007E4F891A491E084485B2DFF8F4810DF1D8 -:1094F00008091EE098F8000037F81000CDE900696F -:10950000B4F8142194F86411012337F811100844B9 -:1095100081B22046FFF778F8002804BF03B0BDE809 -:10952000F08301280FD0022812BFFFDF03B0BDE88F -:10953000F083B4F81401281A00B20028BCBF03B0AD -:10954000BDE8F083D6E7B4F81401BDF8081008446C -:10955000A4F81401EDE7F0B5DFF884C104265F4BF1 -:109560009CF80020002583B006297DD2DFE801F0B9 -:10957000073C03191941044680F8046107E00446DA -:109580009CF80300002818BF84F804610BD0F9F799 -:109590007AF9A4F85251B4F85800A4F8160184F8E6 -:1095A0001A5103B0F0BD33F8120094F804210121E0 -:1095B000032A13BF94F80421C4F80051C4F8F850EA -:1095C000012AE4D1CDE9001594F86411B4F8CC2057 -:1095D00033F811100023084481B22046FFF714F835 -:1095E000002818BFFFDFD2E7032180F8041103B081 -:1095F000F0BD0446B0F802C0866A90F8640133F802 -:10960000121033F8100008440104090C4FF0000058 -:1096100005D001FB0CF03349B0FBF1F0401C87B2E0 -:109620002146012006F062F8054694F85200FBF747 -:10963000E5FE94F8521002290CBF2B492B4908442F -:109640004FF47A7100F2E140B0FBF1F0618840F232 -:1096500071225143C0EB4100C01BA0F55970AE42CE -:1096600034BF2946314600E008E0814203D2AE42D1 -:109670002CBF30462846606203B0F0BDFFDF03B068 -:10968000F0BD2DE9F8431A4C0327154EE27AA17A72 -:1096900042F21079002550B1012843D002281CBFA6 -:1096A000FFDFBDE8F8834FF000081AB95EE04FF025 -:1096B00000080AB1E5722EE051B101216846FAF7BF -:1096C0004DFA9DF800000002B0FBF9F109FB11080A -:1096D000FCF7A3F800EB0801A0690DE042230200AB -:1096E000E800002040420F0004360200A2240200DD -:1096F000580E0020DB821300F8F7C5FEA061257428 -:109700006775607A30B9207B04F11001F9F7FAFB34 -:1097100000284BD02584F9F7B6F83079BDE8F84336 -:10972000F2F7E8BAE572A7692570012020720021DE -:10973000606805F035FB6068C0F84871217B80F8EF -:109740005411616AC0F84C71C0F8581190F8545126 -:109750000788202D28BFFFDF3C4820F8157060687F -:10976000FFF7B4FD002818BFFFDFD4E751B1012196 -:109770006846FAF7F3F99DF800000002B0FBF9F132 -:1097800009FB1108FCF749F800EB0801A069F8F79C -:109790007AFEA06125746775607A0028BAD1207BB3 -:1097A00004F11001F9F7AEFB0028B3D1FFDFB1E7F8 -:1097B00070B5274CA178022906BFE188002970BD49 -:1097C0002569C5F85C0195F85200FBF70BFED5F84A -:1097D0005C11081AA1680144A160E1680844E060D6 -:1097E00070BD70B505461A488378022B06BF006924 -:1097F00000F5AC74174C002904BF256070BD012929 -:1098000008BF681E0DD002291CBFFFDF70BD1046C7 -:10981000FBF703FE4FF47A7100F2E140B0FBF1F088 -:10982000281A206070BD0C48007800281CBF00205A -:10983000704710B50720F7F7ADF880F0010010BDB4 -:1098400005480078002818BF01207047800E0020CE -:10985000E80000207C0E0020580E0020F8490C285B -:10986000896881F8C3001ABF13281828704700229E -:1098700011280FD0072808BF704715280AD00128E3 -:109880001ABF002802287047A1F88220012081F821 -:1098900086007047A1F88820704770B5E84CA16831 -:1098A0000A88A1F8362181F8340191F85100012885 -:1098B00008BF012508D0022808BF022504D00428CB -:1098C00016BF08280325FFDFA06880F8385190F8FC -:1098D0005200012808BF012508D0022808BF022530 -:1098E00004D0042816BF08280325FFDFA068012143 -:1098F00080F8395180F83211002180F80611E078A3 -:10990000BDE87040F2F7F6B9F0B4CD48806890F841 -:109910004E30478EC68E458FB0F84010C28FB0F8DB -:1099200042C0022B1FD08D4238BF294601866245B6 -:1099300028BF62468286018FB0F84430994238BF12 -:109940000B464386818FB0F84640A14238BF0C4693 -:10995000C486BB4228BF1F464786B44228BF26465E -:10996000C686F0BC7047038E9D4228BF1D46838E7D -:109970009A4228BF1A46A94298BF0D4605869445CB -:1099800098BF62468286002180F84E10D3E7AC4A29 -:10999000012992681BD0002302290FD0032921D06E -:1099A00028B301282ED0032818BF704792F863000F -:1099B00013281CBF1628182805D1704792F8C30039 -:1099C000002808BF7047D2F8F0000370704792F883 -:1099D000C300012808BF7047D2F8F4000178491E7F -:1099E0000170704792F8C3000328ECD17047D2F899 -:1099F000F000B2F858108288891A09B20029A8BF6D -:109A000003707047B2F85800B2F8FA10401A00B26A -:109A10000028E1DA70472DE9F04100260327884C41 -:109A20000125A0B1206906F0CCF9A16881F8C20037 -:109A300005FA00F010F4000F08BFFFDFA06880F8FF -:109A40006370A0F8826080F88650BDE8F081A0685D -:109A50000023194690F86420583005F0A2FD002834 -:109A600004BF6570BDE8F0816078002818BFBDE8CC -:109A7000F081206906F0A5F9A16881F8C10081F89C -:109A80006470A1F8886081F88A50BDE8F08170B5F3 -:109A90006B4C84B0207910F0010F04BF04B070BD8E -:109AA000206900230521C578A06890F8632058300C -:109AB00005F077FD002818BF022D0FD00B2D18BF21 -:109AC000042D0BD0052D18BF062D07D00D2D18BF66 -:109AD000112D03D0607840F0080060706078002895 -:109AE0001CBF04B070BD2069C078801E162880F0AD -:109AF0005283DFE800F00BFBA7C5FA26FBF9FB9ABF -:109B0000F8FCFBFBFBE3F6F5F4F3F2F1A0680023AD -:109B1000012190F86620583005F043FD002840F000 -:109B2000B583206906F0A8F9A16881F8EE00072046 -:109B300081F86600002081F88A0081F8860000F034 -:109B4000A5BBA0680921002390F86320583005F0D8 -:109B500028FD20B1206906F0DFF9122814D0A06892 -:109B60000A21002390F86320583005F01AFD20B137 -:109B7000206906F0D1F9142821D0206906F0CCF92B -:109B8000162840F0838342E0A0680125002390F866 -:109B900063200921583005F004FD002808BF6570D6 -:109BA00000F074836078002840F07083A16881F829 -:109BB0007A0081F8860081F8630000F067BBA06836 -:109BC0000021012580F86310A0F8821080F886102B -:109BD0000421FEF71FFBA06890F84E10012900F049 -:109BE0007C820288A0F81621028EA0F81821828EAD -:109BF000A0F81A21428E00F58671A0F81C21C08EB3 -:109C000048820D72E078F2F775F800F03FBBA0686B -:109C100090F86310202940F03983002180F8631008 -:109C200080F886101A2000F02FBBA06890F863100F -:109C30000F292AD1002180F8681012213AE0000093 -:109C400004010020A06890F8631013291DD1D0F8FA -:109C5000F01000884988814218BFFFDFA068D0F863 -:109C6000F00000F12601206906F033F9A06800F148 -:109C7000BC01206906F035F91620A16800F064B92E -:109C8000A26892F86300162802D0022000F064BA9D -:109C9000D2F8F00002F1A80300F11E0100220E30FC -:109CA00005F007FCA0680021C0E92611012180F819 -:109CB0006810182180F8631000F0E8BA206906F0F7 -:109CC000B0F9032840F0E282206906F0AEF900BF47 -:109CD00001F022FC00F0DABA8DE202E2AEE152E1DC -:109CE0001EE135E103E050E0C4E004E0D5E1206985 -:109CF00006F00EF9ECE7A06890F863101B29C4D1B8 -:109D0000002580F88B5080F88650D0F8F01000883D -:109D10004988814218BFFFDFA068D0F8F0100D70AD -:109D2000D0F83C110A78002A18BFFFDF40F0F3801A -:109D300090F88C207AB180F88C500288CA80D0F8D4 -:109D40003C110D71D0F83C210D211170D0F83C214F -:109D50000188518010E00288CA80D0F83C110D7152 -:109D6000D0F83C2101211172D0F83C210C21117056 -:109D7000D0F83C21018851800088F6F779FFF6F78A -:109D8000D9FBE078F1F7B6FFC5E0A06800231946DB -:109D900090F86420583005F004FC50B9A068002306 -:109DA000082190F86320583005F0FBFB002800F0F4 -:109DB00027826078002840F06982A06890F88E00C1 -:109DC00010F0020F17D1206906F098F8A16881F809 -:109DD0008F00206906F094F8A168A1F8900020692E -:109DE00006F091F8A168A1F8920091F88E0040F079 -:109DF000020081F88E00A06890F88E1011F0010F1B -:109E000012D190F8642000231946583005F0C9FBA0 -:109E1000002808BFFFDF0121A06880F8641080F8E7 -:109E20008A100021A0F88810A06890F8631001291A -:109E300007D1002180F8631080F88610E078F1F7F0 -:109E400059FFA168D1F8F000098842888A4204BF0E -:109E50000178042940F01A8200250570E078F1F7B6 -:109E600049FFA06890F86310002908BF80F8865069 -:109E700000F00CBAA0680023072190F86320583046 -:109E800005F08FFB002800F0BB816078002840F0CF -:109E9000FD8102A9206906F079F8A0689DF80820E4 -:109EA000002590F89410114001F02F0180F89410D3 -:109EB00090F895109DF80920114001F0410180F8BB -:109EC000951080F88650D0F8F010008849888142BB -:109ED00018BFFFDFA068D0F8F0100D70D0F83C116B -:109EE0000A78002A18BFFFDF15D10288CA80D0F88F -:109EF0003C110D71D0F83C11029A8A60039ACA6035 -:109F0000D0F83C21072111700188D0F83C01418034 -:109F1000E078F1F7EFFEA06880F8635000F0B6B982 -:109F2000A0680023092190F86320583005F039FB20 -:109F3000002800F065816078002840F0A781A168C2 -:109F400081F87A0081F8860081F8630000F09EB9FC -:109F5000A0680023194690F86420583005F021FBD2 -:109F6000002800F04D816078002840F08F81A068C3 -:109F70000021A0F88810012180F88A10022180F8C1 -:109F8000641000F083B9A0680023194690F864209B -:109F9000583005F006FB00287ED0206905F0E0FF70 -:109FA00000287AD0206905F0D7FFA16808872069CA -:109FB00005F0CEFFA1684887206905F0CFFFA168B2 -:109FC0008887206905F0C6FFA168C88791F86300FB -:109FD0001D2813BF91F84E00012081F84E00012882 -:109FE00007D091F8FD00002804BF91F8FC0000287C -:109FF00003D01F2081F8640017E01E2081F8640060 -:10A000000A88A1F822210A8FA1F824214A8FA1F8F9 -:10A0100026218A8F01F58670A1F82821C98FC18376 -:10A0200001210175E078F1F765FEA0680021A0F834 -:10A030008810012180F88A1000F028B9A068002358 -:10A040000A2190F86320583005F0ABFA20B320695C -:10A0500005F086FFA8B1206905F07EFFA16808879A -:10A06000206905F075FFA1684887206905F076FF33 -:10A07000A1688887206905F06DFFA168C887FFF790 -:10A0800043FCA068002180F8861080F8631004214A -:10A09000FEF7C0F8A06801E01AE07CE090F84E10EE -:10A0A00001291AD00288A0F81621028EA0F81821E2 -:10A0B000828EA0F81A21428E00F58671A0F81C212C -:10A0C000C08E488201200872E078F1F713FEDDE0CF -:10A0D000607840F001006070D8E0022180F84E10F6 -:10A0E000D4E0A0680023194690F86420583005F0A9 -:10A0F00058FA80B3A06890F86300242812BF25287E -:10A10000607840F0200027D06846FBF7EDF9002882 -:10A1100008BF002105D0009805F053FE8DF8080017 -:10A1200002A9A06801AB162290F8630005F001FCBB -:10A13000A0B1A0689DF80420162180F8E42080F8E2 -:10A14000E5101A2180F86410012180F88A1000219E -:10A15000A0F888109AE053E0607097E0206905F05D -:10A1600022FFC0B1206905F018FFA16800F00700C8 -:10A1700081F84F00206905F014FF00F00701A06886 -:10A1800080F8501090F80721002A04BF90F80621AB -:10A19000002A04D024E00020FFF73DFC76E090F890 -:10A1A0004F3090F852C000F151029C4501BF127827 -:10A1B0008A42012180F87B1012D00288A0F82E215B -:10A1C00090F84F2000F5867180F8302190F850000B -:10A1D00081F82500012081F82000E078F1F78AFD60 -:10A1E000A068222180F86410012180F88A100021E3 -:10A1F000A0F888104AE0A06890F86300202801D0F9 -:10A200000120A9E7206905F0D8FEC0B3206905F058 -:10A21000C4FE00F0070060F30705206905F0C1FEE9 -:10A2200000F0070060F30F25A2680120002682F8E5 -:10A230008600A2F88260242082F86300D2F8080128 -:10A24000B2F851202946ADF8002005F020FB9DF81A -:10A250000020C1B28A4207BFA16881F8E860A26805 -:10A2600082F8E8109DF80110C0F30720814219BF61 -:10A27000A16881F8E900A06880F8E96006E0FFE7DE -:10A280000120FFF7C8FB1E20FFF707FBA068D0E9FD -:10A2900028134A1C43F10001C0E9282104B070BD15 -:10A2A0002DE9F047FE4D04464FF00007687808435B -:10A2B0006870287910F0200F2846806818BFA0F831 -:10A2C0007C7004D1B0F87C10491CA0F87C1090F888 -:10A2D0006910012639B990F863200023062158300F -:10A2E00005F05FF958B3A88810F4006F07D0A8688C -:10A2F00090F86910002918BFA0F874701FD1A868E1 -:10A30000B0F87410491C89B2A0F87410B0F8762027 -:10A310008A422CBF511A00218288521D8A4228BFCE -:10A3200080F87A60B0F87410B0F87620914206D3C5 -:10A33000A0F8747080F81261E878F1F7DBFC2879F6 -:10A3400010F0600F08D0A86890F8671021B980F865 -:10A3500067600121FDF75EFF4FF00808002C56D121 -:10A360006878002851D1287910F0040F0DD0A86822 -:10A3700090F86300032808BFFFDFA86890F8661014 -:10A38000072904BF2E7080F8667001F015F928794E -:10A3900010F0080F19D06878B8B9A868002190F8B3 -:10A3A000C300FFF7F4FAA86890F8C300FF2808BFBD -:10A3B000FFDFFF21A86880F8C31090F86610082915 -:10A3C00003D10221297080F86670FFF760FBA8783E -:10A3D00010F0080F16D0A8680023052190F863201C -:10A3E000583005F0DEF850B185F80180A868D0F843 -:10A3F0003C1108780C2808BF0020087002E00020FB -:10A4000003F04DFDA86801F010F800F06CFDA8689D -:10A41000A14600F1580490F8EC0030B9A27B00236B -:10A420000121204605F0BDF810B1208D401C20858B -:10A430003D21B9F1000F18D12878022808BF162055 -:10A440000ED0012804BFA86890F8EE0008D0687804 -:10A45000E8B110F0140F1CBF1E20E07602D005E01A -:10A46000E07603E010F0080F02D0E176A67641E036 -:10A4700010F0030F03D02A20E076A6763AE010F021 -:10A48000200F08BFFFDF2320E076A67632E094F8A5 -:10A490002E0028B1608D411C6185A18D884213D2A8 -:10A4A00094F8320028B1208E411C2186A18D88426B -:10A4B0000AD2218DE08C814203D3AA6892F8EC2065 -:10A4C00012B9A28D914203D32220E076A67611E044 -:10A4D000E17B31B1A18C814228BF84F81B80C5D2B9 -:10A4E00006E0A08C062803D33E20E076A67601E0A5 -:10A4F000A07EA0B1E7722773E7730221A868FDF779 -:10A5000089FEA86890F8C310012904D1D0F8F4009E -:10A510000178491E0170E878F1F7ECFB03E00021B7 -:10A52000A868FDF777FEBDE8F047FAF7ECBF5C4995 -:10A530004A788B781A430ED101280AD0087910F096 -:10A54000040F04D0886890F86600072803D0012023 -:10A550007047FDF74BBE0020704770B5504C064663 -:10A560000D46A0883043A08016F0020F04D016F0EC -:10A57000010F18BFFFDFE56016F0010F18BF25615E -:10A5800016F0020F12D0284605F01BFC062802D058 -:10A590000B282ED00AE0A06890F86310182905D186 -:10A5A0000021C0E92811012180F8691016F0800F00 -:10A5B0001CBF0820A07016F4806F08BF70BDA06893 -:10A5C000B0F8581080880844801D86B2284605F0EF -:10A5D000F8FB012804BFA068A0F8FA6015D028464F -:10A5E00005F0EFFB68B1284605F0EBFB182823D0F7 -:10A5F0000BE0A06890F86310122908BF0021D5D1A4 -:10A60000D2E7A068D0F8F0008680284605F0D9FB94 -:10A6100001281DD0284605F0D4FB08B3284605F0D4 -:10A62000D0FB182818BF70BDA068B0F8EA10284603 -:10A63000BDE8704005F0D3BCA06890F8E810002990 -:10A6400002BF90F8E91000290026A0F8EA60DCE7D4 -:10A65000A068B0F8FA102846BDE8704005F003BCC9 -:10A66000A068D0F8F00081882846BDE8704005F069 -:10A67000CABBF0B50A4C85B00026A060A680667003 -:10A68000A670054626700088FAF705FFA0680088C6 -:10A69000FAF727FFB5F8D000A168401C82B201E0AC -:10A6A0000401002001F1580004F085FD002818BFC6 -:10A6B000FFDF95F8640025280AD1B5F85810B5F8E1 -:10A6C000EA00081A00B20028A4BF6078002804D06D -:10A6D00095F8630025283BD119E0A06890F8E810B0 -:10A6E000002908BF90F8511080F8511090F8E91037 -:10A6F000002908BF90F8521080F852100020FFF790 -:10A70000CCF885F86460A16881F87B6020E0B5F83A -:10A710005810B5F8EA00081A00B20028A4BF607803 -:10A72000002815D1A06890F8E810002908BF90F81B -:10A73000511080F8511090F8E910002908BF90F8E6 -:10A74000521080F852100020FFF7A7F885F86360D8 -:10A75000A5F8D060A06890F8861039B1B0F88210E2 -:10A76000B0F88420914224BF05B0F0BD90F88A1063 -:10A7700039B1B0F88810B0F88420914224BF05B0F8 -:10A78000F0BDB0F88020B0F87E108A4224BF05B03A -:10A79000F0BD90F867208AB3B0F87C208A4224BFCD -:10A7A00005B0F0BD90F8C370FF2F00F02A81684615 -:10A7B000FAF774FE002808BFFFDF009805F03FFAA3 -:10A7C0000321009805F052FA0098017821F0100159 -:10A7D0000170394605F0C7FA192F80F0E780DFE8ED -:10A7E00007F02A22144EE5E5E61B7CE5E6E66CE57B -:10A7F000E5E5E5D8E6E6869FB8E5C500B0F87C104B -:10A80000062924BF05B0F0BDCCE7A06890F8ED1094 -:10A81000009805F02FFBCAE0A06890F8C4100098DB -:10A8200005F078FBC3E0A068D0F8F400411C009864 -:10A8300005F011FBBBE0A068D0F8F000817900982A -:10A8400005F0DDFAA068D0F8F0000189009805F065 -:10A85000CFFAA068D0F8F0004189009805F0B3FA6B -:10A86000A068D0F8F0008189009805F0B3FAA068DC -:10A87000D0F8F000C189009805F0B3FA97E0A0681D -:10A88000D0F8F000011D009805F0F8FAA068D0F8A3 -:10A89000F00000F10C01009805F0FAFAA068D0F879 -:10A8A000F00000F11E01009805F0F8FAA06800F130 -:10A8B000B801009805F000FB79E060690178009824 -:10A8C00005F012FB60698188009805F00FFB606954 -:10A8D0004188009805F00EFB69E0FE49D1E90001CE -:10A8E000CDE9020102A9009805F018FB5FE0A0681D -:10A8F000B0F84410009805F01BFBA068B0F84610B3 -:10A90000009805F019FBA068B0F84010009805F019 -:10A9100017FBA068B0F84210009805F015FB46E060 -:10A92000A068B0F84010009805F00AFBA068B0F8E5 -:10A930004210009805F008FBA068B0F84410009899 -:10A9400005F0F6FAA068B0F84610009805F0F4FAA1 -:10A950002DE0A06890F80811009805F01CFBA06895 -:10A9600090F80911009805F01AFB20E0A06890F813 -:10A97000E80004F087FF0146009805F028FBA06876 -:10A9800090F8E90004F07EFF0146009805F023FBF3 -:10A990000DE0A06890F8E510009805F040FBA06875 -:10A9A00090F8E410009805F03EFB00E0FFDFFAF7B6 -:10A9B00088FD002808BFFFDF009F384605F001FA38 -:10A9C000012809D0384605F0FCF960B1384605F099 -:10A9D000F8F918280FD014E0A068B0F8FA1038463B -:10A9E00005F041FA0DE0A068D0F8F0008188384603 -:10A9F00005F009FA05E0A068B0F8EA10384605F05D -:10AA0000EEFAB5480090B54BB54A2946304603F0FA -:10AA100081F9A0680023052190F86320583004F0E4 -:10AA2000C0FD002804BF05B0F0BD05B0BDE8F04092 -:10AA300002F041BFAB48806890F8861029B1B0F8A9 -:10AA40008210B0F8842091421AD290F88A1029B16D -:10AA5000B0F88810B0F88420914211D2B0F880206C -:10AA6000B0F87E108A420BD290F86720B0F87C00D4 -:10AA700022B1884204D200BF03F0ECB90628FBD310 -:10AA8000002001460CE470B50C46064615464FF40E -:10AA9000A071204607F0C9F82680002D08BFFFDF0F -:10AAA0002868C4F8F0006868C4F8F400A868C4F81E -:10AAB0003C0170BDF6F7B3B82DE9F0410D460746ED -:10AAC0000621F5F7CBFF040008BFBDE8F081D4F8FC -:10AAD0003C110026087858B14A8821888A4207D15B -:10AAE000082810D00D281FD00C2835D0072850D0AA -:10AAF00094F8120100285ED06E700F20287084F840 -:10AB000012616F8042E06E7008202870D4F83C011A -:10AB10004168C5F802108168C5F80610808968810F -:10AB2000D4F83C01067031E00846F6F7A1F8074674 -:10AB3000F5F716FDB8B96E700D202870D4F83C01F9 -:10AB40004068C5F80200D4F83C0106703846F5F7B5 -:10AB500001FD0120BDE8F0810846F6F789F80746B7 -:10AB6000F5F7FEFC10B10020BDE8F0816E700C20FE -:10AB70002870D4F83C014168C5F802100089E880CB -:10AB8000D4F83C0106703846F5F7E4FC0120BDE836 -:10AB9000F0816E7007202870D4F83C01416882680B -:10ABA000C068C5F80210C5F80620C5F80A00D4F838 -:10ABB0003C010670EAE794F81401C8B16E701420E5 -:10ABC000287094F814010028E0D000BF84F81461C4 -:10ABD000D4F81601C5F80200D4F81A01C5F8060029 -:10ABE000B4F81E01688194F814010028EED1CDE775 -:10ABF00094F8200180B16E701A20287084F82061CA -:10AC0000D4F82201C5F80200D4F82601C5F80600E0 -:10AC1000B4F82A016881B9E794F82C0148B16E7044 -:10AC20001B20287084F82C61D4F82E01C5F802008E -:10AC3000ACE794F80C0190B16E701820287094F86D -:10AC40000C010028A2D000BF84F80C61D4F80E01DA -:10AC5000C5F8020094F80C010028F5D196E794F8A5 -:10AC60003201002808BFBDE8F0816E701520287001 -:10AC700094F83201002889D084F83261D4F8340184 -:10AC8000C5F80200B4F83801E88094F832010028D1 -:10AC9000F2D17BE7134A5061D17070472DE9F0473C -:10ACA0000446481E85B238BFBDE8F08704F10808A5 -:10ACB0000126DFF830904FF0080A0027B4F8D000E2 -:10ACC000401CA4F8D000B4F87C00401CA4F87C0020 -:10ACD0000AE000005C230200A1A201002FA50100F0 -:10ACE0005BA501000401002094F8690040B994F8C4 -:10ACF00063200023062104F1580004F052FCD8B16F -:10AD0000B4F87400401C80B2A4F87400B4F8761053 -:10AD100081422CBF0A1A0022A3885B1D934228BFE0 -:10AD200084F87A60884207D3A4F8747084F81261BA -:10AD300099F80300F0F7DEFF94F8860020B1B4F82C -:10AD40008200401CA4F8820094F88A0020B1B4F874 -:10AD50008800401CA4F8880094F8EC0040B994F8EE -:10AD600066200023012104F1580004F01AFC20B1F0 -:10AD7000B4F88000401CA4F8800094F863000C280C -:10AD800002D00D2820D067E0B4F85800411CB4F878 -:10AD9000FA00814260D1D4F8F400411C404607F02B -:10ADA00050F80221204604F034F9D4F8F400007879 -:10ADB000002808BFFFDF0121FF20FEF7E8FD84F82F -:10ADC000637084F8966047E0B4F85800411CD4F8EA -:10ADD000F000808881423FD1D4F83C0101780029FD -:10ADE00018BFFFDF22D12188C180D4F8F00041894B -:10ADF000D4F83C010181D4F8F0008189D4F83C01F9 -:10AE00004181D4F8F000C189D4F83C018181D4F8A3 -:10AE10003C010771D4F83C0180F800A0D4F83C0153 -:10AE20002188418099F80300F0F764FF0121204652 -:10AE300004F0EFF803212046FDF7ECF9D9F80800FB -:10AE4000D0F8F0000078022818BFFFDF0221FF20B1 -:10AE5000FEF79DFD84F86370B4F85800401C691E2D -:10AE6000A4F858008DB2BFF429AFBDE8F087FE4AC0 -:10AE7000C2E90601704770B50446B0F87C0094F84A -:10AE80006710002908BFC0F1020503D0B4F87E1096 -:10AE9000081A051F94F87A0040B194F86320002343 -:10AEA000092104F1580004F07CFBA0B1B4F87460EF -:10AEB00094F8690058B994F863200023062104F13E -:10AEC000580004F06EFB002808BF284603D0B4F8F1 -:10AED0007600801B001F8542C8BF0546002DD4BFE9 -:10AEE0000020A8B270BDF0B5DF4C83B0A06890F828 -:10AEF000C310FF2907BF6178002903B0F0BD90F8A7 -:10AF0000662000230121583004F04BFB00281CBFB1 -:10AF100003B0F0BDA06890F8EC1029B103B0022096 -:10AF2000BDE8F040FEF79ABC90F863200023194674 -:10AF3000583004F036FB48B1A06890F87A0028B188 -:10AF400003B01220BDE8F040FEF788BCA0680025E1 -:10AF500090F86320122A23D004DC032A47D0112A58 -:10AF600024D003E0182A3CD0242A4CD0002304210A -:10AF7000583004F016FB00281CBF03B0F0BDD4F815 -:10AF800008C0022701269CF864001A2800F01E81E0 -:10AF900041DC012873D002287FD0032863D03EE033 -:10AFA00003B00B20BDE8F040FEF758BCF8F7D5FD24 -:10AFB0000C283CBF03B0F0BDA0680821D0F8F00019 -:10AFC0001E30F8F7CBFD28B1A0680421B830F8F79F -:10AFD000C5FD00B9FFDF03B00320BDE8F040FEF778 -:10AFE0003DBC03B00620BDE8F040FEF737BC90F84A -:10AFF000C21080F8C4100720FEF730FCA06880F86B -:10B00000635003B0F0BD1820FEF728FCA068A0F83C -:10B01000825003B0F0BD1F2847D022287ED0DCF834 -:10B02000F0000178002900F010814088BCF8001081 -:10B03000884274D100239CF8632019460CF1580013 -:10B0400004F0AFFA00286AD0A068D0F8F0100978B0 -:10B05000022972D0032971D0042970D0052908BFB4 -:10B0600008206DD0F1E09CF8C1008CF8C4000720E6 -:10B07000FEF7F4FBA06800F0B0B900E00DE00C2092 -:10B08000FEF7ECFBA068A0F8885090F88E1041F015 -:10B09000010180F88E1000F0A0B91320FEF7DEFB4E -:10B0A000A068A0F8885000F098B99CF8FD0000282E -:10B0B0001CBF03B0F0BD9CF8FC0088B1BCF8FE00DA -:10B0C000ACF84000BCF80001ACF84200BCF802014A -:10B0D000ACF84400BCF80401ACF846008CF8FC5015 -:10B0E000FEF712FC0421A068FDF794F8A06890F820 -:10B0F0004E10012908BF80F84E7016D00288A0F8C3 -:10B100001621028EA0F81821828EA0F81A21428EF4 -:10B1100000F58671A0F81C21C08E01E011E094E0DA -:10B1200048820E72E078F0F7E5FD1520FEF796FBF9 -:10B13000A068A0F8885000F050B94CE051E071E0F0 -:10B1400058E09CF87B0058B18CF8E8508CF8E95036 -:10B150001820FEF783FBA068A0F8885003B0F0BD6C -:10B160009CF8070100281CBF03B0F0BD9CF8060145 -:10B17000002804BF03B0F0BDBCF84F10DCF8080194 -:10B18000ADF80410BCF85110ADF80010019904F0AE -:10B190007EFB9DF80020C1B28A4207BFA16881F8FA -:10B1A000E850A26882F8E8109DF80110C0F307206B -:10B1B000814219BFA16881F8E900A06880F8E950D0 -:10B1C000182003B0BDE8F040FEF748BB1120FEF7A1 -:10B1D00045FBA06801E190F8640004F0D5F9A0BB3C -:10B1E00008E090F8681041B190F86900002808BFA5 -:10B1F000FFDF0A20FEF732FB27E0F8F7AEFC0C2851 -:10B2000023D3A0680821D0F8F0001E30F8F7A6FC80 -:10B2100028B1A0680421B830F8F7A0FC00B9FFDF1E -:10B220000320E7E790F88E0010F0030F0DD10C20FB -:10B23000FEF714FBA068A0F8825080F8866090F8B2 -:10B240008E1041F0010180F88E10A06890F8C310B4 -:10B25000FF291CBF03B0F0BD90F8632000231946FE -:10B26000583004F09EF901E004010020002804BFDA -:10B2700003B0F0BDA06890F8F810E9B3A1690978AF -:10B28000D1BB90F8640004F07FF9A8BBA068B0F8C7 -:10B2900058100A2935D900F108010522E06906F0A5 -:10B2A000FFFB0028A06802BF80F8F85003B0F0BD93 -:10B2B000D0F8F400017869B1411C0522E06906F07C -:10B2C000EFFB00281CBF03B0F0BDA068D0F8F4006D -:10B2D000007830B9A068E169D0F8F400401C06F0AD -:10B2E000B0FDA068D0F8F4000178491C017001207D -:10B2F000FEF7B4FAA06800E003E080F8F85003B06D -:10B30000F0BDA06890F8FC1011B190F8FD1011B3D9 -:10B3100090F80611002904BF03B0F0BD90F80711A2 -:10B3200000291CBF03B0F0BD90F8640004F02CF9B4 -:10B3300000281CBF03B0F0BDA06890F8512090F821 -:10B340000811012A4DD0022A4ED0042A14BF082A1F -:10B3500004294BD05DE0B0F8FE10A0F84010B0F822 -:10B360000011A0F84210B0F80211A0F84410B0F893 -:10B370000411A0F8461080F8FC5090F864001E28D4 -:10B3800005D003B01420BDE8F040FEF767BAFEF721 -:10B39000BBFA0421A068FCF73DFFA06890F84E10AE -:10B3A000012908BF80F84E7013D00288A0F816213A -:10B3B000028EA0F81821828EA0F81A21428E00F584 -:10B3C0008671A0F81C21C08E48820E72E078F0F7DA -:10B3D00091FC1520FEF742FAA06880F8645003B093 -:10B3E000F0BD012915D101E0022912D190F85210C7 -:10B3F00090F80901012907D0022908D0042914BFB7 -:10B40000082904280BD004E0012802D107E0022813 -:10B4100005D003B01620BDE8F040FEF71FBA03B018 -:10B420000020BDE8F040FEF738BA70B5044690F849 -:10B43000630000250C2814D00D2818BF70BDB4F887 -:10B440005800D4F8F010401C8988884218BF70BD9D -:10B45000D4F83C01FE4E0178002918BFFFDF45D12A -:10B4600022E0B4F85800B4F8FA10401C884218BF23 -:10B4700070BDD4F8F400411C04F1080006F0E1FCB2 -:10B480000221204603F0C5FDD4F8F400007800281E -:10B4900008BFFFDF0121FF20FEF779FA84F863502F -:10B4A000012084F8960070BD2188C180D4F8F00096 -:10B4B000D4F83C1140890881D4F8F000D4F83C114C -:10B4C00080894881D4F8F000D4F83C11C089888183 -:10B4D000D4F83C010571D4F83C1108200870D4F868 -:10B4E0003C1120884880F078F0F704FC01212046C8 -:10B4F00003F08FFD03212046FCF78CFEB068D0F8E6 -:10B50000F0000078022818BFFFDF0221FF20FEF7BD -:10B510003EFA84F8635070BD70B5CD4CA16891F8C7 -:10B520006320162A11BF132A91F88C20002A627812 -:10B530001BBF02206070002A70BD81F8C00000258A -:10B5400081F88B5081F88650D1F8F0000988408846 -:10B55000884218BFFFDFA068D0F8F0000078032809 -:10B5600018BFFFDF0321FF20FEF711FAA068D0F813 -:10B570003C110A78002A18BFFFDF19D10288CA805F -:10B58000D0F83C2190F8C0101171D0F83C110D7228 -:10B59000D0F83C210C211170D0F83C210188518059 -:10B5A0000088F5F765FBF4F7C5FFE078F0F7A2FB3C -:10B5B000A06880F8635070BD10B5A54C207910F0DC -:10B5C000020F08BF10BD6078002818BF10BDE068EA -:10B5D000C078192880F06981DFE800F05F4F0D8F97 -:10B5E000F8F8A6223FF86F83B1F8F8F8F8F7E3E02F -:10B5F000F9F5F4F8F300A0680023012190F8662023 -:10B60000583003F0CEFF002818BF10BD0821A068F5 -:10B6100080F86610002180F8861080F88A1010BD2E -:10B62000A0680023194690F86420583003F0B9FF51 -:10B6300018B1A168002081F88A00A068002319468B -:10B6400090F86320583003F0ACFF002808BF10BD0D -:10B650000020A16881F8860010BDA068002319466B -:10B6600090F86320583003F09CFF002808BFFFDFEC -:10B670000420A16881F8630010BDA068002319466A -:10B6800090F86320583003F08CFF002808BFFFDFDC -:10B690000C20A16881F8630010BDA0680023194642 -:10B6A00090F86320583003F07CFF002808BFFFDFCC -:10B6B0000D20A16881F8630010BDA0680023194621 -:10B6C00090F86320583003F06CFF002808BFFFDFBC -:10B6D0000121A06880F88B105FF00F0180F86310E3 -:10B6E00010BDA06890F86300122818BFFFDF012189 -:10B6F000A06880F88C101121F0E7A068002319469B -:10B7000090F86320583003F04CFF28B9A06890F8F7 -:10B710008C00002808BFFFDF0121A06880F88B1093 -:10B72000132180F8631010BDA06890F863001828FA -:10B7300018BFFFDF1B20A16881F8630010BDA0685F -:10B74000D0F8F01003884A889A4204BF0978042987 -:10B7500019D190F8632000231946583003F021FFD7 -:10B76000002808BFFFDFA06890F88E1011F0020FCC -:10B7700004BF012180F8631005D0002180F88610F5 -:10B78000D0F8F0000170A0680023194690F86420FA -:10B79000583003F006FF002808BF10BD0020A16844 -:10B7A00080E0A0680023194690F86320583003F029 -:10B7B000F8FE002808BFFFDF0520A16881F86300BC -:10B7C00010BD30E01FE012E001E067E06DE0A0682E -:10B7D0000023194690F86320583003F0E2FE002859 -:10B7E00008BFFFDF1D20A16881F86300E8E7A068BB -:10B7F0000023194690F86420583003F0D2FE002848 -:10B8000008BFFFDFCAE7A0680023194690F863204D -:10B81000583003F0C6FE002808BFFFDF2020A168D3 -:10B8200081F86300CCE7A06890F8641022291DD04D -:10B8300090F86310242918BFFFDFC1D190F8E810F9 -:10B84000002906BF90F8E9100029252102E0000038 -:10B850000401002018BF80F863107FF4F9AE0021C6 -:10B8600080F863100846FEF718F8F1E690F8E81043 -:10B87000002907BF90F8E9100029252180F86410FD -:10B880008CD1002180F8641080F87B1090F80601BC -:10B8900000281CBF0020FEF700F87FE7A168002009 -:10B8A00081F8640081F88A008AE7FFDF88E70000FA -:10B8B00070B5FC4CE1680A88A1F8E62181F8E40142 -:10B8C00091F85100012808BF012508D0022808BFBF -:10B8D000022504D0042816BF08280325FFDFE068EE -:10B8E00080F8E85190F85200012808BF012508D0DF -:10B8F000022808BF022504D0042816BF0828032503 -:10B90000FFDFE068012180F8E95180F8E2110021B1 -:10B9100080F89211E078BDE87040F0F7EBB9F0B430 -:10B92000E048C06890F84E30478EC68E458FB0F81C -:10B930004010C28FB0F842C0022B1FD08D4238BFDA -:10B9400029460186624528BF62468286018FB0F88B -:10B950004430994238BF0B464386818FB0F8464049 -:10B96000A14238BF0C46C486BB4228BF1F4647864B -:10B97000B44228BF2646C686F0BC7047038E9D425F -:10B9800028BF1D46838E9A4228BF1A46A94298BFF7 -:10B990000D460586944598BF62468286002180F850 -:10B9A0004E10D3E72DE9F04FBE4C83B0207910F054 -:10B9B000010F04BF03B0BDE8F08F606901230521CA -:10B9C000C578E06890F86420583003F0EAFD00285C -:10B9D00018BF022D0BD00A2D18BF0B2D07D0032D39 -:10B9E00018BF062D03D0607840F0080060706078C2 -:10B9F00000281CBF03B0BDE8F08F60690227012654 -:10BA000090F8038000254FF02009B8F1000F1CBF0B -:10BA1000B8F1010FB8F1160F1FD1E06890F863007C -:10BA200003F0B2FDC8B1E16891F86300202814D09A -:10BA3000212808D0B8F1160F0CBF84F80190677068 -:10BA400003B0BDE8F08F262081F86300B8F1160F2F -:10BA500000F0AE822A20FFF72BFFB8F1190F80F01B -:10BA6000E282DFE808F046230DC1FEFEFDFCFBFE8E -:10BA700091B8FAFEFEFEFEF9F8F7F6F5F4FEF300D3 -:10BA8000E0680123194690F86620583003F089FDDC -:10BA9000002840F04D84606904F0EEF9E16881F817 -:10BAA0006801072081F8660000F042BCE0680123CD -:10BAB000002190F86420583003F073FD002800F056 -:10BAC000F083606904F0D3F9E168A1F87C01B1F872 -:10BAD0005820801A00B247F6FE728242A8BF0028A2 -:10BAE0004BDD01F5BF71606904F0B8F90B20E16826 -:10BAF0003FE0E0680123002190F86420583003F013 -:10BB000050FD002800F0CD83606904F083F900281F -:10BB100000F08982606904F07AF9E168A1F87C019B -:10BB2000B1F85820801A00B247F6FE728242A8BFD0 -:10BB3000002822DD606904F064F9E16881F87E0183 -:10BB4000606904F059F9E168A1F88001606904F0C6 -:10BB50003EF9E168A1F88201606904F03FF9E1680B -:10BB6000A1F88401606904F040F9E168A1F8860158 -:10BB70000D2081F8640000F0DBBB282081F8730001 -:10BB800081F8726000F0D4BBE0680123002190F8D6 -:10BB90006420583003F005FD0028E0680CD0A0F8C0 -:10BBA000885090F88A10491C80F88A105FF01001C4 -:10BBB00080F8641000F0BCBB90F8642001230521DC -:10BBC000583003F0EEFC00281CBF0820607040F0E5 -:10BBD000AF8300F066BBE06890F86410112908BFDD -:10BBE000122140F09282E3E7E0680123002190F8FF -:10BBF0006420583003F0D5FC80B9E06890F86420E8 -:10BC0000122A0BD001230521583003F0CAFC00286A -:10BC100018BF082000F0458300F0C7B9E06890F82D -:10BC20008C1031B9A0F8885090F88A10491C80F81F -:10BC30008A1000F1E001606904F037F9E06800F172 -:10BC4000B801606904F03CF9E0680BE01BE2AFE189 -:10BC500059E1F1E0CFE0DBE0EAE23AE0A2E0FFE226 -:10BC600022E072E190F8AA01002818BFFFDFE06827 -:10BC70000188A0F8AC1100F5D771606904F003F9F0 -:10BC8000E06800F5DB71606904F005F9E06880F8B0 -:10BC9000AA61142180F86410E078F0F72BF800F026 -:10BCA00047BB000024010020E06890F864101729C9 -:10BCB00040F02B8290F88A10491E49B280F88A1011 -:10BCC0000029B8BFFFDF1C20E16881F8640000F0A4 -:10BCD0002FBBE06890F8651011F0020F09D090F8C2 -:10BCE000632001230821583003F05BFC002800F09A -:10BCF000D882E06890F88E0010F0020F17D16069CA -:10BD000004F0FCF8E16881F88F00606904F0F8F84D -:10BD1000E168A1F89000606904F0F5F8E168A1F825 -:10BD2000920091F88E0040F0020081F88E00E068E9 -:10BD300090F88E1011F0010F05D0E06890F86310B4 -:10BD400006291CD114E090F8650010F0020F18BF0E -:10BD5000FFDFE06890F8651041F0020180F865109F -:10BD6000A0F8885090F88A10491C80F88A10E4E7FF -:10BD700080F8635080F88650E078EFF7BBFFE0680A -:10BD800090F87A11042940F0D38280F87A51E07853 -:10BD9000EFF7B0FFE06890F86310002940F0C88228 -:10BDA00000F043BAE06890F8650010F0010F7BD115 -:10BDB0006946606904F0B7F8E0689DF8002090F8E3 -:10BDC0009410114001F02F0180F8941090F8951014 -:10BDD0009DF80120114001F0410180F89510A0F874 -:10BDE000885090F88A10491C80F88A1090F86510E5 -:10BDF00041F001011CE0E0680123092190F8632073 -:10BE0000583003F0CEFB002800F04B8200F041BA1E -:10BE1000E06890F8651011F0040F40F04282A0F83D -:10BE2000885090F88A2041F00401521C80F88A2042 -:10BE300080F8651000F07CBAE06890F8650010F0BA -:10BE4000300F31D1606904F08BF800287DD0606933 -:10BE500004F082F8E1680887606904F079F8E16825 -:10BE60004887606904F07AF8E1688887606904F0BF -:10BE700071F8E168C887207910F0020F03D02069BB -:10BE8000C078142811D091F863001D280DD091F8C6 -:10BE90004E0001280BD091F88901002804BF91F8C9 -:10BEA000880100280AD002E074E081F84E6091F821 -:10BEB000650040F0100081F865001AE091F8650017 -:10BEC00040F0200081F865000A88A1F8CA210A8F95 -:10BED000A1F8CC214A8FA1F8CE218A8F01F5CB7031 -:10BEE000A1F8D021C98F818780F83260E078EFF720 -:10BEF00001FFE068A0F8885090F88A10491C80F88B -:10BF00008A1000F015BAE06801230A2190F8632036 -:10BF1000583003F046FBE8B3606904F021F8B8B18B -:10BF2000606904F019F8E1680887606904F010F8A6 -:10BF3000E1684887606904F011F8E1688887606902 -:10BF400004F008F8E168C88700E06CE0FFF7E7FC60 -:10BF5000E068052180F8865080F86350FDF7FBFA11 -:10BF6000E06890F84E10012908BF80F84E7000F08C -:10BF7000DF810288A0F8BE21028EA0F8C021828E47 -:10BF8000A0F8C221428E00F5CB71A0F8C421C08E6A -:10BF9000088600E006E081F82660E078EFF7AAFE68 -:10BFA00000F0C6B9607840F00100607000F0C0B9E0 -:10BFB000E06801230B2190F86420583003F0F1FA77 -:10BFC00020B100BF84F8019000F0B2B9E06801230D -:10BFD000002190F86420583003F0E3FA002800F0C4 -:10BFE0006081E06890F863002528EBD0606903F079 -:10BFF000DAFFC0B1606903F0D4FFE16800F0070028 -:10C0000081F85000606903F0C8FF00F00701E068A4 -:10C0100080F84F1090F89321002A04BF90F89221E5 -:10C02000002A04D022E001F0DEF900F081B990F896 -:10C0300052C090F8503000F151028C4502BF117887 -:10C04000994280F87B6011D000F5CB7180F8DC61FB -:10C050000288A0F8DE2190F84F2080F8E02190F8C7 -:10C06000500081F84B00E078EFF744FEE0682221B1 -:10C0700080F86410A0F8885090F88A10491C80F865 -:10C080008A1000F055B9E06890F8631021290CBFC0 -:10C090004FF001084FF0000890F86410232908BF02 -:10C0A00000F1640705D0B8F1000F18BF00F1630775 -:10C0B0002BD0606903F099FFF0B3D4F81490484690 -:10C0C00003F087FF0090484603F087FF8146E06851 -:10C0D00090F89211002907BF4FF0000BDA4690F854 -:10C0E00094B190F895A1484603F05AFBB0B1E268CC -:10C0F00092F85110814211D019EA0B0F41D0B8F1DA -:10C10000000F08BF012802D008E0677010E1022983 -:10C1100004BF92F8500010EA090F32D0009803F0E3 -:10C120003FFB68B1009803F03BFBE16891F85210C7 -:10C13000884205D0009800E023E010EA0A0F20D0E2 -:10C140006A466169E06803F03AFBD8B3606903F0BE -:10C150004AFFE168A1F87C01B1F85820801A00B2CA -:10C1600047F6FE728242A8BF00284ADD9DF8000013 -:10C1700081F87E019DF8010081F87F01252038704B -:10C1800044E0E06890F8920100281CBF1E20FFF7F1 -:10C190008FFBB8F1000F16D0606903F012FEE16862 -:10C1A00081F8C20006FA00F010F0807F08BFFFDFC0 -:10C1B0000A21E06880F8631090F88600002808BF24 -:10C1C000FFDF0DE010E03D70E16891F88A00401E4D -:10C1D00040B281F88A000028B8BFFFDF01F003F900 -:10C1E000E06880F87B50A3E0E06890F892010028B6 -:10C1F0001CBF0020FFF75CFB3D70E06880F87B50BF -:10C2000004E0282081F8730081F87260E06800F192 -:10C2100064018F4209D190F88A10491E49B280F812 -:10C220008A100029B8BFFFDF82E080F886507FE0E7 -:10C23000606903F0F6FE16287AD1E06890F8630092 -:10C24000212802D0262805D072E0606903F0EDFEB7 -:10C25000FFF72EFBE06880F8635080F8865067E0B7 -:10C26000E06890F863000E2804D1606903F054FE82 -:10C27000122805D0E06890F863001D2818D112E05C -:10C28000E0680123092190F86320583003F089F910 -:10C2900038B1E06880F87A5080F8865080F86350B2 -:10C2A00046E0667044E0606903F036FE142805D06D -:10C2B000E06890F8630021282BD125E0E068052193 -:10C2C00080F8635080F88650FDF745F9E16891F8F1 -:10C2D0004E00012808BF81F84E7029D00A88A1F8C5 -:10C2E000BE210A8EA1F8C0218A8EA1F8C2214A8EF1 -:10C2F00001F5CB70A1F8C421C98E018680F82660B3 -:10C30000E078EFF7F7FC13E0606903F005FE16280C -:10C3100005D0606903F000FE172809D113E0E0683A -:10C3200080F8635080F886505FF01A00FFF7C0FA7B -:10C33000E068D0E928134A1C43F10001C0E9282134 -:10C3400003B0BDE8F08FE06890F864102329EFD1C6 -:10C3500080F8645090F88A10491E49B280F88A101B -:10C360000029B8BFFFDFE06880F87B5090F89201A9 -:10C37000002818BF0020DBD0D8E770B5F84E05467E -:10C380000C46F06890F8C300FF2818BFFFDFF26882 -:10C390000020002C82F8C3501CBFA2F8880070BD9A -:10C3A000A2F88200012082F8860070BD10B584B02A -:10C3B00004466846F9F772F8002808BFFFDF0098C6 -:10C3C00003F03DFC0321009803F050FC0098017835 -:10C3D00021F010010170214603F0C5FCA01E1628B3 -:10C3E00073D2DFE800F00BAA4EABAB13AA5CAAAB8A -:10C3F0001B2CAAAAAAAAABAB31734B8DD848C06834 -:10C4000090F8C410009803F035FD97E0D448C06858 -:10C4100090F8C410009803F07DFD8FE0D04CA06828 -:10C420000178009803F060FDA0688188009803F00F -:10C430005DFDA0684188009803F05CFD7EE0062168 -:10C44000009803F063FD79E0C54CE068B0F8441053 -:10C45000009803F06DFDE068B0F84610009803F016 -:10C460006BFDE068B0F84010009803F069FDE068EB -:10C47000B0F84210009803F067FD5FE0B84CE06848 -:10C4800043E0B74CE06800F1E801009803F01CFDC0 -:10C49000E06800F1BC01009803F020FD4EE00020B0 -:10C4A00002900390AE48C06890F8941001F0F50136 -:10C4B0008DF8081090F8950002A900F041008DF861 -:10C4C0000900009803F05DFD38E036E0A44CE06818 -:10C4D000B0F84010009803F033FDE068B0F8421067 -:10C4E000009803F031FDE068B0F84410009803F0C4 -:10C4F0001FFDE068B0F84610009803F01DFD1DE038 -:10C50000974CE06890F8921159B190F89411009806 -:10C5100003F041FDE06890F89511009803F03FFDAD -:10C520000CE090F85110009803F035FDE06890F8A9 -:10C530005210009803F033FD00E0FFDFF8F7C1FF71 -:10C54000002808BFFFDF04B010BD70B50C460546DB -:10C550004FF4F871204605F068FB258070BDF4F7B4 -:10C560005EBB2DE9F0410D4607460721F4F776FA48 -:10C57000040008BFBDE8F08194F896010026C8B118 -:10C580006E700820287094F8960188B1268484F88B -:10C590009661D4F89801C5F80200D4F89C01C5F85A -:10C5A0000600B4F8A001688194F896010028EDD146 -:10C5B000AE7044E094F8A201002837D094F8A201AC -:10C5C0000C2818D00D2818BFFFDF38D12088F4F7C9 -:10C5D0004FFB0746F3F7C4FFA0B96E700D2028701B -:10C5E00094F8A401A8702088A88084F8A261384635 -:10C5F000F3F7B0FF23E02088F4F73AFB0746F3F7A0 -:10C60000AFFF10B10020BDE8F0816E700C202870E3 -:10C6100094F8A401A8702088A88094F8A801A871B3 -:10C6200084F8A2613846F3F795FF08E094F8DA0140 -:10C6300040B16E700F20287084F8DA616F8001209D -:10C64000BDE8F08194F8AA0180B16E7009202870CD -:10C6500020886880D4F8AE01D4F8B2116860A9606F -:10C66000B4F8B601A88184F8AA61E8E794F8B801A3 -:10C6700040B16E7017202870B4F8BA01688084F851 -:10C68000B861DCE794F8D40188B16E701820287086 -:10C6900094F8D4010028D2D084F8D461D4F8D6011B -:10C6A000C5F8020094F8D4010028F5D1C7E794F842 -:10C6B000BC01C8B16E701420287094F8BC01002829 -:10C6C000BDD000BF84F8BC61D4F8BE01C5F802003B -:10C6D000D4F8C201C5F80600B4F8C601688194F820 -:10C6E000BC010028EED1AAE794F8C80180B16E70B1 -:10C6F0001A20287084F8C861D4F8CA01C5F802006D -:10C70000D4F8CE01C5F80600B4F8D201688196E7E6 -:10C7100094F8DC0140B11B20287084F8DC61D4F867 -:10C72000DE01C5F802008AE794F8E201002808BF9C -:10C73000BDE8F0816E701520287094F8E2010028A1 -:10C740003FF47DAF84F8E261D4F8E401C5F802005B -:10C75000B4F8E801E88094F8E2010028F2D16EE72D -:10C7600024010020FA4A9060D1707047002180F8BF -:10C77000631080F8641080F8671090F8D61011B13B -:10C780000221FCF7E8BE0321FCF7E5BE2DE9F047E6 -:10C79000EF4C81460D46E0680088F4F77BFA06000E -:10C7A00008BFFFDF60782843607020794FF00005F4 -:10C7B00010F0200FE0681CBFA0F87C5080F8DC501F -:10C7C00004D1B0F87C10491CA0F87C10E068012767 -:10C7D00090F8691039B990F8642001230621583087 -:10C7E00002F0DFFE48B3A08810F4006F07D0E068C5 -:10C7F00090F86910002918BFA0F874501DD1E068A6 -:10C80000B0F87410491C89B2A0F87410B0F87630F2 -:10C810008B422CBF5A1A0022B4F806C00CF1050C4A -:10C82000624598BF80F87A70994206D3A0F8745098 -:10C8300080F8DA71E078EFF75DFA20794FF0020ABC -:10C8400010F0600F11D0E06890F8671011B1032963 -:10C8500006D00AE080F867700121FCF77CFE04E056 -:10C8600080F867A00121FCF776FEE06890F8671079 -:10C87000012905D1A18811F4807F18BF80F867A035 -:10C880004FF00808B9F1000F40F03281A18811F48F -:10C89000007F18BFA0F8F05004D1B0F8F020521C6F -:10C8A000A0F8F02011F0080F47D06178002944D19A -:10C8B00090F8C300FF2808BFFFDFFF21E06880F881 -:10C8C000C31090F86410192905D0E06890F863103F -:10C8D00020290FD028E080F88B5090F88A10491E4C -:10C8E00049B280F88A100029B8BFFFDFE06880F8FD -:10C8F0006450EAE790F8640002F046FE80B1E06818 -:10C900002621012380F8631090F864200B21583011 -:10C9100002F047FE002804BF2A20FEF7C9FF03E00B -:10C92000E168212081F86300E06890F8661008292A -:10C9300004BF84F800A080F86650FFF733F8207930 -:10C9400010F0040F09D0607838B9E06890F86610EC -:10C95000072904BF277080F8665000F0C5FB2079D6 -:10C9600010F0100F09D0607838B9E06890F86410C2 -:10C970000B2904BF0C2180F86410A07810F0080F78 -:10C9800011D0E0680123052190F86420583002F0AE -:10C9900008FE28B184F80180E06880F8A25102E026 -:10C9A000002001F07CFA00F03CFD01F06EFA002856 -:10C9B000E06818BFA0F8D05004D1B0F8D010491CDE -:10C9C000A0F8D01001F064FA40B1E16891F8DC0001 -:10C9D00002289CBF401C81F8DC0004D8E06890F875 -:10C9E000DC00022806D9E068A0F8D050A0F8D250A8 -:10C9F00080F8DC50E0680123002190F86420583072 -:10CA000002F0CFFD20B9E06890F864000C2859D1FD -:10CA1000E0680123002190F86320583002F0C1FD46 -:10CA200000284FD0E0680123002190F8662058309C -:10CA300002F0B7FDF0B3E06890F86710022904BF78 -:10CA400090F8DC0000283DD13046F3F70FFB88B3A7 -:10CA5000E06890F8C310FF2934D1B0F8CA1001295A -:10CA600030D980F8D570B0F87E10B0F87C208B1EDD -:10CA70009A42AFBF0121891A491E89B2B0F8D0305D -:10CA8000E28893422FBF0122D21A521C92B29142E5 -:10CA900088BF1146012908BF80F8D55090F8612160 -:10CAA000A2B1B0F8D220B0F8620182422CBF0120BE -:10CAB000801A00E006E03CBF401C80B2814288BF83 -:10CAC000014603E0E068012180F8D550E068B0F845 -:10CAD0005820114489B2A0F8CC1090F86730002B90 -:10CAE00018BF012B5FD0022B1CBF032BFFDF09D027 -:10CAF000A088C0F340200028E06818BFA0F8DE50EE -:10CB00005BD153E090F86630082B23D0B0F87C104E -:10CB1000B0F87E2000268B1C9A4206D3511A891E3B -:10CB20000E04360C1CBF711E8EB290F87A1051B1F3 -:10CB300090F8632001230921583002F032FD0028CB -:10CB400008BF00262BD0E06890F8691099B90AE078 -:10CB500024010020B0F87C30032B24D3B0F87E10E1 -:10CB60001144491C1FE090F864200123062158302D -:10CB700002F017FD78B1E1680020B1F87620B1F835 -:10CB800074108B1C9A4203D3501A801E18BF401E8B -:10CB9000B04238BF86B2002E1CBF701E86B2E0685D -:10CBA000B0F8CC103144A0F8C810A1E7B0F8DE10FE -:10CBB000B0F8CE201144A0F8DE10E06890F86611BD -:10CBC00039B990F8662001231946583002F0E9FC83 -:10CBD00038B1E068B0F88010B0F8CE201144A0F869 -:10CBE0008010E06890F8863033B1B0F88210B0F869 -:10CBF000CE201144A0F8821090F98AC0BCF1000F39 -:10CC000006DDB0F88810B0F8CE201144A0F88810E6 -:10CC10003D22B9F1000F18BF80F873204DD1217863 -:10CC2000022910D0012908BF90F8681143D061781B -:10CC300039B380F8727011F0140F18BF1E210CD098 -:10CC400080F8731055E090F8C410062905BF90F8DD -:10CC5000C3100229162106212DE011F0080F18BF7C -:10CC600080F8732045D111F0200F18BF2321E7D1A0 -:10CC700011F0030F08BFFFDF2A20E16881F873007D -:10CC800033E02BB1B0F88210B0F88420914211D279 -:10CC9000BCF1000F05DDB0F88810B0F88420914297 -:10CCA00008D2B0F88020B0F87E108A4208D390F8FD -:10CCB00066212AB1222180F8731080F8727018E082 -:10CCC00090F867203AB1B0F87C208A4228BF80F8FB -:10CCD0007380F2D209E0B0F87C10062905D33E211A -:10CCE00080F8731080F8727003E0E06890F87210BA -:10CCF00079B1E06880F8635080F8645080F867503C -:10CD000090F8D610002914BF02210321FCF723FC60 -:10CD100002E00021FCF71FFCE06880F8D650BDE877 -:10CD2000F047F8F7F0BBF949024648788B7818438A -:10CD30000ED10846C0684AB1097911F0080F03D036 -:10CD400090F86600082803D001207047FCF74FBB1D -:10CD5000002070472DE9F041EC4C05460E46A088B6 -:10CD60002843A08015F0020F04D015F0010F18BF62 -:10CD7000FFDF266115F0010F4FF000084FF00107AB -:10CD80001CD03046666103F01CF8062802D00B2840 -:10CD90000BD013E0E06890F8641017290ED1002141 -:10CDA000C0E9261180F8687008E0E06890F8641027 -:10CDB000112904BF80F8688080F88C7015F0020F8C -:10CDC00018D02069C078052802D00B280BD011E0BC -:10CDD000E06890F8641015290CD10021C0E92811F1 -:10CDE00080F8697006E0E06890F86410102908BFC8 -:10CDF00080F8698015F0800F1CBF0820A070BDE886 -:10CE0000F0812DE9F84FC14C00254FF00108A580B5 -:10CE10006570A5702570E06068F30709074680F823 -:10CE2000D6800088F3F736FF5FEA000A08BFFFDF0D -:10CE3000E0680088F8F72FFBE0680088F8F751FBFE -:10CE4000E068B0F8CA1071B190F8C310FF290FD193 -:10CE500090F8661191B190F8662001231946583078 -:10CE600002F09FFB98B1E06890F8C300FF2805D05E -:10CE7000E06890F8C30000BFFFF798FAD4F80CC040 -:10CE80009CF8D700002818BFE5801ED10FE0E068AD -:10CE9000A0F8805090F8671180F8C410002102209B -:10CEA000FFF76BFAE06880F8D5500220E4E79CF8C1 -:10CEB000960138B9BCF82000BCF80410884288BF3D -:10CEC000E08002D8BCF80400E080BCF8CE00401E30 -:10CED00086B2BCF8D0003044ACF8D0009CF8D40046 -:10CEE00000281CBFACF8D2508CF8D45004D1BCF848 -:10CEF000D2003044ACF8D200BCF87C003044ACF82E -:10CF00007C009CF8690040B99CF86420012306214C -:10CF10000CF1580002F045FB28B1E068B0F874103D -:10CF20003144A0F87410E068B0F8CA1001299CBF21 -:10CF3000491CA0F8CA10002E18BF80F8DC5090F8E9 -:10CF4000D510A1B1B0F8D000E18888420FD2504688 -:10CF5000F3F78CF858B1E06890F8611139B1B0F886 -:10CF6000D210B0F86201814228BF00F094FFE2685D -:10CF700082F8D55092F864000B2818BF0C2817D1FE -:10CF8000B2F85810B2F87C31C91A09B200290FDB87 -:10CF900002F5BF7102F1080004F053FF0221E068BE -:10CFA00001F0FEFEE06880F8645080F8968048E06A -:10CFB000252824D1B2F85800B2F87C11401A00B2EA -:10CFC00000281CDB92F8921192F87E01002808BF1D -:10CFD00092F8510082F8510092F87F01002808BFB2 -:10CFE00092F8520082F8520000291CBF0020FEF780 -:10CFF0005FFCE06880F8645080F87B5021E092F894 -:10D00000630025281DD1B2F85800B2F87C11401AEF -:10D0100000B2002815DB92F87E01002808BF92F8C4 -:10D02000510082F8510092F87F01002808BF92F861 -:10D03000520082F852000020FEF73AFCE06880F8C7 -:10D040006350E16801F15800B1F8CE2002F0B3F866 -:10D05000E06890F86111002918BFA0F8D2502C4860 -:10D0600000902C4B2C4A3946484600F053FEE068AD -:10D070000123052190F86420583002F092FA00282C -:10D0800008BFBDE8F88FBDE8F84F00F014BC00F011 -:10D09000E1BE10B50446B0F882214388B0F884118F -:10D0A000B0F886019A4201BFA3889942E38898426A -:10D0B0000FD02388A4F89A31A4F89C21A4F89E11DB -:10D0C000A4F8A001012084F896011048C078EEF77A -:10D0D00011FE0121204601F063FE002084F8640067 -:10D0E000032084F8670010BD70B5084C207910F05B -:10D0F000020F08BF70BD6078002818BF70BD20699E -:10D10000C178891E162980F06C8107E02401002077 -:10D110008DC7010027CD010055CD0100DFE801F0EA -:10D120000BF969758B1BF942F95BBE80F9F9F9F9C6 -:10D13000FAF7F6F5F4F3E0680123194690F8662053 -:10D14000583002F02EFA002818BF70BD0820E168A0 -:10D1500081F8660070BD02F0DFFEE16891F863209F -:10D160000A2A04BF91F8C220824205D1002081F82A -:10D17000630081F8860070BD91F8650010F0080F1B -:10D1800004BFFFDF70BD20F0080081F8650091F852 -:10D190008A00401E40B281F88A000028A8BF70BDF6 -:10D1A00000F0D8B8E06890F8650010F0010F08BFF3 -:10D1B000FFDFE16891F88A00401E40B281F88A00E2 -:10D1C0000028B8BFFFDFE06890F8651021F001018A -:10D1D00080F8651070BDE06890F86400102818BFF2 -:10D1E000FFDF0121E06880F88B10112180F86410C6 -:10D1F00070BDE06890F86400142818BFFFDF0121BB -:10D20000E06880F88B101521F0E7E06890F8640082 -:10D21000152818BFFFDF1720E16881F8640070BD92 -:10D22000E06890F86400152818BFFFDF1920E16856 -:10D2300081F8640070BDE06890F864001C2818BF95 -:10D24000FFDF0025E06880F88B5090F8A2010028ED -:10D2500018BFFFDFE06890F88C1041B180F88C5067 -:10D260000188A0F8A61180F8A4510D2108E00188DA -:10D27000A0F8A61180F8A451012180F8A8110C2172 -:10D2800080F8A2110088F3F7F3FCF3F753F9E07884 -:10D29000EEF730FDE06880F8645070BDE06890F80B -:10D2A0007A11042915D0E06890F8651011F0020F8A -:10D2B00008BF70BD90F88A10491E49B280F88A10E4 -:10D2C0000029B8BFFFDFE06890F8651021F0020187 -:10D2D0007EE790F8632001230021583002F061F9C5 -:10D2E000002808BFFFDFE06890F88E1011F0020FF1 -:10D2F00007BF062180F86310002180F8861018BF50 -:10D3000080F87A11CFE760E04FE035E024E011E0EB -:10D3100000E066E0E0680123002190F863205830C7 -:10D3200002F03FF9002808BFFFDF0E20E16881F816 -:10D33000630070BDE06890F8651021F0040180F88A -:10D34000651090F88A10491E49B280F88A100029A9 -:10D35000A8BF70BDFFDF70BDE0680123002190F819 -:10D360006320583002F01DF9002808BFFFDF1D20A0 -:10D37000E16881F8630070BDE06890F8650000F036 -:10D380003000102818BFFFDFE06890F8651021F02A -:10D39000100180F8651090F88A10491E49B280F893 -:10D3A0008A100029A8BF70BDD4E7E06801230021DE -:10D3B00090F86320583002F0F4F8002808BFFFDF2F -:10D3C0002020E16881F8630070BDE06890F8640097 -:10D3D00022281CBF0028FFDF2320E16881F86400B9 -:10D3E00070BDFFDF70BD10B5FE4CE16891F86500BF -:10D3F00010F0080F1EBF0120607010BD40F0080043 -:10D4000081F86500606902F0DCFCE16881F8C10028 -:10D410000020A1F8880091F88A00401C81F88A0059 -:10D4200010BD2DE9F041EF4CE06890F8C310FF29E2 -:10D4300006BF61780029BDE8F08190F866200123DD -:10D440001946583002F0ADF8002818BFBDE8F08149 -:10D45000E068002790F8661159B1A0F8807090F844 -:10D46000671180F8C410BDE8F04100210220FEF7EA -:10D4700084BF90F8642001230421583002F091F811 -:10D480005FEA00084FF002054FF001060CD0D4F817 -:10D490000CC09CF8640010287ED014287DD015287C -:10D4A0007CD01C287BD0E1E0E16891F8650010F0A9 -:10D4B000010F05D0BDE8F04101210920FEF75DBF55 -:10D4C00010F0020F0CD001210C20FEF756FFE0688F -:10D4D00090F88E1041F0010180F88E10BDE8F081C7 -:10D4E00010F0040F05D0BDE8F04101211320FEF734 -:10D4F00044BF10F0080F09D091F8C10081F8C400B2 -:10D50000BDE8F04101210720FEF737BF10F0100FF2 -:10D5100002D091F8890120B191F8640022287DD1D0 -:10D520009BE091F8880188B1B1F88A01A1F8400028 -:10D53000B1F88C01A1F84200B1F88E01A1F84400C5 -:10D54000B1F89001A1F8460081F88871FEF7E7F97B -:10D550000521E068FBF7FFFFE06890F84E10012915 -:10D5600008BF80F84E5014D00288A0F8BE21028E69 -:10D57000A0F8C021828EA0F8C221428E00F5CB71A6 -:10D58000A0F8C421C08E088681F82660E078EEF706 -:10D59000B1FB0121152003E006E00BE023E056E09B -:10D5A000BDE8F041FEF7E9BEBDE8F04101210B20E6 -:10D5B000FEF7E3BEF6F7D1FA0C2838BFBDE8F081DC -:10D5C0000821E068E830F6F7C9FA28B1E0680421DC -:10D5D000BC30F6F7C3FA00B9FFDFBDE8F041012126 -:10D5E0000420FEF7CABE9CF86901012817D0022862 -:10D5F00018BFBDE8F0819CF88C0000281CBF0620F5 -:10D600008CF8C4004FF0010114BF02200D20FEF77A -:10D61000B4FEE06880F86971BDE8F08126E09CF80E -:10D62000A201002818BFBDE8F0810CF1A803002278 -:10D630000CF1E0010CF5B57001F03BFF0121052074 -:10D64000FEF79BFEE06880F86971BDE8F081BDE8F7 -:10D65000F04101210620FEF790BE91F87B00C0B991 -:10D6600091F8920110B191F8930190B1E068012313 -:10D67000002190F86320583001F093FFC8B1E068B2 -:10D680000123042190F86420583001F08AFF30B162 -:10D690000FE0BDE8F04101211720FEF76EBEE06803 -:10D6A00090F87A0028B1BDE8F04100211220FEF781 -:10D6B00064BEE06890F863200A2A4DD0B8F1000FEC -:10D6C00018BFBDE8F08101230021583001F069FF47 -:10D6D00048B1E06890F87A11042904BF90F88E00F0 -:10D6E00010F0030F42D0E0680123002190F863207E -:10D6F000583001F056FF002808BFBDE8F081E0680F -:10D7000090F8881111B190F88911E1B390F8921155 -:10D71000002908BFBDE8F08190F89311002918BFD7 -:10D72000BDE8F08190F8642001230B21583001F00E -:10D7300038FF002818BFBDE8F081E06890F851205C -:10D7400090F89411012A71D0022A73D0042A14BFD0 -:10D75000082A042970D082E090F8C21080F8C41022 -:10D76000BDE8F04100210720FEF707BE00210C2094 -:10D77000FEF703FEE06890F88E1041F0010180F89A -:10D780008E10BDE8F081FFE7B0F88A11A0F84010D4 -:10D79000B0F88C11A0F84210B0F88E11A0F8441027 -:10D7A000B0F89011A0F8461080F8887190F86500E4 -:10D7B00010F0200F34D0FEF7B2F80521E068FBF737 -:10D7C000CAFEE06890F84E10012908BF80F84E505C -:10D7D00017D00288A0F8BE21028E00F5CB71A0F808 -:10D7E000C02101E024010020828EA0F8C221428ED7 -:10D7F000A0F8C421C08E088681F82660E078EEF794 -:10D8000079FA01211520FEF7B8FDE06890F865105F -:10D8100021F0200141F0100180F86510BDE8F08191 -:10D82000BDE8F04100211420FEF7A7BD012916D163 -:10D8300002E0FFE7022912D190F8522090F89511EA -:10D84000012A07D0022A08D0042A14BF082A042972 -:10D8500022D004E0012902D11EE002291CD090F858 -:10D86000642001230321583001F09BFE002818BFDB -:10D87000BDE8F081E0680123022190F8642058306F -:10D8800001F08FFE002818BFBDE8F0810021BDE83F -:10D89000F0411620FEF771BDBDE8F0410020FEF713 -:10D8A00007B8000030B5FF4C05462078002818BFA7 -:10D8B000FFDFA57230BDFB49012048727047FA486E -:10D8C00000B502784168406801F1580C91F8633066 -:10D8D00090F85100252B1CBF9CF80CC0BCF1250F03 -:10D8E00017D0202B18BF212B38D0BCF1230F18BF25 -:10D8F00000BD002A08BF00BD91F8942191F8501096 -:10D90000114011F0010F44D0082818BF04284CD052 -:10D910004EE08AB191F87E11002908BF00BD0828A9 -:10D9200018BF042841D0082918BF04293DD0012878 -:10D9300018BF01293CD036E091F8E810002908BF53 -:10D9400000BD082818BF04282FD0082918BF0429B3 -:10D950002BD0012818BF01292AD024E0BCF1230FC5 -:10D96000C7D0002A08BF00BD91F8941111F0010F33 -:10D9700004D0082818BF042817D019E011F0020FAE -:10D9800008BF00BD082818BF04280ED001280FD0FA -:10D9900009E011F0020F08BF00BD082818BF0428D5 -:10D9A00003D0012804D0022000BDFFDF082000BD05 -:10D9B000012000BD2DE9F14FBB4E4FF0010831466B -:10D9C0006FF00E0A4F686FF00D0B97F85210F88E3B -:10D9D00002290CBF0AEB90000BEBD00085B2788EC9 -:10D9E000A84238BF0546AF4C2946606BF2F77AFB78 -:10D9F000DFF8B892E06200281DBF0021A170A0628C -:10DA000084F8028008BFC4F8289030787068014616 -:10DA100000F1580890F86930428E91F85210C08E8B -:10DA200002290CBF0AEB90000BEBD00080B28242BF -:10DA300038BF1046002B1CBF001D80B2F6F756FE03 -:10DA400098F81100002838D008F15001974891E863 -:10DA50000E1000F5027A8AE80E10D8F86010C0F8AF -:10DA60002112D8F86410C0F8251200F58170F7F77C -:10DA7000B6F9307800280CBF0120002080F00101A9 -:10DA80008B480176D8E91212C0E90412C4F8289034 -:10DA90004946A581A0F58372F6F71BFD97F8520061 -:10DAA000012808BF002104D002281ABFFFDF00218F -:10DAB00001210120F6F71BFD04E0A06AF7F78FF9BA -:10DAC000F6F738FD009848B9012297F852309621B0 -:10DAD0001046F7F741F89620F7F7A9F997F82C00C8 -:10DAE000012808BFF7F726FA02202070BDE8F88F5A -:10DAF0002DE9F04FDFF8B08183B0414681464E6892 -:10DB0000A1F11400009096F85D004FF0000A012783 -:10DB100006F15804A1F1380570B3012873D002282A -:10DB200075D0032818BFFFDF7FD0686A082201780C -:10DB300021F008010170A37902EAC302114321F028 -:10DB400004010170E279042303EA8202114321F007 -:10DB50001001017094F805B0286BF2F795FA82462F -:10DB6000F7F7E3FCBBF1020F66D0BBF1010F67D002 -:10DB7000BBF1030F68D06CE0B6F834B0FFF79FFE3E -:10DB8000022819BF6FF00D0000EBDB006FF00E00F4 -:10DB900000EB9B0081B2308E884238BF0146ADF861 -:10DBA0000810A6F84C100098F7F79EFC38B1696A87 -:10DBB000EF70AA694FF48060904703201EE001AA2D -:10DBC00002A9286BF2F743F9686210B194F8331098 -:10DBD00021B10098F7F75CFC6771A6E79DF8041087 -:10DBE00031B9A0F800A080F802A0012102F03EF8AF -:10DBF000BDF80810686A02F01AFA0220607194E712 -:10DC000001E004E011E00098F7F742FC8DE7B6F878 -:10DC10004C00ADF8000001AA6946286BF2F717F92D -:10DC20006862002808BFFFDF7FE70098F7F75CFC19 -:10DC3000002808BFFFDF78E730EA0A0009D106E0D4 -:10DC400030EA0A0005D102E0BAF1000F01D001214B -:10DC500000E00021686A027842EA01110170217C2B -:10DC600000291CBF617901293CD004F150010F4803 -:10DC700091E80E1000F5027A8AE80E10216EC0F8C5 -:10DC80002112616EC0F8251200F58170F7F7A7F830 -:10DC900098F8000000280CBF0121002104480176FB -:10DCA00008E000003C01002074010020C00E0020AC -:10DCB000C8100020D4E91012C0E90412A0F5837145 -:10DCC0006A6AF6F706FC96F85100012808BF0021A1 -:10DCD00004D002281ABFFFDF002101210020F6F73F -:10DCE00006FC03E0F7F77BF8F6F724FCB9F1000F28 -:10DCF00006D196F85130012296210020F6F72CFF2C -:10DD0000AF71686A018829828078A8742F7003B087 -:10DD1000BDE8F08F2DE9F0471E46174681460C46B8 -:10DD2000FE4DDDF82080287828B9002F1CBF002E7A -:10DD3000B8F1000F00D1FFDFC5F82080C5E90E94CF -:10DD4000C5E9067600206872287268712871A8718A -:10DD5000E871F34EE870E881307804F158072088C4 -:10DD6000F2F798FF28632088F2F782FF6863F7F7DD -:10DD70002BF8F6F7DBFC04F11200F7F70EF804F1CC -:10DD80000E00F6F774FD307800280CBF0320012048 -:10DD9000F7F717F8787EF6F772FDF7F70CF830789A -:10DDA0006FF00E056FF00D09002830D0618EE08E07 -:10DDB00094F852407A7C022C0CBF05EB900009EBE2 -:10DDC000D00080B2814238BF0846002A1CBF001D27 -:10DDD00080B22146F6F78AFC3078002831D070688E -:10DDE00090F86001002818BFF6F7F2FC22460021E7 -:10DDF0000120F6F76DFE7068D0F8D800F6F7F2FF54 -:10DE00000120FFF7D7FDBDE8F047F6F7E5BF97F82B -:10DE10001080278EB4F834A0FFF751FD022814BFFC -:10DE200009EBDA0005EB9A0085B2AF4234BF384601 -:10DE30002846B8F1000F1CBF001D80B294F8514075 -:10DE4000C7E7002122460846F6F742FE0120FFF709 -:10DE50004FFED8E7B24810B501783838007831B1B4 -:10DE6000022818BFFFDFBDE81040F6F7ADBF01285C -:10DE700018BFFFDFF7E7A94810B50078022818BFE0 -:10DE8000FFDFBDE8104000F044BAA4488079704735 -:10DE9000A24840797047A1490120C87170472DE917 -:10DEA000F04706009E489D4D4FF0010740684FF037 -:10DEB000000800F15804A86A90F8019018BF012EDC -:10DEC00003D1696B03F0D0FA68706878A0B10128BB -:10DED00031D0022849D003281CBFFFDFBDE8F087FE -:10DEE000012E08BFBDE8F087686BF2F70CFBA87A3B -:10DEF000BDE8F047EDF7FEBE012E08D001224946ED -:10DF0000686BF2F74DF9022E08BFBDE8F087D4E93F -:10DF10001202411C42F10000C4E91210E07901280C -:10DF200003D100BF84F8078000E0E771A87ABDE85C -:10DF3000F047EDF7DFBE012E08D000224946686B9E -:10DF4000F2F72EF9022E08BFBDE8F087D4E91201DE -:10DF5000401C41F10001C4E91201E07901280CBF25 -:10DF600084F80780E771BDE8F087012E06D0686B62 -:10DF7000F2F7C9FA022E08BFBDE8F087D4E9120112 -:10DF8000401C41F10001C4E91201E0790128CCD123 -:10DF9000C8E72DE9F041624F4FF000083846A7F17D -:10DFA00038044068012600F158052078012818BF80 -:10DFB000FFDFA87850B185F80280E670A26941467B -:10DFC000042090473878002818BF2E71606A03211A -:10DFD000007831EA000004BFE878002805D1EE702F -:10DFE000616AE670A269022090470121002000F0DA -:10DFF000B1F918B1BDE8F04100F08BB9BDE8F041CE -:10E000000020D7E42DE9F84F454C83462046A4F183 -:10E0100038054068217800F1580A287800264FF02A -:10E020000109022818BFFFDFE88940F40070E88189 -:10E030002078676800283A48406890F868000090A7 -:10E040003C8EB7F83480FFF73AFC022807BF6FF028 -:10E050000E0000EB98006FF00D0000EBD80080B2CE -:10E06000844238BF2046009900291CBF001D80B2A1 -:10E0700097F85110F6F73AFB9AF81100BBF1000F30 -:10E0800000F0FA80F6F77CFAF6F76AFA90B99AF897 -:10E09000110078B1A86A417861B100789AF8071048 -:10E0A000C0F3C000884205D185F80490BDE8F84F60 -:10E0B00000F02FB9A86A1A4FB0460188A5F81310CE -:10E0C00080786875E88940F02000E8816E713878C2 -:10E0D0007868583000907C6894F82C00012818D19A -:10E0E000F6F71EFF2046009901F023FA88B1387830 -:10E0F000002878680CBF00F5867000F5EA7021886A -:10E1000041800099097A017180F80090A87AEDF7B2 -:10E11000F1FDA86A0078C0F3800003E03C01002014 -:10E12000740100209AF80610884237D03878786851 -:10E1300000F1580490F85D0060B3022848D000BF99 -:10E1400084F80580387840B12079414628B12171A2 -:10E1500085F80390AA6910209047E07898B184F878 -:10E160000380F7F7D0F9002808BFFFDF082085F803 -:10E170000390AA6900219047D4E91002411C42F1A2 -:10E180000000C4E91010A07901280CBF84F80680B3 -:10E1900084F80690E88940F48070E881A86A9AF8CB -:10E1A00007300178C1F3C0029A4252D13A787A68B6 -:10E1B00001F0030102F15804012918BF022935D0EA -:10E1C00003291CBF287A40F0040012D0287240E0D6 -:10E1D000286BF1F776FE002808BFFFDFD4E91002B4 -:10E1E000411C42F10000C4E91010A87AEDF782FD4D -:10E1F000A6E701F05CFDA8B184F80290E9894846E1 -:10E2000041F40061E981A96A85F80390AA69904701 -:10E21000E079012803D100BF84F8078019E084F871 -:10E22000079016E0287A40F01000CFE74078F8B168 -:10E23000E98941F40061E981A97851B9FB28F1D855 -:10E24000687A002808BF4E4603D08020AA690021C2 -:10E2500090475946012000F07DF858B39AF8110014 -:10E26000002818BFBBF1000F1BD0A87868B118E0D8 -:10E27000E0790128D3D1CFE7002818BFF6F7B9F924 -:10E28000E88940F04000E881E3E7A96AAA89487874 -:10E29000904288BF1046C21CE86A03F02DFCE86A71 -:10E2A000A862002E1CBF0020FFF7F9FDBDE8F84F63 -:10E2B00000F02FB8002E1CBF0120FFF7F0FD00205A -:10E2C000FFF716FC9AF81100002818BFBBF1000FE9 -:10E2D0000DD0A87858B9A96AAA894878904288BF11 -:10E2E0001046C21CE86A03F007FCE86AA862002E28 -:10E2F00008BFBDE8F88F0220BDE8F84FCFE5354AEA -:10E300001378526892F851200BB1FBF76ABAFAF70A -:10E310001AB970B52F4900254C68F6F7B7FDF6F726 -:10E32000A9FDF6F7DBFCF6F73EFDF6F703F9F6F785 -:10E3300053FD94F82C00012808BFF6F7F1FD264C98 -:10E340000021A269E0899047226A217A20799047CA -:10E35000257070BD70B5204C0546002908BF012D01 -:10E3600005D16079401CC0B26071012830D8E169E4 -:10E370002846884700282BD0E179184839B1012D6B -:10E3800001BF41780029017811F0100F20D0217AC7 -:10E39000F1B910490978002918BF002102D029439A -:10E3A00004D013E0012D18BF0121F8D10C490978E0 -:10E3B00011F0100F04BF007810F0100F08D0E078B3 -:10E3C00030B9A07810B111F0100F01D0002070BD4D -:10E3D000012070BD740100203C0100204F0100208D -:10E3E0004C01002010B540F2C311F94803F0FBFBCB -:10E3F000FF220821F748E4F7FAFDF74800214170B1 -:10E400004FF46171418010BD2DE9F0410F46064681 -:10E4100000F03FFBEE4C102817D004EBC00191F840 -:10E420004A1111F0010F1CBF0120BDE8F081617895 -:10E4300008291FD2617804EBC000491C61700121DA -:10E4400080F84A110846BDE8F0816178082911D2A8 -:10E450002578681C207004EBC5083868C8F84401AA -:10E46000B888A8F84801102D28BFFFDF88F843615D -:10E470002846DFE70020BDE8F081D5480178491E35 -:10E480004BB2002BB8BF704770B4002500EBC3013E -:10E4900091F84A1111F0010F3BD04278D9B2521EC7 -:10E4A000427000EBC10282F84A5190F802C000228B -:10E4B000BCF1000F0BD9841894F803618E4202D18D -:10E4C000102A26D103E0521CD2B29445F3D8027828 -:10E4D000521ED2B202708A421BD000EBC20200EB85 -:10E4E000C10CD2F84341CCF84341D2F84721CCF8D3 -:10E4F0004721847890F800C00022002C09D98618A2 -:10E5000096F8036166450AD1102A1CBF024482F8BE -:10E510000311591E4BB2002BB8DA70BC7047521C65 -:10E52000D2B29442EBD8F4E72DE9F0471F4690466B -:10E530000E46814600F0ADFAA54C0546102830D0B5 -:10E54000A2780021002A0ED9631893F80331834280 -:10E5500005D110291CBF1220BDE8F08703E0491C3B -:10E56000C9B28A42F0D8082A2FD2102D1CD0A67822 -:10E570001022701CA07004EB061909F1030041463B -:10E5800000F086FF09F183001022394600F080FF79 -:10E59000A019002180F8035180F83B110846BDE81E -:10E5A000F087A278082A10D22578681C207004EB26 -:10E5B000C50A3068CAF84401B088AAF84801102D8D -:10E5C00028BFFFDF8AF84391D1E70720BDE8F08735 -:10E5D00070B47F488178491E4BB2002BBCBF70BC21 -:10E5E000704700BF817803F0FF0C491ECAB28270E9 -:10E5F00050FA83F191F8031194453ED000EB0215D7 -:10E6000000EB0C14D5F80360C4F80360D5F807607C -:10E61000C4F80760D5F80B60C4F80B60D5F80F603C -:10E62000C4F80F60D5F88360C4F88360D5F88760BC -:10E63000C4F88760D5F88B60C4F88B60D5F88F502C -:10E64000C4F88F50851800EB0C0402EB420295F8D9 -:10E6500003610CEB4C0C00EB420284F8036100EB0D -:10E660004C0CD2F80B61CCF80B61B2F80F21ACF86E -:10E670000F2195F83B2184F83B2100EBC10292F871 -:10E680004A2112F0010F33D190F802C00022BCF1F0 -:10E69000000F0BD9841894F803518D4202D1102A2F -:10E6A00026D103E0521CD2B29445F3D80278521E10 -:10E6B000D2B202708A421BD000EBC20200EBC10C46 -:10E6C000D2F84341CCF84341D2F84721CCF8472156 -:10E6D000847890F800C00022002C09D9851895F89C -:10E6E000035165450BD1102A1CBF024482F8031167 -:10E6F000591E4BB2002BBFF675AF70BC7047521C51 -:10E70000D2B29442EAD8F3E73349487070473248AE -:10E710004078704738B14AF2B811884203D82E4980 -:10E72000488001207047002070472B484088704780 -:10E7300010B500F0AEF9102814D0254A014600208B -:10E7400092F802C0BCF1000F0CD9131893F80331F2 -:10E750008B4203D1102818BF10BD03E0401CC0B28B -:10E760008445F2D8082010BD19498A78824286BFB4 -:10E7700001EB001083300020704715498A788242EF -:10E7800086BF01EB0010C01C00207047104B93F8AF -:10E7900002C084459CBF00207047184490F80301D4 -:10E7A00003EBC00090F843310B70D0F844111160B6 -:10E7B000B0F84801908001207047054A114491F853 -:10E7C000032105490A7002684A6080880881704701 -:10E7D000F0100020860100207C01002010B5F5F724 -:10E7E00027FE002804BFFF2010BDBDE81040F5F74C -:10E7F00045BEFE498A7882429CBF0020704708448B -:10E8000090F8030101EBC00090F84A0100F001000C -:10E8100070472DE9F047F54F0026B04638780028BC -:10E8200086BF4FF0080ADFF8C893BDE8F08700BF45 -:10E8300007EBC80505F5A27195F8430100F029F929 -:10E84000102808BF544610D0B978002400290BD9ED -:10E850003A1992F80321824202D1102C05D103E02B -:10E86000621CD4B2A142F3D80824B878A04286BF73 -:10E8700007EB0410C01C002095F84A1111F0010F9D -:10E8800016D050B1082C04D2391991F83B11012946 -:10E8900003D0102100F0D9FD50B109F806403046F0 -:10E8A000731C95F8432105F5A271DEB2F5F7A8FFB8 -:10E8B00008F1010000F0FF0838784045B8D8BDE8FD -:10E8C000F0872DE9F041C94C00263546A078002894 -:10E8D0008CBFC74FBDE8F0816119C0B291F80381C8 -:10E8E000A84286BF04EB0510C01C002091F83B1124 -:10E8F000012903D0102100F0A8FD58B104EBC80095 -:10E90000BD5590F8432100F5A2713046731CDEB26C -:10E91000F5F776FF681CC5B2A078A842DCD8BDE840 -:10E92000F08110B5F5F79BFF002804BF082010BD4B -:10E93000F5F799FFAE49085C10BDAE4910B54978AE -:10E9400041B1AA4B997829B1C21CD81CF5F70DFD2D -:10E95000012010BD002010BDA44A01EB410102EBD3 -:10E9600041010268C1F80B218088A1F80F017047AE -:10E970002DE9F0419D4D07460024A878002898BF56 -:10E98000BDE8F081C0B2A04213D905EB041010F12C -:10E9900083060ED01021304600F057FD48B904EB35 -:10E9A000440005EB400000F20B113A463046F6F702 -:10E9B0003AFE601CC4B2A878A042E3D8BDE8F0815A -:10E9C000014610228C4800F063BD8B48704770B53B -:10E9D000864D0446A878A04206D905EB0410102104 -:10E9E000833000F032FD08B1002070BD04EB44001C -:10E9F00005EB400000F20B1070BD7C498A78824222 -:10EA000006D9084490F83B01002804BF0120704754 -:10EA1000002070472DE9F0410E46074615460621B5 -:10EA2000304600F012FD714C98B1A17871B104F537 -:10EA30009D7011F0010F18BF00F8015FA17849081F -:10EA400004D0457000F8025F491EFAD10120BDE8EC -:10EA5000F0813846314600F01CF8102816D0A37813 -:10EA60000021002B12D9621892F80321824209D1A9 -:10EA7000102918BF082909D0601880F83B510120DF -:10EA8000BDE8F081491CC9B28B42ECD80020BDE83A -:10EA9000F0812DE9F041554D0646002428780F46B7 -:10EAA000002811D905EBC40090F84311B14206D1FA -:10EAB0000622394600F5A27002F0F2FF38B1601C60 -:10EAC000C4B22878A042EDD81020BDE8F0812046DD -:10EAD000BDE8F081454910B44A7801EBC003521EED -:10EAE0004A70002283F84A2191F802C0BCF1000F5D -:10EAF0000DD98B1893F80341844204D1102A1CBF0E -:10EB000010BC704703E0521CD2B29445F1D80A7889 -:10EB1000521ED2B20A70824204BF10BC704701EB91 -:10EB2000C00301EBC202D2F843C1C3F843C1D2F81B -:10EB30004721C3F847218C7891F800C00022002CAF -:10EB40009CBF10BC70478B1893F80331634506D106 -:10EB5000102A1CBF114481F8030110BC7047521CDD -:10EB6000D2B29442EFD810BC704770B41F490D1850 -:10EB70008A78521ED3B28B7095F80321984247D001 -:10EB800001EB001401EB031C00EB4000DCF8036018 -:10EB9000C4F80360DCF80760C4F80760DCF80B60B9 -:10EBA000C4F80B60DCF80F60C4F80F60DCF8836019 -:10EBB000C4F88360DCF88760C4F88760DCF88B6099 -:10EBC000C4F88B60DCF88FC0C4F88FC001EB030C75 -:10EBD00003EB43039CF8034101EB430385F8034136 -:10EBE00001EB4000D3F80B4108E00000F0100020DA -:10EBF000860100207C010020B3120020C0F80B41E8 -:10EC0000B3F80F31A0F80F319CF83B0185F83B01B8 -:10EC100001EBC20090F84A0110F0010F1CBF70BC5C -:10EC2000704700208C78002C0DD90B1893F803C185 -:10EC3000944504D110281CBF70BC704703E0401CF1 -:10EC4000C0B28442F1D80878401EC0B20870904229 -:10EC500004BF70BC704701EBC20301EBC000D0F8E9 -:10EC600043C1C3F843C1D0F84701C3F847018C78CA -:10EC70000B780020002C9CBF70BC704701EB000C8F -:10EC80009CF803C19C4506D110281CBF084480F89D -:10EC9000032170BC7047401CC0B28442EED870BCE7 -:10ECA0007047000010B50A7B02F01F020A730022B1 -:10ECB000C2758B181B7A03F0010C5B0803F001048A -:10ECC000A4445B0803F00104A4445B0803F00104BE -:10ECD000A4445B0803F0010464444FEA530C0CF0B5 -:10ECE000010323444FEA5C0C0CF00104234403EBC2 -:10ECF0005C0300EB020C521C8CF8123090F817C029 -:10ED0000D2B26344C375052AD3D3D8B2252888BFAD -:10ED1000FFDF10BD00238383028401EBC202521E79 -:10ED2000B2FBF1F1C183704770B46FF01F02010CA8 -:10ED300002EA90251F23A1F5AA4054381CBFA1F573 -:10ED4000AA40B0F1550009D0A1F52850AA381EBF3D -:10ED5000A1F52A40B0F1AA00012000D100204FF017 -:10ED6000000C62464FEA0C048CEA0106F643164397 -:10ED7000B6F1FF3F11D005F001064FEA5C0C4CEAFA -:10ED8000C63C03F0010652086D085B08641C42EAA9 -:10ED9000C632162CE8D370BC704770BC0020704798 -:10EDA0002DE9F04701270025044603290FD04FF431 -:10EDB000FA43002972D0012900F0F880022918BF17 -:10EDC000BDE8F0870146BDE8F04758306AE704F136 -:10EDD00058067021304602F028FFB571F571F572C2 -:10EDE0003573B573F573757135767576F52086F8DC -:10EDF0003C00412086F83D00FF2086F86B00A4F817 -:10EE0000C850A4F8CA50A4F8CC50A4F8CE50A4F826 -:10EE1000D050A4F8D25084F8D55084F8D750A4F834 -:10EE2000DE5084F8DC50A4F8F050A4F8F25084F8D6 -:10EE30002C50258484F8517084F852704FF4486047 -:10EE400060801B21218761874FF4A470E087A08731 -:10EE500021866186E086A086A4F84410A4F84600C6 -:10EE6000A4F84010A4F84200A4F84810A4F84A10EE -:10EE7000A4F84C10677384F8885184F8895184F899 -:10EE8000925184F8935184F8615184F8665184F862 -:10EE9000695184F87A51BDE8F087FFE7A4F8DE50A5 -:10EEA00084F8D6506088FE490144B1FBF0F1A4F823 -:10EEB00076104BF68031A4F87810E288A4F87C50E4 -:10EEC000B4F880C0D2000CFB00FCB2FBF0F29CFB5B -:10EED000F0FC521CA4F880C092B202FB00FC04F1CA -:10EEE0005801A4F87E20BCF5C84FC4BF521ECA8486 -:10EEF000B3FBF0F2521C8A8500F5802202F5EE3257 -:10EF0000531EB3FBF0F2CA838B8B03FB00F2B2FB00 -:10EF1000F0F08883214604F15800FFF7C3FED4F8CF -:10EF20000E106FF01F02080C02EA9126A0F5AA410C -:10EF30004FF01F0C54391CBFA0F5AA41B1F1550187 -:10EF40000AD0A0F52851AA391EBFA0F52A41B1F177 -:10EF5000AA014FF0010901D14FF00009002211462A -:10EF60004FEA020382EA00086FEA080848EA01084B -:10EF7000B8F1FF3F16D006F00108520842EAC83245 -:10EF800049080CF0010876085B1C41EAC8314FEAD9 -:10EF90005C0C162BE6D3B9F1000F1CBF84F860514E -:10EFA000BDE8F08784F86071BDE8F087A4F8DE5012 -:10EFB000B4F88221B4F88611B4F802C004F1580004 -:10EFC000A4F87C50B4F88040C90004FB0CF4B1FBF9 -:10EFD000F2F194FBF2F4491C048589B201FB02F4BE -:10EFE000C184B4F5C84FC4BF491EC184B3FBF2F15C -:10EFF000491C8185018C02EBC101491EB1FBF2F174 -:10F00000C183818B01FB0CF1B1FBF2F18183BDE87F -:10F01000F08770B50025044603290DD04FF4FA425D -:10F02000002958D001297DD0022918BF70BD0146A2 -:10F03000BDE87040583035E604F15806702130467E -:10F0400002F0F3FDB571F571F5723573B573F573B3 -:10F05000757135767576F52086F83C00412086F886 -:10F060003D00FF2086F86B00A4F8D050202084F8E3 -:10F07000D20084F8C850C4F8CC50012284F82C5037 -:10F0800084F8512084F852201B20208760874FF499 -:10F09000A471E187A18720866086E186A186A4F815 -:10F0A0004400A4F84610A4F84000A4F84210A4F8C4 -:10F0B0004800A4F84A00A4F84C00627384F8FC509D -:10F0C00084F8FD5084F8065184F8075184F8EC5018 -:10F0D00084F8F85070BD608871490144B1FBF0F1CB -:10F0E000A4F876104BF68031A4F87810E388A4F8E1 -:10F0F0007C50B4F880C0DB000CFB00FCB3FBF0F3E9 -:10F100009CFBF0FC5B1CA4F880C09BB203FB00FCE2 -:10F1100004F15801A4F87E30BCF5C84FC4BF5B1E93 -:10F12000CB8400E017E0B2FBF0F2521C8A8500F5B8 -:10F13000802202F5EE32531EB3FBF0F2CA838B8BB2 -:10F1400003FB00F2B2FBF0F08883214604F1580083 -:10F15000BDE87040A6E5D4F8F030B4F802C004F180 -:10F1600058005989DB89A4F87C50B4F88040DB0052 -:10F1700004FB0CF4B3FBF1F394FBF1F45B1C04858A -:10F180009BB203FB01F4C384B4F5C84FC4BF5B1E3C -:10F19000C384B2FBF1F2521C8285028C01EBC202E5 -:10F1A000521EB2FBF1F2C283828B02FB0CF2B2FB65 -:10F1B000F1F1818370BD2DE9F003C47D0CB1252CE4 -:10F1C00003D9BDE8F00312207047002A02BF0020D7 -:10F1D000BDE8F003704791F80DC01F260123314DA3 -:10F1E0004FF00008BCF1000F7AD0BCF1010F1EBF38 -:10F1F0001F20BDE8F0037047B0F800C00A7C8F7B89 -:10F2000091F80F907A404F7C87EA090742EA07227B -:10F2100082EA0C0C5FF000070CF0FF094FEA1C2C8F -:10F2200099FAA9F99CFAACFC4FEA19694FEA1C6CEF -:10F2300049EA0C2C0CEB0C1C7F1C9444FFB21FFA07 -:10F240008CFC032FE8D38CEA020C164F0022ECFB57 -:10F25000057212096FF0240502FB05C2D2B201EB60 -:10F26000D207027602F007053F7A03FA05F52F422E -:10F2700018BF42767ED104FB0CF2120C521CD2B2A3 -:10F280005FF0000400EB040C9CF812C094453CBFF6 -:10F29000A2EB0C02D2B218D34FF0000C0D1903E010 -:10F2A000FFDB050053E4B36E95F8085003FA0CF742 -:10F2B0003D421CBF521ED2B2002A6AD00CF1010C92 -:10F2C0000CF0FF0CBCF1080FF0D304F1010C0CF0B2 -:10F2D000FF04052CD6D33046BDE8F0037047FFE7A6 -:10F2E00090F818C00C7E474604FB02C2FB4C4FF05E -:10F2F000000CE2FB054C4FEA1C1C6FF024040CFBD5 -:10F300000422D2B201EBD204027602F0070C247A76 -:10F3100003FA0CFC14EA0C0F1FBF42764046BDE80E -:10F32000F003704790F817C0B2FBFCF40CFB1422FA -:10F33000521CD2B25FF0000400EB040C9CF812C027 -:10F3400094453CBFA2EB0C02D2B212D30D194FF080 -:10F35000000C2D7A03FA0CF815EA080F1CBF521E98 -:10F36000D2B27AB10CF1010C0CF0FF0CBCF1080F19 -:10F37000F0D300E010E004F1010C0CF0FF04052CC8 -:10F38000DAD3A8E70CEBC40141763846BDE8F003B8 -:10F3900070470CEBC40141764046BDE8F00370476E -:10F3A000CF4A016812681140CE4A126811430160C9 -:10F3B000704730B4CC49CA4B00244FF0010C0A7896 -:10F3C000521CD2B20A70202A08BF0C700D781A683D -:10F3D0000CFA05F52A42F2D0097802680CFA01F11C -:10F3E0005140016030BC7047017931F01F0113BFFB -:10F3F000002000221146704710B4435C491C03F002 -:10F40000010C5B0803F00104A4445B0803F0010451 -:10F41000A4445B0803F00104A4445B0803F0010466 -:10F42000A4445B0803F001045B08A44403F0010456 -:10F43000A4440CEB53031A44D2B20529DDDB012AA4 -:10F440008CBF0120002010BC704730B40022A1F115 -:10F45000010CBCF1000F11DD431E11F0010F08BFBC -:10F4600013F8012F5C785FEA6C0C07D013F8025F89 -:10F4700022435C782A43BCF1010CF7D1491E5CBFE2 -:10F48000405C0243002A0CBF0120002030BC7047C2 -:10F49000130008BF704710B401EB030CD41A1CF81A -:10F4A00001CC5B1E00F804C013F0FF03F4D110BCC4 -:10F4B0007047F0B58DB0164610251C466A46AC461E -:10F4C00000EB0C03A5EB0C0713F8013CD355ACF192 -:10F4D000010313F0FF0CF3D11546103210208446BF -:10F4E0000B18ACEB000713F8013C401ED35510F08D -:10F4F000FF00F5D1284601F033FA86B1102005F15E -:10F50000200201461318A1EB000C13F8013C401E29 -:10F5100004F80C3010F0FF00F4D10DB0F0BD0898E5 -:10F520002060099860600A98A0600B98E0600DB0B8 -:10F53000F0BD38B505460C466846F5F706FD0028CF -:10F5400008BF38BD9DF90020227294F909100020EF -:10F55000511A48BF494295F82D308B42C8BF38BD7B -:10F56000FF2B08BF38BDA17A491CC9B2A17295F81A -:10F570002E30994203D8617A7F2918BF38BD627254 -:10F580000020A072012038BD0C2818BF0B2806D01F -:10F590000D281CBF2038062884BF0020704701209A -:10F5A00070470C295AD2DFE801F006090E13161B2A -:10F5B000323C4153484E002A52D04FE0072A18BF30 -:10F5C000082A4DD04AE00C2A18BF0B2A48D045E043 -:10F5D0000D2A45D042E0A2F10F000D2840D93DE0B0 -:10F5E00023B1A2F110000C283AD937E0122A18BF33 -:10F5F000112A35D090F8340020B1122A2ED31B2ABC -:10F600002ED92BE0162A29D31B2A29D926E0A2F1CC -:10F610000F01032924D990F83400F8B11C2A1FD90E -:10F620001CE0002B08BF042A18D119E013B1062AE8 -:10F6300016D013E0012A11D112E01D2A1CBF1E2A88 -:10F640001F2A0DD00AE0A2F12000062808D905E003 -:10F6500013B10E2A04D001E0052A01D00020704722 -:10F66000012070472DE9F04187680D460446204689 -:10F67000F3F7CCFB98B1D5B13846A168F3F709FF91 -:10F68000002814DD2844401EB0FBF5F606FB05F10A -:10F690003846F2F7F8FEA0603046BDE8F081F3F797 -:10F6A000E7F94FF4E661F2F7EEFEA060DFE7002035 -:10F6B000BDE8F081904228BF704770B50446101B2A -:10F6C000642838BF642025188D4205D8F3F715FF4C -:10F6D00000281CBF284670BD204670BD53E4B36EA1 -:10F6E00064230200682302008E01002091F851304B -:10F6F0000A8E022B07BF92003C32D200703292B2C7 -:10F700008B8E934238BF1A464B8E91F852C0BCF193 -:10F71000020F07BF9B003C33DB0070339BB2C98EE6 -:10F72000994238BF0B4600280CBF01210021D01898 -:10F730009830002918BF04210844704730B48388EA -:10F74000B0F808C003EB0C049834002A18BF042258 -:10F7500022444C6A944224BF30BC7047121B521C96 -:10F7600052089B1A9BB2ACEB0202838092B20281D8 -:10F7700091F851506FF00E0C6FF00D04022D0CBF7C -:10F780000CEB930304EBD303438091F8521002294E -:10F790000CBF0CEB920104EBD201C18030BC70476E -:10F7A00010F0010F1CBF0120704710F0020F1CBFAA -:10F7B0000220704710F0040018BF082070472DE9A0 -:10F7C000F0410546174688460126084600F001FC30 -:10F7D0000446404600F001FC034610F0010F18BF3C -:10F7E000012008D113F0020F18BF022003D113F03B -:10F7F000040018BF082014F0010F18BF4FF0010CCF -:10F8000021D000BF50EA0C0108BF002613F0030FFF -:10F8100008BF002014F0030F08BF4FF0000C95F84C -:10F820005110814208BF0020387095F85210614590 -:10F8300008BF4FF0000C87F801C0002808BFBCF1DA -:10F84000000F1CD10DE014F0020F18BF4FF0020C96 -:10F85000D8D114F0040F14BF4FF0080C4FF0000C77 -:10F86000D0E7404600F0BFFBB5F85810401A00B290 -:10F8700047F6FE71884201DC002800DC0026304695 -:10F88000BDE8F08101281CBF02280020704718B491 -:10F89000CBB2C1F3072CC1B2C0F30720012B07D0B4 -:10F8A000022B09D0042B08BFBCF1040F23D006E0C3 -:10F8B000BCF1010F03D11EE0BCF1020F1BD00129E6 -:10F8C00006D0022907D0042908BF042813D004E079 -:10F8D000012802D10FE002280DD001EA0C0161F3EA -:10F8E0000702184060F30F22D0B210F0020F18BFC9 -:10F8F00002200BD106E0084003EA0C01084060F347 -:10F900000702EFE710F0010018BF01208DF800009A -:10F91000C2F3072010F0020F18BF022003D110F02D -:10F92000010018BF01208DF80100BDF8000018BCCF -:10F930007047162A10D12A220C2818BF0D280FD084 -:10F940004FF0230C20280DD031B10878012818BFC2 -:10F95000002805D0162805D00020704701207047E8 -:10F960001A70FBE783F800C0F8E70000282102F0D6 -:10F970003AB930B50546007801F00F0220F00F00CB -:10F980001043287007290BD2DFE801F004060406B3 -:10F9900004080400062405E00C2403E0222401E00E -:10F9A0000024FFDF687820F03F002043687030BDFE -:10F9B000007800F00F0070470A68C0F803208988BB -:10F9C000A0F807107047D0F803200A60B0F80700CD -:10F9D000888070470A68C0F809208988A0F80D104F -:10F9E0007047D0F809200A60B0F80D008880704791 -:10F9F0000278202322F0200203EA41111143017012 -:10FA000070470278402322F0400203EA811111433B -:10FA1000017070470078C0F380107047027880232F -:10FA200022F0800203EAC11111430170704700788F -:10FA3000C0097047D0F80320C1F80920B0F80720AA -:10FA4000A1F80D200A7822F080020A70007880095F -:10FA500042EAC0100870704770B515460E4604465D -:10FA60001F2A88BFFFDF2A46314604F1090002F051 -:10FA700043F86078A91D20F03F0001F03F010843E2 -:10FA8000607070BD70B5054640780E4600F03F04CA -:10FA9000062C38BFFFDFA01FC4B21F2C88BF1F2455 -:10FAA000224605F10901304602F026F8204670BDD5 -:10FAB00070B515460E4604461F2A88BFFFDF2A464A -:10FAC000314604F1090002F017F86078A91D20F012 -:10FAD0003F0001F03F010843607070BD70B50546FE -:10FAE00040780E4600F03F04062C38BFFFDFA01F11 -:10FAF000C4B21F2C88BFFFDF224605F10901304642 -:10FB000001F0FAFF204670BD0968C0F80F10704779 -:10FB10000A88A0F813208978417570474176090A50 -:10FB200081767047C176090A017770474177090AE3 -:10FB300081777047C175090A0176704781757047F2 -:10FB400090F8242001F01F0122F01F02114380F8D9 -:10FB500024107047072988BF072190F82420E0234C -:10FB600022F0E00203EA4111114380F824107047AB -:10FB70001F3002F066B94178007801F03F0110F0C3 -:10FB80000F0006D0012808D0022809D006280BD083 -:10FB90000FE0881F1F280AD90BE00C2909D106E0C5 -:10FBA000881F1F2803D904E0881F1F2801D80120BF -:10FBB0007047002070474178007801F03F0100F065 -:10FBC0000F00042805D1062903D325299CBF012055 -:10FBD00070470020704710B4017801F00F0103292D -:10FBE00022D0052925D14478B0F81910B0F81BC0EF -:10FBF000B0F81730827D04F03F04222C19D1062979 -:10FC000017D3B1F5486F98BFBCF5FA7F11D282B116 -:10FC1000082A98BF8A420CD28B429CBFB0F81D00C4 -:10FC2000B0F5486F05D807E0407800F03F000C2899 -:10FC300002D010BC0020704710BC01207047222168 -:10FC400001F0D1BF00B5027801F0030322F00302F6 -:10FC50001A43027000224270012914BF022900BD1C -:10FC6000032912BFFFDF0121417000BD01F0030332 -:10FC700000B5027822F003021A430270002242709B -:10FC8000012914BF022900BD032912BFFFDF012192 -:10FC9000417000BD007800F0030070470278102327 -:10FCA00022F0100203EA01111143017070474178FC -:10FCB000F9B1C078192850D2DFE800F00D10131602 -:10FCC000191C1F2225282B2E31344F4F4F4C373A09 -:10FCD0003D40434649000C2941D042E008293ED02E -:10FCE0003FE002293BD03CE0172938D039E00D290C -:10FCF00035D036E0012932D033E001292FD030E071 -:10FD000002292CD02DE0092929D02AE0092926D062 -:10FD100027E0012923D024E0012920D021E0062971 -:10FD20001DD01EE002291AD01BE0012917D018E0CF -:10FD3000012914D015E0092911D012E009290ED0AB -:10FD40000FE003290BD00CE0032908D009E00529B6 -:10FD500005D006E0032902D003E0FB2901D80120E9 -:10FD600070470020704730B50546C170192924D26C -:10FD7000DFE801F00D0F11131517171119191717D7 -:10FD80001B111921211D171719191D1D1F000C24E6 -:10FD900015E0082413E0022411E017240FE00D24DD -:10FDA0000DE001240BE0092409E0062407E0032408 -:10FDB00005E0052403E0182401E00024FFDF6C7057 -:10FDC00030BDC0787047C171090A01727047B0F840 -:10FDD000070070474172090A81727047B0F8090044 -:10FDE0007047C172090A01737047B0F80B00704781 -:10FDF0004171090A81717047B0F8050070470171BF -:10FE00007047007970474173090A81737047B0F8F1 -:10FE10000D00704730B4B0F80720894DB0F809C024 -:10FE2000B0F805300179941F2D1998BFBCF5FA7F01 -:10FE30000ED269B1082998BF914209D293429FBF5F -:10FE4000B0F80B00B0F5486F012030BC98BF704788 -:10FE5000002030BC7047001D01F0F3BF021D0846B2 -:10FE6000114601F0EEBF4172090A81727047B0F885 -:10FE70000900704701717047007970470A68426055 -:10FE800049688160704742680A60806848607047CE -:10FE90000988818170478089088070470A68C0F8A6 -:10FEA0000E204968C0F812107047D0F80E200A6082 -:10FEB000D0F81200486070470968C0F81610704703 -:10FEC000D0F81600086070470A684260496881608F -:10FED000704742680A608068486070470968C1607E -:10FEE0007047C06808607047017170474171090A26 -:10FEF00081717047C171090A0172704700797047BA -:10FF0000B0F805007047B0F80700704701717047FE -:10FF10000079704701717047007970470A68426044 -:10FF200049688160704742680A608068486070472D -:10FF30000171090A417170478171090AC1717047E5 -:10FF40000172090A417270478172090AC1727047D1 -:10FF500080887047C0887047008970474089704723 -:10FF600001891B2924BF4189B1F5A47F07D381886A -:10FF70001B2921BFC088B0F5A47F01207047002055 -:10FF800070470A68426049688160704742680A6049 -:10FF9000806848607047017170470079704741710F -:10FFA000704740797047017911F0070F1BBF407906 -:10FFB00010F0070F002001207047017911F0070FA2 -:10FFC0001BBF407910F0070F00200120704701711E -:10FFD000704700797047417170474079704781716F -:10FFE000090AC1717047C088704716A282B0D2E971 -:10FFF0000012CDE900120179407901F0070269464B -:020000040002F8 -:100000001DF80220012A07D800F00700085C01282B -:100010009EBF012002B07047002002B070470171FE -:10002000704700797047417170474079704730B52B -:100030000C460546FB2988BFFFDF6C7030BD000011 -:1000400086F3FFFF000101020102020370B50446BE -:10005000C2F11005281901F04FFD15F0FF0108D07D -:10006000491EC9B2802060542046BDE8704001F0AE -:10007000BABD70BD30B505E05B1EDBB2CC5CD55CB3 -:100080006C40C454002BF7D130BD10B5002409E0FA -:100090000B78521E44EA430300F8013B11F8013B80 -:1000A000D2B2DC09002AF3D110BD2DE9F0410C4693 -:1000B00001200978FF4E92B0154602274FF006083E -:1000C0004FF0040C71B101291ED0022945D003293B -:1000D00005D12978042902D105201070002012B022 -:1000E000BDE8F081606850B1CDE9010601202070C3 -:1000F0008DF80080606A05901146684663E02770BD -:1001000085F800C0566026E029780429E7D169689F -:1001100010222069FFF7B9FF6868C07B000606D58A -:10012000E44A2069102310320146FFF7A3FFD4E907 -:1001300004101022FFF7A9FF2069C07B000606D536 -:10014000DC4A6069102310320146FFF793FF2770E5 -:1001500085F800C06E600320C1E729780429BED16C -:10016000A08910280CD9A0F1100080B2A081A1684C -:100170004FF01003014468466A68FFF77BFF18E000 -:1001800004D14FF010032269A16807E0C2B20EA8A3 -:10019000A168FFF75BFF626910230EA90AA8FFF7A9 -:1001A00069FF10230AA968466A68FFF763FF032006 -:1001B000207060680590CDF818D08DF81080606AC6 -:1001C0000990294604A8F1F759FF88E72DE9F04185 -:1001D00007460D4601200B7806213BB1012B04D1C7 -:1001E0001378052B01D11170002079E76C69012685 -:1001F00020226170E8686060686A6062A168287C9B -:100200000870A681A068A968401C01F075FCA0894F -:1002100020222030A081A0686968213001F06CFCA8 -:10022000A08921462030A0812E703846BDE8F041DB -:10023000F1F73BBF2DE9F05F0D46834601200978B9 -:10024000174606464FF00608D1B1DFF868A24FF016 -:100250000009AAF1080A012923D002297ED0032926 -:100260000CD13978052909D179681022E86901F0A3 -:1002700043FC07203870183500207D60BDE8F09FF2 -:100280002C6A8C48202284F8018020306060202075 -:10029000A081686A60626968A06801F02DFC2E7018 -:1002A000D4E039780529E9D12C6A84F80180686A9C -:1002B000606251681022E86901F01EFCE869606024 -:1002C000A0684F4680F80090A681A0684670A0897B -:1002D000401C80B2A081A1680844696951F8012FCF -:1002E000026089888180A089801D80B2A0816969AF -:1002F000A2680978C1F340011154A089401C80B262 -:10030000A081A1680844296951F8012F02608988F9 -:100310008180A089801D80B2A0812969A2680978A6 -:10032000C1F340011154A0891022401C80B2A08169 -:10033000A1680844E96801F0DFFBA08910221030B1 -:1003400080B2A081A1680844A96801F0D5FBA0890A -:10035000103080B2A081A168014400E00DE0DAF81D -:1003600004000860A089001D80B2A081A1680F541C -:10037000A089401CA081022067E03978052992D12C -:1003800051681022A86901F0B7FB2C6A84F801803B -:10039000E8696060686A6062A16881F80090A6817F -:1003A000A0684670A089401C80B2A081A168084462 -:1003B000696951F8012F026089888180A089801DB8 -:1003C00080B2A0816969A2680978C1F34001115423 -:1003D000A089401C80B2A081A1680844296951F815 -:1003E000012F026089888180A089801D80B2A08150 -:1003F0002969A2680978C1F340011154A08910222B -:10040000401C80B2A081A1680844E96801F074FB37 -:10041000A0891022103080B2A081A1680844A96888 -:1004200001F06AFBA089103080B2A081A16801446C -:10043000DAF804000860A089001D80B2A081A168DC -:100440000E54A089401CA0810320287021465846E4 -:10045000BDE8F05FF1F729BE70B50D460646097894 -:10046000012041B1012905D11178052902D10820C7 -:100470001070002070BD2C6A062060706968616091 -:10048000696A6162EA69A16852F8013F0B6092886B -:100490008A80A081E869A1680078C0F34000887173 -:1004A000A089401C80B2A081A1680844A96951F8C4 -:1004B000012F01E074230200026089888180A089F5 -:1004C000801D80B2A081A969A2680978C1F34001AA -:1004D0001154A089401C80B2A081A16808446969B8 -:1004E0000A88028089788170A0891022C01C80B29D -:1004F000A081A1680844296901F0FEFAA0891022B0 -:10050000103080B2A081A1680844E96801F0F4FAD3 -:10051000A0891022103080B2A081A1680844A96887 -:1005200001F0EAFAA08921461030A081012028704C -:100530003046BDE87040F1F7B8BD70B50D460646CF -:100540000978012059B1012908D11178052905D16F -:1005500009201070506800685060002070BD6C6900 -:10056000062010226070E8686060686A606229692D -:10057000A06801F0C1FA1020A081A06820221030EC -:10058000A96801F0B9FAA0892022203080B2A081A8 -:10059000A1680844696801F0AFFAA08921462030BB -:1005A000A081012028703046BDE87040F1F77DBD84 -:1005B00070B50C46012009788EB01546062659B153 -:1005C000012934D0022905D12978042902D10A2031 -:1005D000107000200EB070BD606910236A4600786C -:1005E000C0F340008DF80000A0690078C0F340001F -:1005F0008DF80100E0680168CDF802108188ADF83F -:10060000061080798DF8080020690168CDF809107E -:100610008188ADF80D1080798DF80F006068059025 -:100620000AA80690A168FFF725FD01201DE02978A2 -:100630000429CFD1A06910236A4650F8011F009108 -:100640008088ADF80400606950F8011FCDF80610ED -:100650008088ADF80A0000200390606805900AA821 -:1006600006906968FFF706FD022020708DF8106083 -:10067000606A0990294604A8F1F700FDAAE700B5D1 -:100680000B788BB001204BB1012B05D111780429D7 -:1006900002D10B20107000200BB000BD4868019003 -:1006A00006A80290C86803680693406807908868A7 -:1006B00003680893406809900120087006208DF8AF -:1006C0000000486A059011466846F1F7D7FCE3E759 -:1006D00000B50B788BB0012043B1012BDCD1117830 -:1006E0000429D9D10C2010700020D5E7486801906A -:1006F00006A8029088680368069340680790002067 -:10070000089009900120087006208DF80000486AC2 -:10071000059011466846F1F7B1FCBDE700B50B78CE -:100720008BB0012043B1012BB6D111780429B3D18C -:100730000D2010700020AFE748680590CDF818D064 -:1007400088680088ADF80000C8680088ADF802002D -:1007500000200190029003900120087006208DF87F -:100760001000486A0990114604A8F1F787FC93E746 -:1007700030B403460C7801205CB1012C15D0022C5A -:1007800005D111780C2902D10E201070002030BC48 -:10079000704701200870C868042242704A684260AD -:1007A0000B4A8260921EC2600BE014780D2CEED1D1 -:1007B00002200870C86803244470526842608A6846 -:1007C0008260496A4162014630BC1846F1F76DBC4F -:1007D0006E2302002DE9F0410C4611490D68104AC4 -:1007E000104908321160A0F120012A2901D301200B -:1007F0000CE03E2810D040CC0B4F94E80E0007EBE5 -:100800008000241F50F8807C3046B84720600448A0 -:10081000001D0560BDE8F0812046E0F7E1FCF5E74A -:100820001005024001000001A423020010B5524847 -:1008300000F070FA00B1FFDF4F48401C00F06AFA88 -:10084000002800D0FFDF10BD2DE9F14F4B4ED6F848 -:1008500000B00127484800F065FADFF81C8128B98C -:100860005FF0000708F1010000F072FA444C002527 -:100870004FF0030901206060C4F80051C4F804512E -:10088000009931602060DFF8FCA018E0DAF8000081 -:10089000C00614D50E2000F064F8EFF3108010F0BD -:1008A000010072B600D00120C4F80493D4F80011FE -:1008B00019B9D4F8041101B920BF00B962B6D4F84F -:1008C000000118B9D4F804010028DFD0D4F80401DD -:1008D0000028CFD137B1C6F800B008F1010000F010 -:1008E00021FA11E008F1010000F01CFA0028B9D14A -:1008F000C4F80893C4F80451C4F800510E2000F065 -:1009000030F81D4800F024FA0020BDE8F88F2DE9EA -:10091000F0438DB00D46064600240DF110090DF18F -:10092000200817E004EB4407102255F8271068460A -:1009300001F0E2F805EB870710224846796801F0DC -:10094000DBF86846FFF780FF10224146B86801F0E7 -:10095000D3F8641CB442E5DB0DB00020BDE8F083A1 -:1009600072E700F01F02012191404009800000F170 -:10097000E020C0F8801270478F01002004E500409D -:1009800000E0004010ED00E0D848002101708170C7 -:10099000704770B5D64D01232B60D64B1C68002CD8 -:1009A000FCD0002407E00E6806601E68002EFCD014 -:1009B000001D091D641C9442F5D3002028601868AE -:1009C0000028FCD070BD70B5C84E0446CA4D3078C2 -:1009D000022800D0FFDFAC4200D3FFDF7169C748B7 -:1009E000012903D847F23052944201DD03224271BB -:1009F000491C7161291BC160C0497078F2F782FA05 -:100A0000002800D1FFDF70BD70B5B84C0D4661788D -:100A1000884200D0FFDFB84E082D4ED2DFE805F047 -:100A20004D0421304D4D4D3B2078022800D0FFDF92 -:100A300003202070A078022802D0012804D008E00A -:100A4000A06800F051FD04E004F1080007C8FFF7BA -:100A5000A0FF052020700020A070BDE87040F1F7D5 -:100A600012BFF2F705F801466068F2F712FDB042D6 -:100A700002D2616902290BD30320F2F7E4FF12E0EE -:100A8000F1F7F6FF01466068F2F703FDB042F3D2DA -:100A9000BDE8704097E7207802280AD0052806D0E4 -:100AA000FFDF04202070BDE8704000F014B9022080 -:100AB00000E00320F2F7C7FFF3E7FFDF70BD70B57A -:100AC0000546F1F7D5FF894C60602078012800D0F9 -:100AD000FFDF8A4901200870002008718D60042022 -:100AE00048718548C860022020706078F2F70AFAE1 -:100AF000002800D1FFDF70BD10B57C4CA07808B98C -:100B0000207808B1112010BD7D48F1F737FF6070E3 -:100B10006078202804D0012020700020606110BD82 -:100B2000032010BD0246010B0120B2F5003F02D2A6 -:100B3000884000F071BFB2F5802F03D22039884081 -:100B400000F072BFB2F5C02F03D24039884000F0E8 -:100B500074BFB2F5002F03D26039884000F076BF31 -:100B6000002070472DE9F041144600EB84070E4643 -:100B700005463F1F00F0CBFC4FF080510A695043FF -:100B800006EB8402121FB24201D2012200E00022D1 -:100B90001CB10969B4EB910F02D90920BDE8F081BD -:100BA00058498D4216D3AF4214D3854205D28742AD -:100BB00003D245EA0600800701D01020EEE78E42FE -:100BC00008D33AB92846FFF7ADFF18B93846FFF702 -:100BD000A9FF08B10F20E1E74B484C490068884263 -:100BE00005D0224631462846FFF7D3FE10E0FFF736 -:100BF00083FF0028D2D13D4801218560C0E903640C -:100C000081704FF4A97104FB01F01830FFF757FF12 -:100C10000020C3E770B54FF0805504462869394974 -:100C2000B1FBF0F084420AD300F071FCA04201D87D -:100C3000102070BD28696043FFF774FF08B10F20D2 -:100C400070BD314831490068884204D0286960434A -:100C500000F04AFC0CE0FFF74FFF0028F0D12969B3 -:100C6000224861438160022181702948FFF727FFF4 -:100C7000002070BD2349090BB1EB401F07D940424A -:100C800001EB4011202903D34FF0FF3070470021C2 -:100C900001208840401E704770B505460C46002074 -:100CA000FFF7E8FF28420ED10120FFF7E3FF2042C3 -:100CB00009D10220FFF7DEFF104204D10320FFF725 -:100CC000D9FF184201D00F2070BD21462846BDE84B -:100CD000704000F0C4BE10B5044C6078F1F7A9FE76 -:100CE00000B9FFDF00202070A07010BD940100202B -:100CF00004E5014000E40140105C0C00C412002037 -:100D0000090A020000300200B0000020BEBAFECA8C -:100D10007C5E0100002101700846704701460020FA -:100D200008707047EFF3108101F0010172B602788C -:100D3000012A01D0012200E000220123037001B941 -:100D400062B60AB1002070474FF400507047E9E7DF -:100D5000EFF3108111F0010F72B64FF00002027034 -:100D600000D162B600207047F2E700004C490968E4 -:100D70000160002070474A49086000207047012147 -:100D80008A0720B1012804D042F20400704791671D -:100D900000E0D1670020704742490120086042F21C -:100DA0000600704708B504233E4A1907103230B1D7 -:100DB000C1F80433106840F0010010600BE01068C7 -:100DC00020F001001060C1F808330020C1F80801CC -:100DD000354800680090002008BD011F0B2909D884 -:100DE000304910310A6822F01E0242EA40000860D1 -:100DF0000020704742F205007047000100F180407A -:100E0000C0F8041900207047000100F18040C0F8CC -:100E1000081900207047000100F18040D0F8000957 -:100E2000086000207047012801D9072070471F4A39 -:100E300052F8200002680A4302600020704701282F -:100E400001D907207047194A52F8200002688A43E6 -:100E5000026000207047012801D907207047134A1B -:100E600052F8200000680860002070470200104916 -:100E70004FF0000003D0012A01D0072070470A601C -:100E800070474FF080410020C1F808014FF0E0208A -:100E9000802180F800140121C0F800117047000083 -:100EA0000004004000050040080100404C240200FE -:100EB000780500406249634B0A6863499A420968B1 -:100EC00001D1C1F310010160002070475C495D4B06 -:100ED0000A685D49091D9A4201D1C0F310000860FB -:100EE000002070475649574B0A68574908319A42C3 -:100EF00001D1C0F3100008600020704730B5504B9E -:100F0000504D1C6842F20803AC4202D0142802D2B1 -:100F100003E0112801D3184630BDC3004B481844E4 -:100F2000C0F81015C0F81425002030BD4449454BC9 -:100F30000A6842F209019A4202D0062802D203E06E -:100F4000042801D308467047404A012142F8301076 -:100F5000002070473A493B4B0A6842F209019A4225 -:100F600002D0062802D203E0042801D308467047C5 -:100F7000364A012102EBC00041600020704770B585 -:100F80002F4A304E314C156842F2090304EB8002BF -:100F9000B54204D0062804D2C2F8001807E004289D -:100FA00001D3184670BDC1F31000C2F8000800203C -:100FB00070BD70B5224A234E244C156842F20903D5 -:100FC00004EB8002B54204D0062804D2D2F800080F -:100FD00007E0042801D3184670BDD2F80008C0F31A -:100FE00010000860002070BD174910B5083118487E -:100FF00008601120154A002102EBC003C3F8101548 -:10100000C3F81415401C1428F6D3002006E0042869 -:1010100004D302EB8003C3F8001807E002EB80035F -:10102000D3F80048C4F31004C3F80048401C062855 -:10103000EDD310BD04490648083108607047000030 -:10104000B0000020BEBAFECA00F5014000F0014029 -:101050000000FEFF7D4B1B6803B19847BFF34F8F25 -:101060007B4801687B4A01F4E06111430160BFF3F2 -:101070004F8FFEE710B5EFF3108010F0010F72B63E -:1010800001D0012400E0002400F0D6F850B1E0F7D0 -:1010900041F9F1F7BCFAF2F777FCE1F7C0FE6E49CF -:1010A0000020086004B962B6002010BD70B50C467F -:1010B0000646EFF3108010F0010F72B601D0012543 -:1010C00000E0002500F0B8F818B105B962B60820B4 -:1010D00070BDE0F79BF8E0F71FF9024600204309D6 -:1010E0009B0003F1E02300F01F01D3F80031CB4057 -:1010F000D9071BD0202803D222FA00F1C90722D138 -:1011000041B2002906DA01F00F0101F1E02191F866 -:10111000141D03E001F1E02191F8001449090829A8 -:1011200011D281B101290ED004290CD0401C6428B1 -:10113000D5D3E1F74BFE4849484808602046F3F70D -:101140008FF860B904E005B962B641F2010070BDE4 -:101150003E4804602EB13046F3F7CFF818B11024A2 -:1011600029E03F4E16E03078022802D94FF480542F -:1011700021E007240028707801D0E0B908E0D0B160 -:10118000202818D8B078212815D8012813D001E0DC -:10119000B07880B93349802081F8140DE0F7BCF8AD -:1011A0003146F2F7D7FBF1F7F1F900F0E3F93046F9 -:1011B000E0F782F8044605B962B61CB1FFF75AFFA2 -:1011C000204670BD002070BD10B5044600F034F814 -:1011D00000B101202070002010BD234908600020CC -:1011E000704770B50C4621490D682049204E0831E2 -:1011F0000E60102807D011280CD012280FD0132809 -:1012000011D0012013E0D4E90001FFF74FFF35466C -:1012100020600DE0FFF72EFF0025206008E0206829 -:10122000FFF7D2FF03E0104920680860002020602B -:101230000E48001D056070BD0748084900688842D7 -:1012400001D101207047002070470000AC01002050 -:101250000CED00E00400FA05B0000020BEBAFECAA2 -:10126000542402000BE000E00400002010050240BE -:101270000100000100B5764910F1080F08BFF82001 -:1012800024D014DC10F1280F08BFD8201ED010F194 -:10129000140F08BFEC2019D010F1100F08BFF02078 -:1012A00014D010F10C0F08BFF4200FD00CE010F197 -:1012B000040F08BFFC2009D0002818BF032805D060 -:1012C000042804BF086000BDFFDF00BD086000BD4A -:1012D00000B56049012808BF032004D0022816BFCA -:1012E000FFDF042000BD086000BD5A48016801F01E -:1012F0000F01032904BF01207047006800F00F00B0 -:10130000042804BF0220704700B5FFDF012000BDA4 -:101310005149002808BF086805D0012806BF0868A1 -:1013200040F0010070470860704770B5054601291C -:1013300014D0022A07BF49484FF47A7148484FF445 -:10134000C86144181846F4F759F820444FF47A71EC -:1013500000F27120B0FBF1F0281A70BD022A14BF10 -:101360004FF4C8604FF47A7049F608514418E9E721 -:1013700070B514460546012908BF49F6CA6605D06E -:10138000022B0CBF3748364800F1FA061046F4F736 -:1013900044F8012C0CBF4FF47A714FF4FA71711AB2 -:1013A00008444FF47A7100F28920B0FBF1F0281A5A -:1013B000801E70BD70B51546064601291AD0022B55 -:1013C00007BF26484FF47A7125484FF4C861441886 -:1013D0001046F4F722F8012D0CBF4FF47A714FF448 -:1013E000FA71611A08444FF47A716438B0FBF1F075 -:1013F000301A70BD022B14BF4FF4C8604FF47A70DE -:1014000049F608514418E3E770B505460C46164600 -:101410001046F3F7F3FF05EB4501C1EBC51100EBF7 -:10142000C100012C0CBF4FF47A714FF4FA714518CA -:101430002046F3F7F2FF281A4FF47A7100F60F6096 -:10144000B0FBF1F43046F3F7CDFF2044401D70BDF2 -:101450000C15004010150040501600406836020080 -:10146000A2240200043602002DE9F04184B088462F -:101470000746FEF70FFC05467E786A4601A94046FE -:10148000EFF748F804000ED0012D1EBF032004B072 -:10149000BDE8F08102AA40460199EEF73AFF0298B2 -:1014A000B0F803000AE0022D18D1042E16D3B7F8C5 -:1014B0000300BDF80020011D8A4206D3001D80B242 -:1014C000A119814238BF012004D104B04FF00000BF -:1014D000BDE8F0813CBF04B0BDE8F0814FF00200F0 -:1014E00004B0BDE8F08100000B4A022111600B49F5 -:1014F0000B68002BFCD0084B1B1D186008680028E7 -:10150000FCD00020106008680028FCD070474FF025 -:10151000805040697047000004E5014000E401404C -:1015200002000B464FF00000014620D0012A04D0F3 -:10153000022A04D0032A0DD103E0012002E0022098 -:1015400015E00320072B05D2DFE803F00406080AA4 -:101550000C0E100007207047012108E0022106E070 -:10156000032104E0042102E0052100E00621F1F757 -:1015700022BA0000FC4805218170002101704170F1 -:10158000C17081607047F9490A78012A06D0CA689B -:101590001044C860C8684038F1F748BF8A681044F2 -:1015A00088608868F7E710B5EF4CE078F1F741FA0A -:1015B00000B9FFDF0820F2F746FA0520A0700020EE -:1015C0002070607010BD002819D00378E849E94AFE -:1015D00013B1012B0ED011E00379012B00D06BB9B0 -:1015E00043790BB1012B09D18368643B8B4205D24F -:1015F000C0680EE00379012B02D00BB100207047C8 -:1016000043790BB1012BF9D1C368643B8B42F5D20E -:1016100080689042F2D8012070472DE9F0410446DD -:101620000227F1F72FFE006800B1FFDFCE4D012643 -:101630003CB12078B0B1012805D0022810D0032891 -:1016400013D02E710CE06068C82807D3F1F755FF5E -:1016500020B16068FFF797FF012703E0002701E052 -:1016600000F0CCF93846BDE8F08128780028F7D1A1 -:101670006068FFF7A8FF0028E3D06068DFF8EC821D -:10168000007828B3A878042800D0FFDF0020464661 -:1016900088F8000060680079C8B300203071606885 -:1016A0004079A8B30420707160688168E868F0F739 -:1016B000EAFEB0606068C0685230F0600320A87035 -:1016C000AA49E878F1F71EFC0028C9D1FFDFC7E777 -:1016D000404688F8006061680979D1B10021017144 -:1016E00061684979B9B104214171616889685231F1 -:1016F00081606168C968C160C0689B4C14346060D7 -:10170000F1F7B6F920606E700220A870A8E704E037 -:1017100005E00321E3E70321E6E70120BEE703201C -:10172000C1E72DE9F047904C8846E178884200D027 -:10173000FFDFDFF83492002501278C4E09F11409F0 -:10174000B8F1080F79D2DFE808F0040D2A557E843D -:101750009199A078032803D0A078022800D0FFDF59 -:10176000BDE8F087A078032803D0A078022800D035 -:10177000FFDF0420A0702571207800287AD1FFF7C0 -:1017800002FF3078012806D0B068E06000F07BF9F5 -:101790002061002062E0E078F1F7B0FAF5E7A07888 -:1017A000032803D0A078022800D0FFDF207800288B -:1017B0006FD1A078032816D0F1F75AF901464F46A9 -:1017C000D9F80000F1F765FE00280EDB7968814248 -:1017D0000BDB081AF0606549E078F1F793FB00280D -:1017E000BED1FFDFBCE7042029E00420F2F72BF98B -:1017F000A570B5E7A078032803D0A078022800D010 -:10180000FFDF207888BBA078032817D0F1F730F9E4 -:1018100001464F46D9F80000F1F73BFE0028E4DB13 -:1018200079688142E1DB081AF0605049E078F1F70D -:1018300069FB002894D1FFDF92E740E00520F2F732 -:1018400002F9A7708CE7A078042800D0FFDF0220FF -:1018500004E0A078042800D0FFDF0120A1688847B9 -:10186000FFF7DBFE054630E004E012E0A078042834 -:1018700000D0FFDFBDE8F04700F0C0B8A078042832 -:1018800005D0607810B1A078022800D0FFDF207862 -:1018900010B1BDE8F04786E6207920B10620F2F7C6 -:1018A000D2F82571CDE7607838B13049E078F1F7AA -:1018B00029FB00B9FFDF657052E70720BFE7FFDFB4 -:1018C0004EE73DB1012D03D0FFDF022DF9D147E7EF -:1018D0000420C3E70320C1E770B5050005D0224C02 -:1018E000A078052803D0112070BD102070BD2248BB -:1018F000F1F744F8E070E078202803D0A5600020DC -:10190000A07070BD032070BD174810B5017809B1F3 -:10191000112010BD817805290CD0817801290BD0C8 -:10192000817849B1012101708178012904D0807842 -:1019300010B103E00F2010BDFFF735FE002010BDF1 -:1019400070B5094E0446B07808B101280AD1ACB18F -:101950002046FFF738FE98B12078044D90B1B0785A -:1019600001282AD00F2070BDB0010020D412002021 -:101970003D860100FF1FA107231702001020F2E798 -:101980000720F0E701202870207990B1002028710D -:10199000607980B104206871A0685230A860E06866 -:1019A000E860E8681A4C6060F1F762F82060022095 -:1019B00016E00320EBE70320EDE7002028702079F4 -:1019C000A8B100202871607998B104206871A168DD -:1019D000F068F0F758FDA860E0685230E860032036 -:1019E000B0700C49F078F1F78DFA28B903E00320C4 -:1019F000E8E70320EAE7FFDF0020B4E7044810B57A -:101A00001438006900F037F8BDE81040F0F73BBF2C -:101A1000C4010020D41200201F490968014201D0EE -:101A200001207047002070471B49091D09680142C9 -:101A300001D0012070470020704717491031096814 -:101A4000014201D001207047002070471249143133 -:101A50000968014201D0012070470020704710B58D -:101A60000D4C2060201D01600B4810300260001DED -:101A70000360002010BD09490A6848F202139A4326 -:101A800002430A607047054A116848F2021301EAEE -:101A9000030099431160704700060040C8060240E9 -:101AA00040EA010310B59B070FD1042A0DD310C8DB -:101AB00008C9121F9C42F8D020BA19BA884201D92D -:101AC000012010BD4FF0FF3010BD1AB1D30703D075 -:101AD000521C07E0002010BD10F8013B11F8014B2B -:101AE0001B1B07D110F8013B11F8014B1B1B01D147 -:101AF000921EF1D1184610BD032A40F2308010F03A -:101B0000030C00F0158011F8013BBCF1020F624498 -:101B100098BF11F801CB00F8013B38BF11F8013B29 -:101B2000A2F1040298BF00F801CB38BF00F8013BD6 -:101B300011F0030300F02580083AC0F0088051F846 -:101B4000043B083A51F804CBA0E80810F5E7121D51 -:101B50005CBF51F8043B40F8043BAFF30080D20770 -:101B600024BF11F8013B11F801CB48BF11F8012B3C -:101B700024BF00F8013B00F801CB48BF00F8012B5F -:101B8000704710B5203AC0F00B80B1E81850203AE9 -:101B9000A0E81850B1E81850A0E81850BFF4F5AF0D -:101BA0005FEA027C24BFB1E81850A0E8185044BF97 -:101BB00018C918C0BDE810405FEA827C24BF51F804 -:101BC000043B40F8043B08BF7047D20728BF31F8F8 -:101BD000023B48BF11F8012B28BF20F8023B48BF49 -:101BE00000F8012B70474FF000020429C0F012806A -:101BF00010F0030C00F01B80CCF1040CBCF1020FC0 -:101C000018BF00F8012BA8BF20F8022BA1EB0C0194 -:101C100000F00DB85FEAC17C24BF00F8012B00F88A -:101C2000012B48BF00F8012B70474FF0000200B5B0 -:101C3000134694469646203922BFA0E80C50A0E8EF -:101C40000C50B1F12001BFF4F7AF090728BFA0E89D -:101C50000C5048BF0CC05DF804EB890028BF40F869 -:101C6000042B08BF704748BF20F8022B11F0804FAB -:101C700018BF00F8012B704770477047704700008D -:101C8000FEDF04207146084219D10699124A91429A -:101C900015DC069902394878DF2810D10878FE282B -:101CA00007D0FF280BD14FF001004FF000020B4B83 -:101CB000184741F201000099019A084B1847084B58 -:101CC000002B02D01B68DB6818474FF0FF307146CD -:101CD0004FF00002014B184700300200551002007F -:101CE00004000020184819497047FFF7FBFFDFF791 -:101CF00065FA00BD4FF4805015490968884203D148 -:101D0000144A13605B68184700BD000020BFFDE760 -:101D10004FF480500E490968884210D10E4B186864 -:101D20004FF0FF318842F1D080F308884FF0202136 -:101D3000884204DD0948026802210A43026008481B -:101D4000804708488047FFDFE8120020E8120020A3 -:101D500000000020040000200030020024050040A4 -:101D600039430100F51C020004207146084202D0EC -:101D7000EFF3098101E0EFF3088188690238007808 -:101D8000102813DB20280FDB2B280BDB0A4A1268F4 -:101D90000A4B9A4203D1602804DB094A104702200B -:101DA00008607047074A1047074A1047074A1268F9 -:101DB0002C32126810470000B0000020BEBAFECAE4 -:101DC0001D130000D5070200E311020004000020EB -:101DD0000D4B0E4908470E4B0C4908470D4B0B495C -:101DE00008470D4B094908470C4B084908470C4B5D -:101DF000064908470B4B054908470B4B0349084761 -:101E00000A4B024908470000F9BA0000092F0000F8 -:101E1000812C00001D2B0000AB2A0000232D0000A8 -:101E2000391300006728000029BD0000C911000017 -:101E300000210160818070470021016041600172D2 -:101E400070470A6802600B7903717047599500006A -:101E50001B970000779800009B980000D598000021 -:101E6000099900004399000081990000D39900006E -:101E700031960000A7120000A7120000C140000028 -:101E80000541000025410000E1410000274300001A -:101E90000144000031440000F5440000153D0000FD -:101EA000274700001948000039480000DD150000F0 -:101EB00001160000311500008515000033160000E2 -:101EC000C716000003600000B561000073650000E4 -:101ED000896600000D67000087670000F967000051 -:101EE00015690000E3690000616A000053480000C2 -:101EF0005948000063480000D73C00001F4900001B -:101F0000A13C00005F4A0000B74A00001F4B0000E0 -:101F1000A7120000A7120000A7120000A7240000CB -:101F20002D2500004925000065250000F32600004E -:101F30008F25000099250000DB250000FD2500000D -:101F4000D92600001B270000A7120000CF82000046 -:101F5000F7820000F98200003383000061830000F3 -:101F60004F840000DB840000EF8400003D8500000A -:101F70002D860000D1870000F9880000D172000092 -:101F800011890000A7120000A712000049B4000048 -:101F9000B3B5000007B6000073B6000023B7000019 -:101FA00051000000000000000000000000000000E0 -:101FB0000000000000000000000000000000000021 -:101FC0000000000000000000000000003E000000D3 -:101FD0000000000000000000000000000000000001 -:101FE00000000000000000000000000000000000F1 -:101FF0000000000000000000500000000000000091 -:1020000000000000000000000000000000000000D0 -:1020100000000000000000000000000000000000C0 -:1020200000000000100110013A0200001A02000432 -:102030000506000013900000F38F0000FFFFFFFF74 -:102040000000FFFF3BAC00003D39000041200000D4 -:102050001B730000EB8D0000000000000000020078 -:10206000000000000002000000000000000100006D -:10207000000000006F8000004F800000BD80000065 -:1020800029240000EB2300000B240000A7A7000078 -:10209000D3A70000DBA9000021590000DD8000006B -:1020A000000000000D810000772400000000000007 -:1020B0000000000000000000BDA8000000000000BB -:1020C000B359000000000000000000000000000004 -:1020D0000000000000000000000000000000000000 -:1020E000000000000000000000000000D5E5000036 -:1020F00059E60000000000000000000000000000A1 -:1021000059E700000000000000000000000000008F -:1021100049F800000000000000000000000000007E -:1021200005E900005DF4000000000000DDF400009F -:1021300051F500000000000037EE0000D5EE000071 -:102140000000000017F50000D1EF0000C9F1000009 -:102150003DF2000041F30000A5EA0000000000008D -:1021600000000000BFE90000000000001FE80000C0 -:1021700095E70000BDF300007BF60000E9F60000E3 -:1021800000000000A7E60000D7E6000007E6000018 -:102190000000000021E70000000000000000000037 -:1021A000000000004BF700000000000000000000ED -:1021B000000000000000000000000000EFEC000044 -:1021C000000000000000000000000000C3E8000064 -:1021D000C1E700008BE800000000000053E80000A9 -:1021E0000000000000000000B3F7000097F80000B6 -:1021F0009BFA000017F900003DE9000051FA0000C9 -:10220000000000004FEB000021EC000061F900002D -:10221000ABF9000007F80000E5F90000F1ED00005F -:1022200093560000935600009D400000E7AA00006E -:102230009F750000531F000087AA01004BC50100D5 -:10224000D9560000D9560000BF40000049AB00003D -:1022500023760000C51F0000B5AA01005FC501007C -:10226000D001D001400038005C0024004001F001A2 -:1022700001000000010000000001020304120F1021 -:102280001100000013000000B10502007F060200EB -:10229000D10602001D07020071070200AB00020018 -:1022A000CD01020035020200590402003B05020084 -:1022B000750D01008B1E01000000000006000000EB -:1022C0000A0000003200000073000000B4000000AB -:1022D000B197010045850100235F010077DE010011 -:1022E000F772010077DE01007D5F010005E001006B -:1022F000876B010005E001007B5E010093DF0100B8 -:10230000C971010093DF01004D630100FFE201008C -:102310007F730100FFE20100555555D6BE898E003E -:102320000000A606340DC21300004A03EE05920811 -:10233000000096041409920D555555252627D6BE42 -:10234000898EF401FA00960064004B0032001E00F2 -:1023500014000A00050002000100000025410000F1 -:1023600000000000AAAED7AB15412010000003000A -:10237000656C7462000000000000000000000000B6 -:1023800000000000870000000000000000000000C6 -:1023900000000000BE83605ADB0B376038A5F5AA49 -:1023A0009183886CB50E0200CD0E0200E50E02008E -:1023B000FD0E02002D0F0200550F02007F0F0200DC -:1023C000B30F0200150C0200650B0200990C02000D -:1023D000150D0200250D0200510D0200A33B010066 -:1023E000AB3B0100B93B01007F0D0200990D0200DB -:1023F0006D0D0200770D0200A50D0200DB0D02003D -:10240000FB0D0200090E0200170E0200270E02004B -:102410003F0E0200570E02006D0E02000000000089 -:10242000F7B800004DB9000063B9000021150200A3 -:10243000490802000F090200D91802000919020018 -:1024400041190200E93901000D3E01001C05004060 -:10245000200500400010020078240200080000203F -:10246000C401000044110000A8240200CC01002097 -:102470001C110000A01100000118136813024C2069 -:102480001A010222782720FB349B5F801280021EF3 -:1024900010139F0A1B205C041AE2040128237F0109 -:0824A00002A329091DFB013113 -:1030000030F00020153202001D3202001F32020093 -:1030100021320200233202002532020000000000AB -:103020000000000000000000000000002732020045 -:1030300029320200000000002B3202002D32020073 -:10304000913302002F320200653702002F32020056 -:103050002F3202002F3202002F3202002F320200E4 -:103060002F3202002F320200313702002F320200CD -:103070002F3202002F3202002F3202002F320200C4 -:103080002F320200E93302002F3202002F320200F9 -:103090000D3402002F320200113402002F320200E0 -:1030A0002F3202002F3202002F3202002F32020094 -:1030B0002F3202002F32020000000000000000004A -:1030C0002F3202002F3202002F3202002F32020074 -:1030D0002F3202002F3202002F32020000000000C7 -:1030E00000000000000000000000000000000000E0 -:1030F00000000000000000000000000000000000D0 -:1031000000000000000000000000000000000000BF -:1031100000000000000000000000000000000000AF -:10312000000000000000000000000000000000009F -:10313000000000000000000000000000000000008F -:10314000000000000000000000000000000000007F -:10315000000000000000000000000000000000006F -:10316000000000000000000000000000000000005F -:10317000000000000000000000000000000000004F -:10318000000000000000000000000000000000003F -:10319000000000000000000000000000000000002F -:1031A000000000000000000000000000000000001F -:1031B000000000000000000000000000000000000F -:1031C00000000000000000000000000000000000FF -:1031D00000000000000000000000000000000000EF -:1031E00000000000000000000000000000000000DF -:1031F00000000000000000000000000000000000CF -:10320000DFF80CD000F04AF8004800479DD60200D5 -:1032100030F000200648804706480047FEE7FEE7FA -:10322000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE776 -:10323000153402000132020040EA01039B0703D06B -:1032400009E008C9121F08C0042AFAD203E011F8E5 -:10325000013B00F8013B521EF9D27047D2B201E0A7 -:1032600000F8012B491EFBD270470022F6E710B58B -:1032700013460A4604461946FFF7F0FF204610BDE4 -:1032800030B504460020034600E05B1C934203D2A5 -:10329000E05CCD5C401BF8D030BD0000064C074D13 -:1032A00006E0E06840F0010394E807009847103416 -:1032B000AC42F6D3FFF7A8FF440503006405030002 -:1032C00070B58C1810F8015B15F0070301D110F8E8 -:1032D000013B2A1106D110F8012B03E010F8016B15 -:1032E00001F8016B5B1EF9D12B0705D40023521E98 -:1032F0000DD401F8013BFAE710F8013BCB1A921C00 -:1033000003E013F8015B01F8015B521EF9D5A142FD -:10331000D8D3002070BD00F01F0201219140400968 -:10332000800000F1E020C0F88012704700F01F021A -:10333000012191404009800000F1E020C0F8801296 -:10334000704700F01F02012191404009800000F108 -:10335000E020C0F80011704700F01F0201219140E9 -:103360004009800000F1E020C0F8001270474907D2 -:10337000090E002806DA00F00F0000F1E02080F8C6 -:10338000141D704700F1E02080F800147047000021 -:1033900070B54FF4807630460AF02CFA114CB50522 -:1033A00060B130460AF02DFA0120C5F808036079B3 -:1033B00020B9012060712168002088474FF482768F -:1033C00030460AF017FA00280AD030460AF019FAF7 -:1033D0000220C5F808032168BDE8704001200847B5 -:1033E00070BD0000D8B3002007480021C0F840118C -:1033F000C0F84411C0F84811C0F84C11C0F80011D1 -:10340000C0F804110CF080BA001001400CF0CAB9E9 -:103410000AF01ABDF0B5B5480023021D0178101D51 -:1034200001254FF0805406290BD11678360708D1B4 -:103430000678C6F30316032E06D0042E04D0052EFC -:1034400002D0062907D00EE0B4F82463A84FC6F3D3 -:1034500004263E6002E01678360704D10678C6F3EB -:103460000316032E02D0062904D00FE0A24FA14E6E -:103470007E670EE01678360708D10678C6F3031685 -:10348000032E06D0042E04D0052E02D0062907D024 -:103490000EE0D4F84462994FC6F342363E6002E033 -:1034A0001678360704D10678C6F30316032E02D029 -:1034B000062906D011E0924E376827F080773760F2 -:1034C0000EE01678360708D10678C6F30316032EE9 -:1034D00006D0042E04D0052E02D006290AD011E011 -:1034E0004FF08046C6F80C31C6F81031834E361FB7 -:1034F000336002E01678360704D10678C6F3031667 -:10350000032E02D0062905D00CE07C4F0326643739 -:103510003E600AE01678360704D10678C6F3031633 -:10352000032E02D006290DD014E0764F05263E600A -:10353000744E78363560734E083633603F263F1D33 -:103540003E6002E01678360704D10678C6F303160B -:10355000052E02D0062957D062E06B4E36686B4FBD -:103560003E60694E361D36683F1D3E60664E083629 -:1035700036683F1D3E60644E0C3636683F1D3E6027 -:10358000614E103636683F1D3E605F4E1436366819 -:103590003F1D3E605C4E183636685C4F20373E60FB -:1035A000594E1C3636683F1D3E60574E20363668F1 -:1035B0003F1D3E60544E243636683F1D3E60524EDD -:1035C000283636683F1D3E604F4E2C3636683F1D0C -:1035D0003E604D4E303636684C4F40373E604A4E66 -:1035E000343636683F1D3E60474E383636683F1DDC -:1035F0003E60454E3C3636683F1D3E60424E40368A -:1036000036683F1D3E6002E01678360708D106781E -:10361000C6F30316032E06D0042E04D0052E02D0C6 -:10362000062907D019E0D4F85812394A01F04F01A1 -:10363000116002E0117809070FD10078C0F3031080 -:10364000032803D0042801D0052806D13148016899 -:10365000C90702D06FF001010160D4F830010628DB -:1036600008D1D4F83401062804D12B48016841F46C -:103670008061016022487438016841F47001016082 -:10368000BFF34F8FBFF36F8F4FF01021D1F80002BF -:10369000002803DBD1F80402002822DA1F4A156053 -:1036A0001F480468002CFCD01524C1F800420568AE -:1036B000002DFCD0C1F8044201680029FCD0136041 -:1036C00001680029FCD0BFF34F8F0D48F038016826 -:1036D000144A01F4E06111430160BFF34F8F00BF52 -:1036E000FDE7124910480860F0BD0000E00F00F04F -:1036F000403501400DF0ADBA00C007403C05004028 -:10370000FCED00E0105600400404001020C500400D -:10371000E40E0040000400403C17004004E5014076 -:1037200000E401400400FA050090D00328B5002011 -:103730000A48D0F8441101290ED1D0F804138903A6 -:103740000AD50021C0F844110121C1600448C279A2 -:103750000AB109F05FBC01727047000000A0004090 -:10376000B4B400200148006800470000E0B3002026 -:1037700002E008C8121F08C1002AFAD1704770473A -:10378000002001E001C1121F002AFBD17047000098 -:103790000121202803DA81400548014003E0402848 -:1037A00002DA2038814009B10120704700207047BB -:1037B000FC06FFBD082806D228B1012803D0042842 -:1037C00001D0012070470020704700001CB50E4852 -:1037D0000D4C90F830002834C0002070002060703C -:1037E000A070204609F0F2FDE0700420ADF804005E -:1037F00000220094114668460BF0E4FD002802D038 -:10380000002000F027F81CBDB4B4002038B50446F1 -:1038100000208DF80000684600F08AF90A488442CA -:103820000CD0BFF34F8F09480168094A01F4E061E9 -:1038300011430160BFF34F8F00BFFDE79DF800000B -:1038400000F09AF938BD0000FECADDBA0CED00E0C8 -:103850000400FA050EB500210091CDE901106A4679 -:1038600044F20100FFF7D2FF0EBD00002DE9F84F32 -:103870002C4C8146924660880E4681424FD80027E4 -:103880004FF6FF788DF80070684600F051F9227805 -:103890006078A188884201DA401C00E00020C0B2B4 -:1038A000904204D19DF8000000F066F935E065789B -:1038B0006078884201DA401C00E0002060702078C7 -:1038C0006278824201D3101A02E0081A1044401CA8 -:1038D000E18880B2884200D9E0809DF8000000F0C5 -:1038E0004BF9454519D0E068B9F1000F40F835A013 -:1038F0000DD066B161882069324605FB010049465A -:10390000FFF79AFCE06800EBC500868002E000EB60 -:10391000C50087800020BDE8F88F0420FBE7092060 -:10392000F9E70000E8B3002010B50F4C03E0401C9D -:1039300000E000202070A068002814D12078617871 -:10394000814210D0227861882069E36802FB01007F -:1039500003EBC20153F83220898890472078A18870 -:103960008842E6DAE3E710BDE8B3002030B5CB00CB -:1039700008339DB293074FF0000401D0072030BDFB -:10398000054BDA602A441A615C701C70588099807B -:10399000DC80002030BD0000E8B3002008B5002026 -:1039A0008DF80000684600F0C3F805498868421C9D -:1039B00001D0401C88609DF8000000F0DDF808BDD3 -:1039C000E8B30020074801784078064A8842928888 -:1039D00001D3401A02E0511A0844401C101A80B268 -:1039E00070470000E8B3002008B500208DF8000003 -:1039F000684600F09DF80548816809B1491E81605C -:103A00009DF8000000F0B8F808BD0000E8B3002001 -:103A1000074B9B7823B12AB120B10068037C1BB10E -:103A200008207047072070474174426100207047AA -:103A30007CCE002070B50BF03FF8104800240B211D -:103A4000047044700E4D817014206C602C706C708A -:103A5000FFF76CFC07211420FFF789FC1420FFF707 -:103A600070FC0848046007211120FFF780FC05481E -:103A7000001F0068A860002070BD00007CCE002000 -:103A8000FCB30020081501402DE9FC47DFF87890D1 -:103A900099F8023073B368B3052902D20720BDE854 -:103AA000FC87436933B3437C012B25D000270446B0 -:103AB0000025884616468DF80050684600F038F814 -:103AC00001A80CF0E5FAC8B1012101700F4944606A -:103AD0000968C0E90218C0E904769DF8040089F875 -:103AE00001009DF8000000F047F81420FFF734FCB7 -:103AF0002846D4E70820D2E70F46D8E704259DF8EA -:103B0000000000F039F8F3E77CCE002004150140F6 -:103B10000649897839B130B1416921B10021017478 -:103B200002210BF0CDBE0820704700007CCE0020A3 -:103B300030B5EFF3108172B60D4A9468012324B1B9 -:103B40000370002900D162B630BD93604FF0E023CE -:103B5000D3F88051074C25401560C3F88041D3F855 -:103B6000844154605A17C3F8842100220270E8E7A8 -:103B700088CF0020FC06FFBD0B498A68002A11D0BF -:103B800000280FD1EFF3108072B60B684FF0E022DF -:103B9000C2F800314B68C2F8043100228A60002864 -:103BA00000D162B67047000088CF00202DE9F041B7 -:103BB000064608680C46411C4FF0A0474FF001052F -:103BC00006D005FA00F1C7F80815206809F09AFF39 -:103BD0006068411C02D0002109F082FF3168A069B1 -:103BE000C1F82405607D227D31681043C1F86C0561 -:103BF000D4E900123068C0F81425C0F80C15207DF7 -:103C0000012815D1A068411C02D0002109F068FFED -:103C1000E068411C05D08540C7F80855E06809F008 -:103C200071FFD4E902123068C0F80825C0F81015F9 -:103C3000BDE8F0812DE9F041064608680C46411CBC -:103C40004FF0A0474FF0010506D005FA00F1C7F884 -:103C50000815206809F060FF6068411C02D000214F -:103C600009F047FF3168A069C1F82405607D217D16 -:103C700032680843C2F86C05D4E900123068C0F815 -:103C80000C15C0F81425207D012815D1A068411C11 -:103C900002D0002109F02DFFE068411C05D08540CD -:103CA000C7F80855E06809F037FFD4E90212306818 -:103CB000C0F80825C0F81015BDE8F0812DE9FC47D3 -:103CC0001D46070090460E460AD036B100240194E6 -:103CD00038780DF10409692804D00720BDE8FC8775 -:103CE0000E20FBE70120134601904A4638460CF0AF -:103CF00039F90028F2D12B464A463146384600941D -:103D000006F0D8FF0028E9D12B68EBB30025D8F8DE -:103D100000002C4624281FD00CDC212815D004DC00 -:103D200001281BD020281DD10DE0222810D02328E7 -:103D300018D10FE0402813D041282DD0A0282DD035 -:103D4000A1280FD12CE0184D00E0184D9C1C09E073 -:103D5000174DFBE7174DF9E7174DF7E7174D00E053 -:103D6000174D1C462038032806D84A4631463846A7 -:103D70000CF030F90028B1D123464A463146384686 -:103D8000009508F05DFE00E001E00028A6D1019852 -:103D9000B04207D00920A1E70A4DE2E70A4DE0E76B -:103DA0000A4DDEE7002099E7A5490200F1750200FF -:103DB0005D8A02001F730200319E0200DD3D020099 -:103DC00065490200E1480200C7870200B987020086 -:103DD00013460A46014669200AF086BF18B112B19F -:103DE0000BB10CF0F7B80E20704738B568B162B16E -:103DF0005BB11C466B460CF0EDF8002804D19DF831 -:103E0000001001F00101217038BD0E2038BD08B549 -:103E100051B14BB140B1007800F001008DF80000C5 -:103E200068460CF0F9F808BD0E2008BD2DE9F843EE -:103E300016465FEA00082BD056B34BB3164F1C460C -:103E40000D46009708F01AFE002822D1631C324666 -:103E500029464046009708F011FE002819D1A31CFE -:103E60003246294640460CF0B5F8002811D1E31C33 -:103E70003246294640460CF0ADF8002809D101B081 -:103E8000231D324629464046BDE8F0430CF0A2B857 -:103E90000E20BDE8F883000069A502002DE9F84373 -:103EA0001D4690460E002AD04DB340B3154F044630 -:103EB000009708F03DFE002822D12B4642463146AD -:103EC000601C009708F034FE002819D12B464246AA -:103ED0003146A01C0CF0A0F8002811D12B46424618 -:103EE0003146E01C0CF098F8002809D101B02B46AF -:103EF00042463146201DBDE8F0430CF08DB80E203F -:103F0000BDE8F883A7A50200F8B5144606000D46E3 -:103F10001ED0ECB100200090631C6A4630460CF0C5 -:103F200059F8002813D123466A46294630460CF03A -:103F300051F800280BD1631D6A46294630460CF023 -:103F400049F8002803D10099A94200D00920F8BD02 -:103F50000E20F8BD17B581B0144669B164B10020D8 -:103F600000906B4601A822680CF013F8002801D1DC -:103F70000099216004B010BD0E20FBE728B111B1FB -:103F80000078602803D0072070470E207047012971 -:103F900001D0092070470020704713460A460146A9 -:103FA00060200AF0A1BE30B41AB313B308B304887A -:103FB000332C7DD020DC332C7BD2DFE804F0FE569E -:103FC00053FEFEFEFEFEFEFEFEFEFEFEFEFE7D77C4 -:103FD000595F6268836B86656E7471F8805CFB8CD8 -:103FE000898F92FEFEFEFEFEFEFEFEFEFEFEA5B4E4 -:103FF00095000E2030BC7047532C7DD018DC3A2C35 -:104000007BD008DCA4F13404062C52D2DFE804F0A3 -:104010009172828E887F502C70D004DC3B2C7CD037 -:104020003C2C46D190E0512C6AD0522C41D19DE0DD -:10403000722C66D00EDC572C7DD006DC542C7BD045 -:10404000552C7AD0562C34D184E0702C76D0712C3B -:104050002FD197E0733C052C2BD2DFE804F0999C1C -:104060009FA2A50030BC00F02BB930BC00F074B9A1 -:1040700030BC01F0B5BA30BC01F0EABA30BC01F096 -:10408000BDBE30BC01F04ABE30BC01F0FBB930BC53 -:1040900001F00CBD30BC01F0C1B930BC01F02CBB4B -:1040A00030BC01F0C5BD30BC01F040BF30BC01E008 -:1040B0001DE082E001F036BC30BC01F063BB30BCD7 -:1040C00001F0E2BE30BC01F078BC30BC01F0A8BC0D -:1040D00030BC01F02FBD30BC01F072BD30BC01F02E -:1040E000E9BB30BC01F0AEBB30BC03F05FBB30BC01 -:1040F00003F09ABC30BC05E029E022E030E00CE09F -:1041000031E042E003F0C4BB30BC03F0C1BD30BCC1 -:1041100003F04EBD30BC03F02BBE30BC03F00CBF2F -:1041200030BC03F09FBF30BC03F092BE30BC03F044 -:104130001BBC30BC03E01FE00FE01AE01FE003F0FF -:10414000ADBA30BC03F0E2BC30BC03F046BF30BCBB -:1041500004F03CBD30BC04F0B9BE30BC04F04CBE31 -:1041600030BC04F0F3BE30BC04F0C6BD30BC04F07B -:104170006DBE30BC04F0EABC30BC04F066BD30BC9F -:1041800006F024B830BC05F0DDBF30BC05F09ABFA6 -:1041900030BC05F0B8BE30BC05F048BF30BC05F0FF -:1041A00077BE30BC05F0E1BE30BC06F059B830BC7B -:1041B00001F0B6B830BC01F06FBD062000211960D7 -:1041C00018E700002DE9F04701883B4E40F2F31953 -:1041D0004FF6FF7510291BD011293ED0122954D05B -:1041E000502946D1C188F289841D914241D161890B -:1041F00002293ED18688304609F0F2F8050038D011 -:1042000004F10C0006F0E4F9A8B3294630464EE06C -:10421000C17B8788044601292BD1A846284609F08E -:10422000DFF8050017D02F8000202872234843466E -:104230004A460168C5F80A104068C5F80E0004F146 -:10424000100105F10A0009F01FF96872F0890028D1 -:104250000FD129462AE0042013E0808809F0C0F835 -:10426000040006D06068FFF753FC08B10AF034FD83 -:104270002580BDE8F087FFE76868FFF749FC002864 -:10428000F7D0BDE8F0470AF027BD878806463846D4 -:1042900009F0A6F80400ECD02B464A4606F10801C6 -:1042A00004F10A0009F0F0F8607221463846BDE8D2 -:1042B000F04708F049B80000F8CC002080B3002097 -:1042C0002DE9FE431D461646040007D036B12DB138 -:1042D0002088022804D00720BDE8FE830E20FBE7DB -:1042E00000270197D5F8008002200DF10409ADF8F0 -:1042F00008004B464246314602A80BF019FE002842 -:10430000EAD14B4642463146201D0BF011FE0028F3 -:10431000E2D14B464246314604F108000BF07CFEE8 -:104320000028D9D14B464246314604F110000BF02B -:10433000FFFD0028D0D100974B4642463146E06849 -:1043400006F0E6FC0028C7D1A08806F0A9FD0028E9 -:10435000C2D101992960BFE72DE9FC411D461646EF -:10436000040007D036B12DB12088012804D00720E1 -:10437000BDE8FC810E20FBE7002000902F680120A3 -:10438000E846ADF8040043463A46314601A80BF032 -:10439000CFFD0028ECD143463A463146201D0BF0B4 -:1043A000C7FD0028E4D143463A46314604F10800EF -:1043B0000BF032FE0028DBD100992960D8E77CB5EC -:1043C0000C4640B12CB100230193057801A96D2D55 -:1043D00003D007207CBD0E207CBD0125CDE9003532 -:1043E00013460A46214606F065FC0028F4D10198E0 -:1043F000A04201D009207CBD00207CBD2DE9FF41F9 -:1044000082B0984614460F0028D03CB3002000909C -:1044100025686D206E468DF8040033462A4601A8B3 -:104420000BF0FAFD002816D133462A46394602A879 -:104430000BF0AFFD00280ED1029848B95FEA0800E2 -:1044400039462A46334609D000F05AF8002802D1EE -:1044500000982060002006B0BDE8F0810E20FAE749 -:104460001CB50C4640B12CB100210191037801A983 -:104470006C2B03D007201CBD0E201CBD0123019313 -:10448000074B009313460A46214606F013FC00280A -:10449000F3D10198A04201D009201CBD00201CBD11 -:1044A000B144020013460A4601466C200AF01CBCC7 -:1044B0002DE9FC411646070020D0FEB1F3B11C46A1 -:1044C0000D4601AB0BF086FD002815D106200090AB -:1044D000631C3246294638460BF0ABFD00280BD151 -:1044E0009DF80420217862F3000121709DF80420DA -:1044F000520862F347012170BDE8FC810E20FBE702 -:104500002DE9FC411D4617460E0013D095B188B128 -:10451000044600788DF8040001A80BF07DFD00280A -:1045200006D13B4632460621601C00950BF097FDF4 -:10453000BDE8FC810E20FBE738B5D0B1CAB1C3B1EC -:104540001C466B460BF046FD002811D19DF800205B -:10455000217862F3000121709DF80020520862F377 -:10456000410121709DF80020920862F382012170C0 -:1045700038BD0E2038BD2DE9FC410C46DDE908862A -:10458000050023D02CB100200190287801AF7228BB -:1045900002D00720BDE8FC8101200190B3B1AEB18B -:1045A000009313463A46284608F0CBFF0028F1D185 -:1045B00043463A4621462846009608F0C2FF0028A6 -:1045C000E8D10198A04203D00920E3E70E20E1E7FB -:1045D0000020DFE713460A46014672200AF084BB3A -:1045E000F8B51646070037D0AEB3A3B31C460D4648 -:1045F0000BF0F0FC00282DD118480090231D324606 -:104600002946384606F056FB002823D104F108035A -:104610003246294638460BF0DDFC00281AD104F159 -:104620000A033246294638460BF073FC002811D1A4 -:1046300004F10C033246294638460BF06AFC002888 -:1046400008D10748009004F10E0332462946384647 -:1046500008F000FAF8BDFFE70E20FBE7B1440200C6 -:10466000394502002DE9FC411F460C46050026D0C5 -:104670002CB100200190287801AE732802D00720C9 -:10468000BDE8FC8101200190CAB11068B8B1406852 -:10469000A8B10D48134600903246284606F00AFBA2 -:1046A0000028EDD13B463246214628460BF092FCCD -:1046B0000028E5D10198A04203D00920E0E70E20B0 -:1046C000DEE70020DCE70000E145020013460A4671 -:1046D000014673200AF008BB13460A4601467420BF -:1046E0000AF002BB7CB50C46D0B12CB1002301937B -:1046F000057801A9792D01D007207CBD0125019500 -:1047000072B1156865B1009313460A46214606F05A -:10471000D1FA0028F1D10198A04203D009207CBD34 -:104720000E207CBD00207CBD2DE9FF4184B0984661 -:1047300014460F0019D0C4B10020019025687920DB -:1047400001AE8DF8080033462A4602A80BF064FC3F -:1047500000280BD133462A46394604A80BF019FC31 -:10476000002803D1049870B903E00E2008B0BDE81A -:10477000F0810748009033462A463946404606F005 -:10478000C7FA0028F2D1019820600020EEE700006F -:1047900031FF020038B50C46B8B12CB100210091B0 -:1047A00003786946782B01D0072038BD0123009398 -:1047B0005AB113460A4621460BF0ABFB0028F4D150 -:1047C0000098A04203D0092038BD0E2038BD00203B -:1047D00038BD13460A46014678200AF085BA2DE90D -:1047E000FE431F46DDF828800C46050022D0F4B1B8 -:1047F00000200290287802AE802818D10120029073 -:10480000C2B1BFB11346324628460BF082FB0028E6 -:104810000ED13B463246214628460BF0DBFB0028F2 -:1048200006D1387840B1012808D0022808D00720E6 -:10483000BDE8FE830E20FBE7002202E0062200E036 -:10484000102200920192434632462146284606F045 -:1048500027F90028ECD10298A04201D00920E7E70F -:104860000020E5E713460A46014680200AF03CBADC -:104870002DE9FC411C460D46060025D02DB1002037 -:104880000190307801AF7E2802D00720BDE8FC817E -:1048900001200190C2B1BCB12068A8B113463A46CC -:1048A00030460BF036FB0028F0D109480090234633 -:1048B0003A462946304606F0FDF90028E6D101982F -:1048C000A84203D00920E1E70E20DFE70020DDE762 -:1048D000B16F020013460A4601467E200AF004BA70 -:1048E0002DE9FE4316465FEA000836D0A6B39BB317 -:1048F0005F891B4800901C460D46404608F0AAF808 -:10490000002827D102AB3246294640460BF062FB15 -:1049100000281FD19DF8080004F1080300F00300EF -:1049200060703246294640460BF0F3FA002811D158 -:1049300004F10A033246294640460BF0EAFA002801 -:1049400008D12089231DCDE9007032462946404612 -:1049500006F0A6F8BDE8FE83FFE70E20FAE70000A8 -:10496000A94B02002DE9F0411646070017D0B6B159 -:10497000ABB11C460D460BF02DFB002810D1631C7B -:104980003246294638460BF025FB002808D1A31CE7 -:10499000324629463846BDE8F0410BF01BBB0E20DD -:1049A000BDE8F0812DE9F041164607000FD076B141 -:1049B0006BB11C460D460BF00DFB002808D1A31C63 -:1049C000324629463846BDE8F0410BF0A2BA0E2027 -:1049D000BDE8F0812DE9FC411C460D46060025D0BE -:1049E0002DB100200190307801AF752802D007204A -:1049F000BDE8FC8101200190C2B1BCB12068A8B122 -:104A000013463A4630460BF084FA0028F0D10948A4 -:104A1000009023463A462946304606F04BF90028D6 -:104A2000E6D10198A84203D00920E1E70E20DFE794 -:104A30000020DDE7454A020013460A46014675207C -:104A40000AF052B92DE9F041164607001FD0F6B121 -:104A5000EBB11C460D460BF05CFA002818D1A31CE4 -:104A60003246294638460BF054FA002810D1231D4F -:104A70003246294638460BF04CFA002808D1A31DCF -:104A8000324629463846BDE8F0410BF042BA0E20C6 -:104A9000BDE8F0812DE9F0411D4617460E001ED0FD -:104AA000EDB1E0B104460BF043FA002818D12B46D3 -:104AB0003A463146A01C0BF03BFA002810D12B4699 -:104AC0003A463146201D0BF033FA002808D12B4618 -:104AD0003A463146A01DBDE8F0410BF029BA0E2040 -:104AE000BDE8F0812DE9FC4198460C46050021D037 -:104AF0002CB100260196287801AF872802D0072024 -:104B0000BDE8FC8101200190A2B113463A46284637 -:104B10000BF0FFF90028F3D143463A4621462846D8 -:104B2000009606F0C7F80028EAD10198A04203D009 -:104B30000920E5E70E20E3E70020E1E72DE9FF414A -:104B400084B01C46150088461AD0CCB100200190D4 -:104B50002668872001AF8DF808003B46324629467B -:104B600002A80BF059FA00280BD13B4632462946E1 -:104B700004A80BF00EFA002803D1049870B903E0E2 -:104B80000E2008B0BDE8F081064800903B46324652 -:104B90002946404606F0BCF80028F2D10198206072 -:104BA0000020EEE7F54B020038B5A0B19AB193B101 -:104BB0001C466B460BF00EFA00280BD19DF8002026 -:104BC000217862F3030121709DF80020120962F33D -:104BD0000711217038BD0E2038BD08B541B13BB179 -:104BE00030B100788DF8000068460BF015FA08BD6A -:104BF0000E2008BDF8B51D4617460E0012D08DB127 -:104C000080B1044608480090204607F055FF002870 -:104C100009D101B02B463A463146601CBDE8F04050 -:104C20000BF0FAB90E20F8BDDB4B020013460A4622 -:104C300001468D200AF058B82DE9FC471D46DDE9F4 -:104C40000A490E46070040D036B10020019038785E -:104C50000DF104088C2802D00720BDE8FC87012054 -:104C600001908AB3106878B375B3286860B35CB3F9 -:104C7000206848B31748134600904246384606F06D -:104C800019F80028E9D1144800902B4642463146D5 -:104C9000384606F00FF80028DFD110480090234670 -:104CA00042463146384606F005F80028D5D14B4635 -:104CB0004246314638460BF08DF90028CDD1019897 -:104CC000B04204D00920C8E7FFE70E20C5E7002066 -:104CD000C3E70000B14402000D6B0200454A020028 -:104CE00013460A4601468C2009F0FEBF2DE9F0412B -:104CF0001D4617460E0016D0ADB1A0B104460BF00C -:104D000017F9002810D12B463A463146A01C0BF06B -:104D10000FF9002808D12B463A463146201DBDE840 -:104D2000F0410BF005B90E20BDE8F0812DE9F0410E -:104D3000164607001FD0F6B1EBB11C460D460BF02E -:104D4000E8F8002818D1A31C3246294638460BF053 -:104D5000E0F8002810D1231D3246294638460BF0D2 -:104D6000D8F8002808D1A31D324629463846BDE8A8 -:104D7000F0410BF0CEB80E20BDE8F0812DE9F041F6 -:104D80001D4617460E001ED0EDB1E0B104460BF0F3 -:104D9000CFF8002818D12B463A463146A01C0BF01C -:104DA000C7F8002810D12B463A463146201D0BF09B -:104DB000BFF8002808D12B463A463146A01DBDE871 -:104DC000F0410BF0B5B80E20BDE8F0812DE9FC47AD -:104DD0009846DDF828900C46050009D02CB1002635 -:104DE0000196287801AF902804D00720BDE8FC8701 -:104DF0000E20FBE70120134601903A4628460BF0AF -:104E000088F80028F2D10D48009043463A462146E2 -:104E1000284605F04FFF0028E8D14B463A46214688 -:104E20002846009605F046FF0028DFD10198A042F1 -:104E300001D00920DAE70020D8E700002D4D02005C -:104E40002DE9FF4184B0984614460F0019D0C4B133 -:104E5000002001902568902001AE8DF808003346AF -:104E60002A4602A80BF0D8F800280BD133462A4670 -:104E7000394604A80BF08DF8002803D1049870B9C6 -:104E800003E00E2008B0BDE8F081074800903346EB -:104E90002A463946404605F03BFF0028F2D10198EA -:104EA00020600020EEE70000ED4C02002DE9FF5FDE -:104EB0001D460E9F144688465FEA000942D0B8F1AD -:104EC000000F07D0002602A8CDE9010699F80000DE -:104ED0006F2803D0072004B0BDE8F09F01200290A6 -:104EE0007CB3206868B3006858B355B3286840B3F2 -:104EF000006830B33B4641464846019A0BF06AF8D9 -:104F00000028E8D103AB41464846019A0BF062F80D -:104F10000028E0D19DF80C00012815D0266003ABD5 -:104F200041464846019A0BF055F80028D3D19DF828 -:104F30000C0001281ED02E60029941452DD0092079 -:104F4000C9E7FFE70E20C6E7D4F800A00024DFF889 -:104F500050B00BE00AEB8403CDF800B04146484660 -:104F6000019A05F0A7FE0028B5D1641C3878A0424C -:104F7000F0D8D4E72D6800240A4E0AE005EB84033C -:104F8000009641464846019A05F094FE0028A2D1B9 -:104F9000641C3878A042F1D8CEE700209BE70000DF -:104FA000955F02001560020013460A4601466F2015 -:104FB00009F09ABE2DE9FC4190460C46050022D02E -:104FC0002CB100260196287801AF7D2802D0072059 -:104FD000BDE8FC8101200190ABB10D4800903A463C -:104FE000284605F067FE0028F2D143463A4621469E -:104FF0002846009605F05EFE0028E9D10198A042FF -:1050000003D00920E4E70E20E2E70020E0E70000FB -:1050100013FF02002DE9FF4383B01E000E9C1546CE -:1050200089461BD0D4B100200190D4F800807D20A7 -:1050300001AF8DF808003B464246314602A80AF00F -:10504000EBFF00280BD13B464246314603A80AF04D -:10505000A0FF002803D10398C0B903E00E2007B0D9 -:10506000BDE8F0830B4800903B4642463146284657 -:1050700005F04EFE0028F2D145B10097298843463D -:10508000324648460AF0EBFF0028E8D1019820603C -:105090000020E4E731FF02002DE9FC419846089E1C -:1050A0000C46050027D02CB100200190287801AFD4 -:1050B0007C2802D00720BDE8FC8101200190D2B1FC -:1050C000B8F1000F17D0B6B10D48134600903A461C -:1050D000284605F0EFFD0028EDD143463A4621462B -:1050E0002846009608F0FDF90028E4D10198A04276 -:1050F00003D00920DFE70E20DDE70020DBE700001A -:10510000A94B020013460A4601467C2009F0ECBD7B -:10511000F8B51F460C46050020D02CB100200090A9 -:1051200028786E46762801D00720F8BD012000902F -:10513000A2B19FB11346324628460AF0EAFE002883 -:10514000F3D13B463246214628460AF043FF002869 -:10515000EBD10098A04203D00920F8BD0E20F8BD85 -:105160000020F8BD13460A460146762009F0BCBD72 -:105170002DE9FC411646070020D0FEB1F3B1102006 -:1051800000901C460D4638460AF053FF002813D104 -:1051900001AB3246294638460AF01CFF00280BD1E5 -:1051A0009DF80410227C4B0861F3000263F3410276 -:1051B000890861F387022274BDE8FC810E20FBE7B9 -:1051C0002DE9FC411D4617460E001DD0E5B1D8B1B2 -:1051D00013460A460446102100950AF040FF0028B5 -:1051E00010D1207C2B46C0F34002014662F35F01E0 -:1051F00020F0030001438DF804103A46314601A81F -:105200000AF00AFFBDE8FC810E20FBE7F8B5164660 -:10521000070014D09EB193B10A4800901C460D4679 -:10522000384607F017FC002808D10748009004F121 -:10523000120332462946384607F00CFCF8BD0E2012 -:10524000F8BD00007151020071630200F8B51D46FF -:1052500017460E0013D095B188B104460948009056 -:10526000204607F029FC002808D1074800902B466B -:105270003A46314604F1120007F01EFCF8BD0E203C -:10528000F8BD0000C15102009F6302002DE9FC41FE -:105290001D46089C0E46070033D036B10020019011 -:1052A00038780DF10408852802D00720BDE8FC817C -:1052B000012001902AB324B31DB3206808B32868E5 -:1052C000F8B11346424638460AF023FE0028EDD1D5 -:1052D0000E4800902B4642463146384605F0EAFC1F -:1052E0000028E3D10A48009023464246314638461A -:1052F00005F0E0FC0028D9D10198B04203D0092084 -:10530000D4E70E20D2E70020D0E70000716302004E -:105310007151020013460A460146852009F0E4BC9B -:105320002DE9FE431D461646040007D036B12DB1C7 -:1053300020881D2804D00720BDE8FE830E20FBE74F -:10534000002001902F681D200DF10408ADF8080021 -:1053500043463A46314602A80AF0EAFD0028EBD15E -:1053600043463A463146201D0AF0E2FD0028E3D1CB -:105370000648009043463A46314604F1080007F0DB -:1053800091FB0028D8D101992960D5E791530200FB -:105390002DE9FC471D4691460E003AD0C5B3B8B37F -:1053A0000446C07B1C4FC0F34102014662F35F011B -:1053B0008DF804104FEAD0084A463146204600973F -:1053C00007F07AFB002821D12B464A463146E01DE2 -:1053D000009707F071FB002818D12B464A4631464A -:1053E00004F10E000AF018FE00280FD12B464A46A1 -:1053F000314601A80AF010FE002807D14B4632467C -:10540000414604F11000009508F0B3F8BDE8FC87B0 -:10541000FFE70E20FAE70000014502002DE9FC41FC -:105420001D461646040007D036B12DB12088172836 -:1054300004D00720BDE8FC810E20FBE7002000908F -:105440002F681720E846ADF8040043463A46314637 -:1054500001A80AF06DFD0028ECD143463A463146DA -:10546000201D0AF065FD0028E4D143463A46314646 -:1054700004F108000AF0D0FD0028DBD10099296072 -:10548000D8E700002DE9FF411D461646040008D06C -:105490003EB135B12088192805D0072004B0BDE8F9 -:1054A000F0810E20FAE7002001902F6819200DF1FD -:1054B0000408ADF8080043463A46314602A80AF00F -:1054C00037FD0028EAD143463A463146201D0AF00E -:1054D0002FFD0028E2D11648009043463A46314657 -:1054E00004F1080007F0DEFA0028D7D1A08803A94C -:1054F00005F06CFC18B1002001992960CEE70D4839 -:10550000009003980C49C0EB001000EB800001EB09 -:10551000800043463A463146001D07F0C3FA002892 -:10552000BCD1A08805F034FC0028E5D0B6E7000027 -:105530003D550200356E020094CF00202DE9FC415C -:105540001D4690460E0045D0F5B3E8B341780446B9 -:10555000C1F38002084662F39F00C1F3C00140EA34 -:10556000C1008DF804004246314620460AF054FD41 -:1055700000282DD12B464246314601A80AF04CFDA9 -:10558000002825D1144F2B4642463146A01C0097D7 -:1055900007F092FA00281BD12B4642463146E01C08 -:1055A000009707F089FA002812D10C4F2B4642468B -:1055B0003146201D009707F07FFA002808D12B46BE -:1055C00042463146601D00E004E0009707F074FA9F -:1055D000BDE8FC810E20FBE7716E0200E76C020063 -:1055E0002DE9FE431D461646040007D036B12DB105 -:1055F0002088122804D00720BDE8FE830E20FBE798 -:10560000002001902F6812200DF10408ADF8080069 -:1056100043463A46314602A80AF08AFC0028EBD1FC -:1056200043463A463146201D0AF082FC0028E3D169 -:105630000648009043463A46314604F1080007F018 -:1056400031FA0028D8D101992960D5E7DD5602004A -:105650002DE9FE431D461646040007D036B12DB194 -:1056600020881F2804D00720BDE8FE830E20FBE71A -:10567000002001902F681F200DF10408ADF80800EC -:1056800043463A46314602A80AF052FC0028EBD1C4 -:1056900043463A463146201D0AF04AFC0028E3D131 -:1056A0000648009043463A46314604F1080007F0A8 -:1056B000F9F90028D8D101992960D5E7C15602002F -:1056C00038B531B12BB120B1034C009407F0F4F997 -:1056D00038BD0E2038BD0000954A020038B531B102 -:1056E0002BB120B1034C009407F0E6F938BD0E2031 -:1056F00038BD0000954A02002DE9FE431D461646BE -:10570000040007D036B12DB120881A2804D0072014 -:10571000BDE8FE830E20FBE7002001902F681A20D1 -:105720000DF10408ADF8080043463A46314602A898 -:105730000AF0FEFB0028EBD143463A463146201DD5 -:105740000AF0F6FB0028E3D10648009043463A46AB -:10575000314604F1080007F0A5F90028D8D10199D5 -:105760002960D5E76957020038B531B12BB120B1B6 -:10577000034C009407F0A0F938BD0E2038BD00009E -:10578000F54B02002DE9FE431D461646040007D0E6 -:1057900036B12DB12088102804D00720BDE8FE8343 -:1057A0000E20FBE7002001902F6810200DF1040867 -:1057B000ADF8080043463A46314602A80AF0B8FB65 -:1057C0000028EBD143463A463146201D0AF0B0FB93 -:1057D0000028E3D10648009043463A46314604F19A -:1057E000080007F05FF90028D8D101992960D5E7B2 -:1057F000F5570200F8B51D4617460E001BD0D5B16F -:10580000C8B104460D480090204607F055F900281D -:1058100010D12B463A463146E01D0AF0FDFB002828 -:1058200008D1074800902B463A46314604F108005B -:1058300007F042F9F8BD0E20F8BD00000145020056 -:10584000954A02002DE9FE431D461646040007D086 -:1058500036B12DB12088242804D00720BDE8FE836E -:105860000E20FBE7002001902F6824200DF1040892 -:10587000ADF8080043463A46314602A80AF058FB04 -:105880000028EBD143463A463146201D0AF050FB32 -:105890000028E3D10648009043463A46314604F1D9 -:1058A000080007F0FFF80028D8D101992960D5E752 -:1058B0007D4D02002DE9FE431D461646040007D02B -:1058C00036B12DB12088232804D00720BDE8FE83FF -:1058D0000E20FBE7002001902F6823200DF1040823 -:1058E000ADF8080043463A46314602A80AF020FBCC -:1058F0000028EBD143463A463146201D0AF018FBFA -:105900000028E3D10648009043463A46314604F168 -:10591000080007F0C7F80028D8D101992960D5E719 -:105920007D4D02002DE9FF411D461646040008D0BA -:105930003EB135B12088112805D0072004B0BDE85C -:10594000F0810E20FAE7002001902F6811200DF160 -:105950000408ADF8080043463A46314602A80AF06A -:10596000E7FA0028EAD143463A463146201D0AF0BC -:10597000DFFA0028E2D10C48009043463A4631460F -:1059800004F1080007F08EF80028D7D1A08803A9F9 -:1059900005F01CFA20B9A08805F0FAF90028CDD14D -:1059A000019900202960C9E7AD59020019B113B16E -:1059B00008B10AF031BB0E2070472DE9FC411D46AD -:1059C0001646040007D036B12DB12088162804D021 -:1059D0000720BDE8FC810E20FBE7002000902F6827 -:1059E0001620E846ADF8040043463A46314601A881 -:1059F0000AF09EFA0028ECD143463A463146201D73 -:105A00000AF096FA0028E4D143463A46314604F1BA -:105A100008000AF001FB0028DBD100992960D8E7D3 -:105A20002DE9FF411D461646040008D03EB135B1B0 -:105A30002088182805D0072004B0BDE8F0810E208A -:105A4000FAE7002001902F6818200DF10408ADF846 -:105A5000080043463A46314602A80AF069FA00288F -:105A6000EAD1207B434600F001008DF80C003A4655 -:105A70003146201D0AF05CFA0028DDD10A4800906A -:105A800043463A463146A06805F042F90028D3D192 -:105A900043463A46314603A80AF0BEFA0028CBD165 -:105AA00001992960C8E70000576302002DE9FF4112 -:105AB0001D46904604000AD0B8F1000F07D035B15A -:105AC0002088152805D0072004B0BDE8F0810E20FD -:105AD000FAE7002001902F68152001AEADF808000C -:105AE00033463A46414602A80AF022FA0028EBD192 -:105AF000A07B334600F001008DF80C003A46414689 -:105B0000201D0AF015FA0028DED13B464246062148 -:105B100004F1080000960AF0A2FA0028D4D1334616 -:105B20003A46414603A80AF077FA0028CCD10199F9 -:105B30002960C9E72DE9FC411D461646040007D03F -:105B400036B12DB12088222804D00720BDE8FC8181 -:105B50000E20FBE7002000902F682220E846ADF8D9 -:105B6000040043463A46314601A80AF0E1F900280C -:105B7000ECD143463A463146201D0AF0D9F90028B7 -:105B8000E4D143463A46314604F108000AF044FAAB -:105B90000028DBD143463A46314604F109000AF0B9 -:105BA0003BFA0028D2D143463A46314604F10A0076 -:105BB0000AF032FA0028C9D100992960C6E700002E -:105BC0002DE9FE431D461646040007D036B12DB11F -:105BD0002088212804D00720BDE8FE830E20FBE7A3 -:105BE000002001902F6821200DF10408ADF8080075 -:105BF00043463A46314602A80AF09AF90028EBD10A -:105C000043463A463146201D0AF092F90028E3D176 -:105C10000648009043463A46314604F1080006F033 -:105C200041FF0028D8D101992960D5E79966020083 -:105C30002DE9FC411D461646040007D036B12DB1B2 -:105C400020881C2804D00720BDE8FC810E20FBE73B -:105C5000002000902F681C20E846ADF80400434661 -:105C60003A46314601A80AF063F90028ECD14346D0 -:105C70003A463146201D0AF05BF90028E4D143463C -:105C80003A46314604F108000AF0C6F90028DBD193 -:105C900000992960D8E700002DE9FE431D4616460D -:105CA000040007D036B12DB12088202804D0072069 -:105CB000BDE8FE830E20FBE7002001902F68202026 -:105CC0000DF10408ADF8080043463A46314602A8F3 -:105CD0000AF02EF90028EBD143463A463146201D02 -:105CE0000AF026F90028E3D10B48009043463A46D3 -:105CF000314604F1090006F0D5FE0028D8D143460C -:105D00003A46314604F108000AF086F90028CFD15E -:105D100001992960CCE70000014502002DE9FE430E -:105D20001D461646040007D036B12DB12088142830 -:105D300004D00720BDE8FE830E20FBE70020019081 -:105D40002F6814200DF10408ADF8080043463A46C8 -:105D5000314602A80AF0ECF80028EBD143463A4657 -:105D60003146201D0AF0E4F80028E3D106480090EF -:105D700043463A46314604F1080006F093FE0028F7 -:105D8000D8D101992960D5E78D5D02002DE9FC414C -:105D90001D4617460E002AD04DB340B30446807C02 -:105DA000C0F34002014662F35F01C0F3800041EAA4 -:105DB00080008DF804000F4800903A463146204696 -:105DC00006F07AFE002810D10B4800902B463A4688 -:105DD000314604F1080006F06FFE002805D12B467D -:105DE0003A46314601A80AF017F9BDE8FC810E20B9 -:105DF000FBE70000014502009F6302002DE9FE431E -:105E00001D461646040007D036B12DB12088132850 -:105E100004D00720BDE8FE830E20FBE700200190A0 -:105E20002F6813200DF10408ADF8080043463A46E8 -:105E3000314602A80AF07CF80028EBD143463A46E6 -:105E40003146201D0AF074F80028E3D1064800907E -:105E500043463A46314604F1080006F023FE002886 -:105E6000D8D101992960D5E76D5E020038B531B10E -:105E70002BB120B1034C009406F01EFE38BD0E205D -:105E800038BD00006D7002002DE9FE431D46164628 -:105E9000040007D036B12DB120881E2804D0072079 -:105EA000BDE8FE830E20FBE7002001902F681E2036 -:105EB0000DF10408ADF8080043463A46314602A801 -:105EC0000AF036F80028EBD143463A463146201D09 -:105ED0000AF02EF80028E3D10648009043463A46DF -:105EE000314604F1080006F0DDFD0028D8D1019903 -:105EF0002960D5E7F95E020038B5A9B1A3B198B120 -:105F00000078C0F34005044665F35F04C0F38005E4 -:105F100044EA8504C0F3C00044EAC0008DF80000E4 -:105F200068460AF079F838BD0E2038BD2DE9FC41ED -:105F30001D461646040007D036B12DB120881B2817 -:105F400004D00720BDE8FC810E20FBE70020009074 -:105F50002F681B20E846ADF8040043463A46314618 -:105F600001A809F0E5FF0028ECD143463A46314646 -:105F7000201D09F0DDFF0028E4D143463A463146B2 -:105F800004F108000AF048F80028DBD100992960E4 -:105F9000D8E70000F8B51646070014D09EB193B1BB -:105FA0000A4800901C460D46384606F053FD00286E -:105FB00008D10748009004F11003324629463846BC -:105FC00006F048FDF8BD0E20F8BD00001560020087 -:105FD000B1440200F8B51D4617460E0013D095B126 -:105FE00088B1044609480090204606F065FD002867 -:105FF00008D1074800902B463A46314604F110007C -:1060000006F05AFDF8BD0E20F8BD00002B6002001E -:106010000145020038B530B12AB123B110240094F3 -:106020000AF007F838BD0E2038BD08B541B13BB1C4 -:1060300030B1009313460A4610210AF010F808BD4B -:106040000E2008BDF8B51F460C46050020D02CB127 -:106050000020009028786E46822801D00720F8BDE5 -:1060600001200090A2B19FB113463246284609F0A4 -:1060700050FF0028F3D13B4632462146284609F01E -:10608000A9FF0028EBD10098A04203D00920F8BD59 -:106090000E20F8BD0020F8BD13460A4601468220B6 -:1060A00008F022BE2DE9FC411F460C46050023D016 -:1060B0002CB100200190287801AE812802D0072061 -:1060C000BDE8FC8101200190B2B1AFB11346324668 -:1060D000284609F01EFF0028F2D1094800903B46EF -:1060E00032462146284604F0E5FD0028E8D1019813 -:1060F000A04203D00920E3E70E20E1E70020DFE71C -:106100001161020013460A460146812008F0ECBDE9 -:1061100038B530B12AB123B12024009409F089FFA9 -:1061200038BD0E2038BD00002DE9FC479846DDF84B -:1061300028900C46050031D02CB100260196287815 -:1061400001AF832802D00720BDE8FC870120019021 -:1061500022B35FEA090021D0B8F1000F1ED0134628 -:106160003A46284609F0D5FE0028EDD10D480090AA -:1061700043463A462146284604F09CFD0028E3D1D8 -:106180004B463A4621462846009604F093FD0028E7 -:10619000DAD10198A04203D00920D5E70E20D3E739 -:1061A0000020D1E7416302002DE9FF4184B01C4685 -:1061B000150088461AD0CCB10020019026688320B3 -:1061C00001AF8DF808003B463246294602A809F087 -:1061D00023FF00280BD13B463246294604A809F08C -:1061E000D8FE002803D1049870B903E00E2008B04F -:1061F000BDE8F081064800903B46324629464046BD -:1062000004F086FD0028F2D1019820600020EEE71E -:10621000F56202002DE9FC479846DDF828900C460F -:10622000050031D02CB100200190287801AE8428DF -:1062300002D00720BDE8FC870120019022B3B8F10D -:10624000000F21D05FEA09001ED0134632462846CF -:1062500009F05FFE0028EDD10D4F4346324621463E -:106260002846009704F026FD0028E3D14B4632462D -:1062700021462846009704F01DFD0028DAD1019838 -:10628000A04203D00920D5E70E20D3E70020D1E7B4 -:10629000A162020013460A460146842008F024BD8C -:1062A0002DE9F84316465FEA00081ED0EEB1E3B1CF -:1062B0000F4800901C460D46404606F0CBFB0028D8 -:1062C00011D11027E31D324629464046009709F0B8 -:1062D000B0FE002807D104F1170332462946404694 -:1062E000009709F0A6FEBDE8F8830E20FBE700004A -:1062F000B1440200F8B51D4617460E001BD0D5B1BB -:10630000C8B104460D480090204606F0D5FB002891 -:1063100010D13B4632461021E01D009509F09FFE4A -:10632000002807D13B463246102104F117000095A2 -:1063300009F095FEF8BD0E20F8BD000001450200F1 -:1063400038B530B12AB123B14024009409F071FE70 -:1063500038BD0E2038BD08B541B13BB130B1009316 -:1063600013460A46402109F07AFE08BD0E2008BDFA -:10637000F8B51646070010D07EB173B11C460D4625 -:1063800009F0C7FD002807D108200090A31C324661 -:106390002946384609F04DFEF8BD0E20F8BDF8B587 -:1063A0001D4617460E000ED06DB160B1044609F0CF -:1063B000BFFD002806D13B4632460821A01C0095AF -:1063C00009F04DFEF8BD0E20F8BD2DE9F04116464E -:1063D00007000FD076B16BB11C460D4609F099FD50 -:1063E000002808D1A31C324629463846BDE8F041B2 -:1063F00009F08FBD0E20BDE8F0812DE9F0411D466A -:1064000017460E000ED06DB160B1044609F090FD44 -:10641000002808D12B463A463146A01CBDE8F04181 -:1064200009F086BD0E20BDE8F081F8B516460700DC -:1064300010D07EB173B11C460D4609F06AFD0028EC -:1064400007D105200090A31C32462946384609F0A2 -:10645000F0FDF8BD0E20F8BDF8B51D4617460E003C -:106460000ED06DB160B1044609F062FD002806D17E -:106470003B4632460521A01C009509F0F0FDF8BD11 -:106480000E20F8BD38B558B152B14BB11C466B4621 -:1064900009F0A0FD002802D19DF80010217038BD40 -:1064A0000E2038BD08B551B14BB140B1007800F0B5 -:1064B00001008DF80000684609F0AEFD08BD0E2011 -:1064C00008BD0000F8B51646070018D0BEB1B3B13C -:1064D0001C460D4609F01DFD00280FD1A31C3246B5 -:1064E0002946384609F015FD002807D105480090D7 -:1064F000231D32462946384604F0DCFBF8BD0E2049 -:10650000F8BD000013FF0200F8B51D4617460E0047 -:1065100017D0B5B1A8B1044609F00AFD00280FD183 -:106520002B463A463146A01C09F002FD002807D14F -:10653000054800902B463A463146606804F0E8FB77 -:10654000F8BD0E20F8BD000031FF02001CB538B1C7 -:1065500032B12BB106240094019404F0A1FA1CBDC1 -:106560000E201CBD08B549B143B138B100931346A4 -:106570000A460068062104F0C5FA08BD0E2008BDD1 -:1065800038B568B162B15BB11C466B4609F022FDBB -:10659000002804D19DF8001001F00101217038BDE0 -:1065A0000E2038BD08B551B14BB140B1007800F0B4 -:1065B00001008DF80000684609F02EFD08BD0E2090 -:1065C00008BDF8B51646070013D096B18BB11C462E -:1065D0000D4609F09EFC00280AD16B46324629463A -:1065E000384609F0F7FC002802D19DF80010A17090 -:1065F000F8BD0E20F8BD00002DE9FC411C460D46FB -:10660000060025D02DB100200190307801AF8F28F1 -:1066100002D00720BDE8FC8101200190C2B1BCB1CD -:106620002068A8B113463A46304609F072FC0028AB -:10663000F0D10948009023463A462946304604F0F6 -:1066400039FB0028E6D10198A84203D00920E1E7F0 -:106650000E20DFE70020DDE76966020013460A46E8 -:1066600001468F2008F040BB2DE9F0411646070097 -:106670000FD076B16BB11C460D4609F0ABFC00287B -:1066800008D1631C324629463846BDE8F04109F07E -:10669000A1BC0E20BDE8F0812DE9F0411D46174652 -:1066A0000E000ED06DB160B1044609F0B5FC0028B3 -:1066B00008D12B463A463146601CBDE8F04109F04E -:1066C000ABBC0E20BDE8F0817CB50C46E0B12CB12E -:1066D00000230193057801A97B2D01D007207CBD03 -:1066E0000125019582B1156875B1022C0AD300937A -:1066F00013460A46214604F0DDFA0028EFD101983E -:10670000A04203D009207CBD0E207CBD00207CBDB2 -:106710002DE9FF4184B0984614460F0019D0C4B14A -:106720000020019025687B2001AE8DF808003346DB -:106730002A4602A809F070FC00280BD133462A46ED -:10674000394604A809F025FC002803D1049870B943 -:1067500003E00E2008B0BDE8F08107480090334602 -:106760002A463946404604F0D3FA0028F2D101986F -:1067700020600020EEE70000954A02001CB50C46A0 -:10678000C8B12CB100210191037801A97A2B01D065 -:1067900007201CBD012301936AB1094B00931346E6 -:1067A0000A46214604F086FA0028F2D10198A04258 -:1067B00003D009201CBD0E201CBD00201CBD000004 -:1067C000454A020013460A4601467A2008F08CBA70 -:1067D0001CB50C4640B12CB100210191037801A9F0 -:1067E000712B03D007201CBD0E201CBD012301937B -:1067F000074B009313460A46214604F05BFA002833 -:10680000F3D10198A04201D009201CBD00201CBD7D -:10681000816802002DE9FF4184B0984614460F00BC -:1068200019D0C4B1002001902568712001AE8DF807 -:10683000080033462A4602A809F0EEFB00280BD1D7 -:1068400033462A46394604A809F0A3FB002803D1A1 -:10685000049870B903E00E2008B0BDE8F081074845 -:10686000009033462A463946404604F051FA002843 -:10687000F2D1019820600020EEE70000D568020008 -:10688000F8B51646070020D0FEB1F3B11C460D4600 -:1068900009F0A0FB002817D1631C32462946384670 -:1068A00009F098FB00280FD1A31C32462946384630 -:1068B00009F02FFB002807D105480090231D324620 -:1068C0002946384604F0F6F9F8BD0E20F8BD000060 -:1068D00015600200F8B51D4617460E001FD0F5B131 -:1068E000E8B1044609F098FB002817D12B463A4638 -:1068F0003146601C09F090FB00280FD12B463A4628 -:106900003146A01C09F014FB002807D1054800906F -:106910002B463A463146606804F0FAF9F8BD0E207D -:10692000F8BD00002B6002001CB50C4640B12CB134 -:1069300000210191037801A9702B03D007201CBD11 -:106940000E201CBD01230193074B009313460A46FA -:10695000214604F0AFF90028F3D10198A04201D0FC -:1069600009201CBD00201CBD8168020013460A4698 -:106970000146702008F0B8B92DE9FC411C460D46CF -:10698000060025D035B10027019730780DF10408B5 -:106990008E2802D00720BDE8FC8101200190BAB109 -:1069A000B4B12068A0B113464246304609F0B1FAAE -:1069B0000028F0D12346424629463046009704F08D -:1069C00079F90028E7D10198A84203D00920E2E72D -:1069D0000E20E0E70020DEE72DE9FF4184B0984675 -:1069E00014460F0019D0C4B10020019025688E20F4 -:1069F00001AE8DF8080033462A4602A809F00CFBC8 -:106A000000280BD133462A46394604A809F0C1FABA -:106A1000002803D1049870B903E00E2008B0BDE847 -:106A2000F0810748009033462A463946404604F034 -:106A30006FF90028F2D1019820600020EEE70000F5 -:106A4000190003002DE9F8431F46DDF820800C46AD -:106A500005002CD02CB10020009028786E468828A4 -:106A600002D00720BDE8F88301200090FAB1F7B109 -:106A70005FEA08001BD013463246284609F049FA5F -:106A80000028EFD13B4632462146284609F0A2FABB -:106A90000028E7D1434632462146284609F09AFAB3 -:106AA0000028DFD10098A04203D00920DAE70E20A9 -:106AB000D8E70020D6E713460A460146882008F0AA -:106AC00013B938B50C46B8B12CB100210091037848 -:106AD0006946892B01D0072038BD012300935AB1A4 -:106AE00013460A46214609F014FA0028F4D100980A -:106AF000A04203D0092038BD0E2038BD002038BD8B -:106B000013460A460146892008F0EEB8F8B5164645 -:106B1000070032D086B37BB31C460D466B4609F0A6 -:106B200059FA002827D19DF800102078A31C61F3A2 -:106B3000000020709DF800103246490861F34100C2 -:106B400020709DF80010890861F3820020702946AA -:106B5000384609F0DEF900280DD1231D32462946BA -:106B6000384609F0D6F9002805D1A31D324629463A -:106B7000384609F0CEF9F8BDFFE70E20FBE700002C -:106B80001CB50C46D8B12CB100210191037801A9A4 -:106B90008A2B01D007201CBD012301937AB1136811 -:106BA0006BB1094B009313460A46214604F082F864 -:106BB0000028F0D10198A04203D009201CBD0E206E -:106BC0001CBD00201CBD00000D6B020013460A46D0 -:106BD00001468A2008F088B813460A4601468B20F1 -:106BE00008F082B82DE9FC471E46DDE90A540F463D -:106BF0005FEA000842D03FB10020019098F8000001 -:106C00000DF10409862802D00720BDE8FC87012089 -:106C1000019092B38EB385B37CB3306868B32868B3 -:106C200058B3206848B313464A46404609F071F904 -:106C30000028EAD11348009033464A463946404678 -:106C400004F038F80028E0D10F4800902B464A465F -:106C50003946404604F02EF80028D6D10B48009063 -:106C600023464A463946404604F024F80028CCD151 -:106C70000198B84204D00920C7E7FFE70E20C4E717 -:106C80000020C2E771510200156002000D71020080 -:106C900013460A460146862008F026B838B500B3E8 -:106CA000FAB1F3B11C466B4609F094F9002817D1EC -:106CB0009DF80020217862F3000121709DF80020EA -:106CC000520862F3410121709DF80020920862F39E -:106CD000820121709DF80020D20862F3C301217067 -:106CE00038BD0E2038BD38B5A9B1A3B198B1007830 -:106CF000C0F34005044665F35F04C0F3800544EA31 -:106D00008504C0F3C00044EAC0008DF80000684666 -:106D100009F082F938BD0E2038BD0000F8B51646DE -:106D2000070029D046B33BB3144800901C460D46DB -:106D3000384603F0BFFF00281DD111480090231DE5 -:106D400032462946384603F0B5FF002813D10D48D6 -:106D5000009004F1080332462946384603F0AAFFA2 -:106D6000002808D10848009004F10C033246294657 -:106D7000384603F09FFFF8BD0E20F8BD0D5202000B -:106D8000955F02000D71020041630200F8B51D46D7 -:106D900017460E0026D02DB320B3044612480090AB -:106DA000206803F0B5FF00281BD1104800902B4647 -:106DB0003A463146606803F0ABFF002811D10C4819 -:106DC00000902B463A463146A06803F0A1FF002808 -:106DD00007D1084800902B463A463146E06803F058 -:106DE00097FFF8BD0E20F8BD4D520200D55F02009E -:106DF00023710200576302002DE9F84316465FEA4B -:106E0000000813D096B18BB1094F1C460D46009770 -:106E100005F020FE002807D104F110033246294670 -:106E20004046009705F016FEBDE8F8830E20FBE70C -:106E30001D6D02002DE9F8431D4690460E0012D04C -:106E40008DB180B1094F0446009705F035FE00284A -:106E500007D12B464246314604F11000009705F059 -:106E60002BFEBDE8F8830E20FBE700008D6D0200CD -:106E700038B5A9B1A3B198B10078C0F34005044674 -:106E800065F35F04C0F3800544EA8504C0F3C000E5 -:106E900044EAC0008DF80000684609F0BDF838BD2E -:106EA0000E2038BD2DE9FC479846DDE90A540E4610 -:106EB00007003FD036B10020019038780DF1040969 -:106EC0007F2802D00720BDE8FC870120019082B313 -:106ED000B8F1000F2ED065B3286850B34CB32068CA -:106EE00038B313464A46384609F013F80028EAD169 -:106EF00043464A463146384609F06CF80028E2D14C -:106F00000E4800902B464A463146384603F0D2FEE2 -:106F10000028D8D10A48009023464A4631463846D0 -:106F200003F0C8FE0028CED10198B04204D0092059 -:106F3000C9E7FFE70E20C6E70020C4E7B16F0200F3 -:106F4000F96D02002DE9FF4184B0984614460F0008 -:106F500019D0C4B10020019025687F2001AE8DF8C2 -:106F6000080033462A4602A809F056F800280BD13B -:106F700033462A46394604A809F00BF8002803D105 -:106F8000049870B903E00E2008B0BDE8F08107480E -:106F9000009033462A463946404603F0B9FE0028A1 -:106FA000F2D1019820600020EEE70000356E02006B -:106FB0002DE9FC4116465FEA000853D0002E51D05F -:106FC000002B4FD01C460D4601AB09F003F80028FA -:106FD00046D1631C32462946404608F0FBFF002894 -:106FE0003ED1A31C32462946404608F0F3FF002854 -:106FF00036D11D4FE31C324629464046009705F026 -:1070000029FD00282CD1231D3246294640460097F1 -:1070100005F020FD002823D19DF80420217862F39B -:10702000000121709DF80420520862F34101217093 -:107030009DF80420920862F3820121709DF80420DB -:10704000D20862F3C30121709DF80420120962F393 -:10705000061121709DF80420D20962F3C711217036 -:10706000BDE8FC810E20FBE79D6C02002DE9FC4190 -:107070001D4690460E0045D0F5B3E8B304460078AF -:10708000C0F34002014662F35F01C0F3800241EAAF -:107090008201C0F3C00241EAC201C0F3021241EA18 -:1070A000021120F07F0001438DF804104246314662 -:1070B00001A808F0B1FF002822D12B4642463146F4 -:1070C000601C08F0A9FF00281AD12B464246314621 -:1070D000A01C08F0A1FF002812D10B4F2B464246FE -:1070E0003146E01C009705F0E7FC002808D12B464C -:1070F00042463146201D00E004E0009705F0DCFC2C -:10710000BDE8FC810E20FBE7E76C020038B530B12A -:107110002AB123B11024009408F08BFF38BD0E2053 -:1071200038BD08B541B13BB130B1009313460A46B2 -:10713000102108F094FF08BD0E2008BD38B50C469C -:10714000B8B12CB10021009103786946772B01D0AA -:10715000072038BD012300935AB113460A46214641 -:1071600008F038FF0028F4D10098A04203D009208D -:1071700038BD0E2038BD002038BD13460A460146F2 -:10718000772007F0B1BD00002DE9FE4F1446060040 -:1071900098460D4629D035B10027019730780DF17A -:1071A000040A6E2802D00720BDE8FE8F012001905E -:1071B000DCB12068C8B10068B8B15246304608F06A -:1071C00009FF0028F0D102AB52462946304608F0AC -:1071D00001FF0028E8D19DF80800012807D02760AA -:1071E0000198A84219D00920DEE70E20DCE72768C5 -:1071F0000024DFF82C900BE007EB8403524629466D -:107200003046CDF8009003F055FD0028CCD1641C29 -:1072100098F80000A042EFD8E2E70020C4E70000A1 -:10722000B144020013460A4601466E2007F05CBDD9 -:1072300038B5A0B19AB193B11C466B4608F0CAFEAE -:1072400000280BD19DF80020217862F30001217005 -:107250009DF80020520862F34101217038BD0E20D4 -:1072600038BD38B590B38AB383B31C466B4608F07B -:10727000B1FE002829D19DF80020217862F3000199 -:1072800021709DF80020520862F3410121709DF8A1 -:107290000020920862F3820121709DF80020D2083C -:1072A00062F3C30121709DF80020120962F30411FA -:1072B00021709DF80020520962F3451121709DF85C -:1072C0000020920962F38611217038BDFFE70E207D -:1072D000FBE738B509B303B3F8B10078C0F3400554 -:1072E000044665F35F04C0F3800544EA8504C0F3F7 -:1072F000C00544EAC504C0F3001544EA0514C0F310 -:10730000401544EA4514C0F3801044EA80108DF81B -:107310000000684608F080FE38BD0E2038BD18B168 -:1073200012B10BB108F0F5BD0E207047F8B51D463F -:1073300017460E000FD075B168B1044608F0F8FD8D -:10734000002807D1054800902B463A463146A01C3C -:1073500005F0C6FBF8BD0E20F8BD00008FA60200A8 -:10736000F8B51D4617460E000FD075B168B104463A -:1073700008F0DEFD002807D1054800902B463A466C -:107380003146A01C05F0ACFBF8BD0E20F8BD000096 -:10739000A9A802002DE9FC411C460D46060025D097 -:1073A0002DB100200190307801AF982802D007203D -:1073B000BDE8FC8101200190C2B1BCB12068A8B138 -:1073C00013463A46304608F0A4FD0028F0D109489B -:1073D000009023463A462946304603F06BFC0028CD -:1073E000E6D10198A84203D00920E1E70E20DFE7AB -:1073F0000020DDE7B381020013460A4601469820CB -:1074000007F072BC2DE9FC411D4617460E0032D034 -:1074100085B378B3044619480090204605F060FB18 -:10742000002825D1164800902B463A463146201DAB -:1074300005F056FB00281BD160792B4600F00100B7 -:107440008DF804003A46314601A808F0E5FD002811 -:107450000ED12B463A463146A01D08F069FD0028A2 -:1074600006D12B463A46314604F1080008F060FD8B -:10747000BDE8FC81FFE70E20FAE70000A9A80200A2 -:10748000D37202002DE9FC411D46089C0E46070000 -:1074900033D036B10020019038780DF104089928D6 -:1074A00002D00720BDE8FC81012001902AB325B35A -:1074B000286810B30CB32068F8B11346424638462A -:1074C00008F027FD0028EDD10E4800902B464246DB -:1074D0003146384603F0EEFB0028E3D10A4800901D -:1074E000234642463146384603F0E4FB0028D9D112 -:1074F0000198B04203D00920D4E70E20D2E7002043 -:10750000D0E7000079A80200B381020013460A46C2 -:107510000146992007F0E8BB2DE9FC411C46089F75 -:107520000D46060026D035B10020019030780DF1CF -:1075300004089B2802D00720BDE8FC8101200190AF -:10754000C2B1BCB12068A8B1A7B1134642463046CB -:1075500008F0DFFC0028EFD123464246294630469A -:10756000009704F015FF0028E6D10198A84203D047 -:107570000920E1E70E20DFE70020DDE713460A4699 -:1075800001469B2007F0B0BB2DE9FC411F460C468D -:10759000050009D02CB100200190287801AE962872 -:1075A00004D00720BDE8FC810E20FBE70120134634 -:1075B00001903246284608F0ACFC0028F2D1084879 -:1075C00000903B4632462146284603F073FB0028D4 -:1075D000E8D10198A04201D00920E3E70020E1E7CB -:1075E000B381020013460A460146962007F07CBB91 -:1075F00018B112B10BB108F0EDBC0E2070470000BD -:10760000F8B51D4617460E000FD075B168B1044697 -:1076100008F08EFC002807D1054800902B463A461A -:107620003146A01C05F05CFAF8BD0E20F8BD000044 -:10763000A9A802002DE9FC411F460C46050009D00F -:107640002CB100200190287801AE972804D00720A3 -:10765000BDE8FC810E20FBE7012013460190324675 -:10766000284608F056FC0028F2D1084800903B4616 -:1076700032462146284603F01DFB0028E8D1019838 -:10768000A04201D00920E3E70020E1E7B381020036 -:1076900013460A460146972007F026BB2DE9FE4314 -:1076A0001D461646040007D036B12DB12088342877 -:1076B00004D00720BDE8FE830E20FBE700200190E8 -:1076C0002F6834200DF10408ADF8080043463A460F -:1076D000314602A808F02CFC0028EBD143463A467C -:1076E0003146201D08F024FC0028E3D143463A46E9 -:1076F0003146A01D08F01CFC0028DBD143463A4669 -:10770000314604F1080008F013FC0028D2D10748E4 -:10771000009043463A46314604F10A0005F0D6F996 -:107720000028C7D101992960C4E700003177020021 -:107730002DE9F8431F4691465FEA010814D09FB136 -:1077400090B1044608F0F4FB00280ED13B464A46AF -:107750004146A01C08F060FC002806D1A178012950 -:1077600005D0104E002515E00E20BDE8F8830E4E22 -:10777000F8E7A078012811D005EBC50004EB400024 -:10778000001D3B464A464146009605F0A9F90028EF -:10779000EBD16D1C2188A942EBD8E6E705EB45004B -:1077A000ECE700002D730200617302002DE9FE4337 -:1077B0001D461646040007D036B12DB12088322868 -:1077C00004D00720BDE8FE830E20FBE700200190D7 -:1077D0002F6832200DF10408ADF8080043463A4600 -:1077E000314602A808F0A4FB0028EBD143463A46F4 -:1077F0003146201D08F09CFB0028E3D143463A4661 -:107800003146A01D08F094FB0028DBD143463A46E0 -:10781000314604F1080008F08BFB0028D2D107485C -:10782000009043463A46314604F10A0005F04EF90D -:107830000028C7D101992960C4E7000041780200FF -:107840002DE9F8431E4691465FEA010809D046B18A -:1078500038B1044608F06CFB002803D100250B4F1B -:1078600010E00E20BDE8F88305EB850004EB400036 -:1078700033464A464146801C009705F031F90028FE -:10788000F0D16D1C2188A942EED8EBE70574020007 -:107890002DE9FE431D461646040007D036B12DB132 -:1078A0002088352804D00720BDE8FE830E20FBE7A2 -:1078B000002001902F6835200DF10408ADF8080074 -:1078C00043463A46314602A808F032FB0028EBD185 -:1078D00043463A463146201D08F02AFB0028E3D1F2 -:1078E00043463A463146A01D08F022FB0028DBD172 -:1078F00043463A46314604F1080008F019FB0028D7 -:10790000D2D10748009043463A46314604F10A0076 -:1079100005F0DCF80028C7D101992960C4E7000010 -:1079200025790200F8B51D4617460E001AD0CDB1D4 -:10793000C0B1044608F0FCFA002812D12B463A46A2 -:107940003146A01C08F0F4FA00280AD1608821888A -:10795000801C484381B23B463246201D009508F00A -:107960007EFBF8BD0E20F8BD2DE9FE431D461646F0 -:10797000040007D036B12DB12088372804D0072065 -:10798000BDE8FE830E20FBE7002001902F68372022 -:107990000DF10408ADF8080043463A46314602A806 -:1079A00008F0C6FA0028EBD143463A463146201D7E -:1079B00008F0BEFA0028E3D143463A463146A01DFE -:1079C00008F0B6FA0028DBD143463A46314604F1C6 -:1079D000080008F0ADFA0028D2D1074800904346CD -:1079E0003A46314604F10A0005F070F80028C7D184 -:1079F00001992960C4E70000FD790200F8B51D4631 -:107A000017460E000ED06DB160B1044608F090FA32 -:107A1000002806D1009521883B463246A01C08F07C -:107A20001EFBF8BD0E20F8BD2DE9FE431D4616468F -:107A3000040007D036B12DB12088332804D00720A8 -:107A4000BDE8FE830E20FBE7002001902F68332065 -:107A50000DF10408ADF8080043463A46314602A845 -:107A600008F066FA0028EBD143463A463146201D1D -:107A700008F05EFA0028E3D143463A463146A01D9D -:107A800008F056FA0028DBD143463A46314604F165 -:107A9000080008F04DFA0028D2D10748009043466C -:107AA0003A46314604F10A0005F010F80028C7D123 -:107AB00001992960C4E70000BD7A02002DE9F8436E -:107AC0001E4691465FEA010809D046B138B1044626 -:107AD00008F02EFA002803D100250B4F10E00E20ED -:107AE000BDE8F88305EB450004EB400033464A4609 -:107AF0004146801C009704F0F3FF0028F0D16D1C74 -:107B00002188A942EED8EBE7017602002DE9FE4379 -:107B10001D461646040007D036B12DB120883A28FC -:107B200004D00720BDE8FE830E20FBE70020019073 -:107B30002F683A200DF10408ADF8080043463A4694 -:107B4000314602A808F0F4F90028EBD143463A4642 -:107B50003146201D08F0ECF90028E3D143463A46AF -:107B60003146A01D08F0E4F90028DBD143463A462F -:107B7000314604F1080008F0DBF90028D2D10748AB -:107B8000009043463A46314604F10A0004F09EFF55 -:107B90000028C7D101992960C4E70000A17B020039 -:107BA00019B113B108B108F0C3B90E207047000035 -:107BB0002DE9FE431D461646040007D036B12DB10F -:107BC0002088392804D00720BDE8FE830E20FBE77B -:107BD000002001902F6839200DF10408ADF808004D -:107BE00043463A46314602A808F0A2F90028EBD1F4 -:107BF00043463A463146201D08F09AF90028E3D161 -:107C000043463A463146A01D08F092F90028DBD1E0 -:107C100043463A46314604F1080008F089F9002845 -:107C2000D2D10748009043463A46314604F10A0053 -:107C300004F04CFF0028C7D101992960C4E7000077 -:107C4000457C0200F8B51D4617460E001ED0EDB16A -:107C5000E0B1044608F06CF9002816D12B463A46EC -:107C60003146A01C08F0D8F900280ED12B463A4620 -:107C70003146201D08F05CF9002806D10095A18846 -:107C80003B463246A01D08F0EAF9F8BD0E20F8BDCB -:107C90002DE9FE431D461646040007D036B12DB12E -:107CA0002088302804D00720BDE8FE830E20FBE7A3 -:107CB000002001902F6830200DF10408ADF8080075 -:107CC00043463A46314602A808F032F90028EBD183 -:107CD00043463A463146201D08F02AF90028E3D1F0 -:107CE00043463A463146A01D08F022F90028DBD170 -:107CF00043463A46314604F1080008F019F90028D5 -:107D0000D2D10748009043463A46314604F10A0072 -:107D100004F0DCFE0028C7D101992960C4E7000007 -:107D2000257D02002DE9F8431E4691465FEA0108D1 -:107D300009D046B138B1044608F0FAF8002803D15A -:107D400000250A4F0EE00E20BDE8F88304EBC500C5 -:107D500033464A464146801C009704F0C1FE002885 -:107D6000F2D16D1C2188A942F0D8EDE7FD83020015 -:107D70002DE9FE431D461646040007D036B12DB14D -:107D80002088362804D00720BDE8FE830E20FBE7BC -:107D9000002001902F6836200DF10408ADF808008E -:107DA00043463A46314602A808F0C2F80028EBD113 -:107DB00043463A463146201D08F0BAF80028E3D180 -:107DC00043463A463146A01D08F0B2F80028DBD100 -:107DD00043463A46314604F1080008F0A9F8002865 -:107DE000D2D10748009043463A46314604F10A0092 -:107DF00004F06CFE0028C7D101992960C4E7000097 -:107E0000057E0200F8B51D4617460E001ED0EDB1E6 -:107E1000E0B1044608F08CF8002816D12B463A460B -:107E20003146A01C08F084F800280ED12B463A46B3 -:107E30003146201D08F07CF8002806D10095A18865 -:107E40003B463246A01D08F00AF9F8BD0E20F8BDE9 -:107E50002DE9FE431D461646040007D036B12DB16C -:107E60002088312804D00720BDE8FE830E20FBE7E0 -:107E7000002001902F6831200DF10408ADF80800B2 -:107E800043463A46314602A808F052F80028EBD1A2 -:107E900043463A463146201D08F04AF80028E3D10F -:107EA00043463A463146A01D08F042F80028DBD18F -:107EB00043463A46314604F1080008F039F80028F4 -:107EC000D2D10748009043463A46314604F10A00B1 -:107ED00004F0FCFD0028C7D101992960C4E7000027 -:107EE000E57E02002DE9F84F984692465FEA0109C7 -:107EF0000ED0B8F1000F0BD050B1044643464946AE -:107F000008F016F8002804D1A51C0026094F0DE042 -:107F10000E20BDE8F88F4346524649462846009752 -:107F200004F0DEFD0028F4D10A35761C2188B14228 -:107F3000F1D8EEE7718202002DE9FE431D46164698 -:107F4000040007D036B12DB120883B2804D007208B -:107F5000BDE8FE830E20FBE7002001902F683B2048 -:107F60000DF10408ADF8080043463A46314602A830 -:107F700007F0DEFF0028EBD143463A463146201D8C -:107F800007F0D6FF0028E3D143463A463146A01D0C -:107F900007F0CEFF0028DBD143463A46314604F1D4 -:107FA000080007F0C5FF0028D2D1074800904346DB -:107FB0003A46314604F10A0004F088FD0028C7D192 -:107FC00001992960C4E70000CD7F020019B113B107 -:107FD00008B108F021B80E2070472DE9FC411D467C -:107FE0001646040007D036B12DB120883C2804D0B5 -:107FF0000720BDE8FC810E20FBE7002000902F68E1 -:108000003C20E846ADF8040043463A46314601A814 -:1080100007F08EFF0028ECD143463A463146201D3A -:1080200007F086FF0028E4D143463A463146A01DBA -:1080300007F07EFF0028DCD143463A46314604F182 -:10804000080007F075FF0028D3D143463A46314671 -:1080500004F10A0007F0E0FF0028CAD10099296066 -:10806000C7E700002DE9FE431D461646040007D071 -:1080700036B12DB12088382804D00720BDE8FE8312 -:108080000E20FBE7002001902F6838200DF1040836 -:10809000ADF8080043463A46314602A807F048FFCB -:1080A0000028EBD143463A463146201D07F040FFF9 -:1080B0000028E3D143463A463146A01D07F038FF79 -:1080C0000028DBD143463A46314604F1080007F068 -:1080D0002FFF0028D2D10748009043463A46314648 -:1080E00004F10A0004F0F2FC0028C7D101992960CC -:1080F000C4E70000F9800200F8B51D4617460E00DF -:1081000027D035B328B3044607F012FF00281FD14B -:108110002B463A463146A01C07F07EFF002817D1B7 -:108120002B463A463146201D07F002FF00280FD1AA -:108130002B463A463146A01D07F0FAFE002807D12B -:108140000095E1883B46324604F1080007F087FFBE -:10815000F8BD0E20F8BDF8B51F460C46050008D046 -:108160002CB10020009028786E469E2803D007206E -:10817000F8BD0E20F8BD0120134600903246284677 -:1081800007F0C7FE0028F5D13B4632462146284677 -:1081900007F0BFFE0028EDD10098A04201D00920D1 -:1081A000F8BD0020F8BD13460A4601469E2006F0A1 -:1081B0009BBD2DE9F041164607000FD076B16BB19B -:1081C0001C460D4607F0A5FE002808D1A31C324628 -:1081D00029463846BDE8F04107F09BBE0E20BDE8B9 -:1081E000F0812DE9F0411D4617460E000ED06DB10D -:1081F00060B1044607F09CFE002808D12B463A46A1 -:108200003146A01CBDE8F04107F092BE0E20BDE84B -:10821000F081F8B51F460C46050008D02CB10020AF -:10822000009028786E469D2803D00720F8BD0E20C8 -:10823000F8BD0120134600903246284607F069FE3B -:108240000028F5D13B4632462146284607F061FE1C -:108250000028EDD10098A04201D00920F8BD0020EF -:10826000F8BD13460A4601469D2006F03DBD0000BC -:10827000F8B51D4617460E000FD075B168B104461B -:1082800007F056FE002807D1054800902B463A46D5 -:108290003146A01C04F024FCF8BD0E20F8BD0000FF -:1082A000FD8302002DE9FC411F46DDF820800C46CD -:1082B000050009D02CB100200190287801AE942847 -:1082C00004D00720BDE8FC810E20FBE70120134607 -:1082D00001903246284607F01CFE0028F2D13B46AA -:1082E00032462146284607F014FE0028EAD1084805 -:1082F0000090434632462146284602F0DBFC002827 -:10830000E0D10198A04201D00920DBE70020D9E7A5 -:1083100079A8020013460A460146942006F0E4BC00 -:108320002DE9F8431F46DDF820800C46050009D0F2 -:108330002CB10020009028786E469A2804D007209F -:10834000BDE8F8830E20FBE701201346009032467B -:10835000284607F0DEFD0028F2D13B463246214692 -:10836000284607F0D6FD0028EAD14346324621468A -:10837000284607F0CEFD0028E2D10098A04201D0A7 -:108380000920DDE70020DBE713460A4601469A2074 -:1083900006F0AABC2DE9FC411F460C46050009D099 -:1083A0002CB100200190287801AE952804D0072038 -:1083B000BDE8FC810E20FBE7012013460190324608 -:1083C000284607F0A6FD0028F2D1084800903B4659 -:1083D00032462146284602F06DFC0028E8D101987B -:1083E000A04201D00920E3E70020E1E7B3810200C9 -:1083F00013460A460146952006F076BCF8B51D46A0 -:1084000017460E0012D08DB180B104460848009086 -:10841000204604F065FB002807D1064800902B4653 -:108420003A463146201D04F05BFBF8BD0E20F8BD36 -:10843000A9A80200E3810200F8B51646070028D07B -:108440003EB333B31C460D4607F0C4FD00281FD1D0 -:10845000631C32462946384607F0BCFD002817D178 -:10846000A31C32462946384607F053FD00280FD199 -:10847000231D32462946384607F04BFD002807D118 -:10848000A01D831C009032462946384605F029F885 -:10849000F8BD0E20F8BD00002DE9FC411F460C463A -:1084A000050009D02CB100200190287801AE9C284D -:1084B00004D00720BDE8FC810E20FBE70120134615 -:1084C00001903246284607F024FD0028F2D10848E2 -:1084D00000903B4632462146284602F0EBFB00283E -:1084E000E8D10198A04201D00920E3E70020E1E7AC -:1084F0003984020013460A4601469C2006F0F4BB6C -:108500002DE9FC479846DDF828900D46060009D075 -:108510002DB100240194307801AFAC2804D007209D -:10852000BDE8FC870E20FBE70120134601903A4688 -:10853000304607F0EEFC0028F2D143463A46294681 -:108540003046009402F0B6FB0028E9D14B463A468B -:1085500029463046009402F0ADFB0028E0D1019896 -:10856000A84201D00920DBE70020D9E72DE9FF432D -:1085700083B09846DDF8389014460F0019D0C4B186 -:10858000002001902568AC2001AE8DF8080033462C -:108590002A4602A807F040FD00280BD133462A46A0 -:1085A000394603A807F0F5FC002803D10398C0B9A9 -:1085B00003E00E2007B0BDE8F0830C48009033467E -:1085C0002A463946404602F0A3FB0028F2D108486B -:1085D000009033462A463946484602F099FB002867 -:1085E000E8D1019820600020E4E70000A9A802007B -:1085F000618602002DE9FC4116465FEA00082BD097 -:1086000056B34BB3154F1C460D46009704F02CFA99 -:1086100000281FD1631C324629464046009704F0CB -:1086200023FA002816D101AB32462946404607F00E -:10863000D1FC00280ED19DF80410A2784B0861F3FC -:10864000000263F34202CB0863F3C302090961F33A -:108650000412A270BDE8FC810E20FBE7A94B0200CA -:108660002DE9FC411D4690460E0032D085B378B30B -:10867000194F0446009704F047FA002826D12B46EC -:1086800042463146601C009704F03EFA00281DD196 -:10869000A0782B46C0F34102014662F35F01C0F3AC -:1086A000C00241EAC201C0F3001041EA00108DF897 -:1086B00004004246314601A807F0AEFC002805D16F -:1086C000A178C1F34101012900D00720BDE8FC8158 -:1086D000FFE70E20FAE70000DB4B0200F8B5164674 -:1086E000070032D086B37BB3194800901C460D4674 -:1086F000384602F0DFFA002825D116480090231DE5 -:1087000032462946384602F0D5FA00281BD104F13A -:108710000A0332462946384607F0FBFB002812D1EF -:1087200004F10C0332462946384607F0F2FB0028D4 -:1087300009D104F10800009004F1100332462946E3 -:10874000384604F0CEFEF8BDFFE70E20FBE7000040 -:1087500079A80200F58502002DE9FC4116460700C4 -:1087600028D03EB333B31C460D4607F0D2FB002899 -:108770001ED101AB32462946384607F02BFC0028B3 -:1087800016D1231D32462946384607F0C2FB002881 -:108790000ED1A01D831C009032462946384604F0B5 -:1087A000A0FE002804D19DF8041001F00101A17081 -:1087B000BDE8FC810E20FBE718B112B10BB107F048 -:1087C000D1BB0E20704738B558B152B14BB11C46E1 -:1087D0006B4607F0FFFB002802D19DF800102170C6 -:1087E00038BD0E2038BD2DE9F0411D4617460E005C -:1087F0001ED0EDB1E0B1044607F09AFB002818D175 -:108800002B463A463146A01C07F092FB002810D1B7 -:108810002B463A463146201D07F08AFB002808D136 -:108820002B463A463146A01DBDE8F04107F080BB1B -:108830000E20BDE8F08100002DE9F84316465FEAFE -:10884000000854D0002E52D0002B50D02948009060 -:108850001C460D46404604F007F9002845D126483D -:108860000090631C32462946404604F0FDF800287B -:108870003BD104F1080332462946404607F049FB44 -:10888000002832D104F10A000090231D3246294607 -:10889000404604F026FE002827D11848009004F135 -:1088A0000C0332462946404602F004FA00281CD147 -:1088B000134F04F11003324629464046009702F058 -:1088C000F9F9002811D104F1140332462946404633 -:1088D000009702F0EFF9002807D104F1180332469F -:1088E00029464046009702F0E5F9BDE8F8830E20DE -:1088F000FBE700006372020031720200058902008A -:10890000F58502002DE9F0411646070027D036B361 -:108910002BB31C460D4607F05DFB002820D1631CDD -:1089200032462946384607F055FB002818D1A31CCB -:1089300032462946384607F0ECFA002810D1231DAC -:1089400032462946384607F045FB002808D1A31DCA -:10895000324629463846BDE8F04107F0DABA0E2023 -:10896000BDE8F0812DE9FC479846DDE90A9A0C46FE -:10897000050009D02CB100260196287801AFA22865 -:1089800004D00720BDE8FC870E20FBE7012013463A -:1089900001903A46284607F0BCFA0028F2D1124866 -:1089A000009043463A462146284602F083F90028C3 -:1089B000E8D10E4800904B463A462146284602F040 -:1089C00079F90028DED153463A46214628460096DA -:1089D00002F070F90028D5D10198A04201D00920F9 -:1089E000D0E70020CEE7000039880200DD860200D3 -:1089F0002DE9FF4184B0984614460F0019D0C4B148 -:108A0000002001902568A22001AE8DF808003346B1 -:108A10002A4602A807F000FB00280BD133462A465D -:108A2000394604A807F0B5FA002803D1049870B9B4 -:108A300003E00E2008B0BDE8F081074800903346FF -:108A40002A463946404602F063F90028F2D10198DF -:108A500020600020EEE70000E787020018B112B1A5 -:108A60000BB107F0B7BA0E20704700002DE9FC47A4 -:108A70009846DDF828900C46050009D02CB1002658 -:108A80000196287801AFA32804D00720BDE8FC8711 -:108A90000E20FBE70120134601903A46284607F0D6 -:108AA00038FA0028F2D10D48009043463A46214654 -:108AB000284602F0FFF80028E8D14B463A46214606 -:108AC0002846009602F0F6F80028DFD10198A0426F -:108AD00001D00920DAE70020D8E70000DD86020097 -:108AE0002DE9FF4184B0984614460F0019D0C4B157 -:108AF000002001902568A32001AE8DF808003346C0 -:108B00002A4602A807F088FA00280BD133462A46E5 -:108B1000394604A807F03DFA002803D1049870B93B -:108B200003E00E2008B0BDE8F0810748009033460E -:108B30002A463946404602F0EBF80028F2D1019867 -:108B400020600020EEE7000031FF02002DE9FE4327 -:108B50001D461646040007D036B12DB12088552891 -:108B600004D00720BDE8FE830E20FBE70020019023 -:108B70002F6855200DF10408ADF8080043463A4629 -:108B8000314602A807F0D4F90028EBD143463A4613 -:108B90003146201D07F0CCF90028E3D106480090AB -:108BA00043463A463146A01D03F0A4FF0028D9D120 -:108BB00001992960D6E70000BD8B020019B113B1FD -:108BC00008B107F0B5B90E20704700002DE9FE434B -:108BD0001D461646040007D036B12DB12088532813 -:108BE00004D00720BDE8FE830E20FBE700200190A3 -:108BF0002F6853200DF10408ADF8080043463A46AB -:108C0000314602A807F094F90028EBD143463A46D2 -:108C10003146201D07F08CF90028E3D1064800906A -:108C200043463A463146A01D03F064FF0028D9D1DF -:108C300001992960D6E700003D8C020019B113B1FB -:108C400008B107F075B90E2070472DE9FC411D46AB -:108C50001646040007D036B12DB12088572804D01D -:108C60000720BDE8FC810E20FBE7002000902F6864 -:108C70005720E846ADF8040043463A46314601A87D -:108C800007F056F90028ECD143463A463146201DFC -:108C900007F04EF90028E4D143463A463146A01D7C -:108CA00007F0BAF90028DCD100992960D9E7000063 -:108CB000F8B51D4617460E0019D0C5B1B8B1044627 -:108CC00007F036F9002813D10A4800902B463A469F -:108CD0003146A01C03F018FF002809D101B02B4633 -:108CE0003A463146A01DBDE8F04007F021B90E20FC -:108CF000F8BD0000A9A802002DE9F04186B01E468B -:108D00001746040008D03FB136B12088512805D05D -:108D1000072006B0BDE8F0810E20FAE7002003909E -:108D2000356851200DF10C08ADF8100043462A4675 -:108D3000394604A807F0FCF80028EAD143462A4641 -:108D40003946201D07F0F4F80028E2D116480090BB -:108D500043462A463946A01D03F0CCFE0500D8D173 -:108D6000A07902281CD1A07B062801D0042817D1A5 -:108D7000A08801A902F0B2F8052811D003A800903C -:108D80000198336800EB400101EB001107483A46B7 -:108D900000EB81000189406804F0BBFB0500B8D1FD -:108DA000039830602846B4E7B18D0200F4DC00205F -:108DB000F8B51D4617460E000DD065B158B10446F2 -:108DC00007F02AF9002805D12078012805D00228CB -:108DD00005D00720F8BD0E20F8BD054800E0054885 -:108DE00000902B463A463146A01C03F08DFEF8BD9C -:108DF000B18C0200019002002DE9FC411C46164690 -:108E0000050007D036B12CB12888532804D007209C -:108E1000BDE8FC810E20FBE700200090276853206E -:108E2000E846ADF8040043463A46314601A807F04B -:108E30007FF80028ECD143463A463146281D07F01A -:108E400077F80028E4D100992160E1E72DE9FE439D -:108E50001D461646040007D036B12DB12088522891 -:108E600004D00720BDE8FE830E20FBE70020019020 -:108E70002F6852200DF10408ADF8080043463A4629 -:108E8000314602A807F054F80028EBD143463A4691 -:108E90003146201D07F04CF80028E3D10648009029 -:108EA00043463A463146A01D03F024FE0028D9D19E -:108EB00001992960D6E70000BD8E020019B113B1F7 -:108EC00008B107F0A9B80E20704700002DE9FE4355 -:108ED0001D461646040007D036B12DB1208856280D -:108EE00004D00720BDE8FE830E20FBE700200190A0 -:108EF0002F6856200DF10408ADF8080043463A46A5 -:108F0000314602A807F014F80028EBD143463A4650 -:108F10003146201D07F00CF80028E3D106480090E8 -:108F200043463A463146A01D03F0E4FD0028D9D15E -:108F300001992960D6E700003D8F020019B113B1F5 -:108F400008B107F069B80E20704700002DE9FF470F -:108F50001E46914604000AD0B9F1000F07D036B181 -:108F60002088502805D0072004B0BDE8F0870E20E7 -:108F7000FAE700200190D6F80080502001AFADF84C -:108F800008003B464246494602A806F0D1FF0028A9 -:108F9000EAD13B4642464946201D06F0C9FF00285B -:108FA000E2D1154800903B4642464946A01D03F0D9 -:108FB000A1FD0500D8D1207B012801D0062816D1BB -:108FC000A08803A901F08AFF052810D00398009714 -:108FD00000EB400101EB00110848434600EB810023 -:108FE0004A460189406804F094FA0500BCD1019812 -:108FF00030602846B8E7000001900200F4DC002051 -:10900000F8B51D4617460E003CD0D5B3C8B304468C -:1090100006F08EFF002833D11B4800902B463A46BD -:109020003146A01C03F070FD002829D12B463A469A -:109030003146A01D06F0F0FF002821D12B463A460C -:109040003146E01D06F0E8FF002819D12B463A46CC -:10905000314604F1080006F06BFF002810D12B46C2 -:109060003A46314604F10A0006F062FF002807D1B3 -:10907000009561893B46324604F10C0006F0EFFF93 -:10908000F8BDFFE70E20FBE7A9A80200F8B51F46D0 -:109090000C46050008D02CB10020009028786E46C0 -:1090A000AD2803D00720F8BD0E20F8BD01201346DF -:1090B00000903246284606F02CFF0028F5D13B46AA -:1090C00032462146284606F024FF0028EDD10098BC -:1090D000A04201D00920F8BD0020F8BD13460A4681 -:1090E0000146AD2005F000BE2DE9FC411646070003 -:1090F00032D086B37BB31C460D4606F00AFF00282B -:1091000027D1A31C32462946384606F063FF0028C3 -:109110001FD1231D32462946384606F0FAFE0028A4 -:1091200017D10E48009004F108033246294638460C -:1091300001F0C0FD00280CD1A168002909D00888E1 -:109140000090019004F10C0332462946384601F0A4 -:10915000A7FCBDE8FC81FFE70E20FAE713FF020041 -:109160002DE9FC411F460C46050009D02CB100201A -:109170000190287801AEA62804D00720BDE8FC8124 -:109180000E20FBE70120134601903246284606F0E8 -:10919000C0FE0028F2D1084800903B4632462146E6 -:1091A000284601F087FD0028E8D10198A04201D0AF -:1091B0000920E3E70020E1E7E99002002DE9FF4103 -:1091C00084B0984614460F0019D0C4B10020019015 -:1091D0002568A62001AE8DF8080033462A4602A86D -:1091E00006F01AFF00280BD133462A46394604A858 -:1091F00006F0CFFE002803D1049870B903E00E20DA -:1092000008B0BDE8F0810748009033462A46394649 -:10921000404601F07DFD0028F2D101982060002039 -:10922000EEE7000031FF02002DE9FC479846DDF82B -:1092300028900C46050009D02CB10026019628780C -:1092400001AFA12804D00720BDE8FC870E20FBE772 -:109250000120134601903A46284606F05AFE00289F -:10926000F2D143463A462146284606F052FE0028EF -:10927000EAD14B463A4621462846009601F01AFDAF -:109280000028E1D10198A04201D00920DCE70020AC -:10929000DAE700002DE9FF4184B0984614460F003C -:1092A00019D0C4B1002001902568A12001AE8DF82D -:1092B000080033462A4602A806F0AEFE00280BD16D -:1092C00033462A46394604A806F063FE002803D137 -:1092D000049870B903E00E2008B0BDE8F08107489B -:1092E000009033462A463946404601F011FD0028D9 -:1092F000F2D1019820600020EEE7000031FF02006B -:109300007CB50C4640B12CB100230193057801A92E -:10931000AB2D03D007207CBD0E207CBD0125CDE9FF -:10932000003513460A46214601F0C4FC0028F4D15A -:109330000198A04201D009207CBD00207CBD000026 -:109340002DE9FF4184B0984614460F0019D0C4B1EE -:10935000002001902568AB2001AE8DF8080033464F -:109360002A4602A806F058FE00280BD133462A46AA -:10937000394604A806F00DFE002803D1049870B900 -:1093800003E00E2008B0BDE8F081074800903346A6 -:109390002A463946404601F0BBFC0028F2D101982C -:1093A00020600020EEE7000031FF0200F8B516460D -:1093B00007000FD076B16BB11C460D4606F00AFED1 -:1093C000002806D120780849012805D0022803D0BA -:1093D0000720F8BD0E20F8BD0091231D3246294616 -:1093E000384603F041FBF8BD598702002DE9FC41E6 -:1093F0001F460C46050009D02CB1002001902878AA -:1094000001AEA82804D00720BDE8FC810E20FBE7B0 -:109410000120134601903246284606F07AFD0028C6 -:10942000F2D1084800903B4632462146284601F0DA -:1094300041FC0028E8D10198A04201D00920E3E7CF -:109440000020E1E7AD93020013460A460146A8203A -:1094500005F04ABC2DE9FC479846DDF828900C46FB -:10946000050009D02CB100260196287801AFA0286C -:1094700004D00720BDE8FC870E20FBE7012013463F -:1094800001903A46284606F0A5FD0028F2D10D4885 -:10949000009043463A462146284601F00BFC00283E -:1094A000E8D14B463A4621462846009601F002FC98 -:1094B0000028DFD10198A04201D00920DAE700207E -:1094C000D8E7000079A802002DE9FF4184B0984652 -:1094D00014460F0019D0C4B1002001902568A020C7 -:1094E00001AE8DF8080033462A4602A806F094FD26 -:1094F00000280BD133462A46394604A806F049FD18 -:10950000002803D1049870B903E00E2008B0BDE82C -:10951000F0810748009033462A463946404601F01C -:10952000F7FB0028F2D1019820600020EEE7000050 -:1095300031FF02002DE9F8431F46DDF820800C467C -:10954000050009D02CB10020009028786E46A7288D -:1095500004D00720BDE8F8830E20FBE70120134666 -:1095600000903246284606F0D4FC0028F2D13B4653 -:1095700032462146284606F0CCFC0028EAD1434674 -:1095800032462146284606F0C4FC0028E2D1009865 -:10959000A04201D00920DDE70020DBE713460A46A0 -:1095A0000146A72005F0A0BB2DE9FC479946DDE95F -:1095B0000A8A0C46050009D02CB1002601962878AD -:1095C00001AFAA2804D00720BDE8FC870E20FBE7E6 -:1095D0000120134601903A46284606F09AFC0028DE -:1095E000F2D11148009043463A462146284601F000 -:1095F00061FB0028E8D14B463A46214628460096B2 -:1096000001F058FB0028DFD153463A462146284650 -:1096100006F0A8FC0028D7D10198A04201D009206B -:10962000D2E70020D0E7000013FF02002DE9FF433E -:1096300083B099460E9E14465FEA01081AD0CCB159 -:10964000002001902768AA2001AD8DF808002B4664 -:109650003A46414602A806F0DFFC00280BD12B4613 -:109660003A46414603A806F094FC002803D103982B -:10967000C0B903E00E2007B0BDE8F0830B480090AE -:109680002B463A464146304601F042FB0028F2D1D3 -:1096900046B1009531883B464246484601F032FAD1 -:1096A0000028E8D1019820600020E4E731FF0200A3 -:1096B0002DE9FC479846DDE90A790C46050009D0FA -:1096C0002CB100200190287801AEA92804D00720F1 -:1096D000BDE8FC870E20FBE70120134601903246CF -:1096E000284606F016FC0028F2D1434632462146B1 -:1096F0002846009703F0F5FE0028E9D14B46324694 -:109700002146284606F02EFC0028E1D10198A0420F -:1097100001D00920DCE70020DAE713460A460146BB -:10972000A92005F0E1BA2DE9FC4799460A9D0E46AD -:1097300007000AD036B10024019438780DF10408EE -:10974000A52804D00720BDE8FC870E20FBE70120F8 -:10975000134601904246384606F0DBFB0028F2D162 -:109760004B4642463146384606F0D3FB0028EAD144 -:109770002B46424631463846009401F09BFA0028B9 -:10978000E1D12B68CBB14246314638469B1C06F0EE -:10979000C0FB0028D7D14246314638462B6806F038 -:1097A000B8FB0028CFD12B684246314638461B1DF6 -:1097B000009401F07FFA0028C5D10198B04201D091 -:1097C0000920C0E70020BEE72DE9FF4184B098469C -:1097D00014460F0019D0C4B1002001902568A520BF -:1097E00001AE8DF8080033462A4602A806F014FCA4 -:1097F00000280BD133462A46394604A806F0C9FB97 -:10980000002803D1049870B903E00E2008B0BDE829 -:10981000F0810748009033462A463946404601F019 -:1098200077FA0028F2D1019820600020EEE70000CE -:109830003F9902002DE9FC411F46DDF820800C46CF -:10984000050009D02CB100200190287801AEA42891 -:1098500004D00720BDE8FC810E20FBE70120134661 -:1098600001903246284606F054FB0028F2D13B46D0 -:1098700032462146284606F04CFB0028EAD108482B -:109880000090434632462146284601F013FA00284C -:10989000E0D10198A04201D00920DBE70020D9E700 -:1098A000119902002DE9FF4184B0984614460F003B -:1098B00019D0C4B1002001902568A42001AE8DF814 -:1098C000080033462A4602A806F0A6FB00280BD162 -:1098D00033462A46394604A806F05BFB002803D12C -:1098E000049870B903E00E2008B0BDE8F081074885 -:1098F000009033462A463946404601F009FA0028CE -:10990000F2D1019820600020EEE700003F990200AC -:10991000F8B51646070010D07EB173B11C460D464F -:109920009B1C06F0F6FA002806D132462946384636 -:10993000231D009403F0D5FDF8BD0E20F8BDF8B549 -:109940001D4617460E000FD075B168B10446801C45 -:1099500006F0EEFA002806D1009521883B463246F3 -:10996000606803F0D6FDF8BD0E20F8BD2DE9FC4778 -:109970009846DDE90A9A0C46050009D02CB100266C -:109980000196287801AFB42804D00720BDE8FC87F1 -:109990000E20FBE70120134601903A46284606F0C8 -:1099A000B8FA0028F2D143463A462146284606F046 -:1099B000B0FA0028EAD14B463A462146284606F03E -:1099C000A8FA0028E2D153463A4621462846009696 -:1099D00001F070F90028D9D10198A04201D00920E6 -:1099E000D4E70020D2E700002DE9FF4184B098467B -:1099F00014460F0019D0C4B1002001902568B4208E -:109A000001AE8DF8080033462A4602A806F004FB92 -:109A100000280BD133462A46394604A806F0B9FA85 -:109A2000002803D1049870B903E00E2008B0BDE807 -:109A3000F0810748009033462A463946404601F0F7 -:109A400067F90028F2D1019820600020EEE70000BD -:109A500031FF0200F8B51F460C46050008D02CB1B6 -:109A60000020009028786E46B12803D00720F8BD6A -:109A70000E20F8BD0120134600903246284606F01D -:109A800048FA0028F5D13B4632462146284606F0E2 -:109A900040FA0028EDD10098A04201D00920F8BD7D -:109AA0000020F8BD13460A460146B12005F01CB956 -:109AB0002DE9F0411646070020D0FEB1F3B11C4657 -:109AC0000D4606F026FA002819D1A31C3246294675 -:109AD000384606F01EFA002811D104F10803324678 -:109AE0002946384606F015FA002808D1231D3246CB -:109AF00029463846BDE8F04106F034BA0E20BDE8EC -:109B0000F0812DE9FE4F9A460C9C0D4606000CD0C4 -:109B100045B14FF00008CDF8048030780DF104090C -:109B2000B22804D00720BDE8FE8F0E20FBE70127F6 -:109B300013464A463046019706F0EBF90028F2D169 -:109B400053464A462946304606F0E3F90028EAD152 -:109B50000297474602AB4A4629463046CDF8008078 -:109B600001F0A8F80028DED10298D0B123684A4657 -:109B7000294630461B1D06F0CCF90028D3D16B4690 -:109B80004A462946304606F0EDF90028CBD1206838 -:109B900080887C2809D8009901F046F9216808607E -:109BA00000E027600198A84201D00920BBE700200F -:109BB000B9E713460A460146B22005F095B82DE9EB -:109BC000F0411646070019D0C6B1BBB11C460D4680 -:109BD000FFF76EFF002812D104F10C03324629462C -:109BE000384606F096F9002809D104F10E033246F2 -:109BF00029463846BDE8F04106F08BB90E20BDE895 -:109C0000F08100002DE9FC419846089C0D460600B5 -:109C100009D02DB100200190307801AFB02804D0D8 -:109C20000720BDE8FC810E20FBE7012013460190D0 -:109C30003A46304606F06DF90028F2D112480090FD -:109C400043463A462946304601F034F80028E8D128 -:109C50000E48009023463A462946304601F02AF83D -:109C60000028DED1206840B1416831B100897C28EC -:109C700006D801F0D9F8216848600198A84201D0BF -:109C80000920CEE70020CCE713FF0200BF9B0200B3 -:109C90002DE9FF4184B0984614460F0019D0C4B195 -:109CA000002001902568B02001AE8DF808003346F1 -:109CB0002A4602A806F0B0F900280BD133462A46FE -:109CC000394604A806F065F9002803D1049870B954 -:109CD00003E00E2008B0BDE8F0810748009033464D -:109CE0002A463946404601F013F80028F2D101987F -:109CF00020600020EEE7000031FF02002DE9F04176 -:109D00001D4617460E001ED0EDB1E0B1044606F028 -:109D10000FF9002818D12B463A463146A01C06F010 -:109D200007F9002810D12B463A463146201D06F08F -:109D3000FFF8002808D12B463A463146A01DBDE861 -:109D4000F04106F0F5B80E20BDE8F0812DE9F047AE -:109D500088B09A46109C0D4606000DD045B14FF0D4 -:109D60000008CDF8148030780DF11409B32805D01F -:109D7000072008B0BDE8F0870E20FAE70127134658 -:109D80004A463046059706F0C4F80028F1D15346FC -:109D90004A462946304606F0BCF80028E9D1069725 -:109DA000474606AB4A4629463046CDF8008000F0CB -:109DB00081FF0028DDD1069860B303AB4A462946EF -:109DC000304606F0CFF80028D3D107AB4A462946E3 -:109DD000304606F09EF80028CBD1BDF81C007C2848 -:109DE0001CD8039901F020F8029058B1BDF81C006E -:109DF0000090019002AB4A462946304600F050FEE2 -:109E00000028B6D12168029808602168BDF81C00BE -:109E1000888000E027600598A84201D00920A8E7C3 -:109E20000020A6E713460A460146B32004F05CBFB3 -:109E30002DE9F0411646070027D036B32BB31C4658 -:109E40000D4606F066F8002820D1A31C32462946AC -:109E5000384606F05EF8002818D1231D3246294600 -:109E6000384606F0B7F8002810D1631D324629465F -:109E7000384606F0AFF8002808D1A31D324629461F -:109E80003846BDE8F04106F0A5B80E20BDE8F081E7 -:109E90002DE9FC411D461646040007D036B12DB110 -:109EA0002088752804D00720BDE8FC810E20FBE740 -:109EB000002000902F687520E846ADF80400434666 -:109EC0003A46314601A806F033F80028ECD1434663 -:109ED0003A463146201D06F02BF80028E4D14346CF -:109EE0003A463146A01D06F023F80028DCD143464F -:109EF0003A46314604F1080006F01AF80028D3D19A -:109F000000992960D0E72DE9FC411D461646040062 -:109F100007D036B12DB12088732804D00720BDE8C2 -:109F2000FC810E20FBE7002000902F687320E8469C -:109F3000ADF8040043463A46314601A805F0F8FF63 -:109F40000028ECD143463A463146201D05F0F0FF8B -:109F50000028E4D143463A463146A01D05F0E8FF0B -:109F60000028DCD100992960D9E72DE9FF471D467B -:109F7000914604000AD0B9F1000F07D035B120880E -:109F8000762805D0072004B0BDE8F0870E20FAE758 -:109F900000200190D5F80080762001AFADF80800D0 -:109FA0003B464246494602A805F0C2FF0028EAD1D6 -:109FB0003B4642464946201D05F0BAFF0028E2D143 -:109FC0003B4642464946A01D05F0B2FF0028DAD1C3 -:109FD0003B464246494604F1080005F0A9FF002827 -:109FE000D1D13B464246494604F1100005F0A0FF9E -:109FF0000028C8D1E6683B46424656F8040C039058 -:10A00000494603A805F0C5FF0028BCD10097218A66 -:10A0100043464A46E06800F075FD0400B3D130467F -:10A0200000F010FF019828602046ACE72DE9FE43C0 -:10A030001D461646040007D036B12DB1208874287D -:10A0400004D00720BDE8FE830E20FBE7002000902F -:10A050002F687420E846ADF8040043463A4631467E -:10A0600001A805F065FF0028ECD143463A46314689 -:10A07000201D05F05DFF0028E4D143463A463146F5 -:10A08000A01D05F055FF0028DCD143463A46314675 -:10A0900004F10C0005F04CFF0028D3D1A16869B190 -:10A0A00051F8040C0290084600F0CCFE43463A46B4 -:10A0B000314602A805F06DFF0028C3D10099296040 -:10A0C000C0E700002DE9FE431D461646040007D0F8 -:10A0D00036B12DB12088722804D00720BDE8FE8358 -:10A0E0000E20FBE7002001902F6872200DF104087C -:10A0F000ADF8080043463A46314602A805F018FF7D -:10A100000028EBD143463A463146201D05F010FFAA -:10A110000028E3D143463A463146A01D05F008FF2A -:10A120000028DBD10648009043463A46314604F108 -:10A13000080002F0F3FC0028D0D101992960CDE796 -:10A14000FD9C02002DE9FC411D461646040007D087 -:10A1500036B12DB12088712804D00720BDE8FC81DC -:10A160000E20FBE7002000902F687120E846ADF834 -:10A17000040043463A46314601A805F0D9FE0028BE -:10A18000ECD143463A463146201D05F0D1FE002869 -:10A19000E4D143463A463146A01D05F0C9FE0028E9 -:10A1A000DCD143463A46314604F1080005F034FF5D -:10A1B0000028D3D143463A46314604F10A0005F05F -:10A1C000B7FE0028CAD100992960C7E72DE9FE43F0 -:10A1D0001D461646040007D036B12DB120887028E0 -:10A1E00004D00720BDE8FE830E20FBE7002001908D -:10A1F0002F6870200DF10408ADF8080043463A4678 -:10A20000314602A805F094FE0028EBD143463A46B9 -:10A210003146201D05F08CFE0028E3D143463A4626 -:10A220003146A01D05F084FE0028DBD143463A46A6 -:10A23000314604F1100005F07BFE0028D2D107481A -:10A24000009043463A46314604F1080002F066FCAD -:10A250000028C7D101992960C4E70000FD9C0200D5 -:10A260002DE9FE431D461646040007D036B12DB138 -:10A270002088772804D00720BDE8FE830E20FBE766 -:10A28000002000902F687720E846ADF80400434690 -:10A290003A46314601A805F04BFE0028ECD1434672 -:10A2A0003A463146201D05F043FE0028E4D14346DE -:10A2B0003A463146A01D05F03BFE0028DCD143465E -:10A2C0003A46314604F10C0005F032FE0028D3D1A5 -:10A2D000A16869B151F8040C0290084600F0B2FD83 -:10A2E00043463A46314602A805F053FE0028C3D142 -:10A2F00000992960C0E72DE9FC411C460D46060087 -:10A3000025D035B10027019730780DF10408682871 -:10A3100002D00720BDE8FC8101200190BAB1B4B1A0 -:10A320002068A0B113464246304605F01BFE0028C7 -:10A33000F0D12346424629463046009700F0BAFC49 -:10A340000028E7D10198A84203D00920E2E70E20B7 -:10A35000E0E70020DEE700002DE9FF4184B015466C -:10A360000E9C5FEA010832D085B3002001902E6870 -:10A37000682001AF8DF808003B463246414602A8EE -:10A3800005F04AFE002823D13B463246414604A848 -:10A3900005F0FFFD00281BD1049878BBB4B13B4603 -:10A3A0003246414607A805F0F4FD002810D10021EF -:10A3B000079A0846222A29D00DDC012A12D0022A47 -:10A3C00012D0202A1ED0212A10D11DE0FFE70E2036 -:10A3D00008B0BDE8F081232A1CD0242A1CD0252AED -:10A3E00004D115E00D4900E00D49204600913B469F -:10A3F0003246414602F04CFB0028E9D10198286022 -:10A400000020E5E70749F0E70749EEE70749ECE7F1 -:10A410000749EAE70749E8E70749E6E79D3E020002 -:10A420000F3E0200596402000965020065650200E2 -:10A43000FB630200A5650200A564020038B580B187 -:10A4400029B10023009303786C46672B01D00720C5 -:10A4500038BD0123009322B11346224605F082FD48 -:10A4600038BD0E2038BD00002DE9FC471F46060010 -:10A4700014460D4633D045B14FF00008CDF80480A6 -:10A4800030780DF10409672802D00720BDE8FC8769 -:10A49000012001901CB317B3386800B313464A4635 -:10A4A000304605F05FFD0028F0D13B464A4629467C -:10A4B0003046CDF8008000F0FDFB0028E6D1396879 -:10A4C00021B322680346222A29D00ADC012A11D0AE -:10A4D000022A11D0202A1ED0212A0FD11DE00E20E1 -:10A4E000D4E7232A1FD0242A1FD0252A19D0262AB0 -:10A4F00004D11CE0104800E010480B4600904A468A -:10A500002946304602F09CFA0028BFD10198A842A3 -:10A510000FD00920BAE70A48EFE70A48EDE70A48F2 -:10A52000EBE70A48E9E70A48E7E70A48E5E70A48A7 -:10A53000E3E70020AAE700002D3E0200EB3D020009 -:10A540002B640200C56402004D650200CB6302006B -:10A550008165020085640200C365020013460A4655 -:10A560000146672004F0C0BB38B5D0B1CAB1C3B151 -:10A570001C466B4605F02EFD002811D19DF80020E9 -:10A58000217862F3000121709DF80020520862F3E7 -:10A59000410121709DF80020920862F3870121702B -:10A5A00038BD0E2038BD38B581B17BB170B10078AF -:10A5B000C0F34005044665F35F0420F00300044344 -:10A5C0008DF80040684605F027FD38BD0E2038BDE7 -:10A5D000007800F001007047F8B51546060010D06D -:10A5E0007DB173B11F460C461B1D05F092FC00287F -:10A5F00006D100903B462A462146304600F05AFBE1 -:10A60000F8BD0E20F8BD00002DE9FC411C460D46AA -:10A61000060025D02DB100200190307801AF6628CA -:10A6200002D00720BDE8FC8101200190C2B1BCB17D -:10A630002068A8B113463A46304605F06AFC002867 -:10A64000F0D10948009023463A462946304600F0AA -:10A6500031FB0028E6D10198A84203D00920E1E7A8 -:10A660000E20DFE70020DDE7D9A5020013460A46E9 -:10A670000146662004F038BB38B530B12AB123B1A9 -:10A680001024009405F0D5FC38BD0E2038BD08B567 -:10A6900041B13BB130B1009313460A46102105F099 -:10A6A000DEFC08BD0E2008BD2DE9FC410C46DDF89E -:10A6B0002080050009D02CB100260196287801AF32 -:10A6C000632804D00720BDE8FC810E20FBE70120B1 -:10A6D000CDE900203A46284602F033FF0028F2D1A7 -:10A6E00043463A4621462846009600F0E3FA002801 -:10A6F000E9D10198A04201D00920E4E70020E2E777 -:10A700002DE9FF4184B0984614460F0019D0C4B11A -:10A71000002001902568632001AE8DF808003346C3 -:10A720002A4602A805F078FC00280BD133462A46B9 -:10A73000394604A805F02DFC002803D1049870B90F -:10A7400003E00E2008B0BDE8F081074800903346D2 -:10A750002A463946404600F0DBFA0028F2D101983B -:10A7600020600020EEE70000A9A802002DE9FC47C8 -:10A770001D460A9C0E46070039D046B14FF000082E -:10A78000CDF8048038780DF10409642802D0072040 -:10A79000BDE8FC87012001904AB345B33CB3106883 -:10A7A00028B3286818B3206808B3134813460090EC -:10A7B0004A46384600F07EFA0028E9D12B464A4640 -:10A7C00031463846CDF8008000F074FA0028DFD119 -:10A7D00023464A4631463846CDF8008000F06AFAF2 -:10A7E0000028D5D10198B04203D00920D0E70E202F -:10A7F000CEE70020CCE7000079A802002DE9FF4158 -:10A8000084B01446DDF838800F0019D0C4B10020A0 -:10A8100001902668642001AD8DF808002B46324671 -:10A8200002A805F0F9FB00280BD12B463246394629 -:10A8300004A805F0AEFB002803D10498C0B903E0DA -:10A840000E2008B0BDE8F0812B463246394607A8F5 -:10A8500005F0E2FB0028F4D1B8F1000008D033463F -:10A860003A4600959DF81C1005F0F9FB0028E8D148 -:10A87000019820600020E4E72DE9F041164607002A -:10A880000FD076B16BB11C460D4605F042FB002897 -:10A8900008D1A31C324629463846BDE8F04105F0F0 -:10A8A00099BB0E20BDE8F0812DE9F0411D46174609 -:10A8B0000E000ED06DB160B1044605F039FB0028E2 -:10A8C00008D12B463A463146A01CBDE8F04105F0C0 -:10A8D000A3BB0E20BDE8F0812DE9FC411C460D46CE -:10A8E000060029D035B10027019730780DF1040812 -:10A8F000622802D00720BDE8FC8101200190DAB176 -:10A90000D4B11068C0B12068B0B10D4813460090B2 -:10A910004246304600F0CEF90028ECD123464246AC -:10A9200029463046009700F0C5F90028E3D1019888 -:10A93000A84203D00920DEE70E20DCE70020DAE79A -:10A9400079A602002DE9FF4184B0984614460F0015 -:10A9500019D0C4B1002001902568622001AE8DF8A5 -:10A96000080033462A4602A805F056FB00280BD102 -:10A9700033462A46394604A805F00BFB002803D1CC -:10A98000049870B903E00E2008B0BDE8F0810748D4 -:10A99000009033462A463946404600F0B9F900286F -:10A9A000F2D1019820600020EEE7000019000300BA -:10A9B0007CB50C46D0B12CB100230193057801A9D8 -:10A9C000652D01D007207CBD0125019572B1156868 -:10A9D00065B1009313460A46214600F06BF9002842 -:10A9E000F1D10198A04203D009207CBD0E207CBD8E -:10A9F00000207CBD2DE9FF4184B0984614460F002D -:10AA000019D0C4B1002001902568652001AE8DF8F1 -:10AA1000080033462A4602A805F0FEFA00280BD1AA -:10AA200033462A46394604A805F0B3FA002803D174 -:10AA3000049870B903E00E2008B0BDE8F081074823 -:10AA4000009033462A463946404602F021F8002855 -:10AA5000F2D1019820600020EEE7000061AA020018 -:10AA60002DE9F0411D4617460E0016D0ADB1A0B13C -:10AA7000044605F0D1FA002810D12B463A4631465B -:10AA8000A01C05F055FA002808D12B463A4631465D -:10AA9000201DBDE8F04105F04BBA0E20BDE8F08165 -:10AAA0002DE9F84F4FF00008DDE90AA681468DF840 -:10AAB000008010680F461C461546B84216D06B46FB -:10AAC000484605F07CFA9DF80000012805D00CB13D -:10AAD000C4F800800020BDE8F88F4CB1206838B180 -:10AAE000564503D829687A1AB24203D20920F2E700 -:10AAF0000E20F0E749443246F8F79EFB28683044C0 -:10AB00002860E7E72DE9F8439846089C91460D46F2 -:10AB1000060001D0012000E000208DF8000023464F -:10AB200042464946684605F077FA070006D17EB1ED -:10AB30002068A8EB0001A94202D20920BDE8F883F1 -:10AB400048442A463146F8F777FB206828442060BD -:10AB50003846F3E7184810B50178427801F00F0144 -:10AB6000FF2A16D8154B5B7A032B01D0042B01D199 -:10AB700002290ED831B101290DD002290DD00329A7 -:10AB80000DD006E00E49801CF8F77AFB08B90120C9 -:10AB900010BD002010BD0F2302E0552300E0FF236D -:10ABA000002105E04418A4789C42F2D1491CC9B2A6 -:10ABB0009142F7D3EBE7000014CD002088B30020CA -:10ABC000C000030070B5084C050009D0103421689E -:10ABD000002907D008682060496828468847F6E7BA -:10ABE0000834F4E770BD000018CE0020054A0121AA -:10ABF00020B1012805D19170FFF7E4BF517000200A -:10AC0000FAE7704718CE00202DE9F05F264841682A -:10AC1000F1B3DFF898B00E688146DBF80040876832 -:10AC20008078E11B21F07F45ED1CB0B9DFF8808012 -:10AC30004FF48030C8F84403C8F804031120F8F733 -:10AC400075FB1120F8F77DFB4FF0010AC8F800A052 -:10AC50002F2003F00BFA89F802A0B54200D2354646 -:10AC6000124BE8193C3320F07F401860DBF80010ED -:10AC70005A46091B21F07F41001B20F07F40C91C70 -:10AC800081420FD9106818602F2003F0EFF900E01F -:10AC900004E0BDE8F05F1120F8F75EBBBDE8F05FAF -:10ACA00003F00ABFBDE8F09FFCB30020041501408B -:10ACB000001001402DE9F8438846116881460025BF -:10ACC000089E1C4617464046414502D10920BDE872 -:10ACD000F88301466B46484605F071F99DF800007F -:10ACE000012803D078B10B252846F0E74CB1236842 -:10ACF0003BB1002EF8D03A4641464846B04705469B -:10AD0000F2E70E20E3E7002CEED000202060EBE716 -:10AD1000F0B41C6806460020049D671C974202D9C7 -:10AD20000920F0BC7047002E03D000BF4FF0010790 -:10AD300001E04FF000070F551C6804F101041C608E -:10AD4000EFD0002DEDD03046AC46F0BC604700009F -:10AD5000034610B504200D4A002100BFC1EB0114C9 -:10AD600004EB840402EB8404A4781CB1491C082978 -:10AD7000F4D310BDC1EB011404EB840402EB840294 -:10AD8000012090700020196010BD000094CF0020B9 -:10AD9000034610B505200C4A002100BFC1EB011489 -:10ADA00004EB840432F824409C4208D1C1EB011129 -:10ADB00001EB810102EB81010020887010BD491C6C -:10ADC0000829EBD310BD000094CF002070B50446D5 -:10ADD00005200B4B002200BFC2EB021505EB8505D9 -:10ADE00033F82560A64204D103EB8505AD78012D2B -:10ADF00003D0521C082AEFD370BD00200A6070BD3A -:10AE000094CF002000200749024600BFC0EB00138A -:10AE100003EB830301EB8303401C9A700828F5D3EE -:10AE20007047000094CF002010B50C467C2801D953 -:10AE3000002010BD024802F08BFC10C010BD0000C5 -:10AE400064050300011F014802F0A4BC640503006F -:10AE5000014802F0B7BC000064050300034610B5CA -:10AE600004200E4A002100BF01EB410404EB011451 -:10AE700002EB8404A4781CB1491C0829F4D310BD4A -:10AE800001EB410000EB011002EB80000124847013 -:10AE900000F10C0242600020196010BDF4DC0020BB -:10AEA000034610B505200C4A002100BF01EB410408 -:10AEB00004EB011432F824409C4209D101EB410318 -:10AEC00003EB011102EB810100208870486010BD86 -:10AED000491C0829EAD310BDF4DC002070B50446F3 -:10AEE00005200B4B002200BF02EB420505EB0215CB -:10AEF00033F82560A64204D103EB8505AD78012D1A -:10AF000003D0521C082AEFD370BD00200A6070BD28 -:10AF1000F4DC002000200749024600BF00EB40039C -:10AF200003EB001301EB8303401C9A700828F5D350 -:10AF300070470000F4DC002070B5C6B01C46154612 -:10AF4000D8B1D5B1CCB10E4A40921646F822ADF830 -:10AF50000E2141AA3E92CDF808D13EAB3FAAF8F7A8 -:10AF6000ADFE002807D1DDE93E10324669DF2246FA -:10AF70002946F8F72DFF46B070BD0E20FBE7000014 -:10AF800080B300207CB51C46154680B17DB174B1FC -:10AF9000084A01920092F8F7F1FF002806D16846AE -:10AFA00002F0A6FE22462946F8F7F7FF7CBD0E20E8 -:10AFB0007CBD000080B300203EB51C46154688B11C -:10AFC00085B17CB101AA009289B26A46F9F7F7F916 -:10AFD000002806D100986DDF22462946009BF9F72C -:10AFE0000DFA3EBD0E203EBD3EB51C46154678B15D -:10AFF00075B16CB101AA00926A46F9F731FA0028DE -:10B0000005D100986CDF22462946F9F74BFA3EBD80 -:10B010000E203EBD70B596B01C4615460E4610B3C8 -:10B020000DB304B306A902911F210EAA8DF80C10CE -:10B0300004928DF8141005AA04A9CDE9001203ABFF -:10B0400002AA3146F9F797FA00280AD19DF8143080 -:10B050009DF80C10049A029872DF22462946F9F7EF -:10B06000B9FA16B070BD0E20FBE730B589B01C46AA -:10B070001546A8B1A5B19CB106AA039202AA0092F6 -:10B0800001AB6A46F9F7EEFA002807D19DF80410E3 -:10B09000009873DF22462946F9F718FB09B030BD46 -:10B0A0000E20FBE730B41D46144638B134B12DB143 -:10B0B00074DF2A46214630BCF9F70EBB30BC0E20A7 -:10B0C00070477CB51C46154688B185B17CB101AA94 -:10B0D000009289B26A46F9F705FB002806D100986C -:10B0E00079DF22462946009BF9F71EFB7CBD0E2026 -:10B0F0007CBD38B51C46154670B16DB164B16A4669 -:10B10000F9F748FB002806D1BDF8000078DF224699 -:10B110002946F9F75EFB38BD0E2038BD30B589B041 -:10B120001C461546C0B1BDB1B4B104AA019201AA32 -:10B13000009289B203AB02AAF9F751FB002809D1AA -:10B140009DF80C10BDF80800019A80DF22462946C0 -:10B15000F9F788FB09B030BD0E20FBE77FB51C4630 -:10B16000154698B195B18CB102AA00926B4601AA1E -:10B17000F9F77EFB002807D1BDF8040000997EDFB7 -:10B1800022462946F9F7A6FB04B070BD0E20FBE766 -:10B190007FB51C46154698B195B18CB102AA0092B4 -:10B1A0006B4601AAF9F716FC002807D1BDF8040088 -:10B1B000009975DF22462946F9F73EFC04B070BDC0 -:10B1C0000E20FBE73EB51C46154698B195B18CB1F3 -:10B1D00002AA00926B4601AAF9F784FC002808D164 -:10B1E000BDF80400009987DF23462A460099F9F745 -:10B1F000A5FC3EBD0E203EBD30B58DB01C461546AB -:10B20000F0B1EDB1E4B106AA029208AA03920AAA2B -:10B21000049205AB04AACDE9002303AB02AAF9F717 -:10B220000BFD00280AD10DF1080C9DF814309CE8A4 -:10B2300007008CDF22462946F9F752FD0DB030BDDC -:10B240000E20FBE730B41D46144638B134B12DB1A1 -:10B250008DDF2A46214630BCF9F7E8BC30BC0E2011 -:10B26000704730B589B01C461546D0B1CDB1C4B1D8 -:10B2700004AA029206AA019201AA009289B202AB24 -:10B2800003AAF9F7A3FD002809D1DDE90121BDF8E2 -:10B290000C0090DF22462946019BF9F7D1FD09B049 -:10B2A00030BD0E20FBE70000F0B5E3B01C461546AC -:10B2B0008E4660B35DB354B3002201AE4FAB2FAFE7 -:10B2C0000DF5B471C2EBC20C0CEB021CB44443F894 -:10B2D00022C007EB021C41F822C0521CD2B2082A3D -:10B2E000F0D3CDE9573159A9009158AB57AA71460F -:10B2F000F9F7DCFD002808D1DDE957019DF864214C -:10B300006FDF22462946F9F74FFE63B0F0BD0E20ED -:10B31000FBE730B5C3B01C461546B0B1ADB1A4B122 -:10B3200001AA3F9241AA409240AB3FAAF9F742FEE0 -:10B33000002808D1DDE93F017DDF0094DDE93F12FF -:10B340002B46F9F767FE43B030BD0E20FBE730B562 -:10B35000C3B01C461546D8B1D5B1CCB142AA3F9274 -:10B3600001AA4092F822ADF8042141AA009240AB14 -:10B370003FAAF9F791FE002808D1BDF80421DDE9C4 -:10B380003F017CDF22462946F9F7BCFE43B030BDC1 -:10B390000E20FBE77CB51C46154688B185B17CB113 -:10B3A00001AB6A46F9F7B4FE002808D19DF80410F5 -:10B3B000BDF8000076DF22462946F9F7D3FE7CBDB2 -:10B3C0000E207CBD30B58DB01C461546C8B1C5B148 -:10B3D000BCB109AA019204AA029202AA009289B2FF -:10B3E00001AB03AAF9F752FF002808D1DDE90112E9 -:10B3F000BDF80C0085DF22462946F9F78BFF0DB01A -:10B4000030BD0E20FBE77CB51C46154688B185B1E2 -:10B410007CB101AB6A46FAF715FE002808D19DF809 -:10B420000410BDF8000082DF22462946FAF734FEF8 -:10B430007CBD0E207CBD30B58BB01C46154698B146 -:10B4400095B18CB102AA00926B4601AAFAF72AFEC6 -:10B45000002807D1BDF80400009981DF2246294663 -:10B46000FAF750FE0BB030BD0E20FBE730B59FB0B1 -:10B470001C461546C8B1C5B1BCB114AA019203AAB5 -:10B48000029201AA009202AB13AAFAF74DFE00281D -:10B4900009D1DDE90121BDF84C0083DF23462A46AE -:10B4A0000199FAF781FE1FB030BD0E20FBE730B5E1 -:10B4B00099B01C461546C0B1BDB1B4B104AA019201 -:10B4C0000EAA029202AA009201AB03AAFAF7A2FE08 -:10B4D000002808D1DDE90112BDF80C0084DF224606 -:10B4E0002946FAF7D7FE19B030BD0E20FBE73EB56E -:10B4F0001C46154690B18DB184B102AA00926B46EC -:10B5000001AAFBF779F8002807D1BDF804000099DB -:10B510008FDF22462946FBF7A1F83EBD0E203EBD37 -:10B520003EB51C46154688B185B17CB101AA009292 -:10B5300089B26A46FBF7C8F8002806D100987BDF7D -:10B5400022462946009BFBF7E3F83EBD0E203EBD98 -:10B550003EB51C46154678B175B16CB101AA009292 -:10B560006A46FBF70BF9002805D100987ADF2246DE -:10B570002946FBF727F93EBD0E203EBD30B587B00A -:10B580001C461546A0B19DB194B101AA009203AA30 -:10B59000029289B26A46FBF71BF9002806D100988F -:10B5A00071DF22462946009BFBF734F907B030BD16 -:10B5B0000E20FBE730B587B01C46154690B18DB123 -:10B5C00084B101AA009203AA02926A46FBF7ACF981 -:10B5D000002805D1009870DF22462946FBF7C6F9FE -:10B5E00007B030BD0E20FBE73EB51C461546A0B1A6 -:10B5F0009DB194B102AA009289B26B4601AAFBF7F1 -:10B60000BBF9002808D1BDF8040000998EDF22465E -:10B610002946009BFBF7E0F93EBD0E203EBD7FB5FD -:10B620001C461546B0B1ADB1A4B103AA009202AB5D -:10B6300001AAFBF707FA00280AD19DF80C209DF813 -:10B640000810BDF8040088DF22462946FBF733FACC -:10B6500004B070BD0E20FBE738B51C46154670B12E -:10B660006DB164B16A46FBF72CFA002806D1BDF82B -:10B67000000089DF22462946FBF742FA38BD0E203A -:10B6800038BD3EB51C46154678B175B16CB101AAFE -:10B6900000926A46FBF774FA002805D100988ADF09 -:10B6A00022462946FBF792FA3EBD0E203EBD30B43D -:10B6B0001D46144638B134B12DB18BDF2A462146E0 -:10B6C00030BCFBF789BA30BC0E20704730B595B05E -:10B6D0001C461546F0B1EDB1E4B108AA02920DAADC -:10B6E000039211AA049204AB03AACDE9002389B204 -:10B6F00002AB07AAFBF776FA002809D102A890E866 -:10B700000E00BDF81C0086DF22462946FBF7C0FA72 -:10B7100015B030BD0E20FBE72DE9F04188B01D4685 -:10B720001646884607003DD0DEB3D5B3002005900D -:10B7300006A8039005A8FFF70BFB002833D1059856 -:10B740002349C0EB001000EB800001EB8004201DBA -:10B7500004F1240202906260059A04ABC2EB02126B -:10B7600002EB820201EB820101F14002A26017327A -:10B77000E26010322261413262611C324261173252 -:10B78000EB31C0E9062102A903A8CDE90001224658 -:10B7900041463846FBF786FB002804D1029828B1C1 -:10B7A00009E0FFE70E2008B0BDE8F0812088FFF730 -:10B7B000EFFA0028F7D1DDE9023220889DF8101059 -:10B7C0007FDF2A463146029BFBF7BCFBEBE700001C -:10B7D00094CF002038B51C46154670B16DB164B1E8 -:10B7E0006A46FBF7ABFC002806D19DF9000077DF25 -:10B7F00022462946FBF7C1FC38BD0E2038BD0000AB -:10B80000F0B599B01C4615460E4600B3FDB1F4B133 -:10B8100000226B460DF13801C2EBC2071F4441F80C -:10B820002270521CD2B2082AF6D3169117AB16AA70 -:10B830003146FBF7A9FC002807D19DF85C1016984B -:10B840006EDF22462946FBF7EDFC19B0F0BD0E2055 -:10B85000FBE73EB51C461546A8B1A5B19CB1002337 -:10B86000029302AB009301AA89B26B46FBF792FDEB -:10B87000002807D1BDF80400009998DF2246294628 -:10B88000FBF7BAFD3EBD0E203EBD30B587B01C466D -:10B890001546D8B1D5B1CCB10022049204AA0192C8 -:10B8A00005AA029202AA009289B201AB03AAFBF791 -:10B8B000E9FD002808D1DDE90112BDF80C0099DF8F -:10B8C00022462946FBF722FE07B030BD0E20FBE7DB -:10B8D00030B58BB01C461546D8B1D5B1CCB104AB50 -:10B8E00001930B23ADF8083002AB009303AA89B291 -:10B8F00001ABFBF711FE002809D1BDF80820BDF807 -:10B900000C0001999BDF22462946FBF737FE0BB05E -:10B9100030BD0E20FBE73EB51C46154698B195B1EB -:10B920008CB102AA009289B26B4601AAFBF72CFEE9 -:10B93000002807D1BDF80400009996DF2246294669 -:10B94000FBF750FE3EBD0E203EBD3EB51C461546E3 -:10B9500098B195B18CB102AA009289B26B4601AA46 -:10B96000FBF768FE002807D1BDF80400009997DFB7 -:10B9700022462946FBF78CFE3EBD0E203EBD7CB51F -:10B980001C46154690B18DB184B189B201AB6A46AF -:10B99000FCF7E1FB002808D1BDF80410BDF8000059 -:10B9A0009EDF22462946FCF7FEFB7CBD0E207CBDB7 -:10B9B0007CB51C46154688B185B17CB16A4601ABA1 -:10B9C000FCF727FC002808D1BDF80410BDF80000E2 -:10B9D0009DDF22462946FCF744FC7CBD0E207CBD41 -:10B9E00030B585B01C461546C0B1BDB1B4B104AA8E -:10B9F000019201AA009289B203AB02AAFCF752FCA1 -:10BA0000002809D1BDF80C10BDF80800019A94DF98 -:10BA100022462946FCF77EFC05B030BD0E20FBE730 -:10BA20007FB51C461546B8B1B5B1ACB103AE01AA9D -:10BA300002AB89B20096FCF773FC00280AD1BDF86E -:10BA40000C20BDF80810BDF804009ADF22462946F4 -:10BA5000FCF79AFC04B070BD0E20FBE73EB51C4617 -:10BA6000154698B195B18CB102AA009289B26B4685 -:10BA700001AAFCF78FFC002807D1BDF8040000994B -:10BA800095DF22462946FCF7B3FC3EBD0E203EBDA5 -:10BA900030B5C3B01C461546E0B1DDB1D4B10023CA -:10BAA0003F9340933FAB3D93F423ADF802313EAA60 -:10BAB000CDF804D189B23DABFCF7EEFC002807D1EC -:10BAC000BDF8F8003D999CDF22462946FCF712FD9F -:10BAD00043B030BD0E20FBE730B587B01C4615469D -:10BAE000D8B1D5B1CCB104AA019205AA029201AA9B -:10BAF000009202AB03AAFCF703FD00280BD1DDE99D -:10BB00000121BDF80C00ACDF0199009122462946C5 -:10BB1000029BFCF72BFD07B030BD0E20FBE770B594 -:10BB2000ADF58E6D1C4615460E46F0B3EDB3E4B38D -:10BB300002AACDF830240DF58962CDF838241032F0 -:10BB4000CDF83C24121DCDF84024121D4FF4007195 -:10BB5000CDF84424ADF83614343ACDF80C24ADF8C1 -:10BB60002014383282A9CDF81824CDF82814121DDB -:10BB70000DF58361CDF81C24CDF810143831CDF8C3 -:10BB800008144039603ACDE900120B1F0A1D3146F6 -:10BB9000FCF7E8FE00280FD10DF20C41BDF81404AB -:10BBA00006C9DDF80834A2DF00E008E02246294695 -:10BBB000DDF80834FCF71CFF0DF58E6D70BD0E200E -:10BBC000FAE730B5ADF50D7D1C46154620B31DB323 -:10BBD00014B384AA829289AA84928AAA859201AA1D -:10BBE00088924FF40072ADF818228BAA819281AA34 -:10BBF000009282AB83AAFCF739FF002809D1DDE966 -:10BC00008121BDF80C02A3DF22462946819BFCF767 -:10BC100067FF0DF50D7D30BD0E20FAE77CB51C46A3 -:10BC2000154690B18DB184B16A4601AB89B2FDF77A -:10BC30002DFA002808D1BDF80410BDF80000ADDFD2 -:10BC400022462946FDF74AFA7CBD0E207CBD70B520 -:10BC5000ADF5087D1C4615460E46D0B1CDB1C4B138 -:10BC60004FF4007282ABADF818228093694686AA21 -:10BC7000CDE9842180AB81AA3146FDF771FA002815 -:10BC800008D1BDF804028099A6DF809929B18B689C -:10BC900004E00E200DF5087D70BD002322462946E4 -:10BCA000FDF78CFAF6E730B585B01C461546C8B1ED -:10BCB000C5B1BCB104AA019201AA009289B203AB3A -:10BCC00002AAFDF7B1FA00280AD1BDF80C10BDF8A0 -:10BCD0000800019AA1DF22462946019BFDF7DAFA06 -:10BCE00005B030BD0E20FBE77CB51C46154680B183 -:10BCF0007DB174B101AA00926A46FDF701FB0028EC -:10BD000006D10098ABDF22462946009BFDF718FBC1 -:10BD10007CBD0E207CBD30B5ADF5077D1C461546BB -:10BD2000D0B1CDB1C4B182AA80924FF40072ADF807 -:10BD30001222CDF814D280AB81AAFDF757FB002860 -:10BD400007D1BDF804028099A8DF22462946FDF7F5 -:10BD50007BFB0DF5077D30BD0E20FAE730B587B0CF -:10BD60001C461546D8B1D5B1CCB10022049204AA24 -:10BD7000029205AA019201AA009202AB03AAFDF762 -:10BD800069FB002809D1DDE901219DF80C00A0DF45 -:10BD900022462946019BFDF797FB07B030BD0E20D8 -:10BDA000FBE77FB51C461546B0B1ADB1A4B103AAFF -:10BDB000009202AB01AAFDF7BDFB00280AD1BDF835 -:10BDC0000C20BDF80810BDF80400A7DF2246294664 -:10BDD000FDF7E4FB04B070BD0E20FBE730B5ADF518 -:10BDE000077D1C46154618B315B30CB302AA829200 -:10BDF0004FF40072ADF8182286AA839285AB83AA0D -:10BE0000CDE9002382AB84AAFDF7CEFB00280CD13C -:10BE1000DDE98212BDF81002859BAADF83990091AB -:10BE200022462946829BFDF701FC0DF5077D30BDBA -:10BE30000E20FAE730B5ADF5077D1C461546F8B182 -:10BE4000F5B1ECB102AA82924FF40072ADF80C2267 -:10BE500085AB83AACDE9002382AB84AAFDF728FC39 -:10BE600000280AD1BDF80C22BDF81002859B8299EA -:10BE7000A9DF22462946FDF750FC0DF5077D30BDB0 -:10BE80000E20FAE730B5ADF5077D1C461546E0B14A -:10BE9000DDB1D4B184AA819201AA859281AA0092CF -:10BEA00089B283AB82AAFDF73EFC00280AD1BDF817 -:10BEB0000C12BDF80802819AA5DF22462946819B13 -:10BEC000FDF782FC0DF5077D30BD0E20FAE700007E -:10BED00030B5ADF5077D1C461546F8B1F5B1ECB1AE -:10BEE0000F4A89B283AB1268849201AA859284AA10 -:10BEF000819281AA009282AAFDF79CFC00280AD1B7 -:10BF0000BDF80C12BDF80802819AA4DF224629462A -:10BF1000819BFDF7C7FC0DF5077D30BD0E20FAE7CC -:10BF2000F8FF020030B589B01C46154680B17DB1DE -:10BF300074B102AA019289B201AB04AAFEF7DBF93F -:10BF4000002806D10498212805D0222808D105E030 -:10BF50000E2009B030BD07A9039101E005A90291A7 -:10BF6000019968DF0199009122462946049BFEF75A -:10BF7000F3F9EEE7F0B587B01D4616460C4607000C -:10BF800013D096B18DB14FF0FF300090A1B26A4648 -:10BF90003846FEF753FA002808D102A8019000980D -:10BFA000212805D0222808D105E00E2007B0F0BDD9 -:10BFB00006A8039001E004A80290A1B201AB6A4672 -:10BFC0003846FEF751FA0028F0D1DDE9000167DFBD -:10BFD0002A463146FEF7C2FAE8E7000030B585B0E0 -:10BFE0001C46154658B355B34CB303AA019201AB96 -:10BFF0006A46FEF709FB00281FD10198A8B102A8E4 -:10C00000FEF72CFF002818D10298BDF8002000EBA5 -:10C01000400101EB00110B4820F82120019A00EBB0 -:10C02000810092880281001D01900146BDF8000048 -:10C0300066DF22462946FEF719FB05B030BD0E200B -:10C04000FBE70000F4DC002030B589B01C46154643 -:10C05000E0B1DDB1D4B110228DF8082004AA03921A -:10C0600008AA019201AA009203AB02AAFEF71CFBE8 -:10C07000002809D19DF80800019A039963DF224640 -:10C080002946019BFEF73CFB09B030BD0E20FBE7C3 -:10C0900030B58BB01C46154618B315B30CB310223F -:10C0A0008DF8102004AA029205AA019209AA03920F -:10C0B0000022099201AA009289B202AB03AAFEF7FC -:10C0C00055FB00280BD1DDE90210019A64DF0199CC -:10C0D00000919DF8103022462946FEF78FFB0BB0E9 -:10C0E00030BD0E20FBE730B587B01C461546B0B119 -:10C0F000ADB1A4B102AA019206AA009289B26B4620 -:10C1000001AAFEF7E9FB002807D1DDE9001062DF94 -:10C1100022462946009BFEF715FC07B030BD0E20D5 -:10C12000FBE73EB51C46154688B185B17CB101AA36 -:10C13000009289B26A46FEF73BFC002806D10098BF -:10C1400065DF22462946009BFEF754FC3EBD0E20CB -:10C150003EBD30B58DB01C46154688B185B17CB169 -:10C16000CDF830D00CAA00F0E9FB002806D10C98DD -:10C1700043DF224629460C9B00F002FC0DB030BD87 -:10C180000E20FBE7F0B480B17AB173B105780B4EA5 -:10C19000002400BF16F83470AF4209D106EBC40486 -:10C1A000646844B1A446F0BC60470E20F0BC704700 -:10C1B000641C502CEED30620F8E70000C8010300F1 -:10C1C00030B587B01C461546E8B1E5B1DCB106AA2A -:10C1D000029202AB03AACDE9002389B204AB05AAFF -:10C1E000FDF7C4FB00280CD1BDF80C20BDF81010E1 -:10C1F000BDF81400029BB4DF22462946029BFDF7DE -:10C20000F3FB07B030BD0E20FBE77CB51C4615469E -:10C2100090B18DB184B189B201AB6A46FDF71AFCC9 -:10C22000002808D1BDF80410BDF80000B1DF224697 -:10C230002946FDF737FC7CBD0E207CBD30B587B0AC -:10C240001C461546C0B1BDB1B4B104AA019201AA01 -:10C25000009289B203AB02AAFDF753FC002809D172 -:10C26000BDF80C10BDF80800019AB2DF224629463D -:10C27000FDF79FFC07B030BD0E20FBE730B589B05D -:10C280001C461546D0B1CDB1C4B103AA019205AA8E -:10C29000029202AA009289B201AB04AAFDF7B2FC95 -:10C2A000002809D1DDE90112BDF81000B0DF2246F7 -:10C2B0002946019BFDF7ECFC09B030BD0E20FBE7E1 -:10C2C00030B587B01C461546C0B1BDB1B4B104AAA3 -:10C2D000019201AA009289B203AB02AAFDF736FDD2 -:10C2E000002809D1BDF80C10BDF80800019AB3DF91 -:10C2F00022462946FDF796FD07B030BD0E20FBE72C -:10C3000010B540B13AB133B189B202F005FB002853 -:10C3100000D132DF10BD0E2010BD7CB51C46154685 -:10C3200080B17DB174B101AA00926A4603F0AAF906 -:10C33000002806D1009849DF22462946009B03F0D9 -:10C34000C1F97CBD0E207CBD38B54A7A0F4B62B175 -:10C3500000220A725969002906D001228DF80020B6 -:10C36000ADF802006846884738BD0A7A62B19B681A -:10C370004C68024619462046F7F786FB0028F3D0A2 -:10C38000BDE8384002F0A8BC5B68F1E7F8CC0020BB -:10C390002DE9FC430024099E1D4617468846814628 -:10C3A000ADF800408DF8044056B14DB1286838B161 -:10C3B0003968A8EB0100032804D20920BDE8FC83FA -:10C3C0000E20FBE76B464146484603F091FD30885E -:10C3D000BDF80010884201D20C20EFE701AB3A46CD -:10C3E0004146484603F0EBFD9DF8040008B10024E7 -:10C3F0000EE0BDF8000030802C600EE028683A4660 -:10C4000000EB44034146484603F072FD641CA4B2AD -:10C41000BDF800008442F1D334800020CEE710B58F -:10C42000044612B11088002211E04FF6FF70FAE7BF -:10C43000030A43EA0023A05C5840C0F303135840AA -:10C4400080EA003080B2C3B280EA4310521C8A42B4 -:10C45000EED310BD2DE9F05F884C0E46174614F858 -:10C46000381F02F03F0201F0C00111434AC414F822 -:10C470003B2C443C032A01D0042A03D1032B01D1D5 -:10C48000FF22E2630125A5724FF00008A4F80E8098 -:10C49000227862B14FF0030A4FF0040948B1032833 -:10C4A0004AD0012A51D0E5810220BDE8F09F052045 -:10C4B000FBE700F0DFF956B1012E11D0022E14D0A7 -:10C4C000032E23D0042E24D0052E25D0A9E0002F42 -:10C4D00055D1C4F8388084F809A084F80580A7E015 -:10C4E000032F4CD8B801A063A2E0012F02D0022F85 -:10C4F00045D104E084F809A084F8058002E084F8BE -:10C5000009906571BDE8F05F02F02EBA012F36D8B0 -:10C510008EE0A7BB06200BE04FF4FF7047B144F25A -:10C520009021012F06D0022F02D0032F79D101E0F4 -:10C53000E0817DE0E1817BE0012AB4D0A08940F474 -:10C540000040E08100F096F972E0032B04D0272E22 -:10C5500002D9E5810120A8E74246A4F80C80012811 -:10C5600002D002280CD063E040F201114448F6F7F3 -:10C570007CFE012002F052FA84F8009058E050E06E -:10C58000E36BFF2B04D0FF2902D9E58103208CE760 -:10C590003B48DFF8F0B04FF002084170022B14D096 -:10C5A00003DC3BB1012B3CD10BE0032B1DD0FF2B57 -:10C5B00037D11EE000F8022B0A463349F6F73CFE5D -:10C5C00008E000F8025B0F2202E000F8028B55221F -:10C5D000F6F744FE002002F021FA627A0020A16BF7 -:10C5E000042A27D0032A27D027E000F8029BFF2245 -:10C5F000EEE7304637B1012F04D0022F0ED0032FC3 -:10C6000016D111E0002002F009FA00F041F8CBF851 -:10C610000052CBF8005084F800A009E000F0BAF80E -:10C6200004E0E581042040E700F0A4F80028F8D0F9 -:10C6300000203AE7582000E0502000EBC101042A16 -:10C6400000D149080020F93140F27122401C4243D8 -:10C650009142F9D840F271214843A169C1F84005DF -:10C660000A4801F5A0710160011DC1F800B007483A -:10C670000C38056084F80080DAE7000088B30020F9 -:10C6800014CD002000100040C000030010F5014050 -:10C6900002494FF4007008607047000050160040D7 -:10C6A000034900238A7A8B72C9890160104670475A -:10C6B00088B300204AB1012A0BD0022A0DD0032AE8 -:10C6C0000FD0042A11D0002070470B4A02600820C6 -:10C6D0000EE00A4A026009200AE0094A02600A20C4 -:10C6E00006E0084A02601A2002E0074A02601B20A6 -:10C6F000087001207047000000800040009000405A -:10C7000000A0004000A0014000B0014010B503F0BF -:10C7100019F810B902F028F908B1042010BD064834 -:10C72000002101228172027081630448016841F096 -:10C7300010010160002010BD88B3002010ED00E062 -:10C7400078B104280DD0D8280BD0EC2809D0F028D7 -:10C7500007D0F42805D0F82803D0FC2801D00328FE -:10C7600003D1032903D0042901D0042070470020FD -:10C770007047000006490978012901D90020704757 -:10C7800003490246491C01F11700FFF793BF00005F -:10C7900088B3002040B210F0300F01D040F0C0004C -:10C7A000044940B20A78012A01D900207047486143 -:10C7B0000120704788B300202DE9F341002684B0A2 -:10C7C0003746344604A803F021FA002818D1FFF7B1 -:10C7D0009DFFA0B9DFF8948000F064F80546244876 -:10C7E0006946012290F800C018F80C301BB1001DFA -:10C7F00001F072FE02E00C3001F0E0FC18B1032001 -:10C8000006B0BDE8F08157B119485C380068304483 -:10C81000A84206D29DF800002E460402DCE701275C -:10C82000F8E79DF8000000270443A00BC4F305219E -:10C83000C4F3850204F00303FFF70CFE02A8FFF720 -:10C840002FFF0028C8D002980122000A8DF80400AA -:10C8500001A9074801F0C4F802988DF804000122EC -:10C8600001A9034801F0BCF8B6E70000CCB30020F2 -:10C870007CB4002010B500F013F8074801240460D0 -:10C880000549002008310860091D086002F0F6F82B -:10C890000248047010BD000008F5014088B3002074 -:10C8A000704700002DE9F0471F48016841F0100172 -:10C8B00001601E4D0127DFF878801E4C40F20119FF -:10C8C000002600BFD5F80C01B0B1C5F80C610120FD -:10C8D000F6F721FD207804280ED16F60D8F800000B -:10C8E000012805D1FEF736F910B1A089401CA081BE -:10C8F00049461148F6F7B9FCA069D0F8401111B1CA -:10C90000C0F84061DEE7D0F844010028DAD0A06921 -:10C91000C0F8446194F90100F6F7FDFC2069401C61 -:10C920002061BDE8F087000010ED00E0001000403D -:10C930000014004088B3002014CD00201CB50C4624 -:10C9400040B12CB100210191037801A9432B03D000 -:10C9500007201CBD0E201CBD01230193074B009333 -:10C9600013460A462146FEF7A5F90028F3D101989F -:10C97000A04201D009201CBD00201CBD21DA02000C -:10C980002DE9FF4184B0984614460F0019D0C4B178 -:10C99000002001902568432001AE8DF80800334641 -:10C9A0002A4602A803F038FB00280BD133462A465A -:10C9B000394604A803F0EDFA002803D1049870B9B1 -:10C9C00003E00E2008B0BDE8F08107480090334630 -:10C9D0002A4639464046FEF79BF90028F2D10198D5 -:10C9E00020600020EEE7000059DA02000E4910B581 -:10C9F0000A784C780023A24212D0521CD2B20A709C -:10CA0000022A00D10B70084A0B780C3252F823200E -:10CA100002608868104420F07F408860012010BDCB -:10CA20000360002010BD0000FCB30020034890F814 -:10CA30003400401C00F0070070470000B4B4002030 -:10CA400030B4029C1CB113B1A44630BC604730BC6A -:10CA50000E20704730B4029C1CB113B1A44630BC08 -:10CA6000604730BC0E20704730B4029C1CB113B13B -:10CA7000A44630BC604730BC0E20704730B4029CE6 -:10CA80001CB113B1A44630BC604730BC0E207047C7 -:10CA900030B4029C1CB110B1A44630BC604730BC1D -:10CAA0000E20704730B4029C1CB110B1A44630BCBB -:10CAB000604730BC0E20704730B4029C1CB110B1EE -:10CAC000A44630BC604730BC0E20704730B4029C96 -:10CAD0001CB110B1A44630BC604730BC0E2070477A -:10CAE00030B4029C1CB110B1A44630BC604730BCCD -:10CAF0000E20704730B4029C1CB110B1A44630BC6B -:10CB0000604730BC0E20704730B4029C1CB110B19D -:10CB1000A44630BC604730BC0E20704730B4029C45 -:10CB20001CB110B1A44630BC604730BC0E20704729 -:10CB300030B4029C1CB110B1A44630BC604730BC7C -:10CB40000E2070472DE9F84F0746007801265B4C10 -:10CB50004FF6FF724FF603494FF0000E01280ED03A -:10CB6000022873D18DF800E06846F6F7E1FFA0785F -:10CB700000286CD001286BD0022868D18FE0B968FA -:10CB8000BB890D7888885FEA951C00D0104691F823 -:10CB900001C091F80380654491F802C047F6043B58 -:10CBA000C444654415F0FF0F47F6025A12D14845B8 -:10CBB00001D0584506D1072B00D01046897911299C -:10CBC00008D108E047F60161884201D0504501D103 -:10CBD000062B00D01046804675468DF800E068466A -:10CBE000F6F7A6FFA8F5F640043838D0B0F5FF7F79 -:10CBF0001AD0A0F50070FD3805D000F5FF70B0F533 -:10CC0000004F33D119E0A4F80CA0A078032805D177 -:10CC1000A6702563656325706570E57000F050F8B7 -:10CC2000012000F099FA21E0A07801281ED102200D -:10CC3000A070A4F80C90A57218E0A078012815D077 -:10CC4000A07A30B1A4F80CB0E67004E033E02EE036 -:10CC50001FE0A4F80C9000F033F8A67206E0A0786C -:10CC6000022803D10320A070267066709DF8000092 -:10CC7000F6F782FFB86802F087FBA07803281AD184 -:10CC8000E078002817D000F07BFBBDE8F84F00F0FB -:10CC90009BB947F60160A08100F012F804E0A4F807 -:10CCA0000C9000F00DF8A672012000F055FA9DF8E6 -:10CCB0000000F6F761FFBDE8F88F0000B4B4002073 -:10CCC0002DE9F041244D002488B0A5F12C002C70F2 -:10CCD000818947F60160A046A5F11806814203D07C -:10CCE00047F60250814205D11B490224183903F04E -:10CCF0000BF90EE04FF603401127814203D047F6AF -:10CD00000430814205D114490324183903F0FCF89A -:10CD1000B7700F2040EA0410691C03F0F5F80E48C4 -:10CD200000F054FBE8700420ADF80800019503966C -:10CD3000ADF81040CDF81880ADF81C8006AA03A904 -:10CD400001A802F03FFB002802D00020F6F782FD88 -:10CD500008B0BDE8F0810000E0B4002030B5234CFD -:10CD600087B004F1240594F8340094F8301040EAB8 -:10CD7000C10040F0C0002870608A0E2141EA001016 -:10CD800080B2691C03F0C0F8284600F01FFBE87071 -:10CD9000002204212846FFF742FBADF800006A4656 -:10CDA000618AE069FFF73BFBADF8000004F10E017A -:10CDB00003F0AAF804200195ADF80800E06903909B -:10CDC000608AADF8100004F10E0005900220ADF865 -:10CDD000180005AA03A901A802F0F4FA002802D05D -:10CDE0000020F6F737FD07B030BD0000B4B40020D6 -:10CDF000064890F83410491C002301F00701C36174 -:10CE0000416363F3070002F03FBA0000B4B40020AE -:10CE100010B5806802F0B8FA002804D0BDE81040D0 -:10CE20000020F6F717BD10BD38B5054600248DF873 -:10CE300000406846F6F77CFE29460D4800F0DCFE0F -:10CE400010B10020F6F706FD0A484179427A1142F6 -:10CE500008D044719DF80000F6F78EFEBDE838401A -:10CE600000F00AB89DF80000F6F786FE38BD000015 -:10CE70008C050300B4B4002010B586B05FF0000448 -:10CE80008DF8104004A8F6F753FE002269460A48C0 -:10CE900000F04CFE40B10949012048719DF8100096 -:10CEA000F6F76AFE06B010BD9DF81000F6F764FEB6 -:10CEB000684600F005F8E3E78C050300B4B40020F1 -:10CEC0002DE9F0413F4C0346204694F801C0028A08 -:10CED000C16B0327022601258069BCF1050F6BD2C7 -:10CEE000DFE80CF067032B445C00187801281CD1A4 -:10CEF0001879022819D19A6894F83070107800F0E7 -:10CF00000700874213D1A571E26398892082062821 -:10CF100002D80020F6F79EFC238A65F307009B1FCA -:10CF200063F30F0102F0B0F96670BDE8F0810420F0 -:10CF30006070084602F028FA14E01D78002DF4D144 -:10CF40001B79012BF1D130B1091D921FF6F774F94D -:10CF5000E06B02F019FA677094F83000401C00F0A2 -:10CF600007002063BDE8F041F6F730BC19780129CD -:10CF7000DBD11979012902D0022915D0D5E738B1C2 -:10CF8000931F66F30707014663F30F02384601E07B -:10CF900067F3070002F078F96570C6E71878012892 -:10CFA00002D118790128F7D09868BDE8F04102F065 -:10CFB000EBB9A0780328B8D1BDE8F0410020F6F71E -:10CFC00049BC0000B4B4002038B500248DF80040FE -:10CFD0006846F6F7ADFD0D4800F078FE0C494A7939 -:10CFE0004B7A1A4203D010B18878032804D09DF8F8 -:10CFF0000000F6F7C1FD38BD4C719DF80000F6F752 -:10D00000BBFDBDE83840FFF737BF00008C050300CB -:10D01000B4B400201FB502208DF8000000208DF868 -:10D0200004006846FFF78EFD05488178032905D185 -:10D03000C078002802D0684600F0D8F81FBD000074 -:10D04000B4B400207FB5434D04780121AB78EA7871 -:10D050007CB1012C1AD0022C17D18DF80010017868 -:10D060008DF80410416802910089ADF80C00E9B90F -:10D0700019E08DF8001000788DF80400032B04D11E -:10D08000002A02D0684600F0B1F87FBD8DF800108C -:10D0900000788DF80400032BF7D1002AF5D06846FC -:10D0A000FFF7C2FE7FBD0020F6F7D4FBBDF80C00F1 -:10D0B00010B90020F6F7CEFBBDF80C400298042C06 -:10D0C0003BD3407800F00F01052906D00A1E07D097 -:10D0D0000E290FD00F2A39D02FE002F06BFA7FBD56 -:10D0E000A878032802D1E8780028CBD1029802F072 -:10D0F0004BF97FBD029E042C1FD9327853061CD5F4 -:10D1000013061AD50E2918D11044B178F2781144BB -:10D11000084410F0FF0F10D100223046A11EFFF787 -:10D120007EF9311931F8021C884206D1A87803280B -:10D13000DCD1E8780028D9D0B1E7029802F024F9D0 -:10D140000028D6D00020F6F785FB7FBD6846FFF7A4 -:10D15000F9FC7FBDB4B4002030B50E494FF4003265 -:10D160000124C1F8082390B140F6CA0358430A4B82 -:10D17000C0EB40151D601D6805EB90001860CC6089 -:10D180000020C1F844010C60C1F8042330BD4C609C -:10D1900030BD000000A0004044A500401049092017 -:10D1A00008600F4900200C390860091D08600D480F -:10D1B0000121C1604160891EC0F808134FF400319D -:10D1C000C0F804134FF0E0210015C1F88002064BAF -:10D1D000402283F80024C1F80001002070470000BD -:10D1E00010A5004000A000400AE000E038B5054668 -:10D1F00000248DF800406846F6F79AFC29460D4851 -:10D2000000F0FAFC10B10020F6F724FB0A4801797F -:10D21000427A114208D004719DF80000F6F7ACFC88 -:10D22000BDE8384000F00AB89DF80000F6F7A4FC0D -:10D2300038BD000078050300B4B4002010B586B0F6 -:10D240005FF000048DF8104004A8F6F771FC00228E -:10D2500069460A4800F06AFC40B10949012008719A -:10D260009DF81000F6F788FC06B010BD9DF8100080 -:10D27000F6F782FC684600F005F8E3E7780503005E -:10D28000B4B400202DE9F0413C4D04460427287831 -:10D2900001264FF0050806286AD2DFE800F0660391 -:10D2A0001523355C207818B1012816D1207916E0B5 -:10D2B0002079002811D1FFF751FD0020FFF74CFF26 -:10D2C0000220C5F838802BE02078012805D120798C -:10D2D00028B90120FFF740FF2F70BDE8F081022838 -:10D2E0002DD0FAE720780128F7D120790028F0D056 -:10D2F0000228F2D1A06801F0FDFB00B30020FFF787 -:10D300002BFF85F800801AE0207801280AD0022837 -:10D31000E3D1A86B401EA86316D0FFF71FFD0320C2 -:10D320002870DAE720790228D7D1A06801F0E2FB63 -:10D3300028B10020FFF710FFFFF75AFD2E7020469E -:10D34000BDE8F041FFF764BD062262F30700EA6919 -:10D3500001F09AFF07E020780128BED1207900284B -:10D36000BDD1FFF745FD2E70B7E7A8780328B4D1EB -:10D37000BDE8F0410020F6F76DBA0000B4B400201B -:10D3800038B500248DF800406846F6F7D1FB0D480B -:10D3900000F09CFC0C490A794B7A1A4203D010B178 -:10D3A0008878032804D09DF80000F6F7E5FB38BD27 -:10D3B0000C719DF80000F6F7DFFBBDE83840FFF781 -:10D3C0003DBF000078050300B4B400200178427826 -:10D3D000807811440844C043401CC0B2704700002C -:10D3E000084A002101EB810332F82330834204D143 -:10D3F00001EB810002EB80007047491C0829F1D342 -:10D400000020704758CC002070B50D4604460068D7 -:10D410004FF4887100F0BDFD4FF49071206800F06A -:10D42000B8FD4FF49271206800F0B3FD4FF4A27183 -:10D43000206800F0AEFD20681249C0F8041320688F -:10D440006907000B40B2090E002806DA00F00F0051 -:10D4500000F1E02080F8141D03E000F1E02080F8E6 -:10D46000001420680121000B40B200F01F0291401F -:10D470004009800000F1E020C0F88012C0F80011DF -:10D4800070BD000010030200F0B58488A518944216 -:10D4900000D82246A41AC288D6189A4200D8134649 -:10D4A000D21A4B880788BB420CD34088834209D8E4 -:10D4B0008888A04206D3A84204D8C888904201D3E5 -:10D4C000B04201D90020F0BD0120F0BD0268134632 -:10D4D00002E08A4204D01268002AFAD10B6001608F -:10D4E00070472DE9FC471E460A9C17468846814630 -:10D4F0002588234602F00DFD002808D120883346F8 -:10D50000CDE900503A4641464846FDF7C9FABDE824 -:10D51000FC87FFB581B01D4616460A9C0746234688 -:10D520002A46314602A802F003FD002807D12B4607 -:10D5300032460094BDF808103846FDF7E3FA05B00E -:10D54000F0BD2DE9FC471E460A9C174688468146D9 -:10D550002578234602F03EFD002808D12078334686 -:10D56000CDE900503A4641464846FDF799FABDE8F4 -:10D57000FC87FFB581B01D4616460A9C0746234628 -:10D580002A46314602A802F047FD002807D12B4663 -:10D59000324600949DF808103846FDF7B3FA05B0FE -:10D5A000F0BD00002DE9F047394E002780463D468A -:10D5B000DFF8E090D6F804A057E003D00446D0F896 -:10D5C0001C8035E099F8002002EB4201521CD2B2D7 -:10D5D00089F8002009EBC10199F80230091D9A422F -:10D5E00001D189F8005048680A780446012A12D00F -:10D5F000022A02D0032A3BD108E002F031F900B13F -:10D600000127257434E00574C06900E070680028C3 -:10D61000F9D170602CE0207C50BB88686060C868DD -:10D62000A0600869E0604869A061F07800B16560B9 -:10D630006268B168184B501A20F07F40984202D2BD -:10D64000A168084406E0881AA16820F07F40814262 -:10D6500002D9081A206000E0256065600120A560FD -:10D6600020742046E56102F0DDF8B8F10000A4D195 -:10D6700099F8001099F801008142A3D117B9716897 -:10D68000514502D00120BDE8F0870020FBE70000F3 -:10D69000FCB300207CCE0020FFFF7F0027480168FC -:10D6A00041F0807101602648016841F0010101608C -:10D6B000012081078867234A0A214FF4FE70F6F79C -:10D6C00055F908B1F6F7C6F800F0E8F818B1852862 -:10D6D00001D0F6F7BFF8002000F0B2F8002000F00B -:10D6E00011F900BF00F096F80028FBD0164801F0B1 -:10D6F0008FFC08B1F6F7AEF800F05EFB08B1F6F764 -:10D70000A9F8F6F797F908B1F6F7A4F80F4801F071 -:10D710002DFC00BFF6F708F900F0AEFB28B1F6F7D4 -:10D7200051F9052801D900F0B1FB01F055FC08B111 -:10D73000F6F790F801F000F8ECE70000FCED00E0EF -:10D74000001000E02CB50020E9EE020039E70200ED -:10D7500038B5044600258DF800506846F6F7E8F91C -:10D7600021686268086890420ED9401E08600178FE -:10D77000238AE26801FB0325227A2168101AC0B2CD -:10D780000A79824200D208719DF80000F6F7F4F998 -:10D79000284638BD38B5054600208DF800000C46F7 -:10D7A0006846F6F7C5F9E868298A201AB0FBF1F156 -:10D7B0002A681068431C136001709DF80000F6F79A -:10D7C000DBF938BD10B530B1017A42680368891AB7 -:10D7D000C9B21A6006E00E2010BD03681A68541C16 -:10D7E0001C601170491EC9B2F7D200680021017196 -:10D7F000084610BD00F180400068002800D00120DC -:10D80000704708B500F18040002101600068009079 -:10D8100008BD000008B500F029FB30B1684641DFC3 -:10D820000098002800D0012008BD0448006800F0DE -:10D830000110B0F1011FF6D0002008BD0C0400401B -:10D84000F8B5154D04466878002648B114B16168F2 -:10D85000002088478DF800606846F6F769F913E004 -:10D860008DF800606846F6F763F924B10A4821464E -:10D870000830FFF72BFE686830B900F0F7FA08B1FE -:10D880003FDF01E000F0A2FB6868401C68609DF883 -:10D890000000F6F771F9F8BD18CE002070B50B4CFA -:10D8A000207808B185250FE00020A060606020612D -:10D8B000E060074800F096FB054600F0D7FA08B98B -:10D8C00000F06EFB01202070284670BD18CE0020AD -:10D8D000EDAB020038B500258DF800506846F6F72C -:10D8E00027F9074CE068401EE060E06810B900F0DE -:10D8F000AFFBA5709DF80000F6F73EF938BD0000BB -:10D9000018CE0020F8B5134D0446A878002648B17B -:10D9100014B16168012088478DF800606846F6F709 -:10D9200007F90EE08DF800606846F6F701F924B1BA -:10D93000084821461030FFF7C9FDE86808B900F033 -:10D9400061FBE868401CE8609DF80000F6F714F9F8 -:10D95000F8BD000018CE0020F0B505460478154843 -:10D9600089B0164640F82420124A0869121DA2F117 -:10D97000080742F82400487F385520226846F5F70A -:10D980005BFC04942878385C48B10EB10A4A00E088 -:10D9900000226946281D00F069FD09B0F0BD0EB1F6 -:10D9A000064A00E00022694605F10C0000F09CFBED -:10D9B000F3E70000D0B30020CDFD0200DDFB020044 -:10D9C00030B40378054CE35C1BB130BC001D00F0A3 -:10D9D00083BD30BC0C3000F0F1BB0000CCB30020A4 -:10D9E00030B40378054CE35C1BB130BC001D00F083 -:10D9F000F5BD30BC0C3000F075BC0000CCB300208D -:10DA000030B40378054CE35C1BB130BC001D00F062 -:10DA1000E5BD30BC0C3000F065BC0000CCB300208C -:10DA20002DE9F84316465FEA000813D096B18BB192 -:10DA300010271C460D46009702F0FBFA002807D17C -:10DA400004F11003324629464046009702F0F1FAED -:10DA5000BDE8F8830E20FBE708B549B143B138B102 -:10DA6000009313460A461021203002F0F8FA08BD50 -:10DA70000E2008BD70B541EA4201DDE904564FF0C1 -:10DA8000A04441EA830141EA052104EB800041EA18 -:10DA90000641C0F8001770BD70B541EA4201DDE9EA -:10DAA00004564FF0A04441EA830141EA052104EB0A -:10DAB000800041EA0641C0F8001770BD1CB5002186 -:10DAC00000910B4601220191FFF7D4FF1CBD1CB54C -:10DAD000002100910B4601220191FFF7DDFF1CBDE3 -:10DAE0001CB500220B46009211460192FFF7C2FFBF -:10DAF0001CBD1CB500220B46009211460192FFF797 -:10DB0000CBFF1CBD1CB5002100910B4601220191E9 -:10DB10001146FFF7AFFF1CBD1CB5002100910B465D -:10DB2000012201911146FFF7B7FF1CBD2DE9F84313 -:10DB30000446002790460E468DF800706846F5F7BB -:10DB4000F7FF204600F039F838B105279DF80000AE -:10DB5000F6F712F83846BDE8F88320680568B8F192 -:10DB6000000F05D10168204600F03FF821680860E9 -:10DB7000E268012A0CD0022A0ED0042A11D0606873 -:10DB8000082A13D005FB02013046F5F755FBDDE707 -:10DB90006068405D3070D9E7606830F8150030800B -:10DBA000D4E7606850F825003060CFE700EBC5018E -:10DBB000D1E90001C6E90001C8E7016808684968C1 -:10DBC000884201D1012070470020704701680A682F -:10DBD00049688068884201D9491C00E000219142CF -:10DBE00001D101207047002070478068884201D928 -:10DBF000481C7047002070472DE9F84304464FF059 -:10DC000000080E468DF800806846F5F791FF204623 -:10DC1000FFF7DCFF07000AD0207C40B14FF004087A -:10DC20009DF80000F5F7A8FF4046BDE8F88320689E -:10DC3000456841682046FFF7D8FF2168486037B142 -:10DC4000206801682046FFF7D0FF21680860E2687D -:10DC5000012A14D0022A16D0042A19D0082A1CD06E -:10DC60006068314605FB0200F5F7E6FA204600F051 -:10DC70006FFE21688A688242D2D28860D0E76168EC -:10DC800030784855F2E76168308821F81500EDE7F3 -:10DC90006168306841F82500E8E7D6E9000162686C -:10DCA00002EBC502C2E90001E0E738B505460024F1 -:10DCB0008DF800406846F5F73BFF28680460446033 -:10DCC00084609DF80000F5F757FF38BD38B504466D -:10DCD00000208DF800006846F5F72AFF204600F086 -:10DCE00037FE04469DF80000F5F746FF204638BD94 -:10DCF00060DF002802D1024A012111707047000044 -:10DD000027B5002030B51548ADF5037D0078002813 -:10DD100021D04FF4FE7500BFADF8085282A96846C5 -:10DD200061DF38B1052816D00DF5037DBDE8304020 -:10DD3000F5F790BD6C460A497FA800F0EDF806E0C3 -:10DD4000D0E90021204690477FA800F0FCF8819898 -:10DD50000028E1D0F4E70DF5037D30BD27B50020A4 -:10DD60001C050300F8B5134C2078C0B10120A07049 -:10DD700000F084FF112814D0022000F097FF002546 -:10DD80008DF800506846F5F7D3FE11DF0646257082 -:10DD90009DF80000F5F7F0FE2EB13046F8BD0820E2 -:10DDA000F8BD0020F8BDA57001F026FC032000F0AE -:10DDB0007DFFF6E724B500207CB5204C207808B123 -:10DDC00008207CBD0120A070002000F057FF112822 -:10DDD00019D0002000F06AFF194800260068019061 -:10DDE0008DF800606846F5F7A3FE164901A810DF1C -:10DDF00005000AD0002020709DF80000F5F7BCFE59 -:10DE00002DB128467CBD00207CBD0120F3E7A67023 -:10DE100066700721162000F0C9FE08B1F5F71AFD5B -:10DE20000721152000F0C2FE08B1F5F713FD01F03F -:10DE3000FFFB012000F03AFFE5E7000024B50020D9 -:10DE4000B00403000D3802000EB50749684600F023 -:10DE500063F805E0D0E900108847684600F073F8E1 -:10DE600002980028F6D10EBDCC04030001480078CA -:10DE70007047000024B500200348017840788143B2 -:10DE800081F001007047000024B5002070B50C4CF3 -:10DE900060782178084212D01620F5F779FC002529 -:10DEA00030B14FF0E0214FF48000C1F8000203E0F0 -:10DEB00042F20100F5F7CEFC01F0BAFB657070BDCF -:10DEC00024B500201FB5684648DF30B1052814D0BE -:10DED00004B0BDE81040F5F7BDBC084901A800F04A -:10DEE0001BF806E0D0E900210098904701A800F057 -:10DEF0002AF803980028E6D0F4E71FBD3805030090 -:10DF000010B5044C2078002803D001F075FB0120E7 -:10DF1000607010BD24B50020016009684160AFF356 -:10DF2000008010B5D0E900215368994201D1002149 -:10DF300004E0D1E90034A34202D01946816010BD4B -:10DF400008314160F0E7816800290BD002689268CF -:10DF50000A44826041684B689A4203D108314160AB -:10DF6000FFF7DFBF70474058002800D001207047FE -:10DF700008B5002242504058009008BDD0F8040374 -:10DF8000084000D0012070474058002800D00120F0 -:10DF9000704708B5002242504058009008BD00006C -:10DFA00008480068012110F0010F08D14FF0E0206F -:10DFB000E02280F80024C0F88012C0F80011024866 -:10DFC0000160704700E100E01805004010B54FF413 -:10DFD0008070FFF716FC01208107C1F80403086078 -:10DFE00010BD00000649024600200B790BB18520C8 -:10DFF00070470A6001220A7100224A7170470000CE -:10E00000D8B3002070B54FF48270FFF7FAFB0220FE -:10E010004107C1F804030B4B196841F08070186088 -:10E020000948026842F00104046044684FF40A554C -:10E030004668361BAE42FBD30260196003490120DB -:10E04000086070BDFCED00E0001000E0080000403A -:10E0500004490120086004480168C1F30041002917 -:10E06000FAD170470C00004018040040002802D08C -:10E070000149800108477047C10103000121B1EB4C -:10E08000507F01D1012070470020704738B50D4600 -:10E0900000F052FC040014D000208DF80000684607 -:10E0A000F5F746FD207928B19DF80000F5F764FDED -:10E0B000112038BD0120256020719DF80000F5F782 -:10E0C0005BFD002038BD10B500F036FC002802D002 -:10E0D00000210160017110BD0149024801F0E2BD5B -:10E0E0002CCE0020002000402DE9F04105460079AB -:10E0F00016460F4600EB40012D4A01EBC00102EB32 -:10E10000810494F82A1011B10820BDE8F081294952 -:10E1100051F820102868FFF7B9FF08B11120F4E783 -:10E1200039462846F5F742FD6660386920603000C0 -:10E130004FF001062FD03F7F4FF48E712868FFF714 -:10E1400017FF4FF4A2712868FFF712FF28681A49D9 -:10E15000C0F8041328684FEA4711000B40B20028AA -:10E1600006DA00F00F0000F1E02080F8141D03E053 -:10E1700000F1E02080F800142868000B40B200F0A5 -:10E180001F0206FA02F14009800000F1E020C0F809 -:10E190008012C0F8001128680421C0F80015002082 -:10E1A000A061E06184F8290044F8140FA675ACE77B -:10E1B0002CCE0020F0FF0200800002002DE9F05F6D -:10E1C000054600794FF4017600EB400303EBC000F5 -:10E1D000344B03EB80040020636813B12B68C3F851 -:10E1E0000863A3694FF000096BB1E06938B160685A -:10E1F00010B12868C0F804631120BDE8F09FE26107 -:10E200000120216105E0C4F82490A261E160C4F816 -:10E210001C9094F82910014302D1284600F0B6FC66 -:10E2200060680028286803D0C0F804630020E4E791 -:10E230004FF4A2763146FFF79BFEB2464FF4927B35 -:10E2400059462868FFF78FFE06464FF48471286808 -:10E25000FFF789FE804651462868FFF784FE07468F -:10E2600048EA07003043EBD056EA070007D12146C1 -:10E27000286800F05BFCA169606A8142E0D8C4F8BC -:10E2800018900EB10320B8E70FB10F20B5E794F84E -:10E29000291001200029296801D00860C6E74860DC -:10E2A000C4E700002CCE002070B5044600790C4D68 -:10E2B00000EB400101EBC00005EB800090F8290065 -:10E2C00000280CD1204600F061FC2179012001EBEF -:10E2D000410202EBC10105EB810181F8290070BD0B -:10E2E0002CCE00202DE9F047054600790B4600EBC7 -:10E2F000400101EBC000234901EB8004284600F0F7 -:10E3000043F810B11120BDE8F0874FF00008C4F8C1 -:10E310002080A360626184F828804FF48E7647469F -:10E3200031462868FFF724FE28684FF00109C0F83D -:10E3300008902146286801F0CFFB606800BBD5F843 -:10E3400000A00EE094F8280008B10F2716E031462F -:10E350005046FFF708FE0028F4D02146504601F051 -:10E36000BBFB216A60698142F1D331462868FFF71F -:10E37000FAFD0028F9D02868C0F80C90C4F8148081 -:10E380003846C0E72CCE0020007900EB400101EBBD -:10E39000C000044901EB80004069002800D0012042 -:10E3A000704700002CCE00202DE9F047044600798C -:10E3B0004FF0000900EB400101EBC000254901EBE3 -:10E3C00080072068C0F80095786880B120682249ED -:10E3D000C0F8081320680121000B40B200F01F02B2 -:10E3E00091404009800000F1E020C0F880112068D1 -:10E3F000D0F80C25D0F81485D0F80865D0F8105561 -:10E400004FF0FF31C0F81415C0F80C152068C0F8A3 -:10E410000815C0F81015501C02D01046FFF74EFB2F -:10E42000B8F1FF3F02D04046FFF748FB681C02D01E -:10E430002846FFF743FB701C02D03046FFF73EFB37 -:10E440002068FFF740FE87F82A90C7F80490BDE8DF -:10E45000F08700002CCE002084020200014902480F -:10E4600001F0CCBC58CE0020002000402DE9F04146 -:10E470000546164600790F46154A00EBC00102EB2F -:10E48000810494F8201011B10820BDE8F0811149F1 -:10E4900051F820102868FFF7F9FD08B11120F4E7C2 -:10E4A00039462846F5F7C6FB6660386920601EB11C -:10E4B000397F2846FEF7A8FF28680821C0F8001514 -:10E4C0000020A061E0610121606184F82010DCE798 -:10E4D00058CE0020F4FF02002DE9F05F04460079D9 -:10E4E0000E4600EBC001DFF8F0A017460AEB8105ED -:10E4F0003046FFF7C3FDB0B168684FF000084FF435 -:10E50000047910B12168C1F80893A8694FF0000B95 -:10E5100080B1E86948B1686810B12068C0F8049318 -:10E520001120BDE8F09F1020FBE7EF614FF00108DC -:10E530002E6102E0EE60C5E9067B00254FF488718C -:10E540002068FFF726FD4FF4A2712068FFF721FD38 -:10E550002068C0F83465C0F838752068B8F1000F3D -:10E5600012D0D0F8001241F02001C0F8001220793A -:10E57000D04600EBC0010AEB8100406838B120684A -:10E58000C0F804932846CCE701210160EFE74FF47F -:10E59000887A4FF4A27951462068FFF7F5FC0746C8 -:10E5A00049462068FFF7F0FC06464FF49271206858 -:10E5B000FFF7EAFC014647EA06000843EBD0227960 -:10E5C00002EBC20308EB8302C2F818B001B10325C5 -:10E5D000002ED7D00F25D5E758CE00202DE9F047E3 -:10E5E00004460E460079204900EBC00001EB80058F -:10E5F00017463046FFF742FD30B1204600F036F8AE -:10E6000020B11120BDE8F0871020FBE76F61AE60FC -:10E610004FF49076002731462068FFF7BAFC4FF49C -:10E62000AC7841462068FFF7B4FC2068AA686969A5 -:10E63000C0F84425C0F84815206801218160686849 -:10E6400078B9B14649462068FFF79EFC0646414628 -:10E650002068FFF799FC0643F4D000B10F27002093 -:10E6600068613846CEE7000058CE002000790549A1 -:10E6700000EBC00001EB80004069002800D00120C1 -:10E680007047000058CE00202DE9F047044600797D -:10E69000274900EBC00001EB800720684FF000091C -:10E6A000C0F80095786880B120682249C0F8081346 -:10E6B00020680121000B40B200F01F029140400988 -:10E6C000800000F1E020C0F880112068D0F80C250F -:10E6D000D0F81485D0F80865D0F810554FF0FF3108 -:10E6E000C0F80C15C0F814152068C0F80815C0F85B -:10E6F0001015501C02D01046FFF7E9F9B8F1FF3FA2 -:10E7000002D04046FFF7E3F9681C02D02846FFF725 -:10E71000DEF9701C02D03046FFF7D9F92068FFF708 -:10E72000D2FC87F82090C7F80490BDE8F08700007D -:10E7300058CE00201003020010B5FFF797FB08B178 -:10E740003EDF10BD20BF40BF20BF10BD70B51D46CD -:10E75000049C0E46034642B13DB134B1296820689D -:10E76000091A052903D2092070BD0E2070BD411C75 -:10E770002160135420688118304601F0EAFB2168BB -:10E78000084420602860002070BD00002DE9F05F83 -:10E790005E4D00260B464FF0050B3446C0B229787B -:10E7A00004276BF307044FF003084FF002094FF002 -:10E7B000010A072863D2DFE800F00413535E7A826F -:10E7C0008900687803285AD16F70514800F092FC94 -:10E7D00008B1F5F73FF83146204661F3070048E0FD -:10E7E00020469AB26AF30700B2F5007F19D80129D2 -:10E7F00002D004290ED042E032466B681146984799 -:10E80000444800F079FE08B1F5F724F885F8009047 -:10E81000BDE8F09F32466B681146984785F800B016 -:10E82000F6E7012902D004290DD028E032466B68B2 -:10E8300011469847002000F05FFE08B1F5F70AF88E -:10E8400085F80080E4E732466B681146984700205F -:10E8500000F052FE08B1F4F7FDFF06202870D7E75C -:10E8600002290CD120462F7069F30700194662F384 -:10E870000F06324645E0032906D006290ED0BDE832 -:10E88000F05F0020F4F7E6BF204632466B6868F37D -:10E8900007001146984785F800A0B9E720463246A0 -:10E8A0006B6868F30700114698472F70B0E732464F -:10E8B0002046114667F3070062F3070121E0204676 -:10E8C000314667F307006AF30701D2E767F30704ED -:10E8D0006878A04669F307061C46032802D002297F -:10E8E00005D00BE06F70104600F004FC03E02F70C1 -:10E8F000104600F0B5FB08B1F4F7ACFF22463146F4 -:10E9000040466B68BDE8F05F18470000ACB40020DB -:10E9100074DF002074E1002028B111B100783228A2 -:10E9200003D0072070470E207047012901D009202D -:10E9300070470020704700000349884201D1034816 -:10E94000704700207047000000200040E0B3002026 -:10E9500001680A684968914201D3881A7047806843 -:10E96000801A0844401C704770B52A4C617A60696F -:10E97000FDF7E6FE012510B1E581042070BD00F031 -:10E980007DF82549606908602348617A001D0160AF -:10E9900021481830026822F0FF0202600368A26A70 -:10E9A00043EA1263036010021B4A103210601A48D7 -:10E9B00024300560184A002020321060207AA279A5 -:10E9C00040EA0220144A28321060032901D00429A9 -:10E9D0000CD12079E178000440EA0120A1780843B5 -:10E9E000617940EA01600C490831086094F824001C -:10E9F00094F82010400640EA0160A18B40EA0140F3 -:10EA0000E17940EA0120044940F0FF000C31086040 -:10EA1000002070BD88B300200C15004010B50446DE -:10EA2000FDF73EFF1149124AC86A1060121D086BBB -:10EA30001060086C022202EB40000D4A303A106070 -:10EA4000121F0C4810600C4A0020C2F8000103237A -:10EA5000C2F8003224B1C2F80C010120506010BD90 -:10EA6000486903492C39086010BD000088B30020B4 -:10EA70003815004014CD0020001000400B49032041 -:10EA800008600B490020C1F80002C1F81001012202 -:10EA9000C1F81020D1F81021002AFBD0C1F81001D4 -:10EAA00048600860034988817047000008F501400C -:10EAB0000010004088B3002070B5012670044FF0AC -:10EAC000E0210025C1F88001084C4010C4F848033B -:10EAD000C4F8080366602F20FFF7C8FAA660044C4C -:10EAE0002F20A560FFF7C2FAA57070BD001001408D -:10EAF000FCB3002010B5017842788378C0780A44CE -:10EB00001844104410F0FF0F0ED1C1F3C204FDF7FA -:10EB10008DFFA04206D0FDF789FF401C00F00700E2 -:10EB2000A04201D1012010BD002010BD70B50546E6 -:10EB300088690C4600284FF4847128460AD0FFF7F4 -:10EB400017FAD5F81805626AE1688854606A401CB3 -:10EB5000606270BDFFF70CFAD5F8180570BD1FB5DF -:10EB600001238DF80030CDE90121D0E9001268467B -:10EB700090471FBD1FB501238DF800308DF8081098 -:10EB80000192D0E90012684690471FBD10B50446B7 -:10EB900000684FF49271FFF7EBF94FF4847120682D -:10EBA000FFF7E6F920680121016010BD70B50D4640 -:10EBB0000446F4F7EDFD70B12846F4F7FBFD68B1AB -:10EBC0006807000E002C0CDA04F00F0101F1E021BF -:10EBD00081F8140D09E042F2010070BD42F202001A -:10EBE00070BD04F1E02484F80004002070BD000032 -:10EBF00010B5FFF7E1F802490020087010BD0000D1 -:10EC0000A8B4002038B50021012548B101280CD056 -:10EC1000032809D1FFF7C4F9BDE83840FEF75ABE12 -:10EC20004FF0E020C0F8805138BD8DF800106846E4 -:10EC3000F4F77EFF064C207808B9FEF72FFEE06857 -:10EC4000401CE060A5709DF80000F4F795FF38BD0A -:10EC500018CE002010B503280CD1F4F7C5FE002112 -:10EC6000054A0846F4F702FE002803D0BDE810402C -:10EC7000F4F7F0BD10BD0000F1EB02003EB5044614 -:10EC800009496846FFF748F908E000BFD0E90021CC -:10EC90002046904730B16846FFF755F902980028A2 -:10ECA000F4D13EBD11203EBDB40403003EB5044680 -:10ECB00008496846FFF730F907E000BFD0E90021B6 -:10ECC000204690476846FFF73EF902980028F5D1A4 -:10ECD0003EBD0000C004030002498969002900D03C -:10ECE00008477047F8CC002010B51C460B462AB1E7 -:10ECF00024B12168052903D2092010BD0E2010BDC2 -:10ED00001070511C184601F024F9401C20600020AE -:10ED100010BD00001CB5040002D10E20F4F79AFDCE -:10ED2000002001900090694601A800F0C5F9042870 -:10ED300020D008B1F4F78EFD019A02206B4602F84C -:10ED4000010B00980021401E00902046F5F72BF99A -:10ED5000062812D008B1F4F77DFD0098401C81B25E -:10ED60000090019800F0E0F908B1F4F773FDF4F7B2 -:10ED700015FE1CBD00F0F2F8D5E7019800F0BAF9D5 -:10ED800008B1F4F767FD0248F4F764FD1CBD00000C -:10ED9000FECADDBA10B54188074AF4F767FD08B12D -:10EDA000F4F758FDF4F70EFE002803D1BDE810403B -:10EDB000FFF7A6B810BD000015ED02007FB50E46A6 -:10EDC00004000DD07EB100200290019025780390C0 -:10EDD00001A902A800F070F9042806D040B123E090 -:10EDE0000E2004B070BD0920FBE700F0B7F8EFE794 -:10EDF0000299012001AB08700198029A401E01900F -:10EE000031462046521CFDF7BDF906280BD10C48AF -:10EE1000F4F720FD03A8029A009001AB06212846D2 -:10EE2000521CFFF793FC08B10320DAE70198401C5D -:10EE300081B20190029800F077F90028F4D1D0E770 -:10EE4000FECADDBA7CB50D46040017D00020019043 -:10EE50000090694601A800F02FF9042810D000287E -:10EE60000DD101990420134A087000982946401ECC -:10EE700000902046F5F748F828B118E00E207CBD38 -:10EE800000F06CF8E5E701996A460020491CF5F7A7 -:10EE900061F860B90098074A401C521E0121009099 -:10EEA000117081B2019800F03FF90028E7D00320EB -:10EEB0007CBD000091B40020007818B101280ED16B -:10EEC00000F078BBBFF34F8F05480168054A01F495 -:10EED000E06111430160BFF34F8F00BFFDE7704752 -:10EEE0000CED00E00400FA0510B5C0B2052813D2FD -:10EEF000DFE800F003090D131500F4F775FDBDE818 -:10EF0000104000F015B8BDE81040F4F747BD0648C2 -:10EF1000C0E902120121017010BD044800E00F2079 -:10EF2000BDE81040F4F796BC98B40020FECADDBAE4 -:10EF30001CB5094C207800280DD011DF00F05AF8DC -:10EF400054F8010F0090A188ADF804100199BDE8B4 -:10EF50001C40FDF731BC1CBD90B400200248406845 -:10EF6000002800D00047704798B40020014948604D -:10EF70007047000098B4002010B504001ED022682D -:10EF8000A188501C491E127889B23AB1032A08D0D0 -:10EF9000052A0AD00A48F4F75DFC08E0FFF70EFFE7 -:10EFA00001E0FFF74FFF10B106E0FFF785FF206893 -:10EFB00000F056F8002800D0032010BD0E2010BD30 -:10EFC000FECADDBA10B5FBF71DFFFBF7A3FFBDE8D6 -:10EFD0001040FBF73DBF0000054900200A78002AD9 -:10EFE00004D0087001F10800FFF7C6BF70470000A9 -:10EFF00098B4002010B500F02DFA044800210170EB -:10F0000041704160BDE8104000F032B9ACB400205E -:10F0100010B50D4C21786278114301D0082010BD45 -:10F0200080B10121217061706060084800F046FAEB -:10F030000028F4D000212170617061600728EED0B3 -:10F04000032010BD0E2010BDACB400208DE70200DF -:10F05000024801210170417070470000ACB40020EB -:10F0600070B50546002400F0F5F925B11048854239 -:10F0700003D010240AE00E2408E00E4D287804285E -:10F0800008D0062808D0052808D0082400F0F4F994 -:10F09000204670BD012009E0032007E0044800F08D -:10F0A0002BFA040001D00324F0E702202870EDE7DA -:10F0B00074E10020ACB4002010B502004FF0000055 -:10F0C00007D031B1094C63782BB1012B05D0042056 -:10F0D00010BD0E2010BD082010BD02236370044B2C -:10F0E00013604FF400720A8010BD0000ACB4002021 -:10F0F00074DF002001004FF0000004D0084A914264 -:10F1000003D0102070470E20704706494A78022A23 -:10F1100003D0042A01D00820704701224A707047AA -:10F1200074DF0020ACB4002070B50C46050005D09B -:10F1300034B11348854205D010240DE00E240BE0B5 -:10F14000072409E0B4F5007F01D90C2404E00D4E3A -:10F150007078022802D00824204670BD00F07AF9A9 -:10F160002146284600F0E0F9040005D0112C00D01B -:10F17000032400F081F9EFE703207070F9E7000045 -:10F1800074DF0020ACB400202DE9F843364C8DF834 -:10F1900000004FF0010C6178002511B1216A39B1EE -:10F1A00008E0C02802D1256284F801C0BDE8F883D8 -:10F1B000C028FBD02C4ADFF8B490E768126940F20F -:10F1C0000623022627B194F80280B8F1000F08D078 -:10F1D0007AB384F802C06261994230D3C02840D12A -:10F1E0002DE031B1042906D099420DD3C02838D181 -:10F1F0000AE0676108E0C02806D0D2B11B48E16A86 -:10F200003038816778306061684600F0A7F950B106 -:10F21000A07A0028CAD16269206A9DF800101154B2 -:10F22000401C2062C2E76169E068814202D1E5606A -:10F2300001E016E02561484689F800600AE068466A -:10F2400000F08CF90028E3D12561A57089F80060F1 -:10F25000616948464160218CA9F80810616A034839 -:10F2600088476570A2E70000F4B40020DCE50020C8 -:10F2700070B5044C0025256200F030F825706570EB -:10F28000A57070BDB4B40020024B1B6A002B00D0E7 -:10F2900018477047B4B4002070B50E4C00250E48D6 -:10F2A000E561A561FEF701FD0B481430FEF7FDFC9A -:10F2B000FDF774FF25636563257065700120FDF718 -:10F2C0004BFF47F60160A0810120A070E5706071DE -:10F2D000607270BDB4B4002078050300084810B512 -:10F2E0000178084A515C19B1001DFFF7CDF902E021 -:10F2F0000C30FFF759F804490020486210BD0000A7 -:10F300006C040300CCB30020F4B4002010B520B18D -:10F310000F494A6A1AB1082010BD0E2010BD48627C -:10F320000D490C4AA1F11400FEF716FB08B10720A5 -:10F3300010BD00F013F806490748012209311438BE -:10F34000FEF73EFB08B1F4F785FA002010BD00007F -:10F35000F4B4002015FB02008004030009480849AA -:10F3600081620021C1700722027141718171817235 -:10F3700000F12C01C16002493C310161704700007D -:10F38000E8E50020F4B4002001004FF0000007D0B1 -:10F390000A4BA3F12C02994208D1D16811B103E0C4 -:10F3A0000E207047D360704708207047044B994285 -:10F3B000FBD111690029F7D11361704720B50020F6 -:10F3C00024E60020F8B515460E4607001BD00024A1 -:10F3D0008DF800406846F4F7ABFB1C490A791C48DD -:10F3E000072A16D0D7E90012C0E9061200F1180169 -:10F3F0005EB1D6E90023C0E9082345B1D5E9001282 -:10F40000C0E90A1217E00E20F8BD8C60F5E70C6128 -:10F4100011E0D7E90023C0E900230D4A8EB1D6E9F7 -:10F420000036C0E9023675B1D5E90023C0E90423EE -:10F430000C7100F0A3FA9DF80000F4F79DFB00208A -:10F44000F8BD9460EFE71461F2E70000F4B4002027 -:10F45000ACE5002038B500248DF800406846F4F78C -:10F4600067FB0448C47144729DF80000F4F784FB04 -:10F4700038BD0000B4B40020F8B500252E468DF844 -:10F4800000506846F4F754FB0B4C0127E771207AD3 -:10F4900008B1267201259DF80000F4F76DFB677234 -:10F4A000FDF76EFFFDF790FD002D03D0BDE8F8409D -:10F4B000FDF7B0BDF8BD0000B4B400200C4910B594 -:10F4C0000A784B781A4301D0082010BD28B1086291 -:10F4D000FDF764FE18B1032010BD0E2010BD0548D5 -:10F4E000FFF714FF0400F9D1FFF7D6FE204610BD48 -:10F4F000B4B4002045D002001FB50A4900248A791F -:10F500005AB100228A71886101208DF804008DF8BB -:10F5100000206846FDF788FC00E0112404B0204676 -:10F5200010BD0000B4B400201FB5002438B131B1C3 -:10F53000094AD3692BB11124204604B010BD0E2016 -:10F54000FBE75182D06100208DF800008DF80400A7 -:10F550006846FDF74BFEEFE7B4B4002010B5047821 -:10F56000C02C0AD00C49DB2C09D00A460023927A21 -:10F57000DC2C07D0DD2C0DD108E0002010BD0120CF -:10F58000887207E032B18B72C02102E012B18B7237 -:10F59000DB210170012010BDF4B40020002805D14A -:10F5A0000349012048700020FBF70CBB70470000A6 -:10F5B00018CE00200D4810B5017809B1002010BD0B -:10F5C00001210170407820B9094A00210948F4F767 -:10F5D0001FFA0848002240F6CD410068F4F754FABB -:10F5E000FEF7C0FBFFF7EEFC012010BDA8B4002021 -:10F5F00031F702006804030010B51620F4F7C8F8CC -:10F6000048B10A4882684FF4800152B1016821F480 -:10F610008001016010BDBDE8104042F20100F4F726 -:10F6200019B94FF0E020C0F8801110BD88CF00203C -:10F6300070B54FF0E0254FF480041620C5F88042E5 -:10F64000F4F7A6F870B10D4890F800044009F4F7FB -:10F65000B1F850B10A48816869B1016841F480018C -:10F66000016070BD42F2010001E042F20200BDE81B -:10F670007040F4F7EFB8C5F8004170BD16E000E047 -:10F6800088CF00207CB50C4640B12CB100230193FB -:10F69000057801A9492D03D007207CBD0E207CBD33 -:10F6A0000125CDE9003513460A462146FBF702FB4A -:10F6B0000028F4D10198A04201D009207CBD00208F -:10F6C0007CBD00002DE9FF4184B0984614460F0030 -:10F6D00019D0C4B1002001902568492001AE8DF8F1 -:10F6E000080033462A4602A800F096FC00280BD1F9 -:10F6F00033462A46394604A800F04BFC002803D1C3 -:10F70000049870B903E00E2008B0BDE8F081074806 -:10F71000009033462A4639464046FBF7F9FA00285E -:10F72000F2D1019820600020EEE7000093FF020074 -:10F7300010B5FFF78DFCFFF7AFFDBDE81040FFF7F8 -:10F740000DBE000010B54FF080400021C0F8001140 -:10F7500001220260D0F80031002BFBD0104B9869D9 -:10F760004260C260C0F80415C0F84011C0F84411EE -:10F77000C0F84811C0F84C114FF48034C0F804436D -:10F78000C0F800220424C0F810455C6BC0F8404566 -:10F790004FF48274C0F8444502600020196110BD26 -:10F7A00088B300202DE9F84F1D4C00256846D4E9A8 -:10F7B00001A6FDF71BF9002738B30023009A616802 -:10F7C0001CE0D1F800C00846944503D9ACEB020216 -:10F7D0000A6015E0A2EB0C0263440760D0F80CC08D -:10F7E000C1698146BCF1000F08D006EB030828F080 -:10F7F0007F48C0E9018CC9F81C5005460029E0D1BA -:10F8000028466160FDF7CEFE03E02846FDF7CAFEFC -:10F8100010B15046FBF7F8F9E770BDE8F88F00002B -:10F82000FCB300200D4B10B5596831B102680C686B -:10F83000A24204D8A21A0A60C161586010BD0B46EA -:10F8400003E00B46C969121B21B10C689442F8D33E -:10F85000A41A0C600260C161D86110BDFCB3002025 -:10F860002DE9F041144E77683D462C4603E0844272 -:10F8700004D02546E469002CF9D11BE0D4B1A5429F -:10F880000BD1F869706040B90C49012088600021F3 -:10F89000B160F0702F20FEF7E9FB2168E069E861B4 -:10F8A00010B10268114401607068874202D00120E3 -:10F8B000BDE8F0810020FBE7FCB300200010014010 -:10F8C0007CB5064600240D468DF800406846F4F7E6 -:10F8D0002FF901A800F0DCFB70B105700949466002 -:10F8E0009DF8040048709DF80000F4F745F91420D5 -:10F8F000F3F732FD20467CBD04249DF80000F4F7A8 -:10F900003BF9F7E77CCE00202DE9F041194D6C68FA -:10F91000002C2CD0184800270068A968B846401A67 -:10F9200020F07F462068B0420CD82146361A0744A2 -:10F93000E469087C20B181F81080886949698847AA -:10F94000002CEFD129786878814206D1401CC0B2E2 -:10F950006870022801D185F80180064869780C306A -:10F9600040F82170BDE8F0411420F3F7F5BCBDE884 -:10F97000F0810000FCB30020041501402DE9F047A0 -:10F98000DFF8DC900126374CA9F1180700254FF06D -:10F990000508207818B100F067F806461AE02079CB -:10F9A00080B1042818D0052816D006281AD0A069DE -:10F9B000E1690068405C491CE161C02824D0DB2873 -:10F9C00025D026E0C02000F04FF8C4E906750646B1 -:10F9D00001202071257034E0C02000F045F8064673 -:10F9E00084F80480D9F8000048B11D491822A1F11B -:10F9F0001800F3F721FCC9F80050257121E02079A7 -:10FA0000401C2071BDE8F087DB20DC2100E0DD2117 -:10FA1000217000F029F80646A069E26981889142C8 -:10FA20000FD805602079012803D0207902280DD055 -:10FA300014E0B86840B10A481038C4E9060502204D -:10FA40002071002EA5D1DDE70420F9E7386928B13F -:10FA500003480838C4E906050320F1E74046EFE70C -:10FA6000C4E50020F4B4002070B5184CE278A16A17 -:10FA70008854521CD2B2E27023790420042B0BD09C -:10FA80002379052B0AD01E2A1DD3657901233DB1A8 -:10FA90002072A371002070BD0120F6E70020F4E77A -:10FAA0006371E0710A48FDF7ABFF08B1F3F7D2FECE -:10FAB0000849A06A884202D101F11E0000E0054811 -:10FAC000A0620020E070012070BD0000F4B40020AE -:10FAD0006C040300E8E5002070B50C4605464FF4C1 -:10FAE0008E71FEF745FA216AA068415C206A401CCD -:10FAF0002062C5F81C1570BD1FB500228DF80020CE -:10FB00000291816801914261D0E9001268469047F4 -:10FB10001FBD000070B501782D4D2E4CD1B10129CB -:10FB200045D0022901D0032010E0C068810705D02C -:10FB3000032129706860616A2548884725490122A8 -:10FB400009312548FDF73CFF002840D0BDE8704052 -:10FB5000F3F780BEA0790026C8B1E2781E48A16AFA -:10FB6000FDF74EFF08B1F3F775FE1949A06A0C3195 -:10FB7000884202D101F11E0001E015480C30A0625C -:10FB8000E670E0792870207AE071A67102E0667173 -:10FB9000E07928702878042802D0616A0C488847E8 -:10FBA0002079072813D0BDE87040FFF7E7BE094869 -:10FBB00001220930014604780748FDF701FF08B12A -:10FBC000F3F748FE2046BDE87040FFF7DDBA70BD90 -:10FBD000DCE50020F4B400206C0403001FB50A46E5 -:10FBE00001788DF8001041680191017A8DF80810B4 -:10FBF000C0680390044850F82210001F50F82220DB -:10FC0000684690471FBD0000D4B3002070B504467D -:10FC1000407988B00A2802D9072008B070BD202298 -:10FC20001D496846F3F708FB207801906078009042 -:10FC300060791A491A4E51F82000069000208DF87C -:10FC400014008DF815008DF81D0001F1580000F129 -:10FC50000C050178715C19B1001DFEF715FD02E07D -:10FC60002846FEF7A1FB0D48002269465830FDF7F3 -:10FC700073FE0028D1D1094858300078305C10B9A3 -:10FC80002846FEF711FB054960792C3151F8200018 -:10FC9000303908600020C0E74804030024B4002085 -:10FCA000CCB300202DE9FF470C4605464FF4007108 -:10FCB000FEF764F901274FF40178002618B34FF4DA -:10FCC000927949462846FEF74EF9E0B14946284662 -:10FCD000FEF74EF9C5F8088394F8290000B96F6063 -:10FCE00002208DF80000D5F88004C5F88004039048 -:10FCF000A0690290E0680190A661E661D4E9001273 -:10FD00006846904728E004212846FEF737F918B3E3 -:10FD10004FF484712846FEF726F9E8B121462846BB -:10FD2000FEF704FF616AA069884215D1E06938B125 -:10FD3000E268616AA0612069E6616662E06008E0ED -:10FD400094F8290000B96F60C5F80883A661E268DD -:10FD5000616A2046FEF703FF4FF48E78414628463D -:10FD6000FEF701F978B1206A6169884202D294F8FD -:10FD7000280020B341462846FEF7FAF8616911B120 -:10FD80002046FFF7B9FE4FF4A27841462846FEF719 -:10FD9000EAF8002818D041462846FEF7E9F894F81A -:10FDA000290000B12F60A06900280DD0A661E2688B -:10FDB000616A04B02046BDE8F047FEF7D0BE214698 -:10FDC0002846FFF789FEDEE7BDE8FF871FB50A4634 -:10FDD00001788DF8001041680191017A8DF80810C2 -:10FDE000C0680390044850F82210001F50F82220E9 -:10FDF000684690471FBD0000D4B300202DE9FF41A5 -:10FE00000C464FF4927705463946FEF7BDF80026BA -:10FE1000C0B139462846FEF7BCF802208DF8000034 -:10FE2000D5F88004C5F880040390D5F83C058DF81A -:10FE30000800E0680190A661E661D4E90012684616 -:10FE4000904723E04FF4887739462846FEF79CF820 -:10FE5000E0B139462846FEF79CF8D5F83C15A06974 -:10FE6000884213D1E06960B1E268D5F8000220F061 -:10FE70002000C5F80002E069A0612069E661E06049 -:10FE800001E0A661E2682046FEF774FE4FF4A27717 -:10FE900039462846FEF778F860B139462846FEF71D -:10FEA00078F8A06930B1A661D5F83C152046E26823 -:10FEB000FEF760FE4FF4907739462846FEF764F867 -:10FEC000002813D039462846FEF763F860690028F9 -:10FED0000CD0D5F84C058DF800608DF80800A068AE -:10FEE00001906661D4E9001268469047BDE8FF8141 -:10FEF00030B51468A51C8D4205D8204400881880B0 -:10FF00001068801C106030BD0870000A4870022024 -:10FF1000704710B51468091B022901D2092010BDD1 -:10FF20002044008818801068801C1060002010BDDC -:10FF300010B51C68121B022A01D2092010BD2144F1 -:10FF400000880870000A48701868801C186000203B -:10FF500010BD0870020A4A70020C8A70000EC87048 -:10FF60000420704710B538B132B12BB11468091BA9 -:10FF7000042903D2092010BD0E2010BD2044C178F1 -:10FF8000006861F31F6018601068001D1060002099 -:10FF900010BD10B51C4639B130B12CB12368D21A4E -:10FFA000042A03D2092010BD0E2010BD1944006898 -:10FFB000FFF7CFFF216808442060002010BD30B556 -:10FFC0001468651C8D4204D8005D18701068401CD0 -:10FFD000106030BD10B514688C4201D1092010BDED -:10FFE000005D18701068401C1060002010BD0000FB -:10FFF000D9E002005DE40200000200000000000001 -:020000040003F7 -:1000000017A5D84602FFFFFF00000000020001FF15 -:100010000501FFFF00C2010010B51C68944201D128 -:10002000092010BD007808551868401C1860002091 -:1000300010BD70B51446049D2BB12268891AA942DF -:1000400003D2092070BD0E2070BD11182A46184633 -:10005000F3F7F2F8206828442060002070BD70B5E6 -:100060000D46049C38B132B12CB121685B1AAB4209 -:1000700003D2092070BD0E2070BD8B1801462A46A0 -:100080001846F3F7D9F8206828442060002070BD96 -:100090000A494A788B78521CD2B2934200D100228E -:1000A0000B78934201D1002070470270487800EB32 -:1000B000400001EBC000001D704700007CCE002016 -:1000C000FFC1FBE84C90728BE7B3518963AB2323EC -:1000D00002841872AA612F3B51A8E53749FBC9CAAF -:1000E0000C18532CFD45E39AE6F15DB0B61BB4BE87 -:1000F0002A50EAE90E9C4B5E5724CCA1B759B88729 -:10010000FFE07D742648B9C5F3D9A8C4B1D59111D3 -:1001100001420C39D5B0979D28D4F29BA4FD6465AB -:10012000068C2996FEA2714DF3F82E58DB0D5A5F0E -:100130001528F57407CE25AF2B12E6D0DB2CDCC3D7 -:100140007FF03E3A13A4DCE2F96C54E2D8EAC888A6 -:100150000021869C6AD8CB4E146AF94DD27EB23209 -:1001600003C6144B7FD1B8A6797C17ACED06ADAFB2 -:100170000A947ABA03E792D7150973E86D16EEE18F -:100180003F781F9D09526EF17C362A716C7564446C -:100190008010434E35EC65270AB5FC26693F599916 -:1001A00001638AA5BF685CD33CBE0BD67683D65765 -:1001B000054A3DDD8173C9EB8A8439F4360BF700BB -:1001C0000338FDD8704700003200000001C3020070 -:1001D000490000001BC302004300000053C102009D -:1001E00062000000E7C002006300000049C0020096 -:1001F0006400000091C002006500000023C10200FD -:100200006800000025BF02006700000075BF020003 -:100210006000000085AF020066000000DDBF020044 -:100220006900000039AF0200B00000007DC202008A -:10023000B10000000BC20200B20000003DC202008B -:10024000B3000000C1C20200B4000000C1C102003E -:100250006C000000E9AF02006D000000B9AF0200C1 -:1002600070000000B5B50200710000007DB502000D -:100270006E00000001B802006F000000A9B2020089 -:100280008A00000083B602008B000000AFB60200B7 -:100290008C000000F9B102008D00000045B20200A0 -:1002A00085000000C5B3020086000000CDB6020044 -:1002B0007200000015B00200730000006BB0020075 -:1002C00074000000A5B002007500000091B10200AA -:1002D0007600000095B3020077000000D5B7020059 -:1002E00078000000F3B0020079000000C3B0020003 -:1002F0007A00000051B502007B00000021B5020029 -:100300007C0000004FB302007D00000013B3020028 -:100310007E0000005DB102007F00000019B70200FE -:10032000800000001DB1020086000000CDB6020072 -:1003300087000000C5B10200880000001FB602005F -:100340008900000059B602008200000007B40200D4 -:100350008100000037B4020084000000AFB4020046 -:10036000830000006DB402008E000000E9B50200B9 -:100370008F000000EFB402009000000063B20200A2 -:1003800094000000E1B90200950000005DBA02008F -:100390009600000017B90200970000004BB9020058 -:1003A000990000008BB802009A00000021BA0200F8 -:1003B0009B000000D1B802009C00000091BA02002E -:1003C0009D000000B1B902009800000053B802007F -:1003D0009E0000007FB90200A00000005DBD020089 -:1003E000A1000000A7BC0200A20000001FBB020089 -:1003F000A3000000C3BB0200A4000000D1BE0200A5 -:10040000A500000085BE0200A60000004FBC02004F -:10041000A7000000A3BD0200A800000017BD020055 -:10042000A900000035BE0200AA000000DDBD0200E8 -:10043000AB000000E9BC0200AC000000D9BA020029 -:10044000AD0000001DBC0200FFFFFFFFFFFFFFFF2C -:10045000FFFFFFFFFFFFFFFF0000000000000000A4 -:100460000000D6010701000054DF0020000000005A -:1004700000200040000000000020004000000000BC -:100480000600000008000000070000000500000052 -:10049000000000000100000000E0D701070100009B -:1004A000000000000000000000000000000000004C -:1004B00001000007A0040300B004030008000000CE -:1004C000D8040300E804030008000000E804030067 -:1004D000F804030008000000C8050300D805030065 -:1004E0000000000000000000B8050300C80503007C -:1004F0000000000000000000A0050300A8050300A4 -:10050000A8050300B0050300000000000000000083 -:10051000000000000000000080B30020F804030089 -:100520001805030008000000B0050300B80503002B -:10053000000000000000000028050300380503004B -:1005400008000000D805030080B30020AC010000C3 -:10055000C0320200440603002CB50020043B00001A -:100560008037020018B4002010B4002018B4002016 -:10057000F4D800208000000084E4002074E3002010 -:10058000100000001000000001000000A0E50020A5 -:1005900090E40020100000001000000001000000A6 -:1005A00095ED020000000000C541020000000000BF -:1005B0009DF502000000000005DD020000000000C3 -:1005C000C5DE02000000000005EC02000000000093 -:1005D00055EC02000000000091240808011201F30C -:1005E00003031280AA401327294176715B06145534 -:1005F00055550362C409423323F0041AD06D23B069 -:1006000013335027223B1BA04E181A75101A9D0851 -:1006100022EB14903A012CE0D701303223321B3206 -:10062000175A15045A140419427904511220BA4079 -:100630000801271301012902110367017E040090BC -:04064000D0030000E3 -:00000001FF diff --git a/hex/sd_api_v5/connectivity_2.0.1_1m_with_s132_5.0.hex b/hex/sd_api_v5/connectivity_2.0.1_1m_with_s132_5.0.hex deleted file mode 100644 index 3d91f93ba..000000000 --- a/hex/sd_api_v5/connectivity_2.0.1_1m_with_s132_5.0.hex +++ /dev/null @@ -1,12107 +0,0 @@ -:020000040000FA -:1000000000040020E90800007D050000C908000088 -:1000100087050000910500009B050000000000001E -:100020000000000000000000000000000D090000BA -:10003000A505000000000000AF050000B9050000A4 -:10004000C3050000CD050000D7050000E105000054 -:10005000EB050000F5050000FF05000009060000A3 -:10006000130600001D0600002706000031060000F0 -:100070003B060000450600004F0600005906000040 -:10008000630600006D060000770600008106000090 -:100090008B060000950600009F060000A9060000E0 -:1000A000B3060000BD060000C7060000D106000030 -:1000B000DB060000E5060000EF060000F906000080 -:1000C000030700000D0700001707000021070000CC -:1000D0002B070000350700003F070000490700001C -:1000E000530700005D07000067070000710700006C -:1000F0007B070000850700008F07000099070000BC -:10010000A30700001FB500F003F88DE80F001FBD26 -:1001100000F0E0BB1FB56FF00100009040100390AD -:10012000029001904FF010208069000B420900F00E -:100130001F045DF822300120A04083434DF8223097 -:10014000684600F045F91FBDF0B54FF6FF734FF458 -:10015000B4751A466E1E11E0A94201D3344600E080 -:100160000C46091B30F8027B641E3B441A44F9D14B -:100170009CB204EB134394B204EB12420029EBD17E -:1001800098B200EB134002EB124140EA0140F0BD8F -:10019000DE4992B00446D1E90001CDE91001FF2209 -:1001A0004021684600F03CFB94E80F008DE80F000A -:1001B000684610A902E004C841F8042D8842FAD12B -:1001C00010216846FFF7C0FF1090AA208DF8440068 -:1001D000FFF7A0FF00F0F3F84FF01024A069102201 -:1001E0006946803000F002F9A069082210A900F0E9 -:1001F000FDF800F0D8F84FF080510A6949690068AD -:100200004A43824201D8102070470020704710B541 -:10021000D0E900214FF0805002EB8103026944696C -:100220006243934209D84FF01022536903EB8103D4 -:100230000169406941438B4201D9092010BD5069D1 -:10024000401C01D0002010BD0F2010BD70B501680A -:100250000446AF4D4FF01020072952D2DFE801F0DD -:10026000330419293C1E2500D4E902656468294637 -:10027000304600F0CDF82A462146304600F0B6F868 -:10028000AA002146304600F09FFA002800D0032043 -:1002900070BD00F051FB4FF4805007E0201DFFF7C8 -:1002A000AAFF0028F4D100F047FB60682860002016 -:1002B00070BD241D94E80700920000F085FA002824 -:1002C000F6D00E2070BD8069401C12D0201DFFF7B3 -:1002D0009EFF0028F6D109E08069401C09D0201D4E -:1002E000FFF789FF0028EDD1606820B12046FFF7B5 -:1002F0004FFF042070BDFFF70DFF00F060F800F025 -:1003000052F8072070BD10B50C46182802D0012005 -:10031000086010BD2068FFF799FF206010BD4FF006 -:100320001024A069401C05D0A569A66980353079E4 -:10033000AA2808D06069401C2DD060690068401C64 -:1003400029D060692CE010212846FFF7FDFE3168B6 -:1003500081421CD1A16901F18002C03105E030B1B8 -:1003600008CA51F8040D984201D1012000E0002094 -:100370008A42F4D158B1286810B1042803D0FEE7AE -:10038000284600F057F862496868086008E000F005 -:1003900016F800F008F84FF480500168491C01D0AD -:1003A00000F0A4FAFEE7BFF34F8F5A4801685A4A9B -:1003B00001F4E06111430160BFF34F8FFEE74FF09E -:1003C00010208169491C02D0806900F0AEB87047E6 -:1003D000524A01681160121D416811604F4A8168DC -:1003E00010321160111DC068086070472DE9F0419E -:1003F00017460D460646002406E03046296800F000 -:10040000A7F8641C2D1D361DBC42F6D3BDE8F08153 -:1004100070B50C4605464FF4806608E0284600F0AB -:1004200084F8B44205D3A4F5806405F58055002C0A -:10043000F4D170BD4168044609B1012500E00025F2 -:100440004FF010267069A268920000F0BDF9C8B1A3 -:10045000204600F01AF89DB17669A56864684FF4EB -:10046000002084420AD2854208D229463046FFF74E -:10047000CFFF2A4621463046FFF7B8FFFFF79FFF20 -:10048000FFF791FFFFF746FEF8E72DE9FF414FF038 -:100490001024616980680D0B01EB800000F6FF708D -:1004A000010B0020009001900290024603906846E4 -:1004B00001230BE0560902F01F0C50F8267003FAD6 -:1004C0000CFC47EA0C0740F82670521CAA42F1D3F4 -:1004D0000AE04A0901F01F0650F8225003FA06F616 -:1004E000354340F82250491C8029F2D3A169090BF9 -:1004F0004A0901F01F0150F822408B409C4340F80C -:100500002240FFF765FFBDE8FF8100005C090000A5 -:10051000000000200CED00E00400FA050006004099 -:10052000144801680029FCD07047134A0221116069 -:1005300010490B68002BFCD00F4B1B1D186008687E -:100540000028FCD00020106008680028FCD070470C -:10055000094B10B501221A60064A1468002CFCD021 -:10056000016010680028FCD0002018601068002886 -:10057000FCD010BD00E4014004E5014008208F4993 -:1005800009680958084710208C4909680958084724 -:1005900014208A49096809580847182087490968BA -:1005A0000958084730208549096809580847382004 -:1005B00082490968095808473C2080490968095858 -:1005C000084740207D4909680958084744207B496D -:1005D00009680958084748207849096809580847B0 -:1005E0004C20764909680958084750207349096822 -:1005F0000958084754207149096809580847582084 -:100600006E490968095808475C206C49096809580F -:100610000847602069490968095808476420674904 -:100620000968095808476820644909680958084753 -:100630006C20624909680958084770205F490968B9 -:100640000958084774205D49096809580847782007 -:100650005A490968095808477C20584909680958C7 -:10066000084780205549096809580847842053499C -:1006700009680958084788205049096809580847F7 -:100680008C204E4909680958084790204B49096851 -:10069000095808479420494909680958084798208B -:1006A00046490968095808479C204449096809587F -:1006B0000847A0204149096809580847A4203F4934 -:1006C000096809580847A8203C490968095808479B -:1006D000AC203A49096809580847B02037490968E9 -:1006E00009580847B4203549096809580847B8200F -:1006F0003249096809580847BC2030490968095837 -:100700000847C0202D49096809580847C4202B49CB -:10071000096809580847C82028490968095808473E -:10072000CC202649096809580847D0202349096880 -:1007300009580847D4202149096809580847D82092 -:100740001E49096809580847DC201C4909680958EE -:100750000847E0201949096809580847E420174963 -:10076000096809580847E8201449096809580847E2 -:10077000EC201249096809580847F0200F49096818 -:1007800009580847F4200D49096809580847F82016 -:100790000A49096809580847FC20084909680958A6 -:1007A00008475FF480700549096809580847000048 -:1007B00003480449024A034B704700000000002030 -:1007C000680900006809000040EA010310B59B07B2 -:1007D0000FD1042A0DD310C808C9121F9C42F8D0AB -:1007E00020BA19BA884201D9012010BD4FF0FF305C -:1007F00010BD1AB1D30703D0521C07E0002010BD72 -:1008000010F8013B11F8014B1B1B07D110F8013BFD -:1008100011F8014B1B1B01D1921EF1D1184610BDDE -:1008200002F0FF0343EA032242EA024200F005B865 -:100830007047704770474FF000020429C0F01280E3 -:1008400010F0030C00F01B80CCF1040CBCF1020F83 -:1008500018BF00F8012BA8BF20F8022BA1EB0C0158 -:1008600000F00DB85FEAC17C24BF00F8012B00F84E -:10087000012B48BF00F8012B70474FF0000200B574 -:10088000134694469646203922BFA0E80C50A0E8B3 -:100890000C50B1F12001BFF4F7AF090728BFA0E861 -:1008A0000C5048BF0CC05DF804EB890028BF40F82D -:1008B000042B08BF704748BF20F8022B11F0804F6F -:1008C00018BF00F8012B7047014B1B68DB68184705 -:1008D0000000002009480A497047FFF7FBFFFFF7B7 -:1008E00011FC00BD20BFFDE7064B1847064A10600B -:1008F000016881F30888406800470000680900002B -:10090000680900001F030000000000201EF0040F13 -:100910000CBFEFF30881EFF3098188690238007892 -:10092000182803D100E00000074A1047074A126860 -:100930002C3212681047000000B5054B1B68054AB1 -:100940009B58984700BD00000703000000000020EE -:100950005809000004000000001000000000000022 -:0809600000FFFFFF0090D0032F -:10100000E8120020111D0200152F0000831C0200B1 -:10101000152F0000152F0000152F00000000000004 -:10102000000000000000000000000000691D020038 -:10103000152F000000000000152F0000152F0000E4 -:10104000D11D0200D71D0200152F0000152F000032 -:10105000152F0000152F0000152F0000152F000080 -:10106000DD1D0200152F0000152F0000E31D0200FA -:10107000152F0000E91D0200EF1D0200F51D020002 -:10108000152F0000152F0000152F0000152F000050 -:10109000152F0000152F0000152F0000152F000040 -:1010A000152F0000FB1D0200152F0000152F00005A -:1010B000152F0000152F0000152F0000152F000020 -:1010C000011E0200152F0000152F0000152F000033 -:1010D000152F0000152F0000152F0000152F000000 -:1010E000152F0000152F0000152F0000152F0000F0 -:1010F000152F0000152F0000152F0000152F0000E0 -:10110000152F0000152F000000F002F820F0EDFD73 -:101110000AA090E8000C82448344AAF10107DA4552 -:1011200001D120F0E2FDAFF2090EBAE80F0013F092 -:10113000010F18BFFB1A43F0010318471C130200EC -:101140003C1302000A444FF0000C10F8013B13F06E -:10115000070408BF10F8014B1D1108BF10F8015B10 -:10116000641E05D010F8016B641E01F8016BF9D103 -:1011700013F0080F1EBF10F8014BAD1C0C1B09D15A -:101180006D1E58BF01F801CBFAD505E014F8016BCC -:1011900001F8016B6D1EF9D59142D6D3704700005E -:1011A0000023002400250026103A28BF78C1FBD870 -:1011B000520728BF30C148BF0B6070471FB500F011 -:1011C0003DF88DE80F001FBD1EF0040F0CBFEFF3BC -:1011D0000880EFF30980014A104700006F2E0000DD -:1011E0008269034981614FF001001044704700009B -:1011F000F511000001B41EB400B512F0AFFD01B44A -:101200000198864601BC01B01EBD0000F0B4404606 -:10121000494652465B460FB402A0013001B506486C -:10122000004700BF01BC86460FBC804689469246F7 -:101230009B46F0BC704700000911000020F052BD31 -:1012400070B51A4C054609202070A01C00F05FF80C -:101250005920A08029462046BDE8704007F0F1BF24 -:1012600007F0FABF70B50C461149097829B1A0F111 -:101270006001552908D3012013E0602804D06928B3 -:1012800002D043F201000CE020CC0A4E94E80E009C -:1012900006EB8000A0F58050241FD0F8806E284611 -:1012A000B047206070BD012070470000080000209A -:1012B0001C0000204C1E020010B504460021012035 -:1012C00000F03BF800210B2000F037F80421192032 -:1012D00000F033F804210D2000F02FF804210E2037 -:1012E00000F02BF804210F2000F027F80421C84358 -:1012F00000F023F80621162000F01FF80621152023 -:1013000000F01BF82046FFF79BFF002010BD9D2139 -:1013100001807047FFF7A4BF10487047104A10B50E -:1013200014680F4B0F4A08331A60FFF79BFF0C48F5 -:10133000001D046010BD704770474907090E002862 -:1013400006DA00F00F0000F1E02080F8141D70476D -:1013500000F1E02080F800147047000003F900421B -:101360001005024001000001FE48002101604160BB -:10137000018170472DE9F743044692B091464068D9 -:1013800012F0B2FF40B1606812F0B7FF20B9607888 -:1013900000F00300022801D0012000E00020F14EFF -:1013A0004D463072484612F05BFF18B1102015B060 -:1013B000BDE8F0832946012001F029FF0028F6D17D -:1013C00001258DF842504FF4C050ADF84000002286 -:1013D00010A9284606F0FAFB0028E8D18DF8425003 -:1013E0004FF428504FF00008ADF8400047461C214C -:1013F0006846CDF81C8020F018FC9DF81C0008AA57 -:1014000020F00F00401C20F0F00010308DF81C0080 -:1014100020788DF81D0061789DF81E0061F3420070 -:1014200040F001008DF81E009DF800000AA940F070 -:1014300002008DF800002089ADF83000ADF8327060 -:10144000608907AFADF834000B97606810AC0E9060 -:101450000A94684606F0AFF90028A8D1BDF820002C -:1014600030808DF8425042F60120ADF840009DF8E2 -:101470001E0008AA20F00600801C20F001008DF854 -:101480001E000220ADF83000ADF8340013A80E9015 -:101490000AA9684606F08FF9002888D1BDF8200017 -:1014A0007080311D484600F033F9002887D18DF84F -:1014B000425042F6A620ADF840001C216846CDF807 -:1014C0001C8020F0B2FB9DF81C00ADF8345020F0D9 -:1014D0000F00401C20F0F00010308DF81C009DF82B -:1014E0001D0008AA20F0FF008DF81D009DF81E00C9 -:1014F0000AA920F0060040F00100801C8DF81E00B3 -:101500009DF800008DF8445040F002008DF8000076 -:10151000CDE90A4711A80E90ADF83050684606F0A4 -:101520004AF9002899D1BDF82000F08000203EE75C -:101530003EB504460820ADF80000204612F090FEAB -:1015400008B110203EBD2146012001F060FE0028B8 -:10155000F8D12088ADF804006088ADF80600A088B6 -:10156000ADF80800E088ADF80A007E4801AB6A4695 -:101570008088002106F024FDBDF800100829E1D084 -:1015800003203EBD1FB50446002002900820ADF8A0 -:101590000800CDF80CD0204612F062FE10B11020E9 -:1015A00004B010BD6F4802AA81884FF6FF7006F0A4 -:1015B0004EFF0028F4D1BDF80810082901D00320FF -:1015C000EEE7BDF800102180BDF802106180BDF883 -:1015D0000410A180BDF80610E180E1E701B582B0FA -:1015E0000220ADF800005F4802AB6A464088002147 -:1015F00006F0E6FCBDF80010022900D003200EBD65 -:101600001CB5002100910221ADF80010019012F0EC -:101610004DFE08B110201CBD52486A4641884FF665 -:10162000FF7006F014FFBDF800100229F3D003206C -:101630001CBDFEB54B4C06461546207A0F46C0072A -:1016400005D0084612F00CFE18B11020FEBD0F2088 -:10165000FEBDF82D01D90C20FEBD304612F000FE73 -:1016600018BB208801A905F0ECFD0028F4D13078E2 -:101670008DF80500208801A906F081FC0028EBD137 -:1016800000909DF800009DF8051040F002008DF8D4 -:101690000000090703D040F008008DF80000208802 -:1016A000694606F009FC0028D6D1ADF8085020881C -:1016B0003B4602AA002106F083FCBDF80810A942AF -:1016C000CAD00320FEBD7CB50546002000900190E5 -:1016D0000888ADF800000C462846019512F004FE7B -:1016E00018B9204612F0E2FD08B110207CBD15B1FA -:1016F000BDF8000050B11B486A4601884FF6FF70E4 -:1017000006F0A5FEBDF8001021807CBD0C207CBD3C -:1017100030B593B0044600200D460090142101A876 -:1017200020F083FA1C2108A820F07FFA9DF8000021 -:10173000CDF808D020F00F00401C20F0F000103051 -:101740008DF800009DF8010020F0FF008DF80100E9 -:101750009DF8200040F002008DF8200001208DF857 -:10176000460001E0E201002042F60420ADF844000A -:1017700011A801902088ADF83C006088ADF83E00CB -:10178000A088ADF84000E088ADF842009DF8020066 -:1017900006AA20F00600801C20F001008DF802004F -:1017A0000820ADF80C00ADF810000FA8059001A9B5 -:1017B00008A806F000F8002803D1BDF8180028801A -:1017C000002013B030BD0000F0B5007B059F1E4621 -:1017D00014460D46012800D0FFDF0C2030803A204F -:1017E0003880002C08D0287A052806D0287B0128CC -:1017F00000D0FFDF17206081F0BDA889FBE72DE94D -:10180000F04786B0144691F80C900E9A0D46B9F147 -:10181000010F0BD01021007B2E8A8846052807D0A7 -:10182000062833D0FFDF06B0BDE8F0870221F2E7DB -:10183000E8890C2100EB400001EB400018803320C8 -:101840001080002CEFD0E889608100271AE0009614 -:10185000688808F1020301AA696900F07AFF06EBC3 -:101860000800801C07EB470186B204EB4102BDF87B -:10187000040090810DF1060140460E3210F04CFD3F -:101880007F1CBFB26089B842E1D8CCE73420108019 -:10189000E889B9F1010F11D0122148430E301880A8 -:1018A000002CC0D0E88960814846B9F1010F00D012 -:1018B0000220207300270DF1040A1FE00621ECE747 -:1018C0000096688808F1020301AA696900F041FFE7 -:1018D00006EB0800801C86B2B9F1010F12D007EBAD -:1018E000C70004EB4000BDF80410C18110220AF1CA -:1018F0000201103020F000F97F1CBFB26089B842AD -:10190000DED890E707EB470104EB4102BDF8040085 -:10191000D0810AF102014046103210F0FDFCEBE7E5 -:101920002DE9F0470E4688B090F80CC096F80C8070 -:10193000378AF5890C20109902F10C044FF0000A47 -:10194000BCF1030F08D0BCF1040F3ED0BCF1070F6F -:101950007DD0FFDF08B067E705EB850C00EB4C009E -:10196000188031200880002AF4D0A8F1060000F089 -:10197000FF09558125E0182101A820F056F90097AC -:101980007088434601AA716900F0E3FEBDF80400C7 -:101990002080BDF80600E080BDF808002081A21C70 -:1019A0000DF10A01484610F0B7FCB9F1000F00D064 -:1019B00018B184F804A0A4F802A007EB080087B2CD -:1019C0000A346D1EADB2D6D2C4E705EB850C00EB30 -:1019D0004C00188032200880002ABBD0A8F10500F6 -:1019E00000F0FF09558137E000977088434601AA4F -:1019F000716900F0AEFE9DF80600BDF80410E180AC -:101A00002179420860F3000162F34101820862F328 -:101A10008201C20862F3C301020962F304114209A0 -:101A200062F34511820962F386112171C009607168 -:101A3000BDF80700208122460DF10901484610F04B -:101A40006BFC18B184F802A0A4F800A000E007E045 -:101A500007EB080087B20A346D1EADB2C4D279E735 -:101A6000A8F1020084B205FB08F000F10E0CA3F807 -:101A700000C035230B80002AA6D0558194810097A1 -:101A800083B270880E32716900F063FE62E72DE95F -:101A9000F84F1E460A9D0C4681462AB1607A00F531 -:101AA0008070D080E089108199F80C000C274FF0ED -:101AB00000084FF00E0A0D2873D2DFE800F09E07F1 -:101AC0000E1C28303846556A737373002146484609 -:101AD0000095FFF779FEBDE8F88F207B9146082836 -:101AE00002D0032800D0FFDF378030200AE000BF9B -:101AF000A9F80A80EFE7207B9146042800D0FFDF99 -:101B0000378031202880B9F1000FF1D1E3E7207B45 -:101B10009146042800D0FFDF37803220F2E7207B97 -:101B20009146022800D0FFDF37803320EAE7207B90 -:101B30001746022800D0FFDF3420A6F800A0288036 -:101B4000002FC8D0A7F80A80C5E7207B17460428D5 -:101B500000D0FFDF3520A6F800A02880002FBAD0E3 -:101B60004046A7F80A8012E0207B1746052802D0DD -:101B7000062800D0FFDF1020308036202880002F7C -:101B8000A9D0E0897881A7F80E80B9F80E00B88155 -:101B9000A1E7207B9146072800D0FFDF3780372060 -:101BA000B0E72AE04FF0120018804FF0380017001D -:101BB000288090D0E0897881A7F80E80A7F810805F -:101BC00099F80C000A2805D00B2809D00C280DD054 -:101BD000FFDF80E7207B0C2800D0FFDF01200AE038 -:101BE000207B0D2800D0FFDF042004E0207B0E289E -:101BF00000D0FFDF052038736DE7FFDF6BE770B5BE -:101C00000C46054601F076FA20B10078222804D26D -:101C1000082070BD43F2020070BD052128460EF079 -:101C20001DFF206008B1002070BD032070BD2DE9AC -:101C3000FF4784B00027824602970798904689465E -:101C400012300AF0E2F8401D20F00306079828B988 -:101C500007A95046FFF7D3FF002853D1B9F1000F71 -:101C600005D00798017B19BB052504681BE098F88F -:101C70000000092803D00F2812D0FFDF45E00799A4 -:101C800003254868B0B3497B42887143914238D9F3 -:101C90008AB2B3B2011D0EF03AFD0446078002E09D -:101CA000079C042508340CB1208810B1032D28D0DE -:101CB0002BE00798012112300AF0DFF8ADF80C0094 -:101CC000024602AB2946504608F0B1F9070001D19F -:101CD000A01C029007983A461230C8F80400A8F8F1 -:101CE00002A003A94046029B0AF0D4F8C0B107281D -:101CF00014D200E005E0DFE800F0060811110F0A39 -:101D00000C00132026E6002024E6112022E60820FD -:101D100020E643F203001DE607201BE6032019E638 -:101D2000BDF80C002346CDE900702A4650460799BD -:101D300000F035FD57B9032D08D10798B3B2417BA8 -:101D4000406871438AB2011D0EF0F5FCB9F1000F35 -:101D5000D9D0079981F80C90D5E72DE9FE4F91462F -:101D60001A881C468A468046FAB102AB494608F0FA -:101D70005EF9050019D04046A61C27880EF08AFFA0 -:101D80003246072629463B4600960EF049FB20883E -:101D90002346CDE900504A465146404600F0FFFC3C -:101DA000002020800120BDE8FE8F0020FBE710B559 -:101DB00086B01C46AAB104238DF800301388ADF814 -:101DC00008305288ADF80A208A788DF80E200988EC -:101DD000ADF80C1000236A462146FFF728FF06B035 -:101DE00010BD1020FBE770B50D4605210EF036FE44 -:101DF000040000D1FFDF294604F11200BDE8704065 -:101E00000AF024B82DE9F8430D468046002607F075 -:101E1000CCFA0446287812287BD2DFE800F07A5406 -:101E2000543C355632321332323209323232323287 -:101E30002879001FC0B2022801D0102810D114BB8D -:101E4000FFDF35E004B9FFDF052140460EF006FE56 -:101E5000007B032806D004280BD0072828D0FFDFFA -:101E6000072657E02879801FC0B2022820D050B141 -:101E7000F6E72879401FC0B2022819D0102817D0E1 -:101E8000EEE704B9FFDF13E004B9FFDF287901288A -:101E90000ED1172139E0052140460EF0DFFD070085 -:101EA00000D1FFDF07F11201404609F0A6FF2CB177 -:101EB0002A462146404600F05CFC2BE013214046B8 -:101EC00002F0AAFC26E0FFDF24E004B9FFDF0521D1 -:101ED00040460EF0C3FD060000D1FFDF694606F163 -:101EE000120009F094FF060000D0FFDFA98817292F -:101EF00001D2172200E00A46BDF80000824202D952 -:101F0000014602E005E01729C3D3404600F057FC24 -:101F1000CEE7FFDF3046BDE8F883401D20F0030226 -:101F200019B102FB01F0001D00E0002010447047D1 -:101F300013B5009850B100244FEA0D000EF091FB4C -:101F4000002C02D1F84A009911601CBD0124002028 -:101F5000F4E72DE9F0470C461546242120461FF0F2 -:101F600064FE05B9FFDFA87860732888DFF8B8A39E -:101F7000401D20F00301AF788946DAF800000EF02A -:101F80008EFB060000D1FFDF4FF000082660A6F8A8 -:101F9000008077B109FB07F1091D0AD0DAF80000CB -:101FA0000EF07DFB060000D1FFDF6660C6F8008002 -:101FB00001E0C4F80480298804F11200BDE8F0476C -:101FC00009F00DBF2DE9F047804601F112000D46E2 -:101FD000814609F01AFF401DD34F20F003026E7BAB -:101FE0001446296838680EF085FB3EB104FB06F202 -:101FF000121D03D0696838680EF07CFB05200EF0D6 -:10200000D7FC044605200EF0DBFC201A012802D183 -:1020100038680EF039FB49464046BDE8F04709F004 -:10202000F3BE70B5054605210EF018FD040000D181 -:10203000FFDF04F112012846BDE8704009F0DDBE63 -:102040002DE9F04F91B04FF0000BADF834B0ADF882 -:1020500004B047880C4605469246052138460EF0E6 -:10206000FDFC060000D1FFDF24B1A780A4F806B074 -:10207000A4F808B0297809220B20B2EB111F297AA5 -:102080007DD104F110023827C91E4FF00C094FF022 -:10209000010803920F2973D2DFE801F0F4F3F28113 -:1020A00008D48A8FA13DDDF5F0B8B800307B022856 -:1020B00000D0FFDFA88909EBC001ADF80410302182 -:1020C000ADF83410002C25D06081B5F80E900027B3 -:1020D0001DE004EBC708317C88F80E10F189A8F8E0 -:1020E0000C10CDF800906888042304AA296900F038 -:1020F00030FBBDF81010A8F8101009F10400BDF86D -:1021000012107F1C1FFA80F9A8F81210BFB2608964 -:10211000B842DED80FE1307B022800D0FFDFE9892A -:1021200009EBC100ADF804003020ADF83400287B85 -:102130000A90001FC0B20F90002CEBD06181B5F85F -:102140001090002727E000BFCDF8009068886969EB -:1021500003AA0A9B00F0FDFA0A9904EBC70809EBF1 -:1021600001001FFA80F908F10C0204A90F9810F081 -:10217000D3F818B188F80EB0A8F80CB001E0D7E099 -:10218000D4E0BDF80C10A8F81010BDF80E107F1C9C -:10219000A8F81210BFB26089B842D5D8CBE00DA81C -:1021A000009001AB224629463046FFF728FBC2E0EB -:1021B000307B082805D0FFDF03E0307B082800D003 -:1021C000FFDFE8891030ADF804003620ADF83400A8 -:1021D000002C3FD0A9896181F189A18127E0307B62 -:1021E000092800D0FFDFA88900F10C01ADF8041028 -:1021F0003721ADF83410002C2CD06081E889009094 -:10220000AB89688804F10C02296956E0E889392114 -:10221000103080B2ADF80400ADF83410002C74D04A -:10222000A9896181287A10280AD002212173E989BD -:10223000E181288A0090EB8968886969039A3CE00B -:102240000121F3E70DA8009001AB22462946304654 -:10225000FFF766FB6FE0307B0A2800D0FFDF12201B -:10226000ADF80400ADF834704CB3A9896181A4F8CD -:1022700010B0A4F80EB084F80C805CE020E002E01E -:1022800031E039E042E0307B0B2800D0FFDF288AC4 -:10229000ADF834701230ADF8040084B1042121731C -:1022A000A9896181E989E181298A2182688A00906E -:1022B0002B8A688804F11202696900F04AFA3AE050 -:1022C000307B0C2800D0FFDF1220ADF80400ADF801 -:1022D00034703CB305212173A4F80AB0A4F80EB001 -:1022E000A4F810B027E00DA8009001AB22462946C3 -:1022F0003046FFF769FA1EE00DA8009001AB2246B8 -:1023000029463046FFF7C3FB15E036E03B21ADF828 -:102310000400ADF8341084B3A4F80680A4F808B023 -:1023200084F80AB007E0000010000020FFDF02E0A0 -:10233000012919D0FFDFBDF80400AAF800007CB124 -:10234000BDF834002080BDF804006080BDF8340082 -:10235000392805D03B2803D03C2801D086F80CB0A2 -:1023600011B00020BDE8F08F3C21ADF80400ADF8BD -:10237000341014B1697AA172DDE7FFE7AAF8000012 -:10238000EEE72DE9F84356880F46804615460521AD -:1023900030460EF063FB040000D1FFDF12340094DE -:1023A0003B46414630466A6809F02EFFB3E570B5FA -:1023B0000D4605210EF052FB040000D1FFDF294637 -:1023C00004F11200BDE8704009F02CBD70B50D4657 -:1023D00005210EF043FB040000D1FFDF294604F184 -:1023E0001200BDE8704009F050BD70B505460521EA -:1023F0000EF034FB040000D1FFDF04F10803214696 -:102400002846BDE870400422A7E470B505460521C2 -:102410000EF024FB040000D1FFDF2146284623688C -:10242000BDE87040052298E470B5064605210EF01F -:1024300015FB040000D1FFDF04F1120009F0E5FCF8 -:10244000401D20F0030511E0011D00880322431800 -:1024500021463046FFF781FC00280BD0607BABB2F1 -:10246000684382B26068011D0EF09BF96068418884 -:102470000029E9D170BD70B50E46054606F095FFFE -:10248000040000D1FFDF0120207266726580207891 -:1024900020F00F00C01C20F0F00030302070BDE8AC -:1024A000704006F085BF2DE9F0438BB00D46144611 -:1024B000814606A9FFF7A3FB002814D14FF6FF764B -:1024C00001274FF420588CB103208DF80000102014 -:1024D000ADF8100007A8059007AA204604A90FF040 -:1024E0003AFF78B107200BB0BDE8F0830820ADF8C3 -:1024F00008508DF80E708DF80000ADF80A60ADF848 -:102500000C800CE00698A17801742188C1818DF8B7 -:102510000E70ADF80850ADF80C80ADF80A606A4650 -:1025200002214846069BFFF782FBDCE708B5012243 -:102530008DF8022042F60202ADF800200A4603237D -:102540006946FFF734FC08BD08B501228DF802206A -:1025500042F60302ADF800200A4604236946FFF75D -:1025600026FC08BD00B587B079B102228DF80020A5 -:102570000A88ADF808204988ADF80A1000236A4699 -:102580000521FFF754FB07B000BD1020FBE709B1A0 -:1025900007230CE40720704770B588B00D46144639 -:1025A000064606A9FFF72BFB00280ED17CB10620BA -:1025B000ADF808508DF80000ADF80A40069B6A4659 -:1025C0000821DC813046FFF732FB08B070BD0520E2 -:1025D0008DF80000ADF80850F0E700B587B059B1AC -:1025E00007238DF80030ADF80820039100236A46D8 -:1025F0000921FFF71CFBC6E71020C4E770B588B0BF -:102600000C460646002506A9FFF7F9FA0028DCD19A -:1026100006980121123009F030FC9CB1217806297E -:1026200021D2DFE801F0200505160318801E80B2D4 -:10263000C01EE28880B20AB1A3681BB1824203D9EE -:102640000C20C2E71020C0E7042904D0A08850B9AC -:1026500001E00620B9E7012913D0022905D0042999 -:102660001CD005292AD00720AFE709208DF80000EB -:102670006088ADF80800E088ADF80A00A068039013 -:1026800023E00C208DF800006088ADF80800E08899 -:10269000ADF80A00A0680A25039016E00D208DF819 -:1026A00000006088ADF80800A088ADF80A00E08856 -:1026B000ADF80C00A0680B25049006E00E208DF804 -:1026C000000060788DF808000C256A4629463046DF -:1026D000069BFFF7ACFA78E700B587B00F228DF8BC -:1026E0000020ADF8081000236A461946FFF79FFA4C -:1026F00049E700B587B071B102228DF800200A8841 -:10270000ADF808204988ADF80A1000236A46062172 -:10271000FFF78DFA37E7102035E770B586B006462B -:1027200001200D46ADF808108DF800000146002389 -:102730006A463046FFF77BFA040008D12946304646 -:1027400005F058FC0021304605F072FC204606B02A -:1027500070BDF8B51C4615460E46069F0EF088FA69 -:102760002346FF1DBCB231462A4600940DF01FFEE1 -:10277000F8BD10B548800878144620F00F00C01C42 -:1027800020F0F00090300B4608701822214603F12B -:1027900008001FF0F6F9BDE8104006F009BE30B49D -:1027A0001146DDE902423CB1032903D0002330BCCD -:1027B00008F0D3BA0123FAE71A8030BC704770B52D -:1027C0000C460546FFF70FFB2146284605F021FC85 -:1027D0002846BDE87040012105F02ABC4FF0E022F8 -:1027E0004FF400410020C2F88011204908702049B0 -:1027F00090020860704730B51C4D04462878A0420E -:1028000018BF002C02D0002818BFFFDF2878A04294 -:1028100008BF30BD2C701749154A0020ECB1164D89 -:10282000DFF858C0131F012C0DD0022C1CBFFFDF96 -:1028300030BD086003200860CCF800504FF4000061 -:102840001060186030BD086002200860CCF80050AD -:102850004FF040701060186030BD086008604FF0A5 -:102860006070106030BD00B5FFDF00BD18000020B3 -:1028700008F5014000F500402403002014F5004055 -:1028800070B50B2000F0B5F9082000F0B2F9002176 -:102890000B2000F0C4F90021082000F0C0F9EC4C36 -:1028A00001256560A5600020C4F84001C4F844011A -:1028B000C4F848010B2000F0A7F9082000F0A4F9A3 -:1028C0000B2000F08BF9256070BD10B50B2000F0D7 -:1028D00090F9082000F08DF9DD4801214160816008 -:1028E000DC490A68002AFCD10021C0F84011C0F878 -:1028F0004411C0F848110B2000F086F9BDE81040E3 -:10290000082000F081B910B50B2000F07DF9BDE87A -:102910001040082000F078B900B530B1012806D089 -:10292000022806D0FFDF002000BDCB4800BDCB4809 -:1029300000BDCA48001D00BD70B5C9494FF0004038 -:102940000860C84DC00BC5F80803C74800240460E0 -:10295000C5F840410820C43500F04BF9C5F83C41AA -:10296000C248047070BD08B5B94A002128B10128D9 -:1029700011D002281CD0FFDF08BD4FF48030C2F810 -:102980000803C2F84803B3483C300160C2F8401164 -:10299000BDE80840D0E74FF40030C2F80803C2F8A1 -:1029A0004803AC4840300160C2F84411AB480CE029 -:1029B0004FF48020C2F80803C2F84803A548443009 -:1029C0000160C2F84811A548001D0068009008BDCC -:1029D00070B516460D460446022800D9FFDF0022D6 -:1029E0009B48012304F110018B4000EB8401C1F8E6 -:1029F000405526B1C1F84021C0F8043303E0C0F8C7 -:102A00000833C1F84021C0F8443370BD2DE9F041CE -:102A10001C46154630B1012834D0022839D0FFDFDA -:102A2000BDE8F081891E002221F07F411046FFF7AA -:102A3000CFFF012C24D000208C4E8A4F01247070CF -:102A40003C61894900203C3908600220091D08606A -:102A5000854904203039086083483D350560C7F852 -:102A60000042082000F0D0F82004C7F80403082032 -:102A700000F0B4F87A49E007091F08603470CFE726 -:102A80000120D9E7012B02D00022012005E001221C -:102A9000FBE7012B04D000220220BDE8F04197E7BC -:102AA0000122F9E76B480068704770B500F0C7F87D -:102AB000674C0546D4F840010026012809D1D4F816 -:102AC0000803C00305D54FF48030C4F80803C4F8E8 -:102AD0004061D4F8440101280CD1D4F808038003E4 -:102AE00008D54FF40030C4F80803C4F8446101204D -:102AF00010F0F6FBD4F8480101280CD1D4F80803F3 -:102B0000400308D54FF48020C4F80803C4F8486196 -:102B1000022010F0E5FB5648056070BD70B500F06E -:102B20008EF8524D0446287858B1FFF705FF6878B3 -:102B300020B1002085F8010010F0D2FB4C48046061 -:102B400070BD0320F8E74FF0E0214FF40010C1F80A -:102B500000027047152000F057B842490120086173 -:102B6000082000F051B83F494FF47C10C1F8080329 -:102B70000020024601EB8003C3F84025C3F8402142 -:102B8000401CC0B20628F5D37047410A43F60952EB -:102B90005143C0F3080010FB02F000F5807001EB18 -:102BA0005020704710B5430B48F2376463431B0C49 -:102BB0005C020C602F4C03FB04002F4B4CF2F724FB -:102BC00043435B0D13FB04F404EB402000F58070DD -:102BD0004012107008681844086010BD00F01F0211 -:102BE000012191404009800000F1E020C0F800116F -:102BF000704700F01F02012191404009800000F160 -:102C0000E020C0F88011704700F01F0201219140C0 -:102C10004009800000F1E020C0F8801270474907A9 -:102C2000090E002806DA00F00F0000F1E02080F81D -:102C3000141D704700F1E02080F8001470470C4824 -:102C4000001F00680A4A0D49121D116070470000FC -:102C500000B0004004B500404081004044B1004055 -:102C600008F501400080004040850040340000200D -:102C700014050240F7C2FFFF6F0C010001000001C4 -:102C80000A4810B50468094909480831086010F07D -:102C9000BBFB0648001D046010BD0649002008600B -:102CA0004FF0E0210220C1F8800270471005024079 -:102CB00001000001FC1F004010B50D2000F06FF86E -:102CC000C4B26FF0040000F06AF8C0B2844200D0D1 -:102CD000FFDF3A490120086010BD70B50D2000F0FB -:102CE00048F8374C0020C4F800010125C4F804530B -:102CF0000D2000F049F825604FF0E0216014C1F884 -:102D0000000170BD10B50D2000F033F82C480121F2 -:102D100041600021C0F80011BDE810400D2000F016 -:102D200033B8284810B50468264927480831086098 -:102D30002349D1F80001012804D0FFDF2148001DFC -:102D4000046010BD1D48001D00680022C0B2C1F81B -:102D5000002110F074FFF1E710B51948D0F8001108 -:102D60000029FBD0FFF7DDFFBDE810400D2000F08B -:102D70000BB800F01F02012191404009800000F1D2 -:102D8000E020C0F88011704700F01F02012191403F -:102D90004009800000F1E020C0F880127047002850 -:102DA00006DA00F00F0000F1E02090F8140D03E0C7 -:102DB00000F1E02090F800044009704704D500407D -:102DC00000D00040100502400100000110B5202095 -:102DD00000F075F8202000F07DF84449202081F8AB -:102DE0000004434900060860091D42480860FEF7D8 -:102DF00093FA3F49C83108603F48D0F8041341F0C6 -:102E00000101C0F80413D0F8041341F08071C0F838 -:102E10000413364901201C39C1F8000110BD10B55A -:102E2000202000F04CF8324800210160001D0160B4 -:102E30002F4A481EE83A10602F4AC2F808032C4B6C -:102E4000C8331960C2F80001C2F860012B4908605C -:102E5000BDE81040202000F03DB825492848EC3955 -:102E60000860704722492648E8390860704770B505 -:102E70001F4A8069E83A224911601F49D1F8006170 -:102E80000023204D1D4A5C1E1EB1A84206D300211E -:102E90000FE0D1F8606186B1A84209D2C1F80031D3 -:102EA000C1F860311460BDE87040202000F012B815 -:102EB0001168BDE870401EF0E3BEFFDF70BD00F09A -:102EC0001F02012191404009800000F1E020C0F87C -:102ED0008011704700F01F020121914040098000DD -:102EE00000F1E020C0F880127047000020E000E010 -:102EF000000602406413002000000240000402406B -:102F000001000001003002000F4A12680D498A4298 -:102F10000CD118470C4A12680A4B9A4206D101B5E7 -:102F200010F00EFFFFF799FFBDE80140074909685F -:102F30000958084706480749054A064B70470000EC -:102F400000000000BEBAFECAB0000020040000204D -:102F5000E8120020E812002070B50C46054609F082 -:102F6000F0FA21462846BDE870400AF0E2BB10B5F1 -:102F700011F054FBFFF732FC11F0F0F9BDE81040FE -:102F800011F0A2BA01208107086070470120810773 -:102F90004860704712480068C00700D001207047A1 -:102FA0000F48001F0068C00700D0012070470C4880 -:102FB00008300068C00700D0012070470848103072 -:102FC0000068704706490C310A68D20306D50968C3 -:102FD00001F00301814201D10120704700207047B8 -:102FE0000C0400407047704770477047704702F00C -:102FF000FF0343EA032242EA02421EF0F6BD704795 -:103000002CFFFFFFDBE5B151003002009D00FFFF08 -:1030100084000000404B4C0066D342DA82CFB49D5E -:10302000E40AD77E68976592800939FF30B5FF4D75 -:10303000044610280AD0112C06D02846122CC1783C -:1030400006D0132C08D0FFDFEC7030BDFFDFFBE7AC -:103050001129F9D0FFDFF7E71129F5D0FFDFF3E7FA -:1030600070B50FF0E3FA044610F0A0FC201AC4B2C9 -:1030700006200DF09DFC054606200DF0A1FC2E1A41 -:1030800007200DF095FC054607200DF099FCE74957 -:10309000281A3218C87812280DD000231A44132891 -:1030A0000BD0002002440878022808D000201044E9 -:1030B000201AC0B270BD0123F0E70120F2E7012021 -:1030C000F5E7DA4800B58079D849420897B051F859 -:1030D000070F89880CD017228DF80020CDF8020048 -:1030E000ADF806100BA968460AF0B4FF17B000BD92 -:1030F0004422F1E702210DF0B1BC2DE9F04196B078 -:103100001D4690460E460746FFF7F4FF04000BD01D -:103110002078222804D3A07FC0F34010A84206D113 -:10312000082016B0BDE8F08143F20200F9E749201B -:103130008DF80000ADF802703DB101208DF804005B -:103140008DF805608DF8068002E000208DF80400FF -:103150000BA968460AF07EFFA07F65F34510A077B3 -:103160000020DEE730B50446A1F120000D460A2814 -:103170004AD2DFE800F005070C1C2328353A3F440B -:10318000FFDF42E0207820283FD1FFDF3DE0A74865 -:103190000178032939D0C078132836D02078242824 -:1031A00033D0252831D023282FD0FFDF2DE0207801 -:1031B00022282AD0232828D8FFDF26E020782228BA -:1031C00023D0FFDF21E0207822281ED024281CD025 -:1031D00026281AD0272818D0292816D0FFDF14E077 -:1031E0002078252811D0FFDF0FE0207825280CD08B -:1031F000FFDF0AE02078252807D0FFDF05E02078F0 -:10320000282802D0FFDF00E0FFDF257030BD30B599 -:103210000B8840F67B444FF6FF72022801D09342A0 -:1032200004D09D1FA54224D2022802D04D88954289 -:1032300003D04D88AD1FA5421BD24C88A34218D89D -:103240008B88B3F5FA7F14D2022802D0C888904246 -:1032500005D0C88840F677450A38A84209D2C88800 -:10326000904208D0944206D05B1C6343B3EB800FBE -:1032700001DB072030BD002030BD70B514460D467F -:10328000064610F0EDFF60B90DB1A54201D90C2042 -:1032900070BD002409E000BF56F8240010F0E0FFE4 -:1032A00008B1102070BD641CE4B2AC42F4D300201D -:1032B00070BDF0B50024059D10B1A94203D850E0BF -:1032C00009B90020F0BD0920F0BD055DD5B1071991 -:1032D00097F801C0BCF1150F2DD03BDCBCF1150FE8 -:1032E00038D2DFE80CF037122020262628282F2F8E -:1032F000373737373737373737372000025D22BB4C -:10330000641CE4B28C42F9D3DBE7022DDBD1BD783B -:103310001D70072D01D26D0701D40A20F0BD15786C -:1033200045F0010515E0EF43FF0707E0012D07D049 -:1033300010E00620F0BD2F07A7F18057002FF5D031 -:103340003046F0BD1578AF0701D50B20F0BD45F034 -:1033500002051570055D641C2C44E4B28C4202D950 -:10336000B1E74FF448568C42AFD3AAE710B50278C4 -:10337000540809D0012243F20223012C07D0022C69 -:103380000DD0032C13D10FE00020087005E08079E8 -:103390000324B4EB901F0AD10A70002010BD80797D -:1033A000B2EB901F03D1F7E780798009F4D018467B -:1033B00010BD1E4A117C39B1517C022908D0032965 -:1033C00008D043F2022070470146901D01F0FCBC7A -:1033D000032100E0012101700020704738B50C4640 -:1033E0000546694601F0F0FC00280DD19DF800105B -:1033F000207861F34700207055F8010FC4F80100F0 -:10340000A888A4F80500002038BD38B51378E8B1C5 -:1034100002281BD006A46D46246800944C7905EB65 -:103420009414247864F34703137003E0CC01002064 -:103430000302FF0103280ED003F0FE00107008689D -:10344000C2F801008888A2F8050038BD23F0FE0309 -:1034500013700228E9D1D8B240F00100EEE730B590 -:103460000C46097897B0222902D2082017B030BD47 -:1034700028218DF80010ADF80200132A03D03B2A52 -:1034800001D00720F2E78DF804200BA968460AF066 -:10349000E1FD050003D121212046FFF763FE284608 -:1034A000E4E700B597B023218DF80010ADF80200D5 -:1034B0001088ADF804005088ADF80600D088ADF84B -:1034C0000A009088ADF808000020ADF80C00ADF8B7 -:1034D0000E000BA968460AF0BDFD07E600B597B0DF -:1034E0002C22FA4968461EF04CFB0020CDF8030060 -:1034F000ADF80700F648007C022801D0012000E06A -:1035000000208DF809000BA968460AF0A3FD0028E9 -:1035100000D0FFDFEAE52DE9FF470220EC4E8DF8F1 -:1035200004000027B08AADF80600B84643F202094D -:103530004DE001A80DF0FBF9050006D0B08AA8B354 -:10354000A6F81480ADF806803FE0039CA07F010739 -:103550002DD504F124000090A28EBDF8080021466C -:1035600004F1360301F00DFE050005D04D452BD0CA -:10357000112D3DD0FFDF3BE0A07F20F00800A077B9 -:10358000E07F810861F30000C10861F34100E0774A -:1035900094F8210000F01F0084F8200020782828EB -:1035A00027D129212046FFF7DDFD22E015E0400765 -:1035B0000BD5BDF80800214604F10E02FFF771FF9C -:1035C00005000DD04D4510D100257F1CFFB2022013 -:1035D0000DF0EEF9401CB842ABD8052D12D008E032 -:1035E000A07F20F00400A07703E0112D00D0FFDFC2 -:1035F0000025BDF80600B082052D05D0284604B090 -:10360000BDE8F087A6F814800020F8E770B50646FC -:10361000FFF770FD054605F0C8FE040000D1FFDF8E -:103620006680207820F00F00801C20F0F000203011 -:1036300020700620207295F83E006072BDE8704050 -:1036400005F0B6BE2DE9F04786B0040000D1FFDFDB -:1036500020789F4E20F00F00801C20F0F00070308A -:10366000207060680178091F182931D2DFE801F065 -:10367000FD30303053FC300CFCFC40FD3030FD762A -:10368000FDFD3030FDFDFBFA86883046FFF732FD48 -:103690000546304607F05FFAE0B16068807985F84A -:1036A0003E0021212846FFF75DFD3046FEF7B9FCBC -:1036B000304603F0C3FF3146022010F085FDA87F9D -:1036C00020F01000A877FFF726FF002800D0FFDFCA -:1036D00006B095E7207820F0F0002030207006201A -:1036E0002072668060688079607205F061FED8E7BC -:1036F00085882846FFF7FEFC00B9FFDF6068807808 -:10370000012800D0FFDF6068817906B02846BDE857 -:10371000F04707F0FDBD86883046FFF7EBFC05005B -:1037200000D1FFDF05F044FE60683146C088288183 -:1037300060680089688160684089A881022010F073 -:1037400043FD0020A875A87F00F003000228BFD128 -:10375000FFF7E1FE0028BBD0FFDFB9E780783C2807 -:1037600003D0002502280AD000E00125002720B15F -:103770003C2802D0022800D0FFDF17B1B8E00127B3 -:10378000F5E705F015FE1DB1B07801F0DCFAA1E017 -:103790006568B5F804A0A879AD1C012806D0307979 -:1037A000814605F097FB070003D101E0B078F7E709 -:1037B000FFDF0022022150460DF047F9040000D13E -:1037C000FFDF22212046FFF7CDFC2879012800D019 -:1037D0000220A17F804668F30101A177288B208118 -:1037E000688B6081A88BA08184F822908DF8088076 -:1037F000B8680090F86801906A46032150460DF0C1 -:1038000024F900B9FFDFB888ADF81000B8788DF85A -:10381000120004AA052150460DF017F900B9FFDF88 -:10382000B888ADF80C00F8788DF80E0003AA0421D2 -:1038300050460DF00AF900B9FFDF062105F112002C -:1038400001F0EDFA28B36879800700D5FFDF6979C8 -:10385000E07D61F34700E075D5F80600A061688956 -:10386000A08303E05EE057E050E062E0062105F14E -:103870000C0001F0D4FAB0B1B0794108607861F37E -:1038800047006070D6F80700C4F80200B6F80B00D5 -:1038900012E0E07D20F0FE00801CE075D5F81200FB -:1038A000A061E88ADCE7607820F0FE00801C607090 -:1038B000E868C4F80200288AE080B8F1010F09D056 -:1038C000B8F1020F14D0FFDF02E70000CC1F0200A6 -:1038D000CC0100203078032800D0FFDF002108460B -:1038E00010F072FC06B00120BDE8F04701F0FAB913 -:1038F000F078132800D0FFDF0021062010F064FCD0 -:1039000006B01120BDE8F047FFF790BB06B0204697 -:10391000BDE8F04701F0E6BE05F04AFDB07C40F09E -:10392000020004E005F044FDB07C40F00400B074F7 -:10393000CEE606B0BDE8F04705F03ABD2DE9F04708 -:1039400005460078914600270209FF480C463E468E -:10395000012A6DD000234FF6FF71022A69D0072A91 -:1039600009D00A2A71D0FFDFA9F800600CB12780C6 -:103970006680002044E6D5F804C09CF80060142E50 -:103980007DD010DC04F1080204F118080F2E21D0BC -:1039900004DC042E5AD0082E57D10DE0122E6FD021 -:1039A000132EF9D11FE0153E072E4ED2DFE806F0A8 -:1039B000C14D4D099FEAB00012271026BCF8040043 -:1039C00014E11C27092694B3BCF80200A0806868A3 -:1039D00000795AE11B2709264CB30320207268683E -:1039E0004088A080C0E79CF802003C2827D0102720 -:1039F00018260CF1020CD4B1BCF80200A080BCF86F -:103A000018006082BCF818002082BCF81A00A0825E -:103A1000BCF81C00E0829CF805000CF10601FFF7E1 -:103A2000F4FC9CF8040028B10120E0739CE703E05B -:103A3000BFE0DFE00220F8E7A9F8006099E71B2764 -:103A40000926002CF8D023728EE720E11D273726A7 -:103A5000002CF1D0A18069680879491DFFF7D5FCD9 -:103A6000686890F82B00A0756868C0780428E07D2D -:103A700016D020F00100E0756968C97801E06DE0BA -:103A800011E061F34200E07569681F22C97A61F3B1 -:103A9000C700E075696840460C311EF02DF863E7F9 -:103AA00040F00100E7E71D273726002CC4D0A18095 -:103AB0006868411D0079FFF7A8FC696804F10F02EE -:103AC00001F10C00CB7A01461846FFF79EFC6868AE -:103AD000807CA0756868C178E07D61F3420020F0C9 -:103AE000F900E0751F2140461EF09FF83CE72027B3 -:103AF0001026002CA0D0A180686804F10902407A49 -:103B000020726968CB1C88781946FFF77EFC2BE78A -:103B100021270A26002C8FD0BCF80210A1806968EA -:103B200009792172696849796172817C21F0040107 -:103B300057E022270B26002C84D0BCF80400A0807C -:103B40006868807820726868807901F077F960721F -:103B50006868C07901F072F9A07205E72427102681 -:103B6000002CA3D0BCF80200A080686800792081F6 -:103B70006868007A60816868C088A0816868408948 -:103B8000E081F1E623271026002C8FD0BCF802102C -:103B9000A1806968898821816968C98861816968AB -:103BA0000989A18169684989E181817C21F002014B -:103BB00017E0297A012903D0022914D0FFDFD3E6C8 -:103BC0001F271026002C95D06988A180A989218102 -:103BD000E9896181298AA181698AE181817C21F059 -:103BE00001018174C0E6122768881026214601F081 -:103BF00003F9B9E6287A072850D2DFE800F0373D0C -:103C00003D484848040011270926002C94D0B5F8F7 -:103C100002804046FFF76EFA90F822A0A4F80480D4 -:103C2000687A2072042140460CF02AFF05214046A4 -:103C30000CF026FF002140460CF022FF01214046F7 -:103C40000CF01EFF032140460CF01AFF02214046F3 -:103C50000CF016FF062140460CF012FF07214046EB -:103C60000CF00EFF504601F06EF87DE61B2709268A -:103C7000002C8AD0A180E6E61B270926002C84D0E0 -:103C8000A180287A012800D0022020726CE64A46E2 -:103C900021462846BDE8F04701F0AFBEFFDF63E6EE -:103CA00030B5294D97B0E878132802D0082017B016 -:103CB00030BD22208DF800000BA968460AF0CAF931 -:103CC000040002D1287901F03EF80021062010F00E -:103CD0007BFA2046EBE700B51B4897B0C078122866 -:103CE00001D0082016E41E208DF8000000208DF879 -:103CF00002008DF803000BA968460AF0ABF9002812 -:103D0000F0D10021062010F05FFA1120FFF78EF9A4 -:103D10000020E7E710B50C4C96B02078012815D0AC -:103D20001B208DF8000000208DF802000BA96846CA -:103D30000AF090F900280AD10021084610F044FA50 -:103D40002078032805D007E0CC010020082016B019 -:103D500010BDA07800F0F7FF012000F0C3FF0020A5 -:103D6000F5E770B5002538B1022817D0062836D0FF -:103D7000072800D0FFDF70BDFFF7CCFF0028FAD185 -:103D800005F013FB0028F6D0017821F00F01891C03 -:103D900021F0F0012031017005723FE08EB2304613 -:103DA000FFF7A8F9040000D1FFDF20782128E2D036 -:103DB00005F0FBFA60B1017821F00F01891C21F0B8 -:103DC000F00110310170022101724680A57525E0D5 -:103DD00021463046BDE870401322FFF740BBFE4845 -:103DE000C478122C03D0132C04D0FFDF70BDFFF772 -:103DF00072FF01E0FFF754FF0028F7D105F0D5FA74 -:103E00000028F3D0017821F00F01891C21F0F00186 -:103E100020310170122C05D002210172BDE87040E2 -:103E200005F0C6BA0121F8E72DE9F04116460C006D -:103E3000804600D1FFDF307820F00F00801C20F09A -:103E4000F000103030702078012804D0022817D0FC -:103E5000FFDFBDE8F0814046FFF74CF9050000D1D7 -:103E6000FFDF0320A87505F0A3FA94E80F000836D9 -:103E700086E80F00D848817C41F001018174E8E7B1 -:103E80004046FFF737F9050000D1FFDFA1884FF664 -:103E9000FF700027814202D1E288824203D0814232 -:103EA00001D1E08840B105F083FA94E80F000836AC -:103EB00086E80F00AF75CCE7A87D0128C9D178232B -:103EC00000224146022010F0D5F80220A875C0E774 -:103ED00030B5054697B00C46084610F0C1F978BBDE -:103EE00000210120203D072D73D2DFE805F00425D5 -:103EF0004C515A6640000021072010F03BF908B1F0 -:103F00001120D4E624208DF80000D4F80200CDF86A -:103F10000200A0798DF806000BA968460AF09AF80D -:103F2000050057D1002208231146072010F0A2F8FF -:103F300007284FD0FFDF4DE0606810F0D5F908B1D9 -:103F40001020B4E64A208DF800002088ADF8020069 -:103F50006088ADF804000BA968460AF07BF80500FC -:103F600038D1606898B3BDF83010018032E04C2041 -:103F70008DF800002088ADF80200A07800F0010064 -:103F80008DF8040014E0206801F0D5FF054621E01B -:103F90004B2207E08DF802000AE000BF8DF8021006 -:103FA00006E046228DF800202278D207F6D0F1E70D -:103FB0000BA968460AF04EF8E8E738208DF80000B3 -:103FC0002088ADF802006088ADF80400F0E701E059 -:103FD000FFE7072528466AE630B5054697B00C4648 -:103FE000084610F063F908B1102060E6203D072D67 -:103FF00027D2DFE805F00424242426262400208884 -:10400000FFF778F820B10078222804D208204EE685 -:1040100043F202004BE625208DF800002088ADF821 -:1040200002000BA968460AF015F80028DDD1DDF87A -:104030003210C4F802109DF83610A17137E6062040 -:1040400035E6072033E66448801D704738B51621F1 -:1040500061481DF0C8FD012000F044FE1120FEF76C -:10406000E5FF5D4C6846E11D05F0FFF89DF8001086 -:10407000A07961F3470020F00100A07100202074B6 -:104080004FF46170E08102206074FFF71AF800B10C -:10409000FFDFFDF769F901F0E2FA38BD10B50C4613 -:1040A000402120461DF09FFDA07F20F00300A07757 -:1040B000202020700020A07584F8230010BD7047D8 -:1040C0007CB5054610F0CCF808B110207CBD424C00 -:1040D000A11DD4F806000090D4F80A0001902846EB -:1040E000FFF77CF90028F1D1FEF7EBFF0028EDD0B7 -:1040F0000099C4F80610BDF8041061819DF80610FF -:1041000021737CBD10B5044610F0D0F808B1102022 -:1041100010BD314922468879C91D4008FFF775F95D -:10412000002010BD2DE9F0479CB00D4604004FF073 -:10413000000812D00822FFF7A0F800281CD10026A2 -:1041400009E000BF54F8260004A9FFF70FF9002882 -:1041500012D1761CF6B2AE42F4D32F460A2006AD39 -:104160000DF1440A8DF8180026465146284609F0FC -:1041700071FF20B143F203201CB0BDE8F087404638 -:10418000DFF8548088F805002EB300244FF00B09A7 -:104190001DE000BF56F8240005A9FFF7E7F800B1BD -:1041A000FFDF9DF81400A87056F8240050F8011F96 -:1041B000C5F803108088A5F8070085F800905146DF -:1041C000284609F047FF00B1FFDF641CE4B2BC429F -:1041D000E0D388F8057001E0CC0100200020CBE797 -:1041E0002DE9F0479EB01546894604001DD00F46C4 -:1041F00008222946FFF741F8002810D1002612E0D6 -:1042000054F8260005A9103000F0DEFD002806D184 -:104210003FB157F8260010F023F810B110201EB05F -:10422000ABE7761CF6B2AE42EAD30026A5F1010850 -:104230001CE000BF06F1010A0AF0FF0712E000BF10 -:1042400054F82600017C4A0854F827100B7CB2EB86 -:10425000530F05D10622113011311DF021FC78B128 -:104260007F1CFFB2AF42EBD30AF0FF064645E1DB0D -:10427000C8462E4607AD0DF1480924B1012003E0E0 -:1042800043F20520CBE700208DF81E0031208DF889 -:104290001C004946284609F0DDFE38B934208DF867 -:1042A0001C004946284609F0D5FE10B143F204200F -:1042B000B5E77CB300272BE054F82700A91C103089 -:1042C00000F082FD00B1FFDF54F82700102250F803 -:1042D000111FC5F803108088A5F8070054F82710AF -:1042E00005F109001DF008FCB8F1000F16D058F8D0 -:1042F0002710102205F119001DF0FEFB3220287056 -:104300004946284609F0A6FE00B1FFDF7F1CFFB238 -:10431000B742D1D3FFF7E2F8002080E705F119009A -:1043200001F0FDFDEAE770B596B004460FF098FF86 -:1043300018B960680FF0E1FF10B1102016B070BD21 -:1043400060884AF2B811884207D82078FE4D6E4640 -:1043500028B1012806D0022804D00720EEE7FEF796 -:10436000B0FE1AE06078022804D0032802D043F29D -:104370000220E3E7687417208DF80000697C0020B4 -:10438000CDF80200ADF80600022934D003292FD061 -:10439000FFDF0BA9684609F05DFE0028CED16068FA -:1043A00001F0B0FD207870B101208DF80200F01C02 -:1043B00001F0B5FD4E208DF800000BA9684609F00C -:1043C00049FE00B1FFDF20782874FFF787F8608886 -:1043D00098B1E88180B2ADF8020030208DF800007D -:1043E0000BA9684609F036FE00B1FFDF0020A5E703 -:1043F0008DF80700CDE74020FAE74FF46170E8E759 -:1044000010B504460FF052FF20B9606838B10FF0C4 -:104410006BFF08B1102010BD606801F080FDCA4834 -:10442000C1896180417C6170007C2070002010BDDA -:104430002DE9F0419CB0054600208DF864008DF810 -:1044400060008DF830008DF868001E4614468846DE -:1044500028460FF052FF18B920460FF04EFF10B15A -:1044600010201CB0F5E455EA040018D01F270CAB4F -:1044700019AA414628460097FEF71BFF0028F0D1F5 -:104480001AAB18AA314620460097FEF712FF002803 -:10449000E7D19DF86000C00703D00A20E1E70720BC -:1044A000DFE701AF7DB11A208DF804008DF806809A -:1044B00042462946F81C1DF01FFB0DA901A809F072 -:1044C000C9FD0028CDD17CB120208DF804008DF8E5 -:1044D000066032462146F81C1DF00EFB0DA901A80E -:1044E00009F0B8FD0028BCD197499DF8300048700C -:1044F0000020B6E72DE9F0479CB08A464FF000084F -:1045000092A104468DF83480D1E90001CDE919016A -:1045100020460FF0A5FE90B92078012803D16068ED -:104520000FF09EFE58B9884D4FF00109287C40B12C -:10453000687C022805D160680FF0DFFE08B110200A -:104540001AE62878012801D0082015E607200CF08B -:1045500037FA18B9207878B101280DD0FEF780FD20 -:1045600060B1608943F6E172A0F1200191422178A7 -:104570000CD3012904D0B6E01220FDE51320FBE5A1 -:1045800000287DD1A18900297AD109E0012907D02D -:104590006978C90704D0A189002971D0B4296FD8DE -:1045A000217831B1012908D0022904D0032967D12B -:1045B0000AE0002609E0022607E008B9A08908B150 -:1045C000042609E0012607E00326287C50B1687C18 -:1045D000022807D1606828B10DA96068FEF7C6FE01 -:1045E0000028ADD1207A30B1012806D0022806D0AB -:1045F000032878D105E0002704E0012702E0022724 -:1046000000E003270EB1022E0ED16FB16879B8B366 -:104610006878800702D043F20120ADE5022E03D175 -:10462000022F60D0032F5ED0207808B1012806D178 -:10463000504600F06BFB002887D185F802A01820B7 -:104640008DF838006089ADF83A006089ADF83C001B -:104650008DF83E600DF13F00FEF7ABFE00B1FFDFCD -:104660009DF834008DF840002078012806D0287C81 -:1046700068B1687C02280AD1606840B1606800E0D7 -:1046800031E050F8011FCDF84110808802E040462B -:10469000CDF84180ADF845008DF84870A07BC0F39F -:1046A0004002014662F35F01C0F3800041EA8000EE -:1046B00019A9085C8DF84700A8B169460EA809F051 -:1046C000C9FC0028A9D11B208DF838008DF83A903C -:1046D00069460EA809F0BEFC00289ED19DF8010095 -:1046E0001B281CD101E0072046E5052E0CD2DFE88F -:1046F00006F0030308080300A87800F017FB032066 -:1047000000E0022000F0EEFA012E0AD0A08940B1AC -:1047100000228300114610460FF0ACFC08B10320C4 -:104720002AE5002028E52DE9FC4107460D46032631 -:1047300008460FF0E2FD00286CD13846FEF7DAFC9F -:1047400004000CD0207805E0CC0100200706050409 -:1047500003020100222805D20820BDE8FC8143F2B3 -:104760000200FAE7A07F00F0030C2DB12946604655 -:10477000FEF74DFD0600F0D1BCF1010F05D0BCF1F4 -:10478000020F18D0FFDF3046E7E7A07D2946022858 -:1047900001D011B107E01120DFE76846FCF7F2FE17 -:1047A0000028DAD16946384606F075FD0600EAD1E0 -:1047B0000120A075E7E7A07D032803D1FE48807C97 -:1047C000C00701D035B30EE025B1A07F40071FD44C -:1047D000002100E00121384606F07DFD0600D2D11F -:1047E000A075002DCFD02A4621463846FEF759FE47 -:1047F00006461128C7D1A07F4107C4D4296844F8D0 -:104800000E1F6968616040F0040020740026BAE75A -:104810001126B8E71020A0E770B50C460546FEF754 -:1048200069FC010005D022462846BDE87040FEF72D -:1048300016BE43F2020070BD00B597B043218DF85B -:1048400000108DF802000BA9684609F003FC17B0B0 -:1048500000BD0123FEF751BC00231A461946FEF79E -:104860004CBC30B597B004460FF0FAFC10B11020E4 -:1048700017B030BD204600F095FA0028F8D1CE4D93 -:10488000E878112801D00820F2E7FEF7E9FBE0B351 -:104890002078800701D56879C0B31D208DF800000D -:1048A0002078022200F001008DF802006088ADF847 -:1048B0000400A088ADF806002078C0F3400102EAA9 -:1048C000500001438DF8091002A8FEF772FD00B1F7 -:1048D000FFDF0BA9684609F0BDFB0028C8D11E20E8 -:1048E0008DF8000001208DF8020000208DF80300F3 -:1048F0000BA9684609F0AEFB0028B9D1E08800F0AA -:104900006DFA0400B4D1122001E004E005E0FEF7E6 -:104910008DFB2046ACE71320AAE70720A8E72DE986 -:10492000F043A54E074697B0F078994615460C46D9 -:10493000122803D1FFF7CFF9002816D120460FF037 -:104940008FFCE8BB28460FF08BFCC8BB204600F06C -:1049500029FA002809D129460220FEF758FC002830 -:1049600003D1F078112803D0082017B0BDE8F083F8 -:1049700006200CF025F850B12078800701D5707919 -:1049800038B1FEF76DFB022805D21320EDE71220A7 -:10499000EBE70720E9E721208DF800006088ADF8FB -:1049A0000200A088ADF8040020784FF00008C0F3A2 -:1049B00040008DF80600207880071FD4384600E0BC -:1049C00002E00FF04DFC08B11020CEE73878400827 -:1049D00008D0012809D0022807D0032805D043F2C7 -:1049E0000220C2E78DF8078002E001208DF8070061 -:1049F00057F8010F0290B888ADF80C000DF10E00C9 -:104A0000FEF7D7FC08B10320AFE72888ADF8100007 -:104A10006888ADF81200A888ADF81400E888ADF8F1 -:104A20001600ADF81880ADF81A80484600F06EF90F -:104A300000289AD186F804900BA9684609F00AFB71 -:104A4000002892D1307900F071F9E08800F0C6F9C1 -:104A500004008AD11320FEF7E9FA204685E730B535 -:104A6000054697B00C4608460FF020FC08B1102010 -:104A7000FEE62846FEF73EFB38B10178222902D334 -:104A8000807F800604D40820F2E643F20200EFE6BD -:104A900013208DF80000ADF802500BA9684609F00C -:104AA000D9FA0028E4D19DF932107F2901D0217074 -:104AB000DEE60520DCE630B5054697B00C46084634 -:104AC0000FF0CEFB08B11020D2E62846FEF712FB0D -:104AD00020B10078222804D20820C9E643F202005F -:104AE000C6E63548807C400701D51120C0E6207815 -:104AF000800802D16078800801D00720B8E65620EF -:104B00008DF80000ADF8025020788DF80400607830 -:104B10008DF805000BA9684609F09CFAA8E62DE976 -:104B2000F041B0B014460D460646FEF7E3FA070022 -:104B300006D03878222806D2082030B0BDE8F081AF -:104B400043F20200F9E728460FF0D7FB30B94FF0E7 -:104B500000084CB120460FF0C7FB08B11020ECE76D -:104B6000C4F80080A4F804801348807C800701D535 -:104B70001120E2E797F8220004F0ACF98088011DCB -:104B8000FB2901D2001D00E0FB20C0B26A46294685 -:104B900000F0E3F82C22094904A81CF0F2FFBDF84C -:104BA0000200ADF81400BDF80600ADF81600ADF82F -:104BB0001260BDF8000003E0CC010020A01F02003D -:104BC000ADF81800BDF80400ADF81A001AA904A841 -:104BD00009F040FA00B1FFDFBDF86C00ADF8080045 -:104BE000BDF86E00ADF80A00BDF87000BDF8721097 -:104BF000BDF800200844ADF80C0007201B2A9CD308 -:104C0000BDF802101B2998D3FB2A96D8FB2994D80B -:104C100006278A4210D10121104600F05AF8BDF84B -:104C20000410884208D1BDF80200012100F051F8BB -:104C3000BDF80610884201D038467EE7BDF808006E -:104C400028B9BDF80A1011B9BDF80C1029B35DB12F -:104C5000298849B1698839B124B102982060BDF82A -:104C60000C00A080132068E7BDF80010BDF80A20F2 -:104C7000081A80B2ADF80000BDF80210891AADF82C -:104C80000210012100F025F8ADF80400BDF8020083 -:104C9000012100F01EF8ADF806002C226B490FA888 -:104CA0001CF06FFFADF83E60BDF80200ADF84000AB -:104CB000BDF80600ADF84200BDF80000ADF84400B4 -:104CC000BDF80400ADF8460025A90FA809F0C2F907 -:104CD00033E7022903D0C000703080B270478000F3 -:104CE0003C30FAE730B55A4D040008D0012C04D00E -:104CF000022C06D0032C04D0FFDF2C7030BDFFDF68 -:104D0000FBE728780128F8D0FFDFF6E710B5044666 -:104D100004F0E0F830B1407830B1204604F0EEFB0A -:104D2000002010BD072010BD122010BD10B504F0EA -:104D3000D1F8040000D1FFDF607800B9FFDF6078B0 -:104D4000401E607010BD10B504F0C4F8040000D11E -:104D5000FFDF6078401C607010BD10B5144631B1A3 -:104D60000A68226049686160218839B107E02080C3 -:104D700060800121FFF7ADFFA0800DE020806188F9 -:104D800001B96080A08820B920880121FFF7A1FF28 -:104D9000A080E088002804D160880121FFF799FFF6 -:104DA000E08010BD418843F6FD730A1F9A4209D284 -:104DB0008088042806D3B0F5804F03D8884201D8F4 -:104DC00000207047072070470278520804D0012A5B -:104DD00002D043F202207047FEF7C8BA10B548B1BE -:104DE00083000022114606200FF044F9062801D066 -:104DF000032010BD002010BD70B50C0006460DD07C -:104E0000FEF778F9050000D1FFDFA6802889208110 -:104E1000288960816889A081A889E08170BD10B56A -:104E200000231A4603E0845C2343521CD2B28A4218 -:104E3000F9D30BB1002010BD012010BD00B5012831 -:104E400003D0022801D0FFDF002000BDF81F0200C0 -:104E5000CC01002010B504460FF002FA08B1102072 -:104E600010BD2078C0F30210042807D86078072806 -:104E700004D3A178102901D8814201D2072010BDA6 -:104E8000E078410706D421794A0703D4000701D40A -:104E9000080701D5062010BD002010BD10B51378FD -:104EA0005C08C37F64F30003C3771478A40864F339 -:104EB0004103C3771078C309487863F34100487011 -:104EC00013781C090B7864F347130B701378DB0815 -:104ED00063F3000048705078487110BD10B5C47875 -:104EE0000B7864F300030B70C478640864F3410327 -:104EF0000B70C478A40864F382030B70C478E408D0 -:104F000064F3C3030B700379117863F3000111702C -:104F100003795B0863F34101117003799B0863F324 -:104F2000820111700079C00860F3C301117010BDD7 -:104F300070B514460D46064604F037FA80B1017884 -:104F4000182221F00F01891C21F0F001A03100F896 -:104F5000081B21461CF015FEBDE8704004F028BA7D -:104F600029463046BDE870401322FEF778BA10B5E6 -:104F7000FE4C94F8300000280CD104F120014FF6CB -:104F8000FF72A1F110000DF04DF900B1FFDF01201B -:104F900084F8300010BD2DE9F047064608A8894680 -:104FA00090E830041F469046142128461CF03DFE30 -:104FB0000021CAF80010B8F1000F03D0B9F1000FBA -:104FC00003D114E03878C00711D020680FF06EF9D3 -:104FD000F0BBB8F1000F07D12068123028602068BC -:104FE000143068602068A8602168CAF8001038781A -:104FF000800728D560680FF077F948BBB9F1000F3A -:105000002DD0FFF720F80168C6F8C8118188A6F8EE -:10501000CC11807986F8CE01FFF7A9FFDFF84C8329 -:1050200008F12008C5F80C80626862B196F8C801E2 -:1050300006F2C91140081032FEF7E7F91022414686 -:1050400060681CF059FD3878400712D5A06800E070 -:1050500002E00FF02BF950B11020BDE8F087606836 -:105060000028F9D0E8606068C6F8C401EBE7A068E2 -:1050700028610020F1E730B5054608780C4620F09D -:105080000F00401C20F0F0011031217000206070F2 -:1050900095F8230030B104280FD0052811D0062838 -:1050A00014D0FFDF20780121B1EB101F04D295F856 -:1050B000200000F01F00607030BD21F0F0002030B3 -:1050C00002E021F0F00030302070EBE721F0F0003A -:1050D0004030F9E710B510B190F8BD4044B1A34895 -:1050E00090F83540002064B108601060186010BD71 -:1050F00000F1BC040C6000F1E40100F58670116061 -:10510000F4E79A4C34340C60EFE700B58BB007231A -:10511000CDE902128DF801300191944900236431E8 -:105120000591099301468DF8103068460DF052F84C -:10513000002800D0FFDF0BB000BD70B590B0154661 -:105140000C4602220646ADF80820092103AB04F004 -:105150006EFF0490002812D00C208DF8010004206E -:105160008DF8040004F59A74099605948DF818508A -:105170000AA968460DF02EF800B1FFDF012010B03B -:1051800070BD30B597B00C462C251A998DF800509B -:10519000ADF80200B3B11868019058680290ADF8FC -:1051A0000C2010220DF10E001CF0A6FC0BA9684685 -:1051B00008F050FF002803D1A17F41F01001A17732 -:1051C00017B030BD00200190E8E72DE9F047064612 -:1051D000808A8CB080B20D468246FDF78BFF044674 -:1051E000624F3078283FDFF884914FF00008112893 -:1051F00073D2DFE800F072F1350936777E98A7F2B6 -:10520000EFEEEDEC5BECEC00A07F00F0030001287A -:1052100006D0002150460BF021FC050003D101E02F -:105220000121F7E7FFDF99F85C10C90702D0D9F830 -:1052300060000BE0032105F121000EF0E2FCD5F83F -:1052400021004B49B0FBF1F201FB1200C5F821002F -:105250007068A867B068E8672078252800D0FFDF6D -:10526000ECE0A07F00F00300012806D000215046AA -:105270000BF0F4FB060003D101E00121F7E7FFDFAB -:105280003078810702D52178252904D040F001002B -:1052900030700CB0E1E60220287096F820002871EA -:1052A00006F121003136C5E90206F2E7A07F00F0E1 -:1052B0000300012806D0002150460BF0CFFB04006C -:1052C00003D101E00121F7E7FFDF2078C10605D512 -:1052D0001320287041346C60DBE7BEE140F0080029 -:1052E0002070D6E72148082128380EF08AFC0320D8 -:1052F00016E02A208DF8000010220DF102007168DE -:105300001CF0FAFB10220DF11200B1681CF0F4FB46 -:10531000164968462C3908F09DFE00B1FFDF0420D5 -:1053200028706F60B5E7E07FC00600D5FFDF307CF6 -:10533000B28800F001030CB05046BDE8F0470921E7 -:1053400005F00BBD04B9FFDF716821B1102204F133 -:1053500024001CF0D1FB28212046FDF703FFA07F8D -:1053600000F00300022814D104E00000180200201D -:1053700040420F0004F12400002300901A46214609 -:105380005046FFF7FEFE112807D029212046FDF7E1 -:10539000E9FE307A84F820007BE7A07F000700D583 -:1053A000FFDF14F81E0F40F008002070A4F81680EC -:1053B000C4F81880C4F81C806178084661F3820044 -:1053C000410861F3C3006070307AE07061E727E064 -:1053D0003FE17AE051E000E037E0A07F00F0030019 -:1053E000012806D0002150460BF038FB040003D101 -:1053F00001E00121F7E7FFDF022104F189000EF04F -:1054000000FC1020287004F5E4706860B4F889107E -:10541000298204F18000FD496861C5E9029138E7FD -:10542000A07F00F00300012805D0002150460BF0BA -:1054300015FB18B901E00121F8E7FFDF0CB0324697 -:1054400021465046BDE8F04772E504B9FFDF2078F9 -:105450002128A1D93079012803D1E07F40F0100044 -:10546000E077324621465046FFF762FD0CB02046F9 -:10547000BDE8F0472321FDF775BE3279AA8005F11A -:1054800008030921504604F0D2FDE86010B1112054 -:105490002870FEE6A07F00F00300012806D000215E -:1054A00050460BF0DBFA040003D101E00121F7E7DD -:1054B000FFDF04F1660102231022081F0BF03BF905 -:1054C00080F8008031794170E3E6A07F00F00300AE -:1054D000012806D0002150460BF0C0FA050003D188 -:1054E00001E00121F7E7FFDF95F8880000F00300F5 -:1054F000012879D1A07F00F00307E07FC0F34006C8 -:1055000016B1012F04D02BE095F8A400C0072AD0D3 -:10551000D5F8C00118B395F88720017C62F38701A4 -:105520000174E27FD5F8C00162F341010174D5F83E -:10553000C00166F300010174AEB1D5F8C0011022BC -:1055400004F124018C351CF0D7FA287E40F00100CC -:105550002876287820F0010005F88C0900E016B1C3 -:10556000022F04D02CE095F88C00C00726D0D5F887 -:10557000BC1119B395F88720087C62F38700087482 -:10558000E27FD5F8BC1162F341000874D5F8BC1174 -:1055900066F3000008748EB1D5F8BC01102204F146 -:1055A00024018C351CF0A8FA287840F0010005F899 -:1055B000180B287820F0010005F8A409022F44D028 -:1055C0005FF0000000EB400005EBC00090F88C009D -:1055D000800709D595F88000D5F8C421400805F169 -:1055E00081011032FDF711FF05208DF8000095F8BC -:1055F00088006A4600F003008DF8010095F88C10D1 -:105600008DF8021095F8A4008DF80300214650464D -:1056100001F046FA2078252805D0212807D0FFDFA1 -:105620002078222803D922212046FDF79BFDA07F68 -:1056300000F0030001280AD0002150460BF020FAA8 -:1056400000283FF432AEFFDF23E60120BAE7012154 -:10565000F3E7716881F801801BE6FFDF19E670B59A -:105660006A4C0025103C04F85C5F65600CF07FFD1F -:105670006649A1F1100003F02AFE04F82C5C062014 -:10568000607262487C3020615030A0611030E0616F -:1056900070BD70B50D46FDF72DFD040000D1FFDF94 -:1056A0004FF4E87128461CF0C0FA5848543068613D -:1056B00004F124002861A07F00F00300012809D034 -:1056C0005FF0020105F59A700CF052FD002800D041 -:1056D000FFDF70BD0121F5E70A46014602F59A7029 -:1056E0000CF066BD70B5054640689CB0017809298C -:1056F00006D00C2937D00D2933D0FFDF1CB070BD88 -:1057000046883046FDF7F6FC040000D1FFDF207824 -:105710002128F3D0282821D1686802210C3001F01B -:10572000B4F9D8B168680821001D01F0AEF9A8B13C -:105730002D208DF80000ADF80260102204F1240144 -:1057400001A81CF0D9F90BA9684608F083FC00B148 -:10575000FFDF29212046FDF705FDCFE703F028FEF6 -:10576000CCE701218171686886883046FDF7C2FC6C -:10577000040000D1FFDFA07F00F00301022902D165 -:1057800020F01000A077207821280AD0686881795D -:1057900009B1807880B1A07F00F0030002285ED0BC -:1057A000FFDFA07F00F003000228A7D1FDF7B3FEC2 -:1057B0000028A3D0FFDFA1E703F0FAFDE07FC107D7 -:1057C00028D0800705D594F8200000F01F0010288D -:1057D0001ED0052084F82300207829281CD02428F6 -:1057E000DFD1314605200EF0EFFC22212046FDF7E7 -:1057F000B9FCA07F00F0030001282ED00021304624 -:105800000BF03EF90028CCD0FFDFCAE728020020C9 -:105810000620DFE70420DDE7A07F00F00300012879 -:1058200006D0002130460BF019F9050003D101E044 -:105830000121F7E7FFDF25212046FDF793FC0F202C -:105840008DF8580016A905F59A700CF0A8FC0228EE -:10585000A7D00028A5D0FFDFA3E70121CFE703F001 -:10586000A7FD9EE72DE9F0438BB099461546884683 -:105870000646FDF73FFC04004FD0207822284CD389 -:1058800023284AD0E07FC00647D4A07F00F0030061 -:10589000012806D0002130460BF0E0F8070002D0C6 -:1058A0000CE00121F7E7A07F00F00300012805D1FB -:1058B0000121002230460BF0C8F8074601AB02AACE -:1058C00003A93846FFF706FC039800B9FFDF4FB184 -:1058D000039807F59A7787612078222806D0242834 -:1058E00004D007E003990020886103E025212046C9 -:1058F000FDF738FC03980B21417046628580C0E9B2 -:105900000289029901610199416104A90CF062FCCC -:10591000022802D0002800D0FFDF0BB0BDE8F083E2 -:1059200070B586B00546FDF7E5FB017822291CD944 -:10593000807F00F00300012806D0002128460BF0EC -:105940008DF8040030D101E00121F7E7FFDF2BE003 -:10595000B4F8620004F1660630440178427831B14F -:1059600021462846FFF7E9FBB8B906B070BDADF88F -:1059700004200921284602AB04F059FB03900028BB -:10598000F3D011208DF80000694604F59A700CF0F0 -:1059900006FC022801D000B1FFDF022310223146AD -:1059A00004F162000AF0FDFEB4F864000028CFD1D3 -:1059B000DBE710B586B00446FDF79CFB0178222991 -:1059C00019D9807F00F00300012806D0002120466D -:1059D0000BF044F8040003D101E00121F7E7FFDFF9 -:1059E00012208DF80000694604F59A700CF0D7FB80 -:1059F000002800D0FFDF06B010BD2DE9F05F05469E -:105A00000C4600270078904601093E46BA4604F14C -:105A1000080B02297ED0072902D00A2909D142E0C9 -:105A200068680178092905D00C292CD00D292AD0C5 -:105A3000FFDFB2E114271C26002C6CD04088A08028 -:105A4000FDF758FB5FEA000900D1FFDF99F8170066 -:105A50005A46400809F11801FDF7D7FC68688089AB -:105A6000208269684868C4F812008868C4F8160083 -:105A7000A07E20F0060040F00100A07699F81E00FC -:105A800040F040014DE01A270A26002CD5D080882E -:105A9000A080FDF72FFB050000D1FFDF5946284607 -:105AA000FFF7E9FA79E10CB1A88BA080287A0D28DC -:105AB0007ED006DC01287CD0022808D0032804D13F -:105AC00035E00F2876D0102875D0FFDF65E11E275E -:105AD0000926002CB1D0A088FDF70CFB5FEA000975 -:105AE00000D1FFDF287B00F003000128207A1BD0C3 -:105AF00020F001002072297B890861F341002072A7 -:105B0000297BC90861F382002072297B090961F3AE -:105B1000C30001E036E1E9E0207299F81E0040F090 -:105B2000800189F81E1038E140F00100E2E71327F8 -:105B30000D26002CAAD0A088FDF7DCFA8146807FD4 -:105B400000F00300012806D00021A0880AF086FF9B -:105B5000050003D101E00121F7E7FFDF99F81E00FE -:105B600000F00302012A59D0E86F817801F00301A7 -:105B70000129217A54D021F00101217283789B08F8 -:105B800063F3410121728378DB0863F382012172A0 -:105B900083781B0963F3C3012172037863F3061151 -:105BA0002172437863F3C711217284F809A003E0DE -:105BB0005EE0A4E08BE09CE0C178A172012A32D0C3 -:105BC0004279E17A62F30001E1724279520862F3AC -:105BD0004101E1724279920862F38201E1724279F5 -:105BE000D20862F3C301E1720279217B62F3000102 -:105BF00021730279520862F34101217302799208FC -:105C000062F3820121730079C00860F3C30121733C -:105C100099F80000232859D9262168E0A86FA4E745 -:105C200041F00101A9E70279E17A62F30001E17232 -:105C30000279520862F34101E1720279920862F33B -:105C40008201E1720279D20862F3C301E172427902 -:105C5000217B62F3000121734279520862F3410112 -:105C600021734279920862F3820121734079CBE774 -:105C700018271026D4B3A088FDF73CFA8346807F0E -:105C800000F00300012807D00021A0880AF0E6FEFA -:105C90005FEA000903D101E00121F6E7FFDFE868D0 -:105CA000A06099F8000040F0040189F8001099F80C -:105CB0000100800708D5012020739BF800002328ED -:105CC0006BD9272158464FE084F80CA065E01527D2 -:105CD0000F265CB1A088FDF70DFA814606225946D1 -:105CE000E86808F01FFA0120A0739BE03FE04846F7 -:105CF0003AE016270926D4B3287B20724DE0287B92 -:105D000019270E269CB3C4F808A0A4F80CA00128FB -:105D100007D0022805D0032805D0042803D0FFDFD0 -:105D20000DE0207207E0697B042801F00F0141F0CB -:105D3000800121721CD0607A20F003006072A0887C -:105D4000FDF7D8F905460078212826D0232800D071 -:105D5000FFDFA87F00F00300012811D00021A088F8 -:105D60000AF08EFE22212846FDF7FCF915E004E03A -:105D7000607A20F00300401CE0E7A8F8006011E022 -:105D80000121ECE70CB16888A080287A03282BD089 -:105D900004280AD005284BD0FFDFA8F800600CB11A -:105DA000278066800020BDE8F09F15270F26002C75 -:105DB000E3D0A088FDF79EF9807F00F00300012862 -:105DC00006D00021A0880AF049FE050003D101E0B9 -:105DD0000121F7E7FFDFD5F821000622594608F038 -:105DE000A1F984F80EA0D8E717270926002CC4D003 -:105DF000A088FDF77FF98146807F00F0030001282D -:105E000006D00021A0880AF029FE050003D101E098 -:105E10000121F7E7FFDF6878800701D5022000E065 -:105E20000120207299F800002328B6D927215EE7C7 -:105E300019270E26002CA0D0A088FDF75BF95FEA99 -:105E4000000900D1FFDFC4F808A0A4F80CA084F872 -:105E500008A0A07A40F00300A07299F81F1061F327 -:105E60008200A07299F81F10C1F34002114205D0C0 -:105E700099F8201001F01F0110292CD020F0080003 -:105E8000A07299F81F004108607A61F3C300607244 -:105E9000697A01F003010129A5D140F00400607284 -:105EA00099F81E00E97A00F00300012816D0607B03 -:105EB00061F300006073AA7A217B62F30001217311 -:105EC000EA7A520862F341006073A87A400860F3EE -:105ED0004101217361E740F00800D1E7207B61F3C5 -:105EE00000002073AA7A617B62F300016173EA7A91 -:105EF000520862F341002073A87A400860F3410120 -:105F000061734AE710B5FE4C30B10146102204F12E -:105F100020001BF0F1FD012084F8300010BD10B509 -:105F20000446FFF724F8F64920461022BDE8104049 -:105F300020311BF0E1BD70B5F14D06004FF00004BB -:105F400012D00EF08DF908B110240BE00621304676 -:105F500008F0CFF8411C04D02866012085F85C00C9 -:105F600000E00724204670BD0020F7E7007810F01D -:105F70000F0204D0012A05D0022A0CD110E000093A -:105F800009D10AE00009012807D0022805D003281A -:105F900003D0042801D00720704708700020704704 -:105FA0000620704705282AD2DFE800F003070F1704 -:105FB0001F00087820F0FF001EE0087820F00F0096 -:105FC000401C20F0F000103016E0087820F00F00A0 -:105FD000401C20F0F00020300EE0087820F00F0088 -:105FE000401C20F0F000303006E0087820F00F0070 -:105FF000401C20F0F000403008700020704707205F -:1060000070472DE9F041804688B00D4600270846CC -:106010000EF073F9A8B94046FDF76CF8040003D000 -:106020002078222815D104E043F2020008B0BDE830 -:10603000F08145B9A07F010603D500F003000228D6 -:1060400001D01020F2E7A07FC10601D4010702D5DC -:106050000DB10820EAE7E17FC90601D50D20E5E78B -:1060600000F00300022805D125B12846FEF7F2FE14 -:106070000700DBD1A07F00F00300012806D000213B -:1060800040460AF0EBFC060002D00DE00121F7E7E4 -:10609000A07F00F0030001280CD000210022404620 -:1060A0000AF0D3FC060007D0A07F00F0030002280E -:1060B00004D009E00121F1E70420B7E725B12A4621 -:1060C00031462046FEF7EAFE07AB1A4669463046DF -:1060D000FFF700F8009800B9FFDF00990C20487026 -:1060E00006F59A70C1F82480486100200881A07FDD -:1060F00000F00300012828D0EDB302200871301D04 -:1061000088613078400908777078C0F3400048779C -:10611000287800F00102887F62F301008877E27F2F -:1061200062F382008877E27F520862F3C3008877C7 -:10613000727862F304108877A878C87701F1210299 -:1061400028462031FEF7CAFE22E001200871287897 -:1061500000F00102087E62F3010008762A785208F6 -:1061600062F3820008762A78920862F3C300087608 -:106170002A78D20800E007E062F3041008762421B0 -:106180002046FCF7EFFF0BE003200871052008769E -:1061900025212046FCF7E6FFA07F20F08000A077B5 -:1061A00001A900980CF016F8022801D000B1FFDF19 -:1061B00038463BE72DE9FF4F524A0D4699B09A46C3 -:1061C00007CA14AB002783E807001998FCF792FF71 -:1061D000060006D03078262806D008201DB0BDE87D -:1061E000F08F43F20200F9E7B07F00F00309B9F144 -:1061F000010F03D0B9F1020F07D008E03DB91B9899 -:10620000FEF728FE0028E9D101E01B9880BBB07F93 -:1062100000F00300012806D0002119980AF01EFCA6 -:10622000040003D101E00121F7E7FFDF852D28D02D -:1062300007DCF5B1812D1ED0822D1ED0832D08D113 -:106240001DE0862D1FD0882D1FD0892D1FD08A2DAF -:106250001FD00F2020710F281DD003F0A6F8E0B149 -:1062600001208DF83400201D0E902079B8B160E136 -:1062700011E00020EEE70120ECE70220EAE703202E -:10628000E8E70520E6E70620E4E70820E2E7092042 -:10629000E0E70A20DEE70720A0E711209EE7B9F13A -:1062A000010F17D0D4E91E50804602200190012032 -:1062B0000090A87898F80210C0F3C000C1F3C001A4 -:1062C00008405FEA000B63D050460DF0C9FF00287C -:1062D00072D133E0D4E91E850120019002200090A4 -:1062E000214630461B9AFEF7D9FD1B98007800F036 -:1062F0000101A87861F30100A870F17F04E00000BB -:10630000180200202420020061F38200A870F17FAF -:10631000490861F3C300A870617861F30410A870A4 -:106320002078400928706078C0F3400068701B989E -:106330008078E870002068712871BAE7DAF80C00FC -:106340000DF08EFFC0BBDAF81C000DF089FF98BB82 -:10635000DAF80C00A060DAF81C00E06098F80100A0 -:10636000617800F0010041EA4000607098F8021086 -:10637000C0B2C1F30011891E08406070002084F88B -:106380002000009906F1170002290BD001210AE034 -:1063900098F80110607801F00101FD2242EA410104 -:1063A0000840E2E7002104EB810188610199701C3B -:1063B000022902D0012101E028E0002104EB810143 -:1063C0008861A87800F00300012849D198F80200FC -:1063D00000F00300012843D1B9F1010F04D12A1DB7 -:1063E000691D1B98FEF77AFD287998F8041008407B -:1063F0008DF82C00697998F8052011408DF830103F -:1064000008432DD050460DF02BFF08B11020E5E6D3 -:106410000AF1100004F5DE7104F190020490B9F164 -:10642000020F3CD00090CDE9012100210BAB5A4670 -:106430002046FEF7B0FD0028E9D104F5E07104F133 -:10644000A802B9F1010F30D004980090CDE90121E4 -:1064500000210CAB5A462046FEF79DFD0028D6D100 -:106460006078800740D4A87898F80210C0F38000C4 -:10647000C1F38001084337D0297898F8000014AAA6 -:10648000B9F1010F17D032F810204B00DA4012F0AA -:10649000030718D0012F1ED0022F12D11DE0CDF816 -:1064A00000A0CDE901210121C0E7CDF800A0CDE990 -:1064B00001210121CDE732F811204300DA4002F03A -:1064C0000307032F07D0BBF1000F0DD0012906D021 -:1064D000042904D008E00227F5E70127F3E70128A3 -:1064E00001D0042800D10427F07F40F001006BF3B5 -:1064F0004100F077607881074FF003000CD5A07160 -:10650000BBF1000F15D100BF8DF85C0017AA314612 -:10651000199800F0C5FA0CE00221022F18D0012FC3 -:1065200018D0042F22D00020A071F07F20F00100AD -:10653000F07725213046FCF715FE0DA904F59A7079 -:106540000BF02DFE10B1022800D0FFDF002045E641 -:10655000A171D9E7A1710D2104F124001BF065FBA5 -:10656000207840F0020020700420CDE70120A071C7 -:10657000DFE72DE9F04387B09046894604460025C1 -:10658000FCF7B8FD060006D03078272806D0082092 -:1065900007B0BDE8F08343F20200F9E7B07F00F0F6 -:1065A0000300012806D0002120460AF057FA040013 -:1065B00003D101E00121F7E7FFDFA7795FEA0900D6 -:1065C00005D0012821D0B9F1020F26D110E0B8F191 -:1065D000000F22D1012F05D0022F05D0032F05D0A7 -:1065E000FFDF2DE00C252BE0012529E0022527E027 -:1065F00040460DF035FEB0B9032F0ED110224146B2 -:1066000004F121001BF078FA1AE0012F02D0022FCA -:1066100003D104E0B8F1000F12D00720B8E74046DC -:106620000DF01EFE08B11020B2E7102104F1210088 -:106630001BF0D9FA0621404607F05BFDC4F82100A3 -:106640002078252140F0020020703046FCF78AFDBA -:106650002078C10714D020F00100207002208DF8AE -:10666000000004F1210002908DF80450694604F501 -:106670009A700BF094FD022804D018B1FFDF01E0FE -:1066800084F82050002083E730B587B00D460446DB -:10669000FCF730FD88B1807F00F0030001280FD0A7 -:1066A000002120460AF0DAF904000ED028460DF049 -:1066B000D7FD38B1102007B030BD43F20200FAE731 -:1066C0000121EEE72078400701D40820F3E72946AE -:1066D00004F14100202205461BF00EFA207840F01C -:1066E0001000207001070FD520F008002070132043 -:1066F0008DF80000694604F59A7001950BF04FFD86 -:10670000022801D000B1FFDF0020D4E770B50D46AC -:106710000646FCF7EFFC18B1017827291FD102E0EB -:1067200043F2020070BD807F00F00300012806D014 -:10673000002130460AF092F9040003D101E0012162 -:10674000F7E7FFDFA079022809D16078C00706D0FB -:106750002A4621463046FEF7F0FC10B10FE0082033 -:1067600070BDB4F864000E280BD204F16601022358 -:106770001022081F09F0DFFF012101704570002081 -:1067800070BD112070BD70B5064686B014460D462A -:1067900008460DF065FD18B920460DF087FD10B1D3 -:1067A000102006B070BDA6F57F40FF380ED03046F1 -:1067B000FCF7A0FC38B1417822464B08811C1846F2 -:1067C000FCF723FE07E043F20200EAE72046FDF76C -:1067D00099FC0028E5D11021E01D0DF012FAE21D10 -:1067E00029466846FEF791FC102204F11700019932 -:1067F0001BF082F90020D4E72DE9F041044686B071 -:1068000015468846002708460DF077FD18B928463A -:106810000DF073FD10B1102006B008E42046FCF71F -:1068200069FC060003D03078272818D102E043F233 -:106830000200F1E7B07F00F00300012806D000213C -:1068400020460AF00BF9040003D101E00121F7E72B -:10685000FFDF2078400702D56078800701D4082048 -:10686000DAE7B07F00F00300012818D0D4E91E0158 -:10687000407800B1B5B1487810B1B8F1000F11D02F -:10688000C5B1EA1D6846E168FEF73FFC102205F13C -:10689000170001991BF004F930B104270AE0D4E98C -:1068A0001E10E5E70720B7E71022E91D04F13100CB -:1068B0001BF022F9B8F1000F06D0102208F10701F1 -:1068C00004F121001BF018F92078252140F0020086 -:1068D00020703046FCF746FC2078C10716D020F027 -:1068E0000100207002208DF8000004F121000290C8 -:1068F000103003908DF80470694604F59A700BF01F -:106900004EFC022804D018B1FFDF01E084F82070AB -:10691000002081E7F8B515460E460746FCF7EAFB6E -:10692000040004D02078222804D00820F8BD43F2C7 -:106930000200F8BDA07F00F00300022802D043F25D -:106940000400F8BD30460DF08BFC18B928460DF058 -:1069500087FC08B11020F8BD00953288B31C214691 -:106960003846FEF70EFC112814D00028F3D1297CFC -:106970004A08E17F62F30001E1772A7C62F341017A -:10698000E177297C890884F82010A17F21F080011B -:10699000A177F8BDA17F0907FBD4D6F80200C4F89F -:1069A0003600D6F80600C4F83A003088A0861022D7 -:1069B000294604F124001BF09FF8287C4108E07F61 -:1069C00061F38200E077297C61F3C300E077287CE3 -:1069D000800884F82100A07F40F00800A077002004 -:1069E000D3E770B596B00D46064613B1072016B032 -:1069F00070BDFCF77FFB040007D02078222802D36B -:106A0000A07F400604D40820F1E743F20200EEE73D -:106A1000C5B12D208DF80000ADF802601022294686 -:106A200001A81BF069F8287C4108E07F61F30000B1 -:106A3000E077297C61F34100E077287C800884F8C6 -:106A4000200004E02E208DF80000ADF802600BA9B4 -:106A5000684607F0FFFAA17F21F04001A177C6E761 -:106A600070B50D46FCF746FB040005D028460DF036 -:106A70001DFC20B1102070BD43F2020070BD2946FC -:106A80002046FEF7F8FA002070BD04E010F8012B54 -:106A90000AB100207047491E89B2F7D20120704721 -:106AA00070B51546064602F080FC040000D1FFDFF9 -:106AB000207820F00F00801C20F0F00020302070A3 -:106AC00066802868A060BDE8704002F071BC0000DC -:106AD00018B18178012938D101E010207047018870 -:106AE00042F60112881A914231D018DC42F60102B6 -:106AF000A1EB020091422AD00CDC41B3B1F5C05F9A -:106B000025D06FF4C050081821D0A0F57060FF3870 -:106B10001BD11CE001281AD002280AD117E0B0F5D9 -:106B2000807F14D008DC012811D002280FD0032860 -:106B30000DD0FF2809D10AE0B0F5817F07D0A0F57C -:106B40008070033803D0012801D0002070470F2047 -:106B500070470B2826D008DC1BD2DFE800F01C2091 -:106B600025251A25292325271E0011281CD008DCDD -:106B70000C2817D00D281DD00F2815D0102808D1AB -:106B800010E0822809D0842810D0852810D08728CA -:106B900012D003207047002070470520704743F251 -:106BA00003007047072070470F207047042070478C -:106BB000062070470C20704743F20200704738B53A -:106BC0000C46050041D06946FFF7D0F9002819D1DD -:106BD0009DF80010607861F3020060706946681CDF -:106BE000FFF7C4F900280DD19DF80010607861F31B -:106BF000C5006070A978C1F34101012903D00229C1 -:106C000005D0072038BD217821F0200102E021784D -:106C100041F020012170410704D0A978C90861F32F -:106C200086106070607810F0380F07D0A9780909D5 -:106C300061F3C710607010F0380F02D16078400621 -:106C400003D5207840F040002070002038BD70B59A -:106C500004460020088015466068FFF7B0FF002852 -:106C600016D12089A189884211D860688078C00730 -:106C70000AD0B1F5007F0AD840F20120B1FBF0F252 -:106C800000FB1210288007E0B1F5FF7F01D90C202E -:106C900070BD01F201212980002070BD10B504787B -:106CA000137864F3000313700478640864F34103F9 -:106CB00013700478A40864F3820313700478E40862 -:106CC00064F3C30313700478240964F3041313708A -:106CD0000478640964F3451313700078800960F345 -:106CE0008613137031B10878C10701D1800701D52F -:106CF000012000E0002060F3C713137010BD42783C -:106D0000530702D002F0070306E012F0380F02D05A -:106D1000C2F3C20300E001234A7863F302024A701F -:106D2000407810F0380F02D0C0F3C20005E04307EE -:106D300002D000F0070000E0012060F3C5024A70B5 -:106D400070472DE9F04F95B00D00804615D0B8F191 -:106D5000000F16D0122128461AF045FF4FF6FF7B90 -:106D600005AA0121584606F0C0FF002426463746F2 -:106D70004FF420596FF4205A75E0102015B0BDE88B -:106D8000F08F0720FAE700BF9DF81E0001280AD106 -:106D9000BDF81C0048450BD010EB0A000AD00128B2 -:106DA0000CD002280CD0042C0ED0052C0FD10DE0F5 -:106DB000012400E00224BDF81A6008E0032406E084 -:106DC0000424BDF81A7002E0052400E00624BDF892 -:106DD0001A10414547D12C74BEB34FF0000810AAD9 -:106DE0004FF0070ACDE90282CDE900A80DF13C0978 -:106DF0001023CDF8109042463146584607F028F847 -:106E000008BBBDF83C002A46C0B210A90BF084FABA -:106E1000C8B9AE81CFB1CDE900A80DF1080C0AAE1A -:106E200040468CE84102132300223946584607F0B9 -:106E30000FF840B9BDF83C00F11CC01EC0B22A1DBD -:106E40000BF06AFA10B1032098E70AE0BDF82900B8 -:106E5000E881062C05D19DF81E00A872BDF81C0023 -:106E6000288100208AE705A806F04BFF00288BD078 -:106E7000FFF76FFE82E72DE9F0471C46DDE9097850 -:106E8000DDF8209015460E00824600D1FFDF0CB1E0 -:106E9000208818B1D5B11120BDE8F087022D01D0AE -:106EA000012100E0002106F1140005F003FEA8F81E -:106EB000000002463B462946504603F0B8F8C9F8A0 -:106EC000000008B9A41C3C600020E5E71320E3E7BC -:106ED000F0B41446DDE904528DB1002314B1022C44 -:106EE00009D101E0012306E00D7CEE0703D025F077 -:106EF000010501230D742146F0BC03F02EBF1A805A -:106F0000F0BC70472DE9FE4F91461A881C468A4610 -:106F10008046FAB102AB494603F089F8050019D062 -:106F20004046A61C278809F0B5FE324607262946AA -:106F30003B46009609F074FA20882346CDE90050BC -:106F40004A4651464046FFF7C3FF002020800120FB -:106F5000BDE8FE8F0020FBE72DE9F04786B09146A3 -:106F6000DDE90E460F46824603AA05A904A8109D36 -:106F70008DE807009846324621465046FFF77BFFD2 -:106F8000049909B1012200E000222A70002817D1DB -:106F9000F84A03AB1060059A009104F11400CDE9A2 -:106FA00001204A463946504606F048F990B1082873 -:106FB0000ED2DFE800F00407040D0D090B0B0020D2 -:106FC00006B069E71120FBE70720F9E70820F7E79B -:106FD0000320F5E7BDF80C100498CDE90001434605 -:106FE000324621465046FFF773FFE8E72DE9F043AC -:106FF00089B00D46DDE9108781461C4616461421EE -:1070000003A81AF012FE012002218DF810108DF84D -:107010000C008DF81170ADF8146064B1A278D2073D -:1070200009D08DF81600E088ADF81A00A088ADF8F8 -:107030001800A068079008A80095CDE90110424605 -:1070400003A948466B68FFF787FF09B0BDE8F083E6 -:10705000F0B58BB0002406460694079407270894E1 -:1070600005A80994019400970294CDE903400D46C8 -:1070700010232246304606F0EBFE78B90AA806A98E -:10708000019400970294CDE90310BDF8143000225A -:107090002946304606F0B2FC002801D0FFF759FD22 -:1070A0000BB0F0BD06F052BB2DE9FC410C4680460A -:1070B000002602F07AF9054620780D287ED2DFE816 -:1070C00000F0BC0713B325BD49496383AF959B000E -:1070D000A848006820B1417841F010014170ADE04E -:1070E000404602F092F9A9E00421404609F0B6FCBE -:1070F000070000D1FFDF07F11401404605F06EFCE8 -:10710000A5BB13214046FDF787FB97E004214046CD -:1071100009F0A4FC070000D1FFDFE088ADF8000013 -:107120000020B8819DF80000010704D5C00602D5F3 -:10713000A088B88105E09DF8010040067ED5A088B2 -:10714000F88105B9FFDF22462946404601F068FC78 -:10715000022673E0E188ADF800109DF801100906E1 -:107160000FD5072803D006280AD00AE024E004211E -:10717000404609F073FC060000D1FFDFA088F081D3 -:107180000226CDB9FFDF17E00421404609F066FC76 -:10719000070000D1FFDF07F1140006F00EFB90F0AE -:1071A000010F02D1E079000648D5387C022640F074 -:1071B0000200387405B9FFDF224600E03DE02946B1 -:1071C000404601F02DFC39E00421404609F046FC20 -:1071D000017C002D01F00206C1F340016171017CC8 -:1071E00021F002010174E7D1FFDFE5E7022601216A -:1071F000404602F045F921E00421404609F02EFC0A -:107200000546606800902089ADF8040001226946B7 -:10721000404602F056F9287C20F0020028740DE068 -:10722000002DC9D1FFDFC7E7022600214046FBF74A -:10723000CDF8002DC0D1FFDFBEE7FFDF3046BDE84F -:10724000FC813EB50C0009D001466B4601AA002026 -:1072500006F080FE20B1FFF77CFC3EBD10203EBD55 -:1072600000202080A0709DF8050002A900F0070012 -:10727000FEF798FE50B99DF8080020709DF80500B3 -:1072800002A9C0F3C200FEF78DFE08B103203EBD87 -:107290009DF8080060709DF80500C109A07861F3B1 -:1072A0000410A0709DF80510890961F3C300A07057 -:1072B0009DF80410890601D5022100E0012161F347 -:1072C00042009DF8001061F30000A07000203EBD58 -:1072D00070B5144606460D4651EA040005D075B156 -:1072E00008460DF001F878B901E0072070BD294685 -:1072F000304606F090FE10B1BDE8704029E454B16C -:1073000020460CF0F1FF08B1102070BD2146304638 -:10731000BDE8704095E7002070BD2DE9FC5F0C468C -:1073200090460546002701780822007A3E46B2EBD7 -:10733000111F7DD104F10A0100910A31821E4FF024 -:10734000020A04F1080B0191092A72D2DFE802F067 -:10735000EDE005F528287BAACE006888042109F015 -:107360007DFB060000D1FFDFB08928B15227072638 -:10737000C3E000001403002051271026002C7DD00C -:107380006888A0800120A071A88900220099FFF7D9 -:107390009FFF002873D1A8892081288AE081D1E04D -:1073A000B5F81290072824D1E87B000621D5512793 -:1073B00009F1140086B2002CE1D0A88900220099BE -:1073C000FFF786FF00285AD16888A08084F806A0BD -:1073D000A88920810120A073288A2082A4F8129015 -:1073E000A88A009068884B46A969019A01F0F5FACD -:1073F000A8E0502709F1120086B2002C3ED0A889DF -:1074000000225946FFF764FF002838D16888A08021 -:10741000A889E080287A072813D002202073288AC0 -:10742000E081E87BC0096073A4F81090A88A01E0AD -:1074300085E082E0009068884B4604F11202A96959 -:10744000D4E70120EAE7B5F81290512709F11400BA -:1074500086B2002C66D06888042109F0FFFA8346C2 -:107460006888A080A88900220099FFF731FF0028D2 -:107470006ED184F806A0A889208101E052E067E07F -:107480000420A073288A2082A4F81290A88A009071 -:1074900068884B46A969019A01F09FFAA989ABF85F -:1074A0000E104FE06888FBF725FE07466888042128 -:1074B00009F0D4FA064607B9FFDF06B9FFDF687B9B -:1074C000C00702D05127142601E0502712264CB3E2 -:1074D0006888A080502F06D084F806A0287B5946E3 -:1074E00001F08BFA2EE0287BA11DF9E7FE49A8895F -:1074F0004989814205D1542706269CB16888A0801D -:1075000020E053270BE06888A080A889E08019E07C -:107510006888042109F0A2FA00B9FFDF5527082680 -:10752000002CF0D1A8F8006011E056270726002CA7 -:10753000F8D06888A080002013E0FFDF02E0012877 -:1075400008D0FFDFA8F800600CB12780668000201B -:10755000BDE8FC9F57270726002CE3D06888A08051 -:10756000687AA071EEE7401D20F0030009B14143A5 -:10757000091D01EB4000704713B5DB4A0020107174 -:10758000009848B10024684609F06BF8002C02D13D -:10759000D64A009911601CBD01240020F4E770B5A3 -:1075A0000D46064686B014465C2128461AF03DFB7F -:1075B00004B9FFDFA0786874A2782188284601F01A -:1075C00046FA0020A881E881228805F1140130469E -:1075D00005F0E9F96A460121304606F086FB19E01C -:1075E0009DF80300000715D5BDF806103046FFF7DB -:1075F0002FFD9DF80300BDF8061040F010008DF837 -:107600000300BDF80300ADF81400FF233046059ACF -:1076100006F0CCFC684606F074FB0028E0D006B00B -:1076200070BD10B50C4601F1140005F0F3F90146E8 -:10763000627C2046BDE8104001F03EBA70B50546B8 -:10764000042109F00BFA040000D1FFDF04F114015A -:107650000C46284605F0C2F921462846BDE8704090 -:1076600005F0C3B970B58AB00C460646FBF742FD7B -:10767000050014D02878222827D30CB1A08890B117 -:1076800001208DF80C0003208DF8100000208DF8EB -:10769000110054B1A088ADF81800206807E043F24B -:1076A00002000AB070BD0920FBE7ADF81800059094 -:1076B0000421304609F0D2F9040000D1FFDF04F1C3 -:1076C000140005F0BEF9C00601D40820E9E701F076 -:1076D0006CFE60B108A802210094CDE9011095F874 -:1076E000232003A930466368FFF736FCD9E7112051 -:1076F000D7E72DE9F04FB2F802A0834689B01546CE -:1077000089465046FBF7F6FC07460421504609F02F -:10771000A5F90026044605964FF002080696ADF836 -:107720001C6007B9FFDF04B9FFDF4146504603F094 -:107730007CFE60B907AA06A905A88DE807004246A5 -:10774000214650466368FFF796FB00B1FFDF6648AD -:1077500007AB0660DDE9051204F11400CDF80090D6 -:10776000CDE90320CDE9013197F823205946504651 -:107770006B6805F0AFF906000AD0022E04D0032E84 -:1077800014D0042E00D0FFDF09B03046BDE8F08FE2 -:10779000BDF81C000028F7D00599CDE9001042463D -:1077A000214650466368FFF793FBEDE7687840F0A9 -:1077B00008006870E8E72DE9F04F9BB004464FF0F1 -:1077C00000084948ADF85480ADF83080ADF85080DD -:1077D000A0F80880ADF81480ADF81880ADF82080CE -:1077E000ADF81C80007916460D464746012808D0A2 -:1077F000022806D0032804D0042802D008201BB099 -:10780000C4E720460CF02CFDD0BB28460CF028FD28 -:10781000B0BB60680CF071FD90BB606848B16089D6 -:107820002189884202D8B1F5007F01D90C20E6E712 -:1078300080460BAA06A92846FFF709FA0028DED1E0 -:1078400068688078C0F34100022808D19DF81900CB -:1078500010F0380F03D028690CF046FD80B905A957 -:107860002069FFF7ACF90028C9D1206950B16078D0 -:1078700080079DF8150000F0380002D5C0B301E084 -:1078800011E0A8BB9DF8140080060ED59DF81500E8 -:1078900010F0380F03D060680CF026FD18B960684E -:1078A0000CF02BFD08B11020A9E707A96069FFF7CC -:1078B00086F90028A3D1606940B19DF81D0000F051 -:1078C000070101293FD110F0380F3CD008A9A06969 -:1078D000FFF775F9002892D19DF81C00800632D47C -:1078E0009DF82000800604E014030020140000200E -:1078F00029E028D4A06940B19DF8210000F00701DB -:10790000012920D110F0380F1DD0E06818B100789F -:10791000C8B11C2817D20EAA611C2046FFF7BEF979 -:107920000120B94660F30F27BA4607468DF84E008E -:1079300042F60300ADF84C000DF13B0217A9286890 -:107940000AF009FD08B1072059E79DF85C0016A967 -:10795000CDF80090C01CCDE9019100F0FF0B002391 -:107960000BF20122514613A806F002F9F0BBBDF854 -:1079700058000990FE482A8929690092CDE9011032 -:107980006B89BDF82C202868069906F0F1F80100F3 -:107990007ED120784FF0020AC10601D480062BD593 -:1079A000ADF80C90606950B907A906A8FFF7A7F9D0 -:1079B0009DF81D0020F00700401C8DF81D009DF86B -:1079C0001C008DF84E7040F0C8008DF81C0042F687 -:1079D0000210ADF84C000CA903AACDF800A0CDE927 -:1079E0000121002340F2032213A800E01EE00799C2 -:1079F00006F0BEF801004BD1DD484D4608385B4625 -:107A00000089ADF839000EA8CDE90290CDF80490B8 -:107A1000CDF810904FF007090022CDF80090BDF886 -:107A200058104FF6FF7005F0E9FF10B1FFF791F81D -:107A3000E5E69DF83800000625D52946012060F3CB -:107A40000F218DF84E704FF42450ADF84C00ADF876 -:107A5000105062789DF81000002362F300008DF84A -:107A600010006278CDF800A0520862F341008DF852 -:107A7000100004AACDE9012540F2032213A806F064 -:107A800077F8010004D1606888B32069A8B900E0E4 -:107A900086E005A906A8FFF732F96078800706D4CA -:107AA0009DF8150020F038008DF8150005E09DF8D0 -:107AB000140040F040008DF814008DF84E7042F62E -:107AC0000110ADF84C00208940F20121B0FBF1F229 -:107AD00001FB1202606814ABCDF80080CDE9010310 -:107AE000002313A8059906F043F8010058D1207827 -:107AF000C00729D0ADF80C50A06950B908A906A854 -:107B0000FFF7FDF89DF8210020F00700401C8DF8DC -:107B100021009DF820008DF84E7040F040008DF857 -:107B2000200042F60310ADF84C0015A903AACDF8C9 -:107B300000A0CDE90121002340F2032213A80899F7 -:107B400006F016F801002BD1E06868B32946012041 -:107B500060F30F218DF84E7042F60410ADF84C0022 -:107B6000E068002302788DF8602040788DF861008D -:107B7000E06818AA4088ADF86200E06800798DF8E6 -:107B80006400E068C088ADF86500CDF80090CDE9EC -:107B900001254FF4027213A805F0EAFF010003D09B -:107BA000099800F0B5FF2AE67148032108380171F1 -:107BB00056B100893080BDF850007080BDF83000AB -:107BC000B080BDF85400F080002018E670B50125A3 -:107BD0008AB016460B46012802D0022816D104E0CE -:107BE0008DF80E504FF4205003E08DF80E5042F601 -:107BF0000100ADF80C005BB10024601C60F30F24A1 -:107C000004AA08A918460AF0A6FB18B1072048E5FF -:107C1000102046E504A99DF820205548CDE9002113 -:107C2000801E02900023214603A802F2012205F0E3 -:107C30009FFF10B1FEF78DFF33E54D4808380EB1B8 -:107C4000C1883180057100202BE5F0B593B007465F -:107C500001268DF83E6041F60100ADF83C0012AA05 -:107C60000FA93046FFF7B2FF002848D1404C00254D -:107C7000083CE7B31C2102A819F0D7FF9DF80800C3 -:107C80008DF83E6040F020008DF8080042F6052097 -:107C9000ADF83C000E959DF83A00119520F00600D5 -:107CA000801C8DF83A009DF838006A4620F0FF00ED -:107CB0008DF838009DF8390009A920F0FF008DF8F3 -:107CC00039000420ADF82C00ADF830000EA80A9061 -:107CD00011A80D900FA80990ADF82E5002A8FFF73B -:107CE0006AFD00280BD1BDF80000608100E008E0CB -:107CF000BDF80400A081401CE0812571002013B074 -:107D0000F0BD6581A581BDF84800F4E72DE9F74F86 -:107D10001749A0B00024083917940A79A146012A0E -:107D200004D0022A02D0082023B02FE5CA8882425C -:107D300001D00620F8E721988A46824201D1072027 -:107D4000F2E701202146ADF848004FF6FF7860F3D6 -:107D50000F21ADF84A808DF86E0042F6020B0691B5 -:107D60008DF87240ADF86CB0ADF870401CA901E020 -:107D70001C0300201391ADF8508012A805F0E5FF18 -:107D800000252E462F460DAB072212A9404605F0CE -:107D9000DFFF78B182285DD195B38EB3ADF8645022 -:107DA000ADF866609DF85E008DF8144019AC0128AE -:107DB00064D06BE09DF83A001FB3012859D1BDF89B -:107DC000381059451FD118A809A901940294CDE98A -:107DD000031007200090BDF8361010230022404603 -:107DE00006F036F8B0BBBDF86000042801D00628C4 -:107DF0004AD1BDF82410219881423AD10F2093E74F -:107E00003AE0012835D1BDF83800B0F5205F03D045 -:107E100042F6010188422CD1BAF80600BDF83610AE -:107E2000884201D1012700E0002705B19EB12198C9 -:107E300081421ED118A809AA01940294CDE9032019 -:107E4000072000900D4610230022404606F000F85F -:107E500000B902E02DE04E460BE0BDF860000228BC -:107E600001D0102810D1C0B217AA09A90AF054FAFB -:107E700050B9BDF8369086E7052055E705A917A843 -:107E8000221D0AF068FA08B103204DE79DF814009E -:107E90000023001DC2B28DF8142022980092CDE973 -:107EA00001401BA8069905F063FE10B902228AF86A -:107EB0000420FEF74EFE37E710B50B46401E88B093 -:107EC00084B205AA00211846FEF7E8FE00200DF155 -:107ED000080C06AA05A901908CE80700072000906D -:107EE0000123002221464FF6FF7005F087FD04466E -:107EF000BDF81800012800D0FFDF2046FEF729FE5C -:107F000008B010BDF0B5F94F044687B038790E4679 -:107F1000032804D0042802D0082007B0F0BD04AA2A -:107F200003A92046FEF793FE0500F6D1606880782D -:107F3000C0F3410002280AD19DF80D0010F0380F5F -:107F400005D020690CF0D0F908B11020E5E72089B0 -:107F500005AA21698DE807006389BDF81020206813 -:107F6000039905F005FE10B1FEF7F3FDD5E716B154 -:107F7000BDF814003080042038712846CDE7F8B5EC -:107F80000C0006460BD001464FF6FF7500236A46EB -:107F9000284605F0DFFF20B1FEF7DBFDF8BD10201D -:107FA000F8BD69462046FEF70AFE0028F8D1A07801 -:107FB000314600F001032846009A05F0F7FFEBE791 -:107FC00030B587B0144600220DF1080C05AD0192C2 -:107FD0008CE82C00072200920A46014623884FF6BF -:107FE000FF7005F00BFDBDF814102180FEF7B1FD08 -:107FF00007B030BD70B50D46042108F02FFD040018 -:1080000000D1FFDF294604F11400BDE8704004F000 -:1080100011BD70B50D46042108F020FD040000D10B -:10802000FFDF294604F11400BDE8704004F025BDCF -:1080300070B50D46042108F011FD040000D1FFDFEA -:10804000294604F11400BDE8704004F03DBD70B550 -:108050000546042108F002FD040000D1FFDF21469F -:1080600028462368BDE870400122FEF74BBF70B57B -:108070000646042108F0F2FC040000D1FFDF04F101 -:10808000140004F0C7FC401D20F0030511E0011DA1 -:1080900000880022431821463046FEF733FF0028AF -:1080A0000BD0607CABB2684382B2A068011D08F0BF -:1080B00078FBA06841880029E9D170BD70B50546FC -:1080C000042108F0CBFC040000D1FFDF2146284644 -:1080D0006368BDE870400222FEF714BF70B50E461B -:1080E000054601F062F9040000D1FFDF0120207293 -:1080F00066726580207820F00F00001D20F0F000EF -:1081000040302070BDE8704001F052B910B504460F -:10811000012900D0FFDF2046BDE810400121FAF719 -:1081200055B92DE9F04F97B04FF0000A0C00834687 -:10813000ADF818A0D04619D0E06830B1A068A8B159 -:108140000188ADF81810A0F800A05846FAF7D2FF41 -:10815000070043F2020967D03878222862D304214D -:10816000584608F07BFC050005D103E0102017B04D -:10817000BDE8F08FFFDF05F1140004F04BFC401D5B -:1081800020F00306A078012803D0022801D00720A0 -:10819000EDE7208878B1401C81B209AA584605F065 -:1081A000A4FD09A805F0ADFD9DF82E204FF4505117 -:1081B000012A0DD102E043F20300D8E7BDF82C20DC -:1081C000A2F52453023B03D1822801D0A0B901E0DB -:1081D0000846CCE7E068B0B1CDE902A0072006AAC6 -:1081E000CDF804A000900492A2882188BDF8183030 -:1081F000584605F003FC10B1FEF7ABFCB7E7A168E9 -:10820000BDF8180008809DF82700C00602D543F28B -:108210000140ACE70D9838B1A1780078012905D06C -:1082200080071AD40820A2E74846A0E7C007F9D083 -:1082300002208DF83C00A8684FF00009A0B1697CCD -:108240004288714391420FD98AB2B3B2011D08F03E -:108250005EFA8046A0F800A006E003208DF83C00FE -:10826000D5F800804FF001099DF8280010F0380F74 -:1082700000D1FFDF9DF828001D49C0F3C20008446B -:1082800097F8231010F8010C884201D90F206EE7EF -:108290002088ADF8400014A90095CDE9019143462E -:1082A00007220FA95846FEF757FE002885D19DF8F2 -:1082B000500050B9A078012807D1687CB3B2704350 -:1082C00082B2A868011D08F036FA00204FE770B5A9 -:1082D000064615460C460846FEF7FAFB002809D16B -:1082E0002A4621463046BDE870406FE41403002062 -:1082F0002E20020070BD09E570B51E4614460D0023 -:1083000009D044B1616831B138B1F849C9888142B6 -:1083100003D0072070BD102070BD2068FEF7D8FB89 -:108320000028F9D1324621462846BDE87040FFF7C3 -:1083300042BA70B515460C0006D038B1EB49098930 -:10834000814203D0072070BD102070BD2068FEF769 -:10835000BFFB0028F9D129462046BDE87040D1E591 -:1083600070B5064686B00D46144610460BF09EFFCB -:10837000D0BB60680BF0C1FFB0BBA6F57F40FF38F3 -:1083800003D03046FAF7B6FE80B128466946FEF7BC -:10839000D8FC00280CD19DF810100F2008293CD2E1 -:1083A000DFE801F008060606060A0A0843F20200A2 -:1083B00006B070BD0320FBE79DF80210012908D12B -:1083C000BDF80010B1F5C05FF2D06FF4C052D142D9 -:1083D000EED09DF8061001290DD1BDF80410A1F5CD -:1083E0002851062907D200E028E0DFE801F0030366 -:1083F00004030303DCE79DF80A1001290ED1BDF840 -:108400000810B1F5245FD3D0A1F524510239CFD0A3 -:108410000129CDD0022901D1CAE7FFDF606878B910 -:10842000002305AA2946304605F094FD10B1FEF759 -:1084300090FBBDE79DF81400800601D41020B7E73B -:108440006188224628466368FFF7BAFDB0E72DE948 -:10845000F043814687B08846144610460BF026FF4D -:1084600018B1102007B0BDE8F083002306AA4146EA -:10847000484605F06FFD10B1FEF76BFBF2E79DF883 -:108480001800C00602D543F20140EBE7002507279C -:1084900005A8019500970295CDE9035062884FF633 -:1084A000FF734146484605F0D3FC060013D16068CF -:1084B0000BF0FCFE60B960680195CDE902500097B1 -:1084C0000495238862884146484605F0C1FC06466B -:1084D000BDF8140020803046CEE739B1834B0A88BE -:1084E0009B899A4202D843F20300704719E610B5FF -:1084F00086B07E4C0423ADF81430638943B1A4895F -:108500008C4201D2914205D943F2030006B010BD5E -:108510000620FBE7ADF81010002100910191ADF8A5 -:10852000003002218DF8021005A9029104A90391DF -:10853000ADF812206946FFF7F4FDE7E72DE9FC47A7 -:1085400081460E4608460BF08BFE88BB4846FAF77C -:10855000D1FD5FEA00080AD098F80000222829D34C -:108560000421484608F07AFA070005D103E043F2F7 -:108570000200BDE8FC87FFDF07F1140004F061FA98 -:1085800005463078012803D0022804D00720F0E700 -:10859000A8070FD502E015F0340F0BD0B079341DC9 -:1085A000C00709D0E08838B1A0680BF059FE18B1B7 -:1085B0001020DEE70820DCE732782088002628B388 -:1085C000A0F201130721112B18D20CD2DFE803F01F -:1085D0000B090D0B1D0B121D100B0B1D1D1D1D0B73 -:1085E0001D00022A11D10846C3E7012AFBD00CE086 -:1085F000EA0600E0AA06002AF5DA06E0A0F5C07255 -:108600001F2A02D97D3A022AEDD8C6B200F0CDFE6B -:1086100050B198F82300CDE90006FA89234639467F -:108620004846FEF7E3FCA4E71120A2E72DE9F04F4E -:108630008BB01F4615460C4683460026FAF75AFDB6 -:1086400028B10078222805D208200BB090E543F22B -:108650000200FAE7B80801D00720F6E7032F00D19F -:1086600000274FF6FF79CCB1022D72D320460BF0D4 -:1086700044FE30B904EB0508A8F101000BF03DFE03 -:1086800008B11020E1E7AD1EAAB22146484605F028 -:108690005AFD38F8021C88425BD1ADB21349B807C5 -:1086A00002D58889401C00E001201FFA80F8F807F5 -:1086B00001D08F8900E04F4605AA4146584605F093 -:1086C00014FB4FF0070A4FF00009D4B3204608E02E -:1086D000408810283DD8361D304486B2AE4238D28C -:1086E000A01902884245F3D353E000001403002090 -:1086F0009DF8170002074CD594B304EB0608361D0D -:10870000B8F80230B6B2102B23D89A19AA4220D852 -:10871000B8F8002091421CD1C0061CD5CDE900A9B3 -:108720000DF1080C0AAAA11948468CE80700B8F810 -:1087300000100022584605F061F920B1FEF709FA51 -:1087400083E726E005E0B8F80200BDF8281088426B -:1087500001D00B2079E7B8F80200304486B207E078 -:10876000FFE7C00604D55846FEF772FC002889D101 -:108770009DF81700BDF81A1020F010008DF81700B2 -:10878000BDF81700ADF80000FF235846009A05F029 -:108790000DFC05A805F0B5FA18B9BDF81A10B942D4 -:1087A000A6D90421584608F059F9040000D1FFDF8A -:1087B000A2895AB1CDE900A94D4600232146584669 -:1087C000FEF714FC0028BBD1A5813EE700203CE762 -:1087D0002DE9FF4F8BB01E4617000D464FF00004E9 -:1087E00012D0B00802D007200FB0C1E4032E00D190 -:1087F00000265DB108460BF077FD28B93888691E60 -:1088000008440BF071FD08B11020EDE7C64AB0072F -:1088100001D5D18900E00121F0074FF6FF7802D0A1 -:10882000D089401E00E0404686B206AA0B9805F0AB -:108830005CFA4FF000094FF0070B0DF1140A38E015 -:108840009DF81B00000734D5CDF80490CDF800B09A -:10885000CDF80890CDE9039A434600220B9805F025 -:10886000F7FA60BB05B3BDF814103A882144281903 -:10887000091D8A4230D3BDF81E2020F8022BBDF816 -:10888000142020F8022BCDE900B9CDE90290CDF8F3 -:1088900010A0BDF81E10BDF8143000220B9805F092 -:1088A000D7FA08B103209FE7BDF814002044001D4B -:1088B00084B206A805F025FA20B1822806D0FEF77A -:1088C00048F991E7BDF81E10B142B9D934B17DB174 -:1088D0003888A11C884203D20C2085E7052083E755 -:1088E00022462946404605F02EFC01462819018003 -:1088F000A41C3C80002077E710B504460BF0D6FCA2 -:1089000008B1102010BD8848C0892080002010BD0B -:10891000F0B58BB00D460646142103A819F085F971 -:1089200001208DF80C008DF8100000208DF811004A -:10893000ADF814503046FAF7DDFB48B10078222834 -:1089400012D30421304608F089F8040005D103E071 -:1089500043F202000BB0F0BDFFDF04F11400074644 -:1089600004F06FF8400601D40820F3E7207C0221D0 -:1089700040F00100207409A80094CDE901100722FD -:1089800003A930466368FEF7E7FA20B1217C21F0A5 -:1089900001012174DEE729463046F9F708FD08A9F0 -:1089A000384604F03DF800B1FFDFBDF82040172C39 -:1089B00001D2172000E02046A84201D92C4602E04F -:1089C000172C00D2172421463046FFF722FB214600 -:1089D0003046F9F708FA0020BCE7F8B51C46154602 -:1089E0000E46069F08F044F92346FF1DBCB23146EF -:1089F0002A46009407F0DBFCF8BD70B50C4605462E -:108A00000E21204619F0EFF8002020802DB1012D15 -:108A100001D0FFDF70BD062000E00520A07170BD11 -:108A200010B548800878134620F00F00001D20F094 -:108A3000F00080300C4608701422194604F108003A -:108A400019F09FF800F0B4FC3748046010BD2DE920 -:108A5000F047DFF8D890491D064621F0030117467C -:108A60000C46D9F8000007F01AFE050000D1FFDF20 -:108A70004FF000083560A5F800802146D9F80000C5 -:108A800007F00DFE050000D1FFDF7560A5F800803E -:108A90007FB104FB07F1091D0BD0D9F8000007F0E6 -:108AA000FEFD040000D1FFDFB460C4F80080BDE823 -:108AB000F087C6F80880FAE72DE9F0411746491D0E -:108AC00021F00302194D064601681446286807F094 -:108AD00011FE22467168286807F00CFE3FB104FBC6 -:108AE00007F2121D03D0B168286807F003FE0420C6 -:108AF00007F05EFF0446042007F062FF201A0128F9 -:108B000004D12868BDE8F04107F0BEBDBDE8F081A2 -:108B100010B50C4605F0B5F800B1FFDF2046BDE802 -:108B20001040FEF716B800001403002014000020C7 -:108B300010B50C460246817B808819B1518981426B -:108B400000D908462080D18800F0C5FF032800D353 -:108B50000320C1B22088BDE8104000F0B1BF10B5BD -:108B60000C460246817B808819B11189814200D967 -:108B700008462080D18800F0AEFF022800D30220F2 -:108B8000C1B2208800F09CFF401CC0B210BD2DE98E -:108B9000F04F0C00F84999B08146D1E90201CDE9C6 -:108BA0000C0109F10300F54E20F003010091357E20 -:108BB00005F1010504D1E8B209F054FB00B1FFDF73 -:108BC00000984FF0000B00EB0510C01C20F00301D3 -:108BD00000915CB9707A327A81F800B01044C2B268 -:108BE000B08B80B204F0D5FE00B1FFDF0098F169D0 -:108BF000084400902146684600F02CFF0098C01CF5 -:108C000020F003000090737A327AB17A04B1002028 -:108C100007F016FE0099084400902146684600F0CF -:108C20006EFF00273D46B24696F801800CE02846CC -:108C300000F0F3FE064681788088F9F76EF97178C6 -:108C40006D1C00FB0177EDB24545F0D10098C01CCA -:108C500020F00300009004B100203946F9F768F9CC -:108C600000990027084400903D469AF801800CE0E6 -:108C7000284600F0D2FE0646C1788088FEF773FCD5 -:108C800071786D1C00FB0177EDB24545F0D100987D -:108C9000C01C20F00300009004B100203946FEF70C -:108CA0006BFC00994FF000080844009045469AF884 -:108CB00001700EE0284600F0B0FE0646807B30B121 -:108CC00006F1080001F0F9FE727800FB02886D1CC5 -:108CD000EDB2BD42EED10098C01C20F00300009020 -:108CE00004B10020414601F0ECFE00990844C01D8B -:108CF00020F007000090E4BBA24AA1491160111DB9 -:108D0000401E086001222C219F4807F062FCFAF700 -:108D10002EF99E484178806805F09CFB42208DF832 -:108D200004009A480C30C0788DF8060010B1012874 -:108D300004D005E001208DF8060001E08DF806B0B2 -:108D400001A806F0C5FE10B10EA805F042FC0021F6 -:108D50001E22084603F03CF8FBF778F987480CAA76 -:108D600000210C30F8F706FB00B1FFDF9AF819007C -:108D700000E015E0FEF769FF00B1FFDF7F484FF428 -:108D8000F671443018F051FF7C480421443080F8DB -:108D9000E91180F8EA11062180F8EB110321017135 -:108DA000009919B0A1EB0900BDE8F08F70B5734CC4 -:108DB00006464434207804EB4015E078083590B935 -:108DC000A01990F8E80100280ED0A0780F2800D351 -:108DD000FFDF2021284618F028FF687866F302009C -:108DE00068700120E070284670BD2DE9F04105460D -:108DF0000C4600270078052190463E46B1EB101F37 -:108E000000D0FFDF287A58B101280FD0FFDF00BF64 -:108E1000A8F800600CB1278066800020BDE8F081D2 -:108E20000127092674B16888A08008E0022714266B -:108E300044B16888A0802869E060A88A2082287BE5 -:108E40002072E5E7A8F80060E7E710B54F4C6068CE -:108E5000C11D21F00701814200D0FFDF47480121F9 -:108E60000022017042700172032343728172027307 -:108E7000052282821F22C282417345A202610A2218 -:108E8000027641764FF4B061C1616168416010BD06 -:108E900030B53E4C1568636810339D4202D2042001 -:108EA000136030BD354B5D785A6802EB05121070C7 -:108EB00051700320D080172090800120D0709070D6 -:108EC000002090735878401C5870606810306060C3 -:108ED000002030BD70B5064628480024457807E0DC -:108EE000204600F09AFD0178B14204D0641CE4B23F -:108EF000AC42F5D1002070BDF7B5064608780C46A7 -:108F000008B3FFF7E7FF0546202E08D0232E17D021 -:108F1000212E41D0222E3FD0242E2BD114E000F060 -:108F200087FD0DB1697800E00021401A81B2A07878 -:108F30000144FF291ED830B1A08802282CD219E0A4 -:108F40006088172828D215E0227A2AB36188172969 -:108F500010D3A08817280DD3A3795BB1E3794BB167 -:108F6000402A07D84FF6FB72914201D8904213D99C -:108F70000420FEBD0720FEBD342002003004002086 -:108F80000000002000060240600600201C000020B7 -:108F90006E5246357800000065B9207802AA01219A -:108FA000FFF776FF0028E6D12078FFF793FF050052 -:108FB00000D1FFDF203E052E18D2DFE806F0030BBC -:108FC0000E081100A0786870A088E8800FE0608823 -:108FD000A8800CE0A078A87009E0A078E87006E00E -:108FE00054F8020FA8606068E86000E0FFDF00202E -:108FF000C1E700B597B053218DF8001000780BA998 -:1090000000F001008DF80200684605F023F817B063 -:1090100000BD00B5017897B001F001018DF8021094 -:10902000417801F001018DF803100178C1F340018E -:109030008DF804104178C1F340018DF805100178D6 -:1090400089088DF80610417889088DF80710817815 -:109050008DF80810C1788DF8091000798DF80A0094 -:109060004D208DF800000BA9684604F0F3FFCEE711 -:109070002DE9F04FDFF8F883FE4C97B000271BE096 -:10908000012000F07FFD0120FFF790FE0546FA4821 -:1090900007F0C8FA686000B9FFDF686805F027F8D4 -:1090A000A0B12846FAF7CEFA284600F071FD18B9AB -:1090B000F148696807F0BFFA94F9E9010428DFDA9A -:1090C000022007F075FC06460025AAE0EA48696818 -:1090D00007F0B1FAF4E7B8F802104046491C89B22B -:1090E000A8F80210B14201D3002141800221B8F852 -:1090F000020007F0B3FC00286BD0B8F8020054213E -:109100008DF80010ADF802000BA9684604F0A2FF2C -:1091100000B1FFDF9DF8300010F0010F0FD0B8F85C -:10912000020007F0B7FD5FEA000900D1FFDF484603 -:1091300006F0A3FF18B1B8F8020002F065F9B8F81C -:10914000020007F095FD5FEA000900D1FFDF484605 -:1091500006F08CFFE8BB0321B8F8020007F07EFCA4 -:109160005FEA000B48D1FFDF46E000BFDBF81000EC -:1091700010B10078FF2849D0022000F003FD022042 -:10918000FFF714FE8246484607F0A2F8CAF804002A -:1091900000B9FFDFDAF8040007F07CF90021009045 -:1091A0000170B8F802105046AAF8021001F032FE21 -:1091B000484607F071F900B9FFDF504600F0E8FCBF -:1091C00018B99AF80100000704D50098CBF81000F0 -:1091D00012E024E0DBF8100038B10178491C11F0EE -:1091E000FF01017008D1FFDF06E00022114648466A -:1091F00000F011FC00B9FFDF94F9EA01022805DB59 -:10920000B8F8020001F0CAFD0028AFD194F9E901D5 -:10921000042804DB484607F0B5F900B101276D1CAE -:10922000EDB2B54204D294F9EA010228BFF653AF79 -:10923000002F7FF423AF17B00320BDE8F04F00F0FC -:10924000A1BC10B58A4CA0600868E060AFF2DF10E6 -:1092500002F031FD607010BD864800214438017075 -:109260008348017085494160704730B505464FF02D -:1092700080500C46D0F8A41097B0491C05D1D0F806 -:10928000A810C9430904090C08D050F8A01F01F028 -:10929000010129704168216080680EE02B208DF863 -:1092A00000000BA9684604F0D5FE00B1FFDF0120E5 -:1092B00028700C982060BDF83400A0802878002821 -:1092C00003D0607940F0C000607117B030BDF0B5D8 -:1092D0004FF080540746D4F8800097B00D462B26F7 -:1092E000401C0BD1D4F88400401C07D1D4F888006E -:1092F000401C03D1D4F88C00401C0BD0D4F8800063 -:109300003860D4F884007860D4F88800B860D4F865 -:109310008C0016E08DF82C6069460BA804F09AFECC -:1093200000B1FFDF01983860029878608DF82C60FA -:1093300069460BA804F08EFE00B1FFDF0198B8600B -:109340000298F860D4F89000401C0BD1D4F8940037 -:10935000401C07D1D4F89800401C03D1D4F89C00DD -:10936000401C08D054F8900F286060686860A068BE -:10937000A860E06816E08DF800600BA9684604F06C -:1093800069FE00B1FFDF0C9828600D9868608DF8C9 -:1093900000600BA9684604F05DFE00B1FFDF0C9889 -:1093A000A8600D98E86017B0F0BD32480079FDE480 -:1093B00070B5304CE07830B3207804EB4010407A40 -:1093C00000F00700204490F9E801002800DCFFDFEE -:1093D0002078002504EB4010407A00F007000119C6 -:1093E00091F8E801401E81F8E8012078401CC0B2E5 -:1093F00020700F2800D12570A078401CA0700AF0C2 -:109400001BFBE57070BDFFDF70BD3EB50546032157 -:1094100007F024FB0446284607F02AFC054604B959 -:10942000FFDF206918B10078FF2800D1FFDF01AA13 -:109430006946284600F0EFFA60B9FFDF0AE0002233 -:1094400002A9284600F0E7FA00B9FFDF9DF80800FE -:1094500000B1FFDF9DF80000411E8DF80010EED234 -:1094600020690199884201D1002020613EBD0000A1 -:109470001C000020740400206006002068130020F7 -:1094800070B50546A0F57F400C46FF3800D1FFDFE0 -:10949000012C01D0FFDF70BDFFF787FF040000D172 -:1094A000FFDF207820F00F00401D20F0F00050304A -:1094B000207065800020207201202073BDE870407C -:1094C00076E72DE9F04116460D460746FFF76DFF9A -:1094D000040000D1FFDF207820F00F00401D20F0B5 -:1094E000F0005030207067800120207228682061D1 -:1094F000A888A0822673BDE8F04159E730B599B03D -:10950000FFF7E8FC040000D1FFDF0CA92046FFF7BD -:109510000FFB05460BA92046FFF721FB0146522011 -:109520008DF80000BDF830008DF80250001DADF838 -:109530000400BDF82C008DF80310001DADF80600E6 -:10954000E088ADF808000DA9684604F083FD002806 -:1095500000D0FFDF19B030BD2DE9F047DFF80094EF -:109560000546002799F8000010B10820BDE8F087F3 -:1095700028460AF09BFE08B11020F7E7F94C207846 -:1095800008B9FFF762FC607A217A0844C6B200F09D -:109590004FFAB04207D2301AC1B22A460020FFF774 -:1095A00077FC0700E2D1D9F804004E46C01C20F039 -:1095B0000300C9F8040000F05EFB716800EB0108CD -:1095C00001214046FFF7E3FA0646296840448842F5 -:1095D00002D8B6F5803F15D328600020FFF77AFC4B -:1095E00005000DD005F11300D9F8041020F0030098 -:1095F0004E46884200D0FFDF6078401E6070756084 -:109600000420B3E700214046FFF7C1FA0446A64212 -:1096100000D0FFDF04EB0801C9F8041029604FF601 -:10962000FF71A9F80210012189F8001038469DE762 -:109630002DE9F0410446CA4817460D46007810B19E -:109640000820BDE8F08108460AF00AFE08B11020A3 -:10965000F7E7C44E307808B9FFF7F7FB601E1E2805 -:1096600007D8012C3FD12878FE283CD8307600203E -:10967000E7E7A4F120001F2805D8E0B23A462946C2 -:10968000BDE8F04138E4A4F140004FF000081F2885 -:1096900021D8402C02D0412C25D117E068782978B8 -:1096A0004418A97881421ED8FF2C08D808F0BEFFC4 -:1096B00007460AF07BF9381A801EA04201DA122010 -:1096C000BFE728883081A878B07224E02846BDE83A -:1096D000F04100F085BAA4F1A0001F2803D8A02C07 -:1096E00003D0A12C06D00720ABE7287800F00100BA -:1096F000707610E029680920F829A2D38A07A0D142 -:10970000727B02F00302012A04D1F28AD73293B2AB -:109710008B4296D8F161404693E72DE9F0478146A8 -:109720000E4608460AF0C2FD48B948460AF0DCFD7C -:1097300028B909F1030020F00301494501D01020A8 -:1097400014E788484FF0000A4430817869B14178C5 -:10975000804600EB41140834378832460021204609 -:1097600000F024FA050004D027E0A6F800A00520A8 -:10977000FCE6B9F1000F24D03088B84201D90C259D -:109780001FE0607800F00705284600F0FBF908EBC1 -:109790000507324697F8E8014946401C87F8E8017A -:1097A000204607F5F47700F001FA05463878401EA8 -:1097B0003870032000F0E6F92DB10C2D01D0A6F889 -:1097C00000A02846D2E66078654F00F00701012925 -:1097D00023D002290CD0032932D0FFDF98F80110E2 -:1097E0004046491CC9B288F801100F2933D034E033 -:1097F000616821B1000702D46088FFF706FE98F87F -:10980000EA014646012802D1787802F073FA96F907 -:10981000EA010428E2DBFFDFE0E7616811B15248AA -:1098200006F009FF98F8E9014646032802D1787846 -:1098300002F060FA96F9E9010428CFDBFFDFCDE7FB -:10984000C00602D56088FFF7E0FD98F9EB01062815 -:10985000C4DBFFDFC2E780F801A08178491E817078 -:10986000617801F0070101EB080090F8E811491C4C -:1098700080F8E811A5E770B50D4604460AF0F0FC43 -:1098800018B928460AF012FD08B1102070BD29460B -:109890002046BDE8704008F01CBD70B50446154672 -:1098A0000E4608460AF0DCFC18B928460AF0FEFC11 -:1098B00008B1102070BD022C03D0102C01D009205B -:1098C00070BD2A463146204608F026FD0028F7D014 -:1098D000052070BD70B514460D4606460AF0C0FC62 -:1098E00038B928460AF0E2FC18B920460AF0FCFC18 -:1098F00008B1102070BD22462946304608F02BFDE5 -:109900000028F7D0072070BD10B596B004460AF0C5 -:10991000CDFC10B1102016B010BD0F208DF8000046 -:109920000BA9684604F096FB0028F4D19DF834009A -:109930002070BDF836006080BDF83800A08000209F -:10994000E9E770B505460C4608460AF0CDFC20B99B -:1099500074B120680AF0AAFC40B1102070BD00006C -:109960001C0000203004002060060020A08828B1E0 -:1099700021462846BDE87040FDF774BE0920EDE79A -:1099800070B504460D4608460AF06AFC30B9601E00 -:109990001E2814D828460AF063FC08B11020DDE721 -:1099A000022C01D90720D9E704B9FFDFE64800EB14 -:1099B000840050F8041C2846BDE870400847A4F114 -:1099C00020001F28EED829462046BDE87040FAF74F -:1099D0007FBA70B504460D4608460AF067FC30B9F8 -:1099E000601E1E280DD828460AF03AFC08B1102047 -:1099F000B4E7012C01D0022C01D10620AEE70720EC -:109A0000ACE7A4F120001F28F9D829462046BDE87C -:109A10007040FAF7E1BA06F0E4BA30B5CB4D04462F -:109A20006878A04200D8FFDF686800EB041030BD02 -:109A300070B5C64800252C46467807E02046FFF75B -:109A4000ECFF4078641C2844C5B2E4B2B442F5D1BE -:109A5000284683E72DE9F0410C46064600F043F91D -:109A600007463068C01C20F0030232601CBBB748B8 -:109A70003B46092120300AF0CDFA002408E0092CE9 -:109A800011D2DFE804F005070509090B05050700F9 -:109A9000AF4804E0AF4802E0AF4800E0AF480AF04A -:109AA000D9FA054600E0FFDFA54200D0FFDF641CC5 -:109AB000E4B2092CE3D3306800EB07103060C0E556 -:109AC000021D5143452900D245210844C01CB0FB6A -:109AD000F2F0C0B2704700B597B055228DF8002063 -:109AE000001DADF80200ADF804100BA9684604F0A3 -:109AF000B1FA00B1FFDFBDF8300017B000BD2DE9AD -:109B0000FC5F064691484FF000088B4647464446A6 -:109B100090F8019022E02046FFF77FFF050000D17A -:109B2000FFDF687869463844C7B22846FFF700F877 -:109B3000824601A92846FFF712F80346BDF8040043 -:109B40005246001D81B2BDF80000001D80B206F033 -:109B5000DBFF6A78641C00FB0288E4B24C45DAD172 -:109B60003068C01C20F003003060BBF1000F00D053 -:109B700000204246394606F0D5FF3168084430607F -:109B8000BDE8FC9F7149443108710020C8707047DE -:109B90006E494431CA782AB10A7801EB4211083182 -:109BA000814201D001207047002070472DE9F0412B -:109BB00006460078154600F00F0400201080601E55 -:109BC0000F46052800D3FFDF5F482A46103000EB20 -:109BD0008400394650F8043C3046BDE8F04118474F -:109BE00038B50446407800F00300012803D002286D -:109BF0000BD0072038BD606858B10AF07EFBD0B9A1 -:109C000060680AF071FB20B915E060680AF028FB73 -:109C100088B969462046FCF7A9F90028EAD160789E -:109C200000F00300022808D19DF8000028B1606808 -:109C30000AF05AFB08B1102038BD6189F8290DD807 -:109C4000208988420AD8607800F003023F48012A40 -:109C500006D1D731C26989B28A4201D2092038BD02 -:109C600094E80E0000F10C0585E80E000AB9002109 -:109C70008182002038BD2DE9F05F4FF000093348A4 -:109C8000C8464F464E464D46CB464C4690F801A03E -:109C900011E02046FFF7C1FE4178827809F1010901 -:109CA000884412FB0177C27812FB0166807B10FBAF -:109CB0000155641CE4B25445EBD10BEB890000EB79 -:109CC000C80000EB870000EB860000EBC5011F48D1 -:109CD000027A01EBC201427A807A01EBC20101EB08 -:109CE000C000BDE8F09F2DE9F047DFF86090002547 -:109CF0002C4699F8092099F8081099F801700A443F -:109D0000D6B299F80A20114401F0FF0808E0204675 -:109D1000FFF783FE817B407811FB0055641CE4B2A1 -:109D2000BC42F4D199F80800401C3044304440440F -:109D3000401C0EB1012100E0002108444419FF2C11 -:109D400000D9FFDFE0B211E434200200300400202B -:109D5000633D00008DAB0000592F00003120010051 -:109D60002DE9F041074614468846084601F02EFDCD -:109D7000064608EB88001C22796802EBC0000D182B -:109D8000688C58B14146384601F028FD0146786894 -:109D90000078C200082305F120000CE0E88CA8B18F -:109DA0004146384601F021FD014678680823407895 -:109DB000C20005F1240006F0F4FC38B1062121723E -:109DC0006681D0E90010C4E9031009E02878092869 -:109DD0000BD00520207266816868E0600020287042 -:109DE0002046BDE8F04101F0E7BC07202072668103 -:109DF000F4E72DE9F04116460D460746406801EBB1 -:109E000085011C2202EBC1014418204601F00FFD20 -:109E100040B10021708865F30F2160F31F410820D5 -:109E20000AF0D2F909202070324629463846BDE8AA -:109E3000F04195E72DE9F0410E46074600241C212C -:109E4000F07816E004EB8403726801EBC303D25C84 -:109E50006AB1FFF7AAFA050000D1FFDF6F802A463A -:109E600021463046FFF7C5FF0120BDE8F081641CA4 -:109E7000E4B2A042E6D80020F7E770B50646002419 -:109E80001C21C0780AE000BF04EB8403726801EB78 -:109E9000C303D5182A782AB1641CE4B2A042F3D8CF -:109EA000402070BD2821284617F09DFE70688089EB -:109EB0002881204670BD70B5034600201C25DC7843 -:109EC0000DE000BF00EB80065A6805EBC606324481 -:109ED000167816B1128A8A4204D0401CC0B284425D -:109EE000F0D8402070BDF0B5044600201C26E5786F -:109EF0000EE000BF00EB8007636806EBC7073B443A -:109F00001F788F4202D15B78934204D0401CC0B2CC -:109F10008542EFD84020F0BD0078032801D0002012 -:109F20007047012070470078022801D00020704758 -:109F3000012070470078072801D0002070470120D9 -:109F400070472DE9F041064688461078F1781546AD -:109F5000884200D3FFDF2C781C27641CF078E4B221 -:109F6000A04201D8201AC4B204EB8401706807EB48 -:109F7000C1010844017821B14146884708B12C70DD -:109F800073E72878A042E8D1402028706DE770B5CB -:109F900014460B880122A240134207D113430B80C1 -:109FA00001230A22011D06F0C6FB047070BD2DE9D5 -:109FB000FF4F81B00878DDE90E7B9A4691460E4648 -:109FC00040072CD4019806F065FE040000D1FFDFA5 -:109FD00007F1040820461FFA88F105F0A9FE0500E4 -:109FE00000D1FFDF204629466A4606F092F9009824 -:109FF000A0F80370A0F805A0284606F04BFA0178F7 -:10A0000069F306016BF3C711017020461FFA88F14E -:10A0100005F0DEFE00B9FFDF019804F07CF906EBE5 -:10A020000900017F491C017705B0BDE8F08F2DE9DB -:10A03000F84F0E469A4691460746032106F00EFD5C -:10A040000446008DDFF8B085002518B198F80000AF -:10A05000B0421ED1384606F01DFE070000D1FFDFDA -:10A0600009F10401384689B205F062FE050010D0FE -:10A07000384629466A4606F04CF9009800210A46FF -:10A080000180817004F00AFA0098C01DCAF800002F -:10A0900021E098F80000B04216D104F1260734F808 -:10A0A000341F012000FA06F911EA090F00D0FFDF82 -:10A0B0002088012340EA090020800A22391D384601 -:10A0C00006F054FB067006E0324604F1340104F158 -:10A0D0002600FFF75CFF0A2188F800102846BDE83B -:10A0E000F88FFEB514460D46064602AB0C2206213B -:10A0F000FFF79DFF002826D00299687812220A7087 -:10A10000801C487008224A80A87020888880608857 -:10A11000C880A0880881E088488100240C20CDE90F -:10A1200000040523062229463046FFF740FF21465A -:10A1300066F31F41F0230022012009F09BFF68789D -:10A14000801C68700120FEBDFEB514460D46062237 -:10A15000064602AB1146FFF76AFF002812D0029BA9 -:10A16000132000211870A8785870022058809C8015 -:10A170000620CDE900010246052329463046FFF7B7 -:10A1800016FF0120FEBD2DE9FE430C46804644E04B -:10A1900002AB0E2207214046FFF749FF002841D0BD -:10A1A00060681C2267788678BF1C06EB860102EB8C -:10A1B000C101451802981421017047700A2141809D -:10A1C000698A0181E98A4181A9888180A98981817F -:10A1D000304601F0FBFA029905230722C8806F7010 -:10A1E0000420287000250E20CDE9000521464046B8 -:10A1F000FFF7DDFE294666F30F2168F31F41F023C8 -:10A200000022082009F036FF6078FC49801C60704D -:10A2100062682046921CFFF794FE606880784028B0 -:10A22000B6D10120BDE8FE83FEB50D46064638E0F6 -:10A2300002AB0E2207213046FFF7F9FE002835D089 -:10A2400068681C23C17801EB810203EBC202841809 -:10A25000029815220270627842700A224280A28916 -:10A260004281A2888281084601F0B0FA0146029834 -:10A270008180618AC180E18A0181A088B8B1002013 -:10A28000207000210E20CDE9000105230722294678 -:10A290003046FFF78CFE6A68D9492846D21CFFF782 -:10A2A00050FE6868C0784028C2D10120FEBD06205B -:10A2B000E6E72DE9FE430C46814644E0204601F0E6 -:10A2C000A0FAD0B302AB082207214846FFF7AFFE41 -:10A2D0000028A7D060681C2265780679AD1C06EBC3 -:10A2E000860102EBC10147180298B7F810800621D9 -:10A2F0000170457004214180304601F067FA014643 -:10A30000029805230722C180A0F804807D700820F0 -:10A3100038700025CDE9000521464846FFF747FE85 -:10A32000294666F30F2169F31F41F023002208201C -:10A3300009F0A0FE6078801C60706268B149204618 -:10A34000121DFFF7FEFD606801794029B6D101209A -:10A3500068E72DE9F34F83B00E4680E0304601F008 -:10A3600050FA002875D071681C2091F8068008EB1F -:10A37000880200EBC2000C184146304601F035FA65 -:10A380000146A078C30070684078C20004F1240040 -:10A3900006F023FA07468088E18B401A80B2002538 -:10A3A00081B3AA46218B814200D8084681460246E5 -:10A3B00002AB07210398FFF73AFE010028D0BAF15B -:10A3C000000F03D0029AB888022510808B46E28BDA -:10A3D0003968A9EB05001FFA80FA0A440398009235 -:10A3E00006F058FCED1D009A59465346009506F0BC -:10A3F00017F8E08B504480B2E083B988884209D1D5 -:10A40000012508E0FFE7801C4FF0010A80B2C9E790 -:10A41000002009E60025CDE90095238A0722314670 -:10A420000398FFF7C4FDE089401EE0818DB1A0785C -:10A43000401CA0707068F178427811FB02F1CAB23A -:10A44000816901230E3006F076F980F80080002043 -:10A45000E08372686C493046921DFFF772FD7068A8 -:10A46000817940297FF47AAF0120DDE570B5064699 -:10A4700048680D4614468179402910D104EB8401C7 -:10A480001C2202EBC101084401F0F2F9002806D0B9 -:10A490006868294684713046BDE8704059E770BD50 -:10A4A000FEB50C460746002645E0204601F0A9F916 -:10A4B000D8B360681C22417901EB810102EBC10134 -:10A4C0004518688900B9FFDF02AB0822072138462A -:10A4D000FFF7ADFD002833D00299607816220A708C -:10A4E000801C4870042048806068407901F06EF953 -:10A4F000014602980523072281806989C1800820CE -:10A50000CDE9000621463846FFF751FD6078801CF2 -:10A510006070A88969890844B0F5803F00D3FFDFE7 -:10A52000A88969890844A8816E81626837492046F4 -:10A53000521DFFF706FD606841794029B5D1012021 -:10A54000FEBD30B5438C458BC3F3C704002345B132 -:10A55000838B641EED1AC38A6D1E1D4495FBF3F3B5 -:10A56000E4B22CB1008918B1A04200D820460344BF -:10A570004FF6FF70834200D3034613800C7030BD4A -:10A580002DE9FC41074616460D46486802EB860158 -:10A590001C2202EBC101441801AA69462046FFF7BC -:10A5A000D0FFA1896389BDF80420C81880B2824217 -:10A5B0001FD001280AD99DF800C0BCF1000F03D0BC -:10A5C000B4F808C0844501D8002B12D0501A00D529 -:10A5D000002060816868407940280AD1204601F057 -:10A5E0003DF9002805D06868294646713846FFF7CE -:10A5F00057FFBDE8FC8100002C000020199F0000DF -:10A60000279F0000359F000071B800005DB8000072 -:10A610002DE9FE4F8946804615465088032106F0F5 -:10A620001DFA8346B8F80200402801D2402000E01D -:10A63000403880B282460146584601F0E2F80028D0 -:10A640007ED00AEB8A001C22DBF8041002EBC0006B -:10A650000C18204601F0EBF8002877D1B8F800007C -:10A66000E18A88423CD8A189D1B348456ED1002601 -:10A670005146584601F0B2F8218C0F18608B48B94A -:10A68000B9F1020F62D3B8F804006083618A88428E -:10A6900026D80226A9EB06001FFA80F9B888A28BFB -:10A6A000801A002814DD4946814500DA084683B245 -:10A6B00068886968029139680A44CDE9003206F079 -:10A6C000D7FADDE90121F61D009B009605F06FFE2B -:10A6D000A18B01EB090080B2A083618B884207D96E -:10A6E000688803B052465946BDE8F04F01F0DDB826 -:10A6F0001FD14FF009002872B8F802006881D7E92D -:10A700000001C5E90401608BA881284601F054F8D6 -:10A710005146584601F062F80146DBF80400082370 -:10A720000078C20004F1200006F03BF80020A0836E -:10A730006083A0890AF0FF02401EA081688800E0C3 -:10A7400004E003B05946BDE8F04F19E7BDE8FE8FBD -:10A750002DE9F041064615460F461C46184609F0FD -:10A760007FFD18B9206809F0A1FD08B1102007E4A9 -:10A770007168688C0978B0EBC10F01D3132005E430 -:10A780003946304601F02AF80146706808230078FF -:10A79000C20005F1200005F0CEFFD4E90012C0E9A7 -:10A7A00000120020E3E710B50446032106F056F935 -:10A7B0000146007800F00300012804D08A8A204670 -:10A7C000BDE81040C0E42046BDE8104001F114028D -:10A7D00087E470B50446032106F040F905460146BA -:10A7E0002046FFF766FD002816D029462046FFF7D1 -:10A7F00057FE002810D029462046FFF715FD0028F7 -:10A800000AD029462046FFF7BEFC002804D029467E -:10A810002046BDE870409CE570BD2DE9F0410C4636 -:10A8200080461EE0E178427811FB02F1CAB28169EC -:10A8300001230E3005F0B5FF077860681C22C1794E -:10A84000491EC17107EB8701606802EBC101461820 -:10A850003946204600F0D5FF18B1304600F0E0FF41 -:10A8600020B16068C1790029DCD180E7FEF79DFD49 -:10A87000050000D1FFDF0A202872384600F0A6FF4D -:10A8800068813946204600F0B0FF01466068082321 -:10A890004078C20006F1240005F083FFD0E90010E3 -:10A8A000C5E90310A5F80280284600F085FFB078BE -:10A8B00000B9FFDFB078401EB07058E770B50C46A5 -:10A8C0000546032106F0CAF801464068C2792244D1 -:10A8D000C2712846BDE870409FE72DE9FE4F8246D1 -:10A8E000507814460F464FF0000800284FD001283A -:10A8F00007D0022822D0FFDF2068B8606068F860C7 -:10A9000024E702AB0E2208215046FFF790FB0028F7 -:10A91000F2D00298152105230170217841700A2197 -:10A920004180C0F80480C0F80880A0F80C806288DC -:10A9300082810E20CDE90008082221E0A678304669 -:10A9400000F044FF054606EB86012C22786802EBF6 -:10A95000C1010822465A02AB11465046FFF767FB79 -:10A960000028C9D002980721017021784170042184 -:10A97000418008218580C680CDE9001805230A465C -:10A9800039465046FFF713FB87F80880DEE6A678C5 -:10A99000022516B1022E13D0FFDF2A1D914602AB0D -:10A9A00008215046FFF743FB0028A5D0029801215B -:10A9B000022E0170217841704580868002D005E02A -:10A9C0000625EAE7A188C180E1880181CDE90098E8 -:10A9D0000523082239465046D4E710B50446032122 -:10A9E00006F03CF8014600F108022046BDE81040A0 -:10A9F00073E72DE9F05F0C4601281DD0957992F898 -:10AA00000480567905EB85011F2202EBC10121F07C -:10AA1000030B08EB060111FB05F14FF6FF7202EA8A -:10AA2000C10909F1030115FB0611F94F21F0031AC1 -:10AA300040B101283DD124E06168E57891F80080BB -:10AA40004E78DFE75946786805F029FE606000B966 -:10AA5000FFDF5946606817F0E8F8E57051467868FE -:10AA600005F01DFE6168486100B9FFDF606842695A -:10AA700002EB09018161606880F8008060684670BF -:10AA800017E0606852464169786805F033FE5A461F -:10AA90006168786805F02EFE032005F089FF044602 -:10AAA000032005F08DFF201A012802D1786805F0F7 -:10AAB000EBFD0BEB0A00BDE8F09F024600210220EF -:10AAC00097E713B5009858B10024684605F0C9FD12 -:10AAD000CF490A22002C0A7001D1009A4A601CBD9D -:10AAE00001240020F2E770B50C46154638212046B7 -:10AAF00017F09BF8012666700A2104F11C0017F07C -:10AB000094F805B9FFDF297A207861F301002070FD -:10AB1000A879002817D02A4621460020FFF769FFB0 -:10AB20006168402088706168C870616808716168F8 -:10AB300048716168887161682888088161686888DF -:10AB400048816068868170BDC878002802D00022E4 -:10AB500001204EE7704770B50546002165F31F419F -:10AB6000012009F031FB0321284605F077FF04009E -:10AB700000D1FFDF21462846FFF75CF9002804D00A -:10AB8000207840F010002070012070BD2DE9FF41B9 -:10AB900080460E460F0CFEF708FC050007D06F80BC -:10ABA0000321384605F05AFF040008D106E004B03E -:10ABB0003846BDE8F0411321F9F72EBEFFDFB8F1AA -:10ABC000010F05D0B8F1080F18D0FFDFBDE8FF81F5 -:10ABD00020782A4620F0080020700020ADF80200FE -:10ABE00002208DF800004FF6FF70ADF80400ADF8BC -:10ABF000060069463846F9F717F9E7E7C6F3072173 -:10AC000001EB81021C23606803EBC202805C042814 -:10AC100003D008280AD0FFDFD8E7012000904FF4C6 -:10AC200040432A46204600F009FECFE704B02A46FA -:10AC30002046BDE8F041FFF7DCB82DE9F05F0027C2 -:10AC4000B0F80A9090460C4605463E46B9F1400FD2 -:10AC500001D2402001E0A9F140001FFA80FA287AD1 -:10AC6000C01E08286BD2DFE800F00D04192058360A -:10AC70003C4772271026002C6CD0D5E90301C4E9AB -:10AC800002015CE070271226002C63D00A2205F135 -:10AC90000C0104F1080016F074FF50E071270C2637 -:10ACA000002C57D0E868A06049E0742710269CB3B8 -:10ACB000D5E90301C4E902016888032105F0CEFE4D -:10ACC0008346FEF772FB024668885080514658461C -:10ACD000FFF746F833E075270A26ECB1A8892081F2 -:10ACE0002DE076271426BCB105F10C0004F1080311 -:10ACF00007C883E8070022E07727102664B1D5E96A -:10AD00000301C4E902016888032105F0A7FE01469A -:10AD10006888FFF782FD12E01CE073270826CCB19B -:10AD20006888032105F09AFE01460078C00606D522 -:10AD30006888FFF77FF810B96888F8F767FCA8F80B -:10AD400000602CB12780A4F8069066806888A080F7 -:10AD50000020B0E6A8F80060FAE72DE9FC410C46B7 -:10AD60001E4617468046032105F078FE05460A2C4C -:10AD70000AD2DFE804F005050505050509090907FC -:10AD8000042303E0062301E0FFDF0023CDE9007682 -:10AD9000224629464046FFF70AF92AE438B5054617 -:10ADA000A0F57F40FF3830D0284605F061FF040051 -:10ADB00000D1FFDF204605F08BFA002815D00146B0 -:10ADC0006A46204605F0A5FA00980321B0F8054030 -:10ADD000284605F043FE0546052C03D0402C05D23D -:10ADE000402404E0007A80B1002038BD403CA4B289 -:10ADF000214600F006FD40B1686804EB84013E2264 -:10AE000002EBC101405A0028EFD0012038BD0000FC -:10AE10002C0000202DE9F04F044689B0408805F051 -:10AE200027FF050000D1FFDF06AA2846616800F071 -:10AE3000C1FC069D001F81B235F8032F6B888A4242 -:10AE400005D1042B0AD0052B1DD0062B15D0224688 -:10AE50002846FFF7DDFB09B0BDE8F08F16462D1D33 -:10AE6000224629463046F7F78CFA0828F3D12246C5 -:10AE700029463046FCF73DFCEDE76088291D6368F4 -:10AE8000FAF7F0FCE7E717466088032105F0E6FDD6 -:10AE90004FF000088DF804800646ADF80680042FB8 -:10AEA000D9D36A79002AD6D028794FF6FF794FF0A6 -:10AEB0001C0A13282CD008DC012878D0062847D09B -:10AEC000072875D0122874D106E0142872D01528EE -:10AED00071D016286DD1ACE10C2F6AD1307800F01A -:10AEE0000301012965D040F0080030706879B07026 -:10AEF00001208DF804002889ADF808006889ADF8B4 -:10AF00000A00A889ADF80C00E889ADF80E0019E038 -:10AF1000B07890429FD1307801079CD5062F9AD106 -:10AF200020F0080030706088414660F31F41012026 -:10AF300009F04AF902208DF80400ADF8089028893C -:10AF4000ADF80A006088224601A9F8F76DFF82E794 -:10AF5000082F80D12F89B5F80A90402F01D24020C8 -:10AF600001E0A7F1400080B280460146304600F083 -:10AF700048FC08B3716808EB88002C2202EBC00083 -:10AF8000095A4945E3D1FE4807AAD0E90210CDE9A4 -:10AF9000071068798DF81C0008F0FF058DF81E5029 -:10AFA00060883146FFF799FC2246294639E0B6E031 -:10AFB00014E03CE039E0E6E0F148D0E90010CDE9EA -:10AFC00007106879ADF820708DF81C00ADF822905C -:10AFD000608807AA3146FFF780FC3CE7082FB6D10E -:10AFE0006889B5F80880402801D2402000E0403848 -:10AFF00087B23946304600F004FC0028A7D007EBA2 -:10B00000870271680AEBC2000844028A42459ED159 -:10B01000017808299BD140786979884297D1F9B2A3 -:10B0200022463046FEF7E5FE15E70E2F07D0CDF895 -:10B030001C80CDF8208068798DF81C00C8E76989EC -:10B04000EF898B46B5F80C903046FEF734FFABF134 -:10B050004001402901D309204AE0B9F1170F01D37B -:10B06000172F01D20B2043E040280ED000EB8002C6 -:10B0700071680AEBC20008440178012903D14078C5 -:10B0800069798842A9D00A2032E03046FEF7F5FE01 -:10B09000014640282BD001EB810372680AEBC30004 -:10B0A00002EB0008012288F800206A7988F8012064 -:10B0B00070682A894089B84200D938462D8A03230E -:10B0C0002372A282E7812082A4F80C906582084650 -:10B0D00000F07CFB6081A8F81490A8F81870A8F81C -:10B0E0000E50A8F810B0204600F066FBB3E604202E -:10B0F00005212172A4F80A80E08101212173A04971 -:10B10000D1E90421CDE9072169798DF81C10ADF84A -:10B110001E00608807AA3146FFF7DFFBE3E7062F32 -:10B12000E4D3B078904215D13078010712D520F0E1 -:10B13000080030706088414660F31F41012009F02B -:10B1400043F802208DF804002889ADF80800ADF816 -:10B150000A90F7E604213046FEF7C5FE0546402872 -:10B16000C4D002208303009022462946304600F0D6 -:10B1700065FB4146608865F30F2160F31F4108209D -:10B1800009F022F867E60E2FB0D104213046FEF711 -:10B19000AAFE81464028A9D04146608869F30F2164 -:10B1A00060F31F41082009F00FF8288A0790E8890A -:10B1B00000907068AF894089B84200D9384683460C -:10B1C000B5F80A8028890590484600F0FFFA6081AA -:10B1D000079840B10220079B00902246494630461E -:10B1E00000F02CFB37E6B8F1170F1ED3172F1CD336 -:10B1F0000420207200986082E781A4F810B0A4F8BF -:10B200000C8009EB890271680AEBC2000D180099E5 -:10B210000598A5F81480A5F818B0E9812882204681 -:10B2200000F0CAFA0620287015E601200B230090D2 -:10B23000D3E7082FA6D129893046FEF73CFE074602 -:10B2400040289FD007EB870271680AEBC2000844D0 -:10B25000804600F0ECFA002894D16D89B8F80E0011 -:10B260002844B0F5803F05D360883A46314600F067 -:10B270001CFBF0E5002D85D0A8F80E0060883A464A -:10B280003146FFF7F3F808202072384600F09EFAA6 -:10B290006081A58127E770B50D460646032105F0BC -:10B2A000DDFB040004D02078000704D5112070BD18 -:10B2B00043F2020070BD2A4621463046FEF711FFD8 -:10B2C00018B9286860616868A061207840F00800BB -:10B2D0002070002070BD70B50D460646032105F0B4 -:10B2E000BDFB040004D02078000704D4082070BD02 -:10B2F00043F2020070BD2A4621463046FEF724FF85 -:10B3000000B9A582207820F008002070002070BDD0 -:10B310002DE9F04F0E4691B08046032105F09EFBCB -:10B320000446404605F0B6FC07460020079008900A -:10B330000990ADF830000A9002900390049004B98F -:10B34000FFDF0DF1080917BBFFDF20E038460BA92E -:10B35000002204F046FE9DF82C0000F07F050A2D27 -:10B3600000D3FFDF6019017F491E01779DF82C0093 -:10B3700000060CD52A460CA907A8FEF708FE01E036 -:10B380005C20020019F80510491C09F80510761E0A -:10B39000F6B2DBD204F13400FC4D04F1260BDFF8E9 -:10B3A000F0A304F12A07069010E05846069900F031 -:10B3B0006EFA064628700A2800D3FFDF5AF82610D6 -:10B3C00040468847E08CC05DB04202D0208D002806 -:10B3D000EBD10A202870EE4D4E4628350EE00CA920 -:10B3E00007A800F054FA0446375D55F8240000B968 -:10B3F000FFDF55F82420394640469047BDF81E002F -:10B400000028ECD111B027E510B5032105F026FB8B -:10B41000040000D1FFDF0A2104F11C0016F005FC36 -:10B42000207840F00400207010BD10B50C460321B8 -:10B4300005F014FB01190A7F01211AB9808EA14081 -:10B44000084000D0012010BD2DE9F84F894615466F -:10B450008246032105F002FB070004D0284608F0CD -:10B46000FFFE40B903E043F20200BDE8F88F484612 -:10B4700008F01CFF08B11020F7E7786828B1698848 -:10B480000089814201D90920EFE7B9F800001C24A6 -:10B4900018B1402809D2402008E03846FEF7EDFCFC -:10B4A0008046402819D11320DFE7403880B280461B -:10B4B0000146384600F0A5F948B108EB88007968E4 -:10B4C00004EBC000085C012803D00820CDE705206C -:10B4D000CBE7FDF76AFF06000BD008EB8800796820 -:10B4E00004EBC0000C18B9F8000020B1E88910B1D5 -:10B4F00013E01120B9E72888172802D36888172895 -:10B5000001D20720B1E7686838B12B1D22464146B9 -:10B510003846FFF71DF90028A7D104F10C0269464F -:10B520002046FFF70EF8288860826888E082B9F824 -:10B53000000030B102202070E889A080E889A0B125 -:10B540002BE003202070A889A080786881784029AA -:10B5500005D180F8028039465046FEF714FE404679 -:10B5600000F034F9A9F8000021E07868218B4089C7 -:10B57000884200D908462083A6F802A00420307231 -:10B58000B9F800007081E0897082F181208B3082EF -:10B59000A08AB081304600F00FF97868C178402960 -:10B5A00005D180F8038039465046FEF73DFE002065 -:10B5B0005BE770B50D460646032105F04FFA04001F -:10B5C00003D0402D04D2402503E043F2020070BDB9 -:10B5D000403DADB2294600F014F958B105EB8501A4 -:10B5E0001C22606802EBC101084400F020F918B188 -:10B5F000082070BD052070BD2A462146304600F067 -:10B6000054F9002070BD2DE9F0410D4616468046E4 -:10B61000032105F023FA0446402D01D2402500E025 -:10B62000403DADB28CB1294600F0EBF880B105EB9E -:10B6300085011C22606802EBC1014718384600F002 -:10B64000F6F838B10820BDE8F08143F20200FAE7CD -:10B650000520F8E733463A4629462046FFF778F8B2 -:10B660000028F0D1EAB221464046FEF789FF0020CB -:10B67000E9E72DE9F0410D4616468046032105F025 -:10B68000EDF90446402D01D2402500E0403DAFB227 -:10B6900024B1304608F0E4FD38B902E043F202007C -:10B6A000D1E7306808F0DCFD08B11020CBE739465F -:10B6B000204600F0A6F860B107EB87011C22606805 -:10B6C00002EBC1014518284600F0B1F818B1082076 -:10B6D000B9E70520B7E7B088A98A884201D90C20CC -:10B6E000B1E76168E88C4978B0EBC10F01D3132052 -:10B6F000A9E73946204600F078F80146606808233B -:10B700004078C20005F1240005F015F8D6E90012D2 -:10B71000C0E90012FAB221464046FEF7A7FE00201B -:10B7200091E72DE9F0470D461F46904681460321DB -:10B7300005F094F90446402D01D2402001E0A5F126 -:10B74000400086B23CB14DB1384608F0CDFD50B155 -:10B750001020BDE8F08743F20200FAE76068C8B144 -:10B76000A0F80C8024E03146204600F04AF888B169 -:10B7700006EB86011C22606802EBC10145182846D1 -:10B7800000F055F840B10820E3E700002C0000204D -:10B79000742002000520DCE7A5F80880F2B22146FB -:10B7A0004846FEF7EDFE1FB1A88969890844388034 -:10B7B0000020CEE704F0ADBD017821F00F01491C57 -:10B7C00021F0F00110310170FDF7F2BD10B5044613 -:10B7D000402800D9FFDF4034A0B210BD4068426964 -:10B7E0000078484302EBC0007047C2784068037895 -:10B7F00012FB03F24378406901FB032100EBC10017 -:10B800007047C2788A4209D9406801EB81011C2245 -:10B8100002EBC101405C08B1012070470020704775 -:10B820000078062801D90120704700207047007871 -:10B83000062801D00120704700207047F0B401EBCA -:10B8400081061C27446807EBC6063444049D052680 -:10B850002670E3802571F0BCFEF782BA10B54189ED -:10B8600011B1FFF7DDFF08B1002010BD012010BDB0 -:10B8700010B5C18C8278B1EBC20F04D9C18911B166 -:10B88000FFF7CEFF08B1002010BD012010BD10B59C -:10B890000C4601230A22011D04F083FF0078218851 -:10B8A000012282409143218010BDF0B402EB820559 -:10B8B0001C264C6806EBC505072363554B681C79AD -:10B8C000402C03D11A71F0BCFEF7F3BCF0BC7047FA -:10B8D00010B5EFF3108000F0010472B6E94841782A -:10B8E000491C41704078012801D1F7F74BFB002C2F -:10B8F00000D162B610BD70B5E24CE07848B90125C0 -:10B90000E570FFF7E5FFF7F745FB20B1002008F0F1 -:10B910009AF8002070BD4FF080406571C0F8045364 -:10B92000F7E770B5EFF3108000F0010572B6D54C63 -:10B93000607800B9FFDF6078401E6070607808B9F9 -:10B94000F7F724FB002D00D162B670BDCD4810B5CD -:10B95000C17821B100214171C170FFF7E2FF0020E1 -:10B9600010BD10B50446F7F715FBC649C978084065 -:10B9700000D001202060002010BD2DE9F05FDFF82D -:10B9800004934278817889F80620002689F8071008 -:10B99000074689F808600078354620B101280FD0A5 -:10B9A00002280FD0FFDFF7F702FB98B1F7F706FB8D -:10B9B000B0420FD13046F7F705FB0028FAD047E038 -:10B9C0000126F0E7FFF784FFF7F7E4FA0028FBD041 -:10B9D0000226E8E701208407E060C4F80451AA4980 -:10B9E0000E600107D1F84412A74AC1F34231243254 -:10B9F0001160A549343108604FF0020BC4F804B35C -:10BA0000A060DFF888A2DAF80010C94341F3001102 -:10BA100001F10108DAF8001041F01001CAF8001035 -:10BA200000E020BFD4F804010028FAD03046F7F730 -:10BA3000C9FA0028FAD0B8F1000F05D1DAF80010E1 -:10BA400021F01001CAF80010C4F808B3C4F804517A -:10BA500099F807004C4670B1387860B9F7F79AFA50 -:10BA6000074608F09FF96FF0004117B1C4E90310D1 -:10BA700001E0C4E9030116B12571BDE8F09F01277B -:10BA8000BE0727714FF01908C6F80883B761C6F8DA -:10BA90000051C6F80C51C6F81051F7F77BFA10B1F7 -:10BAA000A770376100E02770FFF712FF7649A07991 -:10BAB00020310860C6F80483DFE770B5050000D1C7 -:10BAC000FFDF4FF080424FF0FF30C2F80803002143 -:10BAD000C2F80011C2F80411C2F80C11C2F810111A -:10BAE000684C6170F7F75CFA10B10120E07060708B -:10BAF0002846BDE8704040E72DE9F05F6448D0F883 -:10BB000000B0634A6349083211608406D4F8080122 -:10BB100010B14FF0010801E04FF00008D4F8000127 -:10BB200000B101208146D4F8040108B1012600E0EB -:10BB30000026D4F80C0100B101208246D4F810018F -:10BB400008B1012700E0002748EA090126EA0100C0 -:10BB500020EA0A00B84300D0FFDF0025B8F1000F4B -:10BB600004D0C4F80851012007F06DFF5FEA090016 -:10BB7000DFF810814FF0010913D0C4F8005198F894 -:10BB8000050020B188F80550002007F05CFF98F808 -:10BB9000000030B1F7F7FEF918B188F80290C4F848 -:10BBA00010900EB1C4F80451BAF1000F0CD0C4F8D3 -:10BBB0000C5198F80200464600B9FFDFB5703570A9 -:10BBC000C4F81490FFF7ADFE37B1C4F8105198F8DF -:10BBD000040008B100F020F82D49091DC1F800B09B -:10BBE0004BE770B5274DE87808B9F7F7CFF9012092 -:10BBF0008407A061A87850B1D4F80C0120B90020C6 -:10BC0000F7F7E0F90028F7D10020C4F80C014FF055 -:10BC1000FF30C4F8080370BD2DE9F041194C4FF016 -:10BC200080470125E079F0B1012803D0217A401E38 -:10BC3000814218DAF7F7AEF9064608F0B3F8E17971 -:10BC4000012902D9217A491C21720EB1216900E033 -:10BC5000E168411A022902DA11F1020F0BDC0EB180 -:10BC6000206100E0E060FFF733FEF7F793F928B1B9 -:10BC70003D61A57003E07D61BDE8F0812570002085 -:10BC80002072F9E7380000201805004010ED00E0B0 -:10BC900010050240010000014FF0E0214FF000705C -:10BCA000C1F88001C1F88002384B802283F800245B -:10BCB000C1F80001704700B502460420344903E092 -:10BCC00001EBC0031B792BB1401EC0B2F8D2FFDFDD -:10BCD000FF2000BD41F8302001EBC00100224A7175 -:10BCE0008A7101220A7100BD294A002102EBC000BD -:10BCF0000171704710B50446042800D3FFDF2448C3 -:10BD000000EBC4042079012800D0FFDF6079A1791D -:10BD1000401CC0B2814200D060714FF0E0214FF072 -:10BD20000070C1F8000210BD2DE9F0411948056806 -:10BD300018491948083108601448042690F800048E -:10BD4000134F4009154C042818D0FFDF16E0217866 -:10BD500007EBC1000279012A08D1427983799A421E -:10BD600004D04279827157F8310080472078401C16 -:10BD7000C0B22070042801D300202070761EF6B2D5 -:10BD8000E5D20448001D0560BDE8F08119E000E03F -:10BD90009006002010050240010000014C00002028 -:10BDA000F8B51D46DDE906470E000AD004F072FF23 -:10BDB0002346FF1DBCB231462A46009404F030FBF6 -:10BDC000F8BDD0192246194615F096FE2046F8BD5A -:10BDD000F84B586019721A80C90015F026BF70B56B -:10BDE0000D460446102115F0FEFE258117206081C6 -:10BDF000A07B40F00A00A07370BD4FF6FF720A806E -:10BE00000146032008F0E0B9704700897047827B43 -:10BE1000D30701D1920703D480890880002070479E -:10BE200005207047827B920700D5818170470146CB -:10BE30000020098847F2FE12114200D00120DD499E -:10BE4000497A002901D040F00800704700B5034648 -:10BE5000807BC00701D0052000BD59811846FFF73F -:10BE6000E6FFC00703D0987B40F004009873987BEE -:10BE700040F001009873002000BD827B520700D57E -:10BE800009B14089704717207047827B61F3C30274 -:10BE9000827370472DE9F04F0E46017804464FF04B -:10BEA000010B0BFA01F047F2FF1100EA010961688A -:10BEB0004FF6FF7887B008881D469646404506D065 -:10BEC000B9F1000F07D047F2FE12104203D0012053 -:10BED00007B0BDE8F08F40EA090008804FF0000A83 -:10BEE00095B185F800A022780027052003210223C0 -:10BEF000102A6FD2DFE802F06E0D2C35546F768079 -:10BF000054CBC79CCFFEFDFC20780B28EBD004203F -:10BF1000DEE762682089937B9B077DD5172851D384 -:10BF200013898342FBD39289172A01D3824249D1D4 -:10BF30002A7822F03F02921C2A70A5F80100318075 -:10BF4000616888816068817B21F00201817342E130 -:10BF5000042129702189A5F801106189A5F8031031 -:10BF60008FE0208A3188C01D1FFA80F84145D6D362 -:10BF7000062028702089A5F801006089A5F8030033 -:10BF8000A089A5F805000721208ACDE90001608875 -:10BF90002A4671466369FFF703FFA6F800801AE19D -:10BFA000082A10D0082129702189A5F8011061897B -:10BFB000A5F8031030806A1D694604F10C0006F0F4 -:10BFC000CAF910B1CCE01021EDE730889DF80010DF -:10BFD000084456E00EE10A2028702089A5F80100E7 -:10BFE0003180B2E00C2129702189A5F80110618906 -:10BFF000A5F803103080A8E0218933880BEB4102BB -:10C000001FFA82FA534576D3BAF1050F73D30E2285 -:10C010002A7008EA410100E07FE0CDE9001B60885A -:10C020002A467146E368FFF7BBFEA6F800A0D2E0FF -:10C030006048417A002970D0491E41724068217AD7 -:10C04000E26800EBC105D046A9882868D2F800C094 -:10C050000844A0F1080140F808CC506848608DF809 -:10C0600000308DF801A028680290A888ADF804007F -:10C0700060886946F5F7C6FEA5F80480002E01D059 -:10C0800040463080A7E0287840F080022A70287867 -:10C0900040F040022A7060893288C01C1FFA80F884 -:10C0A00042455DD3287820F03F0012302870228965 -:10C0B000A5F801206089CDE9000160882A46714613 -:10C0C000E368FFF76DFEA6F80080287841063CD5AE -:10C0D00000065ED58DF800B08DF801A03188CDE95D -:10C0E000025A091DADF804100420DFF8C88003E0EF -:10C0F00059E04FE02DE033E0049098F808008DF807 -:10C10000140060886946F5F77DFE074630880C30DC -:10C110003080022F02D0E7B36FE048E09DF8142092 -:10C12000D8F8041098F80830404601EBC2019A4252 -:10C1300016D28A88A2B9427A521C88F809200D606A -:10C1400030888880A6F800A057E061682089888040 -:10C1500041E0A1893288491D1FFA81F8424501D288 -:10C1600004274AE029782A4621F03F011631297038 -:10C170002189A5F801106189A5F80310A189CDE9ED -:10C180000010608871462369FFF70AFEA6F8008058 -:10C19000DBE720E0287820F03F0018302870207A74 -:10C1A0006870338017E060680188090404D40527AB -:10C1B00023E00000B0060020C0882189884201D019 -:10C1C00006271AE01E202870A6F800B060680188D3 -:10C1D00021F400410180B9F1000F0ED0DF486188E1 -:10C1E000002200888300032007F044FF6168207864 -:10C1F000887007E0A6F800A003276068018821EA9C -:10C2000009010180384663E62DE9F04F87B01746F3 -:10C21000109C0D0083461E461AD03078C10703D00B -:10C2200000F03F00192801D9012100E0002120463B -:10C23000FFF723FEA8420BD32088A0F57F41FF39EA -:10C2400006D03078410601D4000603D508203FE629 -:10C2500007203DE600208DF800008DF801003078C1 -:10C260006B1E00F03F0C0122A81E4FF0050A4FF094 -:10C27000020999B2BCF1200F76D2DFE80CF08C10E5 -:10C28000755F7569758D759E75B875BD75CB75D7FC -:10C2900075E4757575F475F275F175F0758C052D8D -:10C2A00079D104208DF80000A0788DF80400708802 -:10C2B000ADF8060030798DF80100707800F03F008D -:10C2C0000C2829D00ADCA0F10200092863D2DFE89B -:10C2D00000F0126215621A621D622000122824D03A -:10C2E00004DC0E281BD01028DAD11BE016281FD042 -:10C2F0001828D5D11FE02078800701E0207840077A -:10C30000002848DAF1E020780007F9E72078C00635 -:10C31000F6E720788006F3E720784006F0E72078FB -:10C320000006EDE72088C005EAE72088C004E7E7BB -:10C3300020888004E4E720884004E1E72078800733 -:10C3400029D5032D27D18DF800A0B6F8010083E090 -:10C35000217849071FD5062D1DD381B27078012899 -:10C3600003D0022817D102E0CCE0022000E0102028 -:10C3700006228DF8002072788DF80420801CB1FB15 -:10C38000F0F2ADF8062092B242438A4203D10397FD -:10C39000ADF80890A9E07BE02078000778D5072168 -:10C3A00098B28DF800108108ADF80410B0EB810F41 -:10C3B0006ED10297ADF8062097E02178C90667D5BF -:10C3C000022D65D381B208208DF800007078022814 -:10C3D0005ED300BFB1FBF0F28DF80400ADF806208B -:10C3E00092B242438A4253D1ADF808907CE0207863 -:10C3F00080064DD5092003E02078400648D50A2064 -:10C400008DF80000A088ADF80400ADF80610ADF876 -:10C41000082069E02078000672D50B20ADF80410E2 -:10C420008DF80000ADF8062002975EE02188C9056E -:10C4300066D5022D64D381B20C208DF8000070788F -:10C4400004285DD3C6E72088C00459D5012D57D1F3 -:10C450000D208DF80000A088ADF8040045E021E033 -:10C4600026E016E0FFE72088800449D5052D47D354 -:10C470000E208DF80000A088ADF80400B6F8030087 -:10C480006D1FADF80850ADF80600ADF80AA02BE01E -:10C4900036E02088400433D5012D31D10F208DF8AE -:10C4A000000022E0208800042AD4B6F80100E080D1 -:10C4B000A07B000724D5032D22D3307800F03F0065 -:10C4C0001B2819D011208DF80000208840F400406E -:10C4D000A4F80000B6F80100ADF80400ED1E03203A -:10C4E000ADF80650ADF80800039769465846F5F7D1 -:10C4F00089FC050008D016E010208DF80000E9E75F -:10C50000072510E008250EE0307800F03F001B28DA -:10C5100009D01D2807D05946032007F055FE208872 -:10C5200000F400402080A07B400708D52046FFF79C -:10C530007EFCC00703D1A07B20F00400A073284636 -:10C54000C6E400B587B0032805D18DF8000088B295 -:10C550006946F5F757FC07B000BD0000B0060020A3 -:10C56000F8B51D46DDE906470E000AD004F092FB3F -:10C570002346FF1DBCB231462A46009403F050FF0B -:10C58000F8BDD0192246194615F0B6FA2046F8BD76 -:10C590002DE9FF4F8DB09B46DDE91B57DDF87CA0F0 -:10C5A0000C46082B05D0E06901F00CF950B11020C1 -:10C5B000D2E02888092140F0100028808AF8001075 -:10C5C000022617E0E16901208871E2694FF42051E9 -:10C5D0009180E1698872E06942F601010181E069B8 -:10C5E000002181732888112140F0200028808AF8DA -:10C5F0000010042638780A900A2038704FF002099B -:10C6000004F118004D460C9001F09FFBB04681E00C -:10C61000BBF1100F0ED1022D0CD0A9EB0800801C2D -:10C6200080B20221CDE9001005AB52461E990D984B -:10C63000FFF796FFBDF816101A98814203D9F74804 -:10C6400000790F9004E003D10A9808B138702FE008 -:10C650004FF00201CDE900190DF1160352461E9963 -:10C660000D98FFF77DFF1D980088401B801B83B24B -:10C67000C6F1FF00984200D203461E990BA8D9B11B -:10C680005FF00002DDF878C0CDE9032009EB060178 -:10C6900089B2CDE901C10F980090BDF816100022B3 -:10C6A0000D9801F0D5FB387070B1C0B2832807D067 -:10C6B000BDF8160020833AE00AEB09018A19E1E788 -:10C6C000022011B0BDE8F08FBDF82C00811901F0F7 -:10C6D000FF08022D0DD09AF80120424506D1BDF881 -:10C6E0002010814207D0B8F1FF0F04D09AF80180E2 -:10C6F0001FE08AF80180C94800680178052902D145 -:10C70000BDF81610818009EB08001FFA80F905EBCF -:10C71000080085B2DDE90C1005AB0F9A01F018FB9B -:10C7200028B91D980088411B4145BFF671AF022D05 -:10C7300013D0BBF1100F0CD1A9EB0800801C81B203 -:10C740000220CDE9000105AB52461E990D98FFF776 -:10C7500007FF1D980580002038700020B1E72DE903 -:10C76000F8439C46089E13460027B26B9AB3491FB4 -:10C770008CB2F18FA1F57F45FF3D05D05518AD88EE -:10C780002944891D8DB200E000252919B6F83C80A6 -:10C790000831414520D82A44BCF8011022F8021B78 -:10C7A000BCF8031022F8021B984622F8024B91466F -:10C7B00004F05EFA4FF00C0C41464A462346CDF891 -:10C7C00000C003F0F4FDF587B16B00202944A41DDF -:10C7D0002144088003E001E0092700E08327384670 -:10C7E000BDE8F88310B50B88848F9C420CD9846B0C -:10C7F000E018048844B1848824F40044A41D234430 -:10C800000B801060002010BD822010BD2DE9F04784 -:10C810008AB00025904689468246ADF81850072711 -:10C820004BE0059806888088000446D4A8F800608C -:10C8300007A8019500970295CDE903504FF40073C6 -:10C8400000223146504601F003FB04003CD1BDF804 -:10C850001800ADF82000059804888188B44216D1EC -:10C860000A0414D401950295039521F40041009720 -:10C87000049541F4804342882146504601F0BEF8B9 -:10C8800004000BD10598818841F40041818005AAFC -:10C8900008A94846FFF7A6FF0400DCD000970598DA -:10C8A00002950195039504950188BDF81C3000227E -:10C8B000504601F0A3F8822C06D105AA06A94846E5 -:10C8C000FFF790FF0400ACD0ADF8185004E00598D5 -:10C8D000818821F40041818005AA06A94846FFF716 -:10C8E00081FF0028F3D0822C03D020460AB0BDE897 -:10C8F000F0870020FAE710B50C46896B86B051B17D -:10C900000C218DF80010A18FADF80810A16B0191DA -:10C910006946FAF7C9FB00204FF6FF71A063E18773 -:10C92000A08706B010BD2DE9F0410D460746896B82 -:10C930000020069E1446002911D0012B0FD132464B -:10C9400029463846FFF762FF002808D1002C06D0A0 -:10C95000324629463846BDE8F04100F042BFBDE806 -:10C96000F0812DE9FC411446DDE9087C0E46DDE945 -:10C970000A15521DBCF800E092B2964502D207207B -:10C98000BDE8FC81ACF8002017222A70A5F80160F0 -:10C99000A5F803300522CDE900423B462A46FFF7C1 -:10C9A000DFFD0020ECE770B50C4615464821204617 -:10C9B00015F03BF904F1080044F81C0F00204FF675 -:10C9C000FF71E06161842084A5841720E08494F8DD -:10C9D0002A0040F00A0084F82A0070BD4FF6FF726A -:10C9E0000A800146042007F0EFBB30B585B00C4645 -:10C9F0000546FFF780FFA18E284629B101218DF859 -:10CA000000106946FAF750FB0020E0622063606383 -:10CA100005B030BDB0F84000704700005000002065 -:10CA200090F84620920703D4408808800020F3E75E -:10CA30000620F1E790F846209207EDD5A0F84410C3 -:10CA4000EAE70146002009880A0700D5012011F015 -:10CA5000F00F01D040F00200CA0501D540F00400FB -:10CA60008A0501D540F010004A0501D540F02000AC -:10CA70000905D1D540F04000CEE700B5034690F857 -:10CA80004600C00701D0062000BDA3F8421018469A -:10CA9000FFF7D7FF10F0760F05D093F8460040F06F -:10CAA000040083F8460013F8460F40F001001870A8 -:10CAB000002000BD90F84620520700D511B1B0F813 -:10CAC0004200A9E71720A7E710F8462F61F3C30239 -:10CAD0000270A1E72DE9FF4F9BB00E00DDE92B347A -:10CAE000DDE92978289D25D02878C10703D000F0FA -:10CAF0003F00192801D9012100E000212046FFF75D -:10CB0000D9FFB04216D3287841060FD400F03F0178 -:10CB10001E2909D0218811F47F6F0BD13A884AB1C0 -:10CB2000A1F57F42FF3A05D0010606D500F03F008F -:10CB3000122802D004201FB0C4E5FC491D984FF014 -:10CB4000000A08718DF818A08DF830A00CAA0A60B0 -:10CB5000ADF81CA0ADF824A02978994601F03F0259 -:10CB6000701F5B1C04F1180CD3464FF0030ECDF878 -:10CB700028C01F2A7ED2DFE802F07D7D107D227D55 -:10CB8000AE7DF77DF67DF57DF47DF77DF37D7D7DD2 -:10CB9000F27DF17D7D7D7D7DF00094F84610B5F845 -:10CBA0000100890767D5032E65D14FF40061ADF808 -:10CBB000241060808DF830E0ADF83400E9E2052EF5 -:10CBC000F2D1B5F801002083ADF81C00B5F80310D0 -:10CBD0006183002870D088426ED884F80AB0A4F827 -:10CBE00008B04FF6FF7020840A9801F0AEF80520D7 -:10CBF00089F8000002208346029011AB1D9A0A9921 -:10CC00001B9801F0A5F820B15EE000BF8DF8180078 -:10CC1000FEE29DF84A00012804D0022089F80100B4 -:10CC2000102003E0012089F8010002200390002277 -:10CC300004A912A805F08FFBE8BB9DF8101003981B -:10CC400088423ED13A88891CA2EB0B00884238DB2F -:10CC500002990220CDE900010DF146034A46414602 -:10CC60001B98FFF77DFC02980BF1020B801C81B230 -:10CC700017AA01E0ACE2B1E0029104A912A805F004 -:10CC80006AFB02999DF81000CDE9000117AB4A46F6 -:10CC900041461B98FFF764FC9DF8100011AB0BEBAD -:10CCA00000011FFA81FB02991D9A084480B202908C -:10CCB0000A991B9801E004E091E001F049F800288E -:10CCC000B5D0BBF1020F03D10A208DF818005DE248 -:10CCD000A7F800B05AE2CDF80CB0072E7ED3B5F815 -:10CCE00001002083ADF81C00B5F803206283002802 -:10CCF00075D0904273D84FF0010B84F80AB0B5F8A4 -:10CD0000050020810020A073E06900F05BFD80B980 -:10CD1000E16942F6010081F806B0E2694FF4205162 -:10CD20009180E16981F80AB0E1690881E169002038 -:10CD30008873F01F20841E984FF0070B6062A4F8E0 -:10CD400022B00A9801F001F889F800B0012083466A -:10CD500004900020ADF846002AE026E2B0E147E169 -:10CD6000EDE01FE2B0E088E04FE000BFBBF1010F53 -:10CD700015D0E0698079012803D1BDF84400ADF8F1 -:10CD80000E0004990420CDE9000103AB4A46414658 -:10CD90001B98FFF7E5FB0498001D80B20490BDF8D6 -:10CDA0004600ADF80C00ADF80E0005981FFA80FBA8 -:10CDB00011AB1D9A0A991B9800F0CAFF28B939884F -:10CDC0000BF1040005908142D0D2BBF1010F3FF47A -:10CDD0001BAFE0698079012808D001E098E023E0EA -:10CDE000BDF84410A1F57F40FF3803D1BDF84400E1 -:10CDF000ADF80E0004990420CDE9000103AB4A46CA -:10CE000041461B98FFF7ACFB62E7072E01D0152EB9 -:10CE10007ED1B5F801102183ADF81C10B5F80320C0 -:10CE2000628309B1914201D90120EFE60121A1728B -:10CE3000A4F808B084F80EB0052E07D0C0B2691D62 -:10CE4000E26905F069FA00287FF4DEAE4FF6FF7064 -:10CE5000208401A806AA09A9CDF800B080E88603BD -:10CE60002878214600F03F031D9A1B98FFF790FB9E -:10CE70008246208BADF81C0088E10120032EC7D12B -:10CE80004021ADF82410B5F801102183ADF81C1035 -:10CE90000AAAB8F1000F00D00023CDE902030492E2 -:10CEA0001D98CDF80480009038880022401E83B27F -:10CEB0001B9800F0CDFF8DF8180050BB0B2189F8AE -:10CEC0000010BDF8280038E04FF0010C052E9FD16E -:10CED0008020ADF82400B5F801102183B5F80300D7 -:10CEE0002084ADF81C10B0F5007F01D907208DE635 -:10CEF00040F47C42228412A8B8F1000F00D0002335 -:10CF0000CDE90330CDE9018C1D980090388801E00F -:10CF10009CE007E0401E83B21B9800F099FF8DF85B -:10CF2000180028B18328A7D10220C7E050000020B4 -:10CF30000D2189F80010BDF84800401C25E1C80902 -:10CF400000EB40020EEB8200B04203D948067DD5CB -:10CF500058461AE1B5F80110ADF81C102A785206AF -:10CF600008D506228DF830202A78120605D58DF8CE -:10CF700030B02FE107228DF830200323CDE9023BAA -:10CF8000DDF878C0CDF810B01D9AA6EB000800922D -:10CF9000CDF804C01FFA88F300221B9800F02EFD84 -:10CFA0008DF818008DF830B0297849060DD5208805 -:10CFB000C00506D5208BBDF81C10884201D1C4F8ED -:10CFC00024B058468DF818B0DFE0832801D14FF027 -:10CFD000020A4FF48070ADF82400BDF81C002083D5 -:10CFE000A4F820801E986062032060841321C9E0A9 -:10CFF000052E2BD3B5F80110ADF81C10A28F32B35B -:10D00000A2F57F43FE3B29D008228DF8302005236E -:10D01000CDE9023BDDF878C0CDF810B01D9A80B2A2 -:10D02000CDF804C040F400430092B5F803201B98EB -:10D0300000F0E4FC4FF400718DF818008DF830B06A -:10D04000ADF82410832813D010B301E0DBE005E035 -:10D05000A08FA0F57F41FE3907D0D9E00B228DF8D3 -:10D0600030204FF6FE72A287D1E7A4F83CB0CFE0A3 -:10D0700000942B4631461E9A1B98FFF770FB8DF8E3 -:10D08000180008B183284BD1BDF81C0020834BE762 -:10D0900000942B4631461E9A1B98FFF760FB8DF8D3 -:10D0A0001800E8BBE18FA06B0844831D8DE888035E -:10D0B0004388828801881B98FFF753FC824665E00D -:10D0C00095F80180022E6FD15FEA080002D0B8F116 -:10D0D000010F7FD109208DF8300007A800908DF84E -:10D0E00034804346002221461B98FFF71CFC8DF834 -:10D0F00036008DF837B050B9B8F1010F11D0B8F142 -:10D10000000F04D1A08FA0F57F41FF3909D0A08F77 -:10D1100038B14FF480608DF830B0ADF824000EE0E7 -:10D1200034E00CA91B98F9F7BFFF82464FF48060EA -:10D130008DF830B0ADF82400BAF1020F06D0FB48EC -:10D140000068C07928B18DF8180027E0A4F818808D -:10D1500042E0BAF1000F03D081208DF818003BE0C7 -:10D1600007A800904346012221461B98FFF7DBFBEE -:10D170008DF8180021461B98FFF7BDFB9DF818009D -:10D1800020B9192189F80010012038809DF830005D -:10D1900020B10CA91B98F9F787FF8246BAF1000F5E -:10D1A00033D019E0062031E514E02078000711D5CE -:10D1B000012E0FD10A208DF83000E088ADF8340040 -:10D1C00004201B9907F000F80820ADF824007FE543 -:10D1D000480618D54FF0040A2088BDF824100843EB -:10D1E0002080BDF8240080050BD5A18FA1F57F40DC -:10D1F000FE3806D11E98E06228982063A6864FF07C -:10D20000030A504697E4042000E59DF8180078B121 -:10D21000012089F80000297889F80110BDF81C1058 -:10D22000A9F802109DF8180089F80400052038803C -:10D230002088BDF8241088432080E2E72DE9FF4FC5 -:10D240008846087895B0012181404FF20900249C5E -:10D250000140ADF820102088DDF88890A0F57F42CD -:10D260004FF0000AFF3A02D029B1000703D5012090 -:10D2700019B0BDE8F08F239E4FF0000B0EA886F882 -:10D2800000B018995D460988ADF83410A7498DF8AB -:10D290001CB0179A0A718DF838B0086098F8000031 -:10D2A00001283BD0022809D003286FD1307820F024 -:10D2B0003F001D303070B8F80400E08098F800108E -:10D2C0000320022904D1317821F03F011B31317054 -:10D2D00094F84610090759D505ABB9F1000F13D0E2 -:10D2E000002102AA82E80B000720CDE90009BDF861 -:10D2F0003400B8F80410C01E83B20022159800F064 -:10D30000A7FD0028D1D101E0F11CEAE7B8F804003C -:10D31000A6F80100BDF81400C01C04E198F805103F -:10D320008DF81C1098F80400012806D04FF4007AFC -:10D3300002282CD00328B8D16BE12188B8F8080066 -:10D3400011F40061ADF8201020D017281CD3B4F8D8 -:10D350004010814218D3B4F84410172901D38142F8 -:10D3600012D1317821F03F01C91C3170A6F80100BB -:10D370000321ADF83410A4F8440094F8460020F0DE -:10D38000020084F8460064E105257DE176E120880D -:10D3900008F1080700F4FE60ADF8200010F0F00F6F -:10D3A0001BD010F0C00F03D03888228B9042EBD1F5 -:10D3B00099B9B878C00710D0B9680720CDE902B193 -:10D3C000CDF804B00090CDF810B0FB88BA88398849 -:10D3D000159800F013FB0028D6D12398BDF8201033 -:10D3E000401C80294ED006DC10290DD020290BD0FE -:10D3F000402987D124E0B1F5807F70D051456DD0B0 -:10D40000B1F5806F97D1DDE0C80601D5082000E0B6 -:10D41000102082460DA907AA0520CDE902218DF82A -:10D420003800ADF83CB0CDE9049608A93888CDE9BC -:10D4300000015346072221461598FFF7A9F8A7E0F7 -:10D440009DF81C2001214FF00A0A002A9BD105AB50 -:10D45000B9F1000F00D00020CDE902100720CDE97E -:10D460000009BDF834000493401E83B2218B0022D2 -:10D47000159800F0EDFC8DF81C000B203070BDF805 -:10D48000140020E09DF81C2001214FF00C0A002A16 -:10D4900022D113ABB9F1000F00D00020CDE902106A -:10D4A0000720CDE900090493BDF83400228C401E0A -:10D4B00083B2218B159800F0CBFC8DF81C000D2059 -:10D4C0003070BDF84C00401CADF8340005208DF8DC -:10D4D0003800208BADF83C00BBE000E028E0388845 -:10D4E000218B88427FF450AF9DF81C004FF0120A48 -:10D4F00000281AD1606A98B1B878C0073FF444AFE9 -:10D50000BA680720CDE902B2CDF804B00090CDF89A -:10D5100010B0FB88BA88159800F070FA8DF81C00DE -:10D52000132030700120ADF8340092E0500000204C -:10D530003988208B8142D5D19DF81C004FF0160A06 -:10D540000028A06B08D0E0B34FF6FF7000215F46C3 -:10D55000ADF808B0019027E068B1B978C907C1D12A -:10D56000E18F0DAB0844821D03968DE80C024388C1 -:10D570008288018809E0B878C007BFD0BA680DABCF -:10D5800003968DE80C02BB88FA881598FFF7E9F935 -:10D5900005005ED0072D72D076E0019005AA02A9A1 -:10D5A0002046FFF71FF90146E28FBDF808008242CE -:10D5B00001D00029F1D0E08FA16B084407800198C9 -:10D5C000E08746E09DF81C004FF0180A40B1208B20 -:10D5D000C8B13888208321461598FFF78CF938E0C8 -:10D5E00004F118000090237E012221461598FFF7D0 -:10D5F0009AF98DF81C000028EDD119203070012017 -:10D60000ADF83400E7E7052521461598FFF773F9D3 -:10D610003AE0208800F40070ADF8200050452DD18C -:10D62000A08FA0F57F41FE3901D006252CE0D8F867 -:10D6300008004FF0160A48B1A063B8F80C10A18793 -:10D640004FF6FF71E187A0F800B002E04FF6FF70DF -:10D65000A087BDF8200030F47F611AD07823002223 -:10D660000420159906F006FD98F800002071208826 -:10D67000BDF82010084320800EE000E00725208838 -:10D68000BDF8201088432080208810F47F6F1CD0C4 -:10D690003AE02188814321809DF8380020B10EA90D -:10D6A0001598F9F701FD05469DF81C000028EBD000 -:10D6B00086F801A001203070208B70809DF81C003E -:10D6C00030710520ADF83400DEE7A18EE1B1189885 -:10D6D0000DAB0088ADF834002398CDE90304CDE903 -:10D6E0000139206B0090E36A179A1598FFF7F2F959 -:10D6F000054601208DF838000EA91598F9F7D4FCDD -:10D7000000B10546A4F834B094F8460040070AD5A5 -:10D710002046FFF796F910F0760F04D114F8460F63 -:10D7200020F0040020701898BDF8341001802846BD -:10D730009EE500B585B0042806D102208DF80000D2 -:10D7400088B26946F9F7B0FC05B000BD10B5384C99 -:10D750000B782268012B02D0022B2AD111E013781A -:10D760000BB1052B01D10423137023688A889A809A -:10D770002268CB88D38022680B8913814989518123 -:10D780000DE08B8893802268CB88D38022680B8938 -:10D7900013814B8953818B899381096911612168B8 -:10D7A000F9F782FC226800210228117003D00028BA -:10D7B00000D0812010BD832010BD806B002800D0D8 -:10D7C000012070478178012909D10088B0F5205FD8 -:10D7D00003D042F60101884201D1002070470720A2 -:10D7E0007047F0B587B0002415460E460746ADF8E1 -:10D7F000144010E0069801882980811DCDE902417E -:10D800000721019404940091838842880188384656 -:10D8100000F0F4F830B906AA05A93046FEF7E2FF99 -:10D820000028E7D0822800D1002007B0F0BD00001A -:10D830005000002010B58B7883B102789A4205D150 -:10D840000B885BB102E08B79091D4BB18B789A4252 -:10D85000F9D1B0F801300C88A342F4D1002010BDFA -:10D86000812010BD072826D012B1012A27D103E05C -:10D87000497801F0070102E04978C1F3C2010529A6 -:10D880001DD2DFE801F00318080C12000AB10320D2 -:10D8900070470220704704280DD250B10DE00528D2 -:10D8A00009D2801E022808D303E0062803D00328EB -:10D8B00003D005207047002070470F20704781205B -:10D8C0007047C0B282060BD4000607D5FE48807AA6 -:10D8D0004143C01D01EBD00080B27047084670473D -:10D8E0000020704770B513880B800B781C0625D577 -:10D8F000F54CA47A844204D843F01000087000204C -:10D9000070BD956800F0070605EBD0052D78F54051 -:10D9100065F304130B701378D17803F0030341EA25 -:10D92000032140F20123B1FBF3F503FB15119268CB -:10D93000E41D00FB012000EBD40070BD906870BDB9 -:10D9400037B51446BDF8041011809DF804100A067E -:10D950001ED5C1F30013DC49A568897A814208D835 -:10D96000FE2811D1C91DC9085A422846F5F73FFBC8 -:10D970000AE005EBD00100F0070201250878954088 -:10D98000A843934018430870207820F010002070BE -:10D990003EBD2DE9F0410746C81C0E4620F00300AD -:10D9A000B04202D08620BDE8F081C74D0020344649 -:10D9B0002E60AF802881AA72E8801AE0E988491CAD -:10D9C000E980810614D4E17800F0030041EA0020E8 -:10D9D00040F20121B0FBF1F201FB12012068FFF7D8 -:10D9E00070FF2989084480B22881381A3044A06029 -:10D9F0000C3420784107E1D40020D4E72DE9FF4F13 -:10DA000089B01646DDE9168A0F46994623F440454B -:10DA1000084600F00DFB04000FD0099802F0E6FF65 -:10DA20000290207800060AD5A748817A02988142A0 -:10DA300005D887200DB0BDE8F08F0120FAE7224617 -:10DA400001A90298FFF74EFF834600208DF80C00D5 -:10DA50004046B8F1070F1AD001222146FFF702FF16 -:10DA60000028E7D12078400611D502208DF80C005F -:10DA7000ADF81070BDF80400ADF81200ADF81460F8 -:10DA80001898ADF81650CDF81CA0ADF818005FEA54 -:10DA9000094004D500252E46A84601270CE0217830 -:10DAA000E07801F0030140EA012040F20121B0FBDF -:10DAB000F1F2804601FB12875FEA494009D5B8457B -:10DAC00007D1A178207901F0030140EA0120B0429A -:10DAD00001D3BE4201D90720ACE7A8191FFA80F98B -:10DAE000B94501D90D20A5E79DF80C0028B103A97F -:10DAF0000998F9F7D7FA00289CD1B84507D1A07842 -:10DB00004FEA192161F30100A07084F804901A987B -:10DB100000B10580199850EA0A0027D0199830B151 -:10DB20000BEB06002A46199913F0E6FF0EE00BEB0B -:10DB300006085746189E099803F09AF82B46F61DDA -:10DB4000B5B239464246009502F031FC224601A9A1 -:10DB50000298FFF7C7FE9DF80400224620F010004F -:10DB60008DF80400DDE90110FFF7EAFE002061E70F -:10DB70002DE9FF4FDFF8509182461746B9F806109D -:10DB8000D9F8000001EB410100EB810440F20120D3 -:10DB9000B2FBF0F185B000FB11764D46DDF84C800C -:10DBA00031460698FFF78DFE29682A898B46611A4F -:10DBB0000C3101441144AB8889B28B4202D88420D5 -:10DBC00009B038E70699CDB2290603D5A90601D5D3 -:10DBD0008520F5E7B9F806C00CF1010C1FFA8CFCA2 -:10DBE000A9F806C0149909B1A1F800C0A90602D588 -:10DBF000C4F8088007E0104480B2A9F80800191A98 -:10DC000001EB0B00A0602246FE200699FFF798FE6C -:10DC1000E77026712078390A61F30100320AA17891 -:10DC200040F0040062F30101A17020709AF8020034 -:10DC30006071BAF80000E08000262673280602D53D -:10DC400099F80A7000E00127A80601D54FF00008F6 -:10DC50004D4600244FF007090FE0CDE90268019618 -:10DC6000CDF800900496E9882046129B089AFFF7A9 -:10DC7000C5FE0028A4D1641CE4B2BC42EDD3002050 -:10DC80009EE72DE9F047804600F0D2F9070005D065 -:10DC9000002644460C4D40F2012919E00120BDE860 -:10DCA000F087204600F0C4F90278C17802F0030240 -:10DCB00041EA0222B2FBF9F309FB13210068FFF7E6 -:10DCC00000FE304486B201E0BC060020641CA4B211 -:10DCD000E988601E8142E4DCA8F10100E88028891F -:10DCE000801B288100203870D9E710B5144631B167 -:10DCF000491E218002F07AFEA070002010BD012094 -:10DD000010BD10B5D24904460088CA88904201D39C -:10DD1000822010BD096800EB400001EB80025079C1 -:10DD2000A072D08820819178107901F0030140EA37 -:10DD30000120A081A078E11CFFF7D4FD206120889C -:10DD4000401C2080E080002010BD0121018270472E -:10DD50002DE9FF4F85B04FF6FF788246A3F800808B -:10DD600048681F460D4680788DF806004868008890 -:10DD7000ADF8040000208DF80A00088A0C88A04243 -:10DD800000D304462C8241E0288A401C2882701D62 -:10DD90006968FFF74FFDB8BB3988414501D1601E66 -:10DDA00038806888A04236D3B178307901F0030119 -:10DDB00040EA012901A9701DFFF73CFD20BB29891C -:10DDC00041452CD0002231460798FFF74BFDD8B9CA -:10DDD0002989494518D1E9680391B5F80AC0D6F8F0 -:10DDE00008B05046CDF800C002F042FFDDF800C098 -:10DDF0005A460CF1070C1FFA8CFC4B460399CDF8E0 -:10DE000000C002F097FA50B1641CA4B2204600F0A2 -:10DE10000FF90600B8D1641E2C828220D0E67C80E7 -:10DE20007079B871F088B8803178F07801F003012A -:10DE300040EA01207881A7F80C90504602F0D6FD08 -:10DE4000324607F10801FFF74DFD38610020B7E6C3 -:10DE50002DE9FF4F87B081461C469246DDF860B041 -:10DE6000DDF85480089800F0E3F805000CD048462F -:10DE700002F0BCFD2978090608D57549897A8142E6 -:10DE800004D887200BB0D6E50120FBE7CAF30906CA -:10DE90002A4601A9FFF726FD0746149807281CD03B -:10DEA00000222946FFF7DEFC0028EBD12878400647 -:10DEB00013D501208DF808000898ADF80C00BDF8C6 -:10DEC0000400ADF80E00ADF81060ADF8124002A9E4 -:10DED0004846F9F7E7F80028D4D12978E87801F026 -:10DEE000030140EA0121AA78287902F0030240EAFE -:10DEF0000220564507D0B1F5007F04D9611E81424A -:10DF000001DD0B20BEE7864201D90720BAE7801B5E -:10DF100085B2A54200D92546BBF1000F01D0ABF870 -:10DF20000050179818B1B9192A4613F0E5FDB8F159 -:10DF3000000F0DD03E4448464446169F02F0AAFE0C -:10DF40002146FF1DBCB232462B46009402F068FA0F -:10DF5000002097E72DE9F04107461D461646084682 -:10DF600000F066F804000BD0384602F03FFD21783F -:10DF7000090607D53649897A814203D8872012E5F8 -:10DF8000012010E522463146FFF7ACFC65B121784F -:10DF9000E07801F0030140EA0120B0F5007F01D8EC -:10DFA000012000E0002028700020FCE42DE9F04171 -:10DFB00007461D461646084600F03AF804000BD006 -:10DFC000384602F013FD2178090607D52049897AE1 -:10DFD000814203D88720E6E40120E4E4224631466A -:10DFE000FFF7AEFCFF2D14D02178E07801F003029A -:10DFF00040EA022040F20122B0FBF2F302FB1300E0 -:10E0000015B900F2012080B2E070000A60F301014E -:10E0100021700020C7E410B50C4600F009F828B1C3 -:10E02000C18821804079A070002010BD012010BD62 -:10E030000749CA88824209D340B1096800EB400011 -:10E040006FF00B0202EB800008447047002070471D -:10E05000BC06002010B50C4601F03AFD80B3204606 -:10E0600000F0B7FA68B32278102A09D0112A07D035 -:10E07000022A05D0032A03D0162A2ED0FFDF1DE086 -:10E08000A0781E282BD00EDC0C2824D008DC092810 -:10E0900027D2DFE800F013261726261E1E1A1C00C2 -:10E0A00012281ED11BE0302819D01ADDA0F13A0049 -:10E0B000032816D2DFE800F011150B00002010BD78 -:10E0C00013E010E043F20200F9E70420F7E70D2027 -:10E0D000F5E70F20F3E70820F1E71120EFE707202D -:10E0E000EDE70320EBE7FFDFE8E7FFDFE6E700F01F -:10E0F00070BA70B50346002002466FF02F050EE09F -:10E100009C5CA4F130060A2E02D34FF0FF3070BDA4 -:10E1100000EB800005EB4000521C2044D2B28A4242 -:10E12000EED370BD30B50A240AE0B0FBF4F304FB73 -:10E1300013008D18303005F8010C521E1846D2B26B -:10E14000002AF2D130BD30B500234FF6FF7510E044 -:10E15000040A44EA002084B2C85C6040C0F303149F -:10E16000604005EA00344440E0B25B1C84EA4010A1 -:10E170009BB29342ECD330BD10B50AF0FFF90428EE -:10E1800003D00AF0FBF9052802D108F0A0FC28B959 -:10E190000BF056FB20B107F047FB08B1012010BD82 -:10E1A000002010BD0178406819B190F8721059B97B -:10E1B00001E001F017BD90F8041129B190F80401B5 -:10E1C000042801D0012070470020704770B50C462C -:10E1D0000546062102F042FC606008B1002006E01E -:10E1E0000721284602F03AFC606018B10120207037 -:10E1F000002070BD022070BD2DE9FC470C4606468C -:10E200006946FFF7E3FF00287DD19DF8000050B17B -:10E2100007F09CFAB0427CD0214630460EF0A1F9BE -:10E22000002873D12DE008F065F9B04271D0214685 -:10E2300030460CF041FC002868D1019D95F8C800DB -:10E2400022E0012000E00020804695F835004FF0E4 -:10E25000010A4FF00009F0B195F8360080071AD591 -:10E2600084F8019084F800A084F80290A68095F8C4 -:10E270003710A171298F2181698F618185F83590CF -:10E2800044E0019D95F8040158350028DBD1A87EB3 -:10E290000028D8D0D5E7304602F0FCFC070000D1BA -:10E2A000FFDF384601F051FE40B184F801900E21A5 -:10E2B0002170A680E08084F802A027E0304602F0BA -:10E2C000D7FC070000D1FFDFB8F1000F21D038469E -:10E2D00001F0CCFEB8B19DF8000038B90198D0F833 -:10E2E000F0004188B14201D180F80090304607F03B -:10E2F000C3F884F801900B21217084F80290A68065 -:10E30000E97EA17100E004E085F81A900120BDE8E3 -:10E31000FC870020FBE71CB56946FFF757FF00B1FB -:10E32000FFDF684601F06CFCF94900208968A1F81C -:10E33000CA001CBD2DE9FC4104460E46062002F031 -:10E3400037FB0546072002F033FB2844C7B20025FF -:10E35000A8463E4417E02088401C80B22080B0428E -:10E3600002D34046A4F8008080B2B84204D3B04241 -:10E3700002D20020BDE8FC816946FFF727FF002894 -:10E38000F8D06D1CEDB2AE42E5D84FF6FF7020809C -:10E390001220EFE738B54FF6FF70ADF800000DE042 -:10E3A0000621BDF8000002F06BFB04460721BDF812 -:10E3B000000002F065FB0CB100B1FFDF00216846F0 -:10E3C000FFF7B8FF0028EBD038BD2DE9F047D1A109 -:10E3D0000F79D1F8008007F0BDF810F003F8CF4CAA -:10E3E0004FF004091020A4F8389060874FF6FF76AC -:10E3F000A4F85460A4F85660002584F8315004F85D -:10E400002E5BC6492570A5713E39A573C1F87B8086 -:10E4100081F87F707B31481E0CF029FD25751B208B -:10E42000E0824FF4A47121836083A1830321A1774B -:10E4300084F81F9020846084B848A1843E38057019 -:10E440004680B3480C300570B448103805704680DB -:10E45000BDE8F08770B5AE4C0D466060217006F0E7 -:10E46000F3FFFFF797FFFFF7B0FF207809F031FDCA -:10E4700008F02EF9217860680CF00CFC20780FF081 -:10E4800011FA28460AF071FE07F06AF921786068EF -:10E490000EF068F9BDE870400FF0A4BF10B501247C -:10E4A0000AB1002010BD21B1012903D0002420466B -:10E4B00010BD022111F0C6FBF9E72DE9F047040079 -:10E4C00000D1FFDF954D002695F8310058B16670F8 -:10E4D0001620207095F83200A07095F83300E07097 -:10E4E00085F8316068E0287840B12C22A91C2046CC -:10E4F00013F002FB102020702E705DE095F82E00C6 -:10E5000060B10120E07095F82F00A07095F8300000 -:10E5100060701120207085F82E604DE07F48022148 -:10E5200056308246FFF706FF00B1FFDFB5F8569080 -:10E53000062002F03DFA0746072002F039FA384477 -:10E54000C7B2781C00F0FF08B5F85600B84212D1E7 -:10E55000204607F04BFF50BB95F8340070B366704F -:10E56000132020702021A01C13F03DFB0220A0707E -:10E5700085F8346020E040451AD1204607F09CF829 -:10E58000E0B12078132817D1A0783C2814D1A088B6 -:10E59000072102F063FA050000D1FFDF288806F0AA -:10E5A0006BFFA088072102F06BFA00B1FFDF03E0E8 -:10E5B0002146FFF721FE08B1012049E7022150461C -:10E5C000FFF7B8FE18B9B5F856104945BCD1002080 -:10E5D0003EE772E710B5514C207828B10A21BDE81A -:10E5E0001040102001F0A1BAFFF7C6FD08B10C20C1 -:10E5F00002E00FF042FF00202071012060710A212B -:10E60000E170207010BD70B5444D0446287828B1E3 -:10E61000BDE870403221102001F087BA207818B18F -:10E62000012801D0122010E001F090FA20B110F082 -:10E630006EF808B10C2008E0207801F057FA04F1D8 -:10E640001703E21D611C0FF06FFF28710120687134 -:10E650003221E970287070BD70B5304C05462078C5 -:10E6600028B1BDE870400B21102001F05EBA287877 -:10E6700018B1012801D012200EE0FFF77DFD08B18E -:10E680000C2009E0287801F031FA691C0FF0BCFE7B -:10E6900008B1002000E007202071012060710B21EB -:10E6A000E170207070BD10B51C4C217829B130216B -:10E6B000BDE81040102001F038BA008810F02AF8A8 -:10E6C000302110B10020207100E021710120607123 -:10E6D000E170207010BD70B5104C0546207828B14F -:10E6E000BDE870403121102001F01FBA01F02EFA70 -:10E6F00008B10C2005E0287800F0010010F004F8C3 -:10E7000000202071012060713121E170207070BD06 -:10E7100058000020FFFFFFFF1F0000000607002039 -:10E7200010B5FB4C207828B13421BDE810401020F2 -:10E7300001F0FBB901F00AFA20B10FF0E8FF08B1CF -:10E740000C2002E00FF044FF0020207101206071D6 -:10E750003421E170207010BDED48017819B10F210E -:10E76000102001F0E2B900210171102181700F2108 -:10E77000C170FF2181714FF6FF710181E549496840 -:10E780000A7882728A8882814988C1810121417117 -:10E790000170704710B5DE4C207828B12B21BDE800 -:10E7A0001040102001F0C1B90821A01D05F029FA80 -:10E7B00000202071012060712B21E170207010BDBC -:10E7C00070B5D34C217829B1BDE8704043211020A9 -:10E7D00001F0ABB990F90000042816D0032814D03A -:10E7E00098B1011D11D010F1080F0ED010F10C0FCF -:10E7F0000BD010F1100F08D010F1140F05D010F14C -:10E80000280F02D01220207103E0002506F020F826 -:10E8100025714320E07001206071207077E710B50A -:10E82000BB4C217829B12A21BDE81040102001F00D -:10E830007CB9A31D012200F1100110F03AFE002066 -:10E8400020711020A0702A20E070012060712070DB -:10E8500010BD70B5AE4C0546207828B1BDE87040BB -:10E860004621102001F061B909F088FE052804D086 -:10E87000284609F01BFB002000E00C20207101203D -:10E8800060714621E170207041E770B5A04C0546EB -:10E89000207828B1BDE870404421102001F045B92E -:10E8A00001F054F938B10C2020710120607144212D -:10E8B000E17020702BE72946002006F04CFE002076 -:10E8C000F2E770B5924C0546207828B1BDE870405B -:10E8D0004221102001F029B909F091FB50B10AF052 -:10E8E000A2FF38B128780AF064FC287808F026F9ED -:10E8F000002000E00C202071012060714221E170B5 -:10E90000207004E770B5824C0546207828B1BDE838 -:10E9100070401721102001F008B901F017F938B143 -:10E920000C202071012060711721E1702070EEE64B -:10E930002946012006F00FFE0020F2E738B5744D9D -:10E940000446287828B1BDE838404D21102001F058 -:10E95000ECB8A079E179884213D021791F2910D829 -:10E9600061791F290DD80022114612F0C7FA40B96B -:10E970000022E079114612F0C1FA10B9207A072876 -:10E9800001D9122012E04FF6FF70ADF800000AF036 -:10E9900057FF90B909F0F2FD78B900216846FFF7FA -:10E9A000C9FC50B1204605F070FE002028710120FE -:10E9B00068714D21E970287038BD0C20F6E72DE90B -:10E9C000FC47534C054694F82E0020B12821112015 -:10E9D00001F0ABF89BE4282084F83000012184F892 -:10E9E0002E10A8784FF000091A2825D00EDC162822 -:10E9F00031D2DFE800F0303030303021303030308C -:10EA00003030303030303030302121212A2822D0AF -:10EA10000BDCA0F11E000C281DD2DFE800F01C1C4E -:10EA20001C1C1C1C1C1C1C1C1C0D3A38042812D25B -:10EA3000DFE800F0110211022888B0F5706F0AD2E9 -:10EA40001F20884684F82F0028886946FFF7BEFB00 -:10EA500018B1022019E0122017E09DF80000019F74 -:10EA6000002806D007F5B377019E05D106F1ED0623 -:10EA700004E007F1EC07F7E706F267166846FFF7D0 -:10EA800091FB08B1387818B10C2084F82F003EE4CF -:10EA900087F80080A878307084F82F90684601F0DD -:10EAA000AFF834E47CB51A4C0546207820B1252116 -:10EAB000102001F03AF87CBD28886946FFF786FBF4 -:10EAC000020013484FF00001A0F13E000DD00222D9 -:10EAD000227140F8461F0171E1801020A0702520AE -:10EAE000E0700120607120707CBD019A134658329D -:10EAF00082F83E109E68C0F846601E7B80F84A602F -:10EB000092F83E60002EF3D12888E080E5E700000F -:10EB1000060700205800002010B540B10478406876 -:10EB200013B1B0F8480003E0B0F84A0000E0FB2061 -:10EB30001B2908D3814206D8B2F5A47F03D340F63F -:10EB40004800824201D9122010BD002010BD2DE9DD -:10EB5000FC41FA4D0446287828B1BDE8FC4150211B -:10EB6000102000F0E2BF4FF0010885F805801F215A -:10EB700029711021A9705021E9702188E98085F858 -:10EB8000008020886946FFF721FB08B102200DE0D4 -:10EB90002289E18801236846FFF7BEFF30B9A288C9 -:10EBA000618800236846FFF7B7FF10B12871BDE800 -:10EBB000FC819DF800103A20019E002749B186F89B -:10EBC0008981019991F8C81106F5C476B9B1287107 -:10EBD00013E086F8FD80019991F82011FC36002998 -:10EBE000F5D12F71E08870802089B0806088F08036 -:10EBF000A0883081012201990CE07770D7E72F714E -:10EC0000E08870802089B0806088F080A0883081A2 -:10EC100001990022304610F091FD86F80080ECE763 -:10EC200070B5C64D044686B0287830B106B0512183 -:10EC3000BDE87040102000F078BF01206871002608 -:10EC40002E711021A9705121E9702870208803A924 -:10EC5000FFF7BCFA18B10220287106B057E59DF8FD -:10EC60000C0040B100220499E088B1F84830984285 -:10EC700003D9C01A02E00122F5E70020E88063888A -:10EC8000B1F84A00834201D9181A00E00020288117 -:10EC9000009601960296E088ADF802002089ADF852 -:10ECA00004006088ADF80600A088ADF8080068464A -:10ECB00010F044FD2089BDF80410401A6881A08836 -:10ECC000BDF80810401AA881E088BDF80210401A6B -:10ECD000E988884200DC0846E8806088BDF80610B4 -:10ECE000401A2989884200DC08462881B5E770B5BA -:10ECF000924D0446287828B1BDE870403E2110208E -:10ED000000F013BF00F022FF20B10FF000FD08B1AA -:10ED10000C2008E0E2792078611C0FF07BFE08B13E -:10ED2000002000E002202871012068713E21E97076 -:10ED30002870ECE47CB5814C05461F2084F82F0038 -:10ED400028886946FFF742FA18B1022084F82F009C -:10ED50007CBDAA7802B90322EB7803B903239DF89E -:10ED600000603A2501210020002E019E06D086F881 -:10ED70009311019E96F8DC6146BB1FE086F80711EF -:10ED8000019E96F82C613EB9019E96F806611EB967 -:10ED9000019E96F87B6016B184F82F500AE0019D21 -:10EDA00085F80611019981F80821019981F8093146 -:10EDB00084F82F00019981F807017CBD019E96F827 -:10EDC00092611EB9019E96F87B6016B184F82F50AF -:10EDD0000AE0019D85F89211019981F89421019929 -:10EDE00081F8953184F82F00019981F893017CBD59 -:10EDF000524930B491F82E2022B1562130BC112056 -:10EE000000F093BE562281F83020012281F82E2096 -:10EE10008378DA0802D1C278D40801D0122004E045 -:10EE20005B0701D4520704D5112081F82F0030BCB4 -:10EE3000704730BC7EE770B5404C0546207828B15D -:10EE4000BDE870401D21102000F06FBE1F20207112 -:10EE5000012060711D21E170207009F08FFB0428F2 -:10EE60000BD0052809D0A9791220012907D031B18A -:10EE7000022904D0032929D101E00C2026E02978B9 -:10EE800009B1012922D1E97929B1012903D0022947 -:10EE900001D003291AD1698843F6FD720B1F302077 -:10EEA000934213D2AB881B1F93420FD22187A888AD -:10EEB0006087A87907F065FDE87907F0D0FD28782C -:10EEC000012805D00120002107F0F8FD20711EE483 -:10EED0000220F8E770B5194C217829B1BDE87040DF -:10EEE0001E21102000F021BE1F212171012161711E -:10EEF0001E22E270217002781221012A00D01AB974 -:10EF0000407818B1012801D0217187E40025012A39 -:10EF100009D009F033FB0C26052802D008F008FFC1 -:10EF200088B126717AE407F022FD48B107F031FD7F -:10EF3000618F208F09F070F803E0000006070020C1 -:10EF4000122020716AE4257168E42DE9F047F94C3C -:10EF500007469246B4F84400B7F84A200E4690425D -:10EF600000D31046804697F85210104600F0D4FDAA -:10EF7000B4F84610814200D208460546A146B4F8CE -:10EF80004840B7F84800844200D3044697F851102F -:10EF900000F0C2FDB9F84A10814200D208464FF491 -:10EFA000A4721B2C01D0904204D1B8F11B0F0DD0DC -:10EFB00095420BD0A6F8068035817480B080524609 -:10EFC0003946304610F0BAFB01203070BDE8F087BA -:10EFD0002DE9F04786B00546AFF6C800D0E90090AD -:10EFE000D44E804696F82E0028B12121112000F041 -:10EFF0009CFD06B0EAE71F2086F82F00212086F846 -:10F0000030004FF0010A86F82EA0284600F007FED7 -:10F01000002811D109F0B2FA05280CD009F0AEFA97 -:10F02000042808D096F8340028B907F063FAA0F550 -:10F030007F41FF3901D00C20AAE0BE4801AA3E382A -:10F040000190BD480290BB4806211038039004A8E7 -:10F0500001F0D4FC04007DD003210FF0DAFFB6F8F4 -:10F060004E00A4F84800B6F85000A4F84A0096F8FC -:10F070004D00009096F84C30B6F85020B6F84E107F -:10F08000208801F07EFD00B1FFDF208806F0F3F953 -:10F09000218804F10E0000F068FDA8A004F1120719 -:10F0A000006800900321684604F033FD00206946A3 -:10F0B0000A5C3A54401CC0B20328F9D3288A608005 -:10F0C000688AA080A88AE08094F8522094F85110B1 -:10F0D000B6F8520009F01DF80146A062204609F07A -:10F0E00038F8002784F85E7084F85F70687900F063 -:10F0F000FDFC6076D5F80600C4F81A006889E08344 -:10F10000C4F8089084F80C8084F8F8A0012204F177 -:10F11000FC012046FFF719FF8DF8007001216846B9 -:10F1200004F0F7FC9DF8000000F00701C0F3C102F5 -:10F130001144C0F3401008448DF80000401D2076B3 -:10F14000092801D208302076002120460FF061FF07 -:10F15000287B00E010E007F014FC69792879AA1DEB -:10F1600007F0E5FB50B107F014FC69792879AA1D76 -:10F1700007F080FC78B118E0092009E0208806F04B -:10F180007BF92088062101F07BFC00B1FFDF122013 -:10F1900086F82F002DE72146032007F08FFC20B9C9 -:10F1A0006A882988204608F0C0FE86F82F000028CB -:10F1B000F0D0208806F060F92088062101F060FC7C -:10F1C0000028E7D0FFDF14E738B55A4C207820B18B -:10F1D0002221102000F0A9FC38BD1F20207101253C -:10F1E00065712220E070257094F8340018BB09F096 -:10F1F000C5F9052805D007F07DF9A0F57F41FF3955 -:10F2000019D000202071684608F055FF0028E3D18E -:10F210000098008806F030F900980621008801F077 -:10F220002FFC00B1FFDF444884F834500C380078DC -:10F23000FCF760FD38BD0C20207138BD2DE9F04190 -:10F240003C4D044695F82E0028B1BDE8F04123213D -:10F25000112000F06ABC1F2085F82F00232085F8BC -:10F260003000012085F82E00618840F67B438A1F1C -:10F2700030209A4252D2A288961F9E424ED291428C -:10F280004CD8E188B1F5FA7F48D2218940F677461B -:10F29000A1F10A03B34241D2B1EBD20F3ED9618949 -:10F2A000A28991423AD84FF000082088062101F047 -:10F2B000D5FB06004FF0020707D000F093FC20B109 -:10F2C000D6F8F000017841B903E085F82F70BDE869 -:10F2D000F081D6F83C11097809B13A201EE00521E9 -:10F2E0008171D6F8F0004146A0F80880D6F8F020E9 -:10F2F000A0885081D6F8F020E0889081D6F8F020E0 -:10F300002089D081D6F8F000028943899A4204D836 -:10F310008279082A01D89A4203D3122085F82F0057 -:10F32000D5E722884280D6F8F000077085F82F10C4 -:10F33000CDE7000006070020640000201122330002 -:10F34000FEB5F84C0646207820B12421102000F0AC -:10F35000ECFBFEBD012565712420E0702570304670 -:10F3600010F042F808B1002000E0122020710028BF -:10F37000EFD1EC4884F83C503E38316840F87B1FB0 -:10F3800031790171002684F83C606946062001F05D -:10F39000F0FA00B1FFDF684601F0C9FA60B9BDF8C4 -:10F3A0000470029880F8F850684601F0C0FA18B965 -:10F3B000BDF80400B842F4D12671FEBD2DE9F0413C -:10F3C000D84D064695F82E0028B1BDE8F0412C2115 -:10F3D000112000F0AABB1F2085F82F002C2085F8F3 -:10F3E0003000012085F82E003088062101F036FB20 -:10F3F000040007D000F0F6FB20B1D4F8F010087834 -:10F4000030B901E0022026E0D4F83C01007808B1D0 -:10F410003A2020E094200027005D10F0010F19D061 -:10F42000D6F802004860D6F80600886054F8F00F5D -:10F43000718910228181206806F10C010E3012F0D2 -:10F440005BFB21680320087021683088488085F8BC -:10F450002F703CE70C2085F82F0038E72DE9F041AC -:10F46000B04D04460C26287828B1BDE8F04118219B -:10F47000102000F05ABB0AF0E3F9012730BB607995 -:10F48000032824D8A179012921D8A17B03291ED8DA -:10F49000617BE1B107291AD82179052917D2DFE864 -:10F4A00001F0030C030303002288202A0FD3618894 -:10F4B0008A420CD8B1F5804F09D806F0D6F92079E8 -:10F4C00085F83600204606F098FA064600E0122637 -:10F4D0002E716F711820E8702F70F8E610B5914CFE -:10F4E000217829B11A21BDE81040102000F01DBB81 -:10F4F00001781F2902D91220207106E00021217114 -:10F500000278411C104606F0FCFA012060711A21B5 -:10F51000E170207010BD10B5824C217829B12021F6 -:10F52000BDE81040102000F000BB01781F2902D96F -:10F530001220207106E0002121710278411C104642 -:10F5400006F0CEFA012060712021E170207010BD1C -:10F550002DE9FC41734C217829B1BDE8FC411B2108 -:10F56000102000F0E2BA012767710C2121710078A8 -:10F5700000261225012802D0002866D167E006F097 -:10F5800024F900285ED006F056F900285AD00AF077 -:10F5900057F900286CD106F06FF994F8360050B195 -:10F5A000012808D0042806D0002009F005FE00B18B -:10F5B000FFDF26715CE006F0C9F8A0F57F41FF3956 -:10F5C00056D10022072101A801F018FA05004FD0FA -:10F5D00055480321856028460FF0E2FB284606F0D7 -:10F5E000BAFBB4F84E00A5F84800B4F85000A5F8EE -:10F5F0004A00B4F8520001214C3409F016FF0146CC -:10F60000A8620022284608F0CEFF6078009014F827 -:10F61000043B288834F8022934F84E1901F0B1FA75 -:10F6200000B1FFDF288805F026FF284609F0C4FD59 -:10F6300000B1FFDF2671002205F5C4712846FFF7EF -:10F6400084FC15E006F0C1F890B1257110E008F0D7 -:10F65000A7FF054609F0E8FC50B9267145B1288896 -:10F6600005F00AFF2888072101F00AFA00B1FFDF40 -:10F670001B20E0702770BDE8FC812DE9F041294C8A -:10F680000646207828B1BDE8F0412D21102000F079 -:10F690004CBA3088072101F0E1F905004FF001076D -:10F6A00020D095F8690140B995F86400142801D07C -:10F6B000152802D195F8AA0150B10C202071102014 -:10F6C000A0702D20E0703088E08067712770FEE523 -:10F6D0001022B11C05F5B57012F00EFA85F86971AB -:10F6E0000020EBE70220E9E770B50E4C05462078D4 -:10F6F00028B1BDE870402E21102000F016BA2888ED -:10F70000072101F0ABF90221A0B190F869212AB9D3 -:10F7100090F86420142A09D0152A07D00C202071F3 -:10F7200009E00000060700205800002080F8691159 -:10F730000020F4E721711020A0702E20E0702888AE -:10F74000E08001206071207070BD2DE9FC47FD4C08 -:10F750000646207828B13821102000F0E6F9BDE8EF -:10F76000FC8770884BF68032122190420AD848B14B -:10F770004FF0000830886946FEF728FD20B10220CE -:10F78000207110E021710EE0019800F15809851CEC -:10F790002F887288394648460FF0BCFA2888B8424C -:10F7A000F6D184F80480012060713821E170207066 -:10F7B000D5E77CB5E34C0546207820B149211020DF -:10F7C00000F0B3F97CBD28886946FEF7FFFC38B12C -:10F7D00002202071012060714921E17020707CBD00 -:10F7E00001987F22014680F8602080F86120002285 -:10F7F00080F86220A87801F82C0FE8784870287902 -:10F8000088702271E6E71CB5CE4C217821B15421D5 -:10F81000102000F08AF91CBD00886946FEF7D6FC6E -:10F8200048B102202071012060715421E170102143 -:10F83000A17020701CBD019890F8720000B10120E9 -:10F8400000212171A071EEE71CB5BE4C217821B1D9 -:10F850001321102000F069F91CBD00886946FEF7ED -:10F86000B5FC08B1022005E0019890F82C100129A0 -:10F8700002D00C20207106E0602100222271095C78 -:10F8800021720088E080012060711321E170102155 -:10F89000A17020701CBD2DE9F041AA4C05462078CE -:10F8A00028B1BDE8F0414A21102000F03EB9288877 -:10F8B000072101F0D3F8012358B382886D88C688E8 -:10F8C000418803EB4207BD4217D342F210777E43D3 -:10F8D000BF107943B6FBF1F1491E89B24FF4FA76B5 -:10F8E000B14200D931468D4200D22946491C521CF2 -:10F8F000B1FBF2F15143491E8AB290F8961101B959 -:10F900000284E2800020207163714A20E07023703D -:10F91000DDE40220F7E770B58A4C0546207828B16F -:10F92000BDE870404C21102000F0FFB82888072166 -:10F9300001F094F890B1A97811F0010180F8D71086 -:10F9400004D090F8D51009B109F08AFD002020718B -:10F95000012060714C21E170207070BD0220F6E73B -:10F9600078490A781AB15221102000F0DEB80278E6 -:10F970009AB142788AB142881B2A0ED382881B2A08 -:10F980000BD3C288022A08D36E4A0368423242F877 -:10F990000A3F40685060002000E0122008710120FA -:10F9A00048715222CA700870704770B5654C0546A0 -:10F9B000207828B1BDE870405321102000F0B5B880 -:10F9C000287800F0010008F0A1FB287800F0010081 -:10F9D00009F0F7FC00202071012060715321E170D3 -:10F9E000207070BD70B5574D0646287828B1BDE827 -:10F9F00070405521102000F098B8012270881146FF -:10FA000008F087FB04467088012109F00EFD84424E -:10FA100000D204463088012100F06FF8064601212B -:10FA2000002000F06AF8304401219630844206D963 -:10FA300000F19601201AB0FBF1F0401C81B2E98080 -:10FA400000202871012068715521E970287070BD6F -:10FA500070B53C4D0446287828B1BDE870404E2171 -:10FA6000102000F062B800F071F808B10C200DE031 -:10FA7000601C0EF0A5FF207800F0010005F0F8FEF4 -:10FA8000207800F0010006F080FF0020287101209E -:10FA900068714E21E970287070BD70B5294C05461B -:10FAA000207828B1BDE870404B21102000F03DB80F -:10FAB00009F0C6FE08B10C2003E0287806F031F802 -:10FAC00000202071012060714B21E170207070BD19 -:10FAD00010B50178572907D21B4A52F8211019B1E5 -:10FAE000801C8847012010BD002010BD18B10228DD -:10FAF00001D0012070470020704710B5012904D0C3 -:10FB0000022905D0FFDF204610BDC000503001E0C3 -:10FB100080002C3084B2F6E7022903D0C000703098 -:10FB200080B2704780003C30FAE7064A92F83130E4 -:10FB3000002B06D182F8320082F83310012082F8BF -:10FB40003100704706070020C420020010B508F0FD -:10FB500015FD042807D008F011FD052803D009F091 -:10FB60006FFE002800D0012010BD2DE9FE430025C6 -:10FB70000F4680460A260421404604F042F84046DB -:10FB80000FF00EFC062000F013FF044615E0694656 -:10FB9000062000F0EEFE0AE0BDF80400B84206D0F0 -:10FBA0000298042241460E3011F07AFF50B16846A7 -:10FBB00000F0BDFE0500EFD0641E002C06DD002D18 -:10FBC000E5D005E040460FF0F4FBF5E705B9FFDFAF -:10FBD000D8F800000FF0A8F8761E01D00028CAD08F -:10FBE000BDE8FE8390F8721041B990F8C81029B1B1 -:10FBF00090F8C800042801D00120A2E70020A0E767 -:10FC0000017801299DD1416891F8D520002A98D02A -:10FC1000002281F8D520406809F022BC91E710B598 -:10FC2000038843F6FD711A1F8A4223D24288141FAB -:10FC30008C421FD29A421DD8C28940F67B43911F45 -:10FC4000994217D2018A8C1F9C4213D28A4211D842 -:10FC5000428AB2F5FA7F0DD2828A40F67744A2F149 -:10FC60000A03A34206D2B2EBD10F03D9C18A028B99 -:10FC7000914201D9302010BD017911B1012910D173 -:10FC800007E0417929B1012903D0022901D00329D4 -:10FC900007D1007B38B1012805D0022803D0032802 -:10FCA00001D0122010BD002010BD00000844083013 -:10FCB000424301F14A00104480B27047F0B51D463E -:10FCC0000446A818059B083000FB03F205F14A0022 -:10FCD000104486B2B14238BFFFDF0027276067605B -:10FCE000A760E76027616761A761E76127624FF658 -:10FCF000FF706762A082A6F1280080B265776080FD -:10FD0000B0F5004F88BFFFDF608805F13C018842F5 -:10FD100038BFFFDF6088401B3C3880B220801B2842 -:10FD200038BF1B202080A777F0BD816188617047B4 -:10FD30002DE9F04F0D46C188044600F128080089DE -:10FD400021F4004320F4004221F4004620F400474F -:10FD50004FF0010A4FF000099A4208D100F4004028 -:10FD600001F4004188421CBF0020BDE8F08FB7427B -:10FD70000BD9617FB81B401A083885421BDC08EBA1 -:10FD800006000021058041801EE06088617F801BA5 -:10FD9000401AB0F1080B0ED4BBF11B0FB8BFFFDF48 -:10FDA0005D45D4BF29461FFA8BF1681A0204120C74 -:10FDB00018BFBA4204DD84F817900020BDE8F08F28 -:10FDC00008EB06000180428084F817A0BDE8F08FA0 -:10FDD0002DE9F041044600F12802C08820F40043D8 -:10FDE000E07D002808BFBDE8F081D0180288438874 -:10FDF00013448B423CBF0020BDE8F08100279142B4 -:10FE00009CBF0180478013D9891A0D042D0C4580B1 -:10FE10000ED0E088A61D20F40040854288BFFFDF99 -:10FE200030884FF4004121EA0000284330800AE086 -:10FE3000627F008802F108031044083081B26288B2 -:10FE4000A01D00F0A8FBE7750120BDE8F08130B4EB -:10FE5000B0F804C0C488034600F128052CF4004023 -:10FE60002844A44503D10020188230BC7047B3F861 -:10FE70000CC00488A44509D34088ACEB040CA0EB6B -:10FE80000C0084B20CEB0500C01E06E0A4EB0C04D1 -:10FE90005D7FA4B2AC446044401DB1F800C0A445ED -:10FEA00088BF0C80B3F80CC0BCF1000F0CBF4FF042 -:10FEB000010C4FF0000C82F800C00988198230BC98 -:10FEC00070472DE9F041044600F12801808820F4B4 -:10FED00000404518208A002808BFBDE8F081A089AD -:10FEE00010B9A069807F2871A089218A084480B256 -:10FEF000A08129886A881144814238BFFFDF2888A1 -:10FF00006D88A2894119002791421AD175B1A08844 -:10FF1000261D20F40040A84238BFFFDF30884FF490 -:10FF2000004121EA00002843308009E0627F10444C -:10FF3000083081B202F108036288201D00F02BFB1B -:10FF4000A78127820120BDE8F0812DE9F047418992 -:10FF5000B0F804800027044600F1280A414518BF84 -:10FF60004FF400493AD000BF21F400405044468885 -:10FF70006EB1608904F10A0520F40040B04238BF38 -:10FF8000FFDF288829EA00003043288021E0637FD2 -:10FF9000008803F1080C18446389083023F40045F5 -:10FFA0006288284480B204F10A0190420BD2121AEE -:10FFB00092B20CF11B0C62452CBF03F4004229EAFB -:10FFC000030004D204E0801A80B229EA030210433D -:10FFD0000880781C618987B24145C5D13846BDE8A3 -:10FFE000F0872DE9F047B0F808800B46044600F191 -:10FFF0002801B0F80A90808828F4004C01EB0C0529 -:020000040001F9 -:10000000804504BF0020BDE8F087002A1CBF681DA2 -:10001000106023B1627F691D184611F06DFD2F88B5 -:100020006D888DB1E81987B2208904F1080620F4A3 -:100030000040A84238BFFFDF30884FF4004121EA7A -:100040000000284330800AE0607F6288C1190831CF -:1000500000F1080389B204F1080000F09CFAC845D9 -:1000600004BF208960813846BDE8F0878188C08858 -:1000700081420CBF012000207047018980888142A5 -:100080000CBF01200020704730B48488C28800F182 -:10009000280324F4004C22F40041634494421BD012 -:1000A0008289048A15191C885A88A3189D4216D380 -:1000B00012B18A4210D212E0437F0CF1080C1A19D7 -:1000C0006244408892B2801A80B22333984201D2AF -:1000D00011B104E08A4202D130BC0020704730BC2C -:1000E000012070472DE9F007B0F806C0048900F13F -:1000F000280702462CF400457E1924F400492CF40C -:10010000004A002024F400434FF00108D1450AD1F1 -:1001100004F400440CF4004C644504D05082BDE863 -:10012000F00700207047AB4208D992F81DC05B1B56 -:10013000A3EB0C03A3F10804002308E0B2F802C00B -:10014000547FACEB050CACEB040CACF10804002CB8 -:10015000E4DBB2F80EC0BCF1000F0DD0B6F800C061 -:1001600075884DB15B1B10778B42D7DBD089384443 -:10017000A0EB0C00C01E09E0A4EB0C0410778C422D -:1001800008DB507FD38918443044401D5182BDE8BC -:10019000F00770478B42A8BF82F81C80E6DABDE703 -:1001A0002DE9F05F044600F1280AC088934620F448 -:1001B00000400AEB0005608A894608B1484502D232 -:1001C0000020BDE8F09FE08980B1B5F800806E881E -:1001D00008EB0601884218BFFFDF207F4FF00007C1 -:1001E00050EA060108D0002840D04AE04FF000084D -:1001F000A17F46462971F0E7E08948B1617F01445B -:100200004819B4F81F10A0F8051094F82110C17116 -:10021000E18908EB09004944E18128806F80BBF146 -:10022000000F19D0607F298800F1080301440831CC -:1002300089B26288A01D00F0AEF9E781A07F401C62 -:10024000A077A07D00281CBFE088A082A7756782E8 -:10025000E7750120BDE8F09F607FE18908442844EC -:10026000B0F80510A4F81F10C0792EE0E089B4F8AA -:100270001F105044A0EB080020F8031D94F8211033 -:10028000817006EB090086B2E089BBF1000F48449B -:10029000E081A5F800806E800ED0E088A51D20F4D6 -:1002A0000040B04238BFFFDF28884FF4004121EA08 -:1002B000000030432880C0E7E0895044A0EB0800EC -:1002C00030F8031DA4F81F10807884F82100BEE7E1 -:1002D000818800F1280221F4004C6244B0F814C077 -:1002E000C388614518BF99420FD0818969B9806977 -:1002F00068B101898388994209D021F400412830EE -:10030000084411790079884201D1002070471046D5 -:10031000704700F12803407F01F1050C6044106034 -:100320000888002804BFD81E10600888498808443F -:1003300080B270472DE9F04115460A4600F12806C3 -:100340001C46407F531D0344108857880699002897 -:100350001CBFC01C80B226D088429CBF081A80B245 -:1003600013D9401AA042A8BF20461FFA80F8581897 -:100370004246294611F094FB002818BFBDE8F081E1 -:100380004544A4EB080084B2002001198F423CBF11 -:100390004FF0FF30BDE8F081304422462946BDE8E9 -:1003A000F04111F07DBBFA1C97B2F61ED4E72DE99F -:1003B000F04100F128071D46407F4B1D03441646BF -:1003C00008880024B1F80280069A00281CBFC01CCF -:1003D00080B21FD090429CBF101A80B20DD9801AF3 -:1003E000A842A8BF284684B299182246304611F088 -:1003F00083FB281B85B2264400204119414506D8BD -:1004000039182A46304611F077FB601984B220462D -:10041000BDE8F08108F103011FFA81F8FF1ED9E75A -:100420002DE9F04116460A4600F128071D46407F97 -:10043000531D034410880024B2F802800699002856 -:100440001CBFC01C80B21FD088429CBF081A80B25B -:100450000DD9401AA842A8BF284684B2581822468F -:10046000314611F049FB281B85B226440020411972 -:10047000414506D838442A46314611F03DFB601903 -:1004800084B22046BDE8F08108F103021FFA82F829 -:10049000FF1ED9E7401D704770B5044600F12801E2 -:1004A000C288808820F400431944904208D0A28971 -:1004B000002A04BF228A002A02D1A28A904201D1D6 -:1004C000002070BDB1F800C04D8885B1261D20F414 -:1004D0000040A84238BFFFDF30884FF4004121EAD6 -:1004E00000002843308000202082012070BD607F02 -:1004F0000CF1080100F10803084481B26288201D54 -:1005000000F049F8EFE70021C18101774182C17510 -:100510008175704703881380C289002A04BF0020B8 -:100520007047C28800F1280322F400421A440A608E -:10053000C089704710B50446808AA0F57F41FF3915 -:1005400018BFFFDFE088A082E089002818BF0120E3 -:10055000A07510BD4FF6FF71818200218175704733 -:1005600010B50446808AA0F57F41FF3908BFFFDF40 -:10057000A07D28B9A088A18A884204BF002010BDB0 -:10058000012010BD8188828A914205BF807D0028AC -:1005900000200120704710B4B0F800C02CF40044D3 -:1005A000214489B24FF4004491420AD2521A92B2C5 -:1005B0001B339A422CBF0CF4004224EA0C0104D2F3 -:1005C00004E0891A89B224EA0C021143018010BCAC -:1005D000704770B516464FF6FC72C91C01EA020559 -:1005E000D8B10446C01C20F00301A14200D0FFDFB7 -:1005F000201D012108E00246284401D2034600E004 -:100600000023491CC9B21360B142F4D916B104F1F8 -:10061000040001E04FF00000206005FB06F000F14F -:10062000040070BD024600201168002902D008466F -:1006300009681160704702680A60016070474FF6F0 -:10064000FC73C91C1940101A001F90FBF1F0C0B2D6 -:1006500070474FF6FC73C91C1940001D01FB0200D6 -:10066000704770B50C00054609D0082C00D2FFDF9A -:100670001DB1A1B2286800F044F8201D70BD0DB175 -:1006800000202860002070BD0021026803E09388EC -:100690001268194489B2002AF9D100F032B870B555 -:1006A00000260D460446082900D2FFDF206808B95D -:1006B0001EE0044620688188A94202D00168002912 -:1006C000F7D181880646A94201D100680DE005F105 -:1006D000080293B20022994209D32844491B0260C0 -:1006E00081802168096821600160206000E00026A7 -:1006F000304670BD00230B608A8002680A6001608A -:10070000704700234360021D018102607047F0B50D -:100710000F460188408815460C181E46AC4200D38F -:10072000641B3044A84200D9FFDFA019A84200D9B9 -:10073000FFDF3819F0BD2DE9F041884606460188F3 -:10074000408815460C181F46AC4200D3641B384441 -:10075000A84200D9FFDFE019A84200D9FFDF708866 -:100760003844708008EB0400BDE8F0812DE9F041C9 -:10077000054600881E461746841B8846BC4200D3A7 -:100780003C442C8068883044B84200D9FFDFA0196F -:10079000B84200D9FFDF68883044688008EB040065 -:1007A000E2E72DE9F04106881D460446701980B243 -:1007B000174688462080B84201D3C01B208060883D -:1007C000A84200D2FFDF7019B84200D9FFDF60886D -:1007D000401B608008EB0600C6E730B50D46018877 -:1007E000CC18944200D3A41A4088984200D8FFDF66 -:1007F000281930BD2DE9F041C14D04469046A87836 -:100800000E46A04200D8FFDF05EB8607B86A50F815 -:10081000240000B1FFDFB868FFF704FF05000CD02B -:10082000B86A082E40F8245000D3FFDFB54842468E -:10083000294650F82630204698472846BDE8F081E2 -:100840002DE9F0471E460400074602EB06009146DC -:100850008A46C5B227D000218846FF2800D9FFDF8D -:10086000E01C20F00300A04200D0FFDFB24500D919 -:10087000FFDFA34880F800A080F801908570C57064 -:10088000057145718671DFF87CA280F8079000261B -:100890000AF1400A8146FF1C27F003000746B8F121 -:1008A000000F03D005E04FF00101D5E709EB860109 -:1008B00088603AF8161019F8062001D04FF00000B1 -:1008C000FFF787FE761CF6B20744082EE3D3FF1C21 -:1008D00027F003002A460646B8F1000F0DD000208D -:1008E0000221FFF776FE4346002130440F46C846FA -:1008F000C01C20F003021BB110E0C9F84800EFE76C -:1009000008EB81060020B26206E000BFD6F828C0DE -:100910004CF82070401CC0B2A842F7D3491CC9B2A1 -:1009200002EB85000829E3D3001BBDE8F08710B572 -:10093000044603F0BBFC08B1102010BD2078704ABB -:10094000618802EB800092780EE0836A53F82130D0 -:1009500043B14A1C6280A180806A50F82100A060E7 -:10096000002010BD491C89B28A42EED86180052062 -:1009700010BD70B505460C46084603F097FC08B15B -:10098000102070BD082D01D3072070BD25700020F8 -:10099000608070BD0EB56946FFF7EBFF00B1FFDF69 -:1009A0006846FFF7C4FF08B100200EBD01200EBD50 -:1009B00010B50446082800D3FFDF5148005D10BD84 -:1009C0003EB5054600246946FFF7D3FF18B1FFDFA7 -:1009D00001E0641CE4B26846FFF7A9FF0028F8D0E4 -:1009E0002846FFF7E5FF001BC0B23EBD44498978A9 -:1009F000814201D9C0B27047FF2070472DE9F04114 -:100A000090460C460546062901D0072C10D13C4FD4 -:100A1000B86CFFF707FE02004FF6FF7604D0022104 -:100A2000B86CFFF70CFE00E030462880B04201D1E0 -:100A3000002003E742462146FFF7DCFE040002D116 -:100A4000288800F04FF82046F8E6A0F57F43FF3BEA -:100A500001D0082901D300207047CBE6A0F57F42E2 -:100A6000FF3A0BD0082909D2254A9378834205D949 -:100A700002EB8101896A51F820007047002070471D -:100A80002DE9F04105460C46A5F57F4143F20200F1 -:100A9000FF3902D0082C01D30720CFE618494FF0C8 -:100AA00000088A78AA42F8D901EB8406B26A52F8A3 -:100AB0002570002FF1D013483946203050F82420FB -:100AC00028469047B16A062C41F8258001D0072CB2 -:100AD00002D1284600F006F83946B068FFF7ABFDB2 -:100AE0000020ABE610B5064CC2B20221A06CFFF7A5 -:100AF000B0FD0146A06CBDE81040FFF79CBD0000B2 -:100B0000600700202022020070B50E461D461146E7 -:100B100000F0D4F804462946304600F0D8F82044C6 -:100B2000001D70BD2DE9F04190460D4604004FF0C8 -:100B3000000610D00027E01C20F00300A04200D0E7 -:100B4000FFDFDDB141460020FFF78BFD0C3000EBED -:100B5000850617B112E00127EDE7614F04F10C00A3 -:100B6000A9003C602572606000EB85002060606831 -:100B700011F05BF841463868FFF773FD3046BDE879 -:100B8000F0812DE9FF4F564C804681B020689A468F -:100B9000934600B9FFDF2068027A424503D94168D5 -:100BA00051F8280020B143F2020005B0BDE8F08FF3 -:100BB0005146029800F082F886B258460E9900F02D -:100BC00086F885B27019001D87B22068A1463946A3 -:100BD0000068FFF764FD04001FD067802580294668 -:100BE000201D0E9D07465A4601230095FFF766F823 -:100BF0002088314638440123029ACDF800A0FFF73F -:100C00005DF82088C1193846FFF78FF8D9F8000041 -:100C10004168002041F82840C7E70420C5E770B5C7 -:100C20002F4C0546206800B9FFDF2068017AA942F1 -:100C30000ED9426852F8251051B1002342F82530F0 -:100C40004A880068FFF756FD216800200A7A08E00C -:100C500043F2020070BD4B6853F8203033B9401C9A -:100C6000C0B28242F7D80868FFF70EFD002070BDC1 -:100C700070B51B4E05460024306800B9FFDF3068B0 -:100C8000017AA94204D9406850F8250000B1041D3A -:100C9000204670BD70B5124E05460024306800B97C -:100CA000FFDF3068017AA94206D9406850F8251064 -:100CB00011B131F8040B4418204670BD10B50A4636 -:100CC0000121FEF7F3FFC01C20F0030010BD10B59A -:100CD0000A460121FEF7EAFFC01C20F0030010BD08 -:100CE0006C00002070B5044600780E46012813D031 -:100CF000072802D00B2813D10EE0A068616905789F -:100D0000052003F061FA052D0AD078230022052082 -:100D1000616903F0AFF903E00520616903F054FA5B -:100D200031462046BDE8704001F0A8B910B500F189 -:100D30003902C3799478411D64F003042340C371E0 -:100D4000DB070DD04B79547923404B710B79127925 -:100D500013400B718278C9788A4200D9817010BD26 -:100D600000224A710A71F5E74178012900D00C216F -:100D7000017070472DE9F74F88B000208C698DF81D -:100D800004000878012617460D464FF007094FF07A -:100D9000110A4FF00A0B292876D2DFE810F029005B -:100DA000D20215032D036F037E039903C703DC03EF -:100DB0000604330457047004AE04BF04E204EA04DA -:100DC0000A052C0557057A05A605C605D605F605BC -:100DD000F805050637065906AD06EA06EC061B07B8 -:100DE0003B074407550792071B08410808080D08F0 -:100DF00014B120781E2829D0D5F808805FEA0800B1 -:100E000042D001208DF80400686A02228DF8082083 -:100E100006908DF809B0286A0390A8880028EFD0C2 -:100E200098F8001091B10F2910D27DD2DFE801F0BF -:100E30007C134BDCFEFDFCFBFAF9F8089EF7F6008C -:100E4000022821D124B120780C2801D00026F9E312 -:100E50008DF80420B3E10520696A03F0B5F9A8888C -:100E60000728EED1204601F003F9022809D02046D8 -:100E700001F0FEF8032808D9204601F0F9F8072808 -:100E800003D20120207005E003E2002CB8D02078C6 -:100E90000128D6D198F80400C11F0A2903D300BF46 -:100EA00085F81CB04CE2A070D8F80010A163B8F827 -:100EB0000410A18798F8060084F83E0001202870ED -:100EC0000320207046E00728BBD1002C98D0207862 -:100ED0000D28B6D198F8031094F83B20C1F3C00058 -:100EE000C2F3C002104201D0062000E007208907AB -:100EF00007D198F805100142D2D198F806100142A6 -:100F0000CED194F83D2098F8051020EA0202114253 -:100F1000C6D194F83E2098F8061090430142BFD104 -:100F200098F80400C11F00E008E20A29B8D2617FE6 -:100F3000814201D906209AE3D8F800106160B8F820 -:100F40000410218198F80600A072012028700E205C -:100F5000207003208DF80400686A069004F13900BF -:100F60000290601D039017300490DBE0412890D17F -:100F7000204601F07DF8042802D1E078C00704D1B2 -:100F8000204601F075F80F289ED1A88CD5F80C806A -:100F900080B24FF04009666AFFF76AFE32460826C3 -:100FA00041464B460096FFF702FA0D208DF80400EB -:100FB000686A0690606A0290002101A8FFF792FE1D -:100FC0002078042808D0A07F48B1012807D0032842 -:100FD00008D0102020709CE005202070CEE184F81D -:100FE00000A033E71220F5E71128C0D1204601F018 -:100FF0003FF8042802D1E078C00719D0204601F05C -:1010000037F8062805D1E078C00711D1A07F022863 -:101010000ED0204601F02CF8112808E0B3E083E060 -:1010200072E156E136E109E1EAE0D0E017E09ED155 -:10103000102208F1010104F1480010F05DFD607814 -:10104000012809D012202070E078C00765D0A07F69 -:1010500090B301285DD060E084F8009059E0112839 -:1010600085D1204601F004F8082804D0204600F07D -:10107000FFFF132888D12869D0B16869C0B104F195 -:101080007800102208F10101064610F035FD2078A5 -:10109000082812D014202070E078C0070FD0A07F5D -:1010A000022818D06178022912D0032831D034E008 -:1010B00000208DF80400ECE02BE00920EBE70B208A -:1010C0002870296901204870206CC1E9010662E29C -:1010D00008B101287AD10B202870296981F8019084 -:1010E000606A4860206AC1E9020648E2206CE27842 -:1010F0000068C2F34402521ED04000F0010040F0EC -:10110000800000E000200874E06A48614CE2064676 -:10111000FEE3042028700520BAE185F800B08DF8C0 -:1011200004B08EE33946F4E31128C4D1204600F020 -:101130009FFF0A2802D1E078C00704D1204600F0C2 -:1011400097FF1528B7D1102208F1010104F14800DA -:1011500010F0D2FC20780A2810D01620207012201F -:10116000287029690920487004F15800486020302F -:1011700088601038C860206C086184E30B20207000 -:10118000B9E22870FEE3022895D1204600F070FFF6 -:10119000042804D3204600F06BFF082809D320461A -:1011A00000F066FF0E2886D3204600F061FF12286B -:1011B0006FD2A07F0228B8D110208DF80400686A91 -:1011C000069098F801008DF80800F6E33DE2022849 -:1011D000ABD1204600F04CFF00285AD0204600F04A -:1011E00047FF0128F9D0204600F042FF0C28F4D038 -:1011F00004208DF8080098F801008DF809005AE7DE -:101200001128FCD1002CFAD020781728F7D161786A -:10121000E06A022910D0002101EB4101182606EBFB -:10122000C1011022405808F1010110F065FC0520B1 -:10123000696A00F010FF1DE10121EDE70B28DED106 -:10124000002CDCD020781828D9D16178E06A0229F6 -:101250001BD0002101EB4101102202EBC1014158DA -:10126000B8F8010008806078E16A02280FD00020F9 -:1012700000EB4002142000EBC2000958404650F831 -:10128000032F0A604068486039E00121E2E701204D -:10129000EEE7A1E11128B2D1002CB0D020781928B6 -:1012A000ADD16078E16A022811D0002000EB400245 -:1012B0001C2000EBC2001022085808F1010110F0B8 -:1012C0001BFC0520696A00F0C6FE1A20D4E001204C -:1012D000ECE7082893D1002C91D020781A288ED1E1 -:1012E000E06A98F80120017862F347010170E16A31 -:1012F000D8F8022041F8012FB8F8060088800520B0 -:10130000696A00F0A8FE3CE3112898D1002C98D01F -:1013100020781B2893D16178E06A02290CD0002143 -:1013200001EB4101202202EBC1011022405808F1DB -:10133000010110F0E1FBE2E70121F1E785F81C90E3 -:10134000EFE338780128A6D11C2204F11C0079684B -:1013500010F017FCE079C10894F83B0001EAD001D5 -:10136000E07861F30000E070217F09B1297733E173 -:10137000217803290AD0C0073FF42DAE032028703E -:101380008DF804B0686A06904120B1E3607FA178CF -:1013900088423FF6CFAD02262671E179204621F042 -:1013A000E001E171617A21F0F0016172A17A21F02E -:1013B000F001A172FFF7BAFC2E708DF804B0686AD4 -:1013C00006908DF80890ADE638781128CFD18DF8C9 -:1013D0000490696A0691916800208DF814000391C9 -:1013E000ADF8089008466168016021898180A17A82 -:1013F000817104202070E0E238781128B7D18DF88F -:101400000490686A0690381D02AB07C883E807009D -:101410004120ADF8080000208DF8140008460C218A -:101420000170A88CCA4680B2FE684FF04009D4F81B -:101430002080FFF72FFC3146082642464B46009697 -:10144000FEF7EEFF002101A8FFF74CFCE07820F04A -:101450003E00801CE0702078052801D00F200BE0B2 -:10146000A07F20B1012802D0032803D03DE184F8F9 -:1014700000A04EE62670E9E42070E7E438780328FF -:10148000A4D178680168A1664068E06605202870EC -:101490008DF80400686A069044E63878032895D1F0 -:1014A00078680168216740686067206C68B9A07F30 -:1014B00028B1012803D0062028700420E8E785F829 -:1014C0000090FE4820646064F9E385F80090F6E33C -:1014D0003878022892D1387900287CD1A07F022860 -:1014E0000BD00328F1D1607801280BD0A07994F8B3 -:1014F0003A1001280AD0F1480BE0B86800286BD0F8 -:10150000206411E0A17994F83A00F2E7B868002865 -:10151000F5D02064E078C00701D0012901D0E74868 -:1015200002E0F8680028EAD06064CEE78DF804B0E5 -:10153000696A0691E1785846C90709D0617802299D -:1015400003D1A17F29B1012903D0A17F032900D0B4 -:101550000820287064E33878112891D1B86828628F -:1015600009202870E0782969C0070DD081F8019022 -:10157000206A4860606A886004F16800C860A07FE3 -:1015800002287FF4BFADB1E501204870206C4860AF -:1015900004F16800886004F13800C860201D08610B -:1015A000206B4861606B88612AE2E1783878C9076E -:1015B00001D0062100E00A2188428BD1207807283B -:1015C0001DD084F800A000BF8DF80490686A0690D2 -:1015D000286A039001E0CAE08DE20024ADF808A07B -:1015E0008DF81440032100F8011B5168102210F0FF -:1015F00083FA002101A8FFF775FB2C6226E408207E -:101600002070E1E738781128A7D18DF80490686A36 -:1016100006909068039000208DF814000398ADF8B0 -:1016200008A0042100F8011B102204F1680110F049 -:1016300063FA002101A8FFF755FB2078092802D0A2 -:10164000132019E73CE384F800B016E0E17838781D -:10165000C90701D0062100E00A218842ADD110223D -:1016600004F14800796810F01BFA10B104202877C3 -:10167000EAE3207809283FF4EEAC0C2081E5E0781D -:10168000C10738D0A17F012902D002291BD02EE04A -:101690000D202870296981F801B06078012809D0EF -:1016A000206A4860606A886004F16800C860103091 -:1016B000086129E5606A4860206A886004F1780062 -:1016C000C8601038F4E7C0F3440114290FD24FF07A -:1016D000006101EBB0104FEAB060E0706078012863 -:1016E00003D010202070042057E10620C4E6607863 -:1016F00001283FF476AC0E2043E538780928ADD1B7 -:1017000085F800B00F208DF80400686A06905068D4 -:101710000290002101A8FFF7E5FAE8E7E078C007AA -:101720000AD0A07F012803D10F202870042036E1C1 -:10173000102028700E2032E115202870296902201F -:101740004870206C48606078012805D004F178006A -:1017500088601038C86053E104F168008860103078 -:10176000F8E738780228CAD138790028E0D02877FD -:1017700068E338781328FBD185F800A02969082090 -:10178000487078684860607801280DD004F16800DE -:1017900088601030C860206B0861606B486104F19C -:1017A00058008861A06A22E004F17800886010384F -:1017B000F0E738780728DBD16078012801D01320C2 -:1017C00029E2A178A06A0844C1F1100110F00BFAD7 -:1017D0001220287029690920487004F158004860D7 -:1017E000203088601038C860206C086144E0C8610F -:1017F000E06A086204E138780828B9D1102204F1BF -:101800004800796810F04CF908B10B202FE72078D8 -:101810000B2812D02046FFF789FAA178A06A084465 -:10182000C1F1100110F0DFF91620287008208DF8A2 -:101830000400686A0690002072E0132028708DF87A -:1018400004B0686A06908DF808A06BE43878112817 -:101850008ED1B86828621420287029690920487040 -:1018600004F158004860103088601030C860606C27 -:1018700008616078012806D004F139004861206BC6 -:101880008861606BB3E7601D4861606B8861206BA5 -:10189000ADE7387808288ED18DF80490686A0690F4 -:1018A000286A00260D210390ADF808A08DF8146079 -:1018B00000F8011B1022796802E000007423020086 -:1018C00010F01AF9002101A8FFF70CFA2E626078D7 -:1018D000012801D01520CFE51620287008208DF8AA -:1018E0000400686A029606901BE038780B2884D1C1 -:1018F000162028706078022802D12046FFF716FAD9 -:10190000A17878680844C1F1100110F06CF901E089 -:1019100083E215E008208DF80400686A0690786874 -:101920000290A0788DF80C004DE538780F288FD103 -:10193000E079C00773D01720287009202FE01146E6 -:1019400001A8FFF7CFF9FFF7E2BB38781028A2D142 -:101950001422391D04F11C0010F013F9E16A208DE6 -:10196000A1F80900E16AA078C871E179E26A01F0A2 -:1019700003011172E16A627A0A73E16AA07A81F85E -:10198000240000E09BE1242078E6192043E1387828 -:101990001128ACD1B86828621A20287005208DF86B -:1019A0000400686A0690CAE7387803289FD16078F7 -:1019B000E16A022802D0012001E05CE2002000EB95 -:1019C0004002142000EBC2027B688A58196811603B -:1019D000596851601B212970D5E9041205234B7009 -:1019E000636A4B606678E36A022E01D0012600E04C -:1019F000002606EB460600EBC6001858C1E90202B5 -:101A0000686A4862089800F050FB9CE738780E2816 -:101A100071D16078E26A022802D0012001E0ADE1D4 -:101A2000002000EB4001102000EBC1000223105801 -:101A3000093279680EF01EFB1C20287029690420E9 -:101A40004870206A4860E06A09308860FB4881E697 -:101A500038780D284FD16178E06A022901D0012140 -:101A600000E0002101EB4101182606EBC101A2783C -:101A70004058796810F040F86078E16A022801D097 -:101A8000012000E0002000EB400206EBC200B0465F -:101A90000858A1780844C1F1100110F0A4F88DF89D -:101AA0000490686A0690286A00260390ADF808A0A2 -:101AB0008DF81460062101706178E26A022901D074 -:101AC000012100E0002101EB410308EBC301401CB0 -:101AD0005158102210F010F8002101A8FFF702F968 -:101AE0001D202E6228708DF804B0686A06900B20C5 -:101AF0008DF8080067E481E0387811287ED18DF8F0 -:101B00000490686A0690B86803900B20ADF808004E -:101B1000039880F800906278E16A022A02D00122DC -:101B200001E091E1002202EB4202102303EBC2022A -:101B300089580988A0F801106178E26A022901D069 -:101B4000012100E0002101EB4103142101EBC3015D -:101B500051580A6840F8032F4968416056E0272031 -:101B6000287001208DF814002DE424202870002016 -:101B70009FE01F204FE0387811283FD18DF8049066 -:101B8000686A0690B868039000208DF814000398E6 -:101B9000ADF808A0082606706178E26A022901D033 -:101BA000012100E0002101EB41031C2101EBC301F5 -:101BB000401C515810220FF09FFF002101A8FFF791 -:101BC00091F8202028708DF804B0686A06908DF88E -:101BD000086061E43878112810D18DF80490686AA3 -:101BE0000690B86803900820ADF808000398092112 -:101BF0000170E16909784908417000E094E0E16909 -:101C000051F8012FC0F802208988C18020781D2852 -:101C1000ABD1A4E7222028708DF804B0686A069042 -:101C20008DF808A08BE6387811287DD1B868286235 -:101C300023202870296904204870206A4860E06ADF -:101C4000093088607E4885E538780D286CD1617848 -:101C5000E06A022901D0012100E0002101EB4101ED -:101C6000202606EBC1011022405879680FF044FF8E -:101C70008DF80490686A0690286A0390ADF808A071 -:101C800080F800B06278E16A022A01D0012200E007 -:101C9000002202EB420206EBC202401C89581022CD -:101CA0000FF02AFF0020286221781D29B1D02421BD -:101CB00029708DF81400002101A8FFF713F80326FE -:101CC000DFE0E078C00702D04FF0060C01E04FF0F3 -:101CD000070C6078022809D04FF0000000EB0401E7 -:101CE00001F1090105D04FF0010004E04FF00100BF -:101CF000F4E74FF000000B78204413EA0C030B705C -:101D000010F8092F02EA0C02027004D14FF01C0CEB -:101D100084F800C092B394F801C0BCF1010F00D068 -:101D2000E3B990F800C000E053E05FEACC7804D05B -:101D30002CF00106067018260EE05FEA8C7804D5B8 -:101D40002CF0020606701E2606E05FEA4C7805D5E8 -:101D50002CF00406067021262E70032694F801C08C -:101D6000BCF1020F00D0DAB991F800C05FEACC787C -:101D700005D02CF001060E7017210FE01AE05FEA83 -:101D80008C7804D52CF002060E70192106E05FEA6B -:101D90004C7805D52CF004060E701B21217000260E -:101DA0000078D0BBCAB3C3BB1D20207035E03878A3 -:101DB000122847D1282061E42078012842D00C283D -:101DC00040D02046FEF7D0FF0B208DF80400686A53 -:101DD000069037E038784FF02608112805D01220F9 -:101DE0001070032685F800804BE08DF80490686A37 -:101DF0000690B86803900220ADF8080001208DF825 -:101E00001400039805210170297F4170114601A833 -:101E1000FEF768FF064685F80080012E12D030E0FC -:101E200001208DF80400686A069003208DF80800F0 -:101E3000287F8DF809000020287716E06C23020027 -:101E400070220200287F80B11E202070252028707B -:101E50008DF804B0686A069002208DF808003946B3 -:101E600001A8FEF73FFF06460BE00CB1FE202070F4 -:101E70009DF8040028B1002101A8FEF733FFFEF70A -:101E8000E5BF0BB03046BDE8F08FF0B587B00C462B -:101E90004E6900218DF804100120257803460227A1 -:101EA0004FF0070C85B1012D50D0022D36D1FE2008 -:101EB00030708DF80030606A059003208DF80400C2 -:101EC000207E8DF8050060E02179012922D00229C9 -:101ED00029D0032924D0042920D1B17F02291DD182 -:101EE00031780D1F042D04D30A3D032D01D31E2983 -:101EF00014D12189022911D38DF80470237020890F -:101F00009DF80410884217D20A208DF80000606AFC -:101F1000059057E070780128EED0052007B0F0BD9D -:101F20001E203070E8E771780229F6D131780C294B -:101F3000F4D18DF804C0E1E71120083402F8040B55 -:101F400094E80B0082E80B000320E7E71578112DD9 -:101F5000E4D18DF800C0656A0595956802958DF805 -:101F6000101094F804E0BEF1010F13D0BEF1020F7F -:101F70002DD0BEF1030F1CD0BEF1040FCED1ADF8B1 -:101F800004700E202870207E687000216846FEF7DD -:101F9000A9FE0CE0ADF804700B202870207E002113 -:101FA00000F01F0068706846FEF79CFE3770002046 -:101FB000B4E7ADF804708DF8103005202870207E4D -:101FC0006870277011466846FEF78CFEA6E7ADF8EC -:101FD00004C02B70207F6870607F00F00100A87043 -:101FE000A07F00F01F00E870E27F2A71C0071CD0BC -:101FF00094F8200000F00700687194F8210000F0C8 -:102000000700A87100216846FEF76CFE2868B063DF -:10201000A888B087A87986F83E00A06940787077D4 -:102020002879B0700D203070C1E7A9716971E9E7B6 -:1020300000B587B005280CD101208DF800008DF87F -:102040000400002005918DF8050001466846FEF762 -:1020500049FE07B000BD70B50C46054602F0B4F865 -:1020600021462846BDE870407823002202F002B8DD -:1020700008B1007870470C207047000070B50C0064 -:1020800005784FF000010CD021702146F3F79DF840 -:1020900072482178405D884201D1032070BD022042 -:1020A00070BDF3F792F8002070BD027B032A05D0C3 -:1020B00000220A704B780B2B02D003E004207047FB -:1020C0000A770A62027B9300521C0273C1500320FC -:1020D0007047F0B587B00F4605460124287B05EB15 -:1020E000800050F8046C7078411E0C290AD25B49BC -:1020F0003A46123101EB8000314650F8043C284644 -:10210000984704460CB1012C11D1287B401E10F0D9 -:10211000FF00287301D00324E0E70C208DF80000B5 -:10212000706A0590002101966846FFF7A7FF032C0F -:10213000D4D007B02046F0BD70B515460A46044617 -:1021400029461046FFF7C5FF064674B12078FE28E1 -:102150000BD1207E30B100202870294604F10C00FC -:10216000FFF7B7FF2046FEF7FFFD304670BD704712 -:1021700070B50E46044688210FF057FD0225012E4A -:1021800003D0022E04D0052070BD0120607000E055 -:1021900065702046FEF7E8FDA577002070BD28B1E8 -:1021A000027E1AB10A4600F10C01C5E70120704712 -:1021B00010B5044686B0052002F006F82078FE2807 -:1021C00006D000208DF8000069462046FFF7E7FFA3 -:1021D00006B010BD7FB50E4600218DF80C10417879 -:1021E0000B2903D00C2903D0002405E0846900E00A -:1021F00044690CB1217E91B16D4601462846FFF736 -:1022000054FF032809D1324629462046FFF794FFA0 -:102210009DF80C10002900D0042004B070BD04F11A -:102220000C05EAE710B590B00C4607900B48042166 -:10223000801E08900A488DF8191009900F9269467F -:1022400006A8FFF7C7FF002805D1102220460199F4 -:102250000FF052FC002010B010BD000076220200EA -:102260006C23020070B50D46040011D085B1210128 -:1022700028460FF0B8FC10224E4928460FF03CFCCF -:102280004C4801210838018044804560002070BD21 -:10229000012070BD70B5474E00240546083E10E091 -:1022A0007068AA7B00EB0410817B914208D1C17B4E -:1022B000EA7B914204D10C2229460FF0F1FB30B1A8 -:1022C000641C30888442EBDB4FF0FF3070BD204649 -:1022D00070BD70B50D46060006D02DB1FFF7DAFFD0 -:1022E000002803DB401C14E0102070BD314C083C7A -:1022F00020886288411C914201D9042070BD616828 -:10230000102201EB001031460FF0F6FB2088401C34 -:1023100020802870002070BD70B514460D0018D0C4 -:10232000BCB10021A170022802D0102811D105E013 -:10233000288870B10121A170108008E02846FFF7BD -:10234000A9FF002805DB401CA070A8892080002080 -:1023500070BD012070BD70B5054614460E000BD04F -:1023600000203070A878012808D005D91149A1F1C2 -:1023700008010A8890420AD9012070BD24B128784A -:1023800020702888000A5070022008700FE064B1A5 -:102390004968102201EB0011204610390FF0ACFB08 -:1023A000287820732888000A60731020307000207D -:1023B00070BD0000780000202DE9F04190460C46E9 -:1023C00007460025FE48072F00EB881607D2DFE8F6 -:1023D00007F00707070704040400012500E0FFDFFA -:1023E00006F81470002D13D0F548803000EB8801FA -:1023F00091F82700202803D006EB4000447001E04C -:1024000081F8264006EB44022020507081F82740D6 -:10241000BDE8F081F0B51F4614460E460546202A59 -:1024200000D1FFDFE649E648803100EB871C0CEB6A -:10243000440001EB8702202E07D00CEB46014078C8 -:102440004B784870184620210AE092F825304078F1 -:1024500082F82500F6E701460CEB41000570407854 -:10246000A142F8D192F82740202C03D00CEB440471 -:10247000637001E082F826300CEB41042023637086 -:1024800082F82710F0BD30B50D46CE4B441900221E -:10249000181A72EB020100D2FFDFCB48854200DD43 -:1024A000FFDFC9484042854200DAFFDFC548401CD3 -:1024B000844207DA002C01DB204630BDC148401CB5 -:1024C000201830BDBF48C043FAE710B50446016884 -:1024D000407ABE4A52F82020114450B102200844EC -:1024E00020F07F40F0F751FB94F90810BDE8104050 -:1024F000C9E70420F3E72DE9F047B14E803696F89E -:102500002D50DFF8BC9206EB850090F8264034E0B1 -:1025100009EB85174FF0070817F81400012806D0BB -:1025200004282ED005282ED0062800D0FFDF01F089 -:10253000E5F8014607EB4400427806EB850080F899 -:10254000262090F82720A24202D1202280F82720BE -:10255000084601F0DEF82A4621460120FFF72CFF4D -:102560009B48414600EB041002682046904796F8CD -:102570002D5006EB850090F82640202CC8D1BDE8F0 -:10258000F087022000E003208046D0E710B58C4C95 -:102590002021803484F8251084F8261084F8271030 -:1025A000002084F8280084F82D0084F82E10411EA5 -:1025B000A16044F8100B2074607420736073A073E2 -:1025C0008449E07720750870487000217C4A103CEF -:1025D00002F81100491CC9B22029F9D30120F0F7F3 -:1025E000C2F90020F0F7BFF9012084F82200F9F7C2 -:1025F00053FB7948F9F75FFB764CA41E20707748AF -:10260000F9F759FB6070BDE81040F0F739B910B523 -:10261000F0F75BF96F4CA41E2078F9F765FB607842 -:10262000F9F762FBBDE8104001F0A0B82020704728 -:102630002DE9F34F624E0025803606EB810A89B002 -:102640009AF82500202822D0691E02916049009541 -:1026500001EB00108146D0E90112C0680391CDE979 -:102660000420B08BADF81C00B07F8DF81E009DF8E3 -:102670001500C8B10227554951F820400399E219C5 -:10268000114421F07F41019184B102210FE001202A -:10269000F0F769F90020F0F766F9F0F734F901F086 -:1026A00065F886F82F508AE00427E4E700218DF8CA -:1026B0001810022801D001281BD1039839190144B0 -:1026C0000998081A20F07F4033280BD903208DF891 -:1026D00015000398C4F13201401A20F07F403224E3 -:1026E00003900CE096F8240018B9F0F753FC00288A -:1026F0004DD0322C03D214B101F02CF801E001F0DE -:1027000035F8344A107820B393465278039B121B55 -:1027100000219DF81840984601281BD0032819D0A5 -:102720005FF000008DF81E00002A04DD981A039067 -:1027300001208DF818009DF81C0000B102210398BB -:10274000274A20F07F40039003AB099801F01AF864 -:1027500010B110E00120E5E79DF81D0018B99BF8C5 -:102760000000032812D08DF81C50CDF80C808DF895 -:1027700018408DF81E509DF8180058B10398012399 -:10278000C11900221846F0F741F906E000200BB00D -:10279000BDE8F08F0120F0F7E6F899F90C2001234D -:1027A00000200199F0F732F9012086F82F008AF80D -:1027B000285003482022694680300FF0E2F911E0EA -:1027C000AC090020FF7F841E0020A107B822020070 -:1027D000AC0700208A000020233F0100F7240100FD -:1027E000FFFF3F000120D2E72DE9F05FDFF84084D2 -:1027F000064608EB860090F82550202D1FD0A8F142 -:1028000080002C4600EB8617A0F50079DFF824B491 -:1028100005E0A24607EB4A004478202C0AD0F0F7E6 -:1028200041F909EB04135A4601211B1D00F0AAFFD0 -:102830000028EED0AC4202D0334652461EE0FE489D -:1028400008B1AFF30080F0F72DF998F82F206AB1A6 -:10285000D8F80C20411C891A0902CA1701EB126131 -:102860000912002902DD0020BDE8F09F3146FFF784 -:10287000DFFE08B10120F7E733462A462021042075 -:10288000FFF7C8FDEFE72DE9F041E94C2569F0F7C6 -:1028900009F9401B0002C11700EB1160001200D4BF -:1028A000FFDF94F8220000B1FFDF012784F82270D7 -:1028B00094F82E00202800D1FFDF94F82E6020200D -:1028C00084F82E00002584F82F5084F8205084F8D6 -:1028D0002150DA4825600078022833D0032831D00F -:1028E00000202077A068401C05D04FF0FF30A0608A -:1028F0000120F0F738F80020F0F735F8F0F733F959 -:10290000F0F72BF9EFF7FFFF0EF094FBCC480560D2 -:1029100005604FF0E0214FF40040B846C1F8800256 -:10292000F0F7BBF994F82D703846FFF75DFF0028EB -:10293000FAD0BF48803800EB871010F81600022844 -:1029400002D006E00120CCE73A4631460620FFF7E8 -:1029500033FD84F8238004EB870090F826002028BC -:1029600004D0B648801E4078F9F7C4F9207F0028CB -:1029700003D0F0F7E8F82577657749E50146AC48DC -:1029800010B590F82D200024803800EB821000BF95 -:1029900010F814302BB1641CE4B2202CF8D32020A2 -:1029A00010BDA84800EB0410016021460120FFF78C -:1029B00003FD204610BD10B5012801D0032800D129 -:1029C00071B39B4A92F82D30994C0022803C04EB65 -:1029D000831300BF13F812400CB1082010BD521C25 -:1029E000D2B2202AF6D3954A48B1022807D0072947 -:1029F00016D2DFE801F01506080A0C0E10000021BF -:102A00000AE01B2108E03A2106E0582104E0772182 -:102A100002E0962100E0B52151701070002010BD39 -:102A2000072010BD854810B54078F0F7AEF880B2A9 -:102A300010BD10B5202811D27D4991F82D30A1F19B -:102A4000800202EB831414F810303BB191F82D3062 -:102A500002EB831212F81020012A01D0002010BDD1 -:102A600091F82D2001460020FFF7A6FC012010BDA3 -:102A700010B5F0F717F8BDE81040F0F786B82DE96B -:102A8000F0410E466A4F01782025803F0C4607EB47 -:102A9000831303E0254603EB45046478944202D097 -:102AA000202CF7D108E0202C06D0A14206D103EB60 -:102AB00041014978017007E00020A9E403EB4400DC -:102AC00003EB4501407848705F4F7EB127B100218C -:102AD00040F2DA30AFF300803078A04206D127B15F -:102AE000002140F2DD30AFF30080357027B10021C6 -:102AF00040F2E230AFF30080012089E410B5426873 -:102B00000B689A1A1202D41702EB1462121216D42E -:102B1000497A91B1427A82B94C4A006852F8211040 -:102B2000126819441044001D891C081A0002C117BC -:102B300000EB11600012322801DB012010BD0020E3 -:102B400010BD2DE9F047814639483E4E00EB81002B -:102B5000984690F825402020107006F50070154624 -:102B600000EB81170BE000BF06EB04104946001D87 -:102B7000FFF7C4FF28B107EB44002C704478202CE9 -:102B8000F2D1297888F8001013E000BF06EB041595 -:102B9000291D4846FFF7B2FF68B988F80040A97BB5 -:102BA00099F80A00814201D80020E8E407EB4400CC -:102BB0004478202CEAD10120E1E42DE9FC410E46C5 -:102BC000074600241F4D08E09DF8000005EB0010AB -:102BD0008168384600F0EAFD01246B4601AA3146BF -:102BE0003846FFF7AEFF0028EED02046BDE8FC8156 -:102BF00070B504460E4801258038A54300EB8411CA -:102C000000EB851040220EF077FF0F4E26B1002119 -:102C100040F25C40AFF30080054800EB850100EB1B -:102C20008400D0F82500C1F82500AEB100210FE0E6 -:102C30002C0A0020FFFF3F00000000008A00002057 -:102C400000F50040AC07002000000000B8220200A0 -:102C50004FF48C60AFF30080284670BD2DE9FC4135 -:102C60008446FF481546089C00EB85170E4617F86A -:102C70001400012803D0022801D00020B6E70B463B -:102C8000F84A0121604600F07DFDA8B101AB6A461B -:102C900029463046FFF755FF70B1F1489DF80420F2 -:102CA0009DF80010803000EB85068A4208D02B4644 -:102CB0000520FFF7AFFB0BE02A462146042014E075 -:102CC000202903D007EB4100407801E096F8250069 -:102CD00007EB440148709DF80000202809D007EB5D -:102CE000400044702A4621460320FFF765FB01207F -:102CF0007CE706F8254F0120F070F3E7DA4901EB95 -:102D00000010001DFFF7E1BB7CB51D4613460446CD -:102D10000E4600F1080221461846EFF743FF94F9EA -:102D200008000F2804DD1F3820722068401C206036 -:102D300096B10220CD4951F8261046182068694600 -:102D4000801B20F07F40206094F908002844C01CBC -:102D50001F2803DA012009E00420EBE701AAEFF7BE -:102D600021FF9DF8040010B10098401C00900099CC -:102D7000206831440844C01C20F07F4060607CBD66 -:102D80002DE9FE430C460646097860799072207959 -:102D900098461546507241B1B148803090F82E10D7 -:102DA00020290AD00069401D0BE0D4E902232179D3 -:102DB00003B02846BDE8F043A6E7AD484178701D52 -:102DC000084420F07F47217900222846A368FFF7B6 -:102DD0009BFF3946284600F0E9FCD4E9023221790C -:102DE0006846FFF791FF41462846019CFFF7E5FE44 -:102DF0002B4622460021304600F0C4FC002803D1B7 -:102E00003146284600F0D2FCBDE8FE832DE9FE4F96 -:102E1000814600F087FC38B15FF0000799F80000A8 -:102E200020B10020BDE8FE8F0127F7E78C4D914CC3 -:102E30004FF0000A803524B1002140F2D340AFF3B7 -:102E4000008095F82D8085F823A0002624B100216C -:102E50004FF49B60AFF300801FB94046FFF7C8FEF8 -:102E6000804624B100214FF49C60AFF30080EFF75F -:102E700019FE43466A464946FFF782FF24B1002106 -:102E800040F2E640AFF3008095F82E0020280CD0E9 -:102E900029690098401A0002C21700EB1260001264 -:102EA00003D5684600F082FC012624B100214FF4CE -:102EB0009E60AFF3008095F823000028BBD124B1B9 -:102EC000002140F2F640AFF30080EFF7EBFD6B46D8 -:102ED000644A002100F056FC0028A3D027B94146DF -:102EE0006846FFF76AFE064326B16846FFF7EDFA2B -:102EF000C9F8080024B1002140F20950AFF3008066 -:102F000001208FE72DE9FF5F8A46814600F00AFC29 -:102F1000534C803410B39AF80000002710B10128F8 -:102F200000D0FFDF534D25B1002140F27F50AFF3B9 -:102F300000800120A84600905FEA080604D0002126 -:102F400040F28750AFF30080009800F0E2FB94F865 -:102F50002D50002084F8230067B119E094F82E006A -:102F60000127202800D1FFDF9AF800000028D9D0DF -:102F7000FFDFD7E72846FFF73BFE054626B10021D5 -:102F800040F29150AFF3008094F823000028D3D191 -:102F900026B1002140F29B50AFF30080EFF782FD95 -:102FA00083462B4601AA5146FFF7EAFE5FEA060870 -:102FB00004D0002140F2A250AFF300803B462A46E5 -:102FC00001A95846CDF80090FFF748FE064604EBED -:102FD000850090F828B0B8F1000F04D0002140F22D -:102FE000A950AFF3008000F089FB0090B8F1000F0A -:102FF00004D0002140F2AF50AFF3008094F82300DA -:10300000002899D1B8F1000F04D0002140F2B75048 -:10301000AFF3008014490DF1040C01EB09109CE89A -:103020000E0000F1040080E80E002EB35FEA0806EF -:1030300004D0002140F2C450AFF300803BEA070007 -:1030400020D094F82E0020281CD126B1002140F277 -:10305000C950AFF300802846FFF7C6FB90B90CE0DB -:10306000AC090020FFFF3F00AC070020B82202009F -:103070008A0000200000000010E09AF80000D8B399 -:10308000012849D0B8F1000F04D0002140F2E650E9 -:10309000AFF30080284600F02AFB01265FEA08050E -:1030A00004D0002140F2EF50AFF30080009800F010 -:1030B00030FB25B1002140F2F350AFF300808EB118 -:1030C00094F82D0004EB800090F82600202809D009 -:1030D00025B1002140F2FA50AFF30080F948407862 -:1030E000F8F708FE25B1002140F2FF50AFF3008051 -:1030F00004B03046BDE8F09FFFE7B8F1000F04D000 -:10310000002140F2D150AFF3008094F82D204946C1 -:103110000420FFF751F9C0E7002E3FF40DAF002166 -:1031200040F2DC50AFF3008006E72DE9F84FE64DA2 -:10313000814695F82D004FF00008E44C4FF0010B4C -:10314000474624B1002140F20D60AFF3008058469D -:1031500000F0DFFA85F8237024B1002140F21260FC -:10316000AFF3008095F82D00FFF742FD064695F875 -:10317000230028B1002CE4D000214FF4C3604BE0C1 -:1031800024B1002140F21C60AFF30080CE488038AB -:1031900000EB861111F81900032856D1334605EBD0 -:1031A000830A4A469AF82500904201D1012000E0A6 -:1031B000002000900AF125000021FFF760FC014685 -:1031C0000098014203D001228AF82820AF77E1B3AA -:1031D00024B1002140F22160AFF30080324649461D -:1031E0000120FFF7E9F89AF828A024B1002140F265 -:1031F0002C60AFF3008000F081FA834624B10021F7 -:1032000040F23160AFF3008095F8230038B1002C14 -:1032100097D0002140F23560AFF3008091E7BAF11A -:10322000000F07D095F82E00202803D13046FFF775 -:10323000DBFAE0B124B1002140F24960AFF3008035 -:10324000304600F054FA4FF0010824B1002140F25A -:103250005260AFF30080584600F05BFA24B10021C1 -:1032600040F25660AFF300804046BDE8F88F002C76 -:10327000F1D0002140F24460AFF30080E6E7002087 -:10328000EFF74ABB0120EFF747BB8E480078704745 -:103290002DE9F0418C4C94F82E0020281FD194F891 -:1032A0002D6004EB860797F82550202D00D1FFDF15 -:1032B0008549803901EB861000EB4500407807F81E -:1032C000250F0120F87084F82300294684F82E5039 -:1032D000324602202234FFF76FF8002020700CE401 -:1032E0002DE9F0417A4E784C012538B1012821D0E2 -:1032F000022879D003287DD0FFDFF0E700F02AFA1A -:10330000FFF7C6FF207E00B1FFDF84F821500020C8 -:10331000EFF729FBA168481C04D0012300221846BE -:10332000EFF774FB14F82E0F217806EB01110A68F1 -:10333000012154E0FFF7ACFF0120EFF714FB94F8F4 -:10334000210050B1A068401C07D014F82E0F21783E -:1033500006EB01110A68062141E0207EDFF8648156 -:10336000002708F10208012803D002281ED0FFDF41 -:10337000B5E7A777EFF7E7FB98F80000032801D13E -:1033800065772577607D534951F8200094F8201027 -:1033900051B948B161680123091A00221846EFF7B4 -:1033A00035FB022020769AE7277698E784F82050AC -:1033B00000F0D0F9A07F50B198F8010061680123B6 -:1033C000091A00221846EFF721FB257600E0277640 -:1033D00014F82E0F217806EB01110A680021BDE8D0 -:1033E000F041104700E005E036480078BDE8F041C4 -:1033F000F8F780BCFFF74CFF14F82E0F217806EB8E -:1034000001110A680521EAE710B52F4C94F82E0047 -:10341000202800D1FFDF14F82E0F21782C4A02EB70 -:1034200001110A68BDE81040042110477CB5264C04 -:10343000054694F82E00202800D1FFDFA068401C2C -:1034400000D0FFDF94F82E00214901AA01EB001003 -:10345000694690F90C002844EFF7A4FB9DF904009D -:103460000F2801DD012000E0002000990844616878 -:10347000084420F07F41A16094F82100002807D083 -:1034800002B00123BDE8704000221846EFF7BEBA33 -:103490007CBD30B5104A0B1A541CB3EB940F1FD3EC -:1034A000451AB5EB940F1BD3934203D9101A431856 -:1034B0005B1C15E0954211D9511A0844401C434247 -:1034C0000EE00000880000202C0A00200000000010 -:1034D000AC070020B8220200FF7F841EFFDF00231C -:1034E000184630BD0123002201460220EFF78EBAB4 -:1034F0000220EFF738BAEFF7D5BA2DE9FC47B14C07 -:10350000054694F82E00202800D1FFDF642D58D303 -:10351000AD4A0021521B71EB010052D394F82E20CA -:10352000A0462046DFF8A49290F82D7009EB021413 -:10353000D8F8000001AA28446946EFF733FB9DF94B -:103540000400002802DD0098401C0090A06800994B -:1035500062684618B21A22F07F42B2F5800F30D26C -:1035600008EB8702444692F82520202A0AD009EB6E -:1035700002125268101A0002C21700EB1260001209 -:1035800088421EDBA068401C10D0EFF78BFAA168C0 -:10359000081A0002C11700EB11600012022810DDAA -:1035A0000120EFF7E0F94FF0FF30A06020682844D9 -:1035B000206026F07F402061012084F82300BDE8D0 -:1035C000FC870020FBE72DE9F0477E4C074694F886 -:1035D0002D00A4F1800606EB801010F8170000B94A -:1035E000FFDF94F82D50A046794C24B1002140F61D -:1035F0006500AFF3008040F6710940F67A0A06EBE9 -:10360000851600BF16F81700012818D0042810D01E -:1036100005280ED006280CD01CB100214846AFF377 -:10362000008020BF002CEDD000215046AFF3008079 -:10363000E8E72A4639460120FEF7BEFEF2E74FF0E2 -:10364000010A4FF00009454624B1002140F68100EF -:10365000AFF30080504600F05CF885F8239024B169 -:10366000002140F68600AFF3008095F82D00FFF7AB -:10367000BFFA064695F8230028B1002CE4D00021BB -:1036800040F68C001FE024B100214FF40960AFF335 -:10369000008005EB860000F1270133463A462630CC -:1036A000FFF7EDF924B1002140F69400AFF300805C -:1036B00000F024F8824695F8230038B1002CC3D0DE -:1036C000002140F69A00AFF30080BDE785F82D6039 -:1036D000012085F82300504600F01BF8002C04D090 -:1036E000002140F6A700AFF30080BDE8F087354920 -:1036F00081F82D00012081F82300704710B535486E -:1037000008B1AFF30080EFF3108000F0010072B653 -:1037100010BD10B5002804D12F4808B1AFF30080C8 -:1037200062B610BD2D480068C005C00D10D010381D -:1037300040B2002806DA00F00F0000F1E02090F817 -:10374000140D03E000F1E02090F8000440097047F8 -:103750000820704710B51B4C94F82400002804D1B1 -:10376000F8F7B6F8012084F8240010BD10B5154C08 -:1037700094F82400002804D0F8F7D3F8002084F847 -:10378000240010BD10B51C685B68241A181A24F0B8 -:103790007F4420F07F40A14206D8B4F5800F03D2C9 -:1037A000904201D8012010BD002010BDD0E90032A8 -:1037B000D21A21F07F43114421F07F41C0E900314A -:1037C000704700002C0A0020FF1FA107AC07002053 -:1037D00000000000000000000000000004ED00E018 -:1037E000F0B5734AD2F80032724D002401212E78D0 -:1037F00056B9714E3460704F03263F1D3E606E4FC8 -:1038000004260C373E602970C2F80042D160116076 -:10381000694C4834D16425688542FBD35160D1603E -:10382000C2F80032F0BD2DE9F041044680074FF0A8 -:1038300000054FF0010604D560480560066024F0DD -:103840000204E0044FF0FF3705D55D484660C0F83C -:10385000087324F48054600003D55A48056024F0AE -:103860008044E0050FD55248C0F80052C0F80873F4 -:1038700051490D60091D0D604F4A04210C32116041 -:10388000066124F48074A00409D54F484660C0F84E -:103890000052C0F808734D48056024F40054C4F386 -:1038A0008030C4F3C031884200D0FFDF14F4404FB1 -:1038B00014D047484660C0F8087346488660C0F890 -:1038C0000052C0F8087344490D600A1D16608660F6 -:1038D000C0F808730D60166024F4404420050AD532 -:1038E0003E4846608660C0F80873C0F848733C489C -:1038F000056024F400640DF077FB3A48044200D0E0 -:10390000FFDFBDE8F08170B5202500224FEA0203F9 -:1039100020FA02F1C90719D051B201F01F060124A3 -:10392000B4404E09B60006F1E026C6F88041C6F85C -:103930008042002906DA01F00F0101F1E02181F84F -:10394000143D03E001F1E02181F80034521CAA4249 -:10395000DED370BD70B5174C0D466060FFF763FF96 -:103960006068FFF7D0FF2846F8F7A7F80CF05EFF75 -:1039700000F0ABF80DF038FB0DF083FAF8F78CF996 -:10398000BDE870400DF000B810B50A4C6068FFF754 -:103990004AFF6068FFF7B7FF0DF026FBF8F721F943 -:1039A0000020606010BD0348406870470A207047DF -:1039B000008000408C00002004850040FC1F004077 -:1039C00000C0004004E5014000D0004004D50040A4 -:1039D00000E0004000F0004000F5004000B0004072 -:1039E00008B50040FEFF0FFD70B522490A680AB312 -:1039F0000022154601244B685B1C4B60092B00D349 -:103A00004D600E7904FA06F30E681E420FD0EFF3F4 -:103A1000108212F0010272B600D001220C689C43A1 -:103A20000C6002B962B649680160002070BD521C8A -:103A3000092AE0D3052070BD4FF0E0214FF480004B -:103A4000C1F800027047EFF3108111F0010F72B658 -:103A50004FF0010202FA00F20648036842EA03024C -:103A6000026000D162B6E7E70248002101604160D0 -:103A70007047000094000020AD4911F8410F4978CB -:103A8000884201D3401A02E0C1F141010844C0B2AA -:103A90007047A749433111F8410F4978884201D353 -:103AA000401A02E0C1F141010844C0B27047A04988 -:103AB000863111F8410F4978884201D3401A02E05B -:103AC000C1F141010844C0B270479A4910B5802045 -:103AD00081F8000496490020433101F8410F4870F5 -:103AE000934901F8410F48709149863101F8410F1F -:103AF000487091480DF00EF98F48401C0DF00AF9FE -:103B0000EFF7DAF8BDE8104000F006B94020704742 -:103B1000B2E770B50C4605460026FFF7ADFF844AB4 -:103B2000A04214D30021641EE4B20FD392F84200E5 -:103B3000105C05F8010B92F84200401CC0B282F8FC -:103B400042004128EFD182F84210ECE7012600F054 -:103B5000E3F8304670BD402070479AE770B50C46D8 -:103B600005460026FFF795FF714A4332A04214D361 -:103B70000021641EE4B20FD392F84200105C05F8F5 -:103B8000010B92F84200401CC0B282F8420041286A -:103B9000EFD182F84210ECE7012600F0BDF8304684 -:103BA00070BD402101700020704710B50446FFF73A -:103BB0007EFF2070002010BD70B50C460546FFF753 -:103BC00076FF5B4A8632A04215D30021641EE4B220 -:103BD0000FD392F84200105C05F8010B92F84200F6 -:103BE000401CC0B282F842004128EFD182F8421056 -:103BF000ECE7002401E042F2070400F08DF82046D3 -:103C000070BD70B50C460546412900D9FFDF4B4811 -:103C10000068103840B200F066F8C6B20D2000F01F -:103C200062F8C0B2864203D2FFDF01E0EFF794F8FA -:103C300021462846FFF76DFF0028F7D070BD2DE91B -:103C4000F0413D4F0025064617F10407412257F881 -:103C5000254094F8421094F8410000F053F888B3DE -:103C60006D1CEDB2032DF1D331484122433090F861 -:103C7000421090F8410000F045F8002831D02C485F -:103C8000412290F8421090F8410000F03BF80028E3 -:103C900027D027484122863090F8421090F8410002 -:103CA00000F030F800281CD0EFF72CF822480DF077 -:103CB00039F8B0F5005F00D0FFDFBDE8F0411E48E5 -:103CC0000DF046B894F84100265494F84100401C89 -:103CD000C0B284F841004128C6D1002084F84100D8 -:103CE000C2E7BDE8F081002806DA00F00F0000F11D -:103CF000E02090F8140D03E000F1E02090F80004BB -:103D000040097047401C884204D0904200D109B15C -:103D1000002070470120704710B507480DF002F8E9 -:103D2000002803D1BDE81040EEF7D7BF10BD00005A -:103D30005C0A00200DE000E09C00002004ED00E0A3 -:103D4000164908784A78401CC0B2904205D0144BFE -:103D500001221A60BFF34F8F087070472DE9F041C0 -:103D60000E4C4FF0E02600BFEFF77CF820BF40BFBD -:103D700020BF677820786070D6F80052EDF7CCFA53 -:103D8000854305D1D6F8040210B92078B842EBD0AB -:103D9000EFF763F80020BDE8F0810000AC000020E0 -:103DA000180502402DE9F041012528034FF0E021DC -:103DB0000026C1F880011E4CC4F800610C2000F000 -:103DC0002CF81C4801680268C94341F3001142F015 -:103DD00010020260C4F804532560491C00E020BFB3 -:103DE000D4F80021002AFAD019B9016821F0100195 -:103DF0000160114807686560C4F80853C4F80061A1 -:103E00000C2000F00AF83846BDE8F08110B50446F1 -:103E1000FFF7C8FF2060002010BD00F01F02012145 -:103E200091404009800000F1E020C0F88012704706 -:103E300000C0004010ED00E008C500402DE9F0474B -:103E4000FF4C0646FF21A06800EB06121170217896 -:103E5000FF2910D04FF0080909EB011109EB0617F3 -:103E60004158C05900F0F4F9002807DDA168207816 -:103E700001EB061108702670BDE8F08794F8008009 -:103E800045460DE0A06809EB05114158C05900F006 -:103E9000DFF9002806DCA068A84600EB08100578CA -:103EA000FF2DEFD1A06800EB061100EB08100D709C -:103EB0000670E1E7F0B5E24B0446002001259A6860 -:103EC0000C269B780CE000BF05EB0017D75DA742DE -:103ED00004D106EB0017D7598F4204D0401CC0B262 -:103EE0008342F1D8FF20F0BD70B5FFF704FBD44C3E -:103EF00008252278A16805EB0212895800F0A8F97C -:103F0000012808DD2178A06805EB01114058BDE8C3 -:103F10007040FFF7E7BAFFF7B8F9BDE87040F7F770 -:103F2000E9BE2DE9F041C64C2578FFF7E4FAFF2DF4 -:103F30006ED04FF00808A26808EB0516915900F002 -:103F400087F90228A06801DD80595DE000EB0511CA -:103F500009782170022101EB0511425C5AB1521E11 -:103F60004254815901F5800121F07F418151284659 -:103F7000FFF764FF34E00423012203EB051302EB97 -:103F8000051250F803C0875CBCF1000F10D0BCF5DF -:103F9000007F10D9CCF3080250F806C00CEB423C6D -:103FA0002CF07F4C40F806C0C3589A1A520A09E018 -:103FB000FF2181540AE0825902EB4C3222F07F4209 -:103FC0008251002242542846FFF738FF0C21A06896 -:103FD00001EB05114158E06850F82720384690471A -:103FE0002078FF2814D0FFF786FA2278A16808EB22 -:103FF00002124546895800F02BF9012893DD2178FB -:10400000A06805EB01114058BDE8F041FFF76ABA1E -:10401000BDE8F081F0B51D4614460E460746FF2B5D -:1040200000D3FFDFA00700D0FFDF8548FF2100227B -:10403000C0E90247C5700671017042708270104677 -:10404000012204E002EB0013401CE154C0B2A8427C -:10405000F8D3F0BD70B57A4C064665782079854274 -:1040600000D3FFDFE06840F825606078401C607096 -:10407000284670BD2DE9FF5F1D468B460746FF248D -:10408000FFF739FADFF8B891064699F80100B8420F -:1040900000D8FFDF00214FF001084FF00C0A99F81B -:1040A0000220D9F808000EE008EB0113C35CFF2BD7 -:1040B0000ED0BB4205D10AEB011350F803C0DC451A -:1040C0000CD0491CC9B28A42EED8FF2C02D00DE0B8 -:1040D0000C46F6E799F803108A4203D1FF2004B09A -:1040E000BDE8F09F1446521C89F8022008EB041129 -:1040F0000AEB0412475440F802B00421029B00224C -:10410000012B01EB04110CD040F801204FF4007892 -:1041100008234FF0020C454513D9E905C90D02D01B -:1041200002E04550F2E7414606EB413203EB04134F -:1041300022F07F42C250691A0CEB0412490A8154E2 -:104140000BE005B9012506EB453103EB041321F023 -:104150007F41C1500CEB0411425499F800502046A5 -:10416000FFF76CFE99F80000A84201D0FFF7BCFEF3 -:104170003846B4E770B50C460546FFF7BCF906466D -:1041800021462846FFF796FE0446FF281AD02C4DFC -:10419000082101EB0411A8684158304600F058F896 -:1041A00000F58050C11700EBD14040130221AA68EE -:1041B00001EB0411515C09B100EB4120002800DC47 -:1041C000012070BD002070BD2DE9F0478846814672 -:1041D000FFF770FE0746FF281BD0194D2E78A86800 -:1041E0003146344605E0BC4206D0264600EB0612B6 -:1041F0001478FF2CF7D10CE0FF2C0AD0A6420CD18A -:1042000000EB011000782870FF2804D0FFF76CFE47 -:1042100003E0002030E6FFF76BF941464846FFF720 -:10422000A9FF0123A968024603EB0413FF20C85429 -:10423000A878401EB84200D1A87001EB041001E03C -:10424000280B002001EB061100780870104613E6D9 -:10425000081A0002C11700EB11600012704700003D -:1042600070B50446A0F500002D4EB0F1786F02D273 -:104270003444A4F500042B48844201D2012500E017 -:10428000002500F043F848B125B9B44204D32648CC -:10429000006808E0012070BD002070BD002DF9D13C -:1042A000B442F9D321488442F6D2F3E710B504466C -:1042B000A0F50000B0F1786F03D219480444A4F5CA -:1042C000000400F023F84FF0804130B11648006838 -:1042D00004E08C4204D2012003E014488442F8D266 -:1042E000002080F0010010BD10B520B1FFF7DEFF07 -:1042F00008B1012010BD002010BD10B520B1FFF79E -:10430000AFFF08B1012010BD002010BD08480949C9 -:104310000068884201D101207047002070470000EA -:1043200000000020003002002000002008000020D3 -:10433000B0000020BEBAFECA0548064A0168914294 -:1043400001D100210160044901200860704700008C -:10435000B0000020BEBAFECA40E50140534800212B -:104360000170417010218170704770B50546164686 -:104370000C460220EEF73FFA4C49012008704C49E8 -:10438000F01E08604B480560001F046070BD10B54A -:104390000220EEF730FA4549012008704648002116 -:1043A000C0F80011C0F80411C0F8081143494FF4D7 -:1043B0000000086010BD3D480178C9B1404A4FF483 -:1043C000000111603C49D1F800310022002B1CBFD4 -:1043D000D1F80431002B02D0D1F8081111B142708C -:1043E000102103E001214170364909688170027093 -:1043F0000020EEF700BA2D480178002904BF40786C -:1044000070472D48D0F80011002904BF02207047E2 -:10441000D0F8001100291CBFD0F80411002905D0E4 -:10442000D0F80801002804BF012070470020704721 -:104430001E4800B50278204B4078C821491EC9B2F9 -:1044400082B1D3F800C1BCF1000F10D0D3F8000145 -:1044500000281CBFD3F8040100280BD0D3F80801B2 -:1044600050B107E0022802D0012805D002E000295F -:10447000E4D1FFDF002000BD012000BD0B48017822 -:10448000002904BF807870470B48D0F8001100293C -:104490001CBFD0F80411002902D0D0F8080108B1DF -:1044A0001020704707480068C0B27047B400002071 -:1044B00010F5004008F5004000F0004004F5014010 -:1044C00008F5014000F400404C48002101704170A3 -:1044D000704770B5064614460D460120EEF78BF97D -:1044E00047480660001D0460001D056070BD70B582 -:1044F000424A012540EA01411570424A41F080716B -:104500001160414C0026C4F80461404A4FF04071EC -:104510001160002802BFC4F80052256070BD012858 -:1045200018BFFFDFC4F8006225604FF00070384903 -:10453000086070BD3148017879B1344A4FF040715C -:1045400011603149D1F804210021002A08BF4170CF -:1045500002D0304A1268427001700020EEF74BB969 -:1045600026480178002904BF407870472648D0F8D3 -:104570000401002808BF704726480068C0B2704791 -:10458000002808BF704730B51C480078002808BFD5 -:10459000FFDF1D48D0F80411002918BF30BD0224E8 -:1045A000C0F80443DFF870C0DCF80010C1F3001558 -:1045B000DCF8001041F01001CCF80010D0F8041124 -:1045C000002904BF4FF400414FF0E02207D100BFA3 -:1045D000C2F8801220BFD0F80431002BF8D02DB9DA -:1045E000DCF8001021F01001CCF80010C0F80843EE -:1045F00030BD05490120886070470000B7000020E9 -:1046000008F5004004F5004000F0004008F50140C6 -:1046100004F5014000F4004010ED00E070B5FF4CDF -:1046200000250120657025706572A572E07284F81E -:104630002150A56204F1380065630CF06BFB002883 -:1046400018BFFFDFA577F6480DF0F6FBF5494FF0F0 -:10465000FF300860091D0860091D0D60091D086014 -:10466000091D0D60091D0860091D0860091D08600D -:10467000091D0860091D0860091D0860091D086002 -:10468000091D0860091D086070BD30B4E349026867 -:10469000DFF898C34A6142688A61007A08770A7D28 -:1046A000E14BACF1040401204AB10A7E00FA02F2A7 -:1046B0001A608D7D002D0CBF2260CCF800204A7D51 -:1046C000002A04BF30BC70474A7E90401860C97D04 -:1046D00000290CBF2060CCF8000030BC7047D549E1 -:1046E000D3480860091DD4480860704710B50446D7 -:1046F000012908BF002105D002291ABFFFDF0021D0 -:104700004FF0807141F48470CA4940F48010086011 -:10471000E0B240F44030091D40F000700860C74826 -:10472000D0F80001002818BFFFDF10BD01202DE9DF -:10473000F04102254FF0E0270026C7F88051C0491C -:104740000E600860BF490A6822F0770242F08802D2 -:1047500042F000420A60091D0A6822F47F4242F4D6 -:10476000B0520A60AD4CB84965770D60B84AB74998 -:104770001160121FB7491160B74A40F25B611160C6 -:10478000121F40F203111160111F0860B34903208A -:104790000860B3499620086094F91E000CF06AFD89 -:1047A000607F002814BF4FF4C020AE48AE490860B7 -:1047B000AF49AE480860091FAE480860C7F880528C -:1047C0009E491020C1F8040384F82D60BDE8F081F3 -:1047D000A948016821F0010141F080710160704732 -:1047E0008E4A0368C2F802308088D0801172704708 -:1047F0008A4890F821007047884A517010707047BD -:10480000F0B50546800000F1804000F580508B88AF -:10481000C0F820360B78D1F8011043EA0121C0F826 -:10482000001605F10800012707FA00F6934C002A4C -:1048300004BF2068B04304D0012A18BFFFDF2068FE -:1048400030432060206807FA05F108432060F0BD7E -:1048500010B504460CF00EFD7048847710BD6F480B -:1048600090F82E0070476D4890F830007047844AE9 -:10487000C1781160006883490002086070472528EC -:1048800008BF02210ED0262808BF1A210AD02728E7 -:1048900008BF502106D00A2894BF0422062202EB4A -:1048A0004001C9B2784A116078490860704770B415 -:1048B0005A4B93F80AC0BCF1010F21D0BCF1020F92 -:1048C0001CBF70BC70475C7D002C04BF70BC70477F -:1048D0004FF47A74BCF1010F6D4E16D0DD7D93F864 -:1048E00019C0002D18BF0125012908BF292121D099 -:1048F000022A08BF674E06F2E141B1FBF4F119E06C -:104900001C7D002CE4D170BC70479D7D93F818C0CD -:10491000002D18BF0125012947D0022A06BF5E4E8F -:104920004FF47A714FF4C861314401F5FA7100BF58 -:10493000B1FBF4F1491F0844584908605849002068 -:10494000C1F84C014FEA0C2085F0010140EA01500A -:1049500040F00311187F820002F1804202F5C0424C -:10496000C2F810154F4901EB8001987EC20002F198 -:10497000804202F5F832C2F81415DFF82CC1C2F8F3 -:1049800010C5DA7ED30003F1804303F5F833C3F892 -:1049900014153849C3F81015012101FA00F09140AF -:1049A00008434249086070BC7047022A14BF4FF4A4 -:1049B000C8614FF47A7149F6FC621144B8E72DE9F9 -:1049C000F0411E4D0746032014468846C5F80002F4 -:1049D000124E707F002814BF4FF4C0202148334985 -:1049E000086040460CF094FC20460CF071FC01205D -:1049F00017B1012F60D062E02D4B19685A06022CC6 -:104A0000D2F8202314BFC2F30622C2F3066221F4B7 -:104A1000FE4141EA02211960B0724BE0380B0020E0 -:104A20004C0B0020000E0040180500500C050050F3 -:104A3000060102001415004025000302001000408A -:104A4000FC1F00403C1700406015004044800040BF -:104A50009CF5014028110040381500401015004019 -:104A6000441500400000040408F501404080004067 -:104A7000A4F501401011004074170040401600409A -:104A8000241500401C150040081500405415004036 -:104A9000A224020004360200683602004C85004061 -:104AA00000800040006000404C81004004F501405F -:104AB00088150040286002E00221B1726860F9495F -:104AC000C864F948006822464146BDE8F041EEE678 -:104AD0002DE9F0418846F549074603201546C1F8FF -:104AE0000002F34C607F002814BF4FF4C020F1484F -:104AF000F14E306040460CF00BFC28460CF0E8FB11 -:104B000017B1012F19D021E0EC490A684806022D9F -:104B1000D0F8200314BFC0F30620C0F3066022F4CF -:104B2000FE4242EA002008600120A072606B40F45F -:104B3000801060634FF4801007E00220A072606B69 -:104B400040F4001060634FF4001030602A46414684 -:104B5000BDE8F0410020AAE62DE9FF4FD34C824684 -:104B6000002681B003208946C4F80002D04D687F3A -:104B7000002814BF4FF4C020CE48CF4F38600398B0 -:104B80000CF0C6FB04980CF0A3FBCD494FF00108D4 -:104B9000BAF1000F03D0BAF1010F32D03BE0C74B9E -:104BA00004981A684FF0805C0228DCF8200314BFD8 -:104BB000C0F30620C0F3066022F4FE4242EA002061 -:104BC00018600C6095F82D00012806D0022818BF47 -:104BD000FFDF0CD085F80A801DE0DDE9031395F8AE -:104BE0002C2048460CF0E6FBA96A4618F2E7DDE9FE -:104BF000031295F82C3048460CF097FBA96A46182A -:104C0000E8E7B048086095F82D00012818BFFFDFDD -:104C100020D00220A872AC480660AD49AB480860BD -:104C2000686B40F400206863D4F800924FF0100ADB -:104C3000C4F808A30025C4F80052A6484FF4802BFE -:104C4000C0F800B0FF208DF80000C4F81051C4F87F -:104C500010800EE0DDE9031395F82C2096200CF06F -:104C600087FBA96A4618D4E79DF80000401E8DF81E -:104C700000009DF8000018B1D4F810010028F3D00E -:104C80009DF80000002808BFFFDFC4F80051C4F8F9 -:104C90000C51C4F81051C4F80451C4F81451C4F8AC -:104CA0001851C4F828518C4800680090C4F800924C -:104CB000C7F800B0C4F804A34FF400203860794866 -:104CC000C0F84C8078480068B04228BFFFDF30460B -:104CD000DDE9031205B0BDE8F04FE8E52DE9F8473E -:104CE000724CD4F8000220F00309D4F804034FF00A -:104CF000100AC0F30018C4F808A30026C4F8006224 -:104D00006B4D687F002814BF4FF4C020694871497B -:104D10000860A87A0127012802D0022803D014E0F5 -:104D2000287D10B911E0687D78B1A87EEA7E07FA87 -:104D300000F007FA02F210430860287F800000F1BB -:104D4000804000F5C040C0F81065FF208DF80000DD -:104D5000C4F81061276104E09DF80000401E8DF842 -:104D600000009DF8000018B1D4F810010028F3D01D -:104D70009DF80000002808BFFFDFC4F81061C4F8E8 -:104D800028616E72AE72EF72C4F80092B8F1000F33 -:104D900018BFC4F804A3BDE8F88700684F4920F0A5 -:104DA0007F40086070474FF0E0200221C0F880117A -:104DB000C0F8801270474FF0E0210220C1F80001D6 -:104DC000704747490870704710B546480BF0AAFF76 -:104DD000002818BFFFDF10BD42480BF0B9BF4249A1 -:104DE0000860704730B5324C0546A06AA84228BF1B -:104DF000FFDF012020732561607F40B128442061DE -:104E00002A48D0F8001241F04001C0F800122549AC -:104E10000020C1F84401354920690860606B2649CB -:104E200040F4800060634FF48000086030BD70B5CE -:104E30001F4C0546022020730CF057FA024694F8E6 -:104E40002C1028460CF0E0FA2061617F41B1084443 -:104E500020611648D0F8001241F04001C0F800125D -:104E600010490020C1F844012169A06A08441F4983 -:104E7000086070BD17494FF4800008600C48416B12 -:104E800021F480014163002101737047054801212D -:104E90004160C1600021C0F8441114480160044819 -:104EA00081627047008000404C8500400010004047 -:104EB000380B00200000040404F501408815004070 -:104EC000ACF5014004100040488500404881004096 -:104ED000A8F5014008F50140181100403C150040BC -:104EE000B9000020700B00200415004044850040EC -:104EF000FE4940204877FE490860FE48D0F800127D -:104F000041F04001C0F800127047FA48D0F8001292 -:104F100021F04001C0F80012F549022008607047F6 -:104F2000F448D0F8001221F01001C0F8001201215D -:104F300081617047EF480021C0F81C11D0F80012C1 -:104F400041F01001C0F800127047EA4981B0D1F871 -:104F50001C21012A1EBF002001B07047E64A1268DA -:104F600002F07F02524202700020C1F81C01E348A7 -:104F700000680090012001B0704730B50C00054674 -:104F800008BFFFDF14F0010F1CBF012CFFDF002D55 -:104F90000CBF01200220D54901284872CC72D549A6 -:104FA00004BFD1F8000240F0040007D0022807BF78 -:104FB000D1F8000240F00800FFDF30BDC1F8000268 -:104FC00030BD70B5C94C0023E17A11F0020F18BF53 -:104FD00010F0040F16D111F0100F1CBF94F82F2001 -:104FE000002A02D094F8312062B111F0080F1CBFE2 -:104FF00094F82020002A05D111F0040F03D094F872 -:10500000211001B9012394F809C00122B949BCF16A -:10501000000F06D000F00200184312D0BDE8704027 -:105020005CE6607F002814BF4FF4C020B448B54B45 -:105030001860D1F8000220F00300C1F80002E2720B -:1050400070BD00252846BCF1010F0BD0BCF1020F4A -:1050500018BFFFDF16D0A06A01222844BDE87040C7 -:10506000002124E4D1F8003223F00403C1F8003217 -:105070006072E272A27201231A46002196200CF09F -:1050800054F90FE0D1F8003223F00803C1F80032E0 -:105090006072E2720220A07201231A46002196205B -:1050A0000CF066F90546D6E72DE9F84F964FD7F88C -:1050B0004C218E4C93494FF00108A07A0026CAB1CA -:1050C000012802D0022803D014E0227D12B911E099 -:1050D000627D7AB1A27EE37E08FA02F208FA03F357 -:1050E0001A430A60227F920002F1804202F5C04218 -:1050F000C2F81065626B0A606663217B29B1D7F83C -:105100004411012908BF012200D00022794DD5F8B1 -:10511000101101290CBF40210021012805BFD5F83D -:105120000C31012B002320231943012805BFD5F89A -:105130000431012B002310230B437449022804BFC0 -:10514000D1F800C0BCF1010F07D1D5F80CC1BCF1FA -:10515000010F08BF4FF0080C01D04FF0000C4CEAD3 -:105160000303022804BF0968002905D1D5F80C11F2 -:10517000012908BF042100D000211943022803D1CE -:10518000002A18BF022200D100221143022804BFC6 -:10519000D5F80401012805D1D7F84401012818BF2A -:1051A000012000D1002040EA01095948016811F0AE -:1051B000FF0F03D0D5F81411012900D0002184F885 -:1051C0002E10006810F0FF0F03D0D5F81801012849 -:1051D00000D0002084F82F004E48006884F830008A -:1051E00043480068402803D1FFF705F9012800D0A3 -:1051F000002084F83100C5F80061C5F80C61C5F8DD -:105200001061C5F80461C5F81461C5F81861C5F8E6 -:105210002861414800680090C7F844613F48006831 -:105220004D46DFF8FC900090D9F800106162607F75 -:1052300000281CBF081A60623A480068A0620CF09F -:1052400054F884F82C00A07ADFF8DCA084F82D0054 -:1052500002280CD1607850B1DAF8001009780840C3 -:10526000217831EA000008BF84F8208001D084F85A -:105270002060DFF8B88015F0010F15D098F8001005 -:105280002B4A4908606A52F8211088470121294AAF -:1052900098F80030A06A52F82320904798F8000050 -:1052A00010F0010F0BD01FE015F0200F18BF0221E6 -:1052B000EDD115F0020F18BF0021E8D1EEE7DAF8C2 -:1052C0000000062200F10901A01C0CF0E9FB40B926 -:1052D000207ADAF800100978B0EBD11F08BF01205E -:1052E00000D0002084F82100284625E0380B00205B -:1052F0006015004000100040481500401C1100409F -:105300000000040408F50140008000400014004043 -:105310004016004010140040181100404481004025 -:10532000448500404085004004150040B90000203D -:10533000D022020008230200FFF743FE15F0020FFF -:1053400005D03D4898F8001050F82100804715F02E -:105350000C0F07D0394898F8001050F82110C5F309 -:10536000C000884715F0200F05D0354898F8001088 -:1053700050F82100804798F80000022805D105F078 -:105380006E00402806D101F0DDFB98F800000428EB -:1053900028BFFFDFA07A022818BFBDE8F88F207B66 -:1053A000002808BFBDE8F88FC7F84461022815D06F -:1053B000012818BFFFDFA16A2069884298BFFFDF7C -:1053C000D4F81000C9F80000606B1E4940F480005A -:1053D00060634FF480000860BDE8F88F2169A06A1F -:1053E0000844EFE7012804BF28207047022804BFC3 -:1053F0001820704700B5FFDF282000BD012804BF3A -:1054000041F6A4707047022804BF41F2883070470B -:1054100000B5FFDF41F6A47000BD012804BF41F2D2 -:10542000D4707047022804BF41F20400704700B5F1 -:10543000FFDF41F2D47000BDD8220200E822020052 -:10544000F822020004F5014010B53F480AF0F7FBCE -:1054500000213D480AF022FC01213B480AF0F2FB02 -:105460003A49002081F822004FF6FF7088843849BD -:105470000880488010BD704734498A8C824218BF2A -:105480007047002081F822004FF6FF708884704733 -:105490002D49016070472E49088070472B498A8C3E -:1054A000A2F57F43FF3B03D000210160084670470F -:1054B00091F822202549012A1ABF0160012000200D -:1054C0007047224901F1220091F82220012A04BFED -:1054D00000207047012202701D4800888884104611 -:1054E00070471B49488070471849194B8A8C5B8864 -:1054F0009A4206D191F82220002A1EBF01600120A5 -:105500007047002070471148114A818C528891429F -:1055100009D14FF6FF71818410F8221F19B10021C3 -:10552000017001207047002070470848084A818CAC -:105530005288914205D190F8220000281CBF00201B -:1055400070470120704700009A0B0020740B002068 -:10555000BA0000207047574A012340B1012818BF04 -:105560007047137008689060888890817047537006 -:105570000868C2F802008888D08070474D4A10B190 -:10558000012807D00EE0507860B1D2F80200086020 -:10559000D08804E0107828B19068086090898880ED -:1055A0000120704700207047424910B1012803D004 -:1055B00006E0487810B903E0087808B10120704788 -:1055C0000020704730B58DB00C4605460D2104A86B -:1055D0000CF02BFBE0788DF81F0020798DF81E0071 -:1055E00060798DF81D002868009068680190A868AF -:1055F0000290E868039068460BF0B2F920789DF8B5 -:105600002F1088420CD160789DF82E10884207D167 -:10561000A0789DF82D10884202BF01200DB030BD4A -:1056200000200DB030BD30B50C4605468DB04FF0B2 -:10563000030104F1030012B1FEF790FA01E0FEF756 -:10564000E0FA60790D2120F0C00040F04000607168 -:1056500004A80CF0EAFAE0788DF81F0020798DF8A4 -:105660001E0060798DF81D00286800906868019020 -:10567000A8680290E868039068460BF071F99DF8FD -:105680002F0020709DF82E0060709DF82D00A070F6 -:105690000DB030BD10B5002904464FF0060102D010 -:1056A000FEF75CFA01E0FEF7ACFA607920F0C0008A -:1056B000607110BDBE00002070B5FA4E044696F829 -:1056C00092000025012828D096F88C00012833D0BC -:1056D00096F86A0001281CBF002070BD6570132079 -:1056E0002070202206F16C01A01C0CF005FA0120AC -:1056F000A07186F86A50B6F86E10A6F88E10EA49C6 -:1057000049684A7B86F8902086F88C000888FBF769 -:10571000AFFAFAF71FFF012070BD657019202070E5 -:10572000D6F89300C4F80200D6F89700C4F8060033 -:1057300086F89250012070BD657006202070D6F862 -:105740008E00C4F8020086F88C50E4E7D54890F843 -:105750006A10002914BFB0F86E004FF6FF70704752 -:1057600070B5D14800250570017800291CBFFFDF06 -:1057700070BDCC4C84F8625084F8635084F8645057 -:1057800084F8655084F85E5084F8605084F8565070 -:1057900084F8365084F867507F21817094F8660051 -:1057A00028B1FFF7B2FBFEF706FE84F8665084F8D6 -:1057B0006A5084F88C5084F89250BC480AF0D6F8AD -:1057C000BDE87040BA480AF0D1B8B64890F8620017 -:1057D0007047B44900B591F8580091F85710C0F3DC -:1057E0008002C0F340031A4400F001001044052970 -:1057F00010D2DFE801F00B070B030900AD4931F8C7 -:10580000100000BDAC4800BDAC4900E0AC4931F827 -:10581000100000BDFFDF002000BDA24840F2712152 -:10582000B0F85A00484370479E4890F86800002836 -:1058300018BF0120704710B59A4C207A022818BF73 -:10584000032808D1207C04F1110108F071FF082819 -:105850001CBF012010BD207A002816BF022800209E -:105860000120BDE81040FFF79FBE8E4908727047C7 -:105870008C4981F8600070472DE9F041894C82B075 -:10588000207A002816BF022800200120607204F14F -:105890000A01FFF773FE207A022816BF03280121B0 -:1058A000002184F85F10082084F85D00607A0126EA -:1058B000002504F10A02012804BF527912F0C00F3A -:1058C0000AD004F10A02012804D1507900F0C00086 -:1058D000402801D0002000E0012084F85E0029B9B2 -:1058E00094F85700012818BF042806D1207C04F141 -:1058F000110108F01DFF84F85D002560FDF7B8F880 -:1059000060604FF0000894F85D0008F02DFF074636 -:1059100094F85F00002818BF002F04D010213846EB -:1059200009F093FD68B194F8600000281CBF94F85A -:105930005E0000281DD0607A04F10A0101280ED013 -:1059400012E06672424604F10A013846FFF76BFE28 -:1059500094F85D1004F10A0008F0FEFF09E04879B0 -:1059600000F0C000402840D0294604F10A00FFF7AB -:1059700091FE04F10A014D480AF01EF8617A4B4885 -:105980000AF03FF804F10A0149480AF015F8617A73 -:1059900047480AF036F894F8570001281EBF04283B -:1059A00002B0BDE8F081002594F85D0008F0E5FE46 -:1059B000040004BF02B0BDE8F081102109F045FDEC -:1059C00000281CBF02B0BDE8F0812A466946204687 -:1059D000FFF729FE6946354809F0FCFF01213348ED -:1059E0000AF01CF802B0BDE8F08108F0EEFF424674 -:1059F00004F10A01FFF717FEBBE770B5294C417BA4 -:105A000084F85810017984F8571001290CBF00223E -:105A10000288A4F85A20827B84F868208279002AC0 -:105A200016BF022A002201222274D0F80720C4F8EF -:105A30001120B0F80B00A4F8150094F856000125C9 -:105A4000002818BF84F8635094F83600002818BF67 -:105A500084F8645005293AD2DFE801F0030C1E34C3 -:105A60000C000021114809F084FF01210F4809F0C2 -:105A7000BFFF2DE001210D4809F07BFF04F111016A -:105A80000A4809F0A7FF217C084809F0C7FF012157 -:105A9000064809F0ADFF1BE00621044809F069FF44 -:105AA00016E00000BC0B0020CC000020580C0020A9 -:105AB000800C002028230200D0891300302302002C -:105AC000202302000221FE4809F053FF00E0FFDF1F -:105AD0000421FC4809F04DFF84F86250002070BD9D -:105AE00070B5F94C0546002084F864002A4604F19C -:105AF00017000CF001F884F83650012084F8640097 -:105B000070BD10B5F04C002284F8632084F8560074 -:105B1000024604F137000BF0EFFF012084F8630028 -:105B200010BDE94981F8670070472DE9F041E74E63 -:105B300082B0307808BBE44C94F86200E8B1FFF71B -:105B400043F9002584F8615075702846FFF739F94C -:105B5000FEF7ECFDFEF7C3FDDD48FEF788FEDD48ED -:105B6000FFF71BF994F85800002610F0010F08D039 -:105B70002520FEF784FE012612E002B00C20BDE8CD -:105B8000F08110F0020F04D02620FEF778FE0226E6 -:105B900006E010F0040F03D02720FEF770FE042665 -:105BA000FEF79DFD84F85C60FFF705F900210122F6 -:105BB0000846FEF78DFF0F210520FEF71DFE94F825 -:105BC0005E00002804BF94F85F00002805D194F817 -:105BD0005700012818BF042874D1FCF749FF064676 -:105BE00031466068FDF755FCBB4990FBF1F701FBBE -:105BF000170041423046FCF746FC6060206838449C -:105C0000206008F092FD2168884274D8C4E90056EB -:105C10004FF0010894F85D0008F0A6FD064694F8E0 -:105C20005F000127002818BF002E04D01021304645 -:105C300009F00BFC68B194F8600000281CBF94F8D0 -:105C40005E0000281DD0617A04F10A0001290ED0FF -:105C500012E03A46677204F10A013046FFF7E3FCAE -:105C600094F85D1004F10A0008F076FE09E040792E -:105C700000F0C00040281DD0414604F10A00FFF7A3 -:105C800009FD04F10A018E4809F096FE617A8C48FC -:105C900009F0B7FE04F10A018A4809F08DFE617A25 -:105CA000884809F0AEFE94F85700012818BF042870 -:105CB00021D108E008F089FE3A4604F10A01FFF715 -:105CC000B2FCDEE717E0012794F85D0008F055FD0F -:105CD000060010D0102109F0B8FB60B93A466946B9 -:105CE0003046FFF7A0FC6946754809F073FE0121B4 -:105CF000734809F093FE617A04F10A00FEF770FD23 -:105D000094F8570001281EBF042894F86300002867 -:105D100008D094F8562004F13701694809F09CFE38 -:105D200084F8635094F8640040B194F8362004F18C -:105D30001701644809F0BCFE84F8645008F069FD5E -:105D4000664808F0FAFD84F86600FFF745F802B0EF -:105D50000020BDE8F0815D494860704770B55A4C3D -:105D600006002BD094F8581094F85C20002521EA06 -:105D7000020010F0010F04D02520FEF780FD012560 -:105D800015E011F0020F02D012F0020F06D011F050 -:105D9000040F0CD012F0040F05D008E02620FEF707 -:105DA0006EFD022503E02720FEF769FD0425FEF7BE -:105DB00096FC94F85C00284384F85C0094F8610039 -:105DC00040B194F85700012808BFFFDFBDE87040DC -:105DD00000F0BFBA36B1002201234FF4967110468D -:105DE000FEF7BAFE3648FEF7FAFF94F8570005288A -:105DF00009D2DFE800F0030303090300012108468C -:105E0000FFF7BBF800E0FFDF94F8580094F85C104F -:105E100030EA01014FF0010002D02C49087070BD3A -:105E200094F85710012912BF84F86100002184F80A -:105E30005C10F2E710B5FEF7C7FF2448007840B9C0 -:105E4000214890F8620020B10020FFF787FF002072 -:105E500010BDFFF71BF8FFF70DF8FEF73FFFFEF749 -:105E6000A2FFFEF7B9FF0C2010BD184901204870B1 -:105E70007047154981F86500704770B5002503F03B -:105E8000A3FA48B1114E3078012809D0022801D078 -:105E9000032842D0FFDF70BDBDE8704000F059BA62 -:105EA000094C94F85700032837D094F8660018B1CD -:105EB000FEF76DFAFFF71CF80848FEF790FF0FE0B9 -:105EC000580C0020800C0020BC0B0020CC000020CF -:105ED0001B2302001823020040420F00A80C0020E0 -:105EE0009620FEF7A4FF94F85700012818BF042855 -:105EF0000AD094F86800012814BF0328102545F043 -:105F00000E010020FFF739F894F86700012808BF58 -:105F1000FFF710F80220307070BDBDE8704001201E -:105F20001CE770B5FE4DFF4C95F86700012817D0AF -:105F300095F8660018B1FEF7E8FFFEF73CFA03F0AB -:105F400043FAB8B12078022818BFFFDF0120FFF71D -:105F500005FF207800281EBF20780128FFDF70BDD4 -:105F6000F148FEF7F2FF002804BF7F20A070FEF783 -:105F7000D7FFDDE7BDE8704000F0EBB92DE9F05F39 -:105F800007464FF00009FEF76AFCE64E824630787D -:105F9000022818BFFFDFE24D7F2495F86700012833 -:105FA00030D0E24809F004FD83464FF0FF08002F8F -:105FB00000F0E480DD4809F00EFE002800F0DE80ED -:105FC000FEF716FC002800F0D98095F86600D74F40 -:105FD00068B108F003FC8046FF2808D00146F81C91 -:105FE00008F0EBFB404608F004FC40EA0A0A584679 -:105FF0004FF0000B062880F0C180DFE800F0BFBF43 -:10600000BF0CBF69C848FEF7A0FF002808BFB470E6 -:10601000FEF786FFC5E795F85700012818BF04284A -:1060200070D0BAF1000F18D195F86800002818BF99 -:10603000022867D13878F91CC0F3801008F078FB8B -:10604000824608F0DAFC40B1504608F096FB20B1D9 -:10605000102109F0FAF9002854D095F867000128BA -:1060600004BF95F89200002805D0B148FEF7B7FEAE -:106070000320307084E0012085F89200B8F1FF0F12 -:106080000FD005F19402511E404608F07FFB002816 -:1060900008BFFFDF95F8930040F0020085F89300F9 -:1060A0000CE03878C0F3801085F89300D5F8EF0045 -:1060B000C5F89400B5F8F300A5F89800B07805F19C -:1060C0009A077F2808BFFFDFB0783870B470CCE73C -:1060D0003878297CC0F38010884209D1062205F166 -:1060E0001101F81C0BF0DCFC002808BF012000D0D7 -:1060F0000020B8F1FF0F06D0C0B995F85D0040450B -:106100001AD113E03AE0B8B13878F91CC0F3801026 -:1061100008F00EFB044608F070FC38B1204608F089 -:106120002CFB18B1102109F090F928B195F857000F -:10613000012818BF04281DD095F85700F0B9BAF10E -:10614000000F17D195F86800002818BF012815D155 -:106150003878F91CC0F3801008F0EAFA044608F019 -:106160004CFC38B1204608F008FB18B1102109F0AA -:106170006CF918B195F865002C46D8B14FF00109BB -:1061800095F8660018B1FEF7C0FEFEF714F9B9F1F4 -:10619000000F1CBF0120FFF7E1FD307800281ABF77 -:1061A00030780128BDE8F09F3078032818BFFFDF62 -:1061B000BDE8F09F7068D4F8FB10C0F80E10B4F87A -:1061C000FF10418294F801110175B97D4175B7F84E -:1061D0001710C182B7F819104180B7F81B108180E1 -:1061E000B7F81D10C180534908300BF02AFE97F80C -:1061F000240000F01F017068017697F82410490907 -:1062000080F864113A78417BC2F340121140417327 -:1062100094F86A00002818BFFFDF84F86CB0D6F845 -:1062200004A0BAF80000A4F86E00BAF80200A4F8BE -:106230008400BAF80400A4F88600BAF80600A4F8AE -:1062400088009AF8640184F88A0094F85F0048B1E5 -:10625000607A04F10A01012804D1487900F0C000F5 -:10626000402835D094F8600040B1607A04F10A010A -:10627000012804BF487910F0C00F29D0C4F878B0C5 -:10628000A4F87CB03878B8F1FF0FC0F380108AF81A -:106290001900D4F8EF00CAF81A00B4F8F310AAF8FD -:1062A0001E101CD0C4F87E00BAF81E00A4F88200AC -:1062B00004F17202511E404608F068FA002808BF37 -:1062C000FFDF94F8710040F0020084F8710015E0DF -:1062D000D4F80A00A067E089A4F87C00D2E7164849 -:1062E0000BF0A6FD9AF8190084F87100DAF81A008C -:1062F000C4F87200BAF81E00A4F87600012084F8F1 -:106300006A0070680088FAF7B3FCFAF713F986F8A8 -:1063100000B0FEF7BBFDFEF7ADFDFEF7DFFC0DE0C4 -:10632000BC0B0020CC000020CE000020A80C0020D8 -:10633000800C0020C70C00203A0C0020FEF733FD33 -:10634000FEF74AFD012003F09CF919E7012203F052 -:1063500048BA70B5FEF79AFDFEF78CFDFEF7BEFC5D -:10636000FEF721FD1F4C002694F8660028B1FEF7C9 -:10637000CCFDFEF720F884F866601B4D2E70FEF70A -:106380002BFD94F85700012804D0BDE87040002090 -:1063900003F077B9022003F074F994F86A0000283A -:1063A00018BFFFDF6878002808BF70BD207C84F824 -:1063B0007100D4F81100C4F87200B4F81500A4F804 -:1063C00076003C2084F86C0068680188A4F86E10A0 -:1063D000012184F86A100088FAF74AFCFAF7AAF853 -:1063E0006E7070BDBC0B0020CC0000202DE9F04188 -:1063F000FF4F044600207978FE4D4FF00108064615 -:1064000011B1012923D007E095F85310002918BFD6 -:1064100087F8018000D0012079782B2211FB02F14E -:10642000294491F82820104318D02A22A01C293191 -:106430000BF062FB66700420207084F8028078788C -:106440002B2110FB01F0284480F8286023E095F808 -:106450002810002918BF7E70DDD1DDE795F87E0099 -:10646000E0B1D5F87F00C4F80200D5F88300C4F885 -:106470000600D5F88700C4F80A00D5F88B00C4F8E8 -:106480000E0095F88F00A07466701220207084F8BA -:10649000028085F87E600120BDE8F08195F8220039 -:1064A00001281ED0287801281CBF0020BDE8F081FB -:1064B0006670132020702022A91CA01C0BF01CFB6E -:1064C000A6712E70A888A884D5F89C00417B85F819 -:1064D000261085F822800088FAF7CAFBFAF73AF806 -:1064E000D9E7667006202070686AC4F8020085F853 -:1064F0002260D0E7BF480178002914BF80884FF69A -:10650000FF7070472DE9F041BA4C064694F8280018 -:10651000002818BFBDE8F081304609F049FA01466D -:1065200001250020072937D2DFE801F00A040736E9 -:106530003636090084F82A5009E0032000E00220E2 -:1065400084F82A0004F13301304609F09BFA84F8FC -:10655000320094F8AF0018B1FDF74DFF01281FD0AD -:10656000304609F057FA84F82B0004F12C0130462C -:1065700009F029FA9E4E04F1520730787F2808BFAF -:10658000FFDF307838707F20307084F82850BDE805 -:10659000F041032001F005BF84F83200BDE8F0812E -:1065A000FDF76CFF04F12C02511E08F0EFF80028F3 -:1065B00008BFFFDF94F82B1041F0020184F82B1084 -:1065C000D8E710B5002001F0F6FD8A4CA8B1FEF71F -:1065D000F2FB012200211046FEF7F1F904F1BC00A4 -:1065E000FEF7FDFBD4F8B400FEF7FCFB94F8A00026 -:1065F000032818BF02281FD022E0FEF747FCFEF751 -:1066000039FCFEF76BFBFEF7CEFB94F8AF0030B120 -:10661000FEF77BFCFDF7CFFE002084F8AF000120E1 -:1066200084F8B800022084F8B200FEF7D5FBBDE87C -:106630001040002001F0B5BE01210020FEF79DFCB6 -:10664000FEF778FC94F8AF0018B1FDF7A0FEFEF756 -:106650004FFC032084F8B20010BD66490028B1F851 -:10666000BA202CD0FF2A0BD24FF6FF7000EA42006E -:10667000A1F8BA00FF2888BFFF2001D9A1F8BA000D -:106680005B484268012A12BF002A0D224260D243B1 -:10669000C2EBC20303EB021291F8B930DB4303EB08 -:1066A000830CCCEB83131A444260900CB1F8BA20EF -:1066B000B0FBF2F302FB130081F8B9007047012A26 -:1066C000DED95008A1F8BA0008BF0120D8D1D5E71B -:1066D00070B5484C002584F8B250012684F8B260A9 -:1066E00094F8B20002281BBF94F8B20001280020E1 -:1066F000FFDF18BF70BD2B2101FB004181F828503E -:10670000401CC0B20228F6D3257084F8225094F8B9 -:10671000AF0028B1FEF7F9FBFDF74DFE84F8AF504E -:1067200084F8AE5084F89B60324884F8A05084F816 -:10673000B15040F2011120F8981F817070BD2DE911 -:10674000F0412C4C05460C2794F8B20001281FBFDD -:1067500094F8B20002280C20BDE8F081FEF734FB6B -:10676000FDF7E4FFFDF7BBFF94F898000126002831 -:1067700001BF94F89900002894F89A00002874D07A -:1067800094F8A000032802D0022805D008E00521D3 -:10679000194800F0DEFE03E00321174800F0D9FE9F -:1067A00094F8AC00002804BF94F8AD00002847D04E -:1067B000FCF75EF907463946D4F8A800FCF769FEF5 -:1067C0000E4990FBF1F801FB180041423846FBF7F7 -:1067D0005AFEC4F8A800D4F8A4004044C4F8A400A9 -:1067E00007F0A3FFD4F8A410884229D8002007E0BE -:1067F000D4000020D00C0020B40D002040420F0037 -:10680000C4E9290794F8AD0000281CBF012008F056 -:10681000AFF8012194F8AE0000281CBF94F8AC003A -:1068200000280DD094F8910004F19202012804D1BF -:10683000507900F0C00040280ED01046FEF72AFF25 -:1068400094F8911004F19200FDF7CAFF94F8B20099 -:106850000027012818D112E008F0B7F8324604F1F9 -:106860009201FEF7E0FEEBE7FFE794F8B2000228A2 -:1068700004BF84F8B2600C2006D1BDE8F08184F832 -:10688000B860022084F8B20094F89B0080B108F050 -:1068900018F8FE4808F051F884F8AF00FC48C4F836 -:1068A000B450FEF77AFAFEF797FA3846BDE8F08161 -:1068B00007F0AFFFEDE770B5FEF786FAF54C94F8F8 -:1068C000B200022803D0FEF787FA0C2070BD012029 -:1068D00084F8B900A4F8BA000220FEF772FAEE4874 -:1068E000FDF7C5FFED4B002004F1980294F8B110BC -:1068F000491CA3FB015C4FEA5C0CACEB8C0C6144C3 -:10690000C9B284F8B110895C012907D0401CC0B21B -:106910000328EBD3FFF755FE002070BD94F8B100BB -:10692000DF49085CFDF7ABFFFDF7D9FEF2E710B5D4 -:10693000D84C94F89030022B14BF032B00280BD1B5 -:1069400000291ABF022901200020114607F0F0FE9D -:1069500008281CBF012010BD94F89000002816BF25 -:10696000022800200120BDE81040FEF71DBEC948E6 -:1069700090F89000002816BF022800200120FEF7A2 -:1069800013BEC44981F890007047C24981F8AE0037 -:10699000704770B5BF4C94F89000002816BF0228CD -:1069A0000020012084F8910004F19201FEF7E6FD39 -:1069B00094F89000022816BF03280121002184F8D2 -:1069C000AD1094F89100002504F19202012804BF53 -:1069D000527912F0C00F0AD004F19202012804D1BA -:1069E000507900F0C000402801D0002000E00120D4 -:1069F00084F8AC00002804BF002970BDC4F8A4507E -:106A0000FCF736F8C4F8A80094F8AD0000281CBFC5 -:106A1000002007F0ADFF002694F8AE0000281ABF52 -:106A200094F8AC00002870BD94F8910004F1920134 -:106A3000012804D1487900F0C000402806D029463A -:106A400004F19200BDE87040FEF724BE07F0BDFFE0 -:106A5000324604F19201BDE87040FEF7E4BD002823 -:106A600016BF0228012200228A4981F89B2081F862 -:106A7000A100704770B5874D0C4600280CBF01215E -:106A8000002185F89B1085F8A2004FF0080085F8DA -:106A9000A3000BD1002C1ABF022C012000201146AC -:106AA00007F046FE85F8A300082801D0002070BD3D -:106AB000022C14BF032C1220F8D170BD754A032894 -:106AC00008BFC2F89C1082F8A000002070477149EE -:106AD00091F8A000032804D0012818BF022807D08D -:106AE00004E091F8A200012808BF70470020704719 -:106AF00091F8A100012814BF03280120F6D17047A6 -:106B000010B5FEF7C3F9FEF7B5F9FEF7E7F8FEF7A3 -:106B10004AF9604C94F8AF0030B1FEF7F6F9FDF792 -:106B20004AFC002084F8AF00012084F8B80002205D -:106B300084F8B200FEF750F9002010BD554981F8E5 -:106B4000B300704710B5FEF7A1F9FEF793F9FEF711 -:106B5000C5F8FEF728F94F4C94F8AF0030B1FEF7B6 -:106B6000D4F9FDF728FC002084F8AF00012084F858 -:106B7000B800022084F8B200FEF72EF9BDE81040FC -:106B8000002001F00EBC2DE9F84F424CFF217F2779 -:106B9000444E84F8B0104FF00008002800F0DC826A -:106BA00004F1BC0008F0E7FF30B904F1BC0009F0C3 -:106BB00002F8002800F0D08294F8B200334D052886 -:106BC00080F0C782DFE800F0F1F1F103F0002F4818 -:106BD00008F0EEFEB07094F89B0030B9FDF73FFE70 -:106BE000002808BF4FF0000801D04FF0010894F8CA -:106BF000AF0078B107F0F2FD84F8B0000146FF283D -:106C00000CD0E81C07F0D9FD94F8B00007F0F1FDB6 -:106C100040EA080894F8B000FF2812D107F081FE7E -:106C200084F8B00094F89B1059B1082809D128784D -:106C3000E91CC0F3801007F07BFD082818BF4FF057 -:106C40000008B078072880F0C781DFE800F04BB873 -:106C500004FCFCFC300094F8AF0018B1FEF755F9C5 -:106C6000FDF7A9FB0F48FEF770F9002808BF377041 -:106C7000FEF756F9B8F1000F00F0598194F8A00022 -:106C8000012818BF022840F052810DE08C0D002031 -:106C900038230200D00C00203E230200ABAAAAAA8F -:106CA0003B230200D4000020FEF718F868E094F8B7 -:106CB000AF0018B1FEF729F9FDF77DFBFE48FEF79E -:106CC00044F9002808BF3770FEF72AF9B8F1000F21 -:106CD00000F02D8194F8A00002284AD001284FD05E -:106CE00000F025B994F8AF0018B1FEF70EF9FDF7E2 -:106CF00062FBF148FEF729F9002808BF3770FEF75C -:106D00000FF9B8F1000F00F0128194F8A0000228EA -:106D10002FD0012834D003281CBFFFDFBDE8F88F37 -:106D2000E978D4F89C00827E91421BD12979C27EF9 -:106D3000914217D16979027F914213D1A979427F9B -:106D400091420FD1E979827F91420BD1297AC27F9A -:106D5000914207D12978427EC1F38011914208BF48 -:106D6000012100D0002194F8A220012A0ED0E9B11F -:106D7000D9E0D248FFF7C6FBBDE8F84F00F002BBF0 -:106D8000CE48FFF7BFFBBDE8F84F1AE4002974D1E5 -:106D900000F11A01C94808F016FEC84808F03AFE8A -:106DA000D4F89C104876BEE024E1D2E194F8A30028 -:106DB00008287DD094F8B01081425ED0B7E094F8F6 -:106DC000AF0018B1FEF7A1F8FDF7F5FABA48FEF7E3 -:106DD000BCF8002808BF3770FEF7A2F894F8AD00A1 -:106DE00000280CBF4FF0010B4FF0000B4FF00009D3 -:106DF0002878C10905F1090007D0407900F0C000EA -:106E0000402808BF4FF0010A01D04FF0000A94F863 -:106E1000A000032806D194F89B00002818BF94F81E -:106E2000A30001D194F8B00007F09EFC009088B157 -:106E3000102108F00AFB002818BF4FF0010BBAF12F -:106E4000000F07D000E0C7E005F109010098FEF748 -:106E5000B9FB814694F8A00003280FD0FDF73EFF50 -:106E6000B8F1000F69D0FDF7C3FC50EA090064D007 -:106E70009248FFF747FB00F041B954E0D4F89C007A -:106E8000E978827E91421DD12979C27E914219D141 -:106E90006979027F914215D1A979427F914211D13E -:106EA000E979827F91420DD1297AC27F914200E037 -:106EB0003DE007D12978407EC1F38011814208BFAF -:106EC000012500D0002594F8B000082805D094F8DA -:106ED000A310884208BF012600D00026B9F1000F98 -:106EE00005D1BBF1000F04D0FDF782FC08B10121F0 -:106EF00000E00021B8F1000F09D094F8A2000128A9 -:106F000003D020B955EA060001D0012000E000209E -:106F100001420CD094F8A200012804BF002DD4F83F -:106F20009C003FF435AFBDE8F84F00F08ABAFDF79A -:106F3000D5FEBDE8F84FFFF744BB94F8A100032845 -:106F400018BF02287ED1BAF1000F7BD0B9F1000F33 -:106F500078D1DFF8688194F87E00002872D101258D -:106F600084F8805094F8AF0018B1FDF744FA012876 -:106F700021D0404608F04EFD84F8810004F18201E2 -:106F8000404608F020FD404608F051FD84F8880096 -:106F900004F18901404608F024FD307804F18F089F -:106FA0007F2808BFFFDF307888F80000377084F84A -:106FB0007E500320A0E0FDF761FA04F18202511E29 -:106FC00007F0E4FB002808BFFFDF94F8810040F0E1 -:106FD000020084F88100D6E794F8AF0018B1FDF7FD -:106FE00094FFFDF7E8F93448FDF7AFFF00286CD1B6 -:106FF0003770CAE0314808F0DBFCB0703048E978FF -:10700000427A91421CD12979827A914218D16979C8 -:10701000C27A914214D1A979027B914210D1E979C7 -:10702000427B91420CD1297A827B914208D1297806 -:107030000078C1F38011B1EBD01F08BF012500D04B -:10704000002500E042E0FDF749FEB07804286BD14E -:10705000D5B31948FDF779FF002808BF3770FDF751 -:107060005FFF94F8B80000281CBF0020FFF7F5FA76 -:107070004FF0010884F8B880104D94F8530028BBF5 -:10708000042084F8550094F8AF00A5F1910918B1D7 -:10709000FDF7B1F9012835D0284608F0BBFC0949B5 -:1070A00081F8560009F12C01284608F08CFC00BF3D -:1070B00004F15E0128460AE0D40000208C0D002077 -:1070C000B40D0020D00C00202EE05EE016E008F0A9 -:1070D00005FD84F85D001F2884BF1F2084F85D0033 -:1070E00004F17D0530787F2808BFFFDF30782870F5 -:1070F000377084F85380042001F053F9BDE8F84F4D -:10710000FFF75FBAFDF7BAF909F12C02511E07F03B -:107110003DFB002808BFFFDFFE4890F8560040F016 -:10712000020089F82B00C3E7FB48FDF70EFF00289B -:1071300008BF3770FDF7F4FE94F8B800002804BFCC -:107140000120FFF78AFA84F8B880BDE8F84FFFF70E -:1071500038BAFFDFBDE8F88F94F8B200052828BFE1 -:10716000BDE8F88FDFE800F0030303041900F1E73E -:1071700094F8AF0018B1FDF7C8FEFDF71CF9E6481A -:10718000FDF7E3FE00283FF433AFFDF7C9FEFDF73E -:10719000A5FDBDE8F84FFFF714BADF48FDF7D5FEAF -:1071A000002808BF3770FDF7BBFE94F8B800002830 -:1071B00004BF0120FFF751FA84F8B880FDF78EFD77 -:1071C000BDE8F84FFFF7FDB970B5D24C94F8B200A6 -:1071D000072878D2DFE800F08D8D8D8D8D041000AA -:1071E000CE48FDF7FCFDFDF7A5FE9620FDF71FFE3E -:1071F000042084F8B20070BDFDF748FEFDF73AFEAA -:10720000FDF76CFDFDF7CFFD012584F8B850022095 -:1072100084F8B200FDF7E0FD2078002818BFFFDFFA -:107220000026A670D4F89C000188A1804188618363 -:107230008188A183C088E08384F8206094F8AD1031 -:10724000B74849B10178C21CC1F3801121B151790D -:1072500001F0C00140292ED094F8AE1041B110F8D1 -:10726000031BC1F3801119B1407910F0C00F22D077 -:10727000AC480AF0DDFD00BF94F8AF0018B1FDF78F -:10728000BAF8012820D0D4F89C00417EE171D0F8F2 -:107290001A10A160C08BA081666126832570D4F886 -:1072A0009C000088F9F7E4FCF9F744F9BDE8704068 -:1072B000022001F076B8D4F8E700C4F80E00B4F864 -:1072C000EB006082D8E714E0FDF7D8F804F108027B -:1072D000E11D07F05BFA002808BFFFDFE07940F00E -:1072E0000200E071D4F8BF006061B4F8C3002083ED -:1072F000D4E7FFDF70BD70B5864C94F8B20000256E -:10730000052828BF70BDDFE800F03939391B0300BC -:107310008148FDF71AFE10B97F497F200870FDF7FC -:10732000FFFD94F8B800002804BF0120FFF795F98D -:1073300084F8B850FDF7D2FCBDE87040FFF741B9C2 -:10734000FDF7A4FDFDF796FDFDF7C8FCFDF72BFD4D -:1073500094F8AF0028B1FDF7D8FDFDF72CF884F8BC -:10736000AF50012084F8B800022084F8B200FDF785 -:1073700033FDBDE87040002001F013B870BD01225C -:1073800001F0E1B870B5012000F015FF614CC8B103 -:1073900004F1E401A1F1280008F04CFB04F1E4063B -:1073A00094F89110304608F02CFB04F1920130461D -:1073B00008F002FB94F8AD00C0B394F8A0000328D5 -:1073C0001FD025E0FDF762FDFDF754FDFDF786FCBB -:1073D000FDF7E9FC94F8AF0030B1FDF796FDFCF73E -:1073E000EAFF002084F8AF00012084F8B8000220F2 -:1073F00084F8B200FDF7F0FCBDE87040002000F01A -:10740000D0BF94F89B00002818BF94F8A30001D1C6 -:1074100094F8B00007F0DBFA050007D001213046F0 -:1074200008F0EFFA2946304608F0C6FA3C48FDF766 -:10743000D6FC01210846FDF7A0FD052084F8B20026 -:1074400070BD70B5022000F0B6FE324C68B301206A -:1074500000F0A7FF04F1E401A1F1280008F0EAFA26 -:10746000D4F89C00417B04F1E40008F0C1FAD4F8A0 -:107470009C0004F1BC0204F1E4061278417BC2F3E3 -:1074800040121140417394F89110304608F0B9FA57 -:1074900004F19201304608F08FFA94F8AD00B8B3C9 -:1074A00094F8A00003281FD025E0FDF7EFFCFDF7BE -:1074B000E1FCFDF713FCFDF776FC94F8AF0030B16A -:1074C000FDF723FDFCF777FF002084F8AF000120D3 -:1074D00084F8B800022084F8B200FDF77DFCBDE816 -:1074E0007040002000F05DBF94F89B00002818BF9A -:1074F00094F8A30001D194F8B00007F068FA0500F1 -:1075000014D00121304608F07CFA294630460BE0C1 -:107510000CE00000D00C0020D40000208C0D0020D6 -:10752000B40D0020DE0C002008F046FAD4F89C00D0 -:10753000C18A324808F0FEFAD4F89C00417D2F48F9 -:1075400008F0FCFA2D48FDF74AFC062084F8B2004A -:1075500070BD70B50C46054608F008FA032C47D0FC -:10756000052C18BF70BD0521284608F002FA244CEE -:10757000D4F89C0000F10E01284608F0C5FAD4F8B2 -:107580009C0000F11201284608F0C2FAD4F89C00D1 -:10759000417D284608F0D2FAD4F89C00C18A2846DA -:1075A00008F0C8FAD4F89C004188284608F0B6FADA -:1075B000D4F89C008188284608F0B4FAD4F89C00DE -:1075C000C188284608F0B2FAD4F89C0000F10801FE -:1075D000284608F0CDFAD4F89C00017E284608F031 -:1075E000AFFA94F8B3102846BDE8704008F0B2BA7C -:1075F0002846BDE87040032108F0BBB9B40D002057 -:10760000D00C00202DE9FF4F06460C46488881B07B -:1076100040F2E24148430090E08A002500FB01FB74 -:1076200094F8630091460D2818BF0C281ED0252819 -:107630001EBF94F8640025284FF0000A16D0049865 -:1076400018B10121204603F029FB94F8510094F869 -:10765000528094F8C810074659B1012958D0022920 -:107660003DD0032918BFFFDF52D0A6E04FF0010A3A -:10767000E5E7B9F1000F08BFFFDFFE4D686800289D -:1076800008BFFFDF94F85100FDF7C7FE00F2E731B5 -:107690004FF47A70B1FBF0F0696800EB010994F8DF -:1076A0005100FDF7BAFE94F85110022907BFF249C4 -:1076B0004FF47A72F1494FF4C8621144084400F261 -:1076C000E7314FF47A70B1FBF0F040F2E241081A72 -:1076D0002969584449440844051D012015E0E5483E -:1076E000A9F101014068084308BFFFDFE448B9F190 -:1076F000000F006800EB0B0506D0DE48406800F282 -:107700002230A84288BFFFDF032084F8C80053E07E -:1077100094F86310009D25291CBF94F86410252956 -:1077200036D1B4F85810B4F8EA20891A491C09B2C5 -:1077300000292DDB94F8E81009B30F4694F8E910FE -:10774000002918BF8846022807BFCB484FF47A713A -:10775000CA484FF4C8610144022F07BFC6484FF41E -:107760007A72C6484FF4C8621044814208D9081A98 -:1077700000F5FA714FF47A70B1FBF0F0054407E0C0 -:10778000401A00F5FA714FF47A70B1FBF0F02D1A3F -:10779000B9F1000F10D0DFF8DC92D9F8040020B95D -:1077A000B9F80200002818BFFFDFD9F8040000F282 -:1077B0002230A84288BFFFDF05B9FFDF2946D4F891 -:1077C000CC00FAF760FEC4F8CC00B0600020307046 -:1077D0004FF0010986F80490204603F04CFBAAF113 -:1077E0000101084208BF86F8059006D094F8C80049 -:1077F00001280CBF0220032070714046D4F824B049 -:10780000FDF7FCFD0146022F07BF9B484FF47A723B -:107810009A484FF4C8621044084400F23F614FF4A4 -:107820007A70B1FBF0F0584400F5C970F06004982C -:1078300030EA0A0004BF05B0BDE8F08F29463046A3 -:1078400007F010FF87B2204603F015FBB8420FD8AF -:10785000074686F8059005FB07F1D4F8CC00FAF747 -:1078600012FEB0602946304607F0FCFE384487B26D -:107870003946204603F012FAB068C4F8CC0005B0CF -:10788000BDE8F08F2DE9F04304467E4885B00D46F3 -:1078900090F80004DFF8F091400999F800144909C4 -:1078A000884218BFFFDFDFF8CC81002708F13C06D3 -:1078B000082D80F0FA80DFE805F0045B656560F86C -:1078C000F894202C28BFFFDF36F814000621F9F7C2 -:1078D000C5F8050008BFFFDF202C28BFFFDF36F802 -:1078E00014002988884218BFFFDF95F8C8000028D7 -:1078F00008BFFFDF284602F0BCFEC8F80470A8F8F5 -:10790000027029460020C8F8107007F0EFFE00F161 -:107910009804686AA04218D995F85200FDF76EFDE8 -:1079200095F85110022907BF53494FF47A72534911 -:107930004FF4C862114408444FF47A7100F23F607A -:10794000B0FBF1F1686A0844071B29460020C8F81B -:10795000087007F0CBFE698840F2E242514398304C -:10796000081AA0F22230C8F80C0005B0BDE8F08378 -:1079700005B0BDE8F04303F05DB805B0BDE8F043E5 -:10798000FDF792BB99F8140D4049400991F8001495 -:107990004909884218BFFFDF202C28BFFFDF36F8D7 -:1079A00014000621F9F75AF8050008BFFFDF202C64 -:1079B00028BFFFDF36F814002988884218BFFFDF90 -:1079C0000022012329466846FFF71CFE95F8D200E5 -:1079D0006946FBF797FA002808BFFFDF05B0BDE84E -:1079E000F083202C28BFFFDF36F814000621F9F7BA -:1079F00035F8050008BFFFDF202C28BFFFDF36F871 -:107A000014002988884218BFFFDF95F8C8000428B1 -:107A100018BFFFDF85F8C87095F8D2404FF6FF79A0 -:107A2000202C28BFFFDF26F8149095F8D200FBF732 -:107A300000F8002808BFFFDF202085F8D200D5F825 -:107A4000D800002804BFD5F8D400C8F8140008D026 -:107A5000D5E937121144826911448161D5E93501B4 -:107A6000C860D5F8D40000281CBFD5F8D810016133 -:107A700014D10EE0DC0D002068360200A2240200C2 -:107A8000E000002001E000E00BE000E019E000E091 -:107A90000BE0D5F8D800002818BF8761FC480078B3 -:107AA00005B0BDE8F043F4F725B9FFDF05B0BDE848 -:107AB000F0832DE9F047F74D0746E88B6C68401CD2 -:107AC000E88328784FF00008002808BFFFDF07D0C0 -:107AD000DFF8C4A3042814D0052818BFFFDF40D066 -:107AE00021462869FAF7CFFCB86087F800800120AA -:107AF0003871A86800F5B370F860287804287CD144 -:107B000085E00029ECD02E69DAF8141039B38946E3 -:107B1000C9680029FBD1B9F1000F20D099F8000005 -:107B2000002808BFFFDFD9F81410D9F80400014479 -:107B30003046FBF7AEFC002807DA211A4A1E92FBFA -:107B4000F4F202FB0406214604E090FBF4F202FB8F -:107B5000140621468E4288BFFFDF3446C0E7444604 -:107B6000BEE70029BCD0D5F81890B9F1000F08BFC6 -:107B7000FFDF0026D9F8DC10DAF814403046721E18 -:107B80005CB1A069884228BF824284BF0246264673 -:107B90002046E468002CF4D106B9064609F1C80471 -:107BA000C9F8D860002E04BFC4F80C80CAF814408D -:107BB00005D0F068F460E060002818BF0461D4F8D4 -:107BC0001090C4F81880B9F1000F0ED0D9F8180041 -:107BD00048B1D4F814A0504538BFFFDFD9F81800D9 -:107BE000A0EB0A00A061C9F81880002E08BFC5F8F4 -:107BF000208009D03078002800E00DE008BFFFDFCA -:107C0000716970680844286240F6B83468E7E88B08 -:107C10000A2838BF032000D302207871E88B01289E -:107C200006D93846696807F01DFDE98B0844E883EA -:107C3000B8682861BDE8F0872DE9F0418046974893 -:107C400084B00E4690F80004954F410997F800045F -:107C50004009814218BFFFDF01210025082E8D4C0D -:107C600062D2DFE806F0041A35353061614D617388 -:107C70002173607800281CBF04B0BDE8F0818648FD -:107C8000456005612573A068C138FEF758FD0028DE -:107C900018BFFFDF04B0BDE8F081607850B1207BF1 -:107CA000002808BFFEF72CFF657304B0BDE8F04163 -:107CB000FAF7E9BDA173FEF7FEFD002818BFFFDF4C -:107CC00004B0BDE8F08104B0BDE8F041FDF7ECB9C7 -:107CD00097F8140D7349400991F800144909884236 -:107CE00018BFFFDF00216846FFF7E3FE6946404604 -:107CF000FBF708F9002808BFFFDF04B0BDE8F081FA -:107D00002078052818BFFFDF207F002808BFFFDF8D -:107D100025772570207DFAF78CFE002808BFFFDF4D -:107D2000257504B0BDE8F081FFDF04B0BDE8F08147 -:107D30002DE9F041574C0026207804281FBF2078F9 -:107D400005280C20BDE8F08101206070607B0025D3 -:107D5000A8B1EFF3108010F0010F72B60CBF00272E -:107D60000127607B00281CBFA07B002805D0FEF700 -:107D7000C7FE6573A573FAF786FD2FB903E0207D72 -:107D8000FBF7D3F900E062B6207DFBF71CFC207FF7 -:107D900028B125772078052818BFFFDF0C266570ED -:107DA0002570207DFAF745FE002808BFFFDF257506 -:107DB0003046BDE8F0812DE9F04F364883B00078B9 -:107DC000002818BFFFF7B4FF0120DFF8CC8088F847 -:107DD000000069460620F8F7CCFD002818BFFFDF39 -:107DE00000274FF6FF7934E0029800281CBF90F876 -:107DF000C81000292DD0008848451CBFDFF8A8A076 -:107E00004FF0200B3BD00621F8F728FE040008BFF6 -:107E1000FFDF94F8D200FBF7D6FB84F8C87094F823 -:107E2000D2504FF6FF76202D28BFFFDF2AF81560CD -:107E300094F8D200FAF7FDFD002808BFFFDF84F8B0 -:107E4000D2B069460620F8F794FD002818BFFFDF7E -:107E500010E06846F8F76BFD0028C5D00FE00298E7 -:107E600000281CBF90F8C810002903D0008848459E -:107E7000C9D104E06846F8F75AFD0028EFD088F829 -:107E80000070C8F8147003B00020BDE8F08F000047 -:107E9000DC000020F40D0020DC0D002001E000E0FB -:107EA0000BE000E019E000E0180E002010B50078AB -:107EB000F84C60B101280CBF40F6C410FFDF06D0BB -:107EC000A06841F66A01884228BFFFDF10BDA060AC -:107ED000F6E710B5EF4C00232070EF4803704370B5 -:107EE000037703734373837320218361017518380B -:107EF00043703A3010214FF6FF72428020F8042F71 -:107F0000491EFAD1180008BFA36005D0002B0EBF90 -:107F1000FFDF40F6C410A060A06841F66A01884205 -:107F200028BFFFDFBDE8104045E72DE9F043DA4CFC -:107F3000054685B0207816460F4600281EBF0C2047 -:107F400005B0BDE8F08395F8519095F85200D5F84A -:107F50002480FDF753FAB9F1020F07BFCF494FF460 -:107F60007A72CF494FF4C862114408444FF47A79C9 -:107F700000F23F60B0FBF9F0404400F22230C5F857 -:107F8000DC00A56195F8C800002818BFFFDF40F2AB -:107F90007120784360600120FDF730FA00F2E7308D -:107FA000B0FBF9F040F2712106FB0100A0606168AE -:107FB000A1F2F621884298BF01460020A160B9498C -:107FC00008610521217060702077E083B648FAF7D8 -:107FD000D5FC2075202808BFFFDFFAF749FD206196 -:107FE00001216846FFF765FD207D6946FAF78AFFA3 -:107FF000002808BFFFDF002005B0BDE8F083A648D9 -:10800000007800281CBF0020704710B50620F8F744 -:10801000C1FC80F0010010BD30B59F4C85B02278C6 -:10802000002A1EBF0C2005B030BD0D4640F2712164 -:10803000484360600120FDF7E1F94FF47A7100F2E6 -:10804000E730B0FBF1F040F2712105FB0100A060C8 -:108050006168A1F2F621884298BF01460020A16024 -:10806000607004212170E0838F48FAF787FC207547 -:10807000202808BFFFDF8B48406938B10146C0683F -:108080000028FBD111B1FAF7F3FC05E0FAF7F0FC98 -:1080900040F6B831FAF7F7F9206101216846FFF799 -:1080A00008FD207D6946FAF72DFF002808BFFFDF95 -:1080B000002005B030BD70B5774CA1690160FFF7B5 -:1080C00037FE002300BBA169D1F8D8205AB1D1E90D -:1080D00037C5AC449569AC44C2F818C0D1E9352C19 -:1080E000CCF80C2005E0DFF8BCC1D1F8D420CCF8E6 -:1080F0001420D1F8D420D1F8D810002A18BF11616B -:1081000002D1002918BF8B61A36170BD6549487019 -:10811000704770B540F2E24300FB03F510460C4691 -:10812000FDF76CF9022C07BF5C494FF47A725C4989 -:108130004FF4C862114408444FF47A7100F23F6072 -:10814000B0FBF1F000F2223085428CBF281A0020EB -:1081500070BD70B50D4606460146002007F0C6FA10 -:10816000044696F85200FDF749F996F85110022995 -:1081700007BF4A494FF47A7249494FF4C862114423 -:1081800008444FF47A7100F23F60B0FBF1F071885F -:1081900040F271225143C0EB4100A0F22230A542CF -:1081A00034BF21462946814203D2A5422CBF28462E -:1081B0002046706270BD3B4910B54968002801F146 -:1081C000980408BF04F5BC7409D0012808BF04F561 -:1081D000317404D0022814BFFFDF04F5B0742E48B8 -:1081E0008068A0428CBF0120002010BD10B52D4C2E -:1081F000607828B1D4E90201626807F05BFAA060F8 -:10820000D4E9010188429CBF2078002814BF0020D7 -:10821000012010BD04222DE9F043204FDFF88080BB -:1082200085B04FF47A79052980F0B980DFE801F054 -:108230000A2B033E890080F8C82005B0BDE8F04352 -:10824000FAF721BB044617480078002818BF84F8C5 -:10825000C82004D005B0BDE8F043FAF714BB0122F2 -:10826000002321466846FFF7CDF994F8D20069460D -:10827000FAF748FE002808BFFFDFB4F85800401C9A -:10828000A4F85800E6E7032180F8C81005B0BDE85F -:10829000F0830000DC000020F40D002068360200AE -:1082A000A2240200DC0D0020397C01000446408835 -:1082B00040F2E2414843B3490860D4F8F000214657 -:1082C0000089E082D4F8F00080796075D4F8F0007D -:1082D00040896080D4F8F0008089A080D4F8F00054 -:1082E000C089E0800020A66A07F000FA054694F8ED -:1082F0005200FDF783F894F8511002290EBF4FF495 -:108300007A7147464FF4C8613944084400F23F602F -:10831000B0FBF9F1608840F271225043C1EB40009C -:10832000A0F22230AE4234BF29463146814203D208 -:10833000AE422CBF304628466062022084F8C80056 -:10834000A4E706460146856A002007F0CFF90446F7 -:1083500096F85200FDF752F896F8511002290EBF18 -:108360004FF47A7147464FF4C8613944084400F22B -:108370003F60B0FBF9F0718840F271225143C0EBCD -:108380004100A0F22230A54234BF21462946814255 -:1083900003D2A5422CBF28462046706276E7FFDF55 -:1083A00074E72DE9F041DFF8E0810025774C98F87B -:1083B000001084B0052880F0C180DFE800F00316CB -:1083C0006DB9B900E5830846F3F794FC607800289E -:1083D00073D100216846FFF76CFB207D6946FAF7F0 -:1083E00091FD002808BFFFDF67E00120FDF706F8D8 -:1083F0006749684E08444FF47A71B0FBF1F0216987 -:10840000726840F2E2431144081AA16900F2DE608A -:108410004A88C83102FB03F772698A4208BF002507 -:1084200014D0216AFBF735F8002807DA391A4A1EFA -:1084300092FBF7F202FB0705394604E090FBF7F2E6 -:1084400002FB170539468D4288BFFFDFD8F80800C8 -:10845000854208D2A06940F271224188C1824A4314 -:1084600005EB420505E040F2E240B5FBF0F0A16902 -:10847000C882A06905214175C08A6FF41C71484308 -:1084800005EB400040F635413061B0EB410F28BFAD -:10849000FFDF04B0BDE8F081E5830846F3F72AFC6E -:1084A00001202077A0692169C0F8CC1080F8C8505D -:1084B0002178052918BFFFDF06D0FAF7E4F96573C4 -:1084C000A57304B0BDE8F081002808BFFFDFA069F4 -:1084D00090F8C800002818BFFFDFA06990F8D2000C -:1084E000202818BFFFDF2C48FAF748FAA169064692 -:1084F000202881F8D2000F8828BFFFDF274820F806 -:108500001670A06990F8D200202808BFFFDF002372 -:1085100001226846A169FFF775F8A069694690F8DD -:10852000D200FAF7EFFC002808BFFFDFA561C4E71F -:1085300004B00846BDE8F041F3F7DCBBFFDF04B050 -:10854000BDE8F081704770B5124D0446002912BF96 -:108550000129686070BD02291CBFFFDF70BD6888FB -:10856000401C68801046FCF758FF4FF47A7100F207 -:10857000E730B0FBF1F0201A686070BD0348007866 -:1085800070470000E0000020DC000020F40D002017 -:10859000C92E0200DC0D002085780100180E002095 -:1085A000FE48406870472DE9F0410D4606460146F9 -:1085B0001746012007F09AF8044696F85200FCF797 -:1085C0001DFF96F8521002290CBFF549F5490844E1 -:1085D0004FF47A7100F2E140B0FBF1F0718840F2A3 -:1085E00071225143C0EB4100C01BA0F55970A54258 -:1085F00034BF21462946814203D2A5422CBF2846DA -:1086000020467062BDE8F0812DE9FF4F8FB004462F -:1086100090F85200DDF8709098460B9049EA0800F7 -:108620000C9094F86400002617460D280CBF01201A -:1086300000200890B8F1000F04BF94F8040103284B -:1086400071D1089800286ED0B4F87C01B8426AD184 -:10865000D4F80C01C4F8F800608840F2E2414843C5 -:10866000C4F8FC00B4F85201B4F8DE100844C4F8B1 -:108670000001204604F00DFDB4F88001E08294F87A -:108680007E016075B4F882016080B4F88401A08036 -:10869000B4F88601C549E080C348097894F864318C -:1086A000628830F8111030F81300D4F828A008447C -:1086B0000004000C4FF0000105D000FB02F1BC48A3 -:1086C000B1FBF0F0411C1FFA81FB2146012007F0AD -:1086D0000DF8054694F85200FCF790FE94F85210FD -:1086E00002290CBFAE49AF49084400F2E1414FF402 -:1086F0007A70B1FBF0F1608840F271225043C1EB17 -:108700004000A0EB0B00A0F55970AA4534BF2946E4 -:108710005146814203D2AA452CBF5046284660628A -:10872000022084F80401D4E956ABB4F8DE000390CB -:10873000B4F85001D4F84C110691B8F1000F03D0F1 -:1087400094F8181149B17FE004F1D8010091743117 -:10875000099104F59C75091D07E004F596710091D7 -:10876000091D099104F58E75091D0A91B4F8581078 -:10877000381A791A09B200B20491002805DAD4F83F -:108780004801069001200C90084694F80411002935 -:108790005ED0012900F0668102297DD0032918BF2F -:1087A000FFDF00F0A98131460698F9F76CFE0999C0 -:1087B00008600A9801210780002028702971099813 -:1087C0000068A8607948D0E90520824287BF009AF6 -:1087D0001060009802600098626A0068104400F21D -:1087E0008310E8606971B4F8C800C01B00B20028AB -:1087F000C4BF032068710898002800F0F181B9F126 -:10880000000F18D0B4F8F020002A0CBF0020B4F8F4 -:10881000F200A4F8F20094F8F430401C584390425F -:1088200009D26879401E002805DD6971B4F8F200AC -:10883000401CA4F8F200B8F1000F00F0F58194F8A4 -:108840001801002800F0EC8113B00220BDE8F08F81 -:10885000BAF1000F08BFFFDFE08A40F27121484300 -:10886000490001EB400210980021002806D000FBCF -:1088700002F14F48B1FBF0F000F10101C4F808111A -:10888000608840F2E24100FB01F210994FF00000D5 -:1088900008D001FB02F100E042E04548B1FBF0F0F6 -:1088A00000F10100C4F80C010AF101064FF00100CB -:1088B000FCF7A4FD3F494FF47A7B0844B0FBFBF082 -:1088C000E18A40F271225143C0EB4101D4F8080122 -:1088D0000190091A314401F2C246607D510010FB3B -:1088E00001F00C900120FCF789FD33490844B0FBEE -:1088F000FBF1019801EB40010C9801EB000B01200A -:10890000FCF770FD584400F1620128484161816123 -:10891000A6EB0A00401EB0F53D7F38BFFFDF42E7FF -:10892000E28A40F271215143D4F8FC00109A00EB26 -:1089300041010020002A06D01D4802FB01F2B2FBD3 -:10894000F0F000F10100C4F80801628840F2E2434F -:1089500002FB03FC109B4FF0000206D0144A03FBFD -:108960000CF3B3FBF2F202F10102C4F80C21039AFA -:108970009AB9B9F1000F38D094F85200FCF73EFDD7 -:10898000014694F8520002280CBF054A054A1144DA -:1089900001F2E1424FF47A7110E026E0580E002017 -:1089A00004360200A224020042230200E800002054 -:1089B00040420F007D2A020083290200B2FBF1F140 -:1089C000D4F80821E38A114440F2712CD4F8FC2039 -:1089D00003FB0CF302EB4302561AFCF703FDABEB6F -:1089E00000003044A0F1200600E00E1AD4F8002167 -:1089F000D4F8F810D4F8080101FB020B607D40F2B6 -:108A0000E24110FB01F00C9094F852A05046FCF7A4 -:108A1000F5FC0146BAF1020F0CBFF948F9480844C9 -:108A200000F2E1414FF47A70B1FBF0F000EB4B0142 -:108A30000C9801EB000B5046FCF7D4FC584400F1B5 -:108A40006001F14840F2712341616288D4F80C1151 -:108A50005A43C1EB4201A1F213318161012084F834 -:108A60000401A0E6628840F27123D4F80C115A4345 -:108A7000C1EB420202FB00F6DDE903020244D4F836 -:108A80000001D4F8F8C0121AD4F80831521E0CFBB9 -:108A9000003002FB010B607D40F2E24110FB01F06F -:108AA0000C9094F852000190FCF7A8FC0146019844 -:108AB000022814BFD348D248084400F2E1414FF4E1 -:108AC0007A70B1FBF0F000EB4B010C9801EB000B5E -:108AD0000198FCF787FC584400F16001CA48B9F1DD -:108AE000000F4161A6F2133181613FF45CAEBAF12F -:108AF000000F08BFFFDF56E6628840F27123D4F80A -:108B00000C115A43C1EB420101FB00F694F86300DB -:108B100025281CBF94F8640025280AD1B4F87C01EC -:108B2000381A00B2002804DB94F87F01002818BF2F -:108B30000B900C9828B1039880B3BBF1000F18BFBD -:108B4000FFDFDDE903010144D4F80C0101FB00FA69 -:108B50000B98FCF753FC01460B9802280CBFA84861 -:108B6000A848084400F2E1414FF47A70B1FBF0F0FC -:108B700000EB4A0A0B98FCF735FC504400F1600109 -:108B8000A14840F2712341616288D4F80C115A4324 -:108B9000C1EB4201A1F21331816104E6FFE7BBF1B1 -:108BA000000F14BFBAF1000FFFDF0B98FCF726FC93 -:108BB0000B9902290CBF92499249084400F2E14105 -:108BC0004FF47A70B1FBF0F0361A94F85200FCF7CB -:108BD00009FCABEB00003044A0F12006B1E700BF78 -:108BE000B9F1000F7FF40EAE94F8040100283FF4B1 -:108BF00022AE618840F27122D4F80C015143C0EBDF -:108C00004101284606F02EFD0004000C3FF413AE8F -:108C10001D99002918BF0880012013B0BDE8F08F0E -:108C200094F85401FAF781FA94F854012946FAF7B6 -:108C300069F900281CBF88F0010084F819010020A0 -:108C400013B0BDE8F08F2DE9F04F704C804683B033 -:108C500020788A4600256C4E4FF00209032804BF95 -:108C6000207B40457CD1606830612078032818BFA4 -:108C7000FFDF0327BAF1080F70D2DFE80AF0040E15 -:108C80001B1B166F6F6A6562FCF74FFF002818BF49 -:108C9000FFDFB77003B0BDE8F08FFDF7CBF8002819 -:108CA00018BFFFDF03B0BDE8F08F03B0BDE8F04FA1 -:108CB000FCF7FAB927752574E07A012658B14FF40C -:108CC0007A71A069F9F7DFFBA061002104F11000BF -:108CD00006F0C8FC1AE001216846FAF71AFF9DF871 -:108CE000000042F210710002B0FBF1F201FB12052C -:108CF000FCF793FD05442946A069F9F7C4FBA06180 -:108D0000294604F1100006F0ADFC461C208C411CE5 -:108D10000A293CBF30442084606830B1208C401C5C -:108D20000A2828BF84F8159000D26775607A002859 -:108D30001CBF03B0BDE8F08F207B04F11001FAF7EF -:108D4000E1F8002808BFFFDF03B0BDE8F08F07E0BF -:108D500004E0207BF9F76DFE2570F5E7FFDFF3E710 -:108D6000B8F1200F28BFFFDF294F072137F818007F -:108D7000F7F774FE040008BFFFDFB8F1200F28BF2B -:108D8000FFDF37F818002188884218BFFFDF4FF057 -:108D900001083461BAF1080F80F04481DFE80AF07D -:108DA000049AA2A29DEEEEEDC4F85851F580C4F8E5 -:108DB0005C5194F8190138B9F9F75AFED4F8241126 -:108DC000FAF767FB002825DCB4F81611B4F8580050 -:108DD000814206D1B4F8CC10081AA4F8CE0020467F -:108DE00005E0081AA4F8CE00B4F816112046A4F83D -:108DF0005810D4F84011C4F82411C0F8481127E0E5 -:108E000004360200A2240200E8000020580E0020D0 -:108E1000800E0020B4F81411B4F85800081AA4F811 -:108E2000CE00B4F814112046A4F85810D4F8241138 -:108E3000C4F84011C4F84811D4F82C11C4F8D81063 -:108E4000D4F83011C4F84C11B4F83411A4F850110E -:108E500003F0D7FFF9F7E6FD94F852A00746504615 -:108E6000FCF7CCFABAF1020F0CBFFE49FE490844E8 -:108E70004FF47A7100F2E140B0FBF1F1D4F80C014B -:108E800040F27122014460885043C1EB4000A0F1E0 -:108E9000300AB72F98BFB7272146012006F026FCDD -:108EA0003844AAEB0000A0F21937A246214601205F -:108EB00006F01CFCDAF824109C30814288BF0D1AA1 -:108EC000F760BD4228BF3D46B56084F8188186F83A -:108ED000029039E704F0DBF801E0FCF7E5F884F8EC -:108EE000188131E7F9F7C4FDD4F84821014610464E -:108EF000FAF7CFFA48B1628840F27123D4F80C1126 -:108F00005A43C1EB4201B0FBF1F094F864100D2913 -:108F10000FD0B4F85810B4F816210B189A42AEBF0F -:108F2000501C401C0844A4F8160194F81A0178B9A2 -:108F300005E0B4F81601401CA4F8160108E0B4F8E6 -:108F40001601B4F8CC10884204BF401CA4F81601E6 -:108F5000B4F85201DFF81493401CA4F85201B4F89D -:108F60007E00B4F87C100DF1080B401AB4F85810CC -:108F7000401E08441FFA80FA17E045E052E03078BE -:108F8000002339F81000CDE9005B94F8641139F83A -:108F90001110084481B22046FFF736FB00283FF449 -:108FA000D3AE012818BFFFDF26D0B4F81621AAEBF4 -:108FB000020000B20028E2DA082084F8730084F886 -:108FC0007280204603F0D2FB84F8045194F8545187 -:108FD0004FF6FF78202D00D3FFDF27F8158094F897 -:108FE0005401F9F726FD202084F85401307903B0AC -:108FF000BDE8F04FF2F77EBEB4F81601BDF80810D8 -:109000000844A4F81601D0E794F80401042818BF16 -:10901000FFDF84F8045194F854514FF6FF78202D67 -:10902000DBD3D9E7FFDF8FE610B5914C207850B144 -:1090300001206072FCF71DFF2078032805D0207AFC -:10904000002808BF10BD0C2010BD207BFAF76DF87A -:10905000207BFAF7B8FA207BF9F7EBFC002808BF71 -:10906000FFDF0020207010BD2DE9F04F804F83B04E -:10907000387801244FF0000840B17C720120FCF7E1 -:10908000F8FE3878032818BF387A0DD0DFF8E4915D -:1090900089F8034069460720F7F76BFC002818BFE2 -:1090A000FFDF4FF6FF7440E0387BFAF73EF8387B7D -:1090B000FAF789FA387BF9F7BCFC002808BFFFDF14 -:1090C00087F80080E2E7029800281CBF90F804119E -:1090D00000292AD00088A0421CBFDFF89CA14FF0D5 -:1090E000200B3AD00721F7F7B9FC040008BFFFDFD7 -:1090F00094F85401FAF767FA84F8048194F854510B -:109100004FF6FF76202D28BFFFDF2AF8156094F870 -:109110005401F9F78EFC84F854B169460720F7F73B -:1091200028FC002818BFFFDF12E06846F7F7FFFBB6 -:109130000028C8D011E0029800281CBF90F8041144 -:10914000002905D00088A0F57F41FF39CAD104E08D -:109150006846F7F7ECFB0028EDD089F8038087F824 -:109160000B8003B00020BDE8F08F70B50446434883 -:1091700090F80004424D400995F8001449098842CE -:1091800018BFFFDF95F8140D40093E4991F800140F -:109190004909884218BFFFDF3649002001220C71BF -:1091A00088700A704870C87031490870BDE8704016 -:1091B0005AE73049087070472DE9F8432C4C0646B1 -:1091C0002078002875D13048F9F7D8FB2073202883 -:1091D0006FD0032766602770002565722572AEB1D7 -:1091E000012106F1F400FAF70CFD0620F7F7E0FB89 -:1091F00080460720F7F7DCFB96F8F4104044B1FBFB -:10920000F0F200FB1210401C86F8F400F9F70AFC9B -:109210001E49091838BF40F2F65000F59D7086B21D -:10922000FCF7D7FAE061FCF7F8FA4FF0010878B3E1 -:1092300084F80A8001216846FAF76BFC9DF800006B -:1092400042F210710002B0FBF1F201FB1200064481 -:10925000F9F70EFC3146F9F716F9A0612775677525 -:10926000257416E004360200A22402004223020004 -:10927000580E0020E8000020800E002001E000E0F1 -:109280000BE000E019E000E0478C01000AFAFFFF64 -:1092900012E0207B04F11001F9F734FE002808BF2A -:1092A000FFDF25840020FCF7E4FD0020BDE8F88303 -:1092B000FFE70C20BDE8F883F9F7DAFB3146F9F750 -:1092C000E2F8A061A57284F80B80C7E72DE9F047AA -:1092D00082B00026044680F80461A0F85061DFF8EF -:1092E00000944288FD4FD0F8288099F8000094F847 -:1092F000641137F8100037F8111008440104090C04 -:10930000304605D001FB02F0F649B0FBF1F0401CFD -:109310001FFA80FA2146012006F0E8F9054694F884 -:109320005200FCF76BF894F8521002290CBFEE497A -:10933000EE4908444FF47A7100F2E140B0FBF1F1DC -:10934000608840F271225043C1EB4000A0EB0A005C -:10935000A0F55970A84534BF29464146814203D241 -:10936000A8452CBF4046284660620096019699F8B1 -:10937000000094F86411002337F8100037F811103A -:109380001A46084481B22046FFF73EF9002818BF6C -:10939000FFDFC4F800610120C4F8F86084F804011C -:1093A000A4F81661A4F8146184F81A61B4F858009E -:1093B000401EA4F85800A4F8526102B00020BDE895 -:1093C000F087C74948707047C94810B5417A0124F1 -:1093D000002918BF002408D1C17A31B1406AC549BB -:1093E000884284BF0024FCF740FD204610BD70B5C4 -:1093F000BB4C0546E088401CE080D4E9020162785D -:10940000D5F85861002A1CBF324606F053F9A06017 -:10941000864208D895F80401012804D0E078002895 -:1094200004BF012070BD002070BD70B50D4640F234 -:10943000E24100FB01F42846FBF7E0FF022D0CBFE0 -:10944000A949AA4908444FF47A7100F2E140B0FBFF -:10945000F1F000F54D7084428CBF201A002070BDE1 -:109460002DE9F04383B00026044680F8186190F897 -:10947000D600002807BF94F80401032803B0BDE814 -:10948000F083F9F7F5FAD4F8482101461046FAF7C7 -:1094900000F80028DCBF03B0BDE8F083628840F22A -:1094A0007123D4F80C115A43C1EB4201B0FBF1F027 -:1094B000411CB4F858000144A4F81411B4F8CC10BD -:1094C000B4F81421891A09B20029DCBF03B0BDE841 -:1094D000F083012184F81A11B4F87E10B4F87C20CE -:1094E0007E4F891A491E084485B2DFF8F4810DF1D8 -:1094F00008091EE098F8000037F81000CDE900696F -:10950000B4F8142194F86411012337F811100844B9 -:1095100081B22046FFF778F8002804BF03B0BDE809 -:10952000F08301280FD0022812BFFFDF03B0BDE88F -:10953000F083B4F81401281A00B20028BCBF03B0AD -:10954000BDE8F083D6E7B4F81401BDF8081008446C -:10955000A4F81401EDE7F0B5DFF884C104265F4BF1 -:109560009CF80020002583B006297DD2DFE801F0B9 -:10957000073C03191941044680F8046107E00446DA -:109580009CF80300002818BF84F804610BD0F9F799 -:109590007AF9A4F85251B4F85800A4F8160184F8E6 -:1095A0001A5103B0F0BD33F8120094F804210121E0 -:1095B000032A13BF94F80421C4F80051C4F8F850EA -:1095C000012AE4D1CDE9001594F86411B4F8CC2057 -:1095D00033F811100023084481B22046FFF714F835 -:1095E000002818BFFFDFD2E7032180F8041103B081 -:1095F000F0BD0446B0F802C0866A90F8640133F802 -:10960000121033F8100008440104090C4FF0000058 -:1096100005D001FB0CF03349B0FBF1F0401C87B2E0 -:109620002146012006F062F8054694F85200FBF747 -:10963000E5FE94F8521002290CBF2B492B4908442F -:109640004FF47A7100F2E140B0FBF1F0618840F232 -:1096500071225143C0EB4100C01BA0F55970AE42CE -:1096600034BF2946314600E008E0814203D2AE42D1 -:109670002CBF30462846606203B0F0BDFFDF03B068 -:10968000F0BD2DE9F8431A4C0327154EE27AA17A72 -:1096900042F21079002550B1012843D002281CBFA6 -:1096A000FFDFBDE8F8834FF000081AB95EE04FF025 -:1096B00000080AB1E5722EE051B101216846FAF7BF -:1096C0004DFA9DF800000002B0FBF9F109FB11080A -:1096D000FCF7A3F800EB0801A0690DE042230200AB -:1096E000E800002040420F0004360200A2240200DD -:1096F000580E0020DB821300F8F7C5FEA061257428 -:109700006775607A30B9207B04F11001F9F7FAFB34 -:1097100000284BD02584F9F7B6F83079BDE8F84336 -:10972000F2F7E8BAE572A7692570012020720021DE -:10973000606805F035FB6068C0F84871217B80F8EF -:109740005411616AC0F84C71C0F8581190F8545126 -:109750000788202D28BFFFDF3C4820F8157060687F -:10976000FFF7B4FD002818BFFFDFD4E751B1012196 -:109770006846FAF7F3F99DF800000002B0FBF9F132 -:1097800009FB1108FCF749F800EB0801A069F8F79C -:109790007AFEA06125746775607A0028BAD1207BB3 -:1097A00004F11001F9F7AEFB0028B3D1FFDFB1E7F8 -:1097B00070B5274CA178022906BFE188002970BD49 -:1097C0002569C5F85C0195F85200FBF70BFED5F84A -:1097D0005C11081AA1680144A160E1680844E060D6 -:1097E00070BD70B505461A488378022B06BF006924 -:1097F00000F5AC74174C002904BF256070BD012929 -:1098000008BF681E0DD002291CBFFFDF70BD1046C7 -:10981000FBF703FE4FF47A7100F2E140B0FBF1F088 -:10982000281A206070BD0C48007800281CBF00205A -:10983000704710B50720F7F7ADF880F0010010BDB4 -:1098400005480078002818BF01207047800E0020CE -:10985000E80000207C0E0020580E0020F8490C285B -:10986000896881F8C3001ABF13281828704700229E -:1098700011280FD0072808BF704715280AD00128E3 -:109880001ABF002802287047A1F88220012081F821 -:1098900086007047A1F88820704770B5E84CA16831 -:1098A0000A88A1F8362181F8340191F85100012885 -:1098B00008BF012508D0022808BF022504D00428CB -:1098C00016BF08280325FFDFA06880F8385190F8FC -:1098D0005200012808BF012508D0022808BF022530 -:1098E00004D0042816BF08280325FFDFA068012143 -:1098F00080F8395180F83211002180F80611E078A3 -:10990000BDE87040F2F7F6B9F0B4CD48806890F841 -:109910004E30478EC68E458FB0F84010C28FB0F8DB -:1099200042C0022B1FD08D4238BF294601866245B6 -:1099300028BF62468286018FB0F84430994238BF12 -:109940000B464386818FB0F84640A14238BF0C4693 -:10995000C486BB4228BF1F464786B44228BF26465E -:10996000C686F0BC7047038E9D4228BF1D46838E7D -:109970009A4228BF1A46A94298BF0D4605869445CB -:1099800098BF62468286002180F84E10D3E7AC4A29 -:10999000012992681BD0002302290FD0032921D06E -:1099A00028B301282ED0032818BF704792F863000F -:1099B00013281CBF1628182805D1704792F8C30039 -:1099C000002808BF7047D2F8F0000370704792F883 -:1099D000C300012808BF7047D2F8F4000178491E7F -:1099E0000170704792F8C3000328ECD17047D2F899 -:1099F000F000B2F858108288891A09B20029A8BF6D -:109A000003707047B2F85800B2F8FA10401A00B26A -:109A10000028E1DA70472DE9F04100260327884C41 -:109A20000125A0B1206906F0CCF9A16881F8C20037 -:109A300005FA00F010F4000F08BFFFDFA06880F8FF -:109A40006370A0F8826080F88650BDE8F081A0685D -:109A50000023194690F86420583005F0A2FD002834 -:109A600004BF6570BDE8F0816078002818BFBDE8CC -:109A7000F081206906F0A5F9A16881F8C10081F89C -:109A80006470A1F8886081F88A50BDE8F08170B5F3 -:109A90006B4C84B0207910F0010F04BF04B070BD8E -:109AA000206900230521C578A06890F8632058300C -:109AB00005F077FD002818BF022D0FD00B2D18BF21 -:109AC000042D0BD0052D18BF062D07D00D2D18BF66 -:109AD000112D03D0607840F0080060706078002895 -:109AE0001CBF04B070BD2069C078801E162880F0AD -:109AF0005283DFE800F00BFBA7C5FA26FBF9FB9ABF -:109B0000F8FCFBFBFBE3F6F5F4F3F2F1A0680023AD -:109B1000012190F86620583005F043FD002840F000 -:109B2000B583206906F0A8F9A16881F8EE00072046 -:109B300081F86600002081F88A0081F8860000F034 -:109B4000A5BBA0680921002390F86320583005F0D8 -:109B500028FD20B1206906F0DFF9122814D0A06892 -:109B60000A21002390F86320583005F01AFD20B137 -:109B7000206906F0D1F9142821D0206906F0CCF92B -:109B8000162840F0838342E0A0680125002390F866 -:109B900063200921583005F004FD002808BF6570D6 -:109BA00000F074836078002840F07083A16881F829 -:109BB0007A0081F8860081F8630000F067BBA06836 -:109BC0000021012580F86310A0F8821080F886102B -:109BD0000421FEF71FFBA06890F84E10012900F049 -:109BE0007C820288A0F81621028EA0F81821828EAD -:109BF000A0F81A21428E00F58671A0F81C21C08EB3 -:109C000048820D72E078F2F775F800F03FBBA0686B -:109C100090F86310202940F03983002180F8631008 -:109C200080F886101A2000F02FBBA06890F863100F -:109C30000F292AD1002180F8681012213AE0000093 -:109C400004010020A06890F8631013291DD1D0F8FA -:109C5000F01000884988814218BFFFDFA068D0F863 -:109C6000F00000F12601206906F033F9A06800F148 -:109C7000BC01206906F035F91620A16800F064B92E -:109C8000A26892F86300162802D0022000F064BA9D -:109C9000D2F8F00002F1A80300F11E0100220E30FC -:109CA00005F007FCA0680021C0E92611012180F819 -:109CB0006810182180F8631000F0E8BA206906F0F7 -:109CC000B0F9032840F0E282206906F0AEF900BF47 -:109CD00001F022FC00F0DABA8DE202E2AEE152E1DC -:109CE0001EE135E103E050E0C4E004E0D5E1206985 -:109CF00006F00EF9ECE7A06890F863101B29C4D1B8 -:109D0000002580F88B5080F88650D0F8F01000883D -:109D10004988814218BFFFDFA068D0F8F0100D70AD -:109D2000D0F83C110A78002A18BFFFDF40F0F3801A -:109D300090F88C207AB180F88C500288CA80D0F8D4 -:109D40003C110D71D0F83C210D211170D0F83C214F -:109D50000188518010E00288CA80D0F83C110D7152 -:109D6000D0F83C2101211172D0F83C210C21117056 -:109D7000D0F83C21018851800088F6F779FFF6F78A -:109D8000D9FBE078F1F7B6FFC5E0A06800231946DB -:109D900090F86420583005F004FC50B9A068002306 -:109DA000082190F86320583005F0FBFB002800F0F4 -:109DB00027826078002840F06982A06890F88E00C1 -:109DC00010F0020F17D1206906F098F8A16881F809 -:109DD0008F00206906F094F8A168A1F8900020692E -:109DE00006F091F8A168A1F8920091F88E0040F079 -:109DF000020081F88E00A06890F88E1011F0010F1B -:109E000012D190F8642000231946583005F0C9FBA0 -:109E1000002808BFFFDF0121A06880F8641080F8E7 -:109E20008A100021A0F88810A06890F8631001291A -:109E300007D1002180F8631080F88610E078F1F7F0 -:109E400059FFA168D1F8F000098842888A4204BF0E -:109E50000178042940F01A8200250570E078F1F7B6 -:109E600049FFA06890F86310002908BF80F8865069 -:109E700000F00CBAA0680023072190F86320583046 -:109E800005F08FFB002800F0BB816078002840F0CF -:109E9000FD8102A9206906F079F8A0689DF80820E4 -:109EA000002590F89410114001F02F0180F89410D3 -:109EB00090F895109DF80920114001F0410180F8BB -:109EC000951080F88650D0F8F010008849888142BB -:109ED00018BFFFDFA068D0F8F0100D70D0F83C116B -:109EE0000A78002A18BFFFDF15D10288CA80D0F88F -:109EF0003C110D71D0F83C11029A8A60039ACA6035 -:109F0000D0F83C21072111700188D0F83C01418034 -:109F1000E078F1F7EFFEA06880F8635000F0B6B982 -:109F2000A0680023092190F86320583005F039FB20 -:109F3000002800F065816078002840F0A781A168C2 -:109F400081F87A0081F8860081F8630000F09EB9FC -:109F5000A0680023194690F86420583005F021FBD2 -:109F6000002800F04D816078002840F08F81A068C3 -:109F70000021A0F88810012180F88A10022180F8C1 -:109F8000641000F083B9A0680023194690F864209B -:109F9000583005F006FB00287ED0206905F0E0FF70 -:109FA00000287AD0206905F0D7FFA16808872069CA -:109FB00005F0CEFFA1684887206905F0CFFFA168B2 -:109FC0008887206905F0C6FFA168C88791F86300FB -:109FD0001D2813BF91F84E00012081F84E00012882 -:109FE00007D091F8FD00002804BF91F8FC0000287C -:109FF00003D01F2081F8640017E01E2081F8640060 -:10A000000A88A1F822210A8FA1F824214A8FA1F8F9 -:10A0100026218A8F01F58670A1F82821C98FC18376 -:10A0200001210175E078F1F765FEA0680021A0F834 -:10A030008810012180F88A1000F028B9A068002358 -:10A040000A2190F86320583005F0ABFA20B320695C -:10A0500005F086FFA8B1206905F07EFFA16808879A -:10A06000206905F075FFA1684887206905F076FF33 -:10A07000A1688887206905F06DFFA168C887FFF790 -:10A0800043FCA068002180F8861080F8631004214A -:10A09000FEF7C0F8A06801E01AE07CE090F84E10EE -:10A0A00001291AD00288A0F81621028EA0F81821E2 -:10A0B000828EA0F81A21428E00F58671A0F81C212C -:10A0C000C08E488201200872E078F1F713FEDDE0CF -:10A0D000607840F001006070D8E0022180F84E10F6 -:10A0E000D4E0A0680023194690F86420583005F0A9 -:10A0F00058FA80B3A06890F86300242812BF25287E -:10A10000607840F0200027D06846FBF7EDF9002882 -:10A1100008BF002105D0009805F053FE8DF8080017 -:10A1200002A9A06801AB162290F8630005F001FCBB -:10A13000A0B1A0689DF80420162180F8E42080F8E2 -:10A14000E5101A2180F86410012180F88A1000219E -:10A15000A0F888109AE053E0607097E0206905F05D -:10A1600022FFC0B1206905F018FFA16800F00700C8 -:10A1700081F84F00206905F014FF00F00701A06886 -:10A1800080F8501090F80721002A04BF90F80621AB -:10A19000002A04D024E00020FFF73DFC76E090F890 -:10A1A0004F3090F852C000F151029C4501BF127827 -:10A1B0008A42012180F87B1012D00288A0F82E215B -:10A1C00090F84F2000F5867180F8302190F850000B -:10A1D00081F82500012081F82000E078F1F78AFD60 -:10A1E000A068222180F86410012180F88A100021E3 -:10A1F000A0F888104AE0A06890F86300202801D0F9 -:10A200000120A9E7206905F0D8FEC0B3206905F058 -:10A21000C4FE00F0070060F30705206905F0C1FEE9 -:10A2200000F0070060F30F25A2680120002682F8E5 -:10A230008600A2F88260242082F86300D2F8080128 -:10A24000B2F851202946ADF8002005F020FB9DF81A -:10A250000020C1B28A4207BFA16881F8E860A26805 -:10A2600082F8E8109DF80110C0F30720814219BF61 -:10A27000A16881F8E900A06880F8E96006E0FFE7DE -:10A280000120FFF7C8FB1E20FFF707FBA068D0E9FD -:10A2900028134A1C43F10001C0E9282104B070BD15 -:10A2A0002DE9F047FE4D04464FF00007687808435B -:10A2B0006870287910F0200F2846806818BFA0F831 -:10A2C0007C7004D1B0F87C10491CA0F87C1090F888 -:10A2D0006910012639B990F863200023062158300F -:10A2E00005F05FF958B3A88810F4006F07D0A8688C -:10A2F00090F86910002918BFA0F874701FD1A868E1 -:10A30000B0F87410491C89B2A0F87410B0F8762027 -:10A310008A422CBF511A00218288521D8A4228BFCE -:10A3200080F87A60B0F87410B0F87620914206D3C5 -:10A33000A0F8747080F81261E878F1F7DBFC2879F6 -:10A3400010F0600F08D0A86890F8671021B980F865 -:10A3500067600121FDF75EFF4FF00808002C56D121 -:10A360006878002851D1287910F0040F0DD0A86822 -:10A3700090F86300032808BFFFDFA86890F8661014 -:10A38000072904BF2E7080F8667001F015F928794E -:10A3900010F0080F19D06878B8B9A868002190F8B3 -:10A3A000C300FFF7F4FAA86890F8C300FF2808BFBD -:10A3B000FFDFFF21A86880F8C31090F86610082915 -:10A3C00003D10221297080F86670FFF760FBA8783E -:10A3D00010F0080F16D0A8680023052190F863201C -:10A3E000583005F0DEF850B185F80180A868D0F843 -:10A3F0003C1108780C2808BF0020087002E00020FB -:10A4000003F04DFDA86801F010F800F06CFDA8689D -:10A41000A14600F1580490F8EC0030B9A27B00236B -:10A420000121204605F0BDF810B1208D401C20858B -:10A430003D21B9F1000F18D12878022808BF162055 -:10A440000ED0012804BFA86890F8EE0008D0687804 -:10A45000E8B110F0140F1CBF1E20E07602D005E01A -:10A46000E07603E010F0080F02D0E176A67641E036 -:10A4700010F0030F03D02A20E076A6763AE010F021 -:10A48000200F08BFFFDF2320E076A67632E094F8A5 -:10A490002E0028B1608D411C6185A18D884213D2A8 -:10A4A00094F8320028B1208E411C2186A18D88426B -:10A4B0000AD2218DE08C814203D3AA6892F8EC2065 -:10A4C00012B9A28D914203D32220E076A67611E044 -:10A4D000E17B31B1A18C814228BF84F81B80C5D2B9 -:10A4E00006E0A08C062803D33E20E076A67601E0A5 -:10A4F000A07EA0B1E7722773E7730221A868FDF779 -:10A5000089FEA86890F8C310012904D1D0F8F4009E -:10A510000178491E0170E878F1F7ECFB03E00021B7 -:10A52000A868FDF777FEBDE8F047FAF7ECBF5C4995 -:10A530004A788B781A430ED101280AD0087910F096 -:10A54000040F04D0886890F86600072803D0012023 -:10A550007047FDF74BBE0020704770B5504C064663 -:10A560000D46A0883043A08016F0020F04D016F0EC -:10A57000010F18BFFFDFE56016F0010F18BF25615E -:10A5800016F0020F12D0284605F01BFC062802D058 -:10A590000B282ED00AE0A06890F86310182905D186 -:10A5A0000021C0E92811012180F8691016F0800F00 -:10A5B0001CBF0820A07016F4806F08BF70BDA06893 -:10A5C000B0F8581080880844801D86B2284605F0EF -:10A5D000F8FB012804BFA068A0F8FA6015D028464F -:10A5E00005F0EFFB68B1284605F0EBFB182823D0F7 -:10A5F0000BE0A06890F86310122908BF0021D5D1A4 -:10A60000D2E7A068D0F8F0008680284605F0D9FB94 -:10A6100001281DD0284605F0D4FB08B3284605F0D4 -:10A62000D0FB182818BF70BDA068B0F8EA10284603 -:10A63000BDE8704005F0D3BCA06890F8E810002990 -:10A6400002BF90F8E91000290026A0F8EA60DCE7D4 -:10A65000A068B0F8FA102846BDE8704005F003BCC9 -:10A66000A068D0F8F00081882846BDE8704005F069 -:10A67000CABBF0B50A4C85B00026A060A680667003 -:10A68000A670054626700088FAF705FFA0680088C6 -:10A69000FAF727FFB5F8D000A168401C82B201E0AC -:10A6A0000401002001F1580004F085FD002818BFC6 -:10A6B000FFDF95F8640025280AD1B5F85810B5F8E1 -:10A6C000EA00081A00B20028A4BF6078002804D06D -:10A6D00095F8630025283BD119E0A06890F8E810B0 -:10A6E000002908BF90F8511080F8511090F8E91037 -:10A6F000002908BF90F8521080F852100020FFF790 -:10A70000CCF885F86460A16881F87B6020E0B5F83A -:10A710005810B5F8EA00081A00B20028A4BF607803 -:10A72000002815D1A06890F8E810002908BF90F81B -:10A73000511080F8511090F8E910002908BF90F8E6 -:10A74000521080F852100020FFF7A7F885F86360D8 -:10A75000A5F8D060A06890F8861039B1B0F88210E2 -:10A76000B0F88420914224BF05B0F0BD90F88A1063 -:10A7700039B1B0F88810B0F88420914224BF05B0F8 -:10A78000F0BDB0F88020B0F87E108A4224BF05B03A -:10A79000F0BD90F867208AB3B0F87C208A4224BFCD -:10A7A00005B0F0BD90F8C370FF2F00F02A81684615 -:10A7B000FAF774FE002808BFFFDF009805F03FFAA3 -:10A7C0000321009805F052FA0098017821F0100159 -:10A7D0000170394605F0C7FA192F80F0E780DFE8ED -:10A7E00007F02A22144EE5E5E61B7CE5E6E66CE57B -:10A7F000E5E5E5D8E6E6869FB8E5C500B0F87C104B -:10A80000062924BF05B0F0BDCCE7A06890F8ED1094 -:10A81000009805F02FFBCAE0A06890F8C4100098DB -:10A8200005F078FBC3E0A068D0F8F400411C009864 -:10A8300005F011FBBBE0A068D0F8F000817900982A -:10A8400005F0DDFAA068D0F8F0000189009805F065 -:10A85000CFFAA068D0F8F0004189009805F0B3FA6B -:10A86000A068D0F8F0008189009805F0B3FAA068DC -:10A87000D0F8F000C189009805F0B3FA97E0A0681D -:10A88000D0F8F000011D009805F0F8FAA068D0F8A3 -:10A89000F00000F10C01009805F0FAFAA068D0F879 -:10A8A000F00000F11E01009805F0F8FAA06800F130 -:10A8B000B801009805F000FB79E060690178009824 -:10A8C00005F012FB60698188009805F00FFB606954 -:10A8D0004188009805F00EFB69E0FE49D1E90001CE -:10A8E000CDE9020102A9009805F018FB5FE0A0681D -:10A8F000B0F84410009805F01BFBA068B0F84610B3 -:10A90000009805F019FBA068B0F84010009805F019 -:10A9100017FBA068B0F84210009805F015FB46E060 -:10A92000A068B0F84010009805F00AFBA068B0F8E5 -:10A930004210009805F008FBA068B0F84410009899 -:10A9400005F0F6FAA068B0F84610009805F0F4FAA1 -:10A950002DE0A06890F80811009805F01CFBA06895 -:10A9600090F80911009805F01AFB20E0A06890F813 -:10A97000E80004F087FF0146009805F028FBA06876 -:10A9800090F8E90004F07EFF0146009805F023FBF3 -:10A990000DE0A06890F8E510009805F040FBA06875 -:10A9A00090F8E410009805F03EFB00E0FFDFFAF7B6 -:10A9B00088FD002808BFFFDF009F384605F001FA38 -:10A9C000012809D0384605F0FCF960B1384605F099 -:10A9D000F8F918280FD014E0A068B0F8FA1038463B -:10A9E00005F041FA0DE0A068D0F8F0008188384603 -:10A9F00005F009FA05E0A068B0F8EA10384605F05D -:10AA0000EEFAB5480090B54BB54A2946304603F0FA -:10AA100081F9A0680023052190F86320583004F0E4 -:10AA2000C0FD002804BF05B0F0BD05B0BDE8F04092 -:10AA300002F041BFAB48806890F8861029B1B0F8A9 -:10AA40008210B0F8842091421AD290F88A1029B16D -:10AA5000B0F88810B0F88420914211D2B0F880206C -:10AA6000B0F87E108A420BD290F86720B0F87C00D4 -:10AA700022B1884204D200BF03F0ECB90628FBD310 -:10AA8000002001460CE470B50C46064615464FF40E -:10AA9000A071204607F0C9F82680002D08BFFFDF0F -:10AAA0002868C4F8F0006868C4F8F400A868C4F81E -:10AAB0003C0170BDF6F7B3B82DE9F0410D460746ED -:10AAC0000621F5F7CBFF040008BFBDE8F081D4F8FC -:10AAD0003C110026087858B14A8821888A4207D15B -:10AAE000082810D00D281FD00C2835D0072850D0AA -:10AAF00094F8120100285ED06E700F20287084F840 -:10AB000012616F8042E06E7008202870D4F83C011A -:10AB10004168C5F802108168C5F80610808968810F -:10AB2000D4F83C01067031E00846F6F7A1F8074674 -:10AB3000F5F716FDB8B96E700D202870D4F83C01F9 -:10AB40004068C5F80200D4F83C0106703846F5F7B5 -:10AB500001FD0120BDE8F0810846F6F789F80746B7 -:10AB6000F5F7FEFC10B10020BDE8F0816E700C20FE -:10AB70002870D4F83C014168C5F802100089E880CB -:10AB8000D4F83C0106703846F5F7E4FC0120BDE836 -:10AB9000F0816E7007202870D4F83C01416882680B -:10ABA000C068C5F80210C5F80620C5F80A00D4F838 -:10ABB0003C010670EAE794F81401C8B16E701420E5 -:10ABC000287094F814010028E0D000BF84F81461C4 -:10ABD000D4F81601C5F80200D4F81A01C5F8060029 -:10ABE000B4F81E01688194F814010028EED1CDE775 -:10ABF00094F8200180B16E701A20287084F82061CA -:10AC0000D4F82201C5F80200D4F82601C5F80600E0 -:10AC1000B4F82A016881B9E794F82C0148B16E7044 -:10AC20001B20287084F82C61D4F82E01C5F802008E -:10AC3000ACE794F80C0190B16E701820287094F86D -:10AC40000C010028A2D000BF84F80C61D4F80E01DA -:10AC5000C5F8020094F80C010028F5D196E794F8A5 -:10AC60003201002808BFBDE8F0816E701520287001 -:10AC700094F83201002889D084F83261D4F8340184 -:10AC8000C5F80200B4F83801E88094F832010028D1 -:10AC9000F2D17BE7134A5061D17070472DE9F0473C -:10ACA0000446481E85B238BFBDE8F08704F10808A5 -:10ACB0000126DFF830904FF0080A0027B4F8D000E2 -:10ACC000401CA4F8D000B4F87C00401CA4F87C0020 -:10ACD0000AE000005C230200A1A201002FA50100F0 -:10ACE0005BA501000401002094F8690040B994F8C4 -:10ACF00063200023062104F1580004F052FCD8B16F -:10AD0000B4F87400401C80B2A4F87400B4F8761053 -:10AD100081422CBF0A1A0022A3885B1D934228BFE0 -:10AD200084F87A60884207D3A4F8747084F81261BA -:10AD300099F80300F0F7DEFF94F8860020B1B4F82C -:10AD40008200401CA4F8820094F88A0020B1B4F874 -:10AD50008800401CA4F8880094F8EC0040B994F8EE -:10AD600066200023012104F1580004F01AFC20B1F0 -:10AD7000B4F88000401CA4F8800094F863000C280C -:10AD800002D00D2820D067E0B4F85800411CB4F878 -:10AD9000FA00814260D1D4F8F400411C404607F02B -:10ADA00050F80221204604F034F9D4F8F400007879 -:10ADB000002808BFFFDF0121FF20FEF7E8FD84F82F -:10ADC000637084F8966047E0B4F85800411CD4F8EA -:10ADD000F000808881423FD1D4F83C0101780029FD -:10ADE00018BFFFDF22D12188C180D4F8F00041894B -:10ADF000D4F83C010181D4F8F0008189D4F83C01F9 -:10AE00004181D4F8F000C189D4F83C018181D4F8A3 -:10AE10003C010771D4F83C0180F800A0D4F83C0153 -:10AE20002188418099F80300F0F764FF0121204652 -:10AE300004F0EFF803212046FDF7ECF9D9F80800FB -:10AE4000D0F8F0000078022818BFFFDF0221FF20B1 -:10AE5000FEF79DFD84F86370B4F85800401C691E2D -:10AE6000A4F858008DB2BFF429AFBDE8F087FE4AC0 -:10AE7000C2E90601704770B50446B0F87C0094F84A -:10AE80006710002908BFC0F1020503D0B4F87E1096 -:10AE9000081A051F94F87A0040B194F86320002343 -:10AEA000092104F1580004F07CFBA0B1B4F87460EF -:10AEB00094F8690058B994F863200023062104F13E -:10AEC000580004F06EFB002808BF284603D0B4F8F1 -:10AED0007600801B001F8542C8BF0546002DD4BFE9 -:10AEE0000020A8B270BDF0B5DF4C83B0A06890F828 -:10AEF000C310FF2907BF6178002903B0F0BD90F8A7 -:10AF0000662000230121583004F04BFB00281CBFB1 -:10AF100003B0F0BDA06890F8EC1029B103B0022096 -:10AF2000BDE8F040FEF79ABC90F863200023194674 -:10AF3000583004F036FB48B1A06890F87A0028B188 -:10AF400003B01220BDE8F040FEF788BCA0680025E1 -:10AF500090F86320122A23D004DC032A47D0112A58 -:10AF600024D003E0182A3CD0242A4CD0002304210A -:10AF7000583004F016FB00281CBF03B0F0BDD4F815 -:10AF800008C0022701269CF864001A2800F01E81E0 -:10AF900041DC012873D002287FD0032863D03EE033 -:10AFA00003B00B20BDE8F040FEF758BCF8F7D5FD24 -:10AFB0000C283CBF03B0F0BDA0680821D0F8F00019 -:10AFC0001E30F8F7CBFD28B1A0680421B830F8F79F -:10AFD000C5FD00B9FFDF03B00320BDE8F040FEF778 -:10AFE0003DBC03B00620BDE8F040FEF737BC90F84A -:10AFF000C21080F8C4100720FEF730FCA06880F86B -:10B00000635003B0F0BD1820FEF728FCA068A0F83C -:10B01000825003B0F0BD1F2847D022287ED0DCF834 -:10B02000F0000178002900F010814088BCF8001081 -:10B03000884274D100239CF8632019460CF1580013 -:10B0400004F0AFFA00286AD0A068D0F8F0100978B0 -:10B05000022972D0032971D0042970D0052908BFB4 -:10B0600008206DD0F1E09CF8C1008CF8C4000720E6 -:10B07000FEF7F4FBA06800F0B0B900E00DE00C2092 -:10B08000FEF7ECFBA068A0F8885090F88E1041F015 -:10B09000010180F88E1000F0A0B91320FEF7DEFB4E -:10B0A000A068A0F8885000F098B99CF8FD0000282E -:10B0B0001CBF03B0F0BD9CF8FC0088B1BCF8FE00DA -:10B0C000ACF84000BCF80001ACF84200BCF802014A -:10B0D000ACF84400BCF80401ACF846008CF8FC5015 -:10B0E000FEF712FC0421A068FDF794F8A06890F820 -:10B0F0004E10012908BF80F84E7016D00288A0F8C3 -:10B100001621028EA0F81821828EA0F81A21428EF4 -:10B1100000F58671A0F81C21C08E01E011E094E0DA -:10B1200048820E72E078F0F7E5FD1520FEF796FBF9 -:10B13000A068A0F8885000F050B94CE051E071E0F0 -:10B1400058E09CF87B0058B18CF8E8508CF8E95036 -:10B150001820FEF783FBA068A0F8885003B0F0BD6C -:10B160009CF8070100281CBF03B0F0BD9CF8060145 -:10B17000002804BF03B0F0BDBCF84F10DCF8080194 -:10B18000ADF80410BCF85110ADF80010019904F0AE -:10B190007EFB9DF80020C1B28A4207BFA16881F8FA -:10B1A000E850A26882F8E8109DF80110C0F307206B -:10B1B000814219BFA16881F8E900A06880F8E950D0 -:10B1C000182003B0BDE8F040FEF748BB1120FEF7A1 -:10B1D00045FBA06801E190F8640004F0D5F9A0BB3C -:10B1E00008E090F8681041B190F86900002808BFA5 -:10B1F000FFDF0A20FEF732FB27E0F8F7AEFC0C2851 -:10B2000023D3A0680821D0F8F0001E30F8F7A6FC80 -:10B2100028B1A0680421B830F8F7A0FC00B9FFDF1E -:10B220000320E7E790F88E0010F0030F0DD10C20FB -:10B23000FEF714FBA068A0F8825080F8866090F8B2 -:10B240008E1041F0010180F88E10A06890F8C310B4 -:10B25000FF291CBF03B0F0BD90F8632000231946FE -:10B26000583004F09EF901E004010020002804BFDA -:10B2700003B0F0BDA06890F8F810E9B3A1690978AF -:10B28000D1BB90F8640004F07FF9A8BBA068B0F8C7 -:10B2900058100A2935D900F108010522E06906F0A5 -:10B2A000FFFB0028A06802BF80F8F85003B0F0BD93 -:10B2B000D0F8F400017869B1411C0522E06906F07C -:10B2C000EFFB00281CBF03B0F0BDA068D0F8F4006D -:10B2D000007830B9A068E169D0F8F400401C06F0AD -:10B2E000B0FDA068D0F8F4000178491C017001207D -:10B2F000FEF7B4FAA06800E003E080F8F85003B06D -:10B30000F0BDA06890F8FC1011B190F8FD1011B3D9 -:10B3100090F80611002904BF03B0F0BD90F80711A2 -:10B3200000291CBF03B0F0BD90F8640004F02CF9B4 -:10B3300000281CBF03B0F0BDA06890F8512090F821 -:10B340000811012A4DD0022A4ED0042A14BF082A1F -:10B3500004294BD05DE0B0F8FE10A0F84010B0F822 -:10B360000011A0F84210B0F80211A0F84410B0F893 -:10B370000411A0F8461080F8FC5090F864001E28D4 -:10B3800005D003B01420BDE8F040FEF767BAFEF721 -:10B39000BBFA0421A068FCF73DFFA06890F84E10AE -:10B3A000012908BF80F84E7013D00288A0F816213A -:10B3B000028EA0F81821828EA0F81A21428E00F584 -:10B3C0008671A0F81C21C08E48820E72E078F0F7DA -:10B3D00091FC1520FEF742FAA06880F8645003B093 -:10B3E000F0BD012915D101E0022912D190F85210C7 -:10B3F00090F80901012907D0022908D0042914BFB7 -:10B40000082904280BD004E0012802D107E0022813 -:10B4100005D003B01620BDE8F040FEF71FBA03B018 -:10B420000020BDE8F040FEF738BA70B5044690F849 -:10B43000630000250C2814D00D2818BF70BDB4F887 -:10B440005800D4F8F010401C8988884218BF70BD9D -:10B45000D4F83C01FE4E0178002918BFFFDF45D12A -:10B4600022E0B4F85800B4F8FA10401C884218BF23 -:10B4700070BDD4F8F400411C04F1080006F0E1FCB2 -:10B480000221204603F0C5FDD4F8F400007800281E -:10B4900008BFFFDF0121FF20FEF779FA84F863502F -:10B4A000012084F8960070BD2188C180D4F8F00096 -:10B4B000D4F83C1140890881D4F8F000D4F83C114C -:10B4C00080894881D4F8F000D4F83C11C089888183 -:10B4D000D4F83C010571D4F83C1108200870D4F868 -:10B4E0003C1120884880F078F0F704FC01212046C8 -:10B4F00003F08FFD03212046FCF78CFEB068D0F8E6 -:10B50000F0000078022818BFFFDF0221FF20FEF7BD -:10B510003EFA84F8635070BD70B5CD4CA16891F8C7 -:10B520006320162A11BF132A91F88C20002A627812 -:10B530001BBF02206070002A70BD81F8C00000258A -:10B5400081F88B5081F88650D1F8F0000988408846 -:10B55000884218BFFFDFA068D0F8F0000078032809 -:10B5600018BFFFDF0321FF20FEF711FAA068D0F813 -:10B570003C110A78002A18BFFFDF19D10288CA805F -:10B58000D0F83C2190F8C0101171D0F83C110D7228 -:10B59000D0F83C210C211170D0F83C210188518059 -:10B5A0000088F5F765FBF4F7C5FFE078F0F7A2FB3C -:10B5B000A06880F8635070BD10B5A54C207910F0DC -:10B5C000020F08BF10BD6078002818BF10BDE068EA -:10B5D000C078192880F06981DFE800F05F4F0D8F97 -:10B5E000F8F8A6223FF86F83B1F8F8F8F8F7E3E02F -:10B5F000F9F5F4F8F300A0680023012190F8662023 -:10B60000583003F0CEFF002818BF10BD0821A068F5 -:10B6100080F86610002180F8861080F88A1010BD2E -:10B62000A0680023194690F86420583003F0B9FF51 -:10B6300018B1A168002081F88A00A068002319468B -:10B6400090F86320583003F0ACFF002808BF10BD0D -:10B650000020A16881F8860010BDA068002319466B -:10B6600090F86320583003F09CFF002808BFFFDFEC -:10B670000420A16881F8630010BDA068002319466A -:10B6800090F86320583003F08CFF002808BFFFDFDC -:10B690000C20A16881F8630010BDA0680023194642 -:10B6A00090F86320583003F07CFF002808BFFFDFCC -:10B6B0000D20A16881F8630010BDA0680023194621 -:10B6C00090F86320583003F06CFF002808BFFFDFBC -:10B6D0000121A06880F88B105FF00F0180F86310E3 -:10B6E00010BDA06890F86300122818BFFFDF012189 -:10B6F000A06880F88C101121F0E7A068002319469B -:10B7000090F86320583003F04CFF28B9A06890F8F7 -:10B710008C00002808BFFFDF0121A06880F88B1093 -:10B72000132180F8631010BDA06890F863001828FA -:10B7300018BFFFDF1B20A16881F8630010BDA0685F -:10B74000D0F8F01003884A889A4204BF0978042987 -:10B7500019D190F8632000231946583003F021FFD7 -:10B76000002808BFFFDFA06890F88E1011F0020FCC -:10B7700004BF012180F8631005D0002180F88610F5 -:10B78000D0F8F0000170A0680023194690F86420FA -:10B79000583003F006FF002808BF10BD0020A16844 -:10B7A00080E0A0680023194690F86320583003F029 -:10B7B000F8FE002808BFFFDF0520A16881F86300BC -:10B7C00010BD30E01FE012E001E067E06DE0A0682E -:10B7D0000023194690F86320583003F0E2FE002859 -:10B7E00008BFFFDF1D20A16881F86300E8E7A068BB -:10B7F0000023194690F86420583003F0D2FE002848 -:10B8000008BFFFDFCAE7A0680023194690F863204D -:10B81000583003F0C6FE002808BFFFDF2020A168D3 -:10B8200081F86300CCE7A06890F8641022291DD04D -:10B8300090F86310242918BFFFDFC1D190F8E810F9 -:10B84000002906BF90F8E9100029252102E0000038 -:10B850000401002018BF80F863107FF4F9AE0021C6 -:10B8600080F863100846FEF718F8F1E690F8E81043 -:10B87000002907BF90F8E9100029252180F86410FD -:10B880008CD1002180F8641080F87B1090F80601BC -:10B8900000281CBF0020FEF700F87FE7A168002009 -:10B8A00081F8640081F88A008AE7FFDF88E70000FA -:10B8B00070B5FC4CE1680A88A1F8E62181F8E40142 -:10B8C00091F85100012808BF012508D0022808BFBF -:10B8D000022504D0042816BF08280325FFDFE068EE -:10B8E00080F8E85190F85200012808BF012508D0DF -:10B8F000022808BF022504D0042816BF0828032503 -:10B90000FFDFE068012180F8E95180F8E2110021B1 -:10B9100080F89211E078BDE87040F0F7EBB9F0B430 -:10B92000E048C06890F84E30478EC68E458FB0F81C -:10B930004010C28FB0F842C0022B1FD08D4238BFDA -:10B9400029460186624528BF62468286018FB0F88B -:10B950004430994238BF0B464386818FB0F8464049 -:10B96000A14238BF0C46C486BB4228BF1F4647864B -:10B97000B44228BF2646C686F0BC7047038E9D425F -:10B9800028BF1D46838E9A4228BF1A46A94298BFF7 -:10B990000D460586944598BF62468286002180F850 -:10B9A0004E10D3E72DE9F04FBE4C83B0207910F054 -:10B9B000010F04BF03B0BDE8F08F606901230521CA -:10B9C000C578E06890F86420583003F0EAFD00285C -:10B9D00018BF022D0BD00A2D18BF0B2D07D0032D39 -:10B9E00018BF062D03D0607840F0080060706078C2 -:10B9F00000281CBF03B0BDE8F08F60690227012654 -:10BA000090F8038000254FF02009B8F1000F1CBF0B -:10BA1000B8F1010FB8F1160F1FD1E06890F863007C -:10BA200003F0B2FDC8B1E16891F86300202814D09A -:10BA3000212808D0B8F1160F0CBF84F80190677068 -:10BA400003B0BDE8F08F262081F86300B8F1160F2F -:10BA500000F0AE822A20FFF72BFFB8F1190F80F01B -:10BA6000E282DFE808F046230DC1FEFEFDFCFBFE8E -:10BA700091B8FAFEFEFEFEF9F8F7F6F5F4FEF300D3 -:10BA8000E0680123194690F86620583003F089FDDC -:10BA9000002840F04D84606904F0EEF9E16881F817 -:10BAA0006801072081F8660000F042BCE0680123CD -:10BAB000002190F86420583003F073FD002800F056 -:10BAC000F083606904F0D3F9E168A1F87C01B1F872 -:10BAD0005820801A00B247F6FE728242A8BF0028A2 -:10BAE0004BDD01F5BF71606904F0B8F90B20E16826 -:10BAF0003FE0E0680123002190F86420583003F013 -:10BB000050FD002800F0CD83606904F083F900281F -:10BB100000F08982606904F07AF9E168A1F87C019B -:10BB2000B1F85820801A00B247F6FE728242A8BFD0 -:10BB3000002822DD606904F064F9E16881F87E0183 -:10BB4000606904F059F9E168A1F88001606904F0C6 -:10BB50003EF9E168A1F88201606904F03FF9E1680B -:10BB6000A1F88401606904F040F9E168A1F8860158 -:10BB70000D2081F8640000F0DBBB282081F8730001 -:10BB800081F8726000F0D4BBE0680123002190F8D6 -:10BB90006420583003F005FD0028E0680CD0A0F8C0 -:10BBA000885090F88A10491C80F88A105FF01001C4 -:10BBB00080F8641000F0BCBB90F8642001230521DC -:10BBC000583003F0EEFC00281CBF0820607040F0E5 -:10BBD000AF8300F066BBE06890F86410112908BFDD -:10BBE000122140F09282E3E7E0680123002190F8FF -:10BBF0006420583003F0D5FC80B9E06890F86420E8 -:10BC0000122A0BD001230521583003F0CAFC00286A -:10BC100018BF082000F0458300F0C7B9E06890F82D -:10BC20008C1031B9A0F8885090F88A10491C80F81F -:10BC30008A1000F1E001606904F037F9E06800F172 -:10BC4000B801606904F03CF9E0680BE01BE2AFE189 -:10BC500059E1F1E0CFE0DBE0EAE23AE0A2E0FFE226 -:10BC600022E072E190F8AA01002818BFFFDFE06827 -:10BC70000188A0F8AC1100F5D771606904F003F9F0 -:10BC8000E06800F5DB71606904F005F9E06880F8B0 -:10BC9000AA61142180F86410E078F0F72BF800F026 -:10BCA00047BB000024010020E06890F864101729C9 -:10BCB00040F02B8290F88A10491E49B280F88A1011 -:10BCC0000029B8BFFFDF1C20E16881F8640000F0A4 -:10BCD0002FBBE06890F8651011F0020F09D090F8C2 -:10BCE000632001230821583003F05BFC002800F09A -:10BCF000D882E06890F88E0010F0020F17D16069CA -:10BD000004F0FCF8E16881F88F00606904F0F8F84D -:10BD1000E168A1F89000606904F0F5F8E168A1F825 -:10BD2000920091F88E0040F0020081F88E00E068E9 -:10BD300090F88E1011F0010F05D0E06890F86310B4 -:10BD400006291CD114E090F8650010F0020F18BF0E -:10BD5000FFDFE06890F8651041F0020180F865109F -:10BD6000A0F8885090F88A10491C80F88A10E4E7FF -:10BD700080F8635080F88650E078EFF7BBFFE0680A -:10BD800090F87A11042940F0D38280F87A51E07853 -:10BD9000EFF7B0FFE06890F86310002940F0C88228 -:10BDA00000F043BAE06890F8650010F0010F7BD115 -:10BDB0006946606904F0B7F8E0689DF8002090F8E3 -:10BDC0009410114001F02F0180F8941090F8951014 -:10BDD0009DF80120114001F0410180F89510A0F874 -:10BDE000885090F88A10491C80F88A1090F86510E5 -:10BDF00041F001011CE0E0680123092190F8632073 -:10BE0000583003F0CEFB002800F04B8200F041BA1E -:10BE1000E06890F8651011F0040F40F04282A0F83D -:10BE2000885090F88A2041F00401521C80F88A2042 -:10BE300080F8651000F07CBAE06890F8650010F0BA -:10BE4000300F31D1606904F08BF800287DD0606933 -:10BE500004F082F8E1680887606904F079F8E16825 -:10BE60004887606904F07AF8E1688887606904F0BF -:10BE700071F8E168C887207910F0020F03D02069BB -:10BE8000C078142811D091F863001D280DD091F8C6 -:10BE90004E0001280BD091F88901002804BF91F8C9 -:10BEA000880100280AD002E074E081F84E6091F821 -:10BEB000650040F0100081F865001AE091F8650017 -:10BEC00040F0200081F865000A88A1F8CA210A8F95 -:10BED000A1F8CC214A8FA1F8CE218A8F01F5CB7031 -:10BEE000A1F8D021C98F818780F83260E078EFF720 -:10BEF00001FFE068A0F8885090F88A10491C80F88B -:10BF00008A1000F015BAE06801230A2190F8632036 -:10BF1000583003F046FBE8B3606904F021F8B8B18B -:10BF2000606904F019F8E1680887606904F010F8A6 -:10BF3000E1684887606904F011F8E1688887606902 -:10BF400004F008F8E168C88700E06CE0FFF7E7FC60 -:10BF5000E068052180F8865080F86350FDF7FBFA11 -:10BF6000E06890F84E10012908BF80F84E7000F08C -:10BF7000DF810288A0F8BE21028EA0F8C021828E47 -:10BF8000A0F8C221428E00F5CB71A0F8C421C08E6A -:10BF9000088600E006E081F82660E078EFF7AAFE68 -:10BFA00000F0C6B9607840F00100607000F0C0B9E0 -:10BFB000E06801230B2190F86420583003F0F1FA77 -:10BFC00020B100BF84F8019000F0B2B9E06801230D -:10BFD000002190F86420583003F0E3FA002800F0C4 -:10BFE0006081E06890F863002528EBD0606903F079 -:10BFF000DAFFC0B1606903F0D4FFE16800F0070028 -:10C0000081F85000606903F0C8FF00F00701E068A4 -:10C0100080F84F1090F89321002A04BF90F89221E5 -:10C02000002A04D022E001F0DEF900F081B990F896 -:10C0300052C090F8503000F151028C4502BF117887 -:10C04000994280F87B6011D000F5CB7180F8DC61FB -:10C050000288A0F8DE2190F84F2080F8E02190F8C7 -:10C06000500081F84B00E078EFF744FEE0682221B1 -:10C0700080F86410A0F8885090F88A10491C80F865 -:10C080008A1000F055B9E06890F8631021290CBFC0 -:10C090004FF001084FF0000890F86410232908BF02 -:10C0A00000F1640705D0B8F1000F18BF00F1630775 -:10C0B0002BD0606903F099FFF0B3D4F81490484690 -:10C0C00003F087FF0090484603F087FF8146E06851 -:10C0D00090F89211002907BF4FF0000BDA4690F854 -:10C0E00094B190F895A1484603F05AFBB0B1E268CC -:10C0F00092F85110814211D019EA0B0F41D0B8F1DA -:10C10000000F08BF012802D008E0677010E1022983 -:10C1100004BF92F8500010EA090F32D0009803F0E3 -:10C120003FFB68B1009803F03BFBE16891F85210C7 -:10C13000884205D0009800E023E010EA0A0F20D0E2 -:10C140006A466169E06803F03AFBD8B3606903F0BE -:10C150004AFFE168A1F87C01B1F85820801A00B2CA -:10C1600047F6FE728242A8BF00284ADD9DF8000013 -:10C1700081F87E019DF8010081F87F01252038704B -:10C1800044E0E06890F8920100281CBF1E20FFF7F1 -:10C190008FFBB8F1000F16D0606903F012FEE16862 -:10C1A00081F8C20006FA00F010F0807F08BFFFDFC0 -:10C1B0000A21E06880F8631090F88600002808BF24 -:10C1C000FFDF0DE010E03D70E16891F88A00401E4D -:10C1D00040B281F88A000028B8BFFFDF01F003F900 -:10C1E000E06880F87B50A3E0E06890F892010028B6 -:10C1F0001CBF0020FFF75CFB3D70E06880F87B50BF -:10C2000004E0282081F8730081F87260E06800F192 -:10C2100064018F4209D190F88A10491E49B280F812 -:10C220008A100029B8BFFFDF82E080F886507FE0E7 -:10C23000606903F0F6FE16287AD1E06890F8630092 -:10C24000212802D0262805D072E0606903F0EDFEB7 -:10C25000FFF72EFBE06880F8635080F8865067E0B7 -:10C26000E06890F863000E2804D1606903F054FE82 -:10C27000122805D0E06890F863001D2818D112E05C -:10C28000E0680123092190F86320583003F089F910 -:10C2900038B1E06880F87A5080F8865080F86350B2 -:10C2A00046E0667044E0606903F036FE142805D06D -:10C2B000E06890F8630021282BD125E0E068052193 -:10C2C00080F8635080F88650FDF745F9E16891F8F1 -:10C2D0004E00012808BF81F84E7029D00A88A1F8C5 -:10C2E000BE210A8EA1F8C0218A8EA1F8C2214A8EF1 -:10C2F00001F5CB70A1F8C421C98E018680F82660B3 -:10C30000E078EFF7F7FC13E0606903F005FE16280C -:10C3100005D0606903F000FE172809D113E0E0683A -:10C3200080F8635080F886505FF01A00FFF7C0FA7B -:10C33000E068D0E928134A1C43F10001C0E9282134 -:10C3400003B0BDE8F08FE06890F864102329EFD1C6 -:10C3500080F8645090F88A10491E49B280F88A101B -:10C360000029B8BFFFDFE06880F87B5090F89201A9 -:10C37000002818BF0020DBD0D8E770B5F84E05467E -:10C380000C46F06890F8C300FF2818BFFFDFF26882 -:10C390000020002C82F8C3501CBFA2F8880070BD9A -:10C3A000A2F88200012082F8860070BD10B584B02A -:10C3B00004466846F9F772F8002808BFFFDF0098C6 -:10C3C00003F03DFC0321009803F050FC0098017835 -:10C3D00021F010010170214603F0C5FCA01E1628B3 -:10C3E00073D2DFE800F00BAA4EABAB13AA5CAAAB8A -:10C3F0001B2CAAAAAAAAABAB31734B8DD848C06834 -:10C4000090F8C410009803F035FD97E0D448C06858 -:10C4100090F8C410009803F07DFD8FE0D04CA06828 -:10C420000178009803F060FDA0688188009803F00F -:10C430005DFDA0684188009803F05CFD7EE0062168 -:10C44000009803F063FD79E0C54CE068B0F8441053 -:10C45000009803F06DFDE068B0F84610009803F016 -:10C460006BFDE068B0F84010009803F069FDE068EB -:10C47000B0F84210009803F067FD5FE0B84CE06848 -:10C4800043E0B74CE06800F1E801009803F01CFDC0 -:10C49000E06800F1BC01009803F020FD4EE00020B0 -:10C4A00002900390AE48C06890F8941001F0F50136 -:10C4B0008DF8081090F8950002A900F041008DF861 -:10C4C0000900009803F05DFD38E036E0A44CE06818 -:10C4D000B0F84010009803F033FDE068B0F8421067 -:10C4E000009803F031FDE068B0F84410009803F0C4 -:10C4F0001FFDE068B0F84610009803F01DFD1DE038 -:10C50000974CE06890F8921159B190F89411009806 -:10C5100003F041FDE06890F89511009803F03FFDAD -:10C520000CE090F85110009803F035FDE06890F8A9 -:10C530005210009803F033FD00E0FFDFF8F7C1FF71 -:10C54000002808BFFFDF04B010BD70B50C460546DB -:10C550004FF4F871204605F068FB258070BDF4F7B4 -:10C560005EBB2DE9F0410D4607460721F4F776FA48 -:10C57000040008BFBDE8F08194F896010026C8B118 -:10C580006E700820287094F8960188B1268484F88B -:10C590009661D4F89801C5F80200D4F89C01C5F85A -:10C5A0000600B4F8A001688194F896010028EDD146 -:10C5B000AE7044E094F8A201002837D094F8A201AC -:10C5C0000C2818D00D2818BFFFDF38D12088F4F7C9 -:10C5D0004FFB0746F3F7C4FFA0B96E700D2028701B -:10C5E00094F8A401A8702088A88084F8A261384635 -:10C5F000F3F7B0FF23E02088F4F73AFB0746F3F7A0 -:10C60000AFFF10B10020BDE8F0816E700C202870E3 -:10C6100094F8A401A8702088A88094F8A801A871B3 -:10C6200084F8A2613846F3F795FF08E094F8DA0140 -:10C6300040B16E700F20287084F8DA616F8001209D -:10C64000BDE8F08194F8AA0180B16E7009202870CD -:10C6500020886880D4F8AE01D4F8B2116860A9606F -:10C66000B4F8B601A88184F8AA61E8E794F8B801A3 -:10C6700040B16E7017202870B4F8BA01688084F851 -:10C68000B861DCE794F8D40188B16E701820287086 -:10C6900094F8D4010028D2D084F8D461D4F8D6011B -:10C6A000C5F8020094F8D4010028F5D1C7E794F842 -:10C6B000BC01C8B16E701420287094F8BC01002829 -:10C6C000BDD000BF84F8BC61D4F8BE01C5F802003B -:10C6D000D4F8C201C5F80600B4F8C601688194F820 -:10C6E000BC010028EED1AAE794F8C80180B16E70B1 -:10C6F0001A20287084F8C861D4F8CA01C5F802006D -:10C70000D4F8CE01C5F80600B4F8D201688196E7E6 -:10C7100094F8DC0140B11B20287084F8DC61D4F867 -:10C72000DE01C5F802008AE794F8E201002808BF9C -:10C73000BDE8F0816E701520287094F8E2010028A1 -:10C740003FF47DAF84F8E261D4F8E401C5F802005B -:10C75000B4F8E801E88094F8E2010028F2D16EE72D -:10C7600024010020FA4A9060D1707047002180F8BF -:10C77000631080F8641080F8671090F8D61011B13B -:10C780000221FCF7E8BE0321FCF7E5BE2DE9F047E6 -:10C79000EF4C81460D46E0680088F4F77BFA06000E -:10C7A00008BFFFDF60782843607020794FF00005F4 -:10C7B00010F0200FE0681CBFA0F87C5080F8DC501F -:10C7C00004D1B0F87C10491CA0F87C10E068012767 -:10C7D00090F8691039B990F8642001230621583087 -:10C7E00002F0DFFE48B3A08810F4006F07D0E068C5 -:10C7F00090F86910002918BFA0F874501DD1E068A6 -:10C80000B0F87410491C89B2A0F87410B0F87630F2 -:10C810008B422CBF5A1A0022B4F806C00CF1050C4A -:10C82000624598BF80F87A70994206D3A0F8745098 -:10C8300080F8DA71E078EFF75DFA20794FF0020ABC -:10C8400010F0600F11D0E06890F8671011B1032963 -:10C8500006D00AE080F867700121FCF77CFE04E056 -:10C8600080F867A00121FCF776FEE06890F8671079 -:10C87000012905D1A18811F4807F18BF80F867A035 -:10C880004FF00808B9F1000F40F03281A18811F48F -:10C89000007F18BFA0F8F05004D1B0F8F020521C6F -:10C8A000A0F8F02011F0080F47D06178002944D19A -:10C8B00090F8C300FF2808BFFFDFFF21E06880F881 -:10C8C000C31090F86410192905D0E06890F863103F -:10C8D00020290FD028E080F88B5090F88A10491E4C -:10C8E00049B280F88A100029B8BFFFDFE06880F8FD -:10C8F0006450EAE790F8640002F046FE80B1E06818 -:10C900002621012380F8631090F864200B21583011 -:10C9100002F047FE002804BF2A20FEF7C9FF03E00B -:10C92000E168212081F86300E06890F8661008292A -:10C9300004BF84F800A080F86650FFF733F8207930 -:10C9400010F0040F09D0607838B9E06890F86610EC -:10C95000072904BF277080F8665000F0C5FB2079D6 -:10C9600010F0100F09D0607838B9E06890F86410C2 -:10C970000B2904BF0C2180F86410A07810F0080F78 -:10C9800011D0E0680123052190F86420583002F0AE -:10C9900008FE28B184F80180E06880F8A25102E026 -:10C9A000002001F07CFA00F03CFD01F06EFA002856 -:10C9B000E06818BFA0F8D05004D1B0F8D010491CDE -:10C9C000A0F8D01001F064FA40B1E16891F8DC0001 -:10C9D00002289CBF401C81F8DC0004D8E06890F875 -:10C9E000DC00022806D9E068A0F8D050A0F8D250A8 -:10C9F00080F8DC50E0680123002190F86420583072 -:10CA000002F0CFFD20B9E06890F864000C2859D1FD -:10CA1000E0680123002190F86320583002F0C1FD46 -:10CA200000284FD0E0680123002190F8662058309C -:10CA300002F0B7FDF0B3E06890F86710022904BF78 -:10CA400090F8DC0000283DD13046F3F70FFB88B3A7 -:10CA5000E06890F8C310FF2934D1B0F8CA1001295A -:10CA600030D980F8D570B0F87E10B0F87C208B1EDD -:10CA70009A42AFBF0121891A491E89B2B0F8D0305D -:10CA8000E28893422FBF0122D21A521C92B29142E5 -:10CA900088BF1146012908BF80F8D55090F8612160 -:10CAA000A2B1B0F8D220B0F8620182422CBF0120BE -:10CAB000801A00E006E03CBF401C80B2814288BF83 -:10CAC000014603E0E068012180F8D550E068B0F845 -:10CAD0005820114489B2A0F8CC1090F86730002B90 -:10CAE00018BF012B5FD0022B1CBF032BFFDF09D027 -:10CAF000A088C0F340200028E06818BFA0F8DE50EE -:10CB00005BD153E090F86630082B23D0B0F87C104E -:10CB1000B0F87E2000268B1C9A4206D3511A891E3B -:10CB20000E04360C1CBF711E8EB290F87A1051B1F3 -:10CB300090F8632001230921583002F032FD0028CB -:10CB400008BF00262BD0E06890F8691099B90AE078 -:10CB500024010020B0F87C30032B24D3B0F87E10E1 -:10CB60001144491C1FE090F864200123062158302D -:10CB700002F017FD78B1E1680020B1F87620B1F835 -:10CB800074108B1C9A4203D3501A801E18BF401E8B -:10CB9000B04238BF86B2002E1CBF701E86B2E0685D -:10CBA000B0F8CC103144A0F8C810A1E7B0F8DE10FE -:10CBB000B0F8CE201144A0F8DE10E06890F86611BD -:10CBC00039B990F8662001231946583002F0E9FC83 -:10CBD00038B1E068B0F88010B0F8CE201144A0F869 -:10CBE0008010E06890F8863033B1B0F88210B0F869 -:10CBF000CE201144A0F8821090F98AC0BCF1000F39 -:10CC000006DDB0F88810B0F8CE201144A0F88810E6 -:10CC10003D22B9F1000F18BF80F873204DD1217863 -:10CC2000022910D0012908BF90F8681143D061781B -:10CC300039B380F8727011F0140F18BF1E210CD098 -:10CC400080F8731055E090F8C410062905BF90F8DD -:10CC5000C3100229162106212DE011F0080F18BF7C -:10CC600080F8732045D111F0200F18BF2321E7D1A0 -:10CC700011F0030F08BFFFDF2A20E16881F873007D -:10CC800033E02BB1B0F88210B0F88420914211D279 -:10CC9000BCF1000F05DDB0F88810B0F88420914297 -:10CCA00008D2B0F88020B0F87E108A4208D390F8FD -:10CCB00066212AB1222180F8731080F8727018E082 -:10CCC00090F867203AB1B0F87C208A4228BF80F8FB -:10CCD0007380F2D209E0B0F87C10062905D33E211A -:10CCE00080F8731080F8727003E0E06890F87210BA -:10CCF00079B1E06880F8635080F8645080F867503C -:10CD000090F8D610002914BF02210321FCF723FC60 -:10CD100002E00021FCF71FFCE06880F8D650BDE877 -:10CD2000F047F8F7F0BBF949024648788B7818438A -:10CD30000ED10846C0684AB1097911F0080F03D036 -:10CD400090F86600082803D001207047FCF74FBB1D -:10CD5000002070472DE9F041EC4C05460E46A088B6 -:10CD60002843A08015F0020F04D015F0010F18BF62 -:10CD7000FFDF266115F0010F4FF000084FF00107AB -:10CD80001CD03046666103F01CF8062802D00B2840 -:10CD90000BD013E0E06890F8641017290ED1002141 -:10CDA000C0E9261180F8687008E0E06890F8641027 -:10CDB000112904BF80F8688080F88C7015F0020F8C -:10CDC00018D02069C078052802D00B280BD011E0BC -:10CDD000E06890F8641015290CD10021C0E92811F1 -:10CDE00080F8697006E0E06890F86410102908BFC8 -:10CDF00080F8698015F0800F1CBF0820A070BDE886 -:10CE0000F0812DE9F84FC14C00254FF00108A580B5 -:10CE10006570A5702570E06068F30709074680F823 -:10CE2000D6800088F3F736FF5FEA000A08BFFFDF0D -:10CE3000E0680088F8F72FFBE0680088F8F751FBFE -:10CE4000E068B0F8CA1071B190F8C310FF290FD193 -:10CE500090F8661191B190F8662001231946583078 -:10CE600002F09FFB98B1E06890F8C300FF2805D05E -:10CE7000E06890F8C30000BFFFF798FAD4F80CC040 -:10CE80009CF8D700002818BFE5801ED10FE0E068AD -:10CE9000A0F8805090F8671180F8C410002102209B -:10CEA000FFF76BFAE06880F8D5500220E4E79CF8C1 -:10CEB000960138B9BCF82000BCF80410884288BF3D -:10CEC000E08002D8BCF80400E080BCF8CE00401E30 -:10CED00086B2BCF8D0003044ACF8D0009CF8D40046 -:10CEE00000281CBFACF8D2508CF8D45004D1BCF848 -:10CEF000D2003044ACF8D200BCF87C003044ACF82E -:10CF00007C009CF8690040B99CF86420012306214C -:10CF10000CF1580002F045FB28B1E068B0F874103D -:10CF20003144A0F87410E068B0F8CA1001299CBF21 -:10CF3000491CA0F8CA10002E18BF80F8DC5090F8E9 -:10CF4000D510A1B1B0F8D000E18888420FD2504688 -:10CF5000F3F78CF858B1E06890F8611139B1B0F886 -:10CF6000D210B0F86201814228BF00F094FFE2685D -:10CF700082F8D55092F864000B2818BF0C2817D1FE -:10CF8000B2F85810B2F87C31C91A09B200290FDB87 -:10CF900002F5BF7102F1080004F053FF0221E068BE -:10CFA00001F0FEFEE06880F8645080F8968048E06A -:10CFB000252824D1B2F85800B2F87C11401A00B2EA -:10CFC00000281CDB92F8921192F87E01002808BF1D -:10CFD00092F8510082F8510092F87F01002808BFB2 -:10CFE00092F8520082F8520000291CBF0020FEF780 -:10CFF0005FFCE06880F8645080F87B5021E092F894 -:10D00000630025281DD1B2F85800B2F87C11401AEF -:10D0100000B2002815DB92F87E01002808BF92F8C4 -:10D02000510082F8510092F87F01002808BF92F861 -:10D03000520082F852000020FEF73AFCE06880F8C7 -:10D040006350E16801F15800B1F8CE2002F0B3F866 -:10D05000E06890F86111002918BFA0F8D2502C4860 -:10D0600000902C4B2C4A3946484600F053FEE068AD -:10D070000123052190F86420583002F092FA00282C -:10D0800008BFBDE8F88FBDE8F84F00F014BC00F011 -:10D09000E1BE10B50446B0F882214388B0F884118F -:10D0A000B0F886019A4201BFA3889942E38898426A -:10D0B0000FD02388A4F89A31A4F89C21A4F89E11DB -:10D0C000A4F8A001012084F896011048C078EEF77A -:10D0D00011FE0121204601F063FE002084F8640067 -:10D0E000032084F8670010BD70B5084C207910F05B -:10D0F000020F08BF70BD6078002818BF70BD20699E -:10D10000C178891E162980F06C8107E02401002077 -:10D110008DC7010027CD010055CD0100DFE801F0EA -:10D120000BF969758B1BF942F95BBE80F9F9F9F9C6 -:10D13000FAF7F6F5F4F3E0680123194690F8662053 -:10D14000583002F02EFA002818BF70BD0820E168A0 -:10D1500081F8660070BD02F0DFFEE16891F863209F -:10D160000A2A04BF91F8C220824205D1002081F82A -:10D17000630081F8860070BD91F8650010F0080F1B -:10D1800004BFFFDF70BD20F0080081F8650091F852 -:10D190008A00401E40B281F88A000028A8BF70BDF6 -:10D1A00000F0D8B8E06890F8650010F0010F08BFF3 -:10D1B000FFDFE16891F88A00401E40B281F88A00E2 -:10D1C0000028B8BFFFDFE06890F8651021F001018A -:10D1D00080F8651070BDE06890F86400102818BFF2 -:10D1E000FFDF0121E06880F88B10112180F86410C6 -:10D1F00070BDE06890F86400142818BFFFDF0121BB -:10D20000E06880F88B101521F0E7E06890F8640082 -:10D21000152818BFFFDF1720E16881F8640070BD92 -:10D22000E06890F86400152818BFFFDF1920E16856 -:10D2300081F8640070BDE06890F864001C2818BF95 -:10D24000FFDF0025E06880F88B5090F8A2010028ED -:10D2500018BFFFDFE06890F88C1041B180F88C5067 -:10D260000188A0F8A61180F8A4510D2108E00188DA -:10D27000A0F8A61180F8A451012180F8A8110C2172 -:10D2800080F8A2110088F3F7F3FCF3F753F9E07884 -:10D29000EEF730FDE06880F8645070BDE06890F80B -:10D2A0007A11042915D0E06890F8651011F0020F8A -:10D2B00008BF70BD90F88A10491E49B280F88A10E4 -:10D2C0000029B8BFFFDFE06890F8651021F0020187 -:10D2D0007EE790F8632001230021583002F061F9C5 -:10D2E000002808BFFFDFE06890F88E1011F0020FF1 -:10D2F00007BF062180F86310002180F8861018BF50 -:10D3000080F87A11CFE760E04FE035E024E011E0EB -:10D3100000E066E0E0680123002190F863205830C7 -:10D3200002F03FF9002808BFFFDF0E20E16881F816 -:10D33000630070BDE06890F8651021F0040180F88A -:10D34000651090F88A10491E49B280F88A100029A9 -:10D35000A8BF70BDFFDF70BDE0680123002190F819 -:10D360006320583002F01DF9002808BFFFDF1D20A0 -:10D37000E16881F8630070BDE06890F8650000F036 -:10D380003000102818BFFFDFE06890F8651021F02A -:10D39000100180F8651090F88A10491E49B280F893 -:10D3A0008A100029A8BF70BDD4E7E06801230021DE -:10D3B00090F86320583002F0F4F8002808BFFFDF2F -:10D3C0002020E16881F8630070BDE06890F8640097 -:10D3D00022281CBF0028FFDF2320E16881F86400B9 -:10D3E00070BDFFDF70BD10B5FE4CE16891F86500BF -:10D3F00010F0080F1EBF0120607010BD40F0080043 -:10D4000081F86500606902F0DCFCE16881F8C10028 -:10D410000020A1F8880091F88A00401C81F88A0059 -:10D4200010BD2DE9F041EF4CE06890F8C310FF29E2 -:10D4300006BF61780029BDE8F08190F866200123DD -:10D440001946583002F0ADF8002818BFBDE8F08149 -:10D45000E068002790F8661159B1A0F8807090F844 -:10D46000671180F8C410BDE8F04100210220FEF7EA -:10D4700084BF90F8642001230421583002F091F811 -:10D480005FEA00084FF002054FF001060CD0D4F817 -:10D490000CC09CF8640010287ED014287DD015287C -:10D4A0007CD01C287BD0E1E0E16891F8650010F0A9 -:10D4B000010F05D0BDE8F04101210920FEF75DBF55 -:10D4C00010F0020F0CD001210C20FEF756FFE0688F -:10D4D00090F88E1041F0010180F88E10BDE8F081C7 -:10D4E00010F0040F05D0BDE8F04101211320FEF734 -:10D4F00044BF10F0080F09D091F8C10081F8C400B2 -:10D50000BDE8F04101210720FEF737BF10F0100FF2 -:10D5100002D091F8890120B191F8640022287DD1D0 -:10D520009BE091F8880188B1B1F88A01A1F8400028 -:10D53000B1F88C01A1F84200B1F88E01A1F84400C5 -:10D54000B1F89001A1F8460081F88871FEF7E7F97B -:10D550000521E068FBF7FFFFE06890F84E10012915 -:10D5600008BF80F84E5014D00288A0F8BE21028E69 -:10D57000A0F8C021828EA0F8C221428E00F5CB71A6 -:10D58000A0F8C421C08E088681F82660E078EEF706 -:10D59000B1FB0121152003E006E00BE023E056E09B -:10D5A000BDE8F041FEF7E9BEBDE8F04101210B20E6 -:10D5B000FEF7E3BEF6F7D1FA0C2838BFBDE8F081DC -:10D5C0000821E068E830F6F7C9FA28B1E0680421DC -:10D5D000BC30F6F7C3FA00B9FFDFBDE8F041012126 -:10D5E0000420FEF7CABE9CF86901012817D0022862 -:10D5F00018BFBDE8F0819CF88C0000281CBF0620F5 -:10D600008CF8C4004FF0010114BF02200D20FEF77A -:10D61000B4FEE06880F86971BDE8F08126E09CF80E -:10D62000A201002818BFBDE8F0810CF1A803002278 -:10D630000CF1E0010CF5B57001F03BFF0121052074 -:10D64000FEF79BFEE06880F86971BDE8F081BDE8F7 -:10D65000F04101210620FEF790BE91F87B00C0B991 -:10D6600091F8920110B191F8930190B1E068012313 -:10D67000002190F86320583001F093FFC8B1E068B2 -:10D680000123042190F86420583001F08AFF30B162 -:10D690000FE0BDE8F04101211720FEF76EBEE06803 -:10D6A00090F87A0028B1BDE8F04100211220FEF781 -:10D6B00064BEE06890F863200A2A4DD0B8F1000FEC -:10D6C00018BFBDE8F08101230021583001F069FF47 -:10D6D00048B1E06890F87A11042904BF90F88E00F0 -:10D6E00010F0030F42D0E0680123002190F863207E -:10D6F000583001F056FF002808BFBDE8F081E0680F -:10D7000090F8881111B190F88911E1B390F8921155 -:10D71000002908BFBDE8F08190F89311002918BFD7 -:10D72000BDE8F08190F8642001230B21583001F00E -:10D7300038FF002818BFBDE8F081E06890F851205C -:10D7400090F89411012A71D0022A73D0042A14BFD0 -:10D75000082A042970D082E090F8C21080F8C41022 -:10D76000BDE8F04100210720FEF707BE00210C2094 -:10D77000FEF703FEE06890F88E1041F0010180F89A -:10D780008E10BDE8F081FFE7B0F88A11A0F84010D4 -:10D79000B0F88C11A0F84210B0F88E11A0F8441027 -:10D7A000B0F89011A0F8461080F8887190F86500E4 -:10D7B00010F0200F34D0FEF7B2F80521E068FBF737 -:10D7C000CAFEE06890F84E10012908BF80F84E505C -:10D7D00017D00288A0F8BE21028E00F5CB71A0F808 -:10D7E000C02101E024010020828EA0F8C221428ED7 -:10D7F000A0F8C421C08E088681F82660E078EEF794 -:10D8000079FA01211520FEF7B8FDE06890F865105F -:10D8100021F0200141F0100180F86510BDE8F08191 -:10D82000BDE8F04100211420FEF7A7BD012916D163 -:10D8300002E0FFE7022912D190F8522090F89511EA -:10D84000012A07D0022A08D0042A14BF082A042972 -:10D8500022D004E0012902D11EE002291CD090F858 -:10D86000642001230321583001F09BFE002818BFDB -:10D87000BDE8F081E0680123022190F8642058306F -:10D8800001F08FFE002818BFBDE8F0810021BDE83F -:10D89000F0411620FEF771BDBDE8F0410020FEF713 -:10D8A00007B8000030B5FF4C05462078002818BFA7 -:10D8B000FFDFA57230BDFB49012048727047FA486E -:10D8C00000B502784168406801F1580C91F8633066 -:10D8D00090F85100252B1CBF9CF80CC0BCF1250F03 -:10D8E00017D0202B18BF212B38D0BCF1230F18BF25 -:10D8F00000BD002A08BF00BD91F8942191F8501096 -:10D90000114011F0010F44D0082818BF04284CD052 -:10D910004EE08AB191F87E11002908BF00BD0828A9 -:10D9200018BF042841D0082918BF04293DD0012878 -:10D9300018BF01293CD036E091F8E810002908BF53 -:10D9400000BD082818BF04282FD0082918BF0429B3 -:10D950002BD0012818BF01292AD024E0BCF1230FC5 -:10D96000C7D0002A08BF00BD91F8941111F0010F33 -:10D9700004D0082818BF042817D019E011F0020FAE -:10D9800008BF00BD082818BF04280ED001280FD0FA -:10D9900009E011F0020F08BF00BD082818BF0428D5 -:10D9A00003D0012804D0022000BDFFDF082000BD05 -:10D9B000012000BD2DE9F14FBB4E4FF0010831466B -:10D9C0006FF00E0A4F686FF00D0B97F85210F88E3B -:10D9D00002290CBF0AEB90000BEBD00085B2788EC9 -:10D9E000A84238BF0546AF4C2946606BF2F77AFB78 -:10D9F000DFF8B892E06200281DBF0021A170A0628C -:10DA000084F8028008BFC4F8289030787068014616 -:10DA100000F1580890F86930428E91F85210C08E8B -:10DA200002290CBF0AEB90000BEBD00080B28242BF -:10DA300038BF1046002B1CBF001D80B2F6F756FE03 -:10DA400098F81100002838D008F15001974891E863 -:10DA50000E1000F5027A8AE80E10D8F86010C0F8AF -:10DA60002112D8F86410C0F8251200F58170F7F77C -:10DA7000B6F9307800280CBF0120002080F00101A9 -:10DA80008B480176D8E91212C0E90412C4F8289034 -:10DA90004946A581A0F58372F6F71BFD97F8520061 -:10DAA000012808BF002104D002281ABFFFDF00218F -:10DAB00001210120F6F71BFD04E0A06AF7F78FF9BA -:10DAC000F6F738FD009848B9012297F852309621B0 -:10DAD0001046F7F741F89620F7F7A9F997F82C00C8 -:10DAE000012808BFF7F726FA02202070BDE8F88F5A -:10DAF0002DE9F04FDFF8B08183B0414681464E6892 -:10DB0000A1F11400009096F85D004FF0000A012783 -:10DB100006F15804A1F1380570B3012873D002282A -:10DB200075D0032818BFFFDF7FD0686A082201780C -:10DB300021F008010170A37902EAC302114321F028 -:10DB400004010170E279042303EA8202114321F007 -:10DB50001001017094F805B0286BF2F795FA82462F -:10DB6000F7F7E3FCBBF1020F66D0BBF1010F67D002 -:10DB7000BBF1030F68D06CE0B6F834B0FFF79FFE3E -:10DB8000022819BF6FF00D0000EBDB006FF00E00F4 -:10DB900000EB9B0081B2308E884238BF0146ADF861 -:10DBA0000810A6F84C100098F7F79EFC38B1696A87 -:10DBB000EF70AA694FF48060904703201EE001AA2D -:10DBC00002A9286BF2F743F9686210B194F8331098 -:10DBD00021B10098F7F75CFC6771A6E79DF8041087 -:10DBE00031B9A0F800A080F802A0012102F03EF8AF -:10DBF000BDF80810686A02F01AFA0220607194E712 -:10DC000001E004E011E00098F7F742FC8DE7B6F878 -:10DC10004C00ADF8000001AA6946286BF2F717F92D -:10DC20006862002808BFFFDF7FE70098F7F75CFC19 -:10DC3000002808BFFFDF78E730EA0A0009D106E0D4 -:10DC400030EA0A0005D102E0BAF1000F01D001214B -:10DC500000E00021686A027842EA01110170217C2B -:10DC600000291CBF617901293CD004F150010F4803 -:10DC700091E80E1000F5027A8AE80E10216EC0F8C5 -:10DC80002112616EC0F8251200F58170F7F7A7F830 -:10DC900098F8000000280CBF0121002104480176FB -:10DCA00008E000003C01002074010020C00E0020AC -:10DCB000C8100020D4E91012C0E90412A0F5837145 -:10DCC0006A6AF6F706FC96F85100012808BF0021A1 -:10DCD00004D002281ABFFFDF002101210020F6F73F -:10DCE00006FC03E0F7F77BF8F6F724FCB9F1000F28 -:10DCF00006D196F85130012296210020F6F72CFF2C -:10DD0000AF71686A018829828078A8742F7003B087 -:10DD1000BDE8F08F2DE9F0471E46174681460C46B8 -:10DD2000FE4DDDF82080287828B9002F1CBF002E7A -:10DD3000B8F1000F00D1FFDFC5F82080C5E90E94CF -:10DD4000C5E9067600206872287268712871A8718A -:10DD5000E871F34EE870E881307804F158072088C4 -:10DD6000F2F798FF28632088F2F782FF6863F7F7DD -:10DD70002BF8F6F7DBFC04F11200F7F70EF804F1CC -:10DD80000E00F6F774FD307800280CBF0320012048 -:10DD9000F7F717F8787EF6F772FDF7F70CF830789A -:10DDA0006FF00E056FF00D09002830D0618EE08E07 -:10DDB00094F852407A7C022C0CBF05EB900009EBE2 -:10DDC000D00080B2814238BF0846002A1CBF001D27 -:10DDD00080B22146F6F78AFC3078002831D070688E -:10DDE00090F86001002818BFF6F7F2FC22460021E7 -:10DDF0000120F6F76DFE7068D0F8D800F6F7F2FF54 -:10DE00000120FFF7D7FDBDE8F047F6F7E5BF97F82B -:10DE10001080278EB4F834A0FFF751FD022814BFFC -:10DE200009EBDA0005EB9A0085B2AF4234BF384601 -:10DE30002846B8F1000F1CBF001D80B294F8514075 -:10DE4000C7E7002122460846F6F742FE0120FFF709 -:10DE50004FFED8E7B24810B501783838007831B1B4 -:10DE6000022818BFFFDFBDE81040F6F7ADBF01285C -:10DE700018BFFFDFF7E7A94810B50078022818BFE0 -:10DE8000FFDFBDE8104000F044BAA4488079704735 -:10DE9000A24840797047A1490120C87170472DE917 -:10DEA000F04706009E489D4D4FF0010740684FF037 -:10DEB000000800F15804A86A90F8019018BF012EDC -:10DEC00003D1696B03F0D0FA68706878A0B10128BB -:10DED00031D0022849D003281CBFFFDFBDE8F087FE -:10DEE000012E08BFBDE8F087686BF2F70CFBA87A3B -:10DEF000BDE8F047EDF7FEBE012E08D001224946ED -:10DF0000686BF2F74DF9022E08BFBDE8F087D4E93F -:10DF10001202411C42F10000C4E91210E07901280C -:10DF200003D100BF84F8078000E0E771A87ABDE85C -:10DF3000F047EDF7DFBE012E08D000224946686B9E -:10DF4000F2F72EF9022E08BFBDE8F087D4E91201DE -:10DF5000401C41F10001C4E91201E07901280CBF25 -:10DF600084F80780E771BDE8F087012E06D0686B62 -:10DF7000F2F7C9FA022E08BFBDE8F087D4E9120112 -:10DF8000401C41F10001C4E91201E0790128CCD123 -:10DF9000C8E72DE9F041624F4FF000083846A7F17D -:10DFA00038044068012600F158052078012818BF80 -:10DFB000FFDFA87850B185F80280E670A26941467B -:10DFC000042090473878002818BF2E71606A03211A -:10DFD000007831EA000004BFE878002805D1EE702F -:10DFE000616AE670A269022090470121002000F0DA -:10DFF000B1F918B1BDE8F04100F08BB9BDE8F041CE -:10E000000020D7E42DE9F84F454C83462046A4F183 -:10E0100038054068217800F1580A287800264FF02A -:10E020000109022818BFFFDFE88940F40070E88189 -:10E030002078676800283A48406890F868000090A7 -:10E040003C8EB7F83480FFF73AFC022807BF6FF028 -:10E050000E0000EB98006FF00D0000EBD80080B2CE -:10E06000844238BF2046009900291CBF001D80B2A1 -:10E0700097F85110F6F73AFB9AF81100BBF1000F30 -:10E0800000F0FA80F6F77CFAF6F76AFA90B99AF897 -:10E09000110078B1A86A417861B100789AF8071048 -:10E0A000C0F3C000884205D185F80490BDE8F84F60 -:10E0B00000F02FB9A86A1A4FB0460188A5F81310CE -:10E0C00080786875E88940F02000E8816E713878C2 -:10E0D0007868583000907C6894F82C00012818D19A -:10E0E000F6F71EFF2046009901F023FA88B1387830 -:10E0F000002878680CBF00F5867000F5EA7021886A -:10E1000041800099097A017180F80090A87AEDF7B2 -:10E11000F1FDA86A0078C0F3800003E03C01002014 -:10E12000740100209AF80610884237D03878786851 -:10E1300000F1580490F85D0060B3022848D000BF99 -:10E1400084F80580387840B12079414628B12171A2 -:10E1500085F80390AA6910209047E07898B184F878 -:10E160000380F7F7D0F9002808BFFFDF082085F803 -:10E170000390AA6900219047D4E91002411C42F1A2 -:10E180000000C4E91010A07901280CBF84F80680B3 -:10E1900084F80690E88940F48070E881A86A9AF8CB -:10E1A00007300178C1F3C0029A4252D13A787A68B6 -:10E1B00001F0030102F15804012918BF022935D0EA -:10E1C00003291CBF287A40F0040012D0287240E0D6 -:10E1D000286BF1F776FE002808BFFFDFD4E91002B4 -:10E1E000411C42F10000C4E91010A87AEDF782FD4D -:10E1F000A6E701F05CFDA8B184F80290E9894846E1 -:10E2000041F40061E981A96A85F80390AA69904701 -:10E21000E079012803D100BF84F8078019E084F871 -:10E22000079016E0287A40F01000CFE74078F8B168 -:10E23000E98941F40061E981A97851B9FB28F1D855 -:10E24000687A002808BF4E4603D08020AA690021C2 -:10E2500090475946012000F07DF858B39AF8110014 -:10E26000002818BFBBF1000F1BD0A87868B118E0D8 -:10E27000E0790128D3D1CFE7002818BFF6F7B9F924 -:10E28000E88940F04000E881E3E7A96AAA89487874 -:10E29000904288BF1046C21CE86A03F02DFCE86A71 -:10E2A000A862002E1CBF0020FFF7F9FDBDE8F84F63 -:10E2B00000F02FB8002E1CBF0120FFF7F0FD00205A -:10E2C000FFF716FC9AF81100002818BFBBF1000FE9 -:10E2D0000DD0A87858B9A96AAA894878904288BF11 -:10E2E0001046C21CE86A03F007FCE86AA862002E28 -:10E2F00008BFBDE8F88F0220BDE8F84FCFE5354AEA -:10E300001378526892F851200BB1FBF76ABAFAF70A -:10E310001AB970B52F4900254C68F6F7B7FDF6F726 -:10E32000A9FDF6F7DBFCF6F73EFDF6F703F9F6F785 -:10E3300053FD94F82C00012808BFF6F7F1FD264C98 -:10E340000021A269E0899047226A217A20799047CA -:10E35000257070BD70B5204C0546002908BF012D01 -:10E3600005D16079401CC0B26071012830D8E169E4 -:10E370002846884700282BD0E179184839B1012D6B -:10E3800001BF41780029017811F0100F20D0217AC7 -:10E39000F1B910490978002918BF002102D029439A -:10E3A00004D013E0012D18BF0121F8D10C490978E0 -:10E3B00011F0100F04BF007810F0100F08D0E078B3 -:10E3C00030B9A07810B111F0100F01D0002070BD4D -:10E3D000012070BD740100203C0100204F0100208D -:10E3E0004C01002010B540F2C311F94803F0FBFBCB -:10E3F000FF220821F748E4F7FAFDF74800214170B1 -:10E400004FF46171418010BD2DE9F0410F46064681 -:10E4100000F03FFBEE4C102817D004EBC00191F840 -:10E420004A1111F0010F1CBF0120BDE8F081617895 -:10E4300008291FD2617804EBC000491C61700121DA -:10E4400080F84A110846BDE8F0816178082911D2A8 -:10E450002578681C207004EBC5083868C8F84401AA -:10E46000B888A8F84801102D28BFFFDF88F843615D -:10E470002846DFE70020BDE8F081D5480178491E35 -:10E480004BB2002BB8BF704770B4002500EBC3013E -:10E4900091F84A1111F0010F3BD04278D9B2521EC7 -:10E4A000427000EBC10282F84A5190F802C000228B -:10E4B000BCF1000F0BD9841894F803618E4202D18D -:10E4C000102A26D103E0521CD2B29445F3D8027828 -:10E4D000521ED2B202708A421BD000EBC20200EB85 -:10E4E000C10CD2F84341CCF84341D2F84721CCF8D3 -:10E4F0004721847890F800C00022002C09D98618A2 -:10E5000096F8036166450AD1102A1CBF024482F8BE -:10E510000311591E4BB2002BB8DA70BC7047521C65 -:10E52000D2B29442EBD8F4E72DE9F0471F4690466B -:10E530000E46814600F0ADFAA54C0546102830D0B5 -:10E54000A2780021002A0ED9631893F80331834280 -:10E5500005D110291CBF1220BDE8F08703E0491C3B -:10E56000C9B28A42F0D8082A2FD2102D1CD0A67822 -:10E570001022701CA07004EB061909F1030041463B -:10E5800000F086FF09F183001022394600F080FF79 -:10E59000A019002180F8035180F83B110846BDE81E -:10E5A000F087A278082A10D22578681C207004EB26 -:10E5B000C50A3068CAF84401B088AAF84801102D8D -:10E5C00028BFFFDF8AF84391D1E70720BDE8F08735 -:10E5D00070B47F488178491E4BB2002BBCBF70BC21 -:10E5E000704700BF817803F0FF0C491ECAB28270E9 -:10E5F00050FA83F191F8031194453ED000EB0215D7 -:10E6000000EB0C14D5F80360C4F80360D5F807607C -:10E61000C4F80760D5F80B60C4F80B60D5F80F603C -:10E62000C4F80F60D5F88360C4F88360D5F88760BC -:10E63000C4F88760D5F88B60C4F88B60D5F88F502C -:10E64000C4F88F50851800EB0C0402EB420295F8D9 -:10E6500003610CEB4C0C00EB420284F8036100EB0D -:10E660004C0CD2F80B61CCF80B61B2F80F21ACF86E -:10E670000F2195F83B2184F83B2100EBC10292F871 -:10E680004A2112F0010F33D190F802C00022BCF1F0 -:10E69000000F0BD9841894F803518D4202D1102A2F -:10E6A00026D103E0521CD2B29445F3D80278521E10 -:10E6B000D2B202708A421BD000EBC20200EBC10C46 -:10E6C000D2F84341CCF84341D2F84721CCF8472156 -:10E6D000847890F800C00022002C09D9851895F89C -:10E6E000035165450BD1102A1CBF024482F8031167 -:10E6F000591E4BB2002BBFF675AF70BC7047521C51 -:10E70000D2B29442EAD8F3E73349487070473248AE -:10E710004078704738B14AF2B811884203D82E4980 -:10E72000488001207047002070472B484088704780 -:10E7300010B500F0AEF9102814D0254A014600208B -:10E7400092F802C0BCF1000F0CD9131893F80331F2 -:10E750008B4203D1102818BF10BD03E0401CC0B28B -:10E760008445F2D8082010BD19498A78824286BFB4 -:10E7700001EB001083300020704715498A788242EF -:10E7800086BF01EB0010C01C00207047104B93F8AF -:10E7900002C084459CBF00207047184490F80301D4 -:10E7A00003EBC00090F843310B70D0F844111160B6 -:10E7B000B0F84801908001207047054A114491F853 -:10E7C000032105490A7002684A6080880881704701 -:10E7D000F0100020860100207C01002010B5F5F724 -:10E7E00027FE002804BFFF2010BDBDE81040F5F74C -:10E7F00045BEFE498A7882429CBF0020704708448B -:10E8000090F8030101EBC00090F84A0100F001000C -:10E8100070472DE9F047F54F0026B04638780028BC -:10E8200086BF4FF0080ADFF8C893BDE8F08700BF45 -:10E8300007EBC80505F5A27195F8430100F029F929 -:10E84000102808BF544610D0B978002400290BD9ED -:10E850003A1992F80321824202D1102C05D103E02B -:10E86000621CD4B2A142F3D80824B878A04286BF73 -:10E8700007EB0410C01C002095F84A1111F0010F9D -:10E8800016D050B1082C04D2391991F83B11012946 -:10E8900003D0102100F0D9FD50B109F806403046F0 -:10E8A000731C95F8432105F5A271DEB2F5F7A8FFB8 -:10E8B00008F1010000F0FF0838784045B8D8BDE8FD -:10E8C000F0872DE9F041C94C00263546A078002894 -:10E8D0008CBFC74FBDE8F0816119C0B291F80381C8 -:10E8E000A84286BF04EB0510C01C002091F83B1124 -:10E8F000012903D0102100F0A8FD58B104EBC80095 -:10E90000BD5590F8432100F5A2713046731CDEB26C -:10E91000F5F776FF681CC5B2A078A842DCD8BDE840 -:10E92000F08110B5F5F79BFF002804BF082010BD4B -:10E93000F5F799FFAE49085C10BDAE4910B54978AE -:10E9400041B1AA4B997829B1C21CD81CF5F70DFD2D -:10E95000012010BD002010BDA44A01EB410102EBD3 -:10E9600041010268C1F80B218088A1F80F017047AE -:10E970002DE9F0419D4D07460024A878002898BF56 -:10E98000BDE8F081C0B2A04213D905EB041010F12C -:10E9900083060ED01021304600F057FD48B904EB35 -:10E9A000440005EB400000F20B113A463046F6F702 -:10E9B0003AFE601CC4B2A878A042E3D8BDE8F0815A -:10E9C000014610228C4800F063BD8B48704770B53B -:10E9D000864D0446A878A04206D905EB0410102104 -:10E9E000833000F032FD08B1002070BD04EB44001C -:10E9F00005EB400000F20B1070BD7C498A78824222 -:10EA000006D9084490F83B01002804BF0120704754 -:10EA1000002070472DE9F0410E46074615460621B5 -:10EA2000304600F012FD714C98B1A17871B104F537 -:10EA30009D7011F0010F18BF00F8015FA17849081F -:10EA400004D0457000F8025F491EFAD10120BDE8EC -:10EA5000F0813846314600F01CF8102816D0A37813 -:10EA60000021002B12D9621892F80321824209D1A9 -:10EA7000102918BF082909D0601880F83B510120DF -:10EA8000BDE8F081491CC9B28B42ECD80020BDE83A -:10EA9000F0812DE9F041554D0646002428780F46B7 -:10EAA000002811D905EBC40090F84311B14206D1FA -:10EAB0000622394600F5A27002F0F2FF38B1601C60 -:10EAC000C4B22878A042EDD81020BDE8F0812046DD -:10EAD000BDE8F081454910B44A7801EBC003521EED -:10EAE0004A70002283F84A2191F802C0BCF1000F5D -:10EAF0000DD98B1893F80341844204D1102A1CBF0E -:10EB000010BC704703E0521CD2B29445F1D80A7889 -:10EB1000521ED2B20A70824204BF10BC704701EB91 -:10EB2000C00301EBC202D2F843C1C3F843C1D2F81B -:10EB30004721C3F847218C7891F800C00022002CAF -:10EB40009CBF10BC70478B1893F80331634506D106 -:10EB5000102A1CBF114481F8030110BC7047521CDD -:10EB6000D2B29442EFD810BC704770B41F490D1850 -:10EB70008A78521ED3B28B7095F80321984247D001 -:10EB800001EB001401EB031C00EB4000DCF8036018 -:10EB9000C4F80360DCF80760C4F80760DCF80B60B9 -:10EBA000C4F80B60DCF80F60C4F80F60DCF8836019 -:10EBB000C4F88360DCF88760C4F88760DCF88B6099 -:10EBC000C4F88B60DCF88FC0C4F88FC001EB030C75 -:10EBD00003EB43039CF8034101EB430385F8034136 -:10EBE00001EB4000D3F80B4108E00000F0100020DA -:10EBF000860100207C010020B3120020C0F80B41E8 -:10EC0000B3F80F31A0F80F319CF83B0185F83B01B8 -:10EC100001EBC20090F84A0110F0010F1CBF70BC5C -:10EC2000704700208C78002C0DD90B1893F803C185 -:10EC3000944504D110281CBF70BC704703E0401CF1 -:10EC4000C0B28442F1D80878401EC0B20870904229 -:10EC500004BF70BC704701EBC20301EBC000D0F8E9 -:10EC600043C1C3F843C1D0F84701C3F847018C78CA -:10EC70000B780020002C9CBF70BC704701EB000C8F -:10EC80009CF803C19C4506D110281CBF084480F89D -:10EC9000032170BC7047401CC0B28442EED870BCE7 -:10ECA0007047000010B50A7B02F01F020A730022B1 -:10ECB000C2758B181B7A03F0010C5B0803F001048A -:10ECC000A4445B0803F00104A4445B0803F00104BE -:10ECD000A4445B0803F0010464444FEA530C0CF0B5 -:10ECE000010323444FEA5C0C0CF00104234403EBC2 -:10ECF0005C0300EB020C521C8CF8123090F817C029 -:10ED0000D2B26344C375052AD3D3D8B2252888BFAD -:10ED1000FFDF10BD00238383028401EBC202521E79 -:10ED2000B2FBF1F1C183704770B46FF01F02010CA8 -:10ED300002EA90251F23A1F5AA4054381CBFA1F573 -:10ED4000AA40B0F1550009D0A1F52850AA381EBF3D -:10ED5000A1F52A40B0F1AA00012000D100204FF017 -:10ED6000000C62464FEA0C048CEA0106F643164397 -:10ED7000B6F1FF3F11D005F001064FEA5C0C4CEAFA -:10ED8000C63C03F0010652086D085B08641C42EAA9 -:10ED9000C632162CE8D370BC704770BC0020704798 -:10EDA0002DE9F04701270025044603290FD04FF431 -:10EDB000FA43002972D0012900F0F880022918BF17 -:10EDC000BDE8F0870146BDE8F04758306AE704F136 -:10EDD00058067021304602F028FFB571F571F572C2 -:10EDE0003573B573F573757135767576F52086F8DC -:10EDF0003C00412086F83D00FF2086F86B00A4F817 -:10EE0000C850A4F8CA50A4F8CC50A4F8CE50A4F826 -:10EE1000D050A4F8D25084F8D55084F8D750A4F834 -:10EE2000DE5084F8DC50A4F8F050A4F8F25084F8D6 -:10EE30002C50258484F8517084F852704FF4486047 -:10EE400060801B21218761874FF4A470E087A08731 -:10EE500021866186E086A086A4F84410A4F84600C6 -:10EE6000A4F84010A4F84200A4F84810A4F84A10EE -:10EE7000A4F84C10677384F8885184F8895184F899 -:10EE8000925184F8935184F8615184F8665184F862 -:10EE9000695184F87A51BDE8F087FFE7A4F8DE50A5 -:10EEA00084F8D6506088FE490144B1FBF0F1A4F823 -:10EEB00076104BF68031A4F87810E288A4F87C50E4 -:10EEC000B4F880C0D2000CFB00FCB2FBF0F29CFB5B -:10EED000F0FC521CA4F880C092B202FB00FC04F1CA -:10EEE0005801A4F87E20BCF5C84FC4BF521ECA8486 -:10EEF000B3FBF0F2521C8A8500F5802202F5EE3257 -:10EF0000531EB3FBF0F2CA838B8B03FB00F2B2FB00 -:10EF1000F0F08883214604F15800FFF7C3FED4F8CF -:10EF20000E106FF01F02080C02EA9126A0F5AA410C -:10EF30004FF01F0C54391CBFA0F5AA41B1F1550187 -:10EF40000AD0A0F52851AA391EBFA0F52A41B1F177 -:10EF5000AA014FF0010901D14FF00009002211462A -:10EF60004FEA020382EA00086FEA080848EA01084B -:10EF7000B8F1FF3F16D006F00108520842EAC83245 -:10EF800049080CF0010876085B1C41EAC8314FEAD9 -:10EF90005C0C162BE6D3B9F1000F1CBF84F860514E -:10EFA000BDE8F08784F86071BDE8F087A4F8DE5012 -:10EFB000B4F88221B4F88611B4F802C004F1580004 -:10EFC000A4F87C50B4F88040C90004FB0CF4B1FBF9 -:10EFD000F2F194FBF2F4491C048589B201FB02F4BE -:10EFE000C184B4F5C84FC4BF491EC184B3FBF2F15C -:10EFF000491C8185018C02EBC101491EB1FBF2F174 -:10F00000C183818B01FB0CF1B1FBF2F18183BDE87F -:10F01000F08770B50025044603290DD04FF4FA425D -:10F02000002958D001297DD0022918BF70BD0146A2 -:10F03000BDE87040583035E604F15806702130467E -:10F0400002F0F3FDB571F571F5723573B573F573B3 -:10F05000757135767576F52086F83C00412086F886 -:10F060003D00FF2086F86B00A4F8D050202084F8E3 -:10F07000D20084F8C850C4F8CC50012284F82C5037 -:10F0800084F8512084F852201B20208760874FF499 -:10F09000A471E187A18720866086E186A186A4F815 -:10F0A0004400A4F84610A4F84000A4F84210A4F8C4 -:10F0B0004800A4F84A00A4F84C00627384F8FC509D -:10F0C00084F8FD5084F8065184F8075184F8EC5018 -:10F0D00084F8F85070BD608871490144B1FBF0F1CB -:10F0E000A4F876104BF68031A4F87810E388A4F8E1 -:10F0F0007C50B4F880C0DB000CFB00FCB3FBF0F3E9 -:10F100009CFBF0FC5B1CA4F880C09BB203FB00FCE2 -:10F1100004F15801A4F87E30BCF5C84FC4BF5B1E93 -:10F12000CB8400E017E0B2FBF0F2521C8A8500F5B8 -:10F13000802202F5EE32531EB3FBF0F2CA838B8BB2 -:10F1400003FB00F2B2FBF0F08883214604F1580083 -:10F15000BDE87040A6E5D4F8F030B4F802C004F180 -:10F1600058005989DB89A4F87C50B4F88040DB0052 -:10F1700004FB0CF4B3FBF1F394FBF1F45B1C04858A -:10F180009BB203FB01F4C384B4F5C84FC4BF5B1E3C -:10F19000C384B2FBF1F2521C8285028C01EBC202E5 -:10F1A000521EB2FBF1F2C283828B02FB0CF2B2FB65 -:10F1B000F1F1818370BD2DE9F003C47D0CB1252CE4 -:10F1C00003D9BDE8F00312207047002A02BF0020D7 -:10F1D000BDE8F003704791F80DC01F260123314DA3 -:10F1E0004FF00008BCF1000F7AD0BCF1010F1EBF38 -:10F1F0001F20BDE8F0037047B0F800C00A7C8F7B89 -:10F2000091F80F907A404F7C87EA090742EA07227B -:10F2100082EA0C0C5FF000070CF0FF094FEA1C2C8F -:10F2200099FAA9F99CFAACFC4FEA19694FEA1C6CEF -:10F2300049EA0C2C0CEB0C1C7F1C9444FFB21FFA07 -:10F240008CFC032FE8D38CEA020C164F0022ECFB57 -:10F25000057212096FF0240502FB05C2D2B201EB60 -:10F26000D207027602F007053F7A03FA05F52F422E -:10F2700018BF42767ED104FB0CF2120C521CD2B2A3 -:10F280005FF0000400EB040C9CF812C094453CBFF6 -:10F29000A2EB0C02D2B218D34FF0000C0D1903E010 -:10F2A000FFDB050053E4B36E95F8085003FA0CF742 -:10F2B0003D421CBF521ED2B2002A6AD00CF1010C92 -:10F2C0000CF0FF0CBCF1080FF0D304F1010C0CF0B2 -:10F2D000FF04052CD6D33046BDE8F0037047FFE7A6 -:10F2E00090F818C00C7E474604FB02C2FB4C4FF05E -:10F2F000000CE2FB054C4FEA1C1C6FF024040CFBD5 -:10F300000422D2B201EBD204027602F0070C247A76 -:10F3100003FA0CFC14EA0C0F1FBF42764046BDE80E -:10F32000F003704790F817C0B2FBFCF40CFB1422FA -:10F33000521CD2B25FF0000400EB040C9CF812C027 -:10F3400094453CBFA2EB0C02D2B212D30D194FF080 -:10F35000000C2D7A03FA0CF815EA080F1CBF521E98 -:10F36000D2B27AB10CF1010C0CF0FF0CBCF1080F19 -:10F37000F0D300E010E004F1010C0CF0FF04052CC8 -:10F38000DAD3A8E70CEBC40141763846BDE8F003B8 -:10F3900070470CEBC40141764046BDE8F00370476E -:10F3A000CF4A016812681140CE4A126811430160C9 -:10F3B000704730B4CC49CA4B00244FF0010C0A7896 -:10F3C000521CD2B20A70202A08BF0C700D781A683D -:10F3D0000CFA05F52A42F2D0097802680CFA01F11C -:10F3E0005140016030BC7047017931F01F0113BFFB -:10F3F000002000221146704710B4435C491C03F002 -:10F40000010C5B0803F00104A4445B0803F0010451 -:10F41000A4445B0803F00104A4445B0803F0010466 -:10F42000A4445B0803F001045B08A44403F0010456 -:10F43000A4440CEB53031A44D2B20529DDDB012AA4 -:10F440008CBF0120002010BC704730B40022A1F115 -:10F45000010CBCF1000F11DD431E11F0010F08BFBC -:10F4600013F8012F5C785FEA6C0C07D013F8025F89 -:10F4700022435C782A43BCF1010CF7D1491E5CBFE2 -:10F48000405C0243002A0CBF0120002030BC7047C2 -:10F49000130008BF704710B401EB030CD41A1CF81A -:10F4A00001CC5B1E00F804C013F0FF03F4D110BCC4 -:10F4B0007047F0B58DB0164610251C466A46AC461E -:10F4C00000EB0C03A5EB0C0713F8013CD355ACF192 -:10F4D000010313F0FF0CF3D11546103210208446BF -:10F4E0000B18ACEB000713F8013C401ED35510F08D -:10F4F000FF00F5D1284601F033FA86B1102005F15E -:10F50000200201461318A1EB000C13F8013C401E29 -:10F5100004F80C3010F0FF00F4D10DB0F0BD0898E5 -:10F520002060099860600A98A0600B98E0600DB0B8 -:10F53000F0BD38B505460C466846F5F706FD0028CF -:10F5400008BF38BD9DF90020227294F909100020EF -:10F55000511A48BF494295F82D308B42C8BF38BD7B -:10F56000FF2B08BF38BDA17A491CC9B2A17295F81A -:10F570002E30994203D8617A7F2918BF38BD627254 -:10F580000020A072012038BD0C2818BF0B2806D01F -:10F590000D281CBF2038062884BF0020704701209A -:10F5A00070470C295AD2DFE801F006090E13161B2A -:10F5B000323C4153484E002A52D04FE0072A18BF30 -:10F5C000082A4DD04AE00C2A18BF0B2A48D045E043 -:10F5D0000D2A45D042E0A2F10F000D2840D93DE0B0 -:10F5E00023B1A2F110000C283AD937E0122A18BF33 -:10F5F000112A35D090F8340020B1122A2ED31B2ABC -:10F600002ED92BE0162A29D31B2A29D926E0A2F1CC -:10F610000F01032924D990F83400F8B11C2A1FD90E -:10F620001CE0002B08BF042A18D119E013B1062AE8 -:10F6300016D013E0012A11D112E01D2A1CBF1E2A88 -:10F640001F2A0DD00AE0A2F12000062808D905E003 -:10F6500013B10E2A04D001E0052A01D00020704722 -:10F66000012070472DE9F04187680D460446204689 -:10F67000F3F7CCFB98B1D5B13846A168F3F709FF91 -:10F68000002814DD2844401EB0FBF5F606FB05F10A -:10F690003846F2F7F8FEA0603046BDE8F081F3F797 -:10F6A000E7F94FF4E661F2F7EEFEA060DFE7002035 -:10F6B000BDE8F081904228BF704770B50446101B2A -:10F6C000642838BF642025188D4205D8F3F715FF4C -:10F6D00000281CBF284670BD204670BD53E4B36EA1 -:10F6E00064230200682302008E01002091F851304B -:10F6F0000A8E022B07BF92003C32D200703292B2C7 -:10F700008B8E934238BF1A464B8E91F852C0BCF193 -:10F71000020F07BF9B003C33DB0070339BB2C98EE6 -:10F72000994238BF0B4600280CBF01210021D01898 -:10F730009830002918BF04210844704730B48388EA -:10F74000B0F808C003EB0C049834002A18BF042258 -:10F7500022444C6A944224BF30BC7047121B521C96 -:10F7600052089B1A9BB2ACEB0202838092B20281D8 -:10F7700091F851506FF00E0C6FF00D04022D0CBF7C -:10F780000CEB930304EBD303438091F8521002294E -:10F790000CBF0CEB920104EBD201C18030BC70476E -:10F7A00010F0010F1CBF0120704710F0020F1CBFAA -:10F7B0000220704710F0040018BF082070472DE9A0 -:10F7C000F0410546174688460126084600F001FC30 -:10F7D0000446404600F001FC034610F0010F18BF3C -:10F7E000012008D113F0020F18BF022003D113F03B -:10F7F000040018BF082014F0010F18BF4FF0010CCF -:10F8000021D000BF50EA0C0108BF002613F0030FFF -:10F8100008BF002014F0030F08BF4FF0000C95F84C -:10F820005110814208BF0020387095F85210614590 -:10F8300008BF4FF0000C87F801C0002808BFBCF1DA -:10F84000000F1CD10DE014F0020F18BF4FF0020C96 -:10F85000D8D114F0040F14BF4FF0080C4FF0000C77 -:10F86000D0E7404600F0BFFBB5F85810401A00B290 -:10F8700047F6FE71884201DC002800DC0026304695 -:10F88000BDE8F08101281CBF02280020704718B491 -:10F89000CBB2C1F3072CC1B2C0F30720012B07D0B4 -:10F8A000022B09D0042B08BFBCF1040F23D006E0C3 -:10F8B000BCF1010F03D11EE0BCF1020F1BD00129E6 -:10F8C00006D0022907D0042908BF042813D004E079 -:10F8D000012802D10FE002280DD001EA0C0161F3EA -:10F8E0000702184060F30F22D0B210F0020F18BFC9 -:10F8F00002200BD106E0084003EA0C01084060F347 -:10F900000702EFE710F0010018BF01208DF800009A -:10F91000C2F3072010F0020F18BF022003D110F02D -:10F92000010018BF01208DF80100BDF8000018BCCF -:10F930007047162A10D12A220C2818BF0D280FD084 -:10F940004FF0230C20280DD031B10878012818BFC2 -:10F95000002805D0162805D00020704701207047E8 -:10F960001A70FBE783F800C0F8E70000282102F0D6 -:10F970003AB930B50546007801F00F0220F00F00CB -:10F980001043287007290BD2DFE801F004060406B3 -:10F9900004080400062405E00C2403E0222401E00E -:10F9A0000024FFDF687820F03F002043687030BDFE -:10F9B000007800F00F0070470A68C0F803208988BB -:10F9C000A0F807107047D0F803200A60B0F80700CD -:10F9D000888070470A68C0F809208988A0F80D104F -:10F9E0007047D0F809200A60B0F80D008880704791 -:10F9F0000278202322F0200203EA41111143017012 -:10FA000070470278402322F0400203EA811111433B -:10FA1000017070470078C0F380107047027880232F -:10FA200022F0800203EAC11111430170704700788F -:10FA3000C0097047D0F80320C1F80920B0F80720AA -:10FA4000A1F80D200A7822F080020A70007880095F -:10FA500042EAC0100870704770B515460E4604465D -:10FA60001F2A88BFFFDF2A46314604F1090002F051 -:10FA700043F86078A91D20F03F0001F03F010843E2 -:10FA8000607070BD70B5054640780E4600F03F04CA -:10FA9000062C38BFFFDFA01FC4B21F2C88BF1F2455 -:10FAA000224605F10901304602F026F8204670BDD5 -:10FAB00070B515460E4604461F2A88BFFFDF2A464A -:10FAC000314604F1090002F017F86078A91D20F012 -:10FAD0003F0001F03F010843607070BD70B50546FE -:10FAE00040780E4600F03F04062C38BFFFDFA01F11 -:10FAF000C4B21F2C88BFFFDF224605F10901304642 -:10FB000001F0FAFF204670BD0968C0F80F10704779 -:10FB10000A88A0F813208978417570474176090A50 -:10FB200081767047C176090A017770474177090AE3 -:10FB300081777047C175090A0176704781757047F2 -:10FB400090F8242001F01F0122F01F02114380F8D9 -:10FB500024107047072988BF072190F82420E0234C -:10FB600022F0E00203EA4111114380F824107047AB -:10FB70001F3002F066B94178007801F03F0110F0C3 -:10FB80000F0006D0012808D0022809D006280BD083 -:10FB90000FE0881F1F280AD90BE00C2909D106E0C5 -:10FBA000881F1F2803D904E0881F1F2801D80120BF -:10FBB0007047002070474178007801F03F0100F065 -:10FBC0000F00042805D1062903D325299CBF012055 -:10FBD00070470020704710B4017801F00F0103292D -:10FBE00022D0052925D14478B0F81910B0F81BC0EF -:10FBF000B0F81730827D04F03F04222C19D1062979 -:10FC000017D3B1F5486F98BFBCF5FA7F11D282B116 -:10FC1000082A98BF8A420CD28B429CBFB0F81D00C4 -:10FC2000B0F5486F05D807E0407800F03F000C2899 -:10FC300002D010BC0020704710BC01207047222168 -:10FC400001F0D1BF00B5027801F0030322F00302F6 -:10FC50001A43027000224270012914BF022900BD1C -:10FC6000032912BFFFDF0121417000BD01F0030332 -:10FC700000B5027822F003021A430270002242709B -:10FC8000012914BF022900BD032912BFFFDF012192 -:10FC9000417000BD007800F0030070470278102327 -:10FCA00022F0100203EA01111143017070474178FC -:10FCB000F9B1C078192850D2DFE800F00D10131602 -:10FCC000191C1F2225282B2E31344F4F4F4C373A09 -:10FCD0003D40434649000C2941D042E008293ED02E -:10FCE0003FE002293BD03CE0172938D039E00D290C -:10FCF00035D036E0012932D033E001292FD030E071 -:10FD000002292CD02DE0092929D02AE0092926D062 -:10FD100027E0012923D024E0012920D021E0062971 -:10FD20001DD01EE002291AD01BE0012917D018E0CF -:10FD3000012914D015E0092911D012E009290ED0AB -:10FD40000FE003290BD00CE0032908D009E00529B6 -:10FD500005D006E0032902D003E0FB2901D80120E9 -:10FD600070470020704730B50546C170192924D26C -:10FD7000DFE801F00D0F11131517171119191717D7 -:10FD80001B111921211D171719191D1D1F000C24E6 -:10FD900015E0082413E0022411E017240FE00D24DD -:10FDA0000DE001240BE0092409E0062407E0032408 -:10FDB00005E0052403E0182401E00024FFDF6C7057 -:10FDC00030BDC0787047C171090A01727047B0F840 -:10FDD000070070474172090A81727047B0F8090044 -:10FDE0007047C172090A01737047B0F80B00704781 -:10FDF0004171090A81717047B0F8050070470171BF -:10FE00007047007970474173090A81737047B0F8F1 -:10FE10000D00704730B4B0F80720894DB0F809C024 -:10FE2000B0F805300179941F2D1998BFBCF5FA7F01 -:10FE30000ED269B1082998BF914209D293429FBF5F -:10FE4000B0F80B00B0F5486F012030BC98BF704788 -:10FE5000002030BC7047001D01F0F3BF021D0846B2 -:10FE6000114601F0EEBF4172090A81727047B0F885 -:10FE70000900704701717047007970470A68426055 -:10FE800049688160704742680A60806848607047CE -:10FE90000988818170478089088070470A68C0F8A6 -:10FEA0000E204968C0F812107047D0F80E200A6082 -:10FEB000D0F81200486070470968C0F81610704703 -:10FEC000D0F81600086070470A684260496881608F -:10FED000704742680A608068486070470968C1607E -:10FEE0007047C06808607047017170474171090A26 -:10FEF00081717047C171090A0172704700797047BA -:10FF0000B0F805007047B0F80700704701717047FE -:10FF10000079704701717047007970470A68426044 -:10FF200049688160704742680A608068486070472D -:10FF30000171090A417170478171090AC1717047E5 -:10FF40000172090A417270478172090AC1727047D1 -:10FF500080887047C0887047008970474089704723 -:10FF600001891B2924BF4189B1F5A47F07D381886A -:10FF70001B2921BFC088B0F5A47F01207047002055 -:10FF800070470A68426049688160704742680A6049 -:10FF9000806848607047017170470079704741710F -:10FFA000704740797047017911F0070F1BBF407906 -:10FFB00010F0070F002001207047017911F0070FA2 -:10FFC0001BBF407910F0070F00200120704701711E -:10FFD000704700797047417170474079704781716F -:10FFE000090AC1717047C088704716A282B0D2E971 -:10FFF0000012CDE900120179407901F0070269464B -:020000040002F8 -:100000001DF80220012A07D800F00700085C01282B -:100010009EBF012002B07047002002B070470171FE -:10002000704700797047417170474079704730B52B -:100030000C460546FB2988BFFFDF6C7030BD000011 -:1000400086F3FFFF000101020102020370B50446BE -:10005000C2F11005281901F04FFD15F0FF0108D07D -:10006000491EC9B2802060542046BDE8704001F0AE -:10007000BABD70BD30B505E05B1EDBB2CC5CD55CB3 -:100080006C40C454002BF7D130BD10B5002409E0FA -:100090000B78521E44EA430300F8013B11F8013B80 -:1000A000D2B2DC09002AF3D110BD2DE9F0410C4693 -:1000B00001200978FF4E92B0154602274FF006083E -:1000C0004FF0040C71B101291ED0022945D003293B -:1000D00005D12978042902D105201070002012B022 -:1000E000BDE8F081606850B1CDE9010601202070C3 -:1000F0008DF80080606A05901146684663E02770BD -:1001000085F800C0566026E029780429E7D169689F -:1001100010222069FFF7B9FF6868C07B000606D58A -:10012000E44A2069102310320146FFF7A3FFD4E907 -:1001300004101022FFF7A9FF2069C07B000606D536 -:10014000DC4A6069102310320146FFF793FF2770E5 -:1001500085F800C06E600320C1E729780429BED16C -:10016000A08910280CD9A0F1100080B2A081A1684C -:100170004FF01003014468466A68FFF77BFF18E000 -:1001800004D14FF010032269A16807E0C2B20EA8A3 -:10019000A168FFF75BFF626910230EA90AA8FFF7A9 -:1001A00069FF10230AA968466A68FFF763FF032006 -:1001B000207060680590CDF818D08DF81080606AC6 -:1001C0000990294604A8F1F759FF88E72DE9F04185 -:1001D00007460D4601200B7806213BB1012B04D1C7 -:1001E0001378052B01D11170002079E76C69012685 -:1001F00020226170E8686060686A6062A168287C9B -:100200000870A681A068A968401C01F075FCA0894F -:1002100020222030A081A0686968213001F06CFCA8 -:10022000A08921462030A0812E703846BDE8F041DB -:10023000F1F73BBF2DE9F05F0D46834601200978B9 -:10024000174606464FF00608D1B1DFF868A24FF016 -:100250000009AAF1080A012923D002297ED0032926 -:100260000CD13978052909D179681022E86901F0A3 -:1002700043FC07203870183500207D60BDE8F09FF2 -:100280002C6A8C48202284F8018020306060202075 -:10029000A081686A60626968A06801F02DFC2E7018 -:1002A000D4E039780529E9D12C6A84F80180686A9C -:1002B000606251681022E86901F01EFCE869606024 -:1002C000A0684F4680F80090A681A0684670A0897B -:1002D000401C80B2A081A1680844696951F8012FCF -:1002E000026089888180A089801D80B2A0816969AF -:1002F000A2680978C1F340011154A089401C80B262 -:10030000A081A1680844296951F8012F02608988F9 -:100310008180A089801D80B2A0812969A2680978A6 -:10032000C1F340011154A0891022401C80B2A08169 -:10033000A1680844E96801F0DFFBA08910221030B1 -:1003400080B2A081A1680844A96801F0D5FBA0890A -:10035000103080B2A081A168014400E00DE0DAF81D -:1003600004000860A089001D80B2A081A1680F541C -:10037000A089401CA081022067E03978052992D12C -:1003800051681022A86901F0B7FB2C6A84F801803B -:10039000E8696060686A6062A16881F80090A6817F -:1003A000A0684670A089401C80B2A081A168084462 -:1003B000696951F8012F026089888180A089801DB8 -:1003C00080B2A0816969A2680978C1F34001115423 -:1003D000A089401C80B2A081A1680844296951F815 -:1003E000012F026089888180A089801D80B2A08150 -:1003F0002969A2680978C1F340011154A08910222B -:10040000401C80B2A081A1680844E96801F074FB37 -:10041000A0891022103080B2A081A1680844A96888 -:1004200001F06AFBA089103080B2A081A16801446C -:10043000DAF804000860A089001D80B2A081A168DC -:100440000E54A089401CA0810320287021465846E4 -:10045000BDE8F05FF1F729BE70B50D460646097894 -:10046000012041B1012905D11178052902D10820C7 -:100470001070002070BD2C6A062060706968616091 -:10048000696A6162EA69A16852F8013F0B6092886B -:100490008A80A081E869A1680078C0F34000887173 -:1004A000A089401C80B2A081A1680844A96951F8C4 -:1004B000012F01E074230200026089888180A089F5 -:1004C000801D80B2A081A969A2680978C1F34001AA -:1004D0001154A089401C80B2A081A16808446969B8 -:1004E0000A88028089788170A0891022C01C80B29D -:1004F000A081A1680844296901F0FEFAA0891022B0 -:10050000103080B2A081A1680844E96801F0F4FAD3 -:10051000A0891022103080B2A081A1680844A96887 -:1005200001F0EAFAA08921461030A081012028704C -:100530003046BDE87040F1F7B8BD70B50D460646CF -:100540000978012059B1012908D11178052905D16F -:1005500009201070506800685060002070BD6C6900 -:10056000062010226070E8686060686A606229692D -:10057000A06801F0C1FA1020A081A06820221030EC -:10058000A96801F0B9FAA0892022203080B2A081A8 -:10059000A1680844696801F0AFFAA08921462030BB -:1005A000A081012028703046BDE87040F1F77DBD84 -:1005B00070B50C46012009788EB01546062659B153 -:1005C000012934D0022905D12978042902D10A2031 -:1005D000107000200EB070BD606910236A4600786C -:1005E000C0F340008DF80000A0690078C0F340001F -:1005F0008DF80100E0680168CDF802108188ADF83F -:10060000061080798DF8080020690168CDF809107E -:100610008188ADF80D1080798DF80F006068059025 -:100620000AA80690A168FFF725FD01201DE02978A2 -:100630000429CFD1A06910236A4650F8011F009108 -:100640008088ADF80400606950F8011FCDF80610ED -:100650008088ADF80A0000200390606805900AA821 -:1006600006906968FFF706FD022020708DF8106083 -:10067000606A0990294604A8F1F700FDAAE700B5D1 -:100680000B788BB001204BB1012B05D111780429D7 -:1006900002D10B20107000200BB000BD4868019003 -:1006A00006A80290C86803680693406807908868A7 -:1006B00003680893406809900120087006208DF8AF -:1006C0000000486A059011466846F1F7D7FCE3E759 -:1006D00000B50B788BB0012043B1012BDCD1117830 -:1006E0000429D9D10C2010700020D5E7486801906A -:1006F00006A8029088680368069340680790002067 -:10070000089009900120087006208DF80000486AC2 -:10071000059011466846F1F7B1FCBDE700B50B78CE -:100720008BB0012043B1012BB6D111780429B3D18C -:100730000D2010700020AFE748680590CDF818D064 -:1007400088680088ADF80000C8680088ADF802002D -:1007500000200190029003900120087006208DF87F -:100760001000486A0990114604A8F1F787FC93E746 -:1007700030B403460C7801205CB1012C15D0022C5A -:1007800005D111780C2902D10E201070002030BC48 -:10079000704701200870C868042242704A684260AD -:1007A0000B4A8260921EC2600BE014780D2CEED1D1 -:1007B00002200870C86803244470526842608A6846 -:1007C0008260496A4162014630BC1846F1F76DBC4F -:1007D0006E2302002DE9F0410C4611490D68104AC4 -:1007E000104908321160A0F120012A2901D301200B -:1007F0000CE03E2810D040CC0B4F94E80E0007EBE5 -:100800008000241F50F8807C3046B84720600448A0 -:10081000001D0560BDE8F0812046E0F7E1FCF5E74A -:100820001005024001000001A423020010B5524847 -:1008300000F070FA00B1FFDF4F48401C00F06AFA88 -:10084000002800D0FFDF10BD2DE9F14F4B4ED6F848 -:1008500000B00127484800F065FADFF81C8128B98C -:100860005FF0000708F1010000F072FA444C002527 -:100870004FF0030901206060C4F80051C4F804512E -:10088000009931602060DFF8FCA018E0DAF8000081 -:10089000C00614D50E2000F064F8EFF3108010F0BD -:1008A000010072B600D00120C4F80493D4F80011FE -:1008B00019B9D4F8041101B920BF00B962B6D4F84F -:1008C000000118B9D4F804010028DFD0D4F80401DD -:1008D0000028CFD137B1C6F800B008F1010000F010 -:1008E00021FA11E008F1010000F01CFA0028B9D14A -:1008F000C4F80893C4F80451C4F800510E2000F065 -:1009000030F81D4800F024FA0020BDE8F88F2DE9EA -:10091000F0438DB00D46064600240DF110090DF18F -:10092000200817E004EB4407102255F8271068460A -:1009300001F0E2F805EB870710224846796801F0DC -:10094000DBF86846FFF780FF10224146B86801F0E7 -:10095000D3F8641CB442E5DB0DB00020BDE8F083A1 -:1009600072E700F01F02012191404009800000F170 -:10097000E020C0F8801270478F01002004E500409D -:1009800000E0004010ED00E0D848002101708170C7 -:10099000704770B5D64D01232B60D64B1C68002CD8 -:1009A000FCD0002407E00E6806601E68002EFCD014 -:1009B000001D091D641C9442F5D3002028601868AE -:1009C0000028FCD070BD70B5C84E0446CA4D3078C2 -:1009D000022800D0FFDFAC4200D3FFDF7169C748B7 -:1009E000012903D847F23052944201DD03224271BB -:1009F000491C7161291BC160C0497078F2F782FA05 -:100A0000002800D1FFDF70BD70B5B84C0D4661788D -:100A1000884200D0FFDFB84E082D4ED2DFE805F047 -:100A20004D0421304D4D4D3B2078022800D0FFDF92 -:100A300003202070A078022802D0012804D008E00A -:100A4000A06800F051FD04E004F1080007C8FFF7BA -:100A5000A0FF052020700020A070BDE87040F1F7D5 -:100A600012BFF2F705F801466068F2F712FDB042D6 -:100A700002D2616902290BD30320F2F7E4FF12E0EE -:100A8000F1F7F6FF01466068F2F703FDB042F3D2DA -:100A9000BDE8704097E7207802280AD0052806D0E4 -:100AA000FFDF04202070BDE8704000F014B9022080 -:100AB00000E00320F2F7C7FFF3E7FFDF70BD70B57A -:100AC0000546F1F7D5FF894C60602078012800D0F9 -:100AD000FFDF8A4901200870002008718D60042022 -:100AE00048718548C860022020706078F2F70AFAE1 -:100AF000002800D1FFDF70BD10B57C4CA07808B98C -:100B0000207808B1112010BD7D48F1F737FF6070E3 -:100B10006078202804D0012020700020606110BD82 -:100B2000032010BD0246010B0120B2F5003F02D2A6 -:100B3000884000F071BFB2F5802F03D22039884081 -:100B400000F072BFB2F5C02F03D24039884000F0E8 -:100B500074BFB2F5002F03D26039884000F076BF31 -:100B6000002070472DE9F041144600EB84070E4643 -:100B700005463F1F00F0CBFC4FF080510A695043FF -:100B800006EB8402121FB24201D2012200E00022D1 -:100B90001CB10969B4EB910F02D90920BDE8F081BD -:100BA00058498D4216D3AF4214D3854205D28742AD -:100BB00003D245EA0600800701D01020EEE78E42FE -:100BC00008D33AB92846FFF7ADFF18B93846FFF702 -:100BD000A9FF08B10F20E1E74B484C490068884263 -:100BE00005D0224631462846FFF7D3FE10E0FFF736 -:100BF00083FF0028D2D13D4801218560C0E903640C -:100C000081704FF4A97104FB01F01830FFF757FF12 -:100C10000020C3E770B54FF0805504462869394974 -:100C2000B1FBF0F084420AD300F071FCA04201D87D -:100C3000102070BD28696043FFF774FF08B10F20D2 -:100C400070BD314831490068884204D0286960434A -:100C500000F04AFC0CE0FFF74FFF0028F0D12969B3 -:100C6000224861438160022181702948FFF727FFF4 -:100C7000002070BD2349090BB1EB401F07D940424A -:100C800001EB4011202903D34FF0FF3070470021C2 -:100C900001208840401E704770B505460C46002074 -:100CA000FFF7E8FF28420ED10120FFF7E3FF2042C3 -:100CB00009D10220FFF7DEFF104204D10320FFF725 -:100CC000D9FF184201D00F2070BD21462846BDE84B -:100CD000704000F0C4BE10B5044C6078F1F7A9FE76 -:100CE00000B9FFDF00202070A07010BD940100202B -:100CF00004E5014000E40140105C0C00C412002037 -:100D0000090A020000300200B0000020BEBAFECA8C -:100D10007C5E0100002101700846704701460020FA -:100D200008707047EFF3108101F0010172B602788C -:100D3000012A01D0012200E000220123037001B941 -:100D400062B60AB1002070474FF400507047E9E7DF -:100D5000EFF3108111F0010F72B64FF00002027034 -:100D600000D162B600207047F2E700004C490968E4 -:100D70000160002070474A49086000207047012147 -:100D80008A0720B1012804D042F20400704791671D -:100D900000E0D1670020704742490120086042F21C -:100DA0000600704708B504233E4A1907103230B1D7 -:100DB000C1F80433106840F0010010600BE01068C7 -:100DC00020F001001060C1F808330020C1F80801CC -:100DD000354800680090002008BD011F0B2909D884 -:100DE000304910310A6822F01E0242EA40000860D1 -:100DF0000020704742F205007047000100F180407A -:100E0000C0F8041900207047000100F18040C0F8CC -:100E1000081900207047000100F18040D0F8000957 -:100E2000086000207047012801D9072070471F4A39 -:100E300052F8200002680A4302600020704701282F -:100E400001D907207047194A52F8200002688A43E6 -:100E5000026000207047012801D907207047134A1B -:100E600052F8200000680860002070470200104916 -:100E70004FF0000003D0012A01D0072070470A601C -:100E800070474FF080410020C1F808014FF0E0208A -:100E9000802180F800140121C0F800117047000083 -:100EA0000004004000050040080100404C240200FE -:100EB000780500406249634B0A6863499A420968B1 -:100EC00001D1C1F310010160002070475C495D4B06 -:100ED0000A685D49091D9A4201D1C0F310000860FB -:100EE000002070475649574B0A68574908319A42C3 -:100EF00001D1C0F3100008600020704730B5504B9E -:100F0000504D1C6842F20803AC4202D0142802D2B1 -:100F100003E0112801D3184630BDC3004B481844E4 -:100F2000C0F81015C0F81425002030BD4449454BC9 -:100F30000A6842F209019A4202D0062802D203E06E -:100F4000042801D308467047404A012142F8301076 -:100F5000002070473A493B4B0A6842F209019A4225 -:100F600002D0062802D203E0042801D308467047C5 -:100F7000364A012102EBC00041600020704770B585 -:100F80002F4A304E314C156842F2090304EB8002BF -:100F9000B54204D0062804D2C2F8001807E004289D -:100FA00001D3184670BDC1F31000C2F8000800203C -:100FB00070BD70B5224A234E244C156842F20903D5 -:100FC00004EB8002B54204D0062804D2D2F800080F -:100FD00007E0042801D3184670BDD2F80008C0F31A -:100FE00010000860002070BD174910B5083118487E -:100FF00008601120154A002102EBC003C3F8101548 -:10100000C3F81415401C1428F6D3002006E0042869 -:1010100004D302EB8003C3F8001807E002EB80035F -:10102000D3F80048C4F31004C3F80048401C062855 -:10103000EDD310BD04490648083108607047000030 -:10104000B0000020BEBAFECA00F5014000F0014029 -:101050000000FEFF7D4B1B6803B19847BFF34F8F25 -:101060007B4801687B4A01F4E06111430160BFF3F2 -:101070004F8FFEE710B5EFF3108010F0010F72B63E -:1010800001D0012400E0002400F0D6F850B1E0F7D0 -:1010900041F9F1F7BCFAF2F777FCE1F7C0FE6E49CF -:1010A0000020086004B962B6002010BD70B50C467F -:1010B0000646EFF3108010F0010F72B601D0012543 -:1010C00000E0002500F0B8F818B105B962B60820B4 -:1010D00070BDE0F79BF8E0F71FF9024600204309D6 -:1010E0009B0003F1E02300F01F01D3F80031CB4057 -:1010F000D9071BD0202803D222FA00F1C90722D138 -:1011000041B2002906DA01F00F0101F1E02191F866 -:10111000141D03E001F1E02191F8001449090829A8 -:1011200011D281B101290ED004290CD0401C6428B1 -:10113000D5D3E1F74BFE4849484808602046F3F70D -:101140008FF860B904E005B962B641F2010070BDE4 -:101150003E4804602EB13046F3F7CFF818B11024A2 -:1011600029E03F4E16E03078022802D94FF480542F -:1011700021E007240028707801D0E0B908E0D0B160 -:10118000202818D8B078212815D8012813D001E0DC -:10119000B07880B93349802081F8140DE0F7BCF8AD -:1011A0003146F2F7D7FBF1F7F1F900F0E3F93046F9 -:1011B000E0F782F8044605B962B61CB1FFF75AFFA2 -:1011C000204670BD002070BD10B5044600F034F814 -:1011D00000B101202070002010BD234908600020CC -:1011E000704770B50C4621490D682049204E0831E2 -:1011F0000E60102807D011280CD012280FD0132809 -:1012000011D0012013E0D4E90001FFF74FFF35466C -:1012100020600DE0FFF72EFF0025206008E0206829 -:10122000FFF7D2FF03E0104920680860002020602B -:101230000E48001D056070BD0748084900688842D7 -:1012400001D101207047002070470000AC01002050 -:101250000CED00E00400FA05B0000020BEBAFECAA2 -:10126000542402000BE000E00400002010050240BE -:101270000100000100B5764910F1080F08BFF82001 -:1012800024D014DC10F1280F08BFD8201ED010F194 -:10129000140F08BFEC2019D010F1100F08BFF02078 -:1012A00014D010F10C0F08BFF4200FD00CE010F197 -:1012B000040F08BFFC2009D0002818BF032805D060 -:1012C000042804BF086000BDFFDF00BD086000BD4A -:1012D00000B56049012808BF032004D0022816BFCA -:1012E000FFDF042000BD086000BD5A48016801F01E -:1012F0000F01032904BF01207047006800F00F00B0 -:10130000042804BF0220704700B5FFDF012000BDA4 -:101310005149002808BF086805D0012806BF0868A1 -:1013200040F0010070470860704770B5054601291C -:1013300014D0022A07BF49484FF47A7148484FF445 -:10134000C86144181846F4F759F820444FF47A71EC -:1013500000F27120B0FBF1F0281A70BD022A14BF10 -:101360004FF4C8604FF47A7049F608514418E9E721 -:1013700070B514460546012908BF49F6CA6605D06E -:10138000022B0CBF3748364800F1FA061046F4F736 -:1013900044F8012C0CBF4FF47A714FF4FA71711AB2 -:1013A00008444FF47A7100F28920B0FBF1F0281A5A -:1013B000801E70BD70B51546064601291AD0022B55 -:1013C00007BF26484FF47A7125484FF4C861441886 -:1013D0001046F4F722F8012D0CBF4FF47A714FF448 -:1013E000FA71611A08444FF47A716438B0FBF1F075 -:1013F000301A70BD022B14BF4FF4C8604FF47A70DE -:1014000049F608514418E3E770B505460C46164600 -:101410001046F3F7F3FF05EB4501C1EBC51100EBF7 -:10142000C100012C0CBF4FF47A714FF4FA714518CA -:101430002046F3F7F2FF281A4FF47A7100F60F6096 -:10144000B0FBF1F43046F3F7CDFF2044401D70BDF2 -:101450000C15004010150040501600406836020080 -:10146000A2240200043602002DE9F04184B088462F -:101470000746FEF70FFC05467E786A4601A94046FE -:10148000EFF748F804000ED0012D1EBF032004B072 -:10149000BDE8F08102AA40460199EEF73AFF0298B2 -:1014A000B0F803000AE0022D18D1042E16D3B7F8C5 -:1014B0000300BDF80020011D8A4206D3001D80B242 -:1014C000A119814238BF012004D104B04FF00000BF -:1014D000BDE8F0813CBF04B0BDE8F0814FF00200F0 -:1014E00004B0BDE8F08100000B4A022111600B49F5 -:1014F0000B68002BFCD0084B1B1D186008680028E7 -:10150000FCD00020106008680028FCD070474FF025 -:10151000805040697047000004E5014000E401404C -:1015200002000B464FF00000014620D0012A04D0F3 -:10153000022A04D0032A0DD103E0012002E0022098 -:1015400015E00320072B05D2DFE803F00406080AA4 -:101550000C0E100007207047012108E0022106E070 -:10156000032104E0042102E0052100E00621F1F757 -:1015700022BA0000FC4805218170002101704170F1 -:10158000C17081607047F9490A78012A06D0CA689B -:101590001044C860C8684038F1F748BF8A681044F2 -:1015A00088608868F7E710B5EF4CE078F1F741FA0A -:1015B00000B9FFDF0820F2F746FA0520A0700020EE -:1015C0002070607010BD002819D00378E849E94AFE -:1015D00013B1012B0ED011E00379012B00D06BB9B0 -:1015E00043790BB1012B09D18368643B8B4205D24F -:1015F000C0680EE00379012B02D00BB100207047C8 -:1016000043790BB1012BF9D1C368643B8B42F5D20E -:1016100080689042F2D8012070472DE9F0410446DD -:101620000227F1F72FFE006800B1FFDFCE4D012643 -:101630003CB12078B0B1012805D0022810D0032891 -:1016400013D02E710CE06068C82807D3F1F755FF5E -:1016500020B16068FFF797FF012703E0002701E052 -:1016600000F0CCF93846BDE8F08128780028F7D1A1 -:101670006068FFF7A8FF0028E3D06068DFF8EC821D -:10168000007828B3A878042800D0FFDF0020464661 -:1016900088F8000060680079C8B300203071606885 -:1016A0004079A8B30420707160688168E868F0F739 -:1016B000EAFEB0606068C0685230F0600320A87035 -:1016C000AA49E878F1F71EFC0028C9D1FFDFC7E777 -:1016D000404688F8006061680979D1B10021017144 -:1016E00061684979B9B104214171616889685231F1 -:1016F00081606168C968C160C0689B4C14346060D7 -:10170000F1F7B6F920606E700220A870A8E704E037 -:1017100005E00321E3E70321E6E70120BEE703201C -:10172000C1E72DE9F047904C8846E178884200D027 -:10173000FFDFDFF83492002501278C4E09F11409F0 -:10174000B8F1080F79D2DFE808F0040D2A557E843D -:101750009199A078032803D0A078022800D0FFDF59 -:10176000BDE8F087A078032803D0A078022800D035 -:10177000FFDF0420A0702571207800287AD1FFF7C0 -:1017800002FF3078012806D0B068E06000F07BF9F5 -:101790002061002062E0E078F1F7B0FAF5E7A07888 -:1017A000032803D0A078022800D0FFDF207800288B -:1017B0006FD1A078032816D0F1F75AF901464F46A9 -:1017C000D9F80000F1F765FE00280EDB7968814248 -:1017D0000BDB081AF0606549E078F1F793FB00280D -:1017E000BED1FFDFBCE7042029E00420F2F72BF98B -:1017F000A570B5E7A078032803D0A078022800D010 -:10180000FFDF207888BBA078032817D0F1F730F9E4 -:1018100001464F46D9F80000F1F73BFE0028E4DB13 -:1018200079688142E1DB081AF0605049E078F1F70D -:1018300069FB002894D1FFDF92E740E00520F2F732 -:1018400002F9A7708CE7A078042800D0FFDF0220FF -:1018500004E0A078042800D0FFDF0120A1688847B9 -:10186000FFF7DBFE054630E004E012E0A078042834 -:1018700000D0FFDFBDE8F04700F0C0B8A078042832 -:1018800005D0607810B1A078022800D0FFDF207862 -:1018900010B1BDE8F04786E6207920B10620F2F7C6 -:1018A000D2F82571CDE7607838B13049E078F1F7AA -:1018B00029FB00B9FFDF657052E70720BFE7FFDFB4 -:1018C0004EE73DB1012D03D0FFDF022DF9D147E7EF -:1018D0000420C3E70320C1E770B5050005D0224C02 -:1018E000A078052803D0112070BD102070BD2248BB -:1018F000F1F744F8E070E078202803D0A5600020DC -:10190000A07070BD032070BD174810B5017809B1F3 -:10191000112010BD817805290CD0817801290BD0C8 -:10192000817849B1012101708178012904D0807842 -:1019300010B103E00F2010BDFFF735FE002010BDF1 -:1019400070B5094E0446B07808B101280AD1ACB18F -:101950002046FFF738FE98B12078044D90B1B0785A -:1019600001282AD00F2070BDB0010020D412002021 -:101970003D860100FF1FA107231702001020F2E798 -:101980000720F0E701202870207990B1002028710D -:10199000607980B104206871A0685230A860E06866 -:1019A000E860E8681A4C6060F1F762F82060022095 -:1019B00016E00320EBE70320EDE7002028702079F4 -:1019C000A8B100202871607998B104206871A168DD -:1019D000F068F0F758FDA860E0685230E860032036 -:1019E000B0700C49F078F1F78DFA28B903E00320C4 -:1019F000E8E70320EAE7FFDF0020B4E7044810B57A -:101A00001438006900F037F8BDE81040F0F73BBF2C -:101A1000C4010020D41200201F490968014201D0EE -:101A200001207047002070471B49091D09680142C9 -:101A300001D0012070470020704717491031096814 -:101A4000014201D001207047002070471249143133 -:101A50000968014201D0012070470020704710B58D -:101A60000D4C2060201D01600B4810300260001DED -:101A70000360002010BD09490A6848F202139A4326 -:101A800002430A607047054A116848F2021301EAEE -:101A9000030099431160704700060040C8060240E9 -:101AA00040EA010310B59B070FD1042A0DD310C8DB -:101AB00008C9121F9C42F8D020BA19BA884201D92D -:101AC000012010BD4FF0FF3010BD1AB1D30703D075 -:101AD000521C07E0002010BD10F8013B11F8014B2B -:101AE0001B1B07D110F8013B11F8014B1B1B01D147 -:101AF000921EF1D1184610BD032A40F2308010F03A -:101B0000030C00F0158011F8013BBCF1020F624498 -:101B100098BF11F801CB00F8013B38BF11F8013B29 -:101B2000A2F1040298BF00F801CB38BF00F8013BD6 -:101B300011F0030300F02580083AC0F0088051F846 -:101B4000043B083A51F804CBA0E80810F5E7121D51 -:101B50005CBF51F8043B40F8043BAFF30080D20770 -:101B600024BF11F8013B11F801CB48BF11F8012B3C -:101B700024BF00F8013B00F801CB48BF00F8012B5F -:101B8000704710B5203AC0F00B80B1E81850203AE9 -:101B9000A0E81850B1E81850A0E81850BFF4F5AF0D -:101BA0005FEA027C24BFB1E81850A0E8185044BF97 -:101BB00018C918C0BDE810405FEA827C24BF51F804 -:101BC000043B40F8043B08BF7047D20728BF31F8F8 -:101BD000023B48BF11F8012B28BF20F8023B48BF49 -:101BE00000F8012B70474FF000020429C0F012806A -:101BF00010F0030C00F01B80CCF1040CBCF1020FC0 -:101C000018BF00F8012BA8BF20F8022BA1EB0C0194 -:101C100000F00DB85FEAC17C24BF00F8012B00F88A -:101C2000012B48BF00F8012B70474FF0000200B5B0 -:101C3000134694469646203922BFA0E80C50A0E8EF -:101C40000C50B1F12001BFF4F7AF090728BFA0E89D -:101C50000C5048BF0CC05DF804EB890028BF40F869 -:101C6000042B08BF704748BF20F8022B11F0804FAB -:101C700018BF00F8012B704770477047704700008D -:101C8000FEDF04207146084219D10699124A91429A -:101C900015DC069902394878DF2810D10878FE282B -:101CA00007D0FF280BD14FF001004FF000020B4B83 -:101CB000184741F201000099019A084B1847084B58 -:101CC000002B02D01B68DB6818474FF0FF307146CD -:101CD0004FF00002014B184700300200551002007F -:101CE00004000020184819497047FFF7FBFFDFF791 -:101CF00065FA00BD4FF4805015490968884203D148 -:101D0000144A13605B68184700BD000020BFFDE760 -:101D10004FF480500E490968884210D10E4B186864 -:101D20004FF0FF318842F1D080F308884FF0202136 -:101D3000884204DD0948026802210A43026008481B -:101D4000804708488047FFDFE8120020E8120020A3 -:101D500000000020040000200030020024050040A4 -:101D600039430100F51C020004207146084202D0EC -:101D7000EFF3098101E0EFF3088188690238007808 -:101D8000102813DB20280FDB2B280BDB0A4A1268F4 -:101D90000A4B9A4203D1602804DB094A104702200B -:101DA00008607047074A1047074A1047074A1268F9 -:101DB0002C32126810470000B0000020BEBAFECAE4 -:101DC0001D130000D5070200E311020004000020EB -:101DD0000D4B0E4908470E4B0C4908470D4B0B495C -:101DE00008470D4B094908470C4B084908470C4B5D -:101DF000064908470B4B054908470B4B0349084761 -:101E00000A4B024908470000F9BA0000092F0000F8 -:101E1000812C00001D2B0000AB2A0000232D0000A8 -:101E2000391300006728000029BD0000C911000017 -:101E300000210160818070470021016041600172D2 -:101E400070470A6802600B7903717047599500006A -:101E50001B970000779800009B980000D598000021 -:101E6000099900004399000081990000D39900006E -:101E700031960000A7120000A7120000C140000028 -:101E80000541000025410000E1410000274300001A -:101E90000144000031440000F5440000153D0000FD -:101EA000274700001948000039480000DD150000F0 -:101EB00001160000311500008515000033160000E2 -:101EC000C716000003600000B561000073650000E4 -:101ED000896600000D67000087670000F967000051 -:101EE00015690000E3690000616A000053480000C2 -:101EF0005948000063480000D73C00001F4900001B -:101F0000A13C00005F4A0000B74A00001F4B0000E0 -:101F1000A7120000A7120000A7120000A7240000CB -:101F20002D2500004925000065250000F32600004E -:101F30008F25000099250000DB250000FD2500000D -:101F4000D92600001B270000A7120000CF82000046 -:101F5000F7820000F98200003383000061830000F3 -:101F60004F840000DB840000EF8400003D8500000A -:101F70002D860000D1870000F9880000D172000092 -:101F800011890000A7120000A712000049B4000048 -:101F9000B3B5000007B6000073B6000023B7000019 -:101FA00051000000000000000000000000000000E0 -:101FB0000000000000000000000000000000000021 -:101FC0000000000000000000000000003E000000D3 -:101FD0000000000000000000000000000000000001 -:101FE00000000000000000000000000000000000F1 -:101FF0000000000000000000500000000000000091 -:1020000000000000000000000000000000000000D0 -:1020100000000000000000000000000000000000C0 -:1020200000000000100110013A0200001A02000432 -:102030000506000013900000F38F0000FFFFFFFF74 -:102040000000FFFF3BAC00003D39000041200000D4 -:102050001B730000EB8D0000000000000000020078 -:10206000000000000002000000000000000100006D -:10207000000000006F8000004F800000BD80000065 -:1020800029240000EB2300000B240000A7A7000078 -:10209000D3A70000DBA9000021590000DD8000006B -:1020A000000000000D810000772400000000000007 -:1020B0000000000000000000BDA8000000000000BB -:1020C000B359000000000000000000000000000004 -:1020D0000000000000000000000000000000000000 -:1020E000000000000000000000000000D5E5000036 -:1020F00059E60000000000000000000000000000A1 -:1021000059E700000000000000000000000000008F -:1021100049F800000000000000000000000000007E -:1021200005E900005DF4000000000000DDF400009F -:1021300051F500000000000037EE0000D5EE000071 -:102140000000000017F50000D1EF0000C9F1000009 -:102150003DF2000041F30000A5EA0000000000008D -:1021600000000000BFE90000000000001FE80000C0 -:1021700095E70000BDF300007BF60000E9F60000E3 -:1021800000000000A7E60000D7E6000007E6000018 -:102190000000000021E70000000000000000000037 -:1021A000000000004BF700000000000000000000ED -:1021B000000000000000000000000000EFEC000044 -:1021C000000000000000000000000000C3E8000064 -:1021D000C1E700008BE800000000000053E80000A9 -:1021E0000000000000000000B3F7000097F80000B6 -:1021F0009BFA000017F900003DE9000051FA0000C9 -:10220000000000004FEB000021EC000061F900002D -:10221000ABF9000007F80000E5F90000F1ED00005F -:1022200093560000935600009D400000E7AA00006E -:102230009F750000531F000087AA01004BC50100D5 -:10224000D9560000D9560000BF40000049AB00003D -:1022500023760000C51F0000B5AA01005FC501007C -:10226000D001D001400038005C0024004001F001A2 -:1022700001000000010000000001020304120F1021 -:102280001100000013000000B10502007F060200EB -:10229000D10602001D07020071070200AB00020018 -:1022A000CD01020035020200590402003B05020084 -:1022B000750D01008B1E01000000000006000000EB -:1022C0000A0000003200000073000000B4000000AB -:1022D000B197010045850100235F010077DE010011 -:1022E000F772010077DE01007D5F010005E001006B -:1022F000876B010005E001007B5E010093DF0100B8 -:10230000C971010093DF01004D630100FFE201008C -:102310007F730100FFE20100555555D6BE898E003E -:102320000000A606340DC21300004A03EE05920811 -:10233000000096041409920D555555252627D6BE42 -:10234000898EF401FA00960064004B0032001E00F2 -:1023500014000A00050002000100000025410000F1 -:1023600000000000AAAED7AB15412010000003000A -:10237000656C7462000000000000000000000000B6 -:1023800000000000870000000000000000000000C6 -:1023900000000000BE83605ADB0B376038A5F5AA49 -:1023A0009183886CB50E0200CD0E0200E50E02008E -:1023B000FD0E02002D0F0200550F02007F0F0200DC -:1023C000B30F0200150C0200650B0200990C02000D -:1023D000150D0200250D0200510D0200A33B010066 -:1023E000AB3B0100B93B01007F0D0200990D0200DB -:1023F0006D0D0200770D0200A50D0200DB0D02003D -:10240000FB0D0200090E0200170E0200270E02004B -:102410003F0E0200570E02006D0E02000000000089 -:10242000F7B800004DB9000063B9000021150200A3 -:10243000490802000F090200D91802000919020018 -:1024400041190200E93901000D3E01001C05004060 -:10245000200500400010020078240200080000203F -:10246000C401000044110000A8240200CC01002097 -:102470001C110000A01100000118136813024C2069 -:102480001A010222782720FB349B5F801280021EF3 -:1024900010139F0A1B205C041AE2040128237F0109 -:0824A00002A329091DFB013113 -:1030000030F00020153202001D3202001F32020093 -:1030100021320200233202002532020000000000AB -:103020000000000000000000000000002732020045 -:1030300029320200000000002B3202002D32020073 -:10304000913302002F320200653702002F32020056 -:103050002F3202002F3202002F3202002F320200E4 -:103060002F3202002F320200313702002F320200CD -:103070002F3202002F3202002F3202002F320200C4 -:103080002F320200E93302002F3202002F320200F9 -:103090000D3402002F320200113402002F320200E0 -:1030A0002F3202002F3202002F3202002F32020094 -:1030B0002F3202002F32020000000000000000004A -:1030C0002F3202002F3202002F3202002F32020074 -:1030D0002F3202002F3202002F32020000000000C7 -:1030E00000000000000000000000000000000000E0 -:1030F00000000000000000000000000000000000D0 -:1031000000000000000000000000000000000000BF -:1031100000000000000000000000000000000000AF -:10312000000000000000000000000000000000009F -:10313000000000000000000000000000000000008F -:10314000000000000000000000000000000000007F -:10315000000000000000000000000000000000006F -:10316000000000000000000000000000000000005F -:10317000000000000000000000000000000000004F -:10318000000000000000000000000000000000003F -:10319000000000000000000000000000000000002F -:1031A000000000000000000000000000000000001F -:1031B000000000000000000000000000000000000F -:1031C00000000000000000000000000000000000FF -:1031D00000000000000000000000000000000000EF -:1031E00000000000000000000000000000000000DF -:1031F00000000000000000000000000000000000CF -:10320000DFF80CD000F04AF80048004799D60200D9 -:1032100030F000200648804706480047FEE7FEE7FA -:10322000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE776 -:10323000153402000132020040EA01039B0703D06B -:1032400009E008C9121F08C0042AFAD203E011F8E5 -:10325000013B00F8013B521EF9D27047D2B201E0A7 -:1032600000F8012B491EFBD270470022F6E710B58B -:1032700013460A4604461946FFF7F0FF204610BDE4 -:1032800030B504460020034600E05B1C934203D2A5 -:10329000E05CCD5C401BF8D030BD0000064C074D13 -:1032A00006E0E06840F0010394E807009847103416 -:1032B000AC42F6D3FFF7A8FF40050300600503000A -:1032C00070B58C1810F8015B15F0070301D110F8E8 -:1032D000013B2A1106D110F8012B03E010F8016B15 -:1032E00001F8016B5B1EF9D12B0705D40023521E98 -:1032F0000DD401F8013BFAE710F8013BCB1A921C00 -:1033000003E013F8015B01F8015B521EF9D5A142FD -:10331000D8D3002070BD00F01F0201219140400968 -:10332000800000F1E020C0F88012704700F01F021A -:10333000012191404009800000F1E020C0F8801296 -:10334000704700F01F02012191404009800000F108 -:10335000E020C0F80011704700F01F0201219140E9 -:103360004009800000F1E020C0F8001270474907D2 -:10337000090E002806DA00F00F0000F1E02080F8C6 -:10338000141D704700F1E02080F800147047000021 -:1033900070B54FF4807630460AF02AFA114CB50524 -:1033A00060B130460AF02BFA0120C5F808036079B5 -:1033B00020B9012060712168002088474FF482768F -:1033C00030460AF015FA00280AD030460AF017FAFB -:1033D0000220C5F808032168BDE8704001200847B5 -:1033E00070BD0000D8B3002007480021C0F840118C -:1033F000C0F84411C0F84811C0F84C11C0F80011D1 -:10340000C0F804110CF07EBA001001400CF0C8B9ED -:103410000AF018BDF0B5B5480023021D0178101D53 -:1034200001254FF0805406290BD11678360708D1B4 -:103430000678C6F30316032E06D0042E04D0052EFC -:1034400002D0062907D00EE0B4F82463A84FC6F3D3 -:1034500004263E6002E01678360704D10678C6F3EB -:103460000316032E02D0062904D00FE0A24FA14E6E -:103470007E670EE01678360708D10678C6F3031685 -:10348000032E06D0042E04D0052E02D0062907D024 -:103490000EE0D4F84462994FC6F342363E6002E033 -:1034A0001678360704D10678C6F30316032E02D029 -:1034B000062906D011E0924E376827F080773760F2 -:1034C0000EE01678360708D10678C6F30316032EE9 -:1034D00006D0042E04D0052E02D006290AD011E011 -:1034E0004FF08046C6F80C31C6F81031834E361FB7 -:1034F000336002E01678360704D10678C6F3031667 -:10350000032E02D0062905D00CE07C4F0326643739 -:103510003E600AE01678360704D10678C6F3031633 -:10352000032E02D006290DD014E0764F05263E600A -:10353000744E78363560734E083633603F263F1D33 -:103540003E6002E01678360704D10678C6F303160B -:10355000052E02D0062957D062E06B4E36686B4FBD -:103560003E60694E361D36683F1D3E60664E083629 -:1035700036683F1D3E60644E0C3636683F1D3E6027 -:10358000614E103636683F1D3E605F4E1436366819 -:103590003F1D3E605C4E183636685C4F20373E60FB -:1035A000594E1C3636683F1D3E60574E20363668F1 -:1035B0003F1D3E60544E243636683F1D3E60524EDD -:1035C000283636683F1D3E604F4E2C3636683F1D0C -:1035D0003E604D4E303636684C4F40373E604A4E66 -:1035E000343636683F1D3E60474E383636683F1DDC -:1035F0003E60454E3C3636683F1D3E60424E40368A -:1036000036683F1D3E6002E01678360708D106781E -:10361000C6F30316032E06D0042E04D0052E02D0C6 -:10362000062907D019E0D4F85812394A01F04F01A1 -:10363000116002E0117809070FD10078C0F3031080 -:10364000032803D0042801D0052806D13148016899 -:10365000C90702D06FF001010160D4F830010628DB -:1036600008D1D4F83401062804D12B48016841F46C -:103670008061016022487438016841F47001016082 -:10368000BFF34F8FBFF36F8F4FF01021D1F80002BF -:10369000002803DBD1F80402002822DA1F4A156053 -:1036A0001F480468002CFCD01524C1F800420568AE -:1036B000002DFCD0C1F8044201680029FCD0136041 -:1036C00001680029FCD0BFF34F8F0D48F038016826 -:1036D000144A01F4E06111430160BFF34F8F00BF52 -:1036E000FDE7124910480860F0BD0000E00F00F04F -:1036F000403501400DF0ADBA00C007403C05004028 -:10370000FCED00E0105600400404001020C500400D -:10371000E40E0040000400403C17004004E5014076 -:1037200000E401400400FA050090D00328B5002011 -:103730000A48D0F8441101290ED1D0F804138903A6 -:103740000AD50021C0F844110121C1600448C279A2 -:103750000AB109F05FBC01727047000000A0004090 -:10376000B4B400200148006800470000E0B3002026 -:1037700002E008C8121F08C1002AFAD1704770473A -:10378000002001E001C1121F002AFBD17047000098 -:103790000121202803DA81400548014003E0402848 -:1037A00002DA2038814009B10120704700207047BB -:1037B000FC06FFBD082806D228B1012803D0042842 -:1037C00001D0012070470020704700001CB50E4852 -:1037D0000D4C90F830002834C0002070002060703C -:1037E000A070204609F0F0FDE0700420ADF8040060 -:1037F00000220094114668460BF0E2FD002802D03A -:10380000002000F027F81CBDB4B4002038B50446F1 -:1038100000208DF80000684600F08AF90A488442CA -:103820000CD0BFF34F8F09480168094A01F4E061E9 -:1038300011430160BFF34F8F00BFFDE79DF800000B -:1038400000F09AF938BD0000FECADDBA0CED00E0C8 -:103850000400FA050EB500210091CDE901106A4679 -:1038600044F20100FFF7D2FF0EBD00002DE9F84F32 -:103870002C4C8146924660880E4681424FD80027E4 -:103880004FF6FF788DF80070684600F051F9227805 -:103890006078A188884201DA401C00E00020C0B2B4 -:1038A000904204D19DF8000000F066F935E065789B -:1038B0006078884201DA401C00E0002060702078C7 -:1038C0006278824201D3101A02E0081A1044401CA8 -:1038D000E18880B2884200D9E0809DF8000000F0C5 -:1038E0004BF9454519D0E068B9F1000F40F835A013 -:1038F0000DD066B161882069324605FB010049465A -:10390000FFF79AFCE06800EBC500868002E000EB60 -:10391000C50087800020BDE8F88F0420FBE7092060 -:10392000F9E70000E8B3002010B50F4C03E0401C9D -:1039300000E000202070A068002814D12078617871 -:10394000814210D0227861882069E36802FB01007F -:1039500003EBC20153F83220898890472078A18870 -:103960008842E6DAE3E710BDE8B3002030B5CB00CB -:1039700008339DB293074FF0000401D0072030BDFB -:10398000054BDA602A441A615C701C70588099807B -:10399000DC80002030BD0000E8B3002008B5002026 -:1039A0008DF80000684600F0C3F805498868421C9D -:1039B00001D0401C88609DF8000000F0DDF808BDD3 -:1039C000E8B30020074801784078064A8842928888 -:1039D00001D3401A02E0511A0844401C101A80B268 -:1039E00070470000E8B3002008B500208DF8000003 -:1039F000684600F09DF80548816809B1491E81605C -:103A00009DF8000000F0B8F808BD0000E8B3002001 -:103A1000074B9B7823B12AB120B10068037C1BB10E -:103A200008207047072070474174426100207047AA -:103A30007CCE002070B50BF03DF8104800240B211F -:103A4000047044700E4D817014206C602C706C708A -:103A5000FFF76CFC07211420FFF789FC1420FFF707 -:103A600070FC0848046007211120FFF780FC05481E -:103A7000001F0068A860002070BD00007CCE002000 -:103A8000FCB30020081501402DE9FC47DFF87890D1 -:103A900099F8023073B368B3052902D20720BDE854 -:103AA000FC87436933B3437C012B25D000270446B0 -:103AB0000025884616468DF80050684600F038F814 -:103AC00001A80CF0E5FAC8B1012101700F4944606A -:103AD0000968C0E90218C0E904769DF8040089F875 -:103AE00001009DF8000000F047F81420FFF734FCB7 -:103AF0002846D4E70820D2E70F46D8E704259DF8EA -:103B0000000000F039F8F3E77CCE002004150140F6 -:103B10000649897839B130B1416921B10021017478 -:103B200002210BF0CBBE0820704700007CCE0020A5 -:103B300030B5EFF3108172B60D4A9468012324B1B9 -:103B40000370002900D162B630BD93604FF0E023CE -:103B5000D3F88051074C25401560C3F88041D3F855 -:103B6000844154605A17C3F8842100220270E8E7A8 -:103B700088CF0020FC06FFBD0B498A68002A11D0BF -:103B800000280FD1EFF3108072B60B684FF0E022DF -:103B9000C2F800314B68C2F8043100228A60002864 -:103BA00000D162B67047000088CF00202DE9F041B7 -:103BB000064608680C46411C4FF0A0474FF001052F -:103BC00006D005FA00F1C7F80815206809F098FF3B -:103BD0006068411C02D0002109F080FF3168A069B3 -:103BE000C1F82405607D227D31681043C1F86C0561 -:103BF000D4E900123068C0F81425C0F80C15207DF7 -:103C0000012815D1A068411C02D0002109F066FFEF -:103C1000E068411C05D08540C7F80855E06809F008 -:103C20006FFFD4E902123068C0F80825C0F81015FB -:103C3000BDE8F0812DE9F041064608680C46411CBC -:103C40004FF0A0474FF0010506D005FA00F1C7F884 -:103C50000815206809F05EFF6068411C02D0002151 -:103C600009F045FF3168A069C1F82405607D217D18 -:103C700032680843C2F86C05D4E900123068C0F815 -:103C80000C15C0F81425207D012815D1A068411C11 -:103C900002D0002109F02BFFE068411C05D08540CF -:103CA000C7F80855E06809F035FFD4E9021230681A -:103CB000C0F80825C0F81015BDE8F0812DE9FC47D3 -:103CC0001D46070090460E460AD036B100240194E6 -:103CD00038780DF10409692804D00720BDE8FC8775 -:103CE0000E20FBE70120134601904A4638460CF0AF -:103CF00037F90028F2D12B464A463146384600941F -:103D000006F0D8FF0028E9D12B68EBB30025D8F8DE -:103D100000002C4624281FD00CDC212815D004DC00 -:103D200001281BD020281DD10DE0222810D02328E7 -:103D300018D10FE0402813D041282DD0A0282DD035 -:103D4000A1280FD12CE0184D00E0184D9C1C09E073 -:103D5000174DFBE7174DF9E7174DF7E7174D00E053 -:103D6000174D1C462038032806D84A4631463846A7 -:103D70000CF02EF90028B1D123464A463146384688 -:103D8000009508F05DFE00E001E00028A6D1019852 -:103D9000B04207D00920A1E70A4DE2E70A4DE0E76B -:103DA0000A4DDEE7002099E7A5490200F1750200FF -:103DB0005D8A02001F730200319E0200DD3D020099 -:103DC00065490200E1480200C7870200B987020086 -:103DD00013460A46014669200AF084BF18B112B1A1 -:103DE0000BB10CF0F5B80E20704738B568B162B170 -:103DF0005BB11C466B460CF0EBF8002804D19DF833 -:103E0000001001F00101217038BD0E2038BD08B549 -:103E100051B14BB140B1007800F001008DF80000C5 -:103E200068460CF0F9F808BD0E2008BD2DE9F843EE -:103E300016465FEA00082BD056B34BB3164F1C460C -:103E40000D46009708F01AFE002822D1631C324666 -:103E500029464046009708F011FE002819D1A31CFE -:103E60003246294640460CF0B3F8002811D1E31C35 -:103E70003246294640460CF0ABF8002809D101B083 -:103E8000231D324629464046BDE8F0430CF0A0B859 -:103E90000E20BDE8F883000069A502002DE9F84373 -:103EA0001D4690460E002AD04DB340B3154F044630 -:103EB000009708F03DFE002822D12B4642463146AD -:103EC000601C009708F034FE002819D12B464246AA -:103ED0003146A01C0CF0A0F8002811D12B46424618 -:103EE0003146E01C0CF098F8002809D101B02B46AF -:103EF00042463146201DBDE8F0430CF08DB80E203F -:103F0000BDE8F883A7A50200F8B5144606000D46E3 -:103F10001ED0ECB100200090631C6A4630460CF0C5 -:103F200057F8002813D123466A46294630460CF03C -:103F30004FF800280BD1631D6A46294630460CF025 -:103F400047F8002803D10099A94200D00920F8BD04 -:103F50000E20F8BD17B581B0144669B164B10020D8 -:103F600000906B4601A822680CF011F8002801D1DE -:103F70000099216004B010BD0E20FBE728B111B1FB -:103F80000078602803D0072070470E207047012971 -:103F900001D0092070470020704713460A460146A9 -:103FA00060200AF09FBE30B41AB313B308B304887C -:103FB000332C7DD020DC332C7BD2DFE804F0FE569E -:103FC00053FEFEFEFEFEFEFEFEFEFEFEFEFE7D77C4 -:103FD000595F6268836B86656E7471F8805CFB8CD8 -:103FE000898F92FEFEFEFEFEFEFEFEFEFEFEA5B4E4 -:103FF00095000E2030BC7047532C7DD018DC3A2C35 -:104000007BD008DCA4F13404062C52D2DFE804F0A3 -:104010009172828E887F502C70D004DC3B2C7CD037 -:104020003C2C46D190E0512C6AD0522C41D19DE0DD -:10403000722C66D00EDC572C7DD006DC542C7BD045 -:10404000552C7AD0562C34D184E0702C76D0712C3B -:104050002FD197E0733C052C2BD2DFE804F0999C1C -:104060009FA2A50030BC00F02BB930BC00F074B9A1 -:1040700030BC01F0B5BA30BC01F0EABA30BC01F096 -:10408000BDBE30BC01F04ABE30BC01F0FBB930BC53 -:1040900001F00CBD30BC01F0C1B930BC01F02CBB4B -:1040A00030BC01F0C5BD30BC01F040BF30BC01E008 -:1040B0001DE082E001F036BC30BC01F063BB30BCD7 -:1040C00001F0E2BE30BC01F078BC30BC01F0A8BC0D -:1040D00030BC01F02FBD30BC01F072BD30BC01F02E -:1040E000E9BB30BC01F0AEBB30BC03F05FBB30BC01 -:1040F00003F09ABC30BC05E029E022E030E00CE09F -:1041000031E042E003F0C4BB30BC03F0C1BD30BCC1 -:1041100003F04EBD30BC03F02BBE30BC03F00CBF2F -:1041200030BC03F09FBF30BC03F092BE30BC03F044 -:104130001BBC30BC03E01FE00FE01AE01FE003F0FF -:10414000ADBA30BC03F0E2BC30BC03F046BF30BCBB -:1041500004F03CBD30BC04F0B9BE30BC04F04CBE31 -:1041600030BC04F0F3BE30BC04F0C6BD30BC04F07B -:104170006DBE30BC04F0EABC30BC04F066BD30BC9F -:1041800006F024B830BC05F0DDBF30BC05F09ABFA6 -:1041900030BC05F0B8BE30BC05F048BF30BC05F0FF -:1041A00077BE30BC05F0E1BE30BC06F059B830BC7B -:1041B00001F0B6B830BC01F06FBD062000211960D7 -:1041C00018E700002DE9F04701883B4E40F2F31953 -:1041D0004FF6FF7510291BD011293ED0122954D05B -:1041E000502946D1C188F289841D914241D161890B -:1041F00002293ED18688304609F0F0F8050038D013 -:1042000004F10C0006F0E4F9A8B3294630464EE06C -:10421000C17B8788044601292BD1A846284609F08E -:10422000DDF8050017D02F80002028722348434670 -:104230004A460168C5F80A104068C5F80E0004F146 -:10424000100105F10A0009F01DF96872F0890028D3 -:104250000FD129462AE0042013E0808809F0BEF837 -:10426000040006D06068FFF753FC08B10AF032FD85 -:104270002580BDE8F087FFE76868FFF749FC002864 -:10428000F7D0BDE8F0470AF025BD878806463846D6 -:1042900009F0A4F80400ECD02B464A4606F10801C8 -:1042A00004F10A0009F0EEF8607221463846BDE8D4 -:1042B000F04708F049B80000F8CC002080B3002097 -:1042C0002DE9FE431D461646040007D036B12DB138 -:1042D0002088022804D00720BDE8FE830E20FBE7DB -:1042E00000270197D5F8008002200DF10409ADF8F0 -:1042F00008004B464246314602A80BF017FE002844 -:10430000EAD14B4642463146201D0BF00FFE0028F5 -:10431000E2D14B464246314604F108000BF07CFEE8 -:104320000028D9D14B464246314604F110000BF02B -:10433000FDFD0028D0D100974B4642463146E0684B -:1043400006F0E6FC0028C7D1A08806F0A9FD0028E9 -:10435000C2D101992960BFE72DE9FC411D461646EF -:10436000040007D036B12DB12088012804D00720E1 -:10437000BDE8FC810E20FBE7002000902F680120A3 -:10438000E846ADF8040043463A46314601A80BF032 -:10439000CDFD0028ECD143463A463146201D0BF0B6 -:1043A000C5FD0028E4D143463A46314604F10800F1 -:1043B0000BF032FE0028DBD100992960D8E77CB5EC -:1043C0000C4640B12CB100230193057801A96D2D55 -:1043D00003D007207CBD0E207CBD0125CDE9003532 -:1043E00013460A46214606F065FC0028F4D10198E0 -:1043F000A04201D009207CBD00207CBD2DE9FF41F9 -:1044000082B0984614460F0028D03CB3002000909C -:1044100025686D206E468DF8040033462A4601A8B3 -:104420000BF0FAFD002816D133462A46394602A879 -:104430000BF0ADFD00280ED1029848B95FEA0800E4 -:1044400039462A46334609D000F05AF8002802D1EE -:1044500000982060002006B0BDE8F0810E20FAE749 -:104460001CB50C4640B12CB100210191037801A983 -:104470006C2B03D007201CBD0E201CBD0123019313 -:10448000074B009313460A46214606F013FC00280A -:10449000F3D10198A04201D009201CBD00201CBD11 -:1044A000B144020013460A4601466C200AF01ABCC9 -:1044B0002DE9FC411646070020D0FEB1F3B11C46A1 -:1044C0000D4601AB0BF084FD002815D106200090AD -:1044D000631C3246294638460BF0ABFD00280BD151 -:1044E0009DF80420217862F3000121709DF80420DA -:1044F000520862F347012170BDE8FC810E20FBE702 -:104500002DE9FC411D4617460E0013D095B188B128 -:10451000044600788DF8040001A80BF07DFD00280A -:1045200006D13B4632460621601C00950BF097FDF4 -:10453000BDE8FC810E20FBE738B5D0B1CAB1C3B1EC -:104540001C466B460BF044FD002811D19DF800205D -:10455000217862F3000121709DF80020520862F377 -:10456000410121709DF80020920862F382012170C0 -:1045700038BD0E2038BD2DE9FC410C46DDE908862A -:10458000050023D02CB100200190287801AF7228BB -:1045900002D00720BDE8FC8101200190B3B1AEB18B -:1045A000009313463A46284608F0C9FF0028F1D187 -:1045B00043463A4621462846009608F0C0FF0028A8 -:1045C000E8D10198A04203D00920E3E70E20E1E7FB -:1045D0000020DFE713460A46014672200AF082BB3C -:1045E000F8B51646070037D0AEB3A3B31C460D4648 -:1045F0000BF0EEFC00282DD118480090231D324608 -:104600002946384606F056FB002823D104F108035A -:104610003246294638460BF0DBFC00281AD104F15B -:104620000A033246294638460BF071FC002811D1A6 -:1046300004F10C033246294638460BF068FC00288A -:1046400008D10748009004F10E0332462946384647 -:1046500008F000FAF8BDFFE70E20FBE7B1440200C6 -:10466000394502002DE9FC411F460C46050026D0C5 -:104670002CB100200190287801AE732802D00720C9 -:10468000BDE8FC8101200190CAB11068B8B1406852 -:10469000A8B10D48134600903246284606F00AFBA2 -:1046A0000028EDD13B463246214628460BF090FCCF -:1046B0000028E5D10198A04203D00920E0E70E20B0 -:1046C000DEE70020DCE70000E145020013460A4671 -:1046D000014673200AF006BB13460A4601467420C1 -:1046E0000AF000BB7CB50C46D0B12CB1002301937D -:1046F000057801A9792D01D007207CBD0125019500 -:1047000072B1156865B1009313460A46214606F05A -:10471000D1FA0028F1D10198A04203D009207CBD34 -:104720000E207CBD00207CBD2DE9FF4184B0984661 -:1047300014460F0019D0C4B10020019025687920DB -:1047400001AE8DF8080033462A4602A80BF064FC3F -:1047500000280BD133462A46394604A80BF017FC33 -:10476000002803D1049870B903E00E2008B0BDE81A -:10477000F0810748009033462A463946404606F005 -:10478000C7FA0028F2D1019820600020EEE700006F -:104790002DFF020038B50C46B8B12CB100210091B4 -:1047A00003786946782B01D0072038BD0123009398 -:1047B0005AB113460A4621460BF0A9FB0028F4D152 -:1047C0000098A04203D0092038BD0E2038BD00203B -:1047D00038BD13460A46014678200AF083BA2DE90F -:1047E000FE431F46DDF828800C46050022D0F4B1B8 -:1047F00000200290287802AE802818D10120029073 -:10480000C2B1BFB11346324628460BF080FB0028E8 -:104810000ED13B463246214628460BF0D9FB0028F4 -:1048200006D1387840B1012808D0022808D00720E6 -:10483000BDE8FE830E20FBE7002202E0062200E036 -:10484000102200920192434632462146284606F045 -:1048500027F90028ECD10298A04201D00920E7E70F -:104860000020E5E713460A46014680200AF03ABADE -:104870002DE9FC411C460D46060025D02DB1002037 -:104880000190307801AF7E2802D00720BDE8FC817E -:1048900001200190C2B1BCB12068A8B113463A46CC -:1048A00030460BF034FB0028F0D109480090234635 -:1048B0003A462946304606F0FDF90028E6D101982F -:1048C000A84203D00920E1E70E20DFE70020DDE762 -:1048D000B16F020013460A4601467E200AF002BA72 -:1048E0002DE9FE4316465FEA000836D0A6B39BB317 -:1048F0005F891B4800901C460D46404608F0AAF808 -:10490000002827D102AB3246294640460BF060FB17 -:1049100000281FD19DF8080004F1080300F00300EF -:1049200060703246294640460BF0F1FA002811D15A -:1049300004F10A033246294640460BF0E8FA002803 -:1049400008D12089231DCDE9007032462946404612 -:1049500006F0A6F8BDE8FE83FFE70E20FAE70000A8 -:10496000A94B02002DE9F0411646070017D0B6B159 -:10497000ABB11C460D460BF02BFB002810D1631C7D -:104980003246294638460BF023FB002808D1A31CE9 -:10499000324629463846BDE8F0410BF019BB0E20DF -:1049A000BDE8F0812DE9F041164607000FD076B141 -:1049B0006BB11C460D460BF00BFB002808D1A31C65 -:1049C000324629463846BDE8F0410BF0A0BA0E2029 -:1049D000BDE8F0812DE9FC411C460D46060025D0BE -:1049E0002DB100200190307801AF752802D007204A -:1049F000BDE8FC8101200190C2B1BCB12068A8B122 -:104A000013463A4630460BF082FA0028F0D10948A6 -:104A1000009023463A462946304606F04BF90028D6 -:104A2000E6D10198A84203D00920E1E70E20DFE794 -:104A30000020DDE7454A020013460A46014675207C -:104A40000AF050B92DE9F041164607001FD0F6B123 -:104A5000EBB11C460D460BF05AFA002818D1A31CE6 -:104A60003246294638460BF052FA002810D1231D51 -:104A70003246294638460BF04AFA002808D1A31DD1 -:104A8000324629463846BDE8F0410BF040BA0E20C8 -:104A9000BDE8F0812DE9F0411D4617460E001ED0FD -:104AA000EDB1E0B104460BF041FA002818D12B46D5 -:104AB0003A463146A01C0BF039FA002810D12B469B -:104AC0003A463146201D0BF031FA002808D12B461A -:104AD0003A463146A01DBDE8F0410BF027BA0E2042 -:104AE000BDE8F0812DE9FC4198460C46050021D037 -:104AF0002CB100260196287801AF872802D0072024 -:104B0000BDE8FC8101200190A2B113463A46284637 -:104B10000BF0FDF90028F3D143463A4621462846DA -:104B2000009606F0C7F80028EAD10198A04203D009 -:104B30000920E5E70E20E3E70020E1E72DE9FF414A -:104B400084B01C46150088461AD0CCB100200190D4 -:104B50002668872001AF8DF808003B46324629467B -:104B600002A80BF059FA00280BD13B4632462946E1 -:104B700004A80BF00CFA002803D1049870B903E0E4 -:104B80000E2008B0BDE8F081064800903B46324652 -:104B90002946404606F0BCF80028F2D10198206072 -:104BA0000020EEE7F54B020038B5A0B19AB193B101 -:104BB0001C466B460BF00CFA00280BD19DF8002028 -:104BC000217862F3030121709DF80020120962F33D -:104BD0000711217038BD0E2038BD08B541B13BB179 -:104BE00030B100788DF8000068460BF015FA08BD6A -:104BF0000E2008BDF8B51D4617460E0012D08DB127 -:104C000080B1044608480090204607F055FF002870 -:104C100009D101B02B463A463146601CBDE8F04050 -:104C20000BF0FAB90E20F8BDDB4B020013460A4622 -:104C300001468D200AF056B82DE9FC471D46DDE9F6 -:104C40000A490E46070040D036B10020019038785E -:104C50000DF104088C2802D00720BDE8FC87012054 -:104C600001908AB3106878B375B3286860B35CB3F9 -:104C7000206848B31748134600904246384606F06D -:104C800019F80028E9D1144800902B4642463146D5 -:104C9000384606F00FF80028DFD110480090234670 -:104CA00042463146384606F005F80028D5D14B4635 -:104CB0004246314638460BF08BF90028CDD1019899 -:104CC000B04204D00920C8E7FFE70E20C5E7002066 -:104CD000C3E70000B14402000D6B0200454A020028 -:104CE00013460A4601468C2009F0FCBF2DE9F0412D -:104CF0001D4617460E0016D0ADB1A0B104460BF00C -:104D000015F9002810D12B463A463146A01C0BF06D -:104D10000DF9002808D12B463A463146201DBDE842 -:104D2000F0410BF003B90E20BDE8F0812DE9F04110 -:104D3000164607001FD0F6B1EBB11C460D460BF02E -:104D4000E6F8002818D1A31C3246294638460BF055 -:104D5000DEF8002810D1231D3246294638460BF0D4 -:104D6000D6F8002808D1A31D324629463846BDE8AA -:104D7000F0410BF0CCB80E20BDE8F0812DE9F041F8 -:104D80001D4617460E001ED0EDB1E0B104460BF0F3 -:104D9000CDF8002818D12B463A463146A01C0BF01E -:104DA000C5F8002810D12B463A463146201D0BF09D -:104DB000BDF8002808D12B463A463146A01DBDE873 -:104DC000F0410BF0B3B80E20BDE8F0812DE9FC47AF -:104DD0009846DDF828900C46050009D02CB1002635 -:104DE0000196287801AF902804D00720BDE8FC8701 -:104DF0000E20FBE70120134601903A4628460BF0AF -:104E000086F80028F2D10D48009043463A462146E4 -:104E1000284605F04FFF0028E8D14B463A46214688 -:104E20002846009605F046FF0028DFD10198A042F1 -:104E300001D00920DAE70020D8E700002D4D02005C -:104E40002DE9FF4184B0984614460F0019D0C4B133 -:104E5000002001902568902001AE8DF808003346AF -:104E60002A4602A80BF0D8F800280BD133462A4670 -:104E7000394604A80BF08BF8002803D1049870B9C8 -:104E800003E00E2008B0BDE8F081074800903346EB -:104E90002A463946404605F03BFF0028F2D10198EA -:104EA00020600020EEE70000ED4C02002DE9FF5FDE -:104EB0001D460E9F144688465FEA000942D0B8F1AD -:104EC000000F07D0002602A8CDE9010699F80000DE -:104ED0006F2803D0072004B0BDE8F09F01200290A6 -:104EE0007CB3206868B3006858B355B3286840B3F2 -:104EF000006830B33B4641464846019A0BF068F8DB -:104F00000028E8D103AB41464846019A0BF060F80F -:104F10000028E0D19DF80C00012815D0266003ABD5 -:104F200041464846019A0BF053F80028D3D19DF82A -:104F30000C0001281ED02E60029941452DD0092079 -:104F4000C9E7FFE70E20C6E7D4F800A00024DFF889 -:104F500050B00BE00AEB8403CDF800B04146484660 -:104F6000019A05F0A7FE0028B5D1641C3878A0424C -:104F7000F0D8D4E72D6800240A4E0AE005EB84033C -:104F8000009641464846019A05F094FE0028A2D1B9 -:104F9000641C3878A042F1D8CEE700209BE70000DF -:104FA000955F02001560020013460A4601466F2015 -:104FB00009F098BE2DE9FC4190460C46050022D030 -:104FC0002CB100260196287801AF7D2802D0072059 -:104FD000BDE8FC8101200190ABB10D4800903A463C -:104FE000284605F067FE0028F2D143463A4621469E -:104FF0002846009605F05EFE0028E9D10198A042FF -:1050000003D00920E4E70E20E2E70020E0E70000FB -:105010000FFF02002DE9FF4383B01E000E9C1546D2 -:1050200089461BD0D4B100200190D4F800807D20A7 -:1050300001AF8DF808003B464246314602A80AF00F -:10504000EBFF00280BD13B464246314603A80AF04D -:105050009EFF002803D10398C0B903E00E2007B0DB -:10506000BDE8F0830B4800903B4642463146284657 -:1050700005F04EFE0028F2D145B10097298843463D -:10508000324648460AF0EBFF0028E8D1019820603C -:105090000020E4E72DFF02002DE9FC419846089E20 -:1050A0000C46050027D02CB100200190287801AFD4 -:1050B0007C2802D00720BDE8FC8101200190D2B1FC -:1050C000B8F1000F17D0B6B10D48134600903A461C -:1050D000284605F0EFFD0028EDD143463A4621462B -:1050E0002846009608F0FBF90028E4D10198A04278 -:1050F00003D00920DFE70E20DDE70020DBE700001A -:10510000A94B020013460A4601467C2009F0EABD7D -:10511000F8B51F460C46050020D02CB100200090A9 -:1051200028786E46762801D00720F8BD012000902F -:10513000A2B19FB11346324628460AF0E8FE002885 -:10514000F3D13B463246214628460AF041FF00286B -:10515000EBD10098A04203D00920F8BD0E20F8BD85 -:105160000020F8BD13460A460146762009F0BABD74 -:105170002DE9FC411646070020D0FEB1F3B1102006 -:1051800000901C460D4638460AF053FF002813D104 -:1051900001AB3246294638460AF01AFF00280BD1E7 -:1051A0009DF80410227C4B0861F3000263F3410276 -:1051B000890861F387022274BDE8FC810E20FBE7B9 -:1051C0002DE9FC411D4617460E001DD0E5B1D8B1B2 -:1051D00013460A460446102100950AF040FF0028B5 -:1051E00010D1207C2B46C0F34002014662F35F01E0 -:1051F00020F0030001438DF804103A46314601A81F -:105200000AF00AFFBDE8FC810E20FBE7F8B5164660 -:10521000070014D09EB193B10A4800901C460D4679 -:10522000384607F017FC002808D10748009004F121 -:10523000120332462946384607F00CFCF8BD0E2012 -:10524000F8BD00007151020071630200F8B51D46FF -:1052500017460E0013D095B188B104460948009056 -:10526000204607F029FC002808D1074800902B466B -:105270003A46314604F1120007F01EFCF8BD0E203C -:10528000F8BD0000C15102009F6302002DE9FC41FE -:105290001D46089C0E46070033D036B10020019011 -:1052A00038780DF10408852802D00720BDE8FC817C -:1052B000012001902AB324B31DB3206808B32868E5 -:1052C000F8B11346424638460AF021FE0028EDD1D7 -:1052D0000E4800902B4642463146384605F0EAFC1F -:1052E0000028E3D10A48009023464246314638461A -:1052F00005F0E0FC0028D9D10198B04203D0092084 -:10530000D4E70E20D2E70020D0E70000716302004E -:105310007151020013460A460146852009F0E2BC9D -:105320002DE9FE431D461646040007D036B12DB1C7 -:1053300020881D2804D00720BDE8FE830E20FBE74F -:10534000002001902F681D200DF10408ADF8080021 -:1053500043463A46314602A80AF0E8FD0028EBD160 -:1053600043463A463146201D0AF0E0FD0028E3D1CD -:105370000648009043463A46314604F1080007F0DB -:1053800091FB0028D8D101992960D5E791530200FB -:105390002DE9FC471D4691460E003AD0C5B3B8B37F -:1053A0000446C07B1C4FC0F34102014662F35F011B -:1053B0008DF804104FEAD0084A463146204600973F -:1053C00007F07AFB002821D12B464A463146E01DE2 -:1053D000009707F071FB002818D12B464A4631464A -:1053E00004F10E000AF018FE00280FD12B464A46A1 -:1053F000314601A80AF010FE002807D14B4632467C -:10540000414604F11000009508F0B1F8BDE8FC87B2 -:10541000FFE70E20FAE70000014502002DE9FC41FC -:105420001D461646040007D036B12DB12088172836 -:1054300004D00720BDE8FC810E20FBE7002000908F -:105440002F681720E846ADF8040043463A46314637 -:1054500001A80AF06BFD0028ECD143463A463146DC -:10546000201D0AF063FD0028E4D143463A46314648 -:1054700004F108000AF0D0FD0028DBD10099296072 -:10548000D8E700002DE9FF411D461646040008D06C -:105490003EB135B12088192805D0072004B0BDE8F9 -:1054A000F0810E20FAE7002001902F6819200DF1FD -:1054B0000408ADF8080043463A46314602A80AF00F -:1054C00035FD0028EAD143463A463146201D0AF010 -:1054D0002DFD0028E2D11648009043463A46314659 -:1054E00004F1080007F0DEFA0028D7D1A08803A94C -:1054F00005F06CFC18B1002001992960CEE70D4839 -:10550000009003980C49C0EB001000EB800001EB09 -:10551000800043463A463146001D07F0C3FA002892 -:10552000BCD1A08805F034FC0028E5D0B6E7000027 -:105530003D550200356E020094CF00202DE9FC415C -:105540001D4690460E0045D0F5B3E8B341780446B9 -:10555000C1F38002084662F39F00C1F3C00140EA34 -:10556000C1008DF804004246314620460AF054FD41 -:1055700000282DD12B464246314601A80AF04CFDA9 -:10558000002825D1144F2B4642463146A01C0097D7 -:1055900007F092FA00281BD12B4642463146E01C08 -:1055A000009707F089FA002812D10C4F2B4642468B -:1055B0003146201D009707F07FFA002808D12B46BE -:1055C00042463146601D00E004E0009707F074FA9F -:1055D000BDE8FC810E20FBE7716E0200E76C020063 -:1055E0002DE9FE431D461646040007D036B12DB105 -:1055F0002088122804D00720BDE8FE830E20FBE798 -:10560000002001902F6812200DF10408ADF8080069 -:1056100043463A46314602A80AF088FC0028EBD1FE -:1056200043463A463146201D0AF080FC0028E3D16B -:105630000648009043463A46314604F1080007F018 -:1056400031FA0028D8D101992960D5E7DD5602004A -:105650002DE9FE431D461646040007D036B12DB194 -:1056600020881F2804D00720BDE8FE830E20FBE71A -:10567000002001902F681F200DF10408ADF80800EC -:1056800043463A46314602A80AF050FC0028EBD1C6 -:1056900043463A463146201D0AF048FC0028E3D133 -:1056A0000648009043463A46314604F1080007F0A8 -:1056B000F9F90028D8D101992960D5E7C15602002F -:1056C00038B531B12BB120B1034C009407F0F4F997 -:1056D00038BD0E2038BD0000954A020038B531B102 -:1056E0002BB120B1034C009407F0E6F938BD0E2031 -:1056F00038BD0000954A02002DE9FE431D461646BE -:10570000040007D036B12DB120881A2804D0072014 -:10571000BDE8FE830E20FBE7002001902F681A20D1 -:105720000DF10408ADF8080043463A46314602A898 -:105730000AF0FCFB0028EBD143463A463146201DD7 -:105740000AF0F4FB0028E3D10648009043463A46AD -:10575000314604F1080007F0A5F90028D8D10199D5 -:105760002960D5E76957020038B531B12BB120B1B6 -:10577000034C009407F0A0F938BD0E2038BD00009E -:10578000F54B02002DE9FE431D461646040007D0E6 -:1057900036B12DB12088102804D00720BDE8FE8343 -:1057A0000E20FBE7002001902F6810200DF1040867 -:1057B000ADF8080043463A46314602A80AF0B6FB67 -:1057C0000028EBD143463A463146201D0AF0AEFB95 -:1057D0000028E3D10648009043463A46314604F19A -:1057E000080007F05FF90028D8D101992960D5E7B2 -:1057F000F5570200F8B51D4617460E001BD0D5B16F -:10580000C8B104460D480090204607F055F900281D -:1058100010D12B463A463146E01D0AF0FDFB002828 -:1058200008D1074800902B463A46314604F108005B -:1058300007F042F9F8BD0E20F8BD00000145020056 -:10584000954A02002DE9FE431D461646040007D086 -:1058500036B12DB12088242804D00720BDE8FE836E -:105860000E20FBE7002001902F6824200DF1040892 -:10587000ADF8080043463A46314602A80AF056FB06 -:105880000028EBD143463A463146201D0AF04EFB34 -:105890000028E3D10648009043463A46314604F1D9 -:1058A000080007F0FFF80028D8D101992960D5E752 -:1058B0007D4D02002DE9FE431D461646040007D02B -:1058C00036B12DB12088232804D00720BDE8FE83FF -:1058D0000E20FBE7002001902F6823200DF1040823 -:1058E000ADF8080043463A46314602A80AF01EFBCE -:1058F0000028EBD143463A463146201D0AF016FBFC -:105900000028E3D10648009043463A46314604F168 -:10591000080007F0C7F80028D8D101992960D5E719 -:105920007D4D02002DE9FF411D461646040008D0BA -:105930003EB135B12088112805D0072004B0BDE85C -:10594000F0810E20FAE7002001902F6811200DF160 -:105950000408ADF8080043463A46314602A80AF06A -:10596000E5FA0028EAD143463A463146201D0AF0BE -:10597000DDFA0028E2D10C48009043463A46314611 -:1059800004F1080007F08EF80028D7D1A08803A9F9 -:1059900005F01CFA20B9A08805F0FAF90028CDD14D -:1059A000019900202960C9E7AD59020019B113B16E -:1059B00008B10AF031BB0E2070472DE9FC411D46AD -:1059C0001646040007D036B12DB12088162804D021 -:1059D0000720BDE8FC810E20FBE7002000902F6827 -:1059E0001620E846ADF8040043463A46314601A881 -:1059F0000AF09CFA0028ECD143463A463146201D75 -:105A00000AF094FA0028E4D143463A46314604F1BC -:105A100008000AF001FB0028DBD100992960D8E7D3 -:105A20002DE9FF411D461646040008D03EB135B1B0 -:105A30002088182805D0072004B0BDE8F0810E208A -:105A4000FAE7002001902F6818200DF10408ADF846 -:105A5000080043463A46314602A80AF067FA002891 -:105A6000EAD1207B434600F001008DF80C003A4655 -:105A70003146201D0AF05AFA0028DDD10A4800906C -:105A800043463A463146A06805F042F90028D3D192 -:105A900043463A46314603A80AF0BEFA0028CBD165 -:105AA00001992960C8E70000576302002DE9FF4112 -:105AB0001D46904604000AD0B8F1000F07D035B15A -:105AC0002088152805D0072004B0BDE8F0810E20FD -:105AD000FAE7002001902F68152001AEADF808000C -:105AE00033463A46414602A80AF020FA0028EBD194 -:105AF000A07B334600F001008DF80C003A46414689 -:105B0000201D0AF013FA0028DED13B46424606214A -:105B100004F1080000960AF0A2FA0028D4D1334616 -:105B20003A46414603A80AF077FA0028CCD10199F9 -:105B30002960C9E72DE9FC411D461646040007D03F -:105B400036B12DB12088222804D00720BDE8FC8181 -:105B50000E20FBE7002000902F682220E846ADF8D9 -:105B6000040043463A46314601A80AF0DFF900280E -:105B7000ECD143463A463146201D0AF0D7F90028B9 -:105B8000E4D143463A46314604F108000AF044FAAB -:105B90000028DBD143463A46314604F109000AF0B9 -:105BA0003BFA0028D2D143463A46314604F10A0076 -:105BB0000AF032FA0028C9D100992960C6E700002E -:105BC0002DE9FE431D461646040007D036B12DB11F -:105BD0002088212804D00720BDE8FE830E20FBE7A3 -:105BE000002001902F6821200DF10408ADF8080075 -:105BF00043463A46314602A80AF098F90028EBD10C -:105C000043463A463146201D0AF090F90028E3D178 -:105C10000648009043463A46314604F1080006F033 -:105C200041FF0028D8D101992960D5E79966020083 -:105C30002DE9FC411D461646040007D036B12DB1B2 -:105C400020881C2804D00720BDE8FC810E20FBE73B -:105C5000002000902F681C20E846ADF80400434661 -:105C60003A46314601A80AF061F90028ECD14346D2 -:105C70003A463146201D0AF059F90028E4D143463E -:105C80003A46314604F108000AF0C6F90028DBD193 -:105C900000992960D8E700002DE9FE431D4616460D -:105CA000040007D036B12DB12088202804D0072069 -:105CB000BDE8FE830E20FBE7002001902F68202026 -:105CC0000DF10408ADF8080043463A46314602A8F3 -:105CD0000AF02CF90028EBD143463A463146201D04 -:105CE0000AF024F90028E3D10B48009043463A46D5 -:105CF000314604F1090006F0D5FE0028D8D143460C -:105D00003A46314604F108000AF086F90028CFD15E -:105D100001992960CCE70000014502002DE9FE430E -:105D20001D461646040007D036B12DB12088142830 -:105D300004D00720BDE8FE830E20FBE70020019081 -:105D40002F6814200DF10408ADF8080043463A46C8 -:105D5000314602A80AF0EAF80028EBD143463A4659 -:105D60003146201D0AF0E2F80028E3D106480090F1 -:105D700043463A46314604F1080006F093FE0028F7 -:105D8000D8D101992960D5E78D5D02002DE9FC414C -:105D90001D4617460E002AD04DB340B30446807C02 -:105DA000C0F34002014662F35F01C0F3800041EAA4 -:105DB00080008DF804000F4800903A463146204696 -:105DC00006F07AFE002810D10B4800902B463A4688 -:105DD000314604F1080006F06FFE002805D12B467D -:105DE0003A46314601A80AF017F9BDE8FC810E20B9 -:105DF000FBE70000014502009F6302002DE9FE431E -:105E00001D461646040007D036B12DB12088132850 -:105E100004D00720BDE8FE830E20FBE700200190A0 -:105E20002F6813200DF10408ADF8080043463A46E8 -:105E3000314602A80AF07AF80028EBD143463A46E8 -:105E40003146201D0AF072F80028E3D10648009080 -:105E500043463A46314604F1080006F023FE002886 -:105E6000D8D101992960D5E76D5E020038B531B10E -:105E70002BB120B1034C009406F01EFE38BD0E205D -:105E800038BD00006D7002002DE9FE431D46164628 -:105E9000040007D036B12DB120881E2804D0072079 -:105EA000BDE8FE830E20FBE7002001902F681E2036 -:105EB0000DF10408ADF8080043463A46314602A801 -:105EC0000AF034F80028EBD143463A463146201D0B -:105ED0000AF02CF80028E3D10648009043463A46E1 -:105EE000314604F1080006F0DDFD0028D8D1019903 -:105EF0002960D5E7F95E020038B5A9B1A3B198B120 -:105F00000078C0F34005044665F35F04C0F38005E4 -:105F100044EA8504C0F3C00044EAC0008DF80000E4 -:105F200068460AF079F838BD0E2038BD2DE9FC41ED -:105F30001D461646040007D036B12DB120881B2817 -:105F400004D00720BDE8FC810E20FBE70020009074 -:105F50002F681B20E846ADF8040043463A46314618 -:105F600001A809F0E3FF0028ECD143463A46314648 -:105F7000201D09F0DBFF0028E4D143463A463146B4 -:105F800004F108000AF048F80028DBD100992960E4 -:105F9000D8E70000F8B51646070014D09EB193B1BB -:105FA0000A4800901C460D46384606F053FD00286E -:105FB00008D10748009004F11003324629463846BC -:105FC00006F048FDF8BD0E20F8BD00001560020087 -:105FD000B1440200F8B51D4617460E0013D095B126 -:105FE00088B1044609480090204606F065FD002867 -:105FF00008D1074800902B463A46314604F110007C -:1060000006F05AFDF8BD0E20F8BD00002B6002001E -:106010000145020038B530B12AB123B110240094F3 -:106020000AF007F838BD0E2038BD08B541B13BB1C4 -:1060300030B1009313460A4610210AF010F808BD4B -:106040000E2008BDF8B51F460C46050020D02CB127 -:106050000020009028786E46822801D00720F8BDE5 -:1060600001200090A2B19FB113463246284609F0A4 -:106070004EFF0028F3D13B4632462146284609F020 -:10608000A7FF0028EBD10098A04203D00920F8BD5B -:106090000E20F8BD0020F8BD13460A4601468220B6 -:1060A00008F020BE2DE9FC411F460C46050023D018 -:1060B0002CB100200190287801AE812802D0072061 -:1060C000BDE8FC8101200190B2B1AFB11346324668 -:1060D000284609F01CFF0028F2D1094800903B46F1 -:1060E00032462146284604F0E5FD0028E8D1019813 -:1060F000A04203D00920E3E70E20E1E70020DFE71C -:106100001161020013460A460146812008F0EABDEB -:1061100038B530B12AB123B12024009409F089FFA9 -:1061200038BD0E2038BD00002DE9FC479846DDF84B -:1061300028900C46050031D02CB100260196287815 -:1061400001AF832802D00720BDE8FC870120019021 -:1061500022B35FEA090021D0B8F1000F1ED0134628 -:106160003A46284609F0D3FE0028EDD10D480090AC -:1061700043463A462146284604F09CFD0028E3D1D8 -:106180004B463A4621462846009604F093FD0028E7 -:10619000DAD10198A04203D00920D5E70E20D3E739 -:1061A0000020D1E7416302002DE9FF4184B01C4685 -:1061B000150088461AD0CCB10020019026688320B3 -:1061C00001AF8DF808003B463246294602A809F087 -:1061D00023FF00280BD13B463246294604A809F08C -:1061E000D6FE002803D1049870B903E00E2008B051 -:1061F000BDE8F081064800903B46324629464046BD -:1062000004F086FD0028F2D1019820600020EEE71E -:10621000F56202002DE9FC479846DDF828900C460F -:10622000050031D02CB100200190287801AE8428DF -:1062300002D00720BDE8FC870120019022B3B8F10D -:10624000000F21D05FEA09001ED0134632462846CF -:1062500009F05DFE0028EDD10D4F43463246214640 -:106260002846009704F026FD0028E3D14B4632462D -:1062700021462846009704F01DFD0028DAD1019838 -:10628000A04203D00920D5E70E20D3E70020D1E7B4 -:10629000A162020013460A460146842008F022BD8E -:1062A0002DE9F84316465FEA00081ED0EEB1E3B1CF -:1062B0000F4800901C460D46404606F0CBFB0028D8 -:1062C00011D11027E31D324629464046009709F0B8 -:1062D000B0FE002807D104F1170332462946404694 -:1062E000009709F0A6FEBDE8F8830E20FBE700004A -:1062F000B1440200F8B51D4617460E001BD0D5B1BB -:10630000C8B104460D480090204606F0D5FB002891 -:1063100010D13B4632461021E01D009509F09FFE4A -:10632000002807D13B463246102104F117000095A2 -:1063300009F095FEF8BD0E20F8BD000001450200F1 -:1063400038B530B12AB123B14024009409F071FE70 -:1063500038BD0E2038BD08B541B13BB130B1009316 -:1063600013460A46402109F07AFE08BD0E2008BDFA -:10637000F8B51646070010D07EB173B11C460D4625 -:1063800009F0C5FD002807D108200090A31C324663 -:106390002946384609F04DFEF8BD0E20F8BDF8B587 -:1063A0001D4617460E000ED06DB160B1044609F0CF -:1063B000BDFD002806D13B4632460821A01C0095B1 -:1063C00009F04DFEF8BD0E20F8BD2DE9F04116464E -:1063D00007000FD076B16BB11C460D4609F097FD52 -:1063E000002808D1A31C324629463846BDE8F041B2 -:1063F00009F08DBD0E20BDE8F0812DE9F0411D466C -:1064000017460E000ED06DB160B1044609F08EFD46 -:10641000002808D12B463A463146A01CBDE8F04181 -:1064200009F084BD0E20BDE8F081F8B516460700DE -:1064300010D07EB173B11C460D4609F068FD0028EE -:1064400007D105200090A31C32462946384609F0A2 -:10645000F0FDF8BD0E20F8BDF8B51D4617460E003C -:106460000ED06DB160B1044609F060FD002806D180 -:106470003B4632460521A01C009509F0F0FDF8BD11 -:106480000E20F8BD38B558B152B14BB11C466B4621 -:1064900009F09EFD002802D19DF80010217038BD42 -:1064A0000E2038BD08B551B14BB140B1007800F0B5 -:1064B00001008DF80000684609F0AEFD08BD0E2011 -:1064C00008BD0000F8B51646070018D0BEB1B3B13C -:1064D0001C460D4609F01BFD00280FD1A31C3246B7 -:1064E0002946384609F013FD002807D105480090D9 -:1064F000231D32462946384604F0DCFBF8BD0E2049 -:10650000F8BD00000FFF0200F8B51D4617460E004B -:1065100017D0B5B1A8B1044609F008FD00280FD185 -:106520002B463A463146A01C09F000FD002807D151 -:10653000054800902B463A463146606804F0E8FB77 -:10654000F8BD0E20F8BD00002DFF02001CB538B1CB -:1065500032B12BB106240094019404F0A1FA1CBDC1 -:106560000E201CBD08B549B143B138B100931346A4 -:106570000A460068062104F0C5FA08BD0E2008BDD1 -:1065800038B568B162B15BB11C466B4609F020FDBD -:10659000002804D19DF8001001F00101217038BDE0 -:1065A0000E2038BD08B551B14BB140B1007800F0B4 -:1065B00001008DF80000684609F02EFD08BD0E2090 -:1065C00008BDF8B51646070013D096B18BB11C462E -:1065D0000D4609F09CFC00280AD16B46324629463C -:1065E000384609F0F5FC002802D19DF80010A17092 -:1065F000F8BD0E20F8BD00002DE9FC411C460D46FB -:10660000060025D02DB100200190307801AF8F28F1 -:1066100002D00720BDE8FC8101200190C2B1BCB1CD -:106620002068A8B113463A46304609F070FC0028AD -:10663000F0D10948009023463A462946304604F0F6 -:1066400039FB0028E6D10198A84203D00920E1E7F0 -:106650000E20DFE70020DDE76966020013460A46E8 -:1066600001468F2008F03EBB2DE9F0411646070099 -:106670000FD076B16BB11C460D4609F0A9FC00287D -:1066800008D1631C324629463846BDE8F04109F07E -:106690009FBC0E20BDE8F0812DE9F0411D46174654 -:1066A0000E000ED06DB160B1044609F0B5FC0028B3 -:1066B00008D12B463A463146601CBDE8F04109F04E -:1066C000ABBC0E20BDE8F0817CB50C46E0B12CB12E -:1066D00000230193057801A97B2D01D007207CBD03 -:1066E0000125019582B1156875B1022C0AD300937A -:1066F00013460A46214604F0DDFA0028EFD101983E -:10670000A04203D009207CBD0E207CBD00207CBDB2 -:106710002DE9FF4184B0984614460F0019D0C4B14A -:106720000020019025687B2001AE8DF808003346DB -:106730002A4602A809F070FC00280BD133462A46ED -:10674000394604A809F023FC002803D1049870B945 -:1067500003E00E2008B0BDE8F08107480090334602 -:106760002A463946404604F0D3FA0028F2D101986F -:1067700020600020EEE70000954A02001CB50C46A0 -:10678000C8B12CB100210191037801A97A2B01D065 -:1067900007201CBD012301936AB1094B00931346E6 -:1067A0000A46214604F086FA0028F2D10198A04258 -:1067B00003D009201CBD0E201CBD00201CBD000004 -:1067C000454A020013460A4601467A2008F08ABA72 -:1067D0001CB50C4640B12CB100210191037801A9F0 -:1067E000712B03D007201CBD0E201CBD012301937B -:1067F000074B009313460A46214604F05BFA002833 -:10680000F3D10198A04201D009201CBD00201CBD7D -:10681000816802002DE9FF4184B0984614460F00BC -:1068200019D0C4B1002001902568712001AE8DF807 -:10683000080033462A4602A809F0EEFB00280BD1D7 -:1068400033462A46394604A809F0A1FB002803D1A3 -:10685000049870B903E00E2008B0BDE8F081074845 -:10686000009033462A463946404604F051FA002843 -:10687000F2D1019820600020EEE70000D568020008 -:10688000F8B51646070020D0FEB1F3B11C460D4600 -:1068900009F09EFB002817D1631C32462946384672 -:1068A00009F096FB00280FD1A31C32462946384632 -:1068B00009F02DFB002807D105480090231D324622 -:1068C0002946384604F0F6F9F8BD0E20F8BD000060 -:1068D00015600200F8B51D4617460E001FD0F5B131 -:1068E000E8B1044609F098FB002817D12B463A4638 -:1068F0003146601C09F090FB00280FD12B463A4628 -:106900003146A01C09F012FB002807D10548009071 -:106910002B463A463146606804F0FAF9F8BD0E207D -:10692000F8BD00002B6002001CB50C4640B12CB134 -:1069300000210191037801A9702B03D007201CBD11 -:106940000E201CBD01230193074B009313460A46FA -:10695000214604F0AFF90028F3D10198A04201D0FC -:1069600009201CBD00201CBD8168020013460A4698 -:106970000146702008F0B6B92DE9FC411C460D46D1 -:10698000060025D035B10027019730780DF10408B5 -:106990008E2802D00720BDE8FC8101200190BAB109 -:1069A000B4B12068A0B113464246304609F0AFFAB0 -:1069B0000028F0D12346424629463046009704F08D -:1069C00079F90028E7D10198A84203D00920E2E72D -:1069D0000E20E0E70020DEE72DE9FF4184B0984675 -:1069E00014460F0019D0C4B10020019025688E20F4 -:1069F00001AE8DF8080033462A4602A809F00CFBC8 -:106A000000280BD133462A46394604A809F0BFFABC -:106A1000002803D1049870B903E00E2008B0BDE847 -:106A2000F0810748009033462A463946404604F034 -:106A30006FF90028F2D1019820600020EEE70000F5 -:106A4000190003002DE9F8431F46DDF820800C46AD -:106A500005002CD02CB10020009028786E468828A4 -:106A600002D00720BDE8F88301200090FAB1F7B109 -:106A70005FEA08001BD013463246284609F047FA61 -:106A80000028EFD13B4632462146284609F0A0FABD -:106A90000028E7D1434632462146284609F098FAB5 -:106AA0000028DFD10098A04203D00920DAE70E20A9 -:106AB000D8E70020D6E713460A460146882008F0AA -:106AC00011B938B50C46B8B12CB10021009103784A -:106AD0006946892B01D0072038BD012300935AB1A4 -:106AE00013460A46214609F012FA0028F4D100980C -:106AF000A04203D0092038BD0E2038BD002038BD8B -:106B000013460A460146892008F0ECB8F8B5164647 -:106B1000070032D086B37BB31C460D466B4609F0A6 -:106B200057FA002827D19DF800102078A31C61F3A4 -:106B3000000020709DF800103246490861F34100C2 -:106B400020709DF80010890861F3820020702946AA -:106B5000384609F0DCF900280DD1231D32462946BC -:106B6000384609F0D4F9002805D1A31D324629463C -:106B7000384609F0CCF9F8BDFFE70E20FBE700002E -:106B80001CB50C46D8B12CB100210191037801A9A4 -:106B90008A2B01D007201CBD012301937AB1136811 -:106BA0006BB1094B009313460A46214604F082F864 -:106BB0000028F0D10198A04203D009201CBD0E206E -:106BC0001CBD00201CBD00000D6B020013460A46D0 -:106BD00001468A2008F086B813460A4601468B20F3 -:106BE00008F080B82DE9FC471E46DDE90A540F463F -:106BF0005FEA000842D03FB10020019098F8000001 -:106C00000DF10409862802D00720BDE8FC87012089 -:106C1000019092B38EB385B37CB3306868B32868B3 -:106C200058B3206848B313464A46404609F06FF906 -:106C30000028EAD11348009033464A463946404678 -:106C400004F038F80028E0D10F4800902B464A465F -:106C50003946404604F02EF80028D6D10B48009063 -:106C600023464A463946404604F024F80028CCD151 -:106C70000198B84204D00920C7E7FFE70E20C4E717 -:106C80000020C2E771510200156002000D71020080 -:106C900013460A460146862008F024B838B500B3EA -:106CA000FAB1F3B11C466B4609F092F9002817D1EE -:106CB0009DF80020217862F3000121709DF80020EA -:106CC000520862F3410121709DF80020920862F39E -:106CD000820121709DF80020D20862F3C301217067 -:106CE00038BD0E2038BD38B5A9B1A3B198B1007830 -:106CF000C0F34005044665F35F04C0F3800544EA31 -:106D00008504C0F3C00044EAC0008DF80000684666 -:106D100009F082F938BD0E2038BD0000F8B51646DE -:106D2000070029D046B33BB3144800901C460D46DB -:106D3000384603F0BFFF00281DD111480090231DE5 -:106D400032462946384603F0B5FF002813D10D48D6 -:106D5000009004F1080332462946384603F0AAFFA2 -:106D6000002808D10848009004F10C033246294657 -:106D7000384603F09FFFF8BD0E20F8BD0D5202000B -:106D8000955F02000D71020041630200F8B51D46D7 -:106D900017460E0026D02DB320B3044612480090AB -:106DA000206803F0B5FF00281BD1104800902B4647 -:106DB0003A463146606803F0ABFF002811D10C4819 -:106DC00000902B463A463146A06803F0A1FF002808 -:106DD00007D1084800902B463A463146E06803F058 -:106DE00097FFF8BD0E20F8BD4D520200D55F02009E -:106DF00023710200576302002DE9F84316465FEA4B -:106E0000000813D096B18BB1094F1C460D46009770 -:106E100005F020FE002807D104F110033246294670 -:106E20004046009705F016FEBDE8F8830E20FBE70C -:106E30001D6D02002DE9F8431D4690460E0012D04C -:106E40008DB180B1094F0446009705F035FE00284A -:106E500007D12B464246314604F11000009705F059 -:106E60002BFEBDE8F8830E20FBE700008D6D0200CD -:106E700038B5A9B1A3B198B10078C0F34005044674 -:106E800065F35F04C0F3800544EA8504C0F3C000E5 -:106E900044EAC0008DF80000684609F0BDF838BD2E -:106EA0000E2038BD2DE9FC479846DDE90A540E4610 -:106EB00007003FD036B10020019038780DF1040969 -:106EC0007F2802D00720BDE8FC870120019082B313 -:106ED000B8F1000F2ED065B3286850B34CB32068CA -:106EE00038B313464A46384609F011F80028EAD16B -:106EF00043464A463146384609F06AF80028E2D14E -:106F00000E4800902B464A463146384603F0D2FEE2 -:106F10000028D8D10A48009023464A4631463846D0 -:106F200003F0C8FE0028CED10198B04204D0092059 -:106F3000C9E7FFE70E20C6E70020C4E7B16F0200F3 -:106F4000F96D02002DE9FF4184B0984614460F0008 -:106F500019D0C4B10020019025687F2001AE8DF8C2 -:106F6000080033462A4602A809F056F800280BD13B -:106F700033462A46394604A809F009F8002803D107 -:106F8000049870B903E00E2008B0BDE8F08107480E -:106F9000009033462A463946404603F0B9FE0028A1 -:106FA000F2D1019820600020EEE70000356E02006B -:106FB0002DE9FC4116465FEA000853D0002E51D05F -:106FC000002B4FD01C460D4601AB09F001F80028FC -:106FD00046D1631C32462946404608F0F9FF002896 -:106FE0003ED1A31C32462946404608F0F1FF002856 -:106FF00036D11D4FE31C324629464046009705F026 -:1070000029FD00282CD1231D3246294640460097F1 -:1070100005F020FD002823D19DF80420217862F39B -:10702000000121709DF80420520862F34101217093 -:107030009DF80420920862F3820121709DF80420DB -:10704000D20862F3C30121709DF80420120962F393 -:10705000061121709DF80420D20962F3C711217036 -:10706000BDE8FC810E20FBE79D6C02002DE9FC4190 -:107070001D4690460E0045D0F5B3E8B304460078AF -:10708000C0F34002014662F35F01C0F3800241EAAF -:107090008201C0F3C00241EAC201C0F3021241EA18 -:1070A000021120F07F0001438DF804104246314662 -:1070B00001A808F0B1FF002822D12B4642463146F4 -:1070C000601C08F0A9FF00281AD12B464246314621 -:1070D000A01C08F0A1FF002812D10B4F2B464246FE -:1070E0003146E01C009705F0E7FC002808D12B464C -:1070F00042463146201D00E004E0009705F0DCFC2C -:10710000BDE8FC810E20FBE7E76C020038B530B12A -:107110002AB123B11024009408F08BFF38BD0E2053 -:1071200038BD08B541B13BB130B1009313460A46B2 -:10713000102108F094FF08BD0E2008BD38B50C469C -:10714000B8B12CB10021009103786946772B01D0AA -:10715000072038BD012300935AB113460A46214641 -:1071600008F036FF0028F4D10098A04203D009208F -:1071700038BD0E2038BD002038BD13460A460146F2 -:10718000772007F0AFBD00002DE9FE4F1446060042 -:1071900098460D4629D035B10027019730780DF17A -:1071A000040A6E2802D00720BDE8FE8F012001905E -:1071B000DCB12068C8B10068B8B15246304608F06A -:1071C00007FF0028F0D102AB52462946304608F0AE -:1071D000FFFE0028E8D19DF80800012807D02760AD -:1071E0000198A84219D00920DEE70E20DCE72768C5 -:1071F0000024DFF82C900BE007EB8403524629466D -:107200003046CDF8009003F055FD0028CCD1641C29 -:1072100098F80000A042EFD8E2E70020C4E70000A1 -:10722000B144020013460A4601466E2007F05ABDDB -:1072300038B5A0B19AB193B11C466B4608F0C8FEB0 -:1072400000280BD19DF80020217862F30001217005 -:107250009DF80020520862F34101217038BD0E20D4 -:1072600038BD38B590B38AB383B31C466B4608F07B -:10727000AFFE002829D19DF80020217862F300019B -:1072800021709DF80020520862F3410121709DF8A1 -:107290000020920862F3820121709DF80020D2083C -:1072A00062F3C30121709DF80020120962F30411FA -:1072B00021709DF80020520962F3451121709DF85C -:1072C0000020920962F38611217038BDFFE70E207D -:1072D000FBE738B509B303B3F8B10078C0F3400554 -:1072E000044665F35F04C0F3800544EA8504C0F3F7 -:1072F000C00544EAC504C0F3001544EA0514C0F310 -:10730000401544EA4514C0F3801044EA80108DF81B -:107310000000684608F080FE38BD0E2038BD18B168 -:1073200012B10BB108F0F3BD0E207047F8B51D4641 -:1073300017460E000FD075B168B1044608F0F6FD8F -:10734000002807D1054800902B463A463146A01C3C -:1073500005F0C6FBF8BD0E20F8BD00008FA60200A8 -:10736000F8B51D4617460E000FD075B168B104463A -:1073700008F0DCFD002807D1054800902B463A466E -:107380003146A01C05F0ACFBF8BD0E20F8BD000096 -:10739000A9A802002DE9FC411C460D46060025D097 -:1073A0002DB100200190307801AF982802D007203D -:1073B000BDE8FC8101200190C2B1BCB12068A8B138 -:1073C00013463A46304608F0A2FD0028F0D109489D -:1073D000009023463A462946304603F06BFC0028CD -:1073E000E6D10198A84203D00920E1E70E20DFE7AB -:1073F0000020DDE7B381020013460A4601469820CB -:1074000007F070BC2DE9FC411D4617460E0032D036 -:1074100085B378B3044619480090204605F060FB18 -:10742000002825D1164800902B463A463146201DAB -:1074300005F056FB00281BD160792B4600F00100B7 -:107440008DF804003A46314601A808F0E5FD002811 -:107450000ED12B463A463146A01D08F067FD0028A4 -:1074600006D12B463A46314604F1080008F05EFD8D -:10747000BDE8FC81FFE70E20FAE70000A9A80200A2 -:10748000D37202002DE9FC411D46089C0E46070000 -:1074900033D036B10020019038780DF104089928D6 -:1074A00002D00720BDE8FC81012001902AB325B35A -:1074B000286810B30CB32068F8B11346424638462A -:1074C00008F025FD0028EDD10E4800902B464246DD -:1074D0003146384603F0EEFB0028E3D10A4800901D -:1074E000234642463146384603F0E4FB0028D9D112 -:1074F0000198B04203D00920D4E70E20D2E7002043 -:10750000D0E7000079A80200B381020013460A46C2 -:107510000146992007F0E6BB2DE9FC411C46089F77 -:107520000D46060026D035B10020019030780DF1CF -:1075300004089B2802D00720BDE8FC8101200190AF -:10754000C2B1BCB12068A8B1A7B1134642463046CB -:1075500008F0DDFC0028EFD123464246294630469C -:10756000009704F015FF0028E6D10198A84203D047 -:107570000920E1E70E20DFE70020DDE713460A4699 -:1075800001469B2007F0AEBB2DE9FC411F460C468F -:10759000050009D02CB100200190287801AE962872 -:1075A00004D00720BDE8FC810E20FBE70120134634 -:1075B00001903246284608F0AAFC0028F2D108487B -:1075C00000903B4632462146284603F073FB0028D4 -:1075D000E8D10198A04201D00920E3E70020E1E7CB -:1075E000B381020013460A460146962007F07ABB93 -:1075F00018B112B10BB108F0EBBC0E2070470000BF -:10760000F8B51D4617460E000FD075B168B1044697 -:1076100008F08CFC002807D1054800902B463A461C -:107620003146A01C05F05CFAF8BD0E20F8BD000044 -:10763000A9A802002DE9FC411F460C46050009D00F -:107640002CB100200190287801AE972804D00720A3 -:10765000BDE8FC810E20FBE7012013460190324675 -:10766000284608F054FC0028F2D1084800903B4618 -:1076700032462146284603F01DFB0028E8D1019838 -:10768000A04201D00920E3E70020E1E7B381020036 -:1076900013460A460146972007F024BB2DE9FE4316 -:1076A0001D461646040007D036B12DB12088342877 -:1076B00004D00720BDE8FE830E20FBE700200190E8 -:1076C0002F6834200DF10408ADF8080043463A460F -:1076D000314602A808F02AFC0028EBD143463A467E -:1076E0003146201D08F022FC0028E3D143463A46EB -:1076F0003146A01D08F01AFC0028DBD143463A466B -:10770000314604F1080008F011FC0028D2D10748E6 -:10771000009043463A46314604F10A0005F0D6F996 -:107720000028C7D101992960C4E700003177020021 -:107730002DE9F8431F4691465FEA010814D09FB136 -:1077400090B1044608F0F2FB00280ED13B464A46B1 -:107750004146A01C08F060FC002806D1A178012950 -:1077600005D0104E002515E00E20BDE8F8830E4E22 -:10777000F8E7A078012811D005EBC50004EB400024 -:10778000001D3B464A464146009605F0A9F90028EF -:10779000EBD16D1C2188A942EBD8E6E705EB45004B -:1077A000ECE700002D730200617302002DE9FE4337 -:1077B0001D461646040007D036B12DB12088322868 -:1077C00004D00720BDE8FE830E20FBE700200190D7 -:1077D0002F6832200DF10408ADF8080043463A4600 -:1077E000314602A808F0A2FB0028EBD143463A46F6 -:1077F0003146201D08F09AFB0028E3D143463A4663 -:107800003146A01D08F092FB0028DBD143463A46E2 -:10781000314604F1080008F089FB0028D2D107485E -:10782000009043463A46314604F10A0005F04EF90D -:107830000028C7D101992960C4E7000041780200FF -:107840002DE9F8431E4691465FEA010809D046B18A -:1078500038B1044608F06AFB002803D100250B4F1D -:1078600010E00E20BDE8F88305EB850004EB400036 -:1078700033464A464146801C009705F031F90028FE -:10788000F0D16D1C2188A942EED8EBE70574020007 -:107890002DE9FE431D461646040007D036B12DB132 -:1078A0002088352804D00720BDE8FE830E20FBE7A2 -:1078B000002001902F6835200DF10408ADF8080074 -:1078C00043463A46314602A808F030FB0028EBD187 -:1078D00043463A463146201D08F028FB0028E3D1F4 -:1078E00043463A463146A01D08F020FB0028DBD174 -:1078F00043463A46314604F1080008F017FB0028D9 -:10790000D2D10748009043463A46314604F10A0076 -:1079100005F0DCF80028C7D101992960C4E7000010 -:1079200025790200F8B51D4617460E001AD0CDB1D4 -:10793000C0B1044608F0FAFA002812D12B463A46A4 -:107940003146A01C08F0F2FA00280AD1608821888C -:10795000801C484381B23B463246201D009508F00A -:107960007EFBF8BD0E20F8BD2DE9FE431D461646F0 -:10797000040007D036B12DB12088372804D0072065 -:10798000BDE8FE830E20FBE7002001902F68372022 -:107990000DF10408ADF8080043463A46314602A806 -:1079A00008F0C4FA0028EBD143463A463146201D80 -:1079B00008F0BCFA0028E3D143463A463146A01D00 -:1079C00008F0B4FA0028DBD143463A46314604F1C8 -:1079D000080008F0ABFA0028D2D1074800904346CF -:1079E0003A46314604F10A0005F070F80028C7D184 -:1079F00001992960C4E70000FD790200F8B51D4631 -:107A000017460E000ED06DB160B1044608F08EFA34 -:107A1000002806D1009521883B463246A01C08F07C -:107A20001EFBF8BD0E20F8BD2DE9FE431D4616468F -:107A3000040007D036B12DB12088332804D00720A8 -:107A4000BDE8FE830E20FBE7002001902F68332065 -:107A50000DF10408ADF8080043463A46314602A845 -:107A600008F064FA0028EBD143463A463146201D1F -:107A700008F05CFA0028E3D143463A463146A01D9F -:107A800008F054FA0028DBD143463A46314604F167 -:107A9000080008F04BFA0028D2D10748009043466E -:107AA0003A46314604F10A0005F010F80028C7D123 -:107AB00001992960C4E70000BD7A02002DE9F8436E -:107AC0001E4691465FEA010809D046B138B1044626 -:107AD00008F02CFA002803D100250B4F10E00E20EF -:107AE000BDE8F88305EB450004EB400033464A4609 -:107AF0004146801C009704F0F3FF0028F0D16D1C74 -:107B00002188A942EED8EBE7017602002DE9FE4379 -:107B10001D461646040007D036B12DB120883A28FC -:107B200004D00720BDE8FE830E20FBE70020019073 -:107B30002F683A200DF10408ADF8080043463A4694 -:107B4000314602A808F0F2F90028EBD143463A4644 -:107B50003146201D08F0EAF90028E3D143463A46B1 -:107B60003146A01D08F0E2F90028DBD143463A4631 -:107B7000314604F1080008F0D9F90028D2D10748AD -:107B8000009043463A46314604F10A0004F09EFF55 -:107B90000028C7D101992960C4E70000A17B020039 -:107BA00019B113B108B108F0C1B90E207047000037 -:107BB0002DE9FE431D461646040007D036B12DB10F -:107BC0002088392804D00720BDE8FE830E20FBE77B -:107BD000002001902F6839200DF10408ADF808004D -:107BE00043463A46314602A808F0A0F90028EBD1F6 -:107BF00043463A463146201D08F098F90028E3D163 -:107C000043463A463146A01D08F090F90028DBD1E2 -:107C100043463A46314604F1080008F087F9002847 -:107C2000D2D10748009043463A46314604F10A0053 -:107C300004F04CFF0028C7D101992960C4E7000077 -:107C4000457C0200F8B51D4617460E001ED0EDB16A -:107C5000E0B1044608F06AF9002816D12B463A46EE -:107C60003146A01C08F0D8F900280ED12B463A4620 -:107C70003146201D08F05AF9002806D10095A18848 -:107C80003B463246A01D08F0EAF9F8BD0E20F8BDCB -:107C90002DE9FE431D461646040007D036B12DB12E -:107CA0002088302804D00720BDE8FE830E20FBE7A3 -:107CB000002001902F6830200DF10408ADF8080075 -:107CC00043463A46314602A808F030F90028EBD185 -:107CD00043463A463146201D08F028F90028E3D1F2 -:107CE00043463A463146A01D08F020F90028DBD172 -:107CF00043463A46314604F1080008F017F90028D7 -:107D0000D2D10748009043463A46314604F10A0072 -:107D100004F0DCFE0028C7D101992960C4E7000007 -:107D2000257D02002DE9F8431E4691465FEA0108D1 -:107D300009D046B138B1044608F0F8F8002803D15C -:107D400000250A4F0EE00E20BDE8F88304EBC500C5 -:107D500033464A464146801C009704F0C1FE002885 -:107D6000F2D16D1C2188A942F0D8EDE7FD83020015 -:107D70002DE9FE431D461646040007D036B12DB14D -:107D80002088362804D00720BDE8FE830E20FBE7BC -:107D9000002001902F6836200DF10408ADF808008E -:107DA00043463A46314602A808F0C0F80028EBD115 -:107DB00043463A463146201D08F0B8F80028E3D182 -:107DC00043463A463146A01D08F0B0F80028DBD102 -:107DD00043463A46314604F1080008F0A7F8002867 -:107DE000D2D10748009043463A46314604F10A0092 -:107DF00004F06CFE0028C7D101992960C4E7000097 -:107E0000057E0200F8B51D4617460E001ED0EDB1E6 -:107E1000E0B1044608F08AF8002816D12B463A460D -:107E20003146A01C08F082F800280ED12B463A46B5 -:107E30003146201D08F07AF8002806D10095A18867 -:107E40003B463246A01D08F00AF9F8BD0E20F8BDE9 -:107E50002DE9FE431D461646040007D036B12DB16C -:107E60002088312804D00720BDE8FE830E20FBE7E0 -:107E7000002001902F6831200DF10408ADF80800B2 -:107E800043463A46314602A808F050F80028EBD1A4 -:107E900043463A463146201D08F048F80028E3D111 -:107EA00043463A463146A01D08F040F80028DBD191 -:107EB00043463A46314604F1080008F037F80028F6 -:107EC000D2D10748009043463A46314604F10A00B1 -:107ED00004F0FCFD0028C7D101992960C4E7000027 -:107EE000E57E02002DE9F84F984692465FEA0109C7 -:107EF0000ED0B8F1000F0BD050B1044643464946AE -:107F000008F014F8002804D1A51C0026094F0DE044 -:107F10000E20BDE8F88F4346524649462846009752 -:107F200004F0DEFD0028F4D10A35761C2188B14228 -:107F3000F1D8EEE7718202002DE9FE431D46164698 -:107F4000040007D036B12DB120883B2804D007208B -:107F5000BDE8FE830E20FBE7002001902F683B2048 -:107F60000DF10408ADF8080043463A46314602A830 -:107F700007F0DCFF0028EBD143463A463146201D8E -:107F800007F0D4FF0028E3D143463A463146A01D0E -:107F900007F0CCFF0028DBD143463A46314604F1D6 -:107FA000080007F0C3FF0028D2D1074800904346DD -:107FB0003A46314604F10A0004F088FD0028C7D192 -:107FC00001992960C4E70000CD7F020019B113B107 -:107FD00008B108F021B80E2070472DE9FC411D467C -:107FE0001646040007D036B12DB120883C2804D0B5 -:107FF0000720BDE8FC810E20FBE7002000902F68E1 -:108000003C20E846ADF8040043463A46314601A814 -:1080100007F08CFF0028ECD143463A463146201D3C -:1080200007F084FF0028E4D143463A463146A01DBC -:1080300007F07CFF0028DCD143463A46314604F184 -:10804000080007F073FF0028D3D143463A46314673 -:1080500004F10A0007F0E0FF0028CAD10099296066 -:10806000C7E700002DE9FE431D461646040007D071 -:1080700036B12DB12088382804D00720BDE8FE8312 -:108080000E20FBE7002001902F6838200DF1040836 -:10809000ADF8080043463A46314602A807F046FFCD -:1080A0000028EBD143463A463146201D07F03EFFFB -:1080B0000028E3D143463A463146A01D07F036FF7B -:1080C0000028DBD143463A46314604F1080007F068 -:1080D0002DFF0028D2D10748009043463A4631464A -:1080E00004F10A0004F0F2FC0028C7D101992960CC -:1080F000C4E70000F9800200F8B51D4617460E00DF -:1081000027D035B328B3044607F010FF00281FD14D -:108110002B463A463146A01C07F07EFF002817D1B7 -:108120002B463A463146201D07F000FF00280FD1AC -:108130002B463A463146A01D07F0F8FE002807D12D -:108140000095E1883B46324604F1080007F087FFBE -:10815000F8BD0E20F8BDF8B51F460C46050008D046 -:108160002CB10020009028786E469E2803D007206E -:10817000F8BD0E20F8BD0120134600903246284677 -:1081800007F0C5FE0028F5D13B4632462146284679 -:1081900007F0BDFE0028EDD10098A04201D00920D3 -:1081A000F8BD0020F8BD13460A4601469E2006F0A1 -:1081B00099BD2DE9F041164607000FD076B16BB19D -:1081C0001C460D4607F0A3FE002808D1A31C32462A -:1081D00029463846BDE8F04107F099BE0E20BDE8BB -:1081E000F0812DE9F0411D4617460E000ED06DB10D -:1081F00060B1044607F09AFE002808D12B463A46A3 -:108200003146A01CBDE8F04107F090BE0E20BDE84D -:10821000F081F8B51F460C46050008D02CB10020AF -:10822000009028786E469D2803D00720F8BD0E20C8 -:10823000F8BD0120134600903246284607F067FE3D -:108240000028F5D13B4632462146284607F05FFE1E -:108250000028EDD10098A04201D00920F8BD0020EF -:10826000F8BD13460A4601469D2006F03BBD0000BE -:10827000F8B51D4617460E000FD075B168B104461B -:1082800007F054FE002807D1054800902B463A46D7 -:108290003146A01C04F024FCF8BD0E20F8BD0000FF -:1082A000FD8302002DE9FC411F46DDF820800C46CD -:1082B000050009D02CB100200190287801AE942847 -:1082C00004D00720BDE8FC810E20FBE70120134607 -:1082D00001903246284607F01AFE0028F2D13B46AC -:1082E00032462146284607F012FE0028EAD1084807 -:1082F0000090434632462146284602F0DBFC002827 -:10830000E0D10198A04201D00920DBE70020D9E7A5 -:1083100079A8020013460A460146942006F0E2BC02 -:108320002DE9F8431F46DDF820800C46050009D0F2 -:108330002CB10020009028786E469A2804D007209F -:10834000BDE8F8830E20FBE701201346009032467B -:10835000284607F0DCFD0028F2D13B463246214694 -:10836000284607F0D4FD0028EAD14346324621468C -:10837000284607F0CCFD0028E2D10098A04201D0A9 -:108380000920DDE70020DBE713460A4601469A2074 -:1083900006F0A8BC2DE9FC411F460C46050009D09B -:1083A0002CB100200190287801AE952804D0072038 -:1083B000BDE8FC810E20FBE7012013460190324608 -:1083C000284607F0A4FD0028F2D1084800903B465B -:1083D00032462146284602F06DFC0028E8D101987B -:1083E000A04201D00920E3E70020E1E7B3810200C9 -:1083F00013460A460146952006F074BCF8B51D46A2 -:1084000017460E0012D08DB180B104460848009086 -:10841000204604F065FB002807D1064800902B4653 -:108420003A463146201D04F05BFBF8BD0E20F8BD36 -:10843000A9A80200E3810200F8B51646070028D07B -:108440003EB333B31C460D4607F0C2FD00281FD1D2 -:10845000631C32462946384607F0BAFD002817D17A -:10846000A31C32462946384607F051FD00280FD19B -:10847000231D32462946384607F049FD002807D11A -:10848000A01D831C009032462946384605F027F887 -:10849000F8BD0E20F8BD00002DE9FC411F460C463A -:1084A000050009D02CB100200190287801AE9C284D -:1084B00004D00720BDE8FC810E20FBE70120134615 -:1084C00001903246284607F022FD0028F2D10848E4 -:1084D00000903B4632462146284602F0EBFB00283E -:1084E000E8D10198A04201D00920E3E70020E1E7AC -:1084F0003984020013460A4601469C2006F0F2BB6E -:108500002DE9FC479846DDF828900D46060009D075 -:108510002DB100240194307801AFAC2804D007209D -:10852000BDE8FC870E20FBE70120134601903A4688 -:10853000304607F0ECFC0028F2D143463A46294683 -:108540003046009402F0B6FB0028E9D14B463A468B -:1085500029463046009402F0ADFB0028E0D1019896 -:10856000A84201D00920DBE70020D9E72DE9FF432D -:1085700083B09846DDF8389014460F0019D0C4B186 -:10858000002001902568AC2001AE8DF8080033462C -:108590002A4602A807F040FD00280BD133462A46A0 -:1085A000394603A807F0F3FC002803D10398C0B9AB -:1085B00003E00E2007B0BDE8F0830C48009033467E -:1085C0002A463946404602F0A3FB0028F2D108486B -:1085D000009033462A463946484602F099FB002867 -:1085E000E8D1019820600020E4E70000A9A802007B -:1085F000618602002DE9FC4116465FEA00082BD097 -:1086000056B34BB3154F1C460D46009704F02CFA99 -:1086100000281FD1631C324629464046009704F0CB -:1086200023FA002816D101AB32462946404607F00E -:10863000CFFC00280ED19DF80410A2784B0861F3FE -:10864000000263F34202CB0863F3C302090961F33A -:108650000412A270BDE8FC810E20FBE7A94B0200CA -:108660002DE9FC411D4690460E0032D085B378B30B -:10867000194F0446009704F047FA002826D12B46EC -:1086800042463146601C009704F03EFA00281DD196 -:10869000A0782B46C0F34102014662F35F01C0F3AC -:1086A000C00241EAC201C0F3001041EA00108DF897 -:1086B00004004246314601A807F0AEFC002805D16F -:1086C000A178C1F34101012900D00720BDE8FC8158 -:1086D000FFE70E20FAE70000DB4B0200F8B5164674 -:1086E000070032D086B37BB3194800901C460D4674 -:1086F000384602F0DFFA002825D116480090231DE5 -:1087000032462946384602F0D5FA00281BD104F13A -:108710000A0332462946384607F0F9FB002812D1F1 -:1087200004F10C0332462946384607F0F0FB0028D6 -:1087300009D104F10800009004F1100332462946E3 -:10874000384604F0CCFEF8BDFFE70E20FBE7000042 -:1087500079A80200F58502002DE9FC4116460700C4 -:1087600028D03EB333B31C460D4607F0D0FB00289B -:108770001ED101AB32462946384607F029FC0028B5 -:1087800016D1231D32462946384607F0C0FB002883 -:108790000ED1A01D831C009032462946384604F0B5 -:1087A0009EFE002804D19DF8041001F00101A17083 -:1087B000BDE8FC810E20FBE718B112B10BB107F048 -:1087C000CFBB0E20704738B558B152B14BB11C46E3 -:1087D0006B4607F0FDFB002802D19DF800102170C8 -:1087E00038BD0E2038BD2DE9F0411D4617460E005C -:1087F0001ED0EDB1E0B1044607F098FB002818D177 -:108800002B463A463146A01C07F090FB002810D1B9 -:108810002B463A463146201D07F088FB002808D138 -:108820002B463A463146A01DBDE8F04107F07EBB1D -:108830000E20BDE8F08100002DE9F84316465FEAFE -:10884000000854D0002E52D0002B50D02948009060 -:108850001C460D46404604F007F9002845D126483D -:108860000090631C32462946404604F0FDF800287B -:108870003BD104F1080332462946404607F047FB46 -:10888000002832D104F10A000090231D3246294607 -:10889000404604F024FE002827D11848009004F137 -:1088A0000C0332462946404602F004FA00281CD147 -:1088B000134F04F11003324629464046009702F058 -:1088C000F9F9002811D104F1140332462946404633 -:1088D000009702F0EFF9002807D104F1180332469F -:1088E00029464046009702F0E5F9BDE8F8830E20DE -:1088F000FBE700006372020031720200058902008A -:10890000F58502002DE9F0411646070027D036B361 -:108910002BB31C460D4607F05BFB002820D1631CDF -:1089200032462946384607F053FB002818D1A31CCD -:1089300032462946384607F0EAFA002810D1231DAE -:1089400032462946384607F043FB002808D1A31DCC -:10895000324629463846BDE8F04107F0D8BA0E2025 -:10896000BDE8F0812DE9FC479846DDE90A9A0C46FE -:10897000050009D02CB100260196287801AFA22865 -:1089800004D00720BDE8FC870E20FBE7012013463A -:1089900001903A46284607F0BAFA0028F2D1124868 -:1089A000009043463A462146284602F083F90028C3 -:1089B000E8D10E4800904B463A462146284602F040 -:1089C00079F90028DED153463A46214628460096DA -:1089D00002F070F90028D5D10198A04201D00920F9 -:1089E000D0E70020CEE7000039880200DD860200D3 -:1089F0002DE9FF4184B0984614460F0019D0C4B148 -:108A0000002001902568A22001AE8DF808003346B1 -:108A10002A4602A807F000FB00280BD133462A465D -:108A2000394604A807F0B3FA002803D1049870B9B6 -:108A300003E00E2008B0BDE8F081074800903346FF -:108A40002A463946404602F063F90028F2D10198DF -:108A500020600020EEE70000E787020018B112B1A5 -:108A60000BB107F0B5BA0E20704700002DE9FC47A6 -:108A70009846DDF828900C46050009D02CB1002658 -:108A80000196287801AFA32804D00720BDE8FC8711 -:108A90000E20FBE70120134601903A46284607F0D6 -:108AA00036FA0028F2D10D48009043463A46214656 -:108AB000284602F0FFF80028E8D14B463A46214606 -:108AC0002846009602F0F6F80028DFD10198A0426F -:108AD00001D00920DAE70020D8E70000DD86020097 -:108AE0002DE9FF4184B0984614460F0019D0C4B157 -:108AF000002001902568A32001AE8DF808003346C0 -:108B00002A4602A807F088FA00280BD133462A46E5 -:108B1000394604A807F03BFA002803D1049870B93D -:108B200003E00E2008B0BDE8F0810748009033460E -:108B30002A463946404602F0EBF80028F2D1019867 -:108B400020600020EEE700002DFF02002DE9FE432B -:108B50001D461646040007D036B12DB12088552891 -:108B600004D00720BDE8FE830E20FBE70020019023 -:108B70002F6855200DF10408ADF8080043463A4629 -:108B8000314602A807F0D2F90028EBD143463A4615 -:108B90003146201D07F0CAF90028E3D106480090AD -:108BA00043463A463146A01D03F0A4FF0028D9D120 -:108BB00001992960D6E70000BD8B020019B113B1FD -:108BC00008B107F0B3B90E20704700002DE9FE434D -:108BD0001D461646040007D036B12DB12088532813 -:108BE00004D00720BDE8FE830E20FBE700200190A3 -:108BF0002F6853200DF10408ADF8080043463A46AB -:108C0000314602A807F092F90028EBD143463A46D4 -:108C10003146201D07F08AF90028E3D1064800906C -:108C200043463A463146A01D03F064FF0028D9D1DF -:108C300001992960D6E700003D8C020019B113B1FB -:108C400008B107F073B90E2070472DE9FC411D46AD -:108C50001646040007D036B12DB12088572804D01D -:108C60000720BDE8FC810E20FBE7002000902F6864 -:108C70005720E846ADF8040043463A46314601A87D -:108C800007F054F90028ECD143463A463146201DFE -:108C900007F04CF90028E4D143463A463146A01D7E -:108CA00007F0BAF90028DCD100992960D9E7000063 -:108CB000F8B51D4617460E0019D0C5B1B8B1044627 -:108CC00007F034F9002813D10A4800902B463A46A1 -:108CD0003146A01C03F018FF002809D101B02B4633 -:108CE0003A463146A01DBDE8F04007F01FB90E20FE -:108CF000F8BD0000A9A802002DE9F04186B01E468B -:108D00001746040008D03FB136B12088512805D05D -:108D1000072006B0BDE8F0810E20FAE7002003909E -:108D2000356851200DF10C08ADF8100043462A4675 -:108D3000394604A807F0FAF80028EAD143462A4643 -:108D40003946201D07F0F2F80028E2D116480090BD -:108D500043462A463946A01D03F0CCFE0500D8D173 -:108D6000A07902281CD1A07B062801D0042817D1A5 -:108D7000A08801A902F0B2F8052811D003A800903C -:108D80000198336800EB400101EB001107483A46B7 -:108D900000EB81000189406804F0B9FB0500B8D1FF -:108DA000039830602846B4E7B18D0200F4DC00205F -:108DB000F8B51D4617460E000DD065B158B10446F2 -:108DC00007F02AF9002805D12078012805D00228CB -:108DD00005D00720F8BD0E20F8BD054800E0054885 -:108DE00000902B463A463146A01C03F08DFEF8BD9C -:108DF000B18C0200019002002DE9FC411C46164690 -:108E0000050007D036B12CB12888532804D007209C -:108E1000BDE8FC810E20FBE700200090276853206E -:108E2000E846ADF8040043463A46314601A807F04B -:108E30007DF80028ECD143463A463146281D07F01C -:108E400075F80028E4D100992160E1E72DE9FE439F -:108E50001D461646040007D036B12DB12088522891 -:108E600004D00720BDE8FE830E20FBE70020019020 -:108E70002F6852200DF10408ADF8080043463A4629 -:108E8000314602A807F052F80028EBD143463A4693 -:108E90003146201D07F04AF80028E3D1064800902B -:108EA00043463A463146A01D03F024FE0028D9D19E -:108EB00001992960D6E70000BD8E020019B113B1F7 -:108EC00008B107F0A9B80E20704700002DE9FE4355 -:108ED0001D461646040007D036B12DB1208856280D -:108EE00004D00720BDE8FE830E20FBE700200190A0 -:108EF0002F6856200DF10408ADF8080043463A46A5 -:108F0000314602A807F012F80028EBD143463A4652 -:108F10003146201D07F00AF80028E3D106480090EA -:108F200043463A463146A01D03F0E4FD0028D9D15E -:108F300001992960D6E700003D8F020019B113B1F5 -:108F400008B107F069B80E20704700002DE9FF470F -:108F50001E46914604000AD0B9F1000F07D036B181 -:108F60002088502805D0072004B0BDE8F0870E20E7 -:108F7000FAE700200190D6F80080502001AFADF84C -:108F800008003B464246494602A806F0CFFF0028AB -:108F9000EAD13B4642464946201D06F0C7FF00285D -:108FA000E2D1154800903B4642464946A01D03F0D9 -:108FB000A1FD0500D8D1207B012801D0062816D1BB -:108FC000A08803A901F08AFF052810D00398009714 -:108FD00000EB400101EB00110848434600EB810023 -:108FE0004A460189406804F092FA0500BCD1019814 -:108FF00030602846B8E7000001900200F4DC002051 -:10900000F8B51D4617460E003CD0D5B3C8B304468C -:1090100006F08CFF002833D11B4800902B463A46BF -:109020003146A01C03F070FD002829D12B463A469A -:109030003146A01D06F0F0FF002821D12B463A460C -:109040003146E01D06F0E8FF002819D12B463A46CC -:10905000314604F1080006F069FF002810D12B46C4 -:109060003A46314604F10A0006F060FF002807D1B5 -:10907000009561893B46324604F10C0006F0EFFF93 -:10908000F8BDFFE70E20FBE7A9A80200F8B51F46D0 -:109090000C46050008D02CB10020009028786E46C0 -:1090A000AD2803D00720F8BD0E20F8BD01201346DF -:1090B00000903246284606F02AFF0028F5D13B46AC -:1090C00032462146284606F022FF0028EDD10098BE -:1090D000A04201D00920F8BD0020F8BD13460A4681 -:1090E0000146AD2005F0FEBD2DE9FC411646070006 -:1090F00032D086B37BB31C460D4606F008FF00282D -:1091000027D1A31C32462946384606F061FF0028C5 -:109110001FD1231D32462946384606F0F8FE0028A6 -:1091200017D10E48009004F108033246294638460C -:1091300001F0C0FD00280CD1A168002909D00888E1 -:109140000090019004F10C0332462946384601F0A4 -:10915000A7FCBDE8FC81FFE70E20FAE70FFF020045 -:109160002DE9FC411F460C46050009D02CB100201A -:109170000190287801AEA62804D00720BDE8FC8124 -:109180000E20FBE70120134601903246284606F0E8 -:10919000BEFE0028F2D1084800903B4632462146E8 -:1091A000284601F087FD0028E8D10198A04201D0AF -:1091B0000920E3E70020E1E7E99002002DE9FF4103 -:1091C00084B0984614460F0019D0C4B10020019015 -:1091D0002568A62001AE8DF8080033462A4602A86D -:1091E00006F01AFF00280BD133462A46394604A858 -:1091F00006F0CDFE002803D1049870B903E00E20DC -:1092000008B0BDE8F0810748009033462A46394649 -:10921000404601F07DFD0028F2D101982060002039 -:10922000EEE700002DFF02002DE9FC479846DDF82F -:1092300028900C46050009D02CB10026019628780C -:1092400001AFA12804D00720BDE8FC870E20FBE772 -:109250000120134601903A46284606F058FE0028A1 -:10926000F2D143463A462146284606F050FE0028F1 -:10927000EAD14B463A4621462846009601F01AFDAF -:109280000028E1D10198A04201D00920DCE70020AC -:10929000DAE700002DE9FF4184B0984614460F003C -:1092A00019D0C4B1002001902568A12001AE8DF82D -:1092B000080033462A4602A806F0AEFE00280BD16D -:1092C00033462A46394604A806F061FE002803D139 -:1092D000049870B903E00E2008B0BDE8F08107489B -:1092E000009033462A463946404601F011FD0028D9 -:1092F000F2D1019820600020EEE700002DFF02006F -:109300007CB50C4640B12CB100230193057801A92E -:10931000AB2D03D007207CBD0E207CBD0125CDE9FF -:10932000003513460A46214601F0C4FC0028F4D15A -:109330000198A04201D009207CBD00207CBD000026 -:109340002DE9FF4184B0984614460F0019D0C4B1EE -:10935000002001902568AB2001AE8DF8080033464F -:109360002A4602A806F058FE00280BD133462A46AA -:10937000394604A806F00BFE002803D1049870B902 -:1093800003E00E2008B0BDE8F081074800903346A6 -:109390002A463946404601F0BBFC0028F2D101982C -:1093A00020600020EEE700002DFF0200F8B5164611 -:1093B00007000FD076B16BB11C460D4606F008FED3 -:1093C000002806D120780849012805D0022803D0BA -:1093D0000720F8BD0E20F8BD0091231D3246294616 -:1093E000384603F041FBF8BD598702002DE9FC41E6 -:1093F0001F460C46050009D02CB1002001902878AA -:1094000001AEA82804D00720BDE8FC810E20FBE7B0 -:109410000120134601903246284606F078FD0028C8 -:10942000F2D1084800903B4632462146284601F0DA -:1094300041FC0028E8D10198A04201D00920E3E7CF -:109440000020E1E7AD93020013460A460146A8203A -:1094500005F048BC2DE9FC479846DDF828900C46FD -:10946000050009D02CB100260196287801AFA0286C -:1094700004D00720BDE8FC870E20FBE7012013463F -:1094800001903A46284606F0A3FD0028F2D10D4887 -:10949000009043463A462146284601F00BFC00283E -:1094A000E8D14B463A4621462846009601F002FC98 -:1094B0000028DFD10198A04201D00920DAE700207E -:1094C000D8E7000079A802002DE9FF4184B0984652 -:1094D00014460F0019D0C4B1002001902568A020C7 -:1094E00001AE8DF8080033462A4602A806F094FD26 -:1094F00000280BD133462A46394604A806F047FD1A -:10950000002803D1049870B903E00E2008B0BDE82C -:10951000F0810748009033462A463946404601F01C -:10952000F7FB0028F2D1019820600020EEE7000050 -:109530002DFF02002DE9F8431F46DDF820800C4680 -:10954000050009D02CB10020009028786E46A7288D -:1095500004D00720BDE8F8830E20FBE70120134666 -:1095600000903246284606F0D2FC0028F2D13B4655 -:1095700032462146284606F0CAFC0028EAD1434676 -:1095800032462146284606F0C2FC0028E2D1009867 -:10959000A04201D00920DDE70020DBE713460A46A0 -:1095A0000146A72005F09EBB2DE9FC479946DDE961 -:1095B0000A8A0C46050009D02CB1002601962878AD -:1095C00001AFAA2804D00720BDE8FC870E20FBE7E6 -:1095D0000120134601903A46284606F098FC0028E0 -:1095E000F2D11148009043463A462146284601F000 -:1095F00061FB0028E8D14B463A46214628460096B2 -:1096000001F058FB0028DFD153463A462146284650 -:1096100006F0A6FC0028D7D10198A04201D009206D -:10962000D2E70020D0E700000FFF02002DE9FF4342 -:1096300083B099460E9E14465FEA01081AD0CCB159 -:10964000002001902768AA2001AD8DF808002B4664 -:109650003A46414602A806F0DFFC00280BD12B4613 -:109660003A46414603A806F092FC002803D103982D -:10967000C0B903E00E2007B0BDE8F0830B480090AE -:109680002B463A464146304601F042FB0028F2D1D3 -:1096900046B1009531883B464246484601F032FAD1 -:1096A0000028E8D1019820600020E4E72DFF0200A7 -:1096B0002DE9FC479846DDE90A790C46050009D0FA -:1096C0002CB100200190287801AEA92804D00720F1 -:1096D000BDE8FC870E20FBE70120134601903246CF -:1096E000284606F014FC0028F2D1434632462146B3 -:1096F0002846009703F0F3FE0028E9D14B46324696 -:109700002146284606F02CFC0028E1D10198A04211 -:1097100001D00920DCE70020DAE713460A460146BB -:10972000A92005F0DFBA2DE9FC4799460A9D0E46AF -:1097300007000AD036B10024019438780DF10408EE -:10974000A52804D00720BDE8FC870E20FBE70120F8 -:10975000134601904246384606F0D9FB0028F2D164 -:109760004B4642463146384606F0D1FB0028EAD146 -:109770002B46424631463846009401F09BFA0028B9 -:10978000E1D12B68CBB14246314638469B1C06F0EE -:10979000BEFB0028D7D14246314638462B6806F03A -:1097A000B6FB0028CFD12B684246314638461B1DF8 -:1097B000009401F07FFA0028C5D10198B04201D091 -:1097C0000920C0E70020BEE72DE9FF4184B098469C -:1097D00014460F0019D0C4B1002001902568A520BF -:1097E00001AE8DF8080033462A4602A806F014FCA4 -:1097F00000280BD133462A46394604A806F0C7FB99 -:10980000002803D1049870B903E00E2008B0BDE829 -:10981000F0810748009033462A463946404601F019 -:1098200077FA0028F2D1019820600020EEE70000CE -:109830003F9902002DE9FC411F46DDF820800C46CF -:10984000050009D02CB100200190287801AEA42891 -:1098500004D00720BDE8FC810E20FBE70120134661 -:1098600001903246284606F052FB0028F2D13B46D2 -:1098700032462146284606F04AFB0028EAD108482D -:109880000090434632462146284601F013FA00284C -:10989000E0D10198A04201D00920DBE70020D9E700 -:1098A000119902002DE9FF4184B0984614460F003B -:1098B00019D0C4B1002001902568A42001AE8DF814 -:1098C000080033462A4602A806F0A6FB00280BD162 -:1098D00033462A46394604A806F059FB002803D12E -:1098E000049870B903E00E2008B0BDE8F081074885 -:1098F000009033462A463946404601F009FA0028CE -:10990000F2D1019820600020EEE700003F990200AC -:10991000F8B51646070010D07EB173B11C460D464F -:109920009B1C06F0F4FA002806D132462946384638 -:10993000231D009403F0D3FDF8BD0E20F8BDF8B54B -:109940001D4617460E000FD075B168B10446801C45 -:1099500006F0ECFA002806D1009521883B463246F5 -:10996000606803F0D4FDF8BD0E20F8BD2DE9FC477A -:109970009846DDE90A9A0C46050009D02CB100266C -:109980000196287801AFB42804D00720BDE8FC87F1 -:109990000E20FBE70120134601903A46284606F0C8 -:1099A000B6FA0028F2D143463A462146284606F048 -:1099B000AEFA0028EAD14B463A462146284606F040 -:1099C000A6FA0028E2D153463A4621462846009698 -:1099D00001F070F90028D9D10198A04201D00920E6 -:1099E000D4E70020D2E700002DE9FF4184B098467B -:1099F00014460F0019D0C4B1002001902568B4208E -:109A000001AE8DF8080033462A4602A806F004FB92 -:109A100000280BD133462A46394604A806F0B7FA87 -:109A2000002803D1049870B903E00E2008B0BDE807 -:109A3000F0810748009033462A463946404601F0F7 -:109A400067F90028F2D1019820600020EEE70000BD -:109A50002DFF0200F8B51F460C46050008D02CB1BA -:109A60000020009028786E46B12803D00720F8BD6A -:109A70000E20F8BD0120134600903246284606F01D -:109A800046FA0028F5D13B4632462146284606F0E4 -:109A90003EFA0028EDD10098A04201D00920F8BD7F -:109AA0000020F8BD13460A460146B12005F01AB958 -:109AB0002DE9F0411646070020D0FEB1F3B11C4657 -:109AC0000D4606F024FA002819D1A31C3246294677 -:109AD000384606F01CFA002811D104F1080332467A -:109AE0002946384606F013FA002808D1231D3246CD -:109AF00029463846BDE8F04106F032BA0E20BDE8EE -:109B0000F0812DE9FE4F9A460C9C0D4606000CD0C4 -:109B100045B14FF00008CDF8048030780DF104090C -:109B2000B22804D00720BDE8FE8F0E20FBE70127F6 -:109B300013464A463046019706F0E9F90028F2D16B -:109B400053464A462946304606F0E1F90028EAD154 -:109B50000297474602AB4A4629463046CDF8008078 -:109B600001F0A8F80028DED10298D0B123684A4657 -:109B7000294630461B1D06F0CAF90028D3D16B4692 -:109B80004A462946304606F0EBF90028CBD120683A -:109B900080887C2809D8009901F046F9216808607E -:109BA00000E027600198A84201D00920BBE700200F -:109BB000B9E713460A460146B22005F093B82DE9ED -:109BC000F0411646070019D0C6B1BBB11C460D4680 -:109BD000FFF76EFF002812D104F10C03324629462C -:109BE000384606F094F9002809D104F10E033246F4 -:109BF00029463846BDE8F04106F089B90E20BDE897 -:109C0000F08100002DE9FC419846089C0D460600B5 -:109C100009D02DB100200190307801AFB02804D0D8 -:109C20000720BDE8FC810E20FBE7012013460190D0 -:109C30003A46304606F06BF90028F2D112480090FF -:109C400043463A462946304601F034F80028E8D128 -:109C50000E48009023463A462946304601F02AF83D -:109C60000028DED1206840B1416831B100897C28EC -:109C700006D801F0D9F8216848600198A84201D0BF -:109C80000920CEE70020CCE70FFF0200BF9B0200B7 -:109C90002DE9FF4184B0984614460F0019D0C4B195 -:109CA000002001902568B02001AE8DF808003346F1 -:109CB0002A4602A806F0B0F900280BD133462A46FE -:109CC000394604A806F063F9002803D1049870B956 -:109CD00003E00E2008B0BDE8F0810748009033464D -:109CE0002A463946404601F013F80028F2D101987F -:109CF00020600020EEE700002DFF02002DE9F0417A -:109D00001D4617460E001ED0EDB1E0B1044606F028 -:109D10000DF9002818D12B463A463146A01C06F012 -:109D200005F9002810D12B463A463146201D06F091 -:109D3000FDF8002808D12B463A463146A01DBDE863 -:109D4000F04106F0F3B80E20BDE8F0812DE9F047B0 -:109D500088B09A46109C0D4606000DD045B14FF0D4 -:109D60000008CDF8148030780DF11409B32805D01F -:109D7000072008B0BDE8F0870E20FAE70127134658 -:109D80004A463046059706F0C2F80028F1D15346FE -:109D90004A462946304606F0BAF80028E9D1069727 -:109DA000474606AB4A4629463046CDF8008000F0CB -:109DB00081FF0028DDD1069860B303AB4A462946EF -:109DC000304606F0CDF80028D3D107AB4A462946E5 -:109DD000304606F09CF80028CBD1BDF81C007C284A -:109DE0001CD8039901F020F8029058B1BDF81C006E -:109DF0000090019002AB4A462946304600F050FEE2 -:109E00000028B6D12168029808602168BDF81C00BE -:109E1000888000E027600598A84201D00920A8E7C3 -:109E20000020A6E713460A460146B32004F05ABFB5 -:109E30002DE9F0411646070027D036B32BB31C4658 -:109E40000D4606F064F8002820D1A31C32462946AE -:109E5000384606F05CF8002818D1231D3246294602 -:109E6000384606F0B5F8002810D1631D3246294661 -:109E7000384606F0ADF8002808D1A31D3246294621 -:109E80003846BDE8F04106F0A3B80E20BDE8F081E9 -:109E90002DE9FC411D461646040007D036B12DB110 -:109EA0002088752804D00720BDE8FC810E20FBE740 -:109EB000002000902F687520E846ADF80400434666 -:109EC0003A46314601A806F031F80028ECD1434665 -:109ED0003A463146201D06F029F80028E4D14346D1 -:109EE0003A463146A01D06F021F80028DCD1434651 -:109EF0003A46314604F1080006F018F80028D3D19C -:109F000000992960D0E72DE9FC411D461646040062 -:109F100007D036B12DB12088732804D00720BDE8C2 -:109F2000FC810E20FBE7002000902F687320E8469C -:109F3000ADF8040043463A46314601A805F0F6FF65 -:109F40000028ECD143463A463146201D05F0EEFF8D -:109F50000028E4D143463A463146A01D05F0E6FF0D -:109F60000028DCD100992960D9E72DE9FF471D467B -:109F7000914604000AD0B9F1000F07D035B120880E -:109F8000762805D0072004B0BDE8F0870E20FAE758 -:109F900000200190D5F80080762001AFADF80800D0 -:109FA0003B464246494602A805F0C0FF0028EAD1D8 -:109FB0003B4642464946201D05F0B8FF0028E2D145 -:109FC0003B4642464946A01D05F0B0FF0028DAD1C5 -:109FD0003B464246494604F1080005F0A7FF002829 -:109FE000D1D13B464246494604F1100005F09EFFA0 -:109FF0000028C8D1E6683B46424656F8040C039058 -:10A00000494603A805F0C3FF0028BCD10097218A68 -:10A0100043464A46E06800F075FD0400B3D130467F -:10A0200000F010FF019828602046ACE72DE9FE43C0 -:10A030001D461646040007D036B12DB1208874287D -:10A0400004D00720BDE8FE830E20FBE7002000902F -:10A050002F687420E846ADF8040043463A4631467E -:10A0600001A805F063FF0028ECD143463A4631468B -:10A07000201D05F05BFF0028E4D143463A463146F7 -:10A08000A01D05F053FF0028DCD143463A46314677 -:10A0900004F10C0005F04AFF0028D3D1A16869B192 -:10A0A00051F8040C0290084600F0CCFE43463A46B4 -:10A0B000314602A805F06BFF0028C3D10099296042 -:10A0C000C0E700002DE9FE431D461646040007D0F8 -:10A0D00036B12DB12088722804D00720BDE8FE8358 -:10A0E0000E20FBE7002001902F6872200DF104087C -:10A0F000ADF8080043463A46314602A805F016FF7F -:10A100000028EBD143463A463146201D05F00EFFAC -:10A110000028E3D143463A463146A01D05F006FF2C -:10A120000028DBD10648009043463A46314604F108 -:10A13000080002F0F3FC0028D0D101992960CDE796 -:10A14000FD9C02002DE9FC411D461646040007D087 -:10A1500036B12DB12088712804D00720BDE8FC81DC -:10A160000E20FBE7002000902F687120E846ADF834 -:10A17000040043463A46314601A805F0D7FE0028C0 -:10A18000ECD143463A463146201D05F0CFFE00286B -:10A19000E4D143463A463146A01D05F0C7FE0028EB -:10A1A000DCD143463A46314604F1080005F034FF5D -:10A1B0000028D3D143463A46314604F10A0005F05F -:10A1C000B5FE0028CAD100992960C7E72DE9FE43F2 -:10A1D0001D461646040007D036B12DB120887028E0 -:10A1E00004D00720BDE8FE830E20FBE7002001908D -:10A1F0002F6870200DF10408ADF8080043463A4678 -:10A20000314602A805F092FE0028EBD143463A46BB -:10A210003146201D05F08AFE0028E3D143463A4628 -:10A220003146A01D05F082FE0028DBD143463A46A8 -:10A23000314604F1100005F079FE0028D2D107481C -:10A24000009043463A46314604F1080002F066FCAD -:10A250000028C7D101992960C4E70000FD9C0200D5 -:10A260002DE9FE431D461646040007D036B12DB138 -:10A270002088772804D00720BDE8FE830E20FBE766 -:10A28000002000902F687720E846ADF80400434690 -:10A290003A46314601A805F049FE0028ECD1434674 -:10A2A0003A463146201D05F041FE0028E4D14346E0 -:10A2B0003A463146A01D05F039FE0028DCD1434660 -:10A2C0003A46314604F10C0005F030FE0028D3D1A7 -:10A2D000A16869B151F8040C0290084600F0B2FD83 -:10A2E00043463A46314602A805F051FE0028C3D144 -:10A2F00000992960C0E72DE9FC411C460D46060087 -:10A3000025D035B10027019730780DF10408682871 -:10A3100002D00720BDE8FC8101200190BAB1B4B1A0 -:10A320002068A0B113464246304605F019FE0028C9 -:10A33000F0D12346424629463046009700F0BAFC49 -:10A340000028E7D10198A84203D00920E2E70E20B7 -:10A35000E0E70020DEE700002DE9FF4184B015466C -:10A360000E9C5FEA010832D085B3002001902E6870 -:10A37000682001AF8DF808003B463246414602A8EE -:10A3800005F04AFE002823D13B463246414604A848 -:10A3900005F0FDFD00281BD1049878BBB4B13B4605 -:10A3A0003246414607A805F0F2FD002810D10021F1 -:10A3B000079A0846222A29D00DDC012A12D0022A47 -:10A3C00012D0202A1ED0212A10D11DE0FFE70E2036 -:10A3D00008B0BDE8F081232A1CD0242A1CD0252AED -:10A3E00004D115E00D4900E00D49204600913B469F -:10A3F0003246414602F04CFB0028E9D10198286022 -:10A400000020E5E70749F0E70749EEE70749ECE7F1 -:10A410000749EAE70749E8E70749E6E79D3E020002 -:10A420000F3E0200596402000965020065650200E2 -:10A43000FB630200A5650200A564020038B580B187 -:10A4400029B10023009303786C46672B01D00720C5 -:10A4500038BD0123009322B11346224605F080FD4A -:10A4600038BD0E2038BD00002DE9FC471F46060010 -:10A4700014460D4633D045B14FF00008CDF80480A6 -:10A4800030780DF10409672802D00720BDE8FC8769 -:10A49000012001901CB317B3386800B313464A4635 -:10A4A000304605F05DFD0028F0D13B464A4629467E -:10A4B0003046CDF8008000F0FDFB0028E6D1396879 -:10A4C00021B322680346222A29D00ADC012A11D0AE -:10A4D000022A11D0202A1ED0212A0FD11DE00E20E1 -:10A4E000D4E7232A1FD0242A1FD0252A19D0262AB0 -:10A4F00004D11CE0104800E010480B4600904A468A -:10A500002946304602F09CFA0028BFD10198A842A3 -:10A510000FD00920BAE70A48EFE70A48EDE70A48F2 -:10A52000EBE70A48E9E70A48E7E70A48E5E70A48A7 -:10A53000E3E70020AAE700002D3E0200EB3D020009 -:10A540002B640200C56402004D650200CB6302006B -:10A550008165020085640200C365020013460A4655 -:10A560000146672004F0BEBB38B5D0B1CAB1C3B153 -:10A570001C466B4605F02CFD002811D19DF80020EB -:10A58000217862F3000121709DF80020520862F3E7 -:10A59000410121709DF80020920862F3870121702B -:10A5A00038BD0E2038BD38B581B17BB170B10078AF -:10A5B000C0F34005044665F35F0420F00300044344 -:10A5C0008DF80040684605F027FD38BD0E2038BDE7 -:10A5D000007800F001007047F8B51546060010D06D -:10A5E0007DB173B11F460C461B1D05F090FC002881 -:10A5F00006D100903B462A462146304600F05AFBE1 -:10A60000F8BD0E20F8BD00002DE9FC411C460D46AA -:10A61000060025D02DB100200190307801AF6628CA -:10A6200002D00720BDE8FC8101200190C2B1BCB17D -:10A630002068A8B113463A46304605F068FC002869 -:10A64000F0D10948009023463A462946304600F0AA -:10A6500031FB0028E6D10198A84203D00920E1E7A8 -:10A660000E20DFE70020DDE7D9A5020013460A46E9 -:10A670000146662004F036BB38B530B12AB123B1AB -:10A680001024009405F0D5FC38BD0E2038BD08B567 -:10A6900041B13BB130B1009313460A46102105F099 -:10A6A000DEFC08BD0E2008BD2DE9FC410C46DDF89E -:10A6B0002080050009D02CB100260196287801AF32 -:10A6C000632804D00720BDE8FC810E20FBE70120B1 -:10A6D000CDE900203A46284602F031FF0028F2D1A9 -:10A6E00043463A4621462846009600F0E3FA002801 -:10A6F000E9D10198A04201D00920E4E70020E2E777 -:10A700002DE9FF4184B0984614460F0019D0C4B11A -:10A71000002001902568632001AE8DF808003346C3 -:10A720002A4602A805F078FC00280BD133462A46B9 -:10A73000394604A805F02BFC002803D1049870B911 -:10A7400003E00E2008B0BDE8F081074800903346D2 -:10A750002A463946404600F0DBFA0028F2D101983B -:10A7600020600020EEE70000A9A802002DE9FC47C8 -:10A770001D460A9C0E46070039D046B14FF000082E -:10A78000CDF8048038780DF10409642802D0072040 -:10A79000BDE8FC87012001904AB345B33CB3106883 -:10A7A00028B3286818B3206808B3134813460090EC -:10A7B0004A46384600F07EFA0028E9D12B464A4640 -:10A7C00031463846CDF8008000F074FA0028DFD119 -:10A7D00023464A4631463846CDF8008000F06AFAF2 -:10A7E0000028D5D10198B04203D00920D0E70E202F -:10A7F000CEE70020CCE7000079A802002DE9FF4158 -:10A8000084B01446DDF838800F0019D0C4B10020A0 -:10A8100001902668642001AD8DF808002B46324671 -:10A8200002A805F0F9FB00280BD12B463246394629 -:10A8300004A805F0ACFB002803D10498C0B903E0DC -:10A840000E2008B0BDE8F0812B463246394607A8F5 -:10A8500005F0E2FB0028F4D1B8F1000008D033463F -:10A860003A4600959DF81C1005F0F9FB0028E8D148 -:10A87000019820600020E4E72DE9F041164607002A -:10A880000FD076B16BB11C460D4605F040FB002899 -:10A8900008D1A31C324629463846BDE8F04105F0F0 -:10A8A00097BB0E20BDE8F0812DE9F0411D4617460B -:10A8B0000E000ED06DB160B1044605F037FB0028E4 -:10A8C00008D12B463A463146A01CBDE8F04105F0C0 -:10A8D000A3BB0E20BDE8F0812DE9FC411C460D46CE -:10A8E000060029D035B10027019730780DF1040812 -:10A8F000622802D00720BDE8FC8101200190DAB176 -:10A90000D4B11068C0B12068B0B10D4813460090B2 -:10A910004246304600F0CEF90028ECD123464246AC -:10A9200029463046009700F0C5F90028E3D1019888 -:10A93000A84203D00920DEE70E20DCE70020DAE79A -:10A9400079A602002DE9FF4184B0984614460F0015 -:10A9500019D0C4B1002001902568622001AE8DF8A5 -:10A96000080033462A4602A805F056FB00280BD102 -:10A9700033462A46394604A805F009FB002803D1CE -:10A98000049870B903E00E2008B0BDE8F0810748D4 -:10A99000009033462A463946404600F0B9F900286F -:10A9A000F2D1019820600020EEE7000019000300BA -:10A9B0007CB50C46D0B12CB100230193057801A9D8 -:10A9C000652D01D007207CBD0125019572B1156868 -:10A9D00065B1009313460A46214600F06BF9002842 -:10A9E000F1D10198A04203D009207CBD0E207CBD8E -:10A9F00000207CBD2DE9FF4184B0984614460F002D -:10AA000019D0C4B1002001902568652001AE8DF8F1 -:10AA1000080033462A4602A805F0FEFA00280BD1AA -:10AA200033462A46394604A805F0B1FA002803D176 -:10AA3000049870B903E00E2008B0BDE8F081074823 -:10AA4000009033462A463946404602F021F8002855 -:10AA5000F2D1019820600020EEE7000061AA020018 -:10AA60002DE9F0411D4617460E0016D0ADB1A0B13C -:10AA7000044605F0D1FA002810D12B463A4631465B -:10AA8000A01C05F053FA002808D12B463A4631465F -:10AA9000201DBDE8F04105F049BA0E20BDE8F08167 -:10AAA0002DE9F84F4FF00008DDE90AA681468DF840 -:10AAB000008010680F461C461546B84216D06B46FB -:10AAC000484605F07AFA9DF80000012805D00CB13F -:10AAD000C4F800800020BDE8F88F4CB1206838B180 -:10AAE000564503D829687A1AB24203D20920F2E700 -:10AAF0000E20F0E749443246F8F79EFB28683044C0 -:10AB00002860E7E72DE9F8439846089C91460D46F2 -:10AB1000060001D0012000E000208DF8000023464F -:10AB200042464946684605F077FA070006D17EB1ED -:10AB30002068A8EB0001A94202D20920BDE8F883F1 -:10AB400048442A463146F8F777FB206828442060BD -:10AB50003846F3E7184810B50178427801F00F0144 -:10AB6000FF2A16D8154B5B7A032B01D0042B01D199 -:10AB700002290ED831B101290DD002290DD00329A7 -:10AB80000DD006E00E49801CF8F77AFB08B90120C9 -:10AB900010BD002010BD0F2302E0552300E0FF236D -:10ABA000002105E04418A4789C42F2D1491CC9B2A6 -:10ABB0009142F7D3EBE7000014CD002088B30020CA -:10ABC000C000030070B5084C050009D0103421689E -:10ABD000002907D008682060496828468847F6E7BA -:10ABE0000834F4E770BD000018CE0020054A0121AA -:10ABF00020B1012805D19170FFF7E4BF517000200A -:10AC0000FAE7704718CE00202DE9F05F264841682A -:10AC1000F1B3DFF898B00E688146DBF80040876832 -:10AC20008078E11B21F07F45ED1CB0B9DFF8808012 -:10AC30004FF48030C8F84403C8F804031120F8F733 -:10AC400075FB1120F8F77DFB4FF0010AC8F800A052 -:10AC50002F2003F009FA89F802A0B54200D2354648 -:10AC6000124BE8193C3320F07F401860DBF80010ED -:10AC70005A46091B21F07F41001B20F07F40C91C70 -:10AC800081420FD9106818602F2003F0EDF900E021 -:10AC900004E0BDE8F05F1120F8F75EBBBDE8F05FAF -:10ACA00003F008BFBDE8F09FFCB30020041501408D -:10ACB000001001402DE9F8438846116881460025BF -:10ACC000089E1C4617464046414502D10920BDE872 -:10ACD000F88301466B46484605F06FF99DF8000081 -:10ACE000012803D078B10B252846F0E74CB1236842 -:10ACF0003BB1002EF8D03A4641464846B04705469B -:10AD0000F2E70E20E3E7002CEED000202060EBE716 -:10AD1000F0B41C6806460020049D671C974202D9C7 -:10AD20000920F0BC7047002E03D000BF4FF0010790 -:10AD300001E04FF000070F551C6804F101041C608E -:10AD4000EFD0002DEDD03046AC46F0BC604700009F -:10AD5000034610B504200D4A002100BFC1EB0114C9 -:10AD600004EB840402EB8404A4781CB1491C082978 -:10AD7000F4D310BDC1EB011404EB840402EB840294 -:10AD8000012090700020196010BD000094CF0020B9 -:10AD9000034610B505200C4A002100BFC1EB011489 -:10ADA00004EB840432F824409C4208D1C1EB011129 -:10ADB00001EB810102EB81010020887010BD491C6C -:10ADC0000829EBD310BD000094CF002070B50446D5 -:10ADD00005200B4B002200BFC2EB021505EB8505D9 -:10ADE00033F82560A64204D103EB8505AD78012D2B -:10ADF00003D0521C082AEFD370BD00200A6070BD3A -:10AE000094CF002000200749024600BFC0EB00138A -:10AE100003EB830301EB8303401C9A700828F5D3EE -:10AE20007047000094CF002010B50C467C2801D953 -:10AE3000002010BD024802F089FC10C010BD0000C7 -:10AE400060050300011F014802F0A2BC6005030079 -:10AE5000014802F0B5BC000060050300034610B5D0 -:10AE600004200E4A002100BF01EB410404EB011451 -:10AE700002EB8404A4781CB1491C0829F4D310BD4A -:10AE800001EB410000EB011002EB80000124847013 -:10AE900000F10C0242600020196010BDF4DC0020BB -:10AEA000034610B505200C4A002100BF01EB410408 -:10AEB00004EB011432F824409C4209D101EB410318 -:10AEC00003EB011102EB810100208870486010BD86 -:10AED000491C0829EAD310BDF4DC002070B50446F3 -:10AEE00005200B4B002200BF02EB420505EB0215CB -:10AEF00033F82560A64204D103EB8505AD78012D1A -:10AF000003D0521C082AEFD370BD00200A6070BD28 -:10AF1000F4DC002000200749024600BF00EB40039C -:10AF200003EB001301EB8303401C9A700828F5D350 -:10AF300070470000F4DC002070B5C6B01C46154612 -:10AF4000D8B1D5B1CCB10E4A40921646F822ADF830 -:10AF50000E2141AA3E92CDF808D13EAB3FAAF8F7A8 -:10AF6000ADFE002807D1DDE93E10324669DF2246FA -:10AF70002946F8F72DFF46B070BD0E20FBE7000014 -:10AF800080B300207CB51C46154680B17DB174B1FC -:10AF9000084A01920092F8F7F1FF002806D16846AE -:10AFA00002F0A4FE22462946F8F7F7FF7CBD0E20EA -:10AFB0007CBD000080B300203EB51C46154688B11C -:10AFC00085B17CB101AA009289B26A46F9F7F7F916 -:10AFD000002806D100986DDF22462946009BF9F72C -:10AFE0000DFA3EBD0E203EBD3EB51C46154678B15D -:10AFF00075B16CB101AA00926A46F9F731FA0028DE -:10B0000005D100986CDF22462946F9F74BFA3EBD80 -:10B010000E203EBD70B596B01C4615460E4610B3C8 -:10B020000DB304B306A902911F210EAA8DF80C10CE -:10B0300004928DF8141005AA04A9CDE9001203ABFF -:10B0400002AA3146F9F797FA00280AD19DF8143080 -:10B050009DF80C10049A029872DF22462946F9F7EF -:10B06000B9FA16B070BD0E20FBE730B589B01C46AA -:10B070001546A8B1A5B19CB106AA039202AA0092F6 -:10B0800001AB6A46F9F7EEFA002807D19DF80410E3 -:10B09000009873DF22462946F9F718FB09B030BD46 -:10B0A0000E20FBE730B41D46144638B134B12DB143 -:10B0B00074DF2A46214630BCF9F70EBB30BC0E20A7 -:10B0C00070477CB51C46154688B185B17CB101AA94 -:10B0D000009289B26A46F9F705FB002806D100986C -:10B0E00079DF22462946009BF9F71EFB7CBD0E2026 -:10B0F0007CBD38B51C46154670B16DB164B16A4669 -:10B10000F9F748FB002806D1BDF8000078DF224699 -:10B110002946F9F75EFB38BD0E2038BD30B589B041 -:10B120001C461546C0B1BDB1B4B104AA019201AA32 -:10B13000009289B203AB02AAF9F751FB002809D1AA -:10B140009DF80C10BDF80800019A80DF22462946C0 -:10B15000F9F788FB09B030BD0E20FBE77FB51C4630 -:10B16000154698B195B18CB102AA00926B4601AA1E -:10B17000F9F77EFB002807D1BDF8040000997EDFB7 -:10B1800022462946F9F7A6FB04B070BD0E20FBE766 -:10B190007FB51C46154698B195B18CB102AA0092B4 -:10B1A0006B4601AAF9F716FC002807D1BDF8040088 -:10B1B000009975DF22462946F9F73EFC04B070BDC0 -:10B1C0000E20FBE73EB51C46154698B195B18CB1F3 -:10B1D00002AA00926B4601AAF9F784FC002808D164 -:10B1E000BDF80400009987DF23462A460099F9F745 -:10B1F000A5FC3EBD0E203EBD30B58DB01C461546AB -:10B20000F0B1EDB1E4B106AA029208AA03920AAA2B -:10B21000049205AB04AACDE9002303AB02AAF9F717 -:10B220000BFD00280AD10DF1080C9DF814309CE8A4 -:10B2300007008CDF22462946F9F752FD0DB030BDDC -:10B240000E20FBE730B41D46144638B134B12DB1A1 -:10B250008DDF2A46214630BCF9F7E8BC30BC0E2011 -:10B26000704730B589B01C461546D0B1CDB1C4B1D8 -:10B2700004AA029206AA019201AA009289B202AB24 -:10B2800003AAF9F7A3FD002809D1DDE90121BDF8E2 -:10B290000C0090DF22462946019BF9F7D1FD09B049 -:10B2A00030BD0E20FBE70000F0B5E3B01C461546AC -:10B2B0008E4660B35DB354B3002201AE4FAB2FAFE7 -:10B2C0000DF5B471C2EBC20C0CEB021CB44443F894 -:10B2D00022C007EB021C41F822C0521CD2B2082A3D -:10B2E000F0D3CDE9573159A9009158AB57AA71460F -:10B2F000F9F7DCFD002808D1DDE957019DF864214C -:10B300006FDF22462946F9F74FFE63B0F0BD0E20ED -:10B31000FBE730B5C3B01C461546B0B1ADB1A4B122 -:10B3200001AA3F9241AA409240AB3FAAF9F742FEE0 -:10B33000002808D1DDE93F017DDF0094DDE93F12FF -:10B340002B46F9F767FE43B030BD0E20FBE730B562 -:10B35000C3B01C461546D8B1D5B1CCB142AA3F9274 -:10B3600001AA4092F822ADF8042141AA009240AB14 -:10B370003FAAF9F791FE002808D1BDF80421DDE9C4 -:10B380003F017CDF22462946F9F7BCFE43B030BDC1 -:10B390000E20FBE77CB51C46154688B185B17CB113 -:10B3A00001AB6A46F9F7B4FE002808D19DF80410F5 -:10B3B000BDF8000076DF22462946F9F7D3FE7CBDB2 -:10B3C0000E207CBD30B58DB01C461546C8B1C5B148 -:10B3D000BCB109AA019204AA029202AA009289B2FF -:10B3E00001AB03AAF9F752FF002808D1DDE90112E9 -:10B3F000BDF80C0085DF22462946F9F78BFF0DB01A -:10B4000030BD0E20FBE77CB51C46154688B185B1E2 -:10B410007CB101AB6A46FAF715FE002808D19DF809 -:10B420000410BDF8000082DF22462946FAF734FEF8 -:10B430007CBD0E207CBD30B58BB01C46154698B146 -:10B4400095B18CB102AA00926B4601AAFAF72AFEC6 -:10B45000002807D1BDF80400009981DF2246294663 -:10B46000FAF750FE0BB030BD0E20FBE730B59FB0B1 -:10B470001C461546C8B1C5B1BCB114AA019203AAB5 -:10B48000029201AA009202AB13AAFAF74DFE00281D -:10B4900009D1DDE90121BDF84C0083DF23462A46AE -:10B4A0000199FAF781FE1FB030BD0E20FBE730B5E1 -:10B4B00099B01C461546C0B1BDB1B4B104AA019201 -:10B4C0000EAA029202AA009201AB03AAFAF7A2FE08 -:10B4D000002808D1DDE90112BDF80C0084DF224606 -:10B4E0002946FAF7D7FE19B030BD0E20FBE73EB56E -:10B4F0001C46154690B18DB184B102AA00926B46EC -:10B5000001AAFBF779F8002807D1BDF804000099DB -:10B510008FDF22462946FBF7A1F83EBD0E203EBD37 -:10B520003EB51C46154688B185B17CB101AA009292 -:10B5300089B26A46FBF7C8F8002806D100987BDF7D -:10B5400022462946009BFBF7E3F83EBD0E203EBD98 -:10B550003EB51C46154678B175B16CB101AA009292 -:10B560006A46FBF70BF9002805D100987ADF2246DE -:10B570002946FBF727F93EBD0E203EBD30B587B00A -:10B580001C461546A0B19DB194B101AA009203AA30 -:10B59000029289B26A46FBF71BF9002806D100988F -:10B5A00071DF22462946009BFBF734F907B030BD16 -:10B5B0000E20FBE730B587B01C46154690B18DB123 -:10B5C00084B101AA009203AA02926A46FBF7ACF981 -:10B5D000002805D1009870DF22462946FBF7C6F9FE -:10B5E00007B030BD0E20FBE73EB51C461546A0B1A6 -:10B5F0009DB194B102AA009289B26B4601AAFBF7F1 -:10B60000BBF9002808D1BDF8040000998EDF22465E -:10B610002946009BFBF7E0F93EBD0E203EBD7FB5FD -:10B620001C461546B0B1ADB1A4B103AA009202AB5D -:10B6300001AAFBF707FA00280AD19DF80C209DF813 -:10B640000810BDF8040088DF22462946FBF733FACC -:10B6500004B070BD0E20FBE738B51C46154670B12E -:10B660006DB164B16A46FBF72CFA002806D1BDF82B -:10B67000000089DF22462946FBF742FA38BD0E203A -:10B6800038BD3EB51C46154678B175B16CB101AAFE -:10B6900000926A46FBF774FA002805D100988ADF09 -:10B6A00022462946FBF792FA3EBD0E203EBD30B43D -:10B6B0001D46144638B134B12DB18BDF2A462146E0 -:10B6C00030BCFBF789BA30BC0E20704730B595B05E -:10B6D0001C461546F0B1EDB1E4B108AA02920DAADC -:10B6E000039211AA049204AB03AACDE9002389B204 -:10B6F00002AB07AAFBF776FA002809D102A890E866 -:10B700000E00BDF81C0086DF22462946FBF7C0FA72 -:10B7100015B030BD0E20FBE72DE9F04188B01D4685 -:10B720001646884607003DD0DEB3D5B3002005900D -:10B7300006A8039005A8FFF70BFB002833D1059856 -:10B740002349C0EB001000EB800001EB8004201DBA -:10B7500004F1240202906260059A04ABC2EB02126B -:10B7600002EB820201EB820101F14002A26017327A -:10B77000E26010322261413262611C324261173252 -:10B78000EB31C0E9062102A903A8CDE90001224658 -:10B7900041463846FBF786FB002804D1029828B1C1 -:10B7A00009E0FFE70E2008B0BDE8F0812088FFF730 -:10B7B000EFFA0028F7D1DDE9023220889DF8101059 -:10B7C0007FDF2A463146029BFBF7BCFBEBE700001C -:10B7D00094CF002038B51C46154670B16DB164B1E8 -:10B7E0006A46FBF7ABFC002806D19DF9000077DF25 -:10B7F00022462946FBF7C1FC38BD0E2038BD0000AB -:10B80000F0B599B01C4615460E4600B3FDB1F4B133 -:10B8100000226B460DF13801C2EBC2071F4441F80C -:10B820002270521CD2B2082AF6D3169117AB16AA70 -:10B830003146FBF7A9FC002807D19DF85C1016984B -:10B840006EDF22462946FBF7EDFC19B0F0BD0E2055 -:10B85000FBE73EB51C461546A8B1A5B19CB1002337 -:10B86000029302AB009301AA89B26B46FBF792FDEB -:10B87000002807D1BDF80400009998DF2246294628 -:10B88000FBF7BAFD3EBD0E203EBD30B587B01C466D -:10B890001546D8B1D5B1CCB10022049204AA0192C8 -:10B8A00005AA029202AA009289B201AB03AAFBF791 -:10B8B000E9FD002808D1DDE90112BDF80C0099DF8F -:10B8C00022462946FBF722FE07B030BD0E20FBE7DB -:10B8D00030B58BB01C461546D8B1D5B1CCB104AB50 -:10B8E00001930B23ADF8083002AB009303AA89B291 -:10B8F00001ABFBF711FE002809D1BDF80820BDF807 -:10B900000C0001999BDF22462946FBF737FE0BB05E -:10B9100030BD0E20FBE73EB51C46154698B195B1EB -:10B920008CB102AA009289B26B4601AAFBF72CFEE9 -:10B93000002807D1BDF80400009996DF2246294669 -:10B94000FBF750FE3EBD0E203EBD3EB51C461546E3 -:10B9500098B195B18CB102AA009289B26B4601AA46 -:10B96000FBF768FE002807D1BDF80400009997DFB7 -:10B9700022462946FBF78CFE3EBD0E203EBD7CB51F -:10B980001C46154690B18DB184B189B201AB6A46AF -:10B99000FCF7E1FB002808D1BDF80410BDF8000059 -:10B9A0009EDF22462946FCF7FEFB7CBD0E207CBDB7 -:10B9B0007CB51C46154688B185B17CB16A4601ABA1 -:10B9C000FCF727FC002808D1BDF80410BDF80000E2 -:10B9D0009DDF22462946FCF744FC7CBD0E207CBD41 -:10B9E00030B585B01C461546C0B1BDB1B4B104AA8E -:10B9F000019201AA009289B203AB02AAFCF752FCA1 -:10BA0000002809D1BDF80C10BDF80800019A94DF98 -:10BA100022462946FCF77EFC05B030BD0E20FBE730 -:10BA20007FB51C461546B8B1B5B1ACB103AE01AA9D -:10BA300002AB89B20096FCF773FC00280AD1BDF86E -:10BA40000C20BDF80810BDF804009ADF22462946F4 -:10BA5000FCF79AFC04B070BD0E20FBE73EB51C4617 -:10BA6000154698B195B18CB102AA009289B26B4685 -:10BA700001AAFCF78FFC002807D1BDF8040000994B -:10BA800095DF22462946FCF7B3FC3EBD0E203EBDA5 -:10BA900030B5C3B01C461546E0B1DDB1D4B10023CA -:10BAA0003F9340933FAB3D93F423ADF802313EAA60 -:10BAB000CDF804D189B23DABFCF7EEFC002807D1EC -:10BAC000BDF8F8003D999CDF22462946FCF712FD9F -:10BAD00043B030BD0E20FBE730B587B01C4615469D -:10BAE000D8B1D5B1CCB104AA019205AA029201AA9B -:10BAF000009202AB03AAFCF703FD00280BD1DDE99D -:10BB00000121BDF80C00ACDF0199009122462946C5 -:10BB1000029BFCF72BFD07B030BD0E20FBE770B594 -:10BB2000ADF58E6D1C4615460E46F0B3EDB3E4B38D -:10BB300002AACDF830240DF58962CDF838241032F0 -:10BB4000CDF83C24121DCDF84024121D4FF4007195 -:10BB5000CDF84424ADF83614343ACDF80C24ADF8C1 -:10BB60002014383282A9CDF81824CDF82814121DDB -:10BB70000DF58361CDF81C24CDF810143831CDF8C3 -:10BB800008144039603ACDE900120B1F0A1D3146F6 -:10BB9000FCF7E8FE00280FD10DF20C41BDF81404AB -:10BBA00006C9DDF80834A2DF00E008E02246294695 -:10BBB000DDF80834FCF71CFF0DF58E6D70BD0E200E -:10BBC000FAE730B5ADF50D7D1C46154620B31DB323 -:10BBD00014B384AA829289AA84928AAA859201AA1D -:10BBE00088924FF40072ADF818228BAA819281AA34 -:10BBF000009282AB83AAFCF739FF002809D1DDE966 -:10BC00008121BDF80C02A3DF22462946819BFCF767 -:10BC100067FF0DF50D7D30BD0E20FAE77CB51C46A3 -:10BC2000154690B18DB184B16A4601AB89B2FDF77A -:10BC30002DFA002808D1BDF80410BDF80000ADDFD2 -:10BC400022462946FDF74AFA7CBD0E207CBD70B520 -:10BC5000ADF5087D1C4615460E46D0B1CDB1C4B138 -:10BC60004FF4007282ABADF818228093694686AA21 -:10BC7000CDE9842180AB81AA3146FDF771FA002815 -:10BC800008D1BDF804028099A6DF809929B18B689C -:10BC900004E00E200DF5087D70BD002322462946E4 -:10BCA000FDF78CFAF6E730B585B01C461546C8B1ED -:10BCB000C5B1BCB104AA019201AA009289B203AB3A -:10BCC00002AAFDF7B1FA00280AD1BDF80C10BDF8A0 -:10BCD0000800019AA1DF22462946019BFDF7DAFA06 -:10BCE00005B030BD0E20FBE77CB51C46154680B183 -:10BCF0007DB174B101AA00926A46FDF701FB0028EC -:10BD000006D10098ABDF22462946009BFDF718FBC1 -:10BD10007CBD0E207CBD30B5ADF5077D1C461546BB -:10BD2000D0B1CDB1C4B182AA80924FF40072ADF807 -:10BD30001222CDF814D280AB81AAFDF757FB002860 -:10BD400007D1BDF804028099A8DF22462946FDF7F5 -:10BD50007BFB0DF5077D30BD0E20FAE730B587B0CF -:10BD60001C461546D8B1D5B1CCB10022049204AA24 -:10BD7000029205AA019201AA009202AB03AAFDF762 -:10BD800069FB002809D1DDE901219DF80C00A0DF45 -:10BD900022462946019BFDF797FB07B030BD0E20D8 -:10BDA000FBE77FB51C461546B0B1ADB1A4B103AAFF -:10BDB000009202AB01AAFDF7BDFB00280AD1BDF835 -:10BDC0000C20BDF80810BDF80400A7DF2246294664 -:10BDD000FDF7E4FB04B070BD0E20FBE730B5ADF518 -:10BDE000077D1C46154618B315B30CB302AA829200 -:10BDF0004FF40072ADF8182286AA839285AB83AA0D -:10BE0000CDE9002382AB84AAFDF7CEFB00280CD13C -:10BE1000DDE98212BDF81002859BAADF83990091AB -:10BE200022462946829BFDF701FC0DF5077D30BDBA -:10BE30000E20FAE730B5ADF5077D1C461546F8B182 -:10BE4000F5B1ECB102AA82924FF40072ADF80C2267 -:10BE500085AB83AACDE9002382AB84AAFDF728FC39 -:10BE600000280AD1BDF80C22BDF81002859B8299EA -:10BE7000A9DF22462946FDF750FC0DF5077D30BDB0 -:10BE80000E20FAE730B5ADF5077D1C461546E0B14A -:10BE9000DDB1D4B184AA819201AA859281AA0092CF -:10BEA00089B283AB82AAFDF73EFC00280AD1BDF817 -:10BEB0000C12BDF80802819AA5DF22462946819B13 -:10BEC000FDF782FC0DF5077D30BD0E20FAE700007E -:10BED00030B5ADF5077D1C461546F8B1F5B1ECB1AE -:10BEE0000F4A89B283AB1268849201AA859284AA10 -:10BEF000819281AA009282AAFDF79CFC00280AD1B7 -:10BF0000BDF80C12BDF80802819AA4DF224629462A -:10BF1000819BFDF7C7FC0DF5077D30BD0E20FAE7CC -:10BF2000F4FF020030B589B01C46154680B17DB1E2 -:10BF300074B102AA019289B201AB04AAFEF7DBF93F -:10BF4000002806D10498212805D0222808D105E030 -:10BF50000E2009B030BD07A9039101E005A90291A7 -:10BF6000019968DF0199009122462946049BFEF75A -:10BF7000F3F9EEE7F0B587B01D4616460C4607000C -:10BF800013D096B18DB14FF0FF300090A1B26A4648 -:10BF90003846FEF753FA002808D102A8019000980D -:10BFA000212805D0222808D105E00E2007B0F0BDD9 -:10BFB00006A8039001E004A80290A1B201AB6A4672 -:10BFC0003846FEF751FA0028F0D1DDE9000167DFBD -:10BFD0002A463146FEF7C2FAE8E7000030B585B0E0 -:10BFE0001C46154658B355B34CB303AA019201AB96 -:10BFF0006A46FEF709FB00281FD10198A8B102A8E4 -:10C00000FEF72CFF002818D10298BDF8002000EBA5 -:10C01000400101EB00110B4820F82120019A00EBB0 -:10C02000810092880281001D01900146BDF8000048 -:10C0300066DF22462946FEF719FB05B030BD0E200B -:10C04000FBE70000F4DC002030B589B01C46154643 -:10C05000E0B1DDB1D4B110228DF8082004AA03921A -:10C0600008AA019201AA009203AB02AAFEF71CFBE8 -:10C07000002809D19DF80800019A039963DF224640 -:10C080002946019BFEF73CFB09B030BD0E20FBE7C3 -:10C0900030B58BB01C46154618B315B30CB310223F -:10C0A0008DF8102004AA029205AA019209AA03920F -:10C0B0000022099201AA009289B202AB03AAFEF7FC -:10C0C00055FB00280BD1DDE90210019A64DF0199CC -:10C0D00000919DF8103022462946FEF78FFB0BB0E9 -:10C0E00030BD0E20FBE730B587B01C461546B0B119 -:10C0F000ADB1A4B102AA019206AA009289B26B4620 -:10C1000001AAFEF7E9FB002807D1DDE9001062DF94 -:10C1100022462946009BFEF715FC07B030BD0E20D5 -:10C12000FBE73EB51C46154688B185B17CB101AA36 -:10C13000009289B26A46FEF73BFC002806D10098BF -:10C1400065DF22462946009BFEF754FC3EBD0E20CB -:10C150003EBD30B58DB01C46154688B185B17CB169 -:10C16000CDF830D00CAA00F0E9FB002806D10C98DD -:10C1700043DF224629460C9B00F002FC0DB030BD87 -:10C180000E20FBE7F0B480B17AB173B105780B4EA5 -:10C19000002400BF16F83470AF4209D106EBC40486 -:10C1A000646844B1A446F0BC60470E20F0BC704700 -:10C1B000641C502CEED30620F8E70000C8010300F1 -:10C1C00030B587B01C461546E8B1E5B1DCB106AA2A -:10C1D000029202AB03AACDE9002389B204AB05AAFF -:10C1E000FDF7C4FB00280CD1BDF80C20BDF81010E1 -:10C1F000BDF81400029BB4DF22462946029BFDF7DE -:10C20000F3FB07B030BD0E20FBE77CB51C4615469E -:10C2100090B18DB184B189B201AB6A46FDF71AFCC9 -:10C22000002808D1BDF80410BDF80000B1DF224697 -:10C230002946FDF737FC7CBD0E207CBD30B587B0AC -:10C240001C461546C0B1BDB1B4B104AA019201AA01 -:10C25000009289B203AB02AAFDF753FC002809D172 -:10C26000BDF80C10BDF80800019AB2DF224629463D -:10C27000FDF79FFC07B030BD0E20FBE730B589B05D -:10C280001C461546D0B1CDB1C4B103AA019205AA8E -:10C29000029202AA009289B201AB04AAFDF7B2FC95 -:10C2A000002809D1DDE90112BDF81000B0DF2246F7 -:10C2B0002946019BFDF7ECFC09B030BD0E20FBE7E1 -:10C2C00030B587B01C461546C0B1BDB1B4B104AAA3 -:10C2D000019201AA009289B203AB02AAFDF736FDD2 -:10C2E000002809D1BDF80C10BDF80800019AB3DF91 -:10C2F00022462946FDF796FD07B030BD0E20FBE72C -:10C3000010B540B13AB133B189B202F003FB002855 -:10C3100000D132DF10BD0E2010BD7CB51C46154685 -:10C3200080B17DB174B101AA00926A4603F0A8F908 -:10C33000002806D1009849DF22462946009B03F0D9 -:10C34000BFF97CBD0E207CBD38B54A7A0F4B62B177 -:10C3500000220A725969002906D001228DF80020B6 -:10C36000ADF802006846884738BD0A7A62B19B681A -:10C370004C68024619462046F7F786FB0028F3D0A2 -:10C38000BDE8384002F0A6BC5B68F1E7F8CC0020BD -:10C390002DE9FC430024099E1D4617468846814628 -:10C3A000ADF800408DF8044056B14DB1286838B161 -:10C3B0003968A8EB0100032804D20920BDE8FC83FA -:10C3C0000E20FBE76B464146484603F08FFD308860 -:10C3D000BDF80010884201D20C20EFE701AB3A46CD -:10C3E0004146484603F0E9FD9DF8040008B10024E9 -:10C3F0000EE0BDF8000030802C600EE028683A4660 -:10C4000000EB44034146484603F070FD641CA4B2AF -:10C41000BDF800008442F1D334800020CEE710B58F -:10C42000044612B11088002211E04FF6FF70FAE7BF -:10C43000030A43EA0023A05C5840C0F303135840AA -:10C4400080EA003080B2C3B280EA4310521C8A42B4 -:10C45000EED310BD2DE9F05F884C0E46174614F858 -:10C46000381F02F03F0201F0C00111434AC414F822 -:10C470003B2C443C032A01D0042A03D1032B01D1D5 -:10C48000FF22E2630125A5724FF00008A4F80E8098 -:10C49000227862B14FF0030A4FF0040948B1032833 -:10C4A0004AD0012A51D0E5810220BDE8F09F052045 -:10C4B000FBE700F0DFF956B1012E11D0022E14D0A7 -:10C4C000032E23D0042E24D0052E25D0A9E0002F42 -:10C4D00055D1C4F8388084F809A084F80580A7E015 -:10C4E000032F4CD8B801A063A2E0012F02D0022F85 -:10C4F00045D104E084F809A084F8058002E084F8BE -:10C5000009906571BDE8F05F02F02CBA012F36D8B2 -:10C510008EE0A7BB06200BE04FF4FF7047B144F25A -:10C520009021012F06D0022F02D0032F79D101E0F4 -:10C53000E0817DE0E1817BE0012AB4D0A08940F474 -:10C540000040E08100F096F972E0032B04D0272E22 -:10C5500002D9E5810120A8E74246A4F80C80012811 -:10C5600002D002280CD063E040F201114448F6F7F3 -:10C570007CFE012002F050FA84F8009058E050E070 -:10C58000E36BFF2B04D0FF2902D9E58103208CE760 -:10C590003B48DFF8F0B04FF002084170022B14D096 -:10C5A00003DC3BB1012B3CD10BE0032B1DD0FF2B57 -:10C5B00037D11EE000F8022B0A463349F6F73CFE5D -:10C5C00008E000F8025B0F2202E000F8028B55221F -:10C5D000F6F744FE002002F01FFA627A0020A16BF9 -:10C5E000042A27D0032A27D027E000F8029BFF2245 -:10C5F000EEE7304637B1012F04D0022F0ED0032FC3 -:10C6000016D111E0002002F007FA00F041F8CBF853 -:10C610000052CBF8005084F800A009E000F0BAF80E -:10C6200004E0E581042040E700F0A4F80028F8D0F9 -:10C6300000203AE7582000E0502000EBC101042A16 -:10C6400000D149080020F93140F27122401C4243D8 -:10C650009142F9D840F271214843A169C1F84005DF -:10C660000A4801F5A0710160011DC1F800B007483A -:10C670000C38056084F80080DAE7000088B30020F9 -:10C6800014CD002000100040C000030010F5014050 -:10C6900002494FF4007008607047000050160040D7 -:10C6A000034900238A7A8B72C9890160104670475A -:10C6B00088B300204AB1012A0BD0022A0DD0032AE8 -:10C6C0000FD0042A11D0002070470B4A02600820C6 -:10C6D0000EE00A4A026009200AE0094A02600A20C4 -:10C6E00006E0084A02601A2002E0074A02601B20A6 -:10C6F000087001207047000000800040009000405A -:10C7000000A0004000A0014000B0014010B503F0BF -:10C7100017F810B902F026F908B1042010BD064838 -:10C72000002101228172027081630448016841F096 -:10C7300010010160002010BD88B3002010ED00E062 -:10C7400078B104280DD0D8280BD0EC2809D0F028D7 -:10C7500007D0F42805D0F82803D0FC2801D00328FE -:10C7600003D1032903D0042901D0042070470020FD -:10C770007047000006490978012901D90020704757 -:10C7800003490246491C01F11700FFF793BF00005F -:10C7900088B3002040B210F0300F01D040F0C0004C -:10C7A000044940B20A78012A01D900207047486143 -:10C7B0000120704788B300202DE9F341002684B0A2 -:10C7C0003746344604A803F01FFA002818D1FFF7B3 -:10C7D0009DFFA0B9DFF8948000F064F80546244876 -:10C7E0006946012290F800C018F80C301BB1001DFA -:10C7F00001F070FE02E00C3001F0DEFC18B1032005 -:10C8000006B0BDE8F08157B119485C380068304483 -:10C81000A84206D29DF800002E460402DCE701275C -:10C82000F8E79DF8000000270443A00BC4F305219E -:10C83000C4F3850204F00303FFF70CFE02A8FFF720 -:10C840002FFF0028C8D002980122000A8DF80400AA -:10C8500001A9074801F0C2F802988DF804000122EE -:10C8600001A9034801F0BAF8B6E70000CCB30020F4 -:10C870007CB4002010B500F013F8074801240460D0 -:10C880000549002008310860091D086002F0F4F82D -:10C890000248047010BD000008F5014088B3002074 -:10C8A000704700002DE9F0471F48016841F0100172 -:10C8B00001601E4D0127DFF878801E4C40F20119FF -:10C8C000002600BFD5F80C01B0B1C5F80C610120FD -:10C8D000F6F721FD207804280ED16F60D8F800000B -:10C8E000012805D1FEF736F910B1A089401CA081BE -:10C8F00049461148F6F7B9FCA069D0F8401111B1CA -:10C90000C0F84061DEE7D0F844010028DAD0A06921 -:10C91000C0F8446194F90100F6F7FDFC2069401C61 -:10C920002061BDE8F087000010ED00E0001000403D -:10C930000014004088B3002014CD00201CB50C4624 -:10C9400040B12CB100210191037801A9432B03D000 -:10C9500007201CBD0E201CBD01230193074B009333 -:10C9600013460A462146FEF7A5F90028F3D101989F -:10C97000A04201D009201CBD00201CBD1DDA020010 -:10C980002DE9FF4184B0984614460F0019D0C4B178 -:10C99000002001902568432001AE8DF80800334641 -:10C9A0002A4602A803F038FB00280BD133462A465A -:10C9B000394604A803F0EBFA002803D1049870B9B3 -:10C9C00003E00E2008B0BDE8F08107480090334630 -:10C9D0002A4639464046FEF79BF90028F2D10198D5 -:10C9E00020600020EEE7000055DA02000E4910B585 -:10C9F0000A784C780023A24212D0521CD2B20A709C -:10CA0000022A00D10B70084A0B780C3252F823200E -:10CA100002608868104420F07F408860012010BDCB -:10CA20000360002010BD0000FCB30020034890F814 -:10CA30003400401C00F0070070470000B4B4002030 -:10CA400030B4029C1CB113B1A44630BC604730BC6A -:10CA50000E20704730B4029C1CB113B1A44630BC08 -:10CA6000604730BC0E20704730B4029C1CB113B13B -:10CA7000A44630BC604730BC0E20704730B4029CE6 -:10CA80001CB113B1A44630BC604730BC0E207047C7 -:10CA900030B4029C1CB110B1A44630BC604730BC1D -:10CAA0000E20704730B4029C1CB110B1A44630BCBB -:10CAB000604730BC0E20704730B4029C1CB110B1EE -:10CAC000A44630BC604730BC0E20704730B4029C96 -:10CAD0001CB110B1A44630BC604730BC0E2070477A -:10CAE00030B4029C1CB110B1A44630BC604730BCCD -:10CAF0000E20704730B4029C1CB110B1A44630BC6B -:10CB0000604730BC0E20704730B4029C1CB110B19D -:10CB1000A44630BC604730BC0E20704730B4029C45 -:10CB20001CB110B1A44630BC604730BC0E20704729 -:10CB300030B4029C1CB110B1A44630BC604730BC7C -:10CB40000E2070472DE9F84F0746007801265B4C10 -:10CB50004FF6FF724FF603494FF0000E01280ED03A -:10CB6000022873D18DF800E06846F6F7E1FFA0785F -:10CB700000286CD001286BD0022868D18FE0B968FA -:10CB8000BB890D7888885FEA951C00D0104691F823 -:10CB900001C091F80380654491F802C047F6043B58 -:10CBA000C444654415F0FF0F47F6025A12D14845B8 -:10CBB00001D0584506D1072B00D01046897911299C -:10CBC00008D108E047F60161884201D0504501D103 -:10CBD000062B00D01046804675468DF800E068466A -:10CBE000F6F7A6FFA8F5F640043838D0B0F5FF7F79 -:10CBF0001AD0A0F50070FD3805D000F5FF70B0F533 -:10CC0000004F33D119E0A4F80CA0A078032805D177 -:10CC1000A6702563656325706570E57000F050F8B7 -:10CC2000012000F099FA21E0A07801281ED102200D -:10CC3000A070A4F80C90A57218E0A078012815D077 -:10CC4000A07A30B1A4F80CB0E67004E033E02EE036 -:10CC50001FE0A4F80C9000F033F8A67206E0A0786C -:10CC6000022803D10320A070267066709DF8000092 -:10CC7000F6F782FFB86802F085FBA07803281AD186 -:10CC8000E078002817D000F079FBBDE8F84F00F0FD -:10CC90009BB947F60160A08100F012F804E0A4F807 -:10CCA0000C9000F00DF8A672012000F055FA9DF8E6 -:10CCB0000000F6F761FFBDE8F88F0000B4B4002073 -:10CCC0002DE9F041244D002488B0A5F12C002C70F2 -:10CCD000818947F60160A046A5F11806814203D07C -:10CCE00047F60250814205D11B490224183903F04E -:10CCF00009F90EE04FF603401127814203D047F6B1 -:10CD00000430814205D114490324183903F0FAF89C -:10CD1000B7700F2040EA0410691C03F0F3F80E48C6 -:10CD200000F052FBE8700420ADF80800019503966E -:10CD3000ADF81040CDF81880ADF81C8006AA03A904 -:10CD400001A802F03DFB002802D00020F6F782FD8A -:10CD500008B0BDE8F0810000E0B4002030B5234CFD -:10CD600087B004F1240594F8340094F8301040EAB8 -:10CD7000C10040F0C0002870608A0E2141EA001016 -:10CD800080B2691C03F0BEF8284600F01DFBE87075 -:10CD9000002204212846FFF742FBADF800006A4656 -:10CDA000618AE069FFF73BFBADF8000004F10E017A -:10CDB00003F0A8F804200195ADF80800E06903909D -:10CDC000608AADF8100004F10E0005900220ADF865 -:10CDD000180005AA03A901A802F0F2FA002802D05F -:10CDE0000020F6F737FD07B030BD0000B4B40020D6 -:10CDF000064890F83410491C002301F00701C36174 -:10CE0000416363F3070002F03DBA0000B4B40020B0 -:10CE100010B5806802F0B6FA002804D0BDE81040D2 -:10CE20000020F6F717BD10BD38B5054600248DF873 -:10CE300000406846F6F77CFE29460D4800F0DAFE11 -:10CE400010B10020F6F706FD0A484179427A1142F6 -:10CE500008D044719DF80000F6F78EFEBDE838401A -:10CE600000F00AB89DF80000F6F786FE38BD000015 -:10CE700088050300B4B4002010B586B05FF000044C -:10CE80008DF8104004A8F6F753FE002269460A48C0 -:10CE900000F04AFE40B10949012048719DF8100098 -:10CEA000F6F76AFE06B010BD9DF81000F6F764FEB6 -:10CEB000684600F005F8E3E788050300B4B40020F5 -:10CEC0002DE9F0413F4C0346204694F801C0028A08 -:10CED000C16B0327022601258069BCF1050F6BD2C7 -:10CEE000DFE80CF067032B445C00187801281CD1A4 -:10CEF0001879022819D19A6894F83070107800F0E7 -:10CF00000700874213D1A571E26398892082062821 -:10CF100002D80020F6F79EFC238A65F307009B1FCA -:10CF200063F30F0102F0AEF96670BDE8F0810420F2 -:10CF30006070084602F026FA14E01D78002DF4D146 -:10CF40001B79012BF1D130B1091D921FF6F774F94D -:10CF5000E06B02F017FA677094F83000401C00F0A4 -:10CF600007002063BDE8F041F6F730BC19780129CD -:10CF7000DBD11979012902D0022915D0D5E738B1C2 -:10CF8000931F66F30707014663F30F02384601E07B -:10CF900067F3070002F076F96570C6E71878012894 -:10CFA00002D118790128F7D09868BDE8F04102F065 -:10CFB000E9B9A0780328B8D1BDE8F0410020F6F720 -:10CFC00049BC0000B4B4002038B500248DF80040FE -:10CFD0006846F6F7ADFD0D4800F076FE0C494A793B -:10CFE0004B7A1A4203D010B18878032804D09DF8F8 -:10CFF0000000F6F7C1FD38BD4C719DF80000F6F752 -:10D00000BBFDBDE83840FFF737BF000088050300CF -:10D01000B4B400201FB502208DF8000000208DF868 -:10D0200004006846FFF78EFD05488178032905D185 -:10D03000C078002802D0684600F0D6F81FBD000076 -:10D04000B4B400207FB5434D04780121AB78EA7871 -:10D050007CB1012C1AD0022C17D18DF80010017868 -:10D060008DF80410416802910089ADF80C00E9B90F -:10D0700019E08DF8001000788DF80400032B04D11E -:10D08000002A02D0684600F0AFF87FBD8DF800108E -:10D0900000788DF80400032BF7D1002AF5D06846FC -:10D0A000FFF7C2FE7FBD0020F6F7D4FBBDF80C00F1 -:10D0B00010B90020F6F7CEFBBDF80C400298042C06 -:10D0C0003BD3407800F00F01052906D00A1E07D097 -:10D0D0000E290FD00F2A39D02FE002F069FA7FBD58 -:10D0E000A878032802D1E8780028CBD1029802F072 -:10D0F00049F97FBD029E042C1FD9327853061CD5F6 -:10D1000013061AD50E2918D11044B178F2781144BB -:10D11000084410F0FF0F10D100223046A11EFFF787 -:10D120007EF9311931F8021C884206D1A87803280B -:10D13000DCD1E8780028D9D0B1E7029802F022F9D2 -:10D140000028D6D00020F6F785FB7FBD6846FFF7A4 -:10D15000F9FC7FBDB4B4002030B50D494FF4003266 -:10D160000124C1F8082388B1FA235843094BC0EBC6 -:10D1700040151D601D6805EB90001860CC60002014 -:10D18000C1F844010C60C1F8042330BD4C6030BDCF -:10D1900000A0004044A500401049092008600F4944 -:10D1A00000200C390860091D08600D480121C1608C -:10D1B0004160891EC0F808134FF40031C0F8041311 -:10D1C0004FF0E0210015C1F88002064B402283F8A1 -:10D1D0000024C1F8000100207047000010A50040A5 -:10D1E00000A000400AE000E038B5054600248DF8B4 -:10D1F00000406846F6F79CFC29460D4800F0FAFC12 -:10D2000010B10020F6F726FB0A480179427A114254 -:10D2100008D004719DF80000F6F7AEFCBDE8384078 -:10D2200000F00AB89DF80000F6F7A6FC38BD000033 -:10D2300074050300B4B4002010B586B05FF000049C -:10D240008DF8104004A8F6F773FC002269460A48DE -:10D2500000F06AFC40B10949012008719DF81000F6 -:10D26000F6F78AFC06B010BD9DF81000F6F784FCB6 -:10D27000684600F005F8E3E774050300B4B4002045 -:10D280002DE9F0413C4D04460427287801264FF053 -:10D29000050806286AD2DFE800F066031523355C2E -:10D2A000207818B1012816D1207916E020790028BD -:10D2B00011D1FFF753FD0020FFF74EFF0220C5F804 -:10D2C00038802BE02078012805D1207928B9012069 -:10D2D000FFF742FF2F70BDE8F08102282DD0FAE75A -:10D2E00020780128F7D120790028F0D00228F2D147 -:10D2F000A06801F0FDFB00B30020FFF72DFF85F8CB -:10D3000000801AE0207801280AD00228E3D1A86B17 -:10D31000401EA86316D0FFF721FD03202870DAE72E -:10D3200020790228D7D1A06801F0E2FB28B10020C3 -:10D33000FFF712FFFFF75CFD2E702046BDE8F041BD -:10D34000FFF766BD062262F30700EA6901F09AFF63 -:10D3500007E020780128BED120790028BDD1FFF751 -:10D3600047FD2E70B7E7A8780328B4D1BDE8F04197 -:10D370000020F6F76FBA0000B4B4002038B50024DE -:10D380008DF800406846F6F7D3FB0D4800F09CFC92 -:10D390000C490A794B7A1A4203D010B188780328D5 -:10D3A00004D09DF80000F6F7E7FB38BD0C719DF83E -:10D3B0000000F6F7E1FBBDE83840FFF73DBF000095 -:10D3C00074050300B4B400200178427880781144D9 -:10D3D0000844C043401CC0B270470000084A002106 -:10D3E00001EB810332F82330834204D101EB810049 -:10D3F00002EB80007047491C0829F1D300207047D8 -:10D4000058CC002070B50D46044600684FF4887172 -:10D4100000F0BDFD4FF49071206800F0B8FD4FF4AE -:10D420009271206800F0B3FD4FF4A271206800F003 -:10D43000AEFD20681249C0F8041320686907000B8C -:10D4400040B2090E002806DA00F00F0000F1E020DB -:10D4500080F8141D03E000F1E02080F8001420683B -:10D460000121000B40B200F01F02914040098000F2 -:10D4700000F1E020C0F88012C0F8001170BD00007B -:10D4800010030200F0B58488A518944200D8224603 -:10D49000A41AC288D6189A4200D81346D21A4B88CA -:10D4A0000788BB420CD34088834209D88888A042B1 -:10D4B00006D3A84204D8C888904201D3B04201D90B -:10D4C0000020F0BD0120F0BD0268134602E08A4250 -:10D4D00004D01268002AFAD10B60016070472DE970 -:10D4E000FC471E460A9C17468846814625882346E7 -:10D4F00002F00DFD002808D120883346CDE9005008 -:10D500003A4641464846FDF7CBFABDE8FC87FFB5F1 -:10D5100081B01D4616460A9C074623462A463146D8 -:10D5200002A802F003FD002807D12B4632460094E2 -:10D53000BDF808103846FDF7E5FA05B0F0BD2DE955 -:10D54000FC471E460A9C1746884681462578234696 -:10D5500002F03EFD002808D120783346CDE9005086 -:10D560003A4641464846FDF79BFABDE8FC87FFB5C1 -:10D5700081B01D4616460A9C074623462A46314678 -:10D5800002A802F049FD002807D12B46324600943C -:10D590009DF808103846FDF7B5FA05B0F0BD00005B -:10D5A0002DE9F047394E002780463D46DFF8E090F0 -:10D5B000D6F804A057E003D00446D0F81C8035E02C -:10D5C00099F8002002EB4201521CD2B289F80020E7 -:10D5D00009EBC10199F80230091D9A4201D189F87D -:10D5E000005048680A780446012A12D0022A02D064 -:10D5F000032A3BD108E002F031F900B1012725747C -:10D6000034E00574C06900E070680028F9D17060EA -:10D610002CE0207C50BB88686060C868A060086906 -:10D62000E0604869A061F07800B165606268B16847 -:10D63000184B501A20F07F40984202D2A16808444B -:10D6400006E0881AA16820F07F40814202D9081ABA -:10D65000206000E0256065600120A5602074204600 -:10D66000E56102F0DDF8B8F10000A4D199F80010EE -:10D6700099F801008142A3D117B97168514502D0D0 -:10D680000120BDE8F0870020FBE70000FCB300208C -:10D690007CCE0020FFFF7F002748016841F08071A9 -:10D6A00001602648016841F0010101600120810705 -:10D6B0008867234A0A214FF4FE70F6F757F908B13C -:10D6C000F6F7C8F800F0E8F818B1852801D0F6F7A9 -:10D6D000C1F8002000F0B2F8002000F011F900BFFE -:10D6E00000F096F80028FBD0164801F08FFC08B136 -:10D6F000F6F7B0F800F05EFB08B1F6F7ABF8F6F716 -:10D7000099F908B1F6F7A6F80F4801F02DFC00BF13 -:10D71000F6F70AF900F0AEFB28B1F6F753F9052841 -:10D7200001D900F0B1FB01F055FC08B1F6F792F811 -:10D7300001F000F8ECE70000FCED00E0001000E074 -:10D740002CB50020E5EE020035E7020038B50446AE -:10D7500000258DF800506846F6F7EAF921686268FE -:10D76000086890420ED9401E08600178238AE2685A -:10D7700001FB0325227A2168101AC0B20A7982427D -:10D7800000D208719DF80000F6F7F6F9284638BD7A -:10D7900038B5054600208DF800000C466846F6F7BF -:10D7A000C7F9E868298A201AB0FBF1F12A681068E5 -:10D7B000431C136001709DF80000F6F7DDF938BDD9 -:10D7C00010B530B1017A42680368891AC9B21A608B -:10D7D00006E00E2010BD03681A68541C1C6011700E -:10D7E000491EC9B2F7D2006800210171084610BD78 -:10D7F00000F180400068002800D00120704708B583 -:10D8000000F18040002101600068009008BD000028 -:10D8100008B500F029FB30B1684641DF00980028C8 -:10D8200000D0012008BD0448006800F00110B0F1EC -:10D83000011FF6D0002008BD0C040040F8B5154DBE -:10D8400004466878002648B114B161680020884712 -:10D850008DF800606846F6F76BF913E08DF800600C -:10D860006846F6F765F924B10A4821460830FFF703 -:10D870002BFE686830B900F0F7FA08B13FDF01E02D -:10D8800000F0A2FB6868401C68609DF80000F6F795 -:10D8900073F9F8BD18CE002070B50B4C207808B194 -:10D8A00085250FE00020A06060602061E0600748EF -:10D8B00000F096FB054600F0D7FA08B900F06EFBC1 -:10D8C00001202070284670BD18CE0020EDAB02006C -:10D8D00038B500258DF800506846F6F729F9074C51 -:10D8E000E068401EE060E06810B900F0AFFBA57092 -:10D8F0009DF80000F6F740F938BD000018CE002072 -:10D90000F8B5134D0446A878002648B114B16168F3 -:10D91000012088478DF800606846F6F709F90EE0A7 -:10D920008DF800606846F6F703F924B108482146EF -:10D930001030FFF7C9FDE86808B900F061FBE8683E -:10D94000401CE8609DF80000F6F716F9F8BD0000ED -:10D9500018CE0020F0B505460478154889B0164663 -:10D9600040F82420124A0869121DA2F1080742F863 -:10D970002400487F385520226846F5F75DFC049462 -:10D980002878385C48B10EB10A4A00E000226946A6 -:10D99000281D00F069FD09B0F0BD0EB1064A00E097 -:10D9A0000022694605F10C0000F09CFBF3E7000043 -:10D9B000D0B30020C9FD0200D9FB020030B40378C7 -:10D9C000054CE35C1BB130BC001D00F083BD30BCD6 -:10D9D0000C3000F0F1BB0000CCB3002030B4037871 -:10D9E000054CE35C1BB130BC001D00F0F5BD30BC44 -:10D9F0000C3000F075BC0000CCB3002030B40378CC -:10DA0000054CE35C1BB130BC001D00F0E5BD30BC33 -:10DA10000C3000F065BC0000CCB300202DE9F843C9 -:10DA200016465FEA000813D096B18BB110271C464A -:10DA30000D46009702F0FDFA002807D104F110030B -:10DA4000324629464046009702F0F3FABDE8F883D3 -:10DA50000E20FBE708B549B143B138B10093134636 -:10DA60000A461021203002F0FAFA08BD0E2008BD47 -:10DA700070B541EA4201DDE904564FF0A04441EAA5 -:10DA8000830141EA052104EB800041EA0641C0F828 -:10DA9000001770BD70B541EA4201DDE904564FF050 -:10DAA000A04441EA830141EA052104EB800041EAF8 -:10DAB0000641C0F8001770BD1CB5002100910B464F -:10DAC00001220191FFF7D4FF1CBD1CB5002100917C -:10DAD0000B4601220191FFF7DDFF1CBD1CB50022A2 -:10DAE0000B46009211460192FFF7C2FF1CBD1CB508 -:10DAF00000220B46009211460192FFF7CBFF1CBD9E -:10DB00001CB5002100910B46012201911146FFF73F -:10DB1000AFFF1CBD1CB5002100910B4601220191F5 -:10DB20001146FFF7B7FF1CBD2DE9F8430446002757 -:10DB300090460E468DF800706846F5F7F9FF2046CE -:10DB400000F039F838B105279DF80000F6F714F811 -:10DB50003846BDE8F88320680568B8F1000F05D1A4 -:10DB60000168204600F03FF821680860E268012A59 -:10DB70000CD0022A0ED0042A11D06068082A13D0D3 -:10DB800005FB02013046F5F757FBDDE76068405DB5 -:10DB90003070D9E7606830F815003080D4E76068ED -:10DBA00050F825003060CFE700EBC501D1E9000156 -:10DBB000C6E90001C8E7016808684968884201D1E0 -:10DBC000012070470020704701680A684968806832 -:10DBD000884201D9491C00E00021914201D1012075 -:10DBE0007047002070478068884201D9481C704700 -:10DBF000002070472DE9F84304464FF000080E4618 -:10DC00008DF800806846F5F793FF2046FFF7DCFFAC -:10DC100007000AD0207C40B14FF004089DF80000B6 -:10DC2000F5F7AAFF4046BDE8F883206845684168DB -:10DC30002046FFF7D8FF2168486037B120680168A7 -:10DC40002046FFF7D0FF21680860E268012A14D05F -:10DC5000022A16D0042A19D0082A1CD0606831463E -:10DC600005FB0200F5F7E8FA204600F06FFE216898 -:10DC70008A688242D2D28860D0E76168307848559D -:10DC8000F2E76168308821F81500EDE761683068D7 -:10DC900041F82500E8E7D6E90001626802EBC50219 -:10DCA000C2E90001E0E738B5054600248DF80040E0 -:10DCB0006846F5F73DFF28680460446084609DF87D -:10DCC0000000F5F759FF38BD38B5044600208DF83F -:10DCD00000006846F5F72CFF204600F037FE0446AA -:10DCE0009DF80000F5F748FF204638BD60DF0028AA -:10DCF00002D1024A012111707047000027B50020AF -:10DD000030B51548ADF5037D0078002821D04FF4DB -:10DD1000FE7500BFADF8085282A9684661DF38B1D0 -:10DD2000052816D00DF5037DBDE83040F5F792BD0E -:10DD30006C460A497FA800F0EDF806E0D0E9002122 -:10DD4000204690477FA800F0FCF881980028E1D099 -:10DD5000F4E70DF5037D30BD27B50020180503005D -:10DD6000F8B5134C2078C0B10120A07000F084FFFA -:10DD7000112814D0022000F097FF00258DF80050E4 -:10DD80006846F5F7D5FE11DF064625709DF80000C0 -:10DD9000F5F7F2FE2EB13046F8BD0820F8BD0020A0 -:10DDA000F8BDA57001F026FC032000F07DFFF6E72A -:10DDB00024B500207CB5204C207808B108207CBD1B -:10DDC0000120A070002000F057FF112819D000207A -:10DDD00000F06AFF19480026006801908DF8006085 -:10DDE0006846F5F7A5FE164901A810DF05000AD020 -:10DDF000002020709DF80000F5F7BEFE2DB12846EA -:10DE00007CBD00207CBD0120F3E7A6706670072171 -:10DE1000162000F0C9FE08B1F5F71CFD07211520FA -:10DE200000F0C2FE08B1F5F715FD01F0FFFB01207F -:10DE300000F03AFFE5E7000024B50020AC04030041 -:10DE40000D3802000EB50749684600F063F805E09A -:10DE5000D0E900108847684600F073F8029800285F -:10DE6000F6D10EBDC80403000148007870470000D9 -:10DE700024B50020034801784078814381F00100F7 -:10DE80007047000024B5002070B50C4C60782178F4 -:10DE9000084212D01620F5F77BFC002530B14FF078 -:10DEA000E0214FF48000C1F8000203E042F20100DB -:10DEB000F5F7D0FC01F0BAFB657070BD24B5002009 -:10DEC0001FB5684648DF30B1052814D004B0BDE85E -:10DED0001040F5F7BFBC084901A800F01BF806E0A8 -:10DEE000D0E900210098904701A800F02AF8039893 -:10DEF0000028E6D0F4E71FBD3405030010B5044C3C -:10DF00002078002803D001F075FB0120607010BD5F -:10DF100024B50020016009684160AFF3008010B5AE -:10DF2000D0E900215368994201D1002104E0D1E9F0 -:10DF30000034A34202D01946816010BD083141600F -:10DF4000F0E7816800290BD0026892680A44826079 -:10DF500041684B689A4203D108314160FFF7DFBF47 -:10DF600070474058002800D00120704708B50022B3 -:10DF700042504058009008BDD0F80403084000D03B -:10DF8000012070474058002800D00120704708B594 -:10DF9000002242504058009008BD00000848006828 -:10DFA000012110F0010F08D14FF0E020E02280F8AD -:10DFB0000024C0F88012C0F80011024801607047C8 -:10DFC00000E100E01805004010B54FF48070FFF745 -:10DFD00016FC01208107C1F80403086010BD000091 -:10DFE0000649024600200B790BB1852070470A6074 -:10DFF00001220A7100224A7170470000D8B3002044 -:10E0000070B54FF48270FFF7FAFB02204107C1F8A8 -:10E0100004030B4B196841F08070186009480268CE -:10E0200042F00104046044684FF40A554668361B08 -:10E03000AE42FBD30260196003490120086070BD45 -:10E04000FCED00E0001000E0080000400449012061 -:10E05000086004480168C1F300410029FAD1704703 -:10E060000C00004018040040002802D00149800143 -:10E0700008477047C10103000121B1EB507F01D176 -:10E08000012070470020704738B50D4600F052FC63 -:10E09000040014D000208DF800006846F5F748FD14 -:10E0A000207928B19DF80000F5F766FD112038BDF4 -:10E0B0000120256020719DF80000F5F75DFD00202E -:10E0C00038BD10B500F036FC002802D000210160F8 -:10E0D000017110BD0149024801F0E2BD2CCE0020C3 -:10E0E000002000402DE9F0410546007916460F4614 -:10E0F00000EB40012D4A01EBC00102EB810494F8D2 -:10E100002A1011B10820BDE8F081294951F82010EA -:10E110002868FFF7B9FF08B11120F4E7394628460F -:10E12000F5F744FD66603869206030004FF0010665 -:10E130002FD03F7F4FF48E712868FFF717FF4FF401 -:10E14000A2712868FFF712FF28681A49C0F8041363 -:10E1500028684FEA4711000B40B2002806DA00F0A9 -:10E160000F0000F1E02080F8141D03E000F1E02032 -:10E1700080F800142868000B40B200F01F0206FA75 -:10E1800002F14009800000F1E020C0F88012C0F8E0 -:10E19000001128680421C0F800150020A061E0618A -:10E1A00084F8290044F8140FA675ACE72CCE0020A3 -:10E1B000ECFF0200800002002DE9F05F05460079C7 -:10E1C0004FF4017600EB400303EBC000344B03EB4C -:10E1D00080040020636813B12B68C3F80863A36947 -:10E1E0004FF000096BB1E06938B1606810B1286880 -:10E1F000C0F804631120BDE8F09FE26101202161B5 -:10E2000005E0C4F82490A261E160C4F81C9094F881 -:10E210002910014302D1284600F0B6FC60680028AE -:10E22000286803D0C0F804630020E4E74FF4A27626 -:10E230003146FFF79BFEB2464FF4927B5946286861 -:10E24000FFF78FFE06464FF484712868FFF789FEBA -:10E25000804651462868FFF784FE074648EA0700D3 -:10E260003043EBD056EA070007D12146286800F07A -:10E270005BFCA169606A8142E0D8C4F818900EB1D5 -:10E280000320B8E70FB10F20B5E794F8291001205B -:10E290000029296801D00860C6E74860C4E700008B -:10E2A0002CCE002070B5044600790C4D00EB4001E7 -:10E2B00001EBC00005EB800090F8290000280CD18C -:10E2C000204600F061FC2179012001EB410202EBC4 -:10E2D000C10105EB810181F8290070BD2CCE002021 -:10E2E0002DE9F047054600790B4600EB400101EBB4 -:10E2F000C000234901EB8004284600F043F810B128 -:10E300001120BDE8F0874FF00008C4F82080A3601A -:10E31000626184F828804FF48E764746314628683B -:10E32000FFF724FE28684FF00109C0F80890214645 -:10E33000286801F0CFFB606800BBD5F800A00EE0B4 -:10E3400094F8280008B10F2716E031465046FFF731 -:10E3500008FE0028F4D02146504601F0BBFB216A9C -:10E3600060698142F1D331462868FFF7FAFD002841 -:10E37000F9D02868C0F80C90C4F814803846C0E77B -:10E380002CCE0020007900EB400101EBC0000449D5 -:10E3900001EB80004069002800D001207047000098 -:10E3A0002CCE00202DE9F047044600794FF00009FB -:10E3B00000EB400101EBC000254901EB800720681C -:10E3C000C0F80095786880B120682249C0F8081329 -:10E3D00020680121000B40B200F01F02914040096B -:10E3E000800000F1E020C0F880112068D0F80C25F2 -:10E3F000D0F81485D0F80865D0F810554FF0FF31EB -:10E40000C0F81415C0F80C152068C0F80815C0F83D -:10E410001015501C02D01046FFF74EFBB8F1FF3F1D -:10E4200002D04046FFF748FB681C02D02846FFF7A1 -:10E4300043FB701C02D03046FFF73EFB2068FFF71D -:10E4400040FE87F82A90C7F80490BDE8F0870000E6 -:10E450002CCE0020840202000149024801F0CCBC0D -:10E4600058CE0020002000402DE9F0410546164618 -:10E4700000790F46154A00EBC00102EB810494F8C5 -:10E48000201011B10820BDE8F081114951F8201089 -:10E490002868FFF7F9FD08B11120F4E7394628464E -:10E4A000F5F7C8FB6660386920601EB1397F2846E1 -:10E4B000FEF7A8FF28680821C0F800150020A06119 -:10E4C000E0610121606184F82010DCE758CE002073 -:10E4D000F0FF02002DE9F05F044600790E4600EBE4 -:10E4E000C001DFF8F0A017460AEB81053046FFF7C0 -:10E4F000C3FDB0B168684FF000084FF4047910B163 -:10E500002168C1F80893A8694FF0000B80B1E86951 -:10E5100048B1686810B12068C0F804931120BDE8C4 -:10E52000F09F1020FBE7EF614FF001082E6102E041 -:10E53000EE60C5E9067B00254FF488712068FFF77F -:10E5400026FD4FF4A2712068FFF721FD2068C0F876 -:10E550003465C0F838752068B8F1000F12D0D0F8D3 -:10E56000001241F02001C0F800122079D04600EBE3 -:10E57000C0010AEB8100406838B12068C0F80493FC -:10E580002846CCE701210160EFE74FF4887A4FF489 -:10E59000A27951462068FFF7F5FC074649462068F6 -:10E5A000FFF7F0FC06464FF492712068FFF7EAFC93 -:10E5B000014647EA06000843EBD0227902EBC2038A -:10E5C00008EB8302C2F818B001B10325002ED7D0A2 -:10E5D0000F25D5E758CE00202DE9F04704460E461A -:10E5E0000079204900EBC00001EB8005174630465A -:10E5F000FFF742FD30B1204600F036F820B111207F -:10E60000BDE8F0871020FBE76F61AE604FF49076B5 -:10E61000002731462068FFF7BAFC4FF4AC7841463A -:10E620002068FFF7B4FC2068AA686969C0F844252F -:10E63000C0F84815206801218160686878B9B14642 -:10E6400049462068FFF79EFC064641462068FFF7D2 -:10E6500099FC0643F4D000B10F27002068613846CA -:10E66000CEE7000058CE00200079054900EBC0003D -:10E6700001EB80004069002800D0012070470000B5 -:10E6800058CE00202DE9F04704460079274900EBD9 -:10E69000C00001EB800720684FF00009C0F800952A -:10E6A000786880B120682249C0F8081320680121E9 -:10E6B000000B40B200F01F0291404009800000F1C1 -:10E6C000E020C0F880112068D0F80C25D0F814851F -:10E6D000D0F80865D0F810554FF0FF31C0F80C1590 -:10E6E000C0F814152068C0F80815C0F81015501CA3 -:10E6F00002D01046FFF7E9F9B8F1FF3F02D04046DB -:10E70000FFF7E3F9681C02D02846FFF7DEF9701C1A -:10E7100002D03046FFF7D9F92068FFF7D2FC87F81E -:10E720002090C7F80490BDE8F087000058CE002084 -:10E730001003020010B5FFF797FB08B13EDF10BDD4 -:10E7400020BF40BF20BF10BD70B51D46049C0E46C3 -:10E75000034642B13DB134B129682068091A052940 -:10E7600003D2092070BD0E2070BD411C21601354DE -:10E7700020688118304601F0EAFB216808442060D7 -:10E780002860002070BD00002DE9F05F5E4D00267E -:10E790000B464FF0050B3446C0B2297804276BF3C3 -:10E7A00007044FF003084FF002094FF0010A072851 -:10E7B00063D2DFE800F00413535E7A828900687840 -:10E7C00003285AD16F70514800F092FC08B1F5F758 -:10E7D00041F83146204661F3070048E020469AB2EE -:10E7E0006AF30700B2F5007F19D8012902D0042985 -:10E7F0000ED042E032466B6811469847444800F01C -:10E8000079FE08B1F5F726F885F80090BDE8F09F8D -:10E8100032466B681146984785F800B0F6E7012943 -:10E8200002D004290DD028E032466B681146984783 -:10E83000002000F05FFE08B1F5F70CF885F80080C5 -:10E84000E4E732466B6811469847002000F052FE1C -:10E8500008B1F4F7FFFF06202870D7E702290CD192 -:10E8600020462F7069F30700194662F30F063246FF -:10E8700045E0032906D006290ED0BDE8F05F002050 -:10E88000F4F7E8BF204632466B6868F3070011468C -:10E89000984785F800A0B9E7204632466B6868F3D0 -:10E8A0000700114698472F70B0E7324620461146C0 -:10E8B00067F3070062F3070121E02046314667F362 -:10E8C00007006AF30701D2E767F307046878A046F8 -:10E8D00069F307061C46032802D0022905D00BE085 -:10E8E0006F70104600F004FC03E02F70104600F03B -:10E8F000B5FB08B1F4F7AEFF2246314640466B68DF -:10E90000BDE8F05F18470000ACB4002074DF0020C1 -:10E9100074E1002028B111B10078322803D007201B -:10E9200070470E207047012901D009207047002050 -:10E93000704700000349884201D103487047002016 -:10E940007047000000200040E0B3002001680A6822 -:10E950004968914201D3881A70478068801A084438 -:10E96000401C704770B52A4C617A6069FDF7E8FE7B -:10E97000012510B1E581042070BD00F07DF8254926 -:10E98000606908602348617A001D016021481830E1 -:10E99000026822F0FF0202600368A26A43EA12637F -:10E9A000036010021B4A103210601A4824300560C0 -:10E9B000184A002020321060207AA27940EA022012 -:10E9C000144A28321060032901D004290CD120797F -:10E9D000E178000440EA0120A1780843617940EA27 -:10E9E00001600C490831086094F8240094F8201064 -:10E9F000400640EA0160A18B40EA0140E17940EA2B -:10EA00000120044940F0FF000C310860002070BD77 -:10EA100088B300200C15004010B50446FDF740FFF8 -:10EA20001149124AC86A1060121D086B1060086C08 -:10EA3000022202EB40000D4A303A1060121F0C48CF -:10EA400010600C4A0020C2F800010323C2F8003213 -:10EA500024B1C2F80C010120506010BD486903497F -:10EA60002C39086010BD000088B300203815004024 -:10EA700014CD0020001000400B49032008600B4912 -:10EA80000020C1F80002C1F810010122C1F81020D5 -:10EA9000D1F81021002AFBD0C1F8100148600860AD -:10EAA000034988817047000008F5014000100040CC -:10EAB00088B3002070B5012670044FF0E0210025D6 -:10EAC000C1F88001084C4010C4F84803C4F808039A -:10EAD00066602F20FFF7C8FAA660044C2F20A560BF -:10EAE000FFF7C2FAA57070BD00100140FCB3002012 -:10EAF00010B5017842788378C0780A4418441044ED -:10EB000010F0FF0F0ED1C1F3C204FDF78FFFA0423A -:10EB100006D0FDF78BFF401C00F00700A04201D19A -:10EB2000012010BD002010BD70B5054688690C4657 -:10EB300000284FF4847128460AD0FFF717FAD5F859 -:10EB40001805626AE1688854606A401C606270BDA2 -:10EB5000FFF70CFAD5F8180570BD1FB501238DF825 -:10EB60000030CDE90121D0E90012684690471FBD71 -:10EB70001FB501238DF800308DF808100192D0E9FF -:10EB80000012684690471FBD10B5044600684FF458 -:10EB90009271FFF7EBF94FF484712068FFF7E6F903 -:10EBA00020680121016010BD70B50D460446F4F7E0 -:10EBB000EFFD70B12846F4F7FDFD68B16807000E5F -:10EBC000002C0CDA04F00F0101F1E02181F8140DA2 -:10EBD00009E042F2010070BD42F2020070BD04F192 -:10EBE000E02484F80004002070BD000010B5FFF799 -:10EBF000E1F802490020087010BD0000A8B4002010 -:10EC000038B50021012548B101280CD0032809D1CD -:10EC1000FFF7C4F9BDE83840FEF75ABE4FF0E020D8 -:10EC2000C0F8805138BD8DF800106846F4F780FFB9 -:10EC3000064C207808B9FEF72FFEE068401CE06023 -:10EC4000A5709DF80000F4F797FF38BD18CE00209E -:10EC500010B503280CD1F4F7C7FE0021054A084679 -:10EC6000F4F704FE002803D0BDE81040F4F7F2BD2D -:10EC700010BD0000EDEB02003EB5044609496846B0 -:10EC8000FFF748F908E000BFD0E90021204690478F -:10EC900030B16846FFF755F902980028F4D13EBD1F -:10ECA00011203EBDB00403003EB504460849684645 -:10ECB000FFF730F907E000BFD0E900212046904778 -:10ECC0006846FFF73EF902980028F5D13EBD0000E6 -:10ECD000BC04030002498969002900D00847704735 -:10ECE000F8CC002010B51C460B462AB124B121688F -:10ECF000052903D2092010BD0E2010BD1070511C33 -:10ED0000184601F024F9401C2060002010BD0000CE -:10ED10001CB5040002D10E20F4F79CFD00200190E8 -:10ED20000090694601A800F0C5F9042820D008B178 -:10ED3000F4F790FD019A02206B4602F8010B00984F -:10ED40000021401E00902046F5F72DF9062812D02C -:10ED500008B1F4F77FFD0098401C81B20090019843 -:10ED600000F0E0F908B1F4F775FDF4F717FE1CBDEB -:10ED700000F0F2F8D5E7019800F0BAF908B1F4F71D -:10ED800069FD0248F4F766FD1CBD0000FECADDBA4D -:10ED900010B54188074AF4F769FD08B1F4F75AFD48 -:10EDA000F4F710FE002803D1BDE81040FFF7A6B825 -:10EDB00010BD000011ED02007FB50E4604000DD01D -:10EDC0007EB10020029001902578039001A902A84D -:10EDD00000F070F9042806D040B123E00E2004B002 -:10EDE00070BD0920FBE700F0B7F8EFE702990120BA -:10EDF00001AB08700198029A401E019031462046EE -:10EE0000521CFDF7BFF906280BD10C48F4F722FD80 -:10EE100003A8029A009001AB06212846521CFFF776 -:10EE200093FC08B10320DAE70198401C81B20190FD -:10EE3000029800F077F90028F4D1D0E7FECADDBAD5 -:10EE40007CB50D46040017D0002001900090694663 -:10EE500001A800F02FF9042810D000280DD1019945 -:10EE60000420134A087000982946401E009020464E -:10EE7000F5F74AF828B118E00E207CBD00F06CF8D8 -:10EE8000E5E701996A460020491CF5F763F860B987 -:10EE90000098074A401C521E01210090117081B257 -:10EEA000019800F03FF90028E7D003207CBD000066 -:10EEB00091B40020007818B101280ED100F078BB81 -:10EEC000BFF34F8F05480168054A01F4E061114323 -:10EED0000160BFF34F8F00BFFDE770470CED00E00E -:10EEE0000400FA0510B5C0B2052813D2DFE800F01F -:10EEF00003090D131500F4F777FDBDE8104000F08D -:10EF000015B8BDE81040F4F749BD0648C0E9021243 -:10EF10000121017010BD044800E00F20BDE8104041 -:10EF2000F4F798BC98B40020FECADDBA1CB5094CB1 -:10EF3000207800280DD011DF00F05AF854F8010FA6 -:10EF40000090A188ADF804100199BDE81C40FDF7C0 -:10EF500033BC1CBD90B4002002484068002800D09B -:10EF60000047704798B4002001494860704700008E -:10EF700098B4002010B504001ED02268A188501C4F -:10EF8000491E127889B23AB1032A08D0052A0AD05C -:10EF90000A48F4F75FFC08E0FFF70EFF01E0FFF717 -:10EFA0004FFF10B106E0FFF785FF206800F056F82C -:10EFB000002800D0032010BD0E2010BDFECADDBA0F -:10EFC00010B5FBF71FFFFBF7A5FFBDE81040FBF7EF -:10EFD0003FBF0000054900200A78002A04D00870CD -:10EFE00001F10800FFF7C6BF7047000098B4002089 -:10EFF00010B500F02DFA0448002101704170416005 -:10F00000BDE8104000F032B9ACB4002010B50D4C92 -:10F0100021786278114301D0082010BD80B1012110 -:10F02000217061706060084800F046FA0028F4D052 -:10F0300000212170617061600728EED0032010BDAF -:10F040000E2010BDACB4002089E702000248012167 -:10F050000170417070470000ACB4002070B50546E7 -:10F06000002400F0F5F925B11048854203D01024A2 -:10F070000AE00E2408E00E4D2878042808D006285F -:10F0800008D0052808D0082400F0F4F9204670BD07 -:10F09000012009E0032007E0044800F02BFA0400F7 -:10F0A00001D00324F0E702202870EDE774E100208E -:10F0B000ACB4002010B502004FF0000007D031B111 -:10F0C000094C63782BB1012B05D0042010BD0E2014 -:10F0D00010BD082010BD02236370044B13604FF471 -:10F0E00000720A8010BD0000ACB4002074DF002064 -:10F0F00001004FF0000004D0084A914203D01020D4 -:10F1000070470E20704706494A78022A03D0042A25 -:10F1100001D00820704701224A70704774DF002038 -:10F12000ACB4002070B50C46050005D034B11348CE -:10F13000854205D010240DE00E240BE0072409E0E1 -:10F14000B4F5007F01D90C2404E00D4E707802283C -:10F1500002D00824204670BD00F07AF921462846E6 -:10F1600000F0E0F9040005D0112C00D0032400F0D9 -:10F1700081F9EFE703207070F9E7000074DF0020E9 -:10F18000ACB400202DE9F843364C8DF800004FF068 -:10F19000010C6178002511B1216A39B108E0C0285D -:10F1A00002D1256284F801C0BDE8F883C028FBD0F5 -:10F1B0002C4ADFF8B490E768126940F20623022671 -:10F1C00027B194F80280B8F1000F08D07AB384F820 -:10F1D00002C06261994230D3C02840D12DE031B1E4 -:10F1E000042906D099420DD3C02838D10AE06761BE -:10F1F00008E0C02806D0D2B11B48E16A30388167E8 -:10F2000078306061684600F0A7F950B1A07A002814 -:10F21000CAD16269206A9DF800101154401C206216 -:10F22000C2E76169E068814202D1E56001E016E071 -:10F230002561484689F800600AE0684600F08CF9CC -:10F240000028E3D12561A57089F80060616948460E -:10F250004160218CA9F80810616A034888476570ED -:10F26000A2E70000F4B40020DCE5002070B5044CF7 -:10F270000025256200F030F825706570A57070BD1E -:10F28000B4B40020024B1B6A002B00D01847704713 -:10F29000B4B4002070B50E4C00250E48E561A561A0 -:10F2A000FEF701FD0B481430FEF7FDFCFDF774FF7F -:10F2B00025636563257065700120FDF74DFF47F6F6 -:10F2C0000160A0810120A070E5706071607270BD66 -:10F2D000B4B4002074050300084810B50178084A4A -:10F2E000515C19B1001DFFF7CDF902E00C30FFF7BA -:10F2F00059F804490020486210BD0000680403006A -:10F30000CCB30020F4B4002010B520B10F494A6AF4 -:10F310001AB1082010BD0E2010BD48620D490C4ADC -:10F32000A1F11400FEF716FB08B1072010BD00F094 -:10F3300013F806490748012209311438FEF73EFB4D -:10F3400008B1F4F787FA002010BD0000F4B40020E3 -:10F3500011FB02007C040300094808498162002176 -:10F36000C1700722027141718171817200F12C011B -:10F37000C16002493C31016170470000E8E50020AE -:10F38000F4B4002001004FF0000007D00A4BA3F1B5 -:10F390002C02994208D1D16811B103E00E207047C8 -:10F3A000D360704708207047044B9942FBD1116924 -:10F3B0000029F7D11361704720B5002024E6002012 -:10F3C000F8B515460E4607001BD000248DF8004006 -:10F3D0006846F4F7ADFB1C490A791C48072A16D089 -:10F3E000D7E90012C0E9061200F118015EB1D6E9B2 -:10F3F0000023C0E9082345B1D5E90012C0E90A128B -:10F4000017E00E20F8BD8C60F5E70C6111E0D7E93C -:10F410000023C0E900230D4A8EB1D6E90036C0E9C9 -:10F42000023675B1D5E90023C0E904230C7100F060 -:10F43000A3FA9DF80000F4F79FFB0020F8BD94604C -:10F44000EFE71461F2E70000F4B40020ACE500201F -:10F4500038B500248DF800406846F4F769FB04488D -:10F46000C47144729DF80000F4F786FB38BD0000BB -:10F47000B4B40020F8B500252E468DF8005068463B -:10F48000F4F756FB0B4C0127E771207A08B126727E -:10F4900001259DF80000F4F76FFB6772FDF76EFF22 -:10F4A000FDF792FD002D03D0BDE8F840FDF7B2BD99 -:10F4B000F8BD0000B4B400200C4910B50A784B78B0 -:10F4C0001A4301D0082010BD28B10862FDF764FE80 -:10F4D00018B1032010BD0E2010BD0548FFF714FF22 -:10F4E0000400F9D1FFF7D6FE204610BDB4B40020C9 -:10F4F00045D002001FB50A4900248A795AB100227A -:10F500008A71886101208DF804008DF8002068461A -:10F51000FDF78AFC00E0112404B0204610BD000075 -:10F52000B4B400201FB5002438B131B1094AD36901 -:10F530002BB11124204604B010BD0E20FBE75182F0 -:10F54000D06100208DF800008DF804006846FDF7BA -:10F550004BFEEFE7B4B4002010B50478C02C0AD0FD -:10F560000C49DB2C09D00A460023927ADC2C07D008 -:10F57000DD2C0DD108E0002010BD0120887207E0CD -:10F5800032B18B72C02102E012B18B72DB210170AB -:10F59000012010BDF4B40020002805D1034901204A -:10F5A00048700020FBF70EBB7047000018CE00200B -:10F5B0000D4810B5017809B1002010BD012101707E -:10F5C000407820B9094A00210948F4F721FA08488F -:10F5D000002240F6CD410068F4F756FAFEF7C0FB72 -:10F5E000FFF7EEFC012010BDA8B400202DF70200AB -:10F5F000FCFF020010B51620F4F7CAF848B10A481B -:10F6000082684FF4800152B1016821F480010160E9 -:10F6100010BDBDE8104042F20100F4F71BB94FF0F5 -:10F62000E020C0F8801110BD88CF002070B54FF0E9 -:10F63000E0254FF480041620C5F88042F4F7A8F8BE -:10F6400070B10D4890F800044009F4F7B3F850B1D8 -:10F650000A48816869B1016841F48001016070BDA8 -:10F6600042F2010001E042F20200BDE87040F4F70E -:10F67000F1B8C5F8004170BD16E000E088CF002069 -:10F680007CB50C4640B12CB100230193057801A94B -:10F69000492D03D007207CBD0E207CBD0125CDE97E -:10F6A000003513460A462146FBF704FB0028F4D137 -:10F6B0000198A04201D009207CBD00207CBD000043 -:10F6C0002DE9FF4184B0984614460F0019D0C4B10B -:10F6D000002001902568492001AE8DF808003346CE -:10F6E0002A4602A800F098FC00280BD133462A468F -:10F6F000394604A800F04BFC002803D1049870B9E7 -:10F7000003E00E2008B0BDE8F081074800903346C2 -:10F710002A4639464046FBF7FBFA0028F2D1019809 -:10F7200020600020EEE700008FFF020010B5FFF719 -:10F730008DFCFFF7AFFDBDE81040FFF70DBE0000E8 -:10F7400010B54FF080400021C0F800110122026086 -:10F75000D0F80031002BFBD0104B98694260C2609A -:10F76000C0F80415C0F84011C0F84411C0F84811A1 -:10F77000C0F84C114FF48034C0F80443C0F80022A4 -:10F780000424C0F810455C6BC0F840454FF4827407 -:10F79000C0F8444502600020196110BD88B3002004 -:10F7A0002DE9F84F1D4C00256846D4E901A6FDF768 -:10F7B0001DF9002738B30023009A61681CE0D1F8D6 -:10F7C00000C00846944503D9ACEB02020A6015E07C -:10F7D000A2EB0C0263440760D0F80CC0C1698146FB -:10F7E000BCF1000F08D006EB030828F07F48C0E901 -:10F7F000018CC9F81C5005460029E0D128466160FB -:10F80000FDF7CEFE03E02846FDF7CAFE10B15046D4 -:10F81000FBF7FAF9E770BDE8F88F0000FCB30020B1 -:10F820000D4B10B5596831B102680C68A24204D87A -:10F83000A21A0A60C161586010BD0B4603E00B4676 -:10F84000C969121B21B10C689442F8D3A41A0C6048 -:10F850000260C161D86110BDFCB300202DE9F04108 -:10F86000144E77683D462C4603E0844204D025467A -:10F87000E469002CF9D11BE0D4B1A5420BD1F869A1 -:10F88000706040B90C49012088600021B160F070BF -:10F890002F20FEF7E9FB2168E069E86110B10268FA -:10F8A000114401607068874202D00120BDE8F081F8 -:10F8B0000020FBE7FCB30020001001407CB50646A9 -:10F8C00000240D468DF800406846F4F731F901A890 -:10F8D00000F0DEFB70B10570094946609DF8040038 -:10F8E00048709DF80000F4F747F91420F3F734FD51 -:10F8F00020467CBD04249DF80000F4F73DF9F7E7AD -:10F900007CCE00202DE9F041194D6C68002C2CD0E4 -:10F91000184800270068A968B846401A20F07F46BA -:10F920002068B0420CD82146361A0744E469087CA6 -:10F9300020B181F81080886949698847002CEFD18F -:10F9400029786878814206D1401CC0B268700228CC -:10F9500001D185F80180064869780C3040F82170A3 -:10F96000BDE8F0411420F3F7F7BCBDE8F0810000DA -:10F97000FCB30020041501402DE9F047DFF8DC90CE -:10F980000126374CA9F1180700254FF0050820780B -:10F9900018B100F067F806461AE0207980B1042813 -:10F9A00018D0052816D006281AD0A069E169006889 -:10F9B000405C491CE161C02824D0DB2825D026E02A -:10F9C000C02000F04FF8C4E90675064601202071FA -:10F9D000257034E0C02000F045F8064684F8048025 -:10F9E000D9F8000048B11D491822A1F11800F3F719 -:10F9F00023FCC9F80050257121E02079401C2071BA -:10FA0000BDE8F087DB20DC2100E0DD21217000F083 -:10FA100029F80646A069E269818891420FD80560FD -:10FA20002079012803D0207902280DD014E0B8688D -:10FA300040B10A481038C4E9060502202071002EA2 -:10FA4000A5D1DDE70420F9E7386928B10348083873 -:10FA5000C4E906050320F1E74046EFE7C4E50020CE -:10FA6000F4B4002070B5184CE278A16A8854521C96 -:10FA7000D2B2E27023790420042B0BD02379052B1A -:10FA80000AD01E2A1DD3657901233DB12072A371CE -:10FA9000002070BD0120F6E70020F4E76371E071FB -:10FAA0000A48FDF7ABFF08B1F3F7D4FE0849A06A96 -:10FAB000884202D101F11E0000E00548A06200204A -:10FAC000E070012070BD0000F4B400206804030061 -:10FAD000E8E5002070B50C4605464FF48E71FEF740 -:10FAE00045FA216AA068415C206A401C2062C5F882 -:10FAF0001C1570BD1FB500228DF800200291816891 -:10FB000001914261D0E90012684690471FBD000094 -:10FB100070B501782D4D2E4CD1B1012945D0022967 -:10FB200001D0032010E0C068810705D003212970AF -:10FB30006860616A254888472549012209312548BE -:10FB4000FDF73CFF002840D0BDE87040F3F782BECF -:10FB5000A0790026C8B1E2781E48A16AFDF74EFFE1 -:10FB600008B1F3F777FE1949A06A0C31884202D137 -:10FB700001F11E0001E015480C30A062E670E0794A -:10FB80002870207AE071A67102E06671E079287031 -:10FB90002878042802D0616A0C4888472079072811 -:10FBA00013D0BDE87040FFF7E7BE094801220930D5 -:10FBB000014604780748FDF701FF08B1F3F74AFE54 -:10FBC0002046BDE87040FFF7DDBA70BDDCE50020DF -:10FBD000F4B40020680403001FB50A4601788DF8CC -:10FBE000001041680191017A8DF80810C0680390F7 -:10FBF000044850F82210001F50F822206846904711 -:10FC00001FBD0000D4B3002070B50446407988B011 -:10FC10000A2802D9072008B070BD20221D49684675 -:10FC2000F3F70AFB207801906078009060791A4918 -:10FC30001A4E51F82000069000208DF814008DF81F -:10FC400015008DF81D0001F1580000F10C05017838 -:10FC5000715C19B1001DFEF715FD02E02846FEF7A4 -:10FC6000A1FB0D48002269465830FDF773FE0028BD -:10FC7000D1D1094858300078305C10B92846FEF7D9 -:10FC800011FB054960792C3151F8200030390860AA -:10FC90000020C0E74804030024B40020CCB30020B7 -:10FCA0002DE9FF470C4605464FF40071FEF764F955 -:10FCB00001274FF40178002618B34FF49279494692 -:10FCC0002846FEF74EF9E0B149462846FEF74EF9C0 -:10FCD000C5F8088394F8290000B96F6002208DF8F8 -:10FCE0000000D5F88004C5F880040390A069029054 -:10FCF000E0680190A661E661D4E900126846904789 -:10FD000028E004212846FEF737F918B34FF4847130 -:10FD10002846FEF726F9E8B121462846FEF704FFFB -:10FD2000616AA069884215D1E06938B1E268616A08 -:10FD3000A0612069E6616662E06008E094F829004D -:10FD400000B96F60C5F80883A661E268616A204661 -:10FD5000FEF703FF4FF48E7841462846FEF701F97F -:10FD600078B1206A6169884202D294F8280020B3F1 -:10FD700041462846FEF7FAF8616911B12046FFF7BF -:10FD8000B9FE4FF4A27841462846FEF7EAF800286B -:10FD900018D041462846FEF7E9F894F8290000B14A -:10FDA0002F60A06900280DD0A661E268616A04B0E6 -:10FDB0002046BDE8F047FEF7D0BE21462846FFF7B3 -:10FDC00089FEDEE7BDE8FF871FB50A4601788DF89A -:10FDD000001041680191017A8DF80810C068039005 -:10FDE000044850F82210001F50F82220684690471F -:10FDF0001FBD0000D4B300202DE9FF410C464FF495 -:10FE0000927705463946FEF7BDF80026C0B139465F -:10FE10002846FEF7BCF802208DF80000D5F88004D3 -:10FE2000C5F880040390D5F83C058DF80800E0681B -:10FE30000190A661E661D4E900126846904723E08C -:10FE40004FF4887739462846FEF79CF8E0B13946EA -:10FE50002846FEF79CF8D5F83C15A069884213D1D6 -:10FE6000E06960B1E268D5F8000220F02000C5F832 -:10FE70000002E069A0612069E661E06001E0A6613E -:10FE8000E2682046FEF774FE4FF4A2773946284612 -:10FE9000FEF778F860B139462846FEF778F8A06991 -:10FEA00030B1A661D5F83C152046E268FEF760FE49 -:10FEB0004FF4907739462846FEF764F8002813D0AF -:10FEC00039462846FEF763F8606900280CD0D5F85B -:10FED0004C058DF800608DF80800A06801906661FF -:10FEE000D4E9001268469047BDE8FF8130B5146838 -:10FEF000A51C8D4205D82044008818801068801CFD -:10FF0000106030BD0870000A48700220704710B5BC -:10FF10001468091B022901D2092010BD2044008861 -:10FF200018801068801C1060002010BD10B51C687F -:10FF3000121B022A01D2092010BD2144008808703A -:10FF4000000A48701868801C1860002010BD0870F6 -:10FF5000020A4A70020C8A70000EC87004207047B2 -:10FF600010B538B132B12BB11468091B042903D282 -:10FF7000092010BD0E2010BD2044C178006861F337 -:10FF80001F6018601068001D1060002010BD10B5C3 -:10FF90001C4639B130B12CB12368D21A042A03D2DD -:10FFA000092010BD0E2010BD19440068FFF7CFFFD7 -:10FFB000216808442060002010BD30B51468651C1D -:10FFC0008D4204D8005D18701068401C106030BD70 -:10FFD00010B514688C4201D1092010BD005D187065 -:10FFE0001068401C1060002010BD0000D5E0020029 -:10FFF00059E40200000200000000000054DF00206D -:020000040003F7 -:1000000017A5D84602FFFFFF00000000020001FF15 -:100010000501FFFF40420F0010B51C68944201D15A -:10002000092010BD007808551868401C1860002091 -:1000300010BD70B51446049D2BB12268891AA942DF -:1000400003D2092070BD0E2070BD11182A46184633 -:10005000F3F7F2F8206828442060002070BD70B5E6 -:100060000D46049C38B132B12CB121685B1AAB4209 -:1000700003D2092070BD0E2070BD8B1801462A46A0 -:100080001846F3F7D9F8206828442060002070BD96 -:100090000A494A788B78521CD2B2934200D100228E -:1000A0000B78934201D1002070470270487800EB32 -:1000B000400001EBC000001D704700007CCE002016 -:1000C000FFC1FBE84C90728BE7B3518963AB2323EC -:1000D00002841872AA612F3B51A8E53749FBC9CAAF -:1000E0000C18532CFD45E39AE6F15DB0B61BB4BE87 -:1000F0002A50EAE90E9C4B5E5724CCA1B759B88729 -:10010000FFE07D742648B9C5F3D9A8C4B1D59111D3 -:1001100001420C39D5B0979D28D4F29BA4FD6465AB -:10012000068C2996FEA2714DF3F82E58DB0D5A5F0E -:100130001528F57407CE25AF2B12E6D0DB2CDCC3D7 -:100140007FF03E3A13A4DCE2F96C54E2D8EAC888A6 -:100150000021869C6AD8CB4E146AF94DD27EB23209 -:1001600003C6144B7FD1B8A6797C17ACED06ADAFB2 -:100170000A947ABA03E792D7150973E86D16EEE18F -:100180003F781F9D09526EF17C362A716C7564446C -:100190008010434E35EC65270AB5FC26693F599916 -:1001A00001638AA5BF685CD33CBE0BD67683D65765 -:1001B000054A3DDD8173C9EB8A8439F4360BF700BB -:1001C0000338FDD8704700003200000001C3020070 -:1001D000490000001BC302004300000053C102009D -:1001E00062000000E7C002006300000049C0020096 -:1001F0006400000091C002006500000023C10200FD -:100200006800000025BF02006700000075BF020003 -:100210006000000085AF020066000000DDBF020044 -:100220006900000039AF0200B00000007DC202008A -:10023000B10000000BC20200B20000003DC202008B -:10024000B3000000C1C20200B4000000C1C102003E -:100250006C000000E9AF02006D000000B9AF0200C1 -:1002600070000000B5B50200710000007DB502000D -:100270006E00000001B802006F000000A9B2020089 -:100280008A00000083B602008B000000AFB60200B7 -:100290008C000000F9B102008D00000045B20200A0 -:1002A00085000000C5B3020086000000CDB6020044 -:1002B0007200000015B00200730000006BB0020075 -:1002C00074000000A5B002007500000091B10200AA -:1002D0007600000095B3020077000000D5B7020059 -:1002E00078000000F3B0020079000000C3B0020003 -:1002F0007A00000051B502007B00000021B5020029 -:100300007C0000004FB302007D00000013B3020028 -:100310007E0000005DB102007F00000019B70200FE -:10032000800000001DB1020086000000CDB6020072 -:1003300087000000C5B10200880000001FB602005F -:100340008900000059B602008200000007B40200D4 -:100350008100000037B4020084000000AFB4020046 -:10036000830000006DB402008E000000E9B50200B9 -:100370008F000000EFB402009000000063B20200A2 -:1003800094000000E1B90200950000005DBA02008F -:100390009600000017B90200970000004BB9020058 -:1003A000990000008BB802009A00000021BA0200F8 -:1003B0009B000000D1B802009C00000091BA02002E -:1003C0009D000000B1B902009800000053B802007F -:1003D0009E0000007FB90200A00000005DBD020089 -:1003E000A1000000A7BC0200A20000001FBB020089 -:1003F000A3000000C3BB0200A4000000D1BE0200A5 -:10040000A500000085BE0200A60000004FBC02004F -:10041000A7000000A3BD0200A800000017BD020055 -:10042000A900000035BE0200AA000000DDBD0200E8 -:10043000AB000000E9BC0200AC000000D9BA020029 -:10044000AD0000001DBC0200FFFFFFFFFFFFFFFF2C -:10045000FFFFFFFFFFFFFFFF0000000000000000A4 -:100460000000D6010701000000000000002000404D -:100470000000000000200040000000000600000016 -:100480000800000007000000050000000000000058 -:100490000100000000000010070100000000000043 -:1004A0000000000000000000000000000100000744 -:1004B0009C040300AC04030008000000D404030003 -:1004C000E404030008000000E4040300F404030053 -:1004D00008000000C4050300D4050300000000006C -:1004E00000000000B4050300C40503000000000084 -:1004F000000000009C050300A4050300A405030000 -:10050000AC05030000000000000000000000000037 -:100510000000000080B30020F40403001405030071 -:1005200008000000AC050300B40503000000000053 -:10053000000000002405030034050300080000004B -:10054000D405030080B30020AC010000C0320200DB -:10055000400603002CB50020043B00008037020059 -:1005600018B4002010B4002018B40020F4D80020E3 -:100570008000000084E4002074E3002010000000EC -:100580001000000001000000A0E5002090E4002021 -:1005900010000000100000000100000091ED0200BA -:1005A00000000000C54102000000000099F50200B3 -:1005B0000000000001DD020000000000C1DE0200BA -:1005C0000000000001EC02000000000051EC0200FD -:1005D0000000000091240808011201F303031280B7 -:1005E000AA401327294176715B06145555550362BD -:1005F000C409423323F0041AD06D23B013335027BB -:10060000223B1BA04E181A75101A9D0822EB14905D -:100610003A012CE0D701303223321B32175A15042D -:100620005A140419427904511220BA4008012713C0 -:1006300001012902110367017E040090D00300002C -:00000001FF diff --git a/hex/sd_api_v5/s132_nrf52_5.1.0_license-agreement.txt b/hex/sd_api_v5/s132_nrf52_5.1.0_license-agreement.txt new file mode 100644 index 000000000..00c2e54c4 --- /dev/null +++ b/hex/sd_api_v5/s132_nrf52_5.1.0_license-agreement.txt @@ -0,0 +1,35 @@ +Copyright (c) 2007 - 2017, Nordic Semiconductor ASA +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form, except as embedded into a Nordic + Semiconductor ASA integrated circuit in a product or a software update for + such product, must reproduce the above copyright notice, this list of + conditions and the following disclaimer in the documentation and/or other + materials provided with the distribution. + +3. Neither the name of Nordic Semiconductor ASA nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +4. This software, with or without modification, must only be used with a + Nordic Semiconductor ASA integrated circuit. + +5. Any software provided in binary form under this license must not be reverse + engineered, decompiled, modified and/or disassembled. + +THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/hex/sd_api_v5/s132_nrf52_5.1.0_softdevice.hex b/hex/sd_api_v5/s132_nrf52_5.1.0_softdevice.hex new file mode 100644 index 000000000..932a18afd --- /dev/null +++ b/hex/sd_api_v5/s132_nrf52_5.1.0_softdevice.hex @@ -0,0 +1,7843 @@ +:020000040000FA +:1000000000040020E90800007D050000C908000088 +:1000100087050000910500009B050000000000001E +:100020000000000000000000000000000D090000BA +:10003000A505000000000000AF050000B9050000A4 +:10004000C3050000CD050000D7050000E105000054 +:10005000EB050000F5050000FF05000009060000A3 +:10006000130600001D0600002706000031060000F0 +:100070003B060000450600004F0600005906000040 +:10008000630600006D060000770600008106000090 +:100090008B060000950600009F060000A9060000E0 +:1000A000B3060000BD060000C7060000D106000030 +:1000B000DB060000E5060000EF060000F906000080 +:1000C000030700000D0700001707000021070000CC +:1000D0002B070000350700003F070000490700001C +:1000E000530700005D07000067070000710700006C +:1000F0007B070000850700008F07000099070000BC +:10010000A30700001FB500F003F88DE80F001FBD26 +:1001100000F0E0BB1FB56FF00100009040100390AD +:10012000029001904FF010208069000B420900F00E +:100130001F045DF822300120A04083434DF8223097 +:10014000684600F045F91FBDF0B54FF6FF734FF458 +:10015000B4751A466E1E11E0A94201D3344600E080 +:100160000C46091B30F8027B641E3B441A44F9D14B +:100170009CB204EB134394B204EB12420029EBD17E +:1001800098B200EB134002EB124140EA0140F0BD8F +:10019000DE4992B00446D1E90001CDE91001FF2209 +:1001A0004021684600F03CFB94E80F008DE80F000A +:1001B000684610A902E004C841F8042D8842FAD12B +:1001C00010216846FFF7C0FF1090AA208DF8440068 +:1001D000FFF7A0FF00F0F3F84FF01024A069102201 +:1001E0006946803000F002F9A069082210A900F0E9 +:1001F000FDF800F0D8F84FF080510A6949690068AD +:100200004A43824201D8102070470020704710B541 +:10021000D0E900214FF0805002EB8103026944696C +:100220006243934209D84FF01022536903EB8103D4 +:100230000169406941438B4201D9092010BD5069D1 +:10024000401C01D0002010BD0F2010BD70B501680A +:100250000446AF4D4FF01020072952D2DFE801F0DD +:10026000330419293C1E2500D4E902656468294637 +:10027000304600F0CDF82A462146304600F0B6F868 +:10028000AA002146304600F09FFA002800D0032043 +:1002900070BD00F051FB4FF4805007E0201DFFF7C8 +:1002A000AAFF0028F4D100F047FB60682860002016 +:1002B00070BD241D94E80700920000F085FA002824 +:1002C000F6D00E2070BD8069401C12D0201DFFF7B3 +:1002D0009EFF0028F6D109E08069401C09D0201D4E +:1002E000FFF789FF0028EDD1606820B12046FFF7B5 +:1002F0004FFF042070BDFFF70DFF00F060F800F025 +:1003000052F8072070BD10B50C46182802D0012005 +:10031000086010BD2068FFF799FF206010BD4FF006 +:100320001024A069401C05D0A569A66980353079E4 +:10033000AA2808D06069401C2DD060690068401C64 +:1003400029D060692CE010212846FFF7FDFE3168B6 +:1003500081421CD1A16901F18002C03105E030B1B8 +:1003600008CA51F8040D984201D1012000E0002094 +:100370008A42F4D158B1286810B1042803D0FEE7AE +:10038000284600F057F862496868086008E000F005 +:1003900016F800F008F84FF480500168491C01D0AD +:1003A00000F0A4FAFEE7BFF34F8F5A4801685A4A9B +:1003B00001F4E06111430160BFF34F8FFEE74FF09E +:1003C00010208169491C02D0806900F0AEB87047E6 +:1003D000524A01681160121D416811604F4A8168DC +:1003E00010321160111DC068086070472DE9F0419E +:1003F00017460D460646002406E03046296800F000 +:10040000A7F8641C2D1D361DBC42F6D3BDE8F08153 +:1004100070B50C4605464FF4806608E0284600F0AB +:1004200084F8B44205D3A4F5806405F58055002C0A +:10043000F4D170BD4168044609B1012500E00025F2 +:100440004FF010267069A268920000F0BDF9C8B1A3 +:10045000204600F01AF89DB17669A56864684FF4EB +:10046000002084420AD2854208D229463046FFF74E +:10047000CFFF2A4621463046FFF7B8FFFFF79FFF20 +:10048000FFF791FFFFF746FEF8E72DE9FF414FF038 +:100490001024616980680D0B01EB800000F6FF708D +:1004A000010B0020009001900290024603906846E4 +:1004B00001230BE0560902F01F0C50F8267003FAD6 +:1004C0000CFC47EA0C0740F82670521CAA42F1D3F4 +:1004D0000AE04A0901F01F0650F8225003FA06F616 +:1004E000354340F82250491C8029F2D3A169090BF9 +:1004F0004A0901F01F0150F822408B409C4340F80C +:100500002240FFF765FFBDE8FF8100005C090000A5 +:10051000000000200CED00E00400FA050006004099 +:10052000144801680029FCD07047134A0221116069 +:1005300010490B68002BFCD00F4B1B1D186008687E +:100540000028FCD00020106008680028FCD070470C +:10055000094B10B501221A60064A1468002CFCD021 +:10056000016010680028FCD0002018601068002886 +:10057000FCD010BD00E4014004E5014008208F4993 +:1005800009680958084710208C4909680958084724 +:1005900014208A49096809580847182087490968BA +:1005A0000958084730208549096809580847382004 +:1005B00082490968095808473C2080490968095858 +:1005C000084740207D4909680958084744207B496D +:1005D00009680958084748207849096809580847B0 +:1005E0004C20764909680958084750207349096822 +:1005F0000958084754207149096809580847582084 +:100600006E490968095808475C206C49096809580F +:100610000847602069490968095808476420674904 +:100620000968095808476820644909680958084753 +:100630006C20624909680958084770205F490968B9 +:100640000958084774205D49096809580847782007 +:100650005A490968095808477C20584909680958C7 +:10066000084780205549096809580847842053499C +:1006700009680958084788205049096809580847F7 +:100680008C204E4909680958084790204B49096851 +:10069000095808479420494909680958084798208B +:1006A00046490968095808479C204449096809587F +:1006B0000847A0204149096809580847A4203F4934 +:1006C000096809580847A8203C490968095808479B +:1006D000AC203A49096809580847B02037490968E9 +:1006E00009580847B4203549096809580847B8200F +:1006F0003249096809580847BC2030490968095837 +:100700000847C0202D49096809580847C4202B49CB +:10071000096809580847C82028490968095808473E +:10072000CC202649096809580847D0202349096880 +:1007300009580847D4202149096809580847D82092 +:100740001E49096809580847DC201C4909680958EE +:100750000847E0201949096809580847E420174963 +:10076000096809580847E8201449096809580847E2 +:10077000EC201249096809580847F0200F49096818 +:1007800009580847F4200D49096809580847F82016 +:100790000A49096809580847FC20084909680958A6 +:1007A00008475FF480700549096809580847000048 +:1007B00003480449024A034B704700000000002030 +:1007C000680900006809000040EA010310B59B07B2 +:1007D0000FD1042A0DD310C808C9121F9C42F8D0AB +:1007E00020BA19BA884201D9012010BD4FF0FF305C +:1007F00010BD1AB1D30703D0521C07E0002010BD72 +:1008000010F8013B11F8014B1B1B07D110F8013BFD +:1008100011F8014B1B1B01D1921EF1D1184610BDDE +:1008200002F0FF0343EA032242EA024200F005B865 +:100830007047704770474FF000020429C0F01280E3 +:1008400010F0030C00F01B80CCF1040CBCF1020F83 +:1008500018BF00F8012BA8BF20F8022BA1EB0C0158 +:1008600000F00DB85FEAC17C24BF00F8012B00F84E +:10087000012B48BF00F8012B70474FF0000200B574 +:10088000134694469646203922BFA0E80C50A0E8B3 +:100890000C50B1F12001BFF4F7AF090728BFA0E861 +:1008A0000C5048BF0CC05DF804EB890028BF40F82D +:1008B000042B08BF704748BF20F8022B11F0804F6F +:1008C00018BF00F8012B7047014B1B68DB68184705 +:1008D0000000002009480A497047FFF7FBFFFFF7B7 +:1008E00011FC00BD20BFFDE7064B1847064A10600B +:1008F000016881F30888406800470000680900002B +:10090000680900001F030000000000201EF0040F13 +:100910000CBFEFF30881EFF3098188690238007892 +:10092000182803D100E00000074A1047074A126860 +:100930002C3212681047000000B5054B1B68054AB1 +:100940009B58984700BD00000703000000000020EE +:100950005809000004000000001000000000000022 +:0809600000FFFFFF0090D0032F +:10100000A8110020F5EA0100BD2F000067EA0100E9 +:10101000BD2F0000BD2F0000BD2F0000000000000C +:101020000000000000000000000000004DEB010087 +:10103000BD2F000000000000BD2F0000BD2F0000EC +:10104000B5EB0100BBEB0100BD2F0000BD2F000080 +:10105000BD2F0000BD2F0000BD2F0000BD2F0000E0 +:10106000C1EB0100BD2F0000BD2F0000C7EB010048 +:10107000BD2F0000CDEB0100D3EB0100D9EB010047 +:10108000BD2F0000BD2F0000BD2F0000BD2F0000B0 +:10109000BD2F0000BD2F0000BD2F0000BD2F0000A0 +:1010A000BD2F0000DFEB0100BD2F0000BD2F0000B1 +:1010B000BD2F0000BD2F0000BD2F0000BD2F000080 +:1010C000E5EB0100BD2F0000BD2F0000BD2F00008B +:1010D000BD2F0000BD2F0000BD2F0000BD2F000060 +:1010E000BD2F0000BD2F0000BD2F0000BD2F000050 +:1010F000BD2F0000BD2F0000BD2F0000BD2F000040 +:10110000BD2F0000BD2F000000F002F81DF0DFFC35 +:101110000AA090E8000C82448344AAF10107DA4552 +:1011200001D11DF0D4FCAFF2090EBAE80F0013F0A4 +:10113000010F18BFFB1A43F001031847F8DE010046 +:1011400018DF01000A444FF0000C10F8013B13F0C7 +:10115000070408BF10F8014B1D1108BF10F8015B10 +:10116000641E05D010F8016B641E01F8016BF9D103 +:1011700013F0080F1EBF10F8014BAD1C0C1B09D15A +:101180006D1E58BF01F801CBFAD505E014F8016BCC +:1011900001F8016B6D1EF9D59142D6D3704700005E +:1011A0000023002400250026103A28BF78C1FBD870 +:1011B000520728BF30C148BF0B6070471FB500F011 +:1011C0003DF88DE80F001FBD1EF0040F0CBFEFF3BC +:1011D0000880EFF30980014A1047000011B80000B1 +:1011E0008269034981614FF001001044704700009B +:1011F000F511000001B41EB400B511F01DFF01B4DB +:101200000198864601BC01B01EBD0000F0B4404606 +:10121000494652465B460FB402A0013001B506486C +:10122000004700BF01BC86460FBC804689469246F7 +:101230009B46F0BC70470000091100001DF044BC43 +:1012400070B51A4C054609202070A01C00F05FF80C +:101250005920A08029462046BDE8704007F02CBBED +:1012600007F035BB70B50C461149097829B1A0F1DA +:101270006001562908D3012013E0602804D06928B2 +:1012800002D043F201000CE020CC0A4E94E80E009C +:1012900006EB8000A0F58050241FD0F8806E284611 +:1012A000B047206070BD012070470000080000209A +:1012B0001C00002014EC010010B5044600210120A0 +:1012C00000F03DF800210B2000F039F8042119202E +:1012D00000F035F804210D2000F031F804210E2033 +:1012E00000F02DF804210F2000F029F80421C84354 +:1012F00000F025F80621162000F021F8062115201F +:1013000000F01DF82046FFF79BFF002010BDA5212F +:1013100001807047FFF7A4BF11487047104870471D +:10132000104A10B514680F4B0F4A08331A60FFF7C4 +:1013300099FF0C48001D046010BD704770474907B5 +:10134000090E002806DA00F00F0000F1E02080F816 +:10135000141D704700F1E02080F800147047000071 +:1013600003F90042100502400100000130B5FA4DBA +:10137000044610280AD0112C06D02846122CC17819 +:1013800006D0132C08D0FFDFEC7030BDFFDFFBE789 +:101390001129F9D0FFDFF7E71129F5D0FFDFF3E7D7 +:1013A0002DE9F04110F000FB044611F094FC201AE6 +:1013B000C5B206200EF094FB044606200EF098FB02 +:1013C000211AE54CE078132818D000200F180720C8 +:1013D0000EF086FB064607200EF08AFB301A3918FD +:1013E000E07812280CD0002001442078022809D08F +:1013F00000200844281AC0B2BDE8F0810120E5E7CA +:101400000120F1E70120F4E7D34810B5817900F11C +:101410000700490805D00CF079FEBDE8104007F040 +:10142000FFB80CF054FEF8E702210EF0B1BB2DE935 +:10143000FC411D4690460E460746FFF7F5FF0400A7 +:101440000AD02078222804D3A07FC0F34010A842FD +:1014500005D10820BDE8FC8143F20200FAE7ADF8AF +:1014600000703DB101208DF802008DF803608DF809 +:10147000048002E000208DF8020068460DF015FCA3 +:10148000A07F65F34510A0770020E3E730B5044660 +:10149000A1F120000D460A284AD2DFE800F0050736 +:1014A0000C1C2328353A3F44FFDF42E020782028F7 +:1014B0003FD1FFDF3DE0A8480178032939D0C0784B +:1014C000132836D02078242833D0252831D023285B +:1014D0002FD0FFDF2DE0207822282AD0232828D8FB +:1014E000FFDF26E02078222823D0FFDF21E02078CC +:1014F00022281ED024281CD026281AD0272818D00D +:10150000292816D0FFDF14E02078252811D0FFDF2E +:101510000FE0207825280CD0FFDF0AE0207825286E +:1015200007D0FFDF05E02078282802D0FFDF00E0A9 +:10153000FFDF257030BD1FB504466A46002001F06C +:101540005EFCB4B1BDF802204FF6FF700621824266 +:1015500001D1ADF80210BDF80420824201D1ADF8EE +:101560000410BDF80810814203D14FF44860ADF873 +:10157000080068460DF067F807F052F804B010BD97 +:1015800070B514460D46064611F0D6FF58B90DB198 +:10159000A54201D90C2070BD002408E056F82400B3 +:1015A00011F0CAFF08B1102070BD641CE4B2AC4257 +:1015B000F4D3002070BDF0B50024059D10B1A94200 +:1015C00003D850E009B90020F0BD0920F0BD055D49 +:1015D000D5B1071997F801C0BCF1150F2DD03BDC30 +:1015E000BCF1150F38D2DFE80CF037122020262688 +:1015F00028282F2F373737373737373737372000F7 +:10160000025D22BB641CE4B28C42F9D3DBE7022DFD +:10161000DBD1BD781D70072D01D26D0701D40A20E2 +:10162000F0BD157845F0010515E0EF43FF0707E031 +:10163000012D07D010E00620F0BD2F07A7F180573D +:10164000002FF5D03046F0BD1578AF0701D50B203F +:10165000F0BD45F002051570055D641C2C44E4B234 +:101660008C4202D9B1E74FF448568C42AFD3AAE777 +:1016700010B50278540809D0012243F20223012C4C +:1016800007D0022C0DD0032C13D10FE000200870DE +:1016900005E080790324B4EB901F0AD10A70002082 +:1016A00010BD8079B2EB901F03D1F7E780798009F4 +:1016B000F4D0184610BD284A117C39B1517C02295A +:1016C00008D0032908D043F2022070470146901D3C +:1016D00001F002BC032100E00121017000207047ED +:1016E00038B50C460546694601F0F6FB00280DD1D9 +:1016F0009DF80010207861F34700207055F8010F25 +:10170000C4F80100A888A4F80500002038BD38B549 +:101710001378C0B1022816D010A46D462468009436 +:101720004C7905EB9414247864F347031370032871 +:101730000ED003F0FE0010700868C2F8010088881F +:10174000A2F8050038BD23F0FE0313700228EED185 +:10175000D8B240F00100EEE7C80100200302FF010B +:1017600038B50C460978222901D2082038BDADF8D9 +:1017700000008DF8022068460CF010FD06F050FFC6 +:10178000050003D121212046FFF780FE284638BD01 +:101790001CB500208DF80000CDF80100ADF8050063 +:1017A000FE48007C022801D0012000E000208DF8D6 +:1017B000070068460CF030FE002800D0FFDF1CBD9B +:1017C0002DE9FF470220F54E8DF804000027B08A6E +:1017D000ADF80600B84643F202094CE001A80EF04D +:1017E0003EF9050006D0B08AA8B3A6F81480ADF87B +:1017F00006803EE0039CA07F01072DD504F1240064 +:101800000090A28EBDF80800214604F1360301F0D5 +:101810007DFF050005D04D452AD0112D3CD0FFDFBE +:101820003AE0A07F20F00800A077E07F810861F314 +:101830000000C10861F34100E07794F8210000F056 +:101840001F0084F820002078282826D1292120464E +:10185000FFF71CFE21E014E040070AD5BDF80800A0 +:1018600004F10E0101F050FB05000DD04D4510D1E3 +:1018700000257F1CFFB202200EF032F9401CB84256 +:10188000ACD8052D12D008E0A07F20F00400A0778E +:1018900003E0112D00D0FFDF0025BDF80600B08267 +:1018A000052D05D0284604B0BDE8F087A6F81480C1 +:1018B0000020F8E770B50646FFF7B6FD054607F0CD +:1018C00079F8040000D1FFDF6680207820F00F0057 +:1018D000801C20F0F000203020700620207295F847 +:1018E0003E006072BDE8704007F067B82DE9F04730 +:1018F00086B0040000D1FFDF2078A84E20F00F0052 +:10190000801C20F0F0007030207060680178091FA2 +:10191000182931D2DFE801F0FD30303053FC300CB3 +:10192000FCFC40FD3030FD76FDFD3030FDFDFBFA66 +:1019300086883046FFF778FD0546304608F0E0FB24 +:10194000E0B16068807985F83E0021212846FFF7E4 +:101950009DFD304603F0CBFF304605F037F93146A8 +:10196000022011F09DFDA87F20F01000A877FFF75E +:1019700027FF002800D0FFDF06B095E7207820F091 +:10198000F000203020700620207266806068807928 +:10199000607207F012F8D8E785882846FFF744FD03 +:1019A00000B9FFDF60688078012800D0FFDF606841 +:1019B000817906B02846BDE8F04708F07DBF8688EB +:1019C0003046FFF731FD050000D1FFDF06F0F5FFDF +:1019D00060683146C08828816068008968816068D5 +:1019E0004089A881022011F05BFD0020A875A87F26 +:1019F00000F003000228BFD1FFF7E2FE0028BBD0B1 +:101A0000FFDFB9E780783C2803D0002502280AD000 +:101A100000E00125002720B13C2802D0022800D098 +:101A2000FFDF17B1B3E00127F5E706F0C6FF1DB1F0 +:101A3000B07801F022FA9CE06568B5F804A0A879B6 +:101A4000AD1C012806D03079814606F055FD07000F +:101A500003D101E0B078F7E7FFDF00220221504612 +:101A60000EF08DF8040000D1FFDF22212046FFF7A1 +:101A70000DFD2879012800D00220A17F804668F35F +:101A80000101A177288B2081688B6081A88BA081C0 +:101A900084F822908DF80880B8680090F86801906A +:101AA0006A46032150460EF06AF800B9FFDFB88895 +:101AB000ADF81000B8788DF8120004AA0521504640 +:101AC0000EF05DF800B9FFDFB888ADF80C00F878CB +:101AD0008DF80E0003AA042150460EF050F800B90C +:101AE000FFDF062105F1120001F02CFA28B3687916 +:101AF000800700D5FFDF6979E07D61F34700E0757D +:101B0000D5F80600A0616889A08303E05CE055E099 +:101B10004EE060E0062105F10C0001F013FAB0B1CF +:101B2000B0794108607861F347006070D6F807002B +:101B3000C4F80200B6F80B0012E0E07D20F0FE00D1 +:101B4000801CE075D5F81200A061E88ADCE76078B7 +:101B500020F0FE00801C6070E868C4F80200288A4B +:101B6000E080B8F1010F04D0B8F1020F0FD0FFDF11 +:101B700002E73078032800D0FFDF0021084611F08B +:101B80008FFC06B00120BDE8F04701F045B9F078C0 +:101B9000132800D0FFDF0021062001E0C80100204B +:101BA00011F07EFC06B01120BDE8F047FFF7DEBB68 +:101BB00006B02046BDE8F04702F030B806F0FDFE62 +:101BC000B07C40F0020004E006F0F7FEB07C40F08C +:101BD0000400B074D0E606B0BDE8F04706F0EDBEF4 +:101BE0002DE9F04705460078914600270209FB4899 +:101BF0000C463E46012A6DD000234FF6FF71022AA3 +:101C000069D0072A09D00A2A71D0FFDFA9F800603D +:101C10000CB127806680002046E6D5F804C09CF809 +:101C20000060142E7DD010DC04F1080204F11808C5 +:101C30000F2E21D004DC042E5AD0082E57D10DE0EF +:101C4000122E6FD0132EF9D11FE0153E072E4ED263 +:101C5000DFE806F0C14D4D099FEAB00012271026BB +:101C6000BCF8040014E11C27092694B3BCF8020058 +:101C7000A080686800795AE11B2709264CB303202D +:101C8000207268684088A080C0E79CF802003C2869 +:101C900027D0102718260CF1020CD4B1BCF8020092 +:101CA000A080BCF818006082BCF818002082BCF844 +:101CB0001A00A082BCF81C00E0829CF805000CF120 +:101CC0000601FFF724FD9CF8040028B10120E07311 +:101CD0009CE703E0BFE0DFE00220F8E7A9F800603E +:101CE00099E71B270926002CF8D023728EE720E104 +:101CF0001D273726002CF1D0A18069680879491D7D +:101D0000FFF705FD686890F82B00A0756868C0783B +:101D10000428E07D16D020F00100E0756968C978DC +:101D200001E06DE011E061F34200E07569681F2297 +:101D3000C97A61F3C700E075696840460C311CF050 +:101D4000C4FD63E740F00100E7E71D273726002CBC +:101D5000C4D0A1806868411D0079FFF7D8FC69688C +:101D600004F10F0201F10C00CB7A01461846FFF78F +:101D7000CEFC6868807CA0756868C178E07D61F3FE +:101D8000420020F0F900E0751F2140461CF03EFEA5 +:101D90003CE720271026002CA0D0A180686804F121 +:101DA0000902407A20726968CB1C88781946FFF7CF +:101DB000AEFC2BE721270A26002C8FD0BCF802109E +:101DC000A180696809792172696849796172817CA9 +:101DD00021F0040157E022270B26002C84D0BCF808 +:101DE0000400A0806868807820726868807901F0BB +:101DF000B8F860726868C07901F0B3F8A07205E7BE +:101E000024271026002CA3D0BCF80200A08068680C +:101E1000007920816868007A60816868C088A08144 +:101E200068684089E081F1E623271026002C8FD0D6 +:101E3000BCF80210A1806968898821816968C98815 +:101E4000618169680989A18169684989E181817C29 +:101E500021F0020117E0297A012903D0022914D0C8 +:101E6000FFDFD3E61F271026002C95D06988A180BC +:101E7000A9892181E9896181298AA181698AE18110 +:101E8000817C21F001018174C0E612276888102648 +:101E9000214601F044F8B9E6287A072850D2DFE855 +:101EA00000F0373D3D484848040011270926002C22 +:101EB00094D0B5F802804046FFF7B6FA90F822A019 +:101EC000A4F80480687A2072042140460DF072FE66 +:101ED000052140460DF06EFE002140460DF06AFEE1 +:101EE000012140460DF066FE032140460DF062FEE2 +:101EF000022140460DF05EFE062140460DF05AFEDE +:101F0000072140460DF056FE504600F0B6FF7DE634 +:101F10001B270926002C8AD0A180E6E61B2709266C +:101F2000002C84D0A180287A012800D002202072C1 +:101F30006CE64A4621462846BDE8F04701F0F8BF66 +:101F4000FFDF63E670B5254DE878132801D008203F +:101F500070BD0CF0B3FC06F063FB040002D12879DD +:101F600000F08BFF0021062011F09AFA204670BD88 +:101F70001A4810B5C078122801D0082010BD0021E1 +:101F800008460CF0FAFA06F04BFB0028F6D10021C7 +:101F9000062011F085FA1120FFF7E8F9002010BDA6 +:101FA00010B50E4C207801280ED000200CF0A1FDB9 +:101FB00006F036FB002808D10021084611F070FA1F +:101FC0002078032802D004E0082010BDA07800F09B +:101FD00054FF012000F020FF002010BDC8010020A8 +:101FE00070B5002538B1022817D0062836D007284A +:101FF00000D0FFDF70BDFFF7D3FF0028FAD106F055 +:10200000D9FC0028F6D0017821F00F01891C21F0BD +:10201000F0012031017005723FE08EB23046FFF7CB +:1020200003FA040000D1FFDF20782128E2D006F077 +:10203000C1FC60B1017821F00F01891C21F0F00191 +:1020400010310170022101724680A57525E02146FC +:102050003046BDE870401322FFF782BBFE48C478CB +:10206000122C03D0132C04D0FFDF70BDFFF780FFCC +:1020700001E0FFF767FF0028F7D106F09BFC00287E +:10208000F3D0017821F00F01891C21F0F0012031FB +:102090000170122C05D002210172BDE8704006F0DB +:1020A0008CBC0121F8E72DE9F04116460C00804672 +:1020B00000D1FFDF307820F00F00801C20F0F0000E +:1020C000103030702078012804D0022817D0FFDFAC +:1020D000BDE8F0814046FFF7A7F9050000D1FFDF1A +:1020E0000320A87506F069FC94E80F00083686E81E +:1020F0000F00D948817C41F001018174E8E7404636 +:10210000FFF792F9050000D1FFDFA1884FF6FF70BD +:102110000027814202D1E288824203D0814201D16C +:10212000E08840B106F049FC94E80F00083686E8E4 +:102130000F00AF75CCE7A87D0128C9D17823002214 +:102140004146022011F002F90220A875C0E738B517 +:1021500005460C46084611F0EFF920BB203D072D3F +:1021600051D2DFE805F0041C383D4349310000211D +:10217000072011F06BF908B1112038BDA01C0CF03C +:1021800010FC06F04DFA05003ED10022082311464E +:10219000072011F0DBF8072836D0FFDF34E0606855 +:1021A00011F00EFA08B1102038BD618820886A4607 +:1021B0000CF0CBFD06F034FA050025D1606818B3A9 +:1021C000BDF8001001801FE0A07800F00101208818 +:1021D0000CF0F1FD14E0206802F057F9054613E019 +:1021E000207800F001000CF058FE09E0207800F0A3 +:1021F00001000BF05FFF03E0618820880CF02DFDEB +:1022000006F00EFAEAE70725284638BD70B5054600 +:102210000C46084611F0B6F908B1102070BD203DFB +:10222000072D1BD2DFE805F0041818181A1A180039 +:102230002088FFF7F9F820B10078222804D208207E +:1022400070BD43F2020070BD2088A11C0CF003F8A1 +:10225000BDE8704006F0E4B9062070BD072070BDEF +:102260007D48801D704738B516217B481CF0ACFBBB +:10227000012000F0D1FD1120FFF778F8764C684678 +:10228000E11D06F02DFB9DF80010A07961F34700D9 +:1022900020F00100A071002020744FF46170E081F3 +:1022A00002206074FFF7B0F800B1FFDF00F0BEFE5F +:1022B00001F07FFC38BD10B50C46402120461CF0D3 +:1022C00083FBA07F20F00300A07720202070002057 +:1022D000A07584F8230080E670477CB5054611F0B0 +:1022E0002BF908B110207CBD5B4CA11DD4F8060071 +:1022F0000090D4F80A0001902846FFF7F1F9002871 +:10230000F1D1FFF781F80028EDD00099C4F806104C +:10231000BDF8041061819DF8061021737CBD10B5D5 +:10232000044611F02FF908B1102056E64A4922461A +:102330008879C91D4008FFF7EAF900204DE6FEB58F +:102340000D4604004FF0000711D00822FFF718F9DE +:10235000002811D1002608E054F826006946FFF74E +:1023600087F9002808D1761CF6B2AE42F4D30BF000 +:102370000BFE10B143F20320FEBD374E7771FCB166 +:1023800000271AE054F8270002A9FFF771F900B1FD +:10239000FFDF9DF808008DF8000054F8270050F882 +:1023A000011FCDF801108088ADF8050068460BF0DC +:1023B00010FE00B1FFDF7F1CFFB2AF42E2D37571A8 +:1023C0000020FEBD2DE9F0478AB01546894604007D +:1023D0001DD00F4608222946FFF7D2F8002810D159 +:1023E000002612E054F826006946103000F074FD13 +:1023F000002806D13FB157F8260011F09DF810B122 +:1024000010200AB008E4761CF6B2AE42EAD30026E9 +:10241000A5F101081CE000BF06F1010A0AF0FF0760 +:1024200012E000BF54F82600017C4A0854F8271037 +:102430000B7CB2EB530F05D10622113011311CF089 +:1024400018FA70B17F1CFFB2AF42EBD30AF0FF065F +:102450004645E1DB4E4601E0C801002024B10120E1 +:1024600003E043F20520CCE700200BF0D2FD10B9C9 +:102470000BF0DBFD10B143F20420C2E764B3002788 +:102480000DF1170826E000BF54F827006946103008 +:1024900000F022FD00B1FFDF54F82700102250F8B1 +:1024A000111FCDF801108088ADF8050054F82710F1 +:1024B0000DF107001CF009FA96B156F8271010220A +:1024C00040461CF002FA68460BF068FD00B1FFDFE1 +:1024D0007F1CFFB2AF42D7D3FFF75AF9002090E735 +:1024E000404601F0C6FFEEE730B585B0044611F076 +:1024F00023F818B9606811F06CF810B1102005B01D +:1025000030BD60884AF2B811884206D82078F74D6D +:1025100028B1012806D0022804D00720EFE7FEF7F3 +:1025200073FF17E06078022804D0032802D043F23A +:102530000220E4E76874C1B200200090ADF8040006 +:1025400002292BD0032926D0FFDF68460BF0DEFDE1 +:1025500006F066F80028D2D1606801F07DFF20788F +:1025600058B101208DF800000DF1010001F081FF4C +:1025700068460CF07CFC00B1FFDF20782874FFF780 +:1025800007F9608860B1E88180B20BF03AFD00B1D4 +:10259000FFDF0020B3E78DF80500D6E74020FAE71B +:1025A0004FF46170EFE710B5044610F0EBFF20B96F +:1025B000606838B111F004F808B110200DE56068CA +:1025C00001F057FFC948C1896180417C6170007C7E +:1025D0002070002001E52DE9F04186B0054600207D +:1025E0008DF80C008DF804008DF808008DF81000AF +:1025F0001E4614468846284610F0EBFF18B92046C0 +:1026000010F0E7FF10B1102006B061E555EA0400B4 +:1026100018D01F2702AB03AA414628460097FEF7B1 +:10262000CAFF0028F0D104AB01AA3146204600972A +:10263000FEF7C1FF0028E7D19DF80400C00703D0D2 +:102640000A20E1E70720DFE73DB1294640460CF0CC +:102650003EFA05F0E5FF0028D6D13CB121463046D0 +:102660000CF03EFA05F0DCFF0028CDD19F499DF823 +:10267000080048700020C7E72DE9F04387B089467D +:102680004FF000089AA104468DF81080D1E90001AE +:10269000CDE90501204610F04FFF80B920780128D0 +:1026A00003D1606810F048FF48B9904D287C50B1C4 +:1026B000687C022807D1606810F08BFF18B11020E9 +:1026C00007B0BDE8F0832878012801D00820F7E79B +:1026D00007200DF00DFA18B9207878B101280DD037 +:1026E000FEF75EFE60B1608943F6E172A0F1200161 +:1026F000914221780CD3012904D0B2E01220DFE707 +:102700001320DDE700287CD1A189002979D109E0D7 +:10271000012907D06978C90704D0A189002970D0A0 +:10272000B4296ED8217831B1012908D0022904D00A +:10273000032966D10AE0002609E0022607E008B96D +:10274000A08908B1042609E0012607E00326287CB9 +:1027500050B1687C022807D1606828B104A960687C +:10276000FEF786FF0028ABD1207A30B1012806D0D1 +:10277000022806D0032874D105E0002704E00127D1 +:1027800002E0022700E003270EB1022E0ED16FB146 +:102790006879B0B36878800702D043F201208FE7F0 +:1027A000022E03D1022F5CD0032F5AD0207808B11B +:1027B000012806D1484600F043FB002880D185F867 +:1027C00002906089ADF800006089ADF802008DF8D4 +:1027D00004600DF10500FEF76EFF00B1FFDF9DF80C +:1027E00010008DF806002078012806D0287C68B1FA +:1027F000687C02280AD1606840B1606850F8011F07 +:1028000000E02EE0CDF80710808802E04046CDF8C9 +:102810000780ADF80B008DF80E70A07BC0F340026E +:10282000014662F35F01C0F3800041EA800005A920 +:10283000085C8DF80D00A0B168460CF017F905F0A2 +:10284000EFFE0028ABD101200CF053F905F0E8FEB3 +:102850000028A4D1052E0ED2DFE806F005050A0AED +:10286000050007202CE7A87800F0FAFA032000E022 +:10287000022000F0D1FA012E0AD0A08940B1002236 +:1028800083001146104610F061FD08B1032017E7E0 +:10289000002015E72DE9FC4180460E460325084639 +:1028A00010F097FE00286DD14046FEF7BDFD0400F4 +:1028B00005D02078222805D20820BDE8FC8143F20B +:1028C0000200FAE7A07F00F003073EB1012F13D00A +:1028D00000203146FEF72FFE0500EED1012F0DD06E +:1028E000022F21D0FFDF2846E7E70000C8010020C3 +:1028F00007060504030201000120EAE7A07D314636 +:10290000022801D011B107E01120D6E7684600F097 +:102910009AFC0028D1D16946404607F090FF050097 +:10292000E1D10120A075DEE7A07D032803D1FE4898 +:10293000807CC00701D02EB30EE026B1A07F4007F7 +:102940001ED4002100E00121404607F098FF050059 +:10295000C9D1A075002EC6D03146404600F0D4FA49 +:1029600005461128BFD1A07F4107BCD4316844F887 +:102970000E1F7168616040F0040020740025B2E70A +:102980001125B0E7102098E770B50C460546FEF714 +:102990004BFD010005D022462846BDE87040FEF7F9 +:1029A000DFBE43F2020070BD10B50BF05CFBBDE86A +:1029B000104005F035BE0123FEF739BD00231A464D +:1029C0001946FEF734BD7CB5044610F0B5FD08B1DC +:1029D00010207CBD628843F6FD73111F07209942C9 +:1029E000F7D2A1880429F4D3B1F5804FF1D89142F0 +:1029F000EFD8CD4DE878112801D008207CBDFEF736 +:102A0000CFFCB0B32078810701D5697991B300F08C +:102A100001008DF800006088ADF80200A088ADF8D4 +:102A2000040020780222C0F3400102EA5000014372 +:102A30008DF807100DF10600FEF73DFE00B1FFDF37 +:102A400068460BF05EFD05F0EBFD0028D6D10021B5 +:102A500001200BF092FD05F0E3FD0028CED1E088C7 +:102A600000F044FA0400C9D11220FEF77FFC204692 +:102A70007CBD00E001E01320FAE70720F8E72DE92C +:102A8000F043DFF8A482074687B098F80300994620 +:102A900015460C46122803D1FFF76AFA00281CD10C +:102AA000204610F049FDB8B9284610F045FD98B908 +:102AB0006088ADF80000A088ADF8020020784FF0E3 +:102AC0000006C0F340008DF80400207880071ED473 +:102AD000384610F031FD08B11020F1E53878400893 +:102AE00008D0012809D0022807D0032805D043F2D6 +:102AF0000220E5E58DF8056002E001208DF8050073 +:102B000057F8010FCDF80600B888ADF80A0003A801 +:102B1000FEF7D1FD08B10320D2E52888ADF80E00FC +:102B20006888ADF81000A888ADF81200E888ADF804 +:102B30001400ADF81660ADF8186068460BF0A8FDFB +:102B4000B8B998F803004546112801D00820B7E528 +:102B500006200CF0CDFF50B12078800701D56879B0 +:102B600038B1FEF71DFC022805D21320A8E512207B +:102B7000A6E50720A4E5484600F062F90028ACD19C +:102B800085F8049068460BF0C0FD05F049FD00286B +:102B9000A3D1287900F064F9E08800F0A7F90400D7 +:102BA0009BD11320FEF7E2FB204689E570B5054670 +:102BB0000C46084610F0E6FC08B1102070BD28460F +:102BC000FEF732FC38B10178222902D3807F8006DB +:102BD00004D4082070BD43F2020070BD214628468F +:102BE0000CF097F8BDE8704005F01ABD38B5054601 +:102BF0000C46084610F0A0FC08B1102038BD28464D +:102C0000FEF712FC20B10078222804D2082038BD3B +:102C100043F2020038BD4448807C400701D51120B2 +:102C200038BD2078800802D16078800801D0072064 +:102C300038BDADF8005020788DF8020060788DF82E +:102C4000030068460BF04EFC05F0EAFC38BD2DE9A8 +:102C5000F0418EB014460D460646FEF7E5FB070030 +:102C600006D03878222806D208200EB0BDE8F081C0 +:102C700043F20200F9E7284610F0ABFC30B94FF000 +:102C800000084CB1204610F09BFC08B11020ECE786 +:102C9000C4F80080A4F804802348807C800701D514 +:102CA0001120E2E797F8220005F026FC8088011D3C +:102CB000FB2901D2001D00E0FB20C0B26A46294674 +:102CC00000F0E5F8ADF81060BDF80200ADF81200B4 +:102CD000BDF80600ADF81400BDF80000ADF8160010 +:102CE000BDF80400ADF8180007A904A80BF03FFBDD +:102CF00000B1FFDFBDF81E00ADF80800BDF82000F0 +:102D0000ADF80A00BDF82200BDF82410BDF800207F +:102D10000844ADF80C0007201B2AA6D3BDF802100A +:102D20001B29A2D3FB2A01E0C80100209DD8FB2962 +:102D30009BD806278A4210D10121104600F056F890 +:102D4000BDF80410884208D1BDF80200012100F04E +:102D50004DF8BDF80610884201D0384685E7BDF829 +:102D6000080028B9BDF80A1011B9BDF80C1029B334 +:102D70005DB1298849B1698839B124B102982060D0 +:102D8000BDF80C00A08013206FE7BDF80010BDF85F +:102D90000A20081A80B2ADF80000BDF80210891AA6 +:102DA000ADF80210012100F021F8ADF80400BDF8E3 +:102DB0000200012100F01AF8ADF80600ADF8286015 +:102DC000BDF80200ADF82A00BDF80600ADF82C00F1 +:102DD000BDF80000ADF82E00BDF80400ADF83000DD +:102DE0000AA80BF076FA05F01BFC3EE7022903D097 +:102DF000C000703080B2704780003C30FAE710802D +:102E00000888508048889080C88810818888D08041 +:102E1000002050819081704730B5564D040008D095 +:102E2000012C04D0022C06D0032C04D0FFDF2C7020 +:102E300030BDFFDFFBE728780128F8D0FFDFF6E799 +:102E400010B5044605F058FB30B1407830B120464B +:102E500005F057FE002010BD072010BD122010BD48 +:102E600010B505F049FB040000D1FFDF607800B920 +:102E7000FFDF6078401E607010BD10B505F03CFBB0 +:102E8000040000D1FFDF6078401C607010BD10B5F9 +:102E9000144631B10A68226049686160218839B1FD +:102EA00007E0208060800121FFF7A0FFA0800DE0F7 +:102EB0002080618801B96080A08820B92088012124 +:102EC000FFF794FFA080E088002804D160880121EA +:102ED000FFF78CFFE08010BD0278520804D0012A71 +:102EE00002D043F202207047FEF7C2BB10B548B1D2 +:102EF000830000221146062010F028FA062801D08F +:102F0000032010BD002010BD1FB56A46FFF777FFF4 +:102F100068460BF0FCFC05F083FB04B010BD70B5F7 +:102F20000C0006460DD0FEF77FFA050000D1FFDF4A +:102F3000A68028892081288960816889A081A88944 +:102F4000E08170BD10B500231A4603E0845C234382 +:102F5000521CD2B28A42F9D30BB1002010BD01201D +:102F600010BD00B5012803D0022801D0FFDF0020EA +:102F700000BD0000C80100200A4810B504680949D6 +:102F80000948083108600FF0FCFB0648001D04608A +:102F900010BD0649002008604FF0E0210220C1F872 +:102FA000800270471005024001000001FC1F004034 +:102FB0000F4A12680D498A420CD118470C4A126810 +:102FC0000A4B9A4206D101B510F02AF808F009FC24 +:102FD000BDE80140074909680958084706480749FC +:102FE000054A064B7047000000000000BEBAFECA4A +:102FF000B000002004000020A8110020A81100202B +:103000002CFFFFFFDBE5B15100300200A500FFFF00 +:1030100084000000284F4C00DA0D499A2F95338424 +:1030200077AC2F1307CD6F7D177A70DEFE48002135 +:1030300001604160018170472DE9F743044692B079 +:103040009146406810F0BCFA40B1606810F0C1FAD7 +:1030500020B9607800F00300022801D0012000E0D0 +:103060000020F14E3072484610F066FA18B1102078 +:1030700015B0BDE8F08349460120FEF75CFA002850 +:10308000F6D101258DF842504FF4C050ADF8400004 +:10309000002210A9284604F061F80028E8D18DF834 +:1030A00042504FF428504FF00008ADF8400047461A +:1030B0001C216846CDF81C801BF0A8FC9DF81C0064 +:1030C00008AA20F00F00401C20F0F00010308DF80E +:1030D0001C0020788DF81D0061789DF81E0061F3BA +:1030E000420040F001008DF81E009DF800000AA982 +:1030F00040F002008DF800002089ADF83000ADF8F6 +:103100003270608907AFADF834000B97606810AC7F +:103110000E900A94684603F016FE0028A8D1BDF868 +:10312000200030808DF8425042F60120ADF840007A +:103130009DF81E0008AA20F00600801C20F0010067 +:103140008DF81E000220ADF83000ADF8340013A851 +:103150000E900AA9684603F0F6FD002888D1BDF854 +:1031600020007080311D484600F033F9002887D1D7 +:103170008DF8425042F6A620ADF840001C2168466A +:10318000CDF81C801BF042FC9DF81C00ADF83450BB +:1031900020F00F00401C20F0F00010308DF81C00D3 +:1031A0009DF81D0008AA20F0FF008DF81D009DF875 +:1031B0001E000AA920F0060040F00100801C8DF8D6 +:1031C0001E009DF800008DF8445040F002008DF87C +:1031D0000000CDE90A4711A80E90ADF830506846BE +:1031E00003F0B1FD002899D1BDF82000F080002047 +:1031F0003EE73EB504460820ADF80000204610F03A +:103200009BF908B110203EBD21460120FEF793F93D +:103210000028F8D12088ADF804006088ADF80600D9 +:10322000A088ADF80800E088ADF80A007E4801AB40 +:103230006A468088002104F08BF9BDF80010082947 +:10324000E1D003203EBD1FB50446002002900820B7 +:10325000ADF80800CDF80CD0204610F06DF910B193 +:10326000102004B010BD704802AA81884FF6FF708C +:1032700004F0B0FB0028F4D1BDF80810082901D0F3 +:103280000320EEE7BDF800102180BDF80210618038 +:10329000BDF80410A180BDF80610E180E1E701B59A +:1032A00082B00220ADF800005F4802AB6A46408859 +:1032B000002104F04DF9BDF80010022900D00320D0 +:1032C0000EBD1CB5002100910221ADF80010019047 +:1032D00010F058F908B110201CBD53486A464188C7 +:1032E0004FF6FF7004F076FBBDF800100229F3D012 +:1032F00003201CBDFEB54C4C06461546207A0F46F1 +:10330000C00705D0084610F017F918B11020FEBD0F +:103310000F20FEBDF82D01D90C20FEBD304610F067 +:103320000BF918BB208801A903F053FA0028F4D147 +:1033300030788DF80500208801A904F0E8F800280D +:10334000EBD100909DF800009DF8051040F00200C0 +:103350008DF80000090703D040F008008DF8000048 +:103360002088694604F070F80028D6D1ADF80850DE +:1033700020883B4602AA002104F0EAF8BDF80810B4 +:10338000A942CAD00320FEBD7CB5054600200090AE +:1033900001900888ADF800000C462846019510F011 +:1033A0000FF918B9204610F0EDF808B110207CBDD7 +:1033B00015B1BDF8000050B11B486A4601884FF6B0 +:1033C000FF7004F007FBBDF8001021807CBD0C20CD +:1033D0007CBD30B593B0044600200D46009014210A +:1033E00001A81BF013FB1C2108A81BF00FFB9DF884 +:1033F0000000CDF808D020F00F00401C20F0F000B5 +:1034000010308DF800009DF8010020F0FF008DF8CD +:1034100001009DF8200040F002008DF820000120FE +:103420008DF8460002E00000DE01002042F6042094 +:10343000ADF8440011A801902088ADF83C006088E8 +:10344000ADF83E00A088ADF84000E088ADF842003D +:103450009DF8020006AA20F00600801C20F0010062 +:103460008DF802000820ADF80C00ADF810000FA890 +:10347000059001A908A803F066FC002803D1BDF857 +:1034800018002880002013B030BD000010B504469D +:1034900010F052F808B1102010BD2078C0F30210CF +:1034A000042807D86078072804D3A178102901D808 +:1034B000814201D2072010BDE078410706D421796E +:1034C0004A0703D4000701D4080701D5062010BD20 +:1034D000002010BD10B513785C08C37F64F30003AF +:1034E000C3771478A40864F34103C3771078C30941 +:1034F000487863F34100487013781C090B7864F333 +:1035000047130B701378DB0863F3000048705078A2 +:10351000487110BD10B5C4780B7864F300030B70CC +:10352000C478640864F341030B70C478A40864F39E +:1035300082030B70C478E40864F3C3030B7003794F +:10354000117863F30001117003795B0863F34101A3 +:10355000117003799B0863F3820111700079C00830 +:1035600060F3C301117010BD70B514460D460646D8 +:1035700005F020FA80B10178182221F00F01891C92 +:1035800021F0F001A03100F8081B21461BF0E2F900 +:10359000BDE8704005F011BA29463046BDE87040DC +:1035A0001322FEF7DDB82DE9F047064608A8894644 +:1035B00090E830041F469046142128461BF026FA56 +:1035C0000021CAF80010B8F1000F03D0B9F1000FC4 +:1035D00003D114E03878C00711D020680FF0D2FF73 +:1035E000C0BBB8F1000F07D12068123028602068F6 +:1035F000143068602068A8602168CAF80010387824 +:10360000800724D560680FF0DBFF18BBB9F1000F0D +:1036100021D0FEF725FE0168C6F868118188A6F85A +:103620006C11807986F86E0101F0FBFCF94FEF60B8 +:10363000626862B196F8680106F2691140081032BA +:10364000FEF765F81022394660681BF03EF900204D +:10365000BDE8F08706E0606820B1E8606068C6F801 +:103660006401F4E71020F3E730B5054608780C460E +:1036700020F00F00401C20F0F001103121700020DC +:10368000607095F8230030B104280FD0052811D0C0 +:10369000062814D0FFDF20780121B1EB101F04D2DF +:1036A00095F8200000F01F00607030BD21F0F000A0 +:1036B000203002E021F0F00030302070EBE721F004 +:1036C000F0004030F9E7F0B591B0022715460C46FE +:1036D00006463A46ADF80870092103AB05F089FFAC +:1036E0000490002810D004208DF804008DF801709B +:1036F000E034099605948DF818500AA968460DF033 +:1037000039FF00B1FFDF012011B0F0BD10B588B066 +:103710000C460A99ADF80000CBB11868CDF802004C +:10372000D3F80400CDF80600ADF80A20102203A853 +:103730001BF0CBF868460BF061F904F071FF00282C +:1037400003D1A17F41F01001A17708B010BD002086 +:10375000CDF80200E6E72DE9F84F0646808A0D46CF +:1037600080B28246FDF760FE04463078DFF8A4821E +:1037700000274FF00509A8F120080F2870D2DFE8D4 +:1037800000F06FF23708387D8CC8F1F0EFF35FF38B +:10379000F300A07F00F00300022809D05FF00000D2 +:1037A00080F0010150460CF0F3F9050003D101E06F +:1037B0000120F5E7FFDF98F85C10C90702D0D8F8C0 +:1037C00060000BE0032105F11D000FF090FBD5F820 +:1037D0001D009149B0FBF1F201FB1200C5F81D007C +:1037E00070686867B068A8672078252800D0FFDF78 +:1037F000CAE0A07F00F00300022809D05FF00000BB +:1038000080F0010150460CF0C3F9060003D101E03D +:103810000120F5E7FFDF3078810702D521782529DF +:1038200004D040F001003070BDE8F88F022028700D +:10383000307F287106F11D002D36C5E90206F3E739 +:10384000A07F00F00300022808D0002080F00101D2 +:1038500050460CF09DF9040004D102E00120F5E788 +:10386000A5E1FFDF2078C10604D5072028703D348C +:103870006C60D9E740F008002070D5E7E07FC00613 +:1038800000D5FFDF307CB28800F0010301B0504664 +:10389000BDE8F04F092106F035BD04B9FFDF7168BE +:1038A00021B1102204F124001BF00FF8282120463A +:1038B000FDF7ECFDA07F00F0030002280ED104F11B +:1038C0002400002300901A4621465046FFF71EFFB1 +:1038D000112807D029212046FDF7D8FD307A84F839 +:1038E0002000A1E7A07F000700D5FFDF14F81E0F1E +:1038F00040F008002070E782A761E7616178084620 +:1039000061F38200410861F3C3006070307AE070B7 +:103910008AE7A07F00F00300022809D05FF00000D2 +:1039200080F0010150460CF033F9040003D101E0AE +:103930000120F5E7FFDF022104F185000FF0D7FA3F +:103940000420287004F5B4706860B4F885002882FB +:10395000304810387C346C61C5E9028064E703E0CC +:1039600022E15BE02DE015E0A07F00F003000228DB +:1039700007D0002080F0010150460CF009F918B979 +:1039800001E00120F6E7FFDF324621465046BDE860 +:10399000F84FE9E504B9FFDF20782128A1D9307973 +:1039A000012803D1E07F40F01000E0773246214645 +:1039B0005046FFF7D9FD2046BDE8F84F2321FDF71B +:1039C00065BD3279AA8005F108030921504605F04A +:1039D00010FEE86010B185F8009025E7A07F00F0A8 +:1039E0000300022808D0002080F0010150460CF0AE +:1039F000CFF8040003D101E00120F5E7FFDF04F177 +:103A0000620102231022081F0BF049FF0770317971 +:103A1000417009E70802002040420F00A07F00F03B +:103A20000300022808D0002080F0010150460CF06D +:103A3000AFF8050003D101E00120F5E7FFDF95F8BD +:103A4000840000F00300012878D1A07F00F0030774 +:103A5000E07FC0F3400616B1022F04D132E095F8A2 +:103A6000A000C0072AD0D5F8601119B395F88320BB +:103A7000087C62F387000874E27FD5F8601162F376 +:103A800041000874D5F8601166F300000874AEB107 +:103A9000D5F86001102204F1240188351AF015FFD1 +:103AA000287E40F001002876287820F0010005F8F3 +:103AB000880900E016B1022F04D02CE095F88800A8 +:103AC000C00726D0D5F85C1119B395F88320087C7F +:103AD00062F387000874E27FD5F85C1162F341005D +:103AE0000874D5F85C1166F3000008748EB1D5F83F +:103AF0005C01102204F1240188351AF0E6FE2878D2 +:103B000040F0010005F8180B287820F0010005F8B6 +:103B1000A009022F44D0002000EB400005EBC000BC +:103B200090F88800800709D595F87C00D5F86421C5 +:103B3000400805F17D011032FDF7E9FD8DF8009098 +:103B400095F884006A4600F003008DF8010095F8AE +:103B500088108DF8021095F8A0008DF8030021461A +:103B6000504601F047FA2078252805D0212807D0B3 +:103B7000FFDF2078222803D922212046FDF786FC8A +:103B8000A07F00F0030002280CD0002080F001018B +:103B900050460CF00FF800283FF451AEFFDF43E62B +:103BA0000120B9E70120F1E7706847703CE6FFDFCC +:103BB0003AE670B5FE4C002584F85C5025660DF0A1 +:103BC000A6FC04F11001204604F0B0FE84F8305049 +:103BD00070BD70B50D46FDF727FC040000D1FFDF76 +:103BE0004FF4B87128461AF011FF04F1240028613F +:103BF000A07F00F00300022808D0012105F1E000B9 +:103C00000DF086FC002800D0FFDF70BD0221F5E733 +:103C10000A46014602F1E0000DF09ABC70B5054677 +:103C2000406886B00178092906D00C2933D00D29C7 +:103C30002FD0FFDF06B070BD46883046FDF7F4FB9D +:103C4000040000D1FFDF20782128F3D028281BD1E1 +:103C5000686802210C3001F0C2F9A8B16868082137 +:103C6000001D01F0BCF978B104F1240130460AF0DE +:103C7000B9FF04F0D5FC00B1FFDF06B02046BDE877 +:103C800070402921FDF702BC06B0BDE8704004F089 +:103C900094BE01218171686886883046FDF7C4FBB7 +:103CA000040000D1FFDFA07F00F00301022902D150 +:103CB00020F01000A077207821280AD06868817948 +:103CC00009B1807880B1A07F00F00300022862D0A3 +:103CD000FFDFA07F00F003000228ABD1FDF770FDED +:103CE0000028A7D0FFDFA5E704F067FEE07FC1074B +:103CF00029D0800705D594F8200000F01F00102877 +:103D00001FD0052084F82300207829281DD02428DE +:103D1000DFD1314605200FF0C3FB22212046FDF7FD +:103D2000B5FBA07F00F00300022832D05FF0000056 +:103D300080F0010130460BF03DFF0028C9D0FFDFC5 +:103D4000C7E70620DEE70420DCE7A07F00F00300E1 +:103D5000022809D05FF0000080F0010130460BF02E +:103D600017FF050003D101E00120F5E7FFDF252162 +:103D70002046FDF78BFB03208DF80000694605F116 +:103D8000E0000DF0DCFB0228A3D00028A1D0FFDF6B +:103D90009FE70120CCE704F010FE9AE72DE9F043FD +:103DA00087B09946164688460746FDF73DFB040056 +:103DB0004BD02078222848D3232846D0E07FC00665 +:103DC00043D4A07F00F00300022809D05FF0000078 +:103DD00080F0010138460BF0DBFE050002D00CE05C +:103DE0000120F5E7A07F00F00300022805D00121A3 +:103DF000002238460BF0C3FE05466946284601F00E +:103E000020F9009800B9FFDF45B10098E035056161 +:103E10002078222806D0242804D007E0009900202A +:103E2000086103E025212046FDF730FB00980121C1 +:103E300041704762868001A9C0E902890DF09AFBB2 +:103E4000022802D0002800D0FFDF07B0BDE8F083D1 +:103E500070B586B00546FDF7E7FA017822291ED92C +:103E6000807F00F00300022808D0002080F00101CC +:103E700028460BF08DFE04002FD101E00120F5E76C +:103E8000FFDF2AE0B4F85E0004F1620630440178F6 +:103E9000427829B121462846FFF715FCB0B9C9E69A +:103EA000ADF804200921284602AB05F0A2FB0390DF +:103EB0000028F4D005208DF80000694604F1E000E8 +:103EC0000DF03DFB022801D000B1FFDF02231022DC +:103ED000314604F15E000BF018FDB4F860000028D4 +:103EE000D0D1A7E610B586B00446FDF79DFA01785B +:103EF00022291BD9807F00F00300022808D000206F +:103F000080F0010120460BF043FE040003D101E0E4 +:103F10000120F5E7FFDF06208DF80000694604F177 +:103F2000E0000DF00CFB002800D0FFDF06B010BD54 +:103F30002DE9F05F05460C46002700789046010900 +:103F40003E4604F1080BBA4602297DD0072902D06B +:103F50000A2909D146E068680178092905D00C29A9 +:103F600030D00D292ED0FFDFBCE114271C26002CF9 +:103F70006BD04088A080FDF757FA5FEA000900D1B6 +:103F8000FFDF99F817005A46400809F11801FDF7BC +:103F9000BEFB68688089208269684868C4F812009E +:103FA0008868C4F81600A07E20F0060002E0000039 +:103FB000E801002040F00100A07699F81E0040F0D2 +:103FC00040014DE01A270A26002CD1D08088A0801D +:103FD000FDF72AFA050000D1FFDF59462846FFF712 +:103FE00043FB7FE10CB1A88BA080287A0B287DD001 +:103FF00006DC01287BD0022808D0032804D135E054 +:104000000D2875D00E2874D0FFDF6BE11E2709261E +:10401000002CADD0A088FDF707FA5FEA000900D1B7 +:10402000FFDF287B00F003000128207A1BD020F05E +:1040300001002072297B890861F341002072297BED +:10404000C90861F3820001E041E1F2E02072297BBE +:10405000090961F3C300207299F81E0040F0800145 +:1040600089F81E103EE140F00100E2E713270D261B +:10407000002CAAD0A088FDF7D7F98146807F00F0F8 +:104080000300022808D0002080F00101A0880BF076 +:104090007FFD050003D101E00120F5E7FFDF99F87E +:1040A0001E0000F00302022A50D0686F817801F0F0 +:1040B00003010129217A4BD021F00101217283787B +:1040C0009B0863F3410121728378DB0863F382016B +:1040D000217283781B0963F3C3012172037863F3B0 +:1040E00006112172437863F3C71103E061E0A9E090 +:1040F00090E0A1E0217284F809A0C178A172022A9F +:1041000029D00279E17A62F30001E1720279520862 +:1041100062F34101E1720279920862F38201E17275 +:104120000279D20862F3C301E1724279217B62F322 +:10413000000121734279520862F3410121734279EF +:10414000920862F382012173407928E0A86FADE7FD +:1041500041F00101B2E74279E17A62F30001E172D4 +:104160004279520862F34101E1724279920862F3A6 +:104170008201E1724279D20862F3C301E1720279ED +:10418000217B62F3000121730279520862F341013D +:1041900021730279920862F3820121730079C008C9 +:1041A00060F3C301217399F80000232831D9262137 +:1041B00040E018271026E4B3A088FDF735F98346C0 +:1041C000807F00F00300022809D0002080F0010168 +:1041D000A0880BF0DDFC5FEA000903D101E00120BB +:1041E000F4E7FFDFE868A06099F8000040F0040100 +:1041F00089F8001099F80100800708D50120207384 +:104200009BF8000023286DD92721584651E084F8F7 +:104210000CA067E015270F265CB1A088FDF704F914 +:10422000814606225946E86809F0A8FC0120A073DF +:10423000A2E041E048463CE016270926E4B3287B8B +:1042400020724FE0287B19270E26ACB3C4F808A0D3 +:10425000A4F80CA0012807D0022805D0032805D017 +:10426000042803D0FFDF0DE0207207E0697B0428FB +:1042700001F00F0141F0800121721ED0607A20F020 +:1042800003006072A088FDF7CFF80546007821286A +:1042900028D0232800D0FFDFA87F00F003000228E9 +:1042A00013D0002080F00101A0880BF083FC2221B4 +:1042B0002846FDF7EBF815E004E0607A20F00300F3 +:1042C000401CDEE7A8F8006011E00120EAE70CB12D +:1042D0006888A080287A03282ED004280AD00528D0 +:1042E00050D0FFDFA8F800600CB127806680002066 +:1042F000BDE8F09F15270F26002CE3D0A088FDF71E +:1043000093F8807F00F00300022809D05FF00000DE +:1043100080F00101A0880BF03BFC050003D101E017 +:104320000120F5E7FFDFD5F81D000622594609F008 +:1043300025FC84F80EA0D5E717270926002CC1D04C +:10434000A088FDF771F88146807F00F00300022805 +:1043500008D0002080F00101A0880BF019FC0500B6 +:1043600003D101E00120F5E7FFDF6878800701D580 +:10437000022000E00120207299F800002328B1D922 +:10438000272157E719270E26002C9BD0A088FDF780 +:104390004BF85FEA000900D1FFDFC4F808A0A4F8D9 +:1043A0000CA084F808A0A07A40F00300A07299F84D +:1043B0001F1061F38200A07299F81F10C1F3400230 +:1043C000114205D099F8201001F01F0110292CD0BE +:1043D00020F00800A07299F81F004108607A61F38C +:1043E000C3006072697A01F003010129A3D140F092 +:1043F0000400607299F81E0000F003000228E87AB9 +:1044000016D0217B60F300012173AA7A607B62F3EE +:1044100000006073EA7A520862F341012173A97ABD +:10442000490861F3410060735CE740F00800D1E7A0 +:10443000617B60F300016173AA7A207B62F3000064 +:104440002073EA7A520862F341016173A97A49083C +:1044500061F34100207345E710B5FE4C30B10146D1 +:10446000102204F120001AF030FA012084F8300004 +:1044700010BD10B5044600F0D4FDF64920461022C8 +:10448000BDE8104020311AF020BA70B5F14D060099 +:104490004FF0000412D00FF04FF808B110240BE0D9 +:1044A0000621304609F051FB411C04D0286601204A +:1044B00085F85C0000E00724204670BD0020F7E787 +:1044C000007810F00F0204D0012A05D0022A0CD186 +:1044D00010E0000909D10AE00009012807D00228EC +:1044E00005D0032803D0042801D0072070470870A6 +:1044F000002070470620704705282AD2DFE800F028 +:1045000003070F171F00087820F0FF001EE008784F +:1045100020F00F00401C20F0F000103016E008786A +:1045200020F00F00401C20F0F00020300EE0087852 +:1045300020F00F00401C20F0F000303006E008783A +:1045400020F00F00401C20F0F000403008700020E8 +:104550007047072070472DE9F041804688B00D462E +:10456000002708460FF035F8A8B94046FCF75CFF75 +:10457000040003D02078222815D104E043F2020081 +:1045800008B0BDE8F08145B9A07F010603D500F071 +:104590000300022801D01020F2E7A07FC10601D459 +:1045A000010702D50DB10820EAE7E17FC90601D570 +:1045B0000D20E5E700F00300022805D125B12846CB +:1045C000FEF764FF0700DBD1A07F00F003000228A4 +:1045D00008D0002080F0010140460BF0D9FA060017 +:1045E00002D00FE00120F5E7A07F00F003000228D1 +:1045F0000ED0002080F00101002240460BF0BFFAEF +:10460000060007D0A07F00F00300022804D009E0D4 +:104610000120EFE70420B3E725B12A4631462046C2 +:10462000FEF758FF6946304600F00BFD009800B9D0 +:10463000FFDF0099022006F1E0024870C1F82480F3 +:104640004A6100220A81A27F02F00302022A1CD0E2 +:1046500001200871287800F00102087E62F3010051 +:1046600008762A78520862F3820008762A7892083F +:1046700062F3C30008762A78D20862F30410087641 +:1046800024212046FCF702FF33E035B30871301DCA +:1046900088613078400908777078C0F34000487727 +:1046A000287800F00102887F62F301008877E27FBA +:1046B00062F382008877E27F520862F3C300887752 +:1046C000727862F304108877A878C87701F1210224 +:1046D00028462031FEF71EFF03E003200871052065 +:1046E000087625212046FCF7D1FEA07F20F080002F +:1046F000A07701A900980CF03DFF022801D000B17D +:10470000FFDF38463CE72DE9FF4F534A0D4699B08D +:104710009A4607CA0BAB002783E807001998FCF7F5 +:1047200083FE060006D03078262806D008201DB06B +:10473000BDE8F08F43F20200F9E7B07F00F0030913 +:10474000B9F1020F03D00020284302D006E0012077 +:10475000FAE71B98FEF79AFE0028E8D1B07F00F038 +:104760000300022801D11B9979BB022808D0002040 +:1047700080F0010119980BF00BFA040003D101E05D +:104780000120F5E7FFDF852D28D007DCF5B1812D6D +:104790001ED0822D1ED0832D08D11DE0862D1FD066 +:1047A000882D1FD0892D1FD08A2D1FD00F2020715A +:1047B0000F281DD004F0FEF8E0B101208DF8400074 +:1047C000201D11902079B8B165E111E00020EEE7DD +:1047D0000120ECE70220EAE70320E8E70520E6E70E +:1047E0000620E4E70820E2E70920E0E70A20DEE708 +:1047F00007209CE711209AE7B9F1020F03D0A56FBB +:1048000003D1A06F02E0656FFAE7606F804632D097 +:104810004FF0010000904FF0020001902146304619 +:104820001B9AFEF757FE1B98007800F00101A8784C +:1048300061F30100A870F17F61F38200A870F17F3D +:10484000490861F3C300A870617861F30410A8708F +:10485000207803E0E801002068ED0100400928709D +:104860006078C0F3400068701B988078E870002082 +:104870006871287103E00220009001200190A8785F +:1048800098F80210C0F3C000C1F3C00108405FEA0D +:10489000000B2CD050460EF04FFE90BBDAF80C0007 +:1048A0000EF04AFE68BBDAF81C000EF045FE40BB75 +:1048B000DAF80C00A060DAF81C00E06098F801005B +:1048C000617800F0010041EA4000607098F8021041 +:1048D000C0B2C1F30011891E08406070002020772B +:1048E000019906F1170002290CD001210BE098F87C +:1048F0000110607801F00101FD2242EA4101084007 +:10490000E3E732E0002104EB810148610099701C6B +:10491000022901D0012100E0002104EB810148615E +:10492000A87800F00300012858D198F8020000F0A0 +:104930000300012852D1B9F1020F04D02A1D691DCC +:104940001B98FEF7E7FD297998F8040001408DF8DF +:104950003810687998F8052010408DF83C00014324 +:104960003CD050460EF0E8FD08B11020DFE60AF119 +:1049700010010491B9F1020F18D008465FF0000150 +:1049800004F18C03CDE9000304F5AE7202920EAB84 +:104990005A462046FEF707FE0028E7D1B9F1020F7C +:1049A00008D0504608D14FF0010107E050464FF0C3 +:1049B0000101E5E70498F5E74FF0000104F1A403D5 +:1049C000CDE9000304F5B072029281F001010FAB52 +:1049D0005A462046FEF7E7FD0028C7D160788007D9 +:1049E00034D4A87898F80210C0F38000C1F3800195 +:1049F00008432BD0297898F800000BAAB9F1020FD0 +:104A000006D032F811204300DA4002F003070AE032 +:104A100032F810204B00DA4012F0030705D0012FC6 +:104A20000BD0022F0BD0032F07D0BBF1000F0DD0FE +:104A3000012906D0042904D008E00227F5E7012760 +:104A4000F3E7012801D0042800D10427F07F40F0CB +:104A500001006BF34100F077607881074FF00300AD +:104A60000CD5A071BBF1000F15D100BF8DF85C0013 +:104A700017AA3146199800F0BDFA0CE00221022F66 +:104A800018D0012F18D0042F22D00020A071F07F61 +:104A900020F00100F07725213046FCF7F7FC10A943 +:104AA00004F1E0000CF04BFD10B1022800D0FFDF54 +:104AB00000203CE6A171D9E7A1710D2104F120008D +:104AC00019F0A4FF207840F0020020700420CDE708 +:104AD0000120A071DFE72DE9F04387B090468946B9 +:104AE00004460025FCF7A0FC060006D030782728F5 +:104AF00006D0082007B0BDE8F08343F20200F9E7D2 +:104B0000B07F00F00300022808D0002080F00101EF +:104B100020460BF03DF8040003D101E00120F5E749 +:104B2000FFDFA7795FEA090005D0012821D0B9F19C +:104B3000020F26D110E0B8F1000F22D1012F05D0CD +:104B4000022F05D0032F05D0FFDF2DE00C252BE031 +:104B5000012529E0022527E040460EF0EDFCB0B922 +:104B6000032F0ED11022414604F11D0019F0ADFEB5 +:104B70001AE0012F02D0022F03D104E0B8F1000F98 +:104B800012D00720B6E740460EF0D6FC08B1102040 +:104B9000B0E7102104F11D0019F016FF0621404670 +:104BA00008F0D3FFC4F81D002078252140F0020052 +:104BB00020703046FCF76AFC2078C10713D020F043 +:104BC0000100207002208DF8000004F11D00029009 +:104BD0008DF804506946C3300CF0B1FC022803D0B4 +:104BE00010B1FFDF00E02577002083E730B587B004 +:104BF0000D460446FCF718FCA0B1807F00F00300CE +:104C0000022812D05FF0000080F0010120460AF077 +:104C1000BFFF04000ED028460EF08EFC38B11020E5 +:104C200007B030BD43F20200FAE70120ECE720783C +:104C3000400701D40820F3E7294604F13D00202273 +:104C4000054619F042FE207840F010002070010760 +:104C50000FD520F00800207007208DF8000069466D +:104C600004F1E00001950CF06AFC022801D000B1CB +:104C7000FFDF0020D4E770B50D460646FCF7D4FBF5 +:104C800018B10178272921D102E043F2020070BD5A +:104C9000807F00F00300022808D0002080F001018E +:104CA00030460AF075FF040003D101E00120F5E76A +:104CB000FFDFA079022809D16078C00706D02A4614 +:104CC00021463046FEF7FFFC10B10FE0082070BD12 +:104CD000B4F860000E280BD204F162010223102206 +:104CE000081F0AF0DCFD012101704570002070BD35 +:104CF000112070BD70B5064614460D4608460EF0EC +:104D00001BFC18B920460EF03DFC08B1102070BD08 +:104D1000A6F57F40FF380ED03046FCF785FB38B152 +:104D2000417822464B08811C1846FCF7F0FC07E04E +:104D300043F2020070BD2046FDF7F1FA0028F9D1D8 +:104D40001021E01D0EF0D3F8E21D294604F11700F2 +:104D500000F087F9002070BD2DE9F04104468AB0CB +:104D600015468846002708460EF033FC18B9284639 +:104D70000EF02FFC18B110200AB0BDE8F0812046DB +:104D8000FCF752FB060003D0307827281BD102E045 +:104D900043F20200F0E7B07F00F00300022809D0E0 +:104DA0005FF0000080F0010120460AF0F1FE0400EF +:104DB00003D101E00120F5E7FFDF2078400702D5AD +:104DC0006078800701D40820D6E7B07F00F00300A8 +:104DD000022803D0A06F03D1A16F02E0606FFAE751 +:104DE000616F407800B19DB1487810B1B8F1000F03 +:104DF0000ED0ADB1EA1D06A8E16800F032F910222C +:104E000006A905F1170019F034FD18B1042707E0D1 +:104E10000720B1E71022E91D04F12D0019F055FD1E +:104E2000B8F1000F06D0102208F1070104F11D00AF +:104E300019F04BFD2078252140F00200207030460B +:104E4000FCF724FB2078C10715D020F0010020706A +:104E500002208DF8000004F11D0002901030039034 +:104E60008DF804706946B3300CF069FB022803D05A +:104E700010B1FFDF00E0277700207DE7F8B5154689 +:104E80000E460746FCF7D0FA040004D0207822280A +:104E900004D00820F8BD43F20200F8BDA07F00F066 +:104EA0000300022802D043F20400F8BD30460EF0A1 +:104EB00043FB18B928460EF03FFB08B11020F8BD9F +:104EC00000953288B31C21463846FEF71FFC112896 +:104ED00014D00028F3D1297C4A08E17F62F3000155 +:104EE000E1772A7C62F34101E177297C890884F823 +:104EF0002010A17F21F08001A177F8BDA17F0907D3 +:104F0000FBD4D6F80200C4F83600D6F80600C4F880 +:104F10003A003088A0861022294604F1240019F0B6 +:104F2000D4FC287C4108E07F61F38200E077297C93 +:104F300061F3C300E077287C800884F82100A07F1B +:104F400040F00800A0770020D3E770B50D46064674 +:104F50000BB1072070BDFCF767FA040007D020787A +:104F6000222802D3A07F400604D4082070BD43F25B +:104F7000020070BDA5B12946304609F033FE03F0AA +:104F80004FFB297C4A08E17F62F30001E1772A7C2C +:104F900062F34101E177297C890884F8201004E05C +:104FA000304609F042FE03F03BFBA17F21F04001B7 +:104FB000A17770BD70B50D46FCF736FA040005D038 +:104FC00028460EF0DFFA20B1102070BD43F2020037 +:104FD00070BD29462046FEF747FB002070BD04E067 +:104FE00010F8012B0AB100207047491E89B2F7D290 +:104FF0000120704770B51546064603F0DBFC04003F +:1050000000D1FFDF207820F00F00801C20F0F0009E +:105010002030207066802868A060BDE8704003F0F2 +:10502000CCBC10B5134C94F83000002808D104F122 +:105030002001A1F110000CF0C4FA012084F8300026 +:1050400010BD10B190F8B9202AB10A4890F8350087 +:1050500018B1002003E0B83001E0064834300860A1 +:10506000704708B50023009313460A460AF08BFFE9 +:1050700008BD0000E8010020F0B5007B059F1E463A +:1050800014460D46012800D0FFDF0C2030803A2066 +:105090003880002C08D0287A032806D0287B0128E5 +:1050A00000D0FFDF17206081F0BDA889FBE72DE964 +:1050B000F04786B0144691F80C900E9A0D46B9F15F +:1050C000010F0BD01021007B2E8A8846052807D0BF +:1050D000062833D0FFDF06B0BDE8F0870221F2E7F3 +:1050E000E8890C2100EB400001EB400018803320E0 +:1050F0001080002CEFD0E889608100271AE000962C +:10510000688808F1020301AA696900F085FF06EBCF +:105110000800801C07EB470186B204EB4102BDF892 +:10512000040090810DF1060140460E320CF0B2FAF7 +:105130007F1CBFB26089B842E1D8CCE73420108030 +:10514000E889B9F1010F11D0122148430E301880BF +:10515000002CC0D0E88960814846B9F1010F00D029 +:105160000220207300270DF1040A1FE00621ECE75E +:105170000096688808F1020301AA696900F04CFFF3 +:1051800006EB0800801C86B2B9F1010F12D007EBC4 +:10519000C70004EB4000BDF80410C18110220AF1E1 +:1051A0000201103019F091FB7F1CBFB26089B84238 +:1051B000DED890E707EB470104EB4102BDF804009D +:1051C000D0810AF10201404610320CF063FAEBE79D +:1051D0002DE9F0470E4688B090F80CC096F80C8088 +:1051E000378AF5890C20109902F10C044FF0000A5F +:1051F000BCF1030F08D0BCF1040F3ED0BCF1070F87 +:105200007DD0FFDF08B067E705EB850C00EB4C00B5 +:10521000188031200880002AF4D0A8F1060000F0A0 +:10522000FF09558125E0182101A819F0EFFB00972F +:105230007088434601AA716900F0EEFEBDF80400D3 +:105240002080BDF80600E080BDF808002081A21C87 +:105250000DF10A0148460CF01DFAB9F1000F00D01B +:1052600018B184F804A0A4F802A007EB080087B2E4 +:105270000A346D1EADB2D6D2C4E705EB850C00EB47 +:105280004C00188032200880002ABBD0A8F105000D +:1052900000F0FF09558137E000977088434601AA66 +:1052A000716900F0B9FE9DF80600BDF80410E180B8 +:1052B0002179420860F3000162F34101820862F340 +:1052C0008201C20862F3C301020962F304114209B8 +:1052D00062F34511820962F386112171C009607180 +:1052E000BDF80700208122460DF1090148460CF067 +:1052F000D1F918B184F802A0A4F800A000E007E0FA +:1053000007EB080087B20A346D1EADB2C4D279E74C +:10531000A8F1020084B205FB08F000F10E0CA3F81E +:1053200000C035230B80002AA6D0558194810097B8 +:1053300083B270880E32716900F06EFE62E72DE96B +:10534000F84F1E460A9D0C4681462AB1607A00F548 +:105350008070D080E089108199F80C000C274FF004 +:1053600000084FF00E0A0D2873D2DFE800F09E0708 +:105370000E1C28303846556A737373002146484620 +:105380000095FFF779FEBDE8F88F207B914608284D +:1053900002D0032800D0FFDF378030200AE000BFB2 +:1053A000A9F80A80EFE7207B9146042800D0FFDFB0 +:1053B000378031202880B9F1000FF1D1E3E7207B5D +:1053C0009146042800D0FFDF37803220F2E7207BAF +:1053D0009146022800D0FFDF37803320EAE7207BA8 +:1053E0001746022800D0FFDF3420A6F800A028804E +:1053F000002FC8D0A7F80A80C5E7207B17460428ED +:1054000000D0FFDF3520A6F800A02880002FBAD0FA +:105410004046A7F80A8012E0207B1746052802D0F4 +:10542000062800D0FFDF1020308036202880002F93 +:10543000A9D0E0897881A7F80E80B9F80E00B8816C +:10544000A1E7207B9146072800D0FFDF3780372077 +:10545000B0E72AE04FF0120018804FF03800170034 +:10546000288090D0E0897881A7F80E80A7F8108076 +:1054700099F80C000A2805D00B2809D00C280DD06B +:10548000FFDF80E7207B0A2800D0FFDF01200AE051 +:10549000207B0B2800D0FFDF042004E0207B0C28B9 +:1054A00000D0FFDF052038736DE7FFDF6BE770B5D5 +:1054B0000C460546FBF7B8FF20B10078222804D23D +:1054C000082070BD43F2020070BD052128460AF095 +:1054D0005FFB206008B1002070BD032070BD30B4B8 +:1054E0004880087820F00F00C01C20F0F0009030B9 +:1054F00001F8080B1DCA81E81D0030BC03F05DBA3D +:105500002DE9FF4784B0002782460297079890460E +:105510008946123006F086FA401D20F003060798EF +:1055200028B907A95046FFF7C2FF002853D1B9F1A7 +:10553000000F05D00798017B19BB052504681BE007 +:1055400098F80000092803D00D2812D0FFDF45E0AD +:10555000079903254868B0B3497B4288714391425B +:1055600038D98AB2B3B2011D0AF085F90446078022 +:1055700002E0079C042508340CB1208810B1032DEB +:1055800028D02BE007980121123006F07DFAADF803 +:105590000C00024602AB2946504604F02AF80700E8 +:1055A00001D1A01C029007983A461230C8F80400B6 +:1055B000A8F802A003A94046029B06F072FAC0B107 +:1055C000072814D200E005E0DFE800F0060811111A +:1055D0000F0A0C00132015E6002013E6112011E637 +:1055E00008200FE643F203000CE607200AE603203A +:1055F00008E6BDF80C002346CDE900702A46504667 +:10560000079900F019FD57B9032D08D10798B3B2D7 +:10561000417B406871438AB2011D0AF040F9B9F13B +:10562000000FD9D0079981F80C90D5E72DE9FE4FEE +:1056300091461A881C468A468046FAB102AB494612 +:1056400003F0D7FF050019D04046A61C27880AF0B2 +:10565000E3FB3246072629463B46009609F0F1FF58 +:1056600020882346CDE900504A465146404600F086 +:10567000E3FC002020800120BDE8FE8F0020FBE736 +:1056800010B586B01C46AAB104238DF800301388EB +:10569000ADF808305288ADF80A208A788DF80E20CF +:1056A0000988ADF80C1000236A462146FFF728FF51 +:1056B00006B010BD1020FBE770B50D4605210AF0BD +:1056C00067FA040000D1FFDF294604F11200BDE8AB +:1056D000704006F0C2B92DE9F8430D468046002619 +:1056E00003F068F904462878102878D2DFE800F043 +:1056F000773B34533131123131310831313131316D +:105700002879001FC0B2022801D0102810D114BB84 +:10571000FFDF35E004B9FFDF052140460AF038FA23 +:10572000007B032806D004280BD0072828D0FFDFF1 +:10573000072655E02879801FC0B2022820D050B13A +:10574000F6E72879401FC0B2022819D0102817D0D8 +:10575000EEE704B9FFDF13E004B9FFDF2879012881 +:105760000ED1172137E0052140460AF011FA070053 +:1057700000D1FFDF07F11201404606F04BF92CB1D2 +:105780002A4621464046FFF7AAFE29E0132140465B +:10579000FDF7FAF824E004B9FFDF052140460AF0DE +:1057A000F7F9060000D1FFDF694606F1120006F0A6 +:1057B0003BF9060000D0FFDFA988172901D2172284 +:1057C00000E00A46BDF80000824202D9014602E02C +:1057D00005E01729C5D3404600F03EFCD0E7FFDFC7 +:1057E0003046BDE8F883401D20F0030219B102FBEA +:1057F00001F0001D00E000201044704713B5009830 +:1058000050B100244FEA0D0009F0DFFF002C02D157 +:10581000F74A009911601CBD01240020F4E72DE92E +:10582000F0470C4615462421204619F0EFF805B93B +:10583000FFDFA87860732888DFF8B4A3401D20F04C +:105840000301AF788946DAF8000009F0DCFF0600B2 +:1058500000D1FFDF4FF000082660A6F8008077B186 +:1058600009FB07F1091D0AD0DAF8000009F0CBFFA7 +:10587000060000D1FFDF6660C6F8008001E0C4F8D2 +:105880000480298804F11200BDE8F04706F0B4B89E +:105890002DE9F047804601F112000D46814606F0E1 +:1058A000C1F8401DD24F20F003026E7B14462968D8 +:1058B000386809F0D3FF3EB104FB06F2121D03D095 +:1058C0006968386809F0CAFF05200AF009F904463A +:1058D00005200AF00DF9201A012802D1386809F0D4 +:1058E00087FF49464046BDE8F04706F09AB870B5D4 +:1058F000054605210AF04CF9040000D1FFDF04F150 +:1059000012012846BDE8704006F084B82DE9F04F3A +:1059100091B04FF0000BADF834B0ADF804B047884B +:105920000C4605469246052138460AF031F9060034 +:1059300000D1FFDF24B1A780A4F806B0A4F808B016 +:10594000297809220B20B2EB111F7DD12A7A04F1AC +:10595000100138274FF00C084FF001090391102A6D +:1059600073D2DFE802F072F2F1F07F08D2888D9FE7 +:105970003DDBF3EEB6B6307B022800D0FFDFA8890E +:1059800008EBC001ADF804103021ADF83410002C44 +:1059900025D06081B5F80E9000271DE004EBC70804 +:1059A000317C88F80E10F189A8F80C10CDF8009021 +:1059B0006888042304AA296900F02EFBBDF81010A2 +:1059C000A8F8101009F10400BDF812107F1C1FFA8E +:1059D00080F9A8F81210BFB26089B842DED80DE194 +:1059E000307B022800D0FFDFE98908EBC100ADF869 +:1059F00004003020ADF83400287B0A90001FC0B2AC +:105A00000F90002CEBD06181B5F81090002725E0B5 +:105A1000CDF800906888696903AA0A9B00F0FCFA37 +:105A20000A9804EBC70848441FFA80F908F10C02F1 +:105A300004A90F980BF02EFE18B188F80EB0A8F844 +:105A40000CB0BDF80C1001E0D4E0CFE0A8F81010C5 +:105A5000BDF80E107F1CA8F81210BFB26089B842C2 +:105A6000D6D8CBE00DA8009001AB2246294630469F +:105A7000FFF71DFBC2E0307B082805D0FFDF03E005 +:105A8000307B082800D0FFDFE8891030ADF8040033 +:105A90003620ADF83400002C3FD0A9896181F1890E +:105AA000A18127E0307B092800D0FFDFA88900F121 +:105AB0000C01ADF804103721ADF83410002C2CD0B7 +:105AC0006081E8890090AB89688804F10C0229693B +:105AD00056E0E8893921103080B2ADF80400ADF805 +:105AE0003410002C74D0A9896181287A0E280AD03C +:105AF00002212173E989E181288A0090EB89688875 +:105B00006969039A3CE00121F3E70DA8009001AB1D +:105B1000224629463046FFF75BFB6FE0307B0A28C0 +:105B200000D0FFDF1220ADF80400ADF834704CB3A4 +:105B3000A9896181A4F810B0A4F80EB084F80C9083 +:105B40005CE020E002E031E039E042E0307B0B280D +:105B500000D0FFDF288AADF834701230ADF80400B1 +:105B600084B104212173A9896181E989E181298AAC +:105B70002182688A00902B8A688804F11202696980 +:105B800000F04AFA3AE0307B0C2800D0FFDF122008 +:105B9000ADF80400ADF834703CB305212173A4F8CE +:105BA0000AB0A4F80EB0A4F810B027E00DA8009039 +:105BB00001AB224629463046FFF75EFA1EE00DA8EB +:105BC000009001AB224629463046FFF7B8FB15E0AE +:105BD00036E03B21ADF80400ADF8341084B3A4F8EE +:105BE0000690A4F808B084F80AB007E0FFDF05E0EB +:105BF00010000020297A012919D0FFDFBDF8040028 +:105C0000AAF800007CB1BDF834002080BDF8040083 +:105C10006080BDF83400392805D03B2803D03C28EB +:105C200001D086F80CB011B00020BDE8F08F3C2107 +:105C3000ADF80400ADF8341014B1697AA172DDE753 +:105C4000FFE7AAF80000EEE72DE9F84356880F4673 +:105C5000804615460521304609F09AFF040000D120 +:105C6000FFDF123400943B46414630466A6806F036 +:105C70004AF8B6E570B50D46052109F089FF040024 +:105C800000D1FFDF294604F11200BDE8704005F0A5 +:105C9000D6BE70B50D46052109F07AFF040000D18B +:105CA000FFDF294604F11200BDE8704005F0F4BEA4 +:105CB00070B50546052109F06BFF040000D1FFDF38 +:105CC00004F1080321462846BDE870400422ADE4F3 +:105CD00070B50546052109F05BFF040000D1FFDF28 +:105CE000214628462368BDE8704005229EE470B531 +:105CF0000646052109F04CFF040000D1FFDF04F146 +:105D0000120005F08FFE401D20F0030511E0011D7B +:105D100000880322431821463046FFF787FC0028FD +:105D20000BD0607BABB2684382B26068011D09F0A2 +:105D3000ECFD606841880029E9D170BD70B50E4660 +:105D4000054602F037FE040000D1FFDF012020727B +:105D500066726580207820F00F00C01C20F0F000F3 +:105D600030302070BDE8704002F027BE2DE9F043CE +:105D70008BB00D461446814606A9FFF798FB002814 +:105D800014D14FF6FF7601274FF420588CB1032031 +:105D90008DF800001020ADF8100007A8059007AAA4 +:105DA000204604A90BF095FC78B107200BB0BDE8A4 +:105DB000F0830820ADF808508DF80E708DF80000C3 +:105DC000ADF80A60ADF80C800CE00698A17801747B +:105DD0002188C1818DF80E70ADF80850ADF80C80A7 +:105DE000ADF80A606A4602214846069BFFF788FB29 +:105DF000DCE708B501228DF8022042F60202ADF878 +:105E000000200A4603236946FFF73AFC08BD08B59F +:105E100001228DF8022042F60302ADF800200A4666 +:105E200004236946FFF72CFC08BD00B587B079B1A3 +:105E300002228DF800200A88ADF808204988ADF8C4 +:105E40000A1000236A460521FFF75AFB07B000BD80 +:105E50001020FBE709B1072312E40720704770B553 +:105E600088B00D461446064606A9FFF720FB002819 +:105E70000ED17CB10620ADF808508DF80000ADF8C9 +:105E80000A40069B6A460821DC813046FFF738FB52 +:105E900008B070BD05208DF80000ADF80850F0E79F +:105EA00000B587B059B107238DF80030ADF8082050 +:105EB000039100236A460921FFF722FBC6E7102061 +:105EC000C4E770B588B00C460646002506A9FFF762 +:105ED000EEFA0028DCD106980121123005F0D4FD3D +:105EE0009CB12178062921D2DFE801F020050516B2 +:105EF0000318801E80B2C01EE28880B20AB1A36877 +:105F00001BB1824203D90C20C2E71020C0E704294C +:105F100004D0A08850B901E00620B9E7012913D0C8 +:105F2000022905D004291CD005292AD00720AFE773 +:105F300009208DF800006088ADF80800E088ADF811 +:105F40000A00A068039023E00A208DF80000608812 +:105F5000ADF80800E088ADF80A00A0680A250390B3 +:105F600016E00B208DF800006088ADF80800A088CE +:105F7000ADF80A00E088ADF80C00A0680B2504908D +:105F800006E00C208DF8000060788DF808000C25E4 +:105F90006A4629463046069BFFF7B2FA78E700B515 +:105FA00087B00D228DF80020ADF8081000236A4656 +:105FB0001946FFF7A5FA49E700B587B071B102228B +:105FC0008DF800200A88ADF808204988ADF80A103D +:105FD00000236A460621FFF793FA37E7102035E7DA +:105FE00070B586B0064601200D46ADF808108DF854 +:105FF0000000014600236A463046FFF781FA04009C +:1060000008D12946304601F0BDFA0021304601F0A2 +:10601000D7FA204606B070BDF8B51C4615460E46A8 +:10602000069F09F0E7FE2346FF1DBCB231462A4613 +:10603000009409F0D2FAF8BD30B41146DDE902420D +:106040003CB1032903D0002330BC04F05BB9012329 +:10605000FAE71A8030BC704770B50C460546FFF76A +:106060002BFB2146284601F09CFA2846BDE87040EB +:10607000012101F0A5BA000018B18178012938D1B9 +:1060800001E010207047018842F60112881A9142FF +:1060900031D018DC42F60102A1EB020091422AD075 +:1060A0000CDC41B3B1F5C05F25D06FF4C0500818C7 +:1060B00021D0A0F57060FF381BD11CE001281AD058 +:1060C00002280AD117E0B0F5807F14D008DC01283F +:1060D00011D002280FD003280DD0FF2809D10AE0E3 +:1060E000B0F5817F07D0A0F58070033803D0012878 +:1060F00001D0002070470F2070470A281ED007DC0F +:1061000018D2DFE800F0191B1F1F171F231D1F21C6 +:10611000102815D008DC0B2812D00C2810D00D2820 +:1061200016D00F2806D10DE011280BD084280BD0F3 +:1061300087280FD003207047002070470520704744 +:10614000072070470F2070470420704706207047D3 +:106150000C20704743F20200704738B50C4605002A +:1061600041D06946FEF7ACF9002819D19DF800101E +:10617000607861F3020060706946681CFEF7A0F960 +:1061800000280DD19DF80010607861F3C5006070A3 +:10619000A978C1F34101012903D0022905D00720C4 +:1061A00038BD217821F0200102E0217841F0200162 +:1061B0002170410704D0A978C90861F38610607086 +:1061C000607810F0380F07D0A978090961F3C7107B +:1061D000607010F0380F02D16078400603D5207847 +:1061E00040F040002070002038BD70B5044600200B +:1061F000088015466068FFF7B0FF002816D1208997 +:10620000A189884211D860688078C0070AD0B1F5AA +:10621000007F0AD840F20120B1FBF0F200FB12101F +:10622000288007E0B1F5FF7F01D90C2070BD01F295 +:1062300001212980002070BD10B50478137864F323 +:10624000000313700478640864F341031370047846 +:10625000A40864F3820313700478E40864F3C303AE +:1062600013700478240964F3041313700478640928 +:1062700064F3451313700078800960F3861313707C +:1062800031B10878C10701D1800701D5012000E0B4 +:10629000002060F3C713137010BD4278530702D07B +:1062A00002F0070306E012F0380F02D0C2F3C20377 +:1062B00000E001234A7863F302024A70407810F04C +:1062C000380F02D0C0F3C20005E0430702D000F04F +:1062D000070000E0012060F3C5024A7070472DE915 +:1062E000F04F95B00D00824612D01221284618F0CA +:1062F0006BFB4FF6FF7B05AA0121584607F065FAB4 +:106300000024264637464FF420586FF4205972E097 +:10631000102015B0BDE8F08F9DF81E0001280AD1AD +:10632000BDF81C1041450BD011EB09000AD0012823 +:106330000CD002280CD0042C0ED0052C0FD10DE06F +:10634000012400E00224BDF81A6008E0032406E0FE +:106350000424BDF81A7002E0052400E00624BDF80C +:106360001A10514547D12C74BEB34FF0000810AA43 +:106370004FF0070ACDE90282CDE900A80DF13C09F2 +:106380001023CDF8109042463146584607F0D0FA17 +:1063900008BBBDF83C002A46C0B210A90BF07AF940 +:1063A000C8B9AE81CFB1CDE900A80DF1080C0AAE95 +:1063B00040468CE84102132300223946584607F034 +:1063C000B7FA40B9BDF83C00F11CC01EC0B22A1D8E +:1063D0000BF060F910B103209BE70AE0BDF829003B +:1063E000E881062C05D19DF81E00A872BDF81C009E +:1063F000288100208DE705A807F0F3F900288BD04D +:10640000FFF77BFE85E72DE9F0471C46DDE90978BB +:10641000DDF8209015460E00824600D1FFDF0CB15A +:10642000208818B1D5B11120BDE8F087022D01D028 +:10643000012100E0002106F1140006F0B7F8A8F8E9 +:10644000000002463B462946504603F0D2F8C9F800 +:10645000000008B9A41C3C600020E5E71320E3E736 +:10646000F0B41446DDE904528DB1002314B1022CBE +:1064700009D101E0012306E00D7CEE0703D025F0F1 +:10648000010501230D742146F0BC03F03BBF1A80C7 +:10649000F0BC70472DE9FE4F91461A881C468A468B +:1064A0008046FAB102AB494603F0A3F8050019D0C3 +:1064B0004046A61C278809F0AFFC3246072629462D +:1064C0003B46009609F0BDF820882346CDE90050F0 +:1064D0004A4651464046FFF7C3FF00202080012076 +:1064E000BDE8FE8F0020FBE72DE9F04786B091461E +:1064F000DDE90E460F46824603AA05A904A8109DB1 +:106500008DE807009846324621465046FFF77BFF4C +:10651000049909B1012200E000222A70002817D155 +:10652000F84A03AB1060059A009104F11400CDE91C +:1065300001204A463946504606F0EFFB90B1082844 +:106540000ED2DFE800F00407040D0D090B0B00204C +:1065500006B069E71120FBE70720F9E70820F7E715 +:106560000320F5E7BDF80C100498CDE9000143467F +:10657000324621465046FFF773FFE8E72DE9F04326 +:1065800089B00D46DDE9108781461C461646142168 +:1065900003A818F03BFA012002218DF810108DF8A5 +:1065A0000C008DF81170ADF8146064B1A278D207B8 +:1065B00009D08DF81600E088ADF81A00A088ADF873 +:1065C0001800A068079008A80095CDE90110424680 +:1065D00003A948466B68FFF787FF09B0BDE8F08361 +:1065E000F0B58BB00024064606940794072708945C +:1065F00005A80994019400970294CDE903400D4643 +:1066000010232246304607F093F978B90AA806A964 +:10661000019400970294CDE90310BDF814300022D4 +:106620002946304606F05AFF002801D0FFF765FDE5 +:106630000BB0F0BD06F0FABD2DE9FC410C468046DA +:10664000002602F0B7F9054620780D287ED2DFE853 +:1066500000F0BC0713B325BD49496383AF959B0088 +:10666000A848006820B1417841F010014170ADE0C8 +:10667000404602F0CFF9A9E00421404609F088FA2B +:10668000070000D1FFDF07F11401404605F022FFAB +:10669000A5BB13214046FCF777F997E0042140465B +:1066A00009F076FA070000D1FFDFE088ADF80000BE +:1066B0000020B8819DF80000010704D5C00602D56E +:1066C000A088B88105E09DF8010040067ED5A0882D +:1066D000F88105B9FFDF22462946404601F066FCF5 +:1066E000022673E0E188ADF800109DF8011009065C +:1066F0000FD5072803D006280AD00AE024E0042199 +:10670000404609F045FA060000D1FFDFA088F0817D +:106710000226CDB9FFDF17E00421404609F038FA20 +:10672000070000D1FFDF07F1140006F0B6FD90F07E +:10673000010F02D1E079000648D5387C022640F0EE +:106740000200387405B9FFDF224600E03DE029462B +:10675000404601F02BFC39E00421404609F018FACC +:10676000017C002D01F00206C1F340016171017C42 +:1067700021F002010174E7D1FFDFE5E702260121E4 +:10678000404602F079F921E00421404609F000FA80 +:106790000546606800902089ADF804000122694632 +:1067A000404602F08AF9287C20F0020028740DE0AF +:1067B000002DC9D1FFDFC7E7022600214046FFF7C1 +:1067C00068FA002DC0D1FFDFBEE7FFDF3046BDE82D +:1067D000FC813EB50C0009D001466B4601AA0020A1 +:1067E00007F028F920B1FFF788FC3EBD10203EBD20 +:1067F00000202080A0709DF8050002A900F007008D +:10680000FDF77AFE50B99DF8080020709DF805004C +:1068100002A9C0F3C200FDF76FFE08B103203EBD20 +:106820009DF8080060709DF80500C109A07861F32B +:106830000410A0709DF80510890961F3C300A070D1 +:106840009DF80410890601D5022100E0012161F3C1 +:1068500042009DF8001061F30000A07000203EBDD2 +:1068600070B5144606460D4651EA040005D075B1D0 +:1068700008460CF0A5FE78B901E0072070BD294656 +:10688000304607F038F910B1BDE8704035E454B136 +:1068900020460CF095FE08B1102070BD2146304610 +:1068A000BDE8704095E7002070BD2DE9FC5F0C4607 +:1068B00090460546002701780822007A3E46B2EB52 +:1068C000111F7DD104F10A0100910A31821E4FF09F +:1068D000020A04F1080B0191092A72D2DFE802F0E2 +:1068E000EDE005F528287BAACE006888042109F090 +:1068F0004FF9060000D1FFDFB08928B152270726E3 +:10690000C3E000004C02002051271026002C7DD04F +:106910006888A0800120A071A88900220099FFF753 +:106920009FFF002873D1A8892081288AE081D1E0C7 +:10693000B5F81290072824D1E87B000621D551270D +:1069400009F1140086B2002CE1D0A8890022009938 +:10695000FFF786FF00285AD16888A08084F806A037 +:10696000A88920810120A073288A2082A4F812908F +:10697000A88A009068884B46A969019A01F0F3FA49 +:10698000A8E0502709F1120086B2002C3ED0A88959 +:1069900000225946FFF764FF002838D16888A0809C +:1069A000A889E080287A072813D002202073288A3B +:1069B000E081E87BC0096073A4F81090A88A01E028 +:1069C00085E082E0009068884B4604F11202A969D4 +:1069D000D4E70120EAE7B5F81290512709F1140035 +:1069E00086B2002C66D06888042109F0D1F883466D +:1069F0006888A080A88900220099FFF731FF00284D +:106A00006ED184F806A0A889208101E052E067E0F9 +:106A10000420A073288A2082A4F81290A88A0090EB +:106A200068884B46A969019A01F09DFAA989ABF8DB +:106A30000E104FE06888FAF7F7FC074668880421D3 +:106A400009F0A6F8064607B9FFDF06B9FFDF687B45 +:106A5000C00702D05127142601E0502712264CB35C +:106A60006888A080502F06D084F806A0287B59465D +:106A700001F089FA2EE0287BA11DF9E7FE49A889DB +:106A80004989814205D1542706269CB16888A08097 +:106A900020E053270BE06888A080A889E08019E0F7 +:106AA0006888042109F074F800B9FFDF552708262B +:106AB000002CF0D1A8F8006011E056270726002C22 +:106AC000F8D06888A080002013E0FFDF02E00128F2 +:106AD00008D0FFDFA8F800600CB127806680002096 +:106AE000BDE8FC9F57270726002CE3D06888A080CC +:106AF000687AA071EEE7401D20F0030009B1414320 +:106B0000091D01EB4000704713B5DB4A00201071EE +:106B1000009848B10024684608F057FE002C02D1C6 +:106B2000D64A009911601CBD01240020F4E770B51D +:106B30000D46064686B014465C21284617F066FFCF +:106B400004B9FFDFA0786874A2782188284601F094 +:106B500044FA0020A881E881228805F1140130461A +:106B600005F09DFC6A460121304606F02EFE19E034 +:106B70009DF80300000715D5BDF806103046FFF755 +:106B80002FFD9DF80300BDF8061040F010008DF8B1 +:106B90000300BDF80300ADF81400FF233046059A4A +:106BA00006F074FF684606F01CFE0028E0D006B030 +:106BB00070BD10B50C4601F1140005F0A7FC0146AC +:106BC000627C2046BDE8104001F03CBA70B5054635 +:106BD000042108F0DDFF040000D1FFDF04F11401FF +:106BE0000C46284605F076FC21462846BDE8704054 +:106BF00005F077BC70B58AB00C460646FAF714FC6F +:106C0000050014D02878222827D30CB1A08890B191 +:106C100001208DF80C0003208DF8100000208DF865 +:106C2000110054B1A088ADF81800206807E043F2C5 +:106C300002000AB070BD0920FBE7ADF8180005900E +:106C40000421304608F0A4FF040000D1FFDF04F166 +:106C5000140005F072FC000701D40820E9E701F0F8 +:106C6000A9FE60B108A802210094CDE9011095F8B1 +:106C7000232003A930466368FFF736FCD9E71120CB +:106C8000D7E72DE9F04FB2F802A0834689B0154648 +:106C900089465046FAF7C8FB07460421504608F0DB +:106CA00077FF0026044605964FF002080696ADF8D9 +:106CB0001C6007B9FFDF04B9FFDF4146504603F00F +:106CC00088FE60B907AA06A905A88DE80700424614 +:106CD000214650466368FFF796FB00B1FFDF664828 +:106CE00007AB0660DDE9051204F11400CDF8009051 +:106CF000CDE90320CDE9013197F8232059465046CC +:106D00006B6805F063FC06000AD0022E04D0032E47 +:106D100014D0042E00D0FFDF09B03046BDE8F08F5C +:106D2000BDF81C000028F7D00599CDE900104246B7 +:106D3000214650466368FFF793FBEDE7687840F023 +:106D400008006870E8E72DE9F04F9BB004464FF06B +:106D500000084948ADF85480ADF83080ADF8508057 +:106D6000A0F80880ADF81480ADF81880ADF8208048 +:106D7000ADF81C80007916460D464746012808D01C +:106D8000022806D0032804D0042802D008201BB013 +:106D9000C4E720460CF0D0FBD0BB28460CF0CCFB5F +:106DA000B0BB60680CF015FC90BB606848B16089AE +:106DB0002189884202D8B1F5007F01D90C20E6E78D +:106DC00080460BAA06A92846FFF70FFA0028DED155 +:106DD00068688078C0F34100022808D19DF8190046 +:106DE00010F0380F03D028690CF0EAFB80B905A930 +:106DF0002069FFF7B2F90028C9D1206950B1607845 +:106E000080079DF8150000F0380002D5C0B301E0FE +:106E100011E0A8BB9DF8140080060ED59DF8150062 +:106E200010F0380F03D060680CF0CAFB18B9606826 +:106E30000CF0CFFB08B11020A9E707A96069FFF7A4 +:106E40008CF90028A3D1606940B19DF81D0000F0C5 +:106E5000070101293FD110F0380F3CD008A9A069E3 +:106E6000FFF77BF9002892D19DF81C00800632D4F0 +:106E70009DF82000800604E04C0200201400002051 +:106E800029E028D4A06940B19DF8210000F0070155 +:106E9000012920D110F0380F1DD0E06818B100781A +:106EA000C8B11C2817D20EAA611C2046FFF7C4F9EE +:106EB0000120B94660F30F27BA4607468DF84E0009 +:106EC00042F60300ADF84C000DF13B0217A928680B +:106ED0000AF0FFFB08B1072059E79DF85C0016A9EE +:106EE000CDF80090C01CCDE9019100F0FF0B00230C +:106EF0000BF20122514613A806F0AAFBF0BBBDF825 +:106F000058000990FE482A8929690092CDE90110AC +:106F10006B89BDF82C202868069906F099FB0100C2 +:106F20007ED120784FF0020AC10601D480062BD50D +:106F3000ADF80C90606950B907A906A8FFF7ADF944 +:106F40009DF81D0020F00700401C8DF81D009DF8E5 +:106F50001C008DF84E7040F0C8008DF81C0042F601 +:106F60000210ADF84C000CA903AACDF800A0CDE9A1 +:106F70000121002340F2032213A800E01EE007993C +:106F800006F066FB01004BD1DD484D4608385B46F4 +:106F90000089ADF839000EA8CDE90290CDF8049033 +:106FA000CDF810904FF007090022CDF80090BDF801 +:106FB00058104FF6FF7006F091FA10B1FFF79DF8E8 +:106FC000E5E69DF83800000625D52946012060F346 +:106FD0000F218DF84E704FF42450ADF84C00ADF8F1 +:106FE000105062789DF81000002362F300008DF8C5 +:106FF00010006278CDF800A0520862F341008DF8CD +:10700000100004AACDE9012540F2032213A806F0DE +:107010001FFB010004D1606888B32069A8B900E0B3 +:1070200086E005A906A8FFF738F96078800706D43E +:107030009DF8150020F038008DF8150005E09DF84A +:10704000140040F040008DF814008DF84E7042F6A8 +:107050000110ADF84C00208940F20121B0FBF1F2A3 +:1070600001FB1202606814ABCDF80080CDE901038A +:10707000002313A8059906F0EBFA010058D12078F7 +:10708000C00729D0ADF80C50A06950B908A906A8CE +:10709000FFF703F99DF8210020F00700401C8DF850 +:1070A00021009DF820008DF84E7040F040008DF8D2 +:1070B000200042F60310ADF84C0015A903AACDF844 +:1070C00000A0CDE90121002340F2032213A8089972 +:1070D00006F0BEFA01002BD1E06868B32946012012 +:1070E00060F30F218DF84E7042F60410ADF84C009D +:1070F000E068002302788DF8602040788DF8610008 +:10710000E06818AA4088ADF86200E06800798DF860 +:107110006400E068C088ADF86500CDF80090CDE966 +:1071200001254FF4027213A806F092FA010003D071 +:10713000099800F0B3FF2AE671480321083801716D +:1071400056B100893080BDF850007080BDF8300025 +:10715000B080BDF85400F080002018E670B501251D +:107160008AB016460B46012802D0022816D104E048 +:107170008DF80E504FF4205003E08DF80E5042F67B +:107180000100ADF80C005BB10024601C60F30F241B +:1071900004AA08A918460AF09CFA18B1072048E585 +:1071A000102046E504A99DF820205548CDE900218E +:1071B000801E02900023214603A802F2012206F05D +:1071C00047FA10B1FEF799FF33E54D4808380EB184 +:1071D000C1883180057100202BE5F0B593B00746DA +:1071E00001268DF83E6041F60100ADF83C0012AA80 +:1071F0000FA93046FFF7B2FF002848D1404C0025C8 +:10720000083CE7B31C2102A817F000FC9DF8080019 +:107210008DF83E6040F020008DF8080042F6052011 +:10722000ADF83C000E959DF83A00119520F006004F +:10723000801C8DF83A009DF838006A4620F0FF0067 +:107240008DF838009DF8390009A920F0FF008DF86D +:1072500039000420ADF82C00ADF830000EA80A90DB +:1072600011A80D900FA80990ADF82E5002A8FFF7B5 +:107270006AFD00280BD1BDF80000608100E008E045 +:10728000BDF80400A081401CE0812571002013B0EE +:10729000F0BD6581A581BDF84800F4E72DE9F74F01 +:1072A0001749A0B00024083917940A79A146012A89 +:1072B00004D0022A02D0082023B02FE5CA888242D7 +:1072C00001D00620F8E721988A46824201D10720A2 +:1072D000F2E701202146ADF848004FF6FF7860F351 +:1072E0000F21ADF84A808DF86E0042F6020B069130 +:1072F0008DF87240ADF86CB0ADF870401CA901E09B +:10730000540200201391ADF8508012A806F08DFAB7 +:1073100000252E462F460DAB072212A9404606F047 +:1073200087FA78B10A285DD195B38EB3ADF8645071 +:10733000ADF866609DF85E008DF8144019AC012828 +:1073400064D06BE09DF83A001FB3012859D1BDF815 +:10735000381059451FD118A809A901940294CDE904 +:10736000031007200090BDF836101023002240467D +:1073700006F0DEFAB0BBBDF86000042801D0062894 +:107380004AD1BDF82410219881423AD10F2093E7C9 +:107390003AE0012835D1BDF83800B0F5205F03D0C0 +:1073A00042F6010188422CD1BAF80600BDF8361029 +:1073B000884201D1012700E0002705B19EB1219844 +:1073C00081421ED118A809AA01940294CDE9032094 +:1073D000072000900D4610230022404606F0A8FA30 +:1073E00000B902E02DE04E460BE0BDF86000022837 +:1073F00001D0102810D1C0B217AA09A90AF04AF981 +:1074000050B9BDF8369086E7052055E705A917A8BD +:10741000221D0AF05EF908B103204DE79DF8140023 +:107420000023001DC2B28DF8142022980092CDE9ED +:1074300001401BA8069906F00BF910B902228AF840 +:107440000420FEF75AFE37E710B50B46401E88B001 +:1074500084B205AA00211846FEF7EEFE00200DF1C9 +:10746000080C06AA05A901908CE8070007200090E7 +:107470000123002221464FF6FF7006F02FF8044644 +:10748000BDF81800012800D0FFDF2046FEF735FECA +:1074900008B010BDF0B5FF4F044687B038790E46EE +:1074A000032804D0042802D0082007B0F0BD04AAA5 +:1074B00003A92046FEF799FE0500F6D160688078A2 +:1074C000C0F3410002280AD19DF80D0010F0380FDA +:1074D00005D020690CF074F808B11020E5E7208988 +:1074E00005AA21698DE807006389BDF8102020688E +:1074F000039906F0ADF810B1FEF7FFFDD5E716B120 +:10750000BDF814003080042038712846CDE7F8B566 +:107510000C0006460BD001464FF6FF7500236A4665 +:10752000284606F087FA20B1FEF7E7FDF8BD1020E7 +:10753000F8BD69462046FEF710FE0028F8D1A07875 +:10754000314600F001032846009A06F09FFAEBE767 +:1075500030B587B0144600220DF1080C05AD01923C +:107560008CE82C00072200920A46014623884FF639 +:10757000FF7005F0B3FFBDF814102180FEF7BDFDCC +:1075800007B030BD70B50D46042108F001FB0400C2 +:1075900000D1FFDF294604F11400BDE8704004F07B +:1075A000C5BF70B50D46042108F0F2FA040000D101 +:1075B000FFDF294604F11400BDE8704004F0D9BF94 +:1075C00070B50D46042108F0E3FA040000D1FFDF96 +:1075D000294604F11400BDE8704004F0F1BF70B515 +:1075E0000546042108F0D4FA040000D1FFDF21464B +:1075F00028462368BDE870400122FEF74BBF70B5F6 +:107600000646042108F0C4FA040000D1FFDF04F1AB +:10761000140004F07BFF401D20F0030511E0011D64 +:1076200000880022431821463046FEF733FF002829 +:107630000BD0607CABB2684382B2A068011D08F039 +:1076400064F9A06841880029E9D170BD70B505468C +:10765000042108F09DFA040000D1FFDF21462846EE +:107660006368BDE870400222FEF714BF70B50E4695 +:10767000054601F09FF9040000D1FFDF01202072D0 +:1076800066726580207820F00F00001D20F0F00069 +:1076900040302070BDE8704001F08FB910B504464D +:1076A000012900D0FFDF2046BDE810400121FEF790 +:1076B000F0BA2DE9F04F97B04FF0000A0C00834666 +:1076C000ADF814A0D04619D0E06830B1A068A8B1D8 +:1076D0000188ADF81410A0F800A05846F9F7A4FEF0 +:1076E000070043F2020961D0387822285CD30421D4 +:1076F000584608F04DFA050005D103E0102017B0F8 +:10770000BDE8F08FFFDF05F1140004F0FFFE401D1F +:1077100020F00306A078012803D0022801D007201A +:10772000EDE7218807AA584606F04FF830BB07A8B6 +:1077300006F057F810BB07A806F053F848B99DF8B3 +:107740002600012805D1BDF82400A0F524510239F6 +:1077500002D04FF45050D2E7E068B0B1CDE902A0BA +:107760000720009005AACDF804A00492A2882188E1 +:10777000BDF81430584605F0B1FE10B1FEF7BDFC5F +:10778000BDE7A168BDF8140008809DF81F00C00681 +:1077900002D543F20140B2E70B9838B1A1780078E6 +:1077A000012905D080071AD40820A8E74846A6E793 +:1077B000C007F9D002208DF83C00A8684FF00009FE +:1077C000A0B1697C4288714391420FD98AB2B3B2A9 +:1077D000011D08F050F88046A0F800A006E0032044 +:1077E0008DF83C00D5F800804FF001099DF820008D +:1077F00010F0380F00D1FFDF9DF820002649C0F3BC +:10780000C200084497F8231010F8010C884201D9EF +:107810000F2074E72088ADF8400014A90095CDE949 +:107820000191434607220FA95846FEF75DFE002846 +:1078300091D19DF8500050B9A078012807D1687CFB +:10784000B3B2704382B2A868011D08F028F8002086 +:1078500055E770B5064615460C460846FEF70CFC83 +:10786000002805D12A4621463046BDE8704075E41F +:1078700070BD13E570B51E4614460D000ED06CB1F8 +:10788000616859B160B10349C988814208D00720B5 +:1078900070BD00004C02002072ED01001020F7E7DF +:1078A0002068FEF7E9FB0028F2D13246214628463F +:1078B000BDE87040FFF747BA70B515460C0006D01A +:1078C00038B1FE490989814203D00720E0E7102042 +:1078D000DEE72068FEF7D0FB0028D9D129462046F4 +:1078E000BDE87040D6E570B5064686B00D46144634 +:1078F00010460BF047FED0BB60680BF06AFEB0BBD1 +:10790000A6F57F40FF3803D03046F9F78DFD80B1F2 +:1079100028466946FEF7E3FC00280CD19DF81010BC +:107920000F2008293CD2DFE801F008060606060A07 +:107930000A0843F2020006B0AAE70320FBE79DF81D +:107940000210012908D1BDF80010B1F5C05FF2D0D6 +:107950006FF4C052D142EED09DF8061001290DD12E +:10796000BDF80410A1F52851062907D200E028E04F +:10797000DFE801F0030304030303DCE79DF80A10CA +:1079800001290ED1BDF80810B1F5245FD3D0A1F5BF +:1079900024510239CFD00129CDD0022901D1CAE723 +:1079A000FFDF606878B9002305AA2946304606F053 +:1079B00041F810B1FEF7A1FBBDE79DF81400800669 +:1079C00001D41020B7E76188224628466368FFF794 +:1079D000BFFDB0E72DE9F043814687B088461446E5 +:1079E00010460BF0CFFD18B1102007B0BDE8F083B2 +:1079F000002306AA4146484606F01CF818B100BF0D +:107A0000FEF77BFBF1E79DF81800C00602D543F2B4 +:107A10000140EAE70025072705A801950097029590 +:107A2000CDE9035062884FF6FF734146484605F0A2 +:107A30007FFF060013D160680BF0A4FD60B9606899 +:107A40000195CDE90250009704952388628841464C +:107A5000484605F06DFF0646BDF81400208030460C +:107A6000CEE739B1954B0A889B899A4202D843F2F6 +:107A7000030070471DE610B586B0904C0423ADF8A6 +:107A80001430638943B1A4898C4201D2914205D953 +:107A900043F2030006B010BD0620FBE7ADF810105E +:107AA000002100910191ADF8003002218DF8021003 +:107AB00005A9029104A90391ADF812206946FFF7C8 +:107AC000F8FDE7E72DE9FC4781460E4608460BF036 +:107AD00033FD88BB4846F9F7A7FC5FEA00080AD0E7 +:107AE00098F80000222829D30421484608F050F8CD +:107AF000070005D103E043F20200BDE8FC87FFDF89 +:107B000007F1140004F019FD05463078012803D070 +:107B1000022804D00720F0E7A8070FD502E015F0EF +:107B20001C0F0BD0B079341DC00709D0E08838B1E4 +:107B3000A0680BF001FD18B11020DEE70820DCE79B +:107B400032782088002628B3A0F201130721112BD8 +:107B500018D20CD2DFE803F00B090D0B1D0B121D20 +:107B6000100B0B1D1D1D1D0B1D00022A11D10846F7 +:107B7000C3E7012AFBD00CE02A0700E0EA06002A4E +:107B8000F5DA06E0A0F5C0721F2A02D97D3A022A72 +:107B9000EDD8C6B200F00EFF50B198F82300CDE941 +:107BA0000006FA89234639464846FEF7E7FCA4E773 +:107BB0001120A2E72DE9F04F8BB01F4615460C4669 +:107BC00083460026F9F730FC28B10078222805D238 +:107BD00008200BB094E543F20200FAE7B80801D0A0 +:107BE0000720F6E7032F00D100274FF6FF79CCB12D +:107BF000022D73D320460BF0ECFC30B904EB0508E2 +:107C0000A8F101000BF0E5FC08B11020E1E7AD1E82 +:107C1000AAB22146484605F0C2FF38F8021C884245 +:107C20005CD1ADB22549B80702D58889401C00E077 +:107C300001201FFA80F8F80701D08F8900E04F4635 +:107C400005AA4146584605F0C0FD4FF0070A4FF01F +:107C50000009ACB3204608E0408810283ED8361D05 +:107C6000304486B2AE4239D2A01902884245F3D3DD +:107C700054E000BF9DF8170002074FD584B304EB12 +:107C80000608361DB8F80230B6B2102B26D89A195D +:107C9000AA4223D8B8F8002091421FD1C00620D5AF +:107CA000CDE900A90DF1080C0AAAA11948468CE8F3 +:107CB0000700B8F800100022584603E04C020020EC +:107CC0002CE00BE005F00AFC10B1FEF716FA80E795 +:107CD000B8F80200BDF82810884202D00B2078E7DF +:107CE00004E0B8F80200304486B206E0C00604D5CD +:107CF0005846FEF775FC002888D19DF81700BDF89E +:107D00001A1020F010008DF81700BDF81700ADF81C +:107D10000000FF235846009A05F0B8FE05A805F0BC +:107D200060FD18B9BDF81A10B942A3D9042158460C +:107D300007F02EFF040000D1FFDFA2895AB1CDE980 +:107D400000A94D46002321465846FEF717FC00289F +:107D5000BDD1A5813DE700203BE72DE9FF4F8BB06A +:107D60001E4617000D464FF0000412D0B00802D096 +:107D700007200FB0C4E4032E00D100265DB10846F1 +:107D80000BF01EFC28B93888691E08440BF018FC5B +:107D900008B11020EDE7C74AB00701D5D18900E04E +:107DA0000121F0074FF6FF7802D0D089401E00E095 +:107DB000404686B206AA0B9805F007FD4FF0000971 +:107DC0004FF0070B0DF1140A39E000BF9DF81B00BE +:107DD000000734D5CDF80490CDF800B0CDF8089068 +:107DE000CDE9039A434600220B9805F0A1FD60BB44 +:107DF00005B3BDF814103A8821442819091D8A4298 +:107E000030D3BDF81E2020F8022BBDF8142020F836 +:107E1000022BCDE900B9CDE90290CDF810A0BDF854 +:107E20001E10BDF8143000220B9805F081FD08B13A +:107E300003209EE7BDF814002044001D84B206A86C +:107E400005F0CFFC20B10A2806D0FEF756F990E7DE +:107E5000BDF81E10B142B9D934B17DB13888A11C2A +:107E6000884203D20C2084E7052082E72246294677 +:107E7000404605F094FE014628190180A41C3C8070 +:107E8000002076E710B504460BF07CFB08B110200B +:107E900010BD8848C0892080002010BDF0B58BB08F +:107EA0000D460646142103A816F0B0FD01208DF8FA +:107EB0000C008DF8100000208DF81100ADF8145062 +:107EC0003046F9F7B1FA48B10078222812D30421DC +:107ED000304607F05DFE040005D103E043F20200E6 +:107EE0000BB0F0BDFFDF04F11400074604F025FBE2 +:107EF000800601D40820F3E7207C022140F0010035 +:107F0000207409A80094CDE90110072203A9304686 +:107F10006368FEF7E9FA20B1217C21F001012174A8 +:107F2000DEE729463046FDF7A5FE08A9384604F0ED +:107F3000F3FA00B1FFDFBDF82040172C01D2172063 +:107F400000E02046A84201D92C4602E0172C00D2BE +:107F5000172421463046FFF724FB21463046FDF723 +:107F6000ABFB0020BCE7F8B51C4615460E46069F45 +:107F700007F040FF2346FF1DBCB231462A4600945D +:107F800007F02BFBF8BD70B50C4605460E212046C8 +:107F900016F01AFD002020802DB1012D01D0FFDF49 +:107FA00076E4062000E00520A07171E410B5488059 +:107FB0000878134620F00F00001D20F0F0008030FC +:107FC0000C4608701422194604F1080016F0C2FC91 +:107FD00000F0F3FC3748046010BD2DE9F047DFF8EE +:107FE000D890491D064621F0030117460C46D9F8E2 +:107FF000000007F008FC050000D1FFDF4FF000088B +:108000003560A5F800802146D9F8000007F0FBFB99 +:10801000050000D1FFDF7560A5F800807FB104FB8B +:1080200007F1091D0BD0D9F8000007F0ECFB0400A4 +:1080300000D1FFDFB460C4F80080BDE8F087C6F867 +:108040000880FAE72DE9F0411746491D21F00302A7 +:10805000194D064601681446286807F0FFFB2246C2 +:108060007168286807F0FAFB3FB104FB07F2121DA4 +:1080700003D0B168286807F0F1FB042007F030FD59 +:108080000446042007F034FD201A012804D1286892 +:10809000BDE8F04107F0ACBBBDE8F08110B50C467F +:1080A00005F05FFB00B1FFDF2046BDE81040FEF7A2 +:1080B00024B800004C020020140000204FF0E02201 +:1080C0004FF400410020C2F880111D4908701D497D +:1080D00090020860704770B5194D04462878A04298 +:1080E00002D00CB100B1FFDF2878A0420DD01649B4 +:1080F000144A2C700020CCB1134E144B1436151FAB +:10810000012C03D0022C08D0FFDF70BD08600220D4 +:10811000086033604FF0407005E00860032008609D +:1081200033604FF400001060286070BD0860086084 +:108130004FF06070106070BD00B5FFDF00BD000043 +:108140001800002008F5014000F500405C02002006 +:1081500038B50C468288817B19B14189914200D99A +:108160000A462280C188121D90B26A4606F054FE6B +:10817000BDF80000032800D30320C1B2208800F01E +:1081800095FF38BD38B50C468288817B19B10189CD +:10819000914200D90A462280C188121D90B26A46D7 +:1081A00006F03AFEBDF80000022800D30220C1B25A +:1081B000208800F07BFF401CC0B238BD2DE9FF5F76 +:1081C0000C46FB4981462C22D1E90201CDE902018E +:1081D00009F1030020F00301C91C21F00301009103 +:1081E0006846114607F0F1FAF24E002C02D1F2492E +:1081F000009A8A60009901440091357E05F10105DD +:1082000004D1E8B209F0ECF900B1FFDF00984FF0BB +:10821000000B00EB0510C01C20F0030100915CB9BD +:10822000307A727A81F800B01044C2B2B08B80B25A +:1082300005F01FF900B1FFDF0098F16908440090D4 +:108240002146684600F0FCFE0098C01C20F00300A8 +:108250000090737AB27A317A04B1002007F0ABFB58 +:108260000099084400902146684600F02AFF002744 +:108270003D46B24696F801800CE0284600F0C3FE69 +:10828000064681788088FDF7AEFA71786D1C00FB98 +:108290000177EDB24545F0D10098C01C20F00300F5 +:1082A000009004B100203946FDF7A8FA0099002794 +:1082B000084400903D469AF801800CE0284600F002 +:1082C000A2FE0646C1788088FEF715FC71786D1C09 +:1082D00000FB0177EDB24545F0D10098C01C20F0BD +:1082E0000300009004B100203946FEF70DFC009910 +:1082F0004FF000080844009045469AF801700EE0DF +:10830000284600F080FE0646807B30B106F108006A +:1083100001F0A7FE727800FB02886D1CEDB2BD4231 +:10832000EED10098C01C20F00300009004B10020A2 +:10833000414601F09AFE00990844C01D20F0070252 +:108340000092ECBB9D49002003F055FA05F0F2FBCA +:1083500099484178C06805F085FD97481030C0788D +:108360008DF8040010B1012804D005E001208DF83B +:10837000040001E08DF804B001A805F0B5FEF9F79E +:1083800072FF8C4802AA00210C30FAF755FE00B1AA +:10839000FFDF9AF81900FEF720FF00B1FFDF8548E4 +:1083A0004FF4F671443016F031FB8248042144301A +:1083B00080F8E91180F8EA11062180F8EB1100E05D +:1083C00001E003210171009904B0A1EB0900BDE8AF +:1083D000F09F70B5774C06464434207804EB401586 +:1083E000E078083590B9A01990F8E80100280ED07F +:1083F000A0780F2800D3FFDF2021284616F006FBC7 +:10840000687866F3020068700120E070284670BD4D +:108410002DE9F04105460C460027007805219046DD +:108420003E46B1EB101F00D0FFDF287A50B1012883 +:108430000ED0FFDFA8F800600CB127806680002016 +:10844000BDE8F0810127092674B16888A08008E0A2 +:108450000227142644B16888A0802869E060A88AB1 +:108460002082287B2072E5E7A8F80060E7E710B5D6 +:10847000514C6068C11D21F00701814200D0FFDF2F +:108480004C480121002201704270017203234372A3 +:1084900081720273052282821F22C282417348A226 +:1084A00002610A22027641764FF4B061C1616168CF +:1084B000416010BD30B5404C1568636810339D4273 +:1084C00002D20420136030BD3A4B5D785A6802EB4B +:1084D0000512107051700320D08017209080012069 +:1084E000D0709070002090735878401C587060686D +:1084F00010306060002030BD70B506462D48002465 +:10850000457807E0204600F07EFD0178B14204D0B6 +:10851000641CE4B2AC42F5D1002070BDF7B507464B +:1085200008780C4610B3FFF7E7FF0546A7F12006D1 +:10853000202F06D0052E19D2DFE806F00F2B2B15C1 +:108540001A0000F06BFD0DB1697800E00021401ABF +:10855000A17880B20844FF2808D8A07830B1A0885C +:10856000022831D202E0608817282DD20720FEBDF4 +:10857000207AE0B161881729F8D3A1881729F5D3AB +:10858000A1790029F2D0E1790029EFD0402804D95F +:10859000ECE7242F18D1207A48B161884FF6FB70A0 +:1085A000814202D8A18881420ED90420FEBD0BE091 +:1085B00078ED0100680300201C000020000000206E +:1085C0006E5246357800000065B9207802AA012174 +:1085D000FFF770FF0028E9D12078FFF78DFF050035 +:1085E00000D1FFDF052E18D2DFE806F0030B0E08DE +:1085F0001100A0786870A088E8800FE06088A880EB +:108600000CE0A078A87009E0A078E87006E054F8C3 +:10861000020FA8606068E86000E0FFDF0020C5E7A7 +:108620001E2829D00EDC0C2822D008DC092825D2EF +:10863000DFE800F013241524241C1C181A0012284B +:108640001CD119E0302817D018DDA0F13A0003281A +:1086500014D2DFE800F00F1309000020704743F246 +:1086600002007047042070470D2070470F207047AC +:10867000082070471120704707207047032070477B +:1086800010B5007800F0010006F0BDFBBDE8104019 +:10869000C6E70EB5017801F001018DF800104178B0 +:1086A00001F001018DF801100178C1F340018DF84E +:1086B00002104178C1F340018DF803100178890858 +:1086C0008DF80410417889088DF8051081788DF8AF +:1086D0000610C1788DF8071000798DF808006846FB +:1086E00005F021FDFFF79CFF0EBD2DE9F84FDFF8E7 +:1086F000F883FE4C00261FE0012000F025FD01203C +:10870000FFF767FE05462C214746D8F8080007F01A +:108710007AF8686000B9FFDF686805F0D6FBA8B199 +:108720002846F9F7E3F8284600F014FD20B92C227A +:108730006968B86807F092F894F9E9010428DBDA6F +:10874000022007F0CDF907460025A6E02C22696833 +:10875000D8F8080007F082F8F2E7B8F802104046AF +:10876000491C89B2A8F80210B94201D30021418006 +:108770000221B8F8020007F00BFA002865D0B8F81B +:108780000200694606F0B2FAFFF74AFF00B1FFDFC8 +:108790009DF8000078B1B8F8020007F03DFB5FEAF1 +:1087A000000900D1FFDF484606F0ABFD18B1B8F86C +:1087B000020002F0FDF8B8F8020007F01BFB5FEAC8 +:1087C000000900D1FFDF484606F093FDE8BB032116 +:1087D000B8F8020007F0DCF95FEA000B48D1FFDFD0 +:1087E00046E000BFDBF8100010B10078FF2849D048 +:1087F000022000F0A9FC0220FFF7EBFD824648466C +:1088000006F083FECAF8040000B9FFDFDAF80400BE +:1088100006F04BFF002100900170B8F8021050469E +:10882000AAF8021001F0CAFD484606F040FF00B960 +:10883000FFDF504600F08EFC18B99AF801000007DF +:1088400004D50099CBF8101012E024E0DBF81000FA +:1088500038B10178491C11F0FF01017008D1FFDF28 +:1088600006E000221146484600F0CBFB00B9FFDFCE +:1088700094F9EA01022805DBB8F8020001F063FD73 +:108880000028AFD194F9E901042804DB484606F03A +:1088900072FF00B101266D1CEDB2BD4204D294F905 +:1088A000EA010228BFF659AF002E7FF423AFBDE8DE +:1088B000F84F032000F048BC10B58B4CE06008680E +:1088C0002061AFF2D91002F0FEFF607010BD874842 +:1088D0000021443801708448017085494160704727 +:1088E00070B505464FF080500C46D0F8A410491CD6 +:1088F00005D1D0F8A810C9430904090C0BD050F8D1 +:10890000A01F01F001012970416821608068A080EA +:10891000287830B970BD062120460AF0E8FA012017 +:108920002870607940F0C000607170BD70B54FF084 +:1089300080540D46D4F88010491C0BD1D4F8841013 +:10894000491C07D1D4F88810491C03D1D4F88C10E5 +:10895000491C0CD0D4F880100160D4F88410416018 +:10896000D4F888108160D4F88C10C16002E0102126 +:108970000AF0BDFAD4F89000401C0BD1D4F8940052 +:10898000401C07D1D4F89800401C03D1D4F89C00B7 +:10899000401C09D054F8900F286060686860A06897 +:1089A000A860E068E86070BD2846BDE8704010210E +:1089B0000AF09DBA4D4800790BE570B54B4CE07854 +:1089C00030B3207804EB4010407A00F007002044D8 +:1089D00090F9E801002800DCFFDF2078002504EB97 +:1089E0004010407A00F00700011991F8E801401E9C +:1089F00081F8E8012078401CC0B220700F2800D117 +:108A00002570A078401CA0700AF0ACF9E57070BD2C +:108A1000FFDF70BD3EB50546032107F0B9F80446F7 +:108A2000284607F0E7F9054604B9FFDF206918B1C9 +:108A30000078FF2800D1FFDF01AA6946284600F030 +:108A4000E0FA60B9FFDF0AE0002202A9284600F040 +:108A5000D8FA00B9FFDF9DF8080000B1FFDF9DF8EC +:108A60000000411E8DF80010EED220690199884265 +:108A700001D1002020613EBD70B50546A0F57F40C4 +:108A80000C46FF3800D1FFDF012C01D0FFDF70BDA5 +:108A9000FFF790FF040000D1FFDF207820F00F00E7 +:108AA000401D20F0F00050302070658000202072C2 +:108AB00001202073BDE870407FE72DE9F0411646A4 +:108AC0000D460746FFF776FF040000D1FFDF207850 +:108AD00020F00F00401D20F0F00050302070678023 +:108AE00001202072286805E01C000020AC03002053 +:108AF000281200202061A888A0822673BDE8F041DA +:108B00005BE77FB5FFF7F8FC040000D1FFDF02A9A7 +:108B10002046FFF71DFB054603A92046FFF732FB61 +:108B20008DF800508DF80100BDF80800001DADF86B +:108B30000200BDF80C00001DADF80400E088ADF89F +:108B40000600684606F049F9002800D0FFDF7FBD27 +:108B50002DE9F047DFF8F8930546002799F8000063 +:108B600010B10820BDE8F08728460AF00BFD08B1D7 +:108B70001020F7E7F74C207808B9FFF778FC607A07 +:108B8000217A0844C6B200F049FAB04207D2301A3E +:108B9000C1B22A460020FFF78DFC0700E2D1D9F8C8 +:108BA00004004E46C01C20F00300C9F8040000F089 +:108BB00044FB716800EB010801214046FFF7FEFA13 +:108BC000064629684044884202D8B6F5803F15D34E +:108BD00028600020FFF790FC05000DD005F1130080 +:108BE000D9F8041020F003004E46884200D0FFDF81 +:108BF0006078401E607075600420B3E70021404635 +:108C0000FFF7DCFA0446A64200D0FFDF04EB0801C0 +:108C1000C9F8041029604FF6FF71A9F8021001216C +:108C200089F8001038469DE72DE9F0410446C84810 +:108C300017460D46007810B10820BDE8F0810846BF +:108C40000AF07AFC08B11020F7E7C24E307808B974 +:108C5000FFF70DFC601E1E2807D8012C3FD1287895 +:108C6000FE283CD830760020E7E7A4F120001F283A +:108C700005D8E0B23A462946BDE8F0414EE4A4F1F9 +:108C800040004FF000081F2821D8402C02D0412C72 +:108C900025D117E0687829780C18A97881421ED868 +:108CA000FF2C08D808F080FE07460AF014F8381A9E +:108CB000801EA04201DA1220BFE728883081A87800 +:108CC000B07224E02846BDE8F04100F06BBAA4F190 +:108CD000A0001F2803D8A02C03D0A12C06D0072069 +:108CE000ABE7287800F00100707610E029680920D1 +:108CF000F829A2D38A07A0D1727B02F00302012ACD +:108D000004D1F28AD73293B28B4296D8F1614046B1 +:108D100093E72DE9F04781460E4608460AF032FCFB +:108D200048B948460AF04CFC28B909F1030020F084 +:108D30000301494501D0102014E786484FF0000A8E +:108D40004430817869B14178804600EB41140834A1 +:108D5000378832460021204600F00AFA050004D088 +:108D600027E0A6F800A00520FCE6B9F1000F24D00A +:108D70003088B84201D90C251FE0607800F0070563 +:108D8000284600F0E1F908EB0507324697F8E801BC +:108D90004946401C87F8E801204607F5F47700F0C3 +:108DA000E7F905463878401E3870032000F0CCF90A +:108DB0002DB10C2D01D0A6F800A02846D2E660788F +:108DC000634E00F00701012923D002290CD00329AA +:108DD00033D0FFDF98F801104046491CC9B288F82B +:108DE00001100F2934D035E0616821B1000702D4A9 +:108DF0006088FFF70FFE98F8EA014746012802D184 +:108E0000707802F07FFD97F9EA010428E2DBFFDFCA +:108E1000E0E7616819B12C22B06806F01FFD98F8F0 +:108E2000E9014746032802D1707802F06BFD97F9FB +:108E3000E9010428CEDBFFDFCCE7C00602D560885D +:108E4000FFF7E8FD98F9EB010628C3DBFFDFC1E778 +:108E500080F801A08178491E8170617801F00701D6 +:108E600001EB080090F8E811491C80F8E811A4E72C +:108E700070B50D4604460AF05FFB18B928460AF0A3 +:108E800081FB08B1102070BD29462046BDE8704026 +:108E900008F0DDBB70B5044615460E4608460AF0DC +:108EA0004BFB18B928460AF06DFB08B1102070BDC5 +:108EB000022C03D0102C01D0092070BD2A46314667 +:108EC000204608F0E7FB0028F7D0052070BD70B5FC +:108ED00014460D4606460AF02FFB38B928460AF01C +:108EE00051FB18B920460AF06BFB08B1102070BD89 +:108EF00022462946304608F0ECFB0028F7D0072030 +:108F000070BD3EB504460AF03DFB08B110203EBDE1 +:108F1000684605F097F8FFF783FB0028F7D19DF826 +:108F200006002070BDF808006080BDF80A00A0802F +:108F300000203EBD70B505460C4608460AF040FBD1 +:108F400020B95CB120680AF01DFB28B1102070BD6B +:108F50001C00002068030020A08828B12146284674 +:108F6000BDE87040FDF746BE0920F0E770B5044645 +:108F70000D4608460AF0E0FA30B9601E1E2814D8E3 +:108F800028460AF0D9FA08B11020E0E7022C01D9EE +:108F90000720DCE704B9FFDFDC4800EB840050F871 +:108FA000041C2846BDE870400847A4F120001F2893 +:108FB000EED829462046BDE87040F9F7C8B870B52C +:108FC00004460D4608460AF0DDFA30B9601E1E2838 +:108FD0000DD828460AF0B0FA08B11020B7E7012CE6 +:108FE00001D0022C01D10620B1E70720AFE7A4F1A0 +:108FF00020001F28F9D829462046BDE87040F9F71F +:1090000005B906F045B930B5C14D04466878A042AF +:1090100000D8FFDF686800EB041030BD70B5BC48B5 +:1090200000252C46467807E02046FFF7ECFF407805 +:10903000641C2844C5B2E4B2B442F5D1284686E7A0 +:109040002DE9F0410C46064600F02FF9074630683E +:10905000C01C20F0030232601CBBAD483B46092116 +:1090600020300AF043F9002408E0092C11D2DFE88F +:1090700004F005070509090B05050700A54804E0EC +:10908000A54802E0A54800E0A5480AF04FF90546CA +:1090900000E0FFDFA54200D0FFDF641CE4B2092C32 +:1090A000E3D3306800EB07103060C6E5021D514382 +:1090B000452900D245210844C01CB0FBF2F0C0B2E3 +:1090C00070472DE9FC5F064691484FF000088B463B +:1090D0004746444690F8019022E02046FFF793FF70 +:1090E000050000D1FFDF687869463844C7B22846DA +:1090F000FFF72EF8824601A92846FFF743F80346FA +:10910000BDF804005246001D81B2BDF80000001DEC +:1091100080B206F0BBFD6A78641C00FB0288E4B2F2 +:109120004C45DAD13068C01C20F003003060BBF140 +:10913000000F00D000204246394606F0B5FD3168E8 +:1091400008443060BDE8FC9F71494431087100203B +:10915000C87070476E494431CA782AB10A7801EB69 +:1091600042110831814201D0012070470020704730 +:109170002DE9F04106460078154600F00F04002066 +:109180001080601E0F46052800D3FFDF5F482A4687 +:10919000103000EB8400394650F8043C3046BDE8FE +:1091A000F041184738B50446407800F00300012824 +:1091B00003D002280BD0072038BD606858B10AF0F0 +:1091C00008FAD0B960680AF0FBF920B915E06068C8 +:1091D0000AF0B2F988B969462046FBF771F9002810 +:1091E000EAD1607800F00300022808D19DF8000061 +:1091F00028B160680AF0E4F908B1102038BD61892F +:10920000F8290DD8208988420AD8607800F0030236 +:109210003F48012A06D1D731C26989B28A4201D2B8 +:10922000092038BD94E80E0000F10C0585E80E0019 +:109230000AB900218182002038BD2DE9F05F4FF08E +:1092400000093348C8464F464E464D46CB464C462D +:1092500090F801A011E02046FFF7D5FE4178827812 +:1092600009F10109884412FB0177C27812FB0166FB +:10927000807B10FB0155641CE4B25445EBD10BEB31 +:10928000890000EBC80000EB870000EB860000EBD4 +:10929000C5011F48027A01EBC201427A807A01EBD4 +:1092A000C20101EBC000BDE8F09F2DE9F047DFF8F7 +:1092B00060900026344699F8080099F8092099F83A +:1092C00001700244D5B299F80A20104400F0FF085A +:1092D00008E02046FFF797FE817B407811FB00668F +:1092E000641CE4B2BC42F4D199F8080099F8091062 +:1092F000401C284428444044401C01B1012108443A +:109300008419FF2C00D9FFDFE0B22BE478ED0100D7 +:1093100068030020E11F000037A10000B1B9000080 +:10932000D31301002DE9F04107461446884608464C +:1093300001F020FD064608EB88001C22796802EB4C +:10934000C0000D18688C58B14146384601F01AFD2E +:10935000014678680078C200082305F120000CE07F +:10936000E88CA8B14146384601F013FD0146786803 +:1093700008234078C20005F1240006F0C6FA38B18F +:10938000062121726681D0E90010C4E9031009E0CA +:10939000287809280BD00520207266816868E06073 +:1093A000002028702046BDE8F04101F0D9BC07201C +:1093B00020726681F4E72DE9F04116460D46074616 +:1093C000406801EB85011C2202EBC10144182046D4 +:1093D00001F001FD40B10021708865F30F2160F3B9 +:1093E0001F4108200AF05CF8092020703246294607 +:1093F0003846BDE8F04195E72DE9F0410E460746B5 +:1094000000241C21F07816E004EB8403726801EB61 +:10941000C303D25C6AB1FFF7CDFA050000D1FFDFCC +:109420006F802A4621463046FFF7C5FF0120BDE880 +:10943000F081641CE4B2A042E6D80020F7E770B5E2 +:10944000064600241C21C0780AE000BF04EB840318 +:10945000726801EBC303D5182A782AB1641CE4B200 +:10946000A042F3D8402070BD2821284615F0ACFA60 +:10947000706880892881204670BD70B50346002041 +:109480001C25DC780DE000BF00EB80065A6805EB78 +:10949000C6063244167816B1128A8A4204D0401C9D +:1094A000C0B28442F0D8402070BDF0B50446002020 +:1094B0001C26E5780EE000BF00EB8007636806EB32 +:1094C000C7073B441F788F4202D15B78934204D098 +:1094D000401CC0B28542EFD84020F0BD0078032880 +:1094E00001D000207047012070470078022801D089 +:1094F00000207047012070470078072801D0002025 +:109500007047012070472DE9F041064688461078E3 +:10951000F1781546884200D3FFDF2C781C27641CA5 +:10952000F078E4B2A04201D8201AC4B204EB84015E +:10953000706807EBC1010844017821B141468847B2 +:1095400008B12C7073E72878A042E8D14020287039 +:109550006DE770B514460B880122A240134207D173 +:1095600013430B8001230A22011D06F098F90470B1 +:1095700070BD2DE9FF4F81B00878DDE90E7B9A467A +:1095800091460E4640072CD4019806F045FC040095 +:1095900000D1FFDF07F1040820461FFA88F105F02B +:1095A00084FD050000D1FFDF204629466A4605F00C +:1095B000CEFF0098A0F80370A0F805A0284606F09A +:1095C00074F8017869F306016BF3C7110170204646 +:1095D0001FFA88F105F0ACFD00B9FFDF019804F037 +:1095E000AEFB06EB0900017F491C017705B0BDE821 +:1095F000F08F2DE9F84F0E469A4691460746032113 +:1096000006F0C6FA0446008DDFF8B485002518B1CF +:1096100098F80000B0421ED1384606F0FDFB070066 +:1096200000D1FFDF09F10401384689B205F03DFDA4 +:10963000050010D0384629466A4605F088FF009894 +:1096400000210A460180817004F030FC0098C01DA2 +:10965000CAF8000021E098F80000B04216D104F1E9 +:10966000260734F8341F012000FA06F911EA090F21 +:1096700000D0FFDF2088012340EA090020800A2271 +:10968000391D384606F026F9067006E0324604F128 +:10969000340104F12600FFF75CFF0A2188F800106E +:1096A0002846BDE8F88FFEB514460D46064602ABC7 +:1096B0000C220621FFF79DFF002826D0029968782A +:1096C00012220A70801C487008224A80A8702088E4 +:1096D00088806088C880A0880881E088488100244C +:1096E0000C20CDE900040523062229463046FFF769 +:1096F00040FF214666F31F41F0230022012009F0BC +:1097000025FE6878801C68700120FEBDFEB51446F9 +:109710000D460622064602AB1146FFF76AFF0028F7 +:1097200012D0029B132000211870A87858700220D4 +:1097300058809C800620CDE9000102460523294679 +:109740003046FFF716FF0120FEBD2DE9FE430C4613 +:10975000804644E002AB0E2207214046FFF749FF56 +:10976000002841D060681C2267788678BF1C06EB11 +:10977000860102EBC101451802981421017047705F +:109780000A214180698A0181E98A4181A988818011 +:10979000A9898181304601F0EDFA0299052307225B +:1097A000C8806F700420287000250E20CDE90005C8 +:1097B00021464046FFF7DDFE294666F30F2168F398 +:1097C0001F41F0230022082009F0C0FD6078FD4908 +:1097D000801C607062682046921CFFF794FE6068EF +:1097E00080784028B6D10120BDE8FE83FEB50D4645 +:1097F000064638E002AB0E2207213046FFF7F9FE9D +:10980000002835D068681C23C17801EB810203EB86 +:10981000C2028418029815220270627842700A22ED +:109820004280A2894281A2888281084601F0A2FA80 +:10983000014602988180618AC180E18A0181A08805 +:10984000B8B10020207000210E20CDE900010523D1 +:10985000072229463046FFF78CFE6A68DA49284617 +:10986000D21CFFF750FE6868C0784028C2D10120A2 +:10987000FEBD0620E6E72DE9FE430C46814644E0A6 +:10988000204601F092FAD0B302AB082207214846E5 +:10989000FFF7AFFE0028A7D060681C226578067924 +:1098A000AD1C06EB860102EBC10147180298B7F820 +:1098B000108006210170457004214180304601F07E +:1098C00059FA0146029805230722C180A0F80480B6 +:1098D0007D70082038700025CDE9000521464846F6 +:1098E000FFF747FE294666F30F2169F31F41F02376 +:1098F0000022082009F02AFD6078801C60706268F0 +:10990000B2492046121DFFF7FEFD6068017940292B +:10991000B6D1012068E72DE9F34F83B00E4680E011 +:10992000304601F042FA002875D071681C2091F889 +:10993000068008EB880200EBC2000C184146304656 +:1099400001F027FA0146A078C30070684078C20091 +:1099500004F1240005F0F5FF07468088E18B401AEA +:1099600080B2002581B3AA46218B814200D80846E7 +:109970008146024602AB07210398FFF73AFE010039 +:1099800028D0BAF1000F03D0029AB88802251080BF +:109990008B46E28B3968A9EB05001FFA80FA0A446E +:1099A0000398009206F038FAED1D009A5946534686 +:1099B000009505F046FEE08B504480B2E083B98804 +:1099C000884209D1012508E0FFE7801C4FF0010A19 +:1099D00080B2C9E7002009E60025CDE90095238A79 +:1099E000072231460398FFF7C4FDE089401EE0815D +:1099F0008DB1A078401CA0707068F178427811FB9E +:109A000002F1CAB2816901230E3005F048FF80F8E7 +:109A100000800020E08372686D493046921DFFF798 +:109A200072FD7068817940297FF47AAF0120DDE50D +:109A300070B5064648680D4614468179402910D114 +:109A400004EB84011C2202EBC101084401F0E4F99B +:109A5000002806D06868294684713046BDE8704009 +:109A600059E770BDFEB50C460746002645E0204686 +:109A700001F09BF9D8B360681C22417901EB8101A8 +:109A800002EBC1014518688900B9FFDF02AB08226B +:109A900007213846FFF7ADFD002833D002996078E2 +:109AA00016220A70801C4870042048806068407943 +:109AB00001F060F901460298052307228180698937 +:109AC000C1800820CDE9000621463846FFF751FD48 +:109AD0006078801C6070A88969890844B0F5803F6F +:109AE00000D3FFDFA88969890844A8816E81626874 +:109AF00038492046521DFFF706FD6068417940292C +:109B0000B5D10120FEBD30B5438C458BC3F3C704EE +:109B1000002345B1838B641EED1AC38A6D1E1D445C +:109B200095FBF3F3E4B22CB1008918B1A04200D840 +:109B3000204603444FF6FF70834200D30346138050 +:109B40000C7030BD2DE9FC41074616460D464868AD +:109B500002EB86011C2202EBC10144186A4601A9EE +:109B60002046FFF7D0FFA089618901448AB2BDF881 +:109B70000010914212D0081A00D500206081686858 +:109B8000407940280AD1204601F03CF9002805D050 +:109B90006868294646713846FFF764FFBDE8FC81D6 +:109BA0002DE9FE4F8946804615465088032105F071 +:109BB000EFFF8346B8F8020040280DD240200CE0A9 +:109BC00030000020DD940000EB940000F9940000C8 +:109BD00019AE000005AE0000403880B28246014652 +:109BE000584601F0E2F800287ED00AEB8A001C22D9 +:109BF000DBF8041002EBC0000C18204601F0EBF873 +:109C0000002877D1B8F80000E18A88423CD8A189C1 +:109C1000D1B348456ED100265146584601F0B2F8FE +:109C2000218C0F18608B48B9B9F1020F62D3B8F8D4 +:109C300004006083618A884226D80226A9EB0600C8 +:109C40001FFA80F9B888A28B801A002814DD4946D3 +:109C5000814500DA084683B26888696802913968EC +:109C60000A44CDE9003206F0C5F8DDE90121F61D10 +:109C7000009B009605F0B1FCA18B01EB090080B2BE +:109C8000A083618B884207D9688803B05246594641 +:109C9000BDE8F04F01F0DDB81FD14FF00900287288 +:109CA000B8F802006881D7E90001C5E90401608BBA +:109CB000A881284601F054F85146584601F062F850 +:109CC0000146DBF8040008230078C20004F12000FC +:109CD00005F01BFE0020A0836083A0890AF0FF022C +:109CE000401EA081688800E004E003B05946BDE84A +:109CF000F04F27E7BDE8FE8F2DE9F04106461546F7 +:109D00000F461C46184609F017FC18B9206809F0E0 +:109D100039FC08B1102015E47168688C0978B0EB43 +:109D2000C10F01D313200DE43946304601F02AF863 +:109D30000146706808230078C20005F1200005F094 +:109D4000AEFDD4E90012C0E900120020E3E710B52F +:109D50000446032105F01CFF0146007800F00300D3 +:109D6000022805D02046BDE8104001F114029AE413 +:109D70008A8A2046BDE81040C8E470B50446032135 +:109D800005F006FF054601462046FFF774FD002852 +:109D900016D029462046FFF765FE002810D0294638 +:109DA0002046FFF723FD00280AD029462046FFF76A +:109DB000CCFC002804D029462046BDE87040AAE526 +:109DC00070BD2DE9F0410C4680461EE0E1784278F6 +:109DD00011FB02F1CAB2816901230E3005F095FD35 +:109DE000077860681C22C179491EC17107EB8701A1 +:109DF000606802EBC10146183946204600F0D5FFE5 +:109E000018B1304600F0E0FF20B16068C179002948 +:109E1000DCD180E7FEF7CEFD050000D1FFDF0A2090 +:109E20002872384600F0A6FF68813946204600F0C7 +:109E3000B0FF0146606808234078C20006F12400A4 +:109E400005F063FDD0E90010C5E90310A5F8028014 +:109E5000284600F085FFB07800B9FFDFB078401EDB +:109E6000B07058E770B50C460546032105F090FE2A +:109E700001464068C2792244C2712846BDE870405C +:109E80009FE72DE9FE4F8246507814460F464FF06B +:109E9000000800284FD0012807D0022822D0FFDF79 +:109EA0002068B8606068F86024E702AB0E220821E1 +:109EB0005046FFF79EFB0028F2D00298152105239B +:109EC0000170217841700A214180C0F80480C0F8F7 +:109ED0000880A0F80C80628882810E20CDE90008FD +:109EE000082221E0A678304600F044FF054606EB44 +:109EF00086012C22786802EBC1010822465A02AB87 +:109F000011465046FFF775FB0028C9D0029807217B +:109F10000170217841700421418008218580C6802C +:109F2000CDE9001805230A4639465046FFF721FBC4 +:109F300087F80880DEE6A678022516B1022E13D037 +:109F4000FFDF2A1D914602AB08215046FFF751FB67 +:109F50000028A5D002980121022E017021784170BD +:109F60004580868002D005E00625EAE7A188C18009 +:109F7000E1880181CDE90098052308223946504641 +:109F8000D4E710B50446032105F002FE014600F1B6 +:109F900008022046BDE8104073E72DE9F05F0C464B +:109FA00001281DD0957992F80480567905EB85013A +:109FB0001F2202EBC10121F0030B08EB060111FB8C +:109FC00005F14FF6FF7202EAC10909F1030115FB21 +:109FD0000611F94F21F0031A40B101283DD124E0C8 +:109FE0006168E57891F800804E78DFE75946786837 +:109FF00005F009FC606000B9FFDF5946606814F0A5 +:10A0000005FDE5705146786805F0FDFB6168486123 +:10A0100000B9FFDF6068426902EB09018161606895 +:10A0200080F800806068467017E0606852464169B9 +:10A03000786805F013FC5A466168786805F00EFCF4 +:10A04000032005F04DFD0446032005F051FD201AC4 +:10A05000012802D1786805F0CBFB0BEB0A00BDE8C4 +:10A06000F09F02460021022097E773B5D24D0A20E7 +:10A070002870009848B100244FEA0D0005F0A5FBB8 +:10A08000002C01D1009969607CBD01240020F5E716 +:10A0900070B50C4615463821204614F0B7FC012651 +:10A0A00066700A2104F11C0014F0B0FC05B9FFDF52 +:10A0B000297A207861F301002070A879002817D050 +:10A0C0002A4621460020FFF768FF6168402088701B +:10A0D0006168C870616808716168487161688871F9 +:10A0E000616828880881616868884881606886811D +:10A0F00070BDC878002802D0002201204DE77047CB +:10A1000070B50546002165F31F41012009F0C8F92B +:10A110000321284605F03CFD040000D1FFDF214665 +:10A120002846FFF769F9002804D0207840F0100095 +:10A130002070012070BD2DE9FF4180460E460F0CB6 +:10A14000FEF738FC050007D06F800321384605F084 +:10A150001FFD040008D106E004B03846BDE8F04118 +:10A160001321F8F711BCFFDFB8F1010F05D0B8F1EA +:10A17000080F18D0FFDFBDE8FF8120782A4620F0C5 +:10A18000080020700020ADF8020002208DF80000C9 +:10A190004FF6FF70ADF80400ADF80600694638468A +:10A1A000F7F781FFE7E7C6F3072101EB81021C23E4 +:10A1B000606803EBC202805C042803D008280AD040 +:10A1C000FFDFD8E7012000904FF440432A462046A5 +:10A1D00000F008FECFE704B02A462046BDE8F04173 +:10A1E000FFF7E9B82DE9F05F0027B0F80A90904634 +:10A1F0000C4605463E46B9F1400F01D2402001E031 +:10A20000A9F140001FFA80FA287AC01E08286BD2F4 +:10A21000DFE800F00D04192058363C47722710265D +:10A22000002C6CD0D5E90301C4E902015CE0702781 +:10A230001226002C63D00A2205F10C0104F108005B +:10A2400014F088FB50E071270C26002C57D0E868EA +:10A25000A06049E0742710269CB3D5E90301C4E946 +:10A2600002016888032105F093FC8346FEF7A2FBF8 +:10A2700002466888508051465846FFF753F833E04D +:10A2800075270A26ECB1A88920812DE076271426AF +:10A29000BCB105F10C0004F1080307C883E807000E +:10A2A00022E07727102664B1D5E90301C4E9020151 +:10A2B0006888032105F06CFC01466888FFF781FD82 +:10A2C00012E01CE073270826CCB16888032105F052 +:10A2D0005FFC01460078C00606D56888FFF78CF859 +:10A2E00010B96888F7F7E6FAA8F800602CB1278063 +:10A2F000A4F8069066806888A0800020AFE6A8F8E1 +:10A300000060FAE72DE9FC410C461E4617468046E0 +:10A31000032105F03DFC05460A2C0AD2DFE804F0D3 +:10A3200005050505050509090907042303E00623BA +:10A3300001E0FFDF0023CDE90076224629464046B2 +:10A34000FFF717F92AE438B50546A0F57F40FF3836 +:10A3500030D0284605F04EFD040000D1FFDF204636 +:10A3600005F0D3F8002815D001466A46204605F0CE +:10A37000EEF800980321B0F80540284605F008FCE7 +:10A380000546052C03D0402C05D2402404E0007A79 +:10A3900080B1002038BD403CA4B2214600F005FD4C +:10A3A00040B1686804EB84013E2202EBC101405ACF +:10A3B0000028EFD0012038BD300000202DE9F04FFB +:10A3C000044689B0408805F015FD050000D1FFDF87 +:10A3D00006AA2846616800F0C1FC069D001F81B2F4 +:10A3E00035F8032F6B888A4205D1042B0AD0052B40 +:10A3F0001DD0062B15D022462846FFF7D1FB09B009 +:10A40000BDE8F08F16462D1D224629463046FBF743 +:10A410001BFC0828F3D1224629463046FCF731FCC4 +:10A42000EDE76088291D6368F9F7B8FCE7E7174690 +:10A430006088032105F0ACFB4FF000088DF8048024 +:10A440000646ADF80680042FD9D36A79002AD6D003 +:10A4500028794FF6FF794FF01C0A13282CD008DC1E +:10A46000012878D0062847D0072875D0122874D143 +:10A4700006E0142872D0152871D016286DD1ACE1F1 +:10A480000C2F6AD1307800F00301022965D140F029 +:10A49000080030706879B07001208DF804002889B8 +:10A4A000ADF808006889ADF80A00A889ADF80C007D +:10A4B000E889ADF80E0019E0B07890429FD130786D +:10A4C00001079CD5062F9AD120F0080030706088D3 +:10A4D000414660F31F41012008F0E2FF02208DF8A1 +:10A4E0000400ADF808902889ADF80A00608822467B +:10A4F00001A9F7F7D8FD82E7082F80D12F89B5F899 +:10A500000A90402F01D2402001E0A7F1400080B224 +:10A5100080460146304600F048FC08B3716808EBFD +:10A5200088002C2202EBC000095A4945E3D1FE48BD +:10A5300007AAD0E90210CDE9071068798DF81C0050 +:10A5400008F0FF058DF81E5060883146FFF799FC32 +:10A550002246294639E0B6E014E03CE039E0E6E086 +:10A56000F148D0E90010CDE907106879ADF8207006 +:10A570008DF81C00ADF82290608807AA3146FFF7DD +:10A5800080FC3CE7082FB6D16889B5F808804028E0 +:10A5900001D2402000E0403887B23946304600F012 +:10A5A00004FC0028A7D007EB870271680AEBC20001 +:10A5B0000844028A42459ED1017808299BD14078FF +:10A5C0006979884297D1F9B222463046FEF7F3FE08 +:10A5D00015E70E2F07D0CDF81C80CDF820806879C4 +:10A5E0008DF81C00C8E76989EF898B46B5F80C9097 +:10A5F0003046FEF742FFABF14001402901D309206C +:10A600004AE0B9F1170F01D3172F01D20B2043E015 +:10A6100040280ED000EB800271680AEBC2000844AB +:10A620000178012903D1407869798842A9D00A20AC +:10A6300032E03046FEF703FF014640282BD001EB05 +:10A64000810372680AEBC30002EB0008012288F85C +:10A6500000206A7988F8012070682A894089B84208 +:10A6600000D938462D8A03232372A282E7812082F3 +:10A67000A4F80C906582084600F07CFB6081A8F885 +:10A680001490A8F81870A8F80E50A8F810B020463A +:10A6900000F066FBB3E6042005212172A4F80A80CD +:10A6A000E08101212173A049D1E90421CDE90721ED +:10A6B00069798DF81C10ADF81E00608807AA314634 +:10A6C000FFF7DFFBE3E7062FE4D3B078904215D124 +:10A6D0003078010712D520F00800307060884146BC +:10A6E00060F31F41012008F0DBFE02208DF804001A +:10A6F0002889ADF80800ADF80A90F7E60421304645 +:10A70000FEF7D3FE05464028C4D002208303009004 +:10A7100022462946304600F065FB4146608865F3D5 +:10A720000F2160F31F41082008F0BAFE67E60E2FE4 +:10A73000B0D104213046FEF7B8FE81464028A9D0AA +:10A740004146608869F30F2160F31F41082008F03B +:10A75000A7FE288A0790E88900907068AF89408931 +:10A76000B84200D938468346B5F80A802889059052 +:10A77000484600F0FFFA6081079840B10220079B2D +:10A78000009022464946304600F02CFB37E6B8F1EF +:10A79000170F1ED3172F1CD304202072009860823D +:10A7A000E781A4F810B0A4F80C8009EB8902716865 +:10A7B0000AEBC2000D1800990598A5F81480A5F8B9 +:10A7C00018B0E9812882204600F0CAFA06202870D5 +:10A7D00015E601200B230090D3E7082FA6D1298985 +:10A7E0003046FEF74AFE074640289FD007EB870217 +:10A7F00071680AEBC2000844804600F0ECFA0028B9 +:10A8000094D16D89B8F80E002844B0F5803F05D387 +:10A8100060883A46314600F01CFBF0E5002D85D0FB +:10A82000A8F80E0060883A463146FFF701F9082083 +:10A830002072384600F09EFA6081A58127E770B546 +:10A840000D460646032105F0A3F9040004D0207844 +:10A85000000704D5112070BD43F2020070BD2A46E6 +:10A8600021463046FEF71FFF18B928686061686806 +:10A87000A061207840F008002070002070BD70B505 +:10A880000D460646032105F083F9040004D0207824 +:10A89000000704D4082070BD43F2020070BD2A46B0 +:10A8A00021463046FEF732FF00B9A582207820F01D +:10A8B00008002070002070BD2DE9F04F0E4691B0C9 +:10A8C0008046032105F064F90446404605F0A4FAE9 +:10A8D00007460020079008900990ADF830000A90D4 +:10A8E00002900390049004B9FFDF0DF1080917BB33 +:10A8F000FFDF20E038460BA9002204F0C9FC9DF8D8 +:10A900002C0000F07F050A2D00D3FFDF6019017FC6 +:10A91000491E01779DF82C0000060CD52A460CA98B +:10A9200007A8FEF716FE01E0A0ED010019F80510DA +:10A93000491C09F80510761EF6B2DBD204F134008A +:10A94000FC4D04F1260BDFF8F0A304F12A07069072 +:10A9500010E05846069900F06EFA064628700A285C +:10A9600000D3FFDF5AF8261040468847E08CC05DD0 +:10A97000B04202D0208D0028EBD10A202870EE4D85 +:10A980004E4628350EE00CA907A800F054FA0446FC +:10A99000375D55F8240000B9FFDF55F8242039460B +:10A9A00040469047BDF81E000028ECD111B027E5C5 +:10A9B00010B5032105F0ECF8040000D1FFDF0A21F7 +:10A9C00004F11C0014F022F8207840F004002070FC +:10A9D00010BD10B50C46032105F0DAF801190A7F05 +:10A9E00001211AB9808EA140084000D0012010BD7D +:10A9F0002DE9F84F894615468246032105F0C8F82F +:10AA0000070004D0284608F097FD40B903E043F260 +:10AA10000200BDE8F88F484608F0B4FD08B11020E8 +:10AA2000F7E7786828B169880089814201D909204F +:10AA3000EFE7B9F800001C2418B1402809D24020E3 +:10AA400008E03846FEF7FBFC8046402819D1132069 +:10AA5000DFE7403880B280460146384600F0A5F96D +:10AA600048B108EB8800796804EBC000085C012855 +:10AA700003D00820CDE70520CBE7FDF79BFF0600BC +:10AA80000BD008EB8800796804EBC0000C18B9F80B +:10AA9000000020B1E88910B113E01120B9E728883F +:10AAA000172802D36888172801D20720B1E7686801 +:10AAB00038B12B1D224641463846FFF71DF90028C4 +:10AAC000A7D104F10C0269462046FFF71CF828883C +:10AAD00060826888E082B9F8000030B102202070FE +:10AAE000E889A080E889A0B12BE003202070A88924 +:10AAF000A08078688178402905D180F802803946A5 +:10AB00005046FEF722FE404600F034F9A9F8000056 +:10AB100021E07868218B4089884200D9084620834B +:10AB2000A6F802A004203072B9F800007081E08914 +:10AB30007082F181208B3082A08AB081304600F093 +:10AB40000FF97868C178402905D180F8038039462B +:10AB50005046FEF74BFE00205BE770B50D460646FB +:10AB6000032105F015F8040003D0402D04D2402540 +:10AB700003E043F2020070BD403DADB2294600F053 +:10AB800014F958B105EB85011C22606802EBC10184 +:10AB9000084400F020F918B1082070BD052070BDF0 +:10ABA0002A462146304600F054F9002070BD2DE9B8 +:10ABB000F0410D4616468046032104F0E9FF0446A5 +:10ABC000402D01D2402500E0403DADB28CB1294678 +:10ABD00000F0EBF880B105EB85011C22606802EB08 +:10ABE000C1014718384600F0F6F838B10820BDE832 +:10ABF000F08143F20200FAE70520F8E733463A46CF +:10AC000029462046FFF778F80028F0D1EAB221461D +:10AC10004046FEF797FF0020E9E72DE9F0410D4699 +:10AC200016468046032104F0B3FF0446402D01D2AE +:10AC3000402500E0403DAFB224B1304608F07CFC36 +:10AC400038B902E043F20200D1E7306808F074FC42 +:10AC500008B11020CBE73946204600F0A6F860B1D5 +:10AC600007EB87011C22606802EBC10145182846EA +:10AC700000F0B1F818B10820B9E70520B7E7B088AF +:10AC8000A98A884201D90C20B1E76168E88C49782B +:10AC9000B0EBC10F01D31320A9E73946204600F0DD +:10ACA00078F80146606808234078C20005F1240066 +:10ACB00004F0F5FDD6E90012C0E90012FAB221460F +:10ACC0004046FEF7B5FE002091E72DE9F0470D461E +:10ACD0001F4690468146032104F05AFF0446402D4A +:10ACE00001D2402001E0A5F1400086B23CB14DB157 +:10ACF000384608F065FC50B11020BDE8F08743F2FB +:10AD00000200FAE76068C8B1A0F80C8024E0314680 +:10AD1000204600F04AF888B106EB86011C226068E4 +:10AD200002EBC1014518284600F055F840B1082053 +:10AD3000E3E7000030000020B8ED01000520DCE76B +:10AD4000A5F80880F2B221464846FEF7FBFE1FB187 +:10AD5000A8896989084438800020CEE704F0F7BB51 +:10AD6000017821F00F01491C21F0F0011031017030 +:10AD7000FDF723BE10B50446402800D9FFDF40345C +:10AD8000A0B210BD406842690078484302EBC000A1 +:10AD90007047C2784068037812FB03F24378406939 +:10ADA00001FB032100EBC1007047C2788A4209D938 +:10ADB000406801EB81011C2202EBC101405C08B13B +:10ADC00001207047002070470078062801D9012033 +:10ADD0007047002070470078062801D00120704796 +:10ADE00000207047F0B401EB81061C27446807EB94 +:10ADF000C6063444049D05262670E3802571F0BC08 +:10AE0000FEF790BA10B5418911B1FFF7DDFF08B127 +:10AE1000002010BD012010BD10B5C18C8278B1EBAF +:10AE2000C20F04D9C18911B1FFF7CEFF08B10020CC +:10AE300010BD012010BD10B50C4601230A22011DD2 +:10AE400004F063FD00782188012282409143218033 +:10AE500010BDF0B402EB82051C264C6806EBC5055C +:10AE6000072363554B681C79402C03D11A71F0BC41 +:10AE7000FEF701BDF0BC704770B50B2000F0B5F9CE +:10AE8000082000F0B2F900210B2000F0C4F90021E5 +:10AE9000082000F0C0F9EC4C01256560A560002099 +:10AEA000C4F84001C4F84401C4F848010B2000F084 +:10AEB000A7F9082000F0A4F90B2000F08BF9256019 +:10AEC00070BD10B50B2000F090F9082000F08DF94E +:10AED000DD48012141608160DC490A68002AFCD11B +:10AEE0000021C0F84011C0F84411C0F848110B20EF +:10AEF00000F086F9BDE81040082000F081B910B5D7 +:10AF00000B2000F07DF9BDE81040082000F078B972 +:10AF100000B530B1012806D0022806D0FFDF00209E +:10AF200000BDCB4800BDCB4800BDCA48001D00BDD8 +:10AF300070B5C9494FF000400860C84DC00BC5F856 +:10AF40000803C74800240460C5F840410820C43500 +:10AF500000F04BF9C5F83C41C248047070BD08B51B +:10AF6000B94A002128B1012811D002281CD0FFDFE6 +:10AF700008BD4FF48030C2F80803C2F84803B34854 +:10AF80003C300160C2F84011BDE80840D0E74FF402 +:10AF90000030C2F80803C2F84803AC4840300160F2 +:10AFA000C2F84411AB480CE04FF48020C2F808030B +:10AFB000C2F84803A54844300160C2F84811A548CA +:10AFC000001D0068009008BD70B516460D46044689 +:10AFD000022800D9FFDF00229B48012304F1100161 +:10AFE0008B4000EB8401C1F8405526B1C1F84021E7 +:10AFF000C0F8043303E0C0F80833C1F84021C0F8BA +:10B00000443370BD2DE9F0411C46154630B101288E +:10B0100034D0022839D0FFDFBDE8F081891E00223C +:10B0200021F07F411046FFF7CFFF012C24D00020F4 +:10B030008C4E8A4F012470703C61894900203C3954 +:10B0400008600220091D0860854904203039086025 +:10B0500083483D350560C7F80042082000F0D0F86D +:10B060002004C7F80403082000F0B4F87A49E00788 +:10B07000091F08603470CFE70120D9E7012B02D007 +:10B080000022012005E00122FBE7012B04D0002271 +:10B090000220BDE8F04197E70122F9E76B4800681C +:10B0A000704770B500F0C7F8674C0546D4F840010A +:10B0B0000026012809D1D4F80803C00305D54FF4B0 +:10B0C0008030C4F80803C4F84061D4F84401012872 +:10B0D0000CD1D4F80803800308D54FF40030C4F82D +:10B0E0000803C4F84461012007F0B7FAD4F8480116 +:10B0F00001280CD1D4F80803400308D54FF4802070 +:10B10000C4F80803C4F84861022007F0A6FA5648BC +:10B11000056070BD70B500F08EF8524D0446287879 +:10B1200058B1FFF705FF687820B1002085F80100CD +:10B1300007F093FA4C48046070BD0320F8E74FF025 +:10B14000E0214FF40010C1F800027047152000F014 +:10B1500057B8424901200861082000F051B83F4922 +:10B160004FF47C10C1F808030020024601EB800375 +:10B17000C3F84025C3F84021401CC0B20628F5D3CF +:10B180007047410A43F609525143C0F3080010FBCF +:10B1900002F000F5807001EB5020704710B5430BB2 +:10B1A00048F2376463431B0C5C020C602F4C03FBBA +:10B1B00004002F4B4CF2F72443435B0D13FB04F4C4 +:10B1C00004EB402000F580704012107008681844AD +:10B1D000086010BD00F01F0201219140400980006D +:10B1E00000F1E020C0F80011704700F01F020121BB +:10B1F00091404009800000F1E020C0F880117047C4 +:10B2000000F01F02012191404009800000F1E02080 +:10B21000C0F8801270474907090E002806DA00F0CE +:10B220000F0000F1E02080F8141D704700F1E020CD +:10B2300080F8001470470C48001F00680A4A0D4946 +:10B24000121D11607047000000B0004004B50040BE +:10B250004081004044B1004008F5014000800040BA +:10B26000408500403800002014050240F7C2FFFF6F +:10B270006F0C01000100000110B5EFF3108000F029 +:10B28000010472B6E9484178491C417040780128B0 +:10B2900001D107F087FD002C00D162B610BD70B55A +:10B2A000E24CE07848B90125E570FFF7E5FF07F0CB +:10B2B00081FD20B1002007F05CFD002070BD4FF043 +:10B2C00080406571C0F80453F7E770B5EFF3108064 +:10B2D00000F0010572B6D54C607800B9FFDF6078E8 +:10B2E000401E6070607808B907F060FD002D00D145 +:10B2F00062B670BDCD4810B5C17821B10021417151 +:10B30000C170FFF7E2FF002010BD10B5044607F042 +:10B3100051FDC649C978084000D0012020600020B6 +:10B3200010BD2DE9F05FDFF804934278817889F849 +:10B330000620002689F80710074689F8086000787B +:10B34000354620B101280FD002280FD0FFDF07F0CB +:10B350003EFD98B107F042FDB0420FD1304607F0F4 +:10B3600041FD0028FAD047E00126F0E7FFF784FF0F +:10B3700007F020FD0028FBD00226E8E70120840723 +:10B38000E060C4F80451AA490E600107D1F84412E4 +:10B39000A74AC1F3423124321160A5493431086013 +:10B3A0004FF0020BC4F804B3A060DFF888A2DAF80B +:10B3B0000010C94341F3001101F10108DAF800104F +:10B3C00041F01001CAF8001000E020BFD4F80401D9 +:10B3D0000028FAD0304607F005FD0028FAD0B8F171 +:10B3E000000F05D1DAF8001021F01001CAF80010A2 +:10B3F000C4F808B3C4F8045199F807004C4670B17A +:10B40000387860B907F0D6FC074607F037FE6FF0D2 +:10B41000004117B1C4E9031001E0C4E9030116B10A +:10B420002571BDE8F09F0127BE0727714FF019086D +:10B43000C6F80883B761C6F80051C6F80C51C6F8C3 +:10B44000105107F0B7FC10B1A770376100E027700A +:10B45000FFF712FF7649A07920310860C6F804830F +:10B46000DFE770B5050000D1FFDF4FF080424FF0FD +:10B47000FF30C2F808030021C2F80011C2F804111D +:10B48000C2F80C11C2F81011684C617007F098FCFA +:10B4900010B10120E07060702846BDE8704040E7C0 +:10B4A0002DE9F05F6448D0F800B0634A6349083280 +:10B4B00011608406D4F8080110B14FF0010801E0D2 +:10B4C0004FF00008D4F8000100B101208146D4F803 +:10B4D000040108B1012600E00026D4F80C0100B1F7 +:10B4E00001208246D4F8100108B1012700E00027AE +:10B4F00048EA090126EA010020EA0A00B84300D020 +:10B50000FFDF0025B8F1000F04D0C4F80851012076 +:10B5100007F02FFC5FEA0900DFF810814FF0010906 +:10B5200013D0C4F8005198F8050020B188F80550F0 +:10B53000002007F01EFC98F8000030B107F03AFC3C +:10B5400018B188F80290C4F810900EB1C4F80451F4 +:10B55000BAF1000F0CD0C4F80C5198F8020046461E +:10B5600000B9FFDFB5703570C4F81490FFF7ADFE79 +:10B5700037B1C4F8105198F8040008B100F020F871 +:10B580002D49091DC1F800B04BE770B5274DE8788B +:10B5900008B907F00BFC01208407A061A87850B11E +:10B5A000D4F80C0120B9002007F01CFC0028F7D1CA +:10B5B0000020C4F80C014FF0FF30C4F8080370BD40 +:10B5C0002DE9F041194C4FF080470125E079F0B1A9 +:10B5D000012803D0217A401E814218DA07F0EAFBE5 +:10B5E000064607F04BFDE179012902D9217A491C71 +:10B5F00021720EB1216900E0E168411A022902DAE4 +:10B6000011F1020F0BDC0EB1206100E0E060FFF7EA +:10B6100033FE07F0CFFB28B13D61A57003E07D61EB +:10B62000BDE8F081257000202072F9E73C00002081 +:10B630001805004010ED00E0100502400100000177 +:10B6400010B50D2000F06FF8C4B26FF0040000F0E8 +:10B650006AF8C0B2844200D0FFDF3A490120086096 +:10B6600010BD70B50D2000F048F8374C0020C4F82C +:10B6700000010125C4F804530D2000F049F82560AD +:10B680004FF0E0216014C1F8000170BD10B50D202D +:10B6900000F033F82C48012141600021C0F800116E +:10B6A000BDE810400D2000F033B8284810B50468FC +:10B6B00026492748083108602349D1F800010128AC +:10B6C00004D0FFDF2148001D046010BD1D48001D8F +:10B6D00000680022C0B2C1F8002107F027FCF1E7A2 +:10B6E00010B51948D0F800110029FBD0FFF7DDFF95 +:10B6F000BDE810400D2000F00BB800F01F02012142 +:10B7000091404009800000F1E020C0F880117047AE +:10B7100000F01F02012191404009800000F1E0206B +:10B72000C0F880127047002806DA00F00F0000F120 +:10B73000E02090F8140D03E000F1E02090F8000400 +:10B740004009704704D5004000D000401005024079 +:10B750000100000110B5202000F082F8202000F048 +:10B760008AF84A49202081F8000449490006086007 +:10B77000091D48480860F5F7CFFD4549C831086004 +:10B780004548D0F8041341F00101C0F80413D0F883 +:10B79000041341F08071C0F804133C4901201C39A6 +:10B7A000C1F8000110BD10B5202000F059F838484C +:10B7B00000210160001D0160354A481EE83A106012 +:10B7C000354AC2F80803324BC8331960C2F8000189 +:10B7D000C2F8600131490860BDE81040202000F047 +:10B7E0004AB82B492E48EC390860704728492C4844 +:10B7F000E8390860704726480160001D521E02604B +:10B80000704723490120E8390860BFF34F8F704724 +:10B8100070B51F4A8069E83A214911601E49D1F884 +:10B82000006100231F4D1D4A5C1E1EB1A84206D3B5 +:10B8300000210FE0D1F8606186B1A84209D2C1F8B9 +:10B840000031C1F860311460BDE87040202000F084 +:10B8500012B81168BDE8704013F004B9FFDF70BD85 +:10B8600000F01F02012191404009800000F1E0201A +:10B87000C0F88011704700F01F020121914040097B +:10B88000800000F1E020C0F88012704720E000E066 +:10B890000006024024120020000002400004024082 +:10B8A00001000001003002004FF0E0214FF0007075 +:10B8B000C1F88001C1F88002384B802283F800244F +:10B8C000C1F80001704700B502460420344903E086 +:10B8D00001EBC0031B792BB1401EC0B2F8D2FFDFD1 +:10B8E000FF2000BD41F8302001EBC00100224A7169 +:10B8F0008A7101220A7100BD294A002102EBC000B1 +:10B900000171704710B50446042800D3FFDF2448B6 +:10B9100000EBC4042079012800D0FFDF6079A17911 +:10B92000401CC0B2814200D060714FF0E0214FF066 +:10B930000070C1F8000210BD2DE9F04119480568FA +:10B9400018491948083108601448042690F8000482 +:10B95000134F4009154C042818D0FFDF16E021785A +:10B9600007EBC1000279012A08D1427983799A4212 +:10B9700004D04279827157F8310080472078401C0A +:10B98000C0B22070042801D300202070761EF6B2C9 +:10B99000E5D20448001D0560BDE8F08119E000E033 +:10B9A0009805002010050240010000015000002011 +:10B9B00070B50C46054600F043FB21462846BDE81D +:10B9C000704001F026BC0000F8B51D46DDE90647D1 +:10B9D0000E000AD004F020FA2346FF1DBCB2314607 +:10B9E0002A46009403F02DFEF8BDD01922461946D0 +:10B9F00012F06BFF2046F8BD70B50D4604461021CD +:10BA000012F0E2FF258117206081A07B40F00A0040 +:10BA1000A07370BD4FF6FF720A800146032007F045 +:10BA20003FBD704700897047827BD30701D19207E1 +:10BA300003D4808908800020704705207047827BEE +:10BA4000920700D58181704701460020098841F6A0 +:10BA5000FE52114200D00120704700B50346807BA2 +:10BA6000C00701D0052000BD59811846FFF7ECFF43 +:10BA7000C00703D0987B40F004009873987B40F097 +:10BA800001009873002000BD827B520700D509B1E8 +:10BA90004089704717207047827B61F3C30282732D +:10BAA00070472DE9FC5F0E4604460178964601205A +:10BAB00000FA01F14DF6FF5201EA020962684FF601 +:10BAC000FF7B1188594506D0B9F1000F06D041F629 +:10BAD000FE55294202D00120BDE8FC9F41EA090140 +:10BAE00011801D0014D04FF0000C85F800C02378A1 +:10BAF0000521032267464FF0020A0E2B74D2DFE8BD +:10BB000003F0F809252F47626974479092B3D0D7A4 +:10BB10000420E1E7616820898B7B9B077DD517288E +:10BB200048D30B89834245D38989172901D38142A0 +:10BB300040D185F800A0A5F80100328061688881B5 +:10BB40006068817B21F002018173C5E004202870C8 +:10BB50002089A5F801006089A5F803003180BBE0C9 +:10BB6000208A3188C01D1FFA80F8414522D3062063 +:10BB700028702089A5F801006089A5F80300A08934 +:10BB8000A5F805000721208ACDE9000163693EE0A0 +:10BB9000082B10D0082028702089A5F801006089A2 +:10BBA000A5F8030031806A1D694604F10C0005F018 +:10BBB00090FD10B15FE01020EDE730889DF8001097 +:10BBC0000844308088E00A2028702089A5F8010008 +:10BBD000328045E00C2028702089A5F8010060899A +:10BBE000A5F8030031803BE083E02189338800EB36 +:10BBF00041021FFA82F843453DD3B8F1050F3AD30D +:10BC00000E222A700BEA4101CDE90010E36860883A +:10BC10002A467146FFF7D8FE00E04DE0A6F8008006 +:10BC20005AE04020287060893188C01C1FFA80F8D3 +:10BC3000414520D32878714620F03F00123028700B +:10BC40002089A5F801006089CDE9000260882A46B4 +:10BC5000E368FFF7B9FEA6F80080287840063BD4D9 +:10BC600061682089888037E0A0893288401D1FFAEA +:10BC700080F8424501D204273EE016202870208932 +:10BC8000A5F801006089A5F80300A089CDE90001AD +:10BC900060882A4671462369FFF796FEA6F8008061 +:10BCA000DEE718202870207A6870A6F800A013E05C +:10BCB00061680A88920401D405271DE0C988228999 +:10BCC000914201D0062717E01E212970308060685C +:10BCD000018821F400510180B9F1000F0CD0618876 +:10BCE00078230022032007F031FB616820788870F8 +:10BCF00007E0A6F800C003276068018821EA09016F +:10BD000001803846E8E62DE9FF4F85B01746129CC2 +:10BD10000D001E461CD03078C10703D000F03F0054 +:10BD2000192801D9012100E000212046FFF7ACFECF +:10BD3000A8420DD32088A0F57F41FF3908D0307884 +:10BD4000410601D4000605D5082009B0BDE8F08FF2 +:10BD50000720FAE700208DF800008DF80100307808 +:10BD60006B1E00F03F0C0121A81E4FF0050A4FF09A +:10BD700002094FF0030B9AB2BCF1200F75D2DFE835 +:10BD80000CF08B10745E7468748C749C74B674BB05 +:10BD900074C974D574E2747474F274F074EF74EE50 +:10BDA000748B052D78D18DF80090A0788DF8040063 +:10BDB0007088ADF8060030798DF80100707800F0D9 +:10BDC0003F000C2829D00ADCA0F10200092863D228 +:10BDD000DFE800F0126215621A621D62200012286C +:10BDE00024D004DC0E281BD01028DBD11BE0162841 +:10BDF0001FD01828D6D11FE02078800701E02078D6 +:10BE00004007002848DAEFE020780007F9E72078BB +:10BE1000C006F6E720788006F3E720784006F0E7D2 +:10BE200020780006EDE72088C005EAE72088400575 +:10BE3000E7E720880005E4E72088C004E1E72078F0 +:10BE4000800729D5032D27D18DF800B0B6F8010061 +:10BE500082E0217849071FD5062D1DD381B2707865 +:10BE6000012803D0022817D102E0CAE0022000E036 +:10BE7000102004228DF8002072788DF80420801C98 +:10BE8000B1FBF0F2ADF8062092B242438A4203D1F0 +:10BE90000397ADF80890A7E07AE02078000777D5FF +:10BEA00098B282088DF800A0ADF80420B0EB820FA4 +:10BEB0006ED10297ADF8061096E02178C90667D5D5 +:10BEC000022D65D381B206208DF80000707802281B +:10BED0005ED300BFB1FBF0F28DF80400ADF8062090 +:10BEE00092B242438A4253D1ADF808907BE0207869 +:10BEF00080064DD5072003E0207840067FD5082036 +:10BF00008DF80000A088ADF80400ADF80620ADF86B +:10BF1000081068E02078000671D50920ADF80420EB +:10BF20008DF80000ADF8061002975DE02188C90584 +:10BF300065D5022D63D381B20A208DF80000707898 +:10BF400004285CD3C6E72088400558D5012D56D17A +:10BF50000B208DF80000A088ADF8040044E021E03B +:10BF600026E016E0FFE72088000548D5052D46D3DA +:10BF70000C208DF80000A088ADF80400B6F803008E +:10BF80006D1FADF80850ADF80600ADF80AA02AE024 +:10BF900035E02088C00432D5012D30D10D208DF838 +:10BFA000000021E02088800429D4B6F80100E08058 +:10BFB000A07B000723D5032D21D3307800F03F006C +:10BFC0001B2818D00F208DF80000208840F4005066 +:10BFD000A4F80000B6F80100ADF80400ED1EADF8BD +:10BFE0000650ADF808B0039769460598F9F773FB5A +:10BFF000050008D016E00E208DF80000EAE70725BE +:10C0000010E008250EE0307800F03F001B2809D032 +:10C010001D2807D00320059907F042FA208800F474 +:10C0200000502080A07B400708D52046FFF70CFD7C +:10C03000C00703D1A07B20F00400A073284684E64B +:10C040001FB5032806D101208DF8000088B269468B +:10C05000F9F741FB1FBD0000F8B51D46DDE90647B5 +:10C060000E000AD003F0D8FE2346FF1DBCB23146B5 +:10C070002A46009403F0E5FAF8BDD0192246194685 +:10C0800012F023FC2046F8BD2DE9FF4F8DB09B46F2 +:10C09000DDE91B57DDF87CA00C46082B05D0E069D4 +:10C0A00001F000F950B11020D2E02888092140F0B9 +:10C0B000100028808AF80010022617E0E1690120AC +:10C0C0008871E2694FF420519180E1698872E069DA +:10C0D00042F601010181E069002181732888112164 +:10C0E00040F0200028808AF80010042638780A9052 +:10C0F0000A2038704FF0020904F118004D460C90E8 +:10C1000001F093FBB04681E0BBF1100F0ED1022D80 +:10C110000CD0A9EB0800801C80B20221CDE90010F0 +:10C1200005AB52461E990D98FFF796FFBDF8161005 +:10C130001A98814203D9F74800790F9004E003D19F +:10C140000A9808B138702FE04FF00201CDE90019CC +:10C150000DF1160352461E990D98FFF77DFF1D98AD +:10C160000088401B801B83B2C6F1FF00984200D2BA +:10C1700003461E990BA8D9B15FF00002DDF878C024 +:10C18000CDE9032009EB060189B2CDE901C10F9881 +:10C190000090BDF8161000220D9801F0C9FB387010 +:10C1A00070B1C0B2832807D0BDF8160020833AE0F2 +:10C1B0000AEB09018A19E1E7022011B0BDE8F08F0E +:10C1C000BDF82C00811901F0FF08022D0DD09AF85E +:10C1D0000120424506D1BDF82010814207D0B8F1B8 +:10C1E000FF0F04D09AF801801FE08AF80180C94847 +:10C1F00000680178052902D1BDF81610818009EB8D +:10C2000008001FFA80F905EB080085B2DDE90C1083 +:10C2100005AB0F9A01F00CFB28B91D980088411B53 +:10C220004145BFF671AF022D13D0BBF1100F0CD1F9 +:10C23000A9EB0800801C81B20220CDE9000105AB0A +:10C2400052461E990D98FFF707FF1D9805800020A4 +:10C2500038700020B1E72DE9F8439C46089E13464C +:10C260000027B26B9AB3491F8CB2F18FA1F57F45BD +:10C27000FF3D05D05518AD882944891D8DB200E0D9 +:10C2800000252919B6F83C800831414520D82A44B8 +:10C29000BCF8011022F8021BBCF8031022F8021BA4 +:10C2A000984622F8024B914603F0A4FD4FF00C0C87 +:10C2B00041464A462346CDF800C003F08EF9F58783 +:10C2C000B16B00202944A41D2144088003E001E053 +:10C2D000092700E083273846BDE8F88310B50B88AE +:10C2E000848F9C420CD9846BE018048844B1848804 +:10C2F00024F40044A41D23440B801060002010BDD2 +:10C300000A2010BD2DE9F0478AB0002590468946E5 +:10C310008246ADF8185007274BE0059806888088BC +:10C32000000446D4A8F8006007A80195009702957C +:10C33000CDE903504FF4007300223146504601F01E +:10C34000F7FA04003CD1BDF81800ADF820000598BC +:10C3500004888188B44216D10A0414D40195029548 +:10C36000039521F400410097049541F480434288ED +:10C370002146504601F0B2F804000BD1059881889F +:10C3800041F40041818005AA08A94846FFF7A6FFAD +:10C390000400DCD00097059802950195039504955B +:10C3A0000188BDF81C300022504601F097F80A2C95 +:10C3B00006D105AA06A94846FFF790FF0400ACD0B5 +:10C3C000ADF8185004E00598818821F4004181807F +:10C3D00005AA06A94846FFF781FF0028F3D00A2CDA +:10C3E00003D020460AB0BDE8F0870020FAE710B578 +:10C3F0000C46896B86B051B10C218DF80010A18FCD +:10C40000ADF80810A16B01916946FAF715F9002003 +:10C410004FF6FF71A063E187A08706B010BD2DE93C +:10C42000F0410D460746896B0020069E1446002900 +:10C4300011D0012B0FD1324629463846FFF762FF53 +:10C44000002808D1002C06D0324629463846BDE8DF +:10C45000F04100F036BFBDE8F0812DE9FC41144603 +:10C46000DDE9087C0E46DDE90A15521DBCF800E046 +:10C4700092B2964502D20720BDE8FC81ACF80020BC +:10C4800017222A70A5F80160A5F803300522CDE92E +:10C4900000423B462A46FFF7DFFD0020ECE770B57F +:10C4A0000C4615464821204612F0B0FA04F1080067 +:10C4B00044F81C0F00204FF6FF71E0616184208476 +:10C4C000A5841720E08494F82A0040F00A0084F83C +:10C4D0002A0070BD4FF6FF720A800146042006F064 +:10C4E000DFBF30B585B00C460546FFF780FFA18E53 +:10C4F000284629B101218DF800106946FAF79CF809 +:10C500000020E0622063606305B030BDB0F84000F9 +:10C51000704700005400002090F84620920703D492 +:10C52000408808800020F3E70620F1E790F84620D5 +:10C530009207EDD5A0F84410EAE7014600200988EB +:10C540000A0700D5012011F0F00F01D040F00200E1 +:10C55000CA0501D540F004008A0501D540F0080065 +:10C560004A0501D540F010000905D1D540F0200062 +:10C57000CEE700B5034690F84600C00701D006207C +:10C5800000BDA3F842101846FFF7D7FF10F03E0F8A +:10C5900005D093F8460040F0040083F8460013F8F5 +:10C5A000460F40F001001870002000BD90F84620B2 +:10C5B000520700D511B1B0F84200A9E71720A7E74C +:10C5C00010F8462F61F3C3020270A1E72DE9FF4F77 +:10C5D0009BB00E00DDE92B34DDE92978289D24D0BD +:10C5E0002878C10703D000F03F00192801D90121A4 +:10C5F00000E000212046FFF7D9FFB04215D328788C +:10C60000410600F03F010CD41E290CD0218811F402 +:10C610007F6F0AD13A8842B1A1F57F42FF3A04D038 +:10C6200001E0122901D1000602D504201FB0C5E5A2 +:10C63000F9491D984FF0000A08718DF818A08DF87F +:10C640003CA00FAA0A60ADF81CA0ADF850A0297854 +:10C65000994601F03F02701F5B1C04F1180C4FF06B +:10C66000060E4FF0040BCDF858C01F2A7ED2DFE82B +:10C6700002F07D7D107D267DAC7DF47DF37DF27D25 +:10C68000F17DF47DF07D7D7DEF7DEE7D7D7D7D7D99 +:10C69000ED0094F84610B5F80100890701D5032E86 +:10C6A00002D08DF818B022E34FF40061ADF85010BD +:10C6B000608003218DF83C10ADF84000D8E2052ED3 +:10C6C000EFD1B5F801002083ADF81C00B5F80310D8 +:10C6D000618308B1884201D901207FE10020A07266 +:10C6E00020814FF6FF702084169801F09EF80520F7 +:10C6F00089F800000220029083460AAB1D9A169921 +:10C700001B9801F095F890BB9DF82E00012804D0ED +:10C71000022089F80100102003E0012089F80100BF +:10C7200002200590002203A90BA804F0D2FFE8BB69 +:10C730009DF80C00059981423DD13A88801CA2EBFE +:10C740000B01814237DB02990220CDE900010DF196 +:10C750002A034A4641461B98FFF77EFC02980BF1DC +:10C76000020B801C80B217AA03A901E0A0E228E016 +:10C7700002900BA804F0ADFF02999DF80C00CDE9E2 +:10C78000000117AB4A4641461B98FFF765FC9DF830 +:10C790000C100AAB0BEB01001FFA80FB02981D9AEC +:10C7A000084480B2029016991B9800E003E001F063 +:10C7B0003FF80028B6D0BBF1020F02D0A7F800B0B6 +:10C7C00053E20A208DF818004FE200210391072E52 +:10C7D000FFF467AFB5F801002083ADF81C00B5F891 +:10C7E0000320628300283FF477AF90423FF674AF96 +:10C7F0000120A072B5F8050020810020A073E06937 +:10C8000000F050FD78B9E16901208871E2694FF4C8 +:10C8100020519180E1698872E06942F6010101814D +:10C82000E06900218173F01F20841E986062072058 +:10C830006084169800F0F9FF072089F800000120B5 +:10C84000049002900020ADF82A0028E01DE2A3E148 +:10C850003AE1EAE016E2AEE086E049E0029801281B +:10C8600014D0E0698079012803D1BDF82800ADF823 +:10C870000E00049803ABCDE900B04A4641461B9830 +:10C88000FFF7EAFB0498001D80B20490BDF82A006F +:10C89000ADF80C00ADF80E00059880B202900AAB1E +:10C8A0001D9A16991B9800F0C3FF28B90298398881 +:10C8B000001D05908142D1D20298012881D0E06903 +:10C8C0008079012805D0BDF82810A1F57F40FF38F8 +:10C8D00003D1BDF82800ADF80E00049803ABCDE9F4 +:10C8E00000B04A4641461B98FFF7B6FB0298BBE1F1 +:10C8F000072E02D0152E7FF4D4AEB5F80110218397 +:10C90000ADF81C10B5F80320628300293FF4E4AEB3 +:10C9100091423FF6E1AE0121A1724FF0000BA4F865 +:10C9200008B084F80EB0052E07D0C0B2691DE269C8 +:10C9300004F0B0FE00287FF444AF4FF6FF7020846F +:10C9400001A906AA14A8CDF800B081E885032878CB +:10C95000214600F03F031D9A1B98FFF795FB824686 +:10C96000208BADF81C0080E10120032EC3D14021B3 +:10C97000ADF85010B5F801102183ADF81C100AAACB +:10C98000B8F1000F00D00023CDE9020304921D98F6 +:10C99000CDF80480009038880022401E83B21B9896 +:10C9A00000F0C6FF8DF8180090BB0B2089F800003E +:10C9B000BDF8280037E04FF0010C052E9BD18020F8 +:10C9C000ADF85000B5F801102183B5F803002084BC +:10C9D000ADF81C10B0F5007F03D907208DF81800C2 +:10C9E00085E140F47C4222840CA8B8F1000F00D00D +:10C9F0000023CDE90330CDE9018C1D9800903888E3 +:10CA0000401E83B21B9800F093FF8DF8180028B1E8 +:10CA10008328A8D10220BDE0540000200D2189F810 +:10CA20000010BDF83000401C1EE1032E04D2480661 +:10CA30007FF537AE002017E1B5F80110ADF81C10F6 +:10CA40002878400602D58DF83CE002E007208DF8FA +:10CA50003C004FF000080320CDE902081E9BCDF8F2 +:10CA600010801D980193A6F1030B00901FFA8BF321 +:10CA700042461B9800F032FD8DF818008DF83C807E +:10CA8000297849060DD52088C00506D5208BBDF82C +:10CA90001C10884201D1C4F8248040468DF81880CB +:10CAA000E2E0832801D14FF0020A4FF48070ADF824 +:10CAB0005000BDF81C002083A4F820B01E986062CE +:10CAC000032060841321CCE0052EFFF4EAADB5F815 +:10CAD0000110ADF81C10A28F62B3A2F57F43FE3B9C +:10CAE00028D008228DF83C204FF0000B0523CDE91B +:10CAF000023BDDF878C0CDF810B01D9A80B2CDF8B9 +:10CB000004C040F400430092B5F803201B9800F0E5 +:10CB1000E5FC8DF83CB04FF400718DF81800ADF8CD +:10CB20005010832810D0F8B1A18FA1F57F40FE38B6 +:10CB300007D0DCE00B228DF83C204FF6FE72A28776 +:10CB4000D2E7A4F83CB0D2E000942B4631461E9ABE +:10CB50001B98FFF780FB8DF8180008B183284BD194 +:10CB6000BDF81C00208355E700942B4631461E9AE1 +:10CB70001B98FFF770FB8DF81800E8BBE18FA06BE6 +:10CB80000844811D8DE882034388828801881B98B0 +:10CB9000FFF763FC824668E095F80180022E70D1B1 +:10CBA0005FEA080002D0B8F1010F6AD109208DF8C0 +:10CBB0003C0007A800908DF84080434600222146A3 +:10CBC0001B98FFF72CFC8DF842004FF0000B8DF8FE +:10CBD00043B050B9B8F1010F12D0B8F1000F04D131 +:10CBE000A18FA1F57F40FF380AD0A08F40B18DF80A +:10CBF0003CB04FF4806000E037E0ADF850000DE04D +:10CC00000FA91B98F9F718FD82468DF83CB04FF438 +:10CC10008060ADF85000BAF1020F06D0FB48006802 +:10CC2000C07928B18DF8180027E0A4F8188044E0F6 +:10CC3000BAF1000F03D081208DF818003DE007A85D +:10CC400000904346012221461B98FFF7E8FB8DF830 +:10CC5000180021461B98FFF7CAFB9DF8180020B961 +:10CC6000192189F80010012038809DF83C0020B17E +:10CC70000FA91B98F9F7E0FC8246BAF1000F33D0F8 +:10CC80001BE018E08DF818E031E02078000712D59D +:10CC9000012E10D10A208DF83C00E088ADF840004C +:10CCA00004201B9906F0FCFB0820ADF85000C1E6FB +:10CCB00048067FF5F6AC4FF0040A2088BDF8501006 +:10CCC00008432080BDF8500080050BD5A18FA1F549 +:10CCD0007F40FE3806D11E98E06228982063A68621 +:10CCE0004FF0030A5046A1E49DF8180078B10120E6 +:10CCF00089F80000297889F80110BDF81C10A9F8FE +:10CD000002109DF8181089F804100520388020883A +:10CD1000BDF8501088432080E4E72DE9FF4F884696 +:10CD2000087895B0012181404FF20900249C014010 +:10CD3000ADF820102088DDF88890A0F57F424FF0F4 +:10CD4000000AFF3A02D029B1000703D5012019B02B +:10CD5000BDE8F08F239E4FF0000B0EA886F800B0C0 +:10CD600018995D460988ADF83410A8498DF81CB0B3 +:10CD7000179A0A718DF838B0086098F800000128F9 +:10CD80003BD0022809D003286FD1307820F03F0033 +:10CD90001D303070B8F80400E08098F800100320CF +:10CDA000022904D1317821F03F011B31317094F810 +:10CDB0004610090759D505ABB9F1000F13D0002172 +:10CDC00002AA82E80B000720CDE90009BDF8340073 +:10CDD000B8F80410C01E83B20022159800F0A8FD18 +:10CDE0000028D1D101E0F11CEAE7B8F80400A6F868 +:10CDF0000100BDF81400C01C04E198F805108DF87E +:10CE00001C1098F80400012806D04FF4007A02287C +:10CE10002CD00328B8D16CE12188B8F8080011F4AF +:10CE20000061ADF8201020D017281CD3B4F84010B2 +:10CE3000814218D3B4F84410172901D3814212D18A +:10CE4000317821F03F01C91C3170A6F8010003219F +:10CE5000ADF83410A4F8440094F8460020F0020025 +:10CE600084F8460065E105257EE177E1208808F138 +:10CE7000080700F4FE60ADF8200010F0F00F1BD0A2 +:10CE800010F0C00F03D03888228B9042EBD199B9B3 +:10CE9000B878C00710D0B9680720CDE902B1CDF845 +:10CEA00004B00090CDF810B0FB88BA883988159886 +:10CEB00000F014FB0028D6D12398BDF82010401CA8 +:10CEC00080294ED006DC10290DD020290BD0402916 +:10CED00087D124E0B1F5807F6ED051457ED0B1F589 +:10CEE000806F97D1DEE0C80601D5082000E0102051 +:10CEF00082460DA907AA0520CDE902218DF8380048 +:10CF0000ADF83CB0CDE9049608A93888CDE9000118 +:10CF10005346072221461598FFF7B6F8A8E09DF87A +:10CF20001C2001214FF00A0A002A9BD105ABB9F160 +:10CF3000000F00D00020CDE902100720CDE9000944 +:10CF4000BDF834000493401E83B2218B0022159853 +:10CF500000F0EEFC8DF81C000B203070BDF81400C2 +:10CF600020E09DF81C2001214FF00C0A002A22D15C +:10CF700013ABB9F1000F00D00020CDE9021007205B +:10CF8000CDE900090493BDF83400228C401E83B221 +:10CF9000218B159800F0CCFC8DF81C000D20307012 +:10CFA000BDF84C00401CADF8340005208DF8380069 +:10CFB000208BADF83C00BCE03888218B88427FF4A0 +:10CFC00052AF9DF81C004FF0120A00281CD1606A75 +:10CFD000A8B1B878C0073FF446AF00E018E0BA68DF +:10CFE0000720CDE902B2CDF804B00090CDF810B022 +:10CFF000FB88BA88159800F071FA8DF81C00132090 +:10D0000030700120ADF8340093E00000540000209F +:10D010003988208B8142D2D19DF81C004FF0160A2E +:10D020000028A06B08D0E0B34FF6FF7000215F46E8 +:10D03000ADF808B0019027E068B1B978C907BED152 +:10D04000E18F0DAB0844821D03968DE80C024388E6 +:10D050008288018809E0B878C007BCD0BA680DABF7 +:10D0600003968DE80C02BB88FA881598FFF7F5F94E +:10D0700005005ED0072D72D076E0019005AA02A9C6 +:10D080002046FFF72BF90146E28FBDF808008242E7 +:10D0900001D00029F1D0E08FA16B084407800198EE +:10D0A000E08746E09DF81C004FF0180A40B1208B45 +:10D0B000C8B13888208321461598FFF798F938E0E1 +:10D0C00004F118000090237E012221461598FFF7F5 +:10D0D000A6F98DF81C000028EDD119203070012030 +:10D0E000ADF83400E7E7052521461598FFF77FF9ED +:10D0F0003AE0208800F40070ADF8200050452DD1B2 +:10D10000A08FA0F57F41FE3901D006252CE0D8F88C +:10D1100008004FF0160A48B1A063B8F80C10A187B8 +:10D120004FF6FF71E187A0F800B002E04FF6FF7004 +:10D13000A087BDF8200030F47F611AD07823002248 +:10D140000420159906F002F998F800002071208853 +:10D15000BDF82010084320800EE000E0072520885D +:10D16000BDF8201088432080208810F47F6F1CD0E9 +:10D170003AE02188814321809DF8380020B10EA932 +:10D180001598F9F759FA05469DF81C000028EBD0D0 +:10D1900086F801A001203070208B70809DF81C0063 +:10D1A00030710520ADF83400DEE7A18EE1B11898AA +:10D1B0000DAB0088ADF834002398CDE90304CDE928 +:10D1C0000139206B0090E36A179A1598FFF7FEF972 +:10D1D000054601208DF838000EA91598F9F72CFAAC +:10D1E00000B10546A4F834B094F8460040070AD5CB +:10D1F0002046FFF7A2F910F03E0F04D114F8460FB5 +:10D2000020F0040020701898BDF8341001802846E2 +:10D210009DE500B585B0042806D102208DF80000F8 +:10D2200088B26946F9F708FA05B000BD10B5384C68 +:10D230000B782268012B02D0022B2AD111E013783F +:10D240000BB1052B01D10423137023688A889A80BF +:10D250002268CB88D38022680B8913814989518148 +:10D260000DE08B8893802268CB88D38022680B895D +:10D2700013814B8953818B899381096911612168DD +:10D28000F9F7DAF9226800210228117003D000288A +:10D2900000D0812010BD832010BD806B002800D0FD +:10D2A000012070478178012909D10088B0F5205FFD +:10D2B00003D042F60101884201D1002070470720C7 +:10D2C0007047F0B587B0002415460E460746ADF806 +:10D2D000144010E0069801882980811DCDE90241A3 +:10D2E000072101940494009183884288018838467C +:10D2F00000F0F4F830B906AA05A93046FEF7EEFFB3 +:10D300000028E7D00A2800D1002007B0F0BD0000B7 +:10D310005400002010B58B7883B102789A4205D171 +:10D320000B885BB102E08B79091D4BB18B789A4277 +:10D33000F9D1B0F801300C88A342F4D1002010BD1F +:10D34000812010BD072826D012B1012A27D103E081 +:10D35000497801F0070102E04978C1F3C2010529CB +:10D360001DD2DFE801F00318080C12000AB10320F7 +:10D3700070470220704704280DD250B10DE00528F7 +:10D3800009D2801E022808D303E0062803D0032810 +:10D3900003D005207047002070470F207047812080 +:10D3A0007047C0B282060BD4000607D5FE48807ACB +:10D3B0004143C01D01EBD00080B270470846704762 +:10D3C0000020704770B513880B800B781C0625D59C +:10D3D000F54CA47A844204D843F010000870002071 +:10D3E00070BD956800F0070605EBD0052D78F54077 +:10D3F00065F304130B701378D17803F0030341EA4B +:10D40000032140F20123B1FBF3F503FB15119268F0 +:10D41000E41D00FB012000EBD40070BD906870BDDE +:10D4200037B51446BDF8041011809DF804100A06A3 +:10D430001ED5C1F30013DC49A568897A814208D85A +:10D44000FE2811D1C91DC9085A42284611F0B4FA64 +:10D450000AE005EBD00100F00702012508789540AD +:10D46000A843934018430870207820F010002070E3 +:10D470003EBD2DE9F0410746C81C0E4620F00300D2 +:10D48000B04202D08620BDE8F081C74D002034466E +:10D490002E60AF802881AA72E8801AE0E988491CD2 +:10D4A000E980810614D4E17800F0030041EA00200D +:10D4B00040F20121B0FBF1F201FB12012068FFF7FD +:10D4C00070FF2989084480B22881381A3044A0604E +:10D4D0000C3420784107E1D40020D4E72DE9FF4F38 +:10D4E00089B01646DDE9168A0F46994623F4404571 +:10D4F000084600F00DFB04000FD0099802F00EFB67 +:10D500000290207800060AD5A748817A02988142C5 +:10D5100005D887200DB0BDE8F08F0120FAE722463C +:10D5200001A90298FFF74EFF834600208DF80C00FA +:10D530004046B8F1070F1AD001222146FFF702FF3B +:10D540000028E7D12078400611D502208DF80C0084 +:10D55000ADF81070BDF80400ADF81200ADF814601D +:10D560001898ADF81650CDF81CA0ADF818005FEA79 +:10D57000094004D500252E46A84601270CE0217855 +:10D58000E07801F0030140EA012040F20121B0FB04 +:10D59000F1F2804601FB12875FEA494009D5B845A0 +:10D5A00007D1A178207901F0030140EA0120B042BF +:10D5B00001D3BE4201D90720ACE7A8191FFA80F9B0 +:10D5C000B94501D90D20A5E79DF80C0028B103A9A4 +:10D5D0000998F9F72FF800289CD1B84507D1A07811 +:10D5E0004FEA192161F30100A07084F804901A98A1 +:10D5F00000B10580199850EA0A0027D0199830B177 +:10D600000BEB06002A46199911F05FF90EE00BEBBF +:10D6100006085746189E099802F0ECFB2B46F61DAB +:10D62000B5B239464246009501F0D7FF224601A91E +:10D630000298FFF7C7FE9DF80400224620F0100074 +:10D640008DF80400DDE90110FFF7EAFE002061E734 +:10D650002DE9FF4FDFF8509182461746B9F80610C2 +:10D66000D9F8000001EB410100EB810440F20120F8 +:10D67000B2FBF0F185B000FB11764D46DDF84C8031 +:10D6800031460698FFF78DFE29682A898B46611A74 +:10D690000C3101441144AB8889B28B4202D88420FA +:10D6A00009B038E70699CDB2290603D5A90601D5F8 +:10D6B0000620F5E7B9F806C00CF1010C1FFA8CFC46 +:10D6C000A9F806C0149909B1A1F800C0A90602D5AD +:10D6D000C4F8088007E0104480B2A9F80800191ABD +:10D6E00001EB0B00A0602246FE200699FFF798FE92 +:10D6F000E77026712078390A61F30100320AA178B7 +:10D7000040F0040062F30101A17020709AF8020059 +:10D710006071BAF80000E08000262673280602D562 +:10D7200099F80A7000E00127A80601D54FF000081B +:10D730004D4600244FF007090FE0CDE9026801963D +:10D74000CDF800900496E9882046129B089AFFF7CE +:10D75000C5FE0028A4D1641CE4B2BC42EDD3002075 +:10D760009EE72DE9F047804600F0D2F9070005D08A +:10D77000002644460C4D40F2012919E00120BDE885 +:10D78000F087204600F0C4F90278C17802F0030265 +:10D7900041EA0222B2FBF9F309FB13210068FFF70B +:10D7A00000FE304486B201E0B8050020641CA4B23B +:10D7B000E988601E8142E4DCA8F10100E880288944 +:10D7C000801B288100203870D9E710B5144631B18C +:10D7D000491E218002F0A2F9A070002010BD012096 +:10D7E00010BD10B5D24904460088CA88904201D3C2 +:10D7F0000A2010BD096800EB400001EB800250795F +:10D80000A072D08820819178107901F0030140EA5C +:10D810000120A081A078E11CFFF7D4FD20612088C1 +:10D82000401C2080E080002010BD01210182704753 +:10D830002DE9FF4F85B04FF6FF788246A3F80080B0 +:10D8400048681F460D4680788DF8060048680088B5 +:10D85000ADF8040000208DF80A00088A0C88A04268 +:10D8600000D304462C8241E0288A401C2882701D87 +:10D870006968FFF74FFDB8BB3988414501D1601E8B +:10D8800038806888A04236D3B178307901F003013E +:10D8900040EA012901A9701DFFF73CFD20BB298941 +:10D8A00041452CD0002231460798FFF74BFDD8B9EF +:10D8B0002989494518D1E9680391B5F80AC0D6F815 +:10D8C00008B05046CDF800C002F094FADDF800C070 +:10D8D0005A460CF1070C1FFA8CFC4B460399CDF805 +:10D8E00000C001F044FE50B1641CA4B2204600F018 +:10D8F0000FF90600B8D1641E2C820A20D0E67C8085 +:10D900007079B871F088B8803178F07801F003014F +:10D9100040EA01207881A7F80C90504602F0FEF80A +:10D92000324607F10801FFF74DFD38610020B7E6E8 +:10D930002DE9FF4F87B081461C469246DDF860B066 +:10D94000DDF85480089800F0E3F805000CD0484654 +:10D9500002F0E4F82978090608D57549897A8142E8 +:10D9600004D887200BB0D6E50120FBE7CAF30906EF +:10D970002A4601A9FFF726FD0746149807281CD060 +:10D9800000222946FFF7DEFC0028EBD1287840066C +:10D9900013D501208DF808000898ADF80C00BDF8EB +:10D9A0000400ADF80E00ADF81060ADF8124002A909 +:10D9B0004846F8F73FFE0028D4D12978E87801F0EE +:10D9C000030140EA0121AA78287902F0030240EA23 +:10D9D0000220564507D0B1F5007F04D9611E81426F +:10D9E00001DD0B20BEE7864201D90720BAE7801B84 +:10D9F00085B2A54200D92546BBF1000F01D0ABF896 +:10DA00000050179818B1B9192A4610F05EFFB8F106 +:10DA1000000F0DD03E4448464446169F02F0FCF9E4 +:10DA20002146FF1DBCB232462B46009401F009FE90 +:10DA3000002097E72DE9F04107461D4616460846A7 +:10DA400000F066F804000BD0384602F067F8217841 +:10DA5000090607D53649897A814203D8872012E51D +:10DA6000012010E522463146FFF7ACFC65B1217874 +:10DA7000E07801F0030140EA0120B0F5007F01D811 +:10DA8000012000E0002028700020FCE42DE9F04196 +:10DA900007461D461646084600F03AF804000BD02B +:10DAA000384602F03BF82178090607D52049897AE3 +:10DAB000814203D88720E6E40120E4E4224631468F +:10DAC000FFF7AEFCFF2D14D02178E07801F00302BF +:10DAD00040EA022040F20122B0FBF2F302FB130005 +:10DAE00015B900F2012080B2E070000A60F3010174 +:10DAF00021700020C7E410B50C4600F009F828B1E9 +:10DB0000C18821804079A070002010BD012010BD87 +:10DB10000749CA88824209D340B1096800EB400036 +:10DB20006FF00B0202EB8000084470470020704742 +:10DB3000B805002010B505F0BCFEFAF7BFFA05F0F5 +:10DB400079FDBDE8104005F007BE70B50346002022 +:10DB500002466FF02F050EE09C5CA4F130060A2E01 +:10DB600002D34FF0FF3070BD00EB800005EB4000AA +:10DB7000521C2044D2B28A42EED370BD30B50A2482 +:10DB80000AE0B0FBF4F304FB13008D18303005F805 +:10DB9000010C521E1846D2B2002AF2D130BD30B567 +:10DBA00000234FF6FF7510E0040A44EA002084B217 +:10DBB000C85C6040C0F30314604005EA0034444090 +:10DBC000E0B25B1C84EA40109BB29342ECD330BDC0 +:10DBD0000178406829B190F8041190F8720038B9C2 +:10DBE00001E001F0EFB919B1042901D0012070471B +:10DBF0000020704770B50C460546062101F0C8FFAD +:10DC0000606008B1002006E00721284601F0C0FF4F +:10DC1000606018B101202070002070BD022070BD2E +:10DC20002DE9FC470C4606466946FFF7E3FF00284E +:10DC30007DD19DF8000050B106F016FEB0427CD0B8 +:10DC40002146304609F0B8FB002873D12DE00CF0D6 +:10DC500067F9B04271D0214630460FF024FA00280F +:10DC600068D1019D95F8C80022E0012000E0002065 +:10DC7000804695F835004FF0010A4FF00009F0B1E9 +:10DC800095F8360080071AD584F8019084F800A032 +:10DC900084F80290A68095F83710A171298F218110 +:10DCA000698F618185F8359044E0019D95F8040104 +:10DCB00058350028DBD1A87E0028D8D0D5E73046DB +:10DCC00002F0AAF8070000D1FFDF384601F0BAFAE7 +:10DCD00040B184F801900E212170A680E08084F884 +:10DCE00002A027E0304602F085F8070000D1FFDFF0 +:10DCF000B8F1000F21D0384601F0FBFAB8B19DF819 +:10DD0000000038B90198D0F8F0004188B14201D143 +:10DD100080F80090304606F046FC84F801900B2114 +:10DD2000217084F80290A680E97EA17100E004E0F1 +:10DD300085F81A900120BDE8FC870020FBE71CB5A0 +:10DD40006946FFF757FF00B1FFDF684601F046F96B +:10DD5000FE4900208968A1F8CA001CBD2DE9FC41DC +:10DD600004460E46062001F0BBFE0546072001F0E2 +:10DD7000B7FE2844C7B20025A8463E4417E02088D5 +:10DD8000401C80B22080B04202D34046A4F80080FC +:10DD900080B2B84204D3B04202D20020BDE8FC8178 +:10DDA0006946FFF727FF0028F8D06D1CEDB2AE42A0 +:10DDB000E5D84FF6FF7020801220EFE738B54FF618 +:10DDC000FF70ADF800000DE00621BDF8000001F085 +:10DDD000F1FE04460721BDF8000001F0EBFE0CB196 +:10DDE00000B1FFDF00216846FFF7B8FF0028EBD045 +:10DDF00038BD2DE9F04106F047FC0AF0C7FED44CCF +:10DE0000042710206780A0804FF6FF76E6832684E3 +:10DE10000025D0A0257001680079A4F13E02A5710B +:10DE200042F8451FE11D1071A01D0FF06CFA25731B +:10DE30001B21E1814FF4A47020826182A082032221 +:10DE4000A2752046E775018341833E38A2830570A1 +:10DE50004680BE480C300570A4F110000570468065 +:10DE6000BDE8F08170B5B94C0D466060217006F0D8 +:10DE700098FBFFF7A3FFFFF7BCFF20780DF0B0FA87 +:10DE80000CF04EFA217860680FF0E1F920780AF082 +:10DE9000F9F8284607F08BFE06F026FD2178606829 +:10DEA00009F079FBBDE870400AF070BE10B501249E +:10DEB0000AB1002010BD21B1012903D00024204661 +:10DEC00010BD02210BF066FEF9E72DE9F0470400D2 +:10DED00000D1FFDF9E48022120308146FFF73EFF40 +:10DEE00000B1FFDF9A4D0620B5F8208001F0F8FD63 +:10DEF0000646072001F0F4FD3044C6B2701CC7B2DC +:10DF0000288CB04211D120460BF094FF48BB2878F2 +:10DF100078B300266670132020702021A01C10F01A +:10DF200053FD0220A0702E7020E0B8421AD1204686 +:10DF300006F052FCE8B12078132817D1A0783C28CD +:10DF400014D1A088072101F023FE050000D1FFDFD6 +:10DF5000288806F028FBA088072101F02BFE00B1DD +:10DF6000FFDF03E02146FFF75BFE10B10120BDE8B3 +:10DF7000F087FFE702214846FFF7F0FE10B9298C31 +:10DF80004145BDD10020F2E710B500F0C3FF08B154 +:10DF90000C2010BD0AF031FE002010BD10B5044663 +:10DFA000007818B1012801D0122010BD00F0C3FF85 +:10DFB00020B10AF07FFE08B10C2010BD207800F0DF +:10DFC00078FFE21D04F11703611CBDE810400AF060 +:10DFD00029BE10B50446007818B1012801D01220DE +:10DFE00010BD00F097FF08B10C2010BD207800F0A4 +:10DFF00060FF611C0AF0DDFD08B1002010BD0720A4 +:10E0000010BD10B50AF05AFE08B1002010BD302036 +:10E0100010BD10B5044600F08EFF08B10C2010BDF5 +:10E0200020460AF043FE002010BD10B500F083FF2B +:10E0300020B10AF03FFE08B10C2010BD0AF028FE06 +:10E04000002010BDFF2181704FF6FF7181803F4994 +:10E0500049680A7882718A88028149884181012150 +:10E0600041700020704710B510F1080F17D00CDC7C +:10E0700010F1280F13D010F1140F10D010F1100F61 +:10E080000DD010F10C0F08D109E010F1040F06D0EB +:10E0900028B1032803D0042801D0122010BD05F0B8 +:10E0A00014FD002010BD10B5134601220BF08AF9B3 +:10E0B000002010BD10B504460DF005FC052804D065 +:10E0C00020460DF07CF9002010BD0C2010BD10B5CD +:10E0D000044600F030FF08B10C2010BD214600209E +:10E0E00006F0D3FA002010BD10B504460DF0F0F98B +:10E0F00050B107F0AAFF38B1207807F08AFD2078E8 +:10E100000CF0ACFA002010BD0C2010BD10B5044678 +:10E1100000F011FF08B10C2010BD2146012006F0CF +:10E12000B4FA002010BD38B504464FF6FF70ADF8C4 +:10E130000000A079E17988421CD021791F2919D8E3 +:10E1400061791F2916D80022114607E05C000020E3 +:10E1500002060020FFFFFFFF1F0000000FF026FE59 +:10E1600040B90022E07911460FF020FE10B9207A64 +:10E17000072801D9122038BD07F073FF60B90DF0F0 +:10E18000A2FB48B900216846FFF7E8FD20B1204610 +:10E1900005F0BEFB002038BD0C2038BD2DE9FC4148 +:10E1A000817805461A2925D00EDC16292DD2DFE804 +:10E1B00001F02C2C2C2C2C212C2C2C2C2C2C2C2C11 +:10E1C0002C2C2C2C2C2121212A291ED00BDCA1F156 +:10E1D0001E010C2919D2DFE801F0181818181818B8 +:10E1E00018181818180D3A3904290ED2DFE801F072 +:10E1F0000D020D022888B0F5706F06D2012769461E +:10E20000FFF7F8FC18B10220C8E51220C6E59DF81A +:10E21000000000F055FE019C08B1EC3401E004F56B +:10E22000B3749DF8000000F04BFE019E08B1ED367E +:10E2300001E006F267166846FFF7CAFC08B12078CD +:10E2400008B10C20AAE52770A8783070684600F065 +:10E25000C5FE0020A2E57CB50D466946FFF7CAFC65 +:10E26000002618B12E602E7102207CBD9DF80000A2 +:10E2700000F026FE019C9DF80000583400F020FEBE +:10E28000DDF8040084F83E6081682960017B297113 +:10E2900094F83E100029F5D100207CBD10B540B1A6 +:10E2A0000478406813B1B0F84A0003E0B0F84C00BD +:10E2B00000E0FB201B2908D3814206D8B2F5A47FD9 +:10E2C00003D340F64800824201D9122010BD00203D +:10E2D00010BD2DE9FC41044600886946FFF78AFC21 +:10E2E000002843D12289E18801236846FFF7D6FF41 +:10E2F00000283BD1A288618800236846FFF7CEFF43 +:10E30000070033D19DF80000019DB846012640B1B9 +:10E3100085F88961019890F8C80105F5C47538B988 +:10E3200013E085F8FD60019890F82001FC3508B1F4 +:10E330003A2718E0E08868802089A8806088E88013 +:10E34000A08828810122019909E0E088688020895D +:10E35000A8806088E880A08828810199002228464A +:10E360000BF03CF92E7085F80180384616E530B583 +:10E3700085B00D460446008803A9FFF73BFC002842 +:10E3800048D19DF80C0040B100220499E388B1F80F +:10E390004A00984203D2181A02E00122F5E7002051 +:10E3A0006880B1F84C006388984201D2181A00E0E6 +:10E3B0000020A8800020009001900290E088ADF835 +:10E3C00002002089ADF804006088ADF80600A0883E +:10E3D000ADF8080068460BF001F92089BDF804107B +:10E3E000401AE880A088BDF80810401A2881E0880B +:10E3F000BDF80210411A6888814200DD0846688035 +:10E400006088BDF80610411AA888814200DD0846E0 +:10E41000A880002005B030BD10B5044600F08BFD8B +:10E4200020B10AF047FC08B10C2010BD207800F0A4 +:10E4300040FDE279611C0AF082FD08B1002010BDA8 +:10E44000022010BD7CB5044600886946FFF7D2FB68 +:10E4500000282FD1A17801B90321E27802B9032263 +:10E460009DF8005000240123002D019D06D085F861 +:10E470009331019D95F8DC512DBB1CE085F80731E7 +:10E48000019D95F82C513DB9019D95F806511DB996 +:10E49000019D95F87B500DB13A2008E0019D85F86B +:10E4A0000631019B83F80811019981F8092101992E +:10E4B00081F807417CBD019D95F892511DB9019DE0 +:10E4C00095F87B500DB13A2008E0019D85F8923116 +:10E4D000019B83F89411019981F89521019981F8A4 +:10E4E00093417CBD8178CA0802D1C278D30801D09B +:10E4F00012207047490701D4510701D511207047F8 +:10E50000A0E710B5044600F0F8FC08B10C2010BDDF +:10E51000A1791220012904D019B1022901D00329BF +:10E52000F5D1217809B10129F1D1E17929B1012988 +:10E5300003D0022901D00329E9D1618843F6FD7295 +:10E540000B1F30209342E2D2A3881B1F9342DED2DE +:10E55000F9484180A1888180A0790BF0D3FFE07950 +:10E560000CF00CF82078012805D00120BDE81040FF +:10E5700000210CF036B80220F8E710B5122201286D +:10E5800002D008B1104610BD09B10129FAD1012805 +:10E5900007D00DF098F9052811D0BDE810400CF017 +:10E5A000C7BE0BF0A5FF40B10BF0B4FFE248818875 +:10E5B0004088BDE810400CF097BF122010BD0C2021 +:10E5C00010BD2DE9F047DC4E92460C46B0F84C20C9 +:10E5D0000546F1891046814200D20846074695F863 +:10E5E0005210104600F080FC318A814200D2084669 +:10E5F000B5F84A208046718A1046B146814200D261 +:10E600000846064695F85110104600F06DFCB9F822 +:10E610001410814200D208464FF4A4721B2E01D080 +:10E62000904203D11B2F0DD090450BD0E780A4F86A +:10E6300008806680A0805246294620460AF0CEFF18 +:10E640000120207093E430B5428840F67B43911F4F +:10E65000994219D281888C1F9C4215D28A4213D8C4 +:10E66000C288B2F5FA7F0FD2038940F67745A3F14D +:10E670000A04AC4208D2521C4A43B2EB830F03DABD +:10E6800041898089814201D9302030BD002030BDD0 +:10E690001FB5018843F6FD720B1F934205D24388D4 +:10E6A0001C1F944201D28B4202D9302004B010BD0D +:10E6B000017911B1012910D107E0417929B101296E +:10E6C00003D0022901D0032907D1017B39B10129E7 +:10E6D00005D0022903D0032901D01220E6E7C18921 +:10E6E000ADF80210018AADF80410418AADF80610A9 +:10E6F000818AADF80810C18AADF80A10008BADF818 +:10E700000C006846FFF79FFFD0E72DE9F04385B086 +:10E710000546AFF2C051D1E90086FFF7B9FF0028E6 +:10E7200011D10DF0D0F805280CD00DF0CCF804284C +:10E7300008D0814F387828B90BF0F2FBA0F57F4163 +:10E74000FF3903D00C2005B0BDE8F0837A4801AA58 +:10E750003E3801907948029077480621103803909E +:10E7600004A801F0E3F904007ED003210AF07BFD48 +:10E770007148B946018BA4F84A10418BA4F84C109B +:10E78000428B018BFB7D0093BB7D208801F0BBFA9F +:10E7900000B1FFDF208805F005FF218804F10E009D +:10E7A00000F0D3FB66A004F112070068009003217B +:10E7B000684604F073FB002069460A5C3A54401C2A +:10E7C000C0B20328F9D3288A6080688AA080A88A0A +:10E7D000E08094F8522094F85110B9F81C000CF025 +:10E7E00009FF0146A06220460CF012FF002784F8C2 +:10E7F0005E7084F85F70687900F05BFB6076D5F836 +:10E800000600C4F81A006889E083C4F808802673FB +:10E81000012084F8F800024604F1FC012046FFF7CD +:10E82000D0FE8DF800700121684604F037FB9DF89A +:10E83000000000F00701C0F3C1021144C0F3401012 +:10E8400008448DF80000401D2076092801D20830C8 +:10E850002076002120460AF006FD287B0BF052FEB0 +:10E8600069792879AA1D00E00CE00BF023FE58B16D +:10E870000BF050FE69792879AA1D0BF08AFE06007C +:10E8800004D010E009205EE712260CE021460320A8 +:10E890000BF0A7FE060006D16A88298820460CF0F6 +:10E8A000DBFD060008D0208805F07DFE20880621CB +:10E8B00001F080F900B1FFDF304644E738B51E4C67 +:10E8C000207870B90CF0FFFF052805D00BF028FB6D +:10E8D000A0F57F41FF3904D068460CF033FE10B13B +:10E8E00013E00C2038BD0098008805F05CFE00980D +:10E8F0000621008801F05EF900B1FFDF01202070E1 +:10E900000E480C380078FCF7FDFF002038BD70B5CC +:10E910000546FFF798FE002815D12888062101F04A +:10E9200037F904000ED000F04DFB58B1D4F8F000D8 +:10E93000017869B908E000000206002068000020A4 +:10E9400011223300022070BDD4F83C11097809B1BE +:10E950003A2070BD05218171D4F8F01000200881A3 +:10E96000D4F8F010A8884881D4F8F010E88888819D +:10E97000D4F8F0102889C881D4F8F00002894189C0 +:10E980008A4204D88279082A01D88A4201D3122007 +:10E9900070BD29884180D4F8F01002200870002052 +:10E9A00070BD3EB504460AF0DBFCB0B1FC48012561 +:10E9B000A0F13E028571236842F8453F237900218A +:10E9C000137181716946062001F06BF800B1FFDF19 +:10E9D000684601F044F810B10EE012203EBDBDF8CB +:10E9E0000440029880F8F850684601F038F818B9E9 +:10E9F000BDF80400A042F4D100203EBD70B505462C +:10EA00000088062101F0C4F8040007D000F0DAFA0B +:10EA100020B1D4F8F010087830B901E0022070BDC0 +:10EA2000D4F83C01007808B13A2070BD9420005D14 +:10EA300010F0010F18D0D5F802004860D5F8060094 +:10EA4000886054F8F00F698910228181206805F1EF +:10EA50000C010E300FF039FF216803200870216887 +:10EA600028884880002070BD0C2070BD10B5044679 +:10EA700007F0F7FA08B10C2010BD6079032824D8FC +:10EA8000A179012921D8A17B03291ED8617BE1B19D +:10EA900007291AD82179052917D2DFE801F0030CDC +:10EAA000030303002288202A0FD361888A420CD8EE +:10EAB000B1F5804F09D805F071FFB9492079487048 +:10EAC0002046BDE8104006F031B8122010BD10B548 +:10EAD0001F2801D9122010BD06F0A2F8002010BD99 +:10EAE00010B51F2801D9122010BD06F088F80020AB +:10EAF00010BD7CB5012802D000285DD070E005F083 +:10EB0000FDFE00286CD005F02FFF002868D007F02C +:10EB1000A8FA002856D105F0A7FEA0F57F41FF39DD +:10EB200050D105F0B9FF9E4E707848B1012807D04A +:10EB3000042805D0002007F06FF8D0B3FFDF4DE0C8 +:10EB40000022072101A800F0F1FF040032D095480F +:10EB50000321846020460AF013FB204606F065F985 +:10EB60008F4D0121288BA4F84A00688BA4F84C0033 +:10EB7000B08B07F019F90146A0620022204606F08A +:10EB800052FC6A8B298BF07D0090B37D208801F0C8 +:10EB9000BAF800B1FFDF208805F004FD204607F039 +:10EBA0003BF800B1FFDF002204F5C4712046FFF7F7 +:10EBB00008FD13E009207CBD06F016FC044606F0B3 +:10EBC000CFFF08B10C207CBD44B1208805F0EBFCE0 +:10EBD0002088072100F0EEFF00B1FFDF00207CBDA0 +:10EBE00012207CBD70B50D46072100F0D1FF040056 +:10EBF00003D094F8690110B10AE0022070BD94F8C6 +:10EC00006400142801D0152802D194F8AA0108B193 +:10EC10000C2070BD1022294604F5B5700FF055FE8A +:10EC2000012084F86901002070BD10B5072100F0B3 +:10EC3000AFFF18B190F8691111B107E0022010BDC3 +:10EC400090F86410142903D0152901D00C2010BDB0 +:10EC5000022180F86911002010BD2DE9FC410C460D +:10EC60004BF68032122194421DD8E4B16946FEF77A +:10EC7000C1FF002815D19DF8000000F021F9019E88 +:10EC80009DF80000583600F01BF9019DAD1C2F883F +:10EC90002246394630460AF036FA2888B842F6D17C +:10ECA0000020BDE8FC810846FBE77CB504460088EF +:10ECB0006946FEF79FFF002817D19DF8000000F07D +:10ECC000FFF8019D9DF80000583500F0F9F87F210C +:10ECD0000198297269720021A972A17800F82C1F8D +:10ECE000E17841702179817000207CBD1CB50C4613 +:10ECF0006946FEF77FFF00280AD19DF8000000F06A +:10ED0000DFF8019890F8720000B101202070002017 +:10ED10001CBD1CB50C466946FEF76CFF002809D1E6 +:10ED20009DF8000000F0CCF8019890F82C00012824 +:10ED300001D00C201CBD9DF8000000F0C1F8019826 +:10ED400090F86000207000201CBD70B50D4616467E +:10ED5000072100F01DFF38B381880124C388428851 +:10ED600004EB4104AC4217D842F210746343A41080 +:10ED70006243B3FBF2F2521E94B24FF4FA72944221 +:10ED800000D91446A54200D22C46491C641CB4FB91 +:10ED9000F1F24A43521E91B290F8962142B906E030 +:10EDA000020600205C000020FFE7022070BD018405 +:10EDB0003180002070BD10B50C46072100F0E8FE40 +:10EDC00048B180F8D74024B190F8D51009B107F0C8 +:10EDD00008F8002010BD022010BD017889B14178EB +:10EDE00079B141881B290CD381881B2909D3C1889B +:10EDF000022906D3814902684A6540688865002077 +:10EE000070471220704710B504460CF0EFFB204607 +:10EE100006F099FF002010BD2DE9F04115460F4680 +:10EE200006460122114638460CF0E4FB0446012157 +:10EE3000384606F0B9FF844200D20446012130462C +:10EE400000F043F806460121002000F03EF831189A +:10EE5000012096318C4206D901F19600611AB1FB6E +:10EE6000F0F0401C80B228800020BDE8F08110B591 +:10EE7000044600F060F808B10C2010BD601C0AF0D8 +:10EE800035F8207800F0010005F08BFD207800F0C7 +:10EE900001000BF03BFB002010BD10B5044607F04D +:10EEA000E0F808B10C2010BD204605F0C9FE002096 +:10EEB00010BD18B1022801D0012070470020704712 +:10EEC00008B1002070470120704710B5012904D017 +:10EED000022905D0FFDF204610BDC000503001E000 +:10EEE00080002C3084B2F6E7022903D0C0007030D5 +:10EEF00080B2704780003C30FAE710B50CF0E3FCBC +:10EF0000042805D00CF0DFFC052801D0002010BD3E +:10EF1000012010BD10B5FFF7F0FF10B10BF06AFB38 +:10EF200028B907F09EF820B105F017FD08B10120BF +:10EF300010BD002010BD10B5FFF7DFFF18B907F0B6 +:10EF400090F8002800D0012010BD2DE9FE430025D7 +:10EF50000F4680460A260421404603F0C8FF40467B +:10EF60000AF0DCF9062000F0BBFD044615E0694616 +:10EF7000062000F096FD0AE0BDF80400B84206D075 +:10EF80000298042241460E300FF073FC50B16846DF +:10EF900000F065FD0500EFD0641E002C06DD002D9D +:10EFA000E5D005E040460AF0C3F9F5E705B9FFDF13 +:10EFB000D8F800000AF0B1F8761E01D00028CAD0B7 +:10EFC000BDE8FE8390F8C81090F8720020B919B11E +:10EFD000042901D0012070470020704701780029E2 +:10EFE0000AD0416891F8D520002A05D0002281F886 +:10EFF000D520406806F0F5BE70470000C40500202B +:10F0000030B5058825F4004421448CB24FF400410A +:10F0100094420AD2121B92B21B339A4201D2A943E4 +:10F0200007E005F40041214303E0A21A92B2A9438C +:10F030001143018030BD0844083050434A31084430 +:10F0400080B2704770B51D4616460B4604462946E9 +:10F050003046049AFFF7EFFF0646B34200D2FFDFC7 +:10F06000282120460FF0D2FC4FF6FF70A082283EE8 +:10F07000B0B265776080B0F5004F00D9FFDF6188DE +:10F0800005F13C00814200D2FFDF60880835401B5B +:10F09000343880B220801B2800D21B202080002022 +:10F0A000A07770BD8161886170472DE9F05F0D46E2 +:10F0B000C188044600F12809008921F4004620F4A3 +:10F0C000004800F062FB10B10020BDE8F09F4FF057 +:10F0D000000A4FF0010BB0450CD9617FA8EB060088 +:10F0E000401A0838854219DC09EB0600002105802A +:10F0F00041801AE06088617F801B471A083F0DD469 +:10F100001B2F00DAFFDFBD4201DC294600E0B9B267 +:10F11000681A0204120C04D0424502DD84F817A0DC +:10F12000D2E709EB06000180428084F817B0CCE7F3 +:10F1300070B5044600F12802C088E37D20F4004049 +:10F140002BB110440288438813448B4201D2002023 +:10F1500070BD00258A4202D30180458008E0891AEB +:10F160000904090C418003D0A01D00F01EFB08E03B +:10F17000637F00880833184481B26288A01DFFF7BE +:10F180003FFFE575012070BD70B5034600F128040E +:10F19000C588808820F400462644A84202D1002079 +:10F1A000188270BD98893588A84206D3401B75889F +:10F1B0002D1A2044ADB2C01E05E02C1AA5B25C7F0A +:10F1C00020443044401D0C88AC4200D90D809C89FD +:10F1D00024B1002414700988198270BD0124F9E754 +:10F1E00070B5044600F12801808820F400404518DD +:10F1F000208A002825D0A189084480B2A0812988CE +:10F200006A881144814200D2FFDF2888698800267D +:10F210000844A189884212D1A069807F2871698839 +:10F2200019B1201D00F0C1FA08E0637F2888083377 +:10F23000184481B26288201DFFF7E2FEA681268273 +:10F24000012070BD2DE9F0414189878800260446E0 +:10F2500000F12805B94218D004F10A0821F4004051 +:10F260002844418819B1404600F09FFA08E0637FC6 +:10F2700000880833184481B262884046FFF7C0FE18 +:10F28000761C6189B6B2B942E8D13046BDE8F0815A +:10F290002DE9F04104460B4627892830A68827F43B +:10F2A0000041B4F80A8001440D46B74201D1002064 +:10F2B000ECE70AB1481D106023B1627F691D184652 +:10F2C0000FF003FB2E88698804F1080021B18A1928 +:10F2D00096B200F06AFA06E0637F628808339919F3 +:10F2E00089B2FFF78DFE474501D120896081304604 +:10F2F000CCE78188C088814201D10120704700207D +:10F30000704701898088814201D101207047002027 +:10F31000704770B58588C38800F1280425F4004241 +:10F3200023F4004114449D421AD08389058A5E1952 +:10F3300025886388EC18A64214D313B18B4211D3ED +:10F340000EE0437F08325C192244408892B2801A52 +:10F3500080B22333984201D211B103E08A4201D135 +:10F36000002070BD012070BD2DE9F0478846C1889E +:10F370000446008921F4004604F1280720F40045E2 +:10F3800007EB060900F001FA002178BBB54204D969 +:10F39000627FA81B801A002503E06088627F801BC3 +:10F3A000801A083823D4E28962B1B9F80020B9F88C +:10F3B00002303BB1E81A2177404518DBE089384438 +:10F3C000801A09E0801A217740450ADB607FE189D5 +:10F3D0000830304439440844C01EA4F81280BDE807 +:10F3E000F087454503DB01202077E7E7FFE76182EF +:10F3F0000020F4E72DE9F74F044600F12805C08806 +:10F40000884620F4004A608A05EB0A0608B14045A8 +:10F4100002D20020BDE8FE8FE08978B13788B6F8C7 +:10F42000029007EB0901884200D0FFDF207F4FF0F8 +:10F43000000B50EA090106D088B33BE00027A07F0B +:10F44000B9463071F2E7E18959B1607F294408304B +:10F4500050440844B4F81F1020F8031D94F82110FC +:10F460008170E28907EB080002EB0801E18130803E +:10F47000A6F802B002985F4650B1637F3088083327 +:10F48000184481B26288A01DFFF7BAFDE78121E030 +:10F49000607FE18908305044294408442DE0FFE7AB +:10F4A000E089B4F81F102844C01B20F8031D94F80D +:10F4B0002110817009EB0800E28981B202EB08009B +:10F4C000E081378071800298A0B1A01D00F06DF935 +:10F4D000A4F80EB0A07F401CA077A07D08B1E08802 +:10F4E000A08284F816B000BFA4F812B084F817B058 +:10F4F00001208FE7E0892844C01B30F8031DA4F8E1 +:10F500001F10807884F82100EEE710B5818800F1A3 +:10F51000280321F400442344848AC288A14212D0E3 +:10F52000914210D0818971B9826972B11046FFF79A +:10F53000E8FE50B91089283220F4004010441979AF +:10F540000079884201D1002010BD184610BD00F19D +:10F550002803407F08300844C01E1060088808B99E +:10F56000DB1E136008884988084480B270472DE983 +:10F57000F04100F12806407F1C46083090464318B1 +:10F5800008884D88069ADB1EA0B1C01C80B290424C +:10F5900014D9801AA04200DB204687B298183A4658 +:10F5A00041460FF066F9002816D1E01B84B2B8443A +:10F5B000002005E0ED1CADB2F61EE8E7101A80B29F +:10F5C0000119A94206D8304422464146BDE8F0411F +:10F5D0000FF04FB94FF0FF3058E62DE9F04100F140 +:10F5E0002804407F1E4608309046431800250888AE +:10F5F0004F88069ADB1E90B1C01C80B2904212D98F +:10F60000801AB04200DB304685B299182A4640463F +:10F610000FF05BF9701B86B2A844002005E0FF1CC8 +:10F62000BFB2E41EEAE7101A80B28119B94206D8C7 +:10F630002118324640460FF048F9A81985B22846ED +:10F6400024E62DE9F04100F12804407F1E460830F1 +:10F6500090464318002508884F88069ADB1E90B113 +:10F66000C01C80B2904212D9801AB04200DB3046F2 +:10F6700085B298182A4641460FF027F9701B86B2CA +:10F68000A844002005E0FF1CBFB2E41EEAE7101A00 +:10F6900080B28119B94206D82044324641460FF063 +:10F6A00014F9A81985B22846F0E5401D704710B539 +:10F6B000044600F12801C288808820F400431944E0 +:10F6C000904206D0A28922B9228A12B9A28A904217 +:10F6D00001D1002010BD0888498831B1201D00F0FB +:10F6E00064F800202082012010BD637F6288083307 +:10F6F000184481B2201DFFF783FCF2E70021C1818D +:10F7000001774182C1758175704703881380C28972 +:10F7100042B1C28822F4004300F128021A440A6070 +:10F72000C08970470020704710B50446808AA0F554 +:10F730007F41FF3900D0FFDFE088A082E08900B17F +:10F740000120A07510BD4FF6FF71818200218175E7 +:10F75000704710B50446808AA0F57F41FF3900D17B +:10F76000FFDFA07D28B9A088A18A884201D10020AE +:10F7700010BD012010BD8188828A914201D1807D17 +:10F7800008B1002070470120704720F4004221F4A6 +:10F7900000439A4207D100F4004001F4004188423E +:10F7A00001D0012070470020704730B50446008822 +:10F7B0000D4620F40040A84200D2FFDF21884FF41C +:10F7C000004088432843208030BD70B50C000546BA +:10F7D00009D0082C00D2FFDF1DB1A1B2286800F0CB +:10F7E00044F8201D70BD0DB100202860002070BDC0 +:10F7F0000021026803E093881268194489B2002A44 +:10F80000F9D100F032B870B500260D46044608293B +:10F8100000D2FFDF206808B91EE004462068818816 +:10F82000A94202D001680029F7D181880646A94281 +:10F8300001D100680DE005F1080293B2002299425F +:10F8400009D32844491B026081802168096821602E +:10F850000160206000E00026304670BD00230B6090 +:10F860008A8002680A600160704700234360021DBD +:10F87000018102607047F0B50F4601884088154647 +:10F880000C181E46AC4200D3641B3044A84200D979 +:10F89000FFDFA019A84200D9FFDF3819F0BD2DE91C +:10F8A000F041884606460188408815460C181F46D8 +:10F8B000AC4200D3641B3844A84200D9FFDFE019F2 +:10F8C000A84200D9FFDF70883844708008EB04003C +:10F8D000BDE8F0812DE9F041054600881E46174637 +:10F8E000841B8846BC4200D33C442C80688830444A +:10F8F000B84200D9FFDFA019B84200D9FFDF6888FD +:10F900003044688008EB0400E2E72DE9F041068806 +:10F910001D460446701980B2174688462080B842BA +:10F9200001D3C01B20806088A84200D2FFDF70197D +:10F93000B84200D9FFDF6088401B608008EB0600FA +:10F94000C6E730B50D460188CC18944200D3A41AFE +:10F950004088984200D8FFDF281930BD2DE9F041DA +:10F96000C84D04469046A8780E46A04200D8FFDF56 +:10F9700005EB8607B86A50F8240000B1FFDFB868CD +:10F98000002816D0304600F044F90146B868FFF769 +:10F990003AFF05000CD0B86A082E40F8245000D376 +:10F9A000FFDFB9484246294650F82630204698479E +:10F9B0002846BDE8F0812DE9F8431E468C19914692 +:10F9C0000F460546FF2C00D9FFDFB14500D9FFDF08 +:10F9D000E4B200954DB300208046E81C20F00300FF +:10F9E000A84200D0FFDF4946DFF89892684689F8C0 +:10F9F000001089F8017089F8024089F8034089F8FD +:10FA0000044089F8054089F8066089F80770414686 +:10FA100000F008F9002142460F464B460098C01CF2 +:10FA200020F00300009012B10EE00120D4E703EBB8 +:10FA30008106B062002005E0D6F828C04CF820709E +:10FA4000401CC0B2A042F7D30098491C00EB8400D0 +:10FA5000C9B200900829E1D3401BBDE8F88310B576 +:10FA6000044603F08FFD08B1102010BD2078854AB0 +:10FA7000618802EB800092780EE0836A53F82130AF +:10FA800043B14A1C6280A180806A50F82100A060C6 +:10FA9000002010BD491C89B28A42EED86180052041 +:10FAA00010BD70B505460C46084603F06BFD08B165 +:10FAB000102070BD082D01D3072070BD25700020D7 +:10FAC000608070BD0EB56946FFF7EBFF00B1FFDF48 +:10FAD0006846FFF7C4FF08B100200EBD01200EBD2F +:10FAE00010B50446082800D3FFDF6648005D10BD4E +:10FAF0003EB5054600246946FFF7D3FF18B1FFDF86 +:10FB000001E0641CE4B26846FFF7A9FF0028F8D0C2 +:10FB10002846FFF7E5FF001BC0B23EBD5949897872 +:10FB2000814201D9C0B27047FF2070472DE9F041F2 +:10FB3000544B062903D007291CD19D7900E00025EC +:10FB400000244FF6FF7603EB810713F801C00AE0AB +:10FB50006319D7F828E09BB25EF823E0BEF1000FEE +:10FB600004D0641CA4B2A445F2D8334603801846DE +:10FB7000B34201D100201CE7BDE8F041EEE6A0F55C +:10FB80007F43FF3B01D0082901D300207047E5E601 +:10FB9000A0F57F42FF3A0BD0082909D2394A937861 +:10FBA000834205D902EB8101896A51F82000704730 +:10FBB000002070472DE9F04104460D46A4F57F4131 +:10FBC00043F20200FF3902D0082D01D30720F0E6EE +:10FBD0002C494FF000088A78A242F8D901EB85063B +:10FBE000B26A52F82470002FF1D0274839462030ED +:10FBF00050F8252020469047B16A284641F82480D5 +:10FC000000F007F802463946B068FFF727FE0020EB +:10FC1000CFE61D49403131F810004FF6FC71C01C91 +:10FC2000084070472DE9F843164E884605460024E3 +:10FC30002868C01C20F0030028602046FFF7E9FF79 +:10FC4000315D4843B8F1000F01D0002200E02A687E +:10FC50000146009232B100274FEA0D00FFF7B5FDD3 +:10FC60001FB106E001270020F8E706EB8401009AA7 +:10FC70008A602968641C0844E4B22860082CD7D341 +:10FC8000EBE600002406002008EE010070B50E46E9 +:10FC90001D46114600F0D4F804462946304600F0CF +:10FCA000D8F82044001D70BD2DE9F04190460D4666 +:10FCB00004004FF0000610D00027E01C20F00300E5 +:10FCC000A04200D0FFDFDDB141460020FFF77DFDFF +:10FCD0000C3000EB850617B112E00127EDE7614F0C +:10FCE00004F10C00A9003C602572606000EB850007 +:10FCF000206060680EF08AFE41463868FFF765FDB7 +:10FD00003046BDE8F0812DE9FF4F564C804681B06A +:10FD100020689A46934600B9FFDF2068027A424580 +:10FD200003D9416851F8280020B143F2020005B020 +:10FD3000BDE8F08F5146029800F082F886B258462E +:10FD40000E9900F086F885B27019001D87B2206800 +:10FD5000A14639460068FFF756FD04001FD06780B2 +:10FD600025802946201D0E9D07465A4601230095F1 +:10FD7000FFF768F92088314638440123029ACDF80C +:10FD800000A0FFF75FF92088C1193846FFF78AF90C +:10FD9000D9F800004168002041F82840C7E7042056 +:10FDA000C5E770B52F4C0546206800B9FFDF206815 +:10FDB000017AA9420ED9426852F8251051B10023A8 +:10FDC00042F825304A880068FFF748FD2168002086 +:10FDD0000A7A08E043F2020070BD4B6853F8203005 +:10FDE00033B9401CC0B28242F7D80868FFF700FD63 +:10FDF000002070BD70B51B4E05460024306800B968 +:10FE0000FFDF3068017AA94204D9406850F8250024 +:10FE100000B1041D204670BD70B5124E0546002489 +:10FE2000306800B9FFDF3068017AA94206D940681E +:10FE300050F8251011B131F8040B4418204670BD5C +:10FE400010B50A460121FFF7F6F8C01C20F00300A8 +:10FE500010BD10B50A460121FFF7EDF8C01C20F0D7 +:10FE6000030010BD7000002070B50446C2F11005FB +:10FE700028190EF02AFD15F0FF0108D0491EC9B25D +:10FE8000802060542046BDE870400EF09DBD70BDDE +:10FE900030B505E05B1EDBB2CC5CD55C6C40C45475 +:10FEA000002BF7D130BD10B5002409E00B78521EAD +:10FEB00044EA430300F8013B11F8013BD2B2DC09EC +:10FEC000002AF3D110BD2DE9F04389B01E46DDE9CB +:10FED000107990460D00044622D002460846F949A2 +:10FEE000FEF7E1F8102221463846FFF7DCFFE07B01 +:10FEF000000606D5F34A3946102310320846FFF7AC +:10FF0000C7FF102239464846FFF7CDFFF87B0006B1 +:10FF100006D5EC4A4946102310320846FFF7B8FFD1 +:10FF2000102120460EF050FD0DE0103EB6B208EB59 +:10FF30000601102322466846FFF7AAFF22462846FC +:10FF40006946FEF7B0F8102EEFD818D0F2B241464D +:10FF50006846FFF789FF10234A46694604A8FFF761 +:10FF600097FF1023224604A96846FFF791FF224617 +:10FF700028466946FEF797F809B0BDE8F0831023DC +:10FF80003A464146EAE770B59CB01E460546134620 +:10FF900020980C468DF80800202219460DF1090022 +:10FFA0000EF093FC202221460DF129000EF08DFC6D +:10FFB00017A913A8CDE90001412302AA314628461A +:10FFC000FFF781FF1CB070BD2DE9FF4F9FB014AE4D +:10FFD000DDE92D5410AFBB49CDE900762023203157 +:10FFE0001AA8FFF770FF4FF000088DF808804FF057 +:10FFF00001098DF8099054F8010FCDF80A00A08886 +:020000040001F9 +:10000000ADF80E0014F8010C1022C0F340008DF87A +:10001000100055F8010FCDF81100A888ADF81500B3 +:1000200015F8010C2C99C0F340008DF8170006A8B4 +:1000300082460EF04AFC0AA88346102222990EF04E +:1000400044FCA0483523083802AA40688DF83C805B +:10005000CDE900760E901AA91F98FFF734FF8DF8AE +:1000600008808DF809902068CDF80A00A088ADF8C6 +:100070000E0014F8010C1022C0F340008DF810009F +:100080002868CDF81100A888ADF8150015F8010C06 +:100090002C99C0F340008DF8170050460EF015FC67 +:1000A0005846102222990EF010FC86483523083855 +:1000B00002AA40688DF83C90CDE900760E901AA90E +:1000C0002098FFF700FF23B0BDE8F08FF0B59BB09C +:1000D0000C460546DDE922101E461746DDE92032B2 +:1000E000D0F801C0CDF808C0B0F805C0ADF80CC01C +:1000F0000078C0F340008DF80E00D1F80100CDF873 +:100100000F00B1F80500ADF8130008781946C0F3E8 +:1001100040008DF815001088ADF8160090788DF825 +:1001200018000DF1190010220EF0CFFB0DF129007F +:10013000102231460EF0C9FB0DF13900102239466C +:100140000EF0C3FB17A913A8CDE90001412302AAB1 +:1001500021462846FFF7B7FE1BB0F0BDF0B5A3B0AF +:1001600017460D4604461E46102202A828990EF096 +:10017000ACFB06A8202239460EF0A7FB0EA82022D1 +:1001800029460EF0A2FB1EA91AA8CDE900015023B2 +:1001900002AA314616A8FFF796FE1698206023B0F3 +:1001A000F0BDF0B589B00446DDE90E070D4639789B +:1001B000109EC1F340018DF8001031789446C1F3D0 +:1001C00040018DF801101968CDF802109988ADF83A +:1001D000061099798DF808100168CDF8091081880A +:1001E000ADF80D1080798DF80F0010236A46614636 +:1001F00004A8FFF74DFE2246284604A9FDF753FF49 +:10020000D6F801000090B6F80500ADF80400D7F864 +:100210000100CDF80600B7F80500ADF80A0000208F +:10022000039010236A46214604A8FFF731FE2246B8 +:10023000284604A9FDF737FF09B0F0BD1FB51C68BB +:1002400000945B680193136802935268039202461C +:1002500008466946FDF727FF1FBD10B588B0044664 +:10026000106804905068059000200690079008469A +:100270006A4604A9FDF717FFBDF80000208008B00A +:1002800010BD1FB51288ADF800201A88ADF8022005 +:100290000022019202920392024608466946FDF747 +:1002A00002FF1FBD7FB5074B14460546083B9A1C4D +:1002B0006846FFF7E6FF224669462846FFF7CDFF6E +:1002C0007FBD000060EE010070B5044600780E4668 +:1002D000012813D0052802D0092813D10EE0A06808 +:1002E00061690578052003F0DBF8052D0AD0782335 +:1002F00000220520616903F029F803E00520616907 +:1003000003F0CEF831462046BDE8704001F086B8D3 +:1003100010B500F12D02C3799478411D64F00304F7 +:100320002340C371DB070DD04B79547923404B71C7 +:100330000B79127913400B718278C9788A4200D9FF +:10034000817010BD00224A710A71F5E741780129D8 +:1003500000D00C21017070472DE9F04F93B04FF0A1 +:10036000000B0C690D468DF820B0097801260C2091 +:1003700017464FF00D084FF0110A4FF008091B29DE +:1003800075D2DFE811F01B00C30206031E035D03F4 +:100390007003A203B703F803190461049304A004D3 +:1003A000EC042A05340552055D05EE0531063406D8 +:1003B00063067F06F9061D07E606EB0614B12078F2 +:1003C0001D282AD0D5F808805FEA08004FD0012008 +:1003D0008DF82000686A02220D908DF824200A20F2 +:1003E0008DF82500A8690A90A8880028EED098F812 +:1003F000001091B10F2910D27ED2DFE801F07D13F9 +:1004000049DEFEFDFCFBFAF938089CF8F7000228EB +:100410002DD124B120780C2801D00026EFE38DF8EF +:100420002020CBE10520696A03F03AF8A888072864 +:10043000EED1204600F0EDFF022809D0204600F062 +:10044000E8FF032807D9204600F0E3FF072802D27F +:100450000120207004E0002CB8D020780128D7D1EA +:1004600098F80400C11F0A2902D30A2061E0C4E100 +:10047000A070D8F80010E162B8F80410218698F84E +:10048000060084F83200012028700320207044E028 +:100490000728BDD1002C99D020780D28B8D198F824 +:1004A000031094F82F20C1F3C000C2F3C002104221 +:1004B00001D0062000E00720890707D198F8051031 +:1004C0000142D2D198F806100142CED194F83120E1 +:1004D00098F8051020EA02021142C6D194F83220A1 +:1004E00098F8061090430142BFD198F80400C11F4C +:1004F0000A29BAD2617D00E006E281427ED8D8F8AE +:1005000000106160B8F80410218198F80600A0720C +:10051000012028700E20207003208DF82000686ACA +:100520000D9004F12D000990601D0A900F300B9082 +:1005300022E12875FDE3412891D1204600F069FFB2 +:10054000042802D1E078C00704D1204600F061FF02 +:100550000F2884D1A88CD5F80C8080B24FF0400BC6 +:10056000E669FFF747FC324641465B464E46CDF80A +:100570000090FFF732F80B208DF82000686A0D908C +:10058000E0690990002108A8FFF79EFE2078042862 +:1005900006D0A07D58B1012809D003280AD049E32C +:1005A00005202070032028708DF82060CDE184F8AC +:1005B00000A032E712202070E9E11128BCD12046CA +:1005C00000F027FF042802D1E078C00719D02046A8 +:1005D00000F01FFF062805D1E078C00711D1A07DEB +:1005E00002280ED0204600F014FF08E0CAE081E0A7 +:1005F0006FE14EE121E101E1E7E017E0ADE1112813 +:100600009AD1102208F1010104F13C000EF05DF9CD +:10061000607801287ED012202070E078C00760D07A +:10062000A07D0028C8D00128C6D05AE0112890D15A +:10063000204600F0EEFE082804D0204600F0E9FE37 +:10064000132886D104F16C00102208F1010106463E +:100650000EF03BF9207808280DD014202070E178A6 +:10066000C8070DD0A07D02280AD06278022A04D0E3 +:100670000328A1D035E00920F0E708B1012837D1DF +:10068000C80713D0A07D02281DD000200090D4E917 +:10069000062133460EA8FFF776FC10220EA904F1BE +:1006A0003C000EF0E6F8C8B1042042E7D4E9091294 +:1006B000201D8DE8070004F12C0332460EA8616B63 +:1006C000FFF76FFDE9E7606BC1F34401491E006865 +:1006D000C84000F0010040F08000D7E720780928EA +:1006E00006D185F800908DF8209033E32870ECE374 +:1006F0000920FBE711289AD1204600F08AFE0A283B +:1007000002D1E078C00704D1204600F082FE15280F +:100710008DD100E08DE104F13C00102208F10101CF +:1007200006460EF0D2F820780A2816D0162020703F +:10073000D4E90932606B611D8DE80F0004F15C03A0 +:1007400004F16C0247310EA8FFF7C0FC10220EA97D +:1007500030460EF08EF818B1F5E20B20207071E2F1 +:100760002046FFF7D5FDA078216A0A18C0F11001D4 +:1007700010460EF029F923E3394608A8FFF7A4FD37 +:1007800006463BE20228B6D1204600F042FE04288D +:1007900004D3204600F03DFE082809D3204600F08F +:1007A00038FE0E2829D3204600F033FE122824D22A +:1007B000A07D02289FD10E208DF82000686A0D9040 +:1007C00098F801008DF82400F0E3022893D1204628 +:1007D00000F01FFE002810D0204600F01AFE01286D +:1007E000F9D0204600F015FE0C28F4D004208DF836 +:1007F000240098F801008DF825005EE21128FCD154 +:10080000002CFAD020781728F7D16178606A022985 +:1008100011D0002101EB4101182606EBC101102285 +:10082000405808F101010EF050F80520696A00F007 +:10083000E3FD2670F1E50121ECE70B28DDD1002C6A +:10084000DBD020781828D8D16078616A02281CD0C3 +:100850005FF0000000EB4002102000EBC2000958DE +:10086000B8F8010008806078616A02280FD0002083 +:1008700000EB4002142000EBC2000958404650F83B +:10088000032F0A604068486039E00120E2E7012058 +:10089000EEE71128B1D1002CAFD020781928ACD1C7 +:1008A0006178606A022912D05FF0000101EB41011A +:1008B0001C2202EBC1011022405808F101010EF088 +:1008C00004F80520696A00F097FD1A20B6E00121BE +:1008D000ECE7082891D1002C8FD020781A288CD1F1 +:1008E000606A98F80120017862F347010170616A3B +:1008F000D8F8022041F8012FB8F8060088800520BA +:10090000696A00F079FD8EE2072012E63878012846 +:1009100094D1182204F1140079680EF01BF8E079E4 +:10092000C10894F82F0001EAD001E07861F30000DB +:10093000E070217D002974D12178032909D0C007F6 +:1009400025D0032028708DF82090686A0D904120F2 +:1009500004E3607DA178884201D90620E9E50226FA +:100960002671E179204621F0E001E171617A21F000 +:10097000F0016172A17A21F0F001A172FFF7C8FCC9 +:100980002E708DF82090686A0D900720E6E2042012 +:10099000ACE6387805289DD18DF82000686A0D9066 +:1009A000B8680A900720ADF824000A988DF830B096 +:1009B0006168016021898180A17A817104202070A1 +:1009C000F4E23978052985D18DF82010696A0D91F6 +:1009D000391D09AE0EC986E80E004121ADF824107C +:1009E0008DF830B01070A88CD7F80C8080B24026FB +:1009F000A769FFF711FA41463A463346C846CDF893 +:100A00000090FEF71EFE002108A8FFF75DFCE078CD +:100A100020F03E00801CE0702078052802D00F20D6 +:100A20000CE049E1A07D20B1012802D0032802D0CA +:100A300002E10720BFE584F80080EEE42070ECE4DA +:100A4000102104F15C0002F052FA606BB0BBA07D93 +:100A500018B1012801D00520FDE006202870F748D4 +:100A60006063A063BEE23878022894D1387908B177 +:100A70002875B3E3A07D022802D0032805D022E028 +:100A8000B8680028F5D060631CE06078012806D0C3 +:100A9000A07994F82E10012805D0E84806E0A17945 +:100AA00094F82E00F7E7B8680028E2D06063E07899 +:100AB000C00701D0012902D0E04803E003E0F86854 +:100AC0000028D6D0A063062010E68DF82090696A31 +:100AD0000D91E1784846C90709D06178022903D110 +:100AE000A17D29B1012903D0A17D032900D00720D0 +:100AF000287031E138780528BBD1207807281ED02E +:100B000084F800A005208DF82000686A0D90B86870 +:100B10000A90ADF824A08DF830B003210170E1787F +:100B2000CA070FD0A27D022A1AD000210091D4E971 +:100B3000061204F15C03401CFFF725FA67E384F812 +:100B40000090DFE7D4E90923211D8DE80E0004F1B0 +:100B50002C0304F15C02401C616BFFF722FB56E39F +:100B6000626BC1F34401491E1268CA4002F00101E0 +:100B700041F08001DAE738780528BDD18DF82000F2 +:100B8000686A0D90B8680A90ADF824A08DF830B06E +:100B9000042100F8011B102204F15C010DF095FE08 +:100BA000002108A8FFF790FB2078092801D0132026 +:100BB00044E70A2020709BE5E078C10742D0A17D80 +:100BC000012902D0022927D038E0617808A801293C +:100BD00016D004F16C010091D4E9061204F15C0313 +:100BE000001DFFF7BBFA0A20287003268DF820802D +:100BF000686A0D90002108A8FFF766FBDDE2C3E2FA +:100C000004F15C010091D4E9062104F16C03001D9C +:100C1000FFF7A4FA0026E9E7C0F3440114290DD236 +:100C20004FF0006101EBB0104FEAB060E070607807 +:100C3000012801D01020BEE40620FFE660780128DC +:100C40003FF4B7AC0A2051E5E178C90708D0A17D8F +:100C5000012903D10B20287004202FE028702DE0FB +:100C60000E2028706078616B012817D004F15C03B6 +:100C700004F16C020EA8FFF7E1FA2046FFF748FBEB +:100C8000A0780EAEC0F1100130440DF09DFE06209C +:100C90008DF82000686A09960D909AE004F16C03C3 +:100CA00004F15C020EA8FFF7C9FAE9E739780229D6 +:100CB00003D139790029D1D029758FE28DF8200030 +:100CC000686A0D9058E538780728F6D1D4E90921EB +:100CD0006078012808D004F16C00CDE9000202918F +:100CE00005D104F16C0304E004F15C00F5E704F1C4 +:100CF0005C0304F14C007A680646216AFFF764F948 +:100D00006078012821D1A078216A0A18C0F1100169 +:100D100010460DF059FED4E90923606B04F12D0152 +:100D20008DE80F0004F15C0304F16C0231460EA85B +:100D300000E055E2FFF7CAF910220EA904F13C00C9 +:100D40000DF097FD08B10B20AFE485F8008000BFDF +:100D50008DF82090686A0D908DF824A00CE5387805 +:100D60000528AAD18DF82000686A0D90B8680A900D +:100D7000ADF824A08DF830B080F8008061780129AA +:100D80001AD0D4E9093204F12D01A66B0392009622 +:100D9000CDE9011304F16C0304F15C0204F14C0190 +:100DA000401CFFF793F9002108A8FFF78DFA60783F +:100DB000012805D0152041E6D4E90923611DE4E7A7 +:100DC0000E20287006208DF82000686ACDF824B027 +:100DD0000D90A0788DF82800CEE438780328C0D193 +:100DE000E079C00770D00F202870072066E73878B8 +:100DF00004286BD11422391D04F114000DF0AAFD52 +:100E0000616A208CA1F80900616AA078C871E17953 +:100E1000626A01F003011172616A627A0A73616A9F +:100E2000A07A81F82400162060E485F800A08DF8EF +:100E30002090696A50460D9190E0000060EE01003C +:100E40003878052842D1B868A8616178606A0229BB +:100E500001D0012100E0002101EB4101142606EB45 +:100E6000C1014058082102F042F86178606A022905 +:100E700001D0012100E0002101EB410106EBC1019D +:100E8000425802A8E169FFF70DFA6078626A022809 +:100E900001D0012000E0002000EB4001102000EB19 +:100EA000C1000223105802A90932FEF7F1FF626A5D +:100EB000FD4B0EA80932A169FFF7E3F96178606A7A +:100EC000022904D0012103E042E18BE0BDE00021D2 +:100ED00001EB4101182606EBC101A27840580EA98A +:100EE0000DF0F3FC6178606A022901D0012100E075 +:100EF000002101EB410106EBC1014058A1780844F3 +:100F0000C1F110010DF060FD05208DF82000686A28 +:100F10000D90A8690A90ADF824A08DF830B0062194 +:100F200001706278616A022A01D0012200E0002289 +:100F300002EB420206EBC202401C895810220DF05F +:100F4000C4FC002108A8FFF7BFF91220C5F818B0AB +:100F500028708DF82090686A0D900B208DF8240081 +:100F60000AE43878052870D18DF82000686A0D9061 +:100F7000B8680A900B20ADF824000A980721017088 +:100F80006178626A022901D0012100E0002101EBB1 +:100F90004103102101EBC30151580988A0F8011049 +:100FA0006178626A022902D0012101E02FE100216B +:100FB00001EB4103142101EBC30151580A6840F8C9 +:100FC000032F4968416059E01920287001208DF8ED +:100FD000300077E6162028708DF830B0002108A880 +:100FE000FFF772F9032617E114202870B0E638786D +:100FF00005282AD18DF82000686A0D90B8680A90FB +:10100000ADF824A08DF830B080F800906278616A65 +:101010004E46022A01D0012200E0002202EB4202E9 +:101020001C2303EBC202401C895810220DF04DFC1A +:10103000002108A8FFF748F9152028708DF82060D6 +:10104000686A0D908DF824603CE680E038780528C9 +:101050007DD18DF82000686A0D90B8680A90ADF8CF +:10106000249009210170616909784908417061691A +:1010700051F8012FC0F802208988C18020781C28EF +:10108000A8D1A1E7E078C00702D04FF0060C01E03C +:101090004FF0070C607802280AD04FF0000000BF24 +:1010A00000EB040101F1090105D04FF0010004E05B +:1010B0004FF00100F4E74FF000000B78204413EAF2 +:1010C0000C030B7010F8092F02EA0C02027004D115 +:1010D0004FF01B0C84F800C0D2B394F801C0BCF1EF +:1010E000010F00D09BB990F800C0E0465FEACC7CCD +:1010F00004D028F001060670102606E05FEA887C1E +:1011000005D528F00206067013262E70032694F8E3 +:1011100001C0BCF1020F00D092B991F800C05FEAA3 +:10112000CC7804D02CF001060E70172106E05FEA9F +:101130008C7805D52CF002060E701921217000263E +:101140000078D0BBCAB3C3BB1C20207035E012E0CE +:1011500002E03878062841D11A2019E420780128C5 +:101160003CD00C283AD02046FFF7F0F809208DF843 +:101170002000686A0D9031E03878052805D00620F7 +:10118000387003261820287046E005218DF82010BD +:10119000686A0D90B8680A900220ADF8240001201A +:1011A0008DF830000A980170297D4170394608A8F1 +:1011B000FFF78AF8064618202870012E0ED02BE083 +:1011C00001208DF82000686A0D9003208DF824001E +:1011D000287D8DF8250085F814B012E0287D80B1B7 +:1011E0001D202070172028708DF82090686A0D90BF +:1011F00002208DF82400394608A8FFF765F8064656 +:101200000AE00CB1FE2020709DF8200020B10021E2 +:1012100008A8FFF759F810E413B03046BDE8F08F86 +:101220002DE9F04387B00C464E6900218DF804107B +:1012300001202578034602274FF007094FF0050CDF +:1012400085B1012D53D0022D39D1FE2030708DF89B +:101250000030606A059003208DF80400207E8DF830 +:10126000050063E02179012925D002292DD0032929 +:1012700028D0042923D1B17D022920D131780D1F36 +:10128000042D04D30A3D032D01D31D2917D1218933 +:10129000022914D38DF80470237020899DF804105E +:1012A00088421BD2082001E058EE01008DF80000B2 +:1012B000606A059057E070780128EBD0052007B0F0 +:1012C000BDE8F0831D203070E4E771780229F5D184 +:1012D00031780C29F3D18DF80490DDE7083402F859 +:1012E00004CB94E80B0082E80B000320E7E71578B5 +:1012F000052DE4D18DF800C0656A059595680295C5 +:101300008DF8101094F80480B8F1010F13D0B8F1E3 +:10131000020F2DD0B8F1030F1CD0B8F1040FCED1BD +:10132000ADF804700E202870207E68700021684699 +:10133000FEF7CAFF0CE0ADF804700B202870207E89 +:10134000002100F01F0068706846FEF7BDFF37708F +:101350000020B4E7ADF804708DF8103085F800C0B7 +:10136000207E6870277011466846FEF7ADFFA6E73D +:10137000ADF804902B70207F6870607F00F0010052 +:10138000A870A07F00F01F00E870E27F2A71C007FC +:101390001CD094F8200000F00700687194F8210038 +:1013A00000F00700A87100216846FEF78DFF28684D +:1013B000F062A8883086A87986F83200A069407863 +:1013C00070752879B0700D203070C1E7A97169710E +:1013D000E9E700B587B005280CD101208DF80000A1 +:1013E0008DF80400002005918DF80500014668463F +:1013F000FEF76AFF07B000BD70B50C46054602F067 +:101400004FF821462846BDE870407823002201F0BD +:101410009DBF08B1007870470C20704770B50C0074 +:1014200005784FF000010CD021702146F2F793F9B6 +:1014300069482178405D884201D1032070BD0220B7 +:1014400070BDF2F788F9002070BD0279012A05D03D +:1014500000220A704B78012B02D003E00420704771 +:101460000A758A6102799300521C0271C1500320EF +:101470007047F0B587B00F4605460124287905EB83 +:10148000800050F8046C7078411E02290AD252493B +:101490003A46083901EB8000314650F8043C2846B2 +:1014A000984704460CB1012C11D12879401E10F048 +:1014B000FF00287101D00324E0E70A208DF8000026 +:1014C000706A0590002101966846FFF7A7FF032C7C +:1014D000D4D007B02046F0BD70B515460A46044684 +:1014E00029461046FFF7C5FF064674B12078FE284E +:1014F0000BD1207C30B100202870294604F10C006B +:10150000FFF7B7FF2046FEF721FF304670BD70475A +:1015100070B50E4604467C210DF078FA0225012EA6 +:1015200003D0022E04D0052070BD0120607000E0C1 +:1015300065702046FEF70AFFA575002070BD28B132 +:10154000027C1AB10A4600F10C01C5E70120704780 +:1015500010B5044686B0052001F0A2FF2078FE28D1 +:1015600006D000208DF8000069462046FFF7E7FF0F +:1015700006B010BD7CB50E4600218DF804104178F0 +:10158000012903D0022903D0002405E0046900E00A +:1015900044690CB1217C89B16D4601462846FFF7AC +:1015A00054FF032809D1324629462046FFF794FF0D +:1015B0009DF80410002900D004207CBD04F10C0526 +:1015C000EBE730B40C460146034A204630BC034BDF +:1015D0000C3AFEF756BE00009CEE010058EE0100EA +:1015E00070B50D46040011D085B1210128460DF0DB +:1015F000EBF910224E4928460DF067F94C480121BD +:101600000838018044804560002070BD012070BD15 +:1016100070B5474E00240546083E10E07068AA7B6E +:1016200000EB0410817B914208D1C17BEA7B91429F +:1016300004D10C2229460DF01CF930B1641C30880D +:101640008442EBDB4FF0FF3070BD204670BD70B5BB +:101650000D46060006D02DB1FFF7DAFF002803DBA8 +:10166000401C14E0102070BD314C083C208862887A +:10167000411C914201D9042070BD6168102201EB28 +:10168000001031460DF021F92088401C2080287080 +:10169000002070BD70B514460D0018D0BCB10021FB +:1016A000A170022802D0102811D105E0288870B15D +:1016B0000121A170108008E02846FFF7A9FF00284B +:1016C00005DB401CA070A8892080002070BD01208F +:1016D00070BD70B5054614460E000BD0002030706A +:1016E000A878012808D005D91149A1F108010A8874 +:1016F00090420AD9012070BD24B128782070288832 +:10170000000A5070022008700FE064B1496810228E +:1017100001EB0011204610390DF0D7F8287820731E +:101720002888000A607310203070002070BD00000F +:101730007C0000202DE9F04190460C46074600252C +:10174000FE48072F00EB881607D2DFE807F00707EF +:10175000070704040400012500E0FFDF06F8147009 +:10176000002D13D0F548803000EB880191F8270058 +:10177000202803D006EB4000447001E081F82640A9 +:1017800006EB44022020507081F82740BDE8F0812C +:10179000F0B51F4614460E460546202A00D1FFDF4D +:1017A000E649E648803100EB871C0CEB440001EB76 +:1017B0008702202E07D00CEB460140784B7848700A +:1017C000184620210AE092F82530407882F825005A +:1017D000F6E701460CEB410005704078A142F8D1D4 +:1017E00092F82740202C03D00CEB4404637001E0F6 +:1017F00082F826300CEB41042023637082F8271016 +:10180000F0BD30B50D46CE4B44190022181A72EBCC +:10181000020100D2FFDFCB48854200DDFFDFC9486F +:101820004042854200DAFFDFC548401C844207DAA7 +:10183000002C01DB204630BDC148401C201830BDC3 +:10184000BF48C043FAE710B504460168407ABE4A73 +:1018500052F82020114450B10220084420F07F406B +:10186000F9F78FFC94F90810BDE81040C9E704208F +:10187000F3E72DE9F047B14E803696F82D50DFF8AA +:10188000BC9206EB850090F8264034E009EB851702 +:101890004FF0070817F81400012806D004282ED0AE +:1018A00005282ED0062800D0FFDF01F0E3F801461E +:1018B00007EB4400427806EB850080F8262090F87C +:1018C0002720A24202D1202280F82720084601F0DA +:1018D000DCF82A4621460120FFF72CFF9B484146B1 +:1018E00000EB041002682046904796F82D5006EB56 +:1018F000850090F82640202CC8D1BDE8F087022052 +:1019000000E003208046D0E710B58C4C20218034C5 +:1019100084F8251084F8261084F82710002084F815 +:10192000280084F82D0084F82E10411EA16044F890 +:10193000100B2074607420736073A0738449E07787 +:1019400020750870487000217C4A103C02F8110094 +:10195000491CC9B22029F9D30120F9F700FB002066 +:10196000F9F7FDFA012084F82200F9F79DFF794884 +:10197000F9F7A9FF764CA41E20707748F9F7A3FF6A +:101980006070BDE81040F9F777BA10B5F9F799FA29 +:101990006F4CA41E2078F9F7AFFF6078F9F7ACFF21 +:1019A000BDE8104001F09EB8202070472DE9F34FAC +:1019B000624E0025803606EB810A89B09AF8250030 +:1019C000202822D0691E02916049009501EB001089 +:1019D0008146D0E90112C0680391CDE90420B08BA3 +:1019E000ADF81C00B07F8DF81E009DF81500C8B141 +:1019F0000227554951F820400399E219114421F07A +:101A00007F41019184B102210FE00120F9F7A7FA8B +:101A10000020F9F7A4FAF9F772FA01F063F886F8F2 +:101A20002F50A0E00427E4E700218DF818100228C9 +:101A300001D0012820D10398391901440998081AC6 +:101A40009DF81C1020F07F4001B10221333181420A +:101A50000BD203208DF815000398C4F13201401A0F +:101A600020F07F40322403900CE096F8240018B94F +:101A700001F0A0F900284CD0322C03D214B101F0AF +:101A800025F801E001F02EF8314A107818B393469A +:101A90005278039B121B00219DF81840984601289C +:101AA0001AD0032818D000208DF81E00002A04DD6B +:101AB000981A039001208DF818009DF81C0000B1C1 +:101AC00002210398254A20F07F40039003AB099838 +:101AD00001F014F810B110E00120E5E79DF81D00B9 +:101AE00018B99BF80000032812D08DF81C50CDF8CF +:101AF0000C808DF818408DF81E509DF8180058B1D4 +:101B000003980123C11900221846F9F77BFA06E071 +:101B100000200BB0BDE8F08F0120F9F720FA99F909 +:101B20000C20012300200199F9F76CFA012086F8B6 +:101B30002F008AF828502022694611E06C08002006 +:101B4000FF7F841E0020A107ACEE01006C06002080 +:101B50008E000020FB31010073180100FFFF3F00E1 +:101B6000F9480CF0F7FE0120D3E72DE9F05FDFF82C +:101B7000D883064608EB860090F82550202D1FD00C +:101B8000A8F180002C4600EB8617A0F50079DFF85D +:101B9000BCB305E0A24607EB4A004478202C0AD0EB +:101BA000F9F77CFA09EB04135A4601211B1D00F0DA +:101BB000A5FF0028EED0AC4202D0334652461EE0CC +:101BC000E34808B1AFF30080F9F768FA98F82F20DE +:101BD0006AB1D8F80C20411C891A0902CA1701EB16 +:101BE00012610912002902DD0020BDE8F09F314694 +:101BF000FFF7DCFE08B10120F7E733462A46202133 +:101C00000420FFF7C5FDEFE72DE9F041CE4C256933 +:101C1000F9F744FA401B0002C11700EB11600012F3 +:101C200000D4FFDF94F8220000B1FFDF012784F821 +:101C3000227094F82E00202800D1FFDF94F82E6047 +:101C4000202084F82E00002584F82F5084F820509E +:101C500084F82150BF4825600078022833D003283B +:101C600031D000202077A068401C05D04FF0FF3015 +:101C7000A0600120F9F773F90020F9F770F9F9F77E +:101C80006EFAF9F766FAF9F73AF90CF02BF9B2485F +:101C9000056005604FF0E0214FF40040B846C1F800 +:101CA0008002F1F776F994F82D703846FFF75DFF62 +:101CB0000028FAD0A448803800EB871010F81600EE +:101CC000022802D006E00120CCE73A463146062041 +:101CD000FFF730FD84F8238004EB870090F826009E +:101CE000202804D09B48801E4078F9F70BFE207F07 +:101CF000002803D0F9F723FA2577657746E50146F2 +:101D0000914810B590F82D200024803800EB821007 +:101D100010F814302BB1641CE4B2202CF8D320202E +:101D200010BD8E4800EB0410016021460120FFF732 +:101D300001FD204610BD10B5012801D0032800D1B7 +:101D400071B3814A92F82D307F4C0022803C04EB25 +:101D5000831300BF13F812400CB1082010BD521CB1 +:101D6000D2B2202AF6D37B4A48B1022807D00729ED +:101D700016D2DFE801F01506080A0C0E100000214B +:101D80000AE01B2108E03A2106E0582104E077210F +:101D900002E0962100E0B52151701070002010BDC6 +:101DA000072010BD6B4810B54078F9F7EAF980B20A +:101DB00010BD10B5202811D2634991F82D30A1F142 +:101DC000800202EB831414F810303BB191F82D30EF +:101DD00002EB831212F81020012A01D0002010BD5E +:101DE00091F82D2001460020FFF7A4FC012010BD32 +:101DF00010B5F9F753F9BDE81040F9F7C2B92DE96C +:101E0000F0410E46504F01782025803F0C4607EBED +:101E1000831303E0254603EB45046478944202D023 +:101E2000202CF7D108E0202C06D0A14206D103EBEC +:101E300041014978017007E00020A7E403EB44006A +:101E400003EB450140784870454F7EB127B1002132 +:101E500040F2DA30AFF300803078A04206D127B1EB +:101E6000002140F2DD30AFF30080357027B1002152 +:101E700040F2E230AFF30080012087E410B5426801 +:101E80000B689A1A1202D41702EB1462121216D4BB +:101E9000497A91B1427A82B9324A006852F82110E7 +:101EA000126819441044001D891C081A0002C11749 +:101EB00000EB11600012322801DB012010BD002070 +:101EC00010BD2DE9F04781461F48244E00EB8100EC +:101ED000984690F825402020107006F500701546B1 +:101EE00000EB81170BE000BF06EB04104946001D14 +:101EF000FFF7C4FF28B107EB44002C704478202C76 +:101F0000F2D1297888F8001013E000BF06EB041521 +:101F1000291D4846FFF7B2FF68B988F80040A97B41 +:101F200099F80A00814201D80020E6E407EB44005A +:101F30004478202CEAD10120DFE42DE9FC410E4653 +:101F400007460024054D18E0EC080020FFFF3F0085 +:101F5000000000008E00002000F500406C0600200C +:101F600000000000ACEE01009DF8000005EB001041 +:101F70008168384600F0D6FD01246B4601AA31463F +:101F80003846FFF79EFF0028EED02046BDE8FC81D2 +:101F900070B50446FF480125A54300EB841100EB12 +:101FA000851040220CF091FCFB4E26B1002140F23E +:101FB0005C40AFF30080F748803000EB850100EB18 +:101FC0008400D0F82500C1F8250026B100214FF487 +:101FD0008C60AFF30080284670BD2DE9FC4184463B +:101FE000EC481546089C00EB85170E4617F81400C0 +:101FF000012803D0022801D00020C7E70B46E74A9A +:102000000121604600F07AFDA8B101AB6A4629467D +:102010003046FFF756FF70B1DE489DF804209DF86A +:102020000010803000EB85068A4208D02B46052040 +:10203000FFF7AEFB0BE02A462146042014E02029DE +:1020400003D007EB4100407801E096F8250007EB4C +:10205000440148709DF80000202809D007EB40009B +:1020600044702A4621460320FFF764FB01208DE7D8 +:1020700006F8254F0120F070F3E7C94901EB001085 +:10208000001DFFF7E0BB7CB51D46134604460E4617 +:1020900000F1080221461846F9F780F894F9080083 +:1020A0000F2804DD1F3820722068401C206096B184 +:1020B0000220BC4951F82610461820686946801B4A +:1020C00020F07F40206094F908002844C01C1F289D +:1020D00003DA012009E00420EBE701AAF9F75EF832 +:1020E0009DF8040010B10098401C009000992068F1 +:1020F00031440844C01C20F07F4060607CBD2DE965 +:10210000FE430C460646097860799072207998461D +:102110001546507241B19F48803090F82E1020290A +:102120000AD00069401D0BE0D4E90223217903B0F5 +:102130002846BDE8F043A6E79B484178701D084457 +:1021400020F07F47217900222846A368FFF79BFFF4 +:102150003946284600F0E6FCD4E902322179684687 +:10216000FFF791FF41462846019CFFF7E6FE2B460C +:1021700022460021304600F0C1FC002803D1314640 +:10218000284600F0CFFCBDE8FE832DE9FE4F8146D6 +:1021900000F084FC30B1002799F8000020B1002045 +:1021A000BDE8FE8F0127F7E77A4D7B4C4FF0000A20 +:1021B000803524B1002140F2D340AFF3008095F880 +:1021C0002D8085F823A0002624B100214FF49B60C8 +:1021D000AFF300801FB94046FFF7DAFE804624B116 +:1021E00000214FF49C60AFF30080F8F757FF43469F +:1021F0006A464946FFF783FF24B1002140F2E640DA +:10220000AFF3008095F82E0020280CD029690098A3 +:10221000401A0002C21700EB1260001203D5684694 +:1022200000F080FC012624B100214FF49E60AFF342 +:10223000008095F823000028BBD124B1002140F292 +:10224000F640AFF30080F8F729FF6B46534A0021B0 +:1022500000F054FC0028A3D027B941466846FFF798 +:102260006CFE064326B16846FFF7EDFAC9F8080090 +:1022700024B1002140F20950AFF3008001208FE724 +:102280002DE9FF5F8A46814600F008FC414C80340E +:1022900010B39AF80000002710B1012800D0FFDF2A +:1022A0003D4D25B1002140F27F50AFF30080012069 +:1022B000A84600905FEA080604D0002140F287504B +:1022C000AFF30080009800F0E0FB94F82D50002060 +:1022D00084F8230067B119E094F82E000127202824 +:1022E00000D1FFDF9AF800000028D9D0FFDFD7E740 +:1022F0002846FFF74DFE054626B1002140F29150D9 +:10230000AFF3008094F823000028D3D126B1002138 +:1023100040F29B50AFF30080F8F7C0FE83462B4697 +:1023200001AA5146FFF7EBFE5FEA060804D0002140 +:1023300040F2A250AFF300803B462A4601A958461E +:10234000CDF80090FFF749FE064604EB850090F8B3 +:1023500028B0B8F1000F04D0002140F2A950AFF32B +:10236000008000F087FB0090B8F1000F04D000213E +:1023700040F2AF50AFF3008094F82300002899D1C9 +:10238000B8F1000F04D0002140F2B750AFF3008045 +:1023900003490BE06C08002000000000FFFF3F0035 +:1023A0006C060020ACEE01008E00002001EB09104D +:1023B0000DF1040C00F104009CE80E0080E80E0012 +:1023C0004EB35FEA080604D0002140F2C450AFF3D8 +:1023D00000803BEA070012D094F82E0020280ED18E +:1023E00026B1002140F2C950AFF300802846FFF724 +:1023F000BCFB20B99AF80000D8B3012849D0B8F145 +:10240000000F04D0002140F2E650AFF300802846D0 +:1024100000F029FB01265FEA080504D0002140F204 +:10242000EF50AFF30080009800F02FFB25B10021A2 +:1024300040F2F350AFF300808EB194F82D0004EB1E +:10244000800090F82600202809D025B1002140F214 +:10245000FA50AFF30080F9484078F9F753FA25B104 +:10246000002140F2FF50AFF3008004B03046BDE8D9 +:10247000F09FFFE7B8F1000F04D0002140F2D150E7 +:10248000AFF3008094F82D2049460420FFF752F95D +:10249000C0E7002E3FF40EAF002140F2DC50AFF356 +:1024A000008007E72DE9F84FE54D814695F82D00AE +:1024B0004FF00008E34C4FF0010B474624B10021D8 +:1024C00040F20D60AFF30080584600F0DEFA85F868 +:1024D000237024B1002140F21260AFF3008095F820 +:1024E0002D00FFF755FD064695F8230028B1002C76 +:1024F000E4D000214FF4C3604BE024B1002140F24E +:102500001C60AFF30080CE48803800EB861111F8D4 +:102510001900032856D1334605EB830A4A469AF838 +:102520002500904201D1012000E0002000900AF136 +:1025300025000021FFF763FC01460098014203D00B +:1025400001228AF82820AF77E1B324B1002140F2BC +:102550002160AFF30080324649460120FFF7EAF8D8 +:102560009AF828A024B1002140F22C60AFF300803B +:1025700000F080FA834624B1002140F23160AFF3CD +:10258000008095F8230038B1002C97D0002140F24C +:102590003560AFF3008091E7BAF1000F07D095F8EE +:1025A0002E00202803D13046FFF7DFFAE0B124B136 +:1025B000002140F24960AFF30080304600F053FA4A +:1025C0004FF0010824B1002140F25260AFF30080C7 +:1025D000584600F05AFA24B1002140F25660AFF399 +:1025E00000804046BDE8F88F002CF1D0002140F279 +:1025F0004460AFF30080E6E70020F8F789BC0120D3 +:10260000F8F786BC8D48007870472DE9F0418C4C76 +:1026100094F82E0020281FD194F82D6004EB860733 +:1026200097F82550202D00D1FFDF8549803901EB37 +:10263000861000EB4500407807F8250F0120F87060 +:1026400084F82300294684F82E5032460220223492 +:10265000FFF770F8002020700FE42DE9F0417A4E6A +:10266000774C012538B1012821D0022879D00328E0 +:102670007DD0FFDFF0E700F029FAFFF7C6FF207EEC +:1026800000B1FFDF84F821500020F8F768FCA16852 +:10269000481C04D0012300221846F8F7B3FC14F8B4 +:1026A0002E0F217806EB01110A68012154E0FFF793 +:1026B000ACFF0120F8F753FC94F8210050B1A0685A +:1026C000401C07D014F82E0F217806EB01110A6880 +:1026D000062141E0207EDFF86481002708F102082E +:1026E000012803D002281ED0FFDFB5E7A777F8F74F +:1026F00026FD98F80000032801D165772577607DD5 +:10270000524951F8200094F8201051B948B161683D +:102710000123091A00221846F8F774FC02202076DB +:102720009AE7277698E784F8205000F0CFF9A07F49 +:1027300050B198F8010061680123091A0022184677 +:10274000F8F760FC257600E0277614F82E0F217844 +:1027500006EB01110A680021BDE8F041104700E0D6 +:1027600005E036480078BDE8F041F9F7CBB8FFF74F +:102770004CFF14F82E0F217806EB01110A68052191 +:10278000EAE710B52E4C94F82E00202800D1FFDF88 +:1027900014F82E0F21782C4A02EB01110A68BDE8CB +:1027A0001040042110477CB5254C054694F82E00B6 +:1027B000202800D1FFDFA068401C00D0FFDF94F884 +:1027C0002E00214901AA01EB0010694690F90C0086 +:1027D0002844F8F7E3FC9DF904000F2801DD0120EF +:1027E00000E00020009908446168084420F07F411F +:1027F000A16094F82100002807D002B00123BDE8B1 +:10280000704000221846F8F7FDBB7CBD30B5104A79 +:102810000B1A541CB3EB940F1ED3451AB5EB940F4F +:102820001AD3934203D9101A43185B1C14E0954243 +:1028300010D9511A0844401C43420DE08C0000207E +:10284000EC080020000000006C060020ACEE010047 +:10285000FF7F841EFFDF0023184630BD01230022C6 +:1028600001460220F8F7CEBB0220F8F778BBF8F754 +:1028700015BC2DE9FC47B14C054694F82E002028E4 +:1028800000D1FFDF642D58D3AD4A0021521B71EBFC +:10289000010052D394F82E20A0462046DFF8A492DF +:1028A00090F82D7009EB0214D8F8000001AA284412 +:1028B0006946F8F773FC9DF90400002802DD0098D2 +:1028C000401C0090A068009962684618B21A22F075 +:1028D0007F42B2F5800F30D208EB8702444692F86F +:1028E0002520202A0AD009EB02125268101A000291 +:1028F000C21700EB1260001288421EDBA068401C69 +:1029000010D0F8F7CBFBA168081A0002C11700EB42 +:1029100011600012022810DD0120F8F720FB4FF0B3 +:10292000FF30A06020682844206026F07F402061AE +:10293000012084F82300BDE8FC870020FBE72DE997 +:10294000F0477E4C074694F82D00A4F1800606EB74 +:10295000801010F8170000B9FFDF94F82D50A04642 +:10296000794C24B1002140F66500AFF3008040F6B9 +:10297000710940F67A0A06EB851600BF16F81700B3 +:10298000012818D0042810D005280ED006280CD015 +:102990001CB100214846AFF3008020BF002CEDD0D1 +:1029A00000215046AFF30080E8E72A46394601206F +:1029B000FEF7C0FEF2E74FF0010A4FF0000945466E +:1029C00024B1002140F68100AFF30080504600F0B2 +:1029D0005CF885F8239024B1002140F68600AFF31F +:1029E000008095F82D00FFF7D3FA064695F82300EE +:1029F00028B1002CE4D0002140F68C001FE024B167 +:102A000000214FF40960AFF3008005EB860000F170 +:102A1000270133463A462630FFF7F1F924B1002169 +:102A200040F69400AFF3008000F024F8824695F859 +:102A3000230038B1002CC3D0002140F69A00AFF338 +:102A40000080BDE785F82D60012085F82300504601 +:102A500000F01BF8002C04D0002140F6A700AFF3D3 +:102A60000080BDE8F087354981F82D00012081F80C +:102A70002300704710B5354808B1AFF30080EFF37D +:102A8000108000F0010072B610BD10B5002804D10E +:102A90002F4808B1AFF3008062B610BD2D48006822 +:102AA000C005C00D10D0103840B2002806DA00F082 +:102AB0000F0000F1E02090F8140D03E000F1E02099 +:102AC00090F80004400970470820704710B51B4C6F +:102AD00094F82400002804D1F8F7CEFB012084F8F4 +:102AE000240010BD10B5154C94F82400002804D023 +:102AF000F8F7EBFB002084F8240010BD10B51C682B +:102B00005B68241A181A24F07F4420F07F40A14209 +:102B100006D8B4F5800F03D2904201D8012010BD31 +:102B2000002010BDD0E90032D21A21F07F431144B9 +:102B300021F07F41C0E9003170470000EC0800201F +:102B4000FF1FA1076C06002000000000000000002D +:102B50000000000004ED00E02DE9F041044680078C +:102B60004FF000054FF0010604D55C480560066093 +:102B700024F00204E0044FF0FF3705D558484660C2 +:102B8000C0F8087324F48054600003D555480560EC +:102B900024F08044E0050FD55348C0F80052C0F837 +:102BA000087352490D60091D0D60504A04210C3212 +:102BB0001160066124F48074A00409D54C48466075 +:102BC000C0F80052C0F808734A48056024F4005465 +:102BD000C4F38030C4F3C031884200D0FFDF14F466 +:102BE000404F14D044484660C0F80873434886609C +:102BF000C0F80052C0F8087341490D600A1D166004 +:102C00008660C0F808730D60166024F44044200507 +:102C10000AD53C4846608660C0F80873C0F848731F +:102C20003948056024F400640BF036F93748044253 +:102C300000D0FFDFBDE8F08170B5202500221346EB +:102C400020FA02F1C90719D051B201F01F06012480 +:102C5000B4404E09B60006F1E026C6F88041C6F839 +:102C60008042002906DA01F00F0101F1E02181F82C +:102C7000143D03E001F1E02181F80034521CAA4226 +:102C8000DED370BD70B5224C0D462060FFF764FFA7 +:102C90002068FFF7D1FF2846F8F7E3FB0AF01EFD96 +:102CA00000F0D5F80BF0F8F80BF043F8F8F7FCFD5E +:102CB000BDE870400AF0C0BD10B5154C2068FFF7A4 +:102CC0004BFF2068FFF7B8FF0BF0E6F8F8F75DFC64 +:102CD0000020206010BD0A2070470000FC1F00404B +:102CE00000C0004004E50140008000400485004031 +:102CF00000D0004004D5004000E0004000F000405B +:102D000000F5004000B0004008B50040FEFF0FFD98 +:102D10009000002070B522490A680AB300221546C7 +:102D200001244B685B1C4B60092B00D34D600E796E +:102D300004FA06F30E681E420FD0EFF3108212F071 +:102D4000010272B600D001220C689C430C6002B9EB +:102D500062B649680160002070BD521C092AE0D3A8 +:102D6000052070BD4FF0E0214FF48000C1F8000253 +:102D70007047EFF3108111F0010F72B64FF00102AE +:102D800002FA00F20648036842EA0302026000D138 +:102D900062B6E7E702480021016041607047000029 +:102DA00094000020012081070860704701208107FE +:102DB0004860704712480068C00700D00120704783 +:102DC0000F48001F0068C00700D0012070470C4862 +:102DD00008300068C00700D0012070470848103054 +:102DE0000068704706490C310A68D20306D50968A5 +:102DF00001F00301814201D101207047002070479A +:102E00000C0400402DE9F04115460E46044600270B +:102E100000F0E7F8A84215D3002341200FE000BFDF +:102E200094F84220A25CF25494F84210491CB1FB81 +:102E3000F0F200FB12115B1C84F84210DBB2AB42D3 +:102E4000EED3012700F0D9F83846BDE8F08170498B +:102E500010B5802081F800046E49002081F84200FE +:102E600081F84100433181F8420081F8410043314B +:102E700081F8420081F8410067480AF0A3FE6648E5 +:102E8000401C0AF09FFEF8F7DBFBBDE8104000F0A5 +:102E9000B4B8402070475F4800F0A3B80A46014626 +:102EA0005C48AFE7402070475A48433000F099B87B +:102EB0000A46014657484330A4E7402101700020EC +:102EC000704710B504465348863000F08AF82070E9 +:102ED000002010BD0A4601464E4810B58630FFF767 +:102EE00091FF08B1002010BD42F2070010BD70B57F +:102EF0000C460546412900D9FFDF484800681038D4 +:102F000040B200F050F8C6B20D2000F04CF8C0B24C +:102F1000864203D2FFDF01E0F8F7E2FB22462946B2 +:102F20003C48FFF76FFF0028F6D070BD2DE9F04157 +:102F3000394F002506463F1D57F82540204600F032 +:102F400041F810B36D1CEDB2032DF5D33148433079 +:102F500000F038F8002825D02E4800F033F800287B +:102F600020D02C48863000F02DF800281AD0F8F731 +:102F70008DFB29480AF02EFEB0F5005F00D0FFDF80 +:102F8000BDE8F04124480AF03BBE94F841004121DD +:102F9000265414F8410F401CB0FBF1F201FB120063 +:102FA0002070D3E751E7002806DA00F00F0000F1A7 +:102FB000E02090F8140D03E000F1E02090F8000408 +:102FC0004009704710F8411F4122491CB1FBF2F340 +:102FD00002FB13114078814201D10120704700208B +:102FE000704710F8411F4078814201D3081A02E06F +:102FF000C0F141000844C0B2704710B506480AF05D +:10300000E9FD002803D1BDE81040F8F72ABB10BD48 +:103010000DE000E01C0900209C00002004ED00E011 +:1030200070B5154D2878401CC4B26878844202D02F +:10303000F8F7E7FB2C7070BD2DE9F0410E4C4FF016 +:10304000E02600BFF8F7D2FB20BF40BF20BF677863 +:1030500020786070D6F80052EEF760F9854305D10C +:10306000D6F8040210B92078B842EBD0F8F7B9FBD3 +:103070000020BDE8F0810000AC0000202DE9F04107 +:10308000012528034FF0E0210026C1F880011E4CE5 +:10309000C4F800610C2000F02CF81C48016802689C +:1030A000C94341F3001142F010020260C4F8045316 +:1030B0002560491C00E020BFD4F80021002AFAD086 +:1030C00019B9016821F010010160114807686560B5 +:1030D000C4F80853C4F800610C2000F00AF8384620 +:1030E000BDE8F08110B50446FFF7C8FF206000205E +:1030F00010BD00F01F02012191404009800000F145 +:10310000E020C0F88012704700C0004010ED00E0E1 +:1031100008C500402DE9F047FF4C0646FF21A06896 +:1031200000EB061211702178FF2910D04FF008092A +:1031300009EB011109EB06174158C05900F0F4F9E9 +:10314000002807DDA168207801EB061108702670C1 +:10315000BDE8F08794F8008045460DE0A06809EBD3 +:1031600005114158C05900F0DFF9002806DCA068BD +:10317000A84600EB08100578FF2DEFD1A06800EB02 +:10318000061100EB08100D700670E1E7F0B5E24B98 +:103190000446002001259A680C269B780CE000BFAD +:1031A00005EB0017D75DA74204D106EB0017D759EE +:1031B0008F4204D0401CC0B28342F1D8FF20F0BD42 +:1031C00070B5FFF754FBD44C08252278A16805EBB5 +:1031D0000212895800F0A8F9012808DD2178A068BA +:1031E00005EB01114058BDE87040FFF737BBFFF712 +:1031F00009FABDE87040F8F785BB2DE9F041C64CEF +:103200002578FFF734FBFF2D6ED04FF00808A26839 +:1032100008EB0516915900F087F90228A06801DD36 +:1032200080595DE000EB051109782170022101EB66 +:103230000511425C5AB1521E4254815901F5800178 +:1032400021F07F4181512846FFF764FF34E00423D9 +:10325000012203EB051302EB051250F803C0875C53 +:10326000BCF1000F10D0BCF5007F10D9CCF30802E0 +:1032700050F806C00CEB423C2CF07F4C40F806C0E6 +:10328000C3589A1A520A09E0FF2181540AE0825970 +:1032900002EB4C3222F07F428251002242542846F7 +:1032A000FFF738FF0C21A06801EB05114158E068D9 +:1032B00050F82720384690472078FF2814D0FFF791 +:1032C000D6FA2278A16808EB02124546895800F028 +:1032D0002BF9012893DD2178A06805EB01114058F6 +:1032E000BDE8F041FFF7BABABDE8F081F0B51D4680 +:1032F00014460E460746FF2B00D3FFDFA00700D081 +:10330000FFDF8548FF210022C0E90247C570067132 +:103310000170427082701046012204E002EB00133B +:10332000401CE154C0B2A842F8D3F0BD70B57A4C4D +:10333000064665782079854200D3FFDFE06840F8D3 +:1033400025606078401C6070284670BD2DE9FF5FE5 +:103350001D468B460746FF24FFF789FADFF8B89130 +:10336000064699F80100B84200D8FFDF00214FF06F +:1033700001084FF00C0A99F80220D9F808000EE075 +:1033800008EB0113C35CFF2B0ED0BB4205D10AEB47 +:10339000011350F803C0DC450CD0491CC9B28A4265 +:1033A000EED8FF2C02D00DE00C46F6E799F803109A +:1033B0008A4203D1FF2004B0BDE8F09F1446521C9E +:1033C00089F8022008EB04110AEB0412475440F874 +:1033D00002B00421029B0022012B01EB04110CD04E +:1033E00040F801204FF4007808234FF0020C4545C7 +:1033F00013D9E905C90D02D002E04550F2E7414674 +:1034000006EB413203EB041322F07F42C250691AEB +:103410000CEB0412490A81540BE005B9012506EBB7 +:10342000453103EB041321F07F41C1500CEB041133 +:10343000425499F800502046FFF76CFE99F80000BE +:10344000A84201D0FFF7BCFE3846B4E770B50C4681 +:103450000546FFF70CFA064621462846FFF796FE7A +:103460000446FF281AD02C4D082101EB0411A8684E +:103470004158304600F058F800F58050C11700EB75 +:10348000D14040130221AA6801EB0411515C09B13B +:1034900000EB4120002800DC012070BD002070BD41 +:1034A0002DE9F04788468146FFF770FE0746FF2862 +:1034B0001BD0194D2E78A8683146344605E0BC4231 +:1034C00006D0264600EB06121478FF2CF7D10CE04C +:1034D000FF2C0AD0A6420CD100EB01100078287016 +:1034E000FF2804D0FFF76CFE03E0002030E6FFF772 +:1034F000BBF941464846FFF7A9FF0123A9680246E8 +:1035000003EB0413FF20C854A878401EB84200D132 +:10351000A87001EB041001E0E809002001EB06119E +:1035200000780870104613E6081A0002C11700EB75 +:10353000116000127047000070B50446A0F500004D +:103540002D4EB0F1786F02D23444A4F500042B481C +:10355000844201D2012500E0002500F043F848B183 +:1035600025B9B44204D32648006808E0012070BDA4 +:10357000002070BD002DF9D1B442F9D32148844216 +:10358000F6D2F3E710B50446A0F50000B0F1786F6D +:1035900003D219480444A4F5000400F023F84FF0C6 +:1035A000804130B11648006804E08C4204D201200A +:1035B00003E014488442F8D2002080F0010010BDDE +:1035C00010B520B1FFF7DEFF08B1012010BD0020CB +:1035D00010BD10B520B1FFF7AFFF08B1012010BD3D +:1035E000002010BD084809490068884201D1012027 +:1035F00070470020704700000000002000300200EB +:103600002000002008000020B0000020BEBAFECA42 +:103610000548064A0168914201D100210160044930 +:103620000120086070470000B0000020BEBAFECA4A +:1036300040E5014043480021017041701021817034 +:10364000704770B5054616460C460220F4F743FD58 +:103650003C490120F61E08703B4806603A4808388D +:103660000560001F046070BD10B50220F4F733FD43 +:1036700034490120087035480021C0F80011C0F815 +:103680000411C0F8081132494FF40000086010BD61 +:1036900010B52C4C207888B12D494FF40000091D3D +:1036A000086000F041F8002120B101206070294835 +:1036B000006801E061701020A0702170BDE810402A +:1036C0000020F4F708BD1F4810B5017859B11F4814 +:1036D000D0F8000128B100F027F8002800D0012020 +:1036E00010BD022010BD407810BD10B5C824641E66 +:1036F000E4B2FFF7E8FF022803D0012800D0002041 +:1037000010BD002CF3D1FFDFF9E70E4810B50178AA +:1037100041B100F009F818B10E480068C0B210BD00 +:10372000102010BD807810BD0848D0F8001129B1D4 +:10373000D0F8041111B1D0F8080108B10020704789 +:1037400001207047B400002010F5004000F0004058 +:1037500004F5014000F4004045480021017041702B +:10376000704770B5064614460D460120F4F7B3FCC9 +:1037700040480660001D0460001D056070BD70B506 +:103780003B4A012540EA014115703A4A41F08071F7 +:10379000121F1160384C0026C4F80461374A4FF0FC +:1037A0004071116058B1012800D0FFDFC4F80062F9 +:1037B000256032494FF00070091F086070BDC4F8E1 +:1037C0000052256070BD2A48017871B12B4A4FF034 +:1037D000407111602849D1F8042100211AB1284A0A +:1037E0001268427000E0417001700020F4F773BC71 +:1037F0001F48017841B12048D0F80401002802D0C8 +:103800001F480068C0B270474078704770B5002804 +:1038100028D01748007800B9FFDF1748D0F8041106 +:1038200000291FD10223C0F8043316490A680C6826 +:10383000D24342F3001244F010040C609C034FF09A +:10384000E025521C03E000BFC5F8804220BFD0F83D +:103850000461002EF8D01AB90A6822F010020A603A +:10386000C0F8083370BD044901208860704700002B +:10387000B700002008F5004000F0004008F50140C6 +:1038800000F4004010ED00E0F84808B50021C0F851 +:103890000011C0F80C11C0F81011C0F80411C0F8E4 +:1038A0001411C0F81811C0F82811F14800680090F0 +:1038B00008BD70B5EF4D00246C702C7000F02EFE2A +:1038C00085F82140AC626C63AC77092105F11400E6 +:1038D0000BF09CF8E849601E0860091D0860091D8E +:1038E0000C60091D0860091D0C60091D0860091D98 +:1038F0000860091D0860091D0860091D0860091D90 +:103900000860091D0860091D0860091D086070BD78 +:1039100070B5D8490268D94C4A6142688A61007A18 +:1039200008770C3C0A7DD54B251F012042B10E7E45 +:1039300000FA06F21A608E7D0EB1226000E02A6065 +:103940004A7D002A05D04A7E90401860C97D09B1A1 +:10395000206070BD286070BDCA49C9480860091D53 +:10396000C9480860704710B50446012902D00229F1 +:1039700002D0FFDF002101E04FF08071C348014316 +:10398000C0480160C049E0B225390843BD49091D5E +:103990000860B648D0F80001002800D0FFDF10BD55 +:1039A00070B5012000F0A4FDB94900250D6001208B +:1039B0000860B8490A68B84B22F077021A430A60D7 +:1039C000091D0A6822F47F4242F4B0520A60A94CF1 +:1039D000AC4A02214C3261771160B14AAF491160A3 +:1039E000A3491031121F1160A64A40F25B612432D4 +:1039F0001160121F40F203111160111F0860A149EC +:103A00000320091F08609F4996203031086094F90F +:103A10001E000AF087FB607F10B14FF4C02000E069 +:103A2000A0489F49943908609C489D49001F08316F +:103A300008608F480838091F0860012000F063FD06 +:103A40008A491020C1F8040384F82D5070BD9148B4 +:103A50003830016821F0010141F080710160704748 +:103A6000844A0368C2F802308088D080117270479F +:103A7000804890F8210070477E4A5170107070475E +:103A8000F0B50546840079488B882044C0F820367C +:103A90000B78D1F8011043EA0121C0F8001605F1B6 +:103AA000080001277B4C07FA00F6FC3C52B1012AC2 +:103AB00000D0FFDF2068304320602068AF403843EB +:103AC0002060F0BD2068B043F6E710B504460AF068 +:103AD00029FB6848847710BD664890F82E0070472F +:103AE000644890F830007047664AC178103211601F +:103AF000006864490002083108607047252807D033 +:103B0000262807D0272807D00A2807D8042206E04D +:103B1000022107E01A2105E0502103E0062202EB12 +:103B20004001C9B2574A0C3A116056494031086009 +:103B300070475048817A012916D0022913D1417D5E +:103B4000002910D0827E0121C37E01FA02F2994041 +:103B50000A43534994390A60007F534A002102EB1B +:103B60008000C0F810157047017DE9E7F0B5414BC2 +:103B70009C7A012C12D0022C67D15D7D002D64D07F +:103B80004A4F4FF47A76012C0AD05D7EDC7D04B179 +:103B9000012401291FD0022A1FD020E01D7DEDE75E +:103BA0001D7E9C7D04B101244FF4C86C012902D014 +:103BB000022A07D008E0022A00D1B44649F6FC6187 +:103BC000614405E03A4FB44607EB0C0101F5FA7188 +:103BD000B1FBF6F107E0292105E0354F643F07F21C +:103BE000E147B7FBF6F1491F0844324908602B4909 +:103BF00000204439C1F84C01280284F0010140EA58 +:103C0000015040F00312197F274800EB8104C4F8EB +:103C100010259C7E284A00EB810102EBC400C0F80D +:103C20001415264DC0F81055DB7E02EBC300C0F81A +:103C300014150F490839C0F81015012000FA04F1D5 +:103C400098400143164898380160F0BD2DE9F047CF +:103C5000064D0746032090468946C5F80002054EEA +:103C6000707F10B14FF4C0202BE029E0001000401D +:103C700018110040F8090020000E004018050050FF +:103C8000060102001415004025000302080110007F +:103C9000FC1F00403C17004088000080448000402A +:103CA0009CF501400000040400600040A2240200D2 +:103CB000683602004C85004000F001404C81004015 +:103CC000F948FA49086048460AF076FA40460AF090 +:103CD00053FA012417B1012F06D008E0404600F046 +:103CE00024FCB4722C6002E00220B0726C60F048D8 +:103CF000C464F048006842464946BDE8F04735E7ED +:103D00002DE9F0418846EC49074603201646C1F8E4 +:103D10000002EA4C607F10B14FF4C02000E0E2489E +:103D2000E24D286040460AF047FA30460AF024FA8D +:103D300017B1012F0CD014E0304600F0F6FB012043 +:103D4000A072606B40F4801060634FF4801007E055 +:103D50000220A072606B40F4001060634FF400100A +:103D6000286032464146BDE8F0410020FEE608B535 +:103D7000FF208DF80000D0480021C0F8101101216B +:103D8000016104E09DF80010491E8DF800109DF8B7 +:103D9000001019B1D0F810110029F3D09DF80000DF +:103DA000002800D1FFDF08BD2DE9FF5FC24D0746A7 +:103DB000002603209B46C5F80002C04C607F10B16E +:103DC0004FF4C02100E0B849DFF8E082C8F80010E5 +:103DD00002980AF0F1F958460AF0CEF9DFF8CC92D1 +:103DE0004FF0010A09F1A80917B1012F21D02BE0EA +:103DF000584600F09AFBC9F8005094F82D000128AD +:103E000005D002280BD0FFDF84F80AA01CE094F84C +:103E10002C20DDE901015B460AF022FA06E094F865 +:103E20002C30DDE901015A460AF0D1F9A16A4618A1 +:103E3000EAE7A149091DC9F8001094F82D000128EE +:103E400038D0FFDF0220A0729A48001F0660974911 +:103E50009B48A4310860606B40F400206063D5F893 +:103E600000724FF01009C5F808930020C5F8000251 +:103E70008E484FF48024001D046005F50075FFF79F +:103E800076FFFFF701FD2F60C8F80040C5F80491E8 +:103E90006100C8F800108649C1F84CA08548006848 +:103EA000B04200D3FFDF029904B05A463046BDE865 +:103EB000F05F5BE694F82C20DDE901015B460AF037 +:103EC000ADF9A16A4618BDE72DE9F0417A4CD4F866 +:103ED000000220F00307D4F804034FF01008C0F3E9 +:103EE0000016C4F808830025C4F800527348407FC8 +:103EF00010B14FF4C02000E06B486C49091D086008 +:103F0000FFF717FEFFF733FFC4F81051C4F828512C +:103F100000F004FBC4F80072002E01D0C4F8048342 +:103F2000BDE8F0810068674920F07F400860704775 +:103F300010B5012000F0DCFABDE81040012000F0CF +:103F4000E2BA4FF0E0210220C1F8000170475E495B +:103F5000087070475B4938390860704770B5574C36 +:103F60000546A06AA84200D3FFDF01202073256127 +:103F7000607F40B1284420614F48D0F8001241F0E2 +:103F80004001C0F800124A490020C1F844014949E3 +:103F9000206908390860BDE8704000F0D8BA70B5F3 +:103FA000464C0546022020730AF0F4F8024694F8C5 +:103FB0002C1028460AF07CF92061617F41B1084449 +:103FC00020613D48D0F8001241F04001C0F80012D5 +:103FD00037490020C1F844012169A06A08443549E5 +:103FE0000839086070BD31494FF48000091D086030 +:103FF0003248416B21F48001416300210173704715 +:104000002B4801214160C1600021C0F844112948BA +:104010000838016029488162704728494020487764 +:104020002849243108602448D0F8001241F04001AA +:10403000C0F8001270472048D0F8001221F040016B +:10404000C0F800121F4902202431086070471A4846 +:10405000D0F8001221F01001C0F800120121816196 +:10406000704715480021C0F81C11D0F8001241F02B +:104070001001C0F8001270470F4908B5D1F81C2193 +:10408000012A01D0002008BD0E4A0C32126802F04D +:104090007F02524202700020C1F81C010B480068E8 +:1040A0000090012008BD00000000040404F5014058 +:1040B000008000404C85004000100040F8090020BE +:1040C000488100403C150040B90000201C11004010 +:1040D000F8B5F74CF74D207B18B1D5F8440101280D +:1040E0000AD00026F449D1F81001012806D0002298 +:1040F000A07A012804D007E00126F3E74022F7E781 +:10410000D1F80C31012B04D000231343012802D035 +:1041100005E02023F9E7D1F80421012A05D0002287 +:104120001A43E64F022802D008E01022F8E73B6865 +:10413000012B03D1D1F80C31012B04D00023134300 +:10414000022802D007E00823F9E73A681AB9D1F843 +:104150000C21012A04D000221A43022802D004E0D4 +:104160000422F9E70EB1022300E0002313430228E2 +:1041700009D1D1F80401012805D1D5F8440101285D +:1041800001D0012600E00026CD481E43026812F04F +:10419000FF0F03D0D1F81421012A00D0002284F8A7 +:1041A0002E20006810F0FF0F03D0D1F8180101286D +:1041B00000D0002084F82F00C0481030006884F838 +:1041C0003000BF48E0380068402803D1FFF77BFA91 +:1041D000012800D0002084F83100FFF755FB0020B3 +:1041E000C5F84401B748006800903046F8BD30B5C6 +:1041F0000C00054600D1FFDFE00702D0012C00D003 +:10420000FFDF55B10221AA4801294172C472AA48B0 +:1042100005D0022908D0FFDF30BD0121F3E7D0F837 +:10422000001241F0040103E0D0F8001241F008014F +:10423000C0F8001230BD70B59D4C0022E17A8B07AA +:1042400001D5430711D4CB0605D594F82F3013B10F +:1042500094F831304BB10B0702D594F8203023B9D4 +:10426000490703D594F8211001B90122637A9249D4 +:10427000012533B100F00200104312D0BDE87040B8 +:1042800022E6607F10B14FF4C02000E08E488F4AD4 +:104290001060D1F8000220F00300C1F80002E572BE +:1042A00070BD0026012B09D0022B17D0FFDFA06ABA +:1042B00001223044BDE87040002157E4D1F80002EB +:1042C00020F00400C1F8000200F028F90123A572D3 +:1042D0001A460021962009F07AFF0FE0D1F800027B +:1042E00020F00800C1F8000200F018F90220A072C6 +:1042F00001231A460021962009F090FF0646D6E7D2 +:104300002DE9F047DFF8ACA1DAF84C0108B1FFF76E +:1043100010FC674C6D49606B086000266663FFF710 +:10432000D7FEDFF8AC810546D8F800006062617FF7 +:1043300009B1401A60626648001F0068A06209F077 +:1043400029FF84F82C00A07ADFF8889184F82D00EA +:10435000022808D1607830B1D9F8001009780140FE +:10436000207888430DD084F820605B4FE8070CD09C +:1043700039785A4A4908606A52F821108847012161 +:104380000AE0012084F82000EFE7A80601D5022109 +:1043900002E0A80707D50021504A3B783832A06ACE +:1043A00052F8232090473878C00713D1D9F800106D +:1043B0000622A01C09310AF05CFA40B9217AD9F82A +:1043C00000000078B1EBD01F01D1012000E00020F7 +:1043D00084F821002846FFF72EFFA80705D53F489F +:1043E0003978083050F82100804715F00C0F07D0BD +:1043F0003A483978183050F82110C5F3C000884782 +:10440000A80605D535483978283050F8210080476E +:104410003878022805D105F06E00402805D106F055 +:1044200021F93878042800D3FFDFA07A022819D1B7 +:10443000207B002816D0CAF8446102280ED001283B +:1044400000D0FFDFA16A2069884200D8FFDF216920 +:10445000C8F80010BDE8F04700F079B82169A06AFB +:104460000144F5E7BDE8F08700B5012802D0022835 +:1044700002D0FFDF282000BD182000BD10B541F696 +:10448000A474012802D0022802D0FFDF204610BD0C +:1044900041F2883010BD10B541F2D474012802D029 +:1044A000022802D0FFDF204610BD41F2040010BDFB +:1044B000F809002000800040001000400014004077 +:1044C00040160040448100400000040408F501400B +:1044D0004485004004150040B9000020C4EE0100EE +:1044E00000B5012802D0022800D0FFDF002000BD67 +:1044F00000F01F02012191404009800000F1E020FE +:10450000C0F88011704700F01F020121914040095E +:10451000800000F1E020C0F88012704711480021AF +:10452000417281720121C17270470F4A11685306AE +:104530000228D3F8200307D0C0F3062021F4FE415F +:1045400041EA002010607047C0F30660F6E70548B6 +:10455000416B41F48001416304494FF480000860DD +:1045600070470000F80900208815004004F501405C +:1045700010B5434822210AF027FA41480024017867 +:1045800021F010010170012105F004FB3C494FF6B8 +:10459000FF70263981F8224088843A490880488093 +:1045A00010BDE5E7704700F05FB83549016070471E +:1045B000344908807047324926398A8CA2F57F43F6 +:1045C000FF3B02D00021016008E091F822202C4935 +:1045D0002639012A02D0016001207047002070476F +:1045E0002748263810F8221F012908D00121017020 +:1045F00024482349263900888884012070470020F8 +:1046000070472049488070471D491E4B26398A8CC7 +:104610005B889A4205D191F8222012B101600120F5 +:104620007047002070471648164A2638818C5288F9 +:10463000914209D14FF6FF71818410F8221F19B100 +:104640000021017001207047002070470C480D4A7E +:104650002638818C5288914204D190F8220008B10A +:104660000020704701207047054926398A8C824214 +:1046700005D1002081F822004FF6FF708884704732 +:10468000560A0020BA0000207047524A012338B170 +:10469000012804D113700868906088889081704761 +:1046A00053700868C2F802008888D0807047494A71 +:1046B00010B1012807D00EE0507860B1D2F80200A6 +:1046C0000860D08804E0107828B19068086090896C +:1046D000888001207047002070473E4910B10128B2 +:1046E00002D005E0487800E0087808B10120704762 +:1046F0000020704730B58DB00C4605460D2104A84A +:104700000AF084F9E0788DF81F0020798DF81E00FA +:1047100060798DF81D001022294668460AF0D5F808 +:10472000684609F075F820789DF82F1088420CD162 +:1047300060789DF82E10884207D1A0789DF82D1042 +:10474000884202D101200DB030BD0020FBE730B51A +:104750000C4605468DB04FF0030104F1030012B181 +:10476000FEF7A6FB01E0FEF7C2FB60790D2120F009 +:10477000C00040F04000607104A80AF047F9E078FA +:104780008DF81F0020798DF81E0060798DF81D00CE +:104790001022294668460AF098F8684609F038F869 +:1047A0009DF82F0020709DF82E0060709DF82D0060 +:1047B000A070C8E710B5002904464FF0060102D0EA +:1047C000FEF776FB01E0FEF792FB607920F0C00077 +:1047D000607110BDBE00002070B5FC4E044696F816 +:1047E0009210002506F18000012909D096F88C105E +:1047F000012912D096F86A00012818D0002070BD57 +:1048000065701921217050F8131FC4F80210406818 +:10481000C4F8060086F8925024E0657006212170E5 +:10482000D0F80E00C4F8020086F88C501AE06570CB +:104830001320E649207020226C31A01C0AF045F8B4 +:104840000120A07106F86A5FB188B184E049496827 +:104850004A7B86F8262086F822000888FBF7CAFAE9 +:10486000FAF771FF012070BDD84890F86A1011B1B5 +:10487000B0F86E0070474FF6FF70704770B5D448BF +:10488000017811B10C26304670BDD04C002635465B +:1048900084F8626084F8636084F8646084F865601A +:1048A00084F85E6084F8606084F8566084F836604E +:1048B00084F867607F21817094F8660028B1FFF763 +:1048C000BAFBFEF7E5FE84F8665084F86A5084F877 +:1048D0008C5084F89250BD489C3005F01FF8BB48BE +:1048E000C43005F01BF8CEE7B94910B500200870B8 +:1048F000FFF7C4FF002800D0FFDF10BDB34890F8D9 +:1049000062007047B14900B591F8580091F857100E +:10491000C0F38002C0F340031A4400F001001044C9 +:10492000052910D2DFE801F00A050A030700A949AA +:1049300006E0A94800BDA749083101E0A5490839AA +:1049400031F8100000BDFFDF002000BD9F4840F29D +:104950007121B0F85A00484370479C4890F86800AD +:10496000002800D00120704710B5984C207A00F044 +:10497000EDFC40B1207C04F1110104F0AFF90828EE +:1049800001D0012010BD207A30B1022804D00120CE +:10499000BDE81040FFF7A1BE0020F9E78B4908727F +:1049A00070478A4981F8600070477CB505468748A2 +:1049B00090F85D0004F0A7F9040013D0102104F072 +:1049C000E5FC00280ED12A4669462046FFF7BFFEC7 +:1049D0007E4869469C3004F0D3FF7C4801219C301E +:1049E00004F0E7FF7CBD70B578490A310D4601F14E +:1049F000920004F0B9FF754C04F19C00617A04F058 +:104A0000CBFF294604F1C40004F0AEFF617A04F143 +:104A1000C400BDE8704004F0BFBF2DE9F0416B4C0D +:104A2000074694F85D0004F064F9064694F85F00C8 +:104A300004F10A0528B126B11021304604F0A6FC85 +:104A4000A0B194F86000002824D094F85E000028FB +:104A500020D0607A294600F08AFCA8B104F04BFA15 +:104A60003A462946BDE8F041FFF771BE0120607269 +:104A70003A4629463046FFF76AFE94F85D1028460C +:104A8000BDE8F04104F002BA39462846BDE8F041DD +:104A9000FFF790BEBDE8F08170B54C4C207AB0B104 +:104AA000022814D00120494960720A310D46FFF7EF +:104AB000FEFD207A00F04AFC84F85F00082084F8AC +:104AC0005D00607A294600F049FC38B901E0002019 +:104AD000E9E7607A294600F04AFC00B1012084F839 +:104AE0005E0094F85F0028B994F85700012801D0BF +:104AF000042806D13549207C113104F0EFF884F800 +:104B00005D0000202060FDF773F960600020FFF772 +:104B100084FFFFF768FF94F85700012801D00428AC +:104B200003D1BDE8704000203FE770BD70B5274C51 +:104B3000417B84F85810017984F85710012925D059 +:104B4000B0F80020A4F85A20827B84F8682082798B +:104B5000F2B1022A1CD00122227450F8072FC4F8A7 +:104B600011208088A4F8150094F85600012508B19A +:104B700084F8635094F8360008B184F8645005292D +:104B800033D2DFE801F0070D2B2D0D000022D9E70D +:104B90000022E1E70D4800219C3004F0C2FE0FE046 +:104BA0000A4801219C3004F0BCFE0849113101F192 +:104BB0008B0004F0E5FE0548217C9C3004F0F9FEF2 +:104BC000024801219C3000F0DDFB0FE0780A002054 +:104BD000CC0000201CEF0100D0891300062100E06A +:104BE0000221FA4804F09DFE00E0FFDFF7480421AF +:104BF000283004F096FE84F86250002070BD70B535 +:104C00000546F24C00209C3C04F8640FEF482A460D +:104C1000853809F05AFE04F82E5C0120207070BD22 +:104C200010B5EA4C00229C3C84F8632004F8560F2F +:104C30000246E648653809F048FE0120607310BD61 +:104C4000E2499C3981F86700704770B500F0ADFB10 +:104C5000DE4C9C3C002694F8660028B1FFF7EBF987 +:104C6000FEF716FD84F86660D94D2E7094F8570053 +:104C7000012804D0BDE87040002001F08EB9022068 +:104C800001F08BF994F86A0000B1FFDF6878002822 +:104C900017D0207C84F87100D4F81100C4F8720099 +:104CA000B4F81500A4F876003C2084F86C0068681D +:104CB0000088A4F86E00012084F86A0000F06BFB05 +:104CC0006E7070BD10B50024C20701D0CA0708D0AD +:104CD00082070BD58A0709D42620FEF70FFF02248E +:104CE0000CE02520FEF70AFF012407E0400705D568 +:104CF000480703D42720FEF701FF0424FEF72CFE0B +:104D0000204610BD2DE9F041B148017859BBAF4CA8 +:104D10009C3C94F8621031B3002584F861504570D2 +:104D200028465834FFF713F9FEF73AFEFEF714FE53 +:104D3000A848FEF7D9FEA748C01EFFF7F3F8207871 +:104D40000021FFF7BFFF2071FFF7FBF800210122D0 +:104D50000846FEF7D5FF0F210520FEF78DFEA0794E +:104D6000583C58B901E00C2094E694F85F0028B94B +:104D700094F85700012801D0042828D1FDF738F80D +:104D8000064631466068FDF741FD934990FBF1F717 +:104D900001FB170041423046FCF733FD606020689C +:104DA0003844206003F096FF216888420FD8C4E998 +:104DB00000560120FFF731FEFFF715FE94F857006B +:104DC000012801D0042802D10120FFF7EEFD7F4821 +:104DD000617A9238FEF744FE94F8570001280DD00E +:104DE00004280BD094F8630040B1784994F8562019 +:104DF0006539764804F0F9FD84F8635094F864004E +:104E000048B1724994F83620853901F1AD0004F0BB +:104E100018FE84F8645003F0BDFF6C48503004F075 +:104E200024F884F86600002034E669494860704739 +:104E300070B5664C0500A4F19C040AD094F85C108F +:104E400014F8580FFFF73EFF14F8041F084304F846 +:104E50005C0994F8610038B194F85700012800D13A +:104E6000FFDFBDE87040F0E635B1002201234FF4CA +:104E700096711046FEF798FF5448FFF76BF894F8C8 +:104E80005700052809D2DFE800F0030303090300F7 +:104E900001210846FFF7ABF900E0FFDF94F8581056 +:104EA00094F85C0081434FF0010005D194F857104D +:104EB000012904D084F861004549087070BD0021C3 +:104EC00084F85C10F8E7424810B5007848B93F48CC +:104ED0009C3890F8620020B10020FFF7A9FF002065 +:104EE00010BD00F062FA0C2010BD39490120487055 +:104EF000704736499C3981F86500704770B50025C8 +:104F000000F024FF48B1324E3078012808D0022842 +:104F100001D0032833D0FFDF70BDBDE8704094E6B8 +:104F20002A4C9C3C94F85700032828D094F866003B +:104F300018B1FEF799FBFFF770F824485030FFF7DF +:104F400009F89620FFF72BF894F8570001280DD0A8 +:104F500004280BD094F86800012801D0032800D160 +:104F6000102545F00E010020FFF741F994F8670085 +:104F7000012801D1FFF775F80220307070BDBDE83F +:104F80007040012054E710B5104C9C3C94F8670029 +:104F9000012801D100F014FA94F8660018B1FFF767 +:104FA0004AF8FEF775FB00F0D1FEB8B1084C207846 +:104FB000022800D0FFDF0120FFF73AFF2078002809 +:104FC00003D02078012800D0FFDF10BD140B002093 +:104FD000CC0000200FEF010040420F00BDE8104060 +:104FE00033E610B503F07AFE044603F09CFF38B1B7 +:104FF000204603F088FE18B1102104F0C7F908B16B +:105000000020E2E70120E0E72DE9F84F0446002602 +:10501000FEF762FDDFF8C493074699F80000022806 +:1050200000D0FFDFDFF8B8A39AF86700012801D1AC +:1050300000F0C6F9EA48EC3004F092FCFF25804607 +:10504000002C78D0E648EC3004F072FD002872D0D5 +:10505000FEF70EFD00286ED0E14C9AF86600EC34A5 +:1050600060B103F07DFE0546FF2807D00146E01C35 +:1050700003F06AFE284603F07DFE0743DFF860B3C5 +:10508000B8F1060F0BF1800B55D2DFE808F09797C7 +:10509000970397559AF8571001294CD0D046042908 +:1050A00049D067B998F8680008B1022843D1207840 +:1050B000E11CC0F38010FFF794FF00287ED198F820 +:1050C0006700474601282ED197F8920058BB01206F +:1050D00087F89200FF2D0DD0C14A28469432511E08 +:1050E00003F01BFE00B9FFDF17F8930F40F002003A +:1050F00038700CE02078C0F3801088F89300DBF85B +:105100006F10CBF81410BBF87310ABF81810B44D37 +:1051100099F802009A354C467F2800D1FFDFA0782D +:1051200028707F20A070AE48C430FEF713FF032123 +:1051300089F8001043E041E020789AF81010A0466A +:10514000C0F380105446884207D1A5490622113188 +:1051500008F1030009F08DFB20B10020FF2D08D0DD +:1051600088B901E00120F9E794F85D00A8420AD06F +:105170000FE070B198F8000008F10301C0F380104F +:10518000FFF72FFF28B994F85700012813D00428FF +:1051900011D094F8570088B96FB994F8680008B135 +:1051A00001280BD198F8000008F10301C0F380102A +:1051B000FFF717FF10B994F86500C8B101269AF8F7 +:1051C000660018B1FEF737FFFEF762FA16B101204C +:1051D000FFF72EFE99F800104846002906D0017806 +:1051E000012903D00078032800D0FFDFBDE8F88F45 +:1051F0007B49D9F804008031C34651F87B2FC0F8B1 +:105200000E208A8842828979017598F816204275A5 +:10521000B8F81720C282B8F819204280B8F81B20CD +:105220008280B8F81D20C2806E4A4146D2F80B3009 +:105230008360D27B027311F8242F02F01F020276E2 +:1052400011F81F29520980F8642111F8051C427BCE +:10525000C1F340110A40427394F86A0000B1FFDFC5 +:10526000002784F86C70D9F80400C8460188A4F8B7 +:105270006E104188A4F884108188A4F88610C18833 +:10528000A4F8881090F8640184F88A00544894F8CF +:105290005F100A30009021B1607A009900F067F841 +:1052A00038B994F8600058B1607A009900F056F867 +:1052B00030B1D4F80A00A067E089A4F87C0002E0CD +:1052C000A767A4F87C709BF80000454AC0F38011E2 +:1052D000D8F804008032FF2D417652F86F1FC0F8D5 +:1052E0001A109288C28313D0C4F87E103C4AC08B37 +:1052F000A4F882007232511E284603F00EFD00B958 +:10530000FFDF94F8710040F0020084F871000DE0B6 +:10531000C4F87E70A4F88270417E84F87110D0F8D1 +:105320001A10C4F87210C08BA4F87600012084F81B +:105330006A0000F030F888F8007000F036F80120BC +:1053400000F02BFE3BE7012200F04FBE022803D005 +:10535000032801D00020704701207047012802D1A6 +:105360004879800901D0002070470120704701284A +:1053700006D148790121B1EB901F01D1012070477E +:10538000002070470278202322F0200203EA411116 +:105390000A4302707047114810B540680088FAF758 +:1053A00029FDBDE81040FAF7BFB910B5FEF728FE99 +:1053B000FEF719FEFEF788FDBDE81040FEF7B8BD08 +:1053C000064810B5801CFEF757FE10B903497F2030 +:1053D0008870BDE81040FEF73ABE0000CC00002007 +:1053E000780A0020780B0020FE484068704770B5AE +:1053F00006460D4614461046FFF740F8022C10D022 +:10540000F94908444FF47A7100F2E140B0FBF1F041 +:1054100000EB460005442046FFF726F8284460309C +:1054200070BDF249EDE72DE9F0410D460646014613 +:105430001746012004F0B1F8044696F85200FFF731 +:105440001DF896F85210022914D0E74940F2712253 +:1054500008444FF47A7100F2E140B0FBF1F170883A +:105460005043C1EB4000C01BA0F55970A54203D2C8 +:10547000214602E0DD49E9E72946814204D2A542FE +:1054800001D2204600E028467062BDE8F0812DE997 +:10549000FF4F89B0044690F85200DDF858909A46C4 +:1054A000039049EA0A00089094F864000025164623 +:1054B00019460D2803D00020069011B131E00120DB +:1054C000FAE794F8040103282BD1069848B3B4F8FE +:1054D0007C01B04225D1D4F80C01C4F8F8006088F2 +:1054E00040F2E2414843C4F8FC00B4F85201B4F879 +:1054F000DE100844C4F80001204602F093FBB4F823 +:105500008001E08294F87E016075B4F882016080C9 +:10551000B4F88401A080B4F88601E080022084F809 +:105520000401D4F85C010290B4F8DE00D4F858818C +:105530000090B4F85011D4F84C010590BAF1000F66 +:1055400004D094F8180100287ED108E004F5A67074 +:10555000049004F59C7704F1D80B001D07E004F5D6 +:105560009870049004F58E7704F5967B001D0790E3 +:10557000B4F85800301A00B20190701A00B2002836 +:1055800005DAD4F84801059001200890019894F8B4 +:105590000411E9B101297DD002297CD003297BD0F7 +:1055A000FFDF29460598FCF72CF904990860079855 +:1055B0000121068000203870397104980068B860B5 +:1055C0008B48D0E90520824267D9CBF8000082E100 +:1055D000B8F1000F00D1FFDFE08A40F271214843AB +:1055E000490001EB40000A9900F074FDC4F808017D +:1055F000608840F2E24148430A9900F06BFDC4F82C +:105600000C0182B22046A16AFFF70DFF14F8520F79 +:10561000FEF766FF4FF47A7100F2E140B0FBF1F162 +:1056200001EB080000902078FEF75AFF14F8521999 +:10563000024602293FD06C4815180846FEF71EFFA7 +:1056400029184FF47A7000E076E101F2DB51B1FBEA +:10565000F0F1E08A40F271225043C1EB4001D4F8EE +:10566000080140F2E2430A1A0099551894F85220B2 +:10567000617D11FB03F105F2C245FFF7B8FE5C49FD +:10568000801C4861886194F85200FEF729FF4FF4AE +:105690007A7103E087E010E0BEE019E100F2E1403A +:1056A000B0FBF1F101EB0800281AB0F53D7FBFF423 +:1056B00078AFFFDF75E74D48BEE7E08A40F2712220 +:1056C000D4F8FC10504301EB40000A9900F002FDB1 +:1056D000C4F80801608840F2E24148430A9900F0AA +:1056E000F9FCC4F80C0182B22046A16AFFF79BFEC8 +:1056F000009848BBB9F1000F26D094F85200FEF78D +:10570000BDFE94F85210024602291BD0364840F2E2 +:10571000712510444FF47A7200F2E140B0FBF2F0D0 +:10572000D4F80821D4F8FC300244E08A684303EB43 +:105730004000851A0846FEF797FE0299081A0544AC +:10574000203D0CE02948E2E7E08A40F27122D4F8DB +:10575000FC10504301EB4000D4F80811451AD4F86E +:105760000021D4F8F810D4F8080140F2E24301FB1C +:10577000020094F85220617D11FB03F1E834FFF739 +:1057800036FE01461A4840F27123416134F8E61CA6 +:10579000626A5943C2EB4101A1F2133181610120D8 +:1057A0002077E83CFDE6628840F27123D4F80C11C2 +:1057B0005A43C1EB42054543DDE900021044D4F8E9 +:1057C0000021D4F8F8C0801AD4F80831401E0CFB30 +:1057D000023200FB012094F85220617D40F2E24346 +:1057E00008E000008C0B0020A22402000436020016 +:1057F000D400002011FB03F1FFF7F9FD0146FE483C +:10580000B9F1000F4161A5F213318161CAD0B8F13D +:10581000000FC7D1FFDFC4E6618840F27123D4F8DE +:105820000C215943C2EB4105454394F863002428F9 +:1058300003D094F86400242809D1B4F87C01301A0C +:1058400000B2002803DB94F87F0100B103900898B0 +:1058500028B10098002802981AD000B1FFDFDDE9D6 +:1058600000010844D4F80C11039A48430021FFF7C3 +:10587000BEFD0146E04840F2712341616188D4F8E1 +:105880000C215943C2EB4101A1F21331816188E639 +:1058900010B1B8F1000F00D1FFDF0398FEF7EEFD65 +:1058A00001460398022811D0D44808444FF47A7175 +:1058B00000F2E140B0FBF1F02D1A94F85200FEF72F +:1058C000D3FD0299081A0544203DC8E7CC48ECE70F +:1058D0001046CBF80020626A104400F28310F86092 +:1058E0007971B4F8C800801B00B2002801DD0320E4 +:1058F0007871069820B3B9F1000F17D0B4F8F020F2 +:10590000C2B3B4F8F20000BFA4F8F20094F8F43087 +:10591000401C4343934209D27879401E002805DD9C +:105920007971B4F8F200401CA4F8F200BAF1000F4B +:1059300027D094F8180100B302200DB0BDE8F08F15 +:10594000B9F1000FDAD194F804010028EED0608894 +:1059500040F27122D4F80C115043C1EB400138469B +:1059600003F0DFFD0004000CE0D0179901B10880BE +:105970000120E2E7FFE70020C6E794F85401FCF7B6 +:1059800091FD94F85401394600F08AFB18B18AF071 +:10599000010084F819010020CFE7FEB50446FCF7AA +:1059A00027FA0146D4F84801FCF730FF214600F001 +:1059B0009BFB94F864100D290AD0B4F85820B4F871 +:1059C00016111318994206DB491CA4F8161106E0BB +:1059D000B4F816010CE0401C1044A4F8160194F829 +:1059E0001A0140B9B4F81601B4F8CC10884202D1BB +:1059F000401CA4F81601B4F852017F4D401CA4F8D5 +:105A00005201B4F87E00B4F87C10401AB4F8581073 +:105A1000401E084486B216E07A48297802AF002377 +:105A200030F81110CDE9003794F8643130F81300E4 +:105A30000023084481B22046FFF729FD002821D029 +:105A4000012817D0FFDFB4F81621B01A00B20028E1 +:105A5000E2DA082084F87300012084F872002046FE +:105A600001F09DFD204600F01DFB2879BDE8FE40B9 +:105A7000F5F748BFB4F81601BDF808100844A4F8BB +:105A80001601E0E7FEBD2DE9F0415F4C032701253B +:105A9000277500202074E07A04F1100650B14FF40D +:105AA0007A71A069FBF7ADFEA0610021304603F0DA +:105AB00038FD10E0002000F056FB0546FEF746FFDB +:105AC00005442946A069FBF79CFEA06129463046A3 +:105AD00003F027FD451C208C411C0A2901D22844D3 +:105AE0002084606830B1208C401C0A2802D3022038 +:105AF000607500E06775607A002806D1207B31462A +:105B000000F0CEFA002800D1FFDFBEE42DE9F0411D +:105B100006463D480F460178374D032909D1017BE0 +:105B2000B14206D1406828613846BDE8F04100F036 +:105B30002FBB304600F0AAFA0721FAF729F8040033 +:105B400000D1FFDF304600F0A1FA2188884200D062 +:105B5000FFDF214638462C61BDE8F04100F0D1BAA4 +:105B600010B5294C207848B101206072FFF7C1F9C7 +:105B70002078032804D0207A002800D00C2010BD03 +:105B8000207BFCF78FFC207BFCF7D9FE207BFCF709 +:105B900010F900B9FFDF0020207010BD10B5FFF72D +:105BA000DFFF00F022FB18490020C87210BD70B55D +:105BB0000446012000F05BFAC5B20B2000F057FA52 +:105BC000C0B2854200D0FFDF6FF0040000F04FFA52 +:105BD000C5B2192000F04BFAC0B2854200D0FFDFF9 +:105BE0000549002001220C7188700A704870C87045 +:105BF000054908700AE00000D4000020A224020039 +:105C0000043602002CEF01008C0B0020BDE8704030 +:105C1000C4E7FD49087070472DE9F041FB4C06468A +:105C2000207800284CD1FA48FCF769F82073202826 +:105C300046D04FF00308666084F800800025657246 +:105C40002572A6B1012106F1F400FDF750F90620F6 +:105C5000F9F746FF07460720F9F742FF16F8F41F49 +:105C60003844B1FBF0F200FB1210401C3070FCF71E +:105C700099F840F2F651884200D2084600F23D10F1 +:105C800086B2FEF73FFEE061FEF760FE0127C8B175 +:105C9000A772002000F067FA0644FCF7A9F8314625 +:105CA000FBF7AFFDC4F8180084F8148084F8158061 +:105CB000D6492574207B103100F0F2F960B90AE072 +:105CC0000C2022E7FCF794F83146FBF79AFDA0611F +:105CD000A572E772E8E7FFDF25840020FFF709F9E6 +:105CE000002012E77CB50025044680F80451A0F896 +:105CF0005051C54900950195C648097894F864212A +:105D00002B4630F8111030F812002A46084481B2B0 +:105D10002046FFF7BCFB00B1FFDFC4F800510120B3 +:105D2000C4F8F85084F80401A4F81651A4F81451EA +:105D300084F81A5134F8580F401E24F8900B0020B4 +:105D4000A4F86A507CBDB04948707047AF4810B5A0 +:105D5000417A012409B1002408E0C17A31B1406AD6 +:105D6000AD49884202D90024FFF7BFF8204610BD94 +:105D700070B5A54C0646E088401CE080D4E90201DD +:105D80006278D6F8585112B12A4603F0F4FBA060AD +:105D9000854205D896F80401012801D0E07808B1C1 +:105DA000002070BD012070BD70B504460D46084648 +:105DB000FEF764FB022D10D0984908444FF47A7125 +:105DC00000F2E140B0FBF1F040F2E2414C4300F55B +:105DD0004D70844203D9201A70BD9149EDE700202F +:105DE00070BDFEB50025044680F8185190F8D60025 +:105DF00000284AD194F80401032846D1FBF7F8FFA4 +:105E00000146D4F84801FCF701FD00283DDD21469C +:105E100000F06AF9411CB4F858000144A4F81411C8 +:105E2000B4F81411B4F8CC20511A09B200292CDDB1 +:105E3000012184F81A11B4F87E10B4F87C20891A74 +:105E4000491E084486B21AE06F49724802AA0978CE +:105E500030F81110CDE90052B4F8142194F86431EF +:105E600030F813000123084481B22046FFF70FFBEE +:105E700000280AD0012809D0022806D0FFDFB4F894 +:105E80001401301A00B20028DEDAFEBDB4F81401A5 +:105E9000BDF808100844A4F81401F0E77CB500250B +:105EA0000446012902D15848C17871B1042084F810 +:105EB000040100BFFBF7A8FEA4F85251B4F8580043 +:105EC000A4F8160184F81A517CBD5249007894F860 +:105ED000042131F810000123032A13D0012AE9D14B +:105EE000CDE9003594F86431B4F8CC2031F81310C2 +:105EF0000023084481B22046FFF7C9FA0028D9D010 +:105F0000FFDFD7E7C4F80051C4F8F850E8E770B5F0 +:105F10003E4C00263546E07A08B1E57219E0A07AD9 +:105F200018B1012000F01FF90646FEF70FFD811998 +:105F3000A069FBF766FCA061257403206075607A98 +:105F400030B93249207B103100F0AAF800B9FFDFE8 +:105F50002584FBF759FE2C480079BDE87040F5F721 +:105F6000D1BC10B5062916D2DFE801F00509030CF3 +:105F70000C0D002100E00121BDE810408EE7032157 +:105F800080F8041110BDB0F80C118AB2816ABDE826 +:105F90001040FFF748BAFFDF10BD10B548B1012827 +:105FA00003D0022805D0FFDF10BDBDE8104000F08F +:105FB00048B9BDE81040AAE770B5134CA178022992 +:105FC00012D1E18800290FD12569C5F85C0195F847 +:105FD0005200E035FEF748FAE96F081AA16801445B +:105FE000A160E1680844E06070BD70B505460648F0 +:105FF0008378022B16D0054C2434C1B1012915D069 +:10600000022916D0FFDF70BDD40000208C0B0020C9 +:106010000D5B01002CEF0100DB821300A2240200C3 +:1060200004360200046904F5AC74E6E76D1E2560D1 +:10603000E9E71046FEF72FFA4FF47A7100F2E140DB +:10604000B0FBF1F0281A2060DDE7D74810B50078E2 +:1060500008B1002010BD0720F9F734FD80F00100E1 +:1060600010BDD1480078002800D0012070470028DA +:1060700006DA00F00F0000F1E02090F8140D03E0C4 +:1060800000F1E02090F800044009704710B5044684 +:10609000202800D3FFDFC448283030F8140010BD9A +:1060A000FCF7EEB870B50446002084F8040194F8BB +:1060B00054514FF6FF76202D00D3FFDFBA48283029 +:1060C00020F8156094F85401FBF773FE202084F843 +:1060D000540198E702460020002904D0B3485143F8 +:1060E000B1FBF0F0401C7047002809D0D1F80C211A +:1060F000498840F271235943C2EB4101B0FBF1F0F2 +:10610000704770B50125AA4E0C46082829D2DFE851 +:1061100000F0040F17171228281B204600F0FAF889 +:10612000204600F0BAF884F818510220B0706AE7EF +:1061300001F076FD01E0FEF7E3F884F8185162E71C +:106140002046BDE8704028E494F80401042800D0FB +:10615000FFDF2046FFF7A6FF3079BDE87040F5F776 +:10616000D1BBFFDF4FE708B500284FF001016846BB +:1061700002D0FCF79DFE01E0FCF790FE9DF80000C8 +:1061800042F210710002B0FBF1F201FB120008BDF7 +:1061900070B5854C05462078032800D0FFDF002627 +:1061A000082D20D2DFE805F0040D1717131F1F1A62 +:1061B0006662FEF7A7FD00B1FFDF7D49032088700E +:1061C00021E7FEF780FE0028FAD0FFDF1BE7BDE8DD +:1061D0007040FEF795B8BDE8704054E4207BFBF7B3 +:1061E000E8FD26700FE7FFDF0DE7FEB5704C0120DC +:1061F000E0704FF6FF750CE00721F9F7C9FC0600C7 +:1062000000D1FFDF96F85401FCF799FB3046FFF709 +:1062100049FF69460720F9F744FC50B1FFDF08E069 +:10622000029830B190F8041119B10088A842E3D166 +:1062300004E06846F9F713FC0028F1D00020E07074 +:10624000FEBD70B5584C0020E072A6692070012098 +:1062500020720021606802F093FF6068C0F8486116 +:10626000257B80F85451616AC0F84C61C0F8581120 +:106270000688202D00D3FFDF4B48283020F815601A +:106280006068FFF72FFD00B1FFDFFBF7BDFC48485A +:106290000079BDE87040F5F735BB70B50546FBF7F2 +:1062A00081FD95F8526004463046FEF7E7F8022E6D +:1062B00026D0404940F2712208444FF47A7100F22E +:1062C000E140B0FBF1F0D5F80C110144688850436F +:1062D000C1EB4006303EB72C00D8B7242946012038 +:1062E00003F05BF92044341A29460120A4F2193442 +:1062F00003F053F9696A9C30814203D9081A02E01D +:106300002D49D7E700202A49A042CC6000D320467F +:10631000886078E610B5044625490020C4F8580185 +:10632000C880C4F85C0194F8190138B9FBF760FD26 +:10633000D4F82411FCF76AFA002813DCB4F816111B +:10634000B4F85800814201D1B4F8CC10081AA4F86E +:10635000CE00A4F85810D4F84001C4F82401C4F8C1 +:1063600048011CE0B4F81401B4F85810401AA4F81D +:10637000CE00B4F81401A4F85800D4F82401C4F8ED +:106380004001C4F84801D4F82C01C4F8D800D4F86E +:106390003001C4F84C01B4F83401A4F8500120468F +:1063A000BDE8104001F030BB8C0B002040420F00D4 +:1063B000D4000020A224020004360200012806D0E6 +:1063C000022807D0042808D0082808D105E00129B0 +:1063D00007D004E0022904D001E0042901D0002004 +:1063E00070470120704770B5FE4CE06890F864007B +:1063F0001B2800D0FFDFE068002580F88B5090F864 +:10640000A20100B1FFDFE06890F88C1041B180F884 +:106410008C500188A0F8A61180F8A4510D2108E045 +:106420000188A0F8A61180F8A451012180F8A811D4 +:106430000C2180F8A2110088F9F7DCFCF9F774F957 +:10644000E078F5F75FFAE06880F8645070BD70B5E9 +:10645000E44C2079800725D56078002822D1216975 +:1064600020460126CA78C568921E05F15800162AF2 +:1064700079D2DFE802F00BAF4A566718AF32AF406F +:106480006A5DAFAFAF5D6E797F8C9DA7012395F8F4 +:106490006620194602F0E9FF002803D1E1680820D0 +:1064A00081F8660070BD087995F863100A2909D152 +:1064B00095F8C210814205D1002085F8630085F867 +:1064C000860070BD95F86500010704D520F008002E +:1064D00085F8650068E0FFDF70BD95F86500C007CE +:1064E00000D1FFDF01F031FCE06810F8651F21F0FA +:1064F0000101017070BD95F86400102800D0FFDF25 +:10650000E068112180F88B6008E095F86400142899 +:1065100000D0FFDFE068152180F88B6080F8641000 +:1065200070BD95F86400152800D0FFDF172005E046 +:1065300095F86400152800D0FFDF1920E16881F884 +:10654000640070BDBDE870404DE7BDE8704001F0EB +:1065500008BC95F863200123002102F086FF00B9F2 +:10656000FFDF0E200FE035E015F8650F20F0040086 +:10657000287019E095F863200123002102F075FFCF +:1065800000B9FFDF1C20E16881F8630070BD95F859 +:106590006500C0F30110012800D0FFDFE06810F8AB +:1065A000651F21F010010170BDE8704001F0CDBB06 +:1065B00095F863200123002102F057FF00B9FFDFA7 +:1065C0001F20E0E795F86400212801D000B1FFDF2B +:1065D0002220B3E7FFDF70BD8248C16891F86520D3 +:1065E000130702D501214170704742F0080281F87B +:1065F00065204069C07881F8C10001F09DBB10B5ED +:10660000784CE1680A88A1F8E62181F8E40191F864 +:10661000510001F03EFBE16881F8E80191F8520079 +:1066200001F037FBE16881F8E901012081F8E2011E +:10663000002081F89201E078BDE81040F5F762B9DA +:1066400010B5684C0521E068FFF78BFCE06890F816 +:106650004E10012913D000F5CB7102880A85028EF5 +:106660004A85828E8A85428ECA85C08E0886012020 +:1066700081F82600E078BDE81040F5F743B9022123 +:1066800080F84E1010BD10B5564C01230921E0686A +:1066900090F86320583002F0E8FE38B1E16800203D +:1066A00001F87A0F087301F8170C10BD0120607013 +:1066B00010BD70B54B4D2946E868496990F86320D4 +:1066C00009790E2A01D1122903D000241C2A03D0F3 +:1066D00004E0BDE87040D6E7142902D0202A07D094 +:1066E00008E080F8634080F88640BDE87040A7E786 +:1066F000162914D0172918D190F86410222914D122 +:1067000080F8644001F021FBE86880F87B4090F855 +:106710009201002809D00020BDE870406FE780F8A2 +:10672000634080F886401A20F6E770BD2DE9F843F3 +:106730002C4CE06890F86310202909D05FF0000726 +:1067400090F86410222905D07FB300F1630503E0BF +:106750000127F5E700F1640510F8941F41F00401EA +:106760000170606903F038FB4FF00108002608B3A0 +:106770003946606901F09FFAE0B16A466169E068F4 +:1067800002F064FF80B3606903F024FBE168A1F8C4 +:106790007C01B1F8581001F070FA30B3E06828219C +:1067A00080F8731080F8728045E0FFE70220607087 +:1067B000BDE8F883E06890F8920110B11E20FFF761 +:1067C0001EFFC7B16069E168C07881F8C20008FAAD +:1067D00000F1C1F3006000B9FFDFE0680A2180F832 +:1067E000631003E0F00000200EE019E090F886004E +:1067F00030B9FFDF04E02E7001F0A7FAFFF7ECFEDE +:10680000E06880F87B60D3E7E06890F8920110B10F +:106810000020FFF7F4FE2E70E06880F87B600AE04D +:10682000E0689DF8001080F87E119DF8011080F856 +:106830007F1124202870E06800F164018D4203D1AB +:10684000BDE8F84301F081BA80F88660B0E770B522 +:10685000FC4C01230B21E06890F86420583002F0D2 +:1068600004FE202650BBE0680123002190F864203C +:10687000583002F0FAFD0125F0B1E06890F86300AD +:1068800024281BD0606903F085FAC8B1E06890F84D +:10689000941041F0040180F8941061694A7902F083 +:1068A000070280F85020097901F0070180F84F10A5 +:1068B00090F893311BBB06E0657070BD667070BDCB +:1068C000BDE8704088E690F89231C3B900F15103F9 +:1068D0005E788E4205D11978914202D180F87B50C2 +:1068E0000DE000F5EE710D7002884A8090F84F209F +:1068F0000A7190F850004871E078F5F703F8E16804 +:10690000212081F86400BDE8704001F015BA70B52F +:10691000CC48C06890F84E20448EC38E418FB0F8AA +:106920004050022A23D0A94200D329460186C18FB4 +:10693000B0F84220914200D311468186018FB0F811 +:106940004420914200D311464186818FB0F8462001 +:10695000914200D31146C186418EA14200D90C4616 +:106960004486C18E994200D90B46C38670BD028E03 +:10697000914200D31146C68F828E964200D2324693 +:10698000A94200D329460186B0F842108A4200D3BA +:106990000A468286002180F84E10CFE770B5A94CD8 +:1069A000E06890F8650010F0300F04D0607840F097 +:1069B0000100607070BD606903F0D0F948B3E5680C +:1069C000606903F0C7F92887E568606903F0BEF9DC +:1069D0006887E568606903F0BFF9A887E5686069C2 +:1069E00003F0B6F9E88720794FF00102800703D55C +:1069F0002069C07814280FD0E06890F863101C2933 +:106A00000AD090F84E1001290DD090F8891151B993 +:106A100006E0BDE87040DFE5E06880F84E2002E067 +:106A200090F8881131B1E06810F8651F41F010014D +:106A3000017016E090F8651041F0200180F86510B3 +:106A400000F5CB7103888B86038FCB86438F0B8732 +:106A5000838F4B87C08F888781F83220E078F4F7E6 +:106A600051FFBDE8704001F067B970B5754CE06842 +:106A700090F86510890707D590F863200123082155 +:106A8000583002F0F2FCE8B1E06890F88E00800720 +:106A900012D4606903F03EF9E16881F88F00606903 +:106AA00030F8052FA1F890204088A1F8920011F845 +:106AB0008E0F40F002000870E06890F88E10C90751 +:106AC00003D00FE00120607070BD90F86500800772 +:106AD00000D5FFDFE06810F8651F41F0020101708A +:106AE00001F02AF9E068002590F86310062906D124 +:106AF00080F8635080F88650E078F4F703FFE06890 +:106B000090F87A110429DFD180F87A51E078F4F70F +:106B1000F9FEE06890F863100029D5D180F886501E +:106B200070BD70B5474C01230021E06890F86420E7 +:106B3000583002F09AFC012578B9E06890F864209A +:106B4000122A0AD001230521583002F08EFC10B120 +:106B50000820607070BD657070BDE06890F88C00B2 +:106B600008B901F0E9F8E1686069E03103F0B4F8D0 +:106B7000E1686069B83103F0B9F8E06890F8AA01FB +:106B800000B1FFDFE1680888A1F8AC0101F5D77119 +:106B9000606903F090F8E168606901F5DB7103F06A +:106BA00092F8E06880F8AA51142180F86410E07827 +:106BB000BDE87040F4F7A6BE70B5224C0123002159 +:106BC000E06890F86420583002F04FFC0125A8B12D +:106BD000606903F03CF898B16069E168B0F80D00B5 +:106BE000A1F87C01B1F8581001F047F858B1E068FD +:106BF000282180F8731080F8725070BD657070BDE8 +:106C0000BDE87040E8E46069E168027981F87E21BE +:106C1000B0F80520A1F8802103F00CF8E168A1F894 +:106C20008201606903F009F8E168A1F884016069F4 +:106C300003F00AF8E168A1F886010D2081F86400EC +:106C400070BD0000F00000207CB5F84C2079C00732 +:106C500033D0606901230521C578E06890F864208D +:106C6000583002F002FC68B1022D0BD00A2D09D079 +:106C70000B2D07D0032D05D0062D03D0607840F0F2 +:106C8000080060706078002817D160690226C57816 +:106C90001DB1012D01D0162D18D1E06890F86300C8 +:106CA00002F0D6FB90B1E16891F863001F280DD087 +:106CB000202803D0162D1AD066707CBD252081F8BF +:106CC0006300162D70D02A20FFF799FC192D6CD285 +:106CD000DFE805F0262310359292388F4992292C4F +:106CE00046929292928C6F6C8083869289002020CB +:106CF00060707CBDE0680123194690F8662058302A +:106D000002F0B3FB20BB606902F0CEFFE16881F8BE +:106D10006801072081F8660070E001F0CBF86DE0B3 +:106D2000FFF74AFF6AE001F0A5F867E0E06890F835 +:106D3000641011290BD1122180F864105EE0FFF776 +:106D4000F0FE5BE0E06890F86400172801D0667000 +:106D500054E000F0FAFFE1681B2081F864004DE088 +:106D6000FFF783FE4AE0E06890F86500C00703D0B3 +:106D7000607840F0010022E06946606902F0D1FFCE +:106D80009DF8000000F02501E06800F8941F9DF8D0 +:106D9000011001F04101417000F0CEFFE06810F8F1 +:106DA000651F41F0010113E01AE025E0FFF76BFCDD +:106DB00024E0E06890F86500400702D5012060708B +:106DC0001CE000F0B9FFE06810F8651F41F0040115 +:106DD000017013E0FFF7E2FD10E001F017F80DE09D +:106DE000FFF735FD0AE0FFF7A1FC07E000F0E5FF43 +:106DF00004E0FFF75EFC01E0FFF7EEFBE168F1E97C +:106E00002802401C42F10002C1E900027CBD70B5BD +:106E1000864C207900073FD5607800283CD1E06897 +:106E200090F8C300FF2800D1FFDFE068FF2180F861 +:106E3000C31090F86410192907D1002580F88B50F1 +:106E400000F083FFE06880F86450E06890F8631019 +:106E50001F2918D190F8640002F0FAFA78B1E068BE +:106E60002521012380F8631090F864200B2158300D +:106E700002F0FBFA38B92A20FFF7C1FB03E0E16812 +:106E8000202081F86300E06890F86610082903D19B +:106E90000221217080F8C310D2E66449C96891F8D4 +:106EA0007E210AB991F8512081F8512091F87F2173 +:106EB0000AB991F8522081F85220002802D000200F +:106EC000FFF79DBB704770B5584C06460D46E0680D +:106ED00090F8C300FF2800D0FFDFE268002082F8AE +:106EE000C36015B1A2F88800AAE622F8820F01203B +:106EF0001071A5E610B54D4C01230021E06890F813 +:106F00006320583002F0B1FA00284AD0E06890F8C7 +:106F1000881111B190F8891129B390F892110029C4 +:106F20003FD090F8931100293BD190F864200123C1 +:106F30000B21583002F099FA002832D1E06890F81D +:106F4000941190F85100FFF739FA70B3E06890F8A7 +:106F5000951190F85200FFF731FA30B3BDE81040B8 +:106F60000020FFF74CBBB0F88A1120F8401FB0F8A2 +:106F70004C114180B0F84E118180B0F85011C180A1 +:106F8000002180F8481190F8250080060AD500F00D +:106F9000F5FFE06810F8651F21F0200141F01001B5 +:106FA000017010BD0021142016E0FFE7E068012306 +:106FB000032190F86420583002F057FA0028F0D1ED +:106FC000E0680123022190F86420583002F04DFA65 +:106FD0000028E6D100211620BDE8104073E710B567 +:106FE00058BB124CE06890F86510CA0702D0012126 +:106FF000092018E08A070AD501210C20FFF763FF5A +:10700000E06810F88E1F41F0010101702CE04A0782 +:1070100002D50121132006E00A0709D510F8C11F87 +:10702000C17001210720FFF74EFF1DE0F000002096 +:10703000C90602D590F8891109B1002010BD90F859 +:10704000881179B1B0F88A1120F8401FB0F84C11BE +:107050004180B0F84E118180B0F85011C1800021FC +:1070600080F8481100F08AFF012010BD70B5F74C80 +:10707000E06890F8C310FF296FD1617800296CD1C6 +:1070800090F8662001231946583002F0EEF90028E6 +:1070900063D1E06890F8661149B10021A0F8801032 +:1070A00090F8671180F8C4100021022041E090F8A8 +:1070B000642001230421583002F0D7F90546FFF778 +:1070C0008EFF002849D1284600F063FF002844D1F4 +:1070D000E0680123002190F86320583002F0C5F9E0 +:1070E00078B1E0680123042190F86420583002F060 +:1070F000BCF930B9E06890F87A0010B10021122094 +:1071000017E0E06890F863200A2A0DD0002D24D102 +:1071100001230021583002F0A8F988B1E06890F806 +:107120007A1104290CD107E010F8C21F81700021E8 +:107130000720BDE87040C6E690F88E00800702D0B8 +:10714000BDE87040D6E600210C20FFF7BCFEE068E9 +:1071500010F88E1F41F00101017071E53EB5054642 +:107160006846FDF728FA00B9FFDF2221009807F0F2 +:107170002BFC0321009802F022FD0098017821F0F9 +:1071800010010170294602F049FDB04CAD1E162DCC +:107190006FD2DFE805F00B9352949411935D9394B2 +:1071A000162C939393239494306F4988E068009948 +:1071B00090F8C400087182E0E168009891F8C4106A +:1071C00017E0A26800981178017191884171090A4D +:1071D00081715188C171090A017270E00321009820 +:1071E00002F012FE0621009802F012FE67E00098FD +:1071F0000621017163E0E068B0F84410009802F0E5 +:1072000095FDE068B0F84610009802F093FDE06844 +:10721000B0F84010009802F091FDE068B0F842101C +:10722000009802F08FFD4AE00098E16891F89421FF +:10723000027191F89511417141E0E1680098E831DF +:1072400002F058FDE1680098BC3102F05DFD36E0C7 +:107250007F49D1E90001CDE90101E06801A990F879 +:10726000940000F025008DF80400009802F088FDDD +:1072700025E023E0E068B0F84010009802F05EFDE1 +:10728000E068B0F84210009802F05CFDE068B0F8E9 +:107290004410009802F04AFDE068B0F846100098EB +:1072A00002F048FD0BE0E16891F892010028009897 +:1072B000BCD111F8512F02714978BCE7FFDFFDF70F +:1072C0008FF9002800D1FFDF3EBD604810B5C068CF +:1072D00090F8691041B990F86420012306215830D4 +:1072E00002F0C3F8002800D0012010BD70B5574D42 +:1072F000E86890F8671039B1012905D0022906D055 +:10730000032904D0FFDF9BE4B0F8CC1037E090F8FD +:107310006610082936D0B0F87C10B0F87E20002422 +:107320008B1C9A4206D3511A891E0C04240C01D0DE +:10733000641EA4B290F87A1039B190F8632001234A +:107340000921583002F091F840B3FFF7BEFF78B141 +:10735000E9680020B1F87620B1F874108B1C9A42CD +:1073600003D3501A801E00D0401EA04200D284B227 +:107370000CB1641EA4B2E868B0F8CC102144A0F8A7 +:10738000C8105DE4B0F87C100329BDD330F8581F55 +:10739000C28C1144491CA0F8701051E40024EAE7A3 +:1073A00070B50C4605464FF4F871204607F02EFBE9 +:1073B000258045E4F8F7F5BC2DE9F0410D46074678 +:1073C0000721F8F7E5FB04003ED094F8960100266B +:1073D000B8B16E70082028700DE0268484F896619C +:1073E000D4F89801C5F80200D4F89C01C5F806004D +:1073F000B4F8A001688194F896010028EDD1AE7030 +:10740000C7E094F8A201B0B394F8A2010C2813D0FD +:107410000D2801D0FFDFBCE02088F8F7EBFC074621 +:10742000F8F797F978B96E700D20287094F8A401D8 +:10743000A8702088A88018E02088F8F7DBFC0746B1 +:10744000F8F787F930B10020BDE8F081F0000020A6 +:1074500044EF01006E700C20287094F8A401A8700D +:107460002088A88094F8A801A87184F8A261384601 +:10747000F8F769F98DE0FFE794F8DA0130B16E7042 +:107480000F20287084F8DA616F8082E094F8AA01F6 +:1074900080B16E700920287020886880D4F8AE1101 +:1074A0006960D4F8B211A960B4F8B601A88184F873 +:1074B000AA616EE094F8B80140B16E701720287090 +:1074C000B4F8BA01688084F8B86162E094F8D40135 +:1074D00078B16E701820287006E000BF84F8D4617F +:1074E000D4F8D601C5F8020094F8D4010028F5D1EB +:1074F0004FE094F8BC01A8B16E70142028700CE025 +:1075000084F8BC61D4F8BE01C5F80200D4F8C20109 +:10751000C5F80600B4F8C601688194F8BC010028DB +:10752000EED136E094F8C80180B16E701A20287050 +:1075300084F8C861D4F8CA01C5F80200D4F8CE01B5 +:10754000C5F80600B4F8D201688122E094F8DC01A5 +:1075500040B11B20287084F8DC61D4F8DE01C5F846 +:10756000020016E094F8E20100283FF46DAF6E705F +:107570001520287009E000BF84F8E261D4F8E40126 +:10758000C5F80200B4F8E801E88094F8E2010028A8 +:10759000F2D1012058E7FE4A9060D1707047002177 +:1075A00080F8631080F8641080F8671090F8D610A7 +:1075B00009B1022100E00321FEF7D3BC2DE9F0411F +:1075C000F34C0546E06809B1002104E0B0F8DE1094 +:1075D000B0F8CE201144A0F8DE1090F8661139B949 +:1075E00090F8662001231946583001F03EFF30B173 +:1075F000E06830F8801FB0F84E2011440180E06848 +:1076000090F8863033B1B0F88210B0F8CE20114433 +:10761000A0F8821090F98A70002F06DDB0F888106B +:10762000B0F8CE201144A0F8881001213D2615B1F4 +:1076300080F8736013E02278022A0AD0012A11D060 +:1076400062782AB380F8721012F0140F0DD01E2148 +:1076500013E090F8C420062A3CD016223AE080F8C5 +:10766000721044E090F8682134E0110702D580F8E8 +:1076700073603CE0910603D5232180F8731036E057 +:10768000900700D1FFDFE1682A2081F873002AE02B +:107690002BB1B0F88220B0F884309A4210D2002F7B +:1076A00005DDB0F88820B0F884309A4208D2B0F8EE +:1076B0008030B0F87E20934204D390F866310BB14D +:1076C000222207E090F867303BB1B0F87C3093425B +:1076D00009D3082280F87320C1E7B0F87C20062A7D +:1076E00001D33E22F6E7E06890F8721019B1E06825 +:1076F000BDE8F04153E7BDE8F0410021FEF731BCA1 +:107700002DE9F047A24C81460D46E0680088F8F765 +:1077100083FB060000D1FFDF60782843607020798A +:107720004FF000058006E06804D5A0F87C5080F892 +:10773000DC5003E030F87C1F491C0180FFF7C5FDD9 +:10774000012740B3A088000506D5E06890F86910CD +:1077500011B1A0F874501EE0E068B0F87410491C34 +:1077600089B2A0F87410B0F876208A4201D3531A77 +:1077700000E00023B4F806C00CF1050C634501D805 +:1077800080F87A70914206D3A0F8745080F8DA71CC +:10779000E078F4F7B7F820794FF0020810F0600FA6 +:1077A0000ED0E06890F8671011B1032908D102E00B +:1077B00080F8677001E080F867800121FEF7D1FB57 +:1077C000E06890F86710012904D1A188C90501D5A6 +:1077D00080F86780B9F1000F78D1A188890502D5BA +:1077E000A0F8F05003E030F8F01F491C018000F0D1 +:1077F0008CFBFFF73BFC00F05FFE0028E06802D046 +:10780000A0F8D05003E030F8D01F491C018000F0F0 +:1078100056FE38B1E16891F8DC00022807D8401C18 +:1078200081F8DC00E06890F8DC00022804D9E06808 +:1078300020F8D05F45800573E0680123002190F8AF +:107840006420583001F011FE20B9E06890F864001F +:107850000C2859D1E0680123002190F863205830AA +:1078600001F003FE98B3E0680123002190F8662040 +:10787000583001F0FAFD50B3E06890F86710022923 +:1078800042D190F8DC0010BB3046F7F732FDF0B182 +:10789000E16891F8C300FF2836D1B1F8CA00012889 +:1078A00032D981F8D570B1F87E00B1F87C20831E02 +:1078B0009A4201DB012002E0801A401E80B2B1F83A +:1078C000D020E3889A4203D3012204E028E01BE0A1 +:1078D0009A1A521C92B2904200D91046012801D146 +:1078E00081F8D55091F8612192B1B1F8D220B1F868 +:1078F00062118A4201D3012102E0891A491C89B22E +:10790000884205D9084603E0E168012081F8D55096 +:10791000E168B1F858201044A1F8CC00FFF7E6FC6C +:10792000A088C0F340214846FFF748FEE06880F891 +:10793000D650BDE8F047FCF776BE154902464878B8 +:107940008B7818430DD10846C06842B10979090700 +:1079500003D590F86600082803D001207047FEF791 +:1079600007BA0020704770B5094C05460E46A0883E +:107970002843A080A80703D5E80700D0FFDF2661D1 +:10798000EA074FF000014FF001001DD0666101E0F1 +:10799000F0000020F278062A02D00B2A14D10AE067 +:1079A000E26892F86430172B0ED10023C2E9263327 +:1079B00082F8680008E0E26892F86430112B03D185 +:1079C00082F8681082F88C00AA0718D52269D2784C +:1079D000052A02D00B2A12D10AE0E16891F864204E +:1079E000152A0CD10022E1E9282201F8370C06E023 +:1079F000E06890F86420102A01D180F86910280608 +:107A000001D50820A0707EE42DE9F84FFB4C00253D +:107A10004FF00108A5806570A5704146257061F39F +:107A20000702E0609246814680F8D6800088F8F729 +:107A3000F3F9070000D1FFDFE0680088FCF7B8FD2C +:107A4000E0680088FCF7DDFDE068B0F8CA1071B1AD +:107A500090F8C310FF290FD190F8661191B190F8FA +:107A6000662001231946583001F0FFFC80B1E06820 +:107A700090F8C300FF2805D0E06890F8C30000BF6D +:107A8000FFF76CFBE06890F8D71089B1E58018E04B +:107A9000E068A0F8805090F8671180F8C4100021C9 +:107AA0000220FFF710FAE06880F8D5500220E7E7DF +:107AB00090F8961119B9018C8288914200D881887A +:107AC000E180B0F8CE10491E8EB2B0F8D01031442B +:107AD000A0F8D01090F8D41021B1A0F8D25080F8BE +:107AE000D45004E0B0F8D2103144A0F8D21030F8ED +:107AF0007C1F31440180FFF7E8FB20B1E06830F8DB +:107B0000741F31440180E068B0F8CA10012902D81E +:107B1000491CA0F8CA100EB180F8DC5090F8D510BE +:107B2000A1B1B0F8D000E18888420FD23846F7F70B +:107B3000E0FB58B1E06890F8611139B1B0F8D210AB +:107B4000B0F86201814201D300F0BCFCE06880F82B +:107B5000D55090F864100B2901D00C2916D1B0F83B +:107B60005820B0F87C31D21A12B2002A0EDBD0F8BD +:107B70007E11816090F882110173022101F000FBF7 +:107B8000E06880F8645080F8968024E0242910D1C1 +:107B9000B0F85810B0F87C21891A09B2002908DB26 +:107BA00090F89201FFF779F9E06800F8645FC57515 +:107BB00011E090F8631024290DD1B0F85810B0F8F6 +:107BC0007C01081A00B2002805DB0120FFF765F9E7 +:107BD000E06880F86350E0680146B0F8CE20583085 +:107BE00001F089FBE06890F8611109B1A0F8D2506A +:107BF00083480090834B844A4946504600F0A9FBD5 +:107C0000E0680123052190F86420583001F02DFC34 +:107C1000002803D0BDE8F84F00F03DBABDE8F88F6A +:107C200000F00CBC10B50446B0F882214388B0F8CF +:107C30008411B0F886019A4205D1A388994202D1F5 +:107C4000E38898420FD02388A4F89A31A4F89C21A5 +:107C5000A4F89E11A4F8A001012084F896016748B9 +:107C6000C078F3F74FFE0121204601F089FA002089 +:107C700004F8640F0320E07010BD401A00B247F60C +:107C8000FE71884201DC002801DC012070470020E1 +:107C9000704710B5012808D0022808D0042808D061 +:107CA000082806D0FFDF204610BD0124FBE7022490 +:107CB000F9E70324F7E72DE9F0478946044602F087 +:107CC0007FF88046204602F07FF84C4D0446E86875 +:107CD00090F8921121B190F8947190F8956101E0BB +:107CE00000273E46204601F0A3FCA0B1EA6892F8C6 +:107CF000511081420FD03C420AD0B9F1000F0AD195 +:107D0000012808D1022906D192F85000204202D160 +:107D10000020BDE8F087404601F08AFC50B14046A3 +:107D200001F086FCE96891F85210884202D018EA06 +:107D30000600EED00120ECE730480021C06820F8B2 +:107D4000881F8178491C817070472C4800B5C16834 +:107D500011F88A0F401E40B20870002800DAFFDFD9 +:107D600000BD10B5254CE06890F87A11042916D1B1 +:107D700090F8632001230021583001F076FB00B910 +:107D8000FFDFE06890F88E10890703D4062180F8A1 +:107D9000631004E0002180F8861080F87A11E06812 +:107DA00090F86500800707D5FFF7CFFFE06810F86F +:107DB000651F21F00201017010BD10B50F4CE06885 +:107DC00010F8941F41F004010170606902F01EF880 +:107DD000162806D1E06890F86300202802D02528F4 +:107DE00005D010BD606902F015F8FEF708FCE168E7 +:107DF000002081F8630081F8860010BDF0000020AB +:107E0000017701003B7901006779010070B5994C59 +:107E100001230A21E06890F86320583001F025FB27 +:107E200018B3606901F09AFFA8B1E568606901F0D4 +:107E300091FF2887E568606901F088FF6887E56839 +:107E4000606901F089FFA887E568606901F080FF3B +:107E5000E887FEF75CFDE168002081F8860081F884 +:107E60006300BDE87040FEF7EBBB607840F00100B6 +:107E70006070C8E510B57F4C01230021E06890F8E0 +:107E80006420583001F0F1FA30B1FFF755FFE16896 +:107E9000102081F86400B0E7E0680123052190F824 +:107EA0006420583001F0E1FA08B1082000E0012018 +:107EB0006070A2E770B56F4C01230021E06890F874 +:107EC0006420583001F0D1FA012588B1606901F0D1 +:107ED000E8FEE168A1F87C01B1F85810FFF7CDFE8B +:107EE00040B1E068282180F8731080F872508AE56C +:107EF000657088E5E168606901F5BF7101F0CCFE4D +:107F0000E1680B2081F864007DE510B5FEF77FFF86 +:107F1000FEF79AFE574C2079400708D5607830B9B3 +:107F2000E06890F86600072801D101202070FEF774 +:107F30008EFA2079C00609D5607838B9E06890F8E3 +:107F400064100B2902D10C2180F86410A07800077E +:107F50000ED5E0680123052190F86420583001F027 +:107F600084FA30B108206070E168002081F8A20135 +:107F700043E7BDE81040002000F0F4BA10B5FEF76A +:107F8000C6FCFEF75DFB0121BDE810401520FEF7A1 +:107F90009ABF10B5374CE16891F8642040B3102ABD +:107FA00006D0142A07D0152A19D01B2A2BD119E084 +:107FB00001210B2018E0FAF777FF0C2816D3E068B0 +:107FC0000821E830FAF774FF28B1E0680421BC30DA +:107FD000FAF76EFF00B9FFDF0121042004E000F092 +:107FE00017F803E001210620FEF76DFF012004E7EA +:107FF000212A08D191F87B0038B991F8920110B18B +:1080000091F8930108B10020F7E601211720EBE772 +:1080100070B5184C0025E06890F8691101290AD064 +:10802000022925D190F88C10A9B1062180F8C4103E +:108030000121022017E090F8A211002918D100F1C7 +:10804000A80300F1E001002200F5B57001F0BAF9D3 +:108050000121052007E090F89400400701D5112088 +:1080600000E00D200121FEF72EFFE06880F8695145 +:10807000C9E40000F0000020F8480078002800D093 +:108080000C20704710B50446FFF7F6FF00B1FFDF84 +:10809000F248447210BDF14901200872704770B572 +:1080A000054600F02CFC044600F025FC65B1E28E8C +:1080B000618E94F85230407C00F00EFC94F852101F +:1080C000BDE87040FBF74FBCFF2094F85110F7E774 +:1080D0002DE9F041074600F012FCE04E0546E0486D +:1080E000706200F008FC04460120FFF7D8FF607CB6 +:1080F00068B304F15001DB4891E80E1000F1080864 +:1081000088E80E10216EC0F82110616EC0F82510AD +:10811000FE38FBF71FFF06F13400007800F0C0FBCB +:1081200080F00101CF4808300176D4E91212C0E98D +:108130000412A0F58372716AFBF713FB95F85200E5 +:1081400000F0C0FB01460120FBF719FB04E0706A58 +:10815000FBF700FFFBF737FB4FB9012295F85230D0 +:1081600096211046FBF720FE9620FBF718FF95F8A6 +:108170002C00012801D1FBF774FF02203070BDE80C +:10818000F0812DE9FC47824600F0B5FB044600F083 +:10819000B6FB0546B14F6079B04E20374FF001096C +:1081A00058B3012863D0022865D0032872D0FFDFBE +:1081B000306AB0460826027822F008020270A379DD +:1081C00006EAC3031A4322F004020270E37904268C +:1081D00006EA83031A4322F0100202706779D8F886 +:1081E0002C00F7F796F80646FCF730FA022F58D025 +:1081F000012F56D0032F57D059E000F089FB0146DC +:10820000A88E00F052FB298E814200D20846ADF8BC +:108210000400A5F848003846FCF7F6F930B14FF4F1 +:108220008060316A00F06EFB03201EE06A4601A9FF +:10823000F06A00F033FB306210B194F8331029B1CA +:108240003846FCF7B2F984F80590B1E79DF80010C4 +:1082500029B9002101808170012101F0B0FCBDF835 +:108260000410306A01F0D8FD02206071A0E73846A2 +:10827000FCF79BF99CE7B5F84800ADF804006A46A6 +:1082800001A9F06A00F00AFB3062002890D1FFDFFC +:108290008EE7FFE73846FCF7B7F9002888D1FFDF03 +:1082A00086E7B04301D002E00EB1012100E00021D9 +:1082B000D8F820004646027842EA01110170217C7C +:1082C00071B3617901292BD004F1500165488EC941 +:1082D00000F1080888E88E00216EC0F82110616E58 +:1082E000C0F82510FE38FBF735FE5C4834300078C6 +:1082F00000F0D6FA01465B4808300176D4E9101246 +:10830000C0E90412A0F58371326AFBF72AFA95F8E6 +:10831000510000F0D7FA01460020FBF730FA03E0E5 +:10832000FBF718FEFBF74FFABAF1000F06D195F8EC +:108330005130012296210020FBF736FD86F805908A +:10834000316A0A88F2818978317486F80090BDE834 +:10835000FC872DE9F047414C8046089F20781D4658 +:108360001646894610B90EB105B107B9FFDFE761BE +:10837000C4E905650020C4E90D892072E07120710F +:10838000E0706071A071A070A08100F0B4FA0646A0 +:1083900000F0B5FA05460088F7F73EFDE062288850 +:1083A000F7F728FD2063FBF7FBFA05F11200FBF756 +:1083B000B9FD05F10E00FBF797FB284C343420780B +:1083C00000F06EFA08B1032000E00120FBF7BFFDCA +:1083D000707EFBF793FBFBF7B4FD207808B3EA8EC1 +:1083E000698E95F85230707C00F076FA95F852500C +:1083F0002946FBF7B8FA2078B8B1606890F86001B8 +:1084000008B1FBF724FB2A4600210120FBF778FC8A +:108410006068D0F8D800FBF7A1FDBDE8F047012067 +:1084200056E6FF2095F85150E2E700212A4608461B +:10843000FBF766FCBDE8F0470120A2E6074800B55F +:10844000343001783438007819B1022800D0FFDFC9 +:1084500000BD0128FCD0FFDF00BD000008010020A6 +:10846000F80B0020F80D002010B500F048FA044683 +:10847000FBF7C6FDFBF7B7FDFBF726FDFBF758FD45 +:10848000FBF7A1F994F82C00012801D1FBF7DFFDDF +:10849000FE4CA08900F076FAE269E179E078904735 +:1084A0000020207010BDF94810B50078022800D0D7 +:1084B000FFDFBDE81040D7E7F44840797047F34844 +:1084C00000797047F1490120887170472DE9F0412A +:1084D000EE4C054639B9012D05D12079401CC0B2BA +:1084E000207101282CD8A1692846884740B3A0797B +:1084F000E74E30B1012D04D1707810B93078C00644 +:108500001ED5E079E0B9E14F3437387800F0C8F98A +:1085100008B1012D04D0387800F0C2F9284311D1F8 +:10852000DA480E300078C10602D43178C90607D582 +:10853000A17829B9A16A29B9618919B1C00601D404 +:1085400001201CE600201AE610B5D04CA06A00B944 +:10855000FFDF6289D4E90910D21C06F0B6F9A06ADF +:10856000606210BD2DE9F047064600F0C4F9C74D22 +:108570000446686A47780EB1012E03D1296B05F0D5 +:10858000C3FE687068784FF000084FF0010940B1F1 +:10859000012818D0022831D0032846D0FFDFBDE8DB +:1085A000F087012E31D0FFF7CFFF39460122286B2B +:1085B000F6F720FF27E000BF84F8078030E000BF17 +:1085C00084F807902CE0012E08D0FFF7BDFF394654 +:1085D0000022286BF6F70EFF022EE0D0D4E912013C +:1085E000401C41F10001C4E91201E079012802D0E8 +:1085F00084F80790D3E784F80780D0E7012E04D0F1 +:10860000286BF7F77BF8022EC9D0D4E91201401C81 +:1086100041F10001C4E91201E0790128D0D1CBE792 +:10862000687ABDE8F047F3F76DB9012EB7D0286B33 +:10863000F7F764F8F4E72DE9F041074600F05BF93D +:108640000446924800260125416A0A7802F0030296 +:10865000012A1FD0022A1DD0032A03D0C17941F07C +:1086600004012EE00746084601F0C2FA68B1A57081 +:10867000B88940F40060B8810120796A00F042F9BD +:1086800021E0E6717BE5E57179E5F87940F01000CD +:10869000F87174E54978B1B1828942F4006282814F +:1086A000826A002AEED0FB2908D8007A20B1BDE802 +:1086B000F041802000F066B93D7060E5C17941F07D +:1086C0001001C1715BE5E0790128DCD1D9E770B513 +:1086D00000F011F96D4D04462878012800D0FFDF25 +:1086E000A078012650B10020A0700146042000F0BF +:1086F00009F966483430007800B12671286A00789C +:10870000C043800706D1E07820B9E6700220296ACC +:1087100000F0F8F801210020FFF7D8FE10B1BDE805 +:108720007040A1E6BDE870400020D1E42DE9F84397 +:10873000814600F0E0F8554C002605468DF80060B3 +:108740002078022800D0FFDFA08940F40070A081CB +:108750000020FFF7A4FC687CB9F1000F5DD0FBF7A7 +:1087600055F8FBF745F8012760B9687C50B1606A9D +:10877000417839B10078E979C0F3C000884201D16D +:10878000E7705DE0606A4178618121B1206BF6F7A6 +:10879000EBFDA06200E0A662A08940F02000A0816D +:1087A000267100F0A8F8804600F0A9F8064690F877 +:1087B0002C00012816D1FBF74AFC4146304600F058 +:1087C0001FFE78B1314834300178406811B300F5AC +:1087D000EA703188418098F8081001710770607A5A +:1087E000F3F790F8606AA9790078C0F380008842B6 +:1087F00005D000F0CCF8A08940F48070A081606AB8 +:10880000E9790078C0F3C00088420DD16846FFF7CF +:1088100012FF09E000F58670DBE708B1FBF723F8EB +:10882000A08940F04000A08149460120FFF74EFE9C +:1088300000289DF8000007D010B10020FFF792FE3D +:10884000FFF712FEBDE8F88310B10120FFF78AFEA2 +:108850000020FFF796FC9DF800000028F2D00220CF +:10886000FFF780FEEEE770B50C46054600F047F8CE +:10887000064990F8512034312846097800292146CC +:1088800003D0BDE87040FDF7B0BB03E00801002055 +:10889000F80B0020BDE8704002F0FBBFF6F774BC97 +:1088A00008B10020704701207047022905D06FF001 +:1088B0000D0101EBD00080B270476FF00E0101EBAB +:1088C0009000F8E700B5012802D0022802D0FFDFAF +:1088D0000020C1E50120BFE570B50C4605461946EC +:1088E0001046FFF7E2FF844200D22046002D01D05F +:1088F000001D80B270BD56484068583070475448DB +:1089000040687047524A0123343A937052691047C5 +:1089100010B5FFF7F4FF0446FFF7EDFF0146C27AFA +:108920004B48242A09D0097B242906D01F2A0DD0C0 +:10893000202A0BD0222911D021E00178406811B102 +:1089400090F87E1115E090F8E81012E0222905D089 +:108950000178A1B1406890F8940107E0017871B105 +:10896000416891F8940191F85010084000F04FF8D8 +:10897000014694F85100BDE8104000F052B894F858 +:10898000510010BD324A0021343A5269104770B587 +:10899000FFF7B1FF04464079002835D0022810D1F6 +:1089A0002B4D343DE86AF6F71BFC00B9FFDFD4E934 +:1089B0001001401C41F10001C4E91001687AF2F78E +:1089C000A1FF234800256571007830B1207920B1DE +:1089D000257100211020FFF795FFE07878B1E57050 +:1089E000FBF721FE00B9FFDF00210820FFF78AFF17 +:1089F000D4E91001401C41F10001C4E91001A07943 +:108A0000012802D00120A07170BDA57170BDC10701 +:108A100001D001207047800701D502207047002057 +:108A2000704700B500290CD008280BD0042809D0C5 +:108A3000082907D0042905D0012806D0012904D02F +:108A4000022009E5FFDF082006E5012004E500001B +:108A50003C0100202DE9F0410F4606460024FB4D65 +:108A60000FE000BF05EBC40090F84311B14206D1FE +:108A70000622394600F5A27005F0FBFE38B1641CF1 +:108A8000E4B22878A042EDD81020BDE8F08120465D +:108A9000FBE770B50546ED480478621C027000EBF8 +:108AA000C4060868C6F844018888A6F84801102C56 +:108AB00000D3FFDF86F84351204670BD70B50546F0 +:108AC00000F060FA10281CD1E04C2078401EC0B2A3 +:108AD0002070A84215D004EBC00204EBC50102F5DA +:108AE0008070D2F84321C1F84321D0F84700C1F883 +:108AF0004701207800F046FA102802D0204480F880 +:108B0000035170BD2DE9F047D04C0646A719A07857 +:108B1000401EC5B2A57097F80381AE422AD004EB7F +:108B2000051A04EB06190AF1030109F103001022EA +:108B300005F0CBFE0AF1830109F18300102205F054 +:108B4000C4FE601905EB450290F8031187F8031184 +:108B500006EB460104EB420204EB4101D2F80B3173 +:108B6000C1F80B31B2F80F21A1F80F2190F83B01A9 +:108B700087F83B0104EBC80090F84A01C00703D115 +:108B80004046BDE8F04799E7BDE8F08710B540F2F0 +:108B9000C311AE4805F018FFFF220821AC4805F0CC +:108BA0000BFFAB4800210A3841704FF461714180DE +:108BB00010BD70B50D460646FFF74CFFA34C1028BC +:108BC00007D004EBC00191F84A11C90701D0012078 +:108BD00070BD617808290ED2102803D1294630468D +:108BE000FFF757FF617804EBC000491C6170012159 +:108BF00080F84A11EBE7002070BD70B5934D2878DE +:108C0000401E44B20BE000BF05EBC40090F84A01DF +:108C1000C00702D0E0B200F0C6F9641E64B2002CB6 +:108C2000F2DA70BD2DE9F047984691460C460746AA +:108C3000FFF710FF0546102805D000F0A3F9102813 +:108C400001D01220A0E7814EB07808281ED2102D46 +:108C500004D121463846FFF71CFF0546B4781022A0 +:108C6000601CB07006EB0417F81C494600F09DFB31 +:108C700007F183001022414600F097FB30190021D4 +:108C800080F8035180F83B1108467DE707207BE719 +:108C90006E4810B58078401E44B204E0E0B2FFF7A1 +:108CA00031FF641E64B2002CF8DA10BD68490A393D +:108CB0004870704766480A384078704740B14AF2B9 +:108CC000B811884204D862490A39488001207047A7 +:108CD000002070475E480A384088704710B5FFF79B +:108CE000B9FE102803D000F04DF9102800D108205B +:108CF00010BD56498A78824203D901EB00108330B7 +:108D000070470020704751498A78824203D901EBAD +:108D10000010C01C7047002070474C4B10B59C7869 +:108D200084420FD9184490F8030103EBC00090F877 +:108D300043310B70D0F844111160B0F848019080B5 +:108D4000012010BD002010BD404A114491F80321BC +:108D50003F490A390A7002684A6080880881704772 +:108D600010B5FAF7C2FC18B1BDE81040FAF7CDBC57 +:108D7000FF2010BD35498A78824209D9084490F80D +:108D8000030101EBC00090F84A0100F001007047B8 +:108D9000002070472DE9F04700252F462B4E2AE092 +:108DA00006EBC70404F5A271884694F84301FFF767 +:108DB00095FF8146FFF7A7FF94F84A11C90718D01D +:108DC00060B1B9F1080F05D206EB090191F83B112A +:108DD000012903D0102100F0D9FA50B11C492846CE +:108DE00001F805906D1C94F843214146EDB2FAF765 +:108DF00047FE7F1CFFB23078B842D1D8C4E62DE9D7 +:108E0000F04100252C46114E1CE03319204693F802 +:108E10000371FFF778FF93F83B11012903D010216C +:108E200000F0B4FA60B10A4806EBC7014455284681 +:108E300091F843216D1CEDB201F5A271FAF720FE05 +:108E4000641CE4B2B078A042DFD81EE6280E0020F1 +:108E50004E01002010B5FAF73FFE20B1FAF740FEB0 +:108E60005649085C10BD082010BD0246534810B595 +:108E70000A38407840B15248817829B1C01CD21CD0 +:108E8000FAF7DFFB012010BD002010BD4C4A01EBBA +:108E9000410102EB41010268C1F80B218088A1F871 +:108EA0000F0170472DE9F04180460024444D19E040 +:108EB0002046FFF71EFF060012D0102100F066FAD0 +:108EC00070B904EB440005EB400707F20B1742466C +:108ED00039463046FBF73BFC38462146FFF7D6FFC4 +:108EE000641CE4B2A878A042E2D8CEE50146102284 +:108EF000344800F05ABA3348704770B5304D0446D4 +:108F0000A878A04206D905EB04101021833000F0A8 +:108F10003DFA08B1002070BD04EB440005EB4000B1 +:108F200000F20B1070BD26498A78824203D90844AA +:108F300090F83B0108B100207047012070472DE9EF +:108F4000F0410E46074615460621304600F01EFA4F +:108F50001B4C58B1002004E02118401C81F83B5103 +:108F6000C0B2A1788142F7D801208EE5314638465B +:108F7000FFF7B4FE082803D0204480F83B51F3E704 +:108F8000002082E50E4910B5034600208A7806E0ED +:108F90000C1894F803419C4204D0401CC0B2824299 +:108FA000F6D8102010BD06494A78521E4A7001EBCF +:108FB000C001002281F84A2180E500004E01002016 +:108FC000280E0020EB0F002000F00101400800F007 +:108FD00001021144400800F001021144400800F071 +:108FE00001021144400800F001021144400800F061 +:108FF00001021144400800F00102114401EB50004D +:10900000704710B50446702105F000FD0020A071E6 +:10901000E071E0722073A073E07360712076607677 +:10902000212084F83C00412084F83D00FF2084F892 +:109030006B0010BD002180F82C100184012280F803 +:1090400051201B2180F85220018741874FF4A471E1 +:10905000C18781871B2303864386C1868186A0F84A +:109060004030A0F84430A0F84610A0F84210A0F814 +:109070004A30A0F84C30A0F848304273704710B521 +:1090800000248484048DDB004C43B3FBF2F394FB97 +:10909000F2F45B1C04859BB203FB02F4C384B4F5B9 +:1090A000C84F01DD5B1EC3844FF4FA43B3FBF2F3F8 +:1090B0005B1C8385038C02EBC3035B1EB3FBF2F3E3 +:1090C000C383838B4B43B3FBF2F1818310BD70B537 +:1090D0000546087B0E4600F01F0008730020E87567 +:1090E00004463019007AFFF76FFF2919641C887451 +:1090F000E97DE4B20844E875052CF2D3C0B2252816 +:1091000000D9FFDF70BD00238383028401EBC2021C +:10911000521EB2FBF1F1C1837047F0B56FF01F0230 +:10912000010C02EA90261F25A1F5AA4054380AD066 +:10913000401E08D0A1F52850AA3804D0B0F5004050 +:1091400001D0012000E00020002213464FEA020473 +:1091500082EA0107FF431F437F1C0FD006F001077F +:10916000520842EAC73205F001075B0876086D082D +:10917000641C43EAC733162CEAD3F0BD0020F0BDCF +:1091800070B50025044600F15806032909D0D1B373 +:1091900001295DD0022935D101463046BDE8704035 +:1091A00095E73046FFF72DFF2046FFF743FF4FF4CA +:1091B00048606080A4F8C850A4F8CA50A4F8CC5005 +:1091C000A4F8CE50A4F8D050A4F8D25084F8D550CA +:1091D00084F8D750A4F8DE5084F8DC50A4F8F0509E +:1091E000A4F8F25084F8885184F8895184F8925197 +:1091F00084F8935184F8615184F8665184F8695178 +:1092000084F87A5170BDFFE7A4F8DE5084F8D65098 +:109210006188FE480A460844B0FBF1F0A4F87600E5 +:109220004BF68030A4F87800E3883046FFF727FF3C +:1092300021463046FFF74BFFD4F80E00FFF76DFFD5 +:1092400010B184F86051DDE7012084F86001D9E7AE +:10925000A4F8DE504188B4F88631B4F88221304653 +:10926000BDE870400BE770B5044600F158050329CE +:1092700009D029B3012935D00229C3D10146284696 +:10928000BDE8704023E72846FFF7BBFE2046FFF706 +:10929000D1FE0020A4F8D000202184F8D21084F858 +:1092A000C800C4F8CC0084F8FC0084F8FD0084F801 +:1092B000060184F8070184F8EC0084F8F800A1E7BF +:1092C0006188D2480A460844B0FBF1F0A4F8760061 +:1092D0004BF68030A4F87800E3882846FFF7CFFEED +:1092E0002146CCE7D4F8F0006188C389428928463A +:1092F000BDE87040C3E6C37D0BB1252B01D9122018 +:1093000070472AB14B7B2BB1012B05D01F20704732 +:109310000020704700F09FBA00F045BABC4A0168CF +:1093200012681140BA4A121D126811430160704759 +:1093300070B50025B749B64C01220B785B1CDBB237 +:109340000B70202B00D10D700E78236802FA06F600 +:109350003342F2D0097803688A405340036051E7F2 +:1093600070B50646007940090ED100252C46305DC7 +:10937000FFF72AFE641C2844E4B2C5B2052CF6D3DC +:10938000012D01D901203DE700203BE710B5002366 +:109390001A4603E0845C2343521CD2B28A42F9D3BA +:1093A0000BB1002010BD012010BD30B5134606E002 +:1093B000CC18D51A14F8014C5B1E4455DBB2002BB7 +:1093C000F6D130BD70B50E468CB0144601461D4630 +:1093D00010226846FFF7E9FF1022314604A8FFF784 +:1093E000E4FF684604F014FA08A94FF0100228467A +:1093F0001CB1FFF7DAFF0CB004E705F066FAFAE7F4 +:1094000038B505460C466846FAF736FE00281ED0E9 +:109410009DF90000207294F909100022411A00D52C +:10942000494295F82D308B4210DCFF2B0ED0A17AEB +:10943000491CC9B2A17295F82E30994202D8617ABE +:109440007F2903D160720020A0720122104638BD2E +:109450000C2806D00B2804D00D2802D01F3806286F +:1094600001D8012070470020704730B5A2F10F04E9 +:109470000C2952D2DFE801F006080D1215182C3421 +:10948000394B404782B348E0072A48D0082A46D0E3 +:1094900043E00C2A43D00B2A41D03EE00D2A3ED0B7 +:1094A0003BE00C2C3BD938E01BB1103A0B2A36D9E3 +:1094B00033E0122A33D0112A31D090F8340020B191 +:1094C000122A2AD31A2A2AD927E0162AFAD224E005 +:1094D000032C24D990F83400F8B11B2A1FD91CE0C2 +:1094E000DBB9042A1BD018E019E013B1062A16D004 +:1094F00013E0012A13D010E01C2A10D01D2A0ED030 +:109500001E2A0CD009E01F3A062A08D905E013B13B +:109510000E2A04D001E0052A01D0002030BD012030 +:1095200030BD2DE9F0410C46054640F233778668A0 +:1095300006E000BFF8F75CFC3946F8F762F9A8606E +:109540002846F8F722FE0028F4D094B13046A968E6 +:10955000F9F75CF900280CDD2044401EB0FBF4F75D +:1095600007FB04F13046F8F74CF9A8603846BDE82F +:10957000F0810020FBE770B5044690420AD2101B30 +:10958000642800D2642025188D4204D8F9F771F9B7 +:1095900008B1284636E6204634E670B505460C4646 +:1095A000088E91F8511000F0E0F8A18E814200D2AF +:1095B00008460646608E94F8521000F0D6F8E18E08 +:1095C000814200D20846024635B100233146BDE84B +:1095D0007040012000F07FB90123F7E770B5044621 +:1095E000008913460D460246A188012000F073F958 +:1095F000696A81421BD2401A401CA1884008091A9E +:109600008AB2A2802189081A208105E0FFDB0500CB +:109610004CEF01005601002015F8511F104600F0D4 +:10962000ADF860806978208900F0A8F8E080E9E56D +:10963000C10701D001207047810701D50220704782 +:10964000400701D508207047002070472DE9F04100 +:109650000546164688460124084600F0B1FB074639 +:10966000404600F0B1FB0346FFF7E2FF02463846F2 +:10967000FFF7DEFF52EA000100D10024990700D174 +:109680000022B90700D1002095F85110914200D175 +:109690000022327095F85210814200D10020707083 +:1096A00072B968B9404600F095FBB5F85810401AF9 +:1096B00000B247F6FE71884201DC002800DC00247D +:1096C000204654E7012802D0022800D0002070472D +:1096D000F8B5CFB20646C1F307242146384600F05C +:1096E0000AF9F5B2C6F3072620B93146284600F03C +:1096F00002F940B1274035403D40444665F3070438 +:1097000065F30F2406E02540444665F307043E4018 +:1097100066F30F24E0B200F03EF88DF80000C4F3C9 +:10972000072000F038F88DF80100BDF80000F8BD02 +:1097300030B52A242325162A05D10C2807D00D2858 +:1097400005D01F2805D071B1162A0CD104E01C7079 +:1097500000E01D70012030BD08780128F7D00028F6 +:10976000F5D01628F5D0002030BD022903D0C00066 +:10977000703080B2704780003C30FAE7022905D093 +:109780006FF00D0101EBD00080B270476FF00E0159 +:1097900001EB9000F8E7810701D502207047C00770 +:1097A000FCD001207047F0B50C7C8B7BCD7B5C40FE +:1097B0004B7C02886B4044EA0323C67D5A40002458 +:1097C000D5B2120A95FAA5F592FAA2F22D0E120E52 +:1097D00045EA022202EB0212641C1A44E4B292B27D +:1097E000032CEDD35A402523B2FBF3F403FB1423DF +:1097F00001EBD30503762F7A03F00704012505FA60 +:1098000004F4274201D043761BE05643320C521C2D +:10981000D2B20023C418A47C944214D30024CE18DE +:1098200096F8086005FA04F73E4201D0521ED2B203 +:1098300022B1641CE4B2082CF4D306E004EBC301AB +:1098400041760020F0BD121BD2B25B1CDBB2052BAF +:10985000E0D31F20F0BDF0B5037E0C7E012504FB94 +:1098600002322523B2FBF3F403FB142201EBD204F2 +:10987000027602F00703247A05FA03F31C4201D0B2 +:1098800042761EE0C37DB2FBF3F403FB1422521CAC +:10989000D2B20023C418A47C944214D30024CE185E +:1098A00096F8086005FA04F73E4201D0521ED2B283 +:1098B00022B1641CE4B2082CF4D306E004EBC3012B +:1098C00041760020F0BD121BD2B25B1CDBB2052B2F +:1098D000E0D31F20F0BD00280CD0114441434D229D +:1098E00010FB02F001EB80009C380BB1042100E07A +:1098F000002108447047012804D0022805D004281C +:1099000006D007E0012907D004E0022904D001E0D5 +:10991000042901D00020704701207047282105F05C +:1099200053B830B50546007801F00F0220F00F0063 +:109930001043287007290BD2DFE801F00406040663 +:1099400004080400062405E00C2403E0222401E0BE +:109950000024FFDF687820F03F002043687030BDAE +:10996000007800F00F0070470A6840F8032F8988DC +:109970008180704750F8032F0A6080888880704784 +:109980000A6840F8092F89888180704750F8092FAC +:109990000A608088888070470278402322F0400265 +:1099A00003EA81110A43027070470078C0F3801007 +:1099B0007047027822F0800242EAC11202707047BA +:1099C0000078C0097047D0F80320C1F80920B0F82A +:1099D0000720A1F80D200A7822F080020A70007892 +:1099E000800942EAC0100870704770B515460E46EF +:1099F00004461F2A00D9FFDF2A46314604F1090038 +:109A000004F063FF6078AD1D20F03F0005F03F01DA +:109A10000843607070BD70B5054640780E4600F092 +:109A20003F04062C00D2FFDFA41FE4B21F2C00D994 +:109A30001F24224605F10901304604F046FF204666 +:109A400070BD70B515460E4604461F2A00D9FFDFCB +:109A50002A46314604F1090004F037FF6078AD1D55 +:109A600020F03F0005F03F010843607070BD70B505 +:109A7000044640780E4600F03F05062D00D2FFDF79 +:109A8000AD1FEDB21F2D00D9FFDF2A4604F10901F9 +:109A9000304604F01AFF284670BD0968C0F80F1060 +:109AA00070470A88A0F8132089784175704710F82C +:109AB000242F01F01F0122F01F020A430270704799 +:109AC000072900D9072110F8242F22F0E00242EAEA +:109AD0004112027070470A6840F81F2F097901711E +:109AE00070474178007801F03F0110F00F0005D079 +:109AF000012807D0022801D0062805D1891F1F2977 +:109B000004D901E00C2901D00020704701207047E2 +:109B10004178007801F03F0100F00F00042805D1E2 +:109B2000062903D3252901D801207047002070475A +:109B300030B5017801F00F01032922D0052925D184 +:109B40004578B0F81910B0F81B40B0F81730827D96 +:109B500005F03F05222D19D1062917D34FF448658A +:109B6000A94213D8B4F5FA7F10D27AB1082A0DD8D9 +:109B70008A420BD28B4209D8B0F81D00A84207D9FF +:109B800004E0407800F03F000C2801D0002030BDF8 +:109B9000012030BD00B5027801F0030322F003027A +:109BA0001A43027000224270012904D0022902D017 +:109BB000032901D0FFDF00BD0121417000BD00B5C8 +:109BC000027801F0030322F003021A43027000221C +:109BD0004270012904D0022902D0032901D0FFDFFD +:109BE00000BD0121417000BD007800F00300704706 +:109BF000417889B1C0780E2805D00F2803D01028ED +:109C000001D0192802D3FB2904D905E0864A105C4B +:109C1000884201D1012070470020704730B50546C9 +:109C2000C170192902D28048445C01E00024FFDFA2 +:109C30006C7030BDB0F807007047B0F8090070478D +:109C4000C172090A01737047B0F80B00704770B514 +:109C5000B0F80720B0F80940B0F805300179951F39 +:109C600040F67A46B54210D8B4F5FA7F0DD261B10C +:109C700008290AD8914208D2934206D8B0F80B00BE +:109C8000B0F5486F01D8012070BD002070BD0A6892 +:109C9000426009790172704742680A60007A08716F +:109CA0007047B0F809007047007970470A68426051 +:109CB00049688160704742680A6080684860704700 +:109CC0000988818170478089088070470A6840F858 +:109CD0000E2F49684160704750F80E2F0A604068A7 +:109CE000486070470968C0F816107047D0F8160031 +:109CF000086070470A68426049688160704742683E +:109D00000A608068486070470968C1607047C06831 +:109D100008607047007970470A684260496881604E +:109D2000704742680A608068486070470171090A9C +:109D3000417170478171090AC17170470172090A46 +:109D4000417270478172090AC172704780887047FA +:109D5000C0887047008970474089704701891B2976 +:109D60000CD341894FF4A472914207D381881B29F7 +:109D700004D3C088904201D301207047002070476F +:109D80000A68426049688160704742680A6080687A +:109D9000486070470179490704D04079400701D0F5 +:109DA00001207047002070470179490704D04079AD +:109DB000400701D0012070470020704701717047B3 +:109DC0000079704741717047407970478171090A85 +:109DD000C1717047C08870470CB514A2D2E9001257 +:109DE000CDE900120179407901F0070269461DF8BA +:109DF0000220012A04D800F00700085C012801D9DC +:109E000000200CBD01200CBD017170470079704726 +:109E1000417170474079704730B50C460546FB29C3 +:109E200000D9FFDF6C7030BD54EF0100000101026A +:109E3000010202032DE9F041FF4E04460020717833 +:109E4000DFF8F8830127054611B1012905D009E0A3 +:109E500098F8531031B1777003E098F8281009B1E1 +:109E60007570012071782B2211FB02F1414491F8A9 +:109E70002820024311D02A22A01C293104F025FDFC +:109E8000657004202070A77070782B2110FB01F101 +:109E900001EB080080F8285040E098F87E0060B19F +:109EA000E64911227F31A01C04F00FFD65701220DD +:109EB0002070A77088F87E5030E098F822000128C2 +:109EC00006D098F8000001280CD00020BDE8F081F1 +:109ED000657006202070D8F82400C4F8020088F8C5 +:109EE00022501BE0657013202070202208F102012F +:109EF000A01C04F0EAFCA57188F80050B8F8040032 +:109F0000A8F82400D8F89C00417B88F8261088F82F +:109F100022700088F5F76EFFF5F715FC0120D5E7F4 +:109F2000C648017809B1808870474FF6FF707047C6 +:109F300070B50446C14890F8AE10002919D090F8C9 +:109F4000AC10002915D0BD4990F8910092310D4612 +:109F500000F05FFE38B1FEF7CEFF22462946BDE88D +:109F60007040FAF7F4BB21462846BDE87040FAF786 +:109F700021BC70BD70B50646B0482B2290F8AF00EA +:109F800011FB02F1AD4A8D1805F12C0418B1F9F757 +:109F90009AFB01280AD03046FFF707FD85F82B0011 +:109FA00021463046BDE87040FFF7E4BCF9F7ADFB51 +:109FB000224605F12B01FEF7B0FE00B9FFDF15F8D0 +:109FC0002B0F40F00200287070BD70B59B4C064608 +:109FD00094F82800002832D13046FFF7C1FC014632 +:109FE00000200125072916D2DFE801F00B0408152F +:109FF00015150A0084F82A5001210DE0032000E025 +:10A0000002208E4984F82A0033313046FFF703FDE1 +:10A0100084F8320004E0002184F8320000290ED0D8 +:10A0200000213046FFF7A6FF8448523000F011FEB1 +:10A0300084F82850BDE87040032001F0F0BB70BDEB +:10A0400010B5002001F019FB98B1F9F77AFF012251 +:10A0500000211046F9F7FAFD7848BC30F9F77AFF8D +:10A06000764CD4F8B400F9F779FF00F0DDFD40B983 +:10A0700003E0BDE8104000F04EBE94F8A0000228B6 +:10A0800003D101210020FAF7B2F8F9F7EAFF94F8BA +:10A09000AF0018B1F9F7E8FAF9F7BFFF032084F829 +:10A0A000B20010BD70B5654C054694F89110FFF7ED +:10A0B00073FC04F192012846FFF756FC94F8AD00BA +:10A0C000002818D000F0B0FD28B194F89B0010B122 +:10A0D00094F8A30001E094F8B000FEF70EFF04002E +:10A0E00009D001212846FFF757FC21462846BDE844 +:10A0F0007040FFF739BC70BD10B5012001F0BDFA0A +:10A10000B0B14E49E431A1F12800FFF75CFC4B48A7 +:10A11000E430FFF7C7FF4948E430F9F71BFF01219E +:10A120000846FAF764F84549052081F8B20010BDE9 +:10A13000BDE8104000F0EFBD10B5022001F09DFA1F +:10A1400098B3012001F06BFB3C49E431A1F12800F8 +:10A15000FFF739FC394C3948202354F89C1FE43070 +:10A160004A7B017803EA421221F020011143334A6D +:10A1700001702068BC321278417BC2F3401211405A +:10A1800041732E48E430FFF78DFF2C492068E431FD +:10A19000C08AC875000A087608462168497D81751D +:10A1A000F9F7D8FE0620A07510BDFFE7BDE8104006 +:10A1B00000F0B1BD70B50D460446FFF7AFFB032DAF +:10A1C00038D0052D41D105212046FFF7AAFB1B4DB4 +:10A1D000204655F89C1F0E31FFF75FFC296820468A +:10A1E0001231FFF75EFC2868407DA0752868C08AA0 +:10A1F000E075000A2076286840886076000AA0761C +:10A2000028688088E076000A20772868C088607710 +:10A21000000AA077296820460831FFF75CFC28680F +:10A22000017E2046FFF743FCE97D2046BDE87040F3 +:10A23000FFF746BC032103E058010020FC0F00207B +:10A240002046BDE87040FFF76CBB70BDF64910B505 +:10A25000B1F8BA2058B1FF2A12D24FF6FF7000EAC7 +:10A260004200A1F8BA00FF280AD9FF2006E0012A1F +:10A2700006D95008A1F8BA0002D10120A1F8BA000D +:10A28000EA484268012A00D00AB90D224260D2434E +:10A29000C2EBC20303EB021211F8B93FDB4303EB3D +:10A2A0008304C4EB83131A444260900CB1F801207C +:10A2B000B0FBF2F302FB1300087075E770B5DA4CDF +:10A2C00094F8B200022805D094F8B200012801D019 +:10A2D0000C2070BD002005462B2101FB004181F8B8 +:10A2E0002850401CC0B20228F6D3257084F82250B2 +:10A2F00094F8AF0028B1F9F79EFEF9F7C9F984F890 +:10A30000AF5084F8AE50012004F89B0FC648657129 +:10A31000A57540F2011120F8981F8170002070BDD2 +:10A32000C14810B5002100F8B21F01210170FFF7EC +:10A33000C5FF002800D0FFDF36E72DE9F041BA4C19 +:10A3400007460C2594F8B200012805D094F8B20015 +:10A35000022801D00C20B9E5F9F722FBF9F7FCFA45 +:10A3600094F8980028B994F8990010B994F89A00D4 +:10A37000F0B300F059FC08B1052104E094F8A00006 +:10A38000022804D10321A848E430FFF713FF94F812 +:10A39000AC0010B994F8AD0038B3F7F729FD0546C5 +:10A3A000D4F8A8002946A434F8F730FAA04990FB65 +:10A3B000F1F601FB160041422846F7F722FA6060E9 +:10A3C000206830442060FEF785FC54F8A4198842C8 +:10A3D0000BD80020C4E9290594F8AD0010B1012084 +:10A3E000FEF760FD0120FFF7A3FD94F8911000E057 +:10A3F00009E08D489230F9F733FB94F8B20000255C +:10A40000012805D006E094F8B200022814D001E03B +:10A4100000F06EFC94F89B0090B1FEF7F0FC8248CF +:10A42000BC30FEF722FD84F8AF008248C4F8B47057 +:10A43000F9F778FD284649E5012084F8B20089E75C +:10A44000FEF7A8FCEBE770B5774C94F8B200022851 +:10A4500001D00C2070BD012084F8B900A4F8BA0026 +:10A460000220F9F774FD7348801DF9F73DFB0020C9 +:10A47000032304F1980100BF94F8B120521CB2FBF1 +:10A48000F3F503FB152284F8B120525C012A07D0B2 +:10A49000401CC0B20328EFD3FFF7D2FD002070BDEF +:10A4A000644994F8B100C91C085CF9F727FBF9F777 +:10A4B00053FAF1E72DE9F0415B4C054616460F468D +:10A4C00094F8900000F094FB50B14DB9384600F07C +:10A4D00088FB3146FEF702FC082801D00120F5E494 +:10A4E00094F8900000F07DFBBDE8F041FAF7F5B874 +:10A4F0004D4810B590F8900000F073FBBDE8104097 +:10A50000FAF7EBB8484981F890007047464981F85E +:10A51000AE00704770B5444C14F8900F00F061FB2A +:10A520004149607092310D46FAF7C1F8207800F089 +:10A530005FFB607760782946903C00F061FB28B9AA +:10A5400094F89100294600F064FB00B1012084F8E2 +:10A55000AC0018B994F8AD0000280ED0002044F8E3 +:10A56000A40FF7F745FC6060607A10B10020FEF799 +:10A5700099FCBDE870400020DAE470BD38B10228D3 +:10A5800005D00022284901F89B2F887170470122CD +:10A59000F8E770B5244C15460E46002816D04FF04B +:10A5A000000100BF84F89B1084F8A2004FF008005F +:10A5B00084F8A30013D1304600F013FB2946FEF7C0 +:10A5C0008DFB84F8A300082803D008E04FF00101B8 +:10A5D000E8E7304600F00CFB08B1122070BD002007 +:10A5E00070BD114A032801D1C2F89C1082F8A00066 +:10A5F0000020704710B500F017FB0B4920B191F80F +:10A60000A20001280DD00BE091F8A000012801D094 +:10A61000022805D191F8A100012803D0032801D018 +:10A620000020C1E50120BFE5FC0F002058010020FB +:10A6300040420F006DEF010010B500F061FBFB4CD4 +:10A6400094F8AF0030B1F9F7F6FCF9F721F80020E3 +:10A6500084F8AF0000F04CFB0020A5E5F34981F839 +:10A66000B300704700F057BB2DE9F05FEF4CFF21BE +:10A67000002684F8B010002873D004F1BC00FFF766 +:10A6800030FA28B904F1BC00FFF742FA0028F3D0F1 +:10A6900094F8B200E54DE64FBC3505287ED2DFE8E0 +:10A6A00000F07D7D7D03FD00E048BC30FFF758F9E8 +:10A6B000B87094F89B0010B9F9F70EFA08B10126AA +:10A6C00000E0002694F8AF0070B1FEF749FB84F873 +:10A6D000B0000146FF280BD0E81CFEF735FB94F8CC +:10A6E000B000FEF747FB064394F8B000FF2811D1F5 +:10A6F000FEF7B0FB84F8B00094F89B1051B1082825 +:10A7000008D12878E91CC0F38010FEF7E7FA082882 +:10A7100000D00026B878072872D2DFE800F0237E48 +:10A7200004717171130000F00BFB46B194F8A000A6 +:10A73000012801D0022802D1F9F7C6FB0CE0F9F795 +:10A74000C3FB82E100F0FCFA002EF8D094F8A000E0 +:10A75000022838D00128F2D1B448BC30FFF735FCCC +:10A7600073E178E100F0ECFA002EE8D094F8A00054 +:10A77000022828D00128EFD000F056FA88B3D4F888 +:10A780009C10E8788A7E904224D12879CA7E904233 +:10A7900020D168790A7F90421CD100E059E1A87964 +:10A7A0004A7F904216D1E8798A7F904212D1287A66 +:10A7B000CA7F90420ED128784A7EC0F38010904222 +:10A7C00008D1012007E09948BC30FFF7FEFBBDE847 +:10A7D000F05F91E4002094F8A220012A02D080B119 +:10A7E000ADE017E0002814D190481A31BC30FFF7D3 +:10A7F000C1F88E48BC30FFF7D8F8D4F89C109DE023 +:10A8000033E194F8A300082899D094F8B01081425D +:10A8100095D194E0FFDFBDE8F09F00F091FA94F845 +:10A82000AD00A0B10020804680492878C5310027BE +:10A83000AA46C0098B4600F0ECF9054600F0F4F991 +:10A8400038B194F89B0020B194F8A30003E00120F4 +:10A85000E9E794F8B000FEF74CFA5FEA00090BD084 +:10A860001021FEF793FD08B14FF0010825B15946BC +:10A870004846F9F73FFF074600F0D6F988B3D4F809 +:10A880009C109AF8032050468B7E9A421ED1027982 +:10A89000CB7E9A421AD142790B7F00E068E09A425F +:10A8A00014D182794B7F9A4210D1C2798B7F9A4220 +:10A8B0000CD1027ACB7F9A4208D19AF80000497EE7 +:10A8C000C0F38010884201D1012500E0002594F8F2 +:10A8D000B000082806D094F8A310884202D10120C5 +:10A8E00001E030E0002081462FB9B8F1000F04D01C +:10A8F000F9F7BEF808B1012000E000204EB194F84D +:10A90000A210012903D021B955EA090101D0012182 +:10A9100000E0002108423FF412AF94F8A2000128A1 +:10A920000DD165B954F89C1F40481A31BC30FFF76F +:10A9300021F83E48BC30FFF738F821684876BDE87A +:10A94000F05FFFF7F9BBF9F7BFFA26B1F9F790F816 +:10A9500038437FF4F3AE94F8A100032801D0022815 +:10A9600073D1EDB3E7BB3148BC3000F07EF96CE049 +:10A970002E48BC30FEF7F4FFB8702C48E978E4307C +:10A98000427A91421CD12979827A914218D169790F +:10A99000C27A914214D1A979027B914210D1E9790E +:10A9A000427B91420CD1297A827B914208D129784D +:10A9B0000078C1F38011B1EBD01F01D1012500E077 +:10A9C0000025F9F781FAB878042834D195B300F05E +:10A9D00034F994F8B80010B10020FFF737FC00E01C +:10A9E00033E0012584F8B850104E94F85300BC367B +:10A9F00058BB042084F8550001213046FFF7BAFA0D +:10AA0000A6F15E013046FFF732F884F85D001F289A +:10AA100002D91F2084F85D0004487D3000F019F948 +:10AA200084F85350042000F0FAFE0EE0FC0F0020E2 +:10AA300058010020FFE700F000F994F8B80010B9C1 +:10AA40000120FFF703FC84F8B860BDE8F05FFFF772 +:10AA5000F7BAFFDFDFE694F8B2000528FAD2DFE8A4 +:10AA600000F0030303040700D5E600F069F966E689 +:10AA700000F0E3F894F8B80010B90120FFF7E6FB06 +:10AA800084F8B8605BE62DE9F041B34C94F8B2006D +:10AA900007287DD2DFE800F07F7F7F7F7F041100F1 +:10AAA000AD48BC30F9F756FAF9F7DBFA9620F9F71A +:10AAB00076FA042084F8B2004DE400F021F900F0A9 +:10AAC00017F9207800B1FFDF0025A570D4F89C00AD +:10AAD000A14F0188A180418861838188A183C088BA +:10AAE000E08384F8205094F8AD00E437A7F16406C1 +:10AAF00030B13878F91CC0F3801000F08AF848B9FA +:10AB000094F8AE0070B13878F91CC0F3801000F0F2 +:10AB100077F838B1D6F86700C4F80E00B6F86B00C5 +:10AB2000608202E0C4F80E50658294F8AF0018B15C +:10AB3000F8F7C9FD012819D0D4F89C00417EE171D5 +:10AB4000D0F81A10A160C08BA081834845610583AD +:10AB500001202070D4F89C000088F5F74BF9F4F739 +:10AB6000E3FDBDE8F041022000F059BEF8F7CDFD4D +:10AB7000794AE11D0832FEF7D0F800B9FFDFE0792D +:10AB800040F00200E07156F83F0F6061B08800E0CD +:10AB900001E02083DCE7FFDF4DE410B56E4C94F854 +:10ABA000B200052819D2DFE800F0181818140300C5 +:10ABB00000F043F894F8B80010B90120FFF746FB05 +:10ABC000002084F8B800F9F77FF9BDE81040FFF7DE +:10ABD00037BABDE8104000F09EB822E5012200F02F +:10ABE00058BE18B1022801D00120704700207047DC +:10ABF000022803D0032801D00020704701207047AD +:10AC0000012802D14879800901D000207047012035 +:10AC10007047012806D148790121B1EB901F01D17D +:10AC200001207047002070474B4890F8A00003288F +:10AC300001D0002070470120704710B54748F9F750 +:10AC40001BFA10B945497F200870BDE81040F9F79C +:10AC5000FEB930B5414C054620787F2800D1FFDF92 +:10AC6000207828707F20207030BD2DE9F0413A4CCB +:10AC7000074694F87E00002839D1012684F88060C8 +:10AC800094F8AF0004F1820518B1F8F71CFD012813 +:10AC90001DD03846FEF789FE84F8810029463846E3 +:10ACA000FEF768FE3846FEF78BFE84F888002A49D6 +:10ACB000384689317E34FEF769FE27488F30FFF72A +:10ACC000C8FF2670BDE8F041032000F0A8BDF8F7EA +:10ACD0001CFD21492A468131FEF71FF800B9FFDF2C +:10ACE00094F8810040F0020084F88100DAE7E3E69E +:10ACF0001948012180F8B810022180F8B21070477D +:10AD000010B5F9F77DF9F9F76EF9F9F7DDF8BDE857 +:10AD10001040F9F70DB910B5FFF7F2FF0E4C94F89B +:10AD2000AF0030B1F9F787F9F8F7B2FC002084F8EA +:10AD3000AF00FFF7DDFFBDE81040002000F06FBD61 +:10AD4000054810B590F8AF0018B1F9F774F9F8F7A5 +:10AD50009FFCBDE8104070E7FC0F00205801002068 +:10AD6000D0F8D81049B1D0E937231A448B691A4476 +:10AD70008A61D0E93512D16003E0FE4AD0F8D410E0 +:10AD80005161D0E9351009B1086170470028FCD045 +:10AD900000218161704770B505460C461046F9F7F1 +:10ADA0006DFB4FF47A71022C0CD0F34A4FF4C86358 +:10ADB0001A44104400F23F60B0FBF1F0284400F563 +:10ADC000C97070BDED4A0B46F2E72DE9FF4F06460C +:10ADD0000C46488883B040F2E24148430190E08A43 +:10ADE000002500FB01FA94F8630017460D2822D0D5 +:10ADF0000C2820D024281ED094F8640024281AD0CF +:10AE000000208346069818B10121204602F023FA5B +:10AE100094F8512094F85200009094F8C81091468C +:10AE20004FF47A7849B1012951D0022937D003294A +:10AE30004DD0FFDF96E00120E3E707B9FFDFCD4FFC +:10AE4000786800B9FFDF14F8510FF9F724FB454685 +:10AE500000F2E730B0FBF5F17868B8460F182078BB +:10AE6000F9F719FB024614F85109022814D0C24818 +:10AE70004FF4C8610844104400F2E730B0FBF5F12C +:10AE8000D8F81000411A01EB0A00C519012084F816 +:10AE9000C80005F2E64564E0B8482946EAE7DFF86D +:10AEA000D482791ED8F80400084300D1FFDFB448EB +:10AEB000016801EB0A0537B1D8F8040000F222302E +:10AEC000A84200D9FFDF032084F8C80049E094F8C5 +:10AED0006310019D242903D094F86410242933D1F0 +:10AEE000B4F85810B4F8EA30C91A491C09B200295C +:10AEF0002ADB94F8E81039B3894694F8E91001B1D7 +:10AF000008460090022A13D09B484FF4C8610844B9 +:10AF1000B9F1020F0FD098494FF4C862114488422A +:10AF20000CD9401A00F5FA70B0FBF8F005440BE0BC +:10AF300092484146EBE791494246EFE7081A00F58F +:10AF4000FA70B0FBF8F02D1A5FB18A4F786810B92B +:10AF5000788800B1FFDF786800F22230A84200D97B +:10AF6000FFDF05B9FFDF2946D4F8CC00F6F749FC2E +:10AF7000C4F8CC00B060002030704FF0010886F8B3 +:10AF80000480204602F0C3F9ABF10101084202D16E +:10AF900086F8058005E094F8C80001282FD003202A +:10AFA0007071606A4946009AFFF7F5FEF0600698F6 +:10AFB00030EA0B0020D029463046FEF7B2FA87B2BD +:10AFC000204602F0A4F9B8420FD8074686F805805B +:10AFD00005FB07F1D4F8CC00F6F713FCB060294666 +:10AFE0003046FEF79EFA384487B23946204602F0D2 +:10AFF00032F9B068C4F8CC0007B0BDE8F08F022089 +:10B00000CEE72DE9F04106460C46012000F05FFC3A +:10B01000C5B20B2000F05BFCC0B2854200D0FFDF60 +:10B020000025082C7DD2DFE804F004525A5A56BDA0 +:10B03000BD7F304600F05AFC0621F4F7A9FD04005C +:10B0400000D1FFDF304600F051FC2188884200D05B +:10B05000FFDF94F8C80000B9FFDF204601F098FF39 +:10B06000444E21460020756075803561FEF795FAE3 +:10B0700000F19807606AB84216D994F85200F9F7BF +:10B08000FDF994F8512001464FF47A70022A1BD042 +:10B09000394A4FF4C8631A44114401F23F61B1FBCD +:10B0A000F0F1606A0844C51B21460020B560FEF738 +:10B0B00074FA618840F2E24251439830081AA0F2D3 +:10B0C0002230F060BDE8F0812C4A0346E3E7BDE89A +:10B0D000F04101F0C5BFBDE8F041F9F711B96FF0DB +:10B0E000040000F0F4FBC4B2192000F0F0FBC0B281 +:10B0F000844200D0FFDF304600F0F8FB0621F4F771 +:10B1000047FD040000D1FFDF304600F0EFFB21884F +:10B11000884200D0FFDF2046BDE8F0410122002137 +:10B1200000E03FE000F0EBBB304600F0DFFB062123 +:10B13000F4F72EFD040000D1FFDF304600F0D6FB0F +:10B140002188884200D0FFDF94F8C800042800D08E +:10B15000FFDF84F8C85094F8D2504FF6FF76202DC8 +:10B1600000D3FFDF03483C3020F8156094F8D2008C +:10B1700008E0000008110020A22402006836020046 +:10B1800064010020F6F715FE00B9FFDF202084F8E7 +:10B19000D2002046FFF7E4FDFE480078BDE8F0410C +:10B1A000F0F7B0BBFFDF8DE72DE9F047FA4C06461C +:10B1B000E08B6568401CE08320784FF00008A8B160 +:10B1C000042815D005282DD0FFDF29462069F6F781 +:10B1D00018FBB06086F8008001203071A06800F58F +:10B1E000B370F0602078042824D028E0FFDFECE77B +:10B1F0000029EAD02F46D4F8109000F001FC050099 +:10B200000ED0287800B9FFDF696968684A460844AB +:10B21000394600F0E1FB0546B842D6D9FFDFD4E756 +:10B220004546D2E70029D0D0A06900F085FB40F662 +:10B23000B835CAE7E08B0A2801D2032000E00220DB +:10B240007071E08B012806D930466168FEF769F914 +:10B25000E18B0844E083B0682061BDE8F0872DE908 +:10B26000FF4107460E46012000F031FBC4B20B201F +:10B2700000F02DFBC0B2844200D0FFDF002501208A +:10B28000C54C082E52D2DFE806F004172D2D2951A7 +:10B29000514560732073607800280BD1BE48183880 +:10B2A000456005612573A068C138FFF746F800289E +:10B2B00000D0FFDFBDE8FF81617841B1207B08B994 +:10B2C000FFF7BAF96573BDE8FF41F6F79DBCA073BF +:10B2D000FFF7B9F80028EDD0FFDFEBE7BDE8FF414D +:10B2E000F9F70EB86FF0040000F0F1FAC4B21920BB +:10B2F00000F0EDFAC0B2844200D0FFDF00216846C2 +:10B30000FFF752FF69463846F6F7BAFF0028D1D159 +:10B31000FFDFCFE72078052800D0FFDF207F00B9CE +:10B32000FFDF2577BDE8FF4100F0FABAFFDFC1E794 +:10B330002DE9F041984C00262078042804D020788C +:10B34000052801D00C20BDE601206070607B00253F +:10B3500038B1EFF3108010F0010F72B605D001275D +:10B3600004E0207DF7F79EF80CE00027607B38B101 +:10B37000A07B28B1FFF760F96573A573F6F744FC6D +:10B3800007B962B6207DF7F7DAFA207F28B1257772 +:10B390002078052800D0FFDF0C26657000F0C0FA89 +:10B3A00030468FE67C4810B5007808B1FFF7C0FF43 +:10B3B00000F02FFB784900201839486110BD10B506 +:10B3C000744C58B1012807D0FFDFA06841F66A012C +:10B3D000884200D3FFDF10BD40F6C410A060F4E740 +:10B3E0006C4910B508706C490020087048700877E7 +:10B3F000087348738873202288610A751839487069 +:10B40000654A4FF6FF71243222F81010401CC0B27A +:10B410002028F9D30020FFF7D2FFBDE81040C1E794 +:10B4200070B50D465C4C40F27121484360600120CC +:10B43000F9F724F84FF47A7100F2E730B0FBF1F03D +:10B4400040F2712101FB0501A1606068A0F2F620C5 +:10B45000814200D9A06070BD2DE9FF414E4C0546E8 +:10B46000164620780F4610B10C2004B02AE695F855 +:10B47000522095F85110686A00F00DFBC5F8DC0009 +:10B48000A56195F8C80000B1FFDF31463846FFF7E7 +:10B49000C7FF4149002018390861052121706070FB +:10B4A0002077E0833D48F6F72AFC2075202800D15C +:10B4B000FFDFF6F79DFC206101216846FFF774FE6F +:10B4C000207D6946F6F7DCFE00B9FFDF0020CCE7FF +:10B4D000314810B5007808B1002010BD0620F4F7FF +:10B4E000F1FA80F0010010BD1FB52B4C227812B18B +:10B4F0000C2004B010BDFFF793FF00206070042102 +:10B500002170E0832548F6F7FAFB2075202800D14A +:10B51000FFDF00F075FA10B1F6F76AFC05E0F6F708 +:10B5200067FC40F6B831F6F76CF9206101216846F6 +:10B53000FFF73AFE207D6946F6F7A2FE00B9FFDF6D +:10B540000020D6E770B5144CA1690160FFF7F0FE4A +:10B55000050002D1A069FFF703FC0020A061284686 +:10B5600070BD7FB50C4C2078052802D00C2004B0AB +:10B5700070BDA06900B9FFDFA06990F8C80000B1F4 +:10B58000FFDFA06990F8D200202800D0FFDF044838 +:10B5900008E0000060010020201100205FB20100DF +:10B5A00003B00100F6F7ABFBA1690546202881F83E +:10B5B000D2000E8800D3FFDFFC4820F81560A06998 +:10B5C00090F8D200202800D1FFDF00230122684636 +:10B5D000A169FFF7FAFBA069694690F8D200F6F777 +:10B5E0004FFE00B9FFDF0020A061C0E7EF493C3902 +:10B5F0004870704710B540F2E24300FB03F40020AE +:10B6000000F049FA844201D9201A10BD002010BD73 +:10B6100070B50D46064601460020FDF7BEFF044604 +:10B6200096F85200F8F72AFF96F8512001464FF499 +:10B630007A70022A14D0DE4A4FF4C8631A441144C7 +:10B6400001F23F61B1FBF0F1708840F2712250438A +:10B65000C1EB4000A0F22230A54204D2214603E013 +:10B66000D44A0346EAE72946814204D2A54201D2E0 +:10B67000204600E02846706270BDCC4910B53C39C8 +:10B680004C68983458B101280CD002280DD0FFDF47 +:10B69000C64824388068A0420AD9012010BD04F5AC +:10B6A000BC74F5E704F53174F2E704F5B074EFE724 +:10B6B000002010BD10B5BD4C3C3C607828B1D4E9E9 +:10B6C00002016268FDF757FFA060D4E901018842DA +:10B6D00001D8207808B1002010BD012010BD10B5A0 +:10B6E0000446012903D1B1483C38007830B1042028 +:10B6F00084F8C800BDE81040F6F786BA00220121A0 +:10B70000204600F0FCF834F8580F401C2080F1E788 +:10B710002DE9F0410120F8F7B1FEA749A34C0844F8 +:10B720004FF47A71B0FBF1F0243CA4F118062169C2 +:10B73000726811440A1AA06940F2E24102F2DE6224 +:10B740004788C8304F437169814208D03946206A22 +:10B7500000F042F90546B84202D9FFDF00E00025BB +:10B7600096488068854207D2A16940F271224888D4 +:10B77000424305EB420504E040F2E240B5FBF0F045 +:10B78000A169C882A06905214175C08A6FF41C7146 +:10B79000484305EB400040F635413061B0EB410FC6 +:10B7A00000D3FFDF8EE410B5052936D2DFE801F0C3 +:10B7B0000509030D3100002100E00121BDE8104022 +:10B7C0008DE7032180F8C81010BD0446408840F280 +:10B7D000E24148437949091D0860D4F8F000008926 +:10B7E000E082D4F8F00080796075D4F8F0004089E8 +:10B7F0006080D4F8F0008089A080D4F8F000C0897F +:10B80000E0802046A16AFFF703FF022084F8C80009 +:10B8100010BD816ABDE81040FAE6FFDF10BD7FB5BC +:10B82000624C0025243C052830D2DFE800F00312EA +:10B830001528280000F035F96078D8B9002168464D +:10B84000FFF7B2FC207D6946F6F71AFD90B9FFDFDD +:10B8500010E0BDE87F405BE700F023F9012020778E +:10B86000A0692169C0F8CC1080F8C850FFF779FEB4 +:10B8700000B1FFDFF6F7C8F96573A5737FBD4F48C8 +:10B88000007804B0BDE87040F0F73CB8FFDF7FBD42 +:10B89000704770B5454D04463C3D91B1012910D02B +:10B8A000022901D0FFDF70BD6888401C6880104607 +:10B8B000F8F7F1FD4FF47A7100F2E730B0FBF1F0E8 +:10B8C000201A686070BD3948243800787047002815 +:10B8D00006DA00F00F0000F1E02090F8140D03E00C +:10B8E00000F1E02090F800044009704710B50446CC +:10B8F000202800D3FFDF2D4830F8140010BD1FB5FD +:10B9000013460A46044601466846FFF75EFA94F875 +:10B91000D2006946F6F7B4FC002800D1FFDF1FBD56 +:10B9200070B5224C0025243C2570207DF6F741FAA5 +:10B9300000B9FFDF257570BD2DE9F041050000D18C +:10B94000FFDF1A4A00243C3AD5F8DC602046631E2B +:10B95000516908E08869B04203D3984201D2034696 +:10B960000C460846C9680029F4D104B904460021F0 +:10B97000C5F8D840C8351CB3E068E560E86000B1A0 +:10B9800005612E698846A96156B1B06930B16F6909 +:10B99000B84200D2FFDFB069C01BA861C6F81880AA +:10B9A000024D243DACB1207870B90CE04411002068 +:10B9B000A224020068360200C92E020060010020A5 +:10B9C000E9605561DDE7FFDF61696068084428626E +:10B9D000B9E4C5F82080B6E410B50C46014610461F +:10B9E000F6F714FF002806DA211A491E91FBF4F13C +:10B9F00001FB040010BD90FBF4F101FB140010BD2D +:10BA00002C484169002001E00846C9680029FBD1A3 +:10BA100070472DE9FE43274D0120287000264FF680 +:10BA2000FF7420E00621F4F7B3F8070000D1FFDF30 +:10BA300097F8D200C837F6F782FF07F80A6BA146DD +:10BA400017F8D289B8F1200F00D3FFDF194A3C3232 +:10BA500022F8189097F8D200F6F7ABF900B9FFDF9B +:10BA6000202087F8D20069460620F4F71AF850B172 +:10BA7000FFDF08E0029830B190F8C81019B10088D3 +:10BA8000A042CFD104E06846F3F7E9FF0028F1D0E7 +:10BA90002E70BDE8FE8310B5FFF77DF900F5C87084 +:10BAA00010BD044900201831C88303480078EFF71F +:10BAB00029BF00000811002060010020012806D0E5 +:10BAC000022807D0042808D0082808D105E0012959 +:10BAD00007D004E0022904D001E0042901D00020AD +:10BAE000704701207047FE48806890F8861029B1A1 +:10BAF000B0F88210B0F88420914215D290F88A10E4 +:10BB000029B1B0F88810B0F8842091420CD2B0F876 +:10BB10008020B0F87E108A4206D290F86720B0F8F4 +:10BB20007C001AB1884203D3012070470628FBD25B +:10BB3000002070472DE9F041E94D0746A86800F163 +:10BB4000580490F8EC0030B9A27B00230121204674 +:10BB5000FDF78BFC10B1208D401C208501263D2176 +:10BB6000AFB92878022808D001280AD06878C8B16F +:10BB700010F0140F09D01E2039E0162037E0A67609 +:10BB80003EE0A86890F8EE0031E0020701D5E176CA +:10BB9000F5E7810701D02A2029E0800600D4FFDFE5 +:10BBA000232024E094F82E0028B1608D411C61858B +:10BBB000A18D884213D294F8320028B1208E411C06 +:10BBC0002186A18D88420AD2218DE08C814203D347 +:10BBD000AA6892F8EC2012B9A28D914201D32220DA +:10BBE00005E0E17B29B1A18C814207D30820E076F2 +:10BBF000C5E7A08C062801D33E20F8E7A07EB0B1AF +:10BC00000020E0722073E0730221A868FFF7CBFDEB +:10BC1000A86890F8C310012904D1D0F8F41008786E +:10BC2000401E0870E878BDE8F041EFF76BBEA868E9 +:10BC3000BDE8F0410021FFF7B6BDA9490C2889688D +:10BC400081F8C30014D0132812D0182810D0002275 +:10BC500011280ED007280BD015280AD0012807D0AC +:10BC6000002805D0022803D021F8822F0120087176 +:10BC70007047A1F88820704710B5994CA1680A88D0 +:10BC8000A1F8362181F8340191F8510001F077FBD9 +:10BC9000A16881F8380191F8520001F070FBA168A9 +:10BCA00081F83901012081F83201002081F8060174 +:10BCB000E078BDE81040EFF725BE10B5884C0421B0 +:10BCC000A068FFF770FDA06890F84E10012912D00F +:10BCD00000F5867102884A81028E8A81828ECA812D +:10BCE000428E0A82C08E488201200872E078BDE848 +:10BCF0001040EFF707BE022180F84E1010BD70B55E +:10BD00007748806890F84E20448EC38E418FB0F8FB +:10BD10004050022A23D0A94200D329460186C18F70 +:10BD2000B0F84220914200D311468186018FB0F8CD +:10BD30004420914200D311464186818FB0F84620BD +:10BD4000914200D31146C186418EA14200D90C46D2 +:10BD50004486C18E994200D90B46C38670BD028EBF +:10BD6000914200D31146C68F828E964200D232464F +:10BD7000A94200D329460186B0F842108A4200D376 +:10BD80000A468286002180F84E10CFE770B5544CE9 +:10BD900000231946A06890F863205830FDF765FB32 +:10BDA00000283DD0A06890F8F8100025C9B3A1691B +:10BDB0000978B1BB90F86400FDF74AFB88BBA16825 +:10BDC000B1F858000A282DD905220831E06902F09F +:10BDD00050FD10B3A068D0F8F410087858B10522CF +:10BDE000491CE06902F045FD002819D1A068D0F88F +:10BDF000F400007840B9A068E169D0F8F4000A685E +:10BE0000C0F8012009794171A068D0F8F4000178E8 +:10BE1000491C01700120FFF710FFA06880F8F8505E +:10BE200070BDFFE7A06890F8FC1011B190F8FD100C +:10BE300009B390F806110029F2D090F807110029F3 +:10BE4000EED190F86400FDF703FB0028E8D1A0686C +:10BE500090F8081190F85100FFF730FE48B3A06841 +:10BE600090F8091190F85200FFF728FE08B3BDE8DA +:10BE70007040002000E7B0F8FE10A0F84010B0F8C5 +:10BE80000011A0F84210B0F80211A0F84410B0F868 +:10BE90000411A0F8461080F8FC5090F864001D28AA +:10BEA00001D0142006E001F07CFAA06880F864500C +:10BEB000B6E71620BDE87040BFE610B5F6F7F4FF10 +:10BEC0000C2817D3064C0821A068D0F8F0001E30CB +:10BED000F6F7EEFF48B1A0680421B83002E0000098 +:10BEE0006C010020F6F7E4FF00B9FFDFBDE8104069 +:10BEF0000320A2E610BD10B5F94CA068D0F8F010F0 +:10BF00000A78002A1FD04988028891421BD190F8F4 +:10BF10006320002319465830FDF7A7FA002812D0F5 +:10BF2000A068D0F8F0100978022907D003290BD0B7 +:10BF3000042917D0052906D108200DE090F86400E7 +:10BF4000FDF786FA40B110BD90F8681039B190F84D +:10BF5000690000B9FFDF0A20BDE810406DE6BDE8CA +:10BF60001040AAE790F88E008007ECD10C20FFF774 +:10BF700064FEA068002120F8821F01210171017B6D +:10BF800041F00101017310BD38B5D54CA268B2F87B +:10BF90005120ADF80020FDF79BFB9DF80030C2B2A8 +:10BFA0000021934203D0A36883F8E82002E0A2684E +:10BFB00082F8E8109DF80120C0F30720824203D0E8 +:10BFC000A16881F8E90038BDA06880F8E91038BDA3 +:10BFD00038B5C34DA86890F8C310FF2953D16978CC +:10BFE000002950D190F86620002301215830FDF738 +:10BFF0003CFA002847D1A86890F8EC1009B102205B +:10C00000ACE090F86320002319465830FDF72DFA74 +:10C0100028B1A86890F87A0008B112209EE0A868BC +:10C02000002490F86320122A1DD004DC032A21D0BA +:10C03000112A04D119E0182A1AD0232A24D0002367 +:10C0400004215830FDF711FA00281CD1A86890F897 +:10C05000641019296FD01EDC01292FD002293AD093 +:10C0600003291CD125E00B2078E0BDE8384024E707 +:10C07000062073E010F8C21F81700720FFF7DDFD76 +:10C08000A86880F8634038BD1820FFF7D6FDA8687F +:10C09000A0F8824038BD1E2921D021293ED0FFF7CB +:10C0A0002AFFA86890F8C300FF28F3D1BDE8384004 +:10C0B0006CE610F8C11FC170072053E00C20FFF799 +:10C0C000BCFDA86820F8884F817941F00101817199 +:10C0D00000F8244C38BD1320FFF7AFFD1AE090F8AC +:10C0E000FD100029F6D190F8FC1089B1B0F8FE10CF +:10C0F000A0F84010B0F80011A0F84210B0F80211FA +:10C10000A0F84410B0F80411A0F8461080F8FC40E4 +:10C1100001F047F9A868A0F8884026E090F87B1065 +:10C1200051B100F8E84F44701820FFF786FDA86869 +:10C13000A0F8884038BD14E090F807110029F9D123 +:10C1400090F806110029F5D0B0F84F10ADF80010A6 +:10C150000099D0F80801FFF717FF1820BDE8384014 +:10C160006BE51120FFF769FDA86880F86440E1E7FE +:10C170005B4A0129926819D0002302290FD00329B4 +:10C180001ED010B301282BD0032807D192F86300EA +:10C19000132803D0162801D0182804D1704792F82C +:10C1A000C3000028FAD0D2F8F00017E092F8C300DC +:10C1B0000128F3D0D2F8F4100878401E08707047B8 +:10C1C00092F8C3000328EED17047D2F8F000B2F81D +:10C1D00058108288891A09B20029F5DB037070476C +:10C1E000B2F85800B2F8FA10401A00B20028F6DB94 +:10C1F000D2F8F4000178491E0170704770B504460A +:10C2000090F8630000250C2810D00D282ED1D4F80A +:10C21000F010B4F858008988401C884226D1D4F820 +:10C220003C012F4E017811B3FFDF42E0B4F8580013 +:10C23000B4F8FA10401C884218D1D4F8F400D0F8B1 +:10C240000110A1604079207302212046FDF70BF810 +:10C25000D4F8F400007800B9FFDF0121FF20FFF7D8 +:10C2600087FF84F86350012084F89600D8E5218880 +:10C27000C180D4F8F000D4F83C1140890881D4F88A +:10C28000F000D4F83C1180894881D4F8F000D4F84B +:10C290003C11C0898881D4F83C010571D4F83C1167 +:10C2A00008200870D4F83C1120884880F078EFF717 +:10C2B00029FB01212046FCF7D6FF03212046FFF78A +:10C2C00072FAB068D0F8F0000078022800D0FFDFE2 +:10C2D0000221FF20FFF74CFF84F86350A0E5000027 +:10C2E0006C0100202DE9F041FF4C00260327D4F813 +:10C2F00008C0012590B12069C0788CF8C20005FA09 +:10C3000000F0C0F3C05000B9FFDFA06880F8637090 +:10C31000A0F8826080F88650BDE8F08100239CF888 +:10C32000642019460CF15800FDF79FF868B1607859 +:10C330000028F1D12069C178A06880F8C11000F808 +:10C34000647F868480F82650E6E76570E4E7F0B500 +:10C35000E54C002385B0A068194690F86420583059 +:10C36000FDF783F8012580B1A06890F863002328C9 +:10C370000ED024280CD06846F8F746F968B100982A +:10C3800001A9C0788DF8040008E0657005B0F0BD23 +:10C39000607840F020006070F8E70021A06803ABEF +:10C3A000162290F86300FDF7C3F9002670B1A0686B +:10C3B0009DF80C20162100F8E42F4170192100F897 +:10C3C000801C00F85A5C20F85C6CDFE72069FDF700 +:10C3D000E1FC78B12169087900F00702A06880F8D3 +:10C3E0004F20497901F0070180F8501090F807318B +:10C3F0000BBB03E00020FFF775FFC7E790F806319D +:10C40000CBB900F151035F78974205D11A788A427F +:10C4100002D180F87B500EE000F59771028821F878 +:10C42000022990F84F200A7190F8500048710D7061 +:10C43000E078EFF767FAA068212100F8641F80F820 +:10C4400026508684A2E770B5A74C00231946A06841 +:10C4500090F864205830FDF708F828B32069FDF7FC +:10C460007DFC30B3A5682069FDF774FC2887A568BA +:10C470002069FDF76BFC6887A5682069FDF76CFCF7 +:10C48000A887A5682069FDF763FCE887A0680125F7 +:10C4900090F863101C2910D090F84E10012912D08A +:10C4A00090F8FD1079B90BE0607840F00100607001 +:10C4B000B6E4BDE87040002014E780F84E5002E07A +:10C4C00090F8FC1019B11E2180F8641012E01D21B3 +:10C4D00080F8641000F586710288CA82028F0A8390 +:10C4E000428F4A83828F8A83C08FC8830D75E0781C +:10C4F000EFF708FAA068002120F8881F85708FE404 +:10C5000010B5794C00230921A06890F863205830B9 +:10C51000FCF7ABFF48B16078002805D1A16801F8AD +:10C520007A0F087301F8170C10BD0120607010BD60 +:10C530007CB56D4C00230721A06890F8632058302B +:10C54000FCF793FF38B36078002826D1694620694C +:10C55000FDF71BFC9DF80000002500F02501A068F8 +:10C5600080F894109DF8011001F0410180F89510B9 +:10C5700080F88650D0F8F01000884988814200D0B9 +:10C58000FFDFA068D0F8F0100D70D0F83C110A78E9 +:10C5900022B1FFDF16E0012060707CBD30F8C02BB7 +:10C5A000CA80C16F0D71C16F009A8A60019ACA601A +:10C5B000C26F0721117030F8C01CC06F4180E07855 +:10C5C000EFF7A0F9A06880F863507CBD70B5464CC9 +:10C5D00000231946A06890F864205830FCF745FF06 +:10C5E000012540B9A0680023082190F86320583045 +:10C5F000FCF73BFF10B36078002820D1A06890F8CA +:10C600008E00800712D42069FDF784FBA16881F8B1 +:10C610008F00206930F8052FA1F890204088A1F8FC +:10C62000920011F88E0F40F002000870A0684FF0E1 +:10C63000000690F88E10C90702D010E0657037E44C +:10C6400090F86420002319465830FCF70EFF00B91B +:10C65000FFDFA06800F8645F80F826508684A06839 +:10C6600090F86310012906D180F8636080F8866035 +:10C67000E078EFF747F9A168D1F8F000098842881F +:10C680008A42DCD101780429D9D10670E078EFF72D +:10C6900039F9A06890F863100029D0D180F886603D +:10C6A00006E470B5104DA86890F863101A2902D0FE +:10C6B00002206870DAE569780029FBD1002480F84F +:10C6C0008B4080F88640D0F8F0100088498881427D +:10C6D00000D0FFDFA868D0F8F0100C70D0F83C1143 +:10C6E0000A781AB1FFDF27E06C01002090F88C2057 +:10C6F00072B180F88C400288CA80D0F83C110C716D +:10C70000D0F83C210D2111700188D0F83C010DE0DA +:10C7100030F8C02BCA80C16F0C71C26F0121117239 +:10C72000C26F0C21117030F8C01CC06F418000F046 +:10C73000AAFEE878EFF7E6F8A86880F8634095E588 +:10C7400070B5FC4CA16891F86320162A01D0132A19 +:10C7500002D191F88C2012B10220607086E56278D7 +:10C76000002AFBD181F8C000002581F88B5081F8A8 +:10C770008650D1F8F00009884088884200D0FFDF59 +:10C78000A068D0F8F0000078032800D0FFDF032174 +:10C79000FF20FFF7EDFCA068D0F83C110A780AB141 +:10C7A000FFDF13E030F8C02BCA80C26F017811712F +:10C7B000C16F0D72C26F0C21117030F8C01CC06FB8 +:10C7C000418000F060FEE078EFF79CF8A06880F808 +:10C7D00063504BE570B5D74C09210023A06890F851 +:10C7E00063205830FCF741FE002518B1206900791C +:10C7F00012281ED0A0680A21002390F86320583028 +:10C80000FCF733FE18B120690079142814D0206990 +:10C81000007916281BD1A06890F863101F2916D143 +:10C8200080F8635080F88650BDE870401A20FFF70A +:10C8300023BABDE8704063E6A06880F86350A0F8B2 +:10C84000825080F88650BDE87040FFF736BA0DE59B +:10C8500070B5B84C2079C00770D02069002305213D +:10C86000C578A06890F863205830FCF7FEFD88B1C9 +:10C87000022D0FD00B2D0DD0042D0BD0052D09D07E +:10C88000062D07D00D2D05D0112D03D0607840F076 +:10C89000080060706078002850D1206900250226C9 +:10C8A000C178891E162976D2DFE801F00B75323582 +:10C8B0004522754C7525494375757538524F686B1F +:10C8C0006F72A0680023012190F866205830FCF7B1 +:10C8D000CCFDF8B92069FDF7E7F9A16881F8EE0011 +:10C8E000072081F8660081F88A5081F8865055E06B +:10C8F000FFF770FF52E0A06890F863100F2901D095 +:10C9000066704BE080F86850122180F8631045E0B3 +:10C9100000F0E4FD42E000F0C0FD3FE0FDF776FAF4 +:10C9200003283BD12069FDF775FA00BFFFF708FF28 +:10C9300034E00079FAE7FFF7B4FE2FE036E0FFF7C6 +:10C9400045FE2BE0FFF7F4FD28E0FFF7D9FD25E0D9 +:10C95000A0680023194690F864205830FCF785FD44 +:10C96000012110B16078C8B901E0617016E0A068DB +:10C9700020F8885F817000F8246C0FE0FFF763FDFA +:10C980000CE000F04CFD09E005E0FFF7E0FC05E0FD +:10C9900000F011FD02E00020FFF7A4FCA068F0E920 +:10C9A0002812491C42F10002C0E900125EE42DE9A0 +:10C9B000F041604C2079800741D5607800283ED155 +:10C9C000E06801270026C17820461929856805F10D +:10C9D00058006FD2DFE801F04B3E0D6FC1C1801CE3 +:10C9E00034C1556287C1C1C1C1BE8B9598A2B0C187 +:10C9F000BA0095F8662000230121FCF736FD0028D7 +:10CA00001DD1A068082180F8661080F886608EE04D +:10CA1000002395F864201946FCF727FD10B1A068A3 +:10CA200080F88A60A0680023194690F86320583087 +:10CA3000FCF71BFD002802D0A06880F886606BE43C +:10CA4000002395F863201946FCF70FFD00B9FFDFBE +:10CA5000042008E0002395F863201946FCF705FD43 +:10CA600000B9FFDF0C20A16881F8630054E40023C3 +:10CA700095F863201946FCF7F8FC00B9FFDF0D209C +:10CA8000F1E7002395F863201946FCF7EEFC00B9A6 +:10CA9000FFDFA0680F2180F88B7008E095F8630035 +:10CAA000122800D0FFDFA068112180F88C7080F878 +:10CAB000631031E451E0002395F863201946FCF738 +:10CAC000D4FC20B9A06890F88C0000B9FFDFA06802 +:10CAD000132180F88B70EAE795F86300182800D0DE +:10CAE000FFDF1A20BFE7BDE8F04100F076BD00236C +:10CAF00095F863201946FCF7B8FC00B9FFDF052064 +:10CB0000B1E785F88A6007E4002395F863201946A9 +:10CB1000FCF7ABFC00B9FFDF1C20A4E7002395F86D +:10CB200064201946FCF7A1FC00B9FFDFA06880F87B +:10CB30008A6009E46C010020002395F863201946FF +:10CB4000FCF793FC00B9FFDF1F208CE7BDE8F04144 +:10CB500000F00BBD85F86460D3E7FFDF6FE710B529 +:10CB6000FB4C6078002837D1207940070FD5A068AA +:10CB700090F86300032800D1FFDFA06890F86610EA +:10CB8000072904D101212170002180F86610FFF7E8 +:10CB90000EFF00F0C8FCFFF75BFEA078000716D57B +:10CBA000A0680023052190F863205830FCF75DFC55 +:10CBB00050B108206070A068D0F83C1108780C28AB +:10CBC00000D10020087002E00020FBF7CBFCA06839 +:10CBD000BDE81040FFF712BB10BD2DE9F041DC4C61 +:10CBE00007464FF0000560780843607020798106A1 +:10CBF0002046806802D5A0F87C5004E0B0F87C1094 +:10CC0000491CA0F87C1000F02BFD0126F8B1A0888B +:10CC1000000506D5A06890F8691011B1A0F874500D +:10CC200015E0A068B0F87410491CA0F8741000F06A +:10CC300006FDA068B0F87410B0F87620914206D3D3 +:10CC4000A0F8745080F81261E078EEF75BFE20796E +:10CC500010F0600F08D0A06890F8671021B980F834 +:10CC600067600121FEF79FFD1FB9FFF778FFFFF70F +:10CC7000AFF93846FEF75EFFBDE8F041F7F7D3BCE9 +:10CC8000B3494A788B781A430DD1012809D0087925 +:10CC9000400704D5886890F86600072803D0012073 +:10CCA0007047FEF707BD00207047A949C278896820 +:10CCB000012A06D05AB1182A08D1B1F8EA10FDF7B6 +:10CCC00085B8B1F8FA104172090A81727047D1F83B +:10CCD000F01089884173090A8173704770B59C4CC4 +:10CCE00005460E46A0882843A080A80703D5E8077C +:10CCF00000D0FFDFE660E80700D02661A80719D55D +:10CD0000F078062802D00B2814D10BE0A06890F828 +:10CD1000631018290ED10021E0E92811012100F843 +:10CD2000371C07E0A06890F86310122902D1002197 +:10CD300080F86910280601D50820A070680521D563 +:10CD4000A068B0F8581082881144891DF27889B221 +:10CD5000012A03D02AB1182A07D00FE0A0F8FA1050 +:10CD60000CE0D0F8F000818008E090F8E8201AB9D3 +:10CD700090F8E92002B90021A0F8EA103046BDE899 +:10CD8000704092E75BE43EB505466846F7F713FC52 +:10CD900000B9FFDF2221009801F016FE0321009860 +:10CDA000FCF70DFF0098017821F010010170294671 +:10CDB000FCF734FF664C192D7ED2DFE805F0201811 +:10CDC0000D3ACDCDCE1262CDCECE55CDCDCDCDBC92 +:10CDD000CECE6C87A0CDA900A168009891F8ED1087 +:10CDE00003E0A168009891F8C4100171B5E0A06853 +:10CDF000D0F8F4100098491CFCF749FFADE0A16899 +:10CE0000009851F8F02F927902710A6812894271E4 +:10CE1000120A82710A685289C271120A02720A6881 +:10CE200092894272120A82720968C989FCF708FF66 +:10CE300093E0A068D0F8F0100098091DFCF736FFC9 +:10CE4000A068D0F8F01000980C31FCF739FFA0680A +:10CE5000D0F8F01000981E31FCF738FFA168009858 +:10CE6000B831FCF73FFF78E06269009811780171F2 +:10CE700091884171090A81715188C171090A017251 +:10CE80006BE03449D1E90001CDE9010101A9009825 +:10CE9000FCF742FF61E0A068B0F844100098FCF78E +:10CEA00045FFA068B0F846100098FCF743FFA06863 +:10CEB000B0F84010009800E04EE0FCF73FFFA0689B +:10CEC000B0F842100098FCF73DFF46E0A068B0F8CB +:10CED00040100098FCF732FFA068B0F842100098AC +:10CEE000FCF730FFA068B0F844100098FCF71EFF74 +:10CEF000A068B0F846100098FCF71CFF2DE0A16870 +:10CF0000009891F80821027191F80911417124E00B +:10CF1000A06890F8E800FCF7D5FB01460098FCF704 +:10CF20004DFFA06890F8E900FCF7CCFB01460098A3 +:10CF3000FCF748FF11E0A06890F8E5100098FCF7B6 +:10CF400063FFA06890F8E4100098FCF761FF04E02C +:10CF50006C01002078EF0100FFDFF7F741FB00B91B +:10CF6000FFDF0098FFF7A1FE3EBDFA48806890F809 +:10CF7000E81009B990F8511080F8511090F8E910B4 +:10CF800009B990F8521080F852100020FEF774BED4 +:10CF9000F8B5F04E00250446B060B5807570B570E8 +:10CFA00035700088F7F704FBB0680088F7F729FBB5 +:10CFB000B4F8D000B168401C82B201F15800FCF70F +:10CFC0009AF900B1FFDF94F86400242809D1B4F87D +:10CFD0005810B4F8EA00081A00B2002801DB707893 +:10CFE00020B194F86300242808D015E0FFF7BDFFB6 +:10CFF00084F86450B16881F87B500DE0B4F85810A3 +:10D00000B4F8EA00081A00B2002805DB707818B9F5 +:10D01000FFF7ABFF84F86350A4F8D050FEF763FD30 +:10D0200000281CD1B06890F8C300FF2801D0FFF79A +:10D03000AAFEC9480090C94BC94A21462846FBF7B9 +:10D0400088F9B0680023052190F863205830FCF778 +:10D050000CFA002803D0BDE8F840FBF71CB8F8BD77 +:10D0600010B5FEF740FD20B10020BDE8104001469C +:10D07000B3E5BDE81040FBF7E1B970B50C460646D4 +:10D0800015464FF4A071204601F0C0FC268005B97A +:10D09000FFDF286844F8F00F68686060A868E06403 +:10D0A00084E4F2F77EBE2DE9F0410D4607460621E5 +:10D0B000F2F76EFD040040D0D4F83C110026087849 +:10D0C00058B14A8821888A4207D108280FD00D28F4 +:10D0D0001BD00C2829D0072843D094F81201E0B3C4 +:10D0E0006E700F20287084F812616F80ADE06E7052 +:10D0F00008202870D4F83C014168C5F80210816806 +:10D10000C5F806108089688139E00846F2F772FE9A +:10D110000746F2F71EFB78B96E700D202870D4F820 +:10D120003C014068C5F8020012E00846F2F762FED2 +:10D130000746F2F70EFB08B1002080E46E700C2069 +:10D140002870D4F83C014168C5F802100089E880D5 +:10D15000D4F83C010670384600E014E0F2F7F3FA28 +:10D1600073E06E7007202870D4F83C014168C5F860 +:10D1700002108168C5F80610C068C5F80A00D4F826 +:10D180003C01067061E094F81401A8B16E7014209F +:10D1900028700CE084F81461D4F81601C5F8020078 +:10D1A000D4F81A01C5F80600B4F81E01688194F895 +:10D1B00014010028EED148E094F8200180B16E708F +:10D1C0001A20287084F82061D4F82201C5F80200E2 +:10D1D000D4F82601C5F80600B4F82A01688134E0C5 +:10D1E00094F82C0148B16E701B20287084F82C61D3 +:10D1F000D4F82E01C5F8020027E094F80C0170B1B4 +:10D200006E701820287005E084F80C61D4F80E01C7 +:10D21000C5F8020094F80C010028F5D115E094F847 +:10D220003201002889D06E701520287009E000BFF7 +:10D2300084F83261D4F83401C5F80200B4F838013A +:10D24000E88094F832010028F2D101200EE4414A2E +:10D250005061D170704770B50D4604464FE000BF75 +:10D26000B4F8D000401CA4F8D000B4F87C00401CF6 +:10D27000A4F87C00204600F0F3F9B8B1B4F87400CB +:10D28000401CA4F87400204600F0D9F9B4F87400EA +:10D29000B4F87610884209D30020A4F87400012065 +:10D2A00084F812012B48C078EEF72CFB94F8860026 +:10D2B00020B1B4F88200401CA4F8820094F88A00DF +:10D2C00020B1B4F88800401CA4F8880094F8EC0061 +:10D2D00040B994F866200023012104F15800FCF7BE +:10D2E000C4F820B1B4F88000401CA4F880002046A7 +:10D2F000FEF784FFB4F85800401CA4F858006D1ED7 +:10D30000ADB2ADD23EE5134AC2E90601704770B531 +:10D310000446B0F87C0094F86710D1B1B4F87E10E0 +:10D320000D1A2D1F94F87A0040B194F86320002361 +:10D33000092104F15800FCF798F8B8B1B4F874600A +:10D34000204600F08DF980B1B4F87600801B001FF4 +:10D350000CE007E06C010020DBCB010081CC010078 +:10D36000DDCC0100C0F10205DCE72846A84200DA66 +:10D370000546002D01DC002004E5A8B202E510B549 +:10D38000012808D0022808D0042808D0082806D090 +:10D39000FFDF204610BD0124FBE70224F9E7032448 +:10D3A000F7E710B5FEF7ABFCFEF787FCBDE81040D1 +:10D3B0001520FEF742BC70B5B14CA06890F8630030 +:10D3C0001F2804D0607840F001006070DAE4206922 +:10D3D000FCF7EAFCD8B1206901220179407901F01B +:10D3E000070161F30705294600F0070060F30F21EC +:10D3F000A06880F886200022A0F88220232280F8EE +:10D400006320D0F80801BDE87040FEF7BDBD0120E3 +:10D41000FEF768FFBDE870401E20FEF72DBC70B51A +:10D42000974C00230A21A06890F863205830FCF73D +:10D430001CF818B32069FCF791FCA8B1A568206915 +:10D44000FCF788FC2887A5682069FCF77FFC6887C3 +:10D45000A5682069FCF780FCA887A5682069FCF70F +:10D4600077FCE887FEF74BFCA168002081F8860076 +:10D4700081F86300BDE87040FEF71FBC607840F0A3 +:10D48000010060707EE47E4810B580680088F2F785 +:10D49000B1FCBDE81040F2F747B910B5784CA3686D +:10D4A00093F86300162802D00220607010BD6078E7 +:10D4B0000028FBD1D3F8F000002200F11E010E304D +:10D4C000A833FBF77FFFA0680021C0E926110121E6 +:10D4D00080F86810182180F8631010BD10B5684CF2 +:10D4E000A06890F86310132902D00220607010BD6C +:10D4F00061780029FBD1D0F8F0100088498881427A +:10D5000000D0FFDFA068D0F8F01020692631FCF7CA +:10D51000F6FBA1682069BC31FCF7F9FBA168162075 +:10D5200081F8630010BD10B5554C207900071BD55C +:10D530006078002818D1A068002190F8C300FEF799 +:10D5400017FEA06890F8C300FF2800D1FFDFA06895 +:10D55000FF2180F8C31090F86610082904D1022139 +:10D560002170002180F8661010BD70B5444D242153 +:10D570000024A86890F86420212A05D090F8632040 +:10D58000232A18D0FFDF8BE590F8E82012B990F835 +:10D59000E9202AB180F86410A86880F88A407FE505 +:10D5A00000F8644FC47590F8A2000028F4D0002061 +:10D5B000FEF762FBF0E790F8E82012B990F8E92056 +:10D5C0002AB180F86310A86880F8864068E580F882 +:10D5D00063400020FEF750FBF5E770B5284C0025AE +:10D5E000A068D0F8F01003884A889A4219D10978C7 +:10D5F000042916D190F86320002319465830FBF710 +:10D6000034FF00B9FFDFA06890F88E10890703D4BB +:10D61000012180F8631004E080F88650D0F8F00013 +:10D620000570A0680023194690F864205830FBF775 +:10D630001CFF002802D0A06880F88A5030E5B0F8BE +:10D640007620B0F874108A4201D3511A00E000210C +:10D650008288521D8A4202D3012180F87A107047D5 +:10D6600010B590F8691041B990F8632000230621A5 +:10D670005830FBF7FAFE002800D0012010BD000052 +:10D680006C0100202DE9F0410C4611490D68104A4B +:10D69000104908321160A0F120012A2901D301208C +:10D6A0000CE03E2810D040CC0B4F94E80E0007EB66 +:10D6B0008000241F50F8807C3046B8472060044822 +:10D6C000001D0560BDE8F0812046E3F789FDF5E720 +:10D6D000100502400100000180EF010010B5524822 +:10D6E00000F070FA00B1FFDF4F48401C00F06AFA0A +:10D6F000002800D0FFDF10BD2DE9F14F4B4ED6F8CA +:10D7000000B00127484800F065FADFF81C8128B90D +:10D710005FF0000708F1010000F072FA444C0025A8 +:10D720004FF0030901206060C4F80051C4F80451AF +:10D73000009931602060DFF8FCA018E0DAF8000002 +:10D74000C00614D50E2000F064F8EFF3108010F03E +:10D75000010072B600D00120C4F80493D4F800117F +:10D7600019B9D4F8041101B920BF00B962B6D4F8D0 +:10D77000000118B9D4F804010028DFD0D4F804015E +:10D780000028CFD137B1C6F800B008F1010000F091 +:10D7900021FA11E008F1010000F01CFA0028B9D1CB +:10D7A000C4F80893C4F80451C4F800510E2000F0E6 +:10D7B00030F81D4800F024FA0020BDE8F88F2DE96C +:10D7C000F0438DB00D46064600240DF110090DF111 +:10D7D000200817E004EB4407102255F8271068468C +:10D7E00001F073F805EB870710224846796801F0CD +:10D7F0006CF86846FFF780FF10224146B86801F0D8 +:10D8000064F8641CB442E5DB0DB00020BDE8F08391 +:10D8100072E700F01F02012191404009800000F1F1 +:10D82000E020C0F8801270478C01002004E5004021 +:10D8300000E0004010ED00E0D7490020087070477C +:10D8400070B5D64D01232B60D54B1C68002CFCD045 +:10D85000002407E00E6806601E68002EFCD0001D44 +:10D86000091D641C9442F5D3002028601868002824 +:10D87000FCD070BD70B5C84E0446CA4D3078022841 +:10D8800000D0FFDFAC4200D3FFDF7169C648012939 +:10D8900003D847F23052944201DD03224271491C01 +:10D8A0007161291BC160C0497078F4F7E9FC002858 +:10D8B00000D1FFDF70BD70B5B74C0D46617888426E +:10D8C00000D0FFDFB74E082D4BD2DFE805F04A0449 +:10D8D0001E2D4A4A4A382078022800D0FFDF032054 +:10D8E0002070A078012801D020B108E0A06800F0E5 +:10D8F00043FD04E004F1080007C8FFF7A1FF05207D +:10D900002070BDE87040F4F77FB9F4F771FA014672 +:10D910006068F4F77BFFB04202D2616902290BD341 +:10D920000320F5F726FA12E0F4F762FA0146606880 +:10D93000F4F76CFFB042F3D2BDE870409AE720786C +:10D9400002280AD0052806D0FFDF04202070BDE899 +:10D95000704000F017B9022000E00320F5F709FA43 +:10D96000F3E7FFDF70BD70B50546F4F741FA8A4C66 +:10D9700060602078012800D0FFDF8B49012008700B +:10D980000020087104208D6048718648C86002201C +:10D9900020706078F4F774FC002800D1FFDF70BDC0 +:10D9A00010B57D4C207808B1112010BD7F48F4F7E8 +:10D9B000A6F96070202804D001202070002060614A +:10D9C00010BD032010BD020B0121B0F5003F02D2B3 +:10D9D0009140774816E0B0F5802F04D2203A744881 +:10D9E0009140001D0EE0B0F5C02F04D2403A7048BF +:10D9F0009140103006E0B0F5002F08D2603A6C4834 +:10DA0000914014300068084000D001207047002089 +:10DA100070472DE9F041144600EB84070E46054699 +:10DA20003F1F00F0BCFC4FF080510A69504306EBE9 +:10DA30008402121FB24201D2012200E000221CB176 +:10DA40000969B4EB910F02D90920BDE8F081594969 +:10DA50008D4216D3AF4214D3854205D2874203D2FA +:10DA600045EA0600800701D01020EEE78E4208D379 +:10DA70003AB92846FFF7A7FF18B93846FFF7A3FFC2 +:10DA800008B10F20E1E74C484C490068884205D0B6 +:10DA9000224631462846FFF7D3FE10E0FFF780FF0D +:10DAA0000028D2D13C4800218560C0E90364817020 +:10DAB0004FF4A97104FB01F01830FFF754FF002068 +:10DAC000C3E770B54FF08055044628693949B1FB6A +:10DAD000F0F084420AD300F062FCA04201D810208A +:10DAE00070BD28696043FFF76EFF08B10F2070BD5D +:10DAF000314832490068884204D02869604300F008 +:10DB00003BFC0CE0FFF74CFF0028F0D129692248CC +:10DB100061438160012181702948FFF724FF0020C3 +:10DB200070BD2449090BB1EB401F07D9404201EBFE +:10DB30004011202903D34FF0FF307047002101200E +:10DB40008840401E704770B505460C460020FFF720 +:10DB5000E8FF28420ED10120FFF7E3FF204209D160 +:10DB60000220FFF7DEFF104204D10320FFF7D9FFA8 +:10DB7000184201D00F2070BD21462846BDE87040F4 +:10DB800000F050BE10B5044C6078F4F712F900B9FB +:10DB9000FFDF0020207010BD9001002004E501404F +:10DBA00000E40140105C0C0084110020B7D8010093 +:10DBB0000006004000300200B0000020BEBAFECADD +:10DBC0007C5E01000021017008467047014600207C +:10DBD00008707047EFF3108101F0010172B602780E +:10DBE000012A01D0012200E000220123037001B9C3 +:10DBF00062B60AB1002070474FF400507047E9E761 +:10DC0000EFF3108111F0010F72B64FF000020270B5 +:10DC100000D162B600207047F2E700004C49096865 +:10DC20000160002070474A490860002070470121C8 +:10DC30008A0720B1012804D042F20400704791679E +:10DC400000E0D1670020704742490120086042F29D +:10DC50000600704708B504233E4A1907103230B158 +:10DC6000C1F80433106840F0010010600BE0106848 +:10DC700020F001001060C1F808330020C1F808014D +:10DC8000354800680090002008BD011F0B2909D805 +:10DC9000304910310A6822F01E0242EA4000086052 +:10DCA0000020704742F205007047000100F18040FB +:10DCB000C0F8041900207047000100F18040C0F84E +:10DCC000081900207047000100F18040D0F80009D9 +:10DCD000086000207047012801D9072070471F4ABB +:10DCE00052F8200002680A430260002070470128B1 +:10DCF00001D907207047194A52F8200002688A4368 +:10DD0000026000207047012801D907207047134A9C +:10DD100052F8200000680860002070470200104997 +:10DD20004FF0000003D0012A01D0072070470A609D +:10DD300070474FF080410020C1F808014FF0E0200B +:10DD4000802180F800140121C0F800117047000004 +:10DD500000040040000500400801004028F00100D8 +:10DD6000780500406249634B0A6863499A42096832 +:10DD700001D1C1F310010160002070475C495D4B87 +:10DD80000A685D49091D9A4201D1C0F3100008607C +:10DD9000002070475649574B0A68574908319A4244 +:10DDA00001D1C0F3100008600020704730B5504B1F +:10DDB000504D1C6842F20803AC4202D0142802D233 +:10DDC00003E0112801D3184630BDC3004B48184466 +:10DDD000C0F81015C0F81425002030BD4449454B4B +:10DDE0000A6842F209019A4202D0062802D203E0F0 +:10DDF000042801D308467047404A012142F83010F8 +:10DE0000002070473A493B4B0A6842F209019A42A6 +:10DE100002D0062802D203E0042801D30846704746 +:10DE2000364A012102EBC00041600020704770B506 +:10DE30002F4A304E314C156842F2090304EB800240 +:10DE4000B54204D0062804D2C2F8001807E004281E +:10DE500001D3184670BDC1F31000C2F800080020BD +:10DE600070BD70B5224A234E244C156842F2090356 +:10DE700004EB8002B54204D0062804D2D2F8000890 +:10DE800007E0042801D3184670BDD2F80008C0F39B +:10DE900010000860002070BD174910B508311848FF +:10DEA00008601120154A002102EBC003C3F81015C9 +:10DEB000C3F81415401C1428F6D3002006E00428EB +:10DEC00004D302EB8003C3F8001807E002EB8003E1 +:10DED000D3F80048C4F31004C3F80048401C0628D7 +:10DEE000EDD310BD044906480831086070470000B2 +:10DEF000B0000020BEBAFECA00F5014000F00140AB +:10DF00000000FEFF7D4B1B6803B19847BFF34F8FA6 +:10DF10007B4801687B4A01F4E06111430160BFF373 +:10DF20004F8FFEE710B5EFF3108010F0010F72B6BF +:10DF300001D0012400E0002400F0D6F850B1E3F74E +:10DF4000E9F9F3F722FDF4F7B7FEEDF72CFC6E4983 +:10DF50000020086004B962B6002010BD70B50C4600 +:10DF60000646EFF3108010F0010F72B601D00125C4 +:10DF700000E0002500F0B8F818B105B962B6082035 +:10DF800070BDE3F743F9E3F7C9F9024600204309FE +:10DF90009B0003F1E02300F01F01D3F80031CB40D8 +:10DFA000D9071BD0202803D222FA00F1C90722D1B9 +:10DFB00041B2002906DA01F00F0101F1E02191F8E8 +:10DFC000141D03E001F1E02191F80014490908292A +:10DFD00011D281B101290ED004290CD0401C642833 +:10DFE000D5D3EDF7B7FB4849484808602046F5F718 +:10DFF000A3FA60B904E005B962B641F2010070BD50 +:10E000003E4804602EB13046F5F7E3FA18B110240B +:10E0100029E03F4E16E03078022802D94FF48054B0 +:10E0200021E007240028707801D0E0B908E0D0B1E1 +:10E03000202818D8B078212815D8012813D001E05D +:10E04000B07880B93349802081F8140DE3F766F980 +:10E050003146F4F717FEF3F757FC00F0D3F93046DA +:10E06000E3F72AF9044605B962B61CB1FFF75AFF77 +:10E07000204670BD002070BD10B5044600F034F895 +:10E0800000B101202070002010BD2349086000204D +:10E09000704770B50C4621490D682049204E083163 +:10E0A0000E60102807D011280CD012280FD013288A +:10E0B00011D0012013E0D4E90001FFF74FFF3546EE +:10E0C00020600DE0FFF72EFF0025206008E02068AB +:10E0D000FFF7D2FF03E010492068086000202060AD +:10E0E0000E48001D056070BD074808490068884259 +:10E0F00001D101207047002070470000A8010020D6 +:10E100000CED00E00400FA05B0000020BEBAFECA23 +:10E1100030F001000BE000E0040000201005024098 +:10E120000100000100B5744910F1080F19D00CDC92 +:10E1300010F1280F1DD010F1140F18D010F1100F8E +:10E1400013D010F10C0F08D10DE010F1040F06D020 +:10E1500080B103280ED004280CD0FFDF00BDFC20C6 +:10E1600008E0F82006E0F42004E0F02002E0EC20D3 +:10E1700000E0D820086000BD5F4900B5091D0128F6 +:10E1800003D0022803D0FFDF00BD032000E00420FD +:10E19000086000BD584800B5001D016801F00F017E +:10E1A000032905D0006800F00F00042802D0FFDF2B +:10E1B000012000BD022000BD504930B1012803D12B +:10E1C000086840F00100086070470868FBE72DE927 +:10E1D000F04105461F464FF4C8604FF47A76012996 +:10E1E00012D0022A17D046490C181846F6F746F9FD +:10E1F00004443846F6F774F9204400F27120B0FB6D +:10E20000F6F0281ABDE8F081022A00D1304649F61E +:10E2100008514418E9E73B493046E5E770B5154633 +:10E220000646012914D0022B15D0354CFA3410467D +:10E23000F6F731F94FF47A71012D0FD04A10A21A76 +:10E24000104400F28920B0FBF1F0301A801E70BD3E +:10E2500049F6CA64EBE72B4C643CE7E70A46EEE775 +:10E260002DE9F041054614464FF4C8604FF47A7624 +:10E27000012911D0022B16D021490F181046F6F7AC +:10E280000AF9012C12D04FF4FA71791A0844643853 +:10E29000B0FBF6F0281AB5E7022B00D1304649F65C +:10E2A00008514718EAE717493046E6E73146ECE7F8 +:10E2B0002DE9F04105460C4616461046F6F7DEF805 +:10E2C00005EB4501C1EBC51100EBC1004FF47A75B8 +:10E2D000012C0FD0691047182046F6F7DCF8381AE1 +:10E2E00000F60F60B0FBF5F43046F6F7BDF82044B9 +:10E2F000401D87E72946EEE70C1500405016004008 +:10E30000A2240200683602002DE9FE430C46804636 +:10E31000FBF76AFC074698F80160204601A96A46A7 +:10E32000F1F7F3F905000DD0012F02D00320BDE86D +:10E33000FE83204602AA0199F1F709F90298B0F884 +:10E3400003000AE0022F14D1042E12D3B8F8030000 +:10E35000BDF80020011D914204D8001D80B2A9190A +:10E36000814202D14FF00000E1E702D24FF00100FC +:10E37000DDE74FF00200DAE70B4A022111600B499A +:10E380000B68002BFCD0084B1B1D18600868002888 +:10E39000FCD00020106008680028FCD070474FF0C7 +:10E3A000805040697047000004E5014000E40140EE +:10E3B00002000B464FF00000014620D0012A04D095 +:10E3C000022A04D0032A0DD103E0012002E002203A +:10E3D00015E00320072B05D2DFE803F00406080A46 +:10E3E0000C0E100007207047012108E0022106E012 +:10E3F000032104E0042102E0052100E00621F3F7F7 +:10E400009ABC0000F648052181700021017041701E +:10E410007047F4490A78012A05D0CA681044C860D8 +:10E420004038F4F7C0B98A6810448860F8E70028DB +:10E4300019D00378EC49ED4A13B1012B0ED011E04D +:10E440000379012B00D06BB943790BB1012B09D1B2 +:10E450008368643B8B4205D2C0680EE00379012BD0 +:10E4600002D00BB10020704743790BB1012BF9D1D9 +:10E47000C368643B8B42F5D280689042F2D8012099 +:10E480007047D84910B501220A700279A2B1002262 +:10E490000A71427992B104224A718268D04C523298 +:10E4A0008A60C0681434C8606060F3F7A1FCCC498E +:10E4B00020600220887010BD0322E9E70322EBE709 +:10E4C00070B5044609B1012000E00320C54D0021CC +:10E4D0002970217901B100202871607968B1042088 +:10E4E000BF4E6871A168F068F3F78BF9A860E06827 +:10E4F0005230E8600320B07070BD0320F0E72DE9D2 +:10E50000F04105460226F4F77AF8006800B1FFDF13 +:10E51000B34C01273DB12878B0B1012805D00228BD +:10E5200010D0032813D027710CE06868C82807D3DF +:10E53000F4F79FF920B16868FFF76BFF012603E04D +:10E54000002601E000F056F93046BDE8F081207861 +:10E550000028F7D16868FFF76AFF0028E3D06868F1 +:10E56000017879B1A078042800D0FFDF0121686824 +:10E57000FFF7A6FF9B49E078F3F782FE0028E1D180 +:10E58000FFDFDFE7FFF77DFF6770DBE72DE9F0478F +:10E59000934C8846E178884200D0FFDFDFF8409254 +:10E5A000002501278F4E09F11409B8F1080F75D223 +:10E5B000DFE808F0040C28527A808D95A0780328B3 +:10E5C00002D0022800D0FFDFBDE8F087A078032842 +:10E5D00002D0022800D0FFDF0420A070257120782F +:10E5E000002878D1FFF715FF3078012806D0B068F1 +:10E5F000E06000F02BF92061002060E0E078F3F7A4 +:10E600003CFDF5E7A078032802D0022800D0FFDF08 +:10E61000207800286DD1A078032816D0F3F7E8FB06 +:10E6200001464F46D9F80000F4F7F0F800280EDB59 +:10E63000796881420BDB081AF0606A49E078F3F7E9 +:10E640001FFE0028C0D1FFDFBEE7042028E0042021 +:10E65000F4F78FFBA570B7E7A078032802D0022853 +:10E6600000D0FFDF207888BBA078032817D0F3F70D +:10E67000BFFB01464F46D9F80000F4F7C7F8002861 +:10E68000E5DB79688142E2DB081AF0605549E07801 +:10E69000F3F7F6FD002897D1FFDF95E740E005206E +:10E6A000F4F767FBA7708FE7A078042800D0FFDF9E +:10E6B000022004E0A078042800D0FFDF0120A16838 +:10E6C0008847FFF71CFF054630E004E011E0A07822 +:10E6D000042800D0FFDFBDE8F04700F08BB8A07839 +:10E6E000042804D0617809B1022800D0FFDF207827 +:10E6F00018B1BDE8F04700F086B8207920B10620B7 +:10E70000F4F737FB2571CDE7607838B13549E0780B +:10E71000F3F7B6FD00B9FFDF657055E70720BFE7E7 +:10E72000FFDF51E73DB1012D03D0FFDF022DF9D10D +:10E730004AE70420C3E70320C1E770B5050005D010 +:10E74000274CA078052803D0112070BD102070BD83 +:10E750002748F3F7D4FAE070202803D00020A56002 +:10E76000A07070BD032070BD1D4810B5017809B1BF +:10E77000112010BD8178052906D0012906D029B1C4 +:10E7800001210170002010BD0F2010BD00F03BF8EA +:10E79000F8E770B5124C0546A07808B1012809D1F8 +:10E7A00055B12846FFF743FE40B1287840B1A07824 +:10E7B000012809D00F2070BD102070BD072070BD4A +:10E7C0002846FFF75EFE03E000212846FFF778FEAB +:10E7D0000449E078F3F754FD00B9FFDF002070BD75 +:10E7E000AC010020941100203D860100FF1FA1070D +:10E7F0008DE501000A4810B5006900F01FF8BDE87A +:10E800001040F3F701BA064810B5C078F3F7D1FA13 +:10E8100000B9FFDF0820F4F7ACFABDE81040F1E5DD +:10E82000AC01002010B50E4C2060201D01600C488A +:10E8300010300260001D0360002010BD09490A6805 +:10E8400048F202139A4302430A607047054A11686E +:10E8500048F2021301EA0300994311607047000077 +:10E8600000060040C8060240704770477047704776 +:10E87000704740EA010310B59B070FD1042A0DD35E +:10E8800010C808C9121F9C42F8D020BA19BA884291 +:10E8900001D9012010BD4FF0FF3010BD1AB1D307D0 +:10E8A00003D0521C07E0002010BD10F8013B11F806 +:10E8B000014B1B1B07D110F8013B11F8014B1B1B2F +:10E8C00001D1921EF1D1184610BD032A40F23080CA +:10E8D00010F0030C00F0158011F8013BBCF1020FA1 +:10E8E000624498BF11F801CB00F8013B38BF11F822 +:10E8F000013BA2F1040298BF00F801CB38BF00F839 +:10E90000013B11F0030300F02580083AC0F00880B5 +:10E9100051F8043B083A51F804CBA0E80810F5E799 +:10E92000121D5CBF51F8043B40F8043BAFF300807C +:10E93000D20724BF11F8013B11F801CB48BF11F8F1 +:10E94000012B24BF00F8013B00F801CB48BF00F8C1 +:10E95000012B704710B5203AC0F00B80B1E8185079 +:10E96000203AA0E81850B1E81850A0E81850BFF4B9 +:10E97000F5AF5FEA027C24BFB1E81850A0E8185058 +:10E9800044BF18C918C0BDE810405FEA827C24BFAC +:10E9900051F8043B40F8043B08BF7047D20728BF3A +:10E9A00031F8023B48BF11F8012B28BF20F8023B89 +:10E9B00048BF00F8012B704702F0FF0343EA03222F +:10E9C00042EA024200F002B84FF000020429C0F00F +:10E9D000128010F0030C00F01B80CCF1040CBCF191 +:10E9E000020F18BF00F8012BA8BF20F8022BA1EBE3 +:10E9F0000C0100F00DB85FEAC17C24BF00F8012BC8 +:10EA000000F8012B48BF00F8012B70474FF00002BF +:10EA100000B5134694469646203922BFA0E80C5014 +:10EA2000A0E80C50B1F12001BFF4F7AF090728BFEF +:10EA3000A0E80C5048BF0CC05DF804EB890028BF6B +:10EA400040F8042B08BF704748BF20F8022B11F094 +:10EA5000804F18BF00F8012B704770477047704710 +:10EA600070470000FEDF04207146084219D1069964 +:10EA7000124A914215DC069902394878DF2810D1F4 +:10EA80000878FE2807D0FF280BD14FF001004FF087 +:10EA900000020B4B184741F201000099019A084B04 +:10EAA0001847084B002B02D01B68DB6818474FF053 +:10EAB000FF3071464FF00002014B18470030020052 +:10EAC00005DF010004000020184819497047FFF7CE +:10EAD000FBFFE2F773FB00BD4FF480501549096856 +:10EAE000884203D1144A13605B68184700BD0000D8 +:10EAF00020BFFDE74FF480500E490968884210D1CD +:10EB00000E4B18684FF0FF318842F1D080F308882F +:10EB10004FF02021884204DD0948026803210A439E +:10EB200002600848804708488047FFDFA81100209E +:10EB3000A811002000000020040000200030020086 +:10EB40001409004011360100D9EA01000420714681 +:10EB5000084202D0EFF3098101E0EFF308818869F0 +:10EB600002380078102813DB20280FDB2B280BDB62 +:10EB70000A4A12680A4B9A4203D1602804DB094A08 +:10EB80001047022008607047074A1047074A10479D +:10EB9000074A12682C32126810470000B0000020AB +:10EBA000BEBAFECA2113000085D6010093E0010021 +:10EBB000040000200D4B0E4908470E4B0C49084736 +:10EBC0000D4B0B4908470D4B094908470C4B0849A9 +:10EBD00008470C4B064908470B4B054908470B4BA8 +:10EBE000034908470A4B024908470000A1B4000046 +:10EBF000B12F0000792F000015B10000A3B0000074 +:10EC0000ABB600003D1300003981000039B90000A7 +:10EC1000C9110000518B0000138D0000718E00009F +:10EC2000958E0000CF8E0000038F0000358F00000E +:10EC30006D8F0000BF8F0000298C0000A71200001C +:10EC4000A7120000DB2200001F2300003F2300006A +:10EC5000C5230000E9240000A7250000D7250000F7 +:10EC600079260000A11F00009528000089290000D6 +:10EC7000A92900009F320000C3320000F3310000D8 +:10EC800047320000F532000089330000574500008C +:10EC900007470000D74A0000ED4B0000774C00000A +:10ECA000F54C0000594D00007D4E00004B4F000018 +:10ECB000B54F0000B7290000BD290000C72900009A +:10ECC000711F00007F2A0000451F0000AD2B0000CF +:10ECD000ED2B00004F2C0000A7120000A71200002F +:10ECE000A71200006D5D0000F35D00000F5E0000E4 +:10ECF0002B5E0000B95F0000555E00005F5E000003 +:10ED0000A15E0000C35E00009F5F0000E15F0000A5 +:10ED1000A712000053780000737800007578000097 +:10ED2000B9780000E7780000D5790000637A000028 +:10ED3000777A0000C57A0000B57B00005B7D00009B +:10ED4000857E0000616800009D7E0000A712000023 +:10ED5000A7120000F1A900005BAB0000AFAB000000 +:10ED60001BAC0000CBAC0000100110013A02000007 +:10ED70001A02000405060000938600008186000048 +:10ED8000FFFFFFFF0000FFFFE5A10000E11B000007 +:10ED90000D590000AB680000118400000000000065 +:10EDA000000002000000000000020000000000005F +:10EDB0000001000000000000FF750000DF7500008A +:10EDC0004D760000EF5C0000B15C0000D15C0000FB +:10EDD0004F9D00007B9D0000839F0000513E00007E +:10EDE0006D760000000000009D7600003D5D000093 +:10EDF000000000000000000000000000659E000010 +:10EE000000000000E53E0000D33B0000D33B0000C3 +:10EE1000B722000091A000002F6B00001F580000D7 +:10EE20007BD00100A1730100113C0000113C0000E7 +:10EE3000D9220000F3A00000B36B0000915800003D +:10EE4000A3D00100B57301007001700140003800CB +:10EE50005C0024004001F00100000300656C746256 +:10EE600000000000000000000000000000000000A2 +:10EE7000870000000000000000000000000000000B +:10EE8000BE83605ADB0B376038A5F5AA9183886C86 +:10EE900001000000590301002112010000000001DF +:10EEA0000206030405000000070000000000000047 +:10EEB000060000000A00000032000000730000009D +:10EEC000B4000000B95F010091B80100874F010054 +:10EED000A78401009BAB0100A78401000950010039 +:10EEE0002D87010069A601002D870100FD4E01005C +:10EEF000CF86010087AA0100CF8601004753010099 +:10EF000067880100DDAB010067880100555555D6C3 +:10EF1000BE898E000000A606340DC21300004A030D +:10EF2000EE059208000096041409920DF401FA000F +:10EF3000960064004B0032001E0014000A00050019 +:10EF4000020001000041000000000000AAAED7ABA3 +:10EF5000154120100C0802170D01010209090101D9 +:10EF6000060209181803010109090303055555553F +:10EF7000252627D6BE898E0025410000000000000E +:10EF800065DD01007DDD010095DD0100ADDD0100E5 +:10EF9000DDDD010005DE01002FDE010063DE010082 +:10EFA000C3DA010013DA010047DB0100C5DB010011 +:10EFB000D5DB010001DC0100BB2E0100C32E0100E6 +:10EFC000D52E01002FDC010049DC01001DDC010011 +:10EFD00027DC010055DC01008BDC0100ABDC01000B +:10EFE000B9DC0100C7DC0100D7DC0100EFDC010067 +:10EFF00007DD01001DDD0100000000009FB20000E0 +:10F00000F5B200000BB30000B1E30100F9D6010036 +:10F01000BFD701003BE7010069E7010093E701006A +:10F02000152D0100E53001001C05004020050040C1 +:10F030000010020054F0010008000020C001000090 +:10F040004411000084F00100C8010020E00F00001E +:10F05000A011000001181328120250201A010222E8 +:10F060007C2720FB349B5F801280021A10135F09FB +:10F070001B201C041AA20401980912BF237F01025D +:04F080006B290000F8 +:00000001FF diff --git a/hex/sd_api_v6/.gitignore b/hex/sd_api_v6/.gitignore new file mode 100644 index 000000000..e5cf53dae --- /dev/null +++ b/hex/sd_api_v6/.gitignore @@ -0,0 +1,5 @@ +# Ignore everything in this directory +# Remove this when we are release connecitivty firmware +* +# Except this file +!.gitignore \ No newline at end of file diff --git a/hex/sdk150_add_sd_v3v5_support.patch b/hex/sdk150_add_sd_v3v5_support.patch deleted file mode 100644 index 2cae3f1ab..000000000 --- a/hex/sdk150_add_sd_v3v5_support.patch +++ /dev/null @@ -1,111024 +0,0 @@ -diff -u -r -N a/components/serialization/application/codecs/common/conn_systemreset.c b/components/serialization/application/codecs/common/conn_systemreset.c ---- a/components/serialization/application/codecs/common/conn_systemreset.c 2018-03-22 15:25:08.000000000 +0100 -+++ b/components/serialization/application/codecs/common/conn_systemreset.c 2018-07-18 17:42:28.000000000 +0200 -@@ -56,8 +56,9 @@ - } - - SER_ASSERT_LENGTH_LEQ(SER_PKT_TYPE_SIZE, tx_buf_len); -- p_tx_buf[SER_PKT_TYPE_POS] = SER_PKT_TYPE_RESET_CMD; -- tx_buf_len = SER_PKT_TYPE_SIZE; -+ p_tx_buf[SER_PKT_TYPE_POS] = SER_PKT_TYPE_GENERIC_CMD; -+ p_tx_buf[SER_PKT_TYPE_POS+1] = SER_GENERIC_CMD_RESET; -+ tx_buf_len = SER_PKT_TYPE_SIZE + 1; - - err_code = ser_sd_transport_cmd_write(p_tx_buf, tx_buf_len, NULL); - if (err_code != NRF_SUCCESS) -diff -u -r -N a/components/serialization/common/ble_serialization.h b/components/serialization/common/ble_serialization.h ---- a/components/serialization/common/ble_serialization.h 2018-03-22 15:25:08.000000000 +0100 -+++ b/components/serialization/common/ble_serialization.h 2018-07-18 17:42:28.000000000 +0200 -@@ -58,7 +58,7 @@ - SER_PKT_TYPE_EVT, /**< Event packet type. */ - SER_PKT_TYPE_DTM_CMD, /**< DTM Command packet type. */ - SER_PKT_TYPE_DTM_RESP, /**< DTM Response packet type. */ -- SER_PKT_TYPE_RESET_CMD, /**< System Reset Command packet type. */ -+ SER_PKT_TYPE_GENERIC_CMD, /**< GENERIC Command packet type. */ - #if defined(ANT_STACK_SUPPORT_REQD) - SER_PKT_TYPE_ANT_CMD, /**< ANT Command packet type. */ - SER_PKT_TYPE_ANT_RESP, /**< ANT Response packet type. */ -@@ -67,6 +67,12 @@ - SER_PKT_TYPE_MAX /**< Upper bound. */ - } ser_pkt_type_t; - -+typedef enum -+{ -+ SER_GENERIC_CMD_RESET, -+ SER_GENERIC_CMD_SOFT_RESET -+} ser_generic_cmd_t; -+ - #define LOW16(a) ((uint16_t)((a & 0x0000FFFF) >> 0)) - #define HIGH16(a) ((uint16_t)((a & 0xFFFF0000) >> 16)) - -diff -u -r -N a/components/serialization/common/ser_config.h b/components/serialization/common/ser_config.h ---- a/components/serialization/common/ser_config.h 2018-03-22 15:25:08.000000000 +0100 -+++ b/components/serialization/common/ser_config.h 2018-07-18 17:42:28.000000000 +0200 -@@ -99,7 +99,7 @@ - - /** UART transmission parameters */ - #define SER_PHY_UART_FLOW_CTRL NRF_UART_HWFC_ENABLED --#define SER_PHY_UART_PARITY NRF_UART_PARITY_INCLUDED -+#define SER_PHY_UART_PARITY NRF_UART_PARITY_EXCLUDED - #define SER_PHY_UART_BAUDRATE_VAL 1000000 - - #define SER_PHY_UART_BAUDRATE CONCAT_2(NRF_UART_BAUDRATE_,SER_PHY_UART_BAUDRATE_VAL) -@@ -113,7 +113,8 @@ - #ifndef SER_MAX_ADV_DATA - #define SER_MAX_ADV_DATA 256 - #endif -- -+ -+#define HCI_LINK_CONTROL - #ifdef __cplusplus - } - #endif -diff -u -r -N a/components/serialization/common/transport/ser_hal_transport.c b/components/serialization/common/transport/ser_hal_transport.c ---- a/components/serialization/common/transport/ser_hal_transport.c 2018-03-22 15:25:08.000000000 +0100 -+++ b/components/serialization/common/transport/ser_hal_transport.c 2018-07-18 17:42:28.000000000 +0200 -@@ -297,6 +297,12 @@ - } - } - -+void ser_hal_transport_reset(void) -+{ -+ m_rx_state = HAL_TRANSP_RX_STATE_IDLE; -+ m_tx_state = HAL_TRANSP_TX_STATE_IDLE; -+} -+ - uint32_t ser_hal_transport_open(ser_hal_transport_events_handler_t events_handler) - { - uint32_t err_code = NRF_SUCCESS; -diff -u -r -N a/components/serialization/common/transport/ser_hal_transport.h b/components/serialization/common/transport/ser_hal_transport.h ---- a/components/serialization/common/transport/ser_hal_transport.h 2018-03-22 15:25:08.000000000 +0100 -+++ b/components/serialization/common/transport/ser_hal_transport.h 2018-07-18 17:42:28.000000000 +0200 -@@ -162,6 +162,8 @@ - */ - uint32_t ser_hal_transport_open(ser_hal_transport_events_handler_t events_handler); - -+/**@brief Function for reseting ser_hal_transport. */ -+void ser_hal_transport_reset(void); - - /**@brief Function for closing a transport channel. - * -diff -u -r -N a/components/serialization/common/transport/ser_phy/config/ser_phy_config_conn.h b/components/serialization/common/transport/ser_phy/config/ser_phy_config_conn.h ---- a/components/serialization/common/transport/ser_phy/config/ser_phy_config_conn.h 2018-03-22 15:25:08.000000000 +0100 -+++ b/components/serialization/common/transport/ser_phy/config/ser_phy_config_conn.h 2018-07-18 17:42:28.000000000 +0200 -@@ -69,10 +69,10 @@ - /* UART configuration */ - #define UART_IRQ_PRIORITY APP_IRQ_PRIORITY_LOWEST - --#define SER_PHY_UART_RX SER_CON_RX_PIN --#define SER_PHY_UART_TX SER_CON_TX_PIN --#define SER_PHY_UART_CTS SER_CON_CTS_PIN --#define SER_PHY_UART_RTS SER_CON_RTS_PIN -+#define SER_PHY_UART_RX RX_PIN_NUMBER//SER_CON_RX_PIN -+#define SER_PHY_UART_TX TX_PIN_NUMBER//SER_CON_TX_PIN -+#define SER_PHY_UART_CTS CTS_PIN_NUMBER//SER_CON_CTS_PIN -+#define SER_PHY_UART_RTS RTS_PIN_NUMBER//SER_CON_RTS_PIN - - - #ifdef __cplusplus -diff -u -r -N a/components/serialization/common/transport/ser_phy/ser_phy_hci.c b/components/serialization/common/transport/ser_phy/ser_phy_hci.c ---- a/components/serialization/common/transport/ser_phy/ser_phy_hci.c 2018-03-22 15:25:08.000000000 +0100 -+++ b/components/serialization/common/transport/ser_phy/ser_phy_hci.c 2018-07-18 17:42:28.000000000 +0200 -@@ -51,6 +51,14 @@ - #include "nrf_soc.h" - #include "ser_config.h" - #include "ser_phy_debug_comm.h" -+#include "ser_conn_handlers.h" -+#include "nrf_sdh.h" -+#include "ser_hal_transport.h" -+#include "app_scheduler.h" -+#include "ser_conn_reset_cmd_decoder.h" -+#ifdef BLE_STACK_SUPPORT_REQD -+#include "nrf_sdm.h" -+#endif - #define NRF_LOG_MODULE_NAME sphy_hci - #include "nrf_log.h" - NRF_LOG_MODULE_REGISTER(); -@@ -191,6 +199,7 @@ - #ifdef HCI_LINK_CONTROL - _static uint8_t m_tx_link_control_header[PKT_HDR_SIZE]; - _static uint8_t m_tx_link_control_payload[HCI_PKT_CONFIG_SIZE - PKT_HDR_SIZE]; -+static bool m_cfg_sent; - #endif /* HCI_LINK_CONTROL */ - - _static uint32_t m_packet_ack_number; // Sequence number counter of the packet expected to be received -@@ -739,7 +748,6 @@ - ser_phy_event_callback(event); - } - -- - static void hci_slip_event_handler(ser_phy_hci_slip_evt_t * p_event) - { - hci_evt_t event; -@@ -798,7 +806,8 @@ - - if (packet_type == PKT_TYPE_RESET) - { -- NVIC_SystemReset(); -+ NRF_LOG_DEBUG("PKT_TYPE_RESET"); -+ (void)soft_reset_trigger(); - } - else if (packet_type == PKT_TYPE_ACK ) - { -@@ -1422,14 +1431,23 @@ - { - m_hci_mode = HCI_MODE_INITIALIZED; - m_hci_link_control_next_pkt = HCI_PKT_CONFIG; -+ m_cfg_sent = false; - } - break; - case HCI_PKT_CONFIG: - if (m_hci_mode != HCI_MODE_UNINITIALIZED) - { -- m_hci_link_control_next_pkt = HCI_PKT_CONFIG_RSP; -+ if (m_cfg_sent) -+ { -+ m_hci_link_control_next_pkt = HCI_PKT_CONFIG_RSP; -+ m_hci_other_side_active = true; -+ } -+ else -+ { -+ m_hci_link_control_next_pkt = HCI_PKT_CONFIG; -+ } - hci_link_control_pkt_send(); -- m_hci_other_side_active = true; -+ m_cfg_sent = true; - } - break; - case HCI_PKT_CONFIG_RSP: -@@ -1453,6 +1471,7 @@ - break; - - case HCI_TIMER_EVT: -+ NRF_LOG_DEBUG("Timer evt"); - /* Send one of the Link Control packets if in Unintialized or Initialized state */ - CRITICAL_REGION_ENTER(); - switch (m_hci_mode) -@@ -1466,6 +1485,7 @@ - case HCI_MODE_INITIALIZED: - m_hci_link_control_next_pkt = HCI_PKT_CONFIG; - hci_link_control_pkt_send(); -+ m_cfg_sent = true; - hci_timeout_setup(HCI_LINK_CONTROL_TIMEOUT); - break; - case HCI_MODE_ACTIVE: -@@ -1573,14 +1593,10 @@ - return status; - } - -- --static uint32_t hci_timer_init(void) -+static uint32_t hci_timer_reset(void) - { -- uint32_t err_code = NRF_SUCCESS; -- - #ifdef HCI_APP_TIMER -- -- err_code = app_timer_create(&m_app_timer_id, APP_TIMER_MODE_REPEATED, hci_timeout_handler); -+ err_code = app_timer_stop(m_app_timer_id); - - if (err_code != NRF_SUCCESS) - { -@@ -1593,7 +1609,6 @@ - { - return NRF_ERROR_INTERNAL; - } -- - #else - - // Configure TIMER for compare[1] event -@@ -1603,6 +1618,7 @@ - - // Clear TIMER - HCI_TIMER->TASKS_CLEAR = 1; -+ HCI_TIMER->TASKS_STOP = 1; - - // Enable interrupt - HCI_TIMER->INTENCLR = 0xFFFFFFFF; -@@ -1613,11 +1629,51 @@ - NVIC_EnableIRQ(HCI_TIMER_IRQn); - - #endif -+ return NRF_SUCCESS; -+} - -- return err_code; -+static uint32_t hci_timer_init(void) -+{ -+ -+#ifdef HCI_APP_TIMER -+ uint32_t err_code = NRF_SUCCESS; - -+ err_code = app_timer_create(&m_app_timer_id, APP_TIMER_MODE_REPEATED, hci_timeout_handler); -+ -+ if (err_code != NRF_SUCCESS) -+ { -+ return NRF_ERROR_INTERNAL; -+ } -+#endif -+ return hci_timer_reset(); - } - -+void ser_phy_hci_reset(void) -+{ -+ m_p_tx_payload = NULL; -+ m_p_rx_buffer = NULL; -+ -+ nrf_queue_reset(&m_tx_evt_queue); -+ nrf_queue_reset(&m_rx_evt_queue); -+ -+ hci_timer_reset(); -+ m_packet_ack_number = INITIAL_ACK_NUMBER_EXPECTED; -+ m_packet_seq_number = INITIAL_SEQ_NUMBER; -+ -+#ifndef HCI_LINK_CONTROL -+ m_hci_tx_fsm_state = HCI_TX_STATE_SEND; -+ m_hci_rx_fsm_state = HCI_RX_STATE_RECEIVE; -+#else -+ m_hci_tx_fsm_state = HCI_TX_STATE_DISABLE; -+ m_hci_rx_fsm_state = HCI_RX_STATE_DISABLE; -+ hci_timeout_setup(HCI_LINK_CONTROL_TIMEOUT);// Trigger sending SYNC messages -+ m_hci_link_control_next_pkt = HCI_PKT_SYNC; -+ m_hci_mode = HCI_MODE_UNINITIALIZED; -+ m_hci_other_side_active = false; -+ m_rx_fsm_idle_flag = true; -+ m_hci_global_enable_flag = true; -+#endif /*HCI_LINK_CONTROL*/ -+} - - /* ser_phy API function */ - uint32_t ser_phy_open(ser_phy_events_handler_t events_handler) -@@ -1634,6 +1690,8 @@ - return NRF_ERROR_NULL; - } - -+ m_ser_phy_callback = events_handler; -+ - err_code = hci_timer_init(); - - if (err_code != NRF_SUCCESS) -@@ -1641,9 +1699,6 @@ - return NRF_ERROR_INTERNAL; - } - -- nrf_queue_reset(&m_tx_evt_queue); -- nrf_queue_reset(&m_rx_evt_queue); -- - err_code = ser_phy_hci_slip_open(hci_slip_event_handler); - - if (err_code != NRF_SUCCESS) -@@ -1653,18 +1708,7 @@ - - if (err_code == NRF_SUCCESS) - { -- m_packet_ack_number = INITIAL_ACK_NUMBER_EXPECTED; -- m_packet_seq_number = INITIAL_SEQ_NUMBER; -- m_ser_phy_callback = events_handler; -- --#ifndef HCI_LINK_CONTROL -- m_hci_tx_fsm_state = HCI_TX_STATE_SEND; -- m_hci_rx_fsm_state = HCI_RX_STATE_RECEIVE; --#else -- hci_timeout_setup(HCI_LINK_CONTROL_TIMEOUT);// Trigger sending SYNC messages -- m_hci_mode = HCI_MODE_UNINITIALIZED; -- m_hci_other_side_active = false; --#endif /*HCI_LINK_CONTROL*/ -+ ser_phy_hci_reset(); - } - return err_code; - } -diff -u -r -N a/components/serialization/common/transport/ser_phy/ser_phy_hci.h b/components/serialization/common/transport/ser_phy/ser_phy_hci.h ---- a/components/serialization/common/transport/ser_phy/ser_phy_hci.h 2018-03-22 15:25:08.000000000 +0100 -+++ b/components/serialization/common/transport/ser_phy/ser_phy_hci.h 2018-07-18 17:42:28.000000000 +0200 -@@ -129,6 +129,8 @@ - */ - uint32_t ser_phy_hci_slip_open(ser_phy_hci_slip_event_handler_t events_handler); - -+/**@brief Function for resetting the module.*/ -+void ser_phy_hci_slip_reset(void); - - /**@brief A function for transmitting a HCI SLIP packet. - * -diff -u -r -N a/components/serialization/common/transport/ser_phy/ser_phy_hci_slip.c b/components/serialization/common/transport/ser_phy/ser_phy_hci_slip.c ---- a/components/serialization/common/transport/ser_phy/ser_phy_hci_slip.c 2018-03-22 15:25:08.000000000 +0100 -+++ b/components/serialization/common/transport/ser_phy/ser_phy_hci_slip.c 2018-07-18 17:42:28.000000000 +0200 -@@ -642,6 +642,18 @@ - } - } - -+void ser_phy_hci_slip_reset(void) -+{ -+ mp_tx_buf = m_tx_buf0; -+ m_tx_bytes = 0; -+ m_tx_phase = PHASE_IDLE; -+ m_tx_in_progress = false; -+ m_tx_pending = false; -+ -+ m_rx_escape = false; -+ mp_small_buffer = m_small_buffer; -+ mp_big_buffer = m_big_buffer; -+} - - uint32_t ser_phy_hci_slip_open(ser_phy_hci_slip_event_handler_t events_handler) - { -@@ -666,15 +678,7 @@ - return NRF_ERROR_INVALID_PARAM; - } - -- mp_tx_buf = m_tx_buf0; -- m_tx_bytes = 0; -- m_tx_phase = PHASE_IDLE; -- m_tx_in_progress = false; -- m_tx_pending = false; -- -- m_rx_escape = false; -- mp_small_buffer = m_small_buffer; -- mp_big_buffer = m_big_buffer; -+ ser_phy_hci_slip_reset(); - - APP_ERROR_CHECK(nrf_drv_uart_rx(&m_uart, m_rx_buf, 1)); - -diff -u -r -N a/components/serialization/common/transport/ser_phy/ser_phy_hci_slip_cdc.c b/components/serialization/common/transport/ser_phy/ser_phy_hci_slip_cdc.c ---- a/components/serialization/common/transport/ser_phy/ser_phy_hci_slip_cdc.c 2018-03-22 15:25:08.000000000 +0100 -+++ b/components/serialization/common/transport/ser_phy/ser_phy_hci_slip_cdc.c 2018-07-18 17:42:28.000000000 +0200 -@@ -67,10 +67,10 @@ - static void cdc_acm_user_ev_handler(app_usbd_class_inst_t const * p_inst, - app_usbd_cdc_acm_user_event_t event); - --#define CDC_ACM_COMM_INTERFACE 0 -+#define CDC_ACM_COMM_INTERFACE 1 - #define CDC_ACM_COMM_EPIN NRF_DRV_USBD_EPIN2 - --#define CDC_ACM_DATA_INTERFACE 1 -+#define CDC_ACM_DATA_INTERFACE 2 - #define CDC_ACM_DATA_EPIN NRF_DRV_USBD_EPIN1 - #define CDC_ACM_DATA_EPOUT NRF_DRV_USBD_EPOUT1 - -@@ -619,6 +619,12 @@ - - case APP_USBD_CDC_ACM_USER_EVT_PORT_CLOSE: - NRF_LOG_DEBUG("EVT_PORT_CLOSE"); -+ if (m_tx_in_progress) -+ { -+ m_ser_phy_hci_slip_event.evt_type = SER_PHY_HCI_SLIP_EVT_PKT_SENT; -+ m_ser_phy_hci_slip_event_handler(&m_ser_phy_hci_slip_event); -+ m_tx_in_progress = false; -+ } - m_port_open = false; - break; - -@@ -677,6 +683,19 @@ - } - } - -+void ser_phy_hci_slip_reset(void) -+{ -+ mp_tx_buf = m_tx_buf0; -+ m_tx_bytes = 0; -+ m_tx_phase = PHASE_IDLE; -+ m_tx_in_progress = false; -+ m_tx_pending = false; -+ -+ m_rx_escape = false; -+ mp_small_buffer = m_small_buffer; -+ mp_big_buffer = m_big_buffer; -+} -+ - uint32_t ser_phy_hci_slip_open(ser_phy_hci_slip_event_handler_t events_handler) - { - if (events_handler == NULL) -@@ -700,15 +719,7 @@ - - m_ser_phy_hci_slip_event_handler = events_handler; - -- mp_tx_buf = m_tx_buf0; -- m_tx_bytes = 0; -- m_tx_phase = PHASE_IDLE; -- m_tx_in_progress = false; -- m_tx_pending = false; -- -- m_rx_escape = false; -- mp_small_buffer = m_small_buffer; -- mp_big_buffer = m_big_buffer; -+ ser_phy_hci_slip_reset(); - - return NRF_SUCCESS; - } -diff -u -r -N a/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble.c b/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble.c ---- a/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble.c 2018-03-22 15:25:08.000000000 +0100 -+++ b/components/serialization/connectivity/codecs/ble/middleware/conn_mw_ble.c 2018-07-18 17:42:28.000000000 +0200 -@@ -41,7 +41,7 @@ - #include "conn_mw_ble.h" - #include "ble_serialization.h" - #include "conn_ble_user_mem.h" --#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION >= 5 -+#if defined(NRF_SD_BLE_API_VERSION) && ( (NRF_SD_BLE_API_VERSION >= 5) || (NRF_SD_BLE_API_VERSION == 3)) - #include "nrf_sdh_ble.h" - #endif - #include -@@ -311,7 +311,7 @@ - err_code = ble_enable_req_dec(p_rx_buf, rx_buf_len, &p_params); - SER_ASSERT(err_code == NRF_SUCCESS, err_code); - -- sd_err_code = sd_ble_enable(p_params, &app_ram_base); -+ sd_err_code = nrf_sdh_ble_enable(p_params, &app_ram_base); - #else - err_code = ble_enable_req_dec(p_rx_buf, rx_buf_len); - SER_ASSERT(err_code == NRF_SUCCESS, err_code); -diff -u -r -N a/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.c b/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.c ---- a/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.c 2018-03-22 15:25:08.000000000 +0100 -+++ b/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.c 2018-07-18 17:42:28.000000000 +0200 -@@ -55,6 +55,22 @@ - ble_data_item_t m_ble_data_pool[8]; - - #endif -+ -+void conn_ble_gap_sec_keys_init(void) -+{ -+ uint32_t i; -+ for (i = 0; i < SER_MAX_CONNECTIONS; i++) -+ { -+ m_conn_keys_table[i].conn_active = 0; -+ } -+#if NRF_SD_BLE_API_VERSION >= 6 -+ for (i = 0; i < 8; i++) -+ { -+ m_ble_data_pool[i].id = 0; -+ } -+#endif -+} -+ - uint32_t conn_ble_gap_sec_context_create(uint32_t *p_index) - { - uint32_t err_code = NRF_ERROR_NO_MEM; -diff -u -r -N a/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.h b/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.h ---- a/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.h 2018-03-22 15:25:08.000000000 +0100 -+++ b/components/serialization/connectivity/codecs/ble/serializers/conn_ble_gap_sec_keys.h 2018-07-18 17:42:28.000000000 +0200 -@@ -79,6 +79,9 @@ - ble_gap_lesc_p256_pk_t pk_peer; /**< Peer Public key, see @ref ble_gap_lesc_p256_pk_t. */ - } ser_ble_gap_conn_keyset_t; - -+/**@brief Initializes buffer pool. */ -+void conn_ble_gap_sec_keys_init(void); -+ - /**@brief Allocates instance in m_conn_keys_table[] for storage of encryption keys. - * - * @param[out] p_index Pointer to the index of allocated instance. -diff -u -r -N a/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.c b/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.c ---- a/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.c 2018-03-22 15:25:08.000000000 +0100 -+++ b/components/serialization/connectivity/codecs/ble/serializers/conn_ble_user_mem.c 2018-07-18 17:42:28.000000000 +0200 -@@ -46,6 +46,16 @@ - - sercon_ble_user_mem_t m_conn_user_mem_table[SER_MAX_CONNECTIONS]; - -+void conn_ble_user_mem_init(void) -+{ -+ uint32_t i; -+ -+ for (i=0; i -- -+#include - #ifdef __cplusplus - extern "C" { - #endif -@@ -68,8 +68,9 @@ - * @details The function decodes encoded system reset command and performs software reset. - * This command does not send back the Command Response packet to the Application Chip. - */ --void ser_conn_reset_command_process(void); -+void ser_conn_generic_command_process(uint8_t * p_command, uint16_t command_len); - -+bool soft_reset_trigger(void); - - #ifdef __cplusplus - } -diff -u -r -N a/components/softdevice/common/nrf_sdh.c b/components/softdevice/common/nrf_sdh.c ---- a/components/softdevice/common/nrf_sdh.c 2018-03-22 15:25:08.000000000 +0100 -+++ b/components/softdevice/common/nrf_sdh.c 2018-07-18 17:42:28.000000000 +0200 -@@ -157,6 +157,7 @@ - static void softdevices_evt_irq_enable(void) - { - #ifdef SOFTDEVICE_PRESENT -+ NVIC_ClearPendingIRQ((IRQn_Type)SD_EVT_IRQn); - ret_code_t ret_code = sd_nvic_EnableIRQ((IRQn_Type)SD_EVT_IRQn); - APP_ERROR_CHECK(ret_code); - #else -@@ -226,7 +227,11 @@ - .source = NRF_SDH_CLOCK_LF_SRC, - .rc_ctiv = NRF_SDH_CLOCK_LF_RC_CTIV, - .rc_temp_ctiv = NRF_SDH_CLOCK_LF_RC_TEMP_CTIV, -+#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 3 - .accuracy = NRF_SDH_CLOCK_LF_ACCURACY -+#else -+ .xtal_accuracy = NRF_SDH_CLOCK_LF_ACCURACY -+#endif - }; - - CRITICAL_REGION_ENTER(); -diff -u -r -N a/components/softdevice/common/nrf_sdh_ble.c b/components/softdevice/common/nrf_sdh_ble.c ---- a/components/softdevice/common/nrf_sdh_ble.c 2018-03-22 15:25:08.000000000 +0100 -+++ b/components/softdevice/common/nrf_sdh_ble.c 2018-07-18 17:42:28.000000000 +0200 -@@ -102,8 +102,9 @@ - - ret_code_t nrf_sdh_ble_default_cfg_set(uint8_t conn_cfg_tag, uint32_t * p_ram_start) - { -- uint32_t ret_code; - -+#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 3 -+ uint32_t ret_code; - ret_code = nrf_sdh_ble_app_ram_start_get(p_ram_start); - if (ret_code != NRF_SUCCESS) - { -@@ -197,7 +198,7 @@ - NRF_LOG_ERROR("sd_ble_cfg_set() returned %s when attempting to set BLE_GATTS_CFG_SERVICE_CHANGED.", - nrf_strerror_get(ret_code)); - } -- -+#endif //defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 3 - return NRF_SUCCESS; - } - -@@ -217,7 +218,7 @@ - return RAM_START + ram_total_size; - } - -- -+#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 4 - ret_code_t nrf_sdh_ble_enable(uint32_t * const p_app_ram_start) - { - // Start of RAM, obtained from linker symbol. -@@ -256,7 +257,46 @@ - - return ret_code; - } -+#else -+ret_code_t nrf_sdh_ble_enable(ble_enable_params_t * p_ble_enable_params, uint32_t * const p_app_ram_start) -+{ -+ // Start of RAM, obtained from linker symbol. -+ uint32_t const app_ram_start_link = *p_app_ram_start; - -+ ret_code_t ret_code = sd_ble_enable(p_ble_enable_params, p_app_ram_start); -+ if (*p_app_ram_start > app_ram_start_link) -+ { -+ NRF_LOG_WARNING("Insufficient RAM allocated for the SoftDevice."); -+ -+ NRF_LOG_WARNING("Change the RAM start location from 0x%x to 0x%x.", -+ app_ram_start_link, *p_app_ram_start); -+ NRF_LOG_WARNING("Maximum RAM size for application is 0x%x.", -+ ram_end_address_get() - (*p_app_ram_start)); -+ } -+ else -+ { -+ NRF_LOG_DEBUG("RAM starts at 0x%x", app_ram_start_link); -+ if (*p_app_ram_start != app_ram_start_link) -+ { -+ NRF_LOG_DEBUG("RAM start location can be adjusted to 0x%x.", *p_app_ram_start); -+ -+ NRF_LOG_DEBUG("RAM size for application can be adjusted to 0x%x.", -+ ram_end_address_get() - (*p_app_ram_start)); -+ } -+ } -+ -+ if (ret_code == NRF_SUCCESS) -+ { -+ m_stack_is_enabled = true; -+ } -+ else -+ { -+ NRF_LOG_ERROR("sd_ble_enable() returned %s.", nrf_strerror_get(ret_code)); -+ } -+ -+ return ret_code; -+} -+#endif - - /**@brief Function for polling BLE events. - * -diff -u -r -N a/components/softdevice/common/nrf_sdh_ble.h b/components/softdevice/common/nrf_sdh_ble.h ---- a/components/softdevice/common/nrf_sdh_ble.h 2018-03-22 15:25:08.000000000 +0100 -+++ b/components/softdevice/common/nrf_sdh_ble.h 2018-07-18 17:42:28.000000000 +0200 -@@ -62,6 +62,12 @@ - extern "C" { - #endif - -+#ifndef BLE_EVT_LEN_MAX -+#define BLE_EVT_LEN_MAX(ATT_MTU) ( \ -+ offsetof(ble_evt_t, evt.gattc_evt.params.prim_srvc_disc_rsp.services) + ((ATT_MTU) - 1) / 4 * sizeof(ble_gattc_service_t) \ -+) -+ -+#endif - /** @brief Size of the buffer for a BLE event. */ - #define NRF_SDH_BLE_EVT_BUF_SIZE BLE_EVT_LEN_MAX(NRF_SDH_BLE_GATT_MAX_MTU_SIZE) - -@@ -172,8 +178,11 @@ - * - * @param[in] p_app_ram_start Address of the start of application's RAM. - */ -+#if defined(NRF_SD_BLE_API_VERSION) && NRF_SD_BLE_API_VERSION > 4 - ret_code_t nrf_sdh_ble_enable(uint32_t * p_app_ram_start); -- -+#else -+ret_code_t nrf_sdh_ble_enable(ble_enable_params_t * p_ble_enable_params, uint32_t * p_app_ram_start); -+#endif - - #ifdef __cplusplus - } -Binary files a/components/softdevice/s132/doc/s132_nrf52_6.0.0_migration-document.pdf and b/components/softdevice/s132/doc/s132_nrf52_6.0.0_migration-document.pdf differ -diff -u -r -N a/components/softdevice/s132v3/headers/ble.h b/components/softdevice/s132v3/headers/ble.h ---- a/components/softdevice/s132v3/headers/ble.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v3/headers/ble.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,681 @@ -+/* -+ * Copyright (c) Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form must reproduce the above copyright notice, this -+ * list of conditions and the following disclaimer in the documentation and/or -+ * other materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other -+ * contributors to this software may be used to endorse or promote products -+ * derived from this software without specific prior written permission. -+ * -+ * 4. This software must only be used in a processor manufactured by Nordic -+ * Semiconductor ASA, or in a processor manufactured by a third party that -+ * is used in combination with a processor manufactured by Nordic Semiconductor. -+ * -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ * -+ */ -+ -+/** -+ @addtogroup BLE_COMMON BLE SoftDevice Common -+ @{ -+ @defgroup ble_api Events, type definitions and API calls -+ @{ -+ -+ @brief Module independent events, type definitions and API calls for the BLE SoftDevice. -+ -+ */ -+ -+#ifndef BLE_H__ -+#define BLE_H__ -+ -+#include "ble_ranges.h" -+#include "ble_types.h" -+#include "ble_gap.h" -+#include "ble_l2cap.h" -+#include "ble_gatt.h" -+#include "ble_gattc.h" -+#include "ble_gatts.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/** @addtogroup BLE_COMMON_ENUMERATIONS Enumerations -+ * @{ */ -+ -+/** -+ * @brief Common API SVC numbers. -+ */ -+enum BLE_COMMON_SVCS -+{ -+ SD_BLE_ENABLE = BLE_SVC_BASE, /**< Enable and initialize the BLE stack */ -+ SD_BLE_EVT_GET, /**< Get an event from the pending events queue. */ -+ SD_BLE_TX_PACKET_COUNT_GET, /**< Get the total number of available application transmission packets for a particular connection. */ -+ SD_BLE_UUID_VS_ADD, /**< Add a Vendor Specific UUID. */ -+ SD_BLE_UUID_DECODE, /**< Decode UUID bytes. */ -+ SD_BLE_UUID_ENCODE, /**< Encode UUID bytes. */ -+ SD_BLE_VERSION_GET, /**< Get the local version information (company id, Link Layer Version, Link Layer Subversion). */ -+ SD_BLE_USER_MEM_REPLY, /**< User Memory Reply. */ -+ SD_BLE_OPT_SET, /**< Set a BLE option. */ -+ SD_BLE_OPT_GET, /**< Get a BLE option. */ -+}; -+ -+ /** -+ * @brief BLE Module Independent Event IDs. -+ */ -+enum BLE_COMMON_EVTS -+{ -+ BLE_EVT_TX_COMPLETE = BLE_EVT_BASE, /**< Transmission Complete. @ref ble_evt_tx_complete_t */ -+ BLE_EVT_USER_MEM_REQUEST, /**< User Memory request. @ref ble_evt_user_mem_request_t */ -+ BLE_EVT_USER_MEM_RELEASE, /**< User Memory release. @ref ble_evt_user_mem_release_t */ -+ BLE_EVT_DATA_LENGTH_CHANGED /**< Link layer PDU length changed. @ref ble_evt_data_length_changed_t. */ -+}; -+ -+/**@brief BLE connection bandwidth types. -+ * Bandwidth types supported by the SoftDevice. The bandwidth type dictates the maximum number of full length packets per connection interval. -+ */ -+enum BLE_CONN_BWS -+{ -+ BLE_CONN_BW_INVALID = 0, /**< Invalid connection bandwidth. */ -+ BLE_CONN_BW_LOW, /**< Low connection bandwidth. */ -+ BLE_CONN_BW_MID, /**< Medium connection bandwidth. */ -+ BLE_CONN_BW_HIGH /**< High connection bandwidth. */ -+}; -+ -+/**@brief Common Option IDs. -+ * IDs that uniquely identify a common option. -+ */ -+enum BLE_COMMON_OPTS -+{ -+ BLE_COMMON_OPT_CONN_BW = BLE_OPT_BASE, /**< Bandwidth configuration @ref ble_common_opt_conn_bw_t */ -+ BLE_COMMON_OPT_PA_LNA, /**< PA and LNA options */ -+ BLE_COMMON_OPT_CONN_EVT_EXT, /**< Extended connection events option */ -+}; -+ -+/** @} */ -+ -+/** @addtogroup BLE_COMMON_DEFINES Defines -+ * @{ */ -+ -+/** @brief Required pointer alignment for BLE Events. -+*/ -+#define BLE_EVTS_PTR_ALIGNMENT 4 -+ -+/** @brief Maximum possible length for BLE Events. -+ * @note Value of @ref ble_gatt_enable_params_t::att_mtu shall be used as a parameter. -+ * If that value is set to 0 then @ref GATT_MTU_SIZE_DEFAULT must be used instead. -+*/ -+#define BLE_EVTS_LEN_MAX(ATT_MTU) (MAX( \ -+ sizeof(ble_evt_t), \ -+ MAX( \ -+ offsetof(ble_evt_t, evt.gattc_evt.params.rel_disc_rsp.includes) + ((ATT_MTU) - 2) / 6 * sizeof(ble_gattc_include_t), \ -+ offsetof(ble_evt_t, evt.gattc_evt.params.attr_info_disc_rsp.info.attr_info16) + ((ATT_MTU) - 2) / 4 * sizeof(ble_gattc_attr_info16_t) \ -+ ) \ -+)) -+ -+/** @defgroup BLE_USER_MEM_TYPES User Memory Types -+ * @{ */ -+#define BLE_USER_MEM_TYPE_INVALID 0x00 /**< Invalid User Memory Types. */ -+#define BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES 0x01 /**< User Memory for GATTS queued writes. */ -+/** @} */ -+ -+/** @defgroup BLE_UUID_VS_COUNTS Vendor Specific UUID counts -+ * @{ -+ */ -+#define BLE_UUID_VS_COUNT_MIN 1 /**< Minimum VS UUID count. */ -+#define BLE_UUID_VS_COUNT_DEFAULT 0 /**< Use the default VS UUID count (10 for this version of the SoftDevice). */ -+/** @} */ -+ -+/** @} */ -+ -+/** @addtogroup BLE_COMMON_STRUCTURES Structures -+ * @{ */ -+ -+/**@brief User Memory Block. */ -+typedef struct -+{ -+ uint8_t *p_mem; /**< Pointer to the start of the user memory block. */ -+ uint16_t len; /**< Length in bytes of the user memory block. */ -+} ble_user_mem_block_t; -+ -+/** -+ * @brief Event structure for @ref BLE_EVT_TX_COMPLETE. -+ */ -+typedef struct -+{ -+ uint8_t count; /**< Number of packets transmitted. */ -+} ble_evt_tx_complete_t; -+ -+/**@brief Event structure for @ref BLE_EVT_USER_MEM_REQUEST. */ -+typedef struct -+{ -+ uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ -+} ble_evt_user_mem_request_t; -+ -+/**@brief Event structure for @ref BLE_EVT_USER_MEM_RELEASE. */ -+typedef struct -+{ -+ uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ -+ ble_user_mem_block_t mem_block; /**< User memory block */ -+} ble_evt_user_mem_release_t; -+ -+/**@brief Event structure for @ref BLE_EVT_DATA_LENGTH_CHANGED. */ -+typedef struct -+{ -+ uint16_t max_tx_octets; /**< The maximum number of payload octets in a Link Layer Data Channel PDU that the local Controller will send. Range: 27-251 */ -+ uint16_t max_tx_time; /**< The maximum time (in microseconds) that the local Controller will take to send a Link Layer Data Channel PDU. Range: 328-2120 */ -+ uint16_t max_rx_octets; /**< The maximum number of payload octets in a Link Layer Data Channel PDU that the local controller expects to receive. Range: 27-251 */ -+ uint16_t max_rx_time; /**< The maximum time (in microseconds) that the local Controller expects to take to receive a Link Layer Data Channel PDU. Range: 328-2120 */ -+} ble_evt_data_length_changed_t; -+ -+/**@brief Event structure for events not associated with a specific function module. */ -+typedef struct -+{ -+ uint16_t conn_handle; /**< Connection Handle on which this event occurred. */ -+ union -+ { -+ ble_evt_tx_complete_t tx_complete; /**< Transmission Complete. */ -+ ble_evt_user_mem_request_t user_mem_request; /**< User Memory Request Event Parameters. */ -+ ble_evt_user_mem_release_t user_mem_release; /**< User Memory Release Event Parameters. */ -+ ble_evt_data_length_changed_t data_length_changed; /**< Data Length Changed Event Parameters. */ -+ } params; /**< Event parameter union. */ -+} ble_common_evt_t; -+ -+/**@brief BLE Event header. */ -+typedef struct -+{ -+ uint16_t evt_id; /**< Value from a BLE__EVT series. */ -+ uint16_t evt_len; /**< Length in octets including this header. */ -+} ble_evt_hdr_t; -+ -+/**@brief Common BLE Event type, wrapping the module specific event reports. */ -+typedef struct -+{ -+ ble_evt_hdr_t header; /**< Event header. */ -+ union -+ { -+ ble_common_evt_t common_evt; /**< Common Event, evt_id in BLE_EVT_* series. */ -+ ble_gap_evt_t gap_evt; /**< GAP originated event, evt_id in BLE_GAP_EVT_* series. */ -+ ble_l2cap_evt_t l2cap_evt; /**< L2CAP originated event, evt_id in BLE_L2CAP_EVT* series. */ -+ ble_gattc_evt_t gattc_evt; /**< GATT client originated event, evt_id in BLE_GATTC_EVT* series. */ -+ ble_gatts_evt_t gatts_evt; /**< GATT server originated event, evt_id in BLE_GATTS_EVT* series. */ -+ } evt; /**< Event union. */ -+} ble_evt_t; -+ -+ -+/** -+ * @brief Version Information. -+ */ -+typedef struct -+{ -+ uint8_t version_number; /**< Link Layer Version number for BT 4.1 spec is 7 (https://www.bluetooth.org/en-us/specification/assigned-numbers/link-layer). */ -+ uint16_t company_id; /**< Company ID, Nordic Semiconductor's company ID is 89 (0x0059) (https://www.bluetooth.org/apps/content/Default.aspx?doc_id=49708). */ -+ uint16_t subversion_number; /**< Link Layer Sub Version number, corresponds to the SoftDevice Config ID or Firmware ID (FWID). */ -+} ble_version_t; -+ -+/** -+ * @brief Configuration parameters for the PA and LNA. -+ */ -+typedef struct -+{ -+ uint8_t enable :1; /**< Enable toggling for this amplifier */ -+ uint8_t active_high :1; /**< Set the pin to be active high */ -+ uint8_t gpio_pin :6; /**< The GPIO pin to toggle for this amplifier */ -+} ble_pa_lna_cfg_t; -+ -+/** -+ * @brief PA & LNA GPIO toggle configuration -+ * -+ * This option configures the SoftDevice to toggle pins when the radio is active for use with a power amplifier and/or -+ * a low noise amplifier. -+ * -+ * Toggling the pins is achieved by using two PPI channels and a GPIOTE channel. The hardware channel IDs are provided -+ * by the application and should be regarded as reserved as long as any PA/LNA toggling is enabled. -+ * -+ * @note @ref sd_ble_opt_get is not supported for this option. -+ * @note This feature is only supported for nRF52, on nRF51 @ref NRF_ERROR_NOT_SUPPORTED will always be returned. -+ * @note Setting this option while the radio is in use (i.e. any of the roles are active) may have undefined consequences -+ * and must be avoided by the application. -+ */ -+typedef struct -+{ -+ ble_pa_lna_cfg_t pa_cfg; /**< Power Amplifier configuration */ -+ ble_pa_lna_cfg_t lna_cfg; /**< Low Noise Amplifier configuration */ -+ -+ uint8_t ppi_ch_id_set; /**< PPI channel used for radio pin setting */ -+ uint8_t ppi_ch_id_clr; /**< PPI channel used for radio pin clearing */ -+ uint8_t gpiote_ch_id; /**< GPIOTE channel used for radio pin toggling */ -+} ble_common_opt_pa_lna_t; -+ -+/** -+ * @brief BLE connection bandwidth configuration parameters -+ */ -+typedef struct -+{ -+ uint8_t conn_bw_tx; /**< Connection bandwidth configuration for transmission, see @ref BLE_CONN_BWS.*/ -+ uint8_t conn_bw_rx; /**< Connection bandwidth configuration for reception, see @ref BLE_CONN_BWS.*/ -+} ble_conn_bw_t; -+ -+/**@brief BLE connection specific bandwidth configuration parameters. -+ * -+ * This can be used with @ref sd_ble_opt_set to set the bandwidth configuration to be used when creating connections. -+ * -+ * Call @ref sd_ble_opt_set with this option prior to calling @ref sd_ble_gap_adv_start or @ref sd_ble_gap_connect. -+ * -+ * The bandwidth configurations set via @ref sd_ble_opt_set are maintained separately for central and peripheral -+ * connections. The given configurations are used for all future connections of the role indicated in this structure -+ * unless they are changed by subsequent @ref sd_ble_opt_set calls. -+ * -+ * @note When this option is not used, the SoftDevice will use the default options: -+ * - @ref BLE_CONN_BW_HIGH for @ref BLE_GAP_ROLE_PERIPH connections (both transmission and reception). -+ * - @ref BLE_CONN_BW_MID for @ref BLE_GAP_ROLE_CENTRAL connections (both transmisison and reception). -+ * This option allows the application to selectively override these defaults for each role. -+ * -+ * @note The global memory pool configuration can be set with the @ref ble_conn_bw_counts_t configuration parameter, which -+ * is provided to @ref sd_ble_enable. -+ * -+ * @note @ref sd_ble_opt_get is not supported for this option. -+ * @note Please refer to SoftDevice Specification for more information on bandwidth configuration. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_COMMON_CONF_BW} -+ * @endmscs -+ * -+ * @retval ::NRF_SUCCESS Set successfully. -+ * @retval ::BLE_ERROR_INVALID_ROLE The role is invalid. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid bandwidth configuration parameters. -+ * @retval ::NRF_ERROR_NOT_SUPPORTED If the combination of role and bandwidth configuration is not supported. -+ */ -+typedef struct -+{ -+ uint8_t role; /**< BLE role of the connection, see @ref BLE_GAP_ROLES. */ -+ ble_conn_bw_t conn_bw; /**< Bandwidth configuration parameters. */ -+} ble_common_opt_conn_bw_t; -+ -+/** -+ * @brief Configuration of extended BLE connection events. -+ * -+ * When enabled the SoftDevice will dynamically extend the connection event when possible. -+ * -+ * The connection event length is controlled by the bandwidth configuration as set by @ref ble_common_opt_conn_bw_t. -+ * The connection event can be extended if there is time to send another packet pair before the start of the next connection interval, -+ * and if there are no conflicts with other BLE roles requesting radio time. -+ * -+ * @note @ref sd_ble_opt_get is not supported for this option. -+ */ -+typedef struct -+{ -+ uint8_t enable : 1; /**< Enable extended BLE connection events, disabled by default. */ -+} ble_common_opt_conn_evt_ext_t; -+ -+/**@brief Option structure for common options. */ -+typedef union -+{ -+ ble_common_opt_conn_bw_t conn_bw; /**< Parameters for the connection bandwidth option. */ -+ ble_common_opt_pa_lna_t pa_lna; /**< Parameters for controlling PA and LNA pin toggling. */ -+ ble_common_opt_conn_evt_ext_t conn_evt_ext; /**< Parameters for enabling extended connection events. */ -+} ble_common_opt_t; -+ -+/**@brief Common BLE Option type, wrapping the module specific options. */ -+typedef union -+{ -+ ble_common_opt_t common_opt; /**< COMMON options, opt_id in @ref BLE_COMMON_OPTS series. */ -+ ble_gap_opt_t gap_opt; /**< GAP option, opt_id in @ref BLE_GAP_OPTS series. */ -+} ble_opt_t; -+ -+/** -+ * @brief BLE bandwidth count parameters -+ * -+ * These parameters are used to configure the memory pools allocated within the SoftDevice for application packets -+ * (both transmission and reception) for all connections. -+ * -+ * @note The sum of all three counts must add up to the sum of @ref ble_gap_enable_params_t::central_conn_count and -+ * @ref ble_gap_enable_params_t::periph_conn_count in @ref ble_gap_enable_params_t. -+ */ -+typedef struct { -+ uint8_t high_count; /**< Total number of high bandwidth TX or RX memory pools available to the application at runtime for all active connections. */ -+ uint8_t mid_count; /**< Total number of medium bandwidth TX or RX memory pools available to the application at runtime for all active connections. */ -+ uint8_t low_count; /**< Total number of low bandwidth TX or RX memory pools available to the application at runtime for all active connections. */ -+} ble_conn_bw_count_t; -+ -+/** -+ * @brief BLE bandwidth global memory pool configuration parameters -+ * -+ * These configuration parameters are used to set the amount of memory dedicated to application packets for -+ * all connections. The application should specify the most demanding configuration for the intended use. -+ * -+ * Please refer to the SoftDevice Specification for more information on bandwidth configuration. -+ * -+ * @note Each connection created at runtime requires both a TX and an RX memory pool. By the use of these configuration -+ * parameters, the application can decide the size and total number of the global memory pools that will be later -+ * available for connection creation. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_COMMON_CONF_BW} -+ * @endmscs -+ * -+ */ -+typedef struct { -+ ble_conn_bw_count_t tx_counts; /**< Global memory pool configuration for transmission.*/ -+ ble_conn_bw_count_t rx_counts; /**< Global memory pool configuration for reception.*/ -+} ble_conn_bw_counts_t; -+ -+/** -+ * @brief BLE Common Initialization parameters. -+ * -+ * @note If @ref p_conn_bw_counts is NULL the SoftDevice will assume default bandwidth configuration for all connections. -+ * To fit a custom bandwidth configuration requirement, the application developer may have to specify a custom memory -+ * pool configuration here. See @ref ble_common_opt_conn_bw_t for bandwidth configuration of individual connections. -+ * Please refer to the SoftDevice Specification for more information on bandwidth configuration. -+ */ -+typedef struct -+{ -+ uint16_t vs_uuid_count; /**< Maximum number of 128-bit, Vendor Specific UUID bases to allocate. */ -+ ble_conn_bw_counts_t *p_conn_bw_counts; /**< Bandwidth configuration parameters or NULL for defaults. */ -+} ble_common_enable_params_t; -+ -+/** -+ * @brief BLE Initialization parameters. -+ */ -+typedef struct -+{ -+ ble_common_enable_params_t common_enable_params; /**< Common init parameters @ref ble_common_enable_params_t. */ -+ ble_gap_enable_params_t gap_enable_params; /**< GAP init parameters @ref ble_gap_enable_params_t. */ -+ ble_gatt_enable_params_t gatt_enable_params; /**< GATT init parameters @ref ble_gatt_enable_params_t. */ -+ ble_gatts_enable_params_t gatts_enable_params; /**< GATTS init parameters @ref ble_gatts_enable_params_t. */ -+} ble_enable_params_t; -+ -+/** @} */ -+ -+/** @addtogroup BLE_COMMON_FUNCTIONS Functions -+ * @{ */ -+ -+/**@brief Enable the BLE stack -+ * -+ * @param[in, out] p_ble_enable_params Pointer to ble_enable_params_t -+ * @param[in, out] p_app_ram_base Pointer to a variable containing the start address of the application RAM region -+ * (APP_RAM_BASE). On return, this will contain the minimum start address of the application RAM region required by the -+ * SoftDevice for this configuration. Calling @ref sd_ble_enable() with *p_app_ram_base set to 0 can be used during -+ * development to find out how much memory a specific configuration will need. -+ * -+ * @note The memory requirement for a specific configuration will not increase between SoftDevices with the same major -+ * version number. -+ * -+ * @note At runtime the IC's RAM is split into 2 regions: The SoftDevice RAM region is located between 0x20000000 and -+ * APP_RAM_BASE-1 and the application's RAM region is located between APP_RAM_BASE and the start of the call stack. -+ * -+ * @details This call initializes the BLE stack, no other BLE related function can be called before this one. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_COMMON_ENABLE} -+ * @endmscs -+ * -+ * @retval ::NRF_SUCCESS The BLE stack has been initialized successfully. -+ * @retval ::NRF_ERROR_INVALID_STATE The BLE stack had already been initialized and cannot be reinitialized. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_LENGTH One or more of the following is true: -+ * - The specified Attribute Table size is too small. -+ * The minimum acceptable size is defined by @ref BLE_GATTS_ATTR_TAB_SIZE_MIN. -+ * - The specified Attribute Table size is not a multiple of 4. -+ * - The device name length is invalid (must be between 0 and @ref BLE_GAP_DEVNAME_MAX_LEN). -+ * - The device name length is too long for the given Attribute Table. -+ * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: -+ * - Incorrectly configured VS UUID count. -+ * - Invalid connection count parameters. -+ * - Invalid device name location (vloc). -+ * - Invalid device name security mode. -+ * - Invalid maximum ATT_MTU size, see @ref ble_gatt_enable_params_t::att_mtu. -+ * @retval ::NRF_ERROR_NOT_SUPPORTED Device name security mode is not supported. -+ * @retval ::NRF_ERROR_NO_MEM The amount of memory assigned to the SoftDevice by *p_app_ram_base is not -+ * large enough to fit this configuration's memory requirement. Check *p_app_ram_base -+ * and set the start address of the application RAM region accordingly. -+ * @retval ::NRF_ERROR_CONN_COUNT The requested number of connections exceeds the maximum supported by the SoftDevice. -+ * Please refer to the SoftDevice Specification for more information on role configuration. -+ */ -+SVCALL(SD_BLE_ENABLE, uint32_t, sd_ble_enable(ble_enable_params_t * p_ble_enable_params, uint32_t * p_app_ram_base)); -+ -+/**@brief Get an event from the pending events queue. -+ * -+ * @param[out] p_dest Pointer to buffer to be filled in with an event, or NULL to retrieve the event length. -+ * This buffer must be aligned to the extend defined by @ref BLE_EVTS_PTR_ALIGNMENT. -+ * @param[in, out] p_len Pointer the length of the buffer, on return it is filled with the event length. -+ * -+ * @details This call allows the application to pull a BLE event from the BLE stack. The application is signaled that -+ * an event is available from the BLE stack by the triggering of the SD_EVT_IRQn interrupt. -+ * The application is free to choose whether to call this function from thread mode (main context) or directly from the -+ * Interrupt Service Routine that maps to SD_EVT_IRQn. In any case however, and because the BLE stack runs at a higher -+ * priority than the application, this function should be called in a loop (until @ref NRF_ERROR_NOT_FOUND is returned) -+ * every time SD_EVT_IRQn is raised to ensure that all available events are pulled from the BLE stack. Failure to do so -+ * could potentially leave events in the internal queue without the application being aware of this fact. Sizing the -+ * p_dest buffer is equally important, since the application needs to provide all the memory necessary for the event to -+ * be copied into application memory. If the buffer provided is not large enough to fit the entire contents of the event, -+ * @ref NRF_ERROR_DATA_SIZE will be returned and the application can then call again with a larger buffer size. -+ * The maximum possible event length is defined by @ref BLE_EVTS_LEN_MAX. The application may also "peek" the event length -+ * by providing p_dest as a NULL pointer and inspecting the value of *p_len upon return: -+ * -+ * \code -+ * uint16_t len; -+ * errcode = sd_ble_evt_get(NULL, &len); -+ * \endcode -+ * -+ * @mscs -+ * @mmsc{@ref BLE_COMMON_IRQ_EVT_MSC} -+ * @mmsc{@ref BLE_COMMON_THREAD_EVT_MSC} -+ * @endmscs -+ * -+ * @retval ::NRF_SUCCESS Event pulled and stored into the supplied buffer. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. -+ * @retval ::NRF_ERROR_NOT_FOUND No events ready to be pulled. -+ * @retval ::NRF_ERROR_DATA_SIZE Event ready but could not fit into the supplied buffer. -+ */ -+SVCALL(SD_BLE_EVT_GET, uint32_t, sd_ble_evt_get(uint8_t *p_dest, uint16_t *p_len)); -+ -+ -+/**@brief Get the total number of available guaranteed application transmission packets for a particular connection. -+ * -+ * @details This call allows the application to obtain the total number of guaranteed application transmission packets -+ * available for a connection. Please note that this does not return the number of free packets, but rather the total -+ * amount of them for that particular connection. The application has two options to handle transmitting application packets: -+ * - Use a simple arithmetic calculation: after connection creation time the application should use this function to -+ * find out the total amount of guaranteed packets available to it and store it in a variable. -+ * Every time a packet is successfully queued for a transmission on this connection using any of the exposed functions in -+ * this BLE API, the application should decrement that variable. Conversely, whenever a @ref BLE_EVT_TX_COMPLETE event -+ * with the conn_handle matching the particular connection is received by the application, it should retrieve the count -+ * field in such event and add that number to the same variable storing the number of available guaranteed packets. This -+ * mechanism allows the application to be aware at any time of the number of guaranteed application packets available for -+ * each of the active connections, and therefore it can know with certainty whether it is possible to send more data or -+ * it has to wait for a @ref BLE_EVT_TX_COMPLETE event before it proceeds. -+ * The application can still pursue transmissions when the number of guaranteed application packets available is smaller -+ * than or equal to zero, but successful queuing of the tranmsission is not guaranteed. -+ * - Choose to simply not keep track of available packets at all, and instead handle the @ref BLE_ERROR_NO_TX_PACKETS error -+ * by queueing the packet to be transmitted and try again as soon as a @ref BLE_EVT_TX_COMPLETE event arrives. -+ * -+ * The API functions that may consume an application packet depending on the parameters supplied to them can be found below: -+ * - @ref sd_ble_gattc_write (write without response only) -+ * - @ref sd_ble_gatts_hvx (notifications only) -+ * - @ref sd_ble_l2cap_tx (all packets) -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[out] p_count Pointer to a uint8_t which will contain the number of application transmission packets upon -+ * successful return. -+ * @mscs -+ * @mmsc{@ref BLE_COMMON_APP_BUFF_MSC} -+ * @endmscs -+ * -+ * @retval ::NRF_SUCCESS Number of application transmission packets retrieved successfully. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ */ -+SVCALL(SD_BLE_TX_PACKET_COUNT_GET, uint32_t, sd_ble_tx_packet_count_get(uint16_t conn_handle, uint8_t *p_count)); -+ -+ -+/**@brief Add a Vendor Specific base UUID. -+ * -+ * @details This call enables the application to add a vendor specific base UUID to the BLE stack's table, for later -+ * use with all other modules and APIs. This then allows the application to use the shorter, 24-bit @ref ble_uuid_t -+ * format when dealing with both 16-bit and 128-bit UUIDs without having to check for lengths and having split code -+ * paths. This is accomplished by extending the grouping mechanism that the Bluetooth SIG standard base UUID uses -+ * for all other 128-bit UUIDs. The type field in the @ref ble_uuid_t structure is an index (relative to -+ * @ref BLE_UUID_TYPE_VENDOR_BEGIN) to the table populated by multiple calls to this function, and the uuid field -+ * in the same structure contains the 2 bytes at indices 12 and 13. The number of possible 128-bit UUIDs available to -+ * the application is therefore the number of Vendor Specific UUIDs added with the help of this function times 65536, -+ * although restricted to modifying bytes 12 and 13 for each of the entries in the supplied array. -+ * -+ * @note Bytes 12 and 13 of the provided UUID will not be used internally, since those are always replaced by -+ * the 16-bit uuid field in @ref ble_uuid_t. -+ * -+ * @note If a UUID is already present in the BLE stack's internal table, the corresponding index will be returned in -+ * p_uuid_type along with an NRF_SUCCESS error code. -+ * -+ * @param[in] p_vs_uuid Pointer to a 16-octet (128-bit) little endian Vendor Specific UUID disregarding -+ * bytes 12 and 13. -+ * @param[out] p_uuid_type Pointer to a uint8_t where the type field in @ref ble_uuid_t corresponding to this UUID will be stored. -+ * -+ * @retval ::NRF_SUCCESS Successfully added the Vendor Specific UUID. -+ * @retval ::NRF_ERROR_INVALID_ADDR If p_vs_uuid or p_uuid_type is NULL or invalid. -+ * @retval ::NRF_ERROR_NO_MEM If there are no more free slots for VS UUIDs. -+ */ -+SVCALL(SD_BLE_UUID_VS_ADD, uint32_t, sd_ble_uuid_vs_add(ble_uuid128_t const *p_vs_uuid, uint8_t *p_uuid_type)); -+ -+ -+/** @brief Decode little endian raw UUID bytes (16-bit or 128-bit) into a 24 bit @ref ble_uuid_t structure. -+ * -+ * @details The raw UUID bytes excluding bytes 12 and 13 (i.e. bytes 0-11 and 14-15) of p_uuid_le are compared -+ * to the corresponding ones in each entry of the table of vendor specific UUIDs populated with @ref sd_ble_uuid_vs_add -+ * to look for a match. If there is such a match, bytes 12 and 13 are returned as p_uuid->uuid and the index -+ * relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN as p_uuid->type. -+ * -+ * @note If the UUID length supplied is 2, then the type set by this call will always be @ref BLE_UUID_TYPE_BLE. -+ * -+ * @param[in] uuid_le_len Length in bytes of the buffer pointed to by p_uuid_le (must be 2 or 16 bytes). -+ * @param[in] p_uuid_le Pointer pointing to little endian raw UUID bytes. -+ * @param[out] p_uuid Pointer to a @ref ble_uuid_t structure to be filled in. -+ * -+ * @retval ::NRF_SUCCESS Successfully decoded into the @ref ble_uuid_t structure. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_LENGTH Invalid UUID length. -+ * @retval ::NRF_ERROR_NOT_FOUND For a 128-bit UUID, no match in the populated table of UUIDs. -+ */ -+SVCALL(SD_BLE_UUID_DECODE, uint32_t, sd_ble_uuid_decode(uint8_t uuid_le_len, uint8_t const *p_uuid_le, ble_uuid_t *p_uuid)); -+ -+ -+/** @brief Encode a @ref ble_uuid_t structure into little endian raw UUID bytes (16-bit or 128-bit). -+ * -+ * @note The pointer to the destination buffer p_uuid_le may be NULL, in which case only the validity and size of p_uuid is computed. -+ * -+ * @param[in] p_uuid Pointer to a @ref ble_uuid_t structure that will be encoded into bytes. -+ * @param[out] p_uuid_le_len Pointer to a uint8_t that will be filled with the encoded length (2 or 16 bytes). -+ * @param[out] p_uuid_le Pointer to a buffer where the little endian raw UUID bytes (2 or 16) will be stored. -+ * -+ * @retval ::NRF_SUCCESS Successfully encoded into the buffer. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid UUID type. -+ */ -+SVCALL(SD_BLE_UUID_ENCODE, uint32_t, sd_ble_uuid_encode(ble_uuid_t const *p_uuid, uint8_t *p_uuid_le_len, uint8_t *p_uuid_le)); -+ -+ -+/**@brief Get Version Information. -+ * -+ * @details This call allows the application to get the BLE stack version information. -+ * -+ * @param[out] p_version Pointer to a ble_version_t structure to be filled in. -+ * -+ * @retval ::NRF_SUCCESS Version information stored successfully. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_BUSY The BLE stack is busy (typically doing a locally-initiated disconnection procedure). -+ */ -+SVCALL(SD_BLE_VERSION_GET, uint32_t, sd_ble_version_get(ble_version_t *p_version)); -+ -+ -+/**@brief Provide a user memory block. -+ * -+ * @note This call can only be used as a response to a @ref BLE_EVT_USER_MEM_REQUEST event issued to the application. -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in,out] p_block Pointer to a user memory block structure. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_PEER_CANCEL_MSC} -+ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC} -+ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} -+ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC} -+ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_NOAUTH_MSC} -+ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} -+ * @endmscs -+ * -+ * @retval ::NRF_SUCCESS Successfully queued a response to the peer. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection state or no execute write request pending. -+ * @retval ::NRF_ERROR_BUSY The BLE stack is busy. Retry at later time. -+ */ -+SVCALL(SD_BLE_USER_MEM_REPLY, uint32_t, sd_ble_user_mem_reply(uint16_t conn_handle, ble_user_mem_block_t const *p_block)); -+ -+/**@brief Set a BLE option. -+ * -+ * @details This call allows the application to set the value of an option. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_STATIC_PK_MSC} -+ * @mmsc{@ref BLE_COMMON_CONF_BW} -+ * @endmscs -+ * -+ * @param[in] opt_id Option ID, see @ref BLE_COMMON_OPTS and @ref BLE_GAP_OPTS. -+ * @param[in] p_opt Pointer to a ble_opt_t structure containing the option value. -+ * -+ * @retval ::NRF_SUCCESS Option set successfully. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. -+ * @retval ::NRF_ERROR_INVALID_STATE Unable to set the parameter at this time. -+ * @retval ::NRF_ERROR_BUSY The BLE stack is busy or the previous procedure has not completed. -+ */ -+SVCALL(SD_BLE_OPT_SET, uint32_t, sd_ble_opt_set(uint32_t opt_id, ble_opt_t const *p_opt)); -+ -+ -+/**@brief Get a BLE option. -+ * -+ * @details This call allows the application to retrieve the value of an option. -+ * -+ * @param[in] opt_id Option ID, see @ref BLE_COMMON_OPTS and @ref BLE_GAP_OPTS. -+ * @param[out] p_opt Pointer to a ble_opt_t structure to be filled in. -+ * -+ * @retval ::NRF_SUCCESS Option retrieved successfully. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. -+ * @retval ::NRF_ERROR_INVALID_STATE Unable to retrieve the parameter at this time. -+ * @retval ::NRF_ERROR_BUSY The BLE stack is busy or the previous procedure has not completed. -+ * @retval ::NRF_ERROR_NOT_SUPPORTED This option is not supported. -+ * -+ */ -+SVCALL(SD_BLE_OPT_GET, uint32_t, sd_ble_opt_get(uint32_t opt_id, ble_opt_t *p_opt)); -+ -+/** @} */ -+#ifdef __cplusplus -+} -+#endif -+#endif /* BLE_H__ */ -+ -+/** -+ @} -+ @} -+*/ -diff -u -r -N a/components/softdevice/s132v3/headers/ble_err.h b/components/softdevice/s132v3/headers/ble_err.h ---- a/components/softdevice/s132v3/headers/ble_err.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v3/headers/ble_err.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,90 @@ -+/* -+ * Copyright (c) Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form must reproduce the above copyright notice, this -+ * list of conditions and the following disclaimer in the documentation and/or -+ * other materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other -+ * contributors to this software may be used to endorse or promote products -+ * derived from this software without specific prior written permission. -+ * -+ * 4. This software must only be used in a processor manufactured by Nordic -+ * Semiconductor ASA, or in a processor manufactured by a third party that -+ * is used in combination with a processor manufactured by Nordic Semiconductor. -+ * -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ * -+ */ -+ -+/** -+ @addtogroup BLE_COMMON -+ @{ -+ @addtogroup nrf_error -+ @{ -+ @ingroup BLE_COMMON -+ @} -+ -+ @defgroup ble_err General error codes -+ @{ -+ -+ @brief General error code definitions for the BLE API. -+ -+ @ingroup BLE_COMMON -+*/ -+#ifndef NRF_BLE_ERR_H__ -+#define NRF_BLE_ERR_H__ -+ -+#include "nrf_error.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/* @defgroup BLE_ERRORS Error Codes -+ * @{ */ -+#define BLE_ERROR_NOT_ENABLED (NRF_ERROR_STK_BASE_NUM+0x001) /**< @ref sd_ble_enable has not been called. */ -+#define BLE_ERROR_INVALID_CONN_HANDLE (NRF_ERROR_STK_BASE_NUM+0x002) /**< Invalid connection handle. */ -+#define BLE_ERROR_INVALID_ATTR_HANDLE (NRF_ERROR_STK_BASE_NUM+0x003) /**< Invalid attribute handle. */ -+#define BLE_ERROR_NO_TX_PACKETS (NRF_ERROR_STK_BASE_NUM+0x004) /**< Not enough application packets available on this connection. */ -+#define BLE_ERROR_INVALID_ROLE (NRF_ERROR_STK_BASE_NUM+0x005) /**< Invalid role. */ -+/** @} */ -+ -+ -+/** @defgroup BLE_ERROR_SUBRANGES Module specific error code subranges -+ * @brief Assignment of subranges for module specific error codes. -+ * @note For specific error codes, see ble_.h or ble_error_.h. -+ * @{ */ -+#define NRF_L2CAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x100) /**< L2CAP specific errors. */ -+#define NRF_GAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x200) /**< GAP specific errors. */ -+#define NRF_GATTC_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x300) /**< GATT client specific errors. */ -+#define NRF_GATTS_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x400) /**< GATT server specific errors. */ -+/** @} */ -+ -+#ifdef __cplusplus -+} -+#endif -+#endif -+ -+ -+/** -+ @} -+ @} -+*/ -diff -u -r -N a/components/softdevice/s132v3/headers/ble_gap.h b/components/softdevice/s132v3/headers/ble_gap.h ---- a/components/softdevice/s132v3/headers/ble_gap.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v3/headers/ble_gap.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,1917 @@ -+/* -+ * Copyright (c) Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form must reproduce the above copyright notice, this -+ * list of conditions and the following disclaimer in the documentation and/or -+ * other materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other -+ * contributors to this software may be used to endorse or promote products -+ * derived from this software without specific prior written permission. -+ * -+ * 4. This software must only be used in a processor manufactured by Nordic -+ * Semiconductor ASA, or in a processor manufactured by a third party that -+ * is used in combination with a processor manufactured by Nordic Semiconductor. -+ * -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ * -+ */ -+ -+/** -+ @addtogroup BLE_GAP Generic Access Profile (GAP) -+ @{ -+ @brief Definitions and prototypes for the GAP interface. -+ */ -+ -+#ifndef BLE_GAP_H__ -+#define BLE_GAP_H__ -+ -+#include "ble_types.h" -+#include "ble_ranges.h" -+#include "nrf_svc.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/**@addtogroup BLE_GAP_ENUMERATIONS Enumerations -+ * @{ */ -+ -+/**@brief GAP API SVC numbers. -+ */ -+enum BLE_GAP_SVCS -+{ -+ SD_BLE_GAP_ADDR_SET = BLE_GAP_SVC_BASE, /**< Set own Bluetooth Address. */ -+ SD_BLE_GAP_ADDR_GET, /**< Get own Bluetooth Address. */ -+ SD_BLE_GAP_WHITELIST_SET, /**< Set active whitelist. */ -+ SD_BLE_GAP_DEVICE_IDENTITIES_SET, /**< Set device identity list. */ -+ SD_BLE_GAP_PRIVACY_SET, /**< Set Privacy settings*/ -+ SD_BLE_GAP_PRIVACY_GET, /**< Get Privacy settings*/ -+ SD_BLE_GAP_ADV_DATA_SET, /**< Set Advertising Data. */ -+ SD_BLE_GAP_ADV_START, /**< Start Advertising. */ -+ SD_BLE_GAP_ADV_STOP, /**< Stop Advertising. */ -+ SD_BLE_GAP_CONN_PARAM_UPDATE, /**< Connection Parameter Update. */ -+ SD_BLE_GAP_DISCONNECT, /**< Disconnect. */ -+ SD_BLE_GAP_TX_POWER_SET, /**< Set TX Power. */ -+ SD_BLE_GAP_APPEARANCE_SET, /**< Set Appearance. */ -+ SD_BLE_GAP_APPEARANCE_GET, /**< Get Appearance. */ -+ SD_BLE_GAP_PPCP_SET, /**< Set PPCP. */ -+ SD_BLE_GAP_PPCP_GET, /**< Get PPCP. */ -+ SD_BLE_GAP_DEVICE_NAME_SET, /**< Set Device Name. */ -+ SD_BLE_GAP_DEVICE_NAME_GET, /**< Get Device Name. */ -+ SD_BLE_GAP_AUTHENTICATE, /**< Initiate Pairing/Bonding. */ -+ SD_BLE_GAP_SEC_PARAMS_REPLY, /**< Reply with Security Parameters. */ -+ SD_BLE_GAP_AUTH_KEY_REPLY, /**< Reply with an authentication key. */ -+ SD_BLE_GAP_LESC_DHKEY_REPLY, /**< Reply with an LE Secure Connections DHKey. */ -+ SD_BLE_GAP_KEYPRESS_NOTIFY, /**< Notify of a keypress during an authentication procedure. */ -+ SD_BLE_GAP_LESC_OOB_DATA_GET, /**< Get the local LE Secure Connections OOB data. */ -+ SD_BLE_GAP_LESC_OOB_DATA_SET, /**< Set the remote LE Secure Connections OOB data. */ -+ SD_BLE_GAP_ENCRYPT, /**< Initiate encryption procedure. */ -+ SD_BLE_GAP_SEC_INFO_REPLY, /**< Reply with Security Information. */ -+ SD_BLE_GAP_CONN_SEC_GET, /**< Obtain connection security level. */ -+ SD_BLE_GAP_RSSI_START, /**< Start reporting of changes in RSSI. */ -+ SD_BLE_GAP_RSSI_STOP, /**< Stop reporting of changes in RSSI. */ -+ SD_BLE_GAP_SCAN_START, /**< Start Scanning. */ -+ SD_BLE_GAP_SCAN_STOP, /**< Stop Scanning. */ -+ SD_BLE_GAP_CONNECT, /**< Connect. */ -+ SD_BLE_GAP_CONNECT_CANCEL, /**< Cancel ongoing connection procedure. */ -+ SD_BLE_GAP_RSSI_GET, /**< Get the last RSSI sample. */ -+}; -+ -+/**@brief GAP Event IDs. -+ * IDs that uniquely identify an event coming from the stack to the application. -+ */ -+enum BLE_GAP_EVTS -+{ -+ BLE_GAP_EVT_CONNECTED = BLE_GAP_EVT_BASE, /**< Connection established. \n See @ref ble_gap_evt_connected_t. */ -+ BLE_GAP_EVT_DISCONNECTED, /**< Disconnected from peer. \n See @ref ble_gap_evt_disconnected_t. */ -+ BLE_GAP_EVT_CONN_PARAM_UPDATE, /**< Connection Parameters updated. \n See @ref ble_gap_evt_conn_param_update_t. */ -+ BLE_GAP_EVT_SEC_PARAMS_REQUEST, /**< Request to provide security parameters. \n Reply with @ref sd_ble_gap_sec_params_reply. \n See @ref ble_gap_evt_sec_params_request_t. */ -+ BLE_GAP_EVT_SEC_INFO_REQUEST, /**< Request to provide security information. \n Reply with @ref sd_ble_gap_sec_info_reply. \n See @ref ble_gap_evt_sec_info_request_t. */ -+ BLE_GAP_EVT_PASSKEY_DISPLAY, /**< Request to display a passkey to the user. \n In LESC Numeric Comparison, reply with @ref sd_ble_gap_auth_key_reply. \n See @ref ble_gap_evt_passkey_display_t. */ -+ BLE_GAP_EVT_KEY_PRESSED, /**< Notification of a keypress on the remote device.\n See @ref ble_gap_evt_key_pressed_t */ -+ BLE_GAP_EVT_AUTH_KEY_REQUEST, /**< Request to provide an authentication key. \n Reply with @ref sd_ble_gap_auth_key_reply. \n See @ref ble_gap_evt_auth_key_request_t. */ -+ BLE_GAP_EVT_LESC_DHKEY_REQUEST, /**< Request to calculate an LE Secure Connections DHKey. \n Reply with @ref sd_ble_gap_lesc_dhkey_reply. \n See @ref ble_gap_evt_lesc_dhkey_request_t */ -+ BLE_GAP_EVT_AUTH_STATUS, /**< Authentication procedure completed with status. \n See @ref ble_gap_evt_auth_status_t. */ -+ BLE_GAP_EVT_CONN_SEC_UPDATE, /**< Connection security updated. \n See @ref ble_gap_evt_conn_sec_update_t. */ -+ BLE_GAP_EVT_TIMEOUT, /**< Timeout expired. \n See @ref ble_gap_evt_timeout_t. */ -+ BLE_GAP_EVT_RSSI_CHANGED, /**< RSSI report. \n See @ref ble_gap_evt_rssi_changed_t. */ -+ BLE_GAP_EVT_ADV_REPORT, /**< Advertising report. \n See @ref ble_gap_evt_adv_report_t. */ -+ BLE_GAP_EVT_SEC_REQUEST, /**< Security Request. \n See @ref ble_gap_evt_sec_request_t. */ -+ BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST, /**< Connection Parameter Update Request. \n Reply with @ref sd_ble_gap_conn_param_update. \n See @ref ble_gap_evt_conn_param_update_request_t. */ -+ BLE_GAP_EVT_SCAN_REQ_REPORT, /**< Scan request report. \n See @ref ble_gap_evt_scan_req_report_t. */ -+}; -+ -+/**@brief GAP Option IDs. -+ * IDs that uniquely identify a GAP option. -+ */ -+enum BLE_GAP_OPTS -+{ -+ BLE_GAP_OPT_CH_MAP = BLE_GAP_OPT_BASE, /**< Channel Map. @ref ble_gap_opt_ch_map_t */ -+ BLE_GAP_OPT_LOCAL_CONN_LATENCY, /**< Local connection latency. @ref ble_gap_opt_local_conn_latency_t */ -+ BLE_GAP_OPT_PASSKEY, /**< Set passkey. @ref ble_gap_opt_passkey_t */ -+ BLE_GAP_OPT_SCAN_REQ_REPORT, /**< Scan request report. @ref ble_gap_opt_scan_req_report_t */ -+ BLE_GAP_OPT_COMPAT_MODE, /**< Compatibility mode. @ref ble_gap_opt_compat_mode_t */ -+ BLE_GAP_OPT_AUTH_PAYLOAD_TIMEOUT, /**< Set Authenticated payload timeout. @ref ble_gap_opt_auth_payload_timeout_t */ -+ BLE_GAP_OPT_EXT_LEN, /**< Extended length packets. @ref ble_gap_opt_ext_len_t */ -+}; -+ -+/** @} */ -+ -+/**@addtogroup BLE_GAP_DEFINES Defines -+ * @{ */ -+ -+/**@defgroup BLE_ERRORS_GAP SVC return values specific to GAP -+ * @{ */ -+#define BLE_ERROR_GAP_UUID_LIST_MISMATCH (NRF_GAP_ERR_BASE + 0x000) /**< UUID list does not contain an integral number of UUIDs. */ -+#define BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST (NRF_GAP_ERR_BASE + 0x001) /**< Use of Whitelist not permitted with discoverable advertising. */ -+#define BLE_ERROR_GAP_INVALID_BLE_ADDR (NRF_GAP_ERR_BASE + 0x002) /**< The upper two bits of the address do not correspond to the specified address type. */ -+#define BLE_ERROR_GAP_WHITELIST_IN_USE (NRF_GAP_ERR_BASE + 0x003) /**< Attempt to modify the whitelist while already in use by another operation. */ -+#define BLE_ERROR_GAP_DEVICE_IDENTITIES_IN_USE (NRF_GAP_ERR_BASE + 0x004) /**< Attempt to modify the device identity list while already in use by another operation. */ -+#define BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE (NRF_GAP_ERR_BASE + 0x005) /**< The device identity list contains entries with duplicate identity addresses. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_ROLES GAP Roles -+ * @note Not explicitly used in peripheral API, but will be relevant for central API. -+ * @{ */ -+#define BLE_GAP_ROLE_INVALID 0x0 /**< Invalid Role. */ -+#define BLE_GAP_ROLE_PERIPH 0x1 /**< Peripheral Role. */ -+#define BLE_GAP_ROLE_CENTRAL 0x2 /**< Central Role. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_TIMEOUT_SOURCES GAP Timeout sources -+ * @{ */ -+#define BLE_GAP_TIMEOUT_SRC_ADVERTISING 0x00 /**< Advertising timeout. */ -+#define BLE_GAP_TIMEOUT_SRC_SECURITY_REQUEST 0x01 /**< Security request timeout. */ -+#define BLE_GAP_TIMEOUT_SRC_SCAN 0x02 /**< Scanning timeout. */ -+#define BLE_GAP_TIMEOUT_SRC_CONN 0x03 /**< Connection timeout. */ -+#define BLE_GAP_TIMEOUT_SRC_AUTH_PAYLOAD 0x04 /**< Authenticated payload timeout. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_ADDR_TYPES GAP Address types -+ * @{ */ -+#define BLE_GAP_ADDR_TYPE_PUBLIC 0x00 /**< Public address. */ -+#define BLE_GAP_ADDR_TYPE_RANDOM_STATIC 0x01 /**< Random static address. */ -+#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE 0x02 /**< Random private resolvable address. */ -+#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE 0x03 /**< Random private non-resolvable address. */ -+/**@} */ -+ -+ -+/**@brief The default interval in seconds at which a private address is refreshed. */ -+#define BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S (900) /* 15 minutes. */ -+/**@brief The maximum interval in seconds at which a private address can be refreshed. */ -+#define BLE_GAP_MAX_PRIVATE_ADDR_CYCLE_INTERVAL_S (41400) /* 11 hours 30 minutes. */ -+ -+ -+/** @brief BLE address length. */ -+#define BLE_GAP_ADDR_LEN (6) -+ -+ -+/**@defgroup BLE_GAP_PRIVACY_MODES Privacy modes -+ * @{ */ -+#define BLE_GAP_PRIVACY_MODE_OFF 0x00 /**< Device will send and accept its identity address for its own address. */ -+#define BLE_GAP_PRIVACY_MODE_DEVICE_PRIVACY 0x01 /**< Device will send and accept only private addresses for its own address. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_AD_TYPE_DEFINITIONS GAP Advertising and Scan Response Data format -+ * @note Found at https://www.bluetooth.org/Technical/AssignedNumbers/generic_access_profile.htm -+ * @{ */ -+#define BLE_GAP_AD_TYPE_FLAGS 0x01 /**< Flags for discoverability. */ -+#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE 0x02 /**< Partial list of 16 bit service UUIDs. */ -+#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE 0x03 /**< Complete list of 16 bit service UUIDs. */ -+#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_MORE_AVAILABLE 0x04 /**< Partial list of 32 bit service UUIDs. */ -+#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_COMPLETE 0x05 /**< Complete list of 32 bit service UUIDs. */ -+#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_MORE_AVAILABLE 0x06 /**< Partial list of 128 bit service UUIDs. */ -+#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_COMPLETE 0x07 /**< Complete list of 128 bit service UUIDs. */ -+#define BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME 0x08 /**< Short local device name. */ -+#define BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME 0x09 /**< Complete local device name. */ -+#define BLE_GAP_AD_TYPE_TX_POWER_LEVEL 0x0A /**< Transmit power level. */ -+#define BLE_GAP_AD_TYPE_CLASS_OF_DEVICE 0x0D /**< Class of device. */ -+#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C 0x0E /**< Simple Pairing Hash C. */ -+#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R 0x0F /**< Simple Pairing Randomizer R. */ -+#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_TK_VALUE 0x10 /**< Security Manager TK Value. */ -+#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_OOB_FLAGS 0x11 /**< Security Manager Out Of Band Flags. */ -+#define BLE_GAP_AD_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE 0x12 /**< Slave Connection Interval Range. */ -+#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_16BIT 0x14 /**< List of 16-bit Service Solicitation UUIDs. */ -+#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_128BIT 0x15 /**< List of 128-bit Service Solicitation UUIDs. */ -+#define BLE_GAP_AD_TYPE_SERVICE_DATA 0x16 /**< Service Data - 16-bit UUID. */ -+#define BLE_GAP_AD_TYPE_PUBLIC_TARGET_ADDRESS 0x17 /**< Public Target Address. */ -+#define BLE_GAP_AD_TYPE_RANDOM_TARGET_ADDRESS 0x18 /**< Random Target Address. */ -+#define BLE_GAP_AD_TYPE_APPEARANCE 0x19 /**< Appearance. */ -+#define BLE_GAP_AD_TYPE_ADVERTISING_INTERVAL 0x1A /**< Advertising Interval. */ -+#define BLE_GAP_AD_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS 0x1B /**< LE Bluetooth Device Address. */ -+#define BLE_GAP_AD_TYPE_LE_ROLE 0x1C /**< LE Role. */ -+#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C256 0x1D /**< Simple Pairing Hash C-256. */ -+#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R256 0x1E /**< Simple Pairing Randomizer R-256. */ -+#define BLE_GAP_AD_TYPE_SERVICE_DATA_32BIT_UUID 0x20 /**< Service Data - 32-bit UUID. */ -+#define BLE_GAP_AD_TYPE_SERVICE_DATA_128BIT_UUID 0x21 /**< Service Data - 128-bit UUID. */ -+#define BLE_GAP_AD_TYPE_URI 0x24 /**< URI */ -+#define BLE_GAP_AD_TYPE_3D_INFORMATION_DATA 0x3D /**< 3D Information Data. */ -+#define BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA 0xFF /**< Manufacturer Specific Data. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_ADV_FLAGS GAP Advertisement Flags -+ * @{ */ -+#define BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE (0x01) /**< LE Limited Discoverable Mode. */ -+#define BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE (0x02) /**< LE General Discoverable Mode. */ -+#define BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED (0x04) /**< BR/EDR not supported. */ -+#define BLE_GAP_ADV_FLAG_LE_BR_EDR_CONTROLLER (0x08) /**< Simultaneous LE and BR/EDR, Controller. */ -+#define BLE_GAP_ADV_FLAG_LE_BR_EDR_HOST (0x10) /**< Simultaneous LE and BR/EDR, Host. */ -+#define BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE (BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE Limited Discoverable Mode, BR/EDR not supported. */ -+#define BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE (BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE General Discoverable Mode, BR/EDR not supported. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_ADV_INTERVALS GAP Advertising interval max and min -+ * @{ */ -+#define BLE_GAP_ADV_INTERVAL_MIN 0x0020 /**< Minimum Advertising interval in 625 us units, i.e. 20 ms. */ -+#define BLE_GAP_ADV_NONCON_INTERVAL_MIN 0x00A0 /**< Minimum Advertising interval in 625 us units for non connectable mode, i.e. 100 ms. */ -+#define BLE_GAP_ADV_INTERVAL_MAX 0x4000 /**< Maximum Advertising interval in 625 us units, i.e. 10.24 s. */ -+ /**@} */ -+ -+ -+/**@defgroup BLE_GAP_SCAN_INTERVALS GAP Scan interval max and min -+ * @{ */ -+#define BLE_GAP_SCAN_INTERVAL_MIN 0x0004 /**< Minimum Scan interval in 625 us units, i.e. 2.5 ms. */ -+#define BLE_GAP_SCAN_INTERVAL_MAX 0x4000 /**< Maximum Scan interval in 625 us units, i.e. 10.24 s. */ -+ /** @} */ -+ -+ -+/**@defgroup BLE_GAP_SCAN_WINDOW GAP Scan window max and min -+ * @{ */ -+#define BLE_GAP_SCAN_WINDOW_MIN 0x0004 /**< Minimum Scan window in 625 us units, i.e. 2.5 ms. */ -+#define BLE_GAP_SCAN_WINDOW_MAX 0x4000 /**< Maximum Scan window in 625 us units, i.e. 10.24 s. */ -+ /** @} */ -+ -+ -+/**@defgroup BLE_GAP_SCAN_TIMEOUT GAP Scan timeout max and min -+ * @{ */ -+#define BLE_GAP_SCAN_TIMEOUT_MIN 0x0001 /**< Minimum Scan timeout in seconds. */ -+#define BLE_GAP_SCAN_TIMEOUT_MAX 0xFFFF /**< Maximum Scan timeout in seconds. */ -+ /** @} */ -+ -+ -+/**@brief Maximum size of advertising data in octets. */ -+#define BLE_GAP_ADV_MAX_SIZE (31) -+ -+ -+/**@defgroup BLE_GAP_ADV_TYPES GAP Advertising types -+ * @{ */ -+#define BLE_GAP_ADV_TYPE_ADV_IND 0x00 /**< Connectable undirected. */ -+#define BLE_GAP_ADV_TYPE_ADV_DIRECT_IND 0x01 /**< Connectable directed. */ -+#define BLE_GAP_ADV_TYPE_ADV_SCAN_IND 0x02 /**< Scannable undirected. */ -+#define BLE_GAP_ADV_TYPE_ADV_NONCONN_IND 0x03 /**< Non connectable undirected. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_ADV_FILTER_POLICIES GAP Advertising filter policies -+ * @{ */ -+#define BLE_GAP_ADV_FP_ANY 0x00 /**< Allow scan requests and connect requests from any device. */ -+#define BLE_GAP_ADV_FP_FILTER_SCANREQ 0x01 /**< Filter scan requests with whitelist. */ -+#define BLE_GAP_ADV_FP_FILTER_CONNREQ 0x02 /**< Filter connect requests with whitelist. */ -+#define BLE_GAP_ADV_FP_FILTER_BOTH 0x03 /**< Filter both scan and connect requests with whitelist. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_ADV_TIMEOUT_VALUES GAP Advertising timeout values -+ * @{ */ -+#define BLE_GAP_ADV_TIMEOUT_LIMITED_MAX (180) /**< Maximum advertising time in limited discoverable mode (TGAP(lim_adv_timeout) = 180s). */ -+#define BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED (0) /**< Unlimited advertising in general discoverable mode. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_DISC_MODES GAP Discovery modes -+ * @{ */ -+#define BLE_GAP_DISC_MODE_NOT_DISCOVERABLE 0x00 /**< Not discoverable discovery Mode. */ -+#define BLE_GAP_DISC_MODE_LIMITED 0x01 /**< Limited Discovery Mode. */ -+#define BLE_GAP_DISC_MODE_GENERAL 0x02 /**< General Discovery Mode. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_IO_CAPS GAP IO Capabilities -+ * @{ */ -+#define BLE_GAP_IO_CAPS_DISPLAY_ONLY 0x00 /**< Display Only. */ -+#define BLE_GAP_IO_CAPS_DISPLAY_YESNO 0x01 /**< Display and Yes/No entry. */ -+#define BLE_GAP_IO_CAPS_KEYBOARD_ONLY 0x02 /**< Keyboard Only. */ -+#define BLE_GAP_IO_CAPS_NONE 0x03 /**< No I/O capabilities. */ -+#define BLE_GAP_IO_CAPS_KEYBOARD_DISPLAY 0x04 /**< Keyboard and Display. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_AUTH_KEY_TYPES GAP Authentication Key Types -+ * @{ */ -+#define BLE_GAP_AUTH_KEY_TYPE_NONE 0x00 /**< No key (may be used to reject). */ -+#define BLE_GAP_AUTH_KEY_TYPE_PASSKEY 0x01 /**< 6-digit Passkey. */ -+#define BLE_GAP_AUTH_KEY_TYPE_OOB 0x02 /**< Out Of Band data. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_KP_NOT_TYPES GAP Keypress Notification Types -+ * @{ */ -+#define BLE_GAP_KP_NOT_TYPE_PASSKEY_START 0x00 /**< Passkey entry started. */ -+#define BLE_GAP_KP_NOT_TYPE_PASSKEY_DIGIT_IN 0x01 /**< Passkey digit entered. */ -+#define BLE_GAP_KP_NOT_TYPE_PASSKEY_DIGIT_OUT 0x02 /**< Passkey digit erased. */ -+#define BLE_GAP_KP_NOT_TYPE_PASSKEY_CLEAR 0x03 /**< Passkey cleared. */ -+#define BLE_GAP_KP_NOT_TYPE_PASSKEY_END 0x04 /**< Passkey entry completed. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_SEC_STATUS GAP Security status -+ * @{ */ -+#define BLE_GAP_SEC_STATUS_SUCCESS 0x00 /**< Procedure completed with success. */ -+#define BLE_GAP_SEC_STATUS_TIMEOUT 0x01 /**< Procedure timed out. */ -+#define BLE_GAP_SEC_STATUS_PDU_INVALID 0x02 /**< Invalid PDU received. */ -+#define BLE_GAP_SEC_STATUS_RFU_RANGE1_BEGIN 0x03 /**< Reserved for Future Use range #1 begin. */ -+#define BLE_GAP_SEC_STATUS_RFU_RANGE1_END 0x80 /**< Reserved for Future Use range #1 end. */ -+#define BLE_GAP_SEC_STATUS_PASSKEY_ENTRY_FAILED 0x81 /**< Passkey entry failed (user cancelled or other). */ -+#define BLE_GAP_SEC_STATUS_OOB_NOT_AVAILABLE 0x82 /**< Out of Band Key not available. */ -+#define BLE_GAP_SEC_STATUS_AUTH_REQ 0x83 /**< Authentication requirements not met. */ -+#define BLE_GAP_SEC_STATUS_CONFIRM_VALUE 0x84 /**< Confirm value failed. */ -+#define BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP 0x85 /**< Pairing not supported. */ -+#define BLE_GAP_SEC_STATUS_ENC_KEY_SIZE 0x86 /**< Encryption key size. */ -+#define BLE_GAP_SEC_STATUS_SMP_CMD_UNSUPPORTED 0x87 /**< Unsupported SMP command. */ -+#define BLE_GAP_SEC_STATUS_UNSPECIFIED 0x88 /**< Unspecified reason. */ -+#define BLE_GAP_SEC_STATUS_REPEATED_ATTEMPTS 0x89 /**< Too little time elapsed since last attempt. */ -+#define BLE_GAP_SEC_STATUS_INVALID_PARAMS 0x8A /**< Invalid parameters. */ -+#define BLE_GAP_SEC_STATUS_DHKEY_FAILURE 0x8B /**< DHKey check failure. */ -+#define BLE_GAP_SEC_STATUS_NUM_COMP_FAILURE 0x8C /**< Numeric Comparison failure. */ -+#define BLE_GAP_SEC_STATUS_BR_EDR_IN_PROG 0x8D /**< BR/EDR pairing in progress. */ -+#define BLE_GAP_SEC_STATUS_X_TRANS_KEY_DISALLOWED 0x8E /**< BR/EDR Link Key cannot be used for LE keys. */ -+#define BLE_GAP_SEC_STATUS_RFU_RANGE2_BEGIN 0x8F /**< Reserved for Future Use range #2 begin. */ -+#define BLE_GAP_SEC_STATUS_RFU_RANGE2_END 0xFF /**< Reserved for Future Use range #2 end. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_SEC_STATUS_SOURCES GAP Security status sources -+ * @{ */ -+#define BLE_GAP_SEC_STATUS_SOURCE_LOCAL 0x00 /**< Local failure. */ -+#define BLE_GAP_SEC_STATUS_SOURCE_REMOTE 0x01 /**< Remote failure. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_CP_LIMITS GAP Connection Parameters Limits -+ * @{ */ -+#define BLE_GAP_CP_MIN_CONN_INTVL_NONE 0xFFFF /**< No new minimum connection interval specified in connect parameters. */ -+#define BLE_GAP_CP_MIN_CONN_INTVL_MIN 0x0006 /**< Lowest minimum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ -+#define BLE_GAP_CP_MIN_CONN_INTVL_MAX 0x0C80 /**< Highest minimum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ -+#define BLE_GAP_CP_MAX_CONN_INTVL_NONE 0xFFFF /**< No new maximum connection interval specified in connect parameters. */ -+#define BLE_GAP_CP_MAX_CONN_INTVL_MIN 0x0006 /**< Lowest maximum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ -+#define BLE_GAP_CP_MAX_CONN_INTVL_MAX 0x0C80 /**< Highest maximum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ -+#define BLE_GAP_CP_SLAVE_LATENCY_MAX 0x01F3 /**< Highest slave latency permitted, in connection events. */ -+#define BLE_GAP_CP_CONN_SUP_TIMEOUT_NONE 0xFFFF /**< No new supervision timeout specified in connect parameters. */ -+#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MIN 0x000A /**< Lowest supervision timeout permitted, in units of 10 ms, i.e. 100 ms. */ -+#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MAX 0x0C80 /**< Highest supervision timeout permitted, in units of 10 ms, i.e. 32 s. */ -+/**@} */ -+ -+ -+/**@brief GAP device name defines. */ -+#define BLE_GAP_DEVNAME_DEFAULT "nRF5x" /**< Default device name value. */ -+#define BLE_GAP_DEVNAME_DEFAULT_LEN 31 /**< Default number of octets in device name. */ -+#define BLE_GAP_DEVNAME_MAX_LEN 248 /**< Maximum number of octets in device name. */ -+ -+ -+/**@brief Disable RSSI events for connections */ -+#define BLE_GAP_RSSI_THRESHOLD_INVALID 0xFF -+ -+ -+/**@defgroup BLE_GAP_CONN_SEC_MODE_SET_MACROS GAP attribute security requirement setters -+ * -+ * See @ref ble_gap_conn_sec_mode_t. -+ * @{ */ -+/**@brief Set sec_mode pointed to by ptr to have no access rights.*/ -+#define BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(ptr) do {(ptr)->sm = 0; (ptr)->lv = 0;} while (0) -+/**@brief Set sec_mode pointed to by ptr to require no protection, open link.*/ -+#define BLE_GAP_CONN_SEC_MODE_SET_OPEN(ptr) do {(ptr)->sm = 1; (ptr)->lv = 1;} while (0) -+/**@brief Set sec_mode pointed to by ptr to require encryption, but no MITM protection.*/ -+#define BLE_GAP_CONN_SEC_MODE_SET_ENC_NO_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 2;} while (0) -+/**@brief Set sec_mode pointed to by ptr to require encryption and MITM protection.*/ -+#define BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 3;} while (0) -+/**@brief Set sec_mode pointed to by ptr to require LESC encryption and MITM protection.*/ -+#define BLE_GAP_CONN_SEC_MODE_SET_LESC_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 4;} while (0) -+/**@brief Set sec_mode pointed to by ptr to require signing or encryption, no MITM protection needed.*/ -+#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_NO_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 1;} while (0) -+/**@brief Set sec_mode pointed to by ptr to require signing or encryption with MITM protection.*/ -+#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_WITH_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 2;} while (0) -+/**@} */ -+ -+ -+/**@brief GAP Security Random Number Length. */ -+#define BLE_GAP_SEC_RAND_LEN 8 -+ -+ -+/**@brief GAP Security Key Length. */ -+#define BLE_GAP_SEC_KEY_LEN 16 -+ -+ -+/**@brief GAP LE Secure Connections Elliptic Curve Diffie-Hellman P-256 Public Key Length. */ -+#define BLE_GAP_LESC_P256_PK_LEN 64 -+ -+ -+/**@brief GAP LE Secure Connections Elliptic Curve Diffie-Hellman DHKey Length. */ -+#define BLE_GAP_LESC_DHKEY_LEN 32 -+ -+ -+/**@brief GAP Passkey Length. */ -+#define BLE_GAP_PASSKEY_LEN 6 -+ -+ -+/**@brief Maximum amount of addresses in the whitelist. */ -+#define BLE_GAP_WHITELIST_ADDR_MAX_COUNT (8) -+ -+ -+/**@brief Maximum amount of identities in the device identities list. */ -+#define BLE_GAP_DEVICE_IDENTITIES_MAX_COUNT (8) -+ -+ -+/**@defgroup GAP_SEC_MODES GAP Security Modes -+ * @{ */ -+#define BLE_GAP_SEC_MODE 0x00 /**< No key (may be used to reject). */ -+/**@} */ -+/** @} */ -+ -+ -+/**@addtogroup BLE_GAP_STRUCTURES Structures -+ * @{ */ -+ -+/**@brief Bluetooth Low Energy address. */ -+typedef struct -+{ -+ uint8_t addr_id_peer : 1; /**< Only valid for peer addresses. -+ Reference to peer in device identities list (as set with @ref sd_ble_gap_device_identities_set) when peer is using privacy. */ -+ uint8_t addr_type : 7; /**< See @ref BLE_GAP_ADDR_TYPES. */ -+ uint8_t addr[BLE_GAP_ADDR_LEN]; /**< 48-bit address, LSB format. */ -+} ble_gap_addr_t; -+ -+ -+/**@brief GAP connection parameters. -+ * -+ * @note When ble_conn_params_t is received in an event, both min_conn_interval and -+ * max_conn_interval will be equal to the connection interval set by the central. -+ * -+ * @note If both conn_sup_timeout and max_conn_interval are specified, then the following constraint applies: -+ * conn_sup_timeout * 4 > (1 + slave_latency) * max_conn_interval -+ * that corresponds to the following Bluetooth Spec requirement: -+ * The Supervision_Timeout in milliseconds shall be larger than -+ * (1 + Conn_Latency) * Conn_Interval_Max * 2, where Conn_Interval_Max is given in milliseconds. -+ */ -+typedef struct -+{ -+ uint16_t min_conn_interval; /**< Minimum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ -+ uint16_t max_conn_interval; /**< Maximum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ -+ uint16_t slave_latency; /**< Slave Latency in number of connection events, see @ref BLE_GAP_CP_LIMITS.*/ -+ uint16_t conn_sup_timeout; /**< Connection Supervision Timeout in 10 ms units, see @ref BLE_GAP_CP_LIMITS.*/ -+} ble_gap_conn_params_t; -+ -+ -+/**@brief GAP connection security modes. -+ * -+ * Security Mode 0 Level 0: No access permissions at all (this level is not defined by the Bluetooth Core specification).\n -+ * Security Mode 1 Level 1: No security is needed (aka open link).\n -+ * Security Mode 1 Level 2: Encrypted link required, MITM protection not necessary.\n -+ * Security Mode 1 Level 3: MITM protected encrypted link required.\n -+ * Security Mode 1 Level 4: LESC MITM protected encrypted link required.\n -+ * Security Mode 2 Level 1: Signing or encryption required, MITM protection not necessary.\n -+ * Security Mode 2 Level 2: MITM protected signing required, unless link is MITM protected encrypted.\n -+ */ -+typedef struct -+{ -+ uint8_t sm : 4; /**< Security Mode (1 or 2), 0 for no permissions at all. */ -+ uint8_t lv : 4; /**< Level (1, 2, 3 or 4), 0 for no permissions at all. */ -+ -+} ble_gap_conn_sec_mode_t; -+ -+ -+/**@brief GAP connection security status.*/ -+typedef struct -+{ -+ ble_gap_conn_sec_mode_t sec_mode; /**< Currently active security mode for this connection.*/ -+ uint8_t encr_key_size; /**< Length of currently active encryption key, 7 to 16 octets (only applicable for bonding procedures). */ -+} ble_gap_conn_sec_t; -+ -+ -+/** -+ * @brief Device name and its properties -+ * @note If @ref max_len is more than @ref BLE_GAP_DEVNAME_DEFAULT_LEN and vloc is set to @ref BLE_GATTS_VLOC_STACK, the attribute table size must be increased to have room for the longer device name (see @ref ble_gatts_enable_params_t). -+ */ -+typedef struct -+{ -+ ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ -+ uint8_t vloc:2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ -+ uint8_t *p_value; /**< Pointer to where the value (device name) is stored or will be stored.*/ -+ uint16_t current_len; /**< Current length in bytes of the memory pointed to by p_value.*/ -+ uint16_t max_len; /**< Maximum length in bytes of the memory pointed to by p_value.*/ -+} ble_gap_device_name_t; -+ -+ -+/** -+ * @brief BLE GAP initialization parameters. -+ */ -+typedef struct -+{ -+ uint8_t periph_conn_count; /**< Number of connections acting as a peripheral */ -+ uint8_t central_conn_count; /**< Number of connections acting as a central */ -+ uint8_t central_sec_count; /**< Number of SMP instances for all connections acting as a central. */ -+ ble_gap_device_name_t const *p_device_name; /**< Pointer to device name instance. If NULL, @ref sd_ble_enable() will set the device name to @ref BLE_GAP_DEVNAME_DEFAULT. */ -+} ble_gap_enable_params_t; -+ -+ -+/**@brief Identity Resolving Key. */ -+typedef struct -+{ -+ uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Array containing IRK. */ -+} ble_gap_irk_t; -+ -+ -+/**@brief Channel mask for RF channels used in advertising. */ -+typedef struct -+{ -+ uint8_t ch_37_off : 1; /**< Setting this bit to 1 will turn off advertising on channel 37 */ -+ uint8_t ch_38_off : 1; /**< Setting this bit to 1 will turn off advertising on channel 38 */ -+ uint8_t ch_39_off : 1; /**< Setting this bit to 1 will turn off advertising on channel 39 */ -+} ble_gap_adv_ch_mask_t; -+ -+ -+/**@brief GAP advertising parameters. */ -+typedef struct -+{ -+ uint8_t type; /**< See @ref BLE_GAP_ADV_TYPES. */ -+ ble_gap_addr_t const *p_peer_addr; /**< Address of a known peer. -+ - When privacy is enabled and the local device use @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE addresses, the device identity list is searched for a matching -+ entry. If the local IRK for that device identity is set, the local IRK for that device will be used to generate the advertiser address field in the advertise packet. -+ - If type is @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND, this must be set to the targeted initiator. If the initiator is in the device identity list, -+ the peer IRK for that device will be used to generate the initiator address field in the ADV_DIRECT_IND packet. */ -+ uint8_t fp; /**< Filter Policy, see @ref BLE_GAP_ADV_FILTER_POLICIES. */ -+ uint16_t interval; /**< Advertising interval between 0x0020 and 0x4000 in 0.625 ms units (20ms to 10.24s), see @ref BLE_GAP_ADV_INTERVALS. -+ - If type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND, this parameter must be set to 0 for high duty cycle directed advertising. -+ - If type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND, set @ref BLE_GAP_ADV_INTERVAL_MIN <= interval <= @ref BLE_GAP_ADV_INTERVAL_MAX for low duty cycle advertising.*/ -+ uint16_t timeout; /**< Advertising timeout between 0x0001 and 0x3FFF in seconds, 0x0000 disables timeout. See also @ref BLE_GAP_ADV_TIMEOUT_VALUES. If type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND, this parameter must be set to 0 for High duty cycle directed advertising. */ -+ ble_gap_adv_ch_mask_t channel_mask; /**< Advertising channel mask. See @ref ble_gap_adv_ch_mask_t. */ -+} ble_gap_adv_params_t; -+ -+ -+/**@brief GAP scanning parameters. */ -+typedef struct -+{ -+ uint8_t active : 1; /**< If 1, perform active scanning (scan requests). */ -+ uint8_t use_whitelist : 1; /**< If 1, filter advertisers using current active whitelist. */ -+ uint8_t adv_dir_report : 1; /**< If 1, also report directed advertisements where the initiator field is set to a private resolvable address, -+ even if the address did not resolve to an entry in the device identity list. A report will be generated -+ even if the peer is not in the whitelist. */ -+ uint16_t interval; /**< Scan interval between 0x0004 and 0x4000 in 0.625ms units (2.5ms to 10.24s). */ -+ uint16_t window; /**< Scan window between 0x0004 and 0x4000 in 0.625ms units (2.5ms to 10.24s). */ -+ uint16_t timeout; /**< Scan timeout between 0x0001 and 0xFFFF in seconds, 0x0000 disables timeout. */ -+} ble_gap_scan_params_t; -+ -+ -+/**@brief Device Privacy. -+ * -+ * The privacy feature provides a way for the device to avoid being tracked over a period of time. -+ * The privacy feature, when enabled, hides the local device identity and replaces it with a private address -+ * that is automatically refreshed at a specified interval. -+ * -+ * If a device still wants to be recognized by other peers, it needs to share it's Identity Resolving Key (IRK). -+ * With this key, a device can generate a random private address that can only be recognized by peers in possession of that key, -+ * and devices can establish connections without revealing their real identities. -+ * -+ * @note If the device IRK is updated, the new IRK becomes the one to be distributed in all -+ * bonding procedures performed after @ref sd_ble_gap_privacy_set returns. -+ * The IRK distributed during bonding procedure is the device IRK that is active when @ref sd_ble_gap_sec_params_reply is called. -+ */ -+typedef struct -+{ -+ uint8_t privacy_mode; /**< Privacy mode, see @ref BLE_GAP_PRIVACY_MODES. Default is @ref BLE_GAP_PRIVACY_MODE_OFF. */ -+ uint8_t private_addr_type; /**< The private address type must be either @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE or @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE. */ -+ uint16_t private_addr_cycle_s; /**< Private address cycle interval in seconds. Providing an address cycle value of 0 will use the default value defined by @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S. */ -+ ble_gap_irk_t *p_device_irk; /**< When used as input, pointer to IRK structure that will be used as the default IRK. If NULL, the device default IRK will be used. -+ When used as output, pointer to IRK structure where the current default IRK will be written to. If NULL, this argument is ignored. -+ By default, the default IRK is used to generate random private resolvable addresses for the local device unless instructed otherwise. */ -+} ble_gap_privacy_params_t; -+ -+ -+/** @brief Keys that can be exchanged during a bonding procedure. */ -+typedef struct -+{ -+ uint8_t enc : 1; /**< Long Term Key and Master Identification. */ -+ uint8_t id : 1; /**< Identity Resolving Key and Identity Address Information. */ -+ uint8_t sign : 1; /**< Connection Signature Resolving Key. */ -+ uint8_t link : 1; /**< Derive the Link Key from the LTK. */ -+} ble_gap_sec_kdist_t; -+ -+ -+/**@brief GAP security parameters. */ -+typedef struct -+{ -+ uint8_t bond : 1; /**< Perform bonding. */ -+ uint8_t mitm : 1; /**< Enable Man In The Middle protection. */ -+ uint8_t lesc : 1; /**< Enable LE Secure Connection pairing. */ -+ uint8_t keypress : 1; /**< Enable generation of keypress notifications. */ -+ uint8_t io_caps : 3; /**< IO capabilities, see @ref BLE_GAP_IO_CAPS. */ -+ uint8_t oob : 1; /**< Out Of Band data available. */ -+ uint8_t min_key_size; /**< Minimum encryption key size in octets between 7 and 16. If 0 then not applicable in this instance. */ -+ uint8_t max_key_size; /**< Maximum encryption key size in octets between min_key_size and 16. */ -+ ble_gap_sec_kdist_t kdist_own; /**< Key distribution bitmap: keys that the local device will distribute. */ -+ ble_gap_sec_kdist_t kdist_peer; /**< Key distribution bitmap: keys that the remote device will distribute. */ -+} ble_gap_sec_params_t; -+ -+ -+/**@brief GAP Encryption Information. */ -+typedef struct -+{ -+ uint8_t ltk[BLE_GAP_SEC_KEY_LEN]; /**< Long Term Key. */ -+ uint8_t lesc : 1; /**< Key generated using LE Secure Connections. */ -+ uint8_t auth : 1; /**< Authenticated Key. */ -+ uint8_t ltk_len : 6; /**< LTK length in octets. */ -+} ble_gap_enc_info_t; -+ -+ -+/**@brief GAP Master Identification. */ -+typedef struct -+{ -+ uint16_t ediv; /**< Encrypted Diversifier. */ -+ uint8_t rand[BLE_GAP_SEC_RAND_LEN]; /**< Random Number. */ -+} ble_gap_master_id_t; -+ -+ -+/**@brief GAP Signing Information. */ -+typedef struct -+{ -+ uint8_t csrk[BLE_GAP_SEC_KEY_LEN]; /**< Connection Signature Resolving Key. */ -+} ble_gap_sign_info_t; -+ -+ -+/**@brief GAP LE Secure Connections P-256 Public Key. */ -+typedef struct -+{ -+ uint8_t pk[BLE_GAP_LESC_P256_PK_LEN]; /**< LE Secure Connections Elliptic Curve Diffie-Hellman P-256 Public Key. Stored in the standard SMP protocol format: {X,Y} both in little-endian. */ -+} ble_gap_lesc_p256_pk_t; -+ -+ -+/**@brief GAP LE Secure Connections DHKey. */ -+typedef struct -+{ -+ uint8_t key[BLE_GAP_LESC_DHKEY_LEN]; /**< LE Secure Connections Elliptic Curve Diffie-Hellman Key. Stored in little-endian. */ -+} ble_gap_lesc_dhkey_t; -+ -+ -+/**@brief GAP LE Secure Connections OOB data. */ -+typedef struct -+{ -+ ble_gap_addr_t addr; /**< Bluetooth address of the device. */ -+ uint8_t r[BLE_GAP_SEC_KEY_LEN]; /**< Random Number. */ -+ uint8_t c[BLE_GAP_SEC_KEY_LEN]; /**< Confirm Value. */ -+} ble_gap_lesc_oob_data_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_CONNECTED. */ -+typedef struct -+{ -+ ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 -+ and the address is the device's identity address. */ -+ uint8_t role; /**< BLE role for this connection, see @ref BLE_GAP_ROLES */ -+ ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ -+} ble_gap_evt_connected_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_DISCONNECTED. */ -+typedef struct -+{ -+ uint8_t reason; /**< HCI error code, see @ref BLE_HCI_STATUS_CODES. */ -+} ble_gap_evt_disconnected_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_CONN_PARAM_UPDATE. */ -+typedef struct -+{ -+ ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ -+} ble_gap_evt_conn_param_update_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST. */ -+typedef struct -+{ -+ ble_gap_sec_params_t peer_params; /**< Initiator Security Parameters. */ -+} ble_gap_evt_sec_params_request_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_SEC_INFO_REQUEST. */ -+typedef struct -+{ -+ ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ -+ ble_gap_master_id_t master_id; /**< Master Identification for LTK lookup. */ -+ uint8_t enc_info : 1; /**< If 1, Encryption Information required. */ -+ uint8_t id_info : 1; /**< If 1, Identity Information required. */ -+ uint8_t sign_info : 1; /**< If 1, Signing Information required. */ -+} ble_gap_evt_sec_info_request_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_PASSKEY_DISPLAY. */ -+typedef struct -+{ -+ uint8_t passkey[BLE_GAP_PASSKEY_LEN]; /**< 6-digit passkey in ASCII ('0'-'9' digits only). */ -+ uint8_t match_request : 1; /**< If 1 requires the application to report the match using @ref sd_ble_gap_auth_key_reply -+ with either @ref BLE_GAP_AUTH_KEY_TYPE_NONE if there is no match or -+ @ref BLE_GAP_AUTH_KEY_TYPE_PASSKEY if there is a match. */ -+} ble_gap_evt_passkey_display_t; -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_KEY_PRESSED. */ -+typedef struct -+{ -+ uint8_t kp_not; /**< Keypress notification type, see @ref BLE_GAP_KP_NOT_TYPES. */ -+} ble_gap_evt_key_pressed_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_AUTH_KEY_REQUEST. */ -+typedef struct -+{ -+ uint8_t key_type; /**< See @ref BLE_GAP_AUTH_KEY_TYPES. */ -+} ble_gap_evt_auth_key_request_t; -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST. */ -+typedef struct -+{ -+ ble_gap_lesc_p256_pk_t *p_pk_peer; /**< LE Secure Connections remote P-256 Public Key. This will point to the application-supplied memory -+ inside the keyset during the call to @ref sd_ble_gap_sec_params_reply. */ -+ uint8_t oobd_req :1; /**< LESC OOB data required. A call to @ref sd_ble_gap_lesc_oob_data_set is required to complete the procedure. */ -+} ble_gap_evt_lesc_dhkey_request_t; -+ -+ -+/**@brief Security levels supported. -+ * @note See Bluetooth Specification Version 4.2 Volume 3, Part C, Chapter 10, Section 10.2.1. -+*/ -+typedef struct -+{ -+ uint8_t lv1 : 1; /**< If 1: Level 1 is supported. */ -+ uint8_t lv2 : 1; /**< If 1: Level 2 is supported. */ -+ uint8_t lv3 : 1; /**< If 1: Level 3 is supported. */ -+ uint8_t lv4 : 1; /**< If 1: Level 4 is supported. */ -+} ble_gap_sec_levels_t; -+ -+ -+/**@brief Encryption Key. */ -+typedef struct -+{ -+ ble_gap_enc_info_t enc_info; /**< Encryption Information. */ -+ ble_gap_master_id_t master_id; /**< Master Identification. */ -+} ble_gap_enc_key_t; -+ -+ -+/**@brief Identity Key. */ -+typedef struct -+{ -+ ble_gap_irk_t id_info; /**< Identity Resolving Key. */ -+ ble_gap_addr_t id_addr_info; /**< Identity Address. */ -+} ble_gap_id_key_t; -+ -+ -+/**@brief Security Keys. */ -+typedef struct -+{ -+ ble_gap_enc_key_t *p_enc_key; /**< Encryption Key, or NULL. */ -+ ble_gap_id_key_t *p_id_key; /**< Identity Key, or NULL. */ -+ ble_gap_sign_info_t *p_sign_key; /**< Signing Key, or NULL. */ -+ ble_gap_lesc_p256_pk_t *p_pk; /**< LE Secure Connections P-256 Public Key. When in debug mode the application must use the value defined -+ in the Core Bluetooth Specification v4.2 Vol.3, Part H, Section 2.3.5.6.1 */ -+} ble_gap_sec_keys_t; -+ -+ -+/**@brief Security key set for both local and peer keys. */ -+typedef struct -+{ -+ ble_gap_sec_keys_t keys_own; /**< Keys distributed by the local device. For LE Secure Connections the encryption key will be generated locally and will always be stored if bonding. */ -+ ble_gap_sec_keys_t keys_peer; /**< Keys distributed by the remote device. For LE Secure Connections, p_enc_key must always be NULL. */ -+} ble_gap_sec_keyset_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_AUTH_STATUS. */ -+typedef struct -+{ -+ uint8_t auth_status; /**< Authentication status, see @ref BLE_GAP_SEC_STATUS. */ -+ uint8_t error_src : 2; /**< On error, source that caused the failure, see @ref BLE_GAP_SEC_STATUS_SOURCES. */ -+ uint8_t bonded : 1; /**< Procedure resulted in a bond. */ -+ ble_gap_sec_levels_t sm1_levels; /**< Levels supported in Security Mode 1. */ -+ ble_gap_sec_levels_t sm2_levels; /**< Levels supported in Security Mode 2. */ -+ ble_gap_sec_kdist_t kdist_own; /**< Bitmap stating which keys were exchanged (distributed) by the local device. If bonding with LE Secure Connections, the enc bit will be always set. */ -+ ble_gap_sec_kdist_t kdist_peer; /**< Bitmap stating which keys were exchanged (distributed) by the remote device. If bonding with LE Secure Connections, the enc bit will never be set. */ -+} ble_gap_evt_auth_status_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_CONN_SEC_UPDATE. */ -+typedef struct -+{ -+ ble_gap_conn_sec_t conn_sec; /**< Connection security level. */ -+} ble_gap_evt_conn_sec_update_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_TIMEOUT. */ -+typedef struct -+{ -+ uint8_t src; /**< Source of timeout event, see @ref BLE_GAP_TIMEOUT_SOURCES. */ -+} ble_gap_evt_timeout_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_RSSI_CHANGED. */ -+typedef struct -+{ -+ int8_t rssi; /**< Received Signal Strength Indication in dBm. */ -+} ble_gap_evt_rssi_changed_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_ADV_REPORT. */ -+typedef struct -+{ -+ ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 -+ and the address is the device's identity address. */ -+ ble_gap_addr_t direct_addr; /**< Set when the scanner is unable to resolve the private resolvable address of the initiator -+ field of a directed advertisement packet and the scanner has been enabled to report this in @ref ble_gap_scan_params_t::adv_dir_report. */ -+ int8_t rssi; /**< Received Signal Strength Indication in dBm. */ -+ uint8_t scan_rsp : 1; /**< If 1, the report corresponds to a scan response and the type field may be ignored. */ -+ uint8_t type : 2; /**< See @ref BLE_GAP_ADV_TYPES. Only valid if the scan_rsp field is 0. */ -+ uint8_t dlen : 5; /**< Advertising or scan response data length. */ -+ uint8_t data[BLE_GAP_ADV_MAX_SIZE]; /**< Advertising or scan response data. */ -+} ble_gap_evt_adv_report_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_SEC_REQUEST. */ -+typedef struct -+{ -+ uint8_t bond : 1; /**< Perform bonding. */ -+ uint8_t mitm : 1; /**< Man In The Middle protection requested. */ -+ uint8_t lesc : 1; /**< LE Secure Connections requested. */ -+ uint8_t keypress : 1; /**< Generation of keypress notifications requested. */ -+} ble_gap_evt_sec_request_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST. */ -+typedef struct -+{ -+ ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ -+} ble_gap_evt_conn_param_update_request_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_SCAN_REQ_REPORT. */ -+typedef struct -+{ -+ int8_t rssi; /**< Received Signal Strength Indication in dBm. */ -+ ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 -+ and the address is the device's identity address. */ -+} ble_gap_evt_scan_req_report_t; -+ -+ -+/**@brief GAP event structure. */ -+typedef struct -+{ -+ uint16_t conn_handle; /**< Connection Handle on which event occurred. */ -+ union /**< union alternative identified by evt_id in enclosing struct. */ -+ { -+ ble_gap_evt_connected_t connected; /**< Connected Event Parameters. */ -+ ble_gap_evt_disconnected_t disconnected; /**< Disconnected Event Parameters. */ -+ ble_gap_evt_conn_param_update_t conn_param_update; /**< Connection Parameter Update Parameters. */ -+ ble_gap_evt_sec_params_request_t sec_params_request; /**< Security Parameters Request Event Parameters. */ -+ ble_gap_evt_sec_info_request_t sec_info_request; /**< Security Information Request Event Parameters. */ -+ ble_gap_evt_passkey_display_t passkey_display; /**< Passkey Display Event Parameters. */ -+ ble_gap_evt_key_pressed_t key_pressed; /**< Key Pressed Event Parameters. */ -+ ble_gap_evt_auth_key_request_t auth_key_request; /**< Authentication Key Request Event Parameters. */ -+ ble_gap_evt_lesc_dhkey_request_t lesc_dhkey_request; /**< LE Secure Connections DHKey calculation request. */ -+ ble_gap_evt_auth_status_t auth_status; /**< Authentication Status Event Parameters. */ -+ ble_gap_evt_conn_sec_update_t conn_sec_update; /**< Connection Security Update Event Parameters. */ -+ ble_gap_evt_timeout_t timeout; /**< Timeout Event Parameters. */ -+ ble_gap_evt_rssi_changed_t rssi_changed; /**< RSSI Event parameters. */ -+ ble_gap_evt_adv_report_t adv_report; /**< Advertising Report Event Parameters. */ -+ ble_gap_evt_sec_request_t sec_request; /**< Security Request Event Parameters. */ -+ ble_gap_evt_conn_param_update_request_t conn_param_update_request; /**< Connection Parameter Update Parameters. */ -+ ble_gap_evt_scan_req_report_t scan_req_report; /**< Scan Request Report parameters. */ -+ } params; /**< Event Parameters. */ -+} ble_gap_evt_t; -+ -+ -+/**@brief Channel Map option. -+ * Used with @ref sd_ble_opt_get to get the current channel map -+ * or @ref sd_ble_opt_set to set a new channel map. When setting the -+ * channel map, it applies to all current and future connections. When getting the -+ * current channel map, it applies to a single connection and the connection handle -+ * must be supplied. -+ * -+ * @note Setting the channel map may take some time, depending on connection parameters. -+ * The time taken may be different for each connection and the get operation will -+ * return the previous channel map until the new one has taken effect. -+ * -+ * @note After setting the channel map, by spec it can not be set again until at least 1 s has passed. -+ * See Bluetooth Specification Version 4.1 Volume 2, Part E, Section 7.3.46. -+ * -+ * @retval ::NRF_SUCCESS Get or set successful. -+ * @retval ::NRF_ERROR_BUSY Channel map was set again before enough time had passed. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied for get. -+ * @retval ::NRF_ERROR_NOT_SUPPORTED Returned by sd_ble_opt_set in peripheral-only SoftDevices. -+ * -+ */ -+typedef struct -+{ -+ uint16_t conn_handle; /**< Connection Handle (only applicable for get) */ -+ uint8_t ch_map[5]; /**< Channel Map (37-bit). */ -+} ble_gap_opt_ch_map_t; -+ -+ -+/**@brief Local connection latency option. -+ * -+ * Local connection latency is a feature which enables the slave to improve -+ * current consumption by ignoring the slave latency set by the peer. The -+ * local connection latency can only be set to a multiple of the slave latency, -+ * and cannot be longer than half of the supervision timeout. -+ * -+ * Used with @ref sd_ble_opt_set to set the local connection latency. The -+ * @ref sd_ble_opt_get is not supported for this option, but the actual -+ * local connection latency (unless set to NULL) is set as a return parameter -+ * when setting the option. -+ * -+ * @note The latency set will be truncated down to the closest slave latency event -+ * multiple, or the nearest multiple before half of the supervision timeout. -+ * -+ * @note The local connection latency is disabled by default, and needs to be enabled for new -+ * connections and whenever the connection is updated. -+ * -+ * @retval ::NRF_SUCCESS Set successfully. -+ * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. -+ */ -+typedef struct -+{ -+ uint16_t conn_handle; /**< Connection Handle */ -+ uint16_t requested_latency; /**< Requested local connection latency. */ -+ uint16_t * p_actual_latency; /**< Pointer to storage for the actual local connection latency (can be set to NULL to skip return value). */ -+} ble_gap_opt_local_conn_latency_t; -+ -+ -+/**@brief Passkey Option. -+ * -+ * Structure containing the passkey to be used during pairing. This can be used with @ref -+ * sd_ble_opt_set to make the SoftDevice use a pre-programmed passkey for authentication -+ * instead of generating a random one. -+ * -+ * @note Repeated pairing attempts using the same pre-programmed passkey makes pairing vulnerable to MITM attacks. -+ * -+ * @note @ref sd_ble_opt_get is not supported for this option. -+ * -+ */ -+typedef struct -+{ -+ uint8_t * p_passkey; /**< Pointer to 6-digit ASCII string (digit 0..9 only, no NULL termination) passkey to be used during pairing. If this is NULL, the SoftDevice will generate a random passkey if required.*/ -+} ble_gap_opt_passkey_t; -+ -+ -+/**@brief Scan request report option. -+ * -+ * This can be used with @ref sd_ble_opt_set to make the SoftDevice send -+ * @ref BLE_GAP_EVT_SCAN_REQ_REPORT events. -+ * -+ * @note Due to the limited space reserved for scan request report events, -+ * not all received scan requests will be reported. -+ * -+ * @note If whitelisting is used, only whitelisted requests are reported. -+ * -+ * @retval ::NRF_SUCCESS Set successfully. -+ * @retval ::NRF_ERROR_INVALID_STATE When advertising is ongoing while the option is set. -+ */ -+typedef struct -+{ -+ uint8_t enable : 1; /**< Enable scan request reports. */ -+} ble_gap_opt_scan_req_report_t; -+ -+ -+/**@brief Compatibility mode option. -+ * -+ * This can be used with @ref sd_ble_opt_set to enable and disable -+ * compatibility modes. Compatibility modes are disabled by default. -+ * -+ * @note Compatibility mode 1 enables interoperability with devices that do not support -+ * a value of 0 for the WinOffset parameter in the Link Layer CONNECT_REQ packet. -+ * -+ * @retval ::NRF_SUCCESS Set successfully. -+ * @retval ::NRF_ERROR_INVALID_STATE When connection creation is ongoing while mode 1 is set. -+ */ -+typedef struct -+{ -+ uint8_t mode_1_enable : 1; /**< Enable compatibility mode 1.*/ -+} ble_gap_opt_compat_mode_t; -+ -+/**@brief Data length extension option. -+ * -+ * This can be used with @ref sd_ble_opt_set to enable longer data packets. -+ * -+ * @note An rxtx_max_pdu_payload_size of 0 will result in the default minimum payload size of 27. -+ * @note Not supported by SoftDevices for nRF51 Series devices. -+ * @note The parameters for a connection are applied when a connection complete -+ * event is generated for the host. -+ * -+ * -+ * @retval ::NRF_SUCCESS Set successfully. -+ * @retval ::NRF_ERROR_INVALID_PARAM If the payload size is not 0 or a valid link layer PDU payload size. -+ * @retval ::NRF_ERROR_NOT_SUPPORTED If called on a SoftDevice designed for nRF51 (e.g. s130). -+ */ -+typedef struct -+{ -+ uint8_t rxtx_max_pdu_payload_size; /**< Max PDU payload size (in octets). */ -+} ble_gap_opt_ext_len_t; -+ -+ -+ -+/**@brief Authenticated payload timeout option. -+ * -+ * This can be used with @ref sd_ble_opt_set to change the Authenticated payload timeout to a value other than the default of 8 minutes. -+ * -+ * @note The authenticated payload timeout event ::BLE_GAP_TIMEOUT_SRC_AUTH_PAYLOAD will be generated -+ * if auth_payload_timeout time has elapsed without receiving a packet with a valid MIC on an encrypted -+ * link. -+ * -+ * @note The LE ping procedure will be initiated before the timer expires to give the peer a chance -+ * to reset the timer. In addition the stack will try to prioritize running of LE ping over other -+ * activities to increase chances of finishing LE ping before timer expires. To avoid side-effects -+ * on other activities, it is recommended to use high timeout values. -+ * Recommended timeout > 2*(connInterval * (6 + connSlaveLatency)). -+ * -+ * @retval ::NRF_SUCCESS Set successfully. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. auth_payload_timeout was outside of allowed range. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. -+ */ -+typedef struct -+{ -+ uint16_t conn_handle; /**< Connection Handle */ -+ uint16_t auth_payload_timeout; /**< Requested timeout in 10 ms unit. Maximum is 48 000 (=480 000 ms =8 min). Minimum is 1 (=10ms). */ -+} ble_gap_opt_auth_payload_timeout_t; -+ -+ -+/**@brief Option structure for GAP options. */ -+typedef union -+{ -+ ble_gap_opt_ch_map_t ch_map; /**< Parameters for the Channel Map option. */ -+ ble_gap_opt_local_conn_latency_t local_conn_latency; /**< Parameters for the Local connection latency option */ -+ ble_gap_opt_passkey_t passkey; /**< Parameters for the Passkey option.*/ -+ ble_gap_opt_scan_req_report_t scan_req_report; /**< Parameters for the scan request report option.*/ -+ ble_gap_opt_compat_mode_t compat_mode; /**< Parameters for the compatibility mode option.*/ -+ ble_gap_opt_ext_len_t ext_len; /**< Parameters for the extended length option. */ -+ ble_gap_opt_auth_payload_timeout_t auth_payload_timeout; /**< Parameters for the authenticated payload timeout option.*/ -+} ble_gap_opt_t; -+/**@} */ -+ -+ -+/**@addtogroup BLE_GAP_FUNCTIONS Functions -+ * @{ */ -+ -+/**@brief Set the local Bluetooth identity address. -+ * -+ * The local Bluetooth identity address is the address that identifies this device to other peers. -+ * The address type must be either @ref BLE_GAP_ADDR_TYPE_PUBLIC or @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC. -+ * The identity address cannot be changed while roles are running. -+ * -+ * @note This address will be distributed to the peer during bonding. -+ * If the address changes, the address stored in the peer device will not be valid and the ability to -+ * reconnect using the old address will be lost. -+ * -+ * @note By default the SoftDevice will set an address of type @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC upon being -+ * enabled. The address is a random number populated during the IC manufacturing process and remains unchanged -+ * for the lifetime of each IC. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_ADV_MSC} -+ * @endmscs -+ * -+ * @param[in] p_addr Pointer to address structure. -+ * -+ * @retval ::NRF_SUCCESS Address successfully set. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address. -+ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. -+ * @retval ::NRF_ERROR_INVALID_STATE The identity address cannot be changed while the roles are running. -+ */ -+SVCALL(SD_BLE_GAP_ADDR_SET, uint32_t, sd_ble_gap_addr_set(ble_gap_addr_t const *p_addr)); -+ -+ -+/**@brief Get local Bluetooth identity address. -+ * -+ * @note This will always return the identity address irrespective of the privacy settings, -+ * i.e. the address type will always be either @ref BLE_GAP_ADDR_TYPE_PUBLIC or @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC. -+ * -+ * @param[out] p_addr Pointer to address structure to be filled in. -+ * -+ * @retval ::NRF_SUCCESS Address successfully retrieved. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid or NULL pointer supplied. -+ */ -+SVCALL(SD_BLE_GAP_ADDR_GET, uint32_t, sd_ble_gap_addr_get(ble_gap_addr_t *p_addr)); -+ -+ -+/**@brief Set the active whitelist in the SoftDevice. -+ * -+ * @note Only one whitelist can be used at a time and the whitelist is shared between the BLE roles. -+ * The whitelist cannot be set if a BLE role is using the whitelist. -+ * -+ * @note If an address is resolved using the information in the device identity list, then the whitelist -+ * filter policy applies to the peer identity address and not the resolvable address sent on air. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} -+ * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_PRIVATE_SCAN_MSC} -+ * @endmscs -+ * -+ * @param[in] pp_wl_addrs Pointer to a whitelist of peer addresses, if NULL the whitelist will be cleared. -+ * @param[in] len Length of the whitelist, maximum @ref BLE_GAP_WHITELIST_ADDR_MAX_COUNT. -+ * -+ * @retval ::NRF_SUCCESS The whitelist is successfully set/cleared. -+ * @retval ::NRF_ERROR_INVALID_ADDR The whitelist (or one of its entries) provided is invalid. -+ * @retval ::BLE_ERROR_GAP_WHITELIST_IN_USE The whitelist is in use by a BLE role and cannot be set or cleared. -+ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. -+ * @retval ::NRF_ERROR_DATA_SIZE The given whitelist size is invalid (zero or too large); this can only return when -+ * pp_wl_addrs is not NULL. -+ */ -+SVCALL(SD_BLE_GAP_WHITELIST_SET, uint32_t, sd_ble_gap_whitelist_set(ble_gap_addr_t const * const * pp_wl_addrs, uint8_t len)); -+ -+ -+/**@brief Set device identity list. -+ * -+ * @note Only one device identity list can be used at a time and the list is shared between the BLE roles. -+ * The device identity list cannot be set if a BLE role is using the list. -+ * -+ * @param[in] pp_id_keys Pointer to an array of peer identity addresses and peer IRKs, if NULL the device identity list will be cleared. -+ * @param[in] pp_local_irks Pointer to an array of local IRKs. Each entry in the array maps to the entry in pp_id_keys at the same index. -+ * To fill in the list with the currently set device IRK for all peers, set to NULL. -+ * @param[in] len Length of the device identity list, maximum @ref BLE_GAP_DEVICE_IDENTITIES_MAX_COUNT. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_PRIVACY_ADV_MSC} -+ * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_MSC} -+ * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_PRIVATE_SCAN_MSC} -+ * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_CONN_PRIV_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_CONN_PRIV_MSC} -+ * @endmscs -+ * -+ * @retval ::NRF_SUCCESS The device identity list successfully set/cleared. -+ * @retval ::NRF_ERROR_INVALID_ADDR The device identity list (or one of its entries) provided is invalid. -+ This code may be returned if the local IRK list also has an invalid entry. -+ * @retval ::BLE_ERROR_GAP_DEVICE_IDENTITIES_IN_USE The device identity list is in use and cannot be set or cleared. -+ * @retval ::BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE The device identity list contains multiple entries with the same identity address. -+ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. -+ * @retval ::NRF_ERROR_DATA_SIZE The given device identity list size invalid (zero or too large); this can -+ * only return when pp_id_keys is not NULL. -+ */ -+SVCALL(SD_BLE_GAP_DEVICE_IDENTITIES_SET, uint32_t, sd_ble_gap_device_identities_set(ble_gap_id_key_t const * const * pp_id_keys, ble_gap_irk_t const * const * pp_local_irks, uint8_t len)); -+ -+ -+/**@brief Set privacy settings. -+ * -+ * @note Privacy settings cannot be set while BLE roles are running. -+ * -+ * @param[in] p_privacy_params Privacy settings. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_PRIVACY_ADV_MSC} -+ * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_MSC} -+ * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} -+ * @endmscs -+ * -+ * @retval ::NRF_SUCCESS Set successfully. -+ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. -+ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. -+ * @retval ::NRF_ERROR_INVALID_ADDR The pointer to privacy settings is NULL or invalid. -+ Otherwise, the p_device_irk pointer in privacy parameter is an invalid pointer. -+ * @retval ::NRF_ERROR_INVALID_PARAM Out of range parameters are provided. -+ * @retval ::NRF_ERROR_INVALID_STATE Privacy settings cannot be changed while BLE roles using privacy are enabled. -+ */ -+SVCALL(SD_BLE_GAP_PRIVACY_SET, uint32_t, sd_ble_gap_privacy_set(ble_gap_privacy_params_t const *p_privacy_params)); -+ -+ -+/**@brief Get privacy settings. -+ * -+ * @note The privacy settings returned include the current device irk as well. -+ * -+ * @param[in] p_privacy_params Privacy settings. -+ * -+ * @retval ::NRF_SUCCESS Privacy settings read. -+ * @retval ::NRF_ERROR_INVALID_ADDR The pointer given for returning the privacy settings may be NULL or invalid. -+ Otherwise, the p_device_irk pointer in privacy parameter is an invalid pointer. -+ */ -+SVCALL(SD_BLE_GAP_PRIVACY_GET, uint32_t, sd_ble_gap_privacy_get(ble_gap_privacy_params_t *p_privacy_params)); -+ -+ -+/**@brief Set, clear or update advertising and scan response data. -+ * -+ * @note The format of the advertising data will be checked by this call to ensure interoperability. -+ * Limitations imposed by this API call to the data provided include having a flags data type in the scan response data and -+ * duplicating the local name in the advertising data and scan response data. -+ * -+ * @note To clear the advertising data and set it to a 0-length packet, simply provide a valid pointer (p_data/p_sr_data) with its corresponding -+ * length (dlen/srdlen) set to 0. -+ * -+ * @note The call will fail if p_data and p_sr_data are both NULL since this would have no effect. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_ADV_MSC} -+ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} -+ * @endmscs -+ * -+ * @param[in] p_data Raw data to be placed in advertising packet. If NULL, no changes are made to the current advertising packet data. -+ * @param[in] dlen Data length for p_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_data is NULL, can be 0 if p_data is not NULL. -+ * @param[in] p_sr_data Raw data to be placed in scan response packet. If NULL, no changes are made to the current scan response packet data. -+ * @param[in] srdlen Data length for p_sr_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_sr_data is NULL, can be 0 if p_data is not NULL. -+ * -+ * @retval ::NRF_SUCCESS Advertising data successfully updated or cleared. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, both p_data and p_sr_data cannot be NULL. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_FLAGS Invalid combination of advertising flags supplied. -+ * @retval ::NRF_ERROR_INVALID_DATA Invalid data type(s) supplied, check the advertising data format specification. -+ * @retval ::NRF_ERROR_INVALID_LENGTH Invalid data length(s) supplied. -+ * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported data type. -+ * @retval ::BLE_ERROR_GAP_UUID_LIST_MISMATCH Invalid UUID list supplied. -+ */ -+SVCALL(SD_BLE_GAP_ADV_DATA_SET, uint32_t, sd_ble_gap_adv_data_set(uint8_t const *p_data, uint8_t dlen, uint8_t const *p_sr_data, uint8_t srdlen)); -+ -+ -+/**@brief Start advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). -+ * -+ * @note An application can start an advertising procedure for broadcasting purposes while a connection -+ * is active. After a @ref BLE_GAP_EVT_CONNECTED event is received, this function may therefore -+ * be called to start a broadcast advertising procedure. The advertising procedure -+ * cannot however be connectable (it must be of type @ref BLE_GAP_ADV_TYPE_ADV_SCAN_IND or -+ * @ref BLE_GAP_ADV_TYPE_ADV_NONCONN_IND). @note Only one advertiser may be active at any time. -+ * -+ * @events -+ * @event{@ref BLE_GAP_EVT_CONNECTED, Generated after connection has been established through connectable advertising.} -+ * @event{@ref BLE_GAP_EVT_TIMEOUT, Advertisement has timed out.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_ADV_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_CONN_PRIV_MSC} -+ * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} -+ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} -+ * @endmscs -+ * -+ * @param[in] p_adv_params Pointer to advertising parameters structure. -+ * -+ * @retval ::NRF_SUCCESS The BLE stack has started advertising. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::NRF_ERROR_CONN_COUNT The limit of available connections has been reached; connectable advertiser cannot be started. -+ * @retval ::NRF_ERROR_NO_MEM The configured memory pools (see @ref ble_conn_bw_counts_t) are not large enough for the -+ * bandwidth selected for this connection. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check the accepted ranges and limits. -+ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Bluetooth address supplied. -+ * @retval ::BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST Discoverable mode and whitelist incompatible. -+ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. -+ * @retval ::NRF_ERROR_RESOURCES Not enough BLE role slots available. -+ * Stop one or more currently active roles (Central, Peripheral or Observer) and try again -+ */ -+SVCALL(SD_BLE_GAP_ADV_START, uint32_t, sd_ble_gap_adv_start(ble_gap_adv_params_t const *p_adv_params)); -+ -+ -+/**@brief Stop advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_ADV_MSC} -+ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} -+ * @endmscs -+ * -+ * @retval ::NRF_SUCCESS The BLE stack has stopped advertising. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation (most probably not in advertising state). -+ */ -+SVCALL(SD_BLE_GAP_ADV_STOP, uint32_t, sd_ble_gap_adv_stop(void)); -+ -+ -+/**@brief Update connection parameters. -+ * -+ * @details In the central role this will initiate a Link Layer connection parameter update procedure, -+ * otherwise in the peripheral role, this will send the corresponding L2CAP request and wait for -+ * the central to perform the procedure. In both cases, and regardless of success or failure, the application -+ * will be informed of the result with a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE event. -+ * -+ * @details This function can be used as a central both to reply to a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST or to start the procedure unrequested. -+ * -+ * @events -+ * @event{@ref BLE_GAP_EVT_CONN_PARAM_UPDATE, Result of the connection parameter update procedure.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_CPU_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} -+ * @mmsc{@ref BLE_GAP_MULTILINK_CPU_MSC} -+ * @mmsc{@ref BLE_GAP_MULTILINK_CTRL_PROC_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_CPU_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] p_conn_params Pointer to desired connection parameters. If NULL is provided on a peripheral role, -+ * the parameters in the PPCP characteristic of the GAP service will be used instead. -+ * If NULL is provided on a central role and in response to a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST, the peripheral request will be rejected -+ * -+ * @retval ::NRF_SUCCESS The Connection Update procedure has been started successfully. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::NRF_ERROR_BUSY Procedure already in progress or not allowed at this time, process pending events and wait for pending procedures to complete and retry. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. -+ */ -+SVCALL(SD_BLE_GAP_CONN_PARAM_UPDATE, uint32_t, sd_ble_gap_conn_param_update(uint16_t conn_handle, ble_gap_conn_params_t const *p_conn_params)); -+ -+ -+/**@brief Disconnect (GAP Link Termination). -+ * -+ * @details This call initiates the disconnection procedure, and its completion will be communicated to the application -+ * with a @ref BLE_GAP_EVT_DISCONNECTED event. -+ * -+ * @events -+ * @event{@ref BLE_GAP_EVT_DISCONNECTED, Generated when disconnection procedure is complete.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_CONN_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] hci_status_code HCI status code, see @ref BLE_HCI_STATUS_CODES (accepted values are @ref BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION and @ref BLE_HCI_CONN_INTERVAL_UNACCEPTABLE). -+ * -+ * @retval ::NRF_SUCCESS The disconnection procedure has been started successfully. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation (disconnection is already in progress). -+ */ -+SVCALL(SD_BLE_GAP_DISCONNECT, uint32_t, sd_ble_gap_disconnect(uint16_t conn_handle, uint8_t hci_status_code)); -+ -+ -+/**@brief Set the radio's transmit power. -+ * -+ * @param[in] tx_power Radio transmit power in dBm (accepted values are -40, -30, -20, -16, -12, -8, -4, 0, 3, and 4 dBm). -+ * -+ * @note The +3dBm setting is only available on nRF52 series ICs. -+ * @note The -30dBm setting is only available on nRF51 series ICs. -+ * @note The -40dBm setting is only available on nRF52 series ICs. -+ * -+ * @retval ::NRF_SUCCESS Successfully changed the transmit power. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ */ -+SVCALL(SD_BLE_GAP_TX_POWER_SET, uint32_t, sd_ble_gap_tx_power_set(int8_t tx_power)); -+ -+ -+/**@brief Set GAP Appearance value. -+ * -+ * @param[in] appearance Appearance (16-bit), see @ref BLE_APPEARANCES. -+ * -+ * @retval ::NRF_SUCCESS Appearance value set successfully. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ */ -+SVCALL(SD_BLE_GAP_APPEARANCE_SET, uint32_t, sd_ble_gap_appearance_set(uint16_t appearance)); -+ -+ -+/**@brief Get GAP Appearance value. -+ * -+ * @param[out] p_appearance Pointer to appearance (16-bit) to be filled in, see @ref BLE_APPEARANCES. -+ * -+ * @retval ::NRF_SUCCESS Appearance value retrieved successfully. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ */ -+SVCALL(SD_BLE_GAP_APPEARANCE_GET, uint32_t, sd_ble_gap_appearance_get(uint16_t *p_appearance)); -+ -+ -+/**@brief Set GAP Peripheral Preferred Connection Parameters. -+ * -+ * @param[in] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure with the desired parameters. -+ * -+ * @retval ::NRF_SUCCESS Peripheral Preferred Connection Parameters set successfully. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ */ -+SVCALL(SD_BLE_GAP_PPCP_SET, uint32_t, sd_ble_gap_ppcp_set(ble_gap_conn_params_t const *p_conn_params)); -+ -+ -+/**@brief Get GAP Peripheral Preferred Connection Parameters. -+ * -+ * @param[out] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure where the parameters will be stored. -+ * -+ * @retval ::NRF_SUCCESS Peripheral Preferred Connection Parameters retrieved successfully. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ */ -+SVCALL(SD_BLE_GAP_PPCP_GET, uint32_t, sd_ble_gap_ppcp_get(ble_gap_conn_params_t *p_conn_params)); -+ -+ -+/**@brief Set GAP device name. -+ * -+ * @param[in] p_write_perm Write permissions for the Device Name characteristic, see @ref ble_gap_conn_sec_mode_t. -+ * @param[in] p_dev_name Pointer to a UTF-8 encoded, non NULL-terminated string. -+ * @param[in] len Length of the UTF-8, non NULL-terminated string pointed to by p_dev_name in octets (must be smaller or equal than @ref BLE_GAP_DEVNAME_MAX_LEN). -+ * -+ * @note If the device name is located in application flash memory (see @ref ble_gap_device_name_t), it cannot be changed. Then @ref NRF_ERROR_FORBIDDEN will be returned. -+ * -+ * @retval ::NRF_SUCCESS GAP device name and permissions set successfully. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. -+ * @retval ::NRF_ERROR_FORBIDDEN Device name is not writable. -+ */ -+SVCALL(SD_BLE_GAP_DEVICE_NAME_SET, uint32_t, sd_ble_gap_device_name_set(ble_gap_conn_sec_mode_t const *p_write_perm, uint8_t const *p_dev_name, uint16_t len)); -+ -+ -+/**@brief Get GAP device name. -+ * -+ * @note If the device name is longer than the size of the supplied buffer, -+ * p_len will return the complete device name length, -+ * and not the number of bytes actually returned in p_dev_name. -+ * The application may use this information to allocate a suitable buffer size. -+ * -+ * @param[out] p_dev_name Pointer to an empty buffer where the UTF-8 non NULL-terminated string will be placed. Set to NULL to obtain the complete device name length. -+ * @param[in,out] p_len Length of the buffer pointed by p_dev_name, complete device name length on output. -+ * -+ * @retval ::NRF_SUCCESS GAP device name retrieved successfully. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. -+ */ -+SVCALL(SD_BLE_GAP_DEVICE_NAME_GET, uint32_t, sd_ble_gap_device_name_get(uint8_t *p_dev_name, uint16_t *p_len)); -+ -+ -+/**@brief Initiate the GAP Authentication procedure. -+ * -+ * @details In the central role, this function will send an SMP Pairing Request (or an SMP Pairing Failed if rejected), -+ * otherwise in the peripheral role, an SMP Security Request will be sent. -+ * -+ * @events -+ * @event{Depending on the security parameters set and the packet exchanges with the peer\, the following events may be generated:} -+ * @event{@ref BLE_GAP_EVT_SEC_PARAMS_REQUEST} -+ * @event{@ref BLE_GAP_EVT_SEC_INFO_REQUEST} -+ * @event{@ref BLE_GAP_EVT_PASSKEY_DISPLAY} -+ * @event{@ref BLE_GAP_EVT_KEY_PRESSED} -+ * @event{@ref BLE_GAP_EVT_AUTH_KEY_REQUEST} -+ * @event{@ref BLE_GAP_EVT_LESC_DHKEY_REQUEST} -+ * @event{@ref BLE_GAP_EVT_CONN_SEC_UPDATE} -+ * @event{@ref BLE_GAP_EVT_AUTH_STATUS} -+ * @event{@ref BLE_GAP_EVT_TIMEOUT} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_PERIPH_SEC_REQ_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_SEC_REQ_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_PAIRING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] p_sec_params Pointer to the @ref ble_gap_sec_params_t structure with the security parameters to be used during the pairing or bonding procedure. -+ * In the peripheral role, only the bond, mitm, lesc and keypress fields of this structure are used. -+ * In the central role, this pointer may be NULL to reject a Security Request. -+ * -+ * @retval ::NRF_SUCCESS Successfully initiated authentication procedure. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. -+ * @retval ::NRF_ERROR_NO_MEM The maximum number of authentication procedures that can run in parallel for the given role is reached. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ * @retval ::NRF_ERROR_NOT_SUPPORTED Setting of sign or link fields in @ref ble_gap_sec_kdist_t not supported. -+ * @retval ::NRF_ERROR_TIMEOUT A SMP timeout has occurred, and further SMP operations on this link is prohibited. -+ */ -+SVCALL(SD_BLE_GAP_AUTHENTICATE, uint32_t, sd_ble_gap_authenticate(uint16_t conn_handle, ble_gap_sec_params_t const *p_sec_params)); -+ -+ -+/**@brief Reply with GAP security parameters. -+ * -+ * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. -+ * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. -+ * -+ * @events -+ * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_PERIPH_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_CENTRAL_OOB_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_STATIC_PK_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_CONFIRM_FAIL_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_PAIRING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_PD_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_KS_TOO_SMALL_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_APP_ERROR_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_REMOTE_PAIRING_FAIL_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_TIMEOUT_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_PAIRING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] sec_status Security status, see @ref BLE_GAP_SEC_STATUS. -+ * @param[in] p_sec_params Pointer to a @ref ble_gap_sec_params_t security parameters structure. In the central role this must be set to NULL, as the parameters have -+ * already been provided during a previous call to @ref sd_ble_gap_authenticate. -+ * @param[in,out] p_sec_keyset Pointer to a @ref ble_gap_sec_keyset_t security keyset structure. Any keys generated and/or distributed as a result of the ongoing security procedure -+ * will be stored into the memory referenced by the pointers inside this structure. The keys will be stored and available to the application -+ * upon reception of a @ref BLE_GAP_EVT_AUTH_STATUS event. -+ * Note that the SoftDevice expects the application to provide memory for storing the -+ * peer's keys. So it must be ensured that the relevant pointers inside this structure are not NULL. The pointers to the local key -+ * can, however, be NULL, in which case, the local key data will not be available to the application upon reception of the -+ * @ref BLE_GAP_EVT_AUTH_STATUS event. -+ * -+ * @retval ::NRF_SUCCESS Successfully accepted security parameter from the application. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ * @retval ::NRF_ERROR_NOT_SUPPORTED Setting of sign or link fields in @ref ble_gap_sec_kdist_t not supported. -+ */ -+SVCALL(SD_BLE_GAP_SEC_PARAMS_REPLY, uint32_t, sd_ble_gap_sec_params_reply(uint16_t conn_handle, uint8_t sec_status, ble_gap_sec_params_t const *p_sec_params, ble_gap_sec_keyset_t const *p_sec_keyset)); -+ -+ -+/**@brief Reply with an authentication key. -+ * -+ * @details This function is only used to reply to a @ref BLE_GAP_EVT_AUTH_KEY_REQUEST or a @ref BLE_GAP_EVT_PASSKEY_DISPLAY, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. -+ * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. -+ * -+ * @events -+ * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_CENTRAL_OOB_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] key_type See @ref BLE_GAP_AUTH_KEY_TYPES. -+ * @param[in] p_key If key type is @ref BLE_GAP_AUTH_KEY_TYPE_NONE, then NULL. -+ * If key type is @ref BLE_GAP_AUTH_KEY_TYPE_PASSKEY, then a 6-byte ASCII string (digit 0..9 only, no NULL termination) -+ * or NULL when confirming LE Secure Connections Numeric Comparison. -+ * If key type is @ref BLE_GAP_AUTH_KEY_TYPE_OOB, then a 16-byte OOB key value in Little Endian format. -+ * -+ * @retval ::NRF_SUCCESS Authentication key successfully set. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ */ -+SVCALL(SD_BLE_GAP_AUTH_KEY_REPLY, uint32_t, sd_ble_gap_auth_key_reply(uint16_t conn_handle, uint8_t key_type, uint8_t const *p_key)); -+ -+/**@brief Reply with an LE Secure connections DHKey. -+ * -+ * @details This function is only used to reply to a @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. -+ * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. -+ * -+ * @events -+ * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_PAIRING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_PD_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] p_dhkey LE Secure Connections DHKey. -+ * -+ * @retval ::NRF_SUCCESS DHKey successfully set. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ */ -+SVCALL(SD_BLE_GAP_LESC_DHKEY_REPLY, uint32_t, sd_ble_gap_lesc_dhkey_reply(uint16_t conn_handle, ble_gap_lesc_dhkey_t const *p_dhkey)); -+ -+/**@brief Notify the peer of a local keypress. -+ * -+ * @details This function can only be used when an authentication procedure using LE Secure Connection is in progress. Calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] kp_not See @ref BLE_GAP_KP_NOT_TYPES. -+ * -+ * @retval ::NRF_SUCCESS Keypress notification successfully queued for transmission. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either not entering a passkey or keypresses have not been enabled by both peers. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ * @retval ::NRF_ERROR_BUSY The BLE stack is busy. Retry at later time. -+ */ -+SVCALL(SD_BLE_GAP_KEYPRESS_NOTIFY, uint32_t, sd_ble_gap_keypress_notify(uint16_t conn_handle, uint8_t kp_not)); -+ -+/**@brief Generate a set of OOB data to send to a peer out of band. -+ * -+ * @note The @ref ble_gap_addr_t included in the OOB data returned will be the currently active one (or, if a connection has already been established, -+ * the one used during connection setup). The application may manually overwrite it with an updated value. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. Can be BLE_CONN_HANDLE_INVALID if a BLE connection has not been established yet. -+ * @param[in] p_pk_own LE Secure Connections local P-256 Public Key. -+ * @param[out] p_oobd_own The OOB data to be sent out of band to a peer. -+ * -+ * @retval ::NRF_SUCCESS OOB data successfully generated. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ */ -+SVCALL(SD_BLE_GAP_LESC_OOB_DATA_GET, uint32_t, sd_ble_gap_lesc_oob_data_get(uint16_t conn_handle, ble_gap_lesc_p256_pk_t const *p_pk_own, ble_gap_lesc_oob_data_t *p_oobd_own)); -+ -+/**@brief Provide the OOB data sent/received out of band. -+ * -+ * @note At least one of the 2 pointers provided must be different from NULL. -+ * @note An authentication procedure with OOB selected as an algorithm must be in progress when calling this function. -+ * @note A @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST event with the oobd_req set to 1 must have been received prior to calling this function. -+ * -+ * @events -+ * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] p_oobd_own The OOB data sent out of band to a peer or NULL if none sent. -+ * @param[in] p_oobd_peer The OOB data received out of band from a peer or NULL if none received. -+ * -+ * @retval ::NRF_SUCCESS OOB data accepted. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ */ -+SVCALL(SD_BLE_GAP_LESC_OOB_DATA_SET, uint32_t, sd_ble_gap_lesc_oob_data_set(uint16_t conn_handle, ble_gap_lesc_oob_data_t const *p_oobd_own, ble_gap_lesc_oob_data_t const *p_oobd_peer)); -+ -+/**@brief Initiate GAP Encryption procedure. -+ * -+ * @details In the central role, this function will initiate the encryption procedure using the encryption information provided. -+ * -+ * @events -+ * @event{@ref BLE_GAP_EVT_CONN_SEC_UPDATE, The connection security has been updated.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_ENC_MSC} -+ * @mmsc{@ref BLE_GAP_MULTILINK_CTRL_PROC_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_SEC_REQ_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] p_master_id Pointer to a @ref ble_gap_master_id_t master identification structure. -+ * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. -+ * -+ * @retval ::NRF_SUCCESS Successfully initiated authentication procedure. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ * @retval ::BLE_ERROR_INVALID_ROLE Operation is not supported in the Peripheral role. -+ * @retval ::NRF_ERROR_BUSY Procedure already in progress or not allowed at this time, wait for pending procedures to complete and retry. -+ */ -+SVCALL(SD_BLE_GAP_ENCRYPT, uint32_t, sd_ble_gap_encrypt(uint16_t conn_handle, ble_gap_master_id_t const *p_master_id, ble_gap_enc_info_t const *p_enc_info)); -+ -+ -+/**@brief Reply with GAP security information. -+ * -+ * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_INFO_REQUEST, calling it at other times will result in @ref NRF_ERROR_INVALID_STATE. -+ * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. -+ * @note Data signing is not yet supported, and p_sign_info must therefore be NULL. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_PERIPH_ENC_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. May be NULL to signal none is available. -+ * @param[in] p_id_info Pointer to a @ref ble_gap_irk_t identity information structure. May be NULL to signal none is available. -+ * @param[in] p_sign_info Pointer to a @ref ble_gap_sign_info_t signing information structure. May be NULL to signal none is available. -+ * -+ * @retval ::NRF_SUCCESS Successfully accepted security information. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ */ -+SVCALL(SD_BLE_GAP_SEC_INFO_REPLY, uint32_t, sd_ble_gap_sec_info_reply(uint16_t conn_handle, ble_gap_enc_info_t const *p_enc_info, ble_gap_irk_t const *p_id_info, ble_gap_sign_info_t const *p_sign_info)); -+ -+ -+/**@brief Get the current connection security. -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[out] p_conn_sec Pointer to a @ref ble_gap_conn_sec_t structure to be filled in. -+ * -+ * @retval ::NRF_SUCCESS Current connection security successfully retrieved. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ */ -+SVCALL(SD_BLE_GAP_CONN_SEC_GET, uint32_t, sd_ble_gap_conn_sec_get(uint16_t conn_handle, ble_gap_conn_sec_t *p_conn_sec)); -+ -+ -+/**@brief Start reporting the received signal strength to the application. -+ * -+ * A new event is reported whenever the RSSI value changes, until @ref sd_ble_gap_rssi_stop is called. -+ * -+ * @events -+ * @event{@ref BLE_GAP_EVT_RSSI_CHANGED, New RSSI data available. How often the event is generated is -+ dependent on the settings of the threshold_dbm -+ and skip_count input parameters.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} -+ * @mmsc{@ref BLE_GAP_RSSI_FILT_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] threshold_dbm Minimum change in dBm before triggering the @ref BLE_GAP_EVT_RSSI_CHANGED event. Events are disabled if threshold_dbm equals @ref BLE_GAP_RSSI_THRESHOLD_INVALID. -+ * @param[in] skip_count Number of RSSI samples with a change of threshold_dbm or more before sending a new @ref BLE_GAP_EVT_RSSI_CHANGED event. -+ * -+ * @retval ::NRF_SUCCESS Successfully activated RSSI reporting. -+ * @retval ::NRF_ERROR_INVALID_STATE Disconnection in progress. Invalid state to perform operation. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ */ -+SVCALL(SD_BLE_GAP_RSSI_START, uint32_t, sd_ble_gap_rssi_start(uint16_t conn_handle, uint8_t threshold_dbm, uint8_t skip_count)); -+ -+ -+/**@brief Stop reporting the received signal strength. -+ * -+ * @note An RSSI change detected before the call but not yet received by the application -+ * may be reported after @ref sd_ble_gap_rssi_stop has been called. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} -+ * @mmsc{@ref BLE_GAP_RSSI_FILT_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * -+ * @retval ::NRF_SUCCESS Successfully deactivated RSSI reporting. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ */ -+SVCALL(SD_BLE_GAP_RSSI_STOP, uint32_t, sd_ble_gap_rssi_stop(uint16_t conn_handle)); -+ -+ -+/**@brief Get the received signal strength for the last connection event. -+ * -+ * @ref sd_ble_gap_rssi_start must be called to start reporting RSSI before using this function. @ref NRF_ERROR_NOT_FOUND -+ * will be returned until RSSI was sampled for the first time after calling @ref sd_ble_gap_rssi_start. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[out] p_rssi Pointer to the location where the RSSI measurement shall be stored. -+ * -+ * @retval ::NRF_SUCCESS Successfully read the RSSI. -+ * @retval ::NRF_ERROR_NOT_FOUND No sample is available. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is not ongoing, or disconnection in progress. -+ */ -+SVCALL(SD_BLE_GAP_RSSI_GET, uint32_t, sd_ble_gap_rssi_get(uint16_t conn_handle, int8_t *p_rssi)); -+ -+ -+/**@brief Start scanning (GAP Discovery procedure, Observer Procedure). -+ * -+ * -+ * @events -+ * @event{@ref BLE_GAP_EVT_ADV_REPORT, An advertising or scan response packet has been received.} -+ * @event{@ref BLE_GAP_EVT_TIMEOUT, Scanner has timed out.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_SCAN_MSC} -+ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} -+ * @endmscs -+ * -+ * @param[in] p_scan_params Pointer to scan parameters structure. -+ * -+ * @retval ::NRF_SUCCESS Successfully initiated scanning procedure. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. -+ * @retval ::NRF_ERROR_RESOURCES Not enough BLE role slots available. -+ * Stop one or more currently active roles (Central, Peripheral or Broadcaster) and try again -+ */ -+SVCALL(SD_BLE_GAP_SCAN_START, uint32_t, sd_ble_gap_scan_start(ble_gap_scan_params_t const *p_scan_params)); -+ -+ -+/**@brief Stop scanning (GAP Discovery procedure, Observer Procedure). -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_SCAN_MSC} -+ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} -+ * @endmscs -+ * -+ * @retval ::NRF_SUCCESS Successfully stopped scanning procedure. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation (most probably not in scanning state). -+ */ -+SVCALL(SD_BLE_GAP_SCAN_STOP, uint32_t, sd_ble_gap_scan_stop(void)); -+ -+ -+/**@brief Create a connection (GAP Link Establishment). -+ * -+ * @note If a scanning procedure is currently in progress it will be automatically stopped when calling this function. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_CONN_PRIV_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_CONN_MSC} -+ * @endmscs -+ * -+ * @param[in] p_peer_addr Pointer to peer address. If the use_whitelist bit is set in @ref ble_gap_scan_params_t, then this is ignored. -+ * If @ref ble_gap_addr_t::addr_id_peer is set then p_peer_addr must be present in the device identity list -+ * see @ref sd_ble_gap_device_identities_set. -+ * @param[in] p_scan_params Pointer to scan parameters structure. -+ * @param[in] p_conn_params Pointer to desired connection parameters. -+ * -+ * @retval ::NRF_SUCCESS Successfully initiated connection procedure. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid parameter(s) pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ - Invalid parameter(s) in p_scan_params or p_conn_params. -+ - Use of whitelist requested but whitelist has not been set, see @ref sd_ble_gap_whitelist_set. -+ - Peer address was not present in the device identity list, see @ref sd_ble_gap_device_identities_set. -+ * @retval ::NRF_ERROR_INVALID_STATE The SoftDevice is in an invalid state to perform this operation. This may be due to an -+ * existing locally initiated connect procedure, which must complete before initiating again. -+ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Peer address. -+ * @retval ::NRF_ERROR_CONN_COUNT The limit of available connections has been reached. -+ * @retval ::NRF_ERROR_NO_MEM The configured memory pool (see @ref ble_conn_bw_counts_t) is not large enough for the -+ * bandwidth selected for this connection. -+ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. If another connection is being established -+ * wait for the corresponding @ref BLE_GAP_EVT_CONNECTED event before calling again. -+ * @retval ::NRF_ERROR_RESOURCES Not enough BLE role slots available. -+ * Stop one or more currently active roles (Central, Peripheral or Broadcaster) and try again -+ */ -+SVCALL(SD_BLE_GAP_CONNECT, uint32_t, sd_ble_gap_connect(ble_gap_addr_t const *p_peer_addr, ble_gap_scan_params_t const *p_scan_params, ble_gap_conn_params_t const *p_conn_params)); -+ -+ -+/**@brief Cancel a connection establishment. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_CENTRAL_CONN_MSC} -+ * @endmscs -+ * -+ * @retval ::NRF_SUCCESS Successfully cancelled an ongoing connection procedure. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ */ -+SVCALL(SD_BLE_GAP_CONNECT_CANCEL, uint32_t, sd_ble_gap_connect_cancel(void)); -+ -+/** @} */ -+ -+#ifdef __cplusplus -+} -+#endif -+#endif // BLE_GAP_H__ -+ -+/** -+ @} -+*/ -diff -u -r -N a/components/softdevice/s132v3/headers/ble_gatt.h b/components/softdevice/s132v3/headers/ble_gatt.h ---- a/components/softdevice/s132v3/headers/ble_gatt.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v3/headers/ble_gatt.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,220 @@ -+/* -+ * Copyright (c) Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form must reproduce the above copyright notice, this -+ * list of conditions and the following disclaimer in the documentation and/or -+ * other materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other -+ * contributors to this software may be used to endorse or promote products -+ * derived from this software without specific prior written permission. -+ * -+ * 4. This software must only be used in a processor manufactured by Nordic -+ * Semiconductor ASA, or in a processor manufactured by a third party that -+ * is used in combination with a processor manufactured by Nordic Semiconductor. -+ * -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ * -+ */ -+ -+/** -+ @addtogroup BLE_GATT Generic Attribute Profile (GATT) Common -+ @{ -+ @brief Common definitions and prototypes for the GATT interfaces. -+ */ -+ -+#ifndef BLE_GATT_H__ -+#define BLE_GATT_H__ -+ -+#include "ble_types.h" -+#include "ble_ranges.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/** @addtogroup BLE_GATT_DEFINES Defines -+ * @{ */ -+ -+/** @brief Default MTU size, in bytes. */ -+#define GATT_MTU_SIZE_DEFAULT 23 -+ -+/**@brief Invalid Attribute Handle. */ -+#define BLE_GATT_HANDLE_INVALID 0x0000 -+ -+/**@brief First Attribute Handle. */ -+#define BLE_GATT_HANDLE_START 0x0001 -+ -+/**@brief Last Attribute Handle. */ -+#define BLE_GATT_HANDLE_END 0xFFFF -+ -+/** @defgroup BLE_GATT_TIMEOUT_SOURCES GATT Timeout sources -+ * @{ */ -+#define BLE_GATT_TIMEOUT_SRC_PROTOCOL 0x00 /**< ATT Protocol timeout. */ -+/** @} */ -+ -+/** @defgroup BLE_GATT_WRITE_OPS GATT Write operations -+ * @{ */ -+#define BLE_GATT_OP_INVALID 0x00 /**< Invalid Operation. */ -+#define BLE_GATT_OP_WRITE_REQ 0x01 /**< Write Request. */ -+#define BLE_GATT_OP_WRITE_CMD 0x02 /**< Write Command. */ -+#define BLE_GATT_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ -+#define BLE_GATT_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ -+#define BLE_GATT_OP_EXEC_WRITE_REQ 0x05 /**< Execute Write Request. */ -+/** @} */ -+ -+/** @defgroup BLE_GATT_EXEC_WRITE_FLAGS GATT Execute Write flags -+ * @{ */ -+#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_CANCEL 0x00 /**< Cancel prepared write. */ -+#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE 0x01 /**< Execute prepared write. */ -+/** @} */ -+ -+/** @defgroup BLE_GATT_HVX_TYPES GATT Handle Value operations -+ * @{ */ -+#define BLE_GATT_HVX_INVALID 0x00 /**< Invalid Operation. */ -+#define BLE_GATT_HVX_NOTIFICATION 0x01 /**< Handle Value Notification. */ -+#define BLE_GATT_HVX_INDICATION 0x02 /**< Handle Value Indication. */ -+/** @} */ -+ -+/** @defgroup BLE_GATT_STATUS_CODES GATT Status Codes -+ * @{ */ -+#define BLE_GATT_STATUS_SUCCESS 0x0000 /**< Success. */ -+#define BLE_GATT_STATUS_UNKNOWN 0x0001 /**< Unknown or not applicable status. */ -+#define BLE_GATT_STATUS_ATTERR_INVALID 0x0100 /**< ATT Error: Invalid Error Code. */ -+#define BLE_GATT_STATUS_ATTERR_INVALID_HANDLE 0x0101 /**< ATT Error: Invalid Attribute Handle. */ -+#define BLE_GATT_STATUS_ATTERR_READ_NOT_PERMITTED 0x0102 /**< ATT Error: Read not permitted. */ -+#define BLE_GATT_STATUS_ATTERR_WRITE_NOT_PERMITTED 0x0103 /**< ATT Error: Write not permitted. */ -+#define BLE_GATT_STATUS_ATTERR_INVALID_PDU 0x0104 /**< ATT Error: Used in ATT as Invalid PDU. */ -+#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHENTICATION 0x0105 /**< ATT Error: Authenticated link required. */ -+#define BLE_GATT_STATUS_ATTERR_REQUEST_NOT_SUPPORTED 0x0106 /**< ATT Error: Used in ATT as Request Not Supported. */ -+#define BLE_GATT_STATUS_ATTERR_INVALID_OFFSET 0x0107 /**< ATT Error: Offset specified was past the end of the attribute. */ -+#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHORIZATION 0x0108 /**< ATT Error: Used in ATT as Insufficient Authorisation. */ -+#define BLE_GATT_STATUS_ATTERR_PREPARE_QUEUE_FULL 0x0109 /**< ATT Error: Used in ATT as Prepare Queue Full. */ -+#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_FOUND 0x010A /**< ATT Error: Used in ATT as Attribute not found. */ -+#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_LONG 0x010B /**< ATT Error: Attribute cannot be read or written using read/write blob requests. */ -+#define BLE_GATT_STATUS_ATTERR_INSUF_ENC_KEY_SIZE 0x010C /**< ATT Error: Encryption key size used is insufficient. */ -+#define BLE_GATT_STATUS_ATTERR_INVALID_ATT_VAL_LENGTH 0x010D /**< ATT Error: Invalid value size. */ -+#define BLE_GATT_STATUS_ATTERR_UNLIKELY_ERROR 0x010E /**< ATT Error: Very unlikely error. */ -+#define BLE_GATT_STATUS_ATTERR_INSUF_ENCRYPTION 0x010F /**< ATT Error: Encrypted link required. */ -+#define BLE_GATT_STATUS_ATTERR_UNSUPPORTED_GROUP_TYPE 0x0110 /**< ATT Error: Attribute type is not a supported grouping attribute. */ -+#define BLE_GATT_STATUS_ATTERR_INSUF_RESOURCES 0x0111 /**< ATT Error: Encrypted link required. */ -+#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_BEGIN 0x0112 /**< ATT Error: Reserved for Future Use range #1 begin. */ -+#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_END 0x017F /**< ATT Error: Reserved for Future Use range #1 end. */ -+#define BLE_GATT_STATUS_ATTERR_APP_BEGIN 0x0180 /**< ATT Error: Application range begin. */ -+#define BLE_GATT_STATUS_ATTERR_APP_END 0x019F /**< ATT Error: Application range end. */ -+#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_BEGIN 0x01A0 /**< ATT Error: Reserved for Future Use range #2 begin. */ -+#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_END 0x01DF /**< ATT Error: Reserved for Future Use range #2 end. */ -+#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_BEGIN 0x01E0 /**< ATT Error: Reserved for Future Use range #3 begin. */ -+#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_END 0x01FC /**< ATT Error: Reserved for Future Use range #3 end. */ -+#define BLE_GATT_STATUS_ATTERR_CPS_CCCD_CONFIG_ERROR 0x01FD /**< ATT Common Profile and Service Error: Client Characteristic Configuration Descriptor improperly configured. */ -+#define BLE_GATT_STATUS_ATTERR_CPS_PROC_ALR_IN_PROG 0x01FE /**< ATT Common Profile and Service Error: Procedure Already in Progress. */ -+#define BLE_GATT_STATUS_ATTERR_CPS_OUT_OF_RANGE 0x01FF /**< ATT Common Profile and Service Error: Out Of Range. */ -+/** @} */ -+ -+ -+/** @defgroup BLE_GATT_CPF_FORMATS Characteristic Presentation Formats -+ * @note Found at http://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.gatt.characteristic_presentation_format.xml -+ * @{ */ -+#define BLE_GATT_CPF_FORMAT_RFU 0x00 /**< Reserved For Future Use. */ -+#define BLE_GATT_CPF_FORMAT_BOOLEAN 0x01 /**< Boolean. */ -+#define BLE_GATT_CPF_FORMAT_2BIT 0x02 /**< Unsigned 2-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_NIBBLE 0x03 /**< Unsigned 4-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_UINT8 0x04 /**< Unsigned 8-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_UINT12 0x05 /**< Unsigned 12-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_UINT16 0x06 /**< Unsigned 16-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_UINT24 0x07 /**< Unsigned 24-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_UINT32 0x08 /**< Unsigned 32-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_UINT48 0x09 /**< Unsigned 48-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_UINT64 0x0A /**< Unsigned 64-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_UINT128 0x0B /**< Unsigned 128-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_SINT8 0x0C /**< Signed 2-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_SINT12 0x0D /**< Signed 12-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_SINT16 0x0E /**< Signed 16-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_SINT24 0x0F /**< Signed 24-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_SINT32 0x10 /**< Signed 32-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_SINT48 0x11 /**< Signed 48-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_SINT64 0x12 /**< Signed 64-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_SINT128 0x13 /**< Signed 128-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_FLOAT32 0x14 /**< IEEE-754 32-bit floating point. */ -+#define BLE_GATT_CPF_FORMAT_FLOAT64 0x15 /**< IEEE-754 64-bit floating point. */ -+#define BLE_GATT_CPF_FORMAT_SFLOAT 0x16 /**< IEEE-11073 16-bit SFLOAT. */ -+#define BLE_GATT_CPF_FORMAT_FLOAT 0x17 /**< IEEE-11073 32-bit FLOAT. */ -+#define BLE_GATT_CPF_FORMAT_DUINT16 0x18 /**< IEEE-20601 format. */ -+#define BLE_GATT_CPF_FORMAT_UTF8S 0x19 /**< UTF-8 string. */ -+#define BLE_GATT_CPF_FORMAT_UTF16S 0x1A /**< UTF-16 string. */ -+#define BLE_GATT_CPF_FORMAT_STRUCT 0x1B /**< Opaque Structure. */ -+/** @} */ -+ -+/** @defgroup BLE_GATT_CPF_NAMESPACES GATT Bluetooth Namespaces -+ * @{ -+ */ -+#define BLE_GATT_CPF_NAMESPACE_BTSIG 0x01 /**< Bluetooth SIG defined Namespace. */ -+#define BLE_GATT_CPF_NAMESPACE_DESCRIPTION_UNKNOWN 0x0000 /**< Namespace Description Unknown. */ -+/** @} */ -+ -+/** @} */ -+ -+/** @addtogroup BLE_GATT_STRUCTURES Structures -+ * @{ */ -+ -+/** -+ * @brief BLE GATT initialization parameters. -+ */ -+typedef struct -+{ -+ uint16_t att_mtu; /**< Maximum size of ATT packet the SoftDevice can send or receive. -+ If it is 0 then @ref GATT_MTU_SIZE_DEFAULT will be used. -+ Otherwise @ref GATT_MTU_SIZE_DEFAULT is the minimum value. -+ @mscs -+ @mmsc{@ref BLE_GATTC_MTU_EXCHANGE} -+ @mmsc{@ref BLE_GATTS_MTU_EXCHANGE} -+ @endmscs -+ */ -+} ble_gatt_enable_params_t; -+ -+/**@brief GATT Characteristic Properties. */ -+typedef struct -+{ -+ /* Standard properties */ -+ uint8_t broadcast :1; /**< Broadcasting of the value permitted. */ -+ uint8_t read :1; /**< Reading the value permitted. */ -+ uint8_t write_wo_resp :1; /**< Writing the value with Write Command permitted. */ -+ uint8_t write :1; /**< Writing the value with Write Request permitted. */ -+ uint8_t notify :1; /**< Notications of the value permitted. */ -+ uint8_t indicate :1; /**< Indications of the value permitted. */ -+ uint8_t auth_signed_wr :1; /**< Writing the value with Signed Write Command permitted. */ -+} ble_gatt_char_props_t; -+ -+/**@brief GATT Characteristic Extended Properties. */ -+typedef struct -+{ -+ /* Extended properties */ -+ uint8_t reliable_wr :1; /**< Writing the value with Queued Write operations permitted. */ -+ uint8_t wr_aux :1; /**< Writing the Characteristic User Description descriptor permitted. */ -+} ble_gatt_char_ext_props_t; -+ -+/** @} */ -+ -+#ifdef __cplusplus -+} -+#endif -+#endif // BLE_GATT_H__ -+ -+/** @} */ -diff -u -r -N a/components/softdevice/s132v3/headers/ble_gattc.h b/components/softdevice/s132v3/headers/ble_gattc.h ---- a/components/softdevice/s132v3/headers/ble_gattc.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v3/headers/ble_gattc.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,660 @@ -+/* -+ * Copyright (c) Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form must reproduce the above copyright notice, this -+ * list of conditions and the following disclaimer in the documentation and/or -+ * other materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other -+ * contributors to this software may be used to endorse or promote products -+ * derived from this software without specific prior written permission. -+ * -+ * 4. This software must only be used in a processor manufactured by Nordic -+ * Semiconductor ASA, or in a processor manufactured by a third party that -+ * is used in combination with a processor manufactured by Nordic Semiconductor. -+ * -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ * -+ */ -+ -+/** -+ @addtogroup BLE_GATTC Generic Attribute Profile (GATT) Client -+ @{ -+ @brief Definitions and prototypes for the GATT Client interface. -+ */ -+ -+#ifndef BLE_GATTC_H__ -+#define BLE_GATTC_H__ -+ -+#include "ble_gatt.h" -+#include "ble_types.h" -+#include "ble_ranges.h" -+#include "nrf_svc.h" -+#include "nrf_error.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/** @addtogroup BLE_GATTC_ENUMERATIONS Enumerations -+ * @{ */ -+ -+/**@brief GATTC API SVC numbers. */ -+enum BLE_GATTC_SVCS -+{ -+ SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER = BLE_GATTC_SVC_BASE, /**< Primary Service Discovery. */ -+ SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, /**< Relationship Discovery. */ -+ SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, /**< Characteristic Discovery. */ -+ SD_BLE_GATTC_DESCRIPTORS_DISCOVER, /**< Characteristic Descriptor Discovery. */ -+ SD_BLE_GATTC_ATTR_INFO_DISCOVER, /**< Attribute Information Discovery. */ -+ SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, /**< Read Characteristic Value by UUID. */ -+ SD_BLE_GATTC_READ, /**< Generic read. */ -+ SD_BLE_GATTC_CHAR_VALUES_READ, /**< Read multiple Characteristic Values. */ -+ SD_BLE_GATTC_WRITE, /**< Generic write. */ -+ SD_BLE_GATTC_HV_CONFIRM, /**< Handle Value Confirmation. */ -+ SD_BLE_GATTC_EXCHANGE_MTU_REQUEST, /**< Exchange MTU Request. */ -+}; -+ -+/** -+ * @brief GATT Client Event IDs. -+ */ -+enum BLE_GATTC_EVTS -+{ -+ BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP = BLE_GATTC_EVT_BASE, /**< Primary Service Discovery Response event. \n See @ref ble_gattc_evt_prim_srvc_disc_rsp_t. */ -+ BLE_GATTC_EVT_REL_DISC_RSP, /**< Relationship Discovery Response event. \n See @ref ble_gattc_evt_rel_disc_rsp_t. */ -+ BLE_GATTC_EVT_CHAR_DISC_RSP, /**< Characteristic Discovery Response event. \n See @ref ble_gattc_evt_char_disc_rsp_t. */ -+ BLE_GATTC_EVT_DESC_DISC_RSP, /**< Descriptor Discovery Response event. \n See @ref ble_gattc_evt_desc_disc_rsp_t. */ -+ BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, /**< Attribute Information Response event. \n See @ref ble_gattc_evt_attr_info_disc_rsp_t. */ -+ BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP, /**< Read By UUID Response event. \n See @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t. */ -+ BLE_GATTC_EVT_READ_RSP, /**< Read Response event. \n See @ref ble_gattc_evt_read_rsp_t. */ -+ BLE_GATTC_EVT_CHAR_VALS_READ_RSP, /**< Read multiple Response event. \n See @ref ble_gattc_evt_char_vals_read_rsp_t. */ -+ BLE_GATTC_EVT_WRITE_RSP, /**< Write Response event. \n See @ref ble_gattc_evt_write_rsp_t. */ -+ BLE_GATTC_EVT_HVX, /**< Handle Value Notification or Indication event. \n Confirm indication with @ref sd_ble_gattc_hv_confirm. \n See @ref ble_gattc_evt_hvx_t. */ -+ BLE_GATTC_EVT_EXCHANGE_MTU_RSP, /**< Exchange MTU Response event. \n See @ref ble_gattc_evt_exchange_mtu_rsp_t. */ -+ BLE_GATTC_EVT_TIMEOUT /**< Timeout event. \n See @ref ble_gattc_evt_timeout_t. */ -+}; -+ -+/** @} */ -+ -+/** @addtogroup BLE_GATTC_DEFINES Defines -+ * @{ */ -+ -+/** @defgroup BLE_ERRORS_GATTC SVC return values specific to GATTC -+ * @{ */ -+#define BLE_ERROR_GATTC_PROC_NOT_PERMITTED (NRF_GATTC_ERR_BASE + 0x000) /**< Procedure not Permitted. */ -+/** @} */ -+ -+/** @defgroup BLE_GATTC_ATTR_INFO_FORMAT Attribute Information Formats -+ * @{ */ -+#define BLE_GATTC_ATTR_INFO_FORMAT_16BIT 1 /**< 16-bit Attribute Information Format. */ -+#define BLE_GATTC_ATTR_INFO_FORMAT_128BIT 2 /**< 128-bit Attribute Information Format. */ -+/** @} */ -+ -+/** @} */ -+ -+/** @addtogroup BLE_GATTC_STRUCTURES Structures -+ * @{ */ -+ -+/**@brief Operation Handle Range. */ -+typedef struct -+{ -+ uint16_t start_handle; /**< Start Handle. */ -+ uint16_t end_handle; /**< End Handle. */ -+} ble_gattc_handle_range_t; -+ -+ -+/**@brief GATT service. */ -+typedef struct -+{ -+ ble_uuid_t uuid; /**< Service UUID. */ -+ ble_gattc_handle_range_t handle_range; /**< Service Handle Range. */ -+} ble_gattc_service_t; -+ -+ -+/**@brief GATT include. */ -+typedef struct -+{ -+ uint16_t handle; /**< Include Handle. */ -+ ble_gattc_service_t included_srvc; /**< Handle of the included service. */ -+} ble_gattc_include_t; -+ -+ -+/**@brief GATT characteristic. */ -+typedef struct -+{ -+ ble_uuid_t uuid; /**< Characteristic UUID. */ -+ ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ -+ uint8_t char_ext_props : 1; /**< Extended properties present. */ -+ uint16_t handle_decl; /**< Handle of the Characteristic Declaration. */ -+ uint16_t handle_value; /**< Handle of the Characteristic Value. */ -+} ble_gattc_char_t; -+ -+ -+/**@brief GATT descriptor. */ -+typedef struct -+{ -+ uint16_t handle; /**< Descriptor Handle. */ -+ ble_uuid_t uuid; /**< Descriptor UUID. */ -+} ble_gattc_desc_t; -+ -+ -+/**@brief Write Parameters. */ -+typedef struct -+{ -+ uint8_t write_op; /**< Write Operation to be performed, see @ref BLE_GATT_WRITE_OPS. */ -+ uint8_t flags; /**< Flags, see @ref BLE_GATT_EXEC_WRITE_FLAGS. */ -+ uint16_t handle; /**< Handle to the attribute to be written. */ -+ uint16_t offset; /**< Offset in bytes. @note For WRITE_CMD and WRITE_REQ, offset must be 0. */ -+ uint16_t len; /**< Length of data in bytes. */ -+ uint8_t const *p_value; /**< Pointer to the value data. */ -+} ble_gattc_write_params_t; -+ -+/**@brief Attribute Information for 16-bit Attribute UUID. */ -+typedef struct -+{ -+ uint16_t handle; /**< Attribute handle. */ -+ ble_uuid_t uuid; /**< 16-bit Attribute UUID. */ -+} ble_gattc_attr_info16_t; -+ -+/**@brief Attribute Information for 128-bit Attribute UUID. */ -+typedef struct -+{ -+ uint16_t handle; /**< Attribute handle. */ -+ ble_uuid128_t uuid; /**< 128-bit Attribute UUID. */ -+} ble_gattc_attr_info128_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP. */ -+typedef struct -+{ -+ uint16_t count; /**< Service count. */ -+ ble_gattc_service_t services[1]; /**< Service data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+} ble_gattc_evt_prim_srvc_disc_rsp_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_REL_DISC_RSP. */ -+typedef struct -+{ -+ uint16_t count; /**< Include count. */ -+ ble_gattc_include_t includes[1]; /**< Include data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+} ble_gattc_evt_rel_disc_rsp_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_DISC_RSP. */ -+typedef struct -+{ -+ uint16_t count; /**< Characteristic count. */ -+ ble_gattc_char_t chars[1]; /**< Characteristic data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+} ble_gattc_evt_char_disc_rsp_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_DESC_DISC_RSP. */ -+typedef struct -+{ -+ uint16_t count; /**< Descriptor count. */ -+ ble_gattc_desc_t descs[1]; /**< Descriptor data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+} ble_gattc_evt_desc_disc_rsp_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP. */ -+typedef struct -+{ -+ uint16_t count; /**< Attribute count. */ -+ uint8_t format; /**< Attribute information format, see @ref BLE_GATTC_ATTR_INFO_FORMAT. */ -+ union { -+ ble_gattc_attr_info16_t attr_info16[1]; /**< Attribute information for 16-bit Attribute UUID. -+ @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+ ble_gattc_attr_info128_t attr_info128[1]; /**< Attribute information for 128-bit Attribute UUID. -+ @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+ } info; /**< Attribute information union. */ -+} ble_gattc_evt_attr_info_disc_rsp_t; -+ -+/**@brief GATT read by UUID handle value pair. */ -+typedef struct -+{ -+ uint16_t handle; /**< Attribute Handle. */ -+ uint8_t *p_value; /**< Pointer to the Attribute Value, length is available in @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t::value_len. */ -+} ble_gattc_handle_value_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP. */ -+typedef struct -+{ -+ uint16_t count; /**< Handle-Value Pair Count. */ -+ uint16_t value_len; /**< Length of the value in Handle-Value(s) list. */ -+ uint8_t handle_value[1]; /**< Handle-Value(s) list. To iterate through the list use @ref sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter. -+ @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+} ble_gattc_evt_char_val_by_uuid_read_rsp_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_READ_RSP. */ -+typedef struct -+{ -+ uint16_t handle; /**< Attribute Handle. */ -+ uint16_t offset; /**< Offset of the attribute data. */ -+ uint16_t len; /**< Attribute data length. */ -+ uint8_t data[1]; /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+} ble_gattc_evt_read_rsp_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP. */ -+typedef struct -+{ -+ uint16_t len; /**< Concatenated Attribute values length. */ -+ uint8_t values[1]; /**< Attribute values. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+} ble_gattc_evt_char_vals_read_rsp_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_WRITE_RSP. */ -+typedef struct -+{ -+ uint16_t handle; /**< Attribute Handle. */ -+ uint8_t write_op; /**< Type of write operation, see @ref BLE_GATT_WRITE_OPS. */ -+ uint16_t offset; /**< Data offset. */ -+ uint16_t len; /**< Data length. */ -+ uint8_t data[1]; /**< Data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+} ble_gattc_evt_write_rsp_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_HVX. */ -+typedef struct -+{ -+ uint16_t handle; /**< Handle to which the HVx operation applies. */ -+ uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ -+ uint16_t len; /**< Attribute data length. */ -+ uint8_t data[1]; /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+} ble_gattc_evt_hvx_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. */ -+typedef struct -+{ -+ uint16_t server_rx_mtu; /**< Server RX MTU size. */ -+} ble_gattc_evt_exchange_mtu_rsp_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_TIMEOUT. */ -+typedef struct -+{ -+ uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ -+} ble_gattc_evt_timeout_t; -+ -+/**@brief GATTC event structure. */ -+typedef struct -+{ -+ uint16_t conn_handle; /**< Connection Handle on which event occured. */ -+ uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ -+ uint16_t error_handle; /**< In case of error: The handle causing the error. In all other cases @ref BLE_GATT_HANDLE_INVALID. */ -+ union -+ { -+ ble_gattc_evt_prim_srvc_disc_rsp_t prim_srvc_disc_rsp; /**< Primary Service Discovery Response Event Parameters. */ -+ ble_gattc_evt_rel_disc_rsp_t rel_disc_rsp; /**< Relationship Discovery Response Event Parameters. */ -+ ble_gattc_evt_char_disc_rsp_t char_disc_rsp; /**< Characteristic Discovery Response Event Parameters. */ -+ ble_gattc_evt_desc_disc_rsp_t desc_disc_rsp; /**< Descriptor Discovery Response Event Parameters. */ -+ ble_gattc_evt_char_val_by_uuid_read_rsp_t char_val_by_uuid_read_rsp; /**< Characteristic Value Read by UUID Response Event Parameters. */ -+ ble_gattc_evt_read_rsp_t read_rsp; /**< Read Response Event Parameters. */ -+ ble_gattc_evt_char_vals_read_rsp_t char_vals_read_rsp; /**< Characteristic Values Read Response Event Parameters. */ -+ ble_gattc_evt_write_rsp_t write_rsp; /**< Write Response Event Parameters. */ -+ ble_gattc_evt_hvx_t hvx; /**< Handle Value Notification/Indication Event Parameters. */ -+ ble_gattc_evt_exchange_mtu_rsp_t exchange_mtu_rsp; /**< Exchange MTU Response Event Parameters. */ -+ ble_gattc_evt_timeout_t timeout; /**< Timeout Event Parameters. */ -+ ble_gattc_evt_attr_info_disc_rsp_t attr_info_disc_rsp; /**< Attribute Information Discovery Event Parameters. */ -+ } params; /**< Event Parameters. @note Only valid if @ref gatt_status == @ref BLE_GATT_STATUS_SUCCESS. */ -+} ble_gattc_evt_t; -+/** @} */ -+ -+/** @addtogroup BLE_GATTC_FUNCTIONS Functions -+ * @{ */ -+ -+/**@brief Initiate or continue a GATT Primary Service Discovery procedure. -+ * -+ * @details This function initiates or resumes a Primary Service discovery procedure, starting from the supplied handle. -+ * If the last service has not been reached, this function must be called again with an updated start handle value to continue the search. -+ * -+ * @note If any of the discovered services have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with -+ * type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. -+ * -+ * @events -+ * @event{@ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTC_PRIM_SRVC_DISC_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] start_handle Handle to start searching from. -+ * @param[in] p_srvc_uuid Pointer to the service UUID to be found. If it is NULL, all primary services will be returned. -+ * -+ * @retval ::NRF_SUCCESS Successfully started or resumed the Primary Service Discovery procedure. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. -+ */ -+SVCALL(SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER, uint32_t, sd_ble_gattc_primary_services_discover(uint16_t conn_handle, uint16_t start_handle, ble_uuid_t const *p_srvc_uuid)); -+ -+ -+/**@brief Initiate or continue a GATT Relationship Discovery procedure. -+ * -+ * @details This function initiates or resumes the Find Included Services sub-procedure. If the last included service has not been reached, -+ * this must be called again with an updated handle range to continue the search. -+ * -+ * @events -+ * @event{@ref BLE_GATTC_EVT_REL_DISC_RSP} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTC_REL_DISC_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. -+ * -+ * @retval ::NRF_SUCCESS Successfully started or resumed the Relationship Discovery procedure. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. -+ */ -+SVCALL(SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, uint32_t, sd_ble_gattc_relationships_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); -+ -+ -+/**@brief Initiate or continue a GATT Characteristic Discovery procedure. -+ * -+ * @details This function initiates or resumes a Characteristic discovery procedure. If the last Characteristic has not been reached, -+ * this must be called again with an updated handle range to continue the discovery. -+ * -+ * @note If any of the discovered characteristics have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with -+ * type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. -+ * -+ * @events -+ * @event{@ref BLE_GATTC_EVT_CHAR_DISC_RSP} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTC_CHAR_DISC_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. -+ * -+ * @retval ::NRF_SUCCESS Successfully started or resumed the Characteristic Discovery procedure. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. -+ */ -+SVCALL(SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, uint32_t, sd_ble_gattc_characteristics_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); -+ -+ -+/**@brief Initiate or continue a GATT Characteristic Descriptor Discovery procedure. -+ * -+ * @details This function initiates or resumes a Characteristic Descriptor discovery procedure. If the last Descriptor has not been reached, -+ * this must be called again with an updated handle range to continue the discovery. -+ * -+ * @events -+ * @event{@ref BLE_GATTC_EVT_DESC_DISC_RSP} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTC_DESC_DISC_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] p_handle_range A pointer to the range of handles of the Characteristic to perform this procedure on. -+ * -+ * @retval ::NRF_SUCCESS Successfully started or resumed the Descriptor Discovery procedure. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. -+ */ -+SVCALL(SD_BLE_GATTC_DESCRIPTORS_DISCOVER, uint32_t, sd_ble_gattc_descriptors_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); -+ -+ -+/**@brief Initiate or continue a GATT Read using Characteristic UUID procedure. -+ * -+ * @details This function initiates or resumes a Read using Characteristic UUID procedure. If the last Characteristic has not been reached, -+ * this must be called again with an updated handle range to continue the discovery. -+ * -+ * @events -+ * @event{@ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTC_READ_UUID_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] p_uuid Pointer to a Characteristic value UUID to read. -+ * @param[in] p_handle_range A pointer to the range of handles to perform this procedure on. -+ * -+ * @retval ::NRF_SUCCESS Successfully started or resumed the Read using Characteristic UUID procedure. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. -+ */ -+SVCALL(SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, uint32_t, sd_ble_gattc_char_value_by_uuid_read(uint16_t conn_handle, ble_uuid_t const *p_uuid, ble_gattc_handle_range_t const *p_handle_range)); -+ -+ -+/**@brief Initiate or continue a GATT Read (Long) Characteristic or Descriptor procedure. -+ * -+ * @details This function initiates or resumes a GATT Read (Long) Characteristic or Descriptor procedure. If the Characteristic or Descriptor -+ * to be read is longer than ATT_MTU - 1, this function must be called multiple times with appropriate offset to read the -+ * complete value. -+ * -+ * @events -+ * @event{@ref BLE_GATTC_EVT_READ_RSP} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTC_VALUE_READ_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] handle The handle of the attribute to be read. -+ * @param[in] offset Offset into the attribute value to be read. -+ * -+ * @retval ::NRF_SUCCESS Successfully started or resumed the Read (Long) procedure. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. -+ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. -+ */ -+SVCALL(SD_BLE_GATTC_READ, uint32_t, sd_ble_gattc_read(uint16_t conn_handle, uint16_t handle, uint16_t offset)); -+ -+ -+/**@brief Initiate a GATT Read Multiple Characteristic Values procedure. -+ * -+ * @details This function initiates a GATT Read Multiple Characteristic Values procedure. -+ * -+ * @events -+ * @event{@ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTC_READ_MULT_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] p_handles A pointer to the handle(s) of the attribute(s) to be read. -+ * @param[in] handle_count The number of handles in p_handles. -+ * -+ * @retval ::NRF_SUCCESS Successfully started the Read Multiple Characteristic Values procedure. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. -+ */ -+SVCALL(SD_BLE_GATTC_CHAR_VALUES_READ, uint32_t, sd_ble_gattc_char_values_read(uint16_t conn_handle, uint16_t const *p_handles, uint16_t handle_count)); -+ -+ -+/**@brief Perform a Write (Characteristic Value or Descriptor, with or without response, signed or not, long or reliable) procedure. -+ * -+ * @details This function can perform all write procedures described in GATT. -+ * -+ * @note It is important to note that a write without response will consume an application buffer, and will therefore -+ * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. A write (with response) on the other hand will use the -+ * standard client internal buffer and thus will only generate a @ref BLE_GATTC_EVT_WRITE_RSP event as soon as the write response -+ * has been received from the peer. Please see the documentation of @ref sd_ble_tx_packet_count_get for more details. -+ * -+ * @events -+ * @event{@ref BLE_GATTC_EVT_WRITE_RSP, Generated when using write request or queued writes.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTC_VALUE_WRITE_MSC} -+ * @mmsc{@ref BLE_GATTC_VALUE_LONG_WRITE_MSC} -+ * @mmsc{@ref BLE_GATTC_VALUE_RELIABLE_WRITE_MSC} -+ * @mmsc{@ref BLE_COMMON_APP_BUFF_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] p_write_params A pointer to a write parameters structure. -+ * -+ * @retval ::NRF_SUCCESS Successfully started the Write procedure. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. -+ * @retval ::NRF_ERROR_BUSY Procedure already in progress. -+ * @retval ::BLE_ERROR_NO_TX_PACKETS No available application packets for this connection. -+ */ -+SVCALL(SD_BLE_GATTC_WRITE, uint32_t, sd_ble_gattc_write(uint16_t conn_handle, ble_gattc_write_params_t const *p_write_params)); -+ -+ -+/**@brief Send a Handle Value Confirmation to the GATT Server. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTC_HVI_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] handle The handle of the attribute in the indication. -+ * -+ * @retval ::NRF_SUCCESS Successfully queued the Handle Value Confirmation for transmission. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no Indication pending to be confirmed. -+ * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle. -+ */ -+SVCALL(SD_BLE_GATTC_HV_CONFIRM, uint32_t, sd_ble_gattc_hv_confirm(uint16_t conn_handle, uint16_t handle)); -+ -+/**@brief Discovers information about a range of attributes on a GATT server. -+ * -+ * @events -+ * @event{@ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, Generated when information about a range of attributes has been received.} -+ * @endevents -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] p_handle_range The range of handles to request information about. -+ * -+ * @retval ::NRF_SUCCESS Successfully started an attribute information discovery procedure. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. -+ */ -+SVCALL(SD_BLE_GATTC_ATTR_INFO_DISCOVER, uint32_t, sd_ble_gattc_attr_info_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * p_handle_range)); -+ -+/**@brief Start an ATT_MTU exchange by sending an Exchange MTU Request to the server. -+ * -+ * @details The SoftDevice sets ATT_MTU to the minimum of: -+ * - The Client RX MTU value, and -+ * - The Server RX MTU value from @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. -+ * -+ * However, the SoftDevice never sets ATT_MTU lower than @ref GATT_MTU_SIZE_DEFAULT. -+ * -+ * @events -+ * @event{@ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP} -+ * @event{@ref BLE_EVT_DATA_LENGTH_CHANGED, Generated if a data length update procedure is performed after the ATT_MTU exchange.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTC_MTU_EXCHANGE} -+ * @endmscs -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] client_rx_mtu Client RX MTU size. -+ * - The minimum value is @ref GATT_MTU_SIZE_DEFAULT. -+ * - The maximum value is @ref ble_gatt_enable_params_t::att_mtu. -+ * - The value must be equal to Server RX MTU size given in @ref sd_ble_gatts_exchange_mtu_reply -+ * if an ATT_MTU exchange has already been performed in the other direction. -+ * -+ * @retval ::NRF_SUCCESS Successfully sent request to the server. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state or an ATT_MTU exchange was already requested once. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid Client RX MTU size supplied. -+ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. -+ */ -+SVCALL(SD_BLE_GATTC_EXCHANGE_MTU_REQUEST, uint32_t, sd_ble_gattc_exchange_mtu_request(uint16_t conn_handle, uint16_t client_rx_mtu)); -+ -+/**@brief Iterate through Handle-Value(s) list in @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. -+ * -+ * @param[in] p_gattc_evt Pointer to event buffer containing @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. -+ * @note If the buffer contains different event, behavior is undefined. -+ * @param[in,out] p_iter Iterator, points to @ref ble_gattc_handle_value_t structure that will be filled in with -+ * the next Handle-Value pair in each iteration. If the function returns other than -+ * @ref NRF_SUCCESS, it will not be changed. -+ * - To start iteration, initialize the structure to zero. -+ * - To continue, pass the value from previous iteration. -+ * -+ * \code -+ * ble_gattc_handle_value_t iter; -+ * memset(&iter, 0, sizeof(ble_gattc_handle_value_t)); -+ * while (sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(&ble_evt.evt.gattc_evt, &iter) == NRF_SUCCESS) -+ * { -+ * app_handle = iter.handle; -+ * memcpy(app_value, iter.p_value, ble_evt.evt.gattc_evt.params.char_val_by_uuid_read_rsp.value_len); -+ * } -+ * \endcode -+ * -+ * @retval ::NRF_SUCCESS Successfully retrieved the next Handle-Value pair. -+ * @retval ::NRF_ERROR_NOT_FOUND No more Handle-Value pairs available in the list. -+ */ -+static inline uint32_t sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(ble_gattc_evt_t *p_gattc_evt, ble_gattc_handle_value_t *p_iter) -+{ -+ uint32_t value_len = p_gattc_evt->params.char_val_by_uuid_read_rsp.value_len; -+ uint8_t *p_first = p_gattc_evt->params.char_val_by_uuid_read_rsp.handle_value; -+ uint8_t *p_next = p_iter->p_value ? p_iter->p_value + value_len : p_first; -+ -+ if ((p_next - p_first) / (sizeof(uint16_t) + value_len) < p_gattc_evt->params.char_val_by_uuid_read_rsp.count) -+ { -+ p_iter->handle = (uint16_t)p_next[1] << 8 | p_next[0]; -+ p_iter->p_value = p_next + sizeof(uint16_t); -+ return NRF_SUCCESS; -+ } -+ else -+ { -+ return NRF_ERROR_NOT_FOUND; -+ } -+} -+ -+/** @} */ -+ -+#ifdef __cplusplus -+} -+#endif -+#endif /* BLE_GATTC_H__ */ -+ -+/** -+ @} -+*/ -diff -u -r -N a/components/softdevice/s132v3/headers/ble_gatts.h b/components/softdevice/s132v3/headers/ble_gatts.h ---- a/components/softdevice/s132v3/headers/ble_gatts.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v3/headers/ble_gatts.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,778 @@ -+/* -+ * Copyright (c) Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form must reproduce the above copyright notice, this -+ * list of conditions and the following disclaimer in the documentation and/or -+ * other materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other -+ * contributors to this software may be used to endorse or promote products -+ * derived from this software without specific prior written permission. -+ * -+ * 4. This software must only be used in a processor manufactured by Nordic -+ * Semiconductor ASA, or in a processor manufactured by a third party that -+ * is used in combination with a processor manufactured by Nordic Semiconductor. -+ * -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ * -+ */ -+ -+/** -+ @addtogroup BLE_GATTS Generic Attribute Profile (GATT) Server -+ @{ -+ @brief Definitions and prototypes for the GATTS interface. -+ */ -+ -+#ifndef BLE_GATTS_H__ -+#define BLE_GATTS_H__ -+ -+#include "ble_types.h" -+#include "ble_ranges.h" -+#include "ble_l2cap.h" -+#include "ble_gap.h" -+#include "ble_gatt.h" -+#include "nrf_svc.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/** @addtogroup BLE_GATTS_ENUMERATIONS Enumerations -+ * @{ */ -+ -+/** -+ * @brief GATTS API SVC numbers. -+ */ -+enum BLE_GATTS_SVCS -+{ -+ SD_BLE_GATTS_SERVICE_ADD = BLE_GATTS_SVC_BASE, /**< Add a service. */ -+ SD_BLE_GATTS_INCLUDE_ADD, /**< Add an included service. */ -+ SD_BLE_GATTS_CHARACTERISTIC_ADD, /**< Add a characteristic. */ -+ SD_BLE_GATTS_DESCRIPTOR_ADD, /**< Add a generic attribute. */ -+ SD_BLE_GATTS_VALUE_SET, /**< Set an attribute value. */ -+ SD_BLE_GATTS_VALUE_GET, /**< Get an attribute value. */ -+ SD_BLE_GATTS_HVX, /**< Handle Value Notification or Indication. */ -+ SD_BLE_GATTS_SERVICE_CHANGED, /**< Perform a Service Changed Indication to one or more peers. */ -+ SD_BLE_GATTS_RW_AUTHORIZE_REPLY, /**< Reply to an authorization request for a read or write operation on one or more attributes. */ -+ SD_BLE_GATTS_SYS_ATTR_SET, /**< Set the persistent system attributes for a connection. */ -+ SD_BLE_GATTS_SYS_ATTR_GET, /**< Retrieve the persistent system attributes. */ -+ SD_BLE_GATTS_INITIAL_USER_HANDLE_GET, /**< Retrieve the first valid user handle. */ -+ SD_BLE_GATTS_ATTR_GET, /**< Retrieve the UUID and/or metadata of an attribute. */ -+ SD_BLE_GATTS_EXCHANGE_MTU_REPLY /**< Reply to Exchange MTU Request. */ -+}; -+ -+/** -+ * @brief GATT Server Event IDs. -+ */ -+enum BLE_GATTS_EVTS -+{ -+ BLE_GATTS_EVT_WRITE = BLE_GATTS_EVT_BASE, /**< Write operation performed. \n See @ref ble_gatts_evt_write_t. */ -+ BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST, /**< Read/Write Authorization request. \n Reply with @ref sd_ble_gatts_rw_authorize_reply. \n See @ref ble_gatts_evt_rw_authorize_request_t. */ -+ BLE_GATTS_EVT_SYS_ATTR_MISSING, /**< A persistent system attribute access is pending. \n Respond with @ref sd_ble_gatts_sys_attr_set. \n See @ref ble_gatts_evt_sys_attr_missing_t. */ -+ BLE_GATTS_EVT_HVC, /**< Handle Value Confirmation. \n See @ref ble_gatts_evt_hvc_t. */ -+ BLE_GATTS_EVT_SC_CONFIRM, /**< Service Changed Confirmation. No additional event structure applies. */ -+ BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST, /**< Exchange MTU Request. \n Reply with @ref sd_ble_gatts_exchange_mtu_reply. \n See @ref ble_gatts_evt_exchange_mtu_request_t. */ -+ BLE_GATTS_EVT_TIMEOUT /**< Peer failed to resonpond to an ATT request in time. \n See @ref ble_gatts_evt_timeout_t. */ -+}; -+/** @} */ -+ -+/** @addtogroup BLE_GATTS_DEFINES Defines -+ * @{ */ -+ -+/** @defgroup BLE_ERRORS_GATTS SVC return values specific to GATTS -+ * @{ */ -+#define BLE_ERROR_GATTS_INVALID_ATTR_TYPE (NRF_GATTS_ERR_BASE + 0x000) /**< Invalid attribute type. */ -+#define BLE_ERROR_GATTS_SYS_ATTR_MISSING (NRF_GATTS_ERR_BASE + 0x001) /**< System Attributes missing. */ -+/** @} */ -+ -+/** @defgroup BLE_GATTS_ATTR_LENS_MAX Maximum attribute lengths -+ * @{ */ -+#define BLE_GATTS_FIX_ATTR_LEN_MAX (510) /**< Maximum length for fixed length Attribute Values. */ -+#define BLE_GATTS_VAR_ATTR_LEN_MAX (512) /**< Maximum length for variable length Attribute Values. */ -+/** @} */ -+ -+/** @defgroup BLE_GATTS_SRVC_TYPES GATT Server Service Types -+ * @{ */ -+#define BLE_GATTS_SRVC_TYPE_INVALID 0x00 /**< Invalid Service Type. */ -+#define BLE_GATTS_SRVC_TYPE_PRIMARY 0x01 /**< Primary Service. */ -+#define BLE_GATTS_SRVC_TYPE_SECONDARY 0x02 /**< Secondary Type. */ -+/** @} */ -+ -+ -+/** @defgroup BLE_GATTS_ATTR_TYPES GATT Server Attribute Types -+ * @{ */ -+#define BLE_GATTS_ATTR_TYPE_INVALID 0x00 /**< Invalid Attribute Type. */ -+#define BLE_GATTS_ATTR_TYPE_PRIM_SRVC_DECL 0x01 /**< Primary Service Declaration. */ -+#define BLE_GATTS_ATTR_TYPE_SEC_SRVC_DECL 0x02 /**< Secondary Service Declaration. */ -+#define BLE_GATTS_ATTR_TYPE_INC_DECL 0x03 /**< Include Declaration. */ -+#define BLE_GATTS_ATTR_TYPE_CHAR_DECL 0x04 /**< Characteristic Declaration. */ -+#define BLE_GATTS_ATTR_TYPE_CHAR_VAL 0x05 /**< Characteristic Value. */ -+#define BLE_GATTS_ATTR_TYPE_DESC 0x06 /**< Descriptor. */ -+#define BLE_GATTS_ATTR_TYPE_OTHER 0x07 /**< Other, non-GATT specific type. */ -+/** @} */ -+ -+ -+/** @defgroup BLE_GATTS_OPS GATT Server Operations -+ * @{ */ -+#define BLE_GATTS_OP_INVALID 0x00 /**< Invalid Operation. */ -+#define BLE_GATTS_OP_WRITE_REQ 0x01 /**< Write Request. */ -+#define BLE_GATTS_OP_WRITE_CMD 0x02 /**< Write Command. */ -+#define BLE_GATTS_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ -+#define BLE_GATTS_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ -+#define BLE_GATTS_OP_EXEC_WRITE_REQ_CANCEL 0x05 /**< Execute Write Request: Cancel all prepared writes. */ -+#define BLE_GATTS_OP_EXEC_WRITE_REQ_NOW 0x06 /**< Execute Write Request: Immediately execute all prepared writes. */ -+/** @} */ -+ -+/** @defgroup BLE_GATTS_VLOCS GATT Value Locations -+ * @{ */ -+#define BLE_GATTS_VLOC_INVALID 0x00 /**< Invalid Location. */ -+#define BLE_GATTS_VLOC_STACK 0x01 /**< Attribute Value is located in stack memory, no user memory is required. */ -+#define BLE_GATTS_VLOC_USER 0x02 /**< Attribute Value is located in user memory. This requires the user to maintain a valid buffer through the lifetime of the attribute, since the stack -+ will read and write directly to the memory using the pointer provided in the APIs. There are no alignment requirements for the buffer. */ -+/** @} */ -+ -+/** @defgroup BLE_GATTS_AUTHORIZE_TYPES GATT Server Authorization Types -+ * @{ */ -+#define BLE_GATTS_AUTHORIZE_TYPE_INVALID 0x00 /**< Invalid Type. */ -+#define BLE_GATTS_AUTHORIZE_TYPE_READ 0x01 /**< Authorize a Read Operation. */ -+#define BLE_GATTS_AUTHORIZE_TYPE_WRITE 0x02 /**< Authorize a Write Request Operation. */ -+/** @} */ -+ -+/** @defgroup BLE_GATTS_SYS_ATTR_FLAGS System Attribute Flags -+ * @{ */ -+#define BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS (1 << 0) /**< Restrict system attributes to system services only. */ -+#define BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS (1 << 1) /**< Restrict system attributes to user services only. */ -+/** @} */ -+ -+/** @defgroup BLE_GATTS_ATTR_TAB_SIZE Attribute Table size -+ * @{ -+ */ -+#define BLE_GATTS_ATTR_TAB_SIZE_MIN 248 /**< Minimum Attribute Table size */ -+#define BLE_GATTS_ATTR_TAB_SIZE_DEFAULT 0x0000 /**< Default Attribute Table size (0x580 bytes for this version of the SoftDevice). */ -+/** @} */ -+ -+/** @} */ -+ -+/** @addtogroup BLE_GATTS_STRUCTURES Structures -+ * @{ */ -+ -+/** -+ * @brief BLE GATTS initialization parameters. -+ */ -+typedef struct -+{ -+ uint8_t service_changed:1; /**< Include the Service Changed characteristic in the Attribute Table. */ -+ uint32_t attr_tab_size; /**< Attribute Table size in bytes. The size must be a multiple of 4. @ref BLE_GATTS_ATTR_TAB_SIZE_DEFAULT is used to set the default size. */ -+} ble_gatts_enable_params_t; -+ -+/**@brief Attribute metadata. */ -+typedef struct -+{ -+ ble_gap_conn_sec_mode_t read_perm; /**< Read permissions. */ -+ ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ -+ uint8_t vlen :1; /**< Variable length attribute. */ -+ uint8_t vloc :2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ -+ uint8_t rd_auth :1; /**< Read authorization and value will be requested from the application on every read operation. */ -+ uint8_t wr_auth :1; /**< Write authorization will be requested from the application on every Write Request operation (but not Write Command). */ -+} ble_gatts_attr_md_t; -+ -+ -+/**@brief GATT Attribute. */ -+typedef struct -+{ -+ ble_uuid_t *p_uuid; /**< Pointer to the attribute UUID. */ -+ ble_gatts_attr_md_t *p_attr_md; /**< Pointer to the attribute metadata structure. */ -+ uint16_t init_len; /**< Initial attribute value length in bytes. */ -+ uint16_t init_offs; /**< Initial attribute value offset in bytes. If different from zero, the first init_offs bytes of the attribute value will be left uninitialized. */ -+ uint16_t max_len; /**< Maximum attribute value length in bytes, see @ref BLE_GATTS_ATTR_LENS_MAX for maximum values. */ -+ uint8_t* p_value; /**< Pointer to the attribute data. Please note that if the @ref BLE_GATTS_VLOC_USER value location is selected in the attribute metadata, this will have to point to a buffer -+ that remains valid through the lifetime of the attribute. This excludes usage of automatic variables that may go out of scope or any other temporary location. -+ The stack may access that memory directly without the application's knowledge. For writable characteristics, this value must not be a location in flash memory.*/ -+} ble_gatts_attr_t; -+ -+/**@brief GATT Attribute Value. */ -+typedef struct -+{ -+ uint16_t len; /**< Length in bytes to be written or read. Length in bytes written or read after successful return.*/ -+ uint16_t offset; /**< Attribute value offset. */ -+ uint8_t *p_value; /**< Pointer to where value is stored or will be stored. -+ If value is stored in user memory, only the attribute length is updated when p_value == NULL. -+ Set to NULL when reading to obtain the complete length of the attribute value */ -+} ble_gatts_value_t; -+ -+ -+/**@brief GATT Characteristic Presentation Format. */ -+typedef struct -+{ -+ uint8_t format; /**< Format of the value, see @ref BLE_GATT_CPF_FORMATS. */ -+ int8_t exponent; /**< Exponent for integer data types. */ -+ uint16_t unit; /**< Unit from Bluetooth Assigned Numbers. */ -+ uint8_t name_space; /**< Namespace from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ -+ uint16_t desc; /**< Namespace description from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ -+} ble_gatts_char_pf_t; -+ -+ -+/**@brief GATT Characteristic metadata. */ -+typedef struct -+{ -+ ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ -+ ble_gatt_char_ext_props_t char_ext_props; /**< Characteristic Extended Properties. */ -+ uint8_t *p_char_user_desc; /**< Pointer to a UTF-8 encoded string (non-NULL terminated), NULL if the descriptor is not required. */ -+ uint16_t char_user_desc_max_size; /**< The maximum size in bytes of the user description descriptor. */ -+ uint16_t char_user_desc_size; /**< The size of the user description, must be smaller or equal to char_user_desc_max_size. */ -+ ble_gatts_char_pf_t* p_char_pf; /**< Pointer to a presentation format structure or NULL if the CPF descriptor is not required. */ -+ ble_gatts_attr_md_t* p_user_desc_md; /**< Attribute metadata for the User Description descriptor, or NULL for default values. */ -+ ble_gatts_attr_md_t* p_cccd_md; /**< Attribute metadata for the Client Characteristic Configuration Descriptor, or NULL for default values. */ -+ ble_gatts_attr_md_t* p_sccd_md; /**< Attribute metadata for the Server Characteristic Configuration Descriptor, or NULL for default values. */ -+} ble_gatts_char_md_t; -+ -+ -+/**@brief GATT Characteristic Definition Handles. */ -+typedef struct -+{ -+ uint16_t value_handle; /**< Handle to the characteristic value. */ -+ uint16_t user_desc_handle; /**< Handle to the User Description descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ -+ uint16_t cccd_handle; /**< Handle to the Client Characteristic Configuration Descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ -+ uint16_t sccd_handle; /**< Handle to the Server Characteristic Configuration Descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ -+} ble_gatts_char_handles_t; -+ -+ -+/**@brief GATT HVx parameters. */ -+typedef struct -+{ -+ uint16_t handle; /**< Characteristic Value Handle. */ -+ uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ -+ uint16_t offset; /**< Offset within the attribute value. */ -+ uint16_t *p_len; /**< Length in bytes to be written, length in bytes written after successful return. */ -+ uint8_t *p_data; /**< Actual data content, use NULL to use the current attribute value. */ -+} ble_gatts_hvx_params_t; -+ -+/**@brief GATT Authorization parameters. */ -+typedef struct -+{ -+ uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ -+ uint8_t update : 1; /**< If set, data supplied in p_data will be used to update the attribute value. -+ Please note that for @ref BLE_GATTS_AUTHORIZE_TYPE_WRITE operations this bit must always be set, -+ as the data to be written needs to be stored and later provided by the application. */ -+ uint16_t offset; /**< Offset of the attribute value being updated. */ -+ uint16_t len; /**< Length in bytes of the value in p_data pointer, see @ref BLE_GATTS_ATTR_LENS_MAX. */ -+ const uint8_t *p_data; /**< Pointer to new value used to update the attribute value. */ -+} ble_gatts_authorize_params_t; -+ -+/**@brief GATT Read or Write Authorize Reply parameters. */ -+typedef struct -+{ -+ uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ -+ union { -+ ble_gatts_authorize_params_t read; /**< Read authorization parameters. */ -+ ble_gatts_authorize_params_t write; /**< Write authorization parameters. */ -+ } params; /**< Reply Parameters. */ -+} ble_gatts_rw_authorize_reply_params_t; -+ -+ -+ -+/**@brief Event structure for @ref BLE_GATTS_EVT_WRITE. */ -+typedef struct -+{ -+ uint16_t handle; /**< Attribute Handle. */ -+ ble_uuid_t uuid; /**< Attribute UUID. */ -+ uint8_t op; /**< Type of write operation, see @ref BLE_GATTS_OPS. */ -+ uint8_t auth_required; /**< Writing operation deferred due to authorization requirement. Application may use @ref sd_ble_gatts_value_set to finalise the writing operation. */ -+ uint16_t offset; /**< Offset for the write operation. */ -+ uint16_t len; /**< Length of the received data. */ -+ uint8_t data[1]; /**< Received data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+} ble_gatts_evt_write_t; -+ -+/**@brief Event substructure for authorized read requests, see @ref ble_gatts_evt_rw_authorize_request_t. */ -+typedef struct -+{ -+ uint16_t handle; /**< Attribute Handle. */ -+ ble_uuid_t uuid; /**< Attribute UUID. */ -+ uint16_t offset; /**< Offset for the read operation. */ -+} ble_gatts_evt_read_t; -+ -+/**@brief Event structure for @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST. */ -+typedef struct -+{ -+ uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ -+ union { -+ ble_gatts_evt_read_t read; /**< Attribute Read Parameters. */ -+ ble_gatts_evt_write_t write; /**< Attribute Write Parameters. */ -+ } request; /**< Request Parameters. */ -+} ble_gatts_evt_rw_authorize_request_t; -+ -+/**@brief Event structure for @ref BLE_GATTS_EVT_SYS_ATTR_MISSING. */ -+typedef struct -+{ -+ uint8_t hint; /**< Hint (currently unused). */ -+} ble_gatts_evt_sys_attr_missing_t; -+ -+ -+/**@brief Event structure for @ref BLE_GATTS_EVT_HVC. */ -+typedef struct -+{ -+ uint16_t handle; /**< Attribute Handle. */ -+} ble_gatts_evt_hvc_t; -+ -+/**@brief Event structure for @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST. */ -+typedef struct -+{ -+ uint16_t client_rx_mtu; /**< Client RX MTU size. */ -+} ble_gatts_evt_exchange_mtu_request_t; -+ -+/**@brief Event structure for @ref BLE_GATTS_EVT_TIMEOUT. */ -+typedef struct -+{ -+ uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ -+} ble_gatts_evt_timeout_t; -+ -+ -+/**@brief GATTS event structure. */ -+typedef struct -+{ -+ uint16_t conn_handle; /**< Connection Handle on which the event occurred. */ -+ union -+ { -+ ble_gatts_evt_write_t write; /**< Write Event Parameters. */ -+ ble_gatts_evt_rw_authorize_request_t authorize_request; /**< Read or Write Authorize Request Parameters. */ -+ ble_gatts_evt_sys_attr_missing_t sys_attr_missing; /**< System attributes missing. */ -+ ble_gatts_evt_hvc_t hvc; /**< Handle Value Confirmation Event Parameters. */ -+ ble_gatts_evt_exchange_mtu_request_t exchange_mtu_request; /**< Exchange MTU Request Event Parameters. */ -+ ble_gatts_evt_timeout_t timeout; /**< Timeout Event. */ -+ } params; /**< Event Parameters. */ -+} ble_gatts_evt_t; -+ -+/** @} */ -+ -+/** @addtogroup BLE_GATTS_FUNCTIONS Functions -+ * @{ */ -+ -+/**@brief Add a service declaration to the Attribute Table. -+ * -+ * @note Secondary Services are only relevant in the context of the entity that references them, it is therefore forbidden to -+ * add a secondary service declaration that is not referenced by another service later in the Attribute Table. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} -+ * @endmscs -+ * -+ * @param[in] type Toggles between primary and secondary services, see @ref BLE_GATTS_SRVC_TYPES. -+ * @param[in] p_uuid Pointer to service UUID. -+ * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. -+ * -+ * @retval ::NRF_SUCCESS Successfully added a service declaration. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, Vendor Specific UUIDs need to be present in the table. -+ * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. -+ * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. -+ */ -+SVCALL(SD_BLE_GATTS_SERVICE_ADD, uint32_t, sd_ble_gatts_service_add(uint8_t type, ble_uuid_t const *p_uuid, uint16_t *p_handle)); -+ -+ -+/**@brief Add an include declaration to the Attribute Table. -+ * -+ * @note It is currently only possible to add an include declaration to the last added service (i.e. only sequential population is supported at this time). -+ * -+ * @note The included service must already be present in the Attribute Table prior to this call. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} -+ * @endmscs -+ * -+ * @param[in] service_handle Handle of the service where the included service is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. -+ * @param[in] inc_srvc_handle Handle of the included service. -+ * @param[out] p_include_handle Pointer to a 16-bit word where the assigned handle will be stored. -+ * -+ * @retval ::NRF_SUCCESS Successfully added an include declaration. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, handle values need to match previously added services. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::NRF_ERROR_NOT_SUPPORTED Feature is not supported, service_handle must be that of the last added service. -+ * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, self inclusions are not allowed. -+ * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. -+ * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. -+ */ -+SVCALL(SD_BLE_GATTS_INCLUDE_ADD, uint32_t, sd_ble_gatts_include_add(uint16_t service_handle, uint16_t inc_srvc_handle, uint16_t *p_include_handle)); -+ -+ -+/**@brief Add a characteristic declaration, a characteristic value declaration and optional characteristic descriptor declarations to the Attribute Table. -+ * -+ * @note It is currently only possible to add a characteristic to the last added service (i.e. only sequential population is supported at this time). -+ * -+ * @note Several restrictions apply to the parameters, such as matching permissions between the user description descriptor and the writeable auxiliaries bits, -+ * readable (no security) and writeable (selectable) CCCDs and SCCDs and valid presentation format values. -+ * -+ * @note If no metadata is provided for the optional descriptors, their permissions will be derived from the characteristic permissions. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} -+ * @endmscs -+ * -+ * @param[in] service_handle Handle of the service where the characteristic is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. -+ * @param[in] p_char_md Characteristic metadata. -+ * @param[in] p_attr_char_value Pointer to the attribute structure corresponding to the characteristic value. -+ * @param[out] p_handles Pointer to the structure where the assigned handles will be stored. -+ * -+ * @retval ::NRF_SUCCESS Successfully added a characteristic. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, service handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a service context is required. -+ * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. -+ * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. -+ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. -+ */ -+SVCALL(SD_BLE_GATTS_CHARACTERISTIC_ADD, uint32_t, sd_ble_gatts_characteristic_add(uint16_t service_handle, ble_gatts_char_md_t const *p_char_md, ble_gatts_attr_t const *p_attr_char_value, ble_gatts_char_handles_t *p_handles)); -+ -+ -+/**@brief Add a descriptor to the Attribute Table. -+ * -+ * @note It is currently only possible to add a descriptor to the last added characteristic (i.e. only sequential population is supported at this time). -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} -+ * @endmscs -+ * -+ * @param[in] char_handle Handle of the characteristic where the descriptor is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. -+ * @param[in] p_attr Pointer to the attribute structure. -+ * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. -+ * -+ * @retval ::NRF_SUCCESS Successfully added a descriptor. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, characteristic handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a characteristic context is required. -+ * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. -+ * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. -+ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. -+ */ -+SVCALL(SD_BLE_GATTS_DESCRIPTOR_ADD, uint32_t, sd_ble_gatts_descriptor_add(uint16_t char_handle, ble_gatts_attr_t const *p_attr, uint16_t *p_handle)); -+ -+/**@brief Set the value of a given attribute. -+ * -+ * @note Values other than system attributes can be set at any time, regardless of wheter any active connections exist. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} -+ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. If the value does not belong to a system attribute then @ref BLE_CONN_HANDLE_INVALID can be used. -+ * @param[in] handle Attribute handle. -+ * @param[in,out] p_value Attribute value information. -+ * -+ * @retval ::NRF_SUCCESS Successfully set the value of the attribute. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. -+ * @retval ::NRF_ERROR_FORBIDDEN Forbidden handle supplied, certain attributes are not modifiable by the application. -+ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ * @retval ::BLE_ERROR_GATTS_INVALID_ATTR_TYPE @ref BLE_CONN_HANDLE_INVALID supplied on a system attribute. -+ */ -+SVCALL(SD_BLE_GATTS_VALUE_SET, uint32_t, sd_ble_gatts_value_set(uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value)); -+ -+/**@brief Get the value of a given attribute. -+ * -+ * @note If the attribute value is longer than the size of the supplied buffer, -+ * p_len will return the total attribute value length (excluding offset), -+ * and not the number of bytes actually returned in p_data. -+ * The application may use this information to allocate a suitable buffer size. -+ * -+ * @note When retrieving system attribute values with this function, the connection handle -+ * may refer to an already disconnected connection. Refer to the documentation of -+ * @ref sd_ble_gatts_sys_attr_get for further information. -+ * -+ * @param[in] conn_handle Connection handle. If the value does not belong to a system attribute then @ref BLE_CONN_HANDLE_INVALID can be used. -+ * @param[in] handle Attribute handle. -+ * @param[in,out] p_value Attribute value information. -+ * -+ * @retval ::NRF_SUCCESS Successfully retrieved the value of the attribute. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid attribute offset supplied. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ * @retval ::BLE_ERROR_GATTS_INVALID_ATTR_TYPE @ref BLE_CONN_HANDLE_INVALID supplied on a system attribute. -+ * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. -+ */ -+SVCALL(SD_BLE_GATTS_VALUE_GET, uint32_t, sd_ble_gatts_value_get(uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value)); -+ -+/**@brief Notify or Indicate an attribute value. -+ * -+ * @details This function checks for the relevant Client Characteristic Configuration descriptor value to verify that the relevant operation -+ * (notification or indication) has been enabled by the client. It is also able to update the attribute value before issuing the PDU, so that -+ * the application can atomically perform a value update and a server initiated transaction with a single API call. -+ * If the application chooses to indicate an attribute value, a @ref BLE_GATTS_EVT_HVC event will be issued as soon as the confirmation arrives from -+ * the peer. -+ * -+ * @note The local attribute value may be updated even if an outgoing packet is not sent to the peer due to an error during execution. -+ * The Attribute Table has been updated if one of the following error codes is returned: @ref NRF_ERROR_INVALID_STATE, @ref NRF_ERROR_BUSY, -+ * @ref NRF_ERROR_FORBIDDEN, @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING and @ref BLE_ERROR_NO_TX_PACKETS. -+ * The caller can check whether the value has been updated by looking at the contents of *(p_hvx_params->p_len). -+ * -+ * @note It is important to note that a notification will consume an application buffer, and will therefore -+ * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. An indication on the other hand will use the -+ * standard server internal buffer and thus will only generate a @ref BLE_GATTS_EVT_HVC event as soon as the confirmation -+ * has been received from the peer. Please see the documentation of @ref sd_ble_tx_packet_count_get for more details. -+ * -+ * @events -+ * @event{@ref BLE_EVT_TX_COMPLETE, Transmission complete.} -+ * @event{@ref BLE_GATTS_EVT_HVC, Confirmation received from peer.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTS_HVX_SYS_ATTRS_MISSING_MSC} -+ * @mmsc{@ref BLE_GATTS_HVN_MSC} -+ * @mmsc{@ref BLE_GATTS_HVI_MSC} -+ * @mmsc{@ref BLE_GATTS_HVX_DISABLED_MSC} -+ * @mmsc{@ref BLE_COMMON_APP_BUFF_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] p_hvx_params Pointer to an HVx parameters structure. If the p_data member contains a non-NULL pointer the attribute value will be updated with -+ * the contents pointed by it before sending the notification or indication. -+ * -+ * @retval ::NRF_SUCCESS Successfully queued a notification or indication for transmission, and optionally updated the attribute value. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE One or more of the following is true: -+ * - Invalid Connection State -+ * - Notifications and/or indications not enabled in the CCCD -+ * - An ATT_MTU exchange is ongoing -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied. Only attributes added directly by the application are available to notify and indicate. -+ * @retval ::BLE_ERROR_GATTS_INVALID_ATTR_TYPE Invalid attribute type(s) supplied, only characteristic values may be notified and indicated. -+ * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. -+ * @retval ::NRF_ERROR_FORBIDDEN The connection's current security level is lower than the one required by the write permissions of the CCCD associated with this characteristic. -+ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. -+ * @retval ::NRF_ERROR_BUSY Procedure already in progress. -+ * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. -+ * @retval ::BLE_ERROR_NO_TX_PACKETS No available application packets for this connection, applies only to notifications. -+ */ -+SVCALL(SD_BLE_GATTS_HVX, uint32_t, sd_ble_gatts_hvx(uint16_t conn_handle, ble_gatts_hvx_params_t const *p_hvx_params)); -+ -+/**@brief Indicate the Service Changed attribute value. -+ * -+ * @details This call will send a Handle Value Indication to one or more peers connected to inform them that the Attribute -+ * Table layout has changed. As soon as the peer has confirmed the indication, a @ref BLE_GATTS_EVT_SC_CONFIRM event will -+ * be issued. -+ * -+ * @note Some of the restrictions and limitations that apply to @ref sd_ble_gatts_hvx also apply here. -+ * -+ * @events -+ * @event{@ref BLE_GATTS_EVT_SC_CONFIRM, Confirmation of attribute table change received from peer.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTS_SC_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] start_handle Start of affected attribute handle range. -+ * @param[in] end_handle End of affected attribute handle range. -+ * -+ * @retval ::NRF_SUCCESS Successfully queued the Service Changed indication for transmission. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_NOT_SUPPORTED Service Changed not enabled at initialization. See @ref sd_ble_enable and @ref ble_gatts_enable_params_t. -+ * @retval ::NRF_ERROR_INVALID_STATE One or more of the following is true: -+ * - Invalid Connection State -+ * - Notifications and/or indications not enabled in the CCCD -+ * - An ATT_MTU exchange is ongoing -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied, handles must be in the range populated by the application. -+ * @retval ::NRF_ERROR_BUSY Procedure already in progress. -+ * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. -+ */ -+SVCALL(SD_BLE_GATTS_SERVICE_CHANGED, uint32_t, sd_ble_gatts_service_changed(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle)); -+ -+/**@brief Respond to a Read/Write authorization request. -+ * -+ * @note This call should only be used as a response to a @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST event issued to the application. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC} -+ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC} -+ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} -+ * @mmsc{@ref BLE_GATTS_READ_REQ_AUTH_MSC} -+ * @mmsc{@ref BLE_GATTS_WRITE_REQ_AUTH_MSC} -+ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} -+ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_PEER_CANCEL_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] p_rw_authorize_reply_params Pointer to a structure with the attribute provided by the application. -+ * -+ * @note @ref ble_gatts_authorize_params_t::p_data is ignored when this function is used to respond -+ * to a @ref BLE_GATTS_AUTHORIZE_TYPE_READ event if @ref ble_gatts_authorize_params_t::update -+ * is set to 0. -+ * -+ * @retval ::NRF_SUCCESS Successfully queued a response to the peer, and in the case of a write operation, Attribute Table updated. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no authorization request pending. -+ * @retval ::NRF_ERROR_INVALID_PARAM Authorization op invalid, -+ * handle supplied does not match requested handle, -+ * or invalid data to be written provided by the application. -+ * @retval ::NRF_ERROR_BUSY The stack is busy. Retry at later time. -+ */ -+SVCALL(SD_BLE_GATTS_RW_AUTHORIZE_REPLY, uint32_t, sd_ble_gatts_rw_authorize_reply(uint16_t conn_handle, ble_gatts_rw_authorize_reply_params_t const *p_rw_authorize_reply_params)); -+ -+ -+/**@brief Update persistent system attribute information. -+ * -+ * @details Supply information about persistent system attributes to the stack, -+ * previously obtained using @ref sd_ble_gatts_sys_attr_get. -+ * This call is only allowed for active connections, and is usually -+ * made immediately after a connection is established with an known bonded device, -+ * often as a response to a @ref BLE_GATTS_EVT_SYS_ATTR_MISSING. -+ * -+ * p_sysattrs may point directly to the application's stored copy of the system attributes -+ * obtained using @ref sd_ble_gatts_sys_attr_get. -+ * If the pointer is NULL, the system attribute info is initialized, assuming that -+ * the application does not have any previously saved system attribute data for this device. -+ * -+ * @note The state of persistent system attributes is reset upon connection establishment and then remembered for its duration. -+ * -+ * @note If this call returns with an error code different from @ref NRF_SUCCESS, the storage of persistent system attributes may have been completed only partially. -+ * This means that the state of the attribute table is undefined, and the application should either provide a new set of attributes using this same call or -+ * reset the SoftDevice to return to a known state. -+ * -+ * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS is used with this function, only the system attributes included in system services will be modified. -+ * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS is used with this function, only the system attributes included in user services will be modified. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTS_HVX_SYS_ATTRS_MISSING_MSC} -+ * @mmsc{@ref BLE_GATTS_SYS_ATTRS_UNK_PEER_MSC} -+ * @mmsc{@ref BLE_GATTS_SYS_ATTRS_BONDED_PEER_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] p_sys_attr_data Pointer to a saved copy of system attributes supplied to the stack, or NULL. -+ * @param[in] len Size of data pointed by p_sys_attr_data, in octets. -+ * @param[in] flags Optional additional flags, see @ref BLE_GATTS_SYS_ATTR_FLAGS -+ * -+ * @retval ::NRF_SUCCESS Successfully set the system attribute information. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid flags supplied. -+ * @retval ::NRF_ERROR_INVALID_DATA Invalid data supplied, the data should be exactly the same as retrieved with @ref sd_ble_gatts_sys_attr_get. -+ * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. -+ * @retval ::NRF_ERROR_BUSY The stack is busy. Retry at later time. -+ */ -+SVCALL(SD_BLE_GATTS_SYS_ATTR_SET, uint32_t, sd_ble_gatts_sys_attr_set(uint16_t conn_handle, uint8_t const *p_sys_attr_data, uint16_t len, uint32_t flags)); -+ -+ -+/**@brief Retrieve persistent system attribute information from the stack. -+ * -+ * @details This call is used to retrieve information about values to be stored perisistently by the application -+ * during the lifetime of a connection or after it has been terminated. When a new connection is established with the same bonded device, -+ * the system attribute information retrieved with this function should be restored using using @ref sd_ble_gatts_sys_attr_set. -+ * If retrieved after disconnection, the data should be read before a new connection established. The connection handle for -+ * the previous, now disconnected, connection will remain valid until a new one is created to allow this API call to refer to it. -+ * Connection handles belonging to active connections can be used as well, but care should be taken since the system attributes -+ * may be written to at any time by the peer during a connection's lifetime. -+ * -+ * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS is used with this function, only the system attributes included in system services will be returned. -+ * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS is used with this function, only the system attributes included in user services will be returned. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTS_SYS_ATTRS_BONDED_PEER_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle of the recently terminated connection. -+ * @param[out] p_sys_attr_data Pointer to a buffer where updated information about system attributes will be filled in. The format of the data is described -+ * in @ref BLE_GATTS_SYS_ATTRS_FORMAT. NULL can be provided to obtain the length of the data. -+ * @param[in,out] p_len Size of application buffer if p_sys_attr_data is not NULL. Unconditially updated to actual length of system attribute data. -+ * @param[in] flags Optional additional flags, see @ref BLE_GATTS_SYS_ATTR_FLAGS -+ * -+ * @retval ::NRF_SUCCESS Successfully retrieved the system attribute information. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid flags supplied. -+ * @retval ::NRF_ERROR_DATA_SIZE The system attribute information did not fit into the provided buffer. -+ * @retval ::NRF_ERROR_NOT_FOUND No system attributes found. -+ */ -+SVCALL(SD_BLE_GATTS_SYS_ATTR_GET, uint32_t, sd_ble_gatts_sys_attr_get(uint16_t conn_handle, uint8_t *p_sys_attr_data, uint16_t *p_len, uint32_t flags)); -+ -+ -+/**@brief Retrieve the first valid user attribute handle. -+ * -+ * @param[out] p_handle Pointer to an integer where the handle will be stored. -+ * -+ * @retval ::NRF_SUCCESS Successfully retrieved the handle. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ */ -+SVCALL(SD_BLE_GATTS_INITIAL_USER_HANDLE_GET, uint32_t, sd_ble_gatts_initial_user_handle_get(uint16_t *p_handle)); -+ -+/**@brief Retrieve the attribute UUID and/or metadata. -+ * -+ * @param[in] handle Attribute handle -+ * @param[out] p_uuid UUID of the attribute. Use NULL to omit this field. -+ * @param[out] p_md Metadata of the attribute. Use NULL to omit this field. -+ * -+ * @retval ::NRF_SUCCESS Successfully retrieved the attribute metadata, -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameters supplied. Returned when both @c p_uuid and @c p_md are NULL. -+ * @retval ::NRF_ERROR_NOT_FOUND Attribute was not found. -+ */ -+SVCALL(SD_BLE_GATTS_ATTR_GET, uint32_t, sd_ble_gatts_attr_get(uint16_t handle, ble_uuid_t * p_uuid, ble_gatts_attr_md_t * p_md)); -+ -+/**@brief Reply to an ATT_MTU exchange request by sending an Exchange MTU Response to the client. -+ * -+ * @details This function is only used to reply to a @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST event. -+ * -+ * @details The SoftDevice sets ATT_MTU to the minimum of: -+ * - The Client RX MTU value from @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST, and -+ * - The Server RX MTU value. -+ * -+ * However, the SoftDevice never sets ATT_MTU lower than @ref GATT_MTU_SIZE_DEFAULT. -+ * -+ * @events -+ * @event{@ref BLE_EVT_DATA_LENGTH_CHANGED, Generated if a data length update procedure is performed after the ATT_MTU exchange.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTS_MTU_EXCHANGE} -+ * @endmscs -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] server_rx_mtu Server RX MTU size. -+ * - The minimum value is @ref GATT_MTU_SIZE_DEFAULT. -+ * - The maximum value is @ref ble_gatt_enable_params_t::att_mtu. -+ * - The value must be equal to Client RX MTU size given in @ref sd_ble_gattc_exchange_mtu_request -+ * if an ATT_MTU exchange has already been performed in the other direction. -+ * -+ * @retval ::NRF_SUCCESS Successfully sent response to the client. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no ATT_MTU exchange request pending. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid Server RX MTU size supplied. -+ * @retval ::NRF_ERROR_BUSY The stack is busy. Retry at later time. -+ */ -+SVCALL(SD_BLE_GATTS_EXCHANGE_MTU_REPLY, uint32_t, sd_ble_gatts_exchange_mtu_reply(uint16_t conn_handle, uint16_t server_rx_mtu)); -+/** @} */ -+ -+#ifdef __cplusplus -+} -+#endif -+#endif // BLE_GATTS_H__ -+ -+/** -+ @} -+*/ -diff -u -r -N a/components/softdevice/s132v3/headers/ble_hci.h b/components/softdevice/s132v3/headers/ble_hci.h ---- a/components/softdevice/s132v3/headers/ble_hci.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v3/headers/ble_hci.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,131 @@ -+/* -+ * Copyright (c) Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form must reproduce the above copyright notice, this -+ * list of conditions and the following disclaimer in the documentation and/or -+ * other materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other -+ * contributors to this software may be used to endorse or promote products -+ * derived from this software without specific prior written permission. -+ * -+ * 4. This software must only be used in a processor manufactured by Nordic -+ * Semiconductor ASA, or in a processor manufactured by a third party that -+ * is used in combination with a processor manufactured by Nordic Semiconductor. -+ * -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ * -+ */ -+ -+/** -+ @addtogroup BLE_COMMON -+ @{ -+*/ -+ -+ -+#ifndef BLE_HCI_H__ -+#define BLE_HCI_H__ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/** @defgroup BLE_HCI_STATUS_CODES Bluetooth status codes -+ * @{ */ -+ -+#define BLE_HCI_STATUS_CODE_SUCCESS 0x00 /**< Success. */ -+#define BLE_HCI_STATUS_CODE_UNKNOWN_BTLE_COMMAND 0x01 /**< Unknown BLE Command. */ -+#define BLE_HCI_STATUS_CODE_UNKNOWN_CONNECTION_IDENTIFIER 0x02 /**< Unknown Connection Identifier. */ -+/*0x03 Hardware Failure -+0x04 Page Timeout -+*/ -+#define BLE_HCI_AUTHENTICATION_FAILURE 0x05 /**< Authentication Failure. */ -+#define BLE_HCI_STATUS_CODE_PIN_OR_KEY_MISSING 0x06 /**< Pin or Key missing. */ -+#define BLE_HCI_MEMORY_CAPACITY_EXCEEDED 0x07 /**< Memory Capacity Exceeded. */ -+#define BLE_HCI_CONNECTION_TIMEOUT 0x08 /**< Connection Timeout. */ -+/*0x09 Connection Limit Exceeded -+0x0A Synchronous Connection Limit To A Device Exceeded -+0x0B ACL Connection Already Exists*/ -+#define BLE_HCI_STATUS_CODE_COMMAND_DISALLOWED 0x0C /**< Command Disallowed. */ -+/*0x0D Connection Rejected due to Limited Resources -+0x0E Connection Rejected Due To Security Reasons -+0x0F Connection Rejected due to Unacceptable BD_ADDR -+0x10 Connection Accept Timeout Exceeded -+0x11 Unsupported Feature or Parameter Value*/ -+#define BLE_HCI_STATUS_CODE_INVALID_BTLE_COMMAND_PARAMETERS 0x12 /**< Invalid BLE Command Parameters. */ -+#define BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION 0x13 /**< Remote User Terminated Connection. */ -+#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES 0x14 /**< Remote Device Terminated Connection due to low resources.*/ -+#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF 0x15 /**< Remote Device Terminated Connection due to power off. */ -+#define BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTION 0x16 /**< Local Host Terminated Connection. */ -+/* -+0x17 Repeated Attempts -+0x18 Pairing Not Allowed -+0x19 Unknown LMP PDU -+*/ -+#define BLE_HCI_UNSUPPORTED_REMOTE_FEATURE 0x1A /**< Unsupported Remote Feature. */ -+/* -+0x1B SCO Offset Rejected -+0x1C SCO Interval Rejected -+0x1D SCO Air Mode Rejected*/ -+#define BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS 0x1E /**< Invalid LMP Parameters. */ -+#define BLE_HCI_STATUS_CODE_UNSPECIFIED_ERROR 0x1F /**< Unspecified Error. */ -+/*0x20 Unsupported LMP Parameter Value -+0x21 Role Change Not Allowed -+*/ -+#define BLE_HCI_STATUS_CODE_LMP_RESPONSE_TIMEOUT 0x22 /**< LMP Response Timeout. */ -+/*0x23 LMP Error Transaction Collision*/ -+#define BLE_HCI_STATUS_CODE_LMP_PDU_NOT_ALLOWED 0x24 /**< LMP PDU Not Allowed. */ -+/*0x25 Encryption Mode Not Acceptable -+0x26 Link Key Can Not be Changed -+0x27 Requested QoS Not Supported -+*/ -+#define BLE_HCI_INSTANT_PASSED 0x28 /**< Instant Passed. */ -+#define BLE_HCI_PAIRING_WITH_UNIT_KEY_UNSUPPORTED 0x29 /**< Pairing with Unit Key Unsupported. */ -+#define BLE_HCI_DIFFERENT_TRANSACTION_COLLISION 0x2A /**< Different Transaction Collision. */ -+/* -+0x2B Reserved -+0x2C QoS Unacceptable Parameter -+0x2D QoS Rejected -+0x2E Channel Classification Not Supported -+0x2F Insufficient Security -+0x30 Parameter Out Of Mandatory Range -+0x31 Reserved -+0x32 Role Switch Pending -+0x33 Reserved -+0x34 Reserved Slot Violation -+0x35 Role Switch Failed -+0x36 Extended Inquiry Response Too Large -+0x37 Secure Simple Pairing Not Supported By Host. -+0x38 Host Busy - Pairing -+0x39 Connection Rejected due to No Suitable Channel Found*/ -+#define BLE_HCI_CONTROLLER_BUSY 0x3A /**< Controller Busy. */ -+#define BLE_HCI_CONN_INTERVAL_UNACCEPTABLE 0x3B /**< Connection Interval Unacceptable. */ -+#define BLE_HCI_DIRECTED_ADVERTISER_TIMEOUT 0x3C /**< Directed Adverisement Timeout. */ -+#define BLE_HCI_CONN_TERMINATED_DUE_TO_MIC_FAILURE 0x3D /**< Connection Terminated due to MIC Failure. */ -+#define BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED 0x3E /**< Connection Failed to be Established. */ -+ -+/** @} */ -+ -+ -+#ifdef __cplusplus -+} -+#endif -+#endif // BLE_HCI_H__ -+ -+/** @} */ -diff -u -r -N a/components/softdevice/s132v3/headers/ble_l2cap.h b/components/softdevice/s132v3/headers/ble_l2cap.h ---- a/components/softdevice/s132v3/headers/ble_l2cap.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v3/headers/ble_l2cap.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,202 @@ -+/* -+ * Copyright (c) Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form must reproduce the above copyright notice, this -+ * list of conditions and the following disclaimer in the documentation and/or -+ * other materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other -+ * contributors to this software may be used to endorse or promote products -+ * derived from this software without specific prior written permission. -+ * -+ * 4. This software must only be used in a processor manufactured by Nordic -+ * Semiconductor ASA, or in a processor manufactured by a third party that -+ * is used in combination with a processor manufactured by Nordic Semiconductor. -+ * -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ * -+ */ -+ -+/** -+ @addtogroup BLE_L2CAP Logical Link Control and Adaptation Protocol (L2CAP) -+ @{ -+ @brief Definitions and prototypes for the L2CAP interface. -+ */ -+ -+#ifndef BLE_L2CAP_H__ -+#define BLE_L2CAP_H__ -+ -+#include "ble_types.h" -+#include "ble_ranges.h" -+#include "ble_err.h" -+#include "nrf_svc.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/**@addtogroup BLE_L2CAP_ENUMERATIONS Enumerations -+ * @{ */ -+ -+/**@brief L2CAP API SVC numbers. */ -+enum BLE_L2CAP_SVCS -+{ -+ SD_BLE_L2CAP_CID_REGISTER = BLE_L2CAP_SVC_BASE, /**< Register a CID. */ -+ SD_BLE_L2CAP_CID_UNREGISTER, /**< Unregister a CID. */ -+ SD_BLE_L2CAP_TX /**< Transmit a packet. */ -+}; -+ -+/**@brief L2CAP Event IDs. */ -+enum BLE_L2CAP_EVTS -+{ -+ BLE_L2CAP_EVT_RX = BLE_L2CAP_EVT_BASE /**< L2CAP packet received. */ -+}; -+ -+/** @} */ -+ -+/**@addtogroup BLE_L2CAP_DEFINES Defines -+ * @{ */ -+ -+/**@defgroup BLE_ERRORS_L2CAP SVC return values specific to L2CAP -+ * @{ */ -+#define BLE_ERROR_L2CAP_CID_IN_USE (NRF_L2CAP_ERR_BASE + 0x000) /**< CID already in use. */ -+/** @} */ -+ -+/**@brief Default L2CAP MTU. */ -+#define BLE_L2CAP_MTU_DEF (23) -+ -+/**@brief Invalid Channel Identifier. */ -+#define BLE_L2CAP_CID_INVALID (0x0000) -+ -+/**@brief Dynamic Channel Identifier base. */ -+#define BLE_L2CAP_CID_DYN_BASE (0x0040) -+ -+/**@brief Maximum amount of dynamic CIDs. */ -+#define BLE_L2CAP_CID_DYN_MAX (8) -+ -+/** @} */ -+ -+/**@addtogroup BLE_L2CAP_STRUCTURES Structures -+ * @{ */ -+ -+/**@brief Packet header format for L2CAP transmission. */ -+typedef struct -+{ -+ uint16_t len; /**< Length of valid info in data member. */ -+ uint16_t cid; /**< Channel ID on which packet is transmitted. */ -+} ble_l2cap_header_t; -+ -+ -+/**@brief L2CAP Received packet event report. */ -+typedef struct -+{ -+ ble_l2cap_header_t header; /**< L2CAP packet header. */ -+ uint8_t data[1]; /**< Packet data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+} ble_l2cap_evt_rx_t; -+ -+ -+/**@brief L2CAP event callback event structure. */ -+typedef struct -+{ -+ uint16_t conn_handle; /**< Connection Handle on which event occured. */ -+ union -+ { -+ ble_l2cap_evt_rx_t rx; /**< RX Event parameters. */ -+ } params; /**< Event Parameters. */ -+} ble_l2cap_evt_t; -+ -+/** @} */ -+ -+/**@addtogroup BLE_L2CAP_FUNCTIONS Functions -+ * @{ */ -+ -+/**@brief Register a CID with L2CAP. -+ * -+ * @details This registers a higher protocol layer with the L2CAP multiplexer, and is requried prior to all operations on the CID. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_L2CAP_API_MSC} -+ * @endmscs -+ * -+ * @param[in] cid L2CAP CID. -+ * -+ * @retval ::NRF_SUCCESS Successfully registered a CID with the L2CAP layer. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, CID must be above @ref BLE_L2CAP_CID_DYN_BASE. -+ * @retval ::BLE_ERROR_L2CAP_CID_IN_USE L2CAP CID already in use. -+ * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. -+ */ -+SVCALL(SD_BLE_L2CAP_CID_REGISTER, uint32_t, sd_ble_l2cap_cid_register(uint16_t cid)); -+ -+/**@brief Unregister a CID with L2CAP. -+ * -+ * @details This unregisters a previously registerd higher protocol layer with the L2CAP multiplexer. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_L2CAP_API_MSC} -+ * @endmscs -+ * -+ * @param[in] cid L2CAP CID. -+ * -+ * @retval ::NRF_SUCCESS Successfully unregistered the CID. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_NOT_FOUND CID not previously registered. -+ */ -+SVCALL(SD_BLE_L2CAP_CID_UNREGISTER, uint32_t, sd_ble_l2cap_cid_unregister(uint16_t cid)); -+ -+/**@brief Transmit an L2CAP packet. -+ * -+ * @note It is important to note that a call to this function will consume an application packet, and will therefore -+ * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. -+ * Please see the documentation of @ref sd_ble_tx_packet_count_get for more details. -+ * -+ * @events -+ * @event{@ref BLE_EVT_TX_COMPLETE} -+ * @event{@ref BLE_L2CAP_EVT_RX} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_L2CAP_API_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection Handle. -+ * @param[in] p_header Pointer to a packet header containing length and CID. -+ * @param[in] p_data Pointer to the data to be transmitted. -+ * -+ * @retval ::NRF_SUCCESS Successfully queued an L2CAP packet for transmission. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, CIDs must be registered beforehand with @ref sd_ble_l2cap_cid_register. -+ * @retval ::NRF_ERROR_NOT_FOUND CID not found. -+ * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. -+ * @retval ::BLE_ERROR_NO_TX_PACKETS Not enough application packets available. -+ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, see @ref BLE_L2CAP_MTU_DEF. -+ */ -+SVCALL(SD_BLE_L2CAP_TX, uint32_t, sd_ble_l2cap_tx(uint16_t conn_handle, ble_l2cap_header_t const *p_header, uint8_t const *p_data)); -+ -+/** @} */ -+ -+#ifdef __cplusplus -+} -+#endif -+#endif // BLE_L2CAP_H__ -+ -+/** -+ @} -+*/ -diff -u -r -N a/components/softdevice/s132v3/headers/ble_ranges.h b/components/softdevice/s132v3/headers/ble_ranges.h ---- a/components/softdevice/s132v3/headers/ble_ranges.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v3/headers/ble_ranges.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,138 @@ -+/* -+ * Copyright (c) Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form must reproduce the above copyright notice, this -+ * list of conditions and the following disclaimer in the documentation and/or -+ * other materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other -+ * contributors to this software may be used to endorse or promote products -+ * derived from this software without specific prior written permission. -+ * -+ * 4. This software must only be used in a processor manufactured by Nordic -+ * Semiconductor ASA, or in a processor manufactured by a third party that -+ * is used in combination with a processor manufactured by Nordic Semiconductor. -+ * -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ * -+ */ -+ -+/** -+ @addtogroup BLE_COMMON -+ @{ -+ @defgroup ble_ranges Module specific SVC, event and option number subranges -+ @{ -+ -+ @brief Definition of SVC, event and option number subranges for each API module. -+ -+ @note -+ SVCs, event and option numbers are split into subranges for each API module. -+ Each module receives its entire allocated range of SVC calls, whether implemented or not, -+ but return BLE_ERROR_NOT_SUPPORTED for unimplemented or undefined calls in its range. -+ -+ Note that the symbols BLE__SVC_LAST is the end of the allocated SVC range, -+ rather than the last SVC function call actually defined and implemented. -+ -+ Specific SVC, event and option values are defined in each module's ble_.h file, -+ which defines names of each individual SVC code based on the range start value. -+*/ -+ -+#ifndef BLE_RANGES_H__ -+#define BLE_RANGES_H__ -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+#define BLE_SVC_BASE 0x60 /**< Common BLE SVC base. */ -+#define BLE_SVC_LAST 0x6B /**< Common BLE SVC last. */ -+ -+ -+#define BLE_GAP_SVC_BASE 0x6C /**< GAP BLE SVC base. */ -+#define BLE_GAP_SVC_LAST 0x93 /**< GAP BLE SVC last. */ -+ -+ -+#define BLE_GATTC_SVC_BASE 0x94 /**< GATTC BLE SVC base. */ -+#define BLE_GATTC_SVC_LAST 0x9F /**< GATTC BLE SVC last. */ -+ -+ -+#define BLE_GATTS_SVC_BASE 0xA0 /**< GATTS BLE SVC base. */ -+#define BLE_GATTS_SVC_LAST 0xAF /**< GATTS BLE SVC last. */ -+ -+ -+#define BLE_L2CAP_SVC_BASE 0xB0 /**< L2CAP BLE SVC base. */ -+#define BLE_L2CAP_SVC_LAST 0xBF /**< L2CAP BLE SVC last. */ -+ -+ -+#define BLE_EVT_INVALID 0x00 /**< Invalid BLE Event. */ -+ -+ -+#define BLE_EVT_BASE 0x01 /**< Common BLE Event base. */ -+#define BLE_EVT_LAST 0x0F /**< Common BLE Event last. */ -+ -+ -+#define BLE_GAP_EVT_BASE 0x10 /**< GAP BLE Event base. */ -+#define BLE_GAP_EVT_LAST 0x2F /**< GAP BLE Event last. */ -+ -+ -+#define BLE_GATTC_EVT_BASE 0x30 /**< GATTC BLE Event base. */ -+#define BLE_GATTC_EVT_LAST 0x4F /**< GATTC BLE Event last. */ -+ -+ -+#define BLE_GATTS_EVT_BASE 0x50 /**< GATTS BLE Event base. */ -+#define BLE_GATTS_EVT_LAST 0x6F /**< GATTS BLE Event last. */ -+ -+ -+#define BLE_L2CAP_EVT_BASE 0x70 /**< L2CAP BLE Event base. */ -+#define BLE_L2CAP_EVT_LAST 0x8F /**< L2CAP BLE Event last. */ -+ -+ -+#define BLE_OPT_INVALID 0x00 /**< Invalid BLE Option. */ -+ -+ -+#define BLE_OPT_BASE 0x01 /**< Common BLE Option base. */ -+#define BLE_OPT_LAST 0x1F /**< Common BLE Option last. */ -+ -+ -+#define BLE_GAP_OPT_BASE 0x20 /**< GAP BLE Option base. */ -+#define BLE_GAP_OPT_LAST 0x3F /**< GAP BLE Option last. */ -+ -+ -+#define BLE_GATTC_OPT_BASE 0x40 /**< GATTC BLE Option base. */ -+#define BLE_GATTC_OPT_LAST 0x5F /**< GATTC BLE Option last. */ -+ -+ -+#define BLE_GATTS_OPT_BASE 0x60 /**< GATTS BLE Option base. */ -+#define BLE_GATTS_OPT_LAST 0x7F /**< GATTS BLE Option last. */ -+ -+ -+#define BLE_L2CAP_OPT_BASE 0x80 /**< L2CAP BLE Option base. */ -+#define BLE_L2CAP_OPT_LAST 0x9F /**< L2CAP BLE Option last. */ -+ -+ -+#ifdef __cplusplus -+} -+#endif -+#endif /* BLE_RANGES_H__ */ -+ -+/** -+ @} -+ @} -+*/ -diff -u -r -N a/components/softdevice/s132v3/headers/ble_types.h b/components/softdevice/s132v3/headers/ble_types.h ---- a/components/softdevice/s132v3/headers/ble_types.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v3/headers/ble_types.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,213 @@ -+/* -+ * Copyright (c) Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form must reproduce the above copyright notice, this -+ * list of conditions and the following disclaimer in the documentation and/or -+ * other materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other -+ * contributors to this software may be used to endorse or promote products -+ * derived from this software without specific prior written permission. -+ * -+ * 4. This software must only be used in a processor manufactured by Nordic -+ * Semiconductor ASA, or in a processor manufactured by a third party that -+ * is used in combination with a processor manufactured by Nordic Semiconductor. -+ * -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ * -+ */ -+ -+/** -+ @addtogroup BLE_COMMON -+ @{ -+ @defgroup ble_types Common types and macro definitions -+ @{ -+ -+ @brief Common types and macro definitions for the BLE SoftDevice. -+ */ -+ -+#ifndef BLE_TYPES_H__ -+#define BLE_TYPES_H__ -+ -+#include -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/** @addtogroup BLE_TYPES_DEFINES Defines -+ * @{ */ -+ -+/** @defgroup BLE_CONN_HANDLES BLE Connection Handles -+ * @{ */ -+#define BLE_CONN_HANDLE_INVALID 0xFFFF /**< Invalid Connection Handle. */ -+#define BLE_CONN_HANDLE_ALL 0xFFFE /**< Applies to all Connection Handles. */ -+/** @} */ -+ -+ -+/** @defgroup BLE_UUID_VALUES Assigned Values for BLE UUIDs -+ * @{ */ -+/* Generic UUIDs, applicable to all services */ -+#define BLE_UUID_UNKNOWN 0x0000 /**< Reserved UUID. */ -+#define BLE_UUID_SERVICE_PRIMARY 0x2800 /**< Primary Service. */ -+#define BLE_UUID_SERVICE_SECONDARY 0x2801 /**< Secondary Service. */ -+#define BLE_UUID_SERVICE_INCLUDE 0x2802 /**< Include. */ -+#define BLE_UUID_CHARACTERISTIC 0x2803 /**< Characteristic. */ -+#define BLE_UUID_DESCRIPTOR_CHAR_EXT_PROP 0x2900 /**< Characteristic Extended Properties Descriptor. */ -+#define BLE_UUID_DESCRIPTOR_CHAR_USER_DESC 0x2901 /**< Characteristic User Description Descriptor. */ -+#define BLE_UUID_DESCRIPTOR_CLIENT_CHAR_CONFIG 0x2902 /**< Client Characteristic Configuration Descriptor. */ -+#define BLE_UUID_DESCRIPTOR_SERVER_CHAR_CONFIG 0x2903 /**< Server Characteristic Configuration Descriptor. */ -+#define BLE_UUID_DESCRIPTOR_CHAR_PRESENTATION_FORMAT 0x2904 /**< Characteristic Presentation Format Descriptor. */ -+#define BLE_UUID_DESCRIPTOR_CHAR_AGGREGATE_FORMAT 0x2905 /**< Characteristic Aggregate Format Descriptor. */ -+/* GATT specific UUIDs */ -+#define BLE_UUID_GATT 0x1801 /**< Generic Attribute Profile. */ -+#define BLE_UUID_GATT_CHARACTERISTIC_SERVICE_CHANGED 0x2A05 /**< Service Changed Characteristic. */ -+/* GAP specific UUIDs */ -+#define BLE_UUID_GAP 0x1800 /**< Generic Access Profile. */ -+#define BLE_UUID_GAP_CHARACTERISTIC_DEVICE_NAME 0x2A00 /**< Device Name Characteristic. */ -+#define BLE_UUID_GAP_CHARACTERISTIC_APPEARANCE 0x2A01 /**< Appearance Characteristic. */ -+#define BLE_UUID_GAP_CHARACTERISTIC_RECONN_ADDR 0x2A03 /**< Reconnection Address Characteristic. */ -+#define BLE_UUID_GAP_CHARACTERISTIC_PPCP 0x2A04 /**< Peripheral Preferred Connection Parameters Characteristic. */ -+#define BLE_UUID_GAP_CHARACTERISTIC_CAR 0x2AA6 /**< Central Address Resolution Characteristic. */ -+/** @} */ -+ -+ -+/** @defgroup BLE_UUID_TYPES Types of UUID -+ * @{ */ -+#define BLE_UUID_TYPE_UNKNOWN 0x00 /**< Invalid UUID type. */ -+#define BLE_UUID_TYPE_BLE 0x01 /**< Bluetooth SIG UUID (16-bit). */ -+#define BLE_UUID_TYPE_VENDOR_BEGIN 0x02 /**< Vendor UUID types start at this index (128-bit). */ -+/** @} */ -+ -+ -+/** @defgroup BLE_APPEARANCES Bluetooth Appearance values -+ * @note Retrieved from http://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml -+ * @{ */ -+#define BLE_APPEARANCE_UNKNOWN 0 /**< Unknown. */ -+#define BLE_APPEARANCE_GENERIC_PHONE 64 /**< Generic Phone. */ -+#define BLE_APPEARANCE_GENERIC_COMPUTER 128 /**< Generic Computer. */ -+#define BLE_APPEARANCE_GENERIC_WATCH 192 /**< Generic Watch. */ -+#define BLE_APPEARANCE_WATCH_SPORTS_WATCH 193 /**< Watch: Sports Watch. */ -+#define BLE_APPEARANCE_GENERIC_CLOCK 256 /**< Generic Clock. */ -+#define BLE_APPEARANCE_GENERIC_DISPLAY 320 /**< Generic Display. */ -+#define BLE_APPEARANCE_GENERIC_REMOTE_CONTROL 384 /**< Generic Remote Control. */ -+#define BLE_APPEARANCE_GENERIC_EYE_GLASSES 448 /**< Generic Eye-glasses. */ -+#define BLE_APPEARANCE_GENERIC_TAG 512 /**< Generic Tag. */ -+#define BLE_APPEARANCE_GENERIC_KEYRING 576 /**< Generic Keyring. */ -+#define BLE_APPEARANCE_GENERIC_MEDIA_PLAYER 640 /**< Generic Media Player. */ -+#define BLE_APPEARANCE_GENERIC_BARCODE_SCANNER 704 /**< Generic Barcode Scanner. */ -+#define BLE_APPEARANCE_GENERIC_THERMOMETER 768 /**< Generic Thermometer. */ -+#define BLE_APPEARANCE_THERMOMETER_EAR 769 /**< Thermometer: Ear. */ -+#define BLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR 832 /**< Generic Heart rate Sensor. */ -+#define BLE_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT 833 /**< Heart Rate Sensor: Heart Rate Belt. */ -+#define BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE 896 /**< Generic Blood Pressure. */ -+#define BLE_APPEARANCE_BLOOD_PRESSURE_ARM 897 /**< Blood Pressure: Arm. */ -+#define BLE_APPEARANCE_BLOOD_PRESSURE_WRIST 898 /**< Blood Pressure: Wrist. */ -+#define BLE_APPEARANCE_GENERIC_HID 960 /**< Human Interface Device (HID). */ -+#define BLE_APPEARANCE_HID_KEYBOARD 961 /**< Keyboard (HID Subtype). */ -+#define BLE_APPEARANCE_HID_MOUSE 962 /**< Mouse (HID Subtype). */ -+#define BLE_APPEARANCE_HID_JOYSTICK 963 /**< Joystiq (HID Subtype). */ -+#define BLE_APPEARANCE_HID_GAMEPAD 964 /**< Gamepad (HID Subtype). */ -+#define BLE_APPEARANCE_HID_DIGITIZERSUBTYPE 965 /**< Digitizer Tablet (HID Subtype). */ -+#define BLE_APPEARANCE_HID_CARD_READER 966 /**< Card Reader (HID Subtype). */ -+#define BLE_APPEARANCE_HID_DIGITAL_PEN 967 /**< Digital Pen (HID Subtype). */ -+#define BLE_APPEARANCE_HID_BARCODE 968 /**< Barcode Scanner (HID Subtype). */ -+#define BLE_APPEARANCE_GENERIC_GLUCOSE_METER 1024 /**< Generic Glucose Meter. */ -+#define BLE_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR 1088 /**< Generic Running Walking Sensor. */ -+#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE 1089 /**< Running Walking Sensor: In-Shoe. */ -+#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE 1090 /**< Running Walking Sensor: On-Shoe. */ -+#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP 1091 /**< Running Walking Sensor: On-Hip. */ -+#define BLE_APPEARANCE_GENERIC_CYCLING 1152 /**< Generic Cycling. */ -+#define BLE_APPEARANCE_CYCLING_CYCLING_COMPUTER 1153 /**< Cycling: Cycling Computer. */ -+#define BLE_APPEARANCE_CYCLING_SPEED_SENSOR 1154 /**< Cycling: Speed Sensor. */ -+#define BLE_APPEARANCE_CYCLING_CADENCE_SENSOR 1155 /**< Cycling: Cadence Sensor. */ -+#define BLE_APPEARANCE_CYCLING_POWER_SENSOR 1156 /**< Cycling: Power Sensor. */ -+#define BLE_APPEARANCE_CYCLING_SPEED_CADENCE_SENSOR 1157 /**< Cycling: Speed and Cadence Sensor. */ -+#define BLE_APPEARANCE_GENERIC_PULSE_OXIMETER 3136 /**< Generic Pulse Oximeter. */ -+#define BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP 3137 /**< Fingertip (Pulse Oximeter subtype). */ -+#define BLE_APPEARANCE_PULSE_OXIMETER_WRIST_WORN 3138 /**< Wrist Worn(Pulse Oximeter subtype). */ -+#define BLE_APPEARANCE_GENERIC_WEIGHT_SCALE 3200 /**< Generic Weight Scale. */ -+#define BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS_ACT 5184 /**< Generic Outdoor Sports Activity. */ -+#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_DISP 5185 /**< Location Display Device (Outdoor Sports Activity subtype). */ -+#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_DISP 5186 /**< Location and Navigation Display Device (Outdoor Sports Activity subtype). */ -+#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_POD 5187 /**< Location Pod (Outdoor Sports Activity subtype). */ -+#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_POD 5188 /**< Location and Navigation Pod (Outdoor Sports Activity subtype). */ -+/** @} */ -+ -+/** @brief Set .type and .uuid fields of ble_uuid_struct to specified uuid value. */ -+#define BLE_UUID_BLE_ASSIGN(instance, value) do {\ -+ instance.type = BLE_UUID_TYPE_BLE; \ -+ instance.uuid = value;} while (0) -+ -+/** @brief Copy type and uuid members from src to dst ble_uuid_t pointer. Both pointers must be valid/non-null. */ -+#define BLE_UUID_COPY_PTR(dst, src) do {\ -+ (dst)->type = (src)->type; \ -+ (dst)->uuid = (src)->uuid;} while (0) -+ -+/** @brief Copy type and uuid members from src to dst ble_uuid_t struct. */ -+#define BLE_UUID_COPY_INST(dst, src) do {\ -+ (dst).type = (src).type; \ -+ (dst).uuid = (src).uuid;} while (0) -+ -+/** @brief Compare for equality both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ -+#define BLE_UUID_EQ(p_uuid1, p_uuid2) \ -+ (((p_uuid1)->type == (p_uuid2)->type) && ((p_uuid1)->uuid == (p_uuid2)->uuid)) -+ -+/** @brief Compare for difference both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ -+#define BLE_UUID_NEQ(p_uuid1, p_uuid2) \ -+ (((p_uuid1)->type != (p_uuid2)->type) || ((p_uuid1)->uuid != (p_uuid2)->uuid)) -+ -+/** @} */ -+ -+/** @addtogroup BLE_TYPES_STRUCTURES Structures -+ * @{ */ -+ -+/** @brief 128 bit UUID values. */ -+typedef struct -+{ -+ uint8_t uuid128[16]; /**< Little-Endian UUID bytes. */ -+} ble_uuid128_t; -+ -+/** @brief Bluetooth Low Energy UUID type, encapsulates both 16-bit and 128-bit UUIDs. */ -+typedef struct -+{ -+ uint16_t uuid; /**< 16-bit UUID value or octets 12-13 of 128-bit UUID. */ -+ uint8_t type; /**< UUID type, see @ref BLE_UUID_TYPES. If type is @ref BLE_UUID_TYPE_UNKNOWN, the value of uuid is undefined. */ -+} ble_uuid_t; -+ -+/* note: added to make the unit test work*/ -+/**@brief Data structure. */ -+typedef struct -+{ -+ uint8_t *p_data; /**< Pointer to the data buffer provided to/from the application. */ -+ uint16_t len; /**< Length of the data buffer, in bytes. */ -+} ble_data_t; -+ -+/** @} */ -+#ifdef __cplusplus -+} -+#endif -+ -+#endif /* BLE_TYPES_H__ */ -+ -+/** -+ @} -+ @} -+*/ -diff -u -r -N a/components/softdevice/s132v3/headers/nrf_error.h b/components/softdevice/s132v3/headers/nrf_error.h ---- a/components/softdevice/s132v3/headers/nrf_error.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v3/headers/nrf_error.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,87 @@ -+/* -+ * Copyright (c) Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form must reproduce the above copyright notice, this -+ * list of conditions and the following disclaimer in the documentation and/or -+ * other materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other -+ * contributors to this software may be used to endorse or promote products -+ * derived from this software without specific prior written permission. -+ * -+ * 4. This software must only be used in a processor manufactured by Nordic -+ * Semiconductor ASA, or in a processor manufactured by a third party that -+ * is used in combination with a processor manufactured by Nordic Semiconductor. -+ * -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ * -+ */ -+ /** -+ @defgroup nrf_error SoftDevice Global Error Codes -+ @{ -+ -+ @brief Global Error definitions -+*/ -+ -+/* Header guard */ -+#ifndef NRF_ERROR_H__ -+#define NRF_ERROR_H__ -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/** @defgroup NRF_ERRORS_BASE Error Codes Base number definitions -+ * @{ */ -+#define NRF_ERROR_BASE_NUM (0x0) ///< Global error base -+#define NRF_ERROR_SDM_BASE_NUM (0x1000) ///< SDM error base -+#define NRF_ERROR_SOC_BASE_NUM (0x2000) ///< SoC error base -+#define NRF_ERROR_STK_BASE_NUM (0x3000) ///< STK error base -+/** @} */ -+ -+#define NRF_SUCCESS (NRF_ERROR_BASE_NUM + 0) ///< Successful command -+#define NRF_ERROR_SVC_HANDLER_MISSING (NRF_ERROR_BASE_NUM + 1) ///< SVC handler is missing -+#define NRF_ERROR_SOFTDEVICE_NOT_ENABLED (NRF_ERROR_BASE_NUM + 2) ///< SoftDevice has not been enabled -+#define NRF_ERROR_INTERNAL (NRF_ERROR_BASE_NUM + 3) ///< Internal Error -+#define NRF_ERROR_NO_MEM (NRF_ERROR_BASE_NUM + 4) ///< No Memory for operation -+#define NRF_ERROR_NOT_FOUND (NRF_ERROR_BASE_NUM + 5) ///< Not found -+#define NRF_ERROR_NOT_SUPPORTED (NRF_ERROR_BASE_NUM + 6) ///< Not supported -+#define NRF_ERROR_INVALID_PARAM (NRF_ERROR_BASE_NUM + 7) ///< Invalid Parameter -+#define NRF_ERROR_INVALID_STATE (NRF_ERROR_BASE_NUM + 8) ///< Invalid state, operation disallowed in this state -+#define NRF_ERROR_INVALID_LENGTH (NRF_ERROR_BASE_NUM + 9) ///< Invalid Length -+#define NRF_ERROR_INVALID_FLAGS (NRF_ERROR_BASE_NUM + 10) ///< Invalid Flags -+#define NRF_ERROR_INVALID_DATA (NRF_ERROR_BASE_NUM + 11) ///< Invalid Data -+#define NRF_ERROR_DATA_SIZE (NRF_ERROR_BASE_NUM + 12) ///< Invalid Data size -+#define NRF_ERROR_TIMEOUT (NRF_ERROR_BASE_NUM + 13) ///< Operation timed out -+#define NRF_ERROR_NULL (NRF_ERROR_BASE_NUM + 14) ///< Null Pointer -+#define NRF_ERROR_FORBIDDEN (NRF_ERROR_BASE_NUM + 15) ///< Forbidden Operation -+#define NRF_ERROR_INVALID_ADDR (NRF_ERROR_BASE_NUM + 16) ///< Bad Memory Address -+#define NRF_ERROR_BUSY (NRF_ERROR_BASE_NUM + 17) ///< Busy -+#define NRF_ERROR_CONN_COUNT (NRF_ERROR_BASE_NUM + 18) ///< Maximum connection count exceeded. -+#define NRF_ERROR_RESOURCES (NRF_ERROR_BASE_NUM + 19) ///< Not enough resources for operation -+ -+#ifdef __cplusplus -+} -+#endif -+#endif // NRF_ERROR_H__ -+ -+/** -+ @} -+*/ -diff -u -r -N a/components/softdevice/s132v3/headers/nrf_error_sdm.h b/components/softdevice/s132v3/headers/nrf_error_sdm.h ---- a/components/softdevice/s132v3/headers/nrf_error_sdm.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v3/headers/nrf_error_sdm.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,67 @@ -+/* -+ * Copyright (c) Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form must reproduce the above copyright notice, this -+ * list of conditions and the following disclaimer in the documentation and/or -+ * other materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other -+ * contributors to this software may be used to endorse or promote products -+ * derived from this software without specific prior written permission. -+ * -+ * 4. This software must only be used in a processor manufactured by Nordic -+ * Semiconductor ASA, or in a processor manufactured by a third party that -+ * is used in combination with a processor manufactured by Nordic Semiconductor. -+ * -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ * -+ */ -+ /** -+ @addtogroup nrf_sdm_api -+ @{ -+ @defgroup nrf_sdm_error SoftDevice Manager Error Codes -+ @{ -+ -+ @brief Error definitions for the SDM API -+*/ -+ -+/* Header guard */ -+#ifndef NRF_ERROR_SDM_H__ -+#define NRF_ERROR_SDM_H__ -+ -+#include "nrf_error.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+#define NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN (NRF_ERROR_SDM_BASE_NUM + 0) ///< Unknown lfclk source. -+#define NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION (NRF_ERROR_SDM_BASE_NUM + 1) ///< Incorrect interrupt configuration (can be caused by using illegal priority levels, or having enabled SoftDevice interrupts). -+#define NRF_ERROR_SDM_INCORRECT_CLENR0 (NRF_ERROR_SDM_BASE_NUM + 2) ///< Incorrect CLENR0 (can be caused by erronous SoftDevice flashing). -+ -+#ifdef __cplusplus -+} -+#endif -+#endif // NRF_ERROR_SDM_H__ -+ -+/** -+ @} -+ @} -+*/ -diff -u -r -N a/components/softdevice/s132v3/headers/nrf_error_soc.h b/components/softdevice/s132v3/headers/nrf_error_soc.h ---- a/components/softdevice/s132v3/headers/nrf_error_soc.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v3/headers/nrf_error_soc.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,82 @@ -+/* -+ * Copyright (c) Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form must reproduce the above copyright notice, this -+ * list of conditions and the following disclaimer in the documentation and/or -+ * other materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other -+ * contributors to this software may be used to endorse or promote products -+ * derived from this software without specific prior written permission. -+ * -+ * 4. This software must only be used in a processor manufactured by Nordic -+ * Semiconductor ASA, or in a processor manufactured by a third party that -+ * is used in combination with a processor manufactured by Nordic Semiconductor. -+ * -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ * -+ */ -+/** -+ @addtogroup nrf_soc_api -+ @{ -+ @defgroup nrf_soc_error SoC Library Error Codes -+ @{ -+ -+ @brief Error definitions for the SoC library -+ -+*/ -+ -+/* Header guard */ -+#ifndef NRF_ERROR_SOC_H__ -+#define NRF_ERROR_SOC_H__ -+ -+#include "nrf_error.h" -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/* Mutex Errors */ -+#define NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN (NRF_ERROR_SOC_BASE_NUM + 0) ///< Mutex already taken -+ -+/* NVIC errors */ -+#define NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE (NRF_ERROR_SOC_BASE_NUM + 1) ///< NVIC interrupt not available -+#define NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED (NRF_ERROR_SOC_BASE_NUM + 2) ///< NVIC interrupt priority not allowed -+#define NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 3) ///< NVIC should not return -+ -+/* Power errors */ -+#define NRF_ERROR_SOC_POWER_MODE_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 4) ///< Power mode unknown -+#define NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 5) ///< Power POF threshold unknown -+#define NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 6) ///< Power off should not return -+ -+/* Rand errors */ -+#define NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES (NRF_ERROR_SOC_BASE_NUM + 7) ///< RAND not enough values -+ -+/* PPI errors */ -+#define NRF_ERROR_SOC_PPI_INVALID_CHANNEL (NRF_ERROR_SOC_BASE_NUM + 8) ///< Invalid PPI Channel -+#define NRF_ERROR_SOC_PPI_INVALID_GROUP (NRF_ERROR_SOC_BASE_NUM + 9) ///< Invalid PPI Group -+ -+#ifdef __cplusplus -+} -+#endif -+#endif // NRF_ERROR_SOC_H__ -+/** -+ @} -+ @} -+*/ -diff -u -r -N a/components/softdevice/s132v3/headers/nrf_nvic.h b/components/softdevice/s132v3/headers/nrf_nvic.h ---- a/components/softdevice/s132v3/headers/nrf_nvic.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v3/headers/nrf_nvic.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,485 @@ -+/* -+ * Copyright (c) Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form must reproduce the above copyright notice, this -+ * list of conditions and the following disclaimer in the documentation and/or -+ * other materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other -+ * contributors to this software may be used to endorse or promote products -+ * derived from this software without specific prior written permission. -+ * -+ * 4. This software must only be used in a processor manufactured by Nordic -+ * Semiconductor ASA, or in a processor manufactured by a third party that -+ * is used in combination with a processor manufactured by Nordic Semiconductor. -+ * -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ * -+ */ -+/** -+ * @defgroup nrf_nvic_api SoftDevice NVIC API -+ * @{ -+ * -+ * @note In order to use this module, the following code has to be added to a .c file: -+ * \code -+ * nrf_nvic_state_t nrf_nvic_state = {0}; -+ * \endcode -+ * -+ * @note Definitions and declarations starting with __ (double underscore) in this header file are -+ * not intended for direct use by the application. -+ * -+ * @brief APIs for the accessing NVIC when using a SoftDevice. -+ * -+ */ -+ -+#ifndef NRF_NVIC_H__ -+#define NRF_NVIC_H__ -+ -+#include -+#include "nrf.h" -+ -+#include "nrf_error_soc.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/**@addtogroup NRF_NVIC_DEFINES Defines -+ * @{ */ -+ -+/**@defgroup NRF_NVIC_ISER_DEFINES SoftDevice NVIC internal definitions -+ * @{ */ -+ -+#define __NRF_NVIC_NVMC_IRQn (30) /**< The peripheral ID of the NVMC. IRQ numbers are used to identify peripherals, but the NVMC doesn't have an IRQ number in the MDK. */ -+ -+#ifdef NRF51 -+ #define __NRF_NVIC_ISER_COUNT (1) /**< The number of ISER/ICER registers in the NVIC that are used. */ -+ -+ /**@brief Interrupts used by the SoftDevice. */ -+ #define __NRF_NVIC_SD_IRQS_0 ((uint32_t)( \ -+ (1U << POWER_CLOCK_IRQn) \ -+ | (1U << RADIO_IRQn) \ -+ | (1U << RTC0_IRQn) \ -+ | (1U << TIMER0_IRQn) \ -+ | (1U << RNG_IRQn) \ -+ | (1U << ECB_IRQn) \ -+ | (1U << CCM_AAR_IRQn) \ -+ | (1U << TEMP_IRQn) \ -+ | (1U << __NRF_NVIC_NVMC_IRQn) \ -+ | (1U << (uint32_t)SWI4_IRQn) \ -+ | (1U << (uint32_t)SWI5_IRQn) \ -+ )) -+ -+ /**@brief Interrupts available for to application. */ -+ #define __NRF_NVIC_APP_IRQS_0 (~__NRF_NVIC_SD_IRQS_0) -+#endif -+ -+#if (defined(NRF52) || defined(NRF52840_XXAA)) -+ #define __NRF_NVIC_ISER_COUNT (2) /**< The number of ISER/ICER registers in the NVIC that are used. */ -+ -+ /**@brief Interrupts used by the SoftDevice. */ -+ #define __NRF_NVIC_SD_IRQS_0 ((uint32_t)( \ -+ (1U << POWER_CLOCK_IRQn) \ -+ | (1U << RADIO_IRQn) \ -+ | (1U << RTC0_IRQn) \ -+ | (1U << TIMER0_IRQn) \ -+ | (1U << RNG_IRQn) \ -+ | (1U << ECB_IRQn) \ -+ | (1U << CCM_AAR_IRQn) \ -+ | (1U << TEMP_IRQn) \ -+ | (1U << __NRF_NVIC_NVMC_IRQn) \ -+ | (1U << (uint32_t)SWI4_EGU4_IRQn) \ -+ | (1U << (uint32_t)SWI5_EGU5_IRQn) \ -+ )) -+ #define __NRF_NVIC_SD_IRQS_1 ((uint32_t)0) -+ -+ /**@brief Interrupts available for to application. */ -+ #define __NRF_NVIC_APP_IRQS_0 (~__NRF_NVIC_SD_IRQS_0) -+ #define __NRF_NVIC_APP_IRQS_1 (~__NRF_NVIC_SD_IRQS_1) -+#endif -+/**@} */ -+ -+/**@} */ -+ -+/**@addtogroup NRF_NVIC_VARIABLES Variables -+ * @{ */ -+ -+/**@brief Type representing the state struct for the SoftDevice NVIC module. */ -+typedef struct -+{ -+ uint32_t volatile __irq_masks[__NRF_NVIC_ISER_COUNT]; /**< IRQs enabled by the application in the NVIC. */ -+ uint32_t volatile __cr_flag; /**< Non-zero if already in a critical region */ -+} nrf_nvic_state_t; -+ -+/**@brief Variable keeping the state for the SoftDevice NVIC module. This must be declared in an -+ * application source file. */ -+extern nrf_nvic_state_t nrf_nvic_state; -+ -+/**@} */ -+ -+/**@addtogroup NRF_NVIC_INTERNAL_FUNCTIONS SoftDevice NVIC internal functions -+ * @{ */ -+ -+/**@brief Disables IRQ interrupts globally, including the SoftDevice's interrupts. -+ * -+ * @retval The value of PRIMASK prior to disabling the interrupts. -+ */ -+static inline int __sd_nvic_irq_disable(void) -+{ -+ int pm = __get_PRIMASK(); -+ __disable_irq(); -+ return pm; -+} -+ -+/**@brief Enables IRQ interrupts globally, including the SoftDevice's interrupts. -+ */ -+static inline void __sd_nvic_irq_enable(void) -+{ -+ __enable_irq(); -+} -+ -+/**@brief Checks if IRQn is available to application -+ * @param[in] IRQn irq to check -+ * -+ * @retval 1 (true) if the irq to check is available to the application -+ */ -+static inline uint32_t __sd_nvic_app_accessible_irq(IRQn_Type IRQn) -+{ -+ if (IRQn < 32) -+ { -+ return ((1UL<= (1 << __NVIC_PRIO_BITS)) -+ { -+ return 0; -+ } -+#ifdef NRF51 -+ if ( priority == 0 -+ || priority == 2 -+ ) -+ { -+ return 0; -+ } -+#endif -+#if (defined(NRF52) || defined(NRF52840_XXAA)) -+ if ( priority == 0 -+ || priority == 1 -+ || priority == 4 -+ || priority == 5 -+ ) -+ { -+ return 0; -+ } -+#endif -+ return 1; -+} -+ -+/**@} */ -+ -+/**@addtogroup NRF_NVIC_FUNCTIONS SoftDevice NVIC public functions -+ * @{ */ -+ -+/**@brief Enable External Interrupt. -+ * @note Corresponds to NVIC_EnableIRQ in CMSIS. -+ * -+ * @pre IRQn is valid and not reserved by the stack. -+ * -+ * @param[in] IRQn See the NVIC_EnableIRQ documentation in CMSIS. -+ * -+ * @retval ::NRF_SUCCESS The interrupt was enabled. -+ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. -+ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt has a priority not available for the application. -+ */ -+static inline uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn) -+{ -+ if (!__sd_nvic_app_accessible_irq(IRQn)) -+ { -+ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; -+ } -+ if (!__sd_nvic_is_app_accessible_priority(NVIC_GetPriority(IRQn))) -+ { -+ return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED; -+ } -+ -+ if (nrf_nvic_state.__cr_flag) -+ { -+ nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] |= (uint32_t)(1 << ((uint32_t)((int32_t)IRQn) & (uint32_t)0x1F)); -+ } -+ else -+ { -+ NVIC_EnableIRQ(IRQn); -+ } -+ return NRF_SUCCESS; -+} -+ -+/**@brief Disable External Interrupt. -+ * @note Corresponds to NVIC_DisableIRQ in CMSIS. -+ * -+ * @pre IRQn is valid and not reserved by the stack. -+ * -+ * @param[in] IRQn See the NVIC_DisableIRQ documentation in CMSIS. -+ * -+ * @retval ::NRF_SUCCESS The interrupt was disabled. -+ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. -+ */ -+static inline uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn) -+{ -+ if (!__sd_nvic_app_accessible_irq(IRQn)) -+ { -+ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; -+ } -+ -+ if (nrf_nvic_state.__cr_flag) -+ { -+ nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] &= ~(1UL << ((uint32_t)(IRQn) & 0x1F)); -+ } -+ else -+ { -+ NVIC_DisableIRQ(IRQn); -+ } -+ -+ return NRF_SUCCESS; -+} -+ -+/**@brief Get Pending Interrupt. -+ * @note Corresponds to NVIC_GetPendingIRQ in CMSIS. -+ * -+ * @pre IRQn is valid and not reserved by the stack. -+ * -+ * @param[in] IRQn See the NVIC_GetPendingIRQ documentation in CMSIS. -+ * @param[out] p_pending_irq Return value from NVIC_GetPendingIRQ. -+ * -+ * @retval ::NRF_SUCCESS The interrupt is available for the application. -+ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. -+ */ -+static inline uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq) -+{ -+ if (__sd_nvic_app_accessible_irq(IRQn)) -+ { -+ *p_pending_irq = NVIC_GetPendingIRQ(IRQn); -+ return NRF_SUCCESS; -+ } -+ else -+ { -+ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; -+ } -+} -+ -+/**@brief Set Pending Interrupt. -+ * @note Corresponds to NVIC_SetPendingIRQ in CMSIS. -+ * -+ * @pre IRQn is valid and not reserved by the stack. -+ * -+ * @param[in] IRQn See the NVIC_SetPendingIRQ documentation in CMSIS. -+ * -+ * @retval ::NRF_SUCCESS The interrupt is set pending. -+ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. -+ */ -+static inline uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn) -+{ -+ if (__sd_nvic_app_accessible_irq(IRQn)) -+ { -+ NVIC_SetPendingIRQ(IRQn); -+ return NRF_SUCCESS; -+ } -+ else -+ { -+ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; -+ } -+} -+ -+/**@brief Clear Pending Interrupt. -+ * @note Corresponds to NVIC_ClearPendingIRQ in CMSIS. -+ * -+ * @pre IRQn is valid and not reserved by the stack. -+ * -+ * @param[in] IRQn See the NVIC_ClearPendingIRQ documentation in CMSIS. -+ * -+ * @retval ::NRF_SUCCESS The interrupt pending flag is cleared. -+ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. -+ */ -+static inline uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn) -+{ -+ if (__sd_nvic_app_accessible_irq(IRQn)) -+ { -+ NVIC_ClearPendingIRQ(IRQn); -+ return NRF_SUCCESS; -+ } -+ else -+ { -+ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; -+ } -+} -+ -+/**@brief Set Interrupt Priority. -+ * @note Corresponds to NVIC_SetPriority in CMSIS. -+ * -+ * @pre IRQn is valid and not reserved by the stack. -+ * @pre Priority is valid and not reserved by the stack. -+ * -+ * @param[in] IRQn See the NVIC_SetPriority documentation in CMSIS. -+ * @param[in] priority A valid IRQ priority for use by the application. -+ * -+ * @retval ::NRF_SUCCESS The interrupt and priority level is available for the application. -+ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. -+ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt priority is not available for the application. -+ */ -+static inline uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority) -+{ -+ if (!__sd_nvic_app_accessible_irq(IRQn)) -+ { -+ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; -+ } -+ -+ if (!__sd_nvic_is_app_accessible_priority(priority)) -+ { -+ return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED; -+ } -+ -+ NVIC_SetPriority(IRQn, (uint32_t)priority); -+ return NRF_SUCCESS; -+} -+ -+/**@brief Get Interrupt Priority. -+ * @note Corresponds to NVIC_GetPriority in CMSIS. -+ * -+ * @pre IRQn is valid and not reserved by the stack. -+ * -+ * @param[in] IRQn See the NVIC_GetPriority documentation in CMSIS. -+ * @param[out] p_priority Return value from NVIC_GetPriority. -+ * -+ * @retval ::NRF_SUCCESS The interrupt priority is returned in p_priority. -+ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE - IRQn is not available for the application. -+ */ -+static inline uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority) -+{ -+ if (__sd_nvic_app_accessible_irq(IRQn)) -+ { -+ *p_priority = (NVIC_GetPriority(IRQn) & 0xFF); -+ return NRF_SUCCESS; -+ } -+ else -+ { -+ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; -+ } -+} -+ -+/**@brief System Reset. -+ * @note Corresponds to NVIC_SystemReset in CMSIS. -+ * -+ * @retval ::NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN -+ */ -+static inline uint32_t sd_nvic_SystemReset(void) -+{ -+ NVIC_SystemReset(); -+ return NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN; -+} -+ -+/**@brief Enters critical region. -+ * -+ * @post Application interrupts will be disabled. -+ * @note sd_nvic_critical_region_enter() and ::sd_nvic_critical_region_exit() must be called in matching pairs inside each -+ * execution context -+ * @sa sd_nvic_critical_region_exit -+ * -+ * @param[out] p_is_nested_critical_region If 1, the application is now in a nested critical region. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+static inline uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region) -+{ -+ int was_masked = __sd_nvic_irq_disable(); -+ if (!nrf_nvic_state.__cr_flag) -+ { -+ nrf_nvic_state.__cr_flag = 1; -+ nrf_nvic_state.__irq_masks[0] = ( NVIC->ICER[0] & __NRF_NVIC_APP_IRQS_0 ); -+ NVIC->ICER[0] = __NRF_NVIC_APP_IRQS_0; -+ #if (defined(NRF52) || defined(NRF52840_XXAA)) -+ nrf_nvic_state.__irq_masks[1] = ( NVIC->ICER[1] & __NRF_NVIC_APP_IRQS_1 ); -+ NVIC->ICER[1] = __NRF_NVIC_APP_IRQS_1; -+ #endif -+ *p_is_nested_critical_region = 0; -+ } -+ else -+ { -+ *p_is_nested_critical_region = 1; -+ } -+ if (!was_masked) -+ { -+ __sd_nvic_irq_enable(); -+ } -+ return NRF_SUCCESS; -+} -+ -+/**@brief Exit critical region. -+ * -+ * @pre Application has entered a critical region using ::sd_nvic_critical_region_enter. -+ * @post If not in a nested critical region, the application interrupts will restored to the state before ::sd_nvic_critical_region_enter was called. -+ * -+ * @param[in] is_nested_critical_region If this is set to 1, the critical region won't be exited. @sa sd_nvic_critical_region_enter. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+static inline uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region) -+{ -+ if (nrf_nvic_state.__cr_flag && (is_nested_critical_region == 0)) -+ { -+ int was_masked = __sd_nvic_irq_disable(); -+ NVIC->ISER[0] = nrf_nvic_state.__irq_masks[0]; -+ #if (defined(NRF52) || defined(NRF52840_XXAA)) -+ NVIC->ISER[1] = nrf_nvic_state.__irq_masks[1]; -+ #endif -+ nrf_nvic_state.__cr_flag = 0; -+ if (!was_masked) -+ { -+ __sd_nvic_irq_enable(); -+ } -+ } -+ -+ return NRF_SUCCESS; -+} -+/**@} */ -+ -+#ifdef __cplusplus -+} -+#endif -+ -+#endif // NRF_NVIC_H__ -+ -+/**@} */ -diff -u -r -N a/components/softdevice/s132v3/headers/nrf_sd_def.h b/components/softdevice/s132v3/headers/nrf_sd_def.h ---- a/components/softdevice/s132v3/headers/nrf_sd_def.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v3/headers/nrf_sd_def.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,28 @@ -+/* Copyright (c) 2015 - 2018 Nordic Semiconductor ASA. All Rights Reserved. -+ * -+ * The information contained herein is confidential property of Nordic Semiconductor ASA. -+ * The use, copying, transfer or disclosure of such information is prohibited except by -+ * express written agreement with Nordic Semiconductor ASA. -+ * -+ */ -+ -+#ifndef NRF_SD_DEF_H__ -+#define NRF_SD_DEF_H__ -+ -+#include -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+#define SD_PPI_CHANNELS_USED 0xFFF0C000uL /**< PPI channels utilized by SotfDevice (not available to the application). */ -+#define SD_PPI_GROUPS_USED 0x0000000CuL /**< PPI groups utilized by SoftDevice (not available to the application). */ -+#define SD_TIMERS_USED 0x00000001uL /**< Timers used by SoftDevice. */ -+#define SD_SWI_USED 0x0000003CuL /**< Software interrupts used by SoftDevice */ -+ -+ -+#ifdef __cplusplus -+} -+#endif -+ -+#endif /* NRF_SD_DEF_H__ */ -diff -u -r -N a/components/softdevice/s132v3/headers/nrf_sdm.h b/components/softdevice/s132v3/headers/nrf_sdm.h ---- a/components/softdevice/s132v3/headers/nrf_sdm.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v3/headers/nrf_sdm.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,331 @@ -+/* -+ * Copyright (c) Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form must reproduce the above copyright notice, this -+ * list of conditions and the following disclaimer in the documentation and/or -+ * other materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other -+ * contributors to this software may be used to endorse or promote products -+ * derived from this software without specific prior written permission. -+ * -+ * 4. This software must only be used in a processor manufactured by Nordic -+ * Semiconductor ASA, or in a processor manufactured by a third party that -+ * is used in combination with a processor manufactured by Nordic Semiconductor. -+ * -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ * -+ */ -+/** -+ @defgroup nrf_sdm_api SoftDevice Manager API -+ @{ -+ -+ @brief APIs for SoftDevice management. -+ -+*/ -+ -+#ifndef NRF_SDM_H__ -+#define NRF_SDM_H__ -+ -+#include "nrf_svc.h" -+#include "nrf.h" -+#include "nrf_soc.h" -+#include "nrf_error_sdm.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/** @addtogroup NRF_SDM_DEFINES Defines -+ * @{ */ -+#ifdef NRFSOC_DOXYGEN -+/// Declared in nrf_mbr.h -+#define MBR_SIZE 0 -+#warning test -+#endif -+ -+/** @brief The major version for the SoftDevice binary distributed with this header file. */ -+#define SD_MAJOR_VERSION (3) -+ -+/** @brief The minor version for the SoftDevice binary distributed with this header file. */ -+#define SD_MINOR_VERSION (0) -+ -+/** @brief The bugfix version for the SoftDevice binary distributed with this header file. */ -+#define SD_BUGFIX_VERSION (0) -+ -+/** @brief The full version number for the SoftDevice binary this header file was distributed -+ * with, as a decimal number in the form Mmmmbbb, where: -+ * - M is major version (one or more digits) -+ * - mmm is minor version (three digits) -+ * - bbb is bugfix version (three digits). */ -+#define SD_VERSION (SD_MAJOR_VERSION * 1000000 + SD_MINOR_VERSION * 1000 + SD_BUGFIX_VERSION) -+ -+/** @brief SoftDevice Manager SVC Base number. */ -+#define SDM_SVC_BASE 0x10 -+ -+/** @brief Invalid info field. Returned when an info field does not exist. */ -+#define SDM_INFO_FIELD_INVALID (0) -+ -+/** @brief Defines the SoftDevice Information Structure location (address) as an offset from -+the start of the softdevice (without MBR)*/ -+#define SOFTDEVICE_INFO_STRUCT_OFFSET (0x2000) -+ -+/** @brief Defines the absolute SoftDevice Information Structure location (address) when the -+ * SoftDevice is installed just above the MBR (the usual case). */ -+#define SOFTDEVICE_INFO_STRUCT_ADDRESS (SOFTDEVICE_INFO_STRUCT_OFFSET + MBR_SIZE) -+ -+/** @brief Defines the offset for the SoftDevice Information Structure size value relative to the -+ * SoftDevice base address. The size value is of type uint8_t. */ -+#define SD_INFO_STRUCT_SIZE_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET) -+ -+/** @brief Defines the offset for the SoftDevice size value relative to the SoftDevice base address. -+ * The size value is of type uint32_t. */ -+#define SD_SIZE_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x08) -+ -+/** @brief Defines the offset for FWID value relative to the SoftDevice base address. The FWID value -+ * is of type uint16_t. */ -+#define SD_FWID_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x0C) -+ -+/** @brief Defines the offset for the SoftDevice ID relative to the SoftDevice base address. The ID -+ * is of type uint32_t. */ -+#define SD_ID_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x10) -+ -+/** @brief Defines the offset for the SoftDevice version relative to the SoftDevice base address in -+ * the same format as @ref SD_VERSION, stored as an uint32_t. */ -+#define SD_VERSION_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x14) -+ -+/** @brief Defines a macro for retreiving the actual SoftDevice Information Structure size value -+ * from a given base address. Use @ref MBR_SIZE as the argument when the SoftDevice is -+ * installed just above the MBR (the usual case). */ -+#define SD_INFO_STRUCT_SIZE_GET(baseaddr) (*((uint8_t *) ((baseaddr) + SD_INFO_STRUCT_SIZE_OFFSET))) -+ -+/** @brief Defines a macro for retreiving the actual SoftDevice size value from a given base -+ * address. Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above -+ * the MBR (the usual case). */ -+#define SD_SIZE_GET(baseaddr) (*((uint32_t *) ((baseaddr) + SD_SIZE_OFFSET))) -+ -+/** @brief Defines a macro for retreiving the actual FWID value from a given base address. Use @ref -+ * MBR_SIZE as the argument when the SoftDevice is installed just above the MBR (the usual -+ * case). */ -+#define SD_FWID_GET(baseaddr) (*((uint16_t *) ((baseaddr) + SD_FWID_OFFSET))) -+ -+/** @brief Defines a macro for retreiving the actual SoftDevice ID from a given base address. Use -+ * @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR (the -+ * usual case). */ -+#define SD_ID_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_ID_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ -+ ? (*((uint32_t *) ((baseaddr) + SD_ID_OFFSET))) : SDM_INFO_FIELD_INVALID) -+ -+/** @brief Defines a macro for retreiving the actual FWID value from a given base address. Use @ref -+ * MBR_SIZE as the argument when the SoftDevice is installed just above the MBR (the usual -+ * case). */ -+#define SD_VERSION_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_VERSION_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ -+ ? (*((uint32_t *) ((baseaddr) + SD_VERSION_OFFSET))) : SDM_INFO_FIELD_INVALID) -+ -+/**@defgroup NRF_FAULT_ID_RANGES Fault ID ranges -+ * @{ */ -+#define NRF_FAULT_ID_SD_RANGE_START 0x00000000 /**< SoftDevice ID range start. */ -+#define NRF_FAULT_ID_APP_RANGE_START 0x00001000 /**< Application ID range start. */ -+/**@} */ -+ -+/**@defgroup NRF_FAULT_IDS Fault ID types -+ * @{ */ -+#define NRF_FAULT_ID_SD_ASSERT (NRF_FAULT_ID_SD_RANGE_START + 1) /**< SoftDevice assertion. The info parameter will be set to 0x00000000. */ -+#define NRF_FAULT_ID_APP_MEMACC (NRF_FAULT_ID_APP_RANGE_START + 1) /**< Application invalid memory access (nRF52 only). The info parameter will contain 0x00000000, in case of SoftDevice RAM -+ access violation. In case of SoftDevice peripheral register violation the info parameter will contain the sub-region number of PREGION[0], on whose address range the unallowed -+ write access caused the memory access fault. */ -+/**@} */ -+ -+/** @} */ -+ -+/** @addtogroup NRF_SDM_ENUMS Enumerations -+ * @{ */ -+ -+/**@brief nRF SoftDevice Manager API SVC numbers. */ -+enum NRF_SD_SVCS -+{ -+ SD_SOFTDEVICE_ENABLE = SDM_SVC_BASE, /**< ::sd_softdevice_enable */ -+ SD_SOFTDEVICE_DISABLE, /**< ::sd_softdevice_disable */ -+ SD_SOFTDEVICE_IS_ENABLED, /**< ::sd_softdevice_is_enabled */ -+ SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, /**< ::sd_softdevice_vector_table_base_set */ -+ SVC_SDM_LAST /**< Placeholder for last SDM SVC */ -+}; -+ -+/** @} */ -+ -+/** @addtogroup NRF_SDM_DEFINES Defines -+ * @{ */ -+ -+/**@defgroup NRF_CLOCK_LF_XTAL_ACCURACY Clock accuracy -+ * @{ */ -+ -+#define NRF_CLOCK_LF_XTAL_ACCURACY_250_PPM (0) /**< Default: 250 ppm */ -+#define NRF_CLOCK_LF_XTAL_ACCURACY_500_PPM (1) /**< 500 ppm */ -+#define NRF_CLOCK_LF_XTAL_ACCURACY_150_PPM (2) /**< 150 ppm */ -+#define NRF_CLOCK_LF_XTAL_ACCURACY_100_PPM (3) /**< 100 ppm */ -+#define NRF_CLOCK_LF_XTAL_ACCURACY_75_PPM (4) /**< 75 ppm */ -+#define NRF_CLOCK_LF_XTAL_ACCURACY_50_PPM (5) /**< 50 ppm */ -+#define NRF_CLOCK_LF_XTAL_ACCURACY_30_PPM (6) /**< 30 ppm */ -+#define NRF_CLOCK_LF_XTAL_ACCURACY_20_PPM (7) /**< 20 ppm */ -+ -+/** @} */ -+ -+/**@defgroup NRF_CLOCK_LF_SRC Possible lfclk oscillator sources -+ * @{ */ -+ -+#define NRF_CLOCK_LF_SRC_RC (0) /**< LFCLK RC oscillator. */ -+#define NRF_CLOCK_LF_SRC_XTAL (1) /**< LFCLK crystal oscillator. */ -+#define NRF_CLOCK_LF_SRC_SYNTH (2) /**< LFCLK Synthesized from HFCLK. */ -+ -+/** @} */ -+ -+/** @} */ -+ -+/** @addtogroup NRF_SDM_TYPES Types -+ * @{ */ -+ -+/**@brief Type representing lfclk oscillator source. */ -+typedef struct -+{ -+ uint8_t source; /**< LF oscillator clock source, see @ref NRF_CLOCK_LF_SRC. */ -+ uint8_t rc_ctiv; /**< Only for NRF_CLOCK_LF_SRC_RC: Calibration timer interval in 1/4 second -+ units (nRF51: 1-64, nRF52: 1-32). -+ @note To avoid excessive clock drift, 0.5 degrees Celsius is the -+ maximum temperature change allowed in one calibration timer -+ interval. The interval should be selected to ensure this. -+ -+ @note Must be 0 if source is not NRF_CLOCK_LF_SRC_RC. */ -+ uint8_t rc_temp_ctiv; /**< Only for NRF_CLOCK_LF_SRC_RC: How often (in number of calibration -+ intervals) the RC oscillator shall be calibrated if the temperature -+ hasn't changed. -+ 0: Always calibrate even if the temperature hasn't changed. -+ 1: Only calibrate if the temperature has changed (nRF51 only). -+ 2-33: Check the temperature and only calibrate if it has changed, -+ however calibration will take place every rc_temp_ctiv -+ intervals in any case. -+ -+ @note Must be 0 if source is not NRF_CLOCK_LF_SRC_RC. -+ -+ @note For nRF52, the application must ensure calibration at least once -+ every 8 seconds to ensure +/-250ppm clock stability. The -+ recommended configuration for NRF_CLOCK_LF_SRC_RC on nRF52 is -+ rc_ctiv=16 and rc_temp_ctiv=2. This will ensure calibration at -+ least once every 8 seconds and for temperature changes of 0.5 -+ degrees Celsius every 4 seconds. See the Product Specification -+ for the nRF52 device being used for more information.*/ -+ uint8_t xtal_accuracy; /**< External crystal clock accuracy used in the LL to compute timing windows. -+ -+ @note For the NRF_CLOCK_LF_SRC_RC clock source this parameter is ignored. */ -+} nrf_clock_lf_cfg_t; -+ -+/**@brief Fault Handler type. -+ * -+ * When certain unrecoverable errors occur within the application or SoftDevice the fault handler will be called back. -+ * The protocol stack will be in an undefined state when this happens and the only way to recover will be to -+ * perform a reset, using e.g. CMSIS NVIC_SystemReset(). -+ * -+ * @note This callback is executed in HardFault context, thus SVC functions cannot be called from the fault callback. -+ * -+ * @param[in] id Fault identifier. See @ref NRF_FAULT_IDS. -+ * @param[in] pc The program counter of the instruction that triggered the fault. -+ * @param[in] info Optional additional information regarding the fault. Refer to each Fault identifier for details. -+ * -+ * @note When id is set to NRF_FAULT_ID_APP_MEMACC, pc will contain the address of the instruction being executed at the time when -+ * the fault is detected by the CPU. The CPU program counter may have advanced up to 2 instructions (no branching) after the one that triggered the fault. -+ */ -+typedef void (*nrf_fault_handler_t)(uint32_t id, uint32_t pc, uint32_t info); -+ -+/** @} */ -+ -+/** @addtogroup NRF_SDM_FUNCTIONS Functions -+ * @{ */ -+ -+/**@brief Enables the SoftDevice and by extension the protocol stack. -+ * -+ * @note Some care must be taken if a low frequency clock source is already running when calling this function: -+ * If the LF clock has a different source then the one currently running, it will be stopped. Then, the new -+ * clock source will be started. -+ * -+ * @note This function has no effect when returning with an error. -+ * -+ * @post If return code is ::NRF_SUCCESS -+ * - SoC library and protocol stack APIs are made available. -+ * - A portion of RAM will be unavailable (see relevant SDS documentation). -+ * - Some peripherals will be unavailable or available only through the SoC API (see relevant SDS documentation). -+ * - Interrupts will not arrive from protected peripherals or interrupts. -+ * - nrf_nvic_ functions must be used instead of CMSIS NVIC_ functions for reliable usage of the SoftDevice. -+ * - Interrupt latency may be affected by the SoftDevice (see relevant SDS documentation). -+ * - Chosen low frequency clock source will be running. -+ * -+ * @param p_clock_lf_cfg Low frequency clock source and accuracy. -+ If NULL the clock will be configured as an rc source with rc_ctiv = 16 and .rc_temp_ctiv = 2 -+ In the case of XTAL source, the PPM accuracy of the chosen clock source must be greater than or equal to the actual characteristics of your XTAL clock. -+ * @param fault_handler Callback to be invoked in case of fault. -+ * -+ * @retval ::NRF_SUCCESS -+ * @retval ::NRF_ERROR_INVALID_STATE SoftDevice is already enabled, and the clock source and fault handler cannot be updated. -+ * @retval ::NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION SoftDevice interrupt is already enabled, or an enabled interrupt has an illegal priority level. -+ * @retval ::NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN Unknown low frequency clock source selected. -+ */ -+SVCALL(SD_SOFTDEVICE_ENABLE, uint32_t, sd_softdevice_enable(nrf_clock_lf_cfg_t const * p_clock_lf_cfg, nrf_fault_handler_t fault_handler)); -+ -+ -+/**@brief Disables the SoftDevice and by extension the protocol stack. -+ * -+ * Idempotent function to disable the SoftDevice. -+ * -+ * @post SoC library and protocol stack APIs are made unavailable. -+ * @post All interrupts that was protected by the SoftDevice will be disabled and initialized to priority 0 (highest). -+ * @post All peripherals used by the SoftDevice will be reset to default values. -+ * @post All of RAM become available. -+ * @post All interrupts are forwarded to the application. -+ * @post LFCLK source chosen in ::sd_softdevice_enable will be left running. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_SOFTDEVICE_DISABLE, uint32_t, sd_softdevice_disable(void)); -+ -+/**@brief Check if the SoftDevice is enabled. -+ * -+ * @param[out] p_softdevice_enabled If the SoftDevice is enabled: 1 else 0. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_SOFTDEVICE_IS_ENABLED, uint32_t, sd_softdevice_is_enabled(uint8_t * p_softdevice_enabled)); -+ -+/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the SoftDevice -+ * -+ * This function is only intended to be called when a bootloader is enabled. -+ * -+ * @param[in] address The base address of the interrupt vector table for forwarded interrupts. -+ -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, uint32_t, sd_softdevice_vector_table_base_set(uint32_t address)); -+ -+/** @} */ -+ -+#ifdef __cplusplus -+} -+#endif -+#endif // NRF_SDM_H__ -+ -+/** -+ @} -+*/ -diff -u -r -N a/components/softdevice/s132v3/headers/nrf_soc.h b/components/softdevice/s132v3/headers/nrf_soc.h ---- a/components/softdevice/s132v3/headers/nrf_soc.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v3/headers/nrf_soc.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,906 @@ -+/* -+ * Copyright (c) Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form must reproduce the above copyright notice, this -+ * list of conditions and the following disclaimer in the documentation and/or -+ * other materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other -+ * contributors to this software may be used to endorse or promote products -+ * derived from this software without specific prior written permission. -+ * -+ * 4. This software must only be used in a processor manufactured by Nordic -+ * Semiconductor ASA, or in a processor manufactured by a third party that -+ * is used in combination with a processor manufactured by Nordic Semiconductor. -+ * -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ * -+ */ -+/** -+ * @defgroup nrf_soc_api SoC Library API -+ * @{ -+ * -+ * @brief APIs for the SoC library. -+ * -+ */ -+ -+#ifndef NRF_SOC_H__ -+#define NRF_SOC_H__ -+ -+#include -+#include -+#include "nrf_svc.h" -+#include "nrf.h" -+ -+#include "nrf_error_soc.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/**@addtogroup NRF_SOC_DEFINES Defines -+ * @{ */ -+ -+/**@brief The number of the lowest SVC number reserved for the SoC library. */ -+#define SOC_SVC_BASE (0x20) /**< Base value for SVCs that are available when the SoftDevice is disabled. */ -+#define SOC_SVC_BASE_NOT_AVAILABLE (0x2B) /**< Base value for SVCs that are not available when the SoftDevice is disabled. */ -+ -+/**@brief Guranteed time for application to process radio inactive notification. */ -+#define NRF_RADIO_NOTIFICATION_INACTIVE_GUARANTEED_TIME_US (62) -+ -+/**@brief The minimum allowed timeslot extension time. */ -+#define NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US (200) -+ -+#define SOC_ECB_KEY_LENGTH (16) /**< ECB key length. */ -+#define SOC_ECB_CLEARTEXT_LENGTH (16) /**< ECB cleartext length. */ -+#define SOC_ECB_CIPHERTEXT_LENGTH (SOC_ECB_CLEARTEXT_LENGTH) /**< ECB ciphertext length. */ -+ -+#ifdef NRF51 -+#define SD_EVT_IRQn (SWI2_IRQn) /**< SoftDevice Event IRQ number. Used for both protocol events and SoC events. */ -+#define SD_EVT_IRQHandler (SWI2_IRQHandler) /**< SoftDevice Event IRQ handler. Used for both protocol events and SoC events. */ -+#define RADIO_NOTIFICATION_IRQn (SWI1_IRQn) /**< The radio notification IRQ number. */ -+#define RADIO_NOTIFICATION_IRQHandler (SWI1_IRQHandler) /**< The radio notification IRQ handler. */ -+#endif -+#if (defined(NRF52) || defined(NRF52840_XXAA)) -+#define SD_EVT_IRQn (SWI2_EGU2_IRQn) /**< SoftDevice Event IRQ number. Used for both protocol events and SoC events. */ -+#define SD_EVT_IRQHandler (SWI2_EGU2_IRQHandler) /**< SoftDevice Event IRQ handler. Used for both protocol events and SoC events. */ -+#define RADIO_NOTIFICATION_IRQn (SWI1_EGU1_IRQn) /**< The radio notification IRQ number. */ -+#define RADIO_NOTIFICATION_IRQHandler (SWI1_EGU1_IRQHandler) /**< The radio notification IRQ handler. */ -+#endif -+ -+#define NRF_RADIO_LENGTH_MIN_US (100) /**< The shortest allowed radio timeslot, in microseconds. */ -+#define NRF_RADIO_LENGTH_MAX_US (100000) /**< The longest allowed radio timeslot, in microseconds. */ -+ -+#define NRF_RADIO_DISTANCE_MAX_US (128000000UL - 1UL) /**< The longest timeslot distance, in microseconds, allowed for the distance parameter (see @ref nrf_radio_request_normal_t) in the request. */ -+ -+#define NRF_RADIO_EARLIEST_TIMEOUT_MAX_US (128000000UL - 1UL) /**< The longest timeout, in microseconds, allowed when requesting the earliest possible timeslot. */ -+ -+#define NRF_RADIO_START_JITTER_US (2) /**< The maximum jitter in @ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START relative to the requested start time. */ -+ -+/**@} */ -+ -+/**@addtogroup NRF_SOC_ENUMS Enumerations -+ * @{ */ -+ -+/**@brief The SVC numbers used by the SVC functions in the SoC library. */ -+enum NRF_SOC_SVCS -+{ -+ SD_PPI_CHANNEL_ENABLE_GET = SOC_SVC_BASE, -+ SD_PPI_CHANNEL_ENABLE_SET, -+ SD_PPI_CHANNEL_ENABLE_CLR, -+ SD_PPI_CHANNEL_ASSIGN, -+ SD_PPI_GROUP_TASK_ENABLE, -+ SD_PPI_GROUP_TASK_DISABLE, -+ SD_PPI_GROUP_ASSIGN, -+ SD_PPI_GROUP_GET, -+ SD_FLASH_PAGE_ERASE, -+ SD_FLASH_WRITE, -+ SD_FLASH_PROTECT, -+ SD_MUTEX_NEW = SOC_SVC_BASE_NOT_AVAILABLE, -+ SD_MUTEX_ACQUIRE, -+ SD_MUTEX_RELEASE, -+ SD_RAND_APPLICATION_POOL_CAPACITY_GET, -+ SD_RAND_APPLICATION_BYTES_AVAILABLE_GET, -+ SD_RAND_APPLICATION_VECTOR_GET, -+ SD_POWER_MODE_SET, -+ SD_POWER_SYSTEM_OFF, -+ SD_POWER_RESET_REASON_GET, -+ SD_POWER_RESET_REASON_CLR, -+ SD_POWER_POF_ENABLE, -+ SD_POWER_POF_THRESHOLD_SET, -+ SD_POWER_RAMON_SET, -+ SD_POWER_RAMON_CLR, -+ SD_POWER_RAMON_GET, -+ SD_POWER_GPREGRET_SET, -+ SD_POWER_GPREGRET_CLR, -+ SD_POWER_GPREGRET_GET, -+ SD_POWER_DCDC_MODE_SET, -+ SD_APP_EVT_WAIT, -+ SD_CLOCK_HFCLK_REQUEST, -+ SD_CLOCK_HFCLK_RELEASE, -+ SD_CLOCK_HFCLK_IS_RUNNING, -+ SD_RADIO_NOTIFICATION_CFG_SET, -+ SD_ECB_BLOCK_ENCRYPT, -+ SD_ECB_BLOCKS_ENCRYPT, -+ SD_RADIO_SESSION_OPEN, -+ SD_RADIO_SESSION_CLOSE, -+ SD_RADIO_REQUEST, -+ SD_EVT_GET, -+ SD_TEMP_GET, -+ SVC_SOC_LAST -+}; -+ -+/**@brief Possible values of a ::nrf_mutex_t. */ -+enum NRF_MUTEX_VALUES -+{ -+ NRF_MUTEX_FREE, -+ NRF_MUTEX_TAKEN -+}; -+ -+/**@brief Power modes. */ -+enum NRF_POWER_MODES -+{ -+ NRF_POWER_MODE_CONSTLAT, /**< Constant latency mode. See power management in the reference manual. */ -+ NRF_POWER_MODE_LOWPWR /**< Low power mode. See power management in the reference manual. */ -+}; -+ -+ -+/**@brief Power failure thresholds */ -+enum NRF_POWER_THRESHOLDS -+{ -+ NRF_POWER_THRESHOLD_V21, /**< 2.1 Volts power failure threshold. */ -+ NRF_POWER_THRESHOLD_V23, /**< 2.3 Volts power failure threshold. */ -+ NRF_POWER_THRESHOLD_V25, /**< 2.5 Volts power failure threshold. */ -+ NRF_POWER_THRESHOLD_V27 /**< 2.7 Volts power failure threshold. */ -+}; -+ -+ -+/**@brief DC/DC converter modes. */ -+enum NRF_POWER_DCDC_MODES -+{ -+ NRF_POWER_DCDC_DISABLE, /**< The DCDC is disabled. */ -+ NRF_POWER_DCDC_ENABLE /**< The DCDC is enabled. */ -+}; -+ -+/**@brief Radio notification distances. */ -+enum NRF_RADIO_NOTIFICATION_DISTANCES -+{ -+ NRF_RADIO_NOTIFICATION_DISTANCE_NONE = 0, /**< The event does not have a notification. */ -+ NRF_RADIO_NOTIFICATION_DISTANCE_800US, /**< The distance from the active notification to start of radio activity. */ -+ NRF_RADIO_NOTIFICATION_DISTANCE_1740US, /**< The distance from the active notification to start of radio activity. */ -+ NRF_RADIO_NOTIFICATION_DISTANCE_2680US, /**< The distance from the active notification to start of radio activity. */ -+ NRF_RADIO_NOTIFICATION_DISTANCE_3620US, /**< The distance from the active notification to start of radio activity. */ -+ NRF_RADIO_NOTIFICATION_DISTANCE_4560US, /**< The distance from the active notification to start of radio activity. */ -+ NRF_RADIO_NOTIFICATION_DISTANCE_5500US /**< The distance from the active notification to start of radio activity. */ -+}; -+ -+ -+/**@brief Radio notification types. */ -+enum NRF_RADIO_NOTIFICATION_TYPES -+{ -+ NRF_RADIO_NOTIFICATION_TYPE_NONE = 0, /**< The event does not have a radio notification signal. */ -+ NRF_RADIO_NOTIFICATION_TYPE_INT_ON_ACTIVE, /**< Using interrupt for notification when the radio will be enabled. */ -+ NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE, /**< Using interrupt for notification when the radio has been disabled. */ -+ NRF_RADIO_NOTIFICATION_TYPE_INT_ON_BOTH, /**< Using interrupt for notification both when the radio will be enabled and disabled. */ -+}; -+ -+/**@brief The Radio signal callback types. */ -+enum NRF_RADIO_CALLBACK_SIGNAL_TYPE -+{ -+ NRF_RADIO_CALLBACK_SIGNAL_TYPE_START, /**< This signal indicates the start of the radio timeslot. */ -+ NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0, /**< This signal indicates the NRF_TIMER0 interrupt. */ -+ NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO, /**< This signal indicates the NRF_RADIO interrupt. */ -+ NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_FAILED, /**< This signal indicates extend action failed. */ -+ NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_SUCCEEDED /**< This signal indicates extend action succeeded. */ -+}; -+ -+/**@brief The actions requested by the signal callback. -+ * -+ * This code gives the SOC instructions about what action to take when the signal callback has -+ * returned. -+ */ -+enum NRF_RADIO_SIGNAL_CALLBACK_ACTION -+{ -+ NRF_RADIO_SIGNAL_CALLBACK_ACTION_NONE, /**< Return without action. */ -+ NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND, /**< Request an extension of the current timeslot (maximum execution time for this action is when the extension succeeded). */ -+ NRF_RADIO_SIGNAL_CALLBACK_ACTION_END, /**< End the current radio timeslot. */ -+ NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END /**< Request a new radio timeslot and end the current timeslot. */ -+}; -+ -+/**@brief Radio timeslot high frequency clock source configuration. */ -+enum NRF_RADIO_HFCLK_CFG -+{ -+ NRF_RADIO_HFCLK_CFG_XTAL_GUARANTEED, /**< The SoftDevice will guarantee that the high frequency clock source is the -+ external crystal for the whole duration of the timeslot. This should be the -+ preferred option for events that use the radio or require high timing accuracy. */ -+ NRF_RADIO_HFCLK_CFG_NO_GUARANTEE /**< This configuration allows for earlier and tighter scheduling of timeslots. -+ The RC oscillator may be the clock source in part or for the whole duration of the timeslot. -+ The RC oscillator's accuracy must therefore be taken into consideration. -+ @note If the application will use the radio peripheral in timeslots with this configuration, -+ it must make sure that the crystal is running and stable before starting the radio. */ -+}; -+ -+/**@brief Radio timeslot priorities. */ -+enum NRF_RADIO_PRIORITY -+{ -+ NRF_RADIO_PRIORITY_HIGH, /**< High (equal priority as the normal connection priority of the SoftDevice stack(s)). */ -+ NRF_RADIO_PRIORITY_NORMAL, /**< Normal (equal priority as the priority of secondary activites of the SoftDevice stack(s)). */ -+}; -+ -+/**@brief Radio timeslot request type. */ -+enum NRF_RADIO_REQUEST_TYPE -+{ -+ NRF_RADIO_REQ_TYPE_EARLIEST, /**< Request radio timeslot as early as possible. This should always be used for the first request in a session. */ -+ NRF_RADIO_REQ_TYPE_NORMAL /**< Normal radio timeslot request. */ -+}; -+ -+/**@brief SoC Events. */ -+enum NRF_SOC_EVTS -+{ -+ NRF_EVT_HFCLKSTARTED, /**< Event indicating that the HFCLK has started. */ -+ NRF_EVT_POWER_FAILURE_WARNING, /**< Event indicating that a power failure warning has occurred. */ -+ NRF_EVT_FLASH_OPERATION_SUCCESS, /**< Event indicating that the ongoing flash operation has completed successfully. */ -+ NRF_EVT_FLASH_OPERATION_ERROR, /**< Event indicating that the ongoing flash operation has timed out with an error. */ -+ NRF_EVT_RADIO_BLOCKED, /**< Event indicating that a radio timeslot was blocked. */ -+ NRF_EVT_RADIO_CANCELED, /**< Event indicating that a radio timeslot was canceled by SoftDevice. */ -+ NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN, /**< Event indicating that a radio timeslot signal callback handler return was invalid. */ -+ NRF_EVT_RADIO_SESSION_IDLE, /**< Event indicating that a radio timeslot session is idle. */ -+ NRF_EVT_RADIO_SESSION_CLOSED, /**< Event indicating that a radio timeslot session is closed. */ -+ NRF_EVT_NUMBER_OF_EVTS -+}; -+ -+/**@} */ -+ -+ -+/**@addtogroup NRF_SOC_STRUCTURES Structures -+ * @{ */ -+ -+/**@brief Represents a mutex for use with the nrf_mutex functions. -+ * @note Accessing the value directly is not safe, use the mutex functions! -+ */ -+typedef volatile uint8_t nrf_mutex_t; -+ -+/**@brief Parameters for a request for a timeslot as early as possible. */ -+typedef struct -+{ -+ uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ -+ uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ -+ uint32_t length_us; /**< The radio timeslot length (in the range 100 to 100,000] microseconds). */ -+ uint32_t timeout_us; /**< Longest acceptable delay until the start of the requested timeslot (up to @ref NRF_RADIO_EARLIEST_TIMEOUT_MAX_US microseconds). */ -+} nrf_radio_request_earliest_t; -+ -+/**@brief Parameters for a normal radio timeslot request. */ -+typedef struct -+{ -+ uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ -+ uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ -+ uint32_t distance_us; /**< Distance from the start of the previous radio timeslot (up to @ref NRF_RADIO_DISTANCE_MAX_US microseconds). */ -+ uint32_t length_us; /**< The radio timeslot length (in the range [100..100,000] microseconds). */ -+} nrf_radio_request_normal_t; -+ -+/**@brief Radio timeslot request parameters. */ -+typedef struct -+{ -+ uint8_t request_type; /**< Type of request, see @ref NRF_RADIO_REQUEST_TYPE. */ -+ union -+ { -+ nrf_radio_request_earliest_t earliest; /**< Parameters for requesting a radio timeslot as early as possible. */ -+ nrf_radio_request_normal_t normal; /**< Parameters for requesting a normal radio timeslot. */ -+ } params; /**< Parameter union. */ -+} nrf_radio_request_t; -+ -+/**@brief Return parameters of the radio timeslot signal callback. */ -+typedef struct -+{ -+ uint8_t callback_action; /**< The action requested by the application when returning from the signal callback, see @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION. */ -+ union -+ { -+ struct -+ { -+ nrf_radio_request_t * p_next; /**< The request parameters for the next radio timeslot. */ -+ } request; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END. */ -+ struct -+ { -+ uint32_t length_us; /**< Requested extension of the radio timeslot duration (microseconds) (for minimum time see @ref NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US). */ -+ } extend; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND. */ -+ } params; /**< Parameter union. */ -+} nrf_radio_signal_callback_return_param_t; -+ -+/**@brief The radio timeslot signal callback type. -+ * -+ * @note In case of invalid return parameters, the radio timeslot will automatically end -+ * immediately after returning from the signal callback and the -+ * @ref NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN event will be sent. -+ * @note The returned struct pointer must remain valid after the signal callback -+ * function returns. For instance, this means that it must not point to a stack variable. -+ * -+ * @param[in] signal_type Type of signal, see @ref NRF_RADIO_CALLBACK_SIGNAL_TYPE. -+ * -+ * @return Pointer to structure containing action requested by the application. -+ */ -+typedef nrf_radio_signal_callback_return_param_t * (*nrf_radio_signal_callback_t) (uint8_t signal_type); -+ -+/**@brief AES ECB parameter typedefs */ -+typedef uint8_t soc_ecb_key_t[SOC_ECB_KEY_LENGTH]; /**< Encryption key type. */ -+typedef uint8_t soc_ecb_cleartext_t[SOC_ECB_CLEARTEXT_LENGTH]; /**< Cleartext data type. */ -+typedef uint8_t soc_ecb_ciphertext_t[SOC_ECB_CIPHERTEXT_LENGTH]; /**< Ciphertext data type. */ -+ -+/**@brief AES ECB data structure */ -+typedef struct -+{ -+ soc_ecb_key_t key; /**< Encryption key. */ -+ soc_ecb_cleartext_t cleartext; /**< Cleartext data. */ -+ soc_ecb_ciphertext_t ciphertext; /**< Ciphertext data. */ -+} nrf_ecb_hal_data_t; -+ -+/**@brief AES ECB block. Used to provide multiple blocks in a single call -+ to @ref sd_ecb_blocks_encrypt.*/ -+typedef struct -+{ -+ soc_ecb_key_t* p_key; /**< Pointer to the Encryption key. */ -+ soc_ecb_cleartext_t* p_cleartext; /**< Pointer to the Cleartext data. */ -+ soc_ecb_ciphertext_t* p_ciphertext; /**< Pointer to the Ciphertext data. */ -+} nrf_ecb_hal_data_block_t; -+ -+/**@} */ -+ -+/**@addtogroup NRF_SOC_FUNCTIONS Functions -+ * @{ */ -+ -+/**@brief Initialize a mutex. -+ * -+ * @param[in] p_mutex Pointer to the mutex to initialize. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_MUTEX_NEW, uint32_t, sd_mutex_new(nrf_mutex_t * p_mutex)); -+ -+/**@brief Attempt to acquire a mutex. -+ * -+ * @param[in] p_mutex Pointer to the mutex to acquire. -+ * -+ * @retval ::NRF_SUCCESS The mutex was successfully acquired. -+ * @retval ::NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN The mutex could not be acquired. -+ */ -+SVCALL(SD_MUTEX_ACQUIRE, uint32_t, sd_mutex_acquire(nrf_mutex_t * p_mutex)); -+ -+/**@brief Release a mutex. -+ * -+ * @param[in] p_mutex Pointer to the mutex to release. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_MUTEX_RELEASE, uint32_t, sd_mutex_release(nrf_mutex_t * p_mutex)); -+ -+/**@brief Query the capacity of the application random pool. -+ * -+ * @param[out] p_pool_capacity The capacity of the pool. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_RAND_APPLICATION_POOL_CAPACITY_GET, uint32_t, sd_rand_application_pool_capacity_get(uint8_t * p_pool_capacity)); -+ -+/**@brief Get number of random bytes available to the application. -+ * -+ * @param[out] p_bytes_available The number of bytes currently available in the pool. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_RAND_APPLICATION_BYTES_AVAILABLE_GET, uint32_t, sd_rand_application_bytes_available_get(uint8_t * p_bytes_available)); -+ -+/**@brief Get random bytes from the application pool. -+ * -+ * @param[out] p_buff Pointer to unit8_t buffer for storing the bytes. -+ * @param[in] length Number of bytes to take from pool and place in p_buff. -+ * -+ * @retval ::NRF_SUCCESS The requested bytes were written to p_buff. -+ * @retval ::NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES No bytes were written to the buffer, because there were not enough bytes available. -+*/ -+SVCALL(SD_RAND_APPLICATION_VECTOR_GET, uint32_t, sd_rand_application_vector_get(uint8_t * p_buff, uint8_t length)); -+ -+/**@brief Gets the reset reason register. -+ * -+ * @param[out] p_reset_reason Contents of the NRF_POWER->RESETREAS register. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_POWER_RESET_REASON_GET, uint32_t, sd_power_reset_reason_get(uint32_t * p_reset_reason)); -+ -+/**@brief Clears the bits of the reset reason register. -+ * -+ * @param[in] reset_reason_clr_msk Contains the bits to clear from the reset reason register. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_POWER_RESET_REASON_CLR, uint32_t, sd_power_reset_reason_clr(uint32_t reset_reason_clr_msk)); -+ -+/**@brief Sets the power mode when in CPU sleep. -+ * -+ * @param[in] power_mode The power mode to use when in CPU sleep, see @ref NRF_POWER_MODES. @sa sd_app_evt_wait -+ * -+ * @retval ::NRF_SUCCESS The power mode was set. -+ * @retval ::NRF_ERROR_SOC_POWER_MODE_UNKNOWN The power mode was unknown. -+ */ -+SVCALL(SD_POWER_MODE_SET, uint32_t, sd_power_mode_set(uint8_t power_mode)); -+ -+/**@brief Puts the chip in System OFF mode. -+ * -+ * @retval ::NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN -+ */ -+SVCALL(SD_POWER_SYSTEM_OFF, uint32_t, sd_power_system_off(void)); -+ -+/**@brief Enables or disables the power-fail comparator. -+ * -+ * Enabling this will give a softdevice event (NRF_EVT_POWER_FAILURE_WARNING) when the power failure warning occurs. -+ * The event can be retrieved with sd_evt_get(); -+ * -+ * @param[in] pof_enable True if the power-fail comparator should be enabled, false if it should be disabled. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_POWER_POF_ENABLE, uint32_t, sd_power_pof_enable(uint8_t pof_enable)); -+ -+/**@brief Sets the power-fail threshold value. -+ * -+ * @param[in] threshold The power-fail threshold value to use, see @ref NRF_POWER_THRESHOLDS. -+ * -+ * @retval ::NRF_SUCCESS The power failure threshold was set. -+ * @retval ::NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN The power failure threshold is unknown. -+ */ -+SVCALL(SD_POWER_POF_THRESHOLD_SET, uint32_t, sd_power_pof_threshold_set(uint8_t threshold)); -+ -+/**@brief Sets bits in the NRF_POWER->RAMON register. -+ * -+ * @param[in] ramon Contains the bits needed to be set in the NRF_POWER->RAMON register. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_POWER_RAMON_SET, uint32_t, sd_power_ramon_set(uint32_t ramon)); -+ -+/**@brief Clears bits in the NRF_POWER->RAMON register. -+ * -+ * @param ramon Contains the bits needed to be cleared in the NRF_POWER->RAMON register. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_POWER_RAMON_CLR, uint32_t, sd_power_ramon_clr(uint32_t ramon)); -+ -+/**@brief Get contents of NRF_POWER->RAMON register, indicates power status of ram blocks. -+ * -+ * @param[out] p_ramon Content of NRF_POWER->RAMON register. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_POWER_RAMON_GET, uint32_t, sd_power_ramon_get(uint32_t * p_ramon)); -+ -+/**@brief Set bits in the general purpose retention registers (NRF_POWER->GPREGRET*). -+ * -+ * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. -+ * @param[in] gpregret_msk Bits to be set in the GPREGRET register. -+ * -+ * @note nRF51 does only have one general purpose retained register, so gpregret_id must be 0 on nRF51. -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_POWER_GPREGRET_SET, uint32_t, sd_power_gpregret_set(uint32_t gpregret_id, uint32_t gpregret_msk)); -+ -+/**@brief Clear bits in the general purpose retention registers (NRF_POWER->GPREGRET*). -+ * -+ * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. -+ * @param[in] gpregret_msk Bits to be clear in the GPREGRET register. -+ * -+ * @note nRF51 does only have one general purpose retained register, so gpregret_id must be 0 on nRF51. -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_POWER_GPREGRET_CLR, uint32_t, sd_power_gpregret_clr(uint32_t gpregret_id, uint32_t gpregret_msk)); -+ -+/**@brief Get contents of the general purpose retention registers (NRF_POWER->GPREGRET*). -+ * -+ * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. -+ * @param[out] p_gpregret Contents of the GPREGRET register. -+ * -+ * @note nRF51 does only have one general purpose retained register, so gpregret_id must be 0 on nRF51. -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_POWER_GPREGRET_GET, uint32_t, sd_power_gpregret_get(uint32_t gpregret_id, uint32_t *p_gpregret)); -+ -+/**@brief Sets the DCDC mode. -+ * -+ * Enable or disable the DCDC peripheral. -+ * -+ * @param[in] dcdc_mode The mode of the DCDC, see @ref NRF_POWER_DCDC_MODES. -+ * -+ * @retval ::NRF_SUCCESS -+ * @retval ::NRF_ERROR_INVALID_PARAM The DCDC mode is invalid. -+ */ -+SVCALL(SD_POWER_DCDC_MODE_SET, uint32_t, sd_power_dcdc_mode_set(uint8_t dcdc_mode)); -+ -+/**@brief Request the high frequency crystal oscillator. -+ * -+ * Will start the high frequency crystal oscillator, the startup time of the crystal varies -+ * and the ::sd_clock_hfclk_is_running function can be polled to check if it has started. -+ * -+ * @see sd_clock_hfclk_is_running -+ * @see sd_clock_hfclk_release -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_CLOCK_HFCLK_REQUEST, uint32_t, sd_clock_hfclk_request(void)); -+ -+/**@brief Releases the high frequency crystal oscillator. -+ * -+ * Will stop the high frequency crystal oscillator, this happens immediately. -+ * -+ * @see sd_clock_hfclk_is_running -+ * @see sd_clock_hfclk_request -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_CLOCK_HFCLK_RELEASE, uint32_t, sd_clock_hfclk_release(void)); -+ -+/**@brief Checks if the high frequency crystal oscillator is running. -+ * -+ * @see sd_clock_hfclk_request -+ * @see sd_clock_hfclk_release -+ * -+ * @param[out] p_is_running 1 if the external crystal oscillator is running, 0 if not. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_CLOCK_HFCLK_IS_RUNNING, uint32_t, sd_clock_hfclk_is_running(uint32_t * p_is_running)); -+ -+/**@brief Waits for an application event. -+ * -+ * An application event is either an application interrupt or a pended interrupt when the -+ * interrupt is disabled. When the interrupt is enabled it will be taken immediately since -+ * this function will wait in thread mode, then the execution will return in the application's -+ * main thread. When an interrupt is disabled and gets pended it will return to the application's -+ * thread main. The application must ensure that the pended flag is cleared using -+ * ::sd_nvic_ClearPendingIRQ in order to sleep using this function. This is only necessary for -+ * disabled interrupts, as the interrupt handler will clear the pending flag automatically for -+ * enabled interrupts. -+ * -+ * In order to wake up from disabled interrupts, the SEVONPEND flag has to be set in the Cortex-M0 -+ * System Control Register (SCR). @sa CMSIS_SCB -+ * -+ * @note If an application interrupt has happened since the last time sd_app_evt_wait was -+ * called this function will return immediately and not go to sleep. This is to avoid race -+ * conditions that can occur when a flag is updated in the interrupt handler and processed -+ * in the main loop. -+ * -+ * @post An application interrupt has happened or a interrupt pending flag is set. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_APP_EVT_WAIT, uint32_t, sd_app_evt_wait(void)); -+ -+/**@brief Get PPI channel enable register contents. -+ * -+ * @param[out] p_channel_enable The contents of the PPI CHEN register. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_PPI_CHANNEL_ENABLE_GET, uint32_t, sd_ppi_channel_enable_get(uint32_t * p_channel_enable)); -+ -+/**@brief Set PPI channel enable register. -+ * -+ * @param[in] channel_enable_set_msk Mask containing the bits to set in the PPI CHEN register. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_PPI_CHANNEL_ENABLE_SET, uint32_t, sd_ppi_channel_enable_set(uint32_t channel_enable_set_msk)); -+ -+/**@brief Clear PPI channel enable register. -+ * -+ * @param[in] channel_enable_clr_msk Mask containing the bits to clear in the PPI CHEN register. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_PPI_CHANNEL_ENABLE_CLR, uint32_t, sd_ppi_channel_enable_clr(uint32_t channel_enable_clr_msk)); -+ -+/**@brief Assign endpoints to a PPI channel. -+ * -+ * @param[in] channel_num Number of the PPI channel to assign. -+ * @param[in] evt_endpoint Event endpoint of the PPI channel. -+ * @param[in] task_endpoint Task endpoint of the PPI channel. -+ * -+ * @retval ::NRF_ERROR_SOC_PPI_INVALID_CHANNEL The channel number is invalid. -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_PPI_CHANNEL_ASSIGN, uint32_t, sd_ppi_channel_assign(uint8_t channel_num, const volatile void * evt_endpoint, const volatile void * task_endpoint)); -+ -+/**@brief Task to enable a channel group. -+ * -+ * @param[in] group_num Number of the channel group. -+ * -+ * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_PPI_GROUP_TASK_ENABLE, uint32_t, sd_ppi_group_task_enable(uint8_t group_num)); -+ -+/**@brief Task to disable a channel group. -+ * -+ * @param[in] group_num Number of the PPI group. -+ * -+ * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_PPI_GROUP_TASK_DISABLE, uint32_t, sd_ppi_group_task_disable(uint8_t group_num)); -+ -+/**@brief Assign PPI channels to a channel group. -+ * -+ * @param[in] group_num Number of the channel group. -+ * @param[in] channel_msk Mask of the channels to assign to the group. -+ * -+ * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_PPI_GROUP_ASSIGN, uint32_t, sd_ppi_group_assign(uint8_t group_num, uint32_t channel_msk)); -+ -+/**@brief Gets the PPI channels of a channel group. -+ * -+ * @param[in] group_num Number of the channel group. -+ * @param[out] p_channel_msk Mask of the channels assigned to the group. -+ * -+ * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_PPI_GROUP_GET, uint32_t, sd_ppi_group_get(uint8_t group_num, uint32_t * p_channel_msk)); -+ -+/**@brief Configures the Radio Notification signal. -+ * -+ * @note -+ * - The notification signal latency depends on the interrupt priority settings of SWI used -+ * for notification signal. -+ * - To ensure that the radio notification signal behaves in a consistent way, always -+ * configure radio notifications when there is no protocol stack or other SoftDevice -+ * activity in progress. It is recommended that the radio notification signal is -+ * configured directly after the SoftDevice has been enabled. -+ * - In the period between the ACTIVE signal and the start of the Radio Event, the SoftDevice -+ * will interrupt the application to do Radio Event preparation. -+ * - Using the Radio Notification feature may limit the bandwidth, as the SoftDevice may have -+ * to shorten the connection events to have time for the Radio Notification signals. -+ * -+ * @param[in] type Type of notification signal, see @ref NRF_RADIO_NOTIFICATION_TYPES. -+ * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE shall be used to turn off radio -+ * notification. Using @ref NRF_RADIO_NOTIFICATION_DISTANCE_NONE is -+ * recommended (but not required) to be used with -+ * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE. -+ * -+ * @param[in] distance Distance between the notification signal and start of radio activity, see @ref NRF_RADIO_NOTIFICATION_DISTANCES. -+ * This parameter is ignored when @ref NRF_RADIO_NOTIFICATION_TYPE_NONE or -+ * @ref NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE is used. -+ * -+ * @retval ::NRF_ERROR_INVALID_PARAM The group number is invalid. -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_RADIO_NOTIFICATION_CFG_SET, uint32_t, sd_radio_notification_cfg_set(uint8_t type, uint8_t distance)); -+ -+/**@brief Encrypts a block according to the specified parameters. -+ * -+ * 128-bit AES encryption. -+ * -+ * @note: -+ * - The application may set the SEVONPEND bit in the SCR to 1 to make the SoftDevice sleep while -+ * the ECB is running. The SEVONPEND bit should only be cleared (set to 0) from application -+ * main or low interrupt level. -+ * -+ * @param[in, out] p_ecb_data Pointer to the ECB parameters' struct (two input -+ * parameters and one output parameter). -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_ECB_BLOCK_ENCRYPT, uint32_t, sd_ecb_block_encrypt(nrf_ecb_hal_data_t * p_ecb_data)); -+ -+/**@brief Encrypts multiple data blocks provided as an array of data block structures. -+ * -+ * @details: Performs 128-bit AES encryption on multiple data blocks -+ * -+ * @note: -+ * - The application may set the SEVONPEND bit in the SCR to 1 to make the SoftDevice sleep while -+ * the ECB is running. The SEVONPEND bit should only be cleared (set to 0) from application -+ * main or low interrupt level. -+ * -+ * @param[in] block_count Count of blocks in the p_data_blocks array. -+ * @param[in,out] p_data_blocks Pointer to the first entry in a contiguous array of -+ * @ref nrf_ecb_hal_data_block_t structures. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_ECB_BLOCKS_ENCRYPT, uint32_t, sd_ecb_blocks_encrypt(uint8_t block_count, nrf_ecb_hal_data_block_t * p_data_blocks)); -+ -+/**@brief Gets any pending events generated by the SoC API. -+ * -+ * The application should keep calling this function to get events, until ::NRF_ERROR_NOT_FOUND is returned. -+ * -+ * @param[out] p_evt_id Set to one of the values in @ref NRF_SOC_EVTS, if any events are pending. -+ * -+ * @retval ::NRF_SUCCESS An event was pending. The event id is written in the p_evt_id parameter. -+ * @retval ::NRF_ERROR_NOT_FOUND No pending events. -+ */ -+SVCALL(SD_EVT_GET, uint32_t, sd_evt_get(uint32_t * p_evt_id)); -+ -+/**@brief Get the temperature measured on the chip -+ * -+ * This function will block until the temperature measurement is done. -+ * It takes around 50us from call to return. -+ * -+ * @param[out] p_temp Result of temperature measurement. Die temperature in 0.25 degrees celsius. -+ * -+ * @retval ::NRF_SUCCESS A temperature measurement was done, and the temperature was written to temp -+ */ -+SVCALL(SD_TEMP_GET, uint32_t, sd_temp_get(int32_t * p_temp)); -+ -+/**@brief Flash Write -+* -+* Commands to write a buffer to flash -+* -+* If the SoftDevice is enabled: -+* This call initiates the flash access command, and its completion will be communicated to the -+* application with exactly one of the following events: -+* - @ref NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. -+* - @ref NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. -+* -+* If the SoftDevice is not enabled no event will be generated, and this call will return @ref NRF_SUCCESS when the -+ * write has been completed -+* -+* @note -+* - This call takes control over the radio and the CPU during flash erase and write to make sure that -+* they will not interfere with the flash access. This means that all interrupts will be blocked -+* for a predictable time (depending on the NVMC specification in nRF51 Series Reference Manual -+* and the command parameters). -+* - The data in the p_src buffer should not be modified before the @ref NRF_EVT_FLASH_OPERATION_SUCCESS -+* or the @ref NRF_EVT_FLASH_OPERATION_ERROR have been received if the SoftDevice is enabled. -+* -+* -+* @param[in] p_dst Pointer to start of flash location to be written. -+* @param[in] p_src Pointer to buffer with data to be written. -+* @param[in] size Number of 32-bit words to write. Maximum size is 256 32-bit words for nRF51 and 1024 for nRF52. -+* -+* @retval ::NRF_ERROR_INVALID_ADDR Tried to write to a non existing flash address, or p_dst or p_src was unaligned. -+* @retval ::NRF_ERROR_BUSY The previous command has not yet completed. -+* @retval ::NRF_ERROR_INVALID_LENGTH Size was 0, or higher than the maximum allowed size. -+* @retval ::NRF_ERROR_FORBIDDEN Tried to write to or read from protected location. -+* @retval ::NRF_SUCCESS The command was accepted. -+*/ -+SVCALL(SD_FLASH_WRITE, uint32_t, sd_flash_write(uint32_t * const p_dst, uint32_t const * const p_src, uint32_t size)); -+ -+ -+/**@brief Flash Erase page -+* -+* Commands to erase a flash page -+* If the SoftDevice is enabled: -+* This call initiates the flash access command, and its completion will be communicated to the -+* application with exactly one of the following events: -+* - @ref NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. -+* - @ref NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. -+* -+* If the SoftDevice is not enabled no event will be generated, and this call will return @ref NRF_SUCCESS when the -+* erase has been completed -+* -+* @note -+* - This call takes control over the radio and the CPU during flash erase and write to make sure that -+* they will not interfere with the flash access. This means that all interrupts will be blocked -+* for a predictable time (depending on the NVMC specification in nRF51 Series Reference Manual -+* and the command parameters). -+* -+* -+* @param[in] page_number Pagenumber of the page to erase -+* @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. -+* @retval ::NRF_ERROR_INVALID_ADDR Tried to erase to a non existing flash page. -+* @retval ::NRF_ERROR_BUSY The previous command has not yet completed. -+* @retval ::NRF_ERROR_FORBIDDEN Tried to erase a protected page. -+* @retval ::NRF_SUCCESS The command was accepted. -+*/ -+SVCALL(SD_FLASH_PAGE_ERASE, uint32_t, sd_flash_page_erase(uint32_t page_number)); -+ -+ -+/**@brief Flash Protection set -+ * -+ * Commands to set the flash protection configuration registers. -+ On nRF51 this sets the PROTENSETx registers of the MPU peripheral. -+ On nRF52 this sets the CONFIGx registers of the BPROT peripheral. -+ * -+ * @note To read the values read them directly. They are only write-protected. -+ * -+ * @param[in] block_cfg0 Value to be written to the configuration register. -+ * @param[in] block_cfg1 Value to be written to the configuration register. -+ * @param[in] block_cfg2 Value to be written to the configuration register (ignored on nRF51). -+ * @param[in] block_cfg3 Value to be written to the configuration register (ignored on nRF51). -+ * -+ * @retval ::NRF_ERROR_FORBIDDEN Tried to protect the SoftDevice. -+ * @retval ::NRF_SUCCESS Values successfully written to configuration registers. -+ */ -+SVCALL(SD_FLASH_PROTECT, uint32_t, sd_flash_protect(uint32_t block_cfg0, uint32_t block_cfg1, uint32_t block_cfg2, uint32_t block_cfg3)); -+ -+/**@brief Opens a session for radio timeslot requests. -+ * -+ * @note Only one session can be open at a time. -+ * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) will be called when the radio timeslot -+ * starts. From this point the NRF_RADIO and NRF_TIMER0 peripherals can be freely accessed -+ * by the application. -+ * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0) is called whenever the NRF_TIMER0 -+ * interrupt occurs. -+ * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO) is called whenever the NRF_RADIO -+ * interrupt occurs. -+ * @note p_radio_signal_callback() will be called at ARM interrupt priority level 0. This -+ * implies that none of the sd_* API calls can be used from p_radio_signal_callback(). -+ * -+ * @param[in] p_radio_signal_callback The signal callback. -+ * -+ * @retval ::NRF_ERROR_INVALID_ADDR p_radio_signal_callback is an invalid function pointer. -+ * @retval ::NRF_ERROR_BUSY If session cannot be opened. -+ * @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. -+ * @retval ::NRF_SUCCESS Otherwise. -+ */ -+ SVCALL(SD_RADIO_SESSION_OPEN, uint32_t, sd_radio_session_open(nrf_radio_signal_callback_t p_radio_signal_callback)); -+ -+/**@brief Closes a session for radio timeslot requests. -+ * -+ * @note Any current radio timeslot will be finished before the session is closed. -+ * @note If a radio timeslot is scheduled when the session is closed, it will be canceled. -+ * @note The application cannot consider the session closed until the @ref NRF_EVT_RADIO_SESSION_CLOSED -+ * event is received. -+ * -+ * @retval ::NRF_ERROR_FORBIDDEN If session not opened. -+ * @retval ::NRF_ERROR_BUSY If session is currently being closed. -+ * @retval ::NRF_SUCCESS Otherwise. -+ */ -+ SVCALL(SD_RADIO_SESSION_CLOSE, uint32_t, sd_radio_session_close(void)); -+ -+/**@brief Requests a radio timeslot. -+ * -+ * @note The request type is determined by p_request->request_type, and can be one of @ref NRF_RADIO_REQ_TYPE_EARLIEST -+ * and @ref NRF_RADIO_REQ_TYPE_NORMAL. The first request in a session must always be of type @ref NRF_RADIO_REQ_TYPE_EARLIEST. -+ * @note For a normal request (@ref NRF_RADIO_REQ_TYPE_NORMAL), the start time of a radio timeslot is specified by -+ * p_request->distance_us and is given relative to the start of the previous timeslot. -+ * @note A too small p_request->distance_us will lead to a @ref NRF_EVT_RADIO_BLOCKED event. -+ * @note Timeslots scheduled too close will lead to a @ref NRF_EVT_RADIO_BLOCKED event. -+ * @note See the SoftDevice Specification for more on radio timeslot scheduling, distances and lengths. -+ * @note If an opportunity for the first radio timeslot is not found before 100ms after the call to this -+ * function, it is not scheduled, and instead a @ref NRF_EVT_RADIO_BLOCKED event is sent. -+ * The application may then try to schedule the first radio timeslot again. -+ * @note Successful requests will result in nrf_radio_signal_callback_t(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START). -+ * Unsuccessful requests will result in a @ref NRF_EVT_RADIO_BLOCKED event, see @ref NRF_SOC_EVTS. -+ * @note The jitter in the start time of the radio timeslots is +/- @ref NRF_RADIO_START_JITTER_US us. -+ * @note The nrf_radio_signal_callback_t(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) call has a latency relative to the -+ * specified radio timeslot start, but this does not affect the actual start time of the timeslot. -+ * @note NRF_TIMER0 is reset at the start of the radio timeslot, and is clocked at 1MHz from the high frequency -+ * (16 MHz) clock source. If p_request->hfclk_force_xtal is true, the high frequency clock is -+ * guaranteed to be clocked from the external crystal. -+ * @note The SoftDevice will neither access the NRF_RADIO peripheral nor the NRF_TIMER0 peripheral -+ * during the radio timeslot. -+ * -+ * @param[in] p_request Pointer to the request parameters. -+ * -+ * @retval ::NRF_ERROR_FORBIDDEN If session not opened or the session is not IDLE. -+ * @retval ::NRF_ERROR_INVALID_ADDR If the p_request pointer is invalid. -+ * @retval ::NRF_ERROR_INVALID_PARAM If the parameters of p_request are not valid. -+ * @retval ::NRF_SUCCESS Otherwise. -+ */ -+ SVCALL(SD_RADIO_REQUEST, uint32_t, sd_radio_request(nrf_radio_request_t * p_request )); -+ -+/**@} */ -+ -+#ifdef __cplusplus -+} -+#endif -+#endif // NRF_SOC_H__ -+ -+/**@} */ -diff -u -r -N a/components/softdevice/s132v3/headers/nrf_svc.h b/components/softdevice/s132v3/headers/nrf_svc.h ---- a/components/softdevice/s132v3/headers/nrf_svc.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v3/headers/nrf_svc.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,88 @@ -+/* -+ * Copyright (c) Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form must reproduce the above copyright notice, this -+ * list of conditions and the following disclaimer in the documentation and/or -+ * other materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other -+ * contributors to this software may be used to endorse or promote products -+ * derived from this software without specific prior written permission. -+ * -+ * 4. This software must only be used in a processor manufactured by Nordic -+ * Semiconductor ASA, or in a processor manufactured by a third party that -+ * is used in combination with a processor manufactured by Nordic Semiconductor. -+ * -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ * -+ */ -+ -+#ifndef NRF_SVC__ -+#define NRF_SVC__ -+ -+#include "stdint.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+#ifdef SVCALL_AS_NORMAL_FUNCTION -+#define SVCALL(number, return_type, signature) return_type signature -+#else -+ -+#ifndef SVCALL -+#if defined (__CC_ARM) -+#define SVCALL(number, return_type, signature) return_type __svc(number) signature -+#elif defined (__GNUC__) -+#ifdef __cplusplus -+#define GCC_CAST_CPP (uint8_t) -+#else -+#define GCC_CAST_CPP -+#endif -+#define SVCALL(number, return_type, signature) \ -+ _Pragma("GCC diagnostic push") \ -+ _Pragma("GCC diagnostic ignored \"-Wreturn-type\"") \ -+ __attribute__((naked)) \ -+ __attribute__((unused)) \ -+ static return_type signature \ -+ { \ -+ __asm( \ -+ "svc %0\n" \ -+ "bx r14" : : "I" (GCC_CAST_CPP number) : "r0" \ -+ ); \ -+ } \ -+ _Pragma("GCC diagnostic pop") -+ -+#elif defined (__ICCARM__) -+#define PRAGMA(x) _Pragma(#x) -+#define SVCALL(number, return_type, signature) \ -+PRAGMA(swi_number = (number)) \ -+ __swi return_type signature; -+#else -+#define SVCALL(number, return_type, signature) return_type signature -+#endif -+#endif // SVCALL -+ -+#endif // SVCALL_AS_NORMAL_FUNCTION -+ -+#ifdef __cplusplus -+} -+#endif -+#endif // NRF_SVC__ -diff -u -r -N a/components/softdevice/s132v3/headers/nrf52/nrf_mbr.h b/components/softdevice/s132v3/headers/nrf52/nrf_mbr.h ---- a/components/softdevice/s132v3/headers/nrf52/nrf_mbr.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v3/headers/nrf52/nrf_mbr.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,217 @@ -+/* -+ * Copyright (c) Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form must reproduce the above copyright notice, this -+ * list of conditions and the following disclaimer in the documentation and/or -+ * other materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other -+ * contributors to this software may be used to endorse or promote products -+ * derived from this software without specific prior written permission. -+ * -+ * 4. This software must only be used in a processor manufactured by Nordic -+ * Semiconductor ASA, or in a processor manufactured by a third party that -+ * is used in combination with a processor manufactured by Nordic Semiconductor. -+ * -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ * -+ */ -+/** -+ @defgroup nrf_mbr_api Master Boot Record API -+ @{ -+ -+ @brief APIs for updating SoftDevice and BootLoader -+ -+*/ -+ -+/* Header guard */ -+#ifndef NRF_MBR_H__ -+#define NRF_MBR_H__ -+ -+#include "nrf_svc.h" -+#include -+ -+#if !(defined(NRF52) || defined(NRF52840_XXAA)) -+#error "This header file shall only be included for nRF52 projects" -+#endif -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/** @addtogroup NRF_MBR_DEFINES Defines -+ * @{ */ -+ -+/**@brief MBR SVC Base number. */ -+#define MBR_SVC_BASE (0x18) -+ -+/**@brief Page size in words. */ -+#define MBR_PAGE_SIZE_IN_WORDS (1024) -+ -+/** @brief The size that must be reserved for the MBR when a softdevice is written to flash. -+This is the offset where the first byte of the softdevice hex file is written.*/ -+#define MBR_SIZE (0x1000) -+ -+/** @} */ -+ -+/** @addtogroup NRF_MBR_ENUMS Enumerations -+ * @{ */ -+ -+/**@brief nRF Master Boot Record API SVC numbers. */ -+enum NRF_MBR_SVCS -+{ -+ SD_MBR_COMMAND = MBR_SVC_BASE, /**< ::sd_mbr_command */ -+}; -+ -+/**@brief Possible values for ::sd_mbr_command_t.command */ -+enum NRF_MBR_COMMANDS -+{ -+ SD_MBR_COMMAND_COPY_BL, /**< Copy a new BootLoader. @see sd_mbr_command_copy_bl_t */ -+ SD_MBR_COMMAND_COPY_SD, /**< Copy a new SoftDevice. @see ::sd_mbr_command_copy_sd_t*/ -+ SD_MBR_COMMAND_INIT_SD, /**< Init forwarding interrupts to SD, and run reset function in SD*/ -+ SD_MBR_COMMAND_COMPARE, /**< This command works like memcmp. @see ::sd_mbr_command_compare_t*/ -+ SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET, /**< Start forwarding all exception to this address @see ::sd_mbr_command_vector_table_base_set_t*/ -+}; -+ -+/** @} */ -+ -+/** @addtogroup NRF_MBR_TYPES Types -+ * @{ */ -+ -+/**@brief This command copies part of a new SoftDevice -+ * The destination area is erased before copying. -+ * If dst is in the middle of a flash page, that whole flash page will be erased. -+ * If (dst+len) is in the middle of a flash page, that whole flash page will be erased. -+ * -+ * The user of this function is responsible for setting the BPROT registers. -+ * -+ * @retval ::NRF_SUCCESS indicates that the contents of the memory blocks where copied correctly. -+ * @retval ::NRF_ERROR_INTERNAL indicates that the contents of the memory blocks where not verified correctly after copying. -+ */ -+typedef struct -+{ -+ uint32_t *src; /**< Pointer to the source of data to be copied.*/ -+ uint32_t *dst; /**< Pointer to the destination where the content is to be copied.*/ -+ uint32_t len; /**< Number of 32 bit words to copy. Must be a multiple of @ref MBR_PAGE_SIZE_IN_WORDS words.*/ -+} sd_mbr_command_copy_sd_t; -+ -+ -+/**@brief This command works like memcmp, but takes the length in words. -+ * -+ * @retval ::NRF_SUCCESS indicates that the contents of both memory blocks are equal. -+ * @retval ::NRF_ERROR_NULL indicates that the contents of the memory blocks are not equal. -+ */ -+typedef struct -+{ -+ uint32_t *ptr1; /**< Pointer to block of memory. */ -+ uint32_t *ptr2; /**< Pointer to block of memory. */ -+ uint32_t len; /**< Number of 32 bit words to compare.*/ -+} sd_mbr_command_compare_t; -+ -+ -+/**@brief This command copies a new BootLoader. -+ * With this command, destination of BootLoader is always the address written in NRF_UICR->BOOTADDR. -+ * -+ * Destination is erased by this function. -+ * If (destination+bl_len) is in the middle of a flash page, that whole flash page will be erased. -+ * -+ * This function will use PROTENSET to protect the flash that is not intended to be written. -+ * -+ * On Success, this function will not return. It will start the new BootLoader from reset-vector as normal. -+ * -+ * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. -+ * @retval ::NRF_ERROR_FORBIDDEN if NRF_UICR->BOOTADDR is not set. -+ * @retval ::NRF_ERROR_INVALID_LENGTH if parameters attempts to read or write outside flash area. -+ * @retval ::NRF_ERROR_NO_MEM if no parameter page is provided (see sds for more info) -+ */ -+typedef struct -+{ -+ uint32_t *bl_src; /**< Pointer to the source of the Bootloader to be be copied.*/ -+ uint32_t bl_len; /**< Number of 32 bit words to copy for BootLoader. */ -+} sd_mbr_command_copy_bl_t; -+ -+/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the MBR -+ * -+ * Once this function has been called, this address is where the MBR will start to forward interrupts to after a reset. -+ * -+ * To restore default forwarding this function should be called with @param address set to 0. -+ * The MBR will then start forwarding to interrupts to the address in NFR_UICR->BOOTADDR or to the SoftDevice if the BOOTADDR is not set. -+ * -+ * On Success, this function will not return. It will reset the device. -+ * -+ * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. -+ * @retval ::NRF_ERROR_INVALID_ADDR if parameter address is outside of the flash size. -+ * @retval ::NRF_ERROR_NO_MEM if no parameter page is provided (see sds for more info) -+ */ -+typedef struct -+{ -+ uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ -+} sd_mbr_command_vector_table_base_set_t; -+ -+ -+typedef struct -+{ -+ uint32_t command; /**< type of command to be issued see @ref NRF_MBR_COMMANDS. */ -+ union -+ { -+ sd_mbr_command_copy_sd_t copy_sd; /**< Parameters for copy SoftDevice.*/ -+ sd_mbr_command_compare_t compare; /**< Parameters for verify.*/ -+ sd_mbr_command_copy_bl_t copy_bl; /**< Parameters for copy BootLoader. Requires parameter page. */ -+ sd_mbr_command_vector_table_base_set_t base_set; /**< Parameters for vector table base set. Requires parameter page.*/ -+ } params; -+} sd_mbr_command_t; -+ -+/** @} */ -+ -+/** @addtogroup NRF_MBR_FUNCTIONS Functions -+ * @{ */ -+ -+/**@brief Issue Master Boot Record commands -+ * -+ * Commands used when updating a SoftDevice and bootloader. -+ * -+ * The SD_MBR_COMMAND_COPY_BL and SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET requires parameters to be -+ * retained by the MBR when resetting the IC. This is done in a separate flash page -+ * provided by the application. The uicr register UICR.NRFFW[1] must be set -+ * to an address corresponding to a page in the application flash space. This page will be cleared -+ * by the MBR and used to store the command before reset. When the UICR.NRFFW[1] field is set -+ * the page it refers to must not be used by the application. If the UICR.NRFFW[1] is set to -+ * 0xFFFFFFFF (the default) MBR commands which use flash will be unavailable and return -+ * NRF_ERROR_NO_MEM. -+ * -+ * @param[in] param Pointer to a struct describing the command. -+ * -+ * @note for retvals see ::sd_mbr_command_copy_sd_t ::sd_mbr_command_copy_bl_t ::sd_mbr_command_compare_t ::sd_mbr_command_vector_table_base_set_t -+ * -+ * @retval NRF_ERROR_NO_MEM if UICR.NRFFW[1] is not set (i.e. is 0xFFFFFFFF). -+ * @retval NRF_ERROR_INVALID_PARAM if an invalid command is given. -+*/ -+SVCALL(SD_MBR_COMMAND, uint32_t, sd_mbr_command(sd_mbr_command_t* param)); -+ -+/** @} */ -+ -+#ifdef __cplusplus -+} -+#endif -+#endif // NRF_MBR_H__ -+ -+/** -+ @} -+*/ -diff -u -r -N a/components/softdevice/s132v3/headers_replacement/ble_gap.h b/components/softdevice/s132v3/headers_replacement/ble_gap.h ---- a/components/softdevice/s132v3/headers_replacement/ble_gap.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v3/headers_replacement/ble_gap.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,1919 @@ -+/* -+ * Copyright (c) Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form must reproduce the above copyright notice, this -+ * list of conditions and the following disclaimer in the documentation and/or -+ * other materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other -+ * contributors to this software may be used to endorse or promote products -+ * derived from this software without specific prior written permission. -+ * -+ * 4. This software must only be used in a processor manufactured by Nordic -+ * Semiconductor ASA, or in a processor manufactured by a third party that -+ * is used in combination with a processor manufactured by Nordic Semiconductor. -+ * -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ * -+ */ -+ -+/** -+ @addtogroup BLE_GAP Generic Access Profile (GAP) -+ @{ -+ @brief Definitions and prototypes for the GAP interface. -+ */ -+ -+#ifndef BLE_GAP_H__ -+#define BLE_GAP_H__ -+ -+#include "ble_types.h" -+#include "ble_ranges.h" -+#include "nrf_svc.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/**@addtogroup BLE_GAP_ENUMERATIONS Enumerations -+ * @{ */ -+ -+/**@brief GAP API SVC numbers. -+ */ -+enum BLE_GAP_SVCS -+{ -+ SD_BLE_GAP_ADDR_SET = BLE_GAP_SVC_BASE, /**< Set own Bluetooth Address. */ -+ SD_BLE_GAP_ADDR_GET, /**< Get own Bluetooth Address. */ -+ SD_BLE_GAP_WHITELIST_SET, /**< Set active whitelist. */ -+ SD_BLE_GAP_DEVICE_IDENTITIES_SET, /**< Set device identity list. */ -+ SD_BLE_GAP_PRIVACY_SET, /**< Set Privacy settings*/ -+ SD_BLE_GAP_PRIVACY_GET, /**< Get Privacy settings*/ -+ SD_BLE_GAP_ADV_DATA_SET, /**< Set Advertising Data. */ -+ SD_BLE_GAP_ADV_START, /**< Start Advertising. */ -+ SD_BLE_GAP_ADV_STOP, /**< Stop Advertising. */ -+ SD_BLE_GAP_CONN_PARAM_UPDATE, /**< Connection Parameter Update. */ -+ SD_BLE_GAP_DISCONNECT, /**< Disconnect. */ -+ SD_BLE_GAP_TX_POWER_SET, /**< Set TX Power. */ -+ SD_BLE_GAP_APPEARANCE_SET, /**< Set Appearance. */ -+ SD_BLE_GAP_APPEARANCE_GET, /**< Get Appearance. */ -+ SD_BLE_GAP_PPCP_SET, /**< Set PPCP. */ -+ SD_BLE_GAP_PPCP_GET, /**< Get PPCP. */ -+ SD_BLE_GAP_DEVICE_NAME_SET, /**< Set Device Name. */ -+ SD_BLE_GAP_DEVICE_NAME_GET, /**< Get Device Name. */ -+ SD_BLE_GAP_AUTHENTICATE, /**< Initiate Pairing/Bonding. */ -+ SD_BLE_GAP_SEC_PARAMS_REPLY, /**< Reply with Security Parameters. */ -+ SD_BLE_GAP_AUTH_KEY_REPLY, /**< Reply with an authentication key. */ -+ SD_BLE_GAP_LESC_DHKEY_REPLY, /**< Reply with an LE Secure Connections DHKey. */ -+ SD_BLE_GAP_KEYPRESS_NOTIFY, /**< Notify of a keypress during an authentication procedure. */ -+ SD_BLE_GAP_LESC_OOB_DATA_GET, /**< Get the local LE Secure Connections OOB data. */ -+ SD_BLE_GAP_LESC_OOB_DATA_SET, /**< Set the remote LE Secure Connections OOB data. */ -+ SD_BLE_GAP_ENCRYPT, /**< Initiate encryption procedure. */ -+ SD_BLE_GAP_SEC_INFO_REPLY, /**< Reply with Security Information. */ -+ SD_BLE_GAP_CONN_SEC_GET, /**< Obtain connection security level. */ -+ SD_BLE_GAP_RSSI_START, /**< Start reporting of changes in RSSI. */ -+ SD_BLE_GAP_RSSI_STOP, /**< Stop reporting of changes in RSSI. */ -+ SD_BLE_GAP_SCAN_START, /**< Start Scanning. */ -+ SD_BLE_GAP_SCAN_STOP, /**< Stop Scanning. */ -+ SD_BLE_GAP_CONNECT, /**< Connect. */ -+ SD_BLE_GAP_CONNECT_CANCEL, /**< Cancel ongoing connection procedure. */ -+ SD_BLE_GAP_RSSI_GET, /**< Get the last RSSI sample. */ -+}; -+ -+/**@brief GAP Event IDs. -+ * IDs that uniquely identify an event coming from the stack to the application. -+ */ -+enum BLE_GAP_EVTS -+{ -+ BLE_GAP_EVT_CONNECTED = BLE_GAP_EVT_BASE, /**< Connection established. \n See @ref ble_gap_evt_connected_t. */ -+ BLE_GAP_EVT_DISCONNECTED, /**< Disconnected from peer. \n See @ref ble_gap_evt_disconnected_t. */ -+ BLE_GAP_EVT_CONN_PARAM_UPDATE, /**< Connection Parameters updated. \n See @ref ble_gap_evt_conn_param_update_t. */ -+ BLE_GAP_EVT_SEC_PARAMS_REQUEST, /**< Request to provide security parameters. \n Reply with @ref sd_ble_gap_sec_params_reply. \n See @ref ble_gap_evt_sec_params_request_t. */ -+ BLE_GAP_EVT_SEC_INFO_REQUEST, /**< Request to provide security information. \n Reply with @ref sd_ble_gap_sec_info_reply. \n See @ref ble_gap_evt_sec_info_request_t. */ -+ BLE_GAP_EVT_PASSKEY_DISPLAY, /**< Request to display a passkey to the user. \n In LESC Numeric Comparison, reply with @ref sd_ble_gap_auth_key_reply. \n See @ref ble_gap_evt_passkey_display_t. */ -+ BLE_GAP_EVT_KEY_PRESSED, /**< Notification of a keypress on the remote device.\n See @ref ble_gap_evt_key_pressed_t */ -+ BLE_GAP_EVT_AUTH_KEY_REQUEST, /**< Request to provide an authentication key. \n Reply with @ref sd_ble_gap_auth_key_reply. \n See @ref ble_gap_evt_auth_key_request_t. */ -+ BLE_GAP_EVT_LESC_DHKEY_REQUEST, /**< Request to calculate an LE Secure Connections DHKey. \n Reply with @ref sd_ble_gap_lesc_dhkey_reply. \n See @ref ble_gap_evt_lesc_dhkey_request_t */ -+ BLE_GAP_EVT_AUTH_STATUS, /**< Authentication procedure completed with status. \n See @ref ble_gap_evt_auth_status_t. */ -+ BLE_GAP_EVT_CONN_SEC_UPDATE, /**< Connection security updated. \n See @ref ble_gap_evt_conn_sec_update_t. */ -+ BLE_GAP_EVT_TIMEOUT, /**< Timeout expired. \n See @ref ble_gap_evt_timeout_t. */ -+ BLE_GAP_EVT_RSSI_CHANGED, /**< RSSI report. \n See @ref ble_gap_evt_rssi_changed_t. */ -+ BLE_GAP_EVT_ADV_REPORT, /**< Advertising report. \n See @ref ble_gap_evt_adv_report_t. */ -+ BLE_GAP_EVT_SEC_REQUEST, /**< Security Request. \n See @ref ble_gap_evt_sec_request_t. */ -+ BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST, /**< Connection Parameter Update Request. \n Reply with @ref sd_ble_gap_conn_param_update. \n See @ref ble_gap_evt_conn_param_update_request_t. */ -+ BLE_GAP_EVT_SCAN_REQ_REPORT, /**< Scan request report. \n See @ref ble_gap_evt_scan_req_report_t. */ -+}; -+ -+/**@brief GAP Option IDs. -+ * IDs that uniquely identify a GAP option. -+ */ -+enum BLE_GAP_OPTS -+{ -+ BLE_GAP_OPT_CH_MAP = BLE_GAP_OPT_BASE, /**< Channel Map. @ref ble_gap_opt_ch_map_t */ -+ BLE_GAP_OPT_LOCAL_CONN_LATENCY, /**< Local connection latency. @ref ble_gap_opt_local_conn_latency_t */ -+ BLE_GAP_OPT_PASSKEY, /**< Set passkey. @ref ble_gap_opt_passkey_t */ -+ BLE_GAP_OPT_SCAN_REQ_REPORT, /**< Scan request report. @ref ble_gap_opt_scan_req_report_t */ -+ BLE_GAP_OPT_COMPAT_MODE, /**< Compatibility mode. @ref ble_gap_opt_compat_mode_t */ -+ BLE_GAP_OPT_AUTH_PAYLOAD_TIMEOUT, /**< Set Authenticated payload timeout. @ref ble_gap_opt_auth_payload_timeout_t */ -+ BLE_GAP_OPT_EXT_LEN, /**< Extended length packets. @ref ble_gap_opt_ext_len_t */ -+}; -+ -+/** @} */ -+ -+/**@addtogroup BLE_GAP_DEFINES Defines -+ * @{ */ -+ -+/**@defgroup BLE_ERRORS_GAP SVC return values specific to GAP -+ * @{ */ -+#define BLE_ERROR_GAP_UUID_LIST_MISMATCH (NRF_GAP_ERR_BASE + 0x000) /**< UUID list does not contain an integral number of UUIDs. */ -+#define BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST (NRF_GAP_ERR_BASE + 0x001) /**< Use of Whitelist not permitted with discoverable advertising. */ -+#define BLE_ERROR_GAP_INVALID_BLE_ADDR (NRF_GAP_ERR_BASE + 0x002) /**< The upper two bits of the address do not correspond to the specified address type. */ -+#define BLE_ERROR_GAP_WHITELIST_IN_USE (NRF_GAP_ERR_BASE + 0x003) /**< Attempt to modify the whitelist while already in use by another operation. */ -+#define BLE_ERROR_GAP_DEVICE_IDENTITIES_IN_USE (NRF_GAP_ERR_BASE + 0x004) /**< Attempt to modify the device identity list while already in use by another operation. */ -+#define BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE (NRF_GAP_ERR_BASE + 0x005) /**< The device identity list contains entries with duplicate identity addresses. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_ROLES GAP Roles -+ * @note Not explicitly used in peripheral API, but will be relevant for central API. -+ * @{ */ -+#define BLE_GAP_ROLE_INVALID 0x0 /**< Invalid Role. */ -+#define BLE_GAP_ROLE_PERIPH 0x1 /**< Peripheral Role. */ -+#define BLE_GAP_ROLE_CENTRAL 0x2 /**< Central Role. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_TIMEOUT_SOURCES GAP Timeout sources -+ * @{ */ -+#define BLE_GAP_TIMEOUT_SRC_ADVERTISING 0x00 /**< Advertising timeout. */ -+#define BLE_GAP_TIMEOUT_SRC_SECURITY_REQUEST 0x01 /**< Security request timeout. */ -+#define BLE_GAP_TIMEOUT_SRC_SCAN 0x02 /**< Scanning timeout. */ -+#define BLE_GAP_TIMEOUT_SRC_CONN 0x03 /**< Connection timeout. */ -+#define BLE_GAP_TIMEOUT_SRC_AUTH_PAYLOAD 0x04 /**< Authenticated payload timeout. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_ADDR_TYPES GAP Address types -+ * @{ */ -+#define BLE_GAP_ADDR_TYPE_PUBLIC 0x00 /**< Public address. */ -+#define BLE_GAP_ADDR_TYPE_RANDOM_STATIC 0x01 /**< Random static address. */ -+#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE 0x02 /**< Random private resolvable address. */ -+#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE 0x03 /**< Random private non-resolvable address. */ -+/**@} */ -+ -+ -+/**@brief The default interval in seconds at which a private address is refreshed. */ -+#define BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S (900) /* 15 minutes. */ -+/**@brief The maximum interval in seconds at which a private address can be refreshed. */ -+#define BLE_GAP_MAX_PRIVATE_ADDR_CYCLE_INTERVAL_S (41400) /* 11 hours 30 minutes. */ -+ -+ -+/** @brief BLE address length. */ -+#define BLE_GAP_ADDR_LEN (6) -+ -+ -+/**@defgroup BLE_GAP_PRIVACY_MODES Privacy modes -+ * @{ */ -+#define BLE_GAP_PRIVACY_MODE_OFF 0x00 /**< Device will send and accept its identity address for its own address. */ -+#define BLE_GAP_PRIVACY_MODE_DEVICE_PRIVACY 0x01 /**< Device will send and accept only private addresses for its own address. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_AD_TYPE_DEFINITIONS GAP Advertising and Scan Response Data format -+ * @note Found at https://www.bluetooth.org/Technical/AssignedNumbers/generic_access_profile.htm -+ * @{ */ -+#define BLE_GAP_AD_TYPE_FLAGS 0x01 /**< Flags for discoverability. */ -+#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE 0x02 /**< Partial list of 16 bit service UUIDs. */ -+#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE 0x03 /**< Complete list of 16 bit service UUIDs. */ -+#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_MORE_AVAILABLE 0x04 /**< Partial list of 32 bit service UUIDs. */ -+#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_COMPLETE 0x05 /**< Complete list of 32 bit service UUIDs. */ -+#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_MORE_AVAILABLE 0x06 /**< Partial list of 128 bit service UUIDs. */ -+#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_COMPLETE 0x07 /**< Complete list of 128 bit service UUIDs. */ -+#define BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME 0x08 /**< Short local device name. */ -+#define BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME 0x09 /**< Complete local device name. */ -+#define BLE_GAP_AD_TYPE_TX_POWER_LEVEL 0x0A /**< Transmit power level. */ -+#define BLE_GAP_AD_TYPE_CLASS_OF_DEVICE 0x0D /**< Class of device. */ -+#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C 0x0E /**< Simple Pairing Hash C. */ -+#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R 0x0F /**< Simple Pairing Randomizer R. */ -+#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_TK_VALUE 0x10 /**< Security Manager TK Value. */ -+#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_OOB_FLAGS 0x11 /**< Security Manager Out Of Band Flags. */ -+#define BLE_GAP_AD_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE 0x12 /**< Slave Connection Interval Range. */ -+#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_16BIT 0x14 /**< List of 16-bit Service Solicitation UUIDs. */ -+#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_128BIT 0x15 /**< List of 128-bit Service Solicitation UUIDs. */ -+#define BLE_GAP_AD_TYPE_SERVICE_DATA 0x16 /**< Service Data - 16-bit UUID. */ -+#define BLE_GAP_AD_TYPE_PUBLIC_TARGET_ADDRESS 0x17 /**< Public Target Address. */ -+#define BLE_GAP_AD_TYPE_RANDOM_TARGET_ADDRESS 0x18 /**< Random Target Address. */ -+#define BLE_GAP_AD_TYPE_APPEARANCE 0x19 /**< Appearance. */ -+#define BLE_GAP_AD_TYPE_ADVERTISING_INTERVAL 0x1A /**< Advertising Interval. */ -+#define BLE_GAP_AD_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS 0x1B /**< LE Bluetooth Device Address. */ -+#define BLE_GAP_AD_TYPE_LE_ROLE 0x1C /**< LE Role. */ -+#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C256 0x1D /**< Simple Pairing Hash C-256. */ -+#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R256 0x1E /**< Simple Pairing Randomizer R-256. */ -+#define BLE_GAP_AD_TYPE_SERVICE_DATA_32BIT_UUID 0x20 /**< Service Data - 32-bit UUID. */ -+#define BLE_GAP_AD_TYPE_SERVICE_DATA_128BIT_UUID 0x21 /**< Service Data - 128-bit UUID. */ -+#define BLE_GAP_AD_TYPE_URI 0x24 /**< URI */ -+#define BLE_GAP_AD_TYPE_3D_INFORMATION_DATA 0x3D /**< 3D Information Data. */ -+#define BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA 0xFF /**< Manufacturer Specific Data. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_ADV_FLAGS GAP Advertisement Flags -+ * @{ */ -+#define BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE (0x01) /**< LE Limited Discoverable Mode. */ -+#define BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE (0x02) /**< LE General Discoverable Mode. */ -+#define BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED (0x04) /**< BR/EDR not supported. */ -+#define BLE_GAP_ADV_FLAG_LE_BR_EDR_CONTROLLER (0x08) /**< Simultaneous LE and BR/EDR, Controller. */ -+#define BLE_GAP_ADV_FLAG_LE_BR_EDR_HOST (0x10) /**< Simultaneous LE and BR/EDR, Host. */ -+#define BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE (BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE Limited Discoverable Mode, BR/EDR not supported. */ -+#define BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE (BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE General Discoverable Mode, BR/EDR not supported. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_ADV_INTERVALS GAP Advertising interval max and min -+ * @{ */ -+#define BLE_GAP_ADV_INTERVAL_MIN 0x0020 /**< Minimum Advertising interval in 625 us units, i.e. 20 ms. */ -+#define BLE_GAP_ADV_NONCON_INTERVAL_MIN 0x00A0 /**< Minimum Advertising interval in 625 us units for non connectable mode, i.e. 100 ms. */ -+#define BLE_GAP_ADV_INTERVAL_MAX 0x4000 /**< Maximum Advertising interval in 625 us units, i.e. 10.24 s. */ -+ /**@} */ -+ -+ -+/**@defgroup BLE_GAP_SCAN_INTERVALS GAP Scan interval max and min -+ * @{ */ -+#define BLE_GAP_SCAN_INTERVAL_MIN 0x0004 /**< Minimum Scan interval in 625 us units, i.e. 2.5 ms. */ -+#define BLE_GAP_SCAN_INTERVAL_MAX 0x4000 /**< Maximum Scan interval in 625 us units, i.e. 10.24 s. */ -+ /** @} */ -+ -+ -+/**@defgroup BLE_GAP_SCAN_WINDOW GAP Scan window max and min -+ * @{ */ -+#define BLE_GAP_SCAN_WINDOW_MIN 0x0004 /**< Minimum Scan window in 625 us units, i.e. 2.5 ms. */ -+#define BLE_GAP_SCAN_WINDOW_MAX 0x4000 /**< Maximum Scan window in 625 us units, i.e. 10.24 s. */ -+ /** @} */ -+ -+ -+/**@defgroup BLE_GAP_SCAN_TIMEOUT GAP Scan timeout max and min -+ * @{ */ -+#define BLE_GAP_SCAN_TIMEOUT_MIN 0x0001 /**< Minimum Scan timeout in seconds. */ -+#define BLE_GAP_SCAN_TIMEOUT_MAX 0xFFFF /**< Maximum Scan timeout in seconds. */ -+ /** @} */ -+ -+ -+/**@brief Maximum size of advertising data in octets. */ -+#define BLE_GAP_ADV_MAX_SIZE (31) -+ -+ -+/**@defgroup BLE_GAP_ADV_TYPES GAP Advertising types -+ * @{ */ -+#define BLE_GAP_ADV_TYPE_ADV_IND 0x00 /**< Connectable undirected. */ -+#define BLE_GAP_ADV_TYPE_ADV_DIRECT_IND 0x01 /**< Connectable directed. */ -+#define BLE_GAP_ADV_TYPE_ADV_SCAN_IND 0x02 /**< Scannable undirected. */ -+#define BLE_GAP_ADV_TYPE_ADV_NONCONN_IND 0x03 /**< Non connectable undirected. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_ADV_FILTER_POLICIES GAP Advertising filter policies -+ * @{ */ -+#define BLE_GAP_ADV_FP_ANY 0x00 /**< Allow scan requests and connect requests from any device. */ -+#define BLE_GAP_ADV_FP_FILTER_SCANREQ 0x01 /**< Filter scan requests with whitelist. */ -+#define BLE_GAP_ADV_FP_FILTER_CONNREQ 0x02 /**< Filter connect requests with whitelist. */ -+#define BLE_GAP_ADV_FP_FILTER_BOTH 0x03 /**< Filter both scan and connect requests with whitelist. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_ADV_TIMEOUT_VALUES GAP Advertising timeout values -+ * @{ */ -+#define BLE_GAP_ADV_TIMEOUT_LIMITED_MAX (180) /**< Maximum advertising time in limited discoverable mode (TGAP(lim_adv_timeout) = 180s). */ -+#define BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED (0) /**< Unlimited advertising in general discoverable mode. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_DISC_MODES GAP Discovery modes -+ * @{ */ -+#define BLE_GAP_DISC_MODE_NOT_DISCOVERABLE 0x00 /**< Not discoverable discovery Mode. */ -+#define BLE_GAP_DISC_MODE_LIMITED 0x01 /**< Limited Discovery Mode. */ -+#define BLE_GAP_DISC_MODE_GENERAL 0x02 /**< General Discovery Mode. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_IO_CAPS GAP IO Capabilities -+ * @{ */ -+#define BLE_GAP_IO_CAPS_DISPLAY_ONLY 0x00 /**< Display Only. */ -+#define BLE_GAP_IO_CAPS_DISPLAY_YESNO 0x01 /**< Display and Yes/No entry. */ -+#define BLE_GAP_IO_CAPS_KEYBOARD_ONLY 0x02 /**< Keyboard Only. */ -+#define BLE_GAP_IO_CAPS_NONE 0x03 /**< No I/O capabilities. */ -+#define BLE_GAP_IO_CAPS_KEYBOARD_DISPLAY 0x04 /**< Keyboard and Display. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_AUTH_KEY_TYPES GAP Authentication Key Types -+ * @{ */ -+#define BLE_GAP_AUTH_KEY_TYPE_NONE 0x00 /**< No key (may be used to reject). */ -+#define BLE_GAP_AUTH_KEY_TYPE_PASSKEY 0x01 /**< 6-digit Passkey. */ -+#define BLE_GAP_AUTH_KEY_TYPE_OOB 0x02 /**< Out Of Band data. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_KP_NOT_TYPES GAP Keypress Notification Types -+ * @{ */ -+#define BLE_GAP_KP_NOT_TYPE_PASSKEY_START 0x00 /**< Passkey entry started. */ -+#define BLE_GAP_KP_NOT_TYPE_PASSKEY_DIGIT_IN 0x01 /**< Passkey digit entered. */ -+#define BLE_GAP_KP_NOT_TYPE_PASSKEY_DIGIT_OUT 0x02 /**< Passkey digit erased. */ -+#define BLE_GAP_KP_NOT_TYPE_PASSKEY_CLEAR 0x03 /**< Passkey cleared. */ -+#define BLE_GAP_KP_NOT_TYPE_PASSKEY_END 0x04 /**< Passkey entry completed. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_SEC_STATUS GAP Security status -+ * @{ */ -+#define BLE_GAP_SEC_STATUS_SUCCESS 0x00 /**< Procedure completed with success. */ -+#define BLE_GAP_SEC_STATUS_TIMEOUT 0x01 /**< Procedure timed out. */ -+#define BLE_GAP_SEC_STATUS_PDU_INVALID 0x02 /**< Invalid PDU received. */ -+#define BLE_GAP_SEC_STATUS_RFU_RANGE1_BEGIN 0x03 /**< Reserved for Future Use range #1 begin. */ -+#define BLE_GAP_SEC_STATUS_RFU_RANGE1_END 0x80 /**< Reserved for Future Use range #1 end. */ -+#define BLE_GAP_SEC_STATUS_PASSKEY_ENTRY_FAILED 0x81 /**< Passkey entry failed (user cancelled or other). */ -+#define BLE_GAP_SEC_STATUS_OOB_NOT_AVAILABLE 0x82 /**< Out of Band Key not available. */ -+#define BLE_GAP_SEC_STATUS_AUTH_REQ 0x83 /**< Authentication requirements not met. */ -+#define BLE_GAP_SEC_STATUS_CONFIRM_VALUE 0x84 /**< Confirm value failed. */ -+#define BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP 0x85 /**< Pairing not supported. */ -+#define BLE_GAP_SEC_STATUS_ENC_KEY_SIZE 0x86 /**< Encryption key size. */ -+#define BLE_GAP_SEC_STATUS_SMP_CMD_UNSUPPORTED 0x87 /**< Unsupported SMP command. */ -+#define BLE_GAP_SEC_STATUS_UNSPECIFIED 0x88 /**< Unspecified reason. */ -+#define BLE_GAP_SEC_STATUS_REPEATED_ATTEMPTS 0x89 /**< Too little time elapsed since last attempt. */ -+#define BLE_GAP_SEC_STATUS_INVALID_PARAMS 0x8A /**< Invalid parameters. */ -+#define BLE_GAP_SEC_STATUS_DHKEY_FAILURE 0x8B /**< DHKey check failure. */ -+#define BLE_GAP_SEC_STATUS_NUM_COMP_FAILURE 0x8C /**< Numeric Comparison failure. */ -+#define BLE_GAP_SEC_STATUS_BR_EDR_IN_PROG 0x8D /**< BR/EDR pairing in progress. */ -+#define BLE_GAP_SEC_STATUS_X_TRANS_KEY_DISALLOWED 0x8E /**< BR/EDR Link Key cannot be used for LE keys. */ -+#define BLE_GAP_SEC_STATUS_RFU_RANGE2_BEGIN 0x8F /**< Reserved for Future Use range #2 begin. */ -+#define BLE_GAP_SEC_STATUS_RFU_RANGE2_END 0xFF /**< Reserved for Future Use range #2 end. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_SEC_STATUS_SOURCES GAP Security status sources -+ * @{ */ -+#define BLE_GAP_SEC_STATUS_SOURCE_LOCAL 0x00 /**< Local failure. */ -+#define BLE_GAP_SEC_STATUS_SOURCE_REMOTE 0x01 /**< Remote failure. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_CP_LIMITS GAP Connection Parameters Limits -+ * @{ */ -+#define BLE_GAP_CP_MIN_CONN_INTVL_NONE 0xFFFF /**< No new minimum connection interval specified in connect parameters. */ -+#define BLE_GAP_CP_MIN_CONN_INTVL_MIN 0x0006 /**< Lowest minimum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ -+#define BLE_GAP_CP_MIN_CONN_INTVL_MAX 0x0C80 /**< Highest minimum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ -+#define BLE_GAP_CP_MAX_CONN_INTVL_NONE 0xFFFF /**< No new maximum connection interval specified in connect parameters. */ -+#define BLE_GAP_CP_MAX_CONN_INTVL_MIN 0x0006 /**< Lowest maximum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ -+#define BLE_GAP_CP_MAX_CONN_INTVL_MAX 0x0C80 /**< Highest maximum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ -+#define BLE_GAP_CP_SLAVE_LATENCY_MAX 0x01F3 /**< Highest slave latency permitted, in connection events. */ -+#define BLE_GAP_CP_CONN_SUP_TIMEOUT_NONE 0xFFFF /**< No new supervision timeout specified in connect parameters. */ -+#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MIN 0x000A /**< Lowest supervision timeout permitted, in units of 10 ms, i.e. 100 ms. */ -+#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MAX 0x0C80 /**< Highest supervision timeout permitted, in units of 10 ms, i.e. 32 s. */ -+/**@} */ -+ -+ -+/**@brief GAP device name defines. */ -+#define BLE_GAP_DEVNAME_DEFAULT "nRF5x" /**< Default device name value. */ -+#define BLE_GAP_DEVNAME_DEFAULT_LEN 31 /**< Default number of octets in device name. */ -+#define BLE_GAP_DEVNAME_MAX_LEN 248 /**< Maximum number of octets in device name. */ -+ -+ -+/**@brief Disable RSSI events for connections */ -+#define BLE_GAP_RSSI_THRESHOLD_INVALID 0xFF -+ -+ -+/**@defgroup BLE_GAP_CONN_SEC_MODE_SET_MACROS GAP attribute security requirement setters -+ * -+ * See @ref ble_gap_conn_sec_mode_t. -+ * @{ */ -+/**@brief Set sec_mode pointed to by ptr to have no access rights.*/ -+#define BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(ptr) do {(ptr)->sm = 0; (ptr)->lv = 0;} while (0) -+/**@brief Set sec_mode pointed to by ptr to require no protection, open link.*/ -+#define BLE_GAP_CONN_SEC_MODE_SET_OPEN(ptr) do {(ptr)->sm = 1; (ptr)->lv = 1;} while (0) -+/**@brief Set sec_mode pointed to by ptr to require encryption, but no MITM protection.*/ -+#define BLE_GAP_CONN_SEC_MODE_SET_ENC_NO_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 2;} while (0) -+/**@brief Set sec_mode pointed to by ptr to require encryption and MITM protection.*/ -+#define BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 3;} while (0) -+/**@brief Set sec_mode pointed to by ptr to require LESC encryption and MITM protection.*/ -+#define BLE_GAP_CONN_SEC_MODE_SET_LESC_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 4;} while (0) -+/**@brief Set sec_mode pointed to by ptr to require signing or encryption, no MITM protection needed.*/ -+#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_NO_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 1;} while (0) -+/**@brief Set sec_mode pointed to by ptr to require signing or encryption with MITM protection.*/ -+#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_WITH_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 2;} while (0) -+/**@} */ -+ -+ -+/**@brief GAP Security Random Number Length. */ -+#define BLE_GAP_SEC_RAND_LEN 8 -+ -+ -+/**@brief GAP Security Key Length. */ -+#define BLE_GAP_SEC_KEY_LEN 16 -+ -+ -+/**@brief GAP LE Secure Connections Elliptic Curve Diffie-Hellman P-256 Public Key Length. */ -+#define BLE_GAP_LESC_P256_PK_LEN 64 -+ -+ -+/**@brief GAP LE Secure Connections Elliptic Curve Diffie-Hellman DHKey Length. */ -+#define BLE_GAP_LESC_DHKEY_LEN 32 -+ -+ -+/**@brief GAP Passkey Length. */ -+#define BLE_GAP_PASSKEY_LEN 6 -+ -+ -+/**@brief Maximum amount of addresses in the whitelist. */ -+#define BLE_GAP_WHITELIST_ADDR_MAX_COUNT (8) -+ -+ -+/**@brief Maximum amount of identities in the device identities list. */ -+#define BLE_GAP_DEVICE_IDENTITIES_MAX_COUNT (8) -+ -+ -+/**@defgroup GAP_SEC_MODES GAP Security Modes -+ * @{ */ -+#define BLE_GAP_SEC_MODE 0x00 /**< No key (may be used to reject). */ -+/**@} */ -+/** @} */ -+ -+ -+/**@addtogroup BLE_GAP_STRUCTURES Structures -+ * @{ */ -+ -+/**@brief Bluetooth Low Energy address. */ -+typedef struct -+{ -+ uint8_t addr_id_peer : 1; /**< Only valid for peer addresses. -+ Reference to peer in device identities list (as set with @ref sd_ble_gap_device_identities_set) when peer is using privacy. */ -+ uint8_t addr_type : 7; /**< See @ref BLE_GAP_ADDR_TYPES. */ -+ uint8_t addr[BLE_GAP_ADDR_LEN]; /**< 48-bit address, LSB format. */ -+} ble_gap_addr_t; -+ -+ -+/**@brief GAP connection parameters. -+ * -+ * @note When ble_conn_params_t is received in an event, both min_conn_interval and -+ * max_conn_interval will be equal to the connection interval set by the central. -+ * -+ * @note If both conn_sup_timeout and max_conn_interval are specified, then the following constraint applies: -+ * conn_sup_timeout * 4 > (1 + slave_latency) * max_conn_interval -+ * that corresponds to the following Bluetooth Spec requirement: -+ * The Supervision_Timeout in milliseconds shall be larger than -+ * (1 + Conn_Latency) * Conn_Interval_Max * 2, where Conn_Interval_Max is given in milliseconds. -+ */ -+typedef struct -+{ -+ uint16_t min_conn_interval; /**< Minimum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ -+ uint16_t max_conn_interval; /**< Maximum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ -+ uint16_t slave_latency; /**< Slave Latency in number of connection events, see @ref BLE_GAP_CP_LIMITS.*/ -+ uint16_t conn_sup_timeout; /**< Connection Supervision Timeout in 10 ms units, see @ref BLE_GAP_CP_LIMITS.*/ -+} ble_gap_conn_params_t; -+ -+ -+/**@brief GAP connection security modes. -+ * -+ * Security Mode 0 Level 0: No access permissions at all (this level is not defined by the Bluetooth Core specification).\n -+ * Security Mode 1 Level 1: No security is needed (aka open link).\n -+ * Security Mode 1 Level 2: Encrypted link required, MITM protection not necessary.\n -+ * Security Mode 1 Level 3: MITM protected encrypted link required.\n -+ * Security Mode 1 Level 4: LESC MITM protected encrypted link required.\n -+ * Security Mode 2 Level 1: Signing or encryption required, MITM protection not necessary.\n -+ * Security Mode 2 Level 2: MITM protected signing required, unless link is MITM protected encrypted.\n -+ */ -+typedef struct -+{ -+ uint8_t sm : 4; /**< Security Mode (1 or 2), 0 for no permissions at all. */ -+ uint8_t lv : 4; /**< Level (1, 2, 3 or 4), 0 for no permissions at all. */ -+ -+} ble_gap_conn_sec_mode_t; -+ -+ -+/**@brief GAP connection security status.*/ -+typedef struct -+{ -+ ble_gap_conn_sec_mode_t sec_mode; /**< Currently active security mode for this connection.*/ -+ uint8_t encr_key_size; /**< Length of currently active encryption key, 7 to 16 octets (only applicable for bonding procedures). */ -+} ble_gap_conn_sec_t; -+ -+ -+/** -+ * @brief Device name and its properties -+ * @note If @ref max_len is more than @ref BLE_GAP_DEVNAME_DEFAULT_LEN and vloc is set to @ref BLE_GATTS_VLOC_STACK, the attribute table size must be increased to have room for the longer device name (see @ref ble_gatts_enable_params_t). -+ */ -+typedef struct -+{ -+ ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ -+ uint8_t vloc:2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ -+ uint8_t *p_value; /**< Pointer to where the value (device name) is stored or will be stored.*/ -+ uint16_t current_len; /**< Current length in bytes of the memory pointed to by p_value.*/ -+ uint16_t max_len; /**< Maximum length in bytes of the memory pointed to by p_value.*/ -+} ble_gap_device_name_t; -+ -+ -+/** -+ * @brief BLE GAP initialization parameters. -+ */ -+typedef struct -+{ -+ uint8_t periph_conn_count; /**< Number of connections acting as a peripheral */ -+ uint8_t central_conn_count; /**< Number of connections acting as a central */ -+ uint8_t central_sec_count; /**< Number of SMP instances for all connections acting as a central. */ -+ ble_gap_device_name_t const *p_device_name; /**< Pointer to device name instance. If NULL, @ref sd_ble_enable() will set the device name to @ref BLE_GAP_DEVNAME_DEFAULT. */ -+} ble_gap_enable_params_t; -+ -+ -+/**@brief Identity Resolving Key. */ -+typedef struct -+{ -+ uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Array containing IRK. */ -+} ble_gap_irk_t; -+ -+ -+/**@brief Channel mask for RF channels used in advertising. */ -+typedef struct -+{ -+ uint8_t ch_37_off : 1; /**< Setting this bit to 1 will turn off advertising on channel 37 */ -+ uint8_t ch_38_off : 1; /**< Setting this bit to 1 will turn off advertising on channel 38 */ -+ uint8_t ch_39_off : 1; /**< Setting this bit to 1 will turn off advertising on channel 39 */ -+} ble_gap_adv_ch_mask_t; -+ -+ -+/**@brief GAP advertising parameters. */ -+typedef struct -+{ -+ uint8_t type; /**< See @ref BLE_GAP_ADV_TYPES. */ -+ ble_gap_addr_t const *p_peer_addr; /**< Address of a known peer. -+ - When privacy is enabled and the local device use @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE addresses, the device identity list is searched for a matching -+ entry. If the local IRK for that device identity is set, the local IRK for that device will be used to generate the advertiser address field in the advertise packet. -+ - If type is @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND, this must be set to the targeted initiator. If the initiator is in the device identity list, -+ the peer IRK for that device will be used to generate the initiator address field in the ADV_DIRECT_IND packet. */ -+ uint8_t fp; /**< Filter Policy, see @ref BLE_GAP_ADV_FILTER_POLICIES. */ -+ uint16_t interval; /**< Advertising interval between 0x0020 and 0x4000 in 0.625 ms units (20ms to 10.24s), see @ref BLE_GAP_ADV_INTERVALS. -+ - If type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND, this parameter must be set to 0 for high duty cycle directed advertising. -+ - If type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND, set @ref BLE_GAP_ADV_INTERVAL_MIN <= interval <= @ref BLE_GAP_ADV_INTERVAL_MAX for low duty cycle advertising.*/ -+ uint16_t timeout; /**< Advertising timeout between 0x0001 and 0x3FFF in seconds, 0x0000 disables timeout. See also @ref BLE_GAP_ADV_TIMEOUT_VALUES. If type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND, this parameter must be set to 0 for High duty cycle directed advertising. */ -+ ble_gap_adv_ch_mask_t channel_mask; /**< Advertising channel mask. See @ref ble_gap_adv_ch_mask_t. */ -+} ble_gap_adv_params_t; -+ -+ -+/**@brief GAP scanning parameters. */ -+typedef struct -+{ -+ uint8_t active : 1; /**< If 1, perform active scanning (scan requests). */ -+ uint8_t use_whitelist : 1; /**< If 1, filter advertisers using current active whitelist. */ -+ uint8_t adv_dir_report : 1; /**< If 1, also report directed advertisements where the initiator field is set to a private resolvable address, -+ even if the address did not resolve to an entry in the device identity list. A report will be generated -+ even if the peer is not in the whitelist. */ -+ uint16_t interval; /**< Scan interval between 0x0004 and 0x4000 in 0.625ms units (2.5ms to 10.24s). */ -+ uint16_t window; /**< Scan window between 0x0004 and 0x4000 in 0.625ms units (2.5ms to 10.24s). */ -+ uint16_t timeout; /**< Scan timeout between 0x0001 and 0xFFFF in seconds, 0x0000 disables timeout. */ -+} ble_gap_scan_params_t; -+ -+ -+/**@brief Device Privacy. -+ * -+ * The privacy feature provides a way for the device to avoid being tracked over a period of time. -+ * The privacy feature, when enabled, hides the local device identity and replaces it with a private address -+ * that is automatically refreshed at a specified interval. -+ * -+ * If a device still wants to be recognized by other peers, it needs to share it's Identity Resolving Key (IRK). -+ * With this key, a device can generate a random private address that can only be recognized by peers in possession of that key, -+ * and devices can establish connections without revealing their real identities. -+ * -+ * @note If the device IRK is updated, the new IRK becomes the one to be distributed in all -+ * bonding procedures performed after @ref sd_ble_gap_privacy_set returns. -+ * The IRK distributed during bonding procedure is the device IRK that is active when @ref sd_ble_gap_sec_params_reply is called. -+ */ -+typedef struct -+{ -+ uint8_t privacy_mode; /**< Privacy mode, see @ref BLE_GAP_PRIVACY_MODES. Default is @ref BLE_GAP_PRIVACY_MODE_OFF. */ -+ uint8_t private_addr_type; /**< The private address type must be either @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE or @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE. */ -+ uint16_t private_addr_cycle_s; /**< Private address cycle interval in seconds. Providing an address cycle value of 0 will use the default value defined by @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S. */ -+ ble_gap_irk_t *p_device_irk; /**< When used as input, pointer to IRK structure that will be used as the default IRK. If NULL, the device default IRK will be used. -+ When used as output, pointer to IRK structure where the current default IRK will be written to. If NULL, this argument is ignored. -+ By default, the default IRK is used to generate random private resolvable addresses for the local device unless instructed otherwise. */ -+} ble_gap_privacy_params_t; -+ -+ -+/** @brief Keys that can be exchanged during a bonding procedure. */ -+typedef struct -+{ -+ uint8_t enc : 1; /**< Long Term Key and Master Identification. */ -+ uint8_t id : 1; /**< Identity Resolving Key and Identity Address Information. */ -+ uint8_t sign : 1; /**< Connection Signature Resolving Key. */ -+ uint8_t link : 1; /**< Derive the Link Key from the LTK. */ -+} ble_gap_sec_kdist_t; -+ -+ -+/**@brief GAP security parameters. */ -+typedef struct -+{ -+ uint8_t bond : 1; /**< Perform bonding. */ -+ uint8_t mitm : 1; /**< Enable Man In The Middle protection. */ -+ uint8_t lesc : 1; /**< Enable LE Secure Connection pairing. */ -+ uint8_t keypress : 1; /**< Enable generation of keypress notifications. */ -+ uint8_t io_caps : 3; /**< IO capabilities, see @ref BLE_GAP_IO_CAPS. */ -+ uint8_t oob : 1; /**< Out Of Band data available. */ -+ uint8_t min_key_size; /**< Minimum encryption key size in octets between 7 and 16. If 0 then not applicable in this instance. */ -+ uint8_t max_key_size; /**< Maximum encryption key size in octets between min_key_size and 16. */ -+ ble_gap_sec_kdist_t kdist_own; /**< Key distribution bitmap: keys that the local device will distribute. */ -+ ble_gap_sec_kdist_t kdist_peer; /**< Key distribution bitmap: keys that the remote device will distribute. */ -+} ble_gap_sec_params_t; -+ -+ -+/**@brief GAP Encryption Information. */ -+typedef struct -+{ -+ uint8_t ltk[BLE_GAP_SEC_KEY_LEN]; /**< Long Term Key. */ -+ uint8_t lesc : 1; /**< Key generated using LE Secure Connections. */ -+ uint8_t auth : 1; /**< Authenticated Key. */ -+ uint8_t ltk_len : 6; /**< LTK length in octets. */ -+} ble_gap_enc_info_t; -+ -+ -+/**@brief GAP Master Identification. */ -+typedef struct -+{ -+ uint16_t ediv; /**< Encrypted Diversifier. */ -+ uint8_t rand[BLE_GAP_SEC_RAND_LEN]; /**< Random Number. */ -+} ble_gap_master_id_t; -+ -+ -+/**@brief GAP Signing Information. */ -+typedef struct -+{ -+ uint8_t csrk[BLE_GAP_SEC_KEY_LEN]; /**< Connection Signature Resolving Key. */ -+} ble_gap_sign_info_t; -+ -+ -+/**@brief GAP LE Secure Connections P-256 Public Key. */ -+typedef struct -+{ -+ uint8_t pk[BLE_GAP_LESC_P256_PK_LEN]; /**< LE Secure Connections Elliptic Curve Diffie-Hellman P-256 Public Key. Stored in the standard SMP protocol format: {X,Y} both in little-endian. */ -+} ble_gap_lesc_p256_pk_t; -+ -+ -+/**@brief GAP LE Secure Connections DHKey. */ -+typedef struct -+{ -+ uint8_t key[BLE_GAP_LESC_DHKEY_LEN]; /**< LE Secure Connections Elliptic Curve Diffie-Hellman Key. Stored in little-endian. */ -+} ble_gap_lesc_dhkey_t; -+ -+ -+/**@brief GAP LE Secure Connections OOB data. */ -+typedef struct -+{ -+ ble_gap_addr_t addr; /**< Bluetooth address of the device. */ -+ uint8_t r[BLE_GAP_SEC_KEY_LEN]; /**< Random Number. */ -+ uint8_t c[BLE_GAP_SEC_KEY_LEN]; /**< Confirm Value. */ -+} ble_gap_lesc_oob_data_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_CONNECTED. */ -+typedef struct -+{ -+ ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 -+ and the address is the device's identity address. */ -+ uint8_t role; /**< BLE role for this connection, see @ref BLE_GAP_ROLES */ -+ ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ -+} ble_gap_evt_connected_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_DISCONNECTED. */ -+typedef struct -+{ -+ uint8_t reason; /**< HCI error code, see @ref BLE_HCI_STATUS_CODES. */ -+} ble_gap_evt_disconnected_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_CONN_PARAM_UPDATE. */ -+typedef struct -+{ -+ ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ -+} ble_gap_evt_conn_param_update_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST. */ -+typedef struct -+{ -+ ble_gap_sec_params_t peer_params; /**< Initiator Security Parameters. */ -+} ble_gap_evt_sec_params_request_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_SEC_INFO_REQUEST. */ -+typedef struct -+{ -+ ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ -+ ble_gap_master_id_t master_id; /**< Master Identification for LTK lookup. */ -+ uint8_t enc_info : 1; /**< If 1, Encryption Information required. */ -+ uint8_t id_info : 1; /**< If 1, Identity Information required. */ -+ uint8_t sign_info : 1; /**< If 1, Signing Information required. */ -+} ble_gap_evt_sec_info_request_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_PASSKEY_DISPLAY. */ -+typedef struct -+{ -+ uint8_t passkey[BLE_GAP_PASSKEY_LEN]; /**< 6-digit passkey in ASCII ('0'-'9' digits only). */ -+ uint8_t match_request : 1; /**< If 1 requires the application to report the match using @ref sd_ble_gap_auth_key_reply -+ with either @ref BLE_GAP_AUTH_KEY_TYPE_NONE if there is no match or -+ @ref BLE_GAP_AUTH_KEY_TYPE_PASSKEY if there is a match. */ -+} ble_gap_evt_passkey_display_t; -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_KEY_PRESSED. */ -+typedef struct -+{ -+ uint8_t kp_not; /**< Keypress notification type, see @ref BLE_GAP_KP_NOT_TYPES. */ -+} ble_gap_evt_key_pressed_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_AUTH_KEY_REQUEST. */ -+typedef struct -+{ -+ uint8_t key_type; /**< See @ref BLE_GAP_AUTH_KEY_TYPES. */ -+} ble_gap_evt_auth_key_request_t; -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST. */ -+typedef struct -+{ -+ ble_gap_lesc_p256_pk_t *p_pk_peer; /**< LE Secure Connections remote P-256 Public Key. This will point to the application-supplied memory -+ inside the keyset during the call to @ref sd_ble_gap_sec_params_reply. */ -+ uint8_t oobd_req :1; /**< LESC OOB data required. A call to @ref sd_ble_gap_lesc_oob_data_set is required to complete the procedure. */ -+} ble_gap_evt_lesc_dhkey_request_t; -+ -+ -+/**@brief Security levels supported. -+ * @note See Bluetooth Specification Version 4.2 Volume 3, Part C, Chapter 10, Section 10.2.1. -+*/ -+typedef struct -+{ -+ uint8_t lv1 : 1; /**< If 1: Level 1 is supported. */ -+ uint8_t lv2 : 1; /**< If 1: Level 2 is supported. */ -+ uint8_t lv3 : 1; /**< If 1: Level 3 is supported. */ -+ uint8_t lv4 : 1; /**< If 1: Level 4 is supported. */ -+} ble_gap_sec_levels_t; -+ -+ -+/**@brief Encryption Key. */ -+typedef struct -+{ -+ ble_gap_enc_info_t enc_info; /**< Encryption Information. */ -+ ble_gap_master_id_t master_id; /**< Master Identification. */ -+} ble_gap_enc_key_t; -+ -+ -+/**@brief Identity Key. */ -+typedef struct -+{ -+ ble_gap_irk_t id_info; /**< Identity Resolving Key. */ -+ ble_gap_addr_t id_addr_info; /**< Identity Address. */ -+} ble_gap_id_key_t; -+ -+ -+/**@brief Security Keys. */ -+typedef struct -+{ -+ ble_gap_enc_key_t *p_enc_key; /**< Encryption Key, or NULL. */ -+ ble_gap_id_key_t *p_id_key; /**< Identity Key, or NULL. */ -+ ble_gap_sign_info_t *p_sign_key; /**< Signing Key, or NULL. */ -+ ble_gap_lesc_p256_pk_t *p_pk; /**< LE Secure Connections P-256 Public Key. When in debug mode the application must use the value defined -+ in the Core Bluetooth Specification v4.2 Vol.3, Part H, Section 2.3.5.6.1 */ -+} ble_gap_sec_keys_t; -+ -+ -+/**@brief Security key set for both local and peer keys. */ -+typedef struct -+{ -+ ble_gap_sec_keys_t keys_own; /**< Keys distributed by the local device. For LE Secure Connections the encryption key will be generated locally and will always be stored if bonding. */ -+ ble_gap_sec_keys_t keys_peer; /**< Keys distributed by the remote device. For LE Secure Connections, p_enc_key must always be NULL. */ -+} ble_gap_sec_keyset_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_AUTH_STATUS. */ -+typedef struct -+{ -+ uint8_t auth_status; /**< Authentication status, see @ref BLE_GAP_SEC_STATUS. */ -+ uint8_t error_src : 2; /**< On error, source that caused the failure, see @ref BLE_GAP_SEC_STATUS_SOURCES. */ -+ uint8_t bonded : 1; /**< Procedure resulted in a bond. */ -+ ble_gap_sec_levels_t sm1_levels; /**< Levels supported in Security Mode 1. */ -+ ble_gap_sec_levels_t sm2_levels; /**< Levels supported in Security Mode 2. */ -+ ble_gap_sec_kdist_t kdist_own; /**< Bitmap stating which keys were exchanged (distributed) by the local device. If bonding with LE Secure Connections, the enc bit will be always set. */ -+ ble_gap_sec_kdist_t kdist_peer; /**< Bitmap stating which keys were exchanged (distributed) by the remote device. If bonding with LE Secure Connections, the enc bit will never be set. */ -+} ble_gap_evt_auth_status_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_CONN_SEC_UPDATE. */ -+typedef struct -+{ -+ ble_gap_conn_sec_t conn_sec; /**< Connection security level. */ -+} ble_gap_evt_conn_sec_update_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_TIMEOUT. */ -+typedef struct -+{ -+ uint8_t src; /**< Source of timeout event, see @ref BLE_GAP_TIMEOUT_SOURCES. */ -+} ble_gap_evt_timeout_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_RSSI_CHANGED. */ -+typedef struct -+{ -+ int8_t rssi; /**< Received Signal Strength Indication in dBm. */ -+} ble_gap_evt_rssi_changed_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_ADV_REPORT. */ -+typedef struct -+{ -+ ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 -+ and the address is the device's identity address. */ -+ ble_gap_addr_t direct_addr; /**< Set when the scanner is unable to resolve the private resolvable address of the initiator -+ field of a directed advertisement packet and the scanner has been enabled to report this in @ref ble_gap_scan_params_t::adv_dir_report. */ -+ int8_t rssi; /**< Received Signal Strength Indication in dBm. */ -+ uint8_t scan_rsp : 1; /**< If 1, the report corresponds to a scan response and the type field may be ignored. */ -+ uint8_t type : 2; /**< See @ref BLE_GAP_ADV_TYPES. Only valid if the scan_rsp field is 0. */ -+ uint8_t dlen : 5; /**< Advertising or scan response data length. */ -+ uint8_t data[BLE_GAP_ADV_MAX_SIZE]; /**< Advertising or scan response data. */ -+} ble_gap_evt_adv_report_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_SEC_REQUEST. */ -+typedef struct -+{ -+ uint8_t bond : 1; /**< Perform bonding. */ -+ uint8_t mitm : 1; /**< Man In The Middle protection requested. */ -+ uint8_t lesc : 1; /**< LE Secure Connections requested. */ -+ uint8_t keypress : 1; /**< Generation of keypress notifications requested. */ -+} ble_gap_evt_sec_request_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST. */ -+typedef struct -+{ -+ ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ -+} ble_gap_evt_conn_param_update_request_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_SCAN_REQ_REPORT. */ -+typedef struct -+{ -+ int8_t rssi; /**< Received Signal Strength Indication in dBm. */ -+ ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 -+ and the address is the device's identity address. */ -+} ble_gap_evt_scan_req_report_t; -+ -+ -+/**@brief GAP event structure. */ -+typedef struct -+{ -+ uint16_t conn_handle; /**< Connection Handle on which event occurred. */ -+ union /**< union alternative identified by evt_id in enclosing struct. */ -+ { -+ ble_gap_evt_connected_t connected; /**< Connected Event Parameters. */ -+ ble_gap_evt_disconnected_t disconnected; /**< Disconnected Event Parameters. */ -+ ble_gap_evt_conn_param_update_t conn_param_update; /**< Connection Parameter Update Parameters. */ -+ ble_gap_evt_sec_params_request_t sec_params_request; /**< Security Parameters Request Event Parameters. */ -+ ble_gap_evt_sec_info_request_t sec_info_request; /**< Security Information Request Event Parameters. */ -+ ble_gap_evt_passkey_display_t passkey_display; /**< Passkey Display Event Parameters. */ -+ ble_gap_evt_key_pressed_t key_pressed; /**< Key Pressed Event Parameters. */ -+ ble_gap_evt_auth_key_request_t auth_key_request; /**< Authentication Key Request Event Parameters. */ -+ ble_gap_evt_lesc_dhkey_request_t lesc_dhkey_request; /**< LE Secure Connections DHKey calculation request. */ -+ ble_gap_evt_auth_status_t auth_status; /**< Authentication Status Event Parameters. */ -+ ble_gap_evt_conn_sec_update_t conn_sec_update; /**< Connection Security Update Event Parameters. */ -+ ble_gap_evt_timeout_t timeout; /**< Timeout Event Parameters. */ -+ ble_gap_evt_rssi_changed_t rssi_changed; /**< RSSI Event parameters. */ -+ ble_gap_evt_adv_report_t adv_report; /**< Advertising Report Event Parameters. */ -+ ble_gap_evt_sec_request_t sec_request; /**< Security Request Event Parameters. */ -+ ble_gap_evt_conn_param_update_request_t conn_param_update_request; /**< Connection Parameter Update Parameters. */ -+ ble_gap_evt_scan_req_report_t scan_req_report; /**< Scan Request Report parameters. */ -+ } params; /**< Event Parameters. */ -+} ble_gap_evt_t; -+ -+ -+/**@brief Channel Map option. -+ * Used with @ref sd_ble_opt_get to get the current channel map -+ * or @ref sd_ble_opt_set to set a new channel map. When setting the -+ * channel map, it applies to all current and future connections. When getting the -+ * current channel map, it applies to a single connection and the connection handle -+ * must be supplied. -+ * -+ * @note Setting the channel map may take some time, depending on connection parameters. -+ * The time taken may be different for each connection and the get operation will -+ * return the previous channel map until the new one has taken effect. -+ * -+ * @note After setting the channel map, by spec it can not be set again until at least 1 s has passed. -+ * See Bluetooth Specification Version 4.1 Volume 2, Part E, Section 7.3.46. -+ * -+ * @retval ::NRF_SUCCESS Get or set successful. -+ * @retval ::NRF_ERROR_BUSY Channel map was set again before enough time had passed. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied for get. -+ * @retval ::NRF_ERROR_NOT_SUPPORTED Returned by sd_ble_opt_set in peripheral-only SoftDevices. -+ * -+ */ -+typedef struct -+{ -+ uint16_t conn_handle; /**< Connection Handle (only applicable for get) */ -+ uint8_t ch_map[5]; /**< Channel Map (37-bit). */ -+} ble_gap_opt_ch_map_t; -+ -+ -+/**@brief Local connection latency option. -+ * -+ * Local connection latency is a feature which enables the slave to improve -+ * current consumption by ignoring the slave latency set by the peer. The -+ * local connection latency can only be set to a multiple of the slave latency, -+ * and cannot be longer than half of the supervision timeout. -+ * -+ * Used with @ref sd_ble_opt_set to set the local connection latency. The -+ * @ref sd_ble_opt_get is not supported for this option, but the actual -+ * local connection latency (unless set to NULL) is set as a return parameter -+ * when setting the option. -+ * -+ * @note The latency set will be truncated down to the closest slave latency event -+ * multiple, or the nearest multiple before half of the supervision timeout. -+ * -+ * @note The local connection latency is disabled by default, and needs to be enabled for new -+ * connections and whenever the connection is updated. -+ * -+ * @retval ::NRF_SUCCESS Set successfully. -+ * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. -+ */ -+typedef struct -+{ -+ uint16_t conn_handle; /**< Connection Handle */ -+ uint16_t requested_latency; /**< Requested local connection latency. */ -+ uint16_t * p_actual_latency; /**< Pointer to storage for the actual local connection latency (can be set to NULL to skip return value). */ -+} ble_gap_opt_local_conn_latency_t; -+ -+ -+/**@brief Passkey Option. -+ * -+ * Structure containing the passkey to be used during pairing. This can be used with @ref -+ * sd_ble_opt_set to make the SoftDevice use a pre-programmed passkey for authentication -+ * instead of generating a random one. -+ * -+ * @note Repeated pairing attempts using the same pre-programmed passkey makes pairing vulnerable to MITM attacks. -+ * -+ * @note @ref sd_ble_opt_get is not supported for this option. -+ * -+ */ -+typedef struct -+{ -+ uint8_t * p_passkey; /**< Pointer to 6-digit ASCII string (digit 0..9 only, no NULL termination) passkey to be used during pairing. If this is NULL, the SoftDevice will generate a random passkey if required.*/ -+} ble_gap_opt_passkey_t; -+ -+ -+/**@brief Scan request report option. -+ * -+ * This can be used with @ref sd_ble_opt_set to make the SoftDevice send -+ * @ref BLE_GAP_EVT_SCAN_REQ_REPORT events. -+ * -+ * @note Due to the limited space reserved for scan request report events, -+ * not all received scan requests will be reported. -+ * -+ * @note If whitelisting is used, only whitelisted requests are reported. -+ * -+ * @retval ::NRF_SUCCESS Set successfully. -+ * @retval ::NRF_ERROR_INVALID_STATE When advertising is ongoing while the option is set. -+ */ -+typedef struct -+{ -+ uint8_t enable : 1; /**< Enable scan request reports. */ -+} ble_gap_opt_scan_req_report_t; -+ -+ -+/**@brief Compatibility mode option. -+ * -+ * This can be used with @ref sd_ble_opt_set to enable and disable -+ * compatibility modes. Compatibility modes are disabled by default. -+ * -+ * @note Compatibility mode 1 enables interoperability with devices that do not support -+ * a value of 0 for the WinOffset parameter in the Link Layer CONNECT_REQ packet. -+ * -+ * @retval ::NRF_SUCCESS Set successfully. -+ * @retval ::NRF_ERROR_INVALID_STATE When connection creation is ongoing while mode 1 is set. -+ */ -+typedef struct -+{ -+ uint8_t mode_1_enable : 1; /**< Enable compatibility mode 1.*/ -+} ble_gap_opt_compat_mode_t; -+ -+/**@brief Data length extension option. -+ * -+ * This can be used with @ref sd_ble_opt_set to enable longer data packets. -+ * -+ * @note An rxtx_max_pdu_payload_size of 0 will result in the default minimum payload size of 27. -+ * @note Not supported by SoftDevices for nRF51 Series devices. -+ * @note The parameters for a connection are applied when a connection complete -+ * event is generated for the host. -+ * -+ * -+ * @retval ::NRF_SUCCESS Set successfully. -+ * @retval ::NRF_ERROR_INVALID_PARAM If the payload size is not 0 or a valid link layer PDU payload size. -+ * @retval ::NRF_ERROR_NOT_SUPPORTED If called on a SoftDevice designed for nRF51 (e.g. s130). -+ */ -+typedef struct -+{ -+ uint8_t rxtx_max_pdu_payload_size; /**< Max PDU payload size (in octets). */ -+} ble_gap_opt_ext_len_t; -+ -+ -+ -+/**@brief Authenticated payload timeout option. -+ * -+ * This can be used with @ref sd_ble_opt_set to change the Authenticated payload timeout to a value other than the default of 8 minutes. -+ * -+ * @note The authenticated payload timeout event ::BLE_GAP_TIMEOUT_SRC_AUTH_PAYLOAD will be generated -+ * if auth_payload_timeout time has elapsed without receiving a packet with a valid MIC on an encrypted -+ * link. -+ * -+ * @note The LE ping procedure will be initiated before the timer expires to give the peer a chance -+ * to reset the timer. In addition the stack will try to prioritize running of LE ping over other -+ * activities to increase chances of finishing LE ping before timer expires. To avoid side-effects -+ * on other activities, it is recommended to use high timeout values. -+ * Recommended timeout > 2*(connInterval * (6 + connSlaveLatency)). -+ * -+ * @retval ::NRF_SUCCESS Set successfully. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. auth_payload_timeout was outside of allowed range. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. -+ */ -+typedef struct -+{ -+ uint16_t conn_handle; /**< Connection Handle */ -+ uint16_t auth_payload_timeout; /**< Requested timeout in 10 ms unit. Maximum is 48 000 (=480 000 ms =8 min). Minimum is 1 (=10ms). */ -+} ble_gap_opt_auth_payload_timeout_t; -+ -+ -+/**@brief Option structure for GAP options. */ -+typedef union -+{ -+ ble_gap_opt_ch_map_t ch_map; /**< Parameters for the Channel Map option. */ -+ ble_gap_opt_local_conn_latency_t local_conn_latency; /**< Parameters for the Local connection latency option */ -+ ble_gap_opt_passkey_t passkey; /**< Parameters for the Passkey option.*/ -+ ble_gap_opt_scan_req_report_t scan_req_report; /**< Parameters for the scan request report option.*/ -+ ble_gap_opt_compat_mode_t compat_mode; /**< Parameters for the compatibility mode option.*/ -+ ble_gap_opt_ext_len_t ext_len; /**< Parameters for the extended length option. */ -+ ble_gap_opt_auth_payload_timeout_t auth_payload_timeout; /**< Parameters for the authenticated payload timeout option.*/ -+} ble_gap_opt_t; -+/**@} */ -+ -+ -+/**@addtogroup BLE_GAP_FUNCTIONS Functions -+ * @{ */ -+ -+/**@brief Set the local Bluetooth identity address. -+ * -+ * The local Bluetooth identity address is the address that identifies this device to other peers. -+ * The address type must be either @ref BLE_GAP_ADDR_TYPE_PUBLIC or @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC. -+ * The identity address cannot be changed while roles are running. -+ * -+ * @note This address will be distributed to the peer during bonding. -+ * If the address changes, the address stored in the peer device will not be valid and the ability to -+ * reconnect using the old address will be lost. -+ * -+ * @note By default the SoftDevice will set an address of type @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC upon being -+ * enabled. The address is a random number populated during the IC manufacturing process and remains unchanged -+ * for the lifetime of each IC. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_ADV_MSC} -+ * @endmscs -+ * -+ * @param[in] p_addr Pointer to address structure. -+ * -+ * @retval ::NRF_SUCCESS Address successfully set. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address. -+ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. -+ * @retval ::NRF_ERROR_INVALID_STATE The identity address cannot be changed while the roles are running. -+ */ -+SVCALL(SD_BLE_GAP_ADDR_SET, uint32_t, sd_ble_gap_addr_set(ble_gap_addr_t const *p_addr)); -+ -+ -+/**@brief Get local Bluetooth identity address. -+ * -+ * @note This will always return the identity address irrespective of the privacy settings, -+ * i.e. the address type will always be either @ref BLE_GAP_ADDR_TYPE_PUBLIC or @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC. -+ * -+ * @param[out] p_addr Pointer to address structure to be filled in. -+ * -+ * @retval ::NRF_SUCCESS Address successfully retrieved. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid or NULL pointer supplied. -+ */ -+SVCALL(SD_BLE_GAP_ADDR_GET, uint32_t, sd_ble_gap_addr_get(ble_gap_addr_t *p_addr)); -+ -+ -+/**@brief Set the active whitelist in the SoftDevice. -+ * -+ * @note Only one whitelist can be used at a time and the whitelist is shared between the BLE roles. -+ * The whitelist cannot be set if a BLE role is using the whitelist. -+ * -+ * @note If an address is resolved using the information in the device identity list, then the whitelist -+ * filter policy applies to the peer identity address and not the resolvable address sent on air. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} -+ * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_PRIVATE_SCAN_MSC} -+ * @endmscs -+ * -+ * @param[in] pp_wl_addrs Pointer to a whitelist of peer addresses, if NULL the whitelist will be cleared. -+ * @param[in] len Length of the whitelist, maximum @ref BLE_GAP_WHITELIST_ADDR_MAX_COUNT. -+ * -+ * @retval ::NRF_SUCCESS The whitelist is successfully set/cleared. -+ * @retval ::NRF_ERROR_INVALID_ADDR The whitelist (or one of its entries) provided is invalid. -+ * @retval ::BLE_ERROR_GAP_WHITELIST_IN_USE The whitelist is in use by a BLE role and cannot be set or cleared. -+ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. -+ * @retval ::NRF_ERROR_DATA_SIZE The given whitelist size is invalid (zero or too large); this can only return when -+ * pp_wl_addrs is not NULL. -+ */ -+//lint -save -esym(18, sd_ble_gap_whitelist_set) -+SVCALL(SD_BLE_GAP_WHITELIST_SET, uint32_t, sd_ble_gap_whitelist_set(ble_gap_addr_t const * const * pp_wl_addrs, uint8_t len)); -+//lint -restore -+ -+/**@brief Set device identity list. -+ * -+ * @note Only one device identity list can be used at a time and the list is shared between the BLE roles. -+ * The device identity list cannot be set if a BLE role is using the list. -+ * -+ * @param[in] pp_id_keys Pointer to an array of peer identity addresses and peer IRKs, if NULL the device identity list will be cleared. -+ * @param[in] pp_local_irks Pointer to an array of local IRKs. Each entry in the array maps to the entry in pp_id_keys at the same index. -+ * To fill in the list with the currently set device IRK for all peers, set to NULL. -+ * @param[in] len Length of the device identity list, maximum @ref BLE_GAP_DEVICE_IDENTITIES_MAX_COUNT. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_PRIVACY_ADV_MSC} -+ * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_MSC} -+ * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_PRIVATE_SCAN_MSC} -+ * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_CONN_PRIV_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_CONN_PRIV_MSC} -+ * @endmscs -+ * -+ * @retval ::NRF_SUCCESS The device identity list successfully set/cleared. -+ * @retval ::NRF_ERROR_INVALID_ADDR The device identity list (or one of its entries) provided is invalid. -+ This code may be returned if the local IRK list also has an invalid entry. -+ * @retval ::BLE_ERROR_GAP_DEVICE_IDENTITIES_IN_USE The device identity list is in use and cannot be set or cleared. -+ * @retval ::BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE The device identity list contains multiple entries with the same identity address. -+ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. -+ * @retval ::NRF_ERROR_DATA_SIZE The given device identity list size invalid (zero or too large); this can -+ * only return when pp_id_keys is not NULL. -+ */ -+//lint -save -esym(18, sd_ble_gap_device_identities_set) -+SVCALL(SD_BLE_GAP_DEVICE_IDENTITIES_SET, uint32_t, sd_ble_gap_device_identities_set(ble_gap_id_key_t const * const * pp_id_keys, ble_gap_irk_t const * const * pp_local_irks, uint8_t len)); -+//lint -restore -+ -+/**@brief Set privacy settings. -+ * -+ * @note Privacy settings cannot be set while BLE roles are running. -+ * -+ * @param[in] p_privacy_params Privacy settings. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_PRIVACY_ADV_MSC} -+ * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_MSC} -+ * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} -+ * @endmscs -+ * -+ * @retval ::NRF_SUCCESS Set successfully. -+ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. -+ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. -+ * @retval ::NRF_ERROR_INVALID_ADDR The pointer to privacy settings is NULL or invalid. -+ Otherwise, the p_device_irk pointer in privacy parameter is an invalid pointer. -+ * @retval ::NRF_ERROR_INVALID_PARAM Out of range parameters are provided. -+ * @retval ::NRF_ERROR_INVALID_STATE Privacy settings cannot be changed while BLE roles using privacy are enabled. -+ */ -+SVCALL(SD_BLE_GAP_PRIVACY_SET, uint32_t, sd_ble_gap_privacy_set(ble_gap_privacy_params_t const *p_privacy_params)); -+ -+ -+/**@brief Get privacy settings. -+ * -+ * @note The privacy settings returned include the current device irk as well. -+ * -+ * @param[in] p_privacy_params Privacy settings. -+ * -+ * @retval ::NRF_SUCCESS Privacy settings read. -+ * @retval ::NRF_ERROR_INVALID_ADDR The pointer given for returning the privacy settings may be NULL or invalid. -+ Otherwise, the p_device_irk pointer in privacy parameter is an invalid pointer. -+ */ -+SVCALL(SD_BLE_GAP_PRIVACY_GET, uint32_t, sd_ble_gap_privacy_get(ble_gap_privacy_params_t *p_privacy_params)); -+ -+ -+/**@brief Set, clear or update advertising and scan response data. -+ * -+ * @note The format of the advertising data will be checked by this call to ensure interoperability. -+ * Limitations imposed by this API call to the data provided include having a flags data type in the scan response data and -+ * duplicating the local name in the advertising data and scan response data. -+ * -+ * @note To clear the advertising data and set it to a 0-length packet, simply provide a valid pointer (p_data/p_sr_data) with its corresponding -+ * length (dlen/srdlen) set to 0. -+ * -+ * @note The call will fail if p_data and p_sr_data are both NULL since this would have no effect. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_ADV_MSC} -+ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} -+ * @endmscs -+ * -+ * @param[in] p_data Raw data to be placed in advertising packet. If NULL, no changes are made to the current advertising packet data. -+ * @param[in] dlen Data length for p_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_data is NULL, can be 0 if p_data is not NULL. -+ * @param[in] p_sr_data Raw data to be placed in scan response packet. If NULL, no changes are made to the current scan response packet data. -+ * @param[in] srdlen Data length for p_sr_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_sr_data is NULL, can be 0 if p_data is not NULL. -+ * -+ * @retval ::NRF_SUCCESS Advertising data successfully updated or cleared. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, both p_data and p_sr_data cannot be NULL. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_FLAGS Invalid combination of advertising flags supplied. -+ * @retval ::NRF_ERROR_INVALID_DATA Invalid data type(s) supplied, check the advertising data format specification. -+ * @retval ::NRF_ERROR_INVALID_LENGTH Invalid data length(s) supplied. -+ * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported data type. -+ * @retval ::BLE_ERROR_GAP_UUID_LIST_MISMATCH Invalid UUID list supplied. -+ */ -+SVCALL(SD_BLE_GAP_ADV_DATA_SET, uint32_t, sd_ble_gap_adv_data_set(uint8_t const *p_data, uint8_t dlen, uint8_t const *p_sr_data, uint8_t srdlen)); -+ -+ -+/**@brief Start advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). -+ * -+ * @note An application can start an advertising procedure for broadcasting purposes while a connection -+ * is active. After a @ref BLE_GAP_EVT_CONNECTED event is received, this function may therefore -+ * be called to start a broadcast advertising procedure. The advertising procedure -+ * cannot however be connectable (it must be of type @ref BLE_GAP_ADV_TYPE_ADV_SCAN_IND or -+ * @ref BLE_GAP_ADV_TYPE_ADV_NONCONN_IND). @note Only one advertiser may be active at any time. -+ * -+ * @events -+ * @event{@ref BLE_GAP_EVT_CONNECTED, Generated after connection has been established through connectable advertising.} -+ * @event{@ref BLE_GAP_EVT_TIMEOUT, Advertisement has timed out.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_ADV_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_CONN_PRIV_MSC} -+ * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} -+ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} -+ * @endmscs -+ * -+ * @param[in] p_adv_params Pointer to advertising parameters structure. -+ * -+ * @retval ::NRF_SUCCESS The BLE stack has started advertising. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::NRF_ERROR_CONN_COUNT The limit of available connections has been reached; connectable advertiser cannot be started. -+ * @retval ::NRF_ERROR_NO_MEM The configured memory pools (see @ref ble_conn_bw_counts_t) are not large enough for the -+ * bandwidth selected for this connection. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check the accepted ranges and limits. -+ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Bluetooth address supplied. -+ * @retval ::BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST Discoverable mode and whitelist incompatible. -+ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. -+ * @retval ::NRF_ERROR_RESOURCES Not enough BLE role slots available. -+ * Stop one or more currently active roles (Central, Peripheral or Observer) and try again -+ */ -+SVCALL(SD_BLE_GAP_ADV_START, uint32_t, sd_ble_gap_adv_start(ble_gap_adv_params_t const *p_adv_params)); -+ -+ -+/**@brief Stop advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_ADV_MSC} -+ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} -+ * @endmscs -+ * -+ * @retval ::NRF_SUCCESS The BLE stack has stopped advertising. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation (most probably not in advertising state). -+ */ -+SVCALL(SD_BLE_GAP_ADV_STOP, uint32_t, sd_ble_gap_adv_stop(void)); -+ -+ -+/**@brief Update connection parameters. -+ * -+ * @details In the central role this will initiate a Link Layer connection parameter update procedure, -+ * otherwise in the peripheral role, this will send the corresponding L2CAP request and wait for -+ * the central to perform the procedure. In both cases, and regardless of success or failure, the application -+ * will be informed of the result with a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE event. -+ * -+ * @details This function can be used as a central both to reply to a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST or to start the procedure unrequested. -+ * -+ * @events -+ * @event{@ref BLE_GAP_EVT_CONN_PARAM_UPDATE, Result of the connection parameter update procedure.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_CPU_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} -+ * @mmsc{@ref BLE_GAP_MULTILINK_CPU_MSC} -+ * @mmsc{@ref BLE_GAP_MULTILINK_CTRL_PROC_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_CPU_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] p_conn_params Pointer to desired connection parameters. If NULL is provided on a peripheral role, -+ * the parameters in the PPCP characteristic of the GAP service will be used instead. -+ * If NULL is provided on a central role and in response to a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST, the peripheral request will be rejected -+ * -+ * @retval ::NRF_SUCCESS The Connection Update procedure has been started successfully. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::NRF_ERROR_BUSY Procedure already in progress or not allowed at this time, process pending events and wait for pending procedures to complete and retry. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. -+ */ -+SVCALL(SD_BLE_GAP_CONN_PARAM_UPDATE, uint32_t, sd_ble_gap_conn_param_update(uint16_t conn_handle, ble_gap_conn_params_t const *p_conn_params)); -+ -+ -+/**@brief Disconnect (GAP Link Termination). -+ * -+ * @details This call initiates the disconnection procedure, and its completion will be communicated to the application -+ * with a @ref BLE_GAP_EVT_DISCONNECTED event. -+ * -+ * @events -+ * @event{@ref BLE_GAP_EVT_DISCONNECTED, Generated when disconnection procedure is complete.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_CONN_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] hci_status_code HCI status code, see @ref BLE_HCI_STATUS_CODES (accepted values are @ref BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION and @ref BLE_HCI_CONN_INTERVAL_UNACCEPTABLE). -+ * -+ * @retval ::NRF_SUCCESS The disconnection procedure has been started successfully. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation (disconnection is already in progress). -+ */ -+SVCALL(SD_BLE_GAP_DISCONNECT, uint32_t, sd_ble_gap_disconnect(uint16_t conn_handle, uint8_t hci_status_code)); -+ -+ -+/**@brief Set the radio's transmit power. -+ * -+ * @param[in] tx_power Radio transmit power in dBm (accepted values are -40, -30, -20, -16, -12, -8, -4, 0, 3, and 4 dBm). -+ * -+ * @note The +3dBm setting is only available on nRF52 series ICs. -+ * @note The -30dBm setting is only available on nRF51 series ICs. -+ * @note The -40dBm setting is only available on nRF52 series ICs. -+ * -+ * @retval ::NRF_SUCCESS Successfully changed the transmit power. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ */ -+SVCALL(SD_BLE_GAP_TX_POWER_SET, uint32_t, sd_ble_gap_tx_power_set(int8_t tx_power)); -+ -+ -+/**@brief Set GAP Appearance value. -+ * -+ * @param[in] appearance Appearance (16-bit), see @ref BLE_APPEARANCES. -+ * -+ * @retval ::NRF_SUCCESS Appearance value set successfully. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ */ -+SVCALL(SD_BLE_GAP_APPEARANCE_SET, uint32_t, sd_ble_gap_appearance_set(uint16_t appearance)); -+ -+ -+/**@brief Get GAP Appearance value. -+ * -+ * @param[out] p_appearance Pointer to appearance (16-bit) to be filled in, see @ref BLE_APPEARANCES. -+ * -+ * @retval ::NRF_SUCCESS Appearance value retrieved successfully. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ */ -+SVCALL(SD_BLE_GAP_APPEARANCE_GET, uint32_t, sd_ble_gap_appearance_get(uint16_t *p_appearance)); -+ -+ -+/**@brief Set GAP Peripheral Preferred Connection Parameters. -+ * -+ * @param[in] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure with the desired parameters. -+ * -+ * @retval ::NRF_SUCCESS Peripheral Preferred Connection Parameters set successfully. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ */ -+SVCALL(SD_BLE_GAP_PPCP_SET, uint32_t, sd_ble_gap_ppcp_set(ble_gap_conn_params_t const *p_conn_params)); -+ -+ -+/**@brief Get GAP Peripheral Preferred Connection Parameters. -+ * -+ * @param[out] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure where the parameters will be stored. -+ * -+ * @retval ::NRF_SUCCESS Peripheral Preferred Connection Parameters retrieved successfully. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ */ -+SVCALL(SD_BLE_GAP_PPCP_GET, uint32_t, sd_ble_gap_ppcp_get(ble_gap_conn_params_t *p_conn_params)); -+ -+ -+/**@brief Set GAP device name. -+ * -+ * @param[in] p_write_perm Write permissions for the Device Name characteristic, see @ref ble_gap_conn_sec_mode_t. -+ * @param[in] p_dev_name Pointer to a UTF-8 encoded, non NULL-terminated string. -+ * @param[in] len Length of the UTF-8, non NULL-terminated string pointed to by p_dev_name in octets (must be smaller or equal than @ref BLE_GAP_DEVNAME_MAX_LEN). -+ * -+ * @note If the device name is located in application flash memory (see @ref ble_gap_device_name_t), it cannot be changed. Then @ref NRF_ERROR_FORBIDDEN will be returned. -+ * -+ * @retval ::NRF_SUCCESS GAP device name and permissions set successfully. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. -+ * @retval ::NRF_ERROR_FORBIDDEN Device name is not writable. -+ */ -+SVCALL(SD_BLE_GAP_DEVICE_NAME_SET, uint32_t, sd_ble_gap_device_name_set(ble_gap_conn_sec_mode_t const *p_write_perm, uint8_t const *p_dev_name, uint16_t len)); -+ -+ -+/**@brief Get GAP device name. -+ * -+ * @note If the device name is longer than the size of the supplied buffer, -+ * p_len will return the complete device name length, -+ * and not the number of bytes actually returned in p_dev_name. -+ * The application may use this information to allocate a suitable buffer size. -+ * -+ * @param[out] p_dev_name Pointer to an empty buffer where the UTF-8 non NULL-terminated string will be placed. Set to NULL to obtain the complete device name length. -+ * @param[in,out] p_len Length of the buffer pointed by p_dev_name, complete device name length on output. -+ * -+ * @retval ::NRF_SUCCESS GAP device name retrieved successfully. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. -+ */ -+SVCALL(SD_BLE_GAP_DEVICE_NAME_GET, uint32_t, sd_ble_gap_device_name_get(uint8_t *p_dev_name, uint16_t *p_len)); -+ -+ -+/**@brief Initiate the GAP Authentication procedure. -+ * -+ * @details In the central role, this function will send an SMP Pairing Request (or an SMP Pairing Failed if rejected), -+ * otherwise in the peripheral role, an SMP Security Request will be sent. -+ * -+ * @events -+ * @event{Depending on the security parameters set and the packet exchanges with the peer\, the following events may be generated:} -+ * @event{@ref BLE_GAP_EVT_SEC_PARAMS_REQUEST} -+ * @event{@ref BLE_GAP_EVT_SEC_INFO_REQUEST} -+ * @event{@ref BLE_GAP_EVT_PASSKEY_DISPLAY} -+ * @event{@ref BLE_GAP_EVT_KEY_PRESSED} -+ * @event{@ref BLE_GAP_EVT_AUTH_KEY_REQUEST} -+ * @event{@ref BLE_GAP_EVT_LESC_DHKEY_REQUEST} -+ * @event{@ref BLE_GAP_EVT_CONN_SEC_UPDATE} -+ * @event{@ref BLE_GAP_EVT_AUTH_STATUS} -+ * @event{@ref BLE_GAP_EVT_TIMEOUT} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_PERIPH_SEC_REQ_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_SEC_REQ_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_PAIRING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] p_sec_params Pointer to the @ref ble_gap_sec_params_t structure with the security parameters to be used during the pairing or bonding procedure. -+ * In the peripheral role, only the bond, mitm, lesc and keypress fields of this structure are used. -+ * In the central role, this pointer may be NULL to reject a Security Request. -+ * -+ * @retval ::NRF_SUCCESS Successfully initiated authentication procedure. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. -+ * @retval ::NRF_ERROR_NO_MEM The maximum number of authentication procedures that can run in parallel for the given role is reached. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ * @retval ::NRF_ERROR_NOT_SUPPORTED Setting of sign or link fields in @ref ble_gap_sec_kdist_t not supported. -+ * @retval ::NRF_ERROR_TIMEOUT A SMP timeout has occurred, and further SMP operations on this link is prohibited. -+ */ -+SVCALL(SD_BLE_GAP_AUTHENTICATE, uint32_t, sd_ble_gap_authenticate(uint16_t conn_handle, ble_gap_sec_params_t const *p_sec_params)); -+ -+ -+/**@brief Reply with GAP security parameters. -+ * -+ * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. -+ * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. -+ * -+ * @events -+ * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_PERIPH_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_CENTRAL_OOB_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_STATIC_PK_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_CONFIRM_FAIL_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_PAIRING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_PD_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_KS_TOO_SMALL_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_APP_ERROR_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_REMOTE_PAIRING_FAIL_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_TIMEOUT_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_PAIRING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] sec_status Security status, see @ref BLE_GAP_SEC_STATUS. -+ * @param[in] p_sec_params Pointer to a @ref ble_gap_sec_params_t security parameters structure. In the central role this must be set to NULL, as the parameters have -+ * already been provided during a previous call to @ref sd_ble_gap_authenticate. -+ * @param[in,out] p_sec_keyset Pointer to a @ref ble_gap_sec_keyset_t security keyset structure. Any keys generated and/or distributed as a result of the ongoing security procedure -+ * will be stored into the memory referenced by the pointers inside this structure. The keys will be stored and available to the application -+ * upon reception of a @ref BLE_GAP_EVT_AUTH_STATUS event. -+ * Note that the SoftDevice expects the application to provide memory for storing the -+ * peer's keys. So it must be ensured that the relevant pointers inside this structure are not NULL. The pointers to the local key -+ * can, however, be NULL, in which case, the local key data will not be available to the application upon reception of the -+ * @ref BLE_GAP_EVT_AUTH_STATUS event. -+ * -+ * @retval ::NRF_SUCCESS Successfully accepted security parameter from the application. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ * @retval ::NRF_ERROR_NOT_SUPPORTED Setting of sign or link fields in @ref ble_gap_sec_kdist_t not supported. -+ */ -+SVCALL(SD_BLE_GAP_SEC_PARAMS_REPLY, uint32_t, sd_ble_gap_sec_params_reply(uint16_t conn_handle, uint8_t sec_status, ble_gap_sec_params_t const *p_sec_params, ble_gap_sec_keyset_t const *p_sec_keyset)); -+ -+ -+/**@brief Reply with an authentication key. -+ * -+ * @details This function is only used to reply to a @ref BLE_GAP_EVT_AUTH_KEY_REQUEST or a @ref BLE_GAP_EVT_PASSKEY_DISPLAY, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. -+ * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. -+ * -+ * @events -+ * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_CENTRAL_OOB_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] key_type See @ref BLE_GAP_AUTH_KEY_TYPES. -+ * @param[in] p_key If key type is @ref BLE_GAP_AUTH_KEY_TYPE_NONE, then NULL. -+ * If key type is @ref BLE_GAP_AUTH_KEY_TYPE_PASSKEY, then a 6-byte ASCII string (digit 0..9 only, no NULL termination) -+ * or NULL when confirming LE Secure Connections Numeric Comparison. -+ * If key type is @ref BLE_GAP_AUTH_KEY_TYPE_OOB, then a 16-byte OOB key value in Little Endian format. -+ * -+ * @retval ::NRF_SUCCESS Authentication key successfully set. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ */ -+SVCALL(SD_BLE_GAP_AUTH_KEY_REPLY, uint32_t, sd_ble_gap_auth_key_reply(uint16_t conn_handle, uint8_t key_type, uint8_t const *p_key)); -+ -+/**@brief Reply with an LE Secure connections DHKey. -+ * -+ * @details This function is only used to reply to a @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. -+ * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. -+ * -+ * @events -+ * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_PAIRING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_PD_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] p_dhkey LE Secure Connections DHKey. -+ * -+ * @retval ::NRF_SUCCESS DHKey successfully set. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ */ -+SVCALL(SD_BLE_GAP_LESC_DHKEY_REPLY, uint32_t, sd_ble_gap_lesc_dhkey_reply(uint16_t conn_handle, ble_gap_lesc_dhkey_t const *p_dhkey)); -+ -+/**@brief Notify the peer of a local keypress. -+ * -+ * @details This function can only be used when an authentication procedure using LE Secure Connection is in progress. Calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] kp_not See @ref BLE_GAP_KP_NOT_TYPES. -+ * -+ * @retval ::NRF_SUCCESS Keypress notification successfully queued for transmission. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either not entering a passkey or keypresses have not been enabled by both peers. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ * @retval ::NRF_ERROR_BUSY The BLE stack is busy. Retry at later time. -+ */ -+SVCALL(SD_BLE_GAP_KEYPRESS_NOTIFY, uint32_t, sd_ble_gap_keypress_notify(uint16_t conn_handle, uint8_t kp_not)); -+ -+/**@brief Generate a set of OOB data to send to a peer out of band. -+ * -+ * @note The @ref ble_gap_addr_t included in the OOB data returned will be the currently active one (or, if a connection has already been established, -+ * the one used during connection setup). The application may manually overwrite it with an updated value. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. Can be BLE_CONN_HANDLE_INVALID if a BLE connection has not been established yet. -+ * @param[in] p_pk_own LE Secure Connections local P-256 Public Key. -+ * @param[out] p_oobd_own The OOB data to be sent out of band to a peer. -+ * -+ * @retval ::NRF_SUCCESS OOB data successfully generated. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ */ -+SVCALL(SD_BLE_GAP_LESC_OOB_DATA_GET, uint32_t, sd_ble_gap_lesc_oob_data_get(uint16_t conn_handle, ble_gap_lesc_p256_pk_t const *p_pk_own, ble_gap_lesc_oob_data_t *p_oobd_own)); -+ -+/**@brief Provide the OOB data sent/received out of band. -+ * -+ * @note At least one of the 2 pointers provided must be different from NULL. -+ * @note An authentication procedure with OOB selected as an algorithm must be in progress when calling this function. -+ * @note A @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST event with the oobd_req set to 1 must have been received prior to calling this function. -+ * -+ * @events -+ * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] p_oobd_own The OOB data sent out of band to a peer or NULL if none sent. -+ * @param[in] p_oobd_peer The OOB data received out of band from a peer or NULL if none received. -+ * -+ * @retval ::NRF_SUCCESS OOB data accepted. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ */ -+SVCALL(SD_BLE_GAP_LESC_OOB_DATA_SET, uint32_t, sd_ble_gap_lesc_oob_data_set(uint16_t conn_handle, ble_gap_lesc_oob_data_t const *p_oobd_own, ble_gap_lesc_oob_data_t const *p_oobd_peer)); -+ -+/**@brief Initiate GAP Encryption procedure. -+ * -+ * @details In the central role, this function will initiate the encryption procedure using the encryption information provided. -+ * -+ * @events -+ * @event{@ref BLE_GAP_EVT_CONN_SEC_UPDATE, The connection security has been updated.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_ENC_MSC} -+ * @mmsc{@ref BLE_GAP_MULTILINK_CTRL_PROC_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_SEC_REQ_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] p_master_id Pointer to a @ref ble_gap_master_id_t master identification structure. -+ * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. -+ * -+ * @retval ::NRF_SUCCESS Successfully initiated authentication procedure. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ * @retval ::BLE_ERROR_INVALID_ROLE Operation is not supported in the Peripheral role. -+ * @retval ::NRF_ERROR_BUSY Procedure already in progress or not allowed at this time, wait for pending procedures to complete and retry. -+ */ -+SVCALL(SD_BLE_GAP_ENCRYPT, uint32_t, sd_ble_gap_encrypt(uint16_t conn_handle, ble_gap_master_id_t const *p_master_id, ble_gap_enc_info_t const *p_enc_info)); -+ -+ -+/**@brief Reply with GAP security information. -+ * -+ * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_INFO_REQUEST, calling it at other times will result in @ref NRF_ERROR_INVALID_STATE. -+ * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. -+ * @note Data signing is not yet supported, and p_sign_info must therefore be NULL. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_PERIPH_ENC_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. May be NULL to signal none is available. -+ * @param[in] p_id_info Pointer to a @ref ble_gap_irk_t identity information structure. May be NULL to signal none is available. -+ * @param[in] p_sign_info Pointer to a @ref ble_gap_sign_info_t signing information structure. May be NULL to signal none is available. -+ * -+ * @retval ::NRF_SUCCESS Successfully accepted security information. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ */ -+SVCALL(SD_BLE_GAP_SEC_INFO_REPLY, uint32_t, sd_ble_gap_sec_info_reply(uint16_t conn_handle, ble_gap_enc_info_t const *p_enc_info, ble_gap_irk_t const *p_id_info, ble_gap_sign_info_t const *p_sign_info)); -+ -+ -+/**@brief Get the current connection security. -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[out] p_conn_sec Pointer to a @ref ble_gap_conn_sec_t structure to be filled in. -+ * -+ * @retval ::NRF_SUCCESS Current connection security successfully retrieved. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ */ -+SVCALL(SD_BLE_GAP_CONN_SEC_GET, uint32_t, sd_ble_gap_conn_sec_get(uint16_t conn_handle, ble_gap_conn_sec_t *p_conn_sec)); -+ -+ -+/**@brief Start reporting the received signal strength to the application. -+ * -+ * A new event is reported whenever the RSSI value changes, until @ref sd_ble_gap_rssi_stop is called. -+ * -+ * @events -+ * @event{@ref BLE_GAP_EVT_RSSI_CHANGED, New RSSI data available. How often the event is generated is -+ dependent on the settings of the threshold_dbm -+ and skip_count input parameters.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} -+ * @mmsc{@ref BLE_GAP_RSSI_FILT_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] threshold_dbm Minimum change in dBm before triggering the @ref BLE_GAP_EVT_RSSI_CHANGED event. Events are disabled if threshold_dbm equals @ref BLE_GAP_RSSI_THRESHOLD_INVALID. -+ * @param[in] skip_count Number of RSSI samples with a change of threshold_dbm or more before sending a new @ref BLE_GAP_EVT_RSSI_CHANGED event. -+ * -+ * @retval ::NRF_SUCCESS Successfully activated RSSI reporting. -+ * @retval ::NRF_ERROR_INVALID_STATE Disconnection in progress. Invalid state to perform operation. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ */ -+SVCALL(SD_BLE_GAP_RSSI_START, uint32_t, sd_ble_gap_rssi_start(uint16_t conn_handle, uint8_t threshold_dbm, uint8_t skip_count)); -+ -+ -+/**@brief Stop reporting the received signal strength. -+ * -+ * @note An RSSI change detected before the call but not yet received by the application -+ * may be reported after @ref sd_ble_gap_rssi_stop has been called. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} -+ * @mmsc{@ref BLE_GAP_RSSI_FILT_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * -+ * @retval ::NRF_SUCCESS Successfully deactivated RSSI reporting. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ */ -+SVCALL(SD_BLE_GAP_RSSI_STOP, uint32_t, sd_ble_gap_rssi_stop(uint16_t conn_handle)); -+ -+ -+/**@brief Get the received signal strength for the last connection event. -+ * -+ * @ref sd_ble_gap_rssi_start must be called to start reporting RSSI before using this function. @ref NRF_ERROR_NOT_FOUND -+ * will be returned until RSSI was sampled for the first time after calling @ref sd_ble_gap_rssi_start. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[out] p_rssi Pointer to the location where the RSSI measurement shall be stored. -+ * -+ * @retval ::NRF_SUCCESS Successfully read the RSSI. -+ * @retval ::NRF_ERROR_NOT_FOUND No sample is available. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is not ongoing, or disconnection in progress. -+ */ -+SVCALL(SD_BLE_GAP_RSSI_GET, uint32_t, sd_ble_gap_rssi_get(uint16_t conn_handle, int8_t *p_rssi)); -+ -+ -+/**@brief Start scanning (GAP Discovery procedure, Observer Procedure). -+ * -+ * -+ * @events -+ * @event{@ref BLE_GAP_EVT_ADV_REPORT, An advertising or scan response packet has been received.} -+ * @event{@ref BLE_GAP_EVT_TIMEOUT, Scanner has timed out.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_SCAN_MSC} -+ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} -+ * @endmscs -+ * -+ * @param[in] p_scan_params Pointer to scan parameters structure. -+ * -+ * @retval ::NRF_SUCCESS Successfully initiated scanning procedure. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. -+ * @retval ::NRF_ERROR_RESOURCES Not enough BLE role slots available. -+ * Stop one or more currently active roles (Central, Peripheral or Broadcaster) and try again -+ */ -+SVCALL(SD_BLE_GAP_SCAN_START, uint32_t, sd_ble_gap_scan_start(ble_gap_scan_params_t const *p_scan_params)); -+ -+ -+/**@brief Stop scanning (GAP Discovery procedure, Observer Procedure). -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_SCAN_MSC} -+ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} -+ * @endmscs -+ * -+ * @retval ::NRF_SUCCESS Successfully stopped scanning procedure. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation (most probably not in scanning state). -+ */ -+SVCALL(SD_BLE_GAP_SCAN_STOP, uint32_t, sd_ble_gap_scan_stop(void)); -+ -+ -+/**@brief Create a connection (GAP Link Establishment). -+ * -+ * @note If a scanning procedure is currently in progress it will be automatically stopped when calling this function. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_CONN_PRIV_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_CONN_MSC} -+ * @endmscs -+ * -+ * @param[in] p_peer_addr Pointer to peer address. If the use_whitelist bit is set in @ref ble_gap_scan_params_t, then this is ignored. -+ * If @ref ble_gap_addr_t::addr_id_peer is set then p_peer_addr must be present in the device identity list -+ * see @ref sd_ble_gap_device_identities_set. -+ * @param[in] p_scan_params Pointer to scan parameters structure. -+ * @param[in] p_conn_params Pointer to desired connection parameters. -+ * -+ * @retval ::NRF_SUCCESS Successfully initiated connection procedure. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid parameter(s) pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ - Invalid parameter(s) in p_scan_params or p_conn_params. -+ - Use of whitelist requested but whitelist has not been set, see @ref sd_ble_gap_whitelist_set. -+ - Peer address was not present in the device identity list, see @ref sd_ble_gap_device_identities_set. -+ * @retval ::NRF_ERROR_INVALID_STATE The SoftDevice is in an invalid state to perform this operation. This may be due to an -+ * existing locally initiated connect procedure, which must complete before initiating again. -+ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Peer address. -+ * @retval ::NRF_ERROR_CONN_COUNT The limit of available connections has been reached. -+ * @retval ::NRF_ERROR_NO_MEM The configured memory pool (see @ref ble_conn_bw_counts_t) is not large enough for the -+ * bandwidth selected for this connection. -+ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. If another connection is being established -+ * wait for the corresponding @ref BLE_GAP_EVT_CONNECTED event before calling again. -+ * @retval ::NRF_ERROR_RESOURCES Not enough BLE role slots available. -+ * Stop one or more currently active roles (Central, Peripheral or Broadcaster) and try again -+ */ -+SVCALL(SD_BLE_GAP_CONNECT, uint32_t, sd_ble_gap_connect(ble_gap_addr_t const *p_peer_addr, ble_gap_scan_params_t const *p_scan_params, ble_gap_conn_params_t const *p_conn_params)); -+ -+ -+/**@brief Cancel a connection establishment. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_CENTRAL_CONN_MSC} -+ * @endmscs -+ * -+ * @retval ::NRF_SUCCESS Successfully cancelled an ongoing connection procedure. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ */ -+SVCALL(SD_BLE_GAP_CONNECT_CANCEL, uint32_t, sd_ble_gap_connect_cancel(void)); -+ -+/** @} */ -+ -+#ifdef __cplusplus -+} -+#endif -+#endif // BLE_GAP_H__ -+ -+/** -+ @} -+*/ -diff -u -r -N a/components/softdevice/s132v3/headers_replacement/ble_gattc.h b/components/softdevice/s132v3/headers_replacement/ble_gattc.h ---- a/components/softdevice/s132v3/headers_replacement/ble_gattc.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v3/headers_replacement/ble_gattc.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,674 @@ -+/* -+ * Copyright (c) Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form must reproduce the above copyright notice, this -+ * list of conditions and the following disclaimer in the documentation and/or -+ * other materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other -+ * contributors to this software may be used to endorse or promote products -+ * derived from this software without specific prior written permission. -+ * -+ * 4. This software must only be used in a processor manufactured by Nordic -+ * Semiconductor ASA, or in a processor manufactured by a third party that -+ * is used in combination with a processor manufactured by Nordic Semiconductor. -+ * -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ * -+ */ -+ -+/** -+ @addtogroup BLE_GATTC Generic Attribute Profile (GATT) Client -+ @{ -+ @brief Definitions and prototypes for the GATT Client interface. -+ */ -+ -+#ifndef BLE_GATTC_H__ -+#define BLE_GATTC_H__ -+ -+#include "ble_gatt.h" -+#include "ble_types.h" -+#include "ble_ranges.h" -+#include "nrf_svc.h" -+#include "nrf_error.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+ -+/** @addtogroup BLE_GATTC_ENUMERATIONS Enumerations -+ * @{ */ -+ -+/**@brief GATTC API SVC numbers. */ -+enum BLE_GATTC_SVCS -+{ -+ SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER = BLE_GATTC_SVC_BASE, /**< Primary Service Discovery. */ -+ SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, /**< Relationship Discovery. */ -+ SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, /**< Characteristic Discovery. */ -+ SD_BLE_GATTC_DESCRIPTORS_DISCOVER, /**< Characteristic Descriptor Discovery. */ -+ SD_BLE_GATTC_ATTR_INFO_DISCOVER, /**< Attribute Information Discovery. */ -+ SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, /**< Read Characteristic Value by UUID. */ -+ SD_BLE_GATTC_READ, /**< Generic read. */ -+ SD_BLE_GATTC_CHAR_VALUES_READ, /**< Read multiple Characteristic Values. */ -+ SD_BLE_GATTC_WRITE, /**< Generic write. */ -+ SD_BLE_GATTC_HV_CONFIRM, /**< Handle Value Confirmation. */ -+ SD_BLE_GATTC_EXCHANGE_MTU_REQUEST, /**< Exchange MTU Request. */ -+}; -+ -+/** -+ * @brief GATT Client Event IDs. -+ */ -+enum BLE_GATTC_EVTS -+{ -+ BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP = BLE_GATTC_EVT_BASE, /**< Primary Service Discovery Response event. \n See @ref ble_gattc_evt_prim_srvc_disc_rsp_t. */ -+ BLE_GATTC_EVT_REL_DISC_RSP, /**< Relationship Discovery Response event. \n See @ref ble_gattc_evt_rel_disc_rsp_t. */ -+ BLE_GATTC_EVT_CHAR_DISC_RSP, /**< Characteristic Discovery Response event. \n See @ref ble_gattc_evt_char_disc_rsp_t. */ -+ BLE_GATTC_EVT_DESC_DISC_RSP, /**< Descriptor Discovery Response event. \n See @ref ble_gattc_evt_desc_disc_rsp_t. */ -+ BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, /**< Attribute Information Response event. \n See @ref ble_gattc_evt_attr_info_disc_rsp_t. */ -+ BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP, /**< Read By UUID Response event. \n See @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t. */ -+ BLE_GATTC_EVT_READ_RSP, /**< Read Response event. \n See @ref ble_gattc_evt_read_rsp_t. */ -+ BLE_GATTC_EVT_CHAR_VALS_READ_RSP, /**< Read multiple Response event. \n See @ref ble_gattc_evt_char_vals_read_rsp_t. */ -+ BLE_GATTC_EVT_WRITE_RSP, /**< Write Response event. \n See @ref ble_gattc_evt_write_rsp_t. */ -+ BLE_GATTC_EVT_HVX, /**< Handle Value Notification or Indication event. \n Confirm indication with @ref sd_ble_gattc_hv_confirm. \n See @ref ble_gattc_evt_hvx_t. */ -+ BLE_GATTC_EVT_EXCHANGE_MTU_RSP, /**< Exchange MTU Response event. \n See @ref ble_gattc_evt_exchange_mtu_rsp_t. */ -+ BLE_GATTC_EVT_TIMEOUT /**< Timeout event. \n See @ref ble_gattc_evt_timeout_t. */ -+}; -+ -+/** @} */ -+ -+/** @addtogroup BLE_GATTC_DEFINES Defines -+ * @{ */ -+ -+/** @defgroup BLE_ERRORS_GATTC SVC return values specific to GATTC -+ * @{ */ -+#define BLE_ERROR_GATTC_PROC_NOT_PERMITTED (NRF_GATTC_ERR_BASE + 0x000) /**< Procedure not Permitted. */ -+/** @} */ -+ -+/** @defgroup BLE_GATTC_ATTR_INFO_FORMAT Attribute Information Formats -+ * @{ */ -+#define BLE_GATTC_ATTR_INFO_FORMAT_16BIT 1 /**< 16-bit Attribute Information Format. */ -+#define BLE_GATTC_ATTR_INFO_FORMAT_128BIT 2 /**< 128-bit Attribute Information Format. */ -+/** @} */ -+ -+/** @} */ -+ -+/** @addtogroup BLE_GATTC_STRUCTURES Structures -+ * @{ */ -+ -+/**@brief Operation Handle Range. */ -+typedef struct -+{ -+ uint16_t start_handle; /**< Start Handle. */ -+ uint16_t end_handle; /**< End Handle. */ -+} ble_gattc_handle_range_t; -+ -+ -+/**@brief GATT service. */ -+typedef struct -+{ -+ ble_uuid_t uuid; /**< Service UUID. */ -+ ble_gattc_handle_range_t handle_range; /**< Service Handle Range. */ -+} ble_gattc_service_t; -+ -+ -+/**@brief GATT include. */ -+typedef struct -+{ -+ uint16_t handle; /**< Include Handle. */ -+ ble_gattc_service_t included_srvc; /**< Handle of the included service. */ -+} ble_gattc_include_t; -+ -+ -+/**@brief GATT characteristic. */ -+typedef struct -+{ -+ ble_uuid_t uuid; /**< Characteristic UUID. */ -+ ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ -+ uint8_t char_ext_props : 1; /**< Extended properties present. */ -+ uint16_t handle_decl; /**< Handle of the Characteristic Declaration. */ -+ uint16_t handle_value; /**< Handle of the Characteristic Value. */ -+} ble_gattc_char_t; -+ -+ -+/**@brief GATT descriptor. */ -+typedef struct -+{ -+ uint16_t handle; /**< Descriptor Handle. */ -+ ble_uuid_t uuid; /**< Descriptor UUID. */ -+} ble_gattc_desc_t; -+ -+ -+/**@brief Write Parameters. */ -+typedef struct -+{ -+ uint8_t write_op; /**< Write Operation to be performed, see @ref BLE_GATT_WRITE_OPS. */ -+ uint8_t flags; /**< Flags, see @ref BLE_GATT_EXEC_WRITE_FLAGS. */ -+ uint16_t handle; /**< Handle to the attribute to be written. */ -+ uint16_t offset; /**< Offset in bytes. @note For WRITE_CMD and WRITE_REQ, offset must be 0. */ -+ uint16_t len; /**< Length of data in bytes. */ -+ uint8_t const *p_value; /**< Pointer to the value data. */ -+} ble_gattc_write_params_t; -+ -+/**@brief Attribute Information for 16-bit Attribute UUID. */ -+typedef struct -+{ -+ uint16_t handle; /**< Attribute handle. */ -+ ble_uuid_t uuid; /**< 16-bit Attribute UUID. */ -+} ble_gattc_attr_info16_t; -+ -+/**@brief Attribute Information for 128-bit Attribute UUID. */ -+typedef struct -+{ -+ uint16_t handle; /**< Attribute handle. */ -+ ble_uuid128_t uuid; /**< 128-bit Attribute UUID. */ -+} ble_gattc_attr_info128_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP. */ -+typedef struct -+{ -+ uint16_t count; /**< Service count. */ -+ ble_gattc_service_t services[1]; /**< Service data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+} ble_gattc_evt_prim_srvc_disc_rsp_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_REL_DISC_RSP. */ -+typedef struct -+{ -+ uint16_t count; /**< Include count. */ -+ ble_gattc_include_t includes[1]; /**< Include data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+} ble_gattc_evt_rel_disc_rsp_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_DISC_RSP. */ -+typedef struct -+{ -+ uint16_t count; /**< Characteristic count. */ -+ ble_gattc_char_t chars[1]; /**< Characteristic data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+} ble_gattc_evt_char_disc_rsp_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_DESC_DISC_RSP. */ -+typedef struct -+{ -+ uint16_t count; /**< Descriptor count. */ -+ ble_gattc_desc_t descs[1]; /**< Descriptor data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+} ble_gattc_evt_desc_disc_rsp_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP. */ -+typedef struct -+{ -+ uint16_t count; /**< Attribute count. */ -+ uint8_t format; /**< Attribute information format, see @ref BLE_GATTC_ATTR_INFO_FORMAT. */ -+ union { -+ ble_gattc_attr_info16_t attr_info16[1]; /**< Attribute information for 16-bit Attribute UUID. -+ @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+ ble_gattc_attr_info128_t attr_info128[1]; /**< Attribute information for 128-bit Attribute UUID. -+ @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+ } info; /**< Attribute information union. */ -+} ble_gattc_evt_attr_info_disc_rsp_t; -+ -+/**@brief GATT read by UUID handle value pair. */ -+typedef struct -+{ -+ uint16_t handle; /**< Attribute Handle. */ -+ uint8_t *p_value; /**< Pointer to the Attribute Value, length is available in @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t::value_len. */ -+} ble_gattc_handle_value_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP. */ -+typedef struct -+{ -+ uint16_t count; /**< Handle-Value Pair Count. */ -+ uint16_t value_len; /**< Length of the value in Handle-Value(s) list. */ -+ uint8_t handle_value[1]; /**< Handle-Value(s) list. To iterate through the list use @ref sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter. -+ @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+} ble_gattc_evt_char_val_by_uuid_read_rsp_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_READ_RSP. */ -+typedef struct -+{ -+ uint16_t handle; /**< Attribute Handle. */ -+ uint16_t offset; /**< Offset of the attribute data. */ -+ uint16_t len; /**< Attribute data length. */ -+ uint8_t data[1]; /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+} ble_gattc_evt_read_rsp_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP. */ -+typedef struct -+{ -+ uint16_t len; /**< Concatenated Attribute values length. */ -+ uint8_t values[1]; /**< Attribute values. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+} ble_gattc_evt_char_vals_read_rsp_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_WRITE_RSP. */ -+typedef struct -+{ -+ uint16_t handle; /**< Attribute Handle. */ -+ uint8_t write_op; /**< Type of write operation, see @ref BLE_GATT_WRITE_OPS. */ -+ uint16_t offset; /**< Data offset. */ -+ uint16_t len; /**< Data length. */ -+ uint8_t data[1]; /**< Data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+} ble_gattc_evt_write_rsp_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_HVX. */ -+typedef struct -+{ -+ uint16_t handle; /**< Handle to which the HVx operation applies. */ -+ uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ -+ uint16_t len; /**< Attribute data length. */ -+ uint8_t data[1]; /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+} ble_gattc_evt_hvx_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. */ -+typedef struct -+{ -+ uint16_t server_rx_mtu; /**< Server RX MTU size. */ -+} ble_gattc_evt_exchange_mtu_rsp_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_TIMEOUT. */ -+typedef struct -+{ -+ uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ -+} ble_gattc_evt_timeout_t; -+ -+/**@brief GATTC event structure. */ -+typedef struct -+{ -+ uint16_t conn_handle; /**< Connection Handle on which event occured. */ -+ uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ -+ uint16_t error_handle; /**< In case of error: The handle causing the error. In all other cases @ref BLE_GATT_HANDLE_INVALID. */ -+ union -+ { -+ ble_gattc_evt_prim_srvc_disc_rsp_t prim_srvc_disc_rsp; /**< Primary Service Discovery Response Event Parameters. */ -+ ble_gattc_evt_rel_disc_rsp_t rel_disc_rsp; /**< Relationship Discovery Response Event Parameters. */ -+ ble_gattc_evt_char_disc_rsp_t char_disc_rsp; /**< Characteristic Discovery Response Event Parameters. */ -+ ble_gattc_evt_desc_disc_rsp_t desc_disc_rsp; /**< Descriptor Discovery Response Event Parameters. */ -+ ble_gattc_evt_char_val_by_uuid_read_rsp_t char_val_by_uuid_read_rsp; /**< Characteristic Value Read by UUID Response Event Parameters. */ -+ ble_gattc_evt_read_rsp_t read_rsp; /**< Read Response Event Parameters. */ -+ ble_gattc_evt_char_vals_read_rsp_t char_vals_read_rsp; /**< Characteristic Values Read Response Event Parameters. */ -+ ble_gattc_evt_write_rsp_t write_rsp; /**< Write Response Event Parameters. */ -+ ble_gattc_evt_hvx_t hvx; /**< Handle Value Notification/Indication Event Parameters. */ -+ ble_gattc_evt_exchange_mtu_rsp_t exchange_mtu_rsp; /**< Exchange MTU Response Event Parameters. */ -+ ble_gattc_evt_timeout_t timeout; /**< Timeout Event Parameters. */ -+ ble_gattc_evt_attr_info_disc_rsp_t attr_info_disc_rsp; /**< Attribute Information Discovery Event Parameters. */ -+ } params; /**< Event Parameters. @note Only valid if @ref gatt_status == @ref BLE_GATT_STATUS_SUCCESS. */ -+} ble_gattc_evt_t; -+/** @} */ -+ -+/** @addtogroup BLE_GATTC_FUNCTIONS Functions -+ * @{ */ -+ -+/**@brief Initiate or continue a GATT Primary Service Discovery procedure. -+ * -+ * @details This function initiates or resumes a Primary Service discovery procedure, starting from the supplied handle. -+ * If the last service has not been reached, this function must be called again with an updated start handle value to continue the search. -+ * -+ * @note If any of the discovered services have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with -+ * type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. -+ * -+ * @events -+ * @event{@ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTC_PRIM_SRVC_DISC_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] start_handle Handle to start searching from. -+ * @param[in] p_srvc_uuid Pointer to the service UUID to be found. If it is NULL, all primary services will be returned. -+ * -+ * @retval ::NRF_SUCCESS Successfully started or resumed the Primary Service Discovery procedure. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. -+ */ -+SVCALL(SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER, uint32_t, sd_ble_gattc_primary_services_discover(uint16_t conn_handle, uint16_t start_handle, ble_uuid_t const *p_srvc_uuid)); -+ -+ -+/**@brief Initiate or continue a GATT Relationship Discovery procedure. -+ * -+ * @details This function initiates or resumes the Find Included Services sub-procedure. If the last included service has not been reached, -+ * this must be called again with an updated handle range to continue the search. -+ * -+ * @events -+ * @event{@ref BLE_GATTC_EVT_REL_DISC_RSP} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTC_REL_DISC_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. -+ * -+ * @retval ::NRF_SUCCESS Successfully started or resumed the Relationship Discovery procedure. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. -+ */ -+SVCALL(SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, uint32_t, sd_ble_gattc_relationships_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); -+ -+ -+/**@brief Initiate or continue a GATT Characteristic Discovery procedure. -+ * -+ * @details This function initiates or resumes a Characteristic discovery procedure. If the last Characteristic has not been reached, -+ * this must be called again with an updated handle range to continue the discovery. -+ * -+ * @note If any of the discovered characteristics have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with -+ * type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. -+ * -+ * @events -+ * @event{@ref BLE_GATTC_EVT_CHAR_DISC_RSP} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTC_CHAR_DISC_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. -+ * -+ * @retval ::NRF_SUCCESS Successfully started or resumed the Characteristic Discovery procedure. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. -+ */ -+SVCALL(SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, uint32_t, sd_ble_gattc_characteristics_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); -+ -+ -+/**@brief Initiate or continue a GATT Characteristic Descriptor Discovery procedure. -+ * -+ * @details This function initiates or resumes a Characteristic Descriptor discovery procedure. If the last Descriptor has not been reached, -+ * this must be called again with an updated handle range to continue the discovery. -+ * -+ * @events -+ * @event{@ref BLE_GATTC_EVT_DESC_DISC_RSP} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTC_DESC_DISC_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] p_handle_range A pointer to the range of handles of the Characteristic to perform this procedure on. -+ * -+ * @retval ::NRF_SUCCESS Successfully started or resumed the Descriptor Discovery procedure. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. -+ */ -+SVCALL(SD_BLE_GATTC_DESCRIPTORS_DISCOVER, uint32_t, sd_ble_gattc_descriptors_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); -+ -+ -+/**@brief Initiate or continue a GATT Read using Characteristic UUID procedure. -+ * -+ * @details This function initiates or resumes a Read using Characteristic UUID procedure. If the last Characteristic has not been reached, -+ * this must be called again with an updated handle range to continue the discovery. -+ * -+ * @events -+ * @event{@ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTC_READ_UUID_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] p_uuid Pointer to a Characteristic value UUID to read. -+ * @param[in] p_handle_range A pointer to the range of handles to perform this procedure on. -+ * -+ * @retval ::NRF_SUCCESS Successfully started or resumed the Read using Characteristic UUID procedure. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. -+ */ -+SVCALL(SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, uint32_t, sd_ble_gattc_char_value_by_uuid_read(uint16_t conn_handle, ble_uuid_t const *p_uuid, ble_gattc_handle_range_t const *p_handle_range)); -+ -+ -+/**@brief Initiate or continue a GATT Read (Long) Characteristic or Descriptor procedure. -+ * -+ * @details This function initiates or resumes a GATT Read (Long) Characteristic or Descriptor procedure. If the Characteristic or Descriptor -+ * to be read is longer than ATT_MTU - 1, this function must be called multiple times with appropriate offset to read the -+ * complete value. -+ * -+ * @events -+ * @event{@ref BLE_GATTC_EVT_READ_RSP} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTC_VALUE_READ_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] handle The handle of the attribute to be read. -+ * @param[in] offset Offset into the attribute value to be read. -+ * -+ * @retval ::NRF_SUCCESS Successfully started or resumed the Read (Long) procedure. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. -+ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. -+ */ -+SVCALL(SD_BLE_GATTC_READ, uint32_t, sd_ble_gattc_read(uint16_t conn_handle, uint16_t handle, uint16_t offset)); -+ -+ -+/**@brief Initiate a GATT Read Multiple Characteristic Values procedure. -+ * -+ * @details This function initiates a GATT Read Multiple Characteristic Values procedure. -+ * -+ * @events -+ * @event{@ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTC_READ_MULT_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] p_handles A pointer to the handle(s) of the attribute(s) to be read. -+ * @param[in] handle_count The number of handles in p_handles. -+ * -+ * @retval ::NRF_SUCCESS Successfully started the Read Multiple Characteristic Values procedure. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. -+ */ -+SVCALL(SD_BLE_GATTC_CHAR_VALUES_READ, uint32_t, sd_ble_gattc_char_values_read(uint16_t conn_handle, uint16_t const *p_handles, uint16_t handle_count)); -+ -+ -+/**@brief Perform a Write (Characteristic Value or Descriptor, with or without response, signed or not, long or reliable) procedure. -+ * -+ * @details This function can perform all write procedures described in GATT. -+ * -+ * @note It is important to note that a write without response will consume an application buffer, and will therefore -+ * generate a @ref BLE_EVT_TX_COMPLETE event when the packet has been transmitted. A write (with response) on the other hand will use the -+ * standard client internal buffer and thus will only generate a @ref BLE_GATTC_EVT_WRITE_RSP event as soon as the write response -+ * has been received from the peer. Please see the documentation of @ref sd_ble_tx_packet_count_get for more details. -+ * -+ * @events -+ * @event{@ref BLE_GATTC_EVT_WRITE_RSP, Generated when using write request or queued writes.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTC_VALUE_WRITE_MSC} -+ * @mmsc{@ref BLE_GATTC_VALUE_LONG_WRITE_MSC} -+ * @mmsc{@ref BLE_GATTC_VALUE_RELIABLE_WRITE_MSC} -+ * @mmsc{@ref BLE_COMMON_APP_BUFF_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] p_write_params A pointer to a write parameters structure. -+ * -+ * @retval ::NRF_SUCCESS Successfully started the Write procedure. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. -+ * @retval ::NRF_ERROR_BUSY Procedure already in progress. -+ * @retval ::BLE_ERROR_NO_TX_PACKETS No available application packets for this connection. -+ */ -+SVCALL(SD_BLE_GATTC_WRITE, uint32_t, sd_ble_gattc_write(uint16_t conn_handle, ble_gattc_write_params_t const *p_write_params)); -+ -+ -+/**@brief Send a Handle Value Confirmation to the GATT Server. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTC_HVI_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] handle The handle of the attribute in the indication. -+ * -+ * @retval ::NRF_SUCCESS Successfully queued the Handle Value Confirmation for transmission. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no Indication pending to be confirmed. -+ * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle. -+ */ -+SVCALL(SD_BLE_GATTC_HV_CONFIRM, uint32_t, sd_ble_gattc_hv_confirm(uint16_t conn_handle, uint16_t handle)); -+ -+/**@brief Discovers information about a range of attributes on a GATT server. -+ * -+ * @events -+ * @event{@ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, Generated when information about a range of attributes has been received.} -+ * @endevents -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] p_handle_range The range of handles to request information about. -+ * -+ * @retval ::NRF_SUCCESS Successfully started an attribute information discovery procedure. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. -+ */ -+SVCALL(SD_BLE_GATTC_ATTR_INFO_DISCOVER, uint32_t, sd_ble_gattc_attr_info_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * p_handle_range)); -+ -+/**@brief Start an ATT_MTU exchange by sending an Exchange MTU Request to the server. -+ * -+ * @details The SoftDevice sets ATT_MTU to the minimum of: -+ * - The Client RX MTU value, and -+ * - The Server RX MTU value from @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. -+ * -+ * However, the SoftDevice never sets ATT_MTU lower than @ref GATT_MTU_SIZE_DEFAULT. -+ * -+ * @events -+ * @event{@ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP} -+ * @event{@ref BLE_EVT_DATA_LENGTH_CHANGED, Generated if a data length update procedure is performed after the ATT_MTU exchange.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTC_MTU_EXCHANGE} -+ * @endmscs -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] client_rx_mtu Client RX MTU size. -+ * - The minimum value is @ref GATT_MTU_SIZE_DEFAULT. -+ * - The maximum value is @ref ble_gatt_enable_params_t::att_mtu. -+ * - The value must be equal to Server RX MTU size given in @ref sd_ble_gatts_exchange_mtu_reply -+ * if an ATT_MTU exchange has already been performed in the other direction. -+ * -+ * @retval ::NRF_SUCCESS Successfully sent request to the server. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state or an ATT_MTU exchange was already requested once. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid Client RX MTU size supplied. -+ * @retval ::NRF_ERROR_BUSY Client procedure already in progress. -+ */ -+SVCALL(SD_BLE_GATTC_EXCHANGE_MTU_REQUEST, uint32_t, sd_ble_gattc_exchange_mtu_request(uint16_t conn_handle, uint16_t client_rx_mtu)); -+ -+/**@brief Iterate through Handle-Value(s) list in @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. -+ * -+ * @param[in] p_gattc_evt Pointer to event buffer containing @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. -+ * @note If the buffer contains different event, behavior is undefined. -+ * @param[in,out] p_iter Iterator, points to @ref ble_gattc_handle_value_t structure that will be filled in with -+ * the next Handle-Value pair in each iteration. If the function returns other than -+ * @ref NRF_SUCCESS, it will not be changed. -+ * - To start iteration, initialize the structure to zero. -+ * - To continue, pass the value from previous iteration. -+ * -+ * \code -+ * ble_gattc_handle_value_t iter; -+ * memset(&iter, 0, sizeof(ble_gattc_handle_value_t)); -+ * while (sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(&ble_evt.evt.gattc_evt, &iter) == NRF_SUCCESS) -+ * { -+ * app_handle = iter.handle; -+ * memcpy(app_value, iter.p_value, ble_evt.evt.gattc_evt.params.char_val_by_uuid_read_rsp.value_len); -+ * } -+ * \endcode -+ * -+ * @retval ::NRF_SUCCESS Successfully retrieved the next Handle-Value pair. -+ * @retval ::NRF_ERROR_NOT_FOUND No more Handle-Value pairs available in the list. -+ */ -+ -+#ifndef __STATIC_INLINE -+#define __STATIC_INLINE static inline -+#endif -+#if (__LINT__ != 1) -+__STATIC_INLINE uint32_t sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(ble_gattc_evt_t *p_gattc_evt, ble_gattc_handle_value_t *p_iter); -+#endif // #ifdef (__LINT__ != 1) -+ -+ -+#ifndef SUPPRESS_INLINE_IMPLEMENTATION -+ -+__STATIC_INLINE uint32_t sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(ble_gattc_evt_t *p_gattc_evt, ble_gattc_handle_value_t *p_iter) -+{ -+ uint32_t value_len = p_gattc_evt->params.char_val_by_uuid_read_rsp.value_len; -+ uint8_t *p_first = p_gattc_evt->params.char_val_by_uuid_read_rsp.handle_value; -+ uint8_t *p_next = p_iter->p_value ? p_iter->p_value + value_len : p_first; -+ -+ if ((p_next - p_first) / (sizeof(uint16_t) + value_len) < p_gattc_evt->params.char_val_by_uuid_read_rsp.count) -+ { -+ p_iter->handle = (uint16_t)p_next[1] << 8 | p_next[0]; -+ p_iter->p_value = p_next + sizeof(uint16_t); -+ return NRF_SUCCESS; -+ } -+ else -+ { -+ return NRF_ERROR_NOT_FOUND; -+ } -+} -+ -+#endif // #ifndef SUPPRESS_INLINE_IMPLEMENTATION -+ -+/** @} */ -+ -+#ifdef __cplusplus -+} -+#endif -+#endif /* BLE_GATTC_H__ */ -+ -+/** -+ @} -+*/ -diff -u -r -N a/components/softdevice/s132v3/headers_replacement/nrf_nvic.h b/components/softdevice/s132v3/headers_replacement/nrf_nvic.h ---- a/components/softdevice/s132v3/headers_replacement/nrf_nvic.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v3/headers_replacement/nrf_nvic.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,546 @@ -+/* -+ * Copyright (c) Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form must reproduce the above copyright notice, this -+ * list of conditions and the following disclaimer in the documentation and/or -+ * other materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of other -+ * contributors to this software may be used to endorse or promote products -+ * derived from this software without specific prior written permission. -+ * -+ * 4. This software must only be used in a processor manufactured by Nordic -+ * Semiconductor ASA, or in a processor manufactured by a third party that -+ * is used in combination with a processor manufactured by Nordic Semiconductor. -+ * -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ * -+ */ -+/** -+ * @defgroup nrf_nvic_api SoftDevice NVIC API -+ * @{ -+ * -+ * @note In order to use this module, the following code has to be added to a .c file: -+ * \code -+ * nrf_nvic_state_t nrf_nvic_state = {0}; -+ * \endcode -+ * -+ * @note Definitions and declarations starting with __ (double underscore) in this header file are -+ * not intended for direct use by the application. -+ * -+ * @brief APIs for the accessing NVIC when using a SoftDevice. -+ * -+ */ -+ -+#ifndef NRF_NVIC_H__ -+#define NRF_NVIC_H__ -+ -+#include -+#include "nrf.h" -+ -+#include "nrf_error_soc.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+ -+/**@addtogroup NRF_NVIC_DEFINES Defines -+ * @{ */ -+ -+/**@defgroup NRF_NVIC_ISER_DEFINES SoftDevice NVIC internal definitions -+ * @{ */ -+ -+#define __NRF_NVIC_NVMC_IRQn (30) /**< The peripheral ID of the NVMC. IRQ numbers are used to identify peripherals, but the NVMC doesn't have an IRQ number in the MDK. */ -+ -+#ifdef NRF51 -+ #define __NRF_NVIC_ISER_COUNT (1) /**< The number of ISER/ICER registers in the NVIC that are used. */ -+ -+ /**@brief Interrupts used by the SoftDevice. */ -+ #define __NRF_NVIC_SD_IRQS_0 ((uint32_t)( \ -+ (1U << POWER_CLOCK_IRQn) \ -+ | (1U << RADIO_IRQn) \ -+ | (1U << RTC0_IRQn) \ -+ | (1U << TIMER0_IRQn) \ -+ | (1U << RNG_IRQn) \ -+ | (1U << ECB_IRQn) \ -+ | (1U << CCM_AAR_IRQn) \ -+ | (1U << TEMP_IRQn) \ -+ | (1U << __NRF_NVIC_NVMC_IRQn) \ -+ | (1U << (uint32_t)SWI4_IRQn) \ -+ | (1U << (uint32_t)SWI5_IRQn) \ -+ )) -+ -+ /**@brief Interrupts available for to application. */ -+ #define __NRF_NVIC_APP_IRQS_0 (~__NRF_NVIC_SD_IRQS_0) -+#endif -+ -+#if (defined(NRF52) || defined(NRF52840_XXAA)) -+ #define __NRF_NVIC_ISER_COUNT (2) /**< The number of ISER/ICER registers in the NVIC that are used. */ -+ -+ /**@brief Interrupts used by the SoftDevice. */ -+ #define __NRF_NVIC_SD_IRQS_0 ((uint32_t)( \ -+ (1U << POWER_CLOCK_IRQn) \ -+ | (1U << RADIO_IRQn) \ -+ | (1U << RTC0_IRQn) \ -+ | (1U << TIMER0_IRQn) \ -+ | (1U << RNG_IRQn) \ -+ | (1U << ECB_IRQn) \ -+ | (1U << CCM_AAR_IRQn) \ -+ | (1U << TEMP_IRQn) \ -+ | (1U << __NRF_NVIC_NVMC_IRQn) \ -+ | (1U << (uint32_t)SWI4_EGU4_IRQn) \ -+ | (1U << (uint32_t)SWI5_EGU5_IRQn) \ -+ )) -+ #define __NRF_NVIC_SD_IRQS_1 ((uint32_t)0) -+ -+ /**@brief Interrupts available for to application. */ -+ #define __NRF_NVIC_APP_IRQS_0 (~__NRF_NVIC_SD_IRQS_0) -+ #define __NRF_NVIC_APP_IRQS_1 (~__NRF_NVIC_SD_IRQS_1) -+#endif -+/**@} */ -+ -+/**@} */ -+ -+/**@addtogroup NRF_NVIC_VARIABLES Variables -+ * @{ */ -+ -+/**@brief Type representing the state struct for the SoftDevice NVIC module. */ -+typedef struct -+{ -+ uint32_t volatile __irq_masks[__NRF_NVIC_ISER_COUNT]; /**< IRQs enabled by the application in the NVIC. */ -+ uint32_t volatile __cr_flag; /**< Non-zero if already in a critical region */ -+} nrf_nvic_state_t; -+ -+/**@brief Variable keeping the state for the SoftDevice NVIC module. This must be declared in an -+ * application source file. */ -+extern nrf_nvic_state_t nrf_nvic_state; -+ -+ -+/**@} */ -+ -+#if (__LINT__ != 1) -+ -+/**@addtogroup NRF_NVIC_INTERNAL_FUNCTIONS SoftDevice NVIC internal functions -+ * @{ */ -+ -+/**@brief Disables IRQ interrupts globally, including the SoftDevice's interrupts. -+ * -+ * @retval The value of PRIMASK prior to disabling the interrupts. -+ */ -+__STATIC_INLINE int __sd_nvic_irq_disable(void); -+ -+ -+/**@brief Enables IRQ interrupts globally, including the SoftDevice's interrupts. -+ */ -+__STATIC_INLINE void __sd_nvic_irq_enable(void); -+ -+ -+/**@brief Checks if IRQn is available to application -+ * @param[in] IRQn irq to check -+ * -+ * @retval 1 (true) if the irq to check is available to the application -+ */ -+__STATIC_INLINE uint32_t __sd_nvic_app_accessible_irq(IRQn_Type IRQn); -+ -+ -+/**@brief Checks if IRQn is available to application -+ * @param[in] priority priority to check -+ * -+ * @retval 1 (true) if the priority to check is available to the application -+ */ -+__STATIC_INLINE uint32_t __sd_nvic_is_app_accessible_priority(uint32_t priority); -+ -+ -+/**@} */ -+ -+ -+/**@addtogroup NRF_NVIC_FUNCTIONS SoftDevice NVIC public functions -+ * @{ */ -+ -+/**@brief Enable External Interrupt. -+ * @note Corresponds to NVIC_EnableIRQ in CMSIS. -+ * -+ * @pre IRQn is valid and not reserved by the stack. -+ * -+ * @param[in] IRQn See the NVIC_EnableIRQ documentation in CMSIS. -+ * -+ * @retval ::NRF_SUCCESS The interrupt was enabled. -+ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. -+ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt has a priority not available for the application. -+ */ -+__STATIC_INLINE uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn); -+ -+ -+/**@brief Disable External Interrupt. -+ * @note Corresponds to NVIC_DisableIRQ in CMSIS. -+ * -+ * @pre IRQn is valid and not reserved by the stack. -+ * -+ * @param[in] IRQn See the NVIC_DisableIRQ documentation in CMSIS. -+ * -+ * @retval ::NRF_SUCCESS The interrupt was disabled. -+ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. -+ */ -+__STATIC_INLINE uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn); -+ -+ -+/**@brief Get Pending Interrupt. -+ * @note Corresponds to NVIC_GetPendingIRQ in CMSIS. -+ * -+ * @pre IRQn is valid and not reserved by the stack. -+ * -+ * @param[in] IRQn See the NVIC_GetPendingIRQ documentation in CMSIS. -+ * @param[out] p_pending_irq Return value from NVIC_GetPendingIRQ. -+ * -+ * @retval ::NRF_SUCCESS The interrupt is available for the application. -+ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. -+ */ -+__STATIC_INLINE uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq); -+ -+ -+/**@brief Set Pending Interrupt. -+ * @note Corresponds to NVIC_SetPendingIRQ in CMSIS. -+ * -+ * @pre IRQn is valid and not reserved by the stack. -+ * -+ * @param[in] IRQn See the NVIC_SetPendingIRQ documentation in CMSIS. -+ * -+ * @retval ::NRF_SUCCESS The interrupt is set pending. -+ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. -+ */ -+__STATIC_INLINE uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn); -+ -+ -+/**@brief Clear Pending Interrupt. -+ * @note Corresponds to NVIC_ClearPendingIRQ in CMSIS. -+ * -+ * @pre IRQn is valid and not reserved by the stack. -+ * -+ * @param[in] IRQn See the NVIC_ClearPendingIRQ documentation in CMSIS. -+ * -+ * @retval ::NRF_SUCCESS The interrupt pending flag is cleared. -+ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. -+ */ -+__STATIC_INLINE uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn); -+ -+ -+/**@brief Set Interrupt Priority. -+ * @note Corresponds to NVIC_SetPriority in CMSIS. -+ * -+ * @pre IRQn is valid and not reserved by the stack. -+ * @pre Priority is valid and not reserved by the stack. -+ * -+ * @param[in] IRQn See the NVIC_SetPriority documentation in CMSIS. -+ * @param[in] priority A valid IRQ priority for use by the application. -+ * -+ * @retval ::NRF_SUCCESS The interrupt and priority level is available for the application. -+ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. -+ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt priority is not available for the application. -+ */ -+__STATIC_INLINE uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority); -+ -+ -+/**@brief Get Interrupt Priority. -+ * @note Corresponds to NVIC_GetPriority in CMSIS. -+ * -+ * @pre IRQn is valid and not reserved by the stack. -+ * -+ * @param[in] IRQn See the NVIC_GetPriority documentation in CMSIS. -+ * @param[out] p_priority Return value from NVIC_GetPriority. -+ * -+ * @retval ::NRF_SUCCESS The interrupt priority is returned in p_priority. -+ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE - IRQn is not available for the application. -+ */ -+__STATIC_INLINE uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority); -+ -+ -+/**@brief System Reset. -+ * @note Corresponds to NVIC_SystemReset in CMSIS. -+ * -+ * @retval ::NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN -+ */ -+__STATIC_INLINE uint32_t sd_nvic_SystemReset(void); -+ -+ -+/**@brief Enters critical region. -+ * -+ * @post Application interrupts will be disabled. -+ * @note sd_nvic_critical_region_enter() and ::sd_nvic_critical_region_exit() must be called in matching pairs inside each -+ * execution context -+ * @sa sd_nvic_critical_region_exit -+ * -+ * @param[out] p_is_nested_critical_region If 1, the application is now in a nested critical region. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+__STATIC_INLINE uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region); -+ -+ -+/**@brief Exit critical region. -+ * -+ * @pre Application has entered a critical region using ::sd_nvic_critical_region_enter. -+ * @post If not in a nested critical region, the application interrupts will restored to the state before ::sd_nvic_critical_region_enter was called. -+ * -+ * @param[in] is_nested_critical_region If this is set to 1, the critical region won't be exited. @sa sd_nvic_critical_region_enter. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+__STATIC_INLINE uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region); -+ -+#endif //#if (__LINT__ != 1) -+ -+/**@} */ -+ -+#ifndef SUPPRESS_INLINE_IMPLEMENTATION -+ -+__STATIC_INLINE int __sd_nvic_irq_disable(void) -+{ -+ int pm = __get_PRIMASK(); -+ __disable_irq(); -+ return pm; -+} -+ -+__STATIC_INLINE void __sd_nvic_irq_enable(void) -+{ -+ __enable_irq(); -+} -+ -+ -+__STATIC_INLINE uint32_t __sd_nvic_app_accessible_irq(IRQn_Type IRQn) -+{ -+ if (IRQn < 32) -+ { -+ return ((1UL<= (1 << __NVIC_PRIO_BITS)) -+ { -+ return 0; -+ } -+#ifdef NRF51 -+ if ( priority == 0 -+ || priority == 2 -+ ) -+ { -+ return 0; -+ } -+#endif -+#if (defined(NRF52) || defined(NRF52840_XXAA)) -+ if ( priority == 0 -+ || priority == 1 -+ || priority == 4 -+ || priority == 5 -+ ) -+ { -+ return 0; -+ } -+#endif -+ return 1; -+} -+ -+__STATIC_INLINE uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn) -+{ -+ if (!__sd_nvic_app_accessible_irq(IRQn)) -+ { -+ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; -+ } -+ if (!__sd_nvic_is_app_accessible_priority(NVIC_GetPriority(IRQn))) -+ { -+ return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED; -+ } -+ -+ if (nrf_nvic_state.__cr_flag) -+ { -+ nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] |= (uint32_t)(1 << ((uint32_t)((int32_t)IRQn) & (uint32_t)0x1F)); -+ } -+ else -+ { -+ NVIC_EnableIRQ(IRQn); -+ } -+ return NRF_SUCCESS; -+} -+ -+ -+__STATIC_INLINE uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn) -+{ -+ if (!__sd_nvic_app_accessible_irq(IRQn)) -+ { -+ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; -+ } -+ -+ if (nrf_nvic_state.__cr_flag) -+ { -+ nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] &= ~(1UL << ((uint32_t)(IRQn) & 0x1F)); -+ } -+ else -+ { -+ NVIC_DisableIRQ(IRQn); -+ } -+ -+ return NRF_SUCCESS; -+} -+ -+__STATIC_INLINE uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq) -+{ -+ if (__sd_nvic_app_accessible_irq(IRQn)) -+ { -+ *p_pending_irq = NVIC_GetPendingIRQ(IRQn); -+ return NRF_SUCCESS; -+ } -+ else -+ { -+ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; -+ } -+} -+ -+__STATIC_INLINE uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn) -+{ -+ if (__sd_nvic_app_accessible_irq(IRQn)) -+ { -+ NVIC_SetPendingIRQ(IRQn); -+ return NRF_SUCCESS; -+ } -+ else -+ { -+ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; -+ } -+} -+ -+ -+__STATIC_INLINE uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn) -+{ -+ if (__sd_nvic_app_accessible_irq(IRQn)) -+ { -+ NVIC_ClearPendingIRQ(IRQn); -+ return NRF_SUCCESS; -+ } -+ else -+ { -+ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; -+ } -+} -+ -+__STATIC_INLINE uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority) -+{ -+ if (!__sd_nvic_app_accessible_irq(IRQn)) -+ { -+ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; -+ } -+ -+ if (!__sd_nvic_is_app_accessible_priority(priority)) -+ { -+ return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED; -+ } -+ -+ NVIC_SetPriority(IRQn, (uint32_t)priority); -+ return NRF_SUCCESS; -+} -+ -+ -+__STATIC_INLINE uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority) -+{ -+ if (__sd_nvic_app_accessible_irq(IRQn)) -+ { -+ *p_priority = (NVIC_GetPriority(IRQn) & 0xFF); -+ return NRF_SUCCESS; -+ } -+ else -+ { -+ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; -+ } -+} -+ -+ -+__STATIC_INLINE uint32_t sd_nvic_SystemReset(void) -+{ -+ NVIC_SystemReset(); -+ return NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN; -+} -+ -+ -+__STATIC_INLINE uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region) -+{ -+ int was_masked = __sd_nvic_irq_disable(); -+ if (!nrf_nvic_state.__cr_flag) -+ { -+ nrf_nvic_state.__cr_flag = 1; -+ nrf_nvic_state.__irq_masks[0] = ( NVIC->ICER[0] & __NRF_NVIC_APP_IRQS_0 ); -+ NVIC->ICER[0] = __NRF_NVIC_APP_IRQS_0; -+ #if (defined(NRF52) || defined(NRF52840_XXAA)) -+ nrf_nvic_state.__irq_masks[1] = ( NVIC->ICER[1] & __NRF_NVIC_APP_IRQS_1 ); -+ NVIC->ICER[1] = __NRF_NVIC_APP_IRQS_1; -+ #endif -+ *p_is_nested_critical_region = 0; -+ } -+ else -+ { -+ *p_is_nested_critical_region = 1; -+ } -+ if (!was_masked) -+ { -+ __sd_nvic_irq_enable(); -+ } -+ return NRF_SUCCESS; -+} -+ -+ -+__STATIC_INLINE uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region) -+{ -+ if (nrf_nvic_state.__cr_flag && (is_nested_critical_region == 0)) -+ { -+ int was_masked = __sd_nvic_irq_disable(); -+ NVIC->ISER[0] = nrf_nvic_state.__irq_masks[0]; -+ #if (defined(NRF52) || defined(NRF52840_XXAA)) -+ NVIC->ISER[1] = nrf_nvic_state.__irq_masks[1]; -+ #endif -+ nrf_nvic_state.__cr_flag = 0; -+ if (!was_masked) -+ { -+ __sd_nvic_irq_enable(); -+ } -+ } -+ -+ return NRF_SUCCESS; -+} -+ -+#endif // #ifdef SUPPRESS_INLINE_IMPLEMENTATION -+ -+#ifdef __cplusplus -+} -+#endif -+ -+#endif // NRF_NVIC_H__ -+ -+/**@} */ -diff -u -r -N a/components/softdevice/s132v3/headers_replacement/test.rb b/components/softdevice/s132v3/headers_replacement/test.rb ---- a/components/softdevice/s132v3/headers_replacement/test.rb 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v3/headers_replacement/test.rb 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,2 @@ -+a = 'xxx const * const*' -+puts a.gsub('const','') -\ No newline at end of file -diff -u -r -N a/components/softdevice/s132v3/hex/s132_nrf52_3.0.0_softdevice.hex b/components/softdevice/s132v3/hex/s132_nrf52_3.0.0_softdevice.hex ---- a/components/softdevice/s132v3/hex/s132_nrf52_3.0.0_softdevice.hex 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v3/hex/s132_nrf52_3.0.0_softdevice.hex 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,7694 @@ -+:020000040000FA -+:1000000000040020E508000079050000C508000094 -+:10001000830500008D05000097050000000000002A -+:1000200000000000000000000000000009090000BE -+:10003000A105000000000000AB050000B5050000B0 -+:10004000BF050000C9050000D3050000DD05000064 -+:10005000E7050000F1050000FB05000005060000B3 -+:100060000F06000019060000230600002D06000000 -+:1000700037060000410600004B0600005506000050 -+:100080005F06000069060000730600007D060000A0 -+:1000900087060000910600009B060000A5060000F0 -+:1000A000AF060000B9060000C3060000CD06000040 -+:1000B000D7060000E1060000EB060000F506000090 -+:1000C000FF06000009070000130700001D070000DD -+:1000D00027070000310700003B070000450700002C -+:1000E0004F07000059070000630700006D0700007C -+:1000F00077070000810700008B07000095070000CC -+:100100009F0700001FB500F003F88DE80F001FBD2A -+:1001100000F0DEBB1FB56FF00100009040100390AF -+:10012000029001904FF010208069000B420900F00E -+:100130001F045DF822300120A04083434DF8223097 -+:10014000684600F044F91FBDF0B54FF6FF734FF459 -+:10015000B4751A466E1E11E0A94201D3344600E080 -+:100160000C46091B30F8027B641E3B441A44F9D14B -+:100170009CB204EB134394B204EB12420029EBD17E -+:1001800098B200EB134002EB124140EA0140F0BD8F -+:10019000DD4992B00446D1E90001CDE91001FF220A -+:1001A0004021684600F03AFB94E80F008DE80F000C -+:1001B000684610A902E004C841F8042D8842FAD12B -+:1001C00010216846FFF7C0FF1090AA208DF8440068 -+:1001D000FFF7A0FF00F0F2F84FF01024A069102202 -+:1001E0006946803000F001F9A069082210A900F0EA -+:1001F000FCF800F0D7F84FF080510A6949690068AF -+:100200004A43824201D8102070470020704710B541 -+:10021000D0E900214FF0805002EB8103026944696C -+:100220006243934209D84FF01022536903EB8103D4 -+:100230000169406941438B4201D9092010BD5069D1 -+:10024000401C01D0002010BD0F2010BD70B501680A -+:100250000446AE4D4FF01020062951D2DFE801F0E0 -+:10026000320318283B1DD4E90265646829463046EC -+:1002700000F0CDF82A462146304600F0B6F8AA0034 -+:100280002146304600F09EFA002800D0032070BDC1 -+:1002900000F050FB4FF4805007E0201DFFF7ABFF4C -+:1002A0000028F4D100F046FB60682860002070BD93 -+:1002B000241D94E80700920000F084FA0028F6D08C -+:1002C0000E2070BD8069401C12D0201DFFF79FFFDB -+:1002D0000028F6D109E08069401C09D0201DFFF7F5 -+:1002E0008AFF0028EDD1606820B12046FFF750FF5B -+:1002F000042070BDFFF70EFF00F060F800F052F828 -+:10030000072070BD10B50C46182802D001200860E7 -+:1003100010BD2068FFF79AFF206010BD4FF0102439 -+:10032000A069401C05D0A569A66980353079AA2846 -+:1003300008D06069401C2DD060690068401C29D03D -+:1003400060692CE010212846FFF7FEFE31688142EB -+:100350001CD1A16901F18002C03105E030B108CAA9 -+:1003600051F8040D984201D1012000E000208A429A -+:10037000F4D158B1286810B1042803D0FEE728460C -+:1003800000F057F861496868086008E000F016F866 -+:1003900000F008F84FF480500168491C01D000F0CB -+:1003A000A3FAFEE7BFF34F8F59480168594A01F499 -+:1003B000E06111430160BFF34F8FFEE74FF0102063 -+:1003C0008169491C02D0806900F0ADB87047524A7B -+:1003D00001681160121D416811604F4A8168103236 -+:1003E0001160111DC068086070472DE9F041174683 -+:1003F0000D460646002406E03046296800F0A6F8BF -+:10040000641C2D1D361DBC42F6D3BDE8F08170B5CD -+:100410000C4605464FF4806608E0284600F083F855 -+:10042000B44205D3A4F5806405F58055002CF4D1C1 -+:1004300070BD4168044609B1012500E000254FF078 -+:1004400010267069A268920000F0BCF9C8B120467D -+:1004500000F01AF89DB17669A56864684FF4002031 -+:1004600084420AD2854208D229463046FFF7CFFFA0 -+:100470002A4621463046FFF7B8FFFFF79FFFFFF7F8 -+:1004800091FFFFF747FEF8E72DE9FF414FF01024F9 -+:10049000616980680D0B01EB800000F6FF70010BB5 -+:1004A00000200090019002900246039068460123CC -+:1004B0000BE0560902F01F0C50F8267003FA0CFCF2 -+:1004C00047EA0C0740F82670521CAA42F1D30AE012 -+:1004D0004A0901F01F0650F8225003FA06F6354388 -+:1004E00040F82250491C8029F2D3A169090B4A091E -+:1004F00001F01F0150F822408B409C4340F82240FD -+:10050000FFF765FFBDE8FF815809000000000020EB -+:100510000CED00E00400FA050006004014480168F4 -+:100520000029FCD07047134A0221116010490B6862 -+:10053000002BFCD00F4B1B1D186008680028FCD056 -+:100540000020106008680028FCD07047094B10B5E7 -+:1005500001221A60064A1468002CFCD00160106861 -+:100560000028FCD00020186010680028FCD010BDC6 -+:1005700000E4014004E5014008208F49096809585A -+:10058000084710208C4909680958084714208A49EF -+:100590000968095808471820874909680958084711 -+:1005A0003020854909680958084738208249096878 -+:1005B000095808473C2080490968095808474020E5 -+:1005C0007D4909680958084744207B49096809584A -+:1005D0000847482078490968095808474C20764957 -+:1005E000096809580847502073490968095808479D -+:1005F0005420714909680958084758206E4909680C -+:10060000095808475C206C49096809580847602068 -+:100610006949096809580847642067490968095801 -+:100620000847682064490968095808476C206249EE -+:1006300009680958084770205F4909680958084740 -+:1006400074205D4909680958084778205A490968A3 -+:10065000095808477C2058490968095808478020EC -+:1006600055490968095808478420534909680958B9 -+:100670000847882050490968095808478C204E4986 -+:1006800009680958084790204B49096809580847E4 -+:10069000942049490968095808479820464909683B -+:1006A000095808479C204449096809580847A02070 -+:1006B0004149096809580847A4203F490968095871 -+:1006C0000847A8203C49096809580847AC203A491E -+:1006D000096809580847B020374909680958084788 -+:1006E000B4203549096809580847B82032490968D3 -+:1006F00009580847BC203049096809580847C020F4 -+:100700002D49096809580847C4202B490968095828 -+:100710000847C8202849096809580847CC202649B5 -+:10072000096809580847D02023490968095808472B -+:10073000D4202149096809580847D8201E4909686A -+:1007400009580847DC201C49096809580847E02077 -+:100750001949096809580847E420174909680958E0 -+:100760000847E8201449096809580847EC2012494D -+:10077000096809580847F0200F49096809580847CF -+:10078000F4200D49096809580847F8200A49096802 -+:1007900009580847FC2008490968095808475FF4C8 -+:1007A0008070054909680958084700000348044952 -+:1007B000024A034B70470000000000206809000057 -+:1007C0006809000040EA010310B59B070FD1042A15 -+:1007D0000DD310C808C9121F9C42F8D020BA19BA0C -+:1007E000884201D9012010BD4FF0FF3010BD1AB171 -+:1007F000D30703D0521C07E0002010BD10F8013BC6 -+:1008000011F8014B1B1B07D110F8013B11F8014BEC -+:100810001B1B01D1921EF1D1184610BD02F0FF033F -+:1008200043EA032242EA024200F005B870477047EB -+:1008300070474FF000020429C0F0128010F0030C42 -+:1008400000F01B80CCF1040CBCF1020F18BF00F8C3 -+:10085000012BA8BF20F8022BA1EB0C0100F00DB872 -+:100860005FEAC17C24BF00F8012B00F8012B48BFD0 -+:1008700000F8012B70474FF0000200B51346944674 -+:100880009646203922BFA0E80C50A0E80C50B1F1E8 -+:100890002001BFF4F7AF090728BFA0E80C5048BFFC -+:1008A0000CC05DF804EB890028BF40F8042B08BF9A -+:1008B000704748BF20F8022B11F0804F18BF00F896 -+:1008C000012B7047014B1B68DB68184700000020B4 -+:1008D00009480A497047FFF7FBFFFFF713FC00BD0B -+:1008E00020BFFDE7064B1847064A1060016881F3F8 -+:1008F0000888406800470000680900006809000097 -+:100900001D030000000000201EF0040F0CBFEFF3D9 -+:100910000881EFF30981886902380078182803D12B -+:1009200000E00000074A1047074A12682C3212689C -+:100930001047000000B5054B1B68054A9B589847B7 -+:1009400000BD000005030000000000205409000065 -+:1009500004000000001000000000000000FFFFFF86 -+:040960000090D00330 -+:1010000048120020D1E001006D9F000041E0010086 -+:101010006D9F00006D9F00006D9F000000000000AC -+:1010200000000000000000000000000029E10100B5 -+:101030006D9F0000000000006D9F00006D9F00008C -+:1010400091E1010097E101006D9F00006D9F00009C -+:101050006D9F00006D9F00006D9F00006D9F000060 -+:101060009DE101006D9F00006D9F0000A3E1010064 -+:101070006D9F0000A9E10100AFE10100B5E10100B1 -+:101080006D9F00006D9F00006D9F00006D9F000030 -+:101090006D9F00006D9F00006D9F00006D9F000020 -+:1010A000BBE10100C1E101006D9F00006D9F0000E8 -+:1010B0006D9F00006D9F00006D9F00006D9F000000 -+:1010C000C7E101006D9F00006D9F00006D9F000053 -+:1010D0006D9F00006D9F00006D9F00006D9F0000E0 -+:1010E0006D9F00006D9F00006D9F00006D9F0000D0 -+:1010F0006D9F00006D9F00006D9F00006D9F0000C0 -+:101100006D9F00006D9F000000F002F81CF0CDFF05 -+:101110000AA090E8000C82448344AAF10107DA4552 -+:1011200001D11CF0C2FFAFF2090EBAE80F0013F0B4 -+:10113000010F18BFFB1A43F001031847BCD501008B -+:10114000DCD501000A4410F8014B14F00F0508BF6C -+:1011500010F8015B240908BF10F8014B6D1E05D083 -+:1011600010F8013B6D1E01F8013BF9D1641E03D05C -+:10117000641E01F8015BFBD19142E4D3704700008B -+:101180000023002400250026103A28BF78C1FBD890 -+:10119000520728BF30C148BF0B6070471FB500F031 -+:1011A0003DF88DE80F001FBD1EF0040F0CBFEFF3DC -+:1011B0000880EFF30980014A10470000BF9D00003E -+:1011C0008269034981614FF00100104470470000BB -+:1011D000D511000001B41EB400B511F043F901B4FB -+:1011E0000198864601BC01B01EBD0000F0B4404627 -+:1011F000494652465B460FB402A0013001B506488D -+:10120000004700BF01BC86460FBC80468946924617 -+:101210009B46F0BC70470000091100001CF042BF63 -+:1012200070B51C4C054608202070A01C00F065F825 -+:101230005920A08029462046BDE8704007F01CB820 -+:1012400010B507F024F813490020891E087010BD5E -+:1012500070B50C460F49891E097829B1A0F16001CB -+:10126000532906D3012011E0602802D043F2010087 -+:101270000CE020CC084E94E80E0006EB8000A0F5B0 -+:101280008050241FD0F8806E2846B047206070BD83 -+:10129000012070470A00002014E2010010B5044646 -+:1012A0000021012000F03FF80021182000F03BF859 -+:1012B00000210B2000F037F80421192000F033F84A -+:1012C00004210D2000F02FF804210E2000F02BF84F -+:1012D00004210F2000F027F80421C84300F023F870 -+:1012E0000721162000F01FF80721152000F01BF839 -+:1012F0002046FFF795FF002010BD8C21018070472C -+:10130000FFF79EBF10487047104A10B514680F4B86 -+:101310000F4A08331A60FFF79BFF0C48001D04605A -+:1013200010BD704770474907090E002806DA00F023 -+:101330000F0000F1E02080F8141D704700F1E0205C -+:1013400080F800147047000003F9004310050240C4 -+:101350000100000130B5F74D044610280AD0112CC9 -+:1013600006D02846122C817806D0132C08D0FFDF37 -+:10137000AC7030BDFFDFFBE71129F9D0FFDFF7E7E5 -+:101380001129F5D0FFDFF3E770B50FF05AFA0446E4 -+:1013900010F030FE201AC4B206200DF02DFC0546D8 -+:1013A00006200DF031FC2E1A07200DF025FC054615 -+:1013B00007200DF029FCDF49281A321888781228F6 -+:1013C0000DD000231A4413280BD0002002440878C3 -+:1013D000022808D000201044201AC0B270BD01239A -+:1013E000F0E70120F2E70120F5E7D24800B50079E7 -+:1013F000D049420897B051F8050F89880CD01722C0 -+:101400008DF80020CDF80200ADF806100BA9684653 -+:101410000AF02BFF17B000BD4022F1E702210DF0CA -+:1014200040BC2DE9F04196B01D4690460E46074659 -+:10143000FFF7F4FF04000BD02078222804D3A07F0C -+:10144000C0F34010A84206D1082016B0BDE8F081D4 -+:1014500043F20200F9E745208DF80000ADF8027074 -+:101460003DB101208DF804008DF805608DF80680EF -+:1014700002E000208DF804000BA968460AF0F5FE92 -+:10148000A07F65F34510A0770020DEE730B5044665 -+:10149000A1F120000D460A284AD2DFE800F0050736 -+:1014A0000C1C2328353A3F44FFDF42E020782028F7 -+:1014B0003FD1FFDF3DE09F480178032939D0807894 -+:1014C000132836D02078242833D0252831D023285B -+:1014D0002FD0FFDF2DE0207822282AD0232828D8FB -+:1014E000FFDF26E02078222823D0FFDF21E02078CC -+:1014F00022281ED024281CD026281AD0272818D00D -+:10150000292816D0FFDF14E02078252811D0FFDF2E -+:101510000FE0207825280CD0FFDF0AE0207825286E -+:1015200007D0FFDF05E02078282802D0FFDF00E0A9 -+:10153000FFDF257030BD30B50B8840F67B444FF699 -+:10154000FF72022801D0934204D09D1FA54224D2ED -+:10155000022802D04D88954203D04D88AD1FA54288 -+:101560001BD24C88A34218D88B88B3F5FA7F14D2CB -+:10157000022802D0C888904205D0C88840F6774536 -+:101580000A38A84209D2C888904208D0944206D0AE -+:101590005B1C6343B3EB800F01DB072030BD0020F1 -+:1015A00030BD70B514460D46064611F0C9F960B954 -+:1015B0000DB1A54201D90C2070BD002409E000BF87 -+:1015C00056F8240011F0BCF908B1102070BD641C5D -+:1015D000E4B2AC42F4D3002070BDF0B50024059D08 -+:1015E00010B1A94203D851E009B90020F0BD09208B -+:1015F000F0BD055D8DB107197E78112E3FD00FDC4F -+:101600000A2E3CD2DFE806F03B1624242A2A2C2C92 -+:101610003333025D72BB641CE4B28C42F9D3E4E75D -+:101620001D2E2CDAA6F11206042E28D2DFE806F0D1 -+:1016300027271018022DDAD1BD781D70072D01D291 -+:101640006D0701D40A20F0BD157845F0010515E0BD -+:10165000EE43F60707E0012D07D010E00620F0BDAD -+:101660002E07A6F18056002EF5D06046F0BD157805 -+:10167000AE0701D50B20F0BD45F002051570055DE4 -+:10168000641C2C44E4B28C4202D9B0E74FF4485CAD -+:101690008C42AED3A9E710B50278540809D00122D4 -+:1016A00043F20223012C07D0022C0DD0032C13D1BE -+:1016B0000FE00020087005E080790324B4EB901F50 -+:1016C0000AD10A70002010BD8079B2EB901F03D1BF -+:1016D000F7E780798009F4D0184610BD154A917B50 -+:1016E00039B1D17B022908D0032908D043F2022066 -+:1016F00070470146101D01F03FBB032100E00121AE -+:1017000001700020704738B50C460546694601F067 -+:1017100033FB00280DD19DF80010207861F34700BD -+:10172000207055F8010FC4F80100A888A4F805003E -+:10173000002038BDB401002038B51378C0B10228AC -+:1017400016D0F6A46D46246800944C7905EB9414E9 -+:10175000247864F34703137003280ED003F0FE00CF -+:1017600010700868C2F801008888A2F8050038BD2A -+:1017700023F0FE0313700228EED1D8B240F001002E -+:10178000EEE730B50C46097897B0222902D208203E -+:1017900017B030BD28218DF80010ADF80200132AD3 -+:1017A00003D03B2A01D00720F2E78DF804200BA9D3 -+:1017B00068460AF05AFD050003D121212046FFF7B3 -+:1017C00065FE2846E4E700B597B023218DF80010A8 -+:1017D000ADF802001088ADF804005088ADF806009E -+:1017E000D088ADF80A009088ADF808000020ADF868 -+:1017F0000C00ADF80E000BA968460AF036FD09E6AC -+:101800002DE9FF470220C64E8DF804000027708A9C -+:10181000ADF80600B84643F202094DE001A80DF00C -+:10182000AAF9050006D0708AA8B3A6F81280ADF810 -+:1018300006803FE0039CA07F01072DD504F1240022 -+:101840000090A28EBDF80800214604F1360301F095 -+:10185000A2FF050005D04D452BD0112D3DD0FFDF57 -+:101860003BE0A07F20F00800A077E07F810861F3D3 -+:101870000000C10861F34100E07794F8210000F016 -+:101880001F0084F820002078282827D1292120460D -+:10189000FFF7FCFD22E015E040070BD5BDF808007E -+:1018A000214604F10E02FFF78EFF05000DD04D45D5 -+:1018B00010D100257F1CFFB202200DF09DF9401CC5 -+:1018C000B842ABD8052D12D008E0A07F20F004006C -+:1018D000A07703E0112D00D0FFDF0025BDF8060042 -+:1018E0007082052D05D0284604B0BDE8F087A6F823 -+:1018F00012800020F8E72DE9F047040000D1FFDF57 -+:101900002078874E20F00F00801C20F0F00070300F -+:10191000207060680178091F1429E6D2DFE801F021 -+:10192000F00A0B4FEF0B0CEFEF36F00B0BF074F0EF -+:101930000B0BF0F0FFDFD8E787883846FFF76EFD26 -+:10194000050000D1FFDF6078212140F008006070C1 -+:10195000707C40F0040070742846FFF797FD38460D -+:1019600007F0C2FA384603F092FF384605F01DF83A -+:101970003946022010F0A1FFA87F20F01000A877C0 -+:10198000FFF73EFF0028B0D0FFDFAEE7858828468E -+:10199000FFF744FD00B9FFDF60688078012800D0C0 -+:1019A000FFDF60688179284607F00EFC00289CD094 -+:1019B000617841F0080161706168C88095E78688A8 -+:1019C0003046FFF72BFD050000D1FFDF6078314680 -+:1019D00040F0080060706068C088288160680089F5 -+:1019E000688160684089A881022010F066FF0020AD -+:1019F000A875A87F00F0030002289CD1FFF700FF24 -+:101A0000002898D0FFDF70E780783C2803D00025BD -+:101A100002280AD000E00125002720B13C2802D08E -+:101A2000022800D0FFDF17B1A3E00127F5E76078B7 -+:101A3000002D40F008006070707C40F00800707469 -+:101A40006BD165680221B5F80480AD1C4746384665 -+:101A50000DF01EF90446032138460DF019F98246AF -+:101A6000052138460DF014F98146042138460DF061 -+:101A70000FF9074604B9FFDFBAF1000F00D1FFDF0D -+:101A8000B9F1000F00D1FFDF07B9FFDF22212046A7 -+:101A9000FFF7FCFC2879012833D00227A07F06211C -+:101AA00067F30100A077288B2081688B6081A88B69 -+:101AB000A08105F1120001F096F920B36879800742 -+:101AC00000D5FFDF6979E07D61F34700E075D5F867 -+:101AD0000600A0616889A083062105F10C0001F0D1 -+:101AE00082F9F8B130794108607861F3470060709D -+:101AF000D6F80500C4F80200B6F809001BE045E07E -+:101B000049E00127CAE7E07D20F0FE00801CE07577 -+:101B1000D5F81200A061E88ADDE71DE00302FF01AD -+:101B2000B4010020607820F0FE00801C6070E8683E -+:101B3000C4F80200288AE080FE48007884F8220079 -+:101B4000A07F00F00301404607F0C0F9012F03D049 -+:101B5000022F0ED0FFDFC8E63078032800D0FFDF69 -+:101B60000021084610F0A9FEBDE8F047012001F071 -+:101B7000DDB8B078132800D0FFDF0021072010F077 -+:101B80009CFEBDE8F0471120FFF7E4BB2046BDE80E -+:101B9000F04702F0D3B8607840F008006070A4E627 -+:101BA0002DE9F04705460078914600270209DFF845 -+:101BB00088A30C463E46012A75D000214FF6FF70DF -+:101BC000022A71D0072A0AD00A2A6ED0FFDF00BF8E -+:101BD000A9F800600CB127806680002085E6D5F862 -+:101BE00004C004F1080204F118089CF80060361FD4 -+:101BF000142E5AD2DFE806F09859594559590A5916 -+:101C0000593C5A5959C263FA59594DE811270926C6 -+:101C1000002C7CD0BCF80480A4F80480686880792B -+:101C200020729AF81110404621F004018AF8111030 -+:101C300004210DF048F8052140460DF044F800213C -+:101C400040460DF040F8012140460DF03CF80321DC -+:101C500040460DF038F8022140460DF034F80621D8 -+:101C600040460DF030F8072140460DF02CF8AFE764 -+:101C700001270926F4B3BCF80400A08068688079C5 -+:101C80000FE012271026BCF80400214601F08CF862 -+:101C90009EE71C2709266CB3BCF80200A080686888 -+:101CA0000079207294E7B5E0DFE004E11B27092604 -+:101CB00004B30420207268684088A08088E79CF8FC -+:101CC00002003C2826D0102718260CF1020C8CB1FB -+:101CD000BCF80200A080BCF818006082BCF81800B4 -+:101CE0002082BCF81A00A082BCF81C00E0829CF89C -+:101CF000050000E00BE00CF10601FFF71DFD9CF86C -+:101D0000040010B10120E07309E00220FBE7A9F80C -+:101D1000006062E71B270926002CF8D021729AF890 -+:101D2000111021F00801B2E01D273726002CEED05B -+:101D3000A08069680879491DFFF7FEFC686890F883 -+:101D40002B00A0756868C0780428E07D13D020F0CF -+:101D50000100E07569681F22C97861F34200E075EF -+:101D60006968C97A61F3C700E075696840460C315B -+:101D70001CF09AF82CE740F00100EAE71D2737260F -+:101D8000002CC4D0A0806968481D0B790146184614 -+:101D9000FFF7D2FC696804F10F0201F10C00CB7A65 -+:101DA00001461846FFF7C8FC6868807CA075686823 -+:101DB000C178E07D61F3420020F0F900E0751F2159 -+:101DC00040461CF00AF903E720271026002C9ED07D -+:101DD000A080686804F10902407A20726968CB1C0F -+:101DE00088781946FFF7A8FCF2E6FFE704271026DB -+:101DF000002C8CD0BCF80200A0806868808820810C -+:101E00006868C088608168680089A08168684089C6 -+:101E1000E081DDE6287A012803D0022814D0FFDF14 -+:101E2000D6E61F271026002CABD06888A0806889D2 -+:101E30002081A8896081E889A081288AE0819AF8B8 -+:101E4000111021F0200122E012271026688800F0EE -+:101E5000ABFF002C95D0687800F00700032889D1EB -+:101E60009AF8111021F0020111E02A7A062A29D2EB -+:101E7000DFE802F00310102121211B270926002C86 -+:101E8000A5D0A08021729AF8111021F001018AF8E2 -+:101E900011109DE61B270926002C98D0A080287AD7 -+:101EA000012806D0032020729AF8111021F01001A9 -+:101EB000EDE70220F7E74A4621462846BDE8F0470D -+:101EC00002F0B7B8FFDF83E610B51B4896B0807804 -+:101ED000132802D0082016B010BD22208DF8000073 -+:101EE0000BA968460AF0C1F904460021072010F04A -+:101EF000E4FC2046EFE700B50F4897B08078122841 -+:101F000001D008207BE41E208DF8000000208DF811 -+:101F100002008DF803000BA968460AF0A6F9002814 -+:101F2000F0D10021072010F0C8FC1120FFF712FAB1 -+:101F3000002064E410000020B401002000B5F9483E -+:101F400097B00078012814D01B208DF800000020E5 -+:101F50008DF802000BA968460AF087F9002807D11E -+:101F60000021084610F0A9FC012000F0DFFE00204F -+:101F700045E4082043E42DE9F041EA4C002740B154 -+:101F800002281DD0072842D0082800D0FFDFBDE876 -+:101F9000F081FFF7D3FF0028F9D106F0B4F800284C -+:101FA000F5D0017821F00F01891C21F0F0012031DA -+:101FB0000170077206F087F8607C40F001001DE0B8 -+:101FC0008EB23046FFF72AFA050000D1FFDF2878ED -+:101FD0002128DCD006F097F890B1017821F00F01AC -+:101FE000891C21F0F001103101700221017246803C -+:101FF000AF7506F068F8607C40F002006074C6E7D8 -+:1020000029463046BDE8F0411322FFF7BABBA57858 -+:10201000122D03D0132D04D0FFDFB8E7FFF76BFFBD -+:1020200001E0FFF751FF0028B1D106F06CF800285D -+:10203000ADD0017821F00F01891C21F0F001203191 -+:102040000170122D07D00221017206F03CF8607C6D -+:1020500040F01000D2E70121F6E72DE9F0411446E7 -+:102060000D00074600D1FFDF2878012803D00228A1 -+:1020700021D0FFDF8BE73846FFF7D0F9060000D10B -+:10208000FFDF0220B075207820F00F00801C20F0C8 -+:10209000F00010302070607840F008006070286810 -+:1020A000A0606868E060288920829E48417C41F0F9 -+:1020B000200141746BE73846FFF7B0F9060000D104 -+:1020C000FFDF69884FF6FF70814209D1AA888242FA -+:1020D00006D131463846BDE8F0411322FFF751BB27 -+:1020E000814201D1A88898B1207820F00F00801C8F -+:1020F00020F0F00010302070607840F00800607030 -+:102100002868A0606868E06028892082002006E0D6 -+:10211000782300223946022010F032FB0120B075EE -+:1021200035E730B5054697B00C46084610F008FC78 -+:1021300080BB00200121203D072D6ED2DFE805F095 -+:1021400004264145515D67000021082010F08EFBF8 -+:1021500010B1112017B030BD24208DF80000D4F844 -+:102160000200CDF80200A0798DF806000BA96846A0 -+:102170000AF07BF8050056D10823002211461846C4 -+:1021800010F0FEFA08284ED0FFDF4CE0606810F037 -+:1021900019FC08B11020DDE748208DF800002088E8 -+:1021A000ADF802006088ADF804000BA968460AF09B -+:1021B0005CF8050037D1606880B3BDF8301001804D -+:1021C00031E0206802F0D6F909E049220AE000BFB8 -+:1021D0008DF802100CE000BF8DF8020008E0054603 -+:1021E00021E042228DF800202278D207F4D0EFE7D8 -+:1021F0000BA968460AF039F8F1E738208DF800009D -+:102200002088ADF802006088ADF80400F0E720787F -+:1022100028B1A0F11B01E12902D3072503E01B200F -+:10222000414900250870284694E730B5054697B027 -+:102230000C46084610F0A8FB08B110208AE7202DB4 -+:1022400007D0212D25D0222D23D0232D21D00720CA -+:1022500080E72088FFF7E2F820B10078222804D236 -+:10226000082077E743F2020074E725208DF800008C -+:102270002088ADF802000BA9684609F0F6FF002897 -+:10228000DCD1DDF83210C4F802109DF83610A171CF -+:1022900060E706205EE72348001D70472149087467 -+:1022A00070472048007C00F00100704738B51421C9 -+:1022B0001C481BF070FE012000F038FD1120FFF7D4 -+:1022C00049F81949FB20174C0870611D684605F054 -+:1022D000E2FF9DF80010207961F3470020F0010033 -+:1022E00020710020A0734FF46170A0810220E07380 -+:1022F000FFF77BF800B1FFDF00F08EFE01F0D9FCA4 -+:1023000038BD10B50C463E2120461BF044FEA07F90 -+:1023100020F00300A077202020700020A07584F812 -+:10232000230010BDB40100201000002070477CB5D0 -+:10233000054610F005FB08B110207CBDFE4C211DA8 -+:1023400060680090A06801902846FFF7DCF900283B -+:10235000F3D1FFF74AF80028EFD000996160BDF88B -+:10236000041021819DF80610A1727CBD10B50446B1 -+:1023700010F00AFB08B11020D3E7EF492246087994 -+:10238000491D4008FFF7D8F90020CAE72DE9F047BA -+:102390009CB00D4604004FF0000812D00822FFF751 -+:1023A00000F900281CD1002609E000BF54F82600DF -+:1023B00004A9FFF770F9002812D1761CF6B2AE42DC -+:1023C000F4D32F460A2006AD0DF1440A8DF818000B -+:1023D00026465146284609F048FF20B143F2032023 -+:1023E0001CB0BDE8F0874046DFF84C8388F8030056 -+:1023F0002EB300244FF00B091DE000BF56F8240057 -+:1024000005A9FFF748F900B1FFDF9DF81400A87097 -+:1024100056F8240050F8011FC5F803108088A5F86D -+:10242000070085F800905146284609F01EFF00B1CC -+:10243000FFDF641CE4B2BC42E0D388F803700020E4 -+:10244000CEE72DE9F0479EB01546894604001ED020 -+:102450000F4608222946FFF7A4F8002811D10026CC -+:1024600013E000BF54F8260005A9103000F084FCEA -+:10247000002806D13FB157F8260010F061FA10B1DC -+:1024800010201EB0ADE7761CF6B2AE42EAD30026AD -+:10249000A5F101081CE000BF06F1010A0AF0FF07E0 -+:1024A00012E000BF54F82600017C4A0854F82710B7 -+:1024B0000B7CB2EB530F05D10622113011311BF00A -+:1024C000C7FCC0B17F1CFFB2AF42EBD30AF0FF06DE -+:1024D0004645E1DBC8462F46342007AD0DF14809DB -+:1024E0008DF81C0026464946284609F0BEFE28B154 -+:1024F00043F20420C5E743F20520C2E796B3002467 -+:102500002CE000BF56F82400A91C103000F034FC69 -+:1025100000B1FFDF56F82400102250F8111FC5F853 -+:1025200003108088A5F8070056F8241005F109006B -+:102530001BF0BAFCB8F1000F15D058F82410102287 -+:1025400005F119001BF0B0FC3220287049462846DE -+:1025500009F08BFE00B1FFDF641CE4B2BC42D1D3B2 -+:10256000012206E004E005F1190001F0F7FFEBE7B6 -+:1025700000224946284600F02AFC002081E770B579 -+:1025800096B0044610F0DCF918B9606810F023FA30 -+:1025900010B1102016B070BD60884AF2B8118842A0 -+:1025A00005D82078644D6E4618B1012804D0072064 -+:1025B000F0E7FEF71AFF1AE06078022804D003283B -+:1025C00002D043F20220E5E7E87317208DF80000FF -+:1025D000E97B0020CDF80200ADF80600022932D0D8 -+:1025E00003292DD0FFDF0BA9684609F03EFE002825 -+:1025F000D0D1606801F0A5FF207870B101208DF87E -+:102600000200F01C01F0AAFF4B208DF800000BA97E -+:10261000684609F02AFE00B1FFDF6088A8B1A881F2 -+:1026200080B2ADF8020030208DF800000BA968469A -+:1026300009F01BFE00B1FFDF2078A8730020A9E796 -+:102640008DF80700CFE74020FAE74FF46170E6E726 -+:1026500010B5044610F098F920B9606838B110F050 -+:10266000B1F908B110205CE6606801F077FF3248EC -+:1026700081896180C17B6170807B2070002050E681 -+:102680002DE9F0419CB0054600208DF864008DF8DE -+:1026900060008DF830008DF868001E4614468846AC -+:1026A000284610F098F918B9204610F094F910B1A6 -+:1026B00010201CB06BE455EA040018D01F270CABA7 -+:1026C00019AA414628460097FEF787FF0028F0D157 -+:1026D0001AAB18AA314620460097FEF77EFF002865 -+:1026E000E7D19DF86000C00703D00A20E1E707208A -+:1026F000DFE701AF7DB11A208DF804008DF8068068 -+:1027000042462946F81C1BF0CFFB0DA901A809F091 -+:10271000ACFD0028CDD194B120208DF804008DF8B7 -+:10272000066032462146F81C1BF0BEFB0DA901A82D -+:1027300009F09BFD002801E0B4010020B9D1FF4958 -+:102740009DF8300048700020B3E72DE9F0439BB0BE -+:102750004FF00008FAA104468DF83480D1E9000159 -+:10276000CDE91901204610F0EBF890B92078012846 -+:1027700003D1606810F0E4F858B9F04D4FF001094A -+:10278000A87B50B1E87B022807D1606810F023F9DC -+:1027900018B110201BB0BDE8F0832878012801D0C3 -+:1027A0000820F7E707200CF02FFA18B9207848B175 -+:1027B000012807D0FEF7E8FD30B1687C10F00C0F5F -+:1027C00008D103E01220E5E71320E3E7C10701D1B8 -+:1027D000800701D51120DDE7608943F6E172A0F1A1 -+:1027E00020019142217807D301297CD100287AD198 -+:1027F000A189002977D10FE0022901D0032901D155 -+:10280000A02870D3012907D06978C90704D0A1890D -+:10281000002968D0B42966D8217831B1012908D0BF -+:10282000022904D003295ED10AE0002609E002262D -+:1028300007E008B9A08908B1042609E0012607E0ED -+:102840000326A87B50B1E87B022807D1606828B135 -+:102850000DA96068FEF71FFF00289BD1207A30B1D8 -+:10286000012806D0022806D003286DD105E00027F4 -+:1028700004E0012702E0022700E003270EB1022E48 -+:102880000ED16FB1E87870B36878800702D043F258 -+:1028900001207FE7022E03D1022F55D0032F53D002 -+:1028A00018208DF838006089ADF83A006089ADF8DD -+:1028B0003C008DF83E600DF13F00FEF70FFF00B1C8 -+:1028C000FFDF9DF834008DF840002078012806D005 -+:1028D000A87B68B1E87B02280AD1606840B16068D3 -+:1028E00050F8011F00E02FE0CDF84110808802E091 -+:1028F0004046CDF84180ADF845008DF84870A07B8A -+:10290000C0F34002014662F35F01C0F3800041EA78 -+:10291000800019A9085C8DF84700A8B169460EA887 -+:1029200009F0A3FC0028B4D11B208DF838008DF8E5 -+:102930003A9069460EA809F098FC0028A9D19DF8A4 -+:1029400001001B2819D101E0072023E7052E09D239 -+:10295000DFE806F0030305050300032000E0022082 -+:1029600000F0E4F9012E0AD0A08940B100228300D2 -+:10297000114610460FF004FF08B103200AE70020BB -+:1029800008E72DE9FC4107460D460326084610F0EE -+:1029900022F8002864D13846FEF740FD040005D037 -+:1029A0002078222805D20820BDE8FC8143F20200ED -+:1029B000FAE7A07F00F0030C2DB129466046FEF730 -+:1029C000BAFD0600F0D15D48BCF1010F05D0BCF1A5 -+:1029D000020F17D0FFDF3046E6E7A27D2946012A25 -+:1029E00002D0407C800701D51120DDE729B9684677 -+:1029F00000F01FFC0028D7D16946384606F067FB77 -+:102A00000646E8E7A17D022914D1407C800611D456 -+:102A100025B1A07F40070BD4002100E001213846FA -+:102A200006F09DFB0600D6D1A075002DD3D002E0A4 -+:102A30001126D0E7A5B12A4621463846FEF7C3FE47 -+:102A400006461128C7D1A07F4107C4D4296844F89D -+:102A50000E1F6968616040F0040020740026BAE728 -+:102A60001020A1E770B50C460546FEF7D7FC010023 -+:102A700005D022462846BDE87040FEF782BE43F2EC -+:102A8000020070BD00B597B03F218DF800108DF8A1 -+:102A900002000BA9684609F0E8FB17B000BD01234E -+:102AA000FEF7BFBC00231A461946FEF7BABC30B584 -+:102AB00097B004460FF044FF10B1102017B030BD9E -+:102AC000204600F047F90028F8D11C4DA8781128BD -+:102AD00001D00820F2E7FEF757FC20B1687CC00661 -+:102AE00003D51120EAE71320E8E72078800701D515 -+:102AF000E87848B31D208DF800002078022200F00D -+:102B000001008DF802006088ADF80400A088ADF8DF -+:102B100006002078C0F3400102EA500001438DF81E -+:102B2000091002A8FEF7DAFD00B1FFDF0BA9684625 -+:102B300009F09BFB0028C1D11E2006E0B401002053 -+:102B4000070605040302010017E08DF800000120CC -+:102B50008DF8020000208DF803000BA9684609F0EB -+:102B600084FB0028AAD1E08800F010F90400A5D168 -+:102B70001220FEF7EFFB2046A0E707209EE7F0B506 -+:102B800097B015460C4607460FF025FF38B920468A -+:102B90000FF0D6FE18B928460FF0D2FE10B1102063 -+:102BA00017B0F0BD974E707C10F0180F01D14007A0 -+:102BB00001D51120F4E7204600F0CCF80028EFD131 -+:102BC00029460220FEF7B7FC0028E9D1B078112889 -+:102BD00003D0122801D00820E2E72078C0F340019A -+:102BE000394311D0800700D577B906200CF00CF8D6 -+:102BF00040B12078800701D5F07828B1B07812284C -+:102C000004D007E01220CBE70720C9E7FFF773F9EC -+:102C10000028C5D1FEF7B8FB022801D21320BFE778 -+:102C200021208DF800006088ADF80200A088ADF882 -+:102C300004002078C0F340008DF80600207880075B -+:102C400016D43878420808D0012A18D043F202215D -+:102C5000022A18D0032A18D115E0C00700D002209C -+:102C60008DF8070057F8010F0290B888ADF80C00F6 -+:102C70000DF10E00FEF732FD58B1032090E7C007BA -+:102C800005D00320ECE7C00701D0084688E7012003 -+:102C9000E6E72888ADF810006888ADF81200A8882B -+:102CA000ADF81400E888ADF816000020ADF8180063 -+:102CB000ADF81A000BA9684609F0D7FA00288BD1A5 -+:102CC000E08800F063F8040086D11320FEF742FB91 -+:102CD000204665E730B5054697B00C4608460FF02C -+:102CE00053FE08B11020E9E62846FEF797FB38B1FD -+:102CF0000178222902D3807F800604D40820DDE6F3 -+:102D000043F20200DAE613208DF80000ADF802501D -+:102D10000BA9684609F0A9FA0028E4D19DF9321000 -+:102D20007F2901D02170C9E60520C7E630B5354DB1 -+:102D3000040008D0012C04D0022C06D0032C04D0AF -+:102D4000FFDF2C7030BDFFDFFBE728780128F8D0CB -+:102D5000FFDFF6E7418843F6FD730A1F9A4209D266 -+:102D60008088042806D3B0F5804F03D8884201D864 -+:102D700000207047072070470278520804D0012ACB -+:102D800002D043F202207047FEF785BC10B548B16F -+:102D900083000022114607200FF0F2FC072801D023 -+:102DA000032060E400205EE470B50C0006460DD000 -+:102DB000FEF734FB050000D1FFDFA68028892081C3 -+:102DC000288960816889A081A889E08170BD10B5DB -+:102DD00002F0010282703122027009F046FA0028E6 -+:102DE00000D0FFDF3FE410B500231A4603E0845C07 -+:102DF0002343521CD2B28A42F9D30BB1002032E4F1 -+:102E0000012030E4B40100204FF0E0224FF40041F3 -+:102E10000020C2F880112049087020499002086003 -+:102E2000704730B51C4D04462878A04218BF002CCE -+:102E300002D0002818BFFFDF2878A04208BF30BDAD -+:102E40002C701749154A0020ECB1164DDFF858C018 -+:102E5000131F012C0DD0022C1CBFFFDF30BD0860FA -+:102E600003200860CCF800504FF400001060186098 -+:102E700030BD086002200860CCF800504FF0407070 -+:102E80001060186030BD086008604FF0607010601E -+:102E900030BD00B5FFDF00BD1A00002008F501407D -+:102EA00000F500401C03002014F50040094810B54F -+:102EB00004680A49084808600EF0FDF908480460F3 -+:102EC00010BD0849002008604FF0E0210220C1F841 -+:102ED0008002704710050240010000011805024001 -+:102EE00014050240FC1F004010B50D2000F06FF8E3 -+:102EF000C4B26FF0040000F06AF8C0B2844200D09F -+:102F0000FFDF3A490120086010BD70B50D2000F0C8 -+:102F100048F8374C0020C4F800010125C4F80453D8 -+:102F20000D2000F049F825604FF0E0216014C1F851 -+:102F3000000170BD10B50D2000F033F82C480121C0 -+:102F400041600021C0F80011BDE810400D2000F0E4 -+:102F500033B8284810B50468264927480831086066 -+:102F60002349D1F80001012804D0FFDF2148001DCA -+:102F7000046010BD1D48001D00680022C0B2C1F8E9 -+:102F800000210FF0A8F9F1E710B51948D0F80011A9 -+:102F90000029FBD0FFF7DDFFBDE810400D2000F059 -+:102FA0000BB800F01F02012191404009800000F1A0 -+:102FB000E020C0F88011704700F01F02012191400D -+:102FC0004009800000F1E020C0F88012704700281E -+:102FD00006DA00F00F0000F1E02090F8140D03E095 -+:102FE00000F1E02090F800044009704704D500404B -+:102FF00000D00040100502400100000170477047FA -+:1030000018FFFFFFDBE5B15100F001008C00FFFF6E -+:1030100084000000C0C62D00FE4800210160416010 -+:1030200070472DE9F743044692B091460120FFF71F -+:1030300035F960680FF0C6FC58B160680FF0CBFC42 -+:1030400038B9607800F00300022802D10020FFF7B1 -+:1030500025F94D4648460FF073FC18B1102015B005 -+:10306000BDE8F08329460120FEF765FA0028F6D175 -+:1030700001258DF842504FF4C050ADF840000022B9 -+:1030800010A9284603F035FF0028E8D18DF84250FA -+:103090004FF42850ADF8400000261C2168460796E2 -+:1030A0001AF09BFF9DF81C0007AF20F00F00401C9A -+:1030B00020F0F00010308DF81C0020788DF81D00F5 -+:1030C00061789DF81E000DF1400861F3420040F068 -+:1030D00001008DF81E009DF8000008AA40F00200D3 -+:1030E0008DF800002089ADF83000ADF832606089BD -+:1030F000ADF834000B9760680E900AA9CDF82880CF -+:10310000684603F0F5FC0028A9D1C24CBDF82000A8 -+:1031100008AA20808DF8425042F60120ADF8400008 -+:103120009DF81E000AA920F00600801C20F0010076 -+:103130008DF81E000220ADF83000ADF8340013A861 -+:103140000E90684603F0D4FC002888D1BDF820001A -+:103150006080211D484600F032F9002887D18DF8A3 -+:10316000425042F6A620ADF840001C216846079662 -+:103170001AF033FF9DF81C00ADF8345020F00F001A -+:10318000401C20F0F00010308DF81C009DF81D0050 -+:1031900008AA20F0FF008DF81D009DF81E000AA966 -+:1031A00020F0060040F00100801C8DF81E009DF804 -+:1031B00000008DF8445040F002008DF80000CDE989 -+:1031C0000A8711A80E90ADF83050684603F090FCC5 -+:1031D000002899D1BDF82000E08000203FE73EB5EF -+:1031E00004460820ADF8000020460FF0A9FB08B106 -+:1031F00010203EBD21460120FEF79DF90028F8D1A0 -+:103200002088ADF804006088ADF80600A088ADF80D -+:103210000800E088ADF80A007E4801AB6A46808865 -+:10322000002104F061F8BDF800100829E1D0032066 -+:103230003EBD1FB50446002002900820ADF80800EE -+:10324000CDF80CD020460FF07BFB10B1102004B05D -+:1032500010BD704802AA81884FF6FF7004F029FA69 -+:103260000028F4D1BDF80810082901D00320EEE7AA -+:10327000BDF800102180BDF802106180BDF8041077 -+:10328000A180BDF80610E180E1E701B582B002201F -+:10329000ADF800005F4802AB6A464088002104F0A8 -+:1032A00023F8BDF80010022900D003200EBD1CB584 -+:1032B000002100910221ADF8001001900FF064FB95 -+:1032C00008B110201CBD53486A4641884FF6FF7074 -+:1032D00004F0EFF9BDF800100229F3D003201CBD63 -+:1032E000FEB514460E460746FEF7DBFF28B1304612 -+:1032F0000FF026FB18B11020FEBD0F20FEBDF82CEC -+:1033000001D90C20FEBD38460FF01AFB414D18BB09 -+:10331000288801A903F05BF90028F3D138788DF8EB -+:103320000500288801A903F0C1FF0028EAD1009018 -+:103330009DF800009DF8051040F002008DF8000097 -+:10334000090703D040F008008DF80000288869467E -+:1033500003F04AFF0028D5D1ADF80840288833464D -+:1033600002AA002103F0C0FFBDF80810A142C9D095 -+:103370000320FEBD7CB50546002000900190088822 -+:10338000ADF800000C46284601950FF01BFB18B95C -+:1033900020460FF0F9FA08B110207CBD15B1BDF838 -+:1033A000000050B11B486A4601884FF6FF7004F0D8 -+:1033B00080F9BDF8001021807CBD0C207CBD30B5AB -+:1033C00093B0044600200D460090142101A81AF085 -+:1033D00004FE1C2108A81AF000FE9DF80000CDF89C -+:1033E00008D020F00F00401C20F0F00010308DF8C5 -+:1033F00000009DF8010020F0FF008DF801009DF80D -+:10340000200040F002008DF8200001208DF84600D9 -+:1034100002E000001200002042F60420ADF8440053 -+:1034200011A801902088ADF83C006088ADF83E00FE -+:10343000A088ADF84000E088ADF842009DF8020099 -+:1034400006AA20F00600801C20F001008DF8020082 -+:103450000820ADF80C00ADF810000FA8059001A9E8 -+:1034600008A803F045FB002803D1BDF81800288008 -+:10347000002013B030BD000010B504460FF060FA14 -+:1034800008B1102010BD2078C0F30210042807D81E -+:103490006078072804D3A178102901D8814201D28D -+:1034A000072010BDE078410706D421794A0703D4EC -+:1034B000000701D4080701D5062010BD002010BD6B -+:1034C00010B513785C08C37F64F30003C3771478E6 -+:1034D000A40864F34103C3771078C309887863F3C1 -+:1034E0004100887013781C094B7864F347134B70C4 -+:1034F0001378DB0863F3000088705078487110BDC2 -+:1035000010B5C4780B7864F300030B70C4786408BA -+:1035100064F341030B70C478A40864F382030B7056 -+:10352000C478E40864F3C3030B700379117863F380 -+:103530000001117003795B0863F341011170037995 -+:103540009B0863F3820111700079C00860F3C30126 -+:10355000117010BD70B514460D46064604F0D3FD3B -+:1035600080B10178142221F00F01891C21F0F001B3 -+:10357000A03100F8081B21461AF0DBFCBDE87040C2 -+:1035800004F0A1BD29463046BDE870401322FEF785 -+:10359000F8B870B514460E46054604F0B4FD70B197 -+:1035A000017821F00F01891C21F0F0012031017018 -+:1035B000458021688160BDE8704004F084BD3146DB -+:1035C0002846BDE870401322FEF7DBB810B5FE4C6C -+:1035D00094F8300000280CD104F120014FF6FF725E -+:1035E000A1F110000CF0A3FF00B1FFDF012084F86F -+:1035F000300010BD2DE9F047064608A8894690E83E -+:1036000030041F469046142128461AF0E6FC00219B -+:10361000CAF80010B8F1000F03D0B9F1000F03D1C0 -+:1036200014E03878C00711D020680FF0ADF9E8BB7E -+:10363000B8F1000F07D120681230286020681430DC -+:1036400068602068A8602168CAF800103878800790 -+:1036500028D560680FF0B6F940BBB9F1000F2DD046 -+:10366000FEF719FE0168C6F8B4118188A6F8B811F2 -+:10367000807986F8BA01FFF7A9FFDFF84C8308F1DB -+:103680002008C5F80C80626862B196F8B40106F2B1 -+:10369000B51140081032FEF74FF81022414660681D -+:1036A0001AF002FC3878400712D500E003E0A06869 -+:1036B0000FF06AF950B11020BDE8F087606800286B -+:1036C000F9D0E8606068C6F8B001EBE7A06828614F -+:1036D0000020F1E730B5054608780C4620F00F00D1 -+:1036E000401C20F0F001103121700020607095F82E -+:1036F000230030B104280FD0052811D0062814D09B -+:10370000FFDF20780121B1EB101F04D295F82000D3 -+:1037100000F01F00607030BD21F0F000203002E0AA -+:1037200021F0F00030302070EBE721F0F000403065 -+:10373000F9E710B510B190F8A94044B1A24890F84B -+:10374000354000205CB108601060186010BD00F1C9 -+:10375000A8040C6000F1D001F8301160F5E79A4C34 -+:1037600034340C60F0E700B58BB00723CDE90212CA -+:103770008DF801300191944900236431059109933A -+:1037800001468DF8103068460CF0A9FE002800D0E4 -+:10379000FFDF0BB000BD30B597B00C462C251A9951 -+:1037A0008DF80050ADF80200B3B118680190586868 -+:1037B0000290ADF80C2010220DF10E001AF074FBEF -+:1037C0000BA9684608F051FD002803D1A17F41F004 -+:1037D0001001A17717B030BD00200190E8E72DE976 -+:1037E000F0470646008A8CB080B20D468146FDF750 -+:1037F00015FE0446744F3078283FDFF8CC814FF037 -+:10380000000A122873D2DFE800F072E93509367732 -+:103810007E98A8F3E7E6E5E4E35BE3E3A07F00F04E -+:103820000300012806D0002148460BF03AFA0500B3 -+:1038300003D101E00121F7E7FFDF98F85C100906EA -+:1038400002D5D8F860000BE0032105F121000EF04D -+:1038500023FDD5F821005D49B0FBF1F201FB120018 -+:10386000C5F8210070686866B068A86620782528C9 -+:1038700000D0FFDFECE0A07F00F00300012806D0BD -+:10388000002148460BF00DFA060003D101E00121AA -+:10389000F7E7FFDF7078810702D52178252904D06A -+:1038A00040F0010070700CB006E70220287096F816 -+:1038B0002000287106F121003136C5E90206F2E741 -+:1038C000A07F00F00300012806D0002148460BF03D -+:1038D000E8F9040003D101E00121F7E7FFDF607898 -+:1038E000C10605D51320287041346C60DBE7DEE1AA -+:1038F00040F008006070D6E73348082128380EF001 -+:10390000CBFC032016E02A208DF8000010220DF1D8 -+:10391000020071681AF0C8FA10220DF11200B168A5 -+:103920001AF0C2FA284968462C3908F09EFC00B10A -+:10393000FFDF042028706F60B5E7E07FC00600D588 -+:10394000FFDFB0680090B38806220321484605F0E7 -+:1039500024FB0028A7D0FFDFA5E704B9FFDF7168CB -+:1039600021B1102204F124001AF09EFA28212046E9 -+:10397000FDF78CFDA07F00F0030002280ED104F1BA -+:103980002400002300901A4621464846FFF703FF13 -+:10399000112807D029212046FDF778FD307A84F8D8 -+:1039A000200080E7A07F000700D5FFDF14F81E0F7E -+:1039B00040F008002070A4F816A0C4F818A0C4F8BD -+:1039C0001CA0617808460AE01402002040420F0063 -+:1039D00030E068E196E08CE062E009E03FE061F30E -+:1039E0008200410861F3C3006070307AE0705AE7EA -+:1039F000A07F00F00300012806D0002148460BF00C -+:103A000050F9040003D101E00121F7E7FFDF0221B3 -+:103A100004F175000EF040FC1020287004F5DA70F7 -+:103A20006860B4F875002882FA486C346C61C5E9A6 -+:103A3000028038E7A07F00F00300012805D00021B4 -+:103A400048460BF02EF918B901E00121F8E7FFDF35 -+:103A50000CB0324621464846BDE8F0477AE504B945 -+:103A6000FFDF207821289CD93079012802D0022854 -+:103A70000AD103E0E07F40F01000E07798F85C1096 -+:103A800041F0010188F85C10324621464846FFF7B4 -+:103A900061FD0CB02046BDE8F0472321FDF7F6BCE0 -+:103AA000327901230321484605F086F878B11120C8 -+:103AB0002870327905F10800AA80031D00900321C7 -+:103AC000484605F0F6F8002891D0FFDFEBE6A07F2E -+:103AD00000F00300012806D0002148460BF0E1F871 -+:103AE000040003D101E00121F7E7FFDF3079207006 -+:103AF000D9E60321484605F0FDFB002899D11220A4 -+:103B00002870D0E6A07F00F00300012806D0002135 -+:103B100048460BF0C6F8050003D101E00121F7E7A4 -+:103B2000FFDF95F8740000F00300012878D1A07F32 -+:103B300000F00307E07FC0F3400616B1012F04D068 -+:103B40002BE095F89000C0072AD0D5F8AC1119B336 -+:103B500095F87320087C62F387000874E27FD5F83B -+:103B6000AC1162F341000874D5F8AC1166F30000A3 -+:103B70000874AEB1D5F8AC01102204F124017835F7 -+:103B80001AF092F9287E40F001002876287820F07B -+:103B9000010005F8780900E016B1022F04D02CE0EE -+:103BA00095F87800C00726D0D5F8A81119B395F874 -+:103BB0007320087C62F387000874E27FD5F8A811AF -+:103BC00062F341000874D5F8A81166F30000087488 -+:103BD0008EB1D5F8A801102204F1240178351AF02D -+:103BE00063F9287840F0010005F8180B287820F0D8 -+:103BF000010005F89009022F51D0002000EB400091 -+:103C000005EBC00090F87800800709D595F86C00A6 -+:103C1000D5F8B021400805F16D011032FDF78CFD9B -+:103C2000052060F3070815F8740F00F0030060F337 -+:103C30000F28287960F31748287F60F31F687548BC -+:103C40005C38027822F00F02921C22F0F00220323F -+:103C50000270427822F00702D21C4270A0F8029053 -+:103C6000C0F8088004F0B7FB2078252805D021286B -+:103C700007D0FFDF2078222803D922212046FDF734 -+:103C800005FCA07F00F0030001280AD0002148466F -+:103C90000BF019F800283FF412AEFFDF03E6012015 -+:103CA000ACE70121F3E7716881F801A0FBE5FFDFD4 -+:103CB000F9E570B5574C0025103C14F85C0F20F066 -+:103CC0008000207065600CF0D2FB5249A1F1100019 -+:103CD00004F013FB04F82C5C062060724D487C3025 -+:103CE00020615030A0611030E06170BD70B50D46AC -+:103CF000FDF794FB040000D1FFDF4FF4DE7128468E -+:103D00001AF06BF943485430686104F124002861CB -+:103D1000A07F00F00300012808D0022105F5907073 -+:103D20000CF0A6FB002800D0FFDF70BD0121F5E7F5 -+:103D30000A46014602F590700CF0BABB70B5054614 -+:103D400040689CB0017808290DD00B2903D00C29BC -+:103D500036D101218171686886883046FDF75EFBA7 -+:103D6000040035D133E046883046FDF757FB0400A8 -+:103D700000D1FFDF2078212822D0282822D16868AE -+:103D800002210C3001F0B8F9E0B168680821001D8B -+:103D900001F0B2F9B0B12D208DF80000ADF802604D -+:103DA000102204F1240101A81AF07EF80BA968463C -+:103DB00008F05BFA00B1FFDF29212046FDF766FB22 -+:103DC0001CB070BD687840F008006870F8E7FFDF4D -+:103DD000A07F00F00301022902D120F01000A0779B -+:103DE000207821280AD06868817909B1807898B153 -+:103DF000A07F00F0030002285BD0FFDFA07F00F06F -+:103E000003000228DCD1FDF7FBFC0028D8D0FFDF3F -+:103E1000D6E7000024020020687840F008006870AF -+:103E2000E07FC10720D0800701D5062000E00520F3 -+:103E300084F823002078292818D02428DED13146A0 -+:103E400006200EF03AFD22212046FDF71FFBA07F41 -+:103E500000F0030001282AD0002130460AF033FF89 -+:103E60000028CBD0FFDFC9E70420E1E7A07F00F006 -+:103E70000300012806D0002130460AF012FF050099 -+:103E800003D101E00121F7E7FFDF25212046FDF7FF -+:103E9000FDFA0F208DF8580016A905F590700CF06A -+:103EA000FEFA0228AAD00028A8D0FFDFA6E7012149 -+:103EB000D3E7687840F0080068709FE72DE9F04389 -+:103EC0008BB09946154688460646FDF7A7FA0400CA -+:103ED0004ED0207822284BD3232849D0E07FC0063B -+:103EE00046D4A07F00F00300012806D00021304610 -+:103EF0000AF0D7FE070002D00BE00121F7E7A07F10 -+:103F000000F00300012804D1012130460AF0C0FE70 -+:103F1000074601AB02AA03A93846FFF70AFC03983B -+:103F200000B9FFDF4FB1039807F5907787612078DC -+:103F3000222806D0242804D007E0039900208861B5 -+:103F400003E025212046FDF7A1FA03980B214170DB -+:103F500046628580C0E90289029901610199416147 -+:103F600004A90CF0BCFA022802D0002800D0FFDF20 -+:103F70000BB0BDE8F08330B587B00546FDF74EFACB -+:103F8000017822292FD9807F00F00300012806D074 -+:103F9000002128460AF085FE040003D101E001213A -+:103FA000F7E7FFDF227801230321284604F004FE0F -+:103FB000002818D011208DF80400227803A8009062 -+:103FC000ADF8082004AB0321284604F072FE00B1CE -+:103FD000FFDF01A904F590700CF061FA022802D00D -+:103FE000002800D0FFDF07B030BD10B586B0044612 -+:103FF000FDF714FA0178222919D9807F00F0030017 -+:10400000012806D0002120460AF04BFE040003D10F -+:1040100001E00121F7E7FFDF12208DF8000069467B -+:1040200004F590700CF03BFA002800D0FFDF06B0DA -+:1040300010BD2DE9F05F05460C460027007890463C -+:1040400001093E46BB4604F1080A02297ED0072931 -+:1040500002D00A2909D142E068680178082905D010 -+:104060000B292CD00C292AD0FFDFC6E114271C26EF -+:10407000002C6CD04088A080FDF7D0F95FEA0009E1 -+:1040800000D1FFDF99F817005246400809F11801E6 -+:10409000FDF752FB68688089208268684168C4F82F -+:1040A00012108068C4F81600A07E20F0060040F0D0 -+:1040B0000100A07699F81E0040F040014DE01A275B -+:1040C0000A26002CD5D08088A080FDF7A7F905002E -+:1040D00000D1FFDF51462846FFF7FCFA8DE10CB115 -+:1040E000288BA080287A0E287ED006DC01287CD080 -+:1040F000022808D0032804D135E0102876D01128F2 -+:1041000075D0FFDF79E11E270926002CB1D0A088E9 -+:10411000FDF784F95FEA000900D1FFDF287B00F09A -+:1041200003000128207A1BD020F001002072297B97 -+:10413000890861F341002072297BC90861F382007C -+:104140002072297B090961F3C30001E04AE117E10C -+:10415000207299F81E0040F0800189F81E104CE191 -+:1041600040F00100E2E713270D26002CAAD0A0881A -+:10417000FDF754F98146807F00F00300012806D046 -+:104180000021A0880AF08DFD050003D101E0012186 -+:10419000F7E7FFDF99F81E0000F00302012A59D06B -+:1041A000A86E817801F003010129217A54D021F011 -+:1041B0000101217283789B0863F3410121728378A6 -+:1041C000DB0863F38201217283781B0963F3C30167 -+:1041D0002172037863F306112172437863F3C711E8 -+:1041E000217284F809B003E05EE0A4E08CE09CE07A -+:1041F000C178A172012A32D04279E17A62F30001DA -+:10420000E1724279520862F34101E1724279920807 -+:1042100062F38201E1724279D20862F3C301E17272 -+:104220000279217B62F3000121730279520862F363 -+:10423000410121730279920862F3820121730079AE -+:10424000C00860F3C301217399F8000023285AD9EC -+:10425000262168E0686EA4E741F00101A9E7027930 -+:10426000E17A62F30001E1720279520862F34101DE -+:10427000E1720279920862F38201E1720279D20856 -+:1042800062F3C301E1724279217B62F30001217381 -+:104290004279520862F3410121734279920862F334 -+:1042A000820121734079CBE718271026002C67D0B4 -+:1042B000A088FDF7B3F88246807F00F00300012854 -+:1042C00007D00021A0880AF0ECFC5FEA000903D1C6 -+:1042D00001E00121F6E7FFDFE868A06099F801003E -+:1042E00040F0040189F8011099F80200800708D510 -+:1042F000012020739AF8000023287ED927215046F8 -+:1043000063E084F80CB078E015270F26C4B3A088CA -+:10431000FDF784F8814606225146E86808F00DF85A -+:104320000120A073AEE048464FE0162709263CB3B3 -+:10433000287B207261E0297BFE4802290CD01927D6 -+:104340000E26ECB101290DD003291AD004291BD067 -+:10435000052919D0FFDF23E01B270926BCB3012163 -+:10436000217205E001212172617A21F0030161725D -+:1043700010F85C1F4A08520062F3060101700FE05A -+:104380002BE00220207207E0687B052900F00F0077 -+:1043900040F0800020721BD0607A20F00300607231 -+:1043A000A088FDF73BF805460078212825D0232872 -+:1043B00000D0FFDFA87F00F00300012810D000210B -+:1043C000A0880AF080FC22212846FDF75FF814E05F -+:1043D000607A20F00300401CE1E7A8F8006011E0DB -+:1043E0000121EDE70CB16888A080287A03282BD042 -+:1043F00004280AD005284BD0FFDFA8F800600CB1D4 -+:10440000278066800020BDE8F09F15270F26002C2E -+:10441000E3D0A088FDF702F8807F00F003000128B8 -+:1044200006D00021A0880AF03CFC050003D101E081 -+:104430000121F7E7FFDFD5F821000622514607F0FA -+:104440007CFF84F80EB0D8E717270926002CC4D0CB -+:10445000A088FCF7E3FF8146807F00F0030001287D -+:1044600006D00021A0880AF01CFC050003D101E061 -+:104470000121F7E7FFDFA878800701D5022000E0DF -+:104480000120207299F800002328B6D927214AE795 -+:1044900019270E26002CA0D0A088FCF7BFFF5FEAEA -+:1044A000000900D1FFDFC4F808B0A4F80CB084F80C -+:1044B00008B0A07A40F00300A07299F81F1061F3D1 -+:1044C0008200A07299F81F1001EA510161F3C30044 -+:1044D000A072687A00F0030001288ED1607A40F063 -+:1044E0000400607299F81E00E97A00F003000128C8 -+:1044F00013D0607B61F300006073AA7A217B62F3C2 -+:1045000000012173EA7A520862F341006073A87ACD -+:10451000400860F3410121736FE7207B61F30000E5 -+:104520002073AA7A617B62F300016173EA7A520810 -+:1045300062F341002073A87A400860F3410161737F -+:104540005BE710B57B4C30B10146102204F120002E -+:1045500019F0AAFC012084F8300010BD10B5044603 -+:10456000FFF734F8734920461022BDE8104020318F -+:1045700019F09ABC70B56F4C06004FF0000514D0CE -+:104580000EF0DEF908B110250DE00621304607F0E7 -+:10459000BBFE411C06D0206614F85C0F40F0800082 -+:1045A000207000E00725284670BD14F85C0F20F04D -+:1045B0008000F5E7007810F00F0204D0012A05D042 -+:1045C000022A0CD110E0000909D10AE000090128F3 -+:1045D00007D0022805D0032803D0042801D00720E3 -+:1045E00070470870002070470620704705282AD2BF -+:1045F000DFE800F003070F171F00087820F0FF0026 -+:104600001EE0087820F00F00401C20F0F000103071 -+:1046100016E0087820F00F00401C20F0F000203059 -+:104620000EE0087820F00F00401C20F0F000303041 -+:1046300006E0087820F00F00401C20F0F000403029 -+:10464000087000207047072070472DE9F041804630 -+:1046500088B00D46002708460EF0BDF9A8B94046BF -+:10466000FCF7DCFE040003D02078222815D104E0FA -+:1046700043F2020008B0BDE8F08145B9A07F010611 -+:1046800003D500F00300022801D01020F2E7A07F3C -+:10469000C10601D4010702D50DB10820EAE725497A -+:1046A00091F85C10C90701D01120E3E7E17FC9064A -+:1046B00001D50D20DEE700F00300022805D125B169 -+:1046C0002846FEF7D9FE0700D4D1A07F00F00300F2 -+:1046D000012806D0002140460AF0E3FA060002D085 -+:1046E0000CE00121F7E7A07F00F0030001280BD0C8 -+:1046F000002140460AF0CCFA060007D0A07F00F067 -+:104700000300022804D009E00121F2E70420B1E708 -+:1047100025B12A4631462046FEF7D2FE07AB1A469F -+:1047200069463046FFF705F8009800B9FFDF0C2016 -+:10473000009901E014020020487006F59070C1F85D -+:104740002480486100200881A07F00F00300012838 -+:1047500028D0EDB302200871301D886170784009BF -+:104760000877B078C0F340004877287800F001025D -+:10477000887F62F301008877E27F62F382008877A6 -+:10478000E27F520862F3C3008877B27862F30410C4 -+:104790008877A878C87701F1210228462031FEF7F2 -+:1047A000AFFE22E001200871287800F00102087EA7 -+:1047B00062F3010008762A78520862F382000876D4 -+:1047C0002A78920862F3C30008762A78D20800E0BB -+:1047D00007E062F30410087624212046FCF756FE19 -+:1047E0000BE0032008710520087625212046FCF700 -+:1047F0004DFEA07F20F08000A07701A900980BF06B -+:104800006EFE022801D000B1FFDF384632E72DE905 -+:10481000FF4FF94A0D4699B09A4607CA14AB0027D4 -+:1048200083E807001998FCF7F9FD060006D03078F8 -+:10483000262806D008201DB0BDE8F08F43F2020004 -+:10484000F9E7B07F00F00309B9F1010F03D0B9F126 -+:10485000020F07D008E03DB91B98FEF70DFE0028B7 -+:10486000E9D101E01B9878BBB07F00F0030001287C -+:1048700006D0002119980AF014FA040003D101E0CF -+:104880000121F7E7FFDF852D25D007DCD5B1812D8C -+:104890001BD0822D1BD0832D08D11AE0862D1CD071 -+:1048A000882D1CD0892D1CD08A2D1CD00F20207162 -+:1048B0000F281AD001208DF83400201D0E90207989 -+:1048C000A8B158E10020F2E70FE00120EFE7022055 -+:1048D000EDE70320EBE70520E9E70620E7E70820FE -+:1048E000E5E70920E3E70A20E1E70720A3E7B9F1BC -+:1048F000010F17D0D4E91950804602200190012001 -+:104900000090A87898F80210C0F3C000C1F3C0016D -+:1049100008405FEA000B5DD050460EF011F8002809 -+:104920006CD12DE0D4E9198501200190022000907E -+:10493000214630461B9AFEF7C3FD1B98007800F015 -+:104940000101A87861F30100A870F17F61F3820092 -+:10495000A870F17F490861F3C300A870A17861F3E2 -+:104960000410A870607840092870A078C0F3400057 -+:1049700068701B988078E870002068712871C0E723 -+:10498000DAF80C000DF0DCFFC0BBDAF81C000DF00B -+:10499000D7FF98BBDAF80C00A060DAF81C00E060E2 -+:1049A00098F80100A17800F0010041EA4000A070F1 -+:1049B00098F80210C0B2C1F30011891E0840A0701F -+:1049C000002084F82000009906F1170002290BD07E -+:1049D00001210AE098F80110A07801F00101FD2200 -+:1049E00042EA41010840E2E7002104EB81018861CD -+:1049F0000199701C022902D0012101E028E0002168 -+:104A000004EB81018861A87800F00300012849D1F6 -+:104A100098F8020000F00300012843D1B9F1010F1A -+:104A200004D12A1D691D1B98FEF76AFD297998F8A3 -+:104A3000040001408DF82C10687998F8052010408A -+:104A40008DF8300001432DD050460DF079FF08B1AC -+:104A50001020F0E60AF1100004F5D47104F17C0294 -+:104A60000490B9F1020F3CD00090CDE90121002162 -+:104A70000BAB5A462046FEF7BDFD0028E9D104F5F0 -+:104A8000D67104F19402B9F1010F30D0049800906E -+:104A9000CDE9012100210CAB5A462046FEF7AAFDC4 -+:104AA0000028D6D1A078800740D4A87898F80210C2 -+:104AB000C0F38000C1F38001084337D0297898F80B -+:104AC000000014AAB9F1010F17D032F810204B00E2 -+:104AD000DA4012F0030718D0012F1ED0022F12D196 -+:104AE0001DE0CDF800A0CDE901210121C0E7CDF8FE -+:104AF00000A0CDE901210121CDE732F811204300CA -+:104B0000DA4002F00307032F07D0BBF1000F0DD0EE -+:104B1000012906D0042904D008E00227F5E701277F -+:104B2000F3E7012801D0042800D10427F07F40F0EA -+:104B300001006BF34100F077A07881074FF003008C -+:104B40000CD5A071BBF1000F15D100BF8DF85C0032 -+:104B500017AA31461998FEF71CFD0CE00221022F1E -+:104B600018D0012F18D0042F22D00020A071F07F80 -+:104B700020F00100F07725213046FCF787FC0DA9D5 -+:104B800004F590700BF08BFC10B1022800D0FFDF11 -+:104B9000002050E6A171D9E7A1710D2104F1240094 -+:104BA00019F01BFA607840F0020060700420CDE735 -+:104BB0000120A071DFE72DE9F04387B091468846D8 -+:104BC0000446FCF72BFC070006D03878272806D0CF -+:104BD000082007B0BDE8F08343F20200F9E7B87F90 -+:104BE00000F00300012809D0002120460AF059F8FE -+:104BF000040006D104E0000060E301000121F4E7B5 -+:104C0000FFDFA679012E08D0B8F1000F0FD048467B -+:104C10000DF096FEB8B11020DBE7B9F1000F25D1F9 -+:104C2000B8F1000F09D0B8F1010F1FD120E0022E1A -+:104C300005D0032E05D0FFDF28E00C2526E0012556 -+:104C400024E0022522E0B8F1020F03D0B8F1010FF1 -+:104C50000AD00BE0032E09D100251022494604F1A9 -+:104C6000210019F021F911E0022E01D00720B0E750 -+:104C70000025102104F1210019F08DF95FEA0900E7 -+:104C800004D0062107F040FBC4F8210060782521FC -+:104C900040F0020060703846FCF7F8FB6078C1070E -+:104CA00013D020F00100607002208DF8000004F1A4 -+:104CB000210002908DF804506946FF300BF0EFFBA5 -+:104CC000022804D018B1FFDF01E084F82050002052 -+:104CD0007FE730B587B00D460446FCF79FFB88B1EF -+:104CE000807F00F0030001280FD00021204609F04A -+:104CF000D8FF04000ED028460DF022FE38B1102057 -+:104D000007B030BD43F20200FAE70121EEE7607818 -+:104D1000400701D40820F3E7294604F1410020228E -+:104D2000054619F0C1F8607840F010006070010786 -+:104D30000FD520F00800607013208DF80000694640 -+:104D400004F5907001950BF0AAFB022801D000B188 -+:104D5000FFDF0020D4E770B592B00D460646FCF7A1 -+:104D60005DFB18B10178272940D103E043F202002E -+:104D700012B070BD807F00F00300012806D0002132 -+:104D8000304609F08EFF040003D101E00121F7E76E -+:104D9000FFDFA079022829D1A078C00726D0002300 -+:104DA00002220321304603F007FF08B30C208DF8E0 -+:104DB00005000A9604A804F5907402220090069457 -+:104DC000ADF80C2005AB0321304603F072FF00B1B3 -+:104DD000FFDF04208DF808008DF81C500BA901A8F6 -+:104DE0000BF07DFB00B1FFDF0020C1E70820BFE72B -+:104DF0001120BDE770B5064686B014460D4608463C -+:104E00000DF09EFD18B920460DF0BEFD10B110202A -+:104E100006B070BDA6F57F40FF380ED03046FCF7D7 -+:104E2000FDFA38B1417822464B08811C1846FCF740 -+:104E300083FC07E043F20200EAE72046FDF796FA1A -+:104E40000028E5D11021E01D0DF026FAE21D2946CB -+:104E50006846FEF788FC102204F11700019919F04A -+:104E600023F80020D4E72DE9F041044690B0154620 -+:104E70008846002708460DF0AEFD18B928460DF00B -+:104E8000AAFD18B1102010B0BDE8F0812046FCF753 -+:104E9000C5FA060003D03078272818D102E043F283 -+:104EA0000200F0E7B07F00F00300012806D00021E7 -+:104EB000204609F0F6FE040003D101E00121F7E7E6 -+:104EC000FFDF6078400702D5A078800701D4082072 -+:104ED000D9E7B07F00F00300012818D0D4E9190108 -+:104EE000407800B1B5B1487810B1B8F1000F11D0D9 -+:104EF000C5B1EA1D02A8E168FEF735FC102205F1F4 -+:104F00001700039918F0A4FF30B104270AE0D4E990 -+:104F10001910E5E70720B6E71022E91D04F131007A -+:104F200018F0C2FFB8F1000F06D0102208F10701F7 -+:104F300004F1210018F0B8FF6078252140F002004C -+:104F400060703046FCF7A2FA6078C10715D020F0F7 -+:104F50000100607002208DF8200004F121000A9009 -+:104F600010300B908DF8247008A9EF300BF097FAF1 -+:104F7000022804D018B1FFDF01E084F8207000207F -+:104F800081E7F8B515460E460746FCF747FA0400D8 -+:104F900004D02078222804D00820F8BD43F2020073 -+:104FA000F8BDA07F00F00300022802D043F2050004 -+:104FB000F8BD30460DF0C4FC18B928460DF0C0FC11 -+:104FC00008B11020F8BD00953288B31C2146384640 -+:104FD000FEF7E1FB112814D00028F3D1297C4A0800 -+:104FE000E17F62F30001E1772A7C62F34101E1771E -+:104FF000297C890884F82010A17F21F08001A17705 -+:10500000F8BDA17F0907FBD4D6F80200C4F836002A -+:10501000D6F80600C4F83A003088A0861022294647 -+:1050200004F1240018F040FF287C4108E07F61F380 -+:105030008200E077297C61F3C300E077287C800858 -+:1050400084F82100A07F40F00800A0770020D3E77B -+:1050500070B596B00D46064613B1072016B070BD68 -+:10506000FCF7DCF9040007D02078222802D3A07FC7 -+:10507000400604D40820F1E743F20200EEE7C5B190 -+:105080002D208DF80000ADF802601022294601A8FD -+:1050900018F00AFF287C4108E07F61F30000E07708 -+:1050A000297C61F34100E077287C800884F82000A7 -+:1050B00004E02E208DF80000ADF802600BA96846D0 -+:1050C00007F0D3F8A17F21F04001A177C6E770B5C2 -+:1050D0000D46FCF7A3F9040005D028460DF054FC5A -+:1050E00020B1102070BD43F2020070BD2946204659 -+:1050F000FEF7F0FA002070BD05E000BF10F8012BAC -+:105100000AB100207047491E89B2F7D201207047CA -+:10511000F0B50078059F1E4614460D46012800D0C4 -+:10512000FFDF0C2030803A203880002C08D0287A0D -+:10513000052806D0287B012800D0FFDF17206081DA -+:10514000F0BDA889FBE72DE9F04786B0144691F839 -+:105150000C900E9A0D46B9F1010F0BD0102100787A -+:105160002E8A8846052807D0062833D0FFDF06B0F0 -+:10517000BDE8F0870221F2E7E8890C2100EB40004E -+:1051800001EB4000188033201080002CEFD0E8891C -+:10519000608100271AE00096688808F1020301AADE -+:1051A000696900F092FE06EB0800801C07EB4701DE -+:1051B00086B204EB4102BDF8040090810DF10601B6 -+:1051C00040460E320BF02CFA7F1CBFB26089B84209 -+:1051D000E1D8CCE734201080E889B9F1010F11D073 -+:1051E000122148430E301880002CC0D0E88960811D -+:1051F0004846B9F1010F00D00220207300270DF1BD -+:10520000040A1FE00621ECE70096688808F1020313 -+:1052100001AA696900F059FE06EB0800801C86B2FD -+:10522000B9F1010F12D007EBC70004EB4000BDF845 -+:105230000410C18110220AF10201103018F034FE6E -+:105240007F1CBFB26089B842DED890E707EB470108 -+:1052500004EB4102BDF80400D0810AF1020140468E -+:1052600010320BF0DDF9EBE72DE9F0470E4688B080 -+:1052700090F800C096F80C80378AF5890C201099B8 -+:1052800002F10C044FF0000ABCF1030F08D0BCF18E -+:10529000040F3ED0BCF1070F7DD0FFDF08B067E7F9 -+:1052A00005EB850C00EB4C00188031200880002AAB -+:1052B000F4D0A8F1060000F0FF09558125E018217F -+:1052C00001A818F08AFE00977088434601AA716908 -+:1052D00000F0FBFDBDF804002080BDF80600E08072 -+:1052E000BDF808002081A21C0DF10A0148460BF010 -+:1052F00097F9B9F1000F00D018B184F804A0A4F810 -+:1053000002A007EB080087B20A346D1EADB2D6D2F8 -+:10531000C4E705EB850C00EB4C00188032200880B8 -+:10532000002ABBD0A8F1050000F0FF09558137E045 -+:1053300000977088434601AA716900F0C6FD9DF888 -+:105340000600BDF80410E1802179420860F30001F5 -+:1053500062F34101820862F38201C20862F3C30171 -+:10536000020962F30411420962F34511820962F3F2 -+:1053700086112171C0096071BDF8070020812246A5 -+:105380000DF1090148460BF04BF918B184F802A061 -+:10539000A4F800A000E007E007EB080087B20A3499 -+:1053A0006D1EADB2C4D279E7A8F1020084B205FB4C -+:1053B00008F000F10E0CA3F800C035230B80002A82 -+:1053C000A6D055819481009783B270880E3271699E -+:1053D00000F07BFD62E72DE9F84F1E460A9D0C4662 -+:1053E00081462AB1607A00F58070D080E089108112 -+:1053F00099F800000C274FF000084FF00E0A0D2816 -+:1054000073D2DFE800F09E070E1C28303846556A3C -+:1054100073737300214648460095FFF779FEBDE897 -+:10542000F88F207B9146082802D0032800D0FFDFA8 -+:10543000378030200AE000BFA9F80A80EFE7207B20 -+:105440009146042800D0FFDF378031202880B9F151 -+:10545000000FF1D1E3E7207B9146042800D0FFDF65 -+:1054600037803220F2E7207B9146022800D0FFDF10 -+:1054700037803320EAE7207B1746022800D0FFDF81 -+:105480003420A6F800A02880002FC8D0A7F80A80F2 -+:10549000C5E7207B1746042800D0FFDF3520A6F89B -+:1054A00000A02880002FBAD04046A7F80A8012E05A -+:1054B000207B1746052802D0062800D0FFDF1020E9 -+:1054C000308036202880002FA9D0E0897881A7F885 -+:1054D0000E80B9F80200B881A1E7207B9146072829 -+:1054E00000D0FFDF37803720B0E72AE04FF012000E -+:1054F00018804FF038001700288090D0E08978811C -+:10550000A7F80E80A7F8108099F800000A2805D0A7 -+:105510000B2809D00C280DD0FFDF80E7207B0C285A -+:1055200000D0FFDF01200AE0207B0D2800D0FFDF44 -+:10553000042004E0207B0E2800D0FFDF0520387314 -+:105540006DE7FFDF6BE770B50C460546FBF766FFBE -+:1055500020B10078222804D2082070BD43F2020056 -+:1055600070BD0521284609F09CFB206008B1002091 -+:1055700070BD032070BDFFB585B00746089814467E -+:105580000D46022628B908A93846FFF7DCFF002897 -+:1055900040D108980121801D04F074FDADF8080089 -+:1055A00002464DB100233146384603F005FB98B35F -+:1055B0000898007880BB05E02078092820D00F28C3 -+:1055C0002BD0FFDF03A8009004ABBDF808203146C4 -+:1055D000384603F06EFB00281CD1089802A9801DF4 -+:1055E000C4E90107DDE90332204604F058FD40B369 -+:1055F000072824D2DFE800F01A182323211C1E00FC -+:10560000072600233146384603F0D6FA0028D9D1C0 -+:1056100043F2040009B0F0BD06E0002331463846ED -+:1056200003F0CAFA0028CDD11120F3E70020F1E7FA -+:105630000820EFE743F20300ECE70720EAE7032046 -+:10564000E8E703980090BDF8083004223146384658 -+:1056500003F0A3FC0028DDD1002DDBD008990D70EC -+:10566000D8E710B588B01C46AAB104238DF80030E5 -+:105670001388ADF80C305288ADF80E208A788DF87A -+:1056800012200988ADF8101000236A462146FFF762 -+:1056900072FF08B010BD1020FBE770B50D46052164 -+:1056A00009F0FFFA040000D1FFDF2946A01DBDE884 -+:1056B000704004F0D0BC70B596B00C460646FFF7BB -+:1056C000ECFF05462146304601F036FE012130460A -+:1056D00001F050FE002D25D13046FBF79FFE05005E -+:1056E00000D1FFDF95F822001B281BD9172C19D9F0 -+:1056F0003A208DF80000ADF8026095F82200211DD7 -+:10570000884201D9241D00E00446ADF8044040F66B -+:105710004800ADF806000BA9684606F0A6FD002873 -+:1057200000D0FFDF16B070BD2DE9F84305460078C4 -+:1057300000260C4612287BD2DFE800F0896464431F -+:105740003B663737133737370937373737372879D5 -+:10575000001FC0B2022801D010281FD104BBFFDFF8 -+:105760001EE004B9FFDF6088052109F09AFA00788D -+:10577000032805D004280AD0072811D0FFDF0DE048 -+:105780002879801FC0B202280AD048B106E02879E3 -+:10579000401FC0B2022803D0102801D0072657E0CE -+:1057A000607840F00800607052E0002CF8D1FFDF14 -+:1057B000F6E704B9FFDF28790128F1D160881721C5 -+:1057C00042E0A888052180B2804609F06AFA0746BF -+:1057D00004B1FFDF07B9FFDF4146B81D04F015FC37 -+:1057E00002F091FC040008D0607840F0080060707E -+:1057F000A4F8028002F067FC2BE013214046FDF77D -+:1058000031F937E0FFDF23E004B9FFDF60880521CD -+:1058100009F047FA070000D1FFDF6946B81D04F020 -+:10582000FBFB00B1FFDFA988172902D2172201E094 -+:105830000DE00A46BDF80000824201D9014602E0AF -+:10584000172900D217216088FFF735FFA8E7FFDF8F -+:1058500084B1607800070DD52078182220F00F0061 -+:10586000C01C20F0F00090302070294604F10800A0 -+:1058700018F05FFB3046BDE8F88300200870881DF3 -+:1058800004F0B7BB0A460146901D04F0C4BB70B5D6 -+:105890000546052109F005FA040000D1FFDF29467D -+:1058A000A01DBDE8704004F0B0BB2DE9F74F90B0EB -+:1058B0004FF0000AADF830A0ADF804A047880C46C0 -+:1058C00005460521384609F0ECF9060000D1FFDF56 -+:1058D00024B1A780A4F806A0A4F808A0297A04F1AE -+:1058E00010003827C91E4FF00C0B4FF001084FF085 -+:1058F000120902900F297DD2DFE801F0F1F0EF7F6D -+:1059000008D2888D9F3DDBF2EDB6B60030780228D4 -+:1059100000D0FFDFA8890BEBC001ADF804103021E7 -+:10592000ADF83010002C25D06081B5F80E8000272E -+:105930001DE004EBC709317989F80E107188A9F8C8 -+:105940000C10CDF800806888042305AA296900F0AE -+:10595000BCFABDF81410A9F8101008F10400BDF845 -+:1059600016107F1C1FFA80F8A9F81210BFB26089C8 -+:10597000B842DED808E13078022800D0FFDFE9899C -+:105980000BEBC100ADF804003020ADF8300095F805 -+:105990000CB0002CABF10400C0B20F90EAD06181D2 -+:1059A000B5F81090002722E0CDF8009068885B469B -+:1059B00003AA696900F089FA09EB0B001FFA80F964 -+:1059C00004EBC70808F10C0204A90F980AF028FE9E -+:1059D00018B188F80EA0A8F80CA0BDF80C10A8F813 -+:1059E0001010BDF80E107F1CA8F81210BFB260890D -+:1059F000B84200E0C7E0D7D8C6E00CA8009001ABE1 -+:105A0000224629463046FFF79EFBBDE03078082845 -+:105A100005D0FFDF03E03078082800D0FFDFE889F9 -+:105A20001030ADF804003620ADF83000002C3FD027 -+:105A3000A98961817188A18127E03078092800D087 -+:105A4000FFDFA88900F10C01ADF804103721ADF893 -+:105A50003010002C2CD06081E8890090AB896888D8 -+:105A600004F10C02296955E0E8893921103080B22F -+:105A7000ADF80400ADF83010002C72D0A989618116 -+:105A8000287A10280AD002212173E989E181288A25 -+:105A90000090EB8968886969029A3BE00121F3E78D -+:105AA0000CA8009001AB224629463046FFF7DCFBEC -+:105AB0006AE030780A2800D0FFDFADF80490ADF836 -+:105AC00030704CB3A9896181A4F810A0A4F80EA08D -+:105AD00084F80C8058E020E002E030E038E041E05B -+:105AE00030780B2800D0FFDF288AADF830701230F4 -+:105AF000ADF8040084B104212173A9896181E98989 -+:105B0000E181298A2182688A00902B8A688804F1C1 -+:105B10001202696900F0D9F936E030780C2800D01B -+:105B2000FFDFADF80490ADF8307044B30521217368 -+:105B3000A4F80AA0A4F80EA0A4F810A024E00CA8D1 -+:105B4000009001AB224629463046FFF7E1FA1BE000 -+:105B50000CA8009001AB224629463046FFF73BFCDB -+:105B600012E00DE00B203B21ADF80400ADF8301041 -+:105B700034B1A4F80680A4F808A084F80AA003E0D1 -+:105B80001299088014E0FFDF1299BDF80400088024 -+:105B900074B1BDF830002080BDF804006080287A20 -+:105BA000032805D0102803D0112801D086F800A0C2 -+:105BB00013B00020BDE8F08F2DE9FC4156880F4658 -+:105BC000804615460521304609F06BF8040000D1E7 -+:105BD000FFDFA41DCDE900642B463A4640466968C4 -+:105BE00004F011FCBDE8FC8170B50D46052109F0FB -+:105BF00058F8040000D1FFDF2946A01DBDE8704021 -+:105C000004F015BA70B50D46052109F04AF80400F4 -+:105C100000D1FFDF2946A01DBDE8704004F03ABA6C -+:105C20002DE9F0438DB00D461446814607A9FFF7D4 -+:105C30008AFC002814D14FF6FF7601274FF4205834 -+:105C40008CB103208DF800001020ADF8140008A8D6 -+:105C5000069008AA204605A90AF001FD78B10720A0 -+:105C60000DB0BDE8F0830820ADF80C508DF812702F -+:105C70008DF80000ADF80E60ADF810800CE00798CC -+:105C8000A1780171218841808DF81270ADF80C5017 -+:105C9000ADF81080ADF80E606A4602214846079BB9 -+:105CA000FFF769FCDCE708B501228DF8022042F617 -+:105CB0000202ADF800200A4603236946FFF7D1FC33 -+:105CC00008BD08B501228DF8022042F60302ADF8A6 -+:105CD00000200A4604236946FFF7C3FC08BD00B54F -+:105CE00087B079B102228DF800200A88ADF80C2027 -+:105CF0004988ADF80E1000236A460521FFF73BFCEA -+:105D000007B000BD1020FBE709B10723A9E4072075 -+:105D1000704770B588B00D461446064607A9FFF7D0 -+:105D200012FC00280ED17CB10620ADF80C508DF885 -+:105D30000000ADF80E40079B6A4608215C803046A3 -+:105D4000FFF719FC08B070BD05208DF80000ADF814 -+:105D50000C50F0E700B587B059B107238DF800303B -+:105D6000ADF80C20049100236A460921FFF703FCDB -+:105D7000C6E71020C4E770B588B00C46064600257B -+:105D800007A9FFF7E0FB0028DCD107980121801D5F -+:105D900004F078F99CB12178062921D2DFE801F0DE -+:105DA000200505160318801E80B2C01EE28880B24E -+:105DB0000AB1A3681BB1824203D90C20C2E71020AC -+:105DC000C0E7042904D0A08850B901E00620B9E753 -+:105DD000012913D0022905D004291CD005292AD075 -+:105DE0000720AFE709208DF800006088ADF80C00AF -+:105DF000E088ADF80E00A068049023E00C208DF838 -+:105E000000006088ADF80C00E088ADF80E00A068D6 -+:105E10000A25049016E00D208DF800006088ADF88A -+:105E20000C00A088ADF80E00E088ADF81000A06866 -+:105E30000B25059006E00E208DF8000060788DF8A7 -+:105E40000C000C256A4629463046079BFFF793FB5A -+:105E500078E700B587B00F228DF80020ADF80C1060 -+:105E600000236A461946FFF786FB49E700B587B06D -+:105E700071B102228DF800200A88ADF80C20498803 -+:105E8000ADF80E1000236A460621FFF774FB37E7D2 -+:105E9000102035E770B588B0064601200D46ADF8F4 -+:105EA0000C108DF80000014600236A463046FFF7CB -+:105EB00062FB040008D12946304601F02EFA002189 -+:105EC000304601F057FA20463CE7F8B51C46154627 -+:105ED0000E46069F09F048F82346FF1DBCB2314626 -+:105EE0002A46009408F060FCF8BD000018B18178E3 -+:105EF000012938D101E010207047018842F60112D3 -+:105F0000881A914231D018DC42F60102A1EB02005E -+:105F100091422AD00CDC41B3B1F5C05F25D06FF4BB -+:105F2000C050081821D0A0F57060FF381BD11CE0CC -+:105F300001281AD002280AD117E0B0F5807F14D0CA -+:105F400008DC012811D002280FD003280DD0FF282B -+:105F500009D10AE0B0F5817F07D0A0F58070033841 -+:105F600003D0012801D0002070470F2070470B2874 -+:105F700026D008DC1BD2DFE800F01C2025251A25DE -+:105F8000292325271E0011281CD008DC0C2817D037 -+:105F90000D281DD00F2815D0102808D110E0822818 -+:105FA00009D0842810D0852810D0872812D003204B -+:105FB0007047002070470520704743F20300704788 -+:105FC000072070470F207047042070470620704755 -+:105FD0000C2070474FF45050704708280DD2DFE86E -+:105FE00000F00406040C0C080C0A00207047112075 -+:105FF000704707207047082070470320704738B566 -+:106000000C46050041D06946FEF7D4FA002819D1A4 -+:106010009DF80010607861F3020060706946681CAA -+:10602000FEF7C8FA00280DD19DF80010607861F3E2 -+:10603000C5006070A978C1F34101012903D002298C -+:1060400005D0072038BD217821F0200102E0217819 -+:1060500041F020012170410704D0A978C90861F3FB -+:1060600086106070607810F0380F07D0A9780909A1 -+:1060700061F3C710607010F0380F02D160784006ED -+:1060800003D5207840F040002070002038BD70B566 -+:1060900004460020088015466068FFF7B0FF00281E -+:1060A00016D12089A189884211D860688078C007FC -+:1060B0000AD0B1F5007F0AD840F20120B1FBF0F21E -+:1060C00000FB1210288007E0B1F5FF7F01D90C20FA -+:1060D00070BD01F201212980002070BD10B5047847 -+:1060E000137864F3000313700478640864F34103C5 -+:1060F00013700478A40864F3820313700478E4082E -+:1061000064F3C30313700478240964F30413137055 -+:106110000478640964F3451313700078800960F310 -+:106120008613137031B10878C10701D1800701D5FA -+:10613000012000E0002060F3C713137010BD427807 -+:10614000530702D002F0070306E012F0380F02D026 -+:10615000C2F3C20300E001234A7863F302024A70EB -+:10616000407810F0380F02D0C0F3C20005E04307BA -+:1061700002D000F0070000E0012060F3C5024A7081 -+:1061800070472DE9F04796B00D00804613D0B8F166 -+:10619000000F14D01221284617F0FDFE06AAFF2199 -+:1061A000012005F09DFE0024264637464FF4205975 -+:1061B0006FF4205A78E0102016B0BDE8F087072071 -+:1061C000FAE700BF9DF8220001280AD1BDF820009F -+:1061D00048450BD010EB0A000AD001280CD0022849 -+:1061E0000CD0042C0ED0052C0FD10DE0012400E0C2 -+:1061F0000224BDF81E6008E0032406E00424BDF874 -+:106200001E7002E0052400E00624BDF81E10414582 -+:106210004AD12C74D6B30DF140094FF0000811AAF1 -+:10622000CDF81490CDF80880CDE903824FF0070A2D -+:10623000CDE900A810234246FF21304605F0FEFEBE -+:1062400010BBBDF840002A46C0B211A90AF0E8F917 -+:10625000D0B9AE81D7B103A90BAE4046CDF80880C6 -+:1062600081E84102CDE900A813230022FF2138462E -+:1062700005F0E4FE40B9BDF84000F11CC01EC0B2FC -+:106280002A1D0AF0CDF910B1032095E70AE0BDF808 -+:106290002D00E881062C05D19DF82200A872BDF8DA -+:1062A00020002881002087E706A805F021FE0028AD -+:1062B00088D0FFF75CFE7FE72DE9F8439846DDE9DB -+:1062C000087614460D00814600D1FFDF0CB1012194 -+:1062D00000E0002105F1080004F0DEFC30800246F9 -+:1062E00000232146484602F067FC40B100973288FF -+:1062F00043462146484602F0DCFCBDE8F883072C03 -+:1063000001D01120F9E743F20400F6E72DE9F0434C -+:106310008DB00E46DDE9149805461C46174614213B -+:1063200006A817F05AFE012002218DF81C108DF8E6 -+:1063300018008DF81D80ADF8207064B1A178C907F0 -+:1063400009D08DF82200E088ADF82600A088ADF8CD -+:106350002400A0680A9001F0D6FE040023D06580D6 -+:106360000BA904A8CDE900010CAB00223146284658 -+:10637000FFF7A2FF002813D1049808368DE87100BA -+:106380000BAA494606A80C9B05F057F8064660780C -+:10639000000701D501F097FE5EB13046FFF71DFE04 -+:1063A0000DB0BDE8F08313212846FCF75BFB03200A -+:1063B000F6E704980090BDF82C300422002128460E -+:1063C00002F0EBFDECE7F0B58DB000240746099430 -+:1063D00006A80A94CDE904400725CDE900540794A6 -+:1063E00008940E460294039410232246384605F082 -+:1063F00025FE80B90BA8059007A90294CDE90341B9 -+:10640000CDE90054BDF8183000223146384605F079 -+:10641000F8FB002801D0FFF7AAFD0DB0F0BD05F094 -+:106420009DBA2DE9FC470546002600780C46B0468B -+:106430000D2871D2DFE800F0B2070EAA30C853531E -+:106440007188A68C970004B1FFDFA88880B201F0A4 -+:10645000CCFFA4E0A888042180B2814608F021FC8A -+:10646000074604B1FFDF07B9FFDF494607F108001F -+:1064700004F0ABFB01F047FE040008D0607840F068 -+:1064800008006070A4F8029001F01DFE88E013215E -+:106490004846FCF7E7FA97E004B9FFDF608804217B -+:1064A00008F0FFFB070000D1FFDFE888ADF800002F -+:1064B000002038809DF80000010704D5C00602D5F1 -+:1064C000A888388005E09DF80100400667D5A888B7 -+:1064D00078806078022640F0080060705FE0E8880D -+:1064E000ADF8000004B9FFDF9DF80100000604D5F7 -+:1064F0002878072806D0062828D0607840F00800C1 -+:1065000060704CE06088042108F0CBFB060000D1ED -+:10651000FFDFA888708019E040E004B9FFDF6088E1 -+:10652000042108F0BEFB070000D1FFDF07F10800DF -+:1065300005F04CFA90F0010F02D1E87900062ED553 -+:1065400060880226B880D8E704B9FFDF0226D4E7C6 -+:1065500004B9FFDF022661880122204601F089FF8D -+:106560004FF00108C9E7A88987B204B1FFDF686866 -+:1065700000902889ADF8040001226946384601F0F0 -+:1065800093FF0CE0002CB8D1FFDFB6E704B9FFDFC2 -+:10659000022660880021FFF735FBAEE7FFDF9CB1E4 -+:1065A0006078000710D5B8F1000F0DD120781422C3 -+:1065B00020F00F00001D20F0F000803020702946F0 -+:1065C00004F1080017F0B5FC3046BDE8FC873EB585 -+:1065D0000C0008D06B4601AA002105F0AEFD20B1E9 -+:1065E000FFF7C5FC3EBD10203EBD00202080A070FE -+:1065F0009DF8050002A900F00700FDF7F7FF50B96C -+:106600009DF8080020709DF8050002A9C0F3C200A3 -+:10661000FDF7ECFF08B103203EBD9DF80800607057 -+:106620009DF80500C109A07861F30410A0709DF8E1 -+:106630000510890961F3C300A0709DF80410890654 -+:1066400001D5022100E0012161F342009DF8001014 -+:1066500061F30000A07000203EBD70B514460646F0 -+:106660000D4651EA040005D075B108460CF0AAF9B0 -+:1066700078B901E0072070BD2946304605F0B8FD25 -+:1066800010B1BDE8704072E454B120460CF09AF9A4 -+:1066900008B1102070BD21463046BDE8704096E735 -+:1066A000002070BD2DE9FE4F05460C46007A0A31E8 -+:1066B000009104F108010291904600270C31821EDE -+:1066C0003E464FF0020B4FF0010A0191092A75D2A4 -+:1066D000DFE802F0F3F20574252577B6F400688848 -+:1066E000042108F0DEFA060000D1FFDF308810B187 -+:1066F00052270726E9E051271026002C7ED0688813 -+:10670000A08084F806A0A88900220099FFF7A5FFC1 -+:10671000002874D1A8892081288AE081F8E0B5F8A2 -+:106720001290072825D1E87B000622D5512709F1D0 -+:10673000140086B2002CE1D0A88900220099FFF74E -+:106740008CFF00287AD16888A08084F806B0A889D8 -+:10675000208184F80EA0288A2082A4F81290A88AAA -+:10676000009068884B46A969DDF8042001F0C1FA61 -+:10677000CEE0502709F1120086B2002C3ED0A88945 -+:1067800000220299FFF769FF002857D16888A0808E -+:10679000A889E080287A072811D002202073288A4F -+:1067A000E081E87B4B46C0096073A4F81090A88A8A -+:1067B0000090688804F11202A969D7E7A7E00120D8 -+:1067C000ECE76888042108F06CFAB5F812A05FEADB -+:1067D000000900D1FFDF09F1080005F0F7F890F09B -+:1067E000010F02D1E87B000627D50AF114005127DA -+:1067F00086B2002C7FD06888A08001E070E01DE0A8 -+:10680000A88900220099FFF728FF002816D184F8F4 -+:1068100006B0A88920810420A073288A2082A4F8C9 -+:1068200012A0A88A009068885346A969019A01F0CD -+:1068300060FAA989A9F802106AE00320BDE8FE8F7A -+:106840006888FAF7EBFD82466888042108F029FA87 -+:106850008146BAF1000F00D1FFDFB9F1000F00D17E -+:10686000FFDFB9F80400A0F57F41FF3902D05127BE -+:10687000142601E05027122694B36888A080502F78 -+:1068800006D084F806B0287B029901F042FA3FE076 -+:10689000287BA11D01F03DFA00219AF82300CDE9E3 -+:1068A00000010B46B9F8022068884946FFF72EFD23 -+:1068B0000028C3D12CE001E013E01FE0FE49A889C5 -+:1068C000C988814205D1542706264CB16888A0802A -+:1068D0001EE053270CE06888A080A889E08017E0BC -+:1068E00009E06888042108F0DCF900B9FFDF5527CA -+:1068F0000826002CEFD1A8F800600EE056270726E6 -+:10690000002CF8D0A889A0800020A07100E0FFDF53 -+:10691000A8F800600CB12780668000208EE7E64969 -+:1069200000200870704730B587B00C4608F082F937 -+:106930000546FF2800D1FFDF0020208060804FF651 -+:10694000FF70A080294604F1080004F025F902AA8E -+:106950002946012005F0C4FA1AE000BF9DF80B009B -+:10696000000715D5BDF80E002946FFF72CFD9DF850 -+:106970000B00FF2340F010008DF80B00BDF80B005A -+:10698000ADF80400BDF80E002946019A05F0FEFBA3 -+:1069900002A805F0ADFA0028E0D007B030BD0A46E5 -+:1069A000014602F1080004F016B970B5054604214D -+:1069B00008F077F9040000D1FFDF294604F1080050 -+:1069C000BDE8704004F001B9F0B58FB00C46074641 -+:1069D000FAF724FD060005D03078222805D20820D9 -+:1069E0000FB0F0BD43F20200FAE70CB1A08870B11D -+:1069F00001208DF81C0003208DF8200000208DF868 -+:106A0000210034B1A088ADF82800206803E00920F7 -+:106A1000E6E7ADF82800099001F075FB050007D006 -+:106A20006F800421384608F03CF9040007D105E0E6 -+:106A300013213846FCF716F80320D1E7FFDF06A93B -+:106A400004A8CDE900010CAB002221463846FFF72F -+:106A500033FC0028C4D104F10800049903908DE8A8 -+:106A6000A20096F8231006AA07A80C9B04F0E5FCE8 -+:106A700006466878000701D501F025FB1EB13046B7 -+:106A8000FFF7ABFAACE704980090BDF81830042289 -+:106A90000021384602F081FA4FF6FF71A1809FE78E -+:106AA0002DE9FF4F87B09846DDE9159793467E881C -+:106AB000DDF850A03046FAF7B1FC05460421304617 -+:106AC00008F0EFF8044605B9FFDF04B9FFDF08342A -+:106AD000CDE90464CDE90297CDE9008ADDE907023A -+:106AE00095F823105B4604F0E7F80BB0BDE8F08F93 -+:106AF0002DE9F04F9BB004464FF000086E48ADF80A -+:106B00005880ADF83080ADF85480A0F80480ADF81E -+:106B10001880ADF81C80ADF82480ADF82080007896 -+:106B200016460D464746012808D0022806D00328FD -+:106B300004D0042802D008201BB0D7E720460BF071 -+:106B4000FFFED0BB28460BF0FBFEB0BB60680BF02D -+:106B500042FF90BB606848B160892189884202D8B1 -+:106B6000B1F5007F01D90C20E6E780460BAA07A902 -+:106B70002846FFF78CFA0028DED168688078C0F3D9 -+:106B80004100022808D19DF81D0010F0380F03D0F5 -+:106B900028690BF017FF80B906A92069FFF72FFAC3 -+:106BA0000028C9D1206950B1607880079DF819008C -+:106BB00000F0380002D5E8B301E011E0D0BB9DF849 -+:106BC000180080060ED59DF8190010F0380F03D07C -+:106BD00060680BF0F7FE18B960680BF0FCFE08B1B6 -+:106BE0001020A9E708A96069FFF709FA0028A3D1D6 -+:106BF000606940B19DF8210000F0070101293BD1F7 -+:106C000010F0380F38D009A9A069FFF7F8F900286B -+:106C100092D19DF8200080062ED49DF82400800695 -+:106C20002AD4A06950B19DF8250000F00701012980 -+:106C300022D100E020E010F0380F1DD0E06818B13C -+:106C40000078C8B11C2817D20FAA611C2046FFF794 -+:106C500045FA0120B94660F30F27BA4607468DF87A -+:106C6000520042F60300ADF850000DF13F0218A9A2 -+:106C7000286809F0F4FC08B107205DE79DF8600082 -+:106C800017A9CDF80090C01CCDE9019100F0FF0BD1 -+:106C900000230BF20122514614A805F066F8E8BB68 -+:106CA000BDF85C000E9004492A892869091D0092EC -+:106CB000CDE901016B8901E010030020BDF82C2013 -+:106CC0002868079905F051F801007DD120784FF030 -+:106CD000020AC10601D480062BD5ADF80C9060697C -+:106CE00050B908A907A8FFF72AFA9DF8210020F05B -+:106CF0000700401C8DF821009DF820008DF852708F -+:106D000040F0C8008DF8200042F60210ADF85000A7 -+:106D10000CA903AA0023CDF800A000E021E0CDE9F2 -+:106D2000012140F2032214A8089905F01EF8010081 -+:106D30004AD1FE484D465B468088ADF83D000FA81D -+:106D4000CDF80890CDE90390CDF814904FF00709E5 -+:106D5000CDE900950022FF21BDF85C0004F051FF51 -+:106D600010B1FFF704F9E7E69DF83C00000625D5D1 -+:106D70002946012060F30F218DF852704FF4245002 -+:106D8000ADF85000ADF8105062789DF81000002367 -+:106D900062F300008DF810006278CDF800A0520870 -+:106DA00062F341008DF8100004AACDE9012540F2FC -+:106DB000032214A804F0D9FF010005D1606850B384 -+:106DC000206970B906A900E07EE007A8FFF7B7F9CF -+:106DD0006078800705D49DF8190020F038008DF800 -+:106DE00019008DF8527042F60110ADF8500020895C -+:106DF00040F20121B0FBF1F201FB1202606815AB19 -+:106E0000CDF80080CDE90103002314A8069904F011 -+:106E1000ACFF010058D12078C00729D0ADF80C5044 -+:106E2000A06950B909A907A8FFF789F99DF82500BD -+:106E300020F00700401C8DF825009DF824008DF8F7 -+:106E4000527040F040008DF8240042F60310ADF877 -+:106E5000500016A903AACDF800A0CDE90121002316 -+:106E600040F2032214A8099904F07FFF01002BD1FE -+:106E7000E06868B32946012060F30F218DF8527055 -+:106E800042F60410ADF85000E068002302788DF857 -+:106E9000102040788DF81100E06804AA4088ADF811 -+:106EA0001200E06800798DF81400E068C088ADF841 -+:106EB0001500CDF80090CDE901254FF4027214A819 -+:106EC00004F053FF010003D00E9800F035FF33E6C5 -+:106ED00096480321017056B180883080BDF8540077 -+:106EE0007080BDF83000B080BDF85800F080002000 -+:106EF00022E670B501258AB016460B46012802D05D -+:106F0000022816D104E08DF80E504FF4205003E013 -+:106F10008DF80E5042F60100ADF80C0063B100246C -+:106F2000601C60F30F2404AA08A9184609F097FB17 -+:106F300020B107200AB070BD1020FBE704A99DF81E -+:106F400020207A48CDE90021801C029000232146B0 -+:106F500003A802F2012204F008FF10B1FFF707F8BE -+:106F6000E8E772480EB14188318005700020E1E702 -+:106F700070B594B0044601268DF83E6041F60100DC -+:106F8000ADF83C0012AA0FA93046FFF7B2FF002867 -+:106F900048D12078654CC0074FF0000544D01C2133 -+:106FA00002A817F01AF89DF808008DF83E6040F02E -+:106FB00020008DF8080042F60520ADF83C000E9543 -+:106FC0009DF83A00119520F00600801C8DF83A00DB -+:106FD0009DF838006A4620F0FF008DF838009DF8D3 -+:106FE000390009A920F0FF008DF839000420ADF820 -+:106FF0002C00ADF830000EA80A9011A80D900FA833 -+:107000000990ADF82E5002A8FFF772FD002809D1B3 -+:10701000BDF80000E080BDF804002081401C6081C4 -+:107020002570002014B070BDE5802581BDF84800B2 -+:10703000F4E72DE9F74F3D49A2B04FF000080A7878 -+:10704000012A04D0022A02D0082025B04EE54A8841 -+:10705000824201D00620F8E723988A46824201D175 -+:107060000720F2E701208DF8760042F6020B00249B -+:10707000ADF874B0ADF84C004FF6FF702146621CBD -+:1070800062F30F21ADF84E00ADF8560007918DF870 -+:107090007A40FF20ADF878401EA98DF85400149175 -+:1070A00013A804F049FF00252E462F460DF12809AC -+:1070B0000EAB4FF6FF72072113A804F040FF78B122 -+:1070C00082285FD1A5B39EB39DF86600ADF86C50E1 -+:1070D0008DF81840ADF86E601BAC012866D06DE0ED -+:1070E0009DF83E002FB301285BD1BDF83C105945F7 -+:1070F00021D11AA8CDE904900720CDE9000402941B -+:107100000394BDF83A0010230022FF2104F096FFFB -+:10711000C0BBBDF86800042801D006284CD1BDF8DA -+:107120002810239881423CD10F208EE710030020C5 -+:107130003AE0012835D1BDF83C00B0F5205F03D01E -+:1071400042F6010188422CD1BAF80210BDF83A008B -+:10715000814201D1012700E0002705B19EB12399AA -+:1071600088421ED11AA9CDE904910721CDE9001466 -+:1071700005460294039410230022FF2104F05EFFD1 -+:1071800000B902E02DE046460BE0BDF86800022899 -+:1071900001D0102810D1C0B219AA0AA909F040FAEA -+:1071A00050B9BDF83A8083E705204EE706A919A833 -+:1071B000221D09F054FA08B1032046E79DF8180093 -+:1071C0000023001DC2B28DF8182024980092CDE94A -+:1071D00001401DA8079904F0C8FD10B902228AF8E1 -+:1071E0000020FEF7C4FE30E710B50B46401E88B005 -+:1071F00084B206AA00211846FEF770FF07A906AA66 -+:10720000CDE9042100200721CDE900100290039070 -+:1072100002460123FF21204604F0F3FC0446BDF89A -+:107220001C00012800D0FFDF2046FEF7A0FE08B0BA -+:1072300010BDF0B5F84F044687B038780E460328E5 -+:1072400004D0042802D0082007B0F0BD04AA03A986 -+:107250002046FEF71CFF0500F6D160688078C0F379 -+:10726000410002280AD19DF80D0010F0380F05D01A -+:1072700020690BF0A7FB08B11020E5E7208905AADB -+:1072800021698DE807006389BDF810202068039903 -+:1072900004F06BFD10B1FEF76AFED5E716B1BDF83C -+:1072A00014003080042038702846CDE738B50C0033 -+:1072B000054608D000236A46FF2104F03EFF20B1B6 -+:1072C000FEF755FE38BD102038BD69462046FEF752 -+:1072D00096FE0028F8D1A078FF2100F0010328468F -+:1072E000009A04F053FFEBE730B587B01446002254 -+:1072F0000DF10C0C06AD02928CE82C000723CDE9B1 -+:1073000000320A462388FF2104F07BFCBDF81810E8 -+:107310002180FEF72CFE07B030BD70B50D4604216C -+:1073200007F0BFFC040000D1FFDF294604F108008C -+:10733000BDE8704003F070BC70B50D46042107F045 -+:10734000B0FC040000D1FFDF294604F10800BDE8CD -+:10735000704003F084BC70B50D46042107F0A1FC19 -+:10736000040000D1FFDF294604F10800BDE87040A9 -+:1073700003F092BC70B50D46042107F092FC0400A6 -+:1073800000D1FFDF294604F10800BDE8704003F09A -+:107390008DBC0121FEF736BC2DE9F04196B04FF0CF -+:1073A00000050C008046ADF818501CD0E06828B1EC -+:1073B000A068C0B10188ADF8181005804046FAF702 -+:1073C0002DF8070011D03878222861D3404607F005 -+:1073D00031FC0146A07801280AD0022808D00720F5 -+:1073E00016B0BDE8F0811020FAE743F20200F7E79B -+:1073F000208830B1401C80B207AA04F071FD50BB58 -+:1074000002E043F20300EBE707A804F071FD9DF8EA -+:1074100026204FF45051012A09D1BDF82420A2F5AD -+:107420002453023B03D1822801D0A0B901E00846D1 -+:10743000D6E7E068B0B106A9CDE904010720CDE99F -+:10744000000502950395A2882088BDF81830FF2119 -+:1074500004F0D7FB10B1FEF78AFDC1E7A168BDF8C3 -+:10746000180008809DF81F00C00602D543F20140B5 -+:10747000B6E70B9818B1BDF82800022801D0032008 -+:10748000AEE70B98A1780078012903D0800706D4D5 -+:107490000820A5E7C007FBD00726022001E001264F -+:1074A00003208DF83C009DF8200010F0380F00D12B -+:1074B000FFDF9DF820005949C0F3C200084497F847 -+:1074C000231010F8010C884201D90F2088E720888A -+:1074D000ADF840000421404607F0E3FB040000D172 -+:1074E000FFDF0DA90CA8CDE900010EAB3246214605 -+:1074F0004046FEF7E1FE002885D108340C9903943C -+:107500008DE822010DAA07210FA80E9B03F095FF1D -+:1075100010B1FEF762FD63E70C980090BDF83430BF -+:1075200004223146404601F038FD59E770B5064661 -+:1075300015460C460846FEF7D9FC002805D12A4618 -+:1075400021463046BDE87040D3E470BD71E570B5AA -+:107550001E4614460D0009D044B1616831B138B1FE -+:107560002D494988814203D0072070BD102070BD8D -+:107570002068FEF7BBFC0028F9D132462146284698 -+:10758000BDE87040FFF7B4BA70B515460C0006D0E0 -+:1075900038B121498988814203D0072070BD10206D -+:1075A00070BD2068FEF7A2FC0028F9D129462046CC -+:1075B000BDE870403DE670B5054686B00E461446FF -+:1075C00010460BF0E1F930BB60680BF004FA10BB19 -+:1075D000A5F57F40FF3803D02846F9F71FFFA0B17B -+:1075E000284607F027FB054630466946FEF7C9FDE9 -+:1075F00000280CD19DF810100F2008293FD2DFE899 -+:1076000001F008060606060F0F0843F2020006B056 -+:1076100070BD0320FBE743E0100300206AE3010094 -+:107620009DF80210012908D1BDF80010B1F5C05F26 -+:10763000EDD06FF4C052D142E9D09DF80610012977 -+:107640000BD1BDF80410A1F52851062905D2DFE8B9 -+:1076500001F0030304030303D9E79DF80A1001298D -+:107660000ED1BDF80810B1F5245FD0D0A1F524519A -+:107670000239CCD00129CAD0022901D1C7E7FFDFE6 -+:10768000606878B9002305AA2946304604F055FD04 -+:1076900010B1FEF76CFCBAE79DF81400800601D427 -+:1076A0001020B4E76188224630466368FFF71CFE6D -+:1076B000ADE72DE9F043044689B0894615461046EA -+:1076C0000BF062F918B1102009B0BDE8F083204634 -+:1076D00007F0B0FA4FF6FF770646BC4201D0FF2E06 -+:1076E00009D00146002307AA484604F026FD28B128 -+:1076F000FEF73DFCE8E743F20200E5E79DF81C00D9 -+:10770000C00602D543F20140DEE7002406A8CDE919 -+:1077100004404FF00708CDE90084029403946A887E -+:107720003B463146484604F089FC070014D168689E -+:107730000BF02AF968B968680294CDE90340059412 -+:10774000CDE900842B886A883146484604F076FCEF -+:107750000746BDF8180028803846C9E739B1FA4B0A -+:107760000A881B899A4202D843F20300704713E645 -+:1077700010B586B0F44C0423ADF81430E38843B15F -+:1077800024898C4201D2914205D943F2030006B00C -+:1077900010BD0620FBE7ADF810100021009101910B -+:1077A000ADF8003002218DF8021005A9029104A95C -+:1077B0000391ADF812206946FFF7EEFDE7E72DE9EA -+:1077C000FC4781460F4608460BF0BAF888BB48468E -+:1077D000F9F724FE5FEA00080AD098F80000222892 -+:1077E00029D30421484607F05CFA060005D103E0DE -+:1077F00043F20200BDE8FC87FFDF06F1080003F05A -+:1078000012FA05463878012803D0022804D0072050 -+:10781000F0E7A8070FD502E015F0340F0BD0B879C8 -+:107820003C1DC00709D0E08838B1A0680BF088F88B -+:1078300018B11020DEE70820DCE73A782088002124 -+:1078400028B3A0F201130721112B18D20CD2DFE8C4 -+:1078500003F00B090D0B1D0B121D100B0B1D1D1D35 -+:107860001D0B1D00022A11D10846C3E7012AFBD0D7 -+:107870000CE0EA0600E0AA06002AF5DA06E0A0F528 -+:10788000C0721F2A02D97D3A022AEDD8C1B298F8F7 -+:107890002300CDE900017288234631464846FEF7B1 -+:1078A00035FDA7E72DE9FF4F8DB01E4615460C4666 -+:1078B0004FF000080F460D98F9F7B0FD30B1007891 -+:1078C000222806D2082011B0BDE8F08F43F2020052 -+:1078D000F9E7B00801D00720F5E7032E00D1002614 -+:1078E0000D9807F0A7F94FF6FF7A0690CCB1022D5C -+:1078F00074D320460BF06FF830B904EB0509A9F1F9 -+:1079000001000BF068F808B11020DCE7AD1EAAB248 -+:107910002146504604F022FD39F8021C88425DD110 -+:10792000ADB28948B10702D50189491C00E00121A7 -+:107930001FFA81F9F10701D0068900E0564607AA2F -+:107940004846069904F0CCFA4FF0070B4FF0000AB6 -+:107950000BE07888102841D808F1040108441FFA88 -+:1079600080F8A8453AD804EB08077FB33988494521 -+:10797000EFD353E09DF81F100A074FD544B304EB33 -+:10798000080708F104027B881FFA82F8102B25D81B -+:1079900003EB0802AA4221D83A8890421ED1C806B9 -+:1079A0001ED50DF10C090CAA04EB08015046CDF8C8 -+:1079B00008A089E80700CDE900BA388800220699B6 -+:1079C00004F01FF928B1FEF7D2FA7CE726E005E0C3 -+:1079D0000CE07888BDF83010884201D00B2072E7A7 -+:1079E000798801EB08001FFA80F806E0C90604D583 -+:1079F0000699FEF7E8FC002887D19DF81F00FF23B9 -+:107A000020F010008DF81F00BDF81F00ADF8000039 -+:107A1000BDF82200009A069904F0B8FB07A804F00C -+:107A200067FA18B9BDF82200B042A3D904210D9815 -+:107A300007F037F9040000D1FFDF22885AB1CDE901 -+:107A400000BA5546002321460D98FEF75FFC00283A -+:107A5000BBD1258037E7002035E72DE9F04F8DB009 -+:107A60001E4617000D464FF000041BD0B10802D08F -+:107A700007200DB028E7032E00D1002607F0DAF822 -+:107A80008046FF2805D07DB128460AF09BFF48B903 -+:107A900002E043F20200ECE73988681E08440AF06D -+:107AA00091FF08B11020E4E72749B00701D54889C4 -+:107AB00000E00120F2074FF6FF7902D04989491E04 -+:107AC00000E049468EB207AA414604F009FA4FF099 -+:107AD000000B4FF0070A3EE09DF81F0000073AD563 -+:107AE00006A9CDE904B1CDF808B0CDF80CB04B46ED -+:107AF00000224146CDE900AB604604F09FFA08BB86 -+:107B000025B3BDF818103A8821442819091D8A4266 -+:107B100034D3BDF8222020F8022BBDF8182020F81D -+:107B2000022B06AA0592CDF808B0CDE903B0CDE945 -+:107B300000ABBDF82200BDF818300022414604F029 -+:107B40007DFA18B1032094E710030020BDF8180057 -+:107B50002044001D84B207A804F0CAF920B182288D -+:107B600006D0FEF704FA84E7BDF822C0B445B3D9C5 -+:107B700034B175B13988A01C814203D20C2078E75A -+:107B8000052076E722462946484604F0E7FB2919F6 -+:107B90000880A41C3C8000206BE710B504460AF066 -+:107BA000F3FE08B1102010BD6948408920800020F4 -+:107BB00010BD2DE9F041A4B00C4606464FF0000878 -+:107BC000142105A816F009FA01208DF818008DF887 -+:107BD000140000278DF81970ADF81C403046F9F7F5 -+:107BE0001DFC30B10078222806D2082024B0BDE860 -+:107BF000F08143F20200F9E70421304607F051F822 -+:107C0000050000D1FFDF0AA904A8CDE9000116ABE9 -+:107C1000002229463046FEF74FFB0028E6D10498A3 -+:107C20000835CDE90007CDE902650AAA072105A8B4 -+:107C3000169B03F002FC10B1FEF7CFF9D6E70498CB -+:107C40000090BDF8283004224146304601F0A5F9E5 -+:107C500000B1FFDF21463046FDF7C6FF17A92846D1 -+:107C600002F0D0FF00B1FFDFBDF85C00172801D2A1 -+:107C7000172100E00146A14204D8172801D2172499 -+:107C800000E0044621463046FFF756FB05462146F4 -+:107C90003046FDF702FD4146304601F02BFB00B9AE -+:107CA000FFDF25BB3046F9F7B9FB050000D1FFDF48 -+:107CB00095F822001B281AD9172C18D93A208DF8CC -+:107CC0002C00ADF82E6095F82200211D884201D9C4 -+:107CD000241D00E00446ADF8304040F64800ADF801 -+:107CE000320018A90BA804F0C0FA00B1FFDF002091 -+:107CF0007CE7F8B51C4615460E46069F07F034F99A -+:107D00002346FF1DBCB231462A46009406F04CFDC6 -+:107D1000F8BD70B50C4605460E21204616F03BF91D -+:107D2000002020802DB1012D01D0FFDF70BD062085 -+:107D300000E00520A07170BD10B50C4604F09DF860 -+:107D400000B1FFDF2046BDE81040FEF710B900008B -+:107D50001003002010B50446007896B0022805D024 -+:107D6000012803D043F2050016B010BDA17889297F -+:107D70000AD06078892807D021B1032902D808B138 -+:107D8000032801D90720EFE74D208DF80000207867 -+:107D9000022801D0012000E000208DF80200607868 -+:107DA00000F0D7FDC01D8DF80300A078012815D084 -+:107DB00000F0CFFD10F101008DF80400607800F0B4 -+:107DC000C8FD8DF80500A07800F0C3FD8DF8060011 -+:107DD0009DF805200621102A04D005E0022000F0BD -+:107DE000B8FDE9E78DF80510102801D18DF80610CF -+:107DF0002078012804D19DF80300401C8DF8030071 -+:107E000002F0E0F8001DADF808000BA9684604F088 -+:107E10002CFA00B1FFDF0020A6E72DE9FF4FFF4954 -+:107E200091B00600D1E900010396CDE90C01507A2A -+:107E3000117A9B4608441546C7B222D05FF0000471 -+:107E40004FF00009CDF81C900520ADF81C001F2054 -+:107E5000ADF81E00F2A00690CDF81490F01D8DF83C -+:107E600014904FF0010A20F007008DF815A0B042E1 -+:107E700000D0FFDF28880399401C1FFA80F814B156 -+:107E800007E00124DCE708F0FF0008F06FFB00B119 -+:107E9000FFDF03993A4601EB0810C01C20F00301F4 -+:107EA000D5F8188003913CB981F800901FFA88F04A -+:107EB00003F06EFE00B1FFDF0399234601EB0800DB -+:107EC0000390A87A297A3A460844C1B203A800F080 -+:107ED0008EFD0398C01C20F003000390697A009186 -+:107EE0002B7AAA7A04B1002002A906F0B6FD00B1EF -+:107EF000FFDFBDF8081003980DF1780808443A46F2 -+:107F000098E88A00C01C20F00300CDE90270CDE99A -+:107F1000001304B100205B4608A906F029FF00B158 -+:107F2000FFDF089903980844C01D20F00700039064 -+:107F30001299821B002C0A603AD1BC4ABA491160DE -+:107F4000111D401E086001232C220EA9B84806F01E -+:107F500005FD00F00CFD00211E22084602F042F84B -+:107F6000FAF7A4F900F075FFFEF7D9FCE8680CAA4F -+:107F7000214620B1FBF755F830B1FFDF04E005A83A -+:107F8000FBF74FF800B1FFDF05F11400FEF7F0FF3B -+:107F900000B1FFDF4FF49671A64816F01EF8A54811 -+:107FA000022180F829A180F82A11062180F82B11DE -+:107FB00015B0BDE8F08F10B59E4CA078092800D30D -+:107FC000FFDF207804EB401010F8041F21F0FF01C0 -+:107FD0000170417821F00701C91C21F0180141709E -+:107FE0000121E17010BD2DE9F04105460C46002746 -+:107FF0000078052190463E46B1EB101F00D0FFDF10 -+:10800000287A58B1012810D0FFDF00BFA8F800601F -+:108010000CB1278066800020BDE8F0810227092688 -+:108020007CB1A889A080A87B09E00327142644B16D -+:108030006888A0802869E060A88A2082287B207256 -+:10804000E4E7A8F80060E6E700B597B04E218DF8A8 -+:10805000001000780BA900F001008DF802006846BE -+:1080600004F003F917B000BD00B5017897B001F036 -+:1080700001018DF80210417801F001018DF8031023 -+:108080000178C1F340018DF804104178C1F340013B -+:108090008DF80510017889088DF806104178890857 -+:1080A0008DF8071081788DF80810C1788DF80910C7 -+:1080B00000798DF80A004A208DF800000BA9684667 -+:1080C00004F0D3F8CEE770B55A4CE078002819D008 -+:1080D0002078002504EB4010407900F007000119DA -+:1080E00091F82801401E81F828012078401CC0B278 -+:1080F0002070092800D12570A078401CA07009F0DC -+:10810000BAFFE57070BD4B4890F82B01002800D0F5 -+:1081100051E770472DE9F043464D9BB05FF00006F4 -+:10812000D5F8240168B1FFF7EEFF002875D02022B2 -+:10813000D5F8241115F0FDFEFFF7C5FFC5F8246141 -+:10814000EEE795F82901002867D0FFF734FF0446D1 -+:10815000374806F034FC606000B9FFDF606804F067 -+:10816000D1F888B12046F9F7C6FB6078010706D53B -+:1081700020F00700401C6070FFF7A5FFD0E72C48F7 -+:10818000616806F025FCCBE72948616806F020FC11 -+:1081900001A800F0B9FC00286BD10321BDF8040050 -+:1081A00006F07FFD8046BDF8040006F0DDFE0746C0 -+:1081B000B8F1000F00D1FFDFD8F8040010B100784B -+:1081C000FF2856D0FFF7F7FE0446384606F08FFA30 -+:1081D000606000B9FFDF606800F104090671BDF856 -+:1081E00004006080204600F02CFF384606F04FFB6C -+:1081F00000B9FFDF47208DF81000BDF80400ADF88E -+:10820000120004A805F0D9FE10A804F0DEFA607888 -+:10821000010711D4C00615D417E02AE070E301006D -+:108220006E52463578000000000000200006024033 -+:10823000780500204C04002020F00700801C6070AE -+:10824000FFF741FFC8F804906AE7D8F8040038B196 -+:108250000178491C11F0FF0101708FD1FFDF5FE74A -+:1082600000221146384600F072FB002886D1FFDF5D -+:1082700056E71BB0BDE8F08310B5FE4CA06008685F -+:10828000E060AFF26F1001F0F6FD607010BDF949CB -+:1082900000200870704730B505464FF080500C46FE -+:1082A000D0F8A41097B0491C05D1D0F8A810C94344 -+:1082B0000904090C08D050F8A01F01F00101297031 -+:1082C0004168216080680EE02B208DF800000BA92A -+:1082D000684603F0CAFF00B1FFDF012028700C9848 -+:1082E0002060BDF83400A0802878002803D0607991 -+:1082F00040F0C000607117B030BDF0B54FF0805451 -+:108300000746D4F8800097B00D462B26401C0BD1B1 -+:10831000D4F88400401C07D1D4F88800401C03D155 -+:10832000D4F88C00401C0BD0D4F880003860D4F80E -+:1083300084007860D4F88800B860D4F88C0016E027 -+:108340008DF82C6069460BA803F08FFF00B1FFDFAA -+:1083500001983860029878608DF82C6069460BA807 -+:1083600003F083FF00B1FFDF0198B8600298F86066 -+:10837000D4F89000401C0BD1D4F89400401C07D1D5 -+:10838000D4F89800401C03D1D4F89C00401C08D0BD -+:1083900054F8900F286060686860A068A860E06882 -+:1083A00016E08DF800600BA9684603F05EFF00B18F -+:1083B000FFDF0C9828600D9868608DF800600BA9AD -+:1083C000684603F052FF00B1FFDF0C98A8600D98DB -+:1083D000E86017B0F0BD30B5A74C0546D4F82401CD -+:1083E00000B1FFDFC4F8245130BD3EB5054603217E -+:1083F00006F057FC0446284606F0B6FD054604B9CB -+:10840000FFDF606818B10078FF2800D1FFDF01AA04 -+:108410006946284600F09BFA60B9FFDF0AE00022B7 -+:1084200002A9284600F093FA00B9FFDF9DF8080082 -+:1084300000B1FFDF9DF80000411E8DF80010EED264 -+:1084400060680199884201D1002060608A4C94F8EC -+:108450002A01022800D3FFDF94F82A01401CC0B291 -+:1084600084F82A01012803D18248407801F022FDD6 -+:108470003EBD70B50446A1F57F4016460D46FF3857 -+:1084800000D1FFDF012E01D0FFDF70BD207820F08A -+:108490000F00401D20F0F0005030207000202072AE -+:1084A000A5810120A07370BD70B515460C46064627 -+:1084B000FFF729FE90B1017821F00F01491D21F04D -+:1084C000F001503101704680012101722168016183 -+:1084D000A18881820573BDE87040F4E53046BDE8AF -+:1084E00070401321FAF7BEBA70B505460C4608462F -+:1084F0000AF04AFA08B1102070BD2846F8F78EFF3E -+:1085000028B1284600F0E7FE2070002070BD43F23D -+:10851000020070BD2DE9F04F04465648894687B0E9 -+:10852000017811B1082007B043E552485349416032 -+:1085300020460AF029FA002875D148460AF024FAA4 -+:10854000002870D1637A217A5818FF287DD82088B6 -+:10855000FE287AD800B90A202080A06908B94FF413 -+:10856000B060A0616068A0B14578827805EB4505F0 -+:108570002A440578067905EB450502EB4502457965 -+:10858000C07805EB450505EB8605C0EBC000284427 -+:1085900009E003EB430001EB410200EB4202C1EBB7 -+:1085A000C10505EB830086B2C3EBC3001044C1EBE9 -+:1085B000C1021044084487B2208A01F0F9FC002867 -+:1085C000B1D101F0FFFC001D7843059001F0FAFCE9 -+:1085D000001D00FB06F8E168A06900F041FA5FEABF -+:1085E000000AA0D1A17A607A81422ED84FF0120BF6 -+:1085F00008280ED8207A01280BD808F022F9054661 -+:1086000009F0F8FC2A1A217A607A521E0B189A4255 -+:1086100001DA584687E765688B460090BDB1284669 -+:108620000AF0D9F908B110207DE7A97868780844E4 -+:108630002978421800985844904206D16A792979DD -+:108640001144EA781144884201D007206BE7CDF845 -+:108650000080CDE90176224603A90020059BFFF7A3 -+:10866000DCFB044D039AD9F8003068681118994270 -+:1086700009D805E01C0000204C040020481300200D -+:10868000B2F5803F03D30420C9F800104BE7CDF8C2 -+:108690000080CDE90176224604A9059BFFF7BDFBCA -+:1086A000DDE90301884200D0FFDF049869680844CF -+:1086B0006860C9F80000FF49012028700870504622 -+:1086C00031E72DE9F04707460C4608460AF05CF909 -+:1086D00040B938460AF076F920B9F81C20F00300BA -+:1086E000B84202D01020BDE8F087F3484FF00008F0 -+:1086F000817889B14178824600EB4115B4F8009049 -+:1087000015F8040F234600F00F000022294600F060 -+:1087100037FA060004D013E0A4F800800520E2E751 -+:1087200097B12188494501D90C260DE028782346C8 -+:1087300000F00F003A46294600F022FA060005D064 -+:108740000C2E01D0A4F800803046CCE79AF8010046 -+:108750005446401CC0B28AF80100092801D184F8AF -+:108760000180A078401EA070687800F00701012900 -+:108770000BD0022903D0032918D0FFDFE4E7C0069D -+:10878000E2D46888FFF731FEDEE7CC48696806F07E -+:108790001FF994F82901401CC0B284F8290101286E -+:1087A000D2D1C748407801F085FBCDE794F82B0182 -+:1087B000401C8AF82B01C7E770B50D4604460AF045 -+:1087C000BFF818B928460AF0DFF808B1102070BDCC -+:1087D00029462046BDE8704007F0FFBE70B504464C -+:1087E00015460E4608460AF0ABF818B928460AF0B6 -+:1087F000CBF808B1102070BD022C03D0102C01D092 -+:10880000092070BD2A463146204607F009FF00289E -+:10881000F7D0052070BD70B514460D4606460AF027 -+:108820008FF838B928460AF0AFF818B920460AF090 -+:10883000C9F808B1102070BD22462946304607F01D -+:108840000EFF0028F7D0072070BD10B596B0044683 -+:108850000AF09AF810B1102016B010BD0F208DF854 -+:1088600000000BA9684603F000FD0028F4D19DF834 -+:1088700034002070BDF836006080BDF83800A0805C -+:108880000020E9E770B505460C4608460AF09AF85C -+:1088900020B93CB120680AF077F808B1102070BD0B -+:1088A000A08828B121462846BDE87040FEF78CB864 -+:1088B000092070BD70B504460D4608460AF040F820 -+:1088C00030B9601E1E2814D828460AF039F808B1BD -+:1088D000102070BD032C01D9072070BD04B9FFDF43 -+:1088E000784800EB840050F8041C2846BDE870402E -+:1088F0000847A4F120001F28EED829462046BDE8ED -+:108900007040F9F70EBC70B504460D4608460AF0F3 -+:108910003BF830B9601E1E280FD828460AF010F820 -+:1089200008B1102070BD012C03D0022C01D0032C03 -+:1089300001D1062070BD072070BDA4F120001F28C2 -+:10894000F9D829462046BDE87040F9F76EBC05F01D -+:108950006ABD892805D0032805D0022805D001204A -+:10896000704710207047062070470320704710B5ED -+:1089700096B003F06BFC52484178806803F064FEC7 -+:108980004F4801240C300178012916D13E218DF881 -+:108990000010C0788DF8020010B1012803D005E066 -+:1089A0008DF8024002E000208DF80200684605F0D4 -+:1089B00004FB10B10BA803F008FF02208DF82C0077 -+:1089C0008DF82D008DF82E000BA8FFF7C3F900B12C -+:1089D000FFDF8DF82C4003208DF82D008DF82E0040 -+:1089E0000BA8FFF7B7F9002800D0FFDF34E72DE927 -+:1089F000F0410646022012B101EB4200401DC7B211 -+:108A00003068C01C20F0030232601BBB2A483B4682 -+:108A10000921243809F085FE002408E0092C11D230 -+:108A2000DFE804F005070509090B0B0505002648DA -+:108A300004E0264802E0264800E0264809F090FEBF -+:108A4000054600E0FFDFA54200D0FFDF641CE4B272 -+:108A5000092CE3D3306800EB07103060BDE8F081EB -+:108A600038B50C00054604D0084609F069FF00BB84 -+:108A700002E0F62844D345E0606809F061FFC0B920 -+:108A8000607800F00300012803D0022801D00720FD -+:108A900038BD69462046FBF78DFD0028F8D1607887 -+:108AA00000F0030002281CD19DF80000C8B16068E6 -+:108AB00012E014E0080000204C040020780500209B -+:108AC0001C00002090E30100771F0000F18E0000E1 -+:108AD000CB9F00002103010009F074FF08B11020B2 -+:108AE00038BD6089F8280BD82189814208D861787F -+:108AF00001F00301012905D1D73080B2A84201D984 -+:108B0000092038BD002038BD2DE9F04397B08146DB -+:108B100046208DF82C0069460BA803F0A6FB00B197 -+:108B2000FFDF43F2040600246D46DFF884801FE077 -+:108B30002F19B87DC10706D0400704D405EB4400C7 -+:108B4000C08800F0B9FB98F82A0178B1B87D800799 -+:108B50000CD505EB4400C08800F037FA30B105EBC6 -+:108B600044000026C188A9F8001005E0641CE4B2A6 -+:108B70009DF80400A042DBD817B03046BDE8F08372 -+:108B80002DE9F041044600201880601E1D4616465F -+:108B90000F46052800D3FFDF06482A4600EB840075 -+:108BA000314650F8043C3846BDE8F0411847000013 -+:108BB0004C04002078E301002DE9F0478A469846EE -+:108BC00015460646032106F06CF80446304606F0CA -+:108BD000DDF90C35AFB2002581462E4604B9FFDF22 -+:108BE000B9F1000F00D1FFDF04EB8A000189B9421F -+:108BF00000D30125218CB94202D2BAF1060F00D36D -+:108C0000012638EA050104D0817A41F0020181721F -+:108C10000BE038EA060108D0817A41F00401817244 -+:108C200014F8220F40F00400207005EA0600BDE8A9 -+:108C3000F0872DE9F0478246DDE90846174604F142 -+:108C40000C0099460D461FFA80F80023224639464B -+:108C50005046FFF7B1FF60B1A87800061BD426F894 -+:108C6000044C26F8029C504606F090F9060008D104 -+:108C700006E0072F01D01120D9E743F20400D6E720 -+:108C8000FFDF241D3046A1B205F0CCFA00B9FFDFAA -+:108C9000504603F03DFC05EB8700062F0289A2EB4E -+:108CA0000801018103D2298CA1EB0800288400204F -+:108CB000BDE72DE9F8431D4617460E46DDF8208036 -+:108CC00006F064F9040019D03F1DB9B205F05AFA54 -+:108CD0002860B0B1067120466A46296805F016FD85 -+:108CE000009800210A460180817003F0D1FC0098B1 -+:108CF000C01DC8F800000020BDE8F88343F2020060 -+:108D0000FAE7072E01D01120F6E743F20400F3E75B -+:108D10002DE9F04F0F46054687B0164650880321CF -+:108D200005F0BFFF040000D1FFDF4FF000098DF810 -+:108D30000890A078400600D1FFDF042F53D3297894 -+:108D400041F30000401C06D162786B789A424AD108 -+:108D50002278120747D04FF0010B4FF00208142978 -+:108D600039DA4FF6FF7A012933D0122902D01329BC -+:108D700031D11CE00C2F2ED1A17801F07F01012907 -+:108D800029D0207820F00F00401C20706878607097 -+:108D90008DF808B0A888ADF80A00E888ADF80C0096 -+:108DA0002889ADF80E006889ADF8100016E0062F8E -+:108DB00011D1207820F00F0020707188012009F077 -+:108DC0007CFD8DF80880ADF80AA0A888ADF80C00ED -+:108DD00004E0062F0AD09DF80810B9B17088324619 -+:108DE00002A9F9F73AF907B0BDE8F08F207820F032 -+:108DF0000F0020707188012009F05FFD8DF8088058 -+:108E0000A888ADF80A00ADF80CA0E7E70028EAD082 -+:108E1000768805A8009006AB062204213046FFF7AD -+:108E200048FF00B1FFDF05980523042280F800B059 -+:108E300069784170A0F80280A0F804900621CDE97D -+:108E4000001021463046FFF7F4FE0028CBD0FFDFAC -+:108E5000C9E710B501F0B6F80021FF4B0A4600BF84 -+:108E600023F81120491C0829FAD3FB4A00F10C0110 -+:108E70001032400011805180183090804D20D080F9 -+:108E800011815181C1EBC100908110BD70B50C46BC -+:108E9000897821F0FF01A170217821F00F01217064 -+:108EA000012161700021616006F070F8050000D1B9 -+:108EB000FFDF284605F064F9E74910318989401A37 -+:108EC00020852046BDE8704000F014BB70B50D460B -+:108ED000032105F0E6FE040000D1FFDFA07865F372 -+:108EE0000600A07070BD70470146012009F0E5BC86 -+:108EF0003EB58DB20321284605F0D3FE040000D113 -+:108F0000FFDF2078002220F00F00207002208DF873 -+:108F100000004FF6FF70ADF80200ADF8040069469E -+:108F20002846F9F79AF83EBD2DE9F84F05460C465C -+:108F300000270078012192463E46B1EB101F00D079 -+:108F4000FFDF287A032809D0FFDF00BFAAF80060FE -+:108F50000CB1278066800020BDE8F88FB5F80C8042 -+:108F6000702708F10A0086B2A4B16888A0806889D9 -+:108F70002081A4F806806888D5F8049004F10A05D9 -+:108F800005F0F2FF2A46072549464346009505F0BD -+:108F90000BFCDBE7AAF80060DDE72DE9FC410F469A -+:108FA0001C46164680460321089D05F07AFE010006 -+:108FB00008D033463A464046CDE90045FFF739FE32 -+:108FC000BDE8FC8143F20200FAE7F8B50646A0F5D9 -+:108FD0007F40FF3816D0304605F0C6FF040000D1B0 -+:108FE000FFDF204605F083FB050000D1FFDF2046B0 -+:108FF00029466A4605F08AFB009CB4F80500E41C8B -+:10900000052801D00120F8BD0321304605F049FEB6 -+:10901000050000D1FFDF2079122807D120880C2815 -+:1090200004D1A87800F07F00022806D00023062291 -+:1090300004213046FFF7C0FDF8BD002306220521BC -+:10904000F7E7F8B50446408805F08EFF050000D12B -+:10905000FFDF6A462846616800F0CCF902460098B6 -+:10906000121F30F8031F458891421DD1042D1CD0DA -+:10907000052D27D0062D1DD0402D15D30E46284690 -+:1090800000F0D4F908280FD0207820F00F00401C01 -+:1090900020F0F00010302070032020726581A6813E -+:1090A000607840F008006070F8BD2246001D00F0B6 -+:1090B000C9F9F8BD636864880A46011D2046FAF7BD -+:1090C000FDFEF8BD2246001DFFF722FEF8BD7FB56C -+:1090D0000D460646032105F0E4FD04003AD0207851 -+:1090E00000F00F00012838D002A8009003AB0C223A -+:1090F00005213046FFF7DDFD002829D10298122115 -+:109100000523017061781A46891C4170082141804D -+:10911000298881806988C180A9880181E988418185 -+:109120000C21CDE9001021463046FFF782FD00B149 -+:10913000FFDFF02300223146012009F021FB2078D7 -+:1091400020F00F00401C20706078801C60700020B0 -+:1091500004B070BD43F20200FAE71120F8E77FB5D2 -+:109160000D460646032105F09CFD040006D020783C -+:1091700000F00F00012804D00820E9E743F20200C4 -+:10918000E6E702A8009003AB062205213046FFF770 -+:1091900090FD0028DCD1029813210523017061782D -+:1091A00041700221418085800621CDE900101A46D8 -+:1091B00021463046FFF73DFD00B1FFDF207820F06B -+:1091C0000F0020700020C3E72DE9F84F0F468346BB -+:1091D000032105F066FD0546584605F0D7FE80469A -+:1091E0004FF0000A05B9FFDFB8F1000F58D1FFDFDB -+:1091F00056E040466946002205F015F99DF800400A -+:109200008146082C00D3FFDF05EB840609F1080036 -+:109210003189062C0144318102D2298C08442884EA -+:10922000072C03D10AF1010000F0FF0AB07AC00751 -+:109230000DD02146284600F0DFF840B9B07A20F082 -+:109240000100B072584684B3032C2FD0FFDFB07AF0 -+:1092500081070AD502E00000A805002020F00200E6 -+:10926000B0722146584600F0D8F8062C18D895F868 -+:109270002200410714D520F0040085F822000024C4 -+:1092800005EB8400817A4A0706D521F0040181723A -+:109290002146584600F0C1F8641CE4B2062CEFD316 -+:1092A0007F1EFFB2A5D2504656E602E0FAF79DFEB9 -+:1092B000CDE7FEF76EF8CAE710B5032105F0F1FC23 -+:1092C000040000D1FFDF204600F014F9A07840F040 -+:1092D0008000A07010BD10B5032105F0E2FC040071 -+:1092E00000D1FFDF00F06EFE218D0C30B1FBF0F0FD -+:1092F000C0B210BD70B50D46032105F0D2FC0400CC -+:1093000000D1FFDF062D00D9FFDF2946204600F0FF -+:1093100073F8002805D004EB85018A7A42F0010237 -+:109320008A7270BD10B50446402801D2072010BDD6 -+:1093300000F07CF8082802D04FF4445010BD002102 -+:10934000774802E0491C082903D230F81120002A8E -+:10935000F8D1082903D020F81140002010BD0420C6 -+:1093600010BD10B5402801D2072010BD00F05EF8F6 -+:10937000082805D06A4A002122F81010084610BDBE -+:10938000052010BD2DE9FE4315460C00804606D091 -+:109390002DB16088402804D20720BDE8FE8310204C -+:1093A000FBE7218811B300F041F8082820D002A87B -+:1093B0000090228801AB07214046FFF77AFC002885 -+:1093C000EBD140462788019E05F0E0FD2A4607259F -+:1093D00031463B46009505F020FA0298009023881C -+:1093E000628807214046FFF7D8FDD6E70C20D4E776 -+:1093F0000520D2E705F08AB9072904D0484A10327F -+:1094000032F8112000E0028D00EB810000899042CB -+:1094100001D2012070470020704710B5032901D008 -+:10942000FFDF10BDBDE81040FAF7A5BD01460020E2 -+:109430003B4A02E0401C082803D232F810308B422D -+:10944000F8D17047F0B50F460646014687B014467E -+:109450003846FCF7B1FBC0B2082842D10020ADF875 -+:10946000100003906088032105F01BFC050000D16B -+:10947000FFDF00212846FFF7BFFF78B96088002191 -+:10948000FDF769FFADF81000024603A80090608860 -+:1094900005AB0021FFF70DFC00B1FFDF0398059934 -+:1094A000CDE90010029404AB324638466168FDF7FE -+:1094B000F7FAC0B205281BD2DFE800F0031A131533 -+:1094C0001300BDF8100000280BD003990423CDE948 -+:1094D0000001608800222946FFF7ABFB002800D07E -+:1094E000FFDF07B0F0BD607840F010006070F8E773 -+:1094F000FFDFF6E710B504462021083014F06DFDBB -+:109500000748002110F1100004EB810330F811200E -+:10951000491C1A810629F7D9208DA08410BD0000AE -+:10952000A805002030B44FF0E02001234FF4006C78 -+:109530000021C0F880C11D02C0F880511C06C0F88F -+:109540008041E84A82F80014D21E82F80014E64AEC -+:1095500082F80014E54A53609360C2F84011C2F8E3 -+:109560004411C2F84811C0F880C2C0F88052C0F857 -+:109570008042C0F800C1C0F80041136030BC7047A1 -+:1095800070B401204FF0E023C6024FF0000CC3F886 -+:1095900080610402C3F880410506C3F88051D34AB4 -+:1095A00050609060D24801680029FCD1C2F840C1E7 -+:1095B000C2F844C1C2F848C1C3F88062C3F880420F -+:1095C000C3F8805270BC70474FF0E0204FF4006148 -+:1095D000C0F88012C910C0F880127047002804BF7C -+:1095E000C4487047012804BFC3487047022804BF1D -+:1095F000C248704700B5FFDF002000BD08B5BB4979 -+:10960000002298B101282FD002281CBFFFDF08BD1F -+:109610004FF48020C1F80803C1F84803B84802603D -+:10962000C1F84821B5480068009008BD4FF480306B -+:10963000C1F80803C1F84803B24B1A60C1F84021D1 -+:10964000B14BC1031960B149C1F808034FF0E023E1 -+:109650000012C3F88001AE480260C1F84021C1F891 -+:109660000022AC48027008BD4FF40030C1F8080376 -+:10967000C1F84803A8480260C1F844219E48006828 -+:10968000009008BD70B5DFF864C2042600240125EF -+:10969000B0B101284CD002281CBFFFDF70BD9F482D -+:1096A0004FF48022012BC0F8401518BFCCF80823D6 -+:1096B000C0F8404108BFCCF80423CCF8442370BD67 -+:1096C000881E20F07F40CCF840054FF48030CCF865 -+:1096D0000803CCF84041CCF84403012B14BF00210F -+:1096E00001218C4B597089490D61DFF834C2CCF8E7 -+:1096F00000408C4C4FF0020CC4F800C0DFF828C2C8 -+:10970000CCF80060DFF808C23D32CCF80020C1F888 -+:1097100000524FF0E0224FF4807CC2F880C2C1F8C2 -+:109720000403C2F800C10804804908601D7070BDC0 -+:109730007F4A4FF40030012BC2F8401518BFCCF817 -+:109740000803C2F8404108BFCCF80403CCF8440336 -+:1097500070BD67480068704770B5764805687749FE -+:1097600075480860614CD4F84001002601280AD1F0 -+:10977000D4F8080310F4803F05D04FF48030C4F8CB -+:109780000803C4F84061D4F8440101280DD1D4F88D -+:10979000080310F4003F08D04FF40030C4F8080369 -+:1097A000C4F84461012007F088FCD4F8480101287E -+:1097B0000DD1D4F8080310F4802F08D04FF4802086 -+:1097C000C4F80803C4F84861022007F076FC5C483E -+:1097D000056070BD574810B5046858495648086080 -+:1097E0004C490878002808BF03201AD0464A4FF099 -+:1097F00000401060454AC00BC2F8080303124FF046 -+:10980000E02C0020CCF88031414B1860C2F84001B8 -+:10981000C2F8000208704A78002A1CBF4870002075 -+:1098200001D007F04AFC4648046010BD4FF0E0212B -+:109830004FF08070C1F8000270474FF0E0214FF008 -+:109840008070C1F8800270474FF0E0214FF40010A3 -+:10985000C1F8000270474FF0E0214FF40010C1F84A -+:10986000800270472949012008614FF0E021000281 -+:10987000C1F880027047410A43F609525143C0F3D0 -+:10988000080010FB02F000F5807001EB50207047DB -+:10989000430B48F2376C03FB0CF31B0C4FEA432CD1 -+:1098A000C1F800C0DFF89CC003FB0C0326484CF253 -+:1098B000F72C5843400D10FB0CFC0CEB432303F535 -+:1098C00080735B1213700A6810440860704719486F -+:1098D00010B5046819491848086007F087FF184850 -+:1098E000046010BD0BE000E018E000E000B00040B4 -+:1098F00004B500404081004044B1004048B1004000 -+:1099000048B5004040B5004008F5014000800040E7 -+:10991000408500402C00002044B5004008B00040C5 -+:1099200004850040088500401085004004F5014092 -+:1099300004B000401005024001000001180502407B -+:1099400014050240F7C2FFFF6F0C010010B5EFF3E2 -+:10995000108000F0010472B6EB484178491C417058 -+:109960004078012801D108F0A5FB002C00D162B697 -+:1099700010BD70B5E44CE07848B90125E570FFF7FB -+:10998000E5FF08F09FFB20B1002008F07BFB0020E2 -+:1099900070BD4FF080406571C0F80453F7E770B5B3 -+:1099A000EFF3108000F0010572B6D74C607800B973 -+:1099B000FFDF6078401E6070607808B908F07EFBB9 -+:1099C000002D00D162B670BDCF4810B5C17821B16D -+:1099D00000214171C170FFF7E2FF002010BD10B5FA -+:1099E000044608F06FFBC849C978084000D0012040 -+:1099F0002060002010BD2DE9F05FDFF80C93427865 -+:109A0000817889F80620002589F80710064689F82C -+:109A1000085000782F4620B101280FD002280FD01F -+:109A2000FFDF08F05CFB98B108F060FBA8420FD1A3 -+:109A3000284608F05FFB0028FAD047E00125F0E750 -+:109A4000FFF784FF08F03EFB0028FBD00225E8E783 -+:109A500001208407E060C4F80471AC490D6001077F -+:109A6000D1F84412A94AC1F3423124321160A74906 -+:109A70004FF0020B34310860C4F804B3A060DFF883 -+:109A800090A2DAF80010C94341F3001101F1010876 -+:109A9000DAF8001041F01001CAF8001000E020BF11 -+:109AA000D4F804010028FAD0284608F023FB002847 -+:109AB000FAD0B8F1000F05D1DAF8001021F010014A -+:109AC000CAF80010C4F808B3C4F8047199F8070084 -+:109AD0004C4670B1307860B908F0F4FA064608F0E8 -+:109AE000E5FC6FF0004116B1C4E9031001E0C4E9E0 -+:109AF000030115B12771BDE8F09F01202071BDE879 -+:109B0000F05F00F0DFB870B5050000D1FFDF4FF067 -+:109B100080424FF0FF30C2F808030021C2F8001164 -+:109B2000C2F80411C2F80C11C2F81011764C617021 -+:109B300008F0CEFA10B10120E07060702846BDE850 -+:109B4000704058E72DE9F0410125AF077D616E4C6B -+:109B5000E079F0B1012803D0217A401E814218DA61 -+:109B600008F0B0FA064608F0A1FCE179012902D913 -+:109B7000217A491C21720EB1216900E0E168411A85 -+:109B8000022902DA11F1020F0EDC0EB1206100E0B1 -+:109B9000E060FFF7DBFE08F095FA10B13D61A570BB -+:109BA00000E0257000202072BDE8F0812DE9F05F13 -+:109BB0005848D0F800B0574A574908321160840617 -+:109BC000D4F8080110B14FF0010801E04FF000088F -+:109BD000D4F8000100B101208146D4F8040108B195 -+:109BE000012600E00026D4F80C0100B101208246D5 -+:109BF000D4F8100108B1012700E0002748EA090164 -+:109C000026EA010020EA0A00B84300D0FFDF002561 -+:109C1000B8F1000F04D0C4F80851012008F032FA5E -+:109C2000DFF8E480B9F1000F13D0C4F8005198F8C0 -+:109C3000050020B188F80550002008F023FA98F8B4 -+:109C4000000030B108F03EFA18B1012088F8020097 -+:109C500020610EB1C4F80451BAF1000F0AD0C4F863 -+:109C60000C5198F80200464600B9FFDFB570357018 -+:109C7000FFF795FE37B1C4F8105198F8040008B109 -+:109C8000FFF760FF2349091DC1F800B033E770B545 -+:109C90001D4DE87808B908F011FA01208407A06189 -+:109CA000A87850B1D4F80C0120B9002008F022FAAD -+:109CB0000028F7D10020C4F80C014FF0FF30C4F8A1 -+:109CC000080370BD2DE9F0411926B507C5F80863F2 -+:109CD0000124AC610020C5F80001C5F80C01C5F8ED -+:109CE000100108F0EFF9084F10B1BC702C6100E0D2 -+:109CF0003C70FFF72BFE0549B87920310860C5F8A4 -+:109D000004636C6150E7000030000020180500403B -+:109D100010ED00E0100502400100000110B5202008 -+:109D200000F075F8202000F07DF84449202081F8EB -+:109D30000004434900060860091D42480860F7F71F -+:109D4000E1FA3F49C83108603F48D0F8041341F0B8 -+:109D50000101C0F80413D0F8041341F08071C0F879 -+:109D60000413364901201C39C1F8000110BD10B59B -+:109D7000202000F04CF8324800210160001D0160F5 -+:109D80002F4A481EE83A10602F4AC2F808032C4BAD -+:109D9000C8331960C2F80001C2F860012B4908609D -+:109DA000BDE81040202000F03DB825492848EC3996 -+:109DB0000860704722492648E8390860704770B546 -+:109DC0001F4A8069E83A224911601F49D1F80061B1 -+:109DD0000023204D1D4A5C1E1EB1A84206D300215F -+:109DE0000FE0D1F8606186B1A84209D2C1F8003114 -+:109DF000C1F860311460BDE87040202000F012B856 -+:109E00001168BDE8704014F01AB9FFDF70BD00F0B2 -+:109E10001F02012191404009800000F1E020C0F8BC -+:109E20008011704700F01F0201219140400980001D -+:109E300000F1E020C0F880127047000020E000E050 -+:109E400000060240441300200000024000040240CB -+:109E50000100000100F001004FF0E0214FF0007020 -+:109E6000C1F88001C1F88002384B802283F80024B9 -+:109E7000C1F80001704700B502460420344903E0F0 -+:109E800001EBC0031B792BB1401EC0B2F8D2FFDF3B -+:109E9000FF2000BD41F8302001EBC00100224A71D3 -+:109EA0008A7101220A7100BD294A002102EBC0001B -+:109EB0000171704710B50446042800D3FFDF244821 -+:109EC00000EBC4042079012800D0FFDF6079A1797C -+:109ED000401CC0B2814200D060714FF0E0214FF0D1 -+:109EE0000070C1F8000210BD2DE9F0411948056865 -+:109EF00018491948083108601448042690F80004ED -+:109F0000134F4009154C042818D0FFDF16E02178C4 -+:109F100007EBC1000279012A08D1427983799A427C -+:109F200004D04279827157F8310080472078401C74 -+:109F3000C0B22070042801D300202070761EF6B233 -+:109F4000E5D20448001D0560BDE8F08119E000E09D -+:109F5000C805002010050240010000014400002057 -+:109F60000F4A12680D498A420CD118470C4A1268F0 -+:109F70000A4B9A4206D101B508F066FAFFF715FFC1 -+:109F8000BDE80140074909680958084706480749DC -+:109F9000054A064B7047000000000000BEBAFECA2A -+:109FA00098000020040000204812002048120020E1 -+:109FB00018B1172802D207207047172008490880D7 -+:109FC0000020704706480088704770B50C4605466B -+:109FD00000F0B5FB21462846BDE8704001F0B0BC5A -+:109FE00046000020FE4B586019721A80C90013F019 -+:109FF000F4BF10B504460E2113F0CDFF17202081C9 -+:10A00000207B40F00A00207310BD4FF6FF720280E3 -+:10A01000032008F052BC7047027BD30701D192079E -+:10A0200003D4408908800020704705207047027BD8 -+:10A03000920700D54181704701460020098847F208 -+:10A04000FE12114200D00120E549497A002901D0D1 -+:10A0500040F00800704700B50346007BC00701D000 -+:10A06000052000BD19811846FFF7E6FFC00703D0A1 -+:10A07000187B40F004001873187B40F0010018733F -+:10A08000002000BD027B520700D509B1008970474E -+:10A0900017207047027B61F3C302027370472DE9FA -+:10A0A000F04F0E46017804464FF0010B0BFA01F019 -+:10A0B00047F2FF1100EA010961681D464FF6FF7380 -+:10A0C000088887B09646984206D0B9F1000F07D0AD -+:10A0D00047F2FE12104203D0012007B0BDE8F08F16 -+:10A0E00040EA090008804FF0000A8DB185F800A011 -+:10A0F0002278002705200221102A72D2DFE802F020 -+:10A10000710D323B506A727C50C7C399CBFDFCFB8A -+:10A1100020780B28ECD00420DFE76068B4F80C80CE -+:10A12000007B80077ED5B8F1170F4BD3FFF74AFFAE -+:10A130004045FAD360684089172801D3404541D192 -+:10A14000287820F03F00801C2870A5F801800320AB -+:10A1500030806168A1F80A806068017B21F002010B -+:10A16000017334E104212970A189A5F80110E18966 -+:10A17000A5F8031085E0A08A3188C01D1FFA80F879 -+:10A180004145D2D3062005F8010BA0892880E0893B -+:10A190006880208AA88007200090A38AA2693EE0F8 -+:10A1A000082A10D008212970A189A5F80110E18999 -+:10A1B000A5F8031030806A1D694604F1100006F00E -+:10A1C0004EFA10B1CCE01021EDE730889DF8001078 -+:10A1D000084456E00A202870A089A5F80100032051 -+:10A1E00008E006E10C212970A189A5F80110E18998 -+:10A1F000A5F803103080A8E0A089B6F800C00BEBEA -+:10A2000040021FFA82F8C44578D3B8F1050F75D320 -+:10A210000E222A70CDF800B0226903EA400320899B -+:10A2200080B200E079E0714600F096FAA6F800806E -+:10A23000CDE06B48427A002A6FD0521E42724068CD -+:10A24000227B236900EBC205AA882868D3F800C0E6 -+:10A250001044A0F1080240F808CC586850608DF80E -+:10A2600000108DF801A028680290A888ADF80400BD -+:10A2700000216846FBF758FAA5F804A0002E01D08B -+:10A2800050463080A3E0287840F08001297028787B -+:10A2900040F040012970E0893188C01C1FFA80F825 -+:10A2A00041455DD3287820F03F0012302870A18905 -+:10A2B000A5F80110032000902089E38980B271463F -+:10A2C000226900F049FAA6F80080287841063CD5BA -+:10A2D00000067CD58DF800B08DF801A03188CDE95D -+:10A2E000025A091DDFF8F8800420ADF8041004902C -+:10A2F00098F8080003E055E04BE02AE030E08DF8E4 -+:10A30000140000216846FBF70FFA074630880C302E -+:10A310003080022F02D0DFB36EE047E09DF81420BA -+:10A32000D8F8041098F80830404601EBC2019A4270 -+:10A3300016D28A88A2B9427A521C88F809200D6088 -+:10A3400030888880A6F800A056E06168A0898880DF -+:10A350003DE0218A3288491D1FFA81F8424501D229 -+:10A36000042749E0297821F03F0116312970A1899D -+:10A37000A5F80110E189A5F8031000902089238A2F -+:10A3800080B27146626900F0E7F9A6F80080DCE768 -+:10A390001DE0287820F03F0018302870207B68707E -+:10A3A000318014E060680188090401D4052723E0A6 -+:10A3B000C088A189884201D006271DE01E20287090 -+:10A3C000A6F800B06068018821F400410180B9F16D -+:10A3D000000F11D00248002200888300032001E012 -+:10A3E000E8050020A16808F0CBF961682078887042 -+:10A3F00007E0A6F800A003276068018821EA0901A8 -+:10A400000180384669E62DE9F04F87B09B46119CE4 -+:10A410000D46030016461AD03078C10703D000F06D -+:10A420003F00192801D9012100E000212046FFF753 -+:10A4300029FE98420BD32088A0F57F41FF3906D032 -+:10A440003078410601D4000603D5082045E60720F0 -+:10A4500043E600208DF800008DF8010030785F1E83 -+:10A4600000F03F0C0122981E4FF0050A4FF0020940 -+:10A47000B9B2BCF1200F76D2DFE80CF08C10755F1A -+:10A480007569758D759E75B775BC75CA75D675E39A -+:10A49000757575F375F175F075EF758C052B79D1C0 -+:10A4A00004208DF80000A0788DF804007088ADF8C5 -+:10A4B000060030798DF80100707800F03F000C281C -+:10A4C00029D00ADCA0F10200092863D2DFE800F0FD -+:10A4D000126215621A621D622000122824D004DC68 -+:10A4E0000E281BD01028DAD11BE016281FD0182800 -+:10A4F000D5D11FE02078800701E0207840070028B0 -+:10A5000048DAF0E020780007F9E72078C006F6E79F -+:10A5100020788006F3E720784006F0E720780006F0 -+:10A52000EDE72088C005EAE72088C004E7E7208837 -+:10A530008004E4E720884004E1E72078800729D5FB -+:10A54000032B27D18DF800A0B6F8010082E0217816 -+:10A5500049071FD5062B1DD381B27078012803D07F -+:10A56000022817D102E0CBE0022000E010200622F2 -+:10A570008DF8002072788DF80420801CB1FBF0F279 -+:10A58000ADF8062092B242438A4203D10395ADF85A -+:10A590000890A8E07AE02078000777D50721B8B2C4 -+:10A5A0008DF800108108ADF80410B0EB810F6DD16B -+:10A5B0000295ADF8062096E02178C90666D5022BF3 -+:10A5C00064D381B208208DF80000707802285DD332 -+:10A5D000B1FBF0F28DF80400ADF8062092B24243D0 -+:10A5E0008A4253D1ADF808907CE0207880064DD5A2 -+:10A5F000092003E02078400648D50A208DF80000A5 -+:10A60000A088ADF80400ADF80610ADF8082069E0A8 -+:10A610002078000672D50B20ADF804108DF80000EC -+:10A62000ADF8062002955EE02188C90566D5022BAB -+:10A6300064D381B20C208DF80000707804285DD3BB -+:10A64000C6E72088C00459D5012B57D10D208DF8BD -+:10A650000000A088ADF8040045E021E026E016E007 -+:10A66000FFE72088800449D5052B47D30E208DF8BD -+:10A670000000A088ADF80400B6F803005B1FADF839 -+:10A680000830ADF80600ADF80AA02BE036E02088CF -+:10A69000400433D5012B31D10F208DF8000022E08A -+:10A6A000208800042AD4B6F80100E080207B00074F -+:10A6B00024D5032B22D3307800F03F001B2819D07B -+:10A6C00011208DF80000208840F40040A4F800001C -+:10A6D000B6F80100ADF80400DB1E0320ADF806302B -+:10A6E000ADF80800039559466846FBF71DF80500CC -+:10A6F00008D016E010208DF80000E9E7072510E0EB -+:10A7000008250EE0307800F03F001B2809D01D28F6 -+:10A7100007D00320109908F0D0F8208800F40040FA -+:10A720002080207B400708D52046FFF785FCC00726 -+:10A7300003D1207B20F0040020732846CDE400B52F -+:10A7400087B0032806D18DF80000019100216846EA -+:10A75000FAF7EAFF07B000BDF8B51C4615460E46ED -+:10A76000069F04F013FC2346FF1DBCB231462A4667 -+:10A77000009404F052F8F8BD2DE9FF4F8FB0054664 -+:10A78000DDE91C471198DDF880B0082805D0E8699C -+:10A7900001F031F950B11020CDE02088092140F0BE -+:10A7A000100020808BF80010022017E0E9690120DA -+:10A7B0008871EA694FF420519180E9698872E969EA -+:10A7C00042F601000881E969002088732088112180 -+:10A7D00040F0200020808BF800100420814638785B -+:10A7E0000B900A2038704FF0020A05F11800564607 -+:10A7F0000D9001F0A1FB4C467CE0119810280DD182 -+:10A80000022E0BD0AAEB0400801C80B2009021988D -+:10A81000022380B206AA1F9901F0DDF8BDF81A10D4 -+:10A820001298814203D9F648007A109004E003D1CF -+:10A830000B9808B1387031E02198CDF800A080B2B3 -+:10A840004FF002030DF11A021F9901F0C4F81E988F -+:10A850000088811BA1EB090083B2C9F1FF00984277 -+:10A8600000D203460AEB090292B20DF130080292BF -+:10A8700000202199CDF81480CDE903101F9910987C -+:10A88000CDE9000195F82010BDF81A00002201F072 -+:10A89000D5FB387050B1C0B2832803D0BDF81A0080 -+:10A8A000288334E0022013B0BDE8F08FBDF83000FB -+:10A8B000022E00EB0901CCB20CD09BF80110A14292 -+:10A8C00005D1BDF82410814206D0FF2C04D09BF89E -+:10A8D00001401EE08BF80140C94800680178052955 -+:10A8E00002D1BDF81A1081800AEB04001FFA80FA29 -+:10A8F000301986B206AB219A10990D9801F01FFB12 -+:10A9000028B91E980088801BA042BFF676AF022EA1 -+:10A9100012D0119810280BD1AAEB0400801C80B231 -+:10A9200000902198022380B206AA1F9901F053F8E3 -+:10A930001E980680002038700020B4E72DE9F84307 -+:10A940009446089E02460027F06BB0B3521F94B2A3 -+:10A95000B6F84220A2F57F45FF3D05D08518AD88A9 -+:10A960002A44921D95B200E000252A19B6F84080CD -+:10A970000832424522D84219BCF8010022F8020BE5 -+:10A98000BCF8030022F8020B98B222F8024B894669 -+:10A99000904604F0E9FA4FF00C0C49464246234633 -+:10A9A000CDF800C003F000FFA6F84250F16B002084 -+:10A9B0002944A41D2144088003E001E0092700E0A8 -+:10A9C00083273846BDE8F88310B50B88B0F84040BF -+:10A9D0009C420CD9C46BE018048844B1848824F4E8 -+:10A9E0000044A41D23440B801060002010BD822071 -+:10A9F00010BD2DE9F0478AB0002590468946824671 -+:10AA0000ADF81C5007274DE00698068880880004A2 -+:10AA100048D4A8F8006008A8CDE90450CDE9007535 -+:10AA2000029503954FF4007300224946304601F029 -+:10AA300005FB04003DD1BDF81C00ADF824000699CB -+:10AA400008888A88B04216D1130414D40595CDE93C -+:10AA5000007522F4004202950395049542F4804368 -+:10AA60004A88494601F0CDF804000BD10698818848 -+:10AA700041F40041818006AA09A95046FFF7A4FFCE -+:10AA80000400DCD00595CDE9007506980395029584 -+:10AA900004950088BDF820300022494601F0B1F845 -+:10AAA000822C06D106AA07A95046FFF78DFF0400A5 -+:10AAB000AAD0ADF81C5004E00698818821F400412A -+:10AAC000818006AA07A95046FFF77EFF0028F3D031 -+:10AAD000822C03D020460AB0BDE8F0870020FAE7B8 -+:10AAE00030B50446C06B85B0002578B10C208DF8D8 -+:10AAF0000000B4F84000ADF80800E06B039101904D -+:10AB000000216846FBF78DFC8DF8005044F83C5F4F -+:10AB10004FF6FF70E080A58005B030BD2DE9F04113 -+:10AB200005460F46E96B0020069E1446002911D009 -+:10AB3000012B0FD1324639462846FFF75AFF00282D -+:10AB400008D1002C06D0324639462846BDE8F041EF -+:10AB500000F060BFBDE8F081F8B51D46DDF818C013 -+:10AB6000DDE907634C1DBCF800E0A4B2099FA645CF -+:10AB700001D20720F8BDACF80040172403F8014BC0 -+:10AB800018805A80052000900B46B8B22A463146FC -+:10AB900000F021FF0020F8BD70B50D4604464C21A1 -+:10ABA00013F01BFA04F1080044F81C0F00204FF6C4 -+:10ABB000FF712062E184A08425711720208514F89C -+:10ABC0002C0F40F00A00207070BD4FF6FF7202801B -+:10ABD000042007F072BE30B585B00D460446FFF77D -+:10ABE0007FFF208F38B101208DF8000000216846DA -+:10ABF0000195FBF716FC002020636063A0638BE7E0 -+:10AC0000F405002090F84820920703D4408808807B -+:10AC1000002070470620704790F84820920701D521 -+:10AC2000A0F8461070470146002009880A0700D5A1 -+:10AC3000012011F0F00F01D040F00200CA0501D54B -+:10AC400040F004008A0501D540F010004A0501D506 -+:10AC500040F02000090501D540F04000704700B5E4 -+:10AC6000034690F84800C00701D0062000BDA3F8B5 -+:10AC700044101846FFF7D7FF10F0760F05D093F871 -+:10AC8000480040F0040083F8480013F8480F40F0F3 -+:10AC900001001870002000BD90F84820520700D530 -+:10ACA00011B1B0F8440070471720704710F8482FD2 -+:10ACB00061F3C302027070472DE9FF4F9BB006009D -+:10ACC000DDE92CB4289F1E9D2A9B25D02878C1073A -+:10ACD00003D000F03F00192801D9012100E0002134 -+:10ACE0002046FFF7D9FFB04216D3287841060FD48B -+:10ACF00000F03F011E2909D0218811F47F6F0BD18C -+:10AD00003A884AB1A1F57F42FF3A05D0010606D53F -+:10AD100000F03F00122802D004201FB0C4E5F8491B -+:10AD20001C984FF0000908728DF818908DF83C902F -+:10AD30000FAA0A602B9A4A60ADF81C90ADF85090AB -+:10AD40002A789A4602F03F0C0420711F04F1180380 -+:10AD50004FF007084FF0030E1693BCF11F0F7DD282 -+:10AD6000DFE80CF07C7C107C257CA97CFD7CFC7CE5 -+:10AD7000FB7CFA7CFD7CF97C7C7CF87CF77C7C7C21 -+:10AD80007C7CF60094F84820B5F80110920701D5B4 -+:10AD9000032E02D08DF8180039E34FF40060ADF8AF -+:10ADA000500061808DF83CE0ADF84010F1E2052ED6 -+:10ADB000F0D1B5F801002083ADF81C00B5F8031000 -+:10ADC000618300286BD0884269D80020A07220815E -+:10ADD0004FF6FF706084169801F0AEF805208AF8EF -+:10ADE00000000220804601900AAB5A461C99169832 -+:10ADF00001F0A5F898BB9DF82E00012804D002218F -+:10AE00008AF80110102003E001208AF801000220D6 -+:10AE10000490002203A90BA805F021FCF0BB9DF8CB -+:10AE20000C00049981423CD13A88801CA2EB0801B5 -+:10AE3000814236DB019800901FFA8BF002230DF15E -+:10AE40002A02299900F0C7FD019808F10208801C28 -+:10AE500081B2019117AA03A90BA801E0B8E223E08F -+:10AE600005F0FDFB019900911FFA8BF09DF80C3065 -+:10AE700017AA299900F0AFFD9DF80C000AAB08EB6A -+:10AE800000011FFA81F801995A46084480B20190E6 -+:10AE90001C99169801F053F8002801E001E095E0B4 -+:10AEA000B7D0B8F1020F03D10A208DF818006DE277 -+:10AEB000A7F800806AE2072EFFF46CAFB5F8010036 -+:10AEC0002083ADF81C00B5F80310618300287DD005 -+:10AED00088427BD80120A072B5F8050020810020AF -+:10AEE000A073E06900F087FD78B9E16901208871FD -+:10AEF000E2694FF420519180E1698872E16942F67C -+:10AF000001000881E16900208873F01F60841D98AA -+:10AF1000A062A4F82480169801F00EF88AF8008048 -+:10AF20000120804602900020ADF82A002BE000BFEF -+:10AF3000B8F1010F1DD0E0698079012803D1BDF877 -+:10AF40002800ADF80E00029800901FFA8BF007E081 -+:10AF50002BE2ADE13BE1DCE025E29FE076E03BE087 -+:10AF6000042303AA299900F036FD0298001D80B23F -+:10AF70000290BDF82A00ADF80C00ADF80E0008F103 -+:10AF800004001FFA80F80AAB5A461C99169800F084 -+:10AF9000D6FF20B93988A1EB08000428C8D2B8F13F -+:10AFA000010F81D0E0698079012805D0BDF8281013 -+:10AFB000A1F57F40FF3803D1BDF82800ADF80E00A1 -+:10AFC000029800901FFA8BF0042300E014E003AA1B -+:10AFD000299900F000FD6BE7072E02D0152E7FF4B3 -+:10AFE000D9AEB5F801002083ADF81C00B5F80320F8 -+:10AFF000628308B1904201D90120CBE60120A07202 -+:10B0000000202081A073052E07D0C8B2691DE26917 -+:10B0100005F006FB00287FF447AF4FF6FF70608411 -+:10B02000299803A9029781E8010C06A814A9CDE983 -+:10B0300000102878002300F03F0220461C99FFF7FB -+:10B040009BFB8146208BADF81C009FE1032ED4D1E1 -+:10B050004020ADF85000B5F801002083ADF81C0089 -+:10B060000DF1300C01230021CDF814C00293CDE97D -+:10B0700003B1299A1C99CDE9001239880022491E92 -+:10B080008BB294F8201000F0D9FF8DF8180090BB17 -+:10B090000B208AF80000BDF8300038E0052EACD156 -+:10B0A0008020ADF85000B5F801002083B5F80310FA -+:10B0B0006184ADF81C00B1F5007F02D98DF81880CD -+:10B0C000A5E141F47C4262840DF1280800214FF093 -+:10B0D000010CCDE90418CDE902CB299B1C99CDE9DF -+:10B0E00000133988491E8BB294F8201000F0A6FF97 -+:10B0F0008DF8180030B18328A7D10220D6E00000D7 -+:10B10000F40500200D218AF80010BDF82800401C2D -+:10B110003BE1D10901EB41030EEB8301B14204D9BC -+:10B1200051067FF56AAF00202FE1B5F80100ADF8B8 -+:10B130001C002A78520609D506228DF83C202A7870 -+:10B14000120605D500208DF83C0043E18DF83C80C7 -+:10B150004FF0030C4FF00008CDF808C0CDE903B85C -+:10B16000DDE91C23CDF81480CDE90023A6EB010B0B -+:10B170001FFA8BF394F82010424600F042FD8DF840 -+:10B1800018008DF83C80297849060DD52088C00527 -+:10B1900006D5208BBDF81C10884201D1C4F8288048 -+:10B1A00040468DF81880F0E0832801D14FF0020965 -+:10B1B0004FF48070ADF85000BDF81C002083A4F857 -+:10B1C00022B01D98A0620320A0841321DAE0052E8E -+:10B1D000FFF413AFB5F80100ADF81C00B4F840203F -+:10B1E0007AB3A2F57F43FE3B2CD008228DF83C2099 -+:10B1F0004FF0050C4FF00008CDF808C0CDE903B8BA -+:10B20000DDE91C23CDF81480CDE9002389B241F497 -+:10B210000043B5F8032094F8201000F0F2FC8DF8FC -+:10B220003C804FF400718DF81800ADF85010832861 -+:10B2300013D010B3B4F84010A1F57F40FE3809D008 -+:10B24000E5E0FFE70B228DF83C204FF6FE72A4F8F4 -+:10B250004020CDE7A4F84080D9E05B462A46009420 -+:10B2600030461D99FFF76AFB8DF8180008B1832856 -+:10B270004CD1BDF81C0020833FE75B462A46009472 -+:10B2800030461D99FFF75AFB8DF81800F0BBB4F853 -+:10B290004210E06B299A431801A8009780E8040C3B -+:10B2A0005A88998833F8060BFFF756FC81466DE003 -+:10B2B00095F80180022E75D15FEA080002D0B8F13E -+:10B2C000010F6FD109208DF83C0007A800908DF880 -+:10B2D000408094F82010434600222046FFF71EFCD1 -+:10B2E0008DF8410000218DF8421058B9B8F1010FD6 -+:10B2F00015D0B8F1000F05D1B4F84010A1F57F408A -+:10B30000FF380CD0B4F8400048B100E03EE0002027 -+:10B310008DF83C004FF48060ADF850000EE00FA8AF -+:10B320002B99FBF77EF8814600208DF83C004FF406 -+:10B330008060ADF85000B9F1020F06D0F8480068FF -+:10B34000807928B18DF8180028E0A4F8188043E02F -+:10B35000B9F1000F03D081208DF818003CE007A858 -+:10B36000009094F82010434601222046FFF7D6FBB8 -+:10B370008DF8180059462046FFF7B2FB9DF81800DB -+:10B3800020B919218AF80010012038809DF83C006E -+:10B3900020B10FA82B99FBF744F88146B9F1000FB3 -+:10B3A00032D019E016E00620F4E42078000711D529 -+:10B3B000012E0FD10A208DF83C00E088ADF8400046 -+:10B3C0005946042007F079FA0820ADF85000AAE6A3 -+:10B3D0005106E9D54FF004092088BDF85010084304 -+:10B3E0002080BDF8500080050CD5B4F84010A1F5C0 -+:10B3F0007F40FE3806D11D9820631E986063268723 -+:10B400004FF00309484688E49DF8180078B1012000 -+:10B410008AF8000029788AF80110BDF81C10AAF8F3 -+:10B4200002109DF818108AF8041005203880208832 -+:10B43000BDF8501088432080E4E72DE9FF4F97B016 -+:10B44000804601780120DDE926A488404FF20901F9 -+:10B450000840ADF8200021889B46A1F57F424FF0BF -+:10B460000009FF3A02D028B1080703D501201BB01C -+:10B47000BDE8F08F249E0020054630701999189A77 -+:10B480000988ADF84010A6498DF81C000A728DF8A5 -+:10B490002C000BA808602598486098F80000012847 -+:10B4A00037D0022809D003287ED1307820F03F0021 -+:10B4B0001D303070B8F80400E08098F800000228D1 -+:10B4C00004D1307820F03F001B30307094F84800F1 -+:10B4D000000769D513AB0020CDE904030721CDE9AE -+:10B4E000001B0322CDE9022ABDF8400094F8201089 -+:10B4F000C01E83B2B8F80400002200F09FFD0028AF -+:10B50000D2D1B8F80400A6F80100BDF84C00C01C68 -+:10B5100003E198F805108DF81C1098F80400012834 -+:10B5200006D04FF4007902282BD00328BCD171E15A -+:10B530002088B8F8087010F40060ADF8200033D00F -+:10B54000172F1CD3FEF73EFDB84218D3B4F84600BF -+:10B55000172801D3B84212D1307820F03F00C01C28 -+:10B560003070A6F801700320ADF84000A4F84670D2 -+:10B5700094F8480020F0020084F848006CE10525AA -+:10B5800085E1208808F1080700F4FE60ADF820008E -+:10B5900010F0F00F1ED010F0C00F03D03888228BAF -+:10B5A0009042ECD1B1B900E06BE1B878C00711D09E -+:10B5B0000020B9680290CDE9030107210590CDE98B -+:10B5C0000010FB88BA8894F82010388800F019FB26 -+:10B5D0000028D4D1BDF8200080284CD006DC1028EB -+:10B5E0000DD020280BD040288AD124E0B0F5807FF0 -+:10B5F0006AD048457ED0B0F5806F97D1E2E0C006B2 -+:10B6000001D5082000E01020814605208DF82C008F -+:10B61000002008A9ADF8300001AB009110AA07A8DE -+:10B6200083E80508CDE9046A3B884A46072120469D -+:10B63000FFF7A2F8A8E09DF81C004FF00A090028C7 -+:10B640009CD113ABCDE904030721CDE9001B0122F6 -+:10B65000CDE9022ABDF8400094F82010401E83B2C4 -+:10B66000208B002200F0EAFC8DF81C000B203070CB -+:10B67000BDF84C001EE09DF81C004FF00C0900289E -+:10B6800021D115ABCDE904030721CDE9001B01222F -+:10B69000CDE9022ABDF84000628C401E83B294F8C6 -+:10B6A0002010208B00F0CAFC8DF81C000D2030709B -+:10B6B000BDF85400401CADF8400005208DF82C006A -+:10B6C000208BADF83000C7E03888B4F818C060456A -+:10B6D0007FF455AF9DF81C004FF0120900281ED1D1 -+:10B6E000A06AB8B1B878C0073FF449AF0020B96884 -+:10B6F000029000E016E0CDE9030107210590CDE9B5 -+:10B700000010FB88BA8894F82010604600F079FA9F -+:10B710008DF81C00132030700120ADF840009BE034 -+:10B72000F4050020B7F800C0208B8445D0D19DF8E7 -+:10B730001C004FF016090028E06B06D0F0B3002083 -+:10B74000ADF808004FF6FF7729E078B1B978C9075E -+:10B75000BED1B4F8421010AACDE9002BCDE9026A9F -+:10B7600043185A88998833F8060B0BE0B878C0075D -+:10B77000BAD010AACDE9002BCDE9026ABA88F988BF -+:10B780006046BB68FFF7E8F9050065D0072D79D062 -+:10B790007DE00F4605AA02A92046FFF715F9B4F887 -+:10B7A0004220BDF808108A4201D00028F1D0B4F838 -+:10B7B0004210E26B00201144088000E04CE0A4F845 -+:10B7C000427049E09DF81C004FF0180940B1208BF1 -+:10B7D000D0B13888208351462046FFF781F93BE0FD -+:10B7E00004F118000090237E94F8201001222046D6 -+:10B7F000FFF794F98DF81C000028ECD11920307067 -+:10B800000120ADF84000E6E7052551462046FFF748 -+:10B8100067F93CE0208800F40070ADF8200048454E -+:10B820002FD1B4F84000A0F57F41FE3990D1D8F86F -+:10B8300008004FF0160958B1E063B8F80C10A4F8EE -+:10B8400040104FF6FF71A4F842100021018003E080 -+:10B850004FF6FF70A4F84000BDF8200030F47F617F -+:10B860001AD0782300225146042006F089FF98F868 -+:10B87000000020712088BDF82010084320800EE0D1 -+:10B8800000E007252088BDF820108843208020880C -+:10B8900010F47F6F1DD03EE02188814321809DF808 -+:10B8A0002C0028B16F4841680BA8FAF7BAFD05468D -+:10B8B0009DF81C000028EAD086F801900120307025 -+:10B8C000208B70809DF81C0030710520ADF8400081 -+:10B8D000DDE7208FF8B119990988ADF84010DDE94E -+:10B8E000242302A9059481E80C0410AACDE9002BB9 -+:10B8F000D4E90C231899FFF7DFF9054601208DF8EC -+:10B900002C0000210BA8CDF830A0FAF78AFD00B179 -+:10B9100005460020208794F8480040070AD52046B5 -+:10B92000FFF781F910F0760F04D114F8480F20F0DA -+:10B93000040020701998BDF840100180284696E553 -+:10B9400000B585B0042807D102208DF800000191D0 -+:10B9500000216846FAF765FD05B000BD10B5414A03 -+:10B9600003781168012B02D0022B2BD112E00B7847 -+:10B970000BB1052B01D104230B70136881889980CA -+:10B980001168C388CB8013680189198111684089C7 -+:10B9900048810FE083888B801168C388CB8013684F -+:10B9A00001891981136841895981116883898B81C3 -+:10B9B00000690861D2E90001FAF733FD022803D0DB -+:10B9C000002800D0812010BD832010BDC06B00284E -+:10B9D00000D001207047F8B51C4615460E46069F5C -+:10B9E00003F0D4FA2346FF1DBCB231462A46009428 -+:10B9F00002F013FFF8BD8178012909D10088B0F564 -+:10BA0000205F03D042F60101884201D10020704737 -+:10BA100007207047F0B589B0002415460E4607464A -+:10BA2000ADF8184011E0079801882980811D029423 -+:10BA3000CDE9034107210594CDE9001483884288AC -+:10BA40000088314600F0DDF830B907AA06A938466B -+:10BA5000FEF7BAFF0028E6D0822800D1002009B006 -+:10BA6000F0BD0000F405002010B58B7883B102789A -+:10BA70009A4205D10B885BB102E08B79091D4BB16D -+:10BA80008B789A42F9D1B0F801300C88A342F4D1F6 -+:10BA9000002010BD812010BD072826D012B1012A38 -+:10BAA00027D103E0497801F0070102E04978C1F3AA -+:10BAB000C20105291DD2DFE801F00318080C1200AD -+:10BAC0000AB1032070470220704704280DD250B1FC -+:10BAD0000DE0052809D2801E022808D303E00628BD -+:10BAE00003D0032803D005207047002070470F20A3 -+:10BAF00070478120704710B513880B800B781C06A7 -+:10BB00001FD5F64CA47A844204D843F01000087084 -+:10BB1000002010BD94682478C44064F304130B70B3 -+:10BB20001378D17803F0030341EA032140F20123A3 -+:10BB3000B1FBF3F403FB1411926800FB0120401CDD -+:10BB400010BD906810BD37B5BDF8041011809DF888 -+:10BB5000045029061BD5E14901239468897A814262 -+:10BB600009D8FE280FD1E80602D58B405B1E00E005 -+:10BB70000023237007E0217883409943C5F3001325 -+:10BB8000834019432170107820F0100010703EBDE2 -+:10BB90002DE9F0410746C81C0E4620F00300B042D4 -+:10BBA00002D08620BDE8F081082A01D90E20F9E7ED -+:10BBB000CA4D002034462E60AF802881AA72E880EA -+:10BBC0001AE0E988491CE980810614D4E17800F084 -+:10BBD000030041EA002040F20121B0FBF1F201FB39 -+:10BBE0001201206800F021FB2989084480B22881D5 -+:10BBF000381A3044A0600C3420784107E1D400208A -+:10BC0000D0E72DE9FF4F87B01646DDE9147A80466C -+:10BC1000994623F4404500F0F8FA04000BD0207850 -+:10BC200000060AD5AD48817A0898814205D8872058 -+:10BC30000BB0BDE8F08F0120FAE7224601A9089871 -+:10BC4000FFF759FF834600208DF80800072F1BD00F -+:10BC5000012221463846FFF71FFF0028E8D120784F -+:10BC6000400611D502208DF80800BDF80400ADF89B -+:10BC70000C80ADF80E00ADF810601698ADF81250BB -+:10BC8000CDF818A0ADF814005FEA094004D50025EE -+:10BC90002E46A84601270CE02178E07801F0030148 -+:10BCA00040EA012040F20122B0FBF2F1804602FBA3 -+:10BCB00011875FEA494009D5B84507D1A1782079B5 -+:10BCC00001F0030140EA0120B04201D3BE4201D994 -+:10BCD0000720ADE7A8191FFA80F9B94501D90D2051 -+:10BCE000A6E79DF8080020B102A8FAF798FB002803 -+:10BCF0009ED1B84507D1A0784FEA192161F3010020 -+:10BD0000A07084F80490199800B10580189850EA42 -+:10BD10000A0028D0189830B10BEB06002A46189973 -+:10BD200012F0C2F80FE017980BEB060880B25746E6 -+:10BD3000169E03F019F92B46F61DB5B23946424658 -+:10BD4000009502F031FD224601A90898FFF7D3FEC5 -+:10BD50009DF80400224620F010008DF8040001999F -+:10BD60000898FFF7F0FE002062E72DE9FF4FDFF8AB -+:10BD70006C9182461746B9F80610D9F8000001EB1D -+:10BD8000410100EB810440F20120B2FBF0F187B0E9 -+:10BD900000FB11754E46DDF854802946089800F0E6 -+:10BDA00044FA316832898B46611A0C3101441144DE -+:10BDB000B38889B28B4201D8842039E70899CEB282 -+:10BDC000310603D5B10601D5852031E7B9F806C0A3 -+:10BDD0000CF1010C1FFA8CFCA9F806C0169909B1E8 -+:10BDE000A1F800C0B10602D5C4F8088007E01044ED -+:10BDF00080B2A9F80800191A01EB0B00A0602246D6 -+:10BE0000FE200899FFF79FFEE77025712078390A18 -+:10BE100061F301002A0AA17840F0040062F30101F5 -+:10BE2000A17020709AF802006071BAF80000E080FA -+:10BE300000252573300602D599F80A7000E0012725 -+:10BE4000B00601D54FF000084E4600244FF0070918 -+:10BE50000FE00295CDE903580595CDE90095F088EE -+:10BE60002146149B0A9AFFF7CCFE0028A5D1641C3A -+:10BE7000E4B2BC42EDD30020DAE62DE9F04780467B -+:10BE800000F0C3F9070005D000264446134D40F2E8 -+:10BE9000012916E00120BDE8F087204600F0B5F941 -+:10BEA0000278C17802F0030241EA0222B2FBF9F300 -+:10BEB00009FB1321006800F0B8F93044641C86B215 -+:10BEC000A4B2E988601E8142E7DCA8F10100E880A5 -+:10BED0002889801B288100203870DCE700060020BC -+:10BEE00020B1401E108091700020704701207047E3 -+:10BEF00010B5D54904460088CA88904201D38220F3 -+:10BF000010BD096800EB400001EB80025079A0727F -+:10BF1000D08820819178107901F0030140EA012056 -+:10BF2000A081A078E11CFFF7E6FD20612088401C7D -+:10BF30002080E080002010BD0121818270472DE922 -+:10BF4000FF4F83B04FF6FF780546A3F800804068A6 -+:10BF50001F4680788DF8060068680088ADF80400F8 -+:10BF600000208DF80A00A88A2C88A04200D304463D -+:10BF7000AC8242E0A88A401CA882701D6968FFF765 -+:10BF800073FDC0BB3988414501D1601E3880688887 -+:10BF9000A04237D3B178307901F0030140EA01299A -+:10BFA00001A9701DFFF760FD28BB698941452ED0AE -+:10BFB000002231460498FFF76FFDE0B969894945D1 -+:10BFC00019D10598D5F810B0B5F80CC0D6F808A06E -+:10BFD00080B2CDF800C002F0C7FFDDF800C05946BE -+:10BFE0000CF1070C1FFA8CFC52464B46CDF800C0F2 -+:10BFF00002F09DFB58B1641CA4B2204600F005F984 -+:10C000000600B7D1641EAC82822007B011E67C80A6 -+:10C010007079B871F088B8803178F07801F0030158 -+:10C0200040EA01207881A7F80C90287A324607F17F -+:10C030000801FFF760FD38610020E6E72DE9FF4FBA -+:10C0400087B01C46DDE9158B91460F46DDF864A0EC -+:10C05000079800F0DAF8050008D02878000607D520 -+:10C060007948807AB84203D88720E1E50120DFE5EE -+:10C07000C9F309062A4601A93846FFF73CFD0746E1 -+:10C08000149807281BD000222946FFF705FD002839 -+:10C09000EBD12878400612D501208DF808000798CA -+:10C0A000ADF80C00BDF80400ADF80E00ADF810605E -+:10C0B000ADF8124002A8FAF7B2F90028D5D12978D4 -+:10C0C000E87801F0030140EA0121AA78287902F01A -+:10C0D000030240EA02204E4507D0B1F5007F04D9A3 -+:10C0E000611E814201DD0B20A2E5864201D90720B5 -+:10C0F0009EE5801B85B2A54200D92546BAF1000F06 -+:10C1000001D0AAF80050189818B1B9192A4611F0B0 -+:10C11000CBFEB8F1000F0ED017983E4480B24446D3 -+:10C120005F4602F033FF2146FF1DBCB232462B466C -+:10C13000009402F072FB00207AE52DE9F0411D46E3 -+:10C1400017460E4600F061F8040008D0207800067B -+:10C1500007D53D48807AB04203D8872022E50120E8 -+:10C1600020E5224639463046FFF7C5FC65B1217807 -+:10C17000E07801F0030140EA0120B0F5007F01D82A -+:10C18000012000E00020287000200BE52DE9F0419F -+:10C190001D4617460E4600F038F8040008D02078F7 -+:10C1A000000607D52848807AB04203D88720F9E4F2 -+:10C1B0000120F7E4224639463046FFF7C4FCFF2D44 -+:10C1C00014D02178E07801F0030240EA022040F226 -+:10C1D0000122B0FBF2F302FB130015B900F20120BB -+:10C1E00080B2E070000A60F3010121700020D9E400 -+:10C1F00010B50C4600F009F828B1C18821804079BB -+:10C20000A070002010BD012010BD0F49CA888242D5 -+:10C2100009D340B1096800EB40006FF00B0202EB5C -+:10C2200080000844704700207047C0B2820609D4DD -+:10C23000000605D50448807A4843401C80B2704708 -+:10C2400008467047002070470006002010B506F031 -+:10C250001BFD05F088FFF6F7D7FD10F011FE06F084 -+:10C26000EBFBBDE8104006F09DBC10B50C4601F09C -+:10C27000A4FE80B3204600F0A8FA68B322780F2A03 -+:10C2800009D0102A07D0022A05D0032A03D0142A85 -+:10C290002ED0FFDF1DE0A0781E282DD00EDC0C284C -+:10C2A00024D008DC092827D2DFE800F0132617265F -+:10C2B000261E1E1A1C0012281ED11BE0302819D081 -+:10C2C0001ADDA0F13A00032816D2DFE800F01115BC -+:10C2D0000B00002010BD13E010E043F20200F9E76C -+:10C2E0000420F7E70D20F5E70F20F3E70820F1E73A -+:10C2F0001120EFE70720EDE70320EBE7FFDFE8E79A -+:10C30000FFDFE6E700F061BA70B5034600200246A1 -+:10C310006FF02F050EE09C5CA4F130060A2E02D3CC -+:10C320004FF0FF3070BD00EB800005EB4000521C69 -+:10C330002044D2B28A42EED370BD30B50A240AE05E -+:10C34000B0FBF4F304FB13008D18303005F8010C3A -+:10C35000521E1846D2B2002AF2D130BD30B50023A9 -+:10C360004FF6FF7510E0040A44EA002084B2C85C6E -+:10C370006040C0F30314604005EA00344440E0B27A -+:10C380005B1C84EA40109BB29342ECD330BD0000AA -+:10C3900010B50AF04CF8042803D00AF048F8052834 -+:10C3A00002D108F05FFD50B90AF0FEF8032803D06F -+:10C3B0000AF000F9032804D107F0EFFC08B10120CE -+:10C3C00010BD002010BD70B50C460546062102F0D8 -+:10C3D00068FC606008B1002006E00721284602F0F2 -+:10C3E00060FC606018B101202070002070BD022048 -+:10C3F00070BD2DE9FC470C4606466946FFF7E3FF92 -+:10C4000000287DD19DF8000050B107F022FCB04219 -+:10C410007CD0214630460DF020F9002873D115E07C -+:10C4200008F039FAB04271D0214630460BF0CAFF0D -+:10C43000002868D1019D95F8C000503518B9687E74 -+:10C4400008B1012000E00020804603E0019D95F83E -+:10C45000698050354FF0010A95F835004FF000091A -+:10C46000A0B195F83600800710D584F8019084F8C3 -+:10C4700000A084F80290A68095F83710A171298F4A -+:10C480002181698F618185F835903CE0304602F06A -+:10C490007DFD070000D1FFDF384601F078FF10F086 -+:10C4A000FF0008D084F801900D212170A680E08063 -+:10C4B00084F802A027E0304602F056FD070000D1C4 -+:10C4C000FFDFB8F1000F21D0384601F0F0FFB8B11E -+:10C4D0009DF8000038B90198D0F8E4004188B142D5 -+:10C4E00001D180F80090304607F075FA84F8019089 -+:10C4F0000A21217084F80290A680A97EA17100E033 -+:10C5000004E085F819900120BDE8FC870020FBE7D6 -+:10C510001CB56946FFF757FF00B1FFDF684601F021 -+:10C52000A0FDFF4900208968A1F8C2001CBD2DE9CB -+:10C53000FC4104460E46062002F05EFB054607203D -+:10C5400002F05AFB2844C7B20025A8463E4417E033 -+:10C550002088401C80B22080B04202D34046A4F81C -+:10C56000008080B2B84204D3B04202D20020BDE8BD -+:10C57000FC816946FFF727FF0028F8D06D1CEDB25B -+:10C58000AE42E5D84FF6FF7020801220EFE738B5B5 -+:10C590004FF6FF70ADF800000DE00621BDF8000079 -+:10C5A00002F091FB04460721BDF8000002F08BFB6E -+:10C5B0000CB100B1FFDF00216846FFF7B8FF00288B -+:10C5C000EBD038BD2DE9F041D6A00679076807F019 -+:10C5D0006FFA0EF047FCD54C4FF004081020A4F879 -+:10C5E000388060874FF6FF70A4F85600002584F865 -+:10C5F0005850A4F85A0084F8315004F8345BCB4901 -+:10C6000004F8065C25702572C4F809703D31667324 -+:10C61000481E0CF051F8A5731B2020824FF4A47122 -+:10C620006182A082E1820A21217684F819800321A7 -+:10C63000A176E1760E212177072161770621A17786 -+:10C64000E1772084BDE8F08170B5B54C0D4660609F -+:10C65000217007F0A8F9FFF79AFFFFF7B3FF2078E2 -+:10C6600009F099FC08F03CFA217860680BF043FF70 -+:10C6700020780DF0A9FF28460AF04EFB07F029FBB1 -+:10C68000217860680DF094F8BDE870400EF0EABBC8 -+:10C6900010B501240AB1002010BD21B1012903D039 -+:10C6A0000024204610BD02210FF030FEF9E72DE9ED -+:10C6B000F047040000D1FFDF9C4D002695F83100C3 -+:10C6C00058B166701420207095F83200A07095F86B -+:10C6D0003300E07085F8316068E0287840B12C22A2 -+:10C6E000A91C204611F0E0FB0F2020702E705DE0A9 -+:10C6F00095F82E0060B10120E07095F82F00A07031 -+:10C7000095F8300060701020207085F82E604DE0A4 -+:10C71000864802215A308246FFF709FF00B1FFDF49 -+:10C72000B5F85A90062002F067FA0746072002F093 -+:10C7300063FA3844C7B2781C00F0FF08B5F85A0015 -+:10C74000B84212D1204608F039F850BB95F83400B1 -+:10C7500078B36670122020702021A01C11F01BFC01 -+:10C760000220A07085F8346020E040451AD12046B0 -+:10C7700007F044FAE8B12078122817D1A0783C28B5 -+:10C7800014D1A088072102F08CFA050000D1FFDF48 -+:10C79000288807F020F9A088072102F094FA00B158 -+:10C7A000FFDF03E02146FFF724FE10B10120BDE8C2 -+:10C7B000F087FFE702215046FFF7B9FE18B9B5F838 -+:10C7C0005A104945BAD10020F1E770E710B509F0D9 -+:10C7D0005FFB00B1FFDF0BF08CFE00B1FFDF08F064 -+:10C7E00049F90AF082FA00B1FFDF0CF0DFFF00B177 -+:10C7F000FFDF07F038FA00B1FFDF0DF0DFFE00B118 -+:10C80000FFDFFFF7C4FEFFF7DDFE07F0B5F802F02B -+:10C810009AFB0EF027FB454800210171012141716F -+:10C820000222C270017010BD10B5404C207828B1B2 -+:10C830000A21BDE810400F2001F0D8BBFFF7A8FD8A -+:10C8400008B10C2002E00EF053FB00202071012003 -+:10C8500060710A21E170207010BD70B5334D04463F -+:10C86000287828B1BDE8704032210F2001F0BEBB0E -+:10C87000207818B1012801D0122010E001F0C3FB8C -+:10C8800020B10EF080FC08B10C2008E0207801F007 -+:10C89000A2FB04F11703E21D611C0EF081FB28715D -+:10C8A000012068713221E970287070BD70B51F4C8D -+:10C8B0000546207828B1BDE870400B210F2001F01B -+:10C8C00095BB287818B1012801D012200EE0FFF79F -+:10C8D0005FFD08B10C2009E0287801F07CFB691CA1 -+:10C8E0000EF0CDFA08B1002000E0072020710120F1 -+:10C8F00060710B21E170207070BD10B50B4C217878 -+:10C9000029B13021BDE810400F2001F06FBB008835 -+:10C910000EF03CFC302158B10020207109E00000ED -+:10C9200048000020FFFFFFFF1F0000000C06002052 -+:10C93000217101206071E170207010BD70B5FF4C55 -+:10C940000546207828B1BDE8704031210F2001F064 -+:10C950004DBB01F058FB08B10C2005E0287800F031 -+:10C9600001000EF00DFC00202071012060713121CA -+:10C97000E170207070BD10B5F04C207828B13421E2 -+:10C98000BDE810400F2001F031BB01F03CFB20B1AD -+:10C990000EF0F9FB08B10C2002E00EF058FB00206D -+:10C9A0002071012060713421E170207010BD10B53C -+:10C9B000E24C217829B13621BDE810400F2001F06A -+:10C9C00015BB0378411CA21D18460EF041FC08B1AE -+:10C9D000002000E002202071012060713621E1700A -+:10C9E000207010BD70B5D54C0546207828B1BDE843 -+:10C9F000704037210F2001F0F9BA287801F0EBFAE6 -+:10CA0000691C0EF0D1FB022508280AD00EF00FFD9C -+:10CA100038B10168C4F80610808860810020207158 -+:10CA200000E02571012060713721E170207070BD38 -+:10CA3000C248017819B10F21084601F0D7BA002188 -+:10CA400001710F218170C170FF2181714FF6FF715B -+:10CA50000181BB4949680A7882728A888281498843 -+:10CA6000C1810121417101707047B4490A781AB13E -+:10CA700047210F2001F0BABA0088A1F85600012022 -+:10CA800081F8580000220A7148714722CA70087064 -+:10CA9000704710B5A94C207828B12B21BDE8104073 -+:10CAA0000F2001F0A3BA0821A01D05F0F5FB00201E -+:10CAB0002071012060712B21E170207010BD70B5D4 -+:10CAC0009E4C217829B1BDE870403F210F2001F034 -+:10CAD0008DBA90F90000042816D0032814D098B11C -+:10CAE000011D11D010F1080F0ED010F10C0F0BD05A -+:10CAF00010F1100F08D010F1140F05D010F1280F0D -+:10CB000002D01220207103E0002506F0DEF9257125 -+:10CB10003F20E07001206071207070BD10B5874C1F -+:10CB2000217829B12A21BDE810400F2001F05EBA1A -+:10CB3000A31D012200F110010FF097F800202071D1 -+:10CB40000F20A0702A20E07001206071207010BDBD -+:10CB50002DE9FF41794C207828B146210F2001F0C2 -+:10CB600045FABDE8FF814FF0000884F80680B4F86C -+:10CB70005600ADF8040002A9FFF725FC20B1002102 -+:10CB800001A8FFF7D4FCE8BBBDF80400ADF8000035 -+:10CB900002A980B2FFF717FC00B1FFDFBDF800006B -+:10CBA00002F0F4F9050000D1FFDF2846039F01F0F1 -+:10CBB00085FC80F0010697F86950BDF8000002F08E -+:10CBC000D3F9070000D1FFDF384601F070FC80F098 -+:10CBD000010255EA020019D0A179BDF8000004EB6A -+:10CBE000410108815549A3791831585C65F300006B -+:10CBF0005854A37962F341005854A27966F3820035 -+:10CC0000505400E00DE0A079401CA071002168465E -+:10CC1000FFF78DFC28B9BDF80000BDF8041088426C -+:10CC2000B6D1012084F8048060714621E170207043 -+:10CC300097E770B5414C0546207828B1BDE87040B3 -+:10CC400042210F2001F0D2B909F0F1FB052804D0F0 -+:10CC5000284609F08DF9002000E00C202071012009 -+:10CC600060714221E170207070BD10B5334C2078A6 -+:10CC700028B10E21BDE810400F2001F0B7B9A11D69 -+:10CC8000002006F029FF00202071012060710E2194 -+:10CC9000E170207010BD70B5284C0546207828B191 -+:10CCA000BDE8704040210F2001F0A0B901F0ABF9C0 -+:10CCB00038B10C202071012060714021E17020709A -+:10CCC00070BD2946002006F0F4FE0020F2E770B5A2 -+:10CCD0001A4C0546207828B1BDE870403E210F204F -+:10CCE00001F084B909F0C4F910B90AF0EBFA68B19F -+:10CCF00028780AF060F8287808F0EBF80020207116 -+:10CD0000012060713E21E170207070BD0C20F6E7BB -+:10CD100070B50A4C0546207828B1BDE8704017214F -+:10CD20000F2001F063B901F06EF958B10C202071A9 -+:10CD3000012060711721E170207070BD0C06002089 -+:10CD4000480000202946012006F0B3FE0020EEE74F -+:10CD500038B5FF4D0446287828B1BDE838404A214F -+:10CD60000F2001F043B9227961798A4215D0A07968 -+:10CD7000E379984211D01F2A0FD81F290DD800221D -+:10CD8000114610F0D7FB40B90022E079114610F0AF -+:10CD9000D1FB10B9207A072801D9122015E04FF6EF -+:10CDA000FF70ADF8000009F0FFFBA8B909F002FC24 -+:10CDB00090B909F03CFB78B900216846FFF7B7FB52 -+:10CDC00050B1204605F09AFF0020287101206871BB -+:10CDD0004A21E970287038BD0C20F6E72DE9FC47A0 -+:10CDE000DB4C054694F82E0028B12821102001F0D4 -+:10CDF000FDF8BDE8FC87282084F83000012184F884 -+:10CE00002E10A8784FF000091A2825D00EDC16281D -+:10CE100031D2DFE800F03030303030213030303087 -+:10CE20003030303030303030302121212A2822D0AB -+:10CE30000BDCA0F11E000C281DD2DFE800F01C1C4A -+:10CE40001C1C1C1C1C1C1C1C1C0D3A38042812D257 -+:10CE5000DFE800F0110211022888B0F5706F0AD2E5 -+:10CE60001F20884684F82F0028886946FFF7ABFA10 -+:10CE700018B1022019E0122017E09DF80000019F70 -+:10CE8000002806D007F1F607019E05D106F1DD0660 -+:10CE900004E007F1DC07F7E706F1F706684601F062 -+:10CEA000D5F808B1387818B10C2084F82F00A0E725 -+:10CEB00087F80080A878307084F82F90684601F0D9 -+:10CEC000D0F896E77CB5A24C0546207820B1252104 -+:10CED0000F2001F08BF87CBD28886946FFF773FAB4 -+:10CEE000002160B102202071A1602173E1800F2038 -+:10CEF000A0702520E0700120607120707CBD019A37 -+:10CF00001046503282F83E108368A360037B23737F -+:10CF100092F83E30002BF5D12888E080E7E710B585 -+:10CF200040B10478406813B1B0F8440003E0B0F8B1 -+:10CF3000460000E0FB201B2908D3814206D8B2F549 -+:10CF4000A47F03D340F64800824201D9122010BDCD -+:10CF5000002010BD70B57E4C0546207828B1BDE894 -+:10CF600070404C210F2001F041B8012666711F204E -+:10CF700020710F20A0704C20E0702670EA88A988EC -+:10CF800033460020FFF7CBFF30B900236A88298899 -+:10CF90001846FFF7C4FF08B12071CEE604F8426FCF -+:10CFA000A888E080E8882081288860806888A08040 -+:10CFB0000020207004F83E0CBFE67CB5644D0446AA -+:10CFC000287820B13A210F2001F010F87CBD01260D -+:10CFD0006E711F2028710F20A8703A20E8702E7003 -+:10CFE00020886946FFF7EFF908B102200DE0A2881A -+:10CFF000618801236846FFF792FF30B9A2886188F3 -+:10D0000000236846FFF78BFF08B128717CBD9DF8AF -+:10D0100000100020002901990988E98028710199F0 -+:10D0200018D081F81961019A6188A2F81E11019A3D -+:10D03000A188A2F82011019A6188A2F81A11019A18 -+:10D04000A188A2F81C11019981F81861019981F851 -+:10D0500019017CBD81F8F160019A6188A2F8F6108F -+:10D06000019AA188A2F8F810019A6188A2F8F2103A -+:10D07000019AA188A2F8F410019981F8F060019951 -+:10D0800081F8F1007CBD70B5314C0546207828B19F -+:10D09000BDE870403C210F2000F0A8BF012666715A -+:10D0A0000F20A0703C20E07026706A8829883346E3 -+:10D0B0000020FFF734FF30B900236A88298818461A -+:10D0C000FFF72DFF08B1207137E604F8426F28887A -+:10D0D00060806888A0802888E0806888208100209F -+:10D0E000207004F83E0C28E670B5194D287828B158 -+:10D0F000BDE870403B210F2000F078BF95F842005A -+:10D100002C1D00B1FFDFB5F848006080B5F84A007B -+:10D11000A08001206070002121700F21A9703B21A7 -+:10D12000E970287009E670B5094D287828B1BDE886 -+:10D1300070403D210F2000F059BFFB262C1DEE80D2 -+:10D14000304600F04FFFA080E680304602E000004D -+:10D150000C06002000F046FF2081012060700021B5 -+:10D1600021700F21A9703D21E9702870E5E52DE9B6 -+:10D17000FC41FC4C064694F82E0028B110210846CC -+:10D1800000F034FFBDE8FC811F2084F82F00102040 -+:10D1900084F83000012784F82E7030886946FFF744 -+:10D1A00012F978B9684600F051FF58B1019D9DF819 -+:10D1B000000050350028019806D000F585700178F0 -+:10D1C00041B904E0022006E0D0F8E400F7E795F862 -+:10D1D000351019B13A2084F82F00D3E795F83610AE -+:10D1E00089070CD1042101709DF8000020B9019934 -+:10D1F0003088D1F8E4104880684600F032FF002003 -+:10D2000084F82F0085F83570BCE72DE9F041D54C46 -+:10D210000546207828B1BDE8F0411D210F2000F01F -+:10D22000E5BE1F202071012060711D21E17020707A -+:10D2300009F0FDF80C2604283CD005283AD0A9793D -+:10D240001220012904D019B1022901D0032926D1C5 -+:10D25000297809B1012922D1E97929B1012903D01D -+:10D26000022901D003291AD1698843F6FD720B1FE8 -+:10D270003020934213D2AB881B1F93420FD22187D9 -+:10D28000A88860870027A87907F05DFD90B1E8794C -+:10D2900007F0B0FD2878012804D030B10CE02071EF -+:10D2A000BDE8F0810021022001E00021012007F00B -+:10D2B000D0FD08B12671F3E72771F1E770B5A94CED -+:10D2C000217829B1BDE870401E210F2000F08EBEEC -+:10D2D0001F212171012161711E22E27021700278EB -+:10D2E0001221012A00D01AB9407818B1012801D0C2 -+:10D2F000217122E500260C25012A08D009F097F8B3 -+:10D30000052802D008F071FD40B1257115E507F040 -+:10D3100031FD618F208F08F0B8FEF5E726710CE52E -+:10D320002DE9F0478F4C0746B0F84600B4F844505A -+:10D330000E46854200D3054600F054FE0146B4F87F -+:10D340004600814203D8B7F8460000F04BFE804605 -+:10D35000A146B4F84840B7F84400844200D30446DC -+:10D3600000F040FE0146B9F84A00814203D8B7F800 -+:10D37000440000F037FE4FF4A4721B2C01D0904201 -+:10D3800003D11B2D08D0904506D0F580A6F8088063 -+:10D390007480B08001203070BDE8F0872DE9FC5F1B -+:10D3A0000546AFF680216F4ED1E900A196F82E0018 -+:10D3B000884628B1BDE8FC5F2121102000F016BE90 -+:10D3C0001F2086F82F00212086F830004FF0010B37 -+:10D3D00086F82EB0284600F052FE002811D109F040 -+:10D3E00026F805280CD009F022F8042808D096F871 -+:10D3F000340028B907F04FFAA0F57F41FF3901D07A -+:10D400000C20D0E0062101A801F01CFC04007DD016 -+:10D4100003210EF061FAB6F85400A4F84400B6F8FF -+:10D420005400A4F8460096F84D000090B6F8541049 -+:10D4300096F84C3020880A4601F0E1FC04287CD0A4 -+:10D4400000B1FFDF208806F0C5FA04F10D07B4F83B -+:10D4500000900421384604F01FFF494638460EF07C -+:10D4600078FB41A03F1D006800900321684604F04E -+:10D470009EFE002069460A5C3A54401CC0B2032854 -+:10D48000F9D3288A6080688AA080A88AE08096F80C -+:10D490004F2096F84E1020460EF0FFFC0146204625 -+:10D4A0000EF034FD4FF0000984F8569084F8579040 -+:10D4B0004F46687900F08FFD6076D5F80600C4F815 -+:10D4C0001A006889E083C4F808A084F80C8084F806 -+:10D4D000ECB004F1F0012046FFF722FF8DF8007058 -+:10D4E0000121684604F063FE9DF8000000F007018A -+:10D4F000C0F3C1021144C0F3401008448DF800008D -+:10D50000401D2076092804D2083001E013E014E021 -+:10D510002076002120460EF0DFF9287B07F013FC6F -+:10D5200098B107F027FC69792879AA1D07F06DFCEE -+:10D5300007001BD027E0092035E02088062101F0F4 -+:10D54000C2FB00B1FFDF07202DE0208806F043FA80 -+:10D550002088062101F0B7FB00283FF451AFFFDF20 -+:10D560004EE700000C060020112233002146032064 -+:10D5700007F06FFC070006D16A882988204608F06A -+:10D5800036FD07000CD0208806F025FA20880621F9 -+:10D5900001F099FB00B1FFDF86F82F70BDE8FC9F1A -+:10D5A000484684F8E09086F82F00F7E738B5FE4C3F -+:10D5B000207820B122210F2000F018FD38BD1F2057 -+:10D5C0002071012565712220E070257094F83400E7 -+:10D5D00010BB08F02CFF052805D007F05CF9A0F57A -+:10D5E0007F41FF3918D000202071684608F083FD84 -+:10D5F0000028E3D10098008806F0EDF90098062194 -+:10D60000008801F060FB00B1FFDFE84884F8345087 -+:10D610000078FCF74FFC38BD0C20207138BD2DE997 -+:10D62000F041E14D044695F82E0028B1BDE8F041E7 -+:10D630002321102000F0DABC1F2085F82F002320C2 -+:10D6400085F83000012085F82E00618840F67B4384 -+:10D650008A1F30209A4251D2A288961F9E424DD2F4 -+:10D6600091424BD8E188B1F5FA7F47D2218940F643 -+:10D670007746A1F10A03B34240D2B1EBD20F3DD9B4 -+:10D680006189A289914239D84FF00008208806218B -+:10D6900001F007FB06004FF0020707D000F0C8FCBE -+:10D6A00020B1D6F8E400017839B902E085F82F708E -+:10D6B000F6E5D6F81011097809B13A201EE00521E7 -+:10D6C0008171D6F8E4004146A0F80880D6F8E4203D -+:10D6D000A0885081D6F8E420E0889081D6F8E42034 -+:10D6E0002089D081D6F8E400028943899A4204D87F -+:10D6F0008279082A01D89A4203D3122085F82F0094 -+:10D70000CEE522884280D6F8E400077085F82F1015 -+:10D71000C6E52DE9FE43A44C0646207830B103B09F -+:10D720002421BDE8F0430F2000F060BC01256571A5 -+:10D730002420E070257030460EF02DFA08B100204C -+:10D7400000E01220207100282CD184F83C50306871 -+:10D75000C4F83D00307984F841004FF0000884F8A7 -+:10D760003C806946062001F028FA00B1FFDF6846D8 -+:10D7700001F001FAA0B9BDF8047000BFBDF80400C3 -+:10D78000062101F08EFA060000D1FFDF86F8EC508A -+:10D79000684601F0F0F918B9BDF80400B842EDD1BF -+:10D7A00084F80480BDE8FE8370B57F4D064695F889 -+:10D7B0002E0028B1BDE870402621102000F016BCD4 -+:10D7C0001F2085F82F00262085F83000012085F8DD -+:10D7D0002E003088062101F064FA040007D000F022 -+:10D7E00027FC20B1D4F8E400017831B901E002202F -+:10D7F0000CE0D4F81011097809B13A2006E00521AF -+:10D800000170D4F8E41030884880002085F82F009B -+:10D810005AE46548017819B106210F2000F0E6BBF3 -+:10D82000002202710F2181700621C170C0F806200C -+:10D83000C0F80A20F1218171012141710170704706 -+:10D840002DE9F041584D064695F82E0028B1BDE867 -+:10D85000F0412C21102000F0C9BB1F2085F82F00BB -+:10D860002C2085F83000012085F82E003088062114 -+:10D8700001F017FA040007D000F0DAFB20B1D4F869 -+:10D88000E410087830B901E0022026E0D4F8100155 -+:10D89000007808B13A2020E08C200027005D10F0CD -+:10D8A000010F19D0D6F802004860D6F8060088604B -+:10D8B00054F8E40F718910228181206806F10C016F -+:10D8C0000E3010F0F1FA21680320087021683088CA -+:10D8D000488085F82F70E3E40C2085F82F00DFE402 -+:10D8E00070B5314D04460C26287828B1BDE870404B -+:10D8F00018210F2000F07ABB08F056FE03284BD009 -+:10D9000008F058FE032847D0A07908B101282DD18E -+:10D91000607928B1012803D0022801D0032825D13D -+:10D92000A07B28B1012803D0022801D003281DD1F3 -+:10D93000607BD8B1C00819D162884FF48040824220 -+:10D9400002D82188814203D9207901280ED118E01C -+:10D95000207930B1012814D0022805D0032805D140 -+:10D9600002E0202A0BD30CE0A0290AD22079042857 -+:10D9700005D12088202802D36188884201D9122647 -+:10D980000AE0607906F010FA30B1207985F83600A7 -+:10D99000204606F073FA064601202E7168711821A0 -+:10D9A000E9702870A5E400000C0600204800002063 -+:10D9B00010B5FE4C217829B11A21BDE810400F2086 -+:10D9C00000F014BB01781F2902D91220207106E053 -+:10D9D000002121710278411C104606F0C6FA012090 -+:10D9E00060711A21E170207010BD10B5EF4C2178E4 -+:10D9F00029B12021BDE810400F2000F0F7BA0178CE -+:10DA00001F2902D91220207106E00021217102781D -+:10DA1000411C104606F098FA012060712021E17047 -+:10DA2000207010BD2DE9FC41E04C217829B1BDE802 -+:10DA3000FC411B210F2000F0D9BA012767710C218E -+:10DA4000217100780026012804D0002879D0122006 -+:10DA5000207190E006F072F9002819D006F0B7F9AD -+:10DA600094F83600A8B1012813D0042811D008F08A -+:10DA7000A1FD00287FD108F097FD18B108F094FDB2 -+:10DA8000022878D1002009F099F900B1FFDF267152 -+:10DA900071E008F089FD00286DD108F08BFD0028A9 -+:10DAA00069D106F0D6F8A0F57F41FF3963D107218F -+:10DAB00001A801F0C7F8BE4905468860280000D1DA -+:10DAC000FFDF032128460DF00BFE284606F081FB00 -+:10DAD00034F8540FA5F8440034F80409A5F84600BA -+:10DAE000E278A17828460EF043FA01460022284643 -+:10DAF0000EF077FA6078009014F8043B288834F828 -+:10DB000054190A4601F07BF980B1042800D0FFDFE8 -+:10DB10002888072101F0D7F800B1FFDF0720207126 -+:10DB200005F58C712846FFF7FBFB24E0288805F0FB -+:10DB300051FF284609F042F900B1FFDF2671EFE7F7 -+:10DB4000FFE708F031FD032803D008F033FD032878 -+:10DB500011D108F02CFD0546002009F052F850B90B -+:10DB6000267145B1288805F036FF2888072101F085 -+:10DB7000AAF800B1FFDF1B20E0702770BDE8FC8130 -+:10DB80002DE9F041894C0646207828B1BDE8F041E6 -+:10DB90002D210F2000F02ABA3088072101F081F8EA -+:10DBA00005004FF0010720D095F8F90040B995F82D -+:10DBB0005C00112801D0122802D195F8360150B12D -+:10DBC0000C2020710F20A0702D20E0703088E080A4 -+:10DBD000677127706CE51022B11C05F1FA0010F096 -+:10DBE00063F985F8F9700020EBE70220E9E770B5EA -+:10DBF0006E4C0546207828B1BDE870402E210F20DC -+:10DC000000F0F4B92888072101F04BF8022178B11F -+:10DC100090F8F9202AB990F85C20112A04D0122A31 -+:10DC200002D00C20207104E080F8F9100020F9E700 -+:10DC300021710F20A0702E20E0702888E080012044 -+:10DC400060712070E4E52DE9FC47584C06462078C9 -+:10DC500028B138210F2000F0C9F9BDE8FC87708891 -+:10DC60004BF68032122190420AD848B14FF000089A -+:10DC700030886946FEF7A7FB20B10220207110E032 -+:10DC800021710EE0019800F15009851C2F887288DF -+:10DC9000394648460DF01AFD2888B842F6D184F876 -+:10DCA0000480012060713821E1702070D5E77CB5D7 -+:10DCB0003E4C0546207820B145210F2000F096F912 -+:10DCC0007CBD28886946FEF77EFB38B102202071B2 -+:10DCD000012060714521E17020707CBD01987F2298 -+:10DCE000014680F8582080F85920002280F85A20F8 -+:10DCF000A87801F8280FE878487028798870227190 -+:10DD0000E6E71CB5294C217821B113210F2000F042 -+:10DD10006DF91CBD00886946FEF755FB08B102206D -+:10DD200005E0019890F82810012902D00C202071FC -+:10DD300006E0582100222271095C21720088E080EF -+:10DD4000012060711321E1700F21A17020701CBDB2 -+:10DD50002DE9F041154C0546207828B1BDE8F04189 -+:10DD600043210F2000F042B9A87808B1012803D15F -+:10DD7000A888B0F5FA7F01D91220207128880721E0 -+:10DD800000F08FFF0126C8B1002780F8F070A98845 -+:10DD9000A0F8F21080F8CC60A978012900D0002109 -+:10DDA00080F8F01090F8CD0030B103E00C060020B0 -+:10DDB0004800002009F04EF9277101E0022020718F -+:10DDC00066714320E070267072E42DE9F041CF4C7B -+:10DDD0000546207828B1BDE8F04148210F2000F029 -+:10DDE00005B92888072100F05CFF012358B3828819 -+:10DDF0006D88C688418803EB4207BD4217D342F2C3 -+:10DE000010777E43BF107943B6FBF1F1491E89B20A -+:10DE10004FF4FA76B14200D931468D4200D22946FC -+:10DE2000491C521CB1FBF2F15143491E8AB290F8D1 -+:10DE3000221101B90284E280002020716371482020 -+:10DE4000E070237034E40220F7E770B5AF4C05466C -+:10DE5000207828B1BDE8704041210F2000F0C6B8FD -+:10DE600008F0A2FB08B10C2017E0297889B10A2933 -+:10DE70000FD014290DD01E290BD0282909D0322902 -+:10DE800007D04B2905D0642903D0FF2901D01220E7 -+:10DE900003E0284609F04FF800202071012060714E -+:10DEA0004121E1702070B3E498490A781AB14D21FC -+:10DEB0000F2000F09BB8427862B1827852B1C278EC -+:10DEC00042B1027932B1C2881B2A03D303781BB155 -+:10DED000012B01D0122007E0A1F854200278D0F8DD -+:10DEE000010042B1086500200871012048714D22EF -+:10DEF000CA7008707047C864F5E770B5834C054672 -+:10DF0000207828B1BDE870404E210F2000F06EB897 -+:10DF1000287800F0010008F019F9287800F00100D5 -+:10DF200009F061F800202071012060714E21E1703C -+:10DF300020706DE470B5754D0446287828B1BDE8B1 -+:10DF400070404B210F2000F051B800F05CF808B190 -+:10DF50000C200DE0601C0DF063FA207800F0010049 -+:10DF600005F031FF207800F0010006F0FFFE0020F0 -+:10DF70002871012068714B21E970287048E470B560 -+:10DF8000624C0546207828B1BDE8704049210F2039 -+:10DF900000F02CB808F008FB10B908F00BFB08B132 -+:10DFA0000C2003E0287805F0F0FF0020207101200C -+:10DFB00060714921E17020702AE410B501784F2981 -+:10DFC00007D2534A52F8211019B1801C884701200A -+:10DFD00010BD002010BD18B1022801D001207047EB -+:10DFE00000207047C000703080B27047474A92F8F6 -+:10DFF0003130002B06D182F8320082F83310012034 -+:10E0000082F83100704710B508F011FA04280DD0DD -+:10E0100008F00DFA052809D008F0C6FA032805D043 -+:10E0200008F0C8FA032801D0002010BD012010BD5F -+:10E0300090F8691041B990F8C01029B190F8C0006B -+:10E04000042801D001207047002070470178406803 -+:10E0500021B190F8690010B100207047E8E7012075 -+:10E0600070470178012909D1406890F8CD10002946 -+:10E0700004D0002180F8CD1008F0ECBF704710B537 -+:10E08000038843F6FD711A1F8A4223D24288141F67 -+:10E090008C421FD29A421DD8C28940F67B43911F01 -+:10E0A000994217D2018A8C1F9C4213D28A4211D8FE -+:10E0B000428AB2F5FA7F0DD2828A40F67744A2F105 -+:10E0C0000A03A34206D2B2EBD10F03D9C18A028B55 -+:10E0D000914201D9302010BD017911B1012910D12F -+:10E0E00007E0417929B1012903D0022901D0032990 -+:10E0F00007D1007B38B1012805D0022803D00328BE -+:10E1000001D0122010BD002010BD00000C06002020 -+:10E110009CE301003F3070470844C01D424301F1B9 -+:10E120003F00104480B2704770B51D460446A818E1 -+:10E13000049BC01D00FB03F205F13F00104486B2B2 -+:10E14000B14238BFFFDF1E2120460FF024FFA6F1A9 -+:10E150001E0080B2A5756080B0F5004F88BFFFDF5C -+:10E16000608805F13B01884238BFFFDF6088401BB3 -+:10E17000A0F13B011B2934BF1B203B38208070BD20 -+:10E18000408870472DE9F04F0D46C188044600F1E4 -+:10E190001E08008921F4004320F4004221F40046C7 -+:10E1A00020F400474FF0010A4FF000099A4208D1CD -+:10E1B00000F4004001F4004188421CBF0020BDE88B -+:10E1C000F08FB7420BD9A17DB81B401AC01F854202 -+:10E1D0001BDC08EB06000021058041801EE0608802 -+:10E1E000A17D801B401AB0F1070B0ED4BBF11B0FB1 -+:10E1F000B8BFFFDF5D45D4BF29461FFA8BF1681A0F -+:10E200000204120C18BFBA4204DD84F814900020F6 -+:10E21000BDE8F08F08EB06000180428084F814A06E -+:10E22000BDE8F08F2DE9F041044600F11E02C088E0 -+:10E2300020F40043207D002808BFBDE8F081D018FD -+:10E240000288438813448B423CBF0020BDE8F08124 -+:10E25000002791429CBF0180478013D9891A0D0481 -+:10E260002D0C45800ED0E088A61D20F4004085428C -+:10E2700088BFFFDF30884FF4004121EA00002843C7 -+:10E28000308009E0A27D0088D31D1044C01D81B2FA -+:10E290006288A01D00F044FB27750120BDE8F081D5 -+:10E2A00030B4B0F804C0C488034600F11E052CF455 -+:10E2B00000402844A44503D10020188230BC704798 -+:10E2C000B3F80CC00488A44509D34088ACEB040C17 -+:10E2D000A0EB0C0084B20CEB0500C01E06E0A4EB22 -+:10E2E0000C049D7DA4B2AC446044001DB1F800C094 -+:10E2F000A44588BF0C80B3F80CC0BCF1000F0CBF64 -+:10E300004FF0010C4FF0000C82F800C00988198210 -+:10E3100030BC70472DE9F041044600F11E018088B1 -+:10E3200020F400404518208A002808BFBDE8F0818D -+:10E33000A189084480B2A08129886A881144814259 -+:10E3400038BFFFDF28886D88A289411900279142D4 -+:10E3500019D175B1A088261D20F40040A84238BF0D -+:10E36000FFDF30884FF4004121EA0000284330806D -+:10E3700008E0A27D1044C01D81B2D31D6288201D1B -+:10E3800000F0CEFAA78127820120BDE8F0812DE9B7 -+:10E39000F0474189B0F804800027044600F11E0AC6 -+:10E3A000414518BF4FF400493AD000BF21F4004066 -+:10E3B000504446886EB1608904F10A0520F400409B -+:10E3C000B04238BFFFDF288829EA000030432880A8 -+:10E3D00021E0A37D008803F1070C18446389C01D68 -+:10E3E00023F400456288284480B204F10A01904277 -+:10E3F0000BD2121A92B20CF11B0C62452CBF03F423 -+:10E40000004229EA030004D204E0801A80B229EA1B -+:10E41000030210430880781C618987B24145C5D149 -+:10E420003846BDE8F0872DE9F047B0F808800B4684 -+:10E43000044600F11E01B0F80A90808828F4004CD0 -+:10E4400001EB0C05804504BF0020BDE8F087002AE1 -+:10E450001CBF281D106023B1A27D291D18460FF096 -+:10E4600023FD2F886D888DB1E81987B2208904F1CA -+:10E47000080620F40040A84238BFFFDF30884FF480 -+:10E48000004121EA00002843308009E0A07D628835 -+:10E49000C119C91DC31D89B204F1080000F040FA7A -+:10E4A000C84504BF208960813846BDE8F08781886F -+:10E4B000C08881420CBF01200020704781880089FC -+:10E4C00088420CBF01200020704730B48488C28885 -+:10E4D00000F11E0324F4004C22F4004163449442F2 -+:10E4E0001BD08289048A15191C885A88A3189D425A -+:10E4F00016D312B18A4210D212E0837D0CF1070CC0 -+:10E500001A196244408892B2801A80B2223398422B -+:10E5100001D211B104E08A4202D130BC0020704720 -+:10E5200030BC012070472DE9F007B0F806C004891F -+:10E5300000F11E0702462CF400457E1924F4004920 -+:10E540002CF4004A002024F400434FF00108D14588 -+:10E550000AD104F400440CF4004C644504D0508209 -+:10E56000BDE8F00700207047AB4207D992F816C00B -+:10E570005B1BA3EB0C03DC1F002308E0B2F802C016 -+:10E58000947DACEB050CACEB040CACF10704002C57 -+:10E59000E5DBB2F80EC0BCF1000F0DD0B6F800C03C -+:10E5A00075884DB15B1B50758B42D8DBD0893844E0 -+:10E5B000A0EB0C00C01E09E0A4EB0C0450758C42CB -+:10E5C00008DB907DD38918443044001D5182BDE89A -+:10E5D000F00770478B42A8BF82F81580E6DABEE7E5 -+:10E5E0002DE9F05F044600F11E0AC088934620F42E -+:10E5F00000400AEB0005608A894608B1484502D20E -+:10E600000020BDE8F09FE089002804BF4FF000081B -+:10E61000464607D0B5F800806E8808EB06018842B0 -+:10E6200018BFFFDF607D4FF0000750EA060101D000 -+:10E6300048B332E0E08938B1A17D01444819B4F80B -+:10E6400017108180617E8171E18908EB09004944DE -+:10E65000E18128806F80BBF1000F0BD0A07D29885D -+:10E66000C31D0144C91D89B26288A01D00F058F97C -+:10E67000E78137E0A07DE189084428448188A4F837 -+:10E68000171080792DE0E089B4F817105044A0EB02 -+:10E69000080020F8031D617E817006EB090086B238 -+:10E6A000E089BBF1000F4844E081A5F800806E804E -+:10E6B0000ED0E088A51D20F40040B04238BFFFDF37 -+:10E6C00028884FF4004121EA000030432880CFE73A -+:10E6D000E0895044A0EB080030F8031DA4F817109F -+:10E6E00080786076678227750120BDE8F09F01463B -+:10E6F0001E308A88CB8822F4004C60449A4203D0B2 -+:10E700008989002908BF70470020704700F11E0367 -+:10E71000807D01F1040C604410600888002804BF6B -+:10E72000D81E106008884988084480B270472DE9D7 -+:10E73000F04115460A4600F11E061C46807D131D59 -+:10E74000034410885788069900281CBFC01C80B25B -+:10E7500026D088429CBF081A80B213D9401AA04222 -+:10E76000A8BF20461FFA80F85818424629460FF0E5 -+:10E770006FFB002818BFBDE8F0814544A4EB0800FA -+:10E7800084B2002001198F423CBF4FF0FF30BDE83A -+:10E79000F081304422462946BDE8F0410FF058BBD5 -+:10E7A000FA1C97B2F61ED4E72DE9F04100F11E07DE -+:10E7B0001D46807D0B1D0344164608880024B1F8D1 -+:10E7C0000280069A00281CBFC01C80B21FD0904255 -+:10E7D0009CBF101A80B20DD9801AA842A8BF284643 -+:10E7E00084B29918224630460FF05EFB281B85B292 -+:10E7F000264400204119414506D839182A4630469A -+:10E800000FF052FB601984B22046BDE8F08108F198 -+:10E8100003011FFA81F8FF1ED9E72DE9F0411646E2 -+:10E820000A4600F11E071D46807D131D0344108813 -+:10E830000024B2F80280069900281CBFC01C80B2D8 -+:10E840001FD088429CBF081A80B20DD9401AA84236 -+:10E85000A8BF284684B25818224631460FF024FB40 -+:10E86000281B85B2264400204119414506D838446A -+:10E870002A4631460FF018FB601984B22046BDE8E5 -+:10E88000F08108F103021FFA82F8FF1ED9E770B584 -+:10E89000044600F11E01C288808820F40043194418 -+:10E8A000904205D0A289002A04BF228A002A01D002 -+:10E8B000002070BDB1F800C04D8885B1261D20F440 -+:10E8C0000040A84238BFFFDF30884FF4004121EA02 -+:10E8D00000002843308000202082012070BDA07DF0 -+:10E8E0000CF10701C31D084481B26288201D00F0AD -+:10E8F00017F8F0E70021C181417541820175704729 -+:10E9000003881380C289002A04BF00207047C28890 -+:10E9100000F11E0322F400421A440A60C0897047C5 -+:10E9200010B4B0F800C02CF40044214489B24FF474 -+:10E93000004491420AD2521A92B21B339A422CBF1F -+:10E940000CF4004224EA0C0104D204E0891A89B2D2 -+:10E9500024EA0C021143018010BC70472DE9F041FC -+:10E9600088464FF6FC7102F103021E46040002EADB -+:10E97000010509D00027E01C20F00300A04200D0D0 -+:10E98000FFDF201D01210CE00127F4E702462844A7 -+:10E990002FB9B14201D2034600E000231360491CA5 -+:10E9A000C9B2B142F2D9011BC8F80010002F04D13E -+:10E9B0000EB1201D00E000202060BDE8F08102467D -+:10E9C00000201168002902D00846096811607047CC -+:10E9D00002680A60016070474FF6FC73C91C194059 -+:10E9E000101A001F90FBF1F0C0B270474FF6FC7395 -+:10E9F000C91C1940001D01FB02007047F8B5D24D3B -+:10EA000004460E46A878A04200D8FFDF05EB860733 -+:10EA1000B86A50F8240000B1FFDFB868FFF7CFFFF5 -+:10EA200005000DD0B86A062E40F824500AD0082EF2 -+:10EA300000D3FFDFC548294650F8262020469047DE -+:10EA40002846F8BDC048C24B7A30A0F12E02009093 -+:10EA50002946204609F0A0FCF2E72DE9F84F804650 -+:10EA6000DDF828901E4603EB090093468A46C4B29F -+:10EA70005FEA080707D00025FF2800D9FFDFBAF1B9 -+:10EA8000000F03D101E00125F6E7FFDF08F10300E5 -+:10EA900020F00301414500D0FFDFCB4500D9FFDF67 -+:10EAA00065B9A94A00204C324FF6FF7110705180B1 -+:10EAB000A74A1070A44A7A3210705180A24880F898 -+:10EAC00000B046708470C4700471447180F8069080 -+:10EAD000DFF878B2C67100260BF1400B8146FF1CAF -+:10EAE00027F003000746002D02D109EB860188605C -+:10EAF0003BF8162019F8063001D04FF000006946A7 -+:10EB0000FFF72CFF0098761CF6B20744082EE6D3D8 -+:10EB1000FF1C27F003002346064675B100200222A1 -+:10EB20006946FFF71BFF00983118002003464E4648 -+:10EB3000C91C21F003021DB110E0C9F84800EEE73E -+:10EB400006EB80070021BA6206E000BFD7F828C0B4 -+:10EB50004CF82130491CC9B2A142F7D3401CC0B2C5 -+:10EB600002EB84010828E3D3A1EB0800AAF8000017 -+:10EB70000020BDE8F88F10B5044603F005FF08B18A -+:10EB8000102010BD2078704A618802EB80009278D6 -+:10EB90000EE0836A53F8213043B14A1C6280A180A1 -+:10EBA000806A50F82100A060002010BD491C89B285 -+:10EBB0008A42EED86180052010BD70B505460C462E -+:10EBC000084603F0E1FE08B1102070BD082D01D306 -+:10EBD000072070BD25700020608070BD0EB56946AD -+:10EBE000FFF7EBFF00B1FFDF6846FFF7C4FF08B196 -+:10EBF00000200EBD01200EBD10B50446082800D32C -+:10EC0000FFDF5148005D10BD3EB505460024694652 -+:10EC1000FFF7D3FF18B1FFDF01E0641CE4B26846E0 -+:10EC2000FFF7A9FF0028F8D02846FFF7E5FF001BF3 -+:10EC3000C0B23EBD44498978814201D9C0B2704713 -+:10EC4000FF2070472DE9F0410C460546062901D00A -+:10EC5000072C10D13C4FB86CFFF7B1FE02004FF605 -+:10EC6000FF7604D00221B86CFFF7B6FE00E0304614 -+:10EC70002880B04202D10020BDE8F0812146FFF794 -+:10EC8000BDFE040002D1288800F050F82046F3E7CA -+:10EC9000A0F57F42FF3A01D0082901D30020704738 -+:10ECA000ACE6A0F57F42FF3A0BD0082909D2264AEC -+:10ECB0009378834205D902EB8101896A51F82000DB -+:10ECC0007047002070472DE9F04104460D46A4F539 -+:10ECD0007F4143F20200FF39CED0082D01D3072037 -+:10ECE000CAE719494FF000088A78A242C4D901EB5B -+:10ECF00085072146BA6A52F82460002EBCD0134A18 -+:10ED000008462032314652F825209047B96A062D30 -+:10ED100041F8248001D0072D02D1204600F006F8EA -+:10ED20003146B868FFF754FE0020A5E710B5064C41 -+:10ED3000C2B20221A06CFFF759FE0146A06CBDE8EB -+:10ED40001040FFF745BE000068060020D8E401002F -+:10ED50005400002001469F48002200680260037AA8 -+:10ED600000EB830040F80C2F8180114600F022B99F -+:10ED70002DE9F05F9846DDF830B0DDF828A01546A3 -+:10ED8000894604004FF0000623D00027E01C20F045 -+:10ED90000300A04200D0FFDF65B30120FFF7BAF9FE -+:10EDA00000FB05620AEBCB0016180120FFF7B2F951 -+:10EDB00000FB05620B9805EB450108EBC000104411 -+:10EDC00000EB4100143000EB850000EB850617B125 -+:10EDD00010E00127DAE77F48A6EB8507A900046069 -+:10EDE000257204F10C000C3F60600FF0F6F8B8B229 -+:10EDF000FFF7B0FF0020C9F80060BDE8F09F2DE9E3 -+:10EE0000FF4F744C814681B020689A468B4600B90A -+:10EE1000FFDF2068027A4A4503D9426852F8291078 -+:10EE200021B143F2020005B0BDE8F08F006800B9DF -+:10EE3000FFDF01210E9A0398FFF76EF9C61C4FF60B -+:10EE4000FC752E40584601215246FFF765F9C01C5B -+:10EE500000EA050808EB0600001D85B25D480027A2 -+:10EE60000068046801E027460446206838B1A1889C -+:10EE7000A942F8D13946204600F0A4F813E005F184 -+:10EE80000800A18880B2814229D33946204600F08B -+:10EE900099F8A0880022411B6019026081803946E0 -+:10EEA00000F088F8A580A08860802680251D0E9F30 -+:10EEB0000123039A314628460097FFF735F9208849 -+:10EEC000414628445A460123CDF800A0FFF72CF90B -+:10EED000404800684168002041F82940A3E7042029 -+:10EEE000A1E770B53B4C0546206800B9FFDF2068FC -+:10EEF000017AA94210D9426852F8250060B14188D0 -+:10EF0000002342F8253003608180194600F052F852 -+:10EF1000216800200A7A08E043F2020070BD4B68C5 -+:10EF200053F820306BB9401CC0B28242F7D80020A1 -+:10EF300002E08A88104480B209680029F9D1FFF7FD -+:10EF400009FF002070BD70B5224D286800280AD046 -+:10EF5000002404E02046FFF7C4FF641CE4B22868E4 -+:10EF6000007AA042F6D870BD70B51A4E054600244E -+:10EF7000306800B9FFDF3068017AA94204D94068DF -+:10EF800050F8250000B1041D204670BD70B5114E2B -+:10EF900005460024306800B9FFDF3068017AA942D5 -+:10EFA00006D9406850F8251011B131F8040B441807 -+:10EFB000204670BD19B10A680260086070470549B3 -+:10EFC0000968F8E7006809B10860704701490968F5 -+:10EFD000FAE700005C00002070B5044600780E4699 -+:10EFE00001281AD0072802D00C281AD115E0A068F1 -+:10EFF000216905780B2D0CD0052003F05EFC052D52 -+:10F000000FD0782300220520D4F8101003F0B8FBAD -+:10F0100007E0782300220620F8E70520216903F0A5 -+:10F020004CFC31462046BDE8704001F0A7B910B550 -+:10F0300000F13902C3799478411D64F00304234040 -+:10F04000C371DB070DD04B79547923404B710B7999 -+:10F05000127913400B718278C9788A4200D9817085 -+:10F0600010BD00224A710A71F5E74178012900D0EC -+:10F070000C21017070472DE9F74F86B000208C6994 -+:10F080000D468DF8040009780127FA4816464FF01E -+:10F09000070A4FF011094FF00A0B2A2978D2DFE84E -+:10F0A00011F02A00110352036903A803B303CC0330 -+:10F0B000FA030F043B04620481049A04D504E604B5 -+:10F0C000050510053005540577059C05C605E005C6 -+:10F0D000EE050F062706300663068506D6060D07E1 -+:10F0E0001B074B076A0779078A07C407FB0727082E -+:10F0F000E407E807ED0714B120781D2829D0D5F8DA -+:10F1000008805FEA080043D001208DF80400686A97 -+:10F11000059003208DF808008DF809B0286A039047 -+:10F12000A8880028EFD098F8001091B10F2910D2CC -+:10F130007ED2DFE801F07D144CDCFDFCFBFAF9F82F -+:10F14000F7089FF6F500022822D124B120780C2878 -+:10F1500001D0002770E302208DF80400ACE1062006 -+:10F16000696A03F0AAFBA8880728EDD1204601F0C0 -+:10F1700000F9022809D0204601F0FBF8032808D93D -+:10F18000204601F0F6F8072803D20120207005E0A0 -+:10F1900011E2002CB7D020780128D5D198F80400CE -+:10F1A000C11F0A2903D300BF85F81CB089E2A070F3 -+:10F1B000D8F80010A163B8F80410A18798F80600E9 -+:10F1C00084F83E00012028700320207046E00728C4 -+:10F1D000BAD1002C97D020780D28B5D198F803101B -+:10F1E00094F83B20C1F3C000C2F3C002104201D02A -+:10F1F0000E2000E00F20890707D198F80510014282 -+:10F20000D2D198F806100142CED194F83D2098F85A -+:10F21000051020EA02021142C6D194F83E2098F867 -+:10F22000061090430142BFD198F80400C11F00E0CE -+:10F2300045E20A29B8D2617F814201D90620C2E3A2 -+:10F24000D8F800106160B8F80410218198F8060021 -+:10F25000A072012028700E20207003208DF8040079 -+:10F26000686A059004F139000290601D0390173020 -+:10F27000049067E2412890D1204601F07AF80428F2 -+:10F2800002D1E078C00704D1204601F072F80F28BF -+:10F290009ED1A88CEF6880B24FF0400AD4F8248049 -+:10F2A000FFF762FE39460827424653460097FFF7AC -+:10F2B0007BFA0E208DF80400686A0590606A02905F -+:10F2C000002101A8FFF788FE2078042806D0A07F3F -+:10F2D00038B1012805D0032806D0AEE30520207000 -+:10F2E0000BE284F8009034E71220207066E01128C9 -+:10F2F000C1D1204601F03DF8042802D1E078C007D2 -+:10F3000019D0204601F035F8062805D1E078C0076D -+:10F3100011D1A07F02280ED0204601F02AF808E083 -+:10F32000AFE07DE09AE16EE14EE106E1E5E0CBE0A1 -+:10F330001CE011289FD1102208F1010104F14800BE -+:10F340000EF0B2FD607801280DD012202070E07818 -+:10F35000C00703D0A07F88B301282FD085F800B064 -+:10F360008DF804B0F0E384F800A027E011288FD1D5 -+:10F37000204600F0FEFF082804D0204600F0F9FFE8 -+:10F38000132885D12869D8B16869C8B104F178001B -+:10F39000102208F1010107460EF086FD20780828AA -+:10F3A00012D014202070E078C0070FD0A07F022870 -+:10F3B00018D06178022912D00328CFD10420FDE3B0 -+:10F3C00000208DF80400F6E00920EBE70B20287000 -+:10F3D000296901204870206CC1E9010792E208B157 -+:10F3E000012870D10B202870296981F801A0606A7A -+:10F3F0004860206AC1E9020778E2206CE278006880 -+:10F40000C2F34402521ED04000F0010040F08000E0 -+:10F4100000E000200874E06A48617CE20746F9E3F6 -+:10F420001128D0D1204600F0A4FF0A2802D1E078AC -+:10F43000C00704D1204600F09CFF1528C3D110223C -+:10F4400008F1010104F148000EF02EFD20780A2891 -+:10F4500012D01620207012202870296909204870C7 -+:10F4600004F158004860203088601038C860206C73 -+:10F470000861ACE314E601000B202070E4E2287080 -+:10F48000D9E102289FD1204600F073FF042804D35D -+:10F49000204600F06EFF082809D3204600F069FFDF -+:10F4A0000E2890D3204600F064FF12288BD2A07F54 -+:10F4B000022888D18DF80490686A059098F80100B8 -+:10F4C0008DF80800FBE36CE20228AAD1204600F088 -+:10F4D00050FF00286FD0204600F04BFF0128F9D0E4 -+:10F4E000204600F046FF0C28F4D005208DF80800D7 -+:10F4F00098F801008DF8090065E71128FCD1002C6F -+:10F50000FAD020781728F7D16178E06A022912D062 -+:10F510005FF0000101EB4101182606EBC10110224A -+:10F52000405808F101010EF0BFFC0520696A00F0A7 -+:10F5300013FF26700DE60121ECE70B28DCD1002C2F -+:10F54000DAD020781828D7D16178E06A02292CD047 -+:10F550005FF0000101EB4101102202EBC1014158B3 -+:10F56000B8F8010008806078E16A022820D0002005 -+:10F5700000EB4002142000EBC2000958404650F84E -+:10F58000032F0A60406848600520696A00F0E4FEC5 -+:10F590006078022810D04FF000002044407A20F01C -+:10F5A00001000CD14FF001010BE04FF00101D1E758 -+:10F5B0004FF00100DCE77FE24FF00100EDE74FF094 -+:10F5C00000012144487279E3112895D1002C93D091 -+:10F5D0002078192890D16078E16A022811D00020A3 -+:10F5E00000EB40021C2000EBC2001022085808F17A -+:10F5F00001010EF059FC0520696A00F0ADFE1A20E9 -+:10F60000F5E00120ECE7082898D1002C98D020786C -+:10F610001A2893D1E06A98F80120017862F3470133 -+:10F620000170E16AD8F8022041F8012FB8F806000D -+:10F6300088800520696A00F08FFE6078022807D074 -+:10F640004FF000002044407A20F002012BD033E03C -+:10F650004FF00100F6E7204441722FE31128B4D1A6 -+:10F66000002CB4D020781B28AFD16178E06A022941 -+:10F670001CD0002101EB4101202202EBC10110222C -+:10F68000405808F101010EF00FFC0520696A00F0F6 -+:10F6900063FE607802280CD04FF000002044407ACE -+:10F6A00020F0040108D14FF00100D4E74FF0010130 -+:10F6B000E0E74FF00100F1E74FF00000CBE785F8FD -+:10F6C0001CA0FAE33078012884D11C2204F11C002C -+:10F6D00071680EF02EFCE079C10894F83B0001EA55 -+:10F6E000D001E07861F30000E070217FF1BB217868 -+:10F6F00003290AD0C0073FF4F9AD032028708DF824 -+:10F7000004B0686A059041209EE3607FA17888423A -+:10F710003FF694AD02272771E179204621F0E00100 -+:10F72000E171617A21F0F0016172A17A21F0F001BA -+:10F73000A172FFF77CFC2F708DF804B0686A059009 -+:10F740008DF808A0F2E33078112888D18DF804A054 -+:10F75000696A0591B1680391ADF808A0084661682F -+:10F76000016021898180A17A817100E06AE0042032 -+:10F770002070A4E230781128A6D18DF804A0686A20 -+:10F780000590301D02AB07C883E807004120ADF8A3 -+:10F79000080008460C210170A88CD6F80C8080B2B5 -+:10F7A0004027D4F82090FFF7F1FB41464FF00808BE -+:10F7B0004A463B46CDF80080FFF72FF8002101A80C -+:10F7C000FFF70AFCE07820F03E00801CE070207813 -+:10F7D000052801D00F200AE0A07F00283FF4C3AD28 -+:10F7E0000128FBD003287DD184F80080B1E420708B -+:10F7F000AFE430780328A8D170680168A16640683A -+:10F80000E0660520287035E2317803299DD17168C2 -+:10F810000A68226749686167216C51B9A17F19B1F3 -+:10F82000012901D0062029E185F800A02064606448 -+:10F8300001E085F800A00327F3E33178022984D1A1 -+:10F84000317909B1297737E1A17F022910D0032945 -+:10F85000EFD16178012910D0A17994F83A200129DB -+:10F860000FD02064E178C90713D0012A0ED010E030 -+:10F87000B0680028E7D020640BE0A27994F83A1031 -+:10F88000EDE7B1680029DED02164EBE7F0680028DD -+:10F89000D9D06064CDE78DF804B0696A0591E1784C -+:10F8A0005846C90709D06178022903D1A17F29B13F -+:10F8B000012903D0A17F032900D00820287012E27B -+:10F8C00030781128BFD1B068286209202870E0780C -+:10F8D0002969C0070FD081F801A0206A4860606ADA -+:10F8E000886000E0ABE004F16800C860A07F0228F7 -+:10F8F0007FF48FAD81E501204870206C486004F1F1 -+:10F900006800886004F13800C860201D0861206B21 -+:10F910004861606B88611FE2E1783078C90701D0E7 -+:10F92000062100E00A2188428DD12078072817D0CF -+:10F9300084F800908DF804A0686A0590286A039006 -+:10F94000ADF80890032100F8011B102271680EF039 -+:10F95000ABFA002101A8FFF73FFB00202862C2E4B8 -+:10F9600008202070E6E730781128ABD18DF804A08C -+:10F97000686A0590B0680390ADF80890042100F81B -+:10F98000011B102204F168010EF08EFA002101A87B -+:10F99000FFF722FB2078092801D0132027E784F8FD -+:10F9A00000B016E0E1783078C90701D0062100E008 -+:10F9B0000A21884286D1102204F1480071680EF0B5 -+:10F9C00047FA10B104202877A2E3207809283FF4F1 -+:10F9D000C5AC0C2053E5E078C10735D0A17F0129E3 -+:10F9E00002D002291BD02CE00D202870296981F853 -+:10F9F00001B06078012809D0206A4860606A886098 -+:10FA000004F16800C8601030086104E5606A48606D -+:10FA1000206A886004F17800C8601038F4E7C0F309 -+:10FA2000440114290DD24FF0006101EBB0104FEAF0 -+:10FA3000B060E0706078012801D0102055E4062005 -+:10FA4000D5E6607801288AD00E2018E5307809289C -+:10FA50008BD185F800B010208DF80400686A0590FD -+:10FA600070680290002101A8FFF7B6FAE9E7E07894 -+:10FA7000C00706D0A07F01281FD10F2028700420C6 -+:10FA8000F8E015202870296902204870206C486031 -+:10FA90006078012805D004F1780088601038C860CB -+:10FAA0005AE104F1680088601030F8E730780228E5 -+:10FAB000CED1307908B1287728E3102028700F20A4 -+:10FAC000D8E030781328F7D185F80090296908200C -+:10FAD000487070684860607801280DD004F16800B3 -+:10FAE00088601030C860206B0861606B486104F169 -+:10FAF00058008861A06A21E004F17800886010381D -+:10FB0000F0E730780728D7D1607801281AD1A0789B -+:10FB1000A16A0A18C0F1100110460EF03CFA12203A -+:10FB2000287029690920487004F158004860203085 -+:10FB300088601038C860206C086141E0C861E06AE4 -+:10FB4000086209E11320C9E0CBE030780828B3D17E -+:10FB5000102204F1480071680EF07AF908B10B2008 -+:10FB600031E720780B28EDD02046FFF760FAA07827 -+:10FB7000A16A0A18C0F1100110460EF00CFA162006 -+:10FB8000287008208DF80400686A0590002049E07C -+:10FB90003078112890D1B068286214202870296923 -+:10FBA0000920487004F15800486010308860103017 -+:10FBB000C860606C08616078012800E09EE006D0B3 -+:10FBC00004F139004861206B8861606BB6E7601D05 -+:10FBD0004861606B8861206BB0E73078082892D16B -+:10FBE0008DF804A0686A0590286A0390ADF8089023 -+:10FBF0000D2100F8011B102271680EF055F900214B -+:10FC000001A8FFF7E9F9002028626178012902D0F4 -+:10FC10001520ECE569E21621297008218DF8041001 -+:10FC2000696A05910290A0788DF80C007EE1307829 -+:10FC30000B288CD1162028706078022802D120462B -+:10FC4000FFF7F5F9A07871680A18C0F110011046A5 -+:10FC50000EF0A1F908208DF80400686A059070681C -+:10FC6000E0E730780F2895D1E079C0077BD01720E6 -+:10FC7000287009208DF80400686A059056E13078F4 -+:10FC8000102887D11422311D04F11C000EF051F907 -+:10FC9000E16A208DA1F80900E16AA078C871E179D4 -+:10FCA000E26A01F003011172E16A627A0A73E16AA1 -+:10FCB000A07A81F824006078012876D0B3E13EE292 -+:10FCC0006078022801D0012000E000202044407A22 -+:10FCD000C0070BD0E078C00708D1192028708DF834 -+:10FCE00004B0686A05908DF808901FE11E2071E647 -+:10FCF0003078112874D1B06828621A202870052045 -+:10FD0000B8E7307803286BD16078E26A022801D026 -+:10FD1000012000E0002000EB4001142000EBC101B5 -+:10FD20005158726813680B6052684A601B21297031 -+:10FD3000D5E9041205234B70636A4B606778E36A68 -+:10FD4000022F01D0012700E0002707EB470700EB57 -+:10FD5000C7001858C1E90202686A4862069800F0B4 -+:10FD600024FBFFF75BBB87E130780E2838D1607841 -+:10FD7000E26A022801D0012000E0002000EB4000F0 -+:10FD8000102101EBC00002231058093271680CF0F9 -+:10FD90006DFC1C202870296904204870206A486086 -+:10FDA000E06A09308860F84879E65AE130780D2831 -+:10FDB00016D16178E06A022901D0012100E000211A -+:10FDC00001EB4101182707EBC101A2784058716887 -+:10FDD0000EF06AF86178E06A022902D0012101E0A0 -+:10FDE000A9E0002101EB410107EBC1014058A178D6 -+:10FDF0000844C1F110010EF0CEF88DF804A0686A35 -+:10FE00000590286A0390ADF8089006210170627889 -+:10FE1000E16A022A01D0012200E0002202EB420244 -+:10FE200007EBC202401C895810220EF03DF8002159 -+:10FE300001A8FFF7D1F8002028621D2028708DF856 -+:10FE400004B0686A05900B208DF808006EE03078E9 -+:10FE5000112870D18DF804A0686A0590B0680390ED -+:10FE60000B20ADF80800039880F800A06278E16AE2 -+:10FE7000022A01D0012200E0002202EB42021023FC -+:10FE800003EBC20289580988A0F801106178E26A80 -+:10FE9000022901D0012100E0002101EB41031421DE -+:10FEA00001EBC30151580A6840F8032F49684160CB -+:10FEB000002101A8FFF790F818E729E160780228EF -+:10FEC00001D0012000E000202044407A800701D5C5 -+:10FED0001F2003E721207DE5307811282BD18DF8F4 -+:10FEE00004A0686A0590B0680390ADF808900827F0 -+:10FEF00007706178E26A022901D0012100E0002147 -+:10FF000001EB41031C2101EBC301401C515810229D -+:10FF10000DF0CAFF002101A8FFF75EF8202028702D -+:10FF20008DF804B0686A05908DF80870314601A814 -+:10FF3000FFF752F815E775E03078112872D18DF887 -+:10FF400004A0686A0590B06803900820ADF8080026 -+:10FF5000039809210170E169097849084170E16954 -+:10FF600051F8012FC0F802208988C180002101A822 -+:10FF7000FFF732F8AEE76078022801D0012100E0F7 -+:10FF800000212144497A490701D52220A6E601280B -+:10FF900049D068E03078112844D1B0682862232025 -+:10FFA0002870296904204870206A4860E06A093096 -+:10FFB0008860764873E530780D2833D16178E06A3F -+:10FFC000022901D0012100E0002101EB410120279D -+:10FFD00007EBC1011022405871680DF065FF8DF8E4 -+:10FFE00004A0686A0590286A0390ADF8089080F82C -+:10FFF00000B06278E16A022A01D0012200E000220A -+:020000040001F9 -+:1000000002EB420207EBC202401C895810220DF09D -+:100010004BFF002101A8FEF7DFFF00202862607877 -+:10002000B5E791E037E02420D4E4607802280BD0D3 -+:1000300000202044407AC10702D0E178C90705D0EA -+:10004000810705D51920A9E40120F2E71720A5E4CE -+:10005000400701D51B20A1E41C20207060780128F6 -+:1000600001D01820B6E42720B4E4282028700B2003 -+:1000700000E63078122849D12920ABE42078012805 -+:1000800044D00C2842D02046FEF7EFFF0C208DF81C -+:100090000400686A059039E030784FF0260811288E -+:1000A00005D012203070032785F800804CE08DF8D1 -+:1000B00004A0686A0590B06803900220ADF80800BB -+:1000C000039805210170297F4170002101A8FEF7E6 -+:1000D00083FF0B208DF80400686A0590314601A863 -+:1000E000FEF77AFF074685F80080012F0ED02BE03F -+:1000F00001208DF80400686A059004208DF808003E -+:10010000287F8DF809000020287712E0287F80B131 -+:100110001D202070252028708DF804B0686A059095 -+:1001200002208DF80800314601A8FEF755FF07466A -+:100130000AE00CB1FE2020709DF8040020B10021DF -+:1001400001A8FEF749FF0AE409B03846BDE8F08F80 -+:100150002DE9F04F0C4601274E69097885B090468D -+:10016000BA464FF00209072021B101294ED00229D9 -+:100170001FD1C8E0217901290AD0022915D003290D -+:1001800010D0042915D11BE00CE6010028E5010080 -+:10019000707801280CD10620616A02F067FB002804 -+:1001A00007D11AE01D20307017E07178022901D0C4 -+:1001B000052796E031780C2927D18DF804000EE050 -+:1001C0003078011F042902D30E3803281DD2B07FD6 -+:1001D00002281AD12089022817D38DF8049084F8B8 -+:1001E00000A020899DF80410884203D20A208DF8CF -+:1001F00000003FE01121083488F8001094E80E0058 -+:10020000C8E901120327C8F80C306AE098F800101A -+:10021000112966D18DF80000616A0491D8F8085060 -+:10022000029521794FF00B0B012906D0022929D024 -+:10023000032911D0042954D15AE0ADF8049085F86F -+:1002400000B0207E4F4600F01F0068700021684615 -+:10025000FEF7C2FE377043E0ADF804900520287029 -+:10026000207E68704E4600216846FEF7B5FE267077 -+:100270008DF800B0606A049041466846FEF7ACFE17 -+:1002800007462EE0ADF8040085F800A0207F6870D6 -+:10029000607F00F00100A870A07F00F01F00E870F0 -+:1002A000E17F2971C0071FD094F8200000F00F00F3 -+:1002B000687194F8210000F00F00A87100216846D1 -+:1002C000FEF78AFE2868B063A888B087A87986F808 -+:1002D0003E00A069407870772879B0700D203070AA -+:1002E0000027384605B031E70020A8716871E5E7BE -+:1002F000ADF804900E202870207E687000216846BA -+:10030000FEF76AFEECE7FE2030708DF800A0606A10 -+:10031000049004208DF80400207E8DF80500EDE7A0 -+:1003200000B50023012285B005280FD006280BD187 -+:1003300002208DF8002004918DF804008DF805301E -+:1003400000216846FEF748FE05B000BD8DF800208C -+:1003500004918DF80420F1E770B50C46054602F0D3 -+:10036000ACFA21462846BDE870407823002202F00E -+:1003700007BA08B1007870470C20704770B50C00C0 -+:1003800005784FF000010CD021702146F3F727FAD1 -+:1003900074482178405D884201D1032070BD02205D -+:1003A00070BDF3F71CFA002070BD027B032A05D054 -+:1003B00000220A704B780B2B02D003E00420704718 -+:1003C0000A770A62027B9300521C0273C150032019 -+:1003D0007047F0B585B00F4605460124287B05EB34 -+:1003E000800050F8046C7078411E0C290AD25D49D7 -+:1003F0003A46123101EB8000314650F8043C284661 -+:10040000984704460CB1012C11D1287B401E10F0F6 -+:10041000FF00287301D00324E0E70D208DF80000D1 -+:10042000706A0490002101966846FFF7A7FF032C2D -+:10043000D4D005B02046F0BD70B515460A46044636 -+:1004400029461046FFF7C5FF064674B12078FE28FE -+:100450000BD1207E30B100202870294604F10C0019 -+:10046000FFF7B7FF2046FEF700FE304670BD70472D -+:1004700070B50E46044688210DF0AFFD0225012E11 -+:1004800003D0022E04D0052070BD0120607000E072 -+:1004900065702046FEF7E9FDA577002070BD28B104 -+:1004A000027E1AB10A4600F10C01C5E7012070472F -+:1004B00030B5044687B00D46062002F0FEF9294605 -+:1004C000052002F0FAF92078FE2806D000208DF8E9 -+:1004D000000069462046FFF7E2FF07B030BD7FB558 -+:1004E0000E4600218DF80C1041780B2903D00C2901 -+:1004F00003D0002405E0846900E044690CB1217E4A -+:1005000091B16D4601462846FFF74FFF032809D1F8 -+:10051000324629462046FFF78FFF9DF80C10002930 -+:1005200000D0042004B070BD04F10C05EAE710B55A -+:1005300090B00C4607900B480421801E08900A4892 -+:100540008DF8191009900F92694606A8FFF7C7FFAA -+:10055000002805D11022204601990DF0A5FC0020AD -+:1005600010B010BD2EE501000CE6010070B50D467F -+:10057000040011D085B1210128460DF00CFD102298 -+:100580004E4928460DF090FC4C4801210838018066 -+:1005900044804560002070BD012070BD70B5474E9D -+:1005A00000240546083E10E07068AA7B00EB0410AA -+:1005B000817B914208D1C17BEA7B914204D10C221C -+:1005C00029460DF045FC30B1641C30888442EBDBD9 -+:1005D0004FF0FF3070BD204670BD70B50D4606006F -+:1005E00006D02DB1FFF7DAFF002803DB401C14E032 -+:1005F000102070BD314C083C20886288411C91421B -+:1006000001D9042070BD6168102201EB0010314651 -+:100610000DF04AFC2088401C20802870002070BD0E -+:1006200070B514460D0018D0BCB10021A17002288D -+:1006300002D0102811D105E0288870B10121A170E5 -+:10064000108008E02846FFF7A9FF002805DB401CC2 -+:10065000A070A8892080002070BD012070BD70B5F9 -+:10066000054614460E000BD000203070A8780128F3 -+:1006700008D005D91149A1F108010A8890420AD988 -+:10068000012070BD24B1287820702888000A50709D -+:10069000022008700FE064B14968102201EB0011DC -+:1006A000204610390DF000FC287820732888000AB5 -+:1006B000607310203070002070BD000068000020C2 -+:1006C0002DE9F041FE4C207EE17D884208BFBDE867 -+:1006D000F0810126FB4D0027E07D215C01EB8102CA -+:1006E00005EB8200037C052B18D0037C062B23D05E -+:1006F000037C072B34D0437C002B08BFFFDF29D0BD -+:100700004774E07D16280EBF0020E07D401CE07598 -+:10071000481CC0B255F8222007211AE00674E07D7B -+:1007200016281ABFE07D401C0020E075481CC0B2AE -+:1007300055F8222002210CE00674E07D16281ABF2D -+:10074000E07D401C0020E075481C55F82220C0B216 -+:1007500003219047207EE17D8842BDD1BDE8F08134 -+:100760000674E07D16281ABFE07D401C0020E0756D -+:10077000481CC0B255F822200821EAE770B5D24DD6 -+:100780000C2085F82900A5F53B70002480F8CD41A8 -+:1007900080F8CC4100F5F4700476C47505F12C00A6 -+:1007A0000CF0C0FDA5F58E70047585F82B40601E19 -+:1007B0002C60A86085F8254085F8224085F8234004 -+:1007C00085F8244085F82140C048A5F1E80104706F -+:1007D0004470002000EB800201EB82021474401C84 -+:1007E000C0B20B28F6D30120F8F708FF0020F8F775 -+:1007F00005FF012085F82600F9F72EFBB448F9F72C -+:100800003AFBB44C2070B448F9F735FB6070BDE892 -+:100810007040F8F787BE10B5F8F7B2FEAD4C2078FF -+:10082000F9F742FB6078F9F73FFBA74C94F82800F2 -+:10083000002808BF10BDF9F7B2F8002084F828009E -+:1008400010BD0B20704770B59F4C94F8260000280F -+:100850001CBFFFDF70BD94F82B00002808BFFFDF2E -+:10086000F8F777FF62690025811A6FF07F43B1F5D1 -+:10087000800F24BFA2EB000CBCF5800F0DD38B4280 -+:1008800003D2991A0844411C07E0634528BFFFDFE3 -+:1008900005D2181A1044401C4142002900DBFFDF3A -+:1008A000012684F8266084F82B5094F8291004203F -+:1008B000844A01EB810102EB81010874A068B0F168 -+:1008C000FF3F04D0B01EA0600120F8F797FE002083 -+:1008D000F8F794FEF8F778FE25600CF0C7FEF8F7FD -+:1008E000C1FF7E48056005604FF0E0214FF40040F5 -+:1008F000C1F88002F2F7E5FA74480078022804D0C3 -+:10090000032805D194F8230010B184F8226001E097 -+:1009100084F82250BDE87040F8F788BF0346694963 -+:100920000B2000BF00EB800201EB820212F8042CC6 -+:1009300022B1401E10F0FF00F4D1704700EB80029E -+:1009400001EB8201012241F8143C01F8042C7047AC -+:10095000012804D0032808BF002926D000E021B3D5 -+:10096000594B4FF0000C83F821C0584A0028907072 -+:1009700014BF022882F803C00BD0072915D2DFE884 -+:1009800001F01404060C0E1012001B2000E03A20A7 -+:10099000D070012083F8210070475820F8E77720B5 -+:1009A000F6E79620F4E7B520F2E7002070474748C5 -+:1009B00010B54078F8F75FFF80B210BD30B5421E29 -+:1009C0004049002500EB800001EB80040A2A02D890 -+:1009D00014F8040C00B9FFDF14F8040C012818BF48 -+:1009E000FFDF04F8045C30BD70B53D4C94F8CD01D8 -+:1009F00094F8CC1188420CBF01250025F8F7A9FE18 -+:100A0000F8F739FF94F8CD1194F8CC2191420CBF3E -+:100A100001210021A942E9D170BD30B50D46314A0E -+:100A200044190021101A71EB010038BFFFDF2E4876 -+:100A30008542C8BFFFDF2D488542B8BFFFDF2C4885 -+:100A40008442A8BF2B4804DA002CAABF20462848BD -+:100A500030BD201830BD70B51A4900EB800001EBA5 -+:100A60008004254A54F8101D607A002852F820208E -+:100A700011440CBF04200220084420F07F40F8F706 -+:100A8000FAFE94F90850174A44190021101A71EB24 -+:100A9000010038BFFFDF14488542C8BFFFDF13489D -+:100AA0008542B8BFFFDF12488442A8BF114804DA6C -+:100AB000002CAABF20460E4870BD201870BD000053 -+:100AC000DC080020F8080020E00900207A0000205F -+:100AD0002D26010078000020C106010000F500402D -+:100AE000F4060020FF7F841E0020A10700E05EF8CE -+:100AF0000080841E00807BE170E501002DE9F04F4D -+:100B00000646FF4885B00068C005C00D11D01038FA -+:100B100040B20028B8BF00F00F0000F1E020B4BFE1 -+:100B200090F8140D90F80004400908BF4FF0010A36 -+:100B300001D04FF0000A307800281FBF01280020A4 -+:100B400005B0BDE8F08F307900280CBF04210221E8 -+:100B5000EC4ABAF1000F52F8200001EB000903D172 -+:100B6000E949002081F827006C4602AA2146B068B6 -+:100B7000F8F78EFE9DF90820F068211D104401222F -+:100B8000C01C1F28B8BF019208DB03AAF8F780FE3B -+:100B90009DF80C0010B10198401C0190DDE9001097 -+:100BA0000844401D20F07F400190A1EB090020F097 -+:100BB0007F40009070798DF80A0000980390F8F754 -+:100BC000C8FD009A019B121A181AD04922F07F42E0 -+:100BD00020F07F40B2F5800F26D2814224D3CA484C -+:100BE00090F82950009CCA4F181B20F07F486FF0E6 -+:100BF0007F40001BAB4604900C2D24D005EB8500F4 -+:100C000007EB80026FF07F435068011BB1F5800F46 -+:100C100012D3A4EB000CBCF5800F0DD38B4205D290 -+:100C200004990844411C07E000205FE0634509D2B5 -+:100C3000191A0819401C41420029BCBFAB46957CDB -+:100C4000DADB00E0FFDF5D4525D00BEB8B0007EB27 -+:100C500080026FF07F4091680B1BB3F5800F12D3B9 -+:100C6000A4EB010CBCF5800F0DD3984203D204987D -+:100C70000844431C07E0604528BFFFDF0BD2431A3E -+:100C80001819401C4342002B05DD9DF80A00927B99 -+:100C9000904228BF0C460C2D18BF9DF80A1010D0AA -+:100CA00005EB850007EB80004268121B22F07F42B3 -+:100CB000424506D2827B914228BF8468857C0C2DF8 -+:100CC000EED10098A04205D004EB080020F07F4050 -+:100CD0000094019000990398814206D001EB09002D -+:100CE00020F07F40F8F7C7FDB0600120864991F8F9 -+:100CF0002710002904BF05B0BDE8F08FBAF1000F3E -+:100D00003FF42EAF05B0BDE8F08F2DE9F04F064659 -+:100D100087B00C467F480CF00DFB4FF0010800280F -+:100D200035D07D4F387D002818BFFFDF3E74207915 -+:100D3000794D05F10C022872607968722946A06825 -+:100D4000F8F7A6FD95F90C000F2804DD1F3828736D -+:100D50002868401C286095F90C00E1682E1D0844A5 -+:100D6000C01C1F28B8BFC6F8008009DB6A463146A0 -+:100D7000F8F78EFD9DF8000010B13068401C30601F -+:100D80002078A87287F8148007B0BDE8F08F634D13 -+:100D900095F8CD0116281ED095F8CD0195F8CC1107 -+:100DA000401C884200D1FFDF55480068C005C00DD7 -+:100DB0001AD0103841B20029BDBF01F00F0000F178 -+:100DC000E02090F8140D01F1E020A8BF90F8000495 -+:100DD000400909D104E095F8CC010028E4D1E2E70C -+:100DE0002078002818BFFFDF4C4890F8CD1101EBA8 -+:100DF000810100EB810006742078012800F04A810F -+:100E0000022843D0454890F8CD1101EB810100EB59 -+:100E10008105207928726079687205F10C022946F3 -+:100E2000A068F8F735FD95F90C000F2804DD1F3890 -+:100E300028732868401C286095F90C10E0682E1D66 -+:100E40000844C01C1F28B8BFC6F8008009DB6A46EA -+:100E50003146F8F71DFD9DF8000010B13068401CC8 -+:100E600030602078A8722D4890F8CD1116290EBF59 -+:100E7000002190F8CD11491C80F8CD1125480CF0C7 -+:100E80006FFA07B0BDE8F04FF8F7D0BC234890F8F0 -+:100E9000CD1101AA01EB810100EB81076946E068F1 -+:100EA000F8F7F6FC9DF904000F28CCBF01200020C4 -+:100EB00000993D1D08440190A068C01C1F28B8BFC0 -+:100EC000C5F8008009DB6A462946F8F7E1FC9DF881 -+:100ED000000010B12868401C28600220B8726079B8 -+:100EE00078722079387200280CBF04210221054A4B -+:100EF00052F82000014403917A68481D10440FE025 -+:100F000004ED00E070E50100E0090020FFFF3F0074 -+:100F1000F80800200C0A0020C4080020F406002075 -+:100F20000199009008440399401A0590FD4C002057 -+:100F300084F82700F8F70DFC3860019980460844D2 -+:100F400020F07F40F86094F829000C287ED02146DC -+:100F500091F8290000EB8002A1F1E80000EB820289 -+:100F60005668009A324422F07F42029297F809B004 -+:100F700091F829503446111B21F07F4A6FF07F41D0 -+:100F8000891BA94604910C2D23D0E74805EB850168 -+:100F900000EB81026FF07F435068011BB1F5800FB9 -+:100FA00024BFA4EB000CBCF5800F0BD38B4203D203 -+:100FB00004990844411C05E0634509D2191A08192F -+:100FC000401C41420029BCBFA946957CDBDB00E008 -+:100FD000FFDF4D4524D0D44809EB890100EB8103A4 -+:100FE0006FF07F429868011BB1F5800F12D3A4EB1C -+:100FF000000CBCF5800F0DD38A4203D20499014442 -+:10100000491C07E0624528BFFFDF09D2121A1119F7 -+:10101000491C4942002903DD997B8B4528BF0446C2 -+:101020000C2D18BFC04910D005EB850001EB8000E6 -+:101030004268121B22F07F42524506D2827B9345C2 -+:1010400028BF8468857C0C2DEED100E01BE0A64211 -+:1010500005D004EB0A0020F07F4026460290029A59 -+:10106000A6EB080020F07F40A2EB0802059922F0D1 -+:101070007F42B0F5800F06D2914204D303983044EA -+:1010800020F07F403860A74890F8270000287FF4C0 -+:101090004DAFE8E6A548851915F8010C002818BFE2 -+:1010A000FFDF05F8018CADE60020F8F797BA0120C4 -+:1010B000F8F794BA9E48007870472DE9F0419A4EAF -+:1010C00000274FF00308012506F1E80450B301287A -+:1010D0005BD0022800F0E98003281CBFFFDFBDE8D9 -+:1010E000F08194F829000C2808BFFFDF84F82670EF -+:1010F00084F82B5094F8290000EB800006EB800068 -+:1011000080F81080F8F799FB94F8290094F82910DA -+:10111000401CC0B201EB810156F82120BDE8F0412E -+:101120000521104794F829000C2808BFFFDF84F838 -+:10113000267084F82B5094F8290000EB800006EB11 -+:10114000800080F81080F8F778FB207F002818BF17 -+:10115000FFDF84F825500020F8F750FAA168B1F1BC -+:10116000FF3F04D0012300221846F8F78BFA94F8C9 -+:10117000290094F82910401CC0B201EB810156F8F7 -+:101180002120BDE8F0410121104794F829000C28E6 -+:1011900008BFFFDF84F8267084F82B5094F82900EC -+:1011A00000EB800006EB800080F81080F8F745FB2C -+:1011B0000120F8F723FA94F8250000281CBFA06846 -+:1011C000B0F1FF3F0DD094F8290094F82910401C8D -+:1011D000C0B201EB810156F82120BDE8F0410621A3 -+:1011E0001047207F012815D002281FD0032833D0B4 -+:1011F00004281CBFFFDFBDE8F08194F82010606870 -+:101200000123411A00221846F8F73CFA94F8280006 -+:10121000B8BB37E094F8240028B184F82470F8F7BC -+:1012200013FB84F823502777BDE8F08194F8280059 -+:1012300018B9F8F78BFB84F8285094F8290094F833 -+:101240002910401CC0B201EB810156F82120002179 -+:1012500090472777BDE8F081217B60680123411A20 -+:1012600000221846F8F70EFA94F8240028B184F802 -+:101270002470F8F7E9FA84F8235002202077BDE8BB -+:10128000F08103E0F8F762FB84F8285094F8290015 -+:1012900094F82910401CC0B201EB810156F82120BE -+:1012A000002190472577BDE8F08121480078BDE80E -+:1012B000F041F8F7FFBD10B51A4C94F829000C283E -+:1012C00008BFFFDF94F8290094F82910401CC0B231 -+:1012D000154A01EB810152F82120BDE8104004219C -+:1012E00010472DE9F84F8046087C104C401EC6B2CE -+:1012F0000D46A05D01281DD0022825D0297CDFF8ED -+:1013000028A0481EC4B204EB84020AEB8206371DF3 -+:101310000A2821D801EB81000AEB800010F8040CA8 -+:10132000D8B919E0E0090020F8080020D40900200D -+:1013300078000020A87A012814BF02200020A055C0 -+:1013400018BFBDE8F88FD9E7A87A012818BFFFDFDA -+:101350000021A972A155D1E7FFDF307CDFF8289486 -+:1013600007280BD11720009099F8172009F11803CE -+:10137000494620460BF02AFD01203074307C0128BC -+:1013800004D0A87A012818BFFFDF02D0A87A01286C -+:101390004BD1FE4B307C022818D099F81800162843 -+:1013A00072D099F8180099F81710401C884200D1A3 -+:1013B000FFDF0120707499F8180009F8004099F8CF -+:1013C0001800162800F09E8100F093B9F04A92F8B8 -+:1013D00029000146A04207D0014600EB810003EB43 -+:1013E0008000807CA042F7D192F829C084450CD1BE -+:1013F00092F8291001EB810103EB8101897C82F8CD -+:101400002910012182F82A1009E000EB800203EB89 -+:10141000820201EB810103EB8101927C8A7400EB73 -+:10142000800003EB80000C218174287AD9490028C0 -+:1014300051F820A02968A1EB0A010CBF042002206A -+:10144000081A20F07F423A60D5E90001084420F0F4 -+:101450007F407860A87A022818BF287B1ED0387297 -+:101460007868401D20F07F407860687AB872287AEA -+:1014700006257872032872D2002870D000F022FE70 -+:1014800000286DD0A1E0FFE799F81700002890D15F -+:101490008EE700BF89F81800BDE8F88F287A002889 -+:1014A0000CBF0420022000EB0A036868591D00EB02 -+:1014B000010BB9484078504503D9B54991F823103C -+:1014C00011B10BF1060003E0A0EB0A005844801DA7 -+:1014D000AF4991F829C0BCF10C0F25D091F829C073 -+:1014E0000CEB8C0EA1F1E80C0CEB8E0CDCF804C0BC -+:1014F000624519D0DFF8A4C291F8291001EB8102EE -+:10150000A24901EB82014A688968A2EB080222F035 -+:101510007F42A1EB080121F07F41904298BFB2F5D4 -+:10152000800F9DD28C459BD34044A0EB0B0020F054 -+:101530007F4139601944E86821F07F410A1A6FF051 -+:101540007F4CB2F5800F24BF431AB3F5800F11D33F -+:10155000944506D2ACEB00000844421C0AE034E09B -+:101560002FE09C4528BFFFDF1DD2ACEB01010844F2 -+:10157000401C4242002A16DD0520307499F81800FC -+:10158000162819D099F8180099F81710401C8842AD -+:1015900000D1FFDF99F8180009F8004099F8180009 -+:1015A00016287BD0A5E03868ABF10501084420F08F -+:1015B0007F407860002052E799F817000028E9D1B1 -+:1015C000E7E7CAF138054FF0320A7348017801297C -+:1015D00018BF03290AD14078504507D96C4991F8C2 -+:1015E0002310002904BFA0EB0A0005446B4B3868A8 -+:1015F000A0EB0802786822F07F41A0EB080020F001 -+:101600007F4C8D4298BFB1F5800F1BD2634519D333 -+:101610005F4991F829300C2B30D091F829504FF0C8 -+:101620000C0BDA46594905EB850301EB8303D3F82C -+:1016300008C0ACEB080C944531D8AB469D7C0C2D12 -+:10164000F0D193E00520307499F81800162810D0D6 -+:1016500099F8180099F81710401C884200D1FFDF54 -+:1016600099F8180009F8004099F81800162849D090 -+:101670003FE099F817000028F2D1F0E7022030741B -+:1016800091F829000C2818BF91F82900B07481F84E -+:101690002940012081F82A00BDE8F88F32E00C2DA6 -+:1016A0001CBFAA46002261D00AEB8A0301EB830328 -+:1016B000D3F804C0ACEB080C84452CD29A7B97F885 -+:1016C0000AC0944520D30520307499F818001628D4 -+:1016D00013D099F8180099F81710401C884200D1CF -+:1016E000FFDF99F8180009F8004099F8180016284B -+:1016F00008D099F81800401CCCE699F8170000288B -+:10170000EFD1EDE70020C5E693F812A00122BAF16F -+:101710000C0FC9D103E0002A08BFAA4626D02F46E5 -+:101720001A4807EB870100EB8108062288F8102091 -+:1017300099F81800162838D099F81800411C99F823 -+:101740001700814200D1FFDF99F8180009F80070F6 -+:1017500099F8180016280EBF002099F81800401CB0 -+:1017600089F8180098F81270BA45D9D10220074FAD -+:10177000307407F1E80090F82910A9421AD186F8D0 -+:1017800012A080F829400BE0DC080020F8080020B7 -+:10179000E009002070E501007A000020FFFF3F0013 -+:1017A000012180F82A10BDE8F88F99F81700002869 -+:1017B000CAD1C8E70C2D0CD0BBF10C0F08BFFFDF5E -+:1017C0000BEB8B0007EB8000847486F812A0BDE859 -+:1017D000F88FBBF10C0F08BFFFDF0BEB8B0007EBA3 -+:1017E000800084740C20B074BDE8F88F2DE9F04FB0 -+:1017F00083B0F7F7AEFF05464FF00C0BFE4C94F8A4 -+:1018000029100026A4F1E8094FF001080C292FD077 -+:1018100094F82920214602EB820209EB8202127C15 -+:10182000042A25D091F8292002EB820209EB8202DA -+:10183000127C032A04BF03B0BDE8F08F2A4620695A -+:101840006169801A491BED4B20F07F4021F07F41F8 -+:1018500006283CBF03B0BDE8F08FB0F5800F24BF71 -+:1018600003B0BDE8F08F8B423CBF03B0BDE8F08F02 -+:10187000A068B0F1FF3F18BFFFDF84F8256094F83F -+:101880002900DF4F0C2809D094F8290000EB8000D4 -+:1018900009EB8000007C042808D01AE094F82100AD -+:1018A000B8B1F8787870B878387012E094F829B048 -+:1018B0000BEB8B0009EB800080F8108094F8290076 -+:1018C00000EB800009EB8000807C84F8290084F81C -+:1018D0002A80DFF830A39AF8CD019AF8CC1188421B -+:1018E00019D000BF9AF8CC0100EB80000AEB800110 -+:1018F0002846FFF7F6FC9AF8CC0116280EBF002008 -+:101900009AF8CC01401C8AF8CC019AF8CD019AF8DB -+:10191000CC118842E6D1DFF8F0A29AF8140028B181 -+:1019200051462846FFF7DDFC8AF81460BBF10C0F26 -+:1019300006D00BEB8B0009EB8000017C01292BD03A -+:1019400094F829000C2800F0ED8094F82A00002873 -+:1019500000F0F78084F82A6094F8290000EB8001F9 -+:10196000AA4800EB8102A0F50173D2E90101D26817 -+:10197000C3F80423C3E9BF01607E00280CBF4FF009 -+:1019800004094FF00209A249022811F8201021731E -+:1019900018BF012834D123E007210174DFF874A2B5 -+:1019A0009AF81800162816D09AF818009AF8171006 -+:1019B000401C884200D1FFDF9AF818000AF800B0F6 -+:1019C0009AF8180016280EBF00209AF81800401C3C -+:1019D0008AF81800B4E79AF817000028ECD1EAE773 -+:1019E00020690844421B22F07F42382A08D903218B -+:1019F0003238617620F07F4020613220207309E088 -+:101A0000322907D294F8280058B9F7F79FFF84F8D5 -+:101A1000288006E094F8280018B1F7F7C0FF84F892 -+:101A200028607B7884F8203094F80CA03878062160 -+:101A3000A3EB0A02012818BF032804D184F82480EC -+:101A4000002AC8BF911D94F822B0BBF1000F18BF47 -+:101A5000891C206901905044484420F07F40606018 -+:101A6000BAF1000F14BF02200020207794F8240060 -+:101A7000002808BFBBF1000F37D060480090D4F8B1 -+:101A800010E0D4F814C0AEEB050E2EF07F4EACEB98 -+:101A9000050C20462CF07F4C714598BFBEF5800F99 -+:101AA0001FD2009961451CD3002A0FDD0199BAF1BC -+:101AB000000FA1EB020101611944494421F07F416B -+:101AC00041600CBF0121032121770EE004DA002BD5 -+:101AD0000CBF02210421F7E7BBF1000F08BFFFDFB5 -+:101AE00003E080F8246084F82260207F40B1206900 -+:101AF000012300EB090100221846F7F7C3FD02E0BD -+:101B00000120F7F77BFD94F82900012300EB800109 -+:101B10003E4800EB8100616890F90C200020F7F747 -+:101B2000B1FD0EE00120F7F769FD0020F7F766FD33 -+:101B3000F7F74AFD94F8280018B1F7F730FF84F85A -+:101B4000286094F8220028B1F7F77EFE84F823601D -+:101B500084F8226094F8210018B1F8787870B87889 -+:101B6000387094F8240030B184F823603878002865 -+:101B700008BF84F824602748017EC07D814203D0DD -+:101B800025484078F8F796F984F8278003B0BDE837 -+:101B9000F08F70B5184C054682B094F829000C28D7 -+:101BA00008BFFFDF94F8290000EB8000174E06EB1A -+:101BB0008000007C032818BFFFDFA068B0F1FF3F62 -+:101BC00018BFFFDF94F8290001AA00EB800006EBA4 -+:101BD0008000694690F90C002844F7F759FE9DF9FA -+:101BE00004000F28CCBF0120002000990844616840 -+:101BF000084420F07F4111E0E0090020FFFF3F0092 -+:101C00007A000020F4060020C4080020F808002014 -+:101C100070E50100DC08002078000020A16094F845 -+:101C20002500002804BF02B070BD012302B00022CD -+:101C3000BDE870401846F7F725BD744A0B1A02F14B -+:101C4000010CB3EB9C0F3CBF1846704710B5441A0B -+:101C5000B4EB9C0F3CBF184610BD9A4203D2101A39 -+:101C60000844401C10BD94429EBFFFDF002010BD01 -+:101C7000511A0844401C404210BD01230022014675 -+:101C80000220F7F7FFBC0220F7F7B8BCF7F761BDF9 -+:101C90002DE9F0415E4C054682B094F82B000028F7 -+:101CA00008BFFFDF642D50D35A480022401B72EB5F -+:101CB00002004AD3584890F8CD1190F8CC018142E7 -+:101CC00043D15648007D00283FD194F82900DFF821 -+:101CD000508100EB800008EB8006206801AA2844B0 -+:101CE0006946F7F7D5FD9DF90400002802DD00984C -+:101CF000401C0090B168009872680F18BA1A22F060 -+:101D00007F42B2F5800F20D2B27C0C2A09D002EBC0 -+:101D1000820208EB82025268511A21F07F4181420F -+:101D200013D3A068B0F1FF3F05D00120F7F766FCA0 -+:101D30004FF0FF30A06020682844206027F07F40EB -+:101D4000606102B00120BDE8F08102B00020BDE872 -+:101D5000F0812DE9F8430646401EC7B2304807EB34 -+:101D6000870100EB8104207C002808BFFFDF2A4A9E -+:101D700092F8CC1192F8CD0181420DD001EB810394 -+:101D800002EB83031B7CB34210D016290CBF002149 -+:101D9000491CC9B28142F1D120484FF0170800F127 -+:101DA0001805017D29B3007CB04222D10020BDE896 -+:101DB000F883207C05281FBF207C0628207C07286C -+:101DC0000AD184F81090CDF80080EA7D05F118035F -+:101DD000144938460AF0FAFF607C68B16674CDF8A1 -+:101DE0000080EA7D05F118030E4938460AF0EEFF3F -+:101DF00002E04FF001090026207C012804BF607C2E -+:101E00000028D6D10120BDE8F8830000FF7F841EA2 -+:101E1000E0090020FF1FA107F4060020C4080020ED -+:101E2000F8080020DC080020F0B5734AD2F8003230 -+:101E3000724D002401212E7856B9714E3460704FD6 -+:101E400003263F1D3E606E4F04260C373E6029700E -+:101E5000C2F80042D1601160694C4834D1642568F1 -+:101E60008542FBD35160D160C2F80032F0BD2DE94C -+:101E7000F041044680074FF000054FF0010604D5FD -+:101E800060480560066024F00204E0044FF0FF376C -+:101E900005D55D484660C0F8087324F4805460009E -+:101EA00003D55A48056024F08044E0050FD5524818 -+:101EB000C0F80052C0F8087351490D60091D0D604B -+:101EC0004F4A04210C321160066124F48074A0048E -+:101ED00009D54F484660C0F80052C0F808734D4815 -+:101EE000056024F40054C4F38030C4F3C031884248 -+:101EF00000D0FFDF14F4404F14D047484660C0F8CC -+:101F0000087346488660C0F80052C0F80873444918 -+:101F10000D600A1D16608660C0F808730D601660BB -+:101F200024F4404420050AD53E4846608660C0F847 -+:101F30000873C0F848733C48056024F400640BF053 -+:101F40006FFB3A48044200D0FFDFBDE8F08170B576 -+:101F5000202500224FEA020320FA02F1C90719D016 -+:101F600051B201F01F060124B4404E09B60006F13B -+:101F7000E026C6F88041C6F88042002906DA01F062 -+:101F80000F0101F1E02181F8143D03E001F1E021AE -+:101F900081F80034521CAA42DED370BD70B5174CD4 -+:101FA0000D466060FFF763FF6068FFF7D0FF2846CB -+:101FB000F7F7A9FD0AF064FF00F0D5F80BF030FB4D -+:101FC0000BF07BFAF7F748FFBDE870400BF006B85E -+:101FD00010B50A4C6068FFF74AFF6068FFF7B7FF6B -+:101FE0000BF01EFBF7F753FE0020606010BD0348A6 -+:101FF0004068704702207047008000408000002049 -+:1020000004850040FC1F004000C0004004E5014082 -+:1020100000D0004004D5004000E0004000F0004047 -+:1020200000F5004000B0004008B50040FEFF0FFC86 -+:1020300070B51F490A68BAB100231D4601244A68D9 -+:10204000521C4A60092A00D34D600E7904FA06F248 -+:102050000E6816420AD072B60B6893430B6062B6E4 -+:1020600049680160002070BD052070BD5B1C092B14 -+:10207000E5D3FFDFF8E74FF0E0214FF48000C1F82F -+:1020800000027047EFF3108111F0010F72B64FF0AC -+:10209000010202FA00F20648036842EA0302026003 -+:1020A00000D162B6E7E70248002101604160704755 -+:1020B0008800002001208107086070470120810707 -+:1020C0004860704712480068C00700D00120704780 -+:1020D0000F48001F0068C00700D0012070470C485F -+:1020E00008300068C00700D0012070470848103051 -+:1020F0000068704706490C310A68D20306D50968A2 -+:1021000001F00301814201D1012070470020704796 -+:102110000C040040C84911F8210F4978884201D3C6 -+:10212000401A02E0C1F121010844C0B27047C2491F -+:10213000233111F8210F4978884201D3401A02E077 -+:10214000C1F121010844C0B27047BB49463111F8C2 -+:10215000210F4978884201D3401A02E0C1F12101E0 -+:102160000844C0B27047B54910B5802081F800041A -+:10217000B1490020233101F8210F4870AE4901F820 -+:10218000210F4870AC49463101F8210F4870AC4826 -+:102190000BF0C8F8AA48401C0BF0C4F8F0F7A4FEF6 -+:1021A000BDE8104000F03DB920207047B2E770B59F -+:1021B0000C4605460026FFF7ADFF01469E48A142AA -+:1021C00012D30022641EE4B20DD390F82210435CB7 -+:1021D000491CC9B205F8013B80F822102129F1D130 -+:1021E00080F82220EEE7012600F01BF9304670BD92 -+:1021F000202070479BE770B50C4605460026FFF788 -+:1022000096FF01468C482330A14212D30022641E5F -+:10221000E4B20DD390F82210435C491CC9B205F812 -+:10222000013B80F822102129F1D180F82220EEE72D -+:10223000012600F0F6F8304670BD20210170002024 -+:10224000704710B50446FFF780FF2070002010BDD6 -+:1022500070B50C460546FFF778FF014676484630D4 -+:10226000A14213D30022641EE4B20DD390F82210D1 -+:10227000435C491CC9B205F8013B80F822102129B2 -+:10228000F1D180F82220EEE7002401E042F20704B9 -+:1022900000F0C7F8204670BD70B50C4605462129F0 -+:1022A00000D9FFDF67480068103840B200F0A0F89E -+:1022B000C6B20D2000F09CF8C0B2864204D2FFDF07 -+:1022C00002E000BFF0F760FE21462846FFF76FFFEF -+:1022D0000028F7D070BD2DE9F047DFF86481564C37 -+:1022E000A8F101080746233498F80000DFF8489168 -+:1022F000002604F1230A38B994F8221094F821003A -+:10230000212200F084F890B14D4699F8221099F8F6 -+:102310002100212200F07BF8B8B155469AF822102E -+:102320009AF82100212200F072F848B335E094F8C1 -+:102330002100275494F82100401CC0B284F82100E9 -+:1023400021282AD184F8216027E095F821002F5414 -+:1023500095F82100401CC0B285F82100212801D148 -+:1023600085F8216098F800004746B0B195F8221032 -+:1023700095F82100212200F04AF870B13E700CE07F -+:1023800095F821002F5495F82100401CC0B285F823 -+:102390002100212801D185F8216094F8221094F8B9 -+:1023A0002100212200F033F800281FD099F82210D4 -+:1023B00099F82100212200F02AF8002816D09AF876 -+:1023C00022109AF82100212200F021F800280DD0D7 -+:1023D000F0F7B0FD1A480AF0ADFFB0F5005F00D08D -+:1023E000FFDFBDE8F04716480AF0BABFBDE8F08746 -+:1023F000002806DA00F00F0000F1E02090F8140D3C -+:1024000003E000F1E02090F8000440097047401C10 -+:10241000884204D0904200D109B1002070470120C9 -+:10242000704710B506480AF085FF002803D1BDE8C3 -+:102430001040F0F76ABD10BD100A00200DE000E06A -+:102440009100002004ED00E0164908784A78401C0D -+:10245000C0B2904205D0144B01221A60BFF34F8FD7 -+:10246000087070472DE9F0410E4C4FF0E02600BF98 -+:10247000F7F7A0FC20BF40BF20BF677820786070CE -+:10248000D6F80052EEF73EFF854305D1D6F8040298 -+:1024900010B92078B842EBD0F7F787FC0020BDE8F0 -+:1024A000F081000093000020180502402DE9F04162 -+:1024B000012528034FF0E0210026C1F880011E4CC1 -+:1024C000C4F800610C2000F02CF81C480168026878 -+:1024D000C94341F3001142F010020260C4F80453F2 -+:1024E0002560491C00E020BFD4F80021002AFAD062 -+:1024F00019B9016821F01001016011480768656091 -+:10250000C4F80853C4F800610C2000F00AF83846FB -+:10251000BDE8F08110B50446FFF7C8FF2060002039 -+:1025200010BD00F01F02012191404009800000F120 -+:10253000E020C0F88012704700C0004010ED00E0BD -+:1025400008C500402DE9F047F84C0646FF216068B9 -+:1025500000EB061211702178FF2916D04FF0080900 -+:1025600009EB011109EB06174158C059491E21F02A -+:102570007F4100F0DDF918B194F80080454614E081 -+:102580006168207801EB061108702670BDE8F087BD -+:10259000626809EB0510D159105800F0C9F930B93B -+:1025A0006068A84600EB08100578FF2DF0D1606840 -+:1025B00000EB061100EB08100D700670E6E7F0B5B1 -+:1025C000DA4B0446002001255A680C261B7A0BE0E2 -+:1025D00005EB0017D75DA74204D106EB0017D759CA -+:1025E0008F4204D0401CC0B28342F1D8FF20F0BD1E -+:1025F00070B5FFF74BFBCD4C01460825227860688B -+:1026000005EB0212805800F093F9012808D92178CF -+:10261000606805EB01114058BDE87040FFF72DBB25 -+:10262000FEF748FDBDE87040F7F744BC2DE9F041E6 -+:10263000BE4C2578FFF72AFB0146FF2D6FD04FF0E7 -+:102640000808626808EB0516905900F071F9022835 -+:10265000606801D980595EE000EB051109782170AE -+:10266000022101EB0511425C5AB1521E42548159BC -+:1026700001F5000121F07F4181512846FFF762FFFB -+:1026800034E00423012203EB051302EB051250F89A -+:1026900003C0875CBCF1000F10D0BCF5806F10D96F -+:1026A000CCF3090250F806C00CEB423C2CF07F4CF6 -+:1026B00040F806C0C3589A1A920A09E0FF218154D3 -+:1026C0000AE0825902EB4C3222F07F428251002212 -+:1026D00042542846FFF736FF0C21606801EB0511D4 -+:1026E0004158E06850F82720384690472078FF2866 -+:1026F00015D0FFF7CBFA01462278606808EB02128A -+:102700004546805800F014F9012891D92178606875 -+:1027100005EB01114058BDE8F041FFF7AEBABDE846 -+:10272000F081F0B51D4614460E460746FF2B00D338 -+:10273000FFDFA00700D0FFDF7C48FF210022C76039 -+:10274000446005720674017042701046012204E074 -+:1027500002EB0013401CE154C0B2A842F8D3F0BD14 -+:1027600070B5724C06466578207C854200D3FFDF49 -+:10277000E06840F825606078401C6070284670BDB5 -+:102780002DE9FF5F1D468B460746FF24FFF77EFAC3 -+:10279000DFF89891064699F80100B84200D8FFDFAB -+:1027A00000214FF001084FF00C0A99F80820D9F8E1 -+:1027B00004000EE008EB0113C35CFF2B27D0BB42E3 -+:1027C00005D10AEB011350F803C0DC4521D0491CA8 -+:1027D000C9B28A42EED8FF2C1BD008EB04110AEBD9 -+:1027E0000412475440F802B00421029B0022012B3E -+:1027F00001EB041111D042504FF4806808234FF0D0 -+:10280000020C454519D9A905890D08D008E00C46E8 -+:10281000DDE7FF2004B0BDE8F09F4550ECE74146FE -+:1028200006EB413203EB041322F07F42C250691AD7 -+:102830000CEB0412890A81540BE005B9012506EB63 -+:10284000453103EB041321F07F41C1500CEB04111F -+:10285000425499F800502046FFF774FE99F80000A2 -+:10286000A84201D0FFF7C4FE3846D3E770B50C4646 -+:102870000546FFF70BFA064621462846FFF79FFE5E -+:102880000446FF2817D0294D082101EB0411686880 -+:102890004058314600F04CF800F58050400B0221C2 -+:1028A0006A6801EB0411515C09B100EB812000283A -+:1028B00000D1012070BD002070BD2DE9F0410F4610 -+:1028C0008046FFF77CFEFF281BD0184E35787168D4 -+:1028D0002A462C4605E0844206D0254601EB051326 -+:1028E0001C78FF2CF7D10CE0FF2C0AD0A5420CD1AC -+:1028F00001EB021000783070FF2804D0FFF778FE5B -+:1029000003E000200BE7FFF7BEF939464046FFF72A -+:10291000ADFFFF220123716803EB0413CA5401EBDE -+:10292000041201EB051112780A70F8E67C0A002007 -+:10293000401A20F07F40B0F5000F00D9002070470A -+:1029400070B50446A0F500002C4EB0F1786F02D2AD -+:102950003444A4F500042A48844201D2012500E051 -+:10296000002500F041F830B1B4420BD3254800688F -+:1029700004E0284370BDB44204D32348844201D20A -+:102980000120F6E70020F4E710B50446A0F50000AA -+:10299000B0F1786F03D219480444A4F5000400F0A4 -+:1029A00023F84FF0804130B11648006804E08C42B3 -+:1029B00004D2012003E014488442F8D2002080F0C1 -+:1029C000010010BD10B520B1FFF7DEFF08B10120F6 -+:1029D00010BD002010BD10B520B1FFF7B1FF08B148 -+:1029E000012010BD002010BD084809490068884238 -+:1029F00001D1012070470020704700000000002036 -+:102A000000F00100200000200800002098000020B5 -+:102A1000BEBAFECA0548064A0168914201D10021AA -+:102A20000160044901200860704700009800002000 -+:102A3000BEBAFECA40E50140534800210170417012 -+:102A400010218170704770B5054616460C4602206D -+:102A5000F0F7E7F94C49012008704C49F01E086076 -+:102A60004B480560001F046070BD10B50220F0F7F0 -+:102A7000D8F945490120087046480021C0F80011E6 -+:102A8000C0F80411C0F8081143494FF40000086071 -+:102A900010BD3D480178C9B1404A4FF400011160B2 -+:102AA0003C49D1F800310022002B1CBFD1F8043181 -+:102AB000002B02D0D1F8081111B14270102103E0AF -+:102AC0000121417036490968817002700020F0F7D9 -+:102AD000A8B92D480178002904BF407870472D48D7 -+:102AE000D0F80011002904BF02207047D0F800116F -+:102AF00000291CBFD0F80411002905D0D0F8080126 -+:102B0000002804BF01207047002070471E4800B510 -+:102B10000278204B4078C821491EC9B282B1D3F84F -+:102B200000C1BCF1000F10D0D3F8000100281CBF79 -+:102B3000D3F8040100280BD0D3F8080150B107E006 -+:102B4000022802D0012805D002E00029E4D1FFDFED -+:102B5000002000BD012000BD0B480178002904BF02 -+:102B6000807870470B48D0F8001100291CBFD0F8BE -+:102B70000411002902D0D0F8080108B110207047D4 -+:102B800007480068C0B270479C00002010F5004064 -+:102B900008F5004000F0004004F5014008F5014050 -+:102BA00000F400403148002101704170704770B559 -+:102BB000064614460D460120F0F733F92B49012053 -+:102BC00008702B480660001D0460001D056070BD84 -+:102BD0002DE9F04105460120F0F723F923480126AD -+:102BE0002449067045F080700860234C0027C4F823 -+:102BF000047122494FF040700860002D02BFC4F8F4 -+:102C000000622660BDE8F081012D18BFFFDFC4F827 -+:102C1000007226604FF0007019490860BDE8F0812D -+:102C20001248017879B1154A4FF04071116012498C -+:102C3000D1F804210021002A08BF417002D0114AB6 -+:102C40001268427001700020F0F7EBB80748017875 -+:102C5000002904BF407870470748D0F804010028D5 -+:102C600008BF704707480068C0B270479F00002047 -+:102C700008F5004004F5004000F0004008F5014070 -+:102C800004F5014000F4004070B5FE4C0025012021 -+:102C90006570257025626572A572E07284F829500E -+:102CA000256304F13C00A5630AF03CFB002818BF33 -+:102CB000FFDF84F82450F4480BF0A2FAF3494FF0F8 -+:102CC00011300860091D0860091D0860091D0860B1 -+:102CD000091D0D60091D0860091D0860091D0860B7 -+:102CE000091D0860091D0860091D0860091D0860AC -+:102CF000091D0860091D0860657770BD30B4E149A1 -+:102D00000268DFF890C34A6142688A61007A0877F6 -+:102D10000A7DDF4BACF1040401204AB10A7E00FABF -+:102D200002F21A608D7D002D0CBF2260CCF80020CD -+:102D30004A7D002A04BF30BC70474A7E904018602C -+:102D4000C97D00290CBF2060CCF8000030BC704762 -+:102D5000D249D1480860091DD14808607047CF4A60 -+:102D600000B5D0491160C0B240F44030111D40F0B0 -+:102D700000700860CC48D0F80001002818BFFFDFC1 -+:102D800000BD012070B502244FF0E0250022C5F8F7 -+:102D90008041C6490A600860C5490B6823F0770383 -+:102DA00043F0880343F000430B60C24B40F25B6189 -+:102DB00019601B1F40F203111960191F0860BE48FB -+:102DC00003230360BD4996200860AE4EBC4896F9C7 -+:102DD000241011F1080F08BFF8213CD014DC11F1C8 -+:102DE000280F08BFD82136D011F1140F08BFEC21ED -+:102DF00031D011F1100F08BFF0212CD011F10C0FC0 -+:102E000008BFF42127D010E011F1040F08BFFC2106 -+:102E100021D0002908BF026008D0032908BF036041 -+:102E200004D0042908BF016000D0FFDF707F0028B4 -+:102E300014BF4FF4C020A348A3490860A449A34885 -+:102E40000860091FA3480860C5F880429649102011 -+:102E5000C1F8040370BD0160E8E78A4A0368C2F85C -+:102E600002308088D08011727047864890F829001F -+:102E70007047844A517010707047F0B50546800065 -+:102E800000F1804000F580508B88C0F820360B7828 -+:102E9000D1F8011043EA0121C0F8001605F108003D -+:102EA000012707FA00F68C4C002A04BF2068B043C3 -+:102EB00004D0012A18BFFFDF20683043206020685B -+:102EC00007FA05F108432060F0BD10B57C490446BF -+:102ED00010F1080F08BFF8202CD014DC14F1280FD3 -+:102EE00008BFD82026D014F1140F08BFEC2021D041 -+:102EF00014F1100F08BFF0201CD014F10C0F08BF04 -+:102F0000F42017D011E014F1040F08BFFC2011D0F9 -+:102F1000002C08BF00200DD0032C08BF032009D0CF -+:102F2000042C04BF0420086000D0FFDF554880F85F -+:102F3000244010BD0860F9E7524890F8340070470B -+:102F4000504890F836007047644AC17811600068B4 -+:102F50006349000208607047252808BF02210ED08F -+:102F6000262808BF1A210AD0272808BF502106D0DA -+:102F70000A2894BF0422062202EB4001C9B2594A32 -+:102F800011605949086070473E49086270473D49E1 -+:102F90008A7A012A49D0022A18BF70474B7D002B3C -+:102FA00008BF7047DFF844C1012A42D0CA7D4B7E7A -+:102FB000002A18BF01227D30CCF80000DFF830C1B4 -+:102FC0000020CCF84C01180282F0010240EA0250C5 -+:102FD00040F00312087F830003F1804303F5C043F0 -+:102FE000C3F81025434A02EB8002887EC30003F138 -+:102FF000804303F5F833C3F81425DFF8FCC0C3F8A9 -+:1030000010C5C97ECB0003F1804303F5F833C3F844 -+:103010001425304AC3F81025012202FA00F002FA02 -+:1030200001F108433549086070470B7D002BB9D189 -+:1030300070478A7D0B7E002A18BF01227E30BBE7D5 -+:103040002DE9F84F00280CBF012202220D4D164C2D -+:103050000320AA72C4F80002687F002814BF4FF44E -+:10306000C0201848254F38604FF00108002974D05F -+:10307000012971D002291CBFFFDFBDE8F88F286A43 -+:1030800000283DE0900A0020A40A0020000E004025 -+:10309000180500500C0500500601020014150040F0 -+:1030A000250003020801100000100040FC1F004032 -+:1030B0003C170040381500401015004044150040F2 -+:1030C0000C1500400000040408F501404080004059 -+:1030D000A4F50140101100404016004024150040A6 -+:1030E0001C15004008150040541500404C85004058 -+:1030F00000800040006000404C81004004F5014029 -+:1031000008BFFFDF296A286B0844FC490860FD49B5 -+:10311000FB480860A97AFC4801290EBF0460FB49FE -+:103120000160A86B40F40020A863D4F800924FF02F -+:10313000100AC4F808A30026C4F80062F4484FF44B -+:10314000802BC0F800B0FF208DF80000C4F810619B -+:10315000C4F810803DE000E01CE0012A13D0C4F860 -+:103160000480022A18BFBDE8F88F687D002808BFD8 -+:10317000BDE8F88FE748C0F84C80E7480068BDE834 -+:10318000F84F0A3003E7C4F80080287D0028F1D109 -+:10319000BDE8F88FE148012A806B07D0022A18BFEA -+:1031A000FFDF09D0BDE8F84F0A20F0E640F48010B8 -+:1031B000A8634FF4801004E040F40010A8634FF4BB -+:1031C00000103860EEE700BF9DF80000401E8DF84B -+:1031D00000009DF8000018B1D4F810010028F3D0C9 -+:1031E0009DF80000002808BFFFDFC4F80061C4F8A4 -+:1031F0000C61C4F81061C4F80461C4F81461C4F827 -+:103200001861C4F82861C64800680090C4F80092AC -+:10321000C7F800B0C4F804A34FF400203860296A4E -+:10322000286BBDE8F84F08440A30B0E62DE9F847AE -+:10323000BC4CD4F8000220F00309D4F804034FF08A -+:10324000100AC0F30018C4F808A30026C4F80062EE -+:10325000B24D687F002814BF4FF4C020B248AC497B -+:103260000860A87A0127012802D0022803D014E0C0 -+:10327000287D10B911E0687D78B1A87EEA7E07FA52 -+:1032800000F007FA02F210430860287F800000F186 -+:10329000804000F5C040C0F81065FF208DF80000A8 -+:1032A000C4F81061276104E09DF80000401E8DF80D -+:1032B00000009DF8000018B1D4F810010028F3D0E8 -+:1032C0009DF80000002808BFFFDFC4F81061C4F8B3 -+:1032D00028616E72AE72EF72C4F80092B8F1000FFE -+:1032E00018BFC4F804A3BDE8F88700688F4920F030 -+:1032F0007F40086070474FF0E0200221C0F8801145 -+:10330000C0F8801270474FF0E0210220C1F80001A0 -+:10331000704787490870704710B586480AF00AF868 -+:10332000002818BFFFDF10BD82480AF019B8824993 -+:103330000860704730B5794C0546206BA84228BF1D -+:10334000FFDF012020732561607F40B1A81C206150 -+:103350007448D0F8001241F04001C0F800126D49E5 -+:103360000020C1F84401754920690860A06B7449C8 -+:1033700040F48000A0634FF48000086030BD6748CF -+:1033800002210173CA210161417F41B1CC21016158 -+:103390006449D1F8002242F04002C1F800225D4A9F -+:1033A0000021C2F844110269016B1144634A1160A3 -+:1033B000816B41F48001816361494FF480000860B2 -+:1033C00070475649012048775E49022008605F49EE -+:1033D0005D480860091F5E48086070474F4900203B -+:1033E000487770474A494FF4800008604B48816B2A -+:1033F00021F4800181630021017370474548012158 -+:103400004160C1600021C0F844114C48016043484C -+:1034100001637047414800B5407F002818BFFFDFB7 -+:103420004020484908603F48D0F8001241F0400170 -+:10343000C0F8001200BD394800B5407F002818BF11 -+:10344000FFDF3848D0F8001221F04001C0F8001228 -+:103450003C490020086000BD3248D0F8001221F03D -+:103460001001C0F800120121816170472D48002130 -+:10347000C0F81C11D0F8001241F01001C0F8001281 -+:103480007047284981B0D1F81C21012A1EBF0020B5 -+:1034900001B070472F4A126802F07F025242027058 -+:1034A0000020C1F81C012C4800680090012001B0E8 -+:1034B000704730B50C00054608BFFFDF14F0010F60 -+:1034C0001CBF012CFFDF002D0CBF0120022013497F -+:1034D00001284872CC72134904BFD1F8000240F0B1 -+:1034E000040007D0022807BFD1F8000240F008000E -+:1034F000FFDF30BDC1F8000230BD0000488500404C -+:1035000048810040A8F50140ACF50140041000409E -+:1035100008F50140008000404C850040900A0020E2 -+:103520001811004000100040000004043C15004049 -+:10353000A1000020CC0A0020041500404485004072 -+:1035400004F5014060150040448000409CF50140B6 -+:1035500028110040481500401C11004070B5EF4C88 -+:103560000022E17A11F0020F18BF10F0040F16D1FB -+:1035700011F0100F1CBF94F83530002B02D094F8D6 -+:10358000373063B111F0080F1CBF94F82830002BBE -+:1035900005D111F0040F03D094F8291001B90122CC -+:1035A000657ADF4900234FF0010C35B100F00200CD -+:1035B000104314D0BDE8704038E6607F002814BF87 -+:1035C0004FF4C020D748D84A1060D1F8000220F04C -+:1035D0000300C1F80002A37284F80BC070BD012D76 -+:1035E00014D0022D18BFFFDF1CD0A07A01280CBF19 -+:1035F000CE48CF484FF47A7100F2E730B0FBF1F0DB -+:10360000216BBDE87040081A8C30C0E4D1F800028C -+:1036100020F00400C1F80002637284F80BC084F843 -+:103620000AC0E2E7D1F8000220F00800C1F8000269 -+:10363000637284F80BC00220A072D6E72DE9F84F20 -+:10364000BC4FD7F84C21B54CB7494FF00108A07AD0 -+:103650000026CAB1012802D0022803D014E0227D3E -+:1036600012B911E0627D7AB1A27EE37E08FA02F21D -+:1036700008FA03F31A430A60227F920002F18042A3 -+:1036800002F5C042C2F81065A26B0A60A663217BF6 -+:1036900029B1D7F84411012908BF012200D0002226 -+:1036A0009F4DD5F8101101290CBF402100210128A0 -+:1036B00005BFD5F80C31012B002320231943012825 -+:1036C00005BFD5F80431012B002310230B439A4981 -+:1036D000022804BFD1F800C0BCF1010F07D1D5F812 -+:1036E0000CC1BCF1010F08BF4FF0080C01D04FF026 -+:1036F000000C4CEA0303022804BF0968002905D125 -+:10370000D5F80C11012908BF042100D0002119436C -+:10371000022803D1002A18BF022200D1002211433F -+:10372000022804BFD5F80401012805D1D7F84401C7 -+:10373000012818BF012000D1002040EA01097F487C -+:10374000016811F0FF0F03D0D5F81411012900D042 -+:10375000002184F83410006810F0FF0F03D0D5F872 -+:103760001801012800D0002084F835007448006852 -+:1037700084F836007348006818B1FFF7AAF90128E9 -+:1037800000D0002084F83700C5F80061C5F80C614E -+:10379000C5F81061C5F80461C5F81461C5F8186171 -+:1037A000C5F82861684800680090C7F84461674818 -+:1037B00000684D46DFF898910090D9F80000E0626B -+:1037C000617F00291CBF801EE062624800682063A0 -+:1037D000A07ADFF884A102280CD1607850B1DAF821 -+:1037E000001009780840217831EA000008BF84F809 -+:1037F000288001D084F82860DFF8608115F0010F7F -+:1038000016D098F80010564A4908E06A52F821107C -+:103810008847012198F80020524B5208206B53F83A -+:103820002220904798F8000010F0010F0BD01FE005 -+:1038300015F0200F18BF0221ECD115F0020F18BFB0 -+:103840000021E7D1EEE7DAF80000062200F10901D5 -+:10385000A01C0AF0FDFA40B9207ADAF800100978C5 -+:10386000B0EBD11F08BF012000D0002084F8290050 -+:103870002846FFF773FE15F0020F05D03A4898F876 -+:10388000001050F82100804715F00C0F07D0374882 -+:1038900098F8001050F82110C5F3C000884715F0C3 -+:1038A000200F05D0324898F8001050F821008047CA -+:1038B00098F80000022805D105F06E00402806D1D6 -+:1038C00001F00BFB98F80000042828BFFFDFA07A66 -+:1038D000022818BFBDE8F88F207B002808BFBDE88C -+:1038E000F88FC7F84461022814D0012818BFFFDF01 -+:1038F000216B2069884298BFFFDF2069C9F800006A -+:10390000A06B1C4940F48000A0634FF48000086065 -+:10391000BDE8F88F2169206B0844EFE7900A00208A -+:10392000001000400000040408F50140F0FE010012 -+:10393000B0F8010000800040001400404016004034 -+:1039400008140040601500401811004044810040F8 -+:10395000448500404085004004150040A10000203F -+:1039600088E5010090E5010098E50100A8E5010067 -+:10397000B8E5010004F5014010B54A4808F0C3FC61 -+:103980000021484808F0EEFC0121464808F0BEFC42 -+:103990004549002081F822004FF6FF708884434992 -+:1039A0000880488010BD10B53E4808F0ACFC0021EE -+:1039B0003C4808F0D7FC01213A4808F0A7FC3A49F6 -+:1039C000002081F822004FF6FF7088843749088074 -+:1039D000488010BD704734498A8C824218BF7047B6 -+:1039E000002081F822004FF6FF70888470472D492F -+:1039F000016070472D49088070472B498A8CA2F5D9 -+:103A00007F43FF3B03D0002101600846704791F8D7 -+:103A100022202549012A1ABF016001200020704799 -+:103A2000214901F1220091F82220012A04BF00203F -+:103A30007047012202701D48008888841046704734 -+:103A40001A49488070471849184B8A8C5B889A42FB -+:103A500006D191F82220002A1EBF01600120704784 -+:103A6000002070471048114A818C5288914209D138 -+:103A70004FF6FF71818410F8221F19B100210170E7 -+:103A800001207047002070470748084A818C5288FF -+:103A9000914205D190F8220000281CBF00207047F9 -+:103AA00001207047F60A0020D00A0020A200002062 -+:103AB0007047514A012340B1012818BF7047137065 -+:103AC0000868906088889081704753700868C2F8D1 -+:103AD00002008888D0807047474A10B1012807D07B -+:103AE0000EE0507860B1D2F802000860D08804E09F -+:103AF000107828B19068086090898880012070470C -+:103B0000002070473C4910B1012803D006E04878F6 -+:103B100010B903E0087808B1012070470020704711 -+:103B200030B58DB00C4605460D2104A80AF055FAB3 -+:103B3000E0788DF81F0020798DF81E0060798DF8EF -+:103B40001D002868009068680190A8680290E868E5 -+:103B50000390684609F02EFA20789DF82F108842CD -+:103B60000CD160789DF82E10884207D1A0789DF87E -+:103B70002D10884202BF01200DB030BD00200DB0D5 -+:103B800030BD30B50C4605468DB00321E01CFEF774 -+:103B900032FB60790D2120F0C00040F040006071E0 -+:103BA00004A80AF01AFAE0788DF81F0020798DF841 -+:103BB0001E0060798DF81D002868009068680190EB -+:103BC000A8680290E8680390684609F0F3F99DF848 -+:103BD0002F0020709DF82E0060709DF82D00A070C1 -+:103BE0000DB030BD10B504460621FEF704FB607928 -+:103BF00020F0C000607110BDA600002070B5F94D26 -+:103C0000044695F88C000026012814D095F86A0027 -+:103C100001281CBF002070BD667012202070202279 -+:103C200005F16C01A01C0AF03FF90120A07185F894 -+:103C30006A60012070BD667017202070D5F88D0075 -+:103C4000C4F80200D5F89100C4F8060085F88C602D -+:103C5000EFE7E44890F86A10002914BFB0F86E004E -+:103C60004FF6FF70704770B5DF480178002918BF24 -+:103C70000C2601D0304670BDDA4D0026344685F85A -+:103C8000626085F8636085F8646085F8656085F832 -+:103C9000666085F85E6085F8606085F8566085F836 -+:103CA000366085F868607F21817095F8670028B1DB -+:103CB000FFF7C1FBFEF7EDFE85F8674085F86A4027 -+:103CC00085F88C40C94808F0C1F9C94808F0BEF928 -+:103CD000D0E770B5C44800240470017800291CBFE7 -+:103CE000FFDF70BDBF4D85F8624085F8634085F801 -+:103CF000644085F8654085F8664085F85E4085F843 -+:103D0000604085F8564085F8364085F868407F2148 -+:103D1000817095F8670028B1FFF78DFBFEF7B9FEBB -+:103D200085F8674085F86A4085F88C40AF4808F010 -+:103D30008DF9BDE87040AE4808F088B9A94890F800 -+:103D400062007047A74900B591F8580091F85710E4 -+:103D5000C0F38002C0F340031A4400F00100104495 -+:103D6000052910D2DFE801F00B070B030900A14978 -+:103D700031F8100000BDA04800BDA04900E0A049F6 -+:103D800031F8100000BDFFDF002000BD954840F273 -+:103D90007121B0F85A0048437047924890F8690082 -+:103DA000002818BF0120704710B5040016BF022C70 -+:103DB00000200120FFF7A6FE002808BF10BD89489B -+:103DC0000472012010BD874981F86000704710B56A -+:103DD000844C207A002816BF02280020012060723F -+:103DE00004F10A01FFF778FE207A022816BF0328A3 -+:103DF0000121002184F85F10082084F85D00607ABA -+:103E000004F10A02012804BF527912F0C00F0AD04F -+:103E100004F10A02012804D1507900F0C0004028C2 -+:103E200001D0002000E0012084F85E0029B994F858 -+:103E30005700012818BF042806D1207C04F1110185 -+:103E400007F0B2F984F85D004AF2B8102060FCF780 -+:103E5000CBFD606004F10A01644808F01DF9617A45 -+:103E6000624808F035F904F10A01614808F014F9D4 -+:103E7000617ABDE810405E4808F02AB970B5594C27 -+:103E8000417B84F85810017984F8571001290CBF40 -+:103E900000220288A4F85A20827B84F86920827963 -+:103EA000002A16BF022A002201222274D0F807201D -+:103EB000C4F81120B0F80B00A4F8150094F85600CF -+:103EC0000125002818BF84F8635094F836000028B4 -+:103ED00018BF84F8645005292DD2DFE801F00308EB -+:103EE000222708000021414808F0B3F824E001210E -+:103EF0003E4808F0AEF804F111013C4808F0DAF849 -+:103F0000207C20B1012818BFFFDF05D014E000217C -+:103F1000364808F0EAF80FE00121344808F0E5F8E7 -+:103F20000AE00621314808F094F805E002212F4804 -+:103F300008F08FF800E0FFDF04212D4808F089F831 -+:103F400084F86250002070BD70B5264C05460020F4 -+:103F500084F864002A4604F1170009F0A5FF84F8EC -+:103F60003650012084F8640070BD10B51D4C00224D -+:103F700084F8632084F85600024604F1370009F003 -+:103F800093FF012084F8630010BD164981F8680092 -+:103F90007047F0B5144E83B0307810BB114C94F8D4 -+:103FA0006200F0B1FFF7B8F9002584F86150757030 -+:103FB0002846FFF7AEF9FEF7E4FEFEF7C9FE11480A -+:103FC000FEF7C2FF1048FFF790F9FFF7D8F994F811 -+:103FD000580010F0010F1CD02520FEF7BDFF012670 -+:103FE00026E013E0180B0020B4000020B00B0020E6 -+:103FF000D80B0020D8E5010091891300E0E501000D -+:10400000D0E50100CBE50100C8E5010003B00C20BC -+:10401000F0BD10F0020F04D02620FEF79DFF02260F -+:1040200006E010F0040F03D02720FEF795FF0426CA -+:10403000FEF78EFE84F85C60FFF765F90121002031 -+:10404000FEF7FEFF0F210520FEF713FF94F85E0038 -+:10405000002804BF94F85F00002805D194F85700A9 -+:10406000012818BF04286ED1FCF7BEFC0646314675 -+:104070006068FDF7E2FDF949B0FBF1F701FB1700BD -+:1040800041423046FCF7C9FC60602068384420603B -+:1040900007F087F8216888426CD8C4E9005694F884 -+:1040A0005D0007F09DF8064694F85F0001270028A0 -+:1040B00018BF002E04D01021304607F0A1FD68B1D2 -+:1040C00094F8600000281CBF94F85E0000281AD005 -+:1040D000607A04F10A0101280DD011E0677204F141 -+:1040E0000A013046FFF74DFD94F85D1004F10A0017 -+:1040F00007F067F907E0487900F0C00040281BD0BE -+:104100000846FFF76FFD04F10A01D54807F0C4FF28 -+:10411000617AD34807F0DCFF04F10A01D14807F0C7 -+:10412000BBFF617ACF4807F0D3FF94F8570001280E -+:1041300018BF04281ED107E007F077F904F10A013F -+:10414000FFF71FFDDFE715E094F85D0007F051F879 -+:1041500006000FD0102107F053FD58B969463046CC -+:10416000FFF70FFD6946BE4807F0A4FF0121BC48D8 -+:1041700007F0BBFF617A04F10A00FEF76EFE94F8C7 -+:10418000570001281EBF042894F86300002808D0B7 -+:1041900094F8562004F13701B14807F0C4FF84F8C1 -+:1041A000635094F8640040B194F8362004F117018C -+:1041B000AC4807F0E4FF84F8645007F076F8AA48AA -+:1041C00007F0F0F884F86700FFF7AEF803B00020BE -+:1041D000F0BDA6494860704770B5A54C06002AD0CE -+:1041E00094F8582094F85C1022EA010010F0010FB6 -+:1041F00004D02520FEF7B0FE012515E012F0020FD5 -+:1042000002D011F0020F06D012F0040F0CD011F002 -+:10421000040F05D008E02620FEF79EFE022503E0ED -+:104220002720FEF799FE0425FEF792FD94F85C0026 -+:10423000284384F85C0094F8610040B194F857007A -+:10424000012808BFFFDFBDE8704000F067BA1EB16B -+:1042500002210020FEF7F4FE94F865008048FFF785 -+:1042600066F894F85700052809D2DFE800F0030348 -+:104270000309030001210846FFF71BF900E0FFDFF7 -+:1042800094F8580094F85C1030EA01014FF00100F6 -+:1042900002D07649087070BD94F85710012912BFFA -+:1042A00084F86100002184F85C10F2E710B5FFF794 -+:1042B00033F86E48007840B96D4890F8620020B13C -+:1042C0000020FFF789FF002010BDFFF797F8FFF7E8 -+:1042D00089F8FEF7ABFFFFF70EF8FFF725F80C2083 -+:1042E00010BD6249012048707047614981F866003D -+:1042F000704770B5002502F07AFE68B14FF49670F1 -+:10430000FEF742FE594E3078012809D0022801D02C -+:1043100003282ED0FFDF70BDBDE8704000F0FEB96D -+:10432000534C94F85700032823D094F8670018B131 -+:10433000FEF79BFBFFF76EF84B48FEF7F8FF94F88B -+:104340005700012818BF04280AD094F869000128F2 -+:1043500014BF0328102545F00E010020FFF7A9F82F -+:1043600094F86800012808BFFFF780F80220307039 -+:1043700070BDBDE8704001202EE770B53C4C3B4D50 -+:1043800094F8680001281FD094F8670018B1FFF76F -+:1043900052F8FEF77EFB02F02AFEF8B128780228D8 -+:1043A00018BFFFDF94F85700012804BF4FF41970BD -+:1043B000FEF7EAFD0120FFF70FFF287800281EBF57 -+:1043C00028780128FFDF70BD2A48FFF75AF8002837 -+:1043D00004BF7F20A870FFF73FF8D5E7BDE8704025 -+:1043E00000F09CB92DE9F05F07464FF00009FEF799 -+:1043F000A3FD1E4E82463078022818BFFFDF1C4DF9 -+:104400007F2495F8680001283BD0174807F040FE4C -+:1044100083464FF0FF08002F7ED0134807F03FFF80 -+:10442000002879D0FEF721FD002875D095F86700A7 -+:104430000D4F68B106F01EFF8046FF2808D00146E8 -+:10444000F81C06F0F6FE404606F01FFF40EA0A0A96 -+:1044500058464FF0010B06285ED20DE040420F0097 -+:10446000B00B0020D80B0020000C0020B40000206E -+:10447000180B0020B6000020DFE800F08888880CC8 -+:104480008857C848FEF7FDFF002808BFB470FEF744 -+:10449000E3FFBAE795F85700012818BF042875D044 -+:1044A000BAF1000F05D195F86900002818BF02285D -+:1044B0006CD195F86800012804BF95F88C0000289D -+:1044C00005D0B948FEF733FF0320307060E085F86F -+:1044D0008CB0B8F1FF0F0FD005F18E02511E40468F -+:1044E00006F090FE002808BFFFDF95F88D0040F031 -+:1044F000020085F88D000CE03878C0F3801085F854 -+:104500008D00D5F8EB00C5F88E00B5F8EF00A5F8E2 -+:10451000920005F1940700E038E0B0787F2808BFEA -+:10452000FFDFB0783870B470CBE73878297CC0F3FF -+:1045300080102C46884209D1062204F11101F81C92 -+:1045400009F086FC002808BF012000D0002094F864 -+:104550005D10414504D1B8F1FF0F18BF012100D112 -+:104560000021014394F85700012818BF042800D106 -+:1045700049B958B9BAF1000F05D194F8690000287B -+:1045800018BF012802D194F86600D8B14FF0010994 -+:1045900095F8670018B1FEF74EFFFEF77AFAB9F109 -+:1045A000000F1CBF0120FFF717FE307800281ABF4C -+:1045B00030780128BDE8F09F3078032818BFFFDF6E -+:1045C000BDE8F09F7068D4F8F710C0F80D10B4F88B -+:1045D000FB10A0F8111094F8FD10C174B97D01759D -+:1045E000B7F81710C182B7F819104180B7F81B103F -+:1045F0008180B7F81D10C1806C49083009F005FEB4 -+:1046000097F8240000F01F017068017697F82410D5 -+:10461000490980F8F41094F86A00002818BFFFDFF9 -+:104620004FF0000A204684F86CA074682188A0F836 -+:104630006E106188A0F88410A188A0F88610E18827 -+:10464000A0F8881094F8F41080F88A1090F85F10A1 -+:1046500049B1417A00F10A02012904D1517901F0EE -+:10466000C001402934D090F8601041B1427A00F185 -+:104670000A01012A04BF497911F0C00F28D0C0F8FF -+:1046800078A0A0F87CA039780546C1F38011617646 -+:10469000D0F8EB00C4F81A00B5F8EF10E183B8F1D8 -+:1046A000FF0F1CD0C5F87E00E08BA5F8820005F155 -+:1046B00072022F46511E404606F0A4FD002808BF96 -+:1046C000FFDF97F8710040F0020087F8710013E0F7 -+:1046D000D0F80A108167C189A0F87C10D3E734486C -+:1046E00009F08AFD617E85F87110D4F81A10C5F8BA -+:1046F0007210E18BA5F8761085F86AB086F800A0F4 -+:10470000FEF77CFEFEF76EFEFEF790FDFEF7F3FD72 -+:10471000FEF70AFE012002F076FD39E770B5FEF7DC -+:104720006DFEFEF75FFEFEF781FDFEF7E4FD214C16 -+:10473000002694F8670028B1FEF77DFEFEF7A9F980 -+:1047400084F867601C4D2E70FEF7EEFD94F857005C -+:10475000012804D0BDE87040002002F054BD0220C2 -+:1047600002F051FD94F86A00002818BFFFDF687856 -+:10477000002808BF70BD207C84F87100D4F81100B7 -+:10478000C4F87200B4F81500A4F876003C2084F850 -+:104790006C0068680088A4F86E00012084F86A0044 -+:1047A0006E7070BDB6000020D80B00201F0C0020DA -+:1047B000960B0020180B0020B40000202DE9F041DA -+:1047C000FA4F044600207978F94D4FF0010806466B -+:1047D00011B1012925D007E095F84D10002918BF27 -+:1047E00087F8018000D0012079782B2211FB02F19B -+:1047F000294491F8222010431AD02A22A01C2331E8 -+:1048000009F052FB66700420207084F802807878EA -+:104810002B2110FB01F0284480F822600120BDE824 -+:10482000F08195F82210002918BF7E70DBD1DBE7FC -+:1048300095F87800D0B1D5F87900C4F80200D5F821 -+:104840007D00C4F80600D5F88100C4F80A00D5F848 -+:104850008500C4F80E0095F88900A07466701120D8 -+:10486000207084F8028085F8786011E028780128AB -+:104870001CBF0020BDE8F08166701220207020224D -+:10488000A91CA01C09F010FBA6712E7085F8A86069 -+:104890000120BDE8F081C6480178002914BF808856 -+:1048A0004FF6FF7070472DE9F041C14C064694F871 -+:1048B0002200002818BFBDE8F081304607F0E8FB71 -+:1048C000014601250020072938D2DFE801F00A045B -+:1048D00007373737090084F8245009E0032000E047 -+:1048E000022084F8240004F12D01304607F031FC49 -+:1048F00084F82C0094F8AD0018B1FEF7EAF801280E -+:1049000020D0304607F0EDFB84F8250004F12601A5 -+:10491000304607F0C8FB00BFA44E04F14C073078C6 -+:104920007F2808BFFFDF307838707F20307084F830 -+:104930002250BDE8F041032001F0A2BC84F82C0015 -+:10494000BDE8F081FEF708F904F12602511E06F0D9 -+:1049500059FC002808BFFFDF94F8251041F0020140 -+:1049600084F82510D8E710B5002001F0F2FB904C38 -+:10497000A0B1FEF7C8FC00210120FEF761FB04F1A5 -+:10498000BC00FEF7D4FCD4F8B400FEF7D3FC94F8D6 -+:104990009C00032818BF02281FD022E0FEF72EFD3E -+:1049A000FEF720FDFEF742FCFEF7A5FC94F8AD00F3 -+:1049B00030B1FEF740FDFEF76CF8002084F8AD0042 -+:1049C000012084F8B800022084F8B000FEF7ACFCA7 -+:1049D000BDE81040002001F053BC01210020FEF78B -+:1049E00068FDFEF743FD94F8AD0018B1FEF73DF801 -+:1049F000FEF710FD032084F8B00010BD6C490028BC -+:104A0000B1F8BA202DD0FF2A0CD24FF6FF7000EA81 -+:104A10004200A1F8BA00FF2888BFFF2002D900BFDA -+:104A2000A1F8BA0061484268012A12BF002A0D228B -+:104A30004260D243C2EBC20303EB021291F8B930D9 -+:104A4000DB4303EB830CCCEB83131A444260900CE2 -+:104A5000B1F8BA20B0FBF2F302FB130081F8B90001 -+:104A60007047012ADED95008A1F8BA0008BF01201A -+:104A7000D8D1D5E770B54E4C94F8B000022819BFD4 -+:104A800094F8B0000128002005461CBF0C2070BD22 -+:104A90002B2101FB004181F82250401CC0B20228AA -+:104AA000F6D3257094F8AD0028B1FEF7C4FCFDF7ED -+:104AB000F0FF84F8AD5084F8A85084F8A95084F829 -+:104AC000AC50012084F89700394884F89C5084F851 -+:104AD000AF5040F2011120F8941F8170002070BD8A -+:104AE00070B5334C002584F8B050012684F8B060CE -+:104AF00094F8B00002281BBF94F8B00001280020F1 -+:104B0000FFDF18BF70BD2B2101FB004181F822504F -+:104B1000401CC0B20228F6D3257094F8AD0028B12D -+:104B2000FEF789FCFDF7B5FF84F8AD5084F8A85076 -+:104B300084F8A95084F8AC5084F897601C4884F835 -+:104B40009C5084F8AF5040F2011120F8941F8170FE -+:104B500070BD2DE9F041164C05460C2794F8B000C5 -+:104B600001281FBF94F8B00002280C20BDE8F08196 -+:104B7000FEF7D2FBFEF705F9FEF7EAF894F8940089 -+:104B80000126002801BF94F89500002894F89600AB -+:104B900000281CBF94F8A900002873D094F89C004A -+:104BA000032807D002280AD00DE00000BC00002036 -+:104BB000280C00200521FE4800F07BFE03E00321C5 -+:104BC000FB4800F076FE94F8AA00002804BF94F891 -+:104BD000AB0000283CD0FBF707FF07463946D4F866 -+:104BE000A400FDF72AF8F349B0FBF1F801FB180027 -+:104BF00041423846FBF711FFC4F8A400D4F8A000E6 -+:104C00004044C4F8A00006F0CCFAD4F8A0108842C2 -+:104C10001ED80020C4E9280794F8AB00002818BF6C -+:104C200006F0DBFB94F8AC0000281CBF94F8AA0047 -+:104C300000280DD094F88D0004F18E01012804D1D4 -+:104C4000487900F0C00040280ED00846FEF7CAFFA1 -+:104C500094F88D1004F18E00FEF7FFF894F8B00080 -+:104C60000027012817D106E006F0DFFB04F18E01D2 -+:104C7000FEF787FFECE784F8B860022084F8B00004 -+:104C800009E0FFE794F8B000022802BF84F8B060A2 -+:104C90000C20BDE8F08194F89700A0B194F89C0036 -+:104CA000032818BF06F022FBC34806F07BFB84F8FC -+:104CB000AD00C248C4F8B450FEF717FBFEF734FB52 -+:104CC0003846BDE8F08106F0F0FAEDE770B5FEF782 -+:104CD00023FBBB4C94F8B000022803D0FEF724FB62 -+:104CE0000C2070BD012084F8B900A4F8BA0002209D -+:104CF000FEF70FFBB348FEF727F9B34B002004F192 -+:104D0000940200BF94F8AF10491CA3FB015C4FEA6A -+:104D10005C0CACEB8C0C6144C9B284F8AF10895CBC -+:104D2000012907D0401CC0B20328EBD3FFF71BFEBC -+:104D3000002070BD94F8AF00A449085CFEF70CF9A0 -+:104D4000FEF706F8F2E710B5040016BF022C0020AB -+:104D50000120FEF7D7FE002808BF10BD98480021AB -+:104D600080F88C4080F8A910012010BD944981F88A -+:104D7000AC00704710B5924C94F88C00002816BF18 -+:104D800002280020012084F88D0004F18E01FEF736 -+:104D9000A3FE012084F8A90094F88C00022816BF15 -+:104DA00003280121002184F8AB1094F88D0004F150 -+:104DB0008E02012804BF527912F0C00F0AD004F10C -+:104DC0008E02012804D1507900F0C000402801D0A3 -+:104DD000002000E0012084F8AA00002804BF002978 -+:104DE00010BDFBF701FEC4F8A4004AF2B810C4F8E5 -+:104DF000A00010BD002816BF022801220022704921 -+:104E000081F8972081F89D00704770B56C4D0C4675 -+:104E100000280CBF0121002185F8971085F89E001D -+:104E20004FF0080085F89F000BD1002C1ABF022C10 -+:104E300001200020114606F0B7F985F89F000828E8 -+:104E400001D0002070BD022C14BF032C1220F8D119 -+:104E500070BD5B4A032808BFC2F8981082F89C0016 -+:104E600000207047564991F89C00032804D001287F -+:104E700018BF022807D004E091F89E00012808BF5F -+:104E800070470020704791F89D00012814BF032847 -+:104E90000120F6D1704710B5FEF7B0FAFEF7A2FA7E -+:104EA000FEF7C4F9FEF727FA454C94F8AD0030B18F -+:104EB000FEF7C1FAFDF7EDFD002084F8AD000120FA -+:104EC00084F8B800022084F8B000FEF72DFA002024 -+:104ED00010BD3B4981F8B100704710B5FEF78EFA5E -+:104EE000FEF780FAFEF7A2F9FEF705FA344C94F8C3 -+:104EF000AD0030B1FEF79FFAFDF7CBFD002084F83E -+:104F0000AD00012084F8B800022084F8B000FEF75C -+:104F10000BFABDE81040002001F0B2B92DE9F84FBE -+:104F2000274DFF2100247F27DFF8A48085F8AE10ED -+:104F3000002800F0D78205F1BC0007F080F930B9F5 -+:104F400005F1BC0007F09BF9002800F0CB8295F832 -+:104F5000B000194E052880F0C282DFE800F0F0F0C2 -+:104F6000F003EF00144807F093F888F8020095F872 -+:104F7000970028B9FDF7E0FF002808BF002400D003 -+:104F8000012495F8AD0070B106F074F985F8AE0013 -+:104F9000FF280CD00146F01C06F04BF995F8AE0046 -+:104FA00006F073F9044395F8AE00FF281ED111E016 -+:104FB0000C0D002040420F00E40C0020E8E5010049 -+:104FC000280C0020EEE50100ABAAAAAAEBE501003F -+:104FD000BC00002095F8970098B195F89C00032834 -+:104FE00004D006F0D4F900BF85F8AE0098F80200AE -+:104FF000072880F0B181DFE800F03FAA07FCFCFC45 -+:10500000240006F092F9EFE795F8AD0018B1FEF72D -+:1050100012FAFDF73EFDFE48FEF733FA002808BFFE -+:1050200088F80070FEF718FA002C00F03F8195F820 -+:105030009C00012818BF022840F03881FEF7F6F8DE -+:1050400068E095F8AD0018B1FEF7F5F9FDF721FD20 -+:10505000EF48FEF716FA002808BF88F80070FEF740 -+:10506000FBF9002C00F0228195F89C0002284AD020 -+:1050700001284FD000F01AB995F8AD0018B1FEF72D -+:10508000DAF9FDF706FDE248FEF7FBF9002808BF54 -+:1050900088F80070FEF7E0F9002C00F0078195F821 -+:1050A0009C0002282FD0012834D003281CBFFFDF2A -+:1050B000BDE8F88FF178D5F89800827E91421BD137 -+:1050C0003179C27E914217D17179027F914213D119 -+:1050D000B179427F91420FD1F179827F91420BD118 -+:1050E000317AC27F914207D13178427EC1F380117B -+:1050F000914208BF012100D0002195F89E20012A8D -+:105100000ED0E9B1CEE0C348FFF7CDFBBDE8F84FC4 -+:1051100000F0F4BABF48FFF7C6FBBDE8F84F22E441 -+:10512000002967D100F11A01BA4806F0BCFFB9485E -+:1051300006F0D7FFD5F898104876B3E01BE1CEE132 -+:1051400095F8AE0095F89F1088427DD1AAE095F8B9 -+:10515000AD0018B1FEF76FF9FDF79BFCAC48FEF708 -+:1051600090F9002808BF88F80070FEF775F995F8E7 -+:10517000AB0000280CBF4FF0010B4FF0000B4FF0BD -+:105180000009307806F10901C00907D0487900F01C -+:10519000C000402808BF4FF0010A01D04FF0000ABC -+:1051A00095F89C00032806D195F89700002818BFB1 -+:1051B00095F89F0001D195F8AE0006F011F8009027 -+:1051C00078B1102106F01CFD002818BF4FF0010B2C -+:1051D000BAF1000F05D006F109010098FEF7A0FC16 -+:1051E000814695F89C0003280FD0FEF71FF864B3A2 -+:1051F00001E0B1E056E0FDF738FE50EA09005BD06F -+:105200008448FFF750FB00F03EB9D5F89800F178DC -+:10521000827E91421ED13179C27E91421AD171793A -+:10522000027F914216D1B179427F914212D1F17938 -+:10523000827F91420ED1317AC27F91420AD1317878 -+:10524000407EC1F3801101E030E035E0814208BFCB -+:10525000012600D00026B9F1000F05D1BBF1000FE7 -+:1052600004D0FDF702FE08B1012200E0002295F80B -+:105270009E00012801D010B10AE03CB908E02EB927 -+:1052800095F8AE1095F89F30994201D1012100E0C8 -+:1052900000210A420AD0012804BF002ED5F8980048 -+:1052A0003FF440AFBDE8F84F00F089BAFDF7BEFF0C -+:1052B000BDE8F84FFFF757BB95F89D00032818BFCE -+:1052C00002287DD1BAF1000F7AD0B9F1000F77D161 -+:1052D000504E95F87800002872D1012485F87A4064 -+:1052E00095F8AD0018B1FDF7F4FB012823D0304646 -+:1052F00006F0F7FE85F87B0005F17C01304606F0EC -+:10530000D2FE304606F0FAFE85F8820005F18301F0 -+:10531000304606F0D6FE98F8000005F189067F2891 -+:1053200008BFFFDF98F80000307088F8007085F83B -+:1053300078400320A5E0FDF70FFC05F17C02511E2B -+:1053400005F060FF002808BFFFDF95F87B0040F004 -+:10535000020085F87B00D4E795F8AD0018B1FEF7A0 -+:105360006AF8FDF796FB2A48FEF78BF8002872D101 -+:1053700088F80070CFE0274806F08AFE88F802001F -+:105380002548F178427A91421ED13179827A914250 -+:105390001AD17179C27A914216D1B179027B9142C8 -+:1053A00012D1F179427B91420ED1317A827B9142C6 -+:1053B0000AD131780078C1F38011B1EBD01F00E041 -+:1053C0004AE008BF012600D00026FDF72FFF98F81D -+:1053D000020004286DD1EEB30D48FEF752F8002804 -+:1053E00008BF88F80070FEF737F895F8B800002875 -+:1053F0001CBF0020FFF702FB4FF0010985F8B890B1 -+:10540000044E95F84D0038BB042085F84F0005E0A8 -+:10541000BC000020E40C00200C0D002095F8AD002D -+:10542000A6F1910418B1FDF754FB01282FD03046A6 -+:1054300006F057FEFE4981F8500004F1260130467F -+:1054400006F031FE05F15801304606F0AEFE85F853 -+:10545000570002E02DE05EE015E01F2884BF1F200A -+:1054600085F8570005F1770498F800007F2808BFF9 -+:10547000FFDF98F80000207088F8007085F84D90E4 -+:10548000042000F0FDFEBDE8F84FFFF76CBAFDF711 -+:1054900063FB04F12602511E05F0B4FE002808BF8C -+:1054A000FFDFE34890F8500040F0020084F8250048 -+:1054B000C8E7E048FDF7E5FF002808BF88F800705E -+:1054C000FDF7CAFF95F8B800002804BF0120FFF7D8 -+:1054D00095FA85F8B840BDE8F84FFFF744BAFFDF0A -+:1054E000BDE8F88F95F8B000052828BFBDE8F88F13 -+:1054F000DFE800F0030303041900F1E795F8AD00BD -+:1055000018B1FDF798FFFDF7C4FACA48FDF7B9FFD7 -+:1055100000283FF42DAFFDF79FFFFDF787FEBDE8A4 -+:10552000F84FFFF720BAC348FDF7ABFF002808BFCC -+:1055300088F80070FDF790FF95F8B800002804BFC8 -+:105540000120FFF75BFA85F8B840FDF76FFEBDE874 -+:10555000F84FFFF708BA70B5B54C94F8B0000728BB -+:1055600070D2DFE800F08585858585040D00B2489E -+:10557000FDF7DDFEFDF77AFF042084F8B00070BD72 -+:10558000FDF73CFFFDF72EFFFDF750FEFDF7B3FEE4 -+:10559000012584F8B850022084F8B000FDF7C4FE5D -+:1055A0002078002818BFFFDF0026A670D4F89800E6 -+:1055B0000188A180418861838188A183C088E083BC -+:1055C00094F8B10084F8200094F8AB109B4849B1DE -+:1055D0000178C21CC1F3801121B1517901F0C001E1 -+:1055E000402927D094F8AC1041B110F8031BC1F347 -+:1055F000801119B1407910F0C00F1BD0904808F00D -+:10560000FBFD00BF94F8AD0018B1FDF762FA012868 -+:1056100019D0D4F89800417EE171D0F81A10A16039 -+:10562000C08BA081666126832570BDE87040022092 -+:1056300000F026BED4F8E700C4F80E00B4F8EB0082 -+:105640006082DFE714E0FDF787FA04F10802E11D4C -+:1056500005F0D8FD002808BFFFDFE07940F0020028 -+:10566000E071D4F8BF006061B4F8C3002083DBE7C9 -+:10567000FFDF70BD70B56E4C94F8B00000250528B2 -+:1056800028BF70BDDFE800F03939391B03006948D5 -+:10569000FDF7F7FE10B967497F200870FDF7DCFEC3 -+:1056A00094F8B800002804BF0120FFF7A7F984F898 -+:1056B000B850FDF7BBFDBDE87040FFF754B9FDF7EA -+:1056C0009DFEFDF78FFEFDF7B1FDFDF714FE94F88A -+:1056D000AD0028B1FDF7AFFEFDF7DBF984F8AD5062 -+:1056E000012084F8B800022084F8B000FDF71CFE09 -+:1056F000BDE87040002000F0C3BD70BD70B5012052 -+:1057000000F027FD4A4CC8B104F1E401A1F12800E2 -+:1057100006F0F7FC04F1E40694F88D10304606F02C -+:10572000D7FC04F18E01304606F0B6FC94F8AB00CD -+:10573000C0B394F89C0003281FD025E0FDF75EFE5F -+:10574000FDF750FEFDF772FDFDF7D5FD94F8AD00B5 -+:1057500030B1FDF770FEFDF79CF9002084F8AD0034 -+:10576000012084F8B800022084F8B000FDF7DCFDC9 -+:10577000BDE87040002000F083BD94F89700002839 -+:1057800018BF94F89F0001D194F8AE0005F04FFEC9 -+:10579000050007D00121304606F09AFC2946304624 -+:1057A00006F07AFC2548FDF7C2FD01210846FDF709 -+:1057B00080FEFDF7E4FD052084F8B00070BD2DE902 -+:1057C000F041022000F0C5FC194C0126E0B1012097 -+:1057D00000F056FD04F1E401A1F1280006F091FC6F -+:1057E00004F1E40794F88D10384606F071FC04F1DA -+:1057F0008E01384606F050FC94F8AB00B8B194F82E -+:105800009C0003282AD030E0FDF7F8FDFDF7EAFD03 -+:10581000FDF70CFDFDF76FFD94F8AD0030B1FDF71D -+:105820000AFEFDF736F9002084F8AD000AE02AE010 -+:10583000280C0020BC000020E40C00200C0D0020EF -+:10584000360C002084F8B860022084F8B000FDF720 -+:105850006BFDBDE8F041002000F012BD94F8970008 -+:10586000002818BF94F89F0001D194F8AE0005F00D -+:10587000DEFD050007D00121384606F029FC294647 -+:10588000384606F009FCD4F89800C18A334806F07F -+:10589000B8FCD4F89800017D304806F0B6FC2F48DB -+:1058A000FDF745FD84F8A860062084F8B000BDE847 -+:1058B000F08170B50C46054606F0C8FB032C47D0B6 -+:1058C000052C18BF70BD0521284606F0C2FB244CEC -+:1058D000D4F8980000F10D01284606F07CFCD4F8BD -+:1058E000980000F11101284606F079FCD4F89800E0 -+:1058F000017D284606F089FCD4F89800C18A284624 -+:1059000006F07FFCD4F898004188284606F06DFC2C -+:10591000D4F898008188284606F06BFCD4F89800EB -+:10592000C188284606F069FCD4F8980000F1080107 -+:10593000284606F081FCD4F89800017E284606F03F -+:1059400066FC94F8B1102846BDE8704006F069BCCA -+:105950002846BDE87040032106F07BBB0C0D0020FB -+:10596000280C00202DE9F047FA4E054684B096F841 -+:1059700000040C46DFF8E0A340099AF80014490936 -+:10598000884218BFFFDF96F800044009F34991F8F8 -+:1059900000144909884218BFFFDFF14F6E1E07F15E -+:1059A0003C0909EB45054FF00008092C80F0CF8039 -+:1059B000DFE804F005444E4E49CDCDCD7A000B2EE4 -+:1059C000A8BFFFDF35F8020C0621F9F76AF90400D9 -+:1059D00008BFFFDF0B2EA8BFFFDF35F8020C2188C0 -+:1059E000884218BFFFDF94F8C000002808BFFFDF1F -+:1059F000C7F80480A7F8028021460020C7F810806D -+:105A000006F02AFA616A9830814284BF081A00F1D0 -+:105A10008D0821460020C7F8088006F01DFA61882D -+:105A200040F2E24251439830081AA0F20F30F86079 -+:105A300004B02046BDE8F04702F0FEBB04B0BDE86C -+:105A4000F04702F078BC04B0BDE8F047FDF7F6BDC2 -+:105A50009AF8140DC349400991F800144909884285 -+:105A600018BFFFDF0B2EA8BFFFDF35F8020C0621A1 -+:105A7000F9F717F9040008BFFFDF0B2EA8BFFFDFFF -+:105A800035F8020C2188884218BFFFDF002201236D -+:105A90002146684600F0CEFC94F8CA006946FBF740 -+:105AA00034F904B0BDE8F0870B2EA8BFFFDF35F84E -+:105AB000020C0621F9F7F5F8040008BFFFDF0B2EF2 -+:105AC000A8BFFFDF35F8020C2188884218BFFFDF2E -+:105AD00094F8C000042818BFFFDF84F8C08094F851 -+:105AE000CA504FF6FF76681E0B28A8BFFFDF09EBF0 -+:105AF000450020F8026C94F8CA00FAF75FFF84F8BA -+:105B0000CA80D4F8D000002804BFD4F8CC00786153 -+:105B100008D0D4E935121144826911448161D4E975 -+:105B20003301C860D4F8CC0000281CBFD4F8D010D2 -+:105B3000016105D1D4F8D000002818BFC0F8188042 -+:105B40008948007804B0BDE8F047F4F7B3B9FFDF47 -+:105B500004B0BDE8F0872DE9F047844D0746E88B97 -+:105B60006C68401CE88328784FF00008002808BFC4 -+:105B7000FFDF07D0DFF8E8A1042814D0052818BFFC -+:105B8000FFDF40D021462869FAF747FFB86087F861 -+:105B9000008001203871A86800F22710F86028788A -+:105BA00004287CD185E00029ECD02E69DAF81410A5 -+:105BB00039B38946C9680029FBD1B9F1000F20D05B -+:105BC00099F80000002808BFFFDFD9F81410D9F8B1 -+:105BD000040001443046FCF730F8002807DA211AA7 -+:105BE0004A1E92FBF4F202FB0406214604E090FBFD -+:105BF000F4F202FB140621468E4288BFFFDF3446D2 -+:105C0000C0E74446BEE70029BCD0D5F81890B9F1EA -+:105C1000000F08BFFFDF0026D9F8D410DAF81440CF -+:105C20003046721E5CB1A069884228BF824284BFA0 -+:105C3000024626462046E468002CF4D106B9064602 -+:105C400009F1C004C9F8D060002E04BFC4F80C806C -+:105C5000CAF8144005D0F068F460E060002818BF6E -+:105C60000461D4F81090C4F81880B9F1000F0ED078 -+:105C7000D9F8180048B1D4F814A0504538BFFFDF58 -+:105C8000D9F81800A0EB0A00A061C9F81880002E0E -+:105C900008BFC5F8208009D03078002800E00DE06A -+:105CA00008BFFFDF716970680844286240F6B834A5 -+:105CB00068E7E88B0A2838BF032000D302207871F8 -+:105CC000E88B012806D93846696806F08AF8E98B1E -+:105CD0000844E883B8682861BDE8F0872DE9F04101 -+:105CE0001C4C804684B094F800040E461A4F4109BB -+:105CF00097F800044009814218BFFFDF94F80004C0 -+:105D00004009164991F800144909884218BFFFDF7D -+:105D100000250122092E154C65D2DFE806F0052981 -+:105D200042423D6464185500627322736078002813 -+:105D30001CBF04B0BDE8F0810948456005612573CA -+:105D4000A068CD38FEF705FF002818BFFFDF04B0BC -+:105D5000BDE8F08101E000E00BE000E018E000E0C9 -+:105D6000340D002019E000E0C40000204C0D00209C -+:105D7000607850B1207B002808BFFFF78CF865736E -+:105D800004B0BDE8F041FAF75EBDA273FEF79EFFD6 -+:105D9000002818BFFFDFDAE704B0BDE8F041FDF7E7 -+:105DA0004DBC97F8140DF849400991F800144909C1 -+:105DB000884218BFFFDF00216846FFF7CCFE694626 -+:105DC0004046FAF7A2FFC2E72078052818BFFFDF98 -+:105DD000207F002808BFFFDF25772570207DFAF798 -+:105DE000EDFD2575B3E7FFDFB1E72DE9F041E74CA5 -+:105DF00084B00025207804281FBF207805280C20B7 -+:105E000004B018BFBDE8F08101276770607B0026F1 -+:105E100090B172B6607B00281CBFA07B002805D023 -+:105E2000FFF739F86673A673FAF70DFD62B6207DA9 -+:105E3000FBF78FFFD0B913E094F8148003208DF89E -+:105E400004008DF80500FAF7CFFD02904FF0FF3007 -+:105E500003908DF8007069464046FAF756FFE6E772 -+:105E600020BF207DFBF775FF0028F9D0207F28B1E7 -+:105E700026772078052818BFFFDF0C25667026706E -+:105E8000207DFAF79BFD267504B02846BDE8F08119 -+:105E90002DE9F047BD4884B00078002818BFFFF70F -+:105EA000A4FF0120BA4E307069460620F8F785FE3F -+:105EB000002818BFFFDF00254FF6FF7718E0029893 -+:105EC00000281CBF90F8C010002911D00088B842EB -+:105ED00018BFDFF8C08245D00621F8F7E2FE0400C3 -+:105EE00008BFFFDF94F8CA00FBF733FF68B905E08D -+:105EF0006846F8F740FE0028E1D033E020BF94F870 -+:105F0000CA00FBF726FF0028F8D084F8C05094F8A8 -+:105F1000CA904FF6FF7AA9F101000B28A8BFFFDF56 -+:105F200008EB490020F802AC94F8CA00FAF746FDE5 -+:105F300084F8CA5069460620F8F73FFE002818BFCB -+:105F4000FFDF0AE0029800281CBF90F8C01000296B -+:105F500003D00088B842BFD104E06846F8F70BFED2 -+:105F60000028EFD03570756104B00020BDE8F087DF -+:105F700010B50078884C60B101280CBF40F6C41001 -+:105F8000FFDF06D0A06841F66A01884228BFFFDF24 -+:105F900010BDA060F6E710B57F4C002320707B4851 -+:105FA00003704370037703734373837383610375D3 -+:105FB000183843703C304FF6FF7101800522418054 -+:105FC00020F8041F521EFAD1180008BFA36005D0A4 -+:105FD000002B0EBFFFDF40F6C410A060A06841F6A2 -+:105FE0006A01884228BFFFDFBDE8104050E770B566 -+:105FF000664C0E4684B02178154600291EBF0C2041 -+:1060000004B070BD416A01F29731C0F8D410A061AC -+:1060100090F8C000002818BFFFDF40F2712006FB97 -+:1060200000F168430A30C4E90110A1F53D718842CE -+:1060300088BF0846A06056490020086105212170EC -+:1060400060702077E0835548FAF768FC20750028D7 -+:1060500008BFFFDFFAF7C8FC206101216846FFF79F -+:106060007AFD207D6946FAF750FE04B0002070BD2D -+:106070004648007800281CBF0020704710B5062055 -+:10608000F8F7ACFD80F0010010BD10B53F4C84B0B6 -+:106090002278002A1EBF0C2004B010BD40F27122ED -+:1060A000424340F2712048430A30C4E90120A2F57E -+:1060B0003D71884298BF01460020A16060700421B4 -+:1060C0002170E0833548FAF729FC2075002808BFC5 -+:1060D000FFDFFAF789FC40F6B831FAF79EFC206141 -+:1060E00001216846FFF737FD207D6946FAF70DFE6E -+:1060F00004B0002010BD70B5244CA1690160FFF709 -+:1061000074FE002300BBA169D1F8D0205AB1D1E9B7 -+:1061100035C5AC449569AC44C2F818C0D1E9332CFC -+:10612000CCF80C2005E0DFF868C0D1F8CC20CCF822 -+:106130001420D1F8CC20D1F8D010002A18BF11615A -+:1061400002D1002918BF8B61A36170BD104948704E -+:1061500070470F4910B54968002801F1980408BF3D -+:1061600004F5BC7409D0012808BF04F5317404D0CB -+:10617000022814BFFFDF04F5B07404488068A04211 -+:106180008CBF0120002010BD19E000E04C0D002064 -+:10619000340D0020700D0020C4000020DD5C0100E3 -+:1061A00010B5FB4C607828B1D4E90201626805F0B3 -+:1061B0003FFEA060D4E9010188429CBF20780028FE -+:1061C00014BF0020012010BD042210B584B00029A6 -+:1061D00038D0012901BF032180F8C01004B010BDE0 -+:1061E000022928D003291EBFFFDF04B010BD0446DA -+:1061F000408840F2E2414843E6490860D4F8E400B0 -+:106200000089E082D4F8E40080792075D4F8E400B5 -+:1062100040896080D4F8E4008089A080D4F8E4004C -+:10622000C089E0802046616A05F070FE022084F893 -+:10623000C00004B010BD80F8C02004B0BDE810401C -+:10624000FAF701BB0446D2480078002818BF84F84A -+:10625000C02004D004B0BDE81040FAF7F4BA01221F -+:1062600000232146684600F0E5F894F8CA00694624 -+:10627000FAF74BFDB4F85000401CA4F85000E9E7D1 -+:106280002DE9F041C44F0025C44C397884B005286D -+:1062900080F0B780DFE800F0031363AFAF00E58361 -+:1062A0000846F3F707FE6078002869D100216846A8 -+:1062B000FFF751FC207D6946FAF727FD60E0DFF823 -+:1062C000D082206940F2E243D8F804100844A16962 -+:1062D00000F251604A88C03102FB03F5D8F814205F -+:1062E0008A4208BF002614D0216AFBF7A6FC0028CA -+:1062F00007DA291A4A1E92FBF5F202FB0506294627 -+:1063000004E090FBF5F202FB150629468E4288BF99 -+:10631000FFDFB868864208D2A06940F27122418846 -+:10632000C1824A4306EB420605E040F2E240B6FB7A -+:10633000F0F0A169C882A06905210175C08A6FF4D7 -+:106340001C71484306EB400040F63541C8F8100088 -+:10635000B0EB410F28BFFFDF04B0BDE8F081E5835B -+:106360000846F3F7A7FD01202077A0692169C0F84E -+:10637000C41080F8C0502178052918BFFFDF06D06F -+:10638000FAF761FA6573A57304B0BDE8F0810028DF -+:1063900008BFFFDFA06990F8C000002818BFFFDF2A -+:1063A000A06990F8CA00002818BFFFDF7C48FAF700 -+:1063B000B5FAA169064681F8CA000F88401E0B286D -+:1063C000A8BFFFDF774800EB460020F8027CA069F9 -+:1063D00090F8CA00002808BFFFDF002301226846AA -+:1063E000A16900F027F8A069694690F8CA00FAF799 -+:1063F0008CFCA561C4E704B00846BDE8F041F3F7A2 -+:1064000059BDFFDF04B0BDE8F081704700B5604AB8 -+:1064100059B1012908BF401E07D002291CBFFFDF68 -+:1064200000BD5188491C5180C01F506000BD5B48B1 -+:10643000007870472DE9F05F05460C46488840F229 -+:10644000E24100FB01FBE08A002600FB01FA94F820 -+:106450005B0099461746082816BF07284FF0010829 -+:106460004FF00008B9F1000F03D00121204602F0DF -+:1064700046F894F8C00040B101282FD0022815D06A -+:10648000032818BFFFDF29D038E0002F08BFFFDF47 -+:106490003F4E7068002808BFFFDF70683169C01D7B -+:1064A00008440AF25D414618012014E0DFF8E0B02C -+:1064B000791EDBF80400084308BFFFDF3548006899 -+:1064C00000EB0A0637B1DBF8040000F20F30B042EF -+:1064D00088BFFFDF032084F8C0000EE05E4667B18E -+:1064E0002B4F786818B97888002818BFFFDF7868C4 -+:1064F00000F20F30B04288BFFFDF06B9FFDF314640 -+:10650000D4F8C400FAF789FAC4F8C400A8600020DF -+:10651000287001272F71204602F0D2F8A8F101015E -+:10652000084208BF6F7106D094F8C00001280CBF64 -+:10653000022003206871606A00F5E570E86039EABE -+:10654000080008BFBDE8F09F3146284605F049FC29 -+:106550001FFA80F8204602F0B3F840450FD8804675 -+:106560006F7106FB08F1D4F8C400FAF756FAA86078 -+:106570003146284605F035FC40441FFA80F8414674 -+:10658000204601F0BCFFA868C4F8C400BDE8F09F35 -+:10659000340D0020C8000020C40000204C0D002055 -+:1065A00065590100700D0020F948C07E7047F94818 -+:1065B00040687047F848C07E70472DE9FF4FF44FA0 -+:1065C00083B05FEA0309786A3C6805682069009037 -+:1065D000B5F8D6A0D7F820801CBF94F83400002866 -+:1065E00003D007B00220BDE8F08FB5F85010059831 -+:1065F000401A1FFA80FBB9F1000F19BF04F13806E9 -+:1066000004F148003E1D05F1D000019003203071D7 -+:106610000398002834D0012800F0E28002287FD0BF -+:10662000032818BFFFDF00F0198100BFB9F1000F88 -+:106630001EBF30790328FFDF616A7869FAF7EDF948 -+:10664000B060D4E90710814287BF019908600198C2 -+:1066500001600198696A0068084400F24F10F06018 -+:10666000B5F8C0100598081A00B2002840F335812B -+:106670000398022818BF032040F0308100F02DB9A4 -+:10668000B8F1000F08BFFFDFE98A40F271204843EC -+:1066900040F2E24101EB400204990020002906D0BB -+:1066A000BE4801FB02F1B1FBF0F000F101006061B6 -+:1066B000698840F2E24201FB02F3049A4FF00001C4 -+:1066C00006D0B64902FB03F2B2FBF1F101F1010180 -+:1066D000A16108F101016162EA8A40F2712302FBC3 -+:1066E00003F2C0EB420202F237420A446262297DA1 -+:1066F00040F2E24311FB03F101EB400000F2151000 -+:10670000E0612062A2EB0800A549A0F10100091890 -+:106710008CD2B0F5387F00E002E098BFFFDF57E091 -+:10672000E98A40F271226068514300EB410204980B -+:106730000021002806D000FB02F19848B1FBF0F0E0 -+:1067400000F101016161688840F2E24100FB01F261 -+:1067500004994FF0000006D0904801FB02F1B1FB14 -+:10676000F0F000F10100A061B8F1000F08BFFFDFF9 -+:10677000BAF1000FE98A40F27122606801FB02F170 -+:1067800000EB4100616918BF401A24D06062A26822 -+:106790002168606901FB0200297D40F2E24211FBA1 -+:1067A00002F101EB400000F21310E0616988521021 -+:1067B000A0695143C0EB4100A0F547702062606AB8 -+:1067C000A0EB0800A0F5AA7176484018BFF42EAFE0 -+:1067D000012030712AE7411A00980844D338D5E7E0 -+:1067E000BAF1000F08BFFFDF698840F27122514300 -+:1067F000A0690AEB0B02C0EB410101FB0BF16162E6 -+:10680000A368D4F814C0D21AD4F800A0521E0AFB10 -+:1068100003C302FB00302A7D40F2E24312FB03F285 -+:1068200002EB400000F21310E061A1F54770206216 -+:106830005D48406800283FF4F9AE4FF0010AB8F116 -+:10684000000F08BFFFDF606AA0EB0800A0F5AA7187 -+:106850005448401838BF86F804A0E7E6698840F23B -+:106860007122A0695143C0EB410000FB0BF0606254 -+:106870000098BAF1000F25D0002818BFFFDF0AEBFF -+:106880000B00A1690022484302EB400000F2131004 -+:10689000E061688840F271225043C1EB4000A0F5EE -+:1068A000477020624048406800283FF4BFAE616AEC -+:1068B0000120A1EB0801A1F5AA723A49891838BF55 -+:1068C0003071B3E6002814BFB8F1000FFFDF616A32 -+:1068D0000098D33808446062D1E7002070711098A6 -+:1068E00080B3B5F8E81000290CBF0020B5F8EA0025 -+:1068F000A5F8EA0095F8EC20401C504388420AD2E3 -+:106900007079401E002806DD01207071B5F8EA009C -+:10691000401CA5F8EA0086F80090B9F1000F1CBFF2 -+:1069200094F8340000287FF45CAE89F0010084F80C -+:106930003500387FF97EBA7E914219D03146FAF798 -+:10694000E4F91AE0FFE7698840F27122A069514337 -+:10695000C0EB4101304605F044FA0004000CDAD0E7 -+:106960001199002918BF0880012007B0BDE8F08FF9 -+:106970000020F876B8763860786207B00020BDE86D -+:10698000F08F70B5084D0929D5E9003270D20DE0BD -+:10699000880D0020E8000020B00D002040420F00CC -+:1069A000DBF7FFFFF4F8FFFFD8000020DFE801F07D -+:1069B000056178807493935D8F0000201062D17E12 -+:1069C000042953D2DFE801F05252024A516A0C689E -+:1069D0001168C88111680861106890F8350040B9E5 -+:1069E000FAF702F869680968096CFBF726F90028CC -+:1069F0001BDC686801684A8EB4F850108A4207D1DF -+:106A0000B4F8C420511AA4F8C610A4F8502006E027 -+:106A1000511AA4F8C6100168498EA4F850100268F3 -+:106A2000C1681164C168416113E068680168098E3A -+:106A3000B4F85020891AA4F8C6100168098EA4F889 -+:106A4000501001680A6CC2600A6C4261886CC4F81C -+:106A5000D0002046BDE8704003F086B9D068506190 -+:106A6000FDF797FA002818BFFFDF70BDFFDF70BD8C -+:106A700031E0D07E04280DD2DFE800F00C0C0206D5 -+:106A8000BDE8704003F086BAFDF710FC002818BF7F -+:106A9000FFDF70BDFFDF70BDBDE87040FCF7CEBD0D -+:106AA000D87E02280FD0D87E032818BFFFDF06E06B -+:106AB000D87E022807D0D87E032818BFFFDFBDE8A4 -+:106AC000704000F023BCBDE8704000F077BCBDE82A -+:106AD0007040F9F773BFFFDF70BD2DE9F047002666 -+:106AE000F74DF84F82460C464FF0010909295CD258 -+:106AF000DFE801F005495454495B5B545400686871 -+:106B0000DFF8C083002818BFFFDF21465046C5F8D4 -+:106B10000480FFF736FFF87E022818BFBDE8F08733 -+:106B20006868D0F80080406A0568F9F740FF6A8815 -+:106B300040F271235A43D8F81810B728C1EB42012C -+:106B4000A1F1AB0A8CBF0446B7242946012005F009 -+:106B500083F92044AAEB0000A0F201342946012069 -+:106B600005F07AF9696A9C30814288BF0E1AC8F82C -+:106B70002C40A64238BF3446C8F82840386880F810 -+:106B80003490BDE8F0875046FFF7FBFEF87E022800 -+:106B900004BF386880F83490BDE8F08750462F6015 -+:106BA000FFF7EFFE2E60BDE8F087FFDFBDE8F0875E -+:106BB0002DE9F041C24C07460D4609291ED2DFE8F7 -+:106BC00001F005101414101D1D1414006068BE4E51 -+:106BD000002818BFFFDF294638466660BDE8F0414F -+:106BE000CFE63846BDE8F041CBE6B74820603846EE -+:106BF000FFF7C7FE00202060BDE8F081FFDFBDE8A1 -+:106C0000F081F0B5AF4985B00026CA7EAC4C032AAE -+:106C100003D02831CA7E032A64D10025216000B345 -+:106C2000012806BF03208876FFDF0AD02068002EE7 -+:106C300005604562256055D0A448456005B0002038 -+:106C4000F0BD2068C17E29B1C17E827E914208BF1D -+:106C500020BFF6D0C17E00290CBF01260026857614 -+:106C6000E4E70026032708468F76C97E032904D06F -+:106C7000C07E002808BF012631E00120FDF735FB6A -+:106C80002068007F002808BFFFDF2068067F8DF89E -+:106C900004708DF80570F9F7A7FE02904FF4FA70B2 -+:106CA000039001208DF8000069463046FAF72DF870 -+:106CB0002068007FFBF74DF830B920BF2068007FC7 -+:106CC000FBF747F80028F8D02068007FF9F776FE38 -+:106CD00020680577C57685760560012645622068BF -+:106CE0008576A3E705B00C20F0BD10B5754800F01F -+:106CF000EDFB754800F0EAFB754900200873734905 -+:106D000048707049486101F1280250618876907698 -+:106D10006B494860086010BD2DE9F0416D4E054695 -+:106D200096F800046C4C400994F800144909884214 -+:106D300018BFFFDF96F800044009684991F8001475 -+:106D40004909884218BFFFDF94F8140D40096449CF -+:106D500091F800144909884218BFFFDF61480024F8 -+:106D60000570584DEC76AC7605F12806F476B476CD -+:106D70000121103000F10807017104606C62746237 -+:106D80002C60346005F150087C6088F83740284654 -+:106D900000F09CFB05F1280000F098FB88F80C40FF -+:106DA0007C706C617461AC76B476A7F110004460BD -+:106DB0000460BDE8F0814C49087170472DE9F84343 -+:106DC00040490546CA7E3E4C01F12800002A04BF16 -+:106DD000C27E002A72D0C97E022907BFC17E002967 -+:106DE0000C20BDE8F88320604048F9F797FD216842 -+:106DF0000877364845602168086014384862ADB1AC -+:106E0000012105F1EC00FBF747FA0620F7F7F4FE45 -+:106E100006460720F7F7F0FE95F8EC103044B1FB7A -+:106E2000F0F200FB1210401C85F8EC002068007F97 -+:106E3000002808BFFFDFF9F7BAFD2D49091838BF50 -+:106E400040F2F65000F26B1087B220680326C67637 -+:106E5000FCF778FF21680861FCF798FF00254FF0E8 -+:106E6000010800284DD0FCF791FF21684A6A1060A4 -+:106E70000868012180F800806846FBF798F99DF8C2 -+:106E8000000042F210710002B0FBF1F201FB1200AF -+:106E90000744F9F7A9FD3946F9F7BFFD2168C86035 -+:106EA0002268167256721571107FD37E111D92F8EA -+:106EB0001AC0634532D0F9F728FF33E01AE000002A -+:106EC000D8000020880D0020B00D0020E800002030 -+:106ED000D80D002001E000E00BE000E018E000E049 -+:106EE00019E000E0D0000020E0000020B16B0100BC -+:106EF0000AFAFFFFFA482160F9F710FD21680877C8 -+:106F000077E7F9F771FD3946F9F787FD2168C86021 -+:106F100008680570086880F80180C1E7D576957625 -+:106F200015605562206805830020FDF7DEF900201A -+:106F30002560BDE8F88370472DE9F041E94F82B044 -+:106F4000F97E19B907F12801C97E19B102B00C20E8 -+:106F5000BDE8F0810221F976E34EE44D3E607D62AA -+:106F6000002428603473DFF88883297990F8F420AE -+:106F7000438838F8111038F8122011440A04120C12 -+:106F8000214605D002FB03F1DA4AB1FBF2F1491CBC -+:106F90008AB2416A05F025F800940194296828799D -+:106FA000002391F8F41038F810001A4638F8111040 -+:106FB000084481B21846FFF700FB002818BFFFDF26 -+:106FC000B4600120346030737486348686F83640AD -+:106FD0002868B0F85010491EA0F850103C8302B049 -+:106FE0000020BDE8F081C04981F837007047C248F1 -+:106FF00010B540680124817E032908BF002409D010 -+:107000000168497831B1006ABC49884284BF0024D4 -+:10701000FDF767F9204610BD70B5B7484468206891 -+:10702000C189491CC1812268D2E90A0192F837203E -+:10703000256A002A1CBF2A4604F0FAFE2168854210 -+:10704000886205D82068007B01281CBF012070BD24 -+:10705000002070BD2DE9F043A74CA24883B020600A -+:10706000416A006800260D6880F8346095F8CE10FB -+:10707000002904BF007B032856D1F9F7B5FC01466F -+:1070800020684069FAF7D9FD00F2617000284BDDF5 -+:10709000216840F271274A6A0B681268D3F818C059 -+:1070A00052887A43CCEB4202B0FBF2F0B5F85020A4 -+:1070B000401C104418860868B5F8C420018E511A87 -+:1070C00009B2002930DD012180F83610B5F87600CC -+:1070D000B5F87410DFF81882401AB5F85010401E49 -+:1070E000084487B20DF1080917E0516A097938F8A8 -+:1070F0001110CDE90069028E95F8F430007B38F864 -+:107100001330194489B20123FFF757FA60B10128FF -+:107110000ED0022818BFFFDF06D022681068018E4B -+:10712000791A09B20029E0DA266003B0BDE8F083DD -+:1071300020680068018EBDF8082011440186ECE744 -+:1071400070B56D4C0025062861685AD2DFE800F062 -+:10715000141C030E200D002000F0F5F96068C576C0 -+:1071600085760560456268B1656070BD2068C5764A -+:1071700085760560456270BD012000F0E4F9606825 -+:107180000028F1D1FFDFEFE709680320087370BD25 -+:10719000486A0A680068936913604288096840F287 -+:1071A000E2435A434A60B0F81011C18290F80E11C0 -+:1071B0000175B0F812114180B0F814218280B0F846 -+:1071C0001621C280494A4A4B92F804C0126833F82B -+:1071D0001CC092F8F42033F81220624413041B0CF4 -+:1071E0004FF0000204D0434A5943B1FBF2F14A1C6C -+:1071F00092B2416A04F0F5FE6168022009680873E2 -+:1072000070BDFFDF70BD70B53B4D002470B101282B -+:1072100012D002281CBFFFDF70BD00F0F2F96868D1 -+:10722000C47684760460446220B924E000F0E9F971 -+:10723000686800B36C6070BD686801684C70C476A3 -+:1072400084762F4E046044620021706804F048FA8E -+:10725000706880F80A4180F80B41FFF76DFE002846 -+:1072600018BFFFDFF9F7EFFA26486C600078F2F7F5 -+:1072700021FE6C6070BDFFDFDCE71F494968CA7EF4 -+:10728000022A18BF70470A68D389002B18BF7047BD -+:1072900010610A682838936A034493620968CA6ACD -+:1072A0001044C8627047144A00B5526841B10129C0 -+:1072B00008BF401E04D0022916BFFFDFC01F00BD5B -+:1072C000106200BD1048C07E00281CBF002070471F -+:1072D00010B50720F7F782FC80F0010010BD000018 -+:1072E000DB6A0100880D0020D80D0020E00000209E -+:1072F000F2E5010040420F00D8000020CF821300C9 -+:10730000E8000020D0000020B00D00202DE9F84357 -+:10731000DB4D4FF00308002728680126041D80F884 -+:107320000880077100684078012836D0012168463E -+:10733000FAF73DFF9DF8000042F210710002B0FB29 -+:10734000F1F201FB12002968496A09680E183146FA -+:10735000A068F9F762FBA0603146204604F041FDC9 -+:10736000461C2868018B0A299CBF31440183C5490A -+:1073700088421CBF018B0A2992BF84F80580022134 -+:107380006171027FC37E214690F81AC063450FD019 -+:10739000BDE8F8431046F9F7B8BC4FF47A71A0681D -+:1073A000F9F73BFBA0600021204604F01AFDD8E766 -+:1073B000C776877607604762BDE8F8832DE9F04716 -+:1073C000AF4E84B03068416A04680D6894F8351097 -+:1073D00039B1618EB5F85020914202BF407A002841 -+:1073E000FFDFF9F701FB3268526901461046FAF7F0 -+:1073F00024FC31684FF0000900284A6A126808BF6F -+:1074000048460AD00B68528840F2712C9B6902FBF7 -+:107410000CF2C3EB4202B0FBF2F0B5F85020638EE1 -+:1074200002EB000C6345AEBF581C401C1044608644 -+:1074300094F8360030B9608EB5F8C420904204BF8D -+:10744000401C6086088B904F401C0883B5F876007E -+:10745000B5F874100DF1080A401AB5F85010401E26 -+:1074600008441FFA80F819E03068406A007937F85C -+:107470001000CDE9009A95F8F41037F8111008447F -+:1074800081B2207B0023FFF798F8002804BF04B0E6 -+:10749000BDE8F087012818BFFFDF11D0628EA8EB8E -+:1074A000020000B20028DFDA082085F86A00012017 -+:1074B00085F8690004B02846BDE8F04702F07CB9C1 -+:1074C000608EBDF8081008446086E7E72DE9F047B4 -+:1074D000DFF8B8816A4C05464FF01F090027EE7EA1 -+:1074E000042E23D2DFE806F02922021D454518BFED -+:1074F000FFDF02202560A8762168C87E28B1C87EFB -+:107500008A7E904208BF20BFF6D0C87E8F760028C2 -+:107510001CBF4FF00C0927600CD10F604F62276031 -+:107520000BE00120FFF76DFB814600E0FFDFB9F1C2 -+:10753000000F02D0E87EB042D1D1E87E002818BF0B -+:10754000FFDFBDE8F087F0B54D4E002583B07268CF -+:107550000128516A0C6847D108794B4B33F8101059 -+:10756000106890F80CC00127BCF1030F06D0027B15 -+:10757000022A13D0007B012825D035E085601068F1 -+:107580000560CDE9007594F8F400B4F8C42033F830 -+:1075900010000023084481B2032020E0B4F8D62074 -+:1075A0008260CDE9007594F8F400B4F8C42033F893 -+:1075B00010000023084481B20220FEF7FEFF71682C -+:1075C00009680F730DE0CDE9007594F8F400B4F884 -+:1075D000C42033F810000023084481B20120FEF7D4 -+:1075E000ECFF002818BFFFDFF9F72DF9706805835D -+:1075F0000268B4F850105186006880F8365003B025 -+:10760000F0BD38B51E4C00200546616809684A780F -+:10761000002A18BF4D702AD1097861B1012168464E -+:10762000FAF7E9FD9DF8000042F210710002B0FB8C -+:10763000F1F201FB12006268516A09680144D068E6 -+:10764000F9F7EBF96268D060157103205072107F72 -+:10765000D37E111D92F81AC0634502D0F9F755FB8D -+:1076600003E0D57695761560556260680583F9F775 -+:10767000EAF807480078BDE83840F2F71BBC000084 -+:10768000D8000020B00D0020F2E50100880D002098 -+:10769000D000002010B584B004466846FCF7ADF970 -+:1076A000002808BFFFDF009804F02DFE032100989A -+:1076B00004F040FE0098017821F01001017021468D -+:1076C00004F09FFE162C80F0E380DFE804F03627FC -+:1076D0000B61E1E1E2199DE1E2E284E1E1E1E1E156 -+:1076E000E2E2ABC6FE48806890F8DD10009804F036 -+:1076F00007FFFCF795F900281CBF04B010BD80E01F -+:10770000F748806890F8B910009804F049FFFCF73A -+:1077100087F9002840F0DE8000F0DBB8F048806890 -+:10772000D0F8E800411C009804F0DBFEFCF778F983 -+:1077300000281CBF04B010BD63E0E94CA068D0F87D -+:10774000E4008179009804F0A0FEA068D0F8E4007D -+:107750000189009804F092FEA068D0F8E400418905 -+:10776000009804F076FEA068D0F8E40081890098C3 -+:1077700004F076FEA068D0F8E400C189009804F017 -+:1077800076FEFCF74DF900281CBF04B010BD38E0B0 -+:10779000D34CA068D0F8E400011D009804F0B4FEBA -+:1077A000A068D0F8E40000F10C01009804F0B6FEE7 -+:1077B000A068D0F8E40000F11E01009804F0B4FEC7 -+:1077C000A06800F1B001009804F0BCFEFCF728F9B5 -+:1077D000002872D17BE0C24C60690178009804F007 -+:1077E000C9FE60698188009804F0C6FE606941881E -+:1077F000009804F0C5FEFCF713F900281CBF04B084 -+:1078000010BDFFDF04B010BDB648D0E90010CDE9CF -+:10781000021002A9009804F0C5FEFCF701F9002847 -+:107820004BD154E0AE4CA068B0F84010009804F082 -+:10783000C3FEA068B0F84210009804F0C1FEA06832 -+:10784000818F009804F0C0FEA068C18F009804F0FA -+:10785000BFFEFCF7E5F880BB39E0A14CA068818F42 -+:10786000009804F0B1FEA068C18F009804F0B0FE4B -+:10787000A068B0F84010009804F09EFEA068B0F830 -+:107880004210009804F09CFEFCF7CAF810BB20E000 -+:10789000FFDFFCF7C5F8002808BFFFDF0C2C12BF84 -+:1078A000132C04B010BD072C18BF152C12D0012CBE -+:1078B00019BF002C022C04B010BD0021884880683C -+:1078C000A0F87A10012180F87E1004B010BDFFDF0F -+:1078D000F3E7FFDF824900208968A1F8800004B047 -+:1078E00010BD2DE9F0437E4C83B0207910F0010FDC -+:1078F00004BF03B0BDE8F083206900230521C578EB -+:10790000A06890F85B20503004F01AFA002818BFE5 -+:10791000022D0CD00B2D18BF042D08D0052D1CBF37 -+:10792000062D0D2D03D0607840F00800607060785F -+:1079300000281CBF03B0BDE8F0832069C078801E1A -+:10794000142880F00983DFE800F00AF16482E4255E -+:10795000F1F0F157EF9BF1F1F1F1EEEDECEBA068F6 -+:107960000023012190F85D20503004F0E9F900284F -+:1079700040F0FF82206904F0C5FDA16881F8DE00B7 -+:10798000022081F85D00002081F8820081F87E00ED -+:1079900000F0EFBAA0680023092190F85B20503076 -+:1079A00004F0CEF90028A06816D090F85B200023E0 -+:1079B0000921503004F0C4F9002800F0E582607815 -+:1079C000002840F0D682A16881F8720081F87E001C -+:1079D00081F85B0000F0CDBA90F85B10192940F0F7 -+:1079E000C882002180F88F1080F85B10A0F87A1010 -+:1079F00080F87E1000F0BDBAA06890F85B100C29EA -+:107A00006DD1002180F85F100F2180F85B1000F02D -+:107A1000B0BAA06890F85B1010297FD1D0F8E410BC -+:107A200000884988814218BFFFDFA068D0F8E400D1 -+:107A300000F12601206904F092FDA06800F1B40174 -+:107A4000206904F094FD1320A16800F07DBAA268BB -+:107A500092F85B00132861D1D2F8E40002F1A00390 -+:107A600000F11E0100220E3004F0FFF8A068002192 -+:107A7000C0E92411012180F85F10152100F072B9CE -+:107A8000A06890F85B10132912BF102990F88400A9 -+:107A9000002843D102E0607000F06BBA206904F066 -+:107AA0007DFDA168002581F8B80081F8835081F838 -+:107AB0007E50D1F8E40009884088884218BFFFDF73 -+:107AC000A068D0F8E4100D70D0F810110A78002AE0 -+:107AD00018BFFFDF40F02B810288CA8004E01DE060 -+:107AE000F000002004E60100D0F8102190F8B81052 -+:107AF0001171D0F810110D72D0F810210B211170F6 -+:107B00000188D0F810014180E078F2F7D3F900F055 -+:107B10000EB9A06890F85B10172908D00220BAE7C8 -+:107B2000A2E13BE108E121E141E0B8E014E20025F7 -+:107B300080F8835080F87E50D0F8E410008849889F -+:107B4000814218BFFFDFA068D0F8E4100D70D0F8B4 -+:107B500010110A78002A18BFFFDF40F0E88090F883 -+:107B600084207AB180F884500288CA80D0F810113D -+:107B70000D71D0F810210C2111700188D0F810017E -+:107B8000418010E00288CA80D0F810110D71D0F841 -+:107B9000102101211172D0F810210B2111700188E0 -+:107BA000D0F810014180E078F2F784F9BFE0A068D6 -+:107BB0000023194690F85C20503004F0C1F850B909 -+:107BC000A0680023082190F85B20503004F0B8F83A -+:107BD000002800F0D9816078002840F0CA81A068B0 -+:107BE00090F8860010F0020F17D1206904F0CCFC49 -+:107BF000A16881F88700206904F0C8FCA168A1F899 -+:107C00008800206904F0C5FCA168A1F88A0091F8F9 -+:107C1000860040F0020081F88600A06890F8861087 -+:107C200011F0010F15D190F85C2000231946503057 -+:107C300004F086F8002808BFFFDF0121A0680422B5 -+:107C400080F85C1080F8E02080F882100021A0F815 -+:107C50008010A06890F85B10012907D1002180F8FE -+:107C60005B1080F87E10E078F2F724F9A168D1F873 -+:107C7000E400098842888A4204BF0178042940F060 -+:107C8000788100250570E078F2F714F9A06890F883 -+:107C90005B10002908BF80F87E5000F06AB9A06828 -+:107CA0000023072190F85B20503004F049F80028A9 -+:107CB00000F06A816078002840F05B8169462069A5 -+:107CC00004F0B1FCA0689DF80020002590F88C100D -+:107CD000114001F02F0180F88C1080F87E50D0F810 -+:107CE000E41000884988814218BFFFDFA068D0F8FF -+:107CF000E4100D70D0F810110A78002A18BFFFDFC9 -+:107D000015D10288CA80D0F810110D71D0F8101169 -+:107D1000009A8A60019ACA60D0F810210621117079 -+:107D20000188D0F810014180E078F2F7C3F8A0682C -+:107D300080F85B5000F01DB9A0680023092190F87D -+:107D40005B20503003F0FCFF002800F01D816078BC -+:107D5000002840F00E81A068002180F8721080F8A1 -+:107D60007E1000BF80F85B1000F003B9A06800230C -+:107D7000194690F85C20503003F0E2FF002800F034 -+:107D800003816078002840F0F480A0680021A0F80A -+:107D90008010012180F882100B2162E0A06800238E -+:107DA000194690F85C20503003F0CAFF00287CD0C0 -+:107DB000206904F019FC28B3206904F00DFC064684 -+:107DC000206904F00BFC0546206904F009FC074615 -+:107DD000206904F007FCA1688F86CE8608874D874E -+:107DE00091F88F0000281CBF91F85B00192830D053 -+:107DF0006846FBF728FE40B3009804F028FB1428DF -+:107E00001DD022E0A0680023194690F85C20503075 -+:107E100003F096FF002873D06078002871D12069A4 -+:107E200004F015FBA16881F8B900052081F85C0019 -+:107E30000020A1F88000012081F8820099E0A1686B -+:107E4000002081F87E00FBF70DFEA168002081F87C -+:107E50008F00A0680021A0F88010012180F8821016 -+:107E60001A2180F85C1084E0A06800230A2190F8B1 -+:107E70005B20503003F064FFB8B1206904F0B4FB1C -+:107E8000E8B3206904F0ACFB0646206904F0AAFBC5 -+:107E90000546206904F0A0FB0746206904F09EFB1C -+:107EA000A168B1F82C80CB8D00E050E0B1F830C073 -+:107EB0004A8E8E86CF860D874887B1F83C90B945AB -+:107EC00098BF4F468F85B1F84090B14598BF4E4658 -+:107ED000CE85B1F83E90814598BF48460886B1F8F6 -+:107EE0004290A94598BF4D464D869E4238BF1E46DA -+:107EF000CE85954238BF15464D86474502E01DE0C8 -+:107F000042E036E008BF9E4203D1604508BF95427B -+:107F100014D00A88A1F806218A8DA1F808210A8EBA -+:107F2000A1F80A21CA8D01F1FC00A1F80C21498EAB -+:107F3000418201210172E078F1F7BCFFA1680020C5 -+:107F400081F88F0081F87E0081F85B0011E0607895 -+:107F500040F0010060700CE0A0680023194690F822 -+:107F60005C20503003F0ECFE70B1607800283FF4E4 -+:107F700056AFA068D0E926134A1C43F10001C0E9BE -+:107F8000262103B0BDE8F083012084E52DE9F0410E -+:107F9000FD4D04464FF00007687808436870294695 -+:107FA0002879D1F808C010F0200F18BFACF8747011 -+:107FB00004D1BCF87400401CACF874009CF860005C -+:107FC000012640B99CF85B20002306210CF15000EB -+:107FD00003F0B6FE58B3A88810F4006F07D0A86865 -+:107FE00090F86010002918BFA0F86C701FD1A96824 -+:107FF000B1F86C00401C80B2A1F86C00B1F86E20A2 -+:1080000082422CBF101A00208A88521D824228BF4B -+:1080100081F87260B1F86C00B1F86E20904206D31E -+:10802000A1F86C7081F80261E878F1F743FF2879D4 -+:1080300010F0600F08D0A86890F85E1021B980F8A1 -+:108040005E600121FEF7C0F81CB900F007FD00F0EA -+:108050006FFBA868A04600F1500490F8DC0030B92E -+:10806000627B00230121204603F06AFE10B1208DBF -+:10807000401C20853D21B8F1000F01D0A17614E00D -+:108080002878022808BF16200ED0012804BFA8684F -+:1080900090F8DE0008D06878A0B110F0140F06D078 -+:1080A0001E20A076667640E0A07666763DE010F071 -+:1080B000080FE3D110F0030F08BFFFDF2A20A076DE -+:1080C000667632E094F82E0028B1608D411C6185FF -+:1080D000A18D884213D294F8320028B1208E411C21 -+:1080E0002186A18D88420AD2208DE18C884203D35B -+:1080F000AA6892F8DC2012B9A28D904203D3222004 -+:10810000A076667611E0A07B0028A08C05D088427E -+:1081100009D30820A076667607E0062803D33E2020 -+:10812000A076667601E0607E58B1E7722773A77388 -+:108130000221A868FEF748F8E878BDE8F041F1F7B9 -+:10814000B9BEA868BDE8F0410021FEF73DB88E49F0 -+:108150004A788B781A430ED101280AD0087910F09A -+:10816000040F04D0886890F85D00022803D0012035 -+:108170007047FEF715B80020704770B5824C054671 -+:108180000E46A0882843A08015F0020F04D015F0F9 -+:10819000010F18BFFFDFE66015F0010F18BF266161 -+:1081A00015F0020F12D0304604F051F9062802D023 -+:1081B0000B2830D00AE0A06890F85B10152905D193 -+:1081C0000021C0E92611012180F8601015F0800F10 -+:1081D0001CBF0820A07015F4806F08BF70BDA16897 -+:1081E000B1F8500089880844801D85B2304604F0FB -+:1081F0002EF9012817D0304604F029F9002818BFBD -+:1082000070BDA0682946D0F8E40085803046BDE8FE -+:10821000704004F03EB9A06890F85B100F2908BFC9 -+:108220000021D3D1D0E7A0682946A0F8EE5030460F -+:10823000BDE8704004F05DB9F8B5534D0024064622 -+:10824000A860AC806C70AC702C700088FBF7D2FB1F -+:10825000A8680088FBF7F4FBB6F8C800A968401CC2 -+:1082600082B201F1500003F018FC002818BFFFDFB4 -+:108270002746A6F8C840A86890F87E1029B1B0F843 -+:108280007A10B0F87C2091422AD290F8821029B15D -+:10829000B0F88010B0F87C20914221D2B0F878205C -+:1082A000B0F876108A421BD290F85E20B0F87400C5 -+:1082B000002A3DD0884213D234480090344B354ACE -+:1082C0003146204602F08DF9A8680023052190F878 -+:1082D0005B20503003F034FD002818BF02F07DF918 -+:1082E000A86890F8F010002908BFF8BD90F8F110C8 -+:1082F000002906BF90F88F100029F8BD90F85C1097 -+:108300001A2908BFF8BDB0F8F2108187B0F8F41050 -+:10831000C187B0F8F61029B1A0F84010B0F8F810F5 -+:10832000A0F84210012180F88F1080F8F070F8BD9D -+:108330000628D5D2C0E71448806890F87E1029B18D -+:10834000B0F87A10B0F87C20914219D290F88210DF -+:1083500029B1B0F88010B0F87C20914210D2B0F86A -+:108360007820B0F876108A420AD290F85E20B0F8F1 -+:1083700074001AB1884203D202F041BB0628FBD335 -+:108380000020014602E60000F00000208D7F010081 -+:108390004F8101007B8101002DE9F0410C46074629 -+:1083A0001D4616464FF48C712046DDF8188005F006 -+:1083B00014FE2780C4F81081C4E93965BDE8F08156 -+:1083C000F6F78FBD70B50C4605460621F6F769FC39 -+:1083D000002808BF70BDD0F810110A780021072AC4 -+:1083E00011D00C2A21D00B2A2CD0062A39D090F893 -+:1083F0000221002A48D061700E22227080F80211FA -+:108400006580012070BD617007222270D0F81021B4 -+:108410005368C4F802309368C4F8063092896281C8 -+:10842000D0F810010170012070BD61700C22227023 -+:10843000D0F810215268C4F80220D0F81001017061 -+:10844000012070BD61700B222270D0F8102153689A -+:10845000C4F802301289E280D0F8100101700120C6 -+:1084600070BD617006222270D0F810215368D2F8D6 -+:1084700008C0D268C4F80230C4F806C0C4F80A20A4 -+:10848000D0F810010170BCE790F80421C2B161700E -+:108490001322227090F80421002AB2D080F804112F -+:1084A000D0F80621C4F80220D0F80A21C4F806202A -+:1084B000B0F80E21628190F80421002AEED1A0E7E5 -+:1084C00090F8FC20002A04BF002070BD61701622C5 -+:1084D000227090F8FC20002A93D000BF80F8FC1096 -+:1084E000D0F8FE20C4F8022090F8FC20002AF5D134 -+:1084F00087E700207047FD4A5061D17070472DE931 -+:10850000F0470446481E85B238BFBDE8F087012712 -+:10851000DFF8D89304F108084FF0070A5FF000066F -+:10852000B4F8C800401CA4F8C800B4F87400401C9B -+:10853000A4F8740094F8600040B994F85B2000231C -+:10854000062104F1500003F0FBFBD8B1B4F86C0035 -+:10855000401C80B2A4F86C00B4F86E1081422CBFAD -+:108560000A1A0022A3885B1D934228BF84F8727008 -+:10857000884207D3A4F86C6084F8027199F803006C -+:10858000F1F798FC94F87E0020B1B4F87A00401C12 -+:10859000A4F87A0094F8820020B1B4F88000401C5E -+:1085A000A4F8800094F8DC0040B994F85D20002322 -+:1085B000012104F1500003F0C3FB20B1B4F87800AE -+:1085C000401CA4F8780094F85B0007281FD1B4F889 -+:1085D0005000411CB4F8EE00814262D1D4F8E800AA -+:1085E000411C404605F011FE0221204603F074F9BB -+:1085F00084F85B6084F88E70D4F8E8000078002876 -+:1086000008BFFFDFD4F8E8000178491E017094F834 -+:108610005B00082845D1B4F85000411CD4F8E400B0 -+:10862000808881423DD1D4F810010178002918BF1B -+:10863000FFDF22D12188C180D4F8E4004189D4F839 -+:1086400010010181D4F8E4008189D4F8100141813E -+:10865000D4F8E400C189D4F810018181D4F8100164 -+:108660000671D4F8100180F800A0D4F81001218818 -+:10867000418099F80300F1F71DFC0121204603F029 -+:108680002BF903212046FDF79FFDD4F8E400418833 -+:108690002088814218BFFFDFD4F8E400067084F818 -+:1086A0005B60B4F85000401C691EA4F850008DB205 -+:1086B000BFF436AFBDE8F0878C4AC2E906017047C7 -+:1086C00070B50446B0F8740094F85E10002908BF35 -+:1086D000C0F1020503D0B4F87610081A051F94F80B -+:1086E000720040B194F85B200023092104F150008E -+:1086F00003F026FBA0B1B4F86C6094F8600058B9A0 -+:1087000094F85B200023062104F1500003F018FBCD -+:10871000002808BF284603D0B4F86E00801B001F55 -+:108720008542C8BF0546002DD4BF0020A8B270BD49 -+:108730002DE9F84F6846FBF760F9002808BFBDE84F -+:10874000F88F6A4C6078002818BFBDE8F88FA068E1 -+:108750000023012190F85D20503003F0F1FA002849 -+:1087600018BFBDE8F88FA06890F8DC10002918BF8A -+:1087700002206CD190F85B2000231946503003F0A2 -+:10878000DFFA30B1A06890F87200002818BF1220FC -+:108790005DD1A06890F85B200E2A42D00F2A08BF56 -+:1087A0000B2054D0152A08BF062050D000230421E6 -+:1087B000503003F0C5FA002818BFBDE8F88FA06854 -+:1087C000002590F85C1001294AD0052943D00B29D7 -+:1087D00053D001261A2957D0D0F8E4100A78002A7D -+:1087E00000F0DD8049880288914240F0D88090F8FE -+:1087F0005B2000231946503003F0A2FA002877D0FE -+:10880000A068D0F8E4100978022908BF002070D0D1 -+:1088100003296FD004296ED0052908BF082068D02D -+:10882000BDE0F9F7E7FC0C2838BFBDE8F88FA06879 -+:108830000821D0F8E4001E30F9F7DDFC28B1A0686B -+:108840000421B030F9F7D7FC00B9FFDF0320FEF7B1 -+:1088500021FFBDE8F88F0720FEF71CFFA06866E047 -+:108860000C20FEF717FFA068A0F8805090F8861043 -+:1088700041F0010180F8861059E01320FEF70AFF4D -+:10888000A068A0F8805052E0C18E828FB0F82CA072 -+:10889000B0F82E80B0F83090478E914238BF0A462B -+:1088A0008285838EB0F840108B4238BF1946C1854F -+:1088B000038FB0F842C0634538BF9C46A0F832C071 -+:1088C000B0F83AB0C38F9B4538BF5B46038641453D -+:1088D00038BF4146C185BC4538BFBC46A0F832C050 -+:1088E000524508BF41450AD14B4505E0F000002044 -+:1088F00055E029E01FE03FE008BFBC4513D00288E7 -+:10890000A0F80621828DA0F80821028EA0F80A2185 -+:10891000C28D00F1FC01A0F80C21408E48820E723D -+:10892000E078F1F7C7FA1520FEF7B4FEA06880F8EA -+:108930005C50BDE8F88F90F85F1041B190F860008E -+:10894000002808BFFFDF0A20FEF7A4FE27E0F9F7A2 -+:1089500051FC0C2823D3A0680821D0F8E4001E3075 -+:10896000F9F749FC28B1A0680421B030F9F743FCBD -+:1089700000B9FFDF0320E7E790F8860010F0030F4F -+:108980000DD10C20FEF786FEA068A0F87A5080F882 -+:108990007E6090F8861041F0010180F886106846EC -+:1089A000FBF72BF8002808BFBDE8F88FA06800236C -+:1089B000194690F85B20503003F0C2F9002808BF38 -+:1089C000BDE8F88FA06890F8EC10D1B3A1690978E0 -+:1089D000B9BBB0F850100A2934D900F108010522BA -+:1089E000E06905F035FA0028A06804BF80F8EC5073 -+:1089F000BDE8F88FD0F8E800017869B1411C052284 -+:108A0000E06905F025FA002818BFBDE8F88FA068D6 -+:108A1000D0F8E800007830B9A068E169D0F8E80043 -+:108A2000401C05F0F2FBA068D0F8E8000178491C72 -+:108A300001700120FEF72EFEA06880F8EC50BDE822 -+:108A4000F88FFFE790F88F1000291EBF90F85C00A8 -+:108A50001A2814207FF4FBAEBDE8F88F2DE9F04111 -+:108A6000E94C6078002818BFBDE8F08120794FF00C -+:108A7000010710F0040F4FF000050DD0A06890F82A -+:108A80005B00052808BFFFDFA06890F85D10022991 -+:108A900004BF277080F85D5020794FF0080610F071 -+:108AA000020F00F00B816078002840F00781E06839 -+:108AB000C078162880F00181DFE800F04D3C0B798A -+:108AC000FFFF8F1E2BFF5C6E9AFFFFFFFFFFC7FBB0 -+:108AD000D7F0A0680023012190F85D20503003F00A -+:108AE0002FF9002840F0EA80A068032180F85D108B -+:108AF00080F87E5000F0DEB8A0680023194690F898 -+:108B00005C20503003F01CF9002840F0D28000F0C7 -+:108B1000D5B8A0680023194690F85B20503003F0C8 -+:108B20000FF9002808BFFFDF0920A16881F85B006A -+:108B300000F0C4B8A0680023194690F85B205030BC -+:108B400003F0FEF8002808BFFFDF0720A16881F8C6 -+:108B50005B0000F0B3B8A0680023194690F85B20D2 -+:108B6000503003F0EDF8002808BFFFDFA06880F860 -+:108B70005B60A3E0A0680023194690F85B205030AA -+:108B800003F0DEF8002808BFFFDFA0680C2180F8A2 -+:108B9000837080F85B1091E0A06890F85B000F286C -+:108BA00018BFFFDFA0680E2180F8847012E0A06873 -+:108BB0000023194690F85B20503003F0C1F828B923 -+:108BC000A06890F88400002808BFFFDFA06810218B -+:108BD00080F8837080F85B1070E0A06890F85B000C -+:108BE000152818BFFFDF1720A16881F85B0065E03A -+:108BF000A068D0F8E41003884A889A4204BF097834 -+:108C000004290AD0A0680023194690F85C2050304F -+:108C100003F096F800284CD150E090F85B20002338 -+:108C20001946503003F08CF8002808BFFFDFA06819 -+:108C300090F8861011F0020F0FBF80F85B7080F87B -+:108C40007E50D0F8E4000570DCE7A06800231946E8 -+:108C500090F85B20503003F073F8002808BFFFDF66 -+:108C60000A20A16881F85B0028E0A06890F88F00D6 -+:108C7000012818BFFFDFA0680023194690F85B2089 -+:108C8000503003F05DF8002808BFFFDF1920A1680D -+:108C900081F85B0012E001E00BE00EE0A068002329 -+:108CA000194690F85C20503003F04AF8002808BFBD -+:108CB000FFDFA06880F8825000E0FFDF207910F02D -+:108CC000080F0AD0607840B9A06890F85D100329B9 -+:108CD00003D10221217080F85D50FEF702FEA078DA -+:108CE00010F0080F14D0A0680023052190F85B2035 -+:108CF000503003F025F848B16670A068D0F8101124 -+:108D000008780B2808BF0020087001E001F0A5FEDC -+:108D1000A068BDE8F041AFF3008070B5044690F85C -+:108D20005B000025072822D1B4F85000B4F8EE10FB -+:108D3000401C884218BF70BDD4F8E800411C04F103 -+:108D4000080005F062FA0221204602F0C5FD84F811 -+:108D50005B50012084F88E00D4F8E80000780028E9 -+:108D600008BFFFDFD4F8E8000178491E017094F8CD -+:108D70005B00082818BF70BDB4F85000D4F8E410A8 -+:108D8000401C8988884218BF70BDD4F81001017852 -+:108D9000002918BFFFDF22D12188C180D4F8E40068 -+:108DA000D4F8101140890881D4F8E400D4F81011E7 -+:108DB00080894881D4F8E400D4F81011C0898881F2 -+:108DC000D4F810010571D4F8101107200870D4F8F8 -+:108DD0001011208848800C48C078F1F76BF8012109 -+:108DE000204602F079FD03212046FDF7EDF9D4F885 -+:108DF000E40021884088884218BFFFDFD4F8E400EF -+:108E0000057084F85B5070BDF00000202DE9F04340 -+:108E1000F84C83B0207910F0010F04BF03B0BDE817 -+:108E2000F083606901230521C578E06890F85C2033 -+:108E3000503002F085FF002818BF022D0BD00A2DFC -+:108E400018BF0B2D07D0032D18BF062D03D0607857 -+:108E500040F008006070607800281CBF03B0BDE8D7 -+:108E6000F0836069C078162880F0F582DFE800F0B2 -+:108E70004C260BCEFEFEFDFCFBFEAAC3FAFEFEFE58 -+:108E8000FEFEF9F8F7F6E0680123194690F85D2038 -+:108E9000503002F055FF002840F0EC82606903F08A -+:108EA00031FBE16881F8F800022081F85D000020C4 -+:108EB00081F8820081F87E0000F0DCBAE0680123CE -+:108EC000002190F85C20503002F03AFF002870D06A -+:108ED0006078002840F0CE82606903F00EFBE16804 -+:108EE000A1F80C01B1F85020801A00B247F6FE72CA -+:108EF0008242A8BF00285DDD01F58771606903F03B -+:108F0000F3FA0620E16840E0E0680123002190F8D0 -+:108F10005C20503002F014FF002860D060780028F8 -+:108F200040F0A882606903F0BBFA90B3606903F077 -+:108F3000B4FAE168A1F80C01B1F85020801A00B22F -+:108F400047F6FE728242A8BF002833DD606903F055 -+:108F50009EFAE16881F80E01606903F093FAE16816 -+:108F6000A1F81001606903F078FAE168A1F8120134 -+:108F7000606903F079FAE168A1F81401606903F00F -+:108F80007AFAE168A1F81601082081F85C0000F087 -+:108F900071BAFFE7E0680123002190F85C205030AF -+:108FA00002F0CEFE28B16078002800F09E8100F02B -+:108FB00061BA14E0282081F86A00012081F8690074 -+:108FC00000F058BAE0680123002190F85C2050308E -+:108FD00002F0B6FE18B1607820B100F04BBA012063 -+:108FE00000F073B9E0680021A0F88010012180F83A -+:108FF00082100D2106E0E06890F85C100E2908BF91 -+:109000000F2156D180F85C1000F034BAE0680123DB -+:10901000002190F85C20503002F092FE20B9E06808 -+:1090200090F884000028DAD06078002840F022828E -+:10903000E06800210125A0F8801080F8825000F13E -+:10904000D801606903F077FAE06800F1B001606967 -+:1090500003F07CFAE06890F8360108E055E1F4E0AE -+:10906000CAE0DAE02DE0A0E0C7E11DE0F3E100286E -+:1090700018BFFFDFE0680188A0F8381100F59D7186 -+:10908000606903F046FAE06800F5A171606903F0D9 -+:1090900048FAE06880F83651112180F85C10E078D9 -+:1090A000F0F708FF00F0E6B9E06890F85C101429CA -+:1090B00002D0022000F009B9002180F882101821A6 -+:1090C000A0E7E0680123002190F85C20503002F016 -+:1090D00037FE50B9E0680123082190F85B2050303A -+:1090E00002F02EFE00283FF47AAF6078002840F0AE -+:1090F000C181E06890F8860010F0020F17D1606916 -+:1091000003F042FAE16881F88700606903F03EFAF3 -+:10911000E168A1F88800606903F03BFAE168A1F812 -+:109120008A0091F8860040F0020081F88600E0682D -+:1091300090F8861011F0010F15D190F85C200123F2 -+:109140000021503002F0FCFD002808BFFFDF0121A4 -+:10915000E068042280F85C1080F80B2180F882100F -+:109160000021A0F88010E06890F85B10012907D179 -+:10917000002180F85B1080F87E10E078F0F79AFE0E -+:10918000E06890F80A11042940F07481002580F805 -+:109190000A51E078F0F78EFEE06890F85B10002945 -+:1091A00008BF80F87E5000F065B9E0680123002117 -+:1091B00090F85C20503002F0C3FD00283FF40FAF60 -+:1091C0006078002840F056816946606903F0EFF945 -+:1091D000E0689DF8002090F88C10114001F02F01FC -+:1091E00080F88C100021A0F88010012180F88210F6 -+:1091F000092107E710010020E0680123092190F808 -+:109200005B20503002F09CFD00283FF4E8AE60780F -+:10921000002800F0098100F02DB9E0680123002149 -+:1092200090F85C20503002F08BFD00283FF4D7AE60 -+:109230006078002840F01E81E0680021A0F88010CE -+:10924000012180F882100B21DCE6E0680123002177 -+:1092500090F85C20503002F073FD00287DD06069EA -+:1092600003F0C2F980B3606903F0B6F9064660699D -+:1092700003F0B4F90546606903F0B2F90746606986 -+:1092800003F0B0F9E1688F86CE8608874D8791F8A4 -+:109290008F0000281CBF91F85B0019280BD068468E -+:1092A000FAF7D1FB38B10098C078142803D0E168F0 -+:1092B000002081F88F00E0680021A0F880100121D3 -+:1092C00080F882101A219DE601E06070D2E0E0682B -+:1092D0000123002190F85C20503002F031FD00287D -+:1092E0003FF47DAE607800287DD1606903F0AFF86F -+:1092F000E16881F8B900052081F85C000020A1F840 -+:109300008000012081F88200B4E0E06801230A2196 -+:1093100090F85B20503002F013FDF0B1606903F06B -+:1093200063F9E8B3606903F05BF90746606903F02D -+:1093300059F90546606903F04FF90646606903F084 -+:109340004DF9E168B1F82C80CB8DB1F830C04A8E70 -+:109350008F86CE860D87488700E04AE0B1F83C90C2 -+:10936000B14598BF4E468E85B1F84090B94598BF3B -+:109370004F46CF85B1F84290A94598BF4D464D86DE -+:10938000B1F83E90814598BF484608869F4238BF55 -+:109390001F46CF85954238BF15464D86464500E0AD -+:1093A0001CE008BF9F4203D1604508BF954215D01D -+:1093B0000A88A1F84A218A8DA1F84C210A8EA1F8C9 -+:1093C0004E21CA8D01F59170A1F85021498E018678 -+:1093D000012180F82610E078F0F76CFDE1680020AC -+:1093E00081F88F0000E045E081F87E0081F85B00A5 -+:1093F00040E0607840F0010067E7E0680123092160 -+:1094000090F85B20503002F09BFC0028E06814D0FC -+:1094100090F85B2001230921503002F091FC0028D4 -+:109420003FF4DDAD607828BBE168002081F8720070 -+:1094300081F87E0081F85B001CE090F85B10192930 -+:1094400018D1002180F88F1080F85B10A0F87A10F6 -+:1094500080F87E100EE0E0680123002190F85C2087 -+:10946000503002F06DFC00283FF4B9AD6078002860 -+:109470003FF43BAFE068D0E92612491C42F10002FC -+:10948000C0E9261203B0BDE8F08330B585B00446CC -+:109490006846FAF7B2FA002808BFFFDF009802F02A -+:1094A00032FF0321009802F045FF0098017821F077 -+:1094B00010010170214602F0A4FFA01E14286FD2F3 -+:1094C000DFE800F00A872288881A874687883530C7 -+:1094D000878787878888566FF848C06890F88D100E -+:1094E00021B10621009803F00BF873E090F8F71013 -+:1094F000009803F005F86DE0F048C06890F8B910E6 -+:10950000009803F04DF865E0EC4DE86800F1E001EB -+:10951000009803F01FF8E86800F1B401009803F028 -+:1095200023F857E00621009803F036F852E0E34DA7 -+:10953000A8680178009803F01DF8A8688188009851 -+:1095400003F01AF8A8684188009803F019F841E080 -+:10955000002002900390D94802A9C06890F88C00BE -+:1095600000F0F1008DF80800009803F057F831E0A2 -+:10957000D24DE868B0F84010009803F01DF8E86894 -+:10958000B0F84210009803F01BF8E868818F00984B -+:1095900003F01AF8E868C18F009803F019F819E091 -+:1095A00017E0C64DE868818F009803F00DF8E86871 -+:1095B000C18F009803F00CF8E868B0F840100098EC -+:1095C00002F0FAFFE868B0F84210009802F0F8FFE5 -+:1095D00000E0FFDFFAF724FA002808BFFFDF0C2CB9 -+:1095E00004BF05B030BD072C11D0122C18BF142CAD -+:1095F00014D0022C04BF05B030BD0021AF48C068B4 -+:10960000A0F88010012180F8821005B030BDAB4970 -+:109610000020C968A1F8800005B030BDA74800212E -+:10962000C068A0F87A10012180F87E1005B030BD26 -+:1096300070B50C4605464FF4B071204604F0CDFCE1 -+:109640002580002084F8220184F82E0184F8360158 -+:1096500084F8440170BDF5F744BC70B50C4605466E -+:109660000721F5F71EFB002808BF70BD90F82221E6 -+:109670000021CAB161700722227090F822218AB1BC -+:10968000018480F82211D0F82421C4F80220D0F8F7 -+:109690002821C4F80620B0F82C21628190F82221FC -+:1096A000002AEDD1A1702AE090F82E21F2B190F8B5 -+:1096B0002E210B2A0CD00C2A18BFFFDF1FD161709E -+:1096C0000C22227090F83021A2700288A2800AE059 -+:1096D00061700B22227090F83021A2700288A28063 -+:1096E00090F83421A27180F82E1108E090F85A21E8 -+:1096F0003AB161700E22227080F85A116580012003 -+:1097000070BD90F8362182B1617008222270028803 -+:109710006280D0F83A21D0F83E316260A360B0F8A0 -+:109720004221A28180F83611E9E790F8442142B144 -+:10973000617015222270B0F84621628080F84411D1 -+:10974000DDE790F8542192B161701622227090F8F2 -+:109750005421002AD3D000BF80F85411D0F85621EC -+:10976000C4F8022090F85421002AF5D1C7E790F8F8 -+:109770004821002A04BF002070BD617013222270AE -+:1097800090F84821002ABAD080F84811D0F84A2130 -+:10979000C4F80220D0F84E21C4F80620B0F85221B7 -+:1097A000628190F84821002AEED1A8E70020704796 -+:1097B000424A9060D170704710B5002180F85B106C -+:1097C00080F85C1080F85E1090F8CE00002814BF7E -+:1097D00002200320FDF7B4FC3848C078BDE81040F3 -+:1097E000F0F768BB2DE9F047344C07460D46E068BA -+:1097F0000088F5F7CBFB5FEA000808BFFFDF607861 -+:109800002843607020794FF0000510F0200FE068C9 -+:109810001CBFA0F8745080F8D45004D1B0F8741074 -+:10982000491CA0F87410E068012690F8601039B95E -+:1098300090F85C2001230621503002F081FA48B3F1 -+:10984000A08810F4006F07D0E06890F8601000293D -+:1098500018BFA0F86C501DD1E168B1F86C00401C35 -+:1098600080B2A1F86C00B1F86E3083422CBF1A1A96 -+:109870000022B4F806C00CF1050C624598BF81F8CF -+:109880007260984206D3A1F86C5081F85A61E07872 -+:10989000F0F710FB20794FF0020910F0600F14D0A0 -+:1098A000E06890F85E1011B1032909D00DE080F84E -+:1098B0005E600120FDF744FC07E00000100100207D -+:1098C00080F85E900120FDF73BFCE06890F85E10A8 -+:1098D000012905D1A18811F4807F18BF80F85E901E -+:1098E000002F7DD1A18811F4007F18BFA0F8E850A7 -+:1098F00004D1B0F8E810491CA0F8E81000F04CFBC7 -+:1099000000F0F7FC01F09FF80028E06818BFA0F80D -+:10991000C85004D1B0F8C810491CA0F8C81001F014 -+:1099200095F840B1E16891F8D40002289CBF401C32 -+:1099300081F8D40004D8E06890F8D400022806D951 -+:10994000E068A0F8C850A0F8CA5080F8D450E06889 -+:109950000123002190F85C20503002F0F1F920B989 -+:10996000E06890F85C0007285AD1E06801230021E4 -+:1099700090F85B20503002F0E3F9002850D0E06806 -+:109980000123002190F85D20503002F0D9F9002821 -+:1099900046D0E06890F85E10022904BF90F8D40029 -+:1099A00000283DD14046F4F782FDC0B3FAF76CF8C9 -+:1099B000A8B3E268B2F8C200012831D982F8CD60BC -+:1099C000B2F87600B2F87410831E9942A8BF012144 -+:1099D00002DA401A401E81B2B2F8C800E38800E003 -+:1099E00035E098422FBF0120181A401C80B28142F6 -+:1099F00088BF0146012908BF82F8CD5092F8F000D7 -+:109A000090B1B2F8CA00B2F8F22090422FBF012004 -+:109A1000101A401C80B2814288BF014604E0FFE773 -+:109A2000E068012180F8CD50D4F80CC0BCF850207B -+:109A3000501880B2ACF8C4009CF85E10002918BF22 -+:109A400001290ED002291CBF0329FFDF0CD0A088FA -+:109A5000C0F340200028E06818BFA0F8D6506DD1B0 -+:109A600065E0ACF8C000F2E79CF85D1003292CD04B -+:109A70009CF85C100829F4D0BCF87410BCF876008F -+:109A80008A1C4FF0000890420AD3401A801E1FFA29 -+:109A900080F8B8F1000F1CBFA8F101001FFA80F890 -+:109AA0009CF8720060B19CF85B20012309210CF145 -+:109AB000500002F045F9002808BF4FF000082FD0F1 -+:109AC000E06890F8601099B90AE0BCF874100329B6 -+:109AD000C7D3BCF876001044401CACF8C000B6E711 -+:109AE00090F85C2001230621503002F029F980B162 -+:109AF000E2680020B2F86E10B2F86C20931C994214 -+:109B000003D3881A801E18BF401E404538BF1FFA75 -+:109B100080F8B8F1000F1CBFA8F101001FFA80F80F -+:109B2000E068B0F8C4104144A0F8C0108FE7B0F866 -+:109B3000D610B0F8C6201144A0F8D610E06890F80E -+:109B4000F61039B990F85D2001231946503002F023 -+:109B5000F7F838B1E068B0F87810B0F8C6201144D2 -+:109B6000A0F87810E06890F87E3033B1B0F87A1041 -+:109B7000B0F8C6201144A0F87A1090F8822032B1D3 -+:109B8000B0F88010B0F8C6C06144A0F880104FF063 -+:109B90003D0C17B180F86AC010E02178022910D07E -+:109BA000012908BF90F8F81006D06178F1B111F0E2 -+:109BB000140F18BF1E210BD080F86A1080F869605E -+:109BC0004BE090F88D10002914BF06211621F3E711 -+:109BD00011F0080FDED111F0030F08BFFFDF2A21BB -+:109BE000E06880F86A1080F8696036E02BB1B0F860 -+:109BF0007A10B0F87C3099420FD22AB1B0F88010B8 -+:109C0000B0F87C20914208D2B0F87820B0F87610F5 -+:109C10008A4208D390F8F6202AB1222180F86A10EF -+:109C200080F8696019E090F85E204AB1B0F87420BD -+:109C30008A420FD3082180F86A1080F869600CE02E -+:109C4000B0F87410062905D33E2180F86A1080F818 -+:109C5000696002E090F8690090B1E06880F85B50BC -+:109C600080F85C5080F85E5090F8CE00002814BF59 -+:109C700002200320FDF764FAE078F0F71BF902E018 -+:109C80000020FDF75DFAE06880F8CE50BDE8F0876F -+:109C9000F7494A788B781A430DD150B1087910F002 -+:109CA000080F04D0C86890F85D00032803D0012095 -+:109CB0007047FDF7B1B9002070472DE9F041EC4C39 -+:109CC00005460E46A0882843A08015F0020F04D058 -+:109CD00015F0010F18BFFFDF266115F0010F4FF0DF -+:109CE00000084FF001071CD03046666102F0AFFB60 -+:109CF000062802D00B280BD013E0E06890F85C1027 -+:109D000014290ED10021C0E9241180F85F7008E009 -+:109D1000E06890F85C100E2904BF80F85F8080F83E -+:109D2000847015F0020F18D02069C078052802D081 -+:109D30000B280BD011E0E06890F85C1012290CD1D0 -+:109D40000021C0E9261180F8607006E0E06890F814 -+:109D50005C100D2908BF80F8608015F0800F1CBFD3 -+:109D60000820A070BDE8F0812DE9F047C04C82B01A -+:109D70000127216900250191A5806570A5702570D6 -+:109D8000E06067F30708064680F8CE700088F5F7B4 -+:109D9000FDF85FEA000908BFFFDFE0680088F9F717 -+:109DA00029FEE0680088F9F74BFEE068B0F8C200D1 -+:109DB000D0B101A8F9F721FEB0B1E06890F8F61033 -+:109DC00091B190F85D2001231946503001F0B8FFA1 -+:109DD00050B9E068A0F8785080F88D500220FFF765 -+:109DE00054FBE06880F8CD50D4F80CC09CF82201F8 -+:109DF00038B9BCF82000BCF80410884288BFE08065 -+:109E000002D8BCF80400E080BCF8C600401E1FFA6F -+:109E100080FABCF8C8005044ACF8C8009CF8CC00EC -+:109E200000281CBFACF8CA508CF8CC5004D1BCF848 -+:109E3000CA005044ACF8CA00BCF874005044ACF8F6 -+:109E400074009CF8600040B99CF85C200123062156 -+:109E50000CF1500001F074FF28B1E068B0F86C100C -+:109E60005144A0F86C10E068B0F8C21001299CBF02 -+:109E7000491CA0F8C210BAF1000F18BF80F8D450E6 -+:109E800090F8CD10A1B1B0F8C800E18888420FD297 -+:109E90004846F4F70CFB58B1E06890F8F01039B17F -+:109EA000B0F8CA10B0F8F200814228BF00F0D1FD2E -+:109EB000E06880F8CD5090F85C10062918BF07299B -+:109EC00017D1B0F85010B0F80C21891A09B2002946 -+:109ED0000FDB00F58771083004F097F90221E06884 -+:109EE00001F0FEFBE06880F80B5180F85C5080F8D0 -+:109EF0008E70E16801F15000B1F8C62001F0CDFD8F -+:109F0000E06890F8F010002918BFA0F8CA5059482E -+:109F10000090594B594A3146404600F062FBE068D8 -+:109F20000123052190F85C20503001F009FF002842 -+:109F300018BF00F052FBE06890F81811002904BF28 -+:109F400002B0BDE8F08790F81911002907BF90F81A -+:109F50008F10002902B0BDE8F08790F85C101A2934 -+:109F600004BF02B0BDE8F087B0F81A118187B0F8DD -+:109F70001C11C187B0F81E1129B1A0F84010B0F82B -+:109F80002011A0F8421080F88F7080F8185102B0AC -+:109F9000BDE8F08700F033BD2DE9F041344C4FF0BF -+:109FA00002074FF00005207910F0080F13D06078F9 -+:109FB00088B9E06890F85C10162905D180F88350C4 -+:109FC00080F8825080F85C5090F85D10032904BF3F -+:109FD000277080F85D50FEF719FFA1884FF0010649 -+:109FE00011F0040F14D0607890B9E06890F85C200C -+:109FF000062A08BF80F80B6103D0082A08BF80F842 -+:10A000000B7190F85D20022A04BF267080F85D5025 -+:10A0100011F0020F4FF0030700F00581607800286F -+:10A0200040F001812069C078801E142880F0FA80F9 -+:10A03000DFE800F00AF84B566C26F831F83E9B61D9 -+:10A04000F8F8F8F8C6F2D6ECE0680123194690F863 -+:10A050005D20503001F074FE002840F0E480E0689C -+:10A0600080F85D7080F87E5080F8825000F0DBB898 -+:10A0700010010020E5970100919C0100BB9C0100AC -+:10A08000E06890F85C00052818BFFFDFE06880F802 -+:10A090005C5000F0C3B8E06890F85C00092818BF75 -+:10A0A000FFDFE06880F8825080F85C5000F0BBB8B9 -+:10A0B000E06890F85C000D2818BFFFDFE0680E2113 -+:10A0C00080F8836080F85C10ADE0E06890F85C0098 -+:10A0D000112818BFFFDFE068122180F88360F1E7E4 -+:10A0E000E06890F85C00122818BFFFDF1420E168D8 -+:10A0F00081F85C0097E0E06890F85C00122818BFD7 -+:10A10000FFDF1620E16881F85C008CE0E06890F8E1 -+:10A110005C00182818BFFFDFE06880F8835080F8E3 -+:10A12000825090F82E01002818BFFFDFE06890F8F9 -+:10A13000841041B180F884500188A0F8321180F871 -+:10A1400030510C2107E00188A0F8321180F830511D -+:10A1500080F834610B2180F82E11E078EFF7AAFE29 -+:10A16000D4F80C0080F85C505DE0E06890F80A11CB -+:10A1700004290ED0E0680123082190F85C205030BB -+:10A1800001F0DEFD00281CBFE06880F882504AD054 -+:10A19000E8E790F85B2001230021503001F0D0FD6A -+:10A1A000002808BFFFDFE06890F8861011F0020F6A -+:10A1B0000EBF80F85B6080F87E5080F80A51D9E7C6 -+:10A1C000E0680123002190F85B20503001F0B8FDD9 -+:10A1D000002808BFFFDF0A20E16881F85B0022E069 -+:10A1E000E06890F88F00012818BFFFDFE0680123C6 -+:10A1F000002190F85B20503001F0A2FD002808BF3C -+:10A20000FFDF1920E16881F85B000CE0E06890F85E -+:10A210005C00002818BFFFDFD4F80C0080F88250E3 -+:10A2200001E0FFE7FFDF207910F0100F09D0607820 -+:10A2300038B9E06890F85C10062904BF072180F85F -+:10A240005C10A07810F0080F10D0E0680123052101 -+:10A2500090F85C20503001F073FD28B10820607048 -+:10A26000E06880F82E5101E000F0F7FBE06890F81C -+:10A270005C10082918BFBDE8F081B0F85010B0F8A4 -+:10A280000C21491C914206BF61780029BDE8F0818C -+:10A29000B0F812114288914209D1B0F81421838894 -+:10A2A0009A4204D1B0F81621C3889A4211D002888C -+:10A2B000A0F82621A0F82811B0F81411A0F82A114E -+:10A2C000B0F81611A0F82C1180F82261E078EFF7B1 -+:10A2D000F1FD0121E06801F003FA0420FCF730FFF2 -+:10A2E000E06880F80B5180F85C5080F85E70BDE843 -+:10A2F000F0812DE9F84F6846F9F77FFB002808BF89 -+:10A30000BDE8F88FAC4C6078002818BFBDE8F88F26 -+:10A31000E0680123194690F85D20503001F010FDEF -+:10A32000002818BFBDE8F88FE068002590F8F61007 -+:10A3300029B1A0F8785080F88D5002206DE090F897 -+:10A340005B2001230021503001F0FAFC88B1E06865 -+:10A350000123042190F85C20503001F0F1FC40B959 -+:10A36000E06890F8720020B11220FFF78EF8BDE887 -+:10A37000F88FE068012690F85C200D2A08BF0B20BA -+:10A380004BD00CDC012A79D0052A08BF072044D025 -+:10A39000092A08BF092040D00B2A70D007E0112AF3 -+:10A3A00027D0122A3DD0182A6CD01A2A69D001234E -+:10A3B0000421503001F0C4FC002818BFBDE8F88F1C -+:10A3C000E06890F80A11002970D090F85B20012312 -+:10A3D0000021503001F0B4FC002867D0E06890F80C -+:10A3E0000A11042904BF90F8860010F0030F7CD0F6 -+:10A3F000C5E0F7F7FFFE0C2838BFBDE8F88F08214D -+:10A40000E068E030F7F7F7FE28B1E0680421B430E7 -+:10A41000F7F7F1FE00B9FFDF0420FFF736F8BDE8DB -+:10A42000F88F90F8F910012912D0022918BFBDE861 -+:10A43000F88F90F8841000291ABF80F88D600220F0 -+:10A440000D20FFF722F8E06880F8F950BDE8F88F9A -+:10A4500090F82E11002918BFBDE8F88F00F1A00375 -+:10A4600000F1D8010022FA3001F0FFFB0520FFF7D0 -+:10A470000CF8E06880F8F950BDE8F88F09E016E0C4 -+:10A4800000E01BE00620FFF700F8E06880F882504B -+:10A49000F2E70C20FEF7F9FFE068A0F8805090F892 -+:10A4A000861041F0010180F88610E5E767E013208F -+:10A4B000FEF7EBFFE068A0F880504FE0C18E838F7D -+:10A4C000B0F82CA0B0F82E80B0F83090478E9942AA -+:10A4D00038BF0B468385828EB0F840108A4238BF61 -+:10A4E0001146C185B0F838C000E03AE0B0F842202B -+:10A4F000944538BF62464286B0F83AB0B0F83EC0E4 -+:10A50000E34538BFDC46A0F830C0414538BF41467E -+:10A51000C185BA4238BF3A464286534508BF4145D5 -+:10A5200003D1CC4508BFBA4214D00288A0F84A2112 -+:10A53000828DA0F84C21028EA0F84E21C28D00F52C -+:10A540009171A0F85021408E088681F82660E0784D -+:10A55000EFF7B0FC1520FEF798FFE06880F85C503C -+:10A560008AE70C20FEF791FFE068A0F87A5080F8A7 -+:10A570007E6090F8861041F0010180F886106846F0 -+:10A58000F9F73BFA00283FF477AFE0680123002198 -+:10A5900090F85B20503001F0D3FB00283FF46CAF03 -+:10A5A000E06890F88F1000291EBF90F85C001A2810 -+:10A5B00014207FF432AF5FE710010020FB480078E1 -+:10A5C000002818BF0C20704730B5F84C054620789D -+:10A5D000002818BFFFDF657230BDF4490120087202 -+:10A5E00070472DE9F047F14C8146DDF82080207856 -+:10A5F0001E4617460D4628B9002F1CBF002EB8F185 -+:10A60000000F00D1FFDFC4F81C80C4E90C95C4E939 -+:10A61000057600202072E0712071E0706071A071F9 -+:10A62000E34EA07060813078012705F1500828883A -+:10A63000F4F7ACFCA0622888F4F796FCE062F8F727 -+:10A640006BFEF8F79EFBF8F7BCFE05F11100F8F77A -+:10A650004CFE05F10D00F8F777FC307800280CBFB0 -+:10A6600003200120F8F755FE98F81800F8F774FC5D -+:10A67000F8F749FE30786FF00D01F8B16A8EE88D79 -+:10A6800001EBD20198F810308AB2824298BF88B2AA -+:10A690000BB1001D80B2F8F762FB30784FF001017A -+:10A6A000C8B10120F8F7CCFC7068D0F8D000F8F7FA -+:10A6B00041FE2770BDE8F047F8F736BE2A8EA88D18 -+:10A6C00001EBD20198F80F308AB2824298BF88B26B -+:10A6D000002BE0D0DDE70020F8F7B2FCE9E72DE938 -+:10A6E000F041B34C6FF00D072046012640684FF053 -+:10A6F0000008418E07EBD102C18D93B28B4298BF07 -+:10A7000091B2AA4DE86AF3F70EFF6862002811BF04 -+:10A7100085F801806E70A7486862207860680146FD -+:10A7200000F15006498E90F86020C08D07EBD101F2 -+:10A730008BB2834298BF88B2002A1CBF001D80B232 -+:10A74000F8F70DFB307C40B306F15001994891E8D1 -+:10A750000E1000F5027787E80E10316EC0F8211256 -+:10A76000716EC0F8251200F58170F8F7E0FD2078D1 -+:10A7700000280CBF0120002080F001018E480176E6 -+:10A78000D6E91212C0E90412A0F58372696AF8F7DB -+:10A790000EFA0120F8F71CFA04E0686AF8F7C7FD22 -+:10A7A000F8F73EFA01210020F8F783FE0320287015 -+:10A7B000BDE8F0812DE9F04F7D4E83B030464FF07B -+:10A7C000000B40684FF0010800F1500490F855105C -+:10A7D000A6F1100A4FF002096FF00D07A6F130053F -+:10A7E00071B3012969D002296BD0032918BFFFDF9B -+:10A7F00076D0286A0823017821F008010170A27937 -+:10A8000003EAC202114321F004010170E27904233A -+:10A8100003EA8202114321F01001017094F805B09F -+:10A82000A86AF3F752FE8246F9F72EF9BBF1020F40 -+:10A830005DD0BBF1010F5ED0BBF1030F5FD063E0D1 -+:10A84000018E07EBD102818D93B28B4298BF91B2FA -+:10A85000ADF80410A0F848105046F9F7F4F848B1E4 -+:10A86000296A85F802806A694FF480609047032066 -+:10A870006071BEE76A4601A9A86AF3F711FD286274 -+:10A8800010B194F8331029B15046F9F7B0F884F8B4 -+:10A890000580AEE79DF8001031B9A0F800B080F84F -+:10A8A00002B0012101F046FDBDF80400C1B2286AE2 -+:10A8B00001F0BEFE84F805909BE75046F9F797F843 -+:10A8C00097E7B0F84800ADF804006A4601A9A86A05 -+:10A8D000F3F7E6FC2862002808BFFFDF89E7FFE7FF -+:10A8E0005046F9F7B0F8002808BFFFDF81E730EAEB -+:10A8F0000A0009D106E030EA0A0005D102E0BAF107 -+:10A90000000F01D0012100E00021286A027842EA0C -+:10A9100001110170716891F85F20888D098E07EB35 -+:10A92000D1018BB2834298BF88B2002A1CBF001DA0 -+:10A9300080B2F8F714FAE07B00281CBF6079012888 -+:10A9400026D004F150011B4891E80E1000F5027763 -+:10A9500087E80E10216EC0F82112616EC0F8251232 -+:10A9600000F58170F8F7E3FC307800280CBF012176 -+:10A97000002111480176D4E91012C0E90412A0F5B3 -+:10A9800083712A6AF8F713F90020F8F721F904E037 -+:10A99000286AF8F7CCFCF8F743F9307870B1286AE8 -+:10A9A000007810F0100F0ED015E0000028010020F4 -+:10A9B00058010020280E00203010002001210846F8 -+:10A9C000F8F777FD0AE0FE48007810F0100F04BF9A -+:10A9D0002879002802D0A8780028EFD068790028CC -+:10A9E00004BF85F80580F8F7CAFC286A0188A981A8 -+:10A9F0008078A87385F8009003B0BDE8F08FF14827 -+:10AA000010B50078012818BFFFDFF8F785FCEE4885 -+:10AA10000178446811B9FFF7CDFE01E0FFF75FFE52 -+:10AA200094F82800012818BF10BDBDE81040F8F7C1 -+:10AA30001DBDE44810B50078032818BFFFDFBDE84E -+:10AA4000104000F09DB9DF4840797047DD4800793B -+:10AA50007047DC490120887170472DE9F041DA48E0 -+:10AA6000D84D012601784068002700F15004686A3B -+:10AA7000E96A90F8018002F0EDFE68B1012821D06A -+:10AA8000022834D003281CBFFFDFBDE8F081E86A4C -+:10AA9000BDE8F041F3F72EBF01224146E86AF3F723 -+:10AAA0009FFDD4E91210491C40F10000C4E91210C6 -+:10AAB000E079012814BFE671E771687ABDE8F041DA -+:10AAC000EFF7F8B900224146E86AF3F789FDD4E9C7 -+:10AAD0001201401C41F10001C4E91201E079012892 -+:10AAE00002D1E771BDE8F081E671BDE8F081E86A66 -+:10AAF000F3F700FFD4E91201401C41F10001C4E961 -+:10AB00001201E0790128EFD1EBE72DE9F041AE4FDA -+:10AB10004FF000083846A7F130044068012600F1E4 -+:10AB200050052078022818BFFFDFA87850B185F8BB -+:10AB30000280A67062694146042090473878002858 -+:10AB400018BF2E71206A0321007831EA000004BF8B -+:10AB5000E878002805D1EE70216AA67062690220AB -+:10AB600090470121002000F035F918B1BDE8F0410F -+:10AB700000F006B9BDE8F041B1E52DE9F05F924E75 -+:10AB800082463046A6F130054068317800F1500920 -+:10AB900028784FF000080127032818BFFFDF6889D5 -+:10ABA000BAF1000F40F40070688104BF40F040002B -+:10ABB000688100F0D580F8F749F888B999F8100055 -+:10ABC00070B1686A417859B1007899F80710C0F3FC -+:10ABD000C000884204D1EF70BDE8F05F00F0D0B84B -+:10ABE000686A0188A5F80F1080786874688940F059 -+:10ABF0002000688185F804803078706800F1500B7F -+:10AC0000044690F82800012816D1F8F725FC59468B -+:10AC1000204601F06AF878B13078002870680CBFDF -+:10AC2000FC3000F5AA70218841809BF80810017162 -+:10AC30000770687AEFF73EF9686A99F806100078AD -+:10AC4000C0F38000884234D03078706800F150043E -+:10AC500090F8550048B3022845D000BF84F805801D -+:10AC6000307838B12079414620B12171AF706A69DE -+:10AC700010209047E07890B184F80380F8F7F2FE56 -+:10AC8000002808BFFFDF0820AF706A6900219047E5 -+:10AC9000D4E91002411C42F10000C4E91010A0796F -+:10ACA00001280CBF84F80680A771688940F4807081 -+:10ACB0006881686A99F807300178C1F3C0029A4246 -+:10ACC0004ED13278726801F0030102F1500401297B -+:10ACD00018BF022931D003291CBFE87940F00400D5 -+:10ACE00012D0E8713CE0A86AF3F714FB002808BF13 -+:10ACF000FFDFD4E91010491C40F10000C4E9101036 -+:10AD0000687AEFF7D7F8A9E701F035FB88B1A770AB -+:10AD10006989384641F400616981696AAF706A697E -+:10AD20009047E079012802D184F8078018E0E771A4 -+:10AD300016E0E87940F01000D3E74078C8B169899F -+:10AD400041F400616981697839B9FB28F1D8287A22 -+:10AD500020B180206A690021904701E0FFF77DFE65 -+:10AD60005146012000F036F838B1BDE8F05F00F040 -+:10AD700007B8E0790128DAD1D6E7BDE8F05F19E538 -+:10AD800070B5114900254C68F8F738FBF8F72AFB35 -+:10AD9000F8F74CFAF8F7AFFAF7F742FFF8F71EFBAF -+:10ADA000F8F7C2FA94F82800012808BFF8F754FB16 -+:10ADB000044C0021626960899047E179E07805E000 -+:10ADC000370100202801002058010020E269904747 -+:10ADD000257070BD70B51F4C0546002908BF012DB8 -+:10ADE00005D12079401CC0B22071012830D8A1695A -+:10ADF0002846884700282BD0A179174839B1012D62 -+:10AE000001BF41780029017811F0100F20D0E179BD -+:10AE1000F1B912490978002918BF002102D029434D -+:10AE200004D013E0012D18BF0121F8D10C49097895 -+:10AE300011F0100F04BF007810F0100F08D0A078A8 -+:10AE400030B9607810B111F0100F01D0002070BD42 -+:10AE5000012070BD2801002037010020580100208A -+:10AE60003401002010B540F2BB11F74803F093F80D -+:10AE7000F648002141704FF46171418010BD2DE909 -+:10AE8000F0410F46064600F0E8FAEF4C102817D0C4 -+:10AE900004EBC00191F8421111F0010F1CBF012019 -+:10AEA000BDE8F081617808291FD2617804EBC00009 -+:10AEB000491C6170012180F842110846BDE8F0810B -+:10AEC0006178082911D22578681C207004EBC50828 -+:10AED0003868C8F83C01B888A8F84001102D28BF90 -+:10AEE000FFDF88F83B612846DFE70020BDE8F081FE -+:10AEF000D5480178491E4BB2002BB8BF704770B4DB -+:10AF00005FF0000500EBC30191F8421111F0010F51 -+:10AF10003BD04278D9B2521E427000EBC10282F897 -+:10AF2000425190F802C00022BCF1000F0BD98418E6 -+:10AF300094F803618E4202D1102A26D103E0521CFC -+:10AF4000D2B29445F3D80278521ED2B202708A422D -+:10AF50001BD000EBC20200EBC10CD2F83B41CCF895 -+:10AF60003B41D2F83F21CCF83F21847890F800C0D3 -+:10AF70000022002C09D9861896F8036166450AD18B -+:10AF8000102A1CBF024482F80311591E4BB2002B39 -+:10AF9000B8DA70BC7047521CD2B29442EBD8F4E7D6 -+:10AFA0002DE9F0471E4617468846814600F055FABF -+:10AFB000A54C0546102831D0A078002100280ED9D4 -+:10AFC000621892F80331AB4205D110291CBF122040 -+:10AFD000BDE8F08703E0491CC9B28842F0D80828D0 -+:10AFE00032D2102D1DD000BF94F80280102208F13B -+:10AFF0000100A07004EB081909F10300394600F0C4 -+:10B0000023FE09F183001022314600F01DFE04EBFF -+:10B01000080080F803510020BDE8F087A0780828D8 -+:10B0200012D22578681C207004EBC50AD8F80000FD -+:10B03000CAF83C01B8F80400AAF84001102D28BF56 -+:10B04000FFDF8AF83B91CFE70720BDE8F08770B4B7 -+:10B050007D488178491E4BB2002BBCBF70BC704745 -+:10B0600003F0FF0C8178491ECAB2827050FA83F156 -+:10B0700091F8031194453AD000EB021400EB0C1543 -+:10B08000D4F80360C5F80360D4F80760C5F807601A -+:10B09000D4F80B60C5F80B60D4F80F60C5F80F60EA -+:10B0A000D4F88360C5F88360D4F88760C5F88760FA -+:10B0B000D4F88B60C5F88B60D4F88F40C5F88F400A -+:10B0C000841800EB0C0502EB420294F803410CEBF0 -+:10B0D0004C0C00EB420285F8034100EB4C0CD2F81B -+:10B0E0000B41CCF80B41B2F80F21ACF80F2100EB6B -+:10B0F000C10292F8422112F0010F35D190F802C03E -+:10B1000000220C46BCF1000F0BD9851895F80351AD -+:10B110008D4202D1102A27D103E0521CD2B29445AD -+:10B12000F3D80178491EC9B20170A1421CD000EBCE -+:10B13000C10100EBC402D1F83BC1C2F83BC1D1F858 -+:10B140003F11C2F83F1190F802C002780021BCF113 -+:10B15000000F09D9451895F8035195420BD11029D4 -+:10B160001CBF014481F80341591E4BB2002BBFF6AE -+:10B1700077AF70BC7047491CC9B28C45EAD8F3E779 -+:10B1800032494870704731484078704738B14AF2C8 -+:10B19000B811884203D82D4948800120704700200B -+:10B1A00070472A484088704710B500F056F91028BB -+:10B1B00014D0254A0146002092F802C0BCF1000FCD -+:10B1C0000CD9131893F803318B4203D1102818BF00 -+:10B1D00010BD03E0401CC0B28445F2D8082010BD69 -+:10B1E00019498A78824286BF01EB00108330002023 -+:10B1F000704715498A78824286BF01EB0010C01C57 -+:10B2000000207047104B93F802C084459CBF00207B -+:10B210007047184490F8030103EBC00090F83B31ED -+:10B220000B70D0F83C111160B0F840019080012003 -+:10B230007047054A114491F8032104490A700268D5 -+:10B240004A60808808817047581000206001002003 -+:10B2500010B5144600F001F9102809D0F9490A7810 -+:10B26000824205D1486820600889A080012010BD75 -+:10B27000002010BD10B5F7F749FC002804BFFF20DF -+:10B2800010BDBDE81040F7F767BCEF498A788242ED -+:10B290009CBF00207047084490F8030101EBC000F8 -+:10B2A00090F8420100F00100704770B5E64E0024AE -+:10B2B00025463078002814D906EBC50090F84211D5 -+:10B2C00011F0010F08D090F83B2100F59E71204647 -+:10B2D000631CDCB2F7F7D1FD681CC5B23078A84218 -+:10B2E000EAD87078A04218BFFFDF70BD70B5D64CA9 -+:10B2F00000263546A078002812D96019731C90F8F2 -+:10B30000030104EBC00000F59E7190F83B2130462C -+:10B31000DEB2F7F7B2FD681CC5B2A078A842ECD83F -+:10B32000C0B2B04218BFFFDF70BD10B5F7F704FE22 -+:10B3300058B30024F7F704FEC34A00211378002B0A -+:10B3400023D900BF02EBC10C9CF842C11CF0010FD5 -+:10B3500017D084421CBF04F1010C0CF0FF0410D183 -+:10B3600093780020002B0AD902EB000C9CF803C153 -+:10B370008C4508BF10BD401CC0B28342F4D81020D9 -+:10B3800010BD491CC9B28B42DCD8082010BD10B5D5 -+:10B39000F7F7D2FD002804BF082010BDBDE810401B -+:10B3A000F7F7CEBDA74910B5497841B1A64B9978BA -+:10B3B00029B1C21CD81CF7F746FB012010BD0020A4 -+:10B3C00010BDA14A01EB410102EB41010268C1F845 -+:10B3D0000B218088A1F80F01704770B59A4D0024A9 -+:10B3E000A878002898BF70BDC0B2A04212D905EB62 -+:10B3F000041010F183060DD01021304600F000FC3F -+:10B4000040B904EB440005EB400000F20B1130465C -+:10B41000F8F7B7FB601CC4B2A878A042E4D870BDAE -+:10B4200001461022894800F00FBC8848704770B56B -+:10B43000854D0446A878A04206D905EB04101021DA -+:10B44000833000F0DDFB08B1002070BD04EB440048 -+:10B4500005EB400000F20B1070BD2DE9F0417A4D74 -+:10B460000646002428780F46002811D905EBC400B1 -+:10B4700090F83B11B14206D10622394600F59E7084 -+:10B4800002F0E6FC38B1601CC4B22878A042EDD8C6 -+:10B490001020BDE8F0812046BDE8F0816A4910B473 -+:10B4A0004A7801EBC003521E4A70002283F8422101 -+:10B4B00091F802C0BCF1000F0DD98B1893F803412D -+:10B4C000844204D1102A1CBF10BC704703E0521CF8 -+:10B4D000D2B29445F1D80A78521ED2B20A70824292 -+:10B4E00004BF10BC704701EBC00301EBC202D2F8ED -+:10B4F0003BC1C3F83BC1D2F83F21C3F83F218C7850 -+:10B5000091F800C00022002C9CBF10BC70478B1823 -+:10B5100093F80331634506D1102A1CBF114481F80A -+:10B52000030110BC7047521CD2B29442EFD810BC39 -+:10B53000704770B444490D188A78521ED3B28B708C -+:10B5400095F80321984239D001EB001C01EB03145C -+:10B5500000EB4000D4F80360CCF80360D4F8076037 -+:10B56000CCF80760D4F80B60CCF80B60D4F80F600F -+:10B57000CCF80F60D4F88360CCF88360D4F887608F -+:10B58000CCF88760D4F88B60CCF88B60D4F88F400F -+:10B59000CCF88F4001EB030C03EB43039CF803C191 -+:10B5A00001EB430385F803C101EB4000D3F80BC165 -+:10B5B000C0F80BC1B3F80F31A0F80F3101EBC20096 -+:10B5C00090F8420110F0010F1CBF70BC70470020C2 -+:10B5D0008C78002C0DD90B1893F803C1944504D135 -+:10B5E00010281CBF70BC704703E0401CC0B28442EE -+:10B5F000F1D80878401EC0B20870904204BF70BCF9 -+:10B60000704701EBC20301EBC000D0F83BC1C3F8A7 -+:10B610003BC1D0F83F01C3F83F018C780B78002084 -+:10B62000002C9CBF70BC704701EB000C9CF803C160 -+:10B630009C450DD110281CBF084480F8032170BC24 -+:10B6400070470000600100205810002013120020F5 -+:10B65000401CC0B28442E7D8F1E7000010B50A7B75 -+:10B6600002F01F020A73002282758B181B7A03F006 -+:10B67000010C5B0803F00104A4445B0803F001041F -+:10B68000A4445B0803F00104A4445B0803F0010434 -+:10B6900064444FEA530C0CF0010323444FEA5C0C62 -+:10B6A0000CF00104234403EB5C0300EB020C521C7E -+:10B6B0008CF8113090F816C0D2B263448375052A15 -+:10B6C000D3D3D8B2252888BFFFDF10BD00238383E2 -+:10B6D000028401EBC202521EB2FBF1F1C18370473A -+:10B6E0000A4630B40021032A0DD04FF4FA4C002A48 -+:10B6F0007ED0012A7DD0022A1CBF30BC7047014693 -+:10B7000030BC5030AAE7A0F8501080F8561080F8EE -+:10B71000571080F85B1080F85C1080F85D1080F89E -+:10B720005E1080F8521080F8531080F8541080F8A2 -+:10B73000551080F86910A0F86C1080F87210A0F80D -+:10B740007410A0F87A1080F87E10A0F8801080F8AD -+:10B75000821080F8671080F8681080F85F1080F819 -+:10B76000601080F8831080F8841080F88610F12231 -+:10B7700080F88C20A0F8781080F88E10A0F8C01007 -+:10B78000A0F8C210A0F8C410A0F8C610A0F8C81005 -+:10B79000A0F8CA1080F8CD10A0F8D61080F8D41008 -+:10B7A000A0F8E810A0F8EA1080F8281001844FF4FF -+:10B7B000486242801B228286C2864FF4A47343876C -+:10B7C00003878285C28543860386A0F84020A0F8BF -+:10B7D00042308287C387A0F84420A0F84620A0F812 -+:10B7E000482080F88F1080F8181180F8F01001E0E0 -+:10B7F00006E043E080F8F61080F8F91030BC70479E -+:10B80000A0F8D61080F8CE104288FB4B1344B3FB4F -+:10B81000F2F3A0F86E304BF68033A0F87030C48895 -+:10B82000A0F87410B0F8781000F15003514391FB68 -+:10B83000F2F1A0F87810E100B1FBF2F1491C89B2F5 -+:10B8400001FB02F4A0F87610B4F5C84FC4BF491E3E -+:10B85000D984BCFBF2F1491C998502F5802101F5E0 -+:10B86000EE31A1F1010CBCFBF2F1D983B3F81CC09D -+:10B870000CFB02F1B1FBF2F1998340E7A0F8D6107E -+:10B8800000F150024488B0F81231B0F816019184EA -+:10B89000118DC0006143B0FBF3F091FBF3F1401C4C -+:10B8A000118580B200FB03F1D084B1F5C84FC4BF4D -+:10B8B000401ED084BCFBF3F0401C9085108C03EB41 -+:10B8C000C000401EB0FBF3F0D083908B6043B0FB10 -+:10B8D000F3F0908330BC70470A4630B40021032A4D -+:10B8E0000DD04FF4FA4C002A71D0012A6ED0022AF2 -+:10B8F0001CBF30BC7047014630BC5030AEE6A0F8EB -+:10B90000501080F8561080F8571080F85B1080F8BF -+:10B910005C1080F85D1080F85E1080F8521080F89E -+:10B92000531080F8541080F8551080F86910A0F872 -+:10B930006C1080F87210A0F87410A0F87A1080F8DB -+:10B940007E10A0F8801080F8821080F8671080F8D0 -+:10B95000681080F85F1080F8601080F8831080F81D -+:10B96000841080F88610F12280F88C20A0F87810DE -+:10B9700080F88E10A0F8C81080F8CA1080F8C010A7 -+:10B98000C0F8C41080F828101B228286C2864FF4AB -+:10B99000A473438703878285C28543860386A0F804 -+:10B9A0004020A0F842308287C387A0F84420A0F846 -+:10B9B0004620A0F8482080F88F1080F8F01080F81A -+:10B9C000DC1080F8EC1030BC704700E039E04288B1 -+:10B9D000894B1344B3FBF2F3A0F86E304BF680337F -+:10B9E000A0F87030C488A0F87410B0F8781000F196 -+:10B9F0005003514391FBF2F1A0F87810E100B1FB44 -+:10BA0000F2F1491C89B201FB02F4A0F87610B4F5FA -+:10BA1000C84FC4BF491ED984BCFBF2F1491C9985AB -+:10BA200002F5802101F5EE31A1F1010CBCFBF2F130 -+:10BA3000D983B3F81CC00CFB02F1B1FBF2F199837E -+:10BA400059E7D0F8E44000F1500243886089E48966 -+:10BA50009184118D594391FBF0F11185E100B1FB07 -+:10BA6000F0F1491C89B201FB00F4D184B4F5C84F50 -+:10BA7000C4BF491ED184BCFBF0F1491C9185118CD7 -+:10BA800000EBC101491EB1FBF0F1D183918B594309 -+:10BA9000B1FBF0F0908330BC7047837D0BB1252B58 -+:10BAA00001D912207047002A04BF0020704770B4EB -+:10BAB00090F817C00C7E514D04FB02C22C464FF08B -+:10BAC000000CE2FB054C4FEA1C1C6FF024040CFB3D -+:10BAD0000422D2B201EBD20CC27502F007059CF829 -+:10BAE00008C0012404FA05F51CEA050F18BF027608 -+:10BAF0002CD1B2FBF3FC03FB1C22521CD2B24FF040 -+:10BB0000000C00BF00EB0C035B7C93423CBFD21ADD -+:10BB1000D2B20ED301EB0C0500232D7A04FA03F602 -+:10BB200035421CBF521ED2B26AB15B1CDBB2082B7D -+:10BB3000F4D30CF1010303F0FF0CBCF1050FE1D3CA -+:10BB400070BC1F20704703EBCC01017670BC002055 -+:10BB5000704730B50D460446072988BFFFDFE078FF -+:10BB600005F0070100F05000084340F08800E07045 -+:10BB7000A07800F0A70040F01800A070607800F0F6 -+:10BB80005E0040F020006070207800F0BC0040F0C3 -+:10BB90004000207030BD017931F01F0113BF00203B -+:10BBA00000221146704710B4435C491C03F0010C9D -+:10BBB0005B0803F00104A4445B0803F00104A444FF -+:10BBC0005B0803F00104A4445B0803F00104A444EF -+:10BBD0005B0803F001045B08A44403F00104A444DF -+:10BBE0000CEB53031A44D2B20529DDDB012A8CBFCA -+:10BBF0000120002010BC7047FFDB050053E4B36E4A -+:10BC000030B40022A1F1010CBCF1000F12DD431E83 -+:10BC100011F0010F08BF13F8012F5C785FEA6C0C7C -+:10BC200008D000BF13F8025F22435C782A43BCF1BE -+:10BC3000010CF7D1491E5CBF405C0243002A0CBFD7 -+:10BC40000120002030BC7047130008BF704710B4BB -+:10BC500001EB030CD41A1CF801CC5B1E00F804C0E5 -+:10BC600013F0FF03F4D110BC7047F0B58DB0164649 -+:10BC700010251C466A46AC4600EB0C03A5EB0C07EE -+:10BC800013F8013CD355ACF1010313F0FF0CF3D1D1 -+:10BC900015461032102084460B18ACEB000713F841 -+:10BCA000013C401ED35510F0FF00F5D1284601F0AD -+:10BCB00081F986B1102005F1200201461318A1EB8D -+:10BCC000000C13F8013C401E04F80C3010F0FF008B -+:10BCD000F4D10DB0F0BD08982060099860600A9812 -+:10BCE000A0600B98E0600DB0F0BD38B505460C467D -+:10BCF0006846F7F7C6FB002808BF38BD9DF900204D -+:10BD0000227294F909100020511A48BF494295F84F -+:10BD100029308B42C8BF38BDFF2B08BF38BDA17A80 -+:10BD2000491CC9B2A17295F82A30994203D8617AA8 -+:10BD30007F2918BF38BD62720020A072012038BD73 -+:10BD40000B294AD2DFE801F006090E13161B323C1C -+:10BD50003F474200002A42D03FE0022A18BF032A90 -+:10BD60003DD03AE0072A18BF062A38D035E0082A25 -+:10BD700035D032E0A2F10C000C2830D92DE023B1EF -+:10BD8000A2F10D000B282AD927E00F2A18BF0E2A8E -+:10BD900025D090F8340020B10F2A1ED3172A1ED9BF -+:10BDA0001BE0132A19D3172A19D916E0A2F10C01A6 -+:10BDB000032914D990F8340078B1182A0FD90CE06F -+:10BDC000092A0CD009E0012A09D006E0192A18BF77 -+:10BDD0001A2A04D001E00A2A01D00020704701206D -+:10BDE00070472DE9F04187680D4604462046F4F778 -+:10BDF00085FE90B1CDB13846A168F5F71EFFA0B120 -+:10BE0000401EB0FBF5F0461C06FB05F13846F4F782 -+:10BE100004FEA0603046BDE8F081F4F7E5FD40F295 -+:10BE20006171F4F7FAFDA060E0E70020BDE8F08161 -+:10BE3000904228BF704770B50446101B642838BF75 -+:10BE4000642025188D4205D8F5F722FF00281CBF75 -+:10BE5000284670BD204670BD8A8D0B8ED200703290 -+:10BE600092B2934238BF1A46CB8D498EDB007033B5 -+:10BE70009BB2994238BF0B46012100280CBF01201C -+:10BE8000002003FB01210023702212FB03119831D3 -+:10BE9000002818BF04200844704710B4B0F844309C -+:10BEA000FB2B28BFFB23DB007033B0F846009BB2AE -+:10BEB000FB2828BFFB20C00070301FFA80FC914295 -+:10BEC00034BF012000200844C4B28A4234BF01209C -+:10BED00000201044C1B28C4234BF0A4622460020E2 -+:10BEE000002A04BF10BC704703FB04F00CFB0100E8 -+:10BEF00021447023C1EB420113FB01004D2112FBD1 -+:10BF000001F100EB810010BC98387047828DD2009F -+:10BF1000703293B2028E9A4238BF1346C28DB0F887 -+:10BF200032C0D200703292B2944538BF62464FF0B0 -+:10BF3000010C02FB0C324FF0000C702313FB0C229F -+:10BF400002F19C03428840F2712C02FB0CF2DFF8F4 -+:10BF5000F8C099420CEB420234BF9C468C46944593 -+:10BF600028BF114602D2994238BF19464162704734 -+:10BF700010B4B0F84430FB2B28BFFB23DB00703338 -+:10BF8000B0F846009BB2FB2828BFFB20C0007030F1 -+:10BF90001FFA80FC914234BF012000200844C4B243 -+:10BFA0008A4234BF012000201044C1B28C4234BF09 -+:10BFB0000A4622460020002A04BF10BC704703FB3B -+:10BFC00004F00CFB010021447023C1EB420113FB80 -+:10BFD00001004D2112FB01F100EB810010BC9C38E7 -+:10BFE000704710B4838DDB0070339CB2038EA34284 -+:10BFF00038BF1C46C38DDB0070331FFA83FC438EB1 -+:10C00000634538BF9C4601230CFB034300244FF0DB -+:10C01000700C1CFB0433B0F802C040F271240CFB1E -+:10C0200004FCC2EB4C029833A2F22132994234BF95 -+:10C030009C468C46944528BF114602D2994238BF8F -+:10C040001946416210BC7047F1FCFFFF282101F046 -+:10C05000A2BF30B50546007801F00F0220F00F00B6 -+:10C060001043287007290BD2DFE801F0040604060C -+:10C0700004080400062405E00C2403E0222401E067 -+:10C080000024FFDF687820F03F002043687030BD57 -+:10C09000007800F00F0070470A68C0F80320898814 -+:10C0A000A0F807107047D0F803200A60B0F8070026 -+:10C0B000888070470A68C0F809208988A0F80D10A8 -+:10C0C0007047D0F809200A60B0F80D0088807047EA -+:10C0D0000278402322F0400203EA811111430170EB -+:10C0E00070470078C0F3801070470278802322F0F8 -+:10C0F000800203EAC1111143017070470078C00942 -+:10C100007047D0F80320C1F80920B0F80720A1F843 -+:10C110000D200A7822F080020A700078800942EA35 -+:10C12000C0100870704770B515460E4604461F2AA9 -+:10C1300088BFFFDF2A46314604F1090001F0B4FE52 -+:10C140006078A91D20F03F0001F03F0108436070B6 -+:10C1500070BD70B5054640780E4600F03F04062CD1 -+:10C1600038BFFFDFA01FC4B21F2C88BF1F24224688 -+:10C1700005F10901304601F097FE204670BD70B50B -+:10C1800015460E4604461F2A88BFFFDF2A46314661 -+:10C1900004F1090001F088FE6078A91D20F03F003D -+:10C1A00001F03F010843607070BD70B505464078EE -+:10C1B0000E4600F03F04062C38BFFFDFA01FC4B2BC -+:10C1C0001F2C88BFFFDF224605F10901304601F030 -+:10C1D0006BFE204670BD0968C0F80F1070470A88D2 -+:10C1E000A0F813208978417570474176090A817655 -+:10C1F0007047C176090A017770474177090A81774C -+:10C200007047C175090A017670478175704790F8CB -+:10C21000242001F01F0122F01F02114380F8241096 -+:10C22000704790F82420E02322F0E00203EA411155 -+:10C23000114380F8241070471F3001F0E6BF4178A9 -+:10C24000007801F03F0110F00F0006D0012808D05F -+:10C25000022809D006280BD00FE0881F1F280AD912 -+:10C260000BE00C2909D106E0881F1F2803D904E040 -+:10C27000881F1F2801D8012070470020704741788F -+:10C28000007801F03F0100F00F00042805D10629D5 -+:10C2900003D325299CBF012070470020704710B4AC -+:10C2A000017801F00F01032922D0052925D1447816 -+:10C2B000B0F81910B0F81BC0B0F81730827D04F048 -+:10C2C0003F04222C19D1062917D3B1F5486F98BF26 -+:10C2D000BCF5FA7F11D282B1082A98BF8A420CD2EB -+:10C2E0008B429CBFB0F81D00B0F5486F05D807E041 -+:10C2F000407800F03F000C2802D010BC00207047AE -+:10C3000010BC01207047222101F045BE00B5027823 -+:10C3100001F0030322F003021A430270002242706C -+:10C32000012914BF022900BD032912BFFFDF01212B -+:10C33000417000BD01F0030300B5027822F0030252 -+:10C340001A43027000224270012914BF022900BD65 -+:10C35000032912BFFFDF0121417000BD007800F00A -+:10C36000030070470278102322F0100203EA011143 -+:10C370001143017070474178C07814283BD2DFE840 -+:10C3800000F00A0D101316191C1F2225282B2E3120 -+:10C390003A3A3A3A34370C292FD030E008292CD0D9 -+:10C3A0002DE0022929D02AE0172926D027E00D29DF -+:10C3B00023D024E0012920D021E001291DD01EE056 -+:10C3C00002291AD01BE0092917D018E0092914D036 -+:10C3D00015E0012911D012E001290ED00FE0062945 -+:10C3E0000BD00CE0022908D009E0012905D006E0B5 -+:10C3F000012902D003E0FB2901D801207047002069 -+:10C40000704730B50546C17016291CD2DFE801F02F -+:10C410000B0D0F111315150F17171515190F1B1BE2 -+:10C420001B1B151517170C240FE008240DE0022420 -+:10C430000BE0172409E00D2407E0012405E009249E -+:10C4400003E0062401E00024FFDF6C7030BDC078FB -+:10C450007047C171090A01727047B0F80700704750 -+:10C460004172090A81727047B0F809007047C172C1 -+:10C47000090A01737047B0F80B0070474171090A4F -+:10C4800081717047B0F805007047017170470079FD -+:10C4900070474173090A81737047B0F80D00704707 -+:10C4A00030B4B0F80720664DB0F809C0B0F80530D8 -+:10C4B0000179941F2D1998BFBCF5FA7F0ED269B18E -+:10C4C000082998BF914209D293429FBFB0F80B0050 -+:10C4D000B0F5486F012030BC98BF7047002030BCD9 -+:10C4E0007047001D01F091BE021D0846114601F083 -+:10C4F0008CBE4172090A81727047B0F8090070471A -+:10C5000001717047007970470A684260496881602C -+:10C51000704742680A608068486070470988818176 -+:10C5200070478089088070470A68C0F80E20496803 -+:10C53000C0F812107047D0F80E200A60D0F8120030 -+:10C54000486070470968C0F816107047D0F81600A8 -+:10C55000086070470A6842604968816070474268B5 -+:10C560000A608068486070470968C1607047C068A9 -+:10C5700008607047017170474171090A8171704705 -+:10C58000C171090A0172704700797047B0F805005F -+:10C590007047B0F807007047017170470079704725 -+:10C5A000017170470A68426049688160704742685B -+:10C5B0000A608068486070470171090A41717047DC -+:10C5C0008171090AC17170470172090A417270478D -+:10C5D0008172090AC172704780887047C0887047AD -+:10C5E000008970474089704701891B2914D3FB29B2 -+:10C5F00012D84189B1F5A47F21BF40F648028A4292 -+:10C6000081881B2908D3FB2906D8C088B0F5A47FF0 -+:10C6100022BF824201207047002070470A684260B2 -+:10C6200049688160704742680A6080684860704766 -+:10C6300030B50C460546FB2988BFFFDF6C7030BD66 -+:10C6400086F3FFFF70B50446C2F11005281901F00A -+:10C650002BFC15F0FF0108D0491EC9B280206054A0 -+:10C660002046BDE8704001F096BC70BD30B505E0D5 -+:10C670005B1EDBB2CC5CD55C6C40C454002BF7D1A4 -+:10C6800030BD10B5002409E00B78521E44EA430384 -+:10C6900000F8013B11F8013BD2B2DC09002AF3D1CA -+:10C6A00010BD2DE9F0410C4601200978FF4E92B0F3 -+:10C6B000154602274FF006084FF0040C71B101290E -+:10C6C0001ED0022945D0032905D12978042902D199 -+:10C6D00005201070002012B0BDE8F081606850B1F4 -+:10C6E000CDE90106012020708DF80080606A049079 -+:10C6F0001146684663E0277085F800C0566026E062 -+:10C7000029780429E7D1696810222069FFF7B9FF69 -+:10C710006868C07B000606D5E44A20691023103201 -+:10C720000146FFF7A3FFD4E904101022FFF7A9FF89 -+:10C730002069C07B000606D5DC4A606910231032F0 -+:10C740000146FFF793FF277085F800C06E60032055 -+:10C75000C1E729780429BED1A08910280CD9A0F1FD -+:10C76000100080B2A081A1684FF010030144684618 -+:10C770006A68FFF77BFF18E004D14FF010032269CD -+:10C78000A16807E0C2B20DA8A168FFF75BFF62696C -+:10C7900010230DA909A8FFF769FF102309A968460E -+:10C7A0006A68FFF763FF0320207060680590CDF88A -+:10C7B00018D08DF81080606A0890294604A8F3F715 -+:10C7C000DDFD88E72DE9F04107460D4601200B7895 -+:10C7D00006213BB1012B04D11378052B01D1117037 -+:10C7E000002079E76C69012620226170E8686060AA -+:10C7F000686A6062A168287C0870A681A068A96840 -+:10C80000401C01F051FBA08920222030A081A068AB -+:10C810006968213001F048FBA08921462030A081C1 -+:10C820002E703846BDE8F041F3F7BFBD2DE9F05F4B -+:10C830000D46834601200978174606464FF0060844 -+:10C84000D1B1DFF868A24FF00009AAF1080A012966 -+:10C8500023D002297ED003290CD13978052909D1AA -+:10C8600079681022E86901F01FFB0720387018353D -+:10C8700000207D60BDE8F09F2C6A8C48202284F85F -+:10C880000180203060602020A081686A6062696851 -+:10C89000A06801F009FB2E70D4E039780529E9D1B0 -+:10C8A0002C6A84F80180686A606251681022E86925 -+:10C8B00001F0FAFAE8696060A0684F4680F80090DD -+:10C8C000A681A0684670A089401C80B2A081A168A2 -+:10C8D0000844696951F8012F026089888180A08924 -+:10C8E000801D80B2A0816969A2680978C1F3400106 -+:10C8F0001154A089401C80B2A081A1680844296914 -+:10C9000051F8012F026089888180A089801D80B242 -+:10C91000A0812969A2680978C1F340011154A08956 -+:10C920001022401C80B2A081A1680844E96801F08F -+:10C93000BBFAA0891022103080B2A081A1680844FF -+:10C94000A96801F0B1FAA089103080B2A081A16875 -+:10C95000014400E00DE0DAF804000860A089001D41 -+:10C9600080B2A081A1680F54A089401CA081022040 -+:10C9700067E03978052992D151681022A86901F041 -+:10C9800093FA2C6A84F80180E8696060686A6062E2 -+:10C99000A16881F80090A681A0684670A089401C1B -+:10C9A00080B2A081A1680844696951F8012F026032 -+:10C9B00089888180A089801D80B2A0816969A26870 -+:10C9C0000978C1F340011154A089401C80B2A081B4 -+:10C9D000A1680844296951F8012F02608988818083 -+:10C9E000A089801D80B2A0812969A2680978C1F35D -+:10C9F00040011154A0891022401C80B2A081A1687E -+:10CA00000844E96801F050FAA0891022103080B281 -+:10CA1000A081A1680844A96801F046FAA0891030F5 -+:10CA200080B2A081A1680144DAF804000860A089FE -+:10CA3000001D80B2A081A1680E54A089401CA08175 -+:10CA40000320287021465846BDE8F05FF3F7ADBCDF -+:10CA500070B50D4606460978012041B1012905D17E -+:10CA60001178052902D108201070002070BD2C6AB1 -+:10CA70000620607069686160696A6162EA69A1683C -+:10CA800052F8013F0B6092888A80A081E869A16812 -+:10CA90000078C0F340008871A089401C80B2A0815A -+:10CAA000A1680844A96951F8012F01E014E60100CA -+:10CAB000026089888180A089801D80B2A081A969D7 -+:10CAC000A2680978C1F340011154A089401C80B2CA -+:10CAD000A081A168084469690A8802808978817008 -+:10CAE000A0891022C01C80B2A081A16808442969D5 -+:10CAF00001F0DAF9A0891022103080B2A081A1687B -+:10CB00000844E96801F0D0F9A0891022103080B201 -+:10CB1000A081A1680844A96801F0C6F9A08921464E -+:10CB20001030A081012028703046BDE87040F3F736 -+:10CB30003CBC70B50D4606460978012059B1012963 -+:10CB400008D11178052905D10920107050680068B6 -+:10CB50005060002070BD6C69062010226070E8688B -+:10CB60006060686A60622969A06801F09DF9102020 -+:10CB7000A081A06820221030A96801F095F9A08951 -+:10CB80002022203080B2A081A1680844696801F0A9 -+:10CB90008BF9A08921462030A081012028703046E1 -+:10CBA000BDE87040F3F701BC70B50C460120097870 -+:10CBB0008EB01546062659B1012934D0022905D177 -+:10CBC0002978042902D10A20107000200EB070BD0F -+:10CBD000606910236A460078C0F340008DF80000B9 -+:10CBE000A0690078C0F340008DF80100E06801689A -+:10CBF000CDF802108188ADF8061080798DF8080014 -+:10CC000020690168CDF809108188ADF80D10807990 -+:10CC10008DF80F006068059009A80690A168FFF7DD -+:10CC200025FD01201DE029780429CFD1A06910231A -+:10CC30006A4650F8011F00918088ADF804006069D1 -+:10CC400050F8011FCDF806108088ADF80A000020CA -+:10CC500003906068059009A806906968FFF706FDD3 -+:10CC6000022020708DF81060606A0890294604A8A0 -+:10CC7000F3F784FBAAE700B50B7889B001204BB12C -+:10CC8000012B05D11178042902D10B20107000204E -+:10CC900009B000BD4868019005A80290C868036803 -+:10CCA0000593406806908868036807934068089079 -+:10CCB0000120087006208DF80000486A0490114693 -+:10CCC0006846F3F75BFBE3E700B50B7889B001201A -+:10CCD00043B1012BDCD111780429D9D10C2010707B -+:10CCE0000020D5E74868019005A80290886803688D -+:10CCF0000593406806900020079008900120087076 -+:10CD000006208DF80000486A049011466846F3F743 -+:10CD100035FBBDE700B50B7889B0012043B1012B8D -+:10CD2000B6D111780429B3D10D2010700020AFE7DF -+:10CD300048680590CDF818D088680088ADF80000E4 -+:10CD4000C8680088ADF802000020019002900390AE -+:10CD50000120087006208DF81000486A08901146DE -+:10CD600004A8F3F70BFB93E730B403460C780120DB -+:10CD70005CB1012C15D0022C05D111780C2902D1FF -+:10CD80000E201070002030BC704701200870C86869 -+:10CD9000042242704A6842600B4A8260921EC2605E -+:10CDA0000BE014780D2CEED102200870C868032423 -+:10CDB0004470526842608A688260496A41620146F2 -+:10CDC00030BC1846F3F7F1BA0EE6010070B41D78D6 -+:10CDD000039C4FF0000CAA4204BF70BC70478E5CED -+:10CDE000864208BF4FF0010C02D0BCF1000F05D005 -+:10CDF000561CA64208BF00268E5D8E54561CA642C5 -+:10CE00000CBF0022521CD2B2AA42E8D1BCF1000FE2 -+:10CE100004BF70BC70471878411E19703CBF601E7B -+:10CE2000187070BC704700002DE9F0410C461149A4 -+:10CE30000D68104A104908321160A0F120012A291A -+:10CE400001D301200CE03E2810D040CC0B4F94E8D9 -+:10CE50000E0007EB8000241F50F8807C3046B84756 -+:10CE600020600448001D0560BDE8F0812046E4F71D -+:10CE7000A7F9F5E7100502400100000144E60100B2 -+:10CE800010B5524800F04EFA00B1FFDF4F48401C89 -+:10CE900000F048FA002800D0FFDF10BD2DE9F14F67 -+:10CEA0004B4ED6F800B00127484800F043FADFF8AF -+:10CEB0001C8128B95FF0000708F1010000F050FA6A -+:10CEC000444C00254FF0030901206060C4F8005174 -+:10CED000C4F80451009931602060DFF8FCA018E02C -+:10CEE000DAF80000C00614D50E2000F064F8EFF365 -+:10CEF000108010F0010072B600D00120C4F8049335 -+:10CF0000D4F8001119B9D4F8041101B920BF00B93F -+:10CF100062B6D4F8000118B9D4F804010028DFD0B3 -+:10CF2000D4F804010028CFD137B1C6F800B008F119 -+:10CF3000010000F0FFF911E008F1010000F0FAF93A -+:10CF40000028B9D1C4F80893C4F80451C4F80051BA -+:10CF50000E2000F030F81D4800F002FA0020BDE875 -+:10CF6000F88F2DE9F0438DB00D46064600240DF1F3 -+:10CF700010090DF1200817E004EB4407102255F8C2 -+:10CF80002710684600F090FF05EB870710224846FF -+:10CF9000796800F089FF6846FFF780FF102241465C -+:10CFA000B86800F081FF641CB442E5DB0DB00020DE -+:10CFB000BDE8F08372E700F01F02012191404009B3 -+:10CFC000800000F1E020C0F8801270476A01002064 -+:10CFD00004E5004000E0004010ED00E0C7480021FB -+:10CFE00001708170704770B5C54D01232B60C54B32 -+:10CFF0001C68002CFCD0002407E00E6806601E6848 -+:10D00000002EFCD0001D091D641C9442F5D30020A5 -+:10D01000286018680028FCD070BD70B5B74E044673 -+:10D02000B94D3078022800D0FFDFAC4200D3FFDFDB -+:10D030007169B648012903D847F23052944201DDA4 -+:10D0400003224271491C7161291BC160AF4970788C -+:10D05000BDE87040F3F759BE70B5A84C0D46617835 -+:10D06000884200D0FFDFA84E092D4FD2DFE805F03F -+:10D070004E0522314E4E4E4E3C002078022800D004 -+:10D08000FFDF03202070A078022802D0012804D0FE -+:10D0900008E0A06800F01AFC04E004F1080007C8EA -+:10D0A000FFF7A1FF052020700020A070BDE87040B0 -+:10D0B000F3F7C9BBF3F798FC01466068F4F7BDFDD0 -+:10D0C000B04202D2616902290BD30320F4F7DAFFE0 -+:10D0D00012E0F3F789FC01466068F4F7AEFDB04258 -+:10D0E000F3D2BDE8704098E7207802280AD00528DE -+:10D0F00006D0FFDF04202070BDE8704000F0F4B8D7 -+:10D10000022000E00320F4F7BDFFF3E7FFDF70BD6E -+:10D1100070B50546F3F768FC784C6060207801280C -+:10D1200000D0FFDF79490220087000220A718D606B -+:10D1300004224A71744ACA6020706078BDE8704069 -+:10D14000F3F7E3BD10B56D4CA07808B9207808B1AD -+:10D15000112010BD6E48F3F7E1FB6070607820B1DC -+:10D16000012020700020606110BD032010BD024628 -+:10D17000010B0120B2F5003F02D2884000F020BE32 -+:10D18000B2F5802F03D22039884000F021BEB2F5DD -+:10D19000C02F03D24039884000F023BEB2F5002FE3 -+:10D1A00003D26039884000F025BE002070472DE989 -+:10D1B000F041144600EB84070E4605463F1F00F081 -+:10D1C00098FB4FF080510A69504306EB8402121F0E -+:10D1D000B24201D2012200E000221CB10969B4EB85 -+:10D1E000910F02D90920BDE8F0814A498D4216D33A -+:10D1F000AF4214D3854205D2874203D245EA0600E6 -+:10D20000800701D01020EEE78E4208D33AB92846B5 -+:10D21000FFF7ADFF18B93846FFF7A9FF08B10F2097 -+:10D22000E1E73D483D490068884205D02246314645 -+:10D230002846FFF7D8FE10E0FFF784FF0028D2D180 -+:10D240002E4801218560C0E9036481704FF4A97103 -+:10D2500004FB01F01830FFF75BFF0020C3E770B557 -+:10D260004FF08055044628692A49B1FBF0F084420A -+:10D270000AD300F03EFBA04201D8102070BD2869FF -+:10D280006043FFF774FF08B10F2070BD22482349A7 -+:10D290000068884204D02869604300F017FB0CE066 -+:10D2A000FFF750FF0028F0D12969144861438160DD -+:10D2B000022181701A48FFF72BFF002070BD15482E -+:10D2C000010B01208840401E704770B50D46044692 -+:10D2D000FFF7F5FF204201D00F2070BD2946204600 -+:10D2E000BDE8704000F08FBD10B5044C6078F3F7D6 -+:10D2F00065FB00202070A07010BD00006C010020B4 -+:10D3000004E5014000E40140105C0C002412002000 -+:10D3100059D0010000F0010098000020BEBAFECAFA -+:10D320007C5E010000210170084670470146002024 -+:10D3300008707047EFF3108101F0010172B60278B6 -+:10D34000012A01D0012200E000220123037001B96B -+:10D3500062B60AB1002070474FF400507047E9E709 -+:10D36000EFF3108111F0010F72B64FF0000202705E -+:10D3700000D162B600207047F2E700005649096804 -+:10D380000160002070475449086000207047012167 -+:10D390008A0720B1012804D042F204007047916747 -+:10D3A00000E0D167002070474C490120086042F23C -+:10D3B0000600704708B50423484A1907103230B1F7 -+:10D3C000C1F80433106840F0010010600BE01068F1 -+:10D3D00020F001001060C1F808330020C1F80801F6 -+:10D3E0003F4800680090002008BD3C49103140B122 -+:10D3F00001280CD0022812D0032816D042F20500D2 -+:10D400007047086820F01E0040F0100004E0086833 -+:10D4100020F01E0040F014000860002070470868EB -+:10D4200020F01E0040F01800F6E7086820F01E000B -+:10D4300040F01C00F0E7294924310A6802430A60E1 -+:10D4400000207047254924310A6882430A60002081 -+:10D450007047224924310968016000207047012883 -+:10D4600001D9072070471F4A52F8200002680A437A -+:10D47000026000207047012801D907207047194A2F -+:10D4800052F8200002688A43026000207047012899 -+:10D4900001D907207047134A52F82000006808603D -+:10D4A00000207047020010494FF0000003D0012A0D -+:10D4B00001D0072070470A6070474FF0804100207C -+:10D4C000C1F808014FF0E020802180F8001401210C -+:10D4D000C0F8001170470000000400400005004043 -+:10D4E00008010040ECE60100780500406249634B0A -+:10D4F0000A6863499A42096801D1C1F310010160C9 -+:10D50000002070475C495D4B0A685D49091D9A42DD -+:10D5100001D1C0F310000860002070475649574BF6 -+:10D520000A68574908319A4201D1C0F310000860D7 -+:10D530000020704730B5504B504D1C6842F2080334 -+:10D54000AC4202D0142802D203E0112801D31846BD -+:10D5500030BDC3004B481844C0F81015C0F814255E -+:10D56000002030BD4449454B0A6842F209019A4205 -+:10D5700002D0062802D203E0042801D308467047EF -+:10D58000404A012142F83010002070473A493B4B95 -+:10D590000A6842F209019A4202D0062802D203E048 -+:10D5A000042801D308467047364A012102EBC00027 -+:10D5B00041600020704770B52F4A304E314C1568DD -+:10D5C00042F2090304EB8002B54204D0062804D2DB -+:10D5D000C2F8001807E0042801D3184670BDC1F353 -+:10D5E0001000C2F80008002070BD70B5224A234E1A -+:10D5F000244C156842F2090304EB8002B54204D0C2 -+:10D60000062804D2D2F8000807E0042801D31846FF -+:10D6100070BDD2F80008C0F310000860002070BD93 -+:10D62000174910B50831184808601120154A002123 -+:10D6300002EBC003C3F81015C3F81415401C1428DE -+:10D64000F6D3002006E0042804D302EB8003C3F8DD -+:10D65000001807E002EB8003D3F80048C4F310047D -+:10D66000C3F80048401C0628EDD310BD0449064805 -+:10D67000083108607047000098000020BEBAFECA5A -+:10D6800000F5014000F001400000FEFF10B572B649 -+:10D6900000F0C6F850B1E3F733FEF3F7BCF8F4F747 -+:10D6A00097FCECF764FB63490020086062B6002039 -+:10D6B00010BD70B50D46044672B600F0B1F810B159 -+:10D6C00062B6082070BDE3F791FDE3F71BFE02464A -+:10D6D000002043099B0003F1E02300F01F01D3F871 -+:10D6E0000031CB40D9071DD0202803D222FA00F107 -+:10D6F000C9071CD141B2002906DA01F00F0101F17E -+:10D70000E02191F8141D03E001F1E02191F80014EB -+:10D71000490908290BD251B1012908D0042906D0A2 -+:10D72000052904D0401C6428D3D324B104E062B698 -+:10D7300041F2010070BD404C2078022803D962B646 -+:10D740004FF4805070BD3D49802081F8140DECF7F6 -+:10D75000E5FA20780028607801D058B908E048B18F -+:10D76000202807D8A078212804D8012802D003E077 -+:10D77000A07808B1072070BD2E49314808603148B3 -+:10D780000560E3F7BFFD2146F4F708FCF2F7F6FF6A -+:10D7900000F0E6F8FFF722FC2046E3F77FFD0400E7 -+:10D7A00062B603D0FFF772FF204670BD002070BD47 -+:10D7B00010B5044600F034F800B1012020700020BC -+:10D7C00010BD214908600020704770B50C461F4904 -+:10D7D0000D681E491E4E08310E60102807D0112812 -+:10D7E0000CD012280FD0132811D0012013E0D4E957 -+:10D7F0000001FFF75EFF354620600DE0FFF746FFB2 -+:10D800000025206008E02068FFF7D2FF03E00E4902 -+:10D8100020680860002020600C48001D056070BD75 -+:10D82000044807490068884201D101207047002060 -+:10D830007047000098000020F4E601000BE000E0D3 -+:10D84000BEBAFECA84010020040000201005024078 -+:10D85000010000012DE9F04184B088460746FEF73B -+:10D860007DFD05467E786A4601A94046F1F748F8F5 -+:10D8700004000ED0012D1EBF032004B0BDE8F081CE -+:10D8800002AA40460199F0F741FF0298B0F8030060 -+:10D890000AE0022D14D1042E12D3B7F80300BDF80C -+:10D8A0000020011D8A420BD3001D80B2A1198142C4 -+:10D8B00038BF012008BF00209CBF04B0BDE8F08144 -+:10D8C0004FF0020004B0BDE8F08100000B4A0221D5 -+:10D8D00011600B490B68002BFCD0084B1B1D186016 -+:10D8E00008680028FCD00020106008680028FCD0E0 -+:10D8F00070474FF0805040697047000004E50140D8 -+:10D9000000E4014010B54FF000040B460200204631 -+:10D9100021461ED0012A04D0022A04D0032A1DD198 -+:10D9200003E0012002E0022013E00320072B15D2C0 -+:10D93000DFE803F0140406080A0C0E00012108E0D9 -+:10D94000022106E0032104E0042102E0052100E0B9 -+:10D950000621F2F7FDFF08B1204610BD0724FBE7C2 -+:10D96000FE4805218170002101704170C170816005 -+:10D970007047FB490A78022A06D0CA681044C8607A -+:10D98000C8683238F4F705B98A6810448860886836 -+:10D99000F7E70378F349F44A13B1012B0ED011E0F5 -+:10D9A0000379012B00D06BB943790BB1012B09D15D -+:10D9B0008368643B8B4205D2C0680EE00379012B7B -+:10D9C00002D00BB10020704743790BB1012BF9D184 -+:10D9D000C368643B8B42F5D280689042F2D8012044 -+:10D9E00070472DE9F04704460226F3F760FB006814 -+:10D9F00000B1FFDFD94D01273CB12078B0B101283B -+:10DA000005D0022810D0032813D02F710CE06068D5 -+:10DA1000C82807D3F4F73CF920B16068FFF7A9FFE5 -+:10DA2000012603E0002601E000F0AFF93046BDE832 -+:10DA3000F08728780028F7D16068FFF7AAFF002850 -+:10DA4000E3D06068DFF81883007810B3A878042862 -+:10DA500000D0FFDF0020474688F8000060680079AA -+:10DA6000C0B30020387160684079A0B30420787199 -+:10DA700060688168E868F2F7D0FFB8606068C068E5 -+:10DA80003230F8600320A870B549E878F3F73DF923 -+:10DA9000CAE74FF00209404688F8009061680979AA -+:10DAA000D1B10021017161684979B9B10421417195 -+:10DAB00061688968323181606168C968C160C06825 -+:10DAC000A64C14346060F2F78FFF20606F7085F809 -+:10DAD0000290A9E704E005E00321E3E70321E6E77C -+:10DAE0000120BFE70320C2E72DE9F0479B4C8846A1 -+:10DAF000E178884200D0FFDFDFF86092002501273F -+:10DB0000974E09F11409B8F1090F76D2DFE808F051 -+:10DB1000050D2A3D646A769E7E00A078032886D093 -+:10DB2000A078022883D0FFDF81E7A078032803D004 -+:10DB3000A078022800D0FFDF0420A0702571207893 -+:10DB400000285FD1FFF715FF3078022806D0B068B3 -+:10DB5000E06000F06CF92061002048E0E078F2F726 -+:10DB60007AFFF5E7A078032803D0A078022800D038 -+:10DB7000FFDF207878BBA078032812D1042026E0AC -+:10DB80000420F4F77FFAA57051E7A078032803D0AA -+:10DB9000A078022800D0FFDF2078E0B9A078032821 -+:10DBA00014D0F2F721FF01464F46D9F80000F4F7F0 -+:10DBB00044F80028E4DB79688142E1DB081AF06070 -+:10DBC0006749E078BDE8F047F3F79FB80520F4F720 -+:10DBD00059FAA7702BE724E0A078042800D0FFDFD3 -+:10DBE000022004E0A078042800D0FFDF0120A16813 -+:10DBF0008847FFF7F6FE05462EE027E0A0780428C8 -+:10DC000000D0FFDFBDE8F04700F0BFB8A0780428DF -+:10DC100005D0607810B1A078022800D0FFDF20780E -+:10DC200018B1BDE8F04700F0B9B8207920B106205E -+:10DC3000F4F728FA2571CCE7607828B14849E078F4 -+:10DC4000F3F763F86570F2E60720C0E7FFDFEEE662 -+:10DC50003DB1012D03D0FFDF022DF9D1E7E604200D -+:10DC6000C5E70320C3E770B5050005D03B4CA0789D -+:10DC7000052803D0112070BD102070BD3B48F2F77D -+:10DC80004DFEE070E07818B1A5600020A07070BD76 -+:10DC9000032070BD314810B5017809B1112010BDC5 -+:10DCA000817805290CD0817801290BD0817849B180 -+:10DCB000012101708178012904D0807810B103E03E -+:10DCC0000F2010BD00F06AF8002010BD2DE9F041D2 -+:10DCD000224E0446B07808B101280AD164B120462A -+:10DCE000FFF757FE50B120781D4D48B1B07801289C -+:10DCF00022D00F20BDE8F0811020FBE70720F9E7D4 -+:10DD000002272F70207998B100202871607988B19E -+:10DD100004206871A0683230A860E068E860E868B4 -+:10DD20000E4C14346060F2F75FFE2060B77022E0A2 -+:10DD30000320EAE70320ECE700202870207900B3F5 -+:10DD4000002028716079F0B104206871A168F06842 -+:10DD5000F2F763FEA860E068323009E08801002035 -+:10DD6000341200203D860100FF1FA107E9DA0100FF -+:10DD7000E8600320B0701049F078F2F7C6FF002089 -+:10DD8000B8E70320DDE70320DFE70C4810B50069A2 -+:10DD900000F045F8BDE81040F2F755BD10B5074C4E -+:10DDA000E078F2F70BFE0820F4F76CF90520A0707C -+:10DDB00000202070607010BD341200208801002007 -+:10DDC0001F490968014201D00120704700207047B7 -+:10DDD0001B49091D0968014201D00120704700203C -+:10DDE0007047174910310968014201D0012070477E -+:10DDF00000207047124914310968014201D0012006 -+:10DE000070470020704710B50D4C2060201D016048 -+:10DE10000B4810300260001D0360002010BD09494E -+:10DE20000A6848F202139A4302430A607047054A9F -+:10DE3000116848F2021301EA030099431160704728 -+:10DE400000060040C80602407047704770477047A0 -+:10DE500040EA010310B59B070FD1042A0DD310C867 -+:10DE600008C9121F9C42F8D020BA19BA884201D9B9 -+:10DE7000012010BD4FF0FF3010BD1AB1D30703D001 -+:10DE8000521C07E0002010BD10F8013B11F8014BB7 -+:10DE90001B1B07D110F8013B11F8014B1B1B01D1D3 -+:10DEA000921EF1D1184610BD032A40F2308010F0C6 -+:10DEB000030C00F0158011F8013BBCF1020F624425 -+:10DEC00098BF11F801CB00F8013B38BF11F8013BB6 -+:10DED000A2F1040298BF00F801CB38BF00F8013B63 -+:10DEE00011F0030300F02580083AC0F0088051F8D3 -+:10DEF000043B083A51F804CBA0E80810F5E7121DDE -+:10DF00005CBF51F8043B40F8043BAFF30080D207FC -+:10DF100024BF11F8013B11F801CB48BF11F8012BC8 -+:10DF200024BF00F8013B00F801CB48BF00F8012BEB -+:10DF3000704710B5203AC0F00B80B1E81850203A75 -+:10DF4000A0E81850B1E81850A0E81850BFF4F5AF99 -+:10DF50005FEA027C24BFB1E81850A0E8185044BF23 -+:10DF600018C918C0BDE810405FEA827C24BF51F890 -+:10DF7000043B40F8043B08BF7047D20728BF31F884 -+:10DF8000023B48BF11F8012B28BF20F8023B48BFD5 -+:10DF900000F8012B70474FF000020429C0F01280F6 -+:10DFA00010F0030C00F01B80CCF1040CBCF1020F4C -+:10DFB00018BF00F8012BA8BF20F8022BA1EB0C0121 -+:10DFC00000F00DB85FEAC17C24BF00F8012B00F817 -+:10DFD000012B48BF00F8012B70474FF0000200B53D -+:10DFE000134694469646203922BFA0E80C50A0E87C -+:10DFF0000C50B1F12001BFF4F7AF090728BFA0E82A -+:10E000000C5048BF0CC05DF804EB890028BF40F8F5 -+:10E01000042B08BF704748BF20F8022B11F0804F37 -+:10E0200018BF00F8012B7047704770477047000019 -+:10E03000164B1860164B1960164B1A607047FEDFBE -+:10E040000420714608421BD10699134A914217DCFD -+:10E05000069902394878DF2812D10878FE2808D0BE -+:10E06000FF280DD14FF001004FF000020B4B1B6851 -+:10E07000184741F201000099019A084B1B681847A4 -+:10E0800006980599064B1B68DB681847A801002015 -+:10E09000AC010020B001002000F00100840100204C -+:10E0A00004000020184819497047FFF7FBFFE3F709 -+:10E0B00075F800BD4FF4805015490968884203D1B6 -+:10E0C000144A13605B68184700BD000020BFFDE7DD -+:10E0D0004FF480500E490968884210D10E4B1868E1 -+:10E0E0004FF0FF318842F1D080F308884FF02021B3 -+:10E0F000884204DD0948026802210A430260084898 -+:10E10000804708488047FFDF48120020481200205F -+:10E11000000000200400002000F001002405004061 -+:10E12000152A0100B5E0010004207146084202D022 -+:10E13000EFF3098101E0EFF3088188690238007884 -+:10E14000102813DB20280FDB2B280BDB0A4A126870 -+:10E150000A4B9A4203D1602804DB094A1047022087 -+:10E1600008607047074A1047074A1047074A126875 -+:10E170002C3212681047000098000020BEBAFECA78 -+:10E180000913000029CE0100CBD7010004000020B4 -+:10E190000E4B0F4908470F4B0D4908470E4B0C49D2 -+:10E1A00008470E4B0A4908470D4B094908470D4BD4 -+:10E1B000074908470C4B064908470C4B04490847D8 -+:10E1C0000B4B034908470B4B01490847AD9B000027 -+:10E1D000619F0000AD2E0000D59700005997000008 -+:10E1E000532F000025130000932E0000CF9800004D -+:10E1F000E99E0000A91100000021016081807047A4 -+:10E20000002101604160017270470A6802600B7969 -+:10E210000371704715850000C3860000E984000083 -+:10E22000B9870000DD870000178800004B880000D8 -+:10E2300085880000B5880000078900009112000061 -+:10E24000911200002F2300006D2300008D23000099 -+:10E25000432400007F250000512600008126000095 -+:10E260004B2700003D1F000083290000652A0000A5 -+:10E27000852A00008B320000AF320000DF31000041 -+:10E2800033320000E1320000753300004B460000DD -+:10E290000F480000B74B0000D34C0000574D000062 -+:10E2A000F54D0000674E0000834F00005150000004 -+:10E2B000CF5000009F2A0000A52A0000AF2A0000CE -+:10E2C000F71E00007F2B0000C91E0000D52C0000A7 -+:10E2D00091120000911200009112000091120000B2 -+:10E2E00091120000215C0000A75C0000C35C0000EC -+:10E2F000DF5C00006D5E0000095D0000135D000042 -+:10E30000555D0000775D0000535E0000955E0000E3 -+:10E31000911200002D7500004D7500004F75000032 -+:10E3200089750000B7750000B37600005D770000C6 -+:10E3300071770000BF770000A57800005B7A0000CD -+:10E340009B7B00005B660000B37B00009112000025 -+:10E350009112000025930000639300008593000054 -+:10E36000100110013A0200001A0200040506000024 -+:10E37000FFFFFFFF0000FFFF298F0000A11B00002F -+:10E38000AB580000A5660000E77F00000000000019 -+:10E39000557D0000698000004980000000000000F9 -+:10E3A00000000000CDC700000000000000000000D9 -+:10E3B0000000000013D80000000000000000000072 -+:10E3C0000000000029C80000ADC8000000000000E7 -+:10E3D000000000006BCC000031CA00006FD10000CB -+:10E3E000000000000000000003DD0000000000004D -+:10E3F000000000000000000011CD0000E1D8000086 -+:10E4000000000000B1D9000025DA00000000000083 -+:10E410000BD20000BDD2000000000000EBD90000CC -+:10E420009DD30000ADD500001FD6000013D700001B -+:10E43000C5CE0000A9D7000000000000DDCD00001F -+:10E44000000000001DCB000093CA000041D800006E -+:10E4500081DB0000EFDB000000000000FBC80000D3 -+:10E460003DC900005BC800000000000077C9000043 -+:10E4700000000000AFC90000E5C9000047DC000053 -+:10E4800000000000BBCF0000E9D0000087D00000F2 -+:10E4900027D10000CFCC0000BFCA000097CC0000FD -+:10E4A0004BDE000033CC000051DD00000000000016 -+:10E4B000AFDC000051CB00006BCA0000CBDD0000D8 -+:10E4C0007FDF000051CD000035DF000055CF000098 -+:10E4D000A9DE0000FBDE0000ED3C0000ED3C00008A -+:10E4E000032300008D8E0000276900007B58000088 -+:10E4F0000000000031960100313D0000313D000078 -+:10E500002D230000E78E00009F6900008558000061 -+:10E51000C183010057960100BC01BC013E002C00E4 -+:10E520005400140018016001010000000100000007 -+:10E530000001020304000F1011120000001300007C -+:10E54000A9CB010077CC0100C9CC010015CD010099 -+:10E5500069CD0100A3C60100C5C701002DC8010097 -+:10E5600051CA010033CB010077F0000051010100D6 -+:10E5700000000000060000000A0000003200000059 -+:10E5800073000000B40000007B7201000B64010006 -+:10E59000A77201000D6401007B43010033AA010052 -+:10E5A0007556010033AA0100E54301007BAB010071 -+:10E5B0001D4F01007BAB0100F34201000BAB0100DA -+:10E5C000575501000BAB0100555555D6BE898E003D -+:10E5D00000006606F30C801300000A033B066C097A -+:10E5E00000005604D308500D555555252627D6BE94 -+:10E5F000898EF401FA00960064004B0032001E0080 -+:10E6000014000000210000000000000000000300D2 -+:10E61000656C746200000000000000000000000053 -+:10E620000000000087000000000000000000000063 -+:10E6300000000000BE83605ADB0B376038A5F5AAE6 -+:10E640009183886CEDD4010005D501001DD5010032 -+:10E6500035D5010065D501008DD50100B7D5010084 -+:10E66000EBD501005FD20100AFD10100CBD2010098 -+:10E6700025D3010035D3010061D301003B22010005 -+:10E6800043220100512201008FD30100A9D30100D0 -+:10E690007DD3010087D30100B5D30100EBD3010086 -+:10E6A00037D4010045D4010053D401005FD40100E8 -+:10E6B00077D401008FD40100A5D401000000000030 -+:10E6C00073990000C9990000DF99000005D9010085 -+:10E6D0009DCE010063CF010067DC010095DC0100E5 -+:10E6E000CDDC010031200100152501001C05004092 -+:10E6F000200500400010020018E70100080000207B -+:10E70000AC0100004411000040E70100B40100200A -+:10E710009410000080110000013F021A173601001A -+:10E720000100683720FB349B5F80041F80001002CB -+:10E730002C01337F0102A029024410E431E00100E2 -+:00000001FF -diff -u -r -N a/components/softdevice/s132v3/toolchain/armgcc/armgcc_s132v3_nrf52832_xxaa.ld b/components/softdevice/s132v3/toolchain/armgcc/armgcc_s132v3_nrf52832_xxaa.ld ---- a/components/softdevice/s132v3/toolchain/armgcc/armgcc_s132v3_nrf52832_xxaa.ld 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v3/toolchain/armgcc/armgcc_s132v3_nrf52832_xxaa.ld 2018-07-18 17:06:46.000000000 +0200 -@@ -0,0 +1,33 @@ -+/* Linker script to configure memory regions. */ -+ -+SEARCH_DIR(.) -+GROUP(-lgcc -lc -lnosys) -+ -+MEMORY -+{ -+ FLASH (rx) : ORIGIN = 0x1f000, LENGTH = 0x61000 -+ RAM (rwx) : ORIGIN = 0x200019c0, LENGTH = 0xe640 -+} -+ -+SECTIONS -+{ -+} -+ -+SECTIONS -+{ -+ . = ALIGN(4); -+ .mem_section_dummy_ram : -+ { -+ } -+ -+} INSERT AFTER .data; -+ -+SECTIONS -+{ -+ .mem_section_dummy_rom : -+ { -+ } -+ -+} INSERT AFTER .text -+ -+INCLUDE "nrf_common.ld" -diff -u -r -N a/components/softdevice/s132v3/toolchain/iar/iar_s132v3_nrf52832_xxaa.icf b/components/softdevice/s132v3/toolchain/iar/iar_s132v3_nrf52832_xxaa.icf ---- a/components/softdevice/s132v3/toolchain/iar/iar_s132v3_nrf52832_xxaa.icf 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v3/toolchain/iar/iar_s132v3_nrf52832_xxaa.icf 2018-07-18 17:06:46.000000000 +0200 -@@ -0,0 +1,36 @@ -+/*###ICF### Section handled by ICF editor, don't touch! ****/ -+/*-Editor annotation file-*/ -+/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ -+/*-Specials-*/ -+define symbol __ICFEDIT_intvec_start__ = 0x1f000; -+/*-Memory Regions-*/ -+define symbol __ICFEDIT_region_ROM_start__ = 0x1f000; -+define symbol __ICFEDIT_region_ROM_end__ = 0x7ffff; -+define symbol __ICFEDIT_region_RAM_start__ = 0x200019c0; -+define symbol __ICFEDIT_region_RAM_end__ = 0x2000ffff; -+export symbol __ICFEDIT_region_RAM_start__; -+export symbol __ICFEDIT_region_RAM_end__; -+/*-Sizes-*/ -+define symbol __ICFEDIT_size_cstack__ = ; -+define symbol __ICFEDIT_size_heap__ = ; -+/**** End of ICF editor section. ###ICF###*/ -+ -+define memory mem with size = 4G; -+define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; -+define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; -+ -+define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; -+define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; -+define block RO_END with alignment = 8, size = 0 { }; -+ -+initialize by copy { readwrite }; -+do not initialize { section .noinit }; -+ -+keep { section .intvec }; -+place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; -+place in ROM_region { readonly, -+ block RO_END }; -+place in RAM_region { readwrite, -+ block CSTACK, -+ block HEAP }; -+ -diff -u -r -N a/components/softdevice/s132v5/headers/ble.h b/components/softdevice/s132v5/headers/ble.h ---- a/components/softdevice/s132v5/headers/ble.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v5/headers/ble.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,628 @@ -+/* -+ * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form, except as embedded into a Nordic -+ * Semiconductor ASA integrated circuit in a product or a software update for -+ * such product, must reproduce the above copyright notice, this list of -+ * conditions and the following disclaimer in the documentation and/or other -+ * materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its -+ * contributors may be used to endorse or promote products derived from this -+ * software without specific prior written permission. -+ * -+ * 4. This software, with or without modification, must only be used with a -+ * Nordic Semiconductor ASA integrated circuit. -+ * -+ * 5. Any software provided in binary form under this license must not be reverse -+ * engineered, decompiled, modified and/or disassembled. -+ * -+ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -+ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ */ -+ -+/** -+ @addtogroup BLE_COMMON BLE SoftDevice Common -+ @{ -+ @defgroup ble_api Events, type definitions and API calls -+ @{ -+ -+ @brief Module independent events, type definitions and API calls for the BLE SoftDevice. -+ -+ */ -+ -+#ifndef BLE_H__ -+#define BLE_H__ -+ -+#include -+#include "nrf_svc.h" -+#include "nrf_error.h" -+#include "ble_hci.h" -+#include "ble_ranges.h" -+#include "ble_types.h" -+#include "ble_err.h" -+#include "ble_gap.h" -+#include "ble_l2cap.h" -+#include "ble_gatt.h" -+#include "ble_gattc.h" -+#include "ble_gatts.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/** @addtogroup BLE_COMMON_ENUMERATIONS Enumerations -+ * @{ */ -+ -+/** -+ * @brief Common API SVC numbers. -+ */ -+enum BLE_COMMON_SVCS -+{ -+ SD_BLE_ENABLE = BLE_SVC_BASE, /**< Enable and initialize the BLE stack */ -+ SD_BLE_EVT_GET, /**< Get an event from the pending events queue. */ -+ SD_BLE_UUID_VS_ADD, /**< Add a Vendor Specific UUID. */ -+ SD_BLE_UUID_DECODE, /**< Decode UUID bytes. */ -+ SD_BLE_UUID_ENCODE, /**< Encode UUID bytes. */ -+ SD_BLE_VERSION_GET, /**< Get the local version information (company ID, Link Layer Version, Link Layer Subversion). */ -+ SD_BLE_USER_MEM_REPLY, /**< User Memory Reply. */ -+ SD_BLE_OPT_SET, /**< Set a BLE option. */ -+ SD_BLE_OPT_GET, /**< Get a BLE option. */ -+ SD_BLE_CFG_SET, /**< Add a configuration to the BLE stack. */ -+}; -+ -+/** -+ * @brief BLE Module Independent Event IDs. -+ */ -+enum BLE_COMMON_EVTS -+{ -+ BLE_EVT_USER_MEM_REQUEST = BLE_EVT_BASE + 0, /**< User Memory request. @ref ble_evt_user_mem_request_t */ -+ BLE_EVT_USER_MEM_RELEASE = BLE_EVT_BASE + 1, /**< User Memory release. @ref ble_evt_user_mem_release_t */ -+}; -+ -+/**@brief BLE Connection Configuration IDs. -+ * -+ * IDs that uniquely identify a connection configuration. -+ */ -+enum BLE_CONN_CFGS -+{ -+ BLE_CONN_CFG_GAP = BLE_CONN_CFG_BASE + 0, /**< BLE GAP specific connection configuration. */ -+ BLE_CONN_CFG_GATTC = BLE_CONN_CFG_BASE + 1, /**< BLE GATTC specific connection configuration. */ -+ BLE_CONN_CFG_GATTS = BLE_CONN_CFG_BASE + 2, /**< BLE GATTS specific connection configuration. */ -+ BLE_CONN_CFG_GATT = BLE_CONN_CFG_BASE + 3, /**< BLE GATT specific connection configuration. */ -+ BLE_CONN_CFG_L2CAP = BLE_CONN_CFG_BASE + 4, /**< BLE L2CAP specific connection configuration. */ -+}; -+ -+/**@brief BLE Common Configuration IDs. -+ * -+ * IDs that uniquely identify a common configuration. -+ */ -+enum BLE_COMMON_CFGS -+{ -+ BLE_COMMON_CFG_VS_UUID = BLE_CFG_BASE, /**< Vendor specific UUID configuration */ -+}; -+ -+/**@brief Common Option IDs. -+ * IDs that uniquely identify a common option. -+ */ -+enum BLE_COMMON_OPTS -+{ -+ BLE_COMMON_OPT_PA_LNA = BLE_OPT_BASE + 0, /**< PA and LNA options */ -+ BLE_COMMON_OPT_CONN_EVT_EXT = BLE_OPT_BASE + 1, /**< Extended connection events option */ -+}; -+ -+/** @} */ -+ -+/** @addtogroup BLE_COMMON_DEFINES Defines -+ * @{ */ -+ -+/** @brief Required pointer alignment for BLE Events. -+*/ -+#define BLE_EVT_PTR_ALIGNMENT 4 -+ -+/** @brief Leaves the maximum of the two arguments. -+*/ -+#define BLE_MAX(a, b) ((a) < (b) ? (b) : (a)) -+ -+/** @brief Maximum possible length for BLE Events. -+ * @note The highest value used for @ref ble_gatt_conn_cfg_t::att_mtu in any connection configuration shall be used as a parameter. -+ * If that value has not been configured for any connections then @ref BLE_GATT_ATT_MTU_DEFAULT must be used instead. -+*/ -+#define BLE_EVT_LEN_MAX(ATT_MTU) ( \ -+ BLE_MAX( \ -+ sizeof(ble_evt_t), \ -+ offsetof(ble_evt_t, evt.gattc_evt.params.prim_srvc_disc_rsp.services) + ((ATT_MTU) - 1) / 4 * sizeof(ble_gattc_service_t) \ -+ ) \ -+) -+ -+/** @defgroup BLE_USER_MEM_TYPES User Memory Types -+ * @{ */ -+#define BLE_USER_MEM_TYPE_INVALID 0x00 /**< Invalid User Memory Types. */ -+#define BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES 0x01 /**< User Memory for GATTS queued writes. */ -+/** @} */ -+ -+/** @defgroup BLE_UUID_VS_COUNTS Vendor Specific UUID counts -+ * @{ -+ */ -+#define BLE_UUID_VS_COUNT_DEFAULT 10 /**< Default VS UUID count. */ -+#define BLE_UUID_VS_COUNT_MAX 254 /**< Maximum VS UUID count. */ -+/** @} */ -+ -+/** @defgroup BLE_COMMON_CFG_DEFAULTS Configuration defaults. -+ * @{ -+ */ -+#define BLE_CONN_CFG_TAG_DEFAULT 0 /**< Default configuration tag, SoftDevice default connection configuration. */ -+ -+/** @} */ -+ -+/** @} */ -+ -+/** @addtogroup BLE_COMMON_STRUCTURES Structures -+ * @{ */ -+ -+/**@brief User Memory Block. */ -+typedef struct -+{ -+ uint8_t *p_mem; /**< Pointer to the start of the user memory block. */ -+ uint16_t len; /**< Length in bytes of the user memory block. */ -+} ble_user_mem_block_t; -+ -+/**@brief Event structure for @ref BLE_EVT_USER_MEM_REQUEST. */ -+typedef struct -+{ -+ uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ -+} ble_evt_user_mem_request_t; -+ -+/**@brief Event structure for @ref BLE_EVT_USER_MEM_RELEASE. */ -+typedef struct -+{ -+ uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ -+ ble_user_mem_block_t mem_block; /**< User memory block */ -+} ble_evt_user_mem_release_t; -+ -+/**@brief Event structure for events not associated with a specific function module. */ -+typedef struct -+{ -+ uint16_t conn_handle; /**< Connection Handle on which this event occurred. */ -+ union -+ { -+ ble_evt_user_mem_request_t user_mem_request; /**< User Memory Request Event Parameters. */ -+ ble_evt_user_mem_release_t user_mem_release; /**< User Memory Release Event Parameters. */ -+ } params; /**< Event parameter union. */ -+} ble_common_evt_t; -+ -+/**@brief BLE Event header. */ -+typedef struct -+{ -+ uint16_t evt_id; /**< Value from a BLE__EVT series. */ -+ uint16_t evt_len; /**< Length in octets including this header. */ -+} ble_evt_hdr_t; -+ -+/**@brief Common BLE Event type, wrapping the module specific event reports. */ -+typedef struct -+{ -+ ble_evt_hdr_t header; /**< Event header. */ -+ union -+ { -+ ble_common_evt_t common_evt; /**< Common Event, evt_id in BLE_EVT_* series. */ -+ ble_gap_evt_t gap_evt; /**< GAP originated event, evt_id in BLE_GAP_EVT_* series. */ -+ ble_gattc_evt_t gattc_evt; /**< GATT client originated event, evt_id in BLE_GATTC_EVT* series. */ -+ ble_gatts_evt_t gatts_evt; /**< GATT server originated event, evt_id in BLE_GATTS_EVT* series. */ -+ ble_l2cap_evt_t l2cap_evt; /**< L2CAP originated event, evt_id in BLE_L2CAP_EVT* series. */ -+ } evt; /**< Event union. */ -+} ble_evt_t; -+ -+ -+/** -+ * @brief Version Information. -+ */ -+typedef struct -+{ -+ uint8_t version_number; /**< Link Layer Version number. See https://www.bluetooth.org/en-us/specification/assigned-numbers/link-layer for assigned values. */ -+ uint16_t company_id; /**< Company ID, Nordic Semiconductor's company ID is 89 (0x0059) (https://www.bluetooth.org/apps/content/Default.aspx?doc_id=49708). */ -+ uint16_t subversion_number; /**< Link Layer Sub Version number, corresponds to the SoftDevice Config ID or Firmware ID (FWID). */ -+} ble_version_t; -+ -+/** -+ * @brief Configuration parameters for the PA and LNA. -+ */ -+typedef struct -+{ -+ uint8_t enable :1; /**< Enable toggling for this amplifier */ -+ uint8_t active_high :1; /**< Set the pin to be active high */ -+ uint8_t gpio_pin :6; /**< The GPIO pin to toggle for this amplifier */ -+} ble_pa_lna_cfg_t; -+ -+/** -+ * @brief PA & LNA GPIO toggle configuration -+ * -+ * This option configures the SoftDevice to toggle pins when the radio is active for use with a power amplifier and/or -+ * a low noise amplifier. -+ * -+ * Toggling the pins is achieved by using two PPI channels and a GPIOTE channel. The hardware channel IDs are provided -+ * by the application and should be regarded as reserved as long as any PA/LNA toggling is enabled. -+ * -+ * @note @ref sd_ble_opt_get is not supported for this option. -+ * @note Setting this option while the radio is in use (i.e. any of the roles are active) may have undefined consequences -+ * and must be avoided by the application. -+ */ -+typedef struct -+{ -+ ble_pa_lna_cfg_t pa_cfg; /**< Power Amplifier configuration */ -+ ble_pa_lna_cfg_t lna_cfg; /**< Low Noise Amplifier configuration */ -+ -+ uint8_t ppi_ch_id_set; /**< PPI channel used for radio pin setting */ -+ uint8_t ppi_ch_id_clr; /**< PPI channel used for radio pin clearing */ -+ uint8_t gpiote_ch_id; /**< GPIOTE channel used for radio pin toggling */ -+} ble_common_opt_pa_lna_t; -+ -+/** -+ * @brief Configuration of extended BLE connection events. -+ * -+ * When enabled the SoftDevice will dynamically extend the connection event when possible. -+ * -+ * The connection event length is controlled by the connection configuration as set by @ref ble_gap_conn_cfg_t::event_length. -+ * The connection event can be extended if there is time to send another packet pair before the start of the next connection interval, -+ * and if there are no conflicts with other BLE roles requesting radio time. -+ * -+ * @note @ref sd_ble_opt_get is not supported for this option. -+ */ -+typedef struct -+{ -+ uint8_t enable : 1; /**< Enable extended BLE connection events, disabled by default. */ -+} ble_common_opt_conn_evt_ext_t; -+ -+/**@brief Option structure for common options. */ -+typedef union -+{ -+ ble_common_opt_pa_lna_t pa_lna; /**< Parameters for controlling PA and LNA pin toggling. */ -+ ble_common_opt_conn_evt_ext_t conn_evt_ext; /**< Parameters for enabling extended connection events. */ -+} ble_common_opt_t; -+ -+/**@brief Common BLE Option type, wrapping the module specific options. */ -+typedef union -+{ -+ ble_common_opt_t common_opt; /**< COMMON options, opt_id in @ref BLE_COMMON_OPTS series. */ -+ ble_gap_opt_t gap_opt; /**< GAP option, opt_id in @ref BLE_GAP_OPTS series. */ -+} ble_opt_t; -+ -+/**@brief BLE connection configuration type, wrapping the module specific configurations, set with -+ * @ref sd_ble_cfg_set. -+ * -+ * @note Connection configurations don't have to be set. -+ * In the case that no configurations has been set, or fewer connection configurations has been set than enabled connections, -+ * the default connection configuration will be automatically added for the remaining connections. -+ * When creating connections with the default configuration, @ref BLE_CONN_CFG_TAG_DEFAULT should be used in -+ * place of @ref ble_conn_cfg_t::conn_cfg_tag. -+ * -+ * @sa sd_ble_gap_adv_start() -+ * @sa sd_ble_gap_connect() -+ * -+ * @mscs -+ * @mmsc{@ref BLE_CONN_CFG} -+ * @endmscs -+ -+ */ -+typedef struct -+{ -+ uint8_t conn_cfg_tag; /**< The application chosen tag it can use with the -+ @ref sd_ble_gap_adv_start() and @ref sd_ble_gap_connect() calls -+ to select this configuration when creating a connection. -+ Must be different for all connection configurations added and not @ref BLE_CONN_CFG_TAG_DEFAULT. */ -+ union { -+ ble_gap_conn_cfg_t gap_conn_cfg; /**< GAP connection configuration, cfg_id is @ref BLE_CONN_CFG_GAP. */ -+ ble_gattc_conn_cfg_t gattc_conn_cfg; /**< GATTC connection configuration, cfg_id is @ref BLE_CONN_CFG_GATTC. */ -+ ble_gatts_conn_cfg_t gatts_conn_cfg; /**< GATTS connection configuration, cfg_id is @ref BLE_CONN_CFG_GATTS. */ -+ ble_gatt_conn_cfg_t gatt_conn_cfg; /**< GATT connection configuration, cfg_id is @ref BLE_CONN_CFG_GATT. */ -+ ble_l2cap_conn_cfg_t l2cap_conn_cfg; /**< L2CAP connection configuration, cfg_id is @ref BLE_CONN_CFG_L2CAP. */ -+ } params; /**< Connection configuration union. */ -+} ble_conn_cfg_t; -+ -+/** -+ * @brief Configuration of Vendor Specific UUIDs, set with @ref sd_ble_cfg_set. -+ * -+ * @retval ::NRF_ERROR_INVALID_PARAM Too many UUIDs configured. -+ */ -+typedef struct -+{ -+ uint8_t vs_uuid_count; /**< Number of 128-bit Vendor Specific UUID bases to allocate memory for. -+ Default value is @ref BLE_UUID_VS_COUNT_DEFAULT. Maximum value is -+ @ref BLE_UUID_VS_COUNT_MAX. */ -+} ble_common_cfg_vs_uuid_t; -+ -+/**@brief Common BLE Configuration type, wrapping the common configurations. */ -+typedef union -+{ -+ ble_common_cfg_vs_uuid_t vs_uuid_cfg; /**< Vendor specific UUID configuration, cfg_id is @ref BLE_COMMON_CFG_VS_UUID. */ -+} ble_common_cfg_t; -+ -+/**@brief BLE Configuration type, wrapping the module specific configurations. */ -+typedef union -+{ -+ ble_conn_cfg_t conn_cfg; /**< Connection specific configurations, cfg_id in @ref BLE_CONN_CFGS series. */ -+ ble_common_cfg_t common_cfg; /**< Global common configurations, cfg_id in @ref BLE_COMMON_CFGS series. */ -+ ble_gap_cfg_t gap_cfg; /**< Global GAP configurations, cfg_id in @ref BLE_GAP_CFGS series. */ -+ ble_gatts_cfg_t gatts_cfg; /**< Global GATTS configuration, cfg_id in @ref BLE_GATTS_CFGS series. */ -+} ble_cfg_t; -+ -+/** @} */ -+ -+/** @addtogroup BLE_COMMON_FUNCTIONS Functions -+ * @{ */ -+ -+/**@brief Enable the BLE stack -+ * -+ * @param[in, out] p_app_ram_base Pointer to a variable containing the start address of the -+ * application RAM region (APP_RAM_BASE). On return, this will -+ * contain the minimum start address of the application RAM region -+ * required by the SoftDevice for this configuration. -+ * -+ * @note The memory requirement for a specific configuration will not increase between SoftDevices -+ * with the same major version number. -+ * -+ * @note The value of *p_app_ram_base when the app has done no custom configuration of the -+ * SoftDevice, i.e. the app has not called @ref sd_ble_cfg_set before @ref sd_ble_enable, can -+ * be found in the release notes. -+ * -+ * @note At runtime the IC's RAM is split into 2 regions: The SoftDevice RAM region is located -+ * between 0x20000000 and APP_RAM_BASE-1 and the application's RAM region is located between -+ * APP_RAM_BASE and the start of the call stack. -+ * -+ * @details This call initializes the BLE stack, no BLE related function other than @ref -+ * sd_ble_cfg_set can be called before this one. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_COMMON_ENABLE} -+ * @endmscs -+ * -+ * @retval ::NRF_SUCCESS The BLE stack has been initialized successfully. -+ * @retval ::NRF_ERROR_INVALID_STATE The BLE stack had already been initialized and cannot be reinitialized. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. -+ * @retval ::NRF_ERROR_NO_MEM The amount of memory assigned to the SoftDevice by *p_app_ram_base is not -+ * large enough to fit this configuration's memory requirement. Check *p_app_ram_base -+ * and set the start address of the application RAM region accordingly. -+ */ -+SVCALL(SD_BLE_ENABLE, uint32_t, sd_ble_enable(uint32_t * p_app_ram_base)); -+ -+/**@brief Add configurations for the BLE stack -+ * -+ * @param[in] cfg_id Config ID, see @ref BLE_CONN_CFGS, @ref BLE_COMMON_CFGS, @ref -+ * BLE_GAP_CFGS or @ref BLE_GATTS_CFGS. -+ * @param[in] p_cfg Pointer to a ble_cfg_t structure containing the configuration value. -+ * @param[in] app_ram_base The start address of the application RAM region (APP_RAM_BASE). -+ * See @ref sd_ble_enable for details about APP_RAM_BASE. -+ * -+ * @note The memory requirement for a specific configuration will not increase between SoftDevices -+ * with the same major version number. -+ * -+ * @note If a configuration is set more than once, the last one set is the one that takes effect on -+ * @ref sd_ble_enable. -+ * -+ * @note Any part of the BLE stack that is NOT configured with @ref sd_ble_cfg_set will have default -+ * configuration. -+ * -+ * @note @ref sd_ble_cfg_set may be called at any time when the SoftDevice is enabled (see @ref -+ * sd_softdevice_enable) while the BLE part of the SoftDevice is not enabled (see @ref -+ * sd_ble_enable). -+ * -+ * @note Error codes for the configurations are described in the configuration structs. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_COMMON_ENABLE} -+ * @endmscs -+ * -+ * @retval ::NRF_SUCCESS The configuration has been added successfully. -+ * @retval ::NRF_ERROR_INVALID_STATE The BLE stack had already been initialized. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid cfg_id supplied. -+ * @retval ::NRF_ERROR_NO_MEM The amount of memory assigned to the SoftDevice by app_ram_base is not -+ * large enough to fit this configuration's memory requirement. -+ */ -+SVCALL(SD_BLE_CFG_SET, uint32_t, sd_ble_cfg_set(uint32_t cfg_id, ble_cfg_t const * p_cfg, uint32_t app_ram_base)); -+ -+/**@brief Get an event from the pending events queue. -+ * -+ * @param[out] p_dest Pointer to buffer to be filled in with an event, or NULL to retrieve the event length. -+ * This buffer must be aligned to the extend defined by @ref BLE_EVT_PTR_ALIGNMENT. -+ * The buffer should be interpreted as a @ref ble_evt_t struct. -+ * @param[in, out] p_len Pointer the length of the buffer, on return it is filled with the event length. -+ * -+ * @details This call allows the application to pull a BLE event from the BLE stack. The application is signaled that -+ * an event is available from the BLE stack by the triggering of the SD_EVT_IRQn interrupt. -+ * The application is free to choose whether to call this function from thread mode (main context) or directly from the -+ * Interrupt Service Routine that maps to SD_EVT_IRQn. In any case however, and because the BLE stack runs at a higher -+ * priority than the application, this function should be called in a loop (until @ref NRF_ERROR_NOT_FOUND is returned) -+ * every time SD_EVT_IRQn is raised to ensure that all available events are pulled from the BLE stack. Failure to do so -+ * could potentially leave events in the internal queue without the application being aware of this fact. -+ * -+ * Sizing the p_dest buffer is equally important, since the application needs to provide all the memory necessary for the event to -+ * be copied into application memory. If the buffer provided is not large enough to fit the entire contents of the event, -+ * @ref NRF_ERROR_DATA_SIZE will be returned and the application can then call again with a larger buffer size. -+ * The maximum possible event length is defined by @ref BLE_EVT_LEN_MAX. The application may also "peek" the event length -+ * by providing p_dest as a NULL pointer and inspecting the value of *p_len upon return: -+ * -+ * \code -+ * uint16_t len; -+ * errcode = sd_ble_evt_get(NULL, &len); -+ * \endcode -+ * -+ * @mscs -+ * @mmsc{@ref BLE_COMMON_IRQ_EVT_MSC} -+ * @mmsc{@ref BLE_COMMON_THREAD_EVT_MSC} -+ * @endmscs -+ * -+ * @retval ::NRF_SUCCESS Event pulled and stored into the supplied buffer. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. -+ * @retval ::NRF_ERROR_NOT_FOUND No events ready to be pulled. -+ * @retval ::NRF_ERROR_DATA_SIZE Event ready but could not fit into the supplied buffer. -+ */ -+SVCALL(SD_BLE_EVT_GET, uint32_t, sd_ble_evt_get(uint8_t *p_dest, uint16_t *p_len)); -+ -+ -+/**@brief Add a Vendor Specific base UUID. -+ * -+ * @details This call enables the application to add a vendor specific base UUID to the BLE stack's table, for later -+ * use with all other modules and APIs. This then allows the application to use the shorter, 24-bit @ref ble_uuid_t -+ * format when dealing with both 16-bit and 128-bit UUIDs without having to check for lengths and having split code -+ * paths. This is accomplished by extending the grouping mechanism that the Bluetooth SIG standard base UUID uses -+ * for all other 128-bit UUIDs. The type field in the @ref ble_uuid_t structure is an index (relative to -+ * @ref BLE_UUID_TYPE_VENDOR_BEGIN) to the table populated by multiple calls to this function, and the UUID field -+ * in the same structure contains the 2 bytes at indexes 12 and 13. The number of possible 128-bit UUIDs available to -+ * the application is therefore the number of Vendor Specific UUIDs added with the help of this function times 65536, -+ * although restricted to modifying bytes 12 and 13 for each of the entries in the supplied array. -+ * -+ * @note Bytes 12 and 13 of the provided UUID will not be used internally, since those are always replaced by -+ * the 16-bit uuid field in @ref ble_uuid_t. -+ * -+ * @note If a UUID is already present in the BLE stack's internal table, the corresponding index will be returned in -+ * p_uuid_type along with an @ref NRF_SUCCESS error code. -+ * -+ * @param[in] p_vs_uuid Pointer to a 16-octet (128-bit) little endian Vendor Specific UUID disregarding -+ * bytes 12 and 13. -+ * @param[out] p_uuid_type Pointer to a uint8_t where the type field in @ref ble_uuid_t corresponding to this UUID will be stored. -+ * -+ * @retval ::NRF_SUCCESS Successfully added the Vendor Specific UUID. -+ * @retval ::NRF_ERROR_INVALID_ADDR If p_vs_uuid or p_uuid_type is NULL or invalid. -+ * @retval ::NRF_ERROR_NO_MEM If there are no more free slots for VS UUIDs. -+ */ -+SVCALL(SD_BLE_UUID_VS_ADD, uint32_t, sd_ble_uuid_vs_add(ble_uuid128_t const *p_vs_uuid, uint8_t *p_uuid_type)); -+ -+ -+/** @brief Decode little endian raw UUID bytes (16-bit or 128-bit) into a 24 bit @ref ble_uuid_t structure. -+ * -+ * @details The raw UUID bytes excluding bytes 12 and 13 (i.e. bytes 0-11 and 14-15) of p_uuid_le are compared -+ * to the corresponding ones in each entry of the table of vendor specific UUIDs populated with @ref sd_ble_uuid_vs_add -+ * to look for a match. If there is such a match, bytes 12 and 13 are returned as p_uuid->uuid and the index -+ * relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN as p_uuid->type. -+ * -+ * @note If the UUID length supplied is 2, then the type set by this call will always be @ref BLE_UUID_TYPE_BLE. -+ * -+ * @param[in] uuid_le_len Length in bytes of the buffer pointed to by p_uuid_le (must be 2 or 16 bytes). -+ * @param[in] p_uuid_le Pointer pointing to little endian raw UUID bytes. -+ * @param[out] p_uuid Pointer to a @ref ble_uuid_t structure to be filled in. -+ * -+ * @retval ::NRF_SUCCESS Successfully decoded into the @ref ble_uuid_t structure. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_LENGTH Invalid UUID length. -+ * @retval ::NRF_ERROR_NOT_FOUND For a 128-bit UUID, no match in the populated table of UUIDs. -+ */ -+SVCALL(SD_BLE_UUID_DECODE, uint32_t, sd_ble_uuid_decode(uint8_t uuid_le_len, uint8_t const *p_uuid_le, ble_uuid_t *p_uuid)); -+ -+ -+/** @brief Encode a @ref ble_uuid_t structure into little endian raw UUID bytes (16-bit or 128-bit). -+ * -+ * @note The pointer to the destination buffer p_uuid_le may be NULL, in which case only the validity and size of p_uuid is computed. -+ * -+ * @param[in] p_uuid Pointer to a @ref ble_uuid_t structure that will be encoded into bytes. -+ * @param[out] p_uuid_le_len Pointer to a uint8_t that will be filled with the encoded length (2 or 16 bytes). -+ * @param[out] p_uuid_le Pointer to a buffer where the little endian raw UUID bytes (2 or 16) will be stored. -+ * -+ * @retval ::NRF_SUCCESS Successfully encoded into the buffer. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid UUID type. -+ */ -+SVCALL(SD_BLE_UUID_ENCODE, uint32_t, sd_ble_uuid_encode(ble_uuid_t const *p_uuid, uint8_t *p_uuid_le_len, uint8_t *p_uuid_le)); -+ -+ -+/**@brief Get Version Information. -+ * -+ * @details This call allows the application to get the BLE stack version information. -+ * -+ * @param[out] p_version Pointer to a ble_version_t structure to be filled in. -+ * -+ * @retval ::NRF_SUCCESS Version information stored successfully. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_BUSY The BLE stack is busy (typically doing a locally-initiated disconnection procedure). -+ */ -+SVCALL(SD_BLE_VERSION_GET, uint32_t, sd_ble_version_get(ble_version_t *p_version)); -+ -+ -+/**@brief Provide a user memory block. -+ * -+ * @note This call can only be used as a response to a @ref BLE_EVT_USER_MEM_REQUEST event issued to the application. -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] p_block Pointer to a user memory block structure or NULL if memory is managed by the application. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_PEER_CANCEL_MSC} -+ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC} -+ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} -+ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC} -+ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_NOAUTH_MSC} -+ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} -+ * @endmscs -+ * -+ * @retval ::NRF_SUCCESS Successfully queued a response to the peer. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_LENGTH Invalid user memory block length supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection state or no user memory request pending. -+ */ -+SVCALL(SD_BLE_USER_MEM_REPLY, uint32_t, sd_ble_user_mem_reply(uint16_t conn_handle, ble_user_mem_block_t const *p_block)); -+ -+/**@brief Set a BLE option. -+ * -+ * @details This call allows the application to set the value of an option. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_STATIC_PK_MSC} -+ * @endmscs -+ * -+ * @param[in] opt_id Option ID, see @ref BLE_COMMON_OPTS and @ref BLE_GAP_OPTS. -+ * @param[in] p_opt Pointer to a ble_opt_t structure containing the option value. -+ * -+ * @retval ::NRF_SUCCESS Option set successfully. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. -+ * @retval ::NRF_ERROR_INVALID_STATE Unable to set the parameter at this time. -+ * @retval ::NRF_ERROR_BUSY The BLE stack is busy or the previous procedure has not completed. -+ */ -+SVCALL(SD_BLE_OPT_SET, uint32_t, sd_ble_opt_set(uint32_t opt_id, ble_opt_t const *p_opt)); -+ -+ -+/**@brief Get a BLE option. -+ * -+ * @details This call allows the application to retrieve the value of an option. -+ * -+ * @param[in] opt_id Option ID, see @ref BLE_COMMON_OPTS and @ref BLE_GAP_OPTS. -+ * @param[out] p_opt Pointer to a ble_opt_t structure to be filled in. -+ * -+ * @retval ::NRF_SUCCESS Option retrieved successfully. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. -+ * @retval ::NRF_ERROR_INVALID_STATE Unable to retrieve the parameter at this time. -+ * @retval ::NRF_ERROR_BUSY The BLE stack is busy or the previous procedure has not completed. -+ * @retval ::NRF_ERROR_NOT_SUPPORTED This option is not supported. -+ * -+ */ -+SVCALL(SD_BLE_OPT_GET, uint32_t, sd_ble_opt_get(uint32_t opt_id, ble_opt_t *p_opt)); -+ -+/** @} */ -+#ifdef __cplusplus -+} -+#endif -+#endif /* BLE_H__ */ -+ -+/** -+ @} -+ @} -+*/ -diff -u -r -N a/components/softdevice/s132v5/headers/ble_err.h b/components/softdevice/s132v5/headers/ble_err.h ---- a/components/softdevice/s132v5/headers/ble_err.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v5/headers/ble_err.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,91 @@ -+/* -+ * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form, except as embedded into a Nordic -+ * Semiconductor ASA integrated circuit in a product or a software update for -+ * such product, must reproduce the above copyright notice, this list of -+ * conditions and the following disclaimer in the documentation and/or other -+ * materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its -+ * contributors may be used to endorse or promote products derived from this -+ * software without specific prior written permission. -+ * -+ * 4. This software, with or without modification, must only be used with a -+ * Nordic Semiconductor ASA integrated circuit. -+ * -+ * 5. Any software provided in binary form under this license must not be reverse -+ * engineered, decompiled, modified and/or disassembled. -+ * -+ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -+ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ */ -+ -+/** -+ @addtogroup BLE_COMMON -+ @{ -+ @addtogroup nrf_error -+ @{ -+ @ingroup BLE_COMMON -+ @} -+ -+ @defgroup ble_err General error codes -+ @{ -+ -+ @brief General error code definitions for the BLE API. -+ -+ @ingroup BLE_COMMON -+*/ -+#ifndef NRF_BLE_ERR_H__ -+#define NRF_BLE_ERR_H__ -+ -+#include "nrf_error.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/* @defgroup BLE_ERRORS Error Codes -+ * @{ */ -+#define BLE_ERROR_NOT_ENABLED (NRF_ERROR_STK_BASE_NUM+0x001) /**< @ref sd_ble_enable has not been called. */ -+#define BLE_ERROR_INVALID_CONN_HANDLE (NRF_ERROR_STK_BASE_NUM+0x002) /**< Invalid connection handle. */ -+#define BLE_ERROR_INVALID_ATTR_HANDLE (NRF_ERROR_STK_BASE_NUM+0x003) /**< Invalid attribute handle. */ -+#define BLE_ERROR_INVALID_ROLE (NRF_ERROR_STK_BASE_NUM+0x004) /**< Invalid role. */ -+/** @} */ -+ -+ -+/** @defgroup BLE_ERROR_SUBRANGES Module specific error code subranges -+ * @brief Assignment of subranges for module specific error codes. -+ * @note For specific error codes, see ble_.h or ble_error_.h. -+ * @{ */ -+#define NRF_L2CAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x100) /**< L2CAP specific errors. */ -+#define NRF_GAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x200) /**< GAP specific errors. */ -+#define NRF_GATTC_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x300) /**< GATT client specific errors. */ -+#define NRF_GATTS_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x400) /**< GATT server specific errors. */ -+/** @} */ -+ -+#ifdef __cplusplus -+} -+#endif -+#endif -+ -+ -+/** -+ @} -+ @} -+*/ -diff -u -r -N a/components/softdevice/s132v5/headers/ble_gap.h b/components/softdevice/s132v5/headers/ble_gap.h ---- a/components/softdevice/s132v5/headers/ble_gap.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v5/headers/ble_gap.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,2189 @@ -+/* -+ * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form, except as embedded into a Nordic -+ * Semiconductor ASA integrated circuit in a product or a software update for -+ * such product, must reproduce the above copyright notice, this list of -+ * conditions and the following disclaimer in the documentation and/or other -+ * materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its -+ * contributors may be used to endorse or promote products derived from this -+ * software without specific prior written permission. -+ * -+ * 4. This software, with or without modification, must only be used with a -+ * Nordic Semiconductor ASA integrated circuit. -+ * -+ * 5. Any software provided in binary form under this license must not be reverse -+ * engineered, decompiled, modified and/or disassembled. -+ * -+ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -+ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ */ -+ -+/** -+ @addtogroup BLE_GAP Generic Access Profile (GAP) -+ @{ -+ @brief Definitions and prototypes for the GAP interface. -+ */ -+ -+#ifndef BLE_GAP_H__ -+#define BLE_GAP_H__ -+ -+#include -+#include "nrf_svc.h" -+#include "nrf_error.h" -+#include "ble_hci.h" -+#include "ble_ranges.h" -+#include "ble_types.h" -+#include "ble_err.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/**@addtogroup BLE_GAP_ENUMERATIONS Enumerations -+ * @{ */ -+ -+/**@brief GAP API SVC numbers. -+ */ -+enum BLE_GAP_SVCS -+{ -+ SD_BLE_GAP_ADDR_SET = BLE_GAP_SVC_BASE, /**< Set own Bluetooth Address. */ -+ SD_BLE_GAP_ADDR_GET = BLE_GAP_SVC_BASE + 1, /**< Get own Bluetooth Address. */ -+ SD_BLE_GAP_WHITELIST_SET = BLE_GAP_SVC_BASE + 2, /**< Set active whitelist. */ -+ SD_BLE_GAP_DEVICE_IDENTITIES_SET = BLE_GAP_SVC_BASE + 3, /**< Set device identity list. */ -+ SD_BLE_GAP_PRIVACY_SET = BLE_GAP_SVC_BASE + 4, /**< Set Privacy settings*/ -+ SD_BLE_GAP_PRIVACY_GET = BLE_GAP_SVC_BASE + 5, /**< Get Privacy settings*/ -+ SD_BLE_GAP_ADV_DATA_SET = BLE_GAP_SVC_BASE + 6, /**< Set Advertising Data. */ -+ SD_BLE_GAP_ADV_START = BLE_GAP_SVC_BASE + 7, /**< Start Advertising. */ -+ SD_BLE_GAP_ADV_STOP = BLE_GAP_SVC_BASE + 8, /**< Stop Advertising. */ -+ SD_BLE_GAP_CONN_PARAM_UPDATE = BLE_GAP_SVC_BASE + 9, /**< Connection Parameter Update. */ -+ SD_BLE_GAP_DISCONNECT = BLE_GAP_SVC_BASE + 10, /**< Disconnect. */ -+ SD_BLE_GAP_TX_POWER_SET = BLE_GAP_SVC_BASE + 11, /**< Set TX Power. */ -+ SD_BLE_GAP_APPEARANCE_SET = BLE_GAP_SVC_BASE + 12, /**< Set Appearance. */ -+ SD_BLE_GAP_APPEARANCE_GET = BLE_GAP_SVC_BASE + 13, /**< Get Appearance. */ -+ SD_BLE_GAP_PPCP_SET = BLE_GAP_SVC_BASE + 14, /**< Set PPCP. */ -+ SD_BLE_GAP_PPCP_GET = BLE_GAP_SVC_BASE + 15, /**< Get PPCP. */ -+ SD_BLE_GAP_DEVICE_NAME_SET = BLE_GAP_SVC_BASE + 16, /**< Set Device Name. */ -+ SD_BLE_GAP_DEVICE_NAME_GET = BLE_GAP_SVC_BASE + 17, /**< Get Device Name. */ -+ SD_BLE_GAP_AUTHENTICATE = BLE_GAP_SVC_BASE + 18, /**< Initiate Pairing/Bonding. */ -+ SD_BLE_GAP_SEC_PARAMS_REPLY = BLE_GAP_SVC_BASE + 19, /**< Reply with Security Parameters. */ -+ SD_BLE_GAP_AUTH_KEY_REPLY = BLE_GAP_SVC_BASE + 20, /**< Reply with an authentication key. */ -+ SD_BLE_GAP_LESC_DHKEY_REPLY = BLE_GAP_SVC_BASE + 21, /**< Reply with an LE Secure Connections DHKey. */ -+ SD_BLE_GAP_KEYPRESS_NOTIFY = BLE_GAP_SVC_BASE + 22, /**< Notify of a keypress during an authentication procedure. */ -+ SD_BLE_GAP_LESC_OOB_DATA_GET = BLE_GAP_SVC_BASE + 23, /**< Get the local LE Secure Connections OOB data. */ -+ SD_BLE_GAP_LESC_OOB_DATA_SET = BLE_GAP_SVC_BASE + 24, /**< Set the remote LE Secure Connections OOB data. */ -+ SD_BLE_GAP_ENCRYPT = BLE_GAP_SVC_BASE + 25, /**< Initiate encryption procedure. */ -+ SD_BLE_GAP_SEC_INFO_REPLY = BLE_GAP_SVC_BASE + 26, /**< Reply with Security Information. */ -+ SD_BLE_GAP_CONN_SEC_GET = BLE_GAP_SVC_BASE + 27, /**< Obtain connection security level. */ -+ SD_BLE_GAP_RSSI_START = BLE_GAP_SVC_BASE + 28, /**< Start reporting of changes in RSSI. */ -+ SD_BLE_GAP_RSSI_STOP = BLE_GAP_SVC_BASE + 29, /**< Stop reporting of changes in RSSI. */ -+ SD_BLE_GAP_SCAN_START = BLE_GAP_SVC_BASE + 30, /**< Start Scanning. */ -+ SD_BLE_GAP_SCAN_STOP = BLE_GAP_SVC_BASE + 31, /**< Stop Scanning. */ -+ SD_BLE_GAP_CONNECT = BLE_GAP_SVC_BASE + 32, /**< Connect. */ -+ SD_BLE_GAP_CONNECT_CANCEL = BLE_GAP_SVC_BASE + 33, /**< Cancel ongoing connection procedure. */ -+ SD_BLE_GAP_RSSI_GET = BLE_GAP_SVC_BASE + 34, /**< Get the last RSSI sample. */ -+ SD_BLE_GAP_PHY_UPDATE = BLE_GAP_SVC_BASE + 35, /**< Initiate or respond to a PHY Update Procedure. */ -+ SD_BLE_GAP_DATA_LENGTH_UPDATE = BLE_GAP_SVC_BASE + 36, /**< Initiate or respond to a Data Length Update Procedure. */ -+}; -+ -+/**@brief GAP Event IDs. -+ * IDs that uniquely identify an event coming from the stack to the application. -+ */ -+enum BLE_GAP_EVTS -+{ -+ BLE_GAP_EVT_CONNECTED = BLE_GAP_EVT_BASE, -+ BLE_GAP_EVT_DISCONNECTED = BLE_GAP_EVT_BASE + 1, /**< Disconnected from peer. \n See @ref ble_gap_evt_disconnected_t. */ -+ BLE_GAP_EVT_CONN_PARAM_UPDATE = BLE_GAP_EVT_BASE + 2, /**< Connection Parameters updated. \n See @ref ble_gap_evt_conn_param_update_t. */ -+ BLE_GAP_EVT_SEC_PARAMS_REQUEST = BLE_GAP_EVT_BASE + 3, /**< Request to provide security parameters. \n Reply with @ref sd_ble_gap_sec_params_reply. \n See @ref ble_gap_evt_sec_params_request_t. */ -+ BLE_GAP_EVT_SEC_INFO_REQUEST = BLE_GAP_EVT_BASE + 4, /**< Request to provide security information. \n Reply with @ref sd_ble_gap_sec_info_reply. \n See @ref ble_gap_evt_sec_info_request_t. */ -+ BLE_GAP_EVT_PASSKEY_DISPLAY = BLE_GAP_EVT_BASE + 5, /**< Request to display a passkey to the user. \n In LESC Numeric Comparison, reply with @ref sd_ble_gap_auth_key_reply. \n See @ref ble_gap_evt_passkey_display_t. */ -+ BLE_GAP_EVT_KEY_PRESSED = BLE_GAP_EVT_BASE + 6, /**< Notification of a keypress on the remote device.\n See @ref ble_gap_evt_key_pressed_t */ -+ BLE_GAP_EVT_AUTH_KEY_REQUEST = BLE_GAP_EVT_BASE + 7, /**< Request to provide an authentication key. \n Reply with @ref sd_ble_gap_auth_key_reply. \n See @ref ble_gap_evt_auth_key_request_t. */ -+ BLE_GAP_EVT_LESC_DHKEY_REQUEST = BLE_GAP_EVT_BASE + 8, /**< Request to calculate an LE Secure Connections DHKey. \n Reply with @ref sd_ble_gap_lesc_dhkey_reply. \n See @ref ble_gap_evt_lesc_dhkey_request_t */ -+ BLE_GAP_EVT_AUTH_STATUS = BLE_GAP_EVT_BASE + 9, /**< Authentication procedure completed with status. \n See @ref ble_gap_evt_auth_status_t. */ -+ BLE_GAP_EVT_CONN_SEC_UPDATE = BLE_GAP_EVT_BASE + 10, /**< Connection security updated. \n See @ref ble_gap_evt_conn_sec_update_t. */ -+ BLE_GAP_EVT_TIMEOUT = BLE_GAP_EVT_BASE + 11, /**< Timeout expired. \n See @ref ble_gap_evt_timeout_t. */ -+ BLE_GAP_EVT_RSSI_CHANGED = BLE_GAP_EVT_BASE + 12, /**< RSSI report. \n See @ref ble_gap_evt_rssi_changed_t. */ -+ BLE_GAP_EVT_ADV_REPORT = BLE_GAP_EVT_BASE + 13, /**< Advertising report. \n See @ref ble_gap_evt_adv_report_t. */ -+ BLE_GAP_EVT_SEC_REQUEST = BLE_GAP_EVT_BASE + 14, /**< Security Request. \n See @ref ble_gap_evt_sec_request_t. */ -+ BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST = BLE_GAP_EVT_BASE + 15, /**< Connection Parameter Update Request. \n Reply with @ref sd_ble_gap_conn_param_update. \n See @ref ble_gap_evt_conn_param_update_request_t. */ -+ BLE_GAP_EVT_SCAN_REQ_REPORT = BLE_GAP_EVT_BASE + 16, /**< Scan request report. \n See @ref ble_gap_evt_scan_req_report_t. */ -+ BLE_GAP_EVT_PHY_UPDATE_REQUEST = BLE_GAP_EVT_BASE + 17, /**< PHY Update Request. \n Reply with @ref sd_ble_gap_phy_update. \n See @ref ble_gap_evt_phy_update_request_t. */ -+ BLE_GAP_EVT_PHY_UPDATE = BLE_GAP_EVT_BASE + 18, /**< PHY Update Procedure is complete. \n See @ref ble_gap_evt_phy_update_t. */ -+ BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST = BLE_GAP_EVT_BASE + 19, /**< Data Length Update Request. \n Reply with @ref sd_ble_gap_data_length_update.\n See @ref ble_gap_evt_data_length_update_request_t. */ -+ BLE_GAP_EVT_DATA_LENGTH_UPDATE = BLE_GAP_EVT_BASE + 20, /**< LL Data Channel PDU payload length updated. \n See @ref ble_gap_evt_data_length_update_t. */ -+}; -+ -+/**@brief GAP Option IDs. -+ * IDs that uniquely identify a GAP option. -+ */ -+enum BLE_GAP_OPTS -+{ -+ BLE_GAP_OPT_CH_MAP = BLE_GAP_OPT_BASE, /**< Channel Map. @ref ble_gap_opt_ch_map_t */ -+ BLE_GAP_OPT_LOCAL_CONN_LATENCY = BLE_GAP_OPT_BASE + 1, /**< Local connection latency. @ref ble_gap_opt_local_conn_latency_t */ -+ BLE_GAP_OPT_PASSKEY = BLE_GAP_OPT_BASE + 2, /**< Set passkey. @ref ble_gap_opt_passkey_t */ -+ BLE_GAP_OPT_SCAN_REQ_REPORT = BLE_GAP_OPT_BASE + 3, /**< Scan request report. @ref ble_gap_opt_scan_req_report_t */ -+ BLE_GAP_OPT_COMPAT_MODE_1 = BLE_GAP_OPT_BASE + 4, /**< Compatibility mode. @ref ble_gap_opt_compat_mode_1_t */ -+ BLE_GAP_OPT_AUTH_PAYLOAD_TIMEOUT = BLE_GAP_OPT_BASE + 5, /**< Set Authenticated payload timeout. @ref ble_gap_opt_auth_payload_timeout_t */ -+ BLE_GAP_OPT_SLAVE_LATENCY_DISABLE = BLE_GAP_OPT_BASE + 6, /**< Disable slave latency. @ref ble_gap_opt_slave_latency_disable_t */ -+}; -+ -+/**@brief GAP Configuration IDs. -+ * -+ * IDs that uniquely identify a GAP configuration. -+ */ -+enum BLE_GAP_CFGS -+{ -+ BLE_GAP_CFG_ROLE_COUNT = BLE_GAP_CFG_BASE, /**< Role count configuration. */ -+ BLE_GAP_CFG_DEVICE_NAME = BLE_GAP_CFG_BASE + 1, /**< Device name configuration. */ -+}; -+ -+/** @} */ -+ -+/**@addtogroup BLE_GAP_DEFINES Defines -+ * @{ */ -+ -+/**@defgroup BLE_ERRORS_GAP SVC return values specific to GAP -+ * @{ */ -+#define BLE_ERROR_GAP_UUID_LIST_MISMATCH (NRF_GAP_ERR_BASE + 0x000) /**< UUID list does not contain an integral number of UUIDs. */ -+#define BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST (NRF_GAP_ERR_BASE + 0x001) /**< Use of Whitelist not permitted with discoverable advertising. */ -+#define BLE_ERROR_GAP_INVALID_BLE_ADDR (NRF_GAP_ERR_BASE + 0x002) /**< The upper two bits of the address do not correspond to the specified address type. */ -+#define BLE_ERROR_GAP_WHITELIST_IN_USE (NRF_GAP_ERR_BASE + 0x003) /**< Attempt to modify the whitelist while already in use by another operation. */ -+#define BLE_ERROR_GAP_DEVICE_IDENTITIES_IN_USE (NRF_GAP_ERR_BASE + 0x004) /**< Attempt to modify the device identity list while already in use by another operation. */ -+#define BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE (NRF_GAP_ERR_BASE + 0x005) /**< The device identity list contains entries with duplicate identity addresses. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_ROLES GAP Roles -+ * @{ */ -+#define BLE_GAP_ROLE_INVALID 0x0 /**< Invalid Role. */ -+#define BLE_GAP_ROLE_PERIPH 0x1 /**< Peripheral Role. */ -+#define BLE_GAP_ROLE_CENTRAL 0x2 /**< Central Role. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_TIMEOUT_SOURCES GAP Timeout sources -+ * @{ */ -+#define BLE_GAP_TIMEOUT_SRC_ADVERTISING 0x00 /**< Advertising timeout. */ -+#define BLE_GAP_TIMEOUT_SRC_SCAN 0x01 /**< Scanning timeout. */ -+#define BLE_GAP_TIMEOUT_SRC_CONN 0x02 /**< Connection timeout. */ -+#define BLE_GAP_TIMEOUT_SRC_AUTH_PAYLOAD 0x03 /**< Authenticated payload timeout. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_ADDR_TYPES GAP Address types -+ * @{ */ -+#define BLE_GAP_ADDR_TYPE_PUBLIC 0x00 /**< Public address. */ -+#define BLE_GAP_ADDR_TYPE_RANDOM_STATIC 0x01 /**< Random static address. */ -+#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE 0x02 /**< Random private resolvable address. */ -+#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE 0x03 /**< Random private non-resolvable address. */ -+/**@} */ -+ -+ -+/**@brief The default interval in seconds at which a private address is refreshed. */ -+#define BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S (900) /* 15 minutes. */ -+/**@brief The maximum interval in seconds at which a private address can be refreshed. */ -+#define BLE_GAP_MAX_PRIVATE_ADDR_CYCLE_INTERVAL_S (41400) /* 11 hours 30 minutes. */ -+ -+ -+/** @brief BLE address length. */ -+#define BLE_GAP_ADDR_LEN (6) -+ -+ -+/**@defgroup BLE_GAP_PRIVACY_MODES Privacy modes -+ * @{ */ -+#define BLE_GAP_PRIVACY_MODE_OFF 0x00 /**< Device will send and accept its identity address for its own address. */ -+#define BLE_GAP_PRIVACY_MODE_DEVICE_PRIVACY 0x01 /**< Device will send and accept only private addresses for its own address. */ -+#define BLE_GAP_PRIVACY_MODE_NETWORK_PRIVACY 0x02 /**< Device will send and accept only private addresses for its own address, -+ and will not accept a peer using identity address as sender address when -+ the peer IRK is exchanged, non-zero and added to the identity list. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_AD_TYPE_DEFINITIONS GAP Advertising and Scan Response Data format -+ * @note Found at https://www.bluetooth.org/Technical/AssignedNumbers/generic_access_profile.htm -+ * @{ */ -+#define BLE_GAP_AD_TYPE_FLAGS 0x01 /**< Flags for discoverability. */ -+#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE 0x02 /**< Partial list of 16 bit service UUIDs. */ -+#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE 0x03 /**< Complete list of 16 bit service UUIDs. */ -+#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_MORE_AVAILABLE 0x04 /**< Partial list of 32 bit service UUIDs. */ -+#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_COMPLETE 0x05 /**< Complete list of 32 bit service UUIDs. */ -+#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_MORE_AVAILABLE 0x06 /**< Partial list of 128 bit service UUIDs. */ -+#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_COMPLETE 0x07 /**< Complete list of 128 bit service UUIDs. */ -+#define BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME 0x08 /**< Short local device name. */ -+#define BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME 0x09 /**< Complete local device name. */ -+#define BLE_GAP_AD_TYPE_TX_POWER_LEVEL 0x0A /**< Transmit power level. */ -+#define BLE_GAP_AD_TYPE_CLASS_OF_DEVICE 0x0D /**< Class of device. */ -+#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C 0x0E /**< Simple Pairing Hash C. */ -+#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R 0x0F /**< Simple Pairing Randomizer R. */ -+#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_TK_VALUE 0x10 /**< Security Manager TK Value. */ -+#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_OOB_FLAGS 0x11 /**< Security Manager Out Of Band Flags. */ -+#define BLE_GAP_AD_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE 0x12 /**< Slave Connection Interval Range. */ -+#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_16BIT 0x14 /**< List of 16-bit Service Solicitation UUIDs. */ -+#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_128BIT 0x15 /**< List of 128-bit Service Solicitation UUIDs. */ -+#define BLE_GAP_AD_TYPE_SERVICE_DATA 0x16 /**< Service Data - 16-bit UUID. */ -+#define BLE_GAP_AD_TYPE_PUBLIC_TARGET_ADDRESS 0x17 /**< Public Target Address. */ -+#define BLE_GAP_AD_TYPE_RANDOM_TARGET_ADDRESS 0x18 /**< Random Target Address. */ -+#define BLE_GAP_AD_TYPE_APPEARANCE 0x19 /**< Appearance. */ -+#define BLE_GAP_AD_TYPE_ADVERTISING_INTERVAL 0x1A /**< Advertising Interval. */ -+#define BLE_GAP_AD_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS 0x1B /**< LE Bluetooth Device Address. */ -+#define BLE_GAP_AD_TYPE_LE_ROLE 0x1C /**< LE Role. */ -+#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C256 0x1D /**< Simple Pairing Hash C-256. */ -+#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R256 0x1E /**< Simple Pairing Randomizer R-256. */ -+#define BLE_GAP_AD_TYPE_SERVICE_DATA_32BIT_UUID 0x20 /**< Service Data - 32-bit UUID. */ -+#define BLE_GAP_AD_TYPE_SERVICE_DATA_128BIT_UUID 0x21 /**< Service Data - 128-bit UUID. */ -+#define BLE_GAP_AD_TYPE_LESC_CONFIRMATION_VALUE 0x22 /**< LE Secure Connections Confirmation Value */ -+#define BLE_GAP_AD_TYPE_LESC_RANDOM_VALUE 0x23 /**< LE Secure Connections Random Value */ -+#define BLE_GAP_AD_TYPE_URI 0x24 /**< URI */ -+#define BLE_GAP_AD_TYPE_3D_INFORMATION_DATA 0x3D /**< 3D Information Data. */ -+#define BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA 0xFF /**< Manufacturer Specific Data. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_ADV_FLAGS GAP Advertisement Flags -+ * @{ */ -+#define BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE (0x01) /**< LE Limited Discoverable Mode. */ -+#define BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE (0x02) /**< LE General Discoverable Mode. */ -+#define BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED (0x04) /**< BR/EDR not supported. */ -+#define BLE_GAP_ADV_FLAG_LE_BR_EDR_CONTROLLER (0x08) /**< Simultaneous LE and BR/EDR, Controller. */ -+#define BLE_GAP_ADV_FLAG_LE_BR_EDR_HOST (0x10) /**< Simultaneous LE and BR/EDR, Host. */ -+#define BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE (BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE Limited Discoverable Mode, BR/EDR not supported. */ -+#define BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE (BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE General Discoverable Mode, BR/EDR not supported. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_ADV_INTERVALS GAP Advertising interval max and min -+ * @{ */ -+#define BLE_GAP_ADV_INTERVAL_MIN 0x0020 /**< Minimum Advertising interval in 625 us units, i.e. 20 ms. */ -+#define BLE_GAP_ADV_INTERVAL_MAX 0x4000 /**< Maximum Advertising interval in 625 us units, i.e. 10.24 s. */ -+ /**@} */ -+ -+ -+/**@defgroup BLE_GAP_SCAN_INTERVALS GAP Scan interval max and min -+ * @{ */ -+#define BLE_GAP_SCAN_INTERVAL_MIN 0x0004 /**< Minimum Scan interval in 625 us units, i.e. 2.5 ms. */ -+#define BLE_GAP_SCAN_INTERVAL_MAX 0x4000 /**< Maximum Scan interval in 625 us units, i.e. 10.24 s. */ -+ /** @} */ -+ -+ -+/**@defgroup BLE_GAP_SCAN_WINDOW GAP Scan window max and min -+ * @{ */ -+#define BLE_GAP_SCAN_WINDOW_MIN 0x0004 /**< Minimum Scan window in 625 us units, i.e. 2.5 ms. */ -+#define BLE_GAP_SCAN_WINDOW_MAX 0x4000 /**< Maximum Scan window in 625 us units, i.e. 10.24 s. */ -+ /** @} */ -+ -+ -+/**@defgroup BLE_GAP_SCAN_TIMEOUT GAP Scan timeout max and min -+ * @{ */ -+#define BLE_GAP_SCAN_TIMEOUT_MIN 0x0001 /**< Minimum Scan timeout in seconds. */ -+#define BLE_GAP_SCAN_TIMEOUT_MAX 0xFFFF /**< Maximum Scan timeout in seconds. */ -+ /** @} */ -+ -+ -+/**@brief Maximum size of advertising data in octets. */ -+#define BLE_GAP_ADV_MAX_SIZE (31) -+ -+ -+/**@defgroup BLE_GAP_ADV_TYPES GAP Advertising types -+ * @{ */ -+#define BLE_GAP_ADV_TYPE_ADV_IND 0x00 /**< Connectable undirected. */ -+#define BLE_GAP_ADV_TYPE_ADV_DIRECT_IND 0x01 /**< Connectable directed. */ -+#define BLE_GAP_ADV_TYPE_ADV_SCAN_IND 0x02 /**< Scannable undirected. */ -+#define BLE_GAP_ADV_TYPE_ADV_NONCONN_IND 0x03 /**< Non connectable undirected. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_ADV_FILTER_POLICIES GAP Advertising filter policies -+ * @{ */ -+#define BLE_GAP_ADV_FP_ANY 0x00 /**< Allow scan requests and connect requests from any device. */ -+#define BLE_GAP_ADV_FP_FILTER_SCANREQ 0x01 /**< Filter scan requests with whitelist. */ -+#define BLE_GAP_ADV_FP_FILTER_CONNREQ 0x02 /**< Filter connect requests with whitelist. */ -+#define BLE_GAP_ADV_FP_FILTER_BOTH 0x03 /**< Filter both scan and connect requests with whitelist. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_ADV_TIMEOUT_VALUES GAP Advertising timeout values -+ * @{ */ -+#define BLE_GAP_ADV_TIMEOUT_LIMITED_MAX (180) /**< Maximum advertising time in limited discoverable mode (TGAP(lim_adv_timeout) = 180 s). */ -+#define BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED (0) /**< Unlimited advertising in general discoverable mode. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_DISC_MODES GAP Discovery modes -+ * @{ */ -+#define BLE_GAP_DISC_MODE_NOT_DISCOVERABLE 0x00 /**< Not discoverable discovery Mode. */ -+#define BLE_GAP_DISC_MODE_LIMITED 0x01 /**< Limited Discovery Mode. */ -+#define BLE_GAP_DISC_MODE_GENERAL 0x02 /**< General Discovery Mode. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_IO_CAPS GAP IO Capabilities -+ * @{ */ -+#define BLE_GAP_IO_CAPS_DISPLAY_ONLY 0x00 /**< Display Only. */ -+#define BLE_GAP_IO_CAPS_DISPLAY_YESNO 0x01 /**< Display and Yes/No entry. */ -+#define BLE_GAP_IO_CAPS_KEYBOARD_ONLY 0x02 /**< Keyboard Only. */ -+#define BLE_GAP_IO_CAPS_NONE 0x03 /**< No I/O capabilities. */ -+#define BLE_GAP_IO_CAPS_KEYBOARD_DISPLAY 0x04 /**< Keyboard and Display. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_AUTH_KEY_TYPES GAP Authentication Key Types -+ * @{ */ -+#define BLE_GAP_AUTH_KEY_TYPE_NONE 0x00 /**< No key (may be used to reject). */ -+#define BLE_GAP_AUTH_KEY_TYPE_PASSKEY 0x01 /**< 6-digit Passkey. */ -+#define BLE_GAP_AUTH_KEY_TYPE_OOB 0x02 /**< Out Of Band data. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_KP_NOT_TYPES GAP Keypress Notification Types -+ * @{ */ -+#define BLE_GAP_KP_NOT_TYPE_PASSKEY_START 0x00 /**< Passkey entry started. */ -+#define BLE_GAP_KP_NOT_TYPE_PASSKEY_DIGIT_IN 0x01 /**< Passkey digit entered. */ -+#define BLE_GAP_KP_NOT_TYPE_PASSKEY_DIGIT_OUT 0x02 /**< Passkey digit erased. */ -+#define BLE_GAP_KP_NOT_TYPE_PASSKEY_CLEAR 0x03 /**< Passkey cleared. */ -+#define BLE_GAP_KP_NOT_TYPE_PASSKEY_END 0x04 /**< Passkey entry completed. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_SEC_STATUS GAP Security status -+ * @{ */ -+#define BLE_GAP_SEC_STATUS_SUCCESS 0x00 /**< Procedure completed with success. */ -+#define BLE_GAP_SEC_STATUS_TIMEOUT 0x01 /**< Procedure timed out. */ -+#define BLE_GAP_SEC_STATUS_PDU_INVALID 0x02 /**< Invalid PDU received. */ -+#define BLE_GAP_SEC_STATUS_RFU_RANGE1_BEGIN 0x03 /**< Reserved for Future Use range #1 begin. */ -+#define BLE_GAP_SEC_STATUS_RFU_RANGE1_END 0x80 /**< Reserved for Future Use range #1 end. */ -+#define BLE_GAP_SEC_STATUS_PASSKEY_ENTRY_FAILED 0x81 /**< Passkey entry failed (user canceled or other). */ -+#define BLE_GAP_SEC_STATUS_OOB_NOT_AVAILABLE 0x82 /**< Out of Band Key not available. */ -+#define BLE_GAP_SEC_STATUS_AUTH_REQ 0x83 /**< Authentication requirements not met. */ -+#define BLE_GAP_SEC_STATUS_CONFIRM_VALUE 0x84 /**< Confirm value failed. */ -+#define BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP 0x85 /**< Pairing not supported. */ -+#define BLE_GAP_SEC_STATUS_ENC_KEY_SIZE 0x86 /**< Encryption key size. */ -+#define BLE_GAP_SEC_STATUS_SMP_CMD_UNSUPPORTED 0x87 /**< Unsupported SMP command. */ -+#define BLE_GAP_SEC_STATUS_UNSPECIFIED 0x88 /**< Unspecified reason. */ -+#define BLE_GAP_SEC_STATUS_REPEATED_ATTEMPTS 0x89 /**< Too little time elapsed since last attempt. */ -+#define BLE_GAP_SEC_STATUS_INVALID_PARAMS 0x8A /**< Invalid parameters. */ -+#define BLE_GAP_SEC_STATUS_DHKEY_FAILURE 0x8B /**< DHKey check failure. */ -+#define BLE_GAP_SEC_STATUS_NUM_COMP_FAILURE 0x8C /**< Numeric Comparison failure. */ -+#define BLE_GAP_SEC_STATUS_BR_EDR_IN_PROG 0x8D /**< BR/EDR pairing in progress. */ -+#define BLE_GAP_SEC_STATUS_X_TRANS_KEY_DISALLOWED 0x8E /**< BR/EDR Link Key cannot be used for LE keys. */ -+#define BLE_GAP_SEC_STATUS_RFU_RANGE2_BEGIN 0x8F /**< Reserved for Future Use range #2 begin. */ -+#define BLE_GAP_SEC_STATUS_RFU_RANGE2_END 0xFF /**< Reserved for Future Use range #2 end. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_SEC_STATUS_SOURCES GAP Security status sources -+ * @{ */ -+#define BLE_GAP_SEC_STATUS_SOURCE_LOCAL 0x00 /**< Local failure. */ -+#define BLE_GAP_SEC_STATUS_SOURCE_REMOTE 0x01 /**< Remote failure. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_CP_LIMITS GAP Connection Parameters Limits -+ * @{ */ -+#define BLE_GAP_CP_MIN_CONN_INTVL_NONE 0xFFFF /**< No new minimum connection interval specified in connect parameters. */ -+#define BLE_GAP_CP_MIN_CONN_INTVL_MIN 0x0006 /**< Lowest minimum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ -+#define BLE_GAP_CP_MIN_CONN_INTVL_MAX 0x0C80 /**< Highest minimum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ -+#define BLE_GAP_CP_MAX_CONN_INTVL_NONE 0xFFFF /**< No new maximum connection interval specified in connect parameters. */ -+#define BLE_GAP_CP_MAX_CONN_INTVL_MIN 0x0006 /**< Lowest maximum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ -+#define BLE_GAP_CP_MAX_CONN_INTVL_MAX 0x0C80 /**< Highest maximum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ -+#define BLE_GAP_CP_SLAVE_LATENCY_MAX 0x01F3 /**< Highest slave latency permitted, in connection events. */ -+#define BLE_GAP_CP_CONN_SUP_TIMEOUT_NONE 0xFFFF /**< No new supervision timeout specified in connect parameters. */ -+#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MIN 0x000A /**< Lowest supervision timeout permitted, in units of 10 ms, i.e. 100 ms. */ -+#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MAX 0x0C80 /**< Highest supervision timeout permitted, in units of 10 ms, i.e. 32 s. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_DEVNAME GAP device name defines. -+ * @{ */ -+#define BLE_GAP_DEVNAME_DEFAULT "nRF5x" /**< Default device name value. */ -+#define BLE_GAP_DEVNAME_DEFAULT_LEN 31 /**< Default number of octets in device name. */ -+#define BLE_GAP_DEVNAME_MAX_LEN 248 /**< Maximum number of octets in device name. */ -+/**@} */ -+ -+ -+/**@brief Disable RSSI events for connections */ -+#define BLE_GAP_RSSI_THRESHOLD_INVALID 0xFF -+ -+/**@defgroup BLE_GAP_PHYS GAP PHYs -+ * @{ */ -+#define BLE_GAP_PHY_AUTO 0x00 /**< Automatic PHY selection. Refer @ref sd_ble_gap_phy_update for more information.*/ -+#define BLE_GAP_PHY_1MBPS 0x01 /**< 1 Mbps PHY. */ -+#define BLE_GAP_PHY_2MBPS 0x02 /**< 2 Mbps PHY. */ -+#define BLE_GAP_PHY_CODED 0x04 /**< Coded PHY. */ -+ -+/**@} */ -+ -+/**@defgroup BLE_GAP_CONN_SEC_MODE_SET_MACROS GAP attribute security requirement setters -+ * -+ * See @ref ble_gap_conn_sec_mode_t. -+ * @{ */ -+/**@brief Set sec_mode pointed to by ptr to have no access rights.*/ -+#define BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(ptr) do {(ptr)->sm = 0; (ptr)->lv = 0;} while(0) -+/**@brief Set sec_mode pointed to by ptr to require no protection, open link.*/ -+#define BLE_GAP_CONN_SEC_MODE_SET_OPEN(ptr) do {(ptr)->sm = 1; (ptr)->lv = 1;} while(0) -+/**@brief Set sec_mode pointed to by ptr to require encryption, but no MITM protection.*/ -+#define BLE_GAP_CONN_SEC_MODE_SET_ENC_NO_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 2;} while(0) -+/**@brief Set sec_mode pointed to by ptr to require encryption and MITM protection.*/ -+#define BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 3;} while(0) -+/**@brief Set sec_mode pointed to by ptr to require LESC encryption and MITM protection.*/ -+#define BLE_GAP_CONN_SEC_MODE_SET_LESC_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 4;} while(0) -+/**@brief Set sec_mode pointed to by ptr to require signing or encryption, no MITM protection needed.*/ -+#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_NO_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 1;} while(0) -+/**@brief Set sec_mode pointed to by ptr to require signing or encryption with MITM protection.*/ -+#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_WITH_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 2;} while(0) -+/**@} */ -+ -+ -+/**@brief GAP Security Random Number Length. */ -+#define BLE_GAP_SEC_RAND_LEN 8 -+ -+ -+/**@brief GAP Security Key Length. */ -+#define BLE_GAP_SEC_KEY_LEN 16 -+ -+ -+/**@brief GAP LE Secure Connections Elliptic Curve Diffie-Hellman P-256 Public Key Length. */ -+#define BLE_GAP_LESC_P256_PK_LEN 64 -+ -+ -+/**@brief GAP LE Secure Connections Elliptic Curve Diffie-Hellman DHKey Length. */ -+#define BLE_GAP_LESC_DHKEY_LEN 32 -+ -+ -+/**@brief GAP Passkey Length. */ -+#define BLE_GAP_PASSKEY_LEN 6 -+ -+ -+/**@brief Maximum amount of addresses in the whitelist. */ -+#define BLE_GAP_WHITELIST_ADDR_MAX_COUNT (8) -+ -+ -+/**@brief Maximum amount of identities in the device identities list. */ -+#define BLE_GAP_DEVICE_IDENTITIES_MAX_COUNT (8) -+ -+ -+/**@brief Default connection count for a configuration. */ -+#define BLE_GAP_CONN_COUNT_DEFAULT (1) -+ -+ -+/**@defgroup BLE_GAP_EVENT_LENGTH GAP event length defines. -+ * @{ */ -+#define BLE_GAP_EVENT_LENGTH_MIN (2) /**< Minimum event length, in 1.25 ms units. */ -+#define BLE_GAP_EVENT_LENGTH_DEFAULT (3) /**< Default event length, in 1.25 ms units. */ -+/**@} */ -+ -+ -+/**@defgroup BLE_GAP_ROLE_COUNT GAP concurrent connection count defines. -+ * @{ */ -+#define BLE_GAP_ROLE_COUNT_PERIPH_DEFAULT (1) /**< Default maximum number of connections concurrently acting as peripherals. */ -+#define BLE_GAP_ROLE_COUNT_CENTRAL_DEFAULT (3) /**< Default maximum number of connections concurrently acting as centrals. */ -+#define BLE_GAP_ROLE_COUNT_CENTRAL_SEC_DEFAULT (1) /**< Default number of SMP instances shared between all connections acting as centrals. */ -+#define BLE_GAP_ROLE_COUNT_COMBINED_MAX (20) /**< Maximum supported number of concurrent connections in the peripheral and central roles combined. */ -+ -+/**@} */ -+ -+/**@brief Automatic data length parameter. */ -+#define BLE_GAP_DATA_LENGTH_AUTO 0 -+ -+/**@defgroup BLE_GAP_AUTH_PAYLOAD_TIMEOUT Authenticated payload timeout defines. -+ * @{ */ -+#define BLE_GAP_AUTH_PAYLOAD_TIMEOUT_MAX (48000) /**< Maximum authenticated payload timeout in 10 ms units, i.e. 8 minutes. */ -+#define BLE_GAP_AUTH_PAYLOAD_TIMEOUT_MIN (1) /**< Minimum authenticated payload timeout in 10 ms units, i.e. 10 ms. */ -+/**@} */ -+ -+/**@defgroup GAP_SEC_MODES GAP Security Modes -+ * @{ */ -+#define BLE_GAP_SEC_MODE 0x00 /**< No key (may be used to reject). */ -+/**@} */ -+/** @} */ -+ -+ -+/**@addtogroup BLE_GAP_STRUCTURES Structures -+ * @{ */ -+ -+/**@brief Bluetooth Low Energy address. */ -+typedef struct -+{ -+ uint8_t addr_id_peer : 1; /**< Only valid for peer addresses. -+ Reference to peer in device identities list (as set with @ref sd_ble_gap_device_identities_set) when peer is using privacy. */ -+ uint8_t addr_type : 7; /**< See @ref BLE_GAP_ADDR_TYPES. */ -+ uint8_t addr[BLE_GAP_ADDR_LEN]; /**< 48-bit address, LSB format. */ -+} ble_gap_addr_t; -+ -+ -+/**@brief GAP connection parameters. -+ * -+ * @note When ble_conn_params_t is received in an event, both min_conn_interval and -+ * max_conn_interval will be equal to the connection interval set by the central. -+ * -+ * @note If both conn_sup_timeout and max_conn_interval are specified, then the following constraint applies: -+ * conn_sup_timeout * 4 > (1 + slave_latency) * max_conn_interval -+ * that corresponds to the following Bluetooth Spec requirement: -+ * The Supervision_Timeout in milliseconds shall be larger than -+ * (1 + Conn_Latency) * Conn_Interval_Max * 2, where Conn_Interval_Max is given in milliseconds. -+ */ -+typedef struct -+{ -+ uint16_t min_conn_interval; /**< Minimum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ -+ uint16_t max_conn_interval; /**< Maximum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ -+ uint16_t slave_latency; /**< Slave Latency in number of connection events, see @ref BLE_GAP_CP_LIMITS.*/ -+ uint16_t conn_sup_timeout; /**< Connection Supervision Timeout in 10 ms units, see @ref BLE_GAP_CP_LIMITS.*/ -+} ble_gap_conn_params_t; -+ -+ -+/**@brief GAP connection security modes. -+ * -+ * Security Mode 0 Level 0: No access permissions at all (this level is not defined by the Bluetooth Core specification).\n -+ * Security Mode 1 Level 1: No security is needed (aka open link).\n -+ * Security Mode 1 Level 2: Encrypted link required, MITM protection not necessary.\n -+ * Security Mode 1 Level 3: MITM protected encrypted link required.\n -+ * Security Mode 1 Level 4: LESC MITM protected encrypted link using a 128-bit strength encryption key required.\n -+ * Security Mode 2 Level 1: Signing or encryption required, MITM protection not necessary.\n -+ * Security Mode 2 Level 2: MITM protected signing required, unless link is MITM protected encrypted.\n -+ */ -+typedef struct -+{ -+ uint8_t sm : 4; /**< Security Mode (1 or 2), 0 for no permissions at all. */ -+ uint8_t lv : 4; /**< Level (1, 2, 3 or 4), 0 for no permissions at all. */ -+ -+} ble_gap_conn_sec_mode_t; -+ -+ -+/**@brief GAP connection security status.*/ -+typedef struct -+{ -+ ble_gap_conn_sec_mode_t sec_mode; /**< Currently active security mode for this connection.*/ -+ uint8_t encr_key_size; /**< Length of currently active encryption key, 7 to 16 octets (only applicable for bonding procedures). */ -+} ble_gap_conn_sec_t; -+ -+/**@brief Identity Resolving Key. */ -+typedef struct -+{ -+ uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Array containing IRK. */ -+} ble_gap_irk_t; -+ -+ -+/**@brief Channel mask for RF channels used in advertising. */ -+typedef struct -+{ -+ uint8_t ch_37_off : 1; /**< Setting this bit to 1 will turn off advertising on channel 37 */ -+ uint8_t ch_38_off : 1; /**< Setting this bit to 1 will turn off advertising on channel 38 */ -+ uint8_t ch_39_off : 1; /**< Setting this bit to 1 will turn off advertising on channel 39 */ -+} ble_gap_adv_ch_mask_t; -+ -+ -+/**@brief GAP advertising parameters. */ -+typedef struct -+{ -+ uint8_t type; /**< See @ref BLE_GAP_ADV_TYPES. */ -+ ble_gap_addr_t const *p_peer_addr; /**< Address of a known peer. -+ - When privacy is enabled and the local device use @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE addresses, the device identity list is searched for a matching -+ entry. If the local IRK for that device identity is set, the local IRK for that device will be used to generate the advertiser address field in the advertise packet. -+ - If type is @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND, this must be set to the targeted initiator. If the initiator is in the device identity list, -+ the peer IRK for that device will be used to generate the initiator address field in the ADV_DIRECT_IND packet. */ -+ uint8_t fp; /**< Filter Policy, see @ref BLE_GAP_ADV_FILTER_POLICIES. */ -+ uint16_t interval; /**< Advertising interval between 0x0020 and 0x4000 in 0.625 ms units (20 ms to 10.24 s), see @ref BLE_GAP_ADV_INTERVALS. -+ - If type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND, this parameter must be set to 0 for high duty cycle directed advertising. -+ - If type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND, set @ref BLE_GAP_ADV_INTERVAL_MIN <= interval <= @ref BLE_GAP_ADV_INTERVAL_MAX for low duty cycle advertising.*/ -+ uint16_t timeout; /**< Advertising timeout between 0x0001 and 0x3FFF in seconds, 0x0000 disables timeout. See also @ref BLE_GAP_ADV_TIMEOUT_VALUES. If type equals @ref BLE_GAP_ADV_TYPE_ADV_DIRECT_IND, this parameter must be set to 0 for High duty cycle directed advertising. */ -+ ble_gap_adv_ch_mask_t channel_mask; /**< Advertising channel mask. See @ref ble_gap_adv_ch_mask_t. */ -+} ble_gap_adv_params_t; -+ -+ -+/**@brief GAP scanning parameters. */ -+typedef struct -+{ -+ uint8_t active : 1; /**< If 1, perform active scanning (scan requests). */ -+ uint8_t use_whitelist : 1; /**< If 1, filter advertisers using current active whitelist. */ -+ uint8_t adv_dir_report : 1; /**< If 1, also report directed advertisements where the initiator field is set to a private resolvable address, -+ even if the address did not resolve to an entry in the device identity list. A report will be generated -+ even if the peer is not in the whitelist. */ -+ uint16_t interval; /**< Scan interval between 0x0004 and 0x4000 in 0.625 ms units (2.5 ms to 10.24 s). */ -+ uint16_t window; /**< Scan window between 0x0004 and 0x4000 in 0.625 ms units (2.5 ms to 10.24 s). */ -+ uint16_t timeout; /**< Scan timeout between 0x0001 and 0xFFFF in seconds, 0x0000 disables timeout. */ -+} ble_gap_scan_params_t; -+ -+ -+/**@brief Privacy. -+ * -+ * The privacy feature provides a way for the device to avoid being tracked over a period of time. -+ * The privacy feature, when enabled, hides the local device identity and replaces it with a private address -+ * that is automatically refreshed at a specified interval. -+ * -+ * If a device still wants to be recognized by other peers, it needs to share it's Identity Resolving Key (IRK). -+ * With this key, a device can generate a random private address that can only be recognized by peers in possession of that key, -+ * and devices can establish connections without revealing their real identities. -+ * -+ * Both network privacy (@ref BLE_GAP_PRIVACY_MODE_NETWORK_PRIVACY) and device privacy (@ref BLE_GAP_PRIVACY_MODE_DEVICE_PRIVACY) -+ * are supported. -+ * -+ * @note If the device IRK is updated, the new IRK becomes the one to be distributed in all -+ * bonding procedures performed after @ref sd_ble_gap_privacy_set returns. -+ * The IRK distributed during bonding procedure is the device IRK that is active when @ref sd_ble_gap_sec_params_reply is called. -+ */ -+typedef struct -+{ -+ uint8_t privacy_mode; /**< Privacy mode, see @ref BLE_GAP_PRIVACY_MODES. Default is @ref BLE_GAP_PRIVACY_MODE_OFF. */ -+ uint8_t private_addr_type; /**< The private address type must be either @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE or @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE. */ -+ uint16_t private_addr_cycle_s; /**< Private address cycle interval in seconds. Providing an address cycle value of 0 will use the default value defined by @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S. */ -+ ble_gap_irk_t *p_device_irk; /**< When used as input, pointer to IRK structure that will be used as the default IRK. If NULL, the device default IRK will be used. -+ When used as output, pointer to IRK structure where the current default IRK will be written to. If NULL, this argument is ignored. -+ By default, the default IRK is used to generate random private resolvable addresses for the local device unless instructed otherwise. */ -+} ble_gap_privacy_params_t; -+ -+ -+/**@brief PHY preferences for TX and RX -+ * @note tx_phys and rx_phys are bit fields. Multiple bits can be set in them to indicate multiple preferred PHYs for each direction. -+ * @code -+ * p_gap_phys->tx_phys = BLE_GAP_PHY_1MBPS | BLE_GAP_PHY_2MBPS; -+ * p_gap_phys->rx_phys = BLE_GAP_PHY_1MBPS | BLE_GAP_PHY_2MBPS; -+ * @endcode -+ * -+ */ -+typedef struct -+{ -+ uint8_t tx_phys; /**< Preferred transmit PHYs, see @ref BLE_GAP_PHYS. */ -+ uint8_t rx_phys; /**< Preferred receive PHYs, see @ref BLE_GAP_PHYS. */ -+} ble_gap_phys_t; -+ -+/** @brief Keys that can be exchanged during a bonding procedure. */ -+typedef struct -+{ -+ uint8_t enc : 1; /**< Long Term Key and Master Identification. */ -+ uint8_t id : 1; /**< Identity Resolving Key and Identity Address Information. */ -+ uint8_t sign : 1; /**< Connection Signature Resolving Key. */ -+ uint8_t link : 1; /**< Derive the Link Key from the LTK. */ -+} ble_gap_sec_kdist_t; -+ -+ -+/**@brief GAP security parameters. */ -+typedef struct -+{ -+ uint8_t bond : 1; /**< Perform bonding. */ -+ uint8_t mitm : 1; /**< Enable Man In The Middle protection. */ -+ uint8_t lesc : 1; /**< Enable LE Secure Connection pairing. */ -+ uint8_t keypress : 1; /**< Enable generation of keypress notifications. */ -+ uint8_t io_caps : 3; /**< IO capabilities, see @ref BLE_GAP_IO_CAPS. */ -+ uint8_t oob : 1; /**< The OOB data flag. -+ - In LE legacy pairing, this flag is set if a device has out of band authentication data. -+ The OOB method is used if both of the devices have out of band authentication data. -+ - In LE Secure Connections pairing, this flag is set if a device has the peer device's out of band authentication data. -+ The OOB method is used if at least one device has the peer device's OOB data available. */ -+ uint8_t min_key_size; /**< Minimum encryption key size in octets between 7 and 16. If 0 then not applicable in this instance. */ -+ uint8_t max_key_size; /**< Maximum encryption key size in octets between min_key_size and 16. */ -+ ble_gap_sec_kdist_t kdist_own; /**< Key distribution bitmap: keys that the local device will distribute. */ -+ ble_gap_sec_kdist_t kdist_peer; /**< Key distribution bitmap: keys that the remote device will distribute. */ -+} ble_gap_sec_params_t; -+ -+ -+/**@brief GAP Encryption Information. */ -+typedef struct -+{ -+ uint8_t ltk[BLE_GAP_SEC_KEY_LEN]; /**< Long Term Key. */ -+ uint8_t lesc : 1; /**< Key generated using LE Secure Connections. */ -+ uint8_t auth : 1; /**< Authenticated Key. */ -+ uint8_t ltk_len : 6; /**< LTK length in octets. */ -+} ble_gap_enc_info_t; -+ -+ -+/**@brief GAP Master Identification. */ -+typedef struct -+{ -+ uint16_t ediv; /**< Encrypted Diversifier. */ -+ uint8_t rand[BLE_GAP_SEC_RAND_LEN]; /**< Random Number. */ -+} ble_gap_master_id_t; -+ -+ -+/**@brief GAP Signing Information. */ -+typedef struct -+{ -+ uint8_t csrk[BLE_GAP_SEC_KEY_LEN]; /**< Connection Signature Resolving Key. */ -+} ble_gap_sign_info_t; -+ -+ -+/**@brief GAP LE Secure Connections P-256 Public Key. */ -+typedef struct -+{ -+ uint8_t pk[BLE_GAP_LESC_P256_PK_LEN]; /**< LE Secure Connections Elliptic Curve Diffie-Hellman P-256 Public Key. Stored in the standard SMP protocol format: {X,Y} both in little-endian. */ -+} ble_gap_lesc_p256_pk_t; -+ -+ -+/**@brief GAP LE Secure Connections DHKey. */ -+typedef struct -+{ -+ uint8_t key[BLE_GAP_LESC_DHKEY_LEN]; /**< LE Secure Connections Elliptic Curve Diffie-Hellman Key. Stored in little-endian. */ -+} ble_gap_lesc_dhkey_t; -+ -+ -+/**@brief GAP LE Secure Connections OOB data. */ -+typedef struct -+{ -+ ble_gap_addr_t addr; /**< Bluetooth address of the device. */ -+ uint8_t r[BLE_GAP_SEC_KEY_LEN]; /**< Random Number. */ -+ uint8_t c[BLE_GAP_SEC_KEY_LEN]; /**< Confirm Value. */ -+} ble_gap_lesc_oob_data_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_CONNECTED. */ -+typedef struct -+{ -+ ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 -+ and the address is the device's identity address. */ -+ uint8_t role; /**< BLE role for this connection, see @ref BLE_GAP_ROLES */ -+ ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ -+} ble_gap_evt_connected_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_DISCONNECTED. */ -+typedef struct -+{ -+ uint8_t reason; /**< HCI error code, see @ref BLE_HCI_STATUS_CODES. */ -+} ble_gap_evt_disconnected_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_CONN_PARAM_UPDATE. */ -+typedef struct -+{ -+ ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ -+} ble_gap_evt_conn_param_update_t; -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_PHY_UPDATE_REQUEST. */ -+typedef struct -+{ -+ ble_gap_phys_t peer_preferred_phys; /**< The PHYs the peer prefers to use. */ -+} ble_gap_evt_phy_update_request_t; -+ -+/**@brief Event Structure for @ref BLE_GAP_EVT_PHY_UPDATE. */ -+typedef struct -+{ -+ uint8_t status; /**< Status of the procedure, see @ref BLE_HCI_STATUS_CODES.*/ -+ uint8_t tx_phy; /**< TX PHY for this connection, see @ref BLE_GAP_PHYS. */ -+ uint8_t rx_phy; /**< RX PHY for this connection, see @ref BLE_GAP_PHYS. */ -+} ble_gap_evt_phy_update_t; -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST. */ -+typedef struct -+{ -+ ble_gap_sec_params_t peer_params; /**< Initiator Security Parameters. */ -+} ble_gap_evt_sec_params_request_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_SEC_INFO_REQUEST. */ -+typedef struct -+{ -+ ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ -+ ble_gap_master_id_t master_id; /**< Master Identification for LTK lookup. */ -+ uint8_t enc_info : 1; /**< If 1, Encryption Information required. */ -+ uint8_t id_info : 1; /**< If 1, Identity Information required. */ -+ uint8_t sign_info : 1; /**< If 1, Signing Information required. */ -+} ble_gap_evt_sec_info_request_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_PASSKEY_DISPLAY. */ -+typedef struct -+{ -+ uint8_t passkey[BLE_GAP_PASSKEY_LEN]; /**< 6-digit passkey in ASCII ('0'-'9' digits only). */ -+ uint8_t match_request : 1; /**< If 1 requires the application to report the match using @ref sd_ble_gap_auth_key_reply -+ with either @ref BLE_GAP_AUTH_KEY_TYPE_NONE if there is no match or -+ @ref BLE_GAP_AUTH_KEY_TYPE_PASSKEY if there is a match. */ -+} ble_gap_evt_passkey_display_t; -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_KEY_PRESSED. */ -+typedef struct -+{ -+ uint8_t kp_not; /**< Keypress notification type, see @ref BLE_GAP_KP_NOT_TYPES. */ -+} ble_gap_evt_key_pressed_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_AUTH_KEY_REQUEST. */ -+typedef struct -+{ -+ uint8_t key_type; /**< See @ref BLE_GAP_AUTH_KEY_TYPES. */ -+} ble_gap_evt_auth_key_request_t; -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST. */ -+typedef struct -+{ -+ ble_gap_lesc_p256_pk_t *p_pk_peer; /**< LE Secure Connections remote P-256 Public Key. This will point to the application-supplied memory -+ inside the keyset during the call to @ref sd_ble_gap_sec_params_reply. */ -+ uint8_t oobd_req :1; /**< LESC OOB data required. A call to @ref sd_ble_gap_lesc_oob_data_set is required to complete the procedure. */ -+} ble_gap_evt_lesc_dhkey_request_t; -+ -+ -+/**@brief Security levels supported. -+ * @note See Bluetooth Specification Version 4.2 Volume 3, Part C, Chapter 10, Section 10.2.1. -+*/ -+typedef struct -+{ -+ uint8_t lv1 : 1; /**< If 1: Level 1 is supported. */ -+ uint8_t lv2 : 1; /**< If 1: Level 2 is supported. */ -+ uint8_t lv3 : 1; /**< If 1: Level 3 is supported. */ -+ uint8_t lv4 : 1; /**< If 1: Level 4 is supported. */ -+} ble_gap_sec_levels_t; -+ -+ -+/**@brief Encryption Key. */ -+typedef struct -+{ -+ ble_gap_enc_info_t enc_info; /**< Encryption Information. */ -+ ble_gap_master_id_t master_id; /**< Master Identification. */ -+} ble_gap_enc_key_t; -+ -+ -+/**@brief Identity Key. */ -+typedef struct -+{ -+ ble_gap_irk_t id_info; /**< Identity Resolving Key. */ -+ ble_gap_addr_t id_addr_info; /**< Identity Address. */ -+} ble_gap_id_key_t; -+ -+ -+/**@brief Security Keys. */ -+typedef struct -+{ -+ ble_gap_enc_key_t *p_enc_key; /**< Encryption Key, or NULL. */ -+ ble_gap_id_key_t *p_id_key; /**< Identity Key, or NULL. */ -+ ble_gap_sign_info_t *p_sign_key; /**< Signing Key, or NULL. */ -+ ble_gap_lesc_p256_pk_t *p_pk; /**< LE Secure Connections P-256 Public Key. When in debug mode the application must use the value defined -+ in the Core Bluetooth Specification v4.2 Vol.3, Part H, Section 2.3.5.6.1 */ -+} ble_gap_sec_keys_t; -+ -+ -+/**@brief Security key set for both local and peer keys. */ -+typedef struct -+{ -+ ble_gap_sec_keys_t keys_own; /**< Keys distributed by the local device. For LE Secure Connections the encryption key will be generated locally and will always be stored if bonding. */ -+ ble_gap_sec_keys_t keys_peer; /**< Keys distributed by the remote device. For LE Secure Connections, p_enc_key must always be NULL. */ -+} ble_gap_sec_keyset_t; -+ -+ -+/**@brief Data Length Update Procedure parameters. */ -+typedef struct -+{ -+ uint16_t max_tx_octets; /**< Maximum number of payload octets that a Controller supports for transmission of a single Link Layer Data Channel PDU. */ -+ uint16_t max_rx_octets; /**< Maximum number of payload octets that a Controller supports for reception of a single Link Layer Data Channel PDU. */ -+ uint16_t max_tx_time_us; /**< Maximum time, in microseconds, that a Controller supports for transmission of a single Link Layer Data Channel PDU. */ -+ uint16_t max_rx_time_us; /**< Maximum time, in microseconds, that a Controller supports for reception of a single Link Layer Data Channel PDU. */ -+} ble_gap_data_length_params_t; -+ -+ -+/**@brief Data Length Update Procedure local limitation. */ -+typedef struct -+{ -+ uint16_t tx_payload_limited_octets; /**< If > 0, the requested TX packet length is too long by this many octets. */ -+ uint16_t rx_payload_limited_octets; /**< If > 0, the requested RX packet length is too long by this many octets. */ -+ uint16_t tx_rx_time_limited_us; /**< If > 0, the requested combination of TX and RX packet lengths is too long by this many microseconds. */ -+} ble_gap_data_length_limitation_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_AUTH_STATUS. */ -+typedef struct -+{ -+ uint8_t auth_status; /**< Authentication status, see @ref BLE_GAP_SEC_STATUS. */ -+ uint8_t error_src : 2; /**< On error, source that caused the failure, see @ref BLE_GAP_SEC_STATUS_SOURCES. */ -+ uint8_t bonded : 1; /**< Procedure resulted in a bond. */ -+ uint8_t lesc : 1; /**< Procedure resulted in a LE Secure Connection. */ -+ ble_gap_sec_levels_t sm1_levels; /**< Levels supported in Security Mode 1. */ -+ ble_gap_sec_levels_t sm2_levels; /**< Levels supported in Security Mode 2. */ -+ ble_gap_sec_kdist_t kdist_own; /**< Bitmap stating which keys were exchanged (distributed) by the local device. If bonding with LE Secure Connections, the enc bit will be always set. */ -+ ble_gap_sec_kdist_t kdist_peer; /**< Bitmap stating which keys were exchanged (distributed) by the remote device. If bonding with LE Secure Connections, the enc bit will never be set. */ -+} ble_gap_evt_auth_status_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_CONN_SEC_UPDATE. */ -+typedef struct -+{ -+ ble_gap_conn_sec_t conn_sec; /**< Connection security level. */ -+} ble_gap_evt_conn_sec_update_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_TIMEOUT. */ -+typedef struct -+{ -+ uint8_t src; /**< Source of timeout event, see @ref BLE_GAP_TIMEOUT_SOURCES. */ -+} ble_gap_evt_timeout_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_RSSI_CHANGED. */ -+typedef struct -+{ -+ int8_t rssi; /**< Received Signal Strength Indication in dBm. */ -+} ble_gap_evt_rssi_changed_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_ADV_REPORT. */ -+typedef struct -+{ -+ ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 -+ and the address is the device's identity address. */ -+ ble_gap_addr_t direct_addr; /**< Set when the scanner is unable to resolve the private resolvable address of the initiator -+ field of a directed advertisement packet and the scanner has been enabled to report this in @ref ble_gap_scan_params_t::adv_dir_report. */ -+ int8_t rssi; /**< Received Signal Strength Indication in dBm. */ -+ uint8_t scan_rsp : 1; /**< If 1, the report corresponds to a scan response and the type field may be ignored. */ -+ uint8_t type : 2; /**< See @ref BLE_GAP_ADV_TYPES. Only valid if the scan_rsp field is 0. */ -+ uint8_t dlen : 5; /**< Advertising or scan response data length. */ -+ uint8_t data[BLE_GAP_ADV_MAX_SIZE]; /**< Advertising or scan response data. */ -+} ble_gap_evt_adv_report_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_SEC_REQUEST. */ -+typedef struct -+{ -+ uint8_t bond : 1; /**< Perform bonding. */ -+ uint8_t mitm : 1; /**< Man In The Middle protection requested. */ -+ uint8_t lesc : 1; /**< LE Secure Connections requested. */ -+ uint8_t keypress : 1; /**< Generation of keypress notifications requested. */ -+} ble_gap_evt_sec_request_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST. */ -+typedef struct -+{ -+ ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ -+} ble_gap_evt_conn_param_update_request_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_SCAN_REQ_REPORT. */ -+typedef struct -+{ -+ int8_t rssi; /**< Received Signal Strength Indication in dBm. */ -+ ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 -+ and the address is the device's identity address. */ -+} ble_gap_evt_scan_req_report_t; -+ -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST. */ -+typedef struct -+{ -+ ble_gap_data_length_params_t peer_params; /**< Peer data length parameters. */ -+} ble_gap_evt_data_length_update_request_t; -+ -+/**@brief Event structure for @ref BLE_GAP_EVT_DATA_LENGTH_UPDATE. */ -+typedef struct -+{ -+ ble_gap_data_length_params_t effective_params; /**< The effective data length parameters. */ -+} ble_gap_evt_data_length_update_t; -+ -+ -+/**@brief GAP event structure. */ -+typedef struct -+{ -+ uint16_t conn_handle; /**< Connection Handle on which event occurred. */ -+ union /**< union alternative identified by evt_id in enclosing struct. */ -+ { -+ ble_gap_evt_connected_t connected; /**< Connected Event Parameters. */ -+ ble_gap_evt_disconnected_t disconnected; /**< Disconnected Event Parameters. */ -+ ble_gap_evt_conn_param_update_t conn_param_update; /**< Connection Parameter Update Parameters. */ -+ ble_gap_evt_sec_params_request_t sec_params_request; /**< Security Parameters Request Event Parameters. */ -+ ble_gap_evt_sec_info_request_t sec_info_request; /**< Security Information Request Event Parameters. */ -+ ble_gap_evt_passkey_display_t passkey_display; /**< Passkey Display Event Parameters. */ -+ ble_gap_evt_key_pressed_t key_pressed; /**< Key Pressed Event Parameters. */ -+ ble_gap_evt_auth_key_request_t auth_key_request; /**< Authentication Key Request Event Parameters. */ -+ ble_gap_evt_lesc_dhkey_request_t lesc_dhkey_request; /**< LE Secure Connections DHKey calculation request. */ -+ ble_gap_evt_auth_status_t auth_status; /**< Authentication Status Event Parameters. */ -+ ble_gap_evt_conn_sec_update_t conn_sec_update; /**< Connection Security Update Event Parameters. */ -+ ble_gap_evt_timeout_t timeout; /**< Timeout Event Parameters. */ -+ ble_gap_evt_rssi_changed_t rssi_changed; /**< RSSI Event Parameters. */ -+ ble_gap_evt_adv_report_t adv_report; /**< Advertising Report Event Parameters. */ -+ ble_gap_evt_sec_request_t sec_request; /**< Security Request Event Parameters. */ -+ ble_gap_evt_conn_param_update_request_t conn_param_update_request; /**< Connection Parameter Update Parameters. */ -+ ble_gap_evt_scan_req_report_t scan_req_report; /**< Scan Request Report Parameters. */ -+ ble_gap_evt_phy_update_request_t phy_update_request; /**< PHY Update Request Event Parameters. */ -+ ble_gap_evt_phy_update_t phy_update; /**< PHY Update Parameters. */ -+ ble_gap_evt_data_length_update_request_t data_length_update_request; /**< Data Length Update Request Event Parameters. */ -+ ble_gap_evt_data_length_update_t data_length_update; /**< Data Length Update Event Parameters. */ -+ } params; /**< Event Parameters. */ -+} ble_gap_evt_t; -+ -+ -+/** -+ * @brief BLE GAP connection configuration parameters, set with @ref sd_ble_cfg_set. -+ * -+ * @retval ::NRF_ERROR_CONN_COUNT The connection count for the connection configurations is zero. -+ * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: -+ * - The sum of conn_count for all connection configurations combined exceeds UINT8_MAX. -+ * - The event length is smaller than @ref BLE_GAP_EVENT_LENGTH_MIN. -+ */ -+typedef struct -+{ -+ uint8_t conn_count; /**< The number of concurrent connections the application can create with this configuration. -+ The default and minimum value is @ref BLE_GAP_CONN_COUNT_DEFAULT. */ -+ uint16_t event_length; /**< The time set aside for this connection on every connection interval in 1.25 ms units. -+ The default value is @ref BLE_GAP_EVENT_LENGTH_DEFAULT, the minimum value is @ref BLE_GAP_EVENT_LENGTH_MIN. -+ The event length and the connection interval are the primary parameters -+ for setting the throughput of a connection. -+ See the SoftDevice Specification for details on throughput. */ -+} ble_gap_conn_cfg_t; -+ -+ -+/** -+ * @brief Configuration of maximum concurrent connections in the different connected roles, set with -+ * @ref sd_ble_cfg_set. -+ * -+ * @retval ::NRF_ERROR_CONN_COUNT The sum of periph_role_count and central_role_count is too -+ * large. The maximum supported sum of concurrent connections is -+ * @ref BLE_GAP_ROLE_COUNT_COMBINED_MAX. -+ * @retval ::NRF_ERROR_INVALID_PARAM central_sec_count is larger than central_role_count. -+ */ -+typedef struct -+{ -+ uint8_t periph_role_count; /**< Maximum number of connections concurrently acting as a peripheral. Default value is @ref BLE_GAP_ROLE_COUNT_PERIPH_DEFAULT. */ -+ uint8_t central_role_count; /**< Maximum number of connections concurrently acting as a central. Default value is @ref BLE_GAP_ROLE_COUNT_CENTRAL_DEFAULT. */ -+ uint8_t central_sec_count; /**< Number of SMP instances shared between all connections acting as a central. Default value is @ref BLE_GAP_ROLE_COUNT_CENTRAL_SEC_DEFAULT. */ -+} ble_gap_cfg_role_count_t; -+ -+ -+/** -+ * @brief Device name and its properties, set with @ref sd_ble_cfg_set. -+ * -+ * @note If the device name is not configured, the default device name will be -+ * @ref BLE_GAP_DEVNAME_DEFAULT, the maximum device name length will be -+ * @ref BLE_GAP_DEVNAME_DEFAULT_LEN, vloc will be set to @ref BLE_GATTS_VLOC_STACK and the device name -+ * will have no write access. -+ * -+ * @note If @ref max_len is more than @ref BLE_GAP_DEVNAME_DEFAULT_LEN and vloc is set to @ref BLE_GATTS_VLOC_STACK, -+ * the attribute table size must be increased to have room for the longer device name (see -+ * @ref sd_ble_cfg_set and @ref ble_gatts_cfg_attr_tab_size_t). -+ * -+ * @note If vloc is @ref BLE_GATTS_VLOC_STACK : -+ * - p_value must point to non-volatile memory (flash) or be NULL. -+ * - If p_value is NULL, the device name will initially be empty. -+ * -+ * @note If vloc is @ref BLE_GATTS_VLOC_USER : -+ * - p_value cannot be NULL. -+ * - If the device name is writable, p_value must point to volatile memory (RAM). -+ * -+ * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: -+ * - Invalid device name location (vloc). -+ * - Invalid device name security mode. -+ * @retval ::NRF_ERROR_INVALID_LENGTH One or more of the following is true: -+ * - The device name length is invalid (must be between 0 and @ref BLE_GAP_DEVNAME_MAX_LEN). -+ * - The device name length is too long for the given Attribute Table. -+ * @retval ::NRF_ERROR_NOT_SUPPORTED Device name security mode is not supported. -+ */ -+typedef struct -+{ -+ ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ -+ uint8_t vloc:2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ -+ uint8_t *p_value; /**< Pointer to where the value (device name) is stored or will be stored. */ -+ uint16_t current_len; /**< Current length in bytes of the memory pointed to by p_value.*/ -+ uint16_t max_len; /**< Maximum length in bytes of the memory pointed to by p_value.*/ -+} ble_gap_cfg_device_name_t; -+ -+ -+/**@brief Configuration structure for GAP configurations. */ -+typedef union -+{ -+ ble_gap_cfg_role_count_t role_count_cfg; /**< Role count configuration, cfg_id is @ref BLE_GAP_CFG_ROLE_COUNT. */ -+ ble_gap_cfg_device_name_t device_name_cfg; /**< Device name configuration, cfg_id is @ref BLE_GAP_CFG_DEVICE_NAME. */ -+} ble_gap_cfg_t; -+ -+ -+/**@brief Channel Map option. -+ * Used with @ref sd_ble_opt_get to get the current channel map -+ * or @ref sd_ble_opt_set to set a new channel map. When setting the -+ * channel map, it applies to all current and future connections. When getting the -+ * current channel map, it applies to a single connection and the connection handle -+ * must be supplied. -+ * -+ * @note Setting the channel map may take some time, depending on connection parameters. -+ * The time taken may be different for each connection and the get operation will -+ * return the previous channel map until the new one has taken effect. -+ * -+ * @note After setting the channel map, by spec it can not be set again until at least 1 s has passed. -+ * See Bluetooth Specification Version 4.1 Volume 2, Part E, Section 7.3.46. -+ * -+ * @retval ::NRF_SUCCESS Get or set successful. -+ * @retval ::NRF_ERROR_BUSY Channel map was set again before enough time had passed. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied for get. -+ * @retval ::NRF_ERROR_NOT_SUPPORTED Returned by sd_ble_opt_set in peripheral-only SoftDevices. -+ * -+ */ -+typedef struct -+{ -+ uint16_t conn_handle; /**< Connection Handle (only applicable for get) */ -+ uint8_t ch_map[5]; /**< Channel Map (37-bit). */ -+} ble_gap_opt_ch_map_t; -+ -+ -+/**@brief Local connection latency option. -+ * -+ * Local connection latency is a feature which enables the slave to improve -+ * current consumption by ignoring the slave latency set by the peer. The -+ * local connection latency can only be set to a multiple of the slave latency, -+ * and cannot be longer than half of the supervision timeout. -+ * -+ * Used with @ref sd_ble_opt_set to set the local connection latency. The -+ * @ref sd_ble_opt_get is not supported for this option, but the actual -+ * local connection latency (unless set to NULL) is set as a return parameter -+ * when setting the option. -+ * -+ * @note The latency set will be truncated down to the closest slave latency event -+ * multiple, or the nearest multiple before half of the supervision timeout. -+ * -+ * @note The local connection latency is disabled by default, and needs to be enabled for new -+ * connections and whenever the connection is updated. -+ * -+ * @retval ::NRF_SUCCESS Set successfully. -+ * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. -+ */ -+typedef struct -+{ -+ uint16_t conn_handle; /**< Connection Handle */ -+ uint16_t requested_latency; /**< Requested local connection latency. */ -+ uint16_t * p_actual_latency; /**< Pointer to storage for the actual local connection latency (can be set to NULL to skip return value). */ -+} ble_gap_opt_local_conn_latency_t; -+ -+/**@brief Disable slave latency -+ * -+ * Used with @ref sd_ble_opt_set to temporarily disable slave latency of a peripheral connection (see @ref ble_gap_conn_params_t::slave_latency). And to re-enable it again. -+ * When disabled, the peripheral will ignore the slave_latency set by the central. -+ * -+ * @note Shall only be called on peripheral links. -+ * -+ * @retval ::NRF_SUCCESS Set successfully. -+ * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. -+ */ -+typedef struct -+{ -+ uint16_t conn_handle; /**< Connection Handle */ -+ uint8_t disable : 1; /**< Set to 1 to disable slave latency. Set to 0 enable it again.*/ -+} ble_gap_opt_slave_latency_disable_t; -+ -+/**@brief Passkey Option. -+ * -+ * Structure containing the passkey to be used during pairing. This can be used with @ref -+ * sd_ble_opt_set to make the SoftDevice use a preprogrammed passkey for authentication -+ * instead of generating a random one. -+ * -+ * @note Repeated pairing attempts using the same preprogrammed passkey makes pairing vulnerable to MITM attacks. -+ * -+ * @note @ref sd_ble_opt_get is not supported for this option. -+ * -+ */ -+typedef struct -+{ -+ uint8_t const * p_passkey; /**< Pointer to 6-digit ASCII string (digit 0..9 only, no NULL termination) passkey to be used during pairing. If this is NULL, the SoftDevice will generate a random passkey if required.*/ -+} ble_gap_opt_passkey_t; -+ -+ -+/**@brief Scan request report option. -+ * -+ * This can be used with @ref sd_ble_opt_set to make the SoftDevice send -+ * @ref BLE_GAP_EVT_SCAN_REQ_REPORT events. -+ * -+ * @note Due to the limited space reserved for scan request report events, -+ * not all received scan requests will be reported. -+ * -+ * @note If whitelisting is used, only whitelisted requests are reported. -+ * -+ * @retval ::NRF_SUCCESS Set successfully. -+ * @retval ::NRF_ERROR_INVALID_STATE When advertising is ongoing while the option is set. -+ */ -+typedef struct -+{ -+ uint8_t enable : 1; /**< Enable scan request reports. */ -+} ble_gap_opt_scan_req_report_t; -+ -+ -+/**@brief Compatibility mode 1 option. -+ * -+ * This can be used with @ref sd_ble_opt_set to enable and disable -+ * compatibility mode 1. Compatibility mode 1 is disabled by default. -+ * -+ * @note Compatibility mode 1 enables interoperability with devices that do not support a value of -+ * 0 for the WinOffset parameter in the Link Layer CONNECT_IND packet. This applies to a -+ * limited set of legacy peripheral devices from another vendor. Enabling this compatibility -+ * mode will only have an effect if the local device will act as a central device and -+ * initiate a connection to a peripheral device. In that case it may lead to the connection -+ * creation taking up to one connection interval longer to complete for all connections. -+ * -+ * @retval ::NRF_SUCCESS Set successfully. -+ * @retval ::NRF_ERROR_INVALID_STATE When connection creation is ongoing while mode 1 is set. -+ */ -+typedef struct -+{ -+ uint8_t enable : 1; /**< Enable compatibility mode 1.*/ -+} ble_gap_opt_compat_mode_1_t; -+ -+ -+/**@brief Authenticated payload timeout option. -+ * -+ * This can be used with @ref sd_ble_opt_set to change the Authenticated payload timeout to a value other -+ * than the default of @ref BLE_GAP_AUTH_PAYLOAD_TIMEOUT_MAX. -+ * -+ * @note The authenticated payload timeout event ::BLE_GAP_TIMEOUT_SRC_AUTH_PAYLOAD will be generated -+ * if auth_payload_timeout time has elapsed without receiving a packet with a valid MIC on an encrypted -+ * link. -+ * -+ * @note The LE ping procedure will be initiated before the timer expires to give the peer a chance -+ * to reset the timer. In addition the stack will try to prioritize running of LE ping over other -+ * activities to increase chances of finishing LE ping before timer expires. To avoid side-effects -+ * on other activities, it is recommended to use high timeout values. -+ * Recommended timeout > 2*(connInterval * (6 + connSlaveLatency)). -+ * -+ * @retval ::NRF_SUCCESS Set successfully. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. auth_payload_timeout was outside of allowed range. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. -+ */ -+typedef struct -+{ -+ uint16_t conn_handle; /**< Connection Handle */ -+ uint16_t auth_payload_timeout; /**< Requested timeout in 10 ms unit, see @ref BLE_GAP_AUTH_PAYLOAD_TIMEOUT. */ -+} ble_gap_opt_auth_payload_timeout_t; -+ -+ -+/**@brief Option structure for GAP options. */ -+typedef union -+{ -+ ble_gap_opt_ch_map_t ch_map; /**< Parameters for the Channel Map option. */ -+ ble_gap_opt_local_conn_latency_t local_conn_latency; /**< Parameters for the Local connection latency option */ -+ ble_gap_opt_passkey_t passkey; /**< Parameters for the Passkey option.*/ -+ ble_gap_opt_scan_req_report_t scan_req_report; /**< Parameters for the scan request report option.*/ -+ ble_gap_opt_compat_mode_1_t compat_mode_1; /**< Parameters for the compatibility mode 1 option.*/ -+ ble_gap_opt_auth_payload_timeout_t auth_payload_timeout; /**< Parameters for the authenticated payload timeout option.*/ -+ ble_gap_opt_slave_latency_disable_t slave_latency_disable; /**< Parameters for the Disable slave latency option */ -+} ble_gap_opt_t; -+/**@} */ -+ -+ -+/**@addtogroup BLE_GAP_FUNCTIONS Functions -+ * @{ */ -+ -+/**@brief Set the local Bluetooth identity address. -+ * -+ * The local Bluetooth identity address is the address that identifies this device to other peers. -+ * The address type must be either @ref BLE_GAP_ADDR_TYPE_PUBLIC or @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC. -+ * -+ * @note The identity address cannot be changed while advertising, scanning or creating a connection. -+ * -+ * @note This address will be distributed to the peer during bonding. -+ * If the address changes, the address stored in the peer device will not be valid and the ability to -+ * reconnect using the old address will be lost. -+ * -+ * @note By default the SoftDevice will set an address of type @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC upon being -+ * enabled. The address is a random number populated during the IC manufacturing process and remains unchanged -+ * for the lifetime of each IC. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_ADV_MSC} -+ * @endmscs -+ * -+ * @param[in] p_addr Pointer to address structure. -+ * -+ * @retval ::NRF_SUCCESS Address successfully set. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address. -+ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. -+ * @retval ::NRF_ERROR_INVALID_STATE The identity address cannot be changed while advertising, -+ * scanning or creating a connection. -+ */ -+SVCALL(SD_BLE_GAP_ADDR_SET, uint32_t, sd_ble_gap_addr_set(ble_gap_addr_t const *p_addr)); -+ -+ -+/**@brief Get local Bluetooth identity address. -+ * -+ * @note This will always return the identity address irrespective of the privacy settings, -+ * i.e. the address type will always be either @ref BLE_GAP_ADDR_TYPE_PUBLIC or @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC. -+ * -+ * @param[out] p_addr Pointer to address structure to be filled in. -+ * -+ * @retval ::NRF_SUCCESS Address successfully retrieved. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid or NULL pointer supplied. -+ */ -+SVCALL(SD_BLE_GAP_ADDR_GET, uint32_t, sd_ble_gap_addr_get(ble_gap_addr_t *p_addr)); -+ -+ -+/**@brief Set the active whitelist in the SoftDevice. -+ * -+ * @note Only one whitelist can be used at a time and the whitelist is shared between the BLE roles. -+ * The whitelist cannot be set if a BLE role is using the whitelist. -+ * -+ * @note If an address is resolved using the information in the device identity list, then the whitelist -+ * filter policy applies to the peer identity address and not the resolvable address sent on air. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} -+ * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_PRIVATE_SCAN_MSC} -+ * @endmscs -+ * -+ * @param[in] pp_wl_addrs Pointer to a whitelist of peer addresses, if NULL the whitelist will be cleared. -+ * @param[in] len Length of the whitelist, maximum @ref BLE_GAP_WHITELIST_ADDR_MAX_COUNT. -+ * -+ * @retval ::NRF_SUCCESS The whitelist is successfully set/cleared. -+ * @retval ::NRF_ERROR_INVALID_ADDR The whitelist (or one of its entries) provided is invalid. -+ * @retval ::BLE_ERROR_GAP_WHITELIST_IN_USE The whitelist is in use by a BLE role and cannot be set or cleared. -+ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. -+ * @retval ::NRF_ERROR_DATA_SIZE The given whitelist size is invalid (zero or too large); this can only return when -+ * pp_wl_addrs is not NULL. -+ */ -+SVCALL(SD_BLE_GAP_WHITELIST_SET, uint32_t, sd_ble_gap_whitelist_set(ble_gap_addr_t const * const * pp_wl_addrs, uint8_t len)); -+ -+ -+/**@brief Set device identity list. -+ * -+ * @note Only one device identity list can be used at a time and the list is shared between the BLE roles. -+ * The device identity list cannot be set if a BLE role is using the list. -+ * -+ * @param[in] pp_id_keys Pointer to an array of peer identity addresses and peer IRKs, if NULL the device identity list will be cleared. -+ * @param[in] pp_local_irks Pointer to an array of local IRKs. Each entry in the array maps to the entry in pp_id_keys at the same index. -+ * To fill in the list with the currently set device IRK for all peers, set to NULL. -+ * @param[in] len Length of the device identity list, maximum @ref BLE_GAP_DEVICE_IDENTITIES_MAX_COUNT. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_PRIVACY_ADV_MSC} -+ * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_MSC} -+ * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_PRIVATE_SCAN_MSC} -+ * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_CONN_PRIV_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_CONN_PRIV_MSC} -+ * @endmscs -+ * -+ * @retval ::NRF_SUCCESS The device identity list successfully set/cleared. -+ * @retval ::NRF_ERROR_INVALID_ADDR The device identity list (or one of its entries) provided is invalid. -+ * This code may be returned if the local IRK list also has an invalid entry. -+ * @retval ::BLE_ERROR_GAP_DEVICE_IDENTITIES_IN_USE The device identity list is in use and cannot be set or cleared. -+ * @retval ::BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE The device identity list contains multiple entries with the same identity address. -+ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. -+ * @retval ::NRF_ERROR_DATA_SIZE The given device identity list size invalid (zero or too large); this can -+ * only return when pp_id_keys is not NULL. -+ */ -+SVCALL(SD_BLE_GAP_DEVICE_IDENTITIES_SET, uint32_t, sd_ble_gap_device_identities_set(ble_gap_id_key_t const * const * pp_id_keys, ble_gap_irk_t const * const * pp_local_irks, uint8_t len)); -+ -+ -+/**@brief Set privacy settings. -+ * -+ * @note Privacy settings cannot be changed while advertising, scanning or creating a connection. -+ * -+ * @param[in] p_privacy_params Privacy settings. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_PRIVACY_ADV_MSC} -+ * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_MSC} -+ * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} -+ * @endmscs -+ * -+ * @retval ::NRF_SUCCESS Set successfully. -+ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. -+ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. -+ * @retval ::NRF_ERROR_INVALID_ADDR The pointer to privacy settings is NULL or invalid. -+ * Otherwise, the p_device_irk pointer in privacy parameter is an invalid pointer. -+ * @retval ::NRF_ERROR_INVALID_PARAM Out of range parameters are provided. -+ * @retval ::NRF_ERROR_INVALID_STATE Privacy settings cannot be changed while advertising, scanning -+ * or creating a connection. -+ */ -+SVCALL(SD_BLE_GAP_PRIVACY_SET, uint32_t, sd_ble_gap_privacy_set(ble_gap_privacy_params_t const *p_privacy_params)); -+ -+ -+/**@brief Get privacy settings. -+ * -+ * @note ::ble_gap_privacy_params_t::p_device_irk must be initialized to NULL or a valid address before this function is called. -+ * If it is initialized to a valid address, the address pointed to will contain the current device IRK on return. -+ * -+ * @param[in,out] p_privacy_params Privacy settings. -+ * -+ * @retval ::NRF_SUCCESS Privacy settings read. -+ * @retval ::NRF_ERROR_INVALID_ADDR The pointer given for returning the privacy settings may be NULL or invalid. -+ * Otherwise, the p_device_irk pointer in privacy parameter is an invalid pointer. -+ */ -+SVCALL(SD_BLE_GAP_PRIVACY_GET, uint32_t, sd_ble_gap_privacy_get(ble_gap_privacy_params_t *p_privacy_params)); -+ -+ -+/**@brief Set, clear or update advertising and scan response data. -+ * -+ * @note The format of the advertising data will be checked by this call to ensure interoperability. -+ * Limitations imposed by this API call to the data provided include having a flags data type in the scan response data and -+ * duplicating the local name in the advertising data and scan response data. -+ * -+ * @note To clear the advertising data and set it to a 0-length packet, simply provide a valid pointer (p_data/p_sr_data) with its corresponding -+ * length (dlen/srdlen) set to 0. -+ * -+ * @note The call will fail if p_data and p_sr_data are both NULL since this would have no effect. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_ADV_MSC} -+ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} -+ * @endmscs -+ * -+ * @param[in] p_data Raw data to be placed in advertising packet. If NULL, no changes are made to the current advertising packet data. -+ * @param[in] dlen Data length for p_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_data is NULL, can be 0 if p_data is not NULL. -+ * @param[in] p_sr_data Raw data to be placed in scan response packet. If NULL, no changes are made to the current scan response packet data. -+ * @param[in] srdlen Data length for p_sr_data. Max size: @ref BLE_GAP_ADV_MAX_SIZE octets. Should be 0 if p_sr_data is NULL, can be 0 if p_data is not NULL. -+ * -+ * @retval ::NRF_SUCCESS Advertising data successfully updated or cleared. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, both p_data and p_sr_data cannot be NULL. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_FLAGS Invalid combination of advertising flags supplied. -+ * @retval ::NRF_ERROR_INVALID_DATA Invalid data type(s) supplied, check the advertising data format specification. -+ * @retval ::NRF_ERROR_INVALID_LENGTH Invalid data length(s) supplied. -+ * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported data type. -+ * @retval ::BLE_ERROR_GAP_UUID_LIST_MISMATCH Invalid UUID list supplied. -+ */ -+SVCALL(SD_BLE_GAP_ADV_DATA_SET, uint32_t, sd_ble_gap_adv_data_set(uint8_t const *p_data, uint8_t dlen, uint8_t const *p_sr_data, uint8_t srdlen)); -+ -+ -+/**@brief Start advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). -+ * -+ * @note Only one advertiser may be active at any time. -+ * -+ * @events -+ * @event{@ref BLE_GAP_EVT_CONNECTED, Generated after connection has been established through connectable advertising.} -+ * @event{@ref BLE_GAP_EVT_TIMEOUT, Advertisement has timed out.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_ADV_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_CONN_PRIV_MSC} -+ * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} -+ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} -+ * @endmscs -+ * -+ * @param[in] p_adv_params Pointer to advertising parameters structure. -+ * @param[in] conn_cfg_tag Tag identifying a configuration set by @ref sd_ble_cfg_set or -+ * @ref BLE_CONN_CFG_TAG_DEFAULT to use the default connection configuration. If -+ * @ref ble_gap_adv_params_t::type is @ref BLE_GAP_ADV_TYPE_ADV_NONCONN_IND, -+ * this is ignored. -+ * -+ * @retval ::NRF_SUCCESS The BLE stack has started advertising. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::NRF_ERROR_CONN_COUNT The limit of available connections has been reached; connectable advertiser cannot be started. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check the accepted ranges and limits. -+ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Bluetooth address supplied. -+ * @retval ::BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST Discoverable mode and whitelist incompatible. -+ * @retval ::NRF_ERROR_RESOURCES Not enough BLE role slots available. -+ * Stop one or more currently active roles (Central, Peripheral, Broadcaster or Observer) and try again -+ */ -+SVCALL(SD_BLE_GAP_ADV_START, uint32_t, sd_ble_gap_adv_start(ble_gap_adv_params_t const *p_adv_params, uint8_t conn_cfg_tag)); -+ -+ -+/**@brief Stop advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_ADV_MSC} -+ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} -+ * @endmscs -+ * -+ * @retval ::NRF_SUCCESS The BLE stack has stopped advertising. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation (most probably not in advertising state). -+ */ -+SVCALL(SD_BLE_GAP_ADV_STOP, uint32_t, sd_ble_gap_adv_stop(void)); -+ -+ -+ -+/**@brief Update connection parameters. -+ * -+ * @details In the central role this will initiate a Link Layer connection parameter update procedure, -+ * otherwise in the peripheral role, this will send the corresponding L2CAP request and wait for -+ * the central to perform the procedure. In both cases, and regardless of success or failure, the application -+ * will be informed of the result with a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE event. -+ * -+ * @details This function can be used as a central both to reply to a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST or to start the procedure unrequested. -+ * -+ * @events -+ * @event{@ref BLE_GAP_EVT_CONN_PARAM_UPDATE, Result of the connection parameter update procedure.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_CPU_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} -+ * @mmsc{@ref BLE_GAP_MULTILINK_CPU_MSC} -+ * @mmsc{@ref BLE_GAP_MULTILINK_CTRL_PROC_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_CPU_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] p_conn_params Pointer to desired connection parameters. If NULL is provided on a peripheral role, -+ * the parameters in the PPCP characteristic of the GAP service will be used instead. -+ * If NULL is provided on a central role and in response to a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST, the peripheral request will be rejected -+ * -+ * @retval ::NRF_SUCCESS The Connection Update procedure has been started successfully. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::NRF_ERROR_BUSY Procedure already in progress, wait for pending procedures to complete and retry. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. -+ */ -+SVCALL(SD_BLE_GAP_CONN_PARAM_UPDATE, uint32_t, sd_ble_gap_conn_param_update(uint16_t conn_handle, ble_gap_conn_params_t const *p_conn_params)); -+ -+ -+/**@brief Disconnect (GAP Link Termination). -+ * -+ * @details This call initiates the disconnection procedure, and its completion will be communicated to the application -+ * with a @ref BLE_GAP_EVT_DISCONNECTED event. -+ * -+ * @events -+ * @event{@ref BLE_GAP_EVT_DISCONNECTED, Generated when disconnection procedure is complete.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_CONN_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] hci_status_code HCI status code, see @ref BLE_HCI_STATUS_CODES (accepted values are @ref BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION and @ref BLE_HCI_CONN_INTERVAL_UNACCEPTABLE). -+ * -+ * @retval ::NRF_SUCCESS The disconnection procedure has been started successfully. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation (disconnection is already in progress). -+ */ -+SVCALL(SD_BLE_GAP_DISCONNECT, uint32_t, sd_ble_gap_disconnect(uint16_t conn_handle, uint8_t hci_status_code)); -+ -+ -+/**@brief Set the radio's transmit power. -+ * -+ * @param[in] tx_power Radio transmit power in dBm (accepted values are -40, -20, -16, -12, -8, -4, 0, 3, and 4 dBm). -+ * -+ * @retval ::NRF_SUCCESS Successfully changed the transmit power. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ */ -+SVCALL(SD_BLE_GAP_TX_POWER_SET, uint32_t, sd_ble_gap_tx_power_set(int8_t tx_power)); -+ -+ -+/**@brief Set GAP Appearance value. -+ * -+ * @param[in] appearance Appearance (16-bit), see @ref BLE_APPEARANCES. -+ * -+ * @retval ::NRF_SUCCESS Appearance value set successfully. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ */ -+SVCALL(SD_BLE_GAP_APPEARANCE_SET, uint32_t, sd_ble_gap_appearance_set(uint16_t appearance)); -+ -+ -+/**@brief Get GAP Appearance value. -+ * -+ * @param[out] p_appearance Pointer to appearance (16-bit) to be filled in, see @ref BLE_APPEARANCES. -+ * -+ * @retval ::NRF_SUCCESS Appearance value retrieved successfully. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ */ -+SVCALL(SD_BLE_GAP_APPEARANCE_GET, uint32_t, sd_ble_gap_appearance_get(uint16_t *p_appearance)); -+ -+ -+/**@brief Set GAP Peripheral Preferred Connection Parameters. -+ * -+ * @param[in] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure with the desired parameters. -+ * -+ * @retval ::NRF_SUCCESS Peripheral Preferred Connection Parameters set successfully. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ */ -+SVCALL(SD_BLE_GAP_PPCP_SET, uint32_t, sd_ble_gap_ppcp_set(ble_gap_conn_params_t const *p_conn_params)); -+ -+ -+/**@brief Get GAP Peripheral Preferred Connection Parameters. -+ * -+ * @param[out] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure where the parameters will be stored. -+ * -+ * @retval ::NRF_SUCCESS Peripheral Preferred Connection Parameters retrieved successfully. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ */ -+SVCALL(SD_BLE_GAP_PPCP_GET, uint32_t, sd_ble_gap_ppcp_get(ble_gap_conn_params_t *p_conn_params)); -+ -+ -+/**@brief Set GAP device name. -+ * -+ * @note If the device name is located in application flash memory (see @ref ble_gap_cfg_device_name_t), -+ * it cannot be changed. Then @ref NRF_ERROR_FORBIDDEN will be returned. -+ * -+ * @param[in] p_write_perm Write permissions for the Device Name characteristic, see @ref ble_gap_conn_sec_mode_t. -+ * @param[in] p_dev_name Pointer to a UTF-8 encoded, non NULL-terminated string. -+ * @param[in] len Length of the UTF-8, non NULL-terminated string pointed to by p_dev_name in octets (must be smaller or equal than @ref BLE_GAP_DEVNAME_MAX_LEN). -+ * -+ * @retval ::NRF_SUCCESS GAP device name and permissions set successfully. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. -+ * @retval ::NRF_ERROR_FORBIDDEN Device name is not writable. -+ */ -+SVCALL(SD_BLE_GAP_DEVICE_NAME_SET, uint32_t, sd_ble_gap_device_name_set(ble_gap_conn_sec_mode_t const *p_write_perm, uint8_t const *p_dev_name, uint16_t len)); -+ -+ -+/**@brief Get GAP device name. -+ * -+ * @note If the device name is longer than the size of the supplied buffer, -+ * p_len will return the complete device name length, -+ * and not the number of bytes actually returned in p_dev_name. -+ * The application may use this information to allocate a suitable buffer size. -+ * -+ * @param[out] p_dev_name Pointer to an empty buffer where the UTF-8 non NULL-terminated string will be placed. Set to NULL to obtain the complete device name length. -+ * @param[in,out] p_len Length of the buffer pointed by p_dev_name, complete device name length on output. -+ * -+ * @retval ::NRF_SUCCESS GAP device name retrieved successfully. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. -+ */ -+SVCALL(SD_BLE_GAP_DEVICE_NAME_GET, uint32_t, sd_ble_gap_device_name_get(uint8_t *p_dev_name, uint16_t *p_len)); -+ -+ -+/**@brief Initiate the GAP Authentication procedure. -+ * -+ * @details In the central role, this function will send an SMP Pairing Request (or an SMP Pairing Failed if rejected), -+ * otherwise in the peripheral role, an SMP Security Request will be sent. -+ * -+ * @events -+ * @event{Depending on the security parameters set and the packet exchanges with the peer\, the following events may be generated:} -+ * @event{@ref BLE_GAP_EVT_SEC_PARAMS_REQUEST} -+ * @event{@ref BLE_GAP_EVT_SEC_INFO_REQUEST} -+ * @event{@ref BLE_GAP_EVT_PASSKEY_DISPLAY} -+ * @event{@ref BLE_GAP_EVT_KEY_PRESSED} -+ * @event{@ref BLE_GAP_EVT_AUTH_KEY_REQUEST} -+ * @event{@ref BLE_GAP_EVT_LESC_DHKEY_REQUEST} -+ * @event{@ref BLE_GAP_EVT_CONN_SEC_UPDATE} -+ * @event{@ref BLE_GAP_EVT_AUTH_STATUS} -+ * @event{@ref BLE_GAP_EVT_TIMEOUT} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_PERIPH_SEC_REQ_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_SEC_REQ_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_PAIRING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] p_sec_params Pointer to the @ref ble_gap_sec_params_t structure with the security parameters to be used during the pairing or bonding procedure. -+ * In the peripheral role, only the bond, mitm, lesc and keypress fields of this structure are used. -+ * In the central role, this pointer may be NULL to reject a Security Request. -+ * -+ * @retval ::NRF_SUCCESS Successfully initiated authentication procedure. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::NRF_ERROR_NO_MEM The maximum number of authentication procedures that can run in parallel for the given role is reached. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ * @retval ::NRF_ERROR_NOT_SUPPORTED Setting of sign or link fields in @ref ble_gap_sec_kdist_t not supported. -+ * @retval ::NRF_ERROR_TIMEOUT A SMP timeout has occurred, and further SMP operations on this link is prohibited. -+ */ -+SVCALL(SD_BLE_GAP_AUTHENTICATE, uint32_t, sd_ble_gap_authenticate(uint16_t conn_handle, ble_gap_sec_params_t const *p_sec_params)); -+ -+ -+/**@brief Reply with GAP security parameters. -+ * -+ * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. -+ * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. -+ * -+ * @events -+ * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_PERIPH_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_CENTRAL_OOB_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_STATIC_PK_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_CONFIRM_FAIL_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_PAIRING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_PD_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_KS_TOO_SMALL_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_APP_ERROR_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_REMOTE_PAIRING_FAIL_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_TIMEOUT_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_PAIRING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] sec_status Security status, see @ref BLE_GAP_SEC_STATUS. -+ * @param[in] p_sec_params Pointer to a @ref ble_gap_sec_params_t security parameters structure. In the central role this must be set to NULL, as the parameters have -+ * already been provided during a previous call to @ref sd_ble_gap_authenticate. -+ * @param[in,out] p_sec_keyset Pointer to a @ref ble_gap_sec_keyset_t security keyset structure. Any keys generated and/or distributed as a result of the ongoing security procedure -+ * will be stored into the memory referenced by the pointers inside this structure. The keys will be stored and available to the application -+ * upon reception of a @ref BLE_GAP_EVT_AUTH_STATUS event. -+ * Note that the SoftDevice expects the application to provide memory for storing the -+ * peer's keys. So it must be ensured that the relevant pointers inside this structure are not NULL. The pointers to the local key -+ * can, however, be NULL, in which case, the local key data will not be available to the application upon reception of the -+ * @ref BLE_GAP_EVT_AUTH_STATUS event. -+ * -+ * @retval ::NRF_SUCCESS Successfully accepted security parameter from the application. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ * @retval ::NRF_ERROR_NOT_SUPPORTED Setting of sign or link fields in @ref ble_gap_sec_kdist_t not supported. -+ */ -+SVCALL(SD_BLE_GAP_SEC_PARAMS_REPLY, uint32_t, sd_ble_gap_sec_params_reply(uint16_t conn_handle, uint8_t sec_status, ble_gap_sec_params_t const *p_sec_params, ble_gap_sec_keyset_t const *p_sec_keyset)); -+ -+ -+/**@brief Reply with an authentication key. -+ * -+ * @details This function is only used to reply to a @ref BLE_GAP_EVT_AUTH_KEY_REQUEST or a @ref BLE_GAP_EVT_PASSKEY_DISPLAY, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. -+ * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. -+ * -+ * @events -+ * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_CENTRAL_OOB_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] key_type See @ref BLE_GAP_AUTH_KEY_TYPES. -+ * @param[in] p_key If key type is @ref BLE_GAP_AUTH_KEY_TYPE_NONE, then NULL. -+ * If key type is @ref BLE_GAP_AUTH_KEY_TYPE_PASSKEY, then a 6-byte ASCII string (digit 0..9 only, no NULL termination) -+ * or NULL when confirming LE Secure Connections Numeric Comparison. -+ * If key type is @ref BLE_GAP_AUTH_KEY_TYPE_OOB, then a 16-byte OOB key value in little-endian format. -+ * -+ * @retval ::NRF_SUCCESS Authentication key successfully set. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ */ -+SVCALL(SD_BLE_GAP_AUTH_KEY_REPLY, uint32_t, sd_ble_gap_auth_key_reply(uint16_t conn_handle, uint8_t key_type, uint8_t const *p_key)); -+ -+ -+/**@brief Reply with an LE Secure connections DHKey. -+ * -+ * @details This function is only used to reply to a @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. -+ * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. -+ * -+ * @events -+ * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_PAIRING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_PD_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] p_dhkey LE Secure Connections DHKey. -+ * -+ * @retval ::NRF_SUCCESS DHKey successfully set. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ */ -+SVCALL(SD_BLE_GAP_LESC_DHKEY_REPLY, uint32_t, sd_ble_gap_lesc_dhkey_reply(uint16_t conn_handle, ble_gap_lesc_dhkey_t const *p_dhkey)); -+ -+ -+/**@brief Notify the peer of a local keypress. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] kp_not See @ref BLE_GAP_KP_NOT_TYPES. -+ * -+ * @retval ::NRF_SUCCESS Keypress notification successfully queued for transmission. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either not entering a passkey or keypresses have not been enabled by both peers. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ * @retval ::NRF_ERROR_BUSY The BLE stack is busy. Retry at later time. -+ */ -+SVCALL(SD_BLE_GAP_KEYPRESS_NOTIFY, uint32_t, sd_ble_gap_keypress_notify(uint16_t conn_handle, uint8_t kp_not)); -+ -+ -+/**@brief Generate a set of OOB data to send to a peer out of band. -+ * -+ * @note The @ref ble_gap_addr_t included in the OOB data returned will be the currently active one (or, if a connection has already been established, -+ * the one used during connection setup). The application may manually overwrite it with an updated value. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. Can be @ref BLE_CONN_HANDLE_INVALID if a BLE connection has not been established yet. -+ * @param[in] p_pk_own LE Secure Connections local P-256 Public Key. -+ * @param[out] p_oobd_own The OOB data to be sent out of band to a peer. -+ * -+ * @retval ::NRF_SUCCESS OOB data successfully generated. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ */ -+SVCALL(SD_BLE_GAP_LESC_OOB_DATA_GET, uint32_t, sd_ble_gap_lesc_oob_data_get(uint16_t conn_handle, ble_gap_lesc_p256_pk_t const *p_pk_own, ble_gap_lesc_oob_data_t *p_oobd_own)); -+ -+/**@brief Provide the OOB data sent/received out of band. -+ * -+ * @note An authentication procedure with OOB selected as an algorithm must be in progress when calling this function. -+ * @note A @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST event with the oobd_req set to 1 must have been received prior to calling this function. -+ * -+ * @events -+ * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] p_oobd_own The OOB data sent out of band to a peer or NULL if the peer has not received OOB data. -+ * Must correspond to @ref ble_gap_sec_params_t::oob flag in @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST. -+ * @param[in] p_oobd_peer The OOB data received out of band from a peer or NULL if none received. -+ * Must correspond to @ref ble_gap_sec_params_t::oob flag in @ref sd_ble_gap_authenticate in the central role -+ * or @ref sd_ble_gap_sec_params_reply in the peripheral role. -+ * -+ * @retval ::NRF_SUCCESS OOB data accepted. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ */ -+SVCALL(SD_BLE_GAP_LESC_OOB_DATA_SET, uint32_t, sd_ble_gap_lesc_oob_data_set(uint16_t conn_handle, ble_gap_lesc_oob_data_t const *p_oobd_own, ble_gap_lesc_oob_data_t const *p_oobd_peer)); -+ -+ -+/**@brief Initiate GAP Encryption procedure. -+ * -+ * @details In the central role, this function will initiate the encryption procedure using the encryption information provided. -+ * -+ * @events -+ * @event{@ref BLE_GAP_EVT_CONN_SEC_UPDATE, The connection security has been updated.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_ENC_MSC} -+ * @mmsc{@ref BLE_GAP_MULTILINK_CTRL_PROC_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_SEC_REQ_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] p_master_id Pointer to a @ref ble_gap_master_id_t master identification structure. -+ * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. -+ * -+ * @retval ::NRF_SUCCESS Successfully initiated authentication procedure. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ * @retval ::BLE_ERROR_INVALID_ROLE Operation is not supported in the Peripheral role. -+ * @retval ::NRF_ERROR_BUSY Procedure already in progress or not allowed at this time, wait for pending procedures to complete and retry. -+ */ -+SVCALL(SD_BLE_GAP_ENCRYPT, uint32_t, sd_ble_gap_encrypt(uint16_t conn_handle, ble_gap_master_id_t const *p_master_id, ble_gap_enc_info_t const *p_enc_info)); -+ -+ -+/**@brief Reply with GAP security information. -+ * -+ * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_INFO_REQUEST, calling it at other times will result in @ref NRF_ERROR_INVALID_STATE. -+ * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. -+ * @note Data signing is not yet supported, and p_sign_info must therefore be NULL. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_PERIPH_ENC_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. May be NULL to signal none is available. -+ * @param[in] p_id_info Pointer to a @ref ble_gap_irk_t identity information structure. May be NULL to signal none is available. -+ * @param[in] p_sign_info Pointer to a @ref ble_gap_sign_info_t signing information structure. May be NULL to signal none is available. -+ * -+ * @retval ::NRF_SUCCESS Successfully accepted security information. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ */ -+SVCALL(SD_BLE_GAP_SEC_INFO_REPLY, uint32_t, sd_ble_gap_sec_info_reply(uint16_t conn_handle, ble_gap_enc_info_t const *p_enc_info, ble_gap_irk_t const *p_id_info, ble_gap_sign_info_t const *p_sign_info)); -+ -+ -+/**@brief Get the current connection security. -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[out] p_conn_sec Pointer to a @ref ble_gap_conn_sec_t structure to be filled in. -+ * -+ * @retval ::NRF_SUCCESS Current connection security successfully retrieved. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ */ -+SVCALL(SD_BLE_GAP_CONN_SEC_GET, uint32_t, sd_ble_gap_conn_sec_get(uint16_t conn_handle, ble_gap_conn_sec_t *p_conn_sec)); -+ -+ -+/**@brief Start reporting the received signal strength to the application. -+ * -+ * A new event is reported whenever the RSSI value changes, until @ref sd_ble_gap_rssi_stop is called. -+ * -+ * @events -+ * @event{@ref BLE_GAP_EVT_RSSI_CHANGED, New RSSI data available. How often the event is generated is -+ * dependent on the settings of the threshold_dbm -+ * and skip_count input parameters.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} -+ * @mmsc{@ref BLE_GAP_RSSI_FILT_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] threshold_dbm Minimum change in dBm before triggering the @ref BLE_GAP_EVT_RSSI_CHANGED event. Events are disabled if threshold_dbm equals @ref BLE_GAP_RSSI_THRESHOLD_INVALID. -+ * @param[in] skip_count Number of RSSI samples with a change of threshold_dbm or more before sending a new @ref BLE_GAP_EVT_RSSI_CHANGED event. -+ * -+ * @retval ::NRF_SUCCESS Successfully activated RSSI reporting. -+ * @retval ::NRF_ERROR_INVALID_STATE Disconnection in progress. Invalid state to perform operation. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ */ -+SVCALL(SD_BLE_GAP_RSSI_START, uint32_t, sd_ble_gap_rssi_start(uint16_t conn_handle, uint8_t threshold_dbm, uint8_t skip_count)); -+ -+ -+/**@brief Stop reporting the received signal strength. -+ * -+ * @note An RSSI change detected before the call but not yet received by the application -+ * may be reported after @ref sd_ble_gap_rssi_stop has been called. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} -+ * @mmsc{@ref BLE_GAP_RSSI_FILT_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * -+ * @retval ::NRF_SUCCESS Successfully deactivated RSSI reporting. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ */ -+SVCALL(SD_BLE_GAP_RSSI_STOP, uint32_t, sd_ble_gap_rssi_stop(uint16_t conn_handle)); -+ -+ -+/**@brief Get the received signal strength for the last connection event. -+ * -+ * @ref sd_ble_gap_rssi_start must be called to start reporting RSSI before using this function. @ref NRF_ERROR_NOT_FOUND -+ * will be returned until RSSI was sampled for the first time after calling @ref sd_ble_gap_rssi_start. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[out] p_rssi Pointer to the location where the RSSI measurement shall be stored. -+ * -+ * @retval ::NRF_SUCCESS Successfully read the RSSI. -+ * @retval ::NRF_ERROR_NOT_FOUND No sample is available. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is not ongoing, or disconnection in progress. -+ */ -+SVCALL(SD_BLE_GAP_RSSI_GET, uint32_t, sd_ble_gap_rssi_get(uint16_t conn_handle, int8_t *p_rssi)); -+ -+ -+/**@brief Start scanning (GAP Discovery procedure, Observer Procedure). -+ * -+ * @events -+ * @event{@ref BLE_GAP_EVT_ADV_REPORT, An advertising or scan response packet has been received.} -+ * @event{@ref BLE_GAP_EVT_TIMEOUT, Scanner has timed out.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_SCAN_MSC} -+ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} -+ * @endmscs -+ * -+ * @param[in] p_scan_params Pointer to scan parameters structure. -+ * -+ * @retval ::NRF_SUCCESS Successfully initiated scanning procedure. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_RESOURCES Not enough BLE role slots available. -+ * Stop one or more currently active roles (Central, Peripheral or Broadcaster) and try again -+ */ -+SVCALL(SD_BLE_GAP_SCAN_START, uint32_t, sd_ble_gap_scan_start(ble_gap_scan_params_t const *p_scan_params)); -+ -+ -+/**@brief Stop scanning (GAP Discovery procedure, Observer Procedure). -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_SCAN_MSC} -+ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} -+ * @endmscs -+ * -+ * @retval ::NRF_SUCCESS Successfully stopped scanning procedure. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation (most probably not in scanning state). -+ */ -+SVCALL(SD_BLE_GAP_SCAN_STOP, uint32_t, sd_ble_gap_scan_stop(void)); -+ -+ -+/**@brief Create a connection (GAP Link Establishment). -+ * -+ * @note If a scanning procedure is currently in progress it will be automatically stopped when calling this function. -+ * The scanning procedure will be stopped even if the function returns an error. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_CONN_PRIV_MSC} -+ * @mmsc{@ref BLE_GAP_CENTRAL_CONN_MSC} -+ * @endmscs -+ * -+ * @param[in] p_peer_addr Pointer to peer address. If the use_whitelist bit is set in @ref ble_gap_scan_params_t, then this is ignored. -+ * @param[in] p_scan_params Pointer to scan parameters structure. -+ * @param[in] p_conn_params Pointer to desired connection parameters. -+ * @param[in] conn_cfg_tag Tag identifying a configuration set by @ref sd_ble_cfg_set or -+ * @ref BLE_CONN_CFG_TAG_DEFAULT to use the default connection configuration. -+ * -+ * @retval ::NRF_SUCCESS Successfully initiated connection procedure. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid parameter(s) pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * - Invalid parameter(s) in p_scan_params or p_conn_params. -+ * - Use of whitelist requested but whitelist has not been set, see @ref sd_ble_gap_whitelist_set. -+ * - Peer address was not present in the device identity list, see @ref sd_ble_gap_device_identities_set. -+ * @retval ::NRF_ERROR_INVALID_STATE The SoftDevice is in an invalid state to perform this operation. This may be due to an -+ * existing locally initiated connect procedure, which must complete before initiating again. -+ * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Peer address. -+ * @retval ::NRF_ERROR_CONN_COUNT The limit of available connections has been reached. -+ * @retval ::NRF_ERROR_RESOURCES Not enough BLE role slots available. -+ * Stop one or more currently active roles (Central, Peripheral or Broadcaster) and try again -+ */ -+SVCALL(SD_BLE_GAP_CONNECT, uint32_t, sd_ble_gap_connect(ble_gap_addr_t const *p_peer_addr, ble_gap_scan_params_t const *p_scan_params, ble_gap_conn_params_t const *p_conn_params, uint8_t conn_cfg_tag)); -+ -+ -+/**@brief Cancel a connection establishment. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_CENTRAL_CONN_MSC} -+ * @endmscs -+ * -+ * @retval ::NRF_SUCCESS Successfully canceled an ongoing connection procedure. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ */ -+SVCALL(SD_BLE_GAP_CONNECT_CANCEL, uint32_t, sd_ble_gap_connect_cancel(void)); -+ -+ -+/**@brief Initiate or respond to a PHY Update Procedure -+ * -+ * @details This function is used to initiate or respond to a PHY Update Procedure. It will always -+ * generate a @ref BLE_GAP_EVT_PHY_UPDATE event if successfully executed. -+ * If this function is used to initiate a PHY Update procedure and the only option -+ * provided in @ref ble_gap_phys_t::tx_phys and @ref ble_gap_phys_t::rx_phys is the -+ * currently active PHYs in the respective directions, the SoftDevice will generate a -+ * @ref BLE_GAP_EVT_PHY_UPDATE with the current PHYs set and will not initiate the -+ * procedure in the Link Layer. -+ * If @ref ble_gap_phys_t::tx_phys or @ref ble_gap_phys_t::rx_phys is -+ * @ref BLE_GAP_PHY_AUTO, then the stack will select a PHY for the respective direction -+ * based on the peer's PHY preferences and the local stack configuration. -+ * If the peer does not support the PHY Update Procedure, then the resulting -+ * @ref BLE_GAP_EVT_PHY_UPDATE event will have a status set to -+ * @ref BLE_HCI_UNSUPPORTED_REMOTE_FEATURE. -+ * If the PHY procedure was rejected by the peer due to a procedure collision, the status -+ * will be @ref BLE_HCI_STATUS_CODE_LMP_ERROR_TRANSACTION_COLLISION or -+ * @ref BLE_HCI_DIFFERENT_TRANSACTION_COLLISION. -+ * If the peer responds to the PHY Update procedure with invalid parameters, the status -+ * will be @ref BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS. -+ * If the PHY procedure was rejected by the peer for a different reason, the status will -+ * contain the reason as specified by the peer. -+ * -+ * @events -+ * @event{@ref BLE_GAP_EVT_PHY_UPDATE, Result of the PHY Update Procedure.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_CENTRAL_PHY_UPDATE} -+ * @mmsc{@ref BLE_GAP_PERIPHERAL_PHY_UPDATE} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle to indicate the connection for which the PHY Update is requested. -+ * @param[in] p_gap_phys Pointer to PHY structure. -+ * -+ * @retval ::NRF_SUCCESS Successfully requested a PHY Update. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Unsupported PHYs supplied to the call. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::NRF_ERROR_BUSY Procedure is already in progress or not allowed at this time. Process pending events and wait for the pending procedure to complete and retry. -+ * -+ */ -+SVCALL(SD_BLE_GAP_PHY_UPDATE, uint32_t, sd_ble_gap_phy_update(uint16_t conn_handle, ble_gap_phys_t const *p_gap_phys)); -+ -+ -+/**@brief Initiate or respond to a Data Length Update Procedure. -+ * -+ * @note Only symmetric input parameters for the Data Length Update is supported. Only -+ * @ref BLE_GAP_DATA_LENGTH_AUTO for max_tx_time_us and max_rx_time_us is supported. -+ * -+ * @note If the application uses @ref BLE_GAP_DATA_LENGTH_AUTO for one or more members of -+ * p_dl_params, the SoftDevice will choose the highest value supported in current -+ * configuration and connection parameters. -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] p_dl_params Pointer to local parameters to be used in Data Length Update -+ * Procedure. Set any member to @ref BLE_GAP_DATA_LENGTH_AUTO to let -+ * the SoftDevice automatically decide the value for that member. -+ * Set to NULL to use automatic values for all members. -+ * @param[out] p_dl_limitation Pointer to limitation to be written when local device does not -+ * have enough resources to accommodate the requested Data Length -+ * Update parameters. Ignored if NULL. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GAP_DATA_LENGTH_UPDATE_PROCEDURE_MSC} -+ * @endmscs -+ * -+ * @retval ::NRF_SUCCESS Successfully set Data Length Extension initiation/response parameters. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameters supplied. -+ * @retval ::NRF_ERROR_NOT_SUPPORTED The requested parameters are not supported by the SoftDevice. -+ * @retval ::NRF_ERROR_RESOURCES The requested parameters can not be accommodated. Inspect -+ * p_dl_limitation so see where the limitation is. -+ * @retval ::NRF_ERROR_BUSY Peer has already initiated a Data Length Update Procedure. Process the -+ * pending @ref BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST event to respond. -+ */ -+SVCALL(SD_BLE_GAP_DATA_LENGTH_UPDATE, uint32_t, sd_ble_gap_data_length_update(uint16_t conn_handle, ble_gap_data_length_params_t const *p_dl_params, ble_gap_data_length_limitation_t *p_dl_limitation)); -+ -+ -+/** @} */ -+ -+#ifdef __cplusplus -+} -+#endif -+#endif // BLE_GAP_H__ -+ -+/** -+ @} -+*/ -diff -u -r -N a/components/softdevice/s132v5/headers/ble_gatt.h b/components/softdevice/s132v5/headers/ble_gatt.h ---- a/components/softdevice/s132v5/headers/ble_gatt.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v5/headers/ble_gatt.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,228 @@ -+/* -+ * Copyright (c) 2013 - 2017, Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form, except as embedded into a Nordic -+ * Semiconductor ASA integrated circuit in a product or a software update for -+ * such product, must reproduce the above copyright notice, this list of -+ * conditions and the following disclaimer in the documentation and/or other -+ * materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its -+ * contributors may be used to endorse or promote products derived from this -+ * software without specific prior written permission. -+ * -+ * 4. This software, with or without modification, must only be used with a -+ * Nordic Semiconductor ASA integrated circuit. -+ * -+ * 5. Any software provided in binary form under this license must not be reverse -+ * engineered, decompiled, modified and/or disassembled. -+ * -+ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -+ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ */ -+ -+/** -+ @addtogroup BLE_GATT Generic Attribute Profile (GATT) Common -+ @{ -+ @brief Common definitions and prototypes for the GATT interfaces. -+ */ -+ -+#ifndef BLE_GATT_H__ -+#define BLE_GATT_H__ -+ -+#include -+#include "nrf_svc.h" -+#include "nrf_error.h" -+#include "ble_hci.h" -+#include "ble_ranges.h" -+#include "ble_types.h" -+#include "ble_err.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/** @addtogroup BLE_GATT_DEFINES Defines -+ * @{ */ -+ -+/** @brief Default ATT MTU, in bytes. */ -+#define BLE_GATT_ATT_MTU_DEFAULT 23 -+ -+/**@brief Invalid Attribute Handle. */ -+#define BLE_GATT_HANDLE_INVALID 0x0000 -+ -+/**@brief First Attribute Handle. */ -+#define BLE_GATT_HANDLE_START 0x0001 -+ -+/**@brief Last Attribute Handle. */ -+#define BLE_GATT_HANDLE_END 0xFFFF -+ -+/** @defgroup BLE_GATT_TIMEOUT_SOURCES GATT Timeout sources -+ * @{ */ -+#define BLE_GATT_TIMEOUT_SRC_PROTOCOL 0x00 /**< ATT Protocol timeout. */ -+/** @} */ -+ -+/** @defgroup BLE_GATT_WRITE_OPS GATT Write operations -+ * @{ */ -+#define BLE_GATT_OP_INVALID 0x00 /**< Invalid Operation. */ -+#define BLE_GATT_OP_WRITE_REQ 0x01 /**< Write Request. */ -+#define BLE_GATT_OP_WRITE_CMD 0x02 /**< Write Command. */ -+#define BLE_GATT_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ -+#define BLE_GATT_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ -+#define BLE_GATT_OP_EXEC_WRITE_REQ 0x05 /**< Execute Write Request. */ -+/** @} */ -+ -+/** @defgroup BLE_GATT_EXEC_WRITE_FLAGS GATT Execute Write flags -+ * @{ */ -+#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_CANCEL 0x00 /**< Cancel prepared write. */ -+#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE 0x01 /**< Execute prepared write. */ -+/** @} */ -+ -+/** @defgroup BLE_GATT_HVX_TYPES GATT Handle Value operations -+ * @{ */ -+#define BLE_GATT_HVX_INVALID 0x00 /**< Invalid Operation. */ -+#define BLE_GATT_HVX_NOTIFICATION 0x01 /**< Handle Value Notification. */ -+#define BLE_GATT_HVX_INDICATION 0x02 /**< Handle Value Indication. */ -+/** @} */ -+ -+/** @defgroup BLE_GATT_STATUS_CODES GATT Status Codes -+ * @{ */ -+#define BLE_GATT_STATUS_SUCCESS 0x0000 /**< Success. */ -+#define BLE_GATT_STATUS_UNKNOWN 0x0001 /**< Unknown or not applicable status. */ -+#define BLE_GATT_STATUS_ATTERR_INVALID 0x0100 /**< ATT Error: Invalid Error Code. */ -+#define BLE_GATT_STATUS_ATTERR_INVALID_HANDLE 0x0101 /**< ATT Error: Invalid Attribute Handle. */ -+#define BLE_GATT_STATUS_ATTERR_READ_NOT_PERMITTED 0x0102 /**< ATT Error: Read not permitted. */ -+#define BLE_GATT_STATUS_ATTERR_WRITE_NOT_PERMITTED 0x0103 /**< ATT Error: Write not permitted. */ -+#define BLE_GATT_STATUS_ATTERR_INVALID_PDU 0x0104 /**< ATT Error: Used in ATT as Invalid PDU. */ -+#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHENTICATION 0x0105 /**< ATT Error: Authenticated link required. */ -+#define BLE_GATT_STATUS_ATTERR_REQUEST_NOT_SUPPORTED 0x0106 /**< ATT Error: Used in ATT as Request Not Supported. */ -+#define BLE_GATT_STATUS_ATTERR_INVALID_OFFSET 0x0107 /**< ATT Error: Offset specified was past the end of the attribute. */ -+#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHORIZATION 0x0108 /**< ATT Error: Used in ATT as Insufficient Authorization. */ -+#define BLE_GATT_STATUS_ATTERR_PREPARE_QUEUE_FULL 0x0109 /**< ATT Error: Used in ATT as Prepare Queue Full. */ -+#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_FOUND 0x010A /**< ATT Error: Used in ATT as Attribute not found. */ -+#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_LONG 0x010B /**< ATT Error: Attribute cannot be read or written using read/write blob requests. */ -+#define BLE_GATT_STATUS_ATTERR_INSUF_ENC_KEY_SIZE 0x010C /**< ATT Error: Encryption key size used is insufficient. */ -+#define BLE_GATT_STATUS_ATTERR_INVALID_ATT_VAL_LENGTH 0x010D /**< ATT Error: Invalid value size. */ -+#define BLE_GATT_STATUS_ATTERR_UNLIKELY_ERROR 0x010E /**< ATT Error: Very unlikely error. */ -+#define BLE_GATT_STATUS_ATTERR_INSUF_ENCRYPTION 0x010F /**< ATT Error: Encrypted link required. */ -+#define BLE_GATT_STATUS_ATTERR_UNSUPPORTED_GROUP_TYPE 0x0110 /**< ATT Error: Attribute type is not a supported grouping attribute. */ -+#define BLE_GATT_STATUS_ATTERR_INSUF_RESOURCES 0x0111 /**< ATT Error: Encrypted link required. */ -+#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_BEGIN 0x0112 /**< ATT Error: Reserved for Future Use range #1 begin. */ -+#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_END 0x017F /**< ATT Error: Reserved for Future Use range #1 end. */ -+#define BLE_GATT_STATUS_ATTERR_APP_BEGIN 0x0180 /**< ATT Error: Application range begin. */ -+#define BLE_GATT_STATUS_ATTERR_APP_END 0x019F /**< ATT Error: Application range end. */ -+#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_BEGIN 0x01A0 /**< ATT Error: Reserved for Future Use range #2 begin. */ -+#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_END 0x01DF /**< ATT Error: Reserved for Future Use range #2 end. */ -+#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_BEGIN 0x01E0 /**< ATT Error: Reserved for Future Use range #3 begin. */ -+#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_END 0x01FC /**< ATT Error: Reserved for Future Use range #3 end. */ -+#define BLE_GATT_STATUS_ATTERR_CPS_CCCD_CONFIG_ERROR 0x01FD /**< ATT Common Profile and Service Error: Client Characteristic Configuration Descriptor improperly configured. */ -+#define BLE_GATT_STATUS_ATTERR_CPS_PROC_ALR_IN_PROG 0x01FE /**< ATT Common Profile and Service Error: Procedure Already in Progress. */ -+#define BLE_GATT_STATUS_ATTERR_CPS_OUT_OF_RANGE 0x01FF /**< ATT Common Profile and Service Error: Out Of Range. */ -+/** @} */ -+ -+ -+/** @defgroup BLE_GATT_CPF_FORMATS Characteristic Presentation Formats -+ * @note Found at http://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.gatt.characteristic_presentation_format.xml -+ * @{ */ -+#define BLE_GATT_CPF_FORMAT_RFU 0x00 /**< Reserved For Future Use. */ -+#define BLE_GATT_CPF_FORMAT_BOOLEAN 0x01 /**< Boolean. */ -+#define BLE_GATT_CPF_FORMAT_2BIT 0x02 /**< Unsigned 2-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_NIBBLE 0x03 /**< Unsigned 4-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_UINT8 0x04 /**< Unsigned 8-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_UINT12 0x05 /**< Unsigned 12-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_UINT16 0x06 /**< Unsigned 16-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_UINT24 0x07 /**< Unsigned 24-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_UINT32 0x08 /**< Unsigned 32-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_UINT48 0x09 /**< Unsigned 48-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_UINT64 0x0A /**< Unsigned 64-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_UINT128 0x0B /**< Unsigned 128-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_SINT8 0x0C /**< Signed 2-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_SINT12 0x0D /**< Signed 12-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_SINT16 0x0E /**< Signed 16-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_SINT24 0x0F /**< Signed 24-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_SINT32 0x10 /**< Signed 32-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_SINT48 0x11 /**< Signed 48-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_SINT64 0x12 /**< Signed 64-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_SINT128 0x13 /**< Signed 128-bit integer. */ -+#define BLE_GATT_CPF_FORMAT_FLOAT32 0x14 /**< IEEE-754 32-bit floating point. */ -+#define BLE_GATT_CPF_FORMAT_FLOAT64 0x15 /**< IEEE-754 64-bit floating point. */ -+#define BLE_GATT_CPF_FORMAT_SFLOAT 0x16 /**< IEEE-11073 16-bit SFLOAT. */ -+#define BLE_GATT_CPF_FORMAT_FLOAT 0x17 /**< IEEE-11073 32-bit FLOAT. */ -+#define BLE_GATT_CPF_FORMAT_DUINT16 0x18 /**< IEEE-20601 format. */ -+#define BLE_GATT_CPF_FORMAT_UTF8S 0x19 /**< UTF-8 string. */ -+#define BLE_GATT_CPF_FORMAT_UTF16S 0x1A /**< UTF-16 string. */ -+#define BLE_GATT_CPF_FORMAT_STRUCT 0x1B /**< Opaque Structure. */ -+/** @} */ -+ -+/** @defgroup BLE_GATT_CPF_NAMESPACES GATT Bluetooth Namespaces -+ * @{ -+ */ -+#define BLE_GATT_CPF_NAMESPACE_BTSIG 0x01 /**< Bluetooth SIG defined Namespace. */ -+#define BLE_GATT_CPF_NAMESPACE_DESCRIPTION_UNKNOWN 0x0000 /**< Namespace Description Unknown. */ -+/** @} */ -+ -+/** @} */ -+ -+/** @addtogroup BLE_GATT_STRUCTURES Structures -+ * @{ */ -+ -+/** -+ * @brief BLE GATT connection configuration parameters, set with @ref sd_ble_cfg_set. -+ * -+ * @retval ::NRF_ERROR_INVALID_PARAM att_mtu is smaller than @ref BLE_GATT_ATT_MTU_DEFAULT. -+ */ -+typedef struct -+{ -+ uint16_t att_mtu; /**< Maximum size of ATT packet the SoftDevice can send or receive. -+ The default and minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. -+ @mscs -+ @mmsc{@ref BLE_GATTC_MTU_EXCHANGE} -+ @mmsc{@ref BLE_GATTS_MTU_EXCHANGE} -+ @endmscs -+ */ -+} ble_gatt_conn_cfg_t; -+ -+/**@brief GATT Characteristic Properties. */ -+typedef struct -+{ -+ /* Standard properties */ -+ uint8_t broadcast :1; /**< Broadcasting of the value permitted. */ -+ uint8_t read :1; /**< Reading the value permitted. */ -+ uint8_t write_wo_resp :1; /**< Writing the value with Write Command permitted. */ -+ uint8_t write :1; /**< Writing the value with Write Request permitted. */ -+ uint8_t notify :1; /**< Notification of the value permitted. */ -+ uint8_t indicate :1; /**< Indications of the value permitted. */ -+ uint8_t auth_signed_wr :1; /**< Writing the value with Signed Write Command permitted. */ -+} ble_gatt_char_props_t; -+ -+/**@brief GATT Characteristic Extended Properties. */ -+typedef struct -+{ -+ /* Extended properties */ -+ uint8_t reliable_wr :1; /**< Writing the value with Queued Write operations permitted. */ -+ uint8_t wr_aux :1; /**< Writing the Characteristic User Description descriptor permitted. */ -+} ble_gatt_char_ext_props_t; -+ -+/** @} */ -+ -+#ifdef __cplusplus -+} -+#endif -+#endif // BLE_GATT_H__ -+ -+/** @} */ -diff -u -r -N a/components/softdevice/s132v5/headers/ble_gattc.h b/components/softdevice/s132v5/headers/ble_gattc.h ---- a/components/softdevice/s132v5/headers/ble_gattc.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v5/headers/ble_gattc.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,707 @@ -+/* -+ * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form, except as embedded into a Nordic -+ * Semiconductor ASA integrated circuit in a product or a software update for -+ * such product, must reproduce the above copyright notice, this list of -+ * conditions and the following disclaimer in the documentation and/or other -+ * materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its -+ * contributors may be used to endorse or promote products derived from this -+ * software without specific prior written permission. -+ * -+ * 4. This software, with or without modification, must only be used with a -+ * Nordic Semiconductor ASA integrated circuit. -+ * -+ * 5. Any software provided in binary form under this license must not be reverse -+ * engineered, decompiled, modified and/or disassembled. -+ * -+ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -+ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ */ -+ -+/** -+ @addtogroup BLE_GATTC Generic Attribute Profile (GATT) Client -+ @{ -+ @brief Definitions and prototypes for the GATT Client interface. -+ */ -+ -+#ifndef BLE_GATTC_H__ -+#define BLE_GATTC_H__ -+ -+#include -+#include "nrf.h" -+#include "nrf_svc.h" -+#include "nrf_error.h" -+#include "ble_hci.h" -+#include "ble_ranges.h" -+#include "ble_types.h" -+#include "ble_err.h" -+#include "ble_gatt.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/** @addtogroup BLE_GATTC_ENUMERATIONS Enumerations -+ * @{ */ -+ -+/**@brief GATTC API SVC numbers. */ -+enum BLE_GATTC_SVCS -+{ -+ SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER = BLE_GATTC_SVC_BASE, /**< Primary Service Discovery. */ -+ SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, /**< Relationship Discovery. */ -+ SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, /**< Characteristic Discovery. */ -+ SD_BLE_GATTC_DESCRIPTORS_DISCOVER, /**< Characteristic Descriptor Discovery. */ -+ SD_BLE_GATTC_ATTR_INFO_DISCOVER, /**< Attribute Information Discovery. */ -+ SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, /**< Read Characteristic Value by UUID. */ -+ SD_BLE_GATTC_READ, /**< Generic read. */ -+ SD_BLE_GATTC_CHAR_VALUES_READ, /**< Read multiple Characteristic Values. */ -+ SD_BLE_GATTC_WRITE, /**< Generic write. */ -+ SD_BLE_GATTC_HV_CONFIRM, /**< Handle Value Confirmation. */ -+ SD_BLE_GATTC_EXCHANGE_MTU_REQUEST, /**< Exchange MTU Request. */ -+}; -+ -+/** -+ * @brief GATT Client Event IDs. -+ */ -+enum BLE_GATTC_EVTS -+{ -+ BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP = BLE_GATTC_EVT_BASE, /**< Primary Service Discovery Response event. \n See @ref ble_gattc_evt_prim_srvc_disc_rsp_t. */ -+ BLE_GATTC_EVT_REL_DISC_RSP, /**< Relationship Discovery Response event. \n See @ref ble_gattc_evt_rel_disc_rsp_t. */ -+ BLE_GATTC_EVT_CHAR_DISC_RSP, /**< Characteristic Discovery Response event. \n See @ref ble_gattc_evt_char_disc_rsp_t. */ -+ BLE_GATTC_EVT_DESC_DISC_RSP, /**< Descriptor Discovery Response event. \n See @ref ble_gattc_evt_desc_disc_rsp_t. */ -+ BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, /**< Attribute Information Response event. \n See @ref ble_gattc_evt_attr_info_disc_rsp_t. */ -+ BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP, /**< Read By UUID Response event. \n See @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t. */ -+ BLE_GATTC_EVT_READ_RSP, /**< Read Response event. \n See @ref ble_gattc_evt_read_rsp_t. */ -+ BLE_GATTC_EVT_CHAR_VALS_READ_RSP, /**< Read multiple Response event. \n See @ref ble_gattc_evt_char_vals_read_rsp_t. */ -+ BLE_GATTC_EVT_WRITE_RSP, /**< Write Response event. \n See @ref ble_gattc_evt_write_rsp_t. */ -+ BLE_GATTC_EVT_HVX, /**< Handle Value Notification or Indication event. \n Confirm indication with @ref sd_ble_gattc_hv_confirm. \n See @ref ble_gattc_evt_hvx_t. */ -+ BLE_GATTC_EVT_EXCHANGE_MTU_RSP, /**< Exchange MTU Response event. \n See @ref ble_gattc_evt_exchange_mtu_rsp_t. */ -+ BLE_GATTC_EVT_TIMEOUT, /**< Timeout event. \n See @ref ble_gattc_evt_timeout_t. */ -+ BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE /**< Write without Response transmission complete. \n See @ref ble_gattc_evt_write_cmd_tx_complete_t. */ -+}; -+ -+/** @} */ -+ -+/** @addtogroup BLE_GATTC_DEFINES Defines -+ * @{ */ -+ -+/** @defgroup BLE_ERRORS_GATTC SVC return values specific to GATTC -+ * @{ */ -+#define BLE_ERROR_GATTC_PROC_NOT_PERMITTED (NRF_GATTC_ERR_BASE + 0x000) /**< Procedure not Permitted. */ -+/** @} */ -+ -+/** @defgroup BLE_GATTC_ATTR_INFO_FORMAT Attribute Information Formats -+ * @{ */ -+#define BLE_GATTC_ATTR_INFO_FORMAT_16BIT 1 /**< 16-bit Attribute Information Format. */ -+#define BLE_GATTC_ATTR_INFO_FORMAT_128BIT 2 /**< 128-bit Attribute Information Format. */ -+/** @} */ -+ -+/** @defgroup BLE_GATTC_DEFAULTS GATT Client defaults -+ * @{ */ -+#define BLE_GATTC_WRITE_CMD_TX_QUEUE_SIZE_DEFAULT 1 /**< Default number of Write without Response that can be queued for transmission. */ -+/** @} */ -+ -+/** @} */ -+ -+/** @addtogroup BLE_GATTC_STRUCTURES Structures -+ * @{ */ -+ -+/** -+ * @brief BLE GATTC connection configuration parameters, set with @ref sd_ble_cfg_set. -+ */ -+typedef struct -+{ -+ uint8_t write_cmd_tx_queue_size; /**< The guaranteed minimum number of Write without Response that can be queued for transmission. -+ The default value is @ref BLE_GATTC_WRITE_CMD_TX_QUEUE_SIZE_DEFAULT */ -+} ble_gattc_conn_cfg_t; -+ -+/**@brief Operation Handle Range. */ -+typedef struct -+{ -+ uint16_t start_handle; /**< Start Handle. */ -+ uint16_t end_handle; /**< End Handle. */ -+} ble_gattc_handle_range_t; -+ -+ -+/**@brief GATT service. */ -+typedef struct -+{ -+ ble_uuid_t uuid; /**< Service UUID. */ -+ ble_gattc_handle_range_t handle_range; /**< Service Handle Range. */ -+} ble_gattc_service_t; -+ -+ -+/**@brief GATT include. */ -+typedef struct -+{ -+ uint16_t handle; /**< Include Handle. */ -+ ble_gattc_service_t included_srvc; /**< Handle of the included service. */ -+} ble_gattc_include_t; -+ -+ -+/**@brief GATT characteristic. */ -+typedef struct -+{ -+ ble_uuid_t uuid; /**< Characteristic UUID. */ -+ ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ -+ uint8_t char_ext_props : 1; /**< Extended properties present. */ -+ uint16_t handle_decl; /**< Handle of the Characteristic Declaration. */ -+ uint16_t handle_value; /**< Handle of the Characteristic Value. */ -+} ble_gattc_char_t; -+ -+ -+/**@brief GATT descriptor. */ -+typedef struct -+{ -+ uint16_t handle; /**< Descriptor Handle. */ -+ ble_uuid_t uuid; /**< Descriptor UUID. */ -+} ble_gattc_desc_t; -+ -+ -+/**@brief Write Parameters. */ -+typedef struct -+{ -+ uint8_t write_op; /**< Write Operation to be performed, see @ref BLE_GATT_WRITE_OPS. */ -+ uint8_t flags; /**< Flags, see @ref BLE_GATT_EXEC_WRITE_FLAGS. */ -+ uint16_t handle; /**< Handle to the attribute to be written. */ -+ uint16_t offset; /**< Offset in bytes. @note For WRITE_CMD and WRITE_REQ, offset must be 0. */ -+ uint16_t len; /**< Length of data in bytes. */ -+ uint8_t const *p_value; /**< Pointer to the value data. */ -+} ble_gattc_write_params_t; -+ -+/**@brief Attribute Information for 16-bit Attribute UUID. */ -+typedef struct -+{ -+ uint16_t handle; /**< Attribute handle. */ -+ ble_uuid_t uuid; /**< 16-bit Attribute UUID. */ -+} ble_gattc_attr_info16_t; -+ -+/**@brief Attribute Information for 128-bit Attribute UUID. */ -+typedef struct -+{ -+ uint16_t handle; /**< Attribute handle. */ -+ ble_uuid128_t uuid; /**< 128-bit Attribute UUID. */ -+} ble_gattc_attr_info128_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP. */ -+typedef struct -+{ -+ uint16_t count; /**< Service count. */ -+ ble_gattc_service_t services[1]; /**< Service data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+} ble_gattc_evt_prim_srvc_disc_rsp_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_REL_DISC_RSP. */ -+typedef struct -+{ -+ uint16_t count; /**< Include count. */ -+ ble_gattc_include_t includes[1]; /**< Include data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+} ble_gattc_evt_rel_disc_rsp_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_DISC_RSP. */ -+typedef struct -+{ -+ uint16_t count; /**< Characteristic count. */ -+ ble_gattc_char_t chars[1]; /**< Characteristic data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+} ble_gattc_evt_char_disc_rsp_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_DESC_DISC_RSP. */ -+typedef struct -+{ -+ uint16_t count; /**< Descriptor count. */ -+ ble_gattc_desc_t descs[1]; /**< Descriptor data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+} ble_gattc_evt_desc_disc_rsp_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP. */ -+typedef struct -+{ -+ uint16_t count; /**< Attribute count. */ -+ uint8_t format; /**< Attribute information format, see @ref BLE_GATTC_ATTR_INFO_FORMAT. */ -+ union { -+ ble_gattc_attr_info16_t attr_info16[1]; /**< Attribute information for 16-bit Attribute UUID. -+ @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+ ble_gattc_attr_info128_t attr_info128[1]; /**< Attribute information for 128-bit Attribute UUID. -+ @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+ } info; /**< Attribute information union. */ -+} ble_gattc_evt_attr_info_disc_rsp_t; -+ -+/**@brief GATT read by UUID handle value pair. */ -+typedef struct -+{ -+ uint16_t handle; /**< Attribute Handle. */ -+ uint8_t *p_value; /**< Pointer to the Attribute Value, length is available in @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t::value_len. */ -+} ble_gattc_handle_value_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP. */ -+typedef struct -+{ -+ uint16_t count; /**< Handle-Value Pair Count. */ -+ uint16_t value_len; /**< Length of the value in Handle-Value(s) list. */ -+ uint8_t handle_value[1]; /**< Handle-Value(s) list. To iterate through the list use @ref sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter. -+ @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+} ble_gattc_evt_char_val_by_uuid_read_rsp_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_READ_RSP. */ -+typedef struct -+{ -+ uint16_t handle; /**< Attribute Handle. */ -+ uint16_t offset; /**< Offset of the attribute data. */ -+ uint16_t len; /**< Attribute data length. */ -+ uint8_t data[1]; /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+} ble_gattc_evt_read_rsp_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP. */ -+typedef struct -+{ -+ uint16_t len; /**< Concatenated Attribute values length. */ -+ uint8_t values[1]; /**< Attribute values. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+} ble_gattc_evt_char_vals_read_rsp_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_WRITE_RSP. */ -+typedef struct -+{ -+ uint16_t handle; /**< Attribute Handle. */ -+ uint8_t write_op; /**< Type of write operation, see @ref BLE_GATT_WRITE_OPS. */ -+ uint16_t offset; /**< Data offset. */ -+ uint16_t len; /**< Data length. */ -+ uint8_t data[1]; /**< Data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+} ble_gattc_evt_write_rsp_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_HVX. */ -+typedef struct -+{ -+ uint16_t handle; /**< Handle to which the HVx operation applies. */ -+ uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ -+ uint16_t len; /**< Attribute data length. */ -+ uint8_t data[1]; /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+} ble_gattc_evt_hvx_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. */ -+typedef struct -+{ -+ uint16_t server_rx_mtu; /**< Server RX MTU size. */ -+} ble_gattc_evt_exchange_mtu_rsp_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_TIMEOUT. */ -+typedef struct -+{ -+ uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ -+} ble_gattc_evt_timeout_t; -+ -+/**@brief Event structure for @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE. */ -+typedef struct -+{ -+ uint8_t count; /**< Number of write without response transmissions completed. */ -+} ble_gattc_evt_write_cmd_tx_complete_t; -+ -+/**@brief GATTC event structure. */ -+typedef struct -+{ -+ uint16_t conn_handle; /**< Connection Handle on which event occurred. */ -+ uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ -+ uint16_t error_handle; /**< In case of error: The handle causing the error. In all other cases @ref BLE_GATT_HANDLE_INVALID. */ -+ union -+ { -+ ble_gattc_evt_prim_srvc_disc_rsp_t prim_srvc_disc_rsp; /**< Primary Service Discovery Response Event Parameters. */ -+ ble_gattc_evt_rel_disc_rsp_t rel_disc_rsp; /**< Relationship Discovery Response Event Parameters. */ -+ ble_gattc_evt_char_disc_rsp_t char_disc_rsp; /**< Characteristic Discovery Response Event Parameters. */ -+ ble_gattc_evt_desc_disc_rsp_t desc_disc_rsp; /**< Descriptor Discovery Response Event Parameters. */ -+ ble_gattc_evt_char_val_by_uuid_read_rsp_t char_val_by_uuid_read_rsp; /**< Characteristic Value Read by UUID Response Event Parameters. */ -+ ble_gattc_evt_read_rsp_t read_rsp; /**< Read Response Event Parameters. */ -+ ble_gattc_evt_char_vals_read_rsp_t char_vals_read_rsp; /**< Characteristic Values Read Response Event Parameters. */ -+ ble_gattc_evt_write_rsp_t write_rsp; /**< Write Response Event Parameters. */ -+ ble_gattc_evt_hvx_t hvx; /**< Handle Value Notification/Indication Event Parameters. */ -+ ble_gattc_evt_exchange_mtu_rsp_t exchange_mtu_rsp; /**< Exchange MTU Response Event Parameters. */ -+ ble_gattc_evt_timeout_t timeout; /**< Timeout Event Parameters. */ -+ ble_gattc_evt_attr_info_disc_rsp_t attr_info_disc_rsp; /**< Attribute Information Discovery Event Parameters. */ -+ ble_gattc_evt_write_cmd_tx_complete_t write_cmd_tx_complete; /**< Write without Response transmission complete Event Parameters. */ -+ } params; /**< Event Parameters. @note Only valid if @ref gatt_status == @ref BLE_GATT_STATUS_SUCCESS. */ -+} ble_gattc_evt_t; -+/** @} */ -+ -+/** @addtogroup BLE_GATTC_FUNCTIONS Functions -+ * @{ */ -+ -+/**@brief Initiate or continue a GATT Primary Service Discovery procedure. -+ * -+ * @details This function initiates or resumes a Primary Service discovery procedure, starting from the supplied handle. -+ * If the last service has not been reached, this function must be called again with an updated start handle value to continue the search. -+ * -+ * @note If any of the discovered services have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with -+ * type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. -+ * -+ * @events -+ * @event{@ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTC_PRIM_SRVC_DISC_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] start_handle Handle to start searching from. -+ * @param[in] p_srvc_uuid Pointer to the service UUID to be found. If it is NULL, all primary services will be returned. -+ * -+ * @retval ::NRF_SUCCESS Successfully started or resumed the Primary Service Discovery procedure. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_BUSY GATT Client procedure already in progress or blocked because of a previous GATT procedure timeout. -+ */ -+SVCALL(SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER, uint32_t, sd_ble_gattc_primary_services_discover(uint16_t conn_handle, uint16_t start_handle, ble_uuid_t const *p_srvc_uuid)); -+ -+ -+/**@brief Initiate or continue a GATT Relationship Discovery procedure. -+ * -+ * @details This function initiates or resumes the Find Included Services sub-procedure. If the last included service has not been reached, -+ * this must be called again with an updated handle range to continue the search. -+ * -+ * @events -+ * @event{@ref BLE_GATTC_EVT_REL_DISC_RSP} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTC_REL_DISC_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. -+ * -+ * @retval ::NRF_SUCCESS Successfully started or resumed the Relationship Discovery procedure. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_BUSY GATT Client procedure already in progress or blocked because of a previous GATT procedure timeout. -+ */ -+SVCALL(SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, uint32_t, sd_ble_gattc_relationships_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); -+ -+ -+/**@brief Initiate or continue a GATT Characteristic Discovery procedure. -+ * -+ * @details This function initiates or resumes a Characteristic discovery procedure. If the last Characteristic has not been reached, -+ * this must be called again with an updated handle range to continue the discovery. -+ * -+ * @note If any of the discovered characteristics have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with -+ * type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. -+ * -+ * @events -+ * @event{@ref BLE_GATTC_EVT_CHAR_DISC_RSP} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTC_CHAR_DISC_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. -+ * -+ * @retval ::NRF_SUCCESS Successfully started or resumed the Characteristic Discovery procedure. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_BUSY GATT Client procedure already in progress or blocked because of a previous GATT procedure timeout. -+ */ -+SVCALL(SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, uint32_t, sd_ble_gattc_characteristics_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); -+ -+ -+/**@brief Initiate or continue a GATT Characteristic Descriptor Discovery procedure. -+ * -+ * @details This function initiates or resumes a Characteristic Descriptor discovery procedure. If the last Descriptor has not been reached, -+ * this must be called again with an updated handle range to continue the discovery. -+ * -+ * @events -+ * @event{@ref BLE_GATTC_EVT_DESC_DISC_RSP} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTC_DESC_DISC_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] p_handle_range A pointer to the range of handles of the Characteristic to perform this procedure on. -+ * -+ * @retval ::NRF_SUCCESS Successfully started or resumed the Descriptor Discovery procedure. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_BUSY GATT Client procedure already in progress or blocked because of a previous GATT procedure timeout. -+ */ -+SVCALL(SD_BLE_GATTC_DESCRIPTORS_DISCOVER, uint32_t, sd_ble_gattc_descriptors_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); -+ -+ -+/**@brief Initiate or continue a GATT Read using Characteristic UUID procedure. -+ * -+ * @details This function initiates or resumes a Read using Characteristic UUID procedure. If the last Characteristic has not been reached, -+ * this must be called again with an updated handle range to continue the discovery. -+ * -+ * @events -+ * @event{@ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTC_READ_UUID_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] p_uuid Pointer to a Characteristic value UUID to read. -+ * @param[in] p_handle_range A pointer to the range of handles to perform this procedure on. -+ * -+ * @retval ::NRF_SUCCESS Successfully started or resumed the Read using Characteristic UUID procedure. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_BUSY GATT Client procedure already in progress or blocked because of a previous GATT procedure timeout. -+ */ -+SVCALL(SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, uint32_t, sd_ble_gattc_char_value_by_uuid_read(uint16_t conn_handle, ble_uuid_t const *p_uuid, ble_gattc_handle_range_t const *p_handle_range)); -+ -+ -+/**@brief Initiate or continue a GATT Read (Long) Characteristic or Descriptor procedure. -+ * -+ * @details This function initiates or resumes a GATT Read (Long) Characteristic or Descriptor procedure. If the Characteristic or Descriptor -+ * to be read is longer than ATT_MTU - 1, this function must be called multiple times with appropriate offset to read the -+ * complete value. -+ * -+ * @events -+ * @event{@ref BLE_GATTC_EVT_READ_RSP} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTC_VALUE_READ_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] handle The handle of the attribute to be read. -+ * @param[in] offset Offset into the attribute value to be read. -+ * -+ * @retval ::NRF_SUCCESS Successfully started or resumed the Read (Long) procedure. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. -+ * @retval ::NRF_ERROR_BUSY GATT Client procedure already in progress or blocked because of a previous GATT procedure timeout. -+ */ -+SVCALL(SD_BLE_GATTC_READ, uint32_t, sd_ble_gattc_read(uint16_t conn_handle, uint16_t handle, uint16_t offset)); -+ -+ -+/**@brief Initiate a GATT Read Multiple Characteristic Values procedure. -+ * -+ * @details This function initiates a GATT Read Multiple Characteristic Values procedure. -+ * -+ * @events -+ * @event{@ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTC_READ_MULT_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] p_handles A pointer to the handle(s) of the attribute(s) to be read. -+ * @param[in] handle_count The number of handles in p_handles. -+ * -+ * @retval ::NRF_SUCCESS Successfully started the Read Multiple Characteristic Values procedure. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_BUSY GATT Client procedure already in progress or blocked because of a previous GATT procedure timeout. -+ */ -+SVCALL(SD_BLE_GATTC_CHAR_VALUES_READ, uint32_t, sd_ble_gattc_char_values_read(uint16_t conn_handle, uint16_t const *p_handles, uint16_t handle_count)); -+ -+ -+/**@brief Perform a Write (Characteristic Value or Descriptor, with or without response, signed or not, long or reliable) procedure. -+ * -+ * @details This function can perform all write procedures described in GATT. -+ * -+ * @note Only one write with response procedure can be ongoing per connection at a time. -+ * If the application tries to write with response while another write with response procedure is ongoing, -+ * the function call will return @ref NRF_ERROR_BUSY. -+ * A @ref BLE_GATTC_EVT_WRITE_RSP event will be issued as soon as the write response arrives from the peer. -+ * -+ * @note The number of Write without Response that can be queued is configured by @ref ble_gattc_conn_cfg_t::write_cmd_tx_queue_size -+ * When the queue is full, the function call will return @ref NRF_ERROR_RESOURCES. -+ * A @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event will be issued as soon as the transmission of the write without response is complete. -+ * -+ * @note The application can keep track of the available queue element count for writes without responses by following the procedure below: -+ * - Store initial queue element count in a variable. -+ * - Decrement the variable, which stores the currently available queue element count, by one when a call to this function returns @ref NRF_SUCCESS. -+ * - Increment the variable, which stores the current available queue element count, by the count variable in @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event. -+ * -+ * @events -+ * @event{@ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE, Write without response transmission complete.} -+ * @event{@ref BLE_GATTC_EVT_WRITE_RSP, Write response received from the peer.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTC_VALUE_WRITE_WITHOUT_RESP_MSC} -+ * @mmsc{@ref BLE_GATTC_VALUE_WRITE_MSC} -+ * @mmsc{@ref BLE_GATTC_VALUE_LONG_WRITE_MSC} -+ * @mmsc{@ref BLE_GATTC_VALUE_RELIABLE_WRITE_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] p_write_params A pointer to a write parameters structure. -+ * -+ * @retval ::NRF_SUCCESS Successfully started the Write procedure. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. -+ * @retval ::NRF_ERROR_BUSY For write with response, GATT Client procedure already in progress or blocked because of a previous GATT procedure timeout. -+ Wait for a @ref BLE_GATTC_EVT_WRITE_RSP event and retry. -+ For write without response it can only mean GATT procedure timeout. -+ * @retval ::NRF_ERROR_RESOURCES Too many writes without responses queued. -+ * Wait for a @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event and retry. -+ */ -+SVCALL(SD_BLE_GATTC_WRITE, uint32_t, sd_ble_gattc_write(uint16_t conn_handle, ble_gattc_write_params_t const *p_write_params)); -+ -+ -+/**@brief Send a Handle Value Confirmation to the GATT Server. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTC_HVI_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] handle The handle of the attribute in the indication. -+ * -+ * @retval ::NRF_SUCCESS Successfully queued the Handle Value Confirmation for transmission. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no Indication pending to be confirmed. -+ * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle. -+ */ -+SVCALL(SD_BLE_GATTC_HV_CONFIRM, uint32_t, sd_ble_gattc_hv_confirm(uint16_t conn_handle, uint16_t handle)); -+ -+/**@brief Discovers information about a range of attributes on a GATT server. -+ * -+ * @events -+ * @event{@ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, Generated when information about a range of attributes has been received.} -+ * @endevents -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] p_handle_range The range of handles to request information about. -+ * -+ * @retval ::NRF_SUCCESS Successfully started an attribute information discovery procedure. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_BUSY GATT Client procedure already in progress or blocked because of a previous GATT procedure timeout. -+ */ -+SVCALL(SD_BLE_GATTC_ATTR_INFO_DISCOVER, uint32_t, sd_ble_gattc_attr_info_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * p_handle_range)); -+ -+/**@brief Start an ATT_MTU exchange by sending an Exchange MTU Request to the server. -+ * -+ * @details The SoftDevice sets ATT_MTU to the minimum of: -+ * - The Client RX MTU value, and -+ * - The Server RX MTU value from @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. -+ * -+ * However, the SoftDevice never sets ATT_MTU lower than @ref BLE_GATT_ATT_MTU_DEFAULT. -+ * -+ * @events -+ * @event{@ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTC_MTU_EXCHANGE} -+ * @endmscs -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] client_rx_mtu Client RX MTU size. -+ * - The minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. -+ * - The maximum value is @ref ble_gatt_conn_cfg_t::att_mtu in the connection configuration -+ used for this connection. -+ * - The value must be equal to Server RX MTU size given in @ref sd_ble_gatts_exchange_mtu_reply -+ * if an ATT_MTU exchange has already been performed in the other direction. -+ * -+ * @retval ::NRF_SUCCESS Successfully sent request to the server. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state or an ATT_MTU exchange was already requested once. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid Client RX MTU size supplied. -+ * @retval ::NRF_ERROR_BUSY GATT Client procedure already in progress or blocked because of a previous GATT procedure timeout. -+ */ -+SVCALL(SD_BLE_GATTC_EXCHANGE_MTU_REQUEST, uint32_t, sd_ble_gattc_exchange_mtu_request(uint16_t conn_handle, uint16_t client_rx_mtu)); -+ -+/**@brief Iterate through Handle-Value(s) list in @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. -+ * -+ * @param[in] p_gattc_evt Pointer to event buffer containing @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. -+ * @note If the buffer contains different event, behavior is undefined. -+ * @param[in,out] p_iter Iterator, points to @ref ble_gattc_handle_value_t structure that will be filled in with -+ * the next Handle-Value pair in each iteration. If the function returns other than -+ * @ref NRF_SUCCESS, it will not be changed. -+ * - To start iteration, initialize the structure to zero. -+ * - To continue, pass the value from previous iteration. -+ * -+ * \code -+ * ble_gattc_handle_value_t iter; -+ * memset(&iter, 0, sizeof(ble_gattc_handle_value_t)); -+ * while (sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(&ble_evt.evt.gattc_evt, &iter) == NRF_SUCCESS) -+ * { -+ * app_handle = iter.handle; -+ * memcpy(app_value, iter.p_value, ble_evt.evt.gattc_evt.params.char_val_by_uuid_read_rsp.value_len); -+ * } -+ * \endcode -+ * -+ * @retval ::NRF_SUCCESS Successfully retrieved the next Handle-Value pair. -+ * @retval ::NRF_ERROR_NOT_FOUND No more Handle-Value pairs available in the list. -+ */ -+__STATIC_INLINE uint32_t sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(ble_gattc_evt_t *p_gattc_evt, ble_gattc_handle_value_t *p_iter); -+ -+/** @} */ -+ -+#ifndef SUPPRESS_INLINE_IMPLEMENTATION -+ -+__STATIC_INLINE uint32_t sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(ble_gattc_evt_t *p_gattc_evt, ble_gattc_handle_value_t *p_iter) -+{ -+ uint32_t value_len = p_gattc_evt->params.char_val_by_uuid_read_rsp.value_len; -+ uint8_t *p_first = p_gattc_evt->params.char_val_by_uuid_read_rsp.handle_value; -+ uint8_t *p_next = p_iter->p_value ? p_iter->p_value + value_len : p_first; -+ -+ if ((p_next - p_first) / (sizeof(uint16_t) + value_len) < p_gattc_evt->params.char_val_by_uuid_read_rsp.count) -+ { -+ p_iter->handle = (uint16_t)p_next[1] << 8 | p_next[0]; -+ p_iter->p_value = p_next + sizeof(uint16_t); -+ return NRF_SUCCESS; -+ } -+ else -+ { -+ return NRF_ERROR_NOT_FOUND; -+ } -+} -+ -+#endif /* SUPPRESS_INLINE_IMPLEMENTATION */ -+ -+#ifdef __cplusplus -+} -+#endif -+#endif /* BLE_GATTC_H__ */ -+ -+/** -+ @} -+*/ -diff -u -r -N a/components/softdevice/s132v5/headers/ble_gatts.h b/components/softdevice/s132v5/headers/ble_gatts.h ---- a/components/softdevice/s132v5/headers/ble_gatts.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v5/headers/ble_gatts.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,841 @@ -+/* -+ * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form, except as embedded into a Nordic -+ * Semiconductor ASA integrated circuit in a product or a software update for -+ * such product, must reproduce the above copyright notice, this list of -+ * conditions and the following disclaimer in the documentation and/or other -+ * materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its -+ * contributors may be used to endorse or promote products derived from this -+ * software without specific prior written permission. -+ * -+ * 4. This software, with or without modification, must only be used with a -+ * Nordic Semiconductor ASA integrated circuit. -+ * -+ * 5. Any software provided in binary form under this license must not be reverse -+ * engineered, decompiled, modified and/or disassembled. -+ * -+ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -+ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ */ -+ -+/** -+ @addtogroup BLE_GATTS Generic Attribute Profile (GATT) Server -+ @{ -+ @brief Definitions and prototypes for the GATTS interface. -+ */ -+ -+#ifndef BLE_GATTS_H__ -+#define BLE_GATTS_H__ -+ -+#include -+#include "nrf_svc.h" -+#include "nrf_error.h" -+#include "ble_hci.h" -+#include "ble_ranges.h" -+#include "ble_types.h" -+#include "ble_err.h" -+#include "ble_gatt.h" -+#include "ble_gap.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/** @addtogroup BLE_GATTS_ENUMERATIONS Enumerations -+ * @{ */ -+ -+/** -+ * @brief GATTS API SVC numbers. -+ */ -+enum BLE_GATTS_SVCS -+{ -+ SD_BLE_GATTS_SERVICE_ADD = BLE_GATTS_SVC_BASE, /**< Add a service. */ -+ SD_BLE_GATTS_INCLUDE_ADD, /**< Add an included service. */ -+ SD_BLE_GATTS_CHARACTERISTIC_ADD, /**< Add a characteristic. */ -+ SD_BLE_GATTS_DESCRIPTOR_ADD, /**< Add a generic attribute. */ -+ SD_BLE_GATTS_VALUE_SET, /**< Set an attribute value. */ -+ SD_BLE_GATTS_VALUE_GET, /**< Get an attribute value. */ -+ SD_BLE_GATTS_HVX, /**< Handle Value Notification or Indication. */ -+ SD_BLE_GATTS_SERVICE_CHANGED, /**< Perform a Service Changed Indication to one or more peers. */ -+ SD_BLE_GATTS_RW_AUTHORIZE_REPLY, /**< Reply to an authorization request for a read or write operation on one or more attributes. */ -+ SD_BLE_GATTS_SYS_ATTR_SET, /**< Set the persistent system attributes for a connection. */ -+ SD_BLE_GATTS_SYS_ATTR_GET, /**< Retrieve the persistent system attributes. */ -+ SD_BLE_GATTS_INITIAL_USER_HANDLE_GET, /**< Retrieve the first valid user handle. */ -+ SD_BLE_GATTS_ATTR_GET, /**< Retrieve the UUID and/or metadata of an attribute. */ -+ SD_BLE_GATTS_EXCHANGE_MTU_REPLY /**< Reply to Exchange MTU Request. */ -+}; -+ -+/** -+ * @brief GATT Server Event IDs. -+ */ -+enum BLE_GATTS_EVTS -+{ -+ BLE_GATTS_EVT_WRITE = BLE_GATTS_EVT_BASE, /**< Write operation performed. \n See @ref ble_gatts_evt_write_t. */ -+ BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST, /**< Read/Write Authorization request. \n Reply with @ref sd_ble_gatts_rw_authorize_reply. \n See @ref ble_gatts_evt_rw_authorize_request_t. */ -+ BLE_GATTS_EVT_SYS_ATTR_MISSING, /**< A persistent system attribute access is pending. \n Respond with @ref sd_ble_gatts_sys_attr_set. \n See @ref ble_gatts_evt_sys_attr_missing_t. */ -+ BLE_GATTS_EVT_HVC, /**< Handle Value Confirmation. \n See @ref ble_gatts_evt_hvc_t. */ -+ BLE_GATTS_EVT_SC_CONFIRM, /**< Service Changed Confirmation. \n No additional event structure applies. */ -+ BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST, /**< Exchange MTU Request. \n Reply with @ref sd_ble_gatts_exchange_mtu_reply. \n See @ref ble_gatts_evt_exchange_mtu_request_t. */ -+ BLE_GATTS_EVT_TIMEOUT, /**< Peer failed to respond to an ATT request in time. \n See @ref ble_gatts_evt_timeout_t. */ -+ BLE_GATTS_EVT_HVN_TX_COMPLETE /**< Handle Value Notification transmission complete. \n See @ref ble_gatts_evt_hvn_tx_complete_t. */ -+}; -+ -+/**@brief GATTS Configuration IDs. -+ * -+ * IDs that uniquely identify a GATTS configuration. -+ */ -+enum BLE_GATTS_CFGS -+{ -+ BLE_GATTS_CFG_SERVICE_CHANGED = BLE_GATTS_CFG_BASE, /**< Service changed configuration. */ -+ BLE_GATTS_CFG_ATTR_TAB_SIZE, /**< Attribute table size configuration. */ -+}; -+ -+/** @} */ -+ -+/** @addtogroup BLE_GATTS_DEFINES Defines -+ * @{ */ -+ -+/** @defgroup BLE_ERRORS_GATTS SVC return values specific to GATTS -+ * @{ */ -+#define BLE_ERROR_GATTS_INVALID_ATTR_TYPE (NRF_GATTS_ERR_BASE + 0x000) /**< Invalid attribute type. */ -+#define BLE_ERROR_GATTS_SYS_ATTR_MISSING (NRF_GATTS_ERR_BASE + 0x001) /**< System Attributes missing. */ -+/** @} */ -+ -+/** @defgroup BLE_GATTS_ATTR_LENS_MAX Maximum attribute lengths -+ * @{ */ -+#define BLE_GATTS_FIX_ATTR_LEN_MAX (510) /**< Maximum length for fixed length Attribute Values. */ -+#define BLE_GATTS_VAR_ATTR_LEN_MAX (512) /**< Maximum length for variable length Attribute Values. */ -+/** @} */ -+ -+/** @defgroup BLE_GATTS_SRVC_TYPES GATT Server Service Types -+ * @{ */ -+#define BLE_GATTS_SRVC_TYPE_INVALID 0x00 /**< Invalid Service Type. */ -+#define BLE_GATTS_SRVC_TYPE_PRIMARY 0x01 /**< Primary Service. */ -+#define BLE_GATTS_SRVC_TYPE_SECONDARY 0x02 /**< Secondary Type. */ -+/** @} */ -+ -+ -+/** @defgroup BLE_GATTS_ATTR_TYPES GATT Server Attribute Types -+ * @{ */ -+#define BLE_GATTS_ATTR_TYPE_INVALID 0x00 /**< Invalid Attribute Type. */ -+#define BLE_GATTS_ATTR_TYPE_PRIM_SRVC_DECL 0x01 /**< Primary Service Declaration. */ -+#define BLE_GATTS_ATTR_TYPE_SEC_SRVC_DECL 0x02 /**< Secondary Service Declaration. */ -+#define BLE_GATTS_ATTR_TYPE_INC_DECL 0x03 /**< Include Declaration. */ -+#define BLE_GATTS_ATTR_TYPE_CHAR_DECL 0x04 /**< Characteristic Declaration. */ -+#define BLE_GATTS_ATTR_TYPE_CHAR_VAL 0x05 /**< Characteristic Value. */ -+#define BLE_GATTS_ATTR_TYPE_DESC 0x06 /**< Descriptor. */ -+#define BLE_GATTS_ATTR_TYPE_OTHER 0x07 /**< Other, non-GATT specific type. */ -+/** @} */ -+ -+ -+/** @defgroup BLE_GATTS_OPS GATT Server Operations -+ * @{ */ -+#define BLE_GATTS_OP_INVALID 0x00 /**< Invalid Operation. */ -+#define BLE_GATTS_OP_WRITE_REQ 0x01 /**< Write Request. */ -+#define BLE_GATTS_OP_WRITE_CMD 0x02 /**< Write Command. */ -+#define BLE_GATTS_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ -+#define BLE_GATTS_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ -+#define BLE_GATTS_OP_EXEC_WRITE_REQ_CANCEL 0x05 /**< Execute Write Request: Cancel all prepared writes. */ -+#define BLE_GATTS_OP_EXEC_WRITE_REQ_NOW 0x06 /**< Execute Write Request: Immediately execute all prepared writes. */ -+/** @} */ -+ -+/** @defgroup BLE_GATTS_VLOCS GATT Value Locations -+ * @{ */ -+#define BLE_GATTS_VLOC_INVALID 0x00 /**< Invalid Location. */ -+#define BLE_GATTS_VLOC_STACK 0x01 /**< Attribute Value is located in stack memory, no user memory is required. */ -+#define BLE_GATTS_VLOC_USER 0x02 /**< Attribute Value is located in user memory. This requires the user to maintain a valid buffer through the lifetime of the attribute, since the stack -+ will read and write directly to the memory using the pointer provided in the APIs. There are no alignment requirements for the buffer. */ -+/** @} */ -+ -+/** @defgroup BLE_GATTS_AUTHORIZE_TYPES GATT Server Authorization Types -+ * @{ */ -+#define BLE_GATTS_AUTHORIZE_TYPE_INVALID 0x00 /**< Invalid Type. */ -+#define BLE_GATTS_AUTHORIZE_TYPE_READ 0x01 /**< Authorize a Read Operation. */ -+#define BLE_GATTS_AUTHORIZE_TYPE_WRITE 0x02 /**< Authorize a Write Request Operation. */ -+/** @} */ -+ -+/** @defgroup BLE_GATTS_SYS_ATTR_FLAGS System Attribute Flags -+ * @{ */ -+#define BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS (1 << 0) /**< Restrict system attributes to system services only. */ -+#define BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS (1 << 1) /**< Restrict system attributes to user services only. */ -+/** @} */ -+ -+/** @defgroup BLE_GATTS_SERVICE_CHANGED Service Changed Inclusion Values -+ * @{ -+ */ -+#define BLE_GATTS_SERVICE_CHANGED_DEFAULT (1) /**< Default is to include the Service Changed characteristic in the Attribute Table. */ -+/** @} */ -+ -+/** @defgroup BLE_GATTS_ATTR_TAB_SIZE Attribute Table size -+ * @{ -+ */ -+#define BLE_GATTS_ATTR_TAB_SIZE_MIN (248) /**< Minimum Attribute Table size */ -+#define BLE_GATTS_ATTR_TAB_SIZE_DEFAULT (1408) /**< Default Attribute Table size. */ -+/** @} */ -+ -+/** @defgroup BLE_GATTS_DEFAULTS GATT Server defaults -+ * @{ -+ */ -+#define BLE_GATTS_HVN_TX_QUEUE_SIZE_DEFAULT 1 /**< Default number of Handle Value Notifications that can be queued for transmission. */ -+/** @} */ -+ -+/** @} */ -+ -+/** @addtogroup BLE_GATTS_STRUCTURES Structures -+ * @{ */ -+ -+/** -+ * @brief BLE GATTS connection configuration parameters, set with @ref sd_ble_cfg_set. -+ */ -+typedef struct -+{ -+ uint8_t hvn_tx_queue_size; /**< Minimum guaranteed number of Handle Value Notifications that can be queued for transmission. -+ The default value is @ref BLE_GATTS_HVN_TX_QUEUE_SIZE_DEFAULT */ -+} ble_gatts_conn_cfg_t; -+ -+/**@brief Attribute metadata. */ -+typedef struct -+{ -+ ble_gap_conn_sec_mode_t read_perm; /**< Read permissions. */ -+ ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ -+ uint8_t vlen :1; /**< Variable length attribute. */ -+ uint8_t vloc :2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ -+ uint8_t rd_auth :1; /**< Read authorization and value will be requested from the application on every read operation. */ -+ uint8_t wr_auth :1; /**< Write authorization will be requested from the application on every Write Request operation (but not Write Command). */ -+} ble_gatts_attr_md_t; -+ -+ -+/**@brief GATT Attribute. */ -+typedef struct -+{ -+ ble_uuid_t const *p_uuid; /**< Pointer to the attribute UUID. */ -+ ble_gatts_attr_md_t const *p_attr_md; /**< Pointer to the attribute metadata structure. */ -+ uint16_t init_len; /**< Initial attribute value length in bytes. */ -+ uint16_t init_offs; /**< Initial attribute value offset in bytes. If different from zero, the first init_offs bytes of the attribute value will be left uninitialized. */ -+ uint16_t max_len; /**< Maximum attribute value length in bytes, see @ref BLE_GATTS_ATTR_LENS_MAX for maximum values. */ -+ uint8_t *p_value; /**< Pointer to the attribute data. Please note that if the @ref BLE_GATTS_VLOC_USER value location is selected in the attribute metadata, this will have to point to a buffer -+ that remains valid through the lifetime of the attribute. This excludes usage of automatic variables that may go out of scope or any other temporary location. -+ The stack may access that memory directly without the application's knowledge. For writable characteristics, this value must not be a location in flash memory.*/ -+} ble_gatts_attr_t; -+ -+/**@brief GATT Attribute Value. */ -+typedef struct -+{ -+ uint16_t len; /**< Length in bytes to be written or read. Length in bytes written or read after successful return.*/ -+ uint16_t offset; /**< Attribute value offset. */ -+ uint8_t *p_value; /**< Pointer to where value is stored or will be stored. -+ If value is stored in user memory, only the attribute length is updated when p_value == NULL. -+ Set to NULL when reading to obtain the complete length of the attribute value */ -+} ble_gatts_value_t; -+ -+ -+/**@brief GATT Characteristic Presentation Format. */ -+typedef struct -+{ -+ uint8_t format; /**< Format of the value, see @ref BLE_GATT_CPF_FORMATS. */ -+ int8_t exponent; /**< Exponent for integer data types. */ -+ uint16_t unit; /**< Unit from Bluetooth Assigned Numbers. */ -+ uint8_t name_space; /**< Namespace from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ -+ uint16_t desc; /**< Namespace description from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ -+} ble_gatts_char_pf_t; -+ -+ -+/**@brief GATT Characteristic metadata. */ -+typedef struct -+{ -+ ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ -+ ble_gatt_char_ext_props_t char_ext_props; /**< Characteristic Extended Properties. */ -+ uint8_t const *p_char_user_desc; /**< Pointer to a UTF-8 encoded string (non-NULL terminated), NULL if the descriptor is not required. */ -+ uint16_t char_user_desc_max_size; /**< The maximum size in bytes of the user description descriptor. */ -+ uint16_t char_user_desc_size; /**< The size of the user description, must be smaller or equal to char_user_desc_max_size. */ -+ ble_gatts_char_pf_t const *p_char_pf; /**< Pointer to a presentation format structure or NULL if the CPF descriptor is not required. */ -+ ble_gatts_attr_md_t const *p_user_desc_md; /**< Attribute metadata for the User Description descriptor, or NULL for default values. */ -+ ble_gatts_attr_md_t const *p_cccd_md; /**< Attribute metadata for the Client Characteristic Configuration Descriptor, or NULL for default values. */ -+ ble_gatts_attr_md_t const *p_sccd_md; /**< Attribute metadata for the Server Characteristic Configuration Descriptor, or NULL for default values. */ -+} ble_gatts_char_md_t; -+ -+ -+/**@brief GATT Characteristic Definition Handles. */ -+typedef struct -+{ -+ uint16_t value_handle; /**< Handle to the characteristic value. */ -+ uint16_t user_desc_handle; /**< Handle to the User Description descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ -+ uint16_t cccd_handle; /**< Handle to the Client Characteristic Configuration Descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ -+ uint16_t sccd_handle; /**< Handle to the Server Characteristic Configuration Descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ -+} ble_gatts_char_handles_t; -+ -+ -+/**@brief GATT HVx parameters. */ -+typedef struct -+{ -+ uint16_t handle; /**< Characteristic Value Handle. */ -+ uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ -+ uint16_t offset; /**< Offset within the attribute value. */ -+ uint16_t *p_len; /**< Length in bytes to be written, length in bytes written after successful return. */ -+ uint8_t const *p_data; /**< Actual data content, use NULL to use the current attribute value. */ -+} ble_gatts_hvx_params_t; -+ -+/**@brief GATT Authorization parameters. */ -+typedef struct -+{ -+ uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ -+ uint8_t update : 1; /**< If set, data supplied in p_data will be used to update the attribute value. -+ Please note that for @ref BLE_GATTS_AUTHORIZE_TYPE_WRITE operations this bit must always be set, -+ as the data to be written needs to be stored and later provided by the application. */ -+ uint16_t offset; /**< Offset of the attribute value being updated. */ -+ uint16_t len; /**< Length in bytes of the value in p_data pointer, see @ref BLE_GATTS_ATTR_LENS_MAX. */ -+ uint8_t const *p_data; /**< Pointer to new value used to update the attribute value. */ -+} ble_gatts_authorize_params_t; -+ -+/**@brief GATT Read or Write Authorize Reply parameters. */ -+typedef struct -+{ -+ uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ -+ union { -+ ble_gatts_authorize_params_t read; /**< Read authorization parameters. */ -+ ble_gatts_authorize_params_t write; /**< Write authorization parameters. */ -+ } params; /**< Reply Parameters. */ -+} ble_gatts_rw_authorize_reply_params_t; -+ -+/**@brief Service Changed Inclusion configuration parameters, set with @ref sd_ble_cfg_set. */ -+typedef struct -+{ -+ uint8_t service_changed : 1; /**< If 1, include the Service Changed characteristic in the Attribute Table. Default is @ref BLE_GATTS_SERVICE_CHANGED_DEFAULT. */ -+} ble_gatts_cfg_service_changed_t; -+ -+/**@brief Attribute table size configuration parameters, set with @ref sd_ble_cfg_set. -+ * -+ * @retval ::NRF_ERROR_INVALID_LENGTH One or more of the following is true: -+ * - The specified Attribute Table size is too small. -+ * The minimum acceptable size is defined by @ref BLE_GATTS_ATTR_TAB_SIZE_MIN. -+ * - The specified Attribute Table size is not a multiple of 4. -+ */ -+typedef struct -+{ -+ uint32_t attr_tab_size; /**< Attribute table size. Default is @ref BLE_GATTS_ATTR_TAB_SIZE_DEFAULT, minimum is @ref BLE_GATTS_ATTR_TAB_SIZE_MIN. */ -+} ble_gatts_cfg_attr_tab_size_t; -+ -+/**@brief Config structure for GATTS configurations. */ -+typedef union -+{ -+ ble_gatts_cfg_service_changed_t service_changed; /**< Include service changed characteristic, cfg_id is @ref BLE_GATTS_CFG_SERVICE_CHANGED. */ -+ ble_gatts_cfg_attr_tab_size_t attr_tab_size; /**< Attribute table size, cfg_id is @ref BLE_GATTS_CFG_ATTR_TAB_SIZE. */ -+} ble_gatts_cfg_t; -+ -+ -+/**@brief Event structure for @ref BLE_GATTS_EVT_WRITE. */ -+typedef struct -+{ -+ uint16_t handle; /**< Attribute Handle. */ -+ ble_uuid_t uuid; /**< Attribute UUID. */ -+ uint8_t op; /**< Type of write operation, see @ref BLE_GATTS_OPS. */ -+ uint8_t auth_required; /**< Writing operation deferred due to authorization requirement. Application may use @ref sd_ble_gatts_value_set to finalize the writing operation. */ -+ uint16_t offset; /**< Offset for the write operation. */ -+ uint16_t len; /**< Length of the received data. */ -+ uint8_t data[1]; /**< Received data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. -+ See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -+} ble_gatts_evt_write_t; -+ -+/**@brief Event substructure for authorized read requests, see @ref ble_gatts_evt_rw_authorize_request_t. */ -+typedef struct -+{ -+ uint16_t handle; /**< Attribute Handle. */ -+ ble_uuid_t uuid; /**< Attribute UUID. */ -+ uint16_t offset; /**< Offset for the read operation. */ -+} ble_gatts_evt_read_t; -+ -+/**@brief Event structure for @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST. */ -+typedef struct -+{ -+ uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ -+ union { -+ ble_gatts_evt_read_t read; /**< Attribute Read Parameters. */ -+ ble_gatts_evt_write_t write; /**< Attribute Write Parameters. */ -+ } request; /**< Request Parameters. */ -+} ble_gatts_evt_rw_authorize_request_t; -+ -+/**@brief Event structure for @ref BLE_GATTS_EVT_SYS_ATTR_MISSING. */ -+typedef struct -+{ -+ uint8_t hint; /**< Hint (currently unused). */ -+} ble_gatts_evt_sys_attr_missing_t; -+ -+ -+/**@brief Event structure for @ref BLE_GATTS_EVT_HVC. */ -+typedef struct -+{ -+ uint16_t handle; /**< Attribute Handle. */ -+} ble_gatts_evt_hvc_t; -+ -+/**@brief Event structure for @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST. */ -+typedef struct -+{ -+ uint16_t client_rx_mtu; /**< Client RX MTU size. */ -+} ble_gatts_evt_exchange_mtu_request_t; -+ -+/**@brief Event structure for @ref BLE_GATTS_EVT_TIMEOUT. */ -+typedef struct -+{ -+ uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ -+} ble_gatts_evt_timeout_t; -+ -+/**@brief Event structure for @ref BLE_GATTS_EVT_HVN_TX_COMPLETE. */ -+typedef struct -+{ -+ uint8_t count; /**< Number of notification transmissions completed. */ -+} ble_gatts_evt_hvn_tx_complete_t; -+ -+/**@brief GATTS event structure. */ -+typedef struct -+{ -+ uint16_t conn_handle; /**< Connection Handle on which the event occurred. */ -+ union -+ { -+ ble_gatts_evt_write_t write; /**< Write Event Parameters. */ -+ ble_gatts_evt_rw_authorize_request_t authorize_request; /**< Read or Write Authorize Request Parameters. */ -+ ble_gatts_evt_sys_attr_missing_t sys_attr_missing; /**< System attributes missing. */ -+ ble_gatts_evt_hvc_t hvc; /**< Handle Value Confirmation Event Parameters. */ -+ ble_gatts_evt_exchange_mtu_request_t exchange_mtu_request; /**< Exchange MTU Request Event Parameters. */ -+ ble_gatts_evt_timeout_t timeout; /**< Timeout Event. */ -+ ble_gatts_evt_hvn_tx_complete_t hvn_tx_complete; /**< Handle Value Notification transmission complete Event Parameters. */ -+ } params; /**< Event Parameters. */ -+} ble_gatts_evt_t; -+ -+/** @} */ -+ -+/** @addtogroup BLE_GATTS_FUNCTIONS Functions -+ * @{ */ -+ -+/**@brief Add a service declaration to the Attribute Table. -+ * -+ * @note Secondary Services are only relevant in the context of the entity that references them, it is therefore forbidden to -+ * add a secondary service declaration that is not referenced by another service later in the Attribute Table. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} -+ * @endmscs -+ * -+ * @param[in] type Toggles between primary and secondary services, see @ref BLE_GATTS_SRVC_TYPES. -+ * @param[in] p_uuid Pointer to service UUID. -+ * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. -+ * -+ * @retval ::NRF_SUCCESS Successfully added a service declaration. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, Vendor Specific UUIDs need to be present in the table. -+ * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. -+ * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. -+ */ -+SVCALL(SD_BLE_GATTS_SERVICE_ADD, uint32_t, sd_ble_gatts_service_add(uint8_t type, ble_uuid_t const *p_uuid, uint16_t *p_handle)); -+ -+ -+/**@brief Add an include declaration to the Attribute Table. -+ * -+ * @note It is currently only possible to add an include declaration to the last added service (i.e. only sequential population is supported at this time). -+ * -+ * @note The included service must already be present in the Attribute Table prior to this call. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} -+ * @endmscs -+ * -+ * @param[in] service_handle Handle of the service where the included service is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. -+ * @param[in] inc_srvc_handle Handle of the included service. -+ * @param[out] p_include_handle Pointer to a 16-bit word where the assigned handle will be stored. -+ * -+ * @retval ::NRF_SUCCESS Successfully added an include declaration. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, handle values need to match previously added services. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. -+ * @retval ::NRF_ERROR_NOT_SUPPORTED Feature is not supported, service_handle must be that of the last added service. -+ * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, self inclusions are not allowed. -+ * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. -+ * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. -+ */ -+SVCALL(SD_BLE_GATTS_INCLUDE_ADD, uint32_t, sd_ble_gatts_include_add(uint16_t service_handle, uint16_t inc_srvc_handle, uint16_t *p_include_handle)); -+ -+ -+/**@brief Add a characteristic declaration, a characteristic value declaration and optional characteristic descriptor declarations to the Attribute Table. -+ * -+ * @note It is currently only possible to add a characteristic to the last added service (i.e. only sequential population is supported at this time). -+ * -+ * @note Several restrictions apply to the parameters, such as matching permissions between the user description descriptor and the writable auxiliaries bits, -+ * readable (no security) and writable (selectable) CCCDs and SCCDs and valid presentation format values. -+ * -+ * @note If no metadata is provided for the optional descriptors, their permissions will be derived from the characteristic permissions. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} -+ * @endmscs -+ * -+ * @param[in] service_handle Handle of the service where the characteristic is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. -+ * @param[in] p_char_md Characteristic metadata. -+ * @param[in] p_attr_char_value Pointer to the attribute structure corresponding to the characteristic value. -+ * @param[out] p_handles Pointer to the structure where the assigned handles will be stored. -+ * -+ * @retval ::NRF_SUCCESS Successfully added a characteristic. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, service handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a service context is required. -+ * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. -+ * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. -+ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. -+ */ -+SVCALL(SD_BLE_GATTS_CHARACTERISTIC_ADD, uint32_t, sd_ble_gatts_characteristic_add(uint16_t service_handle, ble_gatts_char_md_t const *p_char_md, ble_gatts_attr_t const *p_attr_char_value, ble_gatts_char_handles_t *p_handles)); -+ -+ -+/**@brief Add a descriptor to the Attribute Table. -+ * -+ * @note It is currently only possible to add a descriptor to the last added characteristic (i.e. only sequential population is supported at this time). -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} -+ * @endmscs -+ * -+ * @param[in] char_handle Handle of the characteristic where the descriptor is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. -+ * @param[in] p_attr Pointer to the attribute structure. -+ * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. -+ * -+ * @retval ::NRF_SUCCESS Successfully added a descriptor. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, characteristic handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a characteristic context is required. -+ * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. -+ * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. -+ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. -+ */ -+SVCALL(SD_BLE_GATTS_DESCRIPTOR_ADD, uint32_t, sd_ble_gatts_descriptor_add(uint16_t char_handle, ble_gatts_attr_t const *p_attr, uint16_t *p_handle)); -+ -+/**@brief Set the value of a given attribute. -+ * -+ * @note Values other than system attributes can be set at any time, regardless of whether any active connections exist. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} -+ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. Ignored if the value does not belong to a system attribute. -+ * @param[in] handle Attribute handle. -+ * @param[in,out] p_value Attribute value information. -+ * -+ * @retval ::NRF_SUCCESS Successfully set the value of the attribute. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. -+ * @retval ::NRF_ERROR_FORBIDDEN Forbidden handle supplied, certain attributes are not modifiable by the application. -+ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied on a system attribute. -+ */ -+SVCALL(SD_BLE_GATTS_VALUE_SET, uint32_t, sd_ble_gatts_value_set(uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value)); -+ -+/**@brief Get the value of a given attribute. -+ * -+ * @note If the attribute value is longer than the size of the supplied buffer, -+ * p_len will return the total attribute value length (excluding offset), -+ * and not the number of bytes actually returned in p_data. -+ * The application may use this information to allocate a suitable buffer size. -+ * -+ * @note When retrieving system attribute values with this function, the connection handle -+ * may refer to an already disconnected connection. Refer to the documentation of -+ * @ref sd_ble_gatts_sys_attr_get for further information. -+ * -+ * @param[in] conn_handle Connection handle. Ignored if the value does not belong to a system attribute. -+ * @param[in] handle Attribute handle. -+ * @param[in,out] p_value Attribute value information. -+ * -+ * @retval ::NRF_SUCCESS Successfully retrieved the value of the attribute. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid attribute offset supplied. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied on a system attribute. -+ * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. -+ */ -+SVCALL(SD_BLE_GATTS_VALUE_GET, uint32_t, sd_ble_gatts_value_get(uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value)); -+ -+/**@brief Notify or Indicate an attribute value. -+ * -+ * @details This function checks for the relevant Client Characteristic Configuration descriptor value to verify that the relevant operation -+ * (notification or indication) has been enabled by the client. It is also able to update the attribute value before issuing the PDU, so that -+ * the application can atomically perform a value update and a server initiated transaction with a single API call. -+ * -+ * @note The local attribute value may be updated even if an outgoing packet is not sent to the peer due to an error during execution. -+ * The Attribute Table has been updated if one of the following error codes is returned: @ref NRF_ERROR_INVALID_STATE, @ref NRF_ERROR_BUSY, -+ * @ref NRF_ERROR_FORBIDDEN, @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING and @ref NRF_ERROR_RESOURCES. -+ * The caller can check whether the value has been updated by looking at the contents of *(p_hvx_params->p_len). -+ * -+ * @note Only one indication procedure can be ongoing per connection at a time. -+ * If the application tries to indicate an attribute value while another indication procedure is ongoing, -+ * the function call will return @ref NRF_ERROR_BUSY. -+ * A @ref BLE_GATTS_EVT_HVC event will be issued as soon as the confirmation arrives from the peer. -+ * -+ * @note The number of Handle Value Notifications that can be queued is configured by @ref ble_gatts_conn_cfg_t::hvn_tx_queue_size -+ * When the queue is full, the function call will return @ref NRF_ERROR_RESOURCES. -+ * A @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event will be issued as soon as the transmission of the notification is complete. -+ * -+ * @note The application can keep track of the available queue element count for notifications by following the procedure below: -+ * - Store initial queue element count in a variable. -+ * - Decrement the variable, which stores the currently available queue element count, by one when a call to this function returns @ref NRF_SUCCESS. -+ * - Increment the variable, which stores the current available queue element count, by the count variable in @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event. -+ * -+ * @events -+ * @event{@ref BLE_GATTS_EVT_HVN_TX_COMPLETE, Notification transmission complete.} -+ * @event{@ref BLE_GATTS_EVT_HVC, Confirmation received from the peer.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTS_HVX_SYS_ATTRS_MISSING_MSC} -+ * @mmsc{@ref BLE_GATTS_HVN_MSC} -+ * @mmsc{@ref BLE_GATTS_HVI_MSC} -+ * @mmsc{@ref BLE_GATTS_HVX_DISABLED_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] p_hvx_params Pointer to an HVx parameters structure. If the p_data member contains a non-NULL pointer the attribute value will be updated with -+ * the contents pointed by it before sending the notification or indication. -+ * -+ * @retval ::NRF_SUCCESS Successfully queued a notification or indication for transmission, and optionally updated the attribute value. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE One or more of the following is true: -+ * - Invalid Connection State -+ * - Notifications and/or indications not enabled in the CCCD -+ * - An ATT_MTU exchange is ongoing -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied. Only attributes added directly by the application are available to notify and indicate. -+ * @retval ::BLE_ERROR_GATTS_INVALID_ATTR_TYPE Invalid attribute type(s) supplied, only characteristic values may be notified and indicated. -+ * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. -+ * @retval ::NRF_ERROR_FORBIDDEN The connection's current security level is lower than the one required by the write permissions of the CCCD associated with this characteristic. -+ * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. -+ * @retval ::NRF_ERROR_BUSY For @ref BLE_GATT_HVX_INDICATION, GATT Server procedure already in progress or blocked because of a previous GATT procedure timeout. -+ Wait for a @ref BLE_GATTS_EVT_HVC event and retry. -+ For @ref BLE_GATT_HVX_NOTIFICATION it can only mean GATT procedure timeout. -+ * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. -+ * @retval ::NRF_ERROR_RESOURCES Too many notifications queued. -+ * Wait for a @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event and retry. -+ */ -+SVCALL(SD_BLE_GATTS_HVX, uint32_t, sd_ble_gatts_hvx(uint16_t conn_handle, ble_gatts_hvx_params_t const *p_hvx_params)); -+ -+/**@brief Indicate the Service Changed attribute value. -+ * -+ * @details This call will send a Handle Value Indication to one or more peers connected to inform them that the Attribute -+ * Table layout has changed. As soon as the peer has confirmed the indication, a @ref BLE_GATTS_EVT_SC_CONFIRM event will -+ * be issued. -+ * -+ * @note Some of the restrictions and limitations that apply to @ref sd_ble_gatts_hvx also apply here. -+ * -+ * @events -+ * @event{@ref BLE_GATTS_EVT_SC_CONFIRM, Confirmation of attribute table change received from peer.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTS_SC_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] start_handle Start of affected attribute handle range. -+ * @param[in] end_handle End of affected attribute handle range. -+ * -+ * @retval ::NRF_SUCCESS Successfully queued the Service Changed indication for transmission. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_NOT_SUPPORTED Service Changed not enabled at initialization. See @ref -+ * sd_ble_cfg_set and @ref ble_gatts_cfg_service_changed_t. -+ * @retval ::NRF_ERROR_INVALID_STATE One or more of the following is true: -+ * - Invalid Connection State -+ * - Notifications and/or indications not enabled in the CCCD -+ * - An ATT_MTU exchange is ongoing -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied, handles must be in the range populated by the application. -+ * @retval ::NRF_ERROR_BUSY GATT Server procedure already in progress or blocked because of a previous GATT procedure timeout. -+ * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. -+ */ -+SVCALL(SD_BLE_GATTS_SERVICE_CHANGED, uint32_t, sd_ble_gatts_service_changed(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle)); -+ -+/**@brief Respond to a Read/Write authorization request. -+ * -+ * @note This call should only be used as a response to a @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST event issued to the application. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC} -+ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC} -+ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} -+ * @mmsc{@ref BLE_GATTS_READ_REQ_AUTH_MSC} -+ * @mmsc{@ref BLE_GATTS_WRITE_REQ_AUTH_MSC} -+ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} -+ * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_PEER_CANCEL_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] p_rw_authorize_reply_params Pointer to a structure with the attribute provided by the application. -+ * -+ * @note @ref ble_gatts_authorize_params_t::p_data is ignored when this function is used to respond -+ * to a @ref BLE_GATTS_AUTHORIZE_TYPE_READ event if @ref ble_gatts_authorize_params_t::update -+ * is set to 0. -+ * -+ * @retval ::NRF_SUCCESS Successfully queued a response to the peer, and in the case of a write operation, Attribute Table updated. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no authorization request pending. -+ * @retval ::NRF_ERROR_INVALID_PARAM Authorization op invalid, -+ * handle supplied does not match requested handle, -+ * or invalid data to be written provided by the application. -+ */ -+SVCALL(SD_BLE_GATTS_RW_AUTHORIZE_REPLY, uint32_t, sd_ble_gatts_rw_authorize_reply(uint16_t conn_handle, ble_gatts_rw_authorize_reply_params_t const *p_rw_authorize_reply_params)); -+ -+ -+/**@brief Update persistent system attribute information. -+ * -+ * @details Supply information about persistent system attributes to the stack, -+ * previously obtained using @ref sd_ble_gatts_sys_attr_get. -+ * This call is only allowed for active connections, and is usually -+ * made immediately after a connection is established with an known bonded device, -+ * often as a response to a @ref BLE_GATTS_EVT_SYS_ATTR_MISSING. -+ * -+ * p_sysattrs may point directly to the application's stored copy of the system attributes -+ * obtained using @ref sd_ble_gatts_sys_attr_get. -+ * If the pointer is NULL, the system attribute info is initialized, assuming that -+ * the application does not have any previously saved system attribute data for this device. -+ * -+ * @note The state of persistent system attributes is reset upon connection establishment and then remembered for its duration. -+ * -+ * @note If this call returns with an error code different from @ref NRF_SUCCESS, the storage of persistent system attributes may have been completed only partially. -+ * This means that the state of the attribute table is undefined, and the application should either provide a new set of attributes using this same call or -+ * reset the SoftDevice to return to a known state. -+ * -+ * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS is used with this function, only the system attributes included in system services will be modified. -+ * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS is used with this function, only the system attributes included in user services will be modified. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTS_HVX_SYS_ATTRS_MISSING_MSC} -+ * @mmsc{@ref BLE_GATTS_SYS_ATTRS_UNK_PEER_MSC} -+ * @mmsc{@ref BLE_GATTS_SYS_ATTRS_BONDED_PEER_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle. -+ * @param[in] p_sys_attr_data Pointer to a saved copy of system attributes supplied to the stack, or NULL. -+ * @param[in] len Size of data pointed by p_sys_attr_data, in octets. -+ * @param[in] flags Optional additional flags, see @ref BLE_GATTS_SYS_ATTR_FLAGS -+ * -+ * @retval ::NRF_SUCCESS Successfully set the system attribute information. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid flags supplied. -+ * @retval ::NRF_ERROR_INVALID_DATA Invalid data supplied, the data should be exactly the same as retrieved with @ref sd_ble_gatts_sys_attr_get. -+ * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. -+ */ -+SVCALL(SD_BLE_GATTS_SYS_ATTR_SET, uint32_t, sd_ble_gatts_sys_attr_set(uint16_t conn_handle, uint8_t const *p_sys_attr_data, uint16_t len, uint32_t flags)); -+ -+ -+/**@brief Retrieve persistent system attribute information from the stack. -+ * -+ * @details This call is used to retrieve information about values to be stored persistently by the application -+ * during the lifetime of a connection or after it has been terminated. When a new connection is established with the same bonded device, -+ * the system attribute information retrieved with this function should be restored using using @ref sd_ble_gatts_sys_attr_set. -+ * If retrieved after disconnection, the data should be read before a new connection established. The connection handle for -+ * the previous, now disconnected, connection will remain valid until a new one is created to allow this API call to refer to it. -+ * Connection handles belonging to active connections can be used as well, but care should be taken since the system attributes -+ * may be written to at any time by the peer during a connection's lifetime. -+ * -+ * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS is used with this function, only the system attributes included in system services will be returned. -+ * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS is used with this function, only the system attributes included in user services will be returned. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTS_SYS_ATTRS_BONDED_PEER_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection handle of the recently terminated connection. -+ * @param[out] p_sys_attr_data Pointer to a buffer where updated information about system attributes will be filled in. The format of the data is described -+ * in @ref BLE_GATTS_SYS_ATTRS_FORMAT. NULL can be provided to obtain the length of the data. -+ * @param[in,out] p_len Size of application buffer if p_sys_attr_data is not NULL. Unconditionally updated to actual length of system attribute data. -+ * @param[in] flags Optional additional flags, see @ref BLE_GATTS_SYS_ATTR_FLAGS -+ * -+ * @retval ::NRF_SUCCESS Successfully retrieved the system attribute information. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid flags supplied. -+ * @retval ::NRF_ERROR_DATA_SIZE The system attribute information did not fit into the provided buffer. -+ * @retval ::NRF_ERROR_NOT_FOUND No system attributes found. -+ */ -+SVCALL(SD_BLE_GATTS_SYS_ATTR_GET, uint32_t, sd_ble_gatts_sys_attr_get(uint16_t conn_handle, uint8_t *p_sys_attr_data, uint16_t *p_len, uint32_t flags)); -+ -+ -+/**@brief Retrieve the first valid user attribute handle. -+ * -+ * @param[out] p_handle Pointer to an integer where the handle will be stored. -+ * -+ * @retval ::NRF_SUCCESS Successfully retrieved the handle. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ */ -+SVCALL(SD_BLE_GATTS_INITIAL_USER_HANDLE_GET, uint32_t, sd_ble_gatts_initial_user_handle_get(uint16_t *p_handle)); -+ -+/**@brief Retrieve the attribute UUID and/or metadata. -+ * -+ * @param[in] handle Attribute handle -+ * @param[out] p_uuid UUID of the attribute. Use NULL to omit this field. -+ * @param[out] p_md Metadata of the attribute. Use NULL to omit this field. -+ * -+ * @retval ::NRF_SUCCESS Successfully retrieved the attribute metadata, -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameters supplied. Returned when both @c p_uuid and @c p_md are NULL. -+ * @retval ::NRF_ERROR_NOT_FOUND Attribute was not found. -+ */ -+SVCALL(SD_BLE_GATTS_ATTR_GET, uint32_t, sd_ble_gatts_attr_get(uint16_t handle, ble_uuid_t * p_uuid, ble_gatts_attr_md_t * p_md)); -+ -+/**@brief Reply to an ATT_MTU exchange request by sending an Exchange MTU Response to the client. -+ * -+ * @details This function is only used to reply to a @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST event. -+ * -+ * @details The SoftDevice sets ATT_MTU to the minimum of: -+ * - The Client RX MTU value from @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST, and -+ * - The Server RX MTU value. -+ * -+ * However, the SoftDevice never sets ATT_MTU lower than @ref BLE_GATT_ATT_MTU_DEFAULT. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_GATTS_MTU_EXCHANGE} -+ * @endmscs -+ * -+ * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. -+ * @param[in] server_rx_mtu Server RX MTU size. -+ * - The minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. -+ * - The maximum value is @ref ble_gatt_conn_cfg_t::att_mtu in the connection configuration -+ * used for this connection. -+ * - The value must be equal to Client RX MTU size given in @ref sd_ble_gattc_exchange_mtu_request -+ * if an ATT_MTU exchange has already been performed in the other direction. -+ * -+ * @retval ::NRF_SUCCESS Successfully sent response to the client. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no ATT_MTU exchange request pending. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid Server RX MTU size supplied. -+ * @retval ::NRF_ERROR_BUSY GATT Blocked because of a previous GATT procedure timeout. -+ */ -+SVCALL(SD_BLE_GATTS_EXCHANGE_MTU_REPLY, uint32_t, sd_ble_gatts_exchange_mtu_reply(uint16_t conn_handle, uint16_t server_rx_mtu)); -+/** @} */ -+ -+#ifdef __cplusplus -+} -+#endif -+#endif // BLE_GATTS_H__ -+ -+/** -+ @} -+*/ -diff -u -r -N a/components/softdevice/s132v5/headers/ble_hci.h b/components/softdevice/s132v5/headers/ble_hci.h ---- a/components/softdevice/s132v5/headers/ble_hci.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v5/headers/ble_hci.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,135 @@ -+/* -+ * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form, except as embedded into a Nordic -+ * Semiconductor ASA integrated circuit in a product or a software update for -+ * such product, must reproduce the above copyright notice, this list of -+ * conditions and the following disclaimer in the documentation and/or other -+ * materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its -+ * contributors may be used to endorse or promote products derived from this -+ * software without specific prior written permission. -+ * -+ * 4. This software, with or without modification, must only be used with a -+ * Nordic Semiconductor ASA integrated circuit. -+ * -+ * 5. Any software provided in binary form under this license must not be reverse -+ * engineered, decompiled, modified and/or disassembled. -+ * -+ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -+ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ */ -+ -+/** -+ @addtogroup BLE_COMMON -+ @{ -+*/ -+ -+ -+#ifndef BLE_HCI_H__ -+#define BLE_HCI_H__ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/** @defgroup BLE_HCI_STATUS_CODES Bluetooth status codes -+ * @{ */ -+ -+#define BLE_HCI_STATUS_CODE_SUCCESS 0x00 /**< Success. */ -+#define BLE_HCI_STATUS_CODE_UNKNOWN_BTLE_COMMAND 0x01 /**< Unknown BLE Command. */ -+#define BLE_HCI_STATUS_CODE_UNKNOWN_CONNECTION_IDENTIFIER 0x02 /**< Unknown Connection Identifier. */ -+/*0x03 Hardware Failure -+0x04 Page Timeout -+*/ -+#define BLE_HCI_AUTHENTICATION_FAILURE 0x05 /**< Authentication Failure. */ -+#define BLE_HCI_STATUS_CODE_PIN_OR_KEY_MISSING 0x06 /**< Pin or Key missing. */ -+#define BLE_HCI_MEMORY_CAPACITY_EXCEEDED 0x07 /**< Memory Capacity Exceeded. */ -+#define BLE_HCI_CONNECTION_TIMEOUT 0x08 /**< Connection Timeout. */ -+/*0x09 Connection Limit Exceeded -+0x0A Synchronous Connection Limit To A Device Exceeded -+0x0B ACL Connection Already Exists*/ -+#define BLE_HCI_STATUS_CODE_COMMAND_DISALLOWED 0x0C /**< Command Disallowed. */ -+/*0x0D Connection Rejected due to Limited Resources -+0x0E Connection Rejected Due To Security Reasons -+0x0F Connection Rejected due to Unacceptable BD_ADDR -+0x10 Connection Accept Timeout Exceeded -+0x11 Unsupported Feature or Parameter Value*/ -+#define BLE_HCI_STATUS_CODE_INVALID_BTLE_COMMAND_PARAMETERS 0x12 /**< Invalid BLE Command Parameters. */ -+#define BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION 0x13 /**< Remote User Terminated Connection. */ -+#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES 0x14 /**< Remote Device Terminated Connection due to low resources.*/ -+#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF 0x15 /**< Remote Device Terminated Connection due to power off. */ -+#define BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTION 0x16 /**< Local Host Terminated Connection. */ -+/* -+0x17 Repeated Attempts -+0x18 Pairing Not Allowed -+0x19 Unknown LMP PDU -+*/ -+#define BLE_HCI_UNSUPPORTED_REMOTE_FEATURE 0x1A /**< Unsupported Remote Feature. */ -+/* -+0x1B SCO Offset Rejected -+0x1C SCO Interval Rejected -+0x1D SCO Air Mode Rejected*/ -+#define BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS 0x1E /**< Invalid LMP Parameters. */ -+#define BLE_HCI_STATUS_CODE_UNSPECIFIED_ERROR 0x1F /**< Unspecified Error. */ -+/*0x20 Unsupported LMP Parameter Value -+0x21 Role Change Not Allowed -+*/ -+#define BLE_HCI_STATUS_CODE_LMP_RESPONSE_TIMEOUT 0x22 /**< LMP Response Timeout. */ -+#define BLE_HCI_STATUS_CODE_LMP_ERROR_TRANSACTION_COLLISION 0x23 /**< LMP Error Transaction Collision/LL Procedure Collision. */ -+#define BLE_HCI_STATUS_CODE_LMP_PDU_NOT_ALLOWED 0x24 /**< LMP PDU Not Allowed. */ -+/*0x25 Encryption Mode Not Acceptable -+0x26 Link Key Can Not be Changed -+0x27 Requested QoS Not Supported -+*/ -+#define BLE_HCI_INSTANT_PASSED 0x28 /**< Instant Passed. */ -+#define BLE_HCI_PAIRING_WITH_UNIT_KEY_UNSUPPORTED 0x29 /**< Pairing with Unit Key Unsupported. */ -+#define BLE_HCI_DIFFERENT_TRANSACTION_COLLISION 0x2A /**< Different Transaction Collision. */ -+/* -+0x2B Reserved -+0x2C QoS Unacceptable Parameter -+0x2D QoS Rejected -+0x2E Channel Classification Not Supported -+0x2F Insufficient Security -+*/ -+#define BLE_HCI_PARAMETER_OUT_OF_MANDATORY_RANGE 0x30 /**< Parameter Out Of Mandatory Range. */ -+/* -+0x31 Reserved -+0x32 Role Switch Pending -+0x33 Reserved -+0x34 Reserved Slot Violation -+0x35 Role Switch Failed -+0x36 Extended Inquiry Response Too Large -+0x37 Secure Simple Pairing Not Supported By Host. -+0x38 Host Busy - Pairing -+0x39 Connection Rejected due to No Suitable Channel Found*/ -+#define BLE_HCI_CONTROLLER_BUSY 0x3A /**< Controller Busy. */ -+#define BLE_HCI_CONN_INTERVAL_UNACCEPTABLE 0x3B /**< Connection Interval Unacceptable. */ -+#define BLE_HCI_DIRECTED_ADVERTISER_TIMEOUT 0x3C /**< Directed Advertisement Timeout. */ -+#define BLE_HCI_CONN_TERMINATED_DUE_TO_MIC_FAILURE 0x3D /**< Connection Terminated due to MIC Failure. */ -+#define BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED 0x3E /**< Connection Failed to be Established. */ -+ -+/** @} */ -+ -+ -+#ifdef __cplusplus -+} -+#endif -+#endif // BLE_HCI_H__ -+ -+/** @} */ -diff -u -r -N a/components/softdevice/s132v5/headers/ble_l2cap.h b/components/softdevice/s132v5/headers/ble_l2cap.h ---- a/components/softdevice/s132v5/headers/ble_l2cap.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v5/headers/ble_l2cap.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,507 @@ -+/* -+ * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form, except as embedded into a Nordic -+ * Semiconductor ASA integrated circuit in a product or a software update for -+ * such product, must reproduce the above copyright notice, this list of -+ * conditions and the following disclaimer in the documentation and/or other -+ * materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its -+ * contributors may be used to endorse or promote products derived from this -+ * software without specific prior written permission. -+ * -+ * 4. This software, with or without modification, must only be used with a -+ * Nordic Semiconductor ASA integrated circuit. -+ * -+ * 5. Any software provided in binary form under this license must not be reverse -+ * engineered, decompiled, modified and/or disassembled. -+ * -+ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -+ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ */ -+ -+/** -+ @addtogroup BLE_L2CAP Logical Link Control and Adaptation Protocol (L2CAP) -+ @{ -+ @brief Definitions and prototypes for the L2CAP interface. -+ */ -+ -+#ifndef BLE_L2CAP_H__ -+#define BLE_L2CAP_H__ -+ -+#include -+#include "nrf_svc.h" -+#include "nrf_error.h" -+#include "ble_hci.h" -+#include "ble_ranges.h" -+#include "ble_types.h" -+#include "ble_err.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/**@addtogroup BLE_L2CAP_TERMINOLOGY Terminology -+ * @{ -+ * @details -+ * -+ * L2CAP SDU -+ * - A data unit that the application can send/receive to/from a peer. -+ * -+ * L2CAP PDU -+ * - A data unit that is exchanged between local and remote L2CAP entities. -+ * It consists of L2CAP protocol control information and payload fields. -+ * The payload field can contain an L2CAP SDU or a part of an L2CAP SDU. -+ * -+ * L2CAP MTU -+ * - The maximum length of an L2CAP SDU. -+ * -+ * L2CAP MPS -+ * - The maximum length of an L2CAP PDU payload field. -+ * -+ * Credits -+ * - A value indicating the number of L2CAP PDUs that the receiver of the credit can send to the peer. -+ * @} */ -+ -+/**@addtogroup BLE_L2CAP_ENUMERATIONS Enumerations -+ * @{ */ -+ -+/**@brief L2CAP API SVC numbers. */ -+enum BLE_L2CAP_SVCS -+{ -+ SD_BLE_L2CAP_CH_SETUP = BLE_L2CAP_SVC_BASE + 0, /**< Set up an L2CAP channel. */ -+ SD_BLE_L2CAP_CH_RELEASE = BLE_L2CAP_SVC_BASE + 1, /**< Release an L2CAP channel. */ -+ SD_BLE_L2CAP_CH_RX = BLE_L2CAP_SVC_BASE + 2, /**< Receive an SDU on an L2CAP channel. */ -+ SD_BLE_L2CAP_CH_TX = BLE_L2CAP_SVC_BASE + 3, /**< Transmit an SDU on an L2CAP channel. */ -+ SD_BLE_L2CAP_CH_FLOW_CONTROL = BLE_L2CAP_SVC_BASE + 4, /**< Advanced SDU reception flow control. */ -+}; -+ -+/**@brief L2CAP Event IDs. */ -+enum BLE_L2CAP_EVTS -+{ -+ BLE_L2CAP_EVT_CH_SETUP_REQUEST = BLE_L2CAP_EVT_BASE + 0, /**< L2CAP Channel Setup Request event. -+ \n See @ref ble_l2cap_evt_ch_setup_request_t. */ -+ BLE_L2CAP_EVT_CH_SETUP_REFUSED = BLE_L2CAP_EVT_BASE + 1, /**< L2CAP Channel Setup Refused event. -+ \n See @ref ble_l2cap_evt_ch_setup_refused_t. */ -+ BLE_L2CAP_EVT_CH_SETUP = BLE_L2CAP_EVT_BASE + 2, /**< L2CAP Channel Setup Completed event. -+ \n See @ref ble_l2cap_evt_ch_setup_t. */ -+ BLE_L2CAP_EVT_CH_RELEASED = BLE_L2CAP_EVT_BASE + 3, /**< L2CAP Channel Released event. -+ \n No additional event structure applies. */ -+ BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED = BLE_L2CAP_EVT_BASE + 4, /**< L2CAP Channel SDU data buffer released event. -+ \n See @ref ble_l2cap_evt_ch_sdu_buf_released_t. */ -+ BLE_L2CAP_EVT_CH_CREDIT = BLE_L2CAP_EVT_BASE + 5, /**< L2CAP Channel Credit received. -+ \n See @ref ble_l2cap_evt_ch_credit_t. */ -+ BLE_L2CAP_EVT_CH_RX = BLE_L2CAP_EVT_BASE + 6, /**< L2CAP Channel SDU received. -+ \n See @ref ble_l2cap_evt_ch_rx_t. */ -+ BLE_L2CAP_EVT_CH_TX = BLE_L2CAP_EVT_BASE + 7, /**< L2CAP Channel SDU transmitted. -+ \n See @ref ble_l2cap_evt_ch_tx_t. */ -+}; -+ -+/** @} */ -+ -+/**@addtogroup BLE_L2CAP_DEFINES Defines -+ * @{ */ -+ -+/**@brief Maximum number of L2CAP channels per connection. */ -+#define BLE_L2CAP_CH_COUNT_MAX (64) -+ -+/**@brief Minimum L2CAP MTU, in bytes. */ -+#define BLE_L2CAP_MTU_MIN (23) -+ -+/**@brief Minimum L2CAP MPS, in bytes. */ -+#define BLE_L2CAP_MPS_MIN (23) -+ -+/**@brief Invalid CID. */ -+#define BLE_L2CAP_CID_INVALID (0x0000) -+ -+/**@brief Default number of credits for @ref sd_ble_l2cap_ch_flow_control. */ -+#define BLE_L2CAP_CREDITS_DEFAULT (1) -+ -+/**@defgroup BLE_L2CAP_CH_SETUP_REFUSED_SRCS L2CAP channel setup refused sources -+ * @{ */ -+#define BLE_L2CAP_CH_SETUP_REFUSED_SRC_LOCAL (0x01) /**< Local. */ -+#define BLE_L2CAP_CH_SETUP_REFUSED_SRC_REMOTE (0x02) /**< Remote. */ -+ /** @} */ -+ -+ /** @defgroup BLE_L2CAP_CH_STATUS_CODES L2CAP channel status codes -+ * @{ */ -+#define BLE_L2CAP_CH_STATUS_CODE_SUCCESS (0x0000) /**< Success. */ -+#define BLE_L2CAP_CH_STATUS_CODE_LE_PSM_NOT_SUPPORTED (0x0002) /**< LE_PSM not supported. */ -+#define BLE_L2CAP_CH_STATUS_CODE_NO_RESOURCES (0x0004) /**< No resources available. */ -+#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_AUTHENTICATION (0x0005) /**< Insufficient authentication. */ -+#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_AUTHORIZATION (0x0006) /**< Insufficient authorization. */ -+#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_ENC_KEY_SIZE (0x0007) /**< Insufficient encryption key size. */ -+#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_ENC (0x0008) /**< Insufficient encryption. */ -+#define BLE_L2CAP_CH_STATUS_CODE_INVALID_SCID (0x0009) /**< Invalid Source CID. */ -+#define BLE_L2CAP_CH_STATUS_CODE_SCID_ALLOCATED (0x000A) /**< Source CID already allocated. */ -+#define BLE_L2CAP_CH_STATUS_CODE_UNACCEPTABLE_PARAMS (0x000B) /**< Unacceptable parameters. */ -+#define BLE_L2CAP_CH_STATUS_CODE_NOT_UNDERSTOOD (0x8000) /**< Command Reject received instead of LE Credit Based Connection Response. */ -+#define BLE_L2CAP_CH_STATUS_CODE_TIMEOUT (0xC000) /**< Operation timed out. */ -+/** @} */ -+ -+/** @} */ -+ -+/**@addtogroup BLE_L2CAP_STRUCTURES Structures -+ * @{ */ -+ -+/** -+ * @brief BLE L2CAP connection configuration parameters, set with @ref sd_ble_cfg_set. -+ * -+ * @note These parameters are set per connection, so all L2CAP channels created on this connection -+ * will have the same parameters. -+ * -+ * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: -+ * - rx_mps is smaller than @ref BLE_L2CAP_MPS_MIN. -+ * - tx_mps is smaller than @ref BLE_L2CAP_MPS_MIN. -+ * - ch_count is greater than @ref BLE_L2CAP_CH_COUNT_MAX. -+ * @retval ::NRF_ERROR_NO_MEM rx_mps or tx_mps is set too high. -+ */ -+typedef struct -+{ -+ uint16_t rx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall -+ be able to receive on L2CAP channels on connections with this -+ configuration. The minimum value is @ref BLE_L2CAP_MPS_MIN. */ -+ uint16_t tx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall -+ be able to transmit on L2CAP channels on connections with this -+ configuration. The minimum value is @ref BLE_L2CAP_MPS_MIN. */ -+ uint8_t rx_queue_size; /**< Number of SDU data buffers that can be queued for reception per -+ L2CAP channel. The minimum value is one. */ -+ uint8_t tx_queue_size; /**< Number of SDU data buffers that can be queued for transmission -+ per L2CAP channel. The minimum value is one. */ -+ uint8_t ch_count; /**< Number of L2CAP channels the application can create per connection -+ with this configuration. The default value is zero, the maximum -+ value is @ref BLE_L2CAP_CH_COUNT_MAX. -+ @note if this parameter is set to zero, all other parameters in -+ @ref ble_l2cap_conn_cfg_t are ignored. */ -+} ble_l2cap_conn_cfg_t; -+ -+/**@brief L2CAP channel RX parameters. */ -+typedef struct -+{ -+ uint16_t rx_mtu; /**< The maximum L2CAP SDU size, in bytes, that L2CAP shall be able to -+ receive on this L2CAP channel. -+ - Must be equal to or greater than @ref BLE_L2CAP_MTU_MIN. */ -+ uint16_t rx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall be -+ able to receive on this L2CAP channel. -+ - Must be equal to or greater than @ref BLE_L2CAP_MPS_MIN. -+ - Must be equal to or less than @ref ble_l2cap_conn_cfg_t::rx_mps. */ -+ ble_data_t sdu_buf; /**< SDU data buffer for reception. -+ - If @ref ble_data_t::p_data is non-NULL, initial credits are -+ issued to the peer. -+ - If @ref ble_data_t::p_data is NULL, no initial credits are -+ issued to the peer. */ -+} ble_l2cap_ch_rx_params_t; -+ -+/**@brief L2CAP channel setup parameters. */ -+typedef struct -+{ -+ ble_l2cap_ch_rx_params_t rx_params; /**< L2CAP channel RX parameters. */ -+ uint16_t le_psm; /**< LE Protocol/Service Multiplexer. Used when requesting -+ setup of an L2CAP channel, ignored otherwise. */ -+ uint16_t status; /**< Status code, see @ref BLE_L2CAP_CH_STATUS_CODES. -+ Used when replying to a setup request of an L2CAP -+ channel, ignored otherwise. */ -+} ble_l2cap_ch_setup_params_t; -+ -+/**@brief L2CAP channel TX parameters. */ -+typedef struct -+{ -+ uint16_t tx_mtu; /**< The maximum L2CAP SDU size, in bytes, that L2CAP is able to -+ transmit on this L2CAP channel. */ -+ uint16_t peer_mps; /**< The maximum L2CAP PDU payload size, in bytes, that the peer is -+ able to receive on this L2CAP channel. */ -+ uint16_t tx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP is able -+ to transmit on this L2CAP channel. This is effective tx_mps, -+ selected by the SoftDevice as -+ MIN( @ref ble_l2cap_ch_tx_params_t::peer_mps, @ref ble_l2cap_conn_cfg_t::tx_mps ) */ -+ uint16_t credits; /**< Initial credits given by the peer. */ -+} ble_l2cap_ch_tx_params_t; -+ -+/**@brief L2CAP Channel Setup Request event. */ -+typedef struct -+{ -+ ble_l2cap_ch_tx_params_t tx_params; /**< L2CAP channel TX parameters. */ -+ uint16_t le_psm; /**< LE Protocol/Service Multiplexer. */ -+} ble_l2cap_evt_ch_setup_request_t; -+ -+/**@brief L2CAP Channel Setup Refused event. */ -+typedef struct -+{ -+ uint8_t source; /**< Source, see @ref BLE_L2CAP_CH_SETUP_REFUSED_SRCS */ -+ uint16_t status; /**< Status code, see @ref BLE_L2CAP_CH_STATUS_CODES */ -+} ble_l2cap_evt_ch_setup_refused_t; -+ -+/**@brief L2CAP Channel Setup Completed event. */ -+typedef struct -+{ -+ ble_l2cap_ch_tx_params_t tx_params; /**< L2CAP channel TX parameters. */ -+} ble_l2cap_evt_ch_setup_t; -+ -+/**@brief L2CAP Channel SDU Data Duffer Released event. */ -+typedef struct -+{ -+ ble_data_t sdu_buf; /**< Returned reception or transmission SDU data buffer. The SoftDevice -+ returns SDU data buffers supplied by the application, which have -+ not yet been returned previously via a @ref BLE_L2CAP_EVT_CH_RX or -+ @ref BLE_L2CAP_EVT_CH_TX event. */ -+} ble_l2cap_evt_ch_sdu_buf_released_t; -+ -+/**@brief L2CAP Channel Credit received event. */ -+typedef struct -+{ -+ uint16_t credits; /**< Additional credits given by the peer. */ -+} ble_l2cap_evt_ch_credit_t; -+ -+/**@brief L2CAP Channel received SDU event. */ -+typedef struct -+{ -+ uint16_t sdu_len; /**< Total SDU length, in bytes. */ -+ ble_data_t sdu_buf; /**< SDU data buffer. -+ @note If there is not enough space in the buffer -+ (sdu_buf.len < sdu_len) then the rest of the SDU will be -+ silently discarded by the SoftDevice. */ -+} ble_l2cap_evt_ch_rx_t; -+ -+/**@brief L2CAP Channel transmitted SDU event. */ -+typedef struct -+{ -+ ble_data_t sdu_buf; /**< SDU data buffer. */ -+} ble_l2cap_evt_ch_tx_t; -+ -+/**@brief L2CAP event structure. */ -+typedef struct -+{ -+ uint16_t conn_handle; /**< Connection Handle on which the event occured. */ -+ uint16_t local_cid; /**< Local Channel ID of the L2CAP channel, or -+ @ref BLE_L2CAP_CID_INVALID if not present. */ -+ union -+ { -+ ble_l2cap_evt_ch_setup_request_t ch_setup_request; /**< L2CAP Channel Setup Request Event Parameters. */ -+ ble_l2cap_evt_ch_setup_refused_t ch_setup_refused; /**< L2CAP Channel Setup Refused Event Parameters. */ -+ ble_l2cap_evt_ch_setup_t ch_setup; /**< L2CAP Channel Setup Completed Event Parameters. */ -+ ble_l2cap_evt_ch_sdu_buf_released_t ch_sdu_buf_released;/**< L2CAP Channel SDU Data Buffer Released Event Parameters. */ -+ ble_l2cap_evt_ch_credit_t credit; /**< L2CAP Channel Credit Received Event Parameters. */ -+ ble_l2cap_evt_ch_rx_t rx; /**< L2CAP Channel SDU Received Event Parameters. */ -+ ble_l2cap_evt_ch_tx_t tx; /**< L2CAP Channel SDU Transmitted Event Parameters. */ -+ } params; /**< Event Parameters. */ -+} ble_l2cap_evt_t; -+ -+/** @} */ -+ -+/**@addtogroup BLE_L2CAP_FUNCTIONS Functions -+ * @{ */ -+ -+/**@brief Set up an L2CAP channel. -+ * -+ * @details This function is used to: -+ * - Request setup of an L2CAP channel: sends an LE Credit Based Connection Request packet to a peer. -+ * - Reply to a setup request of an L2CAP channel (if called in response to a -+ * @ref BLE_L2CAP_EVT_CH_SETUP_REQUEST event): sends an LE Credit Based Connection -+ * Response packet to a peer. -+ * -+ * @note A call to this function will require the application to keep the SDU data buffer alive -+ * until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_RX or -+ * @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. -+ * -+ * @events -+ * @event{@ref BLE_L2CAP_EVT_CH_SETUP, Setup successful.} -+ * @event{@ref BLE_L2CAP_EVT_CH_SETUP_REFUSED, Setup failed.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_L2CAP_CH_SETUP_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection Handle. -+ * @param[in,out] p_local_cid Pointer to a uint16_t containing Local Channel ID of the L2CAP channel: -+ * - As input: @ref BLE_L2CAP_CID_INVALID when requesting setup of an L2CAP -+ * channel or local_cid provided in the @ref BLE_L2CAP_EVT_CH_SETUP_REQUEST -+ * event when replying to a setup request of an L2CAP channel. -+ * - As output: local_cid for this channel. -+ * @param[in] p_params L2CAP channel parameters. -+ * -+ * @retval ::NRF_SUCCESS Successfully queued request or response for transmission. -+ * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. -+ * @retval ::NRF_ERROR_INVALID_LENGTH Supplied higher rx_mps than has been configured on this link. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (L2CAP channel already set up). -+ * @retval ::NRF_ERROR_NOT_FOUND CID not found. -+ * @retval ::NRF_ERROR_RESOURCES The limit has been reached for available L2CAP channels, -+ * see @ref ble_l2cap_conn_cfg_t::ch_count. -+ */ -+SVCALL(SD_BLE_L2CAP_CH_SETUP, uint32_t, sd_ble_l2cap_ch_setup(uint16_t conn_handle, uint16_t *p_local_cid, ble_l2cap_ch_setup_params_t const *p_params)); -+ -+/**@brief Release an L2CAP channel. -+ * -+ * @details This sends a Disconnection Request packet to a peer. -+ * -+ * @events -+ * @event{@ref BLE_L2CAP_EVT_CH_RELEASED, Release complete.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_L2CAP_CH_RELEASE_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection Handle. -+ * @param[in] local_cid Local Channel ID of the L2CAP channel. -+ * -+ * @retval ::NRF_SUCCESS Successfully queued request for transmission. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is -+ * in progress for the L2CAP channel). -+ * @retval ::NRF_ERROR_NOT_FOUND CID not found. -+ */ -+SVCALL(SD_BLE_L2CAP_CH_RELEASE, uint32_t, sd_ble_l2cap_ch_release(uint16_t conn_handle, uint16_t local_cid)); -+ -+/**@brief Receive an SDU on an L2CAP channel. -+ * -+ * @details This may issue additional credits to the peer using an LE Flow Control Credit packet. -+ * -+ * @note A call to this function will require the application to keep the memory pointed by -+ * @ref ble_data_t::p_data alive until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_RX -+ * or @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. -+ * -+ * @note The SoftDevice can queue up to @ref ble_l2cap_conn_cfg_t::rx_queue_size SDU data buffers -+ * for reception per L2CAP channel. -+ * -+ * @events -+ * @event{@ref BLE_L2CAP_EVT_CH_RX, The SDU is received.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_L2CAP_CH_RX_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection Handle. -+ * @param[in] local_cid Local Channel ID of the L2CAP channel. -+ * @param[in] p_sdu_buf Pointer to the SDU data buffer. -+ * -+ * @retval ::NRF_SUCCESS Buffer accepted. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is -+ * in progress for an L2CAP channel). -+ * @retval ::NRF_ERROR_NOT_FOUND CID not found. -+ * @retval ::NRF_ERROR_RESOURCES Too many SDU data buffers supplied. Wait for a -+ * @ref BLE_L2CAP_EVT_CH_RX event and retry. -+ */ -+SVCALL(SD_BLE_L2CAP_CH_RX, uint32_t, sd_ble_l2cap_ch_rx(uint16_t conn_handle, uint16_t local_cid, ble_data_t const *p_sdu_buf)); -+ -+/**@brief Transmit an SDU on an L2CAP channel. -+ * -+ * @note A call to this function will require the application to keep the memory pointed by -+ * @ref ble_data_t::p_data alive until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_TX -+ * or @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. -+ * -+ * @note The SoftDevice can queue up to @ref ble_l2cap_conn_cfg_t::tx_queue_size SDUs for -+ * transmission per L2CAP channel. -+ * -+ * @note The application can keep track of the available credits for transmission by following -+ * the procedure below: -+ * - Store initial credits given by the peer in a variable. -+ * (Initial credits are provided in a @ref BLE_L2CAP_EVT_CH_SETUP event.) -+ * - Decrement the variable, which stores the currently available credits, by -+ * ceiling((@ref ble_data_t::len + 2) / tx_mps) when a call to this function returns -+ * @ref NRF_SUCCESS. (tx_mps is provided in a @ref BLE_L2CAP_EVT_CH_SETUP event.) -+ * - Increment the variable, which stores the currently available credits, by additional -+ * credits given by the peer in a @ref BLE_L2CAP_EVT_CH_CREDIT event. -+ * -+ * @events -+ * @event{@ref BLE_L2CAP_EVT_CH_TX, The SDU is transmitted.} -+ * @endevents -+ * -+ * @mscs -+ * @mmsc{@ref BLE_L2CAP_CH_TX_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection Handle. -+ * @param[in] local_cid Local Channel ID of the L2CAP channel. -+ * @param[in] p_sdu_buf Pointer to the SDU data buffer. -+ * -+ * @retval ::NRF_SUCCESS Successfully queued L2CAP SDU for transmission. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is -+ * in progress for the L2CAP channel). -+ * @retval ::NRF_ERROR_NOT_FOUND CID not found. -+ * @retval ::NRF_ERROR_DATA_SIZE Invalid SDU length supplied, must not be more than -+ * @ref ble_l2cap_ch_tx_params_t::tx_mtu provided in -+ * @ref BLE_L2CAP_EVT_CH_SETUP event. -+ * @retval ::NRF_ERROR_RESOURCES Too many SDUs queued for transmission. Wait for a -+ * @ref BLE_L2CAP_EVT_CH_TX event and retry. -+ */ -+SVCALL(SD_BLE_L2CAP_CH_TX, uint32_t, sd_ble_l2cap_ch_tx(uint16_t conn_handle, uint16_t local_cid, ble_data_t const *p_sdu_buf)); -+ -+/**@brief Advanced SDU reception flow control. -+ * -+ * @details Adjust the way the SoftDevice issues credits to the peer. -+ * This may issue additional credits to the peer using an LE Flow Control Credit packet. -+ * -+ * @mscs -+ * @mmsc{@ref BLE_L2CAP_CH_FLOW_CONTROL_MSC} -+ * @endmscs -+ * -+ * @param[in] conn_handle Connection Handle. -+ * @param[in] local_cid Local Channel ID of the L2CAP channel or @ref BLE_L2CAP_CID_INVALID to set -+ * the value that will be used for newly created channels. -+ * @param[in] credits Number of credits that the SoftDevice will make sure the peer has every -+ * time it starts using a new reception buffer. -+ * - @ref BLE_L2CAP_CREDITS_DEFAULT is the default value the SoftDevice will -+ * use if this function is not called. -+ * - If set to zero, the SoftDevice will stop issuing credits for new reception -+ * buffers the application provides or has provided. SDU reception that is -+ * currently ongoing will be allowed to complete. -+ * @param[out] p_credits NULL or pointer to a uint16_t. If a valid pointer is provided, it will be -+ * written by the SoftDevice with the number of credits that is or will be -+ * available to the peer. If the value written by the SoftDevice is 0 when -+ * credits parameter was set to 0, the peer will not be able to send more -+ * data until more credits are provided by calling this function again with -+ * credits > 0. This parameter is ignored when local_cid is set to -+ * @ref BLE_L2CAP_CID_INVALID. -+ * -+ * @note Application should take care when setting number of credits higher than default value. In -+ * this case the application must make sure that the SoftDevice always has reception buffers -+ * available (see @ref sd_ble_l2cap_ch_rx) for that channel. If the SoftDevice does not have -+ * such buffers available, packets may be NACKed on the Link Layer and all Bluetooth traffic -+ * on the connection handle may be stalled until the SoftDevice again has an available -+ * reception buffer. This applies even if the application has used this call to set the -+ * credits back to default, or zero. -+ * -+ * @retval ::NRF_SUCCESS Flow control parameters accepted. -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. -+ * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. -+ * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is -+ * in progress for an L2CAP channel). -+ * @retval ::NRF_ERROR_NOT_FOUND CID not found. -+ */ -+SVCALL(SD_BLE_L2CAP_CH_FLOW_CONTROL, uint32_t, sd_ble_l2cap_ch_flow_control(uint16_t conn_handle, uint16_t local_cid, uint16_t credits, uint16_t *p_credits)); -+ -+/** @} */ -+ -+#ifdef __cplusplus -+} -+#endif -+#endif // BLE_L2CAP_H__ -+ -+/** -+ @} -+*/ -diff -u -r -N a/components/softdevice/s132v5/headers/ble_ranges.h b/components/softdevice/s132v5/headers/ble_ranges.h ---- a/components/softdevice/s132v5/headers/ble_ranges.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v5/headers/ble_ranges.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,156 @@ -+/* -+ * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form, except as embedded into a Nordic -+ * Semiconductor ASA integrated circuit in a product or a software update for -+ * such product, must reproduce the above copyright notice, this list of -+ * conditions and the following disclaimer in the documentation and/or other -+ * materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its -+ * contributors may be used to endorse or promote products derived from this -+ * software without specific prior written permission. -+ * -+ * 4. This software, with or without modification, must only be used with a -+ * Nordic Semiconductor ASA integrated circuit. -+ * -+ * 5. Any software provided in binary form under this license must not be reverse -+ * engineered, decompiled, modified and/or disassembled. -+ * -+ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -+ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ */ -+ -+/** -+ @addtogroup BLE_COMMON -+ @{ -+ @defgroup ble_ranges Module specific SVC, event and option number subranges -+ @{ -+ -+ @brief Definition of SVC, event and option number subranges for each API module. -+ -+ @note -+ SVCs, event and option numbers are split into subranges for each API module. -+ Each module receives its entire allocated range of SVC calls, whether implemented or not, -+ but return BLE_ERROR_NOT_SUPPORTED for unimplemented or undefined calls in its range. -+ -+ Note that the symbols BLE__SVC_LAST is the end of the allocated SVC range, -+ rather than the last SVC function call actually defined and implemented. -+ -+ Specific SVC, event and option values are defined in each module's ble_.h file, -+ which defines names of each individual SVC code based on the range start value. -+*/ -+ -+#ifndef BLE_RANGES_H__ -+#define BLE_RANGES_H__ -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+#define BLE_SVC_BASE 0x60 /**< Common BLE SVC base. */ -+#define BLE_SVC_LAST 0x6B /**< Common BLE SVC last. */ -+ -+#define BLE_GAP_SVC_BASE 0x6C /**< GAP BLE SVC base. */ -+#define BLE_GAP_SVC_LAST 0x93 /**< GAP BLE SVC last. */ -+ -+#define BLE_GATTC_SVC_BASE 0x94 /**< GATTC BLE SVC base. */ -+#define BLE_GATTC_SVC_LAST 0x9F /**< GATTC BLE SVC last. */ -+ -+#define BLE_GATTS_SVC_BASE 0xA0 /**< GATTS BLE SVC base. */ -+#define BLE_GATTS_SVC_LAST 0xAF /**< GATTS BLE SVC last. */ -+ -+#define BLE_L2CAP_SVC_BASE 0xB0 /**< L2CAP BLE SVC base. */ -+#define BLE_L2CAP_SVC_LAST 0xBF /**< L2CAP BLE SVC last. */ -+ -+ -+#define BLE_EVT_INVALID 0x00 /**< Invalid BLE Event. */ -+ -+#define BLE_EVT_BASE 0x01 /**< Common BLE Event base. */ -+#define BLE_EVT_LAST 0x0F /**< Common BLE Event last. */ -+ -+#define BLE_GAP_EVT_BASE 0x10 /**< GAP BLE Event base. */ -+#define BLE_GAP_EVT_LAST 0x2F /**< GAP BLE Event last. */ -+ -+#define BLE_GATTC_EVT_BASE 0x30 /**< GATTC BLE Event base. */ -+#define BLE_GATTC_EVT_LAST 0x4F /**< GATTC BLE Event last. */ -+ -+#define BLE_GATTS_EVT_BASE 0x50 /**< GATTS BLE Event base. */ -+#define BLE_GATTS_EVT_LAST 0x6F /**< GATTS BLE Event last. */ -+ -+#define BLE_L2CAP_EVT_BASE 0x70 /**< L2CAP BLE Event base. */ -+#define BLE_L2CAP_EVT_LAST 0x8F /**< L2CAP BLE Event last. */ -+ -+ -+#define BLE_OPT_INVALID 0x00 /**< Invalid BLE Option. */ -+ -+#define BLE_OPT_BASE 0x01 /**< Common BLE Option base. */ -+#define BLE_OPT_LAST 0x1F /**< Common BLE Option last. */ -+ -+#define BLE_GAP_OPT_BASE 0x20 /**< GAP BLE Option base. */ -+#define BLE_GAP_OPT_LAST 0x3F /**< GAP BLE Option last. */ -+ -+#define BLE_GATT_OPT_BASE 0x40 /**< GATT BLE Option base. */ -+#define BLE_GATT_OPT_LAST 0x5F /**< GATT BLE Option last. */ -+ -+#define BLE_GATTC_OPT_BASE 0x60 /**< GATTC BLE Option base. */ -+#define BLE_GATTC_OPT_LAST 0x7F /**< GATTC BLE Option last. */ -+ -+#define BLE_GATTS_OPT_BASE 0x80 /**< GATTS BLE Option base. */ -+#define BLE_GATTS_OPT_LAST 0x9F /**< GATTS BLE Option last. */ -+ -+#define BLE_L2CAP_OPT_BASE 0xA0 /**< L2CAP BLE Option base. */ -+#define BLE_L2CAP_OPT_LAST 0xBF /**< L2CAP BLE Option last. */ -+ -+ -+#define BLE_CFG_INVALID 0x00 /**< Invalid BLE configuration. */ -+ -+#define BLE_CFG_BASE 0x01 /**< Common BLE configuration base. */ -+#define BLE_CFG_LAST 0x1F /**< Common BLE configuration last. */ -+ -+#define BLE_CONN_CFG_BASE 0x20 /**< BLE connection configuration base. */ -+#define BLE_CONN_CFG_LAST 0x3F /**< BLE connection configuration last. */ -+ -+#define BLE_GAP_CFG_BASE 0x40 /**< GAP BLE configuration base. */ -+#define BLE_GAP_CFG_LAST 0x5F /**< GAP BLE configuration last. */ -+ -+#define BLE_GATT_CFG_BASE 0x60 /**< GATT BLE configuration base. */ -+#define BLE_GATT_CFG_LAST 0x7F /**< GATT BLE configuration last. */ -+ -+#define BLE_GATTC_CFG_BASE 0x80 /**< GATTC BLE configuration base. */ -+#define BLE_GATTC_CFG_LAST 0x9F /**< GATTC BLE configuration last. */ -+ -+#define BLE_GATTS_CFG_BASE 0xA0 /**< GATTS BLE configuration base. */ -+#define BLE_GATTS_CFG_LAST 0xBF /**< GATTS BLE configuration last. */ -+ -+#define BLE_L2CAP_CFG_BASE 0xC0 /**< L2CAP BLE configuration base. */ -+#define BLE_L2CAP_CFG_LAST 0xDF /**< L2CAP BLE configuration last. */ -+ -+ -+ -+ -+ -+#ifdef __cplusplus -+} -+#endif -+#endif /* BLE_RANGES_H__ */ -+ -+/** -+ @} -+ @} -+*/ -diff -u -r -N a/components/softdevice/s132v5/headers/ble_types.h b/components/softdevice/s132v5/headers/ble_types.h ---- a/components/softdevice/s132v5/headers/ble_types.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v5/headers/ble_types.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,215 @@ -+/* -+ * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form, except as embedded into a Nordic -+ * Semiconductor ASA integrated circuit in a product or a software update for -+ * such product, must reproduce the above copyright notice, this list of -+ * conditions and the following disclaimer in the documentation and/or other -+ * materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its -+ * contributors may be used to endorse or promote products derived from this -+ * software without specific prior written permission. -+ * -+ * 4. This software, with or without modification, must only be used with a -+ * Nordic Semiconductor ASA integrated circuit. -+ * -+ * 5. Any software provided in binary form under this license must not be reverse -+ * engineered, decompiled, modified and/or disassembled. -+ * -+ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -+ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ */ -+ -+/** -+ @addtogroup BLE_COMMON -+ @{ -+ @defgroup ble_types Common types and macro definitions -+ @{ -+ -+ @brief Common types and macro definitions for the BLE SoftDevice. -+ */ -+ -+#ifndef BLE_TYPES_H__ -+#define BLE_TYPES_H__ -+ -+#include -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/** @addtogroup BLE_TYPES_DEFINES Defines -+ * @{ */ -+ -+/** @defgroup BLE_CONN_HANDLES BLE Connection Handles -+ * @{ */ -+#define BLE_CONN_HANDLE_INVALID 0xFFFF /**< Invalid Connection Handle. */ -+#define BLE_CONN_HANDLE_ALL 0xFFFE /**< Applies to all Connection Handles. */ -+/** @} */ -+ -+ -+/** @defgroup BLE_UUID_VALUES Assigned Values for BLE UUIDs -+ * @{ */ -+/* Generic UUIDs, applicable to all services */ -+#define BLE_UUID_UNKNOWN 0x0000 /**< Reserved UUID. */ -+#define BLE_UUID_SERVICE_PRIMARY 0x2800 /**< Primary Service. */ -+#define BLE_UUID_SERVICE_SECONDARY 0x2801 /**< Secondary Service. */ -+#define BLE_UUID_SERVICE_INCLUDE 0x2802 /**< Include. */ -+#define BLE_UUID_CHARACTERISTIC 0x2803 /**< Characteristic. */ -+#define BLE_UUID_DESCRIPTOR_CHAR_EXT_PROP 0x2900 /**< Characteristic Extended Properties Descriptor. */ -+#define BLE_UUID_DESCRIPTOR_CHAR_USER_DESC 0x2901 /**< Characteristic User Description Descriptor. */ -+#define BLE_UUID_DESCRIPTOR_CLIENT_CHAR_CONFIG 0x2902 /**< Client Characteristic Configuration Descriptor. */ -+#define BLE_UUID_DESCRIPTOR_SERVER_CHAR_CONFIG 0x2903 /**< Server Characteristic Configuration Descriptor. */ -+#define BLE_UUID_DESCRIPTOR_CHAR_PRESENTATION_FORMAT 0x2904 /**< Characteristic Presentation Format Descriptor. */ -+#define BLE_UUID_DESCRIPTOR_CHAR_AGGREGATE_FORMAT 0x2905 /**< Characteristic Aggregate Format Descriptor. */ -+/* GATT specific UUIDs */ -+#define BLE_UUID_GATT 0x1801 /**< Generic Attribute Profile. */ -+#define BLE_UUID_GATT_CHARACTERISTIC_SERVICE_CHANGED 0x2A05 /**< Service Changed Characteristic. */ -+/* GAP specific UUIDs */ -+#define BLE_UUID_GAP 0x1800 /**< Generic Access Profile. */ -+#define BLE_UUID_GAP_CHARACTERISTIC_DEVICE_NAME 0x2A00 /**< Device Name Characteristic. */ -+#define BLE_UUID_GAP_CHARACTERISTIC_APPEARANCE 0x2A01 /**< Appearance Characteristic. */ -+#define BLE_UUID_GAP_CHARACTERISTIC_RECONN_ADDR 0x2A03 /**< Reconnection Address Characteristic. */ -+#define BLE_UUID_GAP_CHARACTERISTIC_PPCP 0x2A04 /**< Peripheral Preferred Connection Parameters Characteristic. */ -+#define BLE_UUID_GAP_CHARACTERISTIC_CAR 0x2AA6 /**< Central Address Resolution Characteristic. */ -+#define BLE_UUID_GAP_CHARACTERISTIC_RPA_ONLY 0x2AC9 /**< Resolvable Private Address Only Characteristic. */ -+/** @} */ -+ -+ -+/** @defgroup BLE_UUID_TYPES Types of UUID -+ * @{ */ -+#define BLE_UUID_TYPE_UNKNOWN 0x00 /**< Invalid UUID type. */ -+#define BLE_UUID_TYPE_BLE 0x01 /**< Bluetooth SIG UUID (16-bit). */ -+#define BLE_UUID_TYPE_VENDOR_BEGIN 0x02 /**< Vendor UUID types start at this index (128-bit). */ -+/** @} */ -+ -+ -+/** @defgroup BLE_APPEARANCES Bluetooth Appearance values -+ * @note Retrieved from http://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml -+ * @{ */ -+#define BLE_APPEARANCE_UNKNOWN 0 /**< Unknown. */ -+#define BLE_APPEARANCE_GENERIC_PHONE 64 /**< Generic Phone. */ -+#define BLE_APPEARANCE_GENERIC_COMPUTER 128 /**< Generic Computer. */ -+#define BLE_APPEARANCE_GENERIC_WATCH 192 /**< Generic Watch. */ -+#define BLE_APPEARANCE_WATCH_SPORTS_WATCH 193 /**< Watch: Sports Watch. */ -+#define BLE_APPEARANCE_GENERIC_CLOCK 256 /**< Generic Clock. */ -+#define BLE_APPEARANCE_GENERIC_DISPLAY 320 /**< Generic Display. */ -+#define BLE_APPEARANCE_GENERIC_REMOTE_CONTROL 384 /**< Generic Remote Control. */ -+#define BLE_APPEARANCE_GENERIC_EYE_GLASSES 448 /**< Generic Eye-glasses. */ -+#define BLE_APPEARANCE_GENERIC_TAG 512 /**< Generic Tag. */ -+#define BLE_APPEARANCE_GENERIC_KEYRING 576 /**< Generic Keyring. */ -+#define BLE_APPEARANCE_GENERIC_MEDIA_PLAYER 640 /**< Generic Media Player. */ -+#define BLE_APPEARANCE_GENERIC_BARCODE_SCANNER 704 /**< Generic Barcode Scanner. */ -+#define BLE_APPEARANCE_GENERIC_THERMOMETER 768 /**< Generic Thermometer. */ -+#define BLE_APPEARANCE_THERMOMETER_EAR 769 /**< Thermometer: Ear. */ -+#define BLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR 832 /**< Generic Heart rate Sensor. */ -+#define BLE_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT 833 /**< Heart Rate Sensor: Heart Rate Belt. */ -+#define BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE 896 /**< Generic Blood Pressure. */ -+#define BLE_APPEARANCE_BLOOD_PRESSURE_ARM 897 /**< Blood Pressure: Arm. */ -+#define BLE_APPEARANCE_BLOOD_PRESSURE_WRIST 898 /**< Blood Pressure: Wrist. */ -+#define BLE_APPEARANCE_GENERIC_HID 960 /**< Human Interface Device (HID). */ -+#define BLE_APPEARANCE_HID_KEYBOARD 961 /**< Keyboard (HID Subtype). */ -+#define BLE_APPEARANCE_HID_MOUSE 962 /**< Mouse (HID Subtype). */ -+#define BLE_APPEARANCE_HID_JOYSTICK 963 /**< Joystick (HID Subtype). */ -+#define BLE_APPEARANCE_HID_GAMEPAD 964 /**< Gamepad (HID Subtype). */ -+#define BLE_APPEARANCE_HID_DIGITIZERSUBTYPE 965 /**< Digitizer Tablet (HID Subtype). */ -+#define BLE_APPEARANCE_HID_CARD_READER 966 /**< Card Reader (HID Subtype). */ -+#define BLE_APPEARANCE_HID_DIGITAL_PEN 967 /**< Digital Pen (HID Subtype). */ -+#define BLE_APPEARANCE_HID_BARCODE 968 /**< Barcode Scanner (HID Subtype). */ -+#define BLE_APPEARANCE_GENERIC_GLUCOSE_METER 1024 /**< Generic Glucose Meter. */ -+#define BLE_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR 1088 /**< Generic Running Walking Sensor. */ -+#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE 1089 /**< Running Walking Sensor: In-Shoe. */ -+#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE 1090 /**< Running Walking Sensor: On-Shoe. */ -+#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP 1091 /**< Running Walking Sensor: On-Hip. */ -+#define BLE_APPEARANCE_GENERIC_CYCLING 1152 /**< Generic Cycling. */ -+#define BLE_APPEARANCE_CYCLING_CYCLING_COMPUTER 1153 /**< Cycling: Cycling Computer. */ -+#define BLE_APPEARANCE_CYCLING_SPEED_SENSOR 1154 /**< Cycling: Speed Sensor. */ -+#define BLE_APPEARANCE_CYCLING_CADENCE_SENSOR 1155 /**< Cycling: Cadence Sensor. */ -+#define BLE_APPEARANCE_CYCLING_POWER_SENSOR 1156 /**< Cycling: Power Sensor. */ -+#define BLE_APPEARANCE_CYCLING_SPEED_CADENCE_SENSOR 1157 /**< Cycling: Speed and Cadence Sensor. */ -+#define BLE_APPEARANCE_GENERIC_PULSE_OXIMETER 3136 /**< Generic Pulse Oximeter. */ -+#define BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP 3137 /**< Fingertip (Pulse Oximeter subtype). */ -+#define BLE_APPEARANCE_PULSE_OXIMETER_WRIST_WORN 3138 /**< Wrist Worn(Pulse Oximeter subtype). */ -+#define BLE_APPEARANCE_GENERIC_WEIGHT_SCALE 3200 /**< Generic Weight Scale. */ -+#define BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS_ACT 5184 /**< Generic Outdoor Sports Activity. */ -+#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_DISP 5185 /**< Location Display Device (Outdoor Sports Activity subtype). */ -+#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_DISP 5186 /**< Location and Navigation Display Device (Outdoor Sports Activity subtype). */ -+#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_POD 5187 /**< Location Pod (Outdoor Sports Activity subtype). */ -+#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_POD 5188 /**< Location and Navigation Pod (Outdoor Sports Activity subtype). */ -+/** @} */ -+ -+/** @brief Set .type and .uuid fields of ble_uuid_struct to specified UUID value. */ -+#define BLE_UUID_BLE_ASSIGN(instance, value) do {\ -+ instance.type = BLE_UUID_TYPE_BLE; \ -+ instance.uuid = value;} while(0) -+ -+/** @brief Copy type and uuid members from src to dst ble_uuid_t pointer. Both pointers must be valid/non-null. */ -+#define BLE_UUID_COPY_PTR(dst, src) do {\ -+ (dst)->type = (src)->type; \ -+ (dst)->uuid = (src)->uuid;} while(0) -+ -+/** @brief Copy type and uuid members from src to dst ble_uuid_t struct. */ -+#define BLE_UUID_COPY_INST(dst, src) do {\ -+ (dst).type = (src).type; \ -+ (dst).uuid = (src).uuid;} while(0) -+ -+/** @brief Compare for equality both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ -+#define BLE_UUID_EQ(p_uuid1, p_uuid2) \ -+ (((p_uuid1)->type == (p_uuid2)->type) && ((p_uuid1)->uuid == (p_uuid2)->uuid)) -+ -+/** @brief Compare for difference both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ -+#define BLE_UUID_NEQ(p_uuid1, p_uuid2) \ -+ (((p_uuid1)->type != (p_uuid2)->type) || ((p_uuid1)->uuid != (p_uuid2)->uuid)) -+ -+/** @} */ -+ -+/** @addtogroup BLE_TYPES_STRUCTURES Structures -+ * @{ */ -+ -+/** @brief 128 bit UUID values. */ -+typedef struct -+{ -+ uint8_t uuid128[16]; /**< Little-Endian UUID bytes. */ -+} ble_uuid128_t; -+ -+/** @brief Bluetooth Low Energy UUID type, encapsulates both 16-bit and 128-bit UUIDs. */ -+typedef struct -+{ -+ uint16_t uuid; /**< 16-bit UUID value or octets 12-13 of 128-bit UUID. */ -+ uint8_t type; /**< UUID type, see @ref BLE_UUID_TYPES. If type is @ref BLE_UUID_TYPE_UNKNOWN, the value of uuid is undefined. */ -+} ble_uuid_t; -+ -+/**@brief Data structure. */ -+typedef struct -+{ -+ uint8_t *p_data; /**< Pointer to the data buffer provided to/from the application. */ -+ uint16_t len; /**< Length of the data buffer, in bytes. */ -+} ble_data_t; -+ -+/** @} */ -+#ifdef __cplusplus -+} -+#endif -+ -+#endif /* BLE_TYPES_H__ */ -+ -+/** -+ @} -+ @} -+*/ -diff -u -r -N a/components/softdevice/s132v5/headers/nrf_error.h b/components/softdevice/s132v5/headers/nrf_error.h ---- a/components/softdevice/s132v5/headers/nrf_error.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v5/headers/nrf_error.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,90 @@ -+/* -+ * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form, except as embedded into a Nordic -+ * Semiconductor ASA integrated circuit in a product or a software update for -+ * such product, must reproduce the above copyright notice, this list of -+ * conditions and the following disclaimer in the documentation and/or other -+ * materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its -+ * contributors may be used to endorse or promote products derived from this -+ * software without specific prior written permission. -+ * -+ * 4. This software, with or without modification, must only be used with a -+ * Nordic Semiconductor ASA integrated circuit. -+ * -+ * 5. Any software provided in binary form under this license must not be reverse -+ * engineered, decompiled, modified and/or disassembled. -+ * -+ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -+ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ */ -+ -+ /** -+ @defgroup nrf_error SoftDevice Global Error Codes -+ @{ -+ -+ @brief Global Error definitions -+*/ -+ -+/* Header guard */ -+#ifndef NRF_ERROR_H__ -+#define NRF_ERROR_H__ -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/** @defgroup NRF_ERRORS_BASE Error Codes Base number definitions -+ * @{ */ -+#define NRF_ERROR_BASE_NUM (0x0) ///< Global error base -+#define NRF_ERROR_SDM_BASE_NUM (0x1000) ///< SDM error base -+#define NRF_ERROR_SOC_BASE_NUM (0x2000) ///< SoC error base -+#define NRF_ERROR_STK_BASE_NUM (0x3000) ///< STK error base -+/** @} */ -+ -+#define NRF_SUCCESS (NRF_ERROR_BASE_NUM + 0) ///< Successful command -+#define NRF_ERROR_SVC_HANDLER_MISSING (NRF_ERROR_BASE_NUM + 1) ///< SVC handler is missing -+#define NRF_ERROR_SOFTDEVICE_NOT_ENABLED (NRF_ERROR_BASE_NUM + 2) ///< SoftDevice has not been enabled -+#define NRF_ERROR_INTERNAL (NRF_ERROR_BASE_NUM + 3) ///< Internal Error -+#define NRF_ERROR_NO_MEM (NRF_ERROR_BASE_NUM + 4) ///< No Memory for operation -+#define NRF_ERROR_NOT_FOUND (NRF_ERROR_BASE_NUM + 5) ///< Not found -+#define NRF_ERROR_NOT_SUPPORTED (NRF_ERROR_BASE_NUM + 6) ///< Not supported -+#define NRF_ERROR_INVALID_PARAM (NRF_ERROR_BASE_NUM + 7) ///< Invalid Parameter -+#define NRF_ERROR_INVALID_STATE (NRF_ERROR_BASE_NUM + 8) ///< Invalid state, operation disallowed in this state -+#define NRF_ERROR_INVALID_LENGTH (NRF_ERROR_BASE_NUM + 9) ///< Invalid Length -+#define NRF_ERROR_INVALID_FLAGS (NRF_ERROR_BASE_NUM + 10) ///< Invalid Flags -+#define NRF_ERROR_INVALID_DATA (NRF_ERROR_BASE_NUM + 11) ///< Invalid Data -+#define NRF_ERROR_DATA_SIZE (NRF_ERROR_BASE_NUM + 12) ///< Invalid Data size -+#define NRF_ERROR_TIMEOUT (NRF_ERROR_BASE_NUM + 13) ///< Operation timed out -+#define NRF_ERROR_NULL (NRF_ERROR_BASE_NUM + 14) ///< Null Pointer -+#define NRF_ERROR_FORBIDDEN (NRF_ERROR_BASE_NUM + 15) ///< Forbidden Operation -+#define NRF_ERROR_INVALID_ADDR (NRF_ERROR_BASE_NUM + 16) ///< Bad Memory Address -+#define NRF_ERROR_BUSY (NRF_ERROR_BASE_NUM + 17) ///< Busy -+#define NRF_ERROR_CONN_COUNT (NRF_ERROR_BASE_NUM + 18) ///< Maximum connection count exceeded. -+#define NRF_ERROR_RESOURCES (NRF_ERROR_BASE_NUM + 19) ///< Not enough resources for operation -+ -+#ifdef __cplusplus -+} -+#endif -+#endif // NRF_ERROR_H__ -+ -+/** -+ @} -+*/ -diff -u -r -N a/components/softdevice/s132v5/headers/nrf_error_sdm.h b/components/softdevice/s132v5/headers/nrf_error_sdm.h ---- a/components/softdevice/s132v5/headers/nrf_error_sdm.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v5/headers/nrf_error_sdm.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,70 @@ -+/* -+ * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form, except as embedded into a Nordic -+ * Semiconductor ASA integrated circuit in a product or a software update for -+ * such product, must reproduce the above copyright notice, this list of -+ * conditions and the following disclaimer in the documentation and/or other -+ * materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its -+ * contributors may be used to endorse or promote products derived from this -+ * software without specific prior written permission. -+ * -+ * 4. This software, with or without modification, must only be used with a -+ * Nordic Semiconductor ASA integrated circuit. -+ * -+ * 5. Any software provided in binary form under this license must not be reverse -+ * engineered, decompiled, modified and/or disassembled. -+ * -+ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -+ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ */ -+ -+ /** -+ @addtogroup nrf_sdm_api -+ @{ -+ @defgroup nrf_sdm_error SoftDevice Manager Error Codes -+ @{ -+ -+ @brief Error definitions for the SDM API -+*/ -+ -+/* Header guard */ -+#ifndef NRF_ERROR_SDM_H__ -+#define NRF_ERROR_SDM_H__ -+ -+#include "nrf_error.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+#define NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN (NRF_ERROR_SDM_BASE_NUM + 0) ///< Unknown LFCLK source. -+#define NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION (NRF_ERROR_SDM_BASE_NUM + 1) ///< Incorrect interrupt configuration (can be caused by using illegal priority levels, or having enabled SoftDevice interrupts). -+#define NRF_ERROR_SDM_INCORRECT_CLENR0 (NRF_ERROR_SDM_BASE_NUM + 2) ///< Incorrect CLENR0 (can be caused by erroneous SoftDevice flashing). -+ -+#ifdef __cplusplus -+} -+#endif -+#endif // NRF_ERROR_SDM_H__ -+ -+/** -+ @} -+ @} -+*/ -diff -u -r -N a/components/softdevice/s132v5/headers/nrf_error_soc.h b/components/softdevice/s132v5/headers/nrf_error_soc.h ---- a/components/softdevice/s132v5/headers/nrf_error_soc.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v5/headers/nrf_error_soc.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,85 @@ -+/* -+ * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form, except as embedded into a Nordic -+ * Semiconductor ASA integrated circuit in a product or a software update for -+ * such product, must reproduce the above copyright notice, this list of -+ * conditions and the following disclaimer in the documentation and/or other -+ * materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its -+ * contributors may be used to endorse or promote products derived from this -+ * software without specific prior written permission. -+ * -+ * 4. This software, with or without modification, must only be used with a -+ * Nordic Semiconductor ASA integrated circuit. -+ * -+ * 5. Any software provided in binary form under this license must not be reverse -+ * engineered, decompiled, modified and/or disassembled. -+ * -+ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -+ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ */ -+ -+/** -+ @addtogroup nrf_soc_api -+ @{ -+ @defgroup nrf_soc_error SoC Library Error Codes -+ @{ -+ -+ @brief Error definitions for the SoC library -+ -+*/ -+ -+/* Header guard */ -+#ifndef NRF_ERROR_SOC_H__ -+#define NRF_ERROR_SOC_H__ -+ -+#include "nrf_error.h" -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/* Mutex Errors */ -+#define NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN (NRF_ERROR_SOC_BASE_NUM + 0) ///< Mutex already taken -+ -+/* NVIC errors */ -+#define NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE (NRF_ERROR_SOC_BASE_NUM + 1) ///< NVIC interrupt not available -+#define NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED (NRF_ERROR_SOC_BASE_NUM + 2) ///< NVIC interrupt priority not allowed -+#define NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 3) ///< NVIC should not return -+ -+/* Power errors */ -+#define NRF_ERROR_SOC_POWER_MODE_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 4) ///< Power mode unknown -+#define NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 5) ///< Power POF threshold unknown -+#define NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 6) ///< Power off should not return -+ -+/* Rand errors */ -+#define NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES (NRF_ERROR_SOC_BASE_NUM + 7) ///< RAND not enough values -+ -+/* PPI errors */ -+#define NRF_ERROR_SOC_PPI_INVALID_CHANNEL (NRF_ERROR_SOC_BASE_NUM + 8) ///< Invalid PPI Channel -+#define NRF_ERROR_SOC_PPI_INVALID_GROUP (NRF_ERROR_SOC_BASE_NUM + 9) ///< Invalid PPI Group -+ -+#ifdef __cplusplus -+} -+#endif -+#endif // NRF_ERROR_SOC_H__ -+/** -+ @} -+ @} -+*/ -diff -u -r -N a/components/softdevice/s132v5/headers/nrf_nvic.h b/components/softdevice/s132v5/headers/nrf_nvic.h ---- a/components/softdevice/s132v5/headers/nrf_nvic.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v5/headers/nrf_nvic.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,486 @@ -+/* -+ * Copyright (c) 2016 - 2017, Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form, except as embedded into a Nordic -+ * Semiconductor ASA integrated circuit in a product or a software update for -+ * such product, must reproduce the above copyright notice, this list of -+ * conditions and the following disclaimer in the documentation and/or other -+ * materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its -+ * contributors may be used to endorse or promote products derived from this -+ * software without specific prior written permission. -+ * -+ * 4. This software, with or without modification, must only be used with a -+ * Nordic Semiconductor ASA integrated circuit. -+ * -+ * 5. Any software provided in binary form under this license must not be reverse -+ * engineered, decompiled, modified and/or disassembled. -+ * -+ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -+ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ */ -+ -+/** -+ * @defgroup nrf_nvic_api SoftDevice NVIC API -+ * @{ -+ * -+ * @note In order to use this module, the following code has to be added to a .c file: -+ * \code -+ * nrf_nvic_state_t nrf_nvic_state = {0}; -+ * \endcode -+ * -+ * @note Definitions and declarations starting with __ (double underscore) in this header file are -+ * not intended for direct use by the application. -+ * -+ * @brief APIs for the accessing NVIC when using a SoftDevice. -+ * -+ */ -+ -+#ifndef NRF_NVIC_H__ -+#define NRF_NVIC_H__ -+ -+#include -+#include "nrf.h" -+#include "nrf_svc.h" -+#include "nrf_error.h" -+#include "nrf_error_soc.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/**@addtogroup NRF_NVIC_DEFINES Defines -+ * @{ */ -+ -+/**@defgroup NRF_NVIC_ISER_DEFINES SoftDevice NVIC internal definitions -+ * @{ */ -+ -+#define __NRF_NVIC_NVMC_IRQn (30) /**< The peripheral ID of the NVMC. IRQ numbers are used to identify peripherals, but the NVMC doesn't have an IRQ number in the MDK. */ -+ -+#define __NRF_NVIC_ISER_COUNT (2) /**< The number of ISER/ICER registers in the NVIC that are used. */ -+ -+/**@brief Interrupts used by the SoftDevice, with IRQn in the range 0-31. */ -+#define __NRF_NVIC_SD_IRQS_0 ((uint32_t)( \ -+ (1U << POWER_CLOCK_IRQn) \ -+ | (1U << RADIO_IRQn) \ -+ | (1U << RTC0_IRQn) \ -+ | (1U << TIMER0_IRQn) \ -+ | (1U << RNG_IRQn) \ -+ | (1U << ECB_IRQn) \ -+ | (1U << CCM_AAR_IRQn) \ -+ | (1U << TEMP_IRQn) \ -+ | (1U << __NRF_NVIC_NVMC_IRQn) \ -+ | (1U << (uint32_t)SWI5_IRQn) \ -+ )) -+ -+/**@brief Interrupts used by the SoftDevice, with IRQn in the range 32-63. */ -+#define __NRF_NVIC_SD_IRQS_1 ((uint32_t)0) -+ -+/**@brief Interrupts available for to application, with IRQn in the range 0-31. */ -+#define __NRF_NVIC_APP_IRQS_0 (~__NRF_NVIC_SD_IRQS_0) -+ -+/**@brief Interrupts available for to application, with IRQn in the range 32-63. */ -+#define __NRF_NVIC_APP_IRQS_1 (~__NRF_NVIC_SD_IRQS_1) -+ -+/**@} */ -+ -+/**@} */ -+ -+/**@addtogroup NRF_NVIC_VARIABLES Variables -+ * @{ */ -+ -+/**@brief Type representing the state struct for the SoftDevice NVIC module. */ -+typedef struct -+{ -+ uint32_t volatile __irq_masks[__NRF_NVIC_ISER_COUNT]; /**< IRQs enabled by the application in the NVIC. */ -+ uint32_t volatile __cr_flag; /**< Non-zero if already in a critical region */ -+} nrf_nvic_state_t; -+ -+/**@brief Variable keeping the state for the SoftDevice NVIC module. This must be declared in an -+ * application source file. */ -+extern nrf_nvic_state_t nrf_nvic_state; -+ -+/**@} */ -+ -+/**@addtogroup NRF_NVIC_INTERNAL_FUNCTIONS SoftDevice NVIC internal functions -+ * @{ */ -+ -+/**@brief Disables IRQ interrupts globally, including the SoftDevice's interrupts. -+ * -+ * @retval The value of PRIMASK prior to disabling the interrupts. -+ */ -+__STATIC_INLINE int __sd_nvic_irq_disable(void); -+ -+/**@brief Enables IRQ interrupts globally, including the SoftDevice's interrupts. -+ */ -+__STATIC_INLINE void __sd_nvic_irq_enable(void); -+ -+/**@brief Checks if IRQn is available to application -+ * @param[in] IRQn IRQ to check -+ * -+ * @retval 1 (true) if the IRQ to check is available to the application -+ */ -+__STATIC_INLINE uint32_t __sd_nvic_app_accessible_irq(IRQn_Type IRQn); -+ -+/**@brief Checks if priority is available to application -+ * @param[in] priority priority to check -+ * -+ * @retval 1 (true) if the priority to check is available to the application -+ */ -+__STATIC_INLINE uint32_t __sd_nvic_is_app_accessible_priority(uint32_t priority); -+ -+/**@} */ -+ -+/**@addtogroup NRF_NVIC_FUNCTIONS SoftDevice NVIC public functions -+ * @{ */ -+ -+/**@brief Enable External Interrupt. -+ * @note Corresponds to NVIC_EnableIRQ in CMSIS. -+ * -+ * @pre IRQn is valid and not reserved by the stack. -+ * -+ * @param[in] IRQn See the NVIC_EnableIRQ documentation in CMSIS. -+ * -+ * @retval ::NRF_SUCCESS The interrupt was enabled. -+ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. -+ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt has a priority not available for the application. -+ */ -+__STATIC_INLINE uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn); -+ -+/**@brief Disable External Interrupt. -+ * @note Corresponds to NVIC_DisableIRQ in CMSIS. -+ * -+ * @pre IRQn is valid and not reserved by the stack. -+ * -+ * @param[in] IRQn See the NVIC_DisableIRQ documentation in CMSIS. -+ * -+ * @retval ::NRF_SUCCESS The interrupt was disabled. -+ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. -+ */ -+__STATIC_INLINE uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn); -+ -+/**@brief Get Pending Interrupt. -+ * @note Corresponds to NVIC_GetPendingIRQ in CMSIS. -+ * -+ * @pre IRQn is valid and not reserved by the stack. -+ * -+ * @param[in] IRQn See the NVIC_GetPendingIRQ documentation in CMSIS. -+ * @param[out] p_pending_irq Return value from NVIC_GetPendingIRQ. -+ * -+ * @retval ::NRF_SUCCESS The interrupt is available for the application. -+ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. -+ */ -+__STATIC_INLINE uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq); -+ -+/**@brief Set Pending Interrupt. -+ * @note Corresponds to NVIC_SetPendingIRQ in CMSIS. -+ * -+ * @pre IRQn is valid and not reserved by the stack. -+ * -+ * @param[in] IRQn See the NVIC_SetPendingIRQ documentation in CMSIS. -+ * -+ * @retval ::NRF_SUCCESS The interrupt is set pending. -+ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. -+ */ -+__STATIC_INLINE uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn); -+ -+/**@brief Clear Pending Interrupt. -+ * @note Corresponds to NVIC_ClearPendingIRQ in CMSIS. -+ * -+ * @pre IRQn is valid and not reserved by the stack. -+ * -+ * @param[in] IRQn See the NVIC_ClearPendingIRQ documentation in CMSIS. -+ * -+ * @retval ::NRF_SUCCESS The interrupt pending flag is cleared. -+ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. -+ */ -+__STATIC_INLINE uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn); -+ -+/**@brief Set Interrupt Priority. -+ * @note Corresponds to NVIC_SetPriority in CMSIS. -+ * -+ * @pre IRQn is valid and not reserved by the stack. -+ * @pre Priority is valid and not reserved by the stack. -+ * -+ * @param[in] IRQn See the NVIC_SetPriority documentation in CMSIS. -+ * @param[in] priority A valid IRQ priority for use by the application. -+ * -+ * @retval ::NRF_SUCCESS The interrupt and priority level is available for the application. -+ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. -+ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt priority is not available for the application. -+ */ -+__STATIC_INLINE uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority); -+ -+/**@brief Get Interrupt Priority. -+ * @note Corresponds to NVIC_GetPriority in CMSIS. -+ * -+ * @pre IRQn is valid and not reserved by the stack. -+ * -+ * @param[in] IRQn See the NVIC_GetPriority documentation in CMSIS. -+ * @param[out] p_priority Return value from NVIC_GetPriority. -+ * -+ * @retval ::NRF_SUCCESS The interrupt priority is returned in p_priority. -+ * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE - IRQn is not available for the application. -+ */ -+__STATIC_INLINE uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority); -+ -+/**@brief System Reset. -+ * @note Corresponds to NVIC_SystemReset in CMSIS. -+ * -+ * @retval ::NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN -+ */ -+__STATIC_INLINE uint32_t sd_nvic_SystemReset(void); -+ -+/**@brief Enter critical region. -+ * -+ * @post Application interrupts will be disabled. -+ * @note sd_nvic_critical_region_enter() and ::sd_nvic_critical_region_exit() must be called in matching pairs inside each -+ * execution context -+ * @sa sd_nvic_critical_region_exit -+ * -+ * @param[out] p_is_nested_critical_region If 1, the application is now in a nested critical region. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+__STATIC_INLINE uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region); -+ -+/**@brief Exit critical region. -+ * -+ * @pre Application has entered a critical region using ::sd_nvic_critical_region_enter. -+ * @post If not in a nested critical region, the application interrupts will restored to the state before ::sd_nvic_critical_region_enter was called. -+ * -+ * @param[in] is_nested_critical_region If this is set to 1, the critical region won't be exited. @sa sd_nvic_critical_region_enter. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+__STATIC_INLINE uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region); -+ -+/**@} */ -+ -+#ifndef SUPPRESS_INLINE_IMPLEMENTATION -+ -+__STATIC_INLINE int __sd_nvic_irq_disable(void) -+{ -+ int pm = __get_PRIMASK(); -+ __disable_irq(); -+ return pm; -+} -+ -+__STATIC_INLINE void __sd_nvic_irq_enable(void) -+{ -+ __enable_irq(); -+} -+ -+__STATIC_INLINE uint32_t __sd_nvic_app_accessible_irq(IRQn_Type IRQn) -+{ -+ if (IRQn < 32) -+ { -+ return ((1UL<= (1 << __NVIC_PRIO_BITS)) -+ { -+ return 0; -+ } -+ if( priority == 0 -+ || priority == 1 -+ || priority == 4 -+ ) -+ { -+ return 0; -+ } -+ return 1; -+} -+ -+ -+__STATIC_INLINE uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn) -+{ -+ if (!__sd_nvic_app_accessible_irq(IRQn)) -+ { -+ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; -+ } -+ if (!__sd_nvic_is_app_accessible_priority(NVIC_GetPriority(IRQn))) -+ { -+ return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED; -+ } -+ -+ if (nrf_nvic_state.__cr_flag) -+ { -+ nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] |= (uint32_t)(1 << ((uint32_t)((int32_t)IRQn) & (uint32_t)0x1F)); -+ } -+ else -+ { -+ NVIC_EnableIRQ(IRQn); -+ } -+ return NRF_SUCCESS; -+} -+ -+__STATIC_INLINE uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn) -+{ -+ if (!__sd_nvic_app_accessible_irq(IRQn)) -+ { -+ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; -+ } -+ -+ if (nrf_nvic_state.__cr_flag) -+ { -+ nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] &= ~(1UL << ((uint32_t)(IRQn) & 0x1F)); -+ } -+ else -+ { -+ NVIC_DisableIRQ(IRQn); -+ } -+ -+ return NRF_SUCCESS; -+} -+ -+__STATIC_INLINE uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq) -+{ -+ if (__sd_nvic_app_accessible_irq(IRQn)) -+ { -+ *p_pending_irq = NVIC_GetPendingIRQ(IRQn); -+ return NRF_SUCCESS; -+ } -+ else -+ { -+ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; -+ } -+} -+ -+__STATIC_INLINE uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn) -+{ -+ if (__sd_nvic_app_accessible_irq(IRQn)) -+ { -+ NVIC_SetPendingIRQ(IRQn); -+ return NRF_SUCCESS; -+ } -+ else -+ { -+ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; -+ } -+} -+ -+__STATIC_INLINE uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn) -+{ -+ if (__sd_nvic_app_accessible_irq(IRQn)) -+ { -+ NVIC_ClearPendingIRQ(IRQn); -+ return NRF_SUCCESS; -+ } -+ else -+ { -+ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; -+ } -+} -+ -+__STATIC_INLINE uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority) -+{ -+ if (!__sd_nvic_app_accessible_irq(IRQn)) -+ { -+ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; -+ } -+ -+ if (!__sd_nvic_is_app_accessible_priority(priority)) -+ { -+ return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED; -+ } -+ -+ NVIC_SetPriority(IRQn, (uint32_t)priority); -+ return NRF_SUCCESS; -+} -+ -+__STATIC_INLINE uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority) -+{ -+ if (__sd_nvic_app_accessible_irq(IRQn)) -+ { -+ *p_priority = (NVIC_GetPriority(IRQn) & 0xFF); -+ return NRF_SUCCESS; -+ } -+ else -+ { -+ return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; -+ } -+} -+ -+__STATIC_INLINE uint32_t sd_nvic_SystemReset(void) -+{ -+ NVIC_SystemReset(); -+ return NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN; -+} -+ -+__STATIC_INLINE uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region) -+{ -+ int was_masked = __sd_nvic_irq_disable(); -+ if (!nrf_nvic_state.__cr_flag) -+ { -+ nrf_nvic_state.__cr_flag = 1; -+ nrf_nvic_state.__irq_masks[0] = ( NVIC->ICER[0] & __NRF_NVIC_APP_IRQS_0 ); -+ NVIC->ICER[0] = __NRF_NVIC_APP_IRQS_0; -+ nrf_nvic_state.__irq_masks[1] = ( NVIC->ICER[1] & __NRF_NVIC_APP_IRQS_1 ); -+ NVIC->ICER[1] = __NRF_NVIC_APP_IRQS_1; -+ *p_is_nested_critical_region = 0; -+ } -+ else -+ { -+ *p_is_nested_critical_region = 1; -+ } -+ if (!was_masked) -+ { -+ __sd_nvic_irq_enable(); -+ } -+ return NRF_SUCCESS; -+} -+ -+__STATIC_INLINE uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region) -+{ -+ if (nrf_nvic_state.__cr_flag && (is_nested_critical_region == 0)) -+ { -+ int was_masked = __sd_nvic_irq_disable(); -+ NVIC->ISER[0] = nrf_nvic_state.__irq_masks[0]; -+ NVIC->ISER[1] = nrf_nvic_state.__irq_masks[1]; -+ nrf_nvic_state.__cr_flag = 0; -+ if (!was_masked) -+ { -+ __sd_nvic_irq_enable(); -+ } -+ } -+ -+ return NRF_SUCCESS; -+} -+ -+#endif /* SUPPRESS_INLINE_IMPLEMENTATION */ -+ -+#ifdef __cplusplus -+} -+#endif -+ -+#endif // NRF_NVIC_H__ -+ -+/**@} */ -diff -u -r -N a/components/softdevice/s132v5/headers/nrf_sd_def.h b/components/softdevice/s132v5/headers/nrf_sd_def.h ---- a/components/softdevice/s132v5/headers/nrf_sd_def.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v5/headers/nrf_sd_def.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,28 @@ -+/* Copyright (c) 2015 - 2018 Nordic Semiconductor ASA. All Rights Reserved. -+ * -+ * The information contained herein is confidential property of Nordic Semiconductor ASA. -+ * The use, copying, transfer or disclosure of such information is prohibited except by -+ * express written agreement with Nordic Semiconductor ASA. -+ * -+ */ -+ -+#ifndef NRF_SD_DEF_H__ -+#define NRF_SD_DEF_H__ -+ -+#include -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+#define SD_PPI_CHANNELS_USED 0xFFFE0000uL /**< PPI channels utilized by SotfDevice (not available to the application). */ -+#define SD_PPI_GROUPS_USED 0x0000000CuL /**< PPI groups utilized by SoftDevice (not available to the application). */ -+#define SD_TIMERS_USED 0x00000001uL /**< Timers used by SoftDevice. */ -+#define SD_SWI_USED 0x0000003CuL /**< Software interrupts used by SoftDevice */ -+ -+ -+#ifdef __cplusplus -+} -+#endif -+ -+#endif /* NRF_SD_DEF_H__ */ -diff -u -r -N a/components/softdevice/s132v5/headers/nrf_sdm.h b/components/softdevice/s132v5/headers/nrf_sdm.h ---- a/components/softdevice/s132v5/headers/nrf_sdm.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v5/headers/nrf_sdm.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,357 @@ -+/* -+ * Copyright (c) 2015 - 2017, Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form, except as embedded into a Nordic -+ * Semiconductor ASA integrated circuit in a product or a software update for -+ * such product, must reproduce the above copyright notice, this list of -+ * conditions and the following disclaimer in the documentation and/or other -+ * materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its -+ * contributors may be used to endorse or promote products derived from this -+ * software without specific prior written permission. -+ * -+ * 4. This software, with or without modification, must only be used with a -+ * Nordic Semiconductor ASA integrated circuit. -+ * -+ * 5. Any software provided in binary form under this license must not be reverse -+ * engineered, decompiled, modified and/or disassembled. -+ * -+ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -+ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ */ -+ -+/** -+ @defgroup nrf_sdm_api SoftDevice Manager API -+ @{ -+ -+ @brief APIs for SoftDevice management. -+ -+*/ -+ -+#ifndef NRF_SDM_H__ -+#define NRF_SDM_H__ -+ -+#include -+#include "nrf.h" -+#include "nrf_svc.h" -+#include "nrf_error.h" -+#include "nrf_error_sdm.h" -+#include "nrf_soc.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/** @addtogroup NRF_SDM_DEFINES Defines -+ * @{ */ -+#ifdef NRFSOC_DOXYGEN -+/// Declared in nrf_mbr.h -+#define MBR_SIZE 0 -+#warning test -+#endif -+ -+/** @brief The major version for the SoftDevice binary distributed with this header file. */ -+#define SD_MAJOR_VERSION (5) -+ -+/** @brief The minor version for the SoftDevice binary distributed with this header file. */ -+#define SD_MINOR_VERSION (1) -+ -+/** @brief The bugfix version for the SoftDevice binary distributed with this header file. */ -+#define SD_BUGFIX_VERSION (0) -+ -+/** @brief The full version number for the SoftDevice binary this header file was distributed -+ * with, as a decimal number in the form Mmmmbbb, where: -+ * - M is major version (one or more digits) -+ * - mmm is minor version (three digits) -+ * - bbb is bugfix version (three digits). */ -+#define SD_VERSION (SD_MAJOR_VERSION * 1000000 + SD_MINOR_VERSION * 1000 + SD_BUGFIX_VERSION) -+ -+/** @brief SoftDevice Manager SVC Base number. */ -+#define SDM_SVC_BASE 0x10 -+ -+/** @brief SoftDevice unique string size in bytes. */ -+#define SD_UNIQUE_STR_SIZE 20 -+ -+/** @brief Invalid info field. Returned when an info field does not exist. */ -+#define SDM_INFO_FIELD_INVALID (0) -+ -+/** @brief Defines the SoftDevice Information Structure location (address) as an offset from -+the start of the SoftDevice (without MBR)*/ -+#define SOFTDEVICE_INFO_STRUCT_OFFSET (0x2000) -+ -+/** @brief Defines the absolute SoftDevice Information Structure location (address) when the -+ * SoftDevice is installed just above the MBR (the usual case). */ -+#define SOFTDEVICE_INFO_STRUCT_ADDRESS (SOFTDEVICE_INFO_STRUCT_OFFSET + MBR_SIZE) -+ -+/** @brief Defines the offset for the SoftDevice Information Structure size value relative to the -+ * SoftDevice base address. The size value is of type uint8_t. */ -+#define SD_INFO_STRUCT_SIZE_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET) -+ -+/** @brief Defines the offset for the SoftDevice size value relative to the SoftDevice base address. -+ * The size value is of type uint32_t. */ -+#define SD_SIZE_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x08) -+ -+/** @brief Defines the offset for FWID value relative to the SoftDevice base address. The FWID value -+ * is of type uint16_t. */ -+#define SD_FWID_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x0C) -+ -+/** @brief Defines the offset for the SoftDevice ID relative to the SoftDevice base address. The ID -+ * is of type uint32_t. */ -+#define SD_ID_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x10) -+ -+/** @brief Defines the offset for the SoftDevice version relative to the SoftDevice base address in -+ * the same format as @ref SD_VERSION, stored as an uint32_t. */ -+#define SD_VERSION_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x14) -+ -+/** @brief Defines the offset for the SoftDevice unique string relative to the SoftDevice base address. -+ * The SD_UNIQUE_STR is stored as an array of uint8_t. The size of array is @ref SD_UNIQUE_STR_SIZE. -+ */ -+#define SD_UNIQUE_STR_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x18) -+ -+/** @brief Defines a macro for retrieving the actual SoftDevice Information Structure size value -+ * from a given base address. Use @ref MBR_SIZE as the argument when the SoftDevice is -+ * installed just above the MBR (the usual case). */ -+#define SD_INFO_STRUCT_SIZE_GET(baseaddr) (*((uint8_t *) ((baseaddr) + SD_INFO_STRUCT_SIZE_OFFSET))) -+ -+/** @brief Defines a macro for retrieving the actual SoftDevice size value from a given base -+ * address. Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above -+ * the MBR (the usual case). */ -+#define SD_SIZE_GET(baseaddr) (*((uint32_t *) ((baseaddr) + SD_SIZE_OFFSET))) -+ -+/** @brief Defines a macro for retrieving the actual FWID value from a given base address. Use -+ * @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR (the usual -+ * case). */ -+#define SD_FWID_GET(baseaddr) (*((uint16_t *) ((baseaddr) + SD_FWID_OFFSET))) -+ -+/** @brief Defines a macro for retrieving the actual SoftDevice ID from a given base address. Use -+ * @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR (the -+ * usual case). */ -+#define SD_ID_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_ID_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ -+ ? (*((uint32_t *) ((baseaddr) + SD_ID_OFFSET))) : SDM_INFO_FIELD_INVALID) -+ -+/** @brief Defines a macro for retrieving the actual SoftDevice version from a given base address. -+ * Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR -+ * (the usual case). */ -+#define SD_VERSION_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_VERSION_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ -+ ? (*((uint32_t *) ((baseaddr) + SD_VERSION_OFFSET))) : SDM_INFO_FIELD_INVALID) -+ -+/** @brief Defines a macro for retrieving the address of SoftDevice unique str based on a given base address. -+ * Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR -+ * (the usual case). */ -+#define SD_UNIQUE_STR_ADDR_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_UNIQUE_STR_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ -+ ? (((uint8_t *) ((baseaddr) + SD_UNIQUE_STR_OFFSET))) : SDM_INFO_FIELD_INVALID) -+ -+/**@defgroup NRF_FAULT_ID_RANGES Fault ID ranges -+ * @{ */ -+#define NRF_FAULT_ID_SD_RANGE_START 0x00000000 /**< SoftDevice ID range start. */ -+#define NRF_FAULT_ID_APP_RANGE_START 0x00001000 /**< Application ID range start. */ -+/**@} */ -+ -+/**@defgroup NRF_FAULT_IDS Fault ID types -+ * @{ */ -+#define NRF_FAULT_ID_SD_ASSERT (NRF_FAULT_ID_SD_RANGE_START + 1) /**< SoftDevice assertion. The info parameter is reserved for future used. */ -+#define NRF_FAULT_ID_APP_MEMACC (NRF_FAULT_ID_APP_RANGE_START + 1) /**< Application invalid memory access. The info parameter will contain 0x00000000, -+ in case of SoftDevice RAM access violation. In case of SoftDevice peripheral -+ register violation the info parameter will contain the sub-region number of -+ PREGION[0], on whose address range the disallowed write access caused the -+ memory access fault. */ -+/**@} */ -+ -+/** @} */ -+ -+/** @addtogroup NRF_SDM_ENUMS Enumerations -+ * @{ */ -+ -+/**@brief nRF SoftDevice Manager API SVC numbers. */ -+enum NRF_SD_SVCS -+{ -+ SD_SOFTDEVICE_ENABLE = SDM_SVC_BASE, /**< ::sd_softdevice_enable */ -+ SD_SOFTDEVICE_DISABLE, /**< ::sd_softdevice_disable */ -+ SD_SOFTDEVICE_IS_ENABLED, /**< ::sd_softdevice_is_enabled */ -+ SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, /**< ::sd_softdevice_vector_table_base_set */ -+ SVC_SDM_LAST /**< Placeholder for last SDM SVC */ -+}; -+ -+/** @} */ -+ -+/** @addtogroup NRF_SDM_DEFINES Defines -+ * @{ */ -+ -+/**@defgroup NRF_CLOCK_LF_ACCURACY Clock accuracy -+ * @{ */ -+ -+#define NRF_CLOCK_LF_ACCURACY_250_PPM (0) /**< Default: 250 ppm */ -+#define NRF_CLOCK_LF_ACCURACY_500_PPM (1) /**< 500 ppm */ -+#define NRF_CLOCK_LF_ACCURACY_150_PPM (2) /**< 150 ppm */ -+#define NRF_CLOCK_LF_ACCURACY_100_PPM (3) /**< 100 ppm */ -+#define NRF_CLOCK_LF_ACCURACY_75_PPM (4) /**< 75 ppm */ -+#define NRF_CLOCK_LF_ACCURACY_50_PPM (5) /**< 50 ppm */ -+#define NRF_CLOCK_LF_ACCURACY_30_PPM (6) /**< 30 ppm */ -+#define NRF_CLOCK_LF_ACCURACY_20_PPM (7) /**< 20 ppm */ -+#define NRF_CLOCK_LF_ACCURACY_10_PPM (8) /**< 10 ppm */ -+#define NRF_CLOCK_LF_ACCURACY_5_PPM (9) /**< 5 ppm */ -+#define NRF_CLOCK_LF_ACCURACY_2_PPM (10) /**< 2 ppm */ -+#define NRF_CLOCK_LF_ACCURACY_1_PPM (11) /**< 1 ppm */ -+ -+/** @} */ -+ -+/**@defgroup NRF_CLOCK_LF_SRC Possible LFCLK oscillator sources -+ * @{ */ -+ -+#define NRF_CLOCK_LF_SRC_RC (0) /**< LFCLK RC oscillator. */ -+#define NRF_CLOCK_LF_SRC_XTAL (1) /**< LFCLK crystal oscillator. */ -+#define NRF_CLOCK_LF_SRC_SYNTH (2) /**< LFCLK Synthesized from HFCLK. */ -+ -+/** @} */ -+ -+/** @} */ -+ -+/** @addtogroup NRF_SDM_TYPES Types -+ * @{ */ -+ -+/**@brief Type representing LFCLK oscillator source. */ -+typedef struct -+{ -+ uint8_t source; /**< LF oscillator clock source, see @ref NRF_CLOCK_LF_SRC. */ -+ uint8_t rc_ctiv; /**< Only for ::NRF_CLOCK_LF_SRC_RC: Calibration timer interval in 1/4 second -+ units (nRF52: 1-32). -+ @note To avoid excessive clock drift, 0.5 degrees Celsius is the -+ maximum temperature change allowed in one calibration timer -+ interval. The interval should be selected to ensure this. -+ -+ @note Must be 0 if source is not ::NRF_CLOCK_LF_SRC_RC. */ -+ uint8_t rc_temp_ctiv; /**< Only for ::NRF_CLOCK_LF_SRC_RC: How often (in number of calibration -+ intervals) the RC oscillator shall be calibrated if the temperature -+ hasn't changed. -+ 0: Always calibrate even if the temperature hasn't changed. -+ 1: Only calibrate if the temperature has changed (legacy - nRF51 only). -+ 2-33: Check the temperature and only calibrate if it has changed, -+ however calibration will take place every rc_temp_ctiv -+ intervals in any case. -+ -+ @note Must be 0 if source is not ::NRF_CLOCK_LF_SRC_RC. -+ -+ @note For nRF52, the application must ensure calibration at least once -+ every 8 seconds to ensure +/-500 ppm clock stability. The -+ recommended configuration for ::NRF_CLOCK_LF_SRC_RC on nRF52 is -+ rc_ctiv=16 and rc_temp_ctiv=2. This will ensure calibration at -+ least once every 8 seconds and for temperature changes of 0.5 -+ degrees Celsius every 4 seconds. See the Product Specification -+ for the nRF52 device being used for more information.*/ -+ uint8_t accuracy; /**< External clock accuracy used in the LL to compute timing -+ windows, see @ref NRF_CLOCK_LF_ACCURACY.*/ -+} nrf_clock_lf_cfg_t; -+ -+/**@brief Fault Handler type. -+ * -+ * When certain unrecoverable errors occur within the application or SoftDevice the fault handler will be called back. -+ * The protocol stack will be in an undefined state when this happens and the only way to recover will be to -+ * perform a reset, using e.g. CMSIS NVIC_SystemReset(). -+ * If the application returns from the fault handler the SoftDevice will call NVIC_SystemReset(). -+ * -+ * @note This callback is executed in HardFault context, thus SVC functions cannot be called from the fault callback. -+ * -+ * @param[in] id Fault identifier. See @ref NRF_FAULT_IDS. -+ * @param[in] pc The program counter of the instruction that triggered the fault. -+ * @param[in] info Optional additional information regarding the fault. Refer to each Fault identifier for details. -+ * -+ * @note When id is set to @ref NRF_FAULT_ID_APP_MEMACC, pc will contain the address of the instruction being executed at the time when -+ * the fault is detected by the CPU. The CPU program counter may have advanced up to 2 instructions (no branching) after the one that triggered the fault. -+ */ -+typedef void (*nrf_fault_handler_t)(uint32_t id, uint32_t pc, uint32_t info); -+ -+/** @} */ -+ -+/** @addtogroup NRF_SDM_FUNCTIONS Functions -+ * @{ */ -+ -+/**@brief Enables the SoftDevice and by extension the protocol stack. -+ * -+ * @note Some care must be taken if a low frequency clock source is already running when calling this function: -+ * If the LF clock has a different source then the one currently running, it will be stopped. Then, the new -+ * clock source will be started. -+ * -+ * @note This function has no effect when returning with an error. -+ * -+ * @post If return code is ::NRF_SUCCESS -+ * - SoC library and protocol stack APIs are made available. -+ * - A portion of RAM will be unavailable (see relevant SDS documentation). -+ * - Some peripherals will be unavailable or available only through the SoC API (see relevant SDS documentation). -+ * - Interrupts will not arrive from protected peripherals or interrupts. -+ * - nrf_nvic_ functions must be used instead of CMSIS NVIC_ functions for reliable usage of the SoftDevice. -+ * - Interrupt latency may be affected by the SoftDevice (see relevant SDS documentation). -+ * - Chosen low frequency clock source will be running. -+ * -+ * @param p_clock_lf_cfg Low frequency clock source and accuracy. -+ If NULL the clock will be configured as an RC source with rc_ctiv = 16 and .rc_temp_ctiv = 2 -+ In the case of XTAL source, the PPM accuracy of the chosen clock source must be greater than or equal to the actual characteristics of your XTAL clock. -+ * @param fault_handler Callback to be invoked in case of fault, cannot be NULL. -+ * -+ * @retval ::NRF_SUCCESS -+ * @retval ::NRF_ERROR_INVALID_ADDR Invalid or NULL pointer supplied. -+ * @retval ::NRF_ERROR_INVALID_STATE SoftDevice is already enabled, and the clock source and fault handler cannot be updated. -+ * @retval ::NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION SoftDevice interrupt is already enabled, or an enabled interrupt has an illegal priority level. -+ * @retval ::NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN Unknown low frequency clock source selected. -+ */ -+SVCALL(SD_SOFTDEVICE_ENABLE, uint32_t, sd_softdevice_enable(nrf_clock_lf_cfg_t const * p_clock_lf_cfg, nrf_fault_handler_t fault_handler)); -+ -+ -+/**@brief Disables the SoftDevice and by extension the protocol stack. -+ * -+ * Idempotent function to disable the SoftDevice. -+ * -+ * @post SoC library and protocol stack APIs are made unavailable. -+ * @post All interrupts that was protected by the SoftDevice will be disabled and initialized to priority 0 (highest). -+ * @post All peripherals used by the SoftDevice will be reset to default values. -+ * @post All of RAM become available. -+ * @post All interrupts are forwarded to the application. -+ * @post LFCLK source chosen in ::sd_softdevice_enable will be left running. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_SOFTDEVICE_DISABLE, uint32_t, sd_softdevice_disable(void)); -+ -+/**@brief Check if the SoftDevice is enabled. -+ * -+ * @param[out] p_softdevice_enabled If the SoftDevice is enabled: 1 else 0. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_SOFTDEVICE_IS_ENABLED, uint32_t, sd_softdevice_is_enabled(uint8_t * p_softdevice_enabled)); -+ -+/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the SoftDevice -+ * -+ * This function is only intended to be called when a bootloader is enabled. -+ * -+ * @param[in] address The base address of the interrupt vector table for forwarded interrupts. -+ -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, uint32_t, sd_softdevice_vector_table_base_set(uint32_t address)); -+ -+/** @} */ -+ -+#ifdef __cplusplus -+} -+#endif -+#endif // NRF_SDM_H__ -+ -+/** -+ @} -+*/ -diff -u -r -N a/components/softdevice/s132v5/headers/nrf_soc.h b/components/softdevice/s132v5/headers/nrf_soc.h ---- a/components/softdevice/s132v5/headers/nrf_soc.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v5/headers/nrf_soc.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,934 @@ -+/* -+ * Copyright (c) 2015 - 2017, Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form, except as embedded into a Nordic -+ * Semiconductor ASA integrated circuit in a product or a software update for -+ * such product, must reproduce the above copyright notice, this list of -+ * conditions and the following disclaimer in the documentation and/or other -+ * materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its -+ * contributors may be used to endorse or promote products derived from this -+ * software without specific prior written permission. -+ * -+ * 4. This software, with or without modification, must only be used with a -+ * Nordic Semiconductor ASA integrated circuit. -+ * -+ * 5. Any software provided in binary form under this license must not be reverse -+ * engineered, decompiled, modified and/or disassembled. -+ * -+ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -+ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ */ -+ -+/** -+ * @defgroup nrf_soc_api SoC Library API -+ * @{ -+ * -+ * @brief APIs for the SoC library. -+ * -+ */ -+ -+#ifndef NRF_SOC_H__ -+#define NRF_SOC_H__ -+ -+#include -+#include "nrf.h" -+#include "nrf_svc.h" -+#include "nrf_error.h" -+#include "nrf_error_soc.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/**@addtogroup NRF_SOC_DEFINES Defines -+ * @{ */ -+ -+/**@brief The number of the lowest SVC number reserved for the SoC library. */ -+#define SOC_SVC_BASE (0x20) /**< Base value for SVCs that are available when the SoftDevice is disabled. */ -+#define SOC_SVC_BASE_NOT_AVAILABLE (0x2B) /**< Base value for SVCs that are not available when the SoftDevice is disabled. */ -+ -+/**@brief Guaranteed time for application to process radio inactive notification. */ -+#define NRF_RADIO_NOTIFICATION_INACTIVE_GUARANTEED_TIME_US (62) -+ -+/**@brief The minimum allowed timeslot extension time. */ -+#define NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US (200) -+ -+/**@brief The maximum processing time to handle a timeslot extension. */ -+#define NRF_RADIO_MAX_EXTENSION_PROCESSING_TIME_US (17) -+ -+/**@brief The latest time before the end of a timeslot the timeslot can be extended. */ -+#define NRF_RADIO_MIN_EXTENSION_MARGIN_US (79) -+ -+#define SOC_ECB_KEY_LENGTH (16) /**< ECB key length. */ -+#define SOC_ECB_CLEARTEXT_LENGTH (16) /**< ECB cleartext length. */ -+#define SOC_ECB_CIPHERTEXT_LENGTH (SOC_ECB_CLEARTEXT_LENGTH) /**< ECB ciphertext length. */ -+ -+#define SD_EVT_IRQn (SWI2_IRQn) /**< SoftDevice Event IRQ number. Used for both protocol events and SoC events. */ -+#define SD_EVT_IRQHandler (SWI2_IRQHandler) /**< SoftDevice Event IRQ handler. Used for both protocol events and SoC events. -+ The default interrupt priority for this handler is set to 4 */ -+#define RADIO_NOTIFICATION_IRQn (SWI1_IRQn) /**< The radio notification IRQ number. */ -+#define RADIO_NOTIFICATION_IRQHandler (SWI1_IRQHandler) /**< The radio notification IRQ handler. -+ The default interrupt priority for this handler is set to 4 */ -+#define NRF_RADIO_LENGTH_MIN_US (100) /**< The shortest allowed radio timeslot, in microseconds. */ -+#define NRF_RADIO_LENGTH_MAX_US (100000) /**< The longest allowed radio timeslot, in microseconds. */ -+ -+#define NRF_RADIO_DISTANCE_MAX_US (128000000UL - 1UL) /**< The longest timeslot distance, in microseconds, allowed for the distance parameter (see @ref nrf_radio_request_normal_t) in the request. */ -+ -+#define NRF_RADIO_EARLIEST_TIMEOUT_MAX_US (128000000UL - 1UL) /**< The longest timeout, in microseconds, allowed when requesting the earliest possible timeslot. */ -+ -+#define NRF_RADIO_START_JITTER_US (2) /**< The maximum jitter in @ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START relative to the requested start time. */ -+ -+/**@} */ -+ -+/**@addtogroup NRF_SOC_ENUMS Enumerations -+ * @{ */ -+ -+/**@brief The SVC numbers used by the SVC functions in the SoC library. */ -+enum NRF_SOC_SVCS -+{ -+ SD_PPI_CHANNEL_ENABLE_GET = SOC_SVC_BASE, -+ SD_PPI_CHANNEL_ENABLE_SET, -+ SD_PPI_CHANNEL_ENABLE_CLR, -+ SD_PPI_CHANNEL_ASSIGN, -+ SD_PPI_GROUP_TASK_ENABLE, -+ SD_PPI_GROUP_TASK_DISABLE, -+ SD_PPI_GROUP_ASSIGN, -+ SD_PPI_GROUP_GET, -+ SD_FLASH_PAGE_ERASE, -+ SD_FLASH_WRITE, -+ SD_FLASH_PROTECT, -+ SD_MUTEX_NEW = SOC_SVC_BASE_NOT_AVAILABLE, -+ SD_MUTEX_ACQUIRE, -+ SD_MUTEX_RELEASE, -+ SD_RAND_APPLICATION_POOL_CAPACITY_GET, -+ SD_RAND_APPLICATION_BYTES_AVAILABLE_GET, -+ SD_RAND_APPLICATION_VECTOR_GET, -+ SD_POWER_MODE_SET, -+ SD_POWER_SYSTEM_OFF, -+ SD_POWER_RESET_REASON_GET, -+ SD_POWER_RESET_REASON_CLR, -+ SD_POWER_POF_ENABLE, -+ SD_POWER_POF_THRESHOLD_SET, -+ SD_POWER_RAM_POWER_SET, -+ SD_POWER_RAM_POWER_CLR, -+ SD_POWER_RAM_POWER_GET, -+ SD_POWER_GPREGRET_SET, -+ SD_POWER_GPREGRET_CLR, -+ SD_POWER_GPREGRET_GET, -+ SD_POWER_DCDC_MODE_SET, -+ SD_APP_EVT_WAIT, -+ SD_CLOCK_HFCLK_REQUEST, -+ SD_CLOCK_HFCLK_RELEASE, -+ SD_CLOCK_HFCLK_IS_RUNNING, -+ SD_RADIO_NOTIFICATION_CFG_SET, -+ SD_ECB_BLOCK_ENCRYPT, -+ SD_ECB_BLOCKS_ENCRYPT, -+ SD_RADIO_SESSION_OPEN, -+ SD_RADIO_SESSION_CLOSE, -+ SD_RADIO_REQUEST, -+ SD_EVT_GET, -+ SD_TEMP_GET, -+ SVC_SOC_LAST -+}; -+ -+/**@brief Possible values of a ::nrf_mutex_t. */ -+enum NRF_MUTEX_VALUES -+{ -+ NRF_MUTEX_FREE, -+ NRF_MUTEX_TAKEN -+}; -+ -+/**@brief Power modes. */ -+enum NRF_POWER_MODES -+{ -+ NRF_POWER_MODE_CONSTLAT, /**< Constant latency mode. See power management in the reference manual. */ -+ NRF_POWER_MODE_LOWPWR /**< Low power mode. See power management in the reference manual. */ -+}; -+ -+ -+/**@brief Power failure thresholds */ -+enum NRF_POWER_THRESHOLDS -+{ -+ NRF_POWER_THRESHOLD_V17 = 4UL, /**< 1.7 Volts power failure threshold. */ -+ NRF_POWER_THRESHOLD_V18, /**< 1.8 Volts power failure threshold. */ -+ NRF_POWER_THRESHOLD_V19, /**< 1.9 Volts power failure threshold. */ -+ NRF_POWER_THRESHOLD_V20, /**< 2.0 Volts power failure threshold. */ -+ NRF_POWER_THRESHOLD_V21, /**< 2.1 Volts power failure threshold. */ -+ NRF_POWER_THRESHOLD_V22, /**< 2.2 Volts power failure threshold. */ -+ NRF_POWER_THRESHOLD_V23, /**< 2.3 Volts power failure threshold. */ -+ NRF_POWER_THRESHOLD_V24, /**< 2.4 Volts power failure threshold. */ -+ NRF_POWER_THRESHOLD_V25, /**< 2.5 Volts power failure threshold. */ -+ NRF_POWER_THRESHOLD_V26, /**< 2.6 Volts power failure threshold. */ -+ NRF_POWER_THRESHOLD_V27, /**< 2.7 Volts power failure threshold. */ -+ NRF_POWER_THRESHOLD_V28 /**< 2.8 Volts power failure threshold. */ -+}; -+ -+ -+/**@brief DC/DC converter modes. */ -+enum NRF_POWER_DCDC_MODES -+{ -+ NRF_POWER_DCDC_DISABLE, /**< The DCDC is disabled. */ -+ NRF_POWER_DCDC_ENABLE /**< The DCDC is enabled. */ -+}; -+ -+/**@brief Radio notification distances. */ -+enum NRF_RADIO_NOTIFICATION_DISTANCES -+{ -+ NRF_RADIO_NOTIFICATION_DISTANCE_NONE = 0, /**< The event does not have a notification. */ -+ NRF_RADIO_NOTIFICATION_DISTANCE_800US, /**< The distance from the active notification to start of radio activity. */ -+ NRF_RADIO_NOTIFICATION_DISTANCE_1740US, /**< The distance from the active notification to start of radio activity. */ -+ NRF_RADIO_NOTIFICATION_DISTANCE_2680US, /**< The distance from the active notification to start of radio activity. */ -+ NRF_RADIO_NOTIFICATION_DISTANCE_3620US, /**< The distance from the active notification to start of radio activity. */ -+ NRF_RADIO_NOTIFICATION_DISTANCE_4560US, /**< The distance from the active notification to start of radio activity. */ -+ NRF_RADIO_NOTIFICATION_DISTANCE_5500US /**< The distance from the active notification to start of radio activity. */ -+}; -+ -+ -+/**@brief Radio notification types. */ -+enum NRF_RADIO_NOTIFICATION_TYPES -+{ -+ NRF_RADIO_NOTIFICATION_TYPE_NONE = 0, /**< The event does not have a radio notification signal. */ -+ NRF_RADIO_NOTIFICATION_TYPE_INT_ON_ACTIVE, /**< Using interrupt for notification when the radio will be enabled. */ -+ NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE, /**< Using interrupt for notification when the radio has been disabled. */ -+ NRF_RADIO_NOTIFICATION_TYPE_INT_ON_BOTH, /**< Using interrupt for notification both when the radio will be enabled and disabled. */ -+}; -+ -+/**@brief The Radio signal callback types. */ -+enum NRF_RADIO_CALLBACK_SIGNAL_TYPE -+{ -+ NRF_RADIO_CALLBACK_SIGNAL_TYPE_START, /**< This signal indicates the start of the radio timeslot. */ -+ NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0, /**< This signal indicates the NRF_TIMER0 interrupt. */ -+ NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO, /**< This signal indicates the NRF_RADIO interrupt. */ -+ NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_FAILED, /**< This signal indicates extend action failed. */ -+ NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_SUCCEEDED /**< This signal indicates extend action succeeded. */ -+}; -+ -+/**@brief The actions requested by the signal callback. -+ * -+ * This code gives the SOC instructions about what action to take when the signal callback has -+ * returned. -+ */ -+enum NRF_RADIO_SIGNAL_CALLBACK_ACTION -+{ -+ NRF_RADIO_SIGNAL_CALLBACK_ACTION_NONE, /**< Return without action. */ -+ NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND, /**< Request an extension of the current -+ timeslot. Maximum execution time for this action: -+ @ref NRF_RADIO_MAX_EXTENSION_PROCESSING_TIME_US. -+ This action must be started at least -+ @ref NRF_RADIO_MIN_EXTENSION_MARGIN_US before -+ the end of the timeslot. */ -+ NRF_RADIO_SIGNAL_CALLBACK_ACTION_END, /**< End the current radio timeslot. */ -+ NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END /**< Request a new radio timeslot and end the current timeslot. */ -+}; -+ -+/**@brief Radio timeslot high frequency clock source configuration. */ -+enum NRF_RADIO_HFCLK_CFG -+{ -+ NRF_RADIO_HFCLK_CFG_XTAL_GUARANTEED, /**< The SoftDevice will guarantee that the high frequency clock source is the -+ external crystal for the whole duration of the timeslot. This should be the -+ preferred option for events that use the radio or require high timing accuracy. -+ @note The SoftDevice will automatically turn on and off the external crystal, -+ at the beginning and end of the timeslot, respectively. The crystal may also -+ intentionally be left running after the timeslot, in cases where it is needed -+ by the SoftDevice shortly after the end of the timeslot. */ -+ NRF_RADIO_HFCLK_CFG_NO_GUARANTEE /**< This configuration allows for earlier and tighter scheduling of timeslots. -+ The RC oscillator may be the clock source in part or for the whole duration of the timeslot. -+ The RC oscillator's accuracy must therefore be taken into consideration. -+ @note If the application will use the radio peripheral in timeslots with this configuration, -+ it must make sure that the crystal is running and stable before starting the radio. */ -+}; -+ -+/**@brief Radio timeslot priorities. */ -+enum NRF_RADIO_PRIORITY -+{ -+ NRF_RADIO_PRIORITY_HIGH, /**< High (equal priority as the normal connection priority of the SoftDevice stack(s)). */ -+ NRF_RADIO_PRIORITY_NORMAL, /**< Normal (equal priority as the priority of secondary activities of the SoftDevice stack(s)). */ -+}; -+ -+/**@brief Radio timeslot request type. */ -+enum NRF_RADIO_REQUEST_TYPE -+{ -+ NRF_RADIO_REQ_TYPE_EARLIEST, /**< Request radio timeslot as early as possible. This should always be used for the first request in a session. */ -+ NRF_RADIO_REQ_TYPE_NORMAL /**< Normal radio timeslot request. */ -+}; -+ -+/**@brief SoC Events. */ -+enum NRF_SOC_EVTS -+{ -+ NRF_EVT_HFCLKSTARTED, /**< Event indicating that the HFCLK has started. */ -+ NRF_EVT_POWER_FAILURE_WARNING, /**< Event indicating that a power failure warning has occurred. */ -+ NRF_EVT_FLASH_OPERATION_SUCCESS, /**< Event indicating that the ongoing flash operation has completed successfully. */ -+ NRF_EVT_FLASH_OPERATION_ERROR, /**< Event indicating that the ongoing flash operation has timed out with an error. */ -+ NRF_EVT_RADIO_BLOCKED, /**< Event indicating that a radio timeslot was blocked. */ -+ NRF_EVT_RADIO_CANCELED, /**< Event indicating that a radio timeslot was canceled by SoftDevice. */ -+ NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN, /**< Event indicating that a radio timeslot signal callback handler return was invalid. */ -+ NRF_EVT_RADIO_SESSION_IDLE, /**< Event indicating that a radio timeslot session is idle. */ -+ NRF_EVT_RADIO_SESSION_CLOSED, /**< Event indicating that a radio timeslot session is closed. */ -+ NRF_EVT_NUMBER_OF_EVTS -+}; -+ -+/**@} */ -+ -+ -+/**@addtogroup NRF_SOC_STRUCTURES Structures -+ * @{ */ -+ -+/**@brief Represents a mutex for use with the nrf_mutex functions. -+ * @note Accessing the value directly is not safe, use the mutex functions! -+ */ -+typedef volatile uint8_t nrf_mutex_t; -+ -+/**@brief Parameters for a request for a timeslot as early as possible. */ -+typedef struct -+{ -+ uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ -+ uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ -+ uint32_t length_us; /**< The radio timeslot length (in the range 100 to 100,000] microseconds). */ -+ uint32_t timeout_us; /**< Longest acceptable delay until the start of the requested timeslot (up to @ref NRF_RADIO_EARLIEST_TIMEOUT_MAX_US microseconds). */ -+} nrf_radio_request_earliest_t; -+ -+/**@brief Parameters for a normal radio timeslot request. */ -+typedef struct -+{ -+ uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ -+ uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ -+ uint32_t distance_us; /**< Distance from the start of the previous radio timeslot (up to @ref NRF_RADIO_DISTANCE_MAX_US microseconds). */ -+ uint32_t length_us; /**< The radio timeslot length (in the range [100..100,000] microseconds). */ -+} nrf_radio_request_normal_t; -+ -+/**@brief Radio timeslot request parameters. */ -+typedef struct -+{ -+ uint8_t request_type; /**< Type of request, see @ref NRF_RADIO_REQUEST_TYPE. */ -+ union -+ { -+ nrf_radio_request_earliest_t earliest; /**< Parameters for requesting a radio timeslot as early as possible. */ -+ nrf_radio_request_normal_t normal; /**< Parameters for requesting a normal radio timeslot. */ -+ } params; /**< Parameter union. */ -+} nrf_radio_request_t; -+ -+/**@brief Return parameters of the radio timeslot signal callback. */ -+typedef struct -+{ -+ uint8_t callback_action; /**< The action requested by the application when returning from the signal callback, see @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION. */ -+ union -+ { -+ struct -+ { -+ nrf_radio_request_t * p_next; /**< The request parameters for the next radio timeslot. */ -+ } request; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END. */ -+ struct -+ { -+ uint32_t length_us; /**< Requested extension of the radio timeslot duration (microseconds) (for minimum time see @ref NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US). */ -+ } extend; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND. */ -+ } params; /**< Parameter union. */ -+} nrf_radio_signal_callback_return_param_t; -+ -+/**@brief The radio timeslot signal callback type. -+ * -+ * @note In case of invalid return parameters, the radio timeslot will automatically end -+ * immediately after returning from the signal callback and the -+ * @ref NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN event will be sent. -+ * @note The returned struct pointer must remain valid after the signal callback -+ * function returns. For instance, this means that it must not point to a stack variable. -+ * -+ * @param[in] signal_type Type of signal, see @ref NRF_RADIO_CALLBACK_SIGNAL_TYPE. -+ * -+ * @return Pointer to structure containing action requested by the application. -+ */ -+typedef nrf_radio_signal_callback_return_param_t * (*nrf_radio_signal_callback_t) (uint8_t signal_type); -+ -+/**@brief AES ECB parameter typedefs */ -+typedef uint8_t soc_ecb_key_t[SOC_ECB_KEY_LENGTH]; /**< Encryption key type. */ -+typedef uint8_t soc_ecb_cleartext_t[SOC_ECB_CLEARTEXT_LENGTH]; /**< Cleartext data type. */ -+typedef uint8_t soc_ecb_ciphertext_t[SOC_ECB_CIPHERTEXT_LENGTH]; /**< Ciphertext data type. */ -+ -+/**@brief AES ECB data structure */ -+typedef struct -+{ -+ soc_ecb_key_t key; /**< Encryption key. */ -+ soc_ecb_cleartext_t cleartext; /**< Cleartext data. */ -+ soc_ecb_ciphertext_t ciphertext; /**< Ciphertext data. */ -+} nrf_ecb_hal_data_t; -+ -+/**@brief AES ECB block. Used to provide multiple blocks in a single call -+ to @ref sd_ecb_blocks_encrypt.*/ -+typedef struct -+{ -+ soc_ecb_key_t const * p_key; /**< Pointer to the Encryption key. */ -+ soc_ecb_cleartext_t const * p_cleartext; /**< Pointer to the Cleartext data. */ -+ soc_ecb_ciphertext_t * p_ciphertext; /**< Pointer to the Ciphertext data. */ -+} nrf_ecb_hal_data_block_t; -+ -+/**@} */ -+ -+/**@addtogroup NRF_SOC_FUNCTIONS Functions -+ * @{ */ -+ -+/**@brief Initialize a mutex. -+ * -+ * @param[in] p_mutex Pointer to the mutex to initialize. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_MUTEX_NEW, uint32_t, sd_mutex_new(nrf_mutex_t * p_mutex)); -+ -+/**@brief Attempt to acquire a mutex. -+ * -+ * @param[in] p_mutex Pointer to the mutex to acquire. -+ * -+ * @retval ::NRF_SUCCESS The mutex was successfully acquired. -+ * @retval ::NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN The mutex could not be acquired. -+ */ -+SVCALL(SD_MUTEX_ACQUIRE, uint32_t, sd_mutex_acquire(nrf_mutex_t * p_mutex)); -+ -+/**@brief Release a mutex. -+ * -+ * @param[in] p_mutex Pointer to the mutex to release. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_MUTEX_RELEASE, uint32_t, sd_mutex_release(nrf_mutex_t * p_mutex)); -+ -+/**@brief Query the capacity of the application random pool. -+ * -+ * @param[out] p_pool_capacity The capacity of the pool. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_RAND_APPLICATION_POOL_CAPACITY_GET, uint32_t, sd_rand_application_pool_capacity_get(uint8_t * p_pool_capacity)); -+ -+/**@brief Get number of random bytes available to the application. -+ * -+ * @param[out] p_bytes_available The number of bytes currently available in the pool. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_RAND_APPLICATION_BYTES_AVAILABLE_GET, uint32_t, sd_rand_application_bytes_available_get(uint8_t * p_bytes_available)); -+ -+/**@brief Get random bytes from the application pool. -+ * -+ * @param[out] p_buff Pointer to unit8_t buffer for storing the bytes. -+ * @param[in] length Number of bytes to take from pool and place in p_buff. -+ * -+ * @retval ::NRF_SUCCESS The requested bytes were written to p_buff. -+ * @retval ::NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES No bytes were written to the buffer, because there were not enough bytes available. -+*/ -+SVCALL(SD_RAND_APPLICATION_VECTOR_GET, uint32_t, sd_rand_application_vector_get(uint8_t * p_buff, uint8_t length)); -+ -+/**@brief Gets the reset reason register. -+ * -+ * @param[out] p_reset_reason Contents of the NRF_POWER->RESETREAS register. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_POWER_RESET_REASON_GET, uint32_t, sd_power_reset_reason_get(uint32_t * p_reset_reason)); -+ -+/**@brief Clears the bits of the reset reason register. -+ * -+ * @param[in] reset_reason_clr_msk Contains the bits to clear from the reset reason register. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_POWER_RESET_REASON_CLR, uint32_t, sd_power_reset_reason_clr(uint32_t reset_reason_clr_msk)); -+ -+/**@brief Sets the power mode when in CPU sleep. -+ * -+ * @param[in] power_mode The power mode to use when in CPU sleep, see @ref NRF_POWER_MODES. @sa sd_app_evt_wait -+ * -+ * @retval ::NRF_SUCCESS The power mode was set. -+ * @retval ::NRF_ERROR_SOC_POWER_MODE_UNKNOWN The power mode was unknown. -+ */ -+SVCALL(SD_POWER_MODE_SET, uint32_t, sd_power_mode_set(uint8_t power_mode)); -+ -+/**@brief Puts the chip in System OFF mode. -+ * -+ * @retval ::NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN -+ */ -+SVCALL(SD_POWER_SYSTEM_OFF, uint32_t, sd_power_system_off(void)); -+ -+/**@brief Enables or disables the power-fail comparator. -+ * -+ * Enabling this will give a SoftDevice event (NRF_EVT_POWER_FAILURE_WARNING) when the power failure warning occurs. -+ * The event can be retrieved with sd_evt_get(); -+ * -+ * @param[in] pof_enable True if the power-fail comparator should be enabled, false if it should be disabled. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_POWER_POF_ENABLE, uint32_t, sd_power_pof_enable(uint8_t pof_enable)); -+ -+/**@brief Sets the power-fail threshold value. -+ * -+ * @param[in] threshold The power-fail threshold value to use, see @ref NRF_POWER_THRESHOLDS. -+ * -+ * @retval ::NRF_SUCCESS The power failure threshold was set. -+ * @retval ::NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN The power failure threshold is unknown. -+ */ -+SVCALL(SD_POWER_POF_THRESHOLD_SET, uint32_t, sd_power_pof_threshold_set(uint8_t threshold)); -+ -+/**@brief Writes the NRF_POWER->RAM[index].POWERSET register. -+ * -+ * @param[in] index Contains the index in the NRF_POWER->RAM[index].POWERSET register to write to. -+ * @param[in] ram_powerset Contains the word to write to the NRF_POWER->RAM[index].POWERSET register. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_POWER_RAM_POWER_SET, uint32_t, sd_power_ram_power_set(uint8_t index, uint32_t ram_powerset)); -+ -+/**@brief Writes the NRF_POWER->RAM[index].POWERCLR register. -+ * -+ * @param[in] index Contains the index in the NRF_POWER->RAM[index].POWERCLR register to write to. -+ * @param[in] ram_powerclr Contains the word to write to the NRF_POWER->RAM[index].POWERCLR register. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_POWER_RAM_POWER_CLR, uint32_t, sd_power_ram_power_clr(uint8_t index, uint32_t ram_powerclr)); -+ -+/**@brief Get contents of NRF_POWER->RAM[index].POWER register, indicates power status of RAM[index] blocks. -+ * -+ * @param[in] index Contains the index in the NRF_POWER->RAM[index].POWER register to read from. -+ * @param[out] p_ram_power Content of NRF_POWER->RAM[index].POWER register. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_POWER_RAM_POWER_GET, uint32_t, sd_power_ram_power_get(uint8_t index, uint32_t * p_ram_power)); -+ -+/**@brief Set bits in the general purpose retention registers (NRF_POWER->GPREGRET*). -+ * -+ * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. -+ * @param[in] gpregret_msk Bits to be set in the GPREGRET register. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_POWER_GPREGRET_SET, uint32_t, sd_power_gpregret_set(uint32_t gpregret_id, uint32_t gpregret_msk)); -+ -+/**@brief Clear bits in the general purpose retention registers (NRF_POWER->GPREGRET*). -+ * -+ * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. -+ * @param[in] gpregret_msk Bits to be clear in the GPREGRET register. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_POWER_GPREGRET_CLR, uint32_t, sd_power_gpregret_clr(uint32_t gpregret_id, uint32_t gpregret_msk)); -+ -+/**@brief Get contents of the general purpose retention registers (NRF_POWER->GPREGRET*). -+ * -+ * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. -+ * @param[out] p_gpregret Contents of the GPREGRET register. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_POWER_GPREGRET_GET, uint32_t, sd_power_gpregret_get(uint32_t gpregret_id, uint32_t *p_gpregret)); -+ -+/**@brief Sets the DCDC mode. -+ * -+ * Enable or disable the DCDC peripheral. -+ * -+ * @param[in] dcdc_mode The mode of the DCDC, see @ref NRF_POWER_DCDC_MODES. -+ * -+ * @retval ::NRF_SUCCESS -+ * @retval ::NRF_ERROR_INVALID_PARAM The DCDC mode is invalid. -+ */ -+SVCALL(SD_POWER_DCDC_MODE_SET, uint32_t, sd_power_dcdc_mode_set(uint8_t dcdc_mode)); -+ -+/**@brief Request the high frequency crystal oscillator. -+ * -+ * Will start the high frequency crystal oscillator, the startup time of the crystal varies -+ * and the ::sd_clock_hfclk_is_running function can be polled to check if it has started. -+ * -+ * @see sd_clock_hfclk_is_running -+ * @see sd_clock_hfclk_release -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_CLOCK_HFCLK_REQUEST, uint32_t, sd_clock_hfclk_request(void)); -+ -+/**@brief Releases the high frequency crystal oscillator. -+ * -+ * Will stop the high frequency crystal oscillator, this happens immediately. -+ * -+ * @see sd_clock_hfclk_is_running -+ * @see sd_clock_hfclk_request -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_CLOCK_HFCLK_RELEASE, uint32_t, sd_clock_hfclk_release(void)); -+ -+/**@brief Checks if the high frequency crystal oscillator is running. -+ * -+ * @see sd_clock_hfclk_request -+ * @see sd_clock_hfclk_release -+ * -+ * @param[out] p_is_running 1 if the external crystal oscillator is running, 0 if not. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_CLOCK_HFCLK_IS_RUNNING, uint32_t, sd_clock_hfclk_is_running(uint32_t * p_is_running)); -+ -+/**@brief Waits for an application event. -+ * -+ * An application event is either an application interrupt or a pended interrupt when the interrupt -+ * is disabled. -+ * -+ * When the application waits for an application event by calling this function, an interrupt that -+ * is enabled will be taken immediately on pending since this function will wait in thread mode, -+ * then the execution will return in the application's main thread. -+ * -+ * In order to wake up from disabled interrupts, the SEVONPEND flag has to be set in the Cortex-M -+ * MCU's System Control Register (SCR), CMSIS_SCB. In that case, when a disabled interrupt gets -+ * pended, this function will return to the application's main thread. -+ * -+ * @note The application must ensure that the pended flag is cleared using ::sd_nvic_ClearPendingIRQ -+ * in order to sleep using this function. This is only necessary for disabled interrupts, as -+ * the interrupt handler will clear the pending flag automatically for enabled interrupts. -+ * -+ * @note If an application interrupt has happened since the last time sd_app_evt_wait was -+ * called this function will return immediately and not go to sleep. This is to avoid race -+ * conditions that can occur when a flag is updated in the interrupt handler and processed -+ * in the main loop. -+ * -+ * @post An application interrupt has happened or a interrupt pending flag is set. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_APP_EVT_WAIT, uint32_t, sd_app_evt_wait(void)); -+ -+/**@brief Get PPI channel enable register contents. -+ * -+ * @param[out] p_channel_enable The contents of the PPI CHEN register. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_PPI_CHANNEL_ENABLE_GET, uint32_t, sd_ppi_channel_enable_get(uint32_t * p_channel_enable)); -+ -+/**@brief Set PPI channel enable register. -+ * -+ * @param[in] channel_enable_set_msk Mask containing the bits to set in the PPI CHEN register. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_PPI_CHANNEL_ENABLE_SET, uint32_t, sd_ppi_channel_enable_set(uint32_t channel_enable_set_msk)); -+ -+/**@brief Clear PPI channel enable register. -+ * -+ * @param[in] channel_enable_clr_msk Mask containing the bits to clear in the PPI CHEN register. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_PPI_CHANNEL_ENABLE_CLR, uint32_t, sd_ppi_channel_enable_clr(uint32_t channel_enable_clr_msk)); -+ -+/**@brief Assign endpoints to a PPI channel. -+ * -+ * @param[in] channel_num Number of the PPI channel to assign. -+ * @param[in] evt_endpoint Event endpoint of the PPI channel. -+ * @param[in] task_endpoint Task endpoint of the PPI channel. -+ * -+ * @retval ::NRF_ERROR_SOC_PPI_INVALID_CHANNEL The channel number is invalid. -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_PPI_CHANNEL_ASSIGN, uint32_t, sd_ppi_channel_assign(uint8_t channel_num, const volatile void * evt_endpoint, const volatile void * task_endpoint)); -+ -+/**@brief Task to enable a channel group. -+ * -+ * @param[in] group_num Number of the channel group. -+ * -+ * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_PPI_GROUP_TASK_ENABLE, uint32_t, sd_ppi_group_task_enable(uint8_t group_num)); -+ -+/**@brief Task to disable a channel group. -+ * -+ * @param[in] group_num Number of the PPI group. -+ * -+ * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_PPI_GROUP_TASK_DISABLE, uint32_t, sd_ppi_group_task_disable(uint8_t group_num)); -+ -+/**@brief Assign PPI channels to a channel group. -+ * -+ * @param[in] group_num Number of the channel group. -+ * @param[in] channel_msk Mask of the channels to assign to the group. -+ * -+ * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_PPI_GROUP_ASSIGN, uint32_t, sd_ppi_group_assign(uint8_t group_num, uint32_t channel_msk)); -+ -+/**@brief Gets the PPI channels of a channel group. -+ * -+ * @param[in] group_num Number of the channel group. -+ * @param[out] p_channel_msk Mask of the channels assigned to the group. -+ * -+ * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_PPI_GROUP_GET, uint32_t, sd_ppi_group_get(uint8_t group_num, uint32_t * p_channel_msk)); -+ -+/**@brief Configures the Radio Notification signal. -+ * -+ * @note -+ * - The notification signal latency depends on the interrupt priority settings of SWI used -+ * for notification signal. -+ * - To ensure that the radio notification signal behaves in a consistent way, the radio -+ * notifications must be configured when there is no protocol stack or other SoftDevice -+ * activity in progress. It is recommended that the radio notification signal is -+ * configured directly after the SoftDevice has been enabled. -+ * - In the period between the ACTIVE signal and the start of the Radio Event, the SoftDevice -+ * will interrupt the application to do Radio Event preparation. -+ * - Using the Radio Notification feature may limit the bandwidth, as the SoftDevice may have -+ * to shorten the connection events to have time for the Radio Notification signals. -+ * -+ * @param[in] type Type of notification signal, see @ref NRF_RADIO_NOTIFICATION_TYPES. -+ * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE shall be used to turn off radio -+ * notification. Using @ref NRF_RADIO_NOTIFICATION_DISTANCE_NONE is -+ * recommended (but not required) to be used with -+ * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE. -+ * -+ * @param[in] distance Distance between the notification signal and start of radio activity, see @ref NRF_RADIO_NOTIFICATION_DISTANCES. -+ * This parameter is ignored when @ref NRF_RADIO_NOTIFICATION_TYPE_NONE or -+ * @ref NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE is used. -+ * -+ * @retval ::NRF_ERROR_INVALID_PARAM The group number is invalid. -+ * @retval ::NRF_ERROR_INVALID_STATE A protocol stack or other SoftDevice is running. Stop all -+ * running activities and retry. -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_RADIO_NOTIFICATION_CFG_SET, uint32_t, sd_radio_notification_cfg_set(uint8_t type, uint8_t distance)); -+ -+/**@brief Encrypts a block according to the specified parameters. -+ * -+ * 128-bit AES encryption. -+ * -+ * @note: -+ * - The application may set the SEVONPEND bit in the SCR to 1 to make the SoftDevice sleep while -+ * the ECB is running. The SEVONPEND bit should only be cleared (set to 0) from application -+ * main or low interrupt level. -+ * -+ * @param[in, out] p_ecb_data Pointer to the ECB parameters' struct (two input -+ * parameters and one output parameter). -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_ECB_BLOCK_ENCRYPT, uint32_t, sd_ecb_block_encrypt(nrf_ecb_hal_data_t * p_ecb_data)); -+ -+/**@brief Encrypts multiple data blocks provided as an array of data block structures. -+ * -+ * @details: Performs 128-bit AES encryption on multiple data blocks -+ * -+ * @note: -+ * - The application may set the SEVONPEND bit in the SCR to 1 to make the SoftDevice sleep while -+ * the ECB is running. The SEVONPEND bit should only be cleared (set to 0) from application -+ * main or low interrupt level. -+ * -+ * @param[in] block_count Count of blocks in the p_data_blocks array. -+ * @param[in,out] p_data_blocks Pointer to the first entry in a contiguous array of -+ * @ref nrf_ecb_hal_data_block_t structures. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+SVCALL(SD_ECB_BLOCKS_ENCRYPT, uint32_t, sd_ecb_blocks_encrypt(uint8_t block_count, nrf_ecb_hal_data_block_t * p_data_blocks)); -+ -+/**@brief Gets any pending events generated by the SoC API. -+ * -+ * The application should keep calling this function to get events, until ::NRF_ERROR_NOT_FOUND is returned. -+ * -+ * @param[out] p_evt_id Set to one of the values in @ref NRF_SOC_EVTS, if any events are pending. -+ * -+ * @retval ::NRF_SUCCESS An event was pending. The event id is written in the p_evt_id parameter. -+ * @retval ::NRF_ERROR_NOT_FOUND No pending events. -+ */ -+SVCALL(SD_EVT_GET, uint32_t, sd_evt_get(uint32_t * p_evt_id)); -+ -+/**@brief Get the temperature measured on the chip -+ * -+ * This function will block until the temperature measurement is done. -+ * It takes around 50 us from call to return. -+ * -+ * @param[out] p_temp Result of temperature measurement. Die temperature in 0.25 degrees Celsius. -+ * -+ * @retval ::NRF_SUCCESS A temperature measurement was done, and the temperature was written to temp -+ */ -+SVCALL(SD_TEMP_GET, uint32_t, sd_temp_get(int32_t * p_temp)); -+ -+/**@brief Flash Write -+* -+* Commands to write a buffer to flash -+* -+* If the SoftDevice is enabled: -+* This call initiates the flash access command, and its completion will be communicated to the -+* application with exactly one of the following events: -+* - @ref NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. -+* - @ref NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. -+* -+* If the SoftDevice is not enabled no event will be generated, and this call will return @ref NRF_SUCCESS when the -+ * write has been completed -+* -+* @note -+* - This call takes control over the radio and the CPU during flash erase and write to make sure that -+* they will not interfere with the flash access. This means that all interrupts will be blocked -+* for a predictable time (depending on the NVMC specification in the device's Product Specification -+* and the command parameters). -+* - The data in the p_src buffer should not be modified before the @ref NRF_EVT_FLASH_OPERATION_SUCCESS -+* or the @ref NRF_EVT_FLASH_OPERATION_ERROR have been received if the SoftDevice is enabled. -+* -+* -+* @param[in] p_dst Pointer to start of flash location to be written. -+* @param[in] p_src Pointer to buffer with data to be written. -+* @param[in] size Number of 32-bit words to write. Maximum size is the number of words in one -+* flash page. See the device's Product Specification for details. -+* -+* @retval ::NRF_ERROR_INVALID_ADDR Tried to write to a non existing flash address, or p_dst or p_src was unaligned. -+* @retval ::NRF_ERROR_BUSY The previous command has not yet completed. -+* @retval ::NRF_ERROR_INVALID_LENGTH Size was 0, or higher than the maximum allowed size. -+* @retval ::NRF_ERROR_FORBIDDEN Tried to write to or read from protected location. -+* @retval ::NRF_SUCCESS The command was accepted. -+*/ -+SVCALL(SD_FLASH_WRITE, uint32_t, sd_flash_write(uint32_t * p_dst, uint32_t const * p_src, uint32_t size)); -+ -+ -+/**@brief Flash Erase page -+* -+* Commands to erase a flash page -+* If the SoftDevice is enabled: -+* This call initiates the flash access command, and its completion will be communicated to the -+* application with exactly one of the following events: -+* - @ref NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. -+* - @ref NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. -+* -+* If the SoftDevice is not enabled no event will be generated, and this call will return @ref NRF_SUCCESS when the -+* erase has been completed -+* -+* @note -+* - This call takes control over the radio and the CPU during flash erase and write to make sure that -+* they will not interfere with the flash access. This means that all interrupts will be blocked -+* for a predictable time (depending on the NVMC specification in the device's Product Specification -+* and the command parameters). -+* -+* -+* @param[in] page_number Page number of the page to erase -+* -+* @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. -+* @retval ::NRF_ERROR_INVALID_ADDR Tried to erase to a non existing flash page. -+* @retval ::NRF_ERROR_BUSY The previous command has not yet completed. -+* @retval ::NRF_ERROR_FORBIDDEN Tried to erase a protected page. -+* @retval ::NRF_SUCCESS The command was accepted. -+*/ -+SVCALL(SD_FLASH_PAGE_ERASE, uint32_t, sd_flash_page_erase(uint32_t page_number)); -+ -+ -+/**@brief Flash Protection set -+ * -+ * Commands to set the flash protection configuration registers. -+ This sets the CONFIGx registers of the BPROT peripheral. -+ * -+ * @note Not all parameters are valid for all products. Some bits in each parameter may not be -+ * valid for your product. Please refer your Product Specification for more details. -+ * -+ * @note To read the values read them directly. They are only write-protected. -+ * -+ * @param[in] block_cfg0 Value to be written to the configuration register. -+ * @param[in] block_cfg1 Value to be written to the configuration register. -+ * @param[in] block_cfg2 Value to be written to the configuration register. -+ * @param[in] block_cfg3 Value to be written to the configuration register. -+ * -+ * @retval ::NRF_ERROR_NOT_SUPPORTED Non-zero value supplied to one or more of the unsupported parameters. -+ * @retval ::NRF_ERROR_FORBIDDEN Tried to protect the flash region used by the SoftDevice. -+ * @retval ::NRF_SUCCESS Values successfully written to configuration registers. -+ */ -+SVCALL(SD_FLASH_PROTECT, uint32_t, sd_flash_protect(uint32_t block_cfg0, uint32_t block_cfg1, uint32_t block_cfg2, uint32_t block_cfg3)); -+ -+/**@brief Opens a session for radio timeslot requests. -+ * -+ * @note Only one session can be open at a time. -+ * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) will be called when the radio timeslot -+ * starts. From this point the NRF_RADIO and NRF_TIMER0 peripherals can be freely accessed -+ * by the application. -+ * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0) is called whenever the NRF_TIMER0 -+ * interrupt occurs. -+ * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO) is called whenever the NRF_RADIO -+ * interrupt occurs. -+ * @note p_radio_signal_callback() will be called at ARM interrupt priority level 0. This -+ * implies that none of the sd_* API calls can be used from p_radio_signal_callback(). -+ * -+ * @param[in] p_radio_signal_callback The signal callback. -+ * -+ * @retval ::NRF_ERROR_INVALID_ADDR p_radio_signal_callback is an invalid function pointer. -+ * @retval ::NRF_ERROR_BUSY If session cannot be opened. -+ * @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. -+ * @retval ::NRF_SUCCESS Otherwise. -+ */ -+ SVCALL(SD_RADIO_SESSION_OPEN, uint32_t, sd_radio_session_open(nrf_radio_signal_callback_t p_radio_signal_callback)); -+ -+/**@brief Closes a session for radio timeslot requests. -+ * -+ * @note Any current radio timeslot will be finished before the session is closed. -+ * @note If a radio timeslot is scheduled when the session is closed, it will be canceled. -+ * @note The application cannot consider the session closed until the @ref NRF_EVT_RADIO_SESSION_CLOSED -+ * event is received. -+ * -+ * @retval ::NRF_ERROR_FORBIDDEN If session not opened. -+ * @retval ::NRF_ERROR_BUSY If session is currently being closed. -+ * @retval ::NRF_SUCCESS Otherwise. -+ */ -+ SVCALL(SD_RADIO_SESSION_CLOSE, uint32_t, sd_radio_session_close(void)); -+ -+/**@brief Requests a radio timeslot. -+ * -+ * @note The request type is determined by p_request->request_type, and can be one of @ref NRF_RADIO_REQ_TYPE_EARLIEST -+ * and @ref NRF_RADIO_REQ_TYPE_NORMAL. The first request in a session must always be of type @ref NRF_RADIO_REQ_TYPE_EARLIEST. -+ * @note For a normal request (@ref NRF_RADIO_REQ_TYPE_NORMAL), the start time of a radio timeslot is specified by -+ * p_request->distance_us and is given relative to the start of the previous timeslot. -+ * @note A too small p_request->distance_us will lead to a @ref NRF_EVT_RADIO_BLOCKED event. -+ * @note Timeslots scheduled too close will lead to a @ref NRF_EVT_RADIO_BLOCKED event. -+ * @note See the SoftDevice Specification for more on radio timeslot scheduling, distances and lengths. -+ * @note If an opportunity for the first radio timeslot is not found before 100 ms after the call to this -+ * function, it is not scheduled, and instead a @ref NRF_EVT_RADIO_BLOCKED event is sent. -+ * The application may then try to schedule the first radio timeslot again. -+ * @note Successful requests will result in nrf_radio_signal_callback_t(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START). -+ * Unsuccessful requests will result in a @ref NRF_EVT_RADIO_BLOCKED event, see @ref NRF_SOC_EVTS. -+ * @note The jitter in the start time of the radio timeslots is +/- @ref NRF_RADIO_START_JITTER_US us. -+ * @note The nrf_radio_signal_callback_t(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) call has a latency relative to the -+ * specified radio timeslot start, but this does not affect the actual start time of the timeslot. -+ * @note NRF_TIMER0 is reset at the start of the radio timeslot, and is clocked at 1MHz from the high frequency -+ * (16 MHz) clock source. If p_request->hfclk_force_xtal is true, the high frequency clock is -+ * guaranteed to be clocked from the external crystal. -+ * @note The SoftDevice will neither access the NRF_RADIO peripheral nor the NRF_TIMER0 peripheral -+ * during the radio timeslot. -+ * -+ * @param[in] p_request Pointer to the request parameters. -+ * -+ * @retval ::NRF_ERROR_FORBIDDEN If session not opened or the session is not IDLE. -+ * @retval ::NRF_ERROR_INVALID_ADDR If the p_request pointer is invalid. -+ * @retval ::NRF_ERROR_INVALID_PARAM If the parameters of p_request are not valid. -+ * @retval ::NRF_SUCCESS Otherwise. -+ */ -+ SVCALL(SD_RADIO_REQUEST, uint32_t, sd_radio_request(nrf_radio_request_t const * p_request)); -+ -+/**@} */ -+ -+#ifdef __cplusplus -+} -+#endif -+#endif // NRF_SOC_H__ -+ -+/**@} */ -diff -u -r -N a/components/softdevice/s132v5/headers/nrf_svc.h b/components/softdevice/s132v5/headers/nrf_svc.h ---- a/components/softdevice/s132v5/headers/nrf_svc.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v5/headers/nrf_svc.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,90 @@ -+/* -+ * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form, except as embedded into a Nordic -+ * Semiconductor ASA integrated circuit in a product or a software update for -+ * such product, must reproduce the above copyright notice, this list of -+ * conditions and the following disclaimer in the documentation and/or other -+ * materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its -+ * contributors may be used to endorse or promote products derived from this -+ * software without specific prior written permission. -+ * -+ * 4. This software, with or without modification, must only be used with a -+ * Nordic Semiconductor ASA integrated circuit. -+ * -+ * 5. Any software provided in binary form under this license must not be reverse -+ * engineered, decompiled, modified and/or disassembled. -+ * -+ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -+ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ */ -+ -+#ifndef NRF_SVC__ -+#define NRF_SVC__ -+ -+#include "stdint.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+#ifdef SVCALL_AS_NORMAL_FUNCTION -+#define SVCALL(number, return_type, signature) return_type signature -+#else -+ -+#ifndef SVCALL -+#if defined (__CC_ARM) -+#define SVCALL(number, return_type, signature) return_type __svc(number) signature -+#elif defined (__GNUC__) -+#ifdef __cplusplus -+#define GCC_CAST_CPP (uint16_t) -+#else -+#define GCC_CAST_CPP -+#endif -+#define SVCALL(number, return_type, signature) \ -+ _Pragma("GCC diagnostic push") \ -+ _Pragma("GCC diagnostic ignored \"-Wreturn-type\"") \ -+ __attribute__((naked)) \ -+ __attribute__((unused)) \ -+ static return_type signature \ -+ { \ -+ __asm( \ -+ "svc %0\n" \ -+ "bx r14" : : "I" (GCC_CAST_CPP number) : "r0" \ -+ ); \ -+ } \ -+ _Pragma("GCC diagnostic pop") -+ -+#elif defined (__ICCARM__) -+#define PRAGMA(x) _Pragma(#x) -+#define SVCALL(number, return_type, signature) \ -+PRAGMA(swi_number = (number)) \ -+ __swi return_type signature; -+#else -+#define SVCALL(number, return_type, signature) return_type signature -+#endif -+#endif // SVCALL -+ -+#endif // SVCALL_AS_NORMAL_FUNCTION -+ -+#ifdef __cplusplus -+} -+#endif -+#endif // NRF_SVC__ -diff -u -r -N a/components/softdevice/s132v5/headers/nrf52/nrf_mbr.h b/components/softdevice/s132v5/headers/nrf52/nrf_mbr.h ---- a/components/softdevice/s132v5/headers/nrf52/nrf_mbr.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v5/headers/nrf52/nrf_mbr.h 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,241 @@ -+/* -+ * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form, except as embedded into a Nordic -+ * Semiconductor ASA integrated circuit in a product or a software update for -+ * such product, must reproduce the above copyright notice, this list of -+ * conditions and the following disclaimer in the documentation and/or other -+ * materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its -+ * contributors may be used to endorse or promote products derived from this -+ * software without specific prior written permission. -+ * -+ * 4. This software, with or without modification, must only be used with a -+ * Nordic Semiconductor ASA integrated circuit. -+ * -+ * 5. Any software provided in binary form under this license must not be reverse -+ * engineered, decompiled, modified and/or disassembled. -+ * -+ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -+ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ */ -+ -+/** -+ @defgroup nrf_mbr_api Master Boot Record API -+ @{ -+ -+ @brief APIs for updating SoftDevice and BootLoader -+ -+*/ -+ -+#ifndef NRF_MBR_H__ -+#define NRF_MBR_H__ -+ -+#include "nrf_svc.h" -+#include -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+/** @addtogroup NRF_MBR_DEFINES Defines -+ * @{ */ -+ -+/**@brief MBR SVC Base number. */ -+#define MBR_SVC_BASE (0x18) -+ -+/**@brief Page size in words. */ -+#define MBR_PAGE_SIZE_IN_WORDS (1024) -+ -+/** @brief The size that must be reserved for the MBR when a SoftDevice is written to flash. -+This is the offset where the first byte of the SoftDevice hex file is written.*/ -+#define MBR_SIZE (0x1000) -+ -+/** @} */ -+ -+/** @addtogroup NRF_MBR_ENUMS Enumerations -+ * @{ */ -+ -+/**@brief nRF Master Boot Record API SVC numbers. */ -+enum NRF_MBR_SVCS -+{ -+ SD_MBR_COMMAND = MBR_SVC_BASE, /**< ::sd_mbr_command */ -+}; -+ -+/**@brief Possible values for ::sd_mbr_command_t.command */ -+enum NRF_MBR_COMMANDS -+{ -+ SD_MBR_COMMAND_COPY_BL, /**< Copy a new BootLoader. @see ::sd_mbr_command_copy_bl_t*/ -+ SD_MBR_COMMAND_COPY_SD, /**< Copy a new SoftDevice. @see ::sd_mbr_command_copy_sd_t*/ -+ SD_MBR_COMMAND_INIT_SD, /**< Initialize forwarding interrupts to SD, and run reset function in SD. Does not require any parameters in ::sd_mbr_command_t params.*/ -+ SD_MBR_COMMAND_COMPARE, /**< This command works like memcmp. @see ::sd_mbr_command_compare_t*/ -+ SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET, /**< Change the address the MBR starts after a reset. @see ::sd_mbr_command_vector_table_base_set_t*/ -+ SD_MBR_COMMAND_RESERVED, -+ SD_MBR_COMMAND_IRQ_FORWARD_ADDRESS_SET, /**< Start forwarding all interrupts to this address. @see ::sd_mbr_command_irq_forward_address_set_t*/ -+}; -+ -+/** @} */ -+ -+/** @addtogroup NRF_MBR_TYPES Types -+ * @{ */ -+ -+/**@brief This command copies part of a new SoftDevice -+ * -+ * The destination area is erased before copying. -+ * If dst is in the middle of a flash page, that whole flash page will be erased. -+ * If (dst+len) is in the middle of a flash page, that whole flash page will be erased. -+ * -+ * The user of this function is responsible for setting the BPROT registers. -+ * -+ * @retval ::NRF_SUCCESS indicates that the contents of the memory blocks where copied correctly. -+ * @retval ::NRF_ERROR_INTERNAL indicates that the contents of the memory blocks where not verified correctly after copying. -+ */ -+typedef struct -+{ -+ uint32_t *src; /**< Pointer to the source of data to be copied.*/ -+ uint32_t *dst; /**< Pointer to the destination where the content is to be copied.*/ -+ uint32_t len; /**< Number of 32 bit words to copy. Must be a multiple of @ref MBR_PAGE_SIZE_IN_WORDS words.*/ -+} sd_mbr_command_copy_sd_t; -+ -+ -+/**@brief This command works like memcmp, but takes the length in words. -+ * -+ * @retval ::NRF_SUCCESS indicates that the contents of both memory blocks are equal. -+ * @retval ::NRF_ERROR_NULL indicates that the contents of the memory blocks are not equal. -+ */ -+typedef struct -+{ -+ uint32_t *ptr1; /**< Pointer to block of memory. */ -+ uint32_t *ptr2; /**< Pointer to block of memory. */ -+ uint32_t len; /**< Number of 32 bit words to compare.*/ -+} sd_mbr_command_compare_t; -+ -+ -+/**@brief This command copies a new BootLoader. -+ * -+ * With this command, destination of BootLoader is always the address written in -+ * NRF_UICR->BOOTADDR. -+ * -+ * Destination is erased by this function. -+ * If (destination+bl_len) is in the middle of a flash page, that whole flash page will be erased. -+ * -+ * This function will use PROTENSET to protect the flash that is not intended to be written. -+ * -+ * On success, this function will not return. It will start the new BootLoader from reset-vector as normal. -+ * -+ * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. -+ * @retval ::NRF_ERROR_FORBIDDEN if NRF_UICR->BOOTADDR is not set. -+ * @retval ::NRF_ERROR_INVALID_LENGTH if parameters attempts to read or write outside flash area. -+ * @retval ::NRF_ERROR_NO_MEM if no parameter page is provided (see SoftDevice Specification for more info) -+ */ -+typedef struct -+{ -+ uint32_t *bl_src; /**< Pointer to the source of the Bootloader to be be copied.*/ -+ uint32_t bl_len; /**< Number of 32 bit words to copy for BootLoader. */ -+} sd_mbr_command_copy_bl_t; -+ -+/**@brief Change the address the MBR starts after a reset -+ * -+ * Once this function has been called, this address is where the MBR will start to forward -+ * interrupts to after a reset. -+ * -+ * To restore default forwarding this function should be called with @ref address set to 0. The -+ * MBR will then start forwarding interrupts to the address in NFR_UICR->BOOTADDR or to the -+ * SoftDevice if the BOOTADDR is not set. -+ * -+ * On success, this function will not return. It will reset the device. -+ * -+ * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. -+ * @retval ::NRF_ERROR_INVALID_ADDR if parameter address is outside of the flash size. -+ * @retval ::NRF_ERROR_NO_MEM if no parameter page is provided (see SoftDevice Specification for more info) -+ */ -+typedef struct -+{ -+ uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ -+} sd_mbr_command_vector_table_base_set_t; -+ -+/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the MBR -+ * -+ * Unlike sd_mbr_command_vector_table_base_set_t, this function does not reset, and it does not -+ * change where the MBR starts after reset. -+ * -+ * @retval ::NRF_SUCCESS -+ */ -+typedef struct -+{ -+ uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ -+} sd_mbr_command_irq_forward_address_set_t; -+ -+/**@brief Input structure containing data used when calling ::sd_mbr_command -+ * -+ * Depending on what command value that is set, the corresponding params value type must also be -+ * set. See @ref NRF_MBR_COMMANDS for command types and corresponding params value type. If command -+ * @ref SD_MBR_COMMAND_INIT_SD is set, it is not necessary to set any values under params. -+ */ -+typedef struct -+{ -+ uint32_t command; /**< Type of command to be issued. See @ref NRF_MBR_COMMANDS. */ -+ union -+ { -+ sd_mbr_command_copy_sd_t copy_sd; /**< Parameters for copy SoftDevice.*/ -+ sd_mbr_command_compare_t compare; /**< Parameters for verify.*/ -+ sd_mbr_command_copy_bl_t copy_bl; /**< Parameters for copy BootLoader. Requires parameter page. */ -+ sd_mbr_command_vector_table_base_set_t base_set; /**< Parameters for vector table base set. Requires parameter page.*/ -+ sd_mbr_command_irq_forward_address_set_t irq_forward_address_set; /**< Parameters for irq forward address set*/ -+ } params; /**< Command parameters. */ -+} sd_mbr_command_t; -+ -+/** @} */ -+ -+/** @addtogroup NRF_MBR_FUNCTIONS Functions -+ * @{ */ -+ -+/**@brief Issue Master Boot Record commands -+ * -+ * Commands used when updating a SoftDevice and bootloader. -+ * -+ * The @ref SD_MBR_COMMAND_COPY_BL and @ref SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET requires -+ * parameters to be retained by the MBR when resetting the IC. This is done in a separate flash -+ * page provided by the application. The UICR register UICR.NRFFW[1] must be set to an address -+ * corresponding to a page in the application flash space. This page will be cleared by the MBR and -+ * used to store the command before reset. When the UICR.NRFFW[1] field is set the page it refers -+ * to must not be used by the application. If the UICR.NRFFW[1] is set to 0xFFFFFFFF (the default) -+ * MBR commands which use flash will be unavailable and return @ref NRF_ERROR_NO_MEM. -+ * -+ * @param[in] param Pointer to a struct describing the command. -+ * -+ * @note For return values, see ::sd_mbr_command_copy_sd_t, ::sd_mbr_command_copy_bl_t, -+ * ::sd_mbr_command_compare_t, ::sd_mbr_command_vector_table_base_set_t, -+ * ::sd_mbr_command_irq_forward_address_set_t -+ * -+ * @retval ::NRF_ERROR_NO_MEM if UICR.NRFFW[1] is not set (i.e. is 0xFFFFFFFF). -+ * @retval ::NRF_ERROR_INVALID_PARAM if an invalid command is given. -+*/ -+SVCALL(SD_MBR_COMMAND, uint32_t, sd_mbr_command(sd_mbr_command_t* param)); -+ -+/** @} */ -+ -+#ifdef __cplusplus -+} -+#endif -+#endif // NRF_MBR_H__ -+ -+/** -+ @} -+*/ -diff -u -r -N a/components/softdevice/s132v5/headers_replacement/test.rb b/components/softdevice/s132v5/headers_replacement/test.rb ---- a/components/softdevice/s132v5/headers_replacement/test.rb 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v5/headers_replacement/test.rb 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,2 @@ -+a = 'xxx const * const*' -+puts a.gsub('const','') -\ No newline at end of file -diff -u -r -N a/components/softdevice/s132v5/hex/s132_nrf52_5.0.0_softdevice.hex b/components/softdevice/s132v5/hex/s132_nrf52_5.0.0_softdevice.hex ---- a/components/softdevice/s132v5/hex/s132_nrf52_5.0.0_softdevice.hex 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v5/hex/s132_nrf52_5.0.0_softdevice.hex 2018-07-18 17:04:50.000000000 +0200 -@@ -0,0 +1,8678 @@ -+:020000040000FA -+:1000000000040020E90800007D050000C908000088 -+:1000100087050000910500009B050000000000001E -+:100020000000000000000000000000000D090000BA -+:10003000A505000000000000AF050000B9050000A4 -+:10004000C3050000CD050000D7050000E105000054 -+:10005000EB050000F5050000FF05000009060000A3 -+:10006000130600001D0600002706000031060000F0 -+:100070003B060000450600004F0600005906000040 -+:10008000630600006D060000770600008106000090 -+:100090008B060000950600009F060000A9060000E0 -+:1000A000B3060000BD060000C7060000D106000030 -+:1000B000DB060000E5060000EF060000F906000080 -+:1000C000030700000D0700001707000021070000CC -+:1000D0002B070000350700003F070000490700001C -+:1000E000530700005D07000067070000710700006C -+:1000F0007B070000850700008F07000099070000BC -+:10010000A30700001FB500F003F88DE80F001FBD26 -+:1001100000F0E0BB1FB56FF00100009040100390AD -+:10012000029001904FF010208069000B420900F00E -+:100130001F045DF822300120A04083434DF8223097 -+:10014000684600F045F91FBDF0B54FF6FF734FF458 -+:10015000B4751A466E1E11E0A94201D3344600E080 -+:100160000C46091B30F8027B641E3B441A44F9D14B -+:100170009CB204EB134394B204EB12420029EBD17E -+:1001800098B200EB134002EB124140EA0140F0BD8F -+:10019000DE4992B00446D1E90001CDE91001FF2209 -+:1001A0004021684600F03CFB94E80F008DE80F000A -+:1001B000684610A902E004C841F8042D8842FAD12B -+:1001C00010216846FFF7C0FF1090AA208DF8440068 -+:1001D000FFF7A0FF00F0F3F84FF01024A069102201 -+:1001E0006946803000F002F9A069082210A900F0E9 -+:1001F000FDF800F0D8F84FF080510A6949690068AD -+:100200004A43824201D8102070470020704710B541 -+:10021000D0E900214FF0805002EB8103026944696C -+:100220006243934209D84FF01022536903EB8103D4 -+:100230000169406941438B4201D9092010BD5069D1 -+:10024000401C01D0002010BD0F2010BD70B501680A -+:100250000446AF4D4FF01020072952D2DFE801F0DD -+:10026000330419293C1E2500D4E902656468294637 -+:10027000304600F0CDF82A462146304600F0B6F868 -+:10028000AA002146304600F09FFA002800D0032043 -+:1002900070BD00F051FB4FF4805007E0201DFFF7C8 -+:1002A000AAFF0028F4D100F047FB60682860002016 -+:1002B00070BD241D94E80700920000F085FA002824 -+:1002C000F6D00E2070BD8069401C12D0201DFFF7B3 -+:1002D0009EFF0028F6D109E08069401C09D0201D4E -+:1002E000FFF789FF0028EDD1606820B12046FFF7B5 -+:1002F0004FFF042070BDFFF70DFF00F060F800F025 -+:1003000052F8072070BD10B50C46182802D0012005 -+:10031000086010BD2068FFF799FF206010BD4FF006 -+:100320001024A069401C05D0A569A66980353079E4 -+:10033000AA2808D06069401C2DD060690068401C64 -+:1003400029D060692CE010212846FFF7FDFE3168B6 -+:1003500081421CD1A16901F18002C03105E030B1B8 -+:1003600008CA51F8040D984201D1012000E0002094 -+:100370008A42F4D158B1286810B1042803D0FEE7AE -+:10038000284600F057F862496868086008E000F005 -+:1003900016F800F008F84FF480500168491C01D0AD -+:1003A00000F0A4FAFEE7BFF34F8F5A4801685A4A9B -+:1003B00001F4E06111430160BFF34F8FFEE74FF09E -+:1003C00010208169491C02D0806900F0AEB87047E6 -+:1003D000524A01681160121D416811604F4A8168DC -+:1003E00010321160111DC068086070472DE9F0419E -+:1003F00017460D460646002406E03046296800F000 -+:10040000A7F8641C2D1D361DBC42F6D3BDE8F08153 -+:1004100070B50C4605464FF4806608E0284600F0AB -+:1004200084F8B44205D3A4F5806405F58055002C0A -+:10043000F4D170BD4168044609B1012500E00025F2 -+:100440004FF010267069A268920000F0BDF9C8B1A3 -+:10045000204600F01AF89DB17669A56864684FF4EB -+:10046000002084420AD2854208D229463046FFF74E -+:10047000CFFF2A4621463046FFF7B8FFFFF79FFF20 -+:10048000FFF791FFFFF746FEF8E72DE9FF414FF038 -+:100490001024616980680D0B01EB800000F6FF708D -+:1004A000010B0020009001900290024603906846E4 -+:1004B00001230BE0560902F01F0C50F8267003FAD6 -+:1004C0000CFC47EA0C0740F82670521CAA42F1D3F4 -+:1004D0000AE04A0901F01F0650F8225003FA06F616 -+:1004E000354340F82250491C8029F2D3A169090BF9 -+:1004F0004A0901F01F0150F822408B409C4340F80C -+:100500002240FFF765FFBDE8FF8100005C090000A5 -+:10051000000000200CED00E00400FA050006004099 -+:10052000144801680029FCD07047134A0221116069 -+:1005300010490B68002BFCD00F4B1B1D186008687E -+:100540000028FCD00020106008680028FCD070470C -+:10055000094B10B501221A60064A1468002CFCD021 -+:10056000016010680028FCD0002018601068002886 -+:10057000FCD010BD00E4014004E5014008208F4993 -+:1005800009680958084710208C4909680958084724 -+:1005900014208A49096809580847182087490968BA -+:1005A0000958084730208549096809580847382004 -+:1005B00082490968095808473C2080490968095858 -+:1005C000084740207D4909680958084744207B496D -+:1005D00009680958084748207849096809580847B0 -+:1005E0004C20764909680958084750207349096822 -+:1005F0000958084754207149096809580847582084 -+:100600006E490968095808475C206C49096809580F -+:100610000847602069490968095808476420674904 -+:100620000968095808476820644909680958084753 -+:100630006C20624909680958084770205F490968B9 -+:100640000958084774205D49096809580847782007 -+:100650005A490968095808477C20584909680958C7 -+:10066000084780205549096809580847842053499C -+:1006700009680958084788205049096809580847F7 -+:100680008C204E4909680958084790204B49096851 -+:10069000095808479420494909680958084798208B -+:1006A00046490968095808479C204449096809587F -+:1006B0000847A0204149096809580847A4203F4934 -+:1006C000096809580847A8203C490968095808479B -+:1006D000AC203A49096809580847B02037490968E9 -+:1006E00009580847B4203549096809580847B8200F -+:1006F0003249096809580847BC2030490968095837 -+:100700000847C0202D49096809580847C4202B49CB -+:10071000096809580847C82028490968095808473E -+:10072000CC202649096809580847D0202349096880 -+:1007300009580847D4202149096809580847D82092 -+:100740001E49096809580847DC201C4909680958EE -+:100750000847E0201949096809580847E420174963 -+:10076000096809580847E8201449096809580847E2 -+:10077000EC201249096809580847F0200F49096818 -+:1007800009580847F4200D49096809580847F82016 -+:100790000A49096809580847FC20084909680958A6 -+:1007A00008475FF480700549096809580847000048 -+:1007B00003480449024A034B704700000000002030 -+:1007C000680900006809000040EA010310B59B07B2 -+:1007D0000FD1042A0DD310C808C9121F9C42F8D0AB -+:1007E00020BA19BA884201D9012010BD4FF0FF305C -+:1007F00010BD1AB1D30703D0521C07E0002010BD72 -+:1008000010F8013B11F8014B1B1B07D110F8013BFD -+:1008100011F8014B1B1B01D1921EF1D1184610BDDE -+:1008200002F0FF0343EA032242EA024200F005B865 -+:100830007047704770474FF000020429C0F01280E3 -+:1008400010F0030C00F01B80CCF1040CBCF1020F83 -+:1008500018BF00F8012BA8BF20F8022BA1EB0C0158 -+:1008600000F00DB85FEAC17C24BF00F8012B00F84E -+:10087000012B48BF00F8012B70474FF0000200B574 -+:10088000134694469646203922BFA0E80C50A0E8B3 -+:100890000C50B1F12001BFF4F7AF090728BFA0E861 -+:1008A0000C5048BF0CC05DF804EB890028BF40F82D -+:1008B000042B08BF704748BF20F8022B11F0804F6F -+:1008C00018BF00F8012B7047014B1B68DB68184705 -+:1008D0000000002009480A497047FFF7FBFFFFF7B7 -+:1008E00011FC00BD20BFFDE7064B1847064A10600B -+:1008F000016881F30888406800470000680900002B -+:10090000680900001F030000000000201EF0040F13 -+:100910000CBFEFF30881EFF3098188690238007892 -+:10092000182803D100E00000074A1047074A126860 -+:100930002C3212681047000000B5054B1B68054AB1 -+:100940009B58984700BD00000703000000000020EE -+:100950005809000004000000001000000000000022 -+:0809600000FFFFFF0090D0032F -+:10100000E8120020111D0200152F0000831C0200B1 -+:10101000152F0000152F0000152F00000000000004 -+:10102000000000000000000000000000691D020038 -+:10103000152F000000000000152F0000152F0000E4 -+:10104000D11D0200D71D0200152F0000152F000032 -+:10105000152F0000152F0000152F0000152F000080 -+:10106000DD1D0200152F0000152F0000E31D0200FA -+:10107000152F0000E91D0200EF1D0200F51D020002 -+:10108000152F0000152F0000152F0000152F000050 -+:10109000152F0000152F0000152F0000152F000040 -+:1010A000152F0000FB1D0200152F0000152F00005A -+:1010B000152F0000152F0000152F0000152F000020 -+:1010C000011E0200152F0000152F0000152F000033 -+:1010D000152F0000152F0000152F0000152F000000 -+:1010E000152F0000152F0000152F0000152F0000F0 -+:1010F000152F0000152F0000152F0000152F0000E0 -+:10110000152F0000152F000000F002F820F0EDFD73 -+:101110000AA090E8000C82448344AAF10107DA4552 -+:1011200001D120F0E2FDAFF2090EBAE80F0013F092 -+:10113000010F18BFFB1A43F0010318471C130200EC -+:101140003C1302000A444FF0000C10F8013B13F06E -+:10115000070408BF10F8014B1D1108BF10F8015B10 -+:10116000641E05D010F8016B641E01F8016BF9D103 -+:1011700013F0080F1EBF10F8014BAD1C0C1B09D15A -+:101180006D1E58BF01F801CBFAD505E014F8016BCC -+:1011900001F8016B6D1EF9D59142D6D3704700005E -+:1011A0000023002400250026103A28BF78C1FBD870 -+:1011B000520728BF30C148BF0B6070471FB500F011 -+:1011C0003DF88DE80F001FBD1EF0040F0CBFEFF3BC -+:1011D0000880EFF30980014A104700006F2E0000DD -+:1011E0008269034981614FF001001044704700009B -+:1011F000F511000001B41EB400B512F0AFFD01B44A -+:101200000198864601BC01B01EBD0000F0B4404606 -+:10121000494652465B460FB402A0013001B506486C -+:10122000004700BF01BC86460FBC804689469246F7 -+:101230009B46F0BC704700000911000020F052BD31 -+:1012400070B51A4C054609202070A01C00F05FF80C -+:101250005920A08029462046BDE8704007F0F1BF24 -+:1012600007F0FABF70B50C461149097829B1A0F111 -+:101270006001552908D3012013E0602804D06928B3 -+:1012800002D043F201000CE020CC0A4E94E80E009C -+:1012900006EB8000A0F58050241FD0F8806E284611 -+:1012A000B047206070BD012070470000080000209A -+:1012B0001C0000204C1E020010B504460021012035 -+:1012C00000F03BF800210B2000F037F80421192032 -+:1012D00000F033F804210D2000F02FF804210E2037 -+:1012E00000F02BF804210F2000F027F80421C84358 -+:1012F00000F023F80621162000F01FF80621152023 -+:1013000000F01BF82046FFF79BFF002010BD9D2139 -+:1013100001807047FFF7A4BF10487047104A10B50E -+:1013200014680F4B0F4A08331A60FFF79BFF0C48F5 -+:10133000001D046010BD704770474907090E002862 -+:1013400006DA00F00F0000F1E02080F8141D70476D -+:1013500000F1E02080F800147047000003F900421B -+:101360001005024001000001FE48002101604160BB -+:10137000018170472DE9F743044692B091464068D9 -+:1013800012F0B2FF40B1606812F0B7FF20B9607888 -+:1013900000F00300022801D0012000E00020F14EFF -+:1013A0004D463072484612F05BFF18B1102015B060 -+:1013B000BDE8F0832946012001F029FF0028F6D17D -+:1013C00001258DF842504FF4C050ADF84000002286 -+:1013D00010A9284606F0FAFB0028E8D18DF8425003 -+:1013E0004FF428504FF00008ADF8400047461C214C -+:1013F0006846CDF81C8020F018FC9DF81C0008AA57 -+:1014000020F00F00401C20F0F00010308DF81C0080 -+:1014100020788DF81D0061789DF81E0061F3420070 -+:1014200040F001008DF81E009DF800000AA940F070 -+:1014300002008DF800002089ADF83000ADF8327060 -+:10144000608907AFADF834000B97606810AC0E9060 -+:101450000A94684606F0AFF90028A8D1BDF820002C -+:1014600030808DF8425042F60120ADF840009DF8E2 -+:101470001E0008AA20F00600801C20F001008DF854 -+:101480001E000220ADF83000ADF8340013A80E9015 -+:101490000AA9684606F08FF9002888D1BDF8200017 -+:1014A0007080311D484600F033F9002887D18DF84F -+:1014B000425042F6A620ADF840001C216846CDF807 -+:1014C0001C8020F0B2FB9DF81C00ADF8345020F0D9 -+:1014D0000F00401C20F0F00010308DF81C009DF82B -+:1014E0001D0008AA20F0FF008DF81D009DF81E00C9 -+:1014F0000AA920F0060040F00100801C8DF81E00B3 -+:101500009DF800008DF8445040F002008DF8000076 -+:10151000CDE90A4711A80E90ADF83050684606F0A4 -+:101520004AF9002899D1BDF82000F08000203EE75C -+:101530003EB504460820ADF80000204612F090FEAB -+:1015400008B110203EBD2146012001F060FE0028B8 -+:10155000F8D12088ADF804006088ADF80600A088B6 -+:10156000ADF80800E088ADF80A007E4801AB6A4695 -+:101570008088002106F024FDBDF800100829E1D084 -+:1015800003203EBD1FB50446002002900820ADF8A0 -+:101590000800CDF80CD0204612F062FE10B11020E9 -+:1015A00004B010BD6F4802AA81884FF6FF7006F0A4 -+:1015B0004EFF0028F4D1BDF80810082901D00320FF -+:1015C000EEE7BDF800102180BDF802106180BDF883 -+:1015D0000410A180BDF80610E180E1E701B582B0FA -+:1015E0000220ADF800005F4802AB6A464088002147 -+:1015F00006F0E6FCBDF80010022900D003200EBD65 -+:101600001CB5002100910221ADF80010019012F0EC -+:101610004DFE08B110201CBD52486A4641884FF665 -+:10162000FF7006F014FFBDF800100229F3D003206C -+:101630001CBDFEB54B4C06461546207A0F46C0072A -+:1016400005D0084612F00CFE18B11020FEBD0F2088 -+:10165000FEBDF82D01D90C20FEBD304612F000FE73 -+:1016600018BB208801A905F0ECFD0028F4D13078E2 -+:101670008DF80500208801A906F081FC0028EBD137 -+:1016800000909DF800009DF8051040F002008DF8D4 -+:101690000000090703D040F008008DF80000208802 -+:1016A000694606F009FC0028D6D1ADF8085020881C -+:1016B0003B4602AA002106F083FCBDF80810A942AF -+:1016C000CAD00320FEBD7CB50546002000900190E5 -+:1016D0000888ADF800000C462846019512F004FE7B -+:1016E00018B9204612F0E2FD08B110207CBD15B1FA -+:1016F000BDF8000050B11B486A4601884FF6FF70E4 -+:1017000006F0A5FEBDF8001021807CBD0C207CBD3C -+:1017100030B593B0044600200D460090142101A876 -+:1017200020F083FA1C2108A820F07FFA9DF8000021 -+:10173000CDF808D020F00F00401C20F0F000103051 -+:101740008DF800009DF8010020F0FF008DF80100E9 -+:101750009DF8200040F002008DF8200001208DF857 -+:10176000460001E0E201002042F60420ADF844000A -+:1017700011A801902088ADF83C006088ADF83E00CB -+:10178000A088ADF84000E088ADF842009DF8020066 -+:1017900006AA20F00600801C20F001008DF802004F -+:1017A0000820ADF80C00ADF810000FA8059001A9B5 -+:1017B00008A806F000F8002803D1BDF8180028801A -+:1017C000002013B030BD0000F0B5007B059F1E4621 -+:1017D00014460D46012800D0FFDF0C2030803A204F -+:1017E0003880002C08D0287A052806D0287B0128CC -+:1017F00000D0FFDF17206081F0BDA889FBE72DE94D -+:10180000F04786B0144691F80C900E9A0D46B9F147 -+:10181000010F0BD01021007B2E8A8846052807D0A7 -+:10182000062833D0FFDF06B0BDE8F0870221F2E7DB -+:10183000E8890C2100EB400001EB400018803320C8 -+:101840001080002CEFD0E889608100271AE0009614 -+:10185000688808F1020301AA696900F07AFF06EBC3 -+:101860000800801C07EB470186B204EB4102BDF87B -+:10187000040090810DF1060140460E3210F04CFD3F -+:101880007F1CBFB26089B842E1D8CCE73420108019 -+:10189000E889B9F1010F11D0122148430E301880A8 -+:1018A000002CC0D0E88960814846B9F1010F00D012 -+:1018B0000220207300270DF1040A1FE00621ECE747 -+:1018C0000096688808F1020301AA696900F041FFE7 -+:1018D00006EB0800801C86B2B9F1010F12D007EBAD -+:1018E000C70004EB4000BDF80410C18110220AF1CA -+:1018F0000201103020F000F97F1CBFB26089B842AD -+:10190000DED890E707EB470104EB4102BDF8040085 -+:10191000D0810AF102014046103210F0FDFCEBE7E5 -+:101920002DE9F0470E4688B090F80CC096F80C8070 -+:10193000378AF5890C20109902F10C044FF0000A47 -+:10194000BCF1030F08D0BCF1040F3ED0BCF1070F6F -+:101950007DD0FFDF08B067E705EB850C00EB4C009E -+:10196000188031200880002AF4D0A8F1060000F089 -+:10197000FF09558125E0182101A820F056F90097AC -+:101980007088434601AA716900F0E3FEBDF80400C7 -+:101990002080BDF80600E080BDF808002081A21C70 -+:1019A0000DF10A01484610F0B7FCB9F1000F00D064 -+:1019B00018B184F804A0A4F802A007EB080087B2CD -+:1019C0000A346D1EADB2D6D2C4E705EB850C00EB30 -+:1019D0004C00188032200880002ABBD0A8F10500F6 -+:1019E00000F0FF09558137E000977088434601AA4F -+:1019F000716900F0AEFE9DF80600BDF80410E180AC -+:101A00002179420860F3000162F34101820862F328 -+:101A10008201C20862F3C301020962F304114209A0 -+:101A200062F34511820962F386112171C009607168 -+:101A3000BDF80700208122460DF10901484610F04B -+:101A40006BFC18B184F802A0A4F800A000E007E045 -+:101A500007EB080087B20A346D1EADB2C4D279E735 -+:101A6000A8F1020084B205FB08F000F10E0CA3F807 -+:101A700000C035230B80002AA6D0558194810097A1 -+:101A800083B270880E32716900F063FE62E72DE95F -+:101A9000F84F1E460A9D0C4681462AB1607A00F531 -+:101AA0008070D080E089108199F80C000C274FF0ED -+:101AB00000084FF00E0A0D2873D2DFE800F09E07F1 -+:101AC0000E1C28303846556A737373002146484609 -+:101AD0000095FFF779FEBDE8F88F207B9146082836 -+:101AE00002D0032800D0FFDF378030200AE000BF9B -+:101AF000A9F80A80EFE7207B9146042800D0FFDF99 -+:101B0000378031202880B9F1000FF1D1E3E7207B45 -+:101B10009146042800D0FFDF37803220F2E7207B97 -+:101B20009146022800D0FFDF37803320EAE7207B90 -+:101B30001746022800D0FFDF3420A6F800A0288036 -+:101B4000002FC8D0A7F80A80C5E7207B17460428D5 -+:101B500000D0FFDF3520A6F800A02880002FBAD0E3 -+:101B60004046A7F80A8012E0207B1746052802D0DD -+:101B7000062800D0FFDF1020308036202880002F7C -+:101B8000A9D0E0897881A7F80E80B9F80E00B88155 -+:101B9000A1E7207B9146072800D0FFDF3780372060 -+:101BA000B0E72AE04FF0120018804FF0380017001D -+:101BB000288090D0E0897881A7F80E80A7F810805F -+:101BC00099F80C000A2805D00B2809D00C280DD054 -+:101BD000FFDF80E7207B0C2800D0FFDF01200AE038 -+:101BE000207B0D2800D0FFDF042004E0207B0E289E -+:101BF00000D0FFDF052038736DE7FFDF6BE770B5BE -+:101C00000C46054601F076FA20B10078222804D26D -+:101C1000082070BD43F2020070BD052128460EF079 -+:101C20001DFF206008B1002070BD032070BD2DE9AC -+:101C3000FF4784B00027824602970798904689465E -+:101C400012300AF0E2F8401D20F00306079828B988 -+:101C500007A95046FFF7D3FF002853D1B9F1000F71 -+:101C600005D00798017B19BB052504681BE098F88F -+:101C70000000092803D00F2812D0FFDF45E00799A4 -+:101C800003254868B0B3497B42887143914238D9F3 -+:101C90008AB2B3B2011D0EF03AFD0446078002E09D -+:101CA000079C042508340CB1208810B1032D28D0DE -+:101CB0002BE00798012112300AF0DFF8ADF80C0094 -+:101CC000024602AB2946504608F0B1F9070001D19F -+:101CD000A01C029007983A461230C8F80400A8F8F1 -+:101CE00002A003A94046029B0AF0D4F8C0B107281D -+:101CF00014D200E005E0DFE800F0060811110F0A39 -+:101D00000C00132026E6002024E6112022E60820FD -+:101D100020E643F203001DE607201BE6032019E638 -+:101D2000BDF80C002346CDE900702A4650460799BD -+:101D300000F035FD57B9032D08D10798B3B2417BA8 -+:101D4000406871438AB2011D0EF0F5FCB9F1000F35 -+:101D5000D9D0079981F80C90D5E72DE9FE4F91462F -+:101D60001A881C468A468046FAB102AB494608F0FA -+:101D70005EF9050019D04046A61C27880EF08AFFA0 -+:101D80003246072629463B4600960EF049FB20883E -+:101D90002346CDE900504A465146404600F0FFFC3C -+:101DA000002020800120BDE8FE8F0020FBE710B559 -+:101DB00086B01C46AAB104238DF800301388ADF814 -+:101DC00008305288ADF80A208A788DF80E200988EC -+:101DD000ADF80C1000236A462146FFF728FF06B035 -+:101DE00010BD1020FBE770B50D4605210EF036FE44 -+:101DF000040000D1FFDF294604F11200BDE8704065 -+:101E00000AF024B82DE9F8430D468046002607F075 -+:101E1000CCFA0446287812287BD2DFE800F07A5406 -+:101E2000543C355632321332323209323232323287 -+:101E30002879001FC0B2022801D0102810D114BB8D -+:101E4000FFDF35E004B9FFDF052140460EF006FE56 -+:101E5000007B032806D004280BD0072828D0FFDFFA -+:101E6000072657E02879801FC0B2022820D050B141 -+:101E7000F6E72879401FC0B2022819D0102817D0E1 -+:101E8000EEE704B9FFDF13E004B9FFDF287901288A -+:101E90000ED1172139E0052140460EF0DFFD070085 -+:101EA00000D1FFDF07F11201404609F0A6FF2CB177 -+:101EB0002A462146404600F05CFC2BE013214046B8 -+:101EC00002F0AAFC26E0FFDF24E004B9FFDF0521D1 -+:101ED00040460EF0C3FD060000D1FFDF694606F163 -+:101EE000120009F094FF060000D0FFDFA98817292F -+:101EF00001D2172200E00A46BDF80000824202D952 -+:101F0000014602E005E01729C3D3404600F057FC24 -+:101F1000CEE7FFDF3046BDE8F883401D20F0030226 -+:101F200019B102FB01F0001D00E0002010447047D1 -+:101F300013B5009850B100244FEA0D000EF091FB4C -+:101F4000002C02D1F84A009911601CBD0124002028 -+:101F5000F4E72DE9F0470C461546242120461FF0F2 -+:101F600064FE05B9FFDFA87860732888DFF8B8A39E -+:101F7000401D20F00301AF788946DAF800000EF02A -+:101F80008EFB060000D1FFDF4FF000082660A6F8A8 -+:101F9000008077B109FB07F1091D0AD0DAF80000CB -+:101FA0000EF07DFB060000D1FFDF6660C6F8008002 -+:101FB00001E0C4F80480298804F11200BDE8F0476C -+:101FC00009F00DBF2DE9F047804601F112000D46E2 -+:101FD000814609F01AFF401DD34F20F003026E7BAB -+:101FE0001446296838680EF085FB3EB104FB06F202 -+:101FF000121D03D0696838680EF07CFB05200EF0D6 -+:10200000D7FC044605200EF0DBFC201A012802D183 -+:1020100038680EF039FB49464046BDE8F04709F004 -+:10202000F3BE70B5054605210EF018FD040000D181 -+:10203000FFDF04F112012846BDE8704009F0DDBE63 -+:102040002DE9F04F91B04FF0000BADF834B0ADF882 -+:1020500004B047880C4605469246052138460EF0E6 -+:10206000FDFC060000D1FFDF24B1A780A4F806B074 -+:10207000A4F808B0297809220B20B2EB111F297AA5 -+:102080007DD104F110023827C91E4FF00C094FF022 -+:10209000010803920F2973D2DFE801F0F4F3F28113 -+:1020A00008D48A8FA13DDDF5F0B8B800307B022856 -+:1020B00000D0FFDFA88909EBC001ADF80410302182 -+:1020C000ADF83410002C25D06081B5F80E900027B3 -+:1020D0001DE004EBC708317C88F80E10F189A8F8E0 -+:1020E0000C10CDF800906888042304AA296900F038 -+:1020F00030FBBDF81010A8F8101009F10400BDF86D -+:1021000012107F1C1FFA80F9A8F81210BFB2608964 -+:10211000B842DED80FE1307B022800D0FFDFE9892A -+:1021200009EBC100ADF804003020ADF83400287B85 -+:102130000A90001FC0B20F90002CEBD06181B5F85F -+:102140001090002727E000BFCDF8009068886969EB -+:1021500003AA0A9B00F0FDFA0A9904EBC70809EBF1 -+:1021600001001FFA80F908F10C0204A90F9810F081 -+:10217000D3F818B188F80EB0A8F80CB001E0D7E099 -+:10218000D4E0BDF80C10A8F81010BDF80E107F1C9C -+:10219000A8F81210BFB26089B842D5D8CBE00DA81C -+:1021A000009001AB224629463046FFF728FBC2E0EB -+:1021B000307B082805D0FFDF03E0307B082800D003 -+:1021C000FFDFE8891030ADF804003620ADF83400A8 -+:1021D000002C3FD0A9896181F189A18127E0307B62 -+:1021E000092800D0FFDFA88900F10C01ADF8041028 -+:1021F0003721ADF83410002C2CD06081E889009094 -+:10220000AB89688804F10C02296956E0E889392114 -+:10221000103080B2ADF80400ADF83410002C74D04A -+:10222000A9896181287A10280AD002212173E989BD -+:10223000E181288A0090EB8968886969039A3CE00B -+:102240000121F3E70DA8009001AB22462946304654 -+:10225000FFF766FB6FE0307B0A2800D0FFDF12201B -+:10226000ADF80400ADF834704CB3A9896181A4F8CD -+:1022700010B0A4F80EB084F80C805CE020E002E01E -+:1022800031E039E042E0307B0B2800D0FFDF288AC4 -+:10229000ADF834701230ADF8040084B1042121731C -+:1022A000A9896181E989E181298A2182688A00906E -+:1022B0002B8A688804F11202696900F04AFA3AE050 -+:1022C000307B0C2800D0FFDF1220ADF80400ADF801 -+:1022D00034703CB305212173A4F80AB0A4F80EB001 -+:1022E000A4F810B027E00DA8009001AB22462946C3 -+:1022F0003046FFF769FA1EE00DA8009001AB2246B8 -+:1023000029463046FFF7C3FB15E036E03B21ADF828 -+:102310000400ADF8341084B3A4F80680A4F808B023 -+:1023200084F80AB007E0000010000020FFDF02E0A0 -+:10233000012919D0FFDFBDF80400AAF800007CB124 -+:10234000BDF834002080BDF804006080BDF8340082 -+:10235000392805D03B2803D03C2801D086F80CB0A2 -+:1023600011B00020BDE8F08F3C21ADF80400ADF8BD -+:10237000341014B1697AA172DDE7FFE7AAF8000012 -+:10238000EEE72DE9F84356880F46804615460521AD -+:1023900030460EF063FB040000D1FFDF12340094DE -+:1023A0003B46414630466A6809F02EFFB3E570B5FA -+:1023B0000D4605210EF052FB040000D1FFDF294637 -+:1023C00004F11200BDE8704009F02CBD70B50D4657 -+:1023D00005210EF043FB040000D1FFDF294604F184 -+:1023E0001200BDE8704009F050BD70B505460521EA -+:1023F0000EF034FB040000D1FFDF04F10803214696 -+:102400002846BDE870400422A7E470B505460521C2 -+:102410000EF024FB040000D1FFDF2146284623688C -+:10242000BDE87040052298E470B5064605210EF01F -+:1024300015FB040000D1FFDF04F1120009F0E5FCF8 -+:10244000401D20F0030511E0011D00880322431800 -+:1024500021463046FFF781FC00280BD0607BABB2F1 -+:10246000684382B26068011D0EF09BF96068418884 -+:102470000029E9D170BD70B50E46054606F095FFFE -+:10248000040000D1FFDF0120207266726580207891 -+:1024900020F00F00C01C20F0F00030302070BDE8AC -+:1024A000704006F085BF2DE9F0438BB00D46144611 -+:1024B000814606A9FFF7A3FB002814D14FF6FF764B -+:1024C00001274FF420588CB103208DF80000102014 -+:1024D000ADF8100007A8059007AA204604A90FF040 -+:1024E0003AFF78B107200BB0BDE8F0830820ADF8C3 -+:1024F00008508DF80E708DF80000ADF80A60ADF848 -+:102500000C800CE00698A17801742188C1818DF8B7 -+:102510000E70ADF80850ADF80C80ADF80A606A4650 -+:1025200002214846069BFFF782FBDCE708B5012243 -+:102530008DF8022042F60202ADF800200A4603237D -+:102540006946FFF734FC08BD08B501228DF802206A -+:1025500042F60302ADF800200A4604236946FFF75D -+:1025600026FC08BD00B587B079B102228DF80020A5 -+:102570000A88ADF808204988ADF80A1000236A4699 -+:102580000521FFF754FB07B000BD1020FBE709B1A0 -+:1025900007230CE40720704770B588B00D46144639 -+:1025A000064606A9FFF72BFB00280ED17CB10620BA -+:1025B000ADF808508DF80000ADF80A40069B6A4659 -+:1025C0000821DC813046FFF732FB08B070BD0520E2 -+:1025D0008DF80000ADF80850F0E700B587B059B1AC -+:1025E00007238DF80030ADF80820039100236A46D8 -+:1025F0000921FFF71CFBC6E71020C4E770B588B0BF -+:102600000C460646002506A9FFF7F9FA0028DCD19A -+:1026100006980121123009F030FC9CB1217806297E -+:1026200021D2DFE801F0200505160318801E80B2D4 -+:10263000C01EE28880B20AB1A3681BB1824203D9EE -+:102640000C20C2E71020C0E7042904D0A08850B9AC -+:1026500001E00620B9E7012913D0022905D0042999 -+:102660001CD005292AD00720AFE709208DF80000EB -+:102670006088ADF80800E088ADF80A00A068039013 -+:1026800023E00C208DF800006088ADF80800E08899 -+:10269000ADF80A00A0680A25039016E00D208DF819 -+:1026A00000006088ADF80800A088ADF80A00E08856 -+:1026B000ADF80C00A0680B25049006E00E208DF804 -+:1026C000000060788DF808000C256A4629463046DF -+:1026D000069BFFF7ACFA78E700B587B00F228DF8BC -+:1026E0000020ADF8081000236A461946FFF79FFA4C -+:1026F00049E700B587B071B102228DF800200A8841 -+:10270000ADF808204988ADF80A1000236A46062172 -+:10271000FFF78DFA37E7102035E770B586B006462B -+:1027200001200D46ADF808108DF800000146002389 -+:102730006A463046FFF77BFA040008D12946304646 -+:1027400005F058FC0021304605F072FC204606B02A -+:1027500070BDF8B51C4615460E46069F0EF088FA69 -+:102760002346FF1DBCB231462A4600940DF01FFEE1 -+:10277000F8BD10B548800878144620F00F00C01C42 -+:1027800020F0F00090300B4608701822214603F12B -+:1027900008001FF0F6F9BDE8104006F009BE30B49D -+:1027A0001146DDE902423CB1032903D0002330BCCD -+:1027B00008F0D3BA0123FAE71A8030BC704770B52D -+:1027C0000C460546FFF70FFB2146284605F021FC85 -+:1027D0002846BDE87040012105F02ABC4FF0E022F8 -+:1027E0004FF400410020C2F88011204908702049B0 -+:1027F00090020860704730B51C4D04462878A0420E -+:1028000018BF002C02D0002818BFFFDF2878A04294 -+:1028100008BF30BD2C701749154A0020ECB1164D89 -+:10282000DFF858C0131F012C0DD0022C1CBFFFDF96 -+:1028300030BD086003200860CCF800504FF4000061 -+:102840001060186030BD086002200860CCF80050AD -+:102850004FF040701060186030BD086008604FF0A5 -+:102860006070106030BD00B5FFDF00BD18000020B3 -+:1028700008F5014000F500402403002014F5004055 -+:1028800070B50B2000F0B5F9082000F0B2F9002176 -+:102890000B2000F0C4F90021082000F0C0F9EC4C36 -+:1028A00001256560A5600020C4F84001C4F844011A -+:1028B000C4F848010B2000F0A7F9082000F0A4F9A3 -+:1028C0000B2000F08BF9256070BD10B50B2000F0D7 -+:1028D00090F9082000F08DF9DD4801214160816008 -+:1028E000DC490A68002AFCD10021C0F84011C0F878 -+:1028F0004411C0F848110B2000F086F9BDE81040E3 -+:10290000082000F081B910B50B2000F07DF9BDE87A -+:102910001040082000F078B900B530B1012806D089 -+:10292000022806D0FFDF002000BDCB4800BDCB4809 -+:1029300000BDCA48001D00BD70B5C9494FF0004038 -+:102940000860C84DC00BC5F80803C74800240460E0 -+:10295000C5F840410820C43500F04BF9C5F83C41AA -+:10296000C248047070BD08B5B94A002128B10128D9 -+:1029700011D002281CD0FFDF08BD4FF48030C2F810 -+:102980000803C2F84803B3483C300160C2F8401164 -+:10299000BDE80840D0E74FF40030C2F80803C2F8A1 -+:1029A0004803AC4840300160C2F84411AB480CE029 -+:1029B0004FF48020C2F80803C2F84803A548443009 -+:1029C0000160C2F84811A548001D0068009008BDCC -+:1029D00070B516460D460446022800D9FFDF0022D6 -+:1029E0009B48012304F110018B4000EB8401C1F8E6 -+:1029F000405526B1C1F84021C0F8043303E0C0F8C7 -+:102A00000833C1F84021C0F8443370BD2DE9F041CE -+:102A10001C46154630B1012834D0022839D0FFDFDA -+:102A2000BDE8F081891E002221F07F411046FFF7AA -+:102A3000CFFF012C24D000208C4E8A4F01247070CF -+:102A40003C61894900203C3908600220091D08606A -+:102A5000854904203039086083483D350560C7F852 -+:102A60000042082000F0D0F82004C7F80403082032 -+:102A700000F0B4F87A49E007091F08603470CFE726 -+:102A80000120D9E7012B02D00022012005E001221C -+:102A9000FBE7012B04D000220220BDE8F04197E7BC -+:102AA0000122F9E76B480068704770B500F0C7F87D -+:102AB000674C0546D4F840010026012809D1D4F816 -+:102AC0000803C00305D54FF48030C4F80803C4F8E8 -+:102AD0004061D4F8440101280CD1D4F808038003E4 -+:102AE00008D54FF40030C4F80803C4F8446101204D -+:102AF00010F0F6FBD4F8480101280CD1D4F80803F3 -+:102B0000400308D54FF48020C4F80803C4F8486196 -+:102B1000022010F0E5FB5648056070BD70B500F06E -+:102B20008EF8524D0446287858B1FFF705FF6878B3 -+:102B300020B1002085F8010010F0D2FB4C48046061 -+:102B400070BD0320F8E74FF0E0214FF40010C1F80A -+:102B500000027047152000F057B842490120086173 -+:102B6000082000F051B83F494FF47C10C1F8080329 -+:102B70000020024601EB8003C3F84025C3F8402142 -+:102B8000401CC0B20628F5D37047410A43F60952EB -+:102B90005143C0F3080010FB02F000F5807001EB18 -+:102BA0005020704710B5430B48F2376463431B0C49 -+:102BB0005C020C602F4C03FB04002F4B4CF2F724FB -+:102BC00043435B0D13FB04F404EB402000F58070DD -+:102BD0004012107008681844086010BD00F01F0211 -+:102BE000012191404009800000F1E020C0F800116F -+:102BF000704700F01F02012191404009800000F160 -+:102C0000E020C0F88011704700F01F0201219140C0 -+:102C10004009800000F1E020C0F8801270474907A9 -+:102C2000090E002806DA00F00F0000F1E02080F81D -+:102C3000141D704700F1E02080F8001470470C4824 -+:102C4000001F00680A4A0D49121D116070470000FC -+:102C500000B0004004B500404081004044B1004055 -+:102C600008F501400080004040850040340000200D -+:102C700014050240F7C2FFFF6F0C010001000001C4 -+:102C80000A4810B50468094909480831086010F07D -+:102C9000BBFB0648001D046010BD0649002008600B -+:102CA0004FF0E0210220C1F8800270471005024079 -+:102CB00001000001FC1F004010B50D2000F06FF86E -+:102CC000C4B26FF0040000F06AF8C0B2844200D0D1 -+:102CD000FFDF3A490120086010BD70B50D2000F0FB -+:102CE00048F8374C0020C4F800010125C4F804530B -+:102CF0000D2000F049F825604FF0E0216014C1F884 -+:102D0000000170BD10B50D2000F033F82C480121F2 -+:102D100041600021C0F80011BDE810400D2000F016 -+:102D200033B8284810B50468264927480831086098 -+:102D30002349D1F80001012804D0FFDF2148001DFC -+:102D4000046010BD1D48001D00680022C0B2C1F81B -+:102D5000002110F074FFF1E710B51948D0F8001108 -+:102D60000029FBD0FFF7DDFFBDE810400D2000F08B -+:102D70000BB800F01F02012191404009800000F1D2 -+:102D8000E020C0F88011704700F01F02012191403F -+:102D90004009800000F1E020C0F880127047002850 -+:102DA00006DA00F00F0000F1E02090F8140D03E0C7 -+:102DB00000F1E02090F800044009704704D500407D -+:102DC00000D00040100502400100000110B5202095 -+:102DD00000F075F8202000F07DF84449202081F8AB -+:102DE0000004434900060860091D42480860FEF7D8 -+:102DF00093FA3F49C83108603F48D0F8041341F0C6 -+:102E00000101C0F80413D0F8041341F08071C0F838 -+:102E10000413364901201C39C1F8000110BD10B55A -+:102E2000202000F04CF8324800210160001D0160B4 -+:102E30002F4A481EE83A10602F4AC2F808032C4B6C -+:102E4000C8331960C2F80001C2F860012B4908605C -+:102E5000BDE81040202000F03DB825492848EC3955 -+:102E60000860704722492648E8390860704770B505 -+:102E70001F4A8069E83A224911601F49D1F8006170 -+:102E80000023204D1D4A5C1E1EB1A84206D300211E -+:102E90000FE0D1F8606186B1A84209D2C1F80031D3 -+:102EA000C1F860311460BDE87040202000F012B815 -+:102EB0001168BDE870401EF0E3BEFFDF70BD00F09A -+:102EC0001F02012191404009800000F1E020C0F87C -+:102ED0008011704700F01F020121914040098000DD -+:102EE00000F1E020C0F880127047000020E000E010 -+:102EF000000602406413002000000240000402406B -+:102F000001000001003002000F4A12680D498A4298 -+:102F10000CD118470C4A12680A4B9A4206D101B5E7 -+:102F200010F00EFFFFF799FFBDE80140074909685F -+:102F30000958084706480749054A064B70470000EC -+:102F400000000000BEBAFECAB0000020040000204D -+:102F5000E8120020E812002070B50C46054609F082 -+:102F6000F0FA21462846BDE870400AF0E2BB10B5F1 -+:102F700011F054FBFFF732FC11F0F0F9BDE81040FE -+:102F800011F0A2BA01208107086070470120810773 -+:102F90004860704712480068C00700D001207047A1 -+:102FA0000F48001F0068C00700D0012070470C4880 -+:102FB00008300068C00700D0012070470848103072 -+:102FC0000068704706490C310A68D20306D50968C3 -+:102FD00001F00301814201D10120704700207047B8 -+:102FE0000C0400407047704770477047704702F00C -+:102FF000FF0343EA032242EA02421EF0F6BD704795 -+:103000002CFFFFFFDBE5B151003002009D00FFFF08 -+:1030100084000000404B4C0066D342DA82CFB49D5E -+:10302000E40AD77E68976592800939FF30B5FF4D75 -+:10303000044610280AD0112C06D02846122CC1783C -+:1030400006D0132C08D0FFDFEC7030BDFFDFFBE7AC -+:103050001129F9D0FFDFF7E71129F5D0FFDFF3E7FA -+:1030600070B50FF0E3FA044610F0A0FC201AC4B2C9 -+:1030700006200DF09DFC054606200DF0A1FC2E1A41 -+:1030800007200DF095FC054607200DF099FCE74957 -+:10309000281A3218C87812280DD000231A44132891 -+:1030A0000BD0002002440878022808D000201044E9 -+:1030B000201AC0B270BD0123F0E70120F2E7012021 -+:1030C000F5E7DA4800B58079D849420897B051F859 -+:1030D000070F89880CD017228DF80020CDF8020048 -+:1030E000ADF806100BA968460AF0B4FF17B000BD92 -+:1030F0004422F1E702210DF0B1BC2DE9F04196B078 -+:103100001D4690460E460746FFF7F4FF04000BD01D -+:103110002078222804D3A07FC0F34010A84206D113 -+:10312000082016B0BDE8F08143F20200F9E749201B -+:103130008DF80000ADF802703DB101208DF804005B -+:103140008DF805608DF8068002E000208DF80400FF -+:103150000BA968460AF07EFFA07F65F34510A077B3 -+:103160000020DEE730B50446A1F120000D460A2814 -+:103170004AD2DFE800F005070C1C2328353A3F440B -+:10318000FFDF42E0207820283FD1FFDF3DE0A74865 -+:103190000178032939D0C078132836D02078242824 -+:1031A00033D0252831D023282FD0FFDF2DE0207801 -+:1031B00022282AD0232828D8FFDF26E020782228BA -+:1031C00023D0FFDF21E0207822281ED024281CD025 -+:1031D00026281AD0272818D0292816D0FFDF14E077 -+:1031E0002078252811D0FFDF0FE0207825280CD08B -+:1031F000FFDF0AE02078252807D0FFDF05E02078F0 -+:10320000282802D0FFDF00E0FFDF257030BD30B599 -+:103210000B8840F67B444FF6FF72022801D09342A0 -+:1032200004D09D1FA54224D2022802D04D88954289 -+:1032300003D04D88AD1FA5421BD24C88A34218D89D -+:103240008B88B3F5FA7F14D2022802D0C888904246 -+:1032500005D0C88840F677450A38A84209D2C88800 -+:10326000904208D0944206D05B1C6343B3EB800FBE -+:1032700001DB072030BD002030BD70B514460D467F -+:10328000064610F0EDFF60B90DB1A54201D90C2042 -+:1032900070BD002409E000BF56F8240010F0E0FFE4 -+:1032A00008B1102070BD641CE4B2AC42F4D300201D -+:1032B00070BDF0B50024059D10B1A94203D850E0BF -+:1032C00009B90020F0BD0920F0BD055DD5B1071991 -+:1032D00097F801C0BCF1150F2DD03BDCBCF1150FE8 -+:1032E00038D2DFE80CF037122020262628282F2F8E -+:1032F000373737373737373737372000025D22BB4C -+:10330000641CE4B28C42F9D3DBE7022DDBD1BD783B -+:103310001D70072D01D26D0701D40A20F0BD15786C -+:1033200045F0010515E0EF43FF0707E0012D07D049 -+:1033300010E00620F0BD2F07A7F18057002FF5D031 -+:103340003046F0BD1578AF0701D50B20F0BD45F034 -+:1033500002051570055D641C2C44E4B28C4202D950 -+:10336000B1E74FF448568C42AFD3AAE710B50278C4 -+:10337000540809D0012243F20223012C07D0022C69 -+:103380000DD0032C13D10FE00020087005E08079E8 -+:103390000324B4EB901F0AD10A70002010BD80797D -+:1033A000B2EB901F03D1F7E780798009F4D018467B -+:1033B00010BD1E4A117C39B1517C022908D0032965 -+:1033C00008D043F2022070470146901D01F0FCBC7A -+:1033D000032100E0012101700020704738B50C4640 -+:1033E0000546694601F0F0FC00280DD19DF800105B -+:1033F000207861F34700207055F8010FC4F80100F0 -+:10340000A888A4F80500002038BD38B51378E8B1C5 -+:1034100002281BD006A46D46246800944C7905EB65 -+:103420009414247864F34703137003E0CC01002064 -+:103430000302FF0103280ED003F0FE00107008689D -+:10344000C2F801008888A2F8050038BD23F0FE0309 -+:1034500013700228E9D1D8B240F00100EEE730B590 -+:103460000C46097897B0222902D2082017B030BD47 -+:1034700028218DF80010ADF80200132A03D03B2A52 -+:1034800001D00720F2E78DF804200BA968460AF066 -+:10349000E1FD050003D121212046FFF763FE284608 -+:1034A000E4E700B597B023218DF80010ADF80200D5 -+:1034B0001088ADF804005088ADF80600D088ADF84B -+:1034C0000A009088ADF808000020ADF80C00ADF8B7 -+:1034D0000E000BA968460AF0BDFD07E600B597B0DF -+:1034E0002C22FA4968461EF04CFB0020CDF8030060 -+:1034F000ADF80700F648007C022801D0012000E06A -+:1035000000208DF809000BA968460AF0A3FD0028E9 -+:1035100000D0FFDFEAE52DE9FF470220EC4E8DF8F1 -+:1035200004000027B08AADF80600B84643F202094D -+:103530004DE001A80DF0FBF9050006D0B08AA8B354 -+:10354000A6F81480ADF806803FE0039CA07F010739 -+:103550002DD504F124000090A28EBDF8080021466C -+:1035600004F1360301F00DFE050005D04D452BD0CA -+:10357000112D3DD0FFDF3BE0A07F20F00800A077B9 -+:10358000E07F810861F30000C10861F34100E0774A -+:1035900094F8210000F01F0084F8200020782828EB -+:1035A00027D129212046FFF7DDFD22E015E0400765 -+:1035B0000BD5BDF80800214604F10E02FFF771FF9C -+:1035C00005000DD04D4510D100257F1CFFB2022013 -+:1035D0000DF0EEF9401CB842ABD8052D12D008E032 -+:1035E000A07F20F00400A07703E0112D00D0FFDFC2 -+:1035F0000025BDF80600B082052D05D0284604B090 -+:10360000BDE8F087A6F814800020F8E770B50646FC -+:10361000FFF770FD054605F0C8FE040000D1FFDF8E -+:103620006680207820F00F00801C20F0F000203011 -+:1036300020700620207295F83E006072BDE8704050 -+:1036400005F0B6BE2DE9F04786B0040000D1FFDFDB -+:1036500020789F4E20F00F00801C20F0F00070308A -+:10366000207060680178091F182931D2DFE801F065 -+:10367000FD30303053FC300CFCFC40FD3030FD762A -+:10368000FDFD3030FDFDFBFA86883046FFF732FD48 -+:103690000546304607F05FFAE0B16068807985F84A -+:1036A0003E0021212846FFF75DFD3046FEF7B9FCBC -+:1036B000304603F0C3FF3146022010F085FDA87F9D -+:1036C00020F01000A877FFF726FF002800D0FFDFCA -+:1036D00006B095E7207820F0F0002030207006201A -+:1036E0002072668060688079607205F061FED8E7BC -+:1036F00085882846FFF7FEFC00B9FFDF6068807808 -+:10370000012800D0FFDF6068817906B02846BDE857 -+:10371000F04707F0FDBD86883046FFF7EBFC05005B -+:1037200000D1FFDF05F044FE60683146C088288183 -+:1037300060680089688160684089A881022010F073 -+:1037400043FD0020A875A87F00F003000228BFD128 -+:10375000FFF7E1FE0028BBD0FFDFB9E780783C2807 -+:1037600003D0002502280AD000E00125002720B15F -+:103770003C2802D0022800D0FFDF17B1B8E00127B3 -+:10378000F5E705F015FE1DB1B07801F0DCFAA1E017 -+:103790006568B5F804A0A879AD1C012806D0307979 -+:1037A000814605F097FB070003D101E0B078F7E709 -+:1037B000FFDF0022022150460DF047F9040000D13E -+:1037C000FFDF22212046FFF7CDFC2879012800D019 -+:1037D0000220A17F804668F30101A177288B208118 -+:1037E000688B6081A88BA08184F822908DF8088076 -+:1037F000B8680090F86801906A46032150460DF0C1 -+:1038000024F900B9FFDFB888ADF81000B8788DF85A -+:10381000120004AA052150460DF017F900B9FFDF88 -+:10382000B888ADF80C00F8788DF80E0003AA0421D2 -+:1038300050460DF00AF900B9FFDF062105F112002C -+:1038400001F0EDFA28B36879800700D5FFDF6979C8 -+:10385000E07D61F34700E075D5F80600A061688956 -+:10386000A08303E05EE057E050E062E0062105F14E -+:103870000C0001F0D4FAB0B1B0794108607861F37E -+:1038800047006070D6F80700C4F80200B6F80B00D5 -+:1038900012E0E07D20F0FE00801CE075D5F81200FB -+:1038A000A061E88ADCE7607820F0FE00801C607090 -+:1038B000E868C4F80200288AE080B8F1010F09D056 -+:1038C000B8F1020F14D0FFDF02E70000CC1F0200A6 -+:1038D000CC0100203078032800D0FFDF002108460B -+:1038E00010F072FC06B00120BDE8F04701F0FAB913 -+:1038F000F078132800D0FFDF0021062010F064FCD0 -+:1039000006B01120BDE8F047FFF790BB06B0204697 -+:10391000BDE8F04701F0E6BE05F04AFDB07C40F09E -+:10392000020004E005F044FDB07C40F00400B074F7 -+:10393000CEE606B0BDE8F04705F03ABD2DE9F04708 -+:1039400005460078914600270209FF480C463E468E -+:10395000012A6DD000234FF6FF71022A69D0072A91 -+:1039600009D00A2A71D0FFDFA9F800600CB12780C6 -+:103970006680002044E6D5F804C09CF80060142E50 -+:103980007DD010DC04F1080204F118080F2E21D0BC -+:1039900004DC042E5AD0082E57D10DE0122E6FD021 -+:1039A000132EF9D11FE0153E072E4ED2DFE806F0A8 -+:1039B000C14D4D099FEAB00012271026BCF8040043 -+:1039C00014E11C27092694B3BCF80200A0806868A3 -+:1039D00000795AE11B2709264CB30320207268683E -+:1039E0004088A080C0E79CF802003C2827D0102720 -+:1039F00018260CF1020CD4B1BCF80200A080BCF86F -+:103A000018006082BCF818002082BCF81A00A0825E -+:103A1000BCF81C00E0829CF805000CF10601FFF7E1 -+:103A2000F4FC9CF8040028B10120E0739CE703E05B -+:103A3000BFE0DFE00220F8E7A9F8006099E71B2764 -+:103A40000926002CF8D023728EE720E11D273726A7 -+:103A5000002CF1D0A18069680879491DFFF7D5FCD9 -+:103A6000686890F82B00A0756868C0780428E07D2D -+:103A700016D020F00100E0756968C97801E06DE0BA -+:103A800011E061F34200E07569681F22C97A61F3B1 -+:103A9000C700E075696840460C311EF02DF863E7F9 -+:103AA00040F00100E7E71D273726002CC4D0A18095 -+:103AB0006868411D0079FFF7A8FC696804F10F02EE -+:103AC00001F10C00CB7A01461846FFF79EFC6868AE -+:103AD000807CA0756868C178E07D61F3420020F0C9 -+:103AE000F900E0751F2140461EF09FF83CE72027B3 -+:103AF0001026002CA0D0A180686804F10902407A49 -+:103B000020726968CB1C88781946FFF77EFC2BE78A -+:103B100021270A26002C8FD0BCF80210A1806968EA -+:103B200009792172696849796172817C21F0040107 -+:103B300057E022270B26002C84D0BCF80400A0807C -+:103B40006868807820726868807901F077F960721F -+:103B50006868C07901F072F9A07205E72427102681 -+:103B6000002CA3D0BCF80200A080686800792081F6 -+:103B70006868007A60816868C088A0816868408948 -+:103B8000E081F1E623271026002C8FD0BCF802102C -+:103B9000A1806968898821816968C98861816968AB -+:103BA0000989A18169684989E181817C21F002014B -+:103BB00017E0297A012903D0022914D0FFDFD3E6C8 -+:103BC0001F271026002C95D06988A180A989218102 -+:103BD000E9896181298AA181698AE181817C21F059 -+:103BE00001018174C0E6122768881026214601F081 -+:103BF00003F9B9E6287A072850D2DFE800F0373D0C -+:103C00003D484848040011270926002C94D0B5F8F7 -+:103C100002804046FFF76EFA90F822A0A4F80480D4 -+:103C2000687A2072042140460CF02AFF05214046A4 -+:103C30000CF026FF002140460CF022FF01214046F7 -+:103C40000CF01EFF032140460CF01AFF02214046F3 -+:103C50000CF016FF062140460CF012FF07214046EB -+:103C60000CF00EFF504601F06EF87DE61B2709268A -+:103C7000002C8AD0A180E6E61B270926002C84D0E0 -+:103C8000A180287A012800D0022020726CE64A46E2 -+:103C900021462846BDE8F04701F0AFBEFFDF63E6EE -+:103CA00030B5294D97B0E878132802D0082017B016 -+:103CB00030BD22208DF800000BA968460AF0CAF931 -+:103CC000040002D1287901F03EF80021062010F00E -+:103CD0007BFA2046EBE700B51B4897B0C078122866 -+:103CE00001D0082016E41E208DF8000000208DF879 -+:103CF00002008DF803000BA968460AF0ABF9002812 -+:103D0000F0D10021062010F05FFA1120FFF78EF9A4 -+:103D10000020E7E710B50C4C96B02078012815D0AC -+:103D20001B208DF8000000208DF802000BA96846CA -+:103D30000AF090F900280AD10021084610F044FA50 -+:103D40002078032805D007E0CC010020082016B019 -+:103D500010BDA07800F0F7FF012000F0C3FF0020A5 -+:103D6000F5E770B5002538B1022817D0062836D0FF -+:103D7000072800D0FFDF70BDFFF7CCFF0028FAD185 -+:103D800005F013FB0028F6D0017821F00F01891C03 -+:103D900021F0F0012031017005723FE08EB2304613 -+:103DA000FFF7A8F9040000D1FFDF20782128E2D036 -+:103DB00005F0FBFA60B1017821F00F01891C21F0B8 -+:103DC000F00110310170022101724680A57525E0D5 -+:103DD00021463046BDE870401322FFF740BBFE4845 -+:103DE000C478122C03D0132C04D0FFDF70BDFFF772 -+:103DF00072FF01E0FFF754FF0028F7D105F0D5FA74 -+:103E00000028F3D0017821F00F01891C21F0F00186 -+:103E100020310170122C05D002210172BDE87040E2 -+:103E200005F0C6BA0121F8E72DE9F04116460C006D -+:103E3000804600D1FFDF307820F00F00801C20F09A -+:103E4000F000103030702078012804D0022817D0FC -+:103E5000FFDFBDE8F0814046FFF74CF9050000D1D7 -+:103E6000FFDF0320A87505F0A3FA94E80F000836D9 -+:103E700086E80F00D848817C41F001018174E8E7B1 -+:103E80004046FFF737F9050000D1FFDFA1884FF664 -+:103E9000FF700027814202D1E288824203D0814232 -+:103EA00001D1E08840B105F083FA94E80F000836AC -+:103EB00086E80F00AF75CCE7A87D0128C9D178232B -+:103EC00000224146022010F0D5F80220A875C0E774 -+:103ED00030B5054697B00C46084610F0C1F978BBDE -+:103EE00000210120203D072D73D2DFE805F00425D5 -+:103EF0004C515A6640000021072010F03BF908B1F0 -+:103F00001120D4E624208DF80000D4F80200CDF86A -+:103F10000200A0798DF806000BA968460AF09AF80D -+:103F2000050057D1002208231146072010F0A2F8FF -+:103F300007284FD0FFDF4DE0606810F0D5F908B1D9 -+:103F40001020B4E64A208DF800002088ADF8020069 -+:103F50006088ADF804000BA968460AF07BF80500FC -+:103F600038D1606898B3BDF83010018032E04C2041 -+:103F70008DF800002088ADF80200A07800F0010064 -+:103F80008DF8040014E0206801F0D5FF054621E01B -+:103F90004B2207E08DF802000AE000BF8DF8021006 -+:103FA00006E046228DF800202278D207F6D0F1E70D -+:103FB0000BA968460AF04EF8E8E738208DF80000B3 -+:103FC0002088ADF802006088ADF80400F0E701E059 -+:103FD000FFE7072528466AE630B5054697B00C4648 -+:103FE000084610F063F908B1102060E6203D072D67 -+:103FF00027D2DFE805F00424242426262400208884 -+:10400000FFF778F820B10078222804D208204EE685 -+:1040100043F202004BE625208DF800002088ADF821 -+:1040200002000BA968460AF015F80028DDD1DDF87A -+:104030003210C4F802109DF83610A17137E6062040 -+:1040400035E6072033E66448801D704738B51621F1 -+:1040500061481DF0C8FD012000F044FE1120FEF76C -+:10406000E5FF5D4C6846E11D05F0FFF89DF8001086 -+:10407000A07961F3470020F00100A07100202074B6 -+:104080004FF46170E08102206074FFF71AF800B10C -+:10409000FFDFFDF769F901F0E2FA38BD10B50C4613 -+:1040A000402120461DF09FFDA07F20F00300A07757 -+:1040B000202020700020A07584F8230010BD7047D8 -+:1040C0007CB5054610F0CCF808B110207CBD424C00 -+:1040D000A11DD4F806000090D4F80A0001902846EB -+:1040E000FFF77CF90028F1D1FEF7EBFF0028EDD0B7 -+:1040F0000099C4F80610BDF8041061819DF80610FF -+:1041000021737CBD10B5044610F0D0F808B1102022 -+:1041100010BD314922468879C91D4008FFF775F95D -+:10412000002010BD2DE9F0479CB00D4604004FF073 -+:10413000000812D00822FFF7A0F800281CD10026A2 -+:1041400009E000BF54F8260004A9FFF70FF9002882 -+:1041500012D1761CF6B2AE42F4D32F460A2006AD39 -+:104160000DF1440A8DF8180026465146284609F0FC -+:1041700071FF20B143F203201CB0BDE8F087404638 -+:10418000DFF8548088F805002EB300244FF00B09A7 -+:104190001DE000BF56F8240005A9FFF7E7F800B1BD -+:1041A000FFDF9DF81400A87056F8240050F8011F96 -+:1041B000C5F803108088A5F8070085F800905146DF -+:1041C000284609F047FF00B1FFDF641CE4B2BC429F -+:1041D000E0D388F8057001E0CC0100200020CBE797 -+:1041E0002DE9F0479EB01546894604001DD00F46C4 -+:1041F00008222946FFF741F8002810D1002612E0D6 -+:1042000054F8260005A9103000F0DEFD002806D184 -+:104210003FB157F8260010F023F810B110201EB05F -+:10422000ABE7761CF6B2AE42EAD30026A5F1010850 -+:104230001CE000BF06F1010A0AF0FF0712E000BF10 -+:1042400054F82600017C4A0854F827100B7CB2EB86 -+:10425000530F05D10622113011311DF021FC78B128 -+:104260007F1CFFB2AF42EBD30AF0FF064645E1DB0D -+:10427000C8462E4607AD0DF1480924B1012003E0E0 -+:1042800043F20520CBE700208DF81E0031208DF889 -+:104290001C004946284609F0DDFE38B934208DF867 -+:1042A0001C004946284609F0D5FE10B143F204200F -+:1042B000B5E77CB300272BE054F82700A91C103089 -+:1042C00000F082FD00B1FFDF54F82700102250F803 -+:1042D000111FC5F803108088A5F8070054F82710AF -+:1042E00005F109001DF008FCB8F1000F16D058F8D0 -+:1042F0002710102205F119001DF0FEFB3220287056 -+:104300004946284609F0A6FE00B1FFDF7F1CFFB238 -+:10431000B742D1D3FFF7E2F8002080E705F119009A -+:1043200001F0FDFDEAE770B596B004460FF098FF86 -+:1043300018B960680FF0E1FF10B1102016B070BD21 -+:1043400060884AF2B811884207D82078FE4D6E4640 -+:1043500028B1012806D0022804D00720EEE7FEF796 -+:10436000B0FE1AE06078022804D0032802D043F29D -+:104370000220E3E7687417208DF80000697C0020B4 -+:10438000CDF80200ADF80600022934D003292FD061 -+:10439000FFDF0BA9684609F05DFE0028CED16068FA -+:1043A00001F0B0FD207870B101208DF80200F01C02 -+:1043B00001F0B5FD4E208DF800000BA9684609F00C -+:1043C00049FE00B1FFDF20782874FFF787F8608886 -+:1043D00098B1E88180B2ADF8020030208DF800007D -+:1043E0000BA9684609F036FE00B1FFDF0020A5E703 -+:1043F0008DF80700CDE74020FAE74FF46170E8E759 -+:1044000010B504460FF052FF20B9606838B10FF0C4 -+:104410006BFF08B1102010BD606801F080FDCA4834 -+:10442000C1896180417C6170007C2070002010BDDA -+:104430002DE9F0419CB0054600208DF864008DF810 -+:1044400060008DF830008DF868001E4614468846DE -+:1044500028460FF052FF18B920460FF04EFF10B15A -+:1044600010201CB0F5E455EA040018D01F270CAB4F -+:1044700019AA414628460097FEF71BFF0028F0D1F5 -+:104480001AAB18AA314620460097FEF712FF002803 -+:10449000E7D19DF86000C00703D00A20E1E70720BC -+:1044A000DFE701AF7DB11A208DF804008DF806809A -+:1044B00042462946F81C1DF01FFB0DA901A809F072 -+:1044C000C9FD0028CDD17CB120208DF804008DF8E5 -+:1044D000066032462146F81C1DF00EFB0DA901A80E -+:1044E00009F0B8FD0028BCD197499DF8300048700C -+:1044F0000020B6E72DE9F0479CB08A464FF000084F -+:1045000092A104468DF83480D1E90001CDE919016A -+:1045100020460FF0A5FE90B92078012803D16068ED -+:104520000FF09EFE58B9884D4FF00109287C40B12C -+:10453000687C022805D160680FF0DFFE08B110200A -+:104540001AE62878012801D0082015E607200CF08B -+:1045500037FA18B9207878B101280DD0FEF780FD20 -+:1045600060B1608943F6E172A0F1200191422178A7 -+:104570000CD3012904D0B6E01220FDE51320FBE5A1 -+:1045800000287DD1A18900297AD109E0012907D02D -+:104590006978C90704D0A189002971D0B4296FD8DE -+:1045A000217831B1012908D0022904D0032967D12B -+:1045B0000AE0002609E0022607E008B9A08908B150 -+:1045C000042609E0012607E00326287C50B1687C18 -+:1045D000022807D1606828B10DA96068FEF7C6FE01 -+:1045E0000028ADD1207A30B1012806D0022806D0AB -+:1045F000032878D105E0002704E0012702E0022724 -+:1046000000E003270EB1022E0ED16FB16879B8B366 -+:104610006878800702D043F20120ADE5022E03D175 -+:10462000022F60D0032F5ED0207808B1012806D178 -+:10463000504600F06BFB002887D185F802A01820B7 -+:104640008DF838006089ADF83A006089ADF83C001B -+:104650008DF83E600DF13F00FEF7ABFE00B1FFDFCD -+:104660009DF834008DF840002078012806D0287C81 -+:1046700068B1687C02280AD1606840B1606800E0D7 -+:1046800031E050F8011FCDF84110808802E040462B -+:10469000CDF84180ADF845008DF84870A07BC0F39F -+:1046A0004002014662F35F01C0F3800041EA8000EE -+:1046B00019A9085C8DF84700A8B169460EA809F051 -+:1046C000C9FC0028A9D11B208DF838008DF83A903C -+:1046D00069460EA809F0BEFC00289ED19DF8010095 -+:1046E0001B281CD101E0072046E5052E0CD2DFE88F -+:1046F00006F0030308080300A87800F017FB032066 -+:1047000000E0022000F0EEFA012E0AD0A08940B1AC -+:1047100000228300114610460FF0ACFC08B10320C4 -+:104720002AE5002028E52DE9FC4107460D46032631 -+:1047300008460FF0E2FD00286CD13846FEF7DAFC9F -+:1047400004000CD0207805E0CC0100200706050409 -+:1047500003020100222805D20820BDE8FC8143F2B3 -+:104760000200FAE7A07F00F0030C2DB12946604655 -+:10477000FEF74DFD0600F0D1BCF1010F05D0BCF1F4 -+:10478000020F18D0FFDF3046E7E7A07D2946022858 -+:1047900001D011B107E01120DFE76846FCF7F2FE17 -+:1047A0000028DAD16946384606F075FD0600EAD1E0 -+:1047B0000120A075E7E7A07D032803D1FE48807C97 -+:1047C000C00701D035B30EE025B1A07F40071FD44C -+:1047D000002100E00121384606F07DFD0600D2D11F -+:1047E000A075002DCFD02A4621463846FEF759FE47 -+:1047F00006461128C7D1A07F4107C4D4296844F8D0 -+:104800000E1F6968616040F0040020740026BAE75A -+:104810001126B8E71020A0E770B50C460546FEF754 -+:1048200069FC010005D022462846BDE87040FEF72D -+:1048300016BE43F2020070BD00B597B043218DF85B -+:1048400000108DF802000BA9684609F003FC17B0B0 -+:1048500000BD0123FEF751BC00231A461946FEF79E -+:104860004CBC30B597B004460FF0FAFC10B11020E4 -+:1048700017B030BD204600F095FA0028F8D1CE4D93 -+:10488000E878112801D00820F2E7FEF7E9FBE0B351 -+:104890002078800701D56879C0B31D208DF800000D -+:1048A0002078022200F001008DF802006088ADF847 -+:1048B0000400A088ADF806002078C0F3400102EAA9 -+:1048C000500001438DF8091002A8FEF772FD00B1F7 -+:1048D000FFDF0BA9684609F0BDFB0028C8D11E20E8 -+:1048E0008DF8000001208DF8020000208DF80300F3 -+:1048F0000BA9684609F0AEFB0028B9D1E08800F0AA -+:104900006DFA0400B4D1122001E004E005E0FEF7E6 -+:104910008DFB2046ACE71320AAE70720A8E72DE986 -+:10492000F043A54E074697B0F078994615460C46D9 -+:10493000122803D1FFF7CFF9002816D120460FF037 -+:104940008FFCE8BB28460FF08BFCC8BB204600F06C -+:1049500029FA002809D129460220FEF758FC002830 -+:1049600003D1F078112803D0082017B0BDE8F083F8 -+:1049700006200CF025F850B12078800701D5707919 -+:1049800038B1FEF76DFB022805D21320EDE71220A7 -+:10499000EBE70720E9E721208DF800006088ADF8FB -+:1049A0000200A088ADF8040020784FF00008C0F3A2 -+:1049B00040008DF80600207880071FD4384600E0BC -+:1049C00002E00FF04DFC08B11020CEE73878400827 -+:1049D00008D0012809D0022807D0032805D043F2C7 -+:1049E0000220C2E78DF8078002E001208DF8070061 -+:1049F00057F8010F0290B888ADF80C000DF10E00C9 -+:104A0000FEF7D7FC08B10320AFE72888ADF8100007 -+:104A10006888ADF81200A888ADF81400E888ADF8F1 -+:104A20001600ADF81880ADF81A80484600F06EF90F -+:104A300000289AD186F804900BA9684609F00AFB71 -+:104A4000002892D1307900F071F9E08800F0C6F9C1 -+:104A500004008AD11320FEF7E9FA204685E730B535 -+:104A6000054697B00C4608460FF020FC08B1102010 -+:104A7000FEE62846FEF73EFB38B10178222902D334 -+:104A8000807F800604D40820F2E643F20200EFE6BD -+:104A900013208DF80000ADF802500BA9684609F00C -+:104AA000D9FA0028E4D19DF932107F2901D0217074 -+:104AB000DEE60520DCE630B5054697B00C46084634 -+:104AC0000FF0CEFB08B11020D2E62846FEF712FB0D -+:104AD00020B10078222804D20820C9E643F202005F -+:104AE000C6E63548807C400701D51120C0E6207815 -+:104AF000800802D16078800801D00720B8E65620EF -+:104B00008DF80000ADF8025020788DF80400607830 -+:104B10008DF805000BA9684609F09CFAA8E62DE976 -+:104B2000F041B0B014460D460646FEF7E3FA070022 -+:104B300006D03878222806D2082030B0BDE8F081AF -+:104B400043F20200F9E728460FF0D7FB30B94FF0E7 -+:104B500000084CB120460FF0C7FB08B11020ECE76D -+:104B6000C4F80080A4F804801348807C800701D535 -+:104B70001120E2E797F8220004F0ACF98088011DCB -+:104B8000FB2901D2001D00E0FB20C0B26A46294685 -+:104B900000F0E3F82C22094904A81CF0F2FFBDF84C -+:104BA0000200ADF81400BDF80600ADF81600ADF82F -+:104BB0001260BDF8000003E0CC010020A01F02003D -+:104BC000ADF81800BDF80400ADF81A001AA904A841 -+:104BD00009F040FA00B1FFDFBDF86C00ADF8080045 -+:104BE000BDF86E00ADF80A00BDF87000BDF8721097 -+:104BF000BDF800200844ADF80C0007201B2A9CD308 -+:104C0000BDF802101B2998D3FB2A96D8FB2994D80B -+:104C100006278A4210D10121104600F05AF8BDF84B -+:104C20000410884208D1BDF80200012100F051F8BB -+:104C3000BDF80610884201D038467EE7BDF808006E -+:104C400028B9BDF80A1011B9BDF80C1029B35DB12F -+:104C5000298849B1698839B124B102982060BDF82A -+:104C60000C00A080132068E7BDF80010BDF80A20F2 -+:104C7000081A80B2ADF80000BDF80210891AADF82C -+:104C80000210012100F025F8ADF80400BDF8020083 -+:104C9000012100F01EF8ADF806002C226B490FA888 -+:104CA0001CF06FFFADF83E60BDF80200ADF84000AB -+:104CB000BDF80600ADF84200BDF80000ADF84400B4 -+:104CC000BDF80400ADF8460025A90FA809F0C2F907 -+:104CD00033E7022903D0C000703080B270478000F3 -+:104CE0003C30FAE730B55A4D040008D0012C04D00E -+:104CF000022C06D0032C04D0FFDF2C7030BDFFDF68 -+:104D0000FBE728780128F8D0FFDFF6E710B5044666 -+:104D100004F0E0F830B1407830B1204604F0EEFB0A -+:104D2000002010BD072010BD122010BD10B504F0EA -+:104D3000D1F8040000D1FFDF607800B9FFDF6078B0 -+:104D4000401E607010BD10B504F0C4F8040000D11E -+:104D5000FFDF6078401C607010BD10B5144631B1A3 -+:104D60000A68226049686160218839B107E02080C3 -+:104D700060800121FFF7ADFFA0800DE020806188F9 -+:104D800001B96080A08820B920880121FFF7A1FF28 -+:104D9000A080E088002804D160880121FFF799FFF6 -+:104DA000E08010BD418843F6FD730A1F9A4209D284 -+:104DB0008088042806D3B0F5804F03D8884201D8F4 -+:104DC00000207047072070470278520804D0012A5B -+:104DD00002D043F202207047FEF7C8BA10B548B1BE -+:104DE00083000022114606200FF044F9062801D066 -+:104DF000032010BD002010BD70B50C0006460DD07C -+:104E0000FEF778F9050000D1FFDFA6802889208110 -+:104E1000288960816889A081A889E08170BD10B56A -+:104E200000231A4603E0845C2343521CD2B28A4218 -+:104E3000F9D30BB1002010BD012010BD00B5012831 -+:104E400003D0022801D0FFDF002000BDF81F0200C0 -+:104E5000CC01002010B504460FF002FA08B1102072 -+:104E600010BD2078C0F30210042807D86078072806 -+:104E700004D3A178102901D8814201D2072010BDA6 -+:104E8000E078410706D421794A0703D4000701D40A -+:104E9000080701D5062010BD002010BD10B51378FD -+:104EA0005C08C37F64F30003C3771478A40864F339 -+:104EB0004103C3771078C309487863F34100487011 -+:104EC00013781C090B7864F347130B701378DB0815 -+:104ED00063F3000048705078487110BD10B5C47875 -+:104EE0000B7864F300030B70C478640864F3410327 -+:104EF0000B70C478A40864F382030B70C478E408D0 -+:104F000064F3C3030B700379117863F3000111702C -+:104F100003795B0863F34101117003799B0863F324 -+:104F2000820111700079C00860F3C301117010BDD7 -+:104F300070B514460D46064604F037FA80B1017884 -+:104F4000182221F00F01891C21F0F001A03100F896 -+:104F5000081B21461CF015FEBDE8704004F028BA7D -+:104F600029463046BDE870401322FEF778BA10B5E6 -+:104F7000FE4C94F8300000280CD104F120014FF6CB -+:104F8000FF72A1F110000DF04DF900B1FFDF01201B -+:104F900084F8300010BD2DE9F047064608A8894680 -+:104FA00090E830041F469046142128461CF03DFE30 -+:104FB0000021CAF80010B8F1000F03D0B9F1000FBA -+:104FC00003D114E03878C00711D020680FF06EF9D3 -+:104FD000F0BBB8F1000F07D12068123028602068BC -+:104FE000143068602068A8602168CAF8001038781A -+:104FF000800728D560680FF077F948BBB9F1000F3A -+:105000002DD0FFF720F80168C6F8C8118188A6F8EE -+:10501000CC11807986F8CE01FFF7A9FFDFF84C8329 -+:1050200008F12008C5F80C80626862B196F8C801E2 -+:1050300006F2C91140081032FEF7E7F91022414686 -+:1050400060681CF059FD3878400712D5A06800E070 -+:1050500002E00FF02BF950B11020BDE8F087606836 -+:105060000028F9D0E8606068C6F8C401EBE7A068E2 -+:1050700028610020F1E730B5054608780C4620F09D -+:105080000F00401C20F0F0011031217000206070F2 -+:1050900095F8230030B104280FD0052811D0062838 -+:1050A00014D0FFDF20780121B1EB101F04D295F856 -+:1050B000200000F01F00607030BD21F0F0002030B3 -+:1050C00002E021F0F00030302070EBE721F0F0003A -+:1050D0004030F9E710B510B190F8BD4044B1A34895 -+:1050E00090F83540002064B108601060186010BD71 -+:1050F00000F1BC040C6000F1E40100F58670116061 -+:10510000F4E79A4C34340C60EFE700B58BB007231A -+:10511000CDE902128DF801300191944900236431E8 -+:105120000591099301468DF8103068460DF052F84C -+:10513000002800D0FFDF0BB000BD70B590B0154661 -+:105140000C4602220646ADF80820092103AB04F004 -+:105150006EFF0490002812D00C208DF8010004206E -+:105160008DF8040004F59A74099605948DF818508A -+:105170000AA968460DF02EF800B1FFDF012010B03B -+:1051800070BD30B597B00C462C251A998DF800509B -+:10519000ADF80200B3B11868019058680290ADF8FC -+:1051A0000C2010220DF10E001CF0A6FC0BA9684685 -+:1051B00008F050FF002803D1A17F41F01001A17732 -+:1051C00017B030BD00200190E8E72DE9F047064612 -+:1051D000808A8CB080B20D468246FDF78BFF044674 -+:1051E000624F3078283FDFF884914FF00008112893 -+:1051F00073D2DFE800F072F1350936777E98A7F2B6 -+:10520000EFEEEDEC5BECEC00A07F00F0030001287A -+:1052100006D0002150460BF021FC050003D101E02F -+:105220000121F7E7FFDF99F85C10C90702D0D9F830 -+:1052300060000BE0032105F121000EF0E2FCD5F83F -+:1052400021004B49B0FBF1F201FB1200C5F821002F -+:105250007068A867B068E8672078252800D0FFDF6D -+:10526000ECE0A07F00F00300012806D000215046AA -+:105270000BF0F4FB060003D101E00121F7E7FFDFAB -+:105280003078810702D52178252904D040F001002B -+:1052900030700CB0E1E60220287096F820002871EA -+:1052A00006F121003136C5E90206F2E7A07F00F0E1 -+:1052B0000300012806D0002150460BF0CFFB04006C -+:1052C00003D101E00121F7E7FFDF2078C10605D512 -+:1052D0001320287041346C60DBE7BEE140F0080029 -+:1052E0002070D6E72148082128380EF08AFC0320D8 -+:1052F00016E02A208DF8000010220DF102007168DE -+:105300001CF0FAFB10220DF11200B1681CF0F4FB46 -+:10531000164968462C3908F09DFE00B1FFDF0420D5 -+:1053200028706F60B5E7E07FC00600D5FFDF307CF6 -+:10533000B28800F001030CB05046BDE8F0470921E7 -+:1053400005F00BBD04B9FFDF716821B1102204F133 -+:1053500024001CF0D1FB28212046FDF703FFA07F8D -+:1053600000F00300022814D104E00000180200201D -+:1053700040420F0004F12400002300901A46214609 -+:105380005046FFF7FEFE112807D029212046FDF7E1 -+:10539000E9FE307A84F820007BE7A07F000700D583 -+:1053A000FFDF14F81E0F40F008002070A4F81680EC -+:1053B000C4F81880C4F81C806178084661F3820044 -+:1053C000410861F3C3006070307AE07061E727E064 -+:1053D0003FE17AE051E000E037E0A07F00F0030019 -+:1053E000012806D0002150460BF038FB040003D101 -+:1053F00001E00121F7E7FFDF022104F189000EF04F -+:1054000000FC1020287004F5E4706860B4F889107E -+:10541000298204F18000FD496861C5E9029138E7FD -+:10542000A07F00F00300012805D0002150460BF0BA -+:1054300015FB18B901E00121F8E7FFDF0CB0324697 -+:1054400021465046BDE8F04772E504B9FFDF2078F9 -+:105450002128A1D93079012803D1E07F40F0100044 -+:10546000E077324621465046FFF762FD0CB02046F9 -+:10547000BDE8F0472321FDF775BE3279AA8005F11A -+:1054800008030921504604F0D2FDE86010B1112054 -+:105490002870FEE6A07F00F00300012806D000215E -+:1054A00050460BF0DBFA040003D101E00121F7E7DD -+:1054B000FFDF04F1660102231022081F0BF03BF905 -+:1054C00080F8008031794170E3E6A07F00F00300AE -+:1054D000012806D0002150460BF0C0FA050003D188 -+:1054E00001E00121F7E7FFDF95F8880000F00300F5 -+:1054F000012879D1A07F00F00307E07FC0F34006C8 -+:1055000016B1012F04D02BE095F8A400C0072AD0D3 -+:10551000D5F8C00118B395F88720017C62F38701A4 -+:105520000174E27FD5F8C00162F341010174D5F83E -+:10553000C00166F300010174AEB1D5F8C0011022BC -+:1055400004F124018C351CF0D7FA287E40F00100CC -+:105550002876287820F0010005F88C0900E016B1C3 -+:10556000022F04D02CE095F88C00C00726D0D5F887 -+:10557000BC1119B395F88720087C62F38700087482 -+:10558000E27FD5F8BC1162F341000874D5F8BC1174 -+:1055900066F3000008748EB1D5F8BC01102204F146 -+:1055A00024018C351CF0A8FA287840F0010005F899 -+:1055B000180B287820F0010005F8A409022F44D028 -+:1055C0005FF0000000EB400005EBC00090F88C009D -+:1055D000800709D595F88000D5F8C421400805F169 -+:1055E00081011032FDF711FF05208DF8000095F8BC -+:1055F00088006A4600F003008DF8010095F88C10D1 -+:105600008DF8021095F8A4008DF80300214650464D -+:1056100001F046FA2078252805D0212807D0FFDFA1 -+:105620002078222803D922212046FDF79BFDA07F68 -+:1056300000F0030001280AD0002150460BF020FAA8 -+:1056400000283FF432AEFFDF23E60120BAE7012154 -+:10565000F3E7716881F801801BE6FFDF19E670B59A -+:105660006A4C0025103C04F85C5F65600CF07FFD1F -+:105670006649A1F1100003F02AFE04F82C5C062014 -+:10568000607262487C3020615030A0611030E0616F -+:1056900070BD70B50D46FDF72DFD040000D1FFDF94 -+:1056A0004FF4E87128461CF0C0FA5848543068613D -+:1056B00004F124002861A07F00F00300012809D034 -+:1056C0005FF0020105F59A700CF052FD002800D041 -+:1056D000FFDF70BD0121F5E70A46014602F59A7029 -+:1056E0000CF066BD70B5054640689CB0017809298C -+:1056F00006D00C2937D00D2933D0FFDF1CB070BD88 -+:1057000046883046FDF7F6FC040000D1FFDF207824 -+:105710002128F3D0282821D1686802210C3001F01B -+:10572000B4F9D8B168680821001D01F0AEF9A8B13C -+:105730002D208DF80000ADF80260102204F1240144 -+:1057400001A81CF0D9F90BA9684608F083FC00B148 -+:10575000FFDF29212046FDF705FDCFE703F028FEF6 -+:10576000CCE701218171686886883046FDF7C2FC6C -+:10577000040000D1FFDFA07F00F00301022902D165 -+:1057800020F01000A077207821280AD0686881795D -+:1057900009B1807880B1A07F00F0030002285ED0BC -+:1057A000FFDFA07F00F003000228A7D1FDF7B3FEC2 -+:1057B0000028A3D0FFDFA1E703F0FAFDE07FC107D7 -+:1057C00028D0800705D594F8200000F01F0010288D -+:1057D0001ED0052084F82300207829281CD02428F6 -+:1057E000DFD1314605200EF0EFFC22212046FDF7E7 -+:1057F000B9FCA07F00F0030001282ED00021304624 -+:105800000BF03EF90028CCD0FFDFCAE728020020C9 -+:105810000620DFE70420DDE7A07F00F00300012879 -+:1058200006D0002130460BF019F9050003D101E044 -+:105830000121F7E7FFDF25212046FDF793FC0F202C -+:105840008DF8580016A905F59A700CF0A8FC0228EE -+:10585000A7D00028A5D0FFDFA3E70121CFE703F001 -+:10586000A7FD9EE72DE9F0438BB099461546884683 -+:105870000646FDF73FFC04004FD0207822284CD389 -+:1058800023284AD0E07FC00647D4A07F00F0030061 -+:10589000012806D0002130460BF0E0F8070002D0C6 -+:1058A0000CE00121F7E7A07F00F00300012805D1FB -+:1058B0000121002230460BF0C8F8074601AB02AACE -+:1058C00003A93846FFF706FC039800B9FFDF4FB184 -+:1058D000039807F59A7787612078222806D0242834 -+:1058E00004D007E003990020886103E025212046C9 -+:1058F000FDF738FC03980B21417046628580C0E9B2 -+:105900000289029901610199416104A90CF062FCCC -+:10591000022802D0002800D0FFDF0BB0BDE8F083E2 -+:1059200070B586B00546FDF7E5FB017822291CD944 -+:10593000807F00F00300012806D0002128460BF0EC -+:105940008DF8040030D101E00121F7E7FFDF2BE003 -+:10595000B4F8620004F1660630440178427831B14F -+:1059600021462846FFF7E9FBB8B906B070BDADF88F -+:1059700004200921284602AB04F059FB03900028BB -+:10598000F3D011208DF80000694604F59A700CF0F0 -+:1059900006FC022801D000B1FFDF022310223146AD -+:1059A00004F162000AF0FDFEB4F864000028CFD1D3 -+:1059B000DBE710B586B00446FDF79CFB0178222991 -+:1059C00019D9807F00F00300012806D0002120466D -+:1059D0000BF044F8040003D101E00121F7E7FFDFF9 -+:1059E00012208DF80000694604F59A700CF0D7FB80 -+:1059F000002800D0FFDF06B010BD2DE9F05F05469E -+:105A00000C4600270078904601093E46BA4604F14C -+:105A1000080B02297ED0072902D00A2909D142E0C9 -+:105A200068680178092905D00C292CD00D292AD0C5 -+:105A3000FFDFB2E114271C26002C6CD04088A08028 -+:105A4000FDF758FB5FEA000900D1FFDF99F8170066 -+:105A50005A46400809F11801FDF7D7FC68688089AB -+:105A6000208269684868C4F812008868C4F8160083 -+:105A7000A07E20F0060040F00100A07699F81E00FC -+:105A800040F040014DE01A270A26002CD5D080882E -+:105A9000A080FDF72FFB050000D1FFDF5946284607 -+:105AA000FFF7E9FA79E10CB1A88BA080287A0D28DC -+:105AB0007ED006DC01287CD0022808D0032804D13F -+:105AC00035E00F2876D0102875D0FFDF65E11E275E -+:105AD0000926002CB1D0A088FDF70CFB5FEA000975 -+:105AE00000D1FFDF287B00F003000128207A1BD0C3 -+:105AF00020F001002072297B890861F341002072A7 -+:105B0000297BC90861F382002072297B090961F3AE -+:105B1000C30001E036E1E9E0207299F81E0040F090 -+:105B2000800189F81E1038E140F00100E2E71327F8 -+:105B30000D26002CAAD0A088FDF7DCFA8146807FD4 -+:105B400000F00300012806D00021A0880AF086FF9B -+:105B5000050003D101E00121F7E7FFDF99F81E00FE -+:105B600000F00302012A59D0E86F817801F00301A7 -+:105B70000129217A54D021F00101217283789B08F8 -+:105B800063F3410121728378DB0863F382012172A0 -+:105B900083781B0963F3C3012172037863F3061151 -+:105BA0002172437863F3C711217284F809A003E0DE -+:105BB0005EE0A4E08BE09CE0C178A172012A32D0C3 -+:105BC0004279E17A62F30001E1724279520862F3AC -+:105BD0004101E1724279920862F38201E1724279F5 -+:105BE000D20862F3C301E1720279217B62F3000102 -+:105BF00021730279520862F34101217302799208FC -+:105C000062F3820121730079C00860F3C30121733C -+:105C100099F80000232859D9262168E0A86FA4E745 -+:105C200041F00101A9E70279E17A62F30001E17232 -+:105C30000279520862F34101E1720279920862F33B -+:105C40008201E1720279D20862F3C301E172427902 -+:105C5000217B62F3000121734279520862F3410112 -+:105C600021734279920862F3820121734079CBE774 -+:105C700018271026D4B3A088FDF73CFA8346807F0E -+:105C800000F00300012807D00021A0880AF0E6FEFA -+:105C90005FEA000903D101E00121F6E7FFDFE868D0 -+:105CA000A06099F8000040F0040189F8001099F80C -+:105CB0000100800708D5012020739BF800002328ED -+:105CC0006BD9272158464FE084F80CA065E01527D2 -+:105CD0000F265CB1A088FDF70DFA814606225946D1 -+:105CE000E86808F01FFA0120A0739BE03FE04846F7 -+:105CF0003AE016270926D4B3287B20724DE0287B92 -+:105D000019270E269CB3C4F808A0A4F80CA00128FB -+:105D100007D0022805D0032805D0042803D0FFDFD0 -+:105D20000DE0207207E0697B042801F00F0141F0CB -+:105D3000800121721CD0607A20F003006072A0887C -+:105D4000FDF7D8F905460078212826D0232800D071 -+:105D5000FFDFA87F00F00300012811D00021A088F8 -+:105D60000AF08EFE22212846FDF7FCF915E004E03A -+:105D7000607A20F00300401CE0E7A8F8006011E022 -+:105D80000121ECE70CB16888A080287A03282BD089 -+:105D900004280AD005284BD0FFDFA8F800600CB11A -+:105DA000278066800020BDE8F09F15270F26002C75 -+:105DB000E3D0A088FDF79EF9807F00F00300012862 -+:105DC00006D00021A0880AF049FE050003D101E0B9 -+:105DD0000121F7E7FFDFD5F821000622594608F038 -+:105DE000A1F984F80EA0D8E717270926002CC4D003 -+:105DF000A088FDF77FF98146807F00F0030001282D -+:105E000006D00021A0880AF029FE050003D101E098 -+:105E10000121F7E7FFDF6878800701D5022000E065 -+:105E20000120207299F800002328B6D927215EE7C7 -+:105E300019270E26002CA0D0A088FDF75BF95FEA99 -+:105E4000000900D1FFDFC4F808A0A4F80CA084F872 -+:105E500008A0A07A40F00300A07299F81F1061F327 -+:105E60008200A07299F81F10C1F34002114205D0C0 -+:105E700099F8201001F01F0110292CD020F0080003 -+:105E8000A07299F81F004108607A61F3C300607244 -+:105E9000697A01F003010129A5D140F00400607284 -+:105EA00099F81E00E97A00F00300012816D0607B03 -+:105EB00061F300006073AA7A217B62F30001217311 -+:105EC000EA7A520862F341006073A87A400860F3EE -+:105ED0004101217361E740F00800D1E7207B61F3C5 -+:105EE00000002073AA7A617B62F300016173EA7A91 -+:105EF000520862F341002073A87A400860F3410120 -+:105F000061734AE710B5FE4C30B10146102204F12E -+:105F100020001BF0F1FD012084F8300010BD10B509 -+:105F20000446FFF724F8F64920461022BDE8104049 -+:105F300020311BF0E1BD70B5F14D06004FF00004BB -+:105F400012D00EF08DF908B110240BE00621304676 -+:105F500008F0CFF8411C04D02866012085F85C00C9 -+:105F600000E00724204670BD0020F7E7007810F01D -+:105F70000F0204D0012A05D0022A0CD110E000093A -+:105F800009D10AE00009012807D0022805D003281A -+:105F900003D0042801D00720704708700020704704 -+:105FA0000620704705282AD2DFE800F003070F1704 -+:105FB0001F00087820F0FF001EE0087820F00F0096 -+:105FC000401C20F0F000103016E0087820F00F00A0 -+:105FD000401C20F0F00020300EE0087820F00F0088 -+:105FE000401C20F0F000303006E0087820F00F0070 -+:105FF000401C20F0F000403008700020704707205F -+:1060000070472DE9F041804688B00D4600270846CC -+:106010000EF073F9A8B94046FDF76CF8040003D000 -+:106020002078222815D104E043F2020008B0BDE830 -+:10603000F08145B9A07F010603D500F003000228D6 -+:1060400001D01020F2E7A07FC10601D4010702D5DC -+:106050000DB10820EAE7E17FC90601D50D20E5E78B -+:1060600000F00300022805D125B12846FEF7F2FE14 -+:106070000700DBD1A07F00F00300012806D000213B -+:1060800040460AF0EBFC060002D00DE00121F7E7E4 -+:10609000A07F00F0030001280CD000210022404620 -+:1060A0000AF0D3FC060007D0A07F00F0030002280E -+:1060B00004D009E00121F1E70420B7E725B12A4621 -+:1060C00031462046FEF7EAFE07AB1A4669463046DF -+:1060D000FFF700F8009800B9FFDF00990C20487026 -+:1060E00006F59A70C1F82480486100200881A07FDD -+:1060F00000F00300012828D0EDB302200871301D04 -+:1061000088613078400908777078C0F3400048779C -+:10611000287800F00102887F62F301008877E27F2F -+:1061200062F382008877E27F520862F3C3008877C7 -+:10613000727862F304108877A878C87701F1210299 -+:1061400028462031FEF7CAFE22E001200871287897 -+:1061500000F00102087E62F3010008762A785208F6 -+:1061600062F3820008762A78920862F3C300087608 -+:106170002A78D20800E007E062F3041008762421B0 -+:106180002046FCF7EFFF0BE003200871052008769E -+:1061900025212046FCF7E6FFA07F20F08000A077B5 -+:1061A00001A900980CF016F8022801D000B1FFDF19 -+:1061B00038463BE72DE9FF4F524A0D4699B09A46C3 -+:1061C00007CA14AB002783E807001998FCF792FF71 -+:1061D000060006D03078262806D008201DB0BDE87D -+:1061E000F08F43F20200F9E7B07F00F00309B9F144 -+:1061F000010F03D0B9F1020F07D008E03DB91B9899 -+:10620000FEF728FE0028E9D101E01B9880BBB07F93 -+:1062100000F00300012806D0002119980AF01EFCA6 -+:10622000040003D101E00121F7E7FFDF852D28D02D -+:1062300007DCF5B1812D1ED0822D1ED0832D08D113 -+:106240001DE0862D1FD0882D1FD0892D1FD08A2DAF -+:106250001FD00F2020710F281DD003F0A6F8E0B149 -+:1062600001208DF83400201D0E902079B8B160E136 -+:1062700011E00020EEE70120ECE70220EAE703202E -+:10628000E8E70520E6E70620E4E70820E2E7092042 -+:10629000E0E70A20DEE70720A0E711209EE7B9F13A -+:1062A000010F17D0D4E91E50804602200190012032 -+:1062B0000090A87898F80210C0F3C000C1F3C001A4 -+:1062C00008405FEA000B63D050460DF0C9FF00287C -+:1062D00072D133E0D4E91E850120019002200090A4 -+:1062E000214630461B9AFEF7D9FD1B98007800F036 -+:1062F0000101A87861F30100A870F17F04E00000BB -+:10630000180200202420020061F38200A870F17FAF -+:10631000490861F3C300A870617861F30410A870A4 -+:106320002078400928706078C0F3400068701B989E -+:106330008078E870002068712871BAE7DAF80C00FC -+:106340000DF08EFFC0BBDAF81C000DF089FF98BB82 -+:10635000DAF80C00A060DAF81C00E06098F80100A0 -+:10636000617800F0010041EA4000607098F8021086 -+:10637000C0B2C1F30011891E08406070002084F88B -+:106380002000009906F1170002290BD001210AE034 -+:1063900098F80110607801F00101FD2242EA410104 -+:1063A0000840E2E7002104EB810188610199701C3B -+:1063B000022902D0012101E028E0002104EB810143 -+:1063C0008861A87800F00300012849D198F80200FC -+:1063D00000F00300012843D1B9F1010F04D12A1DB7 -+:1063E000691D1B98FEF77AFD287998F8041008407B -+:1063F0008DF82C00697998F8052011408DF830103F -+:1064000008432DD050460DF02BFF08B11020E5E6D3 -+:106410000AF1100004F5DE7104F190020490B9F164 -+:10642000020F3CD00090CDE9012100210BAB5A4670 -+:106430002046FEF7B0FD0028E9D104F5E07104F133 -+:10644000A802B9F1010F30D004980090CDE90121E4 -+:1064500000210CAB5A462046FEF79DFD0028D6D100 -+:106460006078800740D4A87898F80210C0F38000C4 -+:10647000C1F38001084337D0297898F8000014AAA6 -+:10648000B9F1010F17D032F810204B00DA4012F0AA -+:10649000030718D0012F1ED0022F12D11DE0CDF816 -+:1064A00000A0CDE901210121C0E7CDF800A0CDE990 -+:1064B00001210121CDE732F811204300DA4002F03A -+:1064C0000307032F07D0BBF1000F0DD0012906D021 -+:1064D000042904D008E00227F5E70127F3E70128A3 -+:1064E00001D0042800D10427F07F40F001006BF3B5 -+:1064F0004100F077607881074FF003000CD5A07160 -+:10650000BBF1000F15D100BF8DF85C0017AA314612 -+:10651000199800F0C5FA0CE00221022F18D0012FC3 -+:1065200018D0042F22D00020A071F07F20F00100AD -+:10653000F07725213046FCF715FE0DA904F59A7079 -+:106540000BF02DFE10B1022800D0FFDF002045E641 -+:10655000A171D9E7A1710D2104F124001BF065FBA5 -+:10656000207840F0020020700420CDE70120A071C7 -+:10657000DFE72DE9F04387B09046894604460025C1 -+:10658000FCF7B8FD060006D03078272806D0082092 -+:1065900007B0BDE8F08343F20200F9E7B07F00F0F6 -+:1065A0000300012806D0002120460AF057FA040013 -+:1065B00003D101E00121F7E7FFDFA7795FEA0900D6 -+:1065C00005D0012821D0B9F1020F26D110E0B8F191 -+:1065D000000F22D1012F05D0022F05D0032F05D0A7 -+:1065E000FFDF2DE00C252BE0012529E0022527E027 -+:1065F00040460DF035FEB0B9032F0ED110224146B2 -+:1066000004F121001BF078FA1AE0012F02D0022FCA -+:1066100003D104E0B8F1000F12D00720B8E74046DC -+:106620000DF01EFE08B11020B2E7102104F1210088 -+:106630001BF0D9FA0621404607F05BFDC4F82100A3 -+:106640002078252140F0020020703046FCF78AFDBA -+:106650002078C10714D020F00100207002208DF8AE -+:10666000000004F1210002908DF80450694604F501 -+:106670009A700BF094FD022804D018B1FFDF01E0FE -+:1066800084F82050002083E730B587B00D460446DB -+:10669000FCF730FD88B1807F00F0030001280FD0A7 -+:1066A000002120460AF0DAF904000ED028460DF049 -+:1066B000D7FD38B1102007B030BD43F20200FAE731 -+:1066C0000121EEE72078400701D40820F3E72946AE -+:1066D00004F14100202205461BF00EFA207840F01C -+:1066E0001000207001070FD520F008002070132043 -+:1066F0008DF80000694604F59A7001950BF04FFD86 -+:10670000022801D000B1FFDF0020D4E770B50D46AC -+:106710000646FCF7EFFC18B1017827291FD102E0EB -+:1067200043F2020070BD807F00F00300012806D014 -+:10673000002130460AF092F9040003D101E0012162 -+:10674000F7E7FFDFA079022809D16078C00706D0FB -+:106750002A4621463046FEF7F0FC10B10FE0082033 -+:1067600070BDB4F864000E280BD204F16601022358 -+:106770001022081F09F0DFFF012101704570002081 -+:1067800070BD112070BD70B5064686B014460D462A -+:1067900008460DF065FD18B920460DF087FD10B1D3 -+:1067A000102006B070BDA6F57F40FF380ED03046F1 -+:1067B000FCF7A0FC38B1417822464B08811C1846F2 -+:1067C000FCF723FE07E043F20200EAE72046FDF76C -+:1067D00099FC0028E5D11021E01D0DF012FAE21D10 -+:1067E00029466846FEF791FC102204F11700019932 -+:1067F0001BF082F90020D4E72DE9F041044686B071 -+:1068000015468846002708460DF077FD18B928463A -+:106810000DF073FD10B1102006B008E42046FCF71F -+:1068200069FC060003D03078272818D102E043F233 -+:106830000200F1E7B07F00F00300012806D000213C -+:1068400020460AF00BF9040003D101E00121F7E72B -+:10685000FFDF2078400702D56078800701D4082048 -+:10686000DAE7B07F00F00300012818D0D4E91E0158 -+:10687000407800B1B5B1487810B1B8F1000F11D02F -+:10688000C5B1EA1D6846E168FEF73FFC102205F13C -+:10689000170001991BF004F930B104270AE0D4E98C -+:1068A0001E10E5E70720B7E71022E91D04F13100CB -+:1068B0001BF022F9B8F1000F06D0102208F10701F1 -+:1068C00004F121001BF018F92078252140F0020086 -+:1068D00020703046FCF746FC2078C10716D020F027 -+:1068E0000100207002208DF8000004F121000290C8 -+:1068F000103003908DF80470694604F59A700BF01F -+:106900004EFC022804D018B1FFDF01E084F82070AB -+:10691000002081E7F8B515460E460746FCF7EAFB6E -+:10692000040004D02078222804D00820F8BD43F2C7 -+:106930000200F8BDA07F00F00300022802D043F25D -+:106940000400F8BD30460DF08BFC18B928460DF058 -+:1069500087FC08B11020F8BD00953288B31C214691 -+:106960003846FEF70EFC112814D00028F3D1297CFC -+:106970004A08E17F62F30001E1772A7C62F341017A -+:10698000E177297C890884F82010A17F21F080011B -+:10699000A177F8BDA17F0907FBD4D6F80200C4F89F -+:1069A0003600D6F80600C4F83A003088A0861022D7 -+:1069B000294604F124001BF09FF8287C4108E07F61 -+:1069C00061F38200E077297C61F3C300E077287CE3 -+:1069D000800884F82100A07F40F00800A077002004 -+:1069E000D3E770B596B00D46064613B1072016B032 -+:1069F00070BDFCF77FFB040007D02078222802D36B -+:106A0000A07F400604D40820F1E743F20200EEE73D -+:106A1000C5B12D208DF80000ADF802601022294686 -+:106A200001A81BF069F8287C4108E07F61F30000B1 -+:106A3000E077297C61F34100E077287C800884F8C6 -+:106A4000200004E02E208DF80000ADF802600BA9B4 -+:106A5000684607F0FFFAA17F21F04001A177C6E761 -+:106A600070B50D46FCF746FB040005D028460DF036 -+:106A70001DFC20B1102070BD43F2020070BD2946FC -+:106A80002046FEF7F8FA002070BD04E010F8012B54 -+:106A90000AB100207047491E89B2F7D20120704721 -+:106AA00070B51546064602F080FC040000D1FFDFF9 -+:106AB000207820F00F00801C20F0F00020302070A3 -+:106AC00066802868A060BDE8704002F071BC0000DC -+:106AD00018B18178012938D101E010207047018870 -+:106AE00042F60112881A914231D018DC42F60102B6 -+:106AF000A1EB020091422AD00CDC41B3B1F5C05F9A -+:106B000025D06FF4C050081821D0A0F57060FF3870 -+:106B10001BD11CE001281AD002280AD117E0B0F5D9 -+:106B2000807F14D008DC012811D002280FD0032860 -+:106B30000DD0FF2809D10AE0B0F5817F07D0A0F57C -+:106B40008070033803D0012801D0002070470F2047 -+:106B500070470B2826D008DC1BD2DFE800F01C2091 -+:106B600025251A25292325271E0011281CD008DCDD -+:106B70000C2817D00D281DD00F2815D0102808D1AB -+:106B800010E0822809D0842810D0852810D08728CA -+:106B900012D003207047002070470520704743F251 -+:106BA00003007047072070470F207047042070478C -+:106BB000062070470C20704743F20200704738B53A -+:106BC0000C46050041D06946FFF7D0F9002819D1DD -+:106BD0009DF80010607861F3020060706946681CDF -+:106BE000FFF7C4F900280DD19DF80010607861F31B -+:106BF000C5006070A978C1F34101012903D00229C1 -+:106C000005D0072038BD217821F0200102E021784D -+:106C100041F020012170410704D0A978C90861F32F -+:106C200086106070607810F0380F07D0A9780909D5 -+:106C300061F3C710607010F0380F02D16078400621 -+:106C400003D5207840F040002070002038BD70B59A -+:106C500004460020088015466068FFF7B0FF002852 -+:106C600016D12089A189884211D860688078C00730 -+:106C70000AD0B1F5007F0AD840F20120B1FBF0F252 -+:106C800000FB1210288007E0B1F5FF7F01D90C202E -+:106C900070BD01F201212980002070BD10B504787B -+:106CA000137864F3000313700478640864F34103F9 -+:106CB00013700478A40864F3820313700478E40862 -+:106CC00064F3C30313700478240964F3041313708A -+:106CD0000478640964F3451313700078800960F345 -+:106CE0008613137031B10878C10701D1800701D52F -+:106CF000012000E0002060F3C713137010BD42783C -+:106D0000530702D002F0070306E012F0380F02D05A -+:106D1000C2F3C20300E001234A7863F302024A701F -+:106D2000407810F0380F02D0C0F3C20005E04307EE -+:106D300002D000F0070000E0012060F3C5024A70B5 -+:106D400070472DE9F04F95B00D00804615D0B8F191 -+:106D5000000F16D0122128461AF045FF4FF6FF7B90 -+:106D600005AA0121584606F0C0FF002426463746F2 -+:106D70004FF420596FF4205A75E0102015B0BDE88B -+:106D8000F08F0720FAE700BF9DF81E0001280AD106 -+:106D9000BDF81C0048450BD010EB0A000AD00128B2 -+:106DA0000CD002280CD0042C0ED0052C0FD10DE0F5 -+:106DB000012400E00224BDF81A6008E0032406E084 -+:106DC0000424BDF81A7002E0052400E00624BDF892 -+:106DD0001A10414547D12C74BEB34FF0000810AAD9 -+:106DE0004FF0070ACDE90282CDE900A80DF13C0978 -+:106DF0001023CDF8109042463146584607F028F847 -+:106E000008BBBDF83C002A46C0B210A90BF084FABA -+:106E1000C8B9AE81CFB1CDE900A80DF1080C0AAE1A -+:106E200040468CE84102132300223946584607F0B9 -+:106E30000FF840B9BDF83C00F11CC01EC0B22A1DBD -+:106E40000BF06AFA10B1032098E70AE0BDF82900B8 -+:106E5000E881062C05D19DF81E00A872BDF81C0023 -+:106E6000288100208AE705A806F04BFF00288BD078 -+:106E7000FFF76FFE82E72DE9F0471C46DDE9097850 -+:106E8000DDF8209015460E00824600D1FFDF0CB1E0 -+:106E9000208818B1D5B11120BDE8F087022D01D0AE -+:106EA000012100E0002106F1140005F003FEA8F81E -+:106EB000000002463B462946504603F0B8F8C9F8A0 -+:106EC000000008B9A41C3C600020E5E71320E3E7BC -+:106ED000F0B41446DDE904528DB1002314B1022C44 -+:106EE00009D101E0012306E00D7CEE0703D025F077 -+:106EF000010501230D742146F0BC03F02EBF1A805A -+:106F0000F0BC70472DE9FE4F91461A881C468A4610 -+:106F10008046FAB102AB494603F089F8050019D062 -+:106F20004046A61C278809F0B5FE324607262946AA -+:106F30003B46009609F074FA20882346CDE90050BC -+:106F40004A4651464046FFF7C3FF002020800120FB -+:106F5000BDE8FE8F0020FBE72DE9F04786B09146A3 -+:106F6000DDE90E460F46824603AA05A904A8109D36 -+:106F70008DE807009846324621465046FFF77BFFD2 -+:106F8000049909B1012200E000222A70002817D1DB -+:106F9000F84A03AB1060059A009104F11400CDE9A2 -+:106FA00001204A463946504606F048F990B1082873 -+:106FB0000ED2DFE800F00407040D0D090B0B0020D2 -+:106FC00006B069E71120FBE70720F9E70820F7E79B -+:106FD0000320F5E7BDF80C100498CDE90001434605 -+:106FE000324621465046FFF773FFE8E72DE9F043AC -+:106FF00089B00D46DDE9108781461C4616461421EE -+:1070000003A81AF012FE012002218DF810108DF84D -+:107010000C008DF81170ADF8146064B1A278D2073D -+:1070200009D08DF81600E088ADF81A00A088ADF8F8 -+:107030001800A068079008A80095CDE90110424605 -+:1070400003A948466B68FFF787FF09B0BDE8F083E6 -+:10705000F0B58BB0002406460694079407270894E1 -+:1070600005A80994019400970294CDE903400D46C8 -+:1070700010232246304606F0EBFE78B90AA806A98E -+:10708000019400970294CDE90310BDF8143000225A -+:107090002946304606F0B2FC002801D0FFF759FD22 -+:1070A0000BB0F0BD06F052BB2DE9FC410C4680460A -+:1070B000002602F07AF9054620780D287ED2DFE816 -+:1070C00000F0BC0713B325BD49496383AF959B000E -+:1070D000A848006820B1417841F010014170ADE04E -+:1070E000404602F092F9A9E00421404609F0B6FCBE -+:1070F000070000D1FFDF07F11401404605F06EFCE8 -+:10710000A5BB13214046FDF787FB97E004214046CD -+:1071100009F0A4FC070000D1FFDFE088ADF8000013 -+:107120000020B8819DF80000010704D5C00602D5F3 -+:10713000A088B88105E09DF8010040067ED5A088B2 -+:10714000F88105B9FFDF22462946404601F068FC78 -+:10715000022673E0E188ADF800109DF801100906E1 -+:107160000FD5072803D006280AD00AE024E004211E -+:10717000404609F073FC060000D1FFDFA088F081D3 -+:107180000226CDB9FFDF17E00421404609F066FC76 -+:10719000070000D1FFDF07F1140006F00EFB90F0AE -+:1071A000010F02D1E079000648D5387C022640F074 -+:1071B0000200387405B9FFDF224600E03DE02946B1 -+:1071C000404601F02DFC39E00421404609F046FC20 -+:1071D000017C002D01F00206C1F340016171017CC8 -+:1071E00021F002010174E7D1FFDFE5E7022601216A -+:1071F000404602F045F921E00421404609F02EFC0A -+:107200000546606800902089ADF8040001226946B7 -+:10721000404602F056F9287C20F0020028740DE068 -+:10722000002DC9D1FFDFC7E7022600214046FBF74A -+:10723000CDF8002DC0D1FFDFBEE7FFDF3046BDE84F -+:10724000FC813EB50C0009D001466B4601AA002026 -+:1072500006F080FE20B1FFF77CFC3EBD10203EBD55 -+:1072600000202080A0709DF8050002A900F0070012 -+:10727000FEF798FE50B99DF8080020709DF80500B3 -+:1072800002A9C0F3C200FEF78DFE08B103203EBD87 -+:107290009DF8080060709DF80500C109A07861F3B1 -+:1072A0000410A0709DF80510890961F3C300A07057 -+:1072B0009DF80410890601D5022100E0012161F347 -+:1072C00042009DF8001061F30000A07000203EBD58 -+:1072D00070B5144606460D4651EA040005D075B156 -+:1072E00008460DF001F878B901E0072070BD294685 -+:1072F000304606F090FE10B1BDE8704029E454B16C -+:1073000020460CF0F1FF08B1102070BD2146304638 -+:10731000BDE8704095E7002070BD2DE9FC5F0C468C -+:1073200090460546002701780822007A3E46B2EBD7 -+:10733000111F7DD104F10A0100910A31821E4FF024 -+:10734000020A04F1080B0191092A72D2DFE802F067 -+:10735000EDE005F528287BAACE006888042109F015 -+:107360007DFB060000D1FFDFB08928B15227072638 -+:10737000C3E000001403002051271026002C7DD00C -+:107380006888A0800120A071A88900220099FFF7D9 -+:107390009FFF002873D1A8892081288AE081D1E04D -+:1073A000B5F81290072824D1E87B000621D5512793 -+:1073B00009F1140086B2002CE1D0A88900220099BE -+:1073C000FFF786FF00285AD16888A08084F806A0BD -+:1073D000A88920810120A073288A2082A4F8129015 -+:1073E000A88A009068884B46A969019A01F0F5FACD -+:1073F000A8E0502709F1120086B2002C3ED0A889DF -+:1074000000225946FFF764FF002838D16888A08021 -+:10741000A889E080287A072813D002202073288AC0 -+:10742000E081E87BC0096073A4F81090A88A01E0AD -+:1074300085E082E0009068884B4604F11202A96959 -+:10744000D4E70120EAE7B5F81290512709F11400BA -+:1074500086B2002C66D06888042109F0FFFA8346C2 -+:107460006888A080A88900220099FFF731FF0028D2 -+:107470006ED184F806A0A889208101E052E067E07F -+:107480000420A073288A2082A4F81290A88A009071 -+:1074900068884B46A969019A01F09FFAA989ABF85F -+:1074A0000E104FE06888FBF725FE07466888042128 -+:1074B00009F0D4FA064607B9FFDF06B9FFDF687B9B -+:1074C000C00702D05127142601E0502712264CB3E2 -+:1074D0006888A080502F06D084F806A0287B5946E3 -+:1074E00001F08BFA2EE0287BA11DF9E7FE49A8895F -+:1074F0004989814205D1542706269CB16888A0801D -+:1075000020E053270BE06888A080A889E08019E07C -+:107510006888042109F0A2FA00B9FFDF5527082680 -+:10752000002CF0D1A8F8006011E056270726002CA7 -+:10753000F8D06888A080002013E0FFDF02E0012877 -+:1075400008D0FFDFA8F800600CB12780668000201B -+:10755000BDE8FC9F57270726002CE3D06888A08051 -+:10756000687AA071EEE7401D20F0030009B14143A5 -+:10757000091D01EB4000704713B5DB4A0020107174 -+:10758000009848B10024684609F06BF8002C02D13D -+:10759000D64A009911601CBD01240020F4E770B5A3 -+:1075A0000D46064686B014465C2128461AF03DFB7F -+:1075B00004B9FFDFA0786874A2782188284601F01A -+:1075C00046FA0020A881E881228805F1140130469E -+:1075D00005F0E9F96A460121304606F086FB19E01C -+:1075E0009DF80300000715D5BDF806103046FFF7DB -+:1075F0002FFD9DF80300BDF8061040F010008DF837 -+:107600000300BDF80300ADF81400FF233046059ACF -+:1076100006F0CCFC684606F074FB0028E0D006B00B -+:1076200070BD10B50C4601F1140005F0F3F90146E8 -+:10763000627C2046BDE8104001F03EBA70B50546B8 -+:10764000042109F00BFA040000D1FFDF04F114015A -+:107650000C46284605F0C2F921462846BDE8704090 -+:1076600005F0C3B970B58AB00C460646FBF742FD7B -+:10767000050014D02878222827D30CB1A08890B117 -+:1076800001208DF80C0003208DF8100000208DF8EB -+:10769000110054B1A088ADF81800206807E043F24B -+:1076A00002000AB070BD0920FBE7ADF81800059094 -+:1076B0000421304609F0D2F9040000D1FFDF04F1C3 -+:1076C000140005F0BEF9C00601D40820E9E701F076 -+:1076D0006CFE60B108A802210094CDE9011095F874 -+:1076E000232003A930466368FFF736FCD9E7112051 -+:1076F000D7E72DE9F04FB2F802A0834689B01546CE -+:1077000089465046FBF7F6FC07460421504609F02F -+:10771000A5F90026044605964FF002080696ADF836 -+:107720001C6007B9FFDF04B9FFDF4146504603F094 -+:107730007CFE60B907AA06A905A88DE807004246A5 -+:10774000214650466368FFF796FB00B1FFDF6648AD -+:1077500007AB0660DDE9051204F11400CDF80090D6 -+:10776000CDE90320CDE9013197F823205946504651 -+:107770006B6805F0AFF906000AD0022E04D0032E84 -+:1077800014D0042E00D0FFDF09B03046BDE8F08FE2 -+:10779000BDF81C000028F7D00599CDE9001042463D -+:1077A000214650466368FFF793FBEDE7687840F0A9 -+:1077B00008006870E8E72DE9F04F9BB004464FF0F1 -+:1077C00000084948ADF85480ADF83080ADF85080DD -+:1077D000A0F80880ADF81480ADF81880ADF82080CE -+:1077E000ADF81C80007916460D464746012808D0A2 -+:1077F000022806D0032804D0042802D008201BB099 -+:10780000C4E720460CF02CFDD0BB28460CF028FD28 -+:10781000B0BB60680CF071FD90BB606848B16089D6 -+:107820002189884202D8B1F5007F01D90C20E6E712 -+:1078300080460BAA06A92846FFF709FA0028DED1E0 -+:1078400068688078C0F34100022808D19DF81900CB -+:1078500010F0380F03D028690CF046FD80B905A957 -+:107860002069FFF7ACF90028C9D1206950B16078D0 -+:1078700080079DF8150000F0380002D5C0B301E084 -+:1078800011E0A8BB9DF8140080060ED59DF81500E8 -+:1078900010F0380F03D060680CF026FD18B960684E -+:1078A0000CF02BFD08B11020A9E707A96069FFF7CC -+:1078B00086F90028A3D1606940B19DF81D0000F051 -+:1078C000070101293FD110F0380F3CD008A9A06969 -+:1078D000FFF775F9002892D19DF81C00800632D47C -+:1078E0009DF82000800604E014030020140000200E -+:1078F00029E028D4A06940B19DF8210000F00701DB -+:10790000012920D110F0380F1DD0E06818B100789F -+:10791000C8B11C2817D20EAA611C2046FFF7BEF979 -+:107920000120B94660F30F27BA4607468DF84E008E -+:1079300042F60300ADF84C000DF13B0217A9286890 -+:107940000AF009FD08B1072059E79DF85C0016A967 -+:10795000CDF80090C01CCDE9019100F0FF0B002391 -+:107960000BF20122514613A806F002F9F0BBBDF854 -+:1079700058000990FE482A8929690092CDE9011032 -+:107980006B89BDF82C202868069906F0F1F80100F3 -+:107990007ED120784FF0020AC10601D480062BD593 -+:1079A000ADF80C90606950B907A906A8FFF7A7F9D0 -+:1079B0009DF81D0020F00700401C8DF81D009DF86B -+:1079C0001C008DF84E7040F0C8008DF81C0042F687 -+:1079D0000210ADF84C000CA903AACDF800A0CDE927 -+:1079E0000121002340F2032213A800E01EE00799C2 -+:1079F00006F0BEF801004BD1DD484D4608385B4625 -+:107A00000089ADF839000EA8CDE90290CDF80490B8 -+:107A1000CDF810904FF007090022CDF80090BDF886 -+:107A200058104FF6FF7005F0E9FF10B1FFF791F81D -+:107A3000E5E69DF83800000625D52946012060F3CB -+:107A40000F218DF84E704FF42450ADF84C00ADF876 -+:107A5000105062789DF81000002362F300008DF84A -+:107A600010006278CDF800A0520862F341008DF852 -+:107A7000100004AACDE9012540F2032213A806F064 -+:107A800077F8010004D1606888B32069A8B900E0E4 -+:107A900086E005A906A8FFF732F96078800706D4CA -+:107AA0009DF8150020F038008DF8150005E09DF8D0 -+:107AB000140040F040008DF814008DF84E7042F62E -+:107AC0000110ADF84C00208940F20121B0FBF1F229 -+:107AD00001FB1202606814ABCDF80080CDE9010310 -+:107AE000002313A8059906F043F8010058D1207827 -+:107AF000C00729D0ADF80C50A06950B908A906A854 -+:107B0000FFF7FDF89DF8210020F00700401C8DF8DC -+:107B100021009DF820008DF84E7040F040008DF857 -+:107B2000200042F60310ADF84C0015A903AACDF8C9 -+:107B300000A0CDE90121002340F2032213A80899F7 -+:107B400006F016F801002BD1E06868B32946012041 -+:107B500060F30F218DF84E7042F60410ADF84C0022 -+:107B6000E068002302788DF8602040788DF861008D -+:107B7000E06818AA4088ADF86200E06800798DF8E6 -+:107B80006400E068C088ADF86500CDF80090CDE9EC -+:107B900001254FF4027213A805F0EAFF010003D09B -+:107BA000099800F0B5FF2AE67148032108380171F1 -+:107BB00056B100893080BDF850007080BDF83000AB -+:107BC000B080BDF85400F080002018E670B50125A3 -+:107BD0008AB016460B46012802D0022816D104E0CE -+:107BE0008DF80E504FF4205003E08DF80E5042F601 -+:107BF0000100ADF80C005BB10024601C60F30F24A1 -+:107C000004AA08A918460AF0A6FB18B1072048E5FF -+:107C1000102046E504A99DF820205548CDE9002113 -+:107C2000801E02900023214603A802F2012205F0E3 -+:107C30009FFF10B1FEF78DFF33E54D4808380EB1B8 -+:107C4000C1883180057100202BE5F0B593B007465F -+:107C500001268DF83E6041F60100ADF83C0012AA05 -+:107C60000FA93046FFF7B2FF002848D1404C00254D -+:107C7000083CE7B31C2102A819F0D7FF9DF80800C3 -+:107C80008DF83E6040F020008DF8080042F6052097 -+:107C9000ADF83C000E959DF83A00119520F00600D5 -+:107CA000801C8DF83A009DF838006A4620F0FF00ED -+:107CB0008DF838009DF8390009A920F0FF008DF8F3 -+:107CC00039000420ADF82C00ADF830000EA80A9061 -+:107CD00011A80D900FA80990ADF82E5002A8FFF73B -+:107CE0006AFD00280BD1BDF80000608100E008E0CB -+:107CF000BDF80400A081401CE0812571002013B074 -+:107D0000F0BD6581A581BDF84800F4E72DE9F74F86 -+:107D10001749A0B00024083917940A79A146012A0E -+:107D200004D0022A02D0082023B02FE5CA8882425C -+:107D300001D00620F8E721988A46824201D1072027 -+:107D4000F2E701202146ADF848004FF6FF7860F3D6 -+:107D50000F21ADF84A808DF86E0042F6020B0691B5 -+:107D60008DF87240ADF86CB0ADF870401CA901E020 -+:107D70001C0300201391ADF8508012A805F0E5FF18 -+:107D800000252E462F460DAB072212A9404605F0CE -+:107D9000DFFF78B182285DD195B38EB3ADF8645022 -+:107DA000ADF866609DF85E008DF8144019AC0128AE -+:107DB00064D06BE09DF83A001FB3012859D1BDF89B -+:107DC000381059451FD118A809A901940294CDE98A -+:107DD000031007200090BDF8361010230022404603 -+:107DE00006F036F8B0BBBDF86000042801D00628C4 -+:107DF0004AD1BDF82410219881423AD10F2093E74F -+:107E00003AE0012835D1BDF83800B0F5205F03D045 -+:107E100042F6010188422CD1BAF80600BDF83610AE -+:107E2000884201D1012700E0002705B19EB12198C9 -+:107E300081421ED118A809AA01940294CDE9032019 -+:107E4000072000900D4610230022404606F000F85F -+:107E500000B902E02DE04E460BE0BDF860000228BC -+:107E600001D0102810D1C0B217AA09A90AF054FAFB -+:107E700050B9BDF8369086E7052055E705A917A843 -+:107E8000221D0AF068FA08B103204DE79DF814009E -+:107E90000023001DC2B28DF8142022980092CDE973 -+:107EA00001401BA8069905F063FE10B902228AF86A -+:107EB0000420FEF74EFE37E710B50B46401E88B093 -+:107EC00084B205AA00211846FEF7E8FE00200DF155 -+:107ED000080C06AA05A901908CE80700072000906D -+:107EE0000123002221464FF6FF7005F087FD04466E -+:107EF000BDF81800012800D0FFDF2046FEF729FE5C -+:107F000008B010BDF0B5F94F044687B038790E4679 -+:107F1000032804D0042802D0082007B0F0BD04AA2A -+:107F200003A92046FEF793FE0500F6D1606880782D -+:107F3000C0F3410002280AD19DF80D0010F0380F5F -+:107F400005D020690CF0D0F908B11020E5E72089B0 -+:107F500005AA21698DE807006389BDF81020206813 -+:107F6000039905F005FE10B1FEF7F3FDD5E716B154 -+:107F7000BDF814003080042038712846CDE7F8B5EC -+:107F80000C0006460BD001464FF6FF7500236A46EB -+:107F9000284605F0DFFF20B1FEF7DBFDF8BD10201D -+:107FA000F8BD69462046FEF70AFE0028F8D1A07801 -+:107FB000314600F001032846009A05F0F7FFEBE791 -+:107FC00030B587B0144600220DF1080C05AD0192C2 -+:107FD0008CE82C00072200920A46014623884FF6BF -+:107FE000FF7005F00BFDBDF814102180FEF7B1FD08 -+:107FF00007B030BD70B50D46042108F02FFD040018 -+:1080000000D1FFDF294604F11400BDE8704004F000 -+:1080100011BD70B50D46042108F020FD040000D10B -+:10802000FFDF294604F11400BDE8704004F025BDCF -+:1080300070B50D46042108F011FD040000D1FFDFEA -+:10804000294604F11400BDE8704004F03DBD70B550 -+:108050000546042108F002FD040000D1FFDF21469F -+:1080600028462368BDE870400122FEF74BBF70B57B -+:108070000646042108F0F2FC040000D1FFDF04F101 -+:10808000140004F0C7FC401D20F0030511E0011DA1 -+:1080900000880022431821463046FEF733FF0028AF -+:1080A0000BD0607CABB2684382B2A068011D08F0BF -+:1080B00078FBA06841880029E9D170BD70B50546FC -+:1080C000042108F0CBFC040000D1FFDF2146284644 -+:1080D0006368BDE870400222FEF714BF70B50E461B -+:1080E000054601F062F9040000D1FFDF0120207293 -+:1080F00066726580207820F00F00001D20F0F000EF -+:1081000040302070BDE8704001F052B910B504460F -+:10811000012900D0FFDF2046BDE810400121FAF719 -+:1081200055B92DE9F04F97B04FF0000A0C00834687 -+:10813000ADF818A0D04619D0E06830B1A068A8B159 -+:108140000188ADF81810A0F800A05846FAF7D2FF41 -+:10815000070043F2020967D03878222862D304214D -+:10816000584608F07BFC050005D103E0102017B04D -+:10817000BDE8F08FFFDF05F1140004F04BFC401D5B -+:1081800020F00306A078012803D0022801D00720A0 -+:10819000EDE7208878B1401C81B209AA584605F065 -+:1081A000A4FD09A805F0ADFD9DF82E204FF4505117 -+:1081B000012A0DD102E043F20300D8E7BDF82C20DC -+:1081C000A2F52453023B03D1822801D0A0B901E0DB -+:1081D0000846CCE7E068B0B1CDE902A0072006AAC6 -+:1081E000CDF804A000900492A2882188BDF8183030 -+:1081F000584605F003FC10B1FEF7ABFCB7E7A168E9 -+:10820000BDF8180008809DF82700C00602D543F28B -+:108210000140ACE70D9838B1A1780078012905D06C -+:1082200080071AD40820A2E74846A0E7C007F9D083 -+:1082300002208DF83C00A8684FF00009A0B1697CCD -+:108240004288714391420FD98AB2B3B2011D08F03E -+:108250005EFA8046A0F800A006E003208DF83C00FE -+:10826000D5F800804FF001099DF8280010F0380F74 -+:1082700000D1FFDF9DF828001D49C0F3C20008446B -+:1082800097F8231010F8010C884201D90F206EE7EF -+:108290002088ADF8400014A90095CDE9019143462E -+:1082A00007220FA95846FEF757FE002885D19DF8F2 -+:1082B000500050B9A078012807D1687CB3B2704350 -+:1082C00082B2A868011D08F036FA00204FE770B5A9 -+:1082D000064615460C460846FEF7FAFB002809D16B -+:1082E0002A4621463046BDE870406FE41403002062 -+:1082F0002E20020070BD09E570B51E4614460D0023 -+:1083000009D044B1616831B138B1F849C9888142B6 -+:1083100003D0072070BD102070BD2068FEF7D8FB89 -+:108320000028F9D1324621462846BDE87040FFF7C3 -+:1083300042BA70B515460C0006D038B1EB49098930 -+:10834000814203D0072070BD102070BD2068FEF769 -+:10835000BFFB0028F9D129462046BDE87040D1E591 -+:1083600070B5064686B00D46144610460BF09EFFCB -+:10837000D0BB60680BF0C1FFB0BBA6F57F40FF38F3 -+:1083800003D03046FAF7B6FE80B128466946FEF7BC -+:10839000D8FC00280CD19DF810100F2008293CD2E1 -+:1083A000DFE801F008060606060A0A0843F20200A2 -+:1083B00006B070BD0320FBE79DF80210012908D12B -+:1083C000BDF80010B1F5C05FF2D06FF4C052D142D9 -+:1083D000EED09DF8061001290DD1BDF80410A1F5CD -+:1083E0002851062907D200E028E0DFE801F0030366 -+:1083F00004030303DCE79DF80A1001290ED1BDF840 -+:108400000810B1F5245FD3D0A1F524510239CFD0A3 -+:108410000129CDD0022901D1CAE7FFDF606878B910 -+:10842000002305AA2946304605F094FD10B1FEF759 -+:1084300090FBBDE79DF81400800601D41020B7E73B -+:108440006188224628466368FFF7BAFDB0E72DE948 -+:10845000F043814687B08846144610460BF026FF4D -+:1084600018B1102007B0BDE8F083002306AA4146EA -+:10847000484605F06FFD10B1FEF76BFBF2E79DF883 -+:108480001800C00602D543F20140EBE7002507279C -+:1084900005A8019500970295CDE9035062884FF633 -+:1084A000FF734146484605F0D3FC060013D16068CF -+:1084B0000BF0FCFE60B960680195CDE902500097B1 -+:1084C0000495238862884146484605F0C1FC06466B -+:1084D000BDF8140020803046CEE739B1834B0A88BE -+:1084E0009B899A4202D843F20300704719E610B5FF -+:1084F00086B07E4C0423ADF81430638943B1A4895F -+:108500008C4201D2914205D943F2030006B010BD5E -+:108510000620FBE7ADF81010002100910191ADF8A5 -+:10852000003002218DF8021005A9029104A90391DF -+:10853000ADF812206946FFF7F4FDE7E72DE9FC47A7 -+:1085400081460E4608460BF08BFE88BB4846FAF77C -+:10855000D1FD5FEA00080AD098F80000222829D34C -+:108560000421484608F07AFA070005D103E043F2F7 -+:108570000200BDE8FC87FFDF07F1140004F061FA98 -+:1085800005463078012803D0022804D00720F0E700 -+:10859000A8070FD502E015F0340F0BD0B079341DC9 -+:1085A000C00709D0E08838B1A0680BF059FE18B1B7 -+:1085B0001020DEE70820DCE732782088002628B388 -+:1085C000A0F201130721112B18D20CD2DFE803F01F -+:1085D0000B090D0B1D0B121D100B0B1D1D1D1D0B73 -+:1085E0001D00022A11D10846C3E7012AFBD00CE086 -+:1085F000EA0600E0AA06002AF5DA06E0A0F5C07255 -+:108600001F2A02D97D3A022AEDD8C6B200F0CDFE6B -+:1086100050B198F82300CDE90006FA89234639467F -+:108620004846FEF7E3FCA4E71120A2E72DE9F04F4E -+:108630008BB01F4615460C4683460026FAF75AFDB6 -+:1086400028B10078222805D208200BB090E543F22B -+:108650000200FAE7B80801D00720F6E7032F00D19F -+:1086600000274FF6FF79CCB1022D72D320460BF0D4 -+:1086700044FE30B904EB0508A8F101000BF03DFE03 -+:1086800008B11020E1E7AD1EAAB22146484605F028 -+:108690005AFD38F8021C88425BD1ADB21349B807C5 -+:1086A00002D58889401C00E001201FFA80F8F807F5 -+:1086B00001D08F8900E04F4605AA4146584605F093 -+:1086C00014FB4FF0070A4FF00009D4B3204608E02E -+:1086D000408810283DD8361D304486B2AE4238D28C -+:1086E000A01902884245F3D353E000001403002090 -+:1086F0009DF8170002074CD594B304EB0608361D0D -+:10870000B8F80230B6B2102B23D89A19AA4220D852 -+:10871000B8F8002091421CD1C0061CD5CDE900A9B3 -+:108720000DF1080C0AAAA11948468CE80700B8F810 -+:1087300000100022584605F061F920B1FEF709FA51 -+:1087400083E726E005E0B8F80200BDF8281088426B -+:1087500001D00B2079E7B8F80200304486B207E078 -+:10876000FFE7C00604D55846FEF772FC002889D101 -+:108770009DF81700BDF81A1020F010008DF81700B2 -+:10878000BDF81700ADF80000FF235846009A05F029 -+:108790000DFC05A805F0B5FA18B9BDF81A10B942D4 -+:1087A000A6D90421584608F059F9040000D1FFDF8A -+:1087B000A2895AB1CDE900A94D4600232146584669 -+:1087C000FEF714FC0028BBD1A5813EE700203CE762 -+:1087D0002DE9FF4F8BB01E4617000D464FF00004E9 -+:1087E00012D0B00802D007200FB0C1E4032E00D190 -+:1087F00000265DB108460BF077FD28B93888691E60 -+:1088000008440BF071FD08B11020EDE7C64AB0072F -+:1088100001D5D18900E00121F0074FF6FF7802D0A1 -+:10882000D089401E00E0404686B206AA0B9805F0AB -+:108830005CFA4FF000094FF0070B0DF1140A38E015 -+:108840009DF81B00000734D5CDF80490CDF800B09A -+:10885000CDF80890CDE9039A434600220B9805F025 -+:10886000F7FA60BB05B3BDF814103A882144281903 -+:10887000091D8A4230D3BDF81E2020F8022BBDF816 -+:10888000142020F8022BCDE900B9CDE90290CDF8F3 -+:1088900010A0BDF81E10BDF8143000220B9805F092 -+:1088A000D7FA08B103209FE7BDF814002044001D4B -+:1088B00084B206A805F025FA20B1822806D0FEF77A -+:1088C00048F991E7BDF81E10B142B9D934B17DB174 -+:1088D0003888A11C884203D20C2085E7052083E755 -+:1088E00022462946404605F02EFC01462819018003 -+:1088F000A41C3C80002077E710B504460BF0D6FCA2 -+:1089000008B1102010BD8848C0892080002010BD0B -+:10891000F0B58BB00D460646142103A819F085F971 -+:1089200001208DF80C008DF8100000208DF811004A -+:10893000ADF814503046FAF7DDFB48B10078222834 -+:1089400012D30421304608F089F8040005D103E071 -+:1089500043F202000BB0F0BDFFDF04F11400074644 -+:1089600004F06FF8400601D40820F3E7207C0221D0 -+:1089700040F00100207409A80094CDE901100722FD -+:1089800003A930466368FEF7E7FA20B1217C21F0A5 -+:1089900001012174DEE729463046F9F708FD08A9F0 -+:1089A000384604F03DF800B1FFDFBDF82040172C39 -+:1089B00001D2172000E02046A84201D92C4602E04F -+:1089C000172C00D2172421463046FFF722FB214600 -+:1089D0003046F9F708FA0020BCE7F8B51C46154602 -+:1089E0000E46069F08F044F92346FF1DBCB23146EF -+:1089F0002A46009407F0DBFCF8BD70B50C4605462E -+:108A00000E21204619F0EFF8002020802DB1012D15 -+:108A100001D0FFDF70BD062000E00520A07170BD11 -+:108A200010B548800878134620F00F00001D20F094 -+:108A3000F00080300C4608701422194604F108003A -+:108A400019F09FF800F0B4FC3748046010BD2DE920 -+:108A5000F047DFF8D890491D064621F0030117467C -+:108A60000C46D9F8000007F01AFE050000D1FFDF20 -+:108A70004FF000083560A5F800802146D9F80000C5 -+:108A800007F00DFE050000D1FFDF7560A5F800803E -+:108A90007FB104FB07F1091D0BD0D9F8000007F0E6 -+:108AA000FEFD040000D1FFDFB460C4F80080BDE823 -+:108AB000F087C6F80880FAE72DE9F0411746491D0E -+:108AC00021F00302194D064601681446286807F094 -+:108AD00011FE22467168286807F00CFE3FB104FBC6 -+:108AE00007F2121D03D0B168286807F003FE0420C6 -+:108AF00007F05EFF0446042007F062FF201A0128F9 -+:108B000004D12868BDE8F04107F0BEBDBDE8F081A2 -+:108B100010B50C4605F0B5F800B1FFDF2046BDE802 -+:108B20001040FEF716B800001403002014000020C7 -+:108B300010B50C460246817B808819B1518981426B -+:108B400000D908462080D18800F0C5FF032800D353 -+:108B50000320C1B22088BDE8104000F0B1BF10B5BD -+:108B60000C460246817B808819B11189814200D967 -+:108B700008462080D18800F0AEFF022800D30220F2 -+:108B8000C1B2208800F09CFF401CC0B210BD2DE98E -+:108B9000F04F0C00F84999B08146D1E90201CDE9C6 -+:108BA0000C0109F10300F54E20F003010091357E20 -+:108BB00005F1010504D1E8B209F054FB00B1FFDF73 -+:108BC00000984FF0000B00EB0510C01C20F00301D3 -+:108BD00000915CB9707A327A81F800B01044C2B268 -+:108BE000B08B80B204F0D5FE00B1FFDF0098F169D0 -+:108BF000084400902146684600F02CFF0098C01CF5 -+:108C000020F003000090737A327AB17A04B1002028 -+:108C100007F016FE0099084400902146684600F0CF -+:108C20006EFF00273D46B24696F801800CE02846CC -+:108C300000F0F3FE064681788088F9F76EF97178C6 -+:108C40006D1C00FB0177EDB24545F0D10098C01CCA -+:108C500020F00300009004B100203946F9F768F9CC -+:108C600000990027084400903D469AF801800CE0E6 -+:108C7000284600F0D2FE0646C1788088FEF773FCD5 -+:108C800071786D1C00FB0177EDB24545F0D100987D -+:108C9000C01C20F00300009004B100203946FEF70C -+:108CA0006BFC00994FF000080844009045469AF884 -+:108CB00001700EE0284600F0B0FE0646807B30B121 -+:108CC00006F1080001F0F9FE727800FB02886D1CC5 -+:108CD000EDB2BD42EED10098C01C20F00300009020 -+:108CE00004B10020414601F0ECFE00990844C01D8B -+:108CF00020F007000090E4BBA24AA1491160111DB9 -+:108D0000401E086001222C219F4807F062FCFAF700 -+:108D10002EF99E484178806805F09CFB42208DF832 -+:108D200004009A480C30C0788DF8060010B1012874 -+:108D300004D005E001208DF8060001E08DF806B0B2 -+:108D400001A806F0C5FE10B10EA805F042FC0021F6 -+:108D50001E22084603F03CF8FBF778F987480CAA76 -+:108D600000210C30F8F706FB00B1FFDF9AF819007C -+:108D700000E015E0FEF769FF00B1FFDF7F484FF428 -+:108D8000F671443018F051FF7C480421443080F8DB -+:108D9000E91180F8EA11062180F8EB110321017135 -+:108DA000009919B0A1EB0900BDE8F08F70B5734CC4 -+:108DB00006464434207804EB4015E078083590B935 -+:108DC000A01990F8E80100280ED0A0780F2800D351 -+:108DD000FFDF2021284618F028FF687866F302009C -+:108DE00068700120E070284670BD2DE9F04105460D -+:108DF0000C4600270078052190463E46B1EB101F37 -+:108E000000D0FFDF287A58B101280FD0FFDF00BF64 -+:108E1000A8F800600CB1278066800020BDE8F081D2 -+:108E20000127092674B16888A08008E0022714266B -+:108E300044B16888A0802869E060A88A2082287BE5 -+:108E40002072E5E7A8F80060E7E710B54F4C6068CE -+:108E5000C11D21F00701814200D0FFDF47480121F9 -+:108E60000022017042700172032343728172027307 -+:108E7000052282821F22C282417345A202610A2218 -+:108E8000027641764FF4B061C1616168416010BD06 -+:108E900030B53E4C1568636810339D4202D2042001 -+:108EA000136030BD354B5D785A6802EB05121070C7 -+:108EB00051700320D080172090800120D0709070D6 -+:108EC000002090735878401C5870606810306060C3 -+:108ED000002030BD70B5064628480024457807E0DC -+:108EE000204600F09AFD0178B14204D0641CE4B23F -+:108EF000AC42F5D1002070BDF7B5064608780C46A7 -+:108F000008B3FFF7E7FF0546202E08D0232E17D021 -+:108F1000212E41D0222E3FD0242E2BD114E000F060 -+:108F200087FD0DB1697800E00021401A81B2A07878 -+:108F30000144FF291ED830B1A08802282CD219E0A4 -+:108F40006088172828D215E0227A2AB36188172969 -+:108F500010D3A08817280DD3A3795BB1E3794BB167 -+:108F6000402A07D84FF6FB72914201D8904213D99C -+:108F70000420FEBD0720FEBD342002003004002086 -+:108F80000000002000060240600600201C000020B7 -+:108F90006E5246357800000065B9207802AA01219A -+:108FA000FFF776FF0028E6D12078FFF793FF050052 -+:108FB00000D1FFDF203E052E18D2DFE806F0030BBC -+:108FC0000E081100A0786870A088E8800FE0608823 -+:108FD000A8800CE0A078A87009E0A078E87006E00E -+:108FE00054F8020FA8606068E86000E0FFDF00202E -+:108FF000C1E700B597B053218DF8001000780BA998 -+:1090000000F001008DF80200684605F023F817B063 -+:1090100000BD00B5017897B001F001018DF8021094 -+:10902000417801F001018DF803100178C1F340018E -+:109030008DF804104178C1F340018DF805100178D6 -+:1090400089088DF80610417889088DF80710817815 -+:109050008DF80810C1788DF8091000798DF80A0094 -+:109060004D208DF800000BA9684604F0F3FFCEE711 -+:109070002DE9F04FDFF8F883FE4C97B000271BE096 -+:10908000012000F07FFD0120FFF790FE0546FA4821 -+:1090900007F0C8FA686000B9FFDF686805F027F8D4 -+:1090A000A0B12846FAF7CEFA284600F071FD18B9AB -+:1090B000F148696807F0BFFA94F9E9010428DFDA9A -+:1090C000022007F075FC06460025AAE0EA48696818 -+:1090D00007F0B1FAF4E7B8F802104046491C89B22B -+:1090E000A8F80210B14201D3002141800221B8F852 -+:1090F000020007F0B3FC00286BD0B8F8020054213E -+:109100008DF80010ADF802000BA9684604F0A2FF2C -+:1091100000B1FFDF9DF8300010F0010F0FD0B8F85C -+:10912000020007F0B7FD5FEA000900D1FFDF484603 -+:1091300006F0A3FF18B1B8F8020002F065F9B8F81C -+:10914000020007F095FD5FEA000900D1FFDF484605 -+:1091500006F08CFFE8BB0321B8F8020007F07EFCA4 -+:109160005FEA000B48D1FFDF46E000BFDBF81000EC -+:1091700010B10078FF2849D0022000F003FD022042 -+:10918000FFF714FE8246484607F0A2F8CAF804002A -+:1091900000B9FFDFDAF8040007F07CF90021009045 -+:1091A0000170B8F802105046AAF8021001F032FE21 -+:1091B000484607F071F900B9FFDF504600F0E8FCBF -+:1091C00018B99AF80100000704D50098CBF81000F0 -+:1091D00012E024E0DBF8100038B10178491C11F0EE -+:1091E000FF01017008D1FFDF06E00022114648466A -+:1091F00000F011FC00B9FFDF94F9EA01022805DB59 -+:10920000B8F8020001F0CAFD0028AFD194F9E901D5 -+:10921000042804DB484607F0B5F900B101276D1CAE -+:10922000EDB2B54204D294F9EA010228BFF653AF79 -+:10923000002F7FF423AF17B00320BDE8F04F00F0FC -+:10924000A1BC10B58A4CA0600868E060AFF2DF10E6 -+:1092500002F031FD607010BD864800214438017075 -+:109260008348017085494160704730B505464FF02D -+:1092700080500C46D0F8A41097B0491C05D1D0F806 -+:10928000A810C9430904090C08D050F8A01F01F028 -+:10929000010129704168216080680EE02B208DF863 -+:1092A00000000BA9684604F0D5FE00B1FFDF0120E5 -+:1092B00028700C982060BDF83400A0802878002821 -+:1092C00003D0607940F0C000607117B030BDF0B5D8 -+:1092D0004FF080540746D4F8800097B00D462B26F7 -+:1092E000401C0BD1D4F88400401C07D1D4F888006E -+:1092F000401C03D1D4F88C00401C0BD0D4F8800063 -+:109300003860D4F884007860D4F88800B860D4F865 -+:109310008C0016E08DF82C6069460BA804F09AFECC -+:1093200000B1FFDF01983860029878608DF82C60FA -+:1093300069460BA804F08EFE00B1FFDF0198B8600B -+:109340000298F860D4F89000401C0BD1D4F8940037 -+:10935000401C07D1D4F89800401C03D1D4F89C00DD -+:10936000401C08D054F8900F286060686860A068BE -+:10937000A860E06816E08DF800600BA9684604F06C -+:1093800069FE00B1FFDF0C9828600D9868608DF8C9 -+:1093900000600BA9684604F05DFE00B1FFDF0C9889 -+:1093A000A8600D98E86017B0F0BD32480079FDE480 -+:1093B00070B5304CE07830B3207804EB4010407A40 -+:1093C00000F00700204490F9E801002800DCFFDFEE -+:1093D0002078002504EB4010407A00F007000119C6 -+:1093E00091F8E801401E81F8E8012078401CC0B2E5 -+:1093F00020700F2800D12570A078401CA0700AF0C2 -+:109400001BFBE57070BDFFDF70BD3EB50546032157 -+:1094100007F024FB0446284607F02AFC054604B959 -+:10942000FFDF206918B10078FF2800D1FFDF01AA13 -+:109430006946284600F0EFFA60B9FFDF0AE0002233 -+:1094400002A9284600F0E7FA00B9FFDF9DF80800FE -+:1094500000B1FFDF9DF80000411E8DF80010EED234 -+:1094600020690199884201D1002020613EBD0000A1 -+:109470001C000020740400206006002068130020F7 -+:1094800070B50546A0F57F400C46FF3800D1FFDFE0 -+:10949000012C01D0FFDF70BDFFF787FF040000D172 -+:1094A000FFDF207820F00F00401D20F0F00050304A -+:1094B000207065800020207201202073BDE870407C -+:1094C00076E72DE9F04116460D460746FFF76DFF9A -+:1094D000040000D1FFDF207820F00F00401D20F0B5 -+:1094E000F0005030207067800120207228682061D1 -+:1094F000A888A0822673BDE8F04159E730B599B03D -+:10950000FFF7E8FC040000D1FFDF0CA92046FFF7BD -+:109510000FFB05460BA92046FFF721FB0146522011 -+:109520008DF80000BDF830008DF80250001DADF838 -+:109530000400BDF82C008DF80310001DADF80600E6 -+:10954000E088ADF808000DA9684604F083FD002806 -+:1095500000D0FFDF19B030BD2DE9F047DFF80094EF -+:109560000546002799F8000010B10820BDE8F087F3 -+:1095700028460AF09BFE08B11020F7E7F94C207846 -+:1095800008B9FFF762FC607A217A0844C6B200F09D -+:109590004FFAB04207D2301AC1B22A460020FFF774 -+:1095A00077FC0700E2D1D9F804004E46C01C20F039 -+:1095B0000300C9F8040000F05EFB716800EB0108CD -+:1095C00001214046FFF7E3FA0646296840448842F5 -+:1095D00002D8B6F5803F15D328600020FFF77AFC4B -+:1095E00005000DD005F11300D9F8041020F0030098 -+:1095F0004E46884200D0FFDF6078401E6070756084 -+:109600000420B3E700214046FFF7C1FA0446A64212 -+:1096100000D0FFDF04EB0801C9F8041029604FF601 -+:10962000FF71A9F80210012189F8001038469DE762 -+:109630002DE9F0410446CA4817460D46007810B19E -+:109640000820BDE8F08108460AF00AFE08B11020A3 -+:10965000F7E7C44E307808B9FFF7F7FB601E1E2805 -+:1096600007D8012C3FD12878FE283CD8307600203E -+:10967000E7E7A4F120001F2805D8E0B23A462946C2 -+:10968000BDE8F04138E4A4F140004FF000081F2885 -+:1096900021D8402C02D0412C25D117E068782978B8 -+:1096A0004418A97881421ED8FF2C08D808F0BEFFC4 -+:1096B00007460AF07BF9381A801EA04201DA122010 -+:1096C000BFE728883081A878B07224E02846BDE83A -+:1096D000F04100F085BAA4F1A0001F2803D8A02C07 -+:1096E00003D0A12C06D00720ABE7287800F00100BA -+:1096F000707610E029680920F829A2D38A07A0D142 -+:10970000727B02F00302012A04D1F28AD73293B2AB -+:109710008B4296D8F161404693E72DE9F0478146A8 -+:109720000E4608460AF0C2FD48B948460AF0DCFD7C -+:1097300028B909F1030020F00301494501D01020A8 -+:1097400014E788484FF0000A4430817869B14178C5 -+:10975000804600EB41140834378832460021204609 -+:1097600000F024FA050004D027E0A6F800A00520A8 -+:10977000FCE6B9F1000F24D03088B84201D90C259D -+:109780001FE0607800F00705284600F0FBF908EBC1 -+:109790000507324697F8E8014946401C87F8E8017A -+:1097A000204607F5F47700F001FA05463878401EA8 -+:1097B0003870032000F0E6F92DB10C2D01D0A6F889 -+:1097C00000A02846D2E66078654F00F00701012925 -+:1097D00023D002290CD0032932D0FFDF98F80110E2 -+:1097E0004046491CC9B288F801100F2933D034E033 -+:1097F000616821B1000702D46088FFF706FE98F87F -+:10980000EA014646012802D1787802F073FA96F907 -+:10981000EA010428E2DBFFDFE0E7616811B15248AA -+:1098200006F009FF98F8E9014646032802D1787846 -+:1098300002F060FA96F9E9010428CFDBFFDFCDE7FB -+:10984000C00602D56088FFF7E0FD98F9EB01062815 -+:10985000C4DBFFDFC2E780F801A08178491E817078 -+:10986000617801F0070101EB080090F8E811491C4C -+:1098700080F8E811A5E770B50D4604460AF0F0FC43 -+:1098800018B928460AF012FD08B1102070BD29460B -+:109890002046BDE8704008F01CBD70B50446154672 -+:1098A0000E4608460AF0DCFC18B928460AF0FEFC11 -+:1098B00008B1102070BD022C03D0102C01D009205B -+:1098C00070BD2A463146204608F026FD0028F7D014 -+:1098D000052070BD70B514460D4606460AF0C0FC62 -+:1098E00038B928460AF0E2FC18B920460AF0FCFC18 -+:1098F00008B1102070BD22462946304608F02BFDE5 -+:109900000028F7D0072070BD10B596B004460AF0C5 -+:10991000CDFC10B1102016B010BD0F208DF8000046 -+:109920000BA9684604F096FB0028F4D19DF834009A -+:109930002070BDF836006080BDF83800A08000209F -+:10994000E9E770B505460C4608460AF0CDFC20B99B -+:1099500074B120680AF0AAFC40B1102070BD00006C -+:109960001C0000203004002060060020A08828B1E0 -+:1099700021462846BDE87040FDF774BE0920EDE79A -+:1099800070B504460D4608460AF06AFC30B9601E00 -+:109990001E2814D828460AF063FC08B11020DDE721 -+:1099A000022C01D90720D9E704B9FFDFE64800EB14 -+:1099B000840050F8041C2846BDE870400847A4F114 -+:1099C00020001F28EED829462046BDE87040FAF74F -+:1099D0007FBA70B504460D4608460AF067FC30B9F8 -+:1099E000601E1E280DD828460AF03AFC08B1102047 -+:1099F000B4E7012C01D0022C01D10620AEE70720EC -+:109A0000ACE7A4F120001F28F9D829462046BDE87C -+:109A10007040FAF7E1BA06F0E4BA30B5CB4D04462F -+:109A20006878A04200D8FFDF686800EB041030BD02 -+:109A300070B5C64800252C46467807E02046FFF75B -+:109A4000ECFF4078641C2844C5B2E4B2B442F5D1BE -+:109A5000284683E72DE9F0410C46064600F043F91D -+:109A600007463068C01C20F0030232601CBBB748B8 -+:109A70003B46092120300AF0CDFA002408E0092CE9 -+:109A800011D2DFE804F005070509090B05050700F9 -+:109A9000AF4804E0AF4802E0AF4800E0AF480AF04A -+:109AA000D9FA054600E0FFDFA54200D0FFDF641CC5 -+:109AB000E4B2092CE3D3306800EB07103060C0E556 -+:109AC000021D5143452900D245210844C01CB0FB6A -+:109AD000F2F0C0B2704700B597B055228DF8002063 -+:109AE000001DADF80200ADF804100BA9684604F0A3 -+:109AF000B1FA00B1FFDFBDF8300017B000BD2DE9AD -+:109B0000FC5F064691484FF000088B4647464446A6 -+:109B100090F8019022E02046FFF77FFF050000D17A -+:109B2000FFDF687869463844C7B22846FFF700F877 -+:109B3000824601A92846FFF712F80346BDF8040043 -+:109B40005246001D81B2BDF80000001D80B206F033 -+:109B5000DBFF6A78641C00FB0288E4B24C45DAD172 -+:109B60003068C01C20F003003060BBF1000F00D053 -+:109B700000204246394606F0D5FF3168084430607F -+:109B8000BDE8FC9F7149443108710020C8707047DE -+:109B90006E494431CA782AB10A7801EB4211083182 -+:109BA000814201D001207047002070472DE9F0412B -+:109BB00006460078154600F00F0400201080601E55 -+:109BC0000F46052800D3FFDF5F482A46103000EB20 -+:109BD0008400394650F8043C3046BDE8F04118474F -+:109BE00038B50446407800F00300012803D002286D -+:109BF0000BD0072038BD606858B10AF07EFBD0B9A1 -+:109C000060680AF071FB20B915E060680AF028FB73 -+:109C100088B969462046FCF7A9F90028EAD160789E -+:109C200000F00300022808D19DF8000028B1606808 -+:109C30000AF05AFB08B1102038BD6189F8290DD807 -+:109C4000208988420AD8607800F003023F48012A40 -+:109C500006D1D731C26989B28A4201D2092038BD02 -+:109C600094E80E0000F10C0585E80E000AB9002109 -+:109C70008182002038BD2DE9F05F4FF000093348A4 -+:109C8000C8464F464E464D46CB464C4690F801A03E -+:109C900011E02046FFF7C1FE4178827809F1010901 -+:109CA000884412FB0177C27812FB0166807B10FBAF -+:109CB0000155641CE4B25445EBD10BEB890000EB79 -+:109CC000C80000EB870000EB860000EBC5011F48D1 -+:109CD000027A01EBC201427A807A01EBC20101EB08 -+:109CE000C000BDE8F09F2DE9F047DFF86090002547 -+:109CF0002C4699F8092099F8081099F801700A443F -+:109D0000D6B299F80A20114401F0FF0808E0204675 -+:109D1000FFF783FE817B407811FB0055641CE4B2A1 -+:109D2000BC42F4D199F80800401C3044304440440F -+:109D3000401C0EB1012100E0002108444419FF2C11 -+:109D400000D9FFDFE0B211E434200200300400202B -+:109D5000633D00008DAB0000592F00003120010051 -+:109D60002DE9F041074614468846084601F02EFDCD -+:109D7000064608EB88001C22796802EBC0000D182B -+:109D8000688C58B14146384601F028FD0146786894 -+:109D90000078C200082305F120000CE0E88CA8B18F -+:109DA0004146384601F021FD014678680823407895 -+:109DB000C20005F1240006F0F4FC38B1062121723E -+:109DC0006681D0E90010C4E9031009E02878092869 -+:109DD0000BD00520207266816868E0600020287042 -+:109DE0002046BDE8F04101F0E7BC07202072668103 -+:109DF000F4E72DE9F04116460D460746406801EBB1 -+:109E000085011C2202EBC1014418204601F00FFD20 -+:109E100040B10021708865F30F2160F31F410820D5 -+:109E20000AF0D2F909202070324629463846BDE8AA -+:109E3000F04195E72DE9F0410E46074600241C212C -+:109E4000F07816E004EB8403726801EBC303D25C84 -+:109E50006AB1FFF7AAFA050000D1FFDF6F802A463A -+:109E600021463046FFF7C5FF0120BDE8F081641CA4 -+:109E7000E4B2A042E6D80020F7E770B50646002419 -+:109E80001C21C0780AE000BF04EB8403726801EB78 -+:109E9000C303D5182A782AB1641CE4B2A042F3D8CF -+:109EA000402070BD2821284617F09DFE70688089EB -+:109EB0002881204670BD70B5034600201C25DC7843 -+:109EC0000DE000BF00EB80065A6805EBC606324481 -+:109ED000167816B1128A8A4204D0401CC0B284425D -+:109EE000F0D8402070BDF0B5044600201C26E5786F -+:109EF0000EE000BF00EB8007636806EBC7073B443A -+:109F00001F788F4202D15B78934204D0401CC0B2CC -+:109F10008542EFD84020F0BD0078032801D0002012 -+:109F20007047012070470078022801D00020704758 -+:109F3000012070470078072801D0002070470120D9 -+:109F400070472DE9F041064688461078F1781546AD -+:109F5000884200D3FFDF2C781C27641CF078E4B221 -+:109F6000A04201D8201AC4B204EB8401706807EB48 -+:109F7000C1010844017821B14146884708B12C70DD -+:109F800073E72878A042E8D1402028706DE770B5CB -+:109F900014460B880122A240134207D113430B80C1 -+:109FA00001230A22011D06F0C6FB047070BD2DE9D5 -+:109FB000FF4F81B00878DDE90E7B9A4691460E4648 -+:109FC00040072CD4019806F065FE040000D1FFDFA5 -+:109FD00007F1040820461FFA88F105F0A9FE0500E4 -+:109FE00000D1FFDF204629466A4606F092F9009824 -+:109FF000A0F80370A0F805A0284606F04BFA0178F7 -+:10A0000069F306016BF3C711017020461FFA88F14E -+:10A0100005F0DEFE00B9FFDF019804F07CF906EBE5 -+:10A020000900017F491C017705B0BDE8F08F2DE9DB -+:10A03000F84F0E469A4691460746032106F00EFD5C -+:10A040000446008DDFF8B085002518B198F80000AF -+:10A05000B0421ED1384606F01DFE070000D1FFDFDA -+:10A0600009F10401384689B205F062FE050010D0FE -+:10A07000384629466A4606F04CF9009800210A46FF -+:10A080000180817004F00AFA0098C01DCAF800002F -+:10A0900021E098F80000B04216D104F1260734F808 -+:10A0A000341F012000FA06F911EA090F00D0FFDF82 -+:10A0B0002088012340EA090020800A22391D384601 -+:10A0C00006F054FB067006E0324604F1340104F158 -+:10A0D0002600FFF75CFF0A2188F800102846BDE83B -+:10A0E000F88FFEB514460D46064602AB0C2206213B -+:10A0F000FFF79DFF002826D00299687812220A7087 -+:10A10000801C487008224A80A87020888880608857 -+:10A11000C880A0880881E088488100240C20CDE90F -+:10A1200000040523062229463046FFF740FF21465A -+:10A1300066F31F41F0230022012009F09BFF68789D -+:10A14000801C68700120FEBDFEB514460D46062237 -+:10A15000064602AB1146FFF76AFF002812D0029BA9 -+:10A16000132000211870A8785870022058809C8015 -+:10A170000620CDE900010246052329463046FFF7B7 -+:10A1800016FF0120FEBD2DE9FE430C46804644E04B -+:10A1900002AB0E2207214046FFF749FF002841D0BD -+:10A1A00060681C2267788678BF1C06EB860102EB8C -+:10A1B000C101451802981421017047700A2141809D -+:10A1C000698A0181E98A4181A9888180A98981817F -+:10A1D000304601F0FBFA029905230722C8806F7010 -+:10A1E0000420287000250E20CDE9000521464046B8 -+:10A1F000FFF7DDFE294666F30F2168F31F41F023C8 -+:10A200000022082009F036FF6078FC49801C60704D -+:10A2100062682046921CFFF794FE606880784028B0 -+:10A22000B6D10120BDE8FE83FEB50D46064638E0F6 -+:10A2300002AB0E2207213046FFF7F9FE002835D089 -+:10A2400068681C23C17801EB810203EBC202841809 -+:10A25000029815220270627842700A224280A28916 -+:10A260004281A2888281084601F0B0FA0146029834 -+:10A270008180618AC180E18A0181A088B8B1002013 -+:10A28000207000210E20CDE9000105230722294678 -+:10A290003046FFF78CFE6A68D9492846D21CFFF782 -+:10A2A00050FE6868C0784028C2D10120FEBD06205B -+:10A2B000E6E72DE9FE430C46814644E0204601F0E6 -+:10A2C000A0FAD0B302AB082207214846FFF7AFFE41 -+:10A2D0000028A7D060681C2265780679AD1C06EBC3 -+:10A2E000860102EBC10147180298B7F810800621D9 -+:10A2F0000170457004214180304601F067FA014643 -+:10A30000029805230722C180A0F804807D700820F0 -+:10A3100038700025CDE9000521464846FFF747FE85 -+:10A32000294666F30F2169F31F41F023002208201C -+:10A3300009F0A0FE6078801C60706268B149204618 -+:10A34000121DFFF7FEFD606801794029B6D101209A -+:10A3500068E72DE9F34F83B00E4680E0304601F008 -+:10A3600050FA002875D071681C2091F8068008EB1F -+:10A37000880200EBC2000C184146304601F035FA65 -+:10A380000146A078C30070684078C20004F1240040 -+:10A3900006F023FA07468088E18B401A80B2002538 -+:10A3A00081B3AA46218B814200D8084681460246E5 -+:10A3B00002AB07210398FFF73AFE010028D0BAF15B -+:10A3C000000F03D0029AB888022510808B46E28BDA -+:10A3D0003968A9EB05001FFA80FA0A440398009235 -+:10A3E00006F058FCED1D009A59465346009506F0BC -+:10A3F00017F8E08B504480B2E083B988884209D1D5 -+:10A40000012508E0FFE7801C4FF0010A80B2C9E790 -+:10A41000002009E60025CDE90095238A0722314670 -+:10A420000398FFF7C4FDE089401EE0818DB1A0785C -+:10A43000401CA0707068F178427811FB02F1CAB23A -+:10A44000816901230E3006F076F980F80080002043 -+:10A45000E08372686C493046921DFFF772FD7068A8 -+:10A46000817940297FF47AAF0120DDE570B5064699 -+:10A4700048680D4614468179402910D104EB8401C7 -+:10A480001C2202EBC101084401F0F2F9002806D0B9 -+:10A490006868294684713046BDE8704059E770BD50 -+:10A4A000FEB50C460746002645E0204601F0A9F916 -+:10A4B000D8B360681C22417901EB810102EBC10134 -+:10A4C0004518688900B9FFDF02AB0822072138462A -+:10A4D000FFF7ADFD002833D00299607816220A708C -+:10A4E000801C4870042048806068407901F06EF953 -+:10A4F000014602980523072281806989C1800820CE -+:10A50000CDE9000621463846FFF751FD6078801CF2 -+:10A510006070A88969890844B0F5803F00D3FFDFE7 -+:10A52000A88969890844A8816E81626837492046F4 -+:10A53000521DFFF706FD606841794029B5D1012021 -+:10A54000FEBD30B5438C458BC3F3C704002345B132 -+:10A55000838B641EED1AC38A6D1E1D4495FBF3F3B5 -+:10A56000E4B22CB1008918B1A04200D820460344BF -+:10A570004FF6FF70834200D3034613800C7030BD4A -+:10A580002DE9FC41074616460D46486802EB860158 -+:10A590001C2202EBC101441801AA69462046FFF7BC -+:10A5A000D0FFA1896389BDF80420C81880B2824217 -+:10A5B0001FD001280AD99DF800C0BCF1000F03D0BC -+:10A5C000B4F808C0844501D8002B12D0501A00D529 -+:10A5D000002060816868407940280AD1204601F057 -+:10A5E0003DF9002805D06868294646713846FFF7CE -+:10A5F00057FFBDE8FC8100002C000020199F0000DF -+:10A60000279F0000359F000071B800005DB8000072 -+:10A610002DE9FE4F8946804615465088032106F0F5 -+:10A620001DFA8346B8F80200402801D2402000E01D -+:10A63000403880B282460146584601F0E2F80028D0 -+:10A640007ED00AEB8A001C22DBF8041002EBC0006B -+:10A650000C18204601F0EBF8002877D1B8F800007C -+:10A66000E18A88423CD8A189D1B348456ED1002601 -+:10A670005146584601F0B2F8218C0F18608B48B94A -+:10A68000B9F1020F62D3B8F804006083618A88428E -+:10A6900026D80226A9EB06001FFA80F9B888A28BFB -+:10A6A000801A002814DD4946814500DA084683B245 -+:10A6B00068886968029139680A44CDE9003206F079 -+:10A6C000D7FADDE90121F61D009B009605F06FFE2B -+:10A6D000A18B01EB090080B2A083618B884207D96E -+:10A6E000688803B052465946BDE8F04F01F0DDB826 -+:10A6F0001FD14FF009002872B8F802006881D7E92D -+:10A700000001C5E90401608BA881284601F054F8D6 -+:10A710005146584601F062F80146DBF80400082370 -+:10A720000078C20004F1200006F03BF80020A0836E -+:10A730006083A0890AF0FF02401EA081688800E0C3 -+:10A7400004E003B05946BDE8F04F19E7BDE8FE8FBD -+:10A750002DE9F041064615460F461C46184609F0FD -+:10A760007FFD18B9206809F0A1FD08B1102007E4A9 -+:10A770007168688C0978B0EBC10F01D3132005E430 -+:10A780003946304601F02AF80146706808230078FF -+:10A79000C20005F1200005F0CEFFD4E90012C0E9A7 -+:10A7A00000120020E3E710B50446032106F056F935 -+:10A7B0000146007800F00300012804D08A8A204670 -+:10A7C000BDE81040C0E42046BDE8104001F114028D -+:10A7D00087E470B50446032106F040F905460146BA -+:10A7E0002046FFF766FD002816D029462046FFF7D1 -+:10A7F00057FE002810D029462046FFF715FD0028F7 -+:10A800000AD029462046FFF7BEFC002804D029467E -+:10A810002046BDE870409CE570BD2DE9F0410C4636 -+:10A8200080461EE0E178427811FB02F1CAB28169EC -+:10A8300001230E3005F0B5FF077860681C22C1794E -+:10A84000491EC17107EB8701606802EBC101461820 -+:10A850003946204600F0D5FF18B1304600F0E0FF41 -+:10A8600020B16068C1790029DCD180E7FEF79DFD49 -+:10A87000050000D1FFDF0A202872384600F0A6FF4D -+:10A8800068813946204600F0B0FF01466068082321 -+:10A890004078C20006F1240005F083FFD0E90010E3 -+:10A8A000C5E90310A5F80280284600F085FFB078BE -+:10A8B00000B9FFDFB078401EB07058E770B50C46A5 -+:10A8C0000546032106F0CAF801464068C2792244D1 -+:10A8D000C2712846BDE870409FE72DE9FE4F8246D1 -+:10A8E000507814460F464FF0000800284FD001283A -+:10A8F00007D0022822D0FFDF2068B8606068F860C7 -+:10A9000024E702AB0E2208215046FFF790FB0028F7 -+:10A91000F2D00298152105230170217841700A2197 -+:10A920004180C0F80480C0F80880A0F80C806288DC -+:10A9300082810E20CDE90008082221E0A678304669 -+:10A9400000F044FF054606EB86012C22786802EBF6 -+:10A95000C1010822465A02AB11465046FFF767FB79 -+:10A960000028C9D002980721017021784170042184 -+:10A97000418008218580C680CDE9001805230A465C -+:10A9800039465046FFF713FB87F80880DEE6A678C5 -+:10A99000022516B1022E13D0FFDF2A1D914602AB0D -+:10A9A00008215046FFF743FB0028A5D0029801215B -+:10A9B000022E0170217841704580868002D005E02A -+:10A9C0000625EAE7A188C180E1880181CDE90098E8 -+:10A9D0000523082239465046D4E710B50446032122 -+:10A9E00006F03CF8014600F108022046BDE81040A0 -+:10A9F00073E72DE9F05F0C4601281DD0957992F898 -+:10AA00000480567905EB85011F2202EBC10121F07C -+:10AA1000030B08EB060111FB05F14FF6FF7202EA8A -+:10AA2000C10909F1030115FB0611F94F21F0031AC1 -+:10AA300040B101283DD124E06168E57891F80080BB -+:10AA40004E78DFE75946786805F029FE606000B966 -+:10AA5000FFDF5946606817F0E8F8E57051467868FE -+:10AA600005F01DFE6168486100B9FFDF606842695A -+:10AA700002EB09018161606880F8008060684670BF -+:10AA800017E0606852464169786805F033FE5A461F -+:10AA90006168786805F02EFE032005F089FF044602 -+:10AAA000032005F08DFF201A012802D1786805F0F7 -+:10AAB000EBFD0BEB0A00BDE8F09F024600210220EF -+:10AAC00097E713B5009858B10024684605F0C9FD12 -+:10AAD000CF490A22002C0A7001D1009A4A601CBD9D -+:10AAE00001240020F2E770B50C46154638212046B7 -+:10AAF00017F09BF8012666700A2104F11C0017F07C -+:10AB000094F805B9FFDF297A207861F301002070FD -+:10AB1000A879002817D02A4621460020FFF769FFB0 -+:10AB20006168402088706168C870616808716168F8 -+:10AB300048716168887161682888088161686888DF -+:10AB400048816068868170BDC878002802D00022E4 -+:10AB500001204EE7704770B50546002165F31F419F -+:10AB6000012009F031FB0321284605F077FF04009E -+:10AB700000D1FFDF21462846FFF75CF9002804D00A -+:10AB8000207840F010002070012070BD2DE9FF41B9 -+:10AB900080460E460F0CFEF708FC050007D06F80BC -+:10ABA0000321384605F05AFF040008D106E004B03E -+:10ABB0003846BDE8F0411321F9F72EBEFFDFB8F1AA -+:10ABC000010F05D0B8F1080F18D0FFDFBDE8FF81F5 -+:10ABD00020782A4620F0080020700020ADF80200FE -+:10ABE00002208DF800004FF6FF70ADF80400ADF8BC -+:10ABF000060069463846F9F717F9E7E7C6F3072173 -+:10AC000001EB81021C23606803EBC202805C042814 -+:10AC100003D008280AD0FFDFD8E7012000904FF4C6 -+:10AC200040432A46204600F009FECFE704B02A46FA -+:10AC30002046BDE8F041FFF7DCB82DE9F05F0027C2 -+:10AC4000B0F80A9090460C4605463E46B9F1400FD2 -+:10AC500001D2402001E0A9F140001FFA80FA287AD1 -+:10AC6000C01E08286BD2DFE800F00D04192058360A -+:10AC70003C4772271026002C6CD0D5E90301C4E9AB -+:10AC800002015CE070271226002C63D00A2205F135 -+:10AC90000C0104F1080016F074FF50E071270C2637 -+:10ACA000002C57D0E868A06049E0742710269CB3B8 -+:10ACB000D5E90301C4E902016888032105F0CEFE4D -+:10ACC0008346FEF772FB024668885080514658461C -+:10ACD000FFF746F833E075270A26ECB1A8892081F2 -+:10ACE0002DE076271426BCB105F10C0004F1080311 -+:10ACF00007C883E8070022E07727102664B1D5E96A -+:10AD00000301C4E902016888032105F0A7FE01469A -+:10AD10006888FFF782FD12E01CE073270826CCB19B -+:10AD20006888032105F09AFE01460078C00606D522 -+:10AD30006888FFF77FF810B96888F8F767FCA8F80B -+:10AD400000602CB12780A4F8069066806888A080F7 -+:10AD50000020B0E6A8F80060FAE72DE9FC410C46B7 -+:10AD60001E4617468046032105F078FE05460A2C4C -+:10AD70000AD2DFE804F005050505050509090907FC -+:10AD8000042303E0062301E0FFDF0023CDE9007682 -+:10AD9000224629464046FFF70AF92AE438B5054617 -+:10ADA000A0F57F40FF3830D0284605F061FF040051 -+:10ADB00000D1FFDF204605F08BFA002815D00146B0 -+:10ADC0006A46204605F0A5FA00980321B0F8054030 -+:10ADD000284605F043FE0546052C03D0402C05D23D -+:10ADE000402404E0007A80B1002038BD403CA4B289 -+:10ADF000214600F006FD40B1686804EB84013E2264 -+:10AE000002EBC101405A0028EFD0012038BD0000FC -+:10AE10002C0000202DE9F04F044689B0408805F051 -+:10AE200027FF050000D1FFDF06AA2846616800F071 -+:10AE3000C1FC069D001F81B235F8032F6B888A4242 -+:10AE400005D1042B0AD0052B1DD0062B15D0224688 -+:10AE50002846FFF7DDFB09B0BDE8F08F16462D1D33 -+:10AE6000224629463046F7F78CFA0828F3D12246C5 -+:10AE700029463046FCF73DFCEDE76088291D6368F4 -+:10AE8000FAF7F0FCE7E717466088032105F0E6FDD6 -+:10AE90004FF000088DF804800646ADF80680042FB8 -+:10AEA000D9D36A79002AD6D028794FF6FF794FF0A6 -+:10AEB0001C0A13282CD008DC012878D0062847D09B -+:10AEC000072875D0122874D106E0142872D01528EE -+:10AED00071D016286DD1ACE10C2F6AD1307800F01A -+:10AEE0000301012965D040F0080030706879B07026 -+:10AEF00001208DF804002889ADF808006889ADF8B4 -+:10AF00000A00A889ADF80C00E889ADF80E0019E038 -+:10AF1000B07890429FD1307801079CD5062F9AD106 -+:10AF200020F0080030706088414660F31F41012026 -+:10AF300009F04AF902208DF80400ADF8089028893C -+:10AF4000ADF80A006088224601A9F8F76DFF82E794 -+:10AF5000082F80D12F89B5F80A90402F01D24020C8 -+:10AF600001E0A7F1400080B280460146304600F083 -+:10AF700048FC08B3716808EB88002C2202EBC00083 -+:10AF8000095A4945E3D1FE4807AAD0E90210CDE9A4 -+:10AF9000071068798DF81C0008F0FF058DF81E5029 -+:10AFA00060883146FFF799FC2246294639E0B6E031 -+:10AFB00014E03CE039E0E6E0F148D0E90010CDE9EA -+:10AFC00007106879ADF820708DF81C00ADF822905C -+:10AFD000608807AA3146FFF780FC3CE7082FB6D10E -+:10AFE0006889B5F80880402801D2402000E0403848 -+:10AFF00087B23946304600F004FC0028A7D007EBA2 -+:10B00000870271680AEBC2000844028A42459ED159 -+:10B01000017808299BD140786979884297D1F9B2A3 -+:10B0200022463046FEF7E5FE15E70E2F07D0CDF895 -+:10B030001C80CDF8208068798DF81C00C8E76989EC -+:10B04000EF898B46B5F80C903046FEF734FFABF134 -+:10B050004001402901D309204AE0B9F1170F01D37B -+:10B06000172F01D20B2043E040280ED000EB8002C6 -+:10B0700071680AEBC20008440178012903D14078C5 -+:10B0800069798842A9D00A2032E03046FEF7F5FE01 -+:10B09000014640282BD001EB810372680AEBC30004 -+:10B0A00002EB0008012288F800206A7988F8012064 -+:10B0B00070682A894089B84200D938462D8A03230E -+:10B0C0002372A282E7812082A4F80C906582084650 -+:10B0D00000F07CFB6081A8F81490A8F81870A8F81C -+:10B0E0000E50A8F810B0204600F066FBB3E604202E -+:10B0F00005212172A4F80A80E08101212173A04971 -+:10B10000D1E90421CDE9072169798DF81C10ADF84A -+:10B110001E00608807AA3146FFF7DFFBE3E7062F32 -+:10B12000E4D3B078904215D13078010712D520F0E1 -+:10B13000080030706088414660F31F41012009F02B -+:10B1400043F802208DF804002889ADF80800ADF816 -+:10B150000A90F7E604213046FEF7C5FE0546402872 -+:10B16000C4D002208303009022462946304600F0D6 -+:10B1700065FB4146608865F30F2160F31F4108209D -+:10B1800009F022F867E60E2FB0D104213046FEF711 -+:10B19000AAFE81464028A9D04146608869F30F2164 -+:10B1A00060F31F41082009F00FF8288A0790E8890A -+:10B1B00000907068AF894089B84200D9384683460C -+:10B1C000B5F80A8028890590484600F0FFFA6081AA -+:10B1D000079840B10220079B00902246494630461E -+:10B1E00000F02CFB37E6B8F1170F1ED3172F1CD336 -+:10B1F0000420207200986082E781A4F810B0A4F8BF -+:10B200000C8009EB890271680AEBC2000D180099E5 -+:10B210000598A5F81480A5F818B0E9812882204681 -+:10B2200000F0CAFA0620287015E601200B230090D2 -+:10B23000D3E7082FA6D129893046FEF73CFE074602 -+:10B2400040289FD007EB870271680AEBC2000844D0 -+:10B25000804600F0ECFA002894D16D89B8F80E0011 -+:10B260002844B0F5803F05D360883A46314600F067 -+:10B270001CFBF0E5002D85D0A8F80E0060883A464A -+:10B280003146FFF7F3F808202072384600F09EFAA6 -+:10B290006081A58127E770B50D460646032105F0BC -+:10B2A000DDFB040004D02078000704D5112070BD18 -+:10B2B00043F2020070BD2A4621463046FEF711FFD8 -+:10B2C00018B9286860616868A061207840F00800BB -+:10B2D0002070002070BD70B50D460646032105F0B4 -+:10B2E000BDFB040004D02078000704D4082070BD02 -+:10B2F00043F2020070BD2A4621463046FEF724FF85 -+:10B3000000B9A582207820F008002070002070BDD0 -+:10B310002DE9F04F0E4691B08046032105F09EFBCB -+:10B320000446404605F0B6FC07460020079008900A -+:10B330000990ADF830000A9002900390049004B98F -+:10B34000FFDF0DF1080917BBFFDF20E038460BA92E -+:10B35000002204F046FE9DF82C0000F07F050A2D27 -+:10B3600000D3FFDF6019017F491E01779DF82C0093 -+:10B3700000060CD52A460CA907A8FEF708FE01E036 -+:10B380005C20020019F80510491C09F80510761E0A -+:10B39000F6B2DBD204F13400FC4D04F1260BDFF8E9 -+:10B3A000F0A304F12A07069010E05846069900F031 -+:10B3B0006EFA064628700A2800D3FFDF5AF82610D6 -+:10B3C00040468847E08CC05DB04202D0208D002806 -+:10B3D000EBD10A202870EE4D4E4628350EE00CA920 -+:10B3E00007A800F054FA0446375D55F8240000B968 -+:10B3F000FFDF55F82420394640469047BDF81E002F -+:10B400000028ECD111B027E510B5032105F026FB8B -+:10B41000040000D1FFDF0A2104F11C0016F005FC36 -+:10B42000207840F00400207010BD10B50C460321B8 -+:10B4300005F014FB01190A7F01211AB9808EA14081 -+:10B44000084000D0012010BD2DE9F84F894615466F -+:10B450008246032105F002FB070004D0284608F0CD -+:10B46000FFFE40B903E043F20200BDE8F88F484612 -+:10B4700008F01CFF08B11020F7E7786828B1698848 -+:10B480000089814201D90920EFE7B9F800001C24A6 -+:10B4900018B1402809D2402008E03846FEF7EDFCFC -+:10B4A0008046402819D11320DFE7403880B280461B -+:10B4B0000146384600F0A5F948B108EB88007968E4 -+:10B4C00004EBC000085C012803D00820CDE705206C -+:10B4D000CBE7FDF76AFF06000BD008EB8800796820 -+:10B4E00004EBC0000C18B9F8000020B1E88910B1D5 -+:10B4F00013E01120B9E72888172802D36888172895 -+:10B5000001D20720B1E7686838B12B1D22464146B9 -+:10B510003846FFF71DF90028A7D104F10C0269464F -+:10B520002046FFF70EF8288860826888E082B9F824 -+:10B53000000030B102202070E889A080E889A0B125 -+:10B540002BE003202070A889A080786881784029AA -+:10B5500005D180F8028039465046FEF714FE404679 -+:10B5600000F034F9A9F8000021E07868218B4089C7 -+:10B57000884200D908462083A6F802A00420307231 -+:10B58000B9F800007081E0897082F181208B3082EF -+:10B59000A08AB081304600F00FF97868C178402960 -+:10B5A00005D180F8038039465046FEF73DFE002065 -+:10B5B0005BE770B50D460646032105F04FFA04001F -+:10B5C00003D0402D04D2402503E043F2020070BDB9 -+:10B5D000403DADB2294600F014F958B105EB8501A4 -+:10B5E0001C22606802EBC101084400F020F918B188 -+:10B5F000082070BD052070BD2A462146304600F067 -+:10B6000054F9002070BD2DE9F0410D4616468046E4 -+:10B61000032105F023FA0446402D01D2402500E025 -+:10B62000403DADB28CB1294600F0EBF880B105EB9E -+:10B6300085011C22606802EBC1014718384600F002 -+:10B64000F6F838B10820BDE8F08143F20200FAE7CD -+:10B650000520F8E733463A4629462046FFF778F8B2 -+:10B660000028F0D1EAB221464046FEF789FF0020CB -+:10B67000E9E72DE9F0410D4616468046032105F025 -+:10B68000EDF90446402D01D2402500E0403DAFB227 -+:10B6900024B1304608F0E4FD38B902E043F202007C -+:10B6A000D1E7306808F0DCFD08B11020CBE739465F -+:10B6B000204600F0A6F860B107EB87011C22606805 -+:10B6C00002EBC1014518284600F0B1F818B1082076 -+:10B6D000B9E70520B7E7B088A98A884201D90C20CC -+:10B6E000B1E76168E88C4978B0EBC10F01D3132052 -+:10B6F000A9E73946204600F078F80146606808233B -+:10B700004078C20005F1240005F015F8D6E90012D2 -+:10B71000C0E90012FAB221464046FEF7A7FE00201B -+:10B7200091E72DE9F0470D461F46904681460321DB -+:10B7300005F094F90446402D01D2402001E0A5F126 -+:10B74000400086B23CB14DB1384608F0CDFD50B155 -+:10B750001020BDE8F08743F20200FAE76068C8B144 -+:10B76000A0F80C8024E03146204600F04AF888B169 -+:10B7700006EB86011C22606802EBC10145182846D1 -+:10B7800000F055F840B10820E3E700002C0000204D -+:10B79000742002000520DCE7A5F80880F2B22146FB -+:10B7A0004846FEF7EDFE1FB1A88969890844388034 -+:10B7B0000020CEE704F0ADBD017821F00F01491C57 -+:10B7C00021F0F00110310170FDF7F2BD10B5044613 -+:10B7D000402800D9FFDF4034A0B210BD4068426964 -+:10B7E0000078484302EBC0007047C2784068037895 -+:10B7F00012FB03F24378406901FB032100EBC10017 -+:10B800007047C2788A4209D9406801EB81011C2245 -+:10B8100002EBC101405C08B1012070470020704775 -+:10B820000078062801D90120704700207047007871 -+:10B83000062801D00120704700207047F0B401EBCA -+:10B8400081061C27446807EBC6063444049D052680 -+:10B850002670E3802571F0BCFEF782BA10B54189ED -+:10B8600011B1FFF7DDFF08B1002010BD012010BDB0 -+:10B8700010B5C18C8278B1EBC20F04D9C18911B166 -+:10B88000FFF7CEFF08B1002010BD012010BD10B59C -+:10B890000C4601230A22011D04F083FF0078218851 -+:10B8A000012282409143218010BDF0B402EB820559 -+:10B8B0001C264C6806EBC505072363554B681C79AD -+:10B8C000402C03D11A71F0BCFEF7F3BCF0BC7047FA -+:10B8D00010B5EFF3108000F0010472B6E94841782A -+:10B8E000491C41704078012801D1F7F74BFB002C2F -+:10B8F00000D162B610BD70B5E24CE07848B90125C0 -+:10B90000E570FFF7E5FFF7F745FB20B1002008F0F1 -+:10B910009AF8002070BD4FF080406571C0F8045364 -+:10B92000F7E770B5EFF3108000F0010572B6D54C63 -+:10B93000607800B9FFDF6078401E6070607808B9F9 -+:10B94000F7F724FB002D00D162B670BDCD4810B5CD -+:10B95000C17821B100214171C170FFF7E2FF0020E1 -+:10B9600010BD10B50446F7F715FBC649C978084065 -+:10B9700000D001202060002010BD2DE9F05FDFF82D -+:10B9800004934278817889F80620002689F8071008 -+:10B99000074689F808600078354620B101280FD0A5 -+:10B9A00002280FD0FFDFF7F702FB98B1F7F706FB8D -+:10B9B000B0420FD13046F7F705FB0028FAD047E038 -+:10B9C0000126F0E7FFF784FFF7F7E4FA0028FBD041 -+:10B9D0000226E8E701208407E060C4F80451AA4980 -+:10B9E0000E600107D1F84412A74AC1F34231243254 -+:10B9F0001160A549343108604FF0020BC4F804B35C -+:10BA0000A060DFF888A2DAF80010C94341F3001102 -+:10BA100001F10108DAF8001041F01001CAF8001035 -+:10BA200000E020BFD4F804010028FAD03046F7F730 -+:10BA3000C9FA0028FAD0B8F1000F05D1DAF80010E1 -+:10BA400021F01001CAF80010C4F808B3C4F804517A -+:10BA500099F807004C4670B1387860B9F7F79AFA50 -+:10BA6000074608F09FF96FF0004117B1C4E90310D1 -+:10BA700001E0C4E9030116B12571BDE8F09F01277B -+:10BA8000BE0727714FF01908C6F80883B761C6F8DA -+:10BA90000051C6F80C51C6F81051F7F77BFA10B1F7 -+:10BAA000A770376100E02770FFF712FF7649A07991 -+:10BAB00020310860C6F80483DFE770B5050000D1C7 -+:10BAC000FFDF4FF080424FF0FF30C2F80803002143 -+:10BAD000C2F80011C2F80411C2F80C11C2F810111A -+:10BAE000684C6170F7F75CFA10B10120E07060708B -+:10BAF0002846BDE8704040E72DE9F05F6448D0F883 -+:10BB000000B0634A6349083211608406D4F8080122 -+:10BB100010B14FF0010801E04FF00008D4F8000127 -+:10BB200000B101208146D4F8040108B1012600E0EB -+:10BB30000026D4F80C0100B101208246D4F810018F -+:10BB400008B1012700E0002748EA090126EA0100C0 -+:10BB500020EA0A00B84300D0FFDF0025B8F1000F4B -+:10BB600004D0C4F80851012007F06DFF5FEA090016 -+:10BB7000DFF810814FF0010913D0C4F8005198F894 -+:10BB8000050020B188F80550002007F05CFF98F808 -+:10BB9000000030B1F7F7FEF918B188F80290C4F848 -+:10BBA00010900EB1C4F80451BAF1000F0CD0C4F8D3 -+:10BBB0000C5198F80200464600B9FFDFB5703570A9 -+:10BBC000C4F81490FFF7ADFE37B1C4F8105198F8DF -+:10BBD000040008B100F020F82D49091DC1F800B09B -+:10BBE0004BE770B5274DE87808B9F7F7CFF9012092 -+:10BBF0008407A061A87850B1D4F80C0120B90020C6 -+:10BC0000F7F7E0F90028F7D10020C4F80C014FF055 -+:10BC1000FF30C4F8080370BD2DE9F041194C4FF016 -+:10BC200080470125E079F0B1012803D0217A401E38 -+:10BC3000814218DAF7F7AEF9064608F0B3F8E17971 -+:10BC4000012902D9217A491C21720EB1216900E033 -+:10BC5000E168411A022902DA11F1020F0BDC0EB180 -+:10BC6000206100E0E060FFF733FEF7F793F928B1B9 -+:10BC70003D61A57003E07D61BDE8F0812570002085 -+:10BC80002072F9E7380000201805004010ED00E0B0 -+:10BC900010050240010000014FF0E0214FF000705C -+:10BCA000C1F88001C1F88002384B802283F800245B -+:10BCB000C1F80001704700B502460420344903E092 -+:10BCC00001EBC0031B792BB1401EC0B2F8D2FFDFDD -+:10BCD000FF2000BD41F8302001EBC00100224A7175 -+:10BCE0008A7101220A7100BD294A002102EBC000BD -+:10BCF0000171704710B50446042800D3FFDF2448C3 -+:10BD000000EBC4042079012800D0FFDF6079A1791D -+:10BD1000401CC0B2814200D060714FF0E0214FF072 -+:10BD20000070C1F8000210BD2DE9F0411948056806 -+:10BD300018491948083108601448042690F800048E -+:10BD4000134F4009154C042818D0FFDF16E0217866 -+:10BD500007EBC1000279012A08D1427983799A421E -+:10BD600004D04279827157F8310080472078401C16 -+:10BD7000C0B22070042801D300202070761EF6B2D5 -+:10BD8000E5D20448001D0560BDE8F08119E000E03F -+:10BD90009006002010050240010000014C00002028 -+:10BDA000F8B51D46DDE906470E000AD004F072FF23 -+:10BDB0002346FF1DBCB231462A46009404F030FBF6 -+:10BDC000F8BDD0192246194615F096FE2046F8BD5A -+:10BDD000F84B586019721A80C90015F026BF70B56B -+:10BDE0000D460446102115F0FEFE258117206081C6 -+:10BDF000A07B40F00A00A07370BD4FF6FF720A806E -+:10BE00000146032008F0E0B9704700897047827B43 -+:10BE1000D30701D1920703D480890880002070479E -+:10BE200005207047827B920700D5818170470146CB -+:10BE30000020098847F2FE12114200D00120DD499E -+:10BE4000497A002901D040F00800704700B5034648 -+:10BE5000807BC00701D0052000BD59811846FFF73F -+:10BE6000E6FFC00703D0987B40F004009873987BEE -+:10BE700040F001009873002000BD827B520700D57E -+:10BE800009B14089704717207047827B61F3C30274 -+:10BE9000827370472DE9F04F0E46017804464FF04B -+:10BEA000010B0BFA01F047F2FF1100EA010961688A -+:10BEB0004FF6FF7887B008881D469646404506D065 -+:10BEC000B9F1000F07D047F2FE12104203D0012053 -+:10BED00007B0BDE8F08F40EA090008804FF0000A83 -+:10BEE00095B185F800A022780027052003210223C0 -+:10BEF000102A6FD2DFE802F06E0D2C35546F768079 -+:10BF000054CBC79CCFFEFDFC20780B28EBD004203F -+:10BF1000DEE762682089937B9B077DD5172851D384 -+:10BF200013898342FBD39289172A01D3824249D1D4 -+:10BF30002A7822F03F02921C2A70A5F80100318075 -+:10BF4000616888816068817B21F00201817342E130 -+:10BF5000042129702189A5F801106189A5F8031031 -+:10BF60008FE0208A3188C01D1FFA80F84145D6D362 -+:10BF7000062028702089A5F801006089A5F8030033 -+:10BF8000A089A5F805000721208ACDE90001608875 -+:10BF90002A4671466369FFF703FFA6F800801AE19D -+:10BFA000082A10D0082129702189A5F8011061897B -+:10BFB000A5F8031030806A1D694604F10C0006F0F4 -+:10BFC000CAF910B1CCE01021EDE730889DF80010DF -+:10BFD000084456E00EE10A2028702089A5F80100E7 -+:10BFE0003180B2E00C2129702189A5F80110618906 -+:10BFF000A5F803103080A8E0218933880BEB4102BB -+:10C000001FFA82FA534576D3BAF1050F73D30E2285 -+:10C010002A7008EA410100E07FE0CDE9001B60885A -+:10C020002A467146E368FFF7BBFEA6F800A0D2E0FF -+:10C030006048417A002970D0491E41724068217AD7 -+:10C04000E26800EBC105D046A9882868D2F800C094 -+:10C050000844A0F1080140F808CC506848608DF809 -+:10C0600000308DF801A028680290A888ADF804007F -+:10C0700060886946F5F7C6FEA5F80480002E01D059 -+:10C0800040463080A7E0287840F080022A70287867 -+:10C0900040F040022A7060893288C01C1FFA80F884 -+:10C0A00042455DD3287820F03F0012302870228965 -+:10C0B000A5F801206089CDE9000160882A46714613 -+:10C0C000E368FFF76DFEA6F80080287841063CD5AE -+:10C0D00000065ED58DF800B08DF801A03188CDE95D -+:10C0E000025A091DADF804100420DFF8C88003E0EF -+:10C0F00059E04FE02DE033E0049098F808008DF807 -+:10C10000140060886946F5F77DFE074630880C30DC -+:10C110003080022F02D0E7B36FE048E09DF8142092 -+:10C12000D8F8041098F80830404601EBC2019A4252 -+:10C1300016D28A88A2B9427A521C88F809200D606A -+:10C1400030888880A6F800A057E061682089888040 -+:10C1500041E0A1893288491D1FFA81F8424501D288 -+:10C1600004274AE029782A4621F03F011631297038 -+:10C170002189A5F801106189A5F80310A189CDE9ED -+:10C180000010608871462369FFF70AFEA6F8008058 -+:10C19000DBE720E0287820F03F0018302870207A74 -+:10C1A0006870338017E060680188090404D40527AB -+:10C1B00023E00000B0060020C0882189884201D019 -+:10C1C00006271AE01E202870A6F800B060680188D3 -+:10C1D00021F400410180B9F1000F0ED0DF486188E1 -+:10C1E000002200888300032007F044FF6168207864 -+:10C1F000887007E0A6F800A003276068018821EA9C -+:10C2000009010180384663E62DE9F04F87B01746F3 -+:10C21000109C0D0083461E461AD03078C10703D00B -+:10C2200000F03F00192801D9012100E0002120463B -+:10C23000FFF723FEA8420BD32088A0F57F41FF39EA -+:10C2400006D03078410601D4000603D508203FE629 -+:10C2500007203DE600208DF800008DF801003078C1 -+:10C260006B1E00F03F0C0122A81E4FF0050A4FF094 -+:10C27000020999B2BCF1200F76D2DFE80CF08C10E5 -+:10C28000755F7569758D759E75B875BD75CB75D7FC -+:10C2900075E4757575F475F275F175F0758C052D8D -+:10C2A00079D104208DF80000A0788DF80400708802 -+:10C2B000ADF8060030798DF80100707800F03F008D -+:10C2C0000C2829D00ADCA0F10200092863D2DFE89B -+:10C2D00000F0126215621A621D622000122824D03A -+:10C2E00004DC0E281BD01028DAD11BE016281FD042 -+:10C2F0001828D5D11FE02078800701E0207840077A -+:10C30000002848DAF1E020780007F9E72078C00635 -+:10C31000F6E720788006F3E720784006F0E72078FB -+:10C320000006EDE72088C005EAE72088C004E7E7BB -+:10C3300020888004E4E720884004E1E72078800733 -+:10C3400029D5032D27D18DF800A0B6F8010083E090 -+:10C35000217849071FD5062D1DD381B27078012899 -+:10C3600003D0022817D102E0CCE0022000E0102028 -+:10C3700006228DF8002072788DF80420801CB1FB15 -+:10C38000F0F2ADF8062092B242438A4203D10397FD -+:10C39000ADF80890A9E07BE02078000778D5072168 -+:10C3A00098B28DF800108108ADF80410B0EB810F41 -+:10C3B0006ED10297ADF8062097E02178C90667D5BF -+:10C3C000022D65D381B208208DF800007078022814 -+:10C3D0005ED300BFB1FBF0F28DF80400ADF806208B -+:10C3E00092B242438A4253D1ADF808907CE0207863 -+:10C3F00080064DD5092003E02078400648D50A2064 -+:10C400008DF80000A088ADF80400ADF80610ADF876 -+:10C41000082069E02078000672D50B20ADF80410E2 -+:10C420008DF80000ADF8062002975EE02188C9056E -+:10C4300066D5022D64D381B20C208DF8000070788F -+:10C4400004285DD3C6E72088C00459D5012D57D1F3 -+:10C450000D208DF80000A088ADF8040045E021E033 -+:10C4600026E016E0FFE72088800449D5052D47D354 -+:10C470000E208DF80000A088ADF80400B6F8030087 -+:10C480006D1FADF80850ADF80600ADF80AA02BE01E -+:10C4900036E02088400433D5012D31D10F208DF8AE -+:10C4A000000022E0208800042AD4B6F80100E080D1 -+:10C4B000A07B000724D5032D22D3307800F03F0065 -+:10C4C0001B2819D011208DF80000208840F400406E -+:10C4D000A4F80000B6F80100ADF80400ED1E03203A -+:10C4E000ADF80650ADF80800039769465846F5F7D1 -+:10C4F00089FC050008D016E010208DF80000E9E75F -+:10C50000072510E008250EE0307800F03F001B28DA -+:10C5100009D01D2807D05946032007F055FE208872 -+:10C5200000F400402080A07B400708D52046FFF79C -+:10C530007EFCC00703D1A07B20F00400A073284636 -+:10C54000C6E400B587B0032805D18DF8000088B295 -+:10C550006946F5F757FC07B000BD0000B0060020A3 -+:10C56000F8B51D46DDE906470E000AD004F092FB3F -+:10C570002346FF1DBCB231462A46009403F050FF0B -+:10C58000F8BDD0192246194615F0B6FA2046F8BD76 -+:10C590002DE9FF4F8DB09B46DDE91B57DDF87CA0F0 -+:10C5A0000C46082B05D0E06901F00CF950B11020C1 -+:10C5B000D2E02888092140F0100028808AF8001075 -+:10C5C000022617E0E16901208871E2694FF42051E9 -+:10C5D0009180E1698872E06942F601010181E069B8 -+:10C5E000002181732888112140F0200028808AF8DA -+:10C5F0000010042638780A900A2038704FF002099B -+:10C6000004F118004D460C9001F09FFBB04681E00C -+:10C61000BBF1100F0ED1022D0CD0A9EB0800801C2D -+:10C6200080B20221CDE9001005AB52461E990D984B -+:10C63000FFF796FFBDF816101A98814203D9F74804 -+:10C6400000790F9004E003D10A9808B138702FE008 -+:10C650004FF00201CDE900190DF1160352461E9963 -+:10C660000D98FFF77DFF1D980088401B801B83B24B -+:10C67000C6F1FF00984200D203461E990BA8D9B11B -+:10C680005FF00002DDF878C0CDE9032009EB060178 -+:10C6900089B2CDE901C10F980090BDF816100022B3 -+:10C6A0000D9801F0D5FB387070B1C0B2832807D067 -+:10C6B000BDF8160020833AE00AEB09018A19E1E788 -+:10C6C000022011B0BDE8F08FBDF82C00811901F0F7 -+:10C6D000FF08022D0DD09AF80120424506D1BDF881 -+:10C6E0002010814207D0B8F1FF0F04D09AF80180E2 -+:10C6F0001FE08AF80180C94800680178052902D145 -+:10C70000BDF81610818009EB08001FFA80F905EBCF -+:10C71000080085B2DDE90C1005AB0F9A01F018FB9B -+:10C7200028B91D980088411B4145BFF671AF022D05 -+:10C7300013D0BBF1100F0CD1A9EB0800801C81B203 -+:10C740000220CDE9000105AB52461E990D98FFF776 -+:10C7500007FF1D980580002038700020B1E72DE903 -+:10C76000F8439C46089E13460027B26B9AB3491FB4 -+:10C770008CB2F18FA1F57F45FF3D05D05518AD88EE -+:10C780002944891D8DB200E000252919B6F83C80A6 -+:10C790000831414520D82A44BCF8011022F8021B78 -+:10C7A000BCF8031022F8021B984622F8024B91466F -+:10C7B00004F05EFA4FF00C0C41464A462346CDF891 -+:10C7C00000C003F0F4FDF587B16B00202944A41DDF -+:10C7D0002144088003E001E0092700E08327384670 -+:10C7E000BDE8F88310B50B88848F9C420CD9846B0C -+:10C7F000E018048844B1848824F40044A41D234430 -+:10C800000B801060002010BD822010BD2DE9F04784 -+:10C810008AB00025904689468246ADF81850072711 -+:10C820004BE0059806888088000446D4A8F800608C -+:10C8300007A8019500970295CDE903504FF40073C6 -+:10C8400000223146504601F003FB04003CD1BDF804 -+:10C850001800ADF82000059804888188B44216D1EC -+:10C860000A0414D401950295039521F40041009720 -+:10C87000049541F4804342882146504601F0BEF8B9 -+:10C8800004000BD10598818841F40041818005AAFC -+:10C8900008A94846FFF7A6FF0400DCD000970598DA -+:10C8A00002950195039504950188BDF81C3000227E -+:10C8B000504601F0A3F8822C06D105AA06A94846E5 -+:10C8C000FFF790FF0400ACD0ADF8185004E00598D5 -+:10C8D000818821F40041818005AA06A94846FFF716 -+:10C8E00081FF0028F3D0822C03D020460AB0BDE897 -+:10C8F000F0870020FAE710B50C46896B86B051B17D -+:10C900000C218DF80010A18FADF80810A16B0191DA -+:10C910006946FAF7C9FB00204FF6FF71A063E18773 -+:10C92000A08706B010BD2DE9F0410D460746896B82 -+:10C930000020069E1446002911D0012B0FD132464B -+:10C9400029463846FFF762FF002808D1002C06D0A0 -+:10C95000324629463846BDE8F04100F042BFBDE806 -+:10C96000F0812DE9FC411446DDE9087C0E46DDE945 -+:10C970000A15521DBCF800E092B2964502D207207B -+:10C98000BDE8FC81ACF8002017222A70A5F80160F0 -+:10C99000A5F803300522CDE900423B462A46FFF7C1 -+:10C9A000DFFD0020ECE770B50C4615464821204617 -+:10C9B00015F03BF904F1080044F81C0F00204FF675 -+:10C9C000FF71E06161842084A5841720E08494F8DD -+:10C9D0002A0040F00A0084F82A0070BD4FF6FF726A -+:10C9E0000A800146042007F0EFBB30B585B00C4645 -+:10C9F0000546FFF780FFA18E284629B101218DF859 -+:10CA000000106946FAF750FB0020E0622063606383 -+:10CA100005B030BDB0F84000704700005000002065 -+:10CA200090F84620920703D4408808800020F3E75E -+:10CA30000620F1E790F846209207EDD5A0F84410C3 -+:10CA4000EAE70146002009880A0700D5012011F015 -+:10CA5000F00F01D040F00200CA0501D540F00400FB -+:10CA60008A0501D540F010004A0501D540F02000AC -+:10CA70000905D1D540F04000CEE700B5034690F857 -+:10CA80004600C00701D0062000BDA3F8421018469A -+:10CA9000FFF7D7FF10F0760F05D093F8460040F06F -+:10CAA000040083F8460013F8460F40F001001870A8 -+:10CAB000002000BD90F84620520700D511B1B0F813 -+:10CAC0004200A9E71720A7E710F8462F61F3C30239 -+:10CAD0000270A1E72DE9FF4F9BB00E00DDE92B347A -+:10CAE000DDE92978289D25D02878C10703D000F0FA -+:10CAF0003F00192801D9012100E000212046FFF75D -+:10CB0000D9FFB04216D3287841060FD400F03F0178 -+:10CB10001E2909D0218811F47F6F0BD13A884AB1C0 -+:10CB2000A1F57F42FF3A05D0010606D500F03F008F -+:10CB3000122802D004201FB0C4E5FC491D984FF014 -+:10CB4000000A08718DF818A08DF830A00CAA0A60B0 -+:10CB5000ADF81CA0ADF824A02978994601F03F0259 -+:10CB6000701F5B1C04F1180CD3464FF0030ECDF878 -+:10CB700028C01F2A7ED2DFE802F07D7D107D227D55 -+:10CB8000AE7DF77DF67DF57DF47DF77DF37D7D7DD2 -+:10CB9000F27DF17D7D7D7D7DF00094F84610B5F845 -+:10CBA0000100890767D5032E65D14FF40061ADF808 -+:10CBB000241060808DF830E0ADF83400E9E2052EF5 -+:10CBC000F2D1B5F801002083ADF81C00B5F80310D0 -+:10CBD0006183002870D088426ED884F80AB0A4F827 -+:10CBE00008B04FF6FF7020840A9801F0AEF80520D7 -+:10CBF00089F8000002208346029011AB1D9A0A9921 -+:10CC00001B9801F0A5F820B15EE000BF8DF8180078 -+:10CC1000FEE29DF84A00012804D0022089F80100B4 -+:10CC2000102003E0012089F8010002200390002277 -+:10CC300004A912A805F08FFBE8BB9DF8101003981B -+:10CC400088423ED13A88891CA2EB0B00884238DB2F -+:10CC500002990220CDE900010DF146034A46414602 -+:10CC60001B98FFF77DFC02980BF1020B801C81B230 -+:10CC700017AA01E0ACE2B1E0029104A912A805F004 -+:10CC80006AFB02999DF81000CDE9000117AB4A46F6 -+:10CC900041461B98FFF764FC9DF8100011AB0BEBAD -+:10CCA00000011FFA81FB02991D9A084480B202908C -+:10CCB0000A991B9801E004E091E001F049F800288E -+:10CCC000B5D0BBF1020F03D10A208DF818005DE248 -+:10CCD000A7F800B05AE2CDF80CB0072E7ED3B5F815 -+:10CCE00001002083ADF81C00B5F803206283002802 -+:10CCF00075D0904273D84FF0010B84F80AB0B5F8A4 -+:10CD0000050020810020A073E06900F05BFD80B980 -+:10CD1000E16942F6010081F806B0E2694FF4205162 -+:10CD20009180E16981F80AB0E1690881E169002038 -+:10CD30008873F01F20841E984FF0070B6062A4F8E0 -+:10CD400022B00A9801F001F889F800B0012083466A -+:10CD500004900020ADF846002AE026E2B0E147E169 -+:10CD6000EDE01FE2B0E088E04FE000BFBBF1010F53 -+:10CD700015D0E0698079012803D1BDF84400ADF8F1 -+:10CD80000E0004990420CDE9000103AB4A46414658 -+:10CD90001B98FFF7E5FB0498001D80B20490BDF8D6 -+:10CDA0004600ADF80C00ADF80E0005981FFA80FBA8 -+:10CDB00011AB1D9A0A991B9800F0CAFF28B939884F -+:10CDC0000BF1040005908142D0D2BBF1010F3FF47A -+:10CDD0001BAFE0698079012808D001E098E023E0EA -+:10CDE000BDF84410A1F57F40FF3803D1BDF84400E1 -+:10CDF000ADF80E0004990420CDE9000103AB4A46CA -+:10CE000041461B98FFF7ACFB62E7072E01D0152EB9 -+:10CE10007ED1B5F801102183ADF81C10B5F80320C0 -+:10CE2000628309B1914201D90120EFE60121A1728B -+:10CE3000A4F808B084F80EB0052E07D0C0B2691D62 -+:10CE4000E26905F069FA00287FF4DEAE4FF6FF7064 -+:10CE5000208401A806AA09A9CDF800B080E88603BD -+:10CE60002878214600F03F031D9A1B98FFF790FB9E -+:10CE70008246208BADF81C0088E10120032EC7D12B -+:10CE80004021ADF82410B5F801102183ADF81C1035 -+:10CE90000AAAB8F1000F00D00023CDE902030492E2 -+:10CEA0001D98CDF80480009038880022401E83B27F -+:10CEB0001B9800F0CDFF8DF8180050BB0B2189F8AE -+:10CEC0000010BDF8280038E04FF0010C052E9FD16E -+:10CED0008020ADF82400B5F801102183B5F80300D7 -+:10CEE0002084ADF81C10B0F5007F01D907208DE635 -+:10CEF00040F47C42228412A8B8F1000F00D0002335 -+:10CF0000CDE90330CDE9018C1D980090388801E00F -+:10CF10009CE007E0401E83B21B9800F099FF8DF85B -+:10CF2000180028B18328A7D10220C7E050000020B4 -+:10CF30000D2189F80010BDF84800401C25E1C80902 -+:10CF400000EB40020EEB8200B04203D948067DD5CB -+:10CF500058461AE1B5F80110ADF81C102A785206AF -+:10CF600008D506228DF830202A78120605D58DF8CE -+:10CF700030B02FE107228DF830200323CDE9023BAA -+:10CF8000DDF878C0CDF810B01D9AA6EB000800922D -+:10CF9000CDF804C01FFA88F300221B9800F02EFD84 -+:10CFA0008DF818008DF830B0297849060DD5208805 -+:10CFB000C00506D5208BBDF81C10884201D1C4F8ED -+:10CFC00024B058468DF818B0DFE0832801D14FF027 -+:10CFD000020A4FF48070ADF82400BDF81C002083D5 -+:10CFE000A4F820801E986062032060841321C9E0A9 -+:10CFF000052E2BD3B5F80110ADF81C10A28F32B35B -+:10D00000A2F57F43FE3B29D008228DF8302005236E -+:10D01000CDE9023BDDF878C0CDF810B01D9A80B2A2 -+:10D02000CDF804C040F400430092B5F803201B98EB -+:10D0300000F0E4FC4FF400718DF818008DF830B06A -+:10D04000ADF82410832813D010B301E0DBE005E035 -+:10D05000A08FA0F57F41FE3907D0D9E00B228DF8D3 -+:10D0600030204FF6FE72A287D1E7A4F83CB0CFE0A3 -+:10D0700000942B4631461E9A1B98FFF770FB8DF8E3 -+:10D08000180008B183284BD1BDF81C0020834BE762 -+:10D0900000942B4631461E9A1B98FFF760FB8DF8D3 -+:10D0A0001800E8BBE18FA06B0844831D8DE888035E -+:10D0B0004388828801881B98FFF753FC824665E00D -+:10D0C00095F80180022E6FD15FEA080002D0B8F116 -+:10D0D000010F7FD109208DF8300007A800908DF84E -+:10D0E00034804346002221461B98FFF71CFC8DF834 -+:10D0F00036008DF837B050B9B8F1010F11D0B8F142 -+:10D10000000F04D1A08FA0F57F41FF3909D0A08F77 -+:10D1100038B14FF480608DF830B0ADF824000EE0E7 -+:10D1200034E00CA91B98F9F7BFFF82464FF48060EA -+:10D130008DF830B0ADF82400BAF1020F06D0FB48EC -+:10D140000068C07928B18DF8180027E0A4F818808D -+:10D1500042E0BAF1000F03D081208DF818003BE0C7 -+:10D1600007A800904346012221461B98FFF7DBFBEE -+:10D170008DF8180021461B98FFF7BDFB9DF818009D -+:10D1800020B9192189F80010012038809DF830005D -+:10D1900020B10CA91B98F9F787FF8246BAF1000F5E -+:10D1A00033D019E0062031E514E02078000711D5CE -+:10D1B000012E0FD10A208DF83000E088ADF8340040 -+:10D1C00004201B9907F000F80820ADF824007FE543 -+:10D1D000480618D54FF0040A2088BDF824100843EB -+:10D1E0002080BDF8240080050BD5A18FA1F57F40DC -+:10D1F000FE3806D11E98E06228982063A6864FF07C -+:10D20000030A504697E4042000E59DF8180078B121 -+:10D21000012089F80000297889F80110BDF81C1058 -+:10D22000A9F802109DF8180089F80400052038803C -+:10D230002088BDF8241088432080E2E72DE9FF4FC5 -+:10D240008846087895B0012181404FF20900249C5E -+:10D250000140ADF820102088DDF88890A0F57F42CD -+:10D260004FF0000AFF3A02D029B1000703D5012090 -+:10D2700019B0BDE8F08F239E4FF0000B0EA886F882 -+:10D2800000B018995D460988ADF83410A7498DF8AB -+:10D290001CB0179A0A718DF838B0086098F8000031 -+:10D2A00001283BD0022809D003286FD1307820F024 -+:10D2B0003F001D303070B8F80400E08098F800108E -+:10D2C0000320022904D1317821F03F011B31317054 -+:10D2D00094F84610090759D505ABB9F1000F13D0E2 -+:10D2E000002102AA82E80B000720CDE90009BDF861 -+:10D2F0003400B8F80410C01E83B20022159800F064 -+:10D30000A7FD0028D1D101E0F11CEAE7B8F804003C -+:10D31000A6F80100BDF81400C01C04E198F805103F -+:10D320008DF81C1098F80400012806D04FF4007AFC -+:10D3300002282CD00328B8D16BE12188B8F8080066 -+:10D3400011F40061ADF8201020D017281CD3B4F8D8 -+:10D350004010814218D3B4F84410172901D38142F8 -+:10D3600012D1317821F03F01C91C3170A6F80100BB -+:10D370000321ADF83410A4F8440094F8460020F0DE -+:10D38000020084F8460064E105257DE176E120880D -+:10D3900008F1080700F4FE60ADF8200010F0F00F6F -+:10D3A0001BD010F0C00F03D03888228B9042EBD1F5 -+:10D3B00099B9B878C00710D0B9680720CDE902B193 -+:10D3C000CDF804B00090CDF810B0FB88BA88398849 -+:10D3D000159800F013FB0028D6D12398BDF8201033 -+:10D3E000401C80294ED006DC10290DD020290BD0FE -+:10D3F000402987D124E0B1F5807F70D051456DD0B0 -+:10D40000B1F5806F97D1DDE0C80601D5082000E0B6 -+:10D41000102082460DA907AA0520CDE902218DF82A -+:10D420003800ADF83CB0CDE9049608A93888CDE9BC -+:10D4300000015346072221461598FFF7A9F8A7E0F7 -+:10D440009DF81C2001214FF00A0A002A9BD105AB50 -+:10D45000B9F1000F00D00020CDE902100720CDE97E -+:10D460000009BDF834000493401E83B2218B0022D2 -+:10D47000159800F0EDFC8DF81C000B203070BDF805 -+:10D48000140020E09DF81C2001214FF00C0A002A16 -+:10D4900022D113ABB9F1000F00D00020CDE902106A -+:10D4A0000720CDE900090493BDF83400228C401E0A -+:10D4B00083B2218B159800F0CBFC8DF81C000D2059 -+:10D4C0003070BDF84C00401CADF8340005208DF8DC -+:10D4D0003800208BADF83C00BBE000E028E0388845 -+:10D4E000218B88427FF450AF9DF81C004FF0120A48 -+:10D4F00000281AD1606A98B1B878C0073FF444AFE9 -+:10D50000BA680720CDE902B2CDF804B00090CDF89A -+:10D5100010B0FB88BA88159800F070FA8DF81C00DE -+:10D52000132030700120ADF8340092E0500000204C -+:10D530003988208B8142D5D19DF81C004FF0160A06 -+:10D540000028A06B08D0E0B34FF6FF7000215F46C3 -+:10D55000ADF808B0019027E068B1B978C907C1D12A -+:10D56000E18F0DAB0844821D03968DE80C024388C1 -+:10D570008288018809E0B878C007BFD0BA680DABCF -+:10D5800003968DE80C02BB88FA881598FFF7E9F935 -+:10D5900005005ED0072D72D076E0019005AA02A9A1 -+:10D5A0002046FFF71FF90146E28FBDF808008242CE -+:10D5B00001D00029F1D0E08FA16B084407800198C9 -+:10D5C000E08746E09DF81C004FF0180A40B1208B20 -+:10D5D000C8B13888208321461598FFF78CF938E0C8 -+:10D5E00004F118000090237E012221461598FFF7D0 -+:10D5F0009AF98DF81C000028EDD119203070012017 -+:10D60000ADF83400E7E7052521461598FFF773F9D3 -+:10D610003AE0208800F40070ADF8200050452DD18C -+:10D62000A08FA0F57F41FE3901D006252CE0D8F867 -+:10D6300008004FF0160A48B1A063B8F80C10A18793 -+:10D640004FF6FF71E187A0F800B002E04FF6FF70DF -+:10D65000A087BDF8200030F47F611AD07823002223 -+:10D660000420159906F006FD98F800002071208826 -+:10D67000BDF82010084320800EE000E00725208838 -+:10D68000BDF8201088432080208810F47F6F1CD0C4 -+:10D690003AE02188814321809DF8380020B10EA90D -+:10D6A0001598F9F701FD05469DF81C000028EBD000 -+:10D6B00086F801A001203070208B70809DF81C003E -+:10D6C00030710520ADF83400DEE7A18EE1B1189885 -+:10D6D0000DAB0088ADF834002398CDE90304CDE903 -+:10D6E0000139206B0090E36A179A1598FFF7F2F959 -+:10D6F000054601208DF838000EA91598F9F7D4FCDD -+:10D7000000B10546A4F834B094F8460040070AD5A5 -+:10D710002046FFF796F910F0760F04D114F8460F63 -+:10D7200020F0040020701898BDF8341001802846BD -+:10D730009EE500B585B0042806D102208DF80000D2 -+:10D7400088B26946F9F7B0FC05B000BD10B5384C99 -+:10D750000B782268012B02D0022B2AD111E013781A -+:10D760000BB1052B01D10423137023688A889A809A -+:10D770002268CB88D38022680B8913814989518123 -+:10D780000DE08B8893802268CB88D38022680B8938 -+:10D7900013814B8953818B899381096911612168B8 -+:10D7A000F9F782FC226800210228117003D00028BA -+:10D7B00000D0812010BD832010BD806B002800D0D8 -+:10D7C000012070478178012909D10088B0F5205FD8 -+:10D7D00003D042F60101884201D1002070470720A2 -+:10D7E0007047F0B587B0002415460E460746ADF8E1 -+:10D7F000144010E0069801882980811DCDE902417E -+:10D800000721019404940091838842880188384656 -+:10D8100000F0F4F830B906AA05A93046FEF7E2FF99 -+:10D820000028E7D0822800D1002007B0F0BD00001A -+:10D830005000002010B58B7883B102789A4205D150 -+:10D840000B885BB102E08B79091D4BB18B789A4252 -+:10D85000F9D1B0F801300C88A342F4D1002010BDFA -+:10D86000812010BD072826D012B1012A27D103E05C -+:10D87000497801F0070102E04978C1F3C2010529A6 -+:10D880001DD2DFE801F00318080C12000AB10320D2 -+:10D8900070470220704704280DD250B10DE00528D2 -+:10D8A00009D2801E022808D303E0062803D00328EB -+:10D8B00003D005207047002070470F20704781205B -+:10D8C0007047C0B282060BD4000607D5FE48807AA6 -+:10D8D0004143C01D01EBD00080B27047084670473D -+:10D8E0000020704770B513880B800B781C0625D577 -+:10D8F000F54CA47A844204D843F01000087000204C -+:10D9000070BD956800F0070605EBD0052D78F54051 -+:10D9100065F304130B701378D17803F0030341EA25 -+:10D92000032140F20123B1FBF3F503FB15119268CB -+:10D93000E41D00FB012000EBD40070BD906870BDB9 -+:10D9400037B51446BDF8041011809DF804100A067E -+:10D950001ED5C1F30013DC49A568897A814208D835 -+:10D96000FE2811D1C91DC9085A422846F5F73FFBC8 -+:10D970000AE005EBD00100F0070201250878954088 -+:10D98000A843934018430870207820F010002070BE -+:10D990003EBD2DE9F0410746C81C0E4620F00300AD -+:10D9A000B04202D08620BDE8F081C74D0020344649 -+:10D9B0002E60AF802881AA72E8801AE0E988491CAD -+:10D9C000E980810614D4E17800F0030041EA0020E8 -+:10D9D00040F20121B0FBF1F201FB12012068FFF7D8 -+:10D9E00070FF2989084480B22881381A3044A06029 -+:10D9F0000C3420784107E1D40020D4E72DE9FF4F13 -+:10DA000089B01646DDE9168A0F46994623F440454B -+:10DA1000084600F00DFB04000FD0099802F0E6FF65 -+:10DA20000290207800060AD5A748817A02988142A0 -+:10DA300005D887200DB0BDE8F08F0120FAE7224617 -+:10DA400001A90298FFF74EFF834600208DF80C00D5 -+:10DA50004046B8F1070F1AD001222146FFF702FF16 -+:10DA60000028E7D12078400611D502208DF80C005F -+:10DA7000ADF81070BDF80400ADF81200ADF81460F8 -+:10DA80001898ADF81650CDF81CA0ADF818005FEA54 -+:10DA9000094004D500252E46A84601270CE0217830 -+:10DAA000E07801F0030140EA012040F20121B0FBDF -+:10DAB000F1F2804601FB12875FEA494009D5B8457B -+:10DAC00007D1A178207901F0030140EA0120B0429A -+:10DAD00001D3BE4201D90720ACE7A8191FFA80F98B -+:10DAE000B94501D90D20A5E79DF80C0028B103A97F -+:10DAF0000998F9F7D7FA00289CD1B84507D1A07842 -+:10DB00004FEA192161F30100A07084F804901A987B -+:10DB100000B10580199850EA0A0027D0199830B151 -+:10DB20000BEB06002A46199913F0E6FF0EE00BEB0B -+:10DB300006085746189E099803F09AF82B46F61DDA -+:10DB4000B5B239464246009502F031FC224601A9A1 -+:10DB50000298FFF7C7FE9DF80400224620F010004F -+:10DB60008DF80400DDE90110FFF7EAFE002061E70F -+:10DB70002DE9FF4FDFF8509182461746B9F806109D -+:10DB8000D9F8000001EB410100EB810440F20120D3 -+:10DB9000B2FBF0F185B000FB11764D46DDF84C800C -+:10DBA00031460698FFF78DFE29682A898B46611A4F -+:10DBB0000C3101441144AB8889B28B4202D88420D5 -+:10DBC00009B038E70699CDB2290603D5A90601D5D3 -+:10DBD0008520F5E7B9F806C00CF1010C1FFA8CFCA2 -+:10DBE000A9F806C0149909B1A1F800C0A90602D588 -+:10DBF000C4F8088007E0104480B2A9F80800191A98 -+:10DC000001EB0B00A0602246FE200699FFF798FE6C -+:10DC1000E77026712078390A61F30100320AA17891 -+:10DC200040F0040062F30101A17020709AF8020034 -+:10DC30006071BAF80000E08000262673280602D53D -+:10DC400099F80A7000E00127A80601D54FF00008F6 -+:10DC50004D4600244FF007090FE0CDE90268019618 -+:10DC6000CDF800900496E9882046129B089AFFF7A9 -+:10DC7000C5FE0028A4D1641CE4B2BC42EDD3002050 -+:10DC80009EE72DE9F047804600F0D2F9070005D065 -+:10DC9000002644460C4D40F2012919E00120BDE860 -+:10DCA000F087204600F0C4F90278C17802F0030240 -+:10DCB00041EA0222B2FBF9F309FB13210068FFF7E6 -+:10DCC00000FE304486B201E0BC060020641CA4B211 -+:10DCD000E988601E8142E4DCA8F10100E88028891F -+:10DCE000801B288100203870D9E710B5144631B167 -+:10DCF000491E218002F07AFEA070002010BD012094 -+:10DD000010BD10B5D24904460088CA88904201D39C -+:10DD1000822010BD096800EB400001EB80025079C1 -+:10DD2000A072D08820819178107901F0030140EA37 -+:10DD30000120A081A078E11CFFF7D4FD206120889C -+:10DD4000401C2080E080002010BD0121018270472E -+:10DD50002DE9FF4F85B04FF6FF788246A3F800808B -+:10DD600048681F460D4680788DF806004868008890 -+:10DD7000ADF8040000208DF80A00088A0C88A04243 -+:10DD800000D304462C8241E0288A401C2882701D62 -+:10DD90006968FFF74FFDB8BB3988414501D1601E66 -+:10DDA00038806888A04236D3B178307901F0030119 -+:10DDB00040EA012901A9701DFFF73CFD20BB29891C -+:10DDC00041452CD0002231460798FFF74BFDD8B9CA -+:10DDD0002989494518D1E9680391B5F80AC0D6F8F0 -+:10DDE00008B05046CDF800C002F042FFDDF800C098 -+:10DDF0005A460CF1070C1FFA8CFC4B460399CDF8E0 -+:10DE000000C002F097FA50B1641CA4B2204600F0A2 -+:10DE10000FF90600B8D1641E2C828220D0E67C80E7 -+:10DE20007079B871F088B8803178F07801F003012A -+:10DE300040EA01207881A7F80C90504602F0D6FD08 -+:10DE4000324607F10801FFF74DFD38610020B7E6C3 -+:10DE50002DE9FF4F87B081461C469246DDF860B041 -+:10DE6000DDF85480089800F0E3F805000CD048462F -+:10DE700002F0BCFD2978090608D57549897A8142E6 -+:10DE800004D887200BB0D6E50120FBE7CAF30906CA -+:10DE90002A4601A9FFF726FD0746149807281CD03B -+:10DEA00000222946FFF7DEFC0028EBD12878400647 -+:10DEB00013D501208DF808000898ADF80C00BDF8C6 -+:10DEC0000400ADF80E00ADF81060ADF8124002A9E4 -+:10DED0004846F9F7E7F80028D4D12978E87801F026 -+:10DEE000030140EA0121AA78287902F0030240EAFE -+:10DEF0000220564507D0B1F5007F04D9611E81424A -+:10DF000001DD0B20BEE7864201D90720BAE7801B5E -+:10DF100085B2A54200D92546BBF1000F01D0ABF870 -+:10DF20000050179818B1B9192A4613F0E5FDB8F159 -+:10DF3000000F0DD03E4448464446169F02F0AAFE0C -+:10DF40002146FF1DBCB232462B46009402F068FA0F -+:10DF5000002097E72DE9F04107461D461646084682 -+:10DF600000F066F804000BD0384602F03FFD21783F -+:10DF7000090607D53649897A814203D8872012E5F8 -+:10DF8000012010E522463146FFF7ACFC65B121784F -+:10DF9000E07801F0030140EA0120B0F5007F01D8EC -+:10DFA000012000E0002028700020FCE42DE9F04171 -+:10DFB00007461D461646084600F03AF804000BD006 -+:10DFC000384602F013FD2178090607D52049897AE1 -+:10DFD000814203D88720E6E40120E4E4224631466A -+:10DFE000FFF7AEFCFF2D14D02178E07801F003029A -+:10DFF00040EA022040F20122B0FBF2F302FB1300E0 -+:10E0000015B900F2012080B2E070000A60F301014E -+:10E0100021700020C7E410B50C4600F009F828B1C3 -+:10E02000C18821804079A070002010BD012010BD62 -+:10E030000749CA88824209D340B1096800EB400011 -+:10E040006FF00B0202EB800008447047002070471D -+:10E05000BC06002010B50C4601F03AFD80B3204606 -+:10E0600000F0B7FA68B32278102A09D0112A07D035 -+:10E07000022A05D0032A03D0162A2ED0FFDF1DE086 -+:10E08000A0781E282BD00EDC0C2824D008DC092810 -+:10E0900027D2DFE800F013261726261E1E1A1C00C2 -+:10E0A00012281ED11BE0302819D01ADDA0F13A0049 -+:10E0B000032816D2DFE800F011150B00002010BD78 -+:10E0C00013E010E043F20200F9E70420F7E70D2027 -+:10E0D000F5E70F20F3E70820F1E71120EFE707202D -+:10E0E000EDE70320EBE7FFDFE8E7FFDFE6E700F01F -+:10E0F00070BA70B50346002002466FF02F050EE09F -+:10E100009C5CA4F130060A2E02D34FF0FF3070BDA4 -+:10E1100000EB800005EB4000521C2044D2B28A4242 -+:10E12000EED370BD30B50A240AE0B0FBF4F304FB73 -+:10E1300013008D18303005F8010C521E1846D2B26B -+:10E14000002AF2D130BD30B500234FF6FF7510E044 -+:10E15000040A44EA002084B2C85C6040C0F303149F -+:10E16000604005EA00344440E0B25B1C84EA4010A1 -+:10E170009BB29342ECD330BD10B50AF0FFF90428EE -+:10E1800003D00AF0FBF9052802D108F0A0FC28B959 -+:10E190000BF056FB20B107F047FB08B1012010BD82 -+:10E1A000002010BD0178406819B190F8721059B97B -+:10E1B00001E001F017BD90F8041129B190F80401B5 -+:10E1C000042801D0012070470020704770B50C462C -+:10E1D0000546062102F042FC606008B1002006E01E -+:10E1E0000721284602F03AFC606018B10120207037 -+:10E1F000002070BD022070BD2DE9FC470C4606468C -+:10E200006946FFF7E3FF00287DD19DF8000050B17B -+:10E2100007F09CFAB0427CD0214630460EF0A1F9BE -+:10E22000002873D12DE008F065F9B04271D0214685 -+:10E2300030460CF041FC002868D1019D95F8C800DB -+:10E2400022E0012000E00020804695F835004FF0E4 -+:10E25000010A4FF00009F0B195F8360080071AD591 -+:10E2600084F8019084F800A084F80290A68095F8C4 -+:10E270003710A171298F2181698F618185F83590CF -+:10E2800044E0019D95F8040158350028DBD1A87EB3 -+:10E290000028D8D0D5E7304602F0FCFC070000D1BA -+:10E2A000FFDF384601F051FE40B184F801900E21A5 -+:10E2B0002170A680E08084F802A027E0304602F0BA -+:10E2C000D7FC070000D1FFDFB8F1000F21D038469E -+:10E2D00001F0CCFEB8B19DF8000038B90198D0F833 -+:10E2E000F0004188B14201D180F80090304607F03B -+:10E2F000C3F884F801900B21217084F80290A68065 -+:10E30000E97EA17100E004E085F81A900120BDE8E3 -+:10E31000FC870020FBE71CB56946FFF757FF00B1FB -+:10E32000FFDF684601F06CFCF94900208968A1F81C -+:10E33000CA001CBD2DE9FC4104460E46062002F031 -+:10E3400037FB0546072002F033FB2844C7B20025FF -+:10E35000A8463E4417E02088401C80B22080B0428E -+:10E3600002D34046A4F8008080B2B84204D3B04241 -+:10E3700002D20020BDE8FC816946FFF727FF002894 -+:10E38000F8D06D1CEDB2AE42E5D84FF6FF7020809C -+:10E390001220EFE738B54FF6FF70ADF800000DE042 -+:10E3A0000621BDF8000002F06BFB04460721BDF812 -+:10E3B000000002F065FB0CB100B1FFDF00216846F0 -+:10E3C000FFF7B8FF0028EBD038BD2DE9F047D1A109 -+:10E3D0000F79D1F8008007F0BDF810F003F8CF4CAA -+:10E3E0004FF004091020A4F8389060874FF6FF76AC -+:10E3F000A4F85460A4F85660002584F8315004F85D -+:10E400002E5BC6492570A5713E39A573C1F87B8086 -+:10E4100081F87F707B31481E0CF029FD25751B208B -+:10E42000E0824FF4A47121836083A1830321A1774B -+:10E4300084F81F9020846084B848A1843E38057019 -+:10E440004680B3480C300570B448103805704680DB -+:10E45000BDE8F08770B5AE4C0D466060217006F0E7 -+:10E46000F3FFFFF797FFFFF7B0FF207809F031FDCA -+:10E4700008F02EF9217860680CF00CFC20780FF081 -+:10E4800011FA28460AF071FE07F06AF921786068EF -+:10E490000EF068F9BDE870400FF0A4BF10B501247C -+:10E4A0000AB1002010BD21B1012903D0002420466B -+:10E4B00010BD022111F0C6FBF9E72DE9F047040079 -+:10E4C00000D1FFDF954D002695F8310058B16670F8 -+:10E4D0001620207095F83200A07095F83300E07097 -+:10E4E00085F8316068E0287840B12C22A91C2046CC -+:10E4F00013F002FB102020702E705DE095F82E00C6 -+:10E5000060B10120E07095F82F00A07095F8300000 -+:10E5100060701120207085F82E604DE07F48022148 -+:10E5200056308246FFF706FF00B1FFDFB5F8569080 -+:10E53000062002F03DFA0746072002F039FA384477 -+:10E54000C7B2781C00F0FF08B5F85600B84212D1E7 -+:10E55000204607F04BFF50BB95F8340070B366704F -+:10E56000132020702021A01C13F03DFB0220A0707E -+:10E5700085F8346020E040451AD1204607F09CF829 -+:10E58000E0B12078132817D1A0783C2814D1A088B6 -+:10E59000072102F063FA050000D1FFDF288806F0AA -+:10E5A0006BFFA088072102F06BFA00B1FFDF03E0E8 -+:10E5B0002146FFF721FE08B1012049E7022150461C -+:10E5C000FFF7B8FE18B9B5F856104945BCD1002080 -+:10E5D0003EE772E710B5514C207828B10A21BDE81A -+:10E5E0001040102001F0A1BAFFF7C6FD08B10C20C1 -+:10E5F00002E00FF042FF00202071012060710A212B -+:10E60000E170207010BD70B5444D0446287828B1E3 -+:10E61000BDE870403221102001F087BA207818B18F -+:10E62000012801D0122010E001F090FA20B110F082 -+:10E630006EF808B10C2008E0207801F057FA04F1D8 -+:10E640001703E21D611C0FF06FFF28710120687134 -+:10E650003221E970287070BD70B5304C05462078C5 -+:10E6600028B1BDE870400B21102001F05EBA287877 -+:10E6700018B1012801D012200EE0FFF77DFD08B18E -+:10E680000C2009E0287801F031FA691C0FF0BCFE7B -+:10E6900008B1002000E007202071012060710B21EB -+:10E6A000E170207070BD10B51C4C217829B130216B -+:10E6B000BDE81040102001F038BA008810F02AF8A8 -+:10E6C000302110B10020207100E021710120607123 -+:10E6D000E170207010BD70B5104C0546207828B14F -+:10E6E000BDE870403121102001F01FBA01F02EFA70 -+:10E6F00008B10C2005E0287800F0010010F004F8C3 -+:10E7000000202071012060713121E170207070BD06 -+:10E7100058000020FFFFFFFF1F0000000607002039 -+:10E7200010B5FB4C207828B13421BDE810401020F2 -+:10E7300001F0FBB901F00AFA20B10FF0E8FF08B1CF -+:10E740000C2002E00FF044FF0020207101206071D6 -+:10E750003421E170207010BDED48017819B10F210E -+:10E76000102001F0E2B900210171102181700F2108 -+:10E77000C170FF2181714FF6FF710181E549496840 -+:10E780000A7882728A8882814988C1810121417117 -+:10E790000170704710B5DE4C207828B12B21BDE800 -+:10E7A0001040102001F0C1B90821A01D05F029FA80 -+:10E7B00000202071012060712B21E170207010BDBC -+:10E7C00070B5D34C217829B1BDE8704043211020A9 -+:10E7D00001F0ABB990F90000042816D0032814D03A -+:10E7E00098B1011D11D010F1080F0ED010F10C0FCF -+:10E7F0000BD010F1100F08D010F1140F05D010F14C -+:10E80000280F02D01220207103E0002506F020F826 -+:10E8100025714320E07001206071207077E710B50A -+:10E82000BB4C217829B12A21BDE81040102001F00D -+:10E830007CB9A31D012200F1100110F03AFE002066 -+:10E8400020711020A0702A20E070012060712070DB -+:10E8500010BD70B5AE4C0546207828B1BDE87040BB -+:10E860004621102001F061B909F088FE052804D086 -+:10E87000284609F01BFB002000E00C20207101203D -+:10E8800060714621E170207041E770B5A04C0546EB -+:10E89000207828B1BDE870404421102001F045B92E -+:10E8A00001F054F938B10C2020710120607144212D -+:10E8B000E17020702BE72946002006F04CFE002076 -+:10E8C000F2E770B5924C0546207828B1BDE870405B -+:10E8D0004221102001F029B909F091FB50B10AF052 -+:10E8E000A2FF38B128780AF064FC287808F026F9ED -+:10E8F000002000E00C202071012060714221E170B5 -+:10E90000207004E770B5824C0546207828B1BDE838 -+:10E9100070401721102001F008B901F017F938B143 -+:10E920000C202071012060711721E1702070EEE64B -+:10E930002946012006F00FFE0020F2E738B5744D9D -+:10E940000446287828B1BDE838404D21102001F058 -+:10E95000ECB8A079E179884213D021791F2910D829 -+:10E9600061791F290DD80022114612F0C7FA40B96B -+:10E970000022E079114612F0C1FA10B9207A072876 -+:10E9800001D9122012E04FF6FF70ADF800000AF036 -+:10E9900057FF90B909F0F2FD78B900216846FFF7FA -+:10E9A000C9FC50B1204605F070FE002028710120FE -+:10E9B00068714D21E970287038BD0C20F6E72DE90B -+:10E9C000FC47534C054694F82E0020B12821112015 -+:10E9D00001F0ABF89BE4282084F83000012184F892 -+:10E9E0002E10A8784FF000091A2825D00EDC162822 -+:10E9F00031D2DFE800F0303030303021303030308C -+:10EA00003030303030303030302121212A2822D0AF -+:10EA10000BDCA0F11E000C281DD2DFE800F01C1C4E -+:10EA20001C1C1C1C1C1C1C1C1C0D3A38042812D25B -+:10EA3000DFE800F0110211022888B0F5706F0AD2E9 -+:10EA40001F20884684F82F0028886946FFF7BEFB00 -+:10EA500018B1022019E0122017E09DF80000019F74 -+:10EA6000002806D007F5B377019E05D106F1ED0623 -+:10EA700004E007F1EC07F7E706F267166846FFF7D0 -+:10EA800091FB08B1387818B10C2084F82F003EE4CF -+:10EA900087F80080A878307084F82F90684601F0DD -+:10EAA000AFF834E47CB51A4C0546207820B1252116 -+:10EAB000102001F03AF87CBD28886946FFF786FBF4 -+:10EAC000020013484FF00001A0F13E000DD00222D9 -+:10EAD000227140F8461F0171E1801020A0702520AE -+:10EAE000E0700120607120707CBD019A134658329D -+:10EAF00082F83E109E68C0F846601E7B80F84A602F -+:10EB000092F83E60002EF3D12888E080E5E700000F -+:10EB1000060700205800002010B540B10478406876 -+:10EB200013B1B0F8480003E0B0F84A0000E0FB2061 -+:10EB30001B2908D3814206D8B2F5A47F03D340F63F -+:10EB40004800824201D9122010BD002010BD2DE9DD -+:10EB5000FC41FA4D0446287828B1BDE8FC4150211B -+:10EB6000102000F0E2BF4FF0010885F805801F215A -+:10EB700029711021A9705021E9702188E98085F858 -+:10EB8000008020886946FFF721FB08B102200DE0D4 -+:10EB90002289E18801236846FFF7BEFF30B9A288C9 -+:10EBA000618800236846FFF7B7FF10B12871BDE800 -+:10EBB000FC819DF800103A20019E002749B186F89B -+:10EBC0008981019991F8C81106F5C476B9B1287107 -+:10EBD00013E086F8FD80019991F82011FC36002998 -+:10EBE000F5D12F71E08870802089B0806088F08036 -+:10EBF000A0883081012201990CE07770D7E72F714E -+:10EC0000E08870802089B0806088F080A0883081A2 -+:10EC100001990022304610F091FD86F80080ECE763 -+:10EC200070B5C64D044686B0287830B106B0512183 -+:10EC3000BDE87040102000F078BF01206871002608 -+:10EC40002E711021A9705121E9702870208803A924 -+:10EC5000FFF7BCFA18B10220287106B057E59DF8FD -+:10EC60000C0040B100220499E088B1F84830984285 -+:10EC700003D9C01A02E00122F5E70020E88063888A -+:10EC8000B1F84A00834201D9181A00E00020288117 -+:10EC9000009601960296E088ADF802002089ADF852 -+:10ECA00004006088ADF80600A088ADF8080068464A -+:10ECB00010F044FD2089BDF80410401A6881A08836 -+:10ECC000BDF80810401AA881E088BDF80210401A6B -+:10ECD000E988884200DC0846E8806088BDF80610B4 -+:10ECE000401A2989884200DC08462881B5E770B5BA -+:10ECF000924D0446287828B1BDE870403E2110208E -+:10ED000000F013BF00F022FF20B10FF000FD08B1AA -+:10ED10000C2008E0E2792078611C0FF07BFE08B13E -+:10ED2000002000E002202871012068713E21E97076 -+:10ED30002870ECE47CB5814C05461F2084F82F0038 -+:10ED400028886946FFF742FA18B1022084F82F009C -+:10ED50007CBDAA7802B90322EB7803B903239DF89E -+:10ED600000603A2501210020002E019E06D086F881 -+:10ED70009311019E96F8DC6146BB1FE086F80711EF -+:10ED8000019E96F82C613EB9019E96F806611EB967 -+:10ED9000019E96F87B6016B184F82F500AE0019D21 -+:10EDA00085F80611019981F80821019981F8093146 -+:10EDB00084F82F00019981F807017CBD019E96F827 -+:10EDC00092611EB9019E96F87B6016B184F82F50AF -+:10EDD0000AE0019D85F89211019981F89421019929 -+:10EDE00081F8953184F82F00019981F893017CBD59 -+:10EDF000524930B491F82E2022B1562130BC112056 -+:10EE000000F093BE562281F83020012281F82E2096 -+:10EE10008378DA0802D1C278D40801D0122004E045 -+:10EE20005B0701D4520704D5112081F82F0030BCB4 -+:10EE3000704730BC7EE770B5404C0546207828B15D -+:10EE4000BDE870401D21102000F06FBE1F20207112 -+:10EE5000012060711D21E170207009F08FFB0428F2 -+:10EE60000BD0052809D0A9791220012907D031B18A -+:10EE7000022904D0032929D101E00C2026E02978B9 -+:10EE800009B1012922D1E97929B1012903D0022947 -+:10EE900001D003291AD1698843F6FD720B1F302077 -+:10EEA000934213D2AB881B1F93420FD22187A888AD -+:10EEB0006087A87907F065FDE87907F0D0FD28782C -+:10EEC000012805D00120002107F0F8FD20711EE483 -+:10EED0000220F8E770B5194C217829B1BDE87040DF -+:10EEE0001E21102000F021BE1F212171012161711E -+:10EEF0001E22E270217002781221012A00D01AB974 -+:10EF0000407818B1012801D0217187E40025012A39 -+:10EF100009D009F033FB0C26052802D008F008FFC1 -+:10EF200088B126717AE407F022FD48B107F031FD7F -+:10EF3000618F208F09F070F803E0000006070020C1 -+:10EF4000122020716AE4257168E42DE9F047F94C3C -+:10EF500007469246B4F84400B7F84A200E4690425D -+:10EF600000D31046804697F85210104600F0D4FDAA -+:10EF7000B4F84610814200D208460546A146B4F8CE -+:10EF80004840B7F84800844200D3044697F851102F -+:10EF900000F0C2FDB9F84A10814200D208464FF491 -+:10EFA000A4721B2C01D0904204D1B8F11B0F0DD0DC -+:10EFB00095420BD0A6F8068035817480B080524609 -+:10EFC0003946304610F0BAFB01203070BDE8F087BA -+:10EFD0002DE9F04786B00546AFF6C800D0E90090AD -+:10EFE000D44E804696F82E0028B12121112000F041 -+:10EFF0009CFD06B0EAE71F2086F82F00212086F846 -+:10F0000030004FF0010A86F82EA0284600F007FED7 -+:10F01000002811D109F0B2FA05280CD009F0AEFA97 -+:10F02000042808D096F8340028B907F063FAA0F550 -+:10F030007F41FF3901D00C20AAE0BE4801AA3E382A -+:10F040000190BD480290BB4806211038039004A8E7 -+:10F0500001F0D4FC04007DD003210FF0DAFFB6F8F4 -+:10F060004E00A4F84800B6F85000A4F84A0096F8FC -+:10F070004D00009096F84C30B6F85020B6F84E107F -+:10F08000208801F07EFD00B1FFDF208806F0F3F953 -+:10F09000218804F10E0000F068FDA8A004F1120719 -+:10F0A000006800900321684604F033FD00206946A3 -+:10F0B0000A5C3A54401CC0B20328F9D3288A608005 -+:10F0C000688AA080A88AE08094F8522094F85110B1 -+:10F0D000B6F8520009F01DF80146A062204609F07A -+:10F0E00038F8002784F85E7084F85F70687900F063 -+:10F0F000FDFC6076D5F80600C4F81A006889E08344 -+:10F10000C4F8089084F80C8084F8F8A0012204F177 -+:10F11000FC012046FFF719FF8DF8007001216846B9 -+:10F1200004F0F7FC9DF8000000F00701C0F3C102F5 -+:10F130001144C0F3401008448DF80000401D2076B3 -+:10F14000092801D208302076002120460FF061FF07 -+:10F15000287B00E010E007F014FC69792879AA1DEB -+:10F1600007F0E5FB50B107F014FC69792879AA1D76 -+:10F1700007F080FC78B118E0092009E0208806F04B -+:10F180007BF92088062101F07BFC00B1FFDF122013 -+:10F1900086F82F002DE72146032007F08FFC20B9C9 -+:10F1A0006A882988204608F0C0FE86F82F000028CB -+:10F1B000F0D0208806F060F92088062101F060FC7C -+:10F1C0000028E7D0FFDF14E738B55A4C207820B18B -+:10F1D0002221102000F0A9FC38BD1F20207101253C -+:10F1E00065712220E070257094F8340018BB09F096 -+:10F1F000C5F9052805D007F07DF9A0F57F41FF3955 -+:10F2000019D000202071684608F055FF0028E3D18E -+:10F210000098008806F030F900980621008801F077 -+:10F220002FFC00B1FFDF444884F834500C380078DC -+:10F23000FCF760FD38BD0C20207138BD2DE9F04190 -+:10F240003C4D044695F82E0028B1BDE8F04123213D -+:10F25000112000F06ABC1F2085F82F00232085F8BC -+:10F260003000012085F82E00618840F67B438A1F1C -+:10F2700030209A4252D2A288961F9E424ED291428C -+:10F280004CD8E188B1F5FA7F48D2218940F677461B -+:10F29000A1F10A03B34241D2B1EBD20F3ED9618949 -+:10F2A000A28991423AD84FF000082088062101F047 -+:10F2B000D5FB06004FF0020707D000F093FC20B109 -+:10F2C000D6F8F000017841B903E085F82F70BDE869 -+:10F2D000F081D6F83C11097809B13A201EE00521E9 -+:10F2E0008171D6F8F0004146A0F80880D6F8F020E9 -+:10F2F000A0885081D6F8F020E0889081D6F8F020E0 -+:10F300002089D081D6F8F000028943899A4204D836 -+:10F310008279082A01D89A4203D3122085F82F0057 -+:10F32000D5E722884280D6F8F000077085F82F10C4 -+:10F33000CDE7000006070020640000201122330002 -+:10F34000FEB5F84C0646207820B12421102000F0AC -+:10F35000ECFBFEBD012565712420E0702570304670 -+:10F3600010F042F808B1002000E0122020710028BF -+:10F37000EFD1EC4884F83C503E38316840F87B1FB0 -+:10F3800031790171002684F83C606946062001F05D -+:10F39000F0FA00B1FFDF684601F0C9FA60B9BDF8C4 -+:10F3A0000470029880F8F850684601F0C0FA18B965 -+:10F3B000BDF80400B842F4D12671FEBD2DE9F0413C -+:10F3C000D84D064695F82E0028B1BDE8F0412C2115 -+:10F3D000112000F0AABB1F2085F82F002C2085F8F3 -+:10F3E0003000012085F82E003088062101F036FB20 -+:10F3F000040007D000F0F6FB20B1D4F8F010087834 -+:10F4000030B901E0022026E0D4F83C01007808B1D0 -+:10F410003A2020E094200027005D10F0010F19D061 -+:10F42000D6F802004860D6F80600886054F8F00F5D -+:10F43000718910228181206806F10C010E3012F0D2 -+:10F440005BFB21680320087021683088488085F8BC -+:10F450002F703CE70C2085F82F0038E72DE9F041AC -+:10F46000B04D04460C26287828B1BDE8F04118219B -+:10F47000102000F05ABB0AF0E3F9012730BB607995 -+:10F48000032824D8A179012921D8A17B03291ED8DA -+:10F49000617BE1B107291AD82179052917D2DFE864 -+:10F4A00001F0030C030303002288202A0FD3618894 -+:10F4B0008A420CD8B1F5804F09D806F0D6F92079E8 -+:10F4C00085F83600204606F098FA064600E0122637 -+:10F4D0002E716F711820E8702F70F8E610B5914CFE -+:10F4E000217829B11A21BDE81040102000F01DBB81 -+:10F4F00001781F2902D91220207106E00021217114 -+:10F500000278411C104606F0FCFA012060711A21B5 -+:10F51000E170207010BD10B5824C217829B12021F6 -+:10F52000BDE81040102000F000BB01781F2902D96F -+:10F530001220207106E0002121710278411C104642 -+:10F5400006F0CEFA012060712021E170207010BD1C -+:10F550002DE9FC41734C217829B1BDE8FC411B2108 -+:10F56000102000F0E2BA012767710C2121710078A8 -+:10F5700000261225012802D0002866D167E006F097 -+:10F5800024F900285ED006F056F900285AD00AF077 -+:10F5900057F900286CD106F06FF994F8360050B195 -+:10F5A000012808D0042806D0002009F005FE00B18B -+:10F5B000FFDF26715CE006F0C9F8A0F57F41FF3956 -+:10F5C00056D10022072101A801F018FA05004FD0FA -+:10F5D00055480321856028460FF0E2FB284606F0D7 -+:10F5E000BAFBB4F84E00A5F84800B4F85000A5F8EE -+:10F5F0004A00B4F8520001214C3409F016FF0146CC -+:10F60000A8620022284608F0CEFF6078009014F827 -+:10F61000043B288834F8022934F84E1901F0B1FA75 -+:10F6200000B1FFDF288805F026FF284609F0C4FD59 -+:10F6300000B1FFDF2671002205F5C4712846FFF7EF -+:10F6400084FC15E006F0C1F890B1257110E008F0D7 -+:10F65000A7FF054609F0E8FC50B9267145B1288896 -+:10F6600005F00AFF2888072101F00AFA00B1FFDF40 -+:10F670001B20E0702770BDE8FC812DE9F041294C8A -+:10F680000646207828B1BDE8F0412D21102000F079 -+:10F690004CBA3088072101F0E1F905004FF001076D -+:10F6A00020D095F8690140B995F86400142801D07C -+:10F6B000152802D195F8AA0150B10C202071102014 -+:10F6C000A0702D20E0703088E08067712770FEE523 -+:10F6D0001022B11C05F5B57012F00EFA85F86971AB -+:10F6E0000020EBE70220E9E770B50E4C05462078D4 -+:10F6F00028B1BDE870402E21102000F016BA2888ED -+:10F70000072101F0ABF90221A0B190F869212AB9D3 -+:10F7100090F86420142A09D0152A07D00C202071F3 -+:10F7200009E00000060700205800002080F8691159 -+:10F730000020F4E721711020A0702E20E0702888AE -+:10F74000E08001206071207070BD2DE9FC47FD4C08 -+:10F750000646207828B13821102000F0E6F9BDE8EF -+:10F76000FC8770884BF68032122190420AD848B14B -+:10F770004FF0000830886946FEF728FD20B10220CE -+:10F78000207110E021710EE0019800F15809851CEC -+:10F790002F887288394648460FF0BCFA2888B8424C -+:10F7A000F6D184F80480012060713821E170207066 -+:10F7B000D5E77CB5E34C0546207820B149211020DF -+:10F7C00000F0B3F97CBD28886946FEF7FFFC38B12C -+:10F7D00002202071012060714921E17020707CBD00 -+:10F7E00001987F22014680F8602080F86120002285 -+:10F7F00080F86220A87801F82C0FE8784870287902 -+:10F8000088702271E6E71CB5CE4C217821B15421D5 -+:10F81000102000F08AF91CBD00886946FEF7D6FC6E -+:10F8200048B102202071012060715421E170102143 -+:10F83000A17020701CBD019890F8720000B10120E9 -+:10F8400000212171A071EEE71CB5BE4C217821B1D9 -+:10F850001321102000F069F91CBD00886946FEF7ED -+:10F86000B5FC08B1022005E0019890F82C100129A0 -+:10F8700002D00C20207106E0602100222271095C78 -+:10F8800021720088E080012060711321E170102155 -+:10F89000A17020701CBD2DE9F041AA4C05462078CE -+:10F8A00028B1BDE8F0414A21102000F03EB9288877 -+:10F8B000072101F0D3F8012358B382886D88C688E8 -+:10F8C000418803EB4207BD4217D342F210777E43D3 -+:10F8D000BF107943B6FBF1F1491E89B24FF4FA76B5 -+:10F8E000B14200D931468D4200D22946491C521CF2 -+:10F8F000B1FBF2F15143491E8AB290F8961101B959 -+:10F900000284E2800020207163714A20E07023703D -+:10F91000DDE40220F7E770B58A4C0546207828B16F -+:10F92000BDE870404C21102000F0FFB82888072166 -+:10F9300001F094F890B1A97811F0010180F8D71086 -+:10F9400004D090F8D51009B109F08AFD002020718B -+:10F95000012060714C21E170207070BD0220F6E73B -+:10F9600078490A781AB15221102000F0DEB80278E6 -+:10F970009AB142788AB142881B2A0ED382881B2A08 -+:10F980000BD3C288022A08D36E4A0368423242F877 -+:10F990000A3F40685060002000E0122008710120FA -+:10F9A00048715222CA700870704770B5654C0546A0 -+:10F9B000207828B1BDE870405321102000F0B5B880 -+:10F9C000287800F0010008F0A1FB287800F0010081 -+:10F9D00009F0F7FC00202071012060715321E170D3 -+:10F9E000207070BD70B5574D0646287828B1BDE827 -+:10F9F00070405521102000F098B8012270881146FF -+:10FA000008F087FB04467088012109F00EFD84424E -+:10FA100000D204463088012100F06FF8064601212B -+:10FA2000002000F06AF8304401219630844206D963 -+:10FA300000F19601201AB0FBF1F0401C81B2E98080 -+:10FA400000202871012068715521E970287070BD6F -+:10FA500070B53C4D0446287828B1BDE870404E2171 -+:10FA6000102000F062B800F071F808B10C200DE031 -+:10FA7000601C0EF0A5FF207800F0010005F0F8FEF4 -+:10FA8000207800F0010006F080FF0020287101209E -+:10FA900068714E21E970287070BD70B5294C05461B -+:10FAA000207828B1BDE870404B21102000F03DB80F -+:10FAB00009F0C6FE08B10C2003E0287806F031F802 -+:10FAC00000202071012060714B21E170207070BD19 -+:10FAD00010B50178572907D21B4A52F8211019B1E5 -+:10FAE000801C8847012010BD002010BD18B10228DD -+:10FAF00001D0012070470020704710B5012904D0C3 -+:10FB0000022905D0FFDF204610BDC000503001E0C3 -+:10FB100080002C3084B2F6E7022903D0C000703098 -+:10FB200080B2704780003C30FAE7064A92F83130E4 -+:10FB3000002B06D182F8320082F83310012082F8BF -+:10FB40003100704706070020C420020010B508F0FD -+:10FB500015FD042807D008F011FD052803D009F091 -+:10FB60006FFE002800D0012010BD2DE9FE430025C6 -+:10FB70000F4680460A260421404604F042F84046DB -+:10FB80000FF00EFC062000F013FF044615E0694656 -+:10FB9000062000F0EEFE0AE0BDF80400B84206D0F0 -+:10FBA0000298042241460E3011F07AFF50B16846A7 -+:10FBB00000F0BDFE0500EFD0641E002C06DD002D18 -+:10FBC000E5D005E040460FF0F4FBF5E705B9FFDFAF -+:10FBD000D8F800000FF0A8F8761E01D00028CAD08F -+:10FBE000BDE8FE8390F8721041B990F8C81029B1B1 -+:10FBF00090F8C800042801D00120A2E70020A0E767 -+:10FC0000017801299DD1416891F8D520002A98D02A -+:10FC1000002281F8D520406809F022BC91E710B598 -+:10FC2000038843F6FD711A1F8A4223D24288141FAB -+:10FC30008C421FD29A421DD8C28940F67B43911F45 -+:10FC4000994217D2018A8C1F9C4213D28A4211D842 -+:10FC5000428AB2F5FA7F0DD2828A40F67744A2F149 -+:10FC60000A03A34206D2B2EBD10F03D9C18A028B99 -+:10FC7000914201D9302010BD017911B1012910D173 -+:10FC800007E0417929B1012903D0022901D00329D4 -+:10FC900007D1007B38B1012805D0022803D0032802 -+:10FCA00001D0122010BD002010BD00000844083013 -+:10FCB000424301F14A00104480B27047F0B51D463E -+:10FCC0000446A818059B083000FB03F205F14A0022 -+:10FCD000104486B2B14238BFFFDF0027276067605B -+:10FCE000A760E76027616761A761E76127624FF658 -+:10FCF000FF706762A082A6F1280080B265776080FD -+:10FD0000B0F5004F88BFFFDF608805F13C018842F5 -+:10FD100038BFFFDF6088401B3C3880B220801B2842 -+:10FD200038BF1B202080A777F0BD816188617047B4 -+:10FD30002DE9F04F0D46C188044600F128080089DE -+:10FD400021F4004320F4004221F4004620F400474F -+:10FD50004FF0010A4FF000099A4208D100F4004028 -+:10FD600001F4004188421CBF0020BDE8F08FB7427B -+:10FD70000BD9617FB81B401A083885421BDC08EBA1 -+:10FD800006000021058041801EE06088617F801BA5 -+:10FD9000401AB0F1080B0ED4BBF11B0FB8BFFFDF48 -+:10FDA0005D45D4BF29461FFA8BF1681A0204120C74 -+:10FDB00018BFBA4204DD84F817900020BDE8F08F28 -+:10FDC00008EB06000180428084F817A0BDE8F08FA0 -+:10FDD0002DE9F041044600F12802C08820F40043D8 -+:10FDE000E07D002808BFBDE8F081D0180288438874 -+:10FDF00013448B423CBF0020BDE8F08100279142B4 -+:10FE00009CBF0180478013D9891A0D042D0C4580B1 -+:10FE10000ED0E088A61D20F40040854288BFFFDF99 -+:10FE200030884FF4004121EA0000284330800AE086 -+:10FE3000627F008802F108031044083081B26288B2 -+:10FE4000A01D00F0A8FBE7750120BDE8F08130B4EB -+:10FE5000B0F804C0C488034600F128052CF4004023 -+:10FE60002844A44503D10020188230BC7047B3F861 -+:10FE70000CC00488A44509D34088ACEB040CA0EB6B -+:10FE80000C0084B20CEB0500C01E06E0A4EB0C04D1 -+:10FE90005D7FA4B2AC446044401DB1F800C0A445ED -+:10FEA00088BF0C80B3F80CC0BCF1000F0CBF4FF042 -+:10FEB000010C4FF0000C82F800C00988198230BC98 -+:10FEC00070472DE9F041044600F12801808820F4B4 -+:10FED00000404518208A002808BFBDE8F081A089AD -+:10FEE00010B9A069807F2871A089218A084480B256 -+:10FEF000A08129886A881144814238BFFFDF2888A1 -+:10FF00006D88A2894119002791421AD175B1A08844 -+:10FF1000261D20F40040A84238BFFFDF30884FF490 -+:10FF2000004121EA00002843308009E0627F10444C -+:10FF3000083081B202F108036288201D00F02BFB1B -+:10FF4000A78127820120BDE8F0812DE9F047418992 -+:10FF5000B0F804800027044600F1280A414518BF84 -+:10FF60004FF400493AD000BF21F400405044468885 -+:10FF70006EB1608904F10A0520F40040B04238BF38 -+:10FF8000FFDF288829EA00003043288021E0637FD2 -+:10FF9000008803F1080C18446389083023F40045F5 -+:10FFA0006288284480B204F10A0190420BD2121AEE -+:10FFB00092B20CF11B0C62452CBF03F4004229EAFB -+:10FFC000030004D204E0801A80B229EA030210433D -+:10FFD0000880781C618987B24145C5D13846BDE8A3 -+:10FFE000F0872DE9F047B0F808800B46044600F191 -+:10FFF0002801B0F80A90808828F4004C01EB0C0529 -+:020000040001F9 -+:10000000804504BF0020BDE8F087002A1CBF681DA2 -+:10001000106023B1627F691D184611F06DFD2F88B5 -+:100020006D888DB1E81987B2208904F1080620F4A3 -+:100030000040A84238BFFFDF30884FF4004121EA7A -+:100040000000284330800AE0607F6288C1190831CF -+:1000500000F1080389B204F1080000F09CFAC845D9 -+:1000600004BF208960813846BDE8F0878188C08858 -+:1000700081420CBF012000207047018980888142A5 -+:100080000CBF01200020704730B48488C28800F182 -+:10009000280324F4004C22F40041634494421BD012 -+:1000A0008289048A15191C885A88A3189D4216D380 -+:1000B00012B18A4210D212E0437F0CF1080C1A19D7 -+:1000C0006244408892B2801A80B22333984201D2AF -+:1000D00011B104E08A4202D130BC0020704730BC2C -+:1000E000012070472DE9F007B0F806C0048900F13F -+:1000F000280702462CF400457E1924F400492CF40C -+:10010000004A002024F400434FF00108D1450AD1F1 -+:1001100004F400440CF4004C644504D05082BDE863 -+:10012000F00700207047AB4208D992F81DC05B1B56 -+:10013000A3EB0C03A3F10804002308E0B2F802C00B -+:10014000547FACEB050CACEB040CACF10804002CB8 -+:10015000E4DBB2F80EC0BCF1000F0DD0B6F800C061 -+:1001600075884DB15B1B10778B42D7DBD089384443 -+:10017000A0EB0C00C01E09E0A4EB0C0410778C422D -+:1001800008DB507FD38918443044401D5182BDE8BC -+:10019000F00770478B42A8BF82F81C80E6DABDE703 -+:1001A0002DE9F05F044600F1280AC088934620F448 -+:1001B00000400AEB0005608A894608B1484502D232 -+:1001C0000020BDE8F09FE08980B1B5F800806E881E -+:1001D00008EB0601884218BFFFDF207F4FF00007C1 -+:1001E00050EA060108D0002840D04AE04FF000084D -+:1001F000A17F46462971F0E7E08948B1617F01445B -+:100200004819B4F81F10A0F8051094F82110C17116 -+:10021000E18908EB09004944E18128806F80BBF146 -+:10022000000F19D0607F298800F1080301440831CC -+:1002300089B26288A01D00F0AEF9E781A07F401C62 -+:10024000A077A07D00281CBFE088A082A7756782E8 -+:10025000E7750120BDE8F09F607FE18908442844EC -+:10026000B0F80510A4F81F10C0792EE0E089B4F8AA -+:100270001F105044A0EB080020F8031D94F8211033 -+:10028000817006EB090086B2E089BBF1000F48449B -+:10029000E081A5F800806E800ED0E088A51D20F4D6 -+:1002A0000040B04238BFFFDF28884FF4004121EA08 -+:1002B000000030432880C0E7E0895044A0EB0800EC -+:1002C00030F8031DA4F81F10807884F82100BEE7E1 -+:1002D000818800F1280221F4004C6244B0F814C077 -+:1002E000C388614518BF99420FD0818969B9806977 -+:1002F00068B101898388994209D021F400412830EE -+:10030000084411790079884201D1002070471046D5 -+:10031000704700F12803407F01F1050C6044106034 -+:100320000888002804BFD81E10600888498808443F -+:1003300080B270472DE9F04115460A4600F12806C3 -+:100340001C46407F531D0344108857880699002897 -+:100350001CBFC01C80B226D088429CBF081A80B245 -+:1003600013D9401AA042A8BF20461FFA80F8581897 -+:100370004246294611F094FB002818BFBDE8F081E1 -+:100380004544A4EB080084B2002001198F423CBF11 -+:100390004FF0FF30BDE8F081304422462946BDE8E9 -+:1003A000F04111F07DBBFA1C97B2F61ED4E72DE99F -+:1003B000F04100F128071D46407F4B1D03441646BF -+:1003C00008880024B1F80280069A00281CBFC01CCF -+:1003D00080B21FD090429CBF101A80B20DD9801AF3 -+:1003E000A842A8BF284684B299182246304611F088 -+:1003F00083FB281B85B2264400204119414506D8BD -+:1004000039182A46304611F077FB601984B220462D -+:10041000BDE8F08108F103011FFA81F8FF1ED9E75A -+:100420002DE9F04116460A4600F128071D46407F97 -+:10043000531D034410880024B2F802800699002856 -+:100440001CBFC01C80B21FD088429CBF081A80B25B -+:100450000DD9401AA842A8BF284684B2581822468F -+:10046000314611F049FB281B85B226440020411972 -+:10047000414506D838442A46314611F03DFB601903 -+:1004800084B22046BDE8F08108F103021FFA82F829 -+:10049000FF1ED9E7401D704770B5044600F12801E2 -+:1004A000C288808820F400431944904208D0A28971 -+:1004B000002A04BF228A002A02D1A28A904201D1D6 -+:1004C000002070BDB1F800C04D8885B1261D20F414 -+:1004D0000040A84238BFFFDF30884FF4004121EAD6 -+:1004E00000002843308000202082012070BD607F02 -+:1004F0000CF1080100F10803084481B26288201D54 -+:1005000000F049F8EFE70021C18101774182C17510 -+:100510008175704703881380C289002A04BF0020B8 -+:100520007047C28800F1280322F400421A440A608E -+:10053000C089704710B50446808AA0F57F41FF3915 -+:1005400018BFFFDFE088A082E089002818BF0120E3 -+:10055000A07510BD4FF6FF71818200218175704733 -+:1005600010B50446808AA0F57F41FF3908BFFFDF40 -+:10057000A07D28B9A088A18A884204BF002010BDB0 -+:10058000012010BD8188828A914205BF807D0028AC -+:1005900000200120704710B4B0F800C02CF40044D3 -+:1005A000214489B24FF4004491420AD2521A92B2C5 -+:1005B0001B339A422CBF0CF4004224EA0C0104D2F3 -+:1005C00004E0891A89B224EA0C021143018010BCAC -+:1005D000704770B516464FF6FC72C91C01EA020559 -+:1005E000D8B10446C01C20F00301A14200D0FFDFB7 -+:1005F000201D012108E00246284401D2034600E004 -+:100600000023491CC9B21360B142F4D916B104F1F8 -+:10061000040001E04FF00000206005FB06F000F14F -+:10062000040070BD024600201168002902D008466F -+:1006300009681160704702680A60016070474FF6F0 -+:10064000FC73C91C1940101A001F90FBF1F0C0B2D6 -+:1006500070474FF6FC73C91C1940001D01FB0200D6 -+:10066000704770B50C00054609D0082C00D2FFDF9A -+:100670001DB1A1B2286800F044F8201D70BD0DB175 -+:1006800000202860002070BD0021026803E09388EC -+:100690001268194489B2002AF9D100F032B870B555 -+:1006A00000260D460446082900D2FFDF206808B95D -+:1006B0001EE0044620688188A94202D00168002912 -+:1006C000F7D181880646A94201D100680DE005F105 -+:1006D000080293B20022994209D32844491B0260C0 -+:1006E00081802168096821600160206000E00026A7 -+:1006F000304670BD00230B608A8002680A6001608A -+:10070000704700234360021D018102607047F0B50D -+:100710000F460188408815460C181E46AC4200D38F -+:10072000641B3044A84200D9FFDFA019A84200D9B9 -+:10073000FFDF3819F0BD2DE9F041884606460188F3 -+:10074000408815460C181F46AC4200D3641B384441 -+:10075000A84200D9FFDFE019A84200D9FFDF708866 -+:100760003844708008EB0400BDE8F0812DE9F041C9 -+:10077000054600881E461746841B8846BC4200D3A7 -+:100780003C442C8068883044B84200D9FFDFA0196F -+:10079000B84200D9FFDF68883044688008EB040065 -+:1007A000E2E72DE9F04106881D460446701980B243 -+:1007B000174688462080B84201D3C01B208060883D -+:1007C000A84200D2FFDF7019B84200D9FFDF60886D -+:1007D000401B608008EB0600C6E730B50D46018877 -+:1007E000CC18944200D3A41A4088984200D8FFDF66 -+:1007F000281930BD2DE9F041C14D04469046A87836 -+:100800000E46A04200D8FFDF05EB8607B86A50F815 -+:10081000240000B1FFDFB868FFF704FF05000CD02B -+:10082000B86A082E40F8245000D3FFDFB54842468E -+:10083000294650F82630204698472846BDE8F081E2 -+:100840002DE9F0471E460400074602EB06009146DC -+:100850008A46C5B227D000218846FF2800D9FFDF8D -+:10086000E01C20F00300A04200D0FFDFB24500D919 -+:10087000FFDFA34880F800A080F801908570C57064 -+:10088000057145718671DFF87CA280F8079000261B -+:100890000AF1400A8146FF1C27F003000746B8F121 -+:1008A000000F03D005E04FF00101D5E709EB860109 -+:1008B00088603AF8161019F8062001D04FF00000B1 -+:1008C000FFF787FE761CF6B20744082EE3D3FF1C21 -+:1008D00027F003002A460646B8F1000F0DD000208D -+:1008E0000221FFF776FE4346002130440F46C846FA -+:1008F000C01C20F003021BB110E0C9F84800EFE76C -+:1009000008EB81060020B26206E000BFD6F828C0DE -+:100910004CF82070401CC0B2A842F7D3491CC9B2A1 -+:1009200002EB85000829E3D3001BBDE8F08710B572 -+:10093000044603F0BBFC08B1102010BD2078704ABB -+:10094000618802EB800092780EE0836A53F82130D0 -+:1009500043B14A1C6280A180806A50F82100A060E7 -+:10096000002010BD491C89B28A42EED86180052062 -+:1009700010BD70B505460C46084603F097FC08B15B -+:10098000102070BD082D01D3072070BD25700020F8 -+:10099000608070BD0EB56946FFF7EBFF00B1FFDF69 -+:1009A0006846FFF7C4FF08B100200EBD01200EBD50 -+:1009B00010B50446082800D3FFDF5148005D10BD84 -+:1009C0003EB5054600246946FFF7D3FF18B1FFDFA7 -+:1009D00001E0641CE4B26846FFF7A9FF0028F8D0E4 -+:1009E0002846FFF7E5FF001BC0B23EBD44498978A9 -+:1009F000814201D9C0B27047FF2070472DE9F04114 -+:100A000090460C460546062901D0072C10D13C4FD4 -+:100A1000B86CFFF707FE02004FF6FF7604D0022104 -+:100A2000B86CFFF70CFE00E030462880B04201D1E0 -+:100A3000002003E742462146FFF7DCFE040002D116 -+:100A4000288800F04FF82046F8E6A0F57F43FF3BEA -+:100A500001D0082901D300207047CBE6A0F57F42E2 -+:100A6000FF3A0BD0082909D2254A9378834205D949 -+:100A700002EB8101896A51F820007047002070471D -+:100A80002DE9F04105460C46A5F57F4143F20200F1 -+:100A9000FF3902D0082C01D30720CFE618494FF0C8 -+:100AA00000088A78AA42F8D901EB8406B26A52F8A3 -+:100AB0002570002FF1D013483946203050F82420FB -+:100AC00028469047B16A062C41F8258001D0072CB2 -+:100AD00002D1284600F006F83946B068FFF7ABFDB2 -+:100AE0000020ABE610B5064CC2B20221A06CFFF7A5 -+:100AF000B0FD0146A06CBDE81040FFF79CBD0000B2 -+:100B0000600700202022020070B50E461D461146E7 -+:100B100000F0D4F804462946304600F0D8F82044C6 -+:100B2000001D70BD2DE9F04190460D4604004FF0C8 -+:100B3000000610D00027E01C20F00300A04200D0E7 -+:100B4000FFDFDDB141460020FFF78BFD0C3000EBED -+:100B5000850617B112E00127EDE7614F04F10C00A3 -+:100B6000A9003C602572606000EB85002060606831 -+:100B700011F05BF841463868FFF773FD3046BDE879 -+:100B8000F0812DE9FF4F564C804681B020689A468F -+:100B9000934600B9FFDF2068027A424503D94168D5 -+:100BA00051F8280020B143F2020005B0BDE8F08FF3 -+:100BB0005146029800F082F886B258460E9900F02D -+:100BC00086F885B27019001D87B22068A1463946A3 -+:100BD0000068FFF764FD04001FD067802580294668 -+:100BE000201D0E9D07465A4601230095FFF766F823 -+:100BF0002088314638440123029ACDF800A0FFF73F -+:100C00005DF82088C1193846FFF78FF8D9F8000041 -+:100C10004168002041F82840C7E70420C5E770B5C7 -+:100C20002F4C0546206800B9FFDF2068017AA942F1 -+:100C30000ED9426852F8251051B1002342F82530F0 -+:100C40004A880068FFF756FD216800200A7A08E00C -+:100C500043F2020070BD4B6853F8203033B9401C9A -+:100C6000C0B28242F7D80868FFF70EFD002070BDC1 -+:100C700070B51B4E05460024306800B9FFDF3068B0 -+:100C8000017AA94204D9406850F8250000B1041D3A -+:100C9000204670BD70B5124E05460024306800B97C -+:100CA000FFDF3068017AA94206D9406850F8251064 -+:100CB00011B131F8040B4418204670BD10B50A4636 -+:100CC0000121FEF7F3FFC01C20F0030010BD10B59A -+:100CD0000A460121FEF7EAFFC01C20F0030010BD08 -+:100CE0006C00002070B5044600780E46012813D031 -+:100CF000072802D00B2813D10EE0A068616905789F -+:100D0000052003F061FA052D0AD078230022052082 -+:100D1000616903F0AFF903E00520616903F054FA5B -+:100D200031462046BDE8704001F0A8B910B500F189 -+:100D30003902C3799478411D64F003042340C371E0 -+:100D4000DB070DD04B79547923404B710B79127925 -+:100D500013400B718278C9788A4200D9817010BD26 -+:100D600000224A710A71F5E74178012900D00C216F -+:100D7000017070472DE9F74F88B000208C698DF81D -+:100D800004000878012617460D464FF007094FF07A -+:100D9000110A4FF00A0B292876D2DFE810F029005B -+:100DA000D20215032D036F037E039903C703DC03EF -+:100DB0000604330457047004AE04BF04E204EA04DA -+:100DC0000A052C0557057A05A605C605D605F605BC -+:100DD000F805050637065906AD06EA06EC061B07B8 -+:100DE0003B074407550792071B08410808080D08F0 -+:100DF00014B120781E2829D0D5F808805FEA0800B1 -+:100E000042D001208DF80400686A02228DF8082083 -+:100E100006908DF809B0286A0390A8880028EFD0C2 -+:100E200098F8001091B10F2910D27DD2DFE801F0BF -+:100E30007C134BDCFEFDFCFBFAF9F8089EF7F6008C -+:100E4000022821D124B120780C2801D00026F9E312 -+:100E50008DF80420B3E10520696A03F0B5F9A8888C -+:100E60000728EED1204601F003F9022809D02046D8 -+:100E700001F0FEF8032808D9204601F0F9F8072808 -+:100E800003D20120207005E003E2002CB8D02078C6 -+:100E90000128D6D198F80400C11F0A2903D300BF46 -+:100EA00085F81CB04CE2A070D8F80010A163B8F827 -+:100EB0000410A18798F8060084F83E0001202870ED -+:100EC0000320207046E00728BBD1002C98D0207862 -+:100ED0000D28B6D198F8031094F83B20C1F3C00058 -+:100EE000C2F3C002104201D0062000E007208907AB -+:100EF00007D198F805100142D2D198F806100142A6 -+:100F0000CED194F83D2098F8051020EA0202114253 -+:100F1000C6D194F83E2098F8061090430142BFD104 -+:100F200098F80400C11F00E008E20A29B8D2617FE6 -+:100F3000814201D906209AE3D8F800106160B8F820 -+:100F40000410218198F80600A072012028700E205C -+:100F5000207003208DF80400686A069004F13900BF -+:100F60000290601D039017300490DBE0412890D17F -+:100F7000204601F07DF8042802D1E078C00704D1B2 -+:100F8000204601F075F80F289ED1A88CD5F80C806A -+:100F900080B24FF04009666AFFF76AFE32460826C3 -+:100FA00041464B460096FFF702FA0D208DF80400EB -+:100FB000686A0690606A0290002101A8FFF792FE1D -+:100FC0002078042808D0A07F48B1012807D0032842 -+:100FD00008D0102020709CE005202070CEE184F81D -+:100FE00000A033E71220F5E71128C0D1204601F018 -+:100FF0003FF8042802D1E078C00719D0204601F05C -+:1010000037F8062805D1E078C00711D1A07F022863 -+:101010000ED0204601F02CF8112808E0B3E083E060 -+:1010200072E156E136E109E1EAE0D0E017E09ED155 -+:10103000102208F1010104F1480010F05DFD607814 -+:10104000012809D012202070E078C00765D0A07F69 -+:1010500090B301285DD060E084F8009059E0112839 -+:1010600085D1204601F004F8082804D0204600F07D -+:10107000FFFF132888D12869D0B16869C0B104F195 -+:101080007800102208F10101064610F035FD2078A5 -+:10109000082812D014202070E078C0070FD0A07F5D -+:1010A000022818D06178022912D0032831D034E008 -+:1010B00000208DF80400ECE02BE00920EBE70B208A -+:1010C0002870296901204870206CC1E9010662E29C -+:1010D00008B101287AD10B202870296981F8019084 -+:1010E000606A4860206AC1E9020648E2206CE27842 -+:1010F0000068C2F34402521ED04000F0010040F0EC -+:10110000800000E000200874E06A48614CE2064676 -+:10111000FEE3042028700520BAE185F800B08DF8C0 -+:1011200004B08EE33946F4E31128C4D1204600F020 -+:101130009FFF0A2802D1E078C00704D1204600F0C2 -+:1011400097FF1528B7D1102208F1010104F14800DA -+:1011500010F0D2FC20780A2810D01620207012201F -+:10116000287029690920487004F15800486020302F -+:1011700088601038C860206C086184E30B20207000 -+:10118000B9E22870FEE3022895D1204600F070FFF6 -+:10119000042804D3204600F06BFF082809D320461A -+:1011A00000F066FF0E2886D3204600F061FF12286B -+:1011B0006FD2A07F0228B8D110208DF80400686A91 -+:1011C000069098F801008DF80800F6E33DE2022849 -+:1011D000ABD1204600F04CFF00285AD0204600F04A -+:1011E00047FF0128F9D0204600F042FF0C28F4D038 -+:1011F00004208DF8080098F801008DF809005AE7DE -+:101200001128FCD1002CFAD020781728F7D161786A -+:10121000E06A022910D0002101EB4101182606EBFB -+:10122000C1011022405808F1010110F065FC0520B1 -+:10123000696A00F010FF1DE10121EDE70B28DED106 -+:10124000002CDCD020781828D9D16178E06A0229F6 -+:101250001BD0002101EB4101102202EBC1014158DA -+:10126000B8F8010008806078E16A02280FD00020F9 -+:1012700000EB4002142000EBC2000958404650F831 -+:10128000032F0A604068486039E00121E2E701204D -+:10129000EEE7A1E11128B2D1002CB0D020781928B6 -+:1012A000ADD16078E16A022811D0002000EB400245 -+:1012B0001C2000EBC2001022085808F1010110F0B8 -+:1012C0001BFC0520696A00F0C6FE1A20D4E001204C -+:1012D000ECE7082893D1002C91D020781A288ED1E1 -+:1012E000E06A98F80120017862F347010170E16A31 -+:1012F000D8F8022041F8012FB8F8060088800520B0 -+:10130000696A00F0A8FE3CE3112898D1002C98D01F -+:1013100020781B2893D16178E06A02290CD0002143 -+:1013200001EB4101202202EBC1011022405808F1DB -+:10133000010110F0E1FBE2E70121F1E785F81C90E3 -+:10134000EFE338780128A6D11C2204F11C0079684B -+:1013500010F017FCE079C10894F83B0001EAD001D5 -+:10136000E07861F30000E070217F09B1297733E173 -+:10137000217803290AD0C0073FF42DAE032028703E -+:101380008DF804B0686A06904120B1E3607FA178CF -+:1013900088423FF6CFAD02262671E179204621F042 -+:1013A000E001E171617A21F0F0016172A17A21F02E -+:1013B000F001A172FFF7BAFC2E708DF804B0686AD4 -+:1013C00006908DF80890ADE638781128CFD18DF8C9 -+:1013D0000490696A0691916800208DF814000391C9 -+:1013E000ADF8089008466168016021898180A17A82 -+:1013F000817104202070E0E238781128B7D18DF88F -+:101400000490686A0690381D02AB07C883E807009D -+:101410004120ADF8080000208DF8140008460C218A -+:101420000170A88CCA4680B2FE684FF04009D4F81B -+:101430002080FFF72FFC3146082642464B46009697 -+:10144000FEF7EEFF002101A8FFF74CFCE07820F04A -+:101450003E00801CE0702078052801D00F200BE0B2 -+:10146000A07F20B1012802D0032803D03DE184F8F9 -+:1014700000A04EE62670E9E42070E7E438780328FF -+:10148000A4D178680168A1664068E06605202870EC -+:101490008DF80400686A069044E63878032895D1F0 -+:1014A00078680168216740686067206C68B9A07F30 -+:1014B00028B1012803D0062028700420E8E785F829 -+:1014C0000090FE4820646064F9E385F80090F6E33C -+:1014D0003878022892D1387900287CD1A07F022860 -+:1014E0000BD00328F1D1607801280BD0A07994F8B3 -+:1014F0003A1001280AD0F1480BE0B86800286BD0F8 -+:10150000206411E0A17994F83A00F2E7B868002865 -+:10151000F5D02064E078C00701D0012901D0E74868 -+:1015200002E0F8680028EAD06064CEE78DF804B0E5 -+:10153000696A0691E1785846C90709D0617802299D -+:1015400003D1A17F29B1012903D0A17F032900D0B4 -+:101550000820287064E33878112891D1B86828628F -+:1015600009202870E0782969C0070DD081F8019022 -+:10157000206A4860606A886004F16800C860A07FE3 -+:1015800002287FF4BFADB1E501204870206C4860AF -+:1015900004F16800886004F13800C860201D08610B -+:1015A000206B4861606B88612AE2E1783878C9076E -+:1015B00001D0062100E00A2188428BD1207807283B -+:1015C0001DD084F800A000BF8DF80490686A0690D2 -+:1015D000286A039001E0CAE08DE20024ADF808A07B -+:1015E0008DF81440032100F8011B5168102210F0FF -+:1015F00083FA002101A8FFF775FB2C6226E408207E -+:101600002070E1E738781128A7D18DF80490686A36 -+:1016100006909068039000208DF814000398ADF8B0 -+:1016200008A0042100F8011B102204F1680110F049 -+:1016300063FA002101A8FFF755FB2078092802D0A2 -+:10164000132019E73CE384F800B016E0E17838781D -+:10165000C90701D0062100E00A218842ADD110223D -+:1016600004F14800796810F01BFA10B104202877C3 -+:10167000EAE3207809283FF4EEAC0C2081E5E0781D -+:10168000C10738D0A17F012902D002291BD02EE04A -+:101690000D202870296981F801B06078012809D0EF -+:1016A000206A4860606A886004F16800C860103091 -+:1016B000086129E5606A4860206A886004F1780062 -+:1016C000C8601038F4E7C0F3440114290FD24FF07A -+:1016D000006101EBB0104FEAB060E0706078012863 -+:1016E00003D010202070042057E10620C4E6607863 -+:1016F00001283FF476AC0E2043E538780928ADD1B7 -+:1017000085F800B00F208DF80400686A06905068D4 -+:101710000290002101A8FFF7E5FAE8E7E078C007AA -+:101720000AD0A07F012803D10F202870042036E1C1 -+:10173000102028700E2032E115202870296902201F -+:101740004870206C48606078012805D004F178006A -+:1017500088601038C86053E104F168008860103078 -+:10176000F8E738780228CAD138790028E0D02877FD -+:1017700068E338781328FBD185F800A02969082090 -+:10178000487078684860607801280DD004F16800DE -+:1017900088601030C860206B0861606B486104F19C -+:1017A00058008861A06A22E004F17800886010384F -+:1017B000F0E738780728DBD16078012801D01320C2 -+:1017C00029E2A178A06A0844C1F1100110F00BFAD7 -+:1017D0001220287029690920487004F158004860D7 -+:1017E000203088601038C860206C086144E0C8610F -+:1017F000E06A086204E138780828B9D1102204F1BF -+:101800004800796810F04CF908B10B202FE72078D8 -+:101810000B2812D02046FFF789FAA178A06A084465 -+:10182000C1F1100110F0DFF91620287008208DF8A2 -+:101830000400686A0690002072E0132028708DF87A -+:1018400004B0686A06908DF808A06BE43878112817 -+:101850008ED1B86828621420287029690920487040 -+:1018600004F158004860103088601030C860606C27 -+:1018700008616078012806D004F139004861206BC6 -+:101880008861606BB3E7601D4861606B8861206BA5 -+:10189000ADE7387808288ED18DF80490686A0690F4 -+:1018A000286A00260D210390ADF808A08DF8146079 -+:1018B00000F8011B1022796802E000007423020086 -+:1018C00010F01AF9002101A8FFF70CFA2E626078D7 -+:1018D000012801D01520CFE51620287008208DF8AA -+:1018E0000400686A029606901BE038780B2884D1C1 -+:1018F000162028706078022802D12046FFF716FAD9 -+:10190000A17878680844C1F1100110F06CF901E089 -+:1019100083E215E008208DF80400686A0690786874 -+:101920000290A0788DF80C004DE538780F288FD103 -+:10193000E079C00773D01720287009202FE01146E6 -+:1019400001A8FFF7CFF9FFF7E2BB38781028A2D142 -+:101950001422391D04F11C0010F013F9E16A208DE6 -+:10196000A1F80900E16AA078C871E179E26A01F0A2 -+:1019700003011172E16A627A0A73E16AA07A81F85E -+:10198000240000E09BE1242078E6192043E1387828 -+:101990001128ACD1B86828621A20287005208DF86B -+:1019A0000400686A0690CAE7387803289FD16078F7 -+:1019B000E16A022802D0012001E05CE2002000EB95 -+:1019C0004002142000EBC2027B688A58196811603B -+:1019D000596851601B212970D5E9041205234B7009 -+:1019E000636A4B606678E36A022E01D0012600E04C -+:1019F000002606EB460600EBC6001858C1E90202B5 -+:101A0000686A4862089800F050FB9CE738780E2816 -+:101A100071D16078E26A022802D0012001E0ADE1D4 -+:101A2000002000EB4001102000EBC1000223105801 -+:101A3000093279680EF01EFB1C20287029690420E9 -+:101A40004870206A4860E06A09308860FB4881E697 -+:101A500038780D284FD16178E06A022901D0012140 -+:101A600000E0002101EB4101182606EBC101A2783C -+:101A70004058796810F040F86078E16A022801D097 -+:101A8000012000E0002000EB400206EBC200B0465F -+:101A90000858A1780844C1F1100110F0A4F88DF89D -+:101AA0000490686A0690286A00260390ADF808A0A2 -+:101AB0008DF81460062101706178E26A022901D074 -+:101AC000012100E0002101EB410308EBC301401CB0 -+:101AD0005158102210F010F8002101A8FFF702F968 -+:101AE0001D202E6228708DF804B0686A06900B20C5 -+:101AF0008DF8080067E481E0387811287ED18DF8F0 -+:101B00000490686A0690B86803900B20ADF808004E -+:101B1000039880F800906278E16A022A02D00122DC -+:101B200001E091E1002202EB4202102303EBC2022A -+:101B300089580988A0F801106178E26A022901D069 -+:101B4000012100E0002101EB4103142101EBC3015D -+:101B500051580A6840F8032F4968416056E0272031 -+:101B6000287001208DF814002DE424202870002016 -+:101B70009FE01F204FE0387811283FD18DF8049066 -+:101B8000686A0690B868039000208DF814000398E6 -+:101B9000ADF808A0082606706178E26A022901D033 -+:101BA000012100E0002101EB41031C2101EBC301F5 -+:101BB000401C515810220FF09FFF002101A8FFF791 -+:101BC00091F8202028708DF804B0686A06908DF88E -+:101BD000086061E43878112810D18DF80490686AA3 -+:101BE0000690B86803900820ADF808000398092112 -+:101BF0000170E16909784908417000E094E0E16909 -+:101C000051F8012FC0F802208988C18020781D2852 -+:101C1000ABD1A4E7222028708DF804B0686A069042 -+:101C20008DF808A08BE6387811287DD1B868286235 -+:101C300023202870296904204870206A4860E06ADF -+:101C4000093088607E4885E538780D286CD1617848 -+:101C5000E06A022901D0012100E0002101EB4101ED -+:101C6000202606EBC1011022405879680FF044FF8E -+:101C70008DF80490686A0690286A0390ADF808A071 -+:101C800080F800B06278E16A022A01D0012200E007 -+:101C9000002202EB420206EBC202401C89581022CD -+:101CA0000FF02AFF0020286221781D29B1D02421BD -+:101CB00029708DF81400002101A8FFF713F80326FE -+:101CC000DFE0E078C00702D04FF0060C01E04FF0F3 -+:101CD000070C6078022809D04FF0000000EB0401E7 -+:101CE00001F1090105D04FF0010004E04FF00100BF -+:101CF000F4E74FF000000B78204413EA0C030B705C -+:101D000010F8092F02EA0C02027004D14FF01C0CEB -+:101D100084F800C092B394F801C0BCF1010F00D068 -+:101D2000E3B990F800C000E053E05FEACC7804D05B -+:101D30002CF00106067018260EE05FEA8C7804D5B8 -+:101D40002CF0020606701E2606E05FEA4C7805D5E8 -+:101D50002CF00406067021262E70032694F801C08C -+:101D6000BCF1020F00D0DAB991F800C05FEACC787C -+:101D700005D02CF001060E7017210FE01AE05FEA83 -+:101D80008C7804D52CF002060E70192106E05FEA6B -+:101D90004C7805D52CF004060E701B21217000260E -+:101DA0000078D0BBCAB3C3BB1D20207035E03878A3 -+:101DB000122847D1282061E42078012842D00C283D -+:101DC00040D02046FEF7D0FF0B208DF80400686A53 -+:101DD000069037E038784FF02608112805D01220F9 -+:101DE0001070032685F800804BE08DF80490686A37 -+:101DF0000690B86803900220ADF8080001208DF825 -+:101E00001400039805210170297F4170114601A833 -+:101E1000FEF768FF064685F80080012E12D030E0FC -+:101E200001208DF80400686A069003208DF80800F0 -+:101E3000287F8DF809000020287716E06C23020027 -+:101E400070220200287F80B11E202070252028707B -+:101E50008DF804B0686A069002208DF808003946B3 -+:101E600001A8FEF73FFF06460BE00CB1FE202070F4 -+:101E70009DF8040028B1002101A8FEF733FFFEF70A -+:101E8000E5BF0BB03046BDE8F08FF0B587B00C462B -+:101E90004E6900218DF804100120257803460227A1 -+:101EA0004FF0070C85B1012D50D0022D36D1FE2008 -+:101EB00030708DF80030606A059003208DF80400C2 -+:101EC000207E8DF8050060E02179012922D00229C9 -+:101ED00029D0032924D0042920D1B17F02291DD182 -+:101EE00031780D1F042D04D30A3D032D01D31E2983 -+:101EF00014D12189022911D38DF80470237020890F -+:101F00009DF80410884217D20A208DF80000606AFC -+:101F1000059057E070780128EED0052007B0F0BD9D -+:101F20001E203070E8E771780229F6D131780C294B -+:101F3000F4D18DF804C0E1E71120083402F8040B55 -+:101F400094E80B0082E80B000320E7E71578112DD9 -+:101F5000E4D18DF800C0656A0595956802958DF805 -+:101F6000101094F804E0BEF1010F13D0BEF1020F7F -+:101F70002DD0BEF1030F1CD0BEF1040FCED1ADF8B1 -+:101F800004700E202870207E687000216846FEF7DD -+:101F9000A9FE0CE0ADF804700B202870207E002113 -+:101FA00000F01F0068706846FEF79CFE3770002046 -+:101FB000B4E7ADF804708DF8103005202870207E4D -+:101FC0006870277011466846FEF78CFEA6E7ADF8EC -+:101FD00004C02B70207F6870607F00F00100A87043 -+:101FE000A07F00F01F00E870E27F2A71C0071CD0BC -+:101FF00094F8200000F00700687194F8210000F0C8 -+:102000000700A87100216846FEF76CFE2868B063DF -+:10201000A888B087A87986F83E00A06940787077D4 -+:102020002879B0700D203070C1E7A9716971E9E7B6 -+:1020300000B587B005280CD101208DF800008DF87F -+:102040000400002005918DF8050001466846FEF762 -+:1020500049FE07B000BD70B50C46054602F0B4F865 -+:1020600021462846BDE870407823002202F002B8DD -+:1020700008B1007870470C207047000070B50C0064 -+:1020800005784FF000010CD021702146F3F79DF840 -+:1020900072482178405D884201D1032070BD022042 -+:1020A00070BDF3F792F8002070BD027B032A05D0C3 -+:1020B00000220A704B780B2B02D003E004207047FB -+:1020C0000A770A62027B9300521C0273C1500320FC -+:1020D0007047F0B587B00F4605460124287B05EB15 -+:1020E000800050F8046C7078411E0C290AD25B49BC -+:1020F0003A46123101EB8000314650F8043C284644 -+:10210000984704460CB1012C11D1287B401E10F0D9 -+:10211000FF00287301D00324E0E70C208DF80000B5 -+:10212000706A0590002101966846FFF7A7FF032C0F -+:10213000D4D007B02046F0BD70B515460A46044617 -+:1021400029461046FFF7C5FF064674B12078FE28E1 -+:102150000BD1207E30B100202870294604F10C00FC -+:10216000FFF7B7FF2046FEF7FFFD304670BD704712 -+:1021700070B50E46044688210FF057FD0225012E4A -+:1021800003D0022E04D0052070BD0120607000E055 -+:1021900065702046FEF7E8FDA577002070BD28B1E8 -+:1021A000027E1AB10A4600F10C01C5E70120704712 -+:1021B00010B5044686B0052002F006F82078FE2807 -+:1021C00006D000208DF8000069462046FFF7E7FFA3 -+:1021D00006B010BD7FB50E4600218DF80C10417879 -+:1021E0000B2903D00C2903D0002405E0846900E00A -+:1021F00044690CB1217E91B16D4601462846FFF736 -+:1022000054FF032809D1324629462046FFF794FFA0 -+:102210009DF80C10002900D0042004B070BD04F11A -+:102220000C05EAE710B590B00C4607900B48042166 -+:10223000801E08900A488DF8191009900F9269467F -+:1022400006A8FFF7C7FF002805D1102220460199F4 -+:102250000FF052FC002010B010BD000076220200EA -+:102260006C23020070B50D46040011D085B1210128 -+:1022700028460FF0B8FC10224E4928460FF03CFCCF -+:102280004C4801210838018044804560002070BD21 -+:10229000012070BD70B5474E00240546083E10E091 -+:1022A0007068AA7B00EB0410817B914208D1C17B4E -+:1022B000EA7B914204D10C2229460FF0F1FB30B1A8 -+:1022C000641C30888442EBDB4FF0FF3070BD204649 -+:1022D00070BD70B50D46060006D02DB1FFF7DAFFD0 -+:1022E000002803DB401C14E0102070BD314C083C7A -+:1022F00020886288411C914201D9042070BD616828 -+:10230000102201EB001031460FF0F6FB2088401C34 -+:1023100020802870002070BD70B514460D0018D0C4 -+:10232000BCB10021A170022802D0102811D105E013 -+:10233000288870B10121A170108008E02846FFF7BD -+:10234000A9FF002805DB401CA070A8892080002080 -+:1023500070BD012070BD70B5054614460E000BD04F -+:1023600000203070A878012808D005D91149A1F1C2 -+:1023700008010A8890420AD9012070BD24B128784A -+:1023800020702888000A5070022008700FE064B1A5 -+:102390004968102201EB0011204610390FF0ACFB08 -+:1023A000287820732888000A60731020307000207D -+:1023B00070BD0000780000202DE9F04190460C46E9 -+:1023C00007460025FE48072F00EB881607D2DFE8F6 -+:1023D00007F00707070704040400012500E0FFDFFA -+:1023E00006F81470002D13D0F548803000EB8801FA -+:1023F00091F82700202803D006EB4000447001E04C -+:1024000081F8264006EB44022020507081F82740D6 -+:10241000BDE8F081F0B51F4614460E460546202A59 -+:1024200000D1FFDFE649E648803100EB871C0CEB6A -+:10243000440001EB8702202E07D00CEB46014078C8 -+:102440004B784870184620210AE092F825304078F1 -+:1024500082F82500F6E701460CEB41000570407854 -+:10246000A142F8D192F82740202C03D00CEB440471 -+:10247000637001E082F826300CEB41042023637086 -+:1024800082F82710F0BD30B50D46CE4B441900221E -+:10249000181A72EB020100D2FFDFCB48854200DD43 -+:1024A000FFDFC9484042854200DAFFDFC548401CD3 -+:1024B000844207DA002C01DB204630BDC148401CB5 -+:1024C000201830BDBF48C043FAE710B50446016884 -+:1024D000407ABE4A52F82020114450B102200844EC -+:1024E00020F07F40F0F751FB94F90810BDE8104050 -+:1024F000C9E70420F3E72DE9F047B14E803696F89E -+:102500002D50DFF8BC9206EB850090F8264034E0B1 -+:1025100009EB85174FF0070817F81400012806D0BB -+:1025200004282ED005282ED0062800D0FFDF01F089 -+:10253000E5F8014607EB4400427806EB850080F899 -+:10254000262090F82720A24202D1202280F82720BE -+:10255000084601F0DEF82A4621460120FFF72CFF4D -+:102560009B48414600EB041002682046904796F8CD -+:102570002D5006EB850090F82640202CC8D1BDE8F0 -+:10258000F087022000E003208046D0E710B58C4C95 -+:102590002021803484F8251084F8261084F8271030 -+:1025A000002084F8280084F82D0084F82E10411EA5 -+:1025B000A16044F8100B2074607420736073A073E2 -+:1025C0008449E07720750870487000217C4A103CEF -+:1025D00002F81100491CC9B22029F9D30120F0F7F3 -+:1025E000C2F90020F0F7BFF9012084F82200F9F7C2 -+:1025F00053FB7948F9F75FFB764CA41E20707748AF -+:10260000F9F759FB6070BDE81040F0F739B910B523 -+:10261000F0F75BF96F4CA41E2078F9F765FB607842 -+:10262000F9F762FBBDE8104001F0A0B82020704728 -+:102630002DE9F34F624E0025803606EB810A89B002 -+:102640009AF82500202822D0691E02916049009541 -+:1026500001EB00108146D0E90112C0680391CDE979 -+:102660000420B08BADF81C00B07F8DF81E009DF8E3 -+:102670001500C8B10227554951F820400399E219C5 -+:10268000114421F07F41019184B102210FE001202A -+:10269000F0F769F90020F0F766F9F0F734F901F086 -+:1026A00065F886F82F508AE00427E4E700218DF8CA -+:1026B0001810022801D001281BD1039839190144B0 -+:1026C0000998081A20F07F4033280BD903208DF891 -+:1026D00015000398C4F13201401A20F07F403224E3 -+:1026E00003900CE096F8240018B9F0F753FC00288A -+:1026F0004DD0322C03D214B101F02CF801E001F0DE -+:1027000035F8344A107820B393465278039B121B55 -+:1027100000219DF81840984601281BD0032819D0A5 -+:102720005FF000008DF81E00002A04DD981A039067 -+:1027300001208DF818009DF81C0000B102210398BB -+:10274000274A20F07F40039003AB099801F01AF864 -+:1027500010B110E00120E5E79DF81D0018B99BF8C5 -+:102760000000032812D08DF81C50CDF80C808DF895 -+:1027700018408DF81E509DF8180058B10398012399 -+:10278000C11900221846F0F741F906E000200BB00D -+:10279000BDE8F08F0120F0F7E6F899F90C2001234D -+:1027A00000200199F0F732F9012086F82F008AF80D -+:1027B000285003482022694680300FF0E2F911E0EA -+:1027C000AC090020FF7F841E0020A107B822020070 -+:1027D000AC0700208A000020233F0100F7240100FD -+:1027E000FFFF3F000120D2E72DE9F05FDFF84084D2 -+:1027F000064608EB860090F82550202D1FD0A8F142 -+:1028000080002C4600EB8617A0F50079DFF824B491 -+:1028100005E0A24607EB4A004478202C0AD0F0F7E6 -+:1028200041F909EB04135A4601211B1D00F0AAFFD0 -+:102830000028EED0AC4202D0334652461EE0FE489D -+:1028400008B1AFF30080F0F72DF998F82F206AB1A6 -+:10285000D8F80C20411C891A0902CA1701EB126131 -+:102860000912002902DD0020BDE8F09F3146FFF784 -+:10287000DFFE08B10120F7E733462A462021042075 -+:10288000FFF7C8FDEFE72DE9F041E94C2569F0F7C6 -+:1028900009F9401B0002C11700EB1160001200D4BF -+:1028A000FFDF94F8220000B1FFDF012784F82270D7 -+:1028B00094F82E00202800D1FFDF94F82E6020200D -+:1028C00084F82E00002584F82F5084F8205084F8D6 -+:1028D0002150DA4825600078022833D0032831D00F -+:1028E00000202077A068401C05D04FF0FF30A0608A -+:1028F0000120F0F738F80020F0F735F8F0F733F959 -+:10290000F0F72BF9EFF7FFFF0EF094FBCC480560D2 -+:1029100005604FF0E0214FF40040B846C1F8800256 -+:10292000F0F7BBF994F82D703846FFF75DFF0028EB -+:10293000FAD0BF48803800EB871010F81600022844 -+:1029400002D006E00120CCE73A4631460620FFF7E8 -+:1029500033FD84F8238004EB870090F826002028BC -+:1029600004D0B648801E4078F9F7C4F9207F0028CB -+:1029700003D0F0F7E8F82577657749E50146AC48DC -+:1029800010B590F82D200024803800EB821000BF95 -+:1029900010F814302BB1641CE4B2202CF8D32020A2 -+:1029A00010BDA84800EB0410016021460120FFF78C -+:1029B00003FD204610BD10B5012801D0032800D129 -+:1029C00071B39B4A92F82D30994C0022803C04EB65 -+:1029D000831300BF13F812400CB1082010BD521C25 -+:1029E000D2B2202AF6D3954A48B1022807D0072947 -+:1029F00016D2DFE801F01506080A0C0E10000021BF -+:102A00000AE01B2108E03A2106E0582104E0772182 -+:102A100002E0962100E0B52151701070002010BD39 -+:102A2000072010BD854810B54078F0F7AEF880B2A9 -+:102A300010BD10B5202811D27D4991F82D30A1F19B -+:102A4000800202EB831414F810303BB191F82D3062 -+:102A500002EB831212F81020012A01D0002010BDD1 -+:102A600091F82D2001460020FFF7A6FC012010BDA3 -+:102A700010B5F0F717F8BDE81040F0F786B82DE96B -+:102A8000F0410E466A4F01782025803F0C4607EB47 -+:102A9000831303E0254603EB45046478944202D097 -+:102AA000202CF7D108E0202C06D0A14206D103EB60 -+:102AB00041014978017007E00020A9E403EB4400DC -+:102AC00003EB4501407848705F4F7EB127B100218C -+:102AD00040F2DA30AFF300803078A04206D127B15F -+:102AE000002140F2DD30AFF30080357027B10021C6 -+:102AF00040F2E230AFF30080012089E410B5426873 -+:102B00000B689A1A1202D41702EB1462121216D42E -+:102B1000497A91B1427A82B94C4A006852F8211040 -+:102B2000126819441044001D891C081A0002C117BC -+:102B300000EB11600012322801DB012010BD0020E3 -+:102B400010BD2DE9F047814639483E4E00EB81002B -+:102B5000984690F825402020107006F50070154624 -+:102B600000EB81170BE000BF06EB04104946001D87 -+:102B7000FFF7C4FF28B107EB44002C704478202CE9 -+:102B8000F2D1297888F8001013E000BF06EB041595 -+:102B9000291D4846FFF7B2FF68B988F80040A97BB5 -+:102BA00099F80A00814201D80020E8E407EB4400CC -+:102BB0004478202CEAD10120E1E42DE9FC410E46C5 -+:102BC000074600241F4D08E09DF8000005EB0010AB -+:102BD0008168384600F0EAFD01246B4601AA3146BF -+:102BE0003846FFF7AEFF0028EED02046BDE8FC8156 -+:102BF00070B504460E4801258038A54300EB8411CA -+:102C000000EB851040220EF077FF0F4E26B1002119 -+:102C100040F25C40AFF30080054800EB850100EB1B -+:102C20008400D0F82500C1F82500AEB100210FE0E6 -+:102C30002C0A0020FFFF3F00000000008A00002057 -+:102C400000F50040AC07002000000000B8220200A0 -+:102C50004FF48C60AFF30080284670BD2DE9FC4135 -+:102C60008446FF481546089C00EB85170E4617F86A -+:102C70001400012803D0022801D00020B6E70B463B -+:102C8000F84A0121604600F07DFDA8B101AB6A461B -+:102C900029463046FFF755FF70B1F1489DF80420F2 -+:102CA0009DF80010803000EB85068A4208D02B4644 -+:102CB0000520FFF7AFFB0BE02A462146042014E075 -+:102CC000202903D007EB4100407801E096F8250069 -+:102CD00007EB440148709DF80000202809D007EB5D -+:102CE000400044702A4621460320FFF765FB01207F -+:102CF0007CE706F8254F0120F070F3E7DA4901EB95 -+:102D00000010001DFFF7E1BB7CB51D4613460446CD -+:102D10000E4600F1080221461846EFF743FF94F9EA -+:102D200008000F2804DD1F3820722068401C206036 -+:102D300096B10220CD4951F8261046182068694600 -+:102D4000801B20F07F40206094F908002844C01CBC -+:102D50001F2803DA012009E00420EBE701AAEFF7BE -+:102D600021FF9DF8040010B10098401C00900099CC -+:102D7000206831440844C01C20F07F4060607CBD66 -+:102D80002DE9FE430C460646097860799072207959 -+:102D900098461546507241B1B148803090F82E10D7 -+:102DA00020290AD00069401D0BE0D4E902232179D3 -+:102DB00003B02846BDE8F043A6E7AD484178701D52 -+:102DC000084420F07F47217900222846A368FFF7B6 -+:102DD0009BFF3946284600F0E9FCD4E9023221790C -+:102DE0006846FFF791FF41462846019CFFF7E5FE44 -+:102DF0002B4622460021304600F0C4FC002803D1B7 -+:102E00003146284600F0D2FCBDE8FE832DE9FE4F96 -+:102E1000814600F087FC38B15FF0000799F80000A8 -+:102E200020B10020BDE8FE8F0127F7E78C4D914CC3 -+:102E30004FF0000A803524B1002140F2D340AFF3B7 -+:102E4000008095F82D8085F823A0002624B100216C -+:102E50004FF49B60AFF300801FB94046FFF7C8FEF8 -+:102E6000804624B100214FF49C60AFF30080EFF75F -+:102E700019FE43466A464946FFF782FF24B1002106 -+:102E800040F2E640AFF3008095F82E0020280CD0E9 -+:102E900029690098401A0002C21700EB1260001264 -+:102EA00003D5684600F082FC012624B100214FF4CE -+:102EB0009E60AFF3008095F823000028BBD124B1B9 -+:102EC000002140F2F640AFF30080EFF7EBFD6B46D8 -+:102ED000644A002100F056FC0028A3D027B94146DF -+:102EE0006846FFF76AFE064326B16846FFF7EDFA2B -+:102EF000C9F8080024B1002140F20950AFF3008066 -+:102F000001208FE72DE9FF5F8A46814600F00AFC29 -+:102F1000534C803410B39AF80000002710B10128F8 -+:102F200000D0FFDF534D25B1002140F27F50AFF3B9 -+:102F300000800120A84600905FEA080604D0002126 -+:102F400040F28750AFF30080009800F0E2FB94F865 -+:102F50002D50002084F8230067B119E094F82E006A -+:102F60000127202800D1FFDF9AF800000028D9D0DF -+:102F7000FFDFD7E72846FFF73BFE054626B10021D5 -+:102F800040F29150AFF3008094F823000028D3D191 -+:102F900026B1002140F29B50AFF30080EFF782FD95 -+:102FA00083462B4601AA5146FFF7EAFE5FEA060870 -+:102FB00004D0002140F2A250AFF300803B462A46E5 -+:102FC00001A95846CDF80090FFF748FE064604EBED -+:102FD000850090F828B0B8F1000F04D0002140F22D -+:102FE000A950AFF3008000F089FB0090B8F1000F0A -+:102FF00004D0002140F2AF50AFF3008094F82300DA -+:10300000002899D1B8F1000F04D0002140F2B75048 -+:10301000AFF3008014490DF1040C01EB09109CE89A -+:103020000E0000F1040080E80E002EB35FEA0806EF -+:1030300004D0002140F2C450AFF300803BEA070007 -+:1030400020D094F82E0020281CD126B1002140F277 -+:10305000C950AFF300802846FFF7C6FB90B90CE0DB -+:10306000AC090020FFFF3F00AC070020B82202009F -+:103070008A0000200000000010E09AF80000D8B399 -+:10308000012849D0B8F1000F04D0002140F2E650E9 -+:10309000AFF30080284600F02AFB01265FEA08050E -+:1030A00004D0002140F2EF50AFF30080009800F010 -+:1030B00030FB25B1002140F2F350AFF300808EB118 -+:1030C00094F82D0004EB800090F82600202809D009 -+:1030D00025B1002140F2FA50AFF30080F948407862 -+:1030E000F8F708FE25B1002140F2FF50AFF3008051 -+:1030F00004B03046BDE8F09FFFE7B8F1000F04D000 -+:10310000002140F2D150AFF3008094F82D204946C1 -+:103110000420FFF751F9C0E7002E3FF40DAF002166 -+:1031200040F2DC50AFF3008006E72DE9F84FE64DA2 -+:10313000814695F82D004FF00008E44C4FF0010B4C -+:10314000474624B1002140F20D60AFF3008058469D -+:1031500000F0DFFA85F8237024B1002140F21260FC -+:10316000AFF3008095F82D00FFF742FD064695F875 -+:10317000230028B1002CE4D000214FF4C3604BE0C1 -+:1031800024B1002140F21C60AFF30080CE488038AB -+:1031900000EB861111F81900032856D1334605EBD0 -+:1031A000830A4A469AF82500904201D1012000E0A6 -+:1031B000002000900AF125000021FFF760FC014685 -+:1031C0000098014203D001228AF82820AF77E1B3AA -+:1031D00024B1002140F22160AFF30080324649461D -+:1031E0000120FFF7E9F89AF828A024B1002140F265 -+:1031F0002C60AFF3008000F081FA834624B10021F7 -+:1032000040F23160AFF3008095F8230038B1002C14 -+:1032100097D0002140F23560AFF3008091E7BAF11A -+:10322000000F07D095F82E00202803D13046FFF775 -+:10323000DBFAE0B124B1002140F24960AFF3008035 -+:10324000304600F054FA4FF0010824B1002140F25A -+:103250005260AFF30080584600F05BFA24B10021C1 -+:1032600040F25660AFF300804046BDE8F88F002C76 -+:10327000F1D0002140F24460AFF30080E6E7002087 -+:10328000EFF74ABB0120EFF747BB8E480078704745 -+:103290002DE9F0418C4C94F82E0020281FD194F891 -+:1032A0002D6004EB860797F82550202D00D1FFDF15 -+:1032B0008549803901EB861000EB4500407807F81E -+:1032C000250F0120F87084F82300294684F82E5039 -+:1032D000324602202234FFF76FF8002020700CE401 -+:1032E0002DE9F0417A4E784C012538B1012821D0E2 -+:1032F000022879D003287DD0FFDFF0E700F02AFA1A -+:10330000FFF7C6FF207E00B1FFDF84F821500020C8 -+:10331000EFF729FBA168481C04D0012300221846BE -+:10332000EFF774FB14F82E0F217806EB01110A68F1 -+:10333000012154E0FFF7ACFF0120EFF714FB94F8F4 -+:10334000210050B1A068401C07D014F82E0F21783E -+:1033500006EB01110A68062141E0207EDFF8648156 -+:10336000002708F10208012803D002281ED0FFDF41 -+:10337000B5E7A777EFF7E7FB98F80000032801D13E -+:1033800065772577607D534951F8200094F8201027 -+:1033900051B948B161680123091A00221846EFF7B4 -+:1033A00035FB022020769AE7277698E784F82050AC -+:1033B00000F0D0F9A07F50B198F8010061680123B6 -+:1033C000091A00221846EFF721FB257600E0277640 -+:1033D00014F82E0F217806EB01110A680021BDE8D0 -+:1033E000F041104700E005E036480078BDE8F041C4 -+:1033F000F8F780BCFFF74CFF14F82E0F217806EB8E -+:1034000001110A680521EAE710B52F4C94F82E0047 -+:10341000202800D1FFDF14F82E0F21782C4A02EB70 -+:1034200001110A68BDE81040042110477CB5264C04 -+:10343000054694F82E00202800D1FFDFA068401C2C -+:1034400000D0FFDF94F82E00214901AA01EB001003 -+:10345000694690F90C002844EFF7A4FB9DF904009D -+:103460000F2801DD012000E0002000990844616878 -+:10347000084420F07F41A16094F82100002807D083 -+:1034800002B00123BDE8704000221846EFF7BEBA33 -+:103490007CBD30B5104A0B1A541CB3EB940F1FD3EC -+:1034A000451AB5EB940F1BD3934203D9101A431856 -+:1034B0005B1C15E0954211D9511A0844401C434247 -+:1034C0000EE00000880000202C0A00200000000010 -+:1034D000AC070020B8220200FF7F841EFFDF00231C -+:1034E000184630BD0123002201460220EFF78EBAB4 -+:1034F0000220EFF738BAEFF7D5BA2DE9FC47B14C07 -+:10350000054694F82E00202800D1FFDF642D58D303 -+:10351000AD4A0021521B71EB010052D394F82E20CA -+:10352000A0462046DFF8A49290F82D7009EB021413 -+:10353000D8F8000001AA28446946EFF733FB9DF94B -+:103540000400002802DD0098401C0090A06800994B -+:1035500062684618B21A22F07F42B2F5800F30D26C -+:1035600008EB8702444692F82520202A0AD009EB6E -+:1035700002125268101A0002C21700EB1260001209 -+:1035800088421EDBA068401C10D0EFF78BFAA168C0 -+:10359000081A0002C11700EB11600012022810DDAA -+:1035A0000120EFF7E0F94FF0FF30A06020682844D9 -+:1035B000206026F07F402061012084F82300BDE8D0 -+:1035C000FC870020FBE72DE9F0477E4C074694F886 -+:1035D0002D00A4F1800606EB801010F8170000B94A -+:1035E000FFDF94F82D50A046794C24B1002140F61D -+:1035F0006500AFF3008040F6710940F67A0A06EBE9 -+:10360000851600BF16F81700012818D0042810D01E -+:1036100005280ED006280CD01CB100214846AFF377 -+:10362000008020BF002CEDD000215046AFF3008079 -+:10363000E8E72A4639460120FEF7BEFEF2E74FF0E2 -+:10364000010A4FF00009454624B1002140F68100EF -+:10365000AFF30080504600F05CF885F8239024B169 -+:10366000002140F68600AFF3008095F82D00FFF7AB -+:10367000BFFA064695F8230028B1002CE4D00021BB -+:1036800040F68C001FE024B100214FF40960AFF335 -+:10369000008005EB860000F1270133463A462630CC -+:1036A000FFF7EDF924B1002140F69400AFF300805C -+:1036B00000F024F8824695F8230038B1002CC3D0DE -+:1036C000002140F69A00AFF30080BDE785F82D6039 -+:1036D000012085F82300504600F01BF8002C04D090 -+:1036E000002140F6A700AFF30080BDE8F087354920 -+:1036F00081F82D00012081F82300704710B535486E -+:1037000008B1AFF30080EFF3108000F0010072B653 -+:1037100010BD10B5002804D12F4808B1AFF30080C8 -+:1037200062B610BD2D480068C005C00D10D010381D -+:1037300040B2002806DA00F00F0000F1E02090F817 -+:10374000140D03E000F1E02090F8000440097047F8 -+:103750000820704710B51B4C94F82400002804D1B1 -+:10376000F8F7B6F8012084F8240010BD10B5154C08 -+:1037700094F82400002804D0F8F7D3F8002084F847 -+:10378000240010BD10B51C685B68241A181A24F0B8 -+:103790007F4420F07F40A14206D8B4F5800F03D2C9 -+:1037A000904201D8012010BD002010BDD0E90032A8 -+:1037B000D21A21F07F43114421F07F41C0E900314A -+:1037C000704700002C0A0020FF1FA107AC07002053 -+:1037D00000000000000000000000000004ED00E018 -+:1037E000F0B5734AD2F80032724D002401212E78D0 -+:1037F00056B9714E3460704F03263F1D3E606E4FC8 -+:1038000004260C373E602970C2F80042D160116076 -+:10381000694C4834D16425688542FBD35160D1603E -+:10382000C2F80032F0BD2DE9F041044680074FF0A8 -+:1038300000054FF0010604D560480560066024F0DD -+:103840000204E0044FF0FF3705D55D484660C0F83C -+:10385000087324F48054600003D55A48056024F0AE -+:103860008044E0050FD55248C0F80052C0F80873F4 -+:1038700051490D60091D0D604F4A04210C32116041 -+:10388000066124F48074A00409D54F484660C0F84E -+:103890000052C0F808734D48056024F40054C4F386 -+:1038A0008030C4F3C031884200D0FFDF14F4404FB1 -+:1038B00014D047484660C0F8087346488660C0F890 -+:1038C0000052C0F8087344490D600A1D16608660F6 -+:1038D000C0F808730D60166024F4404420050AD532 -+:1038E0003E4846608660C0F80873C0F848733C489C -+:1038F000056024F400640DF077FB3A48044200D0E0 -+:10390000FFDFBDE8F08170B5202500224FEA0203F9 -+:1039100020FA02F1C90719D051B201F01F060124A3 -+:10392000B4404E09B60006F1E026C6F88041C6F85C -+:103930008042002906DA01F00F0101F1E02181F84F -+:10394000143D03E001F1E02181F80034521CAA4249 -+:10395000DED370BD70B5174C0D466060FFF763FF96 -+:103960006068FFF7D0FF2846F8F7A7F80CF05EFF75 -+:1039700000F0ABF80DF038FB0DF083FAF8F78CF996 -+:10398000BDE870400DF000B810B50A4C6068FFF754 -+:103990004AFF6068FFF7B7FF0DF026FBF8F721F943 -+:1039A0000020606010BD0348406870470A207047DF -+:1039B000008000408C00002004850040FC1F004077 -+:1039C00000C0004004E5014000D0004004D50040A4 -+:1039D00000E0004000F0004000F5004000B0004072 -+:1039E00008B50040FEFF0FFD70B522490A680AB312 -+:1039F0000022154601244B685B1C4B60092B00D349 -+:103A00004D600E7904FA06F30E681E420FD0EFF3F4 -+:103A1000108212F0010272B600D001220C689C43A1 -+:103A20000C6002B962B649680160002070BD521C8A -+:103A3000092AE0D3052070BD4FF0E0214FF480004B -+:103A4000C1F800027047EFF3108111F0010F72B658 -+:103A50004FF0010202FA00F20648036842EA03024C -+:103A6000026000D162B6E7E70248002101604160D0 -+:103A70007047000094000020AD4911F8410F4978CB -+:103A8000884201D3401A02E0C1F141010844C0B2AA -+:103A90007047A749433111F8410F4978884201D353 -+:103AA000401A02E0C1F141010844C0B27047A04988 -+:103AB000863111F8410F4978884201D3401A02E05B -+:103AC000C1F141010844C0B270479A4910B5802045 -+:103AD00081F8000496490020433101F8410F4870F5 -+:103AE000934901F8410F48709149863101F8410F1F -+:103AF000487091480DF00EF98F48401C0DF00AF9FE -+:103B0000EFF7DAF8BDE8104000F006B94020704742 -+:103B1000B2E770B50C4605460026FFF7ADFF844AB4 -+:103B2000A04214D30021641EE4B20FD392F84200E5 -+:103B3000105C05F8010B92F84200401CC0B282F8FC -+:103B400042004128EFD182F84210ECE7012600F054 -+:103B5000E3F8304670BD402070479AE770B50C46D8 -+:103B600005460026FFF795FF714A4332A04214D361 -+:103B70000021641EE4B20FD392F84200105C05F8F5 -+:103B8000010B92F84200401CC0B282F8420041286A -+:103B9000EFD182F84210ECE7012600F0BDF8304684 -+:103BA00070BD402101700020704710B50446FFF73A -+:103BB0007EFF2070002010BD70B50C460546FFF753 -+:103BC00076FF5B4A8632A04215D30021641EE4B220 -+:103BD0000FD392F84200105C05F8010B92F84200F6 -+:103BE000401CC0B282F842004128EFD182F8421056 -+:103BF000ECE7002401E042F2070400F08DF82046D3 -+:103C000070BD70B50C460546412900D9FFDF4B4811 -+:103C10000068103840B200F066F8C6B20D2000F01F -+:103C200062F8C0B2864203D2FFDF01E0EFF794F8FA -+:103C300021462846FFF76DFF0028F7D070BD2DE91B -+:103C4000F0413D4F0025064617F10407412257F881 -+:103C5000254094F8421094F8410000F053F888B3DE -+:103C60006D1CEDB2032DF1D331484122433090F861 -+:103C7000421090F8410000F045F8002831D02C485F -+:103C8000412290F8421090F8410000F03BF80028E3 -+:103C900027D027484122863090F8421090F8410002 -+:103CA00000F030F800281CD0EFF72CF822480DF077 -+:103CB00039F8B0F5005F00D0FFDFBDE8F0411E48E5 -+:103CC0000DF046B894F84100265494F84100401C89 -+:103CD000C0B284F841004128C6D1002084F84100D8 -+:103CE000C2E7BDE8F081002806DA00F00F0000F11D -+:103CF000E02090F8140D03E000F1E02090F80004BB -+:103D000040097047401C884204D0904200D109B15C -+:103D1000002070470120704710B507480DF002F8E9 -+:103D2000002803D1BDE81040EEF7D7BF10BD00005A -+:103D30005C0A00200DE000E09C00002004ED00E0A3 -+:103D4000164908784A78401CC0B2904205D0144BFE -+:103D500001221A60BFF34F8F087070472DE9F041C0 -+:103D60000E4C4FF0E02600BFEFF77CF820BF40BFBD -+:103D700020BF677820786070D6F80052EDF7CCFA53 -+:103D8000854305D1D6F8040210B92078B842EBD0AB -+:103D9000EFF763F80020BDE8F0810000AC000020E0 -+:103DA000180502402DE9F041012528034FF0E021DC -+:103DB0000026C1F880011E4CC4F800610C2000F000 -+:103DC0002CF81C4801680268C94341F3001142F015 -+:103DD00010020260C4F804532560491C00E020BFB3 -+:103DE000D4F80021002AFAD019B9016821F0100195 -+:103DF0000160114807686560C4F80853C4F80061A1 -+:103E00000C2000F00AF83846BDE8F08110B50446F1 -+:103E1000FFF7C8FF2060002010BD00F01F02012145 -+:103E200091404009800000F1E020C0F88012704706 -+:103E300000C0004010ED00E008C500402DE9F0474B -+:103E4000FF4C0646FF21A06800EB06121170217896 -+:103E5000FF2910D04FF0080909EB011109EB0617F3 -+:103E60004158C05900F0F4F9002807DDA168207816 -+:103E700001EB061108702670BDE8F08794F8008009 -+:103E800045460DE0A06809EB05114158C05900F006 -+:103E9000DFF9002806DCA068A84600EB08100578CA -+:103EA000FF2DEFD1A06800EB061100EB08100D709C -+:103EB0000670E1E7F0B5E24B0446002001259A6860 -+:103EC0000C269B780CE000BF05EB0017D75DA742DE -+:103ED00004D106EB0017D7598F4204D0401CC0B262 -+:103EE0008342F1D8FF20F0BD70B5FFF704FBD44C3E -+:103EF00008252278A16805EB0212895800F0A8F97C -+:103F0000012808DD2178A06805EB01114058BDE8C3 -+:103F10007040FFF7E7BAFFF7B8F9BDE87040F7F770 -+:103F2000E9BE2DE9F041C64C2578FFF7E4FAFF2DF4 -+:103F30006ED04FF00808A26808EB0516915900F002 -+:103F400087F90228A06801DD80595DE000EB0511CA -+:103F500009782170022101EB0511425C5AB1521E11 -+:103F60004254815901F5800121F07F418151284659 -+:103F7000FFF764FF34E00423012203EB051302EB97 -+:103F8000051250F803C0875CBCF1000F10D0BCF5DF -+:103F9000007F10D9CCF3080250F806C00CEB423C6D -+:103FA0002CF07F4C40F806C0C3589A1A520A09E018 -+:103FB000FF2181540AE0825902EB4C3222F07F4209 -+:103FC0008251002242542846FFF738FF0C21A06896 -+:103FD00001EB05114158E06850F82720384690471A -+:103FE0002078FF2814D0FFF786FA2278A16808EB22 -+:103FF00002124546895800F02BF9012893DD2178FB -+:10400000A06805EB01114058BDE8F041FFF76ABA1E -+:10401000BDE8F081F0B51D4614460E460746FF2B5D -+:1040200000D3FFDFA00700D0FFDF8548FF2100227B -+:10403000C0E90247C5700671017042708270104677 -+:10404000012204E002EB0013401CE154C0B2A8427C -+:10405000F8D3F0BD70B57A4C064665782079854274 -+:1040600000D3FFDFE06840F825606078401C607096 -+:10407000284670BD2DE9FF5F1D468B460746FF248D -+:10408000FFF739FADFF8B891064699F80100B8420F -+:1040900000D8FFDF00214FF001084FF00C0A99F81B -+:1040A0000220D9F808000EE008EB0113C35CFF2BD7 -+:1040B0000ED0BB4205D10AEB011350F803C0DC451A -+:1040C0000CD0491CC9B28A42EED8FF2C02D00DE0B8 -+:1040D0000C46F6E799F803108A4203D1FF2004B09A -+:1040E000BDE8F09F1446521C89F8022008EB041129 -+:1040F0000AEB0412475440F802B00421029B00224C -+:10410000012B01EB04110CD040F801204FF4007892 -+:1041100008234FF0020C454513D9E905C90D02D01B -+:1041200002E04550F2E7414606EB413203EB04134F -+:1041300022F07F42C250691A0CEB0412490A8154E2 -+:104140000BE005B9012506EB453103EB041321F023 -+:104150007F41C1500CEB0411425499F800502046A5 -+:10416000FFF76CFE99F80000A84201D0FFF7BCFEF3 -+:104170003846B4E770B50C460546FFF7BCF906466D -+:1041800021462846FFF796FE0446FF281AD02C4DFC -+:10419000082101EB0411A8684158304600F058F896 -+:1041A00000F58050C11700EBD14040130221AA68EE -+:1041B00001EB0411515C09B100EB4120002800DC47 -+:1041C000012070BD002070BD2DE9F0478846814672 -+:1041D000FFF770FE0746FF281BD0194D2E78A86800 -+:1041E0003146344605E0BC4206D0264600EB0612B6 -+:1041F0001478FF2CF7D10CE0FF2C0AD0A6420CD18A -+:1042000000EB011000782870FF2804D0FFF76CFE47 -+:1042100003E0002030E6FFF76BF941464846FFF720 -+:10422000A9FF0123A968024603EB0413FF20C85429 -+:10423000A878401EB84200D1A87001EB041001E03C -+:10424000280B002001EB061100780870104613E6D9 -+:10425000081A0002C11700EB11600012704700003D -+:1042600070B50446A0F500002D4EB0F1786F02D273 -+:104270003444A4F500042B48844201D2012500E017 -+:10428000002500F043F848B125B9B44204D32648CC -+:10429000006808E0012070BD002070BD002DF9D13C -+:1042A000B442F9D321488442F6D2F3E710B504466C -+:1042B000A0F50000B0F1786F03D219480444A4F5CA -+:1042C000000400F023F84FF0804130B11648006838 -+:1042D00004E08C4204D2012003E014488442F8D266 -+:1042E000002080F0010010BD10B520B1FFF7DEFF07 -+:1042F00008B1012010BD002010BD10B520B1FFF79E -+:10430000AFFF08B1012010BD002010BD08480949C9 -+:104310000068884201D101207047002070470000EA -+:1043200000000020003002002000002008000020D3 -+:10433000B0000020BEBAFECA0548064A0168914294 -+:1043400001D100210160044901200860704700008C -+:10435000B0000020BEBAFECA40E50140534800212B -+:104360000170417010218170704770B50546164686 -+:104370000C460220EEF73FFA4C49012008704C49E8 -+:10438000F01E08604B480560001F046070BD10B54A -+:104390000220EEF730FA4549012008704648002116 -+:1043A000C0F80011C0F80411C0F8081143494FF4D7 -+:1043B0000000086010BD3D480178C9B1404A4FF483 -+:1043C000000111603C49D1F800310022002B1CBFD4 -+:1043D000D1F80431002B02D0D1F8081111B142708C -+:1043E000102103E001214170364909688170027093 -+:1043F0000020EEF700BA2D480178002904BF40786C -+:1044000070472D48D0F80011002904BF02207047E2 -+:10441000D0F8001100291CBFD0F80411002905D0E4 -+:10442000D0F80801002804BF012070470020704721 -+:104430001E4800B50278204B4078C821491EC9B2F9 -+:1044400082B1D3F800C1BCF1000F10D0D3F8000145 -+:1044500000281CBFD3F8040100280BD0D3F80801B2 -+:1044600050B107E0022802D0012805D002E000295F -+:10447000E4D1FFDF002000BD012000BD0B48017822 -+:10448000002904BF807870470B48D0F8001100293C -+:104490001CBFD0F80411002902D0D0F8080108B1DF -+:1044A0001020704707480068C0B27047B400002071 -+:1044B00010F5004008F5004000F0004004F5014010 -+:1044C00008F5014000F400404C48002101704170A3 -+:1044D000704770B5064614460D460120EEF78BF97D -+:1044E00047480660001D0460001D056070BD70B582 -+:1044F000424A012540EA01411570424A41F080716B -+:104500001160414C0026C4F80461404A4FF04071EC -+:104510001160002802BFC4F80052256070BD012858 -+:1045200018BFFFDFC4F8006225604FF00070384903 -+:10453000086070BD3148017879B1344A4FF040715C -+:1045400011603149D1F804210021002A08BF4170CF -+:1045500002D0304A1268427001700020EEF74BB969 -+:1045600026480178002904BF407870472648D0F8D3 -+:104570000401002808BF704726480068C0B2704791 -+:10458000002808BF704730B51C480078002808BFD5 -+:10459000FFDF1D48D0F80411002918BF30BD0224E8 -+:1045A000C0F80443DFF870C0DCF80010C1F3001558 -+:1045B000DCF8001041F01001CCF80010D0F8041124 -+:1045C000002904BF4FF400414FF0E02207D100BFA3 -+:1045D000C2F8801220BFD0F80431002BF8D02DB9DA -+:1045E000DCF8001021F01001CCF80010C0F80843EE -+:1045F00030BD05490120886070470000B7000020E9 -+:1046000008F5004004F5004000F0004008F50140C6 -+:1046100004F5014000F4004010ED00E070B5FF4CDF -+:1046200000250120657025706572A572E07284F81E -+:104630002150A56204F1380065630CF06BFB002883 -+:1046400018BFFFDFA577F6480DF0F6FBF5494FF0F0 -+:10465000FF300860091D0860091D0D60091D086014 -+:10466000091D0D60091D0860091D0860091D08600D -+:10467000091D0860091D0860091D0860091D086002 -+:10468000091D0860091D086070BD30B4E349026867 -+:10469000DFF898C34A6142688A61007A08770A7D28 -+:1046A000E14BACF1040401204AB10A7E00FA02F2A7 -+:1046B0001A608D7D002D0CBF2260CCF800204A7D51 -+:1046C000002A04BF30BC70474A7E90401860C97D04 -+:1046D00000290CBF2060CCF8000030BC7047D549E1 -+:1046E000D3480860091DD4480860704710B50446D7 -+:1046F000012908BF002105D002291ABFFFDF0021D0 -+:104700004FF0807141F48470CA4940F48010086011 -+:10471000E0B240F44030091D40F000700860C74826 -+:10472000D0F80001002818BFFFDF10BD01202DE9DF -+:10473000F04102254FF0E0270026C7F88051C0491C -+:104740000E600860BF490A6822F0770242F08802D2 -+:1047500042F000420A60091D0A6822F47F4242F4D6 -+:10476000B0520A60AD4CB84965770D60B84AB74998 -+:104770001160121FB7491160B74A40F25B611160C6 -+:10478000121F40F203111160111F0860B34903208A -+:104790000860B3499620086094F91E000CF06AFD89 -+:1047A000607F002814BF4FF4C020AE48AE490860B7 -+:1047B000AF49AE480860091FAE480860C7F880528C -+:1047C0009E491020C1F8040384F82D60BDE8F081F3 -+:1047D000A948016821F0010141F080710160704732 -+:1047E0008E4A0368C2F802308088D0801172704708 -+:1047F0008A4890F821007047884A517010707047BD -+:10480000F0B50546800000F1804000F580508B88AF -+:10481000C0F820360B78D1F8011043EA0121C0F826 -+:10482000001605F10800012707FA00F6934C002A4C -+:1048300004BF2068B04304D0012A18BFFFDF2068FE -+:1048400030432060206807FA05F108432060F0BD7E -+:1048500010B504460CF00EFD7048847710BD6F480B -+:1048600090F82E0070476D4890F830007047844AE9 -+:10487000C1781160006883490002086070472528EC -+:1048800008BF02210ED0262808BF1A210AD02728E7 -+:1048900008BF502106D00A2894BF0422062202EB4A -+:1048A0004001C9B2784A116078490860704770B415 -+:1048B0005A4B93F80AC0BCF1010F21D0BCF1020F92 -+:1048C0001CBF70BC70475C7D002C04BF70BC70477F -+:1048D0004FF47A74BCF1010F6D4E16D0DD7D93F864 -+:1048E00019C0002D18BF0125012908BF292121D099 -+:1048F000022A08BF674E06F2E141B1FBF4F119E06C -+:104900001C7D002CE4D170BC70479D7D93F818C0CD -+:10491000002D18BF0125012947D0022A06BF5E4E8F -+:104920004FF47A714FF4C861314401F5FA7100BF58 -+:10493000B1FBF4F1491F0844584908605849002068 -+:10494000C1F84C014FEA0C2085F0010140EA01500A -+:1049500040F00311187F820002F1804202F5C0424C -+:10496000C2F810154F4901EB8001987EC20002F198 -+:10497000804202F5F832C2F81415DFF82CC1C2F8F3 -+:1049800010C5DA7ED30003F1804303F5F833C3F892 -+:1049900014153849C3F81015012101FA00F09140AF -+:1049A00008434249086070BC7047022A14BF4FF4A4 -+:1049B000C8614FF47A7149F6FC621144B8E72DE9F9 -+:1049C000F0411E4D0746032014468846C5F80002F4 -+:1049D000124E707F002814BF4FF4C0202148334985 -+:1049E000086040460CF094FC20460CF071FC01205D -+:1049F00017B1012F60D062E02D4B19685A06022CC6 -+:104A0000D2F8202314BFC2F30622C2F3066221F4B7 -+:104A1000FE4141EA02211960B0724BE0380B0020E0 -+:104A20004C0B0020000E0040180500500C050050F3 -+:104A3000060102001415004025000302001000408A -+:104A4000FC1F00403C1700406015004044800040BF -+:104A50009CF5014028110040381500401015004019 -+:104A6000441500400000040408F501404080004067 -+:104A7000A4F501401011004074170040401600409A -+:104A8000241500401C150040081500405415004036 -+:104A9000A224020004360200683602004C85004061 -+:104AA00000800040006000404C81004004F501405F -+:104AB00088150040286002E00221B1726860F9495F -+:104AC000C864F948006822464146BDE8F041EEE678 -+:104AD0002DE9F0418846F549074603201546C1F8FF -+:104AE0000002F34C607F002814BF4FF4C020F1484F -+:104AF000F14E306040460CF00BFC28460CF0E8FB11 -+:104B000017B1012F19D021E0EC490A684806022D9F -+:104B1000D0F8200314BFC0F30620C0F3066022F4CF -+:104B2000FE4242EA002008600120A072606B40F45F -+:104B3000801060634FF4801007E00220A072606B69 -+:104B400040F4001060634FF4001030602A46414684 -+:104B5000BDE8F0410020AAE62DE9FF4FD34C824684 -+:104B6000002681B003208946C4F80002D04D687F3A -+:104B7000002814BF4FF4C020CE48CF4F38600398B0 -+:104B80000CF0C6FB04980CF0A3FBCD494FF00108D4 -+:104B9000BAF1000F03D0BAF1010F32D03BE0C74B9E -+:104BA00004981A684FF0805C0228DCF8200314BFD8 -+:104BB000C0F30620C0F3066022F4FE4242EA002061 -+:104BC00018600C6095F82D00012806D0022818BF47 -+:104BD000FFDF0CD085F80A801DE0DDE9031395F8AE -+:104BE0002C2048460CF0E6FBA96A4618F2E7DDE9FE -+:104BF000031295F82C3048460CF097FBA96A46182A -+:104C0000E8E7B048086095F82D00012818BFFFDFDD -+:104C100020D00220A872AC480660AD49AB480860BD -+:104C2000686B40F400206863D4F800924FF0100ADB -+:104C3000C4F808A30025C4F80052A6484FF4802BFE -+:104C4000C0F800B0FF208DF80000C4F81051C4F87F -+:104C500010800EE0DDE9031395F82C2096200CF06F -+:104C600087FBA96A4618D4E79DF80000401E8DF81E -+:104C700000009DF8000018B1D4F810010028F3D00E -+:104C80009DF80000002808BFFFDFC4F80051C4F8F9 -+:104C90000C51C4F81051C4F80451C4F81451C4F8AC -+:104CA0001851C4F828518C4800680090C4F800924C -+:104CB000C7F800B0C4F804A34FF400203860794866 -+:104CC000C0F84C8078480068B04228BFFFDF30460B -+:104CD000DDE9031205B0BDE8F04FE8E52DE9F8473E -+:104CE000724CD4F8000220F00309D4F804034FF00A -+:104CF000100AC0F30018C4F808A30026C4F8006224 -+:104D00006B4D687F002814BF4FF4C020694871497B -+:104D10000860A87A0127012802D0022803D014E0F5 -+:104D2000287D10B911E0687D78B1A87EEA7E07FA87 -+:104D300000F007FA02F210430860287F800000F1BB -+:104D4000804000F5C040C0F81065FF208DF80000DD -+:104D5000C4F81061276104E09DF80000401E8DF842 -+:104D600000009DF8000018B1D4F810010028F3D01D -+:104D70009DF80000002808BFFFDFC4F81061C4F8E8 -+:104D800028616E72AE72EF72C4F80092B8F1000F33 -+:104D900018BFC4F804A3BDE8F88700684F4920F0A5 -+:104DA0007F40086070474FF0E0200221C0F880117A -+:104DB000C0F8801270474FF0E0210220C1F80001D6 -+:104DC000704747490870704710B546480BF0AAFF76 -+:104DD000002818BFFFDF10BD42480BF0B9BF4249A1 -+:104DE0000860704730B5324C0546A06AA84228BF1B -+:104DF000FFDF012020732561607F40B128442061DE -+:104E00002A48D0F8001241F04001C0F800122549AC -+:104E10000020C1F84401354920690860606B2649CB -+:104E200040F4800060634FF48000086030BD70B5CE -+:104E30001F4C0546022020730CF057FA024694F8E6 -+:104E40002C1028460CF0E0FA2061617F41B1084443 -+:104E500020611648D0F8001241F04001C0F800125D -+:104E600010490020C1F844012169A06A08441F4983 -+:104E7000086070BD17494FF4800008600C48416B12 -+:104E800021F480014163002101737047054801212D -+:104E90004160C1600021C0F8441114480160044819 -+:104EA00081627047008000404C8500400010004047 -+:104EB000380B00200000040404F501408815004070 -+:104EC000ACF5014004100040488500404881004096 -+:104ED000A8F5014008F50140181100403C150040BC -+:104EE000B9000020700B00200415004044850040EC -+:104EF000FE4940204877FE490860FE48D0F800127D -+:104F000041F04001C0F800127047FA48D0F8001292 -+:104F100021F04001C0F80012F549022008607047F6 -+:104F2000F448D0F8001221F01001C0F8001201215D -+:104F300081617047EF480021C0F81C11D0F80012C1 -+:104F400041F01001C0F800127047EA4981B0D1F871 -+:104F50001C21012A1EBF002001B07047E64A1268DA -+:104F600002F07F02524202700020C1F81C01E348A7 -+:104F700000680090012001B0704730B50C00054674 -+:104F800008BFFFDF14F0010F1CBF012CFFDF002D55 -+:104F90000CBF01200220D54901284872CC72D549A6 -+:104FA00004BFD1F8000240F0040007D0022807BF78 -+:104FB000D1F8000240F00800FFDF30BDC1F8000268 -+:104FC00030BD70B5C94C0023E17A11F0020F18BF53 -+:104FD00010F0040F16D111F0100F1CBF94F82F2001 -+:104FE000002A02D094F8312062B111F0080F1CBFE2 -+:104FF00094F82020002A05D111F0040F03D094F872 -+:10500000211001B9012394F809C00122B949BCF16A -+:10501000000F06D000F00200184312D0BDE8704027 -+:105020005CE6607F002814BF4FF4C020B448B54B45 -+:105030001860D1F8000220F00300C1F80002E2720B -+:1050400070BD00252846BCF1010F0BD0BCF1020F4A -+:1050500018BFFFDF16D0A06A01222844BDE87040C7 -+:10506000002124E4D1F8003223F00403C1F8003217 -+:105070006072E272A27201231A46002196200CF09F -+:1050800054F90FE0D1F8003223F00803C1F80032E0 -+:105090006072E2720220A07201231A46002196205B -+:1050A0000CF066F90546D6E72DE9F84F964FD7F88C -+:1050B0004C218E4C93494FF00108A07A0026CAB1CA -+:1050C000012802D0022803D014E0227D12B911E099 -+:1050D000627D7AB1A27EE37E08FA02F208FA03F357 -+:1050E0001A430A60227F920002F1804202F5C04218 -+:1050F000C2F81065626B0A606663217B29B1D7F83C -+:105100004411012908BF012200D00022794DD5F8B1 -+:10511000101101290CBF40210021012805BFD5F83D -+:105120000C31012B002320231943012805BFD5F89A -+:105130000431012B002310230B437449022804BFC0 -+:10514000D1F800C0BCF1010F07D1D5F80CC1BCF1FA -+:10515000010F08BF4FF0080C01D04FF0000C4CEAD3 -+:105160000303022804BF0968002905D1D5F80C11F2 -+:10517000012908BF042100D000211943022803D1CE -+:10518000002A18BF022200D100221143022804BFC6 -+:10519000D5F80401012805D1D7F84401012818BF2A -+:1051A000012000D1002040EA01095948016811F0AE -+:1051B000FF0F03D0D5F81411012900D0002184F885 -+:1051C0002E10006810F0FF0F03D0D5F81801012849 -+:1051D00000D0002084F82F004E48006884F830008A -+:1051E00043480068402803D1FFF705F9012800D0A3 -+:1051F000002084F83100C5F80061C5F80C61C5F8DD -+:105200001061C5F80461C5F81461C5F81861C5F8E6 -+:105210002861414800680090C7F844613F48006831 -+:105220004D46DFF8FC900090D9F800106162607F75 -+:1052300000281CBF081A60623A480068A0620CF09F -+:1052400054F884F82C00A07ADFF8DCA084F82D0054 -+:1052500002280CD1607850B1DAF8001009780840C3 -+:10526000217831EA000008BF84F8208001D084F85A -+:105270002060DFF8B88015F0010F15D098F8001005 -+:105280002B4A4908606A52F8211088470121294AAF -+:1052900098F80030A06A52F82320904798F8000050 -+:1052A00010F0010F0BD01FE015F0200F18BF0221E6 -+:1052B000EDD115F0020F18BF0021E8D1EEE7DAF8C2 -+:1052C0000000062200F10901A01C0CF0E9FB40B926 -+:1052D000207ADAF800100978B0EBD11F08BF01205E -+:1052E00000D0002084F82100284625E0380B00205B -+:1052F0006015004000100040481500401C1100409F -+:105300000000040408F50140008000400014004043 -+:105310004016004010140040181100404481004025 -+:10532000448500404085004004150040B90000203D -+:10533000D022020008230200FFF743FE15F0020FFF -+:1053400005D03D4898F8001050F82100804715F02E -+:105350000C0F07D0394898F8001050F82110C5F309 -+:10536000C000884715F0200F05D0354898F8001088 -+:1053700050F82100804798F80000022805D105F078 -+:105380006E00402806D101F0DDFB98F800000428EB -+:1053900028BFFFDFA07A022818BFBDE8F88F207B66 -+:1053A000002808BFBDE8F88FC7F84461022815D06F -+:1053B000012818BFFFDFA16A2069884298BFFFDF7C -+:1053C000D4F81000C9F80000606B1E4940F480005A -+:1053D00060634FF480000860BDE8F88F2169A06A1F -+:1053E0000844EFE7012804BF28207047022804BFC3 -+:1053F0001820704700B5FFDF282000BD012804BF3A -+:1054000041F6A4707047022804BF41F2883070470B -+:1054100000B5FFDF41F6A47000BD012804BF41F2D2 -+:10542000D4707047022804BF41F20400704700B5F1 -+:10543000FFDF41F2D47000BDD8220200E822020052 -+:10544000F822020004F5014010B53F480AF0F7FBCE -+:1054500000213D480AF022FC01213B480AF0F2FB02 -+:105460003A49002081F822004FF6FF7088843849BD -+:105470000880488010BD704734498A8C824218BF2A -+:105480007047002081F822004FF6FF708884704733 -+:105490002D49016070472E49088070472B498A8C3E -+:1054A000A2F57F43FF3B03D000210160084670470F -+:1054B00091F822202549012A1ABF0160012000200D -+:1054C0007047224901F1220091F82220012A04BFED -+:1054D00000207047012202701D4800888884104611 -+:1054E00070471B49488070471849194B8A8C5B8864 -+:1054F0009A4206D191F82220002A1EBF01600120A5 -+:105500007047002070471148114A818C528891429F -+:1055100009D14FF6FF71818410F8221F19B10021C3 -+:10552000017001207047002070470848084A818CAC -+:105530005288914205D190F8220000281CBF00201B -+:1055400070470120704700009A0B0020740B002068 -+:10555000BA0000207047574A012340B1012818BF04 -+:105560007047137008689060888890817047537006 -+:105570000868C2F802008888D08070474D4A10B190 -+:10558000012807D00EE0507860B1D2F80200086020 -+:10559000D08804E0107828B19068086090898880ED -+:1055A0000120704700207047424910B1012803D004 -+:1055B00006E0487810B903E0087808B10120704788 -+:1055C0000020704730B58DB00C4605460D2104A86B -+:1055D0000CF02BFBE0788DF81F0020798DF81E0071 -+:1055E00060798DF81D002868009068680190A868AF -+:1055F0000290E868039068460BF0B2F920789DF8B5 -+:105600002F1088420CD160789DF82E10884207D167 -+:10561000A0789DF82D10884202BF01200DB030BD4A -+:1056200000200DB030BD30B50C4605468DB04FF0B2 -+:10563000030104F1030012B1FEF790FA01E0FEF756 -+:10564000E0FA60790D2120F0C00040F04000607168 -+:1056500004A80CF0EAFAE0788DF81F0020798DF8A4 -+:105660001E0060798DF81D00286800906868019020 -+:10567000A8680290E868039068460BF071F99DF8FD -+:105680002F0020709DF82E0060709DF82D00A070F6 -+:105690000DB030BD10B5002904464FF0060102D010 -+:1056A000FEF75CFA01E0FEF7ACFA607920F0C0008A -+:1056B000607110BDBE00002070B5FA4E044696F829 -+:1056C00092000025012828D096F88C00012833D0BC -+:1056D00096F86A0001281CBF002070BD6570132079 -+:1056E0002070202206F16C01A01C0CF005FA0120AC -+:1056F000A07186F86A50B6F86E10A6F88E10EA49C6 -+:1057000049684A7B86F8902086F88C000888FBF769 -+:10571000AFFAFAF71FFF012070BD657019202070E5 -+:10572000D6F89300C4F80200D6F89700C4F8060033 -+:1057300086F89250012070BD657006202070D6F862 -+:105740008E00C4F8020086F88C50E4E7D54890F843 -+:105750006A10002914BFB0F86E004FF6FF70704752 -+:1057600070B5D14800250570017800291CBFFFDF06 -+:1057700070BDCC4C84F8625084F8635084F8645057 -+:1057800084F8655084F85E5084F8605084F8565070 -+:1057900084F8365084F867507F21817094F8660051 -+:1057A00028B1FFF7B2FBFEF706FE84F8665084F8D6 -+:1057B0006A5084F88C5084F89250BC480AF0D6F8AD -+:1057C000BDE87040BA480AF0D1B8B64890F8620017 -+:1057D0007047B44900B591F8580091F85710C0F3DC -+:1057E0008002C0F340031A4400F001001044052970 -+:1057F00010D2DFE801F00B070B030900AD4931F8C7 -+:10580000100000BDAC4800BDAC4900E0AC4931F827 -+:10581000100000BDFFDF002000BDA24840F2712152 -+:10582000B0F85A00484370479E4890F86800002836 -+:1058300018BF0120704710B59A4C207A022818BF73 -+:10584000032808D1207C04F1110108F071FF082819 -+:105850001CBF012010BD207A002816BF022800209E -+:105860000120BDE81040FFF79FBE8E4908727047C7 -+:105870008C4981F8600070472DE9F041894C82B075 -+:10588000207A002816BF022800200120607204F14F -+:105890000A01FFF773FE207A022816BF03280121B0 -+:1058A000002184F85F10082084F85D00607A0126EA -+:1058B000002504F10A02012804BF527912F0C00F3A -+:1058C0000AD004F10A02012804D1507900F0C00086 -+:1058D000402801D0002000E0012084F85E0029B9B2 -+:1058E00094F85700012818BF042806D1207C04F141 -+:1058F000110108F01DFF84F85D002560FDF7B8F880 -+:1059000060604FF0000894F85D0008F02DFF074636 -+:1059100094F85F00002818BF002F04D010213846EB -+:1059200009F093FD68B194F8600000281CBF94F85A -+:105930005E0000281DD0607A04F10A0101280ED013 -+:1059400012E06672424604F10A013846FFF76BFE28 -+:1059500094F85D1004F10A0008F0FEFF09E04879B0 -+:1059600000F0C000402840D0294604F10A00FFF7AB -+:1059700091FE04F10A014D480AF01EF8617A4B4885 -+:105980000AF03FF804F10A0149480AF015F8617A73 -+:1059900047480AF036F894F8570001281EBF04283B -+:1059A00002B0BDE8F081002594F85D0008F0E5FE46 -+:1059B000040004BF02B0BDE8F081102109F045FDEC -+:1059C00000281CBF02B0BDE8F0812A466946204687 -+:1059D000FFF729FE6946354809F0FCFF01213348ED -+:1059E0000AF01CF802B0BDE8F08108F0EEFF424674 -+:1059F00004F10A01FFF717FEBBE770B5294C417BA4 -+:105A000084F85810017984F8571001290CBF00223E -+:105A10000288A4F85A20827B84F868208279002AC0 -+:105A200016BF022A002201222274D0F80720C4F8EF -+:105A30001120B0F80B00A4F8150094F856000125C9 -+:105A4000002818BF84F8635094F83600002818BF67 -+:105A500084F8645005293AD2DFE801F0030C1E34C3 -+:105A60000C000021114809F084FF01210F4809F0C2 -+:105A7000BFFF2DE001210D4809F07BFF04F111016A -+:105A80000A4809F0A7FF217C084809F0C7FF012157 -+:105A9000064809F0ADFF1BE00621044809F069FF44 -+:105AA00016E00000BC0B0020CC000020580C0020A9 -+:105AB000800C002028230200D0891300302302002C -+:105AC000202302000221FE4809F053FF00E0FFDF1F -+:105AD0000421FC4809F04DFF84F86250002070BD9D -+:105AE00070B5F94C0546002084F864002A4604F19C -+:105AF00017000CF001F884F83650012084F8640097 -+:105B000070BD10B5F04C002284F8632084F8560074 -+:105B1000024604F137000BF0EFFF012084F8630028 -+:105B200010BDE94981F8670070472DE9F041E74E63 -+:105B300082B0307808BBE44C94F86200E8B1FFF71B -+:105B400043F9002584F8615075702846FFF739F94C -+:105B5000FEF7ECFDFEF7C3FDDD48FEF788FEDD48ED -+:105B6000FFF71BF994F85800002610F0010F08D039 -+:105B70002520FEF784FE012612E002B00C20BDE8CD -+:105B8000F08110F0020F04D02620FEF778FE0226E6 -+:105B900006E010F0040F03D02720FEF770FE042665 -+:105BA000FEF79DFD84F85C60FFF705F900210122F6 -+:105BB0000846FEF78DFF0F210520FEF71DFE94F825 -+:105BC0005E00002804BF94F85F00002805D194F817 -+:105BD0005700012818BF042874D1FCF749FF064676 -+:105BE00031466068FDF755FCBB4990FBF1F701FBBE -+:105BF000170041423046FCF746FC6060206838449C -+:105C0000206008F092FD2168884274D8C4E90056EB -+:105C10004FF0010894F85D0008F0A6FD064694F8E0 -+:105C20005F000127002818BF002E04D01021304645 -+:105C300009F00BFC68B194F8600000281CBF94F8D0 -+:105C40005E0000281DD0617A04F10A0001290ED0FF -+:105C500012E03A46677204F10A013046FFF7E3FCAE -+:105C600094F85D1004F10A0008F076FE09E040792E -+:105C700000F0C00040281DD0414604F10A00FFF7A3 -+:105C800009FD04F10A018E4809F096FE617A8C48FC -+:105C900009F0B7FE04F10A018A4809F08DFE617A25 -+:105CA000884809F0AEFE94F85700012818BF042870 -+:105CB00021D108E008F089FE3A4604F10A01FFF715 -+:105CC000B2FCDEE717E0012794F85D0008F055FD0F -+:105CD000060010D0102109F0B8FB60B93A466946B9 -+:105CE0003046FFF7A0FC6946754809F073FE0121B4 -+:105CF000734809F093FE617A04F10A00FEF770FD23 -+:105D000094F8570001281EBF042894F86300002867 -+:105D100008D094F8562004F13701694809F09CFE38 -+:105D200084F8635094F8640040B194F8362004F18C -+:105D30001701644809F0BCFE84F8645008F069FD5E -+:105D4000664808F0FAFD84F86600FFF745F802B0EF -+:105D50000020BDE8F0815D494860704770B55A4C3D -+:105D600006002BD094F8581094F85C20002521EA06 -+:105D7000020010F0010F04D02520FEF780FD012560 -+:105D800015E011F0020F02D012F0020F06D011F050 -+:105D9000040F0CD012F0040F05D008E02620FEF707 -+:105DA0006EFD022503E02720FEF769FD0425FEF7BE -+:105DB00096FC94F85C00284384F85C0094F8610039 -+:105DC00040B194F85700012808BFFFDFBDE87040DC -+:105DD00000F0BFBA36B1002201234FF4967110468D -+:105DE000FEF7BAFE3648FEF7FAFF94F8570005288A -+:105DF00009D2DFE800F0030303090300012108468C -+:105E0000FFF7BBF800E0FFDF94F8580094F85C104F -+:105E100030EA01014FF0010002D02C49087070BD3A -+:105E200094F85710012912BF84F86100002184F80A -+:105E30005C10F2E710B5FEF7C7FF2448007840B9C0 -+:105E4000214890F8620020B10020FFF787FF002072 -+:105E500010BDFFF71BF8FFF70DF8FEF73FFFFEF749 -+:105E6000A2FFFEF7B9FF0C2010BD184901204870B1 -+:105E70007047154981F86500704770B5002503F03B -+:105E8000A3FA48B1114E3078012809D0022801D078 -+:105E9000032842D0FFDF70BDBDE8704000F059BA62 -+:105EA000094C94F85700032837D094F8660018B1CD -+:105EB000FEF76DFAFFF71CF80848FEF790FF0FE0B9 -+:105EC000580C0020800C0020BC0B0020CC000020CF -+:105ED0001B2302001823020040420F00A80C0020E0 -+:105EE0009620FEF7A4FF94F85700012818BF042855 -+:105EF0000AD094F86800012814BF0328102545F043 -+:105F00000E010020FFF739F894F86700012808BF58 -+:105F1000FFF710F80220307070BDBDE8704001201E -+:105F20001CE770B5FE4DFF4C95F86700012817D0AF -+:105F300095F8660018B1FEF7E8FFFEF73CFA03F0AB -+:105F400043FAB8B12078022818BFFFDF0120FFF71D -+:105F500005FF207800281EBF20780128FFDF70BDD4 -+:105F6000F148FEF7F2FF002804BF7F20A070FEF783 -+:105F7000D7FFDDE7BDE8704000F0EBB92DE9F05F39 -+:105F800007464FF00009FEF76AFCE64E824630787D -+:105F9000022818BFFFDFE24D7F2495F86700012833 -+:105FA00030D0E24809F004FD83464FF0FF08002F8F -+:105FB00000F0E480DD4809F00EFE002800F0DE80ED -+:105FC000FEF716FC002800F0D98095F86600D74F40 -+:105FD00068B108F003FC8046FF2808D00146F81C91 -+:105FE00008F0EBFB404608F004FC40EA0A0A584679 -+:105FF0004FF0000B062880F0C180DFE800F0BFBF43 -+:10600000BF0CBF69C848FEF7A0FF002808BFB470E6 -+:10601000FEF786FFC5E795F85700012818BF04284A -+:1060200070D0BAF1000F18D195F86800002818BF99 -+:10603000022867D13878F91CC0F3801008F078FB8B -+:10604000824608F0DAFC40B1504608F096FB20B1D9 -+:10605000102109F0FAF9002854D095F867000128BA -+:1060600004BF95F89200002805D0B148FEF7B7FEAE -+:106070000320307084E0012085F89200B8F1FF0F12 -+:106080000FD005F19402511E404608F07FFB002816 -+:1060900008BFFFDF95F8930040F0020085F89300F9 -+:1060A0000CE03878C0F3801085F89300D5F8EF0045 -+:1060B000C5F89400B5F8F300A5F89800B07805F19C -+:1060C0009A077F2808BFFFDFB0783870B470CCE73C -+:1060D0003878297CC0F38010884209D1062205F166 -+:1060E0001101F81C0BF0DCFC002808BF012000D0D7 -+:1060F0000020B8F1FF0F06D0C0B995F85D0040450B -+:106100001AD113E03AE0B8B13878F91CC0F3801026 -+:1061100008F00EFB044608F070FC38B1204608F089 -+:106120002CFB18B1102109F090F928B195F857000F -+:10613000012818BF04281DD095F85700F0B9BAF10E -+:10614000000F17D195F86800002818BF012815D155 -+:106150003878F91CC0F3801008F0EAFA044608F019 -+:106160004CFC38B1204608F008FB18B1102109F0AA -+:106170006CF918B195F865002C46D8B14FF00109BB -+:1061800095F8660018B1FEF7C0FEFEF714F9B9F1F4 -+:10619000000F1CBF0120FFF7E1FD307800281ABF77 -+:1061A00030780128BDE8F09F3078032818BFFFDF62 -+:1061B000BDE8F09F7068D4F8FB10C0F80E10B4F87A -+:1061C000FF10418294F801110175B97D4175B7F84E -+:1061D0001710C182B7F819104180B7F81B108180E1 -+:1061E000B7F81D10C180534908300BF02AFE97F80C -+:1061F000240000F01F017068017697F82410490907 -+:1062000080F864113A78417BC2F340121140417327 -+:1062100094F86A00002818BFFFDF84F86CB0D6F845 -+:1062200004A0BAF80000A4F86E00BAF80200A4F8BE -+:106230008400BAF80400A4F88600BAF80600A4F8AE -+:1062400088009AF8640184F88A0094F85F0048B1E5 -+:10625000607A04F10A01012804D1487900F0C000F5 -+:10626000402835D094F8600040B1607A04F10A010A -+:10627000012804BF487910F0C00F29D0C4F878B0C5 -+:10628000A4F87CB03878B8F1FF0FC0F380108AF81A -+:106290001900D4F8EF00CAF81A00B4F8F310AAF8FD -+:1062A0001E101CD0C4F87E00BAF81E00A4F88200AC -+:1062B00004F17202511E404608F068FA002808BF37 -+:1062C000FFDF94F8710040F0020084F8710015E0DF -+:1062D000D4F80A00A067E089A4F87C00D2E7164849 -+:1062E0000BF0A6FD9AF8190084F87100DAF81A008C -+:1062F000C4F87200BAF81E00A4F87600012084F8F1 -+:106300006A0070680088FAF7B3FCFAF713F986F8A8 -+:1063100000B0FEF7BBFDFEF7ADFDFEF7DFFC0DE0C4 -+:10632000BC0B0020CC000020CE000020A80C0020D8 -+:10633000800C0020C70C00203A0C0020FEF733FD33 -+:10634000FEF74AFD012003F09CF919E7012203F052 -+:1063500048BA70B5FEF79AFDFEF78CFDFEF7BEFC5D -+:10636000FEF721FD1F4C002694F8660028B1FEF7C9 -+:10637000CCFDFEF720F884F866601B4D2E70FEF70A -+:106380002BFD94F85700012804D0BDE87040002090 -+:1063900003F077B9022003F074F994F86A0000283A -+:1063A00018BFFFDF6878002808BF70BD207C84F824 -+:1063B0007100D4F81100C4F87200B4F81500A4F804 -+:1063C00076003C2084F86C0068680188A4F86E10A0 -+:1063D000012184F86A100088FAF74AFCFAF7AAF853 -+:1063E0006E7070BDBC0B0020CC0000202DE9F04188 -+:1063F000FF4F044600207978FE4D4FF00108064615 -+:1064000011B1012923D007E095F85310002918BFD6 -+:1064100087F8018000D0012079782B2211FB02F14E -+:10642000294491F82820104318D02A22A01C293191 -+:106430000BF062FB66700420207084F8028078788C -+:106440002B2110FB01F0284480F8286023E095F808 -+:106450002810002918BF7E70DDD1DDE795F87E0099 -+:10646000E0B1D5F87F00C4F80200D5F88300C4F885 -+:106470000600D5F88700C4F80A00D5F88B00C4F8E8 -+:106480000E0095F88F00A07466701220207084F8BA -+:10649000028085F87E600120BDE8F08195F8220039 -+:1064A00001281ED0287801281CBF0020BDE8F081FB -+:1064B0006670132020702022A91CA01C0BF01CFB6E -+:1064C000A6712E70A888A884D5F89C00417B85F819 -+:1064D000261085F822800088FAF7CAFBFAF73AF806 -+:1064E000D9E7667006202070686AC4F8020085F853 -+:1064F0002260D0E7BF480178002914BF80884FF69A -+:10650000FF7070472DE9F041BA4C064694F8280018 -+:10651000002818BFBDE8F081304609F049FA01466D -+:1065200001250020072937D2DFE801F00A040736E9 -+:106530003636090084F82A5009E0032000E00220E2 -+:1065400084F82A0004F13301304609F09BFA84F8FC -+:10655000320094F8AF0018B1FDF74DFF01281FD0AD -+:10656000304609F057FA84F82B0004F12C0130462C -+:1065700009F029FA9E4E04F1520730787F2808BFAF -+:10658000FFDF307838707F20307084F82850BDE805 -+:10659000F041032001F005BF84F83200BDE8F0812E -+:1065A000FDF76CFF04F12C02511E08F0EFF80028F3 -+:1065B00008BFFFDF94F82B1041F0020184F82B1084 -+:1065C000D8E710B5002001F0F6FD8A4CA8B1FEF71F -+:1065D000F2FB012200211046FEF7F1F904F1BC00A4 -+:1065E000FEF7FDFBD4F8B400FEF7FCFB94F8A00026 -+:1065F000032818BF02281FD022E0FEF747FCFEF751 -+:1066000039FCFEF76BFBFEF7CEFB94F8AF0030B120 -+:10661000FEF77BFCFDF7CFFE002084F8AF000120E1 -+:1066200084F8B800022084F8B200FEF7D5FBBDE87C -+:106630001040002001F0B5BE01210020FEF79DFCB6 -+:10664000FEF778FC94F8AF0018B1FDF7A0FEFEF756 -+:106650004FFC032084F8B20010BD66490028B1F851 -+:10666000BA202CD0FF2A0BD24FF6FF7000EA42006E -+:10667000A1F8BA00FF2888BFFF2001D9A1F8BA000D -+:106680005B484268012A12BF002A0D224260D243B1 -+:10669000C2EBC20303EB021291F8B930DB4303EB08 -+:1066A000830CCCEB83131A444260900CB1F8BA20EF -+:1066B000B0FBF2F302FB130081F8B9007047012A26 -+:1066C000DED95008A1F8BA0008BF0120D8D1D5E71B -+:1066D00070B5484C002584F8B250012684F8B260A9 -+:1066E00094F8B20002281BBF94F8B20001280020E1 -+:1066F000FFDF18BF70BD2B2101FB004181F828503E -+:10670000401CC0B20228F6D3257084F8225094F8B9 -+:10671000AF0028B1FEF7F9FBFDF74DFE84F8AF504E -+:1067200084F8AE5084F89B60324884F8A05084F816 -+:10673000B15040F2011120F8981F817070BD2DE911 -+:10674000F0412C4C05460C2794F8B20001281FBFDD -+:1067500094F8B20002280C20BDE8F081FEF734FB6B -+:10676000FDF7E4FFFDF7BBFF94F898000126002831 -+:1067700001BF94F89900002894F89A00002874D07A -+:1067800094F8A000032802D0022805D008E00521D3 -+:10679000194800F0DEFE03E00321174800F0D9FE9F -+:1067A00094F8AC00002804BF94F8AD00002847D04E -+:1067B000FCF75EF907463946D4F8A800FCF769FEF5 -+:1067C0000E4990FBF1F801FB180041423846FBF7F7 -+:1067D0005AFEC4F8A800D4F8A4004044C4F8A400A9 -+:1067E00007F0A3FFD4F8A410884229D8002007E0BE -+:1067F000D4000020D00C0020B40D002040420F0037 -+:10680000C4E9290794F8AD0000281CBF012008F056 -+:10681000AFF8012194F8AE0000281CBF94F8AC003A -+:1068200000280DD094F8910004F19202012804D1BF -+:10683000507900F0C00040280ED01046FEF72AFF25 -+:1068400094F8911004F19200FDF7CAFF94F8B20099 -+:106850000027012818D112E008F0B7F8324604F1F9 -+:106860009201FEF7E0FEEBE7FFE794F8B2000228A2 -+:1068700004BF84F8B2600C2006D1BDE8F08184F832 -+:10688000B860022084F8B20094F89B0080B108F050 -+:1068900018F8FE4808F051F884F8AF00FC48C4F836 -+:1068A000B450FEF77AFAFEF797FA3846BDE8F08161 -+:1068B00007F0AFFFEDE770B5FEF786FAF54C94F8F8 -+:1068C000B200022803D0FEF787FA0C2070BD012029 -+:1068D00084F8B900A4F8BA000220FEF772FAEE4874 -+:1068E000FDF7C5FFED4B002004F1980294F8B110BC -+:1068F000491CA3FB015C4FEA5C0CACEB8C0C6144C3 -+:10690000C9B284F8B110895C012907D0401CC0B21B -+:106910000328EBD3FFF755FE002070BD94F8B100BB -+:10692000DF49085CFDF7ABFFFDF7D9FEF2E710B5D4 -+:10693000D84C94F89030022B14BF032B00280BD1B5 -+:1069400000291ABF022901200020114607F0F0FE9D -+:1069500008281CBF012010BD94F89000002816BF25 -+:10696000022800200120BDE81040FEF71DBEC948E6 -+:1069700090F89000002816BF022800200120FEF7A2 -+:1069800013BEC44981F890007047C24981F8AE0037 -+:10699000704770B5BF4C94F89000002816BF0228CD -+:1069A0000020012084F8910004F19201FEF7E6FD39 -+:1069B00094F89000022816BF03280121002184F8D2 -+:1069C000AD1094F89100002504F19202012804BF53 -+:1069D000527912F0C00F0AD004F19202012804D1BA -+:1069E000507900F0C000402801D0002000E00120D4 -+:1069F00084F8AC00002804BF002970BDC4F8A4507E -+:106A0000FCF736F8C4F8A80094F8AD0000281CBFC5 -+:106A1000002007F0ADFF002694F8AE0000281ABF52 -+:106A200094F8AC00002870BD94F8910004F1920134 -+:106A3000012804D1487900F0C000402806D029463A -+:106A400004F19200BDE87040FEF724BE07F0BDFFE0 -+:106A5000324604F19201BDE87040FEF7E4BD002823 -+:106A600016BF0228012200228A4981F89B2081F862 -+:106A7000A100704770B5874D0C4600280CBF01215E -+:106A8000002185F89B1085F8A2004FF0080085F8DA -+:106A9000A3000BD1002C1ABF022C012000201146AC -+:106AA00007F046FE85F8A300082801D0002070BD3D -+:106AB000022C14BF032C1220F8D170BD754A032894 -+:106AC00008BFC2F89C1082F8A000002070477149EE -+:106AD00091F8A000032804D0012818BF022807D08D -+:106AE00004E091F8A200012808BF70470020704719 -+:106AF00091F8A100012814BF03280120F6D17047A6 -+:106B000010B5FEF7C3F9FEF7B5F9FEF7E7F8FEF7A3 -+:106B10004AF9604C94F8AF0030B1FEF7F6F9FDF792 -+:106B20004AFC002084F8AF00012084F8B80002205D -+:106B300084F8B200FEF750F9002010BD554981F8E5 -+:106B4000B300704710B5FEF7A1F9FEF793F9FEF711 -+:106B5000C5F8FEF728F94F4C94F8AF0030B1FEF7B6 -+:106B6000D4F9FDF728FC002084F8AF00012084F858 -+:106B7000B800022084F8B200FEF72EF9BDE81040FC -+:106B8000002001F00EBC2DE9F84F424CFF217F2779 -+:106B9000444E84F8B0104FF00008002800F0DC826A -+:106BA00004F1BC0008F0E7FF30B904F1BC0009F0C3 -+:106BB00002F8002800F0D08294F8B200334D052886 -+:106BC00080F0C782DFE800F0F1F1F103F0002F4818 -+:106BD00008F0EEFEB07094F89B0030B9FDF73FFE70 -+:106BE000002808BF4FF0000801D04FF0010894F8CA -+:106BF000AF0078B107F0F2FD84F8B0000146FF283D -+:106C00000CD0E81C07F0D9FD94F8B00007F0F1FDB6 -+:106C100040EA080894F8B000FF2812D107F081FE7E -+:106C200084F8B00094F89B1059B1082809D128784D -+:106C3000E91CC0F3801007F07BFD082818BF4FF057 -+:106C40000008B078072880F0C781DFE800F04BB873 -+:106C500004FCFCFC300094F8AF0018B1FEF755F9C5 -+:106C6000FDF7A9FB0F48FEF770F9002808BF377041 -+:106C7000FEF756F9B8F1000F00F0598194F8A00022 -+:106C8000012818BF022840F052810DE08C0D002031 -+:106C900038230200D00C00203E230200ABAAAAAA8F -+:106CA0003B230200D4000020FEF718F868E094F8B7 -+:106CB000AF0018B1FEF729F9FDF77DFBFE48FEF79E -+:106CC00044F9002808BF3770FEF72AF9B8F1000F21 -+:106CD00000F02D8194F8A00002284AD001284FD05E -+:106CE00000F025B994F8AF0018B1FEF70EF9FDF7E2 -+:106CF00062FBF148FEF729F9002808BF3770FEF75C -+:106D00000FF9B8F1000F00F0128194F8A0000228EA -+:106D10002FD0012834D003281CBFFFDFBDE8F88F37 -+:106D2000E978D4F89C00827E91421BD12979C27EF9 -+:106D3000914217D16979027F914213D1A979427F9B -+:106D400091420FD1E979827F91420BD1297AC27F9A -+:106D5000914207D12978427EC1F38011914208BF48 -+:106D6000012100D0002194F8A220012A0ED0E9B11F -+:106D7000D9E0D248FFF7C6FBBDE8F84F00F002BBF0 -+:106D8000CE48FFF7BFFBBDE8F84F1AE4002974D1E5 -+:106D900000F11A01C94808F016FEC84808F03AFE8A -+:106DA000D4F89C104876BEE024E1D2E194F8A30028 -+:106DB00008287DD094F8B01081425ED0B7E094F8F6 -+:106DC000AF0018B1FEF7A1F8FDF7F5FABA48FEF7E3 -+:106DD000BCF8002808BF3770FEF7A2F894F8AD00A1 -+:106DE00000280CBF4FF0010B4FF0000B4FF00009D3 -+:106DF0002878C10905F1090007D0407900F0C000EA -+:106E0000402808BF4FF0010A01D04FF0000A94F863 -+:106E1000A000032806D194F89B00002818BF94F81E -+:106E2000A30001D194F8B00007F09EFC009088B157 -+:106E3000102108F00AFB002818BF4FF0010BBAF12F -+:106E4000000F07D000E0C7E005F109010098FEF748 -+:106E5000B9FB814694F8A00003280FD0FDF73EFF50 -+:106E6000B8F1000F69D0FDF7C3FC50EA090064D007 -+:106E70009248FFF747FB00F041B954E0D4F89C007A -+:106E8000E978827E91421DD12979C27E914219D141 -+:106E90006979027F914215D1A979427F914211D13E -+:106EA000E979827F91420DD1297AC27F914200E037 -+:106EB0003DE007D12978407EC1F38011814208BFAF -+:106EC000012500D0002594F8B000082805D094F8DA -+:106ED000A310884208BF012600D00026B9F1000F98 -+:106EE00005D1BBF1000F04D0FDF782FC08B10121F0 -+:106EF00000E00021B8F1000F09D094F8A2000128A9 -+:106F000003D020B955EA060001D0012000E000209E -+:106F100001420CD094F8A200012804BF002DD4F83F -+:106F20009C003FF435AFBDE8F84F00F08ABAFDF79A -+:106F3000D5FEBDE8F84FFFF744BB94F8A100032845 -+:106F400018BF02287ED1BAF1000F7BD0B9F1000F33 -+:106F500078D1DFF8688194F87E00002872D101258D -+:106F600084F8805094F8AF0018B1FDF744FA012876 -+:106F700021D0404608F04EFD84F8810004F18201E2 -+:106F8000404608F020FD404608F051FD84F8880096 -+:106F900004F18901404608F024FD307804F18F089F -+:106FA0007F2808BFFFDF307888F80000377084F84A -+:106FB0007E500320A0E0FDF761FA04F18202511E29 -+:106FC00007F0E4FB002808BFFFDF94F8810040F0E1 -+:106FD000020084F88100D6E794F8AF0018B1FDF7FD -+:106FE00094FFFDF7E8F93448FDF7AFFF00286CD1B6 -+:106FF0003770CAE0314808F0DBFCB0703048E978FF -+:10700000427A91421CD12979827A914218D16979C8 -+:10701000C27A914214D1A979027B914210D1E979C7 -+:10702000427B91420CD1297A827B914208D1297806 -+:107030000078C1F38011B1EBD01F08BF012500D04B -+:10704000002500E042E0FDF749FEB07804286BD14E -+:10705000D5B31948FDF779FF002808BF3770FDF751 -+:107060005FFF94F8B80000281CBF0020FFF7F5FA76 -+:107070004FF0010884F8B880104D94F8530028BBF5 -+:10708000042084F8550094F8AF00A5F1910918B1D7 -+:10709000FDF7B1F9012835D0284608F0BBFC0949B5 -+:1070A00081F8560009F12C01284608F08CFC00BF3D -+:1070B00004F15E0128460AE0D40000208C0D002077 -+:1070C000B40D0020D00C00202EE05EE016E008F0A9 -+:1070D00005FD84F85D001F2884BF1F2084F85D0033 -+:1070E00004F17D0530787F2808BFFFDF30782870F5 -+:1070F000377084F85380042001F053F9BDE8F84F4D -+:10710000FFF75FBAFDF7BAF909F12C02511E07F03B -+:107110003DFB002808BFFFDFFE4890F8560040F016 -+:10712000020089F82B00C3E7FB48FDF70EFF00289B -+:1071300008BF3770FDF7F4FE94F8B800002804BFCC -+:107140000120FFF78AFA84F8B880BDE8F84FFFF70E -+:1071500038BAFFDFBDE8F88F94F8B200052828BFE1 -+:10716000BDE8F88FDFE800F0030303041900F1E73E -+:1071700094F8AF0018B1FDF7C8FEFDF71CF9E6481A -+:10718000FDF7E3FE00283FF433AFFDF7C9FEFDF73E -+:10719000A5FDBDE8F84FFFF714BADF48FDF7D5FEAF -+:1071A000002808BF3770FDF7BBFE94F8B800002830 -+:1071B00004BF0120FFF751FA84F8B880FDF78EFD77 -+:1071C000BDE8F84FFFF7FDB970B5D24C94F8B200A6 -+:1071D000072878D2DFE800F08D8D8D8D8D041000AA -+:1071E000CE48FDF7FCFDFDF7A5FE9620FDF71FFE3E -+:1071F000042084F8B20070BDFDF748FEFDF73AFEAA -+:10720000FDF76CFDFDF7CFFD012584F8B850022095 -+:1072100084F8B200FDF7E0FD2078002818BFFFDFFA -+:107220000026A670D4F89C000188A1804188618363 -+:107230008188A183C088E08384F8206094F8AD1031 -+:10724000B74849B10178C21CC1F3801121B151790D -+:1072500001F0C00140292ED094F8AE1041B110F8D1 -+:10726000031BC1F3801119B1407910F0C00F22D077 -+:10727000AC480AF0DDFD00BF94F8AF0018B1FDF78F -+:10728000BAF8012820D0D4F89C00417EE171D0F8F2 -+:107290001A10A160C08BA081666126832570D4F886 -+:1072A0009C000088F9F7E4FCF9F744F9BDE8704068 -+:1072B000022001F076B8D4F8E700C4F80E00B4F864 -+:1072C000EB006082D8E714E0FDF7D8F804F108027B -+:1072D000E11D07F05BFA002808BFFFDFE07940F00E -+:1072E0000200E071D4F8BF006061B4F8C3002083ED -+:1072F000D4E7FFDF70BD70B5864C94F8B20000256E -+:10730000052828BF70BDDFE800F03939391B0300BC -+:107310008148FDF71AFE10B97F497F200870FDF7FC -+:10732000FFFD94F8B800002804BF0120FFF795F98D -+:1073300084F8B850FDF7D2FCBDE87040FFF741B9C2 -+:10734000FDF7A4FDFDF796FDFDF7C8FCFDF72BFD4D -+:1073500094F8AF0028B1FDF7D8FDFDF72CF884F8BC -+:10736000AF50012084F8B800022084F8B200FDF785 -+:1073700033FDBDE87040002001F013B870BD01225C -+:1073800001F0E1B870B5012000F015FF614CC8B103 -+:1073900004F1E401A1F1280008F04CFB04F1E4063B -+:1073A00094F89110304608F02CFB04F1920130461D -+:1073B00008F002FB94F8AD00C0B394F8A0000328D5 -+:1073C0001FD025E0FDF762FDFDF754FDFDF786FCBB -+:1073D000FDF7E9FC94F8AF0030B1FDF796FDFCF73E -+:1073E000EAFF002084F8AF00012084F8B8000220F2 -+:1073F00084F8B200FDF7F0FCBDE87040002000F01A -+:10740000D0BF94F89B00002818BF94F8A30001D1C6 -+:1074100094F8B00007F0DBFA050007D001213046F0 -+:1074200008F0EFFA2946304608F0C6FA3C48FDF766 -+:10743000D6FC01210846FDF7A0FD052084F8B20026 -+:1074400070BD70B5022000F0B6FE324C68B301206A -+:1074500000F0A7FF04F1E401A1F1280008F0EAFA26 -+:10746000D4F89C00417B04F1E40008F0C1FAD4F8A0 -+:107470009C0004F1BC0204F1E4061278417BC2F3E3 -+:1074800040121140417394F89110304608F0B9FA57 -+:1074900004F19201304608F08FFA94F8AD00B8B3C9 -+:1074A00094F8A00003281FD025E0FDF7EFFCFDF7BE -+:1074B000E1FCFDF713FCFDF776FC94F8AF0030B16A -+:1074C000FDF723FDFCF777FF002084F8AF000120D3 -+:1074D00084F8B800022084F8B200FDF77DFCBDE816 -+:1074E0007040002000F05DBF94F89B00002818BF9A -+:1074F00094F8A30001D194F8B00007F068FA0500F1 -+:1075000014D00121304608F07CFA294630460BE0C1 -+:107510000CE00000D00C0020D40000208C0D0020D6 -+:10752000B40D0020DE0C002008F046FAD4F89C00D0 -+:10753000C18A324808F0FEFAD4F89C00417D2F48F9 -+:1075400008F0FCFA2D48FDF74AFC062084F8B2004A -+:1075500070BD70B50C46054608F008FA032C47D0FC -+:10756000052C18BF70BD0521284608F002FA244CEE -+:10757000D4F89C0000F10E01284608F0C5FAD4F8B2 -+:107580009C0000F11201284608F0C2FAD4F89C00D1 -+:10759000417D284608F0D2FAD4F89C00C18A2846DA -+:1075A00008F0C8FAD4F89C004188284608F0B6FADA -+:1075B000D4F89C008188284608F0B4FAD4F89C00DE -+:1075C000C188284608F0B2FAD4F89C0000F10801FE -+:1075D000284608F0CDFAD4F89C00017E284608F031 -+:1075E000AFFA94F8B3102846BDE8704008F0B2BA7C -+:1075F0002846BDE87040032108F0BBB9B40D002057 -+:10760000D00C00202DE9FF4F06460C46488881B07B -+:1076100040F2E24148430090E08A002500FB01FB74 -+:1076200094F8630091460D2818BF0C281ED0252819 -+:107630001EBF94F8640025284FF0000A16D0049865 -+:1076400018B10121204603F029FB94F8510094F869 -+:10765000528094F8C810074659B1012958D0022920 -+:107660003DD0032918BFFFDF52D0A6E04FF0010A3A -+:10767000E5E7B9F1000F08BFFFDFFE4D686800289D -+:1076800008BFFFDF94F85100FDF7C7FE00F2E731B5 -+:107690004FF47A70B1FBF0F0696800EB010994F8DF -+:1076A0005100FDF7BAFE94F85110022907BFF249C4 -+:1076B0004FF47A72F1494FF4C8621144084400F261 -+:1076C000E7314FF47A70B1FBF0F040F2E241081A72 -+:1076D0002969584449440844051D012015E0E5483E -+:1076E000A9F101014068084308BFFFDFE448B9F190 -+:1076F000000F006800EB0B0506D0DE48406800F282 -+:107700002230A84288BFFFDF032084F8C80053E07E -+:1077100094F86310009D25291CBF94F86410252956 -+:1077200036D1B4F85810B4F8EA20891A491C09B2C5 -+:1077300000292DDB94F8E81009B30F4694F8E910FE -+:10774000002918BF8846022807BFCB484FF47A713A -+:10775000CA484FF4C8610144022F07BFC6484FF41E -+:107760007A72C6484FF4C8621044814208D9081A98 -+:1077700000F5FA714FF47A70B1FBF0F0054407E0C0 -+:10778000401A00F5FA714FF47A70B1FBF0F02D1A3F -+:10779000B9F1000F10D0DFF8DC92D9F8040020B95D -+:1077A000B9F80200002818BFFFDFD9F8040000F282 -+:1077B0002230A84288BFFFDF05B9FFDF2946D4F891 -+:1077C000CC00FAF760FEC4F8CC00B0600020307046 -+:1077D0004FF0010986F80490204603F04CFBAAF113 -+:1077E0000101084208BF86F8059006D094F8C80049 -+:1077F00001280CBF0220032070714046D4F824B049 -+:10780000FDF7FCFD0146022F07BF9B484FF47A723B -+:107810009A484FF4C8621044084400F23F614FF4A4 -+:107820007A70B1FBF0F0584400F5C970F06004982C -+:1078300030EA0A0004BF05B0BDE8F08F29463046A3 -+:1078400007F010FF87B2204603F015FBB8420FD8AF -+:10785000074686F8059005FB07F1D4F8CC00FAF747 -+:1078600012FEB0602946304607F0FCFE384487B26D -+:107870003946204603F012FAB068C4F8CC0005B0CF -+:10788000BDE8F08F2DE9F04304467E4885B00D46F3 -+:1078900090F80004DFF8F091400999F800144909C4 -+:1078A000884218BFFFDFDFF8CC81002708F13C06D3 -+:1078B000082D80F0FA80DFE805F0045B656560F86C -+:1078C000F894202C28BFFFDF36F814000621F9F7C2 -+:1078D000C5F8050008BFFFDF202C28BFFFDF36F802 -+:1078E00014002988884218BFFFDF95F8C8000028D7 -+:1078F00008BFFFDF284602F0BCFEC8F80470A8F8F5 -+:10790000027029460020C8F8107007F0EFFE00F161 -+:107910009804686AA04218D995F85200FDF76EFDE8 -+:1079200095F85110022907BF53494FF47A72534911 -+:107930004FF4C862114408444FF47A7100F23F607A -+:10794000B0FBF1F1686A0844071B29460020C8F81B -+:10795000087007F0CBFE698840F2E242514398304C -+:10796000081AA0F22230C8F80C0005B0BDE8F08378 -+:1079700005B0BDE8F04303F05DB805B0BDE8F043E5 -+:10798000FDF792BB99F8140D4049400991F8001495 -+:107990004909884218BFFFDF202C28BFFFDF36F8D7 -+:1079A00014000621F9F75AF8050008BFFFDF202C64 -+:1079B00028BFFFDF36F814002988884218BFFFDF90 -+:1079C0000022012329466846FFF71CFE95F8D200E5 -+:1079D0006946FBF797FA002808BFFFDF05B0BDE84E -+:1079E000F083202C28BFFFDF36F814000621F9F7BA -+:1079F00035F8050008BFFFDF202C28BFFFDF36F871 -+:107A000014002988884218BFFFDF95F8C8000428B1 -+:107A100018BFFFDF85F8C87095F8D2404FF6FF79A0 -+:107A2000202C28BFFFDF26F8149095F8D200FBF732 -+:107A300000F8002808BFFFDF202085F8D200D5F825 -+:107A4000D800002804BFD5F8D400C8F8140008D026 -+:107A5000D5E937121144826911448161D5E93501B4 -+:107A6000C860D5F8D40000281CBFD5F8D810016133 -+:107A700014D10EE0DC0D002068360200A2240200C2 -+:107A8000E000002001E000E00BE000E019E000E091 -+:107A90000BE0D5F8D800002818BF8761FC480078B3 -+:107AA00005B0BDE8F043F4F725B9FFDF05B0BDE848 -+:107AB000F0832DE9F047F74D0746E88B6C68401CD2 -+:107AC000E88328784FF00008002808BFFFDF07D0C0 -+:107AD000DFF8C4A3042814D0052818BFFFDF40D066 -+:107AE00021462869FAF7CFFCB86087F800800120AA -+:107AF0003871A86800F5B370F860287804287CD144 -+:107B000085E00029ECD02E69DAF8141039B38946E3 -+:107B1000C9680029FBD1B9F1000F20D099F8000005 -+:107B2000002808BFFFDFD9F81410D9F80400014479 -+:107B30003046FBF7AEFC002807DA211A4A1E92FBFA -+:107B4000F4F202FB0406214604E090FBF4F202FB8F -+:107B5000140621468E4288BFFFDF3446C0E7444604 -+:107B6000BEE70029BCD0D5F81890B9F1000F08BFC6 -+:107B7000FFDF0026D9F8DC10DAF814403046721E18 -+:107B80005CB1A069884228BF824284BF0246264673 -+:107B90002046E468002CF4D106B9064609F1C80471 -+:107BA000C9F8D860002E04BFC4F80C80CAF814408D -+:107BB00005D0F068F460E060002818BF0461D4F8D4 -+:107BC0001090C4F81880B9F1000F0ED0D9F8180041 -+:107BD00048B1D4F814A0504538BFFFDFD9F81800D9 -+:107BE000A0EB0A00A061C9F81880002E08BFC5F8F4 -+:107BF000208009D03078002800E00DE008BFFFDFCA -+:107C0000716970680844286240F6B83468E7E88B08 -+:107C10000A2838BF032000D302207871E88B01289E -+:107C200006D93846696807F01DFDE98B0844E883EA -+:107C3000B8682861BDE8F0872DE9F0418046974893 -+:107C400084B00E4690F80004954F410997F800045F -+:107C50004009814218BFFFDF01210025082E8D4C0D -+:107C600062D2DFE806F0041A35353061614D617388 -+:107C70002173607800281CBF04B0BDE8F0818648FD -+:107C8000456005612573A068C138FEF758FD0028DE -+:107C900018BFFFDF04B0BDE8F081607850B1207BF1 -+:107CA000002808BFFEF72CFF657304B0BDE8F04163 -+:107CB000FAF7E9BDA173FEF7FEFD002818BFFFDF4C -+:107CC00004B0BDE8F08104B0BDE8F041FDF7ECB9C7 -+:107CD00097F8140D7349400991F800144909884236 -+:107CE00018BFFFDF00216846FFF7E3FE6946404604 -+:107CF000FBF708F9002808BFFFDF04B0BDE8F081FA -+:107D00002078052818BFFFDF207F002808BFFFDF8D -+:107D100025772570207DFAF78CFE002808BFFFDF4D -+:107D2000257504B0BDE8F081FFDF04B0BDE8F08147 -+:107D30002DE9F041574C0026207804281FBF2078F9 -+:107D400005280C20BDE8F08101206070607B0025D3 -+:107D5000A8B1EFF3108010F0010F72B60CBF00272E -+:107D60000127607B00281CBFA07B002805D0FEF700 -+:107D7000C7FE6573A573FAF786FD2FB903E0207D72 -+:107D8000FBF7D3F900E062B6207DFBF71CFC207FF7 -+:107D900028B125772078052818BFFFDF0C266570ED -+:107DA0002570207DFAF745FE002808BFFFDF257506 -+:107DB0003046BDE8F0812DE9F04F364883B00078B9 -+:107DC000002818BFFFF7B4FF0120DFF8CC8088F847 -+:107DD000000069460620F8F7CCFD002818BFFFDF39 -+:107DE00000274FF6FF7934E0029800281CBF90F876 -+:107DF000C81000292DD0008848451CBFDFF8A8A076 -+:107E00004FF0200B3BD00621F8F728FE040008BFF6 -+:107E1000FFDF94F8D200FBF7D6FB84F8C87094F823 -+:107E2000D2504FF6FF76202D28BFFFDF2AF81560CD -+:107E300094F8D200FAF7FDFD002808BFFFDF84F8B0 -+:107E4000D2B069460620F8F794FD002818BFFFDF7E -+:107E500010E06846F8F76BFD0028C5D00FE00298E7 -+:107E600000281CBF90F8C810002903D0008848459E -+:107E7000C9D104E06846F8F75AFD0028EFD088F829 -+:107E80000070C8F8147003B00020BDE8F08F000047 -+:107E9000DC000020F40D0020DC0D002001E000E0FB -+:107EA0000BE000E019E000E0180E002010B50078AB -+:107EB000F84C60B101280CBF40F6C410FFDF06D0BB -+:107EC000A06841F66A01884228BFFFDF10BDA060AC -+:107ED000F6E710B5EF4C00232070EF4803704370B5 -+:107EE000037703734373837320218361017518380B -+:107EF00043703A3010214FF6FF72428020F8042F71 -+:107F0000491EFAD1180008BFA36005D0002B0EBF90 -+:107F1000FFDF40F6C410A060A06841F66A01884205 -+:107F200028BFFFDFBDE8104045E72DE9F043DA4CFC -+:107F3000054685B0207816460F4600281EBF0C2047 -+:107F400005B0BDE8F08395F8519095F85200D5F84A -+:107F50002480FDF753FAB9F1020F07BFCF494FF460 -+:107F60007A72CF494FF4C862114408444FF47A79C9 -+:107F700000F23F60B0FBF9F0404400F22230C5F857 -+:107F8000DC00A56195F8C800002818BFFFDF40F2AB -+:107F90007120784360600120FDF730FA00F2E7308D -+:107FA000B0FBF9F040F2712106FB0100A0606168AE -+:107FB000A1F2F621884298BF01460020A160B9498C -+:107FC00008610521217060702077E083B648FAF7D8 -+:107FD000D5FC2075202808BFFFDFFAF749FD206196 -+:107FE00001216846FFF765FD207D6946FAF78AFFA3 -+:107FF000002808BFFFDF002005B0BDE8F083A648D9 -+:10800000007800281CBF0020704710B50620F8F744 -+:10801000C1FC80F0010010BD30B59F4C85B02278C6 -+:10802000002A1EBF0C2005B030BD0D4640F2712164 -+:10803000484360600120FDF7E1F94FF47A7100F2E6 -+:10804000E730B0FBF1F040F2712105FB0100A060C8 -+:108050006168A1F2F621884298BF01460020A16024 -+:10806000607004212170E0838F48FAF787FC207547 -+:10807000202808BFFFDF8B48406938B10146C0683F -+:108080000028FBD111B1FAF7F3FC05E0FAF7F0FC98 -+:1080900040F6B831FAF7F7F9206101216846FFF799 -+:1080A00008FD207D6946FAF72DFF002808BFFFDF95 -+:1080B000002005B030BD70B5774CA1690160FFF7B5 -+:1080C00037FE002300BBA169D1F8D8205AB1D1E90D -+:1080D00037C5AC449569AC44C2F818C0D1E9352C19 -+:1080E000CCF80C2005E0DFF8BCC1D1F8D420CCF8E6 -+:1080F0001420D1F8D420D1F8D810002A18BF11616B -+:1081000002D1002918BF8B61A36170BD6549487019 -+:10811000704770B540F2E24300FB03F510460C4691 -+:10812000FDF76CF9022C07BF5C494FF47A725C4989 -+:108130004FF4C862114408444FF47A7100F23F6072 -+:10814000B0FBF1F000F2223085428CBF281A0020EB -+:1081500070BD70B50D4606460146002007F0C6FA10 -+:10816000044696F85200FDF749F996F85110022995 -+:1081700007BF4A494FF47A7249494FF4C862114423 -+:1081800008444FF47A7100F23F60B0FBF1F071885F -+:1081900040F271225143C0EB4100A0F22230A542CF -+:1081A00034BF21462946814203D2A5422CBF28462E -+:1081B0002046706270BD3B4910B54968002801F146 -+:1081C000980408BF04F5BC7409D0012808BF04F561 -+:1081D000317404D0022814BFFFDF04F5B0742E48B8 -+:1081E0008068A0428CBF0120002010BD10B52D4C2E -+:1081F000607828B1D4E90201626807F05BFAA060F8 -+:10820000D4E9010188429CBF2078002814BF0020D7 -+:10821000012010BD04222DE9F043204FDFF88080BB -+:1082200085B04FF47A79052980F0B980DFE801F054 -+:108230000A2B033E890080F8C82005B0BDE8F04352 -+:10824000FAF721BB044617480078002818BF84F8C5 -+:10825000C82004D005B0BDE8F043FAF714BB0122F2 -+:10826000002321466846FFF7CDF994F8D20069460D -+:10827000FAF748FE002808BFFFDFB4F85800401C9A -+:10828000A4F85800E6E7032180F8C81005B0BDE85F -+:10829000F0830000DC000020F40D002068360200AE -+:1082A000A2240200DC0D0020397C01000446408835 -+:1082B00040F2E2414843B3490860D4F8F000214657 -+:1082C0000089E082D4F8F00080796075D4F8F0007D -+:1082D00040896080D4F8F0008089A080D4F8F00054 -+:1082E000C089E0800020A66A07F000FA054694F8ED -+:1082F0005200FDF783F894F8511002290EBF4FF495 -+:108300007A7147464FF4C8613944084400F23F602F -+:10831000B0FBF9F1608840F271225043C1EB40009C -+:10832000A0F22230AE4234BF29463146814203D208 -+:10833000AE422CBF304628466062022084F8C80056 -+:10834000A4E706460146856A002007F0CFF90446F7 -+:1083500096F85200FDF752F896F8511002290EBF18 -+:108360004FF47A7147464FF4C8613944084400F22B -+:108370003F60B0FBF9F0718840F271225143C0EBCD -+:108380004100A0F22230A54234BF21462946814255 -+:1083900003D2A5422CBF28462046706276E7FFDF55 -+:1083A00074E72DE9F041DFF8E0810025774C98F87B -+:1083B000001084B0052880F0C180DFE800F00316CB -+:1083C0006DB9B900E5830846F3F794FC607800289E -+:1083D00073D100216846FFF76CFB207D6946FAF7F0 -+:1083E00091FD002808BFFFDF67E00120FDF706F8D8 -+:1083F0006749684E08444FF47A71B0FBF1F0216987 -+:10840000726840F2E2431144081AA16900F2DE608A -+:108410004A88C83102FB03F772698A4208BF002507 -+:1084200014D0216AFBF735F8002807DA391A4A1EFA -+:1084300092FBF7F202FB0705394604E090FBF7F2E6 -+:1084400002FB170539468D4288BFFFDFD8F80800C8 -+:10845000854208D2A06940F271224188C1824A4314 -+:1084600005EB420505E040F2E240B5FBF0F0A16902 -+:10847000C882A06905214175C08A6FF41C71484308 -+:1084800005EB400040F635413061B0EB410F28BFAD -+:10849000FFDF04B0BDE8F081E5830846F3F72AFC6E -+:1084A00001202077A0692169C0F8CC1080F8C8505D -+:1084B0002178052918BFFFDF06D0FAF7E4F96573C4 -+:1084C000A57304B0BDE8F081002808BFFFDFA069F4 -+:1084D00090F8C800002818BFFFDFA06990F8D2000C -+:1084E000202818BFFFDF2C48FAF748FAA169064692 -+:1084F000202881F8D2000F8828BFFFDF274820F806 -+:108500001670A06990F8D200202808BFFFDF002372 -+:1085100001226846A169FFF775F8A069694690F8DD -+:10852000D200FAF7EFFC002808BFFFDFA561C4E71F -+:1085300004B00846BDE8F041F3F7DCBBFFDF04B050 -+:10854000BDE8F081704770B5124D0446002912BF96 -+:108550000129686070BD02291CBFFFDF70BD6888FB -+:10856000401C68801046FCF758FF4FF47A7100F207 -+:10857000E730B0FBF1F0201A686070BD0348007866 -+:1085800070470000E0000020DC000020F40D002017 -+:10859000C92E0200DC0D002085780100180E002095 -+:1085A000FE48406870472DE9F0410D4606460146F9 -+:1085B0001746012007F09AF8044696F85200FCF797 -+:1085C0001DFF96F8521002290CBFF549F5490844E1 -+:1085D0004FF47A7100F2E140B0FBF1F0718840F2A3 -+:1085E00071225143C0EB4100C01BA0F55970A54258 -+:1085F00034BF21462946814203D2A5422CBF2846DA -+:1086000020467062BDE8F0812DE9FF4F8FB004462F -+:1086100090F85200DDF8709098460B9049EA0800F7 -+:108620000C9094F86400002617460D280CBF01201A -+:1086300000200890B8F1000F04BF94F8040103284B -+:1086400071D1089800286ED0B4F87C01B8426AD184 -+:10865000D4F80C01C4F8F800608840F2E2414843C5 -+:10866000C4F8FC00B4F85201B4F8DE100844C4F8B1 -+:108670000001204604F00DFDB4F88001E08294F87A -+:108680007E016075B4F882016080B4F88401A08036 -+:10869000B4F88601C549E080C348097894F864318C -+:1086A000628830F8111030F81300D4F828A008447C -+:1086B0000004000C4FF0000105D000FB02F1BC48A3 -+:1086C000B1FBF0F0411C1FFA81FB2146012007F0AD -+:1086D0000DF8054694F85200FCF790FE94F85210FD -+:1086E00002290CBFAE49AF49084400F2E1414FF402 -+:1086F0007A70B1FBF0F1608840F271225043C1EB17 -+:108700004000A0EB0B00A0F55970AA4534BF2946E4 -+:108710005146814203D2AA452CBF5046284660628A -+:10872000022084F80401D4E956ABB4F8DE000390CB -+:10873000B4F85001D4F84C110691B8F1000F03D0F1 -+:1087400094F8181149B17FE004F1D8010091743117 -+:10875000099104F59C75091D07E004F596710091D7 -+:10876000091D099104F58E75091D0A91B4F8581078 -+:10877000381A791A09B200B20491002805DAD4F83F -+:108780004801069001200C90084694F80411002935 -+:108790005ED0012900F0668102297DD0032918BF2F -+:1087A000FFDF00F0A98131460698F9F76CFE0999C0 -+:1087B00008600A9801210780002028702971099813 -+:1087C0000068A8607948D0E90520824287BF009AF6 -+:1087D0001060009802600098626A0068104400F21D -+:1087E0008310E8606971B4F8C800C01B00B20028AB -+:1087F000C4BF032068710898002800F0F181B9F126 -+:10880000000F18D0B4F8F020002A0CBF0020B4F8F4 -+:10881000F200A4F8F20094F8F430401C584390425F -+:1088200009D26879401E002805DD6971B4F8F200AC -+:10883000401CA4F8F200B8F1000F00F0F58194F8A4 -+:108840001801002800F0EC8113B00220BDE8F08F81 -+:10885000BAF1000F08BFFFDFE08A40F27121484300 -+:10886000490001EB400210980021002806D000FBCF -+:1088700002F14F48B1FBF0F000F10101C4F808111A -+:10888000608840F2E24100FB01F210994FF00000D5 -+:1088900008D001FB02F100E042E04548B1FBF0F0F6 -+:1088A00000F10100C4F80C010AF101064FF00100CB -+:1088B000FCF7A4FD3F494FF47A7B0844B0FBFBF082 -+:1088C000E18A40F271225143C0EB4101D4F8080122 -+:1088D0000190091A314401F2C246607D510010FB3B -+:1088E00001F00C900120FCF789FD33490844B0FBEE -+:1088F000FBF1019801EB40010C9801EB000B01200A -+:10890000FCF770FD584400F1620128484161816123 -+:10891000A6EB0A00401EB0F53D7F38BFFFDF42E7FF -+:10892000E28A40F271215143D4F8FC00109A00EB26 -+:1089300041010020002A06D01D4802FB01F2B2FBD3 -+:10894000F0F000F10100C4F80801628840F2E2434F -+:1089500002FB03FC109B4FF0000206D0144A03FBFD -+:108960000CF3B3FBF2F202F10102C4F80C21039AFA -+:108970009AB9B9F1000F38D094F85200FCF73EFDD7 -+:10898000014694F8520002280CBF054A054A1144DA -+:1089900001F2E1424FF47A7110E026E0580E002017 -+:1089A00004360200A224020042230200E800002054 -+:1089B00040420F007D2A020083290200B2FBF1F140 -+:1089C000D4F80821E38A114440F2712CD4F8FC2039 -+:1089D00003FB0CF302EB4302561AFCF703FDABEB6F -+:1089E00000003044A0F1200600E00E1AD4F8002167 -+:1089F000D4F8F810D4F8080101FB020B607D40F2B6 -+:108A0000E24110FB01F00C9094F852A05046FCF7A4 -+:108A1000F5FC0146BAF1020F0CBFF948F9480844C9 -+:108A200000F2E1414FF47A70B1FBF0F000EB4B0142 -+:108A30000C9801EB000B5046FCF7D4FC584400F1B5 -+:108A40006001F14840F2712341616288D4F80C1151 -+:108A50005A43C1EB4201A1F213318161012084F834 -+:108A60000401A0E6628840F27123D4F80C115A4345 -+:108A7000C1EB420202FB00F6DDE903020244D4F836 -+:108A80000001D4F8F8C0121AD4F80831521E0CFBB9 -+:108A9000003002FB010B607D40F2E24110FB01F06F -+:108AA0000C9094F852000190FCF7A8FC0146019844 -+:108AB000022814BFD348D248084400F2E1414FF4E1 -+:108AC0007A70B1FBF0F000EB4B010C9801EB000B5E -+:108AD0000198FCF787FC584400F16001CA48B9F1DD -+:108AE000000F4161A6F2133181613FF45CAEBAF12F -+:108AF000000F08BFFFDF56E6628840F27123D4F80A -+:108B00000C115A43C1EB420101FB00F694F86300DB -+:108B100025281CBF94F8640025280AD1B4F87C01EC -+:108B2000381A00B2002804DB94F87F01002818BF2F -+:108B30000B900C9828B1039880B3BBF1000F18BFBD -+:108B4000FFDFDDE903010144D4F80C0101FB00FA69 -+:108B50000B98FCF753FC01460B9802280CBFA84861 -+:108B6000A848084400F2E1414FF47A70B1FBF0F0FC -+:108B700000EB4A0A0B98FCF735FC504400F1600109 -+:108B8000A14840F2712341616288D4F80C115A4324 -+:108B9000C1EB4201A1F21331816104E6FFE7BBF1B1 -+:108BA000000F14BFBAF1000FFFDF0B98FCF726FC93 -+:108BB0000B9902290CBF92499249084400F2E14105 -+:108BC0004FF47A70B1FBF0F0361A94F85200FCF7CB -+:108BD00009FCABEB00003044A0F12006B1E700BF78 -+:108BE000B9F1000F7FF40EAE94F8040100283FF4B1 -+:108BF00022AE618840F27122D4F80C015143C0EBDF -+:108C00004101284606F02EFD0004000C3FF413AE8F -+:108C10001D99002918BF0880012013B0BDE8F08F0E -+:108C200094F85401FAF781FA94F854012946FAF7B6 -+:108C300069F900281CBF88F0010084F819010020A0 -+:108C400013B0BDE8F08F2DE9F04F704C804683B033 -+:108C500020788A4600256C4E4FF00209032804BF95 -+:108C6000207B40457CD1606830612078032818BFA4 -+:108C7000FFDF0327BAF1080F70D2DFE80AF0040E15 -+:108C80001B1B166F6F6A6562FCF74FFF002818BF49 -+:108C9000FFDFB77003B0BDE8F08FFDF7CBF8002819 -+:108CA00018BFFFDF03B0BDE8F08F03B0BDE8F04FA1 -+:108CB000FCF7FAB927752574E07A012658B14FF40C -+:108CC0007A71A069F9F7DFFBA061002104F11000BF -+:108CD00006F0C8FC1AE001216846FAF71AFF9DF871 -+:108CE000000042F210710002B0FBF1F201FB12052C -+:108CF000FCF793FD05442946A069F9F7C4FBA06180 -+:108D0000294604F1100006F0ADFC461C208C411CE5 -+:108D10000A293CBF30442084606830B1208C401C5C -+:108D20000A2828BF84F8159000D26775607A002859 -+:108D30001CBF03B0BDE8F08F207B04F11001FAF7EF -+:108D4000E1F8002808BFFFDF03B0BDE8F08F07E0BF -+:108D500004E0207BF9F76DFE2570F5E7FFDFF3E710 -+:108D6000B8F1200F28BFFFDF294F072137F818007F -+:108D7000F7F774FE040008BFFFDFB8F1200F28BF2B -+:108D8000FFDF37F818002188884218BFFFDF4FF057 -+:108D900001083461BAF1080F80F04481DFE80AF07D -+:108DA000049AA2A29DEEEEEDC4F85851F580C4F8E5 -+:108DB0005C5194F8190138B9F9F75AFED4F8241126 -+:108DC000FAF767FB002825DCB4F81611B4F8580050 -+:108DD000814206D1B4F8CC10081AA4F8CE0020467F -+:108DE00005E0081AA4F8CE00B4F816112046A4F83D -+:108DF0005810D4F84011C4F82411C0F8481127E0E5 -+:108E000004360200A2240200E8000020580E0020D0 -+:108E1000800E0020B4F81411B4F85800081AA4F811 -+:108E2000CE00B4F814112046A4F85810D4F8241138 -+:108E3000C4F84011C4F84811D4F82C11C4F8D81063 -+:108E4000D4F83011C4F84C11B4F83411A4F850110E -+:108E500003F0D7FFF9F7E6FD94F852A00746504615 -+:108E6000FCF7CCFABAF1020F0CBFFE49FE490844E8 -+:108E70004FF47A7100F2E140B0FBF1F1D4F80C014B -+:108E800040F27122014460885043C1EB4000A0F1E0 -+:108E9000300AB72F98BFB7272146012006F026FCDD -+:108EA0003844AAEB0000A0F21937A246214601205F -+:108EB00006F01CFCDAF824109C30814288BF0D1AA1 -+:108EC000F760BD4228BF3D46B56084F8188186F83A -+:108ED000029039E704F0DBF801E0FCF7E5F884F8EC -+:108EE000188131E7F9F7C4FDD4F84821014610464E -+:108EF000FAF7CFFA48B1628840F27123D4F80C1126 -+:108F00005A43C1EB4201B0FBF1F094F864100D2913 -+:108F10000FD0B4F85810B4F816210B189A42AEBF0F -+:108F2000501C401C0844A4F8160194F81A0178B9A2 -+:108F300005E0B4F81601401CA4F8160108E0B4F8E6 -+:108F40001601B4F8CC10884204BF401CA4F81601E6 -+:108F5000B4F85201DFF81493401CA4F85201B4F89D -+:108F60007E00B4F87C100DF1080B401AB4F85810CC -+:108F7000401E08441FFA80FA17E045E052E03078BE -+:108F8000002339F81000CDE9005B94F8641139F83A -+:108F90001110084481B22046FFF736FB00283FF449 -+:108FA000D3AE012818BFFFDF26D0B4F81621AAEBF4 -+:108FB000020000B20028E2DA082084F8730084F886 -+:108FC0007280204603F0D2FB84F8045194F8545187 -+:108FD0004FF6FF78202D00D3FFDF27F8158094F897 -+:108FE0005401F9F726FD202084F85401307903B0AC -+:108FF000BDE8F04FF2F77EBEB4F81601BDF80810D8 -+:109000000844A4F81601D0E794F80401042818BF16 -+:10901000FFDF84F8045194F854514FF6FF78202D67 -+:10902000DBD3D9E7FFDF8FE610B5914C207850B144 -+:1090300001206072FCF71DFF2078032805D0207AFC -+:10904000002808BF10BD0C2010BD207BFAF76DF87A -+:10905000207BFAF7B8FA207BF9F7EBFC002808BF71 -+:10906000FFDF0020207010BD2DE9F04F804F83B04E -+:10907000387801244FF0000840B17C720120FCF7E1 -+:10908000F8FE3878032818BF387A0DD0DFF8E4915D -+:1090900089F8034069460720F7F76BFC002818BFE2 -+:1090A000FFDF4FF6FF7440E0387BFAF73EF8387B7D -+:1090B000FAF789FA387BF9F7BCFC002808BFFFDF14 -+:1090C00087F80080E2E7029800281CBF90F804119E -+:1090D00000292AD00088A0421CBFDFF89CA14FF0D5 -+:1090E000200B3AD00721F7F7B9FC040008BFFFDFD7 -+:1090F00094F85401FAF767FA84F8048194F854510B -+:109100004FF6FF76202D28BFFFDF2AF8156094F870 -+:109110005401F9F78EFC84F854B169460720F7F73B -+:1091200028FC002818BFFFDF12E06846F7F7FFFBB6 -+:109130000028C8D011E0029800281CBF90F8041144 -+:10914000002905D00088A0F57F41FF39CAD104E08D -+:109150006846F7F7ECFB0028EDD089F8038087F824 -+:109160000B8003B00020BDE8F08F70B50446434883 -+:1091700090F80004424D400995F8001449098842CE -+:1091800018BFFFDF95F8140D40093E4991F800140F -+:109190004909884218BFFFDF3649002001220C71BF -+:1091A00088700A704870C87031490870BDE8704016 -+:1091B0005AE73049087070472DE9F8432C4C0646B1 -+:1091C0002078002875D13048F9F7D8FB2073202883 -+:1091D0006FD0032766602770002565722572AEB1D7 -+:1091E000012106F1F400FAF70CFD0620F7F7E0FB89 -+:1091F00080460720F7F7DCFB96F8F4104044B1FBFB -+:10920000F0F200FB1210401C86F8F400F9F70AFC9B -+:109210001E49091838BF40F2F65000F59D7086B21D -+:10922000FCF7D7FAE061FCF7F8FA4FF0010878B3E1 -+:1092300084F80A8001216846FAF76BFC9DF800006B -+:1092400042F210710002B0FBF1F201FB1200064481 -+:10925000F9F70EFC3146F9F716F9A0612775677525 -+:10926000257416E004360200A22402004223020004 -+:10927000580E0020E8000020800E002001E000E0F1 -+:109280000BE000E019E000E0478C01000AFAFFFF64 -+:1092900012E0207B04F11001F9F734FE002808BF2A -+:1092A000FFDF25840020FCF7E4FD0020BDE8F88303 -+:1092B000FFE70C20BDE8F883F9F7DAFB3146F9F750 -+:1092C000E2F8A061A57284F80B80C7E72DE9F047AA -+:1092D00082B00026044680F80461A0F85061DFF8EF -+:1092E00000944288FD4FD0F8288099F8000094F847 -+:1092F000641137F8100037F8111008440104090C04 -+:10930000304605D001FB02F0F649B0FBF1F0401CFD -+:109310001FFA80FA2146012006F0E8F9054694F884 -+:109320005200FCF76BF894F8521002290CBFEE497A -+:10933000EE4908444FF47A7100F2E140B0FBF1F1DC -+:10934000608840F271225043C1EB4000A0EB0A005C -+:10935000A0F55970A84534BF29464146814203D241 -+:10936000A8452CBF4046284660620096019699F8B1 -+:10937000000094F86411002337F8100037F811103A -+:109380001A46084481B22046FFF73EF9002818BF6C -+:10939000FFDFC4F800610120C4F8F86084F804011C -+:1093A000A4F81661A4F8146184F81A61B4F858009E -+:1093B000401EA4F85800A4F8526102B00020BDE895 -+:1093C000F087C74948707047C94810B5417A0124F1 -+:1093D000002918BF002408D1C17A31B1406AC549BB -+:1093E000884284BF0024FCF740FD204610BD70B5C4 -+:1093F000BB4C0546E088401CE080D4E9020162785D -+:10940000D5F85861002A1CBF324606F053F9A06017 -+:10941000864208D895F80401012804D0E078002895 -+:1094200004BF012070BD002070BD70B50D4640F234 -+:10943000E24100FB01F42846FBF7E0FF022D0CBFE0 -+:10944000A949AA4908444FF47A7100F2E140B0FBFF -+:10945000F1F000F54D7084428CBF201A002070BDE1 -+:109460002DE9F04383B00026044680F8186190F897 -+:10947000D600002807BF94F80401032803B0BDE814 -+:10948000F083F9F7F5FAD4F8482101461046FAF7C7 -+:1094900000F80028DCBF03B0BDE8F083628840F22A -+:1094A0007123D4F80C115A43C1EB4201B0FBF1F027 -+:1094B000411CB4F858000144A4F81411B4F8CC10BD -+:1094C000B4F81421891A09B20029DCBF03B0BDE841 -+:1094D000F083012184F81A11B4F87E10B4F87C20CE -+:1094E0007E4F891A491E084485B2DFF8F4810DF1D8 -+:1094F00008091EE098F8000037F81000CDE900696F -+:10950000B4F8142194F86411012337F811100844B9 -+:1095100081B22046FFF778F8002804BF03B0BDE809 -+:10952000F08301280FD0022812BFFFDF03B0BDE88F -+:10953000F083B4F81401281A00B20028BCBF03B0AD -+:10954000BDE8F083D6E7B4F81401BDF8081008446C -+:10955000A4F81401EDE7F0B5DFF884C104265F4BF1 -+:109560009CF80020002583B006297DD2DFE801F0B9 -+:10957000073C03191941044680F8046107E00446DA -+:109580009CF80300002818BF84F804610BD0F9F799 -+:109590007AF9A4F85251B4F85800A4F8160184F8E6 -+:1095A0001A5103B0F0BD33F8120094F804210121E0 -+:1095B000032A13BF94F80421C4F80051C4F8F850EA -+:1095C000012AE4D1CDE9001594F86411B4F8CC2057 -+:1095D00033F811100023084481B22046FFF714F835 -+:1095E000002818BFFFDFD2E7032180F8041103B081 -+:1095F000F0BD0446B0F802C0866A90F8640133F802 -+:10960000121033F8100008440104090C4FF0000058 -+:1096100005D001FB0CF03349B0FBF1F0401C87B2E0 -+:109620002146012006F062F8054694F85200FBF747 -+:10963000E5FE94F8521002290CBF2B492B4908442F -+:109640004FF47A7100F2E140B0FBF1F0618840F232 -+:1096500071225143C0EB4100C01BA0F55970AE42CE -+:1096600034BF2946314600E008E0814203D2AE42D1 -+:109670002CBF30462846606203B0F0BDFFDF03B068 -+:10968000F0BD2DE9F8431A4C0327154EE27AA17A72 -+:1096900042F21079002550B1012843D002281CBFA6 -+:1096A000FFDFBDE8F8834FF000081AB95EE04FF025 -+:1096B00000080AB1E5722EE051B101216846FAF7BF -+:1096C0004DFA9DF800000002B0FBF9F109FB11080A -+:1096D000FCF7A3F800EB0801A0690DE042230200AB -+:1096E000E800002040420F0004360200A2240200DD -+:1096F000580E0020DB821300F8F7C5FEA061257428 -+:109700006775607A30B9207B04F11001F9F7FAFB34 -+:1097100000284BD02584F9F7B6F83079BDE8F84336 -+:10972000F2F7E8BAE572A7692570012020720021DE -+:10973000606805F035FB6068C0F84871217B80F8EF -+:109740005411616AC0F84C71C0F8581190F8545126 -+:109750000788202D28BFFFDF3C4820F8157060687F -+:10976000FFF7B4FD002818BFFFDFD4E751B1012196 -+:109770006846FAF7F3F99DF800000002B0FBF9F132 -+:1097800009FB1108FCF749F800EB0801A069F8F79C -+:109790007AFEA06125746775607A0028BAD1207BB3 -+:1097A00004F11001F9F7AEFB0028B3D1FFDFB1E7F8 -+:1097B00070B5274CA178022906BFE188002970BD49 -+:1097C0002569C5F85C0195F85200FBF70BFED5F84A -+:1097D0005C11081AA1680144A160E1680844E060D6 -+:1097E00070BD70B505461A488378022B06BF006924 -+:1097F00000F5AC74174C002904BF256070BD012929 -+:1098000008BF681E0DD002291CBFFFDF70BD1046C7 -+:10981000FBF703FE4FF47A7100F2E140B0FBF1F088 -+:10982000281A206070BD0C48007800281CBF00205A -+:10983000704710B50720F7F7ADF880F0010010BDB4 -+:1098400005480078002818BF01207047800E0020CE -+:10985000E80000207C0E0020580E0020F8490C285B -+:10986000896881F8C3001ABF13281828704700229E -+:1098700011280FD0072808BF704715280AD00128E3 -+:109880001ABF002802287047A1F88220012081F821 -+:1098900086007047A1F88820704770B5E84CA16831 -+:1098A0000A88A1F8362181F8340191F85100012885 -+:1098B00008BF012508D0022808BF022504D00428CB -+:1098C00016BF08280325FFDFA06880F8385190F8FC -+:1098D0005200012808BF012508D0022808BF022530 -+:1098E00004D0042816BF08280325FFDFA068012143 -+:1098F00080F8395180F83211002180F80611E078A3 -+:10990000BDE87040F2F7F6B9F0B4CD48806890F841 -+:109910004E30478EC68E458FB0F84010C28FB0F8DB -+:1099200042C0022B1FD08D4238BF294601866245B6 -+:1099300028BF62468286018FB0F84430994238BF12 -+:109940000B464386818FB0F84640A14238BF0C4693 -+:10995000C486BB4228BF1F464786B44228BF26465E -+:10996000C686F0BC7047038E9D4228BF1D46838E7D -+:109970009A4228BF1A46A94298BF0D4605869445CB -+:1099800098BF62468286002180F84E10D3E7AC4A29 -+:10999000012992681BD0002302290FD0032921D06E -+:1099A00028B301282ED0032818BF704792F863000F -+:1099B00013281CBF1628182805D1704792F8C30039 -+:1099C000002808BF7047D2F8F0000370704792F883 -+:1099D000C300012808BF7047D2F8F4000178491E7F -+:1099E0000170704792F8C3000328ECD17047D2F899 -+:1099F000F000B2F858108288891A09B20029A8BF6D -+:109A000003707047B2F85800B2F8FA10401A00B26A -+:109A10000028E1DA70472DE9F04100260327884C41 -+:109A20000125A0B1206906F0CCF9A16881F8C20037 -+:109A300005FA00F010F4000F08BFFFDFA06880F8FF -+:109A40006370A0F8826080F88650BDE8F081A0685D -+:109A50000023194690F86420583005F0A2FD002834 -+:109A600004BF6570BDE8F0816078002818BFBDE8CC -+:109A7000F081206906F0A5F9A16881F8C10081F89C -+:109A80006470A1F8886081F88A50BDE8F08170B5F3 -+:109A90006B4C84B0207910F0010F04BF04B070BD8E -+:109AA000206900230521C578A06890F8632058300C -+:109AB00005F077FD002818BF022D0FD00B2D18BF21 -+:109AC000042D0BD0052D18BF062D07D00D2D18BF66 -+:109AD000112D03D0607840F0080060706078002895 -+:109AE0001CBF04B070BD2069C078801E162880F0AD -+:109AF0005283DFE800F00BFBA7C5FA26FBF9FB9ABF -+:109B0000F8FCFBFBFBE3F6F5F4F3F2F1A0680023AD -+:109B1000012190F86620583005F043FD002840F000 -+:109B2000B583206906F0A8F9A16881F8EE00072046 -+:109B300081F86600002081F88A0081F8860000F034 -+:109B4000A5BBA0680921002390F86320583005F0D8 -+:109B500028FD20B1206906F0DFF9122814D0A06892 -+:109B60000A21002390F86320583005F01AFD20B137 -+:109B7000206906F0D1F9142821D0206906F0CCF92B -+:109B8000162840F0838342E0A0680125002390F866 -+:109B900063200921583005F004FD002808BF6570D6 -+:109BA00000F074836078002840F07083A16881F829 -+:109BB0007A0081F8860081F8630000F067BBA06836 -+:109BC0000021012580F86310A0F8821080F886102B -+:109BD0000421FEF71FFBA06890F84E10012900F049 -+:109BE0007C820288A0F81621028EA0F81821828EAD -+:109BF000A0F81A21428E00F58671A0F81C21C08EB3 -+:109C000048820D72E078F2F775F800F03FBBA0686B -+:109C100090F86310202940F03983002180F8631008 -+:109C200080F886101A2000F02FBBA06890F863100F -+:109C30000F292AD1002180F8681012213AE0000093 -+:109C400004010020A06890F8631013291DD1D0F8FA -+:109C5000F01000884988814218BFFFDFA068D0F863 -+:109C6000F00000F12601206906F033F9A06800F148 -+:109C7000BC01206906F035F91620A16800F064B92E -+:109C8000A26892F86300162802D0022000F064BA9D -+:109C9000D2F8F00002F1A80300F11E0100220E30FC -+:109CA00005F007FCA0680021C0E92611012180F819 -+:109CB0006810182180F8631000F0E8BA206906F0F7 -+:109CC000B0F9032840F0E282206906F0AEF900BF47 -+:109CD00001F022FC00F0DABA8DE202E2AEE152E1DC -+:109CE0001EE135E103E050E0C4E004E0D5E1206985 -+:109CF00006F00EF9ECE7A06890F863101B29C4D1B8 -+:109D0000002580F88B5080F88650D0F8F01000883D -+:109D10004988814218BFFFDFA068D0F8F0100D70AD -+:109D2000D0F83C110A78002A18BFFFDF40F0F3801A -+:109D300090F88C207AB180F88C500288CA80D0F8D4 -+:109D40003C110D71D0F83C210D211170D0F83C214F -+:109D50000188518010E00288CA80D0F83C110D7152 -+:109D6000D0F83C2101211172D0F83C210C21117056 -+:109D7000D0F83C21018851800088F6F779FFF6F78A -+:109D8000D9FBE078F1F7B6FFC5E0A06800231946DB -+:109D900090F86420583005F004FC50B9A068002306 -+:109DA000082190F86320583005F0FBFB002800F0F4 -+:109DB00027826078002840F06982A06890F88E00C1 -+:109DC00010F0020F17D1206906F098F8A16881F809 -+:109DD0008F00206906F094F8A168A1F8900020692E -+:109DE00006F091F8A168A1F8920091F88E0040F079 -+:109DF000020081F88E00A06890F88E1011F0010F1B -+:109E000012D190F8642000231946583005F0C9FBA0 -+:109E1000002808BFFFDF0121A06880F8641080F8E7 -+:109E20008A100021A0F88810A06890F8631001291A -+:109E300007D1002180F8631080F88610E078F1F7F0 -+:109E400059FFA168D1F8F000098842888A4204BF0E -+:109E50000178042940F01A8200250570E078F1F7B6 -+:109E600049FFA06890F86310002908BF80F8865069 -+:109E700000F00CBAA0680023072190F86320583046 -+:109E800005F08FFB002800F0BB816078002840F0CF -+:109E9000FD8102A9206906F079F8A0689DF80820E4 -+:109EA000002590F89410114001F02F0180F89410D3 -+:109EB00090F895109DF80920114001F0410180F8BB -+:109EC000951080F88650D0F8F010008849888142BB -+:109ED00018BFFFDFA068D0F8F0100D70D0F83C116B -+:109EE0000A78002A18BFFFDF15D10288CA80D0F88F -+:109EF0003C110D71D0F83C11029A8A60039ACA6035 -+:109F0000D0F83C21072111700188D0F83C01418034 -+:109F1000E078F1F7EFFEA06880F8635000F0B6B982 -+:109F2000A0680023092190F86320583005F039FB20 -+:109F3000002800F065816078002840F0A781A168C2 -+:109F400081F87A0081F8860081F8630000F09EB9FC -+:109F5000A0680023194690F86420583005F021FBD2 -+:109F6000002800F04D816078002840F08F81A068C3 -+:109F70000021A0F88810012180F88A10022180F8C1 -+:109F8000641000F083B9A0680023194690F864209B -+:109F9000583005F006FB00287ED0206905F0E0FF70 -+:109FA00000287AD0206905F0D7FFA16808872069CA -+:109FB00005F0CEFFA1684887206905F0CFFFA168B2 -+:109FC0008887206905F0C6FFA168C88791F86300FB -+:109FD0001D2813BF91F84E00012081F84E00012882 -+:109FE00007D091F8FD00002804BF91F8FC0000287C -+:109FF00003D01F2081F8640017E01E2081F8640060 -+:10A000000A88A1F822210A8FA1F824214A8FA1F8F9 -+:10A0100026218A8F01F58670A1F82821C98FC18376 -+:10A0200001210175E078F1F765FEA0680021A0F834 -+:10A030008810012180F88A1000F028B9A068002358 -+:10A040000A2190F86320583005F0ABFA20B320695C -+:10A0500005F086FFA8B1206905F07EFFA16808879A -+:10A06000206905F075FFA1684887206905F076FF33 -+:10A07000A1688887206905F06DFFA168C887FFF790 -+:10A0800043FCA068002180F8861080F8631004214A -+:10A09000FEF7C0F8A06801E01AE07CE090F84E10EE -+:10A0A00001291AD00288A0F81621028EA0F81821E2 -+:10A0B000828EA0F81A21428E00F58671A0F81C212C -+:10A0C000C08E488201200872E078F1F713FEDDE0CF -+:10A0D000607840F001006070D8E0022180F84E10F6 -+:10A0E000D4E0A0680023194690F86420583005F0A9 -+:10A0F00058FA80B3A06890F86300242812BF25287E -+:10A10000607840F0200027D06846FBF7EDF9002882 -+:10A1100008BF002105D0009805F053FE8DF8080017 -+:10A1200002A9A06801AB162290F8630005F001FCBB -+:10A13000A0B1A0689DF80420162180F8E42080F8E2 -+:10A14000E5101A2180F86410012180F88A1000219E -+:10A15000A0F888109AE053E0607097E0206905F05D -+:10A1600022FFC0B1206905F018FFA16800F00700C8 -+:10A1700081F84F00206905F014FF00F00701A06886 -+:10A1800080F8501090F80721002A04BF90F80621AB -+:10A19000002A04D024E00020FFF73DFC76E090F890 -+:10A1A0004F3090F852C000F151029C4501BF127827 -+:10A1B0008A42012180F87B1012D00288A0F82E215B -+:10A1C00090F84F2000F5867180F8302190F850000B -+:10A1D00081F82500012081F82000E078F1F78AFD60 -+:10A1E000A068222180F86410012180F88A100021E3 -+:10A1F000A0F888104AE0A06890F86300202801D0F9 -+:10A200000120A9E7206905F0D8FEC0B3206905F058 -+:10A21000C4FE00F0070060F30705206905F0C1FEE9 -+:10A2200000F0070060F30F25A2680120002682F8E5 -+:10A230008600A2F88260242082F86300D2F8080128 -+:10A24000B2F851202946ADF8002005F020FB9DF81A -+:10A250000020C1B28A4207BFA16881F8E860A26805 -+:10A2600082F8E8109DF80110C0F30720814219BF61 -+:10A27000A16881F8E900A06880F8E96006E0FFE7DE -+:10A280000120FFF7C8FB1E20FFF707FBA068D0E9FD -+:10A2900028134A1C43F10001C0E9282104B070BD15 -+:10A2A0002DE9F047FE4D04464FF00007687808435B -+:10A2B0006870287910F0200F2846806818BFA0F831 -+:10A2C0007C7004D1B0F87C10491CA0F87C1090F888 -+:10A2D0006910012639B990F863200023062158300F -+:10A2E00005F05FF958B3A88810F4006F07D0A8688C -+:10A2F00090F86910002918BFA0F874701FD1A868E1 -+:10A30000B0F87410491C89B2A0F87410B0F8762027 -+:10A310008A422CBF511A00218288521D8A4228BFCE -+:10A3200080F87A60B0F87410B0F87620914206D3C5 -+:10A33000A0F8747080F81261E878F1F7DBFC2879F6 -+:10A3400010F0600F08D0A86890F8671021B980F865 -+:10A3500067600121FDF75EFF4FF00808002C56D121 -+:10A360006878002851D1287910F0040F0DD0A86822 -+:10A3700090F86300032808BFFFDFA86890F8661014 -+:10A38000072904BF2E7080F8667001F015F928794E -+:10A3900010F0080F19D06878B8B9A868002190F8B3 -+:10A3A000C300FFF7F4FAA86890F8C300FF2808BFBD -+:10A3B000FFDFFF21A86880F8C31090F86610082915 -+:10A3C00003D10221297080F86670FFF760FBA8783E -+:10A3D00010F0080F16D0A8680023052190F863201C -+:10A3E000583005F0DEF850B185F80180A868D0F843 -+:10A3F0003C1108780C2808BF0020087002E00020FB -+:10A4000003F04DFDA86801F010F800F06CFDA8689D -+:10A41000A14600F1580490F8EC0030B9A27B00236B -+:10A420000121204605F0BDF810B1208D401C20858B -+:10A430003D21B9F1000F18D12878022808BF162055 -+:10A440000ED0012804BFA86890F8EE0008D0687804 -+:10A45000E8B110F0140F1CBF1E20E07602D005E01A -+:10A46000E07603E010F0080F02D0E176A67641E036 -+:10A4700010F0030F03D02A20E076A6763AE010F021 -+:10A48000200F08BFFFDF2320E076A67632E094F8A5 -+:10A490002E0028B1608D411C6185A18D884213D2A8 -+:10A4A00094F8320028B1208E411C2186A18D88426B -+:10A4B0000AD2218DE08C814203D3AA6892F8EC2065 -+:10A4C00012B9A28D914203D32220E076A67611E044 -+:10A4D000E17B31B1A18C814228BF84F81B80C5D2B9 -+:10A4E00006E0A08C062803D33E20E076A67601E0A5 -+:10A4F000A07EA0B1E7722773E7730221A868FDF779 -+:10A5000089FEA86890F8C310012904D1D0F8F4009E -+:10A510000178491E0170E878F1F7ECFB03E00021B7 -+:10A52000A868FDF777FEBDE8F047FAF7ECBF5C4995 -+:10A530004A788B781A430ED101280AD0087910F096 -+:10A54000040F04D0886890F86600072803D0012023 -+:10A550007047FDF74BBE0020704770B5504C064663 -+:10A560000D46A0883043A08016F0020F04D016F0EC -+:10A57000010F18BFFFDFE56016F0010F18BF25615E -+:10A5800016F0020F12D0284605F01BFC062802D058 -+:10A590000B282ED00AE0A06890F86310182905D186 -+:10A5A0000021C0E92811012180F8691016F0800F00 -+:10A5B0001CBF0820A07016F4806F08BF70BDA06893 -+:10A5C000B0F8581080880844801D86B2284605F0EF -+:10A5D000F8FB012804BFA068A0F8FA6015D028464F -+:10A5E00005F0EFFB68B1284605F0EBFB182823D0F7 -+:10A5F0000BE0A06890F86310122908BF0021D5D1A4 -+:10A60000D2E7A068D0F8F0008680284605F0D9FB94 -+:10A6100001281DD0284605F0D4FB08B3284605F0D4 -+:10A62000D0FB182818BF70BDA068B0F8EA10284603 -+:10A63000BDE8704005F0D3BCA06890F8E810002990 -+:10A6400002BF90F8E91000290026A0F8EA60DCE7D4 -+:10A65000A068B0F8FA102846BDE8704005F003BCC9 -+:10A66000A068D0F8F00081882846BDE8704005F069 -+:10A67000CABBF0B50A4C85B00026A060A680667003 -+:10A68000A670054626700088FAF705FFA0680088C6 -+:10A69000FAF727FFB5F8D000A168401C82B201E0AC -+:10A6A0000401002001F1580004F085FD002818BFC6 -+:10A6B000FFDF95F8640025280AD1B5F85810B5F8E1 -+:10A6C000EA00081A00B20028A4BF6078002804D06D -+:10A6D00095F8630025283BD119E0A06890F8E810B0 -+:10A6E000002908BF90F8511080F8511090F8E91037 -+:10A6F000002908BF90F8521080F852100020FFF790 -+:10A70000CCF885F86460A16881F87B6020E0B5F83A -+:10A710005810B5F8EA00081A00B20028A4BF607803 -+:10A72000002815D1A06890F8E810002908BF90F81B -+:10A73000511080F8511090F8E910002908BF90F8E6 -+:10A74000521080F852100020FFF7A7F885F86360D8 -+:10A75000A5F8D060A06890F8861039B1B0F88210E2 -+:10A76000B0F88420914224BF05B0F0BD90F88A1063 -+:10A7700039B1B0F88810B0F88420914224BF05B0F8 -+:10A78000F0BDB0F88020B0F87E108A4224BF05B03A -+:10A79000F0BD90F867208AB3B0F87C208A4224BFCD -+:10A7A00005B0F0BD90F8C370FF2F00F02A81684615 -+:10A7B000FAF774FE002808BFFFDF009805F03FFAA3 -+:10A7C0000321009805F052FA0098017821F0100159 -+:10A7D0000170394605F0C7FA192F80F0E780DFE8ED -+:10A7E00007F02A22144EE5E5E61B7CE5E6E66CE57B -+:10A7F000E5E5E5D8E6E6869FB8E5C500B0F87C104B -+:10A80000062924BF05B0F0BDCCE7A06890F8ED1094 -+:10A81000009805F02FFBCAE0A06890F8C4100098DB -+:10A8200005F078FBC3E0A068D0F8F400411C009864 -+:10A8300005F011FBBBE0A068D0F8F000817900982A -+:10A8400005F0DDFAA068D0F8F0000189009805F065 -+:10A85000CFFAA068D0F8F0004189009805F0B3FA6B -+:10A86000A068D0F8F0008189009805F0B3FAA068DC -+:10A87000D0F8F000C189009805F0B3FA97E0A0681D -+:10A88000D0F8F000011D009805F0F8FAA068D0F8A3 -+:10A89000F00000F10C01009805F0FAFAA068D0F879 -+:10A8A000F00000F11E01009805F0F8FAA06800F130 -+:10A8B000B801009805F000FB79E060690178009824 -+:10A8C00005F012FB60698188009805F00FFB606954 -+:10A8D0004188009805F00EFB69E0FE49D1E90001CE -+:10A8E000CDE9020102A9009805F018FB5FE0A0681D -+:10A8F000B0F84410009805F01BFBA068B0F84610B3 -+:10A90000009805F019FBA068B0F84010009805F019 -+:10A9100017FBA068B0F84210009805F015FB46E060 -+:10A92000A068B0F84010009805F00AFBA068B0F8E5 -+:10A930004210009805F008FBA068B0F84410009899 -+:10A9400005F0F6FAA068B0F84610009805F0F4FAA1 -+:10A950002DE0A06890F80811009805F01CFBA06895 -+:10A9600090F80911009805F01AFB20E0A06890F813 -+:10A97000E80004F087FF0146009805F028FBA06876 -+:10A9800090F8E90004F07EFF0146009805F023FBF3 -+:10A990000DE0A06890F8E510009805F040FBA06875 -+:10A9A00090F8E410009805F03EFB00E0FFDFFAF7B6 -+:10A9B00088FD002808BFFFDF009F384605F001FA38 -+:10A9C000012809D0384605F0FCF960B1384605F099 -+:10A9D000F8F918280FD014E0A068B0F8FA1038463B -+:10A9E00005F041FA0DE0A068D0F8F0008188384603 -+:10A9F00005F009FA05E0A068B0F8EA10384605F05D -+:10AA0000EEFAB5480090B54BB54A2946304603F0FA -+:10AA100081F9A0680023052190F86320583004F0E4 -+:10AA2000C0FD002804BF05B0F0BD05B0BDE8F04092 -+:10AA300002F041BFAB48806890F8861029B1B0F8A9 -+:10AA40008210B0F8842091421AD290F88A1029B16D -+:10AA5000B0F88810B0F88420914211D2B0F880206C -+:10AA6000B0F87E108A420BD290F86720B0F87C00D4 -+:10AA700022B1884204D200BF03F0ECB90628FBD310 -+:10AA8000002001460CE470B50C46064615464FF40E -+:10AA9000A071204607F0C9F82680002D08BFFFDF0F -+:10AAA0002868C4F8F0006868C4F8F400A868C4F81E -+:10AAB0003C0170BDF6F7B3B82DE9F0410D460746ED -+:10AAC0000621F5F7CBFF040008BFBDE8F081D4F8FC -+:10AAD0003C110026087858B14A8821888A4207D15B -+:10AAE000082810D00D281FD00C2835D0072850D0AA -+:10AAF00094F8120100285ED06E700F20287084F840 -+:10AB000012616F8042E06E7008202870D4F83C011A -+:10AB10004168C5F802108168C5F80610808968810F -+:10AB2000D4F83C01067031E00846F6F7A1F8074674 -+:10AB3000F5F716FDB8B96E700D202870D4F83C01F9 -+:10AB40004068C5F80200D4F83C0106703846F5F7B5 -+:10AB500001FD0120BDE8F0810846F6F789F80746B7 -+:10AB6000F5F7FEFC10B10020BDE8F0816E700C20FE -+:10AB70002870D4F83C014168C5F802100089E880CB -+:10AB8000D4F83C0106703846F5F7E4FC0120BDE836 -+:10AB9000F0816E7007202870D4F83C01416882680B -+:10ABA000C068C5F80210C5F80620C5F80A00D4F838 -+:10ABB0003C010670EAE794F81401C8B16E701420E5 -+:10ABC000287094F814010028E0D000BF84F81461C4 -+:10ABD000D4F81601C5F80200D4F81A01C5F8060029 -+:10ABE000B4F81E01688194F814010028EED1CDE775 -+:10ABF00094F8200180B16E701A20287084F82061CA -+:10AC0000D4F82201C5F80200D4F82601C5F80600E0 -+:10AC1000B4F82A016881B9E794F82C0148B16E7044 -+:10AC20001B20287084F82C61D4F82E01C5F802008E -+:10AC3000ACE794F80C0190B16E701820287094F86D -+:10AC40000C010028A2D000BF84F80C61D4F80E01DA -+:10AC5000C5F8020094F80C010028F5D196E794F8A5 -+:10AC60003201002808BFBDE8F0816E701520287001 -+:10AC700094F83201002889D084F83261D4F8340184 -+:10AC8000C5F80200B4F83801E88094F832010028D1 -+:10AC9000F2D17BE7134A5061D17070472DE9F0473C -+:10ACA0000446481E85B238BFBDE8F08704F10808A5 -+:10ACB0000126DFF830904FF0080A0027B4F8D000E2 -+:10ACC000401CA4F8D000B4F87C00401CA4F87C0020 -+:10ACD0000AE000005C230200A1A201002FA50100F0 -+:10ACE0005BA501000401002094F8690040B994F8C4 -+:10ACF00063200023062104F1580004F052FCD8B16F -+:10AD0000B4F87400401C80B2A4F87400B4F8761053 -+:10AD100081422CBF0A1A0022A3885B1D934228BFE0 -+:10AD200084F87A60884207D3A4F8747084F81261BA -+:10AD300099F80300F0F7DEFF94F8860020B1B4F82C -+:10AD40008200401CA4F8820094F88A0020B1B4F874 -+:10AD50008800401CA4F8880094F8EC0040B994F8EE -+:10AD600066200023012104F1580004F01AFC20B1F0 -+:10AD7000B4F88000401CA4F8800094F863000C280C -+:10AD800002D00D2820D067E0B4F85800411CB4F878 -+:10AD9000FA00814260D1D4F8F400411C404607F02B -+:10ADA00050F80221204604F034F9D4F8F400007879 -+:10ADB000002808BFFFDF0121FF20FEF7E8FD84F82F -+:10ADC000637084F8966047E0B4F85800411CD4F8EA -+:10ADD000F000808881423FD1D4F83C0101780029FD -+:10ADE00018BFFFDF22D12188C180D4F8F00041894B -+:10ADF000D4F83C010181D4F8F0008189D4F83C01F9 -+:10AE00004181D4F8F000C189D4F83C018181D4F8A3 -+:10AE10003C010771D4F83C0180F800A0D4F83C0153 -+:10AE20002188418099F80300F0F764FF0121204652 -+:10AE300004F0EFF803212046FDF7ECF9D9F80800FB -+:10AE4000D0F8F0000078022818BFFFDF0221FF20B1 -+:10AE5000FEF79DFD84F86370B4F85800401C691E2D -+:10AE6000A4F858008DB2BFF429AFBDE8F087FE4AC0 -+:10AE7000C2E90601704770B50446B0F87C0094F84A -+:10AE80006710002908BFC0F1020503D0B4F87E1096 -+:10AE9000081A051F94F87A0040B194F86320002343 -+:10AEA000092104F1580004F07CFBA0B1B4F87460EF -+:10AEB00094F8690058B994F863200023062104F13E -+:10AEC000580004F06EFB002808BF284603D0B4F8F1 -+:10AED0007600801B001F8542C8BF0546002DD4BFE9 -+:10AEE0000020A8B270BDF0B5DF4C83B0A06890F828 -+:10AEF000C310FF2907BF6178002903B0F0BD90F8A7 -+:10AF0000662000230121583004F04BFB00281CBFB1 -+:10AF100003B0F0BDA06890F8EC1029B103B0022096 -+:10AF2000BDE8F040FEF79ABC90F863200023194674 -+:10AF3000583004F036FB48B1A06890F87A0028B188 -+:10AF400003B01220BDE8F040FEF788BCA0680025E1 -+:10AF500090F86320122A23D004DC032A47D0112A58 -+:10AF600024D003E0182A3CD0242A4CD0002304210A -+:10AF7000583004F016FB00281CBF03B0F0BDD4F815 -+:10AF800008C0022701269CF864001A2800F01E81E0 -+:10AF900041DC012873D002287FD0032863D03EE033 -+:10AFA00003B00B20BDE8F040FEF758BCF8F7D5FD24 -+:10AFB0000C283CBF03B0F0BDA0680821D0F8F00019 -+:10AFC0001E30F8F7CBFD28B1A0680421B830F8F79F -+:10AFD000C5FD00B9FFDF03B00320BDE8F040FEF778 -+:10AFE0003DBC03B00620BDE8F040FEF737BC90F84A -+:10AFF000C21080F8C4100720FEF730FCA06880F86B -+:10B00000635003B0F0BD1820FEF728FCA068A0F83C -+:10B01000825003B0F0BD1F2847D022287ED0DCF834 -+:10B02000F0000178002900F010814088BCF8001081 -+:10B03000884274D100239CF8632019460CF1580013 -+:10B0400004F0AFFA00286AD0A068D0F8F0100978B0 -+:10B05000022972D0032971D0042970D0052908BFB4 -+:10B0600008206DD0F1E09CF8C1008CF8C4000720E6 -+:10B07000FEF7F4FBA06800F0B0B900E00DE00C2092 -+:10B08000FEF7ECFBA068A0F8885090F88E1041F015 -+:10B09000010180F88E1000F0A0B91320FEF7DEFB4E -+:10B0A000A068A0F8885000F098B99CF8FD0000282E -+:10B0B0001CBF03B0F0BD9CF8FC0088B1BCF8FE00DA -+:10B0C000ACF84000BCF80001ACF84200BCF802014A -+:10B0D000ACF84400BCF80401ACF846008CF8FC5015 -+:10B0E000FEF712FC0421A068FDF794F8A06890F820 -+:10B0F0004E10012908BF80F84E7016D00288A0F8C3 -+:10B100001621028EA0F81821828EA0F81A21428EF4 -+:10B1100000F58671A0F81C21C08E01E011E094E0DA -+:10B1200048820E72E078F0F7E5FD1520FEF796FBF9 -+:10B13000A068A0F8885000F050B94CE051E071E0F0 -+:10B1400058E09CF87B0058B18CF8E8508CF8E95036 -+:10B150001820FEF783FBA068A0F8885003B0F0BD6C -+:10B160009CF8070100281CBF03B0F0BD9CF8060145 -+:10B17000002804BF03B0F0BDBCF84F10DCF8080194 -+:10B18000ADF80410BCF85110ADF80010019904F0AE -+:10B190007EFB9DF80020C1B28A4207BFA16881F8FA -+:10B1A000E850A26882F8E8109DF80110C0F307206B -+:10B1B000814219BFA16881F8E900A06880F8E950D0 -+:10B1C000182003B0BDE8F040FEF748BB1120FEF7A1 -+:10B1D00045FBA06801E190F8640004F0D5F9A0BB3C -+:10B1E00008E090F8681041B190F86900002808BFA5 -+:10B1F000FFDF0A20FEF732FB27E0F8F7AEFC0C2851 -+:10B2000023D3A0680821D0F8F0001E30F8F7A6FC80 -+:10B2100028B1A0680421B830F8F7A0FC00B9FFDF1E -+:10B220000320E7E790F88E0010F0030F0DD10C20FB -+:10B23000FEF714FBA068A0F8825080F8866090F8B2 -+:10B240008E1041F0010180F88E10A06890F8C310B4 -+:10B25000FF291CBF03B0F0BD90F8632000231946FE -+:10B26000583004F09EF901E004010020002804BFDA -+:10B2700003B0F0BDA06890F8F810E9B3A1690978AF -+:10B28000D1BB90F8640004F07FF9A8BBA068B0F8C7 -+:10B2900058100A2935D900F108010522E06906F0A5 -+:10B2A000FFFB0028A06802BF80F8F85003B0F0BD93 -+:10B2B000D0F8F400017869B1411C0522E06906F07C -+:10B2C000EFFB00281CBF03B0F0BDA068D0F8F4006D -+:10B2D000007830B9A068E169D0F8F400401C06F0AD -+:10B2E000B0FDA068D0F8F4000178491C017001207D -+:10B2F000FEF7B4FAA06800E003E080F8F85003B06D -+:10B30000F0BDA06890F8FC1011B190F8FD1011B3D9 -+:10B3100090F80611002904BF03B0F0BD90F80711A2 -+:10B3200000291CBF03B0F0BD90F8640004F02CF9B4 -+:10B3300000281CBF03B0F0BDA06890F8512090F821 -+:10B340000811012A4DD0022A4ED0042A14BF082A1F -+:10B3500004294BD05DE0B0F8FE10A0F84010B0F822 -+:10B360000011A0F84210B0F80211A0F84410B0F893 -+:10B370000411A0F8461080F8FC5090F864001E28D4 -+:10B3800005D003B01420BDE8F040FEF767BAFEF721 -+:10B39000BBFA0421A068FCF73DFFA06890F84E10AE -+:10B3A000012908BF80F84E7013D00288A0F816213A -+:10B3B000028EA0F81821828EA0F81A21428E00F584 -+:10B3C0008671A0F81C21C08E48820E72E078F0F7DA -+:10B3D00091FC1520FEF742FAA06880F8645003B093 -+:10B3E000F0BD012915D101E0022912D190F85210C7 -+:10B3F00090F80901012907D0022908D0042914BFB7 -+:10B40000082904280BD004E0012802D107E0022813 -+:10B4100005D003B01620BDE8F040FEF71FBA03B018 -+:10B420000020BDE8F040FEF738BA70B5044690F849 -+:10B43000630000250C2814D00D2818BF70BDB4F887 -+:10B440005800D4F8F010401C8988884218BF70BD9D -+:10B45000D4F83C01FE4E0178002918BFFFDF45D12A -+:10B4600022E0B4F85800B4F8FA10401C884218BF23 -+:10B4700070BDD4F8F400411C04F1080006F0E1FCB2 -+:10B480000221204603F0C5FDD4F8F400007800281E -+:10B4900008BFFFDF0121FF20FEF779FA84F863502F -+:10B4A000012084F8960070BD2188C180D4F8F00096 -+:10B4B000D4F83C1140890881D4F8F000D4F83C114C -+:10B4C00080894881D4F8F000D4F83C11C089888183 -+:10B4D000D4F83C010571D4F83C1108200870D4F868 -+:10B4E0003C1120884880F078F0F704FC01212046C8 -+:10B4F00003F08FFD03212046FCF78CFEB068D0F8E6 -+:10B50000F0000078022818BFFFDF0221FF20FEF7BD -+:10B510003EFA84F8635070BD70B5CD4CA16891F8C7 -+:10B520006320162A11BF132A91F88C20002A627812 -+:10B530001BBF02206070002A70BD81F8C00000258A -+:10B5400081F88B5081F88650D1F8F0000988408846 -+:10B55000884218BFFFDFA068D0F8F0000078032809 -+:10B5600018BFFFDF0321FF20FEF711FAA068D0F813 -+:10B570003C110A78002A18BFFFDF19D10288CA805F -+:10B58000D0F83C2190F8C0101171D0F83C110D7228 -+:10B59000D0F83C210C211170D0F83C210188518059 -+:10B5A0000088F5F765FBF4F7C5FFE078F0F7A2FB3C -+:10B5B000A06880F8635070BD10B5A54C207910F0DC -+:10B5C000020F08BF10BD6078002818BF10BDE068EA -+:10B5D000C078192880F06981DFE800F05F4F0D8F97 -+:10B5E000F8F8A6223FF86F83B1F8F8F8F8F7E3E02F -+:10B5F000F9F5F4F8F300A0680023012190F8662023 -+:10B60000583003F0CEFF002818BF10BD0821A068F5 -+:10B6100080F86610002180F8861080F88A1010BD2E -+:10B62000A0680023194690F86420583003F0B9FF51 -+:10B6300018B1A168002081F88A00A068002319468B -+:10B6400090F86320583003F0ACFF002808BF10BD0D -+:10B650000020A16881F8860010BDA068002319466B -+:10B6600090F86320583003F09CFF002808BFFFDFEC -+:10B670000420A16881F8630010BDA068002319466A -+:10B6800090F86320583003F08CFF002808BFFFDFDC -+:10B690000C20A16881F8630010BDA0680023194642 -+:10B6A00090F86320583003F07CFF002808BFFFDFCC -+:10B6B0000D20A16881F8630010BDA0680023194621 -+:10B6C00090F86320583003F06CFF002808BFFFDFBC -+:10B6D0000121A06880F88B105FF00F0180F86310E3 -+:10B6E00010BDA06890F86300122818BFFFDF012189 -+:10B6F000A06880F88C101121F0E7A068002319469B -+:10B7000090F86320583003F04CFF28B9A06890F8F7 -+:10B710008C00002808BFFFDF0121A06880F88B1093 -+:10B72000132180F8631010BDA06890F863001828FA -+:10B7300018BFFFDF1B20A16881F8630010BDA0685F -+:10B74000D0F8F01003884A889A4204BF0978042987 -+:10B7500019D190F8632000231946583003F021FFD7 -+:10B76000002808BFFFDFA06890F88E1011F0020FCC -+:10B7700004BF012180F8631005D0002180F88610F5 -+:10B78000D0F8F0000170A0680023194690F86420FA -+:10B79000583003F006FF002808BF10BD0020A16844 -+:10B7A00080E0A0680023194690F86320583003F029 -+:10B7B000F8FE002808BFFFDF0520A16881F86300BC -+:10B7C00010BD30E01FE012E001E067E06DE0A0682E -+:10B7D0000023194690F86320583003F0E2FE002859 -+:10B7E00008BFFFDF1D20A16881F86300E8E7A068BB -+:10B7F0000023194690F86420583003F0D2FE002848 -+:10B8000008BFFFDFCAE7A0680023194690F863204D -+:10B81000583003F0C6FE002808BFFFDF2020A168D3 -+:10B8200081F86300CCE7A06890F8641022291DD04D -+:10B8300090F86310242918BFFFDFC1D190F8E810F9 -+:10B84000002906BF90F8E9100029252102E0000038 -+:10B850000401002018BF80F863107FF4F9AE0021C6 -+:10B8600080F863100846FEF718F8F1E690F8E81043 -+:10B87000002907BF90F8E9100029252180F86410FD -+:10B880008CD1002180F8641080F87B1090F80601BC -+:10B8900000281CBF0020FEF700F87FE7A168002009 -+:10B8A00081F8640081F88A008AE7FFDF88E70000FA -+:10B8B00070B5FC4CE1680A88A1F8E62181F8E40142 -+:10B8C00091F85100012808BF012508D0022808BFBF -+:10B8D000022504D0042816BF08280325FFDFE068EE -+:10B8E00080F8E85190F85200012808BF012508D0DF -+:10B8F000022808BF022504D0042816BF0828032503 -+:10B90000FFDFE068012180F8E95180F8E2110021B1 -+:10B9100080F89211E078BDE87040F0F7EBB9F0B430 -+:10B92000E048C06890F84E30478EC68E458FB0F81C -+:10B930004010C28FB0F842C0022B1FD08D4238BFDA -+:10B9400029460186624528BF62468286018FB0F88B -+:10B950004430994238BF0B464386818FB0F8464049 -+:10B96000A14238BF0C46C486BB4228BF1F4647864B -+:10B97000B44228BF2646C686F0BC7047038E9D425F -+:10B9800028BF1D46838E9A4228BF1A46A94298BFF7 -+:10B990000D460586944598BF62468286002180F850 -+:10B9A0004E10D3E72DE9F04FBE4C83B0207910F054 -+:10B9B000010F04BF03B0BDE8F08F606901230521CA -+:10B9C000C578E06890F86420583003F0EAFD00285C -+:10B9D00018BF022D0BD00A2D18BF0B2D07D0032D39 -+:10B9E00018BF062D03D0607840F0080060706078C2 -+:10B9F00000281CBF03B0BDE8F08F60690227012654 -+:10BA000090F8038000254FF02009B8F1000F1CBF0B -+:10BA1000B8F1010FB8F1160F1FD1E06890F863007C -+:10BA200003F0B2FDC8B1E16891F86300202814D09A -+:10BA3000212808D0B8F1160F0CBF84F80190677068 -+:10BA400003B0BDE8F08F262081F86300B8F1160F2F -+:10BA500000F0AE822A20FFF72BFFB8F1190F80F01B -+:10BA6000E282DFE808F046230DC1FEFEFDFCFBFE8E -+:10BA700091B8FAFEFEFEFEF9F8F7F6F5F4FEF300D3 -+:10BA8000E0680123194690F86620583003F089FDDC -+:10BA9000002840F04D84606904F0EEF9E16881F817 -+:10BAA0006801072081F8660000F042BCE0680123CD -+:10BAB000002190F86420583003F073FD002800F056 -+:10BAC000F083606904F0D3F9E168A1F87C01B1F872 -+:10BAD0005820801A00B247F6FE728242A8BF0028A2 -+:10BAE0004BDD01F5BF71606904F0B8F90B20E16826 -+:10BAF0003FE0E0680123002190F86420583003F013 -+:10BB000050FD002800F0CD83606904F083F900281F -+:10BB100000F08982606904F07AF9E168A1F87C019B -+:10BB2000B1F85820801A00B247F6FE728242A8BFD0 -+:10BB3000002822DD606904F064F9E16881F87E0183 -+:10BB4000606904F059F9E168A1F88001606904F0C6 -+:10BB50003EF9E168A1F88201606904F03FF9E1680B -+:10BB6000A1F88401606904F040F9E168A1F8860158 -+:10BB70000D2081F8640000F0DBBB282081F8730001 -+:10BB800081F8726000F0D4BBE0680123002190F8D6 -+:10BB90006420583003F005FD0028E0680CD0A0F8C0 -+:10BBA000885090F88A10491C80F88A105FF01001C4 -+:10BBB00080F8641000F0BCBB90F8642001230521DC -+:10BBC000583003F0EEFC00281CBF0820607040F0E5 -+:10BBD000AF8300F066BBE06890F86410112908BFDD -+:10BBE000122140F09282E3E7E0680123002190F8FF -+:10BBF0006420583003F0D5FC80B9E06890F86420E8 -+:10BC0000122A0BD001230521583003F0CAFC00286A -+:10BC100018BF082000F0458300F0C7B9E06890F82D -+:10BC20008C1031B9A0F8885090F88A10491C80F81F -+:10BC30008A1000F1E001606904F037F9E06800F172 -+:10BC4000B801606904F03CF9E0680BE01BE2AFE189 -+:10BC500059E1F1E0CFE0DBE0EAE23AE0A2E0FFE226 -+:10BC600022E072E190F8AA01002818BFFFDFE06827 -+:10BC70000188A0F8AC1100F5D771606904F003F9F0 -+:10BC8000E06800F5DB71606904F005F9E06880F8B0 -+:10BC9000AA61142180F86410E078F0F72BF800F026 -+:10BCA00047BB000024010020E06890F864101729C9 -+:10BCB00040F02B8290F88A10491E49B280F88A1011 -+:10BCC0000029B8BFFFDF1C20E16881F8640000F0A4 -+:10BCD0002FBBE06890F8651011F0020F09D090F8C2 -+:10BCE000632001230821583003F05BFC002800F09A -+:10BCF000D882E06890F88E0010F0020F17D16069CA -+:10BD000004F0FCF8E16881F88F00606904F0F8F84D -+:10BD1000E168A1F89000606904F0F5F8E168A1F825 -+:10BD2000920091F88E0040F0020081F88E00E068E9 -+:10BD300090F88E1011F0010F05D0E06890F86310B4 -+:10BD400006291CD114E090F8650010F0020F18BF0E -+:10BD5000FFDFE06890F8651041F0020180F865109F -+:10BD6000A0F8885090F88A10491C80F88A10E4E7FF -+:10BD700080F8635080F88650E078EFF7BBFFE0680A -+:10BD800090F87A11042940F0D38280F87A51E07853 -+:10BD9000EFF7B0FFE06890F86310002940F0C88228 -+:10BDA00000F043BAE06890F8650010F0010F7BD115 -+:10BDB0006946606904F0B7F8E0689DF8002090F8E3 -+:10BDC0009410114001F02F0180F8941090F8951014 -+:10BDD0009DF80120114001F0410180F89510A0F874 -+:10BDE000885090F88A10491C80F88A1090F86510E5 -+:10BDF00041F001011CE0E0680123092190F8632073 -+:10BE0000583003F0CEFB002800F04B8200F041BA1E -+:10BE1000E06890F8651011F0040F40F04282A0F83D -+:10BE2000885090F88A2041F00401521C80F88A2042 -+:10BE300080F8651000F07CBAE06890F8650010F0BA -+:10BE4000300F31D1606904F08BF800287DD0606933 -+:10BE500004F082F8E1680887606904F079F8E16825 -+:10BE60004887606904F07AF8E1688887606904F0BF -+:10BE700071F8E168C887207910F0020F03D02069BB -+:10BE8000C078142811D091F863001D280DD091F8C6 -+:10BE90004E0001280BD091F88901002804BF91F8C9 -+:10BEA000880100280AD002E074E081F84E6091F821 -+:10BEB000650040F0100081F865001AE091F8650017 -+:10BEC00040F0200081F865000A88A1F8CA210A8F95 -+:10BED000A1F8CC214A8FA1F8CE218A8F01F5CB7031 -+:10BEE000A1F8D021C98F818780F83260E078EFF720 -+:10BEF00001FFE068A0F8885090F88A10491C80F88B -+:10BF00008A1000F015BAE06801230A2190F8632036 -+:10BF1000583003F046FBE8B3606904F021F8B8B18B -+:10BF2000606904F019F8E1680887606904F010F8A6 -+:10BF3000E1684887606904F011F8E1688887606902 -+:10BF400004F008F8E168C88700E06CE0FFF7E7FC60 -+:10BF5000E068052180F8865080F86350FDF7FBFA11 -+:10BF6000E06890F84E10012908BF80F84E7000F08C -+:10BF7000DF810288A0F8BE21028EA0F8C021828E47 -+:10BF8000A0F8C221428E00F5CB71A0F8C421C08E6A -+:10BF9000088600E006E081F82660E078EFF7AAFE68 -+:10BFA00000F0C6B9607840F00100607000F0C0B9E0 -+:10BFB000E06801230B2190F86420583003F0F1FA77 -+:10BFC00020B100BF84F8019000F0B2B9E06801230D -+:10BFD000002190F86420583003F0E3FA002800F0C4 -+:10BFE0006081E06890F863002528EBD0606903F079 -+:10BFF000DAFFC0B1606903F0D4FFE16800F0070028 -+:10C0000081F85000606903F0C8FF00F00701E068A4 -+:10C0100080F84F1090F89321002A04BF90F89221E5 -+:10C02000002A04D022E001F0DEF900F081B990F896 -+:10C0300052C090F8503000F151028C4502BF117887 -+:10C04000994280F87B6011D000F5CB7180F8DC61FB -+:10C050000288A0F8DE2190F84F2080F8E02190F8C7 -+:10C06000500081F84B00E078EFF744FEE0682221B1 -+:10C0700080F86410A0F8885090F88A10491C80F865 -+:10C080008A1000F055B9E06890F8631021290CBFC0 -+:10C090004FF001084FF0000890F86410232908BF02 -+:10C0A00000F1640705D0B8F1000F18BF00F1630775 -+:10C0B0002BD0606903F099FFF0B3D4F81490484690 -+:10C0C00003F087FF0090484603F087FF8146E06851 -+:10C0D00090F89211002907BF4FF0000BDA4690F854 -+:10C0E00094B190F895A1484603F05AFBB0B1E268CC -+:10C0F00092F85110814211D019EA0B0F41D0B8F1DA -+:10C10000000F08BF012802D008E0677010E1022983 -+:10C1100004BF92F8500010EA090F32D0009803F0E3 -+:10C120003FFB68B1009803F03BFBE16891F85210C7 -+:10C13000884205D0009800E023E010EA0A0F20D0E2 -+:10C140006A466169E06803F03AFBD8B3606903F0BE -+:10C150004AFFE168A1F87C01B1F85820801A00B2CA -+:10C1600047F6FE728242A8BF00284ADD9DF8000013 -+:10C1700081F87E019DF8010081F87F01252038704B -+:10C1800044E0E06890F8920100281CBF1E20FFF7F1 -+:10C190008FFBB8F1000F16D0606903F012FEE16862 -+:10C1A00081F8C20006FA00F010F0807F08BFFFDFC0 -+:10C1B0000A21E06880F8631090F88600002808BF24 -+:10C1C000FFDF0DE010E03D70E16891F88A00401E4D -+:10C1D00040B281F88A000028B8BFFFDF01F003F900 -+:10C1E000E06880F87B50A3E0E06890F892010028B6 -+:10C1F0001CBF0020FFF75CFB3D70E06880F87B50BF -+:10C2000004E0282081F8730081F87260E06800F192 -+:10C2100064018F4209D190F88A10491E49B280F812 -+:10C220008A100029B8BFFFDF82E080F886507FE0E7 -+:10C23000606903F0F6FE16287AD1E06890F8630092 -+:10C24000212802D0262805D072E0606903F0EDFEB7 -+:10C25000FFF72EFBE06880F8635080F8865067E0B7 -+:10C26000E06890F863000E2804D1606903F054FE82 -+:10C27000122805D0E06890F863001D2818D112E05C -+:10C28000E0680123092190F86320583003F089F910 -+:10C2900038B1E06880F87A5080F8865080F86350B2 -+:10C2A00046E0667044E0606903F036FE142805D06D -+:10C2B000E06890F8630021282BD125E0E068052193 -+:10C2C00080F8635080F88650FDF745F9E16891F8F1 -+:10C2D0004E00012808BF81F84E7029D00A88A1F8C5 -+:10C2E000BE210A8EA1F8C0218A8EA1F8C2214A8EF1 -+:10C2F00001F5CB70A1F8C421C98E018680F82660B3 -+:10C30000E078EFF7F7FC13E0606903F005FE16280C -+:10C3100005D0606903F000FE172809D113E0E0683A -+:10C3200080F8635080F886505FF01A00FFF7C0FA7B -+:10C33000E068D0E928134A1C43F10001C0E9282134 -+:10C3400003B0BDE8F08FE06890F864102329EFD1C6 -+:10C3500080F8645090F88A10491E49B280F88A101B -+:10C360000029B8BFFFDFE06880F87B5090F89201A9 -+:10C37000002818BF0020DBD0D8E770B5F84E05467E -+:10C380000C46F06890F8C300FF2818BFFFDFF26882 -+:10C390000020002C82F8C3501CBFA2F8880070BD9A -+:10C3A000A2F88200012082F8860070BD10B584B02A -+:10C3B00004466846F9F772F8002808BFFFDF0098C6 -+:10C3C00003F03DFC0321009803F050FC0098017835 -+:10C3D00021F010010170214603F0C5FCA01E1628B3 -+:10C3E00073D2DFE800F00BAA4EABAB13AA5CAAAB8A -+:10C3F0001B2CAAAAAAAAABAB31734B8DD848C06834 -+:10C4000090F8C410009803F035FD97E0D448C06858 -+:10C4100090F8C410009803F07DFD8FE0D04CA06828 -+:10C420000178009803F060FDA0688188009803F00F -+:10C430005DFDA0684188009803F05CFD7EE0062168 -+:10C44000009803F063FD79E0C54CE068B0F8441053 -+:10C45000009803F06DFDE068B0F84610009803F016 -+:10C460006BFDE068B0F84010009803F069FDE068EB -+:10C47000B0F84210009803F067FD5FE0B84CE06848 -+:10C4800043E0B74CE06800F1E801009803F01CFDC0 -+:10C49000E06800F1BC01009803F020FD4EE00020B0 -+:10C4A00002900390AE48C06890F8941001F0F50136 -+:10C4B0008DF8081090F8950002A900F041008DF861 -+:10C4C0000900009803F05DFD38E036E0A44CE06818 -+:10C4D000B0F84010009803F033FDE068B0F8421067 -+:10C4E000009803F031FDE068B0F84410009803F0C4 -+:10C4F0001FFDE068B0F84610009803F01DFD1DE038 -+:10C50000974CE06890F8921159B190F89411009806 -+:10C5100003F041FDE06890F89511009803F03FFDAD -+:10C520000CE090F85110009803F035FDE06890F8A9 -+:10C530005210009803F033FD00E0FFDFF8F7C1FF71 -+:10C54000002808BFFFDF04B010BD70B50C460546DB -+:10C550004FF4F871204605F068FB258070BDF4F7B4 -+:10C560005EBB2DE9F0410D4607460721F4F776FA48 -+:10C57000040008BFBDE8F08194F896010026C8B118 -+:10C580006E700820287094F8960188B1268484F88B -+:10C590009661D4F89801C5F80200D4F89C01C5F85A -+:10C5A0000600B4F8A001688194F896010028EDD146 -+:10C5B000AE7044E094F8A201002837D094F8A201AC -+:10C5C0000C2818D00D2818BFFFDF38D12088F4F7C9 -+:10C5D0004FFB0746F3F7C4FFA0B96E700D2028701B -+:10C5E00094F8A401A8702088A88084F8A261384635 -+:10C5F000F3F7B0FF23E02088F4F73AFB0746F3F7A0 -+:10C60000AFFF10B10020BDE8F0816E700C202870E3 -+:10C6100094F8A401A8702088A88094F8A801A871B3 -+:10C6200084F8A2613846F3F795FF08E094F8DA0140 -+:10C6300040B16E700F20287084F8DA616F8001209D -+:10C64000BDE8F08194F8AA0180B16E7009202870CD -+:10C6500020886880D4F8AE01D4F8B2116860A9606F -+:10C66000B4F8B601A88184F8AA61E8E794F8B801A3 -+:10C6700040B16E7017202870B4F8BA01688084F851 -+:10C68000B861DCE794F8D40188B16E701820287086 -+:10C6900094F8D4010028D2D084F8D461D4F8D6011B -+:10C6A000C5F8020094F8D4010028F5D1C7E794F842 -+:10C6B000BC01C8B16E701420287094F8BC01002829 -+:10C6C000BDD000BF84F8BC61D4F8BE01C5F802003B -+:10C6D000D4F8C201C5F80600B4F8C601688194F820 -+:10C6E000BC010028EED1AAE794F8C80180B16E70B1 -+:10C6F0001A20287084F8C861D4F8CA01C5F802006D -+:10C70000D4F8CE01C5F80600B4F8D201688196E7E6 -+:10C7100094F8DC0140B11B20287084F8DC61D4F867 -+:10C72000DE01C5F802008AE794F8E201002808BF9C -+:10C73000BDE8F0816E701520287094F8E2010028A1 -+:10C740003FF47DAF84F8E261D4F8E401C5F802005B -+:10C75000B4F8E801E88094F8E2010028F2D16EE72D -+:10C7600024010020FA4A9060D1707047002180F8BF -+:10C77000631080F8641080F8671090F8D61011B13B -+:10C780000221FCF7E8BE0321FCF7E5BE2DE9F047E6 -+:10C79000EF4C81460D46E0680088F4F77BFA06000E -+:10C7A00008BFFFDF60782843607020794FF00005F4 -+:10C7B00010F0200FE0681CBFA0F87C5080F8DC501F -+:10C7C00004D1B0F87C10491CA0F87C10E068012767 -+:10C7D00090F8691039B990F8642001230621583087 -+:10C7E00002F0DFFE48B3A08810F4006F07D0E068C5 -+:10C7F00090F86910002918BFA0F874501DD1E068A6 -+:10C80000B0F87410491C89B2A0F87410B0F87630F2 -+:10C810008B422CBF5A1A0022B4F806C00CF1050C4A -+:10C82000624598BF80F87A70994206D3A0F8745098 -+:10C8300080F8DA71E078EFF75DFA20794FF0020ABC -+:10C8400010F0600F11D0E06890F8671011B1032963 -+:10C8500006D00AE080F867700121FCF77CFE04E056 -+:10C8600080F867A00121FCF776FEE06890F8671079 -+:10C87000012905D1A18811F4807F18BF80F867A035 -+:10C880004FF00808B9F1000F40F03281A18811F48F -+:10C89000007F18BFA0F8F05004D1B0F8F020521C6F -+:10C8A000A0F8F02011F0080F47D06178002944D19A -+:10C8B00090F8C300FF2808BFFFDFFF21E06880F881 -+:10C8C000C31090F86410192905D0E06890F863103F -+:10C8D00020290FD028E080F88B5090F88A10491E4C -+:10C8E00049B280F88A100029B8BFFFDFE06880F8FD -+:10C8F0006450EAE790F8640002F046FE80B1E06818 -+:10C900002621012380F8631090F864200B21583011 -+:10C9100002F047FE002804BF2A20FEF7C9FF03E00B -+:10C92000E168212081F86300E06890F8661008292A -+:10C9300004BF84F800A080F86650FFF733F8207930 -+:10C9400010F0040F09D0607838B9E06890F86610EC -+:10C95000072904BF277080F8665000F0C5FB2079D6 -+:10C9600010F0100F09D0607838B9E06890F86410C2 -+:10C970000B2904BF0C2180F86410A07810F0080F78 -+:10C9800011D0E0680123052190F86420583002F0AE -+:10C9900008FE28B184F80180E06880F8A25102E026 -+:10C9A000002001F07CFA00F03CFD01F06EFA002856 -+:10C9B000E06818BFA0F8D05004D1B0F8D010491CDE -+:10C9C000A0F8D01001F064FA40B1E16891F8DC0001 -+:10C9D00002289CBF401C81F8DC0004D8E06890F875 -+:10C9E000DC00022806D9E068A0F8D050A0F8D250A8 -+:10C9F00080F8DC50E0680123002190F86420583072 -+:10CA000002F0CFFD20B9E06890F864000C2859D1FD -+:10CA1000E0680123002190F86320583002F0C1FD46 -+:10CA200000284FD0E0680123002190F8662058309C -+:10CA300002F0B7FDF0B3E06890F86710022904BF78 -+:10CA400090F8DC0000283DD13046F3F70FFB88B3A7 -+:10CA5000E06890F8C310FF2934D1B0F8CA1001295A -+:10CA600030D980F8D570B0F87E10B0F87C208B1EDD -+:10CA70009A42AFBF0121891A491E89B2B0F8D0305D -+:10CA8000E28893422FBF0122D21A521C92B29142E5 -+:10CA900088BF1146012908BF80F8D55090F8612160 -+:10CAA000A2B1B0F8D220B0F8620182422CBF0120BE -+:10CAB000801A00E006E03CBF401C80B2814288BF83 -+:10CAC000014603E0E068012180F8D550E068B0F845 -+:10CAD0005820114489B2A0F8CC1090F86730002B90 -+:10CAE00018BF012B5FD0022B1CBF032BFFDF09D027 -+:10CAF000A088C0F340200028E06818BFA0F8DE50EE -+:10CB00005BD153E090F86630082B23D0B0F87C104E -+:10CB1000B0F87E2000268B1C9A4206D3511A891E3B -+:10CB20000E04360C1CBF711E8EB290F87A1051B1F3 -+:10CB300090F8632001230921583002F032FD0028CB -+:10CB400008BF00262BD0E06890F8691099B90AE078 -+:10CB500024010020B0F87C30032B24D3B0F87E10E1 -+:10CB60001144491C1FE090F864200123062158302D -+:10CB700002F017FD78B1E1680020B1F87620B1F835 -+:10CB800074108B1C9A4203D3501A801E18BF401E8B -+:10CB9000B04238BF86B2002E1CBF701E86B2E0685D -+:10CBA000B0F8CC103144A0F8C810A1E7B0F8DE10FE -+:10CBB000B0F8CE201144A0F8DE10E06890F86611BD -+:10CBC00039B990F8662001231946583002F0E9FC83 -+:10CBD00038B1E068B0F88010B0F8CE201144A0F869 -+:10CBE0008010E06890F8863033B1B0F88210B0F869 -+:10CBF000CE201144A0F8821090F98AC0BCF1000F39 -+:10CC000006DDB0F88810B0F8CE201144A0F88810E6 -+:10CC10003D22B9F1000F18BF80F873204DD1217863 -+:10CC2000022910D0012908BF90F8681143D061781B -+:10CC300039B380F8727011F0140F18BF1E210CD098 -+:10CC400080F8731055E090F8C410062905BF90F8DD -+:10CC5000C3100229162106212DE011F0080F18BF7C -+:10CC600080F8732045D111F0200F18BF2321E7D1A0 -+:10CC700011F0030F08BFFFDF2A20E16881F873007D -+:10CC800033E02BB1B0F88210B0F88420914211D279 -+:10CC9000BCF1000F05DDB0F88810B0F88420914297 -+:10CCA00008D2B0F88020B0F87E108A4208D390F8FD -+:10CCB00066212AB1222180F8731080F8727018E082 -+:10CCC00090F867203AB1B0F87C208A4228BF80F8FB -+:10CCD0007380F2D209E0B0F87C10062905D33E211A -+:10CCE00080F8731080F8727003E0E06890F87210BA -+:10CCF00079B1E06880F8635080F8645080F867503C -+:10CD000090F8D610002914BF02210321FCF723FC60 -+:10CD100002E00021FCF71FFCE06880F8D650BDE877 -+:10CD2000F047F8F7F0BBF949024648788B7818438A -+:10CD30000ED10846C0684AB1097911F0080F03D036 -+:10CD400090F86600082803D001207047FCF74FBB1D -+:10CD5000002070472DE9F041EC4C05460E46A088B6 -+:10CD60002843A08015F0020F04D015F0010F18BF62 -+:10CD7000FFDF266115F0010F4FF000084FF00107AB -+:10CD80001CD03046666103F01CF8062802D00B2840 -+:10CD90000BD013E0E06890F8641017290ED1002141 -+:10CDA000C0E9261180F8687008E0E06890F8641027 -+:10CDB000112904BF80F8688080F88C7015F0020F8C -+:10CDC00018D02069C078052802D00B280BD011E0BC -+:10CDD000E06890F8641015290CD10021C0E92811F1 -+:10CDE00080F8697006E0E06890F86410102908BFC8 -+:10CDF00080F8698015F0800F1CBF0820A070BDE886 -+:10CE0000F0812DE9F84FC14C00254FF00108A580B5 -+:10CE10006570A5702570E06068F30709074680F823 -+:10CE2000D6800088F3F736FF5FEA000A08BFFFDF0D -+:10CE3000E0680088F8F72FFBE0680088F8F751FBFE -+:10CE4000E068B0F8CA1071B190F8C310FF290FD193 -+:10CE500090F8661191B190F8662001231946583078 -+:10CE600002F09FFB98B1E06890F8C300FF2805D05E -+:10CE7000E06890F8C30000BFFFF798FAD4F80CC040 -+:10CE80009CF8D700002818BFE5801ED10FE0E068AD -+:10CE9000A0F8805090F8671180F8C410002102209B -+:10CEA000FFF76BFAE06880F8D5500220E4E79CF8C1 -+:10CEB000960138B9BCF82000BCF80410884288BF3D -+:10CEC000E08002D8BCF80400E080BCF8CE00401E30 -+:10CED00086B2BCF8D0003044ACF8D0009CF8D40046 -+:10CEE00000281CBFACF8D2508CF8D45004D1BCF848 -+:10CEF000D2003044ACF8D200BCF87C003044ACF82E -+:10CF00007C009CF8690040B99CF86420012306214C -+:10CF10000CF1580002F045FB28B1E068B0F874103D -+:10CF20003144A0F87410E068B0F8CA1001299CBF21 -+:10CF3000491CA0F8CA10002E18BF80F8DC5090F8E9 -+:10CF4000D510A1B1B0F8D000E18888420FD2504688 -+:10CF5000F3F78CF858B1E06890F8611139B1B0F886 -+:10CF6000D210B0F86201814228BF00F094FFE2685D -+:10CF700082F8D55092F864000B2818BF0C2817D1FE -+:10CF8000B2F85810B2F87C31C91A09B200290FDB87 -+:10CF900002F5BF7102F1080004F053FF0221E068BE -+:10CFA00001F0FEFEE06880F8645080F8968048E06A -+:10CFB000252824D1B2F85800B2F87C11401A00B2EA -+:10CFC00000281CDB92F8921192F87E01002808BF1D -+:10CFD00092F8510082F8510092F87F01002808BFB2 -+:10CFE00092F8520082F8520000291CBF0020FEF780 -+:10CFF0005FFCE06880F8645080F87B5021E092F894 -+:10D00000630025281DD1B2F85800B2F87C11401AEF -+:10D0100000B2002815DB92F87E01002808BF92F8C4 -+:10D02000510082F8510092F87F01002808BF92F861 -+:10D03000520082F852000020FEF73AFCE06880F8C7 -+:10D040006350E16801F15800B1F8CE2002F0B3F866 -+:10D05000E06890F86111002918BFA0F8D2502C4860 -+:10D0600000902C4B2C4A3946484600F053FEE068AD -+:10D070000123052190F86420583002F092FA00282C -+:10D0800008BFBDE8F88FBDE8F84F00F014BC00F011 -+:10D09000E1BE10B50446B0F882214388B0F884118F -+:10D0A000B0F886019A4201BFA3889942E38898426A -+:10D0B0000FD02388A4F89A31A4F89C21A4F89E11DB -+:10D0C000A4F8A001012084F896011048C078EEF77A -+:10D0D00011FE0121204601F063FE002084F8640067 -+:10D0E000032084F8670010BD70B5084C207910F05B -+:10D0F000020F08BF70BD6078002818BF70BD20699E -+:10D10000C178891E162980F06C8107E02401002077 -+:10D110008DC7010027CD010055CD0100DFE801F0EA -+:10D120000BF969758B1BF942F95BBE80F9F9F9F9C6 -+:10D13000FAF7F6F5F4F3E0680123194690F8662053 -+:10D14000583002F02EFA002818BF70BD0820E168A0 -+:10D1500081F8660070BD02F0DFFEE16891F863209F -+:10D160000A2A04BF91F8C220824205D1002081F82A -+:10D17000630081F8860070BD91F8650010F0080F1B -+:10D1800004BFFFDF70BD20F0080081F8650091F852 -+:10D190008A00401E40B281F88A000028A8BF70BDF6 -+:10D1A00000F0D8B8E06890F8650010F0010F08BFF3 -+:10D1B000FFDFE16891F88A00401E40B281F88A00E2 -+:10D1C0000028B8BFFFDFE06890F8651021F001018A -+:10D1D00080F8651070BDE06890F86400102818BFF2 -+:10D1E000FFDF0121E06880F88B10112180F86410C6 -+:10D1F00070BDE06890F86400142818BFFFDF0121BB -+:10D20000E06880F88B101521F0E7E06890F8640082 -+:10D21000152818BFFFDF1720E16881F8640070BD92 -+:10D22000E06890F86400152818BFFFDF1920E16856 -+:10D2300081F8640070BDE06890F864001C2818BF95 -+:10D24000FFDF0025E06880F88B5090F8A2010028ED -+:10D2500018BFFFDFE06890F88C1041B180F88C5067 -+:10D260000188A0F8A61180F8A4510D2108E00188DA -+:10D27000A0F8A61180F8A451012180F8A8110C2172 -+:10D2800080F8A2110088F3F7F3FCF3F753F9E07884 -+:10D29000EEF730FDE06880F8645070BDE06890F80B -+:10D2A0007A11042915D0E06890F8651011F0020F8A -+:10D2B00008BF70BD90F88A10491E49B280F88A10E4 -+:10D2C0000029B8BFFFDFE06890F8651021F0020187 -+:10D2D0007EE790F8632001230021583002F061F9C5 -+:10D2E000002808BFFFDFE06890F88E1011F0020FF1 -+:10D2F00007BF062180F86310002180F8861018BF50 -+:10D3000080F87A11CFE760E04FE035E024E011E0EB -+:10D3100000E066E0E0680123002190F863205830C7 -+:10D3200002F03FF9002808BFFFDF0E20E16881F816 -+:10D33000630070BDE06890F8651021F0040180F88A -+:10D34000651090F88A10491E49B280F88A100029A9 -+:10D35000A8BF70BDFFDF70BDE0680123002190F819 -+:10D360006320583002F01DF9002808BFFFDF1D20A0 -+:10D37000E16881F8630070BDE06890F8650000F036 -+:10D380003000102818BFFFDFE06890F8651021F02A -+:10D39000100180F8651090F88A10491E49B280F893 -+:10D3A0008A100029A8BF70BDD4E7E06801230021DE -+:10D3B00090F86320583002F0F4F8002808BFFFDF2F -+:10D3C0002020E16881F8630070BDE06890F8640097 -+:10D3D00022281CBF0028FFDF2320E16881F86400B9 -+:10D3E00070BDFFDF70BD10B5FE4CE16891F86500BF -+:10D3F00010F0080F1EBF0120607010BD40F0080043 -+:10D4000081F86500606902F0DCFCE16881F8C10028 -+:10D410000020A1F8880091F88A00401C81F88A0059 -+:10D4200010BD2DE9F041EF4CE06890F8C310FF29E2 -+:10D4300006BF61780029BDE8F08190F866200123DD -+:10D440001946583002F0ADF8002818BFBDE8F08149 -+:10D45000E068002790F8661159B1A0F8807090F844 -+:10D46000671180F8C410BDE8F04100210220FEF7EA -+:10D4700084BF90F8642001230421583002F091F811 -+:10D480005FEA00084FF002054FF001060CD0D4F817 -+:10D490000CC09CF8640010287ED014287DD015287C -+:10D4A0007CD01C287BD0E1E0E16891F8650010F0A9 -+:10D4B000010F05D0BDE8F04101210920FEF75DBF55 -+:10D4C00010F0020F0CD001210C20FEF756FFE0688F -+:10D4D00090F88E1041F0010180F88E10BDE8F081C7 -+:10D4E00010F0040F05D0BDE8F04101211320FEF734 -+:10D4F00044BF10F0080F09D091F8C10081F8C400B2 -+:10D50000BDE8F04101210720FEF737BF10F0100FF2 -+:10D5100002D091F8890120B191F8640022287DD1D0 -+:10D520009BE091F8880188B1B1F88A01A1F8400028 -+:10D53000B1F88C01A1F84200B1F88E01A1F84400C5 -+:10D54000B1F89001A1F8460081F88871FEF7E7F97B -+:10D550000521E068FBF7FFFFE06890F84E10012915 -+:10D5600008BF80F84E5014D00288A0F8BE21028E69 -+:10D57000A0F8C021828EA0F8C221428E00F5CB71A6 -+:10D58000A0F8C421C08E088681F82660E078EEF706 -+:10D59000B1FB0121152003E006E00BE023E056E09B -+:10D5A000BDE8F041FEF7E9BEBDE8F04101210B20E6 -+:10D5B000FEF7E3BEF6F7D1FA0C2838BFBDE8F081DC -+:10D5C0000821E068E830F6F7C9FA28B1E0680421DC -+:10D5D000BC30F6F7C3FA00B9FFDFBDE8F041012126 -+:10D5E0000420FEF7CABE9CF86901012817D0022862 -+:10D5F00018BFBDE8F0819CF88C0000281CBF0620F5 -+:10D600008CF8C4004FF0010114BF02200D20FEF77A -+:10D61000B4FEE06880F86971BDE8F08126E09CF80E -+:10D62000A201002818BFBDE8F0810CF1A803002278 -+:10D630000CF1E0010CF5B57001F03BFF0121052074 -+:10D64000FEF79BFEE06880F86971BDE8F081BDE8F7 -+:10D65000F04101210620FEF790BE91F87B00C0B991 -+:10D6600091F8920110B191F8930190B1E068012313 -+:10D67000002190F86320583001F093FFC8B1E068B2 -+:10D680000123042190F86420583001F08AFF30B162 -+:10D690000FE0BDE8F04101211720FEF76EBEE06803 -+:10D6A00090F87A0028B1BDE8F04100211220FEF781 -+:10D6B00064BEE06890F863200A2A4DD0B8F1000FEC -+:10D6C00018BFBDE8F08101230021583001F069FF47 -+:10D6D00048B1E06890F87A11042904BF90F88E00F0 -+:10D6E00010F0030F42D0E0680123002190F863207E -+:10D6F000583001F056FF002808BFBDE8F081E0680F -+:10D7000090F8881111B190F88911E1B390F8921155 -+:10D71000002908BFBDE8F08190F89311002918BFD7 -+:10D72000BDE8F08190F8642001230B21583001F00E -+:10D7300038FF002818BFBDE8F081E06890F851205C -+:10D7400090F89411012A71D0022A73D0042A14BFD0 -+:10D75000082A042970D082E090F8C21080F8C41022 -+:10D76000BDE8F04100210720FEF707BE00210C2094 -+:10D77000FEF703FEE06890F88E1041F0010180F89A -+:10D780008E10BDE8F081FFE7B0F88A11A0F84010D4 -+:10D79000B0F88C11A0F84210B0F88E11A0F8441027 -+:10D7A000B0F89011A0F8461080F8887190F86500E4 -+:10D7B00010F0200F34D0FEF7B2F80521E068FBF737 -+:10D7C000CAFEE06890F84E10012908BF80F84E505C -+:10D7D00017D00288A0F8BE21028E00F5CB71A0F808 -+:10D7E000C02101E024010020828EA0F8C221428ED7 -+:10D7F000A0F8C421C08E088681F82660E078EEF794 -+:10D8000079FA01211520FEF7B8FDE06890F865105F -+:10D8100021F0200141F0100180F86510BDE8F08191 -+:10D82000BDE8F04100211420FEF7A7BD012916D163 -+:10D8300002E0FFE7022912D190F8522090F89511EA -+:10D84000012A07D0022A08D0042A14BF082A042972 -+:10D8500022D004E0012902D11EE002291CD090F858 -+:10D86000642001230321583001F09BFE002818BFDB -+:10D87000BDE8F081E0680123022190F8642058306F -+:10D8800001F08FFE002818BFBDE8F0810021BDE83F -+:10D89000F0411620FEF771BDBDE8F0410020FEF713 -+:10D8A00007B8000030B5FF4C05462078002818BFA7 -+:10D8B000FFDFA57230BDFB49012048727047FA486E -+:10D8C00000B502784168406801F1580C91F8633066 -+:10D8D00090F85100252B1CBF9CF80CC0BCF1250F03 -+:10D8E00017D0202B18BF212B38D0BCF1230F18BF25 -+:10D8F00000BD002A08BF00BD91F8942191F8501096 -+:10D90000114011F0010F44D0082818BF04284CD052 -+:10D910004EE08AB191F87E11002908BF00BD0828A9 -+:10D9200018BF042841D0082918BF04293DD0012878 -+:10D9300018BF01293CD036E091F8E810002908BF53 -+:10D9400000BD082818BF04282FD0082918BF0429B3 -+:10D950002BD0012818BF01292AD024E0BCF1230FC5 -+:10D96000C7D0002A08BF00BD91F8941111F0010F33 -+:10D9700004D0082818BF042817D019E011F0020FAE -+:10D9800008BF00BD082818BF04280ED001280FD0FA -+:10D9900009E011F0020F08BF00BD082818BF0428D5 -+:10D9A00003D0012804D0022000BDFFDF082000BD05 -+:10D9B000012000BD2DE9F14FBB4E4FF0010831466B -+:10D9C0006FF00E0A4F686FF00D0B97F85210F88E3B -+:10D9D00002290CBF0AEB90000BEBD00085B2788EC9 -+:10D9E000A84238BF0546AF4C2946606BF2F77AFB78 -+:10D9F000DFF8B892E06200281DBF0021A170A0628C -+:10DA000084F8028008BFC4F8289030787068014616 -+:10DA100000F1580890F86930428E91F85210C08E8B -+:10DA200002290CBF0AEB90000BEBD00080B28242BF -+:10DA300038BF1046002B1CBF001D80B2F6F756FE03 -+:10DA400098F81100002838D008F15001974891E863 -+:10DA50000E1000F5027A8AE80E10D8F86010C0F8AF -+:10DA60002112D8F86410C0F8251200F58170F7F77C -+:10DA7000B6F9307800280CBF0120002080F00101A9 -+:10DA80008B480176D8E91212C0E90412C4F8289034 -+:10DA90004946A581A0F58372F6F71BFD97F8520061 -+:10DAA000012808BF002104D002281ABFFFDF00218F -+:10DAB00001210120F6F71BFD04E0A06AF7F78FF9BA -+:10DAC000F6F738FD009848B9012297F852309621B0 -+:10DAD0001046F7F741F89620F7F7A9F997F82C00C8 -+:10DAE000012808BFF7F726FA02202070BDE8F88F5A -+:10DAF0002DE9F04FDFF8B08183B0414681464E6892 -+:10DB0000A1F11400009096F85D004FF0000A012783 -+:10DB100006F15804A1F1380570B3012873D002282A -+:10DB200075D0032818BFFFDF7FD0686A082201780C -+:10DB300021F008010170A37902EAC302114321F028 -+:10DB400004010170E279042303EA8202114321F007 -+:10DB50001001017094F805B0286BF2F795FA82462F -+:10DB6000F7F7E3FCBBF1020F66D0BBF1010F67D002 -+:10DB7000BBF1030F68D06CE0B6F834B0FFF79FFE3E -+:10DB8000022819BF6FF00D0000EBDB006FF00E00F4 -+:10DB900000EB9B0081B2308E884238BF0146ADF861 -+:10DBA0000810A6F84C100098F7F79EFC38B1696A87 -+:10DBB000EF70AA694FF48060904703201EE001AA2D -+:10DBC00002A9286BF2F743F9686210B194F8331098 -+:10DBD00021B10098F7F75CFC6771A6E79DF8041087 -+:10DBE00031B9A0F800A080F802A0012102F03EF8AF -+:10DBF000BDF80810686A02F01AFA0220607194E712 -+:10DC000001E004E011E00098F7F742FC8DE7B6F878 -+:10DC10004C00ADF8000001AA6946286BF2F717F92D -+:10DC20006862002808BFFFDF7FE70098F7F75CFC19 -+:10DC3000002808BFFFDF78E730EA0A0009D106E0D4 -+:10DC400030EA0A0005D102E0BAF1000F01D001214B -+:10DC500000E00021686A027842EA01110170217C2B -+:10DC600000291CBF617901293CD004F150010F4803 -+:10DC700091E80E1000F5027A8AE80E10216EC0F8C5 -+:10DC80002112616EC0F8251200F58170F7F7A7F830 -+:10DC900098F8000000280CBF0121002104480176FB -+:10DCA00008E000003C01002074010020C00E0020AC -+:10DCB000C8100020D4E91012C0E90412A0F5837145 -+:10DCC0006A6AF6F706FC96F85100012808BF0021A1 -+:10DCD00004D002281ABFFFDF002101210020F6F73F -+:10DCE00006FC03E0F7F77BF8F6F724FCB9F1000F28 -+:10DCF00006D196F85130012296210020F6F72CFF2C -+:10DD0000AF71686A018829828078A8742F7003B087 -+:10DD1000BDE8F08F2DE9F0471E46174681460C46B8 -+:10DD2000FE4DDDF82080287828B9002F1CBF002E7A -+:10DD3000B8F1000F00D1FFDFC5F82080C5E90E94CF -+:10DD4000C5E9067600206872287268712871A8718A -+:10DD5000E871F34EE870E881307804F158072088C4 -+:10DD6000F2F798FF28632088F2F782FF6863F7F7DD -+:10DD70002BF8F6F7DBFC04F11200F7F70EF804F1CC -+:10DD80000E00F6F774FD307800280CBF0320012048 -+:10DD9000F7F717F8787EF6F772FDF7F70CF830789A -+:10DDA0006FF00E056FF00D09002830D0618EE08E07 -+:10DDB00094F852407A7C022C0CBF05EB900009EBE2 -+:10DDC000D00080B2814238BF0846002A1CBF001D27 -+:10DDD00080B22146F6F78AFC3078002831D070688E -+:10DDE00090F86001002818BFF6F7F2FC22460021E7 -+:10DDF0000120F6F76DFE7068D0F8D800F6F7F2FF54 -+:10DE00000120FFF7D7FDBDE8F047F6F7E5BF97F82B -+:10DE10001080278EB4F834A0FFF751FD022814BFFC -+:10DE200009EBDA0005EB9A0085B2AF4234BF384601 -+:10DE30002846B8F1000F1CBF001D80B294F8514075 -+:10DE4000C7E7002122460846F6F742FE0120FFF709 -+:10DE50004FFED8E7B24810B501783838007831B1B4 -+:10DE6000022818BFFFDFBDE81040F6F7ADBF01285C -+:10DE700018BFFFDFF7E7A94810B50078022818BFE0 -+:10DE8000FFDFBDE8104000F044BAA4488079704735 -+:10DE9000A24840797047A1490120C87170472DE917 -+:10DEA000F04706009E489D4D4FF0010740684FF037 -+:10DEB000000800F15804A86A90F8019018BF012EDC -+:10DEC00003D1696B03F0D0FA68706878A0B10128BB -+:10DED00031D0022849D003281CBFFFDFBDE8F087FE -+:10DEE000012E08BFBDE8F087686BF2F70CFBA87A3B -+:10DEF000BDE8F047EDF7FEBE012E08D001224946ED -+:10DF0000686BF2F74DF9022E08BFBDE8F087D4E93F -+:10DF10001202411C42F10000C4E91210E07901280C -+:10DF200003D100BF84F8078000E0E771A87ABDE85C -+:10DF3000F047EDF7DFBE012E08D000224946686B9E -+:10DF4000F2F72EF9022E08BFBDE8F087D4E91201DE -+:10DF5000401C41F10001C4E91201E07901280CBF25 -+:10DF600084F80780E771BDE8F087012E06D0686B62 -+:10DF7000F2F7C9FA022E08BFBDE8F087D4E9120112 -+:10DF8000401C41F10001C4E91201E0790128CCD123 -+:10DF9000C8E72DE9F041624F4FF000083846A7F17D -+:10DFA00038044068012600F158052078012818BF80 -+:10DFB000FFDFA87850B185F80280E670A26941467B -+:10DFC000042090473878002818BF2E71606A03211A -+:10DFD000007831EA000004BFE878002805D1EE702F -+:10DFE000616AE670A269022090470121002000F0DA -+:10DFF000B1F918B1BDE8F04100F08BB9BDE8F041CE -+:10E000000020D7E42DE9F84F454C83462046A4F183 -+:10E0100038054068217800F1580A287800264FF02A -+:10E020000109022818BFFFDFE88940F40070E88189 -+:10E030002078676800283A48406890F868000090A7 -+:10E040003C8EB7F83480FFF73AFC022807BF6FF028 -+:10E050000E0000EB98006FF00D0000EBD80080B2CE -+:10E06000844238BF2046009900291CBF001D80B2A1 -+:10E0700097F85110F6F73AFB9AF81100BBF1000F30 -+:10E0800000F0FA80F6F77CFAF6F76AFA90B99AF897 -+:10E09000110078B1A86A417861B100789AF8071048 -+:10E0A000C0F3C000884205D185F80490BDE8F84F60 -+:10E0B00000F02FB9A86A1A4FB0460188A5F81310CE -+:10E0C00080786875E88940F02000E8816E713878C2 -+:10E0D0007868583000907C6894F82C00012818D19A -+:10E0E000F6F71EFF2046009901F023FA88B1387830 -+:10E0F000002878680CBF00F5867000F5EA7021886A -+:10E1000041800099097A017180F80090A87AEDF7B2 -+:10E11000F1FDA86A0078C0F3800003E03C01002014 -+:10E12000740100209AF80610884237D03878786851 -+:10E1300000F1580490F85D0060B3022848D000BF99 -+:10E1400084F80580387840B12079414628B12171A2 -+:10E1500085F80390AA6910209047E07898B184F878 -+:10E160000380F7F7D0F9002808BFFFDF082085F803 -+:10E170000390AA6900219047D4E91002411C42F1A2 -+:10E180000000C4E91010A07901280CBF84F80680B3 -+:10E1900084F80690E88940F48070E881A86A9AF8CB -+:10E1A00007300178C1F3C0029A4252D13A787A68B6 -+:10E1B00001F0030102F15804012918BF022935D0EA -+:10E1C00003291CBF287A40F0040012D0287240E0D6 -+:10E1D000286BF1F776FE002808BFFFDFD4E91002B4 -+:10E1E000411C42F10000C4E91010A87AEDF782FD4D -+:10E1F000A6E701F05CFDA8B184F80290E9894846E1 -+:10E2000041F40061E981A96A85F80390AA69904701 -+:10E21000E079012803D100BF84F8078019E084F871 -+:10E22000079016E0287A40F01000CFE74078F8B168 -+:10E23000E98941F40061E981A97851B9FB28F1D855 -+:10E24000687A002808BF4E4603D08020AA690021C2 -+:10E2500090475946012000F07DF858B39AF8110014 -+:10E26000002818BFBBF1000F1BD0A87868B118E0D8 -+:10E27000E0790128D3D1CFE7002818BFF6F7B9F924 -+:10E28000E88940F04000E881E3E7A96AAA89487874 -+:10E29000904288BF1046C21CE86A03F02DFCE86A71 -+:10E2A000A862002E1CBF0020FFF7F9FDBDE8F84F63 -+:10E2B00000F02FB8002E1CBF0120FFF7F0FD00205A -+:10E2C000FFF716FC9AF81100002818BFBBF1000FE9 -+:10E2D0000DD0A87858B9A96AAA894878904288BF11 -+:10E2E0001046C21CE86A03F007FCE86AA862002E28 -+:10E2F00008BFBDE8F88F0220BDE8F84FCFE5354AEA -+:10E300001378526892F851200BB1FBF76ABAFAF70A -+:10E310001AB970B52F4900254C68F6F7B7FDF6F726 -+:10E32000A9FDF6F7DBFCF6F73EFDF6F703F9F6F785 -+:10E3300053FD94F82C00012808BFF6F7F1FD264C98 -+:10E340000021A269E0899047226A217A20799047CA -+:10E35000257070BD70B5204C0546002908BF012D01 -+:10E3600005D16079401CC0B26071012830D8E169E4 -+:10E370002846884700282BD0E179184839B1012D6B -+:10E3800001BF41780029017811F0100F20D0217AC7 -+:10E39000F1B910490978002918BF002102D029439A -+:10E3A00004D013E0012D18BF0121F8D10C490978E0 -+:10E3B00011F0100F04BF007810F0100F08D0E078B3 -+:10E3C00030B9A07810B111F0100F01D0002070BD4D -+:10E3D000012070BD740100203C0100204F0100208D -+:10E3E0004C01002010B540F2C311F94803F0FBFBCB -+:10E3F000FF220821F748E4F7FAFDF74800214170B1 -+:10E400004FF46171418010BD2DE9F0410F46064681 -+:10E4100000F03FFBEE4C102817D004EBC00191F840 -+:10E420004A1111F0010F1CBF0120BDE8F081617895 -+:10E4300008291FD2617804EBC000491C61700121DA -+:10E4400080F84A110846BDE8F0816178082911D2A8 -+:10E450002578681C207004EBC5083868C8F84401AA -+:10E46000B888A8F84801102D28BFFFDF88F843615D -+:10E470002846DFE70020BDE8F081D5480178491E35 -+:10E480004BB2002BB8BF704770B4002500EBC3013E -+:10E4900091F84A1111F0010F3BD04278D9B2521EC7 -+:10E4A000427000EBC10282F84A5190F802C000228B -+:10E4B000BCF1000F0BD9841894F803618E4202D18D -+:10E4C000102A26D103E0521CD2B29445F3D8027828 -+:10E4D000521ED2B202708A421BD000EBC20200EB85 -+:10E4E000C10CD2F84341CCF84341D2F84721CCF8D3 -+:10E4F0004721847890F800C00022002C09D98618A2 -+:10E5000096F8036166450AD1102A1CBF024482F8BE -+:10E510000311591E4BB2002BB8DA70BC7047521C65 -+:10E52000D2B29442EBD8F4E72DE9F0471F4690466B -+:10E530000E46814600F0ADFAA54C0546102830D0B5 -+:10E54000A2780021002A0ED9631893F80331834280 -+:10E5500005D110291CBF1220BDE8F08703E0491C3B -+:10E56000C9B28A42F0D8082A2FD2102D1CD0A67822 -+:10E570001022701CA07004EB061909F1030041463B -+:10E5800000F086FF09F183001022394600F080FF79 -+:10E59000A019002180F8035180F83B110846BDE81E -+:10E5A000F087A278082A10D22578681C207004EB26 -+:10E5B000C50A3068CAF84401B088AAF84801102D8D -+:10E5C00028BFFFDF8AF84391D1E70720BDE8F08735 -+:10E5D00070B47F488178491E4BB2002BBCBF70BC21 -+:10E5E000704700BF817803F0FF0C491ECAB28270E9 -+:10E5F00050FA83F191F8031194453ED000EB0215D7 -+:10E6000000EB0C14D5F80360C4F80360D5F807607C -+:10E61000C4F80760D5F80B60C4F80B60D5F80F603C -+:10E62000C4F80F60D5F88360C4F88360D5F88760BC -+:10E63000C4F88760D5F88B60C4F88B60D5F88F502C -+:10E64000C4F88F50851800EB0C0402EB420295F8D9 -+:10E6500003610CEB4C0C00EB420284F8036100EB0D -+:10E660004C0CD2F80B61CCF80B61B2F80F21ACF86E -+:10E670000F2195F83B2184F83B2100EBC10292F871 -+:10E680004A2112F0010F33D190F802C00022BCF1F0 -+:10E69000000F0BD9841894F803518D4202D1102A2F -+:10E6A00026D103E0521CD2B29445F3D80278521E10 -+:10E6B000D2B202708A421BD000EBC20200EBC10C46 -+:10E6C000D2F84341CCF84341D2F84721CCF8472156 -+:10E6D000847890F800C00022002C09D9851895F89C -+:10E6E000035165450BD1102A1CBF024482F8031167 -+:10E6F000591E4BB2002BBFF675AF70BC7047521C51 -+:10E70000D2B29442EAD8F3E73349487070473248AE -+:10E710004078704738B14AF2B811884203D82E4980 -+:10E72000488001207047002070472B484088704780 -+:10E7300010B500F0AEF9102814D0254A014600208B -+:10E7400092F802C0BCF1000F0CD9131893F80331F2 -+:10E750008B4203D1102818BF10BD03E0401CC0B28B -+:10E760008445F2D8082010BD19498A78824286BFB4 -+:10E7700001EB001083300020704715498A788242EF -+:10E7800086BF01EB0010C01C00207047104B93F8AF -+:10E7900002C084459CBF00207047184490F80301D4 -+:10E7A00003EBC00090F843310B70D0F844111160B6 -+:10E7B000B0F84801908001207047054A114491F853 -+:10E7C000032105490A7002684A6080880881704701 -+:10E7D000F0100020860100207C01002010B5F5F724 -+:10E7E00027FE002804BFFF2010BDBDE81040F5F74C -+:10E7F00045BEFE498A7882429CBF0020704708448B -+:10E8000090F8030101EBC00090F84A0100F001000C -+:10E8100070472DE9F047F54F0026B04638780028BC -+:10E8200086BF4FF0080ADFF8C893BDE8F08700BF45 -+:10E8300007EBC80505F5A27195F8430100F029F929 -+:10E84000102808BF544610D0B978002400290BD9ED -+:10E850003A1992F80321824202D1102C05D103E02B -+:10E86000621CD4B2A142F3D80824B878A04286BF73 -+:10E8700007EB0410C01C002095F84A1111F0010F9D -+:10E8800016D050B1082C04D2391991F83B11012946 -+:10E8900003D0102100F0D9FD50B109F806403046F0 -+:10E8A000731C95F8432105F5A271DEB2F5F7A8FFB8 -+:10E8B00008F1010000F0FF0838784045B8D8BDE8FD -+:10E8C000F0872DE9F041C94C00263546A078002894 -+:10E8D0008CBFC74FBDE8F0816119C0B291F80381C8 -+:10E8E000A84286BF04EB0510C01C002091F83B1124 -+:10E8F000012903D0102100F0A8FD58B104EBC80095 -+:10E90000BD5590F8432100F5A2713046731CDEB26C -+:10E91000F5F776FF681CC5B2A078A842DCD8BDE840 -+:10E92000F08110B5F5F79BFF002804BF082010BD4B -+:10E93000F5F799FFAE49085C10BDAE4910B54978AE -+:10E9400041B1AA4B997829B1C21CD81CF5F70DFD2D -+:10E95000012010BD002010BDA44A01EB410102EBD3 -+:10E9600041010268C1F80B218088A1F80F017047AE -+:10E970002DE9F0419D4D07460024A878002898BF56 -+:10E98000BDE8F081C0B2A04213D905EB041010F12C -+:10E9900083060ED01021304600F057FD48B904EB35 -+:10E9A000440005EB400000F20B113A463046F6F702 -+:10E9B0003AFE601CC4B2A878A042E3D8BDE8F0815A -+:10E9C000014610228C4800F063BD8B48704770B53B -+:10E9D000864D0446A878A04206D905EB0410102104 -+:10E9E000833000F032FD08B1002070BD04EB44001C -+:10E9F00005EB400000F20B1070BD7C498A78824222 -+:10EA000006D9084490F83B01002804BF0120704754 -+:10EA1000002070472DE9F0410E46074615460621B5 -+:10EA2000304600F012FD714C98B1A17871B104F537 -+:10EA30009D7011F0010F18BF00F8015FA17849081F -+:10EA400004D0457000F8025F491EFAD10120BDE8EC -+:10EA5000F0813846314600F01CF8102816D0A37813 -+:10EA60000021002B12D9621892F80321824209D1A9 -+:10EA7000102918BF082909D0601880F83B510120DF -+:10EA8000BDE8F081491CC9B28B42ECD80020BDE83A -+:10EA9000F0812DE9F041554D0646002428780F46B7 -+:10EAA000002811D905EBC40090F84311B14206D1FA -+:10EAB0000622394600F5A27002F0F2FF38B1601C60 -+:10EAC000C4B22878A042EDD81020BDE8F0812046DD -+:10EAD000BDE8F081454910B44A7801EBC003521EED -+:10EAE0004A70002283F84A2191F802C0BCF1000F5D -+:10EAF0000DD98B1893F80341844204D1102A1CBF0E -+:10EB000010BC704703E0521CD2B29445F1D80A7889 -+:10EB1000521ED2B20A70824204BF10BC704701EB91 -+:10EB2000C00301EBC202D2F843C1C3F843C1D2F81B -+:10EB30004721C3F847218C7891F800C00022002CAF -+:10EB40009CBF10BC70478B1893F80331634506D106 -+:10EB5000102A1CBF114481F8030110BC7047521CDD -+:10EB6000D2B29442EFD810BC704770B41F490D1850 -+:10EB70008A78521ED3B28B7095F80321984247D001 -+:10EB800001EB001401EB031C00EB4000DCF8036018 -+:10EB9000C4F80360DCF80760C4F80760DCF80B60B9 -+:10EBA000C4F80B60DCF80F60C4F80F60DCF8836019 -+:10EBB000C4F88360DCF88760C4F88760DCF88B6099 -+:10EBC000C4F88B60DCF88FC0C4F88FC001EB030C75 -+:10EBD00003EB43039CF8034101EB430385F8034136 -+:10EBE00001EB4000D3F80B4108E00000F0100020DA -+:10EBF000860100207C010020B3120020C0F80B41E8 -+:10EC0000B3F80F31A0F80F319CF83B0185F83B01B8 -+:10EC100001EBC20090F84A0110F0010F1CBF70BC5C -+:10EC2000704700208C78002C0DD90B1893F803C185 -+:10EC3000944504D110281CBF70BC704703E0401CF1 -+:10EC4000C0B28442F1D80878401EC0B20870904229 -+:10EC500004BF70BC704701EBC20301EBC000D0F8E9 -+:10EC600043C1C3F843C1D0F84701C3F847018C78CA -+:10EC70000B780020002C9CBF70BC704701EB000C8F -+:10EC80009CF803C19C4506D110281CBF084480F89D -+:10EC9000032170BC7047401CC0B28442EED870BCE7 -+:10ECA0007047000010B50A7B02F01F020A730022B1 -+:10ECB000C2758B181B7A03F0010C5B0803F001048A -+:10ECC000A4445B0803F00104A4445B0803F00104BE -+:10ECD000A4445B0803F0010464444FEA530C0CF0B5 -+:10ECE000010323444FEA5C0C0CF00104234403EBC2 -+:10ECF0005C0300EB020C521C8CF8123090F817C029 -+:10ED0000D2B26344C375052AD3D3D8B2252888BFAD -+:10ED1000FFDF10BD00238383028401EBC202521E79 -+:10ED2000B2FBF1F1C183704770B46FF01F02010CA8 -+:10ED300002EA90251F23A1F5AA4054381CBFA1F573 -+:10ED4000AA40B0F1550009D0A1F52850AA381EBF3D -+:10ED5000A1F52A40B0F1AA00012000D100204FF017 -+:10ED6000000C62464FEA0C048CEA0106F643164397 -+:10ED7000B6F1FF3F11D005F001064FEA5C0C4CEAFA -+:10ED8000C63C03F0010652086D085B08641C42EAA9 -+:10ED9000C632162CE8D370BC704770BC0020704798 -+:10EDA0002DE9F04701270025044603290FD04FF431 -+:10EDB000FA43002972D0012900F0F880022918BF17 -+:10EDC000BDE8F0870146BDE8F04758306AE704F136 -+:10EDD00058067021304602F028FFB571F571F572C2 -+:10EDE0003573B573F573757135767576F52086F8DC -+:10EDF0003C00412086F83D00FF2086F86B00A4F817 -+:10EE0000C850A4F8CA50A4F8CC50A4F8CE50A4F826 -+:10EE1000D050A4F8D25084F8D55084F8D750A4F834 -+:10EE2000DE5084F8DC50A4F8F050A4F8F25084F8D6 -+:10EE30002C50258484F8517084F852704FF4486047 -+:10EE400060801B21218761874FF4A470E087A08731 -+:10EE500021866186E086A086A4F84410A4F84600C6 -+:10EE6000A4F84010A4F84200A4F84810A4F84A10EE -+:10EE7000A4F84C10677384F8885184F8895184F899 -+:10EE8000925184F8935184F8615184F8665184F862 -+:10EE9000695184F87A51BDE8F087FFE7A4F8DE50A5 -+:10EEA00084F8D6506088FE490144B1FBF0F1A4F823 -+:10EEB00076104BF68031A4F87810E288A4F87C50E4 -+:10EEC000B4F880C0D2000CFB00FCB2FBF0F29CFB5B -+:10EED000F0FC521CA4F880C092B202FB00FC04F1CA -+:10EEE0005801A4F87E20BCF5C84FC4BF521ECA8486 -+:10EEF000B3FBF0F2521C8A8500F5802202F5EE3257 -+:10EF0000531EB3FBF0F2CA838B8B03FB00F2B2FB00 -+:10EF1000F0F08883214604F15800FFF7C3FED4F8CF -+:10EF20000E106FF01F02080C02EA9126A0F5AA410C -+:10EF30004FF01F0C54391CBFA0F5AA41B1F1550187 -+:10EF40000AD0A0F52851AA391EBFA0F52A41B1F177 -+:10EF5000AA014FF0010901D14FF00009002211462A -+:10EF60004FEA020382EA00086FEA080848EA01084B -+:10EF7000B8F1FF3F16D006F00108520842EAC83245 -+:10EF800049080CF0010876085B1C41EAC8314FEAD9 -+:10EF90005C0C162BE6D3B9F1000F1CBF84F860514E -+:10EFA000BDE8F08784F86071BDE8F087A4F8DE5012 -+:10EFB000B4F88221B4F88611B4F802C004F1580004 -+:10EFC000A4F87C50B4F88040C90004FB0CF4B1FBF9 -+:10EFD000F2F194FBF2F4491C048589B201FB02F4BE -+:10EFE000C184B4F5C84FC4BF491EC184B3FBF2F15C -+:10EFF000491C8185018C02EBC101491EB1FBF2F174 -+:10F00000C183818B01FB0CF1B1FBF2F18183BDE87F -+:10F01000F08770B50025044603290DD04FF4FA425D -+:10F02000002958D001297DD0022918BF70BD0146A2 -+:10F03000BDE87040583035E604F15806702130467E -+:10F0400002F0F3FDB571F571F5723573B573F573B3 -+:10F05000757135767576F52086F83C00412086F886 -+:10F060003D00FF2086F86B00A4F8D050202084F8E3 -+:10F07000D20084F8C850C4F8CC50012284F82C5037 -+:10F0800084F8512084F852201B20208760874FF499 -+:10F09000A471E187A18720866086E186A186A4F815 -+:10F0A0004400A4F84610A4F84000A4F84210A4F8C4 -+:10F0B0004800A4F84A00A4F84C00627384F8FC509D -+:10F0C00084F8FD5084F8065184F8075184F8EC5018 -+:10F0D00084F8F85070BD608871490144B1FBF0F1CB -+:10F0E000A4F876104BF68031A4F87810E388A4F8E1 -+:10F0F0007C50B4F880C0DB000CFB00FCB3FBF0F3E9 -+:10F100009CFBF0FC5B1CA4F880C09BB203FB00FCE2 -+:10F1100004F15801A4F87E30BCF5C84FC4BF5B1E93 -+:10F12000CB8400E017E0B2FBF0F2521C8A8500F5B8 -+:10F13000802202F5EE32531EB3FBF0F2CA838B8BB2 -+:10F1400003FB00F2B2FBF0F08883214604F1580083 -+:10F15000BDE87040A6E5D4F8F030B4F802C004F180 -+:10F1600058005989DB89A4F87C50B4F88040DB0052 -+:10F1700004FB0CF4B3FBF1F394FBF1F45B1C04858A -+:10F180009BB203FB01F4C384B4F5C84FC4BF5B1E3C -+:10F19000C384B2FBF1F2521C8285028C01EBC202E5 -+:10F1A000521EB2FBF1F2C283828B02FB0CF2B2FB65 -+:10F1B000F1F1818370BD2DE9F003C47D0CB1252CE4 -+:10F1C00003D9BDE8F00312207047002A02BF0020D7 -+:10F1D000BDE8F003704791F80DC01F260123314DA3 -+:10F1E0004FF00008BCF1000F7AD0BCF1010F1EBF38 -+:10F1F0001F20BDE8F0037047B0F800C00A7C8F7B89 -+:10F2000091F80F907A404F7C87EA090742EA07227B -+:10F2100082EA0C0C5FF000070CF0FF094FEA1C2C8F -+:10F2200099FAA9F99CFAACFC4FEA19694FEA1C6CEF -+:10F2300049EA0C2C0CEB0C1C7F1C9444FFB21FFA07 -+:10F240008CFC032FE8D38CEA020C164F0022ECFB57 -+:10F25000057212096FF0240502FB05C2D2B201EB60 -+:10F26000D207027602F007053F7A03FA05F52F422E -+:10F2700018BF42767ED104FB0CF2120C521CD2B2A3 -+:10F280005FF0000400EB040C9CF812C094453CBFF6 -+:10F29000A2EB0C02D2B218D34FF0000C0D1903E010 -+:10F2A000FFDB050053E4B36E95F8085003FA0CF742 -+:10F2B0003D421CBF521ED2B2002A6AD00CF1010C92 -+:10F2C0000CF0FF0CBCF1080FF0D304F1010C0CF0B2 -+:10F2D000FF04052CD6D33046BDE8F0037047FFE7A6 -+:10F2E00090F818C00C7E474604FB02C2FB4C4FF05E -+:10F2F000000CE2FB054C4FEA1C1C6FF024040CFBD5 -+:10F300000422D2B201EBD204027602F0070C247A76 -+:10F3100003FA0CFC14EA0C0F1FBF42764046BDE80E -+:10F32000F003704790F817C0B2FBFCF40CFB1422FA -+:10F33000521CD2B25FF0000400EB040C9CF812C027 -+:10F3400094453CBFA2EB0C02D2B212D30D194FF080 -+:10F35000000C2D7A03FA0CF815EA080F1CBF521E98 -+:10F36000D2B27AB10CF1010C0CF0FF0CBCF1080F19 -+:10F37000F0D300E010E004F1010C0CF0FF04052CC8 -+:10F38000DAD3A8E70CEBC40141763846BDE8F003B8 -+:10F3900070470CEBC40141764046BDE8F00370476E -+:10F3A000CF4A016812681140CE4A126811430160C9 -+:10F3B000704730B4CC49CA4B00244FF0010C0A7896 -+:10F3C000521CD2B20A70202A08BF0C700D781A683D -+:10F3D0000CFA05F52A42F2D0097802680CFA01F11C -+:10F3E0005140016030BC7047017931F01F0113BFFB -+:10F3F000002000221146704710B4435C491C03F002 -+:10F40000010C5B0803F00104A4445B0803F0010451 -+:10F41000A4445B0803F00104A4445B0803F0010466 -+:10F42000A4445B0803F001045B08A44403F0010456 -+:10F43000A4440CEB53031A44D2B20529DDDB012AA4 -+:10F440008CBF0120002010BC704730B40022A1F115 -+:10F45000010CBCF1000F11DD431E11F0010F08BFBC -+:10F4600013F8012F5C785FEA6C0C07D013F8025F89 -+:10F4700022435C782A43BCF1010CF7D1491E5CBFE2 -+:10F48000405C0243002A0CBF0120002030BC7047C2 -+:10F49000130008BF704710B401EB030CD41A1CF81A -+:10F4A00001CC5B1E00F804C013F0FF03F4D110BCC4 -+:10F4B0007047F0B58DB0164610251C466A46AC461E -+:10F4C00000EB0C03A5EB0C0713F8013CD355ACF192 -+:10F4D000010313F0FF0CF3D11546103210208446BF -+:10F4E0000B18ACEB000713F8013C401ED35510F08D -+:10F4F000FF00F5D1284601F033FA86B1102005F15E -+:10F50000200201461318A1EB000C13F8013C401E29 -+:10F5100004F80C3010F0FF00F4D10DB0F0BD0898E5 -+:10F520002060099860600A98A0600B98E0600DB0B8 -+:10F53000F0BD38B505460C466846F5F706FD0028CF -+:10F5400008BF38BD9DF90020227294F909100020EF -+:10F55000511A48BF494295F82D308B42C8BF38BD7B -+:10F56000FF2B08BF38BDA17A491CC9B2A17295F81A -+:10F570002E30994203D8617A7F2918BF38BD627254 -+:10F580000020A072012038BD0C2818BF0B2806D01F -+:10F590000D281CBF2038062884BF0020704701209A -+:10F5A00070470C295AD2DFE801F006090E13161B2A -+:10F5B000323C4153484E002A52D04FE0072A18BF30 -+:10F5C000082A4DD04AE00C2A18BF0B2A48D045E043 -+:10F5D0000D2A45D042E0A2F10F000D2840D93DE0B0 -+:10F5E00023B1A2F110000C283AD937E0122A18BF33 -+:10F5F000112A35D090F8340020B1122A2ED31B2ABC -+:10F600002ED92BE0162A29D31B2A29D926E0A2F1CC -+:10F610000F01032924D990F83400F8B11C2A1FD90E -+:10F620001CE0002B08BF042A18D119E013B1062AE8 -+:10F6300016D013E0012A11D112E01D2A1CBF1E2A88 -+:10F640001F2A0DD00AE0A2F12000062808D905E003 -+:10F6500013B10E2A04D001E0052A01D00020704722 -+:10F66000012070472DE9F04187680D460446204689 -+:10F67000F3F7CCFB98B1D5B13846A168F3F709FF91 -+:10F68000002814DD2844401EB0FBF5F606FB05F10A -+:10F690003846F2F7F8FEA0603046BDE8F081F3F797 -+:10F6A000E7F94FF4E661F2F7EEFEA060DFE7002035 -+:10F6B000BDE8F081904228BF704770B50446101B2A -+:10F6C000642838BF642025188D4205D8F3F715FF4C -+:10F6D00000281CBF284670BD204670BD53E4B36EA1 -+:10F6E00064230200682302008E01002091F851304B -+:10F6F0000A8E022B07BF92003C32D200703292B2C7 -+:10F700008B8E934238BF1A464B8E91F852C0BCF193 -+:10F71000020F07BF9B003C33DB0070339BB2C98EE6 -+:10F72000994238BF0B4600280CBF01210021D01898 -+:10F730009830002918BF04210844704730B48388EA -+:10F74000B0F808C003EB0C049834002A18BF042258 -+:10F7500022444C6A944224BF30BC7047121B521C96 -+:10F7600052089B1A9BB2ACEB0202838092B20281D8 -+:10F7700091F851506FF00E0C6FF00D04022D0CBF7C -+:10F780000CEB930304EBD303438091F8521002294E -+:10F790000CBF0CEB920104EBD201C18030BC70476E -+:10F7A00010F0010F1CBF0120704710F0020F1CBFAA -+:10F7B0000220704710F0040018BF082070472DE9A0 -+:10F7C000F0410546174688460126084600F001FC30 -+:10F7D0000446404600F001FC034610F0010F18BF3C -+:10F7E000012008D113F0020F18BF022003D113F03B -+:10F7F000040018BF082014F0010F18BF4FF0010CCF -+:10F8000021D000BF50EA0C0108BF002613F0030FFF -+:10F8100008BF002014F0030F08BF4FF0000C95F84C -+:10F820005110814208BF0020387095F85210614590 -+:10F8300008BF4FF0000C87F801C0002808BFBCF1DA -+:10F84000000F1CD10DE014F0020F18BF4FF0020C96 -+:10F85000D8D114F0040F14BF4FF0080C4FF0000C77 -+:10F86000D0E7404600F0BFFBB5F85810401A00B290 -+:10F8700047F6FE71884201DC002800DC0026304695 -+:10F88000BDE8F08101281CBF02280020704718B491 -+:10F89000CBB2C1F3072CC1B2C0F30720012B07D0B4 -+:10F8A000022B09D0042B08BFBCF1040F23D006E0C3 -+:10F8B000BCF1010F03D11EE0BCF1020F1BD00129E6 -+:10F8C00006D0022907D0042908BF042813D004E079 -+:10F8D000012802D10FE002280DD001EA0C0161F3EA -+:10F8E0000702184060F30F22D0B210F0020F18BFC9 -+:10F8F00002200BD106E0084003EA0C01084060F347 -+:10F900000702EFE710F0010018BF01208DF800009A -+:10F91000C2F3072010F0020F18BF022003D110F02D -+:10F92000010018BF01208DF80100BDF8000018BCCF -+:10F930007047162A10D12A220C2818BF0D280FD084 -+:10F940004FF0230C20280DD031B10878012818BFC2 -+:10F95000002805D0162805D00020704701207047E8 -+:10F960001A70FBE783F800C0F8E70000282102F0D6 -+:10F970003AB930B50546007801F00F0220F00F00CB -+:10F980001043287007290BD2DFE801F004060406B3 -+:10F9900004080400062405E00C2403E0222401E00E -+:10F9A0000024FFDF687820F03F002043687030BDFE -+:10F9B000007800F00F0070470A68C0F803208988BB -+:10F9C000A0F807107047D0F803200A60B0F80700CD -+:10F9D000888070470A68C0F809208988A0F80D104F -+:10F9E0007047D0F809200A60B0F80D008880704791 -+:10F9F0000278202322F0200203EA41111143017012 -+:10FA000070470278402322F0400203EA811111433B -+:10FA1000017070470078C0F380107047027880232F -+:10FA200022F0800203EAC11111430170704700788F -+:10FA3000C0097047D0F80320C1F80920B0F80720AA -+:10FA4000A1F80D200A7822F080020A70007880095F -+:10FA500042EAC0100870704770B515460E4604465D -+:10FA60001F2A88BFFFDF2A46314604F1090002F051 -+:10FA700043F86078A91D20F03F0001F03F010843E2 -+:10FA8000607070BD70B5054640780E4600F03F04CA -+:10FA9000062C38BFFFDFA01FC4B21F2C88BF1F2455 -+:10FAA000224605F10901304602F026F8204670BDD5 -+:10FAB00070B515460E4604461F2A88BFFFDF2A464A -+:10FAC000314604F1090002F017F86078A91D20F012 -+:10FAD0003F0001F03F010843607070BD70B50546FE -+:10FAE00040780E4600F03F04062C38BFFFDFA01F11 -+:10FAF000C4B21F2C88BFFFDF224605F10901304642 -+:10FB000001F0FAFF204670BD0968C0F80F10704779 -+:10FB10000A88A0F813208978417570474176090A50 -+:10FB200081767047C176090A017770474177090AE3 -+:10FB300081777047C175090A0176704781757047F2 -+:10FB400090F8242001F01F0122F01F02114380F8D9 -+:10FB500024107047072988BF072190F82420E0234C -+:10FB600022F0E00203EA4111114380F824107047AB -+:10FB70001F3002F066B94178007801F03F0110F0C3 -+:10FB80000F0006D0012808D0022809D006280BD083 -+:10FB90000FE0881F1F280AD90BE00C2909D106E0C5 -+:10FBA000881F1F2803D904E0881F1F2801D80120BF -+:10FBB0007047002070474178007801F03F0100F065 -+:10FBC0000F00042805D1062903D325299CBF012055 -+:10FBD00070470020704710B4017801F00F0103292D -+:10FBE00022D0052925D14478B0F81910B0F81BC0EF -+:10FBF000B0F81730827D04F03F04222C19D1062979 -+:10FC000017D3B1F5486F98BFBCF5FA7F11D282B116 -+:10FC1000082A98BF8A420CD28B429CBFB0F81D00C4 -+:10FC2000B0F5486F05D807E0407800F03F000C2899 -+:10FC300002D010BC0020704710BC01207047222168 -+:10FC400001F0D1BF00B5027801F0030322F00302F6 -+:10FC50001A43027000224270012914BF022900BD1C -+:10FC6000032912BFFFDF0121417000BD01F0030332 -+:10FC700000B5027822F003021A430270002242709B -+:10FC8000012914BF022900BD032912BFFFDF012192 -+:10FC9000417000BD007800F0030070470278102327 -+:10FCA00022F0100203EA01111143017070474178FC -+:10FCB000F9B1C078192850D2DFE800F00D10131602 -+:10FCC000191C1F2225282B2E31344F4F4F4C373A09 -+:10FCD0003D40434649000C2941D042E008293ED02E -+:10FCE0003FE002293BD03CE0172938D039E00D290C -+:10FCF00035D036E0012932D033E001292FD030E071 -+:10FD000002292CD02DE0092929D02AE0092926D062 -+:10FD100027E0012923D024E0012920D021E0062971 -+:10FD20001DD01EE002291AD01BE0012917D018E0CF -+:10FD3000012914D015E0092911D012E009290ED0AB -+:10FD40000FE003290BD00CE0032908D009E00529B6 -+:10FD500005D006E0032902D003E0FB2901D80120E9 -+:10FD600070470020704730B50546C170192924D26C -+:10FD7000DFE801F00D0F11131517171119191717D7 -+:10FD80001B111921211D171719191D1D1F000C24E6 -+:10FD900015E0082413E0022411E017240FE00D24DD -+:10FDA0000DE001240BE0092409E0062407E0032408 -+:10FDB00005E0052403E0182401E00024FFDF6C7057 -+:10FDC00030BDC0787047C171090A01727047B0F840 -+:10FDD000070070474172090A81727047B0F8090044 -+:10FDE0007047C172090A01737047B0F80B00704781 -+:10FDF0004171090A81717047B0F8050070470171BF -+:10FE00007047007970474173090A81737047B0F8F1 -+:10FE10000D00704730B4B0F80720894DB0F809C024 -+:10FE2000B0F805300179941F2D1998BFBCF5FA7F01 -+:10FE30000ED269B1082998BF914209D293429FBF5F -+:10FE4000B0F80B00B0F5486F012030BC98BF704788 -+:10FE5000002030BC7047001D01F0F3BF021D0846B2 -+:10FE6000114601F0EEBF4172090A81727047B0F885 -+:10FE70000900704701717047007970470A68426055 -+:10FE800049688160704742680A60806848607047CE -+:10FE90000988818170478089088070470A68C0F8A6 -+:10FEA0000E204968C0F812107047D0F80E200A6082 -+:10FEB000D0F81200486070470968C0F81610704703 -+:10FEC000D0F81600086070470A684260496881608F -+:10FED000704742680A608068486070470968C1607E -+:10FEE0007047C06808607047017170474171090A26 -+:10FEF00081717047C171090A0172704700797047BA -+:10FF0000B0F805007047B0F80700704701717047FE -+:10FF10000079704701717047007970470A68426044 -+:10FF200049688160704742680A608068486070472D -+:10FF30000171090A417170478171090AC1717047E5 -+:10FF40000172090A417270478172090AC1727047D1 -+:10FF500080887047C0887047008970474089704723 -+:10FF600001891B2924BF4189B1F5A47F07D381886A -+:10FF70001B2921BFC088B0F5A47F01207047002055 -+:10FF800070470A68426049688160704742680A6049 -+:10FF9000806848607047017170470079704741710F -+:10FFA000704740797047017911F0070F1BBF407906 -+:10FFB00010F0070F002001207047017911F0070FA2 -+:10FFC0001BBF407910F0070F00200120704701711E -+:10FFD000704700797047417170474079704781716F -+:10FFE000090AC1717047C088704716A282B0D2E971 -+:10FFF0000012CDE900120179407901F0070269464B -+:020000040002F8 -+:100000001DF80220012A07D800F00700085C01282B -+:100010009EBF012002B07047002002B070470171FE -+:10002000704700797047417170474079704730B52B -+:100030000C460546FB2988BFFFDF6C7030BD000011 -+:1000400086F3FFFF000101020102020370B50446BE -+:10005000C2F11005281901F04FFD15F0FF0108D07D -+:10006000491EC9B2802060542046BDE8704001F0AE -+:10007000BABD70BD30B505E05B1EDBB2CC5CD55CB3 -+:100080006C40C454002BF7D130BD10B5002409E0FA -+:100090000B78521E44EA430300F8013B11F8013B80 -+:1000A000D2B2DC09002AF3D110BD2DE9F0410C4693 -+:1000B00001200978FF4E92B0154602274FF006083E -+:1000C0004FF0040C71B101291ED0022945D003293B -+:1000D00005D12978042902D105201070002012B022 -+:1000E000BDE8F081606850B1CDE9010601202070C3 -+:1000F0008DF80080606A05901146684663E02770BD -+:1001000085F800C0566026E029780429E7D169689F -+:1001100010222069FFF7B9FF6868C07B000606D58A -+:10012000E44A2069102310320146FFF7A3FFD4E907 -+:1001300004101022FFF7A9FF2069C07B000606D536 -+:10014000DC4A6069102310320146FFF793FF2770E5 -+:1001500085F800C06E600320C1E729780429BED16C -+:10016000A08910280CD9A0F1100080B2A081A1684C -+:100170004FF01003014468466A68FFF77BFF18E000 -+:1001800004D14FF010032269A16807E0C2B20EA8A3 -+:10019000A168FFF75BFF626910230EA90AA8FFF7A9 -+:1001A00069FF10230AA968466A68FFF763FF032006 -+:1001B000207060680590CDF818D08DF81080606AC6 -+:1001C0000990294604A8F1F759FF88E72DE9F04185 -+:1001D00007460D4601200B7806213BB1012B04D1C7 -+:1001E0001378052B01D11170002079E76C69012685 -+:1001F00020226170E8686060686A6062A168287C9B -+:100200000870A681A068A968401C01F075FCA0894F -+:1002100020222030A081A0686968213001F06CFCA8 -+:10022000A08921462030A0812E703846BDE8F041DB -+:10023000F1F73BBF2DE9F05F0D46834601200978B9 -+:10024000174606464FF00608D1B1DFF868A24FF016 -+:100250000009AAF1080A012923D002297ED0032926 -+:100260000CD13978052909D179681022E86901F0A3 -+:1002700043FC07203870183500207D60BDE8F09FF2 -+:100280002C6A8C48202284F8018020306060202075 -+:10029000A081686A60626968A06801F02DFC2E7018 -+:1002A000D4E039780529E9D12C6A84F80180686A9C -+:1002B000606251681022E86901F01EFCE869606024 -+:1002C000A0684F4680F80090A681A0684670A0897B -+:1002D000401C80B2A081A1680844696951F8012FCF -+:1002E000026089888180A089801D80B2A0816969AF -+:1002F000A2680978C1F340011154A089401C80B262 -+:10030000A081A1680844296951F8012F02608988F9 -+:100310008180A089801D80B2A0812969A2680978A6 -+:10032000C1F340011154A0891022401C80B2A08169 -+:10033000A1680844E96801F0DFFBA08910221030B1 -+:1003400080B2A081A1680844A96801F0D5FBA0890A -+:10035000103080B2A081A168014400E00DE0DAF81D -+:1003600004000860A089001D80B2A081A1680F541C -+:10037000A089401CA081022067E03978052992D12C -+:1003800051681022A86901F0B7FB2C6A84F801803B -+:10039000E8696060686A6062A16881F80090A6817F -+:1003A000A0684670A089401C80B2A081A168084462 -+:1003B000696951F8012F026089888180A089801DB8 -+:1003C00080B2A0816969A2680978C1F34001115423 -+:1003D000A089401C80B2A081A1680844296951F815 -+:1003E000012F026089888180A089801D80B2A08150 -+:1003F0002969A2680978C1F340011154A08910222B -+:10040000401C80B2A081A1680844E96801F074FB37 -+:10041000A0891022103080B2A081A1680844A96888 -+:1004200001F06AFBA089103080B2A081A16801446C -+:10043000DAF804000860A089001D80B2A081A168DC -+:100440000E54A089401CA0810320287021465846E4 -+:10045000BDE8F05FF1F729BE70B50D460646097894 -+:10046000012041B1012905D11178052902D10820C7 -+:100470001070002070BD2C6A062060706968616091 -+:10048000696A6162EA69A16852F8013F0B6092886B -+:100490008A80A081E869A1680078C0F34000887173 -+:1004A000A089401C80B2A081A1680844A96951F8C4 -+:1004B000012F01E074230200026089888180A089F5 -+:1004C000801D80B2A081A969A2680978C1F34001AA -+:1004D0001154A089401C80B2A081A16808446969B8 -+:1004E0000A88028089788170A0891022C01C80B29D -+:1004F000A081A1680844296901F0FEFAA0891022B0 -+:10050000103080B2A081A1680844E96801F0F4FAD3 -+:10051000A0891022103080B2A081A1680844A96887 -+:1005200001F0EAFAA08921461030A081012028704C -+:100530003046BDE87040F1F7B8BD70B50D460646CF -+:100540000978012059B1012908D11178052905D16F -+:1005500009201070506800685060002070BD6C6900 -+:10056000062010226070E8686060686A606229692D -+:10057000A06801F0C1FA1020A081A06820221030EC -+:10058000A96801F0B9FAA0892022203080B2A081A8 -+:10059000A1680844696801F0AFFAA08921462030BB -+:1005A000A081012028703046BDE87040F1F77DBD84 -+:1005B00070B50C46012009788EB01546062659B153 -+:1005C000012934D0022905D12978042902D10A2031 -+:1005D000107000200EB070BD606910236A4600786C -+:1005E000C0F340008DF80000A0690078C0F340001F -+:1005F0008DF80100E0680168CDF802108188ADF83F -+:10060000061080798DF8080020690168CDF809107E -+:100610008188ADF80D1080798DF80F006068059025 -+:100620000AA80690A168FFF725FD01201DE02978A2 -+:100630000429CFD1A06910236A4650F8011F009108 -+:100640008088ADF80400606950F8011FCDF80610ED -+:100650008088ADF80A0000200390606805900AA821 -+:1006600006906968FFF706FD022020708DF8106083 -+:10067000606A0990294604A8F1F700FDAAE700B5D1 -+:100680000B788BB001204BB1012B05D111780429D7 -+:1006900002D10B20107000200BB000BD4868019003 -+:1006A00006A80290C86803680693406807908868A7 -+:1006B00003680893406809900120087006208DF8AF -+:1006C0000000486A059011466846F1F7D7FCE3E759 -+:1006D00000B50B788BB0012043B1012BDCD1117830 -+:1006E0000429D9D10C2010700020D5E7486801906A -+:1006F00006A8029088680368069340680790002067 -+:10070000089009900120087006208DF80000486AC2 -+:10071000059011466846F1F7B1FCBDE700B50B78CE -+:100720008BB0012043B1012BB6D111780429B3D18C -+:100730000D2010700020AFE748680590CDF818D064 -+:1007400088680088ADF80000C8680088ADF802002D -+:1007500000200190029003900120087006208DF87F -+:100760001000486A0990114604A8F1F787FC93E746 -+:1007700030B403460C7801205CB1012C15D0022C5A -+:1007800005D111780C2902D10E201070002030BC48 -+:10079000704701200870C868042242704A684260AD -+:1007A0000B4A8260921EC2600BE014780D2CEED1D1 -+:1007B00002200870C86803244470526842608A6846 -+:1007C0008260496A4162014630BC1846F1F76DBC4F -+:1007D0006E2302002DE9F0410C4611490D68104AC4 -+:1007E000104908321160A0F120012A2901D301200B -+:1007F0000CE03E2810D040CC0B4F94E80E0007EBE5 -+:100800008000241F50F8807C3046B84720600448A0 -+:10081000001D0560BDE8F0812046E0F7E1FCF5E74A -+:100820001005024001000001A423020010B5524847 -+:1008300000F070FA00B1FFDF4F48401C00F06AFA88 -+:10084000002800D0FFDF10BD2DE9F14F4B4ED6F848 -+:1008500000B00127484800F065FADFF81C8128B98C -+:100860005FF0000708F1010000F072FA444C002527 -+:100870004FF0030901206060C4F80051C4F804512E -+:10088000009931602060DFF8FCA018E0DAF8000081 -+:10089000C00614D50E2000F064F8EFF3108010F0BD -+:1008A000010072B600D00120C4F80493D4F80011FE -+:1008B00019B9D4F8041101B920BF00B962B6D4F84F -+:1008C000000118B9D4F804010028DFD0D4F80401DD -+:1008D0000028CFD137B1C6F800B008F1010000F010 -+:1008E00021FA11E008F1010000F01CFA0028B9D14A -+:1008F000C4F80893C4F80451C4F800510E2000F065 -+:1009000030F81D4800F024FA0020BDE8F88F2DE9EA -+:10091000F0438DB00D46064600240DF110090DF18F -+:10092000200817E004EB4407102255F8271068460A -+:1009300001F0E2F805EB870710224846796801F0DC -+:10094000DBF86846FFF780FF10224146B86801F0E7 -+:10095000D3F8641CB442E5DB0DB00020BDE8F083A1 -+:1009600072E700F01F02012191404009800000F170 -+:10097000E020C0F8801270478F01002004E500409D -+:1009800000E0004010ED00E0D848002101708170C7 -+:10099000704770B5D64D01232B60D64B1C68002CD8 -+:1009A000FCD0002407E00E6806601E68002EFCD014 -+:1009B000001D091D641C9442F5D3002028601868AE -+:1009C0000028FCD070BD70B5C84E0446CA4D3078C2 -+:1009D000022800D0FFDFAC4200D3FFDF7169C748B7 -+:1009E000012903D847F23052944201DD03224271BB -+:1009F000491C7161291BC160C0497078F2F782FA05 -+:100A0000002800D1FFDF70BD70B5B84C0D4661788D -+:100A1000884200D0FFDFB84E082D4ED2DFE805F047 -+:100A20004D0421304D4D4D3B2078022800D0FFDF92 -+:100A300003202070A078022802D0012804D008E00A -+:100A4000A06800F051FD04E004F1080007C8FFF7BA -+:100A5000A0FF052020700020A070BDE87040F1F7D5 -+:100A600012BFF2F705F801466068F2F712FDB042D6 -+:100A700002D2616902290BD30320F2F7E4FF12E0EE -+:100A8000F1F7F6FF01466068F2F703FDB042F3D2DA -+:100A9000BDE8704097E7207802280AD0052806D0E4 -+:100AA000FFDF04202070BDE8704000F014B9022080 -+:100AB00000E00320F2F7C7FFF3E7FFDF70BD70B57A -+:100AC0000546F1F7D5FF894C60602078012800D0F9 -+:100AD000FFDF8A4901200870002008718D60042022 -+:100AE00048718548C860022020706078F2F70AFAE1 -+:100AF000002800D1FFDF70BD10B57C4CA07808B98C -+:100B0000207808B1112010BD7D48F1F737FF6070E3 -+:100B10006078202804D0012020700020606110BD82 -+:100B2000032010BD0246010B0120B2F5003F02D2A6 -+:100B3000884000F071BFB2F5802F03D22039884081 -+:100B400000F072BFB2F5C02F03D24039884000F0E8 -+:100B500074BFB2F5002F03D26039884000F076BF31 -+:100B6000002070472DE9F041144600EB84070E4643 -+:100B700005463F1F00F0CBFC4FF080510A695043FF -+:100B800006EB8402121FB24201D2012200E00022D1 -+:100B90001CB10969B4EB910F02D90920BDE8F081BD -+:100BA00058498D4216D3AF4214D3854205D28742AD -+:100BB00003D245EA0600800701D01020EEE78E42FE -+:100BC00008D33AB92846FFF7ADFF18B93846FFF702 -+:100BD000A9FF08B10F20E1E74B484C490068884263 -+:100BE00005D0224631462846FFF7D3FE10E0FFF736 -+:100BF00083FF0028D2D13D4801218560C0E903640C -+:100C000081704FF4A97104FB01F01830FFF757FF12 -+:100C10000020C3E770B54FF0805504462869394974 -+:100C2000B1FBF0F084420AD300F071FCA04201D87D -+:100C3000102070BD28696043FFF774FF08B10F20D2 -+:100C400070BD314831490068884204D0286960434A -+:100C500000F04AFC0CE0FFF74FFF0028F0D12969B3 -+:100C6000224861438160022181702948FFF727FFF4 -+:100C7000002070BD2349090BB1EB401F07D940424A -+:100C800001EB4011202903D34FF0FF3070470021C2 -+:100C900001208840401E704770B505460C46002074 -+:100CA000FFF7E8FF28420ED10120FFF7E3FF2042C3 -+:100CB00009D10220FFF7DEFF104204D10320FFF725 -+:100CC000D9FF184201D00F2070BD21462846BDE84B -+:100CD000704000F0C4BE10B5044C6078F1F7A9FE76 -+:100CE00000B9FFDF00202070A07010BD940100202B -+:100CF00004E5014000E40140105C0C00C412002037 -+:100D0000090A020000300200B0000020BEBAFECA8C -+:100D10007C5E0100002101700846704701460020FA -+:100D200008707047EFF3108101F0010172B602788C -+:100D3000012A01D0012200E000220123037001B941 -+:100D400062B60AB1002070474FF400507047E9E7DF -+:100D5000EFF3108111F0010F72B64FF00002027034 -+:100D600000D162B600207047F2E700004C490968E4 -+:100D70000160002070474A49086000207047012147 -+:100D80008A0720B1012804D042F20400704791671D -+:100D900000E0D1670020704742490120086042F21C -+:100DA0000600704708B504233E4A1907103230B1D7 -+:100DB000C1F80433106840F0010010600BE01068C7 -+:100DC00020F001001060C1F808330020C1F80801CC -+:100DD000354800680090002008BD011F0B2909D884 -+:100DE000304910310A6822F01E0242EA40000860D1 -+:100DF0000020704742F205007047000100F180407A -+:100E0000C0F8041900207047000100F18040C0F8CC -+:100E1000081900207047000100F18040D0F8000957 -+:100E2000086000207047012801D9072070471F4A39 -+:100E300052F8200002680A4302600020704701282F -+:100E400001D907207047194A52F8200002688A43E6 -+:100E5000026000207047012801D907207047134A1B -+:100E600052F8200000680860002070470200104916 -+:100E70004FF0000003D0012A01D0072070470A601C -+:100E800070474FF080410020C1F808014FF0E0208A -+:100E9000802180F800140121C0F800117047000083 -+:100EA0000004004000050040080100404C240200FE -+:100EB000780500406249634B0A6863499A420968B1 -+:100EC00001D1C1F310010160002070475C495D4B06 -+:100ED0000A685D49091D9A4201D1C0F310000860FB -+:100EE000002070475649574B0A68574908319A42C3 -+:100EF00001D1C0F3100008600020704730B5504B9E -+:100F0000504D1C6842F20803AC4202D0142802D2B1 -+:100F100003E0112801D3184630BDC3004B481844E4 -+:100F2000C0F81015C0F81425002030BD4449454BC9 -+:100F30000A6842F209019A4202D0062802D203E06E -+:100F4000042801D308467047404A012142F8301076 -+:100F5000002070473A493B4B0A6842F209019A4225 -+:100F600002D0062802D203E0042801D308467047C5 -+:100F7000364A012102EBC00041600020704770B585 -+:100F80002F4A304E314C156842F2090304EB8002BF -+:100F9000B54204D0062804D2C2F8001807E004289D -+:100FA00001D3184670BDC1F31000C2F8000800203C -+:100FB00070BD70B5224A234E244C156842F20903D5 -+:100FC00004EB8002B54204D0062804D2D2F800080F -+:100FD00007E0042801D3184670BDD2F80008C0F31A -+:100FE00010000860002070BD174910B5083118487E -+:100FF00008601120154A002102EBC003C3F8101548 -+:10100000C3F81415401C1428F6D3002006E0042869 -+:1010100004D302EB8003C3F8001807E002EB80035F -+:10102000D3F80048C4F31004C3F80048401C062855 -+:10103000EDD310BD04490648083108607047000030 -+:10104000B0000020BEBAFECA00F5014000F0014029 -+:101050000000FEFF7D4B1B6803B19847BFF34F8F25 -+:101060007B4801687B4A01F4E06111430160BFF3F2 -+:101070004F8FFEE710B5EFF3108010F0010F72B63E -+:1010800001D0012400E0002400F0D6F850B1E0F7D0 -+:1010900041F9F1F7BCFAF2F777FCE1F7C0FE6E49CF -+:1010A0000020086004B962B6002010BD70B50C467F -+:1010B0000646EFF3108010F0010F72B601D0012543 -+:1010C00000E0002500F0B8F818B105B962B60820B4 -+:1010D00070BDE0F79BF8E0F71FF9024600204309D6 -+:1010E0009B0003F1E02300F01F01D3F80031CB4057 -+:1010F000D9071BD0202803D222FA00F1C90722D138 -+:1011000041B2002906DA01F00F0101F1E02191F866 -+:10111000141D03E001F1E02191F8001449090829A8 -+:1011200011D281B101290ED004290CD0401C6428B1 -+:10113000D5D3E1F74BFE4849484808602046F3F70D -+:101140008FF860B904E005B962B641F2010070BDE4 -+:101150003E4804602EB13046F3F7CFF818B11024A2 -+:1011600029E03F4E16E03078022802D94FF480542F -+:1011700021E007240028707801D0E0B908E0D0B160 -+:10118000202818D8B078212815D8012813D001E0DC -+:10119000B07880B93349802081F8140DE0F7BCF8AD -+:1011A0003146F2F7D7FBF1F7F1F900F0E3F93046F9 -+:1011B000E0F782F8044605B962B61CB1FFF75AFFA2 -+:1011C000204670BD002070BD10B5044600F034F814 -+:1011D00000B101202070002010BD234908600020CC -+:1011E000704770B50C4621490D682049204E0831E2 -+:1011F0000E60102807D011280CD012280FD0132809 -+:1012000011D0012013E0D4E90001FFF74FFF35466C -+:1012100020600DE0FFF72EFF0025206008E0206829 -+:10122000FFF7D2FF03E0104920680860002020602B -+:101230000E48001D056070BD0748084900688842D7 -+:1012400001D101207047002070470000AC01002050 -+:101250000CED00E00400FA05B0000020BEBAFECAA2 -+:10126000542402000BE000E00400002010050240BE -+:101270000100000100B5764910F1080F08BFF82001 -+:1012800024D014DC10F1280F08BFD8201ED010F194 -+:10129000140F08BFEC2019D010F1100F08BFF02078 -+:1012A00014D010F10C0F08BFF4200FD00CE010F197 -+:1012B000040F08BFFC2009D0002818BF032805D060 -+:1012C000042804BF086000BDFFDF00BD086000BD4A -+:1012D00000B56049012808BF032004D0022816BFCA -+:1012E000FFDF042000BD086000BD5A48016801F01E -+:1012F0000F01032904BF01207047006800F00F00B0 -+:10130000042804BF0220704700B5FFDF012000BDA4 -+:101310005149002808BF086805D0012806BF0868A1 -+:1013200040F0010070470860704770B5054601291C -+:1013300014D0022A07BF49484FF47A7148484FF445 -+:10134000C86144181846F4F759F820444FF47A71EC -+:1013500000F27120B0FBF1F0281A70BD022A14BF10 -+:101360004FF4C8604FF47A7049F608514418E9E721 -+:1013700070B514460546012908BF49F6CA6605D06E -+:10138000022B0CBF3748364800F1FA061046F4F736 -+:1013900044F8012C0CBF4FF47A714FF4FA71711AB2 -+:1013A00008444FF47A7100F28920B0FBF1F0281A5A -+:1013B000801E70BD70B51546064601291AD0022B55 -+:1013C00007BF26484FF47A7125484FF4C861441886 -+:1013D0001046F4F722F8012D0CBF4FF47A714FF448 -+:1013E000FA71611A08444FF47A716438B0FBF1F075 -+:1013F000301A70BD022B14BF4FF4C8604FF47A70DE -+:1014000049F608514418E3E770B505460C46164600 -+:101410001046F3F7F3FF05EB4501C1EBC51100EBF7 -+:10142000C100012C0CBF4FF47A714FF4FA714518CA -+:101430002046F3F7F2FF281A4FF47A7100F60F6096 -+:10144000B0FBF1F43046F3F7CDFF2044401D70BDF2 -+:101450000C15004010150040501600406836020080 -+:10146000A2240200043602002DE9F04184B088462F -+:101470000746FEF70FFC05467E786A4601A94046FE -+:10148000EFF748F804000ED0012D1EBF032004B072 -+:10149000BDE8F08102AA40460199EEF73AFF0298B2 -+:1014A000B0F803000AE0022D18D1042E16D3B7F8C5 -+:1014B0000300BDF80020011D8A4206D3001D80B242 -+:1014C000A119814238BF012004D104B04FF00000BF -+:1014D000BDE8F0813CBF04B0BDE8F0814FF00200F0 -+:1014E00004B0BDE8F08100000B4A022111600B49F5 -+:1014F0000B68002BFCD0084B1B1D186008680028E7 -+:10150000FCD00020106008680028FCD070474FF025 -+:10151000805040697047000004E5014000E401404C -+:1015200002000B464FF00000014620D0012A04D0F3 -+:10153000022A04D0032A0DD103E0012002E0022098 -+:1015400015E00320072B05D2DFE803F00406080AA4 -+:101550000C0E100007207047012108E0022106E070 -+:10156000032104E0042102E0052100E00621F1F757 -+:1015700022BA0000FC4805218170002101704170F1 -+:10158000C17081607047F9490A78012A06D0CA689B -+:101590001044C860C8684038F1F748BF8A681044F2 -+:1015A00088608868F7E710B5EF4CE078F1F741FA0A -+:1015B00000B9FFDF0820F2F746FA0520A0700020EE -+:1015C0002070607010BD002819D00378E849E94AFE -+:1015D00013B1012B0ED011E00379012B00D06BB9B0 -+:1015E00043790BB1012B09D18368643B8B4205D24F -+:1015F000C0680EE00379012B02D00BB100207047C8 -+:1016000043790BB1012BF9D1C368643B8B42F5D20E -+:1016100080689042F2D8012070472DE9F0410446DD -+:101620000227F1F72FFE006800B1FFDFCE4D012643 -+:101630003CB12078B0B1012805D0022810D0032891 -+:1016400013D02E710CE06068C82807D3F1F755FF5E -+:1016500020B16068FFF797FF012703E0002701E052 -+:1016600000F0CCF93846BDE8F08128780028F7D1A1 -+:101670006068FFF7A8FF0028E3D06068DFF8EC821D -+:10168000007828B3A878042800D0FFDF0020464661 -+:1016900088F8000060680079C8B300203071606885 -+:1016A0004079A8B30420707160688168E868F0F739 -+:1016B000EAFEB0606068C0685230F0600320A87035 -+:1016C000AA49E878F1F71EFC0028C9D1FFDFC7E777 -+:1016D000404688F8006061680979D1B10021017144 -+:1016E00061684979B9B104214171616889685231F1 -+:1016F00081606168C968C160C0689B4C14346060D7 -+:10170000F1F7B6F920606E700220A870A8E704E037 -+:1017100005E00321E3E70321E6E70120BEE703201C -+:10172000C1E72DE9F047904C8846E178884200D027 -+:10173000FFDFDFF83492002501278C4E09F11409F0 -+:10174000B8F1080F79D2DFE808F0040D2A557E843D -+:101750009199A078032803D0A078022800D0FFDF59 -+:10176000BDE8F087A078032803D0A078022800D035 -+:10177000FFDF0420A0702571207800287AD1FFF7C0 -+:1017800002FF3078012806D0B068E06000F07BF9F5 -+:101790002061002062E0E078F1F7B0FAF5E7A07888 -+:1017A000032803D0A078022800D0FFDF207800288B -+:1017B0006FD1A078032816D0F1F75AF901464F46A9 -+:1017C000D9F80000F1F765FE00280EDB7968814248 -+:1017D0000BDB081AF0606549E078F1F793FB00280D -+:1017E000BED1FFDFBCE7042029E00420F2F72BF98B -+:1017F000A570B5E7A078032803D0A078022800D010 -+:10180000FFDF207888BBA078032817D0F1F730F9E4 -+:1018100001464F46D9F80000F1F73BFE0028E4DB13 -+:1018200079688142E1DB081AF0605049E078F1F70D -+:1018300069FB002894D1FFDF92E740E00520F2F732 -+:1018400002F9A7708CE7A078042800D0FFDF0220FF -+:1018500004E0A078042800D0FFDF0120A1688847B9 -+:10186000FFF7DBFE054630E004E012E0A078042834 -+:1018700000D0FFDFBDE8F04700F0C0B8A078042832 -+:1018800005D0607810B1A078022800D0FFDF207862 -+:1018900010B1BDE8F04786E6207920B10620F2F7C6 -+:1018A000D2F82571CDE7607838B13049E078F1F7AA -+:1018B00029FB00B9FFDF657052E70720BFE7FFDFB4 -+:1018C0004EE73DB1012D03D0FFDF022DF9D147E7EF -+:1018D0000420C3E70320C1E770B5050005D0224C02 -+:1018E000A078052803D0112070BD102070BD2248BB -+:1018F000F1F744F8E070E078202803D0A5600020DC -+:10190000A07070BD032070BD174810B5017809B1F3 -+:10191000112010BD817805290CD0817801290BD0C8 -+:10192000817849B1012101708178012904D0807842 -+:1019300010B103E00F2010BDFFF735FE002010BDF1 -+:1019400070B5094E0446B07808B101280AD1ACB18F -+:101950002046FFF738FE98B12078044D90B1B0785A -+:1019600001282AD00F2070BDB0010020D412002021 -+:101970003D860100FF1FA107231702001020F2E798 -+:101980000720F0E701202870207990B1002028710D -+:10199000607980B104206871A0685230A860E06866 -+:1019A000E860E8681A4C6060F1F762F82060022095 -+:1019B00016E00320EBE70320EDE7002028702079F4 -+:1019C000A8B100202871607998B104206871A168DD -+:1019D000F068F0F758FDA860E0685230E860032036 -+:1019E000B0700C49F078F1F78DFA28B903E00320C4 -+:1019F000E8E70320EAE7FFDF0020B4E7044810B57A -+:101A00001438006900F037F8BDE81040F0F73BBF2C -+:101A1000C4010020D41200201F490968014201D0EE -+:101A200001207047002070471B49091D09680142C9 -+:101A300001D0012070470020704717491031096814 -+:101A4000014201D001207047002070471249143133 -+:101A50000968014201D0012070470020704710B58D -+:101A60000D4C2060201D01600B4810300260001DED -+:101A70000360002010BD09490A6848F202139A4326 -+:101A800002430A607047054A116848F2021301EAEE -+:101A9000030099431160704700060040C8060240E9 -+:101AA00040EA010310B59B070FD1042A0DD310C8DB -+:101AB00008C9121F9C42F8D020BA19BA884201D92D -+:101AC000012010BD4FF0FF3010BD1AB1D30703D075 -+:101AD000521C07E0002010BD10F8013B11F8014B2B -+:101AE0001B1B07D110F8013B11F8014B1B1B01D147 -+:101AF000921EF1D1184610BD032A40F2308010F03A -+:101B0000030C00F0158011F8013BBCF1020F624498 -+:101B100098BF11F801CB00F8013B38BF11F8013B29 -+:101B2000A2F1040298BF00F801CB38BF00F8013BD6 -+:101B300011F0030300F02580083AC0F0088051F846 -+:101B4000043B083A51F804CBA0E80810F5E7121D51 -+:101B50005CBF51F8043B40F8043BAFF30080D20770 -+:101B600024BF11F8013B11F801CB48BF11F8012B3C -+:101B700024BF00F8013B00F801CB48BF00F8012B5F -+:101B8000704710B5203AC0F00B80B1E81850203AE9 -+:101B9000A0E81850B1E81850A0E81850BFF4F5AF0D -+:101BA0005FEA027C24BFB1E81850A0E8185044BF97 -+:101BB00018C918C0BDE810405FEA827C24BF51F804 -+:101BC000043B40F8043B08BF7047D20728BF31F8F8 -+:101BD000023B48BF11F8012B28BF20F8023B48BF49 -+:101BE00000F8012B70474FF000020429C0F012806A -+:101BF00010F0030C00F01B80CCF1040CBCF1020FC0 -+:101C000018BF00F8012BA8BF20F8022BA1EB0C0194 -+:101C100000F00DB85FEAC17C24BF00F8012B00F88A -+:101C2000012B48BF00F8012B70474FF0000200B5B0 -+:101C3000134694469646203922BFA0E80C50A0E8EF -+:101C40000C50B1F12001BFF4F7AF090728BFA0E89D -+:101C50000C5048BF0CC05DF804EB890028BF40F869 -+:101C6000042B08BF704748BF20F8022B11F0804FAB -+:101C700018BF00F8012B704770477047704700008D -+:101C8000FEDF04207146084219D10699124A91429A -+:101C900015DC069902394878DF2810D10878FE282B -+:101CA00007D0FF280BD14FF001004FF000020B4B83 -+:101CB000184741F201000099019A084B1847084B58 -+:101CC000002B02D01B68DB6818474FF0FF307146CD -+:101CD0004FF00002014B184700300200551002007F -+:101CE00004000020184819497047FFF7FBFFDFF791 -+:101CF00065FA00BD4FF4805015490968884203D148 -+:101D0000144A13605B68184700BD000020BFFDE760 -+:101D10004FF480500E490968884210D10E4B186864 -+:101D20004FF0FF318842F1D080F308884FF0202136 -+:101D3000884204DD0948026802210A43026008481B -+:101D4000804708488047FFDFE8120020E8120020A3 -+:101D500000000020040000200030020024050040A4 -+:101D600039430100F51C020004207146084202D0EC -+:101D7000EFF3098101E0EFF3088188690238007808 -+:101D8000102813DB20280FDB2B280BDB0A4A1268F4 -+:101D90000A4B9A4203D1602804DB094A104702200B -+:101DA00008607047074A1047074A1047074A1268F9 -+:101DB0002C32126810470000B0000020BEBAFECAE4 -+:101DC0001D130000D5070200E311020004000020EB -+:101DD0000D4B0E4908470E4B0C4908470D4B0B495C -+:101DE00008470D4B094908470C4B084908470C4B5D -+:101DF000064908470B4B054908470B4B0349084761 -+:101E00000A4B024908470000F9BA0000092F0000F8 -+:101E1000812C00001D2B0000AB2A0000232D0000A8 -+:101E2000391300006728000029BD0000C911000017 -+:101E300000210160818070470021016041600172D2 -+:101E400070470A6802600B7903717047599500006A -+:101E50001B970000779800009B980000D598000021 -+:101E6000099900004399000081990000D39900006E -+:101E700031960000A7120000A7120000C140000028 -+:101E80000541000025410000E1410000274300001A -+:101E90000144000031440000F5440000153D0000FD -+:101EA000274700001948000039480000DD150000F0 -+:101EB00001160000311500008515000033160000E2 -+:101EC000C716000003600000B561000073650000E4 -+:101ED000896600000D67000087670000F967000051 -+:101EE00015690000E3690000616A000053480000C2 -+:101EF0005948000063480000D73C00001F4900001B -+:101F0000A13C00005F4A0000B74A00001F4B0000E0 -+:101F1000A7120000A7120000A7120000A7240000CB -+:101F20002D2500004925000065250000F32600004E -+:101F30008F25000099250000DB250000FD2500000D -+:101F4000D92600001B270000A7120000CF82000046 -+:101F5000F7820000F98200003383000061830000F3 -+:101F60004F840000DB840000EF8400003D8500000A -+:101F70002D860000D1870000F9880000D172000092 -+:101F800011890000A7120000A712000049B4000048 -+:101F9000B3B5000007B6000073B6000023B7000019 -+:101FA00051000000000000000000000000000000E0 -+:101FB0000000000000000000000000000000000021 -+:101FC0000000000000000000000000003E000000D3 -+:101FD0000000000000000000000000000000000001 -+:101FE00000000000000000000000000000000000F1 -+:101FF0000000000000000000500000000000000091 -+:1020000000000000000000000000000000000000D0 -+:1020100000000000000000000000000000000000C0 -+:1020200000000000100110013A0200001A02000432 -+:102030000506000013900000F38F0000FFFFFFFF74 -+:102040000000FFFF3BAC00003D39000041200000D4 -+:102050001B730000EB8D0000000000000000020078 -+:10206000000000000002000000000000000100006D -+:10207000000000006F8000004F800000BD80000065 -+:1020800029240000EB2300000B240000A7A7000078 -+:10209000D3A70000DBA9000021590000DD8000006B -+:1020A000000000000D810000772400000000000007 -+:1020B0000000000000000000BDA8000000000000BB -+:1020C000B359000000000000000000000000000004 -+:1020D0000000000000000000000000000000000000 -+:1020E000000000000000000000000000D5E5000036 -+:1020F00059E60000000000000000000000000000A1 -+:1021000059E700000000000000000000000000008F -+:1021100049F800000000000000000000000000007E -+:1021200005E900005DF4000000000000DDF400009F -+:1021300051F500000000000037EE0000D5EE000071 -+:102140000000000017F50000D1EF0000C9F1000009 -+:102150003DF2000041F30000A5EA0000000000008D -+:1021600000000000BFE90000000000001FE80000C0 -+:1021700095E70000BDF300007BF60000E9F60000E3 -+:1021800000000000A7E60000D7E6000007E6000018 -+:102190000000000021E70000000000000000000037 -+:1021A000000000004BF700000000000000000000ED -+:1021B000000000000000000000000000EFEC000044 -+:1021C000000000000000000000000000C3E8000064 -+:1021D000C1E700008BE800000000000053E80000A9 -+:1021E0000000000000000000B3F7000097F80000B6 -+:1021F0009BFA000017F900003DE9000051FA0000C9 -+:10220000000000004FEB000021EC000061F900002D -+:10221000ABF9000007F80000E5F90000F1ED00005F -+:1022200093560000935600009D400000E7AA00006E -+:102230009F750000531F000087AA01004BC50100D5 -+:10224000D9560000D9560000BF40000049AB00003D -+:1022500023760000C51F0000B5AA01005FC501007C -+:10226000D001D001400038005C0024004001F001A2 -+:1022700001000000010000000001020304120F1021 -+:102280001100000013000000B10502007F060200EB -+:10229000D10602001D07020071070200AB00020018 -+:1022A000CD01020035020200590402003B05020084 -+:1022B000750D01008B1E01000000000006000000EB -+:1022C0000A0000003200000073000000B4000000AB -+:1022D000B197010045850100235F010077DE010011 -+:1022E000F772010077DE01007D5F010005E001006B -+:1022F000876B010005E001007B5E010093DF0100B8 -+:10230000C971010093DF01004D630100FFE201008C -+:102310007F730100FFE20100555555D6BE898E003E -+:102320000000A606340DC21300004A03EE05920811 -+:10233000000096041409920D555555252627D6BE42 -+:10234000898EF401FA00960064004B0032001E00F2 -+:1023500014000A00050002000100000025410000F1 -+:1023600000000000AAAED7AB15412010000003000A -+:10237000656C7462000000000000000000000000B6 -+:1023800000000000870000000000000000000000C6 -+:1023900000000000BE83605ADB0B376038A5F5AA49 -+:1023A0009183886CB50E0200CD0E0200E50E02008E -+:1023B000FD0E02002D0F0200550F02007F0F0200DC -+:1023C000B30F0200150C0200650B0200990C02000D -+:1023D000150D0200250D0200510D0200A33B010066 -+:1023E000AB3B0100B93B01007F0D0200990D0200DB -+:1023F0006D0D0200770D0200A50D0200DB0D02003D -+:10240000FB0D0200090E0200170E0200270E02004B -+:102410003F0E0200570E02006D0E02000000000089 -+:10242000F7B800004DB9000063B9000021150200A3 -+:10243000490802000F090200D91802000919020018 -+:1024400041190200E93901000D3E01001C05004060 -+:10245000200500400010020078240200080000203F -+:10246000C401000044110000A8240200CC01002097 -+:102470001C110000A01100000118136813024C2069 -+:102480001A010222782720FB349B5F801280021EF3 -+:1024900010139F0A1B205C041AE2040128237F0109 -+:0824A00002A329091DFB013113 -+:00000001FF -diff -u -r -N a/components/softdevice/s132v5/toolchain/armgcc/armgcc_s132v5_nrf52832_xxaa.ld b/components/softdevice/s132v5/toolchain/armgcc/armgcc_s132v5_nrf52832_xxaa.ld ---- a/components/softdevice/s132v5/toolchain/armgcc/armgcc_s132v5_nrf52832_xxaa.ld 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v5/toolchain/armgcc/armgcc_s132v5_nrf52832_xxaa.ld 2018-07-18 17:06:46.000000000 +0200 -@@ -0,0 +1,33 @@ -+/* Linker script to configure memory regions. */ -+ -+SEARCH_DIR(.) -+GROUP(-lgcc -lc -lnosys) -+ -+MEMORY -+{ -+ FLASH (rx) : ORIGIN = 0x23000, LENGTH = 0x5d000 -+ RAM (rwx) : ORIGIN = 0x20001380, LENGTH = 0xec80 -+} -+ -+SECTIONS -+{ -+} -+ -+SECTIONS -+{ -+ . = ALIGN(4); -+ .mem_section_dummy_ram : -+ { -+ } -+ -+} INSERT AFTER .data; -+ -+SECTIONS -+{ -+ .mem_section_dummy_rom : -+ { -+ } -+ -+} INSERT AFTER .text -+ -+INCLUDE "nrf_common.ld" -diff -u -r -N a/components/softdevice/s132v5/toolchain/iar/iar_s132v5_nrf52832_xxaa.icf b/components/softdevice/s132v5/toolchain/iar/iar_s132v5_nrf52832_xxaa.icf ---- a/components/softdevice/s132v5/toolchain/iar/iar_s132v5_nrf52832_xxaa.icf 1970-01-01 01:00:00.000000000 +0100 -+++ b/components/softdevice/s132v5/toolchain/iar/iar_s132v5_nrf52832_xxaa.icf 2018-07-18 17:06:46.000000000 +0200 -@@ -0,0 +1,36 @@ -+/*###ICF### Section handled by ICF editor, don't touch! ****/ -+/*-Editor annotation file-*/ -+/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ -+/*-Specials-*/ -+define symbol __ICFEDIT_intvec_start__ = 0x23000; -+/*-Memory Regions-*/ -+define symbol __ICFEDIT_region_ROM_start__ = 0x23000; -+define symbol __ICFEDIT_region_ROM_end__ = 0x7ffff; -+define symbol __ICFEDIT_region_RAM_start__ = 0x20001380; -+define symbol __ICFEDIT_region_RAM_end__ = 0x2000ffff; -+export symbol __ICFEDIT_region_RAM_start__; -+export symbol __ICFEDIT_region_RAM_end__; -+/*-Sizes-*/ -+define symbol __ICFEDIT_size_cstack__ = ; -+define symbol __ICFEDIT_size_heap__ = ; -+/**** End of ICF editor section. ###ICF###*/ -+ -+define memory mem with size = 4G; -+define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; -+define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; -+ -+define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; -+define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; -+define block RO_END with alignment = 8, size = 0 { }; -+ -+initialize by copy { readwrite }; -+do not initialize { section .noinit }; -+ -+keep { section .intvec }; -+place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; -+place in ROM_region { readonly, -+ block RO_END }; -+place in RAM_region { readwrite, -+ block CSTACK, -+ block HEAP }; -+ -diff -u -r -N a/config/nrf52810/armgcc/generic_gcc_nrf52.ld b/config/nrf52810/armgcc/generic_gcc_nrf52.ld ---- a/config/nrf52810/armgcc/generic_gcc_nrf52.ld 2018-03-22 12:09:04.000000000 +0100 -+++ b/config/nrf52810/armgcc/generic_gcc_nrf52.ld 2018-07-18 17:11:46.000000000 +0200 -@@ -57,12 +57,6 @@ - KEEP(*(SORT(.sdh_soc_observers*))) - PROVIDE(__stop_sdh_soc_observers = .); - } > FLASH -- .sdh_state_observers : -- { -- PROVIDE(__start_sdh_state_observers = .); -- KEEP(*(SORT(.sdh_state_observers*))) -- PROVIDE(__stop_sdh_state_observers = .); -- } > FLASH - .sdh_stack_observers : - { - PROVIDE(__start_sdh_stack_observers = .); -@@ -75,6 +69,12 @@ - KEEP(*(SORT(.sdh_req_observers*))) - PROVIDE(__stop_sdh_req_observers = .); - } > FLASH -+ .sdh_state_observers : -+ { -+ PROVIDE(__start_sdh_state_observers = .); -+ KEEP(*(SORT(.sdh_state_observers*))) -+ PROVIDE(__stop_sdh_state_observers = .); -+ } > FLASH - .nrf_queue : - { - PROVIDE(__start_nrf_queue = .); -diff -u -r -N a/config/nrf52810/ses/flash_placement.xml b/config/nrf52810/ses/flash_placement.xml ---- a/config/nrf52810/ses/flash_placement.xml 2018-03-22 12:09:06.000000000 +0100 -+++ b/config/nrf52810/ses/flash_placement.xml 2018-07-18 17:11:48.000000000 +0200 -@@ -8,9 +8,9 @@ - - - -- - - -+ - - - -diff -u -r -N a/config/nrf52832/armgcc/generic_gcc_nrf52.ld b/config/nrf52832/armgcc/generic_gcc_nrf52.ld ---- a/config/nrf52832/armgcc/generic_gcc_nrf52.ld 2018-03-22 12:09:04.000000000 +0100 -+++ b/config/nrf52832/armgcc/generic_gcc_nrf52.ld 2018-07-18 17:11:46.000000000 +0200 -@@ -63,12 +63,6 @@ - KEEP(*(SORT(.sdh_soc_observers*))) - PROVIDE(__stop_sdh_soc_observers = .); - } > FLASH -- .sdh_state_observers : -- { -- PROVIDE(__start_sdh_state_observers = .); -- KEEP(*(SORT(.sdh_state_observers*))) -- PROVIDE(__stop_sdh_state_observers = .); -- } > FLASH - .sdh_stack_observers : - { - PROVIDE(__start_sdh_stack_observers = .); -@@ -81,6 +75,12 @@ - KEEP(*(SORT(.sdh_req_observers*))) - PROVIDE(__stop_sdh_req_observers = .); - } > FLASH -+ .sdh_state_observers : -+ { -+ PROVIDE(__start_sdh_state_observers = .); -+ KEEP(*(SORT(.sdh_state_observers*))) -+ PROVIDE(__stop_sdh_state_observers = .); -+ } > FLASH - .log_const_data : - { - PROVIDE(__start_log_const_data = .); -diff -u -r -N a/config/nrf52832/ses/flash_placement.xml b/config/nrf52832/ses/flash_placement.xml ---- a/config/nrf52832/ses/flash_placement.xml 2018-03-22 12:09:06.000000000 +0100 -+++ b/config/nrf52832/ses/flash_placement.xml 2018-07-18 17:11:48.000000000 +0200 -@@ -9,9 +9,9 @@ - - - -- - - -+ - - - -diff -u -r -N a/config/nrf52840/armgcc/generic_gcc_nrf52.ld b/config/nrf52840/armgcc/generic_gcc_nrf52.ld ---- a/config/nrf52840/armgcc/generic_gcc_nrf52.ld 2018-03-22 12:09:04.000000000 +0100 -+++ b/config/nrf52840/armgcc/generic_gcc_nrf52.ld 2018-07-18 17:11:46.000000000 +0200 -@@ -57,12 +57,6 @@ - KEEP(*(SORT(.sdh_soc_observers*))) - PROVIDE(__stop_sdh_soc_observers = .); - } > FLASH -- .sdh_state_observers : -- { -- PROVIDE(__start_sdh_state_observers = .); -- KEEP(*(SORT(.sdh_state_observers*))) -- PROVIDE(__stop_sdh_state_observers = .); -- } > FLASH - .sdh_stack_observers : - { - PROVIDE(__start_sdh_stack_observers = .); -@@ -75,6 +69,12 @@ - KEEP(*(SORT(.sdh_req_observers*))) - PROVIDE(__stop_sdh_req_observers = .); - } > FLASH -+ .sdh_state_observers : -+ { -+ PROVIDE(__start_sdh_state_observers = .); -+ KEEP(*(SORT(.sdh_state_observers*))) -+ PROVIDE(__stop_sdh_state_observers = .); -+ } > FLASH - .nrf_queue : - { - PROVIDE(__start_nrf_queue = .); -diff -u -r -N a/config/nrf52840/ses/flash_placement.xml b/config/nrf52840/ses/flash_placement.xml ---- a/config/nrf52840/ses/flash_placement.xml 2018-03-22 12:09:06.000000000 +0100 -+++ b/config/nrf52840/ses/flash_placement.xml 2018-07-18 17:11:48.000000000 +0200 -@@ -8,9 +8,9 @@ - - - -- - - -+ - - - -diff -u -r -N a/examples/connectivity/ble_connectivity/ble_connectivity.eww b/examples/connectivity/ble_connectivity/ble_connectivity.eww ---- a/examples/connectivity/ble_connectivity/ble_connectivity.eww 2018-03-22 12:25:08.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/ble_connectivity.eww 2018-07-18 17:28:06.000000000 +0200 -@@ -19,6 +19,10 @@ - - $WS_DIR$\pca10040e\ser_s112_uart\iar\ble_connectivity_s112_uart_pca10040e.ewp - -+ $WS_DIR$\pca10040\ser_s132v5_hci\iar\ble_connectivity_s132v5_hci_pca10040.ewp -+ -+ $WS_DIR$\pca10040\ser_s132v3_hci\iar\ble_connectivity_s132v3_hci_pca10040.ewp -+ - $WS_DIR$\pca10056\ser_s140_spi_5W\iar\ble_connectivity_s140_spi_5W_pca10056.ewp - - $WS_DIR$\pca10040\ser_s132_spi_5W\iar\ble_connectivity_s132_spi_5W_pca10040.ewp -@@ -28,5 +32,7 @@ - $WS_DIR$\pca10040e\ser_s112_spi_5W\iar\ble_connectivity_s112_spi_5W_pca10040e.ewp - - $WS_DIR$\pca10059\ser_s140_usb_hci\iar\ble_connectivity_s140_usb_hci_pca10059.ewp -+ -+ $WS_DIR$\pca10059\ser_s132v3_usb_hci\iar\ble_connectivity_s132v3_usb_hci_pca10059.ewp - - -\ No newline at end of file -diff -u -r -N a/examples/connectivity/ble_connectivity/config/ble_connectivity_s132v3_usb_hci_pca10059/app_usbd_string_config.h b/examples/connectivity/ble_connectivity/config/ble_connectivity_s132v3_usb_hci_pca10059/app_usbd_string_config.h ---- a/examples/connectivity/ble_connectivity/config/ble_connectivity_s132v3_usb_hci_pca10059/app_usbd_string_config.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/config/ble_connectivity_s132v3_usb_hci_pca10059/app_usbd_string_config.h 2018-07-18 17:42:30.000000000 +0200 -@@ -0,0 +1,130 @@ -+/** -+ * Copyright (c) 2016 - 2018, Nordic Semiconductor ASA -+ * -+ * All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without modification, -+ * are permitted provided that the following conditions are met: -+ * -+ * 1. Redistributions of source code must retain the above copyright notice, this -+ * list of conditions and the following disclaimer. -+ * -+ * 2. Redistributions in binary form, except as embedded into a Nordic -+ * Semiconductor ASA integrated circuit in a product or a software update for -+ * such product, must reproduce the above copyright notice, this list of -+ * conditions and the following disclaimer in the documentation and/or other -+ * materials provided with the distribution. -+ * -+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its -+ * contributors may be used to endorse or promote products derived from this -+ * software without specific prior written permission. -+ * -+ * 4. This software, with or without modification, must only be used with a -+ * Nordic Semiconductor ASA integrated circuit. -+ * -+ * 5. Any software provided in binary form under this license must not be reverse -+ * engineered, decompiled, modified and/or disassembled. -+ * -+ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -+ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -+ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ * -+ */ -+#ifndef APP_USBD_STRING_CONFIG_H -+#define APP_USBD_STRING_CONFIG_H -+ -+/** -+ * @defgroup app_usbd_string_conf USBD string configuration -+ * @ingroup app_usbd_string_desc -+ * -+ * @brief @tagAPI52840 Configuration of the string module that can be easily affected by the final -+ * user. -+ * @{ -+ */ -+ -+/** -+ * @brief Supported languages identifiers -+ * -+ * Comma separated list of supported languages. -+ */ -+#define APP_USBD_STRINGS_LANGIDS \ -+ ((uint16_t)APP_USBD_LANG_ENGLISH | (uint16_t)APP_USBD_SUBLANG_ENGLISH_US) -+ -+/** -+ * @brief Manufacturer name string descriptor -+ * -+ * Comma separated list of manufacturer names for each defined language. -+ * Use @ref APP_USBD_STRING_DESC macro to create string descriptor. -+ * -+ * The order of manufacturer names has to be the same like in -+ * @ref APP_USBD_STRINGS_LANGIDS. -+ */ -+#define APP_USBD_STRINGS_MANUFACTURER \ -+ APP_USBD_STRING_DESC('N', 'o', 'r', 'd', 'i', 'c', ' ', 'S', 'e', 'm', 'i', 'c', 'o', 'n', 'd', 'u', 'c', 't', 'o', 'r') -+ -+/** -+ * @brief Define whether @ref APP_USBD_STRINGS_MANUFACTURER is created by @ref APP_USBD_STRING_DESC -+ * or declared as global variable. -+ * */ -+#define APP_USBD_STRINGS_MANUFACTURER_EXTERN 0 -+ -+/** -+ * @brief Product name string descriptor -+ * -+ * List of product names defined the same way like in @ref APP_USBD_STRINGS_MANUFACTURER -+ */ -+#define APP_USBD_STRINGS_PRODUCT \ -+ APP_USBD_STRING_DESC('n', 'R', 'F', '5', '2', ' ', 'C', 'o', 'n', 'n', 'e', 'c', 't', 'i', 'v', 'i', 't', 'y') -+ -+ -+/** -+ * @brief Define whether @ref APP_USBD_STRINGS_PRODUCT is created by @ref APP_USBD_STRING_DESC -+ * or declared as global variable. -+ * */ -+#define APP_USBD_STRINGS_PRODUCT_EXTERN 0 -+ -+/** -+ * @brief Serial number string descriptor -+ * -+ * Create serial number string descriptor using @ref APP_USBD_STRING_DESC, -+ * or configure it to point to any internal variable pointer filled with descriptor. -+ * -+ * @note -+ * There is only one SERIAL number inside the library and it is Language independent. -+ */ -+#define APP_USBD_STRING_SERIAL g_extern_serial_number -+ -+/** -+ * @brief Define whether @ref APP_USBD_STRING_SERIAL is created by @ref APP_USBD_STRING_DESC -+ * or declared as global variable. -+ * */ -+#define APP_USBD_STRING_SERIAL_EXTERN 1 -+ -+/** -+ * @brief User strings default values -+ * -+ * This value stores all application specific user strings with its default initialization. -+ * The setup is done by X-macros. -+ * Expected macro parameters: -+ * @code -+ * X(mnemonic, [=str_idx], ...) -+ * @endcode -+ * - @c mnemonic: Mnemonic of the string descriptor that would be added to -+ * @ref app_usbd_string_desc_idx_t enumerator. -+ * - @c str_idx : String index value, may be set or left empty. -+ * For example WinUSB driver requires descriptor to be present on 0xEE index. -+ * Then use X(USBD_STRING_WINUSB, =0xEE, (APP_USBD_STRING_DESC(...))) -+ * - @c ... : List of string descriptors for each defined language. -+ */ -+#define APP_USBD_STRINGS_USER \ -+ X(APP_USER_1, , APP_USBD_STRING_DESC('U', 's', 'e', 'r', ' ', '1')) -+ -+/** @} */ -+#endif /* APP_USBD_STRING_CONFIG_H */ -diff -u -r -N a/examples/connectivity/ble_connectivity/main.c b/examples/connectivity/ble_connectivity/main.c ---- a/examples/connectivity/ble_connectivity/main.c 2018-03-22 15:25:10.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/main.c 2018-07-18 17:42:30.000000000 +0200 -@@ -57,13 +57,13 @@ - #include "ser_conn_handlers.h" - #include "boards.h" - #include "nrf_drv_clock.h" -- -+#include "app_timer.h" - #include "nrf_log.h" - #include "nrf_log_ctrl.h" - #include "nrf_log_default_backends.h" - - #include "ser_phy_debug_comm.h" -- -+#include "ser_config.h" - #if defined(APP_USBD_ENABLED) && APP_USBD_ENABLED - #include "app_usbd_serial_num.h" - #ifdef BOARD_PCA10059 -@@ -73,7 +73,6 @@ - - static volatile bool m_usb_started; - -- - static void usbd_user_evt_handler(app_usbd_event_type_t event) - { - switch (event) -@@ -120,9 +119,6 @@ - - static void usbd_enable(void) - { --#ifdef BOARD_PCA10059 -- APP_ERROR_CHECK(nrf_dfu_trigger_usb_init()); --#endif - APP_ERROR_CHECK(app_usbd_power_events_enable()); - - /* Process USB events until USB is started. This is related to the fact that -@@ -138,28 +134,88 @@ - } - #endif //APP_USBD_ENABLED - -+typedef struct __attribute__((packed)) -+{ -+ uint32_t magic_number; /* Magic number to verify the presence of this structure in memory */ -+ uint32_t struct_version : 8; /* Version of this struct format */ -+ uint32_t rfu0 : 24; /* Reserved for future use, shall be 0xFFFFFF */ -+ uint32_t revision_hash; /* Unique revision identifier */ -+ uint32_t version_major : 8; /* Major version number */ -+ uint32_t version_minor : 8; /* Minor version number */ -+ uint32_t version_patch : 8; /* Patch version number */ -+ uint32_t rfu1 : 8; /* Reserved for future use, shall be 0xFF */ -+ uint32_t sd_ble_api_version : 8; /* SoftDevice BLE API version number */ -+ uint32_t transport_type : 8; /* Connectivity transport type, 1 = UART HCI */ -+ uint32_t rfu2 : 16; /* Reserved for future use, shall be 0xFFFF */ -+ uint32_t baud_rate; /* UART transport baud rate */ -+} version_info_t; -+#if defined ( __CC_ARM ) -+static const version_info_t version_info __attribute__((at(0x30000))) = -+#elif defined ( __GNUC__ ) || defined ( __SES_ARM ) -+volatile static const version_info_t version_info __attribute__ ((section(".connectivity_version_info"))) = -+#elif defined ( __ICCARM__ ) -+__root const version_info_t version_info @ 0x30000 = -+#endif -+{ -+ .magic_number = 0x46D8A517, -+ .struct_version = 2, -+ .rfu0 = 0xFFFFFF, -+ .revision_hash = 0, -+ .version_major = 2, -+ .version_minor = 0, -+ .version_patch = 1, -+ .rfu1 = 0xFF, -+ .sd_ble_api_version = NRF_SD_BLE_API_VERSION, -+ .transport_type = 1, -+ .rfu2 = 0xFFFF, -+ .baud_rate = SER_PHY_UART_BAUDRATE_VAL, -+}; -+ - static void on_idle(void) - { -+ -+ if (!NRF_LOG_PROCESS()) -+ { -+ // Wait for an event. -+ if (nrf_sdh_is_enabled()) -+ { -+ ret_code_t ret_code = sd_app_evt_wait(); -+ ASSERT((ret_code == NRF_SUCCESS) || (ret_code == NRF_ERROR_SOFTDEVICE_NOT_ENABLED)); -+ UNUSED_VARIABLE(ret_code); -+ } -+ else -+ { -+ // Wait for an event. -+ __WFE(); -+ // Clear the internal event register. -+ __SEV(); -+ __WFE(); -+ } -+ } -+ - #if defined(APP_USBD_ENABLED) && APP_USBD_ENABLED -+ - while (app_usbd_event_queue_process()) - { - /* Nothing to do */ - } - #endif -- if (!NRF_LOG_PROCESS()) -- { -- /* Sleep waiting for an application event. */ -- uint32_t err_code = sd_app_evt_wait(); -- APP_ERROR_CHECK(err_code); -- } -+} -+ -+uint32_t timestamp(void) -+{ -+ return DWT->CYCCNT; - } - - /**@brief Main function of the connectivity application. */ - int main(void) - { -+ CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; -+ DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk; -+ - uint32_t err_code = NRF_SUCCESS; - -- APP_ERROR_CHECK(NRF_LOG_INIT(NULL)); -+ APP_ERROR_CHECK(NRF_LOG_INIT(timestamp)); - - NRF_LOG_DEFAULT_BACKENDS_INIT(); - -@@ -189,6 +245,8 @@ - } - - nrf_drv_clock_hfclk_request(NULL); -+ nrf_drv_clock_lfclk_request(NULL); -+ - while (!nrf_drv_clock_hfclk_is_running()) - {} - -@@ -196,6 +254,10 @@ - usbd_init(); - #endif - -+#ifdef BOARD_PCA10059 -+ APP_ERROR_CHECK(nrf_dfu_trigger_usb_init()); -+#endif -+ - /* Open serialization HAL Transport layer and subscribe for HAL Transport events. */ - err_code = ser_hal_transport_open(ser_conn_hal_transport_event_handle); - APP_ERROR_CHECK(err_code); -@@ -207,6 +269,9 @@ - err_code = nrf_sdh_enable_request(); - APP_ERROR_CHECK(err_code); - -+ err_code = app_timer_init(); -+ APP_ERROR_CHECK(err_code); -+ - ser_conn_on_no_mem_handler_set(on_idle); - - /* Enter main loop. */ -@@ -231,6 +296,7 @@ - APP_ERROR_CHECK(err_code); - - on_idle(); -+ - } - } - /** @} */ -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/arm4/ble_connectivity_s132_hci_pca10040.uvproj b/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/arm4/ble_connectivity_s132_hci_pca10040.uvproj ---- a/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/arm4/ble_connectivity_s132_hci_pca10040.uvproj 2018-03-22 12:24:54.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/arm4/ble_connectivity_s132_hci_pca10040.uvproj 2018-07-18 17:27:48.000000000 +0200 -@@ -323,8 +323,8 @@ - - - 0 -- 0x200098a8 -- 0x6758 -+ 0x2000b8a8 -+ 0x4758 - - - 0 -@@ -4313,8 +4313,8 @@ - - - 0 -- 0x200098a8 -- 0x6758 -+ 0x2000b8a8 -+ 0x4758 - - - 0 -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/arm5_no_packs/ble_connectivity_s132_hci_pca10040.uvprojx b/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/arm5_no_packs/ble_connectivity_s132_hci_pca10040.uvprojx ---- a/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/arm5_no_packs/ble_connectivity_s132_hci_pca10040.uvprojx 2018-03-22 12:24:58.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/arm5_no_packs/ble_connectivity_s132_hci_pca10040.uvprojx 2018-07-18 17:27:54.000000000 +0200 -@@ -329,8 +329,8 @@ - - - 0 -- 0x200098a8 -- 0x6758 -+ 0x2000b8a8 -+ 0x4758 - - - 0 -@@ -4244,8 +4244,8 @@ - - - 0 -- 0x200098a8 -- 0x6758 -+ 0x2000b8a8 -+ 0x4758 - - - 0 -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/armgcc/ble_connectivity_gcc_nrf52.ld b/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/armgcc/ble_connectivity_gcc_nrf52.ld ---- a/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/armgcc/ble_connectivity_gcc_nrf52.ld 2018-03-22 12:24:48.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/armgcc/ble_connectivity_gcc_nrf52.ld 2018-07-18 17:27:40.000000000 +0200 -@@ -6,11 +6,18 @@ - MEMORY - { - FLASH (rx) : ORIGIN = 0x26000, LENGTH = 0x5a000 -- RAM (rwx) : ORIGIN = 0x200098a8, LENGTH = 0x6758 -+ RAM (rwx) : ORIGIN = 0x2000b8a8, LENGTH = 0x4758 -+ connectivity_version_info (r) : ORIGIN = 0x30000, LENGTH = 0x18 - } - - SECTIONS - { -+ .connectivity_version_info : -+ { -+ PROVIDE(__start_connectivity_version_info = .); -+ KEEP(*(SORT(.connectivity_version_info*))) -+ PROVIDE(__stop_connectivity_version_info = .); -+ } > connectivity_version_info - } - - SECTIONS -@@ -63,12 +70,6 @@ - KEEP(*(.nrf_balloc)) - PROVIDE(__stop_nrf_balloc = .); - } > FLASH -- .sdh_state_observers : -- { -- PROVIDE(__start_sdh_state_observers = .); -- KEEP(*(SORT(.sdh_state_observers*))) -- PROVIDE(__stop_sdh_state_observers = .); -- } > FLASH - .sdh_stack_observers : - { - PROVIDE(__start_sdh_stack_observers = .); -@@ -81,6 +82,12 @@ - KEEP(*(SORT(.sdh_req_observers*))) - PROVIDE(__stop_sdh_req_observers = .); - } > FLASH -+ .sdh_state_observers : -+ { -+ PROVIDE(__start_sdh_state_observers = .); -+ KEEP(*(SORT(.sdh_state_observers*))) -+ PROVIDE(__stop_sdh_state_observers = .); -+ } > FLASH - - } INSERT AFTER .text - -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/iar/ble_connectivity_iar_nRF5x.icf b/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/iar/ble_connectivity_iar_nRF5x.icf ---- a/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/iar/ble_connectivity_iar_nRF5x.icf 2018-03-22 12:25:06.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/iar/ble_connectivity_iar_nRF5x.icf 2018-07-18 17:28:04.000000000 +0200 -@@ -6,7 +6,7 @@ - /*-Memory Regions-*/ - define symbol __ICFEDIT_region_ROM_start__ = 0x26000; - define symbol __ICFEDIT_region_ROM_end__ = 0x7ffff; --define symbol __ICFEDIT_region_RAM_start__ = 0x200098a8; -+define symbol __ICFEDIT_region_RAM_start__ = 0x2000b8a8; - define symbol __ICFEDIT_region_RAM_end__ = 0x2000ffff; - export symbol __ICFEDIT_region_RAM_start__; - export symbol __ICFEDIT_region_RAM_end__; -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/ble_connectivity_s132_hci_pca10040.emProject b/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/ble_connectivity_s132_hci_pca10040.emProject ---- a/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/ble_connectivity_s132_hci_pca10040.emProject 2018-03-22 12:25:12.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/ble_connectivity_s132_hci_pca10040.emProject 2018-07-18 17:28:12.000000000 +0200 -@@ -27,8 +27,8 @@ - linker_printf_width_precision_supported="Yes" - linker_printf_fmt_level="long" - linker_section_placement_file="flash_placement.xml" -- linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x80000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x10000;FLASH_START=0x26000;FLASH_SIZE=0x5a000;RAM_START=0x200098a8;RAM_SIZE=0x6758" -- linker_section_placements_segments="FLASH RX 0x0 0x80000;RAM RWX 0x20000000 0x10000" -+ linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x80000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x10000;FLASH_START=0x26000;FLASH_SIZE=0x5a000;RAM_START=0x2000b8a8;RAM_SIZE=0x4758" -+ linker_section_placements_segments="FLASH RX 0x0 0x80000;RAM RWX 0x20000000 0x10000;connectivity_version_info RX 0x30000 0x18" - project_directory="" - project_type="Executable" /> - -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/flash_placement.xml b/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/flash_placement.xml ---- a/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/flash_placement.xml 2018-03-22 12:25:12.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/flash_placement.xml 2018-07-18 17:28:12.000000000 +0200 -@@ -11,9 +11,9 @@ - - - -- - - -+ - - - -@@ -40,4 +40,7 @@ - - - -+ -+ -+ - -diff -u -r -N a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/arm4/ble_connectivity_s132v3_hci_pca10040.uvopt b/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/arm4/ble_connectivity_s132v3_hci_pca10040.uvopt ---- a/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/arm4/ble_connectivity_s132v3_hci_pca10040.uvopt 1970-01-01 01:00:00.000000000 +0100 -+++ b/examples/connectivity/ble_connectivity/pca10040/ser_s132v3_hci/arm4/ble_connectivity_s132v3_hci_pca10040.uvopt 2018-07-18 17:27:50.000000000 +0200 -@@ -0,0 +1,51 @@ -+ -+ -+ -+ 1.0 -+ -+